aboutsummaryrefslogtreecommitdiffstats
path: root/library
diff options
context:
space:
mode:
Diffstat (limited to 'library')
-rw-r--r--library/HTMLPurifier.autoload.php8
-rw-r--r--library/HTMLPurifier.composer.php4
-rw-r--r--library/HTMLPurifier.func.php8
-rw-r--r--library/HTMLPurifier.includes.php21
-rw-r--r--library/HTMLPurifier.kses.php4
-rw-r--r--library/HTMLPurifier.php137
-rw-r--r--library/HTMLPurifier.safe-includes.php19
-rw-r--r--library/HTMLPurifier/Arborize.php71
-rw-r--r--library/HTMLPurifier/AttrCollections.php53
-rw-r--r--library/HTMLPurifier/AttrDef.php53
-rw-r--r--library/HTMLPurifier/AttrDef/CSS.php39
-rw-r--r--library/HTMLPurifier/AttrDef/CSS/AlphaValue.php27
-rw-r--r--library/HTMLPurifier/AttrDef/CSS/Background.php60
-rw-r--r--library/HTMLPurifier/AttrDef/CSS/BackgroundPosition.php54
-rw-r--r--library/HTMLPurifier/AttrDef/CSS/Border.php21
-rw-r--r--library/HTMLPurifier/AttrDef/CSS/Color.php67
-rw-r--r--library/HTMLPurifier/AttrDef/CSS/Composite.php22
-rw-r--r--library/HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php28
-rw-r--r--library/HTMLPurifier/AttrDef/CSS/Filter.php49
-rw-r--r--library/HTMLPurifier/AttrDef/CSS/Font.php89
-rw-r--r--library/HTMLPurifier/AttrDef/CSS/FontFamily.php185
-rw-r--r--library/HTMLPurifier/AttrDef/CSS/Ident.php32
-rw-r--r--library/HTMLPurifier/AttrDef/CSS/ImportantDecorator.php28
-rw-r--r--library/HTMLPurifier/AttrDef/CSS/Length.php60
-rw-r--r--library/HTMLPurifier/AttrDef/CSS/ListStyle.php78
-rw-r--r--library/HTMLPurifier/AttrDef/CSS/Multiple.php31
-rw-r--r--library/HTMLPurifier/AttrDef/CSS/Number.php45
-rw-r--r--library/HTMLPurifier/AttrDef/CSS/Percentage.php36
-rw-r--r--library/HTMLPurifier/AttrDef/CSS/TextDecoration.php20
-rw-r--r--library/HTMLPurifier/AttrDef/CSS/URI.php38
-rw-r--r--library/HTMLPurifier/AttrDef/Clone.php44
-rw-r--r--library/HTMLPurifier/AttrDef/Enum.php28
-rw-r--r--library/HTMLPurifier/AttrDef/HTML/Bool.php35
-rw-r--r--library/HTMLPurifier/AttrDef/HTML/Class.php22
-rw-r--r--library/HTMLPurifier/AttrDef/HTML/Color.php45
-rw-r--r--library/HTMLPurifier/AttrDef/HTML/FrameTarget.php25
-rw-r--r--library/HTMLPurifier/AttrDef/HTML/ID.php71
-rw-r--r--library/HTMLPurifier/AttrDef/HTML/Length.php41
-rw-r--r--library/HTMLPurifier/AttrDef/HTML/LinkTypes.php43
-rw-r--r--library/HTMLPurifier/AttrDef/HTML/MultiLength.php51
-rw-r--r--library/HTMLPurifier/AttrDef/HTML/Nmtokens.php40
-rw-r--r--library/HTMLPurifier/AttrDef/HTML/Pixels.php60
-rw-r--r--library/HTMLPurifier/AttrDef/Integer.php56
-rw-r--r--library/HTMLPurifier/AttrDef/Lang.php39
-rw-r--r--library/HTMLPurifier/AttrDef/Switch.php27
-rw-r--r--library/HTMLPurifier/AttrDef/Text.php10
-rw-r--r--library/HTMLPurifier/AttrDef/URI.php72
-rw-r--r--library/HTMLPurifier/AttrDef/URI/Email.php5
-rw-r--r--library/HTMLPurifier/AttrDef/URI/Email/SimpleCheck.php14
-rw-r--r--library/HTMLPurifier/AttrDef/URI/Host.php104
-rw-r--r--library/HTMLPurifier/AttrDef/URI/IPv4.php28
-rw-r--r--library/HTMLPurifier/AttrDef/URI/IPv6.php106
-rw-r--r--library/HTMLPurifier/AttrTransform.php28
-rw-r--r--library/HTMLPurifier/AttrTransform/Background.php21
-rw-r--r--library/HTMLPurifier/AttrTransform/BdoDir.php14
-rw-r--r--library/HTMLPurifier/AttrTransform/BgColor.php21
-rw-r--r--library/HTMLPurifier/AttrTransform/BoolToCSS.php33
-rw-r--r--library/HTMLPurifier/AttrTransform/Border.php18
-rw-r--r--library/HTMLPurifier/AttrTransform/EnumToCSS.php46
-rw-r--r--library/HTMLPurifier/AttrTransform/ImgRequired.php19
-rw-r--r--library/HTMLPurifier/AttrTransform/ImgSpace.php39
-rw-r--r--library/HTMLPurifier/AttrTransform/Input.php34
-rw-r--r--library/HTMLPurifier/AttrTransform/Lang.php15
-rw-r--r--library/HTMLPurifier/AttrTransform/Length.php28
-rw-r--r--library/HTMLPurifier/AttrTransform/Name.php22
-rw-r--r--library/HTMLPurifier/AttrTransform/NameSync.php28
-rw-r--r--library/HTMLPurifier/AttrTransform/Nofollow.php52
-rw-r--r--library/HTMLPurifier/AttrTransform/SafeEmbed.php12
-rw-r--r--library/HTMLPurifier/AttrTransform/SafeObject.php16
-rw-r--r--library/HTMLPurifier/AttrTransform/SafeParam.php29
-rw-r--r--library/HTMLPurifier/AttrTransform/ScriptRequired.php9
-rw-r--r--library/HTMLPurifier/AttrTransform/TargetBlank.php45
-rw-r--r--library/HTMLPurifier/AttrTransform/Textarea.php19
-rw-r--r--library/HTMLPurifier/AttrTypes.php45
-rw-r--r--library/HTMLPurifier/AttrValidator.php66
-rw-r--r--library/HTMLPurifier/Bootstrap.php90
-rw-r--r--library/HTMLPurifier/CSSDefinition.php452
-rw-r--r--library/HTMLPurifier/ChildDef.php26
-rw-r--r--library/HTMLPurifier/ChildDef/Chameleon.php33
-rw-r--r--library/HTMLPurifier/ChildDef/Custom.php56
-rw-r--r--library/HTMLPurifier/ChildDef/Empty.php22
-rw-r--r--library/HTMLPurifier/ChildDef/List.php86
-rw-r--r--library/HTMLPurifier/ChildDef/Optional.php31
-rw-r--r--library/HTMLPurifier/ChildDef/Required.php103
-rw-r--r--library/HTMLPurifier/ChildDef/StrictBlockquote.php96
-rw-r--r--library/HTMLPurifier/ChildDef/Table.php302
-rw-r--r--library/HTMLPurifier/Config.php681
-rw-r--r--library/HTMLPurifier/ConfigSchema.php78
-rw-r--r--library/HTMLPurifier/ConfigSchema/Builder/ConfigSchema.php8
-rw-r--r--library/HTMLPurifier/ConfigSchema/Builder/Xml.php94
-rw-r--r--library/HTMLPurifier/ConfigSchema/Interchange.php11
-rw-r--r--library/HTMLPurifier/ConfigSchema/Interchange/Directive.php28
-rw-r--r--library/HTMLPurifier/ConfigSchema/Interchange/Id.php33
-rw-r--r--library/HTMLPurifier/ConfigSchema/InterchangeBuilder.php90
-rw-r--r--library/HTMLPurifier/ConfigSchema/Validator.php90
-rw-r--r--library/HTMLPurifier/ConfigSchema/ValidatorAtom.php108
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema.serbin13244 -> 15000 bytes
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/CSS.AllowedFonts.txt12
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/CSS.ForbiddenProperties.txt13
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/CSS.Trusted.txt9
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/Cache.SerializerPermissions.txt11
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/Core.AllowHostnameUnderscore.txt16
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/Core.ColorKeywords.txt3
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/Core.DisableExcludes.txt14
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/Core.EnableIDNA.txt9
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidChildren.txt6
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/Core.NormalizeNewlines.txt11
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/Core.RemoveProcessingInstructions.txt11
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/Filter.YouTube.txt5
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/HTML.Allowed.txt11
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/HTML.AllowedComments.txt10
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/HTML.AllowedCommentsRegexp.txt15
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/HTML.AllowedElements.txt17
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/HTML.FlashAllowFullScreen.txt11
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/HTML.Nofollow.txt7
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/HTML.SafeIframe.txt13
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/HTML.SafeScripting.txt10
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/HTML.TargetBlank.txt8
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/HTML.Trusted.txt1
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/Output.FixInnerHTML.txt15
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/URI.AllowedSchemes.txt4
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/URI.DisableResources.txt7
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/URI.MungeSecretKey.txt2
-rw-r--r--library/HTMLPurifier/ConfigSchema/schema/URI.SafeIframeRegexp.txt22
-rw-r--r--library/HTMLPurifier/ContentSets.php55
-rw-r--r--library/HTMLPurifier/Context.php61
-rw-r--r--library/HTMLPurifier/Definition.php26
-rw-r--r--library/HTMLPurifier/DefinitionCache.php57
-rw-r--r--library/HTMLPurifier/DefinitionCache/Decorator.php76
-rw-r--r--library/HTMLPurifier/DefinitionCache/Decorator/Cleanup.php61
-rw-r--r--library/HTMLPurifier/DefinitionCache/Decorator/Memory.php65
-rw-r--r--library/HTMLPurifier/DefinitionCache/Decorator/Template.php.in59
-rw-r--r--library/HTMLPurifier/DefinitionCache/Null.php53
-rw-r--r--library/HTMLPurifier/DefinitionCache/Serializer.php235
-rwxr-xr-x[-rw-r--r--]library/HTMLPurifier/DefinitionCache/Serializer/README0
-rw-r--r--library/HTMLPurifier/DefinitionCacheFactory.php47
-rw-r--r--library/HTMLPurifier/Doctype.php17
-rw-r--r--library/HTMLPurifier/DoctypeRegistry.php87
-rw-r--r--library/HTMLPurifier/ElementDef.php85
-rw-r--r--library/HTMLPurifier/Encoder.php301
-rw-r--r--library/HTMLPurifier/EntityLookup.php16
-rw-r--r--library/HTMLPurifier/EntityLookup/entities.ser2
-rw-r--r--library/HTMLPurifier/EntityParser.php53
-rw-r--r--library/HTMLPurifier/ErrorCollector.php87
-rw-r--r--library/HTMLPurifier/ErrorStruct.php20
-rw-r--r--library/HTMLPurifier/Filter.php18
-rw-r--r--library/HTMLPurifier/Filter/ExtractStyleBlocks.php257
-rw-r--r--library/HTMLPurifier/Filter/YouTube.php56
-rw-r--r--library/HTMLPurifier/Generator.php164
-rw-r--r--library/HTMLPurifier/HTMLDefinition.php211
-rw-r--r--library/HTMLPurifier/HTMLModule.php122
-rw-r--r--library/HTMLPurifier/HTMLModule/Bdo.php21
-rw-r--r--library/HTMLPurifier/HTMLModule/CommonAttributes.php7
-rw-r--r--library/HTMLPurifier/HTMLModule/Edit.php25
-rw-r--r--library/HTMLPurifier/HTMLModule/Forms.php216
-rw-r--r--library/HTMLPurifier/HTMLModule/Hypertext.php15
-rw-r--r--library/HTMLPurifier/HTMLModule/Iframe.php51
-rw-r--r--library/HTMLPurifier/HTMLModule/Image.php17
-rw-r--r--library/HTMLPurifier/HTMLModule/Legacy.php89
-rw-r--r--library/HTMLPurifier/HTMLModule/List.php28
-rw-r--r--library/HTMLPurifier/HTMLModule/Name.php13
-rw-r--r--library/HTMLPurifier/HTMLModule/Nofollow.php25
-rw-r--r--library/HTMLPurifier/HTMLModule/NonXMLCommonAttributes.php6
-rw-r--r--library/HTMLPurifier/HTMLModule/Object.php31
-rw-r--r--library/HTMLPurifier/HTMLModule/Presentation.php26
-rw-r--r--library/HTMLPurifier/HTMLModule/Proprietary.php19
-rw-r--r--library/HTMLPurifier/HTMLModule/Ruby.php17
-rw-r--r--library/HTMLPurifier/HTMLModule/SafeEmbed.php20
-rw-r--r--library/HTMLPurifier/HTMLModule/SafeObject.php33
-rw-r--r--library/HTMLPurifier/HTMLModule/SafeScripting.php40
-rw-r--r--library/HTMLPurifier/HTMLModule/Scripting.php31
-rw-r--r--library/HTMLPurifier/HTMLModule/StyleAttribute.php15
-rw-r--r--library/HTMLPurifier/HTMLModule/Tables.php29
-rw-r--r--library/HTMLPurifier/HTMLModule/Target.php11
-rw-r--r--library/HTMLPurifier/HTMLModule/TargetBlank.php24
-rw-r--r--library/HTMLPurifier/HTMLModule/Text.php56
-rw-r--r--library/HTMLPurifier/HTMLModule/Tidy.php85
-rw-r--r--library/HTMLPurifier/HTMLModule/Tidy/Name.php15
-rw-r--r--library/HTMLPurifier/HTMLModule/Tidy/Proprietary.php14
-rw-r--r--library/HTMLPurifier/HTMLModule/Tidy/Strict.php28
-rw-r--r--library/HTMLPurifier/HTMLModule/Tidy/Transitional.php7
-rw-r--r--library/HTMLPurifier/HTMLModule/Tidy/XHTML.php15
-rw-r--r--library/HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php146
-rw-r--r--library/HTMLPurifier/HTMLModule/XMLCommonAttributes.php6
-rw-r--r--library/HTMLPurifier/HTMLModuleManager.php166
-rw-r--r--library/HTMLPurifier/IDAccumulator.php24
-rw-r--r--library/HTMLPurifier/Injector.php198
-rw-r--r--library/HTMLPurifier/Injector/AutoParagraph.php99
-rw-r--r--library/HTMLPurifier/Injector/DisplayLinkURI.php22
-rw-r--r--library/HTMLPurifier/Injector/Linkify.php27
-rw-r--r--library/HTMLPurifier/Injector/PurifierLinkify.php46
-rw-r--r--library/HTMLPurifier/Injector/RemoveEmpty.php82
-rw-r--r--library/HTMLPurifier/Injector/RemoveSpansWithoutAttributes.php36
-rw-r--r--library/HTMLPurifier/Injector/SafeObject.php53
-rw-r--r--library/HTMLPurifier/Language.php97
-rw-r--r--library/HTMLPurifier/Language/classes/en-x-test.php3
-rw-r--r--library/HTMLPurifier/Language/messages/en.php90
-rw-r--r--library/HTMLPurifier/LanguageFactory.php81
-rw-r--r--library/HTMLPurifier/Length.php91
-rw-r--r--library/HTMLPurifier/Lexer.php191
-rw-r--r--library/HTMLPurifier/Lexer/DOMLex.php161
-rw-r--r--library/HTMLPurifier/Lexer/DirectLex.php217
-rw-r--r--library/HTMLPurifier/Lexer/PEARSax3.php139
-rw-r--r--library/HTMLPurifier/Lexer/PH5P.php4324
-rw-r--r--library/HTMLPurifier/Node.php49
-rw-r--r--library/HTMLPurifier/Node/Comment.php36
-rw-r--r--library/HTMLPurifier/Node/Element.php59
-rw-r--r--library/HTMLPurifier/Node/Text.php54
-rw-r--r--library/HTMLPurifier/PercentEncoder.php37
-rw-r--r--library/HTMLPurifier/Printer.php134
-rw-r--r--library/HTMLPurifier/Printer/CSSDefinition.php12
-rw-r--r--library/HTMLPurifier/Printer/ConfigForm.php257
-rw-r--r--library/HTMLPurifier/Printer/HTMLDefinition.php214
-rw-r--r--library/HTMLPurifier/PropertyList.php68
-rw-r--r--library/HTMLPurifier/PropertyListIterator.php22
-rw-r--r--library/HTMLPurifier/Queue.php56
-rw-r--r--library/HTMLPurifier/Strategy.php8
-rw-r--r--library/HTMLPurifier/Strategy/Composite.php13
-rw-r--r--library/HTMLPurifier/Strategy/Core.php5
-rw-r--r--library/HTMLPurifier/Strategy/FixNesting.php349
-rw-r--r--library/HTMLPurifier/Strategy/MakeWellFormed.php379
-rw-r--r--library/HTMLPurifier/Strategy/RemoveForeignElements.php94
-rw-r--r--library/HTMLPurifier/Strategy/ValidateAttributes.php22
-rw-r--r--library/HTMLPurifier/StringHash.php16
-rw-r--r--library/HTMLPurifier/StringHashParser.php52
-rw-r--r--library/HTMLPurifier/TagTransform.php15
-rw-r--r--library/HTMLPurifier/TagTransform/Font.php42
-rw-r--r--library/HTMLPurifier/TagTransform/Simple.php21
-rw-r--r--library/HTMLPurifier/Token.php81
-rw-r--r--library/HTMLPurifier/Token/Comment.php24
-rw-r--r--library/HTMLPurifier/Token/Empty.php6
-rw-r--r--library/HTMLPurifier/Token/End.php9
-rw-r--r--library/HTMLPurifier/Token/Start.php1
-rw-r--r--library/HTMLPurifier/Token/Tag.php22
-rw-r--r--library/HTMLPurifier/Token/Text.php34
-rw-r--r--library/HTMLPurifier/TokenFactory.php80
-rw-r--r--library/HTMLPurifier/URI.php257
-rw-r--r--library/HTMLPurifier/URIDefinition.php39
-rw-r--r--library/HTMLPurifier/URIFilter.php45
-rw-r--r--library/HTMLPurifier/URIFilter/DisableExternal.php45
-rw-r--r--library/HTMLPurifier/URIFilter/DisableExternalResources.php17
-rw-r--r--library/HTMLPurifier/URIFilter/DisableResources.php22
-rw-r--r--library/HTMLPurifier/URIFilter/HostBlacklist.php31
-rw-r--r--library/HTMLPurifier/URIFilter/MakeAbsolute.php74
-rw-r--r--library/HTMLPurifier/URIFilter/Munge.php91
-rw-r--r--library/HTMLPurifier/URIFilter/SafeIframe.php68
-rw-r--r--library/HTMLPurifier/URIParser.php9
-rw-r--r--library/HTMLPurifier/URIScheme.php88
-rw-r--r--library/HTMLPurifier/URIScheme/data.php58
-rw-r--r--library/HTMLPurifier/URIScheme/file.php44
-rw-r--r--library/HTMLPurifier/URIScheme/ftp.php29
-rw-r--r--library/HTMLPurifier/URIScheme/http.php26
-rw-r--r--library/HTMLPurifier/URIScheme/https.php12
-rw-r--r--library/HTMLPurifier/URIScheme/mailto.php23
-rw-r--r--library/HTMLPurifier/URIScheme/news.php29
-rw-r--r--library/HTMLPurifier/URIScheme/nntp.php24
-rw-r--r--library/HTMLPurifier/URISchemeRegistry.php41
-rw-r--r--library/HTMLPurifier/UnitConverter.php117
-rw-r--r--library/HTMLPurifier/VarParser.php152
-rw-r--r--library/HTMLPurifier/VarParser/Flexible.php88
-rw-r--r--library/HTMLPurifier/VarParser/Native.php18
-rw-r--r--library/HTMLPurifier/Zipper.php157
-rw-r--r--library/Smarty/README4
-rw-r--r--library/Smarty/SMARTY_3.1_NOTES.txt2
-rw-r--r--library/Smarty/change_log.txt357
-rw-r--r--library/Smarty/demo/index.php25
-rw-r--r--library/Smarty/demo/plugins/cacheresource.apc.php28
-rw-r--r--library/Smarty/demo/plugins/cacheresource.memcache.php36
-rw-r--r--library/Smarty/demo/plugins/cacheresource.mysql.php96
-rw-r--r--library/Smarty/demo/plugins/resource.extendsall.php32
-rw-r--r--library/Smarty/demo/plugins/resource.mysql.php35
-rw-r--r--library/Smarty/demo/plugins/resource.mysqls.php28
-rw-r--r--library/Smarty/demo/templates/header.tpl2
-rw-r--r--library/Smarty/demo/templates/index.tpl91
-rw-r--r--library/Smarty/libs/Smarty.class.php513
-rw-r--r--library/Smarty/libs/SmartyBC.class.php927
-rw-r--r--library/Smarty/libs/debug.tpl256
-rw-r--r--library/Smarty/libs/plugins/block.textformat.php21
-rw-r--r--library/Smarty/libs/plugins/function.counter.php38
-rw-r--r--library/Smarty/libs/plugins/function.cycle.php47
-rw-r--r--library/Smarty/libs/plugins/function.fetch.php117
-rw-r--r--library/Smarty/libs/plugins/function.html_checkboxes.php91
-rw-r--r--library/Smarty/libs/plugins/function.html_image.php68
-rw-r--r--library/Smarty/libs/plugins/function.html_options.php84
-rw-r--r--library/Smarty/libs/plugins/function.html_radios.php87
-rw-r--r--library/Smarty/libs/plugins/function.html_select_date.php157
-rw-r--r--library/Smarty/libs/plugins/function.html_select_time.php72
-rw-r--r--library/Smarty/libs/plugins/function.html_table.php45
-rw-r--r--library/Smarty/libs/plugins/function.mailto.php45
-rw-r--r--library/Smarty/libs/plugins/function.math.php54
-rw-r--r--library/Smarty/libs/plugins/modifier.capitalize.php59
-rw-r--r--library/Smarty/libs/plugins/modifier.date_format.php36
-rw-r--r--library/Smarty/libs/plugins/modifier.debug_print_var.php61
-rw-r--r--library/Smarty/libs/plugins/modifier.escape.php40
-rw-r--r--library/Smarty/libs/plugins/modifier.regex_replace.php30
-rw-r--r--library/Smarty/libs/plugins/modifier.replace.php23
-rw-r--r--library/Smarty/libs/plugins/modifier.spacify.php18
-rw-r--r--library/Smarty/libs/plugins/modifier.truncate.php33
-rw-r--r--library/Smarty/libs/plugins/modifiercompiler.cat.php59
-rw-r--r--library/Smarty/libs/plugins/modifiercompiler.count_characters.php65
-rw-r--r--library/Smarty/libs/plugins/modifiercompiler.count_paragraphs.php55
-rw-r--r--library/Smarty/libs/plugins/modifiercompiler.count_sentences.php55
-rw-r--r--library/Smarty/libs/plugins/modifiercompiler.count_words.php63
-rw-r--r--library/Smarty/libs/plugins/modifiercompiler.default.php70
-rw-r--r--library/Smarty/libs/plugins/modifiercompiler.escape.php251
-rw-r--r--library/Smarty/libs/plugins/modifiercompiler.from_charset.php67
-rw-r--r--library/Smarty/libs/plugins/modifiercompiler.indent.php65
-rw-r--r--library/Smarty/libs/plugins/modifiercompiler.lower.php62
-rw-r--r--library/Smarty/libs/plugins/modifiercompiler.noprint.php46
-rw-r--r--library/Smarty/libs/plugins/modifiercompiler.string_format.php51
-rw-r--r--library/Smarty/libs/plugins/modifiercompiler.strip.php66
-rw-r--r--library/Smarty/libs/plugins/modifiercompiler.strip_tags.php62
-rw-r--r--library/Smarty/libs/plugins/modifiercompiler.to_charset.php67
-rw-r--r--library/Smarty/libs/plugins/modifiercompiler.unescape.php101
-rw-r--r--library/Smarty/libs/plugins/modifiercompiler.upper.php59
-rw-r--r--library/Smarty/libs/plugins/modifiercompiler.wordwrap.php93
-rw-r--r--library/Smarty/libs/plugins/outputfilter.trimwhitespace.php34
-rw-r--r--library/Smarty/libs/plugins/shared.escape_special_chars.php26
-rw-r--r--library/Smarty/libs/plugins/shared.literal_compiler_param.php8
-rw-r--r--library/Smarty/libs/plugins/shared.make_timestamp.php15
-rw-r--r--library/Smarty/libs/plugins/shared.mb_str_replace.php20
-rw-r--r--library/Smarty/libs/plugins/shared.mb_unicode.php22
-rw-r--r--library/Smarty/libs/plugins/shared.mb_wordwrap.php60
-rw-r--r--library/Smarty/libs/plugins/variablefilter.htmlspecialchars.php10
-rw-r--r--library/Smarty/libs/sysplugins/smarty_cacheresource.php337
-rw-r--r--library/Smarty/libs/sysplugins/smarty_cacheresource_custom.php159
-rw-r--r--library/Smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php228
-rw-r--r--library/Smarty/libs/sysplugins/smarty_config_source.php37
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_cacheresource_file.php91
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_append.php21
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_assign.php30
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_block.php433
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_break.php152
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_call.php25
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_capture.php32
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_config_load.php31
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_continue.php153
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_debug.php20
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_eval.php26
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_extends.php155
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_for.php70
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_foreach.php76
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_function.php65
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_if.php185
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_include.php246
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_include_php.php29
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_insert.php26
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_ldelim.php22
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_nocache.php37
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php38
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php26
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php279
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php30
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php59
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php99
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php224
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php160
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php39
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_rdelim.php22
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_section.php81
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_setfilter.php142
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_while.php43
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compilebase.php48
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_config.php75
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php51
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_configfilelexer.php454
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_configfileparser.php875
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_data.php173
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_debug.php78
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_filter_handler.php27
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_function_call_handler.php107
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_get_include_path.php94
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_nocache_insert.php104
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_parsetree.php756
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_resource_eval.php190
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_resource_extends.php141
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_resource_file.php33
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_resource_php.php51
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_resource_registered.php45
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_resource_stream.php39
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_resource_string.php55
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php43
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_template.php200
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_templatebase.php297
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php1484
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_templatelexer.php1572
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_templateparser.php6678
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_utility.php407
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_write_file.php32
-rw-r--r--library/Smarty/libs/sysplugins/smarty_resource.php304
-rw-r--r--library/Smarty/libs/sysplugins/smarty_resource_custom.php39
-rw-r--r--library/Smarty/libs/sysplugins/smarty_resource_recompiled.php19
-rw-r--r--library/Smarty/libs/sysplugins/smarty_resource_uncompiled.php23
-rw-r--r--library/Smarty/libs/sysplugins/smarty_security.php147
-rw-r--r--library/blueimp_upload/.gitignore3
-rw-r--r--library/blueimp_upload/.jshintrc81
-rw-r--r--library/blueimp_upload/CONTRIBUTING.md42
-rw-r--r--library/blueimp_upload/Gruntfile.js37
-rw-r--r--library/blueimp_upload/README.md123
-rw-r--r--library/blueimp_upload/angularjs.html211
-rw-r--r--library/blueimp_upload/basic-plus.html226
-rw-r--r--library/blueimp_upload/basic.html136
-rw-r--r--library/blueimp_upload/blueimp-file-upload.jquery.json50
-rw-r--r--library/blueimp_upload/bower.json85
-rw-r--r--library/blueimp_upload/cors/postmessage.html75
-rw-r--r--library/blueimp_upload/cors/result.html24
-rw-r--r--library/blueimp_upload/css/demo-ie8.css21
-rw-r--r--library/blueimp_upload/css/demo.css67
-rw-r--r--library/blueimp_upload/css/jquery.fileupload-noscript.css22
-rw-r--r--library/blueimp_upload/css/jquery.fileupload-ui-noscript.css17
-rw-r--r--library/blueimp_upload/css/jquery.fileupload-ui.css57
-rw-r--r--library/blueimp_upload/css/jquery.fileupload.css36
-rw-r--r--library/blueimp_upload/css/style.css15
-rw-r--r--library/blueimp_upload/img/loading.gifbin0 -> 3897 bytes
-rw-r--r--library/blueimp_upload/img/progressbar.gifbin0 -> 3323 bytes
-rw-r--r--library/blueimp_upload/index.html255
-rw-r--r--library/blueimp_upload/jquery-ui.html250
-rw-r--r--library/blueimp_upload/js/app.js101
-rw-r--r--library/blueimp_upload/js/cors/jquery.postmessage-transport.js117
-rw-r--r--library/blueimp_upload/js/cors/jquery.xdr-transport.js86
-rw-r--r--library/blueimp_upload/js/jquery.fileupload-angular.js429
-rw-r--r--library/blueimp_upload/js/jquery.fileupload-audio.js106
-rw-r--r--library/blueimp_upload/js/jquery.fileupload-image.js315
-rwxr-xr-xlibrary/blueimp_upload/js/jquery.fileupload-jquery-ui.js152
-rw-r--r--library/blueimp_upload/js/jquery.fileupload-process.js172
-rw-r--r--library/blueimp_upload/js/jquery.fileupload-ui.js704
-rw-r--r--library/blueimp_upload/js/jquery.fileupload-validate.js119
-rw-r--r--library/blueimp_upload/js/jquery.fileupload-video.js106
-rw-r--r--library/blueimp_upload/js/jquery.fileupload.js1457
-rw-r--r--library/blueimp_upload/js/jquery.iframe-transport.js214
-rw-r--r--library/blueimp_upload/js/main.js75
-rw-r--r--library/blueimp_upload/js/vendor/jquery.ui.widget.js558
-rw-r--r--library/blueimp_upload/package.json54
-rw-r--r--library/blueimp_upload/server/gae-go/app.yaml12
-rw-r--r--library/blueimp_upload/server/gae-go/app/main.go296
-rw-r--r--library/blueimp_upload/server/gae-go/static/robots.txt2
-rw-r--r--library/blueimp_upload/server/gae-python/app.yaml16
-rw-r--r--library/blueimp_upload/server/gae-python/main.py170
-rw-r--r--library/blueimp_upload/server/gae-python/static/robots.txt2
-rw-r--r--library/blueimp_upload/server/node/.gitignore2
-rw-r--r--library/blueimp_upload/server/node/package.json41
-rw-r--r--library/blueimp_upload/server/node/public/files/.gitignore2
-rwxr-xr-xlibrary/blueimp_upload/server/node/server.js292
-rw-r--r--library/blueimp_upload/server/node/tmp/.gitignore0
-rwxr-xr-xlibrary/blueimp_upload/server/php/UploadHandler.php1343
-rw-r--r--library/blueimp_upload/server/php/files/.gitignore3
-rw-r--r--library/blueimp_upload/server/php/files/.htaccess18
-rw-r--r--library/blueimp_upload/server/php/index.php15
-rw-r--r--library/blueimp_upload/test/index.html172
-rw-r--r--library/blueimp_upload/test/test.js1288
-rwxr-xr-xlibrary/bootstrap-datetimepicker/css/bootstrap-datetimepicker.css174
-rwxr-xr-xlibrary/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css8
-rwxr-xr-xlibrary/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js28
-rw-r--r--library/bootstrap-datetimepicker/js/moment.js7063
-rw-r--r--library/bootstrap-tagsinput/LICENSE20
-rw-r--r--library/bootstrap-tagsinput/README1
-rw-r--r--library/bootstrap-tagsinput/README.md879
-rw-r--r--library/bootstrap-tagsinput/bootstrap-tagsinput.css46
-rw-r--r--library/bootstrap-tagsinput/bootstrap-tagsinput.js643
-rw-r--r--library/bootstrap/css/bootstrap-theme.css181
-rw-r--r--library/bootstrap/css/bootstrap-theme.min.css6
-rw-r--r--library/bootstrap/css/bootstrap.css2335
-rw-r--r--library/bootstrap/css/bootstrap.min.css6
-rw-r--r--library/bootstrap/fonts/glyphicons-halflings-regular.svg2
-rw-r--r--library/bootstrap/js/bootbox.js894
-rw-r--r--library/bootstrap/js/bootbox.min.js4
-rw-r--r--library/bootstrap/js/bootstrap.js1049
-rw-r--r--library/bootstrap/js/bootstrap.min.js5
-rw-r--r--library/cacert.pem721
-rw-r--r--library/certs/README.md1
-rw-r--r--library/certs/cacert.pem3894
-rw-r--r--library/certs/comodo.pem92
-rw-r--r--library/colorbox/README.md330
-rw-r--r--library/colorbox/bower.json42
-rw-r--r--library/colorbox/colorbox.css52
-rw-r--r--library/colorbox/colorbox.jquery.json30
-rw-r--r--library/colorbox/component.json8
-rw-r--r--library/colorbox/content/daisy.jpgbin0 -> 101126 bytes
-rw-r--r--library/colorbox/content/daisy@2x.jpgbin0 -> 335898 bytes
-rw-r--r--library/colorbox/content/homer.jpgbin8917 -> 8584 bytes
-rw-r--r--library/colorbox/content/marylou.jpgbin55125 -> 52286 bytes
-rw-r--r--library/colorbox/content/ohoopee1.jpgbin74827 -> 71685 bytes
-rw-r--r--library/colorbox/content/ohoopee2.jpgbin117411 -> 111141 bytes
-rw-r--r--library/colorbox/content/ohoopee3.jpgbin71514 -> 69240 bytes
-rw-r--r--library/colorbox/example1/colorbox.css52
-rw-r--r--library/colorbox/example1/images/border.pngbin112 -> 76 bytes
-rw-r--r--library/colorbox/example1/images/controls.pngbin2893 -> 1261 bytes
-rw-r--r--library/colorbox/example1/images/ie6/borderBottomCenter.pngbin111 -> 0 bytes
-rw-r--r--library/colorbox/example1/images/ie6/borderBottomLeft.pngbin215 -> 0 bytes
-rw-r--r--library/colorbox/example1/images/ie6/borderBottomRight.pngbin217 -> 0 bytes
-rw-r--r--library/colorbox/example1/images/ie6/borderMiddleLeft.pngbin108 -> 0 bytes
-rw-r--r--library/colorbox/example1/images/ie6/borderMiddleRight.pngbin108 -> 0 bytes
-rw-r--r--library/colorbox/example1/images/ie6/borderTopCenter.pngbin111 -> 0 bytes
-rw-r--r--library/colorbox/example1/images/ie6/borderTopLeft.pngbin216 -> 0 bytes
-rw-r--r--library/colorbox/example1/images/ie6/borderTopRight.pngbin214 -> 0 bytes
-rw-r--r--library/colorbox/example1/images/loading.gifbin9427 -> 8685 bytes
-rw-r--r--library/colorbox/example1/images/loading_background.pngbin157 -> 131 bytes
-rw-r--r--library/colorbox/example1/images/overlay.pngbin182 -> 115 bytes
-rw-r--r--library/colorbox/example1/index.html22
-rw-r--r--library/colorbox/example2/colorbox.css25
-rw-r--r--library/colorbox/example2/images/controls.pngbin570 -> 503 bytes
-rw-r--r--library/colorbox/example2/images/loading.gifbin9427 -> 6244 bytes
-rw-r--r--library/colorbox/example2/index.html22
-rw-r--r--library/colorbox/example3/colorbox.css29
-rw-r--r--library/colorbox/example3/images/loading.gifbin9427 -> 6244 bytes
-rw-r--r--library/colorbox/example3/index.html22
-rw-r--r--library/colorbox/example4/colorbox.css50
-rw-r--r--library/colorbox/example4/images/border1.pngbin1057 -> 629 bytes
-rw-r--r--library/colorbox/example4/images/border2.pngbin170 -> 112 bytes
-rw-r--r--library/colorbox/example4/images/ie6/borderBottomCenter.pngbin153 -> 0 bytes
-rw-r--r--library/colorbox/example4/images/ie6/borderBottomLeft.pngbin473 -> 0 bytes
-rw-r--r--library/colorbox/example4/images/ie6/borderBottomRight.pngbin470 -> 0 bytes
-rw-r--r--library/colorbox/example4/images/ie6/borderMiddleLeft.pngbin148 -> 0 bytes
-rw-r--r--library/colorbox/example4/images/ie6/borderMiddleRight.pngbin139 -> 0 bytes
-rw-r--r--library/colorbox/example4/images/ie6/borderTopCenter.pngbin153 -> 0 bytes
-rw-r--r--library/colorbox/example4/images/ie6/borderTopLeft.pngbin359 -> 0 bytes
-rw-r--r--library/colorbox/example4/images/ie6/borderTopRight.pngbin465 -> 0 bytes
-rw-r--r--library/colorbox/example4/images/loading.gifbin9427 -> 6244 bytes
-rw-r--r--library/colorbox/example4/index.html22
-rw-r--r--library/colorbox/example5/colorbox.css22
-rw-r--r--library/colorbox/example5/images/border.pngbin163 -> 139 bytes
-rw-r--r--library/colorbox/example5/images/controls.pngbin2033 -> 2027 bytes
-rw-r--r--library/colorbox/example5/images/loading.gifbin9427 -> 8685 bytes
-rw-r--r--library/colorbox/example5/images/loading_background.pngbin166 -> 131 bytes
-rw-r--r--library/colorbox/example5/index.html22
-rw-r--r--library/colorbox/i18n/jquery.colorbox-ar.js15
-rw-r--r--library/colorbox/i18n/jquery.colorbox-bg.js16
-rw-r--r--library/colorbox/i18n/jquery.colorbox-bn.js16
-rw-r--r--library/colorbox/i18n/jquery.colorbox-ca.js13
-rw-r--r--library/colorbox/i18n/jquery.colorbox-cs.js6
-rw-r--r--library/colorbox/i18n/jquery.colorbox-da.js6
-rw-r--r--library/colorbox/i18n/jquery.colorbox-de.js6
-rw-r--r--library/colorbox/i18n/jquery.colorbox-es.js2
-rw-r--r--library/colorbox/i18n/jquery.colorbox-et.js15
-rw-r--r--library/colorbox/i18n/jquery.colorbox-fa.js18
-rw-r--r--library/colorbox/i18n/jquery.colorbox-fi.js15
-rw-r--r--library/colorbox/i18n/jquery.colorbox-fr.js17
-rw-r--r--library/colorbox/i18n/jquery.colorbox-gl.js13
-rw-r--r--library/colorbox/i18n/jquery.colorbox-gr.js16
-rw-r--r--library/colorbox/i18n/jquery.colorbox-he.js16
-rw-r--r--library/colorbox/i18n/jquery.colorbox-hr.js15
-rw-r--r--library/colorbox/i18n/jquery.colorbox-hu.js15
-rw-r--r--library/colorbox/i18n/jquery.colorbox-id.js15
-rw-r--r--library/colorbox/i18n/jquery.colorbox-it.js6
-rw-r--r--library/colorbox/i18n/jquery.colorbox-ja.js15
-rw-r--r--library/colorbox/i18n/jquery.colorbox-kr.js15
-rw-r--r--library/colorbox/i18n/jquery.colorbox-lt.js15
-rw-r--r--library/colorbox/i18n/jquery.colorbox-lv.js16
-rw-r--r--library/colorbox/i18n/jquery.colorbox-my.js15
-rw-r--r--library/colorbox/i18n/jquery.colorbox-nl.js15
-rw-r--r--library/colorbox/i18n/jquery.colorbox-no.js16
-rw-r--r--library/colorbox/i18n/jquery.colorbox-pl.js16
-rw-r--r--library/colorbox/i18n/jquery.colorbox-pt-BR.js15
-rw-r--r--library/colorbox/i18n/jquery.colorbox-ro.js15
-rw-r--r--library/colorbox/i18n/jquery.colorbox-ru.js12
-rw-r--r--library/colorbox/i18n/jquery.colorbox-si.js15
-rw-r--r--library/colorbox/i18n/jquery.colorbox-sk.js15
-rw-r--r--library/colorbox/i18n/jquery.colorbox-sr.js15
-rw-r--r--library/colorbox/i18n/jquery.colorbox-sv.js15
-rw-r--r--library/colorbox/i18n/jquery.colorbox-tr.js19
-rw-r--r--library/colorbox/i18n/jquery.colorbox-uk.js16
-rw-r--r--library/colorbox/i18n/jquery.colorbox-zh-CN.js15
-rw-r--r--library/colorbox/i18n/jquery.colorbox-zh-TW.js15
-rw-r--r--library/colorbox/images/border.pngbin163 -> 0 bytes
-rw-r--r--library/colorbox/images/controls.pngbin2033 -> 0 bytes
-rw-r--r--library/colorbox/images/loading.gifbin9427 -> 0 bytes
-rw-r--r--library/colorbox/images/loading_background.pngbin166 -> 0 bytes
-rw-r--r--library/colorbox/jquery.colorbox-min.js7
-rw-r--r--library/colorbox/jquery.colorbox.js931
-rw-r--r--library/colorpicker/css/colorpicker.css161
-rw-r--r--library/colorpicker/css/layout.css218
-rw-r--r--library/colorpicker/images/blank.gifbin49 -> 0 bytes
-rw-r--r--library/colorpicker/images/colorpicker_background.pngbin1897 -> 0 bytes
-rw-r--r--library/colorpicker/images/colorpicker_hex.pngbin532 -> 0 bytes
-rw-r--r--library/colorpicker/images/colorpicker_hsb_b.pngbin970 -> 0 bytes
-rw-r--r--library/colorpicker/images/colorpicker_hsb_h.pngbin1012 -> 0 bytes
-rw-r--r--library/colorpicker/images/colorpicker_hsb_s.pngbin1171 -> 0 bytes
-rw-r--r--library/colorpicker/images/colorpicker_indic.gifbin86 -> 0 bytes
-rw-r--r--library/colorpicker/images/colorpicker_overlay.pngbin10355 -> 0 bytes
-rw-r--r--library/colorpicker/images/colorpicker_rgb_b.pngbin970 -> 0 bytes
-rw-r--r--library/colorpicker/images/colorpicker_rgb_g.pngbin1069 -> 0 bytes
-rw-r--r--library/colorpicker/images/colorpicker_rgb_r.pngbin1066 -> 0 bytes
-rw-r--r--library/colorpicker/images/colorpicker_select.gifbin78 -> 0 bytes
-rw-r--r--library/colorpicker/images/colorpicker_submit.pngbin984 -> 0 bytes
-rw-r--r--library/colorpicker/images/custom_background.pngbin1916 -> 0 bytes
-rw-r--r--library/colorpicker/images/custom_hex.pngbin562 -> 0 bytes
-rw-r--r--library/colorpicker/images/custom_hsb_b.pngbin1097 -> 0 bytes
-rw-r--r--library/colorpicker/images/custom_hsb_h.pngbin970 -> 0 bytes
-rw-r--r--library/colorpicker/images/custom_hsb_s.pngbin1168 -> 0 bytes
-rw-r--r--library/colorpicker/images/custom_indic.gifbin86 -> 0 bytes
-rw-r--r--library/colorpicker/images/custom_rgb_b.pngbin1008 -> 0 bytes
-rw-r--r--library/colorpicker/images/custom_rgb_g.pngbin1069 -> 0 bytes
-rw-r--r--library/colorpicker/images/custom_rgb_r.pngbin1018 -> 0 bytes
-rw-r--r--library/colorpicker/images/custom_submit.pngbin997 -> 0 bytes
-rw-r--r--library/colorpicker/images/select.pngbin506 -> 0 bytes
-rw-r--r--library/colorpicker/images/select2.pngbin518 -> 0 bytes
-rw-r--r--library/colorpicker/images/slider.pngbin315 -> 0 bytes
-rw-r--r--library/colorpicker/index.html184
-rw-r--r--library/colorpicker/js/colorpicker.js484
-rw-r--r--library/colorpicker/js/eye.js34
-rw-r--r--library/colorpicker/js/layout.js67
-rw-r--r--library/colorpicker/js/utils.js252
-rw-r--r--library/datetimepicker/.gitignore1
-rw-r--r--library/datetimepicker/MIT-LICENSE.txt19
-rw-r--r--library/datetimepicker/README.md20
-rw-r--r--library/datetimepicker/jquery.datetimepicker.css418
-rw-r--r--library/datetimepicker/jquery.datetimepicker.js1661
-rw-r--r--library/fancybox/blank.gifbin43 -> 0 bytes
-rw-r--r--library/fancybox/fancy_close.pngbin1517 -> 0 bytes
-rw-r--r--library/fancybox/fancy_loading.pngbin10195 -> 0 bytes
-rw-r--r--library/fancybox/fancy_nav_left.pngbin1446 -> 0 bytes
-rw-r--r--library/fancybox/fancy_nav_right.pngbin1454 -> 0 bytes
-rw-r--r--library/fancybox/fancy_shadow_e.pngbin107 -> 0 bytes
-rw-r--r--library/fancybox/fancy_shadow_n.pngbin106 -> 0 bytes
-rw-r--r--library/fancybox/fancy_shadow_ne.pngbin347 -> 0 bytes
-rw-r--r--library/fancybox/fancy_shadow_nw.pngbin324 -> 0 bytes
-rw-r--r--library/fancybox/fancy_shadow_s.pngbin111 -> 0 bytes
-rw-r--r--library/fancybox/fancy_shadow_se.pngbin352 -> 0 bytes
-rw-r--r--library/fancybox/fancy_shadow_sw.pngbin340 -> 0 bytes
-rw-r--r--library/fancybox/fancy_shadow_w.pngbin103 -> 0 bytes
-rw-r--r--library/fancybox/fancy_title_left.pngbin503 -> 0 bytes
-rw-r--r--library/fancybox/fancy_title_main.pngbin96 -> 0 bytes
-rw-r--r--library/fancybox/fancy_title_over.pngbin70 -> 0 bytes
-rw-r--r--library/fancybox/fancy_title_right.pngbin506 -> 0 bytes
-rw-r--r--library/fancybox/fancybox-x.pngbin203 -> 0 bytes
-rw-r--r--library/fancybox/fancybox-y.pngbin176 -> 0 bytes
-rw-r--r--library/fancybox/fancybox.pngbin15287 -> 0 bytes
-rw-r--r--library/fancybox/jquery.easing-1.3.pack.js72
-rw-r--r--library/fancybox/jquery.fancybox-1.3.4.css359
-rw-r--r--library/fancybox/jquery.fancybox-1.3.4.js1157
-rw-r--r--library/fancybox/jquery.fancybox-1.3.4.pack.js46
-rw-r--r--library/fancybox/jquery.mousewheel-3.0.4.pack.js14
-rw-r--r--library/ical.php379
-rw-r--r--library/intl/.gitignore1
-rw-r--r--library/intl/.travis.yml14
-rw-r--r--library/intl/LICENSE21
-rw-r--r--library/intl/README.md163
-rw-r--r--library/intl/phpunit.xml23
-rw-r--r--library/intl/resources/country/af.json761
-rw-r--r--library/intl/resources/country/agq.json761
-rw-r--r--library/intl/resources/country/ak.json761
-rw-r--r--library/intl/resources/country/am.json761
-rw-r--r--library/intl/resources/country/ar.json761
-rw-r--r--library/intl/resources/country/asa.json761
-rw-r--r--library/intl/resources/country/ast.json761
-rw-r--r--library/intl/resources/country/az.json761
-rw-r--r--library/intl/resources/country/bas.json761
-rw-r--r--library/intl/resources/country/base.json1511
-rw-r--r--library/intl/resources/country/be.json761
-rw-r--r--library/intl/resources/country/bez.json761
-rw-r--r--library/intl/resources/country/bg.json761
-rw-r--r--library/intl/resources/country/bm.json761
-rw-r--r--library/intl/resources/country/bn-IN.json761
-rw-r--r--library/intl/resources/country/bn.json761
-rw-r--r--library/intl/resources/country/bo.json761
-rw-r--r--library/intl/resources/country/br.json761
-rw-r--r--library/intl/resources/country/brx.json761
-rw-r--r--library/intl/resources/country/bs-Cyrl.json761
-rw-r--r--library/intl/resources/country/bs.json761
-rw-r--r--library/intl/resources/country/ca.json761
-rw-r--r--library/intl/resources/country/cgg.json761
-rw-r--r--library/intl/resources/country/chr.json761
-rw-r--r--library/intl/resources/country/cs.json761
-rw-r--r--library/intl/resources/country/cy.json761
-rw-r--r--library/intl/resources/country/da.json761
-rw-r--r--library/intl/resources/country/dav.json761
-rw-r--r--library/intl/resources/country/de-CH.json761
-rw-r--r--library/intl/resources/country/de.json761
-rw-r--r--library/intl/resources/country/dje.json761
-rw-r--r--library/intl/resources/country/dsb.json761
-rw-r--r--library/intl/resources/country/dyo.json761
-rw-r--r--library/intl/resources/country/dz.json761
-rw-r--r--library/intl/resources/country/ebu.json761
-rw-r--r--library/intl/resources/country/ee.json761
-rw-r--r--library/intl/resources/country/el.json761
-rw-r--r--library/intl/resources/country/en-AU.json761
-rw-r--r--library/intl/resources/country/en-BE.json761
-rw-r--r--library/intl/resources/country/en-DG.json761
-rw-r--r--library/intl/resources/country/en-FK.json761
-rw-r--r--library/intl/resources/country/en-GB.json761
-rw-r--r--library/intl/resources/country/en-GG.json761
-rw-r--r--library/intl/resources/country/en-GI.json761
-rw-r--r--library/intl/resources/country/en-HK.json761
-rw-r--r--library/intl/resources/country/en-IE.json761
-rw-r--r--library/intl/resources/country/en-IM.json761
-rw-r--r--library/intl/resources/country/en-IN.json761
-rw-r--r--library/intl/resources/country/en-IO.json761
-rw-r--r--library/intl/resources/country/en-JE.json761
-rw-r--r--library/intl/resources/country/en-MO.json761
-rw-r--r--library/intl/resources/country/en-MT.json761
-rw-r--r--library/intl/resources/country/en-NZ.json761
-rw-r--r--library/intl/resources/country/en-PK.json761
-rw-r--r--library/intl/resources/country/en-SG.json761
-rw-r--r--library/intl/resources/country/en-SH.json761
-rw-r--r--library/intl/resources/country/en-VG.json761
-rw-r--r--library/intl/resources/country/en.json761
-rw-r--r--library/intl/resources/country/eo.json761
-rw-r--r--library/intl/resources/country/es-AR.json761
-rw-r--r--library/intl/resources/country/es-BO.json761
-rw-r--r--library/intl/resources/country/es-CL.json761
-rw-r--r--library/intl/resources/country/es-CO.json761
-rw-r--r--library/intl/resources/country/es-CR.json761
-rw-r--r--library/intl/resources/country/es-CU.json761
-rw-r--r--library/intl/resources/country/es-DO.json761
-rw-r--r--library/intl/resources/country/es-EC.json761
-rw-r--r--library/intl/resources/country/es-GT.json761
-rw-r--r--library/intl/resources/country/es-HN.json761
-rw-r--r--library/intl/resources/country/es-MX.json761
-rw-r--r--library/intl/resources/country/es-NI.json761
-rw-r--r--library/intl/resources/country/es-PA.json761
-rw-r--r--library/intl/resources/country/es-PE.json761
-rw-r--r--library/intl/resources/country/es-PR.json761
-rw-r--r--library/intl/resources/country/es-PY.json761
-rw-r--r--library/intl/resources/country/es-SV.json761
-rw-r--r--library/intl/resources/country/es-US.json761
-rw-r--r--library/intl/resources/country/es-UY.json761
-rw-r--r--library/intl/resources/country/es-VE.json761
-rw-r--r--library/intl/resources/country/es.json761
-rw-r--r--library/intl/resources/country/et.json761
-rw-r--r--library/intl/resources/country/eu.json761
-rw-r--r--library/intl/resources/country/ewo.json761
-rw-r--r--library/intl/resources/country/fa-AF.json761
-rw-r--r--library/intl/resources/country/fa.json761
-rw-r--r--library/intl/resources/country/ff.json761
-rw-r--r--library/intl/resources/country/fi.json761
-rw-r--r--library/intl/resources/country/fil.json761
-rw-r--r--library/intl/resources/country/fo.json761
-rw-r--r--library/intl/resources/country/fr-CA.json761
-rw-r--r--library/intl/resources/country/fr-CH.json761
-rw-r--r--library/intl/resources/country/fr.json761
-rw-r--r--library/intl/resources/country/fur.json761
-rw-r--r--library/intl/resources/country/fy.json761
-rw-r--r--library/intl/resources/country/ga.json761
-rw-r--r--library/intl/resources/country/gd.json761
-rw-r--r--library/intl/resources/country/gl.json761
-rw-r--r--library/intl/resources/country/gsw.json761
-rw-r--r--library/intl/resources/country/gu.json761
-rw-r--r--library/intl/resources/country/guz.json761
-rw-r--r--library/intl/resources/country/ha.json761
-rw-r--r--library/intl/resources/country/he.json761
-rw-r--r--library/intl/resources/country/hi.json761
-rw-r--r--library/intl/resources/country/hr.json761
-rw-r--r--library/intl/resources/country/hsb.json761
-rw-r--r--library/intl/resources/country/hu.json761
-rw-r--r--library/intl/resources/country/hy.json761
-rw-r--r--library/intl/resources/country/id.json761
-rw-r--r--library/intl/resources/country/is.json761
-rw-r--r--library/intl/resources/country/it.json761
-rw-r--r--library/intl/resources/country/ja.json761
-rw-r--r--library/intl/resources/country/jgo.json761
-rw-r--r--library/intl/resources/country/jmc.json761
-rw-r--r--library/intl/resources/country/ka.json761
-rw-r--r--library/intl/resources/country/kab.json761
-rw-r--r--library/intl/resources/country/kam.json761
-rw-r--r--library/intl/resources/country/kde.json761
-rw-r--r--library/intl/resources/country/kea.json761
-rw-r--r--library/intl/resources/country/khq.json761
-rw-r--r--library/intl/resources/country/ki.json761
-rw-r--r--library/intl/resources/country/kk.json761
-rw-r--r--library/intl/resources/country/kl.json761
-rw-r--r--library/intl/resources/country/kln.json761
-rw-r--r--library/intl/resources/country/km.json761
-rw-r--r--library/intl/resources/country/kn.json761
-rw-r--r--library/intl/resources/country/ko.json761
-rw-r--r--library/intl/resources/country/ks.json761
-rw-r--r--library/intl/resources/country/ksb.json761
-rw-r--r--library/intl/resources/country/ksf.json761
-rw-r--r--library/intl/resources/country/ksh.json761
-rw-r--r--library/intl/resources/country/ky.json761
-rw-r--r--library/intl/resources/country/lag.json761
-rw-r--r--library/intl/resources/country/lb.json761
-rw-r--r--library/intl/resources/country/lg.json761
-rw-r--r--library/intl/resources/country/ln.json761
-rw-r--r--library/intl/resources/country/lo.json761
-rw-r--r--library/intl/resources/country/lt.json761
-rw-r--r--library/intl/resources/country/lu.json761
-rw-r--r--library/intl/resources/country/luo.json761
-rw-r--r--library/intl/resources/country/luy.json761
-rw-r--r--library/intl/resources/country/lv.json761
-rw-r--r--library/intl/resources/country/mas.json761
-rw-r--r--library/intl/resources/country/mer.json761
-rw-r--r--library/intl/resources/country/mfe.json761
-rw-r--r--library/intl/resources/country/mg.json761
-rw-r--r--library/intl/resources/country/mgh.json761
-rw-r--r--library/intl/resources/country/mk.json761
-rw-r--r--library/intl/resources/country/ml.json761
-rw-r--r--library/intl/resources/country/mn.json761
-rw-r--r--library/intl/resources/country/mr.json761
-rw-r--r--library/intl/resources/country/ms.json761
-rw-r--r--library/intl/resources/country/mt.json761
-rw-r--r--library/intl/resources/country/mua.json761
-rw-r--r--library/intl/resources/country/my.json761
-rw-r--r--library/intl/resources/country/naq.json761
-rw-r--r--library/intl/resources/country/nb.json761
-rw-r--r--library/intl/resources/country/nd.json761
-rw-r--r--library/intl/resources/country/ne.json761
-rw-r--r--library/intl/resources/country/nl-BE.json761
-rw-r--r--library/intl/resources/country/nl.json761
-rw-r--r--library/intl/resources/country/nmg.json761
-rw-r--r--library/intl/resources/country/nn.json761
-rw-r--r--library/intl/resources/country/nus.json761
-rw-r--r--library/intl/resources/country/nyn.json761
-rw-r--r--library/intl/resources/country/or.json761
-rw-r--r--library/intl/resources/country/pa.json761
-rw-r--r--library/intl/resources/country/pl.json761
-rw-r--r--library/intl/resources/country/ps.json761
-rw-r--r--library/intl/resources/country/pt-AO.json761
-rw-r--r--library/intl/resources/country/pt-CV.json761
-rw-r--r--library/intl/resources/country/pt-GW.json761
-rw-r--r--library/intl/resources/country/pt-MO.json761
-rw-r--r--library/intl/resources/country/pt-MZ.json761
-rw-r--r--library/intl/resources/country/pt-PT.json761
-rw-r--r--library/intl/resources/country/pt-ST.json761
-rw-r--r--library/intl/resources/country/pt-TL.json761
-rw-r--r--library/intl/resources/country/pt.json761
-rw-r--r--library/intl/resources/country/rm.json761
-rw-r--r--library/intl/resources/country/rn.json761
-rw-r--r--library/intl/resources/country/ro.json761
-rw-r--r--library/intl/resources/country/rof.json761
-rw-r--r--library/intl/resources/country/ru.json761
-rw-r--r--library/intl/resources/country/rwk.json761
-rw-r--r--library/intl/resources/country/saq.json761
-rw-r--r--library/intl/resources/country/sbp.json761
-rw-r--r--library/intl/resources/country/se-FI.json761
-rw-r--r--library/intl/resources/country/se.json761
-rw-r--r--library/intl/resources/country/seh.json761
-rw-r--r--library/intl/resources/country/ses.json761
-rw-r--r--library/intl/resources/country/sg.json761
-rw-r--r--library/intl/resources/country/shi-Latn.json761
-rw-r--r--library/intl/resources/country/shi.json761
-rw-r--r--library/intl/resources/country/si.json761
-rw-r--r--library/intl/resources/country/sk.json761
-rw-r--r--library/intl/resources/country/sl.json761
-rw-r--r--library/intl/resources/country/sn.json761
-rw-r--r--library/intl/resources/country/so.json761
-rw-r--r--library/intl/resources/country/sq.json761
-rw-r--r--library/intl/resources/country/sr-Latn.json761
-rw-r--r--library/intl/resources/country/sr.json761
-rw-r--r--library/intl/resources/country/sv-FI.json761
-rw-r--r--library/intl/resources/country/sv.json761
-rw-r--r--library/intl/resources/country/sw.json761
-rw-r--r--library/intl/resources/country/swc.json761
-rw-r--r--library/intl/resources/country/ta.json761
-rw-r--r--library/intl/resources/country/te.json761
-rw-r--r--library/intl/resources/country/teo.json761
-rw-r--r--library/intl/resources/country/th.json761
-rw-r--r--library/intl/resources/country/ti.json761
-rw-r--r--library/intl/resources/country/to.json761
-rw-r--r--library/intl/resources/country/tr.json761
-rw-r--r--library/intl/resources/country/twq.json761
-rw-r--r--library/intl/resources/country/tzm.json761
-rw-r--r--library/intl/resources/country/ug.json761
-rw-r--r--library/intl/resources/country/uk.json761
-rw-r--r--library/intl/resources/country/ur-IN.json761
-rw-r--r--library/intl/resources/country/ur.json761
-rw-r--r--library/intl/resources/country/uz-Cyrl.json761
-rw-r--r--library/intl/resources/country/uz.json761
-rw-r--r--library/intl/resources/country/vai-Latn.json761
-rw-r--r--library/intl/resources/country/vai.json761
-rw-r--r--library/intl/resources/country/vi.json761
-rw-r--r--library/intl/resources/country/vun.json761
-rw-r--r--library/intl/resources/country/wae.json761
-rw-r--r--library/intl/resources/country/xog.json761
-rw-r--r--library/intl/resources/country/yav.json761
-rw-r--r--library/intl/resources/country/yo-BJ.json761
-rw-r--r--library/intl/resources/country/yo.json761
-rw-r--r--library/intl/resources/country/zgh.json761
-rw-r--r--library/intl/resources/country/zh-Hans-HK.json761
-rw-r--r--library/intl/resources/country/zh-Hans-MO.json761
-rw-r--r--library/intl/resources/country/zh-Hans-SG.json761
-rw-r--r--library/intl/resources/country/zh-Hant-HK.json761
-rw-r--r--library/intl/resources/country/zh-Hant-MO.json761
-rw-r--r--library/intl/resources/country/zh-Hant.json761
-rw-r--r--library/intl/resources/country/zh.json761
-rw-r--r--library/intl/resources/country/zu.json761
-rw-r--r--library/intl/resources/currency/af.json634
-rw-r--r--library/intl/resources/currency/agq.json634
-rw-r--r--library/intl/resources/currency/ak.json634
-rw-r--r--library/intl/resources/currency/am.json634
-rw-r--r--library/intl/resources/currency/ar.json634
-rw-r--r--library/intl/resources/currency/asa.json634
-rw-r--r--library/intl/resources/currency/ast.json634
-rw-r--r--library/intl/resources/currency/az.json634
-rw-r--r--library/intl/resources/currency/bas.json634
-rw-r--r--library/intl/resources/currency/base.json683
-rw-r--r--library/intl/resources/currency/be.json634
-rw-r--r--library/intl/resources/currency/bez.json634
-rw-r--r--library/intl/resources/currency/bg.json634
-rw-r--r--library/intl/resources/currency/bm.json634
-rw-r--r--library/intl/resources/currency/bn.json634
-rw-r--r--library/intl/resources/currency/bo.json634
-rw-r--r--library/intl/resources/currency/br.json634
-rw-r--r--library/intl/resources/currency/brx.json634
-rw-r--r--library/intl/resources/currency/bs-Cyrl.json634
-rw-r--r--library/intl/resources/currency/bs.json634
-rw-r--r--library/intl/resources/currency/ca.json634
-rw-r--r--library/intl/resources/currency/cgg.json634
-rw-r--r--library/intl/resources/currency/chr.json634
-rw-r--r--library/intl/resources/currency/cs.json634
-rw-r--r--library/intl/resources/currency/cy.json634
-rw-r--r--library/intl/resources/currency/da.json634
-rw-r--r--library/intl/resources/currency/dav.json634
-rw-r--r--library/intl/resources/currency/de-CH.json634
-rw-r--r--library/intl/resources/currency/de.json634
-rw-r--r--library/intl/resources/currency/dje.json634
-rw-r--r--library/intl/resources/currency/dsb.json634
-rw-r--r--library/intl/resources/currency/dyo.json634
-rw-r--r--library/intl/resources/currency/dz.json634
-rw-r--r--library/intl/resources/currency/ebu.json634
-rw-r--r--library/intl/resources/currency/ee.json634
-rw-r--r--library/intl/resources/currency/el.json634
-rw-r--r--library/intl/resources/currency/en-AU.json634
-rw-r--r--library/intl/resources/currency/en-BE.json634
-rw-r--r--library/intl/resources/currency/en-DG.json634
-rw-r--r--library/intl/resources/currency/en-FK.json634
-rw-r--r--library/intl/resources/currency/en-GB.json634
-rw-r--r--library/intl/resources/currency/en-GG.json634
-rw-r--r--library/intl/resources/currency/en-GI.json634
-rw-r--r--library/intl/resources/currency/en-HK.json634
-rw-r--r--library/intl/resources/currency/en-IE.json634
-rw-r--r--library/intl/resources/currency/en-IM.json634
-rw-r--r--library/intl/resources/currency/en-IN.json634
-rw-r--r--library/intl/resources/currency/en-IO.json634
-rw-r--r--library/intl/resources/currency/en-JE.json634
-rw-r--r--library/intl/resources/currency/en-MO.json634
-rw-r--r--library/intl/resources/currency/en-MT.json634
-rw-r--r--library/intl/resources/currency/en-NZ.json634
-rw-r--r--library/intl/resources/currency/en-PK.json634
-rw-r--r--library/intl/resources/currency/en-SG.json634
-rw-r--r--library/intl/resources/currency/en-SH.json634
-rw-r--r--library/intl/resources/currency/en-VG.json634
-rw-r--r--library/intl/resources/currency/en.json634
-rw-r--r--library/intl/resources/currency/eo.json634
-rw-r--r--library/intl/resources/currency/es-AR.json634
-rw-r--r--library/intl/resources/currency/es-BO.json634
-rw-r--r--library/intl/resources/currency/es-CL.json634
-rw-r--r--library/intl/resources/currency/es-CO.json634
-rw-r--r--library/intl/resources/currency/es-CR.json634
-rw-r--r--library/intl/resources/currency/es-CU.json634
-rw-r--r--library/intl/resources/currency/es-DO.json634
-rw-r--r--library/intl/resources/currency/es-EC.json634
-rw-r--r--library/intl/resources/currency/es-GT.json634
-rw-r--r--library/intl/resources/currency/es-HN.json634
-rw-r--r--library/intl/resources/currency/es-MX.json634
-rw-r--r--library/intl/resources/currency/es-NI.json634
-rw-r--r--library/intl/resources/currency/es-PA.json634
-rw-r--r--library/intl/resources/currency/es-PE.json634
-rw-r--r--library/intl/resources/currency/es-PR.json634
-rw-r--r--library/intl/resources/currency/es-PY.json634
-rw-r--r--library/intl/resources/currency/es-SV.json634
-rw-r--r--library/intl/resources/currency/es-US.json634
-rw-r--r--library/intl/resources/currency/es-UY.json634
-rw-r--r--library/intl/resources/currency/es-VE.json634
-rw-r--r--library/intl/resources/currency/es.json634
-rw-r--r--library/intl/resources/currency/et.json634
-rw-r--r--library/intl/resources/currency/eu.json634
-rw-r--r--library/intl/resources/currency/ewo.json634
-rw-r--r--library/intl/resources/currency/fa-AF.json634
-rw-r--r--library/intl/resources/currency/fa.json634
-rw-r--r--library/intl/resources/currency/ff.json634
-rw-r--r--library/intl/resources/currency/fi.json634
-rw-r--r--library/intl/resources/currency/fil.json634
-rw-r--r--library/intl/resources/currency/fo.json634
-rw-r--r--library/intl/resources/currency/fr-CA.json634
-rw-r--r--library/intl/resources/currency/fr.json634
-rw-r--r--library/intl/resources/currency/fur.json634
-rw-r--r--library/intl/resources/currency/fy.json634
-rw-r--r--library/intl/resources/currency/ga.json634
-rw-r--r--library/intl/resources/currency/gd.json634
-rw-r--r--library/intl/resources/currency/gl.json634
-rw-r--r--library/intl/resources/currency/gsw.json634
-rw-r--r--library/intl/resources/currency/gu.json634
-rw-r--r--library/intl/resources/currency/guz.json634
-rw-r--r--library/intl/resources/currency/ha.json634
-rw-r--r--library/intl/resources/currency/he.json634
-rw-r--r--library/intl/resources/currency/hi.json634
-rw-r--r--library/intl/resources/currency/hr.json634
-rw-r--r--library/intl/resources/currency/hsb.json634
-rw-r--r--library/intl/resources/currency/hu.json634
-rw-r--r--library/intl/resources/currency/hy.json634
-rw-r--r--library/intl/resources/currency/id.json634
-rw-r--r--library/intl/resources/currency/is.json634
-rw-r--r--library/intl/resources/currency/it.json634
-rw-r--r--library/intl/resources/currency/ja.json634
-rw-r--r--library/intl/resources/currency/jgo.json634
-rw-r--r--library/intl/resources/currency/jmc.json634
-rw-r--r--library/intl/resources/currency/ka.json634
-rw-r--r--library/intl/resources/currency/kab.json634
-rw-r--r--library/intl/resources/currency/kam.json634
-rw-r--r--library/intl/resources/currency/kde.json634
-rw-r--r--library/intl/resources/currency/kea.json634
-rw-r--r--library/intl/resources/currency/khq.json634
-rw-r--r--library/intl/resources/currency/ki.json634
-rw-r--r--library/intl/resources/currency/kk.json634
-rw-r--r--library/intl/resources/currency/kl.json634
-rw-r--r--library/intl/resources/currency/kln.json634
-rw-r--r--library/intl/resources/currency/km.json634
-rw-r--r--library/intl/resources/currency/kn.json634
-rw-r--r--library/intl/resources/currency/ko.json634
-rw-r--r--library/intl/resources/currency/ks.json634
-rw-r--r--library/intl/resources/currency/ksb.json634
-rw-r--r--library/intl/resources/currency/ksf.json634
-rw-r--r--library/intl/resources/currency/ksh.json634
-rw-r--r--library/intl/resources/currency/ky.json634
-rw-r--r--library/intl/resources/currency/lag.json634
-rw-r--r--library/intl/resources/currency/lb.json634
-rw-r--r--library/intl/resources/currency/lg.json634
-rw-r--r--library/intl/resources/currency/ln.json634
-rw-r--r--library/intl/resources/currency/lo.json634
-rw-r--r--library/intl/resources/currency/lt.json634
-rw-r--r--library/intl/resources/currency/lu.json634
-rw-r--r--library/intl/resources/currency/luo.json634
-rw-r--r--library/intl/resources/currency/luy.json634
-rw-r--r--library/intl/resources/currency/lv.json634
-rw-r--r--library/intl/resources/currency/mas.json634
-rw-r--r--library/intl/resources/currency/mer.json634
-rw-r--r--library/intl/resources/currency/mfe.json634
-rw-r--r--library/intl/resources/currency/mg.json634
-rw-r--r--library/intl/resources/currency/mgh.json634
-rw-r--r--library/intl/resources/currency/mk.json634
-rw-r--r--library/intl/resources/currency/ml.json634
-rw-r--r--library/intl/resources/currency/mn.json634
-rw-r--r--library/intl/resources/currency/mr.json634
-rw-r--r--library/intl/resources/currency/ms.json634
-rw-r--r--library/intl/resources/currency/mt.json634
-rw-r--r--library/intl/resources/currency/mua.json634
-rw-r--r--library/intl/resources/currency/my.json634
-rw-r--r--library/intl/resources/currency/naq.json634
-rw-r--r--library/intl/resources/currency/nb.json634
-rw-r--r--library/intl/resources/currency/nd.json634
-rw-r--r--library/intl/resources/currency/ne-IN.json634
-rw-r--r--library/intl/resources/currency/ne.json634
-rw-r--r--library/intl/resources/currency/nl.json634
-rw-r--r--library/intl/resources/currency/nmg.json634
-rw-r--r--library/intl/resources/currency/nn.json634
-rw-r--r--library/intl/resources/currency/nus.json634
-rw-r--r--library/intl/resources/currency/nyn.json634
-rw-r--r--library/intl/resources/currency/or.json634
-rw-r--r--library/intl/resources/currency/pa.json634
-rw-r--r--library/intl/resources/currency/pl.json634
-rw-r--r--library/intl/resources/currency/ps.json634
-rw-r--r--library/intl/resources/currency/pt-AO.json634
-rw-r--r--library/intl/resources/currency/pt-CV.json634
-rw-r--r--library/intl/resources/currency/pt-GW.json634
-rw-r--r--library/intl/resources/currency/pt-MO.json634
-rw-r--r--library/intl/resources/currency/pt-MZ.json634
-rw-r--r--library/intl/resources/currency/pt-PT.json634
-rw-r--r--library/intl/resources/currency/pt-ST.json634
-rw-r--r--library/intl/resources/currency/pt-TL.json634
-rw-r--r--library/intl/resources/currency/pt.json634
-rw-r--r--library/intl/resources/currency/rm.json634
-rw-r--r--library/intl/resources/currency/rn.json634
-rw-r--r--library/intl/resources/currency/ro.json634
-rw-r--r--library/intl/resources/currency/rof.json634
-rw-r--r--library/intl/resources/currency/ru.json634
-rw-r--r--library/intl/resources/currency/rwk.json634
-rw-r--r--library/intl/resources/currency/saq.json634
-rw-r--r--library/intl/resources/currency/sbp.json634
-rw-r--r--library/intl/resources/currency/se.json634
-rw-r--r--library/intl/resources/currency/seh.json634
-rw-r--r--library/intl/resources/currency/ses.json634
-rw-r--r--library/intl/resources/currency/sg.json634
-rw-r--r--library/intl/resources/currency/shi-Latn.json634
-rw-r--r--library/intl/resources/currency/shi.json634
-rw-r--r--library/intl/resources/currency/si.json634
-rw-r--r--library/intl/resources/currency/sk.json634
-rw-r--r--library/intl/resources/currency/sl.json634
-rw-r--r--library/intl/resources/currency/sn.json634
-rw-r--r--library/intl/resources/currency/so.json634
-rw-r--r--library/intl/resources/currency/sq.json634
-rw-r--r--library/intl/resources/currency/sr-Cyrl-BA.json634
-rw-r--r--library/intl/resources/currency/sr-Latn-BA.json634
-rw-r--r--library/intl/resources/currency/sr-Latn.json634
-rw-r--r--library/intl/resources/currency/sr.json634
-rw-r--r--library/intl/resources/currency/sv.json634
-rw-r--r--library/intl/resources/currency/sw.json634
-rw-r--r--library/intl/resources/currency/swc.json634
-rw-r--r--library/intl/resources/currency/ta-MY.json634
-rw-r--r--library/intl/resources/currency/ta-SG.json634
-rw-r--r--library/intl/resources/currency/ta.json634
-rw-r--r--library/intl/resources/currency/te.json634
-rw-r--r--library/intl/resources/currency/teo.json634
-rw-r--r--library/intl/resources/currency/th.json634
-rw-r--r--library/intl/resources/currency/ti.json634
-rw-r--r--library/intl/resources/currency/to.json634
-rw-r--r--library/intl/resources/currency/tr.json634
-rw-r--r--library/intl/resources/currency/twq.json634
-rw-r--r--library/intl/resources/currency/tzm.json634
-rw-r--r--library/intl/resources/currency/ug.json634
-rw-r--r--library/intl/resources/currency/uk.json634
-rw-r--r--library/intl/resources/currency/ur-IN.json634
-rw-r--r--library/intl/resources/currency/ur.json634
-rw-r--r--library/intl/resources/currency/uz-Cyrl.json634
-rw-r--r--library/intl/resources/currency/uz.json634
-rw-r--r--library/intl/resources/currency/vai-Latn.json634
-rw-r--r--library/intl/resources/currency/vai.json634
-rw-r--r--library/intl/resources/currency/vi.json634
-rw-r--r--library/intl/resources/currency/vun.json634
-rw-r--r--library/intl/resources/currency/wae.json634
-rw-r--r--library/intl/resources/currency/xog.json634
-rw-r--r--library/intl/resources/currency/yav.json634
-rw-r--r--library/intl/resources/currency/yo-BJ.json634
-rw-r--r--library/intl/resources/currency/yo.json634
-rw-r--r--library/intl/resources/currency/zgh.json634
-rw-r--r--library/intl/resources/currency/zh-Hans-HK.json634
-rw-r--r--library/intl/resources/currency/zh-Hans-MO.json634
-rw-r--r--library/intl/resources/currency/zh-Hans-SG.json634
-rw-r--r--library/intl/resources/currency/zh-Hant-HK.json634
-rw-r--r--library/intl/resources/currency/zh-Hant-MO.json634
-rw-r--r--library/intl/resources/currency/zh-Hant.json634
-rw-r--r--library/intl/resources/currency/zh.json634
-rw-r--r--library/intl/resources/currency/zu.json634
-rw-r--r--library/intl/resources/language/af.json738
-rw-r--r--library/intl/resources/language/agq.json738
-rw-r--r--library/intl/resources/language/ak.json738
-rw-r--r--library/intl/resources/language/am.json738
-rw-r--r--library/intl/resources/language/ar-AE.json738
-rw-r--r--library/intl/resources/language/ar-EG.json738
-rw-r--r--library/intl/resources/language/ar.json738
-rw-r--r--library/intl/resources/language/asa.json738
-rw-r--r--library/intl/resources/language/ast.json738
-rw-r--r--library/intl/resources/language/az.json738
-rw-r--r--library/intl/resources/language/bas.json738
-rw-r--r--library/intl/resources/language/be.json738
-rw-r--r--library/intl/resources/language/bez.json738
-rw-r--r--library/intl/resources/language/bg.json738
-rw-r--r--library/intl/resources/language/bm.json738
-rw-r--r--library/intl/resources/language/bn-IN.json738
-rw-r--r--library/intl/resources/language/bn.json738
-rw-r--r--library/intl/resources/language/bo.json738
-rw-r--r--library/intl/resources/language/br.json738
-rw-r--r--library/intl/resources/language/brx.json738
-rw-r--r--library/intl/resources/language/bs-Cyrl.json738
-rw-r--r--library/intl/resources/language/bs.json738
-rw-r--r--library/intl/resources/language/ca.json738
-rw-r--r--library/intl/resources/language/cgg.json738
-rw-r--r--library/intl/resources/language/chr.json738
-rw-r--r--library/intl/resources/language/cs.json738
-rw-r--r--library/intl/resources/language/cy.json738
-rw-r--r--library/intl/resources/language/da.json738
-rw-r--r--library/intl/resources/language/dav.json738
-rw-r--r--library/intl/resources/language/de-CH.json738
-rw-r--r--library/intl/resources/language/de.json738
-rw-r--r--library/intl/resources/language/dje.json738
-rw-r--r--library/intl/resources/language/dsb.json738
-rw-r--r--library/intl/resources/language/dyo.json738
-rw-r--r--library/intl/resources/language/dz.json738
-rw-r--r--library/intl/resources/language/ebu.json738
-rw-r--r--library/intl/resources/language/ee.json738
-rw-r--r--library/intl/resources/language/el.json738
-rw-r--r--library/intl/resources/language/en-AU.json738
-rw-r--r--library/intl/resources/language/en.json738
-rw-r--r--library/intl/resources/language/eo.json738
-rw-r--r--library/intl/resources/language/es-AR.json738
-rw-r--r--library/intl/resources/language/es-BO.json738
-rw-r--r--library/intl/resources/language/es-CL.json738
-rw-r--r--library/intl/resources/language/es-CO.json738
-rw-r--r--library/intl/resources/language/es-CR.json738
-rw-r--r--library/intl/resources/language/es-CU.json738
-rw-r--r--library/intl/resources/language/es-DO.json738
-rw-r--r--library/intl/resources/language/es-EC.json738
-rw-r--r--library/intl/resources/language/es-GT.json738
-rw-r--r--library/intl/resources/language/es-HN.json738
-rw-r--r--library/intl/resources/language/es-MX.json738
-rw-r--r--library/intl/resources/language/es-NI.json738
-rw-r--r--library/intl/resources/language/es-PA.json738
-rw-r--r--library/intl/resources/language/es-PE.json738
-rw-r--r--library/intl/resources/language/es-PR.json738
-rw-r--r--library/intl/resources/language/es-PY.json738
-rw-r--r--library/intl/resources/language/es-SV.json738
-rw-r--r--library/intl/resources/language/es-US.json738
-rw-r--r--library/intl/resources/language/es-UY.json738
-rw-r--r--library/intl/resources/language/es-VE.json738
-rw-r--r--library/intl/resources/language/es.json738
-rw-r--r--library/intl/resources/language/et.json738
-rw-r--r--library/intl/resources/language/eu.json738
-rw-r--r--library/intl/resources/language/ewo.json738
-rw-r--r--library/intl/resources/language/fa-AF.json738
-rw-r--r--library/intl/resources/language/fa.json738
-rw-r--r--library/intl/resources/language/ff.json738
-rw-r--r--library/intl/resources/language/fi.json738
-rw-r--r--library/intl/resources/language/fil.json738
-rw-r--r--library/intl/resources/language/fo.json738
-rw-r--r--library/intl/resources/language/fr-CA.json738
-rw-r--r--library/intl/resources/language/fr.json738
-rw-r--r--library/intl/resources/language/fur.json738
-rw-r--r--library/intl/resources/language/fy.json738
-rw-r--r--library/intl/resources/language/ga.json738
-rw-r--r--library/intl/resources/language/gd.json738
-rw-r--r--library/intl/resources/language/gl.json738
-rw-r--r--library/intl/resources/language/gsw.json738
-rw-r--r--library/intl/resources/language/gu.json738
-rw-r--r--library/intl/resources/language/guz.json738
-rw-r--r--library/intl/resources/language/ha.json738
-rw-r--r--library/intl/resources/language/he.json738
-rw-r--r--library/intl/resources/language/hi.json738
-rw-r--r--library/intl/resources/language/hr.json738
-rw-r--r--library/intl/resources/language/hsb.json738
-rw-r--r--library/intl/resources/language/hu.json738
-rw-r--r--library/intl/resources/language/hy.json738
-rw-r--r--library/intl/resources/language/id.json738
-rw-r--r--library/intl/resources/language/is.json738
-rw-r--r--library/intl/resources/language/it.json738
-rw-r--r--library/intl/resources/language/ja.json738
-rw-r--r--library/intl/resources/language/jgo.json738
-rw-r--r--library/intl/resources/language/jmc.json738
-rw-r--r--library/intl/resources/language/ka.json738
-rw-r--r--library/intl/resources/language/kab.json738
-rw-r--r--library/intl/resources/language/kam.json738
-rw-r--r--library/intl/resources/language/kde.json738
-rw-r--r--library/intl/resources/language/kea.json738
-rw-r--r--library/intl/resources/language/khq.json738
-rw-r--r--library/intl/resources/language/ki.json738
-rw-r--r--library/intl/resources/language/kk.json738
-rw-r--r--library/intl/resources/language/kl.json738
-rw-r--r--library/intl/resources/language/kln.json738
-rw-r--r--library/intl/resources/language/km.json738
-rw-r--r--library/intl/resources/language/kn.json738
-rw-r--r--library/intl/resources/language/ko.json738
-rw-r--r--library/intl/resources/language/ks.json738
-rw-r--r--library/intl/resources/language/ksb.json738
-rw-r--r--library/intl/resources/language/ksf.json738
-rw-r--r--library/intl/resources/language/ksh.json738
-rw-r--r--library/intl/resources/language/ky.json738
-rw-r--r--library/intl/resources/language/lag.json738
-rw-r--r--library/intl/resources/language/lb.json738
-rw-r--r--library/intl/resources/language/lg.json738
-rw-r--r--library/intl/resources/language/ln.json738
-rw-r--r--library/intl/resources/language/lo.json738
-rw-r--r--library/intl/resources/language/lt.json738
-rw-r--r--library/intl/resources/language/lu.json738
-rw-r--r--library/intl/resources/language/luo.json738
-rw-r--r--library/intl/resources/language/luy.json738
-rw-r--r--library/intl/resources/language/lv.json738
-rw-r--r--library/intl/resources/language/mas.json738
-rw-r--r--library/intl/resources/language/mer.json738
-rw-r--r--library/intl/resources/language/mfe.json738
-rw-r--r--library/intl/resources/language/mg.json738
-rw-r--r--library/intl/resources/language/mgh.json738
-rw-r--r--library/intl/resources/language/mk.json738
-rw-r--r--library/intl/resources/language/ml.json738
-rw-r--r--library/intl/resources/language/mn.json738
-rw-r--r--library/intl/resources/language/mr.json738
-rw-r--r--library/intl/resources/language/ms.json738
-rw-r--r--library/intl/resources/language/mt.json738
-rw-r--r--library/intl/resources/language/mua.json738
-rw-r--r--library/intl/resources/language/my.json738
-rw-r--r--library/intl/resources/language/naq.json738
-rw-r--r--library/intl/resources/language/nb.json738
-rw-r--r--library/intl/resources/language/nd.json738
-rw-r--r--library/intl/resources/language/ne-IN.json738
-rw-r--r--library/intl/resources/language/ne.json738
-rw-r--r--library/intl/resources/language/nl.json738
-rw-r--r--library/intl/resources/language/nmg.json738
-rw-r--r--library/intl/resources/language/nn.json738
-rw-r--r--library/intl/resources/language/nus.json738
-rw-r--r--library/intl/resources/language/nyn.json738
-rw-r--r--library/intl/resources/language/or.json738
-rw-r--r--library/intl/resources/language/pa.json738
-rw-r--r--library/intl/resources/language/pl.json738
-rw-r--r--library/intl/resources/language/ps.json738
-rw-r--r--library/intl/resources/language/pt-AO.json738
-rw-r--r--library/intl/resources/language/pt-CV.json738
-rw-r--r--library/intl/resources/language/pt-GW.json738
-rw-r--r--library/intl/resources/language/pt-MO.json738
-rw-r--r--library/intl/resources/language/pt-MZ.json738
-rw-r--r--library/intl/resources/language/pt-PT.json738
-rw-r--r--library/intl/resources/language/pt-ST.json738
-rw-r--r--library/intl/resources/language/pt-TL.json738
-rw-r--r--library/intl/resources/language/pt.json738
-rw-r--r--library/intl/resources/language/rm.json738
-rw-r--r--library/intl/resources/language/rn.json738
-rw-r--r--library/intl/resources/language/ro.json738
-rw-r--r--library/intl/resources/language/rof.json738
-rw-r--r--library/intl/resources/language/ru.json738
-rw-r--r--library/intl/resources/language/rwk.json738
-rw-r--r--library/intl/resources/language/saq.json738
-rw-r--r--library/intl/resources/language/sbp.json738
-rw-r--r--library/intl/resources/language/se-FI.json738
-rw-r--r--library/intl/resources/language/se.json738
-rw-r--r--library/intl/resources/language/seh.json738
-rw-r--r--library/intl/resources/language/ses.json738
-rw-r--r--library/intl/resources/language/sg.json738
-rw-r--r--library/intl/resources/language/shi-Latn.json738
-rw-r--r--library/intl/resources/language/shi.json738
-rw-r--r--library/intl/resources/language/si.json738
-rw-r--r--library/intl/resources/language/sk.json738
-rw-r--r--library/intl/resources/language/sl.json738
-rw-r--r--library/intl/resources/language/sn.json738
-rw-r--r--library/intl/resources/language/so.json738
-rw-r--r--library/intl/resources/language/sq.json738
-rw-r--r--library/intl/resources/language/sr-Latn.json738
-rw-r--r--library/intl/resources/language/sr.json738
-rw-r--r--library/intl/resources/language/sv-FI.json738
-rw-r--r--library/intl/resources/language/sv.json738
-rw-r--r--library/intl/resources/language/sw.json738
-rw-r--r--library/intl/resources/language/swc.json738
-rw-r--r--library/intl/resources/language/ta.json738
-rw-r--r--library/intl/resources/language/te.json738
-rw-r--r--library/intl/resources/language/teo.json738
-rw-r--r--library/intl/resources/language/th.json738
-rw-r--r--library/intl/resources/language/ti.json738
-rw-r--r--library/intl/resources/language/to.json738
-rw-r--r--library/intl/resources/language/tr.json738
-rw-r--r--library/intl/resources/language/twq.json738
-rw-r--r--library/intl/resources/language/tzm.json738
-rw-r--r--library/intl/resources/language/ug.json738
-rw-r--r--library/intl/resources/language/uk.json738
-rw-r--r--library/intl/resources/language/ur-IN.json738
-rw-r--r--library/intl/resources/language/ur.json738
-rw-r--r--library/intl/resources/language/uz-Cyrl.json738
-rw-r--r--library/intl/resources/language/uz.json738
-rw-r--r--library/intl/resources/language/vai-Latn.json738
-rw-r--r--library/intl/resources/language/vai.json738
-rw-r--r--library/intl/resources/language/vi.json738
-rw-r--r--library/intl/resources/language/vun.json738
-rw-r--r--library/intl/resources/language/wae.json738
-rw-r--r--library/intl/resources/language/xog.json738
-rw-r--r--library/intl/resources/language/yav.json738
-rw-r--r--library/intl/resources/language/yo-BJ.json738
-rw-r--r--library/intl/resources/language/yo.json738
-rw-r--r--library/intl/resources/language/zgh.json738
-rw-r--r--library/intl/resources/language/zh-Hans-HK.json738
-rw-r--r--library/intl/resources/language/zh-Hans-MO.json738
-rw-r--r--library/intl/resources/language/zh-Hans-SG.json738
-rw-r--r--library/intl/resources/language/zh-Hant-HK.json738
-rw-r--r--library/intl/resources/language/zh-Hant-MO.json738
-rw-r--r--library/intl/resources/language/zh-Hant.json738
-rw-r--r--library/intl/resources/language/zh.json738
-rw-r--r--library/intl/resources/language/zu.json738
-rw-r--r--library/intl/resources/number_format/aa.json7
-rw-r--r--library/intl/resources/number_format/af-NA.json9
-rw-r--r--library/intl/resources/number_format/af.json9
-rw-r--r--library/intl/resources/number_format/agq.json9
-rw-r--r--library/intl/resources/number_format/ak.json7
-rw-r--r--library/intl/resources/number_format/am.json7
-rw-r--r--library/intl/resources/number_format/ar-DZ.json11
-rw-r--r--library/intl/resources/number_format/ar-EH.json9
-rw-r--r--library/intl/resources/number_format/ar-LY.json11
-rw-r--r--library/intl/resources/number_format/ar-MA.json11
-rw-r--r--library/intl/resources/number_format/ar-TN.json11
-rw-r--r--library/intl/resources/number_format/ar.json12
-rw-r--r--library/intl/resources/number_format/as.json7
-rw-r--r--library/intl/resources/number_format/asa.json7
-rw-r--r--library/intl/resources/number_format/ast.json9
-rw-r--r--library/intl/resources/number_format/az.json9
-rw-r--r--library/intl/resources/number_format/bas.json9
-rw-r--r--library/intl/resources/number_format/be.json9
-rw-r--r--library/intl/resources/number_format/bem.json7
-rw-r--r--library/intl/resources/number_format/bez.json7
-rw-r--r--library/intl/resources/number_format/bg.json9
-rw-r--r--library/intl/resources/number_format/bm.json7
-rw-r--r--library/intl/resources/number_format/bn.json7
-rw-r--r--library/intl/resources/number_format/bo.json7
-rw-r--r--library/intl/resources/number_format/br.json9
-rw-r--r--library/intl/resources/number_format/brx.json7
-rw-r--r--library/intl/resources/number_format/bs.json9
-rw-r--r--library/intl/resources/number_format/ca.json9
-rw-r--r--library/intl/resources/number_format/cgg.json7
-rw-r--r--library/intl/resources/number_format/chr.json7
-rw-r--r--library/intl/resources/number_format/cs.json9
-rw-r--r--library/intl/resources/number_format/cy.json7
-rw-r--r--library/intl/resources/number_format/da.json9
-rw-r--r--library/intl/resources/number_format/dav.json7
-rw-r--r--library/intl/resources/number_format/de-AT.json9
-rw-r--r--library/intl/resources/number_format/de-CH.json8
-rw-r--r--library/intl/resources/number_format/de-LI.json8
-rw-r--r--library/intl/resources/number_format/de.json9
-rw-r--r--library/intl/resources/number_format/dje.json8
-rw-r--r--library/intl/resources/number_format/dsb.json9
-rw-r--r--library/intl/resources/number_format/dua.json9
-rw-r--r--library/intl/resources/number_format/dyo.json9
-rw-r--r--library/intl/resources/number_format/dz.json7
-rw-r--r--library/intl/resources/number_format/ebu.json7
-rw-r--r--library/intl/resources/number_format/ee.json7
-rw-r--r--library/intl/resources/number_format/el-CY.json9
-rw-r--r--library/intl/resources/number_format/el.json9
-rw-r--r--library/intl/resources/number_format/en-BE.json9
-rw-r--r--library/intl/resources/number_format/en-IN.json7
-rw-r--r--library/intl/resources/number_format/en-PK.json7
-rw-r--r--library/intl/resources/number_format/en-ZA.json9
-rw-r--r--library/intl/resources/number_format/en.json7
-rw-r--r--library/intl/resources/number_format/eo.json10
-rw-r--r--library/intl/resources/number_format/es-AR.json9
-rw-r--r--library/intl/resources/number_format/es-BO.json9
-rw-r--r--library/intl/resources/number_format/es-CL.json9
-rw-r--r--library/intl/resources/number_format/es-CO.json9
-rw-r--r--library/intl/resources/number_format/es-CR.json9
-rw-r--r--library/intl/resources/number_format/es-CU.json7
-rw-r--r--library/intl/resources/number_format/es-DO.json7
-rw-r--r--library/intl/resources/number_format/es-EC.json9
-rw-r--r--library/intl/resources/number_format/es-GQ.json9
-rw-r--r--library/intl/resources/number_format/es-GT.json7
-rw-r--r--library/intl/resources/number_format/es-HN.json7
-rw-r--r--library/intl/resources/number_format/es-MX.json7
-rw-r--r--library/intl/resources/number_format/es-NI.json7
-rw-r--r--library/intl/resources/number_format/es-PA.json7
-rw-r--r--library/intl/resources/number_format/es-PE.json7
-rw-r--r--library/intl/resources/number_format/es-PR.json7
-rw-r--r--library/intl/resources/number_format/es-PY.json9
-rw-r--r--library/intl/resources/number_format/es-SV.json7
-rw-r--r--library/intl/resources/number_format/es-US.json7
-rw-r--r--library/intl/resources/number_format/es-UY.json9
-rw-r--r--library/intl/resources/number_format/es-VE.json9
-rw-r--r--library/intl/resources/number_format/es.json9
-rw-r--r--library/intl/resources/number_format/et.json9
-rw-r--r--library/intl/resources/number_format/eu.json9
-rw-r--r--library/intl/resources/number_format/ewo.json9
-rw-r--r--library/intl/resources/number_format/fa.json12
-rw-r--r--library/intl/resources/number_format/ff.json9
-rw-r--r--library/intl/resources/number_format/fi.json10
-rw-r--r--library/intl/resources/number_format/fil.json7
-rw-r--r--library/intl/resources/number_format/fo.json10
-rw-r--r--library/intl/resources/number_format/fr-BE.json9
-rw-r--r--library/intl/resources/number_format/fr-CH.json8
-rw-r--r--library/intl/resources/number_format/fr-LU.json9
-rw-r--r--library/intl/resources/number_format/fr.json9
-rw-r--r--library/intl/resources/number_format/fur.json9
-rw-r--r--library/intl/resources/number_format/fy.json9
-rw-r--r--library/intl/resources/number_format/ga.json7
-rw-r--r--library/intl/resources/number_format/gd.json7
-rw-r--r--library/intl/resources/number_format/gl.json9
-rw-r--r--library/intl/resources/number_format/gsw.json9
-rw-r--r--library/intl/resources/number_format/gu.json7
-rw-r--r--library/intl/resources/number_format/guz.json7
-rw-r--r--library/intl/resources/number_format/gv.json7
-rw-r--r--library/intl/resources/number_format/ha.json7
-rw-r--r--library/intl/resources/number_format/haw.json7
-rw-r--r--library/intl/resources/number_format/he.json9
-rw-r--r--library/intl/resources/number_format/hi.json7
-rw-r--r--library/intl/resources/number_format/hr.json9
-rw-r--r--library/intl/resources/number_format/hsb.json9
-rw-r--r--library/intl/resources/number_format/hu.json9
-rw-r--r--library/intl/resources/number_format/hy.json9
-rw-r--r--library/intl/resources/number_format/id.json9
-rw-r--r--library/intl/resources/number_format/ig.json7
-rw-r--r--library/intl/resources/number_format/ii.json7
-rw-r--r--library/intl/resources/number_format/is.json9
-rw-r--r--library/intl/resources/number_format/it-CH.json8
-rw-r--r--library/intl/resources/number_format/it.json9
-rw-r--r--library/intl/resources/number_format/ja.json7
-rw-r--r--library/intl/resources/number_format/jgo.json9
-rw-r--r--library/intl/resources/number_format/jmc.json7
-rw-r--r--library/intl/resources/number_format/ka.json9
-rw-r--r--library/intl/resources/number_format/kab.json9
-rw-r--r--library/intl/resources/number_format/kam.json7
-rw-r--r--library/intl/resources/number_format/kde.json7
-rw-r--r--library/intl/resources/number_format/kea.json9
-rw-r--r--library/intl/resources/number_format/khq.json8
-rw-r--r--library/intl/resources/number_format/ki.json7
-rw-r--r--library/intl/resources/number_format/kk.json9
-rw-r--r--library/intl/resources/number_format/kkj.json9
-rw-r--r--library/intl/resources/number_format/kl.json10
-rw-r--r--library/intl/resources/number_format/kln.json7
-rw-r--r--library/intl/resources/number_format/km.json9
-rw-r--r--library/intl/resources/number_format/kn.json7
-rw-r--r--library/intl/resources/number_format/ko.json7
-rw-r--r--library/intl/resources/number_format/kok.json7
-rw-r--r--library/intl/resources/number_format/ks.json12
-rw-r--r--library/intl/resources/number_format/ksb.json7
-rw-r--r--library/intl/resources/number_format/ksf.json9
-rw-r--r--library/intl/resources/number_format/ksh.json10
-rw-r--r--library/intl/resources/number_format/kw.json7
-rw-r--r--library/intl/resources/number_format/ky.json9
-rw-r--r--library/intl/resources/number_format/lag.json7
-rw-r--r--library/intl/resources/number_format/lb.json9
-rw-r--r--library/intl/resources/number_format/lg.json7
-rw-r--r--library/intl/resources/number_format/lkt.json7
-rw-r--r--library/intl/resources/number_format/ln.json9
-rw-r--r--library/intl/resources/number_format/lo.json9
-rw-r--r--library/intl/resources/number_format/lt.json10
-rw-r--r--library/intl/resources/number_format/lu.json9
-rw-r--r--library/intl/resources/number_format/luo.json7
-rw-r--r--library/intl/resources/number_format/luy.json7
-rw-r--r--library/intl/resources/number_format/lv.json9
-rw-r--r--library/intl/resources/number_format/mas.json7
-rw-r--r--library/intl/resources/number_format/mer.json7
-rw-r--r--library/intl/resources/number_format/mfe.json8
-rw-r--r--library/intl/resources/number_format/mg.json7
-rw-r--r--library/intl/resources/number_format/mgh.json9
-rw-r--r--library/intl/resources/number_format/mgo.json7
-rw-r--r--library/intl/resources/number_format/mk.json9
-rw-r--r--library/intl/resources/number_format/ml.json7
-rw-r--r--library/intl/resources/number_format/mn.json7
-rw-r--r--library/intl/resources/number_format/mr.json7
-rw-r--r--library/intl/resources/number_format/ms-Latn-BN.json9
-rw-r--r--library/intl/resources/number_format/ms.json7
-rw-r--r--library/intl/resources/number_format/mt.json7
-rw-r--r--library/intl/resources/number_format/mua.json9
-rw-r--r--library/intl/resources/number_format/my.json7
-rw-r--r--library/intl/resources/number_format/naq.json7
-rw-r--r--library/intl/resources/number_format/nb.json10
-rw-r--r--library/intl/resources/number_format/nd.json7
-rw-r--r--library/intl/resources/number_format/ne.json7
-rw-r--r--library/intl/resources/number_format/nl-BE.json9
-rw-r--r--library/intl/resources/number_format/nl.json9
-rw-r--r--library/intl/resources/number_format/nmg.json9
-rw-r--r--library/intl/resources/number_format/nn.json10
-rw-r--r--library/intl/resources/number_format/nnh.json9
-rw-r--r--library/intl/resources/number_format/nr.json9
-rw-r--r--library/intl/resources/number_format/nso.json8
-rw-r--r--library/intl/resources/number_format/nus.json7
-rw-r--r--library/intl/resources/number_format/nyn.json7
-rw-r--r--library/intl/resources/number_format/om.json7
-rw-r--r--library/intl/resources/number_format/or.json7
-rw-r--r--library/intl/resources/number_format/os.json9
-rw-r--r--library/intl/resources/number_format/pa-Arab.json12
-rw-r--r--library/intl/resources/number_format/pa.json7
-rw-r--r--library/intl/resources/number_format/pl.json9
-rw-r--r--library/intl/resources/number_format/ps.json12
-rw-r--r--library/intl/resources/number_format/pt-AO.json9
-rw-r--r--library/intl/resources/number_format/pt-CV.json9
-rw-r--r--library/intl/resources/number_format/pt-GW.json9
-rw-r--r--library/intl/resources/number_format/pt-MO.json9
-rw-r--r--library/intl/resources/number_format/pt-MZ.json9
-rw-r--r--library/intl/resources/number_format/pt-PT.json9
-rw-r--r--library/intl/resources/number_format/pt-ST.json9
-rw-r--r--library/intl/resources/number_format/pt-TL.json9
-rw-r--r--library/intl/resources/number_format/pt.json9
-rw-r--r--library/intl/resources/number_format/qu-BO.json9
-rw-r--r--library/intl/resources/number_format/qu.json7
-rw-r--r--library/intl/resources/number_format/rm.json9
-rw-r--r--library/intl/resources/number_format/rn.json9
-rw-r--r--library/intl/resources/number_format/ro.json9
-rw-r--r--library/intl/resources/number_format/rof.json7
-rw-r--r--library/intl/resources/number_format/ru.json9
-rw-r--r--library/intl/resources/number_format/rw.json9
-rw-r--r--library/intl/resources/number_format/rwk.json7
-rw-r--r--library/intl/resources/number_format/sah.json7
-rw-r--r--library/intl/resources/number_format/saq.json7
-rw-r--r--library/intl/resources/number_format/sbp.json7
-rw-r--r--library/intl/resources/number_format/se.json10
-rw-r--r--library/intl/resources/number_format/seh.json9
-rw-r--r--library/intl/resources/number_format/ses.json8
-rw-r--r--library/intl/resources/number_format/sg.json9
-rw-r--r--library/intl/resources/number_format/shi.json9
-rw-r--r--library/intl/resources/number_format/si.json7
-rw-r--r--library/intl/resources/number_format/sk.json9
-rw-r--r--library/intl/resources/number_format/sl.json9
-rw-r--r--library/intl/resources/number_format/smn.json7
-rw-r--r--library/intl/resources/number_format/sn.json7
-rw-r--r--library/intl/resources/number_format/so.json7
-rw-r--r--library/intl/resources/number_format/sq.json9
-rw-r--r--library/intl/resources/number_format/sr.json9
-rw-r--r--library/intl/resources/number_format/ss.json9
-rw-r--r--library/intl/resources/number_format/ssy.json7
-rw-r--r--library/intl/resources/number_format/sv.json10
-rw-r--r--library/intl/resources/number_format/sw.json7
-rw-r--r--library/intl/resources/number_format/swc.json9
-rw-r--r--library/intl/resources/number_format/ta-MY.json7
-rw-r--r--library/intl/resources/number_format/ta-SG.json7
-rw-r--r--library/intl/resources/number_format/ta.json7
-rw-r--r--library/intl/resources/number_format/te.json7
-rw-r--r--library/intl/resources/number_format/teo.json7
-rw-r--r--library/intl/resources/number_format/th.json7
-rw-r--r--library/intl/resources/number_format/ti.json7
-rw-r--r--library/intl/resources/number_format/tn.json8
-rw-r--r--library/intl/resources/number_format/to.json7
-rw-r--r--library/intl/resources/number_format/tr.json9
-rw-r--r--library/intl/resources/number_format/ts.json9
-rw-r--r--library/intl/resources/number_format/twq.json8
-rw-r--r--library/intl/resources/number_format/tzm.json9
-rw-r--r--library/intl/resources/number_format/ug.json7
-rw-r--r--library/intl/resources/number_format/uk.json9
-rw-r--r--library/intl/resources/number_format/ur-IN.json9
-rw-r--r--library/intl/resources/number_format/ur.json9
-rw-r--r--library/intl/resources/number_format/uz-Arab.json12
-rw-r--r--library/intl/resources/number_format/uz.json9
-rw-r--r--library/intl/resources/number_format/vai.json7
-rw-r--r--library/intl/resources/number_format/ve.json9
-rw-r--r--library/intl/resources/number_format/vi.json9
-rw-r--r--library/intl/resources/number_format/vo.json7
-rw-r--r--library/intl/resources/number_format/vun.json7
-rw-r--r--library/intl/resources/number_format/wae.json9
-rw-r--r--library/intl/resources/number_format/xog.json7
-rw-r--r--library/intl/resources/number_format/yav.json9
-rw-r--r--library/intl/resources/number_format/yi.json7
-rw-r--r--library/intl/resources/number_format/yo.json7
-rw-r--r--library/intl/resources/number_format/zgh.json9
-rw-r--r--library/intl/resources/number_format/zh-Hans-HK.json7
-rw-r--r--library/intl/resources/number_format/zh-Hans-MO.json7
-rw-r--r--library/intl/resources/number_format/zh-Hans-SG.json7
-rw-r--r--library/intl/resources/number_format/zh-Hant.json7
-rw-r--r--library/intl/resources/number_format/zh.json7
-rw-r--r--library/intl/resources/number_format/zu.json7
-rw-r--r--library/intl/scripts/country/generate.php162
-rw-r--r--library/intl/scripts/currency/generate.php153
-rw-r--r--library/intl/scripts/language/generate.php129
-rw-r--r--library/intl/scripts/number_format/generate.php107
-rw-r--r--library/intl/src/Country/Country.php168
-rw-r--r--library/intl/src/Country/CountryInterface.php99
-rw-r--r--library/intl/src/Country/CountryRepository.php124
-rw-r--r--library/intl/src/Country/CountryRepositoryInterface.php31
-rw-r--r--library/intl/src/Currency/Currency.php168
-rw-r--r--library/intl/src/Currency/CurrencyInterface.php82
-rw-r--r--library/intl/src/Currency/CurrencyRepository.php122
-rw-r--r--library/intl/src/Currency/CurrencyRepositoryInterface.php31
-rw-r--r--library/intl/src/Exception/ExceptionInterface.php7
-rw-r--r--library/intl/src/Exception/InvalidArgumentException.php11
-rw-r--r--library/intl/src/Exception/UnknownCountryException.php11
-rw-r--r--library/intl/src/Exception/UnknownCurrencyException.php11
-rw-r--r--library/intl/src/Exception/UnknownLanguageException.php11
-rw-r--r--library/intl/src/Exception/UnknownLocaleException.php10
-rw-r--r--library/intl/src/Formatter/NumberFormatter.php406
-rw-r--r--library/intl/src/Formatter/NumberFormatterInterface.php134
-rw-r--r--library/intl/src/Language/Language.php91
-rw-r--r--library/intl/src/Language/LanguageInterface.php37
-rw-r--r--library/intl/src/Language/LanguageRepository.php96
-rw-r--r--library/intl/src/Language/LanguageRepositoryInterface.php31
-rw-r--r--library/intl/src/LocaleResolverTrait.php89
-rw-r--r--library/intl/src/NumberFormat/NumberFormat.php269
-rw-r--r--library/intl/src/NumberFormat/NumberFormatInterface.php185
-rw-r--r--library/intl/src/NumberFormat/NumberFormatRepository.php87
-rw-r--r--library/intl/src/NumberFormat/NumberFormatRepositoryInterface.php19
-rw-r--r--library/intl/tests/Country/CountryRepositoryTest.php114
-rw-r--r--library/intl/tests/Country/CountryTest.php83
-rw-r--r--library/intl/tests/Currency/CurrencyRepositoryTest.php113
-rw-r--r--library/intl/tests/Currency/CurrencyTest.php83
-rw-r--r--library/intl/tests/DummyRepository.php23
-rw-r--r--library/intl/tests/Formatter/NumberFormatterTest.php378
-rw-r--r--library/intl/tests/Language/LanguageRepositoryTest.php92
-rw-r--r--library/intl/tests/Language/LanguageTest.php53
-rw-r--r--library/intl/tests/LocaleResolverTest.php51
-rw-r--r--library/intl/tests/NumberFormat/NumberFormatRepositoryTest.php69
-rw-r--r--library/intl/tests/NumberFormat/NumberFormatTest.php131
-rw-r--r--library/intl/vendor/autoload.php7
-rw-r--r--library/intl/vendor/composer/ClassLoader.php387
-rw-r--r--library/intl/vendor/composer/autoload_classmap.php9
-rw-r--r--library/intl/vendor/composer/autoload_namespaces.php9
-rw-r--r--library/intl/vendor/composer/autoload_psr4.php10
-rw-r--r--library/intl/vendor/composer/autoload_real.php50
-rw-r--r--library/jRange/.gitignore2
-rw-r--r--library/jRange/LICENSE (renamed from library/jslider/MIT-LICENSE.txt)3
-rw-r--r--library/jRange/README.md5
-rw-r--r--library/jRange/demo/index.html245
-rw-r--r--library/jRange/demo/main.css289
-rw-r--r--library/jRange/demo/main.less296
-rw-r--r--library/jRange/demo/normalize.css425
-rw-r--r--library/jRange/demo/prism/prism.css193
-rw-r--r--library/jRange/demo/prism/prism.js8
-rw-r--r--library/jRange/jquery.range-min.js1
-rw-r--r--library/jRange/jquery.range.css168
-rw-r--r--library/jRange/jquery.range.js297
-rw-r--r--library/jRange/jquery.range.less192
-rw-r--r--library/jgrowl/README2
-rw-r--r--library/jgrowl/jquery.jgrowl.css137
-rw-r--r--library/jgrowl/jquery.jgrowl_minimized.js13
-rw-r--r--library/jquery-textcomplete/LICENSE21
-rw-r--r--library/jquery-textcomplete/jquery.textcomplete.js1088
-rw-r--r--library/jquery.AreYouSure/.gitignore166
-rw-r--r--library/jquery.AreYouSure/Gruntfile.js26
-rw-r--r--library/jquery.AreYouSure/README.md297
-rw-r--r--library/jquery.AreYouSure/are-you-sure.jquery.json39
-rw-r--r--library/jquery.AreYouSure/ays-beforeunload-shim.js31
-rw-r--r--library/jquery.AreYouSure/bower.json30
-rw-r--r--library/jquery.AreYouSure/demo/are-you-sure-demo.html576
-rw-r--r--library/jquery.AreYouSure/jquery.are-you-sure.js192
-rw-r--r--library/jquery.AreYouSure/package.json45
-rw-r--r--library/jquery.AreYouSure/spec/javascripts/fixtures/input-text.html4
-rw-r--r--library/jquery.AreYouSure/spec/javascripts/jquery.are-you-sure_spec.js28
-rw-r--r--library/jquery.divgrow/divGrow-1.3.1.zipbin2124 -> 0 bytes
-rw-r--r--library/jquery.divgrow/howto46
-rw-r--r--library/jquery.divgrow/jquery.divgrow-1.3.1.js89
-rw-r--r--library/jquery.divgrow/jquery.divgrow-1.3.1.min.js1
-rw-r--r--library/jslider/.gitignore2
-rw-r--r--library/jslider/Makefile15
-rw-r--r--library/jslider/README.md9
-rw-r--r--library/jslider/bin/jquery.slider.min.css1
-rw-r--r--library/jslider/bin/jquery.slider.min.js1
-rw-r--r--library/jslider/css/jslider.blue.css4
-rw-r--r--library/jslider/css/jslider.css39
-rw-r--r--library/jslider/css/jslider.plastic.css3
-rw-r--r--library/jslider/css/jslider.round.css5
-rw-r--r--library/jslider/css/jslider.round.plastic.css5
-rw-r--r--library/jslider/img/jslider.blue.pngbin1001 -> 0 bytes
-rw-r--r--library/jslider/img/jslider.plastic.pngbin1237 -> 0 bytes
-rw-r--r--library/jslider/img/jslider.pngbin832 -> 0 bytes
-rw-r--r--library/jslider/img/jslider.round.plastic.pngbin1770 -> 0 bytes
-rw-r--r--library/jslider/img/jslider.round.pngbin1871 -> 0 bytes
-rw-r--r--library/jslider/index.html152
-rw-r--r--library/jslider/js/draggable-0.1.js196
-rw-r--r--library/jslider/js/jquery-1.7.1.js9266
-rw-r--r--library/jslider/js/jquery.dependClass-0.1.js56
-rw-r--r--library/jslider/js/jquery.numberformatter-1.2.3.js510
-rw-r--r--library/jslider/js/jquery.slider.js700
-rw-r--r--library/jslider/js/jshashtable-2.1_src.js370
-rw-r--r--library/jslider/js/tmpl.js35
-rw-r--r--library/jslider/src/skin.psdbin143059 -> 0 bytes
-rw-r--r--library/jslider/tests/show_hide.html53
-rw-r--r--library/jslider/tests/zero_value.html64
-rw-r--r--library/jslider/tools/yuicompressor-2.4.7.jarbin891148 -> 0 bytes
-rw-r--r--library/justifiedGallery/dist/css/justifiedGallery.css149
-rw-r--r--library/justifiedGallery/dist/css/justifiedGallery.min.css7
-rw-r--r--library/justifiedGallery/dist/js/jquery.justifiedGallery.js661
-rw-r--r--library/justifiedGallery/dist/js/jquery.justifiedGallery.min.js7
-rw-r--r--library/oauth/LICENSE37
-rw-r--r--library/oauth/LICENSE.txt36
-rw-r--r--library/oauth/http.php2092
-rw-r--r--library/oauth/oauth_client.php2176
-rw-r--r--library/oauth/oauth_client_class.html607
-rw-r--r--library/readmore.js/README.md171
-rw-r--r--library/readmore.js/readmore.js319
-rw-r--r--library/stylish_select/index.html314
-rw-r--r--library/stylish_select/jquery.stylish-select.js492
-rwxr-xr-xlibrary/stylish_select/select-bg.pngbin0 -> 2438 bytes
-rwxr-xr-xlibrary/stylish_select/stylish-select.css121
-rw-r--r--library/twitteroauth.php2
1707 files changed, 561347 insertions, 40613 deletions
diff --git a/library/HTMLPurifier.autoload.php b/library/HTMLPurifier.autoload.php
index 8d4017640..c3ea67e81 100644
--- a/library/HTMLPurifier.autoload.php
+++ b/library/HTMLPurifier.autoload.php
@@ -3,6 +3,7 @@
/**
* @file
* Convenience file that registers autoload handler for HTML Purifier.
+ * It also does some sanity checks.
*/
if (function_exists('spl_autoload_register') && function_exists('spl_autoload_unregister')) {
@@ -13,9 +14,14 @@ if (function_exists('spl_autoload_register') && function_exists('spl_autoload_un
spl_autoload_register('__autoload');
}
} elseif (!function_exists('__autoload')) {
- function __autoload($class) {
+ function __autoload($class)
+ {
return HTMLPurifier_Bootstrap::autoload($class);
}
}
+if (ini_get('zend.ze1_compatibility_mode')) {
+ trigger_error("HTML Purifier is not compatible with zend.ze1_compatibility_mode; please turn it off", E_USER_ERROR);
+}
+
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier.composer.php b/library/HTMLPurifier.composer.php
new file mode 100644
index 000000000..6706f4e39
--- /dev/null
+++ b/library/HTMLPurifier.composer.php
@@ -0,0 +1,4 @@
+<?php
+if (!defined('HTMLPURIFIER_PREFIX')) {
+ define('HTMLPURIFIER_PREFIX', __DIR__);
+}
diff --git a/library/HTMLPurifier.func.php b/library/HTMLPurifier.func.php
index 56a55b2fe..64b140bec 100644
--- a/library/HTMLPurifier.func.php
+++ b/library/HTMLPurifier.func.php
@@ -8,11 +8,13 @@
/**
* Purify HTML.
- * @param $html String HTML to purify
- * @param $config Configuration to use, can be any value accepted by
+ * @param string $html String HTML to purify
+ * @param mixed $config Configuration to use, can be any value accepted by
* HTMLPurifier_Config::create()
+ * @return string
*/
-function HTMLPurifier($html, $config = null) {
+function HTMLPurifier($html, $config = null)
+{
static $purifier = false;
if (!$purifier) {
$purifier = new HTMLPurifier();
diff --git a/library/HTMLPurifier.includes.php b/library/HTMLPurifier.includes.php
index 2ed0f0c17..9b7b88a87 100644
--- a/library/HTMLPurifier.includes.php
+++ b/library/HTMLPurifier.includes.php
@@ -7,7 +7,7 @@
* primary concern and you are using an opcode cache. PLEASE DO NOT EDIT THIS
* FILE, changes will be overwritten the next time the script is run.
*
- * @version 4.1.1
+ * @version 4.6.0
*
* @warning
* You must *not* include any other HTML Purifier files before this file,
@@ -19,6 +19,7 @@
*/
require 'HTMLPurifier.php';
+require 'HTMLPurifier/Arborize.php';
require 'HTMLPurifier/AttrCollections.php';
require 'HTMLPurifier/AttrDef.php';
require 'HTMLPurifier/AttrTransform.php';
@@ -54,9 +55,11 @@ require 'HTMLPurifier/Language.php';
require 'HTMLPurifier/LanguageFactory.php';
require 'HTMLPurifier/Length.php';
require 'HTMLPurifier/Lexer.php';
+require 'HTMLPurifier/Node.php';
require 'HTMLPurifier/PercentEncoder.php';
require 'HTMLPurifier/PropertyList.php';
require 'HTMLPurifier/PropertyListIterator.php';
+require 'HTMLPurifier/Queue.php';
require 'HTMLPurifier/Strategy.php';
require 'HTMLPurifier/StringHash.php';
require 'HTMLPurifier/StringHashParser.php';
@@ -72,7 +75,9 @@ require 'HTMLPurifier/URISchemeRegistry.php';
require 'HTMLPurifier/UnitConverter.php';
require 'HTMLPurifier/VarParser.php';
require 'HTMLPurifier/VarParserException.php';
+require 'HTMLPurifier/Zipper.php';
require 'HTMLPurifier/AttrDef/CSS.php';
+require 'HTMLPurifier/AttrDef/Clone.php';
require 'HTMLPurifier/AttrDef/Enum.php';
require 'HTMLPurifier/AttrDef/Integer.php';
require 'HTMLPurifier/AttrDef/Lang.php';
@@ -90,6 +95,7 @@ require 'HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php';
require 'HTMLPurifier/AttrDef/CSS/Filter.php';
require 'HTMLPurifier/AttrDef/CSS/Font.php';
require 'HTMLPurifier/AttrDef/CSS/FontFamily.php';
+require 'HTMLPurifier/AttrDef/CSS/Ident.php';
require 'HTMLPurifier/AttrDef/CSS/ImportantDecorator.php';
require 'HTMLPurifier/AttrDef/CSS/Length.php';
require 'HTMLPurifier/AttrDef/CSS/ListStyle.php';
@@ -125,14 +131,17 @@ require 'HTMLPurifier/AttrTransform/Lang.php';
require 'HTMLPurifier/AttrTransform/Length.php';
require 'HTMLPurifier/AttrTransform/Name.php';
require 'HTMLPurifier/AttrTransform/NameSync.php';
+require 'HTMLPurifier/AttrTransform/Nofollow.php';
require 'HTMLPurifier/AttrTransform/SafeEmbed.php';
require 'HTMLPurifier/AttrTransform/SafeObject.php';
require 'HTMLPurifier/AttrTransform/SafeParam.php';
require 'HTMLPurifier/AttrTransform/ScriptRequired.php';
+require 'HTMLPurifier/AttrTransform/TargetBlank.php';
require 'HTMLPurifier/AttrTransform/Textarea.php';
require 'HTMLPurifier/ChildDef/Chameleon.php';
require 'HTMLPurifier/ChildDef/Custom.php';
require 'HTMLPurifier/ChildDef/Empty.php';
+require 'HTMLPurifier/ChildDef/List.php';
require 'HTMLPurifier/ChildDef/Required.php';
require 'HTMLPurifier/ChildDef/Optional.php';
require 'HTMLPurifier/ChildDef/StrictBlockquote.php';
@@ -147,10 +156,12 @@ require 'HTMLPurifier/HTMLModule/CommonAttributes.php';
require 'HTMLPurifier/HTMLModule/Edit.php';
require 'HTMLPurifier/HTMLModule/Forms.php';
require 'HTMLPurifier/HTMLModule/Hypertext.php';
+require 'HTMLPurifier/HTMLModule/Iframe.php';
require 'HTMLPurifier/HTMLModule/Image.php';
require 'HTMLPurifier/HTMLModule/Legacy.php';
require 'HTMLPurifier/HTMLModule/List.php';
require 'HTMLPurifier/HTMLModule/Name.php';
+require 'HTMLPurifier/HTMLModule/Nofollow.php';
require 'HTMLPurifier/HTMLModule/NonXMLCommonAttributes.php';
require 'HTMLPurifier/HTMLModule/Object.php';
require 'HTMLPurifier/HTMLModule/Presentation.php';
@@ -158,10 +169,12 @@ require 'HTMLPurifier/HTMLModule/Proprietary.php';
require 'HTMLPurifier/HTMLModule/Ruby.php';
require 'HTMLPurifier/HTMLModule/SafeEmbed.php';
require 'HTMLPurifier/HTMLModule/SafeObject.php';
+require 'HTMLPurifier/HTMLModule/SafeScripting.php';
require 'HTMLPurifier/HTMLModule/Scripting.php';
require 'HTMLPurifier/HTMLModule/StyleAttribute.php';
require 'HTMLPurifier/HTMLModule/Tables.php';
require 'HTMLPurifier/HTMLModule/Target.php';
+require 'HTMLPurifier/HTMLModule/TargetBlank.php';
require 'HTMLPurifier/HTMLModule/Text.php';
require 'HTMLPurifier/HTMLModule/Tidy.php';
require 'HTMLPurifier/HTMLModule/XMLCommonAttributes.php';
@@ -180,6 +193,9 @@ require 'HTMLPurifier/Injector/RemoveSpansWithoutAttributes.php';
require 'HTMLPurifier/Injector/SafeObject.php';
require 'HTMLPurifier/Lexer/DOMLex.php';
require 'HTMLPurifier/Lexer/DirectLex.php';
+require 'HTMLPurifier/Node/Comment.php';
+require 'HTMLPurifier/Node/Element.php';
+require 'HTMLPurifier/Node/Text.php';
require 'HTMLPurifier/Strategy/Composite.php';
require 'HTMLPurifier/Strategy/Core.php';
require 'HTMLPurifier/Strategy/FixNesting.php';
@@ -196,10 +212,13 @@ require 'HTMLPurifier/Token/Start.php';
require 'HTMLPurifier/Token/Text.php';
require 'HTMLPurifier/URIFilter/DisableExternal.php';
require 'HTMLPurifier/URIFilter/DisableExternalResources.php';
+require 'HTMLPurifier/URIFilter/DisableResources.php';
require 'HTMLPurifier/URIFilter/HostBlacklist.php';
require 'HTMLPurifier/URIFilter/MakeAbsolute.php';
require 'HTMLPurifier/URIFilter/Munge.php';
+require 'HTMLPurifier/URIFilter/SafeIframe.php';
require 'HTMLPurifier/URIScheme/data.php';
+require 'HTMLPurifier/URIScheme/file.php';
require 'HTMLPurifier/URIScheme/ftp.php';
require 'HTMLPurifier/URIScheme/http.php';
require 'HTMLPurifier/URIScheme/https.php';
diff --git a/library/HTMLPurifier.kses.php b/library/HTMLPurifier.kses.php
index 3143feb17..752290077 100644
--- a/library/HTMLPurifier.kses.php
+++ b/library/HTMLPurifier.kses.php
@@ -7,7 +7,8 @@
require_once dirname(__FILE__) . '/HTMLPurifier.auto.php';
-function kses($string, $allowed_html, $allowed_protocols = null) {
+function kses($string, $allowed_html, $allowed_protocols = null)
+{
$config = HTMLPurifier_Config::createDefault();
$allowed_elements = array();
$allowed_attributes = array();
@@ -19,7 +20,6 @@ function kses($string, $allowed_html, $allowed_protocols = null) {
}
$config->set('HTML.AllowedElements', $allowed_elements);
$config->set('HTML.AllowedAttributes', $allowed_attributes);
- $allowed_schemes = array();
if ($allowed_protocols !== null) {
$config->set('URI.AllowedSchemes', $allowed_protocols);
}
diff --git a/library/HTMLPurifier.php b/library/HTMLPurifier.php
index ba2c7b306..6f654fde5 100644
--- a/library/HTMLPurifier.php
+++ b/library/HTMLPurifier.php
@@ -19,7 +19,7 @@
*/
/*
- HTML Purifier 4.1.1 - Standards Compliant HTML Filtering
+ HTML Purifier 4.6.0 - Standards Compliant HTML Filtering
Copyright (C) 2006-2008 Edward Z. Yang
This library is free software; you can redistribute it and/or
@@ -54,66 +54,97 @@
class HTMLPurifier
{
- /** Version of HTML Purifier */
- public $version = '4.1.1';
+ /**
+ * Version of HTML Purifier.
+ * @type string
+ */
+ public $version = '4.6.0';
- /** Constant with version of HTML Purifier */
- const VERSION = '4.1.1';
+ /**
+ * Constant with version of HTML Purifier.
+ */
+ const VERSION = '4.6.0';
- /** Global configuration object */
+ /**
+ * Global configuration object.
+ * @type HTMLPurifier_Config
+ */
public $config;
- /** Array of extra HTMLPurifier_Filter objects to run on HTML, for backwards compatibility */
+ /**
+ * Array of extra filter objects to run on HTML,
+ * for backwards compatibility.
+ * @type HTMLPurifier_Filter[]
+ */
private $filters = array();
- /** Single instance of HTML Purifier */
+ /**
+ * Single instance of HTML Purifier.
+ * @type HTMLPurifier
+ */
private static $instance;
- protected $strategy, $generator;
+ /**
+ * @type HTMLPurifier_Strategy_Core
+ */
+ protected $strategy;
+
+ /**
+ * @type HTMLPurifier_Generator
+ */
+ protected $generator;
/**
- * Resultant HTMLPurifier_Context of last run purification. Is an array
- * of contexts if the last called method was purifyArray().
+ * Resultant context of last run purification.
+ * Is an array of contexts if the last called method was purifyArray().
+ * @type HTMLPurifier_Context
*/
public $context;
/**
* Initializes the purifier.
- * @param $config Optional HTMLPurifier_Config object for all instances of
- * the purifier, if omitted, a default configuration is
- * supplied (which can be overridden on a per-use basis).
+ *
+ * @param HTMLPurifier_Config $config Optional HTMLPurifier_Config object
+ * for all instances of the purifier, if omitted, a default
+ * configuration is supplied (which can be overridden on a
+ * per-use basis).
* The parameter can also be any type that
* HTMLPurifier_Config::create() supports.
*/
- public function __construct($config = null) {
-
+ public function __construct($config = null)
+ {
$this->config = HTMLPurifier_Config::create($config);
-
- $this->strategy = new HTMLPurifier_Strategy_Core();
-
+ $this->strategy = new HTMLPurifier_Strategy_Core();
}
/**
* Adds a filter to process the output. First come first serve
- * @param $filter HTMLPurifier_Filter object
+ *
+ * @param HTMLPurifier_Filter $filter HTMLPurifier_Filter object
*/
- public function addFilter($filter) {
- trigger_error('HTMLPurifier->addFilter() is deprecated, use configuration directives in the Filter namespace or Filter.Custom', E_USER_WARNING);
+ public function addFilter($filter)
+ {
+ trigger_error(
+ 'HTMLPurifier->addFilter() is deprecated, use configuration directives' .
+ ' in the Filter namespace or Filter.Custom',
+ E_USER_WARNING
+ );
$this->filters[] = $filter;
}
/**
* Filters an HTML snippet/document to be XSS-free and standards-compliant.
*
- * @param $html String of HTML to purify
- * @param $config HTMLPurifier_Config object for this operation, if omitted,
- * defaults to the config object specified during this
+ * @param string $html String of HTML to purify
+ * @param HTMLPurifier_Config $config Config object for this operation,
+ * if omitted, defaults to the config object specified during this
* object's construction. The parameter can also be any type
* that HTMLPurifier_Config::create() supports.
- * @return Purified HTML
+ *
+ * @return string Purified HTML
*/
- public function purify($html, $config = null) {
-
+ public function purify($html, $config = null)
+ {
// :TODO: make the config merge in, instead of replace
$config = $config ? HTMLPurifier_Config::create($config) : $this->config;
@@ -151,8 +182,12 @@ class HTMLPurifier
unset($filter_flags['Custom']);
$filters = array();
foreach ($filter_flags as $filter => $flag) {
- if (!$flag) continue;
- if (strpos($filter, '.') !== false) continue;
+ if (!$flag) {
+ continue;
+ }
+ if (strpos($filter, '.') !== false) {
+ continue;
+ }
$class = "HTMLPurifier_Filter_$filter";
$filters[] = new $class;
}
@@ -175,9 +210,12 @@ class HTMLPurifier
// list of un-purified tokens
$lexer->tokenizeHTML(
// un-purified HTML
- $html, $config, $context
+ $html,
+ $config,
+ $context
),
- $config, $context
+ $config,
+ $context
)
);
@@ -192,11 +230,15 @@ class HTMLPurifier
/**
* Filters an array of HTML snippets
- * @param $config Optional HTMLPurifier_Config object for this operation.
+ *
+ * @param string[] $array_of_html Array of html snippets
+ * @param HTMLPurifier_Config $config Optional config object for this operation.
* See HTMLPurifier::purify() for more details.
- * @return Array of purified HTML
+ *
+ * @return string[] Array of purified HTML
*/
- public function purifyArray($array_of_html, $config = null) {
+ public function purifyArray($array_of_html, $config = null)
+ {
$context_array = array();
foreach ($array_of_html as $key => $html) {
$array_of_html[$key] = $this->purify($html, $config);
@@ -208,11 +250,16 @@ class HTMLPurifier
/**
* Singleton for enforcing just one HTML Purifier in your system
- * @param $prototype Optional prototype HTMLPurifier instance to
- * overload singleton with, or HTMLPurifier_Config
- * instance to configure the generated version with.
+ *
+ * @param HTMLPurifier|HTMLPurifier_Config $prototype Optional prototype
+ * HTMLPurifier instance to overload singleton with,
+ * or HTMLPurifier_Config instance to configure the
+ * generated version with.
+ *
+ * @return HTMLPurifier
*/
- public static function instance($prototype = null) {
+ public static function instance($prototype = null)
+ {
if (!self::$instance || $prototype) {
if ($prototype instanceof HTMLPurifier) {
self::$instance = $prototype;
@@ -226,12 +273,20 @@ class HTMLPurifier
}
/**
+ * Singleton for enforcing just one HTML Purifier in your system
+ *
+ * @param HTMLPurifier|HTMLPurifier_Config $prototype Optional prototype
+ * HTMLPurifier instance to overload singleton with,
+ * or HTMLPurifier_Config instance to configure the
+ * generated version with.
+ *
+ * @return HTMLPurifier
* @note Backwards compatibility, see instance()
*/
- public static function getInstance($prototype = null) {
+ public static function getInstance($prototype = null)
+ {
return HTMLPurifier::instance($prototype);
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier.safe-includes.php b/library/HTMLPurifier.safe-includes.php
index 6402de045..9dea6d1ed 100644
--- a/library/HTMLPurifier.safe-includes.php
+++ b/library/HTMLPurifier.safe-includes.php
@@ -13,6 +13,7 @@
$__dir = dirname(__FILE__);
require_once $__dir . '/HTMLPurifier.php';
+require_once $__dir . '/HTMLPurifier/Arborize.php';
require_once $__dir . '/HTMLPurifier/AttrCollections.php';
require_once $__dir . '/HTMLPurifier/AttrDef.php';
require_once $__dir . '/HTMLPurifier/AttrTransform.php';
@@ -48,9 +49,11 @@ require_once $__dir . '/HTMLPurifier/Language.php';
require_once $__dir . '/HTMLPurifier/LanguageFactory.php';
require_once $__dir . '/HTMLPurifier/Length.php';
require_once $__dir . '/HTMLPurifier/Lexer.php';
+require_once $__dir . '/HTMLPurifier/Node.php';
require_once $__dir . '/HTMLPurifier/PercentEncoder.php';
require_once $__dir . '/HTMLPurifier/PropertyList.php';
require_once $__dir . '/HTMLPurifier/PropertyListIterator.php';
+require_once $__dir . '/HTMLPurifier/Queue.php';
require_once $__dir . '/HTMLPurifier/Strategy.php';
require_once $__dir . '/HTMLPurifier/StringHash.php';
require_once $__dir . '/HTMLPurifier/StringHashParser.php';
@@ -66,7 +69,9 @@ require_once $__dir . '/HTMLPurifier/URISchemeRegistry.php';
require_once $__dir . '/HTMLPurifier/UnitConverter.php';
require_once $__dir . '/HTMLPurifier/VarParser.php';
require_once $__dir . '/HTMLPurifier/VarParserException.php';
+require_once $__dir . '/HTMLPurifier/Zipper.php';
require_once $__dir . '/HTMLPurifier/AttrDef/CSS.php';
+require_once $__dir . '/HTMLPurifier/AttrDef/Clone.php';
require_once $__dir . '/HTMLPurifier/AttrDef/Enum.php';
require_once $__dir . '/HTMLPurifier/AttrDef/Integer.php';
require_once $__dir . '/HTMLPurifier/AttrDef/Lang.php';
@@ -84,6 +89,7 @@ require_once $__dir . '/HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php';
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Filter.php';
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Font.php';
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/FontFamily.php';
+require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Ident.php';
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/ImportantDecorator.php';
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Length.php';
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/ListStyle.php';
@@ -119,14 +125,17 @@ require_once $__dir . '/HTMLPurifier/AttrTransform/Lang.php';
require_once $__dir . '/HTMLPurifier/AttrTransform/Length.php';
require_once $__dir . '/HTMLPurifier/AttrTransform/Name.php';
require_once $__dir . '/HTMLPurifier/AttrTransform/NameSync.php';
+require_once $__dir . '/HTMLPurifier/AttrTransform/Nofollow.php';
require_once $__dir . '/HTMLPurifier/AttrTransform/SafeEmbed.php';
require_once $__dir . '/HTMLPurifier/AttrTransform/SafeObject.php';
require_once $__dir . '/HTMLPurifier/AttrTransform/SafeParam.php';
require_once $__dir . '/HTMLPurifier/AttrTransform/ScriptRequired.php';
+require_once $__dir . '/HTMLPurifier/AttrTransform/TargetBlank.php';
require_once $__dir . '/HTMLPurifier/AttrTransform/Textarea.php';
require_once $__dir . '/HTMLPurifier/ChildDef/Chameleon.php';
require_once $__dir . '/HTMLPurifier/ChildDef/Custom.php';
require_once $__dir . '/HTMLPurifier/ChildDef/Empty.php';
+require_once $__dir . '/HTMLPurifier/ChildDef/List.php';
require_once $__dir . '/HTMLPurifier/ChildDef/Required.php';
require_once $__dir . '/HTMLPurifier/ChildDef/Optional.php';
require_once $__dir . '/HTMLPurifier/ChildDef/StrictBlockquote.php';
@@ -141,10 +150,12 @@ require_once $__dir . '/HTMLPurifier/HTMLModule/CommonAttributes.php';
require_once $__dir . '/HTMLPurifier/HTMLModule/Edit.php';
require_once $__dir . '/HTMLPurifier/HTMLModule/Forms.php';
require_once $__dir . '/HTMLPurifier/HTMLModule/Hypertext.php';
+require_once $__dir . '/HTMLPurifier/HTMLModule/Iframe.php';
require_once $__dir . '/HTMLPurifier/HTMLModule/Image.php';
require_once $__dir . '/HTMLPurifier/HTMLModule/Legacy.php';
require_once $__dir . '/HTMLPurifier/HTMLModule/List.php';
require_once $__dir . '/HTMLPurifier/HTMLModule/Name.php';
+require_once $__dir . '/HTMLPurifier/HTMLModule/Nofollow.php';
require_once $__dir . '/HTMLPurifier/HTMLModule/NonXMLCommonAttributes.php';
require_once $__dir . '/HTMLPurifier/HTMLModule/Object.php';
require_once $__dir . '/HTMLPurifier/HTMLModule/Presentation.php';
@@ -152,10 +163,12 @@ require_once $__dir . '/HTMLPurifier/HTMLModule/Proprietary.php';
require_once $__dir . '/HTMLPurifier/HTMLModule/Ruby.php';
require_once $__dir . '/HTMLPurifier/HTMLModule/SafeEmbed.php';
require_once $__dir . '/HTMLPurifier/HTMLModule/SafeObject.php';
+require_once $__dir . '/HTMLPurifier/HTMLModule/SafeScripting.php';
require_once $__dir . '/HTMLPurifier/HTMLModule/Scripting.php';
require_once $__dir . '/HTMLPurifier/HTMLModule/StyleAttribute.php';
require_once $__dir . '/HTMLPurifier/HTMLModule/Tables.php';
require_once $__dir . '/HTMLPurifier/HTMLModule/Target.php';
+require_once $__dir . '/HTMLPurifier/HTMLModule/TargetBlank.php';
require_once $__dir . '/HTMLPurifier/HTMLModule/Text.php';
require_once $__dir . '/HTMLPurifier/HTMLModule/Tidy.php';
require_once $__dir . '/HTMLPurifier/HTMLModule/XMLCommonAttributes.php';
@@ -174,6 +187,9 @@ require_once $__dir . '/HTMLPurifier/Injector/RemoveSpansWithoutAttributes.php';
require_once $__dir . '/HTMLPurifier/Injector/SafeObject.php';
require_once $__dir . '/HTMLPurifier/Lexer/DOMLex.php';
require_once $__dir . '/HTMLPurifier/Lexer/DirectLex.php';
+require_once $__dir . '/HTMLPurifier/Node/Comment.php';
+require_once $__dir . '/HTMLPurifier/Node/Element.php';
+require_once $__dir . '/HTMLPurifier/Node/Text.php';
require_once $__dir . '/HTMLPurifier/Strategy/Composite.php';
require_once $__dir . '/HTMLPurifier/Strategy/Core.php';
require_once $__dir . '/HTMLPurifier/Strategy/FixNesting.php';
@@ -190,10 +206,13 @@ require_once $__dir . '/HTMLPurifier/Token/Start.php';
require_once $__dir . '/HTMLPurifier/Token/Text.php';
require_once $__dir . '/HTMLPurifier/URIFilter/DisableExternal.php';
require_once $__dir . '/HTMLPurifier/URIFilter/DisableExternalResources.php';
+require_once $__dir . '/HTMLPurifier/URIFilter/DisableResources.php';
require_once $__dir . '/HTMLPurifier/URIFilter/HostBlacklist.php';
require_once $__dir . '/HTMLPurifier/URIFilter/MakeAbsolute.php';
require_once $__dir . '/HTMLPurifier/URIFilter/Munge.php';
+require_once $__dir . '/HTMLPurifier/URIFilter/SafeIframe.php';
require_once $__dir . '/HTMLPurifier/URIScheme/data.php';
+require_once $__dir . '/HTMLPurifier/URIScheme/file.php';
require_once $__dir . '/HTMLPurifier/URIScheme/ftp.php';
require_once $__dir . '/HTMLPurifier/URIScheme/http.php';
require_once $__dir . '/HTMLPurifier/URIScheme/https.php';
diff --git a/library/HTMLPurifier/Arborize.php b/library/HTMLPurifier/Arborize.php
new file mode 100644
index 000000000..9e6617be5
--- /dev/null
+++ b/library/HTMLPurifier/Arborize.php
@@ -0,0 +1,71 @@
+<?php
+
+/**
+ * Converts a stream of HTMLPurifier_Token into an HTMLPurifier_Node,
+ * and back again.
+ *
+ * @note This transformation is not an equivalence. We mutate the input
+ * token stream to make it so; see all [MUT] markers in code.
+ */
+class HTMLPurifier_Arborize
+{
+ public static function arborize($tokens, $config, $context) {
+ $definition = $config->getHTMLDefinition();
+ $parent = new HTMLPurifier_Token_Start($definition->info_parent);
+ $stack = array($parent->toNode());
+ foreach ($tokens as $token) {
+ $token->skip = null; // [MUT]
+ $token->carryover = null; // [MUT]
+ if ($token instanceof HTMLPurifier_Token_End) {
+ $token->start = null; // [MUT]
+ $r = array_pop($stack);
+ assert($r->name === $token->name);
+ assert(empty($token->attr));
+ $r->endCol = $token->col;
+ $r->endLine = $token->line;
+ $r->endArmor = $token->armor;
+ continue;
+ }
+ $node = $token->toNode();
+ $stack[count($stack)-1]->children[] = $node;
+ if ($token instanceof HTMLPurifier_Token_Start) {
+ $stack[] = $node;
+ }
+ }
+ assert(count($stack) == 1);
+ return $stack[0];
+ }
+
+ public static function flatten($node, $config, $context) {
+ $level = 0;
+ $nodes = array($level => new HTMLPurifier_Queue(array($node)));
+ $closingTokens = array();
+ $tokens = array();
+ do {
+ while (!$nodes[$level]->isEmpty()) {
+ $node = $nodes[$level]->shift(); // FIFO
+ list($start, $end) = $node->toTokenPair();
+ if ($level > 0) {
+ $tokens[] = $start;
+ }
+ if ($end !== NULL) {
+ $closingTokens[$level][] = $end;
+ }
+ if ($node instanceof HTMLPurifier_Node_Element) {
+ $level++;
+ $nodes[$level] = new HTMLPurifier_Queue();
+ foreach ($node->children as $childNode) {
+ $nodes[$level]->push($childNode);
+ }
+ }
+ }
+ $level--;
+ if ($level && isset($closingTokens[$level])) {
+ while ($token = array_pop($closingTokens[$level])) {
+ $tokens[] = $token;
+ }
+ }
+ } while ($level > 0);
+ return $tokens;
+ }
+}
diff --git a/library/HTMLPurifier/AttrCollections.php b/library/HTMLPurifier/AttrCollections.php
index 555b86d04..4f6c2e39a 100644
--- a/library/HTMLPurifier/AttrCollections.php
+++ b/library/HTMLPurifier/AttrCollections.php
@@ -8,7 +8,8 @@ class HTMLPurifier_AttrCollections
{
/**
- * Associative array of attribute collections, indexed by name
+ * Associative array of attribute collections, indexed by name.
+ * @type array
*/
public $info = array();
@@ -16,10 +17,11 @@ class HTMLPurifier_AttrCollections
* Performs all expansions on internal data for use by other inclusions
* It also collects all attribute collection extensions from
* modules
- * @param $attr_types HTMLPurifier_AttrTypes instance
- * @param $modules Hash array of HTMLPurifier_HTMLModule members
+ * @param HTMLPurifier_AttrTypes $attr_types HTMLPurifier_AttrTypes instance
+ * @param HTMLPurifier_HTMLModule[] $modules Hash array of HTMLPurifier_HTMLModule members
*/
- public function __construct($attr_types, $modules) {
+ public function __construct($attr_types, $modules)
+ {
// load extensions from the modules
foreach ($modules as $module) {
foreach ($module->attr_collections as $coll_i => $coll) {
@@ -30,7 +32,9 @@ class HTMLPurifier_AttrCollections
if ($attr_i === 0 && isset($this->info[$coll_i][$attr_i])) {
// merge in includes
$this->info[$coll_i][$attr_i] = array_merge(
- $this->info[$coll_i][$attr_i], $attr);
+ $this->info[$coll_i][$attr_i],
+ $attr
+ );
continue;
}
$this->info[$coll_i][$attr_i] = $attr;
@@ -49,20 +53,29 @@ class HTMLPurifier_AttrCollections
/**
* Takes a reference to an attribute associative array and performs
* all inclusions specified by the zero index.
- * @param &$attr Reference to attribute array
+ * @param array &$attr Reference to attribute array
*/
- public function performInclusions(&$attr) {
- if (!isset($attr[0])) return;
+ public function performInclusions(&$attr)
+ {
+ if (!isset($attr[0])) {
+ return;
+ }
$merge = $attr[0];
$seen = array(); // recursion guard
// loop through all the inclusions
for ($i = 0; isset($merge[$i]); $i++) {
- if (isset($seen[$merge[$i]])) continue;
+ if (isset($seen[$merge[$i]])) {
+ continue;
+ }
$seen[$merge[$i]] = true;
// foreach attribute of the inclusion, copy it over
- if (!isset($this->info[$merge[$i]])) continue;
+ if (!isset($this->info[$merge[$i]])) {
+ continue;
+ }
foreach ($this->info[$merge[$i]] as $key => $value) {
- if (isset($attr[$key])) continue; // also catches more inclusions
+ if (isset($attr[$key])) {
+ continue;
+ } // also catches more inclusions
$attr[$key] = $value;
}
if (isset($this->info[$merge[$i]][0])) {
@@ -76,20 +89,24 @@ class HTMLPurifier_AttrCollections
/**
* Expands all string identifiers in an attribute array by replacing
* them with the appropriate values inside HTMLPurifier_AttrTypes
- * @param &$attr Reference to attribute array
- * @param $attr_types HTMLPurifier_AttrTypes instance
+ * @param array &$attr Reference to attribute array
+ * @param HTMLPurifier_AttrTypes $attr_types HTMLPurifier_AttrTypes instance
*/
- public function expandIdentifiers(&$attr, $attr_types) {
-
+ public function expandIdentifiers(&$attr, $attr_types)
+ {
// because foreach will process new elements we add, make sure we
// skip duplicates
$processed = array();
foreach ($attr as $def_i => $def) {
// skip inclusions
- if ($def_i === 0) continue;
+ if ($def_i === 0) {
+ continue;
+ }
- if (isset($processed[$def_i])) continue;
+ if (isset($processed[$def_i])) {
+ continue;
+ }
// determine whether or not attribute is required
if ($required = (strpos($def_i, '*') !== false)) {
@@ -120,9 +137,7 @@ class HTMLPurifier_AttrCollections
unset($attr[$def_i]);
}
}
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef.php b/library/HTMLPurifier/AttrDef.php
index b2e4f36c5..5ac06522b 100644
--- a/library/HTMLPurifier/AttrDef.php
+++ b/library/HTMLPurifier/AttrDef.php
@@ -14,23 +14,25 @@ abstract class HTMLPurifier_AttrDef
{
/**
- * Tells us whether or not an HTML attribute is minimized. Has no
- * meaning in other contexts.
+ * Tells us whether or not an HTML attribute is minimized.
+ * Has no meaning in other contexts.
+ * @type bool
*/
public $minimized = false;
/**
- * Tells us whether or not an HTML attribute is required. Has no
- * meaning in other contexts
+ * Tells us whether or not an HTML attribute is required.
+ * Has no meaning in other contexts
+ * @type bool
*/
public $required = false;
/**
* Validates and cleans passed string according to a definition.
*
- * @param $string String to be validated and cleaned.
- * @param $config Mandatory HTMLPurifier_Config object.
- * @param $context Mandatory HTMLPurifier_AttrContext object.
+ * @param string $string String to be validated and cleaned.
+ * @param HTMLPurifier_Config $config Mandatory HTMLPurifier_Config object.
+ * @param HTMLPurifier_Context $context Mandatory HTMLPurifier_Context object.
*/
abstract public function validate($string, $config, $context);
@@ -55,7 +57,8 @@ abstract class HTMLPurifier_AttrDef
* parsing XML, thus, this behavior may still be correct. We
* assume that newlines have been normalized.
*/
- public function parseCDATA($string) {
+ public function parseCDATA($string)
+ {
$string = trim($string);
$string = str_replace(array("\n", "\t", "\r"), ' ', $string);
return $string;
@@ -63,10 +66,11 @@ abstract class HTMLPurifier_AttrDef
/**
* Factory method for creating this class from a string.
- * @param $string String construction info
- * @return Created AttrDef object corresponding to $string
+ * @param string $string String construction info
+ * @return HTMLPurifier_AttrDef Created AttrDef object corresponding to $string
*/
- public function make($string) {
+ public function make($string)
+ {
// default implementation, return a flyweight of this object.
// If $string has an effect on the returned object (i.e. you
// need to overload this method), it is best
@@ -77,16 +81,20 @@ abstract class HTMLPurifier_AttrDef
/**
* Removes spaces from rgb(0, 0, 0) so that shorthand CSS properties work
* properly. THIS IS A HACK!
+ * @param string $string a CSS colour definition
+ * @return string
*/
- protected function mungeRgb($string) {
+ protected function mungeRgb($string)
+ {
return preg_replace('/rgb\((\d+)\s*,\s*(\d+)\s*,\s*(\d+)\)/', 'rgb(\1,\2,\3)', $string);
}
/**
- * Parses a possibly escaped CSS string and returns the "pure"
+ * Parses a possibly escaped CSS string and returns the "pure"
* version of it.
*/
- protected function expandCSSEscape($string) {
+ protected function expandCSSEscape($string)
+ {
// flexibly parse it
$ret = '';
for ($i = 0, $c = strlen($string); $i < $c; $i++) {
@@ -99,25 +107,32 @@ abstract class HTMLPurifier_AttrDef
if (ctype_xdigit($string[$i])) {
$code = $string[$i];
for ($a = 1, $i++; $i < $c && $a < 6; $i++, $a++) {
- if (!ctype_xdigit($string[$i])) break;
+ if (!ctype_xdigit($string[$i])) {
+ break;
+ }
$code .= $string[$i];
}
// We have to be extremely careful when adding
// new characters, to make sure we're not breaking
// the encoding.
$char = HTMLPurifier_Encoder::unichr(hexdec($code));
- if (HTMLPurifier_Encoder::cleanUTF8($char) === '') continue;
+ if (HTMLPurifier_Encoder::cleanUTF8($char) === '') {
+ continue;
+ }
$ret .= $char;
- if ($i < $c && trim($string[$i]) !== '') $i--;
+ if ($i < $c && trim($string[$i]) !== '') {
+ $i--;
+ }
+ continue;
+ }
+ if ($string[$i] === "\n") {
continue;
}
- if ($string[$i] === "\n") continue;
}
$ret .= $string[$i];
}
return $ret;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/CSS.php b/library/HTMLPurifier/AttrDef/CSS.php
index 953e70675..02c1641fb 100644
--- a/library/HTMLPurifier/AttrDef/CSS.php
+++ b/library/HTMLPurifier/AttrDef/CSS.php
@@ -14,8 +14,14 @@
class HTMLPurifier_AttrDef_CSS extends HTMLPurifier_AttrDef
{
- public function validate($css, $config, $context) {
-
+ /**
+ * @param string $css
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($css, $config, $context)
+ {
$css = $this->parseCDATA($css);
$definition = $config->getCSSDefinition();
@@ -36,34 +42,47 @@ class HTMLPurifier_AttrDef_CSS extends HTMLPurifier_AttrDef
$context->register('CurrentCSSProperty', $property);
foreach ($declarations as $declaration) {
- if (!$declaration) continue;
- if (!strpos($declaration, ':')) continue;
+ if (!$declaration) {
+ continue;
+ }
+ if (!strpos($declaration, ':')) {
+ continue;
+ }
list($property, $value) = explode(':', $declaration, 2);
$property = trim($property);
- $value = trim($value);
+ $value = trim($value);
$ok = false;
do {
if (isset($definition->info[$property])) {
$ok = true;
break;
}
- if (ctype_lower($property)) break;
+ if (ctype_lower($property)) {
+ break;
+ }
$property = strtolower($property);
if (isset($definition->info[$property])) {
$ok = true;
break;
}
- } while(0);
- if (!$ok) continue;
+ } while (0);
+ if (!$ok) {
+ continue;
+ }
// inefficient call, since the validator will do this again
if (strtolower(trim($value)) !== 'inherit') {
// inherit works for everything (but only on the base property)
$result = $definition->info[$property]->validate(
- $value, $config, $context );
+ $value,
+ $config,
+ $context
+ );
} else {
$result = 'inherit';
}
- if ($result === false) continue;
+ if ($result === false) {
+ continue;
+ }
$propvalues[$property] = $result;
}
diff --git a/library/HTMLPurifier/AttrDef/CSS/AlphaValue.php b/library/HTMLPurifier/AttrDef/CSS/AlphaValue.php
index 292c040d4..af2b83dff 100644
--- a/library/HTMLPurifier/AttrDef/CSS/AlphaValue.php
+++ b/library/HTMLPurifier/AttrDef/CSS/AlphaValue.php
@@ -3,19 +3,32 @@
class HTMLPurifier_AttrDef_CSS_AlphaValue extends HTMLPurifier_AttrDef_CSS_Number
{
- public function __construct() {
+ public function __construct()
+ {
parent::__construct(false); // opacity is non-negative, but we will clamp it
}
- public function validate($number, $config, $context) {
+ /**
+ * @param string $number
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return string
+ */
+ public function validate($number, $config, $context)
+ {
$result = parent::validate($number, $config, $context);
- if ($result === false) return $result;
- $float = (float) $result;
- if ($float < 0.0) $result = '0';
- if ($float > 1.0) $result = '1';
+ if ($result === false) {
+ return $result;
+ }
+ $float = (float)$result;
+ if ($float < 0.0) {
+ $result = '0';
+ }
+ if ($float > 1.0) {
+ $result = '1';
+ }
return $result;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/CSS/Background.php b/library/HTMLPurifier/AttrDef/CSS/Background.php
index 3a3d20cd6..7f1ea3b0f 100644
--- a/library/HTMLPurifier/AttrDef/CSS/Background.php
+++ b/library/HTMLPurifier/AttrDef/CSS/Background.php
@@ -9,11 +9,16 @@ class HTMLPurifier_AttrDef_CSS_Background extends HTMLPurifier_AttrDef
/**
* Local copy of component validators.
+ * @type HTMLPurifier_AttrDef[]
* @note See HTMLPurifier_AttrDef_Font::$info for a similar impl.
*/
protected $info;
- public function __construct($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function __construct($config)
+ {
$def = $config->getCSSDefinition();
$this->info['background-color'] = $def->info['background-color'];
$this->info['background-image'] = $def->info['background-image'];
@@ -22,40 +27,55 @@ class HTMLPurifier_AttrDef_CSS_Background extends HTMLPurifier_AttrDef
$this->info['background-position'] = $def->info['background-position'];
}
- public function validate($string, $config, $context) {
-
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
// regular pre-processing
$string = $this->parseCDATA($string);
- if ($string === '') return false;
+ if ($string === '') {
+ return false;
+ }
// munge rgb() decl if necessary
$string = $this->mungeRgb($string);
// assumes URI doesn't have spaces in it
- $bits = explode(' ', strtolower($string)); // bits to process
+ $bits = explode(' ', $string); // bits to process
$caught = array();
- $caught['color'] = false;
- $caught['image'] = false;
- $caught['repeat'] = false;
+ $caught['color'] = false;
+ $caught['image'] = false;
+ $caught['repeat'] = false;
$caught['attachment'] = false;
$caught['position'] = false;
$i = 0; // number of catches
- $none = false;
foreach ($bits as $bit) {
- if ($bit === '') continue;
+ if ($bit === '') {
+ continue;
+ }
foreach ($caught as $key => $status) {
if ($key != 'position') {
- if ($status !== false) continue;
+ if ($status !== false) {
+ continue;
+ }
$r = $this->info['background-' . $key]->validate($bit, $config, $context);
} else {
$r = $bit;
}
- if ($r === false) continue;
+ if ($r === false) {
+ continue;
+ }
if ($key == 'position') {
- if ($caught[$key] === false) $caught[$key] = '';
+ if ($caught[$key] === false) {
+ $caught[$key] = '';
+ }
$caught[$key] .= $r . ' ';
} else {
$caught[$key] = $r;
@@ -65,7 +85,9 @@ class HTMLPurifier_AttrDef_CSS_Background extends HTMLPurifier_AttrDef
}
}
- if (!$i) return false;
+ if (!$i) {
+ return false;
+ }
if ($caught['position'] !== false) {
$caught['position'] = $this->info['background-position']->
validate($caught['position'], $config, $context);
@@ -73,15 +95,17 @@ class HTMLPurifier_AttrDef_CSS_Background extends HTMLPurifier_AttrDef
$ret = array();
foreach ($caught as $value) {
- if ($value === false) continue;
+ if ($value === false) {
+ continue;
+ }
$ret[] = $value;
}
- if (empty($ret)) return false;
+ if (empty($ret)) {
+ return false;
+ }
return implode(' ', $ret);
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/CSS/BackgroundPosition.php b/library/HTMLPurifier/AttrDef/CSS/BackgroundPosition.php
index fae82eaec..4580ef5a9 100644
--- a/library/HTMLPurifier/AttrDef/CSS/BackgroundPosition.php
+++ b/library/HTMLPurifier/AttrDef/CSS/BackgroundPosition.php
@@ -44,15 +44,30 @@
class HTMLPurifier_AttrDef_CSS_BackgroundPosition extends HTMLPurifier_AttrDef
{
+ /**
+ * @type HTMLPurifier_AttrDef_CSS_Length
+ */
protected $length;
+
+ /**
+ * @type HTMLPurifier_AttrDef_CSS_Percentage
+ */
protected $percentage;
- public function __construct() {
- $this->length = new HTMLPurifier_AttrDef_CSS_Length();
+ public function __construct()
+ {
+ $this->length = new HTMLPurifier_AttrDef_CSS_Length();
$this->percentage = new HTMLPurifier_AttrDef_CSS_Percentage();
}
- public function validate($string, $config, $context) {
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
$string = $this->parseCDATA($string);
$bits = explode(' ', $string);
@@ -74,7 +89,9 @@ class HTMLPurifier_AttrDef_CSS_BackgroundPosition extends HTMLPurifier_AttrDef
);
foreach ($bits as $bit) {
- if ($bit === '') continue;
+ if ($bit === '') {
+ continue;
+ }
// test for keyword
$lbit = ctype_lower($bit) ? $bit : strtolower($bit);
@@ -104,30 +121,37 @@ class HTMLPurifier_AttrDef_CSS_BackgroundPosition extends HTMLPurifier_AttrDef
$measures[] = $r;
$i++;
}
-
}
- if (!$i) return false; // no valid values were caught
+ if (!$i) {
+ return false;
+ } // no valid values were caught
$ret = array();
// first keyword
- if ($keywords['h']) $ret[] = $keywords['h'];
- elseif ($keywords['ch']) {
+ if ($keywords['h']) {
+ $ret[] = $keywords['h'];
+ } elseif ($keywords['ch']) {
$ret[] = $keywords['ch'];
$keywords['cv'] = false; // prevent re-use: center = center center
+ } elseif (count($measures)) {
+ $ret[] = array_shift($measures);
}
- elseif (count($measures)) $ret[] = array_shift($measures);
- if ($keywords['v']) $ret[] = $keywords['v'];
- elseif ($keywords['cv']) $ret[] = $keywords['cv'];
- elseif (count($measures)) $ret[] = array_shift($measures);
+ if ($keywords['v']) {
+ $ret[] = $keywords['v'];
+ } elseif ($keywords['cv']) {
+ $ret[] = $keywords['cv'];
+ } elseif (count($measures)) {
+ $ret[] = array_shift($measures);
+ }
- if (empty($ret)) return false;
+ if (empty($ret)) {
+ return false;
+ }
return implode(' ', $ret);
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/CSS/Border.php b/library/HTMLPurifier/AttrDef/CSS/Border.php
index 42a1d1b4a..16243ba1e 100644
--- a/library/HTMLPurifier/AttrDef/CSS/Border.php
+++ b/library/HTMLPurifier/AttrDef/CSS/Border.php
@@ -8,17 +8,29 @@ class HTMLPurifier_AttrDef_CSS_Border extends HTMLPurifier_AttrDef
/**
* Local copy of properties this property is shorthand for.
+ * @type HTMLPurifier_AttrDef[]
*/
protected $info = array();
- public function __construct($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function __construct($config)
+ {
$def = $config->getCSSDefinition();
$this->info['border-width'] = $def->info['border-width'];
$this->info['border-style'] = $def->info['border-style'];
$this->info['border-top-color'] = $def->info['border-top-color'];
}
- public function validate($string, $config, $context) {
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
$string = $this->parseCDATA($string);
$string = $this->mungeRgb($string);
$bits = explode(' ', $string);
@@ -26,7 +38,9 @@ class HTMLPurifier_AttrDef_CSS_Border extends HTMLPurifier_AttrDef
$ret = ''; // return value
foreach ($bits as $bit) {
foreach ($this->info as $propname => $validator) {
- if (isset($done[$propname])) continue;
+ if (isset($done[$propname])) {
+ continue;
+ }
$r = $validator->validate($bit, $config, $context);
if ($r !== false) {
$ret .= $r . ' ';
@@ -37,7 +51,6 @@ class HTMLPurifier_AttrDef_CSS_Border extends HTMLPurifier_AttrDef
}
return rtrim($ret);
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/CSS/Color.php b/library/HTMLPurifier/AttrDef/CSS/Color.php
index 07f95a671..16d2a6b98 100644
--- a/library/HTMLPurifier/AttrDef/CSS/Color.php
+++ b/library/HTMLPurifier/AttrDef/CSS/Color.php
@@ -6,29 +6,47 @@
class HTMLPurifier_AttrDef_CSS_Color extends HTMLPurifier_AttrDef
{
- public function validate($color, $config, $context) {
-
+ /**
+ * @param string $color
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($color, $config, $context)
+ {
static $colors = null;
- if ($colors === null) $colors = $config->get('Core.ColorKeywords');
+ if ($colors === null) {
+ $colors = $config->get('Core.ColorKeywords');
+ }
$color = trim($color);
- if ($color === '') return false;
+ if ($color === '') {
+ return false;
+ }
$lower = strtolower($color);
- if (isset($colors[$lower])) return $colors[$lower];
+ if (isset($colors[$lower])) {
+ return $colors[$lower];
+ }
if (strpos($color, 'rgb(') !== false) {
// rgb literal handling
$length = strlen($color);
- if (strpos($color, ')') !== $length - 1) return false;
+ if (strpos($color, ')') !== $length - 1) {
+ return false;
+ }
$triad = substr($color, 4, $length - 4 - 1);
$parts = explode(',', $triad);
- if (count($parts) !== 3) return false;
+ if (count($parts) !== 3) {
+ return false;
+ }
$type = false; // to ensure that they're all the same type
$new_parts = array();
foreach ($parts as $part) {
$part = trim($part);
- if ($part === '') return false;
+ if ($part === '') {
+ return false;
+ }
$length = strlen($part);
if ($part[$length - 1] === '%') {
// handle percents
@@ -37,9 +55,13 @@ class HTMLPurifier_AttrDef_CSS_Color extends HTMLPurifier_AttrDef
} elseif ($type !== 'percentage') {
return false;
}
- $num = (float) substr($part, 0, $length - 1);
- if ($num < 0) $num = 0;
- if ($num > 100) $num = 100;
+ $num = (float)substr($part, 0, $length - 1);
+ if ($num < 0) {
+ $num = 0;
+ }
+ if ($num > 100) {
+ $num = 100;
+ }
$new_parts[] = "$num%";
} else {
// handle integers
@@ -48,10 +70,14 @@ class HTMLPurifier_AttrDef_CSS_Color extends HTMLPurifier_AttrDef
} elseif ($type !== 'integer') {
return false;
}
- $num = (int) $part;
- if ($num < 0) $num = 0;
- if ($num > 255) $num = 255;
- $new_parts[] = (string) $num;
+ $num = (int)$part;
+ if ($num < 0) {
+ $num = 0;
+ }
+ if ($num > 255) {
+ $num = 255;
+ }
+ $new_parts[] = (string)$num;
}
}
$new_triad = implode(',', $new_parts);
@@ -65,14 +91,15 @@ class HTMLPurifier_AttrDef_CSS_Color extends HTMLPurifier_AttrDef
$color = '#' . $color;
}
$length = strlen($hex);
- if ($length !== 3 && $length !== 6) return false;
- if (!ctype_xdigit($hex)) return false;
+ if ($length !== 3 && $length !== 6) {
+ return false;
+ }
+ if (!ctype_xdigit($hex)) {
+ return false;
+ }
}
-
return $color;
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/CSS/Composite.php b/library/HTMLPurifier/AttrDef/CSS/Composite.php
index de1289cba..9c1750554 100644
--- a/library/HTMLPurifier/AttrDef/CSS/Composite.php
+++ b/library/HTMLPurifier/AttrDef/CSS/Composite.php
@@ -13,26 +13,36 @@ class HTMLPurifier_AttrDef_CSS_Composite extends HTMLPurifier_AttrDef
{
/**
- * List of HTMLPurifier_AttrDef objects that may process strings
+ * List of objects that may process strings.
+ * @type HTMLPurifier_AttrDef[]
* @todo Make protected
*/
public $defs;
/**
- * @param $defs List of HTMLPurifier_AttrDef objects
+ * @param HTMLPurifier_AttrDef[] $defs List of HTMLPurifier_AttrDef objects
*/
- public function __construct($defs) {
+ public function __construct($defs)
+ {
$this->defs = $defs;
}
- public function validate($string, $config, $context) {
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
foreach ($this->defs as $i => $def) {
$result = $this->defs[$i]->validate($string, $config, $context);
- if ($result !== false) return $result;
+ if ($result !== false) {
+ return $result;
+ }
}
return false;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php b/library/HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php
index 6599c5b2d..9d77cc9aa 100644
--- a/library/HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php
+++ b/library/HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php
@@ -5,22 +5,38 @@
*/
class HTMLPurifier_AttrDef_CSS_DenyElementDecorator extends HTMLPurifier_AttrDef
{
- public $def, $element;
+ /**
+ * @type HTMLPurifier_AttrDef
+ */
+ public $def;
+ /**
+ * @type string
+ */
+ public $element;
/**
- * @param $def Definition to wrap
- * @param $element Element to deny
+ * @param HTMLPurifier_AttrDef $def Definition to wrap
+ * @param string $element Element to deny
*/
- public function __construct($def, $element) {
+ public function __construct($def, $element)
+ {
$this->def = $def;
$this->element = $element;
}
+
/**
* Checks if CurrentToken is set and equal to $this->element
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
*/
- public function validate($string, $config, $context) {
+ public function validate($string, $config, $context)
+ {
$token = $context->get('CurrentToken', true);
- if ($token && $token->name == $this->element) return false;
+ if ($token && $token->name == $this->element) {
+ return false;
+ }
return $this->def->validate($string, $config, $context);
}
}
diff --git a/library/HTMLPurifier/AttrDef/CSS/Filter.php b/library/HTMLPurifier/AttrDef/CSS/Filter.php
index 147894b86..bde4c3301 100644
--- a/library/HTMLPurifier/AttrDef/CSS/Filter.php
+++ b/library/HTMLPurifier/AttrDef/CSS/Filter.php
@@ -7,23 +7,37 @@
*/
class HTMLPurifier_AttrDef_CSS_Filter extends HTMLPurifier_AttrDef
{
-
+ /**
+ * @type HTMLPurifier_AttrDef_Integer
+ */
protected $intValidator;
- public function __construct() {
+ public function __construct()
+ {
$this->intValidator = new HTMLPurifier_AttrDef_Integer();
}
- public function validate($value, $config, $context) {
+ /**
+ * @param string $value
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($value, $config, $context)
+ {
$value = $this->parseCDATA($value);
- if ($value === 'none') return $value;
+ if ($value === 'none') {
+ return $value;
+ }
// if we looped this we could support multiple filters
$function_length = strcspn($value, '(');
$function = trim(substr($value, 0, $function_length));
if ($function !== 'alpha' &&
$function !== 'Alpha' &&
$function !== 'progid:DXImageTransform.Microsoft.Alpha'
- ) return false;
+ ) {
+ return false;
+ }
$cursor = $function_length + 1;
$parameters_length = strcspn($value, ')', $cursor);
$parameters = substr($value, $cursor, $parameters_length);
@@ -32,15 +46,25 @@ class HTMLPurifier_AttrDef_CSS_Filter extends HTMLPurifier_AttrDef
$lookup = array();
foreach ($params as $param) {
list($key, $value) = explode('=', $param);
- $key = trim($key);
+ $key = trim($key);
$value = trim($value);
- if (isset($lookup[$key])) continue;
- if ($key !== 'opacity') continue;
+ if (isset($lookup[$key])) {
+ continue;
+ }
+ if ($key !== 'opacity') {
+ continue;
+ }
$value = $this->intValidator->validate($value, $config, $context);
- if ($value === false) continue;
- $int = (int) $value;
- if ($int > 100) $value = '100';
- if ($int < 0) $value = '0';
+ if ($value === false) {
+ continue;
+ }
+ $int = (int)$value;
+ if ($int > 100) {
+ $value = '100';
+ }
+ if ($int < 0) {
+ $value = '0';
+ }
$ret_params[] = "$key=$value";
$lookup[$key] = true;
}
@@ -48,7 +72,6 @@ class HTMLPurifier_AttrDef_CSS_Filter extends HTMLPurifier_AttrDef
$ret_function = "$function($ret_parameters)";
return $ret_function;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/CSS/Font.php b/library/HTMLPurifier/AttrDef/CSS/Font.php
index 699ee0b70..579b97ef1 100644
--- a/library/HTMLPurifier/AttrDef/CSS/Font.php
+++ b/library/HTMLPurifier/AttrDef/CSS/Font.php
@@ -7,8 +7,8 @@ class HTMLPurifier_AttrDef_CSS_Font extends HTMLPurifier_AttrDef
{
/**
- * Local copy of component validators.
- *
+ * Local copy of validators
+ * @type HTMLPurifier_AttrDef[]
* @note If we moved specific CSS property definitions to their own
* classes instead of having them be assembled at run time by
* CSSDefinition, this wouldn't be necessary. We'd instantiate
@@ -16,18 +16,28 @@ class HTMLPurifier_AttrDef_CSS_Font extends HTMLPurifier_AttrDef
*/
protected $info = array();
- public function __construct($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function __construct($config)
+ {
$def = $config->getCSSDefinition();
- $this->info['font-style'] = $def->info['font-style'];
+ $this->info['font-style'] = $def->info['font-style'];
$this->info['font-variant'] = $def->info['font-variant'];
- $this->info['font-weight'] = $def->info['font-weight'];
- $this->info['font-size'] = $def->info['font-size'];
- $this->info['line-height'] = $def->info['line-height'];
- $this->info['font-family'] = $def->info['font-family'];
+ $this->info['font-weight'] = $def->info['font-weight'];
+ $this->info['font-size'] = $def->info['font-size'];
+ $this->info['line-height'] = $def->info['line-height'];
+ $this->info['font-family'] = $def->info['font-family'];
}
- public function validate($string, $config, $context) {
-
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
static $system_fonts = array(
'caption' => true,
'icon' => true,
@@ -39,7 +49,9 @@ class HTMLPurifier_AttrDef_CSS_Font extends HTMLPurifier_AttrDef
// regular pre-processing
$string = $this->parseCDATA($string);
- if ($string === '') return false;
+ if ($string === '') {
+ return false;
+ }
// check if it's one of the keywords
$lowercase_string = strtolower($string);
@@ -54,15 +66,20 @@ class HTMLPurifier_AttrDef_CSS_Font extends HTMLPurifier_AttrDef
$final = ''; // output
for ($i = 0, $size = count($bits); $i < $size; $i++) {
- if ($bits[$i] === '') continue;
+ if ($bits[$i] === '') {
+ continue;
+ }
switch ($stage) {
-
- // attempting to catch font-style, font-variant or font-weight
- case 0:
+ case 0: // attempting to catch font-style, font-variant or font-weight
foreach ($stage_1 as $validator_name) {
- if (isset($caught[$validator_name])) continue;
+ if (isset($caught[$validator_name])) {
+ continue;
+ }
$r = $this->info[$validator_name]->validate(
- $bits[$i], $config, $context);
+ $bits[$i],
+ $config,
+ $context
+ );
if ($r !== false) {
$final .= $r . ' ';
$caught[$validator_name] = true;
@@ -70,15 +87,17 @@ class HTMLPurifier_AttrDef_CSS_Font extends HTMLPurifier_AttrDef
}
}
// all three caught, continue on
- if (count($caught) >= 3) $stage = 1;
- if ($r !== false) break;
-
- // attempting to catch font-size and perhaps line-height
- case 1:
+ if (count($caught) >= 3) {
+ $stage = 1;
+ }
+ if ($r !== false) {
+ break;
+ }
+ case 1: // attempting to catch font-size and perhaps line-height
$found_slash = false;
if (strpos($bits[$i], '/') !== false) {
list($font_size, $line_height) =
- explode('/', $bits[$i]);
+ explode('/', $bits[$i]);
if ($line_height === '') {
// ooh, there's a space after the slash!
$line_height = false;
@@ -89,14 +108,19 @@ class HTMLPurifier_AttrDef_CSS_Font extends HTMLPurifier_AttrDef
$line_height = false;
}
$r = $this->info['font-size']->validate(
- $font_size, $config, $context);
+ $font_size,
+ $config,
+ $context
+ );
if ($r !== false) {
$final .= $r;
// attempt to catch line-height
if ($line_height === false) {
// we need to scroll forward
for ($j = $i + 1; $j < $size; $j++) {
- if ($bits[$j] === '') continue;
+ if ($bits[$j] === '') {
+ continue;
+ }
if ($bits[$j] === '/') {
if ($found_slash) {
return false;
@@ -116,7 +140,10 @@ class HTMLPurifier_AttrDef_CSS_Font extends HTMLPurifier_AttrDef
if ($found_slash) {
$i = $j;
$r = $this->info['line-height']->validate(
- $line_height, $config, $context);
+ $line_height,
+ $config,
+ $context
+ );
if ($r !== false) {
$final .= '/' . $r;
}
@@ -126,13 +153,14 @@ class HTMLPurifier_AttrDef_CSS_Font extends HTMLPurifier_AttrDef
break;
}
return false;
-
- // attempting to catch font-family
- case 2:
+ case 2: // attempting to catch font-family
$font_family =
implode(' ', array_slice($bits, $i, $size - $i));
$r = $this->info['font-family']->validate(
- $font_family, $config, $context);
+ $font_family,
+ $config,
+ $context
+ );
if ($r !== false) {
$final .= $r . ' ';
// processing completed successfully
@@ -143,7 +171,6 @@ class HTMLPurifier_AttrDef_CSS_Font extends HTMLPurifier_AttrDef
}
return false;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/CSS/FontFamily.php b/library/HTMLPurifier/AttrDef/CSS/FontFamily.php
index 42c2054c2..74e24c881 100644
--- a/library/HTMLPurifier/AttrDef/CSS/FontFamily.php
+++ b/library/HTMLPurifier/AttrDef/CSS/FontFamily.php
@@ -2,12 +2,58 @@
/**
* Validates a font family list according to CSS spec
- * @todo whitelisting allowed fonts would be nice
*/
class HTMLPurifier_AttrDef_CSS_FontFamily extends HTMLPurifier_AttrDef
{
- public function validate($string, $config, $context) {
+ protected $mask = null;
+
+ public function __construct()
+ {
+ $this->mask = '_- ';
+ for ($c = 'a'; $c <= 'z'; $c++) {
+ $this->mask .= $c;
+ }
+ for ($c = 'A'; $c <= 'Z'; $c++) {
+ $this->mask .= $c;
+ }
+ for ($c = '0'; $c <= '9'; $c++) {
+ $this->mask .= $c;
+ } // cast-y, but should be fine
+ // special bytes used by UTF-8
+ for ($i = 0x80; $i <= 0xFF; $i++) {
+ // We don't bother excluding invalid bytes in this range,
+ // because the our restriction of well-formed UTF-8 will
+ // prevent these from ever occurring.
+ $this->mask .= chr($i);
+ }
+
+ /*
+ PHP's internal strcspn implementation is
+ O(length of string * length of mask), making it inefficient
+ for large masks. However, it's still faster than
+ preg_match 8)
+ for (p = s1;;) {
+ spanp = s2;
+ do {
+ if (*spanp == c || p == s1_end) {
+ return p - s1;
+ }
+ } while (spanp++ < (s2_end - 1));
+ c = *++p;
+ }
+ */
+ // possible optimization: invert the mask.
+ }
+
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
static $generic_names = array(
'serif' => true,
'sans-serif' => true,
@@ -15,24 +61,33 @@ class HTMLPurifier_AttrDef_CSS_FontFamily extends HTMLPurifier_AttrDef
'fantasy' => true,
'cursive' => true
);
+ $allowed_fonts = $config->get('CSS.AllowedFonts');
// assume that no font names contain commas in them
$fonts = explode(',', $string);
$final = '';
- foreach($fonts as $font) {
+ foreach ($fonts as $font) {
$font = trim($font);
- if ($font === '') continue;
+ if ($font === '') {
+ continue;
+ }
// match a generic name
if (isset($generic_names[$font])) {
- $final .= $font . ', ';
+ if ($allowed_fonts === null || isset($allowed_fonts[$font])) {
+ $final .= $font . ', ';
+ }
continue;
}
// match a quoted name
if ($font[0] === '"' || $font[0] === "'") {
$length = strlen($font);
- if ($length <= 2) continue;
+ if ($length <= 2) {
+ continue;
+ }
$quote = $font[0];
- if ($font[$length - 1] !== $quote) continue;
+ if ($font[$length - 1] !== $quote) {
+ continue;
+ }
$font = substr($font, 1, $length - 2);
}
@@ -40,6 +95,10 @@ class HTMLPurifier_AttrDef_CSS_FontFamily extends HTMLPurifier_AttrDef
// $font is a pure representation of the font name
+ if ($allowed_fonts !== null && !isset($allowed_fonts[$font])) {
+ continue;
+ }
+
if (ctype_alnum($font) && $font !== '') {
// very simple font, allow it in unharmed
$final .= $font . ', ';
@@ -50,20 +109,108 @@ class HTMLPurifier_AttrDef_CSS_FontFamily extends HTMLPurifier_AttrDef
// shouldn't show up regardless
$font = str_replace(array("\n", "\t", "\r", "\x0C"), ' ', $font);
- // These ugly transforms don't pose a security
- // risk (as \\ and \" might). We could try to be clever and
- // use single-quote wrapping when there is a double quote
- // present, but I have choosen not to implement that.
- // (warning: this code relies on the selection of quotation
- // mark below)
- $font = str_replace('\\', '\\5C ', $font);
- $font = str_replace('"', '\\22 ', $font);
-
- // complicated font, requires quoting
- $final .= "\"$font\", "; // note that this will later get turned into &quot;
+ // Here, there are various classes of characters which need
+ // to be treated differently:
+ // - Alphanumeric characters are essentially safe. We
+ // handled these above.
+ // - Spaces require quoting, though most parsers will do
+ // the right thing if there aren't any characters that
+ // can be misinterpreted
+ // - Dashes rarely occur, but they fairly unproblematic
+ // for parsing/rendering purposes.
+ // The above characters cover the majority of Western font
+ // names.
+ // - Arbitrary Unicode characters not in ASCII. Because
+ // most parsers give little thought to Unicode, treatment
+ // of these codepoints is basically uniform, even for
+ // punctuation-like codepoints. These characters can
+ // show up in non-Western pages and are supported by most
+ // major browsers, for example: "ï¼­ï¼³ 明æœ" is a
+ // legitimate font-name
+ // <http://ja.wikipedia.org/wiki/MS_明æœ>. See
+ // the CSS3 spec for more examples:
+ // <http://www.w3.org/TR/2011/WD-css3-fonts-20110324/localizedfamilynames.png>
+ // You can see live samples of these on the Internet:
+ // <http://www.google.co.jp/search?q=font-family+ï¼­ï¼³+明æœ|ゴシック>
+ // However, most of these fonts have ASCII equivalents:
+ // for example, 'MS Mincho', and it's considered
+ // professional to use ASCII font names instead of
+ // Unicode font names. Thanks Takeshi Terada for
+ // providing this information.
+ // The following characters, to my knowledge, have not been
+ // used to name font names.
+ // - Single quote. While theoretically you might find a
+ // font name that has a single quote in its name (serving
+ // as an apostrophe, e.g. Dave's Scribble), I haven't
+ // been able to find any actual examples of this.
+ // Internet Explorer's cssText translation (which I
+ // believe is invoked by innerHTML) normalizes any
+ // quoting to single quotes, and fails to escape single
+ // quotes. (Note that this is not IE's behavior for all
+ // CSS properties, just some sort of special casing for
+ // font-family). So a single quote *cannot* be used
+ // safely in the font-family context if there will be an
+ // innerHTML/cssText translation. Note that Firefox 3.x
+ // does this too.
+ // - Double quote. In IE, these get normalized to
+ // single-quotes, no matter what the encoding. (Fun
+ // fact, in IE8, the 'content' CSS property gained
+ // support, where they special cased to preserve encoded
+ // double quotes, but still translate unadorned double
+ // quotes into single quotes.) So, because their
+ // fixpoint behavior is identical to single quotes, they
+ // cannot be allowed either. Firefox 3.x displays
+ // single-quote style behavior.
+ // - Backslashes are reduced by one (so \\ -> \) every
+ // iteration, so they cannot be used safely. This shows
+ // up in IE7, IE8 and FF3
+ // - Semicolons, commas and backticks are handled properly.
+ // - The rest of the ASCII punctuation is handled properly.
+ // We haven't checked what browsers do to unadorned
+ // versions, but this is not important as long as the
+ // browser doesn't /remove/ surrounding quotes (as IE does
+ // for HTML).
+ //
+ // With these results in hand, we conclude that there are
+ // various levels of safety:
+ // - Paranoid: alphanumeric, spaces and dashes(?)
+ // - International: Paranoid + non-ASCII Unicode
+ // - Edgy: Everything except quotes, backslashes
+ // - NoJS: Standards compliance, e.g. sod IE. Note that
+ // with some judicious character escaping (since certain
+ // types of escaping doesn't work) this is theoretically
+ // OK as long as innerHTML/cssText is not called.
+ // We believe that international is a reasonable default
+ // (that we will implement now), and once we do more
+ // extensive research, we may feel comfortable with dropping
+ // it down to edgy.
+
+ // Edgy: alphanumeric, spaces, dashes, underscores and Unicode. Use of
+ // str(c)spn assumes that the string was already well formed
+ // Unicode (which of course it is).
+ if (strspn($font, $this->mask) !== strlen($font)) {
+ continue;
+ }
+
+ // Historical:
+ // In the absence of innerHTML/cssText, these ugly
+ // transforms don't pose a security risk (as \\ and \"
+ // might--these escapes are not supported by most browsers).
+ // We could try to be clever and use single-quote wrapping
+ // when there is a double quote present, but I have choosen
+ // not to implement that. (NOTE: you can reduce the amount
+ // of escapes by one depending on what quoting style you use)
+ // $font = str_replace('\\', '\\5C ', $font);
+ // $font = str_replace('"', '\\22 ', $font);
+ // $font = str_replace("'", '\\27 ', $font);
+
+ // font possibly with spaces, requires quoting
+ $final .= "'$font', ";
}
$final = rtrim($final, ', ');
- if ($final === '') return false;
+ if ($final === '') {
+ return false;
+ }
return $final;
}
diff --git a/library/HTMLPurifier/AttrDef/CSS/Ident.php b/library/HTMLPurifier/AttrDef/CSS/Ident.php
new file mode 100644
index 000000000..973002c17
--- /dev/null
+++ b/library/HTMLPurifier/AttrDef/CSS/Ident.php
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * Validates based on {ident} CSS grammar production
+ */
+class HTMLPurifier_AttrDef_CSS_Ident extends HTMLPurifier_AttrDef
+{
+
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
+ $string = trim($string);
+
+ // early abort: '' and '0' (strings that convert to false) are invalid
+ if (!$string) {
+ return false;
+ }
+
+ $pattern = '/^(-?[A-Za-z_][A-Za-z_\-0-9]*)$/';
+ if (!preg_match($pattern, $string)) {
+ return false;
+ }
+ return $string;
+ }
+}
+
+// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/CSS/ImportantDecorator.php b/library/HTMLPurifier/AttrDef/CSS/ImportantDecorator.php
index 4e6b35e5a..ffc989fe8 100644
--- a/library/HTMLPurifier/AttrDef/CSS/ImportantDecorator.php
+++ b/library/HTMLPurifier/AttrDef/CSS/ImportantDecorator.php
@@ -5,20 +5,34 @@
*/
class HTMLPurifier_AttrDef_CSS_ImportantDecorator extends HTMLPurifier_AttrDef
{
- public $def, $allow;
+ /**
+ * @type HTMLPurifier_AttrDef
+ */
+ public $def;
+ /**
+ * @type bool
+ */
+ public $allow;
/**
- * @param $def Definition to wrap
- * @param $allow Whether or not to allow !important
+ * @param HTMLPurifier_AttrDef $def Definition to wrap
+ * @param bool $allow Whether or not to allow !important
*/
- public function __construct($def, $allow = false) {
+ public function __construct($def, $allow = false)
+ {
$this->def = $def;
$this->allow = $allow;
}
+
/**
* Intercepts and removes !important if necessary
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
*/
- public function validate($string, $config, $context) {
+ public function validate($string, $config, $context)
+ {
// test for ! and important tokens
$string = trim($string);
$is_important = false;
@@ -32,7 +46,9 @@ class HTMLPurifier_AttrDef_CSS_ImportantDecorator extends HTMLPurifier_AttrDef
}
}
$string = $this->def->validate($string, $config, $context);
- if ($this->allow && $is_important) $string .= ' !important';
+ if ($this->allow && $is_important) {
+ $string .= ' !important';
+ }
return $string;
}
}
diff --git a/library/HTMLPurifier/AttrDef/CSS/Length.php b/library/HTMLPurifier/AttrDef/CSS/Length.php
index a07ec5813..f12453a04 100644
--- a/library/HTMLPurifier/AttrDef/CSS/Length.php
+++ b/library/HTMLPurifier/AttrDef/CSS/Length.php
@@ -6,42 +6,72 @@
class HTMLPurifier_AttrDef_CSS_Length extends HTMLPurifier_AttrDef
{
- protected $min, $max;
+ /**
+ * @type HTMLPurifier_Length|string
+ */
+ protected $min;
/**
- * @param HTMLPurifier_Length $max Minimum length, or null for no bound. String is also acceptable.
- * @param HTMLPurifier_Length $max Maximum length, or null for no bound. String is also acceptable.
+ * @type HTMLPurifier_Length|string
*/
- public function __construct($min = null, $max = null) {
+ protected $max;
+
+ /**
+ * @param HTMLPurifier_Length|string $min Minimum length, or null for no bound. String is also acceptable.
+ * @param HTMLPurifier_Length|string $max Maximum length, or null for no bound. String is also acceptable.
+ */
+ public function __construct($min = null, $max = null)
+ {
$this->min = $min !== null ? HTMLPurifier_Length::make($min) : null;
$this->max = $max !== null ? HTMLPurifier_Length::make($max) : null;
}
- public function validate($string, $config, $context) {
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
$string = $this->parseCDATA($string);
// Optimizations
- if ($string === '') return false;
- if ($string === '0') return '0';
- if (strlen($string) === 1) return false;
+ if ($string === '') {
+ return false;
+ }
+ if ($string === '0') {
+ return '0';
+ }
+ if (strlen($string) === 1) {
+ return false;
+ }
$length = HTMLPurifier_Length::make($string);
- if (!$length->isValid()) return false;
+ if (!$length->isValid()) {
+ return false;
+ }
if ($this->min) {
$c = $length->compareTo($this->min);
- if ($c === false) return false;
- if ($c < 0) return false;
+ if ($c === false) {
+ return false;
+ }
+ if ($c < 0) {
+ return false;
+ }
}
if ($this->max) {
$c = $length->compareTo($this->max);
- if ($c === false) return false;
- if ($c > 0) return false;
+ if ($c === false) {
+ return false;
+ }
+ if ($c > 0) {
+ return false;
+ }
}
-
return $length->toString();
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/CSS/ListStyle.php b/library/HTMLPurifier/AttrDef/CSS/ListStyle.php
index 4406868c0..e74d42654 100644
--- a/library/HTMLPurifier/AttrDef/CSS/ListStyle.php
+++ b/library/HTMLPurifier/AttrDef/CSS/ListStyle.php
@@ -8,46 +8,72 @@ class HTMLPurifier_AttrDef_CSS_ListStyle extends HTMLPurifier_AttrDef
{
/**
- * Local copy of component validators.
+ * Local copy of validators.
+ * @type HTMLPurifier_AttrDef[]
* @note See HTMLPurifier_AttrDef_CSS_Font::$info for a similar impl.
*/
protected $info;
- public function __construct($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function __construct($config)
+ {
$def = $config->getCSSDefinition();
- $this->info['list-style-type'] = $def->info['list-style-type'];
+ $this->info['list-style-type'] = $def->info['list-style-type'];
$this->info['list-style-position'] = $def->info['list-style-position'];
$this->info['list-style-image'] = $def->info['list-style-image'];
}
- public function validate($string, $config, $context) {
-
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
// regular pre-processing
$string = $this->parseCDATA($string);
- if ($string === '') return false;
+ if ($string === '') {
+ return false;
+ }
// assumes URI doesn't have spaces in it
$bits = explode(' ', strtolower($string)); // bits to process
$caught = array();
- $caught['type'] = false;
+ $caught['type'] = false;
$caught['position'] = false;
- $caught['image'] = false;
+ $caught['image'] = false;
$i = 0; // number of catches
$none = false;
foreach ($bits as $bit) {
- if ($i >= 3) return; // optimization bit
- if ($bit === '') continue;
+ if ($i >= 3) {
+ return;
+ } // optimization bit
+ if ($bit === '') {
+ continue;
+ }
foreach ($caught as $key => $status) {
- if ($status !== false) continue;
+ if ($status !== false) {
+ continue;
+ }
$r = $this->info['list-style-' . $key]->validate($bit, $config, $context);
- if ($r === false) continue;
+ if ($r === false) {
+ continue;
+ }
if ($r === 'none') {
- if ($none) continue;
- else $none = true;
- if ($key == 'image') continue;
+ if ($none) {
+ continue;
+ } else {
+ $none = true;
+ }
+ if ($key == 'image') {
+ continue;
+ }
}
$caught[$key] = $r;
$i++;
@@ -55,24 +81,32 @@ class HTMLPurifier_AttrDef_CSS_ListStyle extends HTMLPurifier_AttrDef
}
}
- if (!$i) return false;
+ if (!$i) {
+ return false;
+ }
$ret = array();
// construct type
- if ($caught['type']) $ret[] = $caught['type'];
+ if ($caught['type']) {
+ $ret[] = $caught['type'];
+ }
// construct image
- if ($caught['image']) $ret[] = $caught['image'];
+ if ($caught['image']) {
+ $ret[] = $caught['image'];
+ }
// construct position
- if ($caught['position']) $ret[] = $caught['position'];
+ if ($caught['position']) {
+ $ret[] = $caught['position'];
+ }
- if (empty($ret)) return false;
+ if (empty($ret)) {
+ return false;
+ }
return implode(' ', $ret);
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/CSS/Multiple.php b/library/HTMLPurifier/AttrDef/CSS/Multiple.php
index 4d62a40d7..9f266cdd1 100644
--- a/library/HTMLPurifier/AttrDef/CSS/Multiple.php
+++ b/library/HTMLPurifier/AttrDef/CSS/Multiple.php
@@ -13,9 +13,9 @@
*/
class HTMLPurifier_AttrDef_CSS_Multiple extends HTMLPurifier_AttrDef
{
-
/**
* Instance of component definition to defer validation to.
+ * @type HTMLPurifier_AttrDef
* @todo Make protected
*/
public $single;
@@ -27,32 +27,45 @@ class HTMLPurifier_AttrDef_CSS_Multiple extends HTMLPurifier_AttrDef
public $max;
/**
- * @param $single HTMLPurifier_AttrDef to multiply
- * @param $max Max number of values allowed (usually four)
+ * @param HTMLPurifier_AttrDef $single HTMLPurifier_AttrDef to multiply
+ * @param int $max Max number of values allowed (usually four)
*/
- public function __construct($single, $max = 4) {
+ public function __construct($single, $max = 4)
+ {
$this->single = $single;
$this->max = $max;
}
- public function validate($string, $config, $context) {
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
$string = $this->parseCDATA($string);
- if ($string === '') return false;
+ if ($string === '') {
+ return false;
+ }
$parts = explode(' ', $string); // parseCDATA replaced \r, \t and \n
$length = count($parts);
$final = '';
for ($i = 0, $num = 0; $i < $length && $num < $this->max; $i++) {
- if (ctype_space($parts[$i])) continue;
+ if (ctype_space($parts[$i])) {
+ continue;
+ }
$result = $this->single->validate($parts[$i], $config, $context);
if ($result !== false) {
$final .= $result . ' ';
$num++;
}
}
- if ($final === '') return false;
+ if ($final === '') {
+ return false;
+ }
return rtrim($final);
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/CSS/Number.php b/library/HTMLPurifier/AttrDef/CSS/Number.php
index 3f99e12ec..8edc159e7 100644
--- a/library/HTMLPurifier/AttrDef/CSS/Number.php
+++ b/library/HTMLPurifier/AttrDef/CSS/Number.php
@@ -7,32 +7,44 @@ class HTMLPurifier_AttrDef_CSS_Number extends HTMLPurifier_AttrDef
{
/**
- * Bool indicating whether or not only positive values allowed.
+ * Indicates whether or not only positive values are allowed.
+ * @type bool
*/
protected $non_negative = false;
/**
- * @param $non_negative Bool indicating whether negatives are forbidden
+ * @param bool $non_negative indicates whether negatives are forbidden
*/
- public function __construct($non_negative = false) {
+ public function __construct($non_negative = false)
+ {
$this->non_negative = $non_negative;
}
/**
+ * @param string $number
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return string|bool
* @warning Some contexts do not pass $config, $context. These
* variables should not be used without checking HTMLPurifier_Length
*/
- public function validate($number, $config, $context) {
-
+ public function validate($number, $config, $context)
+ {
$number = $this->parseCDATA($number);
- if ($number === '') return false;
- if ($number === '0') return '0';
+ if ($number === '') {
+ return false;
+ }
+ if ($number === '0') {
+ return '0';
+ }
$sign = '';
switch ($number[0]) {
case '-':
- if ($this->non_negative) return false;
+ if ($this->non_negative) {
+ return false;
+ }
$sign = '-';
case '+':
$number = substr($number, 1);
@@ -44,14 +56,20 @@ class HTMLPurifier_AttrDef_CSS_Number extends HTMLPurifier_AttrDef
}
// Period is the only non-numeric character allowed
- if (strpos($number, '.') === false) return false;
+ if (strpos($number, '.') === false) {
+ return false;
+ }
list($left, $right) = explode('.', $number, 2);
- if ($left === '' && $right === '') return false;
- if ($left !== '' && !ctype_digit($left)) return false;
+ if ($left === '' && $right === '') {
+ return false;
+ }
+ if ($left !== '' && !ctype_digit($left)) {
+ return false;
+ }
- $left = ltrim($left, '0');
+ $left = ltrim($left, '0');
$right = rtrim($right, '0');
if ($right === '') {
@@ -59,11 +77,8 @@ class HTMLPurifier_AttrDef_CSS_Number extends HTMLPurifier_AttrDef
} elseif (!ctype_digit($right)) {
return false;
}
-
return $sign . $left . '.' . $right;
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/CSS/Percentage.php b/library/HTMLPurifier/AttrDef/CSS/Percentage.php
index c34b8fc3c..f0f25c50a 100644
--- a/library/HTMLPurifier/AttrDef/CSS/Percentage.php
+++ b/library/HTMLPurifier/AttrDef/CSS/Percentage.php
@@ -7,34 +7,48 @@ class HTMLPurifier_AttrDef_CSS_Percentage extends HTMLPurifier_AttrDef
{
/**
- * Instance of HTMLPurifier_AttrDef_CSS_Number to defer number validation
+ * Instance to defer number validation to.
+ * @type HTMLPurifier_AttrDef_CSS_Number
*/
protected $number_def;
/**
- * @param Bool indicating whether to forbid negative values
+ * @param bool $non_negative Whether to forbid negative values
*/
- public function __construct($non_negative = false) {
+ public function __construct($non_negative = false)
+ {
$this->number_def = new HTMLPurifier_AttrDef_CSS_Number($non_negative);
}
- public function validate($string, $config, $context) {
-
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
$string = $this->parseCDATA($string);
- if ($string === '') return false;
+ if ($string === '') {
+ return false;
+ }
$length = strlen($string);
- if ($length === 1) return false;
- if ($string[$length - 1] !== '%') return false;
+ if ($length === 1) {
+ return false;
+ }
+ if ($string[$length - 1] !== '%') {
+ return false;
+ }
$number = substr($string, 0, $length - 1);
$number = $this->number_def->validate($number, $config, $context);
- if ($number === false) return false;
+ if ($number === false) {
+ return false;
+ }
return "$number%";
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/CSS/TextDecoration.php b/library/HTMLPurifier/AttrDef/CSS/TextDecoration.php
index 772c922d8..5fd4b7f7b 100644
--- a/library/HTMLPurifier/AttrDef/CSS/TextDecoration.php
+++ b/library/HTMLPurifier/AttrDef/CSS/TextDecoration.php
@@ -8,8 +8,14 @@
class HTMLPurifier_AttrDef_CSS_TextDecoration extends HTMLPurifier_AttrDef
{
- public function validate($string, $config, $context) {
-
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
static $allowed_values = array(
'line-through' => true,
'overline' => true,
@@ -18,7 +24,9 @@ class HTMLPurifier_AttrDef_CSS_TextDecoration extends HTMLPurifier_AttrDef
$string = strtolower($this->parseCDATA($string));
- if ($string === 'none') return $string;
+ if ($string === 'none') {
+ return $string;
+ }
$parts = explode(' ', $string);
$final = '';
@@ -28,11 +36,11 @@ class HTMLPurifier_AttrDef_CSS_TextDecoration extends HTMLPurifier_AttrDef
}
}
$final = rtrim($final);
- if ($final === '') return false;
+ if ($final === '') {
+ return false;
+ }
return $final;
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/CSS/URI.php b/library/HTMLPurifier/AttrDef/CSS/URI.php
index 1df17dc25..f9434230e 100644
--- a/library/HTMLPurifier/AttrDef/CSS/URI.php
+++ b/library/HTMLPurifier/AttrDef/CSS/URI.php
@@ -12,25 +12,39 @@
class HTMLPurifier_AttrDef_CSS_URI extends HTMLPurifier_AttrDef_URI
{
- public function __construct() {
+ public function __construct()
+ {
parent::__construct(true); // always embedded
}
- public function validate($uri_string, $config, $context) {
+ /**
+ * @param string $uri_string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($uri_string, $config, $context)
+ {
// parse the URI out of the string and then pass it onto
// the parent object
$uri_string = $this->parseCDATA($uri_string);
- if (strpos($uri_string, 'url(') !== 0) return false;
+ if (strpos($uri_string, 'url(') !== 0) {
+ return false;
+ }
$uri_string = substr($uri_string, 4);
$new_length = strlen($uri_string) - 1;
- if ($uri_string[$new_length] != ')') return false;
+ if ($uri_string[$new_length] != ')') {
+ return false;
+ }
$uri = trim(substr($uri_string, 0, $new_length));
if (!empty($uri) && ($uri[0] == "'" || $uri[0] == '"')) {
$quote = $uri[0];
$new_length = strlen($uri) - 1;
- if ($uri[$new_length] !== $quote) return false;
+ if ($uri[$new_length] !== $quote) {
+ return false;
+ }
$uri = substr($uri, 1, $new_length - 1);
}
@@ -38,15 +52,23 @@ class HTMLPurifier_AttrDef_CSS_URI extends HTMLPurifier_AttrDef_URI
$result = parent::validate($uri, $config, $context);
- if ($result === false) return false;
+ if ($result === false) {
+ return false;
+ }
// extra sanity check; should have been done by URI
$result = str_replace(array('"', "\\", "\n", "\x0c", "\r"), "", $result);
- return "url(\"$result\")";
+ // suspicious characters are ()'; we're going to percent encode
+ // them for safety.
+ $result = str_replace(array('(', ')', "'"), array('%28', '%29', '%27'), $result);
+ // there's an extra bug where ampersands lose their escaping on
+ // an innerHTML cycle, so a very unlucky query parameter could
+ // then change the meaning of the URL. Unfortunately, there's
+ // not much we can do about that...
+ return "url(\"$result\")";
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/Clone.php b/library/HTMLPurifier/AttrDef/Clone.php
new file mode 100644
index 000000000..6698a00c0
--- /dev/null
+++ b/library/HTMLPurifier/AttrDef/Clone.php
@@ -0,0 +1,44 @@
+<?php
+
+/**
+ * Dummy AttrDef that mimics another AttrDef, BUT it generates clones
+ * with make.
+ */
+class HTMLPurifier_AttrDef_Clone extends HTMLPurifier_AttrDef
+{
+ /**
+ * What we're cloning.
+ * @type HTMLPurifier_AttrDef
+ */
+ protected $clone;
+
+ /**
+ * @param HTMLPurifier_AttrDef $clone
+ */
+ public function __construct($clone)
+ {
+ $this->clone = $clone;
+ }
+
+ /**
+ * @param string $v
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($v, $config, $context)
+ {
+ return $this->clone->validate($v, $config, $context);
+ }
+
+ /**
+ * @param string $string
+ * @return HTMLPurifier_AttrDef
+ */
+ public function make($string)
+ {
+ return clone $this->clone;
+ }
+}
+
+// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/Enum.php b/library/HTMLPurifier/AttrDef/Enum.php
index 5d603ebcc..8abda7f6e 100644
--- a/library/HTMLPurifier/AttrDef/Enum.php
+++ b/library/HTMLPurifier/AttrDef/Enum.php
@@ -12,9 +12,10 @@ class HTMLPurifier_AttrDef_Enum extends HTMLPurifier_AttrDef
/**
* Lookup table of valid values.
+ * @type array
* @todo Make protected
*/
- public $valid_values = array();
+ public $valid_values = array();
/**
* Bool indicating whether or not enumeration is case sensitive.
@@ -23,17 +24,23 @@ class HTMLPurifier_AttrDef_Enum extends HTMLPurifier_AttrDef
protected $case_sensitive = false; // values according to W3C spec
/**
- * @param $valid_values List of valid values
- * @param $case_sensitive Bool indicating whether or not case sensitive
+ * @param array $valid_values List of valid values
+ * @param bool $case_sensitive Whether or not case sensitive
*/
- public function __construct(
- $valid_values = array(), $case_sensitive = false
- ) {
+ public function __construct($valid_values = array(), $case_sensitive = false)
+ {
$this->valid_values = array_flip($valid_values);
$this->case_sensitive = $case_sensitive;
}
- public function validate($string, $config, $context) {
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
$string = trim($string);
if (!$this->case_sensitive) {
// we may want to do full case-insensitive libraries
@@ -45,11 +52,13 @@ class HTMLPurifier_AttrDef_Enum extends HTMLPurifier_AttrDef
}
/**
- * @param $string In form of comma-delimited list of case-insensitive
+ * @param string $string In form of comma-delimited list of case-insensitive
* valid values. Example: "foo,bar,baz". Prepend "s:" to make
* case sensitive
+ * @return HTMLPurifier_AttrDef_Enum
*/
- public function make($string) {
+ public function make($string)
+ {
if (strlen($string) > 2 && $string[0] == 's' && $string[1] == ':') {
$string = substr($string, 2);
$sensitive = true;
@@ -59,7 +68,6 @@ class HTMLPurifier_AttrDef_Enum extends HTMLPurifier_AttrDef
$values = explode(',', $string);
return new HTMLPurifier_AttrDef_Enum($values, $sensitive);
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/HTML/Bool.php b/library/HTMLPurifier/AttrDef/HTML/Bool.php
index e06987eb8..036a240e1 100644
--- a/library/HTMLPurifier/AttrDef/HTML/Bool.php
+++ b/library/HTMLPurifier/AttrDef/HTML/Bool.php
@@ -6,23 +6,46 @@
class HTMLPurifier_AttrDef_HTML_Bool extends HTMLPurifier_AttrDef
{
+ /**
+ * @type bool
+ */
protected $name;
+
+ /**
+ * @type bool
+ */
public $minimized = true;
- public function __construct($name = false) {$this->name = $name;}
+ /**
+ * @param bool $name
+ */
+ public function __construct($name = false)
+ {
+ $this->name = $name;
+ }
- public function validate($string, $config, $context) {
- if (empty($string)) return false;
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
+ if (empty($string)) {
+ return false;
+ }
return $this->name;
}
/**
- * @param $string Name of attribute
+ * @param string $string Name of attribute
+ * @return HTMLPurifier_AttrDef_HTML_Bool
*/
- public function make($string) {
+ public function make($string)
+ {
return new HTMLPurifier_AttrDef_HTML_Bool($string);
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/HTML/Class.php b/library/HTMLPurifier/AttrDef/HTML/Class.php
index 370068d97..d5013488f 100644
--- a/library/HTMLPurifier/AttrDef/HTML/Class.php
+++ b/library/HTMLPurifier/AttrDef/HTML/Class.php
@@ -5,7 +5,14 @@
*/
class HTMLPurifier_AttrDef_HTML_Class extends HTMLPurifier_AttrDef_HTML_Nmtokens
{
- protected function split($string, $config, $context) {
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ protected function split($string, $config, $context)
+ {
// really, this twiddle should be lazy loaded
$name = $config->getDefinition('HTML')->doctype->name;
if ($name == "XHTML 1.1" || $name == "XHTML 2.0") {
@@ -14,13 +21,20 @@ class HTMLPurifier_AttrDef_HTML_Class extends HTMLPurifier_AttrDef_HTML_Nmtokens
return preg_split('/\s+/', $string);
}
}
- protected function filter($tokens, $config, $context) {
+
+ /**
+ * @param array $tokens
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ protected function filter($tokens, $config, $context)
+ {
$allowed = $config->get('Attr.AllowedClasses');
$forbidden = $config->get('Attr.ForbiddenClasses');
$ret = array();
foreach ($tokens as $token) {
- if (
- ($allowed === null || isset($allowed[$token])) &&
+ if (($allowed === null || isset($allowed[$token])) &&
!isset($forbidden[$token]) &&
// We need this O(n) check because of PHP's array
// implementation that casts -0 to 0.
diff --git a/library/HTMLPurifier/AttrDef/HTML/Color.php b/library/HTMLPurifier/AttrDef/HTML/Color.php
index d01e20454..946ebb782 100644
--- a/library/HTMLPurifier/AttrDef/HTML/Color.php
+++ b/library/HTMLPurifier/AttrDef/HTML/Color.php
@@ -6,27 +6,46 @@
class HTMLPurifier_AttrDef_HTML_Color extends HTMLPurifier_AttrDef
{
- public function validate($string, $config, $context) {
-
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
static $colors = null;
- if ($colors === null) $colors = $config->get('Core.ColorKeywords');
+ if ($colors === null) {
+ $colors = $config->get('Core.ColorKeywords');
+ }
$string = trim($string);
- if (empty($string)) return false;
- if (isset($colors[$string])) return $colors[$string];
- if ($string[0] === '#') $hex = substr($string, 1);
- else $hex = $string;
+ if (empty($string)) {
+ return false;
+ }
+ $lower = strtolower($string);
+ if (isset($colors[$lower])) {
+ return $colors[$lower];
+ }
+ if ($string[0] === '#') {
+ $hex = substr($string, 1);
+ } else {
+ $hex = $string;
+ }
$length = strlen($hex);
- if ($length !== 3 && $length !== 6) return false;
- if (!ctype_xdigit($hex)) return false;
- if ($length === 3) $hex = $hex[0].$hex[0].$hex[1].$hex[1].$hex[2].$hex[2];
-
+ if ($length !== 3 && $length !== 6) {
+ return false;
+ }
+ if (!ctype_xdigit($hex)) {
+ return false;
+ }
+ if ($length === 3) {
+ $hex = $hex[0] . $hex[0] . $hex[1] . $hex[1] . $hex[2] . $hex[2];
+ }
return "#$hex";
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/HTML/FrameTarget.php b/library/HTMLPurifier/AttrDef/HTML/FrameTarget.php
index ae6ea7c01..d79ba12b3 100644
--- a/library/HTMLPurifier/AttrDef/HTML/FrameTarget.php
+++ b/library/HTMLPurifier/AttrDef/HTML/FrameTarget.php
@@ -6,16 +6,33 @@
class HTMLPurifier_AttrDef_HTML_FrameTarget extends HTMLPurifier_AttrDef_Enum
{
+ /**
+ * @type array
+ */
public $valid_values = false; // uninitialized value
+
+ /**
+ * @type bool
+ */
protected $case_sensitive = false;
- public function __construct() {}
+ public function __construct()
+ {
+ }
- public function validate($string, $config, $context) {
- if ($this->valid_values === false) $this->valid_values = $config->get('Attr.AllowedFrameTargets');
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
+ if ($this->valid_values === false) {
+ $this->valid_values = $config->get('Attr.AllowedFrameTargets');
+ }
return parent::validate($string, $config, $context);
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/HTML/ID.php b/library/HTMLPurifier/AttrDef/HTML/ID.php
index 81d03762d..3d86efb44 100644
--- a/library/HTMLPurifier/AttrDef/HTML/ID.php
+++ b/library/HTMLPurifier/AttrDef/HTML/ID.php
@@ -12,42 +12,77 @@
class HTMLPurifier_AttrDef_HTML_ID extends HTMLPurifier_AttrDef
{
- // ref functionality disabled, since we also have to verify
- // whether or not the ID it refers to exists
-
- public function validate($id, $config, $context) {
+ // selector is NOT a valid thing to use for IDREFs, because IDREFs
+ // *must* target IDs that exist, whereas selector #ids do not.
+
+ /**
+ * Determines whether or not we're validating an ID in a CSS
+ * selector context.
+ * @type bool
+ */
+ protected $selector;
+
+ /**
+ * @param bool $selector
+ */
+ public function __construct($selector = false)
+ {
+ $this->selector = $selector;
+ }
- if (!$config->get('Attr.EnableID')) return false;
+ /**
+ * @param string $id
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($id, $config, $context)
+ {
+ if (!$this->selector && !$config->get('Attr.EnableID')) {
+ return false;
+ }
$id = trim($id); // trim it first
- if ($id === '') return false;
+ if ($id === '') {
+ return false;
+ }
$prefix = $config->get('Attr.IDPrefix');
if ($prefix !== '') {
$prefix .= $config->get('Attr.IDPrefixLocal');
// prevent re-appending the prefix
- if (strpos($id, $prefix) !== 0) $id = $prefix . $id;
+ if (strpos($id, $prefix) !== 0) {
+ $id = $prefix . $id;
+ }
} elseif ($config->get('Attr.IDPrefixLocal') !== '') {
- trigger_error('%Attr.IDPrefixLocal cannot be used unless '.
- '%Attr.IDPrefix is set', E_USER_WARNING);
+ trigger_error(
+ '%Attr.IDPrefixLocal cannot be used unless ' .
+ '%Attr.IDPrefix is set',
+ E_USER_WARNING
+ );
}
- //if (!$this->ref) {
+ if (!$this->selector) {
$id_accumulator =& $context->get('IDAccumulator');
- if (isset($id_accumulator->ids[$id])) return false;
- //}
+ if (isset($id_accumulator->ids[$id])) {
+ return false;
+ }
+ }
// we purposely avoid using regex, hopefully this is faster
if (ctype_alpha($id)) {
$result = true;
} else {
- if (!ctype_alpha(@$id[0])) return false;
- $trim = trim( // primitive style of regexps, I suppose
+ if (!ctype_alpha(@$id[0])) {
+ return false;
+ }
+ // primitive style of regexps, I suppose
+ $trim = trim(
$id,
'A..Za..z0..9:-._'
- );
+ );
$result = ($trim === '');
}
@@ -56,15 +91,15 @@ class HTMLPurifier_AttrDef_HTML_ID extends HTMLPurifier_AttrDef
return false;
}
- if (/*!$this->ref && */$result) $id_accumulator->add($id);
+ if (!$this->selector && $result) {
+ $id_accumulator->add($id);
+ }
// if no change was made to the ID, return the result
// else, return the new id if stripping whitespace made it
// valid, or return false.
return $result ? $id : false;
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/HTML/Length.php b/library/HTMLPurifier/AttrDef/HTML/Length.php
index a242f9c23..1c4006fbb 100644
--- a/library/HTMLPurifier/AttrDef/HTML/Length.php
+++ b/library/HTMLPurifier/AttrDef/HTML/Length.php
@@ -10,32 +10,47 @@
class HTMLPurifier_AttrDef_HTML_Length extends HTMLPurifier_AttrDef_HTML_Pixels
{
- public function validate($string, $config, $context) {
-
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
$string = trim($string);
- if ($string === '') return false;
+ if ($string === '') {
+ return false;
+ }
$parent_result = parent::validate($string, $config, $context);
- if ($parent_result !== false) return $parent_result;
+ if ($parent_result !== false) {
+ return $parent_result;
+ }
$length = strlen($string);
$last_char = $string[$length - 1];
- if ($last_char !== '%') return false;
+ if ($last_char !== '%') {
+ return false;
+ }
$points = substr($string, 0, $length - 1);
- if (!is_numeric($points)) return false;
-
- $points = (int) $points;
+ if (!is_numeric($points)) {
+ return false;
+ }
- if ($points < 0) return '0%';
- if ($points > 100) return '100%';
-
- return ((string) $points) . '%';
+ $points = (int)$points;
+ if ($points < 0) {
+ return '0%';
+ }
+ if ($points > 100) {
+ return '100%';
+ }
+ return ((string)$points) . '%';
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/HTML/LinkTypes.php b/library/HTMLPurifier/AttrDef/HTML/LinkTypes.php
index 76d25ed08..63fa04c15 100644
--- a/library/HTMLPurifier/AttrDef/HTML/LinkTypes.php
+++ b/library/HTMLPurifier/AttrDef/HTML/LinkTypes.php
@@ -9,26 +9,44 @@
class HTMLPurifier_AttrDef_HTML_LinkTypes extends HTMLPurifier_AttrDef
{
- /** Name config attribute to pull. */
+ /**
+ * Name config attribute to pull.
+ * @type string
+ */
protected $name;
- public function __construct($name) {
+ /**
+ * @param string $name
+ */
+ public function __construct($name)
+ {
$configLookup = array(
'rel' => 'AllowedRel',
'rev' => 'AllowedRev'
);
if (!isset($configLookup[$name])) {
- trigger_error('Unrecognized attribute name for link '.
- 'relationship.', E_USER_ERROR);
+ trigger_error(
+ 'Unrecognized attribute name for link ' .
+ 'relationship.',
+ E_USER_ERROR
+ );
return;
}
$this->name = $configLookup[$name];
}
- public function validate($string, $config, $context) {
-
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
$allowed = $config->get('Attr.' . $this->name);
- if (empty($allowed)) return false;
+ if (empty($allowed)) {
+ return false;
+ }
$string = $this->parseCDATA($string);
$parts = explode(' ', $string);
@@ -37,17 +55,18 @@ class HTMLPurifier_AttrDef_HTML_LinkTypes extends HTMLPurifier_AttrDef
$ret_lookup = array();
foreach ($parts as $part) {
$part = strtolower(trim($part));
- if (!isset($allowed[$part])) continue;
+ if (!isset($allowed[$part])) {
+ continue;
+ }
$ret_lookup[$part] = true;
}
- if (empty($ret_lookup)) return false;
+ if (empty($ret_lookup)) {
+ return false;
+ }
$string = implode(' ', array_keys($ret_lookup));
-
return $string;
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/HTML/MultiLength.php b/library/HTMLPurifier/AttrDef/HTML/MultiLength.php
index c72fc76e4..bbb20f2f8 100644
--- a/library/HTMLPurifier/AttrDef/HTML/MultiLength.php
+++ b/library/HTMLPurifier/AttrDef/HTML/MultiLength.php
@@ -9,33 +9,52 @@
class HTMLPurifier_AttrDef_HTML_MultiLength extends HTMLPurifier_AttrDef_HTML_Length
{
- public function validate($string, $config, $context) {
-
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
$string = trim($string);
- if ($string === '') return false;
+ if ($string === '') {
+ return false;
+ }
$parent_result = parent::validate($string, $config, $context);
- if ($parent_result !== false) return $parent_result;
+ if ($parent_result !== false) {
+ return $parent_result;
+ }
$length = strlen($string);
$last_char = $string[$length - 1];
- if ($last_char !== '*') return false;
+ if ($last_char !== '*') {
+ return false;
+ }
$int = substr($string, 0, $length - 1);
- if ($int == '') return '*';
- if (!is_numeric($int)) return false;
-
- $int = (int) $int;
-
- if ($int < 0) return false;
- if ($int == 0) return '0';
- if ($int == 1) return '*';
- return ((string) $int) . '*';
-
+ if ($int == '') {
+ return '*';
+ }
+ if (!is_numeric($int)) {
+ return false;
+ }
+
+ $int = (int)$int;
+ if ($int < 0) {
+ return false;
+ }
+ if ($int == 0) {
+ return '0';
+ }
+ if ($int == 1) {
+ return '*';
+ }
+ return ((string)$int) . '*';
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/HTML/Nmtokens.php b/library/HTMLPurifier/AttrDef/HTML/Nmtokens.php
index aa34120bd..f79683b4f 100644
--- a/library/HTMLPurifier/AttrDef/HTML/Nmtokens.php
+++ b/library/HTMLPurifier/AttrDef/HTML/Nmtokens.php
@@ -6,24 +6,38 @@
class HTMLPurifier_AttrDef_HTML_Nmtokens extends HTMLPurifier_AttrDef
{
- public function validate($string, $config, $context) {
-
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
$string = trim($string);
// early abort: '' and '0' (strings that convert to false) are invalid
- if (!$string) return false;
+ if (!$string) {
+ return false;
+ }
$tokens = $this->split($string, $config, $context);
$tokens = $this->filter($tokens, $config, $context);
- if (empty($tokens)) return false;
+ if (empty($tokens)) {
+ return false;
+ }
return implode(' ', $tokens);
-
}
/**
* Splits a space separated list of tokens into its constituent parts.
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
*/
- protected function split($string, $config, $context) {
+ protected function split($string, $config, $context)
+ {
// OPTIMIZABLE!
// do the preg_match, capture all subpatterns for reformulation
@@ -31,9 +45,9 @@ class HTMLPurifier_AttrDef_HTML_Nmtokens extends HTMLPurifier_AttrDef
// escaping because I don't know how to do that with regexps
// and plus it would complicate optimization efforts (you never
// see that anyway).
- $pattern = '/(?:(?<=\s)|\A)'. // look behind for space or string start
- '((?:--|-?[A-Za-z_])[A-Za-z_\-0-9]*)'.
- '(?:(?=\s)|\z)/'; // look ahead for space or string end
+ $pattern = '/(?:(?<=\s)|\A)' . // look behind for space or string start
+ '((?:--|-?[A-Za-z_])[A-Za-z_\-0-9]*)' .
+ '(?:(?=\s)|\z)/'; // look ahead for space or string end
preg_match_all($pattern, $string, $matches);
return $matches[1];
}
@@ -42,11 +56,15 @@ class HTMLPurifier_AttrDef_HTML_Nmtokens extends HTMLPurifier_AttrDef
* Template method for removing certain tokens based on arbitrary criteria.
* @note If we wanted to be really functional, we'd do an array_filter
* with a callback. But... we're not.
+ * @param array $tokens
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
*/
- protected function filter($tokens, $config, $context) {
+ protected function filter($tokens, $config, $context)
+ {
return $tokens;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/HTML/Pixels.php b/library/HTMLPurifier/AttrDef/HTML/Pixels.php
index 4cb2c1b85..a1d019e09 100644
--- a/library/HTMLPurifier/AttrDef/HTML/Pixels.php
+++ b/library/HTMLPurifier/AttrDef/HTML/Pixels.php
@@ -6,43 +6,71 @@
class HTMLPurifier_AttrDef_HTML_Pixels extends HTMLPurifier_AttrDef
{
+ /**
+ * @type int
+ */
protected $max;
- public function __construct($max = null) {
+ /**
+ * @param int $max
+ */
+ public function __construct($max = null)
+ {
$this->max = $max;
}
- public function validate($string, $config, $context) {
-
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
$string = trim($string);
- if ($string === '0') return $string;
- if ($string === '') return false;
+ if ($string === '0') {
+ return $string;
+ }
+ if ($string === '') {
+ return false;
+ }
$length = strlen($string);
if (substr($string, $length - 2) == 'px') {
$string = substr($string, 0, $length - 2);
}
- if (!is_numeric($string)) return false;
- $int = (int) $string;
+ if (!is_numeric($string)) {
+ return false;
+ }
+ $int = (int)$string;
- if ($int < 0) return '0';
+ if ($int < 0) {
+ return '0';
+ }
// upper-bound value, extremely high values can
// crash operating systems, see <http://ha.ckers.org/imagecrash.html>
// WARNING, above link WILL crash you if you're using Windows
- if ($this->max !== null && $int > $this->max) return (string) $this->max;
-
- return (string) $int;
-
+ if ($this->max !== null && $int > $this->max) {
+ return (string)$this->max;
+ }
+ return (string)$int;
}
- public function make($string) {
- if ($string === '') $max = null;
- else $max = (int) $string;
+ /**
+ * @param string $string
+ * @return HTMLPurifier_AttrDef
+ */
+ public function make($string)
+ {
+ if ($string === '') {
+ $max = null;
+ } else {
+ $max = (int)$string;
+ }
$class = get_class($this);
return new $class($max);
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/Integer.php b/library/HTMLPurifier/AttrDef/Integer.php
index d59738d2a..400e707d2 100644
--- a/library/HTMLPurifier/AttrDef/Integer.php
+++ b/library/HTMLPurifier/AttrDef/Integer.php
@@ -11,17 +11,20 @@ class HTMLPurifier_AttrDef_Integer extends HTMLPurifier_AttrDef
{
/**
- * Bool indicating whether or not negative values are allowed
+ * Whether or not negative values are allowed.
+ * @type bool
*/
protected $negative = true;
/**
- * Bool indicating whether or not zero is allowed
+ * Whether or not zero is allowed.
+ * @type bool
*/
protected $zero = true;
/**
- * Bool indicating whether or not positive values are allowed
+ * Whether or not positive values are allowed.
+ * @type bool
*/
protected $positive = true;
@@ -30,44 +33,59 @@ class HTMLPurifier_AttrDef_Integer extends HTMLPurifier_AttrDef
* @param $zero Bool indicating whether or not zero is allowed
* @param $positive Bool indicating whether or not positive values are allowed
*/
- public function __construct(
- $negative = true, $zero = true, $positive = true
- ) {
+ public function __construct($negative = true, $zero = true, $positive = true)
+ {
$this->negative = $negative;
- $this->zero = $zero;
+ $this->zero = $zero;
$this->positive = $positive;
}
- public function validate($integer, $config, $context) {
-
+ /**
+ * @param string $integer
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($integer, $config, $context)
+ {
$integer = $this->parseCDATA($integer);
- if ($integer === '') return false;
+ if ($integer === '') {
+ return false;
+ }
// we could possibly simply typecast it to integer, but there are
// certain fringe cases that must not return an integer.
// clip leading sign
- if ( $this->negative && $integer[0] === '-' ) {
+ if ($this->negative && $integer[0] === '-') {
$digits = substr($integer, 1);
- if ($digits === '0') $integer = '0'; // rm minus sign for zero
- } elseif( $this->positive && $integer[0] === '+' ) {
+ if ($digits === '0') {
+ $integer = '0';
+ } // rm minus sign for zero
+ } elseif ($this->positive && $integer[0] === '+') {
$digits = $integer = substr($integer, 1); // rm unnecessary plus
} else {
$digits = $integer;
}
// test if it's numeric
- if (!ctype_digit($digits)) return false;
+ if (!ctype_digit($digits)) {
+ return false;
+ }
// perform scope tests
- if (!$this->zero && $integer == 0) return false;
- if (!$this->positive && $integer > 0) return false;
- if (!$this->negative && $integer < 0) return false;
+ if (!$this->zero && $integer == 0) {
+ return false;
+ }
+ if (!$this->positive && $integer > 0) {
+ return false;
+ }
+ if (!$this->negative && $integer < 0) {
+ return false;
+ }
return $integer;
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/Lang.php b/library/HTMLPurifier/AttrDef/Lang.php
index 10e6da56d..2a55cea64 100644
--- a/library/HTMLPurifier/AttrDef/Lang.php
+++ b/library/HTMLPurifier/AttrDef/Lang.php
@@ -7,15 +7,25 @@
class HTMLPurifier_AttrDef_Lang extends HTMLPurifier_AttrDef
{
- public function validate($string, $config, $context) {
-
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
$string = trim($string);
- if (!$string) return false;
+ if (!$string) {
+ return false;
+ }
$subtags = explode('-', $string);
$num_subtags = count($subtags);
- if ($num_subtags == 0) return false; // sanity check
+ if ($num_subtags == 0) { // sanity check
+ return false;
+ }
// process primary subtag : $subtags[0]
$length = strlen($subtags[0]);
@@ -23,15 +33,15 @@ class HTMLPurifier_AttrDef_Lang extends HTMLPurifier_AttrDef
case 0:
return false;
case 1:
- if (! ($subtags[0] == 'x' || $subtags[0] == 'i') ) {
+ if (!($subtags[0] == 'x' || $subtags[0] == 'i')) {
return false;
}
break;
case 2:
case 3:
- if (! ctype_alpha($subtags[0]) ) {
+ if (!ctype_alpha($subtags[0])) {
return false;
- } elseif (! ctype_lower($subtags[0]) ) {
+ } elseif (!ctype_lower($subtags[0])) {
$subtags[0] = strtolower($subtags[0]);
}
break;
@@ -40,17 +50,23 @@ class HTMLPurifier_AttrDef_Lang extends HTMLPurifier_AttrDef
}
$new_string = $subtags[0];
- if ($num_subtags == 1) return $new_string;
+ if ($num_subtags == 1) {
+ return $new_string;
+ }
// process second subtag : $subtags[1]
$length = strlen($subtags[1]);
if ($length == 0 || ($length == 1 && $subtags[1] != 'x') || $length > 8 || !ctype_alnum($subtags[1])) {
return $new_string;
}
- if (!ctype_lower($subtags[1])) $subtags[1] = strtolower($subtags[1]);
+ if (!ctype_lower($subtags[1])) {
+ $subtags[1] = strtolower($subtags[1]);
+ }
$new_string .= '-' . $subtags[1];
- if ($num_subtags == 2) return $new_string;
+ if ($num_subtags == 2) {
+ return $new_string;
+ }
// process all other subtags, index 2 and up
for ($i = 2; $i < $num_subtags; $i++) {
@@ -63,11 +79,8 @@ class HTMLPurifier_AttrDef_Lang extends HTMLPurifier_AttrDef
}
$new_string .= '-' . $subtags[$i];
}
-
return $new_string;
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/Switch.php b/library/HTMLPurifier/AttrDef/Switch.php
index c9e3ed193..c7eb3199a 100644
--- a/library/HTMLPurifier/AttrDef/Switch.php
+++ b/library/HTMLPurifier/AttrDef/Switch.php
@@ -6,21 +6,41 @@
class HTMLPurifier_AttrDef_Switch
{
+ /**
+ * @type string
+ */
protected $tag;
- protected $withTag, $withoutTag;
+
+ /**
+ * @type HTMLPurifier_AttrDef
+ */
+ protected $withTag;
+
+ /**
+ * @type HTMLPurifier_AttrDef
+ */
+ protected $withoutTag;
/**
* @param string $tag Tag name to switch upon
* @param HTMLPurifier_AttrDef $with_tag Call if token matches tag
* @param HTMLPurifier_AttrDef $without_tag Call if token doesn't match, or there is no token
*/
- public function __construct($tag, $with_tag, $without_tag) {
+ public function __construct($tag, $with_tag, $without_tag)
+ {
$this->tag = $tag;
$this->withTag = $with_tag;
$this->withoutTag = $without_tag;
}
- public function validate($string, $config, $context) {
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
$token = $context->get('CurrentToken', true);
if (!$token || $token->name !== $this->tag) {
return $this->withoutTag->validate($string, $config, $context);
@@ -28,7 +48,6 @@ class HTMLPurifier_AttrDef_Switch
return $this->withTag->validate($string, $config, $context);
}
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/Text.php b/library/HTMLPurifier/AttrDef/Text.php
index c6216cc53..4553a4ea9 100644
--- a/library/HTMLPurifier/AttrDef/Text.php
+++ b/library/HTMLPurifier/AttrDef/Text.php
@@ -6,10 +6,16 @@
class HTMLPurifier_AttrDef_Text extends HTMLPurifier_AttrDef
{
- public function validate($string, $config, $context) {
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
return $this->parseCDATA($string);
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/URI.php b/library/HTMLPurifier/AttrDef/URI.php
index 01a6d83e9..c1cd89772 100644
--- a/library/HTMLPurifier/AttrDef/URI.php
+++ b/library/HTMLPurifier/AttrDef/URI.php
@@ -7,31 +7,54 @@
class HTMLPurifier_AttrDef_URI extends HTMLPurifier_AttrDef
{
+ /**
+ * @type HTMLPurifier_URIParser
+ */
protected $parser;
+
+ /**
+ * @type bool
+ */
protected $embedsResource;
/**
- * @param $embeds_resource_resource Does the URI here result in an extra HTTP request?
+ * @param bool $embeds_resource Does the URI here result in an extra HTTP request?
*/
- public function __construct($embeds_resource = false) {
+ public function __construct($embeds_resource = false)
+ {
$this->parser = new HTMLPurifier_URIParser();
- $this->embedsResource = (bool) $embeds_resource;
+ $this->embedsResource = (bool)$embeds_resource;
}
- public function make($string) {
- $embeds = (bool) $string;
+ /**
+ * @param string $string
+ * @return HTMLPurifier_AttrDef_URI
+ */
+ public function make($string)
+ {
+ $embeds = ($string === 'embedded');
return new HTMLPurifier_AttrDef_URI($embeds);
}
- public function validate($uri, $config, $context) {
-
- if ($config->get('URI.Disable')) return false;
+ /**
+ * @param string $uri
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($uri, $config, $context)
+ {
+ if ($config->get('URI.Disable')) {
+ return false;
+ }
$uri = $this->parseCDATA($uri);
// parse the URI
$uri = $this->parser->parse($uri);
- if ($uri === false) return false;
+ if ($uri === false) {
+ return false;
+ }
// add embedded flag to context for validators
$context->register('EmbeddedURI', $this->embedsResource);
@@ -41,23 +64,35 @@ class HTMLPurifier_AttrDef_URI extends HTMLPurifier_AttrDef
// generic validation
$result = $uri->validate($config, $context);
- if (!$result) break;
+ if (!$result) {
+ break;
+ }
// chained filtering
$uri_def = $config->getDefinition('URI');
$result = $uri_def->filter($uri, $config, $context);
- if (!$result) break;
+ if (!$result) {
+ break;
+ }
// scheme-specific validation
$scheme_obj = $uri->getSchemeObj($config, $context);
- if (!$scheme_obj) break;
- if ($this->embedsResource && !$scheme_obj->browsable) break;
+ if (!$scheme_obj) {
+ break;
+ }
+ if ($this->embedsResource && !$scheme_obj->browsable) {
+ break;
+ }
$result = $scheme_obj->validate($uri, $config, $context);
- if (!$result) break;
+ if (!$result) {
+ break;
+ }
// Post chained filtering
$result = $uri_def->postFilter($uri, $config, $context);
- if (!$result) break;
+ if (!$result) {
+ break;
+ }
// survived gauntlet
$ok = true;
@@ -65,13 +100,12 @@ class HTMLPurifier_AttrDef_URI extends HTMLPurifier_AttrDef
} while (false);
$context->destroy('EmbeddedURI');
- if (!$ok) return false;
-
+ if (!$ok) {
+ return false;
+ }
// back to string
return $uri->toString();
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/URI/Email.php b/library/HTMLPurifier/AttrDef/URI/Email.php
index bfee9d166..daf32b764 100644
--- a/library/HTMLPurifier/AttrDef/URI/Email.php
+++ b/library/HTMLPurifier/AttrDef/URI/Email.php
@@ -5,8 +5,11 @@ abstract class HTMLPurifier_AttrDef_URI_Email extends HTMLPurifier_AttrDef
/**
* Unpacks a mailbox into its display-name and address
+ * @param string $string
+ * @return mixed
*/
- function unpack($string) {
+ public function unpack($string)
+ {
// needs to be implemented
}
diff --git a/library/HTMLPurifier/AttrDef/URI/Email/SimpleCheck.php b/library/HTMLPurifier/AttrDef/URI/Email/SimpleCheck.php
index 94c715ab4..52c0d5968 100644
--- a/library/HTMLPurifier/AttrDef/URI/Email/SimpleCheck.php
+++ b/library/HTMLPurifier/AttrDef/URI/Email/SimpleCheck.php
@@ -7,15 +7,23 @@
class HTMLPurifier_AttrDef_URI_Email_SimpleCheck extends HTMLPurifier_AttrDef_URI_Email
{
- public function validate($string, $config, $context) {
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
// no support for named mailboxes i.e. "Bob <bob@example.com>"
// that needs more percent encoding to be done
- if ($string == '') return false;
+ if ($string == '') {
+ return false;
+ }
$string = trim($string);
$result = preg_match('/^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i', $string);
return $result ? $string : false;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/URI/Host.php b/library/HTMLPurifier/AttrDef/URI/Host.php
index 2156c10c6..e7df800b1 100644
--- a/library/HTMLPurifier/AttrDef/URI/Host.php
+++ b/library/HTMLPurifier/AttrDef/URI/Host.php
@@ -7,56 +7,122 @@ class HTMLPurifier_AttrDef_URI_Host extends HTMLPurifier_AttrDef
{
/**
- * Instance of HTMLPurifier_AttrDef_URI_IPv4 sub-validator
+ * IPv4 sub-validator.
+ * @type HTMLPurifier_AttrDef_URI_IPv4
*/
protected $ipv4;
/**
- * Instance of HTMLPurifier_AttrDef_URI_IPv6 sub-validator
+ * IPv6 sub-validator.
+ * @type HTMLPurifier_AttrDef_URI_IPv6
*/
protected $ipv6;
- public function __construct() {
+ public function __construct()
+ {
$this->ipv4 = new HTMLPurifier_AttrDef_URI_IPv4();
$this->ipv6 = new HTMLPurifier_AttrDef_URI_IPv6();
}
- public function validate($string, $config, $context) {
+ /**
+ * @param string $string
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($string, $config, $context)
+ {
$length = strlen($string);
- if ($string === '') return '';
- if ($length > 1 && $string[0] === '[' && $string[$length-1] === ']') {
+ // empty hostname is OK; it's usually semantically equivalent:
+ // the default host as defined by a URI scheme is used:
+ //
+ // If the URI scheme defines a default for host, then that
+ // default applies when the host subcomponent is undefined
+ // or when the registered name is empty (zero length).
+ if ($string === '') {
+ return '';
+ }
+ if ($length > 1 && $string[0] === '[' && $string[$length - 1] === ']') {
//IPv6
$ip = substr($string, 1, $length - 2);
$valid = $this->ipv6->validate($ip, $config, $context);
- if ($valid === false) return false;
- return '['. $valid . ']';
+ if ($valid === false) {
+ return false;
+ }
+ return '[' . $valid . ']';
}
// need to do checks on unusual encodings too
$ipv4 = $this->ipv4->validate($string, $config, $context);
- if ($ipv4 !== false) return $ipv4;
+ if ($ipv4 !== false) {
+ return $ipv4;
+ }
// A regular domain name.
- // This breaks I18N domain names, but we don't have proper IRI support,
- // so force users to insert Punycode. If there's complaining we'll
- // try to fix things into an international friendly form.
+ // This doesn't match I18N domain names, but we don't have proper IRI support,
+ // so force users to insert Punycode.
+
+ // There is not a good sense in which underscores should be
+ // allowed, since it's technically not! (And if you go as
+ // far to allow everything as specified by the DNS spec...
+ // well, that's literally everything, modulo some space limits
+ // for the components and the overall name (which, by the way,
+ // we are NOT checking!). So we (arbitrarily) decide this:
+ // let's allow underscores wherever we would have allowed
+ // hyphens, if they are enabled. This is a pretty good match
+ // for browser behavior, for example, a large number of browsers
+ // cannot handle foo_.example.com, but foo_bar.example.com is
+ // fairly well supported.
+ $underscore = $config->get('Core.AllowHostnameUnderscore') ? '_' : '';
// The productions describing this are:
$a = '[a-z]'; // alpha
$an = '[a-z0-9]'; // alphanum
- $and = '[a-z0-9-]'; // alphanum | "-"
+ $and = "[a-z0-9-$underscore]"; // alphanum | "-"
// domainlabel = alphanum | alphanum *( alphanum | "-" ) alphanum
- $domainlabel = "$an($and*$an)?";
+ $domainlabel = "$an($and*$an)?";
// toplabel = alpha | alpha *( alphanum | "-" ) alphanum
- $toplabel = "$a($and*$an)?";
+ $toplabel = "$a($and*$an)?";
// hostname = *( domainlabel "." ) toplabel [ "." ]
- $match = preg_match("/^($domainlabel\.)*$toplabel\.?$/i", $string);
- if (!$match) return false;
+ if (preg_match("/^($domainlabel\.)*$toplabel\.?$/i", $string)) {
+ return $string;
+ }
- return $string;
- }
+ // If we have Net_IDNA2 support, we can support IRIs by
+ // punycoding them. (This is the most portable thing to do,
+ // since otherwise we have to assume browsers support
+ if ($config->get('Core.EnableIDNA')) {
+ $idna = new Net_IDNA2(array('encoding' => 'utf8', 'overlong' => false, 'strict' => true));
+ // we need to encode each period separately
+ $parts = explode('.', $string);
+ try {
+ $new_parts = array();
+ foreach ($parts as $part) {
+ $encodable = false;
+ for ($i = 0, $c = strlen($part); $i < $c; $i++) {
+ if (ord($part[$i]) > 0x7a) {
+ $encodable = true;
+ break;
+ }
+ }
+ if (!$encodable) {
+ $new_parts[] = $part;
+ } else {
+ $new_parts[] = $idna->encode($part);
+ }
+ }
+ $string = implode('.', $new_parts);
+ if (preg_match("/^($domainlabel\.)*$toplabel\.?$/i", $string)) {
+ return $string;
+ }
+ } catch (Exception $e) {
+ // XXX error reporting
+ }
+ }
+ return false;
+ }
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/URI/IPv4.php b/library/HTMLPurifier/AttrDef/URI/IPv4.php
index ec4cf591b..30ac16c9e 100644
--- a/library/HTMLPurifier/AttrDef/URI/IPv4.php
+++ b/library/HTMLPurifier/AttrDef/URI/IPv4.php
@@ -8,32 +8,38 @@ class HTMLPurifier_AttrDef_URI_IPv4 extends HTMLPurifier_AttrDef
{
/**
- * IPv4 regex, protected so that IPv6 can reuse it
+ * IPv4 regex, protected so that IPv6 can reuse it.
+ * @type string
*/
protected $ip4;
- public function validate($aIP, $config, $context) {
-
- if (!$this->ip4) $this->_loadRegex();
-
- if (preg_match('#^' . $this->ip4 . '$#s', $aIP))
- {
- return $aIP;
+ /**
+ * @param string $aIP
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($aIP, $config, $context)
+ {
+ if (!$this->ip4) {
+ $this->_loadRegex();
}
+ if (preg_match('#^' . $this->ip4 . '$#s', $aIP)) {
+ return $aIP;
+ }
return false;
-
}
/**
* Lazy load function to prevent regex from being stuffed in
* cache.
*/
- protected function _loadRegex() {
+ protected function _loadRegex()
+ {
$oct = '(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])'; // 0-255
$this->ip4 = "(?:{$oct}\\.{$oct}\\.{$oct}\\.{$oct})";
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrDef/URI/IPv6.php b/library/HTMLPurifier/AttrDef/URI/IPv6.php
index 9454e9be5..f243793ee 100644
--- a/library/HTMLPurifier/AttrDef/URI/IPv6.php
+++ b/library/HTMLPurifier/AttrDef/URI/IPv6.php
@@ -9,91 +9,81 @@
class HTMLPurifier_AttrDef_URI_IPv6 extends HTMLPurifier_AttrDef_URI_IPv4
{
- public function validate($aIP, $config, $context) {
-
- if (!$this->ip4) $this->_loadRegex();
+ /**
+ * @param string $aIP
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string
+ */
+ public function validate($aIP, $config, $context)
+ {
+ if (!$this->ip4) {
+ $this->_loadRegex();
+ }
$original = $aIP;
$hex = '[0-9a-fA-F]';
$blk = '(?:' . $hex . '{1,4})';
- $pre = '(?:/(?:12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))'; // /0 - /128
+ $pre = '(?:/(?:12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))'; // /0 - /128
// prefix check
- if (strpos($aIP, '/') !== false)
- {
- if (preg_match('#' . $pre . '$#s', $aIP, $find))
- {
- $aIP = substr($aIP, 0, 0-strlen($find[0]));
- unset($find);
- }
- else
- {
- return false;
- }
+ if (strpos($aIP, '/') !== false) {
+ if (preg_match('#' . $pre . '$#s', $aIP, $find)) {
+ $aIP = substr($aIP, 0, 0 - strlen($find[0]));
+ unset($find);
+ } else {
+ return false;
+ }
}
// IPv4-compatiblity check
- if (preg_match('#(?<=:'.')' . $this->ip4 . '$#s', $aIP, $find))
- {
- $aIP = substr($aIP, 0, 0-strlen($find[0]));
- $ip = explode('.', $find[0]);
- $ip = array_map('dechex', $ip);
- $aIP .= $ip[0] . $ip[1] . ':' . $ip[2] . $ip[3];
- unset($find, $ip);
+ if (preg_match('#(?<=:' . ')' . $this->ip4 . '$#s', $aIP, $find)) {
+ $aIP = substr($aIP, 0, 0 - strlen($find[0]));
+ $ip = explode('.', $find[0]);
+ $ip = array_map('dechex', $ip);
+ $aIP .= $ip[0] . $ip[1] . ':' . $ip[2] . $ip[3];
+ unset($find, $ip);
}
// compression check
$aIP = explode('::', $aIP);
$c = count($aIP);
- if ($c > 2)
- {
+ if ($c > 2) {
+ return false;
+ } elseif ($c == 2) {
+ list($first, $second) = $aIP;
+ $first = explode(':', $first);
+ $second = explode(':', $second);
+
+ if (count($first) + count($second) > 8) {
return false;
- }
- elseif ($c == 2)
- {
- list($first, $second) = $aIP;
- $first = explode(':', $first);
- $second = explode(':', $second);
-
- if (count($first) + count($second) > 8)
- {
- return false;
- }
+ }
- while(count($first) < 8)
- {
- array_push($first, '0');
- }
+ while (count($first) < 8) {
+ array_push($first, '0');
+ }
- array_splice($first, 8 - count($second), 8, $second);
- $aIP = $first;
- unset($first,$second);
- }
- else
- {
- $aIP = explode(':', $aIP[0]);
+ array_splice($first, 8 - count($second), 8, $second);
+ $aIP = $first;
+ unset($first, $second);
+ } else {
+ $aIP = explode(':', $aIP[0]);
}
$c = count($aIP);
- if ($c != 8)
- {
- return false;
+ if ($c != 8) {
+ return false;
}
// All the pieces should be 16-bit hex strings. Are they?
- foreach ($aIP as $piece)
- {
- if (!preg_match('#^[0-9a-fA-F]{4}$#s', sprintf('%04s', $piece)))
- {
- return false;
- }
+ foreach ($aIP as $piece) {
+ if (!preg_match('#^[0-9a-fA-F]{4}$#s', sprintf('%04s', $piece))) {
+ return false;
+ }
}
-
return $original;
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrTransform.php b/library/HTMLPurifier/AttrTransform.php
index e61d3e01b..b428331f1 100644
--- a/library/HTMLPurifier/AttrTransform.php
+++ b/library/HTMLPurifier/AttrTransform.php
@@ -20,37 +20,41 @@ abstract class HTMLPurifier_AttrTransform
/**
* Abstract: makes changes to the attributes dependent on multiple values.
*
- * @param $attr Assoc array of attributes, usually from
+ * @param array $attr Assoc array of attributes, usually from
* HTMLPurifier_Token_Tag::$attr
- * @param $config Mandatory HTMLPurifier_Config object.
- * @param $context Mandatory HTMLPurifier_Context object
- * @returns Processed attribute array.
+ * @param HTMLPurifier_Config $config Mandatory HTMLPurifier_Config object.
+ * @param HTMLPurifier_Context $context Mandatory HTMLPurifier_Context object
+ * @return array Processed attribute array.
*/
abstract public function transform($attr, $config, $context);
/**
* Prepends CSS properties to the style attribute, creating the
* attribute if it doesn't exist.
- * @param $attr Attribute array to process (passed by reference)
- * @param $css CSS to prepend
+ * @param array &$attr Attribute array to process (passed by reference)
+ * @param string $css CSS to prepend
*/
- public function prependCSS(&$attr, $css) {
+ public function prependCSS(&$attr, $css)
+ {
$attr['style'] = isset($attr['style']) ? $attr['style'] : '';
$attr['style'] = $css . $attr['style'];
}
/**
* Retrieves and removes an attribute
- * @param $attr Attribute array to process (passed by reference)
- * @param $key Key of attribute to confiscate
+ * @param array &$attr Attribute array to process (passed by reference)
+ * @param mixed $key Key of attribute to confiscate
+ * @return mixed
*/
- public function confiscateAttr(&$attr, $key) {
- if (!isset($attr[$key])) return null;
+ public function confiscateAttr(&$attr, $key)
+ {
+ if (!isset($attr[$key])) {
+ return null;
+ }
$value = $attr[$key];
unset($attr[$key]);
return $value;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrTransform/Background.php b/library/HTMLPurifier/AttrTransform/Background.php
index 0e1ff24a3..2f72869a5 100644
--- a/library/HTMLPurifier/AttrTransform/Background.php
+++ b/library/HTMLPurifier/AttrTransform/Background.php
@@ -3,21 +3,26 @@
/**
* Pre-transform that changes proprietary background attribute to CSS.
*/
-class HTMLPurifier_AttrTransform_Background extends HTMLPurifier_AttrTransform {
-
- public function transform($attr, $config, $context) {
-
- if (!isset($attr['background'])) return $attr;
+class HTMLPurifier_AttrTransform_Background extends HTMLPurifier_AttrTransform
+{
+ /**
+ * @param array $attr
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function transform($attr, $config, $context)
+ {
+ if (!isset($attr['background'])) {
+ return $attr;
+ }
$background = $this->confiscateAttr($attr, 'background');
// some validation should happen here
$this->prependCSS($attr, "background-image:url($background);");
-
return $attr;
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrTransform/BdoDir.php b/library/HTMLPurifier/AttrTransform/BdoDir.php
index 4d1a05665..d66c04a5b 100644
--- a/library/HTMLPurifier/AttrTransform/BdoDir.php
+++ b/library/HTMLPurifier/AttrTransform/BdoDir.php
@@ -8,12 +8,20 @@
class HTMLPurifier_AttrTransform_BdoDir extends HTMLPurifier_AttrTransform
{
- public function transform($attr, $config, $context) {
- if (isset($attr['dir'])) return $attr;
+ /**
+ * @param array $attr
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function transform($attr, $config, $context)
+ {
+ if (isset($attr['dir'])) {
+ return $attr;
+ }
$attr['dir'] = $config->get('Attr.DefaultTextDir');
return $attr;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrTransform/BgColor.php b/library/HTMLPurifier/AttrTransform/BgColor.php
index ad3916bb9..0f51fd2ce 100644
--- a/library/HTMLPurifier/AttrTransform/BgColor.php
+++ b/library/HTMLPurifier/AttrTransform/BgColor.php
@@ -3,21 +3,26 @@
/**
* Pre-transform that changes deprecated bgcolor attribute to CSS.
*/
-class HTMLPurifier_AttrTransform_BgColor extends HTMLPurifier_AttrTransform {
-
- public function transform($attr, $config, $context) {
-
- if (!isset($attr['bgcolor'])) return $attr;
+class HTMLPurifier_AttrTransform_BgColor extends HTMLPurifier_AttrTransform
+{
+ /**
+ * @param array $attr
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function transform($attr, $config, $context)
+ {
+ if (!isset($attr['bgcolor'])) {
+ return $attr;
+ }
$bgcolor = $this->confiscateAttr($attr, 'bgcolor');
// some validation should happen here
$this->prependCSS($attr, "background-color:$bgcolor;");
-
return $attr;
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrTransform/BoolToCSS.php b/library/HTMLPurifier/AttrTransform/BoolToCSS.php
index 51159b671..f25cd0195 100644
--- a/library/HTMLPurifier/AttrTransform/BoolToCSS.php
+++ b/library/HTMLPurifier/AttrTransform/BoolToCSS.php
@@ -3,34 +3,45 @@
/**
* Pre-transform that changes converts a boolean attribute to fixed CSS
*/
-class HTMLPurifier_AttrTransform_BoolToCSS extends HTMLPurifier_AttrTransform {
-
+class HTMLPurifier_AttrTransform_BoolToCSS extends HTMLPurifier_AttrTransform
+{
/**
- * Name of boolean attribute that is trigger
+ * Name of boolean attribute that is trigger.
+ * @type string
*/
protected $attr;
/**
- * CSS declarations to add to style, needs trailing semicolon
+ * CSS declarations to add to style, needs trailing semicolon.
+ * @type string
*/
protected $css;
/**
- * @param $attr string attribute name to convert from
- * @param $css string CSS declarations to add to style (needs semicolon)
+ * @param string $attr attribute name to convert from
+ * @param string $css CSS declarations to add to style (needs semicolon)
*/
- public function __construct($attr, $css) {
+ public function __construct($attr, $css)
+ {
$this->attr = $attr;
- $this->css = $css;
+ $this->css = $css;
}
- public function transform($attr, $config, $context) {
- if (!isset($attr[$this->attr])) return $attr;
+ /**
+ * @param array $attr
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function transform($attr, $config, $context)
+ {
+ if (!isset($attr[$this->attr])) {
+ return $attr;
+ }
unset($attr[$this->attr]);
$this->prependCSS($attr, $this->css);
return $attr;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrTransform/Border.php b/library/HTMLPurifier/AttrTransform/Border.php
index 476b0b079..057dc017f 100644
--- a/library/HTMLPurifier/AttrTransform/Border.php
+++ b/library/HTMLPurifier/AttrTransform/Border.php
@@ -3,16 +3,24 @@
/**
* Pre-transform that changes deprecated border attribute to CSS.
*/
-class HTMLPurifier_AttrTransform_Border extends HTMLPurifier_AttrTransform {
-
- public function transform($attr, $config, $context) {
- if (!isset($attr['border'])) return $attr;
+class HTMLPurifier_AttrTransform_Border extends HTMLPurifier_AttrTransform
+{
+ /**
+ * @param array $attr
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function transform($attr, $config, $context)
+ {
+ if (!isset($attr['border'])) {
+ return $attr;
+ }
$border_width = $this->confiscateAttr($attr, 'border');
// some validation should happen here
$this->prependCSS($attr, "border:{$border_width}px solid;");
return $attr;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrTransform/EnumToCSS.php b/library/HTMLPurifier/AttrTransform/EnumToCSS.php
index 2a5b4514a..7ccd0e3fb 100644
--- a/library/HTMLPurifier/AttrTransform/EnumToCSS.php
+++ b/library/HTMLPurifier/AttrTransform/EnumToCSS.php
@@ -4,55 +4,65 @@
* Generic pre-transform that converts an attribute with a fixed number of
* values (enumerated) to CSS.
*/
-class HTMLPurifier_AttrTransform_EnumToCSS extends HTMLPurifier_AttrTransform {
-
+class HTMLPurifier_AttrTransform_EnumToCSS extends HTMLPurifier_AttrTransform
+{
/**
- * Name of attribute to transform from
+ * Name of attribute to transform from.
+ * @type string
*/
protected $attr;
/**
- * Lookup array of attribute values to CSS
+ * Lookup array of attribute values to CSS.
+ * @type array
*/
protected $enumToCSS = array();
/**
- * Case sensitivity of the matching
+ * Case sensitivity of the matching.
+ * @type bool
* @warning Currently can only be guaranteed to work with ASCII
* values.
*/
protected $caseSensitive = false;
/**
- * @param $attr String attribute name to transform from
- * @param $enumToCSS Lookup array of attribute values to CSS
- * @param $case_sensitive Boolean case sensitivity indicator, default false
+ * @param string $attr Attribute name to transform from
+ * @param array $enum_to_css Lookup array of attribute values to CSS
+ * @param bool $case_sensitive Case sensitivity indicator, default false
*/
- public function __construct($attr, $enum_to_css, $case_sensitive = false) {
+ public function __construct($attr, $enum_to_css, $case_sensitive = false)
+ {
$this->attr = $attr;
$this->enumToCSS = $enum_to_css;
- $this->caseSensitive = (bool) $case_sensitive;
+ $this->caseSensitive = (bool)$case_sensitive;
}
- public function transform($attr, $config, $context) {
-
- if (!isset($attr[$this->attr])) return $attr;
+ /**
+ * @param array $attr
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function transform($attr, $config, $context)
+ {
+ if (!isset($attr[$this->attr])) {
+ return $attr;
+ }
$value = trim($attr[$this->attr]);
unset($attr[$this->attr]);
- if (!$this->caseSensitive) $value = strtolower($value);
+ if (!$this->caseSensitive) {
+ $value = strtolower($value);
+ }
if (!isset($this->enumToCSS[$value])) {
return $attr;
}
-
$this->prependCSS($attr, $this->enumToCSS[$value]);
-
return $attr;
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrTransform/ImgRequired.php b/library/HTMLPurifier/AttrTransform/ImgRequired.php
index 7f0e4b7a5..7df6cb3e1 100644
--- a/library/HTMLPurifier/AttrTransform/ImgRequired.php
+++ b/library/HTMLPurifier/AttrTransform/ImgRequired.php
@@ -11,11 +11,19 @@
class HTMLPurifier_AttrTransform_ImgRequired extends HTMLPurifier_AttrTransform
{
- public function transform($attr, $config, $context) {
-
+ /**
+ * @param array $attr
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function transform($attr, $config, $context)
+ {
$src = true;
if (!isset($attr['src'])) {
- if ($config->get('Core.RemoveInvalidImg')) return $attr;
+ if ($config->get('Core.RemoveInvalidImg')) {
+ return $attr;
+ }
$attr['src'] = $config->get('Attr.DefaultInvalidImage');
$src = false;
}
@@ -25,7 +33,7 @@ class HTMLPurifier_AttrTransform_ImgRequired extends HTMLPurifier_AttrTransform
$alt = $config->get('Attr.DefaultImageAlt');
if ($alt === null) {
// truncate if the alt is too long
- $attr['alt'] = substr(basename($attr['src']),0,40);
+ $attr['alt'] = substr(basename($attr['src']), 0, 40);
} else {
$attr['alt'] = $alt;
}
@@ -33,11 +41,8 @@ class HTMLPurifier_AttrTransform_ImgRequired extends HTMLPurifier_AttrTransform
$attr['alt'] = $config->get('Attr.DefaultInvalidImageAlt');
}
}
-
return $attr;
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrTransform/ImgSpace.php b/library/HTMLPurifier/AttrTransform/ImgSpace.php
index fd84c10c3..350b3358f 100644
--- a/library/HTMLPurifier/AttrTransform/ImgSpace.php
+++ b/library/HTMLPurifier/AttrTransform/ImgSpace.php
@@ -3,42 +3,59 @@
/**
* Pre-transform that changes deprecated hspace and vspace attributes to CSS
*/
-class HTMLPurifier_AttrTransform_ImgSpace extends HTMLPurifier_AttrTransform {
-
+class HTMLPurifier_AttrTransform_ImgSpace extends HTMLPurifier_AttrTransform
+{
+ /**
+ * @type string
+ */
protected $attr;
+
+ /**
+ * @type array
+ */
protected $css = array(
'hspace' => array('left', 'right'),
'vspace' => array('top', 'bottom')
);
- public function __construct($attr) {
+ /**
+ * @param string $attr
+ */
+ public function __construct($attr)
+ {
$this->attr = $attr;
if (!isset($this->css[$attr])) {
trigger_error(htmlspecialchars($attr) . ' is not valid space attribute');
}
}
- public function transform($attr, $config, $context) {
-
- if (!isset($attr[$this->attr])) return $attr;
+ /**
+ * @param array $attr
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function transform($attr, $config, $context)
+ {
+ if (!isset($attr[$this->attr])) {
+ return $attr;
+ }
$width = $this->confiscateAttr($attr, $this->attr);
// some validation could happen here
- if (!isset($this->css[$this->attr])) return $attr;
+ if (!isset($this->css[$this->attr])) {
+ return $attr;
+ }
$style = '';
foreach ($this->css[$this->attr] as $suffix) {
$property = "margin-$suffix";
$style .= "$property:{$width}px;";
}
-
$this->prependCSS($attr, $style);
-
return $attr;
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrTransform/Input.php b/library/HTMLPurifier/AttrTransform/Input.php
index 16829552d..3ab47ed8c 100644
--- a/library/HTMLPurifier/AttrTransform/Input.php
+++ b/library/HTMLPurifier/AttrTransform/Input.php
@@ -4,17 +4,31 @@
* Performs miscellaneous cross attribute validation and filtering for
* input elements. This is meant to be a post-transform.
*/
-class HTMLPurifier_AttrTransform_Input extends HTMLPurifier_AttrTransform {
-
+class HTMLPurifier_AttrTransform_Input extends HTMLPurifier_AttrTransform
+{
+ /**
+ * @type HTMLPurifier_AttrDef_HTML_Pixels
+ */
protected $pixels;
- public function __construct() {
+ public function __construct()
+ {
$this->pixels = new HTMLPurifier_AttrDef_HTML_Pixels();
}
- public function transform($attr, $config, $context) {
- if (!isset($attr['type'])) $t = 'text';
- else $t = strtolower($attr['type']);
+ /**
+ * @param array $attr
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function transform($attr, $config, $context)
+ {
+ if (!isset($attr['type'])) {
+ $t = 'text';
+ } else {
+ $t = strtolower($attr['type']);
+ }
if (isset($attr['checked']) && $t !== 'radio' && $t !== 'checkbox') {
unset($attr['checked']);
}
@@ -23,8 +37,11 @@ class HTMLPurifier_AttrTransform_Input extends HTMLPurifier_AttrTransform {
}
if (isset($attr['size']) && $t !== 'text' && $t !== 'password') {
$result = $this->pixels->validate($attr['size'], $config, $context);
- if ($result === false) unset($attr['size']);
- else $attr['size'] = $result;
+ if ($result === false) {
+ unset($attr['size']);
+ } else {
+ $attr['size'] = $result;
+ }
}
if (isset($attr['src']) && $t !== 'image') {
unset($attr['src']);
@@ -34,7 +51,6 @@ class HTMLPurifier_AttrTransform_Input extends HTMLPurifier_AttrTransform {
}
return $attr;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrTransform/Lang.php b/library/HTMLPurifier/AttrTransform/Lang.php
index 5869e7f82..5b0aff0e4 100644
--- a/library/HTMLPurifier/AttrTransform/Lang.php
+++ b/library/HTMLPurifier/AttrTransform/Lang.php
@@ -8,9 +8,15 @@
class HTMLPurifier_AttrTransform_Lang extends HTMLPurifier_AttrTransform
{
- public function transform($attr, $config, $context) {
-
- $lang = isset($attr['lang']) ? $attr['lang'] : false;
+ /**
+ * @param array $attr
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function transform($attr, $config, $context)
+ {
+ $lang = isset($attr['lang']) ? $attr['lang'] : false;
$xml_lang = isset($attr['xml:lang']) ? $attr['xml:lang'] : false;
if ($lang !== false && $xml_lang === false) {
@@ -18,11 +24,8 @@ class HTMLPurifier_AttrTransform_Lang extends HTMLPurifier_AttrTransform
} elseif ($xml_lang !== false) {
$attr['lang'] = $xml_lang;
}
-
return $attr;
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrTransform/Length.php b/library/HTMLPurifier/AttrTransform/Length.php
index ea2f30473..853f33549 100644
--- a/library/HTMLPurifier/AttrTransform/Length.php
+++ b/library/HTMLPurifier/AttrTransform/Length.php
@@ -6,22 +6,40 @@
class HTMLPurifier_AttrTransform_Length extends HTMLPurifier_AttrTransform
{
+ /**
+ * @type string
+ */
protected $name;
+
+ /**
+ * @type string
+ */
protected $cssName;
- public function __construct($name, $css_name = null) {
+ public function __construct($name, $css_name = null)
+ {
$this->name = $name;
$this->cssName = $css_name ? $css_name : $name;
}
- public function transform($attr, $config, $context) {
- if (!isset($attr[$this->name])) return $attr;
+ /**
+ * @param array $attr
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function transform($attr, $config, $context)
+ {
+ if (!isset($attr[$this->name])) {
+ return $attr;
+ }
$length = $this->confiscateAttr($attr, $this->name);
- if(ctype_digit($length)) $length .= 'px';
+ if (ctype_digit($length)) {
+ $length .= 'px';
+ }
$this->prependCSS($attr, $this->cssName . ":$length;");
return $attr;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrTransform/Name.php b/library/HTMLPurifier/AttrTransform/Name.php
index 15315bc73..63cce6837 100644
--- a/library/HTMLPurifier/AttrTransform/Name.php
+++ b/library/HTMLPurifier/AttrTransform/Name.php
@@ -6,16 +6,28 @@
class HTMLPurifier_AttrTransform_Name extends HTMLPurifier_AttrTransform
{
- public function transform($attr, $config, $context) {
+ /**
+ * @param array $attr
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function transform($attr, $config, $context)
+ {
// Abort early if we're using relaxed definition of name
- if ($config->get('HTML.Attr.Name.UseCDATA')) return $attr;
- if (!isset($attr['name'])) return $attr;
+ if ($config->get('HTML.Attr.Name.UseCDATA')) {
+ return $attr;
+ }
+ if (!isset($attr['name'])) {
+ return $attr;
+ }
$id = $this->confiscateAttr($attr, 'name');
- if ( isset($attr['id'])) return $attr;
+ if (isset($attr['id'])) {
+ return $attr;
+ }
$attr['id'] = $id;
return $attr;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrTransform/NameSync.php b/library/HTMLPurifier/AttrTransform/NameSync.php
index a95638c14..36079b786 100644
--- a/library/HTMLPurifier/AttrTransform/NameSync.php
+++ b/library/HTMLPurifier/AttrTransform/NameSync.php
@@ -8,20 +8,34 @@
class HTMLPurifier_AttrTransform_NameSync extends HTMLPurifier_AttrTransform
{
- public function __construct() {
+ public function __construct()
+ {
$this->idDef = new HTMLPurifier_AttrDef_HTML_ID();
}
- public function transform($attr, $config, $context) {
- if (!isset($attr['name'])) return $attr;
+ /**
+ * @param array $attr
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function transform($attr, $config, $context)
+ {
+ if (!isset($attr['name'])) {
+ return $attr;
+ }
$name = $attr['name'];
- if (isset($attr['id']) && $attr['id'] === $name) return $attr;
+ if (isset($attr['id']) && $attr['id'] === $name) {
+ return $attr;
+ }
$result = $this->idDef->validate($name, $config, $context);
- if ($result === false) unset($attr['name']);
- else $attr['name'] = $result;
+ if ($result === false) {
+ unset($attr['name']);
+ } else {
+ $attr['name'] = $result;
+ }
return $attr;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrTransform/Nofollow.php b/library/HTMLPurifier/AttrTransform/Nofollow.php
new file mode 100644
index 000000000..1057ebee1
--- /dev/null
+++ b/library/HTMLPurifier/AttrTransform/Nofollow.php
@@ -0,0 +1,52 @@
+<?php
+
+// must be called POST validation
+
+/**
+ * Adds rel="nofollow" to all outbound links. This transform is
+ * only attached if Attr.Nofollow is TRUE.
+ */
+class HTMLPurifier_AttrTransform_Nofollow extends HTMLPurifier_AttrTransform
+{
+ /**
+ * @type HTMLPurifier_URIParser
+ */
+ private $parser;
+
+ public function __construct()
+ {
+ $this->parser = new HTMLPurifier_URIParser();
+ }
+
+ /**
+ * @param array $attr
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function transform($attr, $config, $context)
+ {
+ if (!isset($attr['href'])) {
+ return $attr;
+ }
+
+ // XXX Kind of inefficient
+ $url = $this->parser->parse($attr['href']);
+ $scheme = $url->getSchemeObj($config, $context);
+
+ if ($scheme->browsable && !$url->isLocal($config, $context)) {
+ if (isset($attr['rel'])) {
+ $rels = explode(' ', $attr['rel']);
+ if (!in_array('nofollow', $rels)) {
+ $rels[] = 'nofollow';
+ }
+ $attr['rel'] = implode(' ', $rels);
+ } else {
+ $attr['rel'] = 'nofollow';
+ }
+ }
+ return $attr;
+ }
+}
+
+// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrTransform/SafeEmbed.php b/library/HTMLPurifier/AttrTransform/SafeEmbed.php
index 4da449981..231c81a3f 100644
--- a/library/HTMLPurifier/AttrTransform/SafeEmbed.php
+++ b/library/HTMLPurifier/AttrTransform/SafeEmbed.php
@@ -2,9 +2,19 @@
class HTMLPurifier_AttrTransform_SafeEmbed extends HTMLPurifier_AttrTransform
{
+ /**
+ * @type string
+ */
public $name = "SafeEmbed";
- public function transform($attr, $config, $context) {
+ /**
+ * @param array $attr
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function transform($attr, $config, $context)
+ {
$attr['allowscriptaccess'] = 'never';
$attr['allownetworking'] = 'internal';
$attr['type'] = 'application/x-shockwave-flash';
diff --git a/library/HTMLPurifier/AttrTransform/SafeObject.php b/library/HTMLPurifier/AttrTransform/SafeObject.php
index 1ed74898b..d1f3a4d2e 100644
--- a/library/HTMLPurifier/AttrTransform/SafeObject.php
+++ b/library/HTMLPurifier/AttrTransform/SafeObject.php
@@ -5,10 +5,22 @@
*/
class HTMLPurifier_AttrTransform_SafeObject extends HTMLPurifier_AttrTransform
{
+ /**
+ * @type string
+ */
public $name = "SafeObject";
- function transform($attr, $config, $context) {
- if (!isset($attr['type'])) $attr['type'] = 'application/x-shockwave-flash';
+ /**
+ * @param array $attr
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function transform($attr, $config, $context)
+ {
+ if (!isset($attr['type'])) {
+ $attr['type'] = 'application/x-shockwave-flash';
+ }
return $attr;
}
}
diff --git a/library/HTMLPurifier/AttrTransform/SafeParam.php b/library/HTMLPurifier/AttrTransform/SafeParam.php
index 3f992ec31..1143b4b49 100644
--- a/library/HTMLPurifier/AttrTransform/SafeParam.php
+++ b/library/HTMLPurifier/AttrTransform/SafeParam.php
@@ -14,14 +14,30 @@
*/
class HTMLPurifier_AttrTransform_SafeParam extends HTMLPurifier_AttrTransform
{
+ /**
+ * @type string
+ */
public $name = "SafeParam";
+
+ /**
+ * @type HTMLPurifier_AttrDef_URI
+ */
private $uri;
- public function __construct() {
+ public function __construct()
+ {
$this->uri = new HTMLPurifier_AttrDef_URI(true); // embedded
+ $this->wmode = new HTMLPurifier_AttrDef_Enum(array('window', 'opaque', 'transparent'));
}
- public function transform($attr, $config, $context) {
+ /**
+ * @param array $attr
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function transform($attr, $config, $context)
+ {
// If we add support for other objects, we'll need to alter the
// transforms.
switch ($attr['name']) {
@@ -33,8 +49,15 @@ class HTMLPurifier_AttrTransform_SafeParam extends HTMLPurifier_AttrTransform
case 'allowNetworking':
$attr['value'] = 'internal';
break;
+ case 'allowFullScreen':
+ if ($config->get('HTML.FlashAllowFullScreen')) {
+ $attr['value'] = ($attr['value'] == 'true') ? 'true' : 'false';
+ } else {
+ $attr['value'] = 'false';
+ }
+ break;
case 'wmode':
- $attr['value'] = 'window';
+ $attr['value'] = $this->wmode->validate($attr['value'], $config, $context);
break;
case 'movie':
case 'src':
diff --git a/library/HTMLPurifier/AttrTransform/ScriptRequired.php b/library/HTMLPurifier/AttrTransform/ScriptRequired.php
index 4499050a2..b7057bbf8 100644
--- a/library/HTMLPurifier/AttrTransform/ScriptRequired.php
+++ b/library/HTMLPurifier/AttrTransform/ScriptRequired.php
@@ -5,7 +5,14 @@
*/
class HTMLPurifier_AttrTransform_ScriptRequired extends HTMLPurifier_AttrTransform
{
- public function transform($attr, $config, $context) {
+ /**
+ * @param array $attr
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function transform($attr, $config, $context)
+ {
if (!isset($attr['type'])) {
$attr['type'] = 'text/javascript';
}
diff --git a/library/HTMLPurifier/AttrTransform/TargetBlank.php b/library/HTMLPurifier/AttrTransform/TargetBlank.php
new file mode 100644
index 000000000..dd63ea89c
--- /dev/null
+++ b/library/HTMLPurifier/AttrTransform/TargetBlank.php
@@ -0,0 +1,45 @@
+<?php
+
+// must be called POST validation
+
+/**
+ * Adds target="blank" to all outbound links. This transform is
+ * only attached if Attr.TargetBlank is TRUE. This works regardless
+ * of whether or not Attr.AllowedFrameTargets
+ */
+class HTMLPurifier_AttrTransform_TargetBlank extends HTMLPurifier_AttrTransform
+{
+ /**
+ * @type HTMLPurifier_URIParser
+ */
+ private $parser;
+
+ public function __construct()
+ {
+ $this->parser = new HTMLPurifier_URIParser();
+ }
+
+ /**
+ * @param array $attr
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function transform($attr, $config, $context)
+ {
+ if (!isset($attr['href'])) {
+ return $attr;
+ }
+
+ // XXX Kind of inefficient
+ $url = $this->parser->parse($attr['href']);
+ $scheme = $url->getSchemeObj($config, $context);
+
+ if ($scheme->browsable && !$url->isBenign($config, $context)) {
+ $attr['target'] = '_blank';
+ }
+ return $attr;
+ }
+}
+
+// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrTransform/Textarea.php b/library/HTMLPurifier/AttrTransform/Textarea.php
index 81ac3488b..6a9f33a0c 100644
--- a/library/HTMLPurifier/AttrTransform/Textarea.php
+++ b/library/HTMLPurifier/AttrTransform/Textarea.php
@@ -5,14 +5,23 @@
*/
class HTMLPurifier_AttrTransform_Textarea extends HTMLPurifier_AttrTransform
{
-
- public function transform($attr, $config, $context) {
+ /**
+ * @param array $attr
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function transform($attr, $config, $context)
+ {
// Calculated from Firefox
- if (!isset($attr['cols'])) $attr['cols'] = '22';
- if (!isset($attr['rows'])) $attr['rows'] = '3';
+ if (!isset($attr['cols'])) {
+ $attr['cols'] = '22';
+ }
+ if (!isset($attr['rows'])) {
+ $attr['rows'] = '3';
+ }
return $attr;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/AttrTypes.php b/library/HTMLPurifier/AttrTypes.php
index fc2ea4e58..3b70520b6 100644
--- a/library/HTMLPurifier/AttrTypes.php
+++ b/library/HTMLPurifier/AttrTypes.php
@@ -6,7 +6,8 @@
class HTMLPurifier_AttrTypes
{
/**
- * Lookup array of attribute string identifiers to concrete implementations
+ * Lookup array of attribute string identifiers to concrete implementations.
+ * @type HTMLPurifier_AttrDef[]
*/
protected $info = array();
@@ -14,7 +15,15 @@ class HTMLPurifier_AttrTypes
* Constructs the info array, supplying default implementations for attribute
* types.
*/
- public function __construct() {
+ public function __construct()
+ {
+ // XXX This is kind of poor, since we don't actually /clone/
+ // instances; instead, we use the supplied make() attribute. So,
+ // the underlying class must know how to deal with arguments.
+ // With the old implementation of Enum, that ignored its
+ // arguments when handling a make dispatch, the IAlign
+ // definition wouldn't work.
+
// pseudo-types, must be instantiated via shorthand
$this->info['Enum'] = new HTMLPurifier_AttrDef_Enum();
$this->info['Bool'] = new HTMLPurifier_AttrDef_HTML_Bool();
@@ -29,6 +38,9 @@ class HTMLPurifier_AttrTypes
$this->info['URI'] = new HTMLPurifier_AttrDef_URI();
$this->info['LanguageCode'] = new HTMLPurifier_AttrDef_Lang();
$this->info['Color'] = new HTMLPurifier_AttrDef_HTML_Color();
+ $this->info['IAlign'] = self::makeEnum('top,middle,bottom,left,right');
+ $this->info['LAlign'] = self::makeEnum('top,bottom,left,right');
+ $this->info['FrameTarget'] = new HTMLPurifier_AttrDef_HTML_FrameTarget();
// unimplemented aliases
$this->info['ContentType'] = new HTMLPurifier_AttrDef_Text();
@@ -44,32 +56,39 @@ class HTMLPurifier_AttrTypes
$this->info['Number'] = new HTMLPurifier_AttrDef_Integer(false, false, true);
}
+ private static function makeEnum($in)
+ {
+ return new HTMLPurifier_AttrDef_Clone(new HTMLPurifier_AttrDef_Enum(explode(',', $in)));
+ }
+
/**
* Retrieves a type
- * @param $type String type name
- * @return Object AttrDef for type
+ * @param string $type String type name
+ * @return HTMLPurifier_AttrDef Object AttrDef for type
*/
- public function get($type) {
-
+ public function get($type)
+ {
// determine if there is any extra info tacked on
- if (strpos($type, '#') !== false) list($type, $string) = explode('#', $type, 2);
- else $string = '';
+ if (strpos($type, '#') !== false) {
+ list($type, $string) = explode('#', $type, 2);
+ } else {
+ $string = '';
+ }
if (!isset($this->info[$type])) {
trigger_error('Cannot retrieve undefined attribute type ' . $type, E_USER_ERROR);
return;
}
-
return $this->info[$type]->make($string);
-
}
/**
* Sets a new implementation for a type
- * @param $type String type name
- * @param $impl Object AttrDef for type
+ * @param string $type String type name
+ * @param HTMLPurifier_AttrDef $impl Object AttrDef for type
*/
- public function set($type, $impl) {
+ public function set($type, $impl)
+ {
$this->info[$type] = $impl;
}
}
diff --git a/library/HTMLPurifier/AttrValidator.php b/library/HTMLPurifier/AttrValidator.php
index 829a0f8f2..f97dc93ed 100644
--- a/library/HTMLPurifier/AttrValidator.php
+++ b/library/HTMLPurifier/AttrValidator.php
@@ -9,17 +9,14 @@ class HTMLPurifier_AttrValidator
{
/**
- * Validates the attributes of a token, returning a modified token
+ * Validates the attributes of a token, mutating it as necessary.
* that has valid tokens
- * @param $token Reference to token to validate. We require a reference
- * because the operation this class performs on the token are
- * not atomic, so the context CurrentToken to be updated
- * throughout
- * @param $config Instance of HTMLPurifier_Config
- * @param $context Instance of HTMLPurifier_Context
+ * @param HTMLPurifier_Token $token Token to validate.
+ * @param HTMLPurifier_Config $config Instance of HTMLPurifier_Config
+ * @param HTMLPurifier_Context $context Instance of HTMLPurifier_Context
*/
- public function validateToken(&$token, &$config, $context) {
-
+ public function validateToken($token, $config, $context)
+ {
$definition = $config->getHTMLDefinition();
$e =& $context->get('ErrorCollector', true);
@@ -32,12 +29,15 @@ class HTMLPurifier_AttrValidator
// initialize CurrentToken if necessary
$current_token =& $context->get('CurrentToken', true);
- if (!$current_token) $context->register('CurrentToken', $token);
+ if (!$current_token) {
+ $context->register('CurrentToken', $token);
+ }
- if (
- !$token instanceof HTMLPurifier_Token_Start &&
+ if (!$token instanceof HTMLPurifier_Token_Start &&
!$token instanceof HTMLPurifier_Token_Empty
- ) return $token;
+ ) {
+ return;
+ }
// create alias to global definition array, see also $defs
// DEFINITION CALL
@@ -51,7 +51,9 @@ class HTMLPurifier_AttrValidator
foreach ($definition->info_attr_transform_pre as $transform) {
$attr = $transform->transform($o = $attr, $config, $context);
if ($e) {
- if ($attr != $o) $e->send(E_NOTICE, 'AttrValidator: Attributes transformed', $o, $attr);
+ if ($attr != $o) {
+ $e->send(E_NOTICE, 'AttrValidator: Attributes transformed', $o, $attr);
+ }
}
}
@@ -60,7 +62,9 @@ class HTMLPurifier_AttrValidator
foreach ($definition->info[$token->name]->attr_transform_pre as $transform) {
$attr = $transform->transform($o = $attr, $config, $context);
if ($e) {
- if ($attr != $o) $e->send(E_NOTICE, 'AttrValidator: Attributes transformed', $o, $attr);
+ if ($attr != $o) {
+ $e->send(E_NOTICE, 'AttrValidator: Attributes transformed', $o, $attr);
+ }
}
}
@@ -77,7 +81,7 @@ class HTMLPurifier_AttrValidator
foreach ($attr as $attr_key => $value) {
// call the definition
- if ( isset($defs[$attr_key]) ) {
+ if (isset($defs[$attr_key])) {
// there is a local definition defined
if ($defs[$attr_key] === false) {
// We've explicitly been told not to allow this element.
@@ -89,15 +93,19 @@ class HTMLPurifier_AttrValidator
} else {
// validate according to the element's definition
$result = $defs[$attr_key]->validate(
- $value, $config, $context
- );
+ $value,
+ $config,
+ $context
+ );
}
- } elseif ( isset($d_defs[$attr_key]) ) {
+ } elseif (isset($d_defs[$attr_key])) {
// there is a global definition defined, validate according
// to the global definition
$result = $d_defs[$attr_key]->validate(
- $value, $config, $context
- );
+ $value,
+ $config,
+ $context
+ );
} else {
// system never heard of the attribute? DELETE!
$result = false;
@@ -107,7 +115,9 @@ class HTMLPurifier_AttrValidator
if ($result === false || $result === null) {
// this is a generic error message that should replaced
// with more specific ones when possible
- if ($e) $e->send(E_ERROR, 'AttrValidator: Attribute removed');
+ if ($e) {
+ $e->send(E_ERROR, 'AttrValidator: Attribute removed');
+ }
// remove the attribute
unset($attr[$attr_key]);
@@ -137,7 +147,9 @@ class HTMLPurifier_AttrValidator
foreach ($definition->info_attr_transform_post as $transform) {
$attr = $transform->transform($o = $attr, $config, $context);
if ($e) {
- if ($attr != $o) $e->send(E_NOTICE, 'AttrValidator: Attributes transformed', $o, $attr);
+ if ($attr != $o) {
+ $e->send(E_NOTICE, 'AttrValidator: Attributes transformed', $o, $attr);
+ }
}
}
@@ -145,14 +157,18 @@ class HTMLPurifier_AttrValidator
foreach ($definition->info[$token->name]->attr_transform_post as $transform) {
$attr = $transform->transform($o = $attr, $config, $context);
if ($e) {
- if ($attr != $o) $e->send(E_NOTICE, 'AttrValidator: Attributes transformed', $o, $attr);
+ if ($attr != $o) {
+ $e->send(E_NOTICE, 'AttrValidator: Attributes transformed', $o, $attr);
+ }
}
}
$token->attr = $attr;
// destroy CurrentToken if we made it ourselves
- if (!$current_token) $context->destroy('CurrentToken');
+ if (!$current_token) {
+ $context->destroy('CurrentToken');
+ }
}
diff --git a/library/HTMLPurifier/Bootstrap.php b/library/HTMLPurifier/Bootstrap.php
index 559f61a23..707122bb2 100644
--- a/library/HTMLPurifier/Bootstrap.php
+++ b/library/HTMLPurifier/Bootstrap.php
@@ -32,20 +32,34 @@ class HTMLPurifier_Bootstrap
/**
* Autoload function for HTML Purifier
- * @param $class Class to load
+ * @param string $class Class to load
+ * @return bool
*/
- public static function autoload($class) {
+ public static function autoload($class)
+ {
$file = HTMLPurifier_Bootstrap::getPath($class);
- if (!$file) return false;
- require HTMLPURIFIER_PREFIX . '/' . $file;
+ if (!$file) {
+ return false;
+ }
+ // Technically speaking, it should be ok and more efficient to
+ // just do 'require', but Antonio Parraga reports that with
+ // Zend extensions such as Zend debugger and APC, this invariant
+ // may be broken. Since we have efficient alternatives, pay
+ // the cost here and avoid the bug.
+ require_once HTMLPURIFIER_PREFIX . '/' . $file;
return true;
}
/**
* Returns the path for a specific class.
+ * @param string $class Class path to get
+ * @return string
*/
- public static function getPath($class) {
- if (strncmp('HTMLPurifier', $class, 12) !== 0) return false;
+ public static function getPath($class)
+ {
+ if (strncmp('HTMLPurifier', $class, 12) !== 0) {
+ return false;
+ }
// Custom implementations
if (strncmp('HTMLPurifier_Language_', $class, 22) === 0) {
$code = str_replace('_', '-', substr($class, 22));
@@ -53,46 +67,58 @@ class HTMLPurifier_Bootstrap
} else {
$file = str_replace('_', '/', $class) . '.php';
}
- if (!file_exists(HTMLPURIFIER_PREFIX . '/' . $file)) return false;
+ if (!file_exists(HTMLPURIFIER_PREFIX . '/' . $file)) {
+ return false;
+ }
return $file;
}
/**
* "Pre-registers" our autoloader on the SPL stack.
*/
- public static function registerAutoload() {
+ public static function registerAutoload()
+ {
$autoload = array('HTMLPurifier_Bootstrap', 'autoload');
- if ( ($funcs = spl_autoload_functions()) === false ) {
+ if (($funcs = spl_autoload_functions()) === false) {
spl_autoload_register($autoload);
} elseif (function_exists('spl_autoload_unregister')) {
- $compat = version_compare(PHP_VERSION, '5.1.2', '<=') &&
- version_compare(PHP_VERSION, '5.1.0', '>=');
- foreach ($funcs as $func) {
- if (is_array($func)) {
- // :TRICKY: There are some compatibility issues and some
- // places where we need to error out
- $reflector = new ReflectionMethod($func[0], $func[1]);
- if (!$reflector->isStatic()) {
- throw new Exception('
- HTML Purifier autoloader registrar is not compatible
- with non-static object methods due to PHP Bug #44144;
- Please do not use HTMLPurifier.autoload.php (or any
- file that includes this file); instead, place the code:
- spl_autoload_register(array(\'HTMLPurifier_Bootstrap\', \'autoload\'))
- after your own autoloaders.
- ');
+ if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
+ // prepend flag exists, no need for shenanigans
+ spl_autoload_register($autoload, true, true);
+ } else {
+ $buggy = version_compare(PHP_VERSION, '5.2.11', '<');
+ $compat = version_compare(PHP_VERSION, '5.1.2', '<=') &&
+ version_compare(PHP_VERSION, '5.1.0', '>=');
+ foreach ($funcs as $func) {
+ if ($buggy && is_array($func)) {
+ // :TRICKY: There are some compatibility issues and some
+ // places where we need to error out
+ $reflector = new ReflectionMethod($func[0], $func[1]);
+ if (!$reflector->isStatic()) {
+ throw new Exception(
+ 'HTML Purifier autoloader registrar is not compatible
+ with non-static object methods due to PHP Bug #44144;
+ Please do not use HTMLPurifier.autoload.php (or any
+ file that includes this file); instead, place the code:
+ spl_autoload_register(array(\'HTMLPurifier_Bootstrap\', \'autoload\'))
+ after your own autoloaders.'
+ );
+ }
+ // Suprisingly, spl_autoload_register supports the
+ // Class::staticMethod callback format, although call_user_func doesn't
+ if ($compat) {
+ $func = implode('::', $func);
+ }
}
- // Suprisingly, spl_autoload_register supports the
- // Class::staticMethod callback format, although call_user_func doesn't
- if ($compat) $func = implode('::', $func);
+ spl_autoload_unregister($func);
+ }
+ spl_autoload_register($autoload);
+ foreach ($funcs as $func) {
+ spl_autoload_register($func);
}
- spl_autoload_unregister($func);
}
- spl_autoload_register($autoload);
- foreach ($funcs as $func) spl_autoload_register($func);
}
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/CSSDefinition.php b/library/HTMLPurifier/CSSDefinition.php
index 6a2e6f56d..0acdee2d9 100644
--- a/library/HTMLPurifier/CSSDefinition.php
+++ b/library/HTMLPurifier/CSSDefinition.php
@@ -11,35 +11,59 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
/**
* Assoc array of attribute name to definition object.
+ * @type HTMLPurifier_AttrDef[]
*/
public $info = array();
/**
* Constructs the info array. The meat of this class.
+ * @param HTMLPurifier_Config $config
*/
- protected function doSetup($config) {
-
+ protected function doSetup($config)
+ {
$this->info['text-align'] = new HTMLPurifier_AttrDef_Enum(
- array('left', 'right', 'center', 'justify'), false);
+ array('left', 'right', 'center', 'justify'),
+ false
+ );
$border_style =
- $this->info['border-bottom-style'] =
- $this->info['border-right-style'] =
- $this->info['border-left-style'] =
- $this->info['border-top-style'] = new HTMLPurifier_AttrDef_Enum(
- array('none', 'hidden', 'dotted', 'dashed', 'solid', 'double',
- 'groove', 'ridge', 'inset', 'outset'), false);
+ $this->info['border-bottom-style'] =
+ $this->info['border-right-style'] =
+ $this->info['border-left-style'] =
+ $this->info['border-top-style'] = new HTMLPurifier_AttrDef_Enum(
+ array(
+ 'none',
+ 'hidden',
+ 'dotted',
+ 'dashed',
+ 'solid',
+ 'double',
+ 'groove',
+ 'ridge',
+ 'inset',
+ 'outset'
+ ),
+ false
+ );
$this->info['border-style'] = new HTMLPurifier_AttrDef_CSS_Multiple($border_style);
$this->info['clear'] = new HTMLPurifier_AttrDef_Enum(
- array('none', 'left', 'right', 'both'), false);
+ array('none', 'left', 'right', 'both'),
+ false
+ );
$this->info['float'] = new HTMLPurifier_AttrDef_Enum(
- array('none', 'left', 'right'), false);
+ array('none', 'left', 'right'),
+ false
+ );
$this->info['font-style'] = new HTMLPurifier_AttrDef_Enum(
- array('normal', 'italic', 'oblique'), false);
+ array('normal', 'italic', 'oblique'),
+ false
+ );
$this->info['font-variant'] = new HTMLPurifier_AttrDef_Enum(
- array('normal', 'small-caps'), false);
+ array('normal', 'small-caps'),
+ false
+ );
$uri_or_none = new HTMLPurifier_AttrDef_CSS_Composite(
array(
@@ -49,16 +73,31 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
);
$this->info['list-style-position'] = new HTMLPurifier_AttrDef_Enum(
- array('inside', 'outside'), false);
+ array('inside', 'outside'),
+ false
+ );
$this->info['list-style-type'] = new HTMLPurifier_AttrDef_Enum(
- array('disc', 'circle', 'square', 'decimal', 'lower-roman',
- 'upper-roman', 'lower-alpha', 'upper-alpha', 'none'), false);
+ array(
+ 'disc',
+ 'circle',
+ 'square',
+ 'decimal',
+ 'lower-roman',
+ 'upper-roman',
+ 'lower-alpha',
+ 'upper-alpha',
+ 'none'
+ ),
+ false
+ );
$this->info['list-style-image'] = $uri_or_none;
$this->info['list-style'] = new HTMLPurifier_AttrDef_CSS_ListStyle($config);
$this->info['text-transform'] = new HTMLPurifier_AttrDef_Enum(
- array('capitalize', 'uppercase', 'lowercase', 'none'), false);
+ array('capitalize', 'uppercase', 'lowercase', 'none'),
+ false
+ );
$this->info['color'] = new HTMLPurifier_AttrDef_CSS_Color();
$this->info['background-image'] = $uri_or_none;
@@ -71,104 +110,137 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
$this->info['background-position'] = new HTMLPurifier_AttrDef_CSS_BackgroundPosition();
$border_color =
- $this->info['border-top-color'] =
- $this->info['border-bottom-color'] =
- $this->info['border-left-color'] =
- $this->info['border-right-color'] =
- $this->info['background-color'] = new HTMLPurifier_AttrDef_CSS_Composite(array(
- new HTMLPurifier_AttrDef_Enum(array('transparent')),
- new HTMLPurifier_AttrDef_CSS_Color()
- ));
+ $this->info['border-top-color'] =
+ $this->info['border-bottom-color'] =
+ $this->info['border-left-color'] =
+ $this->info['border-right-color'] =
+ $this->info['background-color'] = new HTMLPurifier_AttrDef_CSS_Composite(
+ array(
+ new HTMLPurifier_AttrDef_Enum(array('transparent')),
+ new HTMLPurifier_AttrDef_CSS_Color()
+ )
+ );
$this->info['background'] = new HTMLPurifier_AttrDef_CSS_Background($config);
$this->info['border-color'] = new HTMLPurifier_AttrDef_CSS_Multiple($border_color);
$border_width =
- $this->info['border-top-width'] =
- $this->info['border-bottom-width'] =
- $this->info['border-left-width'] =
- $this->info['border-right-width'] = new HTMLPurifier_AttrDef_CSS_Composite(array(
- new HTMLPurifier_AttrDef_Enum(array('thin', 'medium', 'thick')),
- new HTMLPurifier_AttrDef_CSS_Length('0') //disallow negative
- ));
+ $this->info['border-top-width'] =
+ $this->info['border-bottom-width'] =
+ $this->info['border-left-width'] =
+ $this->info['border-right-width'] = new HTMLPurifier_AttrDef_CSS_Composite(
+ array(
+ new HTMLPurifier_AttrDef_Enum(array('thin', 'medium', 'thick')),
+ new HTMLPurifier_AttrDef_CSS_Length('0') //disallow negative
+ )
+ );
$this->info['border-width'] = new HTMLPurifier_AttrDef_CSS_Multiple($border_width);
- $this->info['letter-spacing'] = new HTMLPurifier_AttrDef_CSS_Composite(array(
- new HTMLPurifier_AttrDef_Enum(array('normal')),
- new HTMLPurifier_AttrDef_CSS_Length()
- ));
-
- $this->info['word-spacing'] = new HTMLPurifier_AttrDef_CSS_Composite(array(
- new HTMLPurifier_AttrDef_Enum(array('normal')),
- new HTMLPurifier_AttrDef_CSS_Length()
- ));
-
- $this->info['font-size'] = new HTMLPurifier_AttrDef_CSS_Composite(array(
- new HTMLPurifier_AttrDef_Enum(array('xx-small', 'x-small',
- 'small', 'medium', 'large', 'x-large', 'xx-large',
- 'larger', 'smaller')),
- new HTMLPurifier_AttrDef_CSS_Percentage(),
- new HTMLPurifier_AttrDef_CSS_Length()
- ));
-
- $this->info['line-height'] = new HTMLPurifier_AttrDef_CSS_Composite(array(
- new HTMLPurifier_AttrDef_Enum(array('normal')),
- new HTMLPurifier_AttrDef_CSS_Number(true), // no negatives
- new HTMLPurifier_AttrDef_CSS_Length('0'),
- new HTMLPurifier_AttrDef_CSS_Percentage(true)
- ));
+ $this->info['letter-spacing'] = new HTMLPurifier_AttrDef_CSS_Composite(
+ array(
+ new HTMLPurifier_AttrDef_Enum(array('normal')),
+ new HTMLPurifier_AttrDef_CSS_Length()
+ )
+ );
+
+ $this->info['word-spacing'] = new HTMLPurifier_AttrDef_CSS_Composite(
+ array(
+ new HTMLPurifier_AttrDef_Enum(array('normal')),
+ new HTMLPurifier_AttrDef_CSS_Length()
+ )
+ );
+
+ $this->info['font-size'] = new HTMLPurifier_AttrDef_CSS_Composite(
+ array(
+ new HTMLPurifier_AttrDef_Enum(
+ array(
+ 'xx-small',
+ 'x-small',
+ 'small',
+ 'medium',
+ 'large',
+ 'x-large',
+ 'xx-large',
+ 'larger',
+ 'smaller'
+ )
+ ),
+ new HTMLPurifier_AttrDef_CSS_Percentage(),
+ new HTMLPurifier_AttrDef_CSS_Length()
+ )
+ );
+
+ $this->info['line-height'] = new HTMLPurifier_AttrDef_CSS_Composite(
+ array(
+ new HTMLPurifier_AttrDef_Enum(array('normal')),
+ new HTMLPurifier_AttrDef_CSS_Number(true), // no negatives
+ new HTMLPurifier_AttrDef_CSS_Length('0'),
+ new HTMLPurifier_AttrDef_CSS_Percentage(true)
+ )
+ );
$margin =
- $this->info['margin-top'] =
- $this->info['margin-bottom'] =
- $this->info['margin-left'] =
- $this->info['margin-right'] = new HTMLPurifier_AttrDef_CSS_Composite(array(
- new HTMLPurifier_AttrDef_CSS_Length(),
- new HTMLPurifier_AttrDef_CSS_Percentage(),
- new HTMLPurifier_AttrDef_Enum(array('auto'))
- ));
+ $this->info['margin-top'] =
+ $this->info['margin-bottom'] =
+ $this->info['margin-left'] =
+ $this->info['margin-right'] = new HTMLPurifier_AttrDef_CSS_Composite(
+ array(
+ new HTMLPurifier_AttrDef_CSS_Length(),
+ new HTMLPurifier_AttrDef_CSS_Percentage(),
+ new HTMLPurifier_AttrDef_Enum(array('auto'))
+ )
+ );
$this->info['margin'] = new HTMLPurifier_AttrDef_CSS_Multiple($margin);
// non-negative
$padding =
- $this->info['padding-top'] =
- $this->info['padding-bottom'] =
- $this->info['padding-left'] =
- $this->info['padding-right'] = new HTMLPurifier_AttrDef_CSS_Composite(array(
- new HTMLPurifier_AttrDef_CSS_Length('0'),
- new HTMLPurifier_AttrDef_CSS_Percentage(true)
- ));
+ $this->info['padding-top'] =
+ $this->info['padding-bottom'] =
+ $this->info['padding-left'] =
+ $this->info['padding-right'] = new HTMLPurifier_AttrDef_CSS_Composite(
+ array(
+ new HTMLPurifier_AttrDef_CSS_Length('0'),
+ new HTMLPurifier_AttrDef_CSS_Percentage(true)
+ )
+ );
$this->info['padding'] = new HTMLPurifier_AttrDef_CSS_Multiple($padding);
- $this->info['text-indent'] = new HTMLPurifier_AttrDef_CSS_Composite(array(
- new HTMLPurifier_AttrDef_CSS_Length(),
- new HTMLPurifier_AttrDef_CSS_Percentage()
- ));
+ $this->info['text-indent'] = new HTMLPurifier_AttrDef_CSS_Composite(
+ array(
+ new HTMLPurifier_AttrDef_CSS_Length(),
+ new HTMLPurifier_AttrDef_CSS_Percentage()
+ )
+ );
- $trusted_wh = new HTMLPurifier_AttrDef_CSS_Composite(array(
- new HTMLPurifier_AttrDef_CSS_Length('0'),
- new HTMLPurifier_AttrDef_CSS_Percentage(true),
- new HTMLPurifier_AttrDef_Enum(array('auto'))
- ));
+ $trusted_wh = new HTMLPurifier_AttrDef_CSS_Composite(
+ array(
+ new HTMLPurifier_AttrDef_CSS_Length('0'),
+ new HTMLPurifier_AttrDef_CSS_Percentage(true),
+ new HTMLPurifier_AttrDef_Enum(array('auto'))
+ )
+ );
$max = $config->get('CSS.MaxImgLength');
$this->info['width'] =
$this->info['height'] =
$max === null ?
- $trusted_wh :
- new HTMLPurifier_AttrDef_Switch('img',
- // For img tags:
- new HTMLPurifier_AttrDef_CSS_Composite(array(
- new HTMLPurifier_AttrDef_CSS_Length('0', $max),
- new HTMLPurifier_AttrDef_Enum(array('auto'))
- )),
- // For everyone else:
- $trusted_wh
- );
+ $trusted_wh :
+ new HTMLPurifier_AttrDef_Switch(
+ 'img',
+ // For img tags:
+ new HTMLPurifier_AttrDef_CSS_Composite(
+ array(
+ new HTMLPurifier_AttrDef_CSS_Length('0', $max),
+ new HTMLPurifier_AttrDef_Enum(array('auto'))
+ )
+ ),
+ // For everyone else:
+ $trusted_wh
+ );
$this->info['text-decoration'] = new HTMLPurifier_AttrDef_CSS_TextDecoration();
@@ -176,8 +248,23 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
// this could use specialized code
$this->info['font-weight'] = new HTMLPurifier_AttrDef_Enum(
- array('normal', 'bold', 'bolder', 'lighter', '100', '200', '300',
- '400', '500', '600', '700', '800', '900'), false);
+ array(
+ 'normal',
+ 'bold',
+ 'bolder',
+ 'lighter',
+ '100',
+ '200',
+ '300',
+ '400',
+ '500',
+ '600',
+ '700',
+ '800',
+ '900'
+ ),
+ false
+ );
// MUST be called after other font properties, as it references
// a CSSDefinition object
@@ -190,26 +277,44 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
$this->info['border-left'] =
$this->info['border-right'] = new HTMLPurifier_AttrDef_CSS_Border($config);
- $this->info['border-collapse'] = new HTMLPurifier_AttrDef_Enum(array(
- 'collapse', 'separate'));
+ $this->info['border-collapse'] = new HTMLPurifier_AttrDef_Enum(
+ array('collapse', 'separate')
+ );
- $this->info['caption-side'] = new HTMLPurifier_AttrDef_Enum(array(
- 'top', 'bottom'));
+ $this->info['caption-side'] = new HTMLPurifier_AttrDef_Enum(
+ array('top', 'bottom')
+ );
- $this->info['table-layout'] = new HTMLPurifier_AttrDef_Enum(array(
- 'auto', 'fixed'));
+ $this->info['table-layout'] = new HTMLPurifier_AttrDef_Enum(
+ array('auto', 'fixed')
+ );
- $this->info['vertical-align'] = new HTMLPurifier_AttrDef_CSS_Composite(array(
- new HTMLPurifier_AttrDef_Enum(array('baseline', 'sub', 'super',
- 'top', 'text-top', 'middle', 'bottom', 'text-bottom')),
- new HTMLPurifier_AttrDef_CSS_Length(),
- new HTMLPurifier_AttrDef_CSS_Percentage()
- ));
+ $this->info['vertical-align'] = new HTMLPurifier_AttrDef_CSS_Composite(
+ array(
+ new HTMLPurifier_AttrDef_Enum(
+ array(
+ 'baseline',
+ 'sub',
+ 'super',
+ 'top',
+ 'text-top',
+ 'middle',
+ 'bottom',
+ 'text-bottom'
+ )
+ ),
+ new HTMLPurifier_AttrDef_CSS_Length(),
+ new HTMLPurifier_AttrDef_CSS_Percentage()
+ )
+ );
$this->info['border-spacing'] = new HTMLPurifier_AttrDef_CSS_Multiple(new HTMLPurifier_AttrDef_CSS_Length(), 2);
- // partial support
- $this->info['white-space'] = new HTMLPurifier_AttrDef_Enum(array('nowrap'));
+ // These CSS properties don't work on many browsers, but we live
+ // in THE FUTURE!
+ $this->info['white-space'] = new HTMLPurifier_AttrDef_Enum(
+ array('nowrap', 'normal', 'pre', 'pre-wrap', 'pre-line')
+ );
if ($config->get('CSS.Proprietary')) {
$this->doSetupProprietary($config);
@@ -219,6 +324,10 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
$this->doSetupTricky($config);
}
+ if ($config->get('CSS.Trusted')) {
+ $this->doSetupTrusted($config);
+ }
+
$allow_important = $config->get('CSS.AllowImportant');
// wrap all attr-defs with decorator that handles !important
foreach ($this->info as $k => $v) {
@@ -228,64 +337,137 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
$this->setupConfigStuff($config);
}
- protected function doSetupProprietary($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ protected function doSetupProprietary($config)
+ {
// Internet Explorer only scrollbar colors
- $this->info['scrollbar-arrow-color'] = new HTMLPurifier_AttrDef_CSS_Color();
- $this->info['scrollbar-base-color'] = new HTMLPurifier_AttrDef_CSS_Color();
- $this->info['scrollbar-darkshadow-color'] = new HTMLPurifier_AttrDef_CSS_Color();
- $this->info['scrollbar-face-color'] = new HTMLPurifier_AttrDef_CSS_Color();
- $this->info['scrollbar-highlight-color'] = new HTMLPurifier_AttrDef_CSS_Color();
- $this->info['scrollbar-shadow-color'] = new HTMLPurifier_AttrDef_CSS_Color();
+ $this->info['scrollbar-arrow-color'] = new HTMLPurifier_AttrDef_CSS_Color();
+ $this->info['scrollbar-base-color'] = new HTMLPurifier_AttrDef_CSS_Color();
+ $this->info['scrollbar-darkshadow-color'] = new HTMLPurifier_AttrDef_CSS_Color();
+ $this->info['scrollbar-face-color'] = new HTMLPurifier_AttrDef_CSS_Color();
+ $this->info['scrollbar-highlight-color'] = new HTMLPurifier_AttrDef_CSS_Color();
+ $this->info['scrollbar-shadow-color'] = new HTMLPurifier_AttrDef_CSS_Color();
// technically not proprietary, but CSS3, and no one supports it
- $this->info['opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue();
- $this->info['-moz-opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue();
- $this->info['-khtml-opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue();
+ $this->info['opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue();
+ $this->info['-moz-opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue();
+ $this->info['-khtml-opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue();
// only opacity, for now
$this->info['filter'] = new HTMLPurifier_AttrDef_CSS_Filter();
+ // more CSS3
+ $this->info['page-break-after'] =
+ $this->info['page-break-before'] = new HTMLPurifier_AttrDef_Enum(
+ array(
+ 'auto',
+ 'always',
+ 'avoid',
+ 'left',
+ 'right'
+ )
+ );
+ $this->info['page-break-inside'] = new HTMLPurifier_AttrDef_Enum(array('auto', 'avoid'));
+
}
- protected function doSetupTricky($config) {
- $this->info['display'] = new HTMLPurifier_AttrDef_Enum(array(
- 'inline', 'block', 'list-item', 'run-in', 'compact',
- 'marker', 'table', 'inline-table', 'table-row-group',
- 'table-header-group', 'table-footer-group', 'table-row',
- 'table-column-group', 'table-column', 'table-cell', 'table-caption', 'none'
- ));
- $this->info['visibility'] = new HTMLPurifier_AttrDef_Enum(array(
- 'visible', 'hidden', 'collapse'
- ));
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ protected function doSetupTricky($config)
+ {
+ $this->info['display'] = new HTMLPurifier_AttrDef_Enum(
+ array(
+ 'inline',
+ 'block',
+ 'list-item',
+ 'run-in',
+ 'compact',
+ 'marker',
+ 'table',
+ 'inline-block',
+ 'inline-table',
+ 'table-row-group',
+ 'table-header-group',
+ 'table-footer-group',
+ 'table-row',
+ 'table-column-group',
+ 'table-column',
+ 'table-cell',
+ 'table-caption',
+ 'none'
+ )
+ );
+ $this->info['visibility'] = new HTMLPurifier_AttrDef_Enum(
+ array('visible', 'hidden', 'collapse')
+ );
$this->info['overflow'] = new HTMLPurifier_AttrDef_Enum(array('visible', 'hidden', 'auto', 'scroll'));
}
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ protected function doSetupTrusted($config)
+ {
+ $this->info['position'] = new HTMLPurifier_AttrDef_Enum(
+ array('static', 'relative', 'absolute', 'fixed')
+ );
+ $this->info['top'] =
+ $this->info['left'] =
+ $this->info['right'] =
+ $this->info['bottom'] = new HTMLPurifier_AttrDef_CSS_Composite(
+ array(
+ new HTMLPurifier_AttrDef_CSS_Length(),
+ new HTMLPurifier_AttrDef_CSS_Percentage(),
+ new HTMLPurifier_AttrDef_Enum(array('auto')),
+ )
+ );
+ $this->info['z-index'] = new HTMLPurifier_AttrDef_CSS_Composite(
+ array(
+ new HTMLPurifier_AttrDef_Integer(),
+ new HTMLPurifier_AttrDef_Enum(array('auto')),
+ )
+ );
+ }
/**
* Performs extra config-based processing. Based off of
* HTMLPurifier_HTMLDefinition.
+ * @param HTMLPurifier_Config $config
* @todo Refactor duplicate elements into common class (probably using
* composition, not inheritance).
*/
- protected function setupConfigStuff($config) {
-
+ protected function setupConfigStuff($config)
+ {
// setup allowed elements
- $support = "(for information on implementing this, see the ".
- "support forums) ";
- $allowed_attributes = $config->get('CSS.AllowedProperties');
- if ($allowed_attributes !== null) {
+ $support = "(for information on implementing this, see the " .
+ "support forums) ";
+ $allowed_properties = $config->get('CSS.AllowedProperties');
+ if ($allowed_properties !== null) {
foreach ($this->info as $name => $d) {
- if(!isset($allowed_attributes[$name])) unset($this->info[$name]);
- unset($allowed_attributes[$name]);
+ if (!isset($allowed_properties[$name])) {
+ unset($this->info[$name]);
+ }
+ unset($allowed_properties[$name]);
}
// emit errors
- foreach ($allowed_attributes as $name => $d) {
+ foreach ($allowed_properties as $name => $d) {
// :TODO: Is this htmlspecialchars() call really necessary?
$name = htmlspecialchars($name);
trigger_error("Style attribute '$name' is not supported $support", E_USER_WARNING);
}
}
+ $forbidden_properties = $config->get('CSS.ForbiddenProperties');
+ if ($forbidden_properties !== null) {
+ foreach ($this->info as $name => $d) {
+ if (isset($forbidden_properties[$name])) {
+ unset($this->info[$name]);
+ }
+ }
+ }
}
}
diff --git a/library/HTMLPurifier/ChildDef.php b/library/HTMLPurifier/ChildDef.php
index c5d5216da..8eb17b82e 100644
--- a/library/HTMLPurifier/ChildDef.php
+++ b/library/HTMLPurifier/ChildDef.php
@@ -1,48 +1,52 @@
<?php
/**
- * Defines allowed child nodes and validates tokens against it.
+ * Defines allowed child nodes and validates nodes against it.
*/
abstract class HTMLPurifier_ChildDef
{
/**
* Type of child definition, usually right-most part of class name lowercase.
* Used occasionally in terms of context.
+ * @type string
*/
public $type;
/**
- * Bool that indicates whether or not an empty array of children is okay
+ * Indicates whether or not an empty array of children is okay.
*
* This is necessary for redundant checking when changes affecting
* a child node may cause a parent node to now be disallowed.
+ * @type bool
*/
public $allow_empty;
/**
- * Lookup array of all elements that this definition could possibly allow
+ * Lookup array of all elements that this definition could possibly allow.
+ * @type array
*/
public $elements = array();
/**
* Get lookup of tag names that should not close this element automatically.
* All other elements will do so.
+ * @param HTMLPurifier_Config $config HTMLPurifier_Config object
+ * @return array
*/
- public function getAllowedElements($config) {
+ public function getAllowedElements($config)
+ {
return $this->elements;
}
/**
* Validates nodes according to definition and returns modification.
*
- * @param $tokens_of_children Array of HTMLPurifier_Token
- * @param $config HTMLPurifier_Config object
- * @param $context HTMLPurifier_Context object
- * @return bool true to leave nodes as is
- * @return bool false to remove parent node
- * @return array of replacement child tokens
+ * @param HTMLPurifier_Node[] $children Array of HTMLPurifier_Node
+ * @param HTMLPurifier_Config $config HTMLPurifier_Config object
+ * @param HTMLPurifier_Context $context HTMLPurifier_Context object
+ * @return bool|array true to leave nodes as is, false to remove parent node, array of replacement children
*/
- abstract public function validateChildren($tokens_of_children, $config, $context);
+ abstract public function validateChildren($children, $config, $context);
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ChildDef/Chameleon.php b/library/HTMLPurifier/ChildDef/Chameleon.php
index 15c364ee3..7439be26b 100644
--- a/library/HTMLPurifier/ChildDef/Chameleon.php
+++ b/library/HTMLPurifier/ChildDef/Chameleon.php
@@ -14,33 +14,52 @@ class HTMLPurifier_ChildDef_Chameleon extends HTMLPurifier_ChildDef
/**
* Instance of the definition object to use when inline. Usually stricter.
+ * @type HTMLPurifier_ChildDef_Optional
*/
public $inline;
/**
* Instance of the definition object to use when block.
+ * @type HTMLPurifier_ChildDef_Optional
*/
public $block;
+ /**
+ * @type string
+ */
public $type = 'chameleon';
/**
- * @param $inline List of elements to allow when inline.
- * @param $block List of elements to allow when block.
+ * @param array $inline List of elements to allow when inline.
+ * @param array $block List of elements to allow when block.
*/
- public function __construct($inline, $block) {
+ public function __construct($inline, $block)
+ {
$this->inline = new HTMLPurifier_ChildDef_Optional($inline);
- $this->block = new HTMLPurifier_ChildDef_Optional($block);
+ $this->block = new HTMLPurifier_ChildDef_Optional($block);
$this->elements = $this->block->elements;
}
- public function validateChildren($tokens_of_children, $config, $context) {
+ /**
+ * @param HTMLPurifier_Node[] $children
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool
+ */
+ public function validateChildren($children, $config, $context)
+ {
if ($context->get('IsInline') === false) {
return $this->block->validateChildren(
- $tokens_of_children, $config, $context);
+ $children,
+ $config,
+ $context
+ );
} else {
return $this->inline->validateChildren(
- $tokens_of_children, $config, $context);
+ $children,
+ $config,
+ $context
+ );
}
}
}
diff --git a/library/HTMLPurifier/ChildDef/Custom.php b/library/HTMLPurifier/ChildDef/Custom.php
index b68047b4b..128132e96 100644
--- a/library/HTMLPurifier/ChildDef/Custom.php
+++ b/library/HTMLPurifier/ChildDef/Custom.php
@@ -8,28 +8,42 @@
*/
class HTMLPurifier_ChildDef_Custom extends HTMLPurifier_ChildDef
{
+ /**
+ * @type string
+ */
public $type = 'custom';
+
+ /**
+ * @type bool
+ */
public $allow_empty = false;
+
/**
- * Allowed child pattern as defined by the DTD
+ * Allowed child pattern as defined by the DTD.
+ * @type string
*/
public $dtd_regex;
+
/**
- * PCRE regex derived from $dtd_regex
- * @private
+ * PCRE regex derived from $dtd_regex.
+ * @type string
*/
private $_pcre_regex;
+
/**
* @param $dtd_regex Allowed child pattern from the DTD
*/
- public function __construct($dtd_regex) {
+ public function __construct($dtd_regex)
+ {
$this->dtd_regex = $dtd_regex;
$this->_compileRegex();
}
+
/**
* Compiles the PCRE regex from a DTD regex ($dtd_regex to $_pcre_regex)
*/
- protected function _compileRegex() {
+ protected function _compileRegex()
+ {
$raw = str_replace(' ', '', $this->dtd_regex);
if ($raw{0} != '(') {
$raw = "($raw)";
@@ -57,33 +71,31 @@ class HTMLPurifier_ChildDef_Custom extends HTMLPurifier_ChildDef
$this->_pcre_regex = $reg;
}
- public function validateChildren($tokens_of_children, $config, $context) {
+
+ /**
+ * @param HTMLPurifier_Node[] $children
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool
+ */
+ public function validateChildren($children, $config, $context)
+ {
$list_of_children = '';
$nesting = 0; // depth into the nest
- foreach ($tokens_of_children as $token) {
- if (!empty($token->is_whitespace)) continue;
-
- $is_child = ($nesting == 0); // direct
-
- if ($token instanceof HTMLPurifier_Token_Start) {
- $nesting++;
- } elseif ($token instanceof HTMLPurifier_Token_End) {
- $nesting--;
- }
-
- if ($is_child) {
- $list_of_children .= $token->name . ',';
+ foreach ($children as $node) {
+ if (!empty($node->is_whitespace)) {
+ continue;
}
+ $list_of_children .= $node->name . ',';
}
// add leading comma to deal with stray comma declarations
$list_of_children = ',' . rtrim($list_of_children, ',');
$okay =
preg_match(
- '/^,?'.$this->_pcre_regex.'$/',
+ '/^,?' . $this->_pcre_regex . '$/',
$list_of_children
);
-
- return (bool) $okay;
+ return (bool)$okay;
}
}
diff --git a/library/HTMLPurifier/ChildDef/Empty.php b/library/HTMLPurifier/ChildDef/Empty.php
index 13171f665..a8a6cbdd2 100644
--- a/library/HTMLPurifier/ChildDef/Empty.php
+++ b/library/HTMLPurifier/ChildDef/Empty.php
@@ -9,10 +9,28 @@
*/
class HTMLPurifier_ChildDef_Empty extends HTMLPurifier_ChildDef
{
+ /**
+ * @type bool
+ */
public $allow_empty = true;
+
+ /**
+ * @type string
+ */
public $type = 'empty';
- public function __construct() {}
- public function validateChildren($tokens_of_children, $config, $context) {
+
+ public function __construct()
+ {
+ }
+
+ /**
+ * @param HTMLPurifier_Node[] $children
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function validateChildren($children, $config, $context)
+ {
return array();
}
}
diff --git a/library/HTMLPurifier/ChildDef/List.php b/library/HTMLPurifier/ChildDef/List.php
new file mode 100644
index 000000000..891b9f6f5
--- /dev/null
+++ b/library/HTMLPurifier/ChildDef/List.php
@@ -0,0 +1,86 @@
+<?php
+
+/**
+ * Definition for list containers ul and ol.
+ *
+ * What does this do? The big thing is to handle ol/ul at the top
+ * level of list nodes, which should be handled specially by /folding/
+ * them into the previous list node. We generally shouldn't ever
+ * see other disallowed elements, because the autoclose behavior
+ * in MakeWellFormed handles it.
+ */
+class HTMLPurifier_ChildDef_List extends HTMLPurifier_ChildDef
+{
+ /**
+ * @type string
+ */
+ public $type = 'list';
+ /**
+ * @type array
+ */
+ // lying a little bit, so that we can handle ul and ol ourselves
+ // XXX: This whole business with 'wrap' is all a bit unsatisfactory
+ public $elements = array('li' => true, 'ul' => true, 'ol' => true);
+
+ /**
+ * @param array $children
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function validateChildren($children, $config, $context)
+ {
+ // Flag for subclasses
+ $this->whitespace = false;
+
+ // if there are no tokens, delete parent node
+ if (empty($children)) {
+ return false;
+ }
+
+ // the new set of children
+ $result = array();
+
+ // a little sanity check to make sure it's not ALL whitespace
+ $all_whitespace = true;
+
+ $current_li = false;
+
+ foreach ($children as $node) {
+ if (!empty($node->is_whitespace)) {
+ $result[] = $node;
+ continue;
+ }
+ $all_whitespace = false; // phew, we're not talking about whitespace
+
+ if ($node->name === 'li') {
+ // good
+ $current_li = $node;
+ $result[] = $node;
+ } else {
+ // we want to tuck this into the previous li
+ // Invariant: we expect the node to be ol/ul
+ // ToDo: Make this more robust in the case of not ol/ul
+ // by distinguishing between existing li and li created
+ // to handle non-list elements; non-list elements should
+ // not be appended to an existing li; only li created
+ // for non-list. This distinction is not currently made.
+ if ($current_li === false) {
+ $current_li = new HTMLPurifier_Node_Element('li');
+ $result[] = $current_li;
+ }
+ $current_li->children[] = $node;
+ $current_li->empty = false; // XXX fascinating! Check for this error elsewhere ToDo
+ }
+ }
+ if (empty($result)) {
+ return false;
+ }
+ if ($all_whitespace) {
+ return false;
+ }
+ return $result;
+ }
+}
+
+// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ChildDef/Optional.php b/library/HTMLPurifier/ChildDef/Optional.php
index 32bcb9898..b9468063b 100644
--- a/library/HTMLPurifier/ChildDef/Optional.php
+++ b/library/HTMLPurifier/ChildDef/Optional.php
@@ -9,15 +9,34 @@
*/
class HTMLPurifier_ChildDef_Optional extends HTMLPurifier_ChildDef_Required
{
+ /**
+ * @type bool
+ */
public $allow_empty = true;
+
+ /**
+ * @type string
+ */
public $type = 'optional';
- public function validateChildren($tokens_of_children, $config, $context) {
- $result = parent::validateChildren($tokens_of_children, $config, $context);
- // we assume that $tokens_of_children is not modified
+
+ /**
+ * @param array $children
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function validateChildren($children, $config, $context)
+ {
+ $result = parent::validateChildren($children, $config, $context);
+ // we assume that $children is not modified
if ($result === false) {
- if (empty($tokens_of_children)) return true;
- elseif ($this->whitespace) return $tokens_of_children;
- else return array();
+ if (empty($children)) {
+ return true;
+ } elseif ($this->whitespace) {
+ return $children;
+ } else {
+ return array();
+ }
}
return $result;
}
diff --git a/library/HTMLPurifier/ChildDef/Required.php b/library/HTMLPurifier/ChildDef/Required.php
index 4889f249b..0d1c8f5f3 100644
--- a/library/HTMLPurifier/ChildDef/Required.php
+++ b/library/HTMLPurifier/ChildDef/Required.php
@@ -7,17 +7,21 @@ class HTMLPurifier_ChildDef_Required extends HTMLPurifier_ChildDef
{
/**
* Lookup table of allowed elements.
- * @public
+ * @type array
*/
public $elements = array();
+
/**
* Whether or not the last passed node was all whitespace.
+ * @type bool
*/
protected $whitespace = false;
+
/**
- * @param $elements List of allowed element names (lowercase).
+ * @param array|string $elements List of allowed element names (lowercase).
*/
- public function __construct($elements) {
+ public function __construct($elements)
+ {
if (is_string($elements)) {
$elements = str_replace(' ', '', $elements);
$elements = explode('|', $elements);
@@ -27,29 +31,43 @@ class HTMLPurifier_ChildDef_Required extends HTMLPurifier_ChildDef
$elements = array_flip($elements);
foreach ($elements as $i => $x) {
$elements[$i] = true;
- if (empty($i)) unset($elements[$i]); // remove blank
+ if (empty($i)) {
+ unset($elements[$i]);
+ } // remove blank
}
}
$this->elements = $elements;
}
+
+ /**
+ * @type bool
+ */
public $allow_empty = false;
+
+ /**
+ * @type string
+ */
public $type = 'required';
- public function validateChildren($tokens_of_children, $config, $context) {
+
+ /**
+ * @param array $children
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function validateChildren($children, $config, $context)
+ {
// Flag for subclasses
$this->whitespace = false;
// if there are no tokens, delete parent node
- if (empty($tokens_of_children)) return false;
+ if (empty($children)) {
+ return false;
+ }
// the new set of children
$result = array();
- // current depth into the nest
- $nesting = 0;
-
- // whether or not we're deleting a node
- $is_deleting = false;
-
// whether or not parsed character data is allowed
// this controls whether or not we silently drop a tag
// or generate escaped HTML from it
@@ -58,58 +76,41 @@ class HTMLPurifier_ChildDef_Required extends HTMLPurifier_ChildDef
// a little sanity check to make sure it's not ALL whitespace
$all_whitespace = true;
- // some configuration
- $escape_invalid_children = $config->get('Core.EscapeInvalidChildren');
-
- // generator
- $gen = new HTMLPurifier_Generator($config, $context);
-
- foreach ($tokens_of_children as $token) {
- if (!empty($token->is_whitespace)) {
- $result[] = $token;
+ $stack = array_reverse($children);
+ while (!empty($stack)) {
+ $node = array_pop($stack);
+ if (!empty($node->is_whitespace)) {
+ $result[] = $node;
continue;
}
$all_whitespace = false; // phew, we're not talking about whitespace
- $is_child = ($nesting == 0);
-
- if ($token instanceof HTMLPurifier_Token_Start) {
- $nesting++;
- } elseif ($token instanceof HTMLPurifier_Token_End) {
- $nesting--;
- }
-
- if ($is_child) {
- $is_deleting = false;
- if (!isset($this->elements[$token->name])) {
- $is_deleting = true;
- if ($pcdata_allowed && $token instanceof HTMLPurifier_Token_Text) {
- $result[] = $token;
- } elseif ($pcdata_allowed && $escape_invalid_children) {
- $result[] = new HTMLPurifier_Token_Text(
- $gen->generateFromToken($token)
- );
+ if (!isset($this->elements[$node->name])) {
+ // special case text
+ // XXX One of these ought to be redundant or something
+ if ($pcdata_allowed && $node instanceof HTMLPurifier_Node_Text) {
+ $result[] = $node;
+ continue;
+ }
+ // spill the child contents in
+ // ToDo: Make configurable
+ if ($node instanceof HTMLPurifier_Node_Element) {
+ for ($i = count($node->children) - 1; $i >= 0; $i--) {
+ $stack[] = $node->children[$i];
}
continue;
}
+ continue;
}
- if (!$is_deleting || ($pcdata_allowed && $token instanceof HTMLPurifier_Token_Text)) {
- $result[] = $token;
- } elseif ($pcdata_allowed && $escape_invalid_children) {
- $result[] =
- new HTMLPurifier_Token_Text(
- $gen->generateFromToken($token)
- );
- } else {
- // drop silently
- }
+ $result[] = $node;
+ }
+ if (empty($result)) {
+ return false;
}
- if (empty($result)) return false;
if ($all_whitespace) {
$this->whitespace = true;
return false;
}
- if ($tokens_of_children == $result) return true;
return $result;
}
}
diff --git a/library/HTMLPurifier/ChildDef/StrictBlockquote.php b/library/HTMLPurifier/ChildDef/StrictBlockquote.php
index dfae8a6e5..3270a46e1 100644
--- a/library/HTMLPurifier/ChildDef/StrictBlockquote.php
+++ b/library/HTMLPurifier/ChildDef/StrictBlockquote.php
@@ -5,75 +5,97 @@
*/
class HTMLPurifier_ChildDef_StrictBlockquote extends HTMLPurifier_ChildDef_Required
{
+ /**
+ * @type array
+ */
protected $real_elements;
+
+ /**
+ * @type array
+ */
protected $fake_elements;
+
+ /**
+ * @type bool
+ */
public $allow_empty = true;
+
+ /**
+ * @type string
+ */
public $type = 'strictblockquote';
+
+ /**
+ * @type bool
+ */
protected $init = false;
/**
+ * @param HTMLPurifier_Config $config
+ * @return array
* @note We don't want MakeWellFormed to auto-close inline elements since
* they might be allowed.
*/
- public function getAllowedElements($config) {
+ public function getAllowedElements($config)
+ {
$this->init($config);
return $this->fake_elements;
}
- public function validateChildren($tokens_of_children, $config, $context) {
-
+ /**
+ * @param array $children
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function validateChildren($children, $config, $context)
+ {
$this->init($config);
// trick the parent class into thinking it allows more
$this->elements = $this->fake_elements;
- $result = parent::validateChildren($tokens_of_children, $config, $context);
+ $result = parent::validateChildren($children, $config, $context);
$this->elements = $this->real_elements;
- if ($result === false) return array();
- if ($result === true) $result = $tokens_of_children;
+ if ($result === false) {
+ return array();
+ }
+ if ($result === true) {
+ $result = $children;
+ }
$def = $config->getHTMLDefinition();
- $block_wrap_start = new HTMLPurifier_Token_Start($def->info_block_wrapper);
- $block_wrap_end = new HTMLPurifier_Token_End( $def->info_block_wrapper);
- $is_inline = false;
- $depth = 0;
+ $block_wrap_name = $def->info_block_wrapper;
+ $block_wrap = false;
$ret = array();
- // assuming that there are no comment tokens
- foreach ($result as $i => $token) {
- $token = $result[$i];
- // ifs are nested for readability
- if (!$is_inline) {
- if (!$depth) {
- if (
- ($token instanceof HTMLPurifier_Token_Text && !$token->is_whitespace) ||
- (!$token instanceof HTMLPurifier_Token_Text && !isset($this->elements[$token->name]))
- ) {
- $is_inline = true;
- $ret[] = $block_wrap_start;
- }
+ foreach ($result as $node) {
+ if ($block_wrap === false) {
+ if (($node instanceof HTMLPurifier_Node_Text && !$node->is_whitespace) ||
+ ($node instanceof HTMLPurifier_Node_Element && !isset($this->elements[$node->name]))) {
+ $block_wrap = new HTMLPurifier_Node_Element($def->info_block_wrapper);
+ $ret[] = $block_wrap;
}
} else {
- if (!$depth) {
- // starting tokens have been inline text / empty
- if ($token instanceof HTMLPurifier_Token_Start || $token instanceof HTMLPurifier_Token_Empty) {
- if (isset($this->elements[$token->name])) {
- // ended
- $ret[] = $block_wrap_end;
- $is_inline = false;
- }
- }
+ if ($node instanceof HTMLPurifier_Node_Element && isset($this->elements[$node->name])) {
+ $block_wrap = false;
+
}
}
- $ret[] = $token;
- if ($token instanceof HTMLPurifier_Token_Start) $depth++;
- if ($token instanceof HTMLPurifier_Token_End) $depth--;
+ if ($block_wrap) {
+ $block_wrap->children[] = $node;
+ } else {
+ $ret[] = $node;
+ }
}
- if ($is_inline) $ret[] = $block_wrap_end;
return $ret;
}
- private function init($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ private function init($config)
+ {
if (!$this->init) {
$def = $config->getHTMLDefinition();
// allow all inline elements
diff --git a/library/HTMLPurifier/ChildDef/Table.php b/library/HTMLPurifier/ChildDef/Table.php
index 34f0227dd..3e4a0f218 100644
--- a/library/HTMLPurifier/ChildDef/Table.php
+++ b/library/HTMLPurifier/ChildDef/Table.php
@@ -1,140 +1,222 @@
<?php
/**
- * Definition for tables
+ * Definition for tables. The general idea is to extract out all of the
+ * essential bits, and then reconstruct it later.
+ *
+ * This is a bit confusing, because the DTDs and the W3C
+ * validators seem to disagree on the appropriate definition. The
+ * DTD claims:
+ *
+ * (CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)
+ *
+ * But actually, the HTML4 spec then has this to say:
+ *
+ * The TBODY start tag is always required except when the table
+ * contains only one table body and no table head or foot sections.
+ * The TBODY end tag may always be safely omitted.
+ *
+ * So the DTD is kind of wrong. The validator is, unfortunately, kind
+ * of on crack.
+ *
+ * The definition changed again in XHTML1.1; and in my opinion, this
+ * formulation makes the most sense.
+ *
+ * caption?, ( col* | colgroup* ), (( thead?, tfoot?, tbody+ ) | ( tr+ ))
+ *
+ * Essentially, we have two modes: thead/tfoot/tbody mode, and tr mode.
+ * If we encounter a thead, tfoot or tbody, we are placed in the former
+ * mode, and we *must* wrap any stray tr segments with a tbody. But if
+ * we don't run into any of them, just have tr tags is OK.
*/
class HTMLPurifier_ChildDef_Table extends HTMLPurifier_ChildDef
{
+ /**
+ * @type bool
+ */
public $allow_empty = false;
+
+ /**
+ * @type string
+ */
public $type = 'table';
- public $elements = array('tr' => true, 'tbody' => true, 'thead' => true,
- 'tfoot' => true, 'caption' => true, 'colgroup' => true, 'col' => true);
- public function __construct() {}
- public function validateChildren($tokens_of_children, $config, $context) {
- if (empty($tokens_of_children)) return false;
- // this ensures that the loop gets run one last time before closing
- // up. It's a little bit of a hack, but it works! Just make sure you
- // get rid of the token later.
- $tokens_of_children[] = false;
+ /**
+ * @type array
+ */
+ public $elements = array(
+ 'tr' => true,
+ 'tbody' => true,
+ 'thead' => true,
+ 'tfoot' => true,
+ 'caption' => true,
+ 'colgroup' => true,
+ 'col' => true
+ );
+
+ public function __construct()
+ {
+ }
+
+ /**
+ * @param array $children
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function validateChildren($children, $config, $context)
+ {
+ if (empty($children)) {
+ return false;
+ }
// only one of these elements is allowed in a table
$caption = false;
- $thead = false;
- $tfoot = false;
+ $thead = false;
+ $tfoot = false;
+
+ // whitespace
+ $initial_ws = array();
+ $after_caption_ws = array();
+ $after_thead_ws = array();
+ $after_tfoot_ws = array();
// as many of these as you want
- $cols = array();
+ $cols = array();
$content = array();
- $nesting = 0; // current depth so we can determine nodes
- $is_collecting = false; // are we globbing together tokens to package
- // into one of the collectors?
- $collection = array(); // collected nodes
- $tag_index = 0; // the first node might be whitespace,
- // so this tells us where the start tag is
-
- foreach ($tokens_of_children as $token) {
- $is_child = ($nesting == 0);
-
- if ($token === false) {
- // terminating sequence started
- } elseif ($token instanceof HTMLPurifier_Token_Start) {
- $nesting++;
- } elseif ($token instanceof HTMLPurifier_Token_End) {
- $nesting--;
- }
+ $tbody_mode = false; // if true, then we need to wrap any stray
+ // <tr>s with a <tbody>.
- // handle node collection
- if ($is_collecting) {
- if ($is_child) {
- // okay, let's stash the tokens away
- // first token tells us the type of the collection
- switch ($collection[$tag_index]->name) {
- case 'tr':
- case 'tbody':
- $content[] = $collection;
- break;
- case 'caption':
- if ($caption !== false) break;
- $caption = $collection;
- break;
- case 'thead':
- case 'tfoot':
- // access the appropriate variable, $thead or $tfoot
- $var = $collection[$tag_index]->name;
- if ($$var === false) {
- $$var = $collection;
- } else {
- // transmutate the first and less entries into
- // tbody tags, and then put into content
- $collection[$tag_index]->name = 'tbody';
- $collection[count($collection)-1]->name = 'tbody';
- $content[] = $collection;
- }
- break;
- case 'colgroup':
- $cols[] = $collection;
- break;
- }
- $collection = array();
- $is_collecting = false;
- $tag_index = 0;
+ $ws_accum =& $initial_ws;
+
+ foreach ($children as $node) {
+ if ($node instanceof HTMLPurifier_Node_Comment) {
+ $ws_accum[] = $node;
+ continue;
+ }
+ switch ($node->name) {
+ case 'tbody':
+ $tbody_mode = true;
+ // fall through
+ case 'tr':
+ $content[] = $node;
+ $ws_accum =& $content;
+ break;
+ case 'caption':
+ // there can only be one caption!
+ if ($caption !== false) break;
+ $caption = $node;
+ $ws_accum =& $after_caption_ws;
+ break;
+ case 'thead':
+ $tbody_mode = true;
+ // XXX This breaks rendering properties with
+ // Firefox, which never floats a <thead> to
+ // the top. Ever. (Our scheme will float the
+ // first <thead> to the top.) So maybe
+ // <thead>s that are not first should be
+ // turned into <tbody>? Very tricky, indeed.
+ if ($thead === false) {
+ $thead = $node;
+ $ws_accum =& $after_thead_ws;
} else {
- // add the node to the collection
- $collection[] = $token;
+ // Oops, there's a second one! What
+ // should we do? Current behavior is to
+ // transmutate the first and last entries into
+ // tbody tags, and then put into content.
+ // Maybe a better idea is to *attach
+ // it* to the existing thead or tfoot?
+ // We don't do this, because Firefox
+ // doesn't float an extra tfoot to the
+ // bottom like it does for the first one.
+ $node->name = 'tbody';
+ $content[] = $node;
+ $ws_accum =& $content;
}
- }
-
- // terminate
- if ($token === false) break;
-
- if ($is_child) {
- // determine what we're dealing with
- if ($token->name == 'col') {
- // the only empty tag in the possie, we can handle it
- // immediately
- $cols[] = array_merge($collection, array($token));
- $collection = array();
- $tag_index = 0;
- continue;
+ break;
+ case 'tfoot':
+ // see above for some aveats
+ $tbody_mode = true;
+ if ($tfoot === false) {
+ $tfoot = $node;
+ $ws_accum =& $after_tfoot_ws;
+ } else {
+ $node->name = 'tbody';
+ $content[] = $node;
+ $ws_accum =& $content;
}
- switch($token->name) {
- case 'caption':
- case 'colgroup':
- case 'thead':
- case 'tfoot':
- case 'tbody':
- case 'tr':
- $is_collecting = true;
- $collection[] = $token;
- continue;
- default:
- if (!empty($token->is_whitespace)) {
- $collection[] = $token;
- $tag_index++;
- }
- continue;
+ break;
+ case 'colgroup':
+ case 'col':
+ $cols[] = $node;
+ $ws_accum =& $cols;
+ break;
+ case '#PCDATA':
+ // How is whitespace handled? We treat is as sticky to
+ // the *end* of the previous element. So all of the
+ // nonsense we have worked on is to keep things
+ // together.
+ if (!empty($node->is_whitespace)) {
+ $ws_accum[] = $node;
}
+ break;
}
}
- if (empty($content)) return false;
-
- $ret = array();
- if ($caption !== false) $ret = array_merge($ret, $caption);
- if ($cols !== false) foreach ($cols as $token_array) $ret = array_merge($ret, $token_array);
- if ($thead !== false) $ret = array_merge($ret, $thead);
- if ($tfoot !== false) $ret = array_merge($ret, $tfoot);
- foreach ($content as $token_array) $ret = array_merge($ret, $token_array);
- if (!empty($collection) && $is_collecting == false){
- // grab the trailing space
- $ret = array_merge($ret, $collection);
+ if (empty($content)) {
+ return false;
+ }
+
+ $ret = $initial_ws;
+ if ($caption !== false) {
+ $ret[] = $caption;
+ $ret = array_merge($ret, $after_caption_ws);
+ }
+ if ($cols !== false) {
+ $ret = array_merge($ret, $cols);
+ }
+ if ($thead !== false) {
+ $ret[] = $thead;
+ $ret = array_merge($ret, $after_thead_ws);
+ }
+ if ($tfoot !== false) {
+ $ret[] = $tfoot;
+ $ret = array_merge($ret, $after_tfoot_ws);
}
- array_pop($tokens_of_children); // remove phantom token
+ if ($tbody_mode) {
+ // we have to shuffle tr into tbody
+ $current_tr_tbody = null;
+
+ foreach($content as $node) {
+ switch ($node->name) {
+ case 'tbody':
+ $current_tr_tbody = null;
+ $ret[] = $node;
+ break;
+ case 'tr':
+ if ($current_tr_tbody === null) {
+ $current_tr_tbody = new HTMLPurifier_Node_Element('tbody');
+ $ret[] = $current_tr_tbody;
+ }
+ $current_tr_tbody->children[] = $node;
+ break;
+ case '#PCDATA':
+ assert($node->is_whitespace);
+ if ($current_tr_tbody === null) {
+ $ret[] = $node;
+ } else {
+ $current_tr_tbody->children[] = $node;
+ }
+ break;
+ }
+ }
+ } else {
+ $ret = array_merge($ret, $content);
+ }
- return ($ret === $tokens_of_children) ? true : $ret;
+ return $ret;
}
}
diff --git a/library/HTMLPurifier/Config.php b/library/HTMLPurifier/Config.php
index 2a334b0d8..7ada59b94 100644
--- a/library/HTMLPurifier/Config.php
+++ b/library/HTMLPurifier/Config.php
@@ -19,77 +19,92 @@ class HTMLPurifier_Config
/**
* HTML Purifier's version
+ * @type string
*/
- public $version = '4.1.1';
+ public $version = '4.6.0';
/**
- * Bool indicator whether or not to automatically finalize
- * the object if a read operation is done
+ * Whether or not to automatically finalize
+ * the object if a read operation is done.
+ * @type bool
*/
public $autoFinalize = true;
// protected member variables
/**
- * Namespace indexed array of serials for specific namespaces (see
- * getSerial() for more info).
+ * Namespace indexed array of serials for specific namespaces.
+ * @see getSerial() for more info.
+ * @type string[]
*/
protected $serials = array();
/**
- * Serial for entire configuration object
+ * Serial for entire configuration object.
+ * @type string
*/
protected $serial;
/**
- * Parser for variables
+ * Parser for variables.
+ * @type HTMLPurifier_VarParser_Flexible
*/
- protected $parser;
+ protected $parser = null;
/**
- * Reference HTMLPurifier_ConfigSchema for value checking
+ * Reference HTMLPurifier_ConfigSchema for value checking.
+ * @type HTMLPurifier_ConfigSchema
* @note This is public for introspective purposes. Please don't
* abuse!
*/
public $def;
/**
- * Indexed array of definitions
+ * Indexed array of definitions.
+ * @type HTMLPurifier_Definition[]
*/
protected $definitions;
/**
- * Bool indicator whether or not config is finalized
+ * Whether or not config is finalized.
+ * @type bool
*/
protected $finalized = false;
/**
* Property list containing configuration directives.
+ * @type array
*/
protected $plist;
/**
- * Whether or not a set is taking place due to an
- * alias lookup.
+ * Whether or not a set is taking place due to an alias lookup.
+ * @type bool
*/
private $aliasMode;
/**
- * Set to false if you do not want line and file numbers in errors
- * (useful when unit testing)
+ * Set to false if you do not want line and file numbers in errors.
+ * (useful when unit testing). This will also compress some errors
+ * and exceptions.
+ * @type bool
*/
public $chatty = true;
/**
* Current lock; only gets to this namespace are allowed.
+ * @type string
*/
private $lock;
/**
- * @param $definition HTMLPurifier_ConfigSchema that defines what directives
- * are allowed.
+ * Constructor
+ * @param HTMLPurifier_ConfigSchema $definition ConfigSchema that defines
+ * what directives are allowed.
+ * @param HTMLPurifier_PropertyList $parent
*/
- public function __construct($definition, $parent = null) {
+ public function __construct($definition, $parent = null)
+ {
$parent = $parent ? $parent : $definition->defaultPlist;
$this->plist = new HTMLPurifier_PropertyList($parent);
$this->def = $definition; // keep a copy around for checking
@@ -102,10 +117,11 @@ class HTMLPurifier_Config
* object. Can be: a HTMLPurifier_Config() object,
* an array of directives based on loadArray(),
* or a string filename of an ini file.
- * @param HTMLPurifier_ConfigSchema Schema object
- * @return Configured HTMLPurifier_Config object
+ * @param HTMLPurifier_ConfigSchema $schema Schema object
+ * @return HTMLPurifier_Config Configured object
*/
- public static function create($config, $schema = null) {
+ public static function create($config, $schema = null)
+ {
if ($config instanceof HTMLPurifier_Config) {
// pass-through
return $config;
@@ -115,57 +131,79 @@ class HTMLPurifier_Config
} else {
$ret = new HTMLPurifier_Config($schema);
}
- if (is_string($config)) $ret->loadIni($config);
- elseif (is_array($config)) $ret->loadArray($config);
+ if (is_string($config)) {
+ $ret->loadIni($config);
+ } elseif (is_array($config)) $ret->loadArray($config);
return $ret;
}
/**
* Creates a new config object that inherits from a previous one.
- * @param HTMLPurifier_Config $config Configuration object to inherit
- * from.
+ * @param HTMLPurifier_Config $config Configuration object to inherit from.
* @return HTMLPurifier_Config object with $config as its parent.
*/
- public static function inherit(HTMLPurifier_Config $config) {
+ public static function inherit(HTMLPurifier_Config $config)
+ {
return new HTMLPurifier_Config($config->def, $config->plist);
}
/**
* Convenience constructor that creates a default configuration object.
- * @return Default HTMLPurifier_Config object.
+ * @return HTMLPurifier_Config default object.
*/
- public static function createDefault() {
+ public static function createDefault()
+ {
$definition = HTMLPurifier_ConfigSchema::instance();
$config = new HTMLPurifier_Config($definition);
return $config;
}
/**
- * Retreives a value from the configuration.
- * @param $key String key
+ * Retrieves a value from the configuration.
+ *
+ * @param string $key String key
+ * @param mixed $a
+ *
+ * @return mixed
*/
- public function get($key, $a = null) {
+ public function get($key, $a = null)
+ {
if ($a !== null) {
- $this->triggerError("Using deprecated API: use \$config->get('$key.$a') instead", E_USER_WARNING);
+ $this->triggerError(
+ "Using deprecated API: use \$config->get('$key.$a') instead",
+ E_USER_WARNING
+ );
$key = "$key.$a";
}
- if (!$this->finalized) $this->autoFinalize();
+ if (!$this->finalized) {
+ $this->autoFinalize();
+ }
if (!isset($this->def->info[$key])) {
// can't add % due to SimpleTest bug
- $this->triggerError('Cannot retrieve value of undefined directive ' . htmlspecialchars($key),
- E_USER_WARNING);
+ $this->triggerError(
+ 'Cannot retrieve value of undefined directive ' . htmlspecialchars($key),
+ E_USER_WARNING
+ );
return;
}
if (isset($this->def->info[$key]->isAlias)) {
$d = $this->def->info[$key];
- $this->triggerError('Cannot get value from aliased directive, use real name ' . $d->key,
- E_USER_ERROR);
+ $this->triggerError(
+ 'Cannot get value from aliased directive, use real name ' . $d->key,
+ E_USER_ERROR
+ );
return;
}
if ($this->lock) {
list($ns) = explode('.', $key);
if ($ns !== $this->lock) {
- $this->triggerError('Cannot get value of namespace ' . $ns . ' when lock for ' . $this->lock . ' is active, this probably indicates a Definition setup method is accessing directives that are not within its namespace', E_USER_ERROR);
+ $this->triggerError(
+ 'Cannot get value of namespace ' . $ns . ' when lock for ' .
+ $this->lock .
+ ' is active, this probably indicates a Definition setup method ' .
+ 'is accessing directives that are not within its namespace',
+ E_USER_ERROR
+ );
return;
}
}
@@ -173,53 +211,73 @@ class HTMLPurifier_Config
}
/**
- * Retreives an array of directives to values from a given namespace
- * @param $namespace String namespace
+ * Retrieves an array of directives to values from a given namespace
+ *
+ * @param string $namespace String namespace
+ *
+ * @return array
*/
- public function getBatch($namespace) {
- if (!$this->finalized) $this->autoFinalize();
+ public function getBatch($namespace)
+ {
+ if (!$this->finalized) {
+ $this->autoFinalize();
+ }
$full = $this->getAll();
if (!isset($full[$namespace])) {
- $this->triggerError('Cannot retrieve undefined namespace ' . htmlspecialchars($namespace),
- E_USER_WARNING);
+ $this->triggerError(
+ 'Cannot retrieve undefined namespace ' .
+ htmlspecialchars($namespace),
+ E_USER_WARNING
+ );
return;
}
return $full[$namespace];
}
/**
- * Returns a md5 signature of a segment of the configuration object
+ * Returns a SHA-1 signature of a segment of the configuration object
* that uniquely identifies that particular configuration
+ *
+ * @param string $namespace Namespace to get serial for
+ *
+ * @return string
* @note Revision is handled specially and is removed from the batch
* before processing!
- * @param $namespace Namespace to get serial for
*/
- public function getBatchSerial($namespace) {
+ public function getBatchSerial($namespace)
+ {
if (empty($this->serials[$namespace])) {
$batch = $this->getBatch($namespace);
unset($batch['DefinitionRev']);
- $this->serials[$namespace] = md5(serialize($batch));
+ $this->serials[$namespace] = sha1(serialize($batch));
}
return $this->serials[$namespace];
}
/**
- * Returns a md5 signature for the entire configuration object
+ * Returns a SHA-1 signature for the entire configuration object
* that uniquely identifies that particular configuration
+ *
+ * @return string
*/
- public function getSerial() {
+ public function getSerial()
+ {
if (empty($this->serial)) {
- $this->serial = md5(serialize($this->getAll()));
+ $this->serial = sha1(serialize($this->getAll()));
}
return $this->serial;
}
/**
* Retrieves all directives, organized by namespace
+ *
* @warning This is a pretty inefficient function, avoid if you can
*/
- public function getAll() {
- if (!$this->finalized) $this->autoFinalize();
+ public function getAll()
+ {
+ if (!$this->finalized) {
+ $this->autoFinalize();
+ }
$ret = array();
foreach ($this->plist->squash() as $name => $value) {
list($ns, $key) = explode('.', $name, 2);
@@ -230,10 +288,13 @@ class HTMLPurifier_Config
/**
* Sets a value to configuration.
- * @param $key String key
- * @param $value Mixed value
+ *
+ * @param string $key key
+ * @param mixed $value value
+ * @param mixed $a
*/
- public function set($key, $value, $a = null) {
+ public function set($key, $value, $a = null)
+ {
if (strpos($key, '.') === false) {
$namespace = $key;
$directive = $value;
@@ -243,18 +304,25 @@ class HTMLPurifier_Config
} else {
list($namespace) = explode('.', $key);
}
- if ($this->isFinalized('Cannot set directive after finalization')) return;
+ if ($this->isFinalized('Cannot set directive after finalization')) {
+ return;
+ }
if (!isset($this->def->info[$key])) {
- $this->triggerError('Cannot set undefined directive ' . htmlspecialchars($key) . ' to value',
- E_USER_WARNING);
+ $this->triggerError(
+ 'Cannot set undefined directive ' . htmlspecialchars($key) . ' to value',
+ E_USER_WARNING
+ );
return;
}
$def = $this->def->info[$key];
if (isset($def->isAlias)) {
if ($this->aliasMode) {
- $this->triggerError('Double-aliases not allowed, please fix '.
- 'ConfigSchema bug with' . $key, E_USER_ERROR);
+ $this->triggerError(
+ 'Double-aliases not allowed, please fix '.
+ 'ConfigSchema bug with' . $key,
+ E_USER_ERROR
+ );
return;
}
$this->aliasMode = true;
@@ -278,7 +346,11 @@ class HTMLPurifier_Config
try {
$value = $this->parser->parse($value, $type, $allow_null);
} catch (HTMLPurifier_VarParserException $e) {
- $this->triggerError('Value for ' . $key . ' is of invalid type, should be ' . HTMLPurifier_VarParser::getTypeName($type), E_USER_WARNING);
+ $this->triggerError(
+ 'Value for ' . $key . ' is of invalid type, should be ' .
+ HTMLPurifier_VarParser::getTypeName($type),
+ E_USER_WARNING
+ );
return;
}
if (is_string($value) && is_object($def)) {
@@ -288,8 +360,11 @@ class HTMLPurifier_Config
}
// check to see if the value is allowed
if (isset($def->allowed) && !isset($def->allowed[$value])) {
- $this->triggerError('Value not supported, valid values are: ' .
- $this->_listify($def->allowed), E_USER_WARNING);
+ $this->triggerError(
+ 'Value not supported, valid values are: ' .
+ $this->_listify($def->allowed),
+ E_USER_WARNING
+ );
return;
}
}
@@ -307,38 +382,102 @@ class HTMLPurifier_Config
/**
* Convenience function for error reporting
+ *
+ * @param array $lookup
+ *
+ * @return string
*/
- private function _listify($lookup) {
+ private function _listify($lookup)
+ {
$list = array();
- foreach ($lookup as $name => $b) $list[] = $name;
+ foreach ($lookup as $name => $b) {
+ $list[] = $name;
+ }
return implode(', ', $list);
}
/**
* Retrieves object reference to the HTML definition.
- * @param $raw Return a copy that has not been setup yet. Must be
+ *
+ * @param bool $raw Return a copy that has not been setup yet. Must be
* called before it's been setup, otherwise won't work.
- */
- public function getHTMLDefinition($raw = false) {
- return $this->getDefinition('HTML', $raw);
+ * @param bool $optimized If true, this method may return null, to
+ * indicate that a cached version of the modified
+ * definition object is available and no further edits
+ * are necessary. Consider using
+ * maybeGetRawHTMLDefinition, which is more explicitly
+ * named, instead.
+ *
+ * @return HTMLPurifier_HTMLDefinition
+ */
+ public function getHTMLDefinition($raw = false, $optimized = false)
+ {
+ return $this->getDefinition('HTML', $raw, $optimized);
}
/**
* Retrieves object reference to the CSS definition
- * @param $raw Return a copy that has not been setup yet. Must be
+ *
+ * @param bool $raw Return a copy that has not been setup yet. Must be
* called before it's been setup, otherwise won't work.
- */
- public function getCSSDefinition($raw = false) {
- return $this->getDefinition('CSS', $raw);
+ * @param bool $optimized If true, this method may return null, to
+ * indicate that a cached version of the modified
+ * definition object is available and no further edits
+ * are necessary. Consider using
+ * maybeGetRawCSSDefinition, which is more explicitly
+ * named, instead.
+ *
+ * @return HTMLPurifier_CSSDefinition
+ */
+ public function getCSSDefinition($raw = false, $optimized = false)
+ {
+ return $this->getDefinition('CSS', $raw, $optimized);
+ }
+
+ /**
+ * Retrieves object reference to the URI definition
+ *
+ * @param bool $raw Return a copy that has not been setup yet. Must be
+ * called before it's been setup, otherwise won't work.
+ * @param bool $optimized If true, this method may return null, to
+ * indicate that a cached version of the modified
+ * definition object is available and no further edits
+ * are necessary. Consider using
+ * maybeGetRawURIDefinition, which is more explicitly
+ * named, instead.
+ *
+ * @return HTMLPurifier_URIDefinition
+ */
+ public function getURIDefinition($raw = false, $optimized = false)
+ {
+ return $this->getDefinition('URI', $raw, $optimized);
}
/**
* Retrieves a definition
- * @param $type Type of definition: HTML, CSS, etc
- * @param $raw Whether or not definition should be returned raw
- */
- public function getDefinition($type, $raw = false) {
- if (!$this->finalized) $this->autoFinalize();
+ *
+ * @param string $type Type of definition: HTML, CSS, etc
+ * @param bool $raw Whether or not definition should be returned raw
+ * @param bool $optimized Only has an effect when $raw is true. Whether
+ * or not to return null if the result is already present in
+ * the cache. This is off by default for backwards
+ * compatibility reasons, but you need to do things this
+ * way in order to ensure that caching is done properly.
+ * Check out enduser-customize.html for more details.
+ * We probably won't ever change this default, as much as the
+ * maybe semantics is the "right thing to do."
+ *
+ * @throws HTMLPurifier_Exception
+ * @return HTMLPurifier_Definition
+ */
+ public function getDefinition($type, $raw = false, $optimized = false)
+ {
+ if ($optimized && !$raw) {
+ throw new HTMLPurifier_Exception("Cannot set optimized = true when raw = false");
+ }
+ if (!$this->finalized) {
+ $this->autoFinalize();
+ }
// temporarily suspend locks, so we can handle recursive definition calls
$lock = $this->lock;
$this->lock = null;
@@ -346,61 +485,193 @@ class HTMLPurifier_Config
$cache = $factory->create($type, $this);
$this->lock = $lock;
if (!$raw) {
- // see if we can quickly supply a definition
+ // full definition
+ // ---------------
+ // check if definition is in memory
+ if (!empty($this->definitions[$type])) {
+ $def = $this->definitions[$type];
+ // check if the definition is setup
+ if ($def->setup) {
+ return $def;
+ } else {
+ $def->setup($this);
+ if ($def->optimized) {
+ $cache->add($def, $this);
+ }
+ return $def;
+ }
+ }
+ // check if definition is in cache
+ $def = $cache->get($this);
+ if ($def) {
+ // definition in cache, save to memory and return it
+ $this->definitions[$type] = $def;
+ return $def;
+ }
+ // initialize it
+ $def = $this->initDefinition($type);
+ // set it up
+ $this->lock = $type;
+ $def->setup($this);
+ $this->lock = null;
+ // save in cache
+ $cache->add($def, $this);
+ // return it
+ return $def;
+ } else {
+ // raw definition
+ // --------------
+ // check preconditions
+ $def = null;
+ if ($optimized) {
+ if (is_null($this->get($type . '.DefinitionID'))) {
+ // fatally error out if definition ID not set
+ throw new HTMLPurifier_Exception(
+ "Cannot retrieve raw version without specifying %$type.DefinitionID"
+ );
+ }
+ }
if (!empty($this->definitions[$type])) {
- if (!$this->definitions[$type]->setup) {
- $this->definitions[$type]->setup($this);
- $cache->set($this->definitions[$type], $this);
+ $def = $this->definitions[$type];
+ if ($def->setup && !$optimized) {
+ $extra = $this->chatty ?
+ " (try moving this code block earlier in your initialization)" :
+ "";
+ throw new HTMLPurifier_Exception(
+ "Cannot retrieve raw definition after it has already been setup" .
+ $extra
+ );
+ }
+ if ($def->optimized === null) {
+ $extra = $this->chatty ? " (try flushing your cache)" : "";
+ throw new HTMLPurifier_Exception(
+ "Optimization status of definition is unknown" . $extra
+ );
+ }
+ if ($def->optimized !== $optimized) {
+ $msg = $optimized ? "optimized" : "unoptimized";
+ $extra = $this->chatty ?
+ " (this backtrace is for the first inconsistent call, which was for a $msg raw definition)"
+ : "";
+ throw new HTMLPurifier_Exception(
+ "Inconsistent use of optimized and unoptimized raw definition retrievals" . $extra
+ );
}
- return $this->definitions[$type];
}
- // memory check missed, try cache
- $this->definitions[$type] = $cache->get($this);
- if ($this->definitions[$type]) {
- // definition in cache, return it
- return $this->definitions[$type];
+ // check if definition was in memory
+ if ($def) {
+ if ($def->setup) {
+ // invariant: $optimized === true (checked above)
+ return null;
+ } else {
+ return $def;
+ }
}
- } elseif (
- !empty($this->definitions[$type]) &&
- !$this->definitions[$type]->setup
- ) {
- // raw requested, raw in memory, quick return
- return $this->definitions[$type];
+ // if optimized, check if definition was in cache
+ // (because we do the memory check first, this formulation
+ // is prone to cache slamming, but I think
+ // guaranteeing that either /all/ of the raw
+ // setup code or /none/ of it is run is more important.)
+ if ($optimized) {
+ // This code path only gets run once; once we put
+ // something in $definitions (which is guaranteed by the
+ // trailing code), we always short-circuit above.
+ $def = $cache->get($this);
+ if ($def) {
+ // save the full definition for later, but don't
+ // return it yet
+ $this->definitions[$type] = $def;
+ return null;
+ }
+ }
+ // check invariants for creation
+ if (!$optimized) {
+ if (!is_null($this->get($type . '.DefinitionID'))) {
+ if ($this->chatty) {
+ $this->triggerError(
+ 'Due to a documentation error in previous version of HTML Purifier, your ' .
+ 'definitions are not being cached. If this is OK, you can remove the ' .
+ '%$type.DefinitionRev and %$type.DefinitionID declaration. Otherwise, ' .
+ 'modify your code to use maybeGetRawDefinition, and test if the returned ' .
+ 'value is null before making any edits (if it is null, that means that a ' .
+ 'cached version is available, and no raw operations are necessary). See ' .
+ '<a href="http://htmlpurifier.org/docs/enduser-customize.html#optimized">' .
+ 'Customize</a> for more details',
+ E_USER_WARNING
+ );
+ } else {
+ $this->triggerError(
+ "Useless DefinitionID declaration",
+ E_USER_WARNING
+ );
+ }
+ }
+ }
+ // initialize it
+ $def = $this->initDefinition($type);
+ $def->optimized = $optimized;
+ return $def;
}
+ throw new HTMLPurifier_Exception("The impossible happened!");
+ }
+
+ /**
+ * Initialise definition
+ *
+ * @param string $type What type of definition to create
+ *
+ * @return HTMLPurifier_CSSDefinition|HTMLPurifier_HTMLDefinition|HTMLPurifier_URIDefinition
+ * @throws HTMLPurifier_Exception
+ */
+ private function initDefinition($type)
+ {
// quick checks failed, let's create the object
if ($type == 'HTML') {
- $this->definitions[$type] = new HTMLPurifier_HTMLDefinition();
+ $def = new HTMLPurifier_HTMLDefinition();
} elseif ($type == 'CSS') {
- $this->definitions[$type] = new HTMLPurifier_CSSDefinition();
+ $def = new HTMLPurifier_CSSDefinition();
} elseif ($type == 'URI') {
- $this->definitions[$type] = new HTMLPurifier_URIDefinition();
+ $def = new HTMLPurifier_URIDefinition();
} else {
- throw new HTMLPurifier_Exception("Definition of $type type not supported");
+ throw new HTMLPurifier_Exception(
+ "Definition of $type type not supported"
+ );
}
- // quick abort if raw
- if ($raw) {
- if (is_null($this->get($type . '.DefinitionID'))) {
- // fatally error out if definition ID not set
- throw new HTMLPurifier_Exception("Cannot retrieve raw version without specifying %$type.DefinitionID");
- }
- return $this->definitions[$type];
- }
- // set it up
- $this->lock = $type;
- $this->definitions[$type]->setup($this);
- $this->lock = null;
- // save in cache
- $cache->set($this->definitions[$type], $this);
- return $this->definitions[$type];
+ $this->definitions[$type] = $def;
+ return $def;
+ }
+
+ public function maybeGetRawDefinition($name)
+ {
+ return $this->getDefinition($name, true, true);
+ }
+
+ public function maybeGetRawHTMLDefinition()
+ {
+ return $this->getDefinition('HTML', true, true);
+ }
+
+ public function maybeGetRawCSSDefinition()
+ {
+ return $this->getDefinition('CSS', true, true);
+ }
+
+ public function maybeGetRawURIDefinition()
+ {
+ return $this->getDefinition('URI', true, true);
}
/**
* Loads configuration values from an array with the following structure:
* Namespace.Directive => Value
- * @param $config_array Configuration associative array
+ *
+ * @param array $config_array Configuration associative array
*/
- public function loadArray($config_array) {
- if ($this->isFinalized('Cannot load directives after finalization')) return;
+ public function loadArray($config_array)
+ {
+ if ($this->isFinalized('Cannot load directives after finalization')) {
+ return;
+ }
foreach ($config_array as $key => $value) {
$key = str_replace('_', '.', $key);
if (strpos($key, '.') !== false) {
@@ -408,8 +679,8 @@ class HTMLPurifier_Config
} else {
$namespace = $key;
$namespace_values = $value;
- foreach ($namespace_values as $directive => $value) {
- $this->set($namespace .'.'. $directive, $value);
+ foreach ($namespace_values as $directive => $value2) {
+ $this->set($namespace .'.'. $directive, $value2);
}
}
}
@@ -419,40 +690,55 @@ class HTMLPurifier_Config
* Returns a list of array(namespace, directive) for all directives
* that are allowed in a web-form context as per an allowed
* namespaces/directives list.
- * @param $allowed List of allowed namespaces/directives
- */
- public static function getAllowedDirectivesForForm($allowed, $schema = null) {
+ *
+ * @param array $allowed List of allowed namespaces/directives
+ * @param HTMLPurifier_ConfigSchema $schema Schema to use, if not global copy
+ *
+ * @return array
+ */
+ public static function getAllowedDirectivesForForm($allowed, $schema = null)
+ {
if (!$schema) {
$schema = HTMLPurifier_ConfigSchema::instance();
}
if ($allowed !== true) {
- if (is_string($allowed)) $allowed = array($allowed);
- $allowed_ns = array();
- $allowed_directives = array();
- $blacklisted_directives = array();
- foreach ($allowed as $ns_or_directive) {
- if (strpos($ns_or_directive, '.') !== false) {
- // directive
- if ($ns_or_directive[0] == '-') {
- $blacklisted_directives[substr($ns_or_directive, 1)] = true;
- } else {
- $allowed_directives[$ns_or_directive] = true;
- }
- } else {
- // namespace
- $allowed_ns[$ns_or_directive] = true;
- }
- }
+ if (is_string($allowed)) {
+ $allowed = array($allowed);
+ }
+ $allowed_ns = array();
+ $allowed_directives = array();
+ $blacklisted_directives = array();
+ foreach ($allowed as $ns_or_directive) {
+ if (strpos($ns_or_directive, '.') !== false) {
+ // directive
+ if ($ns_or_directive[0] == '-') {
+ $blacklisted_directives[substr($ns_or_directive, 1)] = true;
+ } else {
+ $allowed_directives[$ns_or_directive] = true;
+ }
+ } else {
+ // namespace
+ $allowed_ns[$ns_or_directive] = true;
+ }
+ }
}
$ret = array();
foreach ($schema->info as $key => $def) {
list($ns, $directive) = explode('.', $key, 2);
if ($allowed !== true) {
- if (isset($blacklisted_directives["$ns.$directive"])) continue;
- if (!isset($allowed_directives["$ns.$directive"]) && !isset($allowed_ns[$ns])) continue;
+ if (isset($blacklisted_directives["$ns.$directive"])) {
+ continue;
+ }
+ if (!isset($allowed_directives["$ns.$directive"]) && !isset($allowed_ns[$ns])) {
+ continue;
+ }
+ }
+ if (isset($def->isAlias)) {
+ continue;
+ }
+ if ($directive == 'DefinitionID' || $directive == 'DefinitionRev') {
+ continue;
}
- if (isset($def->isAlias)) continue;
- if ($directive == 'DefinitionID' || $directive == 'DefinitionRev') continue;
$ret[] = array($ns, $directive);
}
return $ret;
@@ -461,13 +747,17 @@ class HTMLPurifier_Config
/**
* Loads configuration values from $_GET/$_POST that were posted
* via ConfigForm
- * @param $array $_GET or $_POST array to import
- * @param $index Index/name that the config variables are in
- * @param $allowed List of allowed namespaces/directives
- * @param $mq_fix Boolean whether or not to enable magic quotes fix
- * @param $schema Instance of HTMLPurifier_ConfigSchema to use, if not global copy
- */
- public static function loadArrayFromForm($array, $index = false, $allowed = true, $mq_fix = true, $schema = null) {
+ *
+ * @param array $array $_GET or $_POST array to import
+ * @param string|bool $index Index/name that the config variables are in
+ * @param array|bool $allowed List of allowed namespaces/directives
+ * @param bool $mq_fix Boolean whether or not to enable magic quotes fix
+ * @param HTMLPurifier_ConfigSchema $schema Schema to use, if not global copy
+ *
+ * @return mixed
+ */
+ public static function loadArrayFromForm($array, $index = false, $allowed = true, $mq_fix = true, $schema = null)
+ {
$ret = HTMLPurifier_Config::prepareArrayFromForm($array, $index, $allowed, $mq_fix, $schema);
$config = HTMLPurifier_Config::create($ret, $schema);
return $config;
@@ -475,9 +765,14 @@ class HTMLPurifier_Config
/**
* Merges in configuration values from $_GET/$_POST to object. NOT STATIC.
- * @note Same parameters as loadArrayFromForm
- */
- public function mergeArrayFromForm($array, $index = false, $allowed = true, $mq_fix = true) {
+ *
+ * @param array $array $_GET or $_POST array to import
+ * @param string|bool $index Index/name that the config variables are in
+ * @param array|bool $allowed List of allowed namespaces/directives
+ * @param bool $mq_fix Boolean whether or not to enable magic quotes fix
+ */
+ public function mergeArrayFromForm($array, $index = false, $allowed = true, $mq_fix = true)
+ {
$ret = HTMLPurifier_Config::prepareArrayFromForm($array, $index, $allowed, $mq_fix, $this->def);
$this->loadArray($ret);
}
@@ -485,9 +780,20 @@ class HTMLPurifier_Config
/**
* Prepares an array from a form into something usable for the more
* strict parts of HTMLPurifier_Config
- */
- public static function prepareArrayFromForm($array, $index = false, $allowed = true, $mq_fix = true, $schema = null) {
- if ($index !== false) $array = (isset($array[$index]) && is_array($array[$index])) ? $array[$index] : array();
+ *
+ * @param array $array $_GET or $_POST array to import
+ * @param string|bool $index Index/name that the config variables are in
+ * @param array|bool $allowed List of allowed namespaces/directives
+ * @param bool $mq_fix Boolean whether or not to enable magic quotes fix
+ * @param HTMLPurifier_ConfigSchema $schema Schema to use, if not global copy
+ *
+ * @return array
+ */
+ public static function prepareArrayFromForm($array, $index = false, $allowed = true, $mq_fix = true, $schema = null)
+ {
+ if ($index !== false) {
+ $array = (isset($array[$index]) && is_array($array[$index])) ? $array[$index] : array();
+ }
$mq = $mq_fix && function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc();
$allowed = HTMLPurifier_Config::getAllowedDirectivesForForm($allowed, $schema);
@@ -499,7 +805,9 @@ class HTMLPurifier_Config
$ret[$ns][$directive] = null;
continue;
}
- if (!isset($array[$skey])) continue;
+ if (!isset($array[$skey])) {
+ continue;
+ }
$value = $mq ? stripslashes($array[$skey]) : $array[$skey];
$ret[$ns][$directive] = $value;
}
@@ -508,19 +816,27 @@ class HTMLPurifier_Config
/**
* Loads configuration values from an ini file
- * @param $filename Name of ini file
+ *
+ * @param string $filename Name of ini file
*/
- public function loadIni($filename) {
- if ($this->isFinalized('Cannot load directives after finalization')) return;
+ public function loadIni($filename)
+ {
+ if ($this->isFinalized('Cannot load directives after finalization')) {
+ return;
+ }
$array = parse_ini_file($filename, true);
$this->loadArray($array);
}
/**
* Checks whether or not the configuration object is finalized.
- * @param $error String error message, or false for no error
+ *
+ * @param string|bool $error String error message, or false for no error
+ *
+ * @return bool
*/
- public function isFinalized($error = false) {
+ public function isFinalized($error = false)
+ {
if ($this->finalized && $error) {
$this->triggerError($error, E_USER_ERROR);
}
@@ -531,7 +847,8 @@ class HTMLPurifier_Config
* Finalizes configuration only if auto finalize is on and not
* already finalized
*/
- public function autoFinalize() {
+ public function autoFinalize()
+ {
if ($this->autoFinalize) {
$this->finalize();
} else {
@@ -542,24 +859,35 @@ class HTMLPurifier_Config
/**
* Finalizes a configuration object, prohibiting further change
*/
- public function finalize() {
+ public function finalize()
+ {
$this->finalized = true;
- unset($this->parser);
+ $this->parser = null;
}
/**
* Produces a nicely formatted error message by supplying the
- * stack frame information from two levels up and OUTSIDE of
- * HTMLPurifier_Config.
+ * stack frame information OUTSIDE of HTMLPurifier_Config.
+ *
+ * @param string $msg An error message
+ * @param int $no An error number
*/
- protected function triggerError($msg, $no) {
+ protected function triggerError($msg, $no)
+ {
// determine previous stack frame
- $backtrace = debug_backtrace();
- if ($this->chatty && isset($backtrace[1])) {
- $frame = $backtrace[1];
- $extra = " on line {$frame['line']} in file {$frame['file']}";
- } else {
- $extra = '';
+ $extra = '';
+ if ($this->chatty) {
+ $trace = debug_backtrace();
+ // zip(tail(trace), trace) -- but PHP is not Haskell har har
+ for ($i = 0, $c = count($trace); $i < $c - 1; $i++) {
+ // XXX this is not correct on some versions of HTML Purifier
+ if ($trace[$i + 1]['class'] === 'HTMLPurifier_Config') {
+ continue;
+ }
+ $frame = $trace[$i];
+ $extra = " invoked on line {$frame['line']} in file {$frame['file']}";
+ break;
+ }
}
trigger_error($msg . $extra, $no);
}
@@ -567,8 +895,11 @@ class HTMLPurifier_Config
/**
* Returns a serialized form of the configuration object that can
* be reconstituted.
+ *
+ * @return string
*/
- public function serialize() {
+ public function serialize()
+ {
$this->getDefinition('HTML');
$this->getDefinition('CSS');
$this->getDefinition('URI');
diff --git a/library/HTMLPurifier/ConfigSchema.php b/library/HTMLPurifier/ConfigSchema.php
index 67be5c71f..bfbb0f92f 100644
--- a/library/HTMLPurifier/ConfigSchema.php
+++ b/library/HTMLPurifier/ConfigSchema.php
@@ -3,21 +3,24 @@
/**
* Configuration definition, defines directives and their defaults.
*/
-class HTMLPurifier_ConfigSchema {
-
+class HTMLPurifier_ConfigSchema
+{
/**
* Defaults of the directives and namespaces.
+ * @type array
* @note This shares the exact same structure as HTMLPurifier_Config::$conf
*/
public $defaults = array();
/**
* The default property list. Do not edit this property list.
+ * @type array
*/
public $defaultPlist;
/**
- * Definition of the directives. The structure of this is:
+ * Definition of the directives.
+ * The structure of this is:
*
* array(
* 'Namespace' => array(
@@ -44,29 +47,43 @@ class HTMLPurifier_ConfigSchema {
* This class is friendly with HTMLPurifier_Config. If you need introspection
* about the schema, you're better of using the ConfigSchema_Interchange,
* which uses more memory but has much richer information.
+ * @type array
*/
public $info = array();
/**
* Application-wide singleton
+ * @type HTMLPurifier_ConfigSchema
*/
- static protected $singleton;
+ protected static $singleton;
- public function __construct() {
+ public function __construct()
+ {
$this->defaultPlist = new HTMLPurifier_PropertyList();
}
/**
* Unserializes the default ConfigSchema.
+ * @return HTMLPurifier_ConfigSchema
*/
- public static function makeFromSerial() {
- return unserialize(file_get_contents(HTMLPURIFIER_PREFIX . '/HTMLPurifier/ConfigSchema/schema.ser'));
+ public static function makeFromSerial()
+ {
+ $contents = file_get_contents(HTMLPURIFIER_PREFIX . '/HTMLPurifier/ConfigSchema/schema.ser');
+ $r = unserialize($contents);
+ if (!$r) {
+ $hash = sha1($contents);
+ trigger_error("Unserialization of configuration schema failed, sha1 of file was $hash", E_USER_ERROR);
+ }
+ return $r;
}
/**
* Retrieves an instance of the application-wide configuration definition.
+ * @param HTMLPurifier_ConfigSchema $prototype
+ * @return HTMLPurifier_ConfigSchema
*/
- public static function instance($prototype = null) {
+ public static function instance($prototype = null)
+ {
if ($prototype !== null) {
HTMLPurifier_ConfigSchema::$singleton = $prototype;
} elseif (HTMLPurifier_ConfigSchema::$singleton === null || $prototype === true) {
@@ -80,17 +97,19 @@ class HTMLPurifier_ConfigSchema {
* @warning Will fail of directive's namespace is defined.
* @warning This method's signature is slightly different from the legacy
* define() static method! Beware!
- * @param $namespace Namespace the directive is in
- * @param $name Key of directive
- * @param $default Default value of directive
- * @param $type Allowed type of the directive. See
+ * @param string $key Name of directive
+ * @param mixed $default Default value of directive
+ * @param string $type Allowed type of the directive. See
* HTMLPurifier_DirectiveDef::$type for allowed values
- * @param $allow_null Whether or not to allow null values
+ * @param bool $allow_null Whether or not to allow null values
*/
- public function add($key, $default, $type, $allow_null) {
+ public function add($key, $default, $type, $allow_null)
+ {
$obj = new stdclass();
$obj->type = is_int($type) ? $type : HTMLPurifier_VarParser::$types[$type];
- if ($allow_null) $obj->allow_null = true;
+ if ($allow_null) {
+ $obj->allow_null = true;
+ }
$this->info[$key] = $obj;
$this->defaults[$key] = $default;
$this->defaultPlist->set($key, $default);
@@ -101,11 +120,11 @@ class HTMLPurifier_ConfigSchema {
*
* Directive value aliases are convenient for developers because it lets
* them set a directive to several values and get the same result.
- * @param $namespace Directive's namespace
- * @param $name Name of Directive
- * @param $aliases Hash of aliased values to the real alias
+ * @param string $key Name of Directive
+ * @param array $aliases Hash of aliased values to the real alias
*/
- public function addValueAliases($key, $aliases) {
+ public function addValueAliases($key, $aliases)
+ {
if (!isset($this->info[$key]->aliases)) {
$this->info[$key]->aliases = array();
}
@@ -118,22 +137,21 @@ class HTMLPurifier_ConfigSchema {
* Defines a set of allowed values for a directive.
* @warning This is slightly different from the corresponding static
* method definition.
- * @param $namespace Namespace of directive
- * @param $name Name of directive
- * @param $allowed Lookup array of allowed values
+ * @param string $key Name of directive
+ * @param array $allowed Lookup array of allowed values
*/
- public function addAllowedValues($key, $allowed) {
+ public function addAllowedValues($key, $allowed)
+ {
$this->info[$key]->allowed = $allowed;
}
/**
* Defines a directive alias for backwards compatibility
- * @param $namespace
- * @param $name Directive that will be aliased
- * @param $new_namespace
- * @param $new_name Directive that the alias will be to
+ * @param string $key Directive that will be aliased
+ * @param string $new_key Directive that the alias will be to
*/
- public function addAlias($key, $new_key) {
+ public function addAlias($key, $new_key)
+ {
$obj = new stdclass;
$obj->key = $new_key;
$obj->isAlias = true;
@@ -143,7 +161,8 @@ class HTMLPurifier_ConfigSchema {
/**
* Replaces any stdclass that only has the type property with type integer.
*/
- public function postProcess() {
+ public function postProcess()
+ {
foreach ($this->info as $key => $v) {
if (count((array) $v) == 1) {
$this->info[$key] = $v->type;
@@ -152,7 +171,6 @@ class HTMLPurifier_ConfigSchema {
}
}
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/Builder/ConfigSchema.php b/library/HTMLPurifier/ConfigSchema/Builder/ConfigSchema.php
index c05668a70..d5906cd46 100644
--- a/library/HTMLPurifier/ConfigSchema/Builder/ConfigSchema.php
+++ b/library/HTMLPurifier/ConfigSchema/Builder/ConfigSchema.php
@@ -7,7 +7,12 @@
class HTMLPurifier_ConfigSchema_Builder_ConfigSchema
{
- public function build($interchange) {
+ /**
+ * @param HTMLPurifier_ConfigSchema_Interchange $interchange
+ * @return HTMLPurifier_ConfigSchema
+ */
+ public function build($interchange)
+ {
$schema = new HTMLPurifier_ConfigSchema();
foreach ($interchange->directives as $d) {
$schema->add(
@@ -38,7 +43,6 @@ class HTMLPurifier_ConfigSchema_Builder_ConfigSchema
$schema->postProcess();
return $schema;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/Builder/Xml.php b/library/HTMLPurifier/ConfigSchema/Builder/Xml.php
index 244561a37..5fa56f7dd 100644
--- a/library/HTMLPurifier/ConfigSchema/Builder/Xml.php
+++ b/library/HTMLPurifier/ConfigSchema/Builder/Xml.php
@@ -7,10 +7,21 @@
class HTMLPurifier_ConfigSchema_Builder_Xml extends XMLWriter
{
+ /**
+ * @type HTMLPurifier_ConfigSchema_Interchange
+ */
protected $interchange;
+
+ /**
+ * @type string
+ */
private $namespace;
- protected function writeHTMLDiv($html) {
+ /**
+ * @param string $html
+ */
+ protected function writeHTMLDiv($html)
+ {
$this->startElement('div');
$purifier = HTMLPurifier::getInstance();
@@ -21,12 +32,23 @@ class HTMLPurifier_ConfigSchema_Builder_Xml extends XMLWriter
$this->endElement(); // div
}
- protected function export($var) {
- if ($var === array()) return 'array()';
+ /**
+ * @param mixed $var
+ * @return string
+ */
+ protected function export($var)
+ {
+ if ($var === array()) {
+ return 'array()';
+ }
return var_export($var, true);
}
- public function build($interchange) {
+ /**
+ * @param HTMLPurifier_ConfigSchema_Interchange $interchange
+ */
+ public function build($interchange)
+ {
// global access, only use as last resort
$this->interchange = $interchange;
@@ -39,19 +61,26 @@ class HTMLPurifier_ConfigSchema_Builder_Xml extends XMLWriter
$this->buildDirective($directive);
}
- if ($this->namespace) $this->endElement(); // namespace
+ if ($this->namespace) {
+ $this->endElement();
+ } // namespace
$this->endElement(); // configdoc
$this->flush();
}
- public function buildDirective($directive) {
-
+ /**
+ * @param HTMLPurifier_ConfigSchema_Interchange_Directive $directive
+ */
+ public function buildDirective($directive)
+ {
// Kludge, although I suppose having a notion of a "root namespace"
// certainly makes things look nicer when documentation is built.
// Depends on things being sorted.
if (!$this->namespace || $this->namespace !== $directive->id->getRootNamespace()) {
- if ($this->namespace) $this->endElement(); // namespace
+ if ($this->namespace) {
+ $this->endElement();
+ } // namespace
$this->namespace = $directive->id->getRootNamespace();
$this->startElement('namespace');
$this->writeAttribute('id', $this->namespace);
@@ -64,43 +93,52 @@ class HTMLPurifier_ConfigSchema_Builder_Xml extends XMLWriter
$this->writeElement('name', $directive->id->getDirective());
$this->startElement('aliases');
- foreach ($directive->aliases as $alias) $this->writeElement('alias', $alias->toString());
+ foreach ($directive->aliases as $alias) {
+ $this->writeElement('alias', $alias->toString());
+ }
$this->endElement(); // aliases
$this->startElement('constraints');
- if ($directive->version) $this->writeElement('version', $directive->version);
- $this->startElement('type');
- if ($directive->typeAllowsNull) $this->writeAttribute('allow-null', 'yes');
- $this->text($directive->type);
- $this->endElement(); // type
- if ($directive->allowed) {
- $this->startElement('allowed');
- foreach ($directive->allowed as $value => $x) $this->writeElement('value', $value);
- $this->endElement(); // allowed
+ if ($directive->version) {
+ $this->writeElement('version', $directive->version);
+ }
+ $this->startElement('type');
+ if ($directive->typeAllowsNull) {
+ $this->writeAttribute('allow-null', 'yes');
+ }
+ $this->text($directive->type);
+ $this->endElement(); // type
+ if ($directive->allowed) {
+ $this->startElement('allowed');
+ foreach ($directive->allowed as $value => $x) {
+ $this->writeElement('value', $value);
}
- $this->writeElement('default', $this->export($directive->default));
- $this->writeAttribute('xml:space', 'preserve');
- if ($directive->external) {
- $this->startElement('external');
- foreach ($directive->external as $project) $this->writeElement('project', $project);
- $this->endElement();
+ $this->endElement(); // allowed
+ }
+ $this->writeElement('default', $this->export($directive->default));
+ $this->writeAttribute('xml:space', 'preserve');
+ if ($directive->external) {
+ $this->startElement('external');
+ foreach ($directive->external as $project) {
+ $this->writeElement('project', $project);
}
+ $this->endElement();
+ }
$this->endElement(); // constraints
if ($directive->deprecatedVersion) {
$this->startElement('deprecated');
- $this->writeElement('version', $directive->deprecatedVersion);
- $this->writeElement('use', $directive->deprecatedUse->toString());
+ $this->writeElement('version', $directive->deprecatedVersion);
+ $this->writeElement('use', $directive->deprecatedUse->toString());
$this->endElement(); // deprecated
}
$this->startElement('description');
- $this->writeHTMLDiv($directive->description);
+ $this->writeHTMLDiv($directive->description);
$this->endElement(); // description
$this->endElement(); // directive
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/Interchange.php b/library/HTMLPurifier/ConfigSchema/Interchange.php
index 91a5aa730..0e08ae8fe 100644
--- a/library/HTMLPurifier/ConfigSchema/Interchange.php
+++ b/library/HTMLPurifier/ConfigSchema/Interchange.php
@@ -10,18 +10,23 @@ class HTMLPurifier_ConfigSchema_Interchange
/**
* Name of the application this schema is describing.
+ * @type string
*/
public $name;
/**
* Array of Directive ID => array(directive info)
+ * @type HTMLPurifier_ConfigSchema_Interchange_Directive[]
*/
public $directives = array();
/**
* Adds a directive array to $directives
+ * @param HTMLPurifier_ConfigSchema_Interchange_Directive $directive
+ * @throws HTMLPurifier_ConfigSchema_Exception
*/
- public function addDirective($directive) {
+ public function addDirective($directive)
+ {
if (isset($this->directives[$i = $directive->id->toString()])) {
throw new HTMLPurifier_ConfigSchema_Exception("Cannot redefine directive '$i'");
}
@@ -32,11 +37,11 @@ class HTMLPurifier_ConfigSchema_Interchange
* Convenience function to perform standard validation. Throws exception
* on failed validation.
*/
- public function validate() {
+ public function validate()
+ {
$validator = new HTMLPurifier_ConfigSchema_Validator();
return $validator->validate($this);
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/Interchange/Directive.php b/library/HTMLPurifier/ConfigSchema/Interchange/Directive.php
index ac8be0d97..127a39a67 100644
--- a/library/HTMLPurifier/ConfigSchema/Interchange/Directive.php
+++ b/library/HTMLPurifier/ConfigSchema/Interchange/Directive.php
@@ -7,71 +7,83 @@ class HTMLPurifier_ConfigSchema_Interchange_Directive
{
/**
- * ID of directive, instance of HTMLPurifier_ConfigSchema_Interchange_Id.
+ * ID of directive.
+ * @type HTMLPurifier_ConfigSchema_Interchange_Id
*/
public $id;
/**
- * String type, e.g. 'integer' or 'istring'.
+ * Type, e.g. 'integer' or 'istring'.
+ * @type string
*/
public $type;
/**
* Default value, e.g. 3 or 'DefaultVal'.
+ * @type mixed
*/
public $default;
/**
* HTML description.
+ * @type string
*/
public $description;
/**
- * Boolean whether or not null is allowed as a value.
+ * Whether or not null is allowed as a value.
+ * @type bool
*/
public $typeAllowsNull = false;
/**
- * Lookup table of allowed scalar values, e.g. array('allowed' => true).
+ * Lookup table of allowed scalar values.
+ * e.g. array('allowed' => true).
* Null if all values are allowed.
+ * @type array
*/
public $allowed;
/**
- * List of aliases for the directive,
+ * List of aliases for the directive.
* e.g. array(new HTMLPurifier_ConfigSchema_Interchange_Id('Ns', 'Dir'))).
+ * @type HTMLPurifier_ConfigSchema_Interchange_Id[]
*/
public $aliases = array();
/**
* Hash of value aliases, e.g. array('alt' => 'real'). Null if value
* aliasing is disabled (necessary for non-scalar types).
+ * @type array
*/
public $valueAliases;
/**
* Version of HTML Purifier the directive was introduced, e.g. '1.3.1'.
* Null if the directive has always existed.
+ * @type string
*/
public $version;
/**
- * ID of directive that supercedes this old directive, is an instance
- * of HTMLPurifier_ConfigSchema_Interchange_Id. Null if not deprecated.
+ * ID of directive that supercedes this old directive.
+ * Null if not deprecated.
+ * @type HTMLPurifier_ConfigSchema_Interchange_Id
*/
public $deprecatedUse;
/**
* Version of HTML Purifier this directive was deprecated. Null if not
* deprecated.
+ * @type string
*/
public $deprecatedVersion;
/**
* List of external projects this directive depends on, e.g. array('CSSTidy').
+ * @type array
*/
public $external = array();
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/Interchange/Id.php b/library/HTMLPurifier/ConfigSchema/Interchange/Id.php
index b9b3c6f5c..126f09d95 100644
--- a/library/HTMLPurifier/ConfigSchema/Interchange/Id.php
+++ b/library/HTMLPurifier/ConfigSchema/Interchange/Id.php
@@ -6,32 +6,53 @@
class HTMLPurifier_ConfigSchema_Interchange_Id
{
+ /**
+ * @type string
+ */
public $key;
- public function __construct($key) {
+ /**
+ * @param string $key
+ */
+ public function __construct($key)
+ {
$this->key = $key;
}
/**
+ * @return string
* @warning This is NOT magic, to ensure that people don't abuse SPL and
* cause problems for PHP 5.0 support.
*/
- public function toString() {
+ public function toString()
+ {
return $this->key;
}
- public function getRootNamespace() {
+ /**
+ * @return string
+ */
+ public function getRootNamespace()
+ {
return substr($this->key, 0, strpos($this->key, "."));
}
- public function getDirective() {
+ /**
+ * @return string
+ */
+ public function getDirective()
+ {
return substr($this->key, strpos($this->key, ".") + 1);
}
- public static function make($id) {
+ /**
+ * @param string $id
+ * @return HTMLPurifier_ConfigSchema_Interchange_Id
+ */
+ public static function make($id)
+ {
return new HTMLPurifier_ConfigSchema_Interchange_Id($id);
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/InterchangeBuilder.php b/library/HTMLPurifier/ConfigSchema/InterchangeBuilder.php
index 785b72ce8..655e6dd1b 100644
--- a/library/HTMLPurifier/ConfigSchema/InterchangeBuilder.php
+++ b/library/HTMLPurifier/ConfigSchema/InterchangeBuilder.php
@@ -5,21 +5,39 @@ class HTMLPurifier_ConfigSchema_InterchangeBuilder
/**
* Used for processing DEFAULT, nothing else.
+ * @type HTMLPurifier_VarParser
*/
protected $varParser;
- public function __construct($varParser = null) {
+ /**
+ * @param HTMLPurifier_VarParser $varParser
+ */
+ public function __construct($varParser = null)
+ {
$this->varParser = $varParser ? $varParser : new HTMLPurifier_VarParser_Native();
}
- public static function buildFromDirectory($dir = null) {
- $builder = new HTMLPurifier_ConfigSchema_InterchangeBuilder();
+ /**
+ * @param string $dir
+ * @return HTMLPurifier_ConfigSchema_Interchange
+ */
+ public static function buildFromDirectory($dir = null)
+ {
+ $builder = new HTMLPurifier_ConfigSchema_InterchangeBuilder();
$interchange = new HTMLPurifier_ConfigSchema_Interchange();
return $builder->buildDir($interchange, $dir);
}
- public function buildDir($interchange, $dir = null) {
- if (!$dir) $dir = HTMLPURIFIER_PREFIX . '/HTMLPurifier/ConfigSchema/schema';
+ /**
+ * @param HTMLPurifier_ConfigSchema_Interchange $interchange
+ * @param string $dir
+ * @return HTMLPurifier_ConfigSchema_Interchange
+ */
+ public function buildDir($interchange, $dir = null)
+ {
+ if (!$dir) {
+ $dir = HTMLPURIFIER_PREFIX . '/HTMLPurifier/ConfigSchema/schema';
+ }
if (file_exists($dir . '/info.ini')) {
$info = parse_ini_file($dir . '/info.ini');
$interchange->name = $info['name'];
@@ -39,24 +57,30 @@ class HTMLPurifier_ConfigSchema_InterchangeBuilder
foreach ($files as $file) {
$this->buildFile($interchange, $dir . '/' . $file);
}
-
return $interchange;
}
- public function buildFile($interchange, $file) {
+ /**
+ * @param HTMLPurifier_ConfigSchema_Interchange $interchange
+ * @param string $file
+ */
+ public function buildFile($interchange, $file)
+ {
$parser = new HTMLPurifier_StringHashParser();
$this->build(
$interchange,
- new HTMLPurifier_StringHash( $parser->parseFile($file) )
+ new HTMLPurifier_StringHash($parser->parseFile($file))
);
}
/**
* Builds an interchange object based on a hash.
- * @param $interchange HTMLPurifier_ConfigSchema_Interchange object to build
- * @param $hash HTMLPurifier_ConfigSchema_StringHash source data
+ * @param HTMLPurifier_ConfigSchema_Interchange $interchange HTMLPurifier_ConfigSchema_Interchange object to build
+ * @param HTMLPurifier_StringHash $hash source data
+ * @throws HTMLPurifier_ConfigSchema_Exception
*/
- public function build($interchange, $hash) {
+ public function build($interchange, $hash)
+ {
if (!$hash instanceof HTMLPurifier_StringHash) {
$hash = new HTMLPurifier_StringHash($hash);
}
@@ -75,7 +99,13 @@ class HTMLPurifier_ConfigSchema_InterchangeBuilder
$this->_findUnused($hash);
}
- public function buildDirective($interchange, $hash) {
+ /**
+ * @param HTMLPurifier_ConfigSchema_Interchange $interchange
+ * @param HTMLPurifier_StringHash $hash
+ * @throws HTMLPurifier_ConfigSchema_Exception
+ */
+ public function buildDirective($interchange, $hash)
+ {
$directive = new HTMLPurifier_ConfigSchema_Interchange_Directive();
// These are required elements:
@@ -84,7 +114,9 @@ class HTMLPurifier_ConfigSchema_InterchangeBuilder
if (isset($hash['TYPE'])) {
$type = explode('/', $hash->offsetGet('TYPE'));
- if (isset($type[1])) $directive->typeAllowsNull = true;
+ if (isset($type[1])) {
+ $directive->typeAllowsNull = true;
+ }
$directive->type = $type[0];
} else {
throw new HTMLPurifier_ConfigSchema_Exception("TYPE in directive hash '$id' not defined");
@@ -92,7 +124,11 @@ class HTMLPurifier_ConfigSchema_InterchangeBuilder
if (isset($hash['DEFAULT'])) {
try {
- $directive->default = $this->varParser->parse($hash->offsetGet('DEFAULT'), $directive->type, $directive->typeAllowsNull);
+ $directive->default = $this->varParser->parse(
+ $hash->offsetGet('DEFAULT'),
+ $directive->type,
+ $directive->typeAllowsNull
+ );
} catch (HTMLPurifier_VarParserException $e) {
throw new HTMLPurifier_ConfigSchema_Exception($e->getMessage() . " in DEFAULT in directive hash '$id'");
}
@@ -139,34 +175,45 @@ class HTMLPurifier_ConfigSchema_InterchangeBuilder
/**
* Evaluates an array PHP code string without array() wrapper
+ * @param string $contents
*/
- protected function evalArray($contents) {
- return eval('return array('. $contents .');');
+ protected function evalArray($contents)
+ {
+ return eval('return array(' . $contents . ');');
}
/**
* Converts an array list into a lookup array.
+ * @param array $array
+ * @return array
*/
- protected function lookup($array) {
+ protected function lookup($array)
+ {
$ret = array();
- foreach ($array as $val) $ret[$val] = true;
+ foreach ($array as $val) {
+ $ret[$val] = true;
+ }
return $ret;
}
/**
* Convenience function that creates an HTMLPurifier_ConfigSchema_Interchange_Id
* object based on a string Id.
+ * @param string $id
+ * @return HTMLPurifier_ConfigSchema_Interchange_Id
*/
- protected function id($id) {
+ protected function id($id)
+ {
return HTMLPurifier_ConfigSchema_Interchange_Id::make($id);
}
/**
* Triggers errors for any unused keys passed in the hash; such keys
* may indicate typos, missing values, etc.
- * @param $hash Instance of ConfigSchema_StringHash to check.
+ * @param HTMLPurifier_StringHash $hash Hash to check.
*/
- protected function _findUnused($hash) {
+ protected function _findUnused($hash)
+ {
$accessed = $hash->getAccessed();
foreach ($hash as $k => $v) {
if (!isset($accessed[$k])) {
@@ -174,7 +221,6 @@ class HTMLPurifier_ConfigSchema_InterchangeBuilder
}
}
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/Validator.php b/library/HTMLPurifier/ConfigSchema/Validator.php
index f374f6a02..fb3127788 100644
--- a/library/HTMLPurifier/ConfigSchema/Validator.php
+++ b/library/HTMLPurifier/ConfigSchema/Validator.php
@@ -12,36 +12,48 @@ class HTMLPurifier_ConfigSchema_Validator
{
/**
- * Easy to access global objects.
+ * @type HTMLPurifier_ConfigSchema_Interchange
*/
- protected $interchange, $aliases;
+ protected $interchange;
+
+ /**
+ * @type array
+ */
+ protected $aliases;
/**
* Context-stack to provide easy to read error messages.
+ * @type array
*/
protected $context = array();
/**
- * HTMLPurifier_VarParser to test default's type.
+ * to test default's type.
+ * @type HTMLPurifier_VarParser
*/
protected $parser;
- public function __construct() {
+ public function __construct()
+ {
$this->parser = new HTMLPurifier_VarParser();
}
/**
- * Validates a fully-formed interchange object. Throws an
- * HTMLPurifier_ConfigSchema_Exception if there's a problem.
+ * Validates a fully-formed interchange object.
+ * @param HTMLPurifier_ConfigSchema_Interchange $interchange
+ * @return bool
*/
- public function validate($interchange) {
+ public function validate($interchange)
+ {
$this->interchange = $interchange;
$this->aliases = array();
// PHP is a bit lax with integer <=> string conversions in
// arrays, so we don't use the identical !== comparison
foreach ($interchange->directives as $i => $directive) {
$id = $directive->id->toString();
- if ($i != $id) $this->error(false, "Integrity violation: key '$i' does not match internal id '$id'");
+ if ($i != $id) {
+ $this->error(false, "Integrity violation: key '$i' does not match internal id '$id'");
+ }
$this->validateDirective($directive);
}
return true;
@@ -49,8 +61,10 @@ class HTMLPurifier_ConfigSchema_Validator
/**
* Validates a HTMLPurifier_ConfigSchema_Interchange_Id object.
+ * @param HTMLPurifier_ConfigSchema_Interchange_Id $id
*/
- public function validateId($id) {
+ public function validateId($id)
+ {
$id_string = $id->toString();
$this->context[] = "id '$id_string'";
if (!$id instanceof HTMLPurifier_ConfigSchema_Interchange_Id) {
@@ -67,8 +81,10 @@ class HTMLPurifier_ConfigSchema_Validator
/**
* Validates a HTMLPurifier_ConfigSchema_Interchange_Directive object.
+ * @param HTMLPurifier_ConfigSchema_Interchange_Directive $d
*/
- public function validateDirective($d) {
+ public function validateDirective($d)
+ {
$id = $d->id->toString();
$this->context[] = "directive '$id'";
$this->validateId($d->id);
@@ -108,9 +124,13 @@ class HTMLPurifier_ConfigSchema_Validator
/**
* Extra validation if $allowed member variable of
* HTMLPurifier_ConfigSchema_Interchange_Directive is defined.
+ * @param HTMLPurifier_ConfigSchema_Interchange_Directive $d
*/
- public function validateDirectiveAllowed($d) {
- if (is_null($d->allowed)) return;
+ public function validateDirectiveAllowed($d)
+ {
+ if (is_null($d->allowed)) {
+ return;
+ }
$this->with($d, 'allowed')
->assertNotEmpty()
->assertIsLookup(); // handled by InterchangeBuilder
@@ -119,7 +139,9 @@ class HTMLPurifier_ConfigSchema_Validator
}
$this->context[] = 'allowed';
foreach ($d->allowed as $val => $x) {
- if (!is_string($val)) $this->error("value $val", 'must be a string');
+ if (!is_string($val)) {
+ $this->error("value $val", 'must be a string');
+ }
}
array_pop($this->context);
}
@@ -127,15 +149,23 @@ class HTMLPurifier_ConfigSchema_Validator
/**
* Extra validation if $valueAliases member variable of
* HTMLPurifier_ConfigSchema_Interchange_Directive is defined.
+ * @param HTMLPurifier_ConfigSchema_Interchange_Directive $d
*/
- public function validateDirectiveValueAliases($d) {
- if (is_null($d->valueAliases)) return;
+ public function validateDirectiveValueAliases($d)
+ {
+ if (is_null($d->valueAliases)) {
+ return;
+ }
$this->with($d, 'valueAliases')
->assertIsArray(); // handled by InterchangeBuilder
$this->context[] = 'valueAliases';
foreach ($d->valueAliases as $alias => $real) {
- if (!is_string($alias)) $this->error("alias $alias", 'must be a string');
- if (!is_string($real)) $this->error("alias target $real from alias '$alias'", 'must be a string');
+ if (!is_string($alias)) {
+ $this->error("alias $alias", 'must be a string');
+ }
+ if (!is_string($real)) {
+ $this->error("alias target $real from alias '$alias'", 'must be a string');
+ }
if ($alias === $real) {
$this->error("alias '$alias'", "must not be an alias to itself");
}
@@ -155,8 +185,10 @@ class HTMLPurifier_ConfigSchema_Validator
/**
* Extra validation if $aliases member variable of
* HTMLPurifier_ConfigSchema_Interchange_Directive is defined.
+ * @param HTMLPurifier_ConfigSchema_Interchange_Directive $d
*/
- public function validateDirectiveAliases($d) {
+ public function validateDirectiveAliases($d)
+ {
$this->with($d, 'aliases')
->assertIsArray(); // handled by InterchangeBuilder
$this->context[] = 'aliases';
@@ -180,27 +212,37 @@ class HTMLPurifier_ConfigSchema_Validator
/**
* Convenience function for generating HTMLPurifier_ConfigSchema_ValidatorAtom
* for validating simple member variables of objects.
+ * @param $obj
+ * @param $member
+ * @return HTMLPurifier_ConfigSchema_ValidatorAtom
*/
- protected function with($obj, $member) {
+ protected function with($obj, $member)
+ {
return new HTMLPurifier_ConfigSchema_ValidatorAtom($this->getFormattedContext(), $obj, $member);
}
/**
* Emits an error, providing helpful context.
+ * @throws HTMLPurifier_ConfigSchema_Exception
*/
- protected function error($target, $msg) {
- if ($target !== false) $prefix = ucfirst($target) . ' in ' . $this->getFormattedContext();
- else $prefix = ucfirst($this->getFormattedContext());
+ protected function error($target, $msg)
+ {
+ if ($target !== false) {
+ $prefix = ucfirst($target) . ' in ' . $this->getFormattedContext();
+ } else {
+ $prefix = ucfirst($this->getFormattedContext());
+ }
throw new HTMLPurifier_ConfigSchema_Exception(trim($prefix . ' ' . $msg));
}
/**
* Returns a formatted context string.
+ * @return string
*/
- protected function getFormattedContext() {
+ protected function getFormattedContext()
+ {
return implode(' in ', array_reverse($this->context));
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/ValidatorAtom.php b/library/HTMLPurifier/ConfigSchema/ValidatorAtom.php
index b95aea18c..c9aa3644a 100644
--- a/library/HTMLPurifier/ConfigSchema/ValidatorAtom.php
+++ b/library/HTMLPurifier/ConfigSchema/ValidatorAtom.php
@@ -8,59 +8,123 @@
*/
class HTMLPurifier_ConfigSchema_ValidatorAtom
{
+ /**
+ * @type string
+ */
+ protected $context;
- protected $context, $obj, $member, $contents;
+ /**
+ * @type object
+ */
+ protected $obj;
- public function __construct($context, $obj, $member) {
- $this->context = $context;
- $this->obj = $obj;
- $this->member = $member;
- $this->contents =& $obj->$member;
+ /**
+ * @type string
+ */
+ protected $member;
+
+ /**
+ * @type mixed
+ */
+ protected $contents;
+
+ public function __construct($context, $obj, $member)
+ {
+ $this->context = $context;
+ $this->obj = $obj;
+ $this->member = $member;
+ $this->contents =& $obj->$member;
}
- public function assertIsString() {
- if (!is_string($this->contents)) $this->error('must be a string');
+ /**
+ * @return HTMLPurifier_ConfigSchema_ValidatorAtom
+ */
+ public function assertIsString()
+ {
+ if (!is_string($this->contents)) {
+ $this->error('must be a string');
+ }
return $this;
}
- public function assertIsBool() {
- if (!is_bool($this->contents)) $this->error('must be a boolean');
+ /**
+ * @return HTMLPurifier_ConfigSchema_ValidatorAtom
+ */
+ public function assertIsBool()
+ {
+ if (!is_bool($this->contents)) {
+ $this->error('must be a boolean');
+ }
return $this;
}
- public function assertIsArray() {
- if (!is_array($this->contents)) $this->error('must be an array');
+ /**
+ * @return HTMLPurifier_ConfigSchema_ValidatorAtom
+ */
+ public function assertIsArray()
+ {
+ if (!is_array($this->contents)) {
+ $this->error('must be an array');
+ }
return $this;
}
- public function assertNotNull() {
- if ($this->contents === null) $this->error('must not be null');
+ /**
+ * @return HTMLPurifier_ConfigSchema_ValidatorAtom
+ */
+ public function assertNotNull()
+ {
+ if ($this->contents === null) {
+ $this->error('must not be null');
+ }
return $this;
}
- public function assertAlnum() {
+ /**
+ * @return HTMLPurifier_ConfigSchema_ValidatorAtom
+ */
+ public function assertAlnum()
+ {
$this->assertIsString();
- if (!ctype_alnum($this->contents)) $this->error('must be alphanumeric');
+ if (!ctype_alnum($this->contents)) {
+ $this->error('must be alphanumeric');
+ }
return $this;
}
- public function assertNotEmpty() {
- if (empty($this->contents)) $this->error('must not be empty');
+ /**
+ * @return HTMLPurifier_ConfigSchema_ValidatorAtom
+ */
+ public function assertNotEmpty()
+ {
+ if (empty($this->contents)) {
+ $this->error('must not be empty');
+ }
return $this;
}
- public function assertIsLookup() {
+ /**
+ * @return HTMLPurifier_ConfigSchema_ValidatorAtom
+ */
+ public function assertIsLookup()
+ {
$this->assertIsArray();
foreach ($this->contents as $v) {
- if ($v !== true) $this->error('must be a lookup array');
+ if ($v !== true) {
+ $this->error('must be a lookup array');
+ }
}
return $this;
}
- protected function error($msg) {
+ /**
+ * @param string $msg
+ * @throws HTMLPurifier_ConfigSchema_Exception
+ */
+ protected function error($msg)
+ {
throw new HTMLPurifier_ConfigSchema_Exception(ucfirst($this->member) . ' in ' . $this->context . ' ' . $msg);
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema.ser b/library/HTMLPurifier/ConfigSchema/schema.ser
index 22b8d54a5..22ea32185 100644
--- a/library/HTMLPurifier/ConfigSchema/schema.ser
+++ b/library/HTMLPurifier/ConfigSchema/schema.ser
Binary files differ
diff --git a/library/HTMLPurifier/ConfigSchema/schema/CSS.AllowedFonts.txt b/library/HTMLPurifier/ConfigSchema/schema/CSS.AllowedFonts.txt
new file mode 100644
index 000000000..3fd465406
--- /dev/null
+++ b/library/HTMLPurifier/ConfigSchema/schema/CSS.AllowedFonts.txt
@@ -0,0 +1,12 @@
+CSS.AllowedFonts
+TYPE: lookup/null
+VERSION: 4.3.0
+DEFAULT: NULL
+--DESCRIPTION--
+<p>
+ Allows you to manually specify a set of allowed fonts. If
+ <code>NULL</code>, all fonts are allowed. This directive
+ affects generic names (serif, sans-serif, monospace, cursive,
+ fantasy) as well as specific font families.
+</p>
+--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema/CSS.ForbiddenProperties.txt b/library/HTMLPurifier/ConfigSchema/schema/CSS.ForbiddenProperties.txt
new file mode 100644
index 000000000..f1f5c5f12
--- /dev/null
+++ b/library/HTMLPurifier/ConfigSchema/schema/CSS.ForbiddenProperties.txt
@@ -0,0 +1,13 @@
+CSS.ForbiddenProperties
+TYPE: lookup
+VERSION: 4.2.0
+DEFAULT: array()
+--DESCRIPTION--
+<p>
+ This is the logical inverse of %CSS.AllowedProperties, and it will
+ override that directive or any other directive. If possible,
+ %CSS.AllowedProperties is recommended over this directive,
+ because it can sometimes be difficult to tell whether or not you've
+ forbidden all of the CSS properties you truly would like to disallow.
+</p>
+--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema/CSS.Trusted.txt b/library/HTMLPurifier/ConfigSchema/schema/CSS.Trusted.txt
new file mode 100644
index 000000000..e733a61e8
--- /dev/null
+++ b/library/HTMLPurifier/ConfigSchema/schema/CSS.Trusted.txt
@@ -0,0 +1,9 @@
+CSS.Trusted
+TYPE: bool
+VERSION: 4.2.1
+DEFAULT: false
+--DESCRIPTION--
+Indicates whether or not the user's CSS input is trusted or not. If the
+input is trusted, a more expansive set of allowed properties. See
+also %HTML.Trusted.
+--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema/Cache.SerializerPermissions.txt b/library/HTMLPurifier/ConfigSchema/schema/Cache.SerializerPermissions.txt
new file mode 100644
index 000000000..b2b83d9ab
--- /dev/null
+++ b/library/HTMLPurifier/ConfigSchema/schema/Cache.SerializerPermissions.txt
@@ -0,0 +1,11 @@
+Cache.SerializerPermissions
+TYPE: int
+VERSION: 4.3.0
+DEFAULT: 0755
+--DESCRIPTION--
+
+<p>
+ Directory permissions of the files and directories created inside
+ the DefinitionCache/Serializer or other custom serializer path.
+</p>
+--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema/Core.AllowHostnameUnderscore.txt b/library/HTMLPurifier/ConfigSchema/schema/Core.AllowHostnameUnderscore.txt
new file mode 100644
index 000000000..2c910cc7d
--- /dev/null
+++ b/library/HTMLPurifier/ConfigSchema/schema/Core.AllowHostnameUnderscore.txt
@@ -0,0 +1,16 @@
+Core.AllowHostnameUnderscore
+TYPE: bool
+VERSION: 4.6.0
+DEFAULT: false
+--DESCRIPTION--
+<p>
+ By RFC 1123, underscores are not permitted in host names.
+ (This is in contrast to the specification for DNS, RFC
+ 2181, which allows underscores.)
+ However, most browsers do the right thing when faced with
+ an underscore in the host name, and so some poorly written
+ websites are written with the expectation this should work.
+ Setting this parameter to true relaxes our allowed character
+ check so that underscores are permitted.
+</p>
+--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema/Core.ColorKeywords.txt b/library/HTMLPurifier/ConfigSchema/schema/Core.ColorKeywords.txt
index 08b381d34..c572c14ec 100644
--- a/library/HTMLPurifier/ConfigSchema/schema/Core.ColorKeywords.txt
+++ b/library/HTMLPurifier/ConfigSchema/schema/Core.ColorKeywords.txt
@@ -24,5 +24,6 @@ array (
--DESCRIPTION--
Lookup array of color names to six digit hexadecimal number corresponding
-to color, with preceding hash mark. Used when parsing colors.
+to color, with preceding hash mark. Used when parsing colors. The lookup
+is done in a case-insensitive manner.
--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema/Core.DisableExcludes.txt b/library/HTMLPurifier/ConfigSchema/schema/Core.DisableExcludes.txt
new file mode 100644
index 000000000..1cd4c2c96
--- /dev/null
+++ b/library/HTMLPurifier/ConfigSchema/schema/Core.DisableExcludes.txt
@@ -0,0 +1,14 @@
+Core.DisableExcludes
+TYPE: bool
+DEFAULT: false
+VERSION: 4.5.0
+--DESCRIPTION--
+<p>
+ This directive disables SGML-style exclusions, e.g. the exclusion of
+ <code>&lt;object&gt;</code> in any descendant of a
+ <code>&lt;pre&gt;</code> tag. Disabling excludes will allow some
+ invalid documents to pass through HTML Purifier, but HTML Purifier
+ will also be less likely to accidentally remove large documents during
+ processing.
+</p>
+--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema/Core.EnableIDNA.txt b/library/HTMLPurifier/ConfigSchema/schema/Core.EnableIDNA.txt
new file mode 100644
index 000000000..ce243c35d
--- /dev/null
+++ b/library/HTMLPurifier/ConfigSchema/schema/Core.EnableIDNA.txt
@@ -0,0 +1,9 @@
+Core.EnableIDNA
+TYPE: bool
+DEFAULT: false
+VERSION: 4.4.0
+--DESCRIPTION--
+Allows international domain names in URLs. This configuration option
+requires the PEAR Net_IDNA2 module to be installed. It operates by
+punycoding any internationalized host names for maximum portability.
+--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidChildren.txt b/library/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidChildren.txt
index 4d5b5055c..a3881be75 100644
--- a/library/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidChildren.txt
+++ b/library/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidChildren.txt
@@ -2,9 +2,11 @@ Core.EscapeInvalidChildren
TYPE: bool
DEFAULT: false
--DESCRIPTION--
-When true, a child is found that is not allowed in the context of the
+<p><strong>Warning:</strong> this configuration option is no longer does anything as of 4.6.0.</p>
+
+<p>When true, a child is found that is not allowed in the context of the
parent element will be transformed into text as if it were ASCII. When
false, that element and all internal tags will be dropped, though text will
be preserved. There is no option for dropping the element but preserving
-child nodes.
+child nodes.</p>
--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema/Core.NormalizeNewlines.txt b/library/HTMLPurifier/ConfigSchema/schema/Core.NormalizeNewlines.txt
new file mode 100644
index 000000000..d77f5360d
--- /dev/null
+++ b/library/HTMLPurifier/ConfigSchema/schema/Core.NormalizeNewlines.txt
@@ -0,0 +1,11 @@
+Core.NormalizeNewlines
+TYPE: bool
+VERSION: 4.2.0
+DEFAULT: true
+--DESCRIPTION--
+<p>
+ Whether or not to normalize newlines to the operating
+ system default. When <code>false</code>, HTML Purifier
+ will attempt to preserve mixed newline files.
+</p>
+--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema/Core.RemoveProcessingInstructions.txt b/library/HTMLPurifier/ConfigSchema/schema/Core.RemoveProcessingInstructions.txt
new file mode 100644
index 000000000..3397d9f71
--- /dev/null
+++ b/library/HTMLPurifier/ConfigSchema/schema/Core.RemoveProcessingInstructions.txt
@@ -0,0 +1,11 @@
+Core.RemoveProcessingInstructions
+TYPE: bool
+VERSION: 4.2.0
+DEFAULT: false
+--DESCRIPTION--
+Instead of escaping processing instructions in the form <code>&lt;? ...
+?&gt;</code>, remove it out-right. This may be useful if the HTML
+you are validating contains XML processing instruction gunk, however,
+it can also be user-unfriendly for people attempting to post PHP
+snippets.
+--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema/Filter.YouTube.txt b/library/HTMLPurifier/ConfigSchema/schema/Filter.YouTube.txt
index 7fa6536b2..321eaa2d8 100644
--- a/library/HTMLPurifier/ConfigSchema/schema/Filter.YouTube.txt
+++ b/library/HTMLPurifier/ConfigSchema/schema/Filter.YouTube.txt
@@ -4,6 +4,11 @@ VERSION: 3.1.0
DEFAULT: false
--DESCRIPTION--
<p>
+ <strong>Warning:</strong> Deprecated in favor of %HTML.SafeObject and
+ %Output.FlashCompat (turn both on to allow YouTube videos and other
+ Flash content).
+</p>
+<p>
This directive enables YouTube video embedding in HTML Purifier. Check
<a href="http://htmlpurifier.org/docs/enduser-youtube.html">this document
on embedding videos</a> for more information on what this filter does.
diff --git a/library/HTMLPurifier/ConfigSchema/schema/HTML.Allowed.txt b/library/HTMLPurifier/ConfigSchema/schema/HTML.Allowed.txt
index 3e231d2d1..0b2c106da 100644
--- a/library/HTMLPurifier/ConfigSchema/schema/HTML.Allowed.txt
+++ b/library/HTMLPurifier/ConfigSchema/schema/HTML.Allowed.txt
@@ -5,11 +5,14 @@ DEFAULT: NULL
--DESCRIPTION--
<p>
- This is a convenience directive that rolls the functionality of
- %HTML.AllowedElements and %HTML.AllowedAttributes into one directive.
+ This is a preferred convenience directive that combines
+ %HTML.AllowedElements and %HTML.AllowedAttributes.
Specify elements and attributes that are allowed using:
- <code>element1[attr1|attr2],element2...</code>. You can also use
- newlines instead of commas to separate elements.
+ <code>element1[attr1|attr2],element2...</code>. For example,
+ if you would like to only allow paragraphs and links, specify
+ <code>a[href],p</code>. You can specify attributes that apply
+ to all elements using an asterisk, e.g. <code>*[lang]</code>.
+ You can also use newlines instead of commas to separate elements.
</p>
<p>
<strong>Warning</strong>:
diff --git a/library/HTMLPurifier/ConfigSchema/schema/HTML.AllowedComments.txt b/library/HTMLPurifier/ConfigSchema/schema/HTML.AllowedComments.txt
new file mode 100644
index 000000000..140e21423
--- /dev/null
+++ b/library/HTMLPurifier/ConfigSchema/schema/HTML.AllowedComments.txt
@@ -0,0 +1,10 @@
+HTML.AllowedComments
+TYPE: lookup
+VERSION: 4.4.0
+DEFAULT: array()
+--DESCRIPTION--
+A whitelist which indicates what explicit comment bodies should be
+allowed, modulo leading and trailing whitespace. See also %HTML.AllowedCommentsRegexp
+(these directives are union'ed together, so a comment is considered
+valid if any directive deems it valid.)
+--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema/HTML.AllowedCommentsRegexp.txt b/library/HTMLPurifier/ConfigSchema/schema/HTML.AllowedCommentsRegexp.txt
new file mode 100644
index 000000000..f22e977d4
--- /dev/null
+++ b/library/HTMLPurifier/ConfigSchema/schema/HTML.AllowedCommentsRegexp.txt
@@ -0,0 +1,15 @@
+HTML.AllowedCommentsRegexp
+TYPE: string/null
+VERSION: 4.4.0
+DEFAULT: NULL
+--DESCRIPTION--
+A regexp, which if it matches the body of a comment, indicates that
+it should be allowed. Trailing and leading spaces are removed prior
+to running this regular expression.
+<strong>Warning:</strong> Make sure you specify
+correct anchor metacharacters <code>^regex$</code>, otherwise you may accept
+comments that you did not mean to! In particular, the regex <code>/foo|bar/</code>
+is probably not sufficiently strict, since it also allows <code>foobar</code>.
+See also %HTML.AllowedComments (these directives are union'ed together,
+so a comment is considered valid if any directive deems it valid.)
+--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema/HTML.AllowedElements.txt b/library/HTMLPurifier/ConfigSchema/schema/HTML.AllowedElements.txt
index 888d55819..1d3fa7907 100644
--- a/library/HTMLPurifier/ConfigSchema/schema/HTML.AllowedElements.txt
+++ b/library/HTMLPurifier/ConfigSchema/schema/HTML.AllowedElements.txt
@@ -4,12 +4,17 @@ VERSION: 1.3.0
DEFAULT: NULL
--DESCRIPTION--
<p>
- If HTML Purifier's tag set is unsatisfactory for your needs, you
- can overload it with your own list of tags to allow. Note that this
- method is subtractive: it does its job by taking away from HTML Purifier
- usual feature set, so you cannot add a tag that HTML Purifier never
- supported in the first place (like embed, form or head). If you
- change this, you probably also want to change %HTML.AllowedAttributes.
+ If HTML Purifier's tag set is unsatisfactory for your needs, you can
+ overload it with your own list of tags to allow. If you change
+ this, you probably also want to change %HTML.AllowedAttributes; see
+ also %HTML.Allowed which lets you set allowed elements and
+ attributes at the same time.
+</p>
+<p>
+ If you attempt to allow an element that HTML Purifier does not know
+ about, HTML Purifier will raise an error. You will need to manually
+ tell HTML Purifier about this element by using the
+ <a href="http://htmlpurifier.org/docs/enduser-customize.html">advanced customization features.</a>
</p>
<p>
<strong>Warning:</strong> If another directive conflicts with the
diff --git a/library/HTMLPurifier/ConfigSchema/schema/HTML.FlashAllowFullScreen.txt b/library/HTMLPurifier/ConfigSchema/schema/HTML.FlashAllowFullScreen.txt
new file mode 100644
index 000000000..7878dc0bf
--- /dev/null
+++ b/library/HTMLPurifier/ConfigSchema/schema/HTML.FlashAllowFullScreen.txt
@@ -0,0 +1,11 @@
+HTML.FlashAllowFullScreen
+TYPE: bool
+VERSION: 4.2.0
+DEFAULT: false
+--DESCRIPTION--
+<p>
+ Whether or not to permit embedded Flash content from
+ %HTML.SafeObject to expand to the full screen. Corresponds to
+ the <code>allowFullScreen</code> parameter.
+</p>
+--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema/HTML.Nofollow.txt b/library/HTMLPurifier/ConfigSchema/schema/HTML.Nofollow.txt
new file mode 100644
index 000000000..700b30924
--- /dev/null
+++ b/library/HTMLPurifier/ConfigSchema/schema/HTML.Nofollow.txt
@@ -0,0 +1,7 @@
+HTML.Nofollow
+TYPE: bool
+VERSION: 4.3.0
+DEFAULT: FALSE
+--DESCRIPTION--
+If enabled, nofollow rel attributes are added to all outgoing links.
+--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema/HTML.SafeIframe.txt b/library/HTMLPurifier/ConfigSchema/schema/HTML.SafeIframe.txt
new file mode 100644
index 000000000..5eb6ec2b5
--- /dev/null
+++ b/library/HTMLPurifier/ConfigSchema/schema/HTML.SafeIframe.txt
@@ -0,0 +1,13 @@
+HTML.SafeIframe
+TYPE: bool
+VERSION: 4.4.0
+DEFAULT: false
+--DESCRIPTION--
+<p>
+ Whether or not to permit iframe tags in untrusted documents. This
+ directive must be accompanied by a whitelist of permitted iframes,
+ such as %URI.SafeIframeRegexp, otherwise it will fatally error.
+ This directive has no effect on strict doctypes, as iframes are not
+ valid.
+</p>
+--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema/HTML.SafeScripting.txt b/library/HTMLPurifier/ConfigSchema/schema/HTML.SafeScripting.txt
new file mode 100644
index 000000000..5ebc7a19d
--- /dev/null
+++ b/library/HTMLPurifier/ConfigSchema/schema/HTML.SafeScripting.txt
@@ -0,0 +1,10 @@
+HTML.SafeScripting
+TYPE: lookup
+VERSION: 4.5.0
+DEFAULT: array()
+--DESCRIPTION--
+<p>
+ Whether or not to permit script tags to external scripts in documents.
+ Inline scripting is not allowed, and the script must match an explicit whitelist.
+</p>
+--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema/HTML.TargetBlank.txt b/library/HTMLPurifier/ConfigSchema/schema/HTML.TargetBlank.txt
new file mode 100644
index 000000000..587a16778
--- /dev/null
+++ b/library/HTMLPurifier/ConfigSchema/schema/HTML.TargetBlank.txt
@@ -0,0 +1,8 @@
+HTML.TargetBlank
+TYPE: bool
+VERSION: 4.4.0
+DEFAULT: FALSE
+--DESCRIPTION--
+If enabled, <code>target=blank</code> attributes are added to all outgoing links.
+(This includes links from an HTTPS version of a page to an HTTP version.)
+--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema/HTML.Trusted.txt b/library/HTMLPurifier/ConfigSchema/schema/HTML.Trusted.txt
index 89133b1a3..1db9237e9 100644
--- a/library/HTMLPurifier/ConfigSchema/schema/HTML.Trusted.txt
+++ b/library/HTMLPurifier/ConfigSchema/schema/HTML.Trusted.txt
@@ -5,4 +5,5 @@ DEFAULT: false
--DESCRIPTION--
Indicates whether or not the user input is trusted or not. If the input is
trusted, a more expansive set of allowed tags and attributes will be used.
+See also %CSS.Trusted.
--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema/Output.FixInnerHTML.txt b/library/HTMLPurifier/ConfigSchema/schema/Output.FixInnerHTML.txt
new file mode 100644
index 000000000..d6f0d9f29
--- /dev/null
+++ b/library/HTMLPurifier/ConfigSchema/schema/Output.FixInnerHTML.txt
@@ -0,0 +1,15 @@
+Output.FixInnerHTML
+TYPE: bool
+VERSION: 4.3.0
+DEFAULT: true
+--DESCRIPTION--
+<p>
+ If true, HTML Purifier will protect against Internet Explorer's
+ mishandling of the <code>innerHTML</code> attribute by appending
+ a space to any attribute that does not contain angled brackets, spaces
+ or quotes, but contains a backtick. This slightly changes the
+ semantics of any given attribute, so if this is unacceptable and
+ you do not use <code>innerHTML</code> on any of your pages, you can
+ turn this directive off.
+</p>
+--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema/URI.AllowedSchemes.txt b/library/HTMLPurifier/ConfigSchema/schema/URI.AllowedSchemes.txt
index ae3a913f2..666635a5f 100644
--- a/library/HTMLPurifier/ConfigSchema/schema/URI.AllowedSchemes.txt
+++ b/library/HTMLPurifier/ConfigSchema/schema/URI.AllowedSchemes.txt
@@ -12,6 +12,6 @@ array (
--DESCRIPTION--
Whitelist that defines the schemes that a URI is allowed to have. This
prevents XSS attacks from using pseudo-schemes like javascript or mocha.
-There is also support for the <code>data</code> URI scheme, but it is not
-enabled by default.
+There is also support for the <code>data</code> and <code>file</code>
+URI schemes, but they are not enabled by default.
--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema/URI.DisableResources.txt b/library/HTMLPurifier/ConfigSchema/schema/URI.DisableResources.txt
index 51e6ea91f..f891de499 100644
--- a/library/HTMLPurifier/ConfigSchema/schema/URI.DisableResources.txt
+++ b/library/HTMLPurifier/ConfigSchema/schema/URI.DisableResources.txt
@@ -1,12 +1,15 @@
URI.DisableResources
TYPE: bool
-VERSION: 1.3.0
+VERSION: 4.2.0
DEFAULT: false
--DESCRIPTION--
-
<p>
Disables embedding resources, essentially meaning no pictures. You can
still link to them though. See %URI.DisableExternalResources for why
this might be a good idea.
</p>
+<p>
+ <em>Note:</em> While this directive has been available since 1.3.0,
+ it didn't actually start doing anything until 4.2.0.
+</p>
--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ConfigSchema/schema/URI.MungeSecretKey.txt b/library/HTMLPurifier/ConfigSchema/schema/URI.MungeSecretKey.txt
index 0d00f62ea..1e17c1d46 100644
--- a/library/HTMLPurifier/ConfigSchema/schema/URI.MungeSecretKey.txt
+++ b/library/HTMLPurifier/ConfigSchema/schema/URI.MungeSecretKey.txt
@@ -11,7 +11,7 @@ DEFAULT: NULL
to check if a URI has passed through HTML Purifier with this line:
</p>
-<pre>$checksum === sha1($secret_key . ':' . $url)</pre>
+<pre>$checksum === hash_hmac("sha256", $url, $secret_key)</pre>
<p>
If the output is TRUE, the redirector script should accept the URI.
diff --git a/library/HTMLPurifier/ConfigSchema/schema/URI.SafeIframeRegexp.txt b/library/HTMLPurifier/ConfigSchema/schema/URI.SafeIframeRegexp.txt
new file mode 100644
index 000000000..79084832b
--- /dev/null
+++ b/library/HTMLPurifier/ConfigSchema/schema/URI.SafeIframeRegexp.txt
@@ -0,0 +1,22 @@
+URI.SafeIframeRegexp
+TYPE: string/null
+VERSION: 4.4.0
+DEFAULT: NULL
+--DESCRIPTION--
+<p>
+ A PCRE regular expression that will be matched against an iframe URI. This is
+ a relatively inflexible scheme, but works well enough for the most common
+ use-case of iframes: embedded video. This directive only has an effect if
+ %HTML.SafeIframe is enabled. Here are some example values:
+</p>
+<ul>
+ <li><code>%^http://www.youtube.com/embed/%</code> - Allow YouTube videos</li>
+ <li><code>%^http://player.vimeo.com/video/%</code> - Allow Vimeo videos</li>
+ <li><code>%^http://(www.youtube.com/embed/|player.vimeo.com/video/)%</code> - Allow both</li>
+</ul>
+<p>
+ Note that this directive does not give you enough granularity to, say, disable
+ all <code>autoplay</code> videos. Pipe up on the HTML Purifier forums if this
+ is a capability you want.
+</p>
+--# vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ContentSets.php b/library/HTMLPurifier/ContentSets.php
index 3b6e96f5f..543e3f8f1 100644
--- a/library/HTMLPurifier/ContentSets.php
+++ b/library/HTMLPurifier/ContentSets.php
@@ -7,35 +7,42 @@ class HTMLPurifier_ContentSets
{
/**
- * List of content set strings (pipe seperators) indexed by name.
+ * List of content set strings (pipe separators) indexed by name.
+ * @type array
*/
public $info = array();
/**
* List of content set lookups (element => true) indexed by name.
+ * @type array
* @note This is in HTMLPurifier_HTMLDefinition->info_content_sets
*/
public $lookup = array();
/**
- * Synchronized list of defined content sets (keys of info)
+ * Synchronized list of defined content sets (keys of info).
+ * @type array
*/
protected $keys = array();
/**
- * Synchronized list of defined content values (values of info)
+ * Synchronized list of defined content values (values of info).
+ * @type array
*/
protected $values = array();
/**
* Merges in module's content sets, expands identifiers in the content
* sets and populates the keys, values and lookup member variables.
- * @param $modules List of HTMLPurifier_HTMLModule
+ * @param HTMLPurifier_HTMLModule[] $modules List of HTMLPurifier_HTMLModule
*/
- public function __construct($modules) {
- if (!is_array($modules)) $modules = array($modules);
+ public function __construct($modules)
+ {
+ if (!is_array($modules)) {
+ $modules = array($modules);
+ }
// populate content_sets based on module hints
// sorry, no way of overloading
- foreach ($modules as $module_i => $module) {
+ foreach ($modules as $module) {
foreach ($module->content_sets as $key => $value) {
$temp = $this->convertToLookup($value);
if (isset($this->lookup[$key])) {
@@ -70,11 +77,14 @@ class HTMLPurifier_ContentSets
/**
* Accepts a definition; generates and assigns a ChildDef for it
- * @param $def HTMLPurifier_ElementDef reference
- * @param $module Module that defined the ElementDef
+ * @param HTMLPurifier_ElementDef $def HTMLPurifier_ElementDef reference
+ * @param HTMLPurifier_HTMLModule $module Module that defined the ElementDef
*/
- public function generateChildDef(&$def, $module) {
- if (!empty($def->child)) return; // already done!
+ public function generateChildDef(&$def, $module)
+ {
+ if (!empty($def->child)) { // already done!
+ return;
+ }
$content_model = $def->content_model;
if (is_string($content_model)) {
// Assume that $this->keys is alphanumeric
@@ -89,7 +99,8 @@ class HTMLPurifier_ContentSets
$def->child = $this->getChildDef($def, $module);
}
- public function generateChildDefCallback($matches) {
+ public function generateChildDefCallback($matches)
+ {
return $this->info[$matches[0]];
}
@@ -98,10 +109,12 @@ class HTMLPurifier_ContentSets
* member variables in HTMLPurifier_ElementDef
* @note This will also defer to modules for custom HTMLPurifier_ChildDef
* subclasses that need content set expansion
- * @param $def HTMLPurifier_ElementDef to have ChildDef extracted
+ * @param HTMLPurifier_ElementDef $def HTMLPurifier_ElementDef to have ChildDef extracted
+ * @param HTMLPurifier_HTMLModule $module Module that defined the ElementDef
* @return HTMLPurifier_ChildDef corresponding to ElementDef
*/
- public function getChildDef($def, $module) {
+ public function getChildDef($def, $module)
+ {
$value = $def->content_model;
if (is_object($value)) {
trigger_error(
@@ -126,7 +139,9 @@ class HTMLPurifier_ContentSets
if ($module->defines_child_def) { // save a func call
$return = $module->getChildDef($def);
}
- if ($return !== false) return $return;
+ if ($return !== false) {
+ return $return;
+ }
// error-out
trigger_error(
'Could not determine which ChildDef class to instantiate',
@@ -138,18 +153,18 @@ class HTMLPurifier_ContentSets
/**
* Converts a string list of elements separated by pipes into
* a lookup array.
- * @param $string List of elements
- * @return Lookup array of elements
+ * @param string $string List of elements
+ * @return array Lookup array of elements
*/
- protected function convertToLookup($string) {
+ protected function convertToLookup($string)
+ {
$array = explode('|', str_replace(' ', '', $string));
$ret = array();
- foreach ($array as $i => $k) {
+ foreach ($array as $k) {
$ret[$k] = true;
}
return $ret;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Context.php b/library/HTMLPurifier/Context.php
index 9ddf0c547..00e509c85 100644
--- a/library/HTMLPurifier/Context.php
+++ b/library/HTMLPurifier/Context.php
@@ -12,18 +12,22 @@ class HTMLPurifier_Context
/**
* Private array that stores the references.
+ * @type array
*/
private $_storage = array();
/**
* Registers a variable into the context.
- * @param $name String name
- * @param $ref Reference to variable to be registered
+ * @param string $name String name
+ * @param mixed $ref Reference to variable to be registered
*/
- public function register($name, &$ref) {
- if (isset($this->_storage[$name])) {
- trigger_error("Name $name produces collision, cannot re-register",
- E_USER_ERROR);
+ public function register($name, &$ref)
+ {
+ if (array_key_exists($name, $this->_storage)) {
+ trigger_error(
+ "Name $name produces collision, cannot re-register",
+ E_USER_ERROR
+ );
return;
}
$this->_storage[$name] =& $ref;
@@ -31,14 +35,18 @@ class HTMLPurifier_Context
/**
* Retrieves a variable reference from the context.
- * @param $name String name
- * @param $ignore_error Boolean whether or not to ignore error
+ * @param string $name String name
+ * @param bool $ignore_error Boolean whether or not to ignore error
+ * @return mixed
*/
- public function &get($name, $ignore_error = false) {
- if (!isset($this->_storage[$name])) {
+ public function &get($name, $ignore_error = false)
+ {
+ if (!array_key_exists($name, $this->_storage)) {
if (!$ignore_error) {
- trigger_error("Attempted to retrieve non-existent variable $name",
- E_USER_ERROR);
+ trigger_error(
+ "Attempted to retrieve non-existent variable $name",
+ E_USER_ERROR
+ );
}
$var = null; // so we can return by reference
return $var;
@@ -47,13 +55,16 @@ class HTMLPurifier_Context
}
/**
- * Destorys a variable in the context.
- * @param $name String name
+ * Destroys a variable in the context.
+ * @param string $name String name
*/
- public function destroy($name) {
- if (!isset($this->_storage[$name])) {
- trigger_error("Attempted to destroy non-existent variable $name",
- E_USER_ERROR);
+ public function destroy($name)
+ {
+ if (!array_key_exists($name, $this->_storage)) {
+ trigger_error(
+ "Attempted to destroy non-existent variable $name",
+ E_USER_ERROR
+ );
return;
}
unset($this->_storage[$name]);
@@ -61,22 +72,24 @@ class HTMLPurifier_Context
/**
* Checks whether or not the variable exists.
- * @param $name String name
+ * @param string $name String name
+ * @return bool
*/
- public function exists($name) {
- return isset($this->_storage[$name]);
+ public function exists($name)
+ {
+ return array_key_exists($name, $this->_storage);
}
/**
* Loads a series of variables from an associative array
- * @param $context_array Assoc array of variables to load
+ * @param array $context_array Assoc array of variables to load
*/
- public function loadArray($context_array) {
+ public function loadArray($context_array)
+ {
foreach ($context_array as $key => $discard) {
$this->register($key, $context_array[$key]);
}
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Definition.php b/library/HTMLPurifier/Definition.php
index a7408c974..bc6d43364 100644
--- a/library/HTMLPurifier/Definition.php
+++ b/library/HTMLPurifier/Definition.php
@@ -9,31 +9,47 @@ abstract class HTMLPurifier_Definition
/**
* Has setup() been called yet?
+ * @type bool
*/
public $setup = false;
/**
+ * If true, write out the final definition object to the cache after
+ * setup. This will be true only if all invocations to get a raw
+ * definition object are also optimized. This does not cause file
+ * system thrashing because on subsequent calls the cached object
+ * is used and any writes to the raw definition object are short
+ * circuited. See enduser-customize.html for the high-level
+ * picture.
+ * @type bool
+ */
+ public $optimized = null;
+
+ /**
* What type of definition is it?
+ * @type string
*/
public $type;
/**
* Sets up the definition object into the final form, something
* not done by the constructor
- * @param $config HTMLPurifier_Config instance
+ * @param HTMLPurifier_Config $config
*/
abstract protected function doSetup($config);
/**
* Setup function that aborts if already setup
- * @param $config HTMLPurifier_Config instance
+ * @param HTMLPurifier_Config $config
*/
- public function setup($config) {
- if ($this->setup) return;
+ public function setup($config)
+ {
+ if ($this->setup) {
+ return;
+ }
$this->setup = true;
$this->doSetup($config);
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/DefinitionCache.php b/library/HTMLPurifier/DefinitionCache.php
index c6e1e388c..67bb5b1e6 100644
--- a/library/HTMLPurifier/DefinitionCache.php
+++ b/library/HTMLPurifier/DefinitionCache.php
@@ -10,22 +10,27 @@
*/
abstract class HTMLPurifier_DefinitionCache
{
-
+ /**
+ * @type string
+ */
public $type;
/**
- * @param $name Type of definition objects this instance of the
+ * @param string $type Type of definition objects this instance of the
* cache will handle.
*/
- public function __construct($type) {
+ public function __construct($type)
+ {
$this->type = $type;
}
/**
* Generates a unique identifier for a particular configuration
- * @param Instance of HTMLPurifier_Config
+ * @param HTMLPurifier_Config $config Instance of HTMLPurifier_Config
+ * @return string
*/
- public function generateKey($config) {
+ public function generateKey($config)
+ {
return $config->version . ',' . // possibly replace with function calls
$config->getBatchSerial($this->type) . ',' .
$config->get($this->type . '.DefinitionRev');
@@ -34,30 +39,37 @@ abstract class HTMLPurifier_DefinitionCache
/**
* Tests whether or not a key is old with respect to the configuration's
* version and revision number.
- * @param $key Key to test
- * @param $config Instance of HTMLPurifier_Config to test against
+ * @param string $key Key to test
+ * @param HTMLPurifier_Config $config Instance of HTMLPurifier_Config to test against
+ * @return bool
*/
- public function isOld($key, $config) {
- if (substr_count($key, ',') < 2) return true;
+ public function isOld($key, $config)
+ {
+ if (substr_count($key, ',') < 2) {
+ return true;
+ }
list($version, $hash, $revision) = explode(',', $key, 3);
$compare = version_compare($version, $config->version);
// version mismatch, is always old
- if ($compare != 0) return true;
+ if ($compare != 0) {
+ return true;
+ }
// versions match, ids match, check revision number
- if (
- $hash == $config->getBatchSerial($this->type) &&
- $revision < $config->get($this->type . '.DefinitionRev')
- ) return true;
+ if ($hash == $config->getBatchSerial($this->type) &&
+ $revision < $config->get($this->type . '.DefinitionRev')) {
+ return true;
+ }
return false;
}
/**
* Checks if a definition's type jives with the cache's type
* @note Throws an error on failure
- * @param $def Definition object to check
- * @return Boolean true if good, false if not
+ * @param HTMLPurifier_Definition $def Definition object to check
+ * @return bool true if good, false if not
*/
- public function checkDefType($def) {
+ public function checkDefType($def)
+ {
if ($def->type !== $this->type) {
trigger_error("Cannot use definition of type {$def->type} in cache for {$this->type}");
return false;
@@ -67,31 +79,40 @@ abstract class HTMLPurifier_DefinitionCache
/**
* Adds a definition object to the cache
+ * @param HTMLPurifier_Definition $def
+ * @param HTMLPurifier_Config $config
*/
abstract public function add($def, $config);
/**
* Unconditionally saves a definition object to the cache
+ * @param HTMLPurifier_Definition $def
+ * @param HTMLPurifier_Config $config
*/
abstract public function set($def, $config);
/**
* Replace an object in the cache
+ * @param HTMLPurifier_Definition $def
+ * @param HTMLPurifier_Config $config
*/
abstract public function replace($def, $config);
/**
* Retrieves a definition object from the cache
+ * @param HTMLPurifier_Config $config
*/
abstract public function get($config);
/**
* Removes a definition object to the cache
+ * @param HTMLPurifier_Config $config
*/
abstract public function remove($config);
/**
* Clears all objects from cache
+ * @param HTMLPurifier_Config $config
*/
abstract public function flush($config);
@@ -100,9 +121,9 @@ abstract class HTMLPurifier_DefinitionCache
* @note Be carefuly implementing this method as flush. Flush must
* not interfere with other Definition types, and cleanup()
* should not be repeatedly called by userland code.
+ * @param HTMLPurifier_Config $config
*/
abstract public function cleanup($config);
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/DefinitionCache/Decorator.php b/library/HTMLPurifier/DefinitionCache/Decorator.php
index b0fb6d0cd..b57a51b6c 100644
--- a/library/HTMLPurifier/DefinitionCache/Decorator.php
+++ b/library/HTMLPurifier/DefinitionCache/Decorator.php
@@ -5,58 +5,108 @@ class HTMLPurifier_DefinitionCache_Decorator extends HTMLPurifier_DefinitionCach
/**
* Cache object we are decorating
+ * @type HTMLPurifier_DefinitionCache
*/
public $cache;
- public function __construct() {}
+ /**
+ * The name of the decorator
+ * @var string
+ */
+ public $name;
+
+ public function __construct()
+ {
+ }
/**
* Lazy decorator function
- * @param $cache Reference to cache object to decorate
+ * @param HTMLPurifier_DefinitionCache $cache Reference to cache object to decorate
+ * @return HTMLPurifier_DefinitionCache_Decorator
*/
- public function decorate(&$cache) {
+ public function decorate(&$cache)
+ {
$decorator = $this->copy();
// reference is necessary for mocks in PHP 4
$decorator->cache =& $cache;
- $decorator->type = $cache->type;
+ $decorator->type = $cache->type;
return $decorator;
}
/**
* Cross-compatible clone substitute
+ * @return HTMLPurifier_DefinitionCache_Decorator
*/
- public function copy() {
+ public function copy()
+ {
return new HTMLPurifier_DefinitionCache_Decorator();
}
- public function add($def, $config) {
+ /**
+ * @param HTMLPurifier_Definition $def
+ * @param HTMLPurifier_Config $config
+ * @return mixed
+ */
+ public function add($def, $config)
+ {
return $this->cache->add($def, $config);
}
- public function set($def, $config) {
+ /**
+ * @param HTMLPurifier_Definition $def
+ * @param HTMLPurifier_Config $config
+ * @return mixed
+ */
+ public function set($def, $config)
+ {
return $this->cache->set($def, $config);
}
- public function replace($def, $config) {
+ /**
+ * @param HTMLPurifier_Definition $def
+ * @param HTMLPurifier_Config $config
+ * @return mixed
+ */
+ public function replace($def, $config)
+ {
return $this->cache->replace($def, $config);
}
- public function get($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return mixed
+ */
+ public function get($config)
+ {
return $this->cache->get($config);
}
- public function remove($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return mixed
+ */
+ public function remove($config)
+ {
return $this->cache->remove($config);
}
- public function flush($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return mixed
+ */
+ public function flush($config)
+ {
return $this->cache->flush($config);
}
- public function cleanup($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return mixed
+ */
+ public function cleanup($config)
+ {
return $this->cache->cleanup($config);
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/DefinitionCache/Decorator/Cleanup.php b/library/HTMLPurifier/DefinitionCache/Decorator/Cleanup.php
index d4cc35c4b..4991777ce 100644
--- a/library/HTMLPurifier/DefinitionCache/Decorator/Cleanup.php
+++ b/library/HTMLPurifier/DefinitionCache/Decorator/Cleanup.php
@@ -4,40 +4,75 @@
* Definition cache decorator class that cleans up the cache
* whenever there is a cache miss.
*/
-class HTMLPurifier_DefinitionCache_Decorator_Cleanup extends
- HTMLPurifier_DefinitionCache_Decorator
+class HTMLPurifier_DefinitionCache_Decorator_Cleanup extends HTMLPurifier_DefinitionCache_Decorator
{
-
+ /**
+ * @type string
+ */
public $name = 'Cleanup';
- public function copy() {
+ /**
+ * @return HTMLPurifier_DefinitionCache_Decorator_Cleanup
+ */
+ public function copy()
+ {
return new HTMLPurifier_DefinitionCache_Decorator_Cleanup();
}
- public function add($def, $config) {
+ /**
+ * @param HTMLPurifier_Definition $def
+ * @param HTMLPurifier_Config $config
+ * @return mixed
+ */
+ public function add($def, $config)
+ {
$status = parent::add($def, $config);
- if (!$status) parent::cleanup($config);
+ if (!$status) {
+ parent::cleanup($config);
+ }
return $status;
}
- public function set($def, $config) {
+ /**
+ * @param HTMLPurifier_Definition $def
+ * @param HTMLPurifier_Config $config
+ * @return mixed
+ */
+ public function set($def, $config)
+ {
$status = parent::set($def, $config);
- if (!$status) parent::cleanup($config);
+ if (!$status) {
+ parent::cleanup($config);
+ }
return $status;
}
- public function replace($def, $config) {
+ /**
+ * @param HTMLPurifier_Definition $def
+ * @param HTMLPurifier_Config $config
+ * @return mixed
+ */
+ public function replace($def, $config)
+ {
$status = parent::replace($def, $config);
- if (!$status) parent::cleanup($config);
+ if (!$status) {
+ parent::cleanup($config);
+ }
return $status;
}
- public function get($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return mixed
+ */
+ public function get($config)
+ {
$ret = parent::get($config);
- if (!$ret) parent::cleanup($config);
+ if (!$ret) {
+ parent::cleanup($config);
+ }
return $ret;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/DefinitionCache/Decorator/Memory.php b/library/HTMLPurifier/DefinitionCache/Decorator/Memory.php
index 18f16d32b..d529dce48 100644
--- a/library/HTMLPurifier/DefinitionCache/Decorator/Memory.php
+++ b/library/HTMLPurifier/DefinitionCache/Decorator/Memory.php
@@ -5,42 +5,81 @@
* to PHP's memory; good for unit tests or circumstances where
* there are lots of configuration objects floating around.
*/
-class HTMLPurifier_DefinitionCache_Decorator_Memory extends
- HTMLPurifier_DefinitionCache_Decorator
+class HTMLPurifier_DefinitionCache_Decorator_Memory extends HTMLPurifier_DefinitionCache_Decorator
{
-
+ /**
+ * @type array
+ */
protected $definitions;
+
+ /**
+ * @type string
+ */
public $name = 'Memory';
- public function copy() {
+ /**
+ * @return HTMLPurifier_DefinitionCache_Decorator_Memory
+ */
+ public function copy()
+ {
return new HTMLPurifier_DefinitionCache_Decorator_Memory();
}
- public function add($def, $config) {
+ /**
+ * @param HTMLPurifier_Definition $def
+ * @param HTMLPurifier_Config $config
+ * @return mixed
+ */
+ public function add($def, $config)
+ {
$status = parent::add($def, $config);
- if ($status) $this->definitions[$this->generateKey($config)] = $def;
+ if ($status) {
+ $this->definitions[$this->generateKey($config)] = $def;
+ }
return $status;
}
- public function set($def, $config) {
+ /**
+ * @param HTMLPurifier_Definition $def
+ * @param HTMLPurifier_Config $config
+ * @return mixed
+ */
+ public function set($def, $config)
+ {
$status = parent::set($def, $config);
- if ($status) $this->definitions[$this->generateKey($config)] = $def;
+ if ($status) {
+ $this->definitions[$this->generateKey($config)] = $def;
+ }
return $status;
}
- public function replace($def, $config) {
+ /**
+ * @param HTMLPurifier_Definition $def
+ * @param HTMLPurifier_Config $config
+ * @return mixed
+ */
+ public function replace($def, $config)
+ {
$status = parent::replace($def, $config);
- if ($status) $this->definitions[$this->generateKey($config)] = $def;
+ if ($status) {
+ $this->definitions[$this->generateKey($config)] = $def;
+ }
return $status;
}
- public function get($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return mixed
+ */
+ public function get($config)
+ {
$key = $this->generateKey($config);
- if (isset($this->definitions[$key])) return $this->definitions[$key];
+ if (isset($this->definitions[$key])) {
+ return $this->definitions[$key];
+ }
$this->definitions[$key] = parent::get($config);
return $this->definitions[$key];
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/DefinitionCache/Decorator/Template.php.in b/library/HTMLPurifier/DefinitionCache/Decorator/Template.php.in
index 21a8fcfda..b1fec8d36 100644
--- a/library/HTMLPurifier/DefinitionCache/Decorator/Template.php.in
+++ b/library/HTMLPurifier/DefinitionCache/Decorator/Template.php.in
@@ -5,43 +5,78 @@ require_once 'HTMLPurifier/DefinitionCache/Decorator.php';
/**
* Definition cache decorator template.
*/
-class HTMLPurifier_DefinitionCache_Decorator_Template extends
- HTMLPurifier_DefinitionCache_Decorator
+class HTMLPurifier_DefinitionCache_Decorator_Template extends HTMLPurifier_DefinitionCache_Decorator
{
- var $name = 'Template'; // replace this
+ /**
+ * @type string
+ */
+ public $name = 'Template'; // replace this
- function copy() {
+ public function copy()
+ {
// replace class name with yours
return new HTMLPurifier_DefinitionCache_Decorator_Template();
}
// remove methods you don't need
- function add($def, $config) {
+ /**
+ * @param HTMLPurifier_Definition $def
+ * @param HTMLPurifier_Config $config
+ * @return mixed
+ */
+ public function add($def, $config)
+ {
return parent::add($def, $config);
}
- function set($def, $config) {
+ /**
+ * @param HTMLPurifier_Definition $def
+ * @param HTMLPurifier_Config $config
+ * @return mixed
+ */
+ public function set($def, $config)
+ {
return parent::set($def, $config);
}
- function replace($def, $config) {
+ /**
+ * @param HTMLPurifier_Definition $def
+ * @param HTMLPurifier_Config $config
+ * @return mixed
+ */
+ public function replace($def, $config)
+ {
return parent::replace($def, $config);
}
- function get($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return mixed
+ */
+ public function get($config)
+ {
return parent::get($config);
}
- function flush() {
- return parent::flush();
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return mixed
+ */
+ public function flush($config)
+ {
+ return parent::flush($config);
}
- function cleanup($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return mixed
+ */
+ public function cleanup($config)
+ {
return parent::cleanup($config);
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/DefinitionCache/Null.php b/library/HTMLPurifier/DefinitionCache/Null.php
index 41d97e734..d9a75ce22 100644
--- a/library/HTMLPurifier/DefinitionCache/Null.php
+++ b/library/HTMLPurifier/DefinitionCache/Null.php
@@ -6,34 +6,71 @@
class HTMLPurifier_DefinitionCache_Null extends HTMLPurifier_DefinitionCache
{
- public function add($def, $config) {
+ /**
+ * @param HTMLPurifier_Definition $def
+ * @param HTMLPurifier_Config $config
+ * @return bool
+ */
+ public function add($def, $config)
+ {
return false;
}
- public function set($def, $config) {
+ /**
+ * @param HTMLPurifier_Definition $def
+ * @param HTMLPurifier_Config $config
+ * @return bool
+ */
+ public function set($def, $config)
+ {
return false;
}
- public function replace($def, $config) {
+ /**
+ * @param HTMLPurifier_Definition $def
+ * @param HTMLPurifier_Config $config
+ * @return bool
+ */
+ public function replace($def, $config)
+ {
return false;
}
- public function remove($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return bool
+ */
+ public function remove($config)
+ {
return false;
}
- public function get($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return bool
+ */
+ public function get($config)
+ {
return false;
}
- public function flush($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return bool
+ */
+ public function flush($config)
+ {
return false;
}
- public function cleanup($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return bool
+ */
+ public function cleanup($config)
+ {
return false;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/DefinitionCache/Serializer.php b/library/HTMLPurifier/DefinitionCache/Serializer.php
index 7a6aa93f0..ecacb88fe 100644
--- a/library/HTMLPurifier/DefinitionCache/Serializer.php
+++ b/library/HTMLPurifier/DefinitionCache/Serializer.php
@@ -1,83 +1,160 @@
<?php
-class HTMLPurifier_DefinitionCache_Serializer extends
- HTMLPurifier_DefinitionCache
+class HTMLPurifier_DefinitionCache_Serializer extends HTMLPurifier_DefinitionCache
{
- public function add($def, $config) {
- if (!$this->checkDefType($def)) return;
+ /**
+ * @param HTMLPurifier_Definition $def
+ * @param HTMLPurifier_Config $config
+ * @return int|bool
+ */
+ public function add($def, $config)
+ {
+ if (!$this->checkDefType($def)) {
+ return;
+ }
$file = $this->generateFilePath($config);
- if (file_exists($file)) return false;
- if (!$this->_prepareDir($config)) return false;
- return $this->_write($file, serialize($def));
+ if (file_exists($file)) {
+ return false;
+ }
+ if (!$this->_prepareDir($config)) {
+ return false;
+ }
+ return $this->_write($file, serialize($def), $config);
}
- public function set($def, $config) {
- if (!$this->checkDefType($def)) return;
+ /**
+ * @param HTMLPurifier_Definition $def
+ * @param HTMLPurifier_Config $config
+ * @return int|bool
+ */
+ public function set($def, $config)
+ {
+ if (!$this->checkDefType($def)) {
+ return;
+ }
$file = $this->generateFilePath($config);
- if (!$this->_prepareDir($config)) return false;
- return $this->_write($file, serialize($def));
+ if (!$this->_prepareDir($config)) {
+ return false;
+ }
+ return $this->_write($file, serialize($def), $config);
}
- public function replace($def, $config) {
- if (!$this->checkDefType($def)) return;
+ /**
+ * @param HTMLPurifier_Definition $def
+ * @param HTMLPurifier_Config $config
+ * @return int|bool
+ */
+ public function replace($def, $config)
+ {
+ if (!$this->checkDefType($def)) {
+ return;
+ }
$file = $this->generateFilePath($config);
- if (!file_exists($file)) return false;
- if (!$this->_prepareDir($config)) return false;
- return $this->_write($file, serialize($def));
+ if (!file_exists($file)) {
+ return false;
+ }
+ if (!$this->_prepareDir($config)) {
+ return false;
+ }
+ return $this->_write($file, serialize($def), $config);
}
- public function get($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return bool|HTMLPurifier_Config
+ */
+ public function get($config)
+ {
$file = $this->generateFilePath($config);
- if (!file_exists($file)) return false;
+ if (!file_exists($file)) {
+ return false;
+ }
return unserialize(file_get_contents($file));
}
- public function remove($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return bool
+ */
+ public function remove($config)
+ {
$file = $this->generateFilePath($config);
- if (!file_exists($file)) return false;
+ if (!file_exists($file)) {
+ return false;
+ }
return unlink($file);
}
- public function flush($config) {
- if (!$this->_prepareDir($config)) return false;
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return bool
+ */
+ public function flush($config)
+ {
+ if (!$this->_prepareDir($config)) {
+ return false;
+ }
$dir = $this->generateDirectoryPath($config);
- $dh = opendir($dir);
+ $dh = opendir($dir);
while (false !== ($filename = readdir($dh))) {
- if (empty($filename)) continue;
- if ($filename[0] === '.') continue;
+ if (empty($filename)) {
+ continue;
+ }
+ if ($filename[0] === '.') {
+ continue;
+ }
unlink($dir . '/' . $filename);
}
}
- public function cleanup($config) {
- if (!$this->_prepareDir($config)) return false;
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return bool
+ */
+ public function cleanup($config)
+ {
+ if (!$this->_prepareDir($config)) {
+ return false;
+ }
$dir = $this->generateDirectoryPath($config);
- $dh = opendir($dir);
+ $dh = opendir($dir);
while (false !== ($filename = readdir($dh))) {
- if (empty($filename)) continue;
- if ($filename[0] === '.') continue;
+ if (empty($filename)) {
+ continue;
+ }
+ if ($filename[0] === '.') {
+ continue;
+ }
$key = substr($filename, 0, strlen($filename) - 4);
- if ($this->isOld($key, $config)) unlink($dir . '/' . $filename);
+ if ($this->isOld($key, $config)) {
+ unlink($dir . '/' . $filename);
+ }
}
}
/**
* Generates the file path to the serial file corresponding to
* the configuration and definition name
+ * @param HTMLPurifier_Config $config
+ * @return string
* @todo Make protected
*/
- public function generateFilePath($config) {
+ public function generateFilePath($config)
+ {
$key = $this->generateKey($config);
return $this->generateDirectoryPath($config) . '/' . $key . '.ser';
}
/**
* Generates the path to the directory contain this cache's serial files
+ * @param HTMLPurifier_Config $config
+ * @return string
* @note No trailing slash
* @todo Make protected
*/
- public function generateDirectoryPath($config) {
+ public function generateDirectoryPath($config)
+ {
$base = $this->generateBaseDirectoryPath($config);
return $base . '/' . $this->type;
}
@@ -85,9 +162,12 @@ class HTMLPurifier_DefinitionCache_Serializer extends
/**
* Generates path to base directory that contains all definition type
* serials
+ * @param HTMLPurifier_Config $config
+ * @return mixed|string
* @todo Make protected
*/
- public function generateBaseDirectoryPath($config) {
+ public function generateBaseDirectoryPath($config)
+ {
$base = $config->get('Cache.SerializerPath');
$base = is_null($base) ? HTMLPURIFIER_PREFIX . '/HTMLPurifier/DefinitionCache/Serializer' : $base;
return $base;
@@ -95,34 +175,54 @@ class HTMLPurifier_DefinitionCache_Serializer extends
/**
* Convenience wrapper function for file_put_contents
- * @param $file File name to write to
- * @param $data Data to write into file
- * @return Number of bytes written if success, or false if failure.
+ * @param string $file File name to write to
+ * @param string $data Data to write into file
+ * @param HTMLPurifier_Config $config
+ * @return int|bool Number of bytes written if success, or false if failure.
*/
- private function _write($file, $data) {
- return file_put_contents($file, $data);
+ private function _write($file, $data, $config)
+ {
+ $result = file_put_contents($file, $data);
+ if ($result !== false) {
+ // set permissions of the new file (no execute)
+ $chmod = $config->get('Cache.SerializerPermissions');
+ if (!$chmod) {
+ $chmod = 0644; // invalid config or simpletest
+ }
+ $chmod = $chmod & 0666;
+ chmod($file, $chmod);
+ }
+ return $result;
}
/**
* Prepares the directory that this type stores the serials in
- * @return True if successful
+ * @param HTMLPurifier_Config $config
+ * @return bool True if successful
*/
- private function _prepareDir($config) {
+ private function _prepareDir($config)
+ {
$directory = $this->generateDirectoryPath($config);
+ $chmod = $config->get('Cache.SerializerPermissions');
+ if (!$chmod) {
+ $chmod = 0755; // invalid config or simpletest
+ }
if (!is_dir($directory)) {
$base = $this->generateBaseDirectoryPath($config);
if (!is_dir($base)) {
- trigger_error('Base directory '.$base.' does not exist,
+ trigger_error(
+ 'Base directory ' . $base . ' does not exist,
please create or change using %Cache.SerializerPath',
- E_USER_WARNING);
+ E_USER_WARNING
+ );
return false;
- } elseif (!$this->_testPermissions($base)) {
+ } elseif (!$this->_testPermissions($base, $chmod)) {
return false;
}
- $old = umask(0022); // disable group and world writes
- mkdir($directory);
+ $old = umask(0000);
+ mkdir($directory, $chmod);
umask($old);
- } elseif (!$this->_testPermissions($directory)) {
+ } elseif (!$this->_testPermissions($directory, $chmod)) {
return false;
}
return true;
@@ -131,42 +231,55 @@ class HTMLPurifier_DefinitionCache_Serializer extends
/**
* Tests permissions on a directory and throws out friendly
* error messages and attempts to chmod it itself if possible
+ * @param string $dir Directory path
+ * @param int $chmod Permissions
+ * @return bool True if directory is writable
*/
- private function _testPermissions($dir) {
+ private function _testPermissions($dir, $chmod)
+ {
// early abort, if it is writable, everything is hunky-dory
- if (is_writable($dir)) return true;
+ if (is_writable($dir)) {
+ return true;
+ }
if (!is_dir($dir)) {
// generally, you'll want to handle this beforehand
// so a more specific error message can be given
- trigger_error('Directory '.$dir.' does not exist',
- E_USER_WARNING);
+ trigger_error(
+ 'Directory ' . $dir . ' does not exist',
+ E_USER_WARNING
+ );
return false;
}
if (function_exists('posix_getuid')) {
// POSIX system, we can give more specific advice
if (fileowner($dir) === posix_getuid()) {
// we can chmod it ourselves
- chmod($dir, 0755);
- return true;
+ $chmod = $chmod | 0700;
+ if (chmod($dir, $chmod)) {
+ return true;
+ }
} elseif (filegroup($dir) === posix_getgid()) {
- $chmod = '775';
+ $chmod = $chmod | 0070;
} else {
// PHP's probably running as nobody, so we'll
// need to give global permissions
- $chmod = '777';
+ $chmod = $chmod | 0777;
}
- trigger_error('Directory '.$dir.' not writable, '.
- 'please chmod to ' . $chmod,
- E_USER_WARNING);
+ trigger_error(
+ 'Directory ' . $dir . ' not writable, ' .
+ 'please chmod to ' . decoct($chmod),
+ E_USER_WARNING
+ );
} else {
// generic error message
- trigger_error('Directory '.$dir.' not writable, '.
+ trigger_error(
+ 'Directory ' . $dir . ' not writable, ' .
'please alter file permissions',
- E_USER_WARNING);
+ E_USER_WARNING
+ );
}
return false;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/DefinitionCache/Serializer/README b/library/HTMLPurifier/DefinitionCache/Serializer/README
index 2e35c1c3d..2e35c1c3d 100644..100755
--- a/library/HTMLPurifier/DefinitionCache/Serializer/README
+++ b/library/HTMLPurifier/DefinitionCache/Serializer/README
diff --git a/library/HTMLPurifier/DefinitionCacheFactory.php b/library/HTMLPurifier/DefinitionCacheFactory.php
index a6ead6281..fd1cc9be4 100644
--- a/library/HTMLPurifier/DefinitionCacheFactory.php
+++ b/library/HTMLPurifier/DefinitionCacheFactory.php
@@ -5,22 +5,36 @@
*/
class HTMLPurifier_DefinitionCacheFactory
{
-
+ /**
+ * @type array
+ */
protected $caches = array('Serializer' => array());
+
+ /**
+ * @type array
+ */
protected $implementations = array();
+
+ /**
+ * @type HTMLPurifier_DefinitionCache_Decorator[]
+ */
protected $decorators = array();
/**
* Initialize default decorators
*/
- public function setup() {
+ public function setup()
+ {
$this->addDecorator('Cleanup');
}
/**
* Retrieves an instance of global definition cache factory.
+ * @param HTMLPurifier_DefinitionCacheFactory $prototype
+ * @return HTMLPurifier_DefinitionCacheFactory
*/
- public static function instance($prototype = null) {
+ public static function instance($prototype = null)
+ {
static $instance;
if ($prototype !== null) {
$instance = $prototype;
@@ -33,19 +47,22 @@ class HTMLPurifier_DefinitionCacheFactory
/**
* Registers a new definition cache object
- * @param $short Short name of cache object, for reference
- * @param $long Full class name of cache object, for construction
+ * @param string $short Short name of cache object, for reference
+ * @param string $long Full class name of cache object, for construction
*/
- public function register($short, $long) {
+ public function register($short, $long)
+ {
$this->implementations[$short] = $long;
}
/**
* Factory method that creates a cache object based on configuration
- * @param $name Name of definitions handled by cache
- * @param $config Instance of HTMLPurifier_Config
+ * @param string $type Name of definitions handled by cache
+ * @param HTMLPurifier_Config $config Config instance
+ * @return mixed
*/
- public function create($type, $config) {
+ public function create($type, $config)
+ {
$method = $config->get('Cache.DefinitionImpl');
if ($method === null) {
return new HTMLPurifier_DefinitionCache_Null($type);
@@ -53,10 +70,8 @@ class HTMLPurifier_DefinitionCacheFactory
if (!empty($this->caches[$method][$type])) {
return $this->caches[$method][$type];
}
- if (
- isset($this->implementations[$method]) &&
- class_exists($class = $this->implementations[$method], false)
- ) {
+ if (isset($this->implementations[$method]) &&
+ class_exists($class = $this->implementations[$method], false)) {
$cache = new $class($type);
} else {
if ($method != 'Serializer') {
@@ -76,16 +91,16 @@ class HTMLPurifier_DefinitionCacheFactory
/**
* Registers a decorator to add to all new cache objects
- * @param
+ * @param HTMLPurifier_DefinitionCache_Decorator|string $decorator An instance or the name of a decorator
*/
- public function addDecorator($decorator) {
+ public function addDecorator($decorator)
+ {
if (is_string($decorator)) {
$class = "HTMLPurifier_DefinitionCache_Decorator_$decorator";
$decorator = new $class;
}
$this->decorators[$decorator->name] = $decorator;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Doctype.php b/library/HTMLPurifier/Doctype.php
index 1e3c574c0..4acd06e5b 100644
--- a/library/HTMLPurifier/Doctype.php
+++ b/library/HTMLPurifier/Doctype.php
@@ -10,42 +10,55 @@ class HTMLPurifier_Doctype
{
/**
* Full name of doctype
+ * @type string
*/
public $name;
/**
* List of standard modules (string identifiers or literal objects)
* that this doctype uses
+ * @type array
*/
public $modules = array();
/**
* List of modules to use for tidying up code
+ * @type array
*/
public $tidyModules = array();
/**
* Is the language derived from XML (i.e. XHTML)?
+ * @type bool
*/
public $xml = true;
/**
* List of aliases for this doctype
+ * @type array
*/
public $aliases = array();
/**
* Public DTD identifier
+ * @type string
*/
public $dtdPublic;
/**
* System DTD identifier
+ * @type string
*/
public $dtdSystem;
- public function __construct($name = null, $xml = true, $modules = array(),
- $tidyModules = array(), $aliases = array(), $dtd_public = null, $dtd_system = null
+ public function __construct(
+ $name = null,
+ $xml = true,
+ $modules = array(),
+ $tidyModules = array(),
+ $aliases = array(),
+ $dtd_public = null,
+ $dtd_system = null
) {
$this->name = $name;
$this->xml = $xml;
diff --git a/library/HTMLPurifier/DoctypeRegistry.php b/library/HTMLPurifier/DoctypeRegistry.php
index 86049e939..acc1d64a6 100644
--- a/library/HTMLPurifier/DoctypeRegistry.php
+++ b/library/HTMLPurifier/DoctypeRegistry.php
@@ -4,12 +4,14 @@ class HTMLPurifier_DoctypeRegistry
{
/**
- * Hash of doctype names to doctype objects
+ * Hash of doctype names to doctype objects.
+ * @type array
*/
protected $doctypes;
/**
- * Lookup table of aliases to real doctype names
+ * Lookup table of aliases to real doctype names.
+ * @type array
*/
protected $aliases;
@@ -17,32 +19,57 @@ class HTMLPurifier_DoctypeRegistry
* Registers a doctype to the registry
* @note Accepts a fully-formed doctype object, or the
* parameters for constructing a doctype object
- * @param $doctype Name of doctype or literal doctype object
- * @param $modules Modules doctype will load
- * @param $modules_for_modes Modules doctype will load for certain modes
- * @param $aliases Alias names for doctype
- * @return Editable registered doctype
+ * @param string $doctype Name of doctype or literal doctype object
+ * @param bool $xml
+ * @param array $modules Modules doctype will load
+ * @param array $tidy_modules Modules doctype will load for certain modes
+ * @param array $aliases Alias names for doctype
+ * @param string $dtd_public
+ * @param string $dtd_system
+ * @return HTMLPurifier_Doctype Editable registered doctype
*/
- public function register($doctype, $xml = true, $modules = array(),
- $tidy_modules = array(), $aliases = array(), $dtd_public = null, $dtd_system = null
+ public function register(
+ $doctype,
+ $xml = true,
+ $modules = array(),
+ $tidy_modules = array(),
+ $aliases = array(),
+ $dtd_public = null,
+ $dtd_system = null
) {
- if (!is_array($modules)) $modules = array($modules);
- if (!is_array($tidy_modules)) $tidy_modules = array($tidy_modules);
- if (!is_array($aliases)) $aliases = array($aliases);
+ if (!is_array($modules)) {
+ $modules = array($modules);
+ }
+ if (!is_array($tidy_modules)) {
+ $tidy_modules = array($tidy_modules);
+ }
+ if (!is_array($aliases)) {
+ $aliases = array($aliases);
+ }
if (!is_object($doctype)) {
$doctype = new HTMLPurifier_Doctype(
- $doctype, $xml, $modules, $tidy_modules, $aliases, $dtd_public, $dtd_system
+ $doctype,
+ $xml,
+ $modules,
+ $tidy_modules,
+ $aliases,
+ $dtd_public,
+ $dtd_system
);
}
$this->doctypes[$doctype->name] = $doctype;
$name = $doctype->name;
// hookup aliases
foreach ($doctype->aliases as $alias) {
- if (isset($this->doctypes[$alias])) continue;
+ if (isset($this->doctypes[$alias])) {
+ continue;
+ }
$this->aliases[$alias] = $name;
}
// remove old aliases
- if (isset($this->aliases[$name])) unset($this->aliases[$name]);
+ if (isset($this->aliases[$name])) {
+ unset($this->aliases[$name]);
+ }
return $doctype;
}
@@ -50,11 +77,14 @@ class HTMLPurifier_DoctypeRegistry
* Retrieves reference to a doctype of a certain name
* @note This function resolves aliases
* @note When possible, use the more fully-featured make()
- * @param $doctype Name of doctype
- * @return Editable doctype object
+ * @param string $doctype Name of doctype
+ * @return HTMLPurifier_Doctype Editable doctype object
*/
- public function get($doctype) {
- if (isset($this->aliases[$doctype])) $doctype = $this->aliases[$doctype];
+ public function get($doctype)
+ {
+ if (isset($this->aliases[$doctype])) {
+ $doctype = $this->aliases[$doctype];
+ }
if (!isset($this->doctypes[$doctype])) {
trigger_error('Doctype ' . htmlspecialchars($doctype) . ' does not exist', E_USER_ERROR);
$anon = new HTMLPurifier_Doctype($doctype);
@@ -70,20 +100,30 @@ class HTMLPurifier_DoctypeRegistry
* can hold on to (this is necessary in order to tell
* Generator whether or not the current document is XML
* based or not).
+ * @param HTMLPurifier_Config $config
+ * @return HTMLPurifier_Doctype
*/
- public function make($config) {
+ public function make($config)
+ {
return clone $this->get($this->getDoctypeFromConfig($config));
}
/**
* Retrieves the doctype from the configuration object
+ * @param HTMLPurifier_Config $config
+ * @return string
*/
- public function getDoctypeFromConfig($config) {
+ public function getDoctypeFromConfig($config)
+ {
// recommended test
$doctype = $config->get('HTML.Doctype');
- if (!empty($doctype)) return $doctype;
+ if (!empty($doctype)) {
+ return $doctype;
+ }
$doctype = $config->get('HTML.CustomDoctype');
- if (!empty($doctype)) return $doctype;
+ if (!empty($doctype)) {
+ return $doctype;
+ }
// backwards-compatibility
if ($config->get('HTML.XHTML')) {
$doctype = 'XHTML 1.0';
@@ -97,7 +137,6 @@ class HTMLPurifier_DoctypeRegistry
}
return $doctype;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ElementDef.php b/library/HTMLPurifier/ElementDef.php
index 5498d9567..d5311cedc 100644
--- a/library/HTMLPurifier/ElementDef.php
+++ b/library/HTMLPurifier/ElementDef.php
@@ -10,15 +10,16 @@
*/
class HTMLPurifier_ElementDef
{
-
/**
* Does the definition work by itself, or is it created solely
* for the purpose of merging into another definition?
+ * @type bool
*/
public $standalone = true;
/**
- * Associative array of attribute name to HTMLPurifier_AttrDef
+ * Associative array of attribute name to HTMLPurifier_AttrDef.
+ * @type array
* @note Before being processed by HTMLPurifier_AttrCollections
* when modules are finalized during
* HTMLPurifier_HTMLDefinition->setup(), this array may also
@@ -30,27 +31,43 @@ class HTMLPurifier_ElementDef
*/
public $attr = array();
+ // XXX: Design note: currently, it's not possible to override
+ // previously defined AttrTransforms without messing around with
+ // the final generated config. This is by design; a previous version
+ // used an associated list of attr_transform, but it was extremely
+ // easy to accidentally override other attribute transforms by
+ // forgetting to specify an index (and just using 0.) While we
+ // could check this by checking the index number and complaining,
+ // there is a second problem which is that it is not at all easy to
+ // tell when something is getting overridden. Combine this with a
+ // codebase where this isn't really being used, and it's perfect for
+ // nuking.
+
/**
- * Indexed list of tag's HTMLPurifier_AttrTransform to be done before validation
+ * List of tags HTMLPurifier_AttrTransform to be done before validation.
+ * @type array
*/
public $attr_transform_pre = array();
/**
- * Indexed list of tag's HTMLPurifier_AttrTransform to be done after validation
+ * List of tags HTMLPurifier_AttrTransform to be done after validation.
+ * @type array
*/
public $attr_transform_post = array();
/**
* HTMLPurifier_ChildDef of this tag.
+ * @type HTMLPurifier_ChildDef
*/
public $child;
/**
- * Abstract string representation of internal ChildDef rules. See
- * HTMLPurifier_ContentSets for how this is parsed and then transformed
+ * Abstract string representation of internal ChildDef rules.
+ * @see HTMLPurifier_ContentSets for how this is parsed and then transformed
* into an HTMLPurifier_ChildDef.
* @warning This is a temporary variable that is not available after
* being processed by HTMLDefinition
+ * @type string
*/
public $content_model;
@@ -60,27 +77,29 @@ class HTMLPurifier_ElementDef
* @warning This must be lowercase
* @warning This is a temporary variable that is not available after
* being processed by HTMLDefinition
+ * @type string
*/
public $content_model_type;
-
-
/**
* Does the element have a content model (#PCDATA | Inline)*? This
* is important for chameleon ins and del processing in
* HTMLPurifier_ChildDef_Chameleon. Dynamically set: modules don't
* have to worry about this one.
+ * @type bool
*/
public $descendants_are_inline = false;
/**
- * List of the names of required attributes this element has. Dynamically
- * populated by HTMLPurifier_HTMLDefinition::getElement
+ * List of the names of required attributes this element has.
+ * Dynamically populated by HTMLPurifier_HTMLDefinition::getElement()
+ * @type array
*/
public $required_attr = array();
/**
* Lookup table of tags excluded from all descendants of this tag.
+ * @type array
* @note SGML permits exclusions for all descendants, but this is
* not possible with DTDs or XML Schemas. W3C has elected to
* use complicated compositions of content_models to simulate
@@ -94,6 +113,7 @@ class HTMLPurifier_ElementDef
/**
* This tag is explicitly auto-closed by the following tags.
+ * @type array
*/
public $autoclose = array();
@@ -101,19 +121,22 @@ class HTMLPurifier_ElementDef
* If a foreign element is found in this element, test if it is
* allowed by this sub-element; if it is, instead of closing the
* current element, place it inside this element.
+ * @type string
*/
public $wrap;
/**
* Whether or not this is a formatting element affected by the
* "Active Formatting Elements" algorithm.
+ * @type bool
*/
public $formatting;
/**
* Low-level factory constructor for creating new standalone element defs
*/
- public static function create($content_model, $content_model_type, $attr) {
+ public static function create($content_model, $content_model_type, $attr)
+ {
$def = new HTMLPurifier_ElementDef();
$def->content_model = $content_model;
$def->content_model_type = $content_model_type;
@@ -125,11 +148,12 @@ class HTMLPurifier_ElementDef
* Merges the values of another element definition into this one.
* Values from the new element def take precedence if a value is
* not mergeable.
+ * @param HTMLPurifier_ElementDef $def
*/
- public function mergeIn($def) {
-
+ public function mergeIn($def)
+ {
// later keys takes precedence
- foreach($def->attr as $k => $v) {
+ foreach ($def->attr as $k => $v) {
if ($k === 0) {
// merge in the includes
// sorry, no way to override an include
@@ -139,28 +163,35 @@ class HTMLPurifier_ElementDef
continue;
}
if ($v === false) {
- if (isset($this->attr[$k])) unset($this->attr[$k]);
+ if (isset($this->attr[$k])) {
+ unset($this->attr[$k]);
+ }
continue;
}
$this->attr[$k] = $v;
}
- $this->_mergeAssocArray($this->attr_transform_pre, $def->attr_transform_pre);
- $this->_mergeAssocArray($this->attr_transform_post, $def->attr_transform_post);
$this->_mergeAssocArray($this->excludes, $def->excludes);
+ $this->attr_transform_pre = array_merge($this->attr_transform_pre, $def->attr_transform_pre);
+ $this->attr_transform_post = array_merge($this->attr_transform_post, $def->attr_transform_post);
- if(!empty($def->content_model)) {
+ if (!empty($def->content_model)) {
$this->content_model =
str_replace("#SUPER", $this->content_model, $def->content_model);
$this->child = false;
}
- if(!empty($def->content_model_type)) {
+ if (!empty($def->content_model_type)) {
$this->content_model_type = $def->content_model_type;
$this->child = false;
}
- if(!is_null($def->child)) $this->child = $def->child;
- if(!is_null($def->formatting)) $this->formatting = $def->formatting;
- if($def->descendants_are_inline) $this->descendants_are_inline = $def->descendants_are_inline;
-
+ if (!is_null($def->child)) {
+ $this->child = $def->child;
+ }
+ if (!is_null($def->formatting)) {
+ $this->formatting = $def->formatting;
+ }
+ if ($def->descendants_are_inline) {
+ $this->descendants_are_inline = $def->descendants_are_inline;
+ }
}
/**
@@ -168,16 +199,18 @@ class HTMLPurifier_ElementDef
* @param $a1 Array by reference that is merged into
* @param $a2 Array that merges into $a1
*/
- private function _mergeAssocArray(&$a1, $a2) {
+ private function _mergeAssocArray(&$a1, $a2)
+ {
foreach ($a2 as $k => $v) {
if ($v === false) {
- if (isset($a1[$k])) unset($a1[$k]);
+ if (isset($a1[$k])) {
+ unset($a1[$k]);
+ }
continue;
}
$a1[$k] = $v;
}
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Encoder.php b/library/HTMLPurifier/Encoder.php
index 2b3140caa..fef9b5890 100644
--- a/library/HTMLPurifier/Encoder.php
+++ b/library/HTMLPurifier/Encoder.php
@@ -10,14 +10,90 @@ class HTMLPurifier_Encoder
/**
* Constructor throws fatal error if you attempt to instantiate class
*/
- private function __construct() {
+ private function __construct()
+ {
trigger_error('Cannot instantiate encoder, call methods statically', E_USER_ERROR);
}
/**
* Error-handler that mutes errors, alternative to shut-up operator.
*/
- public static function muteErrorHandler() {}
+ public static function muteErrorHandler()
+ {
+ }
+
+ /**
+ * iconv wrapper which mutes errors, but doesn't work around bugs.
+ * @param string $in Input encoding
+ * @param string $out Output encoding
+ * @param string $text The text to convert
+ * @return string
+ */
+ public static function unsafeIconv($in, $out, $text)
+ {
+ set_error_handler(array('HTMLPurifier_Encoder', 'muteErrorHandler'));
+ $r = iconv($in, $out, $text);
+ restore_error_handler();
+ return $r;
+ }
+
+ /**
+ * iconv wrapper which mutes errors and works around bugs.
+ * @param string $in Input encoding
+ * @param string $out Output encoding
+ * @param string $text The text to convert
+ * @param int $max_chunk_size
+ * @return string
+ */
+ public static function iconv($in, $out, $text, $max_chunk_size = 8000)
+ {
+ $code = self::testIconvTruncateBug();
+ if ($code == self::ICONV_OK) {
+ return self::unsafeIconv($in, $out, $text);
+ } elseif ($code == self::ICONV_TRUNCATES) {
+ // we can only work around this if the input character set
+ // is utf-8
+ if ($in == 'utf-8') {
+ if ($max_chunk_size < 4) {
+ trigger_error('max_chunk_size is too small', E_USER_WARNING);
+ return false;
+ }
+ // split into 8000 byte chunks, but be careful to handle
+ // multibyte boundaries properly
+ if (($c = strlen($text)) <= $max_chunk_size) {
+ return self::unsafeIconv($in, $out, $text);
+ }
+ $r = '';
+ $i = 0;
+ while (true) {
+ if ($i + $max_chunk_size >= $c) {
+ $r .= self::unsafeIconv($in, $out, substr($text, $i));
+ break;
+ }
+ // wibble the boundary
+ if (0x80 != (0xC0 & ord($text[$i + $max_chunk_size]))) {
+ $chunk_size = $max_chunk_size;
+ } elseif (0x80 != (0xC0 & ord($text[$i + $max_chunk_size - 1]))) {
+ $chunk_size = $max_chunk_size - 1;
+ } elseif (0x80 != (0xC0 & ord($text[$i + $max_chunk_size - 2]))) {
+ $chunk_size = $max_chunk_size - 2;
+ } elseif (0x80 != (0xC0 & ord($text[$i + $max_chunk_size - 3]))) {
+ $chunk_size = $max_chunk_size - 3;
+ } else {
+ return false; // rather confusing UTF-8...
+ }
+ $chunk = substr($text, $i, $chunk_size); // substr doesn't mind overlong lengths
+ $r .= self::unsafeIconv($in, $out, $chunk);
+ $i += $chunk_size;
+ }
+ return $r;
+ } else {
+ return false;
+ }
+ } else {
+ return false;
+ }
+ }
/**
* Cleans a UTF-8 string for well-formedness and SGML validity
@@ -25,6 +101,10 @@ class HTMLPurifier_Encoder
* It will parse according to UTF-8 and return a valid UTF8 string, with
* non-SGML codepoints excluded.
*
+ * @param string $str The string to clean
+ * @param bool $force_php
+ * @return string
+ *
* @note Just for reference, the non-SGML code points are 0 to 31 and
* 127 to 159, inclusive. However, we allow code points 9, 10
* and 13, which are the tab, line feed and carriage return
@@ -44,14 +124,17 @@ class HTMLPurifier_Encoder
* would need that, and I'm probably not going to implement them.
* Once again, PHP 6 should solve all our problems.
*/
- public static function cleanUTF8($str, $force_php = false) {
-
+ public static function cleanUTF8($str, $force_php = false)
+ {
// UTF-8 validity is checked since PHP 4.3.5
// This is an optimization: if the string is already valid UTF-8, no
// need to do PHP stuff. 99% of the time, this will be the case.
// The regexp matches the XML char production, as well as well as excluding
// non-SGML codepoints U+007F to U+009F
- if (preg_match('/^[\x{9}\x{A}\x{D}\x{20}-\x{7E}\x{A0}-\x{D7FF}\x{E000}-\x{FFFD}\x{10000}-\x{10FFFF}]*$/Du', $str)) {
+ if (preg_match(
+ '/^[\x{9}\x{A}\x{D}\x{20}-\x{7E}\x{A0}-\x{D7FF}\x{E000}-\x{FFFD}\x{10000}-\x{10FFFF}]*$/Du',
+ $str
+ )) {
return $str;
}
@@ -70,7 +153,7 @@ class HTMLPurifier_Encoder
$char = '';
$len = strlen($str);
- for($i = 0; $i < $len; $i++) {
+ for ($i = 0; $i < $len; $i++) {
$in = ord($str{$i});
$char .= $str[$i]; // append byte to char
if (0 == $mState) {
@@ -223,8 +306,9 @@ class HTMLPurifier_Encoder
// | 00000000 | 00010000 | 11111111 | 11111111 | Defined upper limit of legal scalar codes
// +----------+----------+----------+----------+
- public static function unichr($code) {
- if($code > 1114111 or $code < 0 or
+ public static function unichr($code)
+ {
+ if ($code > 1114111 or $code < 0 or
($code >= 55296 and $code <= 57343) ) {
// bits are set outside the "valid" range as defined
// by UNICODE 4.1.0
@@ -242,7 +326,7 @@ class HTMLPurifier_Encoder
$y = (($code & 2047) >> 6) | 192;
} else {
$y = (($code & 4032) >> 6) | 128;
- if($code < 65536) {
+ if ($code < 65536) {
$z = (($code >> 12) & 15) | 224;
} else {
$z = (($code >> 12) & 63) | 128;
@@ -252,84 +336,129 @@ class HTMLPurifier_Encoder
}
// set up the actual character
$ret = '';
- if($w) $ret .= chr($w);
- if($z) $ret .= chr($z);
- if($y) $ret .= chr($y);
+ if ($w) {
+ $ret .= chr($w);
+ }
+ if ($z) {
+ $ret .= chr($z);
+ }
+ if ($y) {
+ $ret .= chr($y);
+ }
$ret .= chr($x);
return $ret;
}
/**
- * Converts a string to UTF-8 based on configuration.
+ * @return bool
+ */
+ public static function iconvAvailable()
+ {
+ static $iconv = null;
+ if ($iconv === null) {
+ $iconv = function_exists('iconv') && self::testIconvTruncateBug() != self::ICONV_UNUSABLE;
+ }
+ return $iconv;
+ }
+
+ /**
+ * Convert a string to UTF-8 based on configuration.
+ * @param string $str The string to convert
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return string
*/
- public static function convertToUTF8($str, $config, $context) {
+ public static function convertToUTF8($str, $config, $context)
+ {
$encoding = $config->get('Core.Encoding');
- if ($encoding === 'utf-8') return $str;
+ if ($encoding === 'utf-8') {
+ return $str;
+ }
static $iconv = null;
- if ($iconv === null) $iconv = function_exists('iconv');
- set_error_handler(array('HTMLPurifier_Encoder', 'muteErrorHandler'));
+ if ($iconv === null) {
+ $iconv = self::iconvAvailable();
+ }
if ($iconv && !$config->get('Test.ForceNoIconv')) {
- $str = iconv($encoding, 'utf-8//IGNORE', $str);
+ // unaffected by bugs, since UTF-8 support all characters
+ $str = self::unsafeIconv($encoding, 'utf-8//IGNORE', $str);
if ($str === false) {
// $encoding is not a valid encoding
- restore_error_handler();
trigger_error('Invalid encoding ' . $encoding, E_USER_ERROR);
return '';
}
// If the string is bjorked by Shift_JIS or a similar encoding
// that doesn't support all of ASCII, convert the naughty
// characters to their true byte-wise ASCII/UTF-8 equivalents.
- $str = strtr($str, HTMLPurifier_Encoder::testEncodingSupportsASCII($encoding));
- restore_error_handler();
+ $str = strtr($str, self::testEncodingSupportsASCII($encoding));
return $str;
} elseif ($encoding === 'iso-8859-1') {
$str = utf8_encode($str);
- restore_error_handler();
return $str;
}
- trigger_error('Encoding not supported, please install iconv', E_USER_ERROR);
+ $bug = HTMLPurifier_Encoder::testIconvTruncateBug();
+ if ($bug == self::ICONV_OK) {
+ trigger_error('Encoding not supported, please install iconv', E_USER_ERROR);
+ } else {
+ trigger_error(
+ 'You have a buggy version of iconv, see https://bugs.php.net/bug.php?id=48147 ' .
+ 'and http://sourceware.org/bugzilla/show_bug.cgi?id=13541',
+ E_USER_ERROR
+ );
+ }
}
/**
* Converts a string from UTF-8 based on configuration.
+ * @param string $str The string to convert
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return string
* @note Currently, this is a lossy conversion, with unexpressable
* characters being omitted.
*/
- public static function convertFromUTF8($str, $config, $context) {
+ public static function convertFromUTF8($str, $config, $context)
+ {
$encoding = $config->get('Core.Encoding');
- if ($encoding === 'utf-8') return $str;
- static $iconv = null;
- if ($iconv === null) $iconv = function_exists('iconv');
if ($escape = $config->get('Core.EscapeNonASCIICharacters')) {
- $str = HTMLPurifier_Encoder::convertToASCIIDumbLossless($str);
+ $str = self::convertToASCIIDumbLossless($str);
+ }
+ if ($encoding === 'utf-8') {
+ return $str;
+ }
+ static $iconv = null;
+ if ($iconv === null) {
+ $iconv = self::iconvAvailable();
}
- set_error_handler(array('HTMLPurifier_Encoder', 'muteErrorHandler'));
if ($iconv && !$config->get('Test.ForceNoIconv')) {
// Undo our previous fix in convertToUTF8, otherwise iconv will barf
- $ascii_fix = HTMLPurifier_Encoder::testEncodingSupportsASCII($encoding);
+ $ascii_fix = self::testEncodingSupportsASCII($encoding);
if (!$escape && !empty($ascii_fix)) {
$clear_fix = array();
- foreach ($ascii_fix as $utf8 => $native) $clear_fix[$utf8] = '';
+ foreach ($ascii_fix as $utf8 => $native) {
+ $clear_fix[$utf8] = '';
+ }
$str = strtr($str, $clear_fix);
}
$str = strtr($str, array_flip($ascii_fix));
// Normal stuff
- $str = iconv('utf-8', $encoding . '//IGNORE', $str);
- restore_error_handler();
+ $str = self::iconv('utf-8', $encoding . '//IGNORE', $str);
return $str;
} elseif ($encoding === 'iso-8859-1') {
$str = utf8_decode($str);
- restore_error_handler();
return $str;
}
trigger_error('Encoding not supported', E_USER_ERROR);
+ // You might be tempted to assume that the ASCII representation
+ // might be OK, however, this is *not* universally true over all
+ // encodings. So we take the conservative route here, rather
+ // than forcibly turn on %Core.EscapeNonASCIICharacters
}
/**
* Lossless (character-wise) conversion of HTML to ASCII
- * @param $str UTF-8 string to be converted to ASCII
- * @returns ASCII encoded string with non-ASCII character entity-ized
+ * @param string $str UTF-8 string to be converted to ASCII
+ * @return string ASCII encoded string with non-ASCII character entity-ized
* @warning Adapted from MediaWiki, claiming fair use: this is a common
* algorithm. If you disagree with this license fudgery,
* implement it yourself.
@@ -342,27 +471,28 @@ class HTMLPurifier_Encoder
* @note Sort of with cleanUTF8() but it assumes that $str is
* well-formed UTF-8
*/
- public static function convertToASCIIDumbLossless($str) {
+ public static function convertToASCIIDumbLossless($str)
+ {
$bytesleft = 0;
$result = '';
$working = 0;
$len = strlen($str);
- for( $i = 0; $i < $len; $i++ ) {
- $bytevalue = ord( $str[$i] );
- if( $bytevalue <= 0x7F ) { //0xxx xxxx
- $result .= chr( $bytevalue );
+ for ($i = 0; $i < $len; $i++) {
+ $bytevalue = ord($str[$i]);
+ if ($bytevalue <= 0x7F) { //0xxx xxxx
+ $result .= chr($bytevalue);
$bytesleft = 0;
- } elseif( $bytevalue <= 0xBF ) { //10xx xxxx
+ } elseif ($bytevalue <= 0xBF) { //10xx xxxx
$working = $working << 6;
$working += ($bytevalue & 0x3F);
$bytesleft--;
- if( $bytesleft <= 0 ) {
+ if ($bytesleft <= 0) {
$result .= "&#" . $working . ";";
}
- } elseif( $bytevalue <= 0xDF ) { //110x xxxx
+ } elseif ($bytevalue <= 0xDF) { //110x xxxx
$working = $bytevalue & 0x1F;
$bytesleft = 1;
- } elseif( $bytevalue <= 0xEF ) { //1110 xxxx
+ } elseif ($bytevalue <= 0xEF) { //1110 xxxx
$working = $bytevalue & 0x0F;
$bytesleft = 2;
} else { //1111 0xxx
@@ -373,6 +503,54 @@ class HTMLPurifier_Encoder
return $result;
}
+ /** No bugs detected in iconv. */
+ const ICONV_OK = 0;
+
+ /** Iconv truncates output if converting from UTF-8 to another
+ * character set with //IGNORE, and a non-encodable character is found */
+ const ICONV_TRUNCATES = 1;
+
+ /** Iconv does not support //IGNORE, making it unusable for
+ * transcoding purposes */
+ const ICONV_UNUSABLE = 2;
+
+ /**
+ * glibc iconv has a known bug where it doesn't handle the magic
+ * //IGNORE stanza correctly. In particular, rather than ignore
+ * characters, it will return an EILSEQ after consuming some number
+ * of characters, and expect you to restart iconv as if it were
+ * an E2BIG. Old versions of PHP did not respect the errno, and
+ * returned the fragment, so as a result you would see iconv
+ * mysteriously truncating output. We can work around this by
+ * manually chopping our input into segments of about 8000
+ * characters, as long as PHP ignores the error code. If PHP starts
+ * paying attention to the error code, iconv becomes unusable.
+ *
+ * @return int Error code indicating severity of bug.
+ */
+ public static function testIconvTruncateBug()
+ {
+ static $code = null;
+ if ($code === null) {
+ // better not use iconv, otherwise infinite loop!
+ $r = self::unsafeIconv('utf-8', 'ascii//IGNORE', "\xCE\xB1" . str_repeat('a', 9000));
+ if ($r === false) {
+ $code = self::ICONV_UNUSABLE;
+ } elseif (($c = strlen($r)) < 9000) {
+ $code = self::ICONV_TRUNCATES;
+ } elseif ($c > 9000) {
+ trigger_error(
+ 'Your copy of iconv is extremely buggy. Please notify HTML Purifier maintainers: ' .
+ 'include your iconv version as per phpversion()',
+ E_USER_ERROR
+ );
+ } else {
+ $code = self::ICONV_OK;
+ }
+ }
+ return $code;
+ }
+
/**
* This expensive function tests whether or not a given character
* encoding supports ASCII. 7/8-bit encodings like Shift_JIS will
@@ -384,10 +562,18 @@ class HTMLPurifier_Encoder
* @return Array of UTF-8 characters to their corresponding ASCII,
* which can be used to "undo" any overzealous iconv action.
*/
- public static function testEncodingSupportsASCII($encoding, $bypass = false) {
+ public static function testEncodingSupportsASCII($encoding, $bypass = false)
+ {
+ // All calls to iconv here are unsafe, proof by case analysis:
+ // If ICONV_OK, no difference.
+ // If ICONV_TRUNCATE, all calls involve one character inputs,
+ // so bug is not triggered.
+ // If ICONV_UNUSABLE, this call is irrelevant
static $encodings = array();
if (!$bypass) {
- if (isset($encodings[$encoding])) return $encodings[$encoding];
+ if (isset($encodings[$encoding])) {
+ return $encodings[$encoding];
+ }
$lenc = strtolower($encoding);
switch ($lenc) {
case 'shift_jis':
@@ -395,32 +581,31 @@ class HTMLPurifier_Encoder
case 'johab':
return array("\xE2\x82\xA9" => '\\');
}
- if (strpos($lenc, 'iso-8859-') === 0) return array();
+ if (strpos($lenc, 'iso-8859-') === 0) {
+ return array();
+ }
}
$ret = array();
- set_error_handler(array('HTMLPurifier_Encoder', 'muteErrorHandler'));
- if (iconv('UTF-8', $encoding, 'a') === false) return false;
+ if (self::unsafeIconv('UTF-8', $encoding, 'a') === false) {
+ return false;
+ }
for ($i = 0x20; $i <= 0x7E; $i++) { // all printable ASCII chars
$c = chr($i); // UTF-8 char
- $r = iconv('UTF-8', "$encoding//IGNORE", $c); // initial conversion
- if (
- $r === '' ||
+ $r = self::unsafeIconv('UTF-8', "$encoding//IGNORE", $c); // initial conversion
+ if ($r === '' ||
// This line is needed for iconv implementations that do not
// omit characters that do not exist in the target character set
- ($r === $c && iconv($encoding, 'UTF-8//IGNORE', $r) !== $c)
+ ($r === $c && self::unsafeIconv($encoding, 'UTF-8//IGNORE', $r) !== $c)
) {
// Reverse engineer: what's the UTF-8 equiv of this byte
// sequence? This assumes that there's no variable width
// encoding that doesn't support ASCII.
- $ret[iconv($encoding, 'UTF-8//IGNORE', $c)] = $c;
+ $ret[self::unsafeIconv($encoding, 'UTF-8//IGNORE', $c)] = $c;
}
}
- restore_error_handler();
$encodings[$encoding] = $ret;
return $ret;
}
-
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/EntityLookup.php b/library/HTMLPurifier/EntityLookup.php
index b4dfce94c..f12ff13a3 100644
--- a/library/HTMLPurifier/EntityLookup.php
+++ b/library/HTMLPurifier/EntityLookup.php
@@ -3,20 +3,23 @@
/**
* Object that provides entity lookup table from entity name to character
*/
-class HTMLPurifier_EntityLookup {
-
+class HTMLPurifier_EntityLookup
+{
/**
* Assoc array of entity name to character represented.
+ * @type array
*/
public $table;
/**
* Sets up the entity lookup table from the serialized file contents.
+ * @param bool $file
* @note The serialized contents are versioned, but were generated
* using the maintenance script generate_entity_file.php
* @warning This is not in constructor to help enforce the Singleton
*/
- public function setup($file = false) {
+ public function setup($file = false)
+ {
if (!$file) {
$file = HTMLPURIFIER_PREFIX . '/HTMLPurifier/EntityLookup/entities.ser';
}
@@ -25,9 +28,11 @@ class HTMLPurifier_EntityLookup {
/**
* Retrieves sole instance of the object.
- * @param Optional prototype of custom lookup table to overload with.
+ * @param bool|HTMLPurifier_EntityLookup $prototype Optional prototype of custom lookup table to overload with.
+ * @return HTMLPurifier_EntityLookup
*/
- public static function instance($prototype = false) {
+ public static function instance($prototype = false)
+ {
// no references, since PHP doesn't copy unless modified
static $instance = null;
if ($prototype) {
@@ -38,7 +43,6 @@ class HTMLPurifier_EntityLookup {
}
return $instance;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/EntityLookup/entities.ser b/library/HTMLPurifier/EntityLookup/entities.ser
index f2b8b8f2d..e8b08128b 100644
--- a/library/HTMLPurifier/EntityLookup/entities.ser
+++ b/library/HTMLPurifier/EntityLookup/entities.ser
@@ -1 +1 @@
-a:246:{s:4:"nbsp";s:2:" ";s:5:"iexcl";s:2:"¡";s:4:"cent";s:2:"¢";s:5:"pound";s:2:"£";s:6:"curren";s:2:"¤";s:3:"yen";s:2:"Â¥";s:6:"brvbar";s:2:"¦";s:4:"sect";s:2:"§";s:3:"uml";s:2:"¨";s:4:"copy";s:2:"©";s:4:"ordf";s:2:"ª";s:5:"laquo";s:2:"«";s:3:"not";s:2:"¬";s:3:"shy";s:2:"­";s:3:"reg";s:2:"®";s:4:"macr";s:2:"¯";s:3:"deg";s:2:"°";s:6:"plusmn";s:2:"±";s:5:"acute";s:2:"´";s:5:"micro";s:2:"µ";s:4:"para";s:2:"¶";s:6:"middot";s:2:"·";s:5:"cedil";s:2:"¸";s:4:"ordm";s:2:"º";s:5:"raquo";s:2:"»";s:6:"iquest";s:2:"¿";s:6:"Agrave";s:2:"À";s:6:"Aacute";s:2:"Ã";s:5:"Acirc";s:2:"Â";s:6:"Atilde";s:2:"Ã";s:4:"Auml";s:2:"Ä";s:5:"Aring";s:2:"Ã…";s:5:"AElig";s:2:"Æ";s:6:"Ccedil";s:2:"Ç";s:6:"Egrave";s:2:"È";s:6:"Eacute";s:2:"É";s:5:"Ecirc";s:2:"Ê";s:4:"Euml";s:2:"Ë";s:6:"Igrave";s:2:"ÃŒ";s:6:"Iacute";s:2:"Ã";s:5:"Icirc";s:2:"ÃŽ";s:4:"Iuml";s:2:"Ã";s:3:"ETH";s:2:"Ã";s:6:"Ntilde";s:2:"Ñ";s:6:"Ograve";s:2:"Ã’";s:6:"Oacute";s:2:"Ó";s:5:"Ocirc";s:2:"Ô";s:6:"Otilde";s:2:"Õ";s:4:"Ouml";s:2:"Ö";s:5:"times";s:2:"×";s:6:"Oslash";s:2:"Ø";s:6:"Ugrave";s:2:"Ù";s:6:"Uacute";s:2:"Ú";s:5:"Ucirc";s:2:"Û";s:4:"Uuml";s:2:"Ãœ";s:6:"Yacute";s:2:"Ã";s:5:"THORN";s:2:"Þ";s:5:"szlig";s:2:"ß";s:6:"agrave";s:2:"à";s:6:"aacute";s:2:"á";s:5:"acirc";s:2:"â";s:6:"atilde";s:2:"ã";s:4:"auml";s:2:"ä";s:5:"aring";s:2:"Ã¥";s:5:"aelig";s:2:"æ";s:6:"ccedil";s:2:"ç";s:6:"egrave";s:2:"è";s:6:"eacute";s:2:"é";s:5:"ecirc";s:2:"ê";s:4:"euml";s:2:"ë";s:6:"igrave";s:2:"ì";s:6:"iacute";s:2:"í";s:5:"icirc";s:2:"î";s:4:"iuml";s:2:"ï";s:3:"eth";s:2:"ð";s:6:"ntilde";s:2:"ñ";s:6:"ograve";s:2:"ò";s:6:"oacute";s:2:"ó";s:5:"ocirc";s:2:"ô";s:6:"otilde";s:2:"õ";s:4:"ouml";s:2:"ö";s:6:"divide";s:2:"÷";s:6:"oslash";s:2:"ø";s:6:"ugrave";s:2:"ù";s:6:"uacute";s:2:"ú";s:5:"ucirc";s:2:"û";s:4:"uuml";s:2:"ü";s:6:"yacute";s:2:"ý";s:5:"thorn";s:2:"þ";s:4:"yuml";s:2:"ÿ";s:4:"quot";s:1:""";s:3:"amp";s:1:"&";s:2:"lt";s:1:"<";s:2:"gt";s:1:">";s:4:"apos";s:1:"'";s:5:"OElig";s:2:"Å’";s:5:"oelig";s:2:"Å“";s:6:"Scaron";s:2:"Å ";s:6:"scaron";s:2:"Å¡";s:4:"Yuml";s:2:"Ÿ";s:4:"circ";s:2:"ˆ";s:5:"tilde";s:2:"Ëœ";s:4:"ensp";s:3:" ";s:4:"emsp";s:3:" ";s:6:"thinsp";s:3:" ";s:4:"zwnj";s:3:"‌";s:3:"zwj";s:3:"â€";s:3:"lrm";s:3:"‎";s:3:"rlm";s:3:"â€";s:5:"ndash";s:3:"–";s:5:"mdash";s:3:"—";s:5:"lsquo";s:3:"‘";s:5:"rsquo";s:3:"’";s:5:"sbquo";s:3:"‚";s:5:"ldquo";s:3:"“";s:5:"rdquo";s:3:"â€";s:5:"bdquo";s:3:"„";s:6:"dagger";s:3:"†";s:6:"Dagger";s:3:"‡";s:6:"permil";s:3:"‰";s:6:"lsaquo";s:3:"‹";s:6:"rsaquo";s:3:"›";s:4:"euro";s:3:"€";s:4:"fnof";s:2:"Æ’";s:5:"Alpha";s:2:"Α";s:4:"Beta";s:2:"Î’";s:5:"Gamma";s:2:"Γ";s:5:"Delta";s:2:"Δ";s:7:"Epsilon";s:2:"Ε";s:4:"Zeta";s:2:"Ζ";s:3:"Eta";s:2:"Η";s:5:"Theta";s:2:"Θ";s:4:"Iota";s:2:"Ι";s:5:"Kappa";s:2:"Κ";s:6:"Lambda";s:2:"Λ";s:2:"Mu";s:2:"Îœ";s:2:"Nu";s:2:"Î";s:2:"Xi";s:2:"Ξ";s:7:"Omicron";s:2:"Ο";s:2:"Pi";s:2:"Π";s:3:"Rho";s:2:"Ρ";s:5:"Sigma";s:2:"Σ";s:3:"Tau";s:2:"Τ";s:7:"Upsilon";s:2:"Î¥";s:3:"Phi";s:2:"Φ";s:3:"Chi";s:2:"Χ";s:3:"Psi";s:2:"Ψ";s:5:"Omega";s:2:"Ω";s:5:"alpha";s:2:"α";s:4:"beta";s:2:"β";s:5:"gamma";s:2:"γ";s:5:"delta";s:2:"δ";s:7:"epsilon";s:2:"ε";s:4:"zeta";s:2:"ζ";s:3:"eta";s:2:"η";s:5:"theta";s:2:"θ";s:4:"iota";s:2:"ι";s:5:"kappa";s:2:"κ";s:6:"lambda";s:2:"λ";s:2:"mu";s:2:"μ";s:2:"nu";s:2:"ν";s:2:"xi";s:2:"ξ";s:7:"omicron";s:2:"ο";s:2:"pi";s:2:"Ï€";s:3:"rho";s:2:"Ï";s:6:"sigmaf";s:2:"Ï‚";s:5:"sigma";s:2:"σ";s:3:"tau";s:2:"Ï„";s:7:"upsilon";s:2:"Ï…";s:3:"phi";s:2:"φ";s:3:"chi";s:2:"χ";s:3:"psi";s:2:"ψ";s:5:"omega";s:2:"ω";s:8:"thetasym";s:2:"Ï‘";s:5:"upsih";s:2:"Ï’";s:3:"piv";s:2:"Ï–";s:4:"bull";s:3:"•";s:6:"hellip";s:3:"…";s:5:"prime";s:3:"′";s:5:"Prime";s:3:"″";s:5:"oline";s:3:"‾";s:5:"frasl";s:3:"â„";s:6:"weierp";s:3:"℘";s:5:"image";s:3:"â„‘";s:4:"real";s:3:"â„œ";s:5:"trade";s:3:"â„¢";s:7:"alefsym";s:3:"ℵ";s:4:"larr";s:3:"â†";s:4:"uarr";s:3:"↑";s:4:"rarr";s:3:"→";s:4:"darr";s:3:"↓";s:4:"harr";s:3:"↔";s:5:"crarr";s:3:"↵";s:4:"lArr";s:3:"â‡";s:4:"uArr";s:3:"⇑";s:4:"rArr";s:3:"⇒";s:4:"dArr";s:3:"⇓";s:4:"hArr";s:3:"⇔";s:6:"forall";s:3:"∀";s:4:"part";s:3:"∂";s:5:"exist";s:3:"∃";s:5:"empty";s:3:"∅";s:5:"nabla";s:3:"∇";s:4:"isin";s:3:"∈";s:5:"notin";s:3:"∉";s:2:"ni";s:3:"∋";s:4:"prod";s:3:"âˆ";s:3:"sum";s:3:"∑";s:5:"minus";s:3:"−";s:6:"lowast";s:3:"∗";s:5:"radic";s:3:"√";s:4:"prop";s:3:"âˆ";s:5:"infin";s:3:"∞";s:3:"ang";s:3:"∠";s:3:"and";s:3:"∧";s:2:"or";s:3:"∨";s:3:"cap";s:3:"∩";s:3:"cup";s:3:"∪";s:3:"int";s:3:"∫";s:3:"sim";s:3:"∼";s:4:"cong";s:3:"≅";s:5:"asymp";s:3:"≈";s:2:"ne";s:3:"≠";s:5:"equiv";s:3:"≡";s:2:"le";s:3:"≤";s:2:"ge";s:3:"≥";s:3:"sub";s:3:"⊂";s:3:"sup";s:3:"⊃";s:4:"nsub";s:3:"⊄";s:4:"sube";s:3:"⊆";s:4:"supe";s:3:"⊇";s:5:"oplus";s:3:"⊕";s:6:"otimes";s:3:"⊗";s:4:"perp";s:3:"⊥";s:4:"sdot";s:3:"â‹…";s:5:"lceil";s:3:"⌈";s:5:"rceil";s:3:"⌉";s:6:"lfloor";s:3:"⌊";s:6:"rfloor";s:3:"⌋";s:4:"lang";s:3:"〈";s:4:"rang";s:3:"〉";s:3:"loz";s:3:"â—Š";s:6:"spades";s:3:"â™ ";s:5:"clubs";s:3:"♣";s:6:"hearts";s:3:"♥";s:5:"diams";s:3:"♦";} \ No newline at end of file
+a:253:{s:4:"fnof";s:2:"Æ’";s:5:"Alpha";s:2:"Α";s:4:"Beta";s:2:"Î’";s:5:"Gamma";s:2:"Γ";s:5:"Delta";s:2:"Δ";s:7:"Epsilon";s:2:"Ε";s:4:"Zeta";s:2:"Ζ";s:3:"Eta";s:2:"Η";s:5:"Theta";s:2:"Θ";s:4:"Iota";s:2:"Ι";s:5:"Kappa";s:2:"Κ";s:6:"Lambda";s:2:"Λ";s:2:"Mu";s:2:"Îœ";s:2:"Nu";s:2:"Î";s:2:"Xi";s:2:"Ξ";s:7:"Omicron";s:2:"Ο";s:2:"Pi";s:2:"Π";s:3:"Rho";s:2:"Ρ";s:5:"Sigma";s:2:"Σ";s:3:"Tau";s:2:"Τ";s:7:"Upsilon";s:2:"Î¥";s:3:"Phi";s:2:"Φ";s:3:"Chi";s:2:"Χ";s:3:"Psi";s:2:"Ψ";s:5:"Omega";s:2:"Ω";s:5:"alpha";s:2:"α";s:4:"beta";s:2:"β";s:5:"gamma";s:2:"γ";s:5:"delta";s:2:"δ";s:7:"epsilon";s:2:"ε";s:4:"zeta";s:2:"ζ";s:3:"eta";s:2:"η";s:5:"theta";s:2:"θ";s:4:"iota";s:2:"ι";s:5:"kappa";s:2:"κ";s:6:"lambda";s:2:"λ";s:2:"mu";s:2:"μ";s:2:"nu";s:2:"ν";s:2:"xi";s:2:"ξ";s:7:"omicron";s:2:"ο";s:2:"pi";s:2:"Ï€";s:3:"rho";s:2:"Ï";s:6:"sigmaf";s:2:"Ï‚";s:5:"sigma";s:2:"σ";s:3:"tau";s:2:"Ï„";s:7:"upsilon";s:2:"Ï…";s:3:"phi";s:2:"φ";s:3:"chi";s:2:"χ";s:3:"psi";s:2:"ψ";s:5:"omega";s:2:"ω";s:8:"thetasym";s:2:"Ï‘";s:5:"upsih";s:2:"Ï’";s:3:"piv";s:2:"Ï–";s:4:"bull";s:3:"•";s:6:"hellip";s:3:"…";s:5:"prime";s:3:"′";s:5:"Prime";s:3:"″";s:5:"oline";s:3:"‾";s:5:"frasl";s:3:"â„";s:6:"weierp";s:3:"℘";s:5:"image";s:3:"â„‘";s:4:"real";s:3:"â„œ";s:5:"trade";s:3:"â„¢";s:7:"alefsym";s:3:"ℵ";s:4:"larr";s:3:"â†";s:4:"uarr";s:3:"↑";s:4:"rarr";s:3:"→";s:4:"darr";s:3:"↓";s:4:"harr";s:3:"↔";s:5:"crarr";s:3:"↵";s:4:"lArr";s:3:"â‡";s:4:"uArr";s:3:"⇑";s:4:"rArr";s:3:"⇒";s:4:"dArr";s:3:"⇓";s:4:"hArr";s:3:"⇔";s:6:"forall";s:3:"∀";s:4:"part";s:3:"∂";s:5:"exist";s:3:"∃";s:5:"empty";s:3:"∅";s:5:"nabla";s:3:"∇";s:4:"isin";s:3:"∈";s:5:"notin";s:3:"∉";s:2:"ni";s:3:"∋";s:4:"prod";s:3:"âˆ";s:3:"sum";s:3:"∑";s:5:"minus";s:3:"−";s:6:"lowast";s:3:"∗";s:5:"radic";s:3:"√";s:4:"prop";s:3:"âˆ";s:5:"infin";s:3:"∞";s:3:"ang";s:3:"∠";s:3:"and";s:3:"∧";s:2:"or";s:3:"∨";s:3:"cap";s:3:"∩";s:3:"cup";s:3:"∪";s:3:"int";s:3:"∫";s:6:"there4";s:3:"∴";s:3:"sim";s:3:"∼";s:4:"cong";s:3:"≅";s:5:"asymp";s:3:"≈";s:2:"ne";s:3:"≠";s:5:"equiv";s:3:"≡";s:2:"le";s:3:"≤";s:2:"ge";s:3:"≥";s:3:"sub";s:3:"⊂";s:3:"sup";s:3:"⊃";s:4:"nsub";s:3:"⊄";s:4:"sube";s:3:"⊆";s:4:"supe";s:3:"⊇";s:5:"oplus";s:3:"⊕";s:6:"otimes";s:3:"⊗";s:4:"perp";s:3:"⊥";s:4:"sdot";s:3:"â‹…";s:5:"lceil";s:3:"⌈";s:5:"rceil";s:3:"⌉";s:6:"lfloor";s:3:"⌊";s:6:"rfloor";s:3:"⌋";s:4:"lang";s:3:"〈";s:4:"rang";s:3:"〉";s:3:"loz";s:3:"â—Š";s:6:"spades";s:3:"â™ ";s:5:"clubs";s:3:"♣";s:6:"hearts";s:3:"♥";s:5:"diams";s:3:"♦";s:4:"quot";s:1:""";s:3:"amp";s:1:"&";s:2:"lt";s:1:"<";s:2:"gt";s:1:">";s:4:"apos";s:1:"'";s:5:"OElig";s:2:"Å’";s:5:"oelig";s:2:"Å“";s:6:"Scaron";s:2:"Å ";s:6:"scaron";s:2:"Å¡";s:4:"Yuml";s:2:"Ÿ";s:4:"circ";s:2:"ˆ";s:5:"tilde";s:2:"Ëœ";s:4:"ensp";s:3:" ";s:4:"emsp";s:3:" ";s:6:"thinsp";s:3:" ";s:4:"zwnj";s:3:"‌";s:3:"zwj";s:3:"â€";s:3:"lrm";s:3:"‎";s:3:"rlm";s:3:"â€";s:5:"ndash";s:3:"–";s:5:"mdash";s:3:"—";s:5:"lsquo";s:3:"‘";s:5:"rsquo";s:3:"’";s:5:"sbquo";s:3:"‚";s:5:"ldquo";s:3:"“";s:5:"rdquo";s:3:"â€";s:5:"bdquo";s:3:"„";s:6:"dagger";s:3:"†";s:6:"Dagger";s:3:"‡";s:6:"permil";s:3:"‰";s:6:"lsaquo";s:3:"‹";s:6:"rsaquo";s:3:"›";s:4:"euro";s:3:"€";s:4:"nbsp";s:2:" ";s:5:"iexcl";s:2:"¡";s:4:"cent";s:2:"¢";s:5:"pound";s:2:"£";s:6:"curren";s:2:"¤";s:3:"yen";s:2:"Â¥";s:6:"brvbar";s:2:"¦";s:4:"sect";s:2:"§";s:3:"uml";s:2:"¨";s:4:"copy";s:2:"©";s:4:"ordf";s:2:"ª";s:5:"laquo";s:2:"«";s:3:"not";s:2:"¬";s:3:"shy";s:2:"­";s:3:"reg";s:2:"®";s:4:"macr";s:2:"¯";s:3:"deg";s:2:"°";s:6:"plusmn";s:2:"±";s:4:"sup2";s:2:"²";s:4:"sup3";s:2:"³";s:5:"acute";s:2:"´";s:5:"micro";s:2:"µ";s:4:"para";s:2:"¶";s:6:"middot";s:2:"·";s:5:"cedil";s:2:"¸";s:4:"sup1";s:2:"¹";s:4:"ordm";s:2:"º";s:5:"raquo";s:2:"»";s:6:"frac14";s:2:"¼";s:6:"frac12";s:2:"½";s:6:"frac34";s:2:"¾";s:6:"iquest";s:2:"¿";s:6:"Agrave";s:2:"À";s:6:"Aacute";s:2:"Ã";s:5:"Acirc";s:2:"Â";s:6:"Atilde";s:2:"Ã";s:4:"Auml";s:2:"Ä";s:5:"Aring";s:2:"Ã…";s:5:"AElig";s:2:"Æ";s:6:"Ccedil";s:2:"Ç";s:6:"Egrave";s:2:"È";s:6:"Eacute";s:2:"É";s:5:"Ecirc";s:2:"Ê";s:4:"Euml";s:2:"Ë";s:6:"Igrave";s:2:"ÃŒ";s:6:"Iacute";s:2:"Ã";s:5:"Icirc";s:2:"ÃŽ";s:4:"Iuml";s:2:"Ã";s:3:"ETH";s:2:"Ã";s:6:"Ntilde";s:2:"Ñ";s:6:"Ograve";s:2:"Ã’";s:6:"Oacute";s:2:"Ó";s:5:"Ocirc";s:2:"Ô";s:6:"Otilde";s:2:"Õ";s:4:"Ouml";s:2:"Ö";s:5:"times";s:2:"×";s:6:"Oslash";s:2:"Ø";s:6:"Ugrave";s:2:"Ù";s:6:"Uacute";s:2:"Ú";s:5:"Ucirc";s:2:"Û";s:4:"Uuml";s:2:"Ãœ";s:6:"Yacute";s:2:"Ã";s:5:"THORN";s:2:"Þ";s:5:"szlig";s:2:"ß";s:6:"agrave";s:2:"à";s:6:"aacute";s:2:"á";s:5:"acirc";s:2:"â";s:6:"atilde";s:2:"ã";s:4:"auml";s:2:"ä";s:5:"aring";s:2:"Ã¥";s:5:"aelig";s:2:"æ";s:6:"ccedil";s:2:"ç";s:6:"egrave";s:2:"è";s:6:"eacute";s:2:"é";s:5:"ecirc";s:2:"ê";s:4:"euml";s:2:"ë";s:6:"igrave";s:2:"ì";s:6:"iacute";s:2:"í";s:5:"icirc";s:2:"î";s:4:"iuml";s:2:"ï";s:3:"eth";s:2:"ð";s:6:"ntilde";s:2:"ñ";s:6:"ograve";s:2:"ò";s:6:"oacute";s:2:"ó";s:5:"ocirc";s:2:"ô";s:6:"otilde";s:2:"õ";s:4:"ouml";s:2:"ö";s:6:"divide";s:2:"÷";s:6:"oslash";s:2:"ø";s:6:"ugrave";s:2:"ù";s:6:"uacute";s:2:"ú";s:5:"ucirc";s:2:"û";s:4:"uuml";s:2:"ü";s:6:"yacute";s:2:"ý";s:5:"thorn";s:2:"þ";s:4:"yuml";s:2:"ÿ";} \ No newline at end of file
diff --git a/library/HTMLPurifier/EntityParser.php b/library/HTMLPurifier/EntityParser.php
index 8c384472d..61529dcd9 100644
--- a/library/HTMLPurifier/EntityParser.php
+++ b/library/HTMLPurifier/EntityParser.php
@@ -12,19 +12,21 @@ class HTMLPurifier_EntityParser
/**
* Reference to entity lookup table.
+ * @type HTMLPurifier_EntityLookup
*/
protected $_entity_lookup;
/**
* Callback regex string for parsing entities.
+ * @type string
*/
protected $_substituteEntitiesRegex =
-'/&(?:[#]x([a-fA-F0-9]+)|[#]0*(\d+)|([A-Za-z_:][A-Za-z0-9.\-_:]*));?/';
-// 1. hex 2. dec 3. string (XML style)
-
+ '/&(?:[#]x([a-fA-F0-9]+)|[#]0*(\d+)|([A-Za-z_:][A-Za-z0-9.\-_:]*));?/';
+ // 1. hex 2. dec 3. string (XML style)
/**
* Decimal to parsed string conversion table for special entities.
+ * @type array
*/
protected $_special_dec2str =
array(
@@ -37,6 +39,7 @@ class HTMLPurifier_EntityParser
/**
* Stripped entity names to decimal conversion table for special entities.
+ * @type array
*/
protected $_special_ent2dec =
array(
@@ -51,41 +54,45 @@ class HTMLPurifier_EntityParser
* running this whenever you have parsed character is t3h 5uck, we run
* it before everything else.
*
- * @param $string String to have non-special entities parsed.
- * @returns Parsed string.
+ * @param string $string String to have non-special entities parsed.
+ * @return string Parsed string.
*/
- public function substituteNonSpecialEntities($string) {
+ public function substituteNonSpecialEntities($string)
+ {
// it will try to detect missing semicolons, but don't rely on it
return preg_replace_callback(
$this->_substituteEntitiesRegex,
array($this, 'nonSpecialEntityCallback'),
$string
- );
+ );
}
/**
* Callback function for substituteNonSpecialEntities() that does the work.
*
- * @param $matches PCRE matches array, with 0 the entire match, and
+ * @param array $matches PCRE matches array, with 0 the entire match, and
* either index 1, 2 or 3 set with a hex value, dec value,
* or string (respectively).
- * @returns Replacement string.
+ * @return string Replacement string.
*/
- protected function nonSpecialEntityCallback($matches) {
+ protected function nonSpecialEntityCallback($matches)
+ {
// replaces all but big five
$entity = $matches[0];
$is_num = (@$matches[0][1] === '#');
if ($is_num) {
$is_hex = (@$entity[2] === 'x');
$code = $is_hex ? hexdec($matches[1]) : (int) $matches[2];
-
// abort for special characters
- if (isset($this->_special_dec2str[$code])) return $entity;
-
+ if (isset($this->_special_dec2str[$code])) {
+ return $entity;
+ }
return HTMLPurifier_Encoder::unichr($code);
} else {
- if (isset($this->_special_ent2dec[$matches[3]])) return $entity;
+ if (isset($this->_special_ent2dec[$matches[3]])) {
+ return $entity;
+ }
if (!$this->_entity_lookup) {
$this->_entity_lookup = HTMLPurifier_EntityLookup::instance();
}
@@ -103,14 +110,16 @@ class HTMLPurifier_EntityParser
* @notice We try to avoid calling this function because otherwise, it
* would have to be called a lot (for every parsed section).
*
- * @param $string String to have non-special entities parsed.
- * @returns Parsed string.
+ * @param string $string String to have non-special entities parsed.
+ * @return string Parsed string.
*/
- public function substituteSpecialEntities($string) {
+ public function substituteSpecialEntities($string)
+ {
return preg_replace_callback(
$this->_substituteEntitiesRegex,
array($this, 'specialEntityCallback'),
- $string);
+ $string
+ );
}
/**
@@ -118,12 +127,13 @@ class HTMLPurifier_EntityParser
*
* This callback has same syntax as nonSpecialEntityCallback().
*
- * @param $matches PCRE-style matches array, with 0 the entire match, and
+ * @param array $matches PCRE-style matches array, with 0 the entire match, and
* either index 1, 2 or 3 set with a hex value, dec value,
* or string (respectively).
- * @returns Replacement string.
+ * @return string Replacement string.
*/
- protected function specialEntityCallback($matches) {
+ protected function specialEntityCallback($matches)
+ {
$entity = $matches[0];
$is_num = (@$matches[0][1] === '#');
if ($is_num) {
@@ -138,7 +148,6 @@ class HTMLPurifier_EntityParser
$entity;
}
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ErrorCollector.php b/library/HTMLPurifier/ErrorCollector.php
index 6713eaf77..d47e3f2e2 100644
--- a/library/HTMLPurifier/ErrorCollector.php
+++ b/library/HTMLPurifier/ErrorCollector.php
@@ -16,16 +16,46 @@ class HTMLPurifier_ErrorCollector
const MESSAGE = 2;
const CHILDREN = 3;
+ /**
+ * @type array
+ */
protected $errors;
+
+ /**
+ * @type array
+ */
protected $_current;
+
+ /**
+ * @type array
+ */
protected $_stacks = array(array());
+
+ /**
+ * @type HTMLPurifier_Language
+ */
protected $locale;
+
+ /**
+ * @type HTMLPurifier_Generator
+ */
protected $generator;
+
+ /**
+ * @type HTMLPurifier_Context
+ */
protected $context;
+ /**
+ * @type array
+ */
protected $lines = array();
- public function __construct($context) {
+ /**
+ * @param HTMLPurifier_Context $context
+ */
+ public function __construct($context)
+ {
$this->locale =& $context->get('Locale');
$this->context = $context;
$this->_current =& $this->_stacks[0];
@@ -34,13 +64,11 @@ class HTMLPurifier_ErrorCollector
/**
* Sends an error message to the collector for later use
- * @param $severity int Error severity, PHP error style (don't use E_USER_)
- * @param $msg string Error message text
- * @param $subst1 string First substitution for $msg
- * @param $subst2 string ...
+ * @param int $severity Error severity, PHP error style (don't use E_USER_)
+ * @param string $msg Error message text
*/
- public function send($severity, $msg) {
-
+ public function send($severity, $msg)
+ {
$args = array();
if (func_num_args() > 2) {
$args = func_get_args();
@@ -50,7 +78,7 @@ class HTMLPurifier_ErrorCollector
$token = $this->context->get('CurrentToken', true);
$line = $token ? $token->line : $this->context->get('CurrentLine', true);
- $col = $token ? $token->col : $this->context->get('CurrentCol', true);
+ $col = $token ? $token->col : $this->context->get('CurrentCol', true);
$attr = $this->context->get('CurrentAttr', true);
// perform special substitutions, also add custom parameters
@@ -60,7 +88,9 @@ class HTMLPurifier_ErrorCollector
}
if (!is_null($attr)) {
$subst['$CurrentAttr.Name'] = $attr;
- if (isset($token->attr[$attr])) $subst['$CurrentAttr.Value'] = $token->attr[$attr];
+ if (isset($token->attr[$attr])) {
+ $subst['$CurrentAttr.Value'] = $token->attr[$attr];
+ }
}
if (empty($args)) {
@@ -69,7 +99,9 @@ class HTMLPurifier_ErrorCollector
$msg = $this->locale->formatMessage($msg, $args);
}
- if (!empty($subst)) $msg = strtr($msg, $subst);
+ if (!empty($subst)) {
+ $msg = strtr($msg, $subst);
+ }
// (numerically indexed)
$error = array(
@@ -80,16 +112,15 @@ class HTMLPurifier_ErrorCollector
);
$this->_current[] = $error;
-
// NEW CODE BELOW ...
-
- $struct = null;
// Top-level errors are either:
// TOKEN type, if $value is set appropriately, or
// "syntax" type, if $value is null
$new_struct = new HTMLPurifier_ErrorStruct();
$new_struct->type = HTMLPurifier_ErrorStruct::TOKEN;
- if ($token) $new_struct->value = clone $token;
+ if ($token) {
+ $new_struct->value = clone $token;
+ }
if (is_int($line) && is_int($col)) {
if (isset($this->lines[$line][$col])) {
$struct = $this->lines[$line][$col];
@@ -128,30 +159,34 @@ class HTMLPurifier_ErrorCollector
/**
* Retrieves raw error data for custom formatter to use
- * @param List of arrays in format of array(line of error,
- * error severity, error message,
- * recursive sub-errors array)
*/
- public function getRaw() {
+ public function getRaw()
+ {
return $this->errors;
}
/**
* Default HTML formatting implementation for error messages
- * @param $config Configuration array, vital for HTML output nature
- * @param $errors Errors array to display; used for recursion.
+ * @param HTMLPurifier_Config $config Configuration, vital for HTML output nature
+ * @param array $errors Errors array to display; used for recursion.
+ * @return string
*/
- public function getHTMLFormatted($config, $errors = null) {
+ public function getHTMLFormatted($config, $errors = null)
+ {
$ret = array();
$this->generator = new HTMLPurifier_Generator($config, $this->context);
- if ($errors === null) $errors = $this->errors;
+ if ($errors === null) {
+ $errors = $this->errors;
+ }
// 'At line' message needs to be removed
// generation code for new structure goes here. It needs to be recursive.
foreach ($this->lines as $line => $col_array) {
- if ($line == -1) continue;
+ if ($line == -1) {
+ continue;
+ }
foreach ($col_array as $col => $struct) {
$this->_renderStruct($ret, $struct, $line, $col);
}
@@ -168,7 +203,8 @@ class HTMLPurifier_ErrorCollector
}
- private function _renderStruct(&$ret, $struct, $line = null, $col = null) {
+ private function _renderStruct(&$ret, $struct, $line = null, $col = null)
+ {
$stack = array($struct);
$context_stack = array(array());
while ($current = array_pop($stack)) {
@@ -194,7 +230,7 @@ class HTMLPurifier_ErrorCollector
//$string .= '</pre>';
$ret[] = $string;
}
- foreach ($current->children as $type => $array) {
+ foreach ($current->children as $array) {
$context[] = $current;
$stack = array_merge($stack, array_reverse($array, true));
for ($i = count($array); $i > 0; $i--) {
@@ -203,7 +239,6 @@ class HTMLPurifier_ErrorCollector
}
}
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/ErrorStruct.php b/library/HTMLPurifier/ErrorStruct.php
index 9bc8996ec..cf869d321 100644
--- a/library/HTMLPurifier/ErrorStruct.php
+++ b/library/HTMLPurifier/ErrorStruct.php
@@ -19,6 +19,7 @@ class HTMLPurifier_ErrorStruct
/**
* Type of this struct.
+ * @type string
*/
public $type;
@@ -28,11 +29,13 @@ class HTMLPurifier_ErrorStruct
* - TOKEN: Instance of HTMLPurifier_Token
* - ATTR: array('attr-name', 'value')
* - CSSPROP: array('prop-name', 'value')
+ * @type mixed
*/
public $value;
/**
* Errors registered for this structure.
+ * @type array
*/
public $errors = array();
@@ -40,10 +43,17 @@ class HTMLPurifier_ErrorStruct
* Child ErrorStructs that are from this structure. For example, a TOKEN
* ErrorStruct would contain ATTR ErrorStructs. This is a multi-dimensional
* array in structure: [TYPE]['identifier']
+ * @type array
*/
public $children = array();
- public function getChild($type, $id) {
+ /**
+ * @param string $type
+ * @param string $id
+ * @return mixed
+ */
+ public function getChild($type, $id)
+ {
if (!isset($this->children[$type][$id])) {
$this->children[$type][$id] = new HTMLPurifier_ErrorStruct();
$this->children[$type][$id]->type = $type;
@@ -51,10 +61,14 @@ class HTMLPurifier_ErrorStruct
return $this->children[$type][$id];
}
- public function addError($severity, $message) {
+ /**
+ * @param int $severity
+ * @param string $message
+ */
+ public function addError($severity, $message)
+ {
$this->errors[] = array($severity, $message);
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Filter.php b/library/HTMLPurifier/Filter.php
index 9a0e7b09f..c1f41ee16 100644
--- a/library/HTMLPurifier/Filter.php
+++ b/library/HTMLPurifier/Filter.php
@@ -23,24 +23,34 @@ class HTMLPurifier_Filter
{
/**
- * Name of the filter for identification purposes
+ * Name of the filter for identification purposes.
+ * @type string
*/
public $name;
/**
* Pre-processor function, handles HTML before HTML Purifier
+ * @param string $html
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return string
*/
- public function preFilter($html, $config, $context) {
+ public function preFilter($html, $config, $context)
+ {
return $html;
}
/**
* Post-processor function, handles HTML after HTML Purifier
+ * @param string $html
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return string
*/
- public function postFilter($html, $config, $context) {
+ public function postFilter($html, $config, $context)
+ {
return $html;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Filter/ExtractStyleBlocks.php b/library/HTMLPurifier/Filter/ExtractStyleBlocks.php
index bbf78a663..08e62c16b 100644
--- a/library/HTMLPurifier/Filter/ExtractStyleBlocks.php
+++ b/library/HTMLPurifier/Filter/ExtractStyleBlocks.php
@@ -1,5 +1,13 @@
<?php
+// why is this a top level function? Because PHP 5.2.0 doesn't seem to
+// understand how to interpret this filter if it's a static method.
+// It's all really silly, but if we go this route it might be reasonable
+// to coalesce all of these methods into one.
+function htmlpurifier_filter_extractstyleblocks_muteerrorhandler()
+{
+}
+
/**
* This filter extracts <style> blocks from input HTML, cleans them up
* using CSSTidy, and then places them in $purifier->context->get('StyleBlocks')
@@ -16,30 +24,77 @@
*/
class HTMLPurifier_Filter_ExtractStyleBlocks extends HTMLPurifier_Filter
{
-
+ /**
+ * @type string
+ */
public $name = 'ExtractStyleBlocks';
+
+ /**
+ * @type array
+ */
private $_styleMatches = array();
+
+ /**
+ * @type csstidy
+ */
private $_tidy;
- public function __construct() {
+ /**
+ * @type HTMLPurifier_AttrDef_HTML_ID
+ */
+ private $_id_attrdef;
+
+ /**
+ * @type HTMLPurifier_AttrDef_CSS_Ident
+ */
+ private $_class_attrdef;
+
+ /**
+ * @type HTMLPurifier_AttrDef_Enum
+ */
+ private $_enum_attrdef;
+
+ public function __construct()
+ {
$this->_tidy = new csstidy();
+ $this->_tidy->set_cfg('lowercase_s', false);
+ $this->_id_attrdef = new HTMLPurifier_AttrDef_HTML_ID(true);
+ $this->_class_attrdef = new HTMLPurifier_AttrDef_CSS_Ident();
+ $this->_enum_attrdef = new HTMLPurifier_AttrDef_Enum(
+ array(
+ 'first-child',
+ 'link',
+ 'visited',
+ 'active',
+ 'hover',
+ 'focus'
+ )
+ );
}
/**
* Save the contents of CSS blocks to style matches
- * @param $matches preg_replace style $matches array
+ * @param array $matches preg_replace style $matches array
*/
- protected function styleCallback($matches) {
+ protected function styleCallback($matches)
+ {
$this->_styleMatches[] = $matches[1];
}
/**
* Removes inline <style> tags from HTML, saves them for later use
+ * @param string $html
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return string
* @todo Extend to indicate non-text/css style blocks
*/
- public function preFilter($html, $config, $context) {
+ public function preFilter($html, $config, $context)
+ {
$tidy = $config->get('Filter.ExtractStyleBlocks.TidyImpl');
- if ($tidy !== null) $this->_tidy = $tidy;
+ if ($tidy !== null) {
+ $this->_tidy = $tidy;
+ }
$html = preg_replace_callback('#<style(?:\s.*)?>(.+)</style>#isU', array($this, 'styleCallback'), $html);
$style_blocks = $this->_styleMatches;
$this->_styleMatches = array(); // reset
@@ -55,12 +110,14 @@ class HTMLPurifier_Filter_ExtractStyleBlocks extends HTMLPurifier_Filter
/**
* Takes CSS (the stuff found in <style>) and cleans it.
* @warning Requires CSSTidy <http://csstidy.sourceforge.net/>
- * @param $css CSS styling to clean
- * @param $config Instance of HTMLPurifier_Config
- * @param $context Instance of HTMLPurifier_Context
- * @return Cleaned CSS
+ * @param string $css CSS styling to clean
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @throws HTMLPurifier_Exception
+ * @return string Cleaned CSS
*/
- public function cleanCSS($css, $config, $context) {
+ public function cleanCSS($css, $config, $context)
+ {
// prepare scope
$scope = $config->get('Filter.ExtractStyleBlocks.Scope');
if ($scope !== null) {
@@ -77,27 +134,170 @@ class HTMLPurifier_Filter_ExtractStyleBlocks extends HTMLPurifier_Filter
$css = substr($css, 0, -3);
}
$css = trim($css);
+ set_error_handler('htmlpurifier_filter_extractstyleblocks_muteerrorhandler');
$this->_tidy->parse($css);
+ restore_error_handler();
$css_definition = $config->getDefinition('CSS');
+ $html_definition = $config->getDefinition('HTML');
+ $new_css = array();
foreach ($this->_tidy->css as $k => $decls) {
// $decls are all CSS declarations inside an @ selector
$new_decls = array();
foreach ($decls as $selector => $style) {
$selector = trim($selector);
- if ($selector === '') continue; // should not happen
- if ($selector[0] === '+') {
- if ($selector !== '' && $selector[0] === '+') continue;
- }
- if (!empty($scopes)) {
- $new_selector = array(); // because multiple ones are possible
- $selectors = array_map('trim', explode(',', $selector));
- foreach ($scopes as $s1) {
- foreach ($selectors as $s2) {
- $new_selector[] = "$s1 $s2";
+ if ($selector === '') {
+ continue;
+ } // should not happen
+ // Parse the selector
+ // Here is the relevant part of the CSS grammar:
+ //
+ // ruleset
+ // : selector [ ',' S* selector ]* '{' ...
+ // selector
+ // : simple_selector [ combinator selector | S+ [ combinator? selector ]? ]?
+ // combinator
+ // : '+' S*
+ // : '>' S*
+ // simple_selector
+ // : element_name [ HASH | class | attrib | pseudo ]*
+ // | [ HASH | class | attrib | pseudo ]+
+ // element_name
+ // : IDENT | '*'
+ // ;
+ // class
+ // : '.' IDENT
+ // ;
+ // attrib
+ // : '[' S* IDENT S* [ [ '=' | INCLUDES | DASHMATCH ] S*
+ // [ IDENT | STRING ] S* ]? ']'
+ // ;
+ // pseudo
+ // : ':' [ IDENT | FUNCTION S* [IDENT S*]? ')' ]
+ // ;
+ //
+ // For reference, here are the relevant tokens:
+ //
+ // HASH #{name}
+ // IDENT {ident}
+ // INCLUDES ==
+ // DASHMATCH |=
+ // STRING {string}
+ // FUNCTION {ident}\(
+ //
+ // And the lexical scanner tokens
+ //
+ // name {nmchar}+
+ // nmchar [_a-z0-9-]|{nonascii}|{escape}
+ // nonascii [\240-\377]
+ // escape {unicode}|\\[^\r\n\f0-9a-f]
+ // unicode \\{h}}{1,6}(\r\n|[ \t\r\n\f])?
+ // ident -?{nmstart}{nmchar*}
+ // nmstart [_a-z]|{nonascii}|{escape}
+ // string {string1}|{string2}
+ // string1 \"([^\n\r\f\\"]|\\{nl}|{escape})*\"
+ // string2 \'([^\n\r\f\\"]|\\{nl}|{escape})*\'
+ //
+ // We'll implement a subset (in order to reduce attack
+ // surface); in particular:
+ //
+ // - No Unicode support
+ // - No escapes support
+ // - No string support (by proxy no attrib support)
+ // - element_name is matched against allowed
+ // elements (some people might find this
+ // annoying...)
+ // - Pseudo-elements one of :first-child, :link,
+ // :visited, :active, :hover, :focus
+
+ // handle ruleset
+ $selectors = array_map('trim', explode(',', $selector));
+ $new_selectors = array();
+ foreach ($selectors as $sel) {
+ // split on +, > and spaces
+ $basic_selectors = preg_split('/\s*([+> ])\s*/', $sel, -1, PREG_SPLIT_DELIM_CAPTURE);
+ // even indices are chunks, odd indices are
+ // delimiters
+ $nsel = null;
+ $delim = null; // guaranteed to be non-null after
+ // two loop iterations
+ for ($i = 0, $c = count($basic_selectors); $i < $c; $i++) {
+ $x = $basic_selectors[$i];
+ if ($i % 2) {
+ // delimiter
+ if ($x === ' ') {
+ $delim = ' ';
+ } else {
+ $delim = ' ' . $x . ' ';
+ }
+ } else {
+ // simple selector
+ $components = preg_split('/([#.:])/', $x, -1, PREG_SPLIT_DELIM_CAPTURE);
+ $sdelim = null;
+ $nx = null;
+ for ($j = 0, $cc = count($components); $j < $cc; $j++) {
+ $y = $components[$j];
+ if ($j === 0) {
+ if ($y === '*' || isset($html_definition->info[$y = strtolower($y)])) {
+ $nx = $y;
+ } else {
+ // $nx stays null; this matters
+ // if we don't manage to find
+ // any valid selector content,
+ // in which case we ignore the
+ // outer $delim
+ }
+ } elseif ($j % 2) {
+ // set delimiter
+ $sdelim = $y;
+ } else {
+ $attrdef = null;
+ if ($sdelim === '#') {
+ $attrdef = $this->_id_attrdef;
+ } elseif ($sdelim === '.') {
+ $attrdef = $this->_class_attrdef;
+ } elseif ($sdelim === ':') {
+ $attrdef = $this->_enum_attrdef;
+ } else {
+ throw new HTMLPurifier_Exception('broken invariant sdelim and preg_split');
+ }
+ $r = $attrdef->validate($y, $config, $context);
+ if ($r !== false) {
+ if ($r !== true) {
+ $y = $r;
+ }
+ if ($nx === null) {
+ $nx = '';
+ }
+ $nx .= $sdelim . $y;
+ }
+ }
+ }
+ if ($nx !== null) {
+ if ($nsel === null) {
+ $nsel = $nx;
+ } else {
+ $nsel .= $delim . $nx;
+ }
+ } else {
+ // delimiters to the left of invalid
+ // basic selector ignored
+ }
+ }
+ }
+ if ($nsel !== null) {
+ if (!empty($scopes)) {
+ foreach ($scopes as $s) {
+ $new_selectors[] = "$s $nsel";
+ }
+ } else {
+ $new_selectors[] = $nsel;
}
}
- $selector = implode(', ', $new_selector); // now it's a string
}
+ if (empty($new_selectors)) {
+ continue;
+ }
+ $selector = implode(', ', $new_selectors);
foreach ($style as $name => $value) {
if (!isset($css_definition->info[$name])) {
unset($style[$name]);
@@ -105,15 +305,19 @@ class HTMLPurifier_Filter_ExtractStyleBlocks extends HTMLPurifier_Filter
}
$def = $css_definition->info[$name];
$ret = $def->validate($value, $config, $context);
- if ($ret === false) unset($style[$name]);
- else $style[$name] = $ret;
+ if ($ret === false) {
+ unset($style[$name]);
+ } else {
+ $style[$name] = $ret;
+ }
}
$new_decls[$selector] = $style;
}
- $this->_tidy->css[$k] = $new_decls;
+ $new_css[$k] = $new_decls;
}
// remove stuff that shouldn't be used, could be reenabled
// after security risks are analyzed
+ $this->_tidy->css = $new_css;
$this->_tidy->import = array();
$this->_tidy->charset = null;
$this->_tidy->namespace = null;
@@ -122,14 +326,13 @@ class HTMLPurifier_Filter_ExtractStyleBlocks extends HTMLPurifier_Filter
// that no funny business occurs (i.e. </style> in a font-family prop).
if ($config->get('Filter.ExtractStyleBlocks.Escaping')) {
$css = str_replace(
- array('<', '>', '&'),
+ array('<', '>', '&'),
array('\3C ', '\3E ', '\26 '),
$css
);
}
return $css;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Filter/YouTube.php b/library/HTMLPurifier/Filter/YouTube.php
index 23df221ea..411519ad6 100644
--- a/library/HTMLPurifier/Filter/YouTube.php
+++ b/library/HTMLPurifier/Filter/YouTube.php
@@ -3,36 +3,62 @@
class HTMLPurifier_Filter_YouTube extends HTMLPurifier_Filter
{
+ /**
+ * @type string
+ */
public $name = 'YouTube';
- public function preFilter($html, $config, $context) {
- $pre_regex = '#<object[^>]+>.+?'.
+ /**
+ * @param string $html
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return string
+ */
+ public function preFilter($html, $config, $context)
+ {
+ $pre_regex = '#<object[^>]+>.+?' .
'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?</object>#s';
$pre_replace = '<span class="youtube-embed">\1</span>';
return preg_replace($pre_regex, $pre_replace, $html);
}
- public function postFilter($html, $config, $context) {
+ /**
+ * @param string $html
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return string
+ */
+ public function postFilter($html, $config, $context)
+ {
$post_regex = '#<span class="youtube-embed">((?:v|cp)/[A-Za-z0-9\-_=]+)</span>#';
return preg_replace_callback($post_regex, array($this, 'postFilterCallback'), $html);
}
- protected function armorUrl($url) {
+ /**
+ * @param $url
+ * @return string
+ */
+ protected function armorUrl($url)
+ {
return str_replace('--', '-&#45;', $url);
}
- protected function postFilterCallback($matches) {
+ /**
+ * @param array $matches
+ * @return string
+ */
+ protected function postFilterCallback($matches)
+ {
$url = $this->armorUrl($matches[1]);
- return '<object width="425" height="350" type="application/x-shockwave-flash" '.
- 'data="http://www.youtube.com/'.$url.'">'.
- '<param name="movie" value="http://www.youtube.com/'.$url.'"></param>'.
- '<!--[if IE]>'.
- '<embed src="http://www.youtube.com/'.$url.'"'.
- 'type="application/x-shockwave-flash"'.
- 'wmode="transparent" width="425" height="350" />'.
- '<![endif]-->'.
- '</object>';
-
+ return '<object width="425" height="350" type="application/x-shockwave-flash" ' .
+ 'data="http://www.youtube.com/' . $url . '">' .
+ '<param name="movie" value="http://www.youtube.com/' . $url . '"></param>' .
+ '<!--[if IE]>' .
+ '<embed src="http://www.youtube.com/' . $url . '"' .
+ 'type="application/x-shockwave-flash"' .
+ 'wmode="transparent" width="425" height="350" />' .
+ '<![endif]-->' .
+ '</object>';
}
}
diff --git a/library/HTMLPurifier/Generator.php b/library/HTMLPurifier/Generator.php
index 4a6241727..6fb568714 100644
--- a/library/HTMLPurifier/Generator.php
+++ b/library/HTMLPurifier/Generator.php
@@ -11,49 +11,64 @@ class HTMLPurifier_Generator
{
/**
- * Whether or not generator should produce XML output
+ * Whether or not generator should produce XML output.
+ * @type bool
*/
private $_xhtml = true;
/**
- * :HACK: Whether or not generator should comment the insides of <script> tags
+ * :HACK: Whether or not generator should comment the insides of <script> tags.
+ * @type bool
*/
private $_scriptFix = false;
/**
* Cache of HTMLDefinition during HTML output to determine whether or
* not attributes should be minimized.
+ * @type HTMLPurifier_HTMLDefinition
*/
private $_def;
/**
- * Cache of %Output.SortAttr
+ * Cache of %Output.SortAttr.
+ * @type bool
*/
private $_sortAttr;
/**
- * Cache of %Output.FlashCompat
+ * Cache of %Output.FlashCompat.
+ * @type bool
*/
private $_flashCompat;
/**
+ * Cache of %Output.FixInnerHTML.
+ * @type bool
+ */
+ private $_innerHTMLFix;
+
+ /**
* Stack for keeping track of object information when outputting IE
* compatibility code.
+ * @type array
*/
private $_flashStack = array();
/**
* Configuration for the generator
+ * @type HTMLPurifier_Config
*/
protected $config;
/**
- * @param $config Instance of HTMLPurifier_Config
- * @param $context Instance of HTMLPurifier_Context
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
*/
- public function __construct($config, $context) {
+ public function __construct($config, $context)
+ {
$this->config = $config;
$this->_scriptFix = $config->get('Output.CommentScriptContents');
+ $this->_innerHTMLFix = $config->get('Output.FixInnerHTML');
$this->_sortAttr = $config->get('Output.SortAttr');
$this->_flashCompat = $config->get('Output.FlashCompat');
$this->_def = $config->getHTMLDefinition();
@@ -62,12 +77,14 @@ class HTMLPurifier_Generator
/**
* Generates HTML from an array of tokens.
- * @param $tokens Array of HTMLPurifier_Token
- * @param $config HTMLPurifier_Config object
- * @return Generated HTML
+ * @param HTMLPurifier_Token[] $tokens Array of HTMLPurifier_Token
+ * @return string Generated HTML
*/
- public function generateFromTokens($tokens) {
- if (!$tokens) return '';
+ public function generateFromTokens($tokens)
+ {
+ if (!$tokens) {
+ return '';
+ }
// Basic algorithm
$html = '';
@@ -86,30 +103,41 @@ class HTMLPurifier_Generator
// Tidy cleanup
if (extension_loaded('tidy') && $this->config->get('Output.TidyFormat')) {
$tidy = new Tidy;
- $tidy->parseString($html, array(
- 'indent'=> true,
- 'output-xhtml' => $this->_xhtml,
- 'show-body-only' => true,
- 'indent-spaces' => 2,
- 'wrap' => 68,
- ), 'utf8');
+ $tidy->parseString(
+ $html,
+ array(
+ 'indent'=> true,
+ 'output-xhtml' => $this->_xhtml,
+ 'show-body-only' => true,
+ 'indent-spaces' => 2,
+ 'wrap' => 68,
+ ),
+ 'utf8'
+ );
$tidy->cleanRepair();
$html = (string) $tidy; // explicit cast necessary
}
// Normalize newlines to system defined value
- $nl = $this->config->get('Output.Newline');
- if ($nl === null) $nl = PHP_EOL;
- if ($nl !== "\n") $html = str_replace("\n", $nl, $html);
+ if ($this->config->get('Core.NormalizeNewlines')) {
+ $nl = $this->config->get('Output.Newline');
+ if ($nl === null) {
+ $nl = PHP_EOL;
+ }
+ if ($nl !== "\n") {
+ $html = str_replace("\n", $nl, $html);
+ }
+ }
return $html;
}
/**
* Generates HTML from a single token.
- * @param $token HTMLPurifier_Token object.
- * @return Generated HTML
+ * @param HTMLPurifier_Token $token HTMLPurifier_Token object.
+ * @return string Generated HTML
*/
- public function generateFromToken($token) {
+ public function generateFromToken($token)
+ {
if (!$token instanceof HTMLPurifier_Token) {
trigger_error('Cannot generate HTML from non-HTMLPurifier_Token object', E_USER_WARNING);
return '';
@@ -130,19 +158,7 @@ class HTMLPurifier_Generator
$_extra = '';
if ($this->_flashCompat) {
if ($token->name == "object" && !empty($this->_flashStack)) {
- $flash = array_pop($this->_flashStack);
- $compat_token = new HTMLPurifier_Token_Empty("embed");
- foreach ($flash->attr as $name => $val) {
- if ($name == "classid") continue;
- if ($name == "type") continue;
- if ($name == "data") $name = "src";
- $compat_token->attr[$name] = $val;
- }
- foreach ($flash->param as $name => $val) {
- if ($name == "movie") $name = "src";
- $compat_token->attr[$name] = $val;
- }
- $_extra = "<!--[if IE]>".$this->generateFromToken($compat_token)."<![endif]-->";
+ // doesn't do anything for now
}
}
return $_extra . '</' . $token->name . '>';
@@ -169,11 +185,16 @@ class HTMLPurifier_Generator
/**
* Special case processor for the contents of script tags
+ * @param HTMLPurifier_Token $token HTMLPurifier_Token object.
+ * @return string
* @warning This runs into problems if there's already a literal
* --> somewhere inside the script contents.
*/
- public function generateScriptFromToken($token) {
- if (!$token instanceof HTMLPurifier_Token_Text) return $this->generateFromToken($token);
+ public function generateScriptFromToken($token)
+ {
+ if (!$token instanceof HTMLPurifier_Token_Text) {
+ return $this->generateFromToken($token);
+ }
// Thanks <http://lachy.id.au/log/2005/05/script-comments>
$data = preg_replace('#//\s*$#', '', $token->data);
return '<!--//--><![CDATA[//><!--' . "\n" . trim($data) . "\n" . '//--><!]]>';
@@ -182,24 +203,60 @@ class HTMLPurifier_Generator
/**
* Generates attribute declarations from attribute array.
* @note This does not include the leading or trailing space.
- * @param $assoc_array_of_attributes Attribute array
- * @param $element Name of element attributes are for, used to check
+ * @param array $assoc_array_of_attributes Attribute array
+ * @param string $element Name of element attributes are for, used to check
* attribute minimization.
- * @return Generate HTML fragment for insertion.
+ * @return string Generated HTML fragment for insertion.
*/
- public function generateAttributes($assoc_array_of_attributes, $element = false) {
+ public function generateAttributes($assoc_array_of_attributes, $element = '')
+ {
$html = '';
- if ($this->_sortAttr) ksort($assoc_array_of_attributes);
+ if ($this->_sortAttr) {
+ ksort($assoc_array_of_attributes);
+ }
foreach ($assoc_array_of_attributes as $key => $value) {
if (!$this->_xhtml) {
// Remove namespaced attributes
- if (strpos($key, ':') !== false) continue;
+ if (strpos($key, ':') !== false) {
+ continue;
+ }
// Check if we should minimize the attribute: val="val" -> val
if ($element && !empty($this->_def->info[$element]->attr[$key]->minimized)) {
$html .= $key . ' ';
continue;
}
}
+ // Workaround for Internet Explorer innerHTML bug.
+ // Essentially, Internet Explorer, when calculating
+ // innerHTML, omits quotes if there are no instances of
+ // angled brackets, quotes or spaces. However, when parsing
+ // HTML (for example, when you assign to innerHTML), it
+ // treats backticks as quotes. Thus,
+ // <img alt="``" />
+ // becomes
+ // <img alt=`` />
+ // becomes
+ // <img alt='' />
+ // Fortunately, all we need to do is trigger an appropriate
+ // quoting style, which we do by adding an extra space.
+ // This also is consistent with the W3C spec, which states
+ // that user agents may ignore leading or trailing
+ // whitespace (in fact, most don't, at least for attributes
+ // like alt, but an extra space at the end is barely
+ // noticeable). Still, we have a configuration knob for
+ // this, since this transformation is not necesary if you
+ // don't process user input with innerHTML or you don't plan
+ // on supporting Internet Explorer.
+ if ($this->_innerHTMLFix) {
+ if (strpos($value, '`') !== false) {
+ // check if correct quoting style would not already be
+ // triggered
+ if (strcspn($value, '"\' <>') === strlen($value)) {
+ // protect!
+ $value .= ' ';
+ }
+ }
+ }
$html .= $key.'="'.$this->escape($value).'" ';
}
return rtrim($html);
@@ -210,15 +267,20 @@ class HTMLPurifier_Generator
* @todo This really ought to be protected, but until we have a facility
* for properly generating HTML here w/o using tokens, it stays
* public.
- * @param $string String data to escape for HTML.
- * @param $quote Quoting style, like htmlspecialchars. ENT_NOQUOTES is
+ * @param string $string String data to escape for HTML.
+ * @param int $quote Quoting style, like htmlspecialchars. ENT_NOQUOTES is
* permissible for non-attribute output.
- * @return String escaped data.
+ * @return string escaped data.
*/
- public function escape($string, $quote = ENT_COMPAT) {
+ public function escape($string, $quote = null)
+ {
+ // Workaround for APC bug on Mac Leopard reported by sidepodcast
+ // http://htmlpurifier.org/phorum/read.php?3,4823,4846
+ if ($quote === null) {
+ $quote = ENT_COMPAT;
+ }
return htmlspecialchars($string, $quote, 'UTF-8');
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLDefinition.php b/library/HTMLPurifier/HTMLDefinition.php
index c99ac11eb..9b7b334dd 100644
--- a/library/HTMLPurifier/HTMLDefinition.php
+++ b/library/HTMLPurifier/HTMLDefinition.php
@@ -29,60 +29,71 @@ class HTMLPurifier_HTMLDefinition extends HTMLPurifier_Definition
// FULLY-PUBLIC VARIABLES ---------------------------------------------
/**
- * Associative array of element names to HTMLPurifier_ElementDef
+ * Associative array of element names to HTMLPurifier_ElementDef.
+ * @type HTMLPurifier_ElementDef[]
*/
public $info = array();
/**
* Associative array of global attribute name to attribute definition.
+ * @type array
*/
public $info_global_attr = array();
/**
* String name of parent element HTML will be going into.
+ * @type string
*/
public $info_parent = 'div';
/**
* Definition for parent element, allows parent element to be a
* tag that's not allowed inside the HTML fragment.
+ * @type HTMLPurifier_ElementDef
*/
public $info_parent_def;
/**
- * String name of element used to wrap inline elements in block context
+ * String name of element used to wrap inline elements in block context.
+ * @type string
* @note This is rarely used except for BLOCKQUOTEs in strict mode
*/
public $info_block_wrapper = 'p';
/**
- * Associative array of deprecated tag name to HTMLPurifier_TagTransform
+ * Associative array of deprecated tag name to HTMLPurifier_TagTransform.
+ * @type array
*/
public $info_tag_transform = array();
/**
* Indexed list of HTMLPurifier_AttrTransform to be performed before validation.
+ * @type HTMLPurifier_AttrTransform[]
*/
public $info_attr_transform_pre = array();
/**
* Indexed list of HTMLPurifier_AttrTransform to be performed after validation.
+ * @type HTMLPurifier_AttrTransform[]
*/
public $info_attr_transform_post = array();
/**
* Nested lookup array of content set name (Block, Inline) to
* element name to whether or not it belongs in that content set.
+ * @type array
*/
public $info_content_sets = array();
/**
* Indexed list of HTMLPurifier_Injector to be used.
+ * @type HTMLPurifier_Injector[]
*/
public $info_injector = array();
/**
* Doctype object
+ * @type HTMLPurifier_Doctype
*/
public $doctype;
@@ -94,12 +105,13 @@ class HTMLPurifier_HTMLDefinition extends HTMLPurifier_Definition
* Adds a custom attribute to a pre-existing element
* @note This is strictly convenience, and does not have a corresponding
* method in HTMLPurifier_HTMLModule
- * @param $element_name String element name to add attribute to
- * @param $attr_name String name of attribute
- * @param $def Attribute definition, can be string or object, see
+ * @param string $element_name Element name to add attribute to
+ * @param string $attr_name Name of attribute
+ * @param mixed $def Attribute definition, can be string or object, see
* HTMLPurifier_AttrTypes for details
*/
- public function addAttribute($element_name, $attr_name, $def) {
+ public function addAttribute($element_name, $attr_name, $def)
+ {
$module = $this->getAnonymousModule();
if (!isset($module->info[$element_name])) {
$element = $module->addBlankElement($element_name);
@@ -111,10 +123,11 @@ class HTMLPurifier_HTMLDefinition extends HTMLPurifier_Definition
/**
* Adds a custom element to your HTML definition
- * @note See HTMLPurifier_HTMLModule::addElement for detailed
+ * @see HTMLPurifier_HTMLModule::addElement() for detailed
* parameter and return value descriptions.
*/
- public function addElement($element_name, $type, $contents, $attr_collections, $attributes = array()) {
+ public function addElement($element_name, $type, $contents, $attr_collections, $attributes = array())
+ {
$module = $this->getAnonymousModule();
// assume that if the user is calling this, the element
// is safe. This may not be a good idea
@@ -125,10 +138,13 @@ class HTMLPurifier_HTMLDefinition extends HTMLPurifier_Definition
/**
* Adds a blank element to your HTML definition, for overriding
* existing behavior
- * @note See HTMLPurifier_HTMLModule::addBlankElement for detailed
+ * @param string $element_name
+ * @return HTMLPurifier_ElementDef
+ * @see HTMLPurifier_HTMLModule::addBlankElement() for detailed
* parameter and return value descriptions.
*/
- public function addBlankElement($element_name) {
+ public function addBlankElement($element_name)
+ {
$module = $this->getAnonymousModule();
$element = $module->addBlankElement($element_name);
return $element;
@@ -138,8 +154,10 @@ class HTMLPurifier_HTMLDefinition extends HTMLPurifier_Definition
* Retrieves a reference to the anonymous module, so you can
* bust out advanced features without having to make your own
* module.
+ * @return HTMLPurifier_HTMLModule
*/
- public function getAnonymousModule() {
+ public function getAnonymousModule()
+ {
if (!$this->_anonModule) {
$this->_anonModule = new HTMLPurifier_HTMLModule();
$this->_anonModule->name = 'Anonymous';
@@ -147,22 +165,33 @@ class HTMLPurifier_HTMLDefinition extends HTMLPurifier_Definition
return $this->_anonModule;
}
- private $_anonModule;
-
+ private $_anonModule = null;
// PUBLIC BUT INTERNAL VARIABLES --------------------------------------
+ /**
+ * @type string
+ */
public $type = 'HTML';
- public $manager; /**< Instance of HTMLPurifier_HTMLModuleManager */
+
+ /**
+ * @type HTMLPurifier_HTMLModuleManager
+ */
+ public $manager;
/**
* Performs low-cost, preliminary initialization.
*/
- public function __construct() {
+ public function __construct()
+ {
$this->manager = new HTMLPurifier_HTMLModuleManager();
}
- protected function doSetup($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ protected function doSetup($config)
+ {
$this->processModules($config);
$this->setupConfigStuff($config);
unset($this->manager);
@@ -176,9 +205,10 @@ class HTMLPurifier_HTMLDefinition extends HTMLPurifier_Definition
/**
* Extract out the information from the manager
+ * @param HTMLPurifier_Config $config
*/
- protected function processModules($config) {
-
+ protected function processModules($config)
+ {
if ($this->_anonModule) {
// for user specific changes
// this is late-loaded so we don't have to deal with PHP4
@@ -191,40 +221,53 @@ class HTMLPurifier_HTMLDefinition extends HTMLPurifier_Definition
$this->doctype = $this->manager->doctype;
foreach ($this->manager->modules as $module) {
- foreach($module->info_tag_transform as $k => $v) {
- if ($v === false) unset($this->info_tag_transform[$k]);
- else $this->info_tag_transform[$k] = $v;
+ foreach ($module->info_tag_transform as $k => $v) {
+ if ($v === false) {
+ unset($this->info_tag_transform[$k]);
+ } else {
+ $this->info_tag_transform[$k] = $v;
+ }
}
- foreach($module->info_attr_transform_pre as $k => $v) {
- if ($v === false) unset($this->info_attr_transform_pre[$k]);
- else $this->info_attr_transform_pre[$k] = $v;
+ foreach ($module->info_attr_transform_pre as $k => $v) {
+ if ($v === false) {
+ unset($this->info_attr_transform_pre[$k]);
+ } else {
+ $this->info_attr_transform_pre[$k] = $v;
+ }
}
- foreach($module->info_attr_transform_post as $k => $v) {
- if ($v === false) unset($this->info_attr_transform_post[$k]);
- else $this->info_attr_transform_post[$k] = $v;
+ foreach ($module->info_attr_transform_post as $k => $v) {
+ if ($v === false) {
+ unset($this->info_attr_transform_post[$k]);
+ } else {
+ $this->info_attr_transform_post[$k] = $v;
+ }
}
foreach ($module->info_injector as $k => $v) {
- if ($v === false) unset($this->info_injector[$k]);
- else $this->info_injector[$k] = $v;
+ if ($v === false) {
+ unset($this->info_injector[$k]);
+ } else {
+ $this->info_injector[$k] = $v;
+ }
}
}
-
$this->info = $this->manager->getElements();
$this->info_content_sets = $this->manager->contentSets->lookup;
-
}
/**
* Sets up stuff based on config. We need a better way of doing this.
+ * @param HTMLPurifier_Config $config
*/
- protected function setupConfigStuff($config) {
-
+ protected function setupConfigStuff($config)
+ {
$block_wrapper = $config->get('HTML.BlockWrapper');
if (isset($this->info_content_sets['Block'][$block_wrapper])) {
$this->info_block_wrapper = $block_wrapper;
} else {
- trigger_error('Cannot use non-block element as block wrapper',
- E_USER_ERROR);
+ trigger_error(
+ 'Cannot use non-block element as block wrapper',
+ E_USER_ERROR
+ );
}
$parent = $config->get('HTML.Parent');
@@ -233,14 +276,15 @@ class HTMLPurifier_HTMLDefinition extends HTMLPurifier_Definition
$this->info_parent = $parent;
$this->info_parent_def = $def;
} else {
- trigger_error('Cannot use unrecognized element as parent',
- E_USER_ERROR);
+ trigger_error(
+ 'Cannot use unrecognized element as parent',
+ E_USER_ERROR
+ );
$this->info_parent_def = $this->manager->getElement($this->info_parent, true);
}
// support template text
- $support = "(for information on implementing this, see the ".
- "support forums) ";
+ $support = "(for information on implementing this, see the support forums) ";
// setup allowed elements -----------------------------------------
@@ -256,7 +300,9 @@ class HTMLPurifier_HTMLDefinition extends HTMLPurifier_Definition
if (is_array($allowed_elements)) {
foreach ($this->info as $name => $d) {
- if(!isset($allowed_elements[$name])) unset($this->info[$name]);
+ if (!isset($allowed_elements[$name])) {
+ unset($this->info[$name]);
+ }
unset($allowed_elements[$name]);
}
// emit errors
@@ -270,7 +316,6 @@ class HTMLPurifier_HTMLDefinition extends HTMLPurifier_Definition
$allowed_attributes_mutable = $allowed_attributes; // by copy!
if (is_array($allowed_attributes)) {
-
// This actually doesn't do anything, since we went away from
// global attributes. It's possible that userland code uses
// it, but HTMLModuleManager doesn't!
@@ -285,7 +330,9 @@ class HTMLPurifier_HTMLDefinition extends HTMLPurifier_Definition
unset($allowed_attributes_mutable[$key]);
}
}
- if ($delete) unset($this->info_global_attr[$attr]);
+ if ($delete) {
+ unset($this->info_global_attr[$attr]);
+ }
}
foreach ($this->info as $tag => $info) {
@@ -300,7 +347,16 @@ class HTMLPurifier_HTMLDefinition extends HTMLPurifier_Definition
unset($allowed_attributes_mutable[$key]);
}
}
- if ($delete) unset($this->info[$tag]->attr[$attr]);
+ if ($delete) {
+ if ($this->info[$tag]->attr[$attr]->required) {
+ trigger_error(
+ "Required attribute '$attr' in element '$tag' " .
+ "was not allowed, which means '$tag' will not be allowed either",
+ E_USER_WARNING
+ );
+ }
+ unset($this->info[$tag]->attr[$attr]);
+ }
}
}
// emit errors
@@ -313,23 +369,29 @@ class HTMLPurifier_HTMLDefinition extends HTMLPurifier_Definition
$element = htmlspecialchars($bits[0]);
$attribute = htmlspecialchars($bits[1]);
if (!isset($this->info[$element])) {
- trigger_error("Cannot allow attribute '$attribute' if element '$element' is not allowed/supported $support");
+ trigger_error(
+ "Cannot allow attribute '$attribute' if element " .
+ "'$element' is not allowed/supported $support"
+ );
} else {
- trigger_error("Attribute '$attribute' in element '$element' not supported $support",
- E_USER_WARNING);
+ trigger_error(
+ "Attribute '$attribute' in element '$element' not supported $support",
+ E_USER_WARNING
+ );
}
break;
}
// otherwise fall through
case 1:
$attribute = htmlspecialchars($bits[0]);
- trigger_error("Global attribute '$attribute' is not ".
+ trigger_error(
+ "Global attribute '$attribute' is not ".
"supported in any elements $support",
- E_USER_WARNING);
+ E_USER_WARNING
+ );
break;
}
}
-
}
// setup forbidden elements ---------------------------------------
@@ -343,25 +405,34 @@ class HTMLPurifier_HTMLDefinition extends HTMLPurifier_Definition
continue;
}
foreach ($info->attr as $attr => $x) {
- if (
- isset($forbidden_attributes["$tag@$attr"]) ||
+ if (isset($forbidden_attributes["$tag@$attr"]) ||
isset($forbidden_attributes["*@$attr"]) ||
isset($forbidden_attributes[$attr])
) {
unset($this->info[$tag]->attr[$attr]);
continue;
- } // this segment might get removed eventually
- elseif (isset($forbidden_attributes["$tag.$attr"])) {
+ } elseif (isset($forbidden_attributes["$tag.$attr"])) { // this segment might get removed eventually
// $tag.$attr are not user supplied, so no worries!
- trigger_error("Error with $tag.$attr: tag.attr syntax not supported for HTML.ForbiddenAttributes; use tag@attr instead", E_USER_WARNING);
+ trigger_error(
+ "Error with $tag.$attr: tag.attr syntax not supported for " .
+ "HTML.ForbiddenAttributes; use tag@attr instead",
+ E_USER_WARNING
+ );
}
}
}
foreach ($forbidden_attributes as $key => $v) {
- if (strlen($key) < 2) continue;
- if ($key[0] != '*') continue;
+ if (strlen($key) < 2) {
+ continue;
+ }
+ if ($key[0] != '*') {
+ continue;
+ }
if ($key[1] == '.') {
- trigger_error("Error with $key: *.attr syntax not supported for HTML.ForbiddenAttributes; use attr instead", E_USER_WARNING);
+ trigger_error(
+ "Error with $key: *.attr syntax not supported for HTML.ForbiddenAttributes; use attr instead",
+ E_USER_WARNING
+ );
}
}
@@ -380,12 +451,12 @@ class HTMLPurifier_HTMLDefinition extends HTMLPurifier_Definition
* separate lists for processing. Format is element[attr1|attr2],element2...
* @warning Although it's largely drawn from TinyMCE's implementation,
* it is different, and you'll probably have to modify your lists
- * @param $list String list to parse
- * @param array($allowed_elements, $allowed_attributes)
+ * @param array $list String list to parse
+ * @return array
* @todo Give this its own class, probably static interface
*/
- public function parseTinyMCEAllowedList($list) {
-
+ public function parseTinyMCEAllowedList($list)
+ {
$list = str_replace(array(' ', "\t"), '', $list);
$elements = array();
@@ -393,7 +464,9 @@ class HTMLPurifier_HTMLDefinition extends HTMLPurifier_Definition
$chunks = preg_split('/(,|[\n\r]+)/', $list);
foreach ($chunks as $chunk) {
- if (empty($chunk)) continue;
+ if (empty($chunk)) {
+ continue;
+ }
// remove TinyMCE element control characters
if (!strpos($chunk, '[')) {
$element = $chunk;
@@ -401,20 +474,20 @@ class HTMLPurifier_HTMLDefinition extends HTMLPurifier_Definition
} else {
list($element, $attr) = explode('[', $chunk);
}
- if ($element !== '*') $elements[$element] = true;
- if (!$attr) continue;
+ if ($element !== '*') {
+ $elements[$element] = true;
+ }
+ if (!$attr) {
+ continue;
+ }
$attr = substr($attr, 0, strlen($attr) - 1); // remove trailing ]
$attr = explode('|', $attr);
foreach ($attr as $key) {
$attributes["$element.$key"] = true;
}
}
-
return array($elements, $attributes);
-
}
-
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule.php b/library/HTMLPurifier/HTMLModule.php
index 072cf6808..bb3a9230b 100644
--- a/library/HTMLPurifier/HTMLModule.php
+++ b/library/HTMLPurifier/HTMLModule.php
@@ -21,13 +21,15 @@ class HTMLPurifier_HTMLModule
// -- Overloadable ----------------------------------------------------
/**
- * Short unique string identifier of the module
+ * Short unique string identifier of the module.
+ * @type string
*/
public $name;
/**
- * Informally, a list of elements this module changes. Not used in
- * any significant way.
+ * Informally, a list of elements this module changes.
+ * Not used in any significant way.
+ * @type array
*/
public $elements = array();
@@ -35,6 +37,7 @@ class HTMLPurifier_HTMLModule
* Associative array of element names to element definitions.
* Some definitions may be incomplete, to be merged in later
* with the full definition.
+ * @type array
*/
public $info = array();
@@ -43,6 +46,7 @@ class HTMLPurifier_HTMLModule
* This is commonly used to, say, add an A element to the Inline
* content set. This corresponds to an internal variable $content_sets
* and NOT info_content_sets member variable of HTMLDefinition.
+ * @type array
*/
public $content_sets = array();
@@ -53,21 +57,25 @@ class HTMLPurifier_HTMLModule
* the style attribute to the Core. Corresponds to HTMLDefinition's
* attr_collections->info, since the object's data is only info,
* with extra behavior associated with it.
+ * @type array
*/
public $attr_collections = array();
/**
- * Associative array of deprecated tag name to HTMLPurifier_TagTransform
+ * Associative array of deprecated tag name to HTMLPurifier_TagTransform.
+ * @type array
*/
public $info_tag_transform = array();
/**
* List of HTMLPurifier_AttrTransform to be performed before validation.
+ * @type array
*/
public $info_attr_transform_pre = array();
/**
* List of HTMLPurifier_AttrTransform to be performed after validation.
+ * @type array
*/
public $info_attr_transform_post = array();
@@ -76,6 +84,7 @@ class HTMLPurifier_HTMLModule
* An injector will only be invoked if all of it's pre-requisites are met;
* if an injector fails setup, there will be no error; it will simply be
* silently disabled.
+ * @type array
*/
public $info_injector = array();
@@ -84,6 +93,7 @@ class HTMLPurifier_HTMLModule
* For optimization reasons: may save a call to a function. Be sure
* to set it if you do implement getChildDef(), otherwise it will have
* no effect!
+ * @type bool
*/
public $defines_child_def = false;
@@ -94,6 +104,7 @@ class HTMLPurifier_HTMLModule
* which is based off of safe HTML, to explicitly say, "This is safe," even
* though there are modules which are "unsafe")
*
+ * @type bool
* @note Previously, safety could be applied at an element level granularity.
* We've removed this ability, so in order to add "unsafe" elements
* or attributes, a dedicated module with this property set to false
@@ -106,51 +117,62 @@ class HTMLPurifier_HTMLModule
* content_model and content_model_type member variables of
* the HTMLPurifier_ElementDef class. There is a similar function
* in HTMLPurifier_HTMLDefinition.
- * @param $def HTMLPurifier_ElementDef instance
+ * @param HTMLPurifier_ElementDef $def
* @return HTMLPurifier_ChildDef subclass
*/
- public function getChildDef($def) {return false;}
+ public function getChildDef($def)
+ {
+ return false;
+ }
// -- Convenience -----------------------------------------------------
/**
* Convenience function that sets up a new element
- * @param $element Name of element to add
- * @param $type What content set should element be registered to?
+ * @param string $element Name of element to add
+ * @param string|bool $type What content set should element be registered to?
* Set as false to skip this step.
- * @param $contents Allowed children in form of:
+ * @param string $contents Allowed children in form of:
* "$content_model_type: $content_model"
- * @param $attr_includes What attribute collections to register to
+ * @param array $attr_includes What attribute collections to register to
* element?
- * @param $attr What unique attributes does the element define?
- * @note See ElementDef for in-depth descriptions of these parameters.
- * @return Created element definition object, so you
+ * @param array $attr What unique attributes does the element define?
+ * @see HTMLPurifier_ElementDef:: for in-depth descriptions of these parameters.
+ * @return HTMLPurifier_ElementDef Created element definition object, so you
* can set advanced parameters
*/
- public function addElement($element, $type, $contents, $attr_includes = array(), $attr = array()) {
+ public function addElement($element, $type, $contents, $attr_includes = array(), $attr = array())
+ {
$this->elements[] = $element;
// parse content_model
list($content_model_type, $content_model) = $this->parseContents($contents);
// merge in attribute inclusions
$this->mergeInAttrIncludes($attr, $attr_includes);
// add element to content sets
- if ($type) $this->addElementToContentSet($element, $type);
+ if ($type) {
+ $this->addElementToContentSet($element, $type);
+ }
// create element
$this->info[$element] = HTMLPurifier_ElementDef::create(
- $content_model, $content_model_type, $attr
+ $content_model,
+ $content_model_type,
+ $attr
);
// literal object $contents means direct child manipulation
- if (!is_string($contents)) $this->info[$element]->child = $contents;
+ if (!is_string($contents)) {
+ $this->info[$element]->child = $contents;
+ }
return $this->info[$element];
}
/**
* Convenience function that creates a totally blank, non-standalone
* element.
- * @param $element Name of element to create
- * @return Created element
+ * @param string $element Name of element to create
+ * @return HTMLPurifier_ElementDef Created element
*/
- public function addBlankElement($element) {
+ public function addBlankElement($element)
+ {
if (!isset($this->info[$element])) {
$this->elements[] = $element;
$this->info[$element] = new HTMLPurifier_ElementDef();
@@ -163,27 +185,35 @@ class HTMLPurifier_HTMLModule
/**
* Convenience function that registers an element to a content set
- * @param Element to register
- * @param Name content set (warning: case sensitive, usually upper-case
+ * @param string $element Element to register
+ * @param string $type Name content set (warning: case sensitive, usually upper-case
* first letter)
*/
- public function addElementToContentSet($element, $type) {
- if (!isset($this->content_sets[$type])) $this->content_sets[$type] = '';
- else $this->content_sets[$type] .= ' | ';
+ public function addElementToContentSet($element, $type)
+ {
+ if (!isset($this->content_sets[$type])) {
+ $this->content_sets[$type] = '';
+ } else {
+ $this->content_sets[$type] .= ' | ';
+ }
$this->content_sets[$type] .= $element;
}
/**
* Convenience function that transforms single-string contents
* into separate content model and content model type
- * @param $contents Allowed children in form of:
+ * @param string $contents Allowed children in form of:
* "$content_model_type: $content_model"
+ * @return array
* @note If contents is an object, an array of two nulls will be
* returned, and the callee needs to take the original $contents
* and use it directly.
*/
- public function parseContents($contents) {
- if (!is_string($contents)) return array(null, null); // defer
+ public function parseContents($contents)
+ {
+ if (!is_string($contents)) {
+ return array(null, null);
+ } // defer
switch ($contents) {
// check for shorthand content model forms
case 'Empty':
@@ -202,13 +232,17 @@ class HTMLPurifier_HTMLModule
/**
* Convenience function that merges a list of attribute includes into
* an attribute array.
- * @param $attr Reference to attr array to modify
- * @param $attr_includes Array of includes / string include to merge in
+ * @param array $attr Reference to attr array to modify
+ * @param array $attr_includes Array of includes / string include to merge in
*/
- public function mergeInAttrIncludes(&$attr, $attr_includes) {
+ public function mergeInAttrIncludes(&$attr, $attr_includes)
+ {
if (!is_array($attr_includes)) {
- if (empty($attr_includes)) $attr_includes = array();
- else $attr_includes = array($attr_includes);
+ if (empty($attr_includes)) {
+ $attr_includes = array();
+ } else {
+ $attr_includes = array($attr_includes);
+ }
}
$attr[0] = $attr_includes;
}
@@ -216,16 +250,21 @@ class HTMLPurifier_HTMLModule
/**
* Convenience function that generates a lookup table with boolean
* true as value.
- * @param $list List of values to turn into a lookup
+ * @param string $list List of values to turn into a lookup
* @note You can also pass an arbitrary number of arguments in
* place of the regular argument
- * @return Lookup array equivalent of list
+ * @return array array equivalent of list
*/
- public function makeLookup($list) {
- if (is_string($list)) $list = func_get_args();
+ public function makeLookup($list)
+ {
+ if (is_string($list)) {
+ $list = func_get_args();
+ }
$ret = array();
foreach ($list as $value) {
- if (is_null($value)) continue;
+ if (is_null($value)) {
+ continue;
+ }
$ret[$value] = true;
}
return $ret;
@@ -235,10 +274,11 @@ class HTMLPurifier_HTMLModule
* Lazy load construction of the module after determining whether
* or not it's needed, and also when a finalized configuration object
* is available.
- * @param $config Instance of HTMLPurifier_Config
+ * @param HTMLPurifier_Config $config
*/
- public function setup($config) {}
-
+ public function setup($config)
+ {
+ }
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/Bdo.php b/library/HTMLPurifier/HTMLModule/Bdo.php
index 3d66f1b4e..1e67c790d 100644
--- a/library/HTMLPurifier/HTMLModule/Bdo.php
+++ b/library/HTMLPurifier/HTMLModule/Bdo.php
@@ -7,25 +7,38 @@
class HTMLPurifier_HTMLModule_Bdo extends HTMLPurifier_HTMLModule
{
+ /**
+ * @type string
+ */
public $name = 'Bdo';
+
+ /**
+ * @type array
+ */
public $attr_collections = array(
'I18N' => array('dir' => false)
);
- public function setup($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
$bdo = $this->addElement(
- 'bdo', 'Inline', 'Inline', array('Core', 'Lang'),
+ 'bdo',
+ 'Inline',
+ 'Inline',
+ array('Core', 'Lang'),
array(
'dir' => 'Enum#ltr,rtl', // required
// The Abstract Module specification has the attribute
// inclusions wrong for bdo: bdo allows Lang
)
);
- $bdo->attr_transform_post['required-dir'] = new HTMLPurifier_AttrTransform_BdoDir();
+ $bdo->attr_transform_post[] = new HTMLPurifier_AttrTransform_BdoDir();
$this->attr_collections['I18N']['dir'] = 'Enum#ltr,rtl';
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/CommonAttributes.php b/library/HTMLPurifier/HTMLModule/CommonAttributes.php
index 7c15da84f..a96ab1bef 100644
--- a/library/HTMLPurifier/HTMLModule/CommonAttributes.php
+++ b/library/HTMLPurifier/HTMLModule/CommonAttributes.php
@@ -2,8 +2,14 @@
class HTMLPurifier_HTMLModule_CommonAttributes extends HTMLPurifier_HTMLModule
{
+ /**
+ * @type string
+ */
public $name = 'CommonAttributes';
+ /**
+ * @type array
+ */
public $attr_collections = array(
'Core' => array(
0 => array('Style'),
@@ -20,7 +26,6 @@ class HTMLPurifier_HTMLModule_CommonAttributes extends HTMLPurifier_HTMLModule
0 => array('Core', 'I18N')
)
);
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/Edit.php b/library/HTMLPurifier/HTMLModule/Edit.php
index ff9369055..a9042a357 100644
--- a/library/HTMLPurifier/HTMLModule/Edit.php
+++ b/library/HTMLPurifier/HTMLModule/Edit.php
@@ -7,9 +7,16 @@
class HTMLPurifier_HTMLModule_Edit extends HTMLPurifier_HTMLModule
{
+ /**
+ * @type string
+ */
public $name = 'Edit';
- public function setup($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
$contents = 'Chameleon: #PCDATA | Inline ! #PCDATA | Flow';
$attr = array(
'cite' => 'URI',
@@ -26,13 +33,23 @@ class HTMLPurifier_HTMLModule_Edit extends HTMLPurifier_HTMLModule
// Inline context ! Block context (exclamation mark is
// separator, see getChildDef for parsing)
+ /**
+ * @type bool
+ */
public $defines_child_def = true;
- public function getChildDef($def) {
- if ($def->content_model_type != 'chameleon') return false;
+
+ /**
+ * @param HTMLPurifier_ElementDef $def
+ * @return HTMLPurifier_ChildDef_Chameleon
+ */
+ public function getChildDef($def)
+ {
+ if ($def->content_model_type != 'chameleon') {
+ return false;
+ }
$value = explode('!', $def->content_model);
return new HTMLPurifier_ChildDef_Chameleon($value[0], $value[1]);
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/Forms.php b/library/HTMLPurifier/HTMLModule/Forms.php
index 44c22f6f8..6f7ddbc05 100644
--- a/library/HTMLPurifier/HTMLModule/Forms.php
+++ b/library/HTMLPurifier/HTMLModule/Forms.php
@@ -5,86 +5,142 @@
*/
class HTMLPurifier_HTMLModule_Forms extends HTMLPurifier_HTMLModule
{
+ /**
+ * @type string
+ */
public $name = 'Forms';
+
+ /**
+ * @type bool
+ */
public $safe = false;
+ /**
+ * @type array
+ */
public $content_sets = array(
'Block' => 'Form',
'Inline' => 'Formctrl',
);
- public function setup($config) {
- $form = $this->addElement('form', 'Form',
- 'Required: Heading | List | Block | fieldset', 'Common', array(
- 'accept' => 'ContentTypes',
- 'accept-charset' => 'Charsets',
- 'action*' => 'URI',
- 'method' => 'Enum#get,post',
- // really ContentType, but these two are the only ones used today
- 'enctype' => 'Enum#application/x-www-form-urlencoded,multipart/form-data',
- ));
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
+ $form = $this->addElement(
+ 'form',
+ 'Form',
+ 'Required: Heading | List | Block | fieldset',
+ 'Common',
+ array(
+ 'accept' => 'ContentTypes',
+ 'accept-charset' => 'Charsets',
+ 'action*' => 'URI',
+ 'method' => 'Enum#get,post',
+ // really ContentType, but these two are the only ones used today
+ 'enctype' => 'Enum#application/x-www-form-urlencoded,multipart/form-data',
+ )
+ );
$form->excludes = array('form' => true);
- $input = $this->addElement('input', 'Formctrl', 'Empty', 'Common', array(
- 'accept' => 'ContentTypes',
- 'accesskey' => 'Character',
- 'alt' => 'Text',
- 'checked' => 'Bool#checked',
- 'disabled' => 'Bool#disabled',
- 'maxlength' => 'Number',
- 'name' => 'CDATA',
- 'readonly' => 'Bool#readonly',
- 'size' => 'Number',
- 'src' => 'URI#embeds',
- 'tabindex' => 'Number',
- 'type' => 'Enum#text,password,checkbox,button,radio,submit,reset,file,hidden,image',
- 'value' => 'CDATA',
- ));
+ $input = $this->addElement(
+ 'input',
+ 'Formctrl',
+ 'Empty',
+ 'Common',
+ array(
+ 'accept' => 'ContentTypes',
+ 'accesskey' => 'Character',
+ 'alt' => 'Text',
+ 'checked' => 'Bool#checked',
+ 'disabled' => 'Bool#disabled',
+ 'maxlength' => 'Number',
+ 'name' => 'CDATA',
+ 'readonly' => 'Bool#readonly',
+ 'size' => 'Number',
+ 'src' => 'URI#embedded',
+ 'tabindex' => 'Number',
+ 'type' => 'Enum#text,password,checkbox,button,radio,submit,reset,file,hidden,image',
+ 'value' => 'CDATA',
+ )
+ );
$input->attr_transform_post[] = new HTMLPurifier_AttrTransform_Input();
- $this->addElement('select', 'Formctrl', 'Required: optgroup | option', 'Common', array(
- 'disabled' => 'Bool#disabled',
- 'multiple' => 'Bool#multiple',
- 'name' => 'CDATA',
- 'size' => 'Number',
- 'tabindex' => 'Number',
- ));
-
- $this->addElement('option', false, 'Optional: #PCDATA', 'Common', array(
- 'disabled' => 'Bool#disabled',
- 'label' => 'Text',
- 'selected' => 'Bool#selected',
- 'value' => 'CDATA',
- ));
+ $this->addElement(
+ 'select',
+ 'Formctrl',
+ 'Required: optgroup | option',
+ 'Common',
+ array(
+ 'disabled' => 'Bool#disabled',
+ 'multiple' => 'Bool#multiple',
+ 'name' => 'CDATA',
+ 'size' => 'Number',
+ 'tabindex' => 'Number',
+ )
+ );
+
+ $this->addElement(
+ 'option',
+ false,
+ 'Optional: #PCDATA',
+ 'Common',
+ array(
+ 'disabled' => 'Bool#disabled',
+ 'label' => 'Text',
+ 'selected' => 'Bool#selected',
+ 'value' => 'CDATA',
+ )
+ );
// It's illegal for there to be more than one selected, but not
// be multiple. Also, no selected means undefined behavior. This might
// be difficult to implement; perhaps an injector, or a context variable.
- $textarea = $this->addElement('textarea', 'Formctrl', 'Optional: #PCDATA', 'Common', array(
- 'accesskey' => 'Character',
- 'cols*' => 'Number',
- 'disabled' => 'Bool#disabled',
- 'name' => 'CDATA',
- 'readonly' => 'Bool#readonly',
- 'rows*' => 'Number',
- 'tabindex' => 'Number',
- ));
+ $textarea = $this->addElement(
+ 'textarea',
+ 'Formctrl',
+ 'Optional: #PCDATA',
+ 'Common',
+ array(
+ 'accesskey' => 'Character',
+ 'cols*' => 'Number',
+ 'disabled' => 'Bool#disabled',
+ 'name' => 'CDATA',
+ 'readonly' => 'Bool#readonly',
+ 'rows*' => 'Number',
+ 'tabindex' => 'Number',
+ )
+ );
$textarea->attr_transform_pre[] = new HTMLPurifier_AttrTransform_Textarea();
- $button = $this->addElement('button', 'Formctrl', 'Optional: #PCDATA | Heading | List | Block | Inline', 'Common', array(
- 'accesskey' => 'Character',
- 'disabled' => 'Bool#disabled',
- 'name' => 'CDATA',
- 'tabindex' => 'Number',
- 'type' => 'Enum#button,submit,reset',
- 'value' => 'CDATA',
- ));
+ $button = $this->addElement(
+ 'button',
+ 'Formctrl',
+ 'Optional: #PCDATA | Heading | List | Block | Inline',
+ 'Common',
+ array(
+ 'accesskey' => 'Character',
+ 'disabled' => 'Bool#disabled',
+ 'name' => 'CDATA',
+ 'tabindex' => 'Number',
+ 'type' => 'Enum#button,submit,reset',
+ 'value' => 'CDATA',
+ )
+ );
// For exclusions, ideally we'd specify content sets, not literal elements
$button->excludes = $this->makeLookup(
- 'form', 'fieldset', // Form
- 'input', 'select', 'textarea', 'label', 'button', // Formctrl
- 'a' // as per HTML 4.01 spec, this is omitted by modularization
+ 'form',
+ 'fieldset', // Form
+ 'input',
+ 'select',
+ 'textarea',
+ 'label',
+ 'button', // Formctrl
+ 'a', // as per HTML 4.01 spec, this is omitted by modularization
+ 'isindex',
+ 'iframe' // legacy items
);
// Extra exclusion: img usemap="" is not permitted within this element.
@@ -94,24 +150,40 @@ class HTMLPurifier_HTMLModule_Forms extends HTMLPurifier_HTMLModule
// This is HIGHLY user-unfriendly; we need a custom child-def for this
$this->addElement('fieldset', 'Form', 'Custom: (#WS?,legend,(Flow|#PCDATA)*)', 'Common');
- $label = $this->addElement('label', 'Formctrl', 'Optional: #PCDATA | Inline', 'Common', array(
- 'accesskey' => 'Character',
- // 'for' => 'IDREF', // IDREF not implemented, cannot allow
- ));
+ $label = $this->addElement(
+ 'label',
+ 'Formctrl',
+ 'Optional: #PCDATA | Inline',
+ 'Common',
+ array(
+ 'accesskey' => 'Character',
+ // 'for' => 'IDREF', // IDREF not implemented, cannot allow
+ )
+ );
$label->excludes = array('label' => true);
- $this->addElement('legend', false, 'Optional: #PCDATA | Inline', 'Common', array(
- 'accesskey' => 'Character',
- ));
-
- $this->addElement('optgroup', false, 'Required: option', 'Common', array(
- 'disabled' => 'Bool#disabled',
- 'label*' => 'Text',
- ));
+ $this->addElement(
+ 'legend',
+ false,
+ 'Optional: #PCDATA | Inline',
+ 'Common',
+ array(
+ 'accesskey' => 'Character',
+ )
+ );
+ $this->addElement(
+ 'optgroup',
+ false,
+ 'Required: option',
+ 'Common',
+ array(
+ 'disabled' => 'Bool#disabled',
+ 'label*' => 'Text',
+ )
+ );
// Don't forget an injector for <isindex>. This one's a little complex
// because it maps to multiple elements.
-
}
}
diff --git a/library/HTMLPurifier/HTMLModule/Hypertext.php b/library/HTMLPurifier/HTMLModule/Hypertext.php
index d7e9bdd27..72d7a31e6 100644
--- a/library/HTMLPurifier/HTMLModule/Hypertext.php
+++ b/library/HTMLPurifier/HTMLModule/Hypertext.php
@@ -6,11 +6,21 @@
class HTMLPurifier_HTMLModule_Hypertext extends HTMLPurifier_HTMLModule
{
+ /**
+ * @type string
+ */
public $name = 'Hypertext';
- public function setup($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
$a = $this->addElement(
- 'a', 'Inline', 'Inline', 'Common',
+ 'a',
+ 'Inline',
+ 'Inline',
+ 'Common',
array(
// 'accesskey' => 'Character',
// 'charset' => 'Charset',
@@ -25,7 +35,6 @@ class HTMLPurifier_HTMLModule_Hypertext extends HTMLPurifier_HTMLModule
$a->formatting = true;
$a->excludes = array('a' => true);
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/Iframe.php b/library/HTMLPurifier/HTMLModule/Iframe.php
new file mode 100644
index 000000000..f7e7c91c0
--- /dev/null
+++ b/library/HTMLPurifier/HTMLModule/Iframe.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * XHTML 1.1 Iframe Module provides inline frames.
+ *
+ * @note This module is not considered safe unless an Iframe
+ * whitelisting mechanism is specified. Currently, the only
+ * such mechanism is %URL.SafeIframeRegexp
+ */
+class HTMLPurifier_HTMLModule_Iframe extends HTMLPurifier_HTMLModule
+{
+
+ /**
+ * @type string
+ */
+ public $name = 'Iframe';
+
+ /**
+ * @type bool
+ */
+ public $safe = false;
+
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
+ if ($config->get('HTML.SafeIframe')) {
+ $this->safe = true;
+ }
+ $this->addElement(
+ 'iframe',
+ 'Inline',
+ 'Flow',
+ 'Common',
+ array(
+ 'src' => 'URI#embedded',
+ 'width' => 'Length',
+ 'height' => 'Length',
+ 'name' => 'ID',
+ 'scrolling' => 'Enum#yes,no,auto',
+ 'frameborder' => 'Enum#0,1',
+ 'longdesc' => 'URI',
+ 'marginheight' => 'Pixels',
+ 'marginwidth' => 'Pixels',
+ )
+ );
+ }
+}
+
+// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/Image.php b/library/HTMLPurifier/HTMLModule/Image.php
index 948d435bc..0f5fdb3ba 100644
--- a/library/HTMLPurifier/HTMLModule/Image.php
+++ b/library/HTMLPurifier/HTMLModule/Image.php
@@ -8,18 +8,28 @@
class HTMLPurifier_HTMLModule_Image extends HTMLPurifier_HTMLModule
{
+ /**
+ * @type string
+ */
public $name = 'Image';
- public function setup($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
$max = $config->get('HTML.MaxImgLength');
$img = $this->addElement(
- 'img', 'Inline', 'Empty', 'Common',
+ 'img',
+ 'Inline',
+ 'Empty',
+ 'Common',
array(
'alt*' => 'Text',
// According to the spec, it's Length, but percents can
// be abused, so we allow only Pixels.
'height' => 'Pixels#' . $max,
- 'width' => 'Pixels#' . $max,
+ 'width' => 'Pixels#' . $max,
'longdesc' => 'URI',
'src*' => new HTMLPurifier_AttrDef_URI(true), // embedded
)
@@ -34,7 +44,6 @@ class HTMLPurifier_HTMLModule_Image extends HTMLPurifier_HTMLModule
$img->attr_transform_post[] =
new HTMLPurifier_AttrTransform_ImgRequired();
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/Legacy.php b/library/HTMLPurifier/HTMLModule/Legacy.php
index df33927ba..86b529957 100644
--- a/library/HTMLPurifier/HTMLModule/Legacy.php
+++ b/library/HTMLPurifier/HTMLModule/Legacy.php
@@ -18,29 +18,58 @@
class HTMLPurifier_HTMLModule_Legacy extends HTMLPurifier_HTMLModule
{
-
+ /**
+ * @type string
+ */
public $name = 'Legacy';
- public function setup($config) {
-
- $this->addElement('basefont', 'Inline', 'Empty', false, array(
- 'color' => 'Color',
- 'face' => 'Text', // extremely broad, we should
- 'size' => 'Text', // tighten it
- 'id' => 'ID'
- ));
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
+ $this->addElement(
+ 'basefont',
+ 'Inline',
+ 'Empty',
+ null,
+ array(
+ 'color' => 'Color',
+ 'face' => 'Text', // extremely broad, we should
+ 'size' => 'Text', // tighten it
+ 'id' => 'ID'
+ )
+ );
$this->addElement('center', 'Block', 'Flow', 'Common');
- $this->addElement('dir', 'Block', 'Required: li', 'Common', array(
- 'compact' => 'Bool#compact'
- ));
- $this->addElement('font', 'Inline', 'Inline', array('Core', 'I18N'), array(
- 'color' => 'Color',
- 'face' => 'Text', // extremely broad, we should
- 'size' => 'Text', // tighten it
- ));
- $this->addElement('menu', 'Block', 'Required: li', 'Common', array(
- 'compact' => 'Bool#compact'
- ));
+ $this->addElement(
+ 'dir',
+ 'Block',
+ 'Required: li',
+ 'Common',
+ array(
+ 'compact' => 'Bool#compact'
+ )
+ );
+ $this->addElement(
+ 'font',
+ 'Inline',
+ 'Inline',
+ array('Core', 'I18N'),
+ array(
+ 'color' => 'Color',
+ 'face' => 'Text', // extremely broad, we should
+ 'size' => 'Text', // tighten it
+ )
+ );
+ $this->addElement(
+ 'menu',
+ 'Block',
+ 'Required: li',
+ 'Common',
+ array(
+ 'compact' => 'Bool#compact'
+ )
+ );
$s = $this->addElement('s', 'Inline', 'Inline', 'Common');
$s->formatting = true;
@@ -89,7 +118,7 @@ class HTMLPurifier_HTMLModule_Legacy extends HTMLPurifier_HTMLModule
$hr->attr['width'] = 'Length';
$img = $this->addBlankElement('img');
- $img->attr['align'] = 'Enum#top,middle,bottom,left,right';
+ $img->attr['align'] = 'IAlign';
$img->attr['border'] = 'Pixels';
$img->attr['hspace'] = 'Pixels';
$img->attr['vspace'] = 'Pixels';
@@ -98,7 +127,7 @@ class HTMLPurifier_HTMLModule_Legacy extends HTMLPurifier_HTMLModule
$li = $this->addBlankElement('li');
$li->attr['value'] = new HTMLPurifier_AttrDef_Integer();
- $li->attr['type'] = 'Enum#s:1,i,I,a,A,disc,square,circle';
+ $li->attr['type'] = 'Enum#s:1,i,I,a,A,disc,square,circle';
$ol = $this->addBlankElement('ol');
$ol->attr['compact'] = 'Bool#compact';
@@ -136,8 +165,22 @@ class HTMLPurifier_HTMLModule_Legacy extends HTMLPurifier_HTMLModule
$ul->attr['compact'] = 'Bool#compact';
$ul->attr['type'] = 'Enum#square,disc,circle';
- }
+ // "safe" modifications to "unsafe" elements
+ // WARNING: If you want to add support for an unsafe, legacy
+ // attribute, make a new TrustedLegacy module with the trusted
+ // bit set appropriately
+ $form = $this->addBlankElement('form');
+ $form->content_model = 'Flow | #PCDATA';
+ $form->content_model_type = 'optional';
+ $form->attr['target'] = 'FrameTarget';
+
+ $input = $this->addBlankElement('input');
+ $input->attr['align'] = 'IAlign';
+
+ $legend = $this->addBlankElement('legend');
+ $legend->attr['align'] = 'LAlign';
+ }
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/List.php b/library/HTMLPurifier/HTMLModule/List.php
index 74d4522f4..7a20ff701 100644
--- a/library/HTMLPurifier/HTMLModule/List.php
+++ b/library/HTMLPurifier/HTMLModule/List.php
@@ -5,7 +5,9 @@
*/
class HTMLPurifier_HTMLModule_List extends HTMLPurifier_HTMLModule
{
-
+ /**
+ * @type string
+ */
public $name = 'List';
// According to the abstract schema, the List content set is a fully formed
@@ -17,13 +19,26 @@ class HTMLPurifier_HTMLModule_List extends HTMLPurifier_HTMLModule
// we don't have support for such nested expressions without using
// the incredibly inefficient and draconic Custom ChildDef.
+ /**
+ * @type array
+ */
public $content_sets = array('Flow' => 'List');
- public function setup($config) {
- $ol = $this->addElement('ol', 'List', 'Required: li', 'Common');
- $ol->wrap = "li";
- $ul = $this->addElement('ul', 'List', 'Required: li', 'Common');
- $ul->wrap = "li";
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
+ $ol = $this->addElement('ol', 'List', new HTMLPurifier_ChildDef_List(), 'Common');
+ $ul = $this->addElement('ul', 'List', new HTMLPurifier_ChildDef_List(), 'Common');
+ // XXX The wrap attribute is handled by MakeWellFormed. This is all
+ // quite unsatisfactory, because we generated this
+ // *specifically* for lists, and now a big chunk of the handling
+ // is done properly by the List ChildDef. So actually, we just
+ // want enough information to make autoclosing work properly,
+ // and then hand off the tricky stuff to the ChildDef.
+ $ol->wrap = 'li';
+ $ul->wrap = 'li';
$this->addElement('dl', 'List', 'Required: dt | dd', 'Common');
$this->addElement('li', false, 'Flow', 'Common');
@@ -31,7 +46,6 @@ class HTMLPurifier_HTMLModule_List extends HTMLPurifier_HTMLModule
$this->addElement('dd', false, 'Flow', 'Common');
$this->addElement('dt', false, 'Inline', 'Common');
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/Name.php b/library/HTMLPurifier/HTMLModule/Name.php
index 05694b450..60c054515 100644
--- a/library/HTMLPurifier/HTMLModule/Name.php
+++ b/library/HTMLPurifier/HTMLModule/Name.php
@@ -2,20 +2,25 @@
class HTMLPurifier_HTMLModule_Name extends HTMLPurifier_HTMLModule
{
-
+ /**
+ * @type string
+ */
public $name = 'Name';
- public function setup($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
$elements = array('a', 'applet', 'form', 'frame', 'iframe', 'img', 'map');
foreach ($elements as $name) {
$element = $this->addBlankElement($name);
$element->attr['name'] = 'CDATA';
if (!$config->get('HTML.Attr.Name.UseCDATA')) {
- $element->attr_transform_post['NameSync'] = new HTMLPurifier_AttrTransform_NameSync();
+ $element->attr_transform_post[] = new HTMLPurifier_AttrTransform_NameSync();
}
}
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/Nofollow.php b/library/HTMLPurifier/HTMLModule/Nofollow.php
new file mode 100644
index 000000000..dc9410a89
--- /dev/null
+++ b/library/HTMLPurifier/HTMLModule/Nofollow.php
@@ -0,0 +1,25 @@
+<?php
+
+/**
+ * Module adds the nofollow attribute transformation to a tags. It
+ * is enabled by HTML.Nofollow
+ */
+class HTMLPurifier_HTMLModule_Nofollow extends HTMLPurifier_HTMLModule
+{
+
+ /**
+ * @type string
+ */
+ public $name = 'Nofollow';
+
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
+ $a = $this->addBlankElement('a');
+ $a->attr_transform_post[] = new HTMLPurifier_AttrTransform_Nofollow();
+ }
+}
+
+// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/NonXMLCommonAttributes.php b/library/HTMLPurifier/HTMLModule/NonXMLCommonAttributes.php
index 5f1b14abb..da722253a 100644
--- a/library/HTMLPurifier/HTMLModule/NonXMLCommonAttributes.php
+++ b/library/HTMLPurifier/HTMLModule/NonXMLCommonAttributes.php
@@ -2,8 +2,14 @@
class HTMLPurifier_HTMLModule_NonXMLCommonAttributes extends HTMLPurifier_HTMLModule
{
+ /**
+ * @type string
+ */
public $name = 'NonXMLCommonAttributes';
+ /**
+ * @type array
+ */
public $attr_collections = array(
'Lang' => array(
'lang' => 'LanguageCode',
diff --git a/library/HTMLPurifier/HTMLModule/Object.php b/library/HTMLPurifier/HTMLModule/Object.php
index 193c1011f..2f9efc5c8 100644
--- a/library/HTMLPurifier/HTMLModule/Object.php
+++ b/library/HTMLPurifier/HTMLModule/Object.php
@@ -7,13 +7,26 @@
*/
class HTMLPurifier_HTMLModule_Object extends HTMLPurifier_HTMLModule
{
-
+ /**
+ * @type string
+ */
public $name = 'Object';
- public $safe = false;
- public function setup($config) {
+ /**
+ * @type bool
+ */
+ public $safe = false;
- $this->addElement('object', 'Inline', 'Optional: #PCDATA | Flow | param', 'Common',
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
+ $this->addElement(
+ 'object',
+ 'Inline',
+ 'Optional: #PCDATA | Flow | param',
+ 'Common',
array(
'archive' => 'URI',
'classid' => 'URI',
@@ -30,18 +43,20 @@ class HTMLPurifier_HTMLModule_Object extends HTMLPurifier_HTMLModule
)
);
- $this->addElement('param', false, 'Empty', false,
+ $this->addElement(
+ 'param',
+ false,
+ 'Empty',
+ null,
array(
'id' => 'ID',
'name*' => 'Text',
'type' => 'Text',
'value' => 'Text',
'valuetype' => 'Enum#data,ref,object'
- )
+ )
);
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/Presentation.php b/library/HTMLPurifier/HTMLModule/Presentation.php
index 8ff0b5ed7..6458ce9d8 100644
--- a/library/HTMLPurifier/HTMLModule/Presentation.php
+++ b/library/HTMLPurifier/HTMLModule/Presentation.php
@@ -13,24 +13,30 @@
class HTMLPurifier_HTMLModule_Presentation extends HTMLPurifier_HTMLModule
{
+ /**
+ * @type string
+ */
public $name = 'Presentation';
- public function setup($config) {
- $this->addElement('hr', 'Block', 'Empty', 'Common');
- $this->addElement('sub', 'Inline', 'Inline', 'Common');
- $this->addElement('sup', 'Inline', 'Inline', 'Common');
- $b = $this->addElement('b', 'Inline', 'Inline', 'Common');
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
+ $this->addElement('hr', 'Block', 'Empty', 'Common');
+ $this->addElement('sub', 'Inline', 'Inline', 'Common');
+ $this->addElement('sup', 'Inline', 'Inline', 'Common');
+ $b = $this->addElement('b', 'Inline', 'Inline', 'Common');
$b->formatting = true;
- $big = $this->addElement('big', 'Inline', 'Inline', 'Common');
+ $big = $this->addElement('big', 'Inline', 'Inline', 'Common');
$big->formatting = true;
- $i = $this->addElement('i', 'Inline', 'Inline', 'Common');
+ $i = $this->addElement('i', 'Inline', 'Inline', 'Common');
$i->formatting = true;
- $small = $this->addElement('small', 'Inline', 'Inline', 'Common');
+ $small = $this->addElement('small', 'Inline', 'Inline', 'Common');
$small->formatting = true;
- $tt = $this->addElement('tt', 'Inline', 'Inline', 'Common');
+ $tt = $this->addElement('tt', 'Inline', 'Inline', 'Common');
$tt->formatting = true;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/Proprietary.php b/library/HTMLPurifier/HTMLModule/Proprietary.php
index dd36a3de0..5ee3c8e67 100644
--- a/library/HTMLPurifier/HTMLModule/Proprietary.php
+++ b/library/HTMLPurifier/HTMLModule/Proprietary.php
@@ -6,12 +6,21 @@
*/
class HTMLPurifier_HTMLModule_Proprietary extends HTMLPurifier_HTMLModule
{
-
+ /**
+ * @type string
+ */
public $name = 'Proprietary';
- public function setup($config) {
-
- $this->addElement('marquee', 'Inline', 'Flow', 'Common',
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
+ $this->addElement(
+ 'marquee',
+ 'Inline',
+ 'Flow',
+ 'Common',
array(
'direction' => 'Enum#left,right,up,down',
'behavior' => 'Enum#alternate',
@@ -25,9 +34,7 @@ class HTMLPurifier_HTMLModule_Proprietary extends HTMLPurifier_HTMLModule
'vspace' => 'Pixels',
)
);
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/Ruby.php b/library/HTMLPurifier/HTMLModule/Ruby.php
index b26a0a30a..a0d48924d 100644
--- a/library/HTMLPurifier/HTMLModule/Ruby.php
+++ b/library/HTMLPurifier/HTMLModule/Ruby.php
@@ -7,12 +7,22 @@
class HTMLPurifier_HTMLModule_Ruby extends HTMLPurifier_HTMLModule
{
+ /**
+ * @type string
+ */
public $name = 'Ruby';
- public function setup($config) {
- $this->addElement('ruby', 'Inline',
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
+ $this->addElement(
+ 'ruby',
+ 'Inline',
'Custom: ((rb, (rt | (rp, rt, rp))) | (rbc, rtc, rtc?))',
- 'Common');
+ 'Common'
+ );
$this->addElement('rbc', false, 'Required: rb', 'Common');
$this->addElement('rtc', false, 'Required: rt', 'Common');
$rb = $this->addElement('rb', false, 'Inline', 'Common');
@@ -21,7 +31,6 @@ class HTMLPurifier_HTMLModule_Ruby extends HTMLPurifier_HTMLModule
$rt->excludes = array('ruby' => true);
$this->addElement('rp', false, 'Optional: #PCDATA', 'Common');
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/SafeEmbed.php b/library/HTMLPurifier/HTMLModule/SafeEmbed.php
index ea256716b..04e6689ea 100644
--- a/library/HTMLPurifier/HTMLModule/SafeEmbed.php
+++ b/library/HTMLPurifier/HTMLModule/SafeEmbed.php
@@ -5,14 +5,22 @@
*/
class HTMLPurifier_HTMLModule_SafeEmbed extends HTMLPurifier_HTMLModule
{
-
+ /**
+ * @type string
+ */
public $name = 'SafeEmbed';
- public function setup($config) {
-
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
$max = $config->get('HTML.MaxImgLength');
$embed = $this->addElement(
- 'embed', 'Inline', 'Empty', 'Common',
+ 'embed',
+ 'Inline',
+ 'Empty',
+ 'Common',
array(
'src*' => 'URI#embedded',
'type' => 'Enum#application/x-shockwave-flash',
@@ -21,14 +29,12 @@ class HTMLPurifier_HTMLModule_SafeEmbed extends HTMLPurifier_HTMLModule
'allowscriptaccess' => 'Enum#never',
'allownetworking' => 'Enum#internal',
'flashvars' => 'Text',
- 'wmode' => 'Enum#window',
+ 'wmode' => 'Enum#window,transparent,opaque',
'name' => 'ID',
)
);
$embed->attr_transform_post[] = new HTMLPurifier_AttrTransform_SafeEmbed();
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/SafeObject.php b/library/HTMLPurifier/HTMLModule/SafeObject.php
index 64ab8c070..1297f80a3 100644
--- a/library/HTMLPurifier/HTMLModule/SafeObject.php
+++ b/library/HTMLPurifier/HTMLModule/SafeObject.php
@@ -8,11 +8,16 @@
*/
class HTMLPurifier_HTMLModule_SafeObject extends HTMLPurifier_HTMLModule
{
-
+ /**
+ * @type string
+ */
public $name = 'SafeObject';
- public function setup($config) {
-
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
// These definitions are not intrinsically safe: the attribute transforms
// are a vital part of ensuring safety.
@@ -25,18 +30,24 @@ class HTMLPurifier_HTMLModule_SafeObject extends HTMLPurifier_HTMLModule
array(
// While technically not required by the spec, we're forcing
// it to this value.
- 'type' => 'Enum#application/x-shockwave-flash',
- 'width' => 'Pixels#' . $max,
+ 'type' => 'Enum#application/x-shockwave-flash',
+ 'width' => 'Pixels#' . $max,
'height' => 'Pixels#' . $max,
- 'data' => 'URI#embedded',
- 'classid' => 'Enum#clsid:d27cdb6e-ae6d-11cf-96b8-444553540000',
- 'codebase' => new HTMLPurifier_AttrDef_Enum(array(
- 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0')),
+ 'data' => 'URI#embedded',
+ 'codebase' => new HTMLPurifier_AttrDef_Enum(
+ array(
+ 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0'
+ )
+ ),
)
);
$object->attr_transform_post[] = new HTMLPurifier_AttrTransform_SafeObject();
- $param = $this->addElement('param', false, 'Empty', false,
+ $param = $this->addElement(
+ 'param',
+ false,
+ 'Empty',
+ false,
array(
'id' => 'ID',
'name*' => 'Text',
@@ -45,9 +56,7 @@ class HTMLPurifier_HTMLModule_SafeObject extends HTMLPurifier_HTMLModule
);
$param->attr_transform_post[] = new HTMLPurifier_AttrTransform_SafeParam();
$this->info_injector[] = 'SafeObject';
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/SafeScripting.php b/library/HTMLPurifier/HTMLModule/SafeScripting.php
new file mode 100644
index 000000000..0330cd97f
--- /dev/null
+++ b/library/HTMLPurifier/HTMLModule/SafeScripting.php
@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * A "safe" script module. No inline JS is allowed, and pointed to JS
+ * files must match whitelist.
+ */
+class HTMLPurifier_HTMLModule_SafeScripting extends HTMLPurifier_HTMLModule
+{
+ /**
+ * @type string
+ */
+ public $name = 'SafeScripting';
+
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
+ // These definitions are not intrinsically safe: the attribute transforms
+ // are a vital part of ensuring safety.
+
+ $allowed = $config->get('HTML.SafeScripting');
+ $script = $this->addElement(
+ 'script',
+ 'Inline',
+ 'Empty',
+ null,
+ array(
+ // While technically not required by the spec, we're forcing
+ // it to this value.
+ 'type' => 'Enum#text/javascript',
+ 'src*' => new HTMLPurifier_AttrDef_Enum(array_keys($allowed))
+ )
+ );
+ $script->attr_transform_pre[] =
+ $script->attr_transform_post[] = new HTMLPurifier_AttrTransform_ScriptRequired();
+ }
+}
+
+// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/Scripting.php b/library/HTMLPurifier/HTMLModule/Scripting.php
index cecdea6c3..8b28a7b7e 100644
--- a/library/HTMLPurifier/HTMLModule/Scripting.php
+++ b/library/HTMLPurifier/HTMLModule/Scripting.php
@@ -15,12 +15,31 @@ INSIDE HTML PURIFIER DOCUMENTS. USE ONLY WITH TRUSTED USER INPUT!!!
*/
class HTMLPurifier_HTMLModule_Scripting extends HTMLPurifier_HTMLModule
{
+ /**
+ * @type string
+ */
public $name = 'Scripting';
+
+ /**
+ * @type array
+ */
public $elements = array('script', 'noscript');
+
+ /**
+ * @type array
+ */
public $content_sets = array('Block' => 'script | noscript', 'Inline' => 'script | noscript');
+
+ /**
+ * @type bool
+ */
public $safe = false;
- public function setup($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
// TODO: create custom child-definition for noscript that
// auto-wraps stray #PCDATA in a similar manner to
// blockquote's custom definition (we would use it but
@@ -33,20 +52,20 @@ class HTMLPurifier_HTMLModule_Scripting extends HTMLPurifier_HTMLModule
// In theory, this could be safe, but I don't see any reason to
// allow it.
$this->info['noscript'] = new HTMLPurifier_ElementDef();
- $this->info['noscript']->attr = array( 0 => array('Common') );
+ $this->info['noscript']->attr = array(0 => array('Common'));
$this->info['noscript']->content_model = 'Heading | List | Block';
$this->info['noscript']->content_model_type = 'required';
$this->info['script'] = new HTMLPurifier_ElementDef();
$this->info['script']->attr = array(
'defer' => new HTMLPurifier_AttrDef_Enum(array('defer')),
- 'src' => new HTMLPurifier_AttrDef_URI(true),
- 'type' => new HTMLPurifier_AttrDef_Enum(array('text/javascript'))
+ 'src' => new HTMLPurifier_AttrDef_URI(true),
+ 'type' => new HTMLPurifier_AttrDef_Enum(array('text/javascript'))
);
$this->info['script']->content_model = '#PCDATA';
$this->info['script']->content_model_type = 'optional';
- $this->info['script']->attr_transform_pre['type'] =
- $this->info['script']->attr_transform_post['type'] =
+ $this->info['script']->attr_transform_pre[] =
+ $this->info['script']->attr_transform_post[] =
new HTMLPurifier_AttrTransform_ScriptRequired();
}
}
diff --git a/library/HTMLPurifier/HTMLModule/StyleAttribute.php b/library/HTMLPurifier/HTMLModule/StyleAttribute.php
index eb78464cc..497b832ae 100644
--- a/library/HTMLPurifier/HTMLModule/StyleAttribute.php
+++ b/library/HTMLPurifier/HTMLModule/StyleAttribute.php
@@ -6,8 +6,14 @@
*/
class HTMLPurifier_HTMLModule_StyleAttribute extends HTMLPurifier_HTMLModule
{
-
+ /**
+ * @type string
+ */
public $name = 'StyleAttribute';
+
+ /**
+ * @type array
+ */
public $attr_collections = array(
// The inclusion routine differs from the Abstract Modules but
// is in line with the DTD and XML Schemas.
@@ -15,10 +21,13 @@ class HTMLPurifier_HTMLModule_StyleAttribute extends HTMLPurifier_HTMLModule
'Core' => array(0 => array('Style'))
);
- public function setup($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
$this->attr_collections['Style']['style'] = new HTMLPurifier_AttrDef_CSS();
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/Tables.php b/library/HTMLPurifier/HTMLModule/Tables.php
index f314ced3f..8a0b3b461 100644
--- a/library/HTMLPurifier/HTMLModule/Tables.php
+++ b/library/HTMLPurifier/HTMLModule/Tables.php
@@ -5,15 +5,23 @@
*/
class HTMLPurifier_HTMLModule_Tables extends HTMLPurifier_HTMLModule
{
-
+ /**
+ * @type string
+ */
public $name = 'Tables';
- public function setup($config) {
-
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
$this->addElement('caption', false, 'Inline', 'Common');
- $this->addElement('table', 'Block',
- new HTMLPurifier_ChildDef_Table(), 'Common',
+ $this->addElement(
+ 'table',
+ 'Block',
+ new HTMLPurifier_ChildDef_Table(),
+ 'Common',
array(
'border' => 'Pixels',
'cellpadding' => 'Length',
@@ -34,9 +42,12 @@ class HTMLPurifier_HTMLModule_Tables extends HTMLPurifier_HTMLModule
$cell_t = array_merge(
array(
- 'abbr' => 'Text',
+ 'abbr' => 'Text',
'colspan' => 'Number',
'rowspan' => 'Number',
+ // Apparently, as of HTML5 this attribute only applies
+ // to 'th' elements.
+ 'scope' => 'Enum#row,col,rowgroup,colgroup',
),
$cell_align
);
@@ -47,20 +58,18 @@ class HTMLPurifier_HTMLModule_Tables extends HTMLPurifier_HTMLModule
$cell_col = array_merge(
array(
- 'span' => 'Number',
+ 'span' => 'Number',
'width' => 'MultiLength',
),
$cell_align
);
- $this->addElement('col', false, 'Empty', 'Common', $cell_col);
+ $this->addElement('col', false, 'Empty', 'Common', $cell_col);
$this->addElement('colgroup', false, 'Optional: col', 'Common', $cell_col);
$this->addElement('tbody', false, 'Required: tr', 'Common', $cell_align);
$this->addElement('thead', false, 'Required: tr', 'Common', $cell_align);
$this->addElement('tfoot', false, 'Required: tr', 'Common', $cell_align);
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/Target.php b/library/HTMLPurifier/HTMLModule/Target.php
index 2b844ecc4..b188ac936 100644
--- a/library/HTMLPurifier/HTMLModule/Target.php
+++ b/library/HTMLPurifier/HTMLModule/Target.php
@@ -5,10 +5,16 @@
*/
class HTMLPurifier_HTMLModule_Target extends HTMLPurifier_HTMLModule
{
-
+ /**
+ * @type string
+ */
public $name = 'Target';
- public function setup($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
$elements = array('a');
foreach ($elements as $name) {
$e = $this->addBlankElement($name);
@@ -17,7 +23,6 @@ class HTMLPurifier_HTMLModule_Target extends HTMLPurifier_HTMLModule
);
}
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/TargetBlank.php b/library/HTMLPurifier/HTMLModule/TargetBlank.php
new file mode 100644
index 000000000..58ccc6894
--- /dev/null
+++ b/library/HTMLPurifier/HTMLModule/TargetBlank.php
@@ -0,0 +1,24 @@
+<?php
+
+/**
+ * Module adds the target=blank attribute transformation to a tags. It
+ * is enabled by HTML.TargetBlank
+ */
+class HTMLPurifier_HTMLModule_TargetBlank extends HTMLPurifier_HTMLModule
+{
+ /**
+ * @type string
+ */
+ public $name = 'TargetBlank';
+
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
+ $a = $this->addBlankElement('a');
+ $a->attr_transform_post[] = new HTMLPurifier_AttrTransform_TargetBlank();
+ }
+}
+
+// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/Text.php b/library/HTMLPurifier/HTMLModule/Text.php
index ae77c7188..7a65e0048 100644
--- a/library/HTMLPurifier/HTMLModule/Text.php
+++ b/library/HTMLPurifier/HTMLModule/Text.php
@@ -14,43 +14,59 @@
*/
class HTMLPurifier_HTMLModule_Text extends HTMLPurifier_HTMLModule
{
-
+ /**
+ * @type string
+ */
public $name = 'Text';
+
+ /**
+ * @type array
+ */
public $content_sets = array(
'Flow' => 'Heading | Block | Inline'
);
- public function setup($config) {
-
+ /**
+ * @param HTMLPurifier_Config $config
+ */
+ public function setup($config)
+ {
// Inline Phrasal -------------------------------------------------
- $this->addElement('abbr', 'Inline', 'Inline', 'Common');
+ $this->addElement('abbr', 'Inline', 'Inline', 'Common');
$this->addElement('acronym', 'Inline', 'Inline', 'Common');
- $this->addElement('cite', 'Inline', 'Inline', 'Common');
- $this->addElement('dfn', 'Inline', 'Inline', 'Common');
- $this->addElement('kbd', 'Inline', 'Inline', 'Common');
- $this->addElement('q', 'Inline', 'Inline', 'Common', array('cite' => 'URI'));
- $this->addElement('samp', 'Inline', 'Inline', 'Common');
- $this->addElement('var', 'Inline', 'Inline', 'Common');
+ $this->addElement('cite', 'Inline', 'Inline', 'Common');
+ $this->addElement('dfn', 'Inline', 'Inline', 'Common');
+ $this->addElement('kbd', 'Inline', 'Inline', 'Common');
+ $this->addElement('q', 'Inline', 'Inline', 'Common', array('cite' => 'URI'));
+ $this->addElement('samp', 'Inline', 'Inline', 'Common');
+ $this->addElement('var', 'Inline', 'Inline', 'Common');
- $em = $this->addElement('em', 'Inline', 'Inline', 'Common');
+ $em = $this->addElement('em', 'Inline', 'Inline', 'Common');
$em->formatting = true;
- $strong = $this->addElement('strong', 'Inline', 'Inline', 'Common');
+ $strong = $this->addElement('strong', 'Inline', 'Inline', 'Common');
$strong->formatting = true;
- $code = $this->addElement('code', 'Inline', 'Inline', 'Common');
+ $code = $this->addElement('code', 'Inline', 'Inline', 'Common');
$code->formatting = true;
// Inline Structural ----------------------------------------------
$this->addElement('span', 'Inline', 'Inline', 'Common');
- $this->addElement('br', 'Inline', 'Empty', 'Core');
+ $this->addElement('br', 'Inline', 'Empty', 'Core');
// Block Phrasal --------------------------------------------------
- $this->addElement('address', 'Block', 'Inline', 'Common');
- $this->addElement('blockquote', 'Block', 'Optional: Heading | Block | List', 'Common', array('cite' => 'URI') );
+ $this->addElement('address', 'Block', 'Inline', 'Common');
+ $this->addElement('blockquote', 'Block', 'Optional: Heading | Block | List', 'Common', array('cite' => 'URI'));
$pre = $this->addElement('pre', 'Block', 'Inline', 'Common');
$pre->excludes = $this->makeLookup(
- 'img', 'big', 'small', 'object', 'applet', 'font', 'basefont' );
+ 'img',
+ 'big',
+ 'small',
+ 'object',
+ 'applet',
+ 'font',
+ 'basefont'
+ );
$this->addElement('h1', 'Heading', 'Inline', 'Common');
$this->addElement('h2', 'Heading', 'Inline', 'Common');
$this->addElement('h3', 'Heading', 'Inline', 'Common');
@@ -60,12 +76,12 @@ class HTMLPurifier_HTMLModule_Text extends HTMLPurifier_HTMLModule
// Block Structural -----------------------------------------------
$p = $this->addElement('p', 'Block', 'Inline', 'Common');
- $p->autoclose = array_flip(array("address", "blockquote", "center", "dir", "div", "dl", "fieldset", "ol", "p", "ul"));
+ $p->autoclose = array_flip(
+ array("address", "blockquote", "center", "dir", "div", "dl", "fieldset", "ol", "p", "ul")
+ );
$this->addElement('div', 'Block', 'Flow', 'Common');
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/Tidy.php b/library/HTMLPurifier/HTMLModule/Tidy.php
index 21783f18e..08aa23247 100644
--- a/library/HTMLPurifier/HTMLModule/Tidy.php
+++ b/library/HTMLPurifier/HTMLModule/Tidy.php
@@ -7,36 +7,41 @@
*/
class HTMLPurifier_HTMLModule_Tidy extends HTMLPurifier_HTMLModule
{
-
/**
- * List of supported levels. Index zero is a special case "no fixes"
- * level.
+ * List of supported levels.
+ * Index zero is a special case "no fixes" level.
+ * @type array
*/
public $levels = array(0 => 'none', 'light', 'medium', 'heavy');
/**
- * Default level to place all fixes in. Disabled by default
+ * Default level to place all fixes in.
+ * Disabled by default.
+ * @type string
*/
public $defaultLevel = null;
/**
- * Lists of fixes used by getFixesForLevel(). Format is:
+ * Lists of fixes used by getFixesForLevel().
+ * Format is:
* HTMLModule_Tidy->fixesForLevel[$level] = array('fix-1', 'fix-2');
+ * @type array
*/
public $fixesForLevel = array(
- 'light' => array(),
+ 'light' => array(),
'medium' => array(),
- 'heavy' => array()
+ 'heavy' => array()
);
/**
* Lazy load constructs the module by determining the necessary
* fixes to create and then delegating to the populate() function.
+ * @param HTMLPurifier_Config $config
* @todo Wildcard matching and error reporting when an added or
* subtracted fix has no effect.
*/
- public function setup($config) {
-
+ public function setup($config)
+ {
// create fixes, initialize fixesForLevel
$fixes = $this->makeFixes();
$this->makeFixesForLevel($fixes);
@@ -46,38 +51,38 @@ class HTMLPurifier_HTMLModule_Tidy extends HTMLPurifier_HTMLModule
$fixes_lookup = $this->getFixesForLevel($level);
// get custom fix declarations: these need namespace processing
- $add_fixes = $config->get('HTML.TidyAdd');
+ $add_fixes = $config->get('HTML.TidyAdd');
$remove_fixes = $config->get('HTML.TidyRemove');
foreach ($fixes as $name => $fix) {
// needs to be refactored a little to implement globbing
- if (
- isset($remove_fixes[$name]) ||
- (!isset($add_fixes[$name]) && !isset($fixes_lookup[$name]))
- ) {
+ if (isset($remove_fixes[$name]) ||
+ (!isset($add_fixes[$name]) && !isset($fixes_lookup[$name]))) {
unset($fixes[$name]);
}
}
// populate this module with necessary fixes
$this->populate($fixes);
-
}
/**
* Retrieves all fixes per a level, returning fixes for that specific
* level as well as all levels below it.
- * @param $level String level identifier, see $levels for valid values
- * @return Lookup up table of fixes
+ * @param string $level level identifier, see $levels for valid values
+ * @return array Lookup up table of fixes
*/
- public function getFixesForLevel($level) {
+ public function getFixesForLevel($level)
+ {
if ($level == $this->levels[0]) {
return array();
}
$activated_levels = array();
for ($i = 1, $c = count($this->levels); $i < $c; $i++) {
$activated_levels[] = $this->levels[$i];
- if ($this->levels[$i] == $level) break;
+ if ($this->levels[$i] == $level) {
+ break;
+ }
}
if ($i == $c) {
trigger_error(
@@ -99,9 +104,13 @@ class HTMLPurifier_HTMLModule_Tidy extends HTMLPurifier_HTMLModule
* Dynamically populates the $fixesForLevel member variable using
* the fixes array. It may be custom overloaded, used in conjunction
* with $defaultLevel, or not used at all.
+ * @param array $fixes
*/
- public function makeFixesForLevel($fixes) {
- if (!isset($this->defaultLevel)) return;
+ public function makeFixesForLevel($fixes)
+ {
+ if (!isset($this->defaultLevel)) {
+ return;
+ }
if (!isset($this->fixesForLevel[$this->defaultLevel])) {
trigger_error(
'Default level ' . $this->defaultLevel . ' does not exist',
@@ -115,9 +124,10 @@ class HTMLPurifier_HTMLModule_Tidy extends HTMLPurifier_HTMLModule
/**
* Populates the module with transforms and other special-case code
* based on a list of fixes passed to it
- * @param $lookup Lookup table of fixes to activate
+ * @param array $fixes Lookup table of fixes to activate
*/
- public function populate($fixes) {
+ public function populate($fixes)
+ {
foreach ($fixes as $name => $fix) {
// determine what the fix is for
list($type, $params) = $this->getFixType($name);
@@ -169,20 +179,31 @@ class HTMLPurifier_HTMLModule_Tidy extends HTMLPurifier_HTMLModule
* @note $fix_parameters is type dependant, see populate() for usage
* of these parameters
*/
- public function getFixType($name) {
+ public function getFixType($name)
+ {
// parse it
$property = $attr = null;
- if (strpos($name, '#') !== false) list($name, $property) = explode('#', $name);
- if (strpos($name, '@') !== false) list($name, $attr) = explode('@', $name);
+ if (strpos($name, '#') !== false) {
+ list($name, $property) = explode('#', $name);
+ }
+ if (strpos($name, '@') !== false) {
+ list($name, $attr) = explode('@', $name);
+ }
// figure out the parameters
$params = array();
- if ($name !== '') $params['element'] = $name;
- if (!is_null($attr)) $params['attr'] = $attr;
+ if ($name !== '') {
+ $params['element'] = $name;
+ }
+ if (!is_null($attr)) {
+ $params['attr'] = $attr;
+ }
// special case: attribute transform
if (!is_null($attr)) {
- if (is_null($property)) $property = 'pre';
+ if (is_null($property)) {
+ $property = 'pre';
+ }
$type = 'attr_transform_' . $property;
return array($type, $params);
}
@@ -199,9 +220,11 @@ class HTMLPurifier_HTMLModule_Tidy extends HTMLPurifier_HTMLModule
/**
* Defines all fixes the module will perform in a compact
* associative array of fix name to fix implementation.
+ * @return array
*/
- public function makeFixes() {}
-
+ public function makeFixes()
+ {
+ }
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/Tidy/Name.php b/library/HTMLPurifier/HTMLModule/Tidy/Name.php
index 61ff85ce2..a995161b2 100644
--- a/library/HTMLPurifier/HTMLModule/Tidy/Name.php
+++ b/library/HTMLPurifier/HTMLModule/Tidy/Name.php
@@ -5,18 +5,27 @@
*/
class HTMLPurifier_HTMLModule_Tidy_Name extends HTMLPurifier_HTMLModule_Tidy
{
+ /**
+ * @type string
+ */
public $name = 'Tidy_Name';
+
+ /**
+ * @type string
+ */
public $defaultLevel = 'heavy';
- public function makeFixes() {
+ /**
+ * @return array
+ */
+ public function makeFixes()
+ {
$r = array();
-
// @name for img, a -----------------------------------------------
// Technically, it's allowed even on strict, so we allow authors to use
// it. However, it's deprecated in future versions of XHTML.
$r['img@name'] =
$r['a@name'] = new HTMLPurifier_AttrTransform_Name();
-
return $r;
}
}
diff --git a/library/HTMLPurifier/HTMLModule/Tidy/Proprietary.php b/library/HTMLPurifier/HTMLModule/Tidy/Proprietary.php
index 14c15c4a0..332643821 100644
--- a/library/HTMLPurifier/HTMLModule/Tidy/Proprietary.php
+++ b/library/HTMLPurifier/HTMLModule/Tidy/Proprietary.php
@@ -3,10 +3,21 @@
class HTMLPurifier_HTMLModule_Tidy_Proprietary extends HTMLPurifier_HTMLModule_Tidy
{
+ /**
+ * @type string
+ */
public $name = 'Tidy_Proprietary';
+
+ /**
+ * @type string
+ */
public $defaultLevel = 'light';
- public function makeFixes() {
+ /**
+ * @return array
+ */
+ public function makeFixes()
+ {
$r = array();
$r['table@background'] = new HTMLPurifier_AttrTransform_Background();
$r['td@background'] = new HTMLPurifier_AttrTransform_Background();
@@ -18,7 +29,6 @@ class HTMLPurifier_HTMLModule_Tidy_Proprietary extends HTMLPurifier_HTMLModule_T
$r['table@height'] = new HTMLPurifier_AttrTransform_Length('height');
return $r;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/Tidy/Strict.php b/library/HTMLPurifier/HTMLModule/Tidy/Strict.php
index c73dc3c4d..803c44fab 100644
--- a/library/HTMLPurifier/HTMLModule/Tidy/Strict.php
+++ b/library/HTMLPurifier/HTMLModule/Tidy/Strict.php
@@ -2,18 +2,40 @@
class HTMLPurifier_HTMLModule_Tidy_Strict extends HTMLPurifier_HTMLModule_Tidy_XHTMLAndHTML4
{
+ /**
+ * @type string
+ */
public $name = 'Tidy_Strict';
+
+ /**
+ * @type string
+ */
public $defaultLevel = 'light';
- public function makeFixes() {
+ /**
+ * @return array
+ */
+ public function makeFixes()
+ {
$r = parent::makeFixes();
$r['blockquote#content_model_type'] = 'strictblockquote';
return $r;
}
+ /**
+ * @type bool
+ */
public $defines_child_def = true;
- public function getChildDef($def) {
- if ($def->content_model_type != 'strictblockquote') return parent::getChildDef($def);
+
+ /**
+ * @param HTMLPurifier_ElementDef $def
+ * @return HTMLPurifier_ChildDef_StrictBlockquote
+ */
+ public function getChildDef($def)
+ {
+ if ($def->content_model_type != 'strictblockquote') {
+ return parent::getChildDef($def);
+ }
return new HTMLPurifier_ChildDef_StrictBlockquote($def->content_model);
}
}
diff --git a/library/HTMLPurifier/HTMLModule/Tidy/Transitional.php b/library/HTMLPurifier/HTMLModule/Tidy/Transitional.php
index 9960b1dd1..c095ad974 100644
--- a/library/HTMLPurifier/HTMLModule/Tidy/Transitional.php
+++ b/library/HTMLPurifier/HTMLModule/Tidy/Transitional.php
@@ -2,7 +2,14 @@
class HTMLPurifier_HTMLModule_Tidy_Transitional extends HTMLPurifier_HTMLModule_Tidy_XHTMLAndHTML4
{
+ /**
+ * @type string
+ */
public $name = 'Tidy_Transitional';
+
+ /**
+ * @type string
+ */
public $defaultLevel = 'heavy';
}
diff --git a/library/HTMLPurifier/HTMLModule/Tidy/XHTML.php b/library/HTMLPurifier/HTMLModule/Tidy/XHTML.php
index db5a378e5..3ecddc434 100644
--- a/library/HTMLPurifier/HTMLModule/Tidy/XHTML.php
+++ b/library/HTMLPurifier/HTMLModule/Tidy/XHTML.php
@@ -2,16 +2,25 @@
class HTMLPurifier_HTMLModule_Tidy_XHTML extends HTMLPurifier_HTMLModule_Tidy
{
-
+ /**
+ * @type string
+ */
public $name = 'Tidy_XHTML';
+
+ /**
+ * @type string
+ */
public $defaultLevel = 'medium';
- public function makeFixes() {
+ /**
+ * @return array
+ */
+ public function makeFixes()
+ {
$r = array();
$r['@lang'] = new HTMLPurifier_AttrTransform_Lang();
return $r;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php b/library/HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php
index 02e943813..c4f16a4dc 100644
--- a/library/HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php
+++ b/library/HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php
@@ -3,69 +3,86 @@
class HTMLPurifier_HTMLModule_Tidy_XHTMLAndHTML4 extends HTMLPurifier_HTMLModule_Tidy
{
- public function makeFixes() {
-
+ /**
+ * @return array
+ */
+ public function makeFixes()
+ {
$r = array();
// == deprecated tag transforms ===================================
- $r['font'] = new HTMLPurifier_TagTransform_Font();
- $r['menu'] = new HTMLPurifier_TagTransform_Simple('ul');
- $r['dir'] = new HTMLPurifier_TagTransform_Simple('ul');
- $r['center'] = new HTMLPurifier_TagTransform_Simple('div', 'text-align:center;');
- $r['u'] = new HTMLPurifier_TagTransform_Simple('span', 'text-decoration:underline;');
- $r['s'] = new HTMLPurifier_TagTransform_Simple('span', 'text-decoration:line-through;');
+ $r['font'] = new HTMLPurifier_TagTransform_Font();
+ $r['menu'] = new HTMLPurifier_TagTransform_Simple('ul');
+ $r['dir'] = new HTMLPurifier_TagTransform_Simple('ul');
+ $r['center'] = new HTMLPurifier_TagTransform_Simple('div', 'text-align:center;');
+ $r['u'] = new HTMLPurifier_TagTransform_Simple('span', 'text-decoration:underline;');
+ $r['s'] = new HTMLPurifier_TagTransform_Simple('span', 'text-decoration:line-through;');
$r['strike'] = new HTMLPurifier_TagTransform_Simple('span', 'text-decoration:line-through;');
// == deprecated attribute transforms =============================
$r['caption@align'] =
- new HTMLPurifier_AttrTransform_EnumToCSS('align', array(
- // we're following IE's behavior, not Firefox's, due
- // to the fact that no one supports caption-side:right,
- // W3C included (with CSS 2.1). This is a slightly
- // unreasonable attribute!
- 'left' => 'text-align:left;',
- 'right' => 'text-align:right;',
- 'top' => 'caption-side:top;',
- 'bottom' => 'caption-side:bottom;' // not supported by IE
- ));
+ new HTMLPurifier_AttrTransform_EnumToCSS(
+ 'align',
+ array(
+ // we're following IE's behavior, not Firefox's, due
+ // to the fact that no one supports caption-side:right,
+ // W3C included (with CSS 2.1). This is a slightly
+ // unreasonable attribute!
+ 'left' => 'text-align:left;',
+ 'right' => 'text-align:right;',
+ 'top' => 'caption-side:top;',
+ 'bottom' => 'caption-side:bottom;' // not supported by IE
+ )
+ );
// @align for img -------------------------------------------------
$r['img@align'] =
- new HTMLPurifier_AttrTransform_EnumToCSS('align', array(
- 'left' => 'float:left;',
- 'right' => 'float:right;',
- 'top' => 'vertical-align:top;',
- 'middle' => 'vertical-align:middle;',
- 'bottom' => 'vertical-align:baseline;',
- ));
+ new HTMLPurifier_AttrTransform_EnumToCSS(
+ 'align',
+ array(
+ 'left' => 'float:left;',
+ 'right' => 'float:right;',
+ 'top' => 'vertical-align:top;',
+ 'middle' => 'vertical-align:middle;',
+ 'bottom' => 'vertical-align:baseline;',
+ )
+ );
// @align for table -----------------------------------------------
$r['table@align'] =
- new HTMLPurifier_AttrTransform_EnumToCSS('align', array(
- 'left' => 'float:left;',
- 'center' => 'margin-left:auto;margin-right:auto;',
- 'right' => 'float:right;'
- ));
+ new HTMLPurifier_AttrTransform_EnumToCSS(
+ 'align',
+ array(
+ 'left' => 'float:left;',
+ 'center' => 'margin-left:auto;margin-right:auto;',
+ 'right' => 'float:right;'
+ )
+ );
// @align for hr -----------------------------------------------
$r['hr@align'] =
- new HTMLPurifier_AttrTransform_EnumToCSS('align', array(
- // we use both text-align and margin because these work
- // for different browsers (IE and Firefox, respectively)
- // and the melange makes for a pretty cross-compatible
- // solution
- 'left' => 'margin-left:0;margin-right:auto;text-align:left;',
- 'center' => 'margin-left:auto;margin-right:auto;text-align:center;',
- 'right' => 'margin-left:auto;margin-right:0;text-align:right;'
- ));
+ new HTMLPurifier_AttrTransform_EnumToCSS(
+ 'align',
+ array(
+ // we use both text-align and margin because these work
+ // for different browsers (IE and Firefox, respectively)
+ // and the melange makes for a pretty cross-compatible
+ // solution
+ 'left' => 'margin-left:0;margin-right:auto;text-align:left;',
+ 'center' => 'margin-left:auto;margin-right:auto;text-align:center;',
+ 'right' => 'margin-left:auto;margin-right:0;text-align:right;'
+ )
+ );
// @align for h1, h2, h3, h4, h5, h6, p, div ----------------------
// {{{
- $align_lookup = array();
- $align_values = array('left', 'right', 'center', 'justify');
- foreach ($align_values as $v) $align_lookup[$v] = "text-align:$v;";
+ $align_lookup = array();
+ $align_values = array('left', 'right', 'center', 'justify');
+ foreach ($align_values as $v) {
+ $align_lookup[$v] = "text-align:$v;";
+ }
// }}}
$r['h1@align'] =
$r['h2@align'] =
@@ -73,7 +90,7 @@ class HTMLPurifier_HTMLModule_Tidy_XHTMLAndHTML4 extends HTMLPurifier_HTMLModule
$r['h4@align'] =
$r['h5@align'] =
$r['h6@align'] =
- $r['p@align'] =
+ $r['p@align'] =
$r['div@align'] =
new HTMLPurifier_AttrTransform_EnumToCSS('align', $align_lookup);
@@ -88,12 +105,15 @@ class HTMLPurifier_HTMLModule_Tidy_XHTMLAndHTML4 extends HTMLPurifier_HTMLModule
// @clear for br --------------------------------------------------
$r['br@clear'] =
- new HTMLPurifier_AttrTransform_EnumToCSS('clear', array(
- 'left' => 'clear:left;',
- 'right' => 'clear:right;',
- 'all' => 'clear:both;',
- 'none' => 'clear:none;',
- ));
+ new HTMLPurifier_AttrTransform_EnumToCSS(
+ 'clear',
+ array(
+ 'left' => 'clear:left;',
+ 'right' => 'clear:right;',
+ 'all' => 'clear:both;',
+ 'none' => 'clear:none;',
+ )
+ );
// @height for td, th ---------------------------------------------
$r['td@height'] =
@@ -125,19 +145,19 @@ class HTMLPurifier_HTMLModule_Tidy_XHTMLAndHTML4 extends HTMLPurifier_HTMLModule
// @type for li, ol, ul -------------------------------------------
// {{{
- $ul_types = array(
- 'disc' => 'list-style-type:disc;',
- 'square' => 'list-style-type:square;',
- 'circle' => 'list-style-type:circle;'
- );
- $ol_types = array(
- '1' => 'list-style-type:decimal;',
- 'i' => 'list-style-type:lower-roman;',
- 'I' => 'list-style-type:upper-roman;',
- 'a' => 'list-style-type:lower-alpha;',
- 'A' => 'list-style-type:upper-alpha;'
- );
- $li_types = $ul_types + $ol_types;
+ $ul_types = array(
+ 'disc' => 'list-style-type:disc;',
+ 'square' => 'list-style-type:square;',
+ 'circle' => 'list-style-type:circle;'
+ );
+ $ol_types = array(
+ '1' => 'list-style-type:decimal;',
+ 'i' => 'list-style-type:lower-roman;',
+ 'I' => 'list-style-type:upper-roman;',
+ 'a' => 'list-style-type:lower-alpha;',
+ 'A' => 'list-style-type:upper-alpha;'
+ );
+ $li_types = $ul_types + $ol_types;
// }}}
$r['ul@type'] = new HTMLPurifier_AttrTransform_EnumToCSS('type', $ul_types);
@@ -153,9 +173,7 @@ class HTMLPurifier_HTMLModule_Tidy_XHTMLAndHTML4 extends HTMLPurifier_HTMLModule
$r['hr@width'] = new HTMLPurifier_AttrTransform_Length('width');
return $r;
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/HTMLModule/XMLCommonAttributes.php b/library/HTMLPurifier/HTMLModule/XMLCommonAttributes.php
index 9c0e03198..01dbe9deb 100644
--- a/library/HTMLPurifier/HTMLModule/XMLCommonAttributes.php
+++ b/library/HTMLPurifier/HTMLModule/XMLCommonAttributes.php
@@ -2,8 +2,14 @@
class HTMLPurifier_HTMLModule_XMLCommonAttributes extends HTMLPurifier_HTMLModule
{
+ /**
+ * @type string
+ */
public $name = 'XMLCommonAttributes';
+ /**
+ * @type array
+ */
public $attr_collections = array(
'Lang' => array(
'xml:lang' => 'LanguageCode',
diff --git a/library/HTMLPurifier/HTMLModuleManager.php b/library/HTMLPurifier/HTMLModuleManager.php
index f5c4a1d2c..f3a17cb03 100644
--- a/library/HTMLPurifier/HTMLModuleManager.php
+++ b/library/HTMLPurifier/HTMLModuleManager.php
@@ -4,57 +4,75 @@ class HTMLPurifier_HTMLModuleManager
{
/**
- * Instance of HTMLPurifier_DoctypeRegistry
+ * @type HTMLPurifier_DoctypeRegistry
*/
public $doctypes;
/**
- * Instance of current doctype
+ * Instance of current doctype.
+ * @type string
*/
public $doctype;
/**
- * Instance of HTMLPurifier_AttrTypes
+ * @type HTMLPurifier_AttrTypes
*/
public $attrTypes;
/**
* Active instances of modules for the specified doctype are
* indexed, by name, in this array.
+ * @type HTMLPurifier_HTMLModule[]
*/
public $modules = array();
/**
- * Array of recognized HTMLPurifier_Module instances, indexed by
- * module's class name. This array is usually lazy loaded, but a
+ * Array of recognized HTMLPurifier_HTMLModule instances,
+ * indexed by module's class name. This array is usually lazy loaded, but a
* user can overload a module by pre-emptively registering it.
+ * @type HTMLPurifier_HTMLModule[]
*/
public $registeredModules = array();
/**
- * List of extra modules that were added by the user using addModule().
- * These get unconditionally merged into the current doctype, whatever
+ * List of extra modules that were added by the user
+ * using addModule(). These get unconditionally merged into the current doctype, whatever
* it may be.
+ * @type HTMLPurifier_HTMLModule[]
*/
public $userModules = array();
/**
* Associative array of element name to list of modules that have
* definitions for the element; this array is dynamically filled.
+ * @type array
*/
public $elementLookup = array();
- /** List of prefixes we should use for registering small names */
+ /**
+ * List of prefixes we should use for registering small names.
+ * @type array
+ */
public $prefixes = array('HTMLPurifier_HTMLModule_');
- public $contentSets; /**< Instance of HTMLPurifier_ContentSets */
- public $attrCollections; /**< Instance of HTMLPurifier_AttrCollections */
+ /**
+ * @type HTMLPurifier_ContentSets
+ */
+ public $contentSets;
- /** If set to true, unsafe elements and attributes will be allowed */
- public $trusted = false;
+ /**
+ * @type HTMLPurifier_AttrCollections
+ */
+ public $attrCollections;
- public function __construct() {
+ /**
+ * If set to true, unsafe elements and attributes will be allowed.
+ * @type bool
+ */
+ public $trusted = false;
+ public function __construct()
+ {
// editable internal objects
$this->attrTypes = new HTMLPurifier_AttrTypes();
$this->doctypes = new HTMLPurifier_DoctypeRegistry();
@@ -65,17 +83,18 @@ class HTMLPurifier_HTMLModuleManager
'Presentation', 'Edit', 'Bdo', 'Tables', 'Image',
'StyleAttribute',
// Unsafe:
- 'Scripting', 'Object', 'Forms',
+ 'Scripting', 'Object', 'Forms',
// Sorta legacy, but present in strict:
'Name',
);
- $transitional = array('Legacy', 'Target');
+ $transitional = array('Legacy', 'Target', 'Iframe');
$xml = array('XMLCommonAttributes');
$non_xml = array('NonXMLCommonAttributes');
// setup basic doctypes
$this->doctypes->register(
- 'HTML 4.01 Transitional', false,
+ 'HTML 4.01 Transitional',
+ false,
array_merge($common, $transitional, $non_xml),
array('Tidy_Transitional', 'Tidy_Proprietary'),
array(),
@@ -84,7 +103,8 @@ class HTMLPurifier_HTMLModuleManager
);
$this->doctypes->register(
- 'HTML 4.01 Strict', false,
+ 'HTML 4.01 Strict',
+ false,
array_merge($common, $non_xml),
array('Tidy_Strict', 'Tidy_Proprietary', 'Tidy_Name'),
array(),
@@ -93,7 +113,8 @@ class HTMLPurifier_HTMLModuleManager
);
$this->doctypes->register(
- 'XHTML 1.0 Transitional', true,
+ 'XHTML 1.0 Transitional',
+ true,
array_merge($common, $transitional, $xml, $non_xml),
array('Tidy_Transitional', 'Tidy_XHTML', 'Tidy_Proprietary', 'Tidy_Name'),
array(),
@@ -102,7 +123,8 @@ class HTMLPurifier_HTMLModuleManager
);
$this->doctypes->register(
- 'XHTML 1.0 Strict', true,
+ 'XHTML 1.0 Strict',
+ true,
array_merge($common, $xml, $non_xml),
array('Tidy_Strict', 'Tidy_XHTML', 'Tidy_Strict', 'Tidy_Proprietary', 'Tidy_Name'),
array(),
@@ -111,8 +133,11 @@ class HTMLPurifier_HTMLModuleManager
);
$this->doctypes->register(
- 'XHTML 1.1', true,
- array_merge($common, $xml, array('Ruby')),
+ 'XHTML 1.1',
+ true,
+ // Iframe is a real XHTML 1.1 module, despite being
+ // "transitional"!
+ array_merge($common, $xml, array('Ruby', 'Iframe')),
array('Tidy_Strict', 'Tidy_XHTML', 'Tidy_Proprietary', 'Tidy_Strict', 'Tidy_Name'), // Tidy_XHTML1_1
array(),
'-//W3C//DTD XHTML 1.1//EN',
@@ -142,7 +167,8 @@ class HTMLPurifier_HTMLModuleManager
* your module manually. All modules must have been included
* externally: registerModule will not perform inclusions for you!
*/
- public function registerModule($module, $overload = false) {
+ public function registerModule($module, $overload = false)
+ {
if (is_string($module)) {
// attempt to load the module
$original_module = $module;
@@ -157,8 +183,10 @@ class HTMLPurifier_HTMLModuleManager
if (!$ok) {
$module = $original_module;
if (!class_exists($module)) {
- trigger_error($original_module . ' module does not exist',
- E_USER_ERROR);
+ trigger_error(
+ $original_module . ' module does not exist',
+ E_USER_ERROR
+ );
return;
}
}
@@ -178,9 +206,12 @@ class HTMLPurifier_HTMLModuleManager
* Adds a module to the current doctype by first registering it,
* and then tacking it on to the active doctype
*/
- public function addModule($module) {
+ public function addModule($module)
+ {
$this->registerModule($module);
- if (is_object($module)) $module = $module->name;
+ if (is_object($module)) {
+ $module = $module->name;
+ }
$this->userModules[] = $module;
}
@@ -188,17 +219,18 @@ class HTMLPurifier_HTMLModuleManager
* Adds a class prefix that registerModule() will use to resolve a
* string name to a concrete class
*/
- public function addPrefix($prefix) {
+ public function addPrefix($prefix)
+ {
$this->prefixes[] = $prefix;
}
/**
* Performs processing on modules, after being called you may
* use getElement() and getElements()
- * @param $config Instance of HTMLPurifier_Config
+ * @param HTMLPurifier_Config $config
*/
- public function setup($config) {
-
+ public function setup($config)
+ {
$this->trusted = $config->get('HTML.Trusted');
// generate
@@ -211,24 +243,34 @@ class HTMLPurifier_HTMLModuleManager
if (is_array($lookup)) {
foreach ($modules as $k => $m) {
- if (isset($special_cases[$m])) continue;
- if (!isset($lookup[$m])) unset($modules[$k]);
+ if (isset($special_cases[$m])) {
+ continue;
+ }
+ if (!isset($lookup[$m])) {
+ unset($modules[$k]);
+ }
}
}
- // add proprietary module (this gets special treatment because
- // it is completely removed from doctypes, etc.)
+ // custom modules
if ($config->get('HTML.Proprietary')) {
$modules[] = 'Proprietary';
}
-
- // add SafeObject/Safeembed modules
if ($config->get('HTML.SafeObject')) {
$modules[] = 'SafeObject';
}
if ($config->get('HTML.SafeEmbed')) {
$modules[] = 'SafeEmbed';
}
+ if ($config->get('HTML.SafeScripting') !== array()) {
+ $modules[] = 'SafeScripting';
+ }
+ if ($config->get('HTML.Nofollow')) {
+ $modules[] = 'Nofollow';
+ }
+ if ($config->get('HTML.TargetBlank')) {
+ $modules[] = 'TargetBlank';
+ }
// merge in custom modules
$modules = array_merge($modules, $this->userModules);
@@ -246,7 +288,7 @@ class HTMLPurifier_HTMLModuleManager
// prepare any injectors
foreach ($this->modules as $module) {
$n = array();
- foreach ($module->info_injector as $i => $injector) {
+ foreach ($module->info_injector as $injector) {
if (!is_object($injector)) {
$class = "HTMLPurifier_Injector_$injector";
$injector = new $class;
@@ -285,7 +327,8 @@ class HTMLPurifier_HTMLModuleManager
* Takes a module and adds it to the active module collection,
* registering it if necessary.
*/
- public function processModule($module) {
+ public function processModule($module)
+ {
if (!isset($this->registeredModules[$module]) || is_object($module)) {
$this->registerModule($module);
}
@@ -296,13 +339,17 @@ class HTMLPurifier_HTMLModuleManager
* Retrieves merged element definitions.
* @return Array of HTMLPurifier_ElementDef
*/
- public function getElements() {
-
+ public function getElements()
+ {
$elements = array();
foreach ($this->modules as $module) {
- if (!$this->trusted && !$module->safe) continue;
+ if (!$this->trusted && !$module->safe) {
+ continue;
+ }
foreach ($module->info as $name => $v) {
- if (isset($elements[$name])) continue;
+ if (isset($elements[$name])) {
+ continue;
+ }
$elements[$name] = $this->getElement($name);
}
}
@@ -310,7 +357,9 @@ class HTMLPurifier_HTMLModuleManager
// remove dud elements, this happens when an element that
// appeared to be safe actually wasn't
foreach ($elements as $n => $v) {
- if ($v === false) unset($elements[$n]);
+ if ($v === false) {
+ unset($elements[$n]);
+ }
}
return $elements;
@@ -319,28 +368,29 @@ class HTMLPurifier_HTMLModuleManager
/**
* Retrieves a single merged element definition
- * @param $name Name of element
- * @param $trusted Boolean trusted overriding parameter: set to true
+ * @param string $name Name of element
+ * @param bool $trusted Boolean trusted overriding parameter: set to true
* if you want the full version of an element
- * @return Merged HTMLPurifier_ElementDef
+ * @return HTMLPurifier_ElementDef Merged HTMLPurifier_ElementDef
* @note You may notice that modules are getting iterated over twice (once
* in getElements() and once here). This
* is because
*/
- public function getElement($name, $trusted = null) {
-
+ public function getElement($name, $trusted = null)
+ {
if (!isset($this->elementLookup[$name])) {
return false;
}
// setup global state variables
$def = false;
- if ($trusted === null) $trusted = $this->trusted;
+ if ($trusted === null) {
+ $trusted = $this->trusted;
+ }
// iterate through each module that has registered itself to this
// element
- foreach($this->elementLookup[$name] as $module_name) {
-
+ foreach ($this->elementLookup[$name] as $module_name) {
$module = $this->modules[$module_name];
// refuse to create/merge from a module that is deemed unsafe--
@@ -364,6 +414,13 @@ class HTMLPurifier_HTMLModuleManager
// :TODO:
// non-standalone definitions that don't have a standalone
// to merge into could be deferred to the end
+ // HOWEVER, it is perfectly valid for a non-standalone
+ // definition to lack a standalone definition, even
+ // after all processing: this allows us to safely
+ // specify extra attributes for elements that may not be
+ // enabled all in one place. In particular, this might
+ // be the case for trusted elements. WARNING: care must
+ // be taken that the /extra/ definitions are all safe.
continue;
}
@@ -385,7 +442,9 @@ class HTMLPurifier_HTMLModuleManager
// This can occur if there is a blank definition, but no base to
// mix it in with
- if (!$def) return false;
+ if (!$def) {
+ return false;
+ }
// add information on required attributes
foreach ($def->attr as $attr_name => $attr_def) {
@@ -393,11 +452,8 @@ class HTMLPurifier_HTMLModuleManager
$def->required_attr[] = $attr_name;
}
}
-
return $def;
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/IDAccumulator.php b/library/HTMLPurifier/IDAccumulator.php
index 73215295a..65c902c07 100644
--- a/library/HTMLPurifier/IDAccumulator.php
+++ b/library/HTMLPurifier/IDAccumulator.php
@@ -17,11 +17,12 @@ class HTMLPurifier_IDAccumulator
/**
* Builds an IDAccumulator, also initializing the default blacklist
- * @param $config Instance of HTMLPurifier_Config
- * @param $context Instance of HTMLPurifier_Context
- * @return Fully initialized HTMLPurifier_IDAccumulator
+ * @param HTMLPurifier_Config $config Instance of HTMLPurifier_Config
+ * @param HTMLPurifier_Context $context Instance of HTMLPurifier_Context
+ * @return HTMLPurifier_IDAccumulator Fully initialized HTMLPurifier_IDAccumulator
*/
- public static function build($config, $context) {
+ public static function build($config, $context)
+ {
$id_accumulator = new HTMLPurifier_IDAccumulator();
$id_accumulator->load($config->get('Attr.IDBlacklist'));
return $id_accumulator;
@@ -29,11 +30,14 @@ class HTMLPurifier_IDAccumulator
/**
* Add an ID to the lookup table.
- * @param $id ID to be added.
- * @return Bool status, true if success, false if there's a dupe
+ * @param string $id ID to be added.
+ * @return bool status, true if success, false if there's a dupe
*/
- public function add($id) {
- if (isset($this->ids[$id])) return false;
+ public function add($id)
+ {
+ if (isset($this->ids[$id])) {
+ return false;
+ }
return $this->ids[$id] = true;
}
@@ -42,12 +46,12 @@ class HTMLPurifier_IDAccumulator
* @param $array_of_ids Array of IDs to load
* @note This function doesn't care about duplicates
*/
- public function load($array_of_ids) {
+ public function load($array_of_ids)
+ {
foreach ($array_of_ids as $id) {
$this->ids[$id] = true;
}
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Injector.php b/library/HTMLPurifier/Injector.php
index 5922f8130..5060eef9e 100644
--- a/library/HTMLPurifier/Injector.php
+++ b/library/HTMLPurifier/Injector.php
@@ -17,64 +17,71 @@ abstract class HTMLPurifier_Injector
{
/**
- * Advisory name of injector, this is for friendly error messages
+ * Advisory name of injector, this is for friendly error messages.
+ * @type string
*/
public $name;
/**
- * Instance of HTMLPurifier_HTMLDefinition
+ * @type HTMLPurifier_HTMLDefinition
*/
protected $htmlDefinition;
/**
* Reference to CurrentNesting variable in Context. This is an array
* list of tokens that we are currently "inside"
+ * @type array
*/
protected $currentNesting;
/**
- * Reference to InputTokens variable in Context. This is an array
- * list of the input tokens that are being processed.
+ * Reference to current token.
+ * @type HTMLPurifier_Token
*/
- protected $inputTokens;
+ protected $currentToken;
/**
- * Reference to InputIndex variable in Context. This is an integer
- * array index for $this->inputTokens that indicates what token
- * is currently being processed.
+ * Reference to InputZipper variable in Context.
+ * @type HTMLPurifier_Zipper
*/
- protected $inputIndex;
+ protected $inputZipper;
/**
* Array of elements and attributes this injector creates and therefore
* need to be allowed by the definition. Takes form of
* array('element' => array('attr', 'attr2'), 'element2')
+ * @type array
*/
public $needed = array();
/**
- * Index of inputTokens to rewind to.
+ * Number of elements to rewind backwards (relative).
+ * @type bool|int
*/
- protected $rewind = false;
+ protected $rewindOffset = false;
/**
* Rewind to a spot to re-perform processing. This is useful if you
* deleted a node, and now need to see if this change affected any
* earlier nodes. Rewinding does not affect other injectors, and can
* result in infinite loops if not used carefully.
+ * @param bool|int $offset
* @warning HTML Purifier will prevent you from fast-forwarding with this
* function.
*/
- public function rewind($index) {
- $this->rewind = $index;
+ public function rewindOffset($offset)
+ {
+ $this->rewindOffset = $offset;
}
/**
- * Retrieves rewind, and then unsets it.
+ * Retrieves rewind offset, and then unsets it.
+ * @return bool|int
*/
- public function getRewind() {
- $r = $this->rewind;
- $this->rewind = false;
+ public function getRewindOffset()
+ {
+ $r = $this->rewindOffset;
+ $this->rewindOffset = false;
return $r;
}
@@ -83,20 +90,23 @@ abstract class HTMLPurifier_Injector
* this allows references to important variables to be made within
* the injector. This function also checks if the HTML environment
* will work with the Injector (see checkNeeded()).
- * @param $config Instance of HTMLPurifier_Config
- * @param $context Instance of HTMLPurifier_Context
- * @return Boolean false if success, string of missing needed element/attribute if failure
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool|string Boolean false if success, string of missing needed element/attribute if failure
*/
- public function prepare($config, $context) {
+ public function prepare($config, $context)
+ {
$this->htmlDefinition = $config->getHTMLDefinition();
// Even though this might fail, some unit tests ignore this and
// still test checkNeeded, so be careful. Maybe get rid of that
// dependency.
$result = $this->checkNeeded($config);
- if ($result !== false) return $result;
+ if ($result !== false) {
+ return $result;
+ }
$this->currentNesting =& $context->get('CurrentNesting');
- $this->inputTokens =& $context->get('InputTokens');
- $this->inputIndex =& $context->get('InputIndex');
+ $this->currentToken =& $context->get('CurrentToken');
+ $this->inputZipper =& $context->get('InputZipper');
return false;
}
@@ -104,18 +114,26 @@ abstract class HTMLPurifier_Injector
* This function checks if the HTML environment
* will work with the Injector: if p tags are not allowed, the
* Auto-Paragraphing injector should not be enabled.
- * @param $config Instance of HTMLPurifier_Config
- * @param $context Instance of HTMLPurifier_Context
- * @return Boolean false if success, string of missing needed element/attribute if failure
+ * @param HTMLPurifier_Config $config
+ * @return bool|string Boolean false if success, string of missing needed element/attribute if failure
*/
- public function checkNeeded($config) {
+ public function checkNeeded($config)
+ {
$def = $config->getHTMLDefinition();
foreach ($this->needed as $element => $attributes) {
- if (is_int($element)) $element = $attributes;
- if (!isset($def->info[$element])) return $element;
- if (!is_array($attributes)) continue;
+ if (is_int($element)) {
+ $element = $attributes;
+ }
+ if (!isset($def->info[$element])) {
+ return $element;
+ }
+ if (!is_array($attributes)) {
+ continue;
+ }
foreach ($attributes as $name) {
- if (!isset($def->info[$element]->attr[$name])) return "$element.$name";
+ if (!isset($def->info[$element]->attr[$name])) {
+ return "$element.$name";
+ }
}
}
return false;
@@ -123,10 +141,11 @@ abstract class HTMLPurifier_Injector
/**
* Tests if the context node allows a certain element
- * @param $name Name of element to test for
- * @return True if element is allowed, false if it is not
+ * @param string $name Name of element to test for
+ * @return bool True if element is allowed, false if it is not
*/
- public function allowsElement($name) {
+ public function allowsElement($name)
+ {
if (!empty($this->currentNesting)) {
$parent_token = array_pop($this->currentNesting);
$this->currentNesting[] = $parent_token;
@@ -141,7 +160,9 @@ abstract class HTMLPurifier_Injector
for ($i = count($this->currentNesting) - 2; $i >= 0; $i--) {
$node = $this->currentNesting[$i];
$def = $this->htmlDefinition->info[$node->name];
- if (isset($def->excludes[$name])) return false;
+ if (isset($def->excludes[$name])) {
+ return false;
+ }
}
return true;
}
@@ -151,14 +172,22 @@ abstract class HTMLPurifier_Injector
* you reach the end of the input tokens.
* @warning Please prevent previous references from interfering with this
* functions by setting $i = null beforehand!
- * @param &$i Current integer index variable for inputTokens
- * @param &$current Current token variable. Do NOT use $token, as that variable is also a reference
- */
- protected function forward(&$i, &$current) {
- if ($i === null) $i = $this->inputIndex + 1;
- else $i++;
- if (!isset($this->inputTokens[$i])) return false;
- $current = $this->inputTokens[$i];
+ * @param int $i Current integer index variable for inputTokens
+ * @param HTMLPurifier_Token $current Current token variable.
+ * Do NOT use $token, as that variable is also a reference
+ * @return bool
+ */
+ protected function forward(&$i, &$current)
+ {
+ if ($i === null) {
+ $i = count($this->inputZipper->back) - 1;
+ } else {
+ $i--;
+ }
+ if ($i < 0) {
+ return false;
+ }
+ $current = $this->inputZipper->back[$i];
return true;
}
@@ -166,14 +195,27 @@ abstract class HTMLPurifier_Injector
* Similar to _forward, but accepts a third parameter $nesting (which
* should be initialized at 0) and stops when we hit the end tag
* for the node $this->inputIndex starts in.
+ * @param int $i Current integer index variable for inputTokens
+ * @param HTMLPurifier_Token $current Current token variable.
+ * Do NOT use $token, as that variable is also a reference
+ * @param int $nesting
+ * @return bool
*/
- protected function forwardUntilEndToken(&$i, &$current, &$nesting) {
+ protected function forwardUntilEndToken(&$i, &$current, &$nesting)
+ {
$result = $this->forward($i, $current);
- if (!$result) return false;
- if ($nesting === null) $nesting = 0;
- if ($current instanceof HTMLPurifier_Token_Start) $nesting++;
- elseif ($current instanceof HTMLPurifier_Token_End) {
- if ($nesting <= 0) return false;
+ if (!$result) {
+ return false;
+ }
+ if ($nesting === null) {
+ $nesting = 0;
+ }
+ if ($current instanceof HTMLPurifier_Token_Start) {
+ $nesting++;
+ } elseif ($current instanceof HTMLPurifier_Token_End) {
+ if ($nesting <= 0) {
+ return false;
+ }
$nesting--;
}
return true;
@@ -184,56 +226,56 @@ abstract class HTMLPurifier_Injector
* you reach the beginning of input tokens.
* @warning Please prevent previous references from interfering with this
* functions by setting $i = null beforehand!
- * @param &$i Current integer index variable for inputTokens
- * @param &$current Current token variable. Do NOT use $token, as that variable is also a reference
- */
- protected function backward(&$i, &$current) {
- if ($i === null) $i = $this->inputIndex - 1;
- else $i--;
- if ($i < 0) return false;
- $current = $this->inputTokens[$i];
- return true;
- }
-
- /**
- * Initializes the iterator at the current position. Use in a do {} while;
- * loop to force the _forward and _backward functions to start at the
- * current location.
- * @warning Please prevent previous references from interfering with this
- * functions by setting $i = null beforehand!
- * @param &$i Current integer index variable for inputTokens
- * @param &$current Current token variable. Do NOT use $token, as that variable is also a reference
+ * @param int $i Current integer index variable for inputTokens
+ * @param HTMLPurifier_Token $current Current token variable.
+ * Do NOT use $token, as that variable is also a reference
+ * @return bool
*/
- protected function current(&$i, &$current) {
- if ($i === null) $i = $this->inputIndex;
- $current = $this->inputTokens[$i];
+ protected function backward(&$i, &$current)
+ {
+ if ($i === null) {
+ $i = count($this->inputZipper->front) - 1;
+ } else {
+ $i--;
+ }
+ if ($i < 0) {
+ return false;
+ }
+ $current = $this->inputZipper->front[$i];
+ return true;
}
/**
* Handler that is called when a text token is processed
*/
- public function handleText(&$token) {}
+ public function handleText(&$token)
+ {
+ }
/**
* Handler that is called when a start or empty token is processed
*/
- public function handleElement(&$token) {}
+ public function handleElement(&$token)
+ {
+ }
/**
* Handler that is called when an end token is processed
*/
- public function handleEnd(&$token) {
+ public function handleEnd(&$token)
+ {
$this->notifyEnd($token);
}
/**
* Notifier that is called when an end token is processed
+ * @param HTMLPurifier_Token $token Current token variable.
* @note This differs from handlers in that the token is read-only
* @deprecated
*/
- public function notifyEnd($token) {}
-
-
+ public function notifyEnd($token)
+ {
+ }
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Injector/AutoParagraph.php b/library/HTMLPurifier/Injector/AutoParagraph.php
index afa760892..4afdd128d 100644
--- a/library/HTMLPurifier/Injector/AutoParagraph.php
+++ b/library/HTMLPurifier/Injector/AutoParagraph.php
@@ -8,17 +8,31 @@
*/
class HTMLPurifier_Injector_AutoParagraph extends HTMLPurifier_Injector
{
-
+ /**
+ * @type string
+ */
public $name = 'AutoParagraph';
+
+ /**
+ * @type array
+ */
public $needed = array('p');
- private function _pStart() {
+ /**
+ * @return HTMLPurifier_Token_Start
+ */
+ private function _pStart()
+ {
$par = new HTMLPurifier_Token_Start('p');
$par->armor['MakeWellFormed_TagClosedError'] = true;
return $par;
}
- public function handleText(&$token) {
+ /**
+ * @param HTMLPurifier_Token_Text $token
+ */
+ public function handleText(&$token)
+ {
$text = $token->data;
// Does the current parent allow <p> tags?
if ($this->allowsElement('p')) {
@@ -72,11 +86,9 @@ class HTMLPurifier_Injector_AutoParagraph extends HTMLPurifier_Injector
// ----
}
}
- // Is the current parent a <p> tag?
- } elseif (
- !empty($this->currentNesting) &&
- $this->currentNesting[count($this->currentNesting)-1]->name == 'p'
- ) {
+ // Is the current parent a <p> tag?
+ } elseif (!empty($this->currentNesting) &&
+ $this->currentNesting[count($this->currentNesting) - 1]->name == 'p') {
// State 3.1: ...<p>PAR1
// ----
@@ -84,7 +96,7 @@ class HTMLPurifier_Injector_AutoParagraph extends HTMLPurifier_Injector
// ------------
$token = array();
$this->_splitText($text, $token);
- // Abort!
+ // Abort!
} else {
// State 4.1: ...<b>PAR1
// ----
@@ -94,7 +106,11 @@ class HTMLPurifier_Injector_AutoParagraph extends HTMLPurifier_Injector
}
}
- public function handleElement(&$token) {
+ /**
+ * @param HTMLPurifier_Token $token
+ */
+ public function handleElement(&$token)
+ {
// We don't have to check if we're already in a <p> tag for block
// tokens, because the tag would have been autoclosed by MakeWellFormed.
if ($this->allowsElement('p')) {
@@ -102,7 +118,6 @@ class HTMLPurifier_Injector_AutoParagraph extends HTMLPurifier_Injector
if ($this->_isInline($token)) {
// State 1: <div>...<b>
// ---
-
// Check if this token is adjacent to the parent token
// (seek backwards until token isn't whitespace)
$i = null;
@@ -110,31 +125,24 @@ class HTMLPurifier_Injector_AutoParagraph extends HTMLPurifier_Injector
if (!$prev instanceof HTMLPurifier_Token_Start) {
// Token wasn't adjacent
-
- if (
- $prev instanceof HTMLPurifier_Token_Text &&
+ if ($prev instanceof HTMLPurifier_Token_Text &&
substr($prev->data, -2) === "\n\n"
) {
// State 1.1.4: <div><p>PAR1</p>\n\n<b>
// ---
-
// Quite frankly, this should be handled by splitText
$token = array($this->_pStart(), $token);
} else {
// State 1.1.1: <div><p>PAR1</p><b>
// ---
-
// State 1.1.2: <div><br /><b>
// ---
-
// State 1.1.3: <div>PAR<b>
// ---
}
-
} else {
// State 1.2.1: <div><b>
// ---
-
// Lookahead to see if <p> is needed.
if ($this->_pLookAhead()) {
// State 1.3.1: <div><b>PAR1\n\nPAR2
@@ -166,24 +174,20 @@ class HTMLPurifier_Injector_AutoParagraph extends HTMLPurifier_Injector
$i = null;
if ($this->backward($i, $prev)) {
- if (
- !$prev instanceof HTMLPurifier_Token_Text
- ) {
+ if (!$prev instanceof HTMLPurifier_Token_Text) {
// State 3.1.1: ...</p>{p}<b>
// ---
-
// State 3.2.1: ...</p><div>
// -----
-
- if (!is_array($token)) $token = array($token);
+ if (!is_array($token)) {
+ $token = array($token);
+ }
array_unshift($token, new HTMLPurifier_Token_Text("\n\n"));
} else {
// State 3.1.2: ...</p>\n\n{p}<b>
// ---
-
// State 3.2.2: ...</p>\n\n<div>
// -----
-
// Note: PAR<ELEM> cannot occur because PAR would have been
// wrapped in <p> tags.
}
@@ -192,7 +196,6 @@ class HTMLPurifier_Injector_AutoParagraph extends HTMLPurifier_Injector
} else {
// State 2.2: <ul><li>
// ----
-
// State 2.4: <p><b>
// ---
}
@@ -201,18 +204,17 @@ class HTMLPurifier_Injector_AutoParagraph extends HTMLPurifier_Injector
/**
* Splits up a text in paragraph tokens and appends them
* to the result stream that will replace the original
- * @param $data String text data that will be processed
+ * @param string $data String text data that will be processed
* into paragraphs
- * @param $result Reference to array of tokens that the
+ * @param HTMLPurifier_Token[] $result Reference to array of tokens that the
* tags will be appended onto
- * @param $config Instance of HTMLPurifier_Config
- * @param $context Instance of HTMLPurifier_Context
*/
- private function _splitText($data, &$result) {
+ private function _splitText($data, &$result)
+ {
$raw_paragraphs = explode("\n\n", $data);
- $paragraphs = array(); // without empty paragraphs
+ $paragraphs = array(); // without empty paragraphs
$needs_start = false;
- $needs_end = false;
+ $needs_end = false;
$c = count($raw_paragraphs);
if ($c == 1) {
@@ -285,26 +287,33 @@ class HTMLPurifier_Injector_AutoParagraph extends HTMLPurifier_Injector
array_pop($result); // removes \n\n
array_pop($result); // removes </p>
}
-
}
/**
* Returns true if passed token is inline (and, ergo, allowed in
* paragraph tags)
+ * @param HTMLPurifier_Token $token
+ * @return bool
*/
- private function _isInline($token) {
+ private function _isInline($token)
+ {
return isset($this->htmlDefinition->info['p']->child->elements[$token->name]);
}
/**
* Looks ahead in the token list and determines whether or not we need
* to insert a <p> tag.
+ * @return bool
*/
- private function _pLookAhead() {
- $this->current($i, $current);
- if ($current instanceof HTMLPurifier_Token_Start) $nesting = 1;
- else $nesting = 0;
+ private function _pLookAhead()
+ {
+ if ($this->currentToken instanceof HTMLPurifier_Token_Start) {
+ $nesting = 1;
+ } else {
+ $nesting = 0;
+ }
$ok = false;
+ $i = null;
while ($this->forwardUntilEndToken($i, $current, $nesting)) {
$result = $this->_checkNeedsP($current);
if ($result !== null) {
@@ -318,9 +327,12 @@ class HTMLPurifier_Injector_AutoParagraph extends HTMLPurifier_Injector
/**
* Determines if a particular token requires an earlier inline token
* to get a paragraph. This should be used with _forwardUntilEndToken
+ * @param HTMLPurifier_Token $current
+ * @return bool
*/
- private function _checkNeedsP($current) {
- if ($current instanceof HTMLPurifier_Token_Start){
+ private function _checkNeedsP($current)
+ {
+ if ($current instanceof HTMLPurifier_Token_Start) {
if (!$this->_isInline($current)) {
// <div>PAR1<div>
// ----
@@ -339,7 +351,6 @@ class HTMLPurifier_Injector_AutoParagraph extends HTMLPurifier_Injector
}
return null;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Injector/DisplayLinkURI.php b/library/HTMLPurifier/Injector/DisplayLinkURI.php
index 9dce9bd08..c19b1bc27 100644
--- a/library/HTMLPurifier/Injector/DisplayLinkURI.php
+++ b/library/HTMLPurifier/Injector/DisplayLinkURI.php
@@ -5,15 +5,29 @@
*/
class HTMLPurifier_Injector_DisplayLinkURI extends HTMLPurifier_Injector
{
-
+ /**
+ * @type string
+ */
public $name = 'DisplayLinkURI';
+
+ /**
+ * @type array
+ */
public $needed = array('a');
- public function handleElement(&$token) {
+ /**
+ * @param $token
+ */
+ public function handleElement(&$token)
+ {
}
- public function handleEnd(&$token) {
- if (isset($token->start->attr['href'])){
+ /**
+ * @param HTMLPurifier_Token $token
+ */
+ public function handleEnd(&$token)
+ {
+ if (isset($token->start->attr['href'])) {
$url = $token->start->attr['href'];
unset($token->start->attr['href']);
$token = array($token, new HTMLPurifier_Token_Text(" ($url)"));
diff --git a/library/HTMLPurifier/Injector/Linkify.php b/library/HTMLPurifier/Injector/Linkify.php
index 296dac282..069708c25 100644
--- a/library/HTMLPurifier/Injector/Linkify.php
+++ b/library/HTMLPurifier/Injector/Linkify.php
@@ -5,12 +5,24 @@
*/
class HTMLPurifier_Injector_Linkify extends HTMLPurifier_Injector
{
-
+ /**
+ * @type string
+ */
public $name = 'Linkify';
+
+ /**
+ * @type array
+ */
public $needed = array('a' => array('href'));
- public function handleText(&$token) {
- if (!$this->allowsElement('a')) return;
+ /**
+ * @param HTMLPurifier_Token $token
+ */
+ public function handleText(&$token)
+ {
+ if (!$this->allowsElement('a')) {
+ return;
+ }
if (strpos($token->data, '://') === false) {
// our really quick heuristic failed, abort
@@ -21,7 +33,8 @@ class HTMLPurifier_Injector_Linkify extends HTMLPurifier_Injector
// there is/are URL(s). Let's split the string:
// Note: this regex is extremely permissive
- $bits = preg_split('#((?:https?|ftp)://[^\s\'"<>()]+)#S', $token->data, -1, PREG_SPLIT_DELIM_CAPTURE);
+ $bits = preg_split('#((?:https?|ftp)://[^\s\'",<>()]+)#Su', $token->data, -1, PREG_SPLIT_DELIM_CAPTURE);
+
$token = array();
@@ -30,7 +43,9 @@ class HTMLPurifier_Injector_Linkify extends HTMLPurifier_Injector
// $l = is link
for ($i = 0, $c = count($bits), $l = false; $i < $c; $i++, $l = !$l) {
if (!$l) {
- if ($bits[$i] === '') continue;
+ if ($bits[$i] === '') {
+ continue;
+ }
$token[] = new HTMLPurifier_Token_Text($bits[$i]);
} else {
$token[] = new HTMLPurifier_Token_Start('a', array('href' => $bits[$i]));
@@ -38,9 +53,7 @@ class HTMLPurifier_Injector_Linkify extends HTMLPurifier_Injector
$token[] = new HTMLPurifier_Token_End('a');
}
}
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Injector/PurifierLinkify.php b/library/HTMLPurifier/Injector/PurifierLinkify.php
index ad2455a91..cb9046f33 100644
--- a/library/HTMLPurifier/Injector/PurifierLinkify.php
+++ b/library/HTMLPurifier/Injector/PurifierLinkify.php
@@ -6,19 +6,43 @@
*/
class HTMLPurifier_Injector_PurifierLinkify extends HTMLPurifier_Injector
{
-
+ /**
+ * @type string
+ */
public $name = 'PurifierLinkify';
+
+ /**
+ * @type string
+ */
public $docURL;
+
+ /**
+ * @type array
+ */
public $needed = array('a' => array('href'));
- public function prepare($config, $context) {
+ /**
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return string
+ */
+ public function prepare($config, $context)
+ {
$this->docURL = $config->get('AutoFormat.PurifierLinkify.DocURL');
return parent::prepare($config, $context);
}
- public function handleText(&$token) {
- if (!$this->allowsElement('a')) return;
- if (strpos($token->data, '%') === false) return;
+ /**
+ * @param HTMLPurifier_Token $token
+ */
+ public function handleText(&$token)
+ {
+ if (!$this->allowsElement('a')) {
+ return;
+ }
+ if (strpos($token->data, '%') === false) {
+ return;
+ }
$bits = preg_split('#%([a-z0-9]+\.[a-z0-9]+)#Si', $token->data, -1, PREG_SPLIT_DELIM_CAPTURE);
$token = array();
@@ -28,18 +52,20 @@ class HTMLPurifier_Injector_PurifierLinkify extends HTMLPurifier_Injector
// $l = is link
for ($i = 0, $c = count($bits), $l = false; $i < $c; $i++, $l = !$l) {
if (!$l) {
- if ($bits[$i] === '') continue;
+ if ($bits[$i] === '') {
+ continue;
+ }
$token[] = new HTMLPurifier_Token_Text($bits[$i]);
} else {
- $token[] = new HTMLPurifier_Token_Start('a',
- array('href' => str_replace('%s', $bits[$i], $this->docURL)));
+ $token[] = new HTMLPurifier_Token_Start(
+ 'a',
+ array('href' => str_replace('%s', $bits[$i], $this->docURL))
+ );
$token[] = new HTMLPurifier_Token_Text('%' . $bits[$i]);
$token[] = new HTMLPurifier_Token_End('a');
}
}
-
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Injector/RemoveEmpty.php b/library/HTMLPurifier/Injector/RemoveEmpty.php
index 638bfca03..cd885722e 100644
--- a/library/HTMLPurifier/Injector/RemoveEmpty.php
+++ b/library/HTMLPurifier/Injector/RemoveEmpty.php
@@ -2,10 +2,44 @@
class HTMLPurifier_Injector_RemoveEmpty extends HTMLPurifier_Injector
{
+ /**
+ * @type HTMLPurifier_Context
+ */
+ private $context;
- private $context, $config, $attrValidator, $removeNbsp, $removeNbspExceptions;
+ /**
+ * @type HTMLPurifier_Config
+ */
+ private $config;
- public function prepare($config, $context) {
+ /**
+ * @type HTMLPurifier_AttrValidator
+ */
+ private $attrValidator;
+
+ /**
+ * @type bool
+ */
+ private $removeNbsp;
+
+ /**
+ * @type bool
+ */
+ private $removeNbspExceptions;
+
+ /**
+ * @type array
+ * TODO: make me configurable
+ */
+ private $_exclude = array('colgroup' => 1, 'th' => 1, 'td' => 1, 'iframe' => 1);
+
+ /**
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return void
+ */
+ public function prepare($config, $context)
+ {
parent::prepare($config, $context);
$this->config = $config;
$this->context = $context;
@@ -14,38 +48,54 @@ class HTMLPurifier_Injector_RemoveEmpty extends HTMLPurifier_Injector
$this->attrValidator = new HTMLPurifier_AttrValidator();
}
- public function handleElement(&$token) {
- if (!$token instanceof HTMLPurifier_Token_Start) return;
+ /**
+ * @param HTMLPurifier_Token $token
+ */
+ public function handleElement(&$token)
+ {
+ if (!$token instanceof HTMLPurifier_Token_Start) {
+ return;
+ }
$next = false;
- for ($i = $this->inputIndex + 1, $c = count($this->inputTokens); $i < $c; $i++) {
- $next = $this->inputTokens[$i];
+ $deleted = 1; // the current tag
+ for ($i = count($this->inputZipper->back) - 1; $i >= 0; $i--, $deleted++) {
+ $next = $this->inputZipper->back[$i];
if ($next instanceof HTMLPurifier_Token_Text) {
- if ($next->is_whitespace) continue;
+ if ($next->is_whitespace) {
+ continue;
+ }
if ($this->removeNbsp && !isset($this->removeNbspExceptions[$token->name])) {
$plain = str_replace("\xC2\xA0", "", $next->data);
$isWsOrNbsp = $plain === '' || ctype_space($plain);
- if ($isWsOrNbsp) continue;
+ if ($isWsOrNbsp) {
+ continue;
+ }
}
}
break;
}
if (!$next || ($next instanceof HTMLPurifier_Token_End && $next->name == $token->name)) {
- if ($token->name == 'colgroup') return;
+ if (isset($this->_exclude[$token->name])) {
+ return;
+ }
$this->attrValidator->validateToken($token, $this->config, $this->context);
$token->armor['ValidateAttributes'] = true;
- if (isset($token->attr['id']) || isset($token->attr['name'])) return;
- $token = $i - $this->inputIndex + 1;
- for ($b = $this->inputIndex - 1; $b > 0; $b--) {
- $prev = $this->inputTokens[$b];
- if ($prev instanceof HTMLPurifier_Token_Text && $prev->is_whitespace) continue;
+ if (isset($token->attr['id']) || isset($token->attr['name'])) {
+ return;
+ }
+ $token = $deleted + 1;
+ for ($b = 0, $c = count($this->inputZipper->front); $b < $c; $b++) {
+ $prev = $this->inputZipper->front[$b];
+ if ($prev instanceof HTMLPurifier_Token_Text && $prev->is_whitespace) {
+ continue;
+ }
break;
}
// This is safe because we removed the token that triggered this.
- $this->rewind($b - 1);
+ $this->rewindOffset($b+$deleted);
return;
}
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Injector/RemoveSpansWithoutAttributes.php b/library/HTMLPurifier/Injector/RemoveSpansWithoutAttributes.php
index b21313470..9ee7aa84d 100644
--- a/library/HTMLPurifier/Injector/RemoveSpansWithoutAttributes.php
+++ b/library/HTMLPurifier/Injector/RemoveSpansWithoutAttributes.php
@@ -5,25 +5,45 @@
*/
class HTMLPurifier_Injector_RemoveSpansWithoutAttributes extends HTMLPurifier_Injector
{
+ /**
+ * @type string
+ */
public $name = 'RemoveSpansWithoutAttributes';
+
+ /**
+ * @type array
+ */
public $needed = array('span');
+ /**
+ * @type HTMLPurifier_AttrValidator
+ */
private $attrValidator;
/**
- * Used by AttrValidator
+ * Used by AttrValidator.
+ * @type HTMLPurifier_Config
*/
private $config;
+
+ /**
+ * @type HTMLPurifier_Context
+ */
private $context;
- public function prepare($config, $context) {
+ public function prepare($config, $context)
+ {
$this->attrValidator = new HTMLPurifier_AttrValidator();
$this->config = $config;
$this->context = $context;
return parent::prepare($config, $context);
}
- public function handleElement(&$token) {
+ /**
+ * @param HTMLPurifier_Token $token
+ */
+ public function handleElement(&$token)
+ {
if ($token->name !== 'span' || !$token instanceof HTMLPurifier_Token_Start) {
return;
}
@@ -39,8 +59,8 @@ class HTMLPurifier_Injector_RemoveSpansWithoutAttributes extends HTMLPurifier_In
}
$nesting = 0;
- $spanContentTokens = array();
- while ($this->forwardUntilEndToken($i, $current, $nesting)) {}
+ while ($this->forwardUntilEndToken($i, $current, $nesting)) {
+ }
if ($current instanceof HTMLPurifier_Token_End && $current->name === 'span') {
// Mark closing span tag for deletion
@@ -50,7 +70,11 @@ class HTMLPurifier_Injector_RemoveSpansWithoutAttributes extends HTMLPurifier_In
}
}
- public function handleEnd(&$token) {
+ /**
+ * @param HTMLPurifier_Token $token
+ */
+ public function handleEnd(&$token)
+ {
if ($token->markForDeletion) {
$token = false;
}
diff --git a/library/HTMLPurifier/Injector/SafeObject.php b/library/HTMLPurifier/Injector/SafeObject.php
index 9e178ce01..3d17e07af 100644
--- a/library/HTMLPurifier/Injector/SafeObject.php
+++ b/library/HTMLPurifier/Injector/SafeObject.php
@@ -6,29 +6,61 @@
*/
class HTMLPurifier_Injector_SafeObject extends HTMLPurifier_Injector
{
+ /**
+ * @type string
+ */
public $name = 'SafeObject';
+
+ /**
+ * @type array
+ */
public $needed = array('object', 'param');
+ /**
+ * @type array
+ */
protected $objectStack = array();
- protected $paramStack = array();
- // Keep this synchronized with AttrTransform/SafeParam.php
+ /**
+ * @type array
+ */
+ protected $paramStack = array();
+
+ /**
+ * Keep this synchronized with AttrTransform/SafeParam.php.
+ * @type array
+ */
protected $addParam = array(
'allowScriptAccess' => 'never',
'allowNetworking' => 'internal',
);
+
+ /**
+ * @type array
+ */
protected $allowedParam = array(
'wmode' => true,
'movie' => true,
'flashvars' => true,
'src' => true,
+ 'allowFullScreen' => true, // if omitted, assume to be 'false'
);
- public function prepare($config, $context) {
+ /**
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return void
+ */
+ public function prepare($config, $context)
+ {
parent::prepare($config, $context);
}
- public function handleElement(&$token) {
+ /**
+ * @param HTMLPurifier_Token $token
+ */
+ public function handleElement(&$token)
+ {
if ($token->name == 'object') {
$this->objectStack[] = $token;
$this->paramStack[] = array();
@@ -50,16 +82,15 @@ class HTMLPurifier_Injector_SafeObject extends HTMLPurifier_Injector
// attribute, which we need if a type is specified. This is
// *very* Flash specific.
if (!isset($this->objectStack[$i]->attr['data']) &&
- ($token->attr['name'] == 'movie' || $token->attr['name'] == 'src')) {
+ ($token->attr['name'] == 'movie' || $token->attr['name'] == 'src')
+ ) {
$this->objectStack[$i]->attr['data'] = $token->attr['value'];
}
// Check if the parameter is the correct value but has not
// already been added
- if (
- !isset($this->paramStack[$i][$n]) &&
+ if (!isset($this->paramStack[$i][$n]) &&
isset($this->addParam[$n]) &&
- $token->attr['name'] === $this->addParam[$n]
- ) {
+ $token->attr['name'] === $this->addParam[$n]) {
// keep token, and add to param stack
$this->paramStack[$i][$n] = true;
} elseif (isset($this->allowedParam[$n])) {
@@ -75,7 +106,8 @@ class HTMLPurifier_Injector_SafeObject extends HTMLPurifier_Injector
}
}
- public function handleEnd(&$token) {
+ public function handleEnd(&$token)
+ {
// This is the WRONG way of handling the object and param stacks;
// we should be inserting them directly on the relevant object tokens
// so that the global stack handling handles it.
@@ -84,7 +116,6 @@ class HTMLPurifier_Injector_SafeObject extends HTMLPurifier_Injector
array_pop($this->paramStack);
}
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Language.php b/library/HTMLPurifier/Language.php
index 3e2be03b5..65277dd43 100644
--- a/library/HTMLPurifier/Language.php
+++ b/library/HTMLPurifier/Language.php
@@ -8,22 +8,26 @@ class HTMLPurifier_Language
{
/**
- * ISO 639 language code of language. Prefers shortest possible version
+ * ISO 639 language code of language. Prefers shortest possible version.
+ * @type string
*/
public $code = 'en';
/**
- * Fallback language code
+ * Fallback language code.
+ * @type bool|string
*/
public $fallback = false;
/**
- * Array of localizable messages
+ * Array of localizable messages.
+ * @type array
*/
public $messages = array();
/**
- * Array of localizable error codes
+ * Array of localizable error codes.
+ * @type array
*/
public $errorNames = array();
@@ -31,21 +35,33 @@ class HTMLPurifier_Language
* True if no message file was found for this language, so English
* is being used instead. Check this if you'd like to notify the
* user that they've used a non-supported language.
+ * @type bool
*/
public $error = false;
/**
* Has the language object been loaded yet?
+ * @type bool
* @todo Make it private, fix usage in HTMLPurifier_LanguageTest
*/
public $_loaded = false;
/**
- * Instances of HTMLPurifier_Config and HTMLPurifier_Context
+ * @type HTMLPurifier_Config
*/
- protected $config, $context;
+ protected $config;
- public function __construct($config, $context) {
+ /**
+ * @type HTMLPurifier_Context
+ */
+ protected $context;
+
+ /**
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ */
+ public function __construct($config, $context)
+ {
$this->config = $config;
$this->context = $context;
}
@@ -54,8 +70,11 @@ class HTMLPurifier_Language
* Loads language object with necessary info from factory cache
* @note This is a lazy loader
*/
- public function load() {
- if ($this->_loaded) return;
+ public function load()
+ {
+ if ($this->_loaded) {
+ return;
+ }
$factory = HTMLPurifier_LanguageFactory::instance();
$factory->loadLanguage($this->code);
foreach ($factory->keys as $key) {
@@ -66,31 +85,43 @@ class HTMLPurifier_Language
/**
* Retrieves a localised message.
- * @param $key string identifier of message
+ * @param string $key string identifier of message
* @return string localised message
*/
- public function getMessage($key) {
- if (!$this->_loaded) $this->load();
- if (!isset($this->messages[$key])) return "[$key]";
+ public function getMessage($key)
+ {
+ if (!$this->_loaded) {
+ $this->load();
+ }
+ if (!isset($this->messages[$key])) {
+ return "[$key]";
+ }
return $this->messages[$key];
}
/**
* Retrieves a localised error name.
- * @param $int integer error number, corresponding to PHP's error
- * reporting
+ * @param int $int error number, corresponding to PHP's error reporting
* @return string localised message
*/
- public function getErrorName($int) {
- if (!$this->_loaded) $this->load();
- if (!isset($this->errorNames[$int])) return "[Error: $int]";
+ public function getErrorName($int)
+ {
+ if (!$this->_loaded) {
+ $this->load();
+ }
+ if (!isset($this->errorNames[$int])) {
+ return "[Error: $int]";
+ }
return $this->errorNames[$int];
}
/**
* Converts an array list into a string readable representation
+ * @param array $array
+ * @return string
*/
- public function listify($array) {
+ public function listify($array)
+ {
$sep = $this->getMessage('Item separator');
$sep_last = $this->getMessage('Item separator last');
$ret = '';
@@ -108,15 +139,20 @@ class HTMLPurifier_Language
/**
* Formats a localised message with passed parameters
- * @param $key string identifier of message
- * @param $args Parameters to substitute in
+ * @param string $key string identifier of message
+ * @param array $args Parameters to substitute in
* @return string localised message
* @todo Implement conditionals? Right now, some messages make
* reference to line numbers, but those aren't always available
*/
- public function formatMessage($key, $args = array()) {
- if (!$this->_loaded) $this->load();
- if (!isset($this->messages[$key])) return "[$key]";
+ public function formatMessage($key, $args = array())
+ {
+ if (!$this->_loaded) {
+ $this->load();
+ }
+ if (!isset($this->messages[$key])) {
+ return "[$key]";
+ }
$raw = $this->messages[$key];
$subst = array();
$generator = false;
@@ -124,9 +160,15 @@ class HTMLPurifier_Language
if (is_object($value)) {
if ($value instanceof HTMLPurifier_Token) {
// factor this out some time
- if (!$generator) $generator = $this->context->get('Generator');
- if (isset($value->name)) $subst['$'.$i.'.Name'] = $value->name;
- if (isset($value->data)) $subst['$'.$i.'.Data'] = $value->data;
+ if (!$generator) {
+ $generator = $this->context->get('Generator');
+ }
+ if (isset($value->name)) {
+ $subst['$'.$i.'.Name'] = $value->name;
+ }
+ if (isset($value->data)) {
+ $subst['$'.$i.'.Data'] = $value->data;
+ }
$subst['$'.$i.'.Compact'] =
$subst['$'.$i.'.Serialized'] = $generator->generateFromToken($value);
// a more complex algorithm for compact representation
@@ -157,7 +199,6 @@ class HTMLPurifier_Language
}
return strtr($raw, $subst);
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Language/classes/en-x-test.php b/library/HTMLPurifier/Language/classes/en-x-test.php
index d52fcb7ac..8828f5cde 100644
--- a/library/HTMLPurifier/Language/classes/en-x-test.php
+++ b/library/HTMLPurifier/Language/classes/en-x-test.php
@@ -4,9 +4,6 @@
class HTMLPurifier_Language_en_x_test extends HTMLPurifier_Language
{
-
-
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Language/messages/en.php b/library/HTMLPurifier/Language/messages/en.php
index 8d7b5736b..c7f197e1e 100644
--- a/library/HTMLPurifier/Language/messages/en.php
+++ b/library/HTMLPurifier/Language/messages/en.php
@@ -4,60 +4,52 @@ $fallback = false;
$messages = array(
-'HTMLPurifier' => 'HTML Purifier',
-
+ 'HTMLPurifier' => 'HTML Purifier',
// for unit testing purposes
-'LanguageFactoryTest: Pizza' => 'Pizza',
-'LanguageTest: List' => '$1',
-'LanguageTest: Hash' => '$1.Keys; $1.Values',
-
-'Item separator' => ', ',
-'Item separator last' => ' and ', // non-Harvard style
-
-'ErrorCollector: No errors' => 'No errors detected. However, because error reporting is still incomplete, there may have been errors that the error collector was not notified of; please inspect the output HTML carefully.',
-'ErrorCollector: At line' => ' at line $line',
-'ErrorCollector: Incidental errors' => 'Incidental errors',
-
-'Lexer: Unclosed comment' => 'Unclosed comment',
-'Lexer: Unescaped lt' => 'Unescaped less-than sign (<) should be &lt;',
-'Lexer: Missing gt' => 'Missing greater-than sign (>), previous less-than sign (<) should be escaped',
-'Lexer: Missing attribute key' => 'Attribute declaration has no key',
-'Lexer: Missing end quote' => 'Attribute declaration has no end quote',
-'Lexer: Extracted body' => 'Removed document metadata tags',
-
-'Strategy_RemoveForeignElements: Tag transform' => '<$1> element transformed into $CurrentToken.Serialized',
-'Strategy_RemoveForeignElements: Missing required attribute' => '$CurrentToken.Compact element missing required attribute $1',
-'Strategy_RemoveForeignElements: Foreign element to text' => 'Unrecognized $CurrentToken.Serialized tag converted to text',
-'Strategy_RemoveForeignElements: Foreign element removed' => 'Unrecognized $CurrentToken.Serialized tag removed',
-'Strategy_RemoveForeignElements: Comment removed' => 'Comment containing "$CurrentToken.Data" removed',
-'Strategy_RemoveForeignElements: Foreign meta element removed' => 'Unrecognized $CurrentToken.Serialized meta tag and all descendants removed',
-'Strategy_RemoveForeignElements: Token removed to end' => 'Tags and text starting from $1 element where removed to end',
-'Strategy_RemoveForeignElements: Trailing hyphen in comment removed' => 'Trailing hyphen(s) in comment removed',
-'Strategy_RemoveForeignElements: Hyphens in comment collapsed' => 'Double hyphens in comments are not allowed, and were collapsed into single hyphens',
-
-'Strategy_MakeWellFormed: Unnecessary end tag removed' => 'Unnecessary $CurrentToken.Serialized tag removed',
-'Strategy_MakeWellFormed: Unnecessary end tag to text' => 'Unnecessary $CurrentToken.Serialized tag converted to text',
-'Strategy_MakeWellFormed: Tag auto closed' => '$1.Compact started on line $1.Line auto-closed by $CurrentToken.Compact',
-'Strategy_MakeWellFormed: Tag carryover' => '$1.Compact started on line $1.Line auto-continued into $CurrentToken.Compact',
-'Strategy_MakeWellFormed: Stray end tag removed' => 'Stray $CurrentToken.Serialized tag removed',
-'Strategy_MakeWellFormed: Stray end tag to text' => 'Stray $CurrentToken.Serialized tag converted to text',
-'Strategy_MakeWellFormed: Tag closed by element end' => '$1.Compact tag started on line $1.Line closed by end of $CurrentToken.Serialized',
-'Strategy_MakeWellFormed: Tag closed by document end' => '$1.Compact tag started on line $1.Line closed by end of document',
-
-'Strategy_FixNesting: Node removed' => '$CurrentToken.Compact node removed',
-'Strategy_FixNesting: Node excluded' => '$CurrentToken.Compact node removed due to descendant exclusion by ancestor element',
-'Strategy_FixNesting: Node reorganized' => 'Contents of $CurrentToken.Compact node reorganized to enforce its content model',
-'Strategy_FixNesting: Node contents removed' => 'Contents of $CurrentToken.Compact node removed',
-
-'AttrValidator: Attributes transformed' => 'Attributes on $CurrentToken.Compact transformed from $1.Keys to $2.Keys',
-'AttrValidator: Attribute removed' => '$CurrentAttr.Name attribute on $CurrentToken.Compact removed',
-
+ 'LanguageFactoryTest: Pizza' => 'Pizza',
+ 'LanguageTest: List' => '$1',
+ 'LanguageTest: Hash' => '$1.Keys; $1.Values',
+ 'Item separator' => ', ',
+ 'Item separator last' => ' and ', // non-Harvard style
+
+ 'ErrorCollector: No errors' => 'No errors detected. However, because error reporting is still incomplete, there may have been errors that the error collector was not notified of; please inspect the output HTML carefully.',
+ 'ErrorCollector: At line' => ' at line $line',
+ 'ErrorCollector: Incidental errors' => 'Incidental errors',
+ 'Lexer: Unclosed comment' => 'Unclosed comment',
+ 'Lexer: Unescaped lt' => 'Unescaped less-than sign (<) should be &lt;',
+ 'Lexer: Missing gt' => 'Missing greater-than sign (>), previous less-than sign (<) should be escaped',
+ 'Lexer: Missing attribute key' => 'Attribute declaration has no key',
+ 'Lexer: Missing end quote' => 'Attribute declaration has no end quote',
+ 'Lexer: Extracted body' => 'Removed document metadata tags',
+ 'Strategy_RemoveForeignElements: Tag transform' => '<$1> element transformed into $CurrentToken.Serialized',
+ 'Strategy_RemoveForeignElements: Missing required attribute' => '$CurrentToken.Compact element missing required attribute $1',
+ 'Strategy_RemoveForeignElements: Foreign element to text' => 'Unrecognized $CurrentToken.Serialized tag converted to text',
+ 'Strategy_RemoveForeignElements: Foreign element removed' => 'Unrecognized $CurrentToken.Serialized tag removed',
+ 'Strategy_RemoveForeignElements: Comment removed' => 'Comment containing "$CurrentToken.Data" removed',
+ 'Strategy_RemoveForeignElements: Foreign meta element removed' => 'Unrecognized $CurrentToken.Serialized meta tag and all descendants removed',
+ 'Strategy_RemoveForeignElements: Token removed to end' => 'Tags and text starting from $1 element where removed to end',
+ 'Strategy_RemoveForeignElements: Trailing hyphen in comment removed' => 'Trailing hyphen(s) in comment removed',
+ 'Strategy_RemoveForeignElements: Hyphens in comment collapsed' => 'Double hyphens in comments are not allowed, and were collapsed into single hyphens',
+ 'Strategy_MakeWellFormed: Unnecessary end tag removed' => 'Unnecessary $CurrentToken.Serialized tag removed',
+ 'Strategy_MakeWellFormed: Unnecessary end tag to text' => 'Unnecessary $CurrentToken.Serialized tag converted to text',
+ 'Strategy_MakeWellFormed: Tag auto closed' => '$1.Compact started on line $1.Line auto-closed by $CurrentToken.Compact',
+ 'Strategy_MakeWellFormed: Tag carryover' => '$1.Compact started on line $1.Line auto-continued into $CurrentToken.Compact',
+ 'Strategy_MakeWellFormed: Stray end tag removed' => 'Stray $CurrentToken.Serialized tag removed',
+ 'Strategy_MakeWellFormed: Stray end tag to text' => 'Stray $CurrentToken.Serialized tag converted to text',
+ 'Strategy_MakeWellFormed: Tag closed by element end' => '$1.Compact tag started on line $1.Line closed by end of $CurrentToken.Serialized',
+ 'Strategy_MakeWellFormed: Tag closed by document end' => '$1.Compact tag started on line $1.Line closed by end of document',
+ 'Strategy_FixNesting: Node removed' => '$CurrentToken.Compact node removed',
+ 'Strategy_FixNesting: Node excluded' => '$CurrentToken.Compact node removed due to descendant exclusion by ancestor element',
+ 'Strategy_FixNesting: Node reorganized' => 'Contents of $CurrentToken.Compact node reorganized to enforce its content model',
+ 'Strategy_FixNesting: Node contents removed' => 'Contents of $CurrentToken.Compact node removed',
+ 'AttrValidator: Attributes transformed' => 'Attributes on $CurrentToken.Compact transformed from $1.Keys to $2.Keys',
+ 'AttrValidator: Attribute removed' => '$CurrentAttr.Name attribute on $CurrentToken.Compact removed',
);
$errorNames = array(
- E_ERROR => 'Error',
+ E_ERROR => 'Error',
E_WARNING => 'Warning',
- E_NOTICE => 'Notice'
+ E_NOTICE => 'Notice'
);
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/LanguageFactory.php b/library/HTMLPurifier/LanguageFactory.php
index 134ef8c74..4e35272d8 100644
--- a/library/HTMLPurifier/LanguageFactory.php
+++ b/library/HTMLPurifier/LanguageFactory.php
@@ -11,50 +11,53 @@ class HTMLPurifier_LanguageFactory
{
/**
- * Cache of language code information used to load HTMLPurifier_Language objects
+ * Cache of language code information used to load HTMLPurifier_Language objects.
* Structure is: $factory->cache[$language_code][$key] = $value
- * @value array map
+ * @type array
*/
public $cache;
/**
* Valid keys in the HTMLPurifier_Language object. Designates which
* variables to slurp out of a message file.
- * @value array list
+ * @type array
*/
public $keys = array('fallback', 'messages', 'errorNames');
/**
- * Instance of HTMLPurifier_AttrDef_Lang to validate language codes
- * @value object HTMLPurifier_AttrDef_Lang
+ * Instance to validate language codes.
+ * @type HTMLPurifier_AttrDef_Lang
+ *
*/
protected $validator;
/**
* Cached copy of dirname(__FILE__), directory of current file without
- * trailing slash
- * @value string filename
+ * trailing slash.
+ * @type string
*/
protected $dir;
/**
- * Keys whose contents are a hash map and can be merged
- * @value array lookup
+ * Keys whose contents are a hash map and can be merged.
+ * @type array
*/
protected $mergeable_keys_map = array('messages' => true, 'errorNames' => true);
/**
- * Keys whose contents are a list and can be merged
+ * Keys whose contents are a list and can be merged.
* @value array lookup
*/
protected $mergeable_keys_list = array();
/**
* Retrieve sole instance of the factory.
- * @param $prototype Optional prototype to overload sole instance with,
+ * @param HTMLPurifier_LanguageFactory $prototype Optional prototype to overload sole instance with,
* or bool true to reset to default factory.
+ * @return HTMLPurifier_LanguageFactory
*/
- public static function instance($prototype = null) {
+ public static function instance($prototype = null)
+ {
static $instance = null;
if ($prototype !== null) {
$instance = $prototype;
@@ -69,28 +72,34 @@ class HTMLPurifier_LanguageFactory
* Sets up the singleton, much like a constructor
* @note Prevents people from getting this outside of the singleton
*/
- public function setup() {
+ public function setup()
+ {
$this->validator = new HTMLPurifier_AttrDef_Lang();
$this->dir = HTMLPURIFIER_PREFIX . '/HTMLPurifier';
}
/**
* Creates a language object, handles class fallbacks
- * @param $config Instance of HTMLPurifier_Config
- * @param $context Instance of HTMLPurifier_Context
- * @param $code Code to override configuration with. Private parameter.
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @param bool|string $code Code to override configuration with. Private parameter.
+ * @return HTMLPurifier_Language
*/
- public function create($config, $context, $code = false) {
-
+ public function create($config, $context, $code = false)
+ {
// validate language code
if ($code === false) {
$code = $this->validator->validate(
- $config->get('Core.Language'), $config, $context
+ $config->get('Core.Language'),
+ $config,
+ $context
);
} else {
$code = $this->validator->validate($code, $config, $context);
}
- if ($code === false) $code = 'en'; // malformed code becomes English
+ if ($code === false) {
+ $code = 'en'; // malformed code becomes English
+ }
$pcode = str_replace('-', '_', $code); // make valid PHP classname
static $depth = 0; // recursion protection
@@ -114,32 +123,34 @@ class HTMLPurifier_LanguageFactory
$depth--;
}
}
-
$lang->code = $code;
-
return $lang;
-
}
/**
* Returns the fallback language for language
* @note Loads the original language into cache
- * @param $code string language code
+ * @param string $code language code
+ * @return string|bool
*/
- public function getFallbackFor($code) {
+ public function getFallbackFor($code)
+ {
$this->loadLanguage($code);
return $this->cache[$code]['fallback'];
}
/**
* Loads language into the cache, handles message file and fallbacks
- * @param $code string language code
+ * @param string $code language code
*/
- public function loadLanguage($code) {
+ public function loadLanguage($code)
+ {
static $languages_seen = array(); // recursion guard
// abort if we've already loaded it
- if (isset($this->cache[$code])) return;
+ if (isset($this->cache[$code])) {
+ return;
+ }
// generate filename
$filename = $this->dir . '/Language/messages/' . $code . '.php';
@@ -162,8 +173,11 @@ class HTMLPurifier_LanguageFactory
// infinite recursion guard
if (isset($languages_seen[$code])) {
- trigger_error('Circular fallback reference in language ' .
- $code, E_USER_ERROR);
+ trigger_error(
+ 'Circular fallback reference in language ' .
+ $code,
+ E_USER_ERROR
+ );
$fallback = 'en';
}
$language_seen[$code] = true;
@@ -173,26 +187,23 @@ class HTMLPurifier_LanguageFactory
$fallback_cache = $this->cache[$fallback];
// merge fallback with current language
- foreach ( $this->keys as $key ) {
+ foreach ($this->keys as $key) {
if (isset($cache[$key]) && isset($fallback_cache[$key])) {
if (isset($this->mergeable_keys_map[$key])) {
$cache[$key] = $cache[$key] + $fallback_cache[$key];
} elseif (isset($this->mergeable_keys_list[$key])) {
- $cache[$key] = array_merge( $fallback_cache[$key], $cache[$key] );
+ $cache[$key] = array_merge($fallback_cache[$key], $cache[$key]);
}
} else {
$cache[$key] = $fallback_cache[$key];
}
}
-
}
// save to cache for later retrieval
$this->cache[$code] = $cache;
-
return;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Length.php b/library/HTMLPurifier/Length.php
index 8d2a46b7d..bbfbe6624 100644
--- a/library/HTMLPurifier/Length.php
+++ b/library/HTMLPurifier/Length.php
@@ -9,21 +9,25 @@ class HTMLPurifier_Length
/**
* String numeric magnitude.
+ * @type string
*/
protected $n;
/**
* String unit. False is permitted if $n = 0.
+ * @type string|bool
*/
protected $unit;
/**
* Whether or not this length is valid. Null if not calculated yet.
+ * @type bool
*/
protected $isValid;
/**
- * Lookup array of units recognized by CSS 2.1
+ * Array Lookup array of units recognized by CSS 2.1
+ * @type array
*/
protected static $allowedUnits = array(
'em' => true, 'ex' => true, 'px' => true, 'in' => true,
@@ -31,85 +35,126 @@ class HTMLPurifier_Length
);
/**
- * @param number $n Magnitude
- * @param string $u Unit
+ * @param string $n Magnitude
+ * @param bool|string $u Unit
*/
- public function __construct($n = '0', $u = false) {
+ public function __construct($n = '0', $u = false)
+ {
$this->n = (string) $n;
$this->unit = $u !== false ? (string) $u : false;
}
/**
* @param string $s Unit string, like '2em' or '3.4in'
+ * @return HTMLPurifier_Length
* @warning Does not perform validation.
*/
- static public function make($s) {
- if ($s instanceof HTMLPurifier_Length) return $s;
+ public static function make($s)
+ {
+ if ($s instanceof HTMLPurifier_Length) {
+ return $s;
+ }
$n_length = strspn($s, '1234567890.+-');
$n = substr($s, 0, $n_length);
$unit = substr($s, $n_length);
- if ($unit === '') $unit = false;
+ if ($unit === '') {
+ $unit = false;
+ }
return new HTMLPurifier_Length($n, $unit);
}
/**
* Validates the number and unit.
+ * @return bool
*/
- protected function validate() {
+ protected function validate()
+ {
// Special case:
- if ($this->n === '+0' || $this->n === '-0') $this->n = '0';
- if ($this->n === '0' && $this->unit === false) return true;
- if (!ctype_lower($this->unit)) $this->unit = strtolower($this->unit);
- if (!isset(HTMLPurifier_Length::$allowedUnits[$this->unit])) return false;
+ if ($this->n === '+0' || $this->n === '-0') {
+ $this->n = '0';
+ }
+ if ($this->n === '0' && $this->unit === false) {
+ return true;
+ }
+ if (!ctype_lower($this->unit)) {
+ $this->unit = strtolower($this->unit);
+ }
+ if (!isset(HTMLPurifier_Length::$allowedUnits[$this->unit])) {
+ return false;
+ }
// Hack:
$def = new HTMLPurifier_AttrDef_CSS_Number();
$result = $def->validate($this->n, false, false);
- if ($result === false) return false;
+ if ($result === false) {
+ return false;
+ }
$this->n = $result;
return true;
}
/**
* Returns string representation of number.
+ * @return string
*/
- public function toString() {
- if (!$this->isValid()) return false;
+ public function toString()
+ {
+ if (!$this->isValid()) {
+ return false;
+ }
return $this->n . $this->unit;
}
/**
* Retrieves string numeric magnitude.
+ * @return string
*/
- public function getN() {return $this->n;}
+ public function getN()
+ {
+ return $this->n;
+ }
/**
* Retrieves string unit.
+ * @return string
*/
- public function getUnit() {return $this->unit;}
+ public function getUnit()
+ {
+ return $this->unit;
+ }
/**
* Returns true if this length unit is valid.
+ * @return bool
*/
- public function isValid() {
- if ($this->isValid === null) $this->isValid = $this->validate();
+ public function isValid()
+ {
+ if ($this->isValid === null) {
+ $this->isValid = $this->validate();
+ }
return $this->isValid;
}
/**
* Compares two lengths, and returns 1 if greater, -1 if less and 0 if equal.
+ * @param HTMLPurifier_Length $l
+ * @return int
* @warning If both values are too large or small, this calculation will
* not work properly
*/
- public function compareTo($l) {
- if ($l === false) return false;
+ public function compareTo($l)
+ {
+ if ($l === false) {
+ return false;
+ }
if ($l->unit !== $this->unit) {
$converter = new HTMLPurifier_UnitConverter();
$l = $converter->convert($l, $this->unit);
- if ($l === false) return false;
+ if ($l === false) {
+ return false;
+ }
}
return $this->n - $l->n;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Lexer.php b/library/HTMLPurifier/Lexer.php
index b05e11546..43732621d 100644
--- a/library/HTMLPurifier/Lexer.php
+++ b/library/HTMLPurifier/Lexer.php
@@ -62,16 +62,20 @@ class HTMLPurifier_Lexer
* To specify your own prototype, set %Core.LexerImpl to it.
* This change in behavior de-singletonizes the lexer object.
*
- * @param $config Instance of HTMLPurifier_Config
- * @return Concrete lexer.
+ * @param HTMLPurifier_Config $config
+ * @return HTMLPurifier_Lexer
+ * @throws HTMLPurifier_Exception
*/
- public static function create($config) {
-
+ public static function create($config)
+ {
if (!($config instanceof HTMLPurifier_Config)) {
$lexer = $config;
- trigger_error("Passing a prototype to
- HTMLPurifier_Lexer::create() is deprecated, please instead
- use %Core.LexerImpl", E_USER_WARNING);
+ trigger_error(
+ "Passing a prototype to
+ HTMLPurifier_Lexer::create() is deprecated, please instead
+ use %Core.LexerImpl",
+ E_USER_WARNING
+ );
} else {
$lexer = $config->get('Core.LexerImpl');
}
@@ -84,30 +88,28 @@ class HTMLPurifier_Lexer
if (is_object($lexer)) {
$inst = $lexer;
} else {
-
- if (is_null($lexer)) { do {
- // auto-detection algorithm
-
- if ($needs_tracking) {
- $lexer = 'DirectLex';
- break;
- }
-
- if (
- class_exists('DOMDocument') &&
- method_exists('DOMDocument', 'loadHTML') &&
- !extension_loaded('domxml')
- ) {
- // check for DOM support, because while it's part of the
- // core, it can be disabled compile time. Also, the PECL
- // domxml extension overrides the default DOM, and is evil
- // and nasty and we shan't bother to support it
- $lexer = 'DOMLex';
- } else {
- $lexer = 'DirectLex';
- }
-
- } while(0); } // do..while so we can break
+ if (is_null($lexer)) {
+ do {
+ // auto-detection algorithm
+ if ($needs_tracking) {
+ $lexer = 'DirectLex';
+ break;
+ }
+
+ if (class_exists('DOMDocument') &&
+ method_exists('DOMDocument', 'loadHTML') &&
+ !extension_loaded('domxml')
+ ) {
+ // check for DOM support, because while it's part of the
+ // core, it can be disabled compile time. Also, the PECL
+ // domxml extension overrides the default DOM, and is evil
+ // and nasty and we shan't bother to support it
+ $lexer = 'DOMLex';
+ } else {
+ $lexer = 'DirectLex';
+ }
+ } while (0);
+ } // do..while so we can break
// instantiate recognized string names
switch ($lexer) {
@@ -121,16 +123,24 @@ class HTMLPurifier_Lexer
$inst = new HTMLPurifier_Lexer_PH5P();
break;
default:
- throw new HTMLPurifier_Exception("Cannot instantiate unrecognized Lexer type " . htmlspecialchars($lexer));
+ throw new HTMLPurifier_Exception(
+ "Cannot instantiate unrecognized Lexer type " .
+ htmlspecialchars($lexer)
+ );
}
}
- if (!$inst) throw new HTMLPurifier_Exception('No lexer was instantiated');
+ if (!$inst) {
+ throw new HTMLPurifier_Exception('No lexer was instantiated');
+ }
// once PHP DOM implements native line numbers, or we
// hack out something using XSLT, remove this stipulation
if ($needs_tracking && !$inst->tracksLineNumbers) {
- throw new HTMLPurifier_Exception('Cannot use lexer that does not support line numbers with Core.MaintainLineNumbers or Core.CollectErrors (use DirectLex instead)');
+ throw new HTMLPurifier_Exception(
+ 'Cannot use lexer that does not support line numbers with ' .
+ 'Core.MaintainLineNumbers or Core.CollectErrors (use DirectLex instead)'
+ );
}
return $inst;
@@ -139,23 +149,25 @@ class HTMLPurifier_Lexer
// -- CONVENIENCE MEMBERS ---------------------------------------------
- public function __construct() {
+ public function __construct()
+ {
$this->_entity_parser = new HTMLPurifier_EntityParser();
}
/**
* Most common entity to raw value conversion table for special entities.
+ * @type array
*/
protected $_special_entity2str =
- array(
- '&quot;' => '"',
- '&amp;' => '&',
- '&lt;' => '<',
- '&gt;' => '>',
- '&#39;' => "'",
- '&#039;' => "'",
- '&#x27;' => "'"
- );
+ array(
+ '&quot;' => '"',
+ '&amp;' => '&',
+ '&lt;' => '<',
+ '&gt;' => '>',
+ '&#39;' => "'",
+ '&#039;' => "'",
+ '&#x27;' => "'"
+ );
/**
* Parses special entities into the proper characters.
@@ -168,27 +180,33 @@ class HTMLPurifier_Lexer
* completely parsed, but that's only because all other entities should
* have been handled previously in substituteNonSpecialEntities()
*
- * @param $string String character data to be parsed.
- * @returns Parsed character data.
+ * @param string $string String character data to be parsed.
+ * @return string Parsed character data.
*/
- public function parseData($string) {
-
+ public function parseData($string)
+ {
// following functions require at least one character
- if ($string === '') return '';
+ if ($string === '') {
+ return '';
+ }
// subtracts amps that cannot possibly be escaped
$num_amp = substr_count($string, '&') - substr_count($string, '& ') -
- ($string[strlen($string)-1] === '&' ? 1 : 0);
+ ($string[strlen($string) - 1] === '&' ? 1 : 0);
- if (!$num_amp) return $string; // abort if no entities
+ if (!$num_amp) {
+ return $string;
+ } // abort if no entities
$num_esc_amp = substr_count($string, '&amp;');
$string = strtr($string, $this->_special_entity2str);
// code duplication for sake of optimization, see above
$num_amp_2 = substr_count($string, '&') - substr_count($string, '& ') -
- ($string[strlen($string)-1] === '&' ? 1 : 0);
+ ($string[strlen($string) - 1] === '&' ? 1 : 0);
- if ($num_amp_2 <= $num_esc_amp) return $string;
+ if ($num_amp_2 <= $num_esc_amp) {
+ return $string;
+ }
// hmm... now we have some uncommon entities. Use the callback.
$string = $this->_entity_parser->substituteSpecialEntities($string);
@@ -197,21 +215,23 @@ class HTMLPurifier_Lexer
/**
* Lexes an HTML string into tokens.
- *
* @param $string String HTML.
- * @return HTMLPurifier_Token array representation of HTML.
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return HTMLPurifier_Token[] array representation of HTML.
*/
- public function tokenizeHTML($string, $config, $context) {
+ public function tokenizeHTML($string, $config, $context)
+ {
trigger_error('Call to abstract class', E_USER_ERROR);
}
/**
* Translates CDATA sections into regular sections (through escaping).
- *
- * @param $string HTML string to process.
- * @returns HTML with CDATA sections escaped.
+ * @param string $string HTML string to process.
+ * @return string HTML with CDATA sections escaped.
*/
- protected static function escapeCDATA($string) {
+ protected static function escapeCDATA($string)
+ {
return preg_replace_callback(
'/<!\[CDATA\[(.+?)\]\]>/s',
array('HTMLPurifier_Lexer', 'CDATACallback'),
@@ -221,8 +241,11 @@ class HTMLPurifier_Lexer
/**
* Special CDATA case that is especially convoluted for <script>
+ * @param string $string HTML string to process.
+ * @return string HTML with CDATA sections escaped.
*/
- protected static function escapeCommentedCDATA($string) {
+ protected static function escapeCommentedCDATA($string)
+ {
return preg_replace_callback(
'#<!--//--><!\[CDATA\[//><!--(.+?)//--><!\]\]>#s',
array('HTMLPurifier_Lexer', 'CDATACallback'),
@@ -231,15 +254,30 @@ class HTMLPurifier_Lexer
}
/**
+ * Special Internet Explorer conditional comments should be removed.
+ * @param string $string HTML string to process.
+ * @return string HTML with conditional comments removed.
+ */
+ protected static function removeIEConditional($string)
+ {
+ return preg_replace(
+ '#<!--\[if [^>]+\]>.*?<!\[endif\]-->#si', // probably should generalize for all strings
+ '',
+ $string
+ );
+ }
+
+ /**
* Callback function for escapeCDATA() that does the work.
*
* @warning Though this is public in order to let the callback happen,
* calling it directly is not recommended.
- * @params $matches PCRE matches array, with index 0 the entire match
+ * @param array $matches PCRE matches array, with index 0 the entire match
* and 1 the inside of the CDATA section.
- * @returns Escaped internals of the CDATA section.
+ * @return string Escaped internals of the CDATA section.
*/
- protected static function CDATACallback($matches) {
+ protected static function CDATACallback($matches)
+ {
// not exactly sure why the character set is needed, but whatever
return htmlspecialchars($matches[1], ENT_COMPAT, 'UTF-8');
}
@@ -247,13 +285,19 @@ class HTMLPurifier_Lexer
/**
* Takes a piece of HTML and normalizes it by converting entities, fixing
* encoding, extracting bits, and other good stuff.
+ * @param string $html HTML.
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return string
* @todo Consider making protected
*/
- public function normalize($html, $config, $context) {
-
+ public function normalize($html, $config, $context)
+ {
// normalize newlines to \n
- $html = str_replace("\r\n", "\n", $html);
- $html = str_replace("\r", "\n", $html);
+ if ($config->get('Core.NormalizeNewlines')) {
+ $html = str_replace("\r\n", "\n", $html);
+ $html = str_replace("\r", "\n", $html);
+ }
if ($config->get('HTML.Trusted')) {
// escape convoluted CDATA
@@ -263,6 +307,8 @@ class HTMLPurifier_Lexer
// escape CDATA
$html = $this->escapeCDATA($html);
+ $html = $this->removeIEConditional($html);
+
// extract body from document if applicable
if ($config->get('Core.ConvertDocumentToFragment')) {
$e = false;
@@ -284,6 +330,11 @@ class HTMLPurifier_Lexer
// represent non-SGML characters (horror, horror!)
$html = HTMLPurifier_Encoder::cleanUTF8($html);
+ // if processing instructions are to removed, remove them now
+ if ($config->get('Core.RemoveProcessingInstructions')) {
+ $html = preg_replace('#<\?.+?\?>#s', '', $html);
+ }
+
return $html;
}
@@ -291,7 +342,8 @@ class HTMLPurifier_Lexer
* Takes a string of HTML (fragment or document) and returns the content
* @todo Consider making protected
*/
- public function extractBody($html) {
+ public function extractBody($html)
+ {
$matches = array();
$result = preg_match('!<body[^>]*>(.*)</body>!is', $html, $matches);
if ($result) {
@@ -300,7 +352,6 @@ class HTMLPurifier_Lexer
return $html;
}
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Lexer/DOMLex.php b/library/HTMLPurifier/Lexer/DOMLex.php
index 20dc2ed48..720754454 100644
--- a/library/HTMLPurifier/Lexer/DOMLex.php
+++ b/library/HTMLPurifier/Lexer/DOMLex.php
@@ -27,16 +27,26 @@
class HTMLPurifier_Lexer_DOMLex extends HTMLPurifier_Lexer
{
+ /**
+ * @type HTMLPurifier_TokenFactory
+ */
private $factory;
- public function __construct() {
+ public function __construct()
+ {
// setup the factory
parent::__construct();
$this->factory = new HTMLPurifier_TokenFactory();
}
- public function tokenizeHTML($html, $config, $context) {
-
+ /**
+ * @param string $html
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return HTMLPurifier_Token[]
+ */
+ public function tokenizeHTML($html, $config, $context)
+ {
$html = $this->normalize($html, $config, $context);
// attempt to armor stray angled brackets that cannot possibly
@@ -65,30 +75,67 @@ class HTMLPurifier_Lexer_DOMLex extends HTMLPurifier_Lexer
$tokens = array();
$this->tokenizeDOM(
$doc->getElementsByTagName('html')->item(0)-> // <html>
- getElementsByTagName('body')->item(0)-> // <body>
- getElementsByTagName('div')->item(0) // <div>
- , $tokens);
+ getElementsByTagName('body')->item(0)-> // <body>
+ getElementsByTagName('div')->item(0), // <div>
+ $tokens
+ );
return $tokens;
}
/**
- * Recursive function that tokenizes a node, putting it into an accumulator.
- *
- * @param $node DOMNode to be tokenized.
- * @param $tokens Array-list of already tokenized tokens.
- * @param $collect Says whether or start and close are collected, set to
- * false at first recursion because it's the implicit DIV
- * tag you're dealing with.
- * @returns Tokens of node appended to previously passed tokens.
+ * Iterative function that tokenizes a node, putting it into an accumulator.
+ * To iterate is human, to recurse divine - L. Peter Deutsch
+ * @param DOMNode $node DOMNode to be tokenized.
+ * @param HTMLPurifier_Token[] $tokens Array-list of already tokenized tokens.
+ * @return HTMLPurifier_Token of node appended to previously passed tokens.
*/
- protected function tokenizeDOM($node, &$tokens, $collect = false) {
+ protected function tokenizeDOM($node, &$tokens)
+ {
+ $level = 0;
+ $nodes = array($level => new HTMLPurifier_Queue(array($node)));
+ $closingNodes = array();
+ do {
+ while (!$nodes[$level]->isEmpty()) {
+ $node = $nodes[$level]->shift(); // FIFO
+ $collect = $level > 0 ? true : false;
+ $needEndingTag = $this->createStartNode($node, $tokens, $collect);
+ if ($needEndingTag) {
+ $closingNodes[$level][] = $node;
+ }
+ if ($node->childNodes && $node->childNodes->length) {
+ $level++;
+ $nodes[$level] = new HTMLPurifier_Queue();
+ foreach ($node->childNodes as $childNode) {
+ $nodes[$level]->push($childNode);
+ }
+ }
+ }
+ $level--;
+ if ($level && isset($closingNodes[$level])) {
+ while ($node = array_pop($closingNodes[$level])) {
+ $this->createEndNode($node, $tokens);
+ }
+ }
+ } while ($level > 0);
+ }
+ /**
+ * @param DOMNode $node DOMNode to be tokenized.
+ * @param HTMLPurifier_Token[] $tokens Array-list of already tokenized tokens.
+ * @param bool $collect Says whether or start and close are collected, set to
+ * false at first recursion because it's the implicit DIV
+ * tag you're dealing with.
+ * @return bool if the token needs an endtoken
+ * @todo data and tagName properties don't seem to exist in DOMNode?
+ */
+ protected function createStartNode($node, &$tokens, $collect)
+ {
// intercept non element nodes. WE MUST catch all of them,
// but we're not getting the character reference nodes because
// those should have been preprocessed
if ($node->nodeType === XML_TEXT_NODE) {
$tokens[] = $this->factory->createText($node->data);
- return;
+ return false;
} elseif ($node->nodeType === XML_CDATA_SECTION_NODE) {
// undo libxml's special treatment of <script> and <style> tags
$last = end($tokens);
@@ -106,59 +153,61 @@ class HTMLPurifier_Lexer_DOMLex extends HTMLPurifier_Lexer
}
}
$tokens[] = $this->factory->createText($this->parseData($data));
- return;
+ return false;
} elseif ($node->nodeType === XML_COMMENT_NODE) {
// this is code is only invoked for comments in script/style in versions
// of libxml pre-2.6.28 (regular comments, of course, are still
// handled regularly)
$tokens[] = $this->factory->createComment($node->data);
- return;
- } elseif (
+ return false;
+ } elseif ($node->nodeType !== XML_ELEMENT_NODE) {
// not-well tested: there may be other nodes we have to grab
- $node->nodeType !== XML_ELEMENT_NODE
- ) {
- return;
+ return false;
}
- $attr = $node->hasAttributes() ?
- $this->transformAttrToAssoc($node->attributes) :
- array();
+ $attr = $node->hasAttributes() ? $this->transformAttrToAssoc($node->attributes) : array();
// We still have to make sure that the element actually IS empty
if (!$node->childNodes->length) {
if ($collect) {
$tokens[] = $this->factory->createEmpty($node->tagName, $attr);
}
+ return false;
} else {
- if ($collect) { // don't wrap on first iteration
+ if ($collect) {
$tokens[] = $this->factory->createStart(
$tag_name = $node->tagName, // somehow, it get's dropped
$attr
);
}
- foreach ($node->childNodes as $node) {
- // remember, it's an accumulator. Otherwise, we'd have
- // to use array_merge
- $this->tokenizeDOM($node, $tokens, true);
- }
- if ($collect) {
- $tokens[] = $this->factory->createEnd($tag_name);
- }
+ return true;
}
+ }
+ /**
+ * @param DOMNode $node
+ * @param HTMLPurifier_Token[] $tokens
+ */
+ protected function createEndNode($node, &$tokens)
+ {
+ $tokens[] = $this->factory->createEnd($node->tagName);
}
+
/**
* Converts a DOMNamedNodeMap of DOMAttr objects into an assoc array.
*
- * @param $attribute_list DOMNamedNodeMap of DOMAttr objects.
- * @returns Associative array of attributes.
+ * @param DOMNamedNodeMap $node_map DOMNamedNodeMap of DOMAttr objects.
+ * @return array Associative array of attributes.
*/
- protected function transformAttrToAssoc($node_map) {
+ protected function transformAttrToAssoc($node_map)
+ {
// NamedNodeMap is documented very well, so we're using undocumented
// features, namely, the fact that it implements Iterator and
// has a ->length attribute
- if ($node_map->length === 0) return array();
+ if ($node_map->length === 0) {
+ return array();
+ }
$array = array();
foreach ($node_map as $attr) {
$array[$attr->name] = $attr->value;
@@ -168,46 +217,64 @@ class HTMLPurifier_Lexer_DOMLex extends HTMLPurifier_Lexer
/**
* An error handler that mutes all errors
+ * @param int $errno
+ * @param string $errstr
*/
- public function muteErrorHandler($errno, $errstr) {}
+ public function muteErrorHandler($errno, $errstr)
+ {
+ }
/**
* Callback function for undoing escaping of stray angled brackets
* in comments
+ * @param array $matches
+ * @return string
*/
- public function callbackUndoCommentSubst($matches) {
- return '<!--' . strtr($matches[1], array('&amp;'=>'&','&lt;'=>'<')) . $matches[2];
+ public function callbackUndoCommentSubst($matches)
+ {
+ return '<!--' . strtr($matches[1], array('&amp;' => '&', '&lt;' => '<')) . $matches[2];
}
/**
* Callback function that entity-izes ampersands in comments so that
* callbackUndoCommentSubst doesn't clobber them
+ * @param array $matches
+ * @return string
*/
- public function callbackArmorCommentEntities($matches) {
+ public function callbackArmorCommentEntities($matches)
+ {
return '<!--' . str_replace('&', '&amp;', $matches[1]) . $matches[2];
}
/**
* Wraps an HTML fragment in the necessary HTML
+ * @param string $html
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return string
*/
- protected function wrapHTML($html, $config, $context) {
+ protected function wrapHTML($html, $config, $context)
+ {
$def = $config->getDefinition('HTML');
$ret = '';
if (!empty($def->doctype->dtdPublic) || !empty($def->doctype->dtdSystem)) {
$ret .= '<!DOCTYPE html ';
- if (!empty($def->doctype->dtdPublic)) $ret .= 'PUBLIC "' . $def->doctype->dtdPublic . '" ';
- if (!empty($def->doctype->dtdSystem)) $ret .= '"' . $def->doctype->dtdSystem . '" ';
+ if (!empty($def->doctype->dtdPublic)) {
+ $ret .= 'PUBLIC "' . $def->doctype->dtdPublic . '" ';
+ }
+ if (!empty($def->doctype->dtdSystem)) {
+ $ret .= '"' . $def->doctype->dtdSystem . '" ';
+ }
$ret .= '>';
}
$ret .= '<html><head>';
$ret .= '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';
// No protection if $html contains a stray </div>!
- $ret .= '</head><body><div>'.$html.'</div></body></html>';
+ $ret .= '</head><body><div>' . $html . '</div></body></html>';
return $ret;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Lexer/DirectLex.php b/library/HTMLPurifier/Lexer/DirectLex.php
index 456e6e190..746b6e315 100644
--- a/library/HTMLPurifier/Lexer/DirectLex.php
+++ b/library/HTMLPurifier/Lexer/DirectLex.php
@@ -12,30 +12,44 @@
*/
class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer
{
-
+ /**
+ * @type bool
+ */
public $tracksLineNumbers = true;
/**
* Whitespace characters for str(c)spn.
+ * @type string
*/
protected $_whitespace = "\x20\x09\x0D\x0A";
/**
* Callback function for script CDATA fudge
- * @param $matches, in form of array(opening tag, contents, closing tag)
+ * @param array $matches, in form of array(opening tag, contents, closing tag)
+ * @return string
*/
- protected function scriptCallback($matches) {
+ protected function scriptCallback($matches)
+ {
return $matches[1] . htmlspecialchars($matches[2], ENT_COMPAT, 'UTF-8') . $matches[3];
}
- public function tokenizeHTML($html, $config, $context) {
-
+ /**
+ * @param String $html
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array|HTMLPurifier_Token[]
+ */
+ public function tokenizeHTML($html, $config, $context)
+ {
// special normalization for script tags without any armor
// our "armor" heurstic is a < sign any number of whitespaces after
// the first script tag
if ($config->get('HTML.Trusted')) {
- $html = preg_replace_callback('#(<script[^>]*>)(\s*[^<].+?)(</script>)#si',
- array($this, 'scriptCallback'), $html);
+ $html = preg_replace_callback(
+ '#(<script[^>]*>)(\s*[^<].+?)(</script>)#si',
+ array($this, 'scriptCallback'),
+ $html
+ );
}
$html = $this->normalize($html, $config, $context);
@@ -55,15 +69,15 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer
if ($maintain_line_numbers) {
$current_line = 1;
- $current_col = 0;
+ $current_col = 0;
$length = strlen($html);
} else {
$current_line = false;
- $current_col = false;
+ $current_col = false;
$length = false;
}
$context->register('CurrentLine', $current_line);
- $context->register('CurrentCol', $current_col);
+ $context->register('CurrentCol', $current_col);
$nl = "\n";
// how often to manually recalculate. This will ALWAYS be right,
// but it's pretty wasteful. Set to 0 to turn off
@@ -77,16 +91,14 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer
// for testing synchronization
$loops = 0;
- while(++$loops) {
-
+ while (++$loops) {
// $cursor is either at the start of a token, or inside of
// a tag (i.e. there was a < immediately before it), as indicated
// by $inside_tag
if ($maintain_line_numbers) {
-
// $rcursor, however, is always at the start of a token.
- $rcursor = $cursor - (int) $inside_tag;
+ $rcursor = $cursor - (int)$inside_tag;
// Column number is cheap, so we calculate it every round.
// We're interested at the *end* of the newline string, so
@@ -96,14 +108,11 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer
$current_col = $rcursor - (is_bool($nl_pos) ? 0 : $nl_pos + 1);
// recalculate lines
- if (
- $synchronize_interval && // synchronization is on
- $cursor > 0 && // cursor is further than zero
- $loops % $synchronize_interval === 0 // time to synchronize!
- ) {
+ if ($synchronize_interval && // synchronization is on
+ $cursor > 0 && // cursor is further than zero
+ $loops % $synchronize_interval === 0) { // time to synchronize!
$current_line = 1 + $this->substrCount($html, $nl, 0, $cursor);
}
-
}
$position_next_lt = strpos($html, '<', $cursor);
@@ -119,35 +128,42 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer
if (!$inside_tag && $position_next_lt !== false) {
// We are not inside tag and there still is another tag to parse
$token = new
- HTMLPurifier_Token_Text(
- $this->parseData(
- substr(
- $html, $cursor, $position_next_lt - $cursor
- )
+ HTMLPurifier_Token_Text(
+ $this->parseData(
+ substr(
+ $html,
+ $cursor,
+ $position_next_lt - $cursor
)
- );
+ )
+ );
if ($maintain_line_numbers) {
$token->rawPosition($current_line, $current_col);
$current_line += $this->substrCount($html, $nl, $cursor, $position_next_lt - $cursor);
}
$array[] = $token;
- $cursor = $position_next_lt + 1;
+ $cursor = $position_next_lt + 1;
$inside_tag = true;
continue;
} elseif (!$inside_tag) {
// We are not inside tag but there are no more tags
// If we're already at the end, break
- if ($cursor === strlen($html)) break;
+ if ($cursor === strlen($html)) {
+ break;
+ }
// Create Text of rest of string
$token = new
- HTMLPurifier_Token_Text(
- $this->parseData(
- substr(
- $html, $cursor
- )
+ HTMLPurifier_Token_Text(
+ $this->parseData(
+ substr(
+ $html,
+ $cursor
)
- );
- if ($maintain_line_numbers) $token->rawPosition($current_line, $current_col);
+ )
+ );
+ if ($maintain_line_numbers) {
+ $token->rawPosition($current_line, $current_col);
+ }
$array[] = $token;
break;
} elseif ($inside_tag && $position_next_gt !== false) {
@@ -171,16 +187,16 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer
}
// Check if it's a comment
- if (
- substr($segment, 0, 3) === '!--'
- ) {
+ if (substr($segment, 0, 3) === '!--') {
// re-determine segment length, looking for -->
$position_comment_end = strpos($html, '-->', $cursor);
if ($position_comment_end === false) {
// uh oh, we have a comment that extends to
// infinity. Can't be helped: set comment
// end position to end of string
- if ($e) $e->send(E_WARNING, 'Lexer: Unclosed comment');
+ if ($e) {
+ $e->send(E_WARNING, 'Lexer: Unclosed comment');
+ }
$position_comment_end = strlen($html);
$end = true;
} else {
@@ -189,11 +205,13 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer
$strlen_segment = $position_comment_end - $cursor;
$segment = substr($html, $cursor, $strlen_segment);
$token = new
- HTMLPurifier_Token_Comment(
- substr(
- $segment, 3, $strlen_segment - 3
- )
- );
+ HTMLPurifier_Token_Comment(
+ substr(
+ $segment,
+ 3,
+ $strlen_segment - 3
+ )
+ );
if ($maintain_line_numbers) {
$token->rawPosition($current_line, $current_col);
$current_line += $this->substrCount($html, $nl, $cursor, $strlen_segment);
@@ -205,7 +223,7 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer
}
// Check if it's an end tag
- $is_end_tag = (strpos($segment,'/') === 0);
+ $is_end_tag = (strpos($segment, '/') === 0);
if ($is_end_tag) {
$type = substr($segment, 1);
$token = new HTMLPurifier_Token_End($type);
@@ -224,7 +242,9 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer
// text and go our merry way
if (!ctype_alpha($segment[0])) {
// XML: $segment[0] !== '_' && $segment[0] !== ':'
- if ($e) $e->send(E_NOTICE, 'Lexer: Unescaped lt');
+ if ($e) {
+ $e->send(E_NOTICE, 'Lexer: Unescaped lt');
+ }
$token = new HTMLPurifier_Token_Text('<');
if ($maintain_line_numbers) {
$token->rawPosition($current_line, $current_col);
@@ -239,7 +259,7 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer
// trailing slash. Remember, we could have a tag like <br>, so
// any later token processing scripts must convert improperly
// classified EmptyTags from StartTags.
- $is_self_closing = (strrpos($segment,'/') === $strlen_segment-1);
+ $is_self_closing = (strrpos($segment, '/') === $strlen_segment - 1);
if ($is_self_closing) {
$strlen_segment--;
$segment = substr($segment, 0, $strlen_segment);
@@ -269,14 +289,16 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer
$attribute_string =
trim(
substr(
- $segment, $position_first_space
+ $segment,
+ $position_first_space
)
);
if ($attribute_string) {
$attr = $this->parseAttributeString(
- $attribute_string
- , $config, $context
- );
+ $attribute_string,
+ $config,
+ $context
+ );
} else {
$attr = array();
}
@@ -296,15 +318,19 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer
continue;
} else {
// inside tag, but there's no ending > sign
- if ($e) $e->send(E_WARNING, 'Lexer: Missing gt');
+ if ($e) {
+ $e->send(E_WARNING, 'Lexer: Missing gt');
+ }
$token = new
- HTMLPurifier_Token_Text(
- '<' .
- $this->parseData(
- substr($html, $cursor)
- )
- );
- if ($maintain_line_numbers) $token->rawPosition($current_line, $current_col);
+ HTMLPurifier_Token_Text(
+ '<' .
+ $this->parseData(
+ substr($html, $cursor)
+ )
+ );
+ if ($maintain_line_numbers) {
+ $token->rawPosition($current_line, $current_col);
+ }
// no cursor scroll? Hmm...
$array[] = $token;
break;
@@ -319,8 +345,14 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer
/**
* PHP 5.0.x compatible substr_count that implements offset and length
+ * @param string $haystack
+ * @param string $needle
+ * @param int $offset
+ * @param int $length
+ * @return int
*/
- protected function substrCount($haystack, $needle, $offset, $length) {
+ protected function substrCount($haystack, $needle, $offset, $length)
+ {
static $oldVersion;
if ($oldVersion === null) {
$oldVersion = version_compare(PHP_VERSION, '5.1', '<');
@@ -336,13 +368,18 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer
/**
* Takes the inside of an HTML tag and makes an assoc array of attributes.
*
- * @param $string Inside of tag excluding name.
- * @returns Assoc array of attributes.
+ * @param string $string Inside of tag excluding name.
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array Assoc array of attributes.
*/
- public function parseAttributeString($string, $config, $context) {
- $string = (string) $string; // quick typecast
+ public function parseAttributeString($string, $config, $context)
+ {
+ $string = (string)$string; // quick typecast
- if ($string == '') return array(); // no attributes
+ if ($string == '') {
+ return array();
+ } // no attributes
$e = false;
if ($config->get('Core.CollectErrors')) {
@@ -361,46 +398,55 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer
list($key, $quoted_value) = explode('=', $string);
$quoted_value = trim($quoted_value);
if (!$key) {
- if ($e) $e->send(E_ERROR, 'Lexer: Missing attribute key');
+ if ($e) {
+ $e->send(E_ERROR, 'Lexer: Missing attribute key');
+ }
return array();
}
- if (!$quoted_value) return array($key => '');
+ if (!$quoted_value) {
+ return array($key => '');
+ }
$first_char = @$quoted_value[0];
- $last_char = @$quoted_value[strlen($quoted_value)-1];
+ $last_char = @$quoted_value[strlen($quoted_value) - 1];
$same_quote = ($first_char == $last_char);
$open_quote = ($first_char == '"' || $first_char == "'");
- if ( $same_quote && $open_quote) {
+ if ($same_quote && $open_quote) {
// well behaved
$value = substr($quoted_value, 1, strlen($quoted_value) - 2);
} else {
// not well behaved
if ($open_quote) {
- if ($e) $e->send(E_ERROR, 'Lexer: Missing end quote');
+ if ($e) {
+ $e->send(E_ERROR, 'Lexer: Missing end quote');
+ }
$value = substr($quoted_value, 1);
} else {
$value = $quoted_value;
}
}
- if ($value === false) $value = '';
+ if ($value === false) {
+ $value = '';
+ }
return array($key => $this->parseData($value));
}
// setup loop environment
- $array = array(); // return assoc array of attributes
+ $array = array(); // return assoc array of attributes
$cursor = 0; // current position in string (moves forward)
- $size = strlen($string); // size of the string (stays the same)
+ $size = strlen($string); // size of the string (stays the same)
// if we have unquoted attributes, the parser expects a terminating
// space, so let's guarantee that there's always a terminating space.
$string .= ' ';
- while(true) {
-
- if ($cursor >= $size) {
- break;
+ $old_cursor = -1;
+ while ($cursor < $size) {
+ if ($old_cursor >= $cursor) {
+ throw new Exception("Infinite loop detected");
}
+ $old_cursor = $cursor;
$cursor += ($value = strspn($string, $this->_whitespace, $cursor));
// grab the key
@@ -415,8 +461,10 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer
$key = substr($string, $key_begin, $key_end - $key_begin);
if (!$key) {
- if ($e) $e->send(E_ERROR, 'Lexer: Missing attribute key');
- $cursor += strcspn($string, $this->_whitespace, $cursor + 1); // prevent infinite loop
+ if ($e) {
+ $e->send(E_ERROR, 'Lexer: Missing attribute key');
+ }
+ $cursor += 1 + strcspn($string, $this->_whitespace, $cursor + 1); // prevent infinite loop
continue; // empty key
}
@@ -467,24 +515,25 @@ class HTMLPurifier_Lexer_DirectLex extends HTMLPurifier_Lexer
}
$value = substr($string, $value_begin, $value_end - $value_begin);
- if ($value === false) $value = '';
+ if ($value === false) {
+ $value = '';
+ }
$array[$key] = $this->parseData($value);
$cursor++;
-
} else {
// boolattr
if ($key !== '') {
$array[$key] = $key;
} else {
// purely theoretical
- if ($e) $e->send(E_ERROR, 'Lexer: Missing attribute key');
+ if ($e) {
+ $e->send(E_ERROR, 'Lexer: Missing attribute key');
+ }
}
-
}
}
return $array;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Lexer/PEARSax3.php b/library/HTMLPurifier/Lexer/PEARSax3.php
deleted file mode 100644
index 1d358c7b6..000000000
--- a/library/HTMLPurifier/Lexer/PEARSax3.php
+++ /dev/null
@@ -1,139 +0,0 @@
-<?php
-
-/**
- * Proof-of-concept lexer that uses the PEAR package XML_HTMLSax3 to parse HTML.
- *
- * PEAR, not suprisingly, also has a SAX parser for HTML. I don't know
- * very much about implementation, but it's fairly well written. However, that
- * abstraction comes at a price: performance. You need to have it installed,
- * and if the API changes, it might break our adapter. Not sure whether or not
- * it's UTF-8 aware, but it has some entity parsing trouble (in all areas,
- * text and attributes).
- *
- * Quite personally, I don't recommend using the PEAR class, and the defaults
- * don't use it. The unit tests do perform the tests on the SAX parser too, but
- * whatever it does for poorly formed HTML is up to it.
- *
- * @todo Generalize so that XML_HTMLSax is also supported.
- *
- * @warning Entity-resolution inside attributes is broken.
- */
-
-class HTMLPurifier_Lexer_PEARSax3 extends HTMLPurifier_Lexer
-{
-
- /**
- * Internal accumulator array for SAX parsers.
- */
- protected $tokens = array();
- protected $last_token_was_empty;
-
- private $parent_handler;
- private $stack = array();
-
- public function tokenizeHTML($string, $config, $context) {
-
- $this->tokens = array();
- $this->last_token_was_empty = false;
-
- $string = $this->normalize($string, $config, $context);
-
- $this->parent_handler = set_error_handler(array($this, 'muteStrictErrorHandler'));
-
- $parser = new XML_HTMLSax3();
- $parser->set_object($this);
- $parser->set_element_handler('openHandler','closeHandler');
- $parser->set_data_handler('dataHandler');
- $parser->set_escape_handler('escapeHandler');
-
- // doesn't seem to work correctly for attributes
- $parser->set_option('XML_OPTION_ENTITIES_PARSED', 1);
-
- $parser->parse($string);
-
- restore_error_handler();
-
- return $this->tokens;
-
- }
-
- /**
- * Open tag event handler, interface is defined by PEAR package.
- */
- public function openHandler(&$parser, $name, $attrs, $closed) {
- // entities are not resolved in attrs
- foreach ($attrs as $key => $attr) {
- $attrs[$key] = $this->parseData($attr);
- }
- if ($closed) {
- $this->tokens[] = new HTMLPurifier_Token_Empty($name, $attrs);
- $this->last_token_was_empty = true;
- } else {
- $this->tokens[] = new HTMLPurifier_Token_Start($name, $attrs);
- }
- $this->stack[] = $name;
- return true;
- }
-
- /**
- * Close tag event handler, interface is defined by PEAR package.
- */
- public function closeHandler(&$parser, $name) {
- // HTMLSax3 seems to always send empty tags an extra close tag
- // check and ignore if you see it:
- // [TESTME] to make sure it doesn't overreach
- if ($this->last_token_was_empty) {
- $this->last_token_was_empty = false;
- return true;
- }
- $this->tokens[] = new HTMLPurifier_Token_End($name);
- if (!empty($this->stack)) array_pop($this->stack);
- return true;
- }
-
- /**
- * Data event handler, interface is defined by PEAR package.
- */
- public function dataHandler(&$parser, $data) {
- $this->last_token_was_empty = false;
- $this->tokens[] = new HTMLPurifier_Token_Text($data);
- return true;
- }
-
- /**
- * Escaped text handler, interface is defined by PEAR package.
- */
- public function escapeHandler(&$parser, $data) {
- if (strpos($data, '--') === 0) {
- // remove trailing and leading double-dashes
- $data = substr($data, 2);
- if (strlen($data) >= 2 && substr($data, -2) == "--") {
- $data = substr($data, 0, -2);
- }
- if (isset($this->stack[sizeof($this->stack) - 1]) &&
- $this->stack[sizeof($this->stack) - 1] == "style") {
- $this->tokens[] = new HTMLPurifier_Token_Text($data);
- } else {
- $this->tokens[] = new HTMLPurifier_Token_Comment($data);
- }
- $this->last_token_was_empty = false;
- }
- // CDATA is handled elsewhere, but if it was handled here:
- //if (strpos($data, '[CDATA[') === 0) {
- // $this->tokens[] = new HTMLPurifier_Token_Text(
- // substr($data, 7, strlen($data) - 9) );
- //}
- return true;
- }
-
- /**
- * An error handler that mutes strict errors
- */
- public function muteStrictErrorHandler($errno, $errstr, $errfile=null, $errline=null, $errcontext=null) {
- if ($errno == E_STRICT) return;
- return call_user_func($this->parent_handler, $errno, $errstr, $errfile, $errline, $errcontext);
- }
-
-}
-
-// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Lexer/PH5P.php b/library/HTMLPurifier/Lexer/PH5P.php
index fa1bf973e..a4587e4cd 100644
--- a/library/HTMLPurifier/Lexer/PH5P.php
+++ b/library/HTMLPurifier/Lexer/PH5P.php
@@ -3,16 +3,23 @@
/**
* Experimental HTML5-based parser using Jeroen van der Meer's PH5P library.
* Occupies space in the HTML5 pseudo-namespace, which may cause conflicts.
- *
+ *
* @note
* Recent changes to PHP's DOM extension have resulted in some fatal
* error conditions with the original version of PH5P. Pending changes,
- * this lexer will punt to DirectLex if DOM throughs an exception.
+ * this lexer will punt to DirectLex if DOM throws an exception.
*/
-class HTMLPurifier_Lexer_PH5P extends HTMLPurifier_Lexer_DOMLex {
-
- public function tokenizeHTML($html, $config, $context) {
+class HTMLPurifier_Lexer_PH5P extends HTMLPurifier_Lexer_DOMLex
+{
+ /**
+ * @param string $html
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return HTMLPurifier_Token[]
+ */
+ public function tokenizeHTML($html, $config, $context)
+ {
$new_html = $this->normalize($html, $config, $context);
$new_html = $this->wrapHTML($new_html, $config, $context);
try {
@@ -27,40 +34,42 @@ class HTMLPurifier_Lexer_PH5P extends HTMLPurifier_Lexer_DOMLex {
$tokens = array();
$this->tokenizeDOM(
$doc->getElementsByTagName('html')->item(0)-> // <html>
- getElementsByTagName('body')->item(0)-> // <body>
- getElementsByTagName('div')->item(0) // <div>
- , $tokens);
+ getElementsByTagName('body')->item(0)-> // <body>
+ getElementsByTagName('div')->item(0) // <div>
+ ,
+ $tokens
+ );
return $tokens;
}
-
}
/*
-Copyright 2007 Jeroen van der Meer <http://jero.net/>
+Copyright 2007 Jeroen van der Meer <http://jero.net/>
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-class HTML5 {
+class HTML5
+{
private $data;
private $char;
private $EOF;
@@ -69,91 +78,418 @@ class HTML5 {
private $token;
private $content_model;
private $escape = false;
- private $entities = array('AElig;','AElig','AMP;','AMP','Aacute;','Aacute',
- 'Acirc;','Acirc','Agrave;','Agrave','Alpha;','Aring;','Aring','Atilde;',
- 'Atilde','Auml;','Auml','Beta;','COPY;','COPY','Ccedil;','Ccedil','Chi;',
- 'Dagger;','Delta;','ETH;','ETH','Eacute;','Eacute','Ecirc;','Ecirc','Egrave;',
- 'Egrave','Epsilon;','Eta;','Euml;','Euml','GT;','GT','Gamma;','Iacute;',
- 'Iacute','Icirc;','Icirc','Igrave;','Igrave','Iota;','Iuml;','Iuml','Kappa;',
- 'LT;','LT','Lambda;','Mu;','Ntilde;','Ntilde','Nu;','OElig;','Oacute;',
- 'Oacute','Ocirc;','Ocirc','Ograve;','Ograve','Omega;','Omicron;','Oslash;',
- 'Oslash','Otilde;','Otilde','Ouml;','Ouml','Phi;','Pi;','Prime;','Psi;',
- 'QUOT;','QUOT','REG;','REG','Rho;','Scaron;','Sigma;','THORN;','THORN',
- 'TRADE;','Tau;','Theta;','Uacute;','Uacute','Ucirc;','Ucirc','Ugrave;',
- 'Ugrave','Upsilon;','Uuml;','Uuml','Xi;','Yacute;','Yacute','Yuml;','Zeta;',
- 'aacute;','aacute','acirc;','acirc','acute;','acute','aelig;','aelig',
- 'agrave;','agrave','alefsym;','alpha;','amp;','amp','and;','ang;','apos;',
- 'aring;','aring','asymp;','atilde;','atilde','auml;','auml','bdquo;','beta;',
- 'brvbar;','brvbar','bull;','cap;','ccedil;','ccedil','cedil;','cedil',
- 'cent;','cent','chi;','circ;','clubs;','cong;','copy;','copy','crarr;',
- 'cup;','curren;','curren','dArr;','dagger;','darr;','deg;','deg','delta;',
- 'diams;','divide;','divide','eacute;','eacute','ecirc;','ecirc','egrave;',
- 'egrave','empty;','emsp;','ensp;','epsilon;','equiv;','eta;','eth;','eth',
- 'euml;','euml','euro;','exist;','fnof;','forall;','frac12;','frac12',
- 'frac14;','frac14','frac34;','frac34','frasl;','gamma;','ge;','gt;','gt',
- 'hArr;','harr;','hearts;','hellip;','iacute;','iacute','icirc;','icirc',
- 'iexcl;','iexcl','igrave;','igrave','image;','infin;','int;','iota;',
- 'iquest;','iquest','isin;','iuml;','iuml','kappa;','lArr;','lambda;','lang;',
- 'laquo;','laquo','larr;','lceil;','ldquo;','le;','lfloor;','lowast;','loz;',
- 'lrm;','lsaquo;','lsquo;','lt;','lt','macr;','macr','mdash;','micro;','micro',
- 'middot;','middot','minus;','mu;','nabla;','nbsp;','nbsp','ndash;','ne;',
- 'ni;','not;','not','notin;','nsub;','ntilde;','ntilde','nu;','oacute;',
- 'oacute','ocirc;','ocirc','oelig;','ograve;','ograve','oline;','omega;',
- 'omicron;','oplus;','or;','ordf;','ordf','ordm;','ordm','oslash;','oslash',
- 'otilde;','otilde','otimes;','ouml;','ouml','para;','para','part;','permil;',
- 'perp;','phi;','pi;','piv;','plusmn;','plusmn','pound;','pound','prime;',
- 'prod;','prop;','psi;','quot;','quot','rArr;','radic;','rang;','raquo;',
- 'raquo','rarr;','rceil;','rdquo;','real;','reg;','reg','rfloor;','rho;',
- 'rlm;','rsaquo;','rsquo;','sbquo;','scaron;','sdot;','sect;','sect','shy;',
- 'shy','sigma;','sigmaf;','sim;','spades;','sub;','sube;','sum;','sup1;',
- 'sup1','sup2;','sup2','sup3;','sup3','sup;','supe;','szlig;','szlig','tau;',
- 'there4;','theta;','thetasym;','thinsp;','thorn;','thorn','tilde;','times;',
- 'times','trade;','uArr;','uacute;','uacute','uarr;','ucirc;','ucirc',
- 'ugrave;','ugrave','uml;','uml','upsih;','upsilon;','uuml;','uuml','weierp;',
- 'xi;','yacute;','yacute','yen;','yen','yuml;','yuml','zeta;','zwj;','zwnj;');
-
- const PCDATA = 0;
- const RCDATA = 1;
- const CDATA = 2;
+ private $entities = array(
+ 'AElig;',
+ 'AElig',
+ 'AMP;',
+ 'AMP',
+ 'Aacute;',
+ 'Aacute',
+ 'Acirc;',
+ 'Acirc',
+ 'Agrave;',
+ 'Agrave',
+ 'Alpha;',
+ 'Aring;',
+ 'Aring',
+ 'Atilde;',
+ 'Atilde',
+ 'Auml;',
+ 'Auml',
+ 'Beta;',
+ 'COPY;',
+ 'COPY',
+ 'Ccedil;',
+ 'Ccedil',
+ 'Chi;',
+ 'Dagger;',
+ 'Delta;',
+ 'ETH;',
+ 'ETH',
+ 'Eacute;',
+ 'Eacute',
+ 'Ecirc;',
+ 'Ecirc',
+ 'Egrave;',
+ 'Egrave',
+ 'Epsilon;',
+ 'Eta;',
+ 'Euml;',
+ 'Euml',
+ 'GT;',
+ 'GT',
+ 'Gamma;',
+ 'Iacute;',
+ 'Iacute',
+ 'Icirc;',
+ 'Icirc',
+ 'Igrave;',
+ 'Igrave',
+ 'Iota;',
+ 'Iuml;',
+ 'Iuml',
+ 'Kappa;',
+ 'LT;',
+ 'LT',
+ 'Lambda;',
+ 'Mu;',
+ 'Ntilde;',
+ 'Ntilde',
+ 'Nu;',
+ 'OElig;',
+ 'Oacute;',
+ 'Oacute',
+ 'Ocirc;',
+ 'Ocirc',
+ 'Ograve;',
+ 'Ograve',
+ 'Omega;',
+ 'Omicron;',
+ 'Oslash;',
+ 'Oslash',
+ 'Otilde;',
+ 'Otilde',
+ 'Ouml;',
+ 'Ouml',
+ 'Phi;',
+ 'Pi;',
+ 'Prime;',
+ 'Psi;',
+ 'QUOT;',
+ 'QUOT',
+ 'REG;',
+ 'REG',
+ 'Rho;',
+ 'Scaron;',
+ 'Sigma;',
+ 'THORN;',
+ 'THORN',
+ 'TRADE;',
+ 'Tau;',
+ 'Theta;',
+ 'Uacute;',
+ 'Uacute',
+ 'Ucirc;',
+ 'Ucirc',
+ 'Ugrave;',
+ 'Ugrave',
+ 'Upsilon;',
+ 'Uuml;',
+ 'Uuml',
+ 'Xi;',
+ 'Yacute;',
+ 'Yacute',
+ 'Yuml;',
+ 'Zeta;',
+ 'aacute;',
+ 'aacute',
+ 'acirc;',
+ 'acirc',
+ 'acute;',
+ 'acute',
+ 'aelig;',
+ 'aelig',
+ 'agrave;',
+ 'agrave',
+ 'alefsym;',
+ 'alpha;',
+ 'amp;',
+ 'amp',
+ 'and;',
+ 'ang;',
+ 'apos;',
+ 'aring;',
+ 'aring',
+ 'asymp;',
+ 'atilde;',
+ 'atilde',
+ 'auml;',
+ 'auml',
+ 'bdquo;',
+ 'beta;',
+ 'brvbar;',
+ 'brvbar',
+ 'bull;',
+ 'cap;',
+ 'ccedil;',
+ 'ccedil',
+ 'cedil;',
+ 'cedil',
+ 'cent;',
+ 'cent',
+ 'chi;',
+ 'circ;',
+ 'clubs;',
+ 'cong;',
+ 'copy;',
+ 'copy',
+ 'crarr;',
+ 'cup;',
+ 'curren;',
+ 'curren',
+ 'dArr;',
+ 'dagger;',
+ 'darr;',
+ 'deg;',
+ 'deg',
+ 'delta;',
+ 'diams;',
+ 'divide;',
+ 'divide',
+ 'eacute;',
+ 'eacute',
+ 'ecirc;',
+ 'ecirc',
+ 'egrave;',
+ 'egrave',
+ 'empty;',
+ 'emsp;',
+ 'ensp;',
+ 'epsilon;',
+ 'equiv;',
+ 'eta;',
+ 'eth;',
+ 'eth',
+ 'euml;',
+ 'euml',
+ 'euro;',
+ 'exist;',
+ 'fnof;',
+ 'forall;',
+ 'frac12;',
+ 'frac12',
+ 'frac14;',
+ 'frac14',
+ 'frac34;',
+ 'frac34',
+ 'frasl;',
+ 'gamma;',
+ 'ge;',
+ 'gt;',
+ 'gt',
+ 'hArr;',
+ 'harr;',
+ 'hearts;',
+ 'hellip;',
+ 'iacute;',
+ 'iacute',
+ 'icirc;',
+ 'icirc',
+ 'iexcl;',
+ 'iexcl',
+ 'igrave;',
+ 'igrave',
+ 'image;',
+ 'infin;',
+ 'int;',
+ 'iota;',
+ 'iquest;',
+ 'iquest',
+ 'isin;',
+ 'iuml;',
+ 'iuml',
+ 'kappa;',
+ 'lArr;',
+ 'lambda;',
+ 'lang;',
+ 'laquo;',
+ 'laquo',
+ 'larr;',
+ 'lceil;',
+ 'ldquo;',
+ 'le;',
+ 'lfloor;',
+ 'lowast;',
+ 'loz;',
+ 'lrm;',
+ 'lsaquo;',
+ 'lsquo;',
+ 'lt;',
+ 'lt',
+ 'macr;',
+ 'macr',
+ 'mdash;',
+ 'micro;',
+ 'micro',
+ 'middot;',
+ 'middot',
+ 'minus;',
+ 'mu;',
+ 'nabla;',
+ 'nbsp;',
+ 'nbsp',
+ 'ndash;',
+ 'ne;',
+ 'ni;',
+ 'not;',
+ 'not',
+ 'notin;',
+ 'nsub;',
+ 'ntilde;',
+ 'ntilde',
+ 'nu;',
+ 'oacute;',
+ 'oacute',
+ 'ocirc;',
+ 'ocirc',
+ 'oelig;',
+ 'ograve;',
+ 'ograve',
+ 'oline;',
+ 'omega;',
+ 'omicron;',
+ 'oplus;',
+ 'or;',
+ 'ordf;',
+ 'ordf',
+ 'ordm;',
+ 'ordm',
+ 'oslash;',
+ 'oslash',
+ 'otilde;',
+ 'otilde',
+ 'otimes;',
+ 'ouml;',
+ 'ouml',
+ 'para;',
+ 'para',
+ 'part;',
+ 'permil;',
+ 'perp;',
+ 'phi;',
+ 'pi;',
+ 'piv;',
+ 'plusmn;',
+ 'plusmn',
+ 'pound;',
+ 'pound',
+ 'prime;',
+ 'prod;',
+ 'prop;',
+ 'psi;',
+ 'quot;',
+ 'quot',
+ 'rArr;',
+ 'radic;',
+ 'rang;',
+ 'raquo;',
+ 'raquo',
+ 'rarr;',
+ 'rceil;',
+ 'rdquo;',
+ 'real;',
+ 'reg;',
+ 'reg',
+ 'rfloor;',
+ 'rho;',
+ 'rlm;',
+ 'rsaquo;',
+ 'rsquo;',
+ 'sbquo;',
+ 'scaron;',
+ 'sdot;',
+ 'sect;',
+ 'sect',
+ 'shy;',
+ 'shy',
+ 'sigma;',
+ 'sigmaf;',
+ 'sim;',
+ 'spades;',
+ 'sub;',
+ 'sube;',
+ 'sum;',
+ 'sup1;',
+ 'sup1',
+ 'sup2;',
+ 'sup2',
+ 'sup3;',
+ 'sup3',
+ 'sup;',
+ 'supe;',
+ 'szlig;',
+ 'szlig',
+ 'tau;',
+ 'there4;',
+ 'theta;',
+ 'thetasym;',
+ 'thinsp;',
+ 'thorn;',
+ 'thorn',
+ 'tilde;',
+ 'times;',
+ 'times',
+ 'trade;',
+ 'uArr;',
+ 'uacute;',
+ 'uacute',
+ 'uarr;',
+ 'ucirc;',
+ 'ucirc',
+ 'ugrave;',
+ 'ugrave',
+ 'uml;',
+ 'uml',
+ 'upsih;',
+ 'upsilon;',
+ 'uuml;',
+ 'uuml',
+ 'weierp;',
+ 'xi;',
+ 'yacute;',
+ 'yacute',
+ 'yen;',
+ 'yen',
+ 'yuml;',
+ 'yuml',
+ 'zeta;',
+ 'zwj;',
+ 'zwnj;'
+ );
+
+ const PCDATA = 0;
+ const RCDATA = 1;
+ const CDATA = 2;
const PLAINTEXT = 3;
- const DOCTYPE = 0;
+ const DOCTYPE = 0;
const STARTTAG = 1;
- const ENDTAG = 2;
- const COMMENT = 3;
+ const ENDTAG = 2;
+ const COMMENT = 3;
const CHARACTR = 4;
- const EOF = 5;
-
- public function __construct($data) {
- $data = str_replace("\r\n", "\n", $data);
- $data = str_replace("\r", null, $data);
+ const EOF = 5;
+ public function __construct($data)
+ {
$this->data = $data;
$this->char = -1;
- $this->EOF = strlen($data);
+ $this->EOF = strlen($data);
$this->tree = new HTML5TreeConstructer;
$this->content_model = self::PCDATA;
$this->state = 'data';
- while($this->state !== null) {
- $this->{$this->state.'State'}();
+ while ($this->state !== null) {
+ $this->{$this->state . 'State'}();
}
}
- public function save() {
+ public function save()
+ {
return $this->tree->save();
}
- private function char() {
+ private function char()
+ {
return ($this->char < $this->EOF)
? $this->data[$this->char]
: false;
}
- private function character($s, $l = 0) {
- if($s + $l < $this->EOF) {
- if($l === 0) {
+ private function character($s, $l = 0)
+ {
+ if ($s + $l < $this->EOF) {
+ if ($l === 0) {
return $this->data[$s];
} else {
return substr($this->data, $s, $l);
@@ -161,46 +497,52 @@ class HTML5 {
}
}
- private function characters($char_class, $start) {
- return preg_replace('#^(['.$char_class.']+).*#s', '\\1', substr($this->data, $start));
+ private function characters($char_class, $start)
+ {
+ return preg_replace('#^([' . $char_class . ']+).*#s', '\\1', substr($this->data, $start));
}
- private function dataState() {
+ private function dataState()
+ {
// Consume the next input character
$this->char++;
$char = $this->char();
- if($char === '&' && ($this->content_model === self::PCDATA || $this->content_model === self::RCDATA)) {
+ if ($char === '&' && ($this->content_model === self::PCDATA || $this->content_model === self::RCDATA)) {
/* U+0026 AMPERSAND (&)
When the content model flag is set to one of the PCDATA or RCDATA
states: switch to the entity data state. Otherwise: treat it as per
the "anything else" entry below. */
$this->state = 'entityData';
- } elseif($char === '-') {
+ } elseif ($char === '-') {
/* If the content model flag is set to either the RCDATA state or
the CDATA state, and the escape flag is false, and there are at
least three characters before this one in the input stream, and the
last four characters in the input stream, including this one, are
U+003C LESS-THAN SIGN, U+0021 EXCLAMATION MARK, U+002D HYPHEN-MINUS,
and U+002D HYPHEN-MINUS ("<!--"), then set the escape flag to true. */
- if(($this->content_model === self::RCDATA || $this->content_model ===
- self::CDATA) && $this->escape === false &&
- $this->char >= 3 && $this->character($this->char - 4, 4) === '<!--') {
+ if (($this->content_model === self::RCDATA || $this->content_model ===
+ self::CDATA) && $this->escape === false &&
+ $this->char >= 3 && $this->character($this->char - 4, 4) === '<!--'
+ ) {
$this->escape = true;
}
/* In any case, emit the input character as a character token. Stay
in the data state. */
- $this->emitToken(array(
- 'type' => self::CHARACTR,
- 'data' => $char
- ));
+ $this->emitToken(
+ array(
+ 'type' => self::CHARACTR,
+ 'data' => $char
+ )
+ );
- /* U+003C LESS-THAN SIGN (<) */
- } elseif($char === '<' && ($this->content_model === self::PCDATA ||
- (($this->content_model === self::RCDATA ||
- $this->content_model === self::CDATA) && $this->escape === false))) {
+ /* U+003C LESS-THAN SIGN (<) */
+ } elseif ($char === '<' && ($this->content_model === self::PCDATA ||
+ (($this->content_model === self::RCDATA ||
+ $this->content_model === self::CDATA) && $this->escape === false))
+ ) {
/* When the content model flag is set to the PCDATA state: switch
to the tag open state.
@@ -211,39 +553,44 @@ class HTML5 {
Otherwise: treat it as per the "anything else" entry below. */
$this->state = 'tagOpen';
- /* U+003E GREATER-THAN SIGN (>) */
- } elseif($char === '>') {
+ /* U+003E GREATER-THAN SIGN (>) */
+ } elseif ($char === '>') {
/* If the content model flag is set to either the RCDATA state or
the CDATA state, and the escape flag is true, and the last three
characters in the input stream including this one are U+002D
HYPHEN-MINUS, U+002D HYPHEN-MINUS, U+003E GREATER-THAN SIGN ("-->"),
set the escape flag to false. */
- if(($this->content_model === self::RCDATA ||
- $this->content_model === self::CDATA) && $this->escape === true &&
- $this->character($this->char, 3) === '-->') {
+ if (($this->content_model === self::RCDATA ||
+ $this->content_model === self::CDATA) && $this->escape === true &&
+ $this->character($this->char, 3) === '-->'
+ ) {
$this->escape = false;
}
/* In any case, emit the input character as a character token.
Stay in the data state. */
- $this->emitToken(array(
- 'type' => self::CHARACTR,
- 'data' => $char
- ));
+ $this->emitToken(
+ array(
+ 'type' => self::CHARACTR,
+ 'data' => $char
+ )
+ );
- } elseif($this->char === $this->EOF) {
+ } elseif ($this->char === $this->EOF) {
/* EOF
Emit an end-of-file token. */
$this->EOF();
- } elseif($this->content_model === self::PLAINTEXT) {
+ } elseif ($this->content_model === self::PLAINTEXT) {
/* When the content model flag is set to the PLAINTEXT state
THIS DIFFERS GREATLY FROM THE SPEC: Get the remaining characters of
the text and emit it as a character token. */
- $this->emitToken(array(
- 'type' => self::CHARACTR,
- 'data' => substr($this->data, $this->char)
- ));
+ $this->emitToken(
+ array(
+ 'type' => self::CHARACTR,
+ 'data' => substr($this->data, $this->char)
+ )
+ );
$this->EOF();
@@ -252,37 +599,43 @@ class HTML5 {
THIS DIFFERS GREATLY FROM THE SPEC: Get as many character that
otherwise would also be treated as a character token and emit it
as a single character token. Stay in the data state. */
- $len = strcspn($this->data, '<&', $this->char);
+ $len = strcspn($this->data, '<&', $this->char);
$char = substr($this->data, $this->char, $len);
$this->char += $len - 1;
- $this->emitToken(array(
- 'type' => self::CHARACTR,
- 'data' => $char
- ));
+ $this->emitToken(
+ array(
+ 'type' => self::CHARACTR,
+ 'data' => $char
+ )
+ );
$this->state = 'data';
}
}
- private function entityDataState() {
+ private function entityDataState()
+ {
// Attempt to consume an entity.
$entity = $this->entity();
// If nothing is returned, emit a U+0026 AMPERSAND character token.
// Otherwise, emit the character token that was returned.
$char = (!$entity) ? '&' : $entity;
- $this->emitToken(array(
- 'type' => self::CHARACTR,
- 'data' => $char
- ));
+ $this->emitToken(
+ array(
+ 'type' => self::CHARACTR,
+ 'data' => $char
+ )
+ );
// Finally, switch to the data state.
$this->state = 'data';
}
- private function tagOpenState() {
- switch($this->content_model) {
+ private function tagOpenState()
+ {
+ switch ($this->content_model) {
case self::RCDATA:
case self::CDATA:
/* If the next input character is a U+002F SOLIDUS (/) character,
@@ -290,19 +643,21 @@ class HTML5 {
input character is not a U+002F SOLIDUS (/) character, emit a
U+003C LESS-THAN SIGN character token and switch to the data
state to process the next input character. */
- if($this->character($this->char + 1) === '/') {
+ if ($this->character($this->char + 1) === '/') {
$this->char++;
$this->state = 'closeTagOpen';
} else {
- $this->emitToken(array(
- 'type' => self::CHARACTR,
- 'data' => '<'
- ));
+ $this->emitToken(
+ array(
+ 'type' => self::CHARACTR,
+ 'data' => '<'
+ )
+ );
$this->state = 'data';
}
- break;
+ break;
case self::PCDATA:
// If the content model flag is set to the PCDATA state
@@ -310,42 +665,44 @@ class HTML5 {
$this->char++;
$char = $this->char();
- if($char === '!') {
+ if ($char === '!') {
/* U+0021 EXCLAMATION MARK (!)
Switch to the markup declaration open state. */
$this->state = 'markupDeclarationOpen';
- } elseif($char === '/') {
+ } elseif ($char === '/') {
/* U+002F SOLIDUS (/)
Switch to the close tag open state. */
$this->state = 'closeTagOpen';
- } elseif(preg_match('/^[A-Za-z]$/', $char)) {
+ } elseif (preg_match('/^[A-Za-z]$/', $char)) {
/* U+0041 LATIN LETTER A through to U+005A LATIN LETTER Z
Create a new start tag token, set its tag name to the lowercase
version of the input character (add 0x0020 to the character's code
point), then switch to the tag name state. (Don't emit the token
yet; further details will be filled in before it is emitted.) */
$this->token = array(
- 'name' => strtolower($char),
- 'type' => self::STARTTAG,
- 'attr' => array()
+ 'name' => strtolower($char),
+ 'type' => self::STARTTAG,
+ 'attr' => array()
);
$this->state = 'tagName';
- } elseif($char === '>') {
+ } elseif ($char === '>') {
/* U+003E GREATER-THAN SIGN (>)
Parse error. Emit a U+003C LESS-THAN SIGN character token and a
U+003E GREATER-THAN SIGN character token. Switch to the data state. */
- $this->emitToken(array(
- 'type' => self::CHARACTR,
- 'data' => '<>'
- ));
+ $this->emitToken(
+ array(
+ 'type' => self::CHARACTR,
+ 'data' => '<>'
+ )
+ );
$this->state = 'data';
- } elseif($char === '?') {
+ } elseif ($char === '?') {
/* U+003F QUESTION MARK (?)
Parse error. Switch to the bogus comment state. */
$this->state = 'bogusComment';
@@ -354,25 +711,31 @@ class HTML5 {
/* Anything else
Parse error. Emit a U+003C LESS-THAN SIGN character token and
reconsume the current input character in the data state. */
- $this->emitToken(array(
- 'type' => self::CHARACTR,
- 'data' => '<'
- ));
+ $this->emitToken(
+ array(
+ 'type' => self::CHARACTR,
+ 'data' => '<'
+ )
+ );
$this->char--;
$this->state = 'data';
}
- break;
+ break;
}
}
- private function closeTagOpenState() {
+ private function closeTagOpenState()
+ {
$next_node = strtolower($this->characters('A-Za-z', $this->char + 1));
$the_same = count($this->tree->stack) > 0 && $next_node === end($this->tree->stack)->nodeName;
- if(($this->content_model === self::RCDATA || $this->content_model === self::CDATA) &&
- (!$the_same || ($the_same && (!preg_match('/[\t\n\x0b\x0c >\/]/',
- $this->character($this->char + 1 + strlen($next_node))) || $this->EOF === $this->char)))) {
+ if (($this->content_model === self::RCDATA || $this->content_model === self::CDATA) &&
+ (!$the_same || ($the_same && (!preg_match(
+ '/[\t\n\x0b\x0c >\/]/',
+ $this->character($this->char + 1 + strlen($next_node))
+ ) || $this->EOF === $this->char)))
+ ) {
/* If the content model flag is set to the RCDATA or CDATA states then
examine the next few characters. If they do not match the tag name of
the last start tag token emitted (case insensitively), or if they do but
@@ -388,10 +751,12 @@ class HTML5 {
...then there is a parse error. Emit a U+003C LESS-THAN SIGN character
token, a U+002F SOLIDUS character token, and switch to the data state
to process the next input character. */
- $this->emitToken(array(
- 'type' => self::CHARACTR,
- 'data' => '</'
- ));
+ $this->emitToken(
+ array(
+ 'type' => self::CHARACTR,
+ 'data' => '</'
+ )
+ );
$this->state = 'data';
@@ -402,32 +767,34 @@ class HTML5 {
$this->char++;
$char = $this->char();
- if(preg_match('/^[A-Za-z]$/', $char)) {
+ if (preg_match('/^[A-Za-z]$/', $char)) {
/* U+0041 LATIN LETTER A through to U+005A LATIN LETTER Z
Create a new end tag token, set its tag name to the lowercase version
of the input character (add 0x0020 to the character's code point), then
switch to the tag name state. (Don't emit the token yet; further details
will be filled in before it is emitted.) */
$this->token = array(
- 'name' => strtolower($char),
- 'type' => self::ENDTAG
+ 'name' => strtolower($char),
+ 'type' => self::ENDTAG
);
$this->state = 'tagName';
- } elseif($char === '>') {
+ } elseif ($char === '>') {
/* U+003E GREATER-THAN SIGN (>)
Parse error. Switch to the data state. */
$this->state = 'data';
- } elseif($this->char === $this->EOF) {
+ } elseif ($this->char === $this->EOF) {
/* EOF
Parse error. Emit a U+003C LESS-THAN SIGN character token and a U+002F
SOLIDUS character token. Reconsume the EOF character in the data state. */
- $this->emitToken(array(
- 'type' => self::CHARACTR,
- 'data' => '</'
- ));
+ $this->emitToken(
+ array(
+ 'type' => self::CHARACTR,
+ 'data' => '</'
+ )
+ );
$this->char--;
$this->state = 'data';
@@ -439,12 +806,13 @@ class HTML5 {
}
}
- private function tagNameState() {
+ private function tagNameState()
+ {
// Consume the next input character:
$this->char++;
$char = $this->character($this->char);
- if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
+ if (preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
/* U+0009 CHARACTER TABULATION
U+000A LINE FEED (LF)
U+000B LINE TABULATION
@@ -453,13 +821,13 @@ class HTML5 {
Switch to the before attribute name state. */
$this->state = 'beforeAttributeName';
- } elseif($char === '>') {
+ } elseif ($char === '>') {
/* U+003E GREATER-THAN SIGN (>)
Emit the current tag token. Switch to the data state. */
$this->emitToken($this->token);
$this->state = 'data';
- } elseif($this->char === $this->EOF) {
+ } elseif ($this->char === $this->EOF) {
/* EOF
Parse error. Emit the current tag token. Reconsume the EOF
character in the data state. */
@@ -468,7 +836,7 @@ class HTML5 {
$this->char--;
$this->state = 'data';
- } elseif($char === '/') {
+ } elseif ($char === '/') {
/* U+002F SOLIDUS (/)
Parse error unless this is a permitted slash. Switch to the before
attribute name state. */
@@ -483,12 +851,13 @@ class HTML5 {
}
}
- private function beforeAttributeNameState() {
+ private function beforeAttributeNameState()
+ {
// Consume the next input character:
$this->char++;
$char = $this->character($this->char);
- if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
+ if (preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
/* U+0009 CHARACTER TABULATION
U+000A LINE FEED (LF)
U+000B LINE TABULATION
@@ -497,19 +866,19 @@ class HTML5 {
Stay in the before attribute name state. */
$this->state = 'beforeAttributeName';
- } elseif($char === '>') {
+ } elseif ($char === '>') {
/* U+003E GREATER-THAN SIGN (>)
Emit the current tag token. Switch to the data state. */
$this->emitToken($this->token);
$this->state = 'data';
- } elseif($char === '/') {
+ } elseif ($char === '/') {
/* U+002F SOLIDUS (/)
Parse error unless this is a permitted slash. Stay in the before
attribute name state. */
$this->state = 'beforeAttributeName';
- } elseif($this->char === $this->EOF) {
+ } elseif ($this->char === $this->EOF) {
/* EOF
Parse error. Emit the current tag token. Reconsume the EOF
character in the data state. */
@@ -524,7 +893,7 @@ class HTML5 {
name to the current input character, and its value to the empty string.
Switch to the attribute name state. */
$this->token['attr'][] = array(
- 'name' => strtolower($char),
+ 'name' => strtolower($char),
'value' => null
);
@@ -532,12 +901,13 @@ class HTML5 {
}
}
- private function attributeNameState() {
+ private function attributeNameState()
+ {
// Consume the next input character:
$this->char++;
$char = $this->character($this->char);
- if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
+ if (preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
/* U+0009 CHARACTER TABULATION
U+000A LINE FEED (LF)
U+000B LINE TABULATION
@@ -546,24 +916,24 @@ class HTML5 {
Stay in the before attribute name state. */
$this->state = 'afterAttributeName';
- } elseif($char === '=') {
+ } elseif ($char === '=') {
/* U+003D EQUALS SIGN (=)
Switch to the before attribute value state. */
$this->state = 'beforeAttributeValue';
- } elseif($char === '>') {
+ } elseif ($char === '>') {
/* U+003E GREATER-THAN SIGN (>)
Emit the current tag token. Switch to the data state. */
$this->emitToken($this->token);
$this->state = 'data';
- } elseif($char === '/' && $this->character($this->char + 1) !== '>') {
+ } elseif ($char === '/' && $this->character($this->char + 1) !== '>') {
/* U+002F SOLIDUS (/)
Parse error unless this is a permitted slash. Switch to the before
attribute name state. */
$this->state = 'beforeAttributeName';
- } elseif($this->char === $this->EOF) {
+ } elseif ($this->char === $this->EOF) {
/* EOF
Parse error. Emit the current tag token. Reconsume the EOF
character in the data state. */
@@ -583,12 +953,13 @@ class HTML5 {
}
}
- private function afterAttributeNameState() {
+ private function afterAttributeNameState()
+ {
// Consume the next input character:
$this->char++;
$char = $this->character($this->char);
- if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
+ if (preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
/* U+0009 CHARACTER TABULATION
U+000A LINE FEED (LF)
U+000B LINE TABULATION
@@ -597,24 +968,24 @@ class HTML5 {
Stay in the after attribute name state. */
$this->state = 'afterAttributeName';
- } elseif($char === '=') {
+ } elseif ($char === '=') {
/* U+003D EQUALS SIGN (=)
Switch to the before attribute value state. */
$this->state = 'beforeAttributeValue';
- } elseif($char === '>') {
+ } elseif ($char === '>') {
/* U+003E GREATER-THAN SIGN (>)
Emit the current tag token. Switch to the data state. */
$this->emitToken($this->token);
$this->state = 'data';
- } elseif($char === '/' && $this->character($this->char + 1) !== '>') {
+ } elseif ($char === '/' && $this->character($this->char + 1) !== '>') {
/* U+002F SOLIDUS (/)
Parse error unless this is a permitted slash. Switch to the
before attribute name state. */
$this->state = 'beforeAttributeName';
- } elseif($this->char === $this->EOF) {
+ } elseif ($this->char === $this->EOF) {
/* EOF
Parse error. Emit the current tag token. Reconsume the EOF
character in the data state. */
@@ -629,7 +1000,7 @@ class HTML5 {
name to the current input character, and its value to the empty string.
Switch to the attribute name state. */
$this->token['attr'][] = array(
- 'name' => strtolower($char),
+ 'name' => strtolower($char),
'value' => null
);
@@ -637,12 +1008,13 @@ class HTML5 {
}
}
- private function beforeAttributeValueState() {
+ private function beforeAttributeValueState()
+ {
// Consume the next input character:
$this->char++;
$char = $this->character($this->char);
- if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
+ if (preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
/* U+0009 CHARACTER TABULATION
U+000A LINE FEED (LF)
U+000B LINE TABULATION
@@ -651,24 +1023,24 @@ class HTML5 {
Stay in the before attribute value state. */
$this->state = 'beforeAttributeValue';
- } elseif($char === '"') {
+ } elseif ($char === '"') {
/* U+0022 QUOTATION MARK (")
Switch to the attribute value (double-quoted) state. */
$this->state = 'attributeValueDoubleQuoted';
- } elseif($char === '&') {
+ } elseif ($char === '&') {
/* U+0026 AMPERSAND (&)
Switch to the attribute value (unquoted) state and reconsume
this input character. */
$this->char--;
$this->state = 'attributeValueUnquoted';
- } elseif($char === '\'') {
+ } elseif ($char === '\'') {
/* U+0027 APOSTROPHE (')
Switch to the attribute value (single-quoted) state. */
$this->state = 'attributeValueSingleQuoted';
- } elseif($char === '>') {
+ } elseif ($char === '>') {
/* U+003E GREATER-THAN SIGN (>)
Emit the current tag token. Switch to the data state. */
$this->emitToken($this->token);
@@ -685,22 +1057,23 @@ class HTML5 {
}
}
- private function attributeValueDoubleQuotedState() {
+ private function attributeValueDoubleQuotedState()
+ {
// Consume the next input character:
$this->char++;
$char = $this->character($this->char);
- if($char === '"') {
+ if ($char === '"') {
/* U+0022 QUOTATION MARK (")
Switch to the before attribute name state. */
$this->state = 'beforeAttributeName';
- } elseif($char === '&') {
+ } elseif ($char === '&') {
/* U+0026 AMPERSAND (&)
Switch to the entity in attribute value state. */
$this->entityInAttributeValueState('double');
- } elseif($this->char === $this->EOF) {
+ } elseif ($this->char === $this->EOF) {
/* EOF
Parse error. Emit the current tag token. Reconsume the character
in the data state. */
@@ -720,22 +1093,23 @@ class HTML5 {
}
}
- private function attributeValueSingleQuotedState() {
+ private function attributeValueSingleQuotedState()
+ {
// Consume the next input character:
$this->char++;
$char = $this->character($this->char);
- if($char === '\'') {
+ if ($char === '\'') {
/* U+0022 QUOTATION MARK (')
Switch to the before attribute name state. */
$this->state = 'beforeAttributeName';
- } elseif($char === '&') {
+ } elseif ($char === '&') {
/* U+0026 AMPERSAND (&)
Switch to the entity in attribute value state. */
$this->entityInAttributeValueState('single');
- } elseif($this->char === $this->EOF) {
+ } elseif ($this->char === $this->EOF) {
/* EOF
Parse error. Emit the current tag token. Reconsume the character
in the data state. */
@@ -755,12 +1129,13 @@ class HTML5 {
}
}
- private function attributeValueUnquotedState() {
+ private function attributeValueUnquotedState()
+ {
// Consume the next input character:
$this->char++;
$char = $this->character($this->char);
- if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
+ if (preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
/* U+0009 CHARACTER TABULATION
U+000A LINE FEED (LF)
U+000B LINE TABULATION
@@ -769,12 +1144,12 @@ class HTML5 {
Switch to the before attribute name state. */
$this->state = 'beforeAttributeName';
- } elseif($char === '&') {
+ } elseif ($char === '&') {
/* U+0026 AMPERSAND (&)
Switch to the entity in attribute value state. */
$this->entityInAttributeValueState();
- } elseif($char === '>') {
+ } elseif ($char === '>') {
/* U+003E GREATER-THAN SIGN (>)
Emit the current tag token. Switch to the data state. */
$this->emitToken($this->token);
@@ -791,7 +1166,8 @@ class HTML5 {
}
}
- private function entityInAttributeValueState() {
+ private function entityInAttributeValueState()
+ {
// Attempt to consume an entity.
$entity = $this->entity();
@@ -806,7 +1182,8 @@ class HTML5 {
$this->token['attr'][$last]['value'] .= $char;
}
- private function bogusCommentState() {
+ private function bogusCommentState()
+ {
/* Consume every character up to the first U+003E GREATER-THAN SIGN
character (>) or the end of the file (EOF), whichever comes first. Emit
a comment token whose data is the concatenation of all the characters
@@ -816,10 +1193,12 @@ class HTML5 {
end of the file otherwise. (If the comment was started by the end of
the file (EOF), the token is empty.) */
$data = $this->characters('^>', $this->char);
- $this->emitToken(array(
- 'data' => $data,
- 'type' => self::COMMENT
- ));
+ $this->emitToken(
+ array(
+ 'data' => $data,
+ 'type' => self::COMMENT
+ )
+ );
$this->char += strlen($data);
@@ -827,16 +1206,17 @@ class HTML5 {
$this->state = 'data';
/* If the end of the file was reached, reconsume the EOF character. */
- if($this->char === $this->EOF) {
+ if ($this->char === $this->EOF) {
$this->char = $this->EOF - 1;
}
}
- private function markupDeclarationOpenState() {
+ private function markupDeclarationOpenState()
+ {
/* If the next two characters are both U+002D HYPHEN-MINUS (-)
characters, consume those two characters, create a comment token whose
data is the empty string, and switch to the comment state. */
- if($this->character($this->char + 1, 2) === '--') {
+ if ($this->character($this->char + 1, 2) === '--') {
$this->char += 2;
$this->state = 'comment';
$this->token = array(
@@ -844,41 +1224,42 @@ class HTML5 {
'type' => self::COMMENT
);
- /* Otherwise if the next seven chacacters are a case-insensitive match
- for the word "DOCTYPE", then consume those characters and switch to the
- DOCTYPE state. */
- } elseif(strtolower($this->character($this->char + 1, 7)) === 'doctype') {
+ /* Otherwise if the next seven chacacters are a case-insensitive match
+ for the word "DOCTYPE", then consume those characters and switch to the
+ DOCTYPE state. */
+ } elseif (strtolower($this->character($this->char + 1, 7)) === 'doctype') {
$this->char += 7;
$this->state = 'doctype';
- /* Otherwise, is is a parse error. Switch to the bogus comment state.
- The next character that is consumed, if any, is the first character
- that will be in the comment. */
+ /* Otherwise, is is a parse error. Switch to the bogus comment state.
+ The next character that is consumed, if any, is the first character
+ that will be in the comment. */
} else {
$this->char++;
$this->state = 'bogusComment';
}
}
- private function commentState() {
+ private function commentState()
+ {
/* Consume the next input character: */
$this->char++;
$char = $this->char();
/* U+002D HYPHEN-MINUS (-) */
- if($char === '-') {
+ if ($char === '-') {
/* Switch to the comment dash state */
$this->state = 'commentDash';
- /* EOF */
- } elseif($this->char === $this->EOF) {
+ /* EOF */
+ } elseif ($this->char === $this->EOF) {
/* Parse error. Emit the comment token. Reconsume the EOF character
in the data state. */
$this->emitToken($this->token);
$this->char--;
$this->state = 'data';
- /* Anything else */
+ /* Anything else */
} else {
/* Append the input character to the comment token's data. Stay in
the comment state. */
@@ -886,62 +1267,65 @@ class HTML5 {
}
}
- private function commentDashState() {
+ private function commentDashState()
+ {
/* Consume the next input character: */
$this->char++;
$char = $this->char();
/* U+002D HYPHEN-MINUS (-) */
- if($char === '-') {
+ if ($char === '-') {
/* Switch to the comment end state */
$this->state = 'commentEnd';
- /* EOF */
- } elseif($this->char === $this->EOF) {
+ /* EOF */
+ } elseif ($this->char === $this->EOF) {
/* Parse error. Emit the comment token. Reconsume the EOF character
in the data state. */
$this->emitToken($this->token);
$this->char--;
$this->state = 'data';
- /* Anything else */
+ /* Anything else */
} else {
/* Append a U+002D HYPHEN-MINUS (-) character and the input
character to the comment token's data. Switch to the comment state. */
- $this->token['data'] .= '-'.$char;
+ $this->token['data'] .= '-' . $char;
$this->state = 'comment';
}
}
- private function commentEndState() {
+ private function commentEndState()
+ {
/* Consume the next input character: */
$this->char++;
$char = $this->char();
- if($char === '>') {
+ if ($char === '>') {
$this->emitToken($this->token);
$this->state = 'data';
- } elseif($char === '-') {
+ } elseif ($char === '-') {
$this->token['data'] .= '-';
- } elseif($this->char === $this->EOF) {
+ } elseif ($this->char === $this->EOF) {
$this->emitToken($this->token);
$this->char--;
$this->state = 'data';
} else {
- $this->token['data'] .= '--'.$char;
+ $this->token['data'] .= '--' . $char;
$this->state = 'comment';
}
}
- private function doctypeState() {
+ private function doctypeState()
+ {
/* Consume the next input character: */
$this->char++;
$char = $this->char();
- if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
+ if (preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
$this->state = 'beforeDoctypeName';
} else {
@@ -950,15 +1334,16 @@ class HTML5 {
}
}
- private function beforeDoctypeNameState() {
+ private function beforeDoctypeNameState()
+ {
/* Consume the next input character: */
$this->char++;
$char = $this->char();
- if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
+ if (preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
// Stay in the before DOCTYPE name state.
- } elseif(preg_match('/^[a-z]$/', $char)) {
+ } elseif (preg_match('/^[a-z]$/', $char)) {
$this->token = array(
'name' => strtoupper($char),
'type' => self::DOCTYPE,
@@ -967,21 +1352,25 @@ class HTML5 {
$this->state = 'doctypeName';
- } elseif($char === '>') {
- $this->emitToken(array(
- 'name' => null,
- 'type' => self::DOCTYPE,
- 'error' => true
- ));
+ } elseif ($char === '>') {
+ $this->emitToken(
+ array(
+ 'name' => null,
+ 'type' => self::DOCTYPE,
+ 'error' => true
+ )
+ );
$this->state = 'data';
- } elseif($this->char === $this->EOF) {
- $this->emitToken(array(
- 'name' => null,
- 'type' => self::DOCTYPE,
- 'error' => true
- ));
+ } elseif ($this->char === $this->EOF) {
+ $this->emitToken(
+ array(
+ 'name' => null,
+ 'type' => self::DOCTYPE,
+ 'error' => true
+ )
+ );
$this->char--;
$this->state = 'data';
@@ -997,22 +1386,23 @@ class HTML5 {
}
}
- private function doctypeNameState() {
+ private function doctypeNameState()
+ {
/* Consume the next input character: */
$this->char++;
$char = $this->char();
- if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
+ if (preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
$this->state = 'AfterDoctypeName';
- } elseif($char === '>') {
+ } elseif ($char === '>') {
$this->emitToken($this->token);
$this->state = 'data';
- } elseif(preg_match('/^[a-z]$/', $char)) {
+ } elseif (preg_match('/^[a-z]$/', $char)) {
$this->token['name'] .= strtoupper($char);
- } elseif($this->char === $this->EOF) {
+ } elseif ($this->char === $this->EOF) {
$this->emitToken($this->token);
$this->char--;
$this->state = 'data';
@@ -1026,19 +1416,20 @@ class HTML5 {
: true;
}
- private function afterDoctypeNameState() {
+ private function afterDoctypeNameState()
+ {
/* Consume the next input character: */
$this->char++;
$char = $this->char();
- if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
+ if (preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
// Stay in the DOCTYPE name state.
- } elseif($char === '>') {
+ } elseif ($char === '>') {
$this->emitToken($this->token);
$this->state = 'data';
- } elseif($this->char === $this->EOF) {
+ } elseif ($this->char === $this->EOF) {
$this->emitToken($this->token);
$this->char--;
$this->state = 'data';
@@ -1049,16 +1440,17 @@ class HTML5 {
}
}
- private function bogusDoctypeState() {
+ private function bogusDoctypeState()
+ {
/* Consume the next input character: */
$this->char++;
$char = $this->char();
- if($char === '>') {
+ if ($char === '>') {
$this->emitToken($this->token);
$this->state = 'data';
- } elseif($this->char === $this->EOF) {
+ } elseif ($this->char === $this->EOF) {
$this->emitToken($this->token);
$this->char--;
$this->state = 'data';
@@ -1068,22 +1460,23 @@ class HTML5 {
}
}
- private function entity() {
+ private function entity()
+ {
$start = $this->char;
// This section defines how to consume an entity. This definition is
// used when parsing entities in text and in attributes.
// The behaviour depends on the identity of the next character (the
- // one immediately after the U+0026 AMPERSAND character):
+ // one immediately after the U+0026 AMPERSAND character):
- switch($this->character($this->char + 1)) {
+ switch ($this->character($this->char + 1)) {
// U+0023 NUMBER SIGN (#)
case '#':
// The behaviour further depends on the character after the
// U+0023 NUMBER SIGN:
- switch($this->character($this->char + 1)) {
+ switch ($this->character($this->char + 1)) {
// U+0078 LATIN SMALL LETTER X
// U+0058 LATIN CAPITAL LETTER X
case 'x':
@@ -1096,7 +1489,7 @@ class HTML5 {
// words, 0-9, A-F, a-f).
$char = 1;
$char_class = '0-9A-Fa-f';
- break;
+ break;
// Anything else
default:
@@ -1105,7 +1498,7 @@ class HTML5 {
// NINE (i.e. just 0-9).
$char = 0;
$char_class = '0-9';
- break;
+ break;
}
// Consume as many characters as match the range of characters
@@ -1116,7 +1509,7 @@ class HTML5 {
$cond = strlen($e_name) > 0;
// The rest of the parsing happens bellow.
- break;
+ break;
// Anything else
default:
@@ -1126,12 +1519,12 @@ class HTML5 {
$e_name = $this->characters('0-9A-Za-z;', $this->char + 1);
$len = strlen($e_name);
- for($c = 1; $c <= $len; $c++) {
+ for ($c = 1; $c <= $len; $c++) {
$id = substr($e_name, 0, $c);
$this->char++;
- if(in_array($id, $this->entities)) {
- if ($e_name[$c-1] !== ';') {
+ if (in_array($id, $this->entities)) {
+ if ($e_name[$c - 1] !== ';') {
if ($c < $len && $e_name[$c] == ';') {
$this->char++; // consume extra semicolon
}
@@ -1143,10 +1536,10 @@ class HTML5 {
$cond = isset($entity);
// The rest of the parsing happens bellow.
- break;
+ break;
}
- if(!$cond) {
+ if (!$cond) {
// If no match can be made, then this is a parse error. No
// characters are consumed, and nothing is returned.
$this->char = $start;
@@ -1155,81 +1548,157 @@ class HTML5 {
// Return a character token for the character corresponding to the
// entity name (as given by the second column of the entities table).
- return html_entity_decode('&'.$entity.';', ENT_QUOTES, 'UTF-8');
+ return html_entity_decode('&' . $entity . ';', ENT_QUOTES, 'UTF-8');
}
- private function emitToken($token) {
+ private function emitToken($token)
+ {
$emit = $this->tree->emitToken($token);
- if(is_int($emit)) {
+ if (is_int($emit)) {
$this->content_model = $emit;
- } elseif($token['type'] === self::ENDTAG) {
+ } elseif ($token['type'] === self::ENDTAG) {
$this->content_model = self::PCDATA;
}
}
- private function EOF() {
+ private function EOF()
+ {
$this->state = null;
- $this->tree->emitToken(array(
- 'type' => self::EOF
- ));
+ $this->tree->emitToken(
+ array(
+ 'type' => self::EOF
+ )
+ );
}
}
-class HTML5TreeConstructer {
+class HTML5TreeConstructer
+{
public $stack = array();
private $phase;
private $mode;
private $dom;
private $foster_parent = null;
- private $a_formatting = array();
+ private $a_formatting = array();
private $head_pointer = null;
private $form_pointer = null;
- private $scoping = array('button','caption','html','marquee','object','table','td','th');
- private $formatting = array('a','b','big','em','font','i','nobr','s','small','strike','strong','tt','u');
- private $special = array('address','area','base','basefont','bgsound',
- 'blockquote','body','br','center','col','colgroup','dd','dir','div','dl',
- 'dt','embed','fieldset','form','frame','frameset','h1','h2','h3','h4','h5',
- 'h6','head','hr','iframe','image','img','input','isindex','li','link',
- 'listing','menu','meta','noembed','noframes','noscript','ol','optgroup',
- 'option','p','param','plaintext','pre','script','select','spacer','style',
- 'tbody','textarea','tfoot','thead','title','tr','ul','wbr');
+ private $scoping = array('button', 'caption', 'html', 'marquee', 'object', 'table', 'td', 'th');
+ private $formatting = array(
+ 'a',
+ 'b',
+ 'big',
+ 'em',
+ 'font',
+ 'i',
+ 'nobr',
+ 's',
+ 'small',
+ 'strike',
+ 'strong',
+ 'tt',
+ 'u'
+ );
+ private $special = array(
+ 'address',
+ 'area',
+ 'base',
+ 'basefont',
+ 'bgsound',
+ 'blockquote',
+ 'body',
+ 'br',
+ 'center',
+ 'col',
+ 'colgroup',
+ 'dd',
+ 'dir',
+ 'div',
+ 'dl',
+ 'dt',
+ 'embed',
+ 'fieldset',
+ 'form',
+ 'frame',
+ 'frameset',
+ 'h1',
+ 'h2',
+ 'h3',
+ 'h4',
+ 'h5',
+ 'h6',
+ 'head',
+ 'hr',
+ 'iframe',
+ 'image',
+ 'img',
+ 'input',
+ 'isindex',
+ 'li',
+ 'link',
+ 'listing',
+ 'menu',
+ 'meta',
+ 'noembed',
+ 'noframes',
+ 'noscript',
+ 'ol',
+ 'optgroup',
+ 'option',
+ 'p',
+ 'param',
+ 'plaintext',
+ 'pre',
+ 'script',
+ 'select',
+ 'spacer',
+ 'style',
+ 'tbody',
+ 'textarea',
+ 'tfoot',
+ 'thead',
+ 'title',
+ 'tr',
+ 'ul',
+ 'wbr'
+ );
// The different phases.
const INIT_PHASE = 0;
const ROOT_PHASE = 1;
const MAIN_PHASE = 2;
- const END_PHASE = 3;
+ const END_PHASE = 3;
// The different insertion modes for the main phase.
const BEFOR_HEAD = 0;
- const IN_HEAD = 1;
+ const IN_HEAD = 1;
const AFTER_HEAD = 2;
- const IN_BODY = 3;
- const IN_TABLE = 4;
+ const IN_BODY = 3;
+ const IN_TABLE = 4;
const IN_CAPTION = 5;
- const IN_CGROUP = 6;
- const IN_TBODY = 7;
- const IN_ROW = 8;
- const IN_CELL = 9;
- const IN_SELECT = 10;
+ const IN_CGROUP = 6;
+ const IN_TBODY = 7;
+ const IN_ROW = 8;
+ const IN_CELL = 9;
+ const IN_SELECT = 10;
const AFTER_BODY = 11;
- const IN_FRAME = 12;
+ const IN_FRAME = 12;
const AFTR_FRAME = 13;
// The different types of elements.
- const SPECIAL = 0;
- const SCOPING = 1;
+ const SPECIAL = 0;
+ const SCOPING = 1;
const FORMATTING = 2;
- const PHRASING = 3;
+ const PHRASING = 3;
- const MARKER = 0;
+ const MARKER = 0;
- public function __construct() {
+ public function __construct()
+ {
$this->phase = self::INIT_PHASE;
$this->mode = self::BEFOR_HEAD;
$this->dom = new DOMDocument;
@@ -1241,16 +1710,26 @@ class HTML5TreeConstructer {
}
// Process tag tokens
- public function emitToken($token) {
- switch($this->phase) {
- case self::INIT_PHASE: return $this->initPhase($token); break;
- case self::ROOT_PHASE: return $this->rootElementPhase($token); break;
- case self::MAIN_PHASE: return $this->mainPhase($token); break;
- case self::END_PHASE : return $this->trailingEndPhase($token); break;
+ public function emitToken($token)
+ {
+ switch ($this->phase) {
+ case self::INIT_PHASE:
+ return $this->initPhase($token);
+ break;
+ case self::ROOT_PHASE:
+ return $this->rootElementPhase($token);
+ break;
+ case self::MAIN_PHASE:
+ return $this->mainPhase($token);
+ break;
+ case self::END_PHASE :
+ return $this->trailingEndPhase($token);
+ break;
}
}
- private function initPhase($token) {
+ private function initPhase($token)
+ {
/* Initially, the tree construction stage must handle each token
emitted from the tokenisation stage as follows: */
@@ -1262,13 +1741,14 @@ class HTML5TreeConstructer {
U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
or U+0020 SPACE
An end-of-file token */
- if((isset($token['error']) && $token['error']) ||
- $token['type'] === HTML5::COMMENT ||
- $token['type'] === HTML5::STARTTAG ||
- $token['type'] === HTML5::ENDTAG ||
- $token['type'] === HTML5::EOF ||
- ($token['type'] === HTML5::CHARACTR && isset($token['data']) &&
- !preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data']))) {
+ if ((isset($token['error']) && $token['error']) ||
+ $token['type'] === HTML5::COMMENT ||
+ $token['type'] === HTML5::STARTTAG ||
+ $token['type'] === HTML5::ENDTAG ||
+ $token['type'] === HTML5::EOF ||
+ ($token['type'] === HTML5::CHARACTR && isset($token['data']) &&
+ !preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data']))
+ ) {
/* This specification does not define how to handle this case. In
particular, user agents may ignore the entirety of this specification
altogether for such documents, and instead invoke special parse modes
@@ -1277,8 +1757,8 @@ class HTML5TreeConstructer {
$this->phase = self::ROOT_PHASE;
return $this->rootElementPhase($token);
- /* A DOCTYPE token marked as being correct */
- } elseif(isset($token['error']) && !$token['error']) {
+ /* A DOCTYPE token marked as being correct */
+ } elseif (isset($token['error']) && !$token['error']) {
/* Append a DocumentType node to the Document node, with the name
attribute set to the name given in the DOCTYPE token (which will be
"HTML"), and the other attributes specific to DocumentType objects
@@ -1289,52 +1769,58 @@ class HTML5TreeConstructer {
stage. */
$this->phase = self::ROOT_PHASE;
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE */
- } elseif(isset($token['data']) && preg_match('/^[\t\n\x0b\x0c ]+$/',
- $token['data'])) {
+ /* A character token that is one of one of U+0009 CHARACTER TABULATION,
+ U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
+ or U+0020 SPACE */
+ } elseif (isset($token['data']) && preg_match(
+ '/^[\t\n\x0b\x0c ]+$/',
+ $token['data']
+ )
+ ) {
/* Append that character to the Document node. */
$text = $this->dom->createTextNode($token['data']);
$this->dom->appendChild($text);
}
}
- private function rootElementPhase($token) {
+ private function rootElementPhase($token)
+ {
/* After the initial phase, as each token is emitted from the tokenisation
stage, it must be processed as described in this section. */
/* A DOCTYPE token */
- if($token['type'] === HTML5::DOCTYPE) {
+ if ($token['type'] === HTML5::DOCTYPE) {
// Parse error. Ignore the token.
- /* A comment token */
- } elseif($token['type'] === HTML5::COMMENT) {
+ /* A comment token */
+ } elseif ($token['type'] === HTML5::COMMENT) {
/* Append a Comment node to the Document object with the data
attribute set to the data given in the comment token. */
$comment = $this->dom->createComment($token['data']);
$this->dom->appendChild($comment);
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE */
- } elseif($token['type'] === HTML5::CHARACTR &&
- preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) {
+ /* A character token that is one of one of U+0009 CHARACTER TABULATION,
+ U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
+ or U+0020 SPACE */
+ } elseif ($token['type'] === HTML5::CHARACTR &&
+ preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])
+ ) {
/* Append that character to the Document node. */
$text = $this->dom->createTextNode($token['data']);
$this->dom->appendChild($text);
- /* A character token that is not one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED
- (FF), or U+0020 SPACE
- A start tag token
- An end tag token
- An end-of-file token */
- } elseif(($token['type'] === HTML5::CHARACTR &&
- !preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) ||
- $token['type'] === HTML5::STARTTAG ||
- $token['type'] === HTML5::ENDTAG ||
- $token['type'] === HTML5::EOF) {
+ /* A character token that is not one of U+0009 CHARACTER TABULATION,
+ U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED
+ (FF), or U+0020 SPACE
+ A start tag token
+ An end tag token
+ An end-of-file token */
+ } elseif (($token['type'] === HTML5::CHARACTR &&
+ !preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) ||
+ $token['type'] === HTML5::STARTTAG ||
+ $token['type'] === HTML5::ENDTAG ||
+ $token['type'] === HTML5::EOF
+ ) {
/* Create an HTMLElement node with the tag name html, in the HTML
namespace. Append it to the Document object. Switch to the main
phase and reprocess the current token. */
@@ -1347,15 +1833,16 @@ class HTML5TreeConstructer {
}
}
- private function mainPhase($token) {
+ private function mainPhase($token)
+ {
/* Tokens in the main phase must be handled as follows: */
/* A DOCTYPE token */
- if($token['type'] === HTML5::DOCTYPE) {
+ if ($token['type'] === HTML5::DOCTYPE) {
// Parse error. Ignore the token.
- /* A start tag token with the tag name "html" */
- } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'html') {
+ /* A start tag token with the tag name "html" */
+ } elseif ($token['type'] === HTML5::STARTTAG && $token['name'] === 'html') {
/* If this start tag token was not the first start tag token, then
it is a parse error. */
@@ -1363,59 +1850,91 @@ class HTML5TreeConstructer {
is already present on the top element of the stack of open elements.
If it is not, add the attribute and its corresponding value to that
element. */
- foreach($token['attr'] as $attr) {
- if(!$this->stack[0]->hasAttribute($attr['name'])) {
+ foreach ($token['attr'] as $attr) {
+ if (!$this->stack[0]->hasAttribute($attr['name'])) {
$this->stack[0]->setAttribute($attr['name'], $attr['value']);
}
}
- /* An end-of-file token */
- } elseif($token['type'] === HTML5::EOF) {
+ /* An end-of-file token */
+ } elseif ($token['type'] === HTML5::EOF) {
/* Generate implied end tags. */
$this->generateImpliedEndTags();
- /* Anything else. */
+ /* Anything else. */
} else {
/* Depends on the insertion mode: */
- switch($this->mode) {
- case self::BEFOR_HEAD: return $this->beforeHead($token); break;
- case self::IN_HEAD: return $this->inHead($token); break;
- case self::AFTER_HEAD: return $this->afterHead($token); break;
- case self::IN_BODY: return $this->inBody($token); break;
- case self::IN_TABLE: return $this->inTable($token); break;
- case self::IN_CAPTION: return $this->inCaption($token); break;
- case self::IN_CGROUP: return $this->inColumnGroup($token); break;
- case self::IN_TBODY: return $this->inTableBody($token); break;
- case self::IN_ROW: return $this->inRow($token); break;
- case self::IN_CELL: return $this->inCell($token); break;
- case self::IN_SELECT: return $this->inSelect($token); break;
- case self::AFTER_BODY: return $this->afterBody($token); break;
- case self::IN_FRAME: return $this->inFrameset($token); break;
- case self::AFTR_FRAME: return $this->afterFrameset($token); break;
- case self::END_PHASE: return $this->trailingEndPhase($token); break;
+ switch ($this->mode) {
+ case self::BEFOR_HEAD:
+ return $this->beforeHead($token);
+ break;
+ case self::IN_HEAD:
+ return $this->inHead($token);
+ break;
+ case self::AFTER_HEAD:
+ return $this->afterHead($token);
+ break;
+ case self::IN_BODY:
+ return $this->inBody($token);
+ break;
+ case self::IN_TABLE:
+ return $this->inTable($token);
+ break;
+ case self::IN_CAPTION:
+ return $this->inCaption($token);
+ break;
+ case self::IN_CGROUP:
+ return $this->inColumnGroup($token);
+ break;
+ case self::IN_TBODY:
+ return $this->inTableBody($token);
+ break;
+ case self::IN_ROW:
+ return $this->inRow($token);
+ break;
+ case self::IN_CELL:
+ return $this->inCell($token);
+ break;
+ case self::IN_SELECT:
+ return $this->inSelect($token);
+ break;
+ case self::AFTER_BODY:
+ return $this->afterBody($token);
+ break;
+ case self::IN_FRAME:
+ return $this->inFrameset($token);
+ break;
+ case self::AFTR_FRAME:
+ return $this->afterFrameset($token);
+ break;
+ case self::END_PHASE:
+ return $this->trailingEndPhase($token);
+ break;
}
}
}
- private function beforeHead($token) {
+ private function beforeHead($token)
+ {
/* Handle the token as follows: */
/* A character token that is one of one of U+0009 CHARACTER TABULATION,
U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
or U+0020 SPACE */
- if($token['type'] === HTML5::CHARACTR &&
- preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) {
+ if ($token['type'] === HTML5::CHARACTR &&
+ preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])
+ ) {
/* Append the character to the current node. */
$this->insertText($token['data']);
- /* A comment token */
- } elseif($token['type'] === HTML5::COMMENT) {
+ /* A comment token */
+ } elseif ($token['type'] === HTML5::COMMENT) {
/* Append a Comment node to the current node with the data attribute
set to the data given in the comment token. */
$this->insertComment($token['data']);
- /* A start tag token with the tag name "head" */
- } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'head') {
+ /* A start tag token with the tag name "head" */
+ } elseif ($token['type'] === HTML5::STARTTAG && $token['name'] === 'head') {
/* Create an element for the token, append the new element to the
current node and push it onto the stack of open elements. */
$element = $this->insertElement($token);
@@ -1426,32 +1945,38 @@ class HTML5TreeConstructer {
/* Change the insertion mode to "in head". */
$this->mode = self::IN_HEAD;
- /* A start tag token whose tag name is one of: "base", "link", "meta",
- "script", "style", "title". Or an end tag with the tag name "html".
- Or a character token that is not one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE. Or any other start tag token */
- } elseif($token['type'] === HTML5::STARTTAG ||
- ($token['type'] === HTML5::ENDTAG && $token['name'] === 'html') ||
- ($token['type'] === HTML5::CHARACTR && !preg_match('/^[\t\n\x0b\x0c ]$/',
- $token['data']))) {
+ /* A start tag token whose tag name is one of: "base", "link", "meta",
+ "script", "style", "title". Or an end tag with the tag name "html".
+ Or a character token that is not one of U+0009 CHARACTER TABULATION,
+ U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
+ or U+0020 SPACE. Or any other start tag token */
+ } elseif ($token['type'] === HTML5::STARTTAG ||
+ ($token['type'] === HTML5::ENDTAG && $token['name'] === 'html') ||
+ ($token['type'] === HTML5::CHARACTR && !preg_match(
+ '/^[\t\n\x0b\x0c ]$/',
+ $token['data']
+ ))
+ ) {
/* Act as if a start tag token with the tag name "head" and no
attributes had been seen, then reprocess the current token. */
- $this->beforeHead(array(
- 'name' => 'head',
- 'type' => HTML5::STARTTAG,
- 'attr' => array()
- ));
+ $this->beforeHead(
+ array(
+ 'name' => 'head',
+ 'type' => HTML5::STARTTAG,
+ 'attr' => array()
+ )
+ );
return $this->inHead($token);
- /* Any other end tag */
- } elseif($token['type'] === HTML5::ENDTAG) {
+ /* Any other end tag */
+ } elseif ($token['type'] === HTML5::ENDTAG) {
/* Parse error. Ignore the token. */
}
}
- private function inHead($token) {
+ private function inHead($token)
+ {
/* Handle the token as follows: */
/* A character token that is one of one of U+0009 CHARACTER TABULATION,
@@ -1461,30 +1986,34 @@ class HTML5TreeConstructer {
THIS DIFFERS FROM THE SPEC: If the current node is either a title, style
or script element, append the character to the current node regardless
of its content. */
- if(($token['type'] === HTML5::CHARACTR &&
- preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) || (
- $token['type'] === HTML5::CHARACTR && in_array(end($this->stack)->nodeName,
- array('title', 'style', 'script')))) {
+ if (($token['type'] === HTML5::CHARACTR &&
+ preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) || (
+ $token['type'] === HTML5::CHARACTR && in_array(
+ end($this->stack)->nodeName,
+ array('title', 'style', 'script')
+ ))
+ ) {
/* Append the character to the current node. */
$this->insertText($token['data']);
- /* A comment token */
- } elseif($token['type'] === HTML5::COMMENT) {
+ /* A comment token */
+ } elseif ($token['type'] === HTML5::COMMENT) {
/* Append a Comment node to the current node with the data attribute
set to the data given in the comment token. */
$this->insertComment($token['data']);
- } elseif($token['type'] === HTML5::ENDTAG &&
- in_array($token['name'], array('title', 'style', 'script'))) {
+ } elseif ($token['type'] === HTML5::ENDTAG &&
+ in_array($token['name'], array('title', 'style', 'script'))
+ ) {
array_pop($this->stack);
return HTML5::PCDATA;
- /* A start tag with the tag name "title" */
- } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'title') {
+ /* A start tag with the tag name "title" */
+ } elseif ($token['type'] === HTML5::STARTTAG && $token['name'] === 'title') {
/* Create an element for the token and append the new element to the
node pointed to by the head element pointer, or, if that is null
(innerHTML case), to the current node. */
- if($this->head_pointer !== null) {
+ if ($this->head_pointer !== null) {
$element = $this->insertElement($token, false);
$this->head_pointer->appendChild($element);
@@ -1495,12 +2024,12 @@ class HTML5TreeConstructer {
/* Switch the tokeniser's content model flag to the RCDATA state. */
return HTML5::RCDATA;
- /* A start tag with the tag name "style" */
- } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'style') {
+ /* A start tag with the tag name "style" */
+ } elseif ($token['type'] === HTML5::STARTTAG && $token['name'] === 'style') {
/* Create an element for the token and append the new element to the
node pointed to by the head element pointer, or, if that is null
(innerHTML case), to the current node. */
- if($this->head_pointer !== null) {
+ if ($this->head_pointer !== null) {
$element = $this->insertElement($token, false);
$this->head_pointer->appendChild($element);
@@ -1511,8 +2040,8 @@ class HTML5TreeConstructer {
/* Switch the tokeniser's content model flag to the CDATA state. */
return HTML5::CDATA;
- /* A start tag with the tag name "script" */
- } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'script') {
+ /* A start tag with the tag name "script" */
+ } elseif ($token['type'] === HTML5::STARTTAG && $token['name'] === 'script') {
/* Create an element for the token. */
$element = $this->insertElement($token, false);
$this->head_pointer->appendChild($element);
@@ -1520,13 +2049,16 @@ class HTML5TreeConstructer {
/* Switch the tokeniser's content model flag to the CDATA state. */
return HTML5::CDATA;
- /* A start tag with the tag name "base", "link", or "meta" */
- } elseif($token['type'] === HTML5::STARTTAG && in_array($token['name'],
- array('base', 'link', 'meta'))) {
+ /* A start tag with the tag name "base", "link", or "meta" */
+ } elseif ($token['type'] === HTML5::STARTTAG && in_array(
+ $token['name'],
+ array('base', 'link', 'meta')
+ )
+ ) {
/* Create an element for the token and append the new element to the
node pointed to by the head element pointer, or, if that is null
(innerHTML case), to the current node. */
- if($this->head_pointer !== null) {
+ if ($this->head_pointer !== null) {
$element = $this->insertElement($token, false);
$this->head_pointer->appendChild($element);
array_pop($this->stack);
@@ -1535,14 +2067,14 @@ class HTML5TreeConstructer {
$this->insertElement($token);
}
- /* An end tag with the tag name "head" */
- } elseif($token['type'] === HTML5::ENDTAG && $token['name'] === 'head') {
+ /* An end tag with the tag name "head" */
+ } elseif ($token['type'] === HTML5::ENDTAG && $token['name'] === 'head') {
/* If the current node is a head element, pop the current node off
the stack of open elements. */
- if($this->head_pointer->isSameNode(end($this->stack))) {
+ if ($this->head_pointer->isSameNode(end($this->stack))) {
array_pop($this->stack);
- /* Otherwise, this is a parse error. */
+ /* Otherwise, this is a parse error. */
} else {
// k
}
@@ -1550,22 +2082,25 @@ class HTML5TreeConstructer {
/* Change the insertion mode to "after head". */
$this->mode = self::AFTER_HEAD;
- /* A start tag with the tag name "head" or an end tag except "html". */
- } elseif(($token['type'] === HTML5::STARTTAG && $token['name'] === 'head') ||
- ($token['type'] === HTML5::ENDTAG && $token['name'] !== 'html')) {
+ /* A start tag with the tag name "head" or an end tag except "html". */
+ } elseif (($token['type'] === HTML5::STARTTAG && $token['name'] === 'head') ||
+ ($token['type'] === HTML5::ENDTAG && $token['name'] !== 'html')
+ ) {
// Parse error. Ignore the token.
- /* Anything else */
+ /* Anything else */
} else {
/* If the current node is a head element, act as if an end tag
token with the tag name "head" had been seen. */
- if($this->head_pointer->isSameNode(end($this->stack))) {
- $this->inHead(array(
- 'name' => 'head',
- 'type' => HTML5::ENDTAG
- ));
+ if ($this->head_pointer->isSameNode(end($this->stack))) {
+ $this->inHead(
+ array(
+ 'name' => 'head',
+ 'type' => HTML5::ENDTAG
+ )
+ );
- /* Otherwise, change the insertion mode to "after head". */
+ /* Otherwise, change the insertion mode to "after head". */
} else {
$this->mode = self::AFTER_HEAD;
}
@@ -1575,66 +2110,74 @@ class HTML5TreeConstructer {
}
}
- private function afterHead($token) {
+ private function afterHead($token)
+ {
/* Handle the token as follows: */
/* A character token that is one of one of U+0009 CHARACTER TABULATION,
U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
or U+0020 SPACE */
- if($token['type'] === HTML5::CHARACTR &&
- preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) {
+ if ($token['type'] === HTML5::CHARACTR &&
+ preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])
+ ) {
/* Append the character to the current node. */
$this->insertText($token['data']);
- /* A comment token */
- } elseif($token['type'] === HTML5::COMMENT) {
+ /* A comment token */
+ } elseif ($token['type'] === HTML5::COMMENT) {
/* Append a Comment node to the current node with the data attribute
set to the data given in the comment token. */
$this->insertComment($token['data']);
- /* A start tag token with the tag name "body" */
- } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'body') {
+ /* A start tag token with the tag name "body" */
+ } elseif ($token['type'] === HTML5::STARTTAG && $token['name'] === 'body') {
/* Insert a body element for the token. */
$this->insertElement($token);
/* Change the insertion mode to "in body". */
$this->mode = self::IN_BODY;
- /* A start tag token with the tag name "frameset" */
- } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'frameset') {
+ /* A start tag token with the tag name "frameset" */
+ } elseif ($token['type'] === HTML5::STARTTAG && $token['name'] === 'frameset') {
/* Insert a frameset element for the token. */
$this->insertElement($token);
/* Change the insertion mode to "in frameset". */
$this->mode = self::IN_FRAME;
- /* A start tag token whose tag name is one of: "base", "link", "meta",
- "script", "style", "title" */
- } elseif($token['type'] === HTML5::STARTTAG && in_array($token['name'],
- array('base', 'link', 'meta', 'script', 'style', 'title'))) {
+ /* A start tag token whose tag name is one of: "base", "link", "meta",
+ "script", "style", "title" */
+ } elseif ($token['type'] === HTML5::STARTTAG && in_array(
+ $token['name'],
+ array('base', 'link', 'meta', 'script', 'style', 'title')
+ )
+ ) {
/* Parse error. Switch the insertion mode back to "in head" and
reprocess the token. */
$this->mode = self::IN_HEAD;
return $this->inHead($token);
- /* Anything else */
+ /* Anything else */
} else {
/* Act as if a start tag token with the tag name "body" and no
attributes had been seen, and then reprocess the current token. */
- $this->afterHead(array(
- 'name' => 'body',
- 'type' => HTML5::STARTTAG,
- 'attr' => array()
- ));
+ $this->afterHead(
+ array(
+ 'name' => 'body',
+ 'type' => HTML5::STARTTAG,
+ 'attr' => array()
+ )
+ );
return $this->inBody($token);
}
}
- private function inBody($token) {
+ private function inBody($token)
+ {
/* Handle the token as follows: */
- switch($token['type']) {
+ switch ($token['type']) {
/* A character token */
case HTML5::CHARACTR:
/* Reconstruct the active formatting elements, if any. */
@@ -1642,1015 +2185,1159 @@ class HTML5TreeConstructer {
/* Append the token's character to the current node. */
$this->insertText($token['data']);
- break;
+ break;
/* A comment token */
case HTML5::COMMENT:
/* Append a Comment node to the current node with the data
attribute set to the data given in the comment token. */
$this->insertComment($token['data']);
- break;
+ break;
case HTML5::STARTTAG:
- switch($token['name']) {
- /* A start tag token whose tag name is one of: "script",
- "style" */
- case 'script': case 'style':
- /* Process the token as if the insertion mode had been "in
- head". */
- return $this->inHead($token);
- break;
+ switch ($token['name']) {
+ /* A start tag token whose tag name is one of: "script",
+ "style" */
+ case 'script':
+ case 'style':
+ /* Process the token as if the insertion mode had been "in
+ head". */
+ return $this->inHead($token);
+ break;
- /* A start tag token whose tag name is one of: "base", "link",
- "meta", "title" */
- case 'base': case 'link': case 'meta': case 'title':
- /* Parse error. Process the token as if the insertion mode
- had been "in head". */
- return $this->inHead($token);
- break;
+ /* A start tag token whose tag name is one of: "base", "link",
+ "meta", "title" */
+ case 'base':
+ case 'link':
+ case 'meta':
+ case 'title':
+ /* Parse error. Process the token as if the insertion mode
+ had been "in head". */
+ return $this->inHead($token);
+ break;
- /* A start tag token with the tag name "body" */
- case 'body':
- /* Parse error. If the second element on the stack of open
- elements is not a body element, or, if the stack of open
- elements has only one node on it, then ignore the token.
- (innerHTML case) */
- if(count($this->stack) === 1 || $this->stack[1]->nodeName !== 'body') {
- // Ignore
-
- /* Otherwise, for each attribute on the token, check to see
- if the attribute is already present on the body element (the
- second element) on the stack of open elements. If it is not,
- add the attribute and its corresponding value to that
- element. */
- } else {
- foreach($token['attr'] as $attr) {
- if(!$this->stack[1]->hasAttribute($attr['name'])) {
- $this->stack[1]->setAttribute($attr['name'], $attr['value']);
+ /* A start tag token with the tag name "body" */
+ case 'body':
+ /* Parse error. If the second element on the stack of open
+ elements is not a body element, or, if the stack of open
+ elements has only one node on it, then ignore the token.
+ (innerHTML case) */
+ if (count($this->stack) === 1 || $this->stack[1]->nodeName !== 'body') {
+ // Ignore
+
+ /* Otherwise, for each attribute on the token, check to see
+ if the attribute is already present on the body element (the
+ second element) on the stack of open elements. If it is not,
+ add the attribute and its corresponding value to that
+ element. */
+ } else {
+ foreach ($token['attr'] as $attr) {
+ if (!$this->stack[1]->hasAttribute($attr['name'])) {
+ $this->stack[1]->setAttribute($attr['name'], $attr['value']);
+ }
}
}
- }
- break;
-
- /* A start tag whose tag name is one of: "address",
- "blockquote", "center", "dir", "div", "dl", "fieldset",
- "listing", "menu", "ol", "p", "ul" */
- case 'address': case 'blockquote': case 'center': case 'dir':
- case 'div': case 'dl': case 'fieldset': case 'listing':
- case 'menu': case 'ol': case 'p': case 'ul':
- /* If the stack of open elements has a p element in scope,
- then act as if an end tag with the tag name p had been
- seen. */
- if($this->elementInScope('p')) {
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5::ENDTAG
- ));
- }
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
- break;
+ break;
- /* A start tag whose tag name is "form" */
- case 'form':
- /* If the form element pointer is not null, ignore the
- token with a parse error. */
- if($this->form_pointer !== null) {
- // Ignore.
-
- /* Otherwise: */
- } else {
- /* If the stack of open elements has a p element in
- scope, then act as if an end tag with the tag name p
- had been seen. */
- if($this->elementInScope('p')) {
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5::ENDTAG
- ));
+ /* A start tag whose tag name is one of: "address",
+ "blockquote", "center", "dir", "div", "dl", "fieldset",
+ "listing", "menu", "ol", "p", "ul" */
+ case 'address':
+ case 'blockquote':
+ case 'center':
+ case 'dir':
+ case 'div':
+ case 'dl':
+ case 'fieldset':
+ case 'listing':
+ case 'menu':
+ case 'ol':
+ case 'p':
+ case 'ul':
+ /* If the stack of open elements has a p element in scope,
+ then act as if an end tag with the tag name p had been
+ seen. */
+ if ($this->elementInScope('p')) {
+ $this->emitToken(
+ array(
+ 'name' => 'p',
+ 'type' => HTML5::ENDTAG
+ )
+ );
}
- /* Insert an HTML element for the token, and set the
- form element pointer to point to the element created. */
- $element = $this->insertElement($token);
- $this->form_pointer = $element;
- }
- break;
+ /* Insert an HTML element for the token. */
+ $this->insertElement($token);
+ break;
- /* A start tag whose tag name is "li", "dd" or "dt" */
- case 'li': case 'dd': case 'dt':
- /* If the stack of open elements has a p element in scope,
- then act as if an end tag with the tag name p had been
- seen. */
- if($this->elementInScope('p')) {
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5::ENDTAG
- ));
- }
+ /* A start tag whose tag name is "form" */
+ case 'form':
+ /* If the form element pointer is not null, ignore the
+ token with a parse error. */
+ if ($this->form_pointer !== null) {
+ // Ignore.
- $stack_length = count($this->stack) - 1;
-
- for($n = $stack_length; 0 <= $n; $n--) {
- /* 1. Initialise node to be the current node (the
- bottommost node of the stack). */
- $stop = false;
- $node = $this->stack[$n];
- $cat = $this->getElementCategory($node->tagName);
-
- /* 2. If node is an li, dd or dt element, then pop all
- the nodes from the current node up to node, including
- node, then stop this algorithm. */
- if($token['name'] === $node->tagName || ($token['name'] !== 'li'
- && ($node->tagName === 'dd' || $node->tagName === 'dt'))) {
- for($x = $stack_length; $x >= $n ; $x--) {
- array_pop($this->stack);
+ /* Otherwise: */
+ } else {
+ /* If the stack of open elements has a p element in
+ scope, then act as if an end tag with the tag name p
+ had been seen. */
+ if ($this->elementInScope('p')) {
+ $this->emitToken(
+ array(
+ 'name' => 'p',
+ 'type' => HTML5::ENDTAG
+ )
+ );
}
- break;
+ /* Insert an HTML element for the token, and set the
+ form element pointer to point to the element created. */
+ $element = $this->insertElement($token);
+ $this->form_pointer = $element;
}
+ break;
- /* 3. If node is not in the formatting category, and is
- not in the phrasing category, and is not an address or
- div element, then stop this algorithm. */
- if($cat !== self::FORMATTING && $cat !== self::PHRASING &&
- $node->tagName !== 'address' && $node->tagName !== 'div') {
- break;
+ /* A start tag whose tag name is "li", "dd" or "dt" */
+ case 'li':
+ case 'dd':
+ case 'dt':
+ /* If the stack of open elements has a p element in scope,
+ then act as if an end tag with the tag name p had been
+ seen. */
+ if ($this->elementInScope('p')) {
+ $this->emitToken(
+ array(
+ 'name' => 'p',
+ 'type' => HTML5::ENDTAG
+ )
+ );
}
- }
- /* Finally, insert an HTML element with the same tag
- name as the token's. */
- $this->insertElement($token);
- break;
+ $stack_length = count($this->stack) - 1;
+
+ for ($n = $stack_length; 0 <= $n; $n--) {
+ /* 1. Initialise node to be the current node (the
+ bottommost node of the stack). */
+ $stop = false;
+ $node = $this->stack[$n];
+ $cat = $this->getElementCategory($node->tagName);
+
+ /* 2. If node is an li, dd or dt element, then pop all
+ the nodes from the current node up to node, including
+ node, then stop this algorithm. */
+ if ($token['name'] === $node->tagName || ($token['name'] !== 'li'
+ && ($node->tagName === 'dd' || $node->tagName === 'dt'))
+ ) {
+ for ($x = $stack_length; $x >= $n; $x--) {
+ array_pop($this->stack);
+ }
- /* A start tag token whose tag name is "plaintext" */
- case 'plaintext':
- /* If the stack of open elements has a p element in scope,
- then act as if an end tag with the tag name p had been
- seen. */
- if($this->elementInScope('p')) {
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5::ENDTAG
- ));
- }
+ break;
+ }
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
+ /* 3. If node is not in the formatting category, and is
+ not in the phrasing category, and is not an address or
+ div element, then stop this algorithm. */
+ if ($cat !== self::FORMATTING && $cat !== self::PHRASING &&
+ $node->tagName !== 'address' && $node->tagName !== 'div'
+ ) {
+ break;
+ }
+ }
- return HTML5::PLAINTEXT;
- break;
+ /* Finally, insert an HTML element with the same tag
+ name as the token's. */
+ $this->insertElement($token);
+ break;
- /* A start tag whose tag name is one of: "h1", "h2", "h3", "h4",
- "h5", "h6" */
- case 'h1': case 'h2': case 'h3': case 'h4': case 'h5': case 'h6':
- /* If the stack of open elements has a p element in scope,
- then act as if an end tag with the tag name p had been seen. */
- if($this->elementInScope('p')) {
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5::ENDTAG
- ));
- }
+ /* A start tag token whose tag name is "plaintext" */
+ case 'plaintext':
+ /* If the stack of open elements has a p element in scope,
+ then act as if an end tag with the tag name p had been
+ seen. */
+ if ($this->elementInScope('p')) {
+ $this->emitToken(
+ array(
+ 'name' => 'p',
+ 'type' => HTML5::ENDTAG
+ )
+ );
+ }
- /* If the stack of open elements has in scope an element whose
- tag name is one of "h1", "h2", "h3", "h4", "h5", or "h6", then
- this is a parse error; pop elements from the stack until an
- element with one of those tag names has been popped from the
- stack. */
- while($this->elementInScope(array('h1', 'h2', 'h3', 'h4', 'h5', 'h6'))) {
- array_pop($this->stack);
- }
+ /* Insert an HTML element for the token. */
+ $this->insertElement($token);
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
- break;
+ return HTML5::PLAINTEXT;
+ break;
- /* A start tag whose tag name is "a" */
- case 'a':
- /* If the list of active formatting elements contains
- an element whose tag name is "a" between the end of the
- list and the last marker on the list (or the start of
- the list if there is no marker on the list), then this
- is a parse error; act as if an end tag with the tag name
- "a" had been seen, then remove that element from the list
- of active formatting elements and the stack of open
- elements if the end tag didn't already remove it (it
- might not have if the element is not in table scope). */
- $leng = count($this->a_formatting);
-
- for($n = $leng - 1; $n >= 0; $n--) {
- if($this->a_formatting[$n] === self::MARKER) {
- break;
-
- } elseif($this->a_formatting[$n]->nodeName === 'a') {
- $this->emitToken(array(
- 'name' => 'a',
- 'type' => HTML5::ENDTAG
- ));
- break;
+ /* A start tag whose tag name is one of: "h1", "h2", "h3", "h4",
+ "h5", "h6" */
+ case 'h1':
+ case 'h2':
+ case 'h3':
+ case 'h4':
+ case 'h5':
+ case 'h6':
+ /* If the stack of open elements has a p element in scope,
+ then act as if an end tag with the tag name p had been seen. */
+ if ($this->elementInScope('p')) {
+ $this->emitToken(
+ array(
+ 'name' => 'p',
+ 'type' => HTML5::ENDTAG
+ )
+ );
}
- }
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
+ /* If the stack of open elements has in scope an element whose
+ tag name is one of "h1", "h2", "h3", "h4", "h5", or "h6", then
+ this is a parse error; pop elements from the stack until an
+ element with one of those tag names has been popped from the
+ stack. */
+ while ($this->elementInScope(array('h1', 'h2', 'h3', 'h4', 'h5', 'h6'))) {
+ array_pop($this->stack);
+ }
- /* Insert an HTML element for the token. */
- $el = $this->insertElement($token);
+ /* Insert an HTML element for the token. */
+ $this->insertElement($token);
+ break;
- /* Add that element to the list of active formatting
- elements. */
- $this->a_formatting[] = $el;
- break;
+ /* A start tag whose tag name is "a" */
+ case 'a':
+ /* If the list of active formatting elements contains
+ an element whose tag name is "a" between the end of the
+ list and the last marker on the list (or the start of
+ the list if there is no marker on the list), then this
+ is a parse error; act as if an end tag with the tag name
+ "a" had been seen, then remove that element from the list
+ of active formatting elements and the stack of open
+ elements if the end tag didn't already remove it (it
+ might not have if the element is not in table scope). */
+ $leng = count($this->a_formatting);
+
+ for ($n = $leng - 1; $n >= 0; $n--) {
+ if ($this->a_formatting[$n] === self::MARKER) {
+ break;
- /* A start tag whose tag name is one of: "b", "big", "em", "font",
- "i", "nobr", "s", "small", "strike", "strong", "tt", "u" */
- case 'b': case 'big': case 'em': case 'font': case 'i':
- case 'nobr': case 's': case 'small': case 'strike':
- case 'strong': case 'tt': case 'u':
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
+ } elseif ($this->a_formatting[$n]->nodeName === 'a') {
+ $this->emitToken(
+ array(
+ 'name' => 'a',
+ 'type' => HTML5::ENDTAG
+ )
+ );
+ break;
+ }
+ }
- /* Insert an HTML element for the token. */
- $el = $this->insertElement($token);
+ /* Reconstruct the active formatting elements, if any. */
+ $this->reconstructActiveFormattingElements();
- /* Add that element to the list of active formatting
- elements. */
- $this->a_formatting[] = $el;
- break;
+ /* Insert an HTML element for the token. */
+ $el = $this->insertElement($token);
- /* A start tag token whose tag name is "button" */
- case 'button':
- /* If the stack of open elements has a button element in scope,
- then this is a parse error; act as if an end tag with the tag
- name "button" had been seen, then reprocess the token. (We don't
- do that. Unnecessary.) */
- if($this->elementInScope('button')) {
- $this->inBody(array(
- 'name' => 'button',
- 'type' => HTML5::ENDTAG
- ));
- }
+ /* Add that element to the list of active formatting
+ elements. */
+ $this->a_formatting[] = $el;
+ break;
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
+ /* A start tag whose tag name is one of: "b", "big", "em", "font",
+ "i", "nobr", "s", "small", "strike", "strong", "tt", "u" */
+ case 'b':
+ case 'big':
+ case 'em':
+ case 'font':
+ case 'i':
+ case 'nobr':
+ case 's':
+ case 'small':
+ case 'strike':
+ case 'strong':
+ case 'tt':
+ case 'u':
+ /* Reconstruct the active formatting elements, if any. */
+ $this->reconstructActiveFormattingElements();
+
+ /* Insert an HTML element for the token. */
+ $el = $this->insertElement($token);
+
+ /* Add that element to the list of active formatting
+ elements. */
+ $this->a_formatting[] = $el;
+ break;
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
+ /* A start tag token whose tag name is "button" */
+ case 'button':
+ /* If the stack of open elements has a button element in scope,
+ then this is a parse error; act as if an end tag with the tag
+ name "button" had been seen, then reprocess the token. (We don't
+ do that. Unnecessary.) */
+ if ($this->elementInScope('button')) {
+ $this->inBody(
+ array(
+ 'name' => 'button',
+ 'type' => HTML5::ENDTAG
+ )
+ );
+ }
- /* Insert a marker at the end of the list of active
- formatting elements. */
- $this->a_formatting[] = self::MARKER;
- break;
+ /* Reconstruct the active formatting elements, if any. */
+ $this->reconstructActiveFormattingElements();
- /* A start tag token whose tag name is one of: "marquee", "object" */
- case 'marquee': case 'object':
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
+ /* Insert an HTML element for the token. */
+ $this->insertElement($token);
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
+ /* Insert a marker at the end of the list of active
+ formatting elements. */
+ $this->a_formatting[] = self::MARKER;
+ break;
- /* Insert a marker at the end of the list of active
- formatting elements. */
- $this->a_formatting[] = self::MARKER;
- break;
+ /* A start tag token whose tag name is one of: "marquee", "object" */
+ case 'marquee':
+ case 'object':
+ /* Reconstruct the active formatting elements, if any. */
+ $this->reconstructActiveFormattingElements();
- /* A start tag token whose tag name is "xmp" */
- case 'xmp':
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
+ /* Insert an HTML element for the token. */
+ $this->insertElement($token);
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
+ /* Insert a marker at the end of the list of active
+ formatting elements. */
+ $this->a_formatting[] = self::MARKER;
+ break;
- /* Switch the content model flag to the CDATA state. */
- return HTML5::CDATA;
- break;
+ /* A start tag token whose tag name is "xmp" */
+ case 'xmp':
+ /* Reconstruct the active formatting elements, if any. */
+ $this->reconstructActiveFormattingElements();
- /* A start tag whose tag name is "table" */
- case 'table':
- /* If the stack of open elements has a p element in scope,
- then act as if an end tag with the tag name p had been seen. */
- if($this->elementInScope('p')) {
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5::ENDTAG
- ));
- }
+ /* Insert an HTML element for the token. */
+ $this->insertElement($token);
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
+ /* Switch the content model flag to the CDATA state. */
+ return HTML5::CDATA;
+ break;
- /* Change the insertion mode to "in table". */
- $this->mode = self::IN_TABLE;
- break;
+ /* A start tag whose tag name is "table" */
+ case 'table':
+ /* If the stack of open elements has a p element in scope,
+ then act as if an end tag with the tag name p had been seen. */
+ if ($this->elementInScope('p')) {
+ $this->emitToken(
+ array(
+ 'name' => 'p',
+ 'type' => HTML5::ENDTAG
+ )
+ );
+ }
- /* A start tag whose tag name is one of: "area", "basefont",
- "bgsound", "br", "embed", "img", "param", "spacer", "wbr" */
- case 'area': case 'basefont': case 'bgsound': case 'br':
- case 'embed': case 'img': case 'param': case 'spacer':
- case 'wbr':
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
+ /* Insert an HTML element for the token. */
+ $this->insertElement($token);
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
+ /* Change the insertion mode to "in table". */
+ $this->mode = self::IN_TABLE;
+ break;
- /* Immediately pop the current node off the stack of open elements. */
- array_pop($this->stack);
- break;
+ /* A start tag whose tag name is one of: "area", "basefont",
+ "bgsound", "br", "embed", "img", "param", "spacer", "wbr" */
+ case 'area':
+ case 'basefont':
+ case 'bgsound':
+ case 'br':
+ case 'embed':
+ case 'img':
+ case 'param':
+ case 'spacer':
+ case 'wbr':
+ /* Reconstruct the active formatting elements, if any. */
+ $this->reconstructActiveFormattingElements();
+
+ /* Insert an HTML element for the token. */
+ $this->insertElement($token);
+
+ /* Immediately pop the current node off the stack of open elements. */
+ array_pop($this->stack);
+ break;
- /* A start tag whose tag name is "hr" */
- case 'hr':
- /* If the stack of open elements has a p element in scope,
- then act as if an end tag with the tag name p had been seen. */
- if($this->elementInScope('p')) {
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5::ENDTAG
- ));
- }
+ /* A start tag whose tag name is "hr" */
+ case 'hr':
+ /* If the stack of open elements has a p element in scope,
+ then act as if an end tag with the tag name p had been seen. */
+ if ($this->elementInScope('p')) {
+ $this->emitToken(
+ array(
+ 'name' => 'p',
+ 'type' => HTML5::ENDTAG
+ )
+ );
+ }
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
+ /* Insert an HTML element for the token. */
+ $this->insertElement($token);
- /* Immediately pop the current node off the stack of open elements. */
- array_pop($this->stack);
- break;
+ /* Immediately pop the current node off the stack of open elements. */
+ array_pop($this->stack);
+ break;
- /* A start tag whose tag name is "image" */
- case 'image':
- /* Parse error. Change the token's tag name to "img" and
- reprocess it. (Don't ask.) */
- $token['name'] = 'img';
- return $this->inBody($token);
- break;
+ /* A start tag whose tag name is "image" */
+ case 'image':
+ /* Parse error. Change the token's tag name to "img" and
+ reprocess it. (Don't ask.) */
+ $token['name'] = 'img';
+ return $this->inBody($token);
+ break;
- /* A start tag whose tag name is "input" */
- case 'input':
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
+ /* A start tag whose tag name is "input" */
+ case 'input':
+ /* Reconstruct the active formatting elements, if any. */
+ $this->reconstructActiveFormattingElements();
- /* Insert an input element for the token. */
- $element = $this->insertElement($token, false);
+ /* Insert an input element for the token. */
+ $element = $this->insertElement($token, false);
- /* If the form element pointer is not null, then associate the
- input element with the form element pointed to by the form
- element pointer. */
- $this->form_pointer !== null
- ? $this->form_pointer->appendChild($element)
- : end($this->stack)->appendChild($element);
+ /* If the form element pointer is not null, then associate the
+ input element with the form element pointed to by the form
+ element pointer. */
+ $this->form_pointer !== null
+ ? $this->form_pointer->appendChild($element)
+ : end($this->stack)->appendChild($element);
- /* Pop that input element off the stack of open elements. */
- array_pop($this->stack);
- break;
+ /* Pop that input element off the stack of open elements. */
+ array_pop($this->stack);
+ break;
- /* A start tag whose tag name is "isindex" */
- case 'isindex':
- /* Parse error. */
- // w/e
-
- /* If the form element pointer is not null,
- then ignore the token. */
- if($this->form_pointer === null) {
- /* Act as if a start tag token with the tag name "form" had
- been seen. */
- $this->inBody(array(
- 'name' => 'body',
- 'type' => HTML5::STARTTAG,
- 'attr' => array()
- ));
-
- /* Act as if a start tag token with the tag name "hr" had
- been seen. */
- $this->inBody(array(
- 'name' => 'hr',
- 'type' => HTML5::STARTTAG,
- 'attr' => array()
- ));
-
- /* Act as if a start tag token with the tag name "p" had
- been seen. */
- $this->inBody(array(
- 'name' => 'p',
- 'type' => HTML5::STARTTAG,
- 'attr' => array()
- ));
-
- /* Act as if a start tag token with the tag name "label"
- had been seen. */
- $this->inBody(array(
- 'name' => 'label',
- 'type' => HTML5::STARTTAG,
- 'attr' => array()
- ));
-
- /* Act as if a stream of character tokens had been seen. */
- $this->insertText('This is a searchable index. '.
- 'Insert your search keywords here: ');
-
- /* Act as if a start tag token with the tag name "input"
- had been seen, with all the attributes from the "isindex"
- token, except with the "name" attribute set to the value
- "isindex" (ignoring any explicit "name" attribute). */
- $attr = $token['attr'];
- $attr[] = array('name' => 'name', 'value' => 'isindex');
-
- $this->inBody(array(
- 'name' => 'input',
- 'type' => HTML5::STARTTAG,
- 'attr' => $attr
- ));
-
- /* Act as if a stream of character tokens had been seen
- (see below for what they should say). */
- $this->insertText('This is a searchable index. '.
- 'Insert your search keywords here: ');
-
- /* Act as if an end tag token with the tag name "label"
- had been seen. */
- $this->inBody(array(
- 'name' => 'label',
- 'type' => HTML5::ENDTAG
- ));
-
- /* Act as if an end tag token with the tag name "p" had
- been seen. */
- $this->inBody(array(
- 'name' => 'p',
- 'type' => HTML5::ENDTAG
- ));
-
- /* Act as if a start tag token with the tag name "hr" had
- been seen. */
- $this->inBody(array(
- 'name' => 'hr',
- 'type' => HTML5::ENDTAG
- ));
-
- /* Act as if an end tag token with the tag name "form" had
- been seen. */
- $this->inBody(array(
- 'name' => 'form',
- 'type' => HTML5::ENDTAG
- ));
- }
- break;
+ /* A start tag whose tag name is "isindex" */
+ case 'isindex':
+ /* Parse error. */
+ // w/e
- /* A start tag whose tag name is "textarea" */
- case 'textarea':
- $this->insertElement($token);
+ /* If the form element pointer is not null,
+ then ignore the token. */
+ if ($this->form_pointer === null) {
+ /* Act as if a start tag token with the tag name "form" had
+ been seen. */
+ $this->inBody(
+ array(
+ 'name' => 'body',
+ 'type' => HTML5::STARTTAG,
+ 'attr' => array()
+ )
+ );
+
+ /* Act as if a start tag token with the tag name "hr" had
+ been seen. */
+ $this->inBody(
+ array(
+ 'name' => 'hr',
+ 'type' => HTML5::STARTTAG,
+ 'attr' => array()
+ )
+ );
+
+ /* Act as if a start tag token with the tag name "p" had
+ been seen. */
+ $this->inBody(
+ array(
+ 'name' => 'p',
+ 'type' => HTML5::STARTTAG,
+ 'attr' => array()
+ )
+ );
+
+ /* Act as if a start tag token with the tag name "label"
+ had been seen. */
+ $this->inBody(
+ array(
+ 'name' => 'label',
+ 'type' => HTML5::STARTTAG,
+ 'attr' => array()
+ )
+ );
+
+ /* Act as if a stream of character tokens had been seen. */
+ $this->insertText(
+ 'This is a searchable index. ' .
+ 'Insert your search keywords here: '
+ );
+
+ /* Act as if a start tag token with the tag name "input"
+ had been seen, with all the attributes from the "isindex"
+ token, except with the "name" attribute set to the value
+ "isindex" (ignoring any explicit "name" attribute). */
+ $attr = $token['attr'];
+ $attr[] = array('name' => 'name', 'value' => 'isindex');
+
+ $this->inBody(
+ array(
+ 'name' => 'input',
+ 'type' => HTML5::STARTTAG,
+ 'attr' => $attr
+ )
+ );
+
+ /* Act as if a stream of character tokens had been seen
+ (see below for what they should say). */
+ $this->insertText(
+ 'This is a searchable index. ' .
+ 'Insert your search keywords here: '
+ );
+
+ /* Act as if an end tag token with the tag name "label"
+ had been seen. */
+ $this->inBody(
+ array(
+ 'name' => 'label',
+ 'type' => HTML5::ENDTAG
+ )
+ );
+
+ /* Act as if an end tag token with the tag name "p" had
+ been seen. */
+ $this->inBody(
+ array(
+ 'name' => 'p',
+ 'type' => HTML5::ENDTAG
+ )
+ );
+
+ /* Act as if a start tag token with the tag name "hr" had
+ been seen. */
+ $this->inBody(
+ array(
+ 'name' => 'hr',
+ 'type' => HTML5::ENDTAG
+ )
+ );
+
+ /* Act as if an end tag token with the tag name "form" had
+ been seen. */
+ $this->inBody(
+ array(
+ 'name' => 'form',
+ 'type' => HTML5::ENDTAG
+ )
+ );
+ }
+ break;
- /* Switch the tokeniser's content model flag to the
- RCDATA state. */
- return HTML5::RCDATA;
- break;
+ /* A start tag whose tag name is "textarea" */
+ case 'textarea':
+ $this->insertElement($token);
- /* A start tag whose tag name is one of: "iframe", "noembed",
- "noframes" */
- case 'iframe': case 'noembed': case 'noframes':
- $this->insertElement($token);
+ /* Switch the tokeniser's content model flag to the
+ RCDATA state. */
+ return HTML5::RCDATA;
+ break;
- /* Switch the tokeniser's content model flag to the CDATA state. */
- return HTML5::CDATA;
- break;
+ /* A start tag whose tag name is one of: "iframe", "noembed",
+ "noframes" */
+ case 'iframe':
+ case 'noembed':
+ case 'noframes':
+ $this->insertElement($token);
- /* A start tag whose tag name is "select" */
- case 'select':
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
+ /* Switch the tokeniser's content model flag to the CDATA state. */
+ return HTML5::CDATA;
+ break;
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
+ /* A start tag whose tag name is "select" */
+ case 'select':
+ /* Reconstruct the active formatting elements, if any. */
+ $this->reconstructActiveFormattingElements();
- /* Change the insertion mode to "in select". */
- $this->mode = self::IN_SELECT;
- break;
+ /* Insert an HTML element for the token. */
+ $this->insertElement($token);
- /* A start or end tag whose tag name is one of: "caption", "col",
- "colgroup", "frame", "frameset", "head", "option", "optgroup",
- "tbody", "td", "tfoot", "th", "thead", "tr". */
- case 'caption': case 'col': case 'colgroup': case 'frame':
- case 'frameset': case 'head': case 'option': case 'optgroup':
- case 'tbody': case 'td': case 'tfoot': case 'th': case 'thead':
- case 'tr':
- // Parse error. Ignore the token.
- break;
+ /* Change the insertion mode to "in select". */
+ $this->mode = self::IN_SELECT;
+ break;
- /* A start or end tag whose tag name is one of: "event-source",
- "section", "nav", "article", "aside", "header", "footer",
- "datagrid", "command" */
- case 'event-source': case 'section': case 'nav': case 'article':
- case 'aside': case 'header': case 'footer': case 'datagrid':
- case 'command':
- // Work in progress!
- break;
+ /* A start or end tag whose tag name is one of: "caption", "col",
+ "colgroup", "frame", "frameset", "head", "option", "optgroup",
+ "tbody", "td", "tfoot", "th", "thead", "tr". */
+ case 'caption':
+ case 'col':
+ case 'colgroup':
+ case 'frame':
+ case 'frameset':
+ case 'head':
+ case 'option':
+ case 'optgroup':
+ case 'tbody':
+ case 'td':
+ case 'tfoot':
+ case 'th':
+ case 'thead':
+ case 'tr':
+ // Parse error. Ignore the token.
+ break;
- /* A start tag token not covered by the previous entries */
- default:
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
+ /* A start or end tag whose tag name is one of: "event-source",
+ "section", "nav", "article", "aside", "header", "footer",
+ "datagrid", "command" */
+ case 'event-source':
+ case 'section':
+ case 'nav':
+ case 'article':
+ case 'aside':
+ case 'header':
+ case 'footer':
+ case 'datagrid':
+ case 'command':
+ // Work in progress!
+ break;
+
+ /* A start tag token not covered by the previous entries */
+ default:
+ /* Reconstruct the active formatting elements, if any. */
+ $this->reconstructActiveFormattingElements();
- $this->insertElement($token, true, true);
+ $this->insertElement($token, true, true);
+ break;
+ }
break;
- }
- break;
case HTML5::ENDTAG:
- switch($token['name']) {
- /* An end tag with the tag name "body" */
- case 'body':
- /* If the second element in the stack of open elements is
- not a body element, this is a parse error. Ignore the token.
- (innerHTML case) */
- if(count($this->stack) < 2 || $this->stack[1]->nodeName !== 'body') {
- // Ignore.
-
- /* If the current node is not the body element, then this
- is a parse error. */
- } elseif(end($this->stack)->nodeName !== 'body') {
- // Parse error.
- }
+ switch ($token['name']) {
+ /* An end tag with the tag name "body" */
+ case 'body':
+ /* If the second element in the stack of open elements is
+ not a body element, this is a parse error. Ignore the token.
+ (innerHTML case) */
+ if (count($this->stack) < 2 || $this->stack[1]->nodeName !== 'body') {
+ // Ignore.
+
+ /* If the current node is not the body element, then this
+ is a parse error. */
+ } elseif (end($this->stack)->nodeName !== 'body') {
+ // Parse error.
+ }
- /* Change the insertion mode to "after body". */
- $this->mode = self::AFTER_BODY;
- break;
+ /* Change the insertion mode to "after body". */
+ $this->mode = self::AFTER_BODY;
+ break;
- /* An end tag with the tag name "html" */
- case 'html':
- /* Act as if an end tag with tag name "body" had been seen,
- then, if that token wasn't ignored, reprocess the current
- token. */
- $this->inBody(array(
- 'name' => 'body',
- 'type' => HTML5::ENDTAG
- ));
+ /* An end tag with the tag name "html" */
+ case 'html':
+ /* Act as if an end tag with tag name "body" had been seen,
+ then, if that token wasn't ignored, reprocess the current
+ token. */
+ $this->inBody(
+ array(
+ 'name' => 'body',
+ 'type' => HTML5::ENDTAG
+ )
+ );
- return $this->afterBody($token);
- break;
+ return $this->afterBody($token);
+ break;
- /* An end tag whose tag name is one of: "address", "blockquote",
- "center", "dir", "div", "dl", "fieldset", "listing", "menu",
- "ol", "pre", "ul" */
- case 'address': case 'blockquote': case 'center': case 'dir':
- case 'div': case 'dl': case 'fieldset': case 'listing':
- case 'menu': case 'ol': case 'pre': case 'ul':
- /* If the stack of open elements has an element in scope
- with the same tag name as that of the token, then generate
- implied end tags. */
- if($this->elementInScope($token['name'])) {
- $this->generateImpliedEndTags();
-
- /* Now, if the current node is not an element with
- the same tag name as that of the token, then this
- is a parse error. */
- // w/e
+ /* An end tag whose tag name is one of: "address", "blockquote",
+ "center", "dir", "div", "dl", "fieldset", "listing", "menu",
+ "ol", "pre", "ul" */
+ case 'address':
+ case 'blockquote':
+ case 'center':
+ case 'dir':
+ case 'div':
+ case 'dl':
+ case 'fieldset':
+ case 'listing':
+ case 'menu':
+ case 'ol':
+ case 'pre':
+ case 'ul':
+ /* If the stack of open elements has an element in scope
+ with the same tag name as that of the token, then generate
+ implied end tags. */
+ if ($this->elementInScope($token['name'])) {
+ $this->generateImpliedEndTags();
- /* If the stack of open elements has an element in
- scope with the same tag name as that of the token,
- then pop elements from this stack until an element
- with that tag name has been popped from the stack. */
- for($n = count($this->stack) - 1; $n >= 0; $n--) {
- if($this->stack[$n]->nodeName === $token['name']) {
- $n = -1;
+ /* Now, if the current node is not an element with
+ the same tag name as that of the token, then this
+ is a parse error. */
+ // w/e
+
+ /* If the stack of open elements has an element in
+ scope with the same tag name as that of the token,
+ then pop elements from this stack until an element
+ with that tag name has been popped from the stack. */
+ for ($n = count($this->stack) - 1; $n >= 0; $n--) {
+ if ($this->stack[$n]->nodeName === $token['name']) {
+ $n = -1;
+ }
+
+ array_pop($this->stack);
}
+ }
+ break;
+
+ /* An end tag whose tag name is "form" */
+ case 'form':
+ /* If the stack of open elements has an element in scope
+ with the same tag name as that of the token, then generate
+ implied end tags. */
+ if ($this->elementInScope($token['name'])) {
+ $this->generateImpliedEndTags();
- array_pop($this->stack);
}
- }
- break;
- /* An end tag whose tag name is "form" */
- case 'form':
- /* If the stack of open elements has an element in scope
- with the same tag name as that of the token, then generate
- implied end tags. */
- if($this->elementInScope($token['name'])) {
- $this->generateImpliedEndTags();
+ if (end($this->stack)->nodeName !== $token['name']) {
+ /* Now, if the current node is not an element with the
+ same tag name as that of the token, then this is a parse
+ error. */
+ // w/e
- }
+ } else {
+ /* Otherwise, if the current node is an element with
+ the same tag name as that of the token pop that element
+ from the stack. */
+ array_pop($this->stack);
+ }
- if(end($this->stack)->nodeName !== $token['name']) {
- /* Now, if the current node is not an element with the
- same tag name as that of the token, then this is a parse
- error. */
- // w/e
+ /* In any case, set the form element pointer to null. */
+ $this->form_pointer = null;
+ break;
- } else {
- /* Otherwise, if the current node is an element with
- the same tag name as that of the token pop that element
- from the stack. */
- array_pop($this->stack);
- }
+ /* An end tag whose tag name is "p" */
+ case 'p':
+ /* If the stack of open elements has a p element in scope,
+ then generate implied end tags, except for p elements. */
+ if ($this->elementInScope('p')) {
+ $this->generateImpliedEndTags(array('p'));
- /* In any case, set the form element pointer to null. */
- $this->form_pointer = null;
- break;
+ /* If the current node is not a p element, then this is
+ a parse error. */
+ // k
- /* An end tag whose tag name is "p" */
- case 'p':
- /* If the stack of open elements has a p element in scope,
- then generate implied end tags, except for p elements. */
- if($this->elementInScope('p')) {
- $this->generateImpliedEndTags(array('p'));
-
- /* If the current node is not a p element, then this is
- a parse error. */
- // k
-
- /* If the stack of open elements has a p element in
- scope, then pop elements from this stack until the stack
- no longer has a p element in scope. */
- for($n = count($this->stack) - 1; $n >= 0; $n--) {
- if($this->elementInScope('p')) {
- array_pop($this->stack);
+ /* If the stack of open elements has a p element in
+ scope, then pop elements from this stack until the stack
+ no longer has a p element in scope. */
+ for ($n = count($this->stack) - 1; $n >= 0; $n--) {
+ if ($this->elementInScope('p')) {
+ array_pop($this->stack);
- } else {
- break;
+ } else {
+ break;
+ }
}
}
- }
- break;
-
- /* An end tag whose tag name is "dd", "dt", or "li" */
- case 'dd': case 'dt': case 'li':
- /* If the stack of open elements has an element in scope
- whose tag name matches the tag name of the token, then
- generate implied end tags, except for elements with the
- same tag name as the token. */
- if($this->elementInScope($token['name'])) {
- $this->generateImpliedEndTags(array($token['name']));
-
- /* If the current node is not an element with the same
- tag name as the token, then this is a parse error. */
- // w/e
+ break;
+ /* An end tag whose tag name is "dd", "dt", or "li" */
+ case 'dd':
+ case 'dt':
+ case 'li':
/* If the stack of open elements has an element in scope
whose tag name matches the tag name of the token, then
- pop elements from this stack until an element with that
- tag name has been popped from the stack. */
- for($n = count($this->stack) - 1; $n >= 0; $n--) {
- if($this->stack[$n]->nodeName === $token['name']) {
- $n = -1;
- }
+ generate implied end tags, except for elements with the
+ same tag name as the token. */
+ if ($this->elementInScope($token['name'])) {
+ $this->generateImpliedEndTags(array($token['name']));
+
+ /* If the current node is not an element with the same
+ tag name as the token, then this is a parse error. */
+ // w/e
+
+ /* If the stack of open elements has an element in scope
+ whose tag name matches the tag name of the token, then
+ pop elements from this stack until an element with that
+ tag name has been popped from the stack. */
+ for ($n = count($this->stack) - 1; $n >= 0; $n--) {
+ if ($this->stack[$n]->nodeName === $token['name']) {
+ $n = -1;
+ }
- array_pop($this->stack);
+ array_pop($this->stack);
+ }
}
- }
- break;
-
- /* An end tag whose tag name is one of: "h1", "h2", "h3", "h4",
- "h5", "h6" */
- case 'h1': case 'h2': case 'h3': case 'h4': case 'h5': case 'h6':
- $elements = array('h1', 'h2', 'h3', 'h4', 'h5', 'h6');
+ break;
- /* If the stack of open elements has in scope an element whose
- tag name is one of "h1", "h2", "h3", "h4", "h5", or "h6", then
- generate implied end tags. */
- if($this->elementInScope($elements)) {
- $this->generateImpliedEndTags();
+ /* An end tag whose tag name is one of: "h1", "h2", "h3", "h4",
+ "h5", "h6" */
+ case 'h1':
+ case 'h2':
+ case 'h3':
+ case 'h4':
+ case 'h5':
+ case 'h6':
+ $elements = array('h1', 'h2', 'h3', 'h4', 'h5', 'h6');
+
+ /* If the stack of open elements has in scope an element whose
+ tag name is one of "h1", "h2", "h3", "h4", "h5", or "h6", then
+ generate implied end tags. */
+ if ($this->elementInScope($elements)) {
+ $this->generateImpliedEndTags();
- /* Now, if the current node is not an element with the same
- tag name as that of the token, then this is a parse error. */
- // w/e
+ /* Now, if the current node is not an element with the same
+ tag name as that of the token, then this is a parse error. */
+ // w/e
- /* If the stack of open elements has in scope an element
- whose tag name is one of "h1", "h2", "h3", "h4", "h5", or
- "h6", then pop elements from the stack until an element
- with one of those tag names has been popped from the stack. */
- while($this->elementInScope($elements)) {
- array_pop($this->stack);
+ /* If the stack of open elements has in scope an element
+ whose tag name is one of "h1", "h2", "h3", "h4", "h5", or
+ "h6", then pop elements from the stack until an element
+ with one of those tag names has been popped from the stack. */
+ while ($this->elementInScope($elements)) {
+ array_pop($this->stack);
+ }
}
- }
- break;
+ break;
- /* An end tag whose tag name is one of: "a", "b", "big", "em",
- "font", "i", "nobr", "s", "small", "strike", "strong", "tt", "u" */
- case 'a': case 'b': case 'big': case 'em': case 'font':
- case 'i': case 'nobr': case 's': case 'small': case 'strike':
- case 'strong': case 'tt': case 'u':
- /* 1. Let the formatting element be the last element in
- the list of active formatting elements that:
- * is between the end of the list and the last scope
- marker in the list, if any, or the start of the list
- otherwise, and
- * has the same tag name as the token.
- */
- while(true) {
- for($a = count($this->a_formatting) - 1; $a >= 0; $a--) {
- if($this->a_formatting[$a] === self::MARKER) {
+ /* An end tag whose tag name is one of: "a", "b", "big", "em",
+ "font", "i", "nobr", "s", "small", "strike", "strong", "tt", "u" */
+ case 'a':
+ case 'b':
+ case 'big':
+ case 'em':
+ case 'font':
+ case 'i':
+ case 'nobr':
+ case 's':
+ case 'small':
+ case 'strike':
+ case 'strong':
+ case 'tt':
+ case 'u':
+ /* 1. Let the formatting element be the last element in
+ the list of active formatting elements that:
+ * is between the end of the list and the last scope
+ marker in the list, if any, or the start of the list
+ otherwise, and
+ * has the same tag name as the token.
+ */
+ while (true) {
+ for ($a = count($this->a_formatting) - 1; $a >= 0; $a--) {
+ if ($this->a_formatting[$a] === self::MARKER) {
+ break;
+
+ } elseif ($this->a_formatting[$a]->tagName === $token['name']) {
+ $formatting_element = $this->a_formatting[$a];
+ $in_stack = in_array($formatting_element, $this->stack, true);
+ $fe_af_pos = $a;
+ break;
+ }
+ }
+
+ /* If there is no such node, or, if that node is
+ also in the stack of open elements but the element
+ is not in scope, then this is a parse error. Abort
+ these steps. The token is ignored. */
+ if (!isset($formatting_element) || ($in_stack &&
+ !$this->elementInScope($token['name']))
+ ) {
break;
- } elseif($this->a_formatting[$a]->tagName === $token['name']) {
- $formatting_element = $this->a_formatting[$a];
- $in_stack = in_array($formatting_element, $this->stack, true);
- $fe_af_pos = $a;
+ /* Otherwise, if there is such a node, but that node
+ is not in the stack of open elements, then this is a
+ parse error; remove the element from the list, and
+ abort these steps. */
+ } elseif (isset($formatting_element) && !$in_stack) {
+ unset($this->a_formatting[$fe_af_pos]);
+ $this->a_formatting = array_merge($this->a_formatting);
break;
}
- }
-
- /* If there is no such node, or, if that node is
- also in the stack of open elements but the element
- is not in scope, then this is a parse error. Abort
- these steps. The token is ignored. */
- if(!isset($formatting_element) || ($in_stack &&
- !$this->elementInScope($token['name']))) {
- break;
-
- /* Otherwise, if there is such a node, but that node
- is not in the stack of open elements, then this is a
- parse error; remove the element from the list, and
- abort these steps. */
- } elseif(isset($formatting_element) && !$in_stack) {
- unset($this->a_formatting[$fe_af_pos]);
- $this->a_formatting = array_merge($this->a_formatting);
- break;
- }
- /* 2. Let the furthest block be the topmost node in the
- stack of open elements that is lower in the stack
- than the formatting element, and is not an element in
- the phrasing or formatting categories. There might
- not be one. */
- $fe_s_pos = array_search($formatting_element, $this->stack, true);
- $length = count($this->stack);
+ /* 2. Let the furthest block be the topmost node in the
+ stack of open elements that is lower in the stack
+ than the formatting element, and is not an element in
+ the phrasing or formatting categories. There might
+ not be one. */
+ $fe_s_pos = array_search($formatting_element, $this->stack, true);
+ $length = count($this->stack);
- for($s = $fe_s_pos + 1; $s < $length; $s++) {
- $category = $this->getElementCategory($this->stack[$s]->nodeName);
+ for ($s = $fe_s_pos + 1; $s < $length; $s++) {
+ $category = $this->getElementCategory($this->stack[$s]->nodeName);
- if($category !== self::PHRASING && $category !== self::FORMATTING) {
- $furthest_block = $this->stack[$s];
+ if ($category !== self::PHRASING && $category !== self::FORMATTING) {
+ $furthest_block = $this->stack[$s];
+ }
}
- }
- /* 3. If there is no furthest block, then the UA must
- skip the subsequent steps and instead just pop all
- the nodes from the bottom of the stack of open
- elements, from the current node up to the formatting
- element, and remove the formatting element from the
- list of active formatting elements. */
- if(!isset($furthest_block)) {
- for($n = $length - 1; $n >= $fe_s_pos; $n--) {
- array_pop($this->stack);
- }
+ /* 3. If there is no furthest block, then the UA must
+ skip the subsequent steps and instead just pop all
+ the nodes from the bottom of the stack of open
+ elements, from the current node up to the formatting
+ element, and remove the formatting element from the
+ list of active formatting elements. */
+ if (!isset($furthest_block)) {
+ for ($n = $length - 1; $n >= $fe_s_pos; $n--) {
+ array_pop($this->stack);
+ }
- unset($this->a_formatting[$fe_af_pos]);
- $this->a_formatting = array_merge($this->a_formatting);
- break;
- }
+ unset($this->a_formatting[$fe_af_pos]);
+ $this->a_formatting = array_merge($this->a_formatting);
+ break;
+ }
- /* 4. Let the common ancestor be the element
- immediately above the formatting element in the stack
- of open elements. */
- $common_ancestor = $this->stack[$fe_s_pos - 1];
+ /* 4. Let the common ancestor be the element
+ immediately above the formatting element in the stack
+ of open elements. */
+ $common_ancestor = $this->stack[$fe_s_pos - 1];
- /* 5. If the furthest block has a parent node, then
- remove the furthest block from its parent node. */
- if($furthest_block->parentNode !== null) {
- $furthest_block->parentNode->removeChild($furthest_block);
- }
+ /* 5. If the furthest block has a parent node, then
+ remove the furthest block from its parent node. */
+ if ($furthest_block->parentNode !== null) {
+ $furthest_block->parentNode->removeChild($furthest_block);
+ }
- /* 6. Let a bookmark note the position of the
- formatting element in the list of active formatting
- elements relative to the elements on either side
- of it in the list. */
- $bookmark = $fe_af_pos;
-
- /* 7. Let node and last node be the furthest block.
- Follow these steps: */
- $node = $furthest_block;
- $last_node = $furthest_block;
-
- while(true) {
- for($n = array_search($node, $this->stack, true) - 1; $n >= 0; $n--) {
- /* 7.1 Let node be the element immediately
- prior to node in the stack of open elements. */
- $node = $this->stack[$n];
-
- /* 7.2 If node is not in the list of active
- formatting elements, then remove node from
- the stack of open elements and then go back
- to step 1. */
- if(!in_array($node, $this->a_formatting, true)) {
- unset($this->stack[$n]);
- $this->stack = array_merge($this->stack);
+ /* 6. Let a bookmark note the position of the
+ formatting element in the list of active formatting
+ elements relative to the elements on either side
+ of it in the list. */
+ $bookmark = $fe_af_pos;
+
+ /* 7. Let node and last node be the furthest block.
+ Follow these steps: */
+ $node = $furthest_block;
+ $last_node = $furthest_block;
+
+ while (true) {
+ for ($n = array_search($node, $this->stack, true) - 1; $n >= 0; $n--) {
+ /* 7.1 Let node be the element immediately
+ prior to node in the stack of open elements. */
+ $node = $this->stack[$n];
+
+ /* 7.2 If node is not in the list of active
+ formatting elements, then remove node from
+ the stack of open elements and then go back
+ to step 1. */
+ if (!in_array($node, $this->a_formatting, true)) {
+ unset($this->stack[$n]);
+ $this->stack = array_merge($this->stack);
+
+ } else {
+ break;
+ }
+ }
- } else {
+ /* 7.3 Otherwise, if node is the formatting
+ element, then go to the next step in the overall
+ algorithm. */
+ if ($node === $formatting_element) {
break;
+
+ /* 7.4 Otherwise, if last node is the furthest
+ block, then move the aforementioned bookmark to
+ be immediately after the node in the list of
+ active formatting elements. */
+ } elseif ($last_node === $furthest_block) {
+ $bookmark = array_search($node, $this->a_formatting, true) + 1;
}
- }
- /* 7.3 Otherwise, if node is the formatting
- element, then go to the next step in the overall
- algorithm. */
- if($node === $formatting_element) {
- break;
+ /* 7.5 If node has any children, perform a
+ shallow clone of node, replace the entry for
+ node in the list of active formatting elements
+ with an entry for the clone, replace the entry
+ for node in the stack of open elements with an
+ entry for the clone, and let node be the clone. */
+ if ($node->hasChildNodes()) {
+ $clone = $node->cloneNode();
+ $s_pos = array_search($node, $this->stack, true);
+ $a_pos = array_search($node, $this->a_formatting, true);
+
+ $this->stack[$s_pos] = $clone;
+ $this->a_formatting[$a_pos] = $clone;
+ $node = $clone;
+ }
- /* 7.4 Otherwise, if last node is the furthest
- block, then move the aforementioned bookmark to
- be immediately after the node in the list of
- active formatting elements. */
- } elseif($last_node === $furthest_block) {
- $bookmark = array_search($node, $this->a_formatting, true) + 1;
- }
+ /* 7.6 Insert last node into node, first removing
+ it from its previous parent node if any. */
+ if ($last_node->parentNode !== null) {
+ $last_node->parentNode->removeChild($last_node);
+ }
+
+ $node->appendChild($last_node);
- /* 7.5 If node has any children, perform a
- shallow clone of node, replace the entry for
- node in the list of active formatting elements
- with an entry for the clone, replace the entry
- for node in the stack of open elements with an
- entry for the clone, and let node be the clone. */
- if($node->hasChildNodes()) {
- $clone = $node->cloneNode();
- $s_pos = array_search($node, $this->stack, true);
- $a_pos = array_search($node, $this->a_formatting, true);
-
- $this->stack[$s_pos] = $clone;
- $this->a_formatting[$a_pos] = $clone;
- $node = $clone;
+ /* 7.7 Let last node be node. */
+ $last_node = $node;
}
- /* 7.6 Insert last node into node, first removing
- it from its previous parent node if any. */
- if($last_node->parentNode !== null) {
+ /* 8. Insert whatever last node ended up being in
+ the previous step into the common ancestor node,
+ first removing it from its previous parent node if
+ any. */
+ if ($last_node->parentNode !== null) {
$last_node->parentNode->removeChild($last_node);
}
- $node->appendChild($last_node);
+ $common_ancestor->appendChild($last_node);
- /* 7.7 Let last node be node. */
- $last_node = $node;
- }
+ /* 9. Perform a shallow clone of the formatting
+ element. */
+ $clone = $formatting_element->cloneNode();
- /* 8. Insert whatever last node ended up being in
- the previous step into the common ancestor node,
- first removing it from its previous parent node if
- any. */
- if($last_node->parentNode !== null) {
- $last_node->parentNode->removeChild($last_node);
- }
+ /* 10. Take all of the child nodes of the furthest
+ block and append them to the clone created in the
+ last step. */
+ while ($furthest_block->hasChildNodes()) {
+ $child = $furthest_block->firstChild;
+ $furthest_block->removeChild($child);
+ $clone->appendChild($child);
+ }
- $common_ancestor->appendChild($last_node);
+ /* 11. Append that clone to the furthest block. */
+ $furthest_block->appendChild($clone);
- /* 9. Perform a shallow clone of the formatting
- element. */
- $clone = $formatting_element->cloneNode();
+ /* 12. Remove the formatting element from the list
+ of active formatting elements, and insert the clone
+ into the list of active formatting elements at the
+ position of the aforementioned bookmark. */
+ $fe_af_pos = array_search($formatting_element, $this->a_formatting, true);
+ unset($this->a_formatting[$fe_af_pos]);
+ $this->a_formatting = array_merge($this->a_formatting);
- /* 10. Take all of the child nodes of the furthest
- block and append them to the clone created in the
- last step. */
- while($furthest_block->hasChildNodes()) {
- $child = $furthest_block->firstChild;
- $furthest_block->removeChild($child);
- $clone->appendChild($child);
+ $af_part1 = array_slice($this->a_formatting, 0, $bookmark - 1);
+ $af_part2 = array_slice($this->a_formatting, $bookmark, count($this->a_formatting));
+ $this->a_formatting = array_merge($af_part1, array($clone), $af_part2);
+
+ /* 13. Remove the formatting element from the stack
+ of open elements, and insert the clone into the stack
+ of open elements immediately after (i.e. in a more
+ deeply nested position than) the position of the
+ furthest block in that stack. */
+ $fe_s_pos = array_search($formatting_element, $this->stack, true);
+ $fb_s_pos = array_search($furthest_block, $this->stack, true);
+ unset($this->stack[$fe_s_pos]);
+
+ $s_part1 = array_slice($this->stack, 0, $fb_s_pos);
+ $s_part2 = array_slice($this->stack, $fb_s_pos + 1, count($this->stack));
+ $this->stack = array_merge($s_part1, array($clone), $s_part2);
+
+ /* 14. Jump back to step 1 in this series of steps. */
+ unset($formatting_element, $fe_af_pos, $fe_s_pos, $furthest_block);
}
+ break;
- /* 11. Append that clone to the furthest block. */
- $furthest_block->appendChild($clone);
-
- /* 12. Remove the formatting element from the list
- of active formatting elements, and insert the clone
- into the list of active formatting elements at the
- position of the aforementioned bookmark. */
- $fe_af_pos = array_search($formatting_element, $this->a_formatting, true);
- unset($this->a_formatting[$fe_af_pos]);
- $this->a_formatting = array_merge($this->a_formatting);
-
- $af_part1 = array_slice($this->a_formatting, 0, $bookmark - 1);
- $af_part2 = array_slice($this->a_formatting, $bookmark, count($this->a_formatting));
- $this->a_formatting = array_merge($af_part1, array($clone), $af_part2);
-
- /* 13. Remove the formatting element from the stack
- of open elements, and insert the clone into the stack
- of open elements immediately after (i.e. in a more
- deeply nested position than) the position of the
- furthest block in that stack. */
- $fe_s_pos = array_search($formatting_element, $this->stack, true);
- $fb_s_pos = array_search($furthest_block, $this->stack, true);
- unset($this->stack[$fe_s_pos]);
-
- $s_part1 = array_slice($this->stack, 0, $fb_s_pos);
- $s_part2 = array_slice($this->stack, $fb_s_pos + 1, count($this->stack));
- $this->stack = array_merge($s_part1, array($clone), $s_part2);
-
- /* 14. Jump back to step 1 in this series of steps. */
- unset($formatting_element, $fe_af_pos, $fe_s_pos, $furthest_block);
- }
- break;
+ /* An end tag token whose tag name is one of: "button",
+ "marquee", "object" */
+ case 'button':
+ case 'marquee':
+ case 'object':
+ /* If the stack of open elements has an element in scope whose
+ tag name matches the tag name of the token, then generate implied
+ tags. */
+ if ($this->elementInScope($token['name'])) {
+ $this->generateImpliedEndTags();
- /* An end tag token whose tag name is one of: "button",
- "marquee", "object" */
- case 'button': case 'marquee': case 'object':
- /* If the stack of open elements has an element in scope whose
- tag name matches the tag name of the token, then generate implied
- tags. */
- if($this->elementInScope($token['name'])) {
- $this->generateImpliedEndTags();
-
- /* Now, if the current node is not an element with the same
- tag name as the token, then this is a parse error. */
- // k
-
- /* Now, if the stack of open elements has an element in scope
- whose tag name matches the tag name of the token, then pop
- elements from the stack until that element has been popped from
- the stack, and clear the list of active formatting elements up
- to the last marker. */
- for($n = count($this->stack) - 1; $n >= 0; $n--) {
- if($this->stack[$n]->nodeName === $token['name']) {
- $n = -1;
- }
+ /* Now, if the current node is not an element with the same
+ tag name as the token, then this is a parse error. */
+ // k
- array_pop($this->stack);
- }
+ /* Now, if the stack of open elements has an element in scope
+ whose tag name matches the tag name of the token, then pop
+ elements from the stack until that element has been popped from
+ the stack, and clear the list of active formatting elements up
+ to the last marker. */
+ for ($n = count($this->stack) - 1; $n >= 0; $n--) {
+ if ($this->stack[$n]->nodeName === $token['name']) {
+ $n = -1;
+ }
- $marker = end(array_keys($this->a_formatting, self::MARKER, true));
+ array_pop($this->stack);
+ }
- for($n = count($this->a_formatting) - 1; $n > $marker; $n--) {
- array_pop($this->a_formatting);
- }
- }
- break;
+ $marker = end(array_keys($this->a_formatting, self::MARKER, true));
- /* Or an end tag whose tag name is one of: "area", "basefont",
- "bgsound", "br", "embed", "hr", "iframe", "image", "img",
- "input", "isindex", "noembed", "noframes", "param", "select",
- "spacer", "table", "textarea", "wbr" */
- case 'area': case 'basefont': case 'bgsound': case 'br':
- case 'embed': case 'hr': case 'iframe': case 'image':
- case 'img': case 'input': case 'isindex': case 'noembed':
- case 'noframes': case 'param': case 'select': case 'spacer':
- case 'table': case 'textarea': case 'wbr':
- // Parse error. Ignore the token.
- break;
+ for ($n = count($this->a_formatting) - 1; $n > $marker; $n--) {
+ array_pop($this->a_formatting);
+ }
+ }
+ break;
- /* An end tag token not covered by the previous entries */
- default:
- for($n = count($this->stack) - 1; $n >= 0; $n--) {
- /* Initialise node to be the current node (the bottommost
- node of the stack). */
- $node = end($this->stack);
-
- /* If node has the same tag name as the end tag token,
- then: */
- if($token['name'] === $node->nodeName) {
- /* Generate implied end tags. */
- $this->generateImpliedEndTags();
+ /* Or an end tag whose tag name is one of: "area", "basefont",
+ "bgsound", "br", "embed", "hr", "iframe", "image", "img",
+ "input", "isindex", "noembed", "noframes", "param", "select",
+ "spacer", "table", "textarea", "wbr" */
+ case 'area':
+ case 'basefont':
+ case 'bgsound':
+ case 'br':
+ case 'embed':
+ case 'hr':
+ case 'iframe':
+ case 'image':
+ case 'img':
+ case 'input':
+ case 'isindex':
+ case 'noembed':
+ case 'noframes':
+ case 'param':
+ case 'select':
+ case 'spacer':
+ case 'table':
+ case 'textarea':
+ case 'wbr':
+ // Parse error. Ignore the token.
+ break;
- /* If the tag name of the end tag token does not
- match the tag name of the current node, this is a
- parse error. */
- // k
+ /* An end tag token not covered by the previous entries */
+ default:
+ for ($n = count($this->stack) - 1; $n >= 0; $n--) {
+ /* Initialise node to be the current node (the bottommost
+ node of the stack). */
+ $node = end($this->stack);
+
+ /* If node has the same tag name as the end tag token,
+ then: */
+ if ($token['name'] === $node->nodeName) {
+ /* Generate implied end tags. */
+ $this->generateImpliedEndTags();
+
+ /* If the tag name of the end tag token does not
+ match the tag name of the current node, this is a
+ parse error. */
+ // k
+
+ /* Pop all the nodes from the current node up to
+ node, including node, then stop this algorithm. */
+ for ($x = count($this->stack) - $n; $x >= $n; $x--) {
+ array_pop($this->stack);
+ }
- /* Pop all the nodes from the current node up to
- node, including node, then stop this algorithm. */
- for($x = count($this->stack) - $n; $x >= $n; $x--) {
- array_pop($this->stack);
- }
-
- } else {
- $category = $this->getElementCategory($node);
-
- if($category !== self::SPECIAL && $category !== self::SCOPING) {
- /* Otherwise, if node is in neither the formatting
- category nor the phrasing category, then this is a
- parse error. Stop this algorithm. The end tag token
- is ignored. */
- return false;
+ } else {
+ $category = $this->getElementCategory($node);
+
+ if ($category !== self::SPECIAL && $category !== self::SCOPING) {
+ /* Otherwise, if node is in neither the formatting
+ category nor the phrasing category, then this is a
+ parse error. Stop this algorithm. The end tag token
+ is ignored. */
+ return false;
+ }
}
}
- }
+ break;
+ }
break;
- }
- break;
}
}
- private function inTable($token) {
+ private function inTable($token)
+ {
$clear = array('html', 'table');
/* A character token that is one of one of U+0009 CHARACTER TABULATION,
U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
or U+0020 SPACE */
- if($token['type'] === HTML5::CHARACTR &&
- preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) {
+ if ($token['type'] === HTML5::CHARACTR &&
+ preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])
+ ) {
/* Append the character to the current node. */
$text = $this->dom->createTextNode($token['data']);
end($this->stack)->appendChild($text);
- /* A comment token */
- } elseif($token['type'] === HTML5::COMMENT) {
+ /* A comment token */
+ } elseif ($token['type'] === HTML5::COMMENT) {
/* Append a Comment node to the current node with the data
attribute set to the data given in the comment token. */
$comment = $this->dom->createComment($token['data']);
end($this->stack)->appendChild($comment);
- /* A start tag whose tag name is "caption" */
- } elseif($token['type'] === HTML5::STARTTAG &&
- $token['name'] === 'caption') {
+ /* A start tag whose tag name is "caption" */
+ } elseif ($token['type'] === HTML5::STARTTAG &&
+ $token['name'] === 'caption'
+ ) {
/* Clear the stack back to a table context. */
$this->clearStackToTableContext($clear);
@@ -2663,9 +3350,10 @@ class HTML5TreeConstructer {
$this->insertElement($token);
$this->mode = self::IN_CAPTION;
- /* A start tag whose tag name is "colgroup" */
- } elseif($token['type'] === HTML5::STARTTAG &&
- $token['name'] === 'colgroup') {
+ /* A start tag whose tag name is "colgroup" */
+ } elseif ($token['type'] === HTML5::STARTTAG &&
+ $token['name'] === 'colgroup'
+ ) {
/* Clear the stack back to a table context. */
$this->clearStackToTableContext($clear);
@@ -2674,20 +3362,26 @@ class HTML5TreeConstructer {
$this->insertElement($token);
$this->mode = self::IN_CGROUP;
- /* A start tag whose tag name is "col" */
- } elseif($token['type'] === HTML5::STARTTAG &&
- $token['name'] === 'col') {
- $this->inTable(array(
- 'name' => 'colgroup',
- 'type' => HTML5::STARTTAG,
- 'attr' => array()
- ));
+ /* A start tag whose tag name is "col" */
+ } elseif ($token['type'] === HTML5::STARTTAG &&
+ $token['name'] === 'col'
+ ) {
+ $this->inTable(
+ array(
+ 'name' => 'colgroup',
+ 'type' => HTML5::STARTTAG,
+ 'attr' => array()
+ )
+ );
$this->inColumnGroup($token);
- /* A start tag whose tag name is one of: "tbody", "tfoot", "thead" */
- } elseif($token['type'] === HTML5::STARTTAG && in_array($token['name'],
- array('tbody', 'tfoot', 'thead'))) {
+ /* A start tag whose tag name is one of: "tbody", "tfoot", "thead" */
+ } elseif ($token['type'] === HTML5::STARTTAG && in_array(
+ $token['name'],
+ array('tbody', 'tfoot', 'thead')
+ )
+ ) {
/* Clear the stack back to a table context. */
$this->clearStackToTableContext($clear);
@@ -2696,42 +3390,49 @@ class HTML5TreeConstructer {
$this->insertElement($token);
$this->mode = self::IN_TBODY;
- /* A start tag whose tag name is one of: "td", "th", "tr" */
- } elseif($token['type'] === HTML5::STARTTAG &&
- in_array($token['name'], array('td', 'th', 'tr'))) {
+ /* A start tag whose tag name is one of: "td", "th", "tr" */
+ } elseif ($token['type'] === HTML5::STARTTAG &&
+ in_array($token['name'], array('td', 'th', 'tr'))
+ ) {
/* Act as if a start tag token with the tag name "tbody" had been
seen, then reprocess the current token. */
- $this->inTable(array(
- 'name' => 'tbody',
- 'type' => HTML5::STARTTAG,
- 'attr' => array()
- ));
+ $this->inTable(
+ array(
+ 'name' => 'tbody',
+ 'type' => HTML5::STARTTAG,
+ 'attr' => array()
+ )
+ );
return $this->inTableBody($token);
- /* A start tag whose tag name is "table" */
- } elseif($token['type'] === HTML5::STARTTAG &&
- $token['name'] === 'table') {
+ /* A start tag whose tag name is "table" */
+ } elseif ($token['type'] === HTML5::STARTTAG &&
+ $token['name'] === 'table'
+ ) {
/* Parse error. Act as if an end tag token with the tag name "table"
had been seen, then, if that token wasn't ignored, reprocess the
current token. */
- $this->inTable(array(
- 'name' => 'table',
- 'type' => HTML5::ENDTAG
- ));
+ $this->inTable(
+ array(
+ 'name' => 'table',
+ 'type' => HTML5::ENDTAG
+ )
+ );
return $this->mainPhase($token);
- /* An end tag whose tag name is "table" */
- } elseif($token['type'] === HTML5::ENDTAG &&
- $token['name'] === 'table') {
+ /* An end tag whose tag name is "table" */
+ } elseif ($token['type'] === HTML5::ENDTAG &&
+ $token['name'] === 'table'
+ ) {
/* If the stack of open elements does not have an element in table
scope with the same tag name as the token, this is a parse error.
Ignore the token. (innerHTML case) */
- if(!$this->elementInScope($token['name'], true)) {
+ if (!$this->elementInScope($token['name'], true)) {
return false;
- /* Otherwise: */
+ /* Otherwise: */
} else {
/* Generate implied end tags. */
$this->generateImpliedEndTags();
@@ -2742,11 +3443,11 @@ class HTML5TreeConstructer {
/* Pop elements from this stack until a table element has been
popped from the stack. */
- while(true) {
+ while (true) {
$current = end($this->stack)->nodeName;
array_pop($this->stack);
- if($current === 'table') {
+ if ($current === 'table') {
break;
}
}
@@ -2755,14 +3456,28 @@ class HTML5TreeConstructer {
$this->resetInsertionMode();
}
- /* An end tag whose tag name is one of: "body", "caption", "col",
- "colgroup", "html", "tbody", "td", "tfoot", "th", "thead", "tr" */
- } elseif($token['type'] === HTML5::ENDTAG && in_array($token['name'],
- array('body', 'caption', 'col', 'colgroup', 'html', 'tbody', 'td',
- 'tfoot', 'th', 'thead', 'tr'))) {
+ /* An end tag whose tag name is one of: "body", "caption", "col",
+ "colgroup", "html", "tbody", "td", "tfoot", "th", "thead", "tr" */
+ } elseif ($token['type'] === HTML5::ENDTAG && in_array(
+ $token['name'],
+ array(
+ 'body',
+ 'caption',
+ 'col',
+ 'colgroup',
+ 'html',
+ 'tbody',
+ 'td',
+ 'tfoot',
+ 'th',
+ 'thead',
+ 'tr'
+ )
+ )
+ ) {
// Parse error. Ignore the token.
- /* Anything else */
+ /* Anything else */
} else {
/* Parse error. Process the token as if the insertion mode was "in
body", with the following exception: */
@@ -2770,8 +3485,11 @@ class HTML5TreeConstructer {
/* If the current node is a table, tbody, tfoot, thead, or tr
element, then, whenever a node would be inserted into the current
node, it must instead be inserted into the foster parent element. */
- if(in_array(end($this->stack)->nodeName,
- array('table', 'tbody', 'tfoot', 'thead', 'tr'))) {
+ if (in_array(
+ end($this->stack)->nodeName,
+ array('table', 'tbody', 'tfoot', 'thead', 'tr')
+ )
+ ) {
/* The foster parent element is the parent element of the last
table element in the stack of open elements, if there is a
table element and it has such a parent element. If there is no
@@ -2783,21 +3501,22 @@ class HTML5TreeConstructer {
its parent node is not an element, then the foster parent
element is the element before the last table element in the
stack of open elements. */
- for($n = count($this->stack) - 1; $n >= 0; $n--) {
- if($this->stack[$n]->nodeName === 'table') {
+ for ($n = count($this->stack) - 1; $n >= 0; $n--) {
+ if ($this->stack[$n]->nodeName === 'table') {
$table = $this->stack[$n];
break;
}
}
- if(isset($table) && $table->parentNode !== null) {
+ if (isset($table) && $table->parentNode !== null) {
$this->foster_parent = $table->parentNode;
- } elseif(!isset($table)) {
+ } elseif (!isset($table)) {
$this->foster_parent = $this->stack[0];
- } elseif(isset($table) && ($table->parentNode === null ||
- $table->parentNode->nodeType !== XML_ELEMENT_NODE)) {
+ } elseif (isset($table) && ($table->parentNode === null ||
+ $table->parentNode->nodeType !== XML_ELEMENT_NODE)
+ ) {
$this->foster_parent = $this->stack[$n - 1];
}
}
@@ -2806,16 +3525,17 @@ class HTML5TreeConstructer {
}
}
- private function inCaption($token) {
+ private function inCaption($token)
+ {
/* An end tag whose tag name is "caption" */
- if($token['type'] === HTML5::ENDTAG && $token['name'] === 'caption') {
+ if ($token['type'] === HTML5::ENDTAG && $token['name'] === 'caption') {
/* If the stack of open elements does not have an element in table
scope with the same tag name as the token, this is a parse error.
Ignore the token. (innerHTML case) */
- if(!$this->elementInScope($token['name'], true)) {
+ if (!$this->elementInScope($token['name'], true)) {
// Ignore
- /* Otherwise: */
+ /* Otherwise: */
} else {
/* Generate implied end tags. */
$this->generateImpliedEndTags();
@@ -2826,11 +3546,11 @@ class HTML5TreeConstructer {
/* Pop elements from this stack until a caption element has
been popped from the stack. */
- while(true) {
+ while (true) {
$node = end($this->stack)->nodeName;
array_pop($this->stack);
- if($node === 'caption') {
+ if ($node === 'caption') {
break;
}
}
@@ -2843,99 +3563,131 @@ class HTML5TreeConstructer {
$this->mode = self::IN_TABLE;
}
- /* A start tag whose tag name is one of: "caption", "col", "colgroup",
- "tbody", "td", "tfoot", "th", "thead", "tr", or an end tag whose tag
- name is "table" */
- } elseif(($token['type'] === HTML5::STARTTAG && in_array($token['name'],
- array('caption', 'col', 'colgroup', 'tbody', 'td', 'tfoot', 'th',
- 'thead', 'tr'))) || ($token['type'] === HTML5::ENDTAG &&
- $token['name'] === 'table')) {
+ /* A start tag whose tag name is one of: "caption", "col", "colgroup",
+ "tbody", "td", "tfoot", "th", "thead", "tr", or an end tag whose tag
+ name is "table" */
+ } elseif (($token['type'] === HTML5::STARTTAG && in_array(
+ $token['name'],
+ array(
+ 'caption',
+ 'col',
+ 'colgroup',
+ 'tbody',
+ 'td',
+ 'tfoot',
+ 'th',
+ 'thead',
+ 'tr'
+ )
+ )) || ($token['type'] === HTML5::ENDTAG &&
+ $token['name'] === 'table')
+ ) {
/* Parse error. Act as if an end tag with the tag name "caption"
had been seen, then, if that token wasn't ignored, reprocess the
current token. */
- $this->inCaption(array(
- 'name' => 'caption',
- 'type' => HTML5::ENDTAG
- ));
+ $this->inCaption(
+ array(
+ 'name' => 'caption',
+ 'type' => HTML5::ENDTAG
+ )
+ );
return $this->inTable($token);
- /* An end tag whose tag name is one of: "body", "col", "colgroup",
- "html", "tbody", "td", "tfoot", "th", "thead", "tr" */
- } elseif($token['type'] === HTML5::ENDTAG && in_array($token['name'],
- array('body', 'col', 'colgroup', 'html', 'tbody', 'tfoot', 'th',
- 'thead', 'tr'))) {
+ /* An end tag whose tag name is one of: "body", "col", "colgroup",
+ "html", "tbody", "td", "tfoot", "th", "thead", "tr" */
+ } elseif ($token['type'] === HTML5::ENDTAG && in_array(
+ $token['name'],
+ array(
+ 'body',
+ 'col',
+ 'colgroup',
+ 'html',
+ 'tbody',
+ 'tfoot',
+ 'th',
+ 'thead',
+ 'tr'
+ )
+ )
+ ) {
// Parse error. Ignore the token.
- /* Anything else */
+ /* Anything else */
} else {
/* Process the token as if the insertion mode was "in body". */
$this->inBody($token);
}
}
- private function inColumnGroup($token) {
+ private function inColumnGroup($token)
+ {
/* A character token that is one of one of U+0009 CHARACTER TABULATION,
U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
or U+0020 SPACE */
- if($token['type'] === HTML5::CHARACTR &&
- preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) {
+ if ($token['type'] === HTML5::CHARACTR &&
+ preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])
+ ) {
/* Append the character to the current node. */
$text = $this->dom->createTextNode($token['data']);
end($this->stack)->appendChild($text);
- /* A comment token */
- } elseif($token['type'] === HTML5::COMMENT) {
+ /* A comment token */
+ } elseif ($token['type'] === HTML5::COMMENT) {
/* Append a Comment node to the current node with the data
attribute set to the data given in the comment token. */
$comment = $this->dom->createComment($token['data']);
end($this->stack)->appendChild($comment);
- /* A start tag whose tag name is "col" */
- } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'col') {
+ /* A start tag whose tag name is "col" */
+ } elseif ($token['type'] === HTML5::STARTTAG && $token['name'] === 'col') {
/* Insert a col element for the token. Immediately pop the current
node off the stack of open elements. */
$this->insertElement($token);
array_pop($this->stack);
- /* An end tag whose tag name is "colgroup" */
- } elseif($token['type'] === HTML5::ENDTAG &&
- $token['name'] === 'colgroup') {
+ /* An end tag whose tag name is "colgroup" */
+ } elseif ($token['type'] === HTML5::ENDTAG &&
+ $token['name'] === 'colgroup'
+ ) {
/* If the current node is the root html element, then this is a
parse error, ignore the token. (innerHTML case) */
- if(end($this->stack)->nodeName === 'html') {
+ if (end($this->stack)->nodeName === 'html') {
// Ignore
- /* Otherwise, pop the current node (which will be a colgroup
- element) from the stack of open elements. Switch the insertion
- mode to "in table". */
+ /* Otherwise, pop the current node (which will be a colgroup
+ element) from the stack of open elements. Switch the insertion
+ mode to "in table". */
} else {
array_pop($this->stack);
$this->mode = self::IN_TABLE;
}
- /* An end tag whose tag name is "col" */
- } elseif($token['type'] === HTML5::ENDTAG && $token['name'] === 'col') {
+ /* An end tag whose tag name is "col" */
+ } elseif ($token['type'] === HTML5::ENDTAG && $token['name'] === 'col') {
/* Parse error. Ignore the token. */
- /* Anything else */
+ /* Anything else */
} else {
/* Act as if an end tag with the tag name "colgroup" had been seen,
and then, if that token wasn't ignored, reprocess the current token. */
- $this->inColumnGroup(array(
- 'name' => 'colgroup',
- 'type' => HTML5::ENDTAG
- ));
+ $this->inColumnGroup(
+ array(
+ 'name' => 'colgroup',
+ 'type' => HTML5::ENDTAG
+ )
+ );
return $this->inTable($token);
}
}
- private function inTableBody($token) {
+ private function inTableBody($token)
+ {
$clear = array('tbody', 'tfoot', 'thead', 'html');
/* A start tag whose tag name is "tr" */
- if($token['type'] === HTML5::STARTTAG && $token['name'] === 'tr') {
+ if ($token['type'] === HTML5::STARTTAG && $token['name'] === 'tr') {
/* Clear the stack back to a table body context. */
$this->clearStackToTableContext($clear);
@@ -2944,29 +3696,33 @@ class HTML5TreeConstructer {
$this->insertElement($token);
$this->mode = self::IN_ROW;
- /* A start tag whose tag name is one of: "th", "td" */
- } elseif($token['type'] === HTML5::STARTTAG &&
- ($token['name'] === 'th' || $token['name'] === 'td')) {
+ /* A start tag whose tag name is one of: "th", "td" */
+ } elseif ($token['type'] === HTML5::STARTTAG &&
+ ($token['name'] === 'th' || $token['name'] === 'td')
+ ) {
/* Parse error. Act as if a start tag with the tag name "tr" had
been seen, then reprocess the current token. */
- $this->inTableBody(array(
- 'name' => 'tr',
- 'type' => HTML5::STARTTAG,
- 'attr' => array()
- ));
+ $this->inTableBody(
+ array(
+ 'name' => 'tr',
+ 'type' => HTML5::STARTTAG,
+ 'attr' => array()
+ )
+ );
return $this->inRow($token);
- /* An end tag whose tag name is one of: "tbody", "tfoot", "thead" */
- } elseif($token['type'] === HTML5::ENDTAG &&
- in_array($token['name'], array('tbody', 'tfoot', 'thead'))) {
+ /* An end tag whose tag name is one of: "tbody", "tfoot", "thead" */
+ } elseif ($token['type'] === HTML5::ENDTAG &&
+ in_array($token['name'], array('tbody', 'tfoot', 'thead'))
+ ) {
/* If the stack of open elements does not have an element in table
scope with the same tag name as the token, this is a parse error.
Ignore the token. */
- if(!$this->elementInScope($token['name'], true)) {
+ if (!$this->elementInScope($token['name'], true)) {
// Ignore
- /* Otherwise: */
+ /* Otherwise: */
} else {
/* Clear the stack back to a table body context. */
$this->clearStackToTableContext($clear);
@@ -2977,18 +3733,21 @@ class HTML5TreeConstructer {
$this->mode = self::IN_TABLE;
}
- /* A start tag whose tag name is one of: "caption", "col", "colgroup",
- "tbody", "tfoot", "thead", or an end tag whose tag name is "table" */
- } elseif(($token['type'] === HTML5::STARTTAG && in_array($token['name'],
- array('caption', 'col', 'colgroup', 'tbody', 'tfoor', 'thead'))) ||
- ($token['type'] === HTML5::STARTTAG && $token['name'] === 'table')) {
+ /* A start tag whose tag name is one of: "caption", "col", "colgroup",
+ "tbody", "tfoot", "thead", or an end tag whose tag name is "table" */
+ } elseif (($token['type'] === HTML5::STARTTAG && in_array(
+ $token['name'],
+ array('caption', 'col', 'colgroup', 'tbody', 'tfoor', 'thead')
+ )) ||
+ ($token['type'] === HTML5::STARTTAG && $token['name'] === 'table')
+ ) {
/* If the stack of open elements does not have a tbody, thead, or
tfoot element in table scope, this is a parse error. Ignore the
token. (innerHTML case) */
- if(!$this->elementInScope(array('tbody', 'thead', 'tfoot'), true)) {
+ if (!$this->elementInScope(array('tbody', 'thead', 'tfoot'), true)) {
// Ignore.
- /* Otherwise: */
+ /* Otherwise: */
} else {
/* Clear the stack back to a table body context. */
$this->clearStackToTableContext($clear);
@@ -2996,33 +3755,40 @@ class HTML5TreeConstructer {
/* Act as if an end tag with the same tag name as the current
node ("tbody", "tfoot", or "thead") had been seen, then
reprocess the current token. */
- $this->inTableBody(array(
- 'name' => end($this->stack)->nodeName,
- 'type' => HTML5::ENDTAG
- ));
+ $this->inTableBody(
+ array(
+ 'name' => end($this->stack)->nodeName,
+ 'type' => HTML5::ENDTAG
+ )
+ );
return $this->mainPhase($token);
}
- /* An end tag whose tag name is one of: "body", "caption", "col",
- "colgroup", "html", "td", "th", "tr" */
- } elseif($token['type'] === HTML5::ENDTAG && in_array($token['name'],
- array('body', 'caption', 'col', 'colgroup', 'html', 'td', 'th', 'tr'))) {
+ /* An end tag whose tag name is one of: "body", "caption", "col",
+ "colgroup", "html", "td", "th", "tr" */
+ } elseif ($token['type'] === HTML5::ENDTAG && in_array(
+ $token['name'],
+ array('body', 'caption', 'col', 'colgroup', 'html', 'td', 'th', 'tr')
+ )
+ ) {
/* Parse error. Ignore the token. */
- /* Anything else */
+ /* Anything else */
} else {
/* Process the token as if the insertion mode was "in table". */
$this->inTable($token);
}
}
- private function inRow($token) {
+ private function inRow($token)
+ {
$clear = array('tr', 'html');
/* A start tag whose tag name is one of: "th", "td" */
- if($token['type'] === HTML5::STARTTAG &&
- ($token['name'] === 'th' || $token['name'] === 'td')) {
+ if ($token['type'] === HTML5::STARTTAG &&
+ ($token['name'] === 'th' || $token['name'] === 'td')
+ ) {
/* Clear the stack back to a table row context. */
$this->clearStackToTableContext($clear);
@@ -3035,15 +3801,15 @@ class HTML5TreeConstructer {
elements. */
$this->a_formatting[] = self::MARKER;
- /* An end tag whose tag name is "tr" */
- } elseif($token['type'] === HTML5::ENDTAG && $token['name'] === 'tr') {
+ /* An end tag whose tag name is "tr" */
+ } elseif ($token['type'] === HTML5::ENDTAG && $token['name'] === 'tr') {
/* If the stack of open elements does not have an element in table
scope with the same tag name as the token, this is a parse error.
Ignore the token. (innerHTML case) */
- if(!$this->elementInScope($token['name'], true)) {
+ if (!$this->elementInScope($token['name'], true)) {
// Ignore.
- /* Otherwise: */
+ /* Otherwise: */
} else {
/* Clear the stack back to a table row context. */
$this->clearStackToTableContext($clear);
@@ -3055,64 +3821,77 @@ class HTML5TreeConstructer {
$this->mode = self::IN_TBODY;
}
- /* A start tag whose tag name is one of: "caption", "col", "colgroup",
- "tbody", "tfoot", "thead", "tr" or an end tag whose tag name is "table" */
- } elseif($token['type'] === HTML5::STARTTAG && in_array($token['name'],
- array('caption', 'col', 'colgroup', 'tbody', 'tfoot', 'thead', 'tr'))) {
+ /* A start tag whose tag name is one of: "caption", "col", "colgroup",
+ "tbody", "tfoot", "thead", "tr" or an end tag whose tag name is "table" */
+ } elseif ($token['type'] === HTML5::STARTTAG && in_array(
+ $token['name'],
+ array('caption', 'col', 'colgroup', 'tbody', 'tfoot', 'thead', 'tr')
+ )
+ ) {
/* Act as if an end tag with the tag name "tr" had been seen, then,
if that token wasn't ignored, reprocess the current token. */
- $this->inRow(array(
- 'name' => 'tr',
- 'type' => HTML5::ENDTAG
- ));
+ $this->inRow(
+ array(
+ 'name' => 'tr',
+ 'type' => HTML5::ENDTAG
+ )
+ );
return $this->inCell($token);
- /* An end tag whose tag name is one of: "tbody", "tfoot", "thead" */
- } elseif($token['type'] === HTML5::ENDTAG &&
- in_array($token['name'], array('tbody', 'tfoot', 'thead'))) {
+ /* An end tag whose tag name is one of: "tbody", "tfoot", "thead" */
+ } elseif ($token['type'] === HTML5::ENDTAG &&
+ in_array($token['name'], array('tbody', 'tfoot', 'thead'))
+ ) {
/* If the stack of open elements does not have an element in table
scope with the same tag name as the token, this is a parse error.
Ignore the token. */
- if(!$this->elementInScope($token['name'], true)) {
+ if (!$this->elementInScope($token['name'], true)) {
// Ignore.
- /* Otherwise: */
+ /* Otherwise: */
} else {
/* Otherwise, act as if an end tag with the tag name "tr" had
been seen, then reprocess the current token. */
- $this->inRow(array(
- 'name' => 'tr',
- 'type' => HTML5::ENDTAG
- ));
+ $this->inRow(
+ array(
+ 'name' => 'tr',
+ 'type' => HTML5::ENDTAG
+ )
+ );
return $this->inCell($token);
}
- /* An end tag whose tag name is one of: "body", "caption", "col",
- "colgroup", "html", "td", "th" */
- } elseif($token['type'] === HTML5::ENDTAG && in_array($token['name'],
- array('body', 'caption', 'col', 'colgroup', 'html', 'td', 'th', 'tr'))) {
+ /* An end tag whose tag name is one of: "body", "caption", "col",
+ "colgroup", "html", "td", "th" */
+ } elseif ($token['type'] === HTML5::ENDTAG && in_array(
+ $token['name'],
+ array('body', 'caption', 'col', 'colgroup', 'html', 'td', 'th', 'tr')
+ )
+ ) {
/* Parse error. Ignore the token. */
- /* Anything else */
+ /* Anything else */
} else {
/* Process the token as if the insertion mode was "in table". */
$this->inTable($token);
}
}
- private function inCell($token) {
+ private function inCell($token)
+ {
/* An end tag whose tag name is one of: "td", "th" */
- if($token['type'] === HTML5::ENDTAG &&
- ($token['name'] === 'td' || $token['name'] === 'th')) {
+ if ($token['type'] === HTML5::ENDTAG &&
+ ($token['name'] === 'td' || $token['name'] === 'th')
+ ) {
/* If the stack of open elements does not have an element in table
scope with the same tag name as that of the token, then this is a
parse error and the token must be ignored. */
- if(!$this->elementInScope($token['name'], true)) {
+ if (!$this->elementInScope($token['name'], true)) {
// Ignore.
- /* Otherwise: */
+ /* Otherwise: */
} else {
/* Generate implied end tags, except for elements with the same
tag name as the token. */
@@ -3124,11 +3903,11 @@ class HTML5TreeConstructer {
/* Pop elements from this stack until an element with the same
tag name as the token has been popped from the stack. */
- while(true) {
+ while (true) {
$node = end($this->stack)->nodeName;
array_pop($this->stack);
- if($node === $token['name']) {
+ if ($node === $token['name']) {
break;
}
}
@@ -3142,178 +3921,223 @@ class HTML5TreeConstructer {
$this->mode = self::IN_ROW;
}
- /* A start tag whose tag name is one of: "caption", "col", "colgroup",
- "tbody", "td", "tfoot", "th", "thead", "tr" */
- } elseif($token['type'] === HTML5::STARTTAG && in_array($token['name'],
- array('caption', 'col', 'colgroup', 'tbody', 'td', 'tfoot', 'th',
- 'thead', 'tr'))) {
+ /* A start tag whose tag name is one of: "caption", "col", "colgroup",
+ "tbody", "td", "tfoot", "th", "thead", "tr" */
+ } elseif ($token['type'] === HTML5::STARTTAG && in_array(
+ $token['name'],
+ array(
+ 'caption',
+ 'col',
+ 'colgroup',
+ 'tbody',
+ 'td',
+ 'tfoot',
+ 'th',
+ 'thead',
+ 'tr'
+ )
+ )
+ ) {
/* If the stack of open elements does not have a td or th element
in table scope, then this is a parse error; ignore the token.
(innerHTML case) */
- if(!$this->elementInScope(array('td', 'th'), true)) {
+ if (!$this->elementInScope(array('td', 'th'), true)) {
// Ignore.
- /* Otherwise, close the cell (see below) and reprocess the current
- token. */
+ /* Otherwise, close the cell (see below) and reprocess the current
+ token. */
} else {
$this->closeCell();
return $this->inRow($token);
}
- /* A start tag whose tag name is one of: "caption", "col", "colgroup",
- "tbody", "td", "tfoot", "th", "thead", "tr" */
- } elseif($token['type'] === HTML5::STARTTAG && in_array($token['name'],
- array('caption', 'col', 'colgroup', 'tbody', 'td', 'tfoot', 'th',
- 'thead', 'tr'))) {
+ /* A start tag whose tag name is one of: "caption", "col", "colgroup",
+ "tbody", "td", "tfoot", "th", "thead", "tr" */
+ } elseif ($token['type'] === HTML5::STARTTAG && in_array(
+ $token['name'],
+ array(
+ 'caption',
+ 'col',
+ 'colgroup',
+ 'tbody',
+ 'td',
+ 'tfoot',
+ 'th',
+ 'thead',
+ 'tr'
+ )
+ )
+ ) {
/* If the stack of open elements does not have a td or th element
in table scope, then this is a parse error; ignore the token.
(innerHTML case) */
- if(!$this->elementInScope(array('td', 'th'), true)) {
+ if (!$this->elementInScope(array('td', 'th'), true)) {
// Ignore.
- /* Otherwise, close the cell (see below) and reprocess the current
- token. */
+ /* Otherwise, close the cell (see below) and reprocess the current
+ token. */
} else {
$this->closeCell();
return $this->inRow($token);
}
- /* An end tag whose tag name is one of: "body", "caption", "col",
- "colgroup", "html" */
- } elseif($token['type'] === HTML5::ENDTAG && in_array($token['name'],
- array('body', 'caption', 'col', 'colgroup', 'html'))) {
+ /* An end tag whose tag name is one of: "body", "caption", "col",
+ "colgroup", "html" */
+ } elseif ($token['type'] === HTML5::ENDTAG && in_array(
+ $token['name'],
+ array('body', 'caption', 'col', 'colgroup', 'html')
+ )
+ ) {
/* Parse error. Ignore the token. */
- /* An end tag whose tag name is one of: "table", "tbody", "tfoot",
- "thead", "tr" */
- } elseif($token['type'] === HTML5::ENDTAG && in_array($token['name'],
- array('table', 'tbody', 'tfoot', 'thead', 'tr'))) {
+ /* An end tag whose tag name is one of: "table", "tbody", "tfoot",
+ "thead", "tr" */
+ } elseif ($token['type'] === HTML5::ENDTAG && in_array(
+ $token['name'],
+ array('table', 'tbody', 'tfoot', 'thead', 'tr')
+ )
+ ) {
/* If the stack of open elements does not have an element in table
scope with the same tag name as that of the token (which can only
happen for "tbody", "tfoot" and "thead", or, in the innerHTML case),
then this is a parse error and the token must be ignored. */
- if(!$this->elementInScope($token['name'], true)) {
+ if (!$this->elementInScope($token['name'], true)) {
// Ignore.
- /* Otherwise, close the cell (see below) and reprocess the current
- token. */
+ /* Otherwise, close the cell (see below) and reprocess the current
+ token. */
} else {
$this->closeCell();
return $this->inRow($token);
}
- /* Anything else */
+ /* Anything else */
} else {
/* Process the token as if the insertion mode was "in body". */
$this->inBody($token);
}
}
- private function inSelect($token) {
+ private function inSelect($token)
+ {
/* Handle the token as follows: */
/* A character token */
- if($token['type'] === HTML5::CHARACTR) {
+ if ($token['type'] === HTML5::CHARACTR) {
/* Append the token's character to the current node. */
$this->insertText($token['data']);
- /* A comment token */
- } elseif($token['type'] === HTML5::COMMENT) {
+ /* A comment token */
+ } elseif ($token['type'] === HTML5::COMMENT) {
/* Append a Comment node to the current node with the data
attribute set to the data given in the comment token. */
$this->insertComment($token['data']);
- /* A start tag token whose tag name is "option" */
- } elseif($token['type'] === HTML5::STARTTAG &&
- $token['name'] === 'option') {
+ /* A start tag token whose tag name is "option" */
+ } elseif ($token['type'] === HTML5::STARTTAG &&
+ $token['name'] === 'option'
+ ) {
/* If the current node is an option element, act as if an end tag
with the tag name "option" had been seen. */
- if(end($this->stack)->nodeName === 'option') {
- $this->inSelect(array(
- 'name' => 'option',
- 'type' => HTML5::ENDTAG
- ));
+ if (end($this->stack)->nodeName === 'option') {
+ $this->inSelect(
+ array(
+ 'name' => 'option',
+ 'type' => HTML5::ENDTAG
+ )
+ );
}
/* Insert an HTML element for the token. */
$this->insertElement($token);
- /* A start tag token whose tag name is "optgroup" */
- } elseif($token['type'] === HTML5::STARTTAG &&
- $token['name'] === 'optgroup') {
+ /* A start tag token whose tag name is "optgroup" */
+ } elseif ($token['type'] === HTML5::STARTTAG &&
+ $token['name'] === 'optgroup'
+ ) {
/* If the current node is an option element, act as if an end tag
with the tag name "option" had been seen. */
- if(end($this->stack)->nodeName === 'option') {
- $this->inSelect(array(
- 'name' => 'option',
- 'type' => HTML5::ENDTAG
- ));
+ if (end($this->stack)->nodeName === 'option') {
+ $this->inSelect(
+ array(
+ 'name' => 'option',
+ 'type' => HTML5::ENDTAG
+ )
+ );
}
/* If the current node is an optgroup element, act as if an end tag
with the tag name "optgroup" had been seen. */
- if(end($this->stack)->nodeName === 'optgroup') {
- $this->inSelect(array(
- 'name' => 'optgroup',
- 'type' => HTML5::ENDTAG
- ));
+ if (end($this->stack)->nodeName === 'optgroup') {
+ $this->inSelect(
+ array(
+ 'name' => 'optgroup',
+ 'type' => HTML5::ENDTAG
+ )
+ );
}
/* Insert an HTML element for the token. */
$this->insertElement($token);
- /* An end tag token whose tag name is "optgroup" */
- } elseif($token['type'] === HTML5::ENDTAG &&
- $token['name'] === 'optgroup') {
+ /* An end tag token whose tag name is "optgroup" */
+ } elseif ($token['type'] === HTML5::ENDTAG &&
+ $token['name'] === 'optgroup'
+ ) {
/* First, if the current node is an option element, and the node
immediately before it in the stack of open elements is an optgroup
element, then act as if an end tag with the tag name "option" had
been seen. */
$elements_in_stack = count($this->stack);
- if($this->stack[$elements_in_stack - 1]->nodeName === 'option' &&
- $this->stack[$elements_in_stack - 2]->nodeName === 'optgroup') {
- $this->inSelect(array(
- 'name' => 'option',
- 'type' => HTML5::ENDTAG
- ));
+ if ($this->stack[$elements_in_stack - 1]->nodeName === 'option' &&
+ $this->stack[$elements_in_stack - 2]->nodeName === 'optgroup'
+ ) {
+ $this->inSelect(
+ array(
+ 'name' => 'option',
+ 'type' => HTML5::ENDTAG
+ )
+ );
}
/* If the current node is an optgroup element, then pop that node
from the stack of open elements. Otherwise, this is a parse error,
ignore the token. */
- if($this->stack[$elements_in_stack - 1] === 'optgroup') {
+ if ($this->stack[$elements_in_stack - 1] === 'optgroup') {
array_pop($this->stack);
}
- /* An end tag token whose tag name is "option" */
- } elseif($token['type'] === HTML5::ENDTAG &&
- $token['name'] === 'option') {
+ /* An end tag token whose tag name is "option" */
+ } elseif ($token['type'] === HTML5::ENDTAG &&
+ $token['name'] === 'option'
+ ) {
/* If the current node is an option element, then pop that node
from the stack of open elements. Otherwise, this is a parse error,
ignore the token. */
- if(end($this->stack)->nodeName === 'option') {
+ if (end($this->stack)->nodeName === 'option') {
array_pop($this->stack);
}
- /* An end tag whose tag name is "select" */
- } elseif($token['type'] === HTML5::ENDTAG &&
- $token['name'] === 'select') {
+ /* An end tag whose tag name is "select" */
+ } elseif ($token['type'] === HTML5::ENDTAG &&
+ $token['name'] === 'select'
+ ) {
/* If the stack of open elements does not have an element in table
scope with the same tag name as the token, this is a parse error.
Ignore the token. (innerHTML case) */
- if(!$this->elementInScope($token['name'], true)) {
+ if (!$this->elementInScope($token['name'], true)) {
// w/e
- /* Otherwise: */
+ /* Otherwise: */
} else {
/* Pop elements from the stack of open elements until a select
element has been popped from the stack. */
- while(true) {
+ while (true) {
$current = end($this->stack)->nodeName;
array_pop($this->stack);
- if($current === 'select') {
+ if ($current === 'select') {
break;
}
}
@@ -3322,20 +4146,35 @@ class HTML5TreeConstructer {
$this->resetInsertionMode();
}
- /* A start tag whose tag name is "select" */
- } elseif($token['name'] === 'select' &&
- $token['type'] === HTML5::STARTTAG) {
+ /* A start tag whose tag name is "select" */
+ } elseif ($token['name'] === 'select' &&
+ $token['type'] === HTML5::STARTTAG
+ ) {
/* Parse error. Act as if the token had been an end tag with the
tag name "select" instead. */
- $this->inSelect(array(
- 'name' => 'select',
- 'type' => HTML5::ENDTAG
- ));
-
- /* An end tag whose tag name is one of: "caption", "table", "tbody",
- "tfoot", "thead", "tr", "td", "th" */
- } elseif(in_array($token['name'], array('caption', 'table', 'tbody',
- 'tfoot', 'thead', 'tr', 'td', 'th')) && $token['type'] === HTML5::ENDTAG) {
+ $this->inSelect(
+ array(
+ 'name' => 'select',
+ 'type' => HTML5::ENDTAG
+ )
+ );
+
+ /* An end tag whose tag name is one of: "caption", "table", "tbody",
+ "tfoot", "thead", "tr", "td", "th" */
+ } elseif (in_array(
+ $token['name'],
+ array(
+ 'caption',
+ 'table',
+ 'tbody',
+ 'tfoot',
+ 'thead',
+ 'tr',
+ 'td',
+ 'th'
+ )
+ ) && $token['type'] === HTML5::ENDTAG
+ ) {
/* Parse error. */
// w/e
@@ -3343,43 +4182,47 @@ class HTML5TreeConstructer {
the same tag name as that of the token, then act as if an end tag
with the tag name "select" had been seen, and reprocess the token.
Otherwise, ignore the token. */
- if($this->elementInScope($token['name'], true)) {
- $this->inSelect(array(
- 'name' => 'select',
- 'type' => HTML5::ENDTAG
- ));
+ if ($this->elementInScope($token['name'], true)) {
+ $this->inSelect(
+ array(
+ 'name' => 'select',
+ 'type' => HTML5::ENDTAG
+ )
+ );
$this->mainPhase($token);
}
- /* Anything else */
+ /* Anything else */
} else {
/* Parse error. Ignore the token. */
}
}
- private function afterBody($token) {
+ private function afterBody($token)
+ {
/* Handle the token as follows: */
/* A character token that is one of one of U+0009 CHARACTER TABULATION,
U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
or U+0020 SPACE */
- if($token['type'] === HTML5::CHARACTR &&
- preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) {
+ if ($token['type'] === HTML5::CHARACTR &&
+ preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])
+ ) {
/* Process the token as it would be processed if the insertion mode
was "in body". */
$this->inBody($token);
- /* A comment token */
- } elseif($token['type'] === HTML5::COMMENT) {
+ /* A comment token */
+ } elseif ($token['type'] === HTML5::COMMENT) {
/* Append a Comment node to the first element in the stack of open
elements (the html element), with the data attribute set to the
data given in the comment token. */
$comment = $this->dom->createComment($token['data']);
$this->stack[0]->appendChild($comment);
- /* An end tag with the tag name "html" */
- } elseif($token['type'] === HTML5::ENDTAG && $token['name'] === 'html') {
+ /* An end tag with the tag name "html" */
+ } elseif ($token['type'] === HTML5::ENDTAG && $token['name'] === 'html') {
/* If the parser was originally created in order to handle the
setting of an element's innerHTML attribute, this is a parse error;
ignore the token. (The element will be an html element in this
@@ -3388,7 +4231,7 @@ class HTML5TreeConstructer {
/* Otherwise, switch to the trailing end phase. */
$this->phase = self::END_PHASE;
- /* Anything else */
+ /* Anything else */
} else {
/* Parse error. Set the insertion mode to "in body" and reprocess
the token. */
@@ -3397,34 +4240,38 @@ class HTML5TreeConstructer {
}
}
- private function inFrameset($token) {
+ private function inFrameset($token)
+ {
/* Handle the token as follows: */
/* A character token that is one of one of U+0009 CHARACTER TABULATION,
U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
U+000D CARRIAGE RETURN (CR), or U+0020 SPACE */
- if($token['type'] === HTML5::CHARACTR &&
- preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) {
+ if ($token['type'] === HTML5::CHARACTR &&
+ preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])
+ ) {
/* Append the character to the current node. */
$this->insertText($token['data']);
- /* A comment token */
- } elseif($token['type'] === HTML5::COMMENT) {
+ /* A comment token */
+ } elseif ($token['type'] === HTML5::COMMENT) {
/* Append a Comment node to the current node with the data
attribute set to the data given in the comment token. */
$this->insertComment($token['data']);
- /* A start tag with the tag name "frameset" */
- } elseif($token['name'] === 'frameset' &&
- $token['type'] === HTML5::STARTTAG) {
+ /* A start tag with the tag name "frameset" */
+ } elseif ($token['name'] === 'frameset' &&
+ $token['type'] === HTML5::STARTTAG
+ ) {
$this->insertElement($token);
- /* An end tag with the tag name "frameset" */
- } elseif($token['name'] === 'frameset' &&
- $token['type'] === HTML5::ENDTAG) {
+ /* An end tag with the tag name "frameset" */
+ } elseif ($token['name'] === 'frameset' &&
+ $token['type'] === HTML5::ENDTAG
+ ) {
/* If the current node is the root html element, then this is a
parse error; ignore the token. (innerHTML case) */
- if(end($this->stack)->nodeName === 'html') {
+ if (end($this->stack)->nodeName === 'html') {
// Ignore
} else {
@@ -3439,103 +4286,113 @@ class HTML5TreeConstructer {
$this->mode = self::AFTR_FRAME;
}
- /* A start tag with the tag name "frame" */
- } elseif($token['name'] === 'frame' &&
- $token['type'] === HTML5::STARTTAG) {
+ /* A start tag with the tag name "frame" */
+ } elseif ($token['name'] === 'frame' &&
+ $token['type'] === HTML5::STARTTAG
+ ) {
/* Insert an HTML element for the token. */
$this->insertElement($token);
/* Immediately pop the current node off the stack of open elements. */
array_pop($this->stack);
- /* A start tag with the tag name "noframes" */
- } elseif($token['name'] === 'noframes' &&
- $token['type'] === HTML5::STARTTAG) {
+ /* A start tag with the tag name "noframes" */
+ } elseif ($token['name'] === 'noframes' &&
+ $token['type'] === HTML5::STARTTAG
+ ) {
/* Process the token as if the insertion mode had been "in body". */
$this->inBody($token);
- /* Anything else */
+ /* Anything else */
} else {
/* Parse error. Ignore the token. */
}
}
- private function afterFrameset($token) {
+ private function afterFrameset($token)
+ {
/* Handle the token as follows: */
/* A character token that is one of one of U+0009 CHARACTER TABULATION,
U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
U+000D CARRIAGE RETURN (CR), or U+0020 SPACE */
- if($token['type'] === HTML5::CHARACTR &&
- preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) {
+ if ($token['type'] === HTML5::CHARACTR &&
+ preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])
+ ) {
/* Append the character to the current node. */
$this->insertText($token['data']);
- /* A comment token */
- } elseif($token['type'] === HTML5::COMMENT) {
+ /* A comment token */
+ } elseif ($token['type'] === HTML5::COMMENT) {
/* Append a Comment node to the current node with the data
attribute set to the data given in the comment token. */
$this->insertComment($token['data']);
- /* An end tag with the tag name "html" */
- } elseif($token['name'] === 'html' &&
- $token['type'] === HTML5::ENDTAG) {
+ /* An end tag with the tag name "html" */
+ } elseif ($token['name'] === 'html' &&
+ $token['type'] === HTML5::ENDTAG
+ ) {
/* Switch to the trailing end phase. */
$this->phase = self::END_PHASE;
- /* A start tag with the tag name "noframes" */
- } elseif($token['name'] === 'noframes' &&
- $token['type'] === HTML5::STARTTAG) {
+ /* A start tag with the tag name "noframes" */
+ } elseif ($token['name'] === 'noframes' &&
+ $token['type'] === HTML5::STARTTAG
+ ) {
/* Process the token as if the insertion mode had been "in body". */
$this->inBody($token);
- /* Anything else */
+ /* Anything else */
} else {
/* Parse error. Ignore the token. */
}
}
- private function trailingEndPhase($token) {
+ private function trailingEndPhase($token)
+ {
/* After the main phase, as each token is emitted from the tokenisation
stage, it must be processed as described in this section. */
/* A DOCTYPE token */
- if($token['type'] === HTML5::DOCTYPE) {
+ if ($token['type'] === HTML5::DOCTYPE) {
// Parse error. Ignore the token.
- /* A comment token */
- } elseif($token['type'] === HTML5::COMMENT) {
+ /* A comment token */
+ } elseif ($token['type'] === HTML5::COMMENT) {
/* Append a Comment node to the Document object with the data
attribute set to the data given in the comment token. */
$comment = $this->dom->createComment($token['data']);
$this->dom->appendChild($comment);
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE */
- } elseif($token['type'] === HTML5::CHARACTR &&
- preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) {
+ /* A character token that is one of one of U+0009 CHARACTER TABULATION,
+ U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
+ or U+0020 SPACE */
+ } elseif ($token['type'] === HTML5::CHARACTR &&
+ preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])
+ ) {
/* Process the token as it would be processed in the main phase. */
$this->mainPhase($token);
- /* A character token that is not one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE. Or a start tag token. Or an end tag token. */
- } elseif(($token['type'] === HTML5::CHARACTR &&
- preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) ||
- $token['type'] === HTML5::STARTTAG || $token['type'] === HTML5::ENDTAG) {
+ /* A character token that is not one of U+0009 CHARACTER TABULATION,
+ U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
+ or U+0020 SPACE. Or a start tag token. Or an end tag token. */
+ } elseif (($token['type'] === HTML5::CHARACTR &&
+ preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) ||
+ $token['type'] === HTML5::STARTTAG || $token['type'] === HTML5::ENDTAG
+ ) {
/* Parse error. Switch back to the main phase and reprocess the
token. */
$this->phase = self::MAIN_PHASE;
return $this->mainPhase($token);
- /* An end-of-file token */
- } elseif($token['type'] === HTML5::EOF) {
+ /* An end-of-file token */
+ } elseif ($token['type'] === HTML5::EOF) {
/* OMG DONE!! */
}
}
- private function insertElement($token, $append = true, $check = false) {
+ private function insertElement($token, $append = true, $check = false)
+ {
// Proprietary workaround for libxml2's limitations with tag names
if ($check) {
// Slightly modified HTML5 tag-name modification,
@@ -3544,13 +4401,15 @@ class HTML5TreeConstructer {
// Remove leading hyphens and numbers
$token['name'] = ltrim($token['name'], '-0..9');
// In theory, this should ever be needed, but just in case
- if ($token['name'] === '') $token['name'] = 'span'; // arbitrary generic choice
+ if ($token['name'] === '') {
+ $token['name'] = 'span';
+ } // arbitrary generic choice
}
-
+
$el = $this->dom->createElement($token['name']);
- foreach($token['attr'] as $attr) {
- if(!$el->hasAttribute($attr['name'])) {
+ foreach ($token['attr'] as $attr) {
+ if (!$el->hasAttribute($attr['name'])) {
$el->setAttribute($attr['name'], $attr['value']);
}
}
@@ -3561,48 +4420,54 @@ class HTML5TreeConstructer {
return $el;
}
- private function insertText($data) {
+ private function insertText($data)
+ {
$text = $this->dom->createTextNode($data);
$this->appendToRealParent($text);
}
- private function insertComment($data) {
+ private function insertComment($data)
+ {
$comment = $this->dom->createComment($data);
$this->appendToRealParent($comment);
}
- private function appendToRealParent($node) {
- if($this->foster_parent === null) {
+ private function appendToRealParent($node)
+ {
+ if ($this->foster_parent === null) {
end($this->stack)->appendChild($node);
- } elseif($this->foster_parent !== null) {
+ } elseif ($this->foster_parent !== null) {
/* If the foster parent element is the parent element of the
last table element in the stack of open elements, then the new
node must be inserted immediately before the last table element
in the stack of open elements in the foster parent element;
otherwise, the new node must be appended to the foster parent
element. */
- for($n = count($this->stack) - 1; $n >= 0; $n--) {
- if($this->stack[$n]->nodeName === 'table' &&
- $this->stack[$n]->parentNode !== null) {
+ for ($n = count($this->stack) - 1; $n >= 0; $n--) {
+ if ($this->stack[$n]->nodeName === 'table' &&
+ $this->stack[$n]->parentNode !== null
+ ) {
$table = $this->stack[$n];
break;
}
}
- if(isset($table) && $this->foster_parent->isSameNode($table->parentNode))
+ if (isset($table) && $this->foster_parent->isSameNode($table->parentNode)) {
$this->foster_parent->insertBefore($node, $table);
- else
+ } else {
$this->foster_parent->appendChild($node);
+ }
$this->foster_parent = null;
}
}
- private function elementInScope($el, $table = false) {
- if(is_array($el)) {
- foreach($el as $element) {
- if($this->elementInScope($element, $table)) {
+ private function elementInScope($el, $table = false)
+ {
+ if (is_array($el)) {
+ foreach ($el as $element) {
+ if ($this->elementInScope($element, $table)) {
return true;
}
}
@@ -3612,28 +4477,38 @@ class HTML5TreeConstructer {
$leng = count($this->stack);
- for($n = 0; $n < $leng; $n++) {
+ for ($n = 0; $n < $leng; $n++) {
/* 1. Initialise node to be the current node (the bottommost node of
the stack). */
$node = $this->stack[$leng - 1 - $n];
- if($node->tagName === $el) {
+ if ($node->tagName === $el) {
/* 2. If node is the target node, terminate in a match state. */
return true;
- } elseif($node->tagName === 'table') {
+ } elseif ($node->tagName === 'table') {
/* 3. Otherwise, if node is a table element, terminate in a failure
state. */
return false;
- } elseif($table === true && in_array($node->tagName, array('caption', 'td',
- 'th', 'button', 'marquee', 'object'))) {
+ } elseif ($table === true && in_array(
+ $node->tagName,
+ array(
+ 'caption',
+ 'td',
+ 'th',
+ 'button',
+ 'marquee',
+ 'object'
+ )
+ )
+ ) {
/* 4. Otherwise, if the algorithm is the "has an element in scope"
variant (rather than the "has an element in table scope" variant),
and node is one of the following, terminate in a failure state. */
return false;
- } elseif($node === $node->ownerDocument->documentElement) {
+ } elseif ($node === $node->ownerDocument->documentElement) {
/* 5. Otherwise, if node is an html element (root element), terminate
in a failure state. (This can only happen if the node is the topmost
node of the stack of open elements, and prevents the next step from
@@ -3648,12 +4523,13 @@ class HTML5TreeConstructer {
}
}
- private function reconstructActiveFormattingElements() {
+ private function reconstructActiveFormattingElements()
+ {
/* 1. If there are no entries in the list of active formatting elements,
then there is nothing to reconstruct; stop this algorithm. */
$formatting_elements = count($this->a_formatting);
- if($formatting_elements === 0) {
+ if ($formatting_elements === 0) {
return false;
}
@@ -3665,14 +4541,14 @@ class HTML5TreeConstructer {
formatting elements is a marker, or if it is an element that is in the
stack of open elements, then there is nothing to reconstruct; stop this
algorithm. */
- if($entry === self::MARKER || in_array($entry, $this->stack, true)) {
+ if ($entry === self::MARKER || in_array($entry, $this->stack, true)) {
return false;
}
- for($a = $formatting_elements - 1; $a >= 0; true) {
+ for ($a = $formatting_elements - 1; $a >= 0; true) {
/* 4. If there are no entries before entry in the list of active
formatting elements, then jump to step 8. */
- if($a === 0) {
+ if ($a === 0) {
$step_seven = false;
break;
}
@@ -3684,15 +4560,15 @@ class HTML5TreeConstructer {
/* 6. If entry is neither a marker nor an element that is also in
thetack of open elements, go to step 4. */
- if($entry === self::MARKER || in_array($entry, $this->stack, true)) {
+ if ($entry === self::MARKER || in_array($entry, $this->stack, true)) {
break;
}
}
- while(true) {
+ while (true) {
/* 7. Let entry be the element one later than entry in the list of
active formatting elements. */
- if(isset($step_seven) && $step_seven === true) {
+ if (isset($step_seven) && $step_seven === true) {
$a++;
$entry = $this->a_formatting[$a];
}
@@ -3711,7 +4587,7 @@ class HTML5TreeConstructer {
/* 11. If the entry for clone in the list of active formatting
elements is not the last entry in the list, return to step 7. */
- if(end($this->a_formatting) !== $clone) {
+ if (end($this->a_formatting) !== $clone) {
$step_seven = true;
} else {
break;
@@ -3719,12 +4595,13 @@ class HTML5TreeConstructer {
}
}
- private function clearTheActiveFormattingElementsUpToTheLastMarker() {
+ private function clearTheActiveFormattingElementsUpToTheLastMarker()
+ {
/* When the steps below require the UA to clear the list of active
formatting elements up to the last marker, the UA must perform the
following steps: */
- while(true) {
+ while (true) {
/* 1. Let entry be the last (most recently added) entry in the list
of active formatting elements. */
$entry = end($this->a_formatting);
@@ -3734,13 +4611,14 @@ class HTML5TreeConstructer {
/* 3. If entry was a marker, then stop the algorithm at this point.
The list has been cleared up to the last marker. */
- if($entry === self::MARKER) {
+ if ($entry === self::MARKER) {
break;
}
}
}
- private function generateImpliedEndTags($exclude = array()) {
+ private function generateImpliedEndTags($exclude = array())
+ {
/* When the steps below require the UA to generate implied end tags,
then, if the current node is a dd element, a dt element, an li element,
a p element, a td element, a th element, or a tr element, the UA must
@@ -3749,36 +4627,36 @@ class HTML5TreeConstructer {
$node = end($this->stack);
$elements = array_diff(array('dd', 'dt', 'li', 'p', 'td', 'th', 'tr'), $exclude);
- while(in_array(end($this->stack)->nodeName, $elements)) {
+ while (in_array(end($this->stack)->nodeName, $elements)) {
array_pop($this->stack);
}
}
- private function getElementCategory($node) {
+ private function getElementCategory($node)
+ {
$name = $node->tagName;
- if(in_array($name, $this->special))
+ if (in_array($name, $this->special)) {
return self::SPECIAL;
-
- elseif(in_array($name, $this->scoping))
+ } elseif (in_array($name, $this->scoping)) {
return self::SCOPING;
-
- elseif(in_array($name, $this->formatting))
+ } elseif (in_array($name, $this->formatting)) {
return self::FORMATTING;
-
- else
+ } else {
return self::PHRASING;
+ }
}
- private function clearStackToTableContext($elements) {
+ private function clearStackToTableContext($elements)
+ {
/* When the steps above require the UA to clear the stack back to a
table context, it means that the UA must, while the current node is not
a table element or an html element, pop elements from the stack of open
elements. If this causes any elements to be popped from the stack, then
this is a parse error. */
- while(true) {
+ while (true) {
$node = end($this->stack)->nodeName;
- if(in_array($node, $elements)) {
+ if (in_array($node, $elements)) {
break;
} else {
array_pop($this->stack);
@@ -3786,12 +4664,13 @@ class HTML5TreeConstructer {
}
}
- private function resetInsertionMode() {
+ private function resetInsertionMode()
+ {
/* 1. Let last be false. */
$last = false;
$leng = count($this->stack);
- for($n = $leng - 1; $n >= 0; $n--) {
+ for ($n = $leng - 1; $n >= 0; $n--) {
/* 2. Let node be the last node in the stack of open elements. */
$node = $this->stack[$n];
@@ -3799,108 +4678,111 @@ class HTML5TreeConstructer {
set last to true. If the element whose innerHTML attribute is being
set is neither a td element nor a th element, then set node to the
element whose innerHTML attribute is being set. (innerHTML case) */
- if($this->stack[0]->isSameNode($node)) {
+ if ($this->stack[0]->isSameNode($node)) {
$last = true;
}
/* 4. If node is a select element, then switch the insertion mode to
"in select" and abort these steps. (innerHTML case) */
- if($node->nodeName === 'select') {
+ if ($node->nodeName === 'select') {
$this->mode = self::IN_SELECT;
break;
- /* 5. If node is a td or th element, then switch the insertion mode
- to "in cell" and abort these steps. */
- } elseif($node->nodeName === 'td' || $node->nodeName === 'th') {
+ /* 5. If node is a td or th element, then switch the insertion mode
+ to "in cell" and abort these steps. */
+ } elseif ($node->nodeName === 'td' || $node->nodeName === 'th') {
$this->mode = self::IN_CELL;
break;
- /* 6. If node is a tr element, then switch the insertion mode to
- "in row" and abort these steps. */
- } elseif($node->nodeName === 'tr') {
+ /* 6. If node is a tr element, then switch the insertion mode to
+ "in row" and abort these steps. */
+ } elseif ($node->nodeName === 'tr') {
$this->mode = self::IN_ROW;
break;
- /* 7. If node is a tbody, thead, or tfoot element, then switch the
- insertion mode to "in table body" and abort these steps. */
- } elseif(in_array($node->nodeName, array('tbody', 'thead', 'tfoot'))) {
+ /* 7. If node is a tbody, thead, or tfoot element, then switch the
+ insertion mode to "in table body" and abort these steps. */
+ } elseif (in_array($node->nodeName, array('tbody', 'thead', 'tfoot'))) {
$this->mode = self::IN_TBODY;
break;
- /* 8. If node is a caption element, then switch the insertion mode
- to "in caption" and abort these steps. */
- } elseif($node->nodeName === 'caption') {
+ /* 8. If node is a caption element, then switch the insertion mode
+ to "in caption" and abort these steps. */
+ } elseif ($node->nodeName === 'caption') {
$this->mode = self::IN_CAPTION;
break;
- /* 9. If node is a colgroup element, then switch the insertion mode
- to "in column group" and abort these steps. (innerHTML case) */
- } elseif($node->nodeName === 'colgroup') {
+ /* 9. If node is a colgroup element, then switch the insertion mode
+ to "in column group" and abort these steps. (innerHTML case) */
+ } elseif ($node->nodeName === 'colgroup') {
$this->mode = self::IN_CGROUP;
break;
- /* 10. If node is a table element, then switch the insertion mode
- to "in table" and abort these steps. */
- } elseif($node->nodeName === 'table') {
+ /* 10. If node is a table element, then switch the insertion mode
+ to "in table" and abort these steps. */
+ } elseif ($node->nodeName === 'table') {
$this->mode = self::IN_TABLE;
break;
- /* 11. If node is a head element, then switch the insertion mode
- to "in body" ("in body"! not "in head"!) and abort these steps.
- (innerHTML case) */
- } elseif($node->nodeName === 'head') {
+ /* 11. If node is a head element, then switch the insertion mode
+ to "in body" ("in body"! not "in head"!) and abort these steps.
+ (innerHTML case) */
+ } elseif ($node->nodeName === 'head') {
$this->mode = self::IN_BODY;
break;
- /* 12. If node is a body element, then switch the insertion mode to
- "in body" and abort these steps. */
- } elseif($node->nodeName === 'body') {
+ /* 12. If node is a body element, then switch the insertion mode to
+ "in body" and abort these steps. */
+ } elseif ($node->nodeName === 'body') {
$this->mode = self::IN_BODY;
break;
- /* 13. If node is a frameset element, then switch the insertion
- mode to "in frameset" and abort these steps. (innerHTML case) */
- } elseif($node->nodeName === 'frameset') {
+ /* 13. If node is a frameset element, then switch the insertion
+ mode to "in frameset" and abort these steps. (innerHTML case) */
+ } elseif ($node->nodeName === 'frameset') {
$this->mode = self::IN_FRAME;
break;
- /* 14. If node is an html element, then: if the head element
- pointer is null, switch the insertion mode to "before head",
- otherwise, switch the insertion mode to "after head". In either
- case, abort these steps. (innerHTML case) */
- } elseif($node->nodeName === 'html') {
+ /* 14. If node is an html element, then: if the head element
+ pointer is null, switch the insertion mode to "before head",
+ otherwise, switch the insertion mode to "after head". In either
+ case, abort these steps. (innerHTML case) */
+ } elseif ($node->nodeName === 'html') {
$this->mode = ($this->head_pointer === null)
? self::BEFOR_HEAD
: self::AFTER_HEAD;
break;
- /* 15. If last is true, then set the insertion mode to "in body"
- and abort these steps. (innerHTML case) */
- } elseif($last) {
+ /* 15. If last is true, then set the insertion mode to "in body"
+ and abort these steps. (innerHTML case) */
+ } elseif ($last) {
$this->mode = self::IN_BODY;
break;
}
}
}
- private function closeCell() {
+ private function closeCell()
+ {
/* If the stack of open elements has a td or th element in table scope,
then act as if an end tag token with that tag name had been seen. */
- foreach(array('td', 'th') as $cell) {
- if($this->elementInScope($cell, true)) {
- $this->inCell(array(
- 'name' => $cell,
- 'type' => HTML5::ENDTAG
- ));
+ foreach (array('td', 'th') as $cell) {
+ if ($this->elementInScope($cell, true)) {
+ $this->inCell(
+ array(
+ 'name' => $cell,
+ 'type' => HTML5::ENDTAG
+ )
+ );
break;
}
}
}
- public function save() {
+ public function save()
+ {
return $this->dom;
}
}
-?>
diff --git a/library/HTMLPurifier/Node.php b/library/HTMLPurifier/Node.php
new file mode 100644
index 000000000..3995fec9f
--- /dev/null
+++ b/library/HTMLPurifier/Node.php
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * Abstract base node class that all others inherit from.
+ *
+ * Why do we not use the DOM extension? (1) It is not always available,
+ * (2) it has funny constraints on the data it can represent,
+ * whereas we want a maximally flexible representation, and (3) its
+ * interface is a bit cumbersome.
+ */
+abstract class HTMLPurifier_Node
+{
+ /**
+ * Line number of the start token in the source document
+ * @type int
+ */
+ public $line;
+
+ /**
+ * Column number of the start token in the source document. Null if unknown.
+ * @type int
+ */
+ public $col;
+
+ /**
+ * Lookup array of processing that this token is exempt from.
+ * Currently, valid values are "ValidateAttributes".
+ * @type array
+ */
+ public $armor = array();
+
+ /**
+ * When true, this node should be ignored as non-existent.
+ *
+ * Who is responsible for ignoring dead nodes? FixNesting is
+ * responsible for removing them before passing on to child
+ * validators.
+ */
+ public $dead = false;
+
+ /**
+ * Returns a pair of start and end tokens, where the end token
+ * is null if it is not necessary. Does not include children.
+ * @type array
+ */
+ abstract public function toTokenPair();
+}
+
+// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Node/Comment.php b/library/HTMLPurifier/Node/Comment.php
new file mode 100644
index 000000000..38ba19394
--- /dev/null
+++ b/library/HTMLPurifier/Node/Comment.php
@@ -0,0 +1,36 @@
+<?php
+
+/**
+ * Concrete comment node class.
+ */
+class HTMLPurifier_Node_Comment extends HTMLPurifier_Node
+{
+ /**
+ * Character data within comment.
+ * @type string
+ */
+ public $data;
+
+ /**
+ * @type bool
+ */
+ public $is_whitespace = true;
+
+ /**
+ * Transparent constructor.
+ *
+ * @param string $data String comment data.
+ * @param int $line
+ * @param int $col
+ */
+ public function __construct($data, $line = null, $col = null)
+ {
+ $this->data = $data;
+ $this->line = $line;
+ $this->col = $col;
+ }
+
+ public function toTokenPair() {
+ return array(new HTMLPurifier_Token_Comment($this->data, $this->line, $this->col), null);
+ }
+}
diff --git a/library/HTMLPurifier/Node/Element.php b/library/HTMLPurifier/Node/Element.php
new file mode 100644
index 000000000..6cbf56dad
--- /dev/null
+++ b/library/HTMLPurifier/Node/Element.php
@@ -0,0 +1,59 @@
+<?php
+
+/**
+ * Concrete element node class.
+ */
+class HTMLPurifier_Node_Element extends HTMLPurifier_Node
+{
+ /**
+ * The lower-case name of the tag, like 'a', 'b' or 'blockquote'.
+ *
+ * @note Strictly speaking, XML tags are case sensitive, so we shouldn't
+ * be lower-casing them, but these tokens cater to HTML tags, which are
+ * insensitive.
+ * @type string
+ */
+ public $name;
+
+ /**
+ * Associative array of the node's attributes.
+ * @type array
+ */
+ public $attr = array();
+
+ /**
+ * List of child elements.
+ * @type array
+ */
+ public $children = array();
+
+ /**
+ * Does this use the <a></a> form or the </a> form, i.e.
+ * is it a pair of start/end tokens or an empty token.
+ * @bool
+ */
+ public $empty = false;
+
+ public $endCol = null, $endLine = null, $endArmor = array();
+
+ public function __construct($name, $attr = array(), $line = null, $col = null, $armor = array()) {
+ $this->name = $name;
+ $this->attr = $attr;
+ $this->line = $line;
+ $this->col = $col;
+ $this->armor = $armor;
+ }
+
+ public function toTokenPair() {
+ // XXX inefficiency here, normalization is not necessary
+ if ($this->empty) {
+ return array(new HTMLPurifier_Token_Empty($this->name, $this->attr, $this->line, $this->col, $this->armor), null);
+ } else {
+ $start = new HTMLPurifier_Token_Start($this->name, $this->attr, $this->line, $this->col, $this->armor);
+ $end = new HTMLPurifier_Token_End($this->name, array(), $this->endLine, $this->endCol, $this->endArmor);
+ //$end->start = $start;
+ return array($start, $end);
+ }
+ }
+}
+
diff --git a/library/HTMLPurifier/Node/Text.php b/library/HTMLPurifier/Node/Text.php
new file mode 100644
index 000000000..aec916647
--- /dev/null
+++ b/library/HTMLPurifier/Node/Text.php
@@ -0,0 +1,54 @@
+<?php
+
+/**
+ * Concrete text token class.
+ *
+ * Text tokens comprise of regular parsed character data (PCDATA) and raw
+ * character data (from the CDATA sections). Internally, their
+ * data is parsed with all entities expanded. Surprisingly, the text token
+ * does have a "tag name" called #PCDATA, which is how the DTD represents it
+ * in permissible child nodes.
+ */
+class HTMLPurifier_Node_Text extends HTMLPurifier_Node
+{
+
+ /**
+ * PCDATA tag name compatible with DTD, see
+ * HTMLPurifier_ChildDef_Custom for details.
+ * @type string
+ */
+ public $name = '#PCDATA';
+
+ /**
+ * @type string
+ */
+ public $data;
+ /**< Parsed character data of text. */
+
+ /**
+ * @type bool
+ */
+ public $is_whitespace;
+
+ /**< Bool indicating if node is whitespace. */
+
+ /**
+ * Constructor, accepts data and determines if it is whitespace.
+ * @param string $data String parsed character data.
+ * @param int $line
+ * @param int $col
+ */
+ public function __construct($data, $is_whitespace, $line = null, $col = null)
+ {
+ $this->data = $data;
+ $this->is_whitespace = $is_whitespace;
+ $this->line = $line;
+ $this->col = $col;
+ }
+
+ public function toTokenPair() {
+ return array(new HTMLPurifier_Token_Text($this->data, $this->line, $this->col), null);
+ }
+}
+
+// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/PercentEncoder.php b/library/HTMLPurifier/PercentEncoder.php
index a43c44f4c..18c8bbb00 100644
--- a/library/HTMLPurifier/PercentEncoder.php
+++ b/library/HTMLPurifier/PercentEncoder.php
@@ -13,17 +13,26 @@ class HTMLPurifier_PercentEncoder
/**
* Reserved characters to preserve when using encode().
+ * @type array
*/
protected $preserve = array();
/**
* String of characters that should be preserved while using encode().
+ * @param bool $preserve
*/
- public function __construct($preserve = false) {
+ public function __construct($preserve = false)
+ {
// unreserved letters, ought to const-ify
- for ($i = 48; $i <= 57; $i++) $this->preserve[$i] = true; // digits
- for ($i = 65; $i <= 90; $i++) $this->preserve[$i] = true; // upper-case
- for ($i = 97; $i <= 122; $i++) $this->preserve[$i] = true; // lower-case
+ for ($i = 48; $i <= 57; $i++) { // digits
+ $this->preserve[$i] = true;
+ }
+ for ($i = 65; $i <= 90; $i++) { // upper-case
+ $this->preserve[$i] = true;
+ }
+ for ($i = 97; $i <= 122; $i++) { // lower-case
+ $this->preserve[$i] = true;
+ }
$this->preserve[45] = true; // Dash -
$this->preserve[46] = true; // Period .
$this->preserve[95] = true; // Underscore _
@@ -44,13 +53,14 @@ class HTMLPurifier_PercentEncoder
* Assumes that the string has already been normalized, making any
* and all percent escape sequences valid. Percents will not be
* re-escaped, regardless of their status in $preserve
- * @param $string String to be encoded
- * @return Encoded string.
+ * @param string $string String to be encoded
+ * @return string Encoded string.
*/
- public function encode($string) {
+ public function encode($string)
+ {
$ret = '';
for ($i = 0, $c = strlen($string); $i < $c; $i++) {
- if ($string[$i] !== '%' && !isset($this->preserve[$int = ord($string[$i])]) ) {
+ if ($string[$i] !== '%' && !isset($this->preserve[$int = ord($string[$i])])) {
$ret .= '%' . sprintf('%02X', $int);
} else {
$ret .= $string[$i];
@@ -64,10 +74,14 @@ class HTMLPurifier_PercentEncoder
* @warning This function is affected by $preserve, even though the
* usual desired behavior is for this not to preserve those
* characters. Be careful when reusing instances of PercentEncoder!
- * @param $string String to normalize
+ * @param string $string String to normalize
+ * @return string
*/
- public function normalize($string) {
- if ($string == '') return '';
+ public function normalize($string)
+ {
+ if ($string == '') {
+ return '';
+ }
$parts = explode('%', $string);
$ret = array_shift($parts);
foreach ($parts as $part) {
@@ -92,7 +106,6 @@ class HTMLPurifier_PercentEncoder
}
return $ret;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Printer.php b/library/HTMLPurifier/Printer.php
index e7eb82e83..549e4cea1 100644
--- a/library/HTMLPurifier/Printer.php
+++ b/library/HTMLPurifier/Printer.php
@@ -7,25 +7,30 @@ class HTMLPurifier_Printer
{
/**
- * Instance of HTMLPurifier_Generator for HTML generation convenience funcs
+ * For HTML generation convenience funcs.
+ * @type HTMLPurifier_Generator
*/
protected $generator;
/**
- * Instance of HTMLPurifier_Config, for easy access
+ * For easy access.
+ * @type HTMLPurifier_Config
*/
protected $config;
/**
* Initialize $generator.
*/
- public function __construct() {
+ public function __construct()
+ {
}
/**
* Give generator necessary configuration if possible
+ * @param HTMLPurifier_Config $config
*/
- public function prepareGenerator($config) {
+ public function prepareGenerator($config)
+ {
$all = $config->getAll();
$context = new HTMLPurifier_Context();
$this->generator = new HTMLPurifier_Generator($config, $context);
@@ -39,45 +44,62 @@ class HTMLPurifier_Printer
/**
* Returns a start tag
- * @param $tag Tag name
- * @param $attr Attribute array
+ * @param string $tag Tag name
+ * @param array $attr Attribute array
+ * @return string
*/
- protected function start($tag, $attr = array()) {
+ protected function start($tag, $attr = array())
+ {
return $this->generator->generateFromToken(
- new HTMLPurifier_Token_Start($tag, $attr ? $attr : array())
- );
+ new HTMLPurifier_Token_Start($tag, $attr ? $attr : array())
+ );
}
/**
- * Returns an end teg
- * @param $tag Tag name
+ * Returns an end tag
+ * @param string $tag Tag name
+ * @return string
*/
- protected function end($tag) {
+ protected function end($tag)
+ {
return $this->generator->generateFromToken(
- new HTMLPurifier_Token_End($tag)
- );
+ new HTMLPurifier_Token_End($tag)
+ );
}
/**
* Prints a complete element with content inside
- * @param $tag Tag name
- * @param $contents Element contents
- * @param $attr Tag attributes
- * @param $escape Bool whether or not to escape contents
+ * @param string $tag Tag name
+ * @param string $contents Element contents
+ * @param array $attr Tag attributes
+ * @param bool $escape whether or not to escape contents
+ * @return string
*/
- protected function element($tag, $contents, $attr = array(), $escape = true) {
+ protected function element($tag, $contents, $attr = array(), $escape = true)
+ {
return $this->start($tag, $attr) .
- ($escape ? $this->escape($contents) : $contents) .
- $this->end($tag);
+ ($escape ? $this->escape($contents) : $contents) .
+ $this->end($tag);
}
- protected function elementEmpty($tag, $attr = array()) {
+ /**
+ * @param string $tag
+ * @param array $attr
+ * @return string
+ */
+ protected function elementEmpty($tag, $attr = array())
+ {
return $this->generator->generateFromToken(
new HTMLPurifier_Token_Empty($tag, $attr)
);
}
- protected function text($text) {
+ /**
+ * @param string $text
+ * @return string
+ */
+ protected function text($text)
+ {
return $this->generator->generateFromToken(
new HTMLPurifier_Token_Text($text)
);
@@ -85,24 +107,29 @@ class HTMLPurifier_Printer
/**
* Prints a simple key/value row in a table.
- * @param $name Key
- * @param $value Value
+ * @param string $name Key
+ * @param mixed $value Value
+ * @return string
*/
- protected function row($name, $value) {
- if (is_bool($value)) $value = $value ? 'On' : 'Off';
+ protected function row($name, $value)
+ {
+ if (is_bool($value)) {
+ $value = $value ? 'On' : 'Off';
+ }
return
$this->start('tr') . "\n" .
- $this->element('th', $name) . "\n" .
- $this->element('td', $value) . "\n" .
- $this->end('tr')
- ;
+ $this->element('th', $name) . "\n" .
+ $this->element('td', $value) . "\n" .
+ $this->end('tr');
}
/**
* Escapes a string for HTML output.
- * @param $string String to escape
+ * @param string $string String to escape
+ * @return string
*/
- protected function escape($string) {
+ protected function escape($string)
+ {
$string = HTMLPurifier_Encoder::cleanUTF8($string);
$string = htmlspecialchars($string, ENT_COMPAT, 'UTF-8');
return $string;
@@ -110,32 +137,46 @@ class HTMLPurifier_Printer
/**
* Takes a list of strings and turns them into a single list
- * @param $array List of strings
- * @param $polite Bool whether or not to add an end before the last
+ * @param string[] $array List of strings
+ * @param bool $polite Bool whether or not to add an end before the last
+ * @return string
*/
- protected function listify($array, $polite = false) {
- if (empty($array)) return 'None';
+ protected function listify($array, $polite = false)
+ {
+ if (empty($array)) {
+ return 'None';
+ }
$ret = '';
$i = count($array);
foreach ($array as $value) {
$i--;
$ret .= $value;
- if ($i > 0 && !($polite && $i == 1)) $ret .= ', ';
- if ($polite && $i == 1) $ret .= 'and ';
+ if ($i > 0 && !($polite && $i == 1)) {
+ $ret .= ', ';
+ }
+ if ($polite && $i == 1) {
+ $ret .= 'and ';
+ }
}
return $ret;
}
/**
* Retrieves the class of an object without prefixes, as well as metadata
- * @param $obj Object to determine class of
- * @param $prefix Further prefix to remove
+ * @param object $obj Object to determine class of
+ * @param string $sec_prefix Further prefix to remove
+ * @return string
*/
- protected function getClass($obj, $sec_prefix = '') {
+ protected function getClass($obj, $sec_prefix = '')
+ {
static $five = null;
- if ($five === null) $five = version_compare(PHP_VERSION, '5', '>=');
+ if ($five === null) {
+ $five = version_compare(PHP_VERSION, '5', '>=');
+ }
$prefix = 'HTMLPurifier_' . $sec_prefix;
- if (!$five) $prefix = strtolower($prefix);
+ if (!$five) {
+ $prefix = strtolower($prefix);
+ }
$class = str_replace($prefix, '', get_class($obj));
$lclass = strtolower($class);
$class .= '(';
@@ -164,13 +205,14 @@ class HTMLPurifier_Printer
break;
case 'css_importantdecorator':
$class .= $this->getClass($obj->def, $sec_prefix);
- if ($obj->allow) $class .= ', !important';
+ if ($obj->allow) {
+ $class .= ', !important';
+ }
break;
}
$class .= ')';
return $class;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Printer/CSSDefinition.php b/library/HTMLPurifier/Printer/CSSDefinition.php
index 81f986590..29505fe12 100644
--- a/library/HTMLPurifier/Printer/CSSDefinition.php
+++ b/library/HTMLPurifier/Printer/CSSDefinition.php
@@ -2,10 +2,17 @@
class HTMLPurifier_Printer_CSSDefinition extends HTMLPurifier_Printer
{
-
+ /**
+ * @type HTMLPurifier_CSSDefinition
+ */
protected $def;
- public function render($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return string
+ */
+ public function render($config)
+ {
$this->def = $config->getCSSDefinition();
$ret = '';
@@ -32,7 +39,6 @@ class HTMLPurifier_Printer_CSSDefinition extends HTMLPurifier_Printer
return $ret;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Printer/ConfigForm.php b/library/HTMLPurifier/Printer/ConfigForm.php
index 02aa65689..36100ce73 100644
--- a/library/HTMLPurifier/Printer/ConfigForm.php
+++ b/library/HTMLPurifier/Printer/ConfigForm.php
@@ -7,17 +7,20 @@ class HTMLPurifier_Printer_ConfigForm extends HTMLPurifier_Printer
{
/**
- * Printers for specific fields
+ * Printers for specific fields.
+ * @type HTMLPurifier_Printer[]
*/
protected $fields = array();
/**
- * Documentation URL, can have fragment tagged on end
+ * Documentation URL, can have fragment tagged on end.
+ * @type string
*/
protected $docURL;
/**
- * Name of form element to stuff config in
+ * Name of form element to stuff config in.
+ * @type string
*/
protected $name;
@@ -25,24 +28,27 @@ class HTMLPurifier_Printer_ConfigForm extends HTMLPurifier_Printer
* Whether or not to compress directive names, clipping them off
* after a certain amount of letters. False to disable or integer letters
* before clipping.
+ * @type bool
*/
protected $compress = false;
/**
- * @param $name Form element name for directives to be stuffed into
- * @param $doc_url String documentation URL, will have fragment tagged on
- * @param $compress Integer max length before compressing a directive name, set to false to turn off
+ * @param string $name Form element name for directives to be stuffed into
+ * @param string $doc_url String documentation URL, will have fragment tagged on
+ * @param bool $compress Integer max length before compressing a directive name, set to false to turn off
*/
public function __construct(
- $name, $doc_url = null, $compress = false
+ $name,
+ $doc_url = null,
+ $compress = false
) {
parent::__construct();
$this->docURL = $doc_url;
- $this->name = $name;
+ $this->name = $name;
$this->compress = $compress;
// initialize sub-printers
- $this->fields[0] = new HTMLPurifier_Printer_ConfigForm_default();
- $this->fields[HTMLPurifier_VarParser::BOOL] = new HTMLPurifier_Printer_ConfigForm_bool();
+ $this->fields[0] = new HTMLPurifier_Printer_ConfigForm_default();
+ $this->fields[HTMLPurifier_VarParser::BOOL] = new HTMLPurifier_Printer_ConfigForm_bool();
}
/**
@@ -50,32 +56,42 @@ class HTMLPurifier_Printer_ConfigForm extends HTMLPurifier_Printer
* @param $cols Integer columns of textarea, null to use default
* @param $rows Integer rows of textarea, null to use default
*/
- public function setTextareaDimensions($cols = null, $rows = null) {
- if ($cols) $this->fields['default']->cols = $cols;
- if ($rows) $this->fields['default']->rows = $rows;
+ public function setTextareaDimensions($cols = null, $rows = null)
+ {
+ if ($cols) {
+ $this->fields['default']->cols = $cols;
+ }
+ if ($rows) {
+ $this->fields['default']->rows = $rows;
+ }
}
/**
* Retrieves styling, in case it is not accessible by webserver
*/
- public static function getCSS() {
+ public static function getCSS()
+ {
return file_get_contents(HTMLPURIFIER_PREFIX . '/HTMLPurifier/Printer/ConfigForm.css');
}
/**
* Retrieves JavaScript, in case it is not accessible by webserver
*/
- public static function getJavaScript() {
+ public static function getJavaScript()
+ {
return file_get_contents(HTMLPURIFIER_PREFIX . '/HTMLPurifier/Printer/ConfigForm.js');
}
/**
* Returns HTML output for a configuration form
- * @param $config Configuration object of current form state, or an array
+ * @param HTMLPurifier_Config|array $config Configuration object of current form state, or an array
* where [0] has an HTML namespace and [1] is being rendered.
- * @param $allowed Optional namespace(s) and directives to restrict form to.
+ * @param array|bool $allowed Optional namespace(s) and directives to restrict form to.
+ * @param bool $render_controls
+ * @return string
*/
- public function render($config, $allowed = true, $render_controls = true) {
+ public function render($config, $allowed = true, $render_controls = true)
+ {
if (is_array($config) && isset($config[0])) {
$gen_config = $config[0];
$config = $config[1];
@@ -91,29 +107,29 @@ class HTMLPurifier_Printer_ConfigForm extends HTMLPurifier_Printer
$all = array();
foreach ($allowed as $key) {
list($ns, $directive) = $key;
- $all[$ns][$directive] = $config->get($ns .'.'. $directive);
+ $all[$ns][$directive] = $config->get($ns . '.' . $directive);
}
$ret = '';
$ret .= $this->start('table', array('class' => 'hp-config'));
$ret .= $this->start('thead');
$ret .= $this->start('tr');
- $ret .= $this->element('th', 'Directive', array('class' => 'hp-directive'));
- $ret .= $this->element('th', 'Value', array('class' => 'hp-value'));
+ $ret .= $this->element('th', 'Directive', array('class' => 'hp-directive'));
+ $ret .= $this->element('th', 'Value', array('class' => 'hp-value'));
$ret .= $this->end('tr');
$ret .= $this->end('thead');
foreach ($all as $ns => $directives) {
$ret .= $this->renderNamespace($ns, $directives);
}
if ($render_controls) {
- $ret .= $this->start('tbody');
- $ret .= $this->start('tr');
- $ret .= $this->start('td', array('colspan' => 2, 'class' => 'controls'));
- $ret .= $this->elementEmpty('input', array('type' => 'submit', 'value' => 'Submit'));
- $ret .= '[<a href="?">Reset</a>]';
- $ret .= $this->end('td');
- $ret .= $this->end('tr');
- $ret .= $this->end('tbody');
+ $ret .= $this->start('tbody');
+ $ret .= $this->start('tr');
+ $ret .= $this->start('td', array('colspan' => 2, 'class' => 'controls'));
+ $ret .= $this->elementEmpty('input', array('type' => 'submit', 'value' => 'Submit'));
+ $ret .= '[<a href="?">Reset</a>]';
+ $ret .= $this->end('td');
+ $ret .= $this->end('tr');
+ $ret .= $this->end('tbody');
}
$ret .= $this->end('table');
return $ret;
@@ -122,13 +138,15 @@ class HTMLPurifier_Printer_ConfigForm extends HTMLPurifier_Printer
/**
* Renders a single namespace
* @param $ns String namespace name
- * @param $directive Associative array of directives to values
+ * @param array $directives array of directives to values
+ * @return string
*/
- protected function renderNamespace($ns, $directives) {
+ protected function renderNamespace($ns, $directives)
+ {
$ret = '';
$ret .= $this->start('tbody', array('class' => 'namespace'));
$ret .= $this->start('tr');
- $ret .= $this->element('th', $ns, array('colspan' => 2));
+ $ret .= $this->element('th', $ns, array('colspan' => 2));
$ret .= $this->end('tr');
$ret .= $this->end('tbody');
$ret .= $this->start('tbody');
@@ -139,40 +157,44 @@ class HTMLPurifier_Printer_ConfigForm extends HTMLPurifier_Printer
$url = str_replace('%s', urlencode("$ns.$directive"), $this->docURL);
$ret .= $this->start('a', array('href' => $url));
}
- $attr = array('for' => "{$this->name}:$ns.$directive");
-
- // crop directive name if it's too long
- if (!$this->compress || (strlen($directive) < $this->compress)) {
- $directive_disp = $directive;
- } else {
- $directive_disp = substr($directive, 0, $this->compress - 2) . '...';
- $attr['title'] = $directive;
- }
+ $attr = array('for' => "{$this->name}:$ns.$directive");
+
+ // crop directive name if it's too long
+ if (!$this->compress || (strlen($directive) < $this->compress)) {
+ $directive_disp = $directive;
+ } else {
+ $directive_disp = substr($directive, 0, $this->compress - 2) . '...';
+ $attr['title'] = $directive;
+ }
- $ret .= $this->element(
- 'label',
- $directive_disp,
- // component printers must create an element with this id
- $attr
- );
- if ($this->docURL) $ret .= $this->end('a');
+ $ret .= $this->element(
+ 'label',
+ $directive_disp,
+ // component printers must create an element with this id
+ $attr
+ );
+ if ($this->docURL) {
+ $ret .= $this->end('a');
+ }
$ret .= $this->end('th');
$ret .= $this->start('td');
- $def = $this->config->def->info["$ns.$directive"];
- if (is_int($def)) {
- $allow_null = $def < 0;
- $type = abs($def);
- } else {
- $type = $def->type;
- $allow_null = isset($def->allow_null);
- }
- if (!isset($this->fields[$type])) $type = 0; // default
- $type_obj = $this->fields[$type];
- if ($allow_null) {
- $type_obj = new HTMLPurifier_Printer_ConfigForm_NullDecorator($type_obj);
- }
- $ret .= $type_obj->render($ns, $directive, $value, $this->name, array($this->genConfig, $this->config));
+ $def = $this->config->def->info["$ns.$directive"];
+ if (is_int($def)) {
+ $allow_null = $def < 0;
+ $type = abs($def);
+ } else {
+ $type = $def->type;
+ $allow_null = isset($def->allow_null);
+ }
+ if (!isset($this->fields[$type])) {
+ $type = 0;
+ } // default
+ $type_obj = $this->fields[$type];
+ if ($allow_null) {
+ $type_obj = new HTMLPurifier_Printer_ConfigForm_NullDecorator($type_obj);
+ }
+ $ret .= $type_obj->render($ns, $directive, $value, $this->name, array($this->genConfig, $this->config));
$ret .= $this->end('td');
$ret .= $this->end('tr');
}
@@ -185,19 +207,33 @@ class HTMLPurifier_Printer_ConfigForm extends HTMLPurifier_Printer
/**
* Printer decorator for directives that accept null
*/
-class HTMLPurifier_Printer_ConfigForm_NullDecorator extends HTMLPurifier_Printer {
+class HTMLPurifier_Printer_ConfigForm_NullDecorator extends HTMLPurifier_Printer
+{
/**
* Printer being decorated
+ * @type HTMLPurifier_Printer
*/
protected $obj;
+
/**
- * @param $obj Printer to decorate
+ * @param HTMLPurifier_Printer $obj Printer to decorate
*/
- public function __construct($obj) {
+ public function __construct($obj)
+ {
parent::__construct();
$this->obj = $obj;
}
- public function render($ns, $directive, $value, $name, $config) {
+
+ /**
+ * @param string $ns
+ * @param string $directive
+ * @param string $value
+ * @param string $name
+ * @param HTMLPurifier_Config|array $config
+ * @return string
+ */
+ public function render($ns, $directive, $value, $name, $config)
+ {
if (is_array($config) && isset($config[0])) {
$gen_config = $config[0];
$config = $config[1];
@@ -215,15 +251,19 @@ class HTMLPurifier_Printer_ConfigForm_NullDecorator extends HTMLPurifier_Printer
'type' => 'checkbox',
'value' => '1',
'class' => 'null-toggle',
- 'name' => "$name"."[Null_$ns.$directive]",
+ 'name' => "$name" . "[Null_$ns.$directive]",
'id' => "$name:Null_$ns.$directive",
'onclick' => "toggleWriteability('$name:$ns.$directive',checked)" // INLINE JAVASCRIPT!!!!
);
if ($this->obj instanceof HTMLPurifier_Printer_ConfigForm_bool) {
// modify inline javascript slightly
- $attr['onclick'] = "toggleWriteability('$name:Yes_$ns.$directive',checked);toggleWriteability('$name:No_$ns.$directive',checked)";
+ $attr['onclick'] =
+ "toggleWriteability('$name:Yes_$ns.$directive',checked);" .
+ "toggleWriteability('$name:No_$ns.$directive',checked)";
+ }
+ if ($value === null) {
+ $attr['checked'] = 'checked';
}
- if ($value === null) $attr['checked'] = 'checked';
$ret .= $this->elementEmpty('input', $attr);
$ret .= $this->text(' or ');
$ret .= $this->elementEmpty('br');
@@ -235,10 +275,28 @@ class HTMLPurifier_Printer_ConfigForm_NullDecorator extends HTMLPurifier_Printer
/**
* Swiss-army knife configuration form field printer
*/
-class HTMLPurifier_Printer_ConfigForm_default extends HTMLPurifier_Printer {
+class HTMLPurifier_Printer_ConfigForm_default extends HTMLPurifier_Printer
+{
+ /**
+ * @type int
+ */
public $cols = 18;
+
+ /**
+ * @type int
+ */
public $rows = 5;
- public function render($ns, $directive, $value, $name, $config) {
+
+ /**
+ * @param string $ns
+ * @param string $directive
+ * @param string $value
+ * @param string $name
+ * @param HTMLPurifier_Config|array $config
+ * @return string
+ */
+ public function render($ns, $directive, $value, $name, $config)
+ {
if (is_array($config) && isset($config[0])) {
$gen_config = $config[0];
$config = $config[1];
@@ -262,6 +320,7 @@ class HTMLPurifier_Printer_ConfigForm_default extends HTMLPurifier_Printer {
foreach ($array as $val => $b) {
$value[] = $val;
}
+ //TODO does this need a break?
case HTMLPurifier_VarParser::ALIST:
$value = implode(PHP_EOL, $value);
break;
@@ -281,25 +340,27 @@ class HTMLPurifier_Printer_ConfigForm_default extends HTMLPurifier_Printer {
$value = serialize($value);
}
$attr = array(
- 'name' => "$name"."[$ns.$directive]",
+ 'name' => "$name" . "[$ns.$directive]",
'id' => "$name:$ns.$directive"
);
- if ($value === null) $attr['disabled'] = 'disabled';
+ if ($value === null) {
+ $attr['disabled'] = 'disabled';
+ }
if (isset($def->allowed)) {
$ret .= $this->start('select', $attr);
foreach ($def->allowed as $val => $b) {
$attr = array();
- if ($value == $val) $attr['selected'] = 'selected';
+ if ($value == $val) {
+ $attr['selected'] = 'selected';
+ }
$ret .= $this->element('option', $val, $attr);
}
$ret .= $this->end('select');
- } elseif (
- $type === HTMLPurifier_VarParser::TEXT ||
- $type === HTMLPurifier_VarParser::ITEXT ||
- $type === HTMLPurifier_VarParser::ALIST ||
- $type === HTMLPurifier_VarParser::HASH ||
- $type === HTMLPurifier_VarParser::LOOKUP
- ) {
+ } elseif ($type === HTMLPurifier_VarParser::TEXT ||
+ $type === HTMLPurifier_VarParser::ITEXT ||
+ $type === HTMLPurifier_VarParser::ALIST ||
+ $type === HTMLPurifier_VarParser::HASH ||
+ $type === HTMLPurifier_VarParser::LOOKUP) {
$attr['cols'] = $this->cols;
$attr['rows'] = $this->rows;
$ret .= $this->start('textarea', $attr);
@@ -317,8 +378,18 @@ class HTMLPurifier_Printer_ConfigForm_default extends HTMLPurifier_Printer {
/**
* Bool form field printer
*/
-class HTMLPurifier_Printer_ConfigForm_bool extends HTMLPurifier_Printer {
- public function render($ns, $directive, $value, $name, $config) {
+class HTMLPurifier_Printer_ConfigForm_bool extends HTMLPurifier_Printer
+{
+ /**
+ * @param string $ns
+ * @param string $directive
+ * @param string $value
+ * @param string $name
+ * @param HTMLPurifier_Config|array $config
+ * @return string
+ */
+ public function render($ns, $directive, $value, $name, $config)
+ {
if (is_array($config) && isset($config[0])) {
$gen_config = $config[0];
$config = $config[1];
@@ -336,12 +407,16 @@ class HTMLPurifier_Printer_ConfigForm_bool extends HTMLPurifier_Printer {
$attr = array(
'type' => 'radio',
- 'name' => "$name"."[$ns.$directive]",
+ 'name' => "$name" . "[$ns.$directive]",
'id' => "$name:Yes_$ns.$directive",
'value' => '1'
);
- if ($value === true) $attr['checked'] = 'checked';
- if ($value === null) $attr['disabled'] = 'disabled';
+ if ($value === true) {
+ $attr['checked'] = 'checked';
+ }
+ if ($value === null) {
+ $attr['disabled'] = 'disabled';
+ }
$ret .= $this->elementEmpty('input', $attr);
$ret .= $this->start('label', array('for' => "$name:No_$ns.$directive"));
@@ -351,12 +426,16 @@ class HTMLPurifier_Printer_ConfigForm_bool extends HTMLPurifier_Printer {
$attr = array(
'type' => 'radio',
- 'name' => "$name"."[$ns.$directive]",
+ 'name' => "$name" . "[$ns.$directive]",
'id' => "$name:No_$ns.$directive",
'value' => '0'
);
- if ($value === false) $attr['checked'] = 'checked';
- if ($value === null) $attr['disabled'] = 'disabled';
+ if ($value === false) {
+ $attr['checked'] = 'checked';
+ }
+ if ($value === null) {
+ $attr['disabled'] = 'disabled';
+ }
$ret .= $this->elementEmpty('input', $attr);
$ret .= $this->end('div');
diff --git a/library/HTMLPurifier/Printer/HTMLDefinition.php b/library/HTMLPurifier/Printer/HTMLDefinition.php
index 8a8f126b8..5f2f2f8a7 100644
--- a/library/HTMLPurifier/Printer/HTMLDefinition.php
+++ b/library/HTMLPurifier/Printer/HTMLDefinition.php
@@ -4,11 +4,16 @@ class HTMLPurifier_Printer_HTMLDefinition extends HTMLPurifier_Printer
{
/**
- * Instance of HTMLPurifier_HTMLDefinition, for easy access
+ * @type HTMLPurifier_HTMLDefinition, for easy access
*/
protected $def;
- public function render($config) {
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return string
+ */
+ public function render($config)
+ {
$ret = '';
$this->config =& $config;
@@ -28,8 +33,10 @@ class HTMLPurifier_Printer_HTMLDefinition extends HTMLPurifier_Printer
/**
* Renders the Doctype table
+ * @return string
*/
- protected function renderDoctype() {
+ protected function renderDoctype()
+ {
$doctype = $this->def->doctype;
$ret = '';
$ret .= $this->start('table');
@@ -45,8 +52,10 @@ class HTMLPurifier_Printer_HTMLDefinition extends HTMLPurifier_Printer
/**
* Renders environment table, which is miscellaneous info
+ * @return string
*/
- protected function renderEnvironment() {
+ protected function renderEnvironment()
+ {
$def = $this->def;
$ret = '';
@@ -59,28 +68,28 @@ class HTMLPurifier_Printer_HTMLDefinition extends HTMLPurifier_Printer
$ret .= $this->row('Block wrap name', $def->info_block_wrapper);
$ret .= $this->start('tr');
- $ret .= $this->element('th', 'Global attributes');
- $ret .= $this->element('td', $this->listifyAttr($def->info_global_attr),0,0);
+ $ret .= $this->element('th', 'Global attributes');
+ $ret .= $this->element('td', $this->listifyAttr($def->info_global_attr), null, 0);
$ret .= $this->end('tr');
$ret .= $this->start('tr');
- $ret .= $this->element('th', 'Tag transforms');
- $list = array();
- foreach ($def->info_tag_transform as $old => $new) {
- $new = $this->getClass($new, 'TagTransform_');
- $list[] = "<$old> with $new";
- }
- $ret .= $this->element('td', $this->listify($list));
+ $ret .= $this->element('th', 'Tag transforms');
+ $list = array();
+ foreach ($def->info_tag_transform as $old => $new) {
+ $new = $this->getClass($new, 'TagTransform_');
+ $list[] = "<$old> with $new";
+ }
+ $ret .= $this->element('td', $this->listify($list));
$ret .= $this->end('tr');
$ret .= $this->start('tr');
- $ret .= $this->element('th', 'Pre-AttrTransform');
- $ret .= $this->element('td', $this->listifyObjectList($def->info_attr_transform_pre));
+ $ret .= $this->element('th', 'Pre-AttrTransform');
+ $ret .= $this->element('td', $this->listifyObjectList($def->info_attr_transform_pre));
$ret .= $this->end('tr');
$ret .= $this->start('tr');
- $ret .= $this->element('th', 'Post-AttrTransform');
- $ret .= $this->element('td', $this->listifyObjectList($def->info_attr_transform_post));
+ $ret .= $this->element('th', 'Post-AttrTransform');
+ $ret .= $this->element('td', $this->listifyObjectList($def->info_attr_transform_post));
$ret .= $this->end('tr');
$ret .= $this->end('table');
@@ -89,8 +98,10 @@ class HTMLPurifier_Printer_HTMLDefinition extends HTMLPurifier_Printer
/**
* Renders the Content Sets table
+ * @return string
*/
- protected function renderContentSets() {
+ protected function renderContentSets()
+ {
$ret = '';
$ret .= $this->start('table');
$ret .= $this->element('caption', 'Content Sets');
@@ -106,8 +117,10 @@ class HTMLPurifier_Printer_HTMLDefinition extends HTMLPurifier_Printer
/**
* Renders the Elements ($info) table
+ * @return string
*/
- protected function renderInfo() {
+ protected function renderInfo()
+ {
$ret = '';
$ret .= $this->start('table');
$ret .= $this->element('caption', 'Elements ($info)');
@@ -118,39 +131,39 @@ class HTMLPurifier_Printer_HTMLDefinition extends HTMLPurifier_Printer
$ret .= $this->end('tr');
foreach ($this->def->info as $name => $def) {
$ret .= $this->start('tr');
- $ret .= $this->element('th', "<$name>", array('class'=>'heavy', 'colspan' => 2));
+ $ret .= $this->element('th', "<$name>", array('class' => 'heavy', 'colspan' => 2));
$ret .= $this->end('tr');
$ret .= $this->start('tr');
- $ret .= $this->element('th', 'Inline content');
- $ret .= $this->element('td', $def->descendants_are_inline ? 'Yes' : 'No');
+ $ret .= $this->element('th', 'Inline content');
+ $ret .= $this->element('td', $def->descendants_are_inline ? 'Yes' : 'No');
$ret .= $this->end('tr');
if (!empty($def->excludes)) {
$ret .= $this->start('tr');
- $ret .= $this->element('th', 'Excludes');
- $ret .= $this->element('td', $this->listifyTagLookup($def->excludes));
+ $ret .= $this->element('th', 'Excludes');
+ $ret .= $this->element('td', $this->listifyTagLookup($def->excludes));
$ret .= $this->end('tr');
}
if (!empty($def->attr_transform_pre)) {
$ret .= $this->start('tr');
- $ret .= $this->element('th', 'Pre-AttrTransform');
- $ret .= $this->element('td', $this->listifyObjectList($def->attr_transform_pre));
+ $ret .= $this->element('th', 'Pre-AttrTransform');
+ $ret .= $this->element('td', $this->listifyObjectList($def->attr_transform_pre));
$ret .= $this->end('tr');
}
if (!empty($def->attr_transform_post)) {
$ret .= $this->start('tr');
- $ret .= $this->element('th', 'Post-AttrTransform');
- $ret .= $this->element('td', $this->listifyObjectList($def->attr_transform_post));
+ $ret .= $this->element('th', 'Post-AttrTransform');
+ $ret .= $this->element('td', $this->listifyObjectList($def->attr_transform_post));
$ret .= $this->end('tr');
}
if (!empty($def->auto_close)) {
$ret .= $this->start('tr');
- $ret .= $this->element('th', 'Auto closed by');
- $ret .= $this->element('td', $this->listifyTagLookup($def->auto_close));
+ $ret .= $this->element('th', 'Auto closed by');
+ $ret .= $this->element('td', $this->listifyTagLookup($def->auto_close));
$ret .= $this->end('tr');
}
$ret .= $this->start('tr');
- $ret .= $this->element('th', 'Allowed attributes');
- $ret .= $this->element('td',$this->listifyAttr($def->attr), array(), 0);
+ $ret .= $this->element('th', 'Allowed attributes');
+ $ret .= $this->element('td', $this->listifyAttr($def->attr), array(), 0);
$ret .= $this->end('tr');
if (!empty($def->required_attr)) {
@@ -165,64 +178,94 @@ class HTMLPurifier_Printer_HTMLDefinition extends HTMLPurifier_Printer
/**
* Renders a row describing the allowed children of an element
- * @param $def HTMLPurifier_ChildDef of pertinent element
+ * @param HTMLPurifier_ChildDef $def HTMLPurifier_ChildDef of pertinent element
+ * @return string
*/
- protected function renderChildren($def) {
+ protected function renderChildren($def)
+ {
$context = new HTMLPurifier_Context();
$ret = '';
$ret .= $this->start('tr');
- $elements = array();
- $attr = array();
- if (isset($def->elements)) {
- if ($def->type == 'strictblockquote') {
- $def->validateChildren(array(), $this->config, $context);
- }
- $elements = $def->elements;
+ $elements = array();
+ $attr = array();
+ if (isset($def->elements)) {
+ if ($def->type == 'strictblockquote') {
+ $def->validateChildren(array(), $this->config, $context);
}
- if ($def->type == 'chameleon') {
- $attr['rowspan'] = 2;
- } elseif ($def->type == 'empty') {
- $elements = array();
- } elseif ($def->type == 'table') {
- $elements = array_flip(array('col', 'caption', 'colgroup', 'thead',
- 'tfoot', 'tbody', 'tr'));
- }
- $ret .= $this->element('th', 'Allowed children', $attr);
-
- if ($def->type == 'chameleon') {
-
- $ret .= $this->element('td',
- '<em>Block</em>: ' .
- $this->escape($this->listifyTagLookup($def->block->elements)),0,0);
- $ret .= $this->end('tr');
- $ret .= $this->start('tr');
- $ret .= $this->element('td',
- '<em>Inline</em>: ' .
- $this->escape($this->listifyTagLookup($def->inline->elements)),0,0);
-
- } elseif ($def->type == 'custom') {
+ $elements = $def->elements;
+ }
+ if ($def->type == 'chameleon') {
+ $attr['rowspan'] = 2;
+ } elseif ($def->type == 'empty') {
+ $elements = array();
+ } elseif ($def->type == 'table') {
+ $elements = array_flip(
+ array(
+ 'col',
+ 'caption',
+ 'colgroup',
+ 'thead',
+ 'tfoot',
+ 'tbody',
+ 'tr'
+ )
+ );
+ }
+ $ret .= $this->element('th', 'Allowed children', $attr);
- $ret .= $this->element('td', '<em>'.ucfirst($def->type).'</em>: ' .
- $def->dtd_regex);
+ if ($def->type == 'chameleon') {
- } else {
- $ret .= $this->element('td',
- '<em>'.ucfirst($def->type).'</em>: ' .
- $this->escape($this->listifyTagLookup($elements)),0,0);
- }
+ $ret .= $this->element(
+ 'td',
+ '<em>Block</em>: ' .
+ $this->escape($this->listifyTagLookup($def->block->elements)),
+ null,
+ 0
+ );
+ $ret .= $this->end('tr');
+ $ret .= $this->start('tr');
+ $ret .= $this->element(
+ 'td',
+ '<em>Inline</em>: ' .
+ $this->escape($this->listifyTagLookup($def->inline->elements)),
+ null,
+ 0
+ );
+
+ } elseif ($def->type == 'custom') {
+
+ $ret .= $this->element(
+ 'td',
+ '<em>' . ucfirst($def->type) . '</em>: ' .
+ $def->dtd_regex
+ );
+
+ } else {
+ $ret .= $this->element(
+ 'td',
+ '<em>' . ucfirst($def->type) . '</em>: ' .
+ $this->escape($this->listifyTagLookup($elements)),
+ null,
+ 0
+ );
+ }
$ret .= $this->end('tr');
return $ret;
}
/**
* Listifies a tag lookup table.
- * @param $array Tag lookup array in form of array('tagname' => true)
+ * @param array $array Tag lookup array in form of array('tagname' => true)
+ * @return string
*/
- protected function listifyTagLookup($array) {
+ protected function listifyTagLookup($array)
+ {
ksort($array);
$list = array();
foreach ($array as $name => $discard) {
- if ($name !== '#PCDATA' && !isset($this->def->info[$name])) continue;
+ if ($name !== '#PCDATA' && !isset($this->def->info[$name])) {
+ continue;
+ }
$list[] = $name;
}
return $this->listify($list);
@@ -230,13 +273,15 @@ class HTMLPurifier_Printer_HTMLDefinition extends HTMLPurifier_Printer
/**
* Listifies a list of objects by retrieving class names and internal state
- * @param $array List of objects
+ * @param array $array List of objects
+ * @return string
* @todo Also add information about internal state
*/
- protected function listifyObjectList($array) {
+ protected function listifyObjectList($array)
+ {
ksort($array);
$list = array();
- foreach ($array as $discard => $obj) {
+ foreach ($array as $obj) {
$list[] = $this->getClass($obj, 'AttrTransform_');
}
return $this->listify($list);
@@ -244,13 +289,17 @@ class HTMLPurifier_Printer_HTMLDefinition extends HTMLPurifier_Printer
/**
* Listifies a hash of attributes to AttrDef classes
- * @param $array Array hash in form of array('attrname' => HTMLPurifier_AttrDef)
+ * @param array $array Array hash in form of array('attrname' => HTMLPurifier_AttrDef)
+ * @return string
*/
- protected function listifyAttr($array) {
+ protected function listifyAttr($array)
+ {
ksort($array);
$list = array();
foreach ($array as $name => $obj) {
- if ($obj === false) continue;
+ if ($obj === false) {
+ continue;
+ }
$list[] = "$name&nbsp;=&nbsp;<i>" . $this->getClass($obj, 'AttrDef_') . '</i>';
}
return $this->listify($list);
@@ -258,15 +307,18 @@ class HTMLPurifier_Printer_HTMLDefinition extends HTMLPurifier_Printer
/**
* Creates a heavy header row
+ * @param string $text
+ * @param int $num
+ * @return string
*/
- protected function heavyHeader($text, $num = 1) {
+ protected function heavyHeader($text, $num = 1)
+ {
$ret = '';
$ret .= $this->start('tr');
$ret .= $this->element('th', $text, array('colspan' => $num, 'class' => 'heavy'));
$ret .= $this->end('tr');
return $ret;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/PropertyList.php b/library/HTMLPurifier/PropertyList.php
index 2b99fb7bc..189348fd9 100644
--- a/library/HTMLPurifier/PropertyList.php
+++ b/library/HTMLPurifier/PropertyList.php
@@ -6,61 +6,93 @@
class HTMLPurifier_PropertyList
{
/**
- * Internal data-structure for properties
+ * Internal data-structure for properties.
+ * @type array
*/
protected $data = array();
/**
- * Parent plist
+ * Parent plist.
+ * @type HTMLPurifier_PropertyList
*/
protected $parent;
+ /**
+ * Cache.
+ * @type array
+ */
protected $cache;
- public function __construct($parent = null) {
+ /**
+ * @param HTMLPurifier_PropertyList $parent Parent plist
+ */
+ public function __construct($parent = null)
+ {
$this->parent = $parent;
}
/**
* Recursively retrieves the value for a key
+ * @param string $name
+ * @throws HTMLPurifier_Exception
*/
- public function get($name) {
- if ($this->has($name)) return $this->data[$name];
+ public function get($name)
+ {
+ if ($this->has($name)) {
+ return $this->data[$name];
+ }
// possible performance bottleneck, convert to iterative if necessary
- if ($this->parent) return $this->parent->get($name);
+ if ($this->parent) {
+ return $this->parent->get($name);
+ }
throw new HTMLPurifier_Exception("Key '$name' not found");
}
/**
* Sets the value of a key, for this plist
+ * @param string $name
+ * @param mixed $value
*/
- public function set($name, $value) {
+ public function set($name, $value)
+ {
$this->data[$name] = $value;
}
/**
* Returns true if a given key exists
+ * @param string $name
+ * @return bool
*/
- public function has($name) {
+ public function has($name)
+ {
return array_key_exists($name, $this->data);
}
/**
* Resets a value to the value of it's parent, usually the default. If
* no value is specified, the entire plist is reset.
+ * @param string $name
*/
- public function reset($name = null) {
- if ($name == null) $this->data = array();
- else unset($this->data[$name]);
+ public function reset($name = null)
+ {
+ if ($name == null) {
+ $this->data = array();
+ } else {
+ unset($this->data[$name]);
+ }
}
/**
* Squashes this property list and all of its property lists into a single
* array, and returns the array. This value is cached by default.
- * @param $force If true, ignores the cache and regenerates the array.
+ * @param bool $force If true, ignores the cache and regenerates the array.
+ * @return array
*/
- public function squash($force = false) {
- if ($this->cache !== null && !$force) return $this->cache;
+ public function squash($force = false)
+ {
+ if ($this->cache !== null && !$force) {
+ return $this->cache;
+ }
if ($this->parent) {
return $this->cache = array_merge($this->parent->squash($force), $this->data);
} else {
@@ -70,15 +102,19 @@ class HTMLPurifier_PropertyList
/**
* Returns the parent plist.
+ * @return HTMLPurifier_PropertyList
*/
- public function getParent() {
+ public function getParent()
+ {
return $this->parent;
}
/**
* Sets the parent plist.
+ * @param HTMLPurifier_PropertyList $plist Parent plist
*/
- public function setParent($plist) {
+ public function setParent($plist)
+ {
$this->parent = $plist;
}
}
diff --git a/library/HTMLPurifier/PropertyListIterator.php b/library/HTMLPurifier/PropertyListIterator.php
index 8f250443e..15b330ea3 100644
--- a/library/HTMLPurifier/PropertyListIterator.php
+++ b/library/HTMLPurifier/PropertyListIterator.php
@@ -6,27 +6,37 @@
class HTMLPurifier_PropertyListIterator extends FilterIterator
{
+ /**
+ * @type int
+ */
protected $l;
+ /**
+ * @type string
+ */
protected $filter;
/**
- * @param $data Array of data to iterate over
- * @param $filter Optional prefix to only allow values of
+ * @param Iterator $iterator Array of data to iterate over
+ * @param string $filter Optional prefix to only allow values of
*/
- public function __construct(Iterator $iterator, $filter = null) {
+ public function __construct(Iterator $iterator, $filter = null)
+ {
parent::__construct($iterator);
$this->l = strlen($filter);
$this->filter = $filter;
}
- public function accept() {
+ /**
+ * @return bool
+ */
+ public function accept()
+ {
$key = $this->getInnerIterator()->key();
- if( strncmp($key, $this->filter, $this->l) !== 0 ) {
+ if (strncmp($key, $this->filter, $this->l) !== 0) {
return false;
}
return true;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Queue.php b/library/HTMLPurifier/Queue.php
new file mode 100644
index 000000000..f58db9042
--- /dev/null
+++ b/library/HTMLPurifier/Queue.php
@@ -0,0 +1,56 @@
+<?php
+
+/**
+ * A simple array-backed queue, based off of the classic Okasaki
+ * persistent amortized queue. The basic idea is to maintain two
+ * stacks: an input stack and an output stack. When the output
+ * stack runs out, reverse the input stack and use it as the output
+ * stack.
+ *
+ * We don't use the SPL implementation because it's only supported
+ * on PHP 5.3 and later.
+ *
+ * Exercise: Prove that push/pop on this queue take amortized O(1) time.
+ *
+ * Exercise: Extend this queue to be a deque, while preserving amortized
+ * O(1) time. Some care must be taken on rebalancing to avoid quadratic
+ * behaviour caused by repeatedly shuffling data from the input stack
+ * to the output stack and back.
+ */
+class HTMLPurifier_Queue {
+ private $input;
+ private $output;
+
+ public function __construct($input = array()) {
+ $this->input = $input;
+ $this->output = array();
+ }
+
+ /**
+ * Shifts an element off the front of the queue.
+ */
+ public function shift() {
+ if (empty($this->output)) {
+ $this->output = array_reverse($this->input);
+ $this->input = array();
+ }
+ if (empty($this->output)) {
+ return NULL;
+ }
+ return array_pop($this->output);
+ }
+
+ /**
+ * Pushes an element onto the front of the queue.
+ */
+ public function push($x) {
+ array_push($this->input, $x);
+ }
+
+ /**
+ * Checks if it's empty.
+ */
+ public function isEmpty() {
+ return empty($this->input) && empty($this->output);
+ }
+}
diff --git a/library/HTMLPurifier/Strategy.php b/library/HTMLPurifier/Strategy.php
index 246286521..e1ff3b72d 100644
--- a/library/HTMLPurifier/Strategy.php
+++ b/library/HTMLPurifier/Strategy.php
@@ -15,12 +15,12 @@ abstract class HTMLPurifier_Strategy
/**
* Executes the strategy on the tokens.
*
- * @param $tokens Array of HTMLPurifier_Token objects to be operated on.
- * @param $config Configuration options
- * @returns Processed array of token objects.
+ * @param HTMLPurifier_Token[] $tokens Array of HTMLPurifier_Token objects to be operated on.
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return HTMLPurifier_Token[] Processed array of token objects.
*/
abstract public function execute($tokens, $config, $context);
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Strategy/Composite.php b/library/HTMLPurifier/Strategy/Composite.php
index 816490b79..d7d35ce7d 100644
--- a/library/HTMLPurifier/Strategy/Composite.php
+++ b/library/HTMLPurifier/Strategy/Composite.php
@@ -8,18 +8,23 @@ abstract class HTMLPurifier_Strategy_Composite extends HTMLPurifier_Strategy
/**
* List of strategies to run tokens through.
+ * @type HTMLPurifier_Strategy[]
*/
protected $strategies = array();
- abstract public function __construct();
-
- public function execute($tokens, $config, $context) {
+ /**
+ * @param HTMLPurifier_Token[] $tokens
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return HTMLPurifier_Token[]
+ */
+ public function execute($tokens, $config, $context)
+ {
foreach ($this->strategies as $strategy) {
$tokens = $strategy->execute($tokens, $config, $context);
}
return $tokens;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Strategy/Core.php b/library/HTMLPurifier/Strategy/Core.php
index d90e15860..4414c17d6 100644
--- a/library/HTMLPurifier/Strategy/Core.php
+++ b/library/HTMLPurifier/Strategy/Core.php
@@ -5,14 +5,13 @@
*/
class HTMLPurifier_Strategy_Core extends HTMLPurifier_Strategy_Composite
{
-
- public function __construct() {
+ public function __construct()
+ {
$this->strategies[] = new HTMLPurifier_Strategy_RemoveForeignElements();
$this->strategies[] = new HTMLPurifier_Strategy_MakeWellFormed();
$this->strategies[] = new HTMLPurifier_Strategy_FixNesting();
$this->strategies[] = new HTMLPurifier_Strategy_ValidateAttributes();
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Strategy/FixNesting.php b/library/HTMLPurifier/Strategy/FixNesting.php
index f81802391..6fa673db9 100644
--- a/library/HTMLPurifier/Strategy/FixNesting.php
+++ b/library/HTMLPurifier/Strategy/FixNesting.php
@@ -10,12 +10,12 @@
* document type definitions, such as the chameleon nature of ins/del
* tags and global child exclusions.
*
- * The first major objective of this strategy is to iterate through all the
- * nodes (not tokens) of the list of tokens and determine whether or not
- * their children conform to the element's definition. If they do not, the
- * child definition may optionally supply an amended list of elements that
- * is valid or require that the entire node be deleted (and the previous
- * node rescanned).
+ * The first major objective of this strategy is to iterate through all
+ * the nodes and determine whether or not their children conform to the
+ * element's definition. If they do not, the child definition may
+ * optionally supply an amended list of elements that is valid or
+ * require that the entire node be deleted (and the previous node
+ * rescanned).
*
* The second objective is to ensure that explicitly excluded elements of
* an element do not appear in its children. Code that accomplishes this
@@ -25,24 +25,33 @@
* @note Whether or not unrecognized children are silently dropped or
* translated into text depends on the child definitions.
*
- * @todo Enable nodes to be bubbled out of the structure.
+ * @todo Enable nodes to be bubbled out of the structure. This is
+ * easier with our new algorithm.
*/
class HTMLPurifier_Strategy_FixNesting extends HTMLPurifier_Strategy
{
- public function execute($tokens, $config, $context) {
+ /**
+ * @param HTMLPurifier_Token[] $tokens
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array|HTMLPurifier_Token[]
+ */
+ public function execute($tokens, $config, $context)
+ {
+
//####################################################################//
// Pre-processing
+ // O(n) pass to convert to a tree, so that we can efficiently
+ // refer to substrings
+ $top_node = HTMLPurifier_Arborize::arborize($tokens, $config, $context);
+
// get a copy of the HTML definition
$definition = $config->getHTMLDefinition();
- // insert implicit "parent" node, will be removed at end.
- // DEFINITION CALL
- $parent_name = $definition->info_parent;
- array_unshift($tokens, new HTMLPurifier_Token_Start($parent_name));
- $tokens[] = new HTMLPurifier_Token_End($parent_name);
+ $excludes_enabled = !$config->get('Core.DisableExcludes');
// setup the context variable 'IsInline', for chameleon processing
// is 'false' when we are not inline, 'true' when it must always
@@ -57,272 +66,116 @@ class HTMLPurifier_Strategy_FixNesting extends HTMLPurifier_Strategy
//####################################################################//
// Loop initialization
- // stack that contains the indexes of all parents,
- // $stack[count($stack)-1] being the current parent
- $stack = array();
-
// stack that contains all elements that are excluded
// it is organized by parent elements, similar to $stack,
// but it is only populated when an element with exclusions is
// processed, i.e. there won't be empty exclusions.
- $exclude_stack = array();
+ $exclude_stack = array($definition->info_parent_def->excludes);
// variable that contains the start token while we are processing
// nodes. This enables error reporting to do its job
- $start_token = false;
- $context->register('CurrentToken', $start_token);
+ $node = $top_node;
+ // dummy token
+ list($token, $d) = $node->toTokenPair();
+ $context->register('CurrentNode', $node);
+ $context->register('CurrentToken', $token);
//####################################################################//
// Loop
- // iterate through all start nodes. Determining the start node
- // is complicated so it has been omitted from the loop construct
- for ($i = 0, $size = count($tokens) ; $i < $size; ) {
-
- //################################################################//
- // Gather information on children
-
- // child token accumulator
- $child_tokens = array();
-
- // scroll to the end of this node, report number, and collect
- // all children
- for ($j = $i, $depth = 0; ; $j++) {
- if ($tokens[$j] instanceof HTMLPurifier_Token_Start) {
- $depth++;
- // skip token assignment on first iteration, this is the
- // token we currently are on
- if ($depth == 1) continue;
- } elseif ($tokens[$j] instanceof HTMLPurifier_Token_End) {
- $depth--;
- // skip token assignment on last iteration, this is the
- // end token of the token we're currently on
- if ($depth == 0) break;
- }
- $child_tokens[] = $tokens[$j];
- }
-
- // $i is index of start token
- // $j is index of end token
-
- $start_token = $tokens[$i]; // to make token available via CurrentToken
-
- //################################################################//
- // Gather information on parent
-
- // calculate parent information
- if ($count = count($stack)) {
- $parent_index = $stack[$count-1];
- $parent_name = $tokens[$parent_index]->name;
- if ($parent_index == 0) {
- $parent_def = $definition->info_parent_def;
- } else {
- $parent_def = $definition->info[$parent_name];
- }
- } else {
- // processing as if the parent were the "root" node
- // unknown info, it won't be used anyway, in the future,
- // we may want to enforce one element only (this is
- // necessary for HTML Purifier to clean entire documents
- $parent_index = $parent_name = $parent_def = null;
- }
-
- // calculate context
- if ($is_inline === false) {
- // check if conditions make it inline
- if (!empty($parent_def) && $parent_def->descendants_are_inline) {
- $is_inline = $count - 1;
- }
- } else {
- // check if we're out of inline
- if ($count === $is_inline) {
- $is_inline = false;
- }
- }
-
- //################################################################//
- // Determine whether element is explicitly excluded SGML-style
-
- // determine whether or not element is excluded by checking all
- // parent exclusions. The array should not be very large, two
- // elements at most.
- $excluded = false;
- if (!empty($exclude_stack)) {
- foreach ($exclude_stack as $lookup) {
- if (isset($lookup[$tokens[$i]->name])) {
- $excluded = true;
- // no need to continue processing
- break;
- }
+ // We need to implement a post-order traversal iteratively, to
+ // avoid running into stack space limits. This is pretty tricky
+ // to reason about, so we just manually stack-ify the recursive
+ // variant:
+ //
+ // function f($node) {
+ // foreach ($node->children as $child) {
+ // f($child);
+ // }
+ // validate($node);
+ // }
+ //
+ // Thus, we will represent a stack frame as array($node,
+ // $is_inline, stack of children)
+ // e.g. array_reverse($node->children) - already processed
+ // children.
+
+ $parent_def = $definition->info_parent_def;
+ $stack = array(
+ array($top_node,
+ $parent_def->descendants_are_inline,
+ $parent_def->excludes, // exclusions
+ 0)
+ );
+
+ while (!empty($stack)) {
+ list($node, $is_inline, $excludes, $ix) = array_pop($stack);
+ // recursive call
+ $go = false;
+ $def = empty($stack) ? $definition->info_parent_def : $definition->info[$node->name];
+ while (isset($node->children[$ix])) {
+ $child = $node->children[$ix++];
+ if ($child instanceof HTMLPurifier_Node_Element) {
+ $go = true;
+ $stack[] = array($node, $is_inline, $excludes, $ix);
+ $stack[] = array($child,
+ // ToDo: I don't think it matters if it's def or
+ // child_def, but double check this...
+ $is_inline || $def->descendants_are_inline,
+ empty($def->excludes) ? $excludes
+ : array_merge($excludes, $def->excludes),
+ 0);
+ break;
}
- }
-
- //################################################################//
- // Perform child validation
-
- if ($excluded) {
- // there is an exclusion, remove the entire node
- $result = false;
- $excludes = array(); // not used, but good to initialize anyway
+ };
+ if ($go) continue;
+ list($token, $d) = $node->toTokenPair();
+ // base case
+ if ($excludes_enabled && isset($excludes[$node->name])) {
+ $node->dead = true;
+ if ($e) $e->send(E_ERROR, 'Strategy_FixNesting: Node excluded');
} else {
- // DEFINITION CALL
- if ($i === 0) {
- // special processing for the first node
- $def = $definition->info_parent_def;
- } else {
- $def = $definition->info[$tokens[$i]->name];
-
+ // XXX I suppose it would be slightly more efficient to
+ // avoid the allocation here and have children
+ // strategies handle it
+ $children = array();
+ foreach ($node->children as $child) {
+ if (!$child->dead) $children[] = $child;
}
-
- if (!empty($def->child)) {
- // have DTD child def validate children
- $result = $def->child->validateChildren(
- $child_tokens, $config, $context);
+ $result = $def->child->validateChildren($children, $config, $context);
+ if ($result === true) {
+ // nop
+ $node->children = $children;
+ } elseif ($result === false) {
+ $node->dead = true;
+ if ($e) $e->send(E_ERROR, 'Strategy_FixNesting: Node removed');
} else {
- // weird, no child definition, get rid of everything
- $result = false;
- }
-
- // determine whether or not this element has any exclusions
- $excludes = $def->excludes;
- }
-
- // $result is now a bool or array
-
- //################################################################//
- // Process result by interpreting $result
-
- if ($result === true || $child_tokens === $result) {
- // leave the node as is
-
- // register start token as a parental node start
- $stack[] = $i;
-
- // register exclusions if there are any
- if (!empty($excludes)) $exclude_stack[] = $excludes;
-
- // move cursor to next possible start node
- $i++;
-
- } elseif($result === false) {
- // remove entire node
-
- if ($e) {
- if ($excluded) {
- $e->send(E_ERROR, 'Strategy_FixNesting: Node excluded');
- } else {
- $e->send(E_ERROR, 'Strategy_FixNesting: Node removed');
- }
- }
-
- // calculate length of inner tokens and current tokens
- $length = $j - $i + 1;
-
- // perform removal
- array_splice($tokens, $i, $length);
-
- // update size
- $size -= $length;
-
- // there is no start token to register,
- // current node is now the next possible start node
- // unless it turns out that we need to do a double-check
-
- // this is a rought heuristic that covers 100% of HTML's
- // cases and 99% of all other cases. A child definition
- // that would be tricked by this would be something like:
- // ( | a b c) where it's all or nothing. Fortunately,
- // our current implementation claims that that case would
- // not allow empty, even if it did
- if (!$parent_def->child->allow_empty) {
- // we need to do a double-check
- $i = $parent_index;
- array_pop($stack);
- }
-
- // PROJECTED OPTIMIZATION: Process all children elements before
- // reprocessing parent node.
-
- } else {
- // replace node with $result
-
- // calculate length of inner tokens
- $length = $j - $i - 1;
-
- if ($e) {
- if (empty($result) && $length) {
- $e->send(E_ERROR, 'Strategy_FixNesting: Node contents removed');
- } else {
- $e->send(E_WARNING, 'Strategy_FixNesting: Node reorganized');
+ $node->children = $result;
+ if ($e) {
+ // XXX This will miss mutations of internal nodes. Perhaps defer to the child validators
+ if (empty($result) && !empty($children)) {
+ $e->send(E_ERROR, 'Strategy_FixNesting: Node contents removed');
+ } else if ($result != $children) {
+ $e->send(E_WARNING, 'Strategy_FixNesting: Node reorganized');
+ }
}
}
-
- // perform replacement
- array_splice($tokens, $i + 1, $length, $result);
-
- // update size
- $size -= $length;
- $size += count($result);
-
- // register start token as a parental node start
- $stack[] = $i;
-
- // register exclusions if there are any
- if (!empty($excludes)) $exclude_stack[] = $excludes;
-
- // move cursor to next possible start node
- $i++;
-
}
-
- //################################################################//
- // Scroll to next start node
-
- // We assume, at this point, that $i is the index of the token
- // that is the first possible new start point for a node.
-
- // Test if the token indeed is a start tag, if not, move forward
- // and test again.
- $size = count($tokens);
- while ($i < $size and !$tokens[$i] instanceof HTMLPurifier_Token_Start) {
- if ($tokens[$i] instanceof HTMLPurifier_Token_End) {
- // pop a token index off the stack if we ended a node
- array_pop($stack);
- // pop an exclusion lookup off exclusion stack if
- // we ended node and that node had exclusions
- if ($i == 0 || $i == $size - 1) {
- // use specialized var if it's the super-parent
- $s_excludes = $definition->info_parent_def->excludes;
- } else {
- $s_excludes = $definition->info[$tokens[$i]->name]->excludes;
- }
- if ($s_excludes) {
- array_pop($exclude_stack);
- }
- }
- $i++;
- }
-
}
//####################################################################//
// Post-processing
- // remove implicit parent tokens at the beginning and end
- array_shift($tokens);
- array_pop($tokens);
-
// remove context variables
$context->destroy('IsInline');
+ $context->destroy('CurrentNode');
$context->destroy('CurrentToken');
//####################################################################//
// Return
- return $tokens;
-
+ return HTMLPurifier_Arborize::flatten($node, $config, $context);
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Strategy/MakeWellFormed.php b/library/HTMLPurifier/Strategy/MakeWellFormed.php
index c73658400..e389e0011 100644
--- a/library/HTMLPurifier/Strategy/MakeWellFormed.php
+++ b/library/HTMLPurifier/Strategy/MakeWellFormed.php
@@ -2,66 +2,97 @@
/**
* Takes tokens makes them well-formed (balance end tags, etc.)
+ *
+ * Specification of the armor attributes this strategy uses:
+ *
+ * - MakeWellFormed_TagClosedError: This armor field is used to
+ * suppress tag closed errors for certain tokens [TagClosedSuppress],
+ * in particular, if a tag was generated automatically by HTML
+ * Purifier, we may rely on our infrastructure to close it for us
+ * and shouldn't report an error to the user [TagClosedAuto].
*/
class HTMLPurifier_Strategy_MakeWellFormed extends HTMLPurifier_Strategy
{
/**
* Array stream of tokens being processed.
+ * @type HTMLPurifier_Token[]
*/
protected $tokens;
/**
- * Current index in $tokens.
+ * Current token.
+ * @type HTMLPurifier_Token
*/
- protected $t;
+ protected $token;
+
+ /**
+ * Zipper managing the true state.
+ * @type HTMLPurifier_Zipper
+ */
+ protected $zipper;
/**
* Current nesting of elements.
+ * @type array
*/
protected $stack;
/**
* Injectors active in this stream processing.
+ * @type HTMLPurifier_Injector[]
*/
protected $injectors;
/**
* Current instance of HTMLPurifier_Config.
+ * @type HTMLPurifier_Config
*/
protected $config;
/**
* Current instance of HTMLPurifier_Context.
+ * @type HTMLPurifier_Context
*/
protected $context;
- public function execute($tokens, $config, $context) {
-
+ /**
+ * @param HTMLPurifier_Token[] $tokens
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return HTMLPurifier_Token[]
+ * @throws HTMLPurifier_Exception
+ */
+ public function execute($tokens, $config, $context)
+ {
$definition = $config->getHTMLDefinition();
// local variables
$generator = new HTMLPurifier_Generator($config, $context);
$escape_invalid_tags = $config->get('Core.EscapeInvalidTags');
+ // used for autoclose early abortion
+ $global_parent_allowed_elements = $definition->info_parent_def->child->getAllowedElements($config);
$e = $context->get('ErrorCollector', true);
- $t = false; // token index
$i = false; // injector index
- $token = false; // the current token
- $reprocess = false; // whether or not to reprocess the same token
+ list($zipper, $token) = HTMLPurifier_Zipper::fromArray($tokens);
+ if ($token === NULL) {
+ return array();
+ }
+ $reprocess = false; // whether or not to reprocess the same token
$stack = array();
// member variables
- $this->stack =& $stack;
- $this->t =& $t;
- $this->tokens =& $tokens;
- $this->config = $config;
+ $this->stack =& $stack;
+ $this->tokens =& $tokens;
+ $this->token =& $token;
+ $this->zipper =& $zipper;
+ $this->config = $config;
$this->context = $context;
// context variables
$context->register('CurrentNesting', $stack);
- $context->register('InputIndex', $t);
- $context->register('InputTokens', $tokens);
- $context->register('CurrentToken', $token);
+ $context->register('InputZipper', $zipper);
+ $context->register('CurrentToken', $token);
// -- begin INJECTOR --
@@ -73,9 +104,13 @@ class HTMLPurifier_Strategy_MakeWellFormed extends HTMLPurifier_Strategy
unset($injectors['Custom']); // special case
foreach ($injectors as $injector => $b) {
// XXX: Fix with a legitimate lookup table of enabled filters
- if (strpos($injector, '.') !== false) continue;
+ if (strpos($injector, '.') !== false) {
+ continue;
+ }
$injector = "HTMLPurifier_Injector_$injector";
- if (!$b) continue;
+ if (!$b) {
+ continue;
+ }
$this->injectors[] = new $injector;
}
foreach ($def_injectors as $injector) {
@@ -83,7 +118,9 @@ class HTMLPurifier_Strategy_MakeWellFormed extends HTMLPurifier_Strategy
$this->injectors[] = $injector;
}
foreach ($custom_injectors as $injector) {
- if (!$injector) continue;
+ if (!$injector) {
+ continue;
+ }
if (is_string($injector)) {
$injector = "HTMLPurifier_Injector_$injector";
$injector = new $injector;
@@ -95,14 +132,16 @@ class HTMLPurifier_Strategy_MakeWellFormed extends HTMLPurifier_Strategy
// variables for performance reasons
foreach ($this->injectors as $ix => $injector) {
$error = $injector->prepare($config, $context);
- if (!$error) continue;
+ if (!$error) {
+ continue;
+ }
array_splice($this->injectors, $ix, 1); // rm the injector
trigger_error("Cannot enable {$injector->name} injector because $error is not allowed", E_USER_WARNING);
}
// -- end INJECTOR --
- // a note on punting:
+ // a note on reprocessing:
// In order to reduce code duplication, whenever some code needs
// to make HTML changes in order to make things "correct", the
// new HTML gets sent through the purifier, regardless of its
@@ -111,70 +150,75 @@ class HTMLPurifier_Strategy_MakeWellFormed extends HTMLPurifier_Strategy
// punt ($reprocess = true; continue;) and it does that for us.
// isset is in loop because $tokens size changes during loop exec
- for (
- $t = 0;
- $t == 0 || isset($tokens[$t - 1]);
- // only increment if we don't need to reprocess
- $reprocess ? $reprocess = false : $t++
- ) {
+ for (;;
+ // only increment if we don't need to reprocess
+ $reprocess ? $reprocess = false : $token = $zipper->next($token)) {
// check for a rewind
- if (is_int($i) && $i >= 0) {
+ if (is_int($i)) {
// possibility: disable rewinding if the current token has a
// rewind set on it already. This would offer protection from
// infinite loop, but might hinder some advanced rewinding.
- $rewind_to = $this->injectors[$i]->getRewind();
- if (is_int($rewind_to) && $rewind_to < $t) {
- if ($rewind_to < 0) $rewind_to = 0;
- while ($t > $rewind_to) {
- $t--;
- $prev = $tokens[$t];
+ $rewind_offset = $this->injectors[$i]->getRewindOffset();
+ if (is_int($rewind_offset)) {
+ for ($j = 0; $j < $rewind_offset; $j++) {
+ if (empty($zipper->front)) break;
+ $token = $zipper->prev($token);
// indicate that other injectors should not process this token,
// but we need to reprocess it
- unset($prev->skip[$i]);
- $prev->rewind = $i;
- if ($prev instanceof HTMLPurifier_Token_Start) array_pop($this->stack);
- elseif ($prev instanceof HTMLPurifier_Token_End) $this->stack[] = $prev->start;
+ unset($token->skip[$i]);
+ $token->rewind = $i;
+ if ($token instanceof HTMLPurifier_Token_Start) {
+ array_pop($this->stack);
+ } elseif ($token instanceof HTMLPurifier_Token_End) {
+ $this->stack[] = $token->start;
+ }
}
}
$i = false;
}
// handle case of document end
- if (!isset($tokens[$t])) {
+ if ($token === NULL) {
// kill processing if stack is empty
- if (empty($this->stack)) break;
+ if (empty($this->stack)) {
+ break;
+ }
// peek
$top_nesting = array_pop($this->stack);
$this->stack[] = $top_nesting;
- // send error
+ // send error [TagClosedSuppress]
if ($e && !isset($top_nesting->armor['MakeWellFormed_TagClosedError'])) {
$e->send(E_NOTICE, 'Strategy_MakeWellFormed: Tag closed by document end', $top_nesting);
}
// append, don't splice, since this is the end
- $tokens[] = new HTMLPurifier_Token_End($top_nesting->name);
+ $token = new HTMLPurifier_Token_End($top_nesting->name);
// punt!
$reprocess = true;
continue;
}
- $token = $tokens[$t];
-
- //echo '<br>'; printTokens($tokens, $t); printTokens($this->stack);
+ //echo '<br>'; printZipper($zipper, $token);//printTokens($this->stack);
//flush();
// quick-check: if it's not a tag, no need to process
if (empty($token->is_tag)) {
if ($token instanceof HTMLPurifier_Token_Text) {
foreach ($this->injectors as $i => $injector) {
- if (isset($token->skip[$i])) continue;
- if ($token->rewind !== null && $token->rewind !== $i) continue;
- $injector->handleText($token);
- $this->processToken($token, $i);
+ if (isset($token->skip[$i])) {
+ continue;
+ }
+ if ($token->rewind !== null && $token->rewind !== $i) {
+ continue;
+ }
+ // XXX fuckup
+ $r = $token;
+ $injector->handleText($r);
+ $token = $this->processToken($r, $i);
$reprocess = true;
break;
}
@@ -193,12 +237,22 @@ class HTMLPurifier_Strategy_MakeWellFormed extends HTMLPurifier_Strategy
$ok = false;
if ($type === 'empty' && $token instanceof HTMLPurifier_Token_Start) {
// claims to be a start tag but is empty
- $token = new HTMLPurifier_Token_Empty($token->name, $token->attr);
+ $token = new HTMLPurifier_Token_Empty(
+ $token->name,
+ $token->attr,
+ $token->line,
+ $token->col,
+ $token->armor
+ );
$ok = true;
} elseif ($type && $type !== 'empty' && $token instanceof HTMLPurifier_Token_Empty) {
// claims to be empty but really is a start tag
- $this->swap(new HTMLPurifier_Token_End($token->name));
- $this->insertBefore(new HTMLPurifier_Token_Start($token->name, $token->attr));
+ // NB: this assignment is required
+ $old_token = $token;
+ $token = new HTMLPurifier_Token_End($token->name);
+ $token = $this->insertBefore(
+ new HTMLPurifier_Token_Start($old_token->name, $old_token->attr, $old_token->line, $old_token->col, $old_token->armor)
+ );
// punt (since we had to modify the input stream in a non-trivial way)
$reprocess = true;
continue;
@@ -211,55 +265,96 @@ class HTMLPurifier_Strategy_MakeWellFormed extends HTMLPurifier_Strategy
// ...unless they also have to close their parent
if (!empty($this->stack)) {
+ // Performance note: you might think that it's rather
+ // inefficient, recalculating the autoclose information
+ // for every tag that a token closes (since when we
+ // do an autoclose, we push a new token into the
+ // stream and then /process/ that, before
+ // re-processing this token.) But this is
+ // necessary, because an injector can make an
+ // arbitrary transformations to the autoclosing
+ // tokens we introduce, so things may have changed
+ // in the meantime. Also, doing the inefficient thing is
+ // "easy" to reason about (for certain perverse definitions
+ // of "easy")
+
$parent = array_pop($this->stack);
$this->stack[] = $parent;
+ $parent_def = null;
+ $parent_elements = null;
+ $autoclose = false;
if (isset($definition->info[$parent->name])) {
- $elements = $definition->info[$parent->name]->child->getAllowedElements($config);
- $autoclose = !isset($elements[$token->name]);
- } else {
- $autoclose = false;
+ $parent_def = $definition->info[$parent->name];
+ $parent_elements = $parent_def->child->getAllowedElements($config);
+ $autoclose = !isset($parent_elements[$token->name]);
}
if ($autoclose && $definition->info[$token->name]->wrap) {
- // Check if an element can be wrapped by another
- // element to make it valid in a context (for
+ // Check if an element can be wrapped by another
+ // element to make it valid in a context (for
// example, <ul><ul> needs a <li> in between)
$wrapname = $definition->info[$token->name]->wrap;
$wrapdef = $definition->info[$wrapname];
$elements = $wrapdef->child->getAllowedElements($config);
- $parent_elements = $definition->info[$parent->name]->child->getAllowedElements($config);
if (isset($elements[$token->name]) && isset($parent_elements[$wrapname])) {
$newtoken = new HTMLPurifier_Token_Start($wrapname);
- $this->insertBefore($newtoken);
+ $token = $this->insertBefore($newtoken);
$reprocess = true;
continue;
}
}
$carryover = false;
- if ($autoclose && $definition->info[$parent->name]->formatting) {
+ if ($autoclose && $parent_def->formatting) {
$carryover = true;
}
if ($autoclose) {
- // errors need to be updated
- $new_token = new HTMLPurifier_Token_End($parent->name);
- $new_token->start = $parent;
- if ($carryover) {
- $element = clone $parent;
- $element->armor['MakeWellFormed_TagClosedError'] = true;
- $element->carryover = true;
- $this->processToken(array($new_token, $token, $element));
- } else {
- $this->insertBefore($new_token);
+ // check if this autoclose is doomed to fail
+ // (this rechecks $parent, which his harmless)
+ $autoclose_ok = isset($global_parent_allowed_elements[$token->name]);
+ if (!$autoclose_ok) {
+ foreach ($this->stack as $ancestor) {
+ $elements = $definition->info[$ancestor->name]->child->getAllowedElements($config);
+ if (isset($elements[$token->name])) {
+ $autoclose_ok = true;
+ break;
+ }
+ if ($definition->info[$token->name]->wrap) {
+ $wrapname = $definition->info[$token->name]->wrap;
+ $wrapdef = $definition->info[$wrapname];
+ $wrap_elements = $wrapdef->child->getAllowedElements($config);
+ if (isset($wrap_elements[$token->name]) && isset($elements[$wrapname])) {
+ $autoclose_ok = true;
+ break;
+ }
+ }
+ }
}
- if ($e && !isset($parent->armor['MakeWellFormed_TagClosedError'])) {
- if (!$carryover) {
- $e->send(E_NOTICE, 'Strategy_MakeWellFormed: Tag auto closed', $parent);
+ if ($autoclose_ok) {
+ // errors need to be updated
+ $new_token = new HTMLPurifier_Token_End($parent->name);
+ $new_token->start = $parent;
+ // [TagClosedSuppress]
+ if ($e && !isset($parent->armor['MakeWellFormed_TagClosedError'])) {
+ if (!$carryover) {
+ $e->send(E_NOTICE, 'Strategy_MakeWellFormed: Tag auto closed', $parent);
+ } else {
+ $e->send(E_NOTICE, 'Strategy_MakeWellFormed: Tag carryover', $parent);
+ }
+ }
+ if ($carryover) {
+ $element = clone $parent;
+ // [TagClosedAuto]
+ $element->armor['MakeWellFormed_TagClosedError'] = true;
+ $element->carryover = true;
+ $token = $this->processToken(array($new_token, $token, $element));
} else {
- $e->send(E_NOTICE, 'Strategy_MakeWellFormed: Tag carryover', $parent);
+ $token = $this->insertBefore($new_token);
}
+ } else {
+ $token = $this->remove();
}
$reprocess = true;
continue;
@@ -271,20 +366,26 @@ class HTMLPurifier_Strategy_MakeWellFormed extends HTMLPurifier_Strategy
if ($ok) {
foreach ($this->injectors as $i => $injector) {
- if (isset($token->skip[$i])) continue;
- if ($token->rewind !== null && $token->rewind !== $i) continue;
- $injector->handleElement($token);
- $this->processToken($token, $i);
+ if (isset($token->skip[$i])) {
+ continue;
+ }
+ if ($token->rewind !== null && $token->rewind !== $i) {
+ continue;
+ }
+ $r = $token;
+ $injector->handleElement($r);
+ $token = $this->processToken($r, $i);
$reprocess = true;
break;
}
if (!$reprocess) {
// ah, nothing interesting happened; do normal processing
- $this->swap($token);
if ($token instanceof HTMLPurifier_Token_Start) {
$this->stack[] = $token;
} elseif ($token instanceof HTMLPurifier_Token_End) {
- throw new HTMLPurifier_Exception('Improper handling of end tag in start code; possible error in MakeWellFormed');
+ throw new HTMLPurifier_Exception(
+ 'Improper handling of end tag in start code; possible error in MakeWellFormed'
+ );
}
}
continue;
@@ -298,13 +399,15 @@ class HTMLPurifier_Strategy_MakeWellFormed extends HTMLPurifier_Strategy
// make sure that we have something open
if (empty($this->stack)) {
if ($escape_invalid_tags) {
- if ($e) $e->send(E_WARNING, 'Strategy_MakeWellFormed: Unnecessary end tag to text');
- $this->swap(new HTMLPurifier_Token_Text(
- $generator->generateFromToken($token)
- ));
+ if ($e) {
+ $e->send(E_WARNING, 'Strategy_MakeWellFormed: Unnecessary end tag to text');
+ }
+ $token = new HTMLPurifier_Token_Text($generator->generateFromToken($token));
} else {
- $this->remove();
- if ($e) $e->send(E_WARNING, 'Strategy_MakeWellFormed: Unnecessary end tag removed');
+ if ($e) {
+ $e->send(E_WARNING, 'Strategy_MakeWellFormed: Unnecessary end tag removed');
+ }
+ $token = $this->remove();
}
$reprocess = true;
continue;
@@ -318,10 +421,15 @@ class HTMLPurifier_Strategy_MakeWellFormed extends HTMLPurifier_Strategy
if ($current_parent->name == $token->name) {
$token->start = $current_parent;
foreach ($this->injectors as $i => $injector) {
- if (isset($token->skip[$i])) continue;
- if ($token->rewind !== null && $token->rewind !== $i) continue;
- $injector->handleEnd($token);
- $this->processToken($token, $i);
+ if (isset($token->skip[$i])) {
+ continue;
+ }
+ if ($token->rewind !== null && $token->rewind !== $i) {
+ continue;
+ }
+ $r = $token;
+ $injector->handleEnd($r);
+ $token = $this->processToken($r, $i);
$this->stack[] = $current_parent;
$reprocess = true;
break;
@@ -349,13 +457,15 @@ class HTMLPurifier_Strategy_MakeWellFormed extends HTMLPurifier_Strategy
// we didn't find the tag, so remove
if ($skipped_tags === false) {
if ($escape_invalid_tags) {
- $this->swap(new HTMLPurifier_Token_Text(
- $generator->generateFromToken($token)
- ));
- if ($e) $e->send(E_WARNING, 'Strategy_MakeWellFormed: Stray end tag to text');
+ if ($e) {
+ $e->send(E_WARNING, 'Strategy_MakeWellFormed: Stray end tag to text');
+ }
+ $token = new HTMLPurifier_Token_Text($generator->generateFromToken($token));
} else {
- $this->remove();
- if ($e) $e->send(E_WARNING, 'Strategy_MakeWellFormed: Stray end tag removed');
+ if ($e) {
+ $e->send(E_WARNING, 'Strategy_MakeWellFormed: Stray end tag removed');
+ }
+ $token = $this->remove();
}
$reprocess = true;
continue;
@@ -366,7 +476,7 @@ class HTMLPurifier_Strategy_MakeWellFormed extends HTMLPurifier_Strategy
if ($e) {
for ($j = $c - 1; $j > 0; $j--) {
// notice we exclude $j == 0, i.e. the current ending tag, from
- // the errors...
+ // the errors... [TagClosedSuppress]
if (!isset($skipped_tags[$j]->armor['MakeWellFormed_TagClosedError'])) {
$e->send(E_NOTICE, 'Strategy_MakeWellFormed: Tag closed by element end', $skipped_tags[$j]);
}
@@ -381,24 +491,24 @@ class HTMLPurifier_Strategy_MakeWellFormed extends HTMLPurifier_Strategy
$new_token->start = $skipped_tags[$j];
array_unshift($replace, $new_token);
if (isset($definition->info[$new_token->name]) && $definition->info[$new_token->name]->formatting) {
+ // [TagClosedAuto]
$element = clone $skipped_tags[$j];
$element->carryover = true;
$element->armor['MakeWellFormed_TagClosedError'] = true;
$replace[] = $element;
}
}
- $this->processToken($replace);
+ $token = $this->processToken($replace);
$reprocess = true;
continue;
}
- $context->destroy('CurrentNesting');
- $context->destroy('InputTokens');
- $context->destroy('InputIndex');
$context->destroy('CurrentToken');
+ $context->destroy('CurrentNesting');
+ $context->destroy('InputZipper');
- unset($this->injectors, $this->stack, $this->tokens, $this->t);
- return $tokens;
+ unset($this->injectors, $this->stack, $this->tokens);
+ return $zipper->toArray($token);
}
/**
@@ -417,25 +527,38 @@ class HTMLPurifier_Strategy_MakeWellFormed extends HTMLPurifier_Strategy
* If $token is an integer, that number of tokens (with the first token
* being the current one) will be deleted.
*
- * @param $token Token substitution value
- * @param $injector Injector that performed the substitution; default is if
+ * @param HTMLPurifier_Token|array|int|bool $token Token substitution value
+ * @param HTMLPurifier_Injector|int $injector Injector that performed the substitution; default is if
* this is not an injector related operation.
+ * @throws HTMLPurifier_Exception
*/
- protected function processToken($token, $injector = -1) {
-
+ protected function processToken($token, $injector = -1)
+ {
// normalize forms of token
- if (is_object($token)) $token = array(1, $token);
- if (is_int($token)) $token = array($token);
- if ($token === false) $token = array(1);
- if (!is_array($token)) throw new HTMLPurifier_Exception('Invalid token type from injector');
- if (!is_int($token[0])) array_unshift($token, 1);
- if ($token[0] === 0) throw new HTMLPurifier_Exception('Deleting zero tokens is not valid');
+ if (is_object($token)) {
+ $token = array(1, $token);
+ }
+ if (is_int($token)) {
+ $token = array($token);
+ }
+ if ($token === false) {
+ $token = array(1);
+ }
+ if (!is_array($token)) {
+ throw new HTMLPurifier_Exception('Invalid token type from injector');
+ }
+ if (!is_int($token[0])) {
+ array_unshift($token, 1);
+ }
+ if ($token[0] === 0) {
+ throw new HTMLPurifier_Exception('Deleting zero tokens is not valid');
+ }
// $token is now an array with the following form:
// array(number nodes to delete, new node 1, new node 2, ...)
$delete = array_shift($token);
- $old = array_splice($this->tokens, $this->t, $delete, $token);
+ list($old, $r) = $this->zipper->splice($this->token, $delete, $token);
if ($injector > -1) {
// determine appropriate skips
@@ -446,30 +569,32 @@ class HTMLPurifier_Strategy_MakeWellFormed extends HTMLPurifier_Strategy
}
}
- }
+ return $r;
- /**
- * Inserts a token before the current token. Cursor now points to this token
- */
- private function insertBefore($token) {
- array_splice($this->tokens, $this->t, 0, array($token));
}
/**
- * Removes current token. Cursor now points to new token occupying previously
- * occupied space.
+ * Inserts a token before the current token. Cursor now points to
+ * this token. You must reprocess after this.
+ * @param HTMLPurifier_Token $token
*/
- private function remove() {
- array_splice($this->tokens, $this->t, 1);
+ private function insertBefore($token)
+ {
+ // NB not $this->zipper->insertBefore(), due to positioning
+ // differences
+ $splice = $this->zipper->splice($this->token, 0, array($token));
+
+ return $splice[1];
}
/**
- * Swap current token with new token. Cursor points to new token (no change).
+ * Removes current token. Cursor now points to new token occupying previously
+ * occupied space. You must reprocess after this.
*/
- private function swap($token) {
- $this->tokens[$this->t] = $token;
+ private function remove()
+ {
+ return $this->zipper->delete();
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Strategy/RemoveForeignElements.php b/library/HTMLPurifier/Strategy/RemoveForeignElements.php
index cf3a33e40..1a8149ecc 100644
--- a/library/HTMLPurifier/Strategy/RemoveForeignElements.php
+++ b/library/HTMLPurifier/Strategy/RemoveForeignElements.php
@@ -11,19 +11,29 @@
class HTMLPurifier_Strategy_RemoveForeignElements extends HTMLPurifier_Strategy
{
- public function execute($tokens, $config, $context) {
+ /**
+ * @param HTMLPurifier_Token[] $tokens
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array|HTMLPurifier_Token[]
+ */
+ public function execute($tokens, $config, $context)
+ {
$definition = $config->getHTMLDefinition();
$generator = new HTMLPurifier_Generator($config, $context);
$result = array();
$escape_invalid_tags = $config->get('Core.EscapeInvalidTags');
- $remove_invalid_img = $config->get('Core.RemoveInvalidImg');
+ $remove_invalid_img = $config->get('Core.RemoveInvalidImg');
// currently only used to determine if comments should be kept
$trusted = $config->get('HTML.Trusted');
+ $comment_lookup = $config->get('HTML.AllowedComments');
+ $comment_regexp = $config->get('HTML.AllowedCommentsRegexp');
+ $check_comments = $comment_lookup !== array() || $comment_regexp !== null;
$remove_script_contents = $config->get('Core.RemoveScriptContents');
- $hidden_elements = $config->get('Core.HiddenElements');
+ $hidden_elements = $config->get('Core.HiddenElements');
// remove script contents compatibility
if ($remove_script_contents === true) {
@@ -48,34 +58,31 @@ class HTMLPurifier_Strategy_RemoveForeignElements extends HTMLPurifier_Strategy
$e =& $context->get('ErrorCollector');
}
- foreach($tokens as $token) {
+ foreach ($tokens as $token) {
if ($remove_until) {
if (empty($token->is_tag) || $token->name !== $remove_until) {
continue;
}
}
- if (!empty( $token->is_tag )) {
+ if (!empty($token->is_tag)) {
// DEFINITION CALL
// before any processing, try to transform the element
- if (
- isset($definition->info_tag_transform[$token->name])
- ) {
+ if (isset($definition->info_tag_transform[$token->name])) {
$original_name = $token->name;
// there is a transformation for this tag
// DEFINITION CALL
$token = $definition->
- info_tag_transform[$token->name]->
- transform($token, $config, $context);
- if ($e) $e->send(E_NOTICE, 'Strategy_RemoveForeignElements: Tag transform', $original_name);
+ info_tag_transform[$token->name]->transform($token, $config, $context);
+ if ($e) {
+ $e->send(E_NOTICE, 'Strategy_RemoveForeignElements: Tag transform', $original_name);
+ }
}
if (isset($definition->info[$token->name])) {
-
// mostly everything's good, but
// we need to make sure required attributes are in order
- if (
- ($token instanceof HTMLPurifier_Token_Start || $token instanceof HTMLPurifier_Token_Empty) &&
+ if (($token instanceof HTMLPurifier_Token_Start || $token instanceof HTMLPurifier_Token_Empty) &&
$definition->info[$token->name]->required_attr &&
($token->name != 'img' || $remove_invalid_img) // ensure config option still works
) {
@@ -88,7 +95,13 @@ class HTMLPurifier_Strategy_RemoveForeignElements extends HTMLPurifier_Strategy
}
}
if (!$ok) {
- if ($e) $e->send(E_ERROR, 'Strategy_RemoveForeignElements: Missing required attribute', $name);
+ if ($e) {
+ $e->send(
+ E_ERROR,
+ 'Strategy_RemoveForeignElements: Missing required attribute',
+ $name
+ );
+ }
continue;
}
$token->armor['ValidateAttributes'] = true;
@@ -102,7 +115,9 @@ class HTMLPurifier_Strategy_RemoveForeignElements extends HTMLPurifier_Strategy
} elseif ($escape_invalid_tags) {
// invalid tag, generate HTML representation and insert in
- if ($e) $e->send(E_WARNING, 'Strategy_RemoveForeignElements: Foreign element to text');
+ if ($e) {
+ $e->send(E_WARNING, 'Strategy_RemoveForeignElements: Foreign element to text');
+ }
$token = new HTMLPurifier_Token_Text(
$generator->generateFromToken($token)
);
@@ -117,9 +132,13 @@ class HTMLPurifier_Strategy_RemoveForeignElements extends HTMLPurifier_Strategy
} else {
$remove_until = false;
}
- if ($e) $e->send(E_ERROR, 'Strategy_RemoveForeignElements: Foreign meta element removed');
+ if ($e) {
+ $e->send(E_ERROR, 'Strategy_RemoveForeignElements: Foreign meta element removed');
+ }
} else {
- if ($e) $e->send(E_ERROR, 'Strategy_RemoveForeignElements: Foreign element removed');
+ if ($e) {
+ $e->send(E_ERROR, 'Strategy_RemoveForeignElements: Foreign element removed');
+ }
}
continue;
}
@@ -128,26 +147,46 @@ class HTMLPurifier_Strategy_RemoveForeignElements extends HTMLPurifier_Strategy
if ($textify_comments !== false) {
$data = $token->data;
$token = new HTMLPurifier_Token_Text($data);
- } elseif ($trusted) {
- // keep, but perform comment cleaning
+ } elseif ($trusted || $check_comments) {
+ // always cleanup comments
+ $trailing_hyphen = false;
if ($e) {
// perform check whether or not there's a trailing hyphen
if (substr($token->data, -1) == '-') {
- $e->send(E_NOTICE, 'Strategy_RemoveForeignElements: Trailing hyphen in comment removed');
+ $trailing_hyphen = true;
}
}
$token->data = rtrim($token->data, '-');
$found_double_hyphen = false;
while (strpos($token->data, '--') !== false) {
- if ($e && !$found_double_hyphen) {
- $e->send(E_NOTICE, 'Strategy_RemoveForeignElements: Hyphens in comment collapsed');
- }
- $found_double_hyphen = true; // prevent double-erroring
+ $found_double_hyphen = true;
$token->data = str_replace('--', '-', $token->data);
}
+ if ($trusted || !empty($comment_lookup[trim($token->data)]) ||
+ ($comment_regexp !== null && preg_match($comment_regexp, trim($token->data)))) {
+ // OK good
+ if ($e) {
+ if ($trailing_hyphen) {
+ $e->send(
+ E_NOTICE,
+ 'Strategy_RemoveForeignElements: Trailing hyphen in comment removed'
+ );
+ }
+ if ($found_double_hyphen) {
+ $e->send(E_NOTICE, 'Strategy_RemoveForeignElements: Hyphens in comment collapsed');
+ }
+ }
+ } else {
+ if ($e) {
+ $e->send(E_NOTICE, 'Strategy_RemoveForeignElements: Comment removed');
+ }
+ continue;
+ }
} else {
// strip comments
- if ($e) $e->send(E_NOTICE, 'Strategy_RemoveForeignElements: Comment removed');
+ if ($e) {
+ $e->send(E_NOTICE, 'Strategy_RemoveForeignElements: Comment removed');
+ }
continue;
}
} elseif ($token instanceof HTMLPurifier_Token_Text) {
@@ -160,12 +199,9 @@ class HTMLPurifier_Strategy_RemoveForeignElements extends HTMLPurifier_Strategy
// we removed tokens until the end, throw error
$e->send(E_ERROR, 'Strategy_RemoveForeignElements: Token removed to end', $remove_until);
}
-
$context->destroy('CurrentToken');
-
return $result;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Strategy/ValidateAttributes.php b/library/HTMLPurifier/Strategy/ValidateAttributes.php
index c3328a9d4..fbb3d27c8 100644
--- a/library/HTMLPurifier/Strategy/ValidateAttributes.php
+++ b/library/HTMLPurifier/Strategy/ValidateAttributes.php
@@ -7,8 +7,14 @@
class HTMLPurifier_Strategy_ValidateAttributes extends HTMLPurifier_Strategy
{
- public function execute($tokens, $config, $context) {
-
+ /**
+ * @param HTMLPurifier_Token[] $tokens
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return HTMLPurifier_Token[]
+ */
+ public function execute($tokens, $config, $context)
+ {
// setup validator
$validator = new HTMLPurifier_AttrValidator();
@@ -19,21 +25,21 @@ class HTMLPurifier_Strategy_ValidateAttributes extends HTMLPurifier_Strategy
// only process tokens that have attributes,
// namely start and empty tags
- if (!$token instanceof HTMLPurifier_Token_Start && !$token instanceof HTMLPurifier_Token_Empty) continue;
+ if (!$token instanceof HTMLPurifier_Token_Start && !$token instanceof HTMLPurifier_Token_Empty) {
+ continue;
+ }
// skip tokens that are armored
- if (!empty($token->armor['ValidateAttributes'])) continue;
+ if (!empty($token->armor['ValidateAttributes'])) {
+ continue;
+ }
// note that we have no facilities here for removing tokens
$validator->validateToken($token, $config, $context);
-
- $tokens[$key] = $token; // for PHP 4
}
$context->destroy('CurrentToken');
-
return $tokens;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/StringHash.php b/library/HTMLPurifier/StringHash.php
index 62085c5c2..c07370197 100644
--- a/library/HTMLPurifier/StringHash.php
+++ b/library/HTMLPurifier/StringHash.php
@@ -10,28 +10,36 @@
*/
class HTMLPurifier_StringHash extends ArrayObject
{
+ /**
+ * @type array
+ */
protected $accessed = array();
/**
* Retrieves a value, and logs the access.
+ * @param mixed $index
+ * @return mixed
*/
- public function offsetGet($index) {
+ public function offsetGet($index)
+ {
$this->accessed[$index] = true;
return parent::offsetGet($index);
}
/**
* Returns a lookup array of all array indexes that have been accessed.
- * @return Array in form array($index => true).
+ * @return array in form array($index => true).
*/
- public function getAccessed() {
+ public function getAccessed()
+ {
return $this->accessed;
}
/**
* Resets the access array.
*/
- public function resetAccessed() {
+ public function resetAccessed()
+ {
$this->accessed = array();
}
}
diff --git a/library/HTMLPurifier/StringHashParser.php b/library/HTMLPurifier/StringHashParser.php
index f3e70c712..7c73f8083 100644
--- a/library/HTMLPurifier/StringHashParser.php
+++ b/library/HTMLPurifier/StringHashParser.php
@@ -28,15 +28,25 @@
class HTMLPurifier_StringHashParser
{
+ /**
+ * @type string
+ */
public $default = 'ID';
/**
* Parses a file that contains a single string-hash.
+ * @param string $file
+ * @return array
*/
- public function parseFile($file) {
- if (!file_exists($file)) return false;
+ public function parseFile($file)
+ {
+ if (!file_exists($file)) {
+ return false;
+ }
$fh = fopen($file, 'r');
- if (!$fh) return false;
+ if (!$fh) {
+ return false;
+ }
$ret = $this->parseHandle($fh);
fclose($fh);
return $ret;
@@ -44,12 +54,19 @@ class HTMLPurifier_StringHashParser
/**
* Parses a file that contains multiple string-hashes delimited by '----'
+ * @param string $file
+ * @return array
*/
- public function parseMultiFile($file) {
- if (!file_exists($file)) return false;
+ public function parseMultiFile($file)
+ {
+ if (!file_exists($file)) {
+ return false;
+ }
$ret = array();
$fh = fopen($file, 'r');
- if (!$fh) return false;
+ if (!$fh) {
+ return false;
+ }
while (!feof($fh)) {
$ret[] = $this->parseHandle($fh);
}
@@ -62,26 +79,36 @@ class HTMLPurifier_StringHashParser
* @note While it's possible to simulate in-memory parsing by using
* custom stream wrappers, if such a use-case arises we should
* factor out the file handle into its own class.
- * @param $fh File handle with pointer at start of valid string-hash
+ * @param resource $fh File handle with pointer at start of valid string-hash
* block.
+ * @return array
*/
- protected function parseHandle($fh) {
+ protected function parseHandle($fh)
+ {
$state = false;
$single = false;
$ret = array();
do {
$line = fgets($fh);
- if ($line === false) break;
+ if ($line === false) {
+ break;
+ }
$line = rtrim($line, "\n\r");
- if (!$state && $line === '') continue;
- if ($line === '----') break;
+ if (!$state && $line === '') {
+ continue;
+ }
+ if ($line === '----') {
+ break;
+ }
if (strncmp('--#', $line, 3) === 0) {
// Comment
continue;
} elseif (strncmp('--', $line, 2) === 0) {
// Multiline declaration
$state = trim($line, '- ');
- if (!isset($ret[$state])) $ret[$state] = '';
+ if (!isset($ret[$state])) {
+ $ret[$state] = '';
+ }
continue;
} elseif (!$state) {
$single = true;
@@ -104,7 +131,6 @@ class HTMLPurifier_StringHashParser
} while (!feof($fh));
return $ret;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/TagTransform.php b/library/HTMLPurifier/TagTransform.php
index 210a44721..7b8d83343 100644
--- a/library/HTMLPurifier/TagTransform.php
+++ b/library/HTMLPurifier/TagTransform.php
@@ -8,14 +8,15 @@ abstract class HTMLPurifier_TagTransform
/**
* Tag name to transform the tag to.
+ * @type string
*/
public $transform_to;
/**
* Transforms the obsolete tag into the valid tag.
- * @param $tag Tag to be transformed.
- * @param $config Mandatory HTMLPurifier_Config object
- * @param $context Mandatory HTMLPurifier_Context object
+ * @param HTMLPurifier_Token_Tag $tag Tag to be transformed.
+ * @param HTMLPurifier_Config $config Mandatory HTMLPurifier_Config object
+ * @param HTMLPurifier_Context $context Mandatory HTMLPurifier_Context object
*/
abstract public function transform($tag, $config, $context);
@@ -23,14 +24,14 @@ abstract class HTMLPurifier_TagTransform
* Prepends CSS properties to the style attribute, creating the
* attribute if it doesn't exist.
* @warning Copied over from AttrTransform, be sure to keep in sync
- * @param $attr Attribute array to process (passed by reference)
- * @param $css CSS to prepend
+ * @param array $attr Attribute array to process (passed by reference)
+ * @param string $css CSS to prepend
*/
- protected function prependCSS(&$attr, $css) {
+ protected function prependCSS(&$attr, $css)
+ {
$attr['style'] = isset($attr['style']) ? $attr['style'] : '';
$attr['style'] = $css . $attr['style'];
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/TagTransform/Font.php b/library/HTMLPurifier/TagTransform/Font.php
index ed2463786..7853d90bc 100644
--- a/library/HTMLPurifier/TagTransform/Font.php
+++ b/library/HTMLPurifier/TagTransform/Font.php
@@ -17,9 +17,14 @@
*/
class HTMLPurifier_TagTransform_Font extends HTMLPurifier_TagTransform
{
-
+ /**
+ * @type string
+ */
public $transform_to = 'span';
+ /**
+ * @type array
+ */
protected $_size_lookup = array(
'0' => 'xx-small',
'1' => 'xx-small',
@@ -37,8 +42,14 @@ class HTMLPurifier_TagTransform_Font extends HTMLPurifier_TagTransform
'+4' => '300%'
);
- public function transform($tag, $config, $context) {
-
+ /**
+ * @param HTMLPurifier_Token_Tag $tag
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return HTMLPurifier_Token_End|string
+ */
+ public function transform($tag, $config, $context)
+ {
if ($tag instanceof HTMLPurifier_Token_End) {
$new_tag = clone $tag;
$new_tag->name = $this->transform_to;
@@ -63,17 +74,25 @@ class HTMLPurifier_TagTransform_Font extends HTMLPurifier_TagTransform
// handle size transform
if (isset($attr['size'])) {
// normalize large numbers
- if ($attr['size']{0} == '+' || $attr['size']{0} == '-') {
- $size = (int) $attr['size'];
- if ($size < -2) $attr['size'] = '-2';
- if ($size > 4) $attr['size'] = '+4';
- } else {
- $size = (int) $attr['size'];
- if ($size > 7) $attr['size'] = '7';
+ if ($attr['size'] !== '') {
+ if ($attr['size']{0} == '+' || $attr['size']{0} == '-') {
+ $size = (int)$attr['size'];
+ if ($size < -2) {
+ $attr['size'] = '-2';
+ }
+ if ($size > 4) {
+ $attr['size'] = '+4';
+ }
+ } else {
+ $size = (int)$attr['size'];
+ if ($size > 7) {
+ $attr['size'] = '7';
+ }
+ }
}
if (isset($this->_size_lookup[$attr['size']])) {
$prepend_style .= 'font-size:' .
- $this->_size_lookup[$attr['size']] . ';';
+ $this->_size_lookup[$attr['size']] . ';';
}
unset($attr['size']);
}
@@ -89,7 +108,6 @@ class HTMLPurifier_TagTransform_Font extends HTMLPurifier_TagTransform
$new_tag->attr = $attr;
return $new_tag;
-
}
}
diff --git a/library/HTMLPurifier/TagTransform/Simple.php b/library/HTMLPurifier/TagTransform/Simple.php
index 0e36130f2..71bf10b91 100644
--- a/library/HTMLPurifier/TagTransform/Simple.php
+++ b/library/HTMLPurifier/TagTransform/Simple.php
@@ -7,19 +7,29 @@
*/
class HTMLPurifier_TagTransform_Simple extends HTMLPurifier_TagTransform
{
-
+ /**
+ * @type string
+ */
protected $style;
/**
- * @param $transform_to Tag name to transform to.
- * @param $style CSS style to add to the tag
+ * @param string $transform_to Tag name to transform to.
+ * @param string $style CSS style to add to the tag
*/
- public function __construct($transform_to, $style = null) {
+ public function __construct($transform_to, $style = null)
+ {
$this->transform_to = $transform_to;
$this->style = $style;
}
- public function transform($tag, $config, $context) {
+ /**
+ * @param HTMLPurifier_Token_Tag $tag
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return string
+ */
+ public function transform($tag, $config, $context)
+ {
$new_tag = clone $tag;
$new_tag->name = $this->transform_to;
if (!is_null($this->style) &&
@@ -29,7 +39,6 @@ class HTMLPurifier_TagTransform_Simple extends HTMLPurifier_TagTransform
}
return $new_tag;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Token.php b/library/HTMLPurifier/Token.php
index 7900e6cb1..85b85e072 100644
--- a/library/HTMLPurifier/Token.php
+++ b/library/HTMLPurifier/Token.php
@@ -3,55 +3,98 @@
/**
* Abstract base token class that all others inherit from.
*/
-class HTMLPurifier_Token {
- public $line; /**< Line number node was on in source document. Null if unknown. */
- public $col; /**< Column of line node was on in source document. Null if unknown. */
+abstract class HTMLPurifier_Token
+{
+ /**
+ * Line number node was on in source document. Null if unknown.
+ * @type int
+ */
+ public $line;
+
+ /**
+ * Column of line node was on in source document. Null if unknown.
+ * @type int
+ */
+ public $col;
/**
* Lookup array of processing that this token is exempt from.
* Currently, valid values are "ValidateAttributes" and
* "MakeWellFormed_TagClosedError"
+ * @type array
*/
public $armor = array();
/**
* Used during MakeWellFormed.
+ * @type
*/
public $skip;
+
+ /**
+ * @type
+ */
public $rewind;
+
+ /**
+ * @type
+ */
public $carryover;
- public function __get($n) {
- if ($n === 'type') {
- trigger_error('Deprecated type property called; use instanceof', E_USER_NOTICE);
- switch (get_class($this)) {
- case 'HTMLPurifier_Token_Start': return 'start';
- case 'HTMLPurifier_Token_Empty': return 'empty';
- case 'HTMLPurifier_Token_End': return 'end';
- case 'HTMLPurifier_Token_Text': return 'text';
- case 'HTMLPurifier_Token_Comment': return 'comment';
- default: return null;
+ /**
+ * @param string $n
+ * @return null|string
+ */
+ public function __get($n)
+ {
+ if ($n === 'type') {
+ trigger_error('Deprecated type property called; use instanceof', E_USER_NOTICE);
+ switch (get_class($this)) {
+ case 'HTMLPurifier_Token_Start':
+ return 'start';
+ case 'HTMLPurifier_Token_Empty':
+ return 'empty';
+ case 'HTMLPurifier_Token_End':
+ return 'end';
+ case 'HTMLPurifier_Token_Text':
+ return 'text';
+ case 'HTMLPurifier_Token_Comment':
+ return 'comment';
+ default:
+ return null;
+ }
}
- }
}
/**
* Sets the position of the token in the source document.
+ * @param int $l
+ * @param int $c
*/
- public function position($l = null, $c = null) {
+ public function position($l = null, $c = null)
+ {
$this->line = $l;
- $this->col = $c;
+ $this->col = $c;
}
/**
* Convenience function for DirectLex settings line/col position.
+ * @param int $l
+ * @param int $c
*/
- public function rawPosition($l, $c) {
- if ($c === -1) $l++;
+ public function rawPosition($l, $c)
+ {
+ if ($c === -1) {
+ $l++;
+ }
$this->line = $l;
- $this->col = $c;
+ $this->col = $c;
}
+ /**
+ * Converts a token into its corresponding node.
+ */
+ abstract public function toNode();
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Token/Comment.php b/library/HTMLPurifier/Token/Comment.php
index dc6bdcabb..23453c705 100644
--- a/library/HTMLPurifier/Token/Comment.php
+++ b/library/HTMLPurifier/Token/Comment.php
@@ -5,17 +5,33 @@
*/
class HTMLPurifier_Token_Comment extends HTMLPurifier_Token
{
- public $data; /**< Character data within comment. */
+ /**
+ * Character data within comment.
+ * @type string
+ */
+ public $data;
+
+ /**
+ * @type bool
+ */
public $is_whitespace = true;
+
/**
* Transparent constructor.
*
- * @param $data String comment data.
+ * @param string $data String comment data.
+ * @param int $line
+ * @param int $col
*/
- public function __construct($data, $line = null, $col = null) {
+ public function __construct($data, $line = null, $col = null)
+ {
$this->data = $data;
$this->line = $line;
- $this->col = $col;
+ $this->col = $col;
+ }
+
+ public function toNode() {
+ return new HTMLPurifier_Node_Comment($this->data, $this->line, $this->col);
}
}
diff --git a/library/HTMLPurifier/Token/Empty.php b/library/HTMLPurifier/Token/Empty.php
index 2a82b47ad..78a95f555 100644
--- a/library/HTMLPurifier/Token/Empty.php
+++ b/library/HTMLPurifier/Token/Empty.php
@@ -5,7 +5,11 @@
*/
class HTMLPurifier_Token_Empty extends HTMLPurifier_Token_Tag
{
-
+ public function toNode() {
+ $n = parent::toNode();
+ $n->empty = true;
+ return $n;
+ }
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Token/End.php b/library/HTMLPurifier/Token/End.php
index 353e79daf..59b38fdc5 100644
--- a/library/HTMLPurifier/Token/End.php
+++ b/library/HTMLPurifier/Token/End.php
@@ -10,10 +10,15 @@
class HTMLPurifier_Token_End extends HTMLPurifier_Token_Tag
{
/**
- * Token that started this node. Added by MakeWellFormed. Please
- * do not edit this!
+ * Token that started this node.
+ * Added by MakeWellFormed. Please do not edit this!
+ * @type HTMLPurifier_Token
*/
public $start;
+
+ public function toNode() {
+ throw new Exception("HTMLPurifier_Token_End->toNode not supported!");
+ }
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Token/Start.php b/library/HTMLPurifier/Token/Start.php
index e0e14fc62..019f317ad 100644
--- a/library/HTMLPurifier/Token/Start.php
+++ b/library/HTMLPurifier/Token/Start.php
@@ -5,7 +5,6 @@
*/
class HTMLPurifier_Token_Start extends HTMLPurifier_Token_Tag
{
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Token/Tag.php b/library/HTMLPurifier/Token/Tag.php
index 798be028e..d643fa64e 100644
--- a/library/HTMLPurifier/Token/Tag.php
+++ b/library/HTMLPurifier/Token/Tag.php
@@ -3,13 +3,14 @@
/**
* Abstract class of a tag token (start, end or empty), and its behavior.
*/
-class HTMLPurifier_Token_Tag extends HTMLPurifier_Token
+abstract class HTMLPurifier_Token_Tag extends HTMLPurifier_Token
{
/**
* Static bool marker that indicates the class is a tag.
*
* This allows us to check objects with <tt>!empty($obj->is_tag)</tt>
* without having to use a function call <tt>is_a()</tt>.
+ * @type bool
*/
public $is_tag = true;
@@ -19,21 +20,27 @@ class HTMLPurifier_Token_Tag extends HTMLPurifier_Token
* @note Strictly speaking, XML tags are case sensitive, so we shouldn't
* be lower-casing them, but these tokens cater to HTML tags, which are
* insensitive.
+ * @type string
*/
public $name;
/**
* Associative array of the tag's attributes.
+ * @type array
*/
public $attr = array();
/**
* Non-overloaded constructor, which lower-cases passed tag name.
*
- * @param $name String name.
- * @param $attr Associative array of attributes.
+ * @param string $name String name.
+ * @param array $attr Associative array of attributes.
+ * @param int $line
+ * @param int $col
+ * @param array $armor
*/
- public function __construct($name, $attr = array(), $line = null, $col = null) {
+ public function __construct($name, $attr = array(), $line = null, $col = null, $armor = array())
+ {
$this->name = ctype_lower($name) ? $name : strtolower($name);
foreach ($attr as $key => $value) {
// normalization only necessary when key is not lowercase
@@ -49,7 +56,12 @@ class HTMLPurifier_Token_Tag extends HTMLPurifier_Token
}
$this->attr = $attr;
$this->line = $line;
- $this->col = $col;
+ $this->col = $col;
+ $this->armor = $armor;
+ }
+
+ public function toNode() {
+ return new HTMLPurifier_Node_Element($this->name, $this->attr, $this->line, $this->col, $this->armor);
}
}
diff --git a/library/HTMLPurifier/Token/Text.php b/library/HTMLPurifier/Token/Text.php
index 82efd823d..f26a1c211 100644
--- a/library/HTMLPurifier/Token/Text.php
+++ b/library/HTMLPurifier/Token/Text.php
@@ -12,22 +12,42 @@
class HTMLPurifier_Token_Text extends HTMLPurifier_Token
{
- public $name = '#PCDATA'; /**< PCDATA tag name compatible with DTD. */
- public $data; /**< Parsed character data of text. */
- public $is_whitespace; /**< Bool indicating if node is whitespace. */
+ /**
+ * @type string
+ */
+ public $name = '#PCDATA';
+ /**< PCDATA tag name compatible with DTD. */
+
+ /**
+ * @type string
+ */
+ public $data;
+ /**< Parsed character data of text. */
+
+ /**
+ * @type bool
+ */
+ public $is_whitespace;
+
+ /**< Bool indicating if node is whitespace. */
/**
* Constructor, accepts data and determines if it is whitespace.
- *
- * @param $data String parsed character data.
+ * @param string $data String parsed character data.
+ * @param int $line
+ * @param int $col
*/
- public function __construct($data, $line = null, $col = null) {
+ public function __construct($data, $line = null, $col = null)
+ {
$this->data = $data;
$this->is_whitespace = ctype_space($data);
$this->line = $line;
- $this->col = $col;
+ $this->col = $col;
}
+ public function toNode() {
+ return new HTMLPurifier_Node_Text($this->data, $this->is_whitespace, $this->line, $this->col);
+ }
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/TokenFactory.php b/library/HTMLPurifier/TokenFactory.php
index 7cf48fb41..dea2446b9 100644
--- a/library/HTMLPurifier/TokenFactory.php
+++ b/library/HTMLPurifier/TokenFactory.php
@@ -13,32 +13,53 @@
*/
class HTMLPurifier_TokenFactory
{
+ // p stands for prototype
/**
- * Prototypes that will be cloned.
- * @private
+ * @type HTMLPurifier_Token_Start
*/
- // p stands for prototype
- private $p_start, $p_end, $p_empty, $p_text, $p_comment;
+ private $p_start;
+
+ /**
+ * @type HTMLPurifier_Token_End
+ */
+ private $p_end;
+
+ /**
+ * @type HTMLPurifier_Token_Empty
+ */
+ private $p_empty;
+
+ /**
+ * @type HTMLPurifier_Token_Text
+ */
+ private $p_text;
+
+ /**
+ * @type HTMLPurifier_Token_Comment
+ */
+ private $p_comment;
/**
* Generates blank prototypes for cloning.
*/
- public function __construct() {
- $this->p_start = new HTMLPurifier_Token_Start('', array());
- $this->p_end = new HTMLPurifier_Token_End('');
- $this->p_empty = new HTMLPurifier_Token_Empty('', array());
- $this->p_text = new HTMLPurifier_Token_Text('');
- $this->p_comment= new HTMLPurifier_Token_Comment('');
+ public function __construct()
+ {
+ $this->p_start = new HTMLPurifier_Token_Start('', array());
+ $this->p_end = new HTMLPurifier_Token_End('');
+ $this->p_empty = new HTMLPurifier_Token_Empty('', array());
+ $this->p_text = new HTMLPurifier_Token_Text('');
+ $this->p_comment = new HTMLPurifier_Token_Comment('');
}
/**
* Creates a HTMLPurifier_Token_Start.
- * @param $name Tag name
- * @param $attr Associative array of attributes
- * @return Generated HTMLPurifier_Token_Start
+ * @param string $name Tag name
+ * @param array $attr Associative array of attributes
+ * @return HTMLPurifier_Token_Start Generated HTMLPurifier_Token_Start
*/
- public function createStart($name, $attr = array()) {
+ public function createStart($name, $attr = array())
+ {
$p = clone $this->p_start;
$p->__construct($name, $attr);
return $p;
@@ -46,10 +67,11 @@ class HTMLPurifier_TokenFactory
/**
* Creates a HTMLPurifier_Token_End.
- * @param $name Tag name
- * @return Generated HTMLPurifier_Token_End
+ * @param string $name Tag name
+ * @return HTMLPurifier_Token_End Generated HTMLPurifier_Token_End
*/
- public function createEnd($name) {
+ public function createEnd($name)
+ {
$p = clone $this->p_end;
$p->__construct($name);
return $p;
@@ -57,11 +79,12 @@ class HTMLPurifier_TokenFactory
/**
* Creates a HTMLPurifier_Token_Empty.
- * @param $name Tag name
- * @param $attr Associative array of attributes
- * @return Generated HTMLPurifier_Token_Empty
+ * @param string $name Tag name
+ * @param array $attr Associative array of attributes
+ * @return HTMLPurifier_Token_Empty Generated HTMLPurifier_Token_Empty
*/
- public function createEmpty($name, $attr = array()) {
+ public function createEmpty($name, $attr = array())
+ {
$p = clone $this->p_empty;
$p->__construct($name, $attr);
return $p;
@@ -69,10 +92,11 @@ class HTMLPurifier_TokenFactory
/**
* Creates a HTMLPurifier_Token_Text.
- * @param $data Data of text token
- * @return Generated HTMLPurifier_Token_Text
+ * @param string $data Data of text token
+ * @return HTMLPurifier_Token_Text Generated HTMLPurifier_Token_Text
*/
- public function createText($data) {
+ public function createText($data)
+ {
$p = clone $this->p_text;
$p->__construct($data);
return $p;
@@ -80,15 +104,15 @@ class HTMLPurifier_TokenFactory
/**
* Creates a HTMLPurifier_Token_Comment.
- * @param $data Data of comment token
- * @return Generated HTMLPurifier_Token_Comment
+ * @param string $data Data of comment token
+ * @return HTMLPurifier_Token_Comment Generated HTMLPurifier_Token_Comment
*/
- public function createComment($data) {
+ public function createComment($data)
+ {
$p = clone $this->p_comment;
$p->__construct($data);
return $p;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/URI.php b/library/HTMLPurifier/URI.php
index 8b50d0d18..a5e7ae298 100644
--- a/library/HTMLPurifier/URI.php
+++ b/library/HTMLPurifier/URI.php
@@ -10,17 +10,57 @@
*/
class HTMLPurifier_URI
{
+ /**
+ * @type string
+ */
+ public $scheme;
- public $scheme, $userinfo, $host, $port, $path, $query, $fragment;
+ /**
+ * @type string
+ */
+ public $userinfo;
/**
+ * @type string
+ */
+ public $host;
+
+ /**
+ * @type int
+ */
+ public $port;
+
+ /**
+ * @type string
+ */
+ public $path;
+
+ /**
+ * @type string
+ */
+ public $query;
+
+ /**
+ * @type string
+ */
+ public $fragment;
+
+ /**
+ * @param string $scheme
+ * @param string $userinfo
+ * @param string $host
+ * @param int $port
+ * @param string $path
+ * @param string $query
+ * @param string $fragment
* @note Automatically normalizes scheme and port
*/
- public function __construct($scheme, $userinfo, $host, $port, $path, $query, $fragment) {
+ public function __construct($scheme, $userinfo, $host, $port, $path, $query, $fragment)
+ {
$this->scheme = is_null($scheme) || ctype_lower($scheme) ? $scheme : strtolower($scheme);
$this->userinfo = $userinfo;
$this->host = $host;
- $this->port = is_null($port) ? $port : (int) $port;
+ $this->port = is_null($port) ? $port : (int)$port;
$this->path = $path;
$this->query = $query;
$this->fragment = $fragment;
@@ -28,19 +68,22 @@ class HTMLPurifier_URI
/**
* Retrieves a scheme object corresponding to the URI's scheme/default
- * @param $config Instance of HTMLPurifier_Config
- * @param $context Instance of HTMLPurifier_Context
- * @return Scheme object appropriate for validating this URI
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return HTMLPurifier_URIScheme Scheme object appropriate for validating this URI
*/
- public function getSchemeObj($config, $context) {
+ public function getSchemeObj($config, $context)
+ {
$registry = HTMLPurifier_URISchemeRegistry::instance();
if ($this->scheme !== null) {
$scheme_obj = $registry->getScheme($this->scheme, $config, $context);
- if (!$scheme_obj) return false; // invalid scheme, clean it out
+ if (!$scheme_obj) {
+ return false;
+ } // invalid scheme, clean it out
} else {
// no scheme: retrieve the default one
$def = $config->getDefinition('URI');
- $scheme_obj = $registry->getScheme($def->defaultScheme, $config, $context);
+ $scheme_obj = $def->getDefaultScheme($config, $context);
if (!$scheme_obj) {
// something funky happened to the default scheme object
trigger_error(
@@ -56,30 +99,39 @@ class HTMLPurifier_URI
/**
* Generic validation method applicable for all schemes. May modify
* this URI in order to get it into a compliant form.
- * @param $config Instance of HTMLPurifier_Config
- * @param $context Instance of HTMLPurifier_Context
- * @return True if validation/filtering succeeds, false if failure
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool True if validation/filtering succeeds, false if failure
*/
- public function validate($config, $context) {
-
+ public function validate($config, $context)
+ {
// ABNF definitions from RFC 3986
$chars_sub_delims = '!$&\'()*+,;=';
$chars_gen_delims = ':/?#[]@';
$chars_pchar = $chars_sub_delims . ':@';
- // validate scheme (MUST BE FIRST!)
- if (!is_null($this->scheme) && is_null($this->host)) {
- $def = $config->getDefinition('URI');
- if ($def->defaultScheme === $this->scheme) {
- $this->scheme = null;
- }
- }
-
// validate host
if (!is_null($this->host)) {
$host_def = new HTMLPurifier_AttrDef_URI_Host();
$this->host = $host_def->validate($this->host, $config, $context);
- if ($this->host === false) $this->host = null;
+ if ($this->host === false) {
+ $this->host = null;
+ }
+ }
+
+ // validate scheme
+ // NOTE: It's not appropriate to check whether or not this
+ // scheme is in our registry, since a URIFilter may convert a
+ // URI that we don't allow into one we do. So instead, we just
+ // check if the scheme can be dropped because there is no host
+ // and it is our default scheme.
+ if (!is_null($this->scheme) && is_null($this->host) || $this->host === '') {
+ // support for relative paths is pretty abysmal when the
+ // scheme is present, so axe it when possible
+ $def = $config->getDefinition('URI');
+ if ($def->defaultScheme === $this->scheme) {
+ $this->scheme = null;
+ }
}
// validate username
@@ -90,38 +142,55 @@ class HTMLPurifier_URI
// validate port
if (!is_null($this->port)) {
- if ($this->port < 1 || $this->port > 65535) $this->port = null;
+ if ($this->port < 1 || $this->port > 65535) {
+ $this->port = null;
+ }
}
// validate path
- $path_parts = array();
$segments_encoder = new HTMLPurifier_PercentEncoder($chars_pchar . '/');
- if (!is_null($this->host)) {
+ if (!is_null($this->host)) { // this catches $this->host === ''
// path-abempty (hier and relative)
+ // http://www.example.com/my/path
+ // //www.example.com/my/path (looks odd, but works, and
+ // recognized by most browsers)
+ // (this set is valid or invalid on a scheme by scheme
+ // basis, so we'll deal with it later)
+ // file:///my/path
+ // ///my/path
$this->path = $segments_encoder->encode($this->path);
- } elseif ($this->path !== '' && $this->path[0] === '/') {
- // path-absolute (hier and relative)
- if (strlen($this->path) >= 2 && $this->path[1] === '/') {
- // This shouldn't ever happen!
- $this->path = '';
- } else {
+ } elseif ($this->path !== '') {
+ if ($this->path[0] === '/') {
+ // path-absolute (hier and relative)
+ // http:/my/path
+ // /my/path
+ if (strlen($this->path) >= 2 && $this->path[1] === '/') {
+ // This could happen if both the host gets stripped
+ // out
+ // http://my/path
+ // //my/path
+ $this->path = '';
+ } else {
+ $this->path = $segments_encoder->encode($this->path);
+ }
+ } elseif (!is_null($this->scheme)) {
+ // path-rootless (hier)
+ // http:my/path
+ // Short circuit evaluation means we don't need to check nz
$this->path = $segments_encoder->encode($this->path);
- }
- } elseif (!is_null($this->scheme) && $this->path !== '') {
- // path-rootless (hier)
- // Short circuit evaluation means we don't need to check nz
- $this->path = $segments_encoder->encode($this->path);
- } elseif (is_null($this->scheme) && $this->path !== '') {
- // path-noscheme (relative)
- // (once again, not checking nz)
- $segment_nc_encoder = new HTMLPurifier_PercentEncoder($chars_sub_delims . '@');
- $c = strpos($this->path, '/');
- if ($c !== false) {
- $this->path =
- $segment_nc_encoder->encode(substr($this->path, 0, $c)) .
- $segments_encoder->encode(substr($this->path, $c));
} else {
- $this->path = $segment_nc_encoder->encode($this->path);
+ // path-noscheme (relative)
+ // my/path
+ // (once again, not checking nz)
+ $segment_nc_encoder = new HTMLPurifier_PercentEncoder($chars_sub_delims . '@');
+ $c = strpos($this->path, '/');
+ if ($c !== false) {
+ $this->path =
+ $segment_nc_encoder->encode(substr($this->path, 0, $c)) .
+ $segments_encoder->encode(substr($this->path, $c));
+ } else {
+ $this->path = $segment_nc_encoder->encode($this->path);
+ }
}
} else {
// path-empty (hier and relative)
@@ -138,36 +207,108 @@ class HTMLPurifier_URI
if (!is_null($this->fragment)) {
$this->fragment = $qf_encoder->encode($this->fragment);
}
-
return true;
-
}
/**
* Convert URI back to string
- * @return String URI appropriate for output
+ * @return string URI appropriate for output
*/
- public function toString() {
+ public function toString()
+ {
// reconstruct authority
$authority = null;
+ // there is a rendering difference between a null authority
+ // (http:foo-bar) and an empty string authority
+ // (http:///foo-bar).
if (!is_null($this->host)) {
$authority = '';
- if(!is_null($this->userinfo)) $authority .= $this->userinfo . '@';
+ if (!is_null($this->userinfo)) {
+ $authority .= $this->userinfo . '@';
+ }
$authority .= $this->host;
- if(!is_null($this->port)) $authority .= ':' . $this->port;
+ if (!is_null($this->port)) {
+ $authority .= ':' . $this->port;
+ }
}
- // reconstruct the result
+ // Reconstruct the result
+ // One might wonder about parsing quirks from browsers after
+ // this reconstruction. Unfortunately, parsing behavior depends
+ // on what *scheme* was employed (file:///foo is handled *very*
+ // differently than http:///foo), so unfortunately we have to
+ // defer to the schemes to do the right thing.
$result = '';
- if (!is_null($this->scheme)) $result .= $this->scheme . ':';
- if (!is_null($authority)) $result .= '//' . $authority;
+ if (!is_null($this->scheme)) {
+ $result .= $this->scheme . ':';
+ }
+ if (!is_null($authority)) {
+ $result .= '//' . $authority;
+ }
$result .= $this->path;
- if (!is_null($this->query)) $result .= '?' . $this->query;
- if (!is_null($this->fragment)) $result .= '#' . $this->fragment;
+ if (!is_null($this->query)) {
+ $result .= '?' . $this->query;
+ }
+ if (!is_null($this->fragment)) {
+ $result .= '#' . $this->fragment;
+ }
return $result;
}
+ /**
+ * Returns true if this URL might be considered a 'local' URL given
+ * the current context. This is true when the host is null, or
+ * when it matches the host supplied to the configuration.
+ *
+ * Note that this does not do any scheme checking, so it is mostly
+ * only appropriate for metadata that doesn't care about protocol
+ * security. isBenign is probably what you actually want.
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool
+ */
+ public function isLocal($config, $context)
+ {
+ if ($this->host === null) {
+ return true;
+ }
+ $uri_def = $config->getDefinition('URI');
+ if ($uri_def->host === $this->host) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Returns true if this URL should be considered a 'benign' URL,
+ * that is:
+ *
+ * - It is a local URL (isLocal), and
+ * - It has a equal or better level of security
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool
+ */
+ public function isBenign($config, $context)
+ {
+ if (!$this->isLocal($config, $context)) {
+ return false;
+ }
+
+ $scheme_obj = $this->getSchemeObj($config, $context);
+ if (!$scheme_obj) {
+ return false;
+ } // conservative approach
+
+ $current_scheme_obj = $config->getDefinition('URI')->getDefaultScheme($config, $context);
+ if ($current_scheme_obj->secure) {
+ if (!$scheme_obj->secure) {
+ return false;
+ }
+ }
+ return true;
+ }
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/URIDefinition.php b/library/HTMLPurifier/URIDefinition.php
index ea2b8fe24..e0bd8bcca 100644
--- a/library/HTMLPurifier/URIDefinition.php
+++ b/library/HTMLPurifier/URIDefinition.php
@@ -23,19 +23,24 @@ class HTMLPurifier_URIDefinition extends HTMLPurifier_Definition
*/
public $defaultScheme;
- public function __construct() {
+ public function __construct()
+ {
$this->registerFilter(new HTMLPurifier_URIFilter_DisableExternal());
$this->registerFilter(new HTMLPurifier_URIFilter_DisableExternalResources());
+ $this->registerFilter(new HTMLPurifier_URIFilter_DisableResources());
$this->registerFilter(new HTMLPurifier_URIFilter_HostBlacklist());
+ $this->registerFilter(new HTMLPurifier_URIFilter_SafeIframe());
$this->registerFilter(new HTMLPurifier_URIFilter_MakeAbsolute());
$this->registerFilter(new HTMLPurifier_URIFilter_Munge());
}
- public function registerFilter($filter) {
+ public function registerFilter($filter)
+ {
$this->registeredFilters[$filter->name] = $filter;
}
- public function addFilter($filter, $config) {
+ public function addFilter($filter, $config)
+ {
$r = $filter->prepare($config);
if ($r === false) return; // null is ok, for backwards compat
if ($filter->post) {
@@ -45,22 +50,29 @@ class HTMLPurifier_URIDefinition extends HTMLPurifier_Definition
}
}
- protected function doSetup($config) {
+ protected function doSetup($config)
+ {
$this->setupMemberVariables($config);
$this->setupFilters($config);
}
- protected function setupFilters($config) {
+ protected function setupFilters($config)
+ {
foreach ($this->registeredFilters as $name => $filter) {
- $conf = $config->get('URI.' . $name);
- if ($conf !== false && $conf !== null) {
+ if ($filter->always_load) {
$this->addFilter($filter, $config);
+ } else {
+ $conf = $config->get('URI.' . $name);
+ if ($conf !== false && $conf !== null) {
+ $this->addFilter($filter, $config);
+ }
}
}
unset($this->registeredFilters);
}
- protected function setupMemberVariables($config) {
+ protected function setupMemberVariables($config)
+ {
$this->host = $config->get('URI.Host');
$base_uri = $config->get('URI.Base');
if (!is_null($base_uri)) {
@@ -72,7 +84,13 @@ class HTMLPurifier_URIDefinition extends HTMLPurifier_Definition
if (is_null($this->defaultScheme)) $this->defaultScheme = $config->get('URI.DefaultScheme');
}
- public function filter(&$uri, $config, $context) {
+ public function getDefaultScheme($config, $context)
+ {
+ return HTMLPurifier_URISchemeRegistry::instance()->getScheme($this->defaultScheme, $config, $context);
+ }
+
+ public function filter(&$uri, $config, $context)
+ {
foreach ($this->filters as $name => $f) {
$result = $f->filter($uri, $config, $context);
if (!$result) return false;
@@ -80,7 +98,8 @@ class HTMLPurifier_URIDefinition extends HTMLPurifier_Definition
return true;
}
- public function postFilter(&$uri, $config, $context) {
+ public function postFilter(&$uri, $config, $context)
+ {
foreach ($this->postFilters as $name => $f) {
$result = $f->filter($uri, $config, $context);
if (!$result) return false;
diff --git a/library/HTMLPurifier/URIFilter.php b/library/HTMLPurifier/URIFilter.php
index c116f93df..09724e9f4 100644
--- a/library/HTMLPurifier/URIFilter.php
+++ b/library/HTMLPurifier/URIFilter.php
@@ -4,7 +4,21 @@
* Chainable filters for custom URI processing.
*
* These filters can perform custom actions on a URI filter object,
- * including transformation or blacklisting.
+ * including transformation or blacklisting. A filter named Foo
+ * must have a corresponding configuration directive %URI.Foo,
+ * unless always_load is specified to be true.
+ *
+ * The following contexts may be available while URIFilters are being
+ * processed:
+ *
+ * - EmbeddedURI: true if URI is an embedded resource that will
+ * be loaded automatically on page load
+ * - CurrentToken: a reference to the token that is currently
+ * being processed
+ * - CurrentAttr: the name of the attribute that is currently being
+ * processed
+ * - CurrentCSSProperty: the name of the CSS property that is
+ * currently being processed (if applicable)
*
* @warning This filter is called before scheme object validation occurs.
* Make sure, if you require a specific scheme object, you
@@ -15,31 +29,46 @@ abstract class HTMLPurifier_URIFilter
{
/**
- * Unique identifier of filter
+ * Unique identifier of filter.
+ * @type string
*/
public $name;
/**
* True if this filter should be run after scheme validation.
+ * @type bool
*/
public $post = false;
/**
- * Performs initialization for the filter
+ * True if this filter should always be loaded.
+ * This permits a filter to be named Foo without the corresponding
+ * %URI.Foo directive existing.
+ * @type bool
+ */
+ public $always_load = false;
+
+ /**
+ * Performs initialization for the filter. If the filter returns
+ * false, this means that it shouldn't be considered active.
+ * @param HTMLPurifier_Config $config
+ * @return bool
*/
- public function prepare($config) {return true;}
+ public function prepare($config)
+ {
+ return true;
+ }
/**
* Filter a URI object
- * @param $uri Reference to URI object variable
- * @param $config Instance of HTMLPurifier_Config
- * @param $context Instance of HTMLPurifier_Context
+ * @param HTMLPurifier_URI $uri Reference to URI object variable
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
* @return bool Whether or not to continue processing: false indicates
* URL is no good, true indicates continue processing. Note that
* all changes are committed directly on the URI object
*/
abstract public function filter(&$uri, $config, $context);
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/URIFilter/DisableExternal.php b/library/HTMLPurifier/URIFilter/DisableExternal.php
index d8a39a501..ced1b1376 100644
--- a/library/HTMLPurifier/URIFilter/DisableExternal.php
+++ b/library/HTMLPurifier/URIFilter/DisableExternal.php
@@ -2,19 +2,50 @@
class HTMLPurifier_URIFilter_DisableExternal extends HTMLPurifier_URIFilter
{
+ /**
+ * @type string
+ */
public $name = 'DisableExternal';
+
+ /**
+ * @type array
+ */
protected $ourHostParts = false;
- public function prepare($config) {
+
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return void
+ */
+ public function prepare($config)
+ {
$our_host = $config->getDefinition('URI')->host;
- if ($our_host !== null) $this->ourHostParts = array_reverse(explode('.', $our_host));
+ if ($our_host !== null) {
+ $this->ourHostParts = array_reverse(explode('.', $our_host));
+ }
}
- public function filter(&$uri, $config, $context) {
- if (is_null($uri->host)) return true;
- if ($this->ourHostParts === false) return false;
+
+ /**
+ * @param HTMLPurifier_URI $uri Reference
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool
+ */
+ public function filter(&$uri, $config, $context)
+ {
+ if (is_null($uri->host)) {
+ return true;
+ }
+ if ($this->ourHostParts === false) {
+ return false;
+ }
$host_parts = array_reverse(explode('.', $uri->host));
foreach ($this->ourHostParts as $i => $x) {
- if (!isset($host_parts[$i])) return false;
- if ($host_parts[$i] != $this->ourHostParts[$i]) return false;
+ if (!isset($host_parts[$i])) {
+ return false;
+ }
+ if ($host_parts[$i] != $this->ourHostParts[$i]) {
+ return false;
+ }
}
return true;
}
diff --git a/library/HTMLPurifier/URIFilter/DisableExternalResources.php b/library/HTMLPurifier/URIFilter/DisableExternalResources.php
index 881abc43c..c6562169e 100644
--- a/library/HTMLPurifier/URIFilter/DisableExternalResources.php
+++ b/library/HTMLPurifier/URIFilter/DisableExternalResources.php
@@ -2,9 +2,22 @@
class HTMLPurifier_URIFilter_DisableExternalResources extends HTMLPurifier_URIFilter_DisableExternal
{
+ /**
+ * @type string
+ */
public $name = 'DisableExternalResources';
- public function filter(&$uri, $config, $context) {
- if (!$context->get('EmbeddedURI', true)) return true;
+
+ /**
+ * @param HTMLPurifier_URI $uri
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool
+ */
+ public function filter(&$uri, $config, $context)
+ {
+ if (!$context->get('EmbeddedURI', true)) {
+ return true;
+ }
return parent::filter($uri, $config, $context);
}
}
diff --git a/library/HTMLPurifier/URIFilter/DisableResources.php b/library/HTMLPurifier/URIFilter/DisableResources.php
new file mode 100644
index 000000000..d5c412c44
--- /dev/null
+++ b/library/HTMLPurifier/URIFilter/DisableResources.php
@@ -0,0 +1,22 @@
+<?php
+
+class HTMLPurifier_URIFilter_DisableResources extends HTMLPurifier_URIFilter
+{
+ /**
+ * @type string
+ */
+ public $name = 'DisableResources';
+
+ /**
+ * @param HTMLPurifier_URI $uri
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool
+ */
+ public function filter(&$uri, $config, $context)
+ {
+ return !$context->get('EmbeddedURI', true);
+ }
+}
+
+// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/URIFilter/HostBlacklist.php b/library/HTMLPurifier/URIFilter/HostBlacklist.php
index 045aa0992..a6645c17e 100644
--- a/library/HTMLPurifier/URIFilter/HostBlacklist.php
+++ b/library/HTMLPurifier/URIFilter/HostBlacklist.php
@@ -1,15 +1,40 @@
<?php
+// It's not clear to me whether or not Punycode means that hostnames
+// do not have canonical forms anymore. As far as I can tell, it's
+// not a problem (punycoding should be identity when no Unicode
+// points are involved), but I'm not 100% sure
class HTMLPurifier_URIFilter_HostBlacklist extends HTMLPurifier_URIFilter
{
+ /**
+ * @type string
+ */
public $name = 'HostBlacklist';
+
+ /**
+ * @type array
+ */
protected $blacklist = array();
- public function prepare($config) {
+
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return bool
+ */
+ public function prepare($config)
+ {
$this->blacklist = $config->get('URI.HostBlacklist');
return true;
}
- public function filter(&$uri, $config, $context) {
- foreach($this->blacklist as $blacklisted_host_fragment) {
+
+ /**
+ * @param HTMLPurifier_URI $uri
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool
+ */
+ public function filter(&$uri, $config, $context)
+ {
+ foreach ($this->blacklist as $blacklisted_host_fragment) {
if (strpos($uri->host, $blacklisted_host_fragment) !== false) {
return false;
}
diff --git a/library/HTMLPurifier/URIFilter/MakeAbsolute.php b/library/HTMLPurifier/URIFilter/MakeAbsolute.php
index f46ab2630..c507bbff8 100644
--- a/library/HTMLPurifier/URIFilter/MakeAbsolute.php
+++ b/library/HTMLPurifier/URIFilter/MakeAbsolute.php
@@ -4,14 +4,35 @@
class HTMLPurifier_URIFilter_MakeAbsolute extends HTMLPurifier_URIFilter
{
+ /**
+ * @type string
+ */
public $name = 'MakeAbsolute';
+
+ /**
+ * @type
+ */
protected $base;
+
+ /**
+ * @type array
+ */
protected $basePathStack = array();
- public function prepare($config) {
+
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return bool
+ */
+ public function prepare($config)
+ {
$def = $config->getDefinition('URI');
$this->base = $def->base;
if (is_null($this->base)) {
- trigger_error('URI.MakeAbsolute is being ignored due to lack of value for URI.Base configuration', E_USER_WARNING);
+ trigger_error(
+ 'URI.MakeAbsolute is being ignored due to lack of ' .
+ 'value for URI.Base configuration',
+ E_USER_WARNING
+ );
return false;
}
$this->base->fragment = null; // fragment is invalid for base URI
@@ -21,19 +42,29 @@ class HTMLPurifier_URIFilter_MakeAbsolute extends HTMLPurifier_URIFilter
$this->basePathStack = $stack;
return true;
}
- public function filter(&$uri, $config, $context) {
- if (is_null($this->base)) return true; // abort early
- if (
- $uri->path === '' && is_null($uri->scheme) &&
- is_null($uri->host) && is_null($uri->query) && is_null($uri->fragment)
- ) {
+
+ /**
+ * @param HTMLPurifier_URI $uri
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool
+ */
+ public function filter(&$uri, $config, $context)
+ {
+ if (is_null($this->base)) {
+ return true;
+ } // abort early
+ if ($uri->path === '' && is_null($uri->scheme) &&
+ is_null($uri->host) && is_null($uri->query) && is_null($uri->fragment)) {
// reference to current document
$uri = clone $this->base;
return true;
}
if (!is_null($uri->scheme)) {
// absolute URI already: don't change
- if (!is_null($uri->host)) return true;
+ if (!is_null($uri->host)) {
+ return true;
+ }
$scheme_obj = $uri->getSchemeObj($config, $context);
if (!$scheme_obj) {
// scheme not recognized
@@ -66,22 +97,33 @@ class HTMLPurifier_URIFilter_MakeAbsolute extends HTMLPurifier_URIFilter
}
// re-combine
$uri->scheme = $this->base->scheme;
- if (is_null($uri->userinfo)) $uri->userinfo = $this->base->userinfo;
- if (is_null($uri->host)) $uri->host = $this->base->host;
- if (is_null($uri->port)) $uri->port = $this->base->port;
+ if (is_null($uri->userinfo)) {
+ $uri->userinfo = $this->base->userinfo;
+ }
+ if (is_null($uri->host)) {
+ $uri->host = $this->base->host;
+ }
+ if (is_null($uri->port)) {
+ $uri->port = $this->base->port;
+ }
return true;
}
/**
* Resolve dots and double-dots in a path stack
+ * @param array $stack
+ * @return array
*/
- private function _collapseStack($stack) {
+ private function _collapseStack($stack)
+ {
$result = array();
$is_folder = false;
for ($i = 0; isset($stack[$i]); $i++) {
$is_folder = false;
// absorb an internally duplicated slash
- if ($stack[$i] == '' && $i && isset($stack[$i+1])) continue;
+ if ($stack[$i] == '' && $i && isset($stack[$i + 1])) {
+ continue;
+ }
if ($stack[$i] == '..') {
if (!empty($result)) {
$segment = array_pop($result);
@@ -106,7 +148,9 @@ class HTMLPurifier_URIFilter_MakeAbsolute extends HTMLPurifier_URIFilter
}
$result[] = $stack[$i];
}
- if ($is_folder) $result[] = '';
+ if ($is_folder) {
+ $result[] = '';
+ }
return $result;
}
}
diff --git a/library/HTMLPurifier/URIFilter/Munge.php b/library/HTMLPurifier/URIFilter/Munge.php
index efa10a645..6e03315a1 100644
--- a/library/HTMLPurifier/URIFilter/Munge.php
+++ b/library/HTMLPurifier/URIFilter/Munge.php
@@ -2,31 +2,79 @@
class HTMLPurifier_URIFilter_Munge extends HTMLPurifier_URIFilter
{
+ /**
+ * @type string
+ */
public $name = 'Munge';
+
+ /**
+ * @type bool
+ */
public $post = true;
- private $target, $parser, $doEmbed, $secretKey;
+ /**
+ * @type string
+ */
+ private $target;
+
+ /**
+ * @type HTMLPurifier_URIParser
+ */
+ private $parser;
+
+ /**
+ * @type bool
+ */
+ private $doEmbed;
+
+ /**
+ * @type string
+ */
+ private $secretKey;
+
+ /**
+ * @type array
+ */
protected $replace = array();
- public function prepare($config) {
- $this->target = $config->get('URI.' . $this->name);
- $this->parser = new HTMLPurifier_URIParser();
- $this->doEmbed = $config->get('URI.MungeResources');
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return bool
+ */
+ public function prepare($config)
+ {
+ $this->target = $config->get('URI.' . $this->name);
+ $this->parser = new HTMLPurifier_URIParser();
+ $this->doEmbed = $config->get('URI.MungeResources');
$this->secretKey = $config->get('URI.MungeSecretKey');
+ if ($this->secretKey && !function_exists('hash_hmac')) {
+ throw new Exception("Cannot use %URI.MungeSecretKey without hash_hmac support.");
+ }
return true;
}
- public function filter(&$uri, $config, $context) {
- if ($context->get('EmbeddedURI', true) && !$this->doEmbed) return true;
- $scheme_obj = $uri->getSchemeObj($config, $context);
- if (!$scheme_obj) return true; // ignore unknown schemes, maybe another postfilter did it
- if (is_null($uri->host) || empty($scheme_obj->browsable)) {
+ /**
+ * @param HTMLPurifier_URI $uri
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool
+ */
+ public function filter(&$uri, $config, $context)
+ {
+ if ($context->get('EmbeddedURI', true) && !$this->doEmbed) {
return true;
}
- // don't redirect if target host is our host
- if ($uri->host === $config->getDefinition('URI')->host) {
+
+ $scheme_obj = $uri->getSchemeObj($config, $context);
+ if (!$scheme_obj) {
return true;
- }
+ } // ignore unknown schemes, maybe another postfilter did it
+ if (!$scheme_obj->browsable) {
+ return true;
+ } // ignore non-browseable schemes, since we can't munge those in a reasonable way
+ if ($uri->isBenign($config, $context)) {
+ return true;
+ } // don't redirect if a benign URL
$this->makeReplace($uri, $config, $context);
$this->replace = array_map('rawurlencode', $this->replace);
@@ -35,12 +83,20 @@ class HTMLPurifier_URIFilter_Munge extends HTMLPurifier_URIFilter
$new_uri = $this->parser->parse($new_uri);
// don't redirect if the target host is the same as the
// starting host
- if ($uri->host === $new_uri->host) return true;
+ if ($uri->host === $new_uri->host) {
+ return true;
+ }
$uri = $new_uri; // overwrite
return true;
}
- protected function makeReplace($uri, $config, $context) {
+ /**
+ * @param HTMLPurifier_URI $uri
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ */
+ protected function makeReplace($uri, $config, $context)
+ {
$string = $uri->toString();
// always available
$this->replace['%s'] = $string;
@@ -50,9 +106,10 @@ class HTMLPurifier_URIFilter_Munge extends HTMLPurifier_URIFilter
$this->replace['%m'] = $context->get('CurrentAttr', true);
$this->replace['%p'] = $context->get('CurrentCSSProperty', true);
// not always available
- if ($this->secretKey) $this->replace['%t'] = sha1($this->secretKey . ':' . $string);
+ if ($this->secretKey) {
+ $this->replace['%t'] = hash_hmac("sha256", $string, $this->secretKey);
+ }
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/URIFilter/SafeIframe.php b/library/HTMLPurifier/URIFilter/SafeIframe.php
new file mode 100644
index 000000000..f609c47a3
--- /dev/null
+++ b/library/HTMLPurifier/URIFilter/SafeIframe.php
@@ -0,0 +1,68 @@
+<?php
+
+/**
+ * Implements safety checks for safe iframes.
+ *
+ * @warning This filter is *critical* for ensuring that %HTML.SafeIframe
+ * works safely.
+ */
+class HTMLPurifier_URIFilter_SafeIframe extends HTMLPurifier_URIFilter
+{
+ /**
+ * @type string
+ */
+ public $name = 'SafeIframe';
+
+ /**
+ * @type bool
+ */
+ public $always_load = true;
+
+ /**
+ * @type string
+ */
+ protected $regexp = null;
+
+ // XXX: The not so good bit about how this is all set up now is we
+ // can't check HTML.SafeIframe in the 'prepare' step: we have to
+ // defer till the actual filtering.
+ /**
+ * @param HTMLPurifier_Config $config
+ * @return bool
+ */
+ public function prepare($config)
+ {
+ $this->regexp = $config->get('URI.SafeIframeRegexp');
+ return true;
+ }
+
+ /**
+ * @param HTMLPurifier_URI $uri
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool
+ */
+ public function filter(&$uri, $config, $context)
+ {
+ // check if filter not applicable
+ if (!$config->get('HTML.SafeIframe')) {
+ return true;
+ }
+ // check if the filter should actually trigger
+ if (!$context->get('EmbeddedURI', true)) {
+ return true;
+ }
+ $token = $context->get('CurrentToken', true);
+ if (!($token && $token->name == 'iframe')) {
+ return true;
+ }
+ // check if we actually have some whitelists enabled
+ if ($this->regexp === null) {
+ return false;
+ }
+ // actually check the whitelists
+ return preg_match($this->regexp, $uri->toString());
+ }
+}
+
+// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/URIParser.php b/library/HTMLPurifier/URIParser.php
index 7179e4ab8..0e7381a07 100644
--- a/library/HTMLPurifier/URIParser.php
+++ b/library/HTMLPurifier/URIParser.php
@@ -12,7 +12,8 @@ class HTMLPurifier_URIParser
*/
protected $percentEncoder;
- public function __construct() {
+ public function __construct()
+ {
$this->percentEncoder = new HTMLPurifier_PercentEncoder();
}
@@ -22,15 +23,15 @@ class HTMLPurifier_URIParser
* @return HTMLPurifier_URI representation of URI. This representation has
* not been validated yet and may not conform to RFC.
*/
- public function parse($uri) {
-
+ public function parse($uri)
+ {
$uri = $this->percentEncoder->normalize($uri);
// Regexp is as per Appendix B.
// Note that ["<>] are an addition to the RFC's recommended
// characters, because they represent external delimeters.
$r_URI = '!'.
- '(([^:/?#"<>]+):)?'. // 2. Scheme
+ '(([a-zA-Z0-9\.\+\-]+):)?'. // 2. Scheme
'(//([^/?#"<>]*))?'. // 4. Authority
'([^?#"<>]*)'. // 5. Path
'(\?([^#"<>]*))?'. // 7. Query
diff --git a/library/HTMLPurifier/URIScheme.php b/library/HTMLPurifier/URIScheme.php
index 039710fd1..fe9e82cf2 100644
--- a/library/HTMLPurifier/URIScheme.php
+++ b/library/HTMLPurifier/URIScheme.php
@@ -3,40 +3,100 @@
/**
* Validator for the components of a URI for a specific scheme
*/
-class HTMLPurifier_URIScheme
+abstract class HTMLPurifier_URIScheme
{
/**
- * Scheme's default port (integer)
+ * Scheme's default port (integer). If an explicit port number is
+ * specified that coincides with the default port, it will be
+ * elided.
+ * @type int
*/
public $default_port = null;
/**
- * Whether or not URIs of this schem are locatable by a browser
+ * Whether or not URIs of this scheme are locatable by a browser
* http and ftp are accessible, while mailto and news are not.
+ * @type bool
*/
public $browsable = false;
/**
+ * Whether or not data transmitted over this scheme is encrypted.
+ * https is secure, http is not.
+ * @type bool
+ */
+ public $secure = false;
+
+ /**
* Whether or not the URI always uses <hier_part>, resolves edge cases
* with making relative URIs absolute
+ * @type bool
*/
public $hierarchical = false;
/**
- * Validates the components of a URI
- * @note This implementation should be called by children if they define
- * a default port, as it does port processing.
- * @param $uri Instance of HTMLPurifier_URI
- * @param $config HTMLPurifier_Config object
- * @param $context HTMLPurifier_Context object
- * @return Bool success or failure
+ * Whether or not the URI may omit a hostname when the scheme is
+ * explicitly specified, ala file:///path/to/file. As of writing,
+ * 'file' is the only scheme that browsers support his properly.
+ * @type bool
*/
- public function validate(&$uri, $config, $context) {
- if ($this->default_port == $uri->port) $uri->port = null;
- return true;
- }
+ public $may_omit_host = false;
+
+ /**
+ * Validates the components of a URI for a specific scheme.
+ * @param HTMLPurifier_URI $uri Reference to a HTMLPurifier_URI object
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool success or failure
+ */
+ abstract public function doValidate(&$uri, $config, $context);
+ /**
+ * Public interface for validating components of a URI. Performs a
+ * bunch of default actions. Don't overload this method.
+ * @param HTMLPurifier_URI $uri Reference to a HTMLPurifier_URI object
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool success or failure
+ */
+ public function validate(&$uri, $config, $context)
+ {
+ if ($this->default_port == $uri->port) {
+ $uri->port = null;
+ }
+ // kludge: browsers do funny things when the scheme but not the
+ // authority is set
+ if (!$this->may_omit_host &&
+ // if the scheme is present, a missing host is always in error
+ (!is_null($uri->scheme) && ($uri->host === '' || is_null($uri->host))) ||
+ // if the scheme is not present, a *blank* host is in error,
+ // since this translates into '///path' which most browsers
+ // interpret as being 'http://path'.
+ (is_null($uri->scheme) && $uri->host === '')
+ ) {
+ do {
+ if (is_null($uri->scheme)) {
+ if (substr($uri->path, 0, 2) != '//') {
+ $uri->host = null;
+ break;
+ }
+ // URI is '////path', so we cannot nullify the
+ // host to preserve semantics. Try expanding the
+ // hostname instead (fall through)
+ }
+ // first see if we can manually insert a hostname
+ $host = $config->get('URI.Host');
+ if (!is_null($host)) {
+ $uri->host = $host;
+ } else {
+ // we can't do anything sensible, reject the URL.
+ return false;
+ }
+ } while (false);
+ }
+ return $this->doValidate($uri, $config, $context);
+ }
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/URIScheme/data.php b/library/HTMLPurifier/URIScheme/data.php
index b7f1989cb..6ebca4984 100644
--- a/library/HTMLPurifier/URIScheme/data.php
+++ b/library/HTMLPurifier/URIScheme/data.php
@@ -3,18 +3,38 @@
/**
* Implements data: URI for base64 encoded images supported by GD.
*/
-class HTMLPurifier_URIScheme_data extends HTMLPurifier_URIScheme {
-
+class HTMLPurifier_URIScheme_data extends HTMLPurifier_URIScheme
+{
+ /**
+ * @type bool
+ */
public $browsable = true;
+
+ /**
+ * @type array
+ */
public $allowed_types = array(
// you better write validation code for other types if you
// decide to allow them
'image/jpeg' => true,
'image/gif' => true,
'image/png' => true,
- );
+ );
+ // this is actually irrelevant since we only write out the path
+ // component
+ /**
+ * @type bool
+ */
+ public $may_omit_host = true;
- public function validate(&$uri, $config, $context) {
+ /**
+ * @param HTMLPurifier_URI $uri
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool
+ */
+ public function doValidate(&$uri, $config, $context)
+ {
$result = explode(',', $uri->path, 2);
$is_base64 = false;
$charset = null;
@@ -23,7 +43,7 @@ class HTMLPurifier_URIScheme_data extends HTMLPurifier_URIScheme {
list($metadata, $data) = $result;
// do some legwork on the metadata
$metas = explode(';', $metadata);
- while(!empty($metas)) {
+ while (!empty($metas)) {
$cur = array_shift($metas);
if ($cur == 'base64') {
$is_base64 = true;
@@ -32,10 +52,14 @@ class HTMLPurifier_URIScheme_data extends HTMLPurifier_URIScheme {
if (substr($cur, 0, 8) == 'charset=') {
// doesn't match if there are arbitrary spaces, but
// whatever dude
- if ($charset !== null) continue; // garbage
+ if ($charset !== null) {
+ continue;
+ } // garbage
$charset = substr($cur, 8); // not used
} else {
- if ($content_type !== null) continue; // garbage
+ if ($content_type !== null) {
+ continue;
+ } // garbage
$content_type = $cur;
}
}
@@ -61,11 +85,15 @@ class HTMLPurifier_URIScheme_data extends HTMLPurifier_URIScheme {
file_put_contents($file, $raw_data);
if (function_exists('exif_imagetype')) {
$image_code = exif_imagetype($file);
+ unlink($file);
} elseif (function_exists('getimagesize')) {
set_error_handler(array($this, 'muteErrorHandler'));
$info = getimagesize($file);
restore_error_handler();
- if ($info == false) return false;
+ unlink($file);
+ if ($info == false) {
+ return false;
+ }
$image_code = $info[2];
} else {
trigger_error("could not find exif_imagetype or getimagesize functions", E_USER_ERROR);
@@ -74,7 +102,9 @@ class HTMLPurifier_URIScheme_data extends HTMLPurifier_URIScheme {
if ($real_content_type != $content_type) {
// we're nice guys; if the content type is something else we
// support, change it over
- if (empty($this->allowed_types[$real_content_type])) return false;
+ if (empty($this->allowed_types[$real_content_type])) {
+ return false;
+ }
$content_type = $real_content_type;
}
// ok, it's kosher, rewrite what we need
@@ -87,7 +117,11 @@ class HTMLPurifier_URIScheme_data extends HTMLPurifier_URIScheme {
return true;
}
- public function muteErrorHandler($errno, $errstr) {}
-
+ /**
+ * @param int $errno
+ * @param string $errstr
+ */
+ public function muteErrorHandler($errno, $errstr)
+ {
+ }
}
-
diff --git a/library/HTMLPurifier/URIScheme/file.php b/library/HTMLPurifier/URIScheme/file.php
new file mode 100644
index 000000000..215be4ba8
--- /dev/null
+++ b/library/HTMLPurifier/URIScheme/file.php
@@ -0,0 +1,44 @@
+<?php
+
+/**
+ * Validates file as defined by RFC 1630 and RFC 1738.
+ */
+class HTMLPurifier_URIScheme_file extends HTMLPurifier_URIScheme
+{
+ /**
+ * Generally file:// URLs are not accessible from most
+ * machines, so placing them as an img src is incorrect.
+ * @type bool
+ */
+ public $browsable = false;
+
+ /**
+ * Basically the *only* URI scheme for which this is true, since
+ * accessing files on the local machine is very common. In fact,
+ * browsers on some operating systems don't understand the
+ * authority, though I hear it is used on Windows to refer to
+ * network shares.
+ * @type bool
+ */
+ public $may_omit_host = true;
+
+ /**
+ * @param HTMLPurifier_URI $uri
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool
+ */
+ public function doValidate(&$uri, $config, $context)
+ {
+ // Authentication method is not supported
+ $uri->userinfo = null;
+ // file:// makes no provisions for accessing the resource
+ $uri->port = null;
+ // While it seems to work on Firefox, the querystring has
+ // no possible effect and is thus stripped.
+ $uri->query = null;
+ return true;
+ }
+}
+
+// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/URIScheme/ftp.php b/library/HTMLPurifier/URIScheme/ftp.php
index 5849bf7ff..1eb43ee5c 100644
--- a/library/HTMLPurifier/URIScheme/ftp.php
+++ b/library/HTMLPurifier/URIScheme/ftp.php
@@ -3,15 +3,32 @@
/**
* Validates ftp (File Transfer Protocol) URIs as defined by generic RFC 1738.
*/
-class HTMLPurifier_URIScheme_ftp extends HTMLPurifier_URIScheme {
-
+class HTMLPurifier_URIScheme_ftp extends HTMLPurifier_URIScheme
+{
+ /**
+ * @type int
+ */
public $default_port = 21;
+
+ /**
+ * @type bool
+ */
public $browsable = true; // usually
+
+ /**
+ * @type bool
+ */
public $hierarchical = true;
- public function validate(&$uri, $config, $context) {
- parent::validate($uri, $config, $context);
- $uri->query = null;
+ /**
+ * @param HTMLPurifier_URI $uri
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool
+ */
+ public function doValidate(&$uri, $config, $context)
+ {
+ $uri->query = null;
// typecode check
$semicolon_pos = strrpos($uri->path, ';'); // reverse
@@ -34,10 +51,8 @@ class HTMLPurifier_URIScheme_ftp extends HTMLPurifier_URIScheme {
$uri->path = str_replace(';', '%3B', $uri->path);
$uri->path .= $type_ret;
}
-
return true;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/URIScheme/http.php b/library/HTMLPurifier/URIScheme/http.php
index b097a31d6..ce69ec438 100644
--- a/library/HTMLPurifier/URIScheme/http.php
+++ b/library/HTMLPurifier/URIScheme/http.php
@@ -3,18 +3,34 @@
/**
* Validates http (HyperText Transfer Protocol) as defined by RFC 2616
*/
-class HTMLPurifier_URIScheme_http extends HTMLPurifier_URIScheme {
-
+class HTMLPurifier_URIScheme_http extends HTMLPurifier_URIScheme
+{
+ /**
+ * @type int
+ */
public $default_port = 80;
+
+ /**
+ * @type bool
+ */
public $browsable = true;
+
+ /**
+ * @type bool
+ */
public $hierarchical = true;
- public function validate(&$uri, $config, $context) {
- parent::validate($uri, $config, $context);
+ /**
+ * @param HTMLPurifier_URI $uri
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool
+ */
+ public function doValidate(&$uri, $config, $context)
+ {
$uri->userinfo = null;
return true;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/URIScheme/https.php b/library/HTMLPurifier/URIScheme/https.php
index 29e380919..0e96882db 100644
--- a/library/HTMLPurifier/URIScheme/https.php
+++ b/library/HTMLPurifier/URIScheme/https.php
@@ -3,10 +3,16 @@
/**
* Validates https (Secure HTTP) according to http scheme.
*/
-class HTMLPurifier_URIScheme_https extends HTMLPurifier_URIScheme_http {
-
+class HTMLPurifier_URIScheme_https extends HTMLPurifier_URIScheme_http
+{
+ /**
+ * @type int
+ */
public $default_port = 443;
-
+ /**
+ * @type bool
+ */
+ public $secure = true;
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/URIScheme/mailto.php b/library/HTMLPurifier/URIScheme/mailto.php
index c1e2cd5aa..c3a6b602a 100644
--- a/library/HTMLPurifier/URIScheme/mailto.php
+++ b/library/HTMLPurifier/URIScheme/mailto.php
@@ -9,19 +9,32 @@
* @todo Filter allowed query parameters
*/
-class HTMLPurifier_URIScheme_mailto extends HTMLPurifier_URIScheme {
-
+class HTMLPurifier_URIScheme_mailto extends HTMLPurifier_URIScheme
+{
+ /**
+ * @type bool
+ */
public $browsable = false;
- public function validate(&$uri, $config, $context) {
- parent::validate($uri, $config, $context);
+ /**
+ * @type bool
+ */
+ public $may_omit_host = true;
+
+ /**
+ * @param HTMLPurifier_URI $uri
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool
+ */
+ public function doValidate(&$uri, $config, $context)
+ {
$uri->userinfo = null;
$uri->host = null;
$uri->port = null;
// we need to validate path against RFC 2368's addr-spec
return true;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/URIScheme/news.php b/library/HTMLPurifier/URIScheme/news.php
index f5f54f4f5..7490927d6 100644
--- a/library/HTMLPurifier/URIScheme/news.php
+++ b/library/HTMLPurifier/URIScheme/news.php
@@ -3,20 +3,33 @@
/**
* Validates news (Usenet) as defined by generic RFC 1738
*/
-class HTMLPurifier_URIScheme_news extends HTMLPurifier_URIScheme {
-
+class HTMLPurifier_URIScheme_news extends HTMLPurifier_URIScheme
+{
+ /**
+ * @type bool
+ */
public $browsable = false;
- public function validate(&$uri, $config, $context) {
- parent::validate($uri, $config, $context);
+ /**
+ * @type bool
+ */
+ public $may_omit_host = true;
+
+ /**
+ * @param HTMLPurifier_URI $uri
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool
+ */
+ public function doValidate(&$uri, $config, $context)
+ {
$uri->userinfo = null;
- $uri->host = null;
- $uri->port = null;
- $uri->query = null;
+ $uri->host = null;
+ $uri->port = null;
+ $uri->query = null;
// typecode check needed on path
return true;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/URIScheme/nntp.php b/library/HTMLPurifier/URIScheme/nntp.php
index 5bf93ea78..f211d715e 100644
--- a/library/HTMLPurifier/URIScheme/nntp.php
+++ b/library/HTMLPurifier/URIScheme/nntp.php
@@ -3,18 +3,30 @@
/**
* Validates nntp (Network News Transfer Protocol) as defined by generic RFC 1738
*/
-class HTMLPurifier_URIScheme_nntp extends HTMLPurifier_URIScheme {
-
+class HTMLPurifier_URIScheme_nntp extends HTMLPurifier_URIScheme
+{
+ /**
+ * @type int
+ */
public $default_port = 119;
+
+ /**
+ * @type bool
+ */
public $browsable = false;
- public function validate(&$uri, $config, $context) {
- parent::validate($uri, $config, $context);
+ /**
+ * @param HTMLPurifier_URI $uri
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return bool
+ */
+ public function doValidate(&$uri, $config, $context)
+ {
$uri->userinfo = null;
- $uri->query = null;
+ $uri->query = null;
return true;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/URISchemeRegistry.php b/library/HTMLPurifier/URISchemeRegistry.php
index 576bf7b6d..4ac8a0b76 100644
--- a/library/HTMLPurifier/URISchemeRegistry.php
+++ b/library/HTMLPurifier/URISchemeRegistry.php
@@ -8,12 +8,14 @@ class HTMLPurifier_URISchemeRegistry
/**
* Retrieve sole instance of the registry.
- * @param $prototype Optional prototype to overload sole instance with,
+ * @param HTMLPurifier_URISchemeRegistry $prototype Optional prototype to overload sole instance with,
* or bool true to reset to default registry.
+ * @return HTMLPurifier_URISchemeRegistry
* @note Pass a registry object $prototype with a compatible interface and
* the function will copy it and return it all further times.
*/
- public static function instance($prototype = null) {
+ public static function instance($prototype = null)
+ {
static $instance = null;
if ($prototype !== null) {
$instance = $prototype;
@@ -25,17 +27,22 @@ class HTMLPurifier_URISchemeRegistry
/**
* Cache of retrieved schemes.
+ * @type HTMLPurifier_URIScheme[]
*/
protected $schemes = array();
/**
* Retrieves a scheme validator object
- * @param $scheme String scheme name like http or mailto
- * @param $config HTMLPurifier_Config object
- * @param $config HTMLPurifier_Context object
+ * @param string $scheme String scheme name like http or mailto
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return HTMLPurifier_URIScheme
*/
- public function getScheme($scheme, $config, $context) {
- if (!$config) $config = HTMLPurifier_Config::createDefault();
+ public function getScheme($scheme, $config, $context)
+ {
+ if (!$config) {
+ $config = HTMLPurifier_Config::createDefault();
+ }
// important, otherwise attacker could include arbitrary file
$allowed_schemes = $config->get('URI.AllowedSchemes');
@@ -45,24 +52,30 @@ class HTMLPurifier_URISchemeRegistry
return;
}
- if (isset($this->schemes[$scheme])) return $this->schemes[$scheme];
- if (!isset($allowed_schemes[$scheme])) return;
+ if (isset($this->schemes[$scheme])) {
+ return $this->schemes[$scheme];
+ }
+ if (!isset($allowed_schemes[$scheme])) {
+ return;
+ }
$class = 'HTMLPurifier_URIScheme_' . $scheme;
- if (!class_exists($class)) return;
+ if (!class_exists($class)) {
+ return;
+ }
$this->schemes[$scheme] = new $class();
return $this->schemes[$scheme];
}
/**
* Registers a custom scheme to the cache, bypassing reflection.
- * @param $scheme Scheme name
- * @param $scheme_obj HTMLPurifier_URIScheme object
+ * @param string $scheme Scheme name
+ * @param HTMLPurifier_URIScheme $scheme_obj
*/
- public function register($scheme, $scheme_obj) {
+ public function register($scheme, $scheme_obj)
+ {
$this->schemes[$scheme] = $scheme_obj;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/UnitConverter.php b/library/HTMLPurifier/UnitConverter.php
index 545d42622..166f3bf30 100644
--- a/library/HTMLPurifier/UnitConverter.php
+++ b/library/HTMLPurifier/UnitConverter.php
@@ -37,20 +37,24 @@ class HTMLPurifier_UnitConverter
/**
* Minimum bcmath precision for output.
+ * @type int
*/
protected $outputPrecision;
/**
* Bcmath precision for internal calculations.
+ * @type int
*/
protected $internalPrecision;
/**
- * Whether or not BCMath is available
+ * Whether or not BCMath is available.
+ * @type bool
*/
private $bcmath;
- public function __construct($output_precision = 4, $internal_precision = 10, $force_no_bcmath = false) {
+ public function __construct($output_precision = 4, $internal_precision = 10, $force_no_bcmath = false)
+ {
$this->outputPrecision = $output_precision;
$this->internalPrecision = $internal_precision;
$this->bcmath = !$force_no_bcmath && function_exists('bcmul');
@@ -63,6 +67,7 @@ class HTMLPurifier_UnitConverter
* it before passing it here!
* @param string $to_unit
* Unit to convert to.
+ * @return HTMLPurifier_Length|bool
* @note
* About precision: This conversion function pays very special
* attention to the incoming precision of values and attempts
@@ -74,11 +79,13 @@ class HTMLPurifier_UnitConverter
* and this causes some decimals to be excluded, those
* decimals will be added on.
*/
- public function convert($length, $to_unit) {
-
- if (!$length->isValid()) return false;
+ public function convert($length, $to_unit)
+ {
+ if (!$length->isValid()) {
+ return false;
+ }
- $n = $length->getN();
+ $n = $length->getN();
$unit = $length->getUnit();
if ($n === '0' || $unit === false) {
@@ -87,21 +94,29 @@ class HTMLPurifier_UnitConverter
$state = $dest_state = false;
foreach (self::$units as $k => $x) {
- if (isset($x[$unit])) $state = $k;
- if (isset($x[$to_unit])) $dest_state = $k;
+ if (isset($x[$unit])) {
+ $state = $k;
+ }
+ if (isset($x[$to_unit])) {
+ $dest_state = $k;
+ }
+ }
+ if (!$state || !$dest_state) {
+ return false;
}
- if (!$state || !$dest_state) return false;
// Some calculations about the initial precision of the number;
// this will be useful when we need to do final rounding.
$sigfigs = $this->getSigFigs($n);
- if ($sigfigs < $this->outputPrecision) $sigfigs = $this->outputPrecision;
+ if ($sigfigs < $this->outputPrecision) {
+ $sigfigs = $this->outputPrecision;
+ }
// BCMath's internal precision deals only with decimals. Use
// our default if the initial number has no decimals, or increase
// it by how ever many decimals, thus, the number of guard digits
// will always be greater than or equal to internalPrecision.
- $log = (int) floor(log(abs($n), 10));
+ $log = (int)floor(log(abs($n), 10));
$cp = ($log < 0) ? $this->internalPrecision - $log : $this->internalPrecision; // internal precision
for ($i = 0; $i < 2; $i++) {
@@ -152,14 +167,18 @@ class HTMLPurifier_UnitConverter
}
// Post-condition: $unit == $to_unit
- if ($unit !== $to_unit) return false;
+ if ($unit !== $to_unit) {
+ return false;
+ }
// Useful for debugging:
//echo "<pre>n";
//echo "$n\nsigfigs = $sigfigs\nnew_log = $new_log\nlog = $log\nrp = $rp\n</pre>\n";
$n = $this->round($n, $sigfigs);
- if (strpos($n, '.') !== false) $n = rtrim($n, '0');
+ if (strpos($n, '.') !== false) {
+ $n = rtrim($n, '0');
+ }
$n = rtrim($n, '.');
return new HTMLPurifier_Length($n, $unit);
@@ -170,53 +189,84 @@ class HTMLPurifier_UnitConverter
* @param string $n Decimal number
* @return int number of sigfigs
*/
- public function getSigFigs($n) {
+ public function getSigFigs($n)
+ {
$n = ltrim($n, '0+-');
$dp = strpos($n, '.'); // decimal position
if ($dp === false) {
$sigfigs = strlen(rtrim($n, '0'));
} else {
$sigfigs = strlen(ltrim($n, '0.')); // eliminate extra decimal character
- if ($dp !== 0) $sigfigs--;
+ if ($dp !== 0) {
+ $sigfigs--;
+ }
}
return $sigfigs;
}
/**
* Adds two numbers, using arbitrary precision when available.
+ * @param string $s1
+ * @param string $s2
+ * @param int $scale
+ * @return string
*/
- private function add($s1, $s2, $scale) {
- if ($this->bcmath) return bcadd($s1, $s2, $scale);
- else return $this->scale($s1 + $s2, $scale);
+ private function add($s1, $s2, $scale)
+ {
+ if ($this->bcmath) {
+ return bcadd($s1, $s2, $scale);
+ } else {
+ return $this->scale((float)$s1 + (float)$s2, $scale);
+ }
}
/**
* Multiples two numbers, using arbitrary precision when available.
+ * @param string $s1
+ * @param string $s2
+ * @param int $scale
+ * @return string
*/
- private function mul($s1, $s2, $scale) {
- if ($this->bcmath) return bcmul($s1, $s2, $scale);
- else return $this->scale($s1 * $s2, $scale);
+ private function mul($s1, $s2, $scale)
+ {
+ if ($this->bcmath) {
+ return bcmul($s1, $s2, $scale);
+ } else {
+ return $this->scale((float)$s1 * (float)$s2, $scale);
+ }
}
/**
* Divides two numbers, using arbitrary precision when available.
+ * @param string $s1
+ * @param string $s2
+ * @param int $scale
+ * @return string
*/
- private function div($s1, $s2, $scale) {
- if ($this->bcmath) return bcdiv($s1, $s2, $scale);
- else return $this->scale($s1 / $s2, $scale);
+ private function div($s1, $s2, $scale)
+ {
+ if ($this->bcmath) {
+ return bcdiv($s1, $s2, $scale);
+ } else {
+ return $this->scale((float)$s1 / (float)$s2, $scale);
+ }
}
/**
* Rounds a number according to the number of sigfigs it should have,
* using arbitrary precision when available.
+ * @param float $n
+ * @param int $sigfigs
+ * @return string
*/
- private function round($n, $sigfigs) {
- $new_log = (int) floor(log(abs($n), 10)); // Number of digits left of decimal - 1
+ private function round($n, $sigfigs)
+ {
+ $new_log = (int)floor(log(abs($n), 10)); // Number of digits left of decimal - 1
$rp = $sigfigs - $new_log - 1; // Number of decimal places needed
$neg = $n < 0 ? '-' : ''; // Negative sign
if ($this->bcmath) {
if ($rp >= 0) {
- $n = bcadd($n, $neg . '0.' . str_repeat('0', $rp) . '5', $rp + 1);
+ $n = bcadd($n, $neg . '0.' . str_repeat('0', $rp) . '5', $rp + 1);
$n = bcdiv($n, '1', $rp);
} else {
// This algorithm partially depends on the standardized
@@ -232,23 +282,26 @@ class HTMLPurifier_UnitConverter
/**
* Scales a float to $scale digits right of decimal point, like BCMath.
+ * @param float $r
+ * @param int $scale
+ * @return string
*/
- private function scale($r, $scale) {
+ private function scale($r, $scale)
+ {
if ($scale < 0) {
// The f sprintf type doesn't support negative numbers, so we
// need to cludge things manually. First get the string.
- $r = sprintf('%.0f', (float) $r);
+ $r = sprintf('%.0f', (float)$r);
// Due to floating point precision loss, $r will more than likely
// look something like 4652999999999.9234. We grab one more digit
// than we need to precise from $r and then use that to round
// appropriately.
- $precise = (string) round(substr($r, 0, strlen($r) + $scale), -1);
+ $precise = (string)round(substr($r, 0, strlen($r) + $scale), -1);
// Now we return it, truncating the zero that was rounded off.
return substr($precise, 0, -1) . str_repeat('0', -$scale + 1);
}
- return sprintf('%.' . $scale . 'f', (float) $r);
+ return sprintf('%.' . $scale . 'f', (float)$r);
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/VarParser.php b/library/HTMLPurifier/VarParser.php
index 68e72ae86..50cba6910 100644
--- a/library/HTMLPurifier/VarParser.php
+++ b/library/HTMLPurifier/VarParser.php
@@ -7,58 +7,59 @@
class HTMLPurifier_VarParser
{
- const STRING = 1;
- const ISTRING = 2;
- const TEXT = 3;
- const ITEXT = 4;
- const INT = 5;
- const FLOAT = 6;
- const BOOL = 7;
- const LOOKUP = 8;
- const ALIST = 9;
- const HASH = 10;
- const MIXED = 11;
+ const STRING = 1;
+ const ISTRING = 2;
+ const TEXT = 3;
+ const ITEXT = 4;
+ const INT = 5;
+ const FLOAT = 6;
+ const BOOL = 7;
+ const LOOKUP = 8;
+ const ALIST = 9;
+ const HASH = 10;
+ const MIXED = 11;
/**
* Lookup table of allowed types. Mainly for backwards compatibility, but
* also convenient for transforming string type names to the integer constants.
*/
- static public $types = array(
- 'string' => self::STRING,
- 'istring' => self::ISTRING,
- 'text' => self::TEXT,
- 'itext' => self::ITEXT,
- 'int' => self::INT,
- 'float' => self::FLOAT,
- 'bool' => self::BOOL,
- 'lookup' => self::LOOKUP,
- 'list' => self::ALIST,
- 'hash' => self::HASH,
- 'mixed' => self::MIXED
+ public static $types = array(
+ 'string' => self::STRING,
+ 'istring' => self::ISTRING,
+ 'text' => self::TEXT,
+ 'itext' => self::ITEXT,
+ 'int' => self::INT,
+ 'float' => self::FLOAT,
+ 'bool' => self::BOOL,
+ 'lookup' => self::LOOKUP,
+ 'list' => self::ALIST,
+ 'hash' => self::HASH,
+ 'mixed' => self::MIXED
);
/**
* Lookup table of types that are string, and can have aliases or
* allowed value lists.
*/
- static public $stringTypes = array(
- self::STRING => true,
- self::ISTRING => true,
- self::TEXT => true,
- self::ITEXT => true,
+ public static $stringTypes = array(
+ self::STRING => true,
+ self::ISTRING => true,
+ self::TEXT => true,
+ self::ITEXT => true,
);
/**
- * Validate a variable according to type. Throws
- * HTMLPurifier_VarParserException if invalid.
+ * Validate a variable according to type.
* It may return NULL as a valid type if $allow_null is true.
*
- * @param $var Variable to validate
- * @param $type Type of variable, see HTMLPurifier_VarParser->types
- * @param $allow_null Whether or not to permit null as a value
- * @return Validated and type-coerced variable
+ * @param mixed $var Variable to validate
+ * @param int $type Type of variable, see HTMLPurifier_VarParser->types
+ * @param bool $allow_null Whether or not to permit null as a value
+ * @return string Validated and type-coerced variable
+ * @throws HTMLPurifier_VarParserException
*/
- final public function parse($var, $type, $allow_null = false) {
+ final public function parse($var, $type, $allow_null = false)
+ {
if (is_string($type)) {
if (!isset(HTMLPurifier_VarParser::$types[$type])) {
throw new HTMLPurifier_VarParserException("Invalid type '$type'");
@@ -67,7 +68,9 @@ class HTMLPurifier_VarParser
}
}
$var = $this->parseImplementation($var, $type, $allow_null);
- if ($allow_null && $var === null) return null;
+ if ($allow_null && $var === null) {
+ return null;
+ }
// These are basic checks, to make sure nothing horribly wrong
// happened in our implementations.
switch ($type) {
@@ -75,27 +78,45 @@ class HTMLPurifier_VarParser
case (self::ISTRING):
case (self::TEXT):
case (self::ITEXT):
- if (!is_string($var)) break;
- if ($type == self::ISTRING || $type == self::ITEXT) $var = strtolower($var);
+ if (!is_string($var)) {
+ break;
+ }
+ if ($type == self::ISTRING || $type == self::ITEXT) {
+ $var = strtolower($var);
+ }
return $var;
case (self::INT):
- if (!is_int($var)) break;
+ if (!is_int($var)) {
+ break;
+ }
return $var;
case (self::FLOAT):
- if (!is_float($var)) break;
+ if (!is_float($var)) {
+ break;
+ }
return $var;
case (self::BOOL):
- if (!is_bool($var)) break;
+ if (!is_bool($var)) {
+ break;
+ }
return $var;
case (self::LOOKUP):
case (self::ALIST):
case (self::HASH):
- if (!is_array($var)) break;
+ if (!is_array($var)) {
+ break;
+ }
if ($type === self::LOOKUP) {
- foreach ($var as $k) if ($k !== true) $this->error('Lookup table contains value other than true');
+ foreach ($var as $k) {
+ if ($k !== true) {
+ $this->error('Lookup table contains value other than true');
+ }
+ }
} elseif ($type === self::ALIST) {
$keys = array_keys($var);
- if (array_keys($keys) !== $keys) $this->error('Indices for list are not uniform');
+ if (array_keys($keys) !== $keys) {
+ $this->error('Indices for list are not uniform');
+ }
}
return $var;
case (self::MIXED):
@@ -107,17 +128,24 @@ class HTMLPurifier_VarParser
}
/**
- * Actually implements the parsing. Base implementation is to not
+ * Actually implements the parsing. Base implementation does not
* do anything to $var. Subclasses should overload this!
+ * @param mixed $var
+ * @param int $type
+ * @param bool $allow_null
+ * @return string
*/
- protected function parseImplementation($var, $type, $allow_null) {
+ protected function parseImplementation($var, $type, $allow_null)
+ {
return $var;
}
/**
* Throws an exception.
+ * @throws HTMLPurifier_VarParserException
*/
- protected function error($msg) {
+ protected function error($msg)
+ {
throw new HTMLPurifier_VarParserException($msg);
}
@@ -126,29 +154,45 @@ class HTMLPurifier_VarParser
* @note This should not ever be called. It would be called if we
* extend the allowed values of HTMLPurifier_VarParser without
* updating subclasses.
+ * @param string $class
+ * @param int $type
+ * @throws HTMLPurifier_Exception
*/
- protected function errorInconsistent($class, $type) {
- throw new HTMLPurifier_Exception("Inconsistency in $class: ".HTMLPurifier_VarParser::getTypeName($type)." not implemented");
+ protected function errorInconsistent($class, $type)
+ {
+ throw new HTMLPurifier_Exception(
+ "Inconsistency in $class: " . HTMLPurifier_VarParser::getTypeName($type) .
+ " not implemented"
+ );
}
/**
* Generic error for if a type didn't work.
+ * @param mixed $var
+ * @param int $type
*/
- protected function errorGeneric($var, $type) {
+ protected function errorGeneric($var, $type)
+ {
$vtype = gettype($var);
- $this->error("Expected type ".HTMLPurifier_VarParser::getTypeName($type).", got $vtype");
+ $this->error("Expected type " . HTMLPurifier_VarParser::getTypeName($type) . ", got $vtype");
}
- static public function getTypeName($type) {
+ /**
+ * @param int $type
+ * @return string
+ */
+ public static function getTypeName($type)
+ {
static $lookup;
if (!$lookup) {
// Lazy load the alternative lookup table
$lookup = array_flip(HTMLPurifier_VarParser::$types);
}
- if (!isset($lookup[$type])) return 'unknown';
+ if (!isset($lookup[$type])) {
+ return 'unknown';
+ }
return $lookup[$type];
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/VarParser/Flexible.php b/library/HTMLPurifier/VarParser/Flexible.php
index c954250e9..b15016c5b 100644
--- a/library/HTMLPurifier/VarParser/Flexible.php
+++ b/library/HTMLPurifier/VarParser/Flexible.php
@@ -7,28 +7,41 @@
*/
class HTMLPurifier_VarParser_Flexible extends HTMLPurifier_VarParser
{
-
- protected function parseImplementation($var, $type, $allow_null) {
- if ($allow_null && $var === null) return null;
+ /**
+ * @param mixed $var
+ * @param int $type
+ * @param bool $allow_null
+ * @return array|bool|float|int|mixed|null|string
+ * @throws HTMLPurifier_VarParserException
+ */
+ protected function parseImplementation($var, $type, $allow_null)
+ {
+ if ($allow_null && $var === null) {
+ return null;
+ }
switch ($type) {
// Note: if code "breaks" from the switch, it triggers a generic
// exception to be thrown. Specific errors can be specifically
// done here.
- case self::MIXED :
- case self::ISTRING :
- case self::STRING :
- case self::TEXT :
- case self::ITEXT :
+ case self::MIXED:
+ case self::ISTRING:
+ case self::STRING:
+ case self::TEXT:
+ case self::ITEXT:
return $var;
- case self::INT :
- if (is_string($var) && ctype_digit($var)) $var = (int) $var;
+ case self::INT:
+ if (is_string($var) && ctype_digit($var)) {
+ $var = (int)$var;
+ }
return $var;
- case self::FLOAT :
- if ((is_string($var) && is_numeric($var)) || is_int($var)) $var = (float) $var;
+ case self::FLOAT:
+ if ((is_string($var) && is_numeric($var)) || is_int($var)) {
+ $var = (float)$var;
+ }
return $var;
- case self::BOOL :
+ case self::BOOL:
if (is_int($var) && ($var === 0 || $var === 1)) {
- $var = (bool) $var;
+ $var = (bool)$var;
} elseif (is_string($var)) {
if ($var == 'on' || $var == 'true' || $var == '1') {
$var = true;
@@ -39,48 +52,70 @@ class HTMLPurifier_VarParser_Flexible extends HTMLPurifier_VarParser
}
}
return $var;
- case self::ALIST :
- case self::HASH :
- case self::LOOKUP :
+ case self::ALIST:
+ case self::HASH:
+ case self::LOOKUP:
if (is_string($var)) {
// special case: technically, this is an array with
// a single empty string item, but having an empty
// array is more intuitive
- if ($var == '') return array();
+ if ($var == '') {
+ return array();
+ }
if (strpos($var, "\n") === false && strpos($var, "\r") === false) {
// simplistic string to array method that only works
// for simple lists of tag names or alphanumeric characters
- $var = explode(',',$var);
+ $var = explode(',', $var);
} else {
$var = preg_split('/(,|[\n\r]+)/', $var);
}
// remove spaces
- foreach ($var as $i => $j) $var[$i] = trim($j);
+ foreach ($var as $i => $j) {
+ $var[$i] = trim($j);
+ }
if ($type === self::HASH) {
// key:value,key2:value2
$nvar = array();
foreach ($var as $keypair) {
$c = explode(':', $keypair, 2);
- if (!isset($c[1])) continue;
- $nvar[$c[0]] = $c[1];
+ if (!isset($c[1])) {
+ continue;
+ }
+ $nvar[trim($c[0])] = trim($c[1]);
}
$var = $nvar;
}
}
- if (!is_array($var)) break;
+ if (!is_array($var)) {
+ break;
+ }
$keys = array_keys($var);
if ($keys === array_keys($keys)) {
- if ($type == self::ALIST) return $var;
- elseif ($type == self::LOOKUP) {
+ if ($type == self::ALIST) {
+ return $var;
+ } elseif ($type == self::LOOKUP) {
$new = array();
foreach ($var as $key) {
$new[$key] = true;
}
return $new;
- } else break;
+ } else {
+ break;
+ }
+ }
+ if ($type === self::ALIST) {
+ trigger_error("Array list did not have consecutive integer indexes", E_USER_WARNING);
+ return array_values($var);
}
if ($type === self::LOOKUP) {
foreach ($var as $key => $value) {
+ if ($value !== true) {
+ trigger_error(
+ "Lookup array has non-true value at key '$key'; " .
+ "maybe your input array was not indexed numerically",
+ E_USER_WARNING
+ );
+ }
$var[$key] = true;
}
}
@@ -90,7 +125,6 @@ class HTMLPurifier_VarParser_Flexible extends HTMLPurifier_VarParser
}
$this->errorGeneric($var, $type);
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/VarParser/Native.php b/library/HTMLPurifier/VarParser/Native.php
index b02a6de54..f11c318ef 100644
--- a/library/HTMLPurifier/VarParser/Native.php
+++ b/library/HTMLPurifier/VarParser/Native.php
@@ -8,11 +8,24 @@
class HTMLPurifier_VarParser_Native extends HTMLPurifier_VarParser
{
- protected function parseImplementation($var, $type, $allow_null) {
+ /**
+ * @param mixed $var
+ * @param int $type
+ * @param bool $allow_null
+ * @return null|string
+ */
+ protected function parseImplementation($var, $type, $allow_null)
+ {
return $this->evalExpression($var);
}
- protected function evalExpression($expr) {
+ /**
+ * @param string $expr
+ * @return mixed
+ * @throws HTMLPurifier_VarParserException
+ */
+ protected function evalExpression($expr)
+ {
$var = null;
$result = eval("\$var = $expr;");
if ($result === false) {
@@ -20,7 +33,6 @@ class HTMLPurifier_VarParser_Native extends HTMLPurifier_VarParser
}
return $var;
}
-
}
// vim: et sw=4 sts=4
diff --git a/library/HTMLPurifier/Zipper.php b/library/HTMLPurifier/Zipper.php
new file mode 100644
index 000000000..6e21ea070
--- /dev/null
+++ b/library/HTMLPurifier/Zipper.php
@@ -0,0 +1,157 @@
+<?php
+
+/**
+ * A zipper is a purely-functional data structure which contains
+ * a focus that can be efficiently manipulated. It is known as
+ * a "one-hole context". This mutable variant implements a zipper
+ * for a list as a pair of two arrays, laid out as follows:
+ *
+ * Base list: 1 2 3 4 [ ] 6 7 8 9
+ * Front list: 1 2 3 4
+ * Back list: 9 8 7 6
+ *
+ * User is expected to keep track of the "current element" and properly
+ * fill it back in as necessary. (ToDo: Maybe it's more user friendly
+ * to implicitly track the current element?)
+ *
+ * Nota bene: the current class gets confused if you try to store NULLs
+ * in the list.
+ */
+
+class HTMLPurifier_Zipper
+{
+ public $front, $back;
+
+ public function __construct($front, $back) {
+ $this->front = $front;
+ $this->back = $back;
+ }
+
+ /**
+ * Creates a zipper from an array, with a hole in the
+ * 0-index position.
+ * @param Array to zipper-ify.
+ * @return Tuple of zipper and element of first position.
+ */
+ static public function fromArray($array) {
+ $z = new self(array(), array_reverse($array));
+ $t = $z->delete(); // delete the "dummy hole"
+ return array($z, $t);
+ }
+
+ /**
+ * Convert zipper back into a normal array, optionally filling in
+ * the hole with a value. (Usually you should supply a $t, unless you
+ * are at the end of the array.)
+ */
+ public function toArray($t = NULL) {
+ $a = $this->front;
+ if ($t !== NULL) $a[] = $t;
+ for ($i = count($this->back)-1; $i >= 0; $i--) {
+ $a[] = $this->back[$i];
+ }
+ return $a;
+ }
+
+ /**
+ * Move hole to the next element.
+ * @param $t Element to fill hole with
+ * @return Original contents of new hole.
+ */
+ public function next($t) {
+ if ($t !== NULL) array_push($this->front, $t);
+ return empty($this->back) ? NULL : array_pop($this->back);
+ }
+
+ /**
+ * Iterated hole advancement.
+ * @param $t Element to fill hole with
+ * @param $i How many forward to advance hole
+ * @return Original contents of new hole, i away
+ */
+ public function advance($t, $n) {
+ for ($i = 0; $i < $n; $i++) {
+ $t = $this->next($t);
+ }
+ return $t;
+ }
+
+ /**
+ * Move hole to the previous element
+ * @param $t Element to fill hole with
+ * @return Original contents of new hole.
+ */
+ public function prev($t) {
+ if ($t !== NULL) array_push($this->back, $t);
+ return empty($this->front) ? NULL : array_pop($this->front);
+ }
+
+ /**
+ * Delete contents of current hole, shifting hole to
+ * next element.
+ * @return Original contents of new hole.
+ */
+ public function delete() {
+ return empty($this->back) ? NULL : array_pop($this->back);
+ }
+
+ /**
+ * Returns true if we are at the end of the list.
+ * @return bool
+ */
+ public function done() {
+ return empty($this->back);
+ }
+
+ /**
+ * Insert element before hole.
+ * @param Element to insert
+ */
+ public function insertBefore($t) {
+ if ($t !== NULL) array_push($this->front, $t);
+ }
+
+ /**
+ * Insert element after hole.
+ * @param Element to insert
+ */
+ public function insertAfter($t) {
+ if ($t !== NULL) array_push($this->back, $t);
+ }
+
+ /**
+ * Splice in multiple elements at hole. Functional specification
+ * in terms of array_splice:
+ *
+ * $arr1 = $arr;
+ * $old1 = array_splice($arr1, $i, $delete, $replacement);
+ *
+ * list($z, $t) = HTMLPurifier_Zipper::fromArray($arr);
+ * $t = $z->advance($t, $i);
+ * list($old2, $t) = $z->splice($t, $delete, $replacement);
+ * $arr2 = $z->toArray($t);
+ *
+ * assert($old1 === $old2);
+ * assert($arr1 === $arr2);
+ *
+ * NB: the absolute index location after this operation is
+ * *unchanged!*
+ *
+ * @param Current contents of hole.
+ */
+ public function splice($t, $delete, $replacement) {
+ // delete
+ $old = array();
+ $r = $t;
+ for ($i = $delete; $i > 0; $i--) {
+ $old[] = $r;
+ $r = $this->delete();
+ }
+ // insert
+ for ($i = count($replacement)-1; $i >= 0; $i--) {
+ $this->insertAfter($r);
+ $r = $replacement[$i];
+ }
+ return array($old, $r);
+ }
+}
diff --git a/library/Smarty/README b/library/Smarty/README
index 167462823..6367f030e 100644
--- a/library/Smarty/README
+++ b/library/Smarty/README
@@ -1,4 +1,4 @@
-Smarty 3.1.11
+Smarty 3.1.21
Author: Monte Ohrt <monte at ohrt dot com >
Author: Uwe Tews
@@ -120,7 +120,7 @@ $smarty->unregisterObject($object_name)
$smarty->unregisterFilter($type, $function_name)
$smarty->unregisterResource($resource_type)
-$smarty->compileAllTemplates($extention = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null)
+$smarty->compileAllTemplates($extension = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null)
$smarty->clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null)
$smarty->testInstall()
diff --git a/library/Smarty/SMARTY_3.1_NOTES.txt b/library/Smarty/SMARTY_3.1_NOTES.txt
index e56e56f67..57709f0d7 100644
--- a/library/Smarty/SMARTY_3.1_NOTES.txt
+++ b/library/Smarty/SMARTY_3.1_NOTES.txt
@@ -199,7 +199,7 @@ Relative paths are available with {include file="..."} and
$smarty->fetch('./foo.tpl') cannot be relative to a template, an
exception is thrown.
- Adressing a specific $template_dir
+ Addressing a specific $template_dir
Smarty 3.1 introduces the $template_dir index notation.
$smarty->fetch('[foo]bar.tpl') and {include file="[foo]bar.tpl"}
diff --git a/library/Smarty/change_log.txt b/library/Smarty/change_log.txt
index 27c506db6..a0161659d 100644
--- a/library/Smarty/change_log.txt
+++ b/library/Smarty/change_log.txt
@@ -1,5 +1,342 @@
-===== trunk =====
-===== Smarty-3.1.11 =====
+ ===== 3.1.22-dev ===== (xx.xx.2014)
+ ===== 3.1.21 ===== (18.10.2014)
+ 18.10.2014
+ - composer moved to github
+ - add COMPOSER_RELEASE_NOTES
+
+ 17.10.2014
+ - bugfix on $php_handling security and optimization of smarty_internal_parsetree (Thue Kristensen)
+
+ 16.10.2014
+ - bugfix composer.json update
+
+ 15.10.2014
+ - bugfix calling a new created cache file with fetch() and Smarty::CACHING_LIFETIME_SAVED multiple times did fail (forum 22350)
+
+ 14.10.2014
+ - bugfix any tag placed within "<script language=php>" will throw a security exception to close all thinkable holes
+ - bugfix classmap in root composer.json should start at "libs/..."
+ - improvement cache is_file(file_exists) results of loadPlugin() to avoid unnecessary calls during compilation (Issue 201}
+
+ 12.10.2014
+ - bugfix a comment like "<script{*foo*} language=php>" bypassed $php_handling checking (Thue Kristensen)
+ - bugfix change of 08.10.2014 could create E_NOTICE meassage when using "<?php" tags
+ - bugfix "<script language=php>" with $php_handling PHP_PASSTHRU was executed in {nocache} sections
+
+ ===== 3.1.20 ===== (09.10.2014)
+ 08.10.2014
+ - bugfix security mode of "<script language=php>" must be controlled by $php_handling property (Thue Kristensen)
+
+ 01.10.2014
+ - bugfix template resource of inheritance blocks could get invalid if the default resource type is not 'file'(Issue 202)
+ - bugfix existing child {block} tag must override parent {block} tag append / prepend setting (topic 25259)
+
+ 02.08.2014
+ - bugfix modifier wordwrap did output break string wrong if first word was exceeding length with cut = true (topic 25193)
+
+ 24.07.2014
+ - bugfix cache clear when cache folder does not exist
+
+ 16.07.2014
+ - enhancement remove BOM automatically from template source (topic 25161)
+
+ 04.07.2014
+ - bugfix the bufix of 02.06.2014 broke correct handling of child templates with same name but different template folders in extends resource (issue 194 and topic 25099)
+
+ ===== 3.1.19 ===== (06.30.2014)
+ 20.06.2014
+ - bugfix template variables could not be passed as parameter in {include} when the include was in a {nocache} section (topic 25131)
+
+ 17.06.2014
+ - bugfix large template text of some charsets could cause parsing errors (topic 24630)
+
+ 08.06.2014
+ - bugfix registered objects did not work after spelling fixes of 06.06.2014
+ - bugfix {block} tags within {literal} .. {/literal} got not displayed correctly (topic 25024)
+ - bugfix UNC WINDOWS PATH like "\\psf\path\to\dir" did not work as template directory (Issue 192)
+ - bugfix {html_image} security check did fail on files relative to basedir (Issue 191)
+
+ 06.06.2014
+ - fixed PHPUnit outputFilterTrimWhitespaceTests.php assertion of test result
+ - fixed spelling, PHPDoc , minor errors, code cleanup
+
+ 02.06.2014
+ - using multiple cwd with relative template dirs could result in identical compiled file names. (issue 194 and topic 25099)
+
+ 19.04.2014
+ - bugfix calling createTemplate(template, data) with empty data array caused notice of array to string conversion (Issue 189)
+ - bugfix clearCompiledTemplate() did not delete files on WINDOWS when a compile_id was specified
+
+ 18.04.2014
+ - revert bugfix of 5.4.2014 because %-e date format is not supported on all operating systems
+
+ ===== 3.1.18 ===== (07.04.2014)
+ 06.04.2014
+ - bugfix template inheritance fail when using custom resource after patch of 8.3.2014 (Issue 187)
+ - bugfix update of composer file (Issue 168 and 184)
+
+ 05.04.2014
+ - bugfix default date format leads to extra spaces when displaying dates with single digit days (Issue 165)
+
+ 26.03.2014
+ - bugfix Smart_Resource_Custom should not lowercase the resource name (Issue 183)
+
+ 24.03.2014
+ - bugfix using a {foreach} property like @iteration could fail when used in inheritance parent templates (Issue 182)
+
+ 20.03.2014
+ - bugfix $smarty->auto_literal and mbsting.func_overload 2, 6 or 7 did fail (forum topic 24899)
+
+ 18.03.2014
+ - revert change of 17.03.2014
+
+17.03.2014
+ - bugfix $smarty->auto_literal and mbsting.func_overload 2, 6 or 7 did fail (forum topic 24899)
+
+ 15.03.2014
+ - bugfix Smarty_CacheResource_Keyvaluestore did use different keys on read/writes and clearCache() calls (Issue 169)
+
+ 13.03.2014
+ - bugfix clearXxx() change of 27.1.2014 did not work when specifing cache_id or compile_id (forum topic 24868 and 24867)
+
+ ===== 3.1.17 =====
+ 08.03.2014
+ - bugfix relative file path {include} within {block} of child templates did throw exception on first call (Issue 177)
+
+ 17.02.2014
+ - bugfix Smarty failed when executing PHP on HHVM (Hip Hop 2.4) because uniqid('',true) does return string with ',' (forum topic 20343)
+
+ 16.02.2014
+ - bugfix a '//' or '\\' in template_dir path could produce wrong path on relative filepath in {include} (Issue 175)
+
+ 05.02.2014
+ - bugfix shared.literal_compiler_param.php did throw an exception when literal did contain a '-' (smarty-developers group)
+
+ 27.01.2014
+ - bugfix $smarty->debugging = true; did show the variable of the $smarty object not the variables used in display() call (forum topic 24764)
+ - bugfix clearCompiledTemplate(), clearAll() and clear() should use realpath to avoid possible exception from RecursiveDirectoryIterator (Issue 171)
+
+ 26.01.2014
+ - bugfix undo block nesting checks for {nocache} for reasons like forum topic 23280 (forum topic 24762)
+
+ 18.01.2014
+ - bugfix the compiler did fail when using template inheritance and recursive {include} (smarty-developers group)
+
+ 11.01.2014
+ - bugfix "* }" (spaces before right delimiter) was interpreted by mistake as comment end tag (Issue 170)
+ - internals content cache should be clear when updating cache file
+
+ 08.01.2014
+ - bugfix Smarty_CacheResource_Custom did not handle template resource type specifications on clearCache() calls (Issue 169)
+ - bugfix SmartyBC.class.php should use require_once to load Smarty.class.php (forum topic 24683)
+
+ ===== 3.1.16 =====
+ 15.12.2013
+ - bugfix {include} with {block} tag handling (forum topic 24599, 24594, 24682) (Issue 161)
+ Read 3.1.16_RELEASE_NOTES for more details
+ - enhancement additional debug output at $smarty->_parserdebug = true;
+
+ 07.11.2013
+ - bugfix too restrictive handling of {include} within {block} tags. 3.1.15 did throw errors where 3.1.14 did not (forum topic 24599)
+ - bugfix compiler could fail if PHP mbstring.func_overload is enabled (Issue 164)
+
+ 28.10.2013
+ - bugfix variable resource name at custom resource plugin did not work within {block} tags (Issue 163)
+ - bugfix notice "Trying to get property of non-object" removed (Issue 163)
+ - bugfix correction of modifier capitalize fix from 3.10.2013 (issue 159)
+ - bugfix multiple {block}s with same name in parent did not work (forum topic 24631)
+
+ 20.10.2013
+ - bugfix a variable file name at {extends} tag did fail (forum topic 24618)
+
+ 14.10.2013
+ - bugfix yesterdays fix could result in an undefined variable
+
+ 13.10.2013
+ - bugfix variable names on {include} in template inheritance did unextepted error message (forum topic 24594) (Issue 161)
+.- bugfix relative includes with same name like {include './foo.tpl'} from different folder failed (forum topic 24590)(Issue 161)
+
+ 04.10.2013
+ - bugfix variable file names at {extends} had been disbabled by mistake with the rewrite of
+ template inheritance of 24.08.2013 (forum topic 24585)
+
+03.10.2013
+ - bugfix loops using modifier capitalize did eat up memory (issue 159)
+
+ ===== Smarty 3.1.15 =====
+01.10.2013
+ - use current delimiters in compiler error messages (issue 157)
+ - improvement on performance when using error handler and multiple template folders (issue 152)
+
+17.09.2013
+ - improvement added patch for additional SmartyCompilerException properties for better access to scource information (forum topic 24559)
+
+16.09.2013
+ - bugfix recompiled templates did not show on first request with zend opcache cache (forum topic 24320)
+
+13.09.2013
+ - bugfix html_select_time defaulting error for the Meridian dropdown (forum topic 24549)
+
+09.09.2012
+- bugfix incorrect compiled code with array(object,method) callback at registered Variable Filter (forum topic 24542)
+
+27.08.2013
+- bugfix delimiter followed by linebreak did not work as auto literal after update from 24.08.2013 (forum topic 24518)
+
+24.08.2013
+- bugfix and enhancement
+ Because several recent problems with template inheritance the {block} tag compiler has been rewriten
+ - Error messages shown now the correct child template file and line number
+ - The compiler could fail on some larger UTF-8 text block (forum topic 24455)
+ - The {strip} tag can now be placed outside {block} tags in child templates (forum topic 24289)
+- change SmartyException::$escape is now false by default
+- change PHP traceback has been remove for SmartyException and SmartyCompilerException
+
+14.08.2013
+- bugfix compiled filepath of config file did not observe different config_dir (forum topic 24493)
+
+13.08.2013
+- bugfix the internal resource cache did not observe config_dir changes (forum topic 24493)
+
+12.08.2013
+- bugfix internal $tmpx variables must be unique over all inheritance templates (Issue 149)
+
+10.08.2013
+- bugfix a newline was eaten when a <?xml ... ?> was passed by a Smarty variable and caching was enabled (forum topic 24482)
+
+29.07.2013
+- bugfix headers already send warning thrown when using 'SMARTY_DEBUG=on' from URL (Issue 148)
+
+27.07.2013
+- enhancement allow access to properties of registered opjects for Smarty2 BC (forum topic 24344)
+
+26.07.2013
+- bugfix template inheritance nesting problem (forum topic 24387)
+
+15.7.2013
+- update code generated by PSR-2 standards fixer which introduced PHP 5.4 incompatibilities of 14.7.2013
+
+14.7.2013
+- bugfix increase of internal maximum parser stacksize to allow more complex tag code {forum topic 24426}
+- update for PHP 5.4 compatibility
+- reformat source to PSR-2 standard
+
+12.7.2013
+- bugfix Do not remove '//' from file path at normalization (Issue 142)
+
+2.7.2013
+- bugfix trimwhitespace would replace captured items in wrong order (forum topic 24387)
+
+===== Smarty-3.1.14 =====
+27.06.2013
+- bugfix removed PHP 5.5 deprecated preg_replace /e option in modifier capitalize (forum topic 24389)
+
+17.06.2013
+- fixed spelling in sources and documentation (from smarty-developers forum Veres Lajos)
+- enhancement added constant SMARTY::CLEAR_EXPIRED for the change of 26.05.2013 (forum topic 24310)
+- bugfix added smarty_security.php to composer.json (Issue 135)
+
+26.05.2013
+- enhancement an expire_time of -1 in clearCache() and clearAllCache() will delete outdated cache files
+ by their individual cache_lifetime used at creation (forum topic 24310)
+
+21.05.2013
+- bugfix modifier strip_tags:true was compiled into wrong code (Forum Topic 24287)
+- bugfix /n after ?> in Smarty.class.php did start output buffering (Issue 138)
+
+25.04.2013
+- bugfix escape and wordrap modifier could be compiled into wrong code when used in {nocache}{/nocache}
+ section but caching is disabled (Forum Topic 24260)
+
+05.04.2013
+- bugfix post filter must not run when compiling inheritance child blocks (Forum Topic 24094)
+- bugfix after the fix for Issue #130 compiler exceptions got double escaped (Forum Topic 24199)
+
+28.02.2013
+- bugfix nocache blocks could be lost when using CACHING_LIFETIME_SAVED (Issue #133)
+- bugfix Compile ID gets nulled when compiling child blocks (Issue #134)
+
+
+24.01.2013
+- bugfix wrong tag type in smarty_internal_templatecompilerbase.php could cause wrong plugin search order (Forum Topic 24028)
+
+===== Smarty-3.1.13 =====
+13.01.2013
+- enhancement allow to disable exception message escaping by SmartyException::$escape = false; (Issue #130)
+
+09.01.2013
+- bugfix compilation did fail when a prefilter did modify an {extends} tag c
+- bugfix template inheritance could fail if nested {block} tags in childs did contain {$smarty.block.child} (Issue #127)
+- bugfix template inheritance could fail if {block} tags in childs did have similar name as used plugins (Issue #128)
+- added abstract method declaration doCompile() in Smarty_Internal_TemplateCompilerBase (Forum Topic 23969)
+
+06.01.2013
+- Allow '://' URL syntax in template names of stream resources (Issue #129)
+
+27.11.2012
+- bugfix wrong variable usage in smarty_internal_utility.php (Issue #125)
+
+26.11.2012
+- bugfix global variable assigned within template function are not seen after template function exit (Forum Topic 23800)
+
+24.11.2012
+- made SmartyBC loadable via composer (Issue #124)
+
+20.11.2012
+- bugfix assignGlobal() called from plugins did not work (Forum Topic 23771)
+
+13.11.2012
+- adding attribute "strict" to html_options, html_checkboxes, html_radios to only print disabled/readonly attributes if their values are true or "disabled"/"readonly" (Issue #120)
+
+01.11.2012
+- bugfix muteExcpetedErrors() would screw up for non-readable paths (Issue #118)
+
+===== Smarty-3.1.12 =====
+14.09.2012
+- bugfix template inheritance failed to compile with delimiters {/ and /} (Forum Topic 23008)
+
+11.09.2012
+- bugfix escape Smarty exception messages to avoid possible script execution
+
+10.09.2012
+- bugfix tag option flags and shorttag attributes did not work when rdel started with '=' (Forum Topic 22979)
+
+31.08.2012
+- bugfix resolving relative paths broke in some circumstances (Issue #114)
+
+22.08.2012
+- bugfix test MBString availability through mb_split, as it could've been compiled without regex support (--enable-mbregex).
+ Either we get MBstring's full package, or we pretend it's not there at all.
+
+21.08.2012
+- bugfix $auto_literal = false did not work with { block} tags in child templates
+ (problem was reintroduced after fix in 3.1.7)(Forum Topic 20581)
+
+17.08.2012
+- bugfix compiled code of nocache sections could contain wrong escaping (Forum Topic 22810)
+
+15.08.2012
+- bugfix template inheritance did produce wrong code if subtemplates with {block} was
+ included several times (from smarty-developers forum)
+
+14.08.2012
+- bugfix PHP5.2 compatibility compromised by SplFileInfo::getBasename() (Issue 110)
+
+01.08.2012
+- bugfix avoid PHP error on $smarty->configLoad(...) with invalid section specification (Forum Topic 22608)
+
+30.07.2012
+-bugfix {assign} in a nocache section should not overwrite existing variable values
+ during compilation (issue 109)
+
+28.07.2012
+- bugfix array access of config variables did not work (Forum Topic 22527)
+
+19.07.2012
+- bugfix the default plugin handler did create wrong compiled code for static class methods
+ from external script files (issue 108)
+
+===== Smarty-3.1.11 =====
30.06.2012
- bugfix {block.. hide} did not work as nested child (Forum Topic 22216)
@@ -342,7 +679,7 @@
03/09/2011
- bugfix createTemplate() must default to cache_id and compile_id of Smarty object
- bugfix Smarty_CacheResource_KeyValueStore must include $source->uid in cache filepath to keep templates with same
- name but different folders seperated
+ name but different folders separated
- added cacheresource.apc.php example in demo folder
02/09/2011
@@ -533,7 +870,7 @@
- changed ./ and ../ behaviour
14/02/2011
-- added {block ... hide} option to supress block if no child is defined
+- added {block ... hide} option to suppress block if no child is defined
13/02/2011
- update handling of recursive subtemplate calls
@@ -647,7 +984,7 @@
- bugfix on compiler object destruction. compiler_object property was by mistake unset.
09/03/2011
--bugfix a variable filter should run before modifers on an output tag (see change of 23/07/2010)
+-bugfix a variable filter should run before modifiers on an output tag (see change of 23/07/2010)
08/03/2011
- bugfix loading config file without section should load only defaults
@@ -951,10 +1288,10 @@ request_use_auto_globals
- bugfix passing scope attributes in doublequoted strings did not work at {include} {assign} and {append}
25/07/2010
-- another bugfix of change from 23/07/2010 when compiling modifer
+- another bugfix of change from 23/07/2010 when compiling modifier
24/07/2010
-- bugfix of change from 23/07/2010 when compiling modifer
+- bugfix of change from 23/07/2010 when compiling modifier
23/07/2010
- changed execution order. A variable filter does now run before modifiers on output of variables
@@ -1261,7 +1598,7 @@ request_use_auto_globals
- bugfix on {if} tags
01/12/2010
-- changed back modifer handling in parser. Some restrictions still apply:
+- changed back modifier handling in parser. Some restrictions still apply:
if modifiers are used in side {if...} expression or in mathematical expressions
parentheses must be used.
- bugfix the {function..} tag did not accept the name attribute in double quotes
@@ -1873,7 +2210,7 @@ NOTICE: existing compiled template and cache files must be deleted
- fixed exceptions in function plugins
- fixed notice error in Smarty.class.php
- allow chained objects to span multiple lines
-- fixed error in modifers
+- fixed error in modifiers
03/20/2009
- moved /plugins folder into /libs folder
@@ -1881,7 +2218,7 @@ NOTICE: existing compiled template and cache files must be deleted
- autoappend a directory separator if the xxxxx_dir definition have no trailing one
03/19/2009
-- allow array definition as modifer parameter
+- allow array definition as modifier parameter
- changed modifier to use multi byte string funktions.
03/17/2009
diff --git a/library/Smarty/demo/index.php b/library/Smarty/demo/index.php
index 74c8e8971..33f3035c5 100644
--- a/library/Smarty/demo/index.php
+++ b/library/Smarty/demo/index.php
@@ -1,33 +1,30 @@
<?php
- /**
+/**
* Example Application
-
+ *
* @package Example-application
*/
-require('../libs/Smarty.class.php');
+require '../libs/Smarty.class.php';
$smarty = new Smarty;
-
-
//$smarty->force_compile = true;
$smarty->debugging = true;
$smarty->caching = true;
$smarty->cache_lifetime = 120;
-$smarty->assign("Name","Fred Irving Johnathan Bradley Peppergill",true);
-$smarty->assign("FirstName",array("John","Mary","James","Henry"));
-$smarty->assign("LastName",array("Doe","Smith","Johnson","Case"));
-$smarty->assign("Class",array(array("A","B","C","D"), array("E", "F", "G", "H"),
- array("I", "J", "K", "L"), array("M", "N", "O", "P")));
+$smarty->assign("Name", "Fred Irving Johnathan Bradley Peppergill", true);
+$smarty->assign("FirstName", array("John", "Mary", "James", "Henry"));
+$smarty->assign("LastName", array("Doe", "Smith", "Johnson", "Case"));
+$smarty->assign("Class", array(array("A", "B", "C", "D"), array("E", "F", "G", "H"),
+ array("I", "J", "K", "L"), array("M", "N", "O", "P")));
$smarty->assign("contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"),
- array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234")));
+ array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234")));
-$smarty->assign("option_values", array("NY","NE","KS","IA","OK","TX"));
-$smarty->assign("option_output", array("New York","Nebraska","Kansas","Iowa","Oklahoma","Texas"));
+$smarty->assign("option_values", array("NY", "NE", "KS", "IA", "OK", "TX"));
+$smarty->assign("option_output", array("New York", "Nebraska", "Kansas", "Iowa", "Oklahoma", "Texas"));
$smarty->assign("option_selected", "NE");
$smarty->display('index.tpl');
-?>
diff --git a/library/Smarty/demo/plugins/cacheresource.apc.php b/library/Smarty/demo/plugins/cacheresource.apc.php
index 00ba59817..d7336f2bf 100644
--- a/library/Smarty/demo/plugins/cacheresource.apc.php
+++ b/library/Smarty/demo/plugins/cacheresource.apc.php
@@ -2,19 +2,19 @@
/**
* APC CacheResource
- *
* CacheResource Implementation based on the KeyValueStore API to use
* memcache as the storage resource for Smarty's output caching.
* *
+ *
* @package CacheResource-examples
- * @author Uwe Tews
+ * @author Uwe Tews
*/
-class Smarty_CacheResource_Apc extends Smarty_CacheResource_KeyValueStore {
-
+class Smarty_CacheResource_Apc extends Smarty_CacheResource_KeyValueStore
+{
public function __construct()
{
// test if APC is present
- if(!function_exists('apc_cache_info')) {
+ if (!function_exists('apc_cache_info')) {
throw new Exception('APC Template Caching Error: APC is not installed');
}
}
@@ -22,8 +22,9 @@ class Smarty_CacheResource_Apc extends Smarty_CacheResource_KeyValueStore {
/**
* Read values for a set of keys from cache
*
- * @param array $keys list of keys to fetch
- * @return array list of values with the given keys used as indexes
+ * @param array $keys list of keys to fetch
+ *
+ * @return array list of values with the given keys used as indexes
* @return boolean true on success, false on failure
*/
protected function read(array $keys)
@@ -33,28 +34,32 @@ class Smarty_CacheResource_Apc extends Smarty_CacheResource_KeyValueStore {
foreach ($res as $k => $v) {
$_res[$k] = $v;
}
+
return $_res;
}
/**
* Save values for a set of keys to cache
*
- * @param array $keys list of values to save
- * @param int $expire expiration time
+ * @param array $keys list of values to save
+ * @param int $expire expiration time
+ *
* @return boolean true on success, false on failure
*/
- protected function write(array $keys, $expire=null)
+ protected function write(array $keys, $expire = null)
{
foreach ($keys as $k => $v) {
apc_store($k, $v, $expire);
}
+
return true;
}
/**
* Remove values from cache
*
- * @param array $keys list of keys to delete
+ * @param array $keys list of keys to delete
+ *
* @return boolean true on success, false on failure
*/
protected function delete(array $keys)
@@ -62,6 +67,7 @@ class Smarty_CacheResource_Apc extends Smarty_CacheResource_KeyValueStore {
foreach ($keys as $k) {
apc_delete($k);
}
+
return true;
}
diff --git a/library/Smarty/demo/plugins/cacheresource.memcache.php b/library/Smarty/demo/plugins/cacheresource.memcache.php
index 230607d69..e265365fb 100644
--- a/library/Smarty/demo/plugins/cacheresource.memcache.php
+++ b/library/Smarty/demo/plugins/cacheresource.memcache.php
@@ -2,34 +2,35 @@
/**
* Memcache CacheResource
- *
* CacheResource Implementation based on the KeyValueStore API to use
* memcache as the storage resource for Smarty's output caching.
- *
* Note that memcache has a limitation of 256 characters per cache-key.
* To avoid complications all cache-keys are translated to a sha1 hash.
*
* @package CacheResource-examples
- * @author Rodney Rehm
+ * @author Rodney Rehm
*/
-class Smarty_CacheResource_Memcache extends Smarty_CacheResource_KeyValueStore {
+class Smarty_CacheResource_Memcache extends Smarty_CacheResource_KeyValueStore
+{
/**
* memcache instance
+ *
* @var Memcache
*/
protected $memcache = null;
-
+
public function __construct()
{
$this->memcache = new Memcache();
- $this->memcache->addServer( '127.0.0.1', 11211 );
+ $this->memcache->addServer('127.0.0.1', 11211);
}
-
+
/**
* Read values for a set of keys from cache
*
- * @param array $keys list of keys to fetch
- * @return array list of values with the given keys used as indexes
+ * @param array $keys list of keys to fetch
+ *
+ * @return array list of values with the given keys used as indexes
* @return boolean true on success, false on failure
*/
protected function read(array $keys)
@@ -45,29 +46,33 @@ class Smarty_CacheResource_Memcache extends Smarty_CacheResource_KeyValueStore {
foreach ($res as $k => $v) {
$_res[$lookup[$k]] = $v;
}
+
return $_res;
}
-
+
/**
* Save values for a set of keys to cache
*
- * @param array $keys list of values to save
- * @param int $expire expiration time
+ * @param array $keys list of values to save
+ * @param int $expire expiration time
+ *
* @return boolean true on success, false on failure
*/
- protected function write(array $keys, $expire=null)
+ protected function write(array $keys, $expire = null)
{
foreach ($keys as $k => $v) {
$k = sha1($k);
$this->memcache->set($k, $v, 0, $expire);
}
+
return true;
}
/**
* Remove values from cache
*
- * @param array $keys list of keys to delete
+ * @param array $keys list of keys to delete
+ *
* @return boolean true on success, false on failure
*/
protected function delete(array $keys)
@@ -76,6 +81,7 @@ class Smarty_CacheResource_Memcache extends Smarty_CacheResource_KeyValueStore {
$k = sha1($k);
$this->memcache->delete($k);
}
+
return true;
}
@@ -86,6 +92,6 @@ class Smarty_CacheResource_Memcache extends Smarty_CacheResource_KeyValueStore {
*/
protected function purge()
{
- return $this->memcache->flush();
+ $this->memcache->flush();
}
}
diff --git a/library/Smarty/demo/plugins/cacheresource.mysql.php b/library/Smarty/demo/plugins/cacheresource.mysql.php
index ab8c47516..d8d00ab26 100644
--- a/library/Smarty/demo/plugins/cacheresource.mysql.php
+++ b/library/Smarty/demo/plugins/cacheresource.mysql.php
@@ -2,10 +2,8 @@
/**
* MySQL CacheResource
- *
* CacheResource Implementation based on the Custom API to use
* MySQL as the storage resource for Smarty's output caching.
- *
* Table definition:
* <pre>CREATE TABLE IF NOT EXISTS `output_cache` (
* `id` CHAR(40) NOT NULL COMMENT 'sha1 hash',
@@ -22,19 +20,22 @@
* ) ENGINE = InnoDB;</pre>
*
* @package CacheResource-examples
- * @author Rodney Rehm
+ * @author Rodney Rehm
*/
-class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom {
+class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom
+{
// PDO instance
protected $db;
protected $fetch;
protected $fetchTimestamp;
protected $save;
-
- public function __construct() {
+
+ public function __construct()
+ {
try {
- $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty", "smarty");
- } catch (PDOException $e) {
+ $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty");
+ }
+ catch (PDOException $e) {
throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
}
$this->fetch = $this->db->prepare('SELECT modified, content FROM output_cache WHERE id = :id');
@@ -46,19 +47,20 @@ class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom {
/**
* fetch cached content and its modification time from data source
*
- * @param string $id unique cache content identifier
- * @param string $name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param string $content cached content
- * @param integer $mtime cache modification timestamp (epoch)
+ * @param string $id unique cache content identifier
+ * @param string $name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param string $content cached content
+ * @param integer $mtime cache modification timestamp (epoch)
+ *
* @return void
*/
protected function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime)
{
$this->fetch->execute(array('id' => $id));
$row = $this->fetch->fetch();
- $this->fetch->closeCursor();
+ $this->fetch->closeCursor();
if ($row) {
$content = $row['content'];
$mtime = strtotime($row['modified']);
@@ -67,15 +69,17 @@ class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom {
$mtime = null;
}
}
-
+
/**
* Fetch cached content's modification timestamp from data source
*
* @note implementing this method is optional. Only implement it if modification times can be accessed faster than loading the complete cached content.
- * @param string $id unique cache content identifier
- * @param string $name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
+ *
+ * @param string $id unique cache content identifier
+ * @param string $name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ *
* @return integer|boolean timestamp (epoch) the template was modified, or false if not found
*/
protected function fetchTimestamp($id, $name, $cache_id, $compile_id)
@@ -83,40 +87,44 @@ class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom {
$this->fetchTimestamp->execute(array('id' => $id));
$mtime = strtotime($this->fetchTimestamp->fetchColumn());
$this->fetchTimestamp->closeCursor();
+
return $mtime;
}
-
+
/**
* Save content to cache
*
- * @param string $id unique cache content identifier
- * @param string $name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param integer|null $exp_time seconds till expiration time in seconds or null
- * @param string $content content to cache
- * @return boolean success
+ * @param string $id unique cache content identifier
+ * @param string $name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param integer|null $exp_time seconds till expiration time in seconds or null
+ * @param string $content content to cache
+ *
+ * @return boolean success
*/
protected function save($id, $name, $cache_id, $compile_id, $exp_time, $content)
{
$this->save->execute(array(
- 'id' => $id,
- 'name' => $name,
- 'cache_id' => $cache_id,
- 'compile_id' => $compile_id,
- 'content' => $content,
- ));
+ 'id' => $id,
+ 'name' => $name,
+ 'cache_id' => $cache_id,
+ 'compile_id' => $compile_id,
+ 'content' => $content,
+ ));
+
return !!$this->save->rowCount();
}
-
+
/**
* Delete content from cache
*
- * @param string $name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param integer|null $exp_time seconds till expiration or null
- * @return integer number of deleted caches
+ * @param string $name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param integer|null $exp_time seconds till expiration or null
+ *
+ * @return integer number of deleted caches
*/
protected function delete($name, $cache_id, $compile_id, $exp_time)
{
@@ -124,7 +132,8 @@ class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom {
if ($name === null && $cache_id === null && $compile_id === null && $exp_time === null) {
// returning the number of deleted caches would require a second query to count them
$query = $this->db->query('TRUNCATE TABLE output_cache');
- return -1;
+
+ return - 1;
}
// build the filter
$where = array();
@@ -142,11 +151,12 @@ class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom {
}
// equal test cache_id and match sub-groups
if ($cache_id !== null) {
- $where[] = '(cache_id = '. $this->db->quote($cache_id)
- . ' OR cache_id LIKE '. $this->db->quote($cache_id .'|%') .')';
+ $where[] = '(cache_id = ' . $this->db->quote($cache_id)
+ . ' OR cache_id LIKE ' . $this->db->quote($cache_id . '|%') . ')';
}
// run delete query
$query = $this->db->query('DELETE FROM output_cache WHERE ' . join(' AND ', $where));
+
return $query->rowCount();
}
}
diff --git a/library/Smarty/demo/plugins/resource.extendsall.php b/library/Smarty/demo/plugins/resource.extendsall.php
index d8c40b5ba..500b3c862 100644
--- a/library/Smarty/demo/plugins/resource.extendsall.php
+++ b/library/Smarty/demo/plugins/resource.extendsall.php
@@ -2,49 +2,51 @@
/**
* Extends All Resource
- *
* Resource Implementation modifying the extends-Resource to walk
* through the template_dirs and inherit all templates of the same name
- *
+ *
* @package Resource-examples
- * @author Rodney Rehm
+ * @author Rodney Rehm
*/
-class Smarty_Resource_Extendsall extends Smarty_Internal_Resource_Extends {
-
+class Smarty_Resource_Extendsall extends Smarty_Internal_Resource_Extends
+{
/**
* populate Source Object with meta data from Resource
*
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
+ * @param Smarty_Template_Source $source source object
+ * @param Smarty_Internal_Template $_template template object
+ *
* @return void
*/
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+ public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
{
$uid = '';
$sources = array();
$exists = true;
foreach ($_template->smarty->getTemplateDir() as $key => $directory) {
try {
- $s = Smarty_Resource::source(null, $source->smarty, '[' . $key . ']' . $source->name );
+ $s = Smarty_Resource::source(null, $source->smarty, '[' . $key . ']' . $source->name);
if (!$s->exists) {
continue;
}
$sources[$s->uid] = $s;
$uid .= $s->filepath;
}
- catch (SmartyException $e) {}
+ catch (SmartyException $e) {
+ }
}
-
+
if (!$sources) {
$source->exists = false;
$source->template = $_template;
+
return;
}
-
+
$sources = array_reverse($sources, true);
reset($sources);
$s = current($sources);
-
+
$source->components = $sources;
$source->filepath = $s->filepath;
$source->uid = sha1($uid);
@@ -55,6 +57,4 @@ class Smarty_Resource_Extendsall extends Smarty_Internal_Resource_Extends {
// need the template at getContent()
$source->template = $_template;
}
-}
-
-?> \ No newline at end of file
+}
diff --git a/library/Smarty/demo/plugins/resource.mysql.php b/library/Smarty/demo/plugins/resource.mysql.php
index 312f3fc73..dfc9606b4 100644
--- a/library/Smarty/demo/plugins/resource.mysql.php
+++ b/library/Smarty/demo/plugins/resource.mysql.php
@@ -2,10 +2,8 @@
/**
* MySQL Resource
- *
* Resource Implementation based on the Custom API to use
* MySQL as the storage resource for Smarty's templates and configs.
- *
* Table definition:
* <pre>CREATE TABLE IF NOT EXISTS `templates` (
* `name` varchar(100) NOT NULL,
@@ -13,14 +11,14 @@
* `source` text,
* PRIMARY KEY (`name`)
* ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre>
- *
* Demo data:
* <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');</pre>
*
* @package Resource-examples
- * @author Rodney Rehm
+ * @author Rodney Rehm
*/
-class Smarty_Resource_Mysql extends Smarty_Resource_Custom {
+class Smarty_Resource_Mysql extends Smarty_Resource_Custom
+{
// PDO instance
protected $db;
// prepared fetch() statement
@@ -28,22 +26,25 @@ class Smarty_Resource_Mysql extends Smarty_Resource_Custom {
// prepared fetchTimestamp() statement
protected $mtime;
- public function __construct() {
+ public function __construct()
+ {
try {
- $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty", "smarty");
- } catch (PDOException $e) {
+ $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty");
+ }
+ catch (PDOException $e) {
throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
}
$this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name');
$this->mtime = $this->db->prepare('SELECT modified FROM templates WHERE name = :name');
}
-
+
/**
* Fetch a template and its modification time from database
*
- * @param string $name template name
- * @param string $source template source
- * @param integer $mtime template modification timestamp (epoch)
+ * @param string $name template name
+ * @param string $source template source
+ * @param integer $mtime template modification timestamp (epoch)
+ *
* @return void
*/
protected function fetch($name, &$source, &$mtime)
@@ -59,18 +60,22 @@ class Smarty_Resource_Mysql extends Smarty_Resource_Custom {
$mtime = null;
}
}
-
+
/**
* Fetch a template's modification time from database
*
* @note implementing this method is optional. Only implement it if modification times can be accessed faster than loading the comple template source.
- * @param string $name template name
+ *
+ * @param string $name template name
+ *
* @return integer timestamp (epoch) the template was modified
*/
- protected function fetchTimestamp($name) {
+ protected function fetchTimestamp($name)
+ {
$this->mtime->execute(array('name' => $name));
$mtime = $this->mtime->fetchColumn();
$this->mtime->closeCursor();
+
return strtotime($mtime);
}
}
diff --git a/library/Smarty/demo/plugins/resource.mysqls.php b/library/Smarty/demo/plugins/resource.mysqls.php
index f9fe1c2f2..f694ddf11 100644
--- a/library/Smarty/demo/plugins/resource.mysqls.php
+++ b/library/Smarty/demo/plugins/resource.mysqls.php
@@ -2,13 +2,10 @@
/**
* MySQL Resource
- *
* Resource Implementation based on the Custom API to use
* MySQL as the storage resource for Smarty's templates and configs.
- *
* Note that this MySQL implementation fetches the source and timestamps in
- * a single database query, instead of two seperate like resource.mysql.php does.
- *
+ * a single database query, instead of two separate like resource.mysql.php does.
* Table definition:
* <pre>CREATE TABLE IF NOT EXISTS `templates` (
* `name` varchar(100) NOT NULL,
@@ -16,34 +13,37 @@
* `source` text,
* PRIMARY KEY (`name`)
* ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre>
- *
* Demo data:
* <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');</pre>
*
* @package Resource-examples
- * @author Rodney Rehm
+ * @author Rodney Rehm
*/
-class Smarty_Resource_Mysqls extends Smarty_Resource_Custom {
+class Smarty_Resource_Mysqls extends Smarty_Resource_Custom
+{
// PDO instance
protected $db;
// prepared fetch() statement
protected $fetch;
- public function __construct() {
+ public function __construct()
+ {
try {
- $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty", "smarty");
- } catch (PDOException $e) {
+ $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty");
+ }
+ catch (PDOException $e) {
throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
}
$this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name');
}
-
+
/**
* Fetch a template and its modification time from database
*
- * @param string $name template name
- * @param string $source template source
- * @param integer $mtime template modification timestamp (epoch)
+ * @param string $name template name
+ * @param string $source template source
+ * @param integer $mtime template modification timestamp (epoch)
+ *
* @return void
*/
protected function fetch($name, &$source, &$mtime)
diff --git a/library/Smarty/demo/templates/header.tpl b/library/Smarty/demo/templates/header.tpl
index 783210a18..13fa6cb5a 100644
--- a/library/Smarty/demo/templates/header.tpl
+++ b/library/Smarty/demo/templates/header.tpl
@@ -1,5 +1,5 @@
<HTML>
<HEAD>
-<TITLE>{$title} - {$Name}</TITLE>
+ <TITLE>{$title} - {$Name}</TITLE>
</HEAD>
<BODY bgcolor="#ffffff">
diff --git a/library/Smarty/demo/templates/index.tpl b/library/Smarty/demo/templates/index.tpl
index 38d233412..1fbb6d379 100644
--- a/library/Smarty/demo/templates/index.tpl
+++ b/library/Smarty/demo/templates/index.tpl
@@ -4,18 +4,18 @@
<PRE>
{* bold and title are read from the config file *}
-{if #bold#}<b>{/if}
-{* capitalize the first letters of each word of the title *}
-Title: {#title#|capitalize}
-{if #bold#}</b>{/if}
+ {if #bold#}<b>{/if}
+ {* capitalize the first letters of each word of the title *}
+ Title: {#title#|capitalize}
+ {if #bold#}</b>{/if}
-The current date and time is {$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}
+ The current date and time is {$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}
-The value of global assigned variable $SCRIPT_NAME is {$SCRIPT_NAME}
+ The value of global assigned variable $SCRIPT_NAME is {$SCRIPT_NAME}
-Example of accessing server environment variable SERVER_NAME: {$smarty.server.SERVER_NAME}
+ Example of accessing server environment variable SERVER_NAME: {$smarty.server.SERVER_NAME}
-The value of {ldelim}$Name{rdelim} is <b>{$Name}</b>
+ The value of {ldelim}$Name{rdelim} is <b>{$Name}</b>
variable modifier example of {ldelim}$Name|upper{rdelim}
@@ -24,59 +24,64 @@ variable modifier example of {ldelim}$Name|upper{rdelim}
An example of a section loop:
-{section name=outer
-loop=$FirstName}
-{if $smarty.section.outer.index is odd by 2}
- {$smarty.section.outer.rownum} . {$FirstName[outer]} {$LastName[outer]}
-{else}
- {$smarty.section.outer.rownum} * {$FirstName[outer]} {$LastName[outer]}
-{/if}
-{sectionelse}
- none
-{/section}
-
-An example of section looped key values:
-
-{section name=sec1 loop=$contacts}
- phone: {$contacts[sec1].phone}<br>
- fax: {$contacts[sec1].fax}<br>
- cell: {$contacts[sec1].cell}<br>
-{/section}
-<p>
-
-testing strip tags
-{strip}
+ {section name=outer
+ loop=$FirstName}
+ {if $smarty.section.outer.index is odd by 2}
+ {$smarty.section.outer.rownum} . {$FirstName[outer]} {$LastName[outer]}
+ {else}
+ {$smarty.section.outer.rownum} * {$FirstName[outer]} {$LastName[outer]}
+ {/if}
+ {sectionelse}
+ none
+ {/section}
+
+ An example of section looped key values:
+
+ {section name=sec1 loop=$contacts}
+ phone: {$contacts[sec1].phone}
+ <br>
+
+ fax: {$contacts[sec1].fax}
+ <br>
+
+ cell: {$contacts[sec1].cell}
+ <br>
+ {/section}
+ <p>
+
+ testing strip tags
+ {strip}
<table border=0>
- <tr>
- <td>
- <A HREF="{$SCRIPT_NAME}">
- <font color="red">This is a test </font>
- </A>
- </td>
- </tr>
+ <tr>
+ <td>
+ <A HREF="{$SCRIPT_NAME}">
+ <font color="red">This is a test </font>
+ </A>
+ </td>
+ </tr>
</table>
-{/strip}
+ {/strip}
</PRE>
This is an example of the html_select_date function:
<form>
-{html_select_date start_year=1998 end_year=2010}
+ {html_select_date start_year=1998 end_year=2010}
</form>
This is an example of the html_select_time function:
<form>
-{html_select_time use_24_hours=false}
+ {html_select_time use_24_hours=false}
</form>
This is an example of the html_options function:
<form>
-<select name=states>
-{html_options values=$option_values selected=$option_selected output=$option_output}
-</select>
+ <select name=states>
+ {html_options values=$option_values selected=$option_selected output=$option_output}
+ </select>
</form>
{include file="footer.tpl"}
diff --git a/library/Smarty/libs/Smarty.class.php b/library/Smarty/libs/Smarty.class.php
index f776aaf7c..832b0d309 100644
--- a/library/Smarty/libs/Smarty.class.php
+++ b/library/Smarty/libs/Smarty.class.php
@@ -2,33 +2,29 @@
/**
* Project: Smarty: the PHP compiling template engine
* File: Smarty.class.php
- * SVN: $Id: Smarty.class.php 4614 2012-05-24 15:13:19Z rodneyrehm $
- *
+ * SVN: $Id: Smarty.class.php 4897 2014-10-14 22:29:58Z Uwe.Tews@googlemail.com $
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
- *
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
- *
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
* For questions, help, comments, discussion, etc., please join the
* Smarty mailing list. Send a blank e-mail to
* smarty-discussion-subscribe@googlegroups.com
*
- * @link http://www.smarty.net/
+ * @link http://www.smarty.net/
* @copyright 2008 New Digital Group, Inc.
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author Uwe Tews
- * @author Rodney Rehm
- * @package Smarty
- * @version 3.1-DEV
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author Uwe Tews
+ * @author Rodney Rehm
+ * @package Smarty
+ * @version 3.1.21
*/
/**
@@ -57,7 +53,7 @@ if (!defined('SMARTY_PLUGINS_DIR')) {
define('SMARTY_PLUGINS_DIR', SMARTY_DIR . 'plugins' . DS);
}
if (!defined('SMARTY_MBSTRING')) {
- define('SMARTY_MBSTRING', function_exists('mb_strlen'));
+ define('SMARTY_MBSTRING', function_exists('mb_split'));
}
if (!defined('SMARTY_RESOURCE_CHAR_SET')) {
// UTF-8 can only be done properly when mbstring is available!
@@ -92,20 +88,21 @@ if (SMARTY_SPL_AUTOLOAD && set_include_path(get_include_path() . PATH_SEPARATOR
/**
* Load always needed external class files
*/
-include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_data.php';
-include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_templatebase.php';
-include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_template.php';
-include_once SMARTY_SYSPLUGINS_DIR.'smarty_resource.php';
-include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_resource_file.php';
-include_once SMARTY_SYSPLUGINS_DIR.'smarty_cacheresource.php';
-include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_cacheresource_file.php';
+include_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_data.php';
+include_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_templatebase.php';
+include_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_template.php';
+include_once SMARTY_SYSPLUGINS_DIR . 'smarty_resource.php';
+include_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_resource_file.php';
+include_once SMARTY_SYSPLUGINS_DIR . 'smarty_cacheresource.php';
+include_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_cacheresource_file.php';
/**
* This is the main Smarty class
+ *
* @package Smarty
*/
-class Smarty extends Smarty_Internal_TemplateBase {
-
+class Smarty extends Smarty_Internal_TemplateBase
+{
/**#@+
* constant definitions
*/
@@ -113,7 +110,7 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**
* smarty version
*/
- const SMARTY_VERSION = 'Smarty-3.1.11';
+ const SMARTY_VERSION = 'Smarty-3.1.21-dev';
/**
* define variable scopes
@@ -129,6 +126,11 @@ class Smarty extends Smarty_Internal_TemplateBase {
const CACHING_LIFETIME_CURRENT = 1;
const CACHING_LIFETIME_SAVED = 2;
/**
+ * define constant for clearing cache files be saved expiration datees
+ */
+ const CLEAR_EXPIRED = - 1;
+
+ /**
* define compile check modes
*/
const COMPILECHECK_OFF = 0;
@@ -189,118 +191,145 @@ class Smarty extends Smarty_Internal_TemplateBase {
* Flag denoting if PCRE should run in UTF-8 mode
*/
public static $_UTF8_MODIFIER = 'u';
-
+
/**
* Flag denoting if operating system is windows
*/
public static $_IS_WINDOWS = false;
-
+
/**#@+
* variables
*/
/**
* auto literal on delimiters with whitspace
+ *
* @var boolean
*/
public $auto_literal = true;
/**
* display error on not assigned variables
+ *
* @var boolean
*/
public $error_unassigned = false;
/**
* look up relative filepaths in include_path
+ *
* @var boolean
*/
public $use_include_path = false;
/**
* template directory
+ *
* @var array
*/
private $template_dir = array();
/**
* joined template directory string used in cache keys
+ *
* @var string
*/
public $joined_template_dir = null;
/**
* joined config directory string used in cache keys
+ *
* @var string
*/
public $joined_config_dir = null;
/**
* default template handler
+ *
* @var callable
*/
public $default_template_handler_func = null;
/**
* default config handler
+ *
* @var callable
*/
public $default_config_handler_func = null;
/**
* default plugin handler
+ *
* @var callable
*/
public $default_plugin_handler_func = null;
/**
* compile directory
+ *
* @var string
*/
private $compile_dir = null;
/**
* plugins directory
+ *
* @var array
*/
private $plugins_dir = array();
/**
* cache directory
+ *
* @var string
*/
private $cache_dir = null;
/**
* config directory
+ *
* @var array
*/
private $config_dir = array();
/**
* force template compiling?
+ *
* @var boolean
*/
public $force_compile = false;
/**
* check template for modifications?
+ *
* @var boolean
*/
public $compile_check = true;
/**
* use sub dirs for compiled/cached files?
+ *
* @var boolean
*/
public $use_sub_dirs = false;
/**
* allow ambiguous resources (that are made unique by the resource handler)
+ *
* @var boolean
*/
public $allow_ambiguous_resources = false;
/**
* caching enabled
+ *
* @var boolean
*/
public $caching = false;
/**
* merge compiled includes
+ *
* @var boolean
*/
public $merge_compiled_includes = false;
/**
+ * template inheritance merge compiled includes
+ *
+ * @var boolean
+ */
+ public $inheritance_merge_compiled_includes = true;
+ /**
* cache lifetime in seconds
+ *
* @var integer
*/
public $cache_lifetime = 3600;
/**
* force cache file creation
+ *
* @var boolean
*/
public $force_cache = false;
@@ -320,11 +349,13 @@ class Smarty extends Smarty_Internal_TemplateBase {
public $compile_id = null;
/**
* template left-delimiter
+ *
* @var string
*/
public $left_delimiter = "{";
/**
* template right-delimiter
+ *
* @var string
*/
public $right_delimiter = "}";
@@ -333,7 +364,6 @@ class Smarty extends Smarty_Internal_TemplateBase {
*/
/**
* class name
- *
* This should be instance of Smarty_Security.
*
* @var string
@@ -360,7 +390,6 @@ class Smarty extends Smarty_Internal_TemplateBase {
public $allow_php_templates = false;
/**
* Should compiled-templates be prevented from being called directly?
- *
* {@internal
* Currently used by Smarty_Internal_Template only.
* }}
@@ -371,7 +400,6 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**#@-*/
/**
* debug mode
- *
* Setting this to true enables the debug-console.
*
* @var boolean
@@ -383,12 +411,12 @@ class Smarty extends Smarty_Internal_TemplateBase {
* <li>NONE => no debugging control allowed</li>
* <li>URL => enable debugging when SMARTY_DEBUG is found in the URL.</li>
* </ul>
+ *
* @var string
*/
public $debugging_ctrl = 'NONE';
/**
* Name of debugging URL-param.
- *
* Only used when $debugging_ctrl is set to 'URL'.
* The name of the URL-parameter that activates debugging.
*
@@ -397,16 +425,19 @@ class Smarty extends Smarty_Internal_TemplateBase {
public $smarty_debug_id = 'SMARTY_DEBUG';
/**
* Path of debug template.
+ *
* @var string
*/
public $debug_tpl = null;
/**
* When set, smarty uses this value as error_reporting-level.
+ *
* @var int
*/
public $error_reporting = null;
/**
* Internal flag for getTags()
+ *
* @var boolean
*/
public $get_used_tags = false;
@@ -417,16 +448,19 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**
* Controls whether variables with the same name overwrite each other.
+ *
* @var boolean
*/
public $config_overwrite = true;
/**
* Controls whether config values of on/true/yes and off/false/no get converted to boolean.
+ *
* @var boolean
*/
public $config_booleanize = true;
/**
* Controls whether hidden config sections/vars are read from the file.
+ *
* @var boolean
*/
public $config_read_hidden = false;
@@ -439,16 +473,19 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**
* locking concurrent compiles
+ *
* @var boolean
*/
public $compile_locking = true;
/**
* Controls whether cache resources should emply locking mechanism
+ *
* @var boolean
*/
public $cache_locking = false;
/**
* seconds to wait for acquiring a lock before ignoring the write lock
+ *
* @var float
*/
public $locking_timeout = 10;
@@ -457,19 +494,19 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**
* global template functions
+ *
* @var array
*/
public $template_functions = array();
/**
* resource type used if none given
- *
* Must be an valid key of $registered_resources.
+ *
* @var string
*/
public $default_resource_type = 'file';
/**
* caching type
- *
* Must be an element of $cache_resource_types.
*
* @var string
@@ -477,121 +514,145 @@ class Smarty extends Smarty_Internal_TemplateBase {
public $caching_type = 'file';
/**
* internal config properties
+ *
* @var array
*/
public $properties = array();
/**
* config type
+ *
* @var string
*/
public $default_config_type = 'file';
/**
* cached template objects
+ *
* @var array
*/
public $template_objects = array();
/**
* check If-Modified-Since headers
+ *
* @var boolean
*/
public $cache_modified_check = false;
/**
* registered plugins
+ *
* @var array
*/
public $registered_plugins = array();
/**
* plugin search order
+ *
* @var array
*/
public $plugin_search_order = array('function', 'block', 'compiler', 'class');
/**
* registered objects
+ *
* @var array
*/
public $registered_objects = array();
/**
* registered classes
+ *
* @var array
*/
public $registered_classes = array();
/**
* registered filters
+ *
* @var array
*/
public $registered_filters = array();
/**
* registered resources
+ *
* @var array
*/
public $registered_resources = array();
/**
* resource handler cache
+ *
* @var array
*/
public $_resource_handlers = array();
/**
* registered cache resources
+ *
* @var array
*/
public $registered_cache_resources = array();
/**
* cache resource handler cache
+ *
* @var array
*/
public $_cacheresource_handlers = array();
/**
* autoload filter
+ *
* @var array
*/
public $autoload_filters = array();
/**
* default modifier
+ *
* @var array
*/
public $default_modifiers = array();
/**
* autoescape variable output
+ *
* @var boolean
*/
public $escape_html = false;
/**
* global internal smarty vars
+ *
* @var array
*/
public static $_smarty_vars = array();
/**
* start time for execution time calculation
+ *
* @var int
*/
public $start_time = 0;
/**
* default file permissions
+ *
* @var int
*/
public $_file_perms = 0644;
/**
* default dir permissions
+ *
* @var int
*/
public $_dir_perms = 0771;
/**
* block tag hierarchy
+ *
* @var array
*/
public $_tag_stack = array();
/**
* self pointer to Smarty object
+ *
* @var Smarty
*/
public $smarty;
/**
* required by the compiler for BC
+ *
* @var string
*/
public $_current_file = null;
/**
* internal flag to enable parser debugging
+ *
* @var bool
*/
public $_parserdebug = false;
@@ -601,11 +662,19 @@ class Smarty extends Smarty_Internal_TemplateBase {
* @var array
*/
public $merged_templates_func = array();
+
+ /**
+ * Cache of is_file results of loadPlugin()
+ *
+ * @var array
+ */
+ public static $_is_file_cache= array();
+
/**#@-*/
/**
* Initialize new Smarty object
- *
+
*/
public function __construct()
{
@@ -628,7 +697,6 @@ class Smarty extends Smarty_Internal_TemplateBase {
}
}
-
/**
* Class destructor
*/
@@ -645,36 +713,34 @@ class Smarty extends Smarty_Internal_TemplateBase {
$this->smarty = $this;
}
-
/**
* <<magic>> Generic getter.
- *
* Calls the appropriate getter function.
* Issues an E_USER_NOTICE if no valid getter is found.
*
- * @param string $name property name
+ * @param string $name property name
+ *
* @return mixed
*/
public function __get($name)
{
$allowed = array(
- 'template_dir' => 'getTemplateDir',
- 'config_dir' => 'getConfigDir',
- 'plugins_dir' => 'getPluginsDir',
- 'compile_dir' => 'getCompileDir',
- 'cache_dir' => 'getCacheDir',
+ 'template_dir' => 'getTemplateDir',
+ 'config_dir' => 'getConfigDir',
+ 'plugins_dir' => 'getPluginsDir',
+ 'compile_dir' => 'getCompileDir',
+ 'cache_dir' => 'getCacheDir',
);
if (isset($allowed[$name])) {
return $this->{$allowed[$name]}();
} else {
- trigger_error('Undefined property: '. get_class($this) .'::$'. $name, E_USER_NOTICE);
+ trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE);
}
}
/**
* <<magic>> Generic setter.
- *
* Calls the appropriate setter function.
* Issues an E_USER_NOTICE if no valid setter is found.
*
@@ -684,11 +750,11 @@ class Smarty extends Smarty_Internal_TemplateBase {
public function __set($name, $value)
{
$allowed = array(
- 'template_dir' => 'setTemplateDir',
- 'config_dir' => 'setConfigDir',
- 'plugins_dir' => 'setPluginsDir',
- 'compile_dir' => 'setCompileDir',
- 'cache_dir' => 'setCacheDir',
+ 'template_dir' => 'setTemplateDir',
+ 'config_dir' => 'setConfigDir',
+ 'plugins_dir' => 'setPluginsDir',
+ 'compile_dir' => 'setCompileDir',
+ 'cache_dir' => 'setCacheDir',
);
if (isset($allowed[$name])) {
@@ -701,7 +767,8 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**
* Check if a template resource exists
*
- * @param string $resource_name template name
+ * @param string $resource_name template name
+ *
* @return boolean status
*/
public function templateExists($resource_name)
@@ -712,14 +779,15 @@ class Smarty extends Smarty_Internal_TemplateBase {
// check if it does exists
$result = $tpl->source->exists;
$this->template_objects = $save;
+
return $result;
}
/**
* Returns a single or all global variables
*
- * @param object $smarty
- * @param string $varname variable name or null
+ * @param string $varname variable name or null
+ *
* @return string variable value or or array of variables
*/
public function getGlobal($varname = null)
@@ -735,6 +803,7 @@ class Smarty extends Smarty_Internal_TemplateBase {
foreach (self::$global_tpl_vars AS $key => $var) {
$_result[$key] = $var->value;
}
+
return $_result;
}
}
@@ -742,26 +811,29 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**
* Empty cache folder
*
- * @param integer $exp_time expiration time
- * @param string $type resource type
+ * @param integer $exp_time expiration time
+ * @param string $type resource type
+ *
* @return integer number of cache files deleted
*/
- function clearAllCache($exp_time = null, $type = null)
+ public function clearAllCache($exp_time = null, $type = null)
{
// load cache resource and call clearAll
$_cache_resource = Smarty_CacheResource::load($this, $type);
Smarty_CacheResource::invalidLoadedCache($this);
+
return $_cache_resource->clearAll($this, $exp_time);
}
/**
* Empty cache for a specific template
*
- * @param string $template_name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param integer $exp_time expiration time
- * @param string $type resource type
+ * @param string $template_name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param integer $exp_time expiration time
+ * @param string $type resource type
+ *
* @return integer number of cache files deleted
*/
public function clearCache($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null)
@@ -769,20 +841,23 @@ class Smarty extends Smarty_Internal_TemplateBase {
// load cache resource and call clear
$_cache_resource = Smarty_CacheResource::load($this, $type);
Smarty_CacheResource::invalidLoadedCache($this);
+
return $_cache_resource->clear($this, $template_name, $cache_id, $compile_id, $exp_time);
}
/**
* Loads security class and enables security
*
- * @param string|Smarty_Security $security_class if a string is used, it must be class-name
- * @return Smarty current Smarty instance for chaining
- * @throws SmartyException when an invalid class name is provided
+ * @param string|Smarty_Security $security_class if a string is used, it must be class-name
+ *
+ * @return Smarty current Smarty instance for chaining
+ * @throws SmartyException when an invalid class name is provided
*/
public function enableSecurity($security_class = null)
{
if ($security_class instanceof Smarty_Security) {
$this->security_policy = $security_class;
+
return $this;
} elseif (is_object($security_class)) {
throw new SmartyException("Class '" . get_class($security_class) . "' must extend Smarty_Security.");
@@ -803,6 +878,7 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**
* Disable security
+ *
* @return Smarty current Smarty instance for chaining
*/
public function disableSecurity()
@@ -815,145 +891,164 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**
* Set template directory
*
- * @param string|array $template_dir directory(s) of template sources
- * @return Smarty current Smarty instance for chaining
+ * @param string|array $template_dir directory(s) of template sources
+ *
+ * @return Smarty current Smarty instance for chaining
*/
public function setTemplateDir($template_dir)
{
$this->template_dir = array();
foreach ((array) $template_dir as $k => $v) {
- $this->template_dir[$k] = rtrim($v, '/\\') . DS;
+ $this->template_dir[$k] = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($v, '/\\')) . DS;
}
$this->joined_template_dir = join(DIRECTORY_SEPARATOR, $this->template_dir);
+
return $this;
}
/**
* Add template directory(s)
*
- * @param string|array $template_dir directory(s) of template sources
- * @param string $key of the array element to assign the template dir to
- * @return Smarty current Smarty instance for chaining
+ * @param string|array $template_dir directory(s) of template sources
+ * @param string $key of the array element to assign the template dir to
+ *
+ * @return Smarty current Smarty instance for chaining
* @throws SmartyException when the given template directory is not valid
*/
- public function addTemplateDir($template_dir, $key=null)
+ public function addTemplateDir($template_dir, $key = null)
{
// make sure we're dealing with an array
$this->template_dir = (array) $this->template_dir;
if (is_array($template_dir)) {
foreach ($template_dir as $k => $v) {
+ $v = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($v, '/\\')) . DS;
if (is_int($k)) {
// indexes are not merged but appended
- $this->template_dir[] = rtrim($v, '/\\') . DS;
+ $this->template_dir[] = $v;
} else {
// string indexes are overridden
- $this->template_dir[$k] = rtrim($v, '/\\') . DS;
+ $this->template_dir[$k] = $v;
}
}
- } elseif ($key !== null) {
- // override directory at specified index
- $this->template_dir[$key] = rtrim($template_dir, '/\\') . DS;
} else {
- // append new directory
- $this->template_dir[] = rtrim($template_dir, '/\\') . DS;
+ $v = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($template_dir, '/\\')) . DS;
+ if ($key !== null) {
+ // override directory at specified index
+ $this->template_dir[$key] = $v;
+ } else {
+ // append new directory
+ $this->template_dir[] = $v;
+ }
}
$this->joined_template_dir = join(DIRECTORY_SEPARATOR, $this->template_dir);
+
return $this;
}
/**
* Get template directories
*
- * @param mixed index of directory to get, null to get all
+ * @param mixed $index index of directory to get, null to get all
+ *
* @return array|string list of template directories, or directory of $index
*/
- public function getTemplateDir($index=null)
+ public function getTemplateDir($index = null)
{
if ($index !== null) {
return isset($this->template_dir[$index]) ? $this->template_dir[$index] : null;
}
- return (array)$this->template_dir;
+ return (array) $this->template_dir;
}
/**
* Set config directory
*
- * @param string|array $template_dir directory(s) of configuration sources
- * @return Smarty current Smarty instance for chaining
+ * @param $config_dir
+ *
+ * @return Smarty current Smarty instance for chaining
*/
public function setConfigDir($config_dir)
{
$this->config_dir = array();
foreach ((array) $config_dir as $k => $v) {
- $this->config_dir[$k] = rtrim($v, '/\\') . DS;
+ $this->config_dir[$k] = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($v, '/\\')) . DS;
}
$this->joined_config_dir = join(DIRECTORY_SEPARATOR, $this->config_dir);
+
return $this;
}
/**
* Add config directory(s)
*
- * @param string|array $config_dir directory(s) of config sources
- * @param string key of the array element to assign the config dir to
+ * @param string|array $config_dir directory(s) of config sources
+ * @param mixed $key key of the array element to assign the config dir to
+ *
* @return Smarty current Smarty instance for chaining
*/
- public function addConfigDir($config_dir, $key=null)
+ public function addConfigDir($config_dir, $key = null)
{
// make sure we're dealing with an array
$this->config_dir = (array) $this->config_dir;
if (is_array($config_dir)) {
foreach ($config_dir as $k => $v) {
+ $v = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($v, '/\\')) . DS;
if (is_int($k)) {
// indexes are not merged but appended
- $this->config_dir[] = rtrim($v, '/\\') . DS;
+ $this->config_dir[] = $v;
} else {
// string indexes are overridden
- $this->config_dir[$k] = rtrim($v, '/\\') . DS;
+ $this->config_dir[$k] = $v;
}
}
- } elseif( $key !== null ) {
- // override directory at specified index
- $this->config_dir[$key] = rtrim($config_dir, '/\\') . DS;
} else {
- // append new directory
- $this->config_dir[] = rtrim($config_dir, '/\\') . DS;
+ $v = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($config_dir, '/\\')) . DS;
+ if ($key !== null) {
+ // override directory at specified index
+ $this->config_dir[$key] = rtrim($v, '/\\') . DS;
+ } else {
+ // append new directory
+ $this->config_dir[] = rtrim($v, '/\\') . DS;
+ }
}
$this->joined_config_dir = join(DIRECTORY_SEPARATOR, $this->config_dir);
+
return $this;
}
/**
* Get config directory
*
- * @param mixed index of directory to get, null to get all
+ * @param mixed $index index of directory to get, null to get all
+ *
* @return array|string configuration directory
*/
- public function getConfigDir($index=null)
+ public function getConfigDir($index = null)
{
if ($index !== null) {
return isset($this->config_dir[$index]) ? $this->config_dir[$index] : null;
}
- return (array)$this->config_dir;
+ return (array) $this->config_dir;
}
/**
* Set plugins directory
*
- * @param string|array $plugins_dir directory(s) of plugins
- * @return Smarty current Smarty instance for chaining
+ * @param string|array $plugins_dir directory(s) of plugins
+ *
+ * @return Smarty current Smarty instance for chaining
*/
public function setPluginsDir($plugins_dir)
{
$this->plugins_dir = array();
- foreach ((array)$plugins_dir as $k => $v) {
+ foreach ((array) $plugins_dir as $k => $v) {
$this->plugins_dir[$k] = rtrim($v, '/\\') . DS;
}
@@ -963,8 +1058,8 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**
* Adds directory of plugin files
*
- * @param object $smarty
- * @param string $ |array $ plugins folder
+ * @param $plugins_dir
+ *
* @return Smarty current Smarty instance for chaining
*/
public function addPluginsDir($plugins_dir)
@@ -988,6 +1083,7 @@ class Smarty extends Smarty_Internal_TemplateBase {
}
$this->plugins_dir = array_unique($this->plugins_dir);
+
return $this;
}
@@ -998,13 +1094,14 @@ class Smarty extends Smarty_Internal_TemplateBase {
*/
public function getPluginsDir()
{
- return (array)$this->plugins_dir;
+ return (array) $this->plugins_dir;
}
/**
* Set compile directory
*
- * @param string $compile_dir directory to store compiled templates in
+ * @param string $compile_dir directory to store compiled templates in
+ *
* @return Smarty current Smarty instance for chaining
*/
public function setCompileDir($compile_dir)
@@ -1013,6 +1110,7 @@ class Smarty extends Smarty_Internal_TemplateBase {
if (!isset(Smarty::$_muted_directories[$this->compile_dir])) {
Smarty::$_muted_directories[$this->compile_dir] = null;
}
+
return $this;
}
@@ -1029,7 +1127,8 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**
* Set cache directory
*
- * @param string $cache_dir directory to store cached templates in
+ * @param string $cache_dir directory to store cached templates in
+ *
* @return Smarty current Smarty instance for chaining
*/
public function setCacheDir($cache_dir)
@@ -1038,6 +1137,7 @@ class Smarty extends Smarty_Internal_TemplateBase {
if (!isset(Smarty::$_muted_directories[$this->cache_dir])) {
Smarty::$_muted_directories[$this->cache_dir] = null;
}
+
return $this;
}
@@ -1054,20 +1154,23 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**
* Set default modifiers
*
- * @param array|string $modifiers modifier or list of modifiers to set
- * @return Smarty current Smarty instance for chaining
+ * @param array|string $modifiers modifier or list of modifiers to set
+ *
+ * @return Smarty current Smarty instance for chaining
*/
public function setDefaultModifiers($modifiers)
{
$this->default_modifiers = (array) $modifiers;
+
return $this;
}
/**
* Add default modifiers
*
- * @param array|string $modifiers modifier or list of modifiers to add
- * @return Smarty current Smarty instance for chaining
+ * @param array|string $modifiers modifier or list of modifiers to add
+ *
+ * @return Smarty current Smarty instance for chaining
*/
public function addDefaultModifiers($modifiers)
{
@@ -1090,15 +1193,15 @@ class Smarty extends Smarty_Internal_TemplateBase {
return $this->default_modifiers;
}
-
/**
* Set autoload filters
*
- * @param array $filters filters to load automatically
- * @param string $type "pre", "output", … specify the filter type to set. Defaults to none treating $filters' keys as the appropriate types
+ * @param array $filters filters to load automatically
+ * @param string $type "pre", "output", … specify the filter type to set. Defaults to none treating $filters' keys as the appropriate types
+ *
* @return Smarty current Smarty instance for chaining
*/
- public function setAutoloadFilters($filters, $type=null)
+ public function setAutoloadFilters($filters, $type = null)
{
if ($type !== null) {
$this->autoload_filters[$type] = (array) $filters;
@@ -1112,11 +1215,12 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**
* Add autoload filters
*
- * @param array $filters filters to load automatically
- * @param string $type "pre", "output", … specify the filter type to set. Defaults to none treating $filters' keys as the appropriate types
+ * @param array $filters filters to load automatically
+ * @param string $type "pre", "output", … specify the filter type to set. Defaults to none treating $filters' keys as the appropriate types
+ *
* @return Smarty current Smarty instance for chaining
*/
- public function addAutoloadFilters($filters, $type=null)
+ public function addAutoloadFilters($filters, $type = null)
{
if ($type !== null) {
if (!empty($this->autoload_filters[$type])) {
@@ -1140,10 +1244,11 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**
* Get autoload filters
*
- * @param string $type type of filter to get autoloads for. Defaults to all autoload filters
- * @return array array( 'type1' => array( 'filter1', 'filter2', … ) ) or array( 'filter1', 'filter2', …) if $type was specified
+ * @param string $type type of filter to get autoloads for. Defaults to all autoload filters
+ *
+ * @return array array( 'type1' => array( 'filter1', 'filter2', … ) ) or array( 'filter1', 'filter2', …) if $type was specified
*/
- public function getAutoloadFilters($type=null)
+ public function getAutoloadFilters($type = null)
{
if ($type !== null) {
return isset($this->autoload_filters[$type]) ? $this->autoload_filters[$type] : array();
@@ -1165,8 +1270,9 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**
* set the debug template
*
- * @param string $tpl_name
- * @return Smarty current Smarty instance for chaining
+ * @param string $tpl_name
+ *
+ * @return Smarty current Smarty instance for chaining
* @throws SmartyException if file is not readable
*/
public function setDebugTemplate($tpl_name)
@@ -1182,20 +1288,21 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**
* creates a template object
*
- * @param string $template the resource handle of the template file
- * @param mixed $cache_id cache id to be used with this template
- * @param mixed $compile_id compile id to be used with this template
- * @param object $parent next higher level of Smarty variables
- * @param boolean $do_clone flag is Smarty object shall be cloned
- * @return object template object
+ * @param string $template the resource handle of the template file
+ * @param mixed $cache_id cache id to be used with this template
+ * @param mixed $compile_id compile id to be used with this template
+ * @param object $parent next higher level of Smarty variables
+ * @param boolean $do_clone flag is Smarty object shall be cloned
+ *
+ * @return object template object
*/
public function createTemplate($template, $cache_id = null, $compile_id = null, $parent = null, $do_clone = true)
{
- if (!empty($cache_id) && (is_object($cache_id) || is_array($cache_id))) {
+ if ($cache_id !== null && (is_object($cache_id) || is_array($cache_id))) {
$parent = $cache_id;
$cache_id = null;
}
- if (!empty($parent) && is_array($parent)) {
+ if ($parent !== null && is_array($parent)) {
$data = $parent;
$parent = null;
} else {
@@ -1242,17 +1349,19 @@ class Smarty extends Smarty_Internal_TemplateBase {
$tpl->tpl_vars[$_key] = new Smarty_variable($_val);
}
}
+
return $tpl;
}
-
/**
* Takes unknown classes and loads plugin files for them
* class name format: Smarty_PluginType_PluginName
* plugin filename format: plugintype.pluginname.php
*
- * @param string $plugin_name class plugin name to load
- * @param bool $check check if already loaded
+ * @param string $plugin_name class plugin name to load
+ * @param bool $check check if already loaded
+ *
+ * @throws SmartyException
* @return string |boolean filepath of loaded file or false
*/
public function loadPlugin($plugin_name, $check = true)
@@ -1267,12 +1376,11 @@ class Smarty extends Smarty_Internal_TemplateBase {
// count($_name_parts) < 3 === !isset($_name_parts[2])
if (!isset($_name_parts[2]) || strtolower($_name_parts[0]) !== 'smarty') {
throw new SmartyException("plugin {$plugin_name} is not a valid name format");
- return false;
}
// if type is "internal", get plugin from sysplugins
if (strtolower($_name_parts[1]) == 'internal') {
$file = SMARTY_SYSPLUGINS_DIR . strtolower($plugin_name) . '.php';
- if (file_exists($file)) {
+ if (isset(self::$_is_file_cache[$file]) ? self::$_is_file_cache[$file] : self::$_is_file_cache[$file] = is_file($file)) {
require_once($file);
return $file;
} else {
@@ -1281,17 +1389,17 @@ class Smarty extends Smarty_Internal_TemplateBase {
}
// plugin filename is expected to be: [type].[name].php
$_plugin_filename = "{$_name_parts[1]}.{$_name_parts[2]}.php";
-
+
$_stream_resolve_include_path = function_exists('stream_resolve_include_path');
// loop through plugin dirs and find the plugin
- foreach($this->getPluginsDir() as $_plugin_dir) {
+ foreach ($this->getPluginsDir() as $_plugin_dir) {
$names = array(
$_plugin_dir . $_plugin_filename,
$_plugin_dir . strtolower($_plugin_filename),
);
foreach ($names as $file) {
- if (file_exists($file)) {
+ if (isset(self::$_is_file_cache[$file]) ? self::$_is_file_cache[$file] : self::$_is_file_cache[$file] = is_file($file)) {
require_once($file);
return $file;
}
@@ -1302,9 +1410,10 @@ class Smarty extends Smarty_Internal_TemplateBase {
} else {
$file = Smarty_Internal_Get_Include_Path::getIncludePath($file);
}
-
+
if ($file !== false) {
require_once($file);
+
return $file;
}
}
@@ -1317,37 +1426,40 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**
* Compile all template files
*
- * @param string $extension file extension
- * @param bool $force_compile force all to recompile
- * @param int $time_limit
- * @param int $max_errors
+ * @param string $extension file extension
+ * @param bool $force_compile force all to recompile
+ * @param int $time_limit
+ * @param int $max_errors
+ *
* @return integer number of template files recompiled
*/
- public function compileAllTemplates($extention = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null)
+ public function compileAllTemplates($extension = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null)
{
- return Smarty_Internal_Utility::compileAllTemplates($extention, $force_compile, $time_limit, $max_errors, $this);
+ return Smarty_Internal_Utility::compileAllTemplates($extension, $force_compile, $time_limit, $max_errors, $this);
}
/**
* Compile all config files
*
- * @param string $extension file extension
- * @param bool $force_compile force all to recompile
- * @param int $time_limit
- * @param int $max_errors
+ * @param string $extension file extension
+ * @param bool $force_compile force all to recompile
+ * @param int $time_limit
+ * @param int $max_errors
+ *
* @return integer number of template files recompiled
*/
- public function compileAllConfig($extention = '.conf', $force_compile = false, $time_limit = 0, $max_errors = null)
+ public function compileAllConfig($extension = '.conf', $force_compile = false, $time_limit = 0, $max_errors = null)
{
- return Smarty_Internal_Utility::compileAllConfig($extention, $force_compile, $time_limit, $max_errors, $this);
+ return Smarty_Internal_Utility::compileAllConfig($extension, $force_compile, $time_limit, $max_errors, $this);
}
/**
* Delete compiled template file
*
- * @param string $resource_name template name
- * @param string $compile_id compile id
- * @param integer $exp_time expiration time
+ * @param string $resource_name template name
+ * @param string $compile_id compile id
+ * @param integer $exp_time expiration time
+ *
* @return integer number of template files deleted
*/
public function clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null)
@@ -1355,12 +1467,12 @@ class Smarty extends Smarty_Internal_TemplateBase {
return Smarty_Internal_Utility::clearCompiledTemplate($resource_name, $compile_id, $exp_time, $this);
}
-
/**
* Return array of tag/attributes of all tags used by an template
*
- * @param object $templae template object
- * @return array of tag/attributes
+ * @param Smarty_Internal_Template $template
+ *
+ * @return array of tag/attributes
*/
public function getTags(Smarty_Internal_Template $template)
{
@@ -1370,10 +1482,11 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**
* Run installation test
*
- * @param array $errors Array to write errors into, rather than outputting them
+ * @param array $errors Array to write errors into, rather than outputting them
+ *
* @return boolean true if setup is fine, false if something is wrong
*/
- public function testInstall(&$errors=null)
+ public function testInstall(&$errors = null)
{
return Smarty_Internal_Utility::testInstall($this, $errors);
}
@@ -1382,7 +1495,13 @@ class Smarty extends Smarty_Internal_TemplateBase {
* Error Handler to mute expected messages
*
* @link http://php.net/set_error_handler
- * @param integer $errno Error level
+ *
+ * @param integer $errno Error level
+ * @param $errstr
+ * @param $errfile
+ * @param $errline
+ * @param $errcontext
+ *
* @return boolean
*/
public static function mutingErrorHandler($errno, $errstr, $errfile, $errline, $errcontext)
@@ -1392,10 +1511,12 @@ class Smarty extends Smarty_Internal_TemplateBase {
// add the SMARTY_DIR to the list of muted directories
if (!isset(Smarty::$_muted_directories[SMARTY_DIR])) {
$smarty_dir = realpath(SMARTY_DIR);
- Smarty::$_muted_directories[SMARTY_DIR] = array(
- 'file' => $smarty_dir,
- 'length' => strlen($smarty_dir),
- );
+ if ($smarty_dir !== false) {
+ Smarty::$_muted_directories[SMARTY_DIR] = array(
+ 'file' => $smarty_dir,
+ 'length' => strlen($smarty_dir),
+ );
+ }
}
// walk the muted directories and test against $errfile
@@ -1403,8 +1524,13 @@ class Smarty extends Smarty_Internal_TemplateBase {
if (!$dir) {
// resolve directory and length for speedy comparisons
$file = realpath($key);
+ if ($file === false) {
+ // this directory does not exist, remove and skip it
+ unset(Smarty::$_muted_directories[$key]);
+ continue;
+ }
$dir = array(
- 'file' => $file,
+ 'file' => $file,
'length' => strlen($file),
);
}
@@ -1478,16 +1604,55 @@ if (Smarty::$_CHARSET !== 'UTF-8') {
/**
* Smarty exception class
+ *
* @package Smarty
*/
-class SmartyException extends Exception {
+class SmartyException extends Exception
+{
+ public static $escape = false;
+
+ public function __toString()
+ {
+ return ' --> Smarty: ' . (self::$escape ? htmlentities($this->message) : $this->message) . ' <-- ';
+ }
}
/**
* Smarty compiler exception class
+ *
* @package Smarty
*/
-class SmartyCompilerException extends SmartyException {
+class SmartyCompilerException extends SmartyException
+{
+ public function __toString()
+ {
+ return ' --> Smarty Compiler: ' . $this->message . ' <-- ';
+ }
+
+ /**
+ * The line number of the template error
+ *
+ * @type int|null
+ */
+ public $line = null;
+ /**
+ * The template source snippet relating to the error
+ *
+ * @type string|null
+ */
+ public $source = null;
+ /**
+ * The raw text of the error message
+ *
+ * @type string|null
+ */
+ public $desc = null;
+ /**
+ * The resource identifier or template name
+ *
+ * @type string|null
+ */
+ public $template = null;
}
/**
@@ -1496,22 +1661,20 @@ class SmartyCompilerException extends SmartyException {
function smartyAutoload($class)
{
$_class = strtolower($class);
- $_classes = array(
- 'smarty_config_source' => true,
- 'smarty_config_compiled' => true,
- 'smarty_security' => true,
- 'smarty_cacheresource' => true,
- 'smarty_cacheresource_custom' => true,
+ static $_classes = array(
+ 'smarty_config_source' => true,
+ 'smarty_config_compiled' => true,
+ 'smarty_security' => true,
+ 'smarty_cacheresource' => true,
+ 'smarty_cacheresource_custom' => true,
'smarty_cacheresource_keyvaluestore' => true,
- 'smarty_resource' => true,
- 'smarty_resource_custom' => true,
- 'smarty_resource_uncompiled' => true,
- 'smarty_resource_recompiled' => true,
+ 'smarty_resource' => true,
+ 'smarty_resource_custom' => true,
+ 'smarty_resource_uncompiled' => true,
+ 'smarty_resource_recompiled' => true,
);
if (!strncmp($_class, 'smarty_internal_', 16) || isset($_classes[$_class])) {
include SMARTY_SYSPLUGINS_DIR . $_class . '.php';
}
}
-
-?>
diff --git a/library/Smarty/libs/SmartyBC.class.php b/library/Smarty/libs/SmartyBC.class.php
index f8f0a138f..cec946746 100644
--- a/library/Smarty/libs/SmartyBC.class.php
+++ b/library/Smarty/libs/SmartyBC.class.php
@@ -1,460 +1,467 @@
-<?php
-/**
- * Project: Smarty: the PHP compiling template engine
- * File: SmartyBC.class.php
- * SVN: $Id: $
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * For questions, help, comments, discussion, etc., please join the
- * Smarty mailing list. Send a blank e-mail to
- * smarty-discussion-subscribe@googlegroups.com
- *
- * @link http://www.smarty.net/
- * @copyright 2008 New Digital Group, Inc.
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author Uwe Tews
- * @author Rodney Rehm
- * @package Smarty
- */
-/**
- * @ignore
- */
-require(dirname(__FILE__) . '/Smarty.class.php');
-
-/**
- * Smarty Backward Compatability Wrapper Class
- *
- * @package Smarty
- */
-class SmartyBC extends Smarty {
-
- /**
- * Smarty 2 BC
- * @var string
- */
- public $_version = self::SMARTY_VERSION;
-
- /**
- * Initialize new SmartyBC object
- *
- * @param array $options options to set during initialization, e.g. array( 'forceCompile' => false )
- */
- public function __construct(array $options=array())
- {
- parent::__construct($options);
- // register {php} tag
- $this->registerPlugin('block', 'php', 'smarty_php_tag');
- }
-
- /**
- * wrapper for assign_by_ref
- *
- * @param string $tpl_var the template variable name
- * @param mixed &$value the referenced value to assign
- */
- public function assign_by_ref($tpl_var, &$value)
- {
- $this->assignByRef($tpl_var, $value);
- }
-
- /**
- * wrapper for append_by_ref
- *
- * @param string $tpl_var the template variable name
- * @param mixed &$value the referenced value to append
- * @param boolean $merge flag if array elements shall be merged
- */
- public function append_by_ref($tpl_var, &$value, $merge = false)
- {
- $this->appendByRef($tpl_var, $value, $merge);
- }
-
- /**
- * clear the given assigned template variable.
- *
- * @param string $tpl_var the template variable to clear
- */
- public function clear_assign($tpl_var)
- {
- $this->clearAssign($tpl_var);
- }
-
- /**
- * Registers custom function to be used in templates
- *
- * @param string $function the name of the template function
- * @param string $function_impl the name of the PHP function to register
- * @param bool $cacheable
- * @param mixed $cache_attrs
- */
- public function register_function($function, $function_impl, $cacheable=true, $cache_attrs=null)
- {
- $this->registerPlugin('function', $function, $function_impl, $cacheable, $cache_attrs);
- }
-
- /**
- * Unregisters custom function
- *
- * @param string $function name of template function
- */
- public function unregister_function($function)
- {
- $this->unregisterPlugin('function', $function);
- }
-
- /**
- * Registers object to be used in templates
- *
- * @param string $object name of template object
- * @param object $object_impl the referenced PHP object to register
- * @param array $allowed list of allowed methods (empty = all)
- * @param boolean $smarty_args smarty argument format, else traditional
- * @param array $block_functs list of methods that are block format
- */
- public function register_object($object, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array())
- {
- settype($allowed, 'array');
- settype($smarty_args, 'boolean');
- $this->registerObject($object, $object_impl, $allowed, $smarty_args, $block_methods);
- }
-
- /**
- * Unregisters object
- *
- * @param string $object name of template object
- */
- public function unregister_object($object)
- {
- $this->unregisterObject($object);
- }
-
- /**
- * Registers block function to be used in templates
- *
- * @param string $block name of template block
- * @param string $block_impl PHP function to register
- * @param bool $cacheable
- * @param mixed $cache_attrs
- */
- public function register_block($block, $block_impl, $cacheable=true, $cache_attrs=null)
- {
- $this->registerPlugin('block', $block, $block_impl, $cacheable, $cache_attrs);
- }
-
- /**
- * Unregisters block function
- *
- * @param string $block name of template function
- */
- public function unregister_block($block)
- {
- $this->unregisterPlugin('block', $block);
- }
-
- /**
- * Registers compiler function
- *
- * @param string $function name of template function
- * @param string $function_impl name of PHP function to register
- * @param bool $cacheable
- */
- public function register_compiler_function($function, $function_impl, $cacheable=true)
- {
- $this->registerPlugin('compiler', $function, $function_impl, $cacheable);
- }
-
- /**
- * Unregisters compiler function
- *
- * @param string $function name of template function
- */
- public function unregister_compiler_function($function)
- {
- $this->unregisterPlugin('compiler', $function);
- }
-
- /**
- * Registers modifier to be used in templates
- *
- * @param string $modifier name of template modifier
- * @param string $modifier_impl name of PHP function to register
- */
- public function register_modifier($modifier, $modifier_impl)
- {
- $this->registerPlugin('modifier', $modifier, $modifier_impl);
- }
-
- /**
- * Unregisters modifier
- *
- * @param string $modifier name of template modifier
- */
- public function unregister_modifier($modifier)
- {
- $this->unregisterPlugin('modifier', $modifier);
- }
-
- /**
- * Registers a resource to fetch a template
- *
- * @param string $type name of resource
- * @param array $functions array of functions to handle resource
- */
- public function register_resource($type, $functions)
- {
- $this->registerResource($type, $functions);
- }
-
- /**
- * Unregisters a resource
- *
- * @param string $type name of resource
- */
- public function unregister_resource($type)
- {
- $this->unregisterResource($type);
- }
-
- /**
- * Registers a prefilter function to apply
- * to a template before compiling
- *
- * @param callable $function
- */
- public function register_prefilter($function)
- {
- $this->registerFilter('pre', $function);
- }
-
- /**
- * Unregisters a prefilter function
- *
- * @param callable $function
- */
- public function unregister_prefilter($function)
- {
- $this->unregisterFilter('pre', $function);
- }
-
- /**
- * Registers a postfilter function to apply
- * to a compiled template after compilation
- *
- * @param callable $function
- */
- public function register_postfilter($function)
- {
- $this->registerFilter('post', $function);
- }
-
- /**
- * Unregisters a postfilter function
- *
- * @param callable $function
- */
- public function unregister_postfilter($function)
- {
- $this->unregisterFilter('post', $function);
- }
-
- /**
- * Registers an output filter function to apply
- * to a template output
- *
- * @param callable $function
- */
- public function register_outputfilter($function)
- {
- $this->registerFilter('output', $function);
- }
-
- /**
- * Unregisters an outputfilter function
- *
- * @param callable $function
- */
- public function unregister_outputfilter($function)
- {
- $this->unregisterFilter('output', $function);
- }
-
- /**
- * load a filter of specified type and name
- *
- * @param string $type filter type
- * @param string $name filter name
- */
- public function load_filter($type, $name)
- {
- $this->loadFilter($type, $name);
- }
-
- /**
- * clear cached content for the given template and cache id
- *
- * @param string $tpl_file name of template file
- * @param string $cache_id name of cache_id
- * @param string $compile_id name of compile_id
- * @param string $exp_time expiration time
- * @return boolean
- */
- public function clear_cache($tpl_file = null, $cache_id = null, $compile_id = null, $exp_time = null)
- {
- return $this->clearCache($tpl_file, $cache_id, $compile_id, $exp_time);
- }
-
- /**
- * clear the entire contents of cache (all templates)
- *
- * @param string $exp_time expire time
- * @return boolean
- */
- public function clear_all_cache($exp_time = null)
- {
- return $this->clearCache(null, null, null, $exp_time);
- }
-
- /**
- * test to see if valid cache exists for this template
- *
- * @param string $tpl_file name of template file
- * @param string $cache_id
- * @param string $compile_id
- * @return boolean
- */
- public function is_cached($tpl_file, $cache_id = null, $compile_id = null)
- {
- return $this->isCached($tpl_file, $cache_id, $compile_id);
- }
-
- /**
- * clear all the assigned template variables.
- */
- public function clear_all_assign()
- {
- $this->clearAllAssign();
- }
-
- /**
- * clears compiled version of specified template resource,
- * or all compiled template files if one is not specified.
- * This function is for advanced use only, not normally needed.
- *
- * @param string $tpl_file
- * @param string $compile_id
- * @param string $exp_time
- * @return boolean results of {@link smarty_core_rm_auto()}
- */
- public function clear_compiled_tpl($tpl_file = null, $compile_id = null, $exp_time = null)
- {
- return $this->clearCompiledTemplate($tpl_file, $compile_id, $exp_time);
- }
-
- /**
- * Checks whether requested template exists.
- *
- * @param string $tpl_file
- * @return boolean
- */
- public function template_exists($tpl_file)
- {
- return $this->templateExists($tpl_file);
- }
-
- /**
- * Returns an array containing template variables
- *
- * @param string $name
- * @return array
- */
- public function get_template_vars($name=null)
- {
- return $this->getTemplateVars($name);
- }
-
- /**
- * Returns an array containing config variables
- *
- * @param string $name
- * @return array
- */
- public function get_config_vars($name=null)
- {
- return $this->getConfigVars($name);
- }
-
- /**
- * load configuration values
- *
- * @param string $file
- * @param string $section
- * @param string $scope
- */
- public function config_load($file, $section = null, $scope = 'global')
- {
- $this->ConfigLoad($file, $section, $scope);
- }
-
- /**
- * return a reference to a registered object
- *
- * @param string $name
- * @return object
- */
- public function get_registered_object($name)
- {
- return $this->getRegisteredObject($name);
- }
-
- /**
- * clear configuration values
- *
- * @param string $var
- */
- public function clear_config($var = null)
- {
- $this->clearConfig($var);
- }
-
- /**
- * trigger Smarty error
- *
- * @param string $error_msg
- * @param integer $error_type
- */
- public function trigger_error($error_msg, $error_type = E_USER_WARNING)
- {
- trigger_error("Smarty error: $error_msg", $error_type);
- }
-
-}
-
-/**
- * Smarty {php}{/php} block function
- *
- * @param array $params parameter list
- * @param string $content contents of the block
- * @param object $template template object
- * @param boolean &$repeat repeat flag
- * @return string content re-formatted
- */
-function smarty_php_tag($params, $content, $template, &$repeat)
-{
- eval($content);
- return '';
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Project: Smarty: the PHP compiling template engine
+ * File: SmartyBC.class.php
+ * SVN: $Id: $
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * For questions, help, comments, discussion, etc., please join the
+ * Smarty mailing list. Send a blank e-mail to
+ * smarty-discussion-subscribe@googlegroups.com
+ *
+ * @link http://www.smarty.net/
+ * @copyright 2008 New Digital Group, Inc.
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author Uwe Tews
+ * @author Rodney Rehm
+ * @package Smarty
+ */
+/**
+ * @ignore
+ */
+require_once(dirname(__FILE__) . '/Smarty.class.php');
+
+/**
+ * Smarty Backward Compatability Wrapper Class
+ *
+ * @package Smarty
+ */
+class SmartyBC extends Smarty
+{
+ /**
+ * Smarty 2 BC
+ *
+ * @var string
+ */
+ public $_version = self::SMARTY_VERSION;
+
+ /**
+ * Initialize new SmartyBC object
+ *
+ * @param array $options options to set during initialization, e.g. array( 'forceCompile' => false )
+ */
+ public function __construct(array $options = array())
+ {
+ parent::__construct($options);
+ // register {php} tag
+ $this->registerPlugin('block', 'php', 'smarty_php_tag');
+ }
+
+ /**
+ * wrapper for assign_by_ref
+ *
+ * @param string $tpl_var the template variable name
+ * @param mixed &$value the referenced value to assign
+ */
+ public function assign_by_ref($tpl_var, &$value)
+ {
+ $this->assignByRef($tpl_var, $value);
+ }
+
+ /**
+ * wrapper for append_by_ref
+ *
+ * @param string $tpl_var the template variable name
+ * @param mixed &$value the referenced value to append
+ * @param boolean $merge flag if array elements shall be merged
+ */
+ public function append_by_ref($tpl_var, &$value, $merge = false)
+ {
+ $this->appendByRef($tpl_var, $value, $merge);
+ }
+
+ /**
+ * clear the given assigned template variable.
+ *
+ * @param string $tpl_var the template variable to clear
+ */
+ public function clear_assign($tpl_var)
+ {
+ $this->clearAssign($tpl_var);
+ }
+
+ /**
+ * Registers custom function to be used in templates
+ *
+ * @param string $function the name of the template function
+ * @param string $function_impl the name of the PHP function to register
+ * @param bool $cacheable
+ * @param mixed $cache_attrs
+ */
+ public function register_function($function, $function_impl, $cacheable = true, $cache_attrs = null)
+ {
+ $this->registerPlugin('function', $function, $function_impl, $cacheable, $cache_attrs);
+ }
+
+ /**
+ * Unregisters custom function
+ *
+ * @param string $function name of template function
+ */
+ public function unregister_function($function)
+ {
+ $this->unregisterPlugin('function', $function);
+ }
+
+ /**
+ * Registers object to be used in templates
+ *
+ * @param string $object name of template object
+ * @param object $object_impl the referenced PHP object to register
+ * @param array $allowed list of allowed methods (empty = all)
+ * @param boolean $smarty_args smarty argument format, else traditional
+ * @param array $block_methods list of methods that are block format
+ *
+ * @throws SmartyException
+ * @internal param array $block_functs list of methods that are block format
+ */
+ public function register_object($object, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array())
+ {
+ settype($allowed, 'array');
+ settype($smarty_args, 'boolean');
+ $this->registerObject($object, $object_impl, $allowed, $smarty_args, $block_methods);
+ }
+
+ /**
+ * Unregisters object
+ *
+ * @param string $object name of template object
+ */
+ public function unregister_object($object)
+ {
+ $this->unregisterObject($object);
+ }
+
+ /**
+ * Registers block function to be used in templates
+ *
+ * @param string $block name of template block
+ * @param string $block_impl PHP function to register
+ * @param bool $cacheable
+ * @param mixed $cache_attrs
+ */
+ public function register_block($block, $block_impl, $cacheable = true, $cache_attrs = null)
+ {
+ $this->registerPlugin('block', $block, $block_impl, $cacheable, $cache_attrs);
+ }
+
+ /**
+ * Unregisters block function
+ *
+ * @param string $block name of template function
+ */
+ public function unregister_block($block)
+ {
+ $this->unregisterPlugin('block', $block);
+ }
+
+ /**
+ * Registers compiler function
+ *
+ * @param string $function name of template function
+ * @param string $function_impl name of PHP function to register
+ * @param bool $cacheable
+ */
+ public function register_compiler_function($function, $function_impl, $cacheable = true)
+ {
+ $this->registerPlugin('compiler', $function, $function_impl, $cacheable);
+ }
+
+ /**
+ * Unregisters compiler function
+ *
+ * @param string $function name of template function
+ */
+ public function unregister_compiler_function($function)
+ {
+ $this->unregisterPlugin('compiler', $function);
+ }
+
+ /**
+ * Registers modifier to be used in templates
+ *
+ * @param string $modifier name of template modifier
+ * @param string $modifier_impl name of PHP function to register
+ */
+ public function register_modifier($modifier, $modifier_impl)
+ {
+ $this->registerPlugin('modifier', $modifier, $modifier_impl);
+ }
+
+ /**
+ * Unregisters modifier
+ *
+ * @param string $modifier name of template modifier
+ */
+ public function unregister_modifier($modifier)
+ {
+ $this->unregisterPlugin('modifier', $modifier);
+ }
+
+ /**
+ * Registers a resource to fetch a template
+ *
+ * @param string $type name of resource
+ * @param array $functions array of functions to handle resource
+ */
+ public function register_resource($type, $functions)
+ {
+ $this->registerResource($type, $functions);
+ }
+
+ /**
+ * Unregisters a resource
+ *
+ * @param string $type name of resource
+ */
+ public function unregister_resource($type)
+ {
+ $this->unregisterResource($type);
+ }
+
+ /**
+ * Registers a prefilter function to apply
+ * to a template before compiling
+ *
+ * @param callable $function
+ */
+ public function register_prefilter($function)
+ {
+ $this->registerFilter('pre', $function);
+ }
+
+ /**
+ * Unregisters a prefilter function
+ *
+ * @param callable $function
+ */
+ public function unregister_prefilter($function)
+ {
+ $this->unregisterFilter('pre', $function);
+ }
+
+ /**
+ * Registers a postfilter function to apply
+ * to a compiled template after compilation
+ *
+ * @param callable $function
+ */
+ public function register_postfilter($function)
+ {
+ $this->registerFilter('post', $function);
+ }
+
+ /**
+ * Unregisters a postfilter function
+ *
+ * @param callable $function
+ */
+ public function unregister_postfilter($function)
+ {
+ $this->unregisterFilter('post', $function);
+ }
+
+ /**
+ * Registers an output filter function to apply
+ * to a template output
+ *
+ * @param callable $function
+ */
+ public function register_outputfilter($function)
+ {
+ $this->registerFilter('output', $function);
+ }
+
+ /**
+ * Unregisters an outputfilter function
+ *
+ * @param callable $function
+ */
+ public function unregister_outputfilter($function)
+ {
+ $this->unregisterFilter('output', $function);
+ }
+
+ /**
+ * load a filter of specified type and name
+ *
+ * @param string $type filter type
+ * @param string $name filter name
+ */
+ public function load_filter($type, $name)
+ {
+ $this->loadFilter($type, $name);
+ }
+
+ /**
+ * clear cached content for the given template and cache id
+ *
+ * @param string $tpl_file name of template file
+ * @param string $cache_id name of cache_id
+ * @param string $compile_id name of compile_id
+ * @param string $exp_time expiration time
+ *
+ * @return boolean
+ */
+ public function clear_cache($tpl_file = null, $cache_id = null, $compile_id = null, $exp_time = null)
+ {
+ return $this->clearCache($tpl_file, $cache_id, $compile_id, $exp_time);
+ }
+
+ /**
+ * clear the entire contents of cache (all templates)
+ *
+ * @param string $exp_time expire time
+ *
+ * @return boolean
+ */
+ public function clear_all_cache($exp_time = null)
+ {
+ return $this->clearCache(null, null, null, $exp_time);
+ }
+
+ /**
+ * test to see if valid cache exists for this template
+ *
+ * @param string $tpl_file name of template file
+ * @param string $cache_id
+ * @param string $compile_id
+ *
+ * @return boolean
+ */
+ public function is_cached($tpl_file, $cache_id = null, $compile_id = null)
+ {
+ return $this->isCached($tpl_file, $cache_id, $compile_id);
+ }
+
+ /**
+ * clear all the assigned template variables.
+ */
+ public function clear_all_assign()
+ {
+ $this->clearAllAssign();
+ }
+
+ /**
+ * clears compiled version of specified template resource,
+ * or all compiled template files if one is not specified.
+ * This function is for advanced use only, not normally needed.
+ *
+ * @param string $tpl_file
+ * @param string $compile_id
+ * @param string $exp_time
+ *
+ * @return boolean results of {@link smarty_core_rm_auto()}
+ */
+ public function clear_compiled_tpl($tpl_file = null, $compile_id = null, $exp_time = null)
+ {
+ return $this->clearCompiledTemplate($tpl_file, $compile_id, $exp_time);
+ }
+
+ /**
+ * Checks whether requested template exists.
+ *
+ * @param string $tpl_file
+ *
+ * @return boolean
+ */
+ public function template_exists($tpl_file)
+ {
+ return $this->templateExists($tpl_file);
+ }
+
+ /**
+ * Returns an array containing template variables
+ *
+ * @param string $name
+ *
+ * @return array
+ */
+ public function get_template_vars($name = null)
+ {
+ return $this->getTemplateVars($name);
+ }
+
+ /**
+ * Returns an array containing config variables
+ *
+ * @param string $name
+ *
+ * @return array
+ */
+ public function get_config_vars($name = null)
+ {
+ return $this->getConfigVars($name);
+ }
+
+ /**
+ * load configuration values
+ *
+ * @param string $file
+ * @param string $section
+ * @param string $scope
+ */
+ public function config_load($file, $section = null, $scope = 'global')
+ {
+ $this->ConfigLoad($file, $section, $scope);
+ }
+
+ /**
+ * return a reference to a registered object
+ *
+ * @param string $name
+ *
+ * @return object
+ */
+ public function get_registered_object($name)
+ {
+ return $this->getRegisteredObject($name);
+ }
+
+ /**
+ * clear configuration values
+ *
+ * @param string $var
+ */
+ public function clear_config($var = null)
+ {
+ $this->clearConfig($var);
+ }
+
+ /**
+ * trigger Smarty error
+ *
+ * @param string $error_msg
+ * @param integer $error_type
+ */
+ public function trigger_error($error_msg, $error_type = E_USER_WARNING)
+ {
+ trigger_error("Smarty error: $error_msg", $error_type);
+ }
+}
+
+/**
+ * Smarty {php}{/php} block function
+ *
+ * @param array $params parameter list
+ * @param string $content contents of the block
+ * @param object $template template object
+ * @param boolean &$repeat repeat flag
+ *
+ * @return string content re-formatted
+ */
+function smarty_php_tag($params, $content, $template, &$repeat)
+{
+ eval($content);
+
+ return '';
+}
diff --git a/library/Smarty/libs/debug.tpl b/library/Smarty/libs/debug.tpl
index 12eef0ffd..61b8876a4 100644
--- a/library/Smarty/libs/debug.tpl
+++ b/library/Smarty/libs/debug.tpl
@@ -1,133 +1,137 @@
{capture name='_smarty_debug' assign=debug_output}
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
- <title>Smarty Debug Console</title>
-<style type="text/css">
-{literal}
-body, h1, h2, td, th, p {
- font-family: sans-serif;
- font-weight: normal;
- font-size: 0.9em;
- margin: 1px;
- padding: 0;
-}
-
-h1 {
- margin: 0;
- text-align: left;
- padding: 2px;
- background-color: #f0c040;
- color: black;
- font-weight: bold;
- font-size: 1.2em;
- }
-
-h2 {
- background-color: #9B410E;
- color: white;
- text-align: left;
- font-weight: bold;
- padding: 2px;
- border-top: 1px solid black;
-}
-
-body {
- background: black;
-}
-
-p, table, div {
- background: #f0ead8;
-}
-
-p {
- margin: 0;
- font-style: italic;
- text-align: center;
-}
-
-table {
- width: 100%;
-}
-
-th, td {
- font-family: monospace;
- vertical-align: top;
- text-align: left;
- width: 50%;
-}
-
-td {
- color: green;
-}
-
-.odd {
- background-color: #eeeeee;
-}
-
-.even {
- background-color: #fafafa;
-}
-
-.exectime {
- font-size: 0.8em;
- font-style: italic;
-}
-
-#table_assigned_vars th {
- color: blue;
-}
-
-#table_config_vars th {
- color: maroon;
-}
-{/literal}
-</style>
-</head>
-<body>
-
-<h1>Smarty Debug Console - {if isset($template_name)}{$template_name|debug_print_var nofilter}{else}Total Time {$execution_time|string_format:"%.5f"}{/if}</h1>
-
-{if !empty($template_data)}
-<h2>included templates &amp; config files (load time in seconds)</h2>
-
-<div>
-{foreach $template_data as $template}
- <font color=brown>{$template.name}</font>
- <span class="exectime">
- (compile {$template['compile_time']|string_format:"%.5f"}) (render {$template['render_time']|string_format:"%.5f"}) (cache {$template['cache_time']|string_format:"%.5f"})
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>Smarty Debug Console</title>
+ <style type="text/css">
+ {literal}
+ body, h1, h2, td, th, p {
+ font-family: sans-serif;
+ font-weight: normal;
+ font-size: 0.9em;
+ margin: 1px;
+ padding: 0;
+ }
+
+ h1 {
+ margin: 0;
+ text-align: left;
+ padding: 2px;
+ background-color: #f0c040;
+ color: black;
+ font-weight: bold;
+ font-size: 1.2em;
+ }
+
+ h2 {
+ background-color: #9B410E;
+ color: white;
+ text-align: left;
+ font-weight: bold;
+ padding: 2px;
+ border-top: 1px solid black;
+ }
+
+ body {
+ background: black;
+ }
+
+ p, table, div {
+ background: #f0ead8;
+ }
+
+ p {
+ margin: 0;
+ font-style: italic;
+ text-align: center;
+ }
+
+ table {
+ width: 100%;
+ }
+
+ th, td {
+ font-family: monospace;
+ vertical-align: top;
+ text-align: left;
+ width: 50%;
+ }
+
+ td {
+ color: green;
+ }
+
+ .odd {
+ background-color: #eeeeee;
+ }
+
+ .even {
+ background-color: #fafafa;
+ }
+
+ .exectime {
+ font-size: 0.8em;
+ font-style: italic;
+ }
+
+ #table_assigned_vars th {
+ color: blue;
+ }
+
+ #table_config_vars th {
+ color: maroon;
+ }
+
+ {/literal}
+ </style>
+ </head>
+ <body>
+
+ <h1>Smarty Debug Console
+ - {if isset($template_name)}{$template_name|debug_print_var nofilter}{else}Total Time {$execution_time|string_format:"%.5f"}{/if}</h1>
+
+ {if !empty($template_data)}
+ <h2>included templates &amp; config files (load time in seconds)</h2>
+ <div>
+ {foreach $template_data as $template}
+ <font color=brown>{$template.name}</font>
+ <span class="exectime">
+ (compile {$template['compile_time']|string_format:"%.5f"}) (render {$template['render_time']|string_format:"%.5f"}) (cache {$template['cache_time']|string_format:"%.5f"}
+ )
</span>
- <br>
-{/foreach}
-</div>
-{/if}
-
-<h2>assigned template variables</h2>
-
-<table id="table_assigned_vars">
- {foreach $assigned_vars as $vars}
- <tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}">
- <th>${$vars@key|escape:'html'}</th>
- <td>{$vars|debug_print_var nofilter}</td></tr>
- {/foreach}
-</table>
-
-<h2>assigned config file variables (outer template scope)</h2>
-
-<table id="table_config_vars">
- {foreach $config_vars as $vars}
- <tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}">
- <th>{$vars@key|escape:'html'}</th>
- <td>{$vars|debug_print_var nofilter}</td></tr>
- {/foreach}
-
-</table>
-</body>
-</html>
+ <br>
+ {/foreach}
+ </div>
+ {/if}
+
+ <h2>assigned template variables</h2>
+
+ <table id="table_assigned_vars">
+ {foreach $assigned_vars as $vars}
+ <tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}">
+ <th>${$vars@key|escape:'html'}</th>
+ <td>{$vars|debug_print_var nofilter}</td>
+ </tr>
+ {/foreach}
+ </table>
+
+ <h2>assigned config file variables (outer template scope)</h2>
+
+ <table id="table_config_vars">
+ {foreach $config_vars as $vars}
+ <tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}">
+ <th>{$vars@key|escape:'html'}</th>
+ <td>{$vars|debug_print_var nofilter}</td>
+ </tr>
+ {/foreach}
+
+ </table>
+ </body>
+ </html>
{/capture}
<script type="text/javascript">
-{$id = $template_name|default:''|md5}
- _smarty_console = window.open("","console{$id}","width=680,height=600,resizable,scrollbars=yes");
+ {$id = $template_name|default:''|md5}
+ _smarty_console = window.open("", "console{$id}", "width=680,height=600,resizable,scrollbars=yes");
_smarty_console.document.write("{$debug_output|escape:'javascript' nofilter}");
_smarty_console.document.close();
</script>
diff --git a/library/Smarty/libs/plugins/block.textformat.php b/library/Smarty/libs/plugins/block.textformat.php
index b22b104a5..abf544939 100644
--- a/library/Smarty/libs/plugins/block.textformat.php
+++ b/library/Smarty/libs/plugins/block.textformat.php
@@ -2,13 +2,12 @@
/**
* Smarty plugin to format text blocks
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsBlock
*/
/**
* Smarty {textformat}{/textformat} block plugin
- *
* Type: block function<br>
* Name: textformat<br>
* Purpose: format text a certain way with preset styles
@@ -23,12 +22,14 @@
* - wrap_boundary - boolean (true)
* </pre>
*
- * @link http://www.smarty.net/manual/en/language.function.textformat.php {textformat}
- * (Smarty online manual)
+ * @link http://www.smarty.net/manual/en/language.function.textformat.php {textformat}
+ * (Smarty online manual)
+ *
* @param array $params parameters
* @param string $content contents of the block
* @param Smarty_Internal_Template $template template object
* @param boolean &$repeat repeat flag
+ *
* @return string content re-formatted
* @author Monte Ohrt <monte at ohrt dot com>
*/
@@ -53,17 +54,17 @@ function smarty_block_textformat($params, $content, $template, &$repeat)
case 'indent_char':
case 'wrap_char':
case 'assign':
- $$_key = (string)$_val;
+ $$_key = (string) $_val;
break;
case 'indent':
case 'indent_first':
case 'wrap':
- $$_key = (int)$_val;
+ $$_key = (int) $_val;
break;
case 'wrap_cut':
- $$_key = (bool)$_val;
+ $$_key = (bool) $_val;
break;
default:
@@ -76,8 +77,6 @@ function smarty_block_textformat($params, $content, $template, &$repeat)
}
// split into paragraphs
$_paragraphs = preg_split('![\r\n]{2}!', $content);
- $_output = '';
-
foreach ($_paragraphs as &$_paragraph) {
if (!$_paragraph) {
@@ -102,12 +101,10 @@ function smarty_block_textformat($params, $content, $template, &$repeat)
}
}
$_output = implode($wrap_char . $wrap_char, $_paragraphs);
-
+
if ($assign) {
$template->assign($assign, $_output);
} else {
return $_output;
}
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/plugins/function.counter.php b/library/Smarty/libs/plugins/function.counter.php
index 3906badf0..4da85a14e 100644
--- a/library/Smarty/libs/plugins/function.counter.php
+++ b/library/Smarty/libs/plugins/function.counter.php
@@ -1,22 +1,24 @@
<?php
/**
* Smarty plugin
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage PluginsFunction
*/
/**
* Smarty {counter} function plugin
- *
* Type: function<br>
* Name: counter<br>
* Purpose: print out a counter value
*
* @author Monte Ohrt <monte at ohrt dot com>
- * @link http://www.smarty.net/manual/en/language.function.counter.php {counter}
- * (Smarty online manual)
+ * @link http://www.smarty.net/manual/en/language.function.counter.php {counter}
+ * (Smarty online manual)
+ *
* @param array $params parameters
* @param Smarty_Internal_Template $template template object
+ *
* @return string|null
*/
function smarty_function_counter($params, $template)
@@ -26,16 +28,16 @@ function smarty_function_counter($params, $template)
$name = (isset($params['name'])) ? $params['name'] : 'default';
if (!isset($counters[$name])) {
$counters[$name] = array(
- 'start'=>1,
- 'skip'=>1,
- 'direction'=>'up',
- 'count'=>1
- );
+ 'start' => 1,
+ 'skip' => 1,
+ 'direction' => 'up',
+ 'count' => 1
+ );
}
$counter =& $counters[$name];
if (isset($params['start'])) {
- $counter['start'] = $counter['count'] = (int)$params['start'];
+ $counter['start'] = $counter['count'] = (int) $params['start'];
}
if (!empty($params['assign'])) {
@@ -45,9 +47,9 @@ function smarty_function_counter($params, $template)
if (isset($counter['assign'])) {
$template->assign($counter['assign'], $counter['count']);
}
-
+
if (isset($params['print'])) {
- $print = (bool)$params['print'];
+ $print = (bool) $params['print'];
} else {
$print = empty($counter['assign']);
}
@@ -61,18 +63,16 @@ function smarty_function_counter($params, $template)
if (isset($params['skip'])) {
$counter['skip'] = $params['skip'];
}
-
+
if (isset($params['direction'])) {
$counter['direction'] = $params['direction'];
}
- if ($counter['direction'] == "down")
+ if ($counter['direction'] == "down") {
$counter['count'] -= $counter['skip'];
- else
+ } else {
$counter['count'] += $counter['skip'];
-
+ }
+
return $retval;
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/plugins/function.cycle.php b/library/Smarty/libs/plugins/function.cycle.php
index 1778ffb53..8dc5cd9d5 100644
--- a/library/Smarty/libs/plugins/function.cycle.php
+++ b/library/Smarty/libs/plugins/function.cycle.php
@@ -2,13 +2,12 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsFunction
*/
/**
* Smarty {cycle} function plugin
- *
* Type: function<br>
* Name: cycle<br>
* Date: May 3, 2002<br>
@@ -31,15 +30,17 @@
* {cycle name=row}
* </pre>
*
- * @link http://www.smarty.net/manual/en/language.function.cycle.php {cycle}
- * (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author credit to Mark Priatel <mpriatel@rogers.com>
- * @author credit to Gerard <gerard@interfold.com>
- * @author credit to Jason Sweat <jsweat_php@yahoo.com>
+ * @link http://www.smarty.net/manual/en/language.function.cycle.php {cycle}
+ * (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author credit to Mark Priatel <mpriatel@rogers.com>
+ * @author credit to Gerard <gerard@interfold.com>
+ * @author credit to Jason Sweat <jsweat_php@yahoo.com>
* @version 1.3
+ *
* @param array $params parameters
* @param Smarty_Internal_Template $template template object
+ *
* @return string|null
*/
@@ -48,18 +49,20 @@ function smarty_function_cycle($params, $template)
static $cycle_vars;
$name = (empty($params['name'])) ? 'default' : $params['name'];
- $print = (isset($params['print'])) ? (bool)$params['print'] : true;
- $advance = (isset($params['advance'])) ? (bool)$params['advance'] : true;
- $reset = (isset($params['reset'])) ? (bool)$params['reset'] : false;
+ $print = (isset($params['print'])) ? (bool) $params['print'] : true;
+ $advance = (isset($params['advance'])) ? (bool) $params['advance'] : true;
+ $reset = (isset($params['reset'])) ? (bool) $params['reset'] : false;
if (!isset($params['values'])) {
- if(!isset($cycle_vars[$name]['values'])) {
+ if (!isset($cycle_vars[$name]['values'])) {
trigger_error("cycle: missing 'values' parameter");
+
return;
}
} else {
- if(isset($cycle_vars[$name]['values'])
- && $cycle_vars[$name]['values'] != $params['values'] ) {
+ if (isset($cycle_vars[$name]['values'])
+ && $cycle_vars[$name]['values'] != $params['values']
+ ) {
$cycle_vars[$name]['index'] = 0;
}
$cycle_vars[$name]['values'] = $params['values'];
@@ -71,13 +74,13 @@ function smarty_function_cycle($params, $template)
$cycle_vars[$name]['delimiter'] = ',';
}
- if(is_array($cycle_vars[$name]['values'])) {
+ if (is_array($cycle_vars[$name]['values'])) {
$cycle_array = $cycle_vars[$name]['values'];
} else {
- $cycle_array = explode($cycle_vars[$name]['delimiter'],$cycle_vars[$name]['values']);
+ $cycle_array = explode($cycle_vars[$name]['delimiter'], $cycle_vars[$name]['values']);
}
- if(!isset($cycle_vars[$name]['index']) || $reset ) {
+ if (!isset($cycle_vars[$name]['index']) || $reset) {
$cycle_vars[$name]['index'] = 0;
}
@@ -86,21 +89,19 @@ function smarty_function_cycle($params, $template)
$template->assign($params['assign'], $cycle_array[$cycle_vars[$name]['index']]);
}
- if($print) {
+ if ($print) {
$retval = $cycle_array[$cycle_vars[$name]['index']];
} else {
$retval = null;
}
- if($advance) {
- if ( $cycle_vars[$name]['index'] >= count($cycle_array) -1 ) {
+ if ($advance) {
+ if ($cycle_vars[$name]['index'] >= count($cycle_array) - 1) {
$cycle_vars[$name]['index'] = 0;
} else {
- $cycle_vars[$name]['index']++;
+ $cycle_vars[$name]['index'] ++;
}
}
return $retval;
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/plugins/function.fetch.php b/library/Smarty/libs/plugins/function.fetch.php
index eca1182d5..3506d4a8d 100644
--- a/library/Smarty/libs/plugins/function.fetch.php
+++ b/library/Smarty/libs/plugins/function.fetch.php
@@ -2,50 +2,53 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsFunction
*/
/**
* Smarty {fetch} plugin
- *
* Type: function<br>
* Name: fetch<br>
* Purpose: fetch file, web or ftp data and display results
*
- * @link http://www.smarty.net/manual/en/language.function.fetch.php {fetch}
- * (Smarty online manual)
+ * @link http://www.smarty.net/manual/en/language.function.fetch.php {fetch}
+ * (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com>
+ *
* @param array $params parameters
* @param Smarty_Internal_Template $template template object
+ *
+ * @throws SmartyException
* @return string|null if the assign parameter is passed, Smarty assigns the result to a template variable
*/
function smarty_function_fetch($params, $template)
{
if (empty($params['file'])) {
- trigger_error("[plugin] fetch parameter 'file' cannot be empty",E_USER_NOTICE);
+ trigger_error("[plugin] fetch parameter 'file' cannot be empty", E_USER_NOTICE);
+
return;
}
-
+
// strip file protocol
if (stripos($params['file'], 'file://') === 0) {
$params['file'] = substr($params['file'], 7);
}
-
+
$protocol = strpos($params['file'], '://');
if ($protocol !== false) {
$protocol = strtolower(substr($params['file'], 0, $protocol));
}
-
+
if (isset($template->smarty->security_policy)) {
if ($protocol) {
// remote resource (or php stream, …)
- if(!$template->smarty->security_policy->isTrustedUri($params['file'])) {
+ if (!$template->smarty->security_policy->isTrustedUri($params['file'])) {
return;
}
} else {
// local file
- if(!$template->smarty->security_policy->isTrustedResourceDir($params['file'])) {
+ if (!$template->smarty->security_policy->isTrustedResourceDir($params['file'])) {
return;
}
}
@@ -54,53 +57,54 @@ function smarty_function_fetch($params, $template)
$content = '';
if ($protocol == 'http') {
// http fetch
- if($uri_parts = parse_url($params['file'])) {
+ if ($uri_parts = parse_url($params['file'])) {
// set defaults
$host = $server_name = $uri_parts['host'];
$timeout = 30;
$accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*";
- $agent = "Smarty Template Engine ". Smarty::SMARTY_VERSION;
+ $agent = "Smarty Template Engine " . Smarty::SMARTY_VERSION;
$referer = "";
$uri = !empty($uri_parts['path']) ? $uri_parts['path'] : '/';
$uri .= !empty($uri_parts['query']) ? '?' . $uri_parts['query'] : '';
$_is_proxy = false;
- if(empty($uri_parts['port'])) {
+ if (empty($uri_parts['port'])) {
$port = 80;
} else {
$port = $uri_parts['port'];
}
- if(!empty($uri_parts['user'])) {
+ if (!empty($uri_parts['user'])) {
$user = $uri_parts['user'];
}
- if(!empty($uri_parts['pass'])) {
+ if (!empty($uri_parts['pass'])) {
$pass = $uri_parts['pass'];
}
// loop through parameters, setup headers
- foreach($params as $param_key => $param_value) {
- switch($param_key) {
+ foreach ($params as $param_key => $param_value) {
+ switch ($param_key) {
case "file":
case "assign":
case "assign_headers":
break;
case "user":
- if(!empty($param_value)) {
+ if (!empty($param_value)) {
$user = $param_value;
}
break;
case "pass":
- if(!empty($param_value)) {
+ if (!empty($param_value)) {
$pass = $param_value;
}
break;
case "accept":
- if(!empty($param_value)) {
+ if (!empty($param_value)) {
$accept = $param_value;
}
break;
case "header":
- if(!empty($param_value)) {
- if(!preg_match('![\w\d-]+: .+!',$param_value)) {
- trigger_error("[plugin] invalid header format '".$param_value."'",E_USER_NOTICE);
+ if (!empty($param_value)) {
+ if (!preg_match('![\w\d-]+: .+!', $param_value)) {
+ trigger_error("[plugin] invalid header format '" . $param_value . "'", E_USER_NOTICE);
+
return;
} else {
$extra_headers[] = $param_value;
@@ -108,99 +112,104 @@ function smarty_function_fetch($params, $template)
}
break;
case "proxy_host":
- if(!empty($param_value)) {
+ if (!empty($param_value)) {
$proxy_host = $param_value;
}
break;
case "proxy_port":
- if(!preg_match('!\D!', $param_value)) {
+ if (!preg_match('!\D!', $param_value)) {
$proxy_port = (int) $param_value;
} else {
- trigger_error("[plugin] invalid value for attribute '".$param_key."'",E_USER_NOTICE);
+ trigger_error("[plugin] invalid value for attribute '" . $param_key . "'", E_USER_NOTICE);
+
return;
}
break;
case "agent":
- if(!empty($param_value)) {
+ if (!empty($param_value)) {
$agent = $param_value;
}
break;
case "referer":
- if(!empty($param_value)) {
+ if (!empty($param_value)) {
$referer = $param_value;
}
break;
case "timeout":
- if(!preg_match('!\D!', $param_value)) {
+ if (!preg_match('!\D!', $param_value)) {
$timeout = (int) $param_value;
} else {
- trigger_error("[plugin] invalid value for attribute '".$param_key."'",E_USER_NOTICE);
+ trigger_error("[plugin] invalid value for attribute '" . $param_key . "'", E_USER_NOTICE);
+
return;
}
break;
default:
- trigger_error("[plugin] unrecognized attribute '".$param_key."'",E_USER_NOTICE);
+ trigger_error("[plugin] unrecognized attribute '" . $param_key . "'", E_USER_NOTICE);
+
return;
}
}
- if(!empty($proxy_host) && !empty($proxy_port)) {
+ if (!empty($proxy_host) && !empty($proxy_port)) {
$_is_proxy = true;
- $fp = fsockopen($proxy_host,$proxy_port,$errno,$errstr,$timeout);
+ $fp = fsockopen($proxy_host, $proxy_port, $errno, $errstr, $timeout);
} else {
- $fp = fsockopen($server_name,$port,$errno,$errstr,$timeout);
+ $fp = fsockopen($server_name, $port, $errno, $errstr, $timeout);
}
- if(!$fp) {
- trigger_error("[plugin] unable to fetch: $errstr ($errno)",E_USER_NOTICE);
+ if (!$fp) {
+ trigger_error("[plugin] unable to fetch: $errstr ($errno)", E_USER_NOTICE);
+
return;
} else {
- if($_is_proxy) {
+ if ($_is_proxy) {
fputs($fp, 'GET ' . $params['file'] . " HTTP/1.0\r\n");
} else {
fputs($fp, "GET $uri HTTP/1.0\r\n");
}
- if(!empty($host)) {
+ if (!empty($host)) {
fputs($fp, "Host: $host\r\n");
}
- if(!empty($accept)) {
+ if (!empty($accept)) {
fputs($fp, "Accept: $accept\r\n");
}
- if(!empty($agent)) {
+ if (!empty($agent)) {
fputs($fp, "User-Agent: $agent\r\n");
}
- if(!empty($referer)) {
+ if (!empty($referer)) {
fputs($fp, "Referer: $referer\r\n");
}
- if(isset($extra_headers) && is_array($extra_headers)) {
- foreach($extra_headers as $curr_header) {
- fputs($fp, $curr_header."\r\n");
+ if (isset($extra_headers) && is_array($extra_headers)) {
+ foreach ($extra_headers as $curr_header) {
+ fputs($fp, $curr_header . "\r\n");
}
}
- if(!empty($user) && !empty($pass)) {
- fputs($fp, "Authorization: BASIC ".base64_encode("$user:$pass")."\r\n");
+ if (!empty($user) && !empty($pass)) {
+ fputs($fp, "Authorization: BASIC " . base64_encode("$user:$pass") . "\r\n");
}
fputs($fp, "\r\n");
- while(!feof($fp)) {
- $content .= fgets($fp,4096);
+ while (!feof($fp)) {
+ $content .= fgets($fp, 4096);
}
fclose($fp);
- $csplit = preg_split("!\r\n\r\n!",$content,2);
+ $csplit = preg_split("!\r\n\r\n!", $content, 2);
$content = $csplit[1];
- if(!empty($params['assign_headers'])) {
- $template->assign($params['assign_headers'],preg_split("!\r\n!",$csplit[0]));
+ if (!empty($params['assign_headers'])) {
+ $template->assign($params['assign_headers'], preg_split("!\r\n!", $csplit[0]));
}
}
} else {
- trigger_error("[plugin fetch] unable to parse URL, check syntax",E_USER_NOTICE);
+ trigger_error("[plugin fetch] unable to parse URL, check syntax", E_USER_NOTICE);
+
return;
}
} else {
$content = @file_get_contents($params['file']);
if ($content === false) {
- throw new SmartyException("{fetch} cannot read resource '" . $params['file'] ."'");
+ throw new SmartyException("{fetch} cannot read resource '" . $params['file'] . "'");
}
}
@@ -210,5 +219,3 @@ function smarty_function_fetch($params, $template)
return $content;
}
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/plugins/function.html_checkboxes.php b/library/Smarty/libs/plugins/function.html_checkboxes.php
index fb9584bbd..d78680368 100644
--- a/library/Smarty/libs/plugins/function.html_checkboxes.php
+++ b/library/Smarty/libs/plugins/function.html_checkboxes.php
@@ -2,13 +2,12 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsFunction
*/
/**
* Smarty {html_checkboxes} function plugin
- *
* File: function.html_checkboxes.php<br>
* Type: function<br>
* Name: html_checkboxes<br>
@@ -32,15 +31,17 @@
* - escape (optional) - escape the content (not value), defaults to true
* </pre>
*
- * @link http://www.smarty.net/manual/en/language.function.html.checkboxes.php {html_checkboxes}
- * (Smarty online manual)
+ * @link http://www.smarty.net/manual/en/language.function.html.checkboxes.php {html_checkboxes}
+ * (Smarty online manual)
* @author Christopher Kvarme <christopher.kvarme@flashjab.com>
- * @author credits to Monte Ohrt <monte at ohrt dot com>
+ * @author credits to Monte Ohrt <monte at ohrt dot com>
* @version 1.0
- * @param array $params parameters
+ *
+ * @param array $params parameters
* @param object $template template object
+ *
* @return string
- * @uses smarty_function_escape_special_chars()
+ * @uses smarty_function_escape_special_chars()
*/
function smarty_function_html_checkboxes($params, $template)
{
@@ -58,8 +59,8 @@ function smarty_function_html_checkboxes($params, $template)
$extra = '';
- foreach($params as $_key => $_val) {
- switch($_key) {
+ foreach ($params as $_key => $_val) {
+ switch ($_key) {
case 'name':
case 'separator':
$$_key = (string) $_val;
@@ -89,7 +90,7 @@ function smarty_function_html_checkboxes($params, $template)
if (method_exists($_sel, "__toString")) {
$_sel = smarty_function_escape_special_chars((string) $_sel->__toString());
} else {
- trigger_error("html_checkboxes: selected attribute contains an object of class '". get_class($_sel) ."' without __toString() method", E_USER_NOTICE);
+ trigger_error("html_checkboxes: selected attribute contains an object of class '" . get_class($_sel) . "' without __toString() method", E_USER_NOTICE);
continue;
}
} else {
@@ -101,7 +102,7 @@ function smarty_function_html_checkboxes($params, $template)
if (method_exists($_val, "__toString")) {
$selected = smarty_function_escape_special_chars((string) $_val->__toString());
} else {
- trigger_error("html_checkboxes: selected attribute is an object of class '". get_class($_val) ."' without __toString() method", E_USER_NOTICE);
+ trigger_error("html_checkboxes: selected attribute is an object of class '" . get_class($_val) . "' without __toString() method", E_USER_NOTICE);
}
} else {
$selected = smarty_function_escape_special_chars((string) $_val);
@@ -116,9 +117,27 @@ function smarty_function_html_checkboxes($params, $template)
case 'assign':
break;
+ case 'strict':
+ break;
+
+ case 'disabled':
+ case 'readonly':
+ if (!empty($params['strict'])) {
+ if (!is_scalar($_val)) {
+ trigger_error("html_options: $_key attribute must be a scalar, only boolean true or string '$_key' will actually add the attribute", E_USER_NOTICE);
+ }
+
+ if ($_val === true || $_val === $_key) {
+ $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"';
+ }
+
+ break;
+ }
+ // omit break; to fall through!
+
default:
- if(!is_array($_val)) {
- $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"';
+ if (!is_array($_val)) {
+ $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
} else {
trigger_error("html_checkboxes: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
}
@@ -126,76 +145,79 @@ function smarty_function_html_checkboxes($params, $template)
}
}
- if (!isset($options) && !isset($values))
- return ''; /* raise error here? */
+ if (!isset($options) && !isset($values)) {
+ return '';
+ } /* raise error here? */
$_html_result = array();
if (isset($options)) {
- foreach ($options as $_key=>$_val) {
+ foreach ($options as $_key => $_val) {
$_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape);
}
} else {
- foreach ($values as $_i=>$_key) {
+ foreach ($values as $_i => $_key) {
$_val = isset($output[$_i]) ? $output[$_i] : '';
$_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape);
}
}
- if(!empty($params['assign'])) {
+ if (!empty($params['assign'])) {
$template->assign($params['assign'], $_html_result);
} else {
return implode("\n", $_html_result);
}
-
}
-function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $escape=true) {
+function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $escape = true)
+{
$_output = '';
-
+
if (is_object($value)) {
if (method_exists($value, "__toString")) {
$value = (string) $value->__toString();
} else {
- trigger_error("html_options: value is an object of class '". get_class($value) ."' without __toString() method", E_USER_NOTICE);
+ trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE);
+
return '';
}
} else {
$value = (string) $value;
}
-
+
if (is_object($output)) {
if (method_exists($output, "__toString")) {
$output = (string) $output->__toString();
} else {
- trigger_error("html_options: output is an object of class '". get_class($output) ."' without __toString() method", E_USER_NOTICE);
+ trigger_error("html_options: output is an object of class '" . get_class($output) . "' without __toString() method", E_USER_NOTICE);
+
return '';
}
} else {
$output = (string) $output;
}
-
+
if ($labels) {
if ($label_ids) {
$_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', $name . '_' . $value));
$_output .= '<label for="' . $_id . '">';
} else {
$_output .= '<label>';
- }
+ }
}
-
+
$name = smarty_function_escape_special_chars($name);
$value = smarty_function_escape_special_chars($value);
if ($escape) {
$output = smarty_function_escape_special_chars($output);
}
-
+
$_output .= '<input type="checkbox" name="' . $name . '[]" value="' . $value . '"';
-
+
if ($labels && $label_ids) {
$_output .= ' id="' . $_id . '"';
}
-
+
if (is_array($selected)) {
if (isset($selected[$value])) {
$_output .= ' checked="checked"';
@@ -203,14 +225,13 @@ function smarty_function_html_checkboxes_output($name, $value, $output, $selecte
} elseif ($value === $selected) {
$_output .= ' checked="checked"';
}
-
+
$_output .= $extra . ' />' . $output;
if ($labels) {
$_output .= '</label>';
}
-
- $_output .= $separator;
+
+ $_output .= $separator;
+
return $_output;
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/plugins/function.html_image.php b/library/Smarty/libs/plugins/function.html_image.php
index 6521966bb..5037e8bd1 100644
--- a/library/Smarty/libs/plugins/function.html_image.php
+++ b/library/Smarty/libs/plugins/function.html_image.php
@@ -1,14 +1,13 @@
<?php
/**
* Smarty plugin
- *
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage PluginsFunction
*/
/**
* Smarty {html_image} function plugin
- *
* Type: function<br>
* Name: html_image<br>
* Date: Feb 24, 2003<br>
@@ -23,21 +22,24 @@
* - basedir - (optional) - base directory for absolute paths, default is environment variable DOCUMENT_ROOT
* - path_prefix - prefix for path output (optional, default empty)
* </pre>
- *
- * @link http://www.smarty.net/manual/en/language.function.html.image.php {html_image}
- * (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author credits to Duda <duda@big.hu>
+ *
+ * @link http://www.smarty.net/manual/en/language.function.html.image.php {html_image}
+ * (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author credits to Duda <duda@big.hu>
* @version 1.0
+ *
* @param array $params parameters
* @param Smarty_Internal_Template $template template object
- * @return string
- * @uses smarty_function_escape_special_chars()
+ *
+ * @throws SmartyException
+ * @return string
+ * @uses smarty_function_escape_special_chars()
*/
function smarty_function_html_image($params, $template)
{
require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php');
-
+
$alt = '';
$file = '';
$height = '';
@@ -47,7 +49,7 @@ function smarty_function_html_image($params, $template)
$suffix = '';
$path_prefix = '';
$basedir = isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : '';
- foreach($params as $_key => $_val) {
+ foreach ($params as $_key => $_val) {
switch ($_key) {
case 'file':
case 'height':
@@ -63,7 +65,7 @@ function smarty_function_html_image($params, $template)
$$_key = smarty_function_escape_special_chars($_val);
} else {
throw new SmartyException ("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
- }
+ }
break;
case 'link':
@@ -77,41 +79,42 @@ function smarty_function_html_image($params, $template)
$extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
} else {
throw new SmartyException ("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
- }
+ }
break;
- }
- }
+ }
+ }
if (empty($file)) {
trigger_error("html_image: missing 'file' parameter", E_USER_NOTICE);
+
return;
- }
+ }
if ($file[0] == '/') {
$_image_path = $basedir . $file;
} else {
$_image_path = $file;
}
-
+
// strip file protocol
if (stripos($params['file'], 'file://') === 0) {
$params['file'] = substr($params['file'], 7);
}
-
+
$protocol = strpos($params['file'], '://');
if ($protocol !== false) {
$protocol = strtolower(substr($params['file'], 0, $protocol));
}
-
+
if (isset($template->smarty->security_policy)) {
if ($protocol) {
// remote resource (or php stream, …)
- if(!$template->smarty->security_policy->isTrustedUri($params['file'])) {
+ if (!$template->smarty->security_policy->isTrustedUri($params['file'])) {
return;
}
} else {
// local file
- if(!$template->smarty->security_policy->isTrustedResourceDir($params['file'])) {
+ if (!$template->smarty->security_policy->isTrustedResourceDir($_image_path)) {
return;
}
}
@@ -122,23 +125,26 @@ function smarty_function_html_image($params, $template)
if (!$_image_data = @getimagesize($_image_path)) {
if (!file_exists($_image_path)) {
trigger_error("html_image: unable to find '$_image_path'", E_USER_NOTICE);
+
return;
- } else if (!is_readable($_image_path)) {
+ } elseif (!is_readable($_image_path)) {
trigger_error("html_image: unable to read '$_image_path'", E_USER_NOTICE);
+
return;
} else {
trigger_error("html_image: '$_image_path' is not a valid image file", E_USER_NOTICE);
+
return;
- }
+ }
}
if (!isset($params['width'])) {
$width = $_image_data[0];
- }
+ }
if (!isset($params['height'])) {
$height = $_image_data[1];
- }
- }
+ }
+ }
if (isset($params['dpi'])) {
if (strstr($_SERVER['HTTP_USER_AGENT'], 'Mac')) {
@@ -147,13 +153,11 @@ function smarty_function_html_image($params, $template)
$dpi_default = 72;
} else {
$dpi_default = 96;
- }
+ }
$_resize = $dpi_default / $params['dpi'];
$width = round($width * $_resize);
$height = round($height * $_resize);
- }
+ }
return $prefix . '<img src="' . $path_prefix . $file . '" alt="' . $alt . '" width="' . $width . '" height="' . $height . '"' . $extra . ' />' . $suffix;
-}
-
-?> \ No newline at end of file
+}
diff --git a/library/Smarty/libs/plugins/function.html_options.php b/library/Smarty/libs/plugins/function.html_options.php
index 46330e896..7ec3e065c 100644
--- a/library/Smarty/libs/plugins/function.html_options.php
+++ b/library/Smarty/libs/plugins/function.html_options.php
@@ -1,14 +1,13 @@
<?php
/**
* Smarty plugin
- *
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage PluginsFunction
*/
/**
* Smarty {html_options} function plugin
- *
* Type: function<br>
* Name: html_options<br>
* Purpose: Prints the list of <option> tags generated from
@@ -23,17 +22,18 @@
* - id (optional) - string default not set
* - class (optional) - string default not set
* </pre>
- *
- * @link http://www.smarty.net/manual/en/language.function.html.options.php {html_image}
- * (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author Ralf Strehle (minor optimization) <ralf dot strehle at yahoo dot de>
- * @param array $params parameters
- * @param Smarty_Internal_Template $template template object
- * @return string
- * @uses smarty_function_escape_special_chars()
+ *
+ * @link http://www.smarty.net/manual/en/language.function.html.options.php {html_image}
+ * (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author Ralf Strehle (minor optimization) <ralf dot strehle at yahoo dot de>
+ *
+ * @param array $params parameters
+ *
+ * @return string
+ * @uses smarty_function_escape_special_chars()
*/
-function smarty_function_html_options($params, $template)
+function smarty_function_html_options($params)
{
require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php');
@@ -72,7 +72,7 @@ function smarty_function_html_options($params, $template)
if (method_exists($_sel, "__toString")) {
$_sel = smarty_function_escape_special_chars((string) $_sel->__toString());
} else {
- trigger_error("html_options: selected attribute contains an object of class '". get_class($_sel) ."' without __toString() method", E_USER_NOTICE);
+ trigger_error("html_options: selected attribute contains an object of class '" . get_class($_sel) . "' without __toString() method", E_USER_NOTICE);
continue;
}
} else {
@@ -84,25 +84,44 @@ function smarty_function_html_options($params, $template)
if (method_exists($_val, "__toString")) {
$selected = smarty_function_escape_special_chars((string) $_val->__toString());
} else {
- trigger_error("html_options: selected attribute is an object of class '". get_class($_val) ."' without __toString() method", E_USER_NOTICE);
+ trigger_error("html_options: selected attribute is an object of class '" . get_class($_val) . "' without __toString() method", E_USER_NOTICE);
}
} else {
$selected = smarty_function_escape_special_chars((string) $_val);
}
break;
+ case 'strict':
+ break;
+
+ case 'disabled':
+ case 'readonly':
+ if (!empty($params['strict'])) {
+ if (!is_scalar($_val)) {
+ trigger_error("html_options: $_key attribute must be a scalar, only boolean true or string '$_key' will actually add the attribute", E_USER_NOTICE);
+ }
+
+ if ($_val === true || $_val === $_key) {
+ $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"';
+ }
+
+ break;
+ }
+ // omit break; to fall through!
+
default:
if (!is_array($_val)) {
$extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
} else {
trigger_error("html_options: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
- }
+ }
break;
- }
+ }
}
if (!isset($options) && !isset($values)) {
/* raise error here? */
+
return '';
}
@@ -117,14 +136,14 @@ function smarty_function_html_options($params, $template)
foreach ($values as $_i => $_key) {
$_val = isset($output[$_i]) ? $output[$_i] : '';
$_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected, $id, $class, $_idx);
- }
+ }
}
if (!empty($name)) {
- $_html_class = !empty($class) ? ' class="'.$class.'"' : '';
- $_html_id = !empty($id) ? ' id="'.$id.'"' : '';
+ $_html_class = !empty($class) ? ' class="' . $class . '"' : '';
+ $_html_id = !empty($id) ? ' id="' . $id . '"' : '';
$_html_result = '<select name="' . $name . '"' . $_html_class . $_html_id . $extra . '>' . "\n" . $_html_result . '</select>' . "\n";
- }
+ }
return $_html_result;
}
@@ -141,36 +160,37 @@ function smarty_function_html_options_optoutput($key, $value, $selected, $id, $c
} elseif ($_key === $selected) {
$_html_result .= ' selected="selected"';
}
- $_html_class = !empty($class) ? ' class="'.$class.' option"' : '';
- $_html_id = !empty($id) ? ' id="'.$id.'-'.$idx.'"' : '';
+ $_html_class = !empty($class) ? ' class="' . $class . ' option"' : '';
+ $_html_id = !empty($id) ? ' id="' . $id . '-' . $idx . '"' : '';
if (is_object($value)) {
if (method_exists($value, "__toString")) {
$value = smarty_function_escape_special_chars((string) $value->__toString());
} else {
- trigger_error("html_options: value is an object of class '". get_class($value) ."' without __toString() method", E_USER_NOTICE);
+ trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE);
+
return '';
}
} else {
$value = smarty_function_escape_special_chars((string) $value);
}
$_html_result .= $_html_class . $_html_id . '>' . $value . '</option>' . "\n";
- $idx++;
+ $idx ++;
} else {
$_idx = 0;
- $_html_result = smarty_function_html_options_optgroup($key, $value, $selected, !empty($id) ? ($id.'-'.$idx) : null, $class, $_idx);
- $idx++;
+ $_html_result = smarty_function_html_options_optgroup($key, $value, $selected, !empty($id) ? ($id . '-' . $idx) : null, $class, $_idx);
+ $idx ++;
}
+
return $_html_result;
-}
+}
function smarty_function_html_options_optgroup($key, $values, $selected, $id, $class, &$idx)
{
$optgroup_html = '<optgroup label="' . smarty_function_escape_special_chars($key) . '">' . "\n";
foreach ($values as $key => $value) {
$optgroup_html .= smarty_function_html_options_optoutput($key, $value, $selected, $id, $class, $idx);
- }
+ }
$optgroup_html .= "</optgroup>\n";
- return $optgroup_html;
-}
-?> \ No newline at end of file
+ return $optgroup_html;
+}
diff --git a/library/Smarty/libs/plugins/function.html_radios.php b/library/Smarty/libs/plugins/function.html_radios.php
index 7c830724a..f121d5eae 100644
--- a/library/Smarty/libs/plugins/function.html_radios.php
+++ b/library/Smarty/libs/plugins/function.html_radios.php
@@ -1,14 +1,13 @@
<?php
/**
* Smarty plugin
- *
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage PluginsFunction
*/
/**
* Smarty {html_radios} function plugin
- *
* File: function.html_radios.php<br>
* Type: function<br>
* Name: html_radios<br>
@@ -31,16 +30,18 @@
* {html_radios values=$ids name='box' separator='<br>' output=$names}
* {html_radios values=$ids checked=$checked separator='<br>' output=$names}
* </pre>
- *
- * @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios}
- * (Smarty online manual)
- * @author Christopher Kvarme <christopher.kvarme@flashjab.com>
- * @author credits to Monte Ohrt <monte at ohrt dot com>
+ *
+ * @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios}
+ * (Smarty online manual)
+ * @author Christopher Kvarme <christopher.kvarme@flashjab.com>
+ * @author credits to Monte Ohrt <monte at ohrt dot com>
* @version 1.0
+ *
* @param array $params parameters
* @param Smarty_Internal_Template $template template object
- * @return string
- * @uses smarty_function_escape_special_chars()
+ *
+ * @return string
+ * @uses smarty_function_escape_special_chars()
*/
function smarty_function_html_radios($params, $template)
{
@@ -57,7 +58,7 @@ function smarty_function_html_radios($params, $template)
$output = null;
$extra = '';
- foreach($params as $_key => $_val) {
+ foreach ($params as $_key => $_val) {
switch ($_key) {
case 'name':
case 'separator':
@@ -72,11 +73,11 @@ function smarty_function_html_radios($params, $template)
if (method_exists($_val, "__toString")) {
$selected = smarty_function_escape_special_chars((string) $_val->__toString());
} else {
- trigger_error("html_radios: selected attribute is an object of class '". get_class($_val) ."' without __toString() method", E_USER_NOTICE);
+ trigger_error("html_radios: selected attribute is an object of class '" . get_class($_val) . "' without __toString() method", E_USER_NOTICE);
}
} else {
$selected = (string) $_val;
- }
+ }
break;
case 'escape':
@@ -102,18 +103,37 @@ function smarty_function_html_radios($params, $template)
case 'assign':
break;
+ case 'strict':
+ break;
+
+ case 'disabled':
+ case 'readonly':
+ if (!empty($params['strict'])) {
+ if (!is_scalar($_val)) {
+ trigger_error("html_options: $_key attribute must be a scalar, only boolean true or string '$_key' will actually add the attribute", E_USER_NOTICE);
+ }
+
+ if ($_val === true || $_val === $_key) {
+ $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"';
+ }
+
+ break;
+ }
+ // omit break; to fall through!
+
default:
if (!is_array($_val)) {
$extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
} else {
trigger_error("html_radios: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
- }
+ }
break;
- }
- }
+ }
+ }
if (!isset($options) && !isset($values)) {
/* raise error here? */
+
return '';
}
@@ -127,57 +147,59 @@ function smarty_function_html_radios($params, $template)
foreach ($values as $_i => $_key) {
$_val = isset($output[$_i]) ? $output[$_i] : '';
$_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape);
- }
- }
+ }
+ }
if (!empty($params['assign'])) {
$template->assign($params['assign'], $_html_result);
} else {
return implode("\n", $_html_result);
- }
-}
+ }
+}
function smarty_function_html_radios_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $escape)
{
$_output = '';
-
+
if (is_object($value)) {
if (method_exists($value, "__toString")) {
$value = (string) $value->__toString();
} else {
- trigger_error("html_options: value is an object of class '". get_class($value) ."' without __toString() method", E_USER_NOTICE);
+ trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE);
+
return '';
}
} else {
$value = (string) $value;
}
-
+
if (is_object($output)) {
if (method_exists($output, "__toString")) {
$output = (string) $output->__toString();
} else {
- trigger_error("html_options: output is an object of class '". get_class($output) ."' without __toString() method", E_USER_NOTICE);
+ trigger_error("html_options: output is an object of class '" . get_class($output) . "' without __toString() method", E_USER_NOTICE);
+
return '';
}
} else {
$output = (string) $output;
}
-
+
if ($labels) {
if ($label_ids) {
$_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', $name . '_' . $value));
$_output .= '<label for="' . $_id . '">';
} else {
$_output .= '<label>';
- }
+ }
}
-
+
$name = smarty_function_escape_special_chars($name);
$value = smarty_function_escape_special_chars($value);
if ($escape) {
$output = smarty_function_escape_special_chars($output);
}
-
+
$_output .= '<input type="radio" name="' . $name . '" value="' . $value . '"';
if ($labels && $label_ids) {
@@ -187,14 +209,13 @@ function smarty_function_html_radios_output($name, $value, $output, $selected, $
if ($value === $selected) {
$_output .= ' checked="checked"';
}
-
+
$_output .= $extra . ' />' . $output;
if ($labels) {
$_output .= '</label>';
}
-
+
$_output .= $separator;
- return $_output;
-}
-?> \ No newline at end of file
+ return $_output;
+}
diff --git a/library/Smarty/libs/plugins/function.html_select_date.php b/library/Smarty/libs/plugins/function.html_select_date.php
index 13c500354..d66256651 100644
--- a/library/Smarty/libs/plugins/function.html_select_date.php
+++ b/library/Smarty/libs/plugins/function.html_select_date.php
@@ -1,8 +1,8 @@
<?php
/**
* Smarty plugin
- *
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage PluginsFunction
*/
@@ -17,11 +17,9 @@ require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
/**
* Smarty {html_select_date} plugin
- *
* Type: function<br>
* Name: html_select_date<br>
* Purpose: Prints the dropdowns for date selection.
- *
* ChangeLog:
* <pre>
* - 1.0 initial release
@@ -37,21 +35,22 @@ require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
* dropdown to include given date unless explicitly set (Monte)
* - 1.3.4 fix behaviour of 0000-00-00 00:00:00 dates to match that
* of 0000-00-00 dates (cybot, boots)
- * - 2.0 complete rewrite for performance,
+ * - 2.0 complete rewrite for performance,
* added attributes month_names, *_id
* </pre>
- *
- * @link http://www.smarty.net/manual/en/language.function.html.select.date.php {html_select_date}
- * (Smarty online manual)
- * @version 2.0
- * @author Andrei Zmievski
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author Rodney Rehm
- * @param array $params parameters
- * @param Smarty_Internal_Template $template template object
- * @return string
+ *
+ * @link http://www.smarty.net/manual/en/language.function.html.select.date.php {html_select_date}
+ * (Smarty online manual)
+ * @version 2.0
+ * @author Andrei Zmievski
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author Rodney Rehm
+ *
+ * @param array $params parameters
+ *
+ * @return string
*/
-function smarty_function_html_select_date($params, $template)
+function smarty_function_html_select_date($params)
{
// generate timestamps used for month names only
static $_month_timestamps = null;
@@ -59,7 +58,7 @@ function smarty_function_html_select_date($params, $template)
if ($_month_timestamps === null) {
$_current_year = date('Y');
$_month_timestamps = array();
- for ($i = 1; $i <= 12; $i++) {
+ for ($i = 1; $i <= 12; $i ++) {
$_month_timestamps[$i] = mktime(0, 0, 0, $i, 1, 2000);
}
}
@@ -120,7 +119,7 @@ function smarty_function_html_select_date($params, $template)
$time = smarty_make_timestamp($_value);
}
break;
-
+
case 'month_names':
if (is_array($_value) && count($_value) == 12) {
$$_key = $_value;
@@ -128,7 +127,7 @@ function smarty_function_html_select_date($params, $template)
trigger_error("html_select_date: month_names must be an array of 12 strings", E_USER_NOTICE);
}
break;
-
+
case 'prefix':
case 'field_array':
case 'start_year':
@@ -155,7 +154,7 @@ function smarty_function_html_select_date($params, $template)
case 'month_id':
case 'day_id':
case 'year_id':
- $$_key = (string)$_value;
+ $$_key = (string) $_value;
break;
case 'display_days':
@@ -163,7 +162,7 @@ function smarty_function_html_select_date($params, $template)
case 'display_years':
case 'year_as_text':
case 'reverse_years':
- $$_key = (bool)$_value;
+ $$_key = (bool) $_value;
break;
default:
@@ -171,32 +170,30 @@ function smarty_function_html_select_date($params, $template)
$extra_attrs .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_value) . '"';
} else {
trigger_error("html_select_date: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
- }
+ }
break;
- }
+ }
}
-
+
// Note: date() is faster than strftime()
// Note: explode(date()) is faster than date() date() date()
if (isset($params['time']) && is_array($params['time'])) {
if (isset($params['time'][$prefix . 'Year'])) {
// $_REQUEST[$field_array] given
- foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) {
+ foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) {
$_variableName = '_' . strtolower($_elementName);
$$_variableName = isset($params['time'][$prefix . $_elementName])
? $params['time'][$prefix . $_elementName]
: date($_elementKey);
}
- $time = mktime(0, 0, 0, $_month, $_day, $_year);
} elseif (isset($params['time'][$field_array][$prefix . 'Year'])) {
// $_REQUEST given
- foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) {
+ foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) {
$_variableName = '_' . strtolower($_elementName);
$$_variableName = isset($params['time'][$field_array][$prefix . $_elementName])
? $params['time'][$field_array][$prefix . $_elementName]
: date($_elementKey);
}
- $time = mktime(0, 0, 0, $_month, $_day, $_year);
} else {
// no date found, use NOW
list($_year, $_month, $_day) = $time = explode('-', date('Y-m-d'));
@@ -217,13 +214,13 @@ function smarty_function_html_select_date($params, $template)
$key .= '_year';
$t = $$key;
if ($t === null) {
- $$key = (int)$_current_year;
- } else if ($t[0] == '+') {
- $$key = (int)($_current_year + trim(substr($t, 1)));
- } else if ($t[0] == '-') {
- $$key = (int)($_current_year - trim(substr($t, 1)));
+ $$key = (int) $_current_year;
+ } elseif ($t[0] == '+') {
+ $$key = (int) ($_current_year + (int)trim(substr($t, 1)));
+ } elseif ($t[0] == '-') {
+ $$key = (int) ($_current_year - (int)trim(substr($t, 1)));
} else {
- $$key = (int)$$key;
+ $$key = (int) $$key;
}
}
@@ -236,73 +233,71 @@ function smarty_function_html_select_date($params, $template)
// generate year <select> or <input>
if ($display_years) {
- $_html_years = '';
$_extra = '';
$_name = $field_array ? ($field_array . '[' . $prefix . 'Year]') : ($prefix . 'Year');
if ($all_extra) {
$_extra .= ' ' . $all_extra;
- }
+ }
if ($year_extra) {
$_extra .= ' ' . $year_extra;
}
-
+
if ($year_as_text) {
$_html_years = '<input type="text" name="' . $_name . '" value="' . $_year . '" size="4" maxlength="4"' . $_extra . $extra_attrs . ' />';
} else {
$_html_years = '<select name="' . $_name . '"';
if ($year_id !== null || $all_id !== null) {
- $_html_years .= ' id="' . smarty_function_escape_special_chars(
- $year_id !== null ? ( $year_id ? $year_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
- ) . '"';
+ $_html_years .= ' id="' . smarty_function_escape_special_chars(
+ $year_id !== null ? ($year_id ? $year_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
+ ) . '"';
}
if ($year_size) {
$_html_years .= ' size="' . $year_size . '"';
- }
+ }
$_html_years .= $_extra . $extra_attrs . '>' . $option_separator;
-
+
if (isset($year_empty) || isset($all_empty)) {
- $_html_years .= '<option value="">' . ( isset($year_empty) ? $year_empty : $all_empty ) . '</option>' . $option_separator;
+ $_html_years .= '<option value="">' . (isset($year_empty) ? $year_empty : $all_empty) . '</option>' . $option_separator;
}
-
- $op = $start_year > $end_year ? -1 : 1;
- for ($i=$start_year; $op > 0 ? $i <= $end_year : $i >= $end_year; $i += $op) {
+
+ $op = $start_year > $end_year ? - 1 : 1;
+ for ($i = $start_year; $op > 0 ? $i <= $end_year : $i >= $end_year; $i += $op) {
$_html_years .= '<option value="' . $i . '"'
. ($_year == $i ? ' selected="selected"' : '')
. '>' . $i . '</option>' . $option_separator;
}
-
+
$_html_years .= '</select>';
}
}
-
+
// generate month <select> or <input>
if ($display_months) {
- $_html_month = '';
$_extra = '';
$_name = $field_array ? ($field_array . '[' . $prefix . 'Month]') : ($prefix . 'Month');
if ($all_extra) {
$_extra .= ' ' . $all_extra;
- }
+ }
if ($month_extra) {
$_extra .= ' ' . $month_extra;
}
-
+
$_html_months = '<select name="' . $_name . '"';
if ($month_id !== null || $all_id !== null) {
- $_html_months .= ' id="' . smarty_function_escape_special_chars(
- $month_id !== null ? ( $month_id ? $month_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
- ) . '"';
+ $_html_months .= ' id="' . smarty_function_escape_special_chars(
+ $month_id !== null ? ($month_id ? $month_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
+ ) . '"';
}
if ($month_size) {
$_html_months .= ' size="' . $month_size . '"';
- }
+ }
$_html_months .= $_extra . $extra_attrs . '>' . $option_separator;
-
+
if (isset($month_empty) || isset($all_empty)) {
- $_html_months .= '<option value="">' . ( isset($month_empty) ? $month_empty : $all_empty ) . '</option>' . $option_separator;
+ $_html_months .= '<option value="">' . (isset($month_empty) ? $month_empty : $all_empty) . '</option>' . $option_separator;
}
-
- for ($i = 1; $i <= 12; $i++) {
+
+ for ($i = 1; $i <= 12; $i ++) {
$_val = sprintf('%02d', $i);
$_text = isset($month_names) ? smarty_function_escape_special_chars($month_names[$i]) : ($month_format == "%m" ? $_val : strftime($month_format, $_month_timestamps[$i]));
$_value = $month_value_format == "%m" ? $_val : strftime($month_value_format, $_month_timestamps[$i]);
@@ -310,52 +305,51 @@ function smarty_function_html_select_date($params, $template)
. ($_val == $_month ? ' selected="selected"' : '')
. '>' . $_text . '</option>' . $option_separator;
}
-
+
$_html_months .= '</select>';
}
-
+
// generate day <select> or <input>
if ($display_days) {
- $_html_day = '';
$_extra = '';
$_name = $field_array ? ($field_array . '[' . $prefix . 'Day]') : ($prefix . 'Day');
if ($all_extra) {
$_extra .= ' ' . $all_extra;
- }
+ }
if ($day_extra) {
$_extra .= ' ' . $day_extra;
}
-
+
$_html_days = '<select name="' . $_name . '"';
if ($day_id !== null || $all_id !== null) {
- $_html_days .= ' id="' . smarty_function_escape_special_chars(
- $day_id !== null ? ( $day_id ? $day_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
- ) . '"';
+ $_html_days .= ' id="' . smarty_function_escape_special_chars(
+ $day_id !== null ? ($day_id ? $day_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
+ ) . '"';
}
if ($day_size) {
$_html_days .= ' size="' . $day_size . '"';
- }
+ }
$_html_days .= $_extra . $extra_attrs . '>' . $option_separator;
-
+
if (isset($day_empty) || isset($all_empty)) {
- $_html_days .= '<option value="">' . ( isset($day_empty) ? $day_empty : $all_empty ) . '</option>' . $option_separator;
+ $_html_days .= '<option value="">' . (isset($day_empty) ? $day_empty : $all_empty) . '</option>' . $option_separator;
}
-
- for ($i = 1; $i <= 31; $i++) {
+
+ for ($i = 1; $i <= 31; $i ++) {
$_val = sprintf('%02d', $i);
$_text = $day_format == '%02d' ? $_val : sprintf($day_format, $i);
- $_value = $day_value_format == '%02d' ? $_val : sprintf($day_value_format, $i);
+ $_value = $day_value_format == '%02d' ? $_val : sprintf($day_value_format, $i);
$_html_days .= '<option value="' . $_value . '"'
. ($_val == $_day ? ' selected="selected"' : '')
. '>' . $_text . '</option>' . $option_separator;
}
-
+
$_html_days .= '</select>';
}
// order the fields for output
$_html = '';
- for ($i=0; $i <= 2; $i++) {
+ for ($i = 0; $i <= 2; $i ++) {
switch ($field_order[$i]) {
case 'Y':
case 'y':
@@ -365,8 +359,8 @@ function smarty_function_html_select_date($params, $template)
}
$_html .= $_html_years;
}
- break;
-
+ break;
+
case 'm':
case 'M':
if (isset($_html_months)) {
@@ -375,8 +369,8 @@ function smarty_function_html_select_date($params, $template)
}
$_html .= $_html_months;
}
- break;
-
+ break;
+
case 'd':
case 'D':
if (isset($_html_days)) {
@@ -385,10 +379,9 @@ function smarty_function_html_select_date($params, $template)
}
$_html .= $_html_days;
}
- break;
+ break;
}
}
+
return $_html;
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/plugins/function.html_select_time.php b/library/Smarty/libs/plugins/function.html_select_time.php
index 9fb8038e4..9af6aad5b 100644
--- a/library/Smarty/libs/plugins/function.html_select_time.php
+++ b/library/Smarty/libs/plugins/function.html_select_time.php
@@ -2,7 +2,7 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsFunction
*/
@@ -17,21 +17,21 @@ require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
/**
* Smarty {html_select_time} function plugin
- *
* Type: function<br>
* Name: html_select_time<br>
* Purpose: Prints the dropdowns for time selection
*
- * @link http://www.smarty.net/manual/en/language.function.html.select.time.php {html_select_time}
- * (Smarty online manual)
- * @author Roberto Berto <roberto@berto.net>
- * @author Monte Ohrt <monte AT ohrt DOT com>
- * @param array $params parameters
- * @param Smarty_Internal_Template $template template object
+ * @link http://www.smarty.net/manual/en/language.function.html.select.time.php {html_select_time}
+ * (Smarty online manual)
+ * @author Roberto Berto <roberto@berto.net>
+ * @author Monte Ohrt <monte AT ohrt DOT com>
+ *
+ * @param array $params parameters
+ *
* @return string
- * @uses smarty_make_timestamp()
+ * @uses smarty_make_timestamp()
*/
-function smarty_function_html_select_time($params, $template)
+function smarty_function_html_select_time($params)
{
$prefix = "Time_";
$field_array = null;
@@ -117,7 +117,7 @@ function smarty_function_html_select_time($params, $template)
case 'minute_value_format':
case 'second_format':
case 'second_value_format':
- $$_key = (string)$_value;
+ $$_key = (string) $_value;
break;
case 'display_hours':
@@ -125,7 +125,7 @@ function smarty_function_html_select_time($params, $template)
case 'display_seconds':
case 'display_meridian':
case 'use_24_hours':
- $$_key = (bool)$_value;
+ $$_key = (bool) $_value;
break;
case 'minute_interval':
@@ -135,7 +135,7 @@ function smarty_function_html_select_time($params, $template)
case 'minute_size':
case 'second_size':
case 'meridian_size':
- $$_key = (int)$_value;
+ $$_key = (int) $_value;
break;
default:
@@ -151,7 +151,7 @@ function smarty_function_html_select_time($params, $template)
if (isset($params['time']) && is_array($params['time'])) {
if (isset($params['time'][$prefix . 'Hour'])) {
// $_REQUEST[$field_array] given
- foreach (array('H' => 'Hour', 'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) {
+ foreach (array('H' => 'Hour', 'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) {
$_variableName = '_' . strtolower($_elementName);
$$_variableName = isset($params['time'][$prefix . $_elementName])
? $params['time'][$prefix . $_elementName]
@@ -160,11 +160,11 @@ function smarty_function_html_select_time($params, $template)
$_meridian = isset($params['time'][$prefix . 'Meridian'])
? (' ' . $params['time'][$prefix . 'Meridian'])
: '';
- $time = strtotime( $_hour . ':' . $_minute . ':' . $_second . $_meridian );
+ $time = strtotime($_hour . ':' . $_minute . ':' . $_second . $_meridian);
list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time));
} elseif (isset($params['time'][$field_array][$prefix . 'Hour'])) {
// $_REQUEST given
- foreach (array('H' => 'Hour', 'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) {
+ foreach (array('H' => 'Hour', 'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) {
$_variableName = '_' . strtolower($_elementName);
$$_variableName = isset($params['time'][$field_array][$prefix . $_elementName])
? $params['time'][$field_array][$prefix . $_elementName]
@@ -173,7 +173,7 @@ function smarty_function_html_select_time($params, $template)
$_meridian = isset($params['time'][$field_array][$prefix . 'Meridian'])
? (' ' . $params['time'][$field_array][$prefix . 'Meridian'])
: '';
- $time = strtotime( $_hour . ':' . $_minute . ':' . $_second . $_meridian );
+ $time = strtotime($_hour . ':' . $_minute . ':' . $_second . $_meridian);
list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time));
} else {
// no date found, use NOW
@@ -204,8 +204,8 @@ function smarty_function_html_select_time($params, $template)
$_html_hours = '<select name="' . $_name . '"';
if ($hour_id !== null || $all_id !== null) {
$_html_hours .= ' id="' . smarty_function_escape_special_chars(
- $hour_id !== null ? ( $hour_id ? $hour_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
- ) . '"';
+ $hour_id !== null ? ($hour_id ? $hour_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
+ ) . '"';
}
if ($hour_size) {
$_html_hours .= ' size="' . $hour_size . '"';
@@ -213,12 +213,12 @@ function smarty_function_html_select_time($params, $template)
$_html_hours .= $_extra . $extra_attrs . '>' . $option_separator;
if (isset($hour_empty) || isset($all_empty)) {
- $_html_hours .= '<option value="">' . ( isset($hour_empty) ? $hour_empty : $all_empty ) . '</option>' . $option_separator;
+ $_html_hours .= '<option value="">' . (isset($hour_empty) ? $hour_empty : $all_empty) . '</option>' . $option_separator;
}
$start = $use_24_hours ? 0 : 1;
$end = $use_24_hours ? 23 : 12;
- for ($i=$start; $i <= $end; $i++) {
+ for ($i = $start; $i <= $end; $i ++) {
$_val = sprintf('%02d', $i);
$_text = $hour_format == '%02d' ? $_val : sprintf($hour_format, $i);
$_value = $hour_value_format == '%02d' ? $_val : sprintf($hour_value_format, $i);
@@ -226,7 +226,7 @@ function smarty_function_html_select_time($params, $template)
if (!$use_24_hours) {
$_hour12 = $_hour == 0
? 12
- : ($_hour <= 12 ? $_hour : $_hour -12);
+ : ($_hour <= 12 ? $_hour : $_hour - 12);
}
$selected = $_hour !== null ? ($use_24_hours ? $_hour == $_val : $_hour12 == $_val) : null;
@@ -253,8 +253,8 @@ function smarty_function_html_select_time($params, $template)
$_html_minutes = '<select name="' . $_name . '"';
if ($minute_id !== null || $all_id !== null) {
$_html_minutes .= ' id="' . smarty_function_escape_special_chars(
- $minute_id !== null ? ( $minute_id ? $minute_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
- ) . '"';
+ $minute_id !== null ? ($minute_id ? $minute_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
+ ) . '"';
}
if ($minute_size) {
$_html_minutes .= ' size="' . $minute_size . '"';
@@ -262,11 +262,11 @@ function smarty_function_html_select_time($params, $template)
$_html_minutes .= $_extra . $extra_attrs . '>' . $option_separator;
if (isset($minute_empty) || isset($all_empty)) {
- $_html_minutes .= '<option value="">' . ( isset($minute_empty) ? $minute_empty : $all_empty ) . '</option>' . $option_separator;
+ $_html_minutes .= '<option value="">' . (isset($minute_empty) ? $minute_empty : $all_empty) . '</option>' . $option_separator;
}
$selected = $_minute !== null ? ($_minute - $_minute % $minute_interval) : null;
- for ($i=0; $i <= 59; $i += $minute_interval) {
+ for ($i = 0; $i <= 59; $i += $minute_interval) {
$_val = sprintf('%02d', $i);
$_text = $minute_format == '%02d' ? $_val : sprintf($minute_format, $i);
$_value = $minute_value_format == '%02d' ? $_val : sprintf($minute_value_format, $i);
@@ -293,8 +293,8 @@ function smarty_function_html_select_time($params, $template)
$_html_seconds = '<select name="' . $_name . '"';
if ($second_id !== null || $all_id !== null) {
$_html_seconds .= ' id="' . smarty_function_escape_special_chars(
- $second_id !== null ? ( $second_id ? $second_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
- ) . '"';
+ $second_id !== null ? ($second_id ? $second_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
+ ) . '"';
}
if ($second_size) {
$_html_seconds .= ' size="' . $second_size . '"';
@@ -302,11 +302,11 @@ function smarty_function_html_select_time($params, $template)
$_html_seconds .= $_extra . $extra_attrs . '>' . $option_separator;
if (isset($second_empty) || isset($all_empty)) {
- $_html_seconds .= '<option value="">' . ( isset($second_empty) ? $second_empty : $all_empty ) . '</option>' . $option_separator;
+ $_html_seconds .= '<option value="">' . (isset($second_empty) ? $second_empty : $all_empty) . '</option>' . $option_separator;
}
$selected = $_second !== null ? ($_second - $_second % $second_interval) : null;
- for ($i=0; $i <= 59; $i += $second_interval) {
+ for ($i = 0; $i <= 59; $i += $second_interval) {
$_val = sprintf('%02d', $i);
$_text = $second_format == '%02d' ? $_val : sprintf($second_format, $i);
$_value = $second_value_format == '%02d' ? $_val : sprintf($second_value_format, $i);
@@ -333,8 +333,8 @@ function smarty_function_html_select_time($params, $template)
$_html_meridian = '<select name="' . $_name . '"';
if ($meridian_id !== null || $all_id !== null) {
$_html_meridian .= ' id="' . smarty_function_escape_special_chars(
- $meridian_id !== null ? ( $meridian_id ? $meridian_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
- ) . '"';
+ $meridian_id !== null ? ($meridian_id ? $meridian_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
+ ) . '"';
}
if ($meridian_size) {
$_html_meridian .= ' size="' . $meridian_size . '"';
@@ -342,11 +342,11 @@ function smarty_function_html_select_time($params, $template)
$_html_meridian .= $_extra . $extra_attrs . '>' . $option_separator;
if (isset($meridian_empty) || isset($all_empty)) {
- $_html_meridian .= '<option value="">' . ( isset($meridian_empty) ? $meridian_empty : $all_empty ) . '</option>' . $option_separator;
+ $_html_meridian .= '<option value="">' . (isset($meridian_empty) ? $meridian_empty : $all_empty) . '</option>' . $option_separator;
}
- $_html_meridian .= '<option value="am"'. ($_hour < 12 ? ' selected="selected"' : '') .'>AM</option>' . $option_separator
- . '<option value="pm"'. ($_hour < 12 ? '' : ' selected="selected"') .'>PM</option>' . $option_separator
+ $_html_meridian .= '<option value="am"' . ($_hour > 0 && $_hour < 12 ? ' selected="selected"' : '') . '>AM</option>' . $option_separator
+ . '<option value="pm"' . ($_hour < 12 ? '' : ' selected="selected"') . '>PM</option>' . $option_separator
. '</select>';
}
@@ -362,5 +362,3 @@ function smarty_function_html_select_time($params, $template)
return $_html;
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/plugins/function.html_table.php b/library/Smarty/libs/plugins/function.html_table.php
index 6b9cb9d12..ec7ba48a4 100644
--- a/library/Smarty/libs/plugins/function.html_table.php
+++ b/library/Smarty/libs/plugins/function.html_table.php
@@ -2,13 +2,12 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsFunction
*/
/**
* Smarty {html_table} function plugin
- *
* Type: function<br>
* Name: html_table<br>
* Date: Feb 17, 2003<br>
@@ -37,17 +36,18 @@
* {table loop=$data cols="first,second,third" tr_attr=$colors}
* </pre>
*
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author credit to Messju Mohr <messju at lammfellpuschen dot de>
- * @author credit to boots <boots dot smarty at yahoo dot com>
- * @version 1.1
- * @link http://www.smarty.net/manual/en/language.function.html.table.php {html_table}
- * (Smarty online manual)
- * @param array $params parameters
- * @param Smarty_Internal_Template $template template object
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author credit to Messju Mohr <messju at lammfellpuschen dot de>
+ * @author credit to boots <boots dot smarty at yahoo dot com>
+ * @version 1.1
+ * @link http://www.smarty.net/manual/en/language.function.html.table.php {html_table}
+ * (Smarty online manual)
+ *
+ * @param array $params parameters
+ *
* @return string
*/
-function smarty_function_html_table($params, $template)
+function smarty_function_html_table($params)
{
$table_attr = 'border="1"';
$tr_attr = '';
@@ -63,14 +63,15 @@ function smarty_function_html_table($params, $template)
$loop = null;
if (!isset($params['loop'])) {
- trigger_error("html_table: missing 'loop' parameter",E_USER_WARNING);
+ trigger_error("html_table: missing 'loop' parameter", E_USER_WARNING);
+
return;
}
foreach ($params as $_key => $_value) {
switch ($_key) {
case 'loop':
- $$_key = (array)$_value;
+ $$_key = (array) $_value;
break;
case 'cols':
@@ -81,14 +82,14 @@ function smarty_function_html_table($params, $template)
$cols = explode(',', $_value);
$cols_count = count($cols);
} elseif (!empty($_value)) {
- $cols_count = (int)$_value;
+ $cols_count = (int) $_value;
} else {
$cols_count = $cols;
}
break;
case 'rows':
- $$_key = (int)$_value;
+ $$_key = (int) $_value;
break;
case 'table_attr':
@@ -97,7 +98,7 @@ function smarty_function_html_table($params, $template)
case 'vdir':
case 'inner':
case 'caption':
- $$_key = (string)$_value;
+ $$_key = (string) $_value;
break;
case 'tr_attr':
@@ -129,7 +130,7 @@ function smarty_function_html_table($params, $template)
$cols = ($hdir == 'right') ? $cols : array_reverse($cols);
$output .= "<thead><tr>\n";
- for ($r = 0; $r < $cols_count; $r++) {
+ for ($r = 0; $r < $cols_count; $r ++) {
$output .= '<th' . smarty_function_html_table_cycle('th', $th_attr, $r) . '>';
$output .= $cols[$r];
$output .= "</th>\n";
@@ -138,12 +139,12 @@ function smarty_function_html_table($params, $template)
}
$output .= "<tbody>\n";
- for ($r = 0; $r < $rows; $r++) {
+ for ($r = 0; $r < $rows; $r ++) {
$output .= "<tr" . smarty_function_html_table_cycle('tr', $tr_attr, $r) . ">\n";
- $rx = ($vdir == 'down') ? $r * $cols_count : ($rows-1 - $r) * $cols_count;
+ $rx = ($vdir == 'down') ? $r * $cols_count : ($rows - 1 - $r) * $cols_count;
- for ($c = 0; $c < $cols_count; $c++) {
- $x = ($hdir == 'right') ? $rx + $c : $rx + $cols_count-1 - $c;
+ for ($c = 0; $c < $cols_count; $c ++) {
+ $x = ($hdir == 'right') ? $rx + $c : $rx + $cols_count - 1 - $c;
if ($inner != 'cols') {
/* shuffle x to loop over rows*/
$x = floor($x / $cols_count) + ($x % $cols_count) * $rows;
@@ -173,5 +174,3 @@ function smarty_function_html_table_cycle($name, $var, $no)
return ($ret) ? ' ' . $ret : '';
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/plugins/function.mailto.php b/library/Smarty/libs/plugins/function.mailto.php
index 55d5c0602..520fb7aa6 100644
--- a/library/Smarty/libs/plugins/function.mailto.php
+++ b/library/Smarty/libs/plugins/function.mailto.php
@@ -2,13 +2,12 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsFunction
*/
/**
* Smarty {mailto} function plugin
- *
* Type: function<br>
* Name: mailto<br>
* Date: May 21, 2002
@@ -39,22 +38,24 @@
* {mailto address="me@domain.com" extra='class="mailto"'}
* </pre>
*
- * @link http://www.smarty.net/manual/en/language.function.mailto.php {mailto}
- * (Smarty online manual)
- * @version 1.2
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author credits to Jason Sweat (added cc, bcc and subject functionality)
- * @param array $params parameters
- * @param Smarty_Internal_Template $template template object
+ * @link http://www.smarty.net/manual/en/language.function.mailto.php {mailto}
+ * (Smarty online manual)
+ * @version 1.2
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author credits to Jason Sweat (added cc, bcc and subject functionality)
+ *
+ * @param array $params parameters
+ *
* @return string
*/
-function smarty_function_mailto($params, $template)
+function smarty_function_mailto($params)
{
static $_allowed_encoding = array('javascript' => true, 'javascript_charcode' => true, 'hex' => true, 'none' => true);
$extra = '';
if (empty($params['address'])) {
- trigger_error("mailto: missing 'address' parameter",E_USER_WARNING);
+ trigger_error("mailto: missing 'address' parameter", E_USER_WARNING);
+
return;
} else {
$address = $params['address'];
@@ -71,8 +72,9 @@ function smarty_function_mailto($params, $template)
case 'cc':
case 'bcc':
case 'followupto':
- if (!empty($value))
- $mail_parms[] = $var . '=' . str_replace($search, $replace, rawurlencode($value));
+ if (!empty($value)) {
+ $mail_parms[] = $var . '=' . str_replace($search, $replace, rawurlencode($value));
+ }
break;
case 'subject':
@@ -91,10 +93,11 @@ function smarty_function_mailto($params, $template)
if ($mail_parms) {
$address .= '?' . join('&', $mail_parms);
}
-
+
$encode = (empty($params['encode'])) ? 'none' : $params['encode'];
if (!isset($_allowed_encoding[$encode])) {
trigger_error("mailto: 'encode' parameter must be none, javascript, javascript_charcode or hex", E_USER_WARNING);
+
return;
}
// FIXME: (rodneyrehm) document.write() excues me what? 1998 has passed!
@@ -102,7 +105,7 @@ function smarty_function_mailto($params, $template)
$string = 'document.write(\'<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>\');';
$js_encode = '';
- for ($x = 0, $_length = strlen($string); $x < $_length; $x++) {
+ for ($x = 0, $_length = strlen($string); $x < $_length; $x ++) {
$js_encode .= '%' . bin2hex($string[$x]);
}
@@ -110,7 +113,7 @@ function smarty_function_mailto($params, $template)
} elseif ($encode == 'javascript_charcode') {
$string = '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>';
- for($x = 0, $y = strlen($string); $x < $y; $x++) {
+ for ($x = 0, $y = strlen($string); $x < $y; $x ++) {
$ord[] = ord($string[$x]);
}
@@ -125,11 +128,12 @@ function smarty_function_mailto($params, $template)
} elseif ($encode == 'hex') {
preg_match('!^(.*)(\?.*)$!', $address, $match);
if (!empty($match[2])) {
- trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.",E_USER_WARNING);
+ trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.", E_USER_WARNING);
+
return;
}
$address_encode = '';
- for ($x = 0, $_length = strlen($address); $x < $_length; $x++) {
+ for ($x = 0, $_length = strlen($address); $x < $_length; $x ++) {
if (preg_match('!\w!' . Smarty::$_UTF8_MODIFIER, $address[$x])) {
$address_encode .= '%' . bin2hex($address[$x]);
} else {
@@ -137,16 +141,15 @@ function smarty_function_mailto($params, $template)
}
}
$text_encode = '';
- for ($x = 0, $_length = strlen($text); $x < $_length; $x++) {
+ for ($x = 0, $_length = strlen($text); $x < $_length; $x ++) {
$text_encode .= '&#x' . bin2hex($text[$x]) . ';';
}
$mailto = "&#109;&#97;&#105;&#108;&#116;&#111;&#58;";
+
return '<a href="' . $mailto . $address_encode . '" ' . $extra . '>' . $text_encode . '</a>';
} else {
// no encoding
return '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>';
}
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/plugins/function.math.php b/library/Smarty/libs/plugins/function.math.php
index f4d3f05ee..aba76e825 100644
--- a/library/Smarty/libs/plugins/function.math.php
+++ b/library/Smarty/libs/plugins/function.math.php
@@ -1,87 +1,91 @@
<?php
/**
* Smarty plugin
- *
* This plugin is only for Smarty2 BC
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage PluginsFunction
*/
/**
* Smarty {math} function plugin
- *
* Type: function<br>
* Name: math<br>
* Purpose: handle math computations in template
*
- * @link http://www.smarty.net/manual/en/language.function.math.php {math}
- * (Smarty online manual)
+ * @link http://www.smarty.net/manual/en/language.function.math.php {math}
+ * (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com>
+ *
* @param array $params parameters
* @param Smarty_Internal_Template $template template object
+ *
* @return string|null
*/
function smarty_function_math($params, $template)
{
static $_allowed_funcs = array(
- 'int' => true, 'abs' => true, 'ceil' => true, 'cos' => true, 'exp' => true, 'floor' => true,
- 'log' => true, 'log10' => true, 'max' => true, 'min' => true, 'pi' => true, 'pow' => true,
- 'rand' => true, 'round' => true, 'sin' => true, 'sqrt' => true, 'srand' => true ,'tan' => true
+ 'int' => true, 'abs' => true, 'ceil' => true, 'cos' => true, 'exp' => true, 'floor' => true,
+ 'log' => true, 'log10' => true, 'max' => true, 'min' => true, 'pi' => true, 'pow' => true,
+ 'rand' => true, 'round' => true, 'sin' => true, 'sqrt' => true, 'srand' => true, 'tan' => true
);
// be sure equation parameter is present
if (empty($params['equation'])) {
- trigger_error("math: missing equation parameter",E_USER_WARNING);
+ trigger_error("math: missing equation parameter", E_USER_WARNING);
+
return;
}
$equation = $params['equation'];
// make sure parenthesis are balanced
- if (substr_count($equation,"(") != substr_count($equation,")")) {
- trigger_error("math: unbalanced parenthesis",E_USER_WARNING);
+ if (substr_count($equation, "(") != substr_count($equation, ")")) {
+ trigger_error("math: unbalanced parenthesis", E_USER_WARNING);
+
return;
}
// match all vars in equation, make sure all are passed
- preg_match_all("!(?:0x[a-fA-F0-9]+)|([a-zA-Z][a-zA-Z0-9_]*)!",$equation, $match);
+ preg_match_all("!(?:0x[a-fA-F0-9]+)|([a-zA-Z][a-zA-Z0-9_]*)!", $equation, $match);
- foreach($match[1] as $curr_var) {
+ foreach ($match[1] as $curr_var) {
if ($curr_var && !isset($params[$curr_var]) && !isset($_allowed_funcs[$curr_var])) {
- trigger_error("math: function call $curr_var not allowed",E_USER_WARNING);
+ trigger_error("math: function call $curr_var not allowed", E_USER_WARNING);
+
return;
}
}
- foreach($params as $key => $val) {
+ foreach ($params as $key => $val) {
if ($key != "equation" && $key != "format" && $key != "assign") {
// make sure value is not empty
- if (strlen($val)==0) {
- trigger_error("math: parameter $key is empty",E_USER_WARNING);
+ if (strlen($val) == 0) {
+ trigger_error("math: parameter $key is empty", E_USER_WARNING);
+
return;
}
if (!is_numeric($val)) {
- trigger_error("math: parameter $key: is not numeric",E_USER_WARNING);
+ trigger_error("math: parameter $key: is not numeric", E_USER_WARNING);
+
return;
}
$equation = preg_replace("/\b$key\b/", " \$params['$key'] ", $equation);
}
}
$smarty_math_result = null;
- eval("\$smarty_math_result = ".$equation.";");
+ eval("\$smarty_math_result = " . $equation . ";");
if (empty($params['format'])) {
if (empty($params['assign'])) {
return $smarty_math_result;
} else {
- $template->assign($params['assign'],$smarty_math_result);
+ $template->assign($params['assign'], $smarty_math_result);
}
} else {
- if (empty($params['assign'])){
- printf($params['format'],$smarty_math_result);
+ if (empty($params['assign'])) {
+ printf($params['format'], $smarty_math_result);
} else {
- $template->assign($params['assign'],sprintf($params['format'],$smarty_math_result));
+ $template->assign($params['assign'], sprintf($params['format'], $smarty_math_result));
}
}
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/plugins/modifier.capitalize.php b/library/Smarty/libs/plugins/modifier.capitalize.php
index a78e3632a..a8ad76370 100644
--- a/library/Smarty/libs/plugins/modifier.capitalize.php
+++ b/library/Smarty/libs/plugins/modifier.capitalize.php
@@ -1,25 +1,24 @@
<?php
/**
* Smarty plugin
- *
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage PluginsModifier
*/
/**
* Smarty capitalize modifier plugin
- *
* Type: modifier<br>
* Name: capitalize<br>
* Purpose: capitalize words in the string
- *
* {@internal {$string|capitalize:true:true} is the fastest option for MBString enabled systems }}
*
* @param string $string string to capitalize
* @param boolean $uc_digits also capitalize "x123" to "X123"
* @param boolean $lc_rest capitalize first letters, lowercase all following letters "aAa" to "Aaa"
+ *
* @return string capitalized string
- * @author Monte Ohrt <monte at ohrt dot com>
+ * @author Monte Ohrt <monte at ohrt dot com>
* @author Rodney Rehm
*/
function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = false)
@@ -27,39 +26,65 @@ function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = fals
if (Smarty::$_MBSTRING) {
if ($lc_rest) {
// uppercase (including hyphenated words)
- $upper_string = mb_convert_case( $string, MB_CASE_TITLE, Smarty::$_CHARSET );
+ $upper_string = mb_convert_case($string, MB_CASE_TITLE, Smarty::$_CHARSET);
} else {
// uppercase word breaks
- $upper_string = preg_replace("!(^|[^\p{L}'])([\p{Ll}])!eS" . Smarty::$_UTF8_MODIFIER, "stripslashes('\\1').mb_convert_case(stripslashes('\\2'),MB_CASE_UPPER, '" . addslashes(Smarty::$_CHARSET) . "')", $string);
+ $upper_string = preg_replace_callback("!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_mbconvert_cb', $string);
}
// check uc_digits case
if (!$uc_digits) {
if (preg_match_all("!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER, $string, $matches, PREG_OFFSET_CAPTURE)) {
- foreach($matches[1] as $match) {
+ foreach ($matches[1] as $match) {
$upper_string = substr_replace($upper_string, mb_strtolower($match[0], Smarty::$_CHARSET), $match[1], strlen($match[0]));
}
- }
+ }
}
- $upper_string = preg_replace("!((^|\s)['\"])(\w)!e" . Smarty::$_UTF8_MODIFIER, "stripslashes('\\1').mb_convert_case(stripslashes('\\3'),MB_CASE_UPPER, '" . addslashes(Smarty::$_CHARSET) . "')", $upper_string);
+ $upper_string = preg_replace_callback("!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_mbconvert2_cb', $upper_string);
return $upper_string;
}
-
+
// lowercase first
if ($lc_rest) {
$string = strtolower($string);
}
// uppercase (including hyphenated words)
- $upper_string = preg_replace("!(^|[^\p{L}'])([\p{Ll}])!eS" . Smarty::$_UTF8_MODIFIER, "stripslashes('\\1').ucfirst(stripslashes('\\2'))", $string);
+ $upper_string = preg_replace_callback("!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_ucfirst_cb', $string);
// check uc_digits case
if (!$uc_digits) {
if (preg_match_all("!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER, $string, $matches, PREG_OFFSET_CAPTURE)) {
- foreach($matches[1] as $match) {
+ foreach ($matches[1] as $match) {
$upper_string = substr_replace($upper_string, strtolower($match[0]), $match[1], strlen($match[0]));
}
- }
+ }
}
- $upper_string = preg_replace("!((^|\s)['\"])(\w)!e" . Smarty::$_UTF8_MODIFIER, "stripslashes('\\1').strtoupper(stripslashes('\\3'))", $upper_string);
+ $upper_string = preg_replace_callback("!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_ucfirst2_cb', $upper_string);
return $upper_string;
-}
+}
+
+/*
+ *
+ * Bug: create_function() use exhausts memory when used in long loops
+ * Fix: use declared functions for callbacks instead of using create_function()
+ * Note: This can be fixed using anonymous functions instead, but that requires PHP >= 5.3
+ *
+ * @author Kyle Renfrow
+ */
+function smarty_mod_cap_mbconvert_cb($matches)
+{
+ return stripslashes($matches[1]) . mb_convert_case(stripslashes($matches[2]), MB_CASE_UPPER, Smarty::$_CHARSET);
+}
+
+function smarty_mod_cap_mbconvert2_cb($matches)
+{
+ return stripslashes($matches[1]) . mb_convert_case(stripslashes($matches[3]), MB_CASE_UPPER, Smarty::$_CHARSET);
+}
+
+function smarty_mod_cap_ucfirst_cb($matches)
+{
+ return stripslashes($matches[1]) . ucfirst(stripslashes($matches[2]));
+}
-?> \ No newline at end of file
+function smarty_mod_cap_ucfirst2_cb($matches)
+{
+ return stripslashes($matches[1]) . ucfirst(stripslashes($matches[3]));
+}
diff --git a/library/Smarty/libs/plugins/modifier.date_format.php b/library/Smarty/libs/plugins/modifier.date_format.php
index f3eaba057..5ad7540b1 100644
--- a/library/Smarty/libs/plugins/modifier.date_format.php
+++ b/library/Smarty/libs/plugins/modifier.date_format.php
@@ -1,14 +1,13 @@
<?php
/**
* Smarty plugin
- *
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage PluginsModifier
*/
/**
* Smarty date_format modifier plugin
- *
* Type: modifier<br>
* Name: date_format<br>
* Purpose: format datestamps via strftime<br>
@@ -16,24 +15,26 @@
* - string: input date string
* - format: strftime format for output
* - default_date: default date if $string is empty
- *
- * @link http://www.smarty.net/manual/en/language.modifier.date.format.php date_format (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com>
+ *
+ * @link http://www.smarty.net/manual/en/language.modifier.date.format.php date_format (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com>
+ *
* @param string $string input date string
* @param string $format strftime format for output
* @param string $default_date default date if $string is empty
* @param string $formatter either 'strftime' or 'auto'
+ *
* @return string |void
- * @uses smarty_make_timestamp()
+ * @uses smarty_make_timestamp()
*/
-function smarty_modifier_date_format($string, $format=null, $default_date='', $formatter='auto')
+function smarty_modifier_date_format($string, $format = null, $default_date = '', $formatter = 'auto')
{
if ($format === null) {
$format = Smarty::$_DATE_FORMAT;
}
/**
- * Include the {@link shared.make_timestamp.php} plugin
- */
+ * Include the {@link shared.make_timestamp.php} plugin
+ */
require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
if ($string != '' && $string != '0000-00-00' && $string != '0000-00-00 00:00:00') {
$timestamp = smarty_make_timestamp($string);
@@ -41,25 +42,24 @@ function smarty_modifier_date_format($string, $format=null, $default_date='', $f
$timestamp = smarty_make_timestamp($default_date);
} else {
return;
- }
- if($formatter=='strftime'||($formatter=='auto'&&strpos($format,'%')!==false)) {
+ }
+ if ($formatter == 'strftime' || ($formatter == 'auto' && strpos($format, '%') !== false)) {
if (DS == '\\') {
$_win_from = array('%D', '%h', '%n', '%r', '%R', '%t', '%T');
$_win_to = array('%m/%d/%y', '%b', "\n", '%I:%M:%S %p', '%H:%M', "\t", '%H:%M:%S');
if (strpos($format, '%e') !== false) {
$_win_from[] = '%e';
$_win_to[] = sprintf('%\' 2d', date('j', $timestamp));
- }
+ }
if (strpos($format, '%l') !== false) {
$_win_from[] = '%l';
$_win_to[] = sprintf('%\' 2d', date('h', $timestamp));
- }
+ }
$format = str_replace($_win_from, $_win_to, $format);
- }
+ }
+
return strftime($format, $timestamp);
} else {
return date($format, $timestamp);
}
-}
-
-?> \ No newline at end of file
+}
diff --git a/library/Smarty/libs/plugins/modifier.debug_print_var.php b/library/Smarty/libs/plugins/modifier.debug_print_var.php
index fa44100e8..66363d253 100644
--- a/library/Smarty/libs/plugins/modifier.debug_print_var.php
+++ b/library/Smarty/libs/plugins/modifier.debug_print_var.php
@@ -1,53 +1,54 @@
<?php
/**
* Smarty plugin
- *
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage Debug
*/
/**
* Smarty debug_print_var modifier plugin
- *
* Type: modifier<br>
* Name: debug_print_var<br>
* Purpose: formats variable contents for display in the console
*
- * @author Monte Ohrt <monte at ohrt dot com>
- * @param array|object $var variable to be formatted
- * @param integer $depth maximum recursion depth if $var is an array
- * @param integer $length maximum string length if $var is a string
- * @return string
+ * @author Monte Ohrt <monte at ohrt dot com>
+ *
+ * @param array|object $var variable to be formatted
+ * @param integer $depth maximum recursion depth if $var is an array
+ * @param integer $length maximum string length if $var is a string
+ *
+ * @return string
*/
-function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40)
+function smarty_modifier_debug_print_var($var, $depth = 0, $length = 40)
{
$_replace = array("\n" => '<i>\n</i>',
- "\r" => '<i>\r</i>',
- "\t" => '<i>\t</i>'
- );
+ "\r" => '<i>\r</i>',
+ "\t" => '<i>\t</i>'
+ );
switch (gettype($var)) {
case 'array' :
$results = '<b>Array (' . count($var) . ')</b>';
foreach ($var as $curr_key => $curr_val) {
$results .= '<br>' . str_repeat('&nbsp;', $depth * 2)
- . '<b>' . strtr($curr_key, $_replace) . '</b> =&gt; '
- . smarty_modifier_debug_print_var($curr_val, ++$depth, $length);
- $depth--;
- }
+ . '<b>' . strtr($curr_key, $_replace) . '</b> =&gt; '
+ . smarty_modifier_debug_print_var($curr_val, ++$depth, $length);
+ $depth --;
+ }
break;
-
+
case 'object' :
$object_vars = get_object_vars($var);
$results = '<b>' . get_class($var) . ' Object (' . count($object_vars) . ')</b>';
foreach ($object_vars as $curr_key => $curr_val) {
$results .= '<br>' . str_repeat('&nbsp;', $depth * 2)
- . '<b> -&gt;' . strtr($curr_key, $_replace) . '</b> = '
- . smarty_modifier_debug_print_var($curr_val, ++$depth, $length);
- $depth--;
- }
+ . '<b> -&gt;' . strtr($curr_key, $_replace) . '</b> = '
+ . smarty_modifier_debug_print_var($curr_val, ++$depth, $length);
+ $depth --;
+ }
break;
-
+
case 'boolean' :
case 'NULL' :
case 'resource' :
@@ -59,15 +60,15 @@ function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40)
$results = 'null';
} else {
$results = htmlspecialchars((string) $var);
- }
+ }
$results = '<i>' . $results . '</i>';
break;
-
+
case 'integer' :
case 'float' :
$results = htmlspecialchars((string) $var);
break;
-
+
case 'string' :
$results = strtr($var, $_replace);
if (Smarty::$_MBSTRING) {
@@ -82,7 +83,7 @@ function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40)
$results = htmlspecialchars('"' . $results . '"');
break;
-
+
case 'unknown type' :
default :
$results = strtr((string) $var, $_replace);
@@ -95,11 +96,9 @@ function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40)
$results = substr($results, 0, $length - 3) . '...';
}
}
-
+
$results = htmlspecialchars($results);
- }
+ }
return $results;
-}
-
-?> \ No newline at end of file
+}
diff --git a/library/Smarty/libs/plugins/modifier.escape.php b/library/Smarty/libs/plugins/modifier.escape.php
index 32d185fce..9fdb0702f 100644
--- a/library/Smarty/libs/plugins/modifier.escape.php
+++ b/library/Smarty/libs/plugins/modifier.escape.php
@@ -2,23 +2,24 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifier
*/
/**
* Smarty escape modifier plugin
- *
* Type: modifier<br>
* Name: escape<br>
* Purpose: escape string for output
*
- * @link http://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual)
+ * @link http://www.smarty.net/docs/en/language.modifier.escape
* @author Monte Ohrt <monte at ohrt dot com>
+ *
* @param string $string input string
* @param string $esc_type escape type
* @param string $char_set character set, used for htmlspecialchars() or htmlentities()
* @param boolean $double_encode encode already encoded entitites again, used for htmlspecialchars() or htmlentities()
+ *
* @return string escaped input string
*/
function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $double_encode = true)
@@ -27,7 +28,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
if ($_double_encode === null) {
$_double_encode = version_compare(PHP_VERSION, '5.2.3', '>=');
}
-
+
if (!$char_set) {
$char_set = Smarty::$_CHARSET;
}
@@ -39,13 +40,14 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
return htmlspecialchars($string, ENT_QUOTES, $char_set, $double_encode);
} else {
if ($double_encode) {
- // php <5.3.2 - only handle double encoding
+ // php <5.2.3 - only handle double encoding
return htmlspecialchars($string, ENT_QUOTES, $char_set);
} else {
- // php <5.3.2 - prevent double encoding
+ // php <5.2.3 - prevent double encoding
$string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
$string = htmlspecialchars($string, ENT_QUOTES, $char_set);
$string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string);
+
return $string;
}
}
@@ -58,17 +60,18 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
$string = htmlspecialchars($string, ENT_QUOTES, $char_set, $double_encode);
} else {
if ($double_encode) {
- // php <5.3.2 - only handle double encoding
+ // php <5.2.3 - only handle double encoding
$string = htmlspecialchars($string, ENT_QUOTES, $char_set);
} else {
- // php <5.3.2 - prevent double encoding
+ // php <5.2.3 - prevent double encoding
$string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
$string = htmlspecialchars($string, ENT_QUOTES, $char_set);
$string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string);
+
return $string;
}
}
-
+
// htmlentities() won't convert everything, so use mb_convert_encoding
return mb_convert_encoding($string, 'HTML-ENTITIES', $char_set);
}
@@ -83,6 +86,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
$string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
$string = htmlentities($string, ENT_QUOTES, $char_set);
$string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string);
+
return $string;
}
}
@@ -102,9 +106,10 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
// Note that the UTF-8 encoded character ä will be represented as %c3%a4
$return = '';
$_length = strlen($string);
- for ($x = 0; $x < $_length; $x++) {
+ for ($x = 0; $x < $_length; $x ++) {
$return .= '%' . bin2hex($string[$x]);
}
+
return $return;
case 'hexentity':
@@ -115,13 +120,15 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) {
$return .= '&#x' . strtoupper(dechex($unicode)) . ';';
}
+
return $return;
}
// no MBString fallback
$_length = strlen($string);
- for ($x = 0; $x < $_length; $x++) {
+ for ($x = 0; $x < $_length; $x ++) {
$return .= '&#x' . bin2hex($string[$x]) . ';';
}
+
return $return;
case 'decentity':
@@ -132,13 +139,15 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) {
$return .= '&#' . $unicode . ';';
}
+
return $return;
}
// no MBString fallback
$_length = strlen($string);
- for ($x = 0; $x < $_length; $x++) {
+ for ($x = 0; $x < $_length; $x ++) {
$return .= '&#' . ord($string[$x]) . ';';
}
+
return $return;
case 'javascript':
@@ -148,6 +157,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
case 'mail':
if (Smarty::$_MBSTRING) {
require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php');
+
return smarty_mb_str_replace(array('@', '.'), array(' [AT] ', ' [DOT] '), $string);
}
// no MBString fallback
@@ -165,11 +175,12 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
$return .= chr($unicode);
}
}
+
return $return;
}
$_length = strlen($string);
- for ($_i = 0; $_i < $_length; $_i++) {
+ for ($_i = 0; $_i < $_length; $_i ++) {
$_ord = ord(substr($string, $_i, 1));
// non-standard char, escape it
if ($_ord >= 126) {
@@ -178,11 +189,10 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
$return .= substr($string, $_i, 1);
}
}
+
return $return;
default:
return $string;
}
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/plugins/modifier.regex_replace.php b/library/Smarty/libs/plugins/modifier.regex_replace.php
index f9fd5fa53..abb1ff548 100644
--- a/library/Smarty/libs/plugins/modifier.regex_replace.php
+++ b/library/Smarty/libs/plugins/modifier.regex_replace.php
@@ -2,39 +2,42 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifier
*/
/**
* Smarty regex_replace modifier plugin
- *
* Type: modifier<br>
* Name: regex_replace<br>
* Purpose: regular expression search/replace
*
- * @link http://smarty.php.net/manual/en/language.modifier.regex.replace.php
+ * @link http://smarty.php.net/manual/en/language.modifier.regex.replace.php
* regex_replace (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com>
- * @param string $string input string
- * @param string|array $search regular expression(s) to search for
- * @param string|array $replace string(s) that should be replaced
+ * @author Monte Ohrt <monte at ohrt dot com>
+ *
+ * @param string $string input string
+ * @param string|array $search regular expression(s) to search for
+ * @param string|array $replace string(s) that should be replaced
+ *
* @return string
*/
function smarty_modifier_regex_replace($string, $search, $replace)
{
- if(is_array($search)) {
- foreach($search as $idx => $s) {
+ if (is_array($search)) {
+ foreach ($search as $idx => $s) {
$search[$idx] = _smarty_regex_replace_check($s);
}
} else {
$search = _smarty_regex_replace_check($search);
}
+
return preg_replace($search, $replace, $string);
}
/**
* @param string $search string(s) that should be replaced
+ *
* @return string
* @ignore
*/
@@ -42,14 +45,13 @@ function _smarty_regex_replace_check($search)
{
// null-byte injection detection
// anything behind the first null-byte is ignored
- if (($pos = strpos($search,"\0")) !== false) {
- $search = substr($search,0,$pos);
+ if (($pos = strpos($search, "\0")) !== false) {
+ $search = substr($search, 0, $pos);
}
// remove eval-modifier from $search
if (preg_match('!([a-zA-Z\s]+)$!s', $search, $match) && (strpos($match[1], 'e') !== false)) {
- $search = substr($search, 0, -strlen($match[1])) . preg_replace('![e\s]+!', '', $match[1]);
+ $search = substr($search, 0, - strlen($match[1])) . preg_replace('![e\s]+!', '', $match[1]);
}
+
return $search;
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/plugins/modifier.replace.php b/library/Smarty/libs/plugins/modifier.replace.php
index 4d71a6e9b..aa5e8570b 100644
--- a/library/Smarty/libs/plugins/modifier.replace.php
+++ b/library/Smarty/libs/plugins/modifier.replace.php
@@ -1,33 +1,34 @@
<?php
/**
* Smarty plugin
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage PluginsModifier
*/
/**
* Smarty replace modifier plugin
- *
* Type: modifier<br>
* Name: replace<br>
* Purpose: simple search/replace
- *
- * @link http://smarty.php.net/manual/en/language.modifier.replace.php replace (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author Uwe Tews
+ *
+ * @link http://smarty.php.net/manual/en/language.modifier.replace.php replace (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author Uwe Tews
+ *
* @param string $string input string
* @param string $search text to search for
* @param string $replace replacement text
- * @return string
+ *
+ * @return string
*/
function smarty_modifier_replace($string, $search, $replace)
{
if (Smarty::$_MBSTRING) {
require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php');
+
return smarty_mb_str_replace($search, $replace, $string);
}
-
- return str_replace($search, $replace, $string);
-}
-?> \ No newline at end of file
+ return str_replace($search, $replace, $string);
+}
diff --git a/library/Smarty/libs/plugins/modifier.spacify.php b/library/Smarty/libs/plugins/modifier.spacify.php
index a907232ff..e5c41ad8b 100644
--- a/library/Smarty/libs/plugins/modifier.spacify.php
+++ b/library/Smarty/libs/plugins/modifier.spacify.php
@@ -1,27 +1,27 @@
<?php
/**
* Smarty plugin
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage PluginsModifier
*/
/**
* Smarty spacify modifier plugin
- *
* Type: modifier<br>
* Name: spacify<br>
* Purpose: add spaces between characters in a string
- *
- * @link http://smarty.php.net/manual/en/language.modifier.spacify.php spacify (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com>
+ *
+ * @link http://smarty.php.net/manual/en/language.modifier.spacify.php spacify (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com>
+ *
* @param string $string input string
* @param string $spacify_char string to insert between characters.
+ *
* @return string
*/
function smarty_modifier_spacify($string, $spacify_char = ' ')
{
// well… what about charsets besides latin and UTF-8?
- return implode($spacify_char, preg_split('//' . Smarty::$_UTF8_MODIFIER, $string, -1, PREG_SPLIT_NO_EMPTY));
-}
-
-?> \ No newline at end of file
+ return implode($spacify_char, preg_split('//' . Smarty::$_UTF8_MODIFIER, $string, - 1, PREG_SPLIT_NO_EMPTY));
+}
diff --git a/library/Smarty/libs/plugins/modifier.truncate.php b/library/Smarty/libs/plugins/modifier.truncate.php
index 9a803ec99..fbe62e823 100644
--- a/library/Smarty/libs/plugins/modifier.truncate.php
+++ b/library/Smarty/libs/plugins/modifier.truncate.php
@@ -2,58 +2,63 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifier
*/
-
+
/**
* Smarty truncate modifier plugin
- *
* Type: modifier<br>
* Name: truncate<br>
* Purpose: Truncate a string to a certain length if necessary,
* optionally splitting in the middle of a word, and
* appending the $etc string or inserting $etc into the middle.
- *
- * @link http://smarty.php.net/manual/en/language.modifier.truncate.php truncate (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com>
+ *
+ * @link http://smarty.php.net/manual/en/language.modifier.truncate.php truncate (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com>
+ *
* @param string $string input string
* @param integer $length length of truncated text
* @param string $etc end string
* @param boolean $break_words truncate at word boundary
* @param boolean $middle truncate in the middle of text
+ *
* @return string truncated string
*/
-function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false) {
- if ($length == 0)
+function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false)
+{
+ if ($length == 0) {
return '';
+ }
if (Smarty::$_MBSTRING) {
if (mb_strlen($string, Smarty::$_CHARSET) > $length) {
$length -= min($length, mb_strlen($etc, Smarty::$_CHARSET));
if (!$break_words && !$middle) {
$string = preg_replace('/\s+?(\S+)?$/' . Smarty::$_UTF8_MODIFIER, '', mb_substr($string, 0, $length + 1, Smarty::$_CHARSET));
- }
+ }
if (!$middle) {
return mb_substr($string, 0, $length, Smarty::$_CHARSET) . $etc;
}
+
return mb_substr($string, 0, $length / 2, Smarty::$_CHARSET) . $etc . mb_substr($string, - $length / 2, $length, Smarty::$_CHARSET);
}
+
return $string;
}
-
+
// no MBString fallback
if (isset($string[$length])) {
$length -= min($length, strlen($etc));
if (!$break_words && !$middle) {
$string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length + 1));
- }
+ }
if (!$middle) {
return substr($string, 0, $length) . $etc;
}
+
return substr($string, 0, $length / 2) . $etc . substr($string, - $length / 2);
}
- return $string;
-}
-?> \ No newline at end of file
+ return $string;
+}
diff --git a/library/Smarty/libs/plugins/modifiercompiler.cat.php b/library/Smarty/libs/plugins/modifiercompiler.cat.php
index 1cfe6308a..db9d81fbf 100644
--- a/library/Smarty/libs/plugins/modifiercompiler.cat.php
+++ b/library/Smarty/libs/plugins/modifiercompiler.cat.php
@@ -1,30 +1,29 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-
-/**
- * Smarty cat modifier plugin
- *
- * Type: modifier<br>
- * Name: cat<br>
- * Date: Feb 24, 2003<br>
- * Purpose: catenate a value to a variable<br>
- * Input: string to catenate<br>
- * Example: {$var|cat:"foo"}
- *
- * @link http://smarty.php.net/manual/en/language.modifier.cat.php cat
- * (Smarty online manual)
- * @author Uwe Tews
- * @param array $params parameters
- * @return string with compiled code
- */
-function smarty_modifiercompiler_cat($params, $compiler)
-{
- return '('.implode(').(', $params).')';
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty cat modifier plugin
+ * Type: modifier<br>
+ * Name: cat<br>
+ * Date: Feb 24, 2003<br>
+ * Purpose: catenate a value to a variable<br>
+ * Input: string to catenate<br>
+ * Example: {$var|cat:"foo"}
+ *
+ * @link http://smarty.php.net/manual/en/language.modifier.cat.php cat
+ * (Smarty online manual)
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_cat($params)
+{
+ return '(' . implode(').(', $params) . ')';
+}
diff --git a/library/Smarty/libs/plugins/modifiercompiler.count_characters.php b/library/Smarty/libs/plugins/modifiercompiler.count_characters.php
index 98e8efa0d..f8463d80a 100644
--- a/library/Smarty/libs/plugins/modifiercompiler.count_characters.php
+++ b/library/Smarty/libs/plugins/modifiercompiler.count_characters.php
@@ -1,33 +1,32 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-
-/**
- * Smarty count_characters modifier plugin
- *
- * Type: modifier<br>
- * Name: count_characteres<br>
- * Purpose: count the number of characters in a text
- *
- * @link http://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual)
- * @author Uwe Tews
- * @param array $params parameters
- * @return string with compiled code
- */
-function smarty_modifiercompiler_count_characters($params, $compiler)
-{
- if (!isset($params[1]) || $params[1] != 'true') {
- return 'preg_match_all(\'/[^\s]/' . Smarty::$_UTF8_MODIFIER . '\',' . $params[0] . ', $tmp)';
- }
- if (Smarty::$_MBSTRING) {
- return 'mb_strlen(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')';
- }
- // no MBString fallback
- return 'strlen(' . $params[0] . ')';
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty count_characters modifier plugin
+ * Type: modifier<br>
+ * Name: count_characteres<br>
+ * Purpose: count the number of characters in a text
+ *
+ * @link http://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual)
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_count_characters($params)
+{
+ if (!isset($params[1]) || $params[1] != 'true') {
+ return 'preg_match_all(\'/[^\s]/' . Smarty::$_UTF8_MODIFIER . '\',' . $params[0] . ', $tmp)';
+ }
+ if (Smarty::$_MBSTRING) {
+ return 'mb_strlen(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')';
+ }
+ // no MBString fallback
+ return 'strlen(' . $params[0] . ')';
+}
diff --git a/library/Smarty/libs/plugins/modifiercompiler.count_paragraphs.php b/library/Smarty/libs/plugins/modifiercompiler.count_paragraphs.php
index 0e1b0af83..34f0bbb8a 100644
--- a/library/Smarty/libs/plugins/modifiercompiler.count_paragraphs.php
+++ b/library/Smarty/libs/plugins/modifiercompiler.count_paragraphs.php
@@ -1,28 +1,27 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-
-/**
- * Smarty count_paragraphs modifier plugin
- *
- * Type: modifier<br>
- * Name: count_paragraphs<br>
- * Purpose: count the number of paragraphs in a text
- *
- * @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php
- * count_paragraphs (Smarty online manual)
- * @author Uwe Tews
- * @param array $params parameters
- * @return string with compiled code
- */
-function smarty_modifiercompiler_count_paragraphs($params, $compiler)
-{
- // count \r or \n characters
- return '(preg_match_all(\'#[\r\n]+#\', ' . $params[0] . ', $tmp)+1)';
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty count_paragraphs modifier plugin
+ * Type: modifier<br>
+ * Name: count_paragraphs<br>
+ * Purpose: count the number of paragraphs in a text
+ *
+ * @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php
+ * count_paragraphs (Smarty online manual)
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_count_paragraphs($params)
+{
+ // count \r or \n characters
+ return '(preg_match_all(\'#[\r\n]+#\', ' . $params[0] . ', $tmp)+1)';
+}
diff --git a/library/Smarty/libs/plugins/modifiercompiler.count_sentences.php b/library/Smarty/libs/plugins/modifiercompiler.count_sentences.php
index 2f517be96..f1ec56007 100644
--- a/library/Smarty/libs/plugins/modifiercompiler.count_sentences.php
+++ b/library/Smarty/libs/plugins/modifiercompiler.count_sentences.php
@@ -1,28 +1,27 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-
-/**
- * Smarty count_sentences modifier plugin
- *
- * Type: modifier<br>
- * Name: count_sentences
- * Purpose: count the number of sentences in a text
- *
- * @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php
- * count_sentences (Smarty online manual)
- * @author Uwe Tews
- * @param array $params parameters
- * @return string with compiled code
- */
-function smarty_modifiercompiler_count_sentences($params, $compiler)
-{
- // find periods, question marks, exclamation marks with a word before but not after.
- return 'preg_match_all("#\w[\.\?\!](\W|$)#S' . Smarty::$_UTF8_MODIFIER . '", ' . $params[0] . ', $tmp)';
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty count_sentences modifier plugin
+ * Type: modifier<br>
+ * Name: count_sentences
+ * Purpose: count the number of sentences in a text
+ *
+ * @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php
+ * count_sentences (Smarty online manual)
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_count_sentences($params)
+{
+ // find periods, question marks, exclamation marks with a word before but not after.
+ return 'preg_match_all("#\w[\.\?\!](\W|$)#S' . Smarty::$_UTF8_MODIFIER . '", ' . $params[0] . ', $tmp)';
+}
diff --git a/library/Smarty/libs/plugins/modifiercompiler.count_words.php b/library/Smarty/libs/plugins/modifiercompiler.count_words.php
index e05738c01..8b4330f1e 100644
--- a/library/Smarty/libs/plugins/modifiercompiler.count_words.php
+++ b/library/Smarty/libs/plugins/modifiercompiler.count_words.php
@@ -1,32 +1,31 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-
-/**
- * Smarty count_words modifier plugin
- *
- * Type: modifier<br>
- * Name: count_words<br>
- * Purpose: count the number of words in a text
- *
- * @link http://www.smarty.net/manual/en/language.modifier.count.words.php count_words (Smarty online manual)
- * @author Uwe Tews
- * @param array $params parameters
- * @return string with compiled code
-*/
-function smarty_modifiercompiler_count_words($params, $compiler)
-{
- if (Smarty::$_MBSTRING) {
- // return 'preg_match_all(\'#[\w\pL]+#' . Smarty::$_UTF8_MODIFIER . '\', ' . $params[0] . ', $tmp)';
- // expression taken from http://de.php.net/manual/en/function.str-word-count.php#85592
- return 'preg_match_all(\'/\p{L}[\p{L}\p{Mn}\p{Pd}\\\'\x{2019}]*/' . Smarty::$_UTF8_MODIFIER . '\', ' . $params[0] . ', $tmp)';
- }
- // no MBString fallback
- return 'str_word_count(' . $params[0] . ')';
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty count_words modifier plugin
+ * Type: modifier<br>
+ * Name: count_words<br>
+ * Purpose: count the number of words in a text
+ *
+ * @link http://www.smarty.net/manual/en/language.modifier.count.words.php count_words (Smarty online manual)
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_count_words($params)
+{
+ if (Smarty::$_MBSTRING) {
+ // return 'preg_match_all(\'#[\w\pL]+#' . Smarty::$_UTF8_MODIFIER . '\', ' . $params[0] . ', $tmp)';
+ // expression taken from http://de.php.net/manual/en/function.str-word-count.php#85592
+ return 'preg_match_all(\'/\p{L}[\p{L}\p{Mn}\p{Pd}\\\'\x{2019}]*/' . Smarty::$_UTF8_MODIFIER . '\', ' . $params[0] . ', $tmp)';
+ }
+ // no MBString fallback
+ return 'str_word_count(' . $params[0] . ')';
+}
diff --git a/library/Smarty/libs/plugins/modifiercompiler.default.php b/library/Smarty/libs/plugins/modifiercompiler.default.php
index 4f831a589..fe777623e 100644
--- a/library/Smarty/libs/plugins/modifiercompiler.default.php
+++ b/library/Smarty/libs/plugins/modifiercompiler.default.php
@@ -1,35 +1,35 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-
-/**
- * Smarty default modifier plugin
- *
- * Type: modifier<br>
- * Name: default<br>
- * Purpose: designate default value for empty variables
- *
- * @link http://www.smarty.net/manual/en/language.modifier.default.php default (Smarty online manual)
- * @author Uwe Tews
- * @param array $params parameters
- * @return string with compiled code
- */
-function smarty_modifiercompiler_default ($params, $compiler)
-{
- $output = $params[0];
- if (!isset($params[1])) {
- $params[1] = "''";
- }
-
- array_shift($params);
- foreach ($params as $param) {
- $output = '(($tmp = @' . $output . ')===null||$tmp===\'\' ? ' . $param . ' : $tmp)';
- }
- return $output;
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty default modifier plugin
+ * Type: modifier<br>
+ * Name: default<br>
+ * Purpose: designate default value for empty variables
+ *
+ * @link http://www.smarty.net/manual/en/language.modifier.default.php default (Smarty online manual)
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_default($params)
+{
+ $output = $params[0];
+ if (!isset($params[1])) {
+ $params[1] = "''";
+ }
+
+ array_shift($params);
+ foreach ($params as $param) {
+ $output = '(($tmp = @' . $output . ')===null||$tmp===\'\' ? ' . $param . ' : $tmp)';
+ }
+
+ return $output;
+}
diff --git a/library/Smarty/libs/plugins/modifiercompiler.escape.php b/library/Smarty/libs/plugins/modifiercompiler.escape.php
index 48b74d140..7e848aaec 100644
--- a/library/Smarty/libs/plugins/modifiercompiler.escape.php
+++ b/library/Smarty/libs/plugins/modifiercompiler.escape.php
@@ -1,125 +1,126 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-
-/**
- * @ignore
- */
-require_once( SMARTY_PLUGINS_DIR .'shared.literal_compiler_param.php' );
-
-/**
- * Smarty escape modifier plugin
- *
- * Type: modifier<br>
- * Name: escape<br>
- * Purpose: escape string for output
- *
- * @link http://www.smarty.net/docsv2/en/language.modifier.escape count_characters (Smarty online manual)
- * @author Rodney Rehm
- * @param array $params parameters
- * @return string with compiled code
- */
-function smarty_modifiercompiler_escape($params, $compiler)
-{
- static $_double_encode = null;
- if ($_double_encode === null) {
- $_double_encode = version_compare(PHP_VERSION, '5.2.3', '>=');
- }
-
- try {
- $esc_type = smarty_literal_compiler_param($params, 1, 'html');
- $char_set = smarty_literal_compiler_param($params, 2, Smarty::$_CHARSET);
- $double_encode = smarty_literal_compiler_param($params, 3, true);
-
- if (!$char_set) {
- $char_set = Smarty::$_CHARSET;
- }
-
- switch ($esc_type) {
- case 'html':
- if ($_double_encode) {
- return 'htmlspecialchars('
- . $params[0] .', ENT_QUOTES, '
- . var_export($char_set, true) . ', '
- . var_export($double_encode, true) . ')';
- } else if ($double_encode) {
- return 'htmlspecialchars('
- . $params[0] .', ENT_QUOTES, '
- . var_export($char_set, true) . ')';
- } else {
- // fall back to modifier.escape.php
- }
-
- case 'htmlall':
- if (Smarty::$_MBSTRING) {
- if ($_double_encode) {
- // php >=5.3.2 - go native
- return 'mb_convert_encoding(htmlspecialchars('
- . $params[0] .', ENT_QUOTES, '
- . var_export($char_set, true) . ', '
- . var_export($double_encode, true)
- . '), "HTML-ENTITIES", '
- . var_export($char_set, true) . ')';
- } else if ($double_encode) {
- // php <5.3.2 - only handle double encoding
- return 'mb_convert_encoding(htmlspecialchars('
- . $params[0] .', ENT_QUOTES, '
- . var_export($char_set, true)
- . '), "HTML-ENTITIES", '
- . var_export($char_set, true) . ')';
- } else {
- // fall back to modifier.escape.php
- }
- }
-
- // no MBString fallback
- if ($_double_encode) {
- // php >=5.3.2 - go native
- return 'htmlentities('
- . $params[0] .', ENT_QUOTES, '
- . var_export($char_set, true) . ', '
- . var_export($double_encode, true) . ')';
- } else if ($double_encode) {
- // php <5.3.2 - only handle double encoding
- return 'htmlentities('
- . $params[0] .', ENT_QUOTES, '
- . var_export($char_set, true) . ')';
- } else {
- // fall back to modifier.escape.php
- }
-
- case 'url':
- return 'rawurlencode(' . $params[0] . ')';
-
- case 'urlpathinfo':
- return 'str_replace("%2F", "/", rawurlencode(' . $params[0] . '))';
-
- case 'quotes':
- // escape unescaped single quotes
- return 'preg_replace("%(?<!\\\\\\\\)\'%", "\\\'",' . $params[0] . ')';
-
- case 'javascript':
- // escape quotes and backslashes, newlines, etc.
- return 'strtr(' . $params[0] . ', array("\\\\" => "\\\\\\\\", "\'" => "\\\\\'", "\"" => "\\\\\"", "\\r" => "\\\\r", "\\n" => "\\\n", "</" => "<\/" ))';
-
- }
- } catch(SmartyException $e) {
- // pass through to regular plugin fallback
- }
-
- // could not optimize |escape call, so fallback to regular plugin
- if ($compiler->tag_nocache | $compiler->nocache) {
- $compiler->template->required_plugins['nocache']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR .'modifier.escape.php';
- $compiler->template->required_plugins['nocache']['escape']['modifier']['function'] = 'smarty_modifier_escape';
- } else {
- $compiler->template->required_plugins['compiled']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR .'modifier.escape.php';
- $compiler->template->required_plugins['compiled']['escape']['modifier']['function'] = 'smarty_modifier_escape';
- }
- return 'smarty_modifier_escape(' . join( ', ', $params ) . ')';
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * @ignore
+ */
+require_once(SMARTY_PLUGINS_DIR . 'shared.literal_compiler_param.php');
+
+/**
+ * Smarty escape modifier plugin
+ * Type: modifier<br>
+ * Name: escape<br>
+ * Purpose: escape string for output
+ *
+ * @link http://www.smarty.net/docsv2/en/language.modifier.escape count_characters (Smarty online manual)
+ * @author Rodney Rehm
+ *
+ * @param array $params parameters
+ * @param $compiler
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_escape($params, $compiler)
+{
+ static $_double_encode = null;
+ if ($_double_encode === null) {
+ $_double_encode = version_compare(PHP_VERSION, '5.2.3', '>=');
+ }
+
+ try {
+ $esc_type = smarty_literal_compiler_param($params, 1, 'html');
+ $char_set = smarty_literal_compiler_param($params, 2, Smarty::$_CHARSET);
+ $double_encode = smarty_literal_compiler_param($params, 3, true);
+
+ if (!$char_set) {
+ $char_set = Smarty::$_CHARSET;
+ }
+
+ switch ($esc_type) {
+ case 'html':
+ if ($_double_encode) {
+ return 'htmlspecialchars('
+ . $params[0] . ', ENT_QUOTES, '
+ . var_export($char_set, true) . ', '
+ . var_export($double_encode, true) . ')';
+ } elseif ($double_encode) {
+ return 'htmlspecialchars('
+ . $params[0] . ', ENT_QUOTES, '
+ . var_export($char_set, true) . ')';
+ } else {
+ // fall back to modifier.escape.php
+ }
+
+ case 'htmlall':
+ if (Smarty::$_MBSTRING) {
+ if ($_double_encode) {
+ // php >=5.2.3 - go native
+ return 'mb_convert_encoding(htmlspecialchars('
+ . $params[0] . ', ENT_QUOTES, '
+ . var_export($char_set, true) . ', '
+ . var_export($double_encode, true)
+ . '), "HTML-ENTITIES", '
+ . var_export($char_set, true) . ')';
+ } elseif ($double_encode) {
+ // php <5.2.3 - only handle double encoding
+ return 'mb_convert_encoding(htmlspecialchars('
+ . $params[0] . ', ENT_QUOTES, '
+ . var_export($char_set, true)
+ . '), "HTML-ENTITIES", '
+ . var_export($char_set, true) . ')';
+ } else {
+ // fall back to modifier.escape.php
+ }
+ }
+
+ // no MBString fallback
+ if ($_double_encode) {
+ // php >=5.2.3 - go native
+ return 'htmlentities('
+ . $params[0] . ', ENT_QUOTES, '
+ . var_export($char_set, true) . ', '
+ . var_export($double_encode, true) . ')';
+ } elseif ($double_encode) {
+ // php <5.2.3 - only handle double encoding
+ return 'htmlentities('
+ . $params[0] . ', ENT_QUOTES, '
+ . var_export($char_set, true) . ')';
+ } else {
+ // fall back to modifier.escape.php
+ }
+
+ case 'url':
+ return 'rawurlencode(' . $params[0] . ')';
+
+ case 'urlpathinfo':
+ return 'str_replace("%2F", "/", rawurlencode(' . $params[0] . '))';
+
+ case 'quotes':
+ // escape unescaped single quotes
+ return 'preg_replace("%(?<!\\\\\\\\)\'%", "\\\'",' . $params[0] . ')';
+
+ case 'javascript':
+ // escape quotes and backslashes, newlines, etc.
+ return 'strtr(' . $params[0] . ', array("\\\\" => "\\\\\\\\", "\'" => "\\\\\'", "\"" => "\\\\\"", "\\r" => "\\\\r", "\\n" => "\\\n", "</" => "<\/" ))';
+ }
+ }
+ catch (SmartyException $e) {
+ // pass through to regular plugin fallback
+ }
+
+ // could not optimize |escape call, so fallback to regular plugin
+ if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) {
+ $compiler->template->required_plugins['nocache']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'modifier.escape.php';
+ $compiler->template->required_plugins['nocache']['escape']['modifier']['function'] = 'smarty_modifier_escape';
+ } else {
+ $compiler->template->required_plugins['compiled']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'modifier.escape.php';
+ $compiler->template->required_plugins['compiled']['escape']['modifier']['function'] = 'smarty_modifier_escape';
+ }
+
+ return 'smarty_modifier_escape(' . join(', ', $params) . ')';
+}
diff --git a/library/Smarty/libs/plugins/modifiercompiler.from_charset.php b/library/Smarty/libs/plugins/modifiercompiler.from_charset.php
index 93b568a5a..dab43e9c3 100644
--- a/library/Smarty/libs/plugins/modifiercompiler.from_charset.php
+++ b/library/Smarty/libs/plugins/modifiercompiler.from_charset.php
@@ -1,34 +1,33 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-
-/**
- * Smarty from_charset modifier plugin
- *
- * Type: modifier<br>
- * Name: from_charset<br>
- * Purpose: convert character encoding from $charset to internal encoding
- *
- * @author Rodney Rehm
- * @param array $params parameters
- * @return string with compiled code
- */
-function smarty_modifiercompiler_from_charset($params, $compiler)
-{
- if (!Smarty::$_MBSTRING) {
- // FIXME: (rodneyrehm) shouldn't this throw an error?
- return $params[0];
- }
-
- if (!isset($params[1])) {
- $params[1] = '"ISO-8859-1"';
- }
-
- return 'mb_convert_encoding(' . $params[0] . ', "' . addslashes(Smarty::$_CHARSET) . '", ' . $params[1] . ')';
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty from_charset modifier plugin
+ * Type: modifier<br>
+ * Name: from_charset<br>
+ * Purpose: convert character encoding from $charset to internal encoding
+ *
+ * @author Rodney Rehm
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_from_charset($params)
+{
+ if (!Smarty::$_MBSTRING) {
+ // FIXME: (rodneyrehm) shouldn't this throw an error?
+ return $params[0];
+ }
+
+ if (!isset($params[1])) {
+ $params[1] = '"ISO-8859-1"';
+ }
+
+ return 'mb_convert_encoding(' . $params[0] . ', "' . addslashes(Smarty::$_CHARSET) . '", ' . $params[1] . ')';
+}
diff --git a/library/Smarty/libs/plugins/modifiercompiler.indent.php b/library/Smarty/libs/plugins/modifiercompiler.indent.php
index 020c4fdb3..e3ca20821 100644
--- a/library/Smarty/libs/plugins/modifiercompiler.indent.php
+++ b/library/Smarty/libs/plugins/modifiercompiler.indent.php
@@ -1,32 +1,33 @@
-<?php
-/**
- * Smarty plugin
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-
-/**
- * Smarty indent modifier plugin
- *
- * Type: modifier<br>
- * Name: indent<br>
- * Purpose: indent lines of text
- *
- * @link http://www.smarty.net/manual/en/language.modifier.indent.php indent (Smarty online manual)
- * @author Uwe Tews
- * @param array $params parameters
- * @return string with compiled code
- */
-
-function smarty_modifiercompiler_indent($params, $compiler)
-{
- if (!isset($params[1])) {
- $params[1] = 4;
- }
- if (!isset($params[2])) {
- $params[2] = "' '";
- }
- return 'preg_replace(\'!^!m\',str_repeat(' . $params[2] . ',' . $params[1] . '),' . $params[0] . ')';
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty indent modifier plugin
+ * Type: modifier<br>
+ * Name: indent<br>
+ * Purpose: indent lines of text
+ *
+ * @link http://www.smarty.net/manual/en/language.modifier.indent.php indent (Smarty online manual)
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+
+function smarty_modifiercompiler_indent($params)
+{
+ if (!isset($params[1])) {
+ $params[1] = 4;
+ }
+ if (!isset($params[2])) {
+ $params[2] = "' '";
+ }
+
+ return 'preg_replace(\'!^!m\',str_repeat(' . $params[2] . ',' . $params[1] . '),' . $params[0] . ')';
+}
diff --git a/library/Smarty/libs/plugins/modifiercompiler.lower.php b/library/Smarty/libs/plugins/modifiercompiler.lower.php
index 1845cc1d2..1d255f371 100644
--- a/library/Smarty/libs/plugins/modifiercompiler.lower.php
+++ b/library/Smarty/libs/plugins/modifiercompiler.lower.php
@@ -1,31 +1,31 @@
-<?php
-/**
- * Smarty plugin
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-
-/**
- * Smarty lower modifier plugin
- *
- * Type: modifier<br>
- * Name: lower<br>
- * Purpose: convert string to lowercase
- *
- * @link http://www.smarty.net/manual/en/language.modifier.lower.php lower (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author Uwe Tews
- * @param array $params parameters
- * @return string with compiled code
- */
-
-function smarty_modifiercompiler_lower($params, $compiler)
-{
- if (Smarty::$_MBSTRING) {
- return 'mb_strtolower(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')' ;
- }
- // no MBString fallback
- return 'strtolower(' . $params[0] . ')';
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty lower modifier plugin
+ * Type: modifier<br>
+ * Name: lower<br>
+ * Purpose: convert string to lowercase
+ *
+ * @link http://www.smarty.net/manual/en/language.modifier.lower.php lower (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+
+function smarty_modifiercompiler_lower($params)
+{
+ if (Smarty::$_MBSTRING) {
+ return 'mb_strtolower(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')';
+ }
+ // no MBString fallback
+ return 'strtolower(' . $params[0] . ')';
+}
diff --git a/library/Smarty/libs/plugins/modifiercompiler.noprint.php b/library/Smarty/libs/plugins/modifiercompiler.noprint.php
index 3ca26571a..4906908b4 100644
--- a/library/Smarty/libs/plugins/modifiercompiler.noprint.php
+++ b/library/Smarty/libs/plugins/modifiercompiler.noprint.php
@@ -1,25 +1,21 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-
-/**
- * Smarty noprint modifier plugin
- *
- * Type: modifier<br>
- * Name: noprint<br>
- * Purpose: return an empty string
- *
- * @author Uwe Tews
- * @param array $params parameters
- * @return string with compiled code
- */
-function smarty_modifiercompiler_noprint($params, $compiler)
-{
- return "''";
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty noprint modifier plugin
+ * Type: modifier<br>
+ * Name: noprint<br>
+ * Purpose: return an empty string
+ *
+ * @author Uwe Tews
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_noprint()
+{
+ return "''";
+}
diff --git a/library/Smarty/libs/plugins/modifiercompiler.string_format.php b/library/Smarty/libs/plugins/modifiercompiler.string_format.php
index 83345977b..71cdf2819 100644
--- a/library/Smarty/libs/plugins/modifiercompiler.string_format.php
+++ b/library/Smarty/libs/plugins/modifiercompiler.string_format.php
@@ -1,26 +1,25 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-
-/**
- * Smarty string_format modifier plugin
- *
- * Type: modifier<br>
- * Name: string_format<br>
- * Purpose: format strings via sprintf
- *
- * @link http://www.smarty.net/manual/en/language.modifier.string.format.php string_format (Smarty online manual)
- * @author Uwe Tews
- * @param array $params parameters
- * @return string with compiled code
- */
-function smarty_modifiercompiler_string_format($params, $compiler)
-{
- return 'sprintf(' . $params[1] . ',' . $params[0] . ')';
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty string_format modifier plugin
+ * Type: modifier<br>
+ * Name: string_format<br>
+ * Purpose: format strings via sprintf
+ *
+ * @link http://www.smarty.net/manual/en/language.modifier.string.format.php string_format (Smarty online manual)
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_string_format($params)
+{
+ return 'sprintf(' . $params[1] . ',' . $params[0] . ')';
+}
diff --git a/library/Smarty/libs/plugins/modifiercompiler.strip.php b/library/Smarty/libs/plugins/modifiercompiler.strip.php
index f1d5db045..fcd6cbaea 100644
--- a/library/Smarty/libs/plugins/modifiercompiler.strip.php
+++ b/library/Smarty/libs/plugins/modifiercompiler.strip.php
@@ -1,33 +1,33 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-
-/**
- * Smarty strip modifier plugin
- *
- * Type: modifier<br>
- * Name: strip<br>
- * Purpose: Replace all repeated spaces, newlines, tabs
- * with a single space or supplied replacement string.<br>
- * Example: {$var|strip} {$var|strip:"&nbsp;"}<br>
- * Date: September 25th, 2002
- *
- * @link http://www.smarty.net/manual/en/language.modifier.strip.php strip (Smarty online manual)
- * @author Uwe Tews
- * @param array $params parameters
- * @return string with compiled code
- */
-
-function smarty_modifiercompiler_strip($params, $compiler)
-{
- if (!isset($params[1])) {
- $params[1] = "' '";
- }
- return "preg_replace('!\s+!" . Smarty::$_UTF8_MODIFIER . "', {$params[1]},{$params[0]})";
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty strip modifier plugin
+ * Type: modifier<br>
+ * Name: strip<br>
+ * Purpose: Replace all repeated spaces, newlines, tabs
+ * with a single space or supplied replacement string.<br>
+ * Example: {$var|strip} {$var|strip:"&nbsp;"}<br>
+ * Date: September 25th, 2002
+ *
+ * @link http://www.smarty.net/manual/en/language.modifier.strip.php strip (Smarty online manual)
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+
+function smarty_modifiercompiler_strip($params)
+{
+ if (!isset($params[1])) {
+ $params[1] = "' '";
+ }
+
+ return "preg_replace('!\s+!" . Smarty::$_UTF8_MODIFIER . "', {$params[1]},{$params[0]})";
+}
diff --git a/library/Smarty/libs/plugins/modifiercompiler.strip_tags.php b/library/Smarty/libs/plugins/modifiercompiler.strip_tags.php
index 296a3a2da..3e6e13048 100644
--- a/library/Smarty/libs/plugins/modifiercompiler.strip_tags.php
+++ b/library/Smarty/libs/plugins/modifiercompiler.strip_tags.php
@@ -1,33 +1,29 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-
-/**
- * Smarty strip_tags modifier plugin
- *
- * Type: modifier<br>
- * Name: strip_tags<br>
- * Purpose: strip html tags from text
- *
- * @link http://www.smarty.net/manual/en/language.modifier.strip.tags.php strip_tags (Smarty online manual)
- * @author Uwe Tews
- * @param array $params parameters
- * @return string with compiled code
- */
-function smarty_modifiercompiler_strip_tags($params, $compiler)
-{
- if (!isset($params[1])) {
- $params[1] = true;
- }
- if ($params[1] === true) {
- return "preg_replace('!<[^>]*?>!', ' ', {$params[0]})";
- } else {
- return 'strip_tags(' . $params[0] . ')';
- }
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty strip_tags modifier plugin
+ * Type: modifier<br>
+ * Name: strip_tags<br>
+ * Purpose: strip html tags from text
+ *
+ * @link http://www.smarty.net/manual/en/language.modifier.strip.tags.php strip_tags (Smarty online manual)
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_strip_tags($params)
+{
+ if (!isset($params[1]) || $params[1] === true || trim($params[1], '"') == 'true') {
+ return "preg_replace('!<[^>]*?>!', ' ', {$params[0]})";
+ } else {
+ return 'strip_tags(' . $params[0] . ')';
+ }
+}
diff --git a/library/Smarty/libs/plugins/modifiercompiler.to_charset.php b/library/Smarty/libs/plugins/modifiercompiler.to_charset.php
index f5cdf455f..9122d8bbb 100644
--- a/library/Smarty/libs/plugins/modifiercompiler.to_charset.php
+++ b/library/Smarty/libs/plugins/modifiercompiler.to_charset.php
@@ -1,34 +1,33 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-
-/**
- * Smarty to_charset modifier plugin
- *
- * Type: modifier<br>
- * Name: to_charset<br>
- * Purpose: convert character encoding from internal encoding to $charset
- *
- * @author Rodney Rehm
- * @param array $params parameters
- * @return string with compiled code
- */
-function smarty_modifiercompiler_to_charset($params, $compiler)
-{
- if (!Smarty::$_MBSTRING) {
- // FIXME: (rodneyrehm) shouldn't this throw an error?
- return $params[0];
- }
-
- if (!isset($params[1])) {
- $params[1] = '"ISO-8859-1"';
- }
-
- return 'mb_convert_encoding(' . $params[0] . ', ' . $params[1] . ', "' . addslashes(Smarty::$_CHARSET) . '")';
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty to_charset modifier plugin
+ * Type: modifier<br>
+ * Name: to_charset<br>
+ * Purpose: convert character encoding from internal encoding to $charset
+ *
+ * @author Rodney Rehm
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_to_charset($params)
+{
+ if (!Smarty::$_MBSTRING) {
+ // FIXME: (rodneyrehm) shouldn't this throw an error?
+ return $params[0];
+ }
+
+ if (!isset($params[1])) {
+ $params[1] = '"ISO-8859-1"';
+ }
+
+ return 'mb_convert_encoding(' . $params[0] . ', ' . $params[1] . ', "' . addslashes(Smarty::$_CHARSET) . '")';
+}
diff --git a/library/Smarty/libs/plugins/modifiercompiler.unescape.php b/library/Smarty/libs/plugins/modifiercompiler.unescape.php
index 4321ff18d..3b17ea2e1 100644
--- a/library/Smarty/libs/plugins/modifiercompiler.unescape.php
+++ b/library/Smarty/libs/plugins/modifiercompiler.unescape.php
@@ -1,51 +1,50 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-
-/**
- * Smarty unescape modifier plugin
- *
- * Type: modifier<br>
- * Name: unescape<br>
- * Purpose: unescape html entities
- *
- * @author Rodney Rehm
- * @param array $params parameters
- * @return string with compiled code
- */
-function smarty_modifiercompiler_unescape($params, $compiler)
-{
- if (!isset($params[1])) {
- $params[1] = 'html';
- }
- if (!isset($params[2])) {
- $params[2] = '\'' . addslashes(Smarty::$_CHARSET) . '\'';
- } else {
- $params[2] = "'" . $params[2] . "'";
- }
-
- switch (trim($params[1], '"\'')) {
- case 'entity':
- case 'htmlall':
- if (Smarty::$_MBSTRING) {
- return 'mb_convert_encoding(' . $params[0] . ', ' . $params[2] . ', \'HTML-ENTITIES\')';
- }
-
- return 'html_entity_decode(' . $params[0] . ', ENT_NOQUOTES, ' . $params[2] . ')';
-
- case 'html':
- return 'htmlspecialchars_decode(' . $params[0] . ', ENT_QUOTES)';
-
- case 'url':
- return 'rawurldecode(' . $params[0] . ')';
-
- default:
- return $params[0];
- }
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty unescape modifier plugin
+ * Type: modifier<br>
+ * Name: unescape<br>
+ * Purpose: unescape html entities
+ *
+ * @author Rodney Rehm
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_unescape($params)
+{
+ if (!isset($params[1])) {
+ $params[1] = 'html';
+ }
+ if (!isset($params[2])) {
+ $params[2] = '\'' . addslashes(Smarty::$_CHARSET) . '\'';
+ } else {
+ $params[2] = "'" . $params[2] . "'";
+ }
+
+ switch (trim($params[1], '"\'')) {
+ case 'entity':
+ case 'htmlall':
+ if (Smarty::$_MBSTRING) {
+ return 'mb_convert_encoding(' . $params[0] . ', ' . $params[2] . ', \'HTML-ENTITIES\')';
+ }
+
+ return 'html_entity_decode(' . $params[0] . ', ENT_NOQUOTES, ' . $params[2] . ')';
+
+ case 'html':
+ return 'htmlspecialchars_decode(' . $params[0] . ', ENT_QUOTES)';
+
+ case 'url':
+ return 'rawurldecode(' . $params[0] . ')';
+
+ default:
+ return $params[0];
+ }
+}
diff --git a/library/Smarty/libs/plugins/modifiercompiler.upper.php b/library/Smarty/libs/plugins/modifiercompiler.upper.php
index f368e37dc..52ca4e8ff 100644
--- a/library/Smarty/libs/plugins/modifiercompiler.upper.php
+++ b/library/Smarty/libs/plugins/modifiercompiler.upper.php
@@ -1,30 +1,29 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-
-/**
- * Smarty upper modifier plugin
- *
- * Type: modifier<br>
- * Name: lower<br>
- * Purpose: convert string to uppercase
- *
- * @link http://smarty.php.net/manual/en/language.modifier.upper.php lower (Smarty online manual)
- * @author Uwe Tews
- * @param array $params parameters
- * @return string with compiled code
- */
-function smarty_modifiercompiler_upper($params, $compiler)
-{
- if (Smarty::$_MBSTRING) {
- return 'mb_strtoupper(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')' ;
- }
- // no MBString fallback
- return 'strtoupper(' . $params[0] . ')';
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty upper modifier plugin
+ * Type: modifier<br>
+ * Name: lower<br>
+ * Purpose: convert string to uppercase
+ *
+ * @link http://smarty.php.net/manual/en/language.modifier.upper.php lower (Smarty online manual)
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_upper($params)
+{
+ if (Smarty::$_MBSTRING) {
+ return 'mb_strtoupper(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')';
+ }
+ // no MBString fallback
+ return 'strtoupper(' . $params[0] . ')';
+}
diff --git a/library/Smarty/libs/plugins/modifiercompiler.wordwrap.php b/library/Smarty/libs/plugins/modifiercompiler.wordwrap.php
index f6845ad37..2ad928ea1 100644
--- a/library/Smarty/libs/plugins/modifiercompiler.wordwrap.php
+++ b/library/Smarty/libs/plugins/modifiercompiler.wordwrap.php
@@ -1,46 +1,47 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-
-/**
- * Smarty wordwrap modifier plugin
- *
- * Type: modifier<br>
- * Name: wordwrap<br>
- * Purpose: wrap a string of text at a given length
- *
- * @link http://smarty.php.net/manual/en/language.modifier.wordwrap.php wordwrap (Smarty online manual)
- * @author Uwe Tews
- * @param array $params parameters
- * @return string with compiled code
- */
-function smarty_modifiercompiler_wordwrap($params, $compiler)
-{
- if (!isset($params[1])) {
- $params[1] = 80;
- }
- if (!isset($params[2])) {
- $params[2] = '"\n"';
- }
- if (!isset($params[3])) {
- $params[3] = 'false';
- }
- $function = 'wordwrap';
- if (Smarty::$_MBSTRING) {
- if ($compiler->tag_nocache | $compiler->nocache) {
- $compiler->template->required_plugins['nocache']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR .'shared.mb_wordwrap.php';
- $compiler->template->required_plugins['nocache']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap';
- } else {
- $compiler->template->required_plugins['compiled']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR .'shared.mb_wordwrap.php';
- $compiler->template->required_plugins['compiled']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap';
- }
- $function = 'smarty_mb_wordwrap';
- }
- return $function . '(' . $params[0] . ',' . $params[1] . ',' . $params[2] . ',' . $params[3] . ')';
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty wordwrap modifier plugin
+ * Type: modifier<br>
+ * Name: wordwrap<br>
+ * Purpose: wrap a string of text at a given length
+ *
+ * @link http://smarty.php.net/manual/en/language.modifier.wordwrap.php wordwrap (Smarty online manual)
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ * @param $compiler
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_wordwrap($params, $compiler)
+{
+ if (!isset($params[1])) {
+ $params[1] = 80;
+ }
+ if (!isset($params[2])) {
+ $params[2] = '"\n"';
+ }
+ if (!isset($params[3])) {
+ $params[3] = 'false';
+ }
+ $function = 'wordwrap';
+ if (Smarty::$_MBSTRING) {
+ if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) {
+ $compiler->template->required_plugins['nocache']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php';
+ $compiler->template->required_plugins['nocache']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap';
+ } else {
+ $compiler->template->required_plugins['compiled']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php';
+ $compiler->template->required_plugins['compiled']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap';
+ }
+ $function = 'smarty_mb_wordwrap';
+ }
+
+ return $function . '(' . $params[0] . ',' . $params[1] . ',' . $params[2] . ',' . $params[3] . ')';
+}
diff --git a/library/Smarty/libs/plugins/outputfilter.trimwhitespace.php b/library/Smarty/libs/plugins/outputfilter.trimwhitespace.php
index 87cf8c781..62ab4e776 100644
--- a/library/Smarty/libs/plugins/outputfilter.trimwhitespace.php
+++ b/library/Smarty/libs/plugins/outputfilter.trimwhitespace.php
@@ -2,22 +2,22 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsFilter
*/
/**
* Smarty trimwhitespace outputfilter plugin
- *
* Trim unnecessary whitespace from HTML markup.
*
* @author Rodney Rehm
- * @param string $source input string
- * @param Smarty_Internal_Template $smarty Smarty object
+ *
+ * @param string $source input string
+ *
* @return string filtered output
- * @todo substr_replace() is not overloaded by mbstring.func_overload - so this function might fail!
+ * @todo substr_replace() is not overloaded by mbstring.func_overload - so this function might fail!
*/
-function smarty_outputfilter_trimwhitespace($source, Smarty_Internal_Template $smarty)
+function smarty_outputfilter_trimwhitespace($source)
{
$store = array();
$_store = 0;
@@ -35,13 +35,13 @@ function smarty_outputfilter_trimwhitespace($source, Smarty_Internal_Template $s
$source = substr_replace($source, $replace, $match[0][1] - $_offset, $_length);
$_offset += $_length - strlen($replace);
- $_store++;
+ $_store ++;
}
}
// Strip all HTML-Comments
// yes, even the ones in <script> - see http://stackoverflow.com/a/808850/515124
- $source = preg_replace( '#<!--.*?-->#ms', '', $source );
+ $source = preg_replace('#<!--.*?-->#ms', '', $source);
// capture html elements not to be messed with
$_offset = 0;
@@ -53,42 +53,38 @@ function smarty_outputfilter_trimwhitespace($source, Smarty_Internal_Template $s
$source = substr_replace($source, $replace, $match[0][1] - $_offset, $_length);
$_offset += $_length - strlen($replace);
- $_store++;
+ $_store ++;
}
}
$expressions = array(
// replace multiple spaces between tags by a single space
// can't remove them entirely, becaue that might break poorly implemented CSS display:inline-block elements
- '#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1 \2',
+ '#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1 \2',
// remove spaces between attributes (but not in attribute values!)
'#(([a-z0-9]\s*=\s*(["\'])[^\3]*?\3)|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \4',
// note: for some very weird reason trim() seems to remove spaces inside attributes.
// maybe a \0 byte or something is interfering?
- '#^\s+<#Ss' => '<',
- '#>\s+$#Ss' => '>',
+ '#^\s+<#Ss' => '<',
+ '#>\s+$#Ss' => '>',
);
- $source = preg_replace( array_keys($expressions), array_values($expressions), $source );
+ $source = preg_replace(array_keys($expressions), array_values($expressions), $source);
// note: for some very weird reason trim() seems to remove spaces inside attributes.
// maybe a \0 byte or something is interfering?
// $source = trim( $source );
- // capture html elements not to be messed with
$_offset = 0;
if (preg_match_all('#@!@SMARTY:([0-9]+):SMARTY@!@#is', $source, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
foreach ($matches as $match) {
- $store[] = $match[0][0];
$_length = strlen($match[0][0]);
- $replace = array_shift($store);
+ $replace = $store[$match[1][0]];
$source = substr_replace($source, $replace, $match[0][1] + $_offset, $_length);
$_offset += strlen($replace) - $_length;
- $_store++;
+ $_store ++;
}
}
return $source;
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/plugins/shared.escape_special_chars.php b/library/Smarty/libs/plugins/shared.escape_special_chars.php
index d2609b674..d3bd756b1 100644
--- a/library/Smarty/libs/plugins/shared.escape_special_chars.php
+++ b/library/Smarty/libs/plugins/shared.escape_special_chars.php
@@ -2,20 +2,21 @@
/**
* Smarty shared plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsShared
*/
if (version_compare(PHP_VERSION, '5.2.3', '>=')) {
/**
* escape_special_chars common function
- *
* Function: smarty_function_escape_special_chars<br>
* Purpose: used by other smarty functions to escape
* special chars except for already escaped ones
*
* @author Monte Ohrt <monte at ohrt dot com>
- * @param string $string text that should by escaped
+ *
+ * @param string $string text that should by escaped
+ *
* @return string
*/
function smarty_function_escape_special_chars($string)
@@ -23,18 +24,20 @@ if (version_compare(PHP_VERSION, '5.2.3', '>=')) {
if (!is_array($string)) {
$string = htmlspecialchars($string, ENT_COMPAT, Smarty::$_CHARSET, false);
}
+
return $string;
- }
-} else {
+ }
+} else {
/**
* escape_special_chars common function
- *
* Function: smarty_function_escape_special_chars<br>
* Purpose: used by other smarty functions to escape
* special chars except for already escaped ones
*
* @author Monte Ohrt <monte at ohrt dot com>
- * @param string $string text that should by escaped
+ *
+ * @param string $string text that should by escaped
+ *
* @return string
*/
function smarty_function_escape_special_chars($string)
@@ -42,10 +45,9 @@ if (version_compare(PHP_VERSION, '5.2.3', '>=')) {
if (!is_array($string)) {
$string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
$string = htmlspecialchars($string);
- $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string);
+ $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string);
}
- return $string;
- }
-}
-?> \ No newline at end of file
+ return $string;
+ }
+}
diff --git a/library/Smarty/libs/plugins/shared.literal_compiler_param.php b/library/Smarty/libs/plugins/shared.literal_compiler_param.php
index dbcd9374c..47d728a76 100644
--- a/library/Smarty/libs/plugins/shared.literal_compiler_param.php
+++ b/library/Smarty/libs/plugins/shared.literal_compiler_param.php
@@ -2,7 +2,7 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsShared
*/
@@ -12,22 +12,24 @@
* @param array $params parameter array as given to the compiler function
* @param integer $index array index of the parameter to convert
* @param mixed $default value to be returned if the parameter is not present
+ *
* @return mixed evaluated value of parameter or $default
* @throws SmartyException if parameter is not a literal (but an expression, variable, …)
* @author Rodney Rehm
*/
-function smarty_literal_compiler_param($params, $index, $default=null)
+function smarty_literal_compiler_param($params, $index, $default = null)
{
// not set, go default
if (!isset($params[$index])) {
return $default;
}
// test if param is a literal
- if (!preg_match('/^([\'"]?)[a-zA-Z0-9]+(\\1)$/', $params[$index])) {
+ if (!preg_match('/^([\'"]?)[a-zA-Z0-9-]+(\\1)$/', $params[$index])) {
throw new SmartyException('$param[' . $index . '] is not a literal and is thus not evaluatable at compile time');
}
$t = null;
eval("\$t = " . $params[$index] . ";");
+
return $t;
}
diff --git a/library/Smarty/libs/plugins/shared.make_timestamp.php b/library/Smarty/libs/plugins/shared.make_timestamp.php
index 5d7c97e91..7c94e5f59 100644
--- a/library/Smarty/libs/plugins/shared.make_timestamp.php
+++ b/library/Smarty/libs/plugins/shared.make_timestamp.php
@@ -2,7 +2,7 @@
/**
* Smarty shared plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsShared
*/
@@ -11,7 +11,9 @@
* Purpose: used by other smarty functions to make a timestamp from a string.
*
* @author Monte Ohrt <monte at ohrt dot com>
- * @param DateTime|int|string $string date object, timestamp or string that can be converted using strtotime()
+ *
+ * @param DateTime|int|string $string date object, timestamp or string that can be converted using strtotime()
+ *
* @return int
*/
function smarty_make_timestamp($string)
@@ -23,20 +25,19 @@ function smarty_make_timestamp($string)
return $string->getTimestamp();
} elseif (strlen($string) == 14 && ctype_digit($string)) {
// it is mysql timestamp format of YYYYMMDDHHMMSS?
- return mktime(substr($string, 8, 2),substr($string, 10, 2),substr($string, 12, 2),
- substr($string, 4, 2),substr($string, 6, 2),substr($string, 0, 4));
+ return mktime(substr($string, 8, 2), substr($string, 10, 2), substr($string, 12, 2),
+ substr($string, 4, 2), substr($string, 6, 2), substr($string, 0, 4));
} elseif (is_numeric($string)) {
// it is a numeric string, we handle it as timestamp
return (int) $string;
} else {
// strtotime should handle it
$time = strtotime($string);
- if ($time == -1 || $time === false) {
+ if ($time == - 1 || $time === false) {
// strtotime() was not able to parse $string, use "now":
return time();
}
+
return $time;
}
}
-
-?>
diff --git a/library/Smarty/libs/plugins/shared.mb_str_replace.php b/library/Smarty/libs/plugins/shared.mb_str_replace.php
index ecafeb74a..a5682ed30 100644
--- a/library/Smarty/libs/plugins/shared.mb_str_replace.php
+++ b/library/Smarty/libs/plugins/shared.mb_str_replace.php
@@ -2,7 +2,7 @@
/**
* Smarty shared plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsShared
*/
if (!function_exists('smarty_mb_str_replace')) {
@@ -10,14 +10,15 @@ if (!function_exists('smarty_mb_str_replace')) {
/**
* Multibyte string replace
*
- * @param string $search the string to be searched
- * @param string $replace the replacement string
- * @param string $subject the source string
- * @param int &$count number of matches found
+ * @param string $search the string to be searched
+ * @param string $replace the replacement string
+ * @param string $subject the source string
+ * @param int &$count number of matches found
+ *
* @return string replaced string
* @author Rodney Rehm
*/
- function smarty_mb_str_replace($search, $replace, $subject, &$count=0)
+ function smarty_mb_str_replace($search, $replace, $subject, &$count = 0)
{
if (!is_array($search) && is_array($replace)) {
return false;
@@ -25,7 +26,7 @@ if (!function_exists('smarty_mb_str_replace')) {
if (is_array($subject)) {
// call mb_replace for each single string in $subject
foreach ($subject as &$string) {
- $string = &smarty_mb_str_replace($search, $replace, $string, $c);
+ $string = & smarty_mb_str_replace($search, $replace, $string, $c);
$count += $c;
}
} elseif (is_array($search)) {
@@ -36,7 +37,7 @@ if (!function_exists('smarty_mb_str_replace')) {
}
} else {
$n = max(count($search), count($replace));
- while ($n--) {
+ while ($n --) {
$subject = smarty_mb_str_replace(current($search), current($replace), $subject, $c);
$count += $c;
next($search);
@@ -48,8 +49,7 @@ if (!function_exists('smarty_mb_str_replace')) {
$count = count($parts) - 1;
$subject = implode($replace, $parts);
}
+
return $subject;
}
-
}
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/plugins/shared.mb_unicode.php b/library/Smarty/libs/plugins/shared.mb_unicode.php
index e7f839ec8..0f790b56a 100644
--- a/library/Smarty/libs/plugins/shared.mb_unicode.php
+++ b/library/Smarty/libs/plugins/shared.mb_unicode.php
@@ -2,47 +2,53 @@
/**
* Smarty shared plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsShared
*/
/**
* convert characters to their decimal unicode equivalents
*
- * @link http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration
+ * @link http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration
+ *
* @param string $string characters to calculate unicode of
* @param string $encoding encoding of $string, if null mb_internal_encoding() is used
+ *
* @return array sequence of unicodes
* @author Rodney Rehm
*/
-function smarty_mb_to_unicode($string, $encoding=null) {
+function smarty_mb_to_unicode($string, $encoding = null)
+{
if ($encoding) {
$expanded = mb_convert_encoding($string, "UTF-32BE", $encoding);
} else {
$expanded = mb_convert_encoding($string, "UTF-32BE");
}
+
return unpack("N*", $expanded);
}
/**
* convert unicodes to the character of given encoding
*
- * @link http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration
+ * @link http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration
+ *
* @param integer|array $unicode single unicode or list of unicodes to convert
* @param string $encoding encoding of returned string, if null mb_internal_encoding() is used
+ *
* @return string unicode as character sequence in given $encoding
* @author Rodney Rehm
*/
-function smarty_mb_from_unicode($unicode, $encoding=null) {
+function smarty_mb_from_unicode($unicode, $encoding = null)
+{
$t = '';
if (!$encoding) {
$encoding = mb_internal_encoding();
}
- foreach((array) $unicode as $utf32be) {
+ foreach ((array) $unicode as $utf32be) {
$character = pack("N*", $utf32be);
$t .= mb_convert_encoding($character, $encoding, "UTF-32BE");
}
+
return $t;
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/plugins/shared.mb_wordwrap.php b/library/Smarty/libs/plugins/shared.mb_wordwrap.php
index ba3498c70..31f4acf01 100644
--- a/library/Smarty/libs/plugins/shared.mb_wordwrap.php
+++ b/library/Smarty/libs/plugins/shared.mb_wordwrap.php
@@ -2,44 +2,40 @@
/**
* Smarty shared plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsShared
*/
-if(!function_exists('smarty_mb_wordwrap')) {
+if (!function_exists('smarty_mb_wordwrap')) {
/**
* Wrap a string to a given number of characters
*
- * @link http://php.net/manual/en/function.wordwrap.php for similarity
- * @param string $str the string to wrap
- * @param int $width the width of the output
- * @param string $break the character used to break the line
- * @param boolean $cut ignored parameter, just for the sake of
- * @return string wrapped string
+ * @link http://php.net/manual/en/function.wordwrap.php for similarity
+ *
+ * @param string $str the string to wrap
+ * @param int $width the width of the output
+ * @param string $break the character used to break the line
+ * @param boolean $cut ignored parameter, just for the sake of
+ *
+ * @return string wrapped string
* @author Rodney Rehm
*/
- function smarty_mb_wordwrap($str, $width=75, $break="\n", $cut=false)
+ function smarty_mb_wordwrap($str, $width = 75, $break = "\n", $cut = false)
{
// break words into tokens using white space as a delimiter
- $tokens = preg_split('!(\s)!S' . Smarty::$_UTF8_MODIFIER, $str, -1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
+ $tokens = preg_split('!(\s)!S' . Smarty::$_UTF8_MODIFIER, $str, - 1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
$length = 0;
$t = '';
$_previous = false;
+ $_space = false;
foreach ($tokens as $_token) {
$token_length = mb_strlen($_token, Smarty::$_CHARSET);
$_tokens = array($_token);
if ($token_length > $width) {
- // remove last space
- $t = mb_substr($t, 0, -1, Smarty::$_CHARSET);
- $_previous = false;
- $length = 0;
-
- if ($cut) {
- $_tokens = preg_split('!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER, $_token, -1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
- // broken words go on a new line
- $t .= $break;
+ if ($cut) {
+ $_tokens = preg_split('!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER, $_token, - 1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
}
}
@@ -50,27 +46,23 @@ if(!function_exists('smarty_mb_wordwrap')) {
if ($length > $width) {
// remove space before inserted break
- if ($_previous && $token_length < $width) {
- $t = mb_substr($t, 0, -1, Smarty::$_CHARSET);
+ if ($_previous) {
+ $t = mb_substr($t, 0, - 1, Smarty::$_CHARSET);
}
- // add the break before the token
- $t .= $break;
- $length = $token_length;
-
- // skip space after inserting a break
- if ($_space) {
- $length = 0;
- continue;
+ if (!$_space) {
+ // add the break before the token
+ if (!empty($t)) {
+ $t .= $break;
+ }
+ $length = $token_length;
}
- } else if ($token == "\n") {
+ } elseif ($token == "\n") {
// hard break must reset counters
$_previous = 0;
$length = 0;
- } else {
- // remember if we had a space or not
- $_previous = $_space;
}
+ $_previous = $_space;
// add the token
$t .= $token;
}
@@ -78,6 +70,4 @@ if(!function_exists('smarty_mb_wordwrap')) {
return $t;
}
-
}
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/plugins/variablefilter.htmlspecialchars.php b/library/Smarty/libs/plugins/variablefilter.htmlspecialchars.php
index aff711e48..aecd1e7e7 100644
--- a/library/Smarty/libs/plugins/variablefilter.htmlspecialchars.php
+++ b/library/Smarty/libs/plugins/variablefilter.htmlspecialchars.php
@@ -2,20 +2,18 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsFilter
*/
/**
* Smarty htmlspecialchars variablefilter plugin
*
- * @param string $source input string
- * @param Smarty_Internal_Template $smarty Smarty object
+ * @param string $source input string
+ *
* @return string filtered output
*/
-function smarty_variablefilter_htmlspecialchars($source, $smarty)
+function smarty_variablefilter_htmlspecialchars($source)
{
return htmlspecialchars($source, ENT_QUOTES, Smarty::$_CHARSET);
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_cacheresource.php b/library/Smarty/libs/sysplugins/smarty_cacheresource.php
index ca18add5e..667bee44f 100644
--- a/library/Smarty/libs/sysplugins/smarty_cacheresource.php
+++ b/library/Smarty/libs/sysplugins/smarty_cacheresource.php
@@ -1,106 +1,123 @@
<?php
/**
-* Smarty Internal Plugin
-*
-* @package Smarty
-* @subpackage Cacher
-*/
+ * Smarty Internal Plugin
+ *
+ * @package Smarty
+ * @subpackage Cacher
+ */
/**
-* Cache Handler API
-*
-* @package Smarty
-* @subpackage Cacher
-* @author Rodney Rehm
-*/
-abstract class Smarty_CacheResource {
+ * Cache Handler API
+ *
+ * @package Smarty
+ * @subpackage Cacher
+ * @author Rodney Rehm
+ */
+abstract class Smarty_CacheResource
+{
/**
- * cache for Smarty_CacheResource instances
- * @var array
- */
+ * cache for Smarty_CacheResource instances
+ *
+ * @var array
+ */
public static $resources = array();
/**
- * resource types provided by the core
- * @var array
- */
+ * resource types provided by the core
+ *
+ * @var array
+ */
protected static $sysplugins = array(
'file' => true,
);
/**
- * populate Cached Object with meta data from Resource
- *
- * @param Smarty_Template_Cached $cached cached object
- * @param Smarty_Internal_Template $_template template object
- * @return void
- */
- public abstract function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template);
+ * populate Cached Object with meta data from Resource
+ *
+ * @param Smarty_Template_Cached $cached cached object
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @return void
+ */
+ abstract public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template);
/**
- * populate Cached Object with timestamp and exists from Resource
- *
- * @param Smarty_Template_Cached $source cached object
- * @return void
- */
- public abstract function populateTimestamp(Smarty_Template_Cached $cached);
+ * populate Cached Object with timestamp and exists from Resource
+ *
+ * @param Smarty_Template_Cached $cached
+ *
+ * @return void
+ */
+ abstract public function populateTimestamp(Smarty_Template_Cached $cached);
/**
- * Read the cached template and process header
- *
- * @param Smarty_Internal_Template $_template template object
- * @param Smarty_Template_Cached $cached cached object
- * @return booelan true or false if the cached content does not exist
- */
- public abstract function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached=null);
+ * Read the cached template and process header
+ *
+ * @param Smarty_Internal_Template $_template template object
+ * @param Smarty_Template_Cached $cached cached object
+ *
+ * @return boolean true or false if the cached content does not exist
+ */
+ abstract public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null);
/**
- * Write the rendered template output to cache
- *
- * @param Smarty_Internal_Template $_template template object
- * @param string $content content to cache
- * @return boolean success
- */
- public abstract function writeCachedContent(Smarty_Internal_Template $_template, $content);
+ * Write the rendered template output to cache
+ *
+ * @param Smarty_Internal_Template $_template template object
+ * @param string $content content to cache
+ *
+ * @return boolean success
+ */
+ abstract public function writeCachedContent(Smarty_Internal_Template $_template, $content);
/**
- * Return cached content
- *
- * @param Smarty_Internal_Template $_template template object
- * @param string $content content of cache
- */
+ * Return cached content
+ *
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @return null|string
+ */
public function getCachedContent(Smarty_Internal_Template $_template)
{
if ($_template->cached->handler->process($_template)) {
ob_start();
$_template->properties['unifunc']($_template);
+
return ob_get_clean();
}
+
return null;
}
/**
- * Empty cache
- *
- * @param Smarty $smarty Smarty object
- * @param integer $exp_time expiration time (number of seconds, not timestamp)
- * @return integer number of cache files deleted
- */
- public abstract function clearAll(Smarty $smarty, $exp_time=null);
+ * Empty cache
+ *
+ * @param Smarty $smarty Smarty object
+ * @param integer $exp_time expiration time (number of seconds, not timestamp)
+ *
+ * @return integer number of cache files deleted
+ */
+ abstract public function clearAll(Smarty $smarty, $exp_time = null);
/**
- * Empty cache for a specific template
- *
- * @param Smarty $smarty Smarty object
- * @param string $resource_name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param integer $exp_time expiration time (number of seconds, not timestamp)
- * @return integer number of cache files deleted
- */
- public abstract function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time);
-
+ * Empty cache for a specific template
+ *
+ * @param Smarty $smarty Smarty object
+ * @param string $resource_name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param integer $exp_time expiration time (number of seconds, not timestamp)
+ *
+ * @return integer number of cache files deleted
+ */
+ abstract public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time);
+ /**
+ * @param Smarty $smarty
+ * @param Smarty_Template_Cached $cached
+ *
+ * @return bool|null
+ */
public function locked(Smarty $smarty, Smarty_Template_Cached $cached)
{
// theoretically locking_timeout should be checked against time_limit (max_execution_time)
@@ -114,35 +131,61 @@ abstract class Smarty_CacheResource {
}
sleep(1);
}
+
return $hadLock;
}
+ /**
+ * Check is cache is locked for this template
+ *
+ * @param Smarty $smarty
+ * @param Smarty_Template_Cached $cached
+ *
+ * @return bool
+ */
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
// check if lock exists
return false;
}
+ /**
+ * Lock cache for this template
+ *
+ * @param Smarty $smarty
+ * @param Smarty_Template_Cached $cached
+ *
+ * @return bool
+ */
public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
// create lock
return true;
}
+ /**
+ * Unlock cache for this template
+ *
+ * @param Smarty $smarty
+ * @param Smarty_Template_Cached $cached
+ *
+ * @return bool
+ */
public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
// release lock
return true;
}
-
/**
- * Load Cache Resource Handler
- *
- * @param Smarty $smarty Smarty object
- * @param string $type name of the cache resource
- * @return Smarty_CacheResource Cache Resource Handler
- */
+ * Load Cache Resource Handler
+ *
+ * @param Smarty $smarty Smarty object
+ * @param string $type name of the cache resource
+ *
+ * @throws SmartyException
+ * @return Smarty_CacheResource Cache Resource Handler
+ */
public static function load(Smarty $smarty, $type = null)
{
if (!isset($type)) {
@@ -153,7 +196,7 @@ abstract class Smarty_CacheResource {
if (isset($smarty->_cacheresource_handlers[$type])) {
return $smarty->_cacheresource_handlers[$type];
}
-
+
// try registered resource
if (isset($smarty->registered_cache_resources[$type])) {
// do not cache these instances as they may vary from instance to instance
@@ -165,6 +208,7 @@ abstract class Smarty_CacheResource {
$cache_resource_class = 'Smarty_Internal_CacheResource_' . ucfirst($type);
self::$resources[$type] = new $cache_resource_class();
}
+
return $smarty->_cacheresource_handlers[$type] = self::$resources[$type];
}
// try plugins dir
@@ -173,6 +217,7 @@ abstract class Smarty_CacheResource {
if (!isset(self::$resources[$type])) {
self::$resources[$type] = new $cache_resource_class();
}
+
return $smarty->_cacheresource_handlers[$type] = self::$resources[$type];
}
// give up
@@ -180,10 +225,10 @@ abstract class Smarty_CacheResource {
}
/**
- * Invalid Loaded Cache Files
- *
- * @param Smarty $smarty Smarty object
- */
+ * Invalid Loaded Cache Files
+ *
+ * @param Smarty $smarty Smarty object
+ */
public static function invalidLoadedCache(Smarty $smarty)
{
foreach ($smarty->template_objects as $tpl) {
@@ -196,92 +241,104 @@ abstract class Smarty_CacheResource {
}
/**
-* Smarty Resource Data Object
-*
-* Cache Data Container for Template Files
-*
-* @package Smarty
-* @subpackage TemplateResources
-* @author Rodney Rehm
-*/
-class Smarty_Template_Cached {
+ * Smarty Resource Data Object
+ * Cache Data Container for Template Files
+ *
+ * @package Smarty
+ * @subpackage TemplateResources
+ * @author Rodney Rehm
+ */
+class Smarty_Template_Cached
+{
/**
- * Source Filepath
- * @var string
- */
+ * Source Filepath
+ *
+ * @var string
+ */
public $filepath = false;
/**
- * Source Content
- * @var string
- */
+ * Source Content
+ *
+ * @var string
+ */
public $content = null;
/**
- * Source Timestamp
- * @var integer
- */
+ * Source Timestamp
+ *
+ * @var integer
+ */
public $timestamp = false;
/**
- * Source Existance
- * @var boolean
- */
+ * Source Existence
+ *
+ * @var boolean
+ */
public $exists = false;
/**
- * Cache Is Valid
- * @var boolean
- */
+ * Cache Is Valid
+ *
+ * @var boolean
+ */
public $valid = false;
/**
- * Cache was processed
- * @var boolean
- */
+ * Cache was processed
+ *
+ * @var boolean
+ */
public $processed = false;
/**
- * CacheResource Handler
- * @var Smarty_CacheResource
- */
+ * CacheResource Handler
+ *
+ * @var Smarty_CacheResource
+ */
public $handler = null;
/**
- * Template Compile Id (Smarty_Internal_Template::$compile_id)
- * @var string
- */
+ * Template Compile Id (Smarty_Internal_Template::$compile_id)
+ *
+ * @var string
+ */
public $compile_id = null;
/**
- * Template Cache Id (Smarty_Internal_Template::$cache_id)
- * @var string
- */
+ * Template Cache Id (Smarty_Internal_Template::$cache_id)
+ *
+ * @var string
+ */
public $cache_id = null;
/**
- * Id for cache locking
- * @var string
- */
+ * Id for cache locking
+ *
+ * @var string
+ */
public $lock_id = null;
/**
- * flag that cache is locked by this instance
- * @var bool
- */
+ * flag that cache is locked by this instance
+ *
+ * @var bool
+ */
public $is_locked = false;
/**
- * Source Object
- * @var Smarty_Template_Source
- */
+ * Source Object
+ *
+ * @var Smarty_Template_Source
+ */
public $source = null;
/**
- * create Cached Object container
- *
- * @param Smarty_Internal_Template $_template template object
- */
+ * create Cached Object container
+ *
+ * @param Smarty_Internal_Template $_template template object
+ */
public function __construct(Smarty_Internal_Template $_template)
{
$this->compile_id = $_template->compile_id;
@@ -300,6 +357,7 @@ class Smarty_Template_Cached {
//
if (!($_template->caching == Smarty::CACHING_LIFETIME_CURRENT || $_template->caching == Smarty::CACHING_LIFETIME_SAVED) || $_template->source->recompiled) {
$handler->populate($this, $_template);
+
return;
}
while (true) {
@@ -328,7 +386,7 @@ class Smarty_Template_Cached {
if ($smarty->debugging) {
Smarty_Internal_Debug::start_cache($_template);
}
- if($handler->process($_template, $this) === false) {
+ if ($handler->process($_template, $this) === false) {
$this->valid = false;
} else {
$this->processed = true;
@@ -347,6 +405,7 @@ class Smarty_Template_Cached {
}
if (!$this->valid && $_template->smarty->cache_locking) {
$this->handler->acquireLock($_template->smarty, $this);
+
return;
} else {
return;
@@ -355,27 +414,29 @@ class Smarty_Template_Cached {
}
/**
- * Write this cache object to handler
- *
- * @param Smarty_Internal_Template $_template template object
- * @param string $content content to cache
- * @return boolean success
- */
+ * Write this cache object to handler
+ *
+ * @param Smarty_Internal_Template $_template template object
+ * @param string $content content to cache
+ *
+ * @return boolean success
+ */
public function write(Smarty_Internal_Template $_template, $content)
{
if (!$_template->source->recompiled) {
if ($this->handler->writeCachedContent($_template, $content)) {
+ $this->content = null;
$this->timestamp = time();
$this->exists = true;
$this->valid = true;
if ($_template->smarty->cache_locking) {
$this->handler->releaseLock($_template->smarty, $this);
}
+
return true;
}
}
+
return false;
}
-
}
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_cacheresource_custom.php b/library/Smarty/libs/sysplugins/smarty_cacheresource_custom.php
index ee9de157b..a258b2de7 100644
--- a/library/Smarty/libs/sysplugins/smarty_cacheresource_custom.php
+++ b/library/Smarty/libs/sysplugins/smarty_cacheresource_custom.php
@@ -2,42 +2,43 @@
/**
* Smarty Internal Plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage Cacher
*/
/**
* Cache Handler API
*
- * @package Smarty
+ * @package Smarty
* @subpackage Cacher
- * @author Rodney Rehm
+ * @author Rodney Rehm
*/
-abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
-
+abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
+{
/**
* fetch cached content and its modification time from data source
*
- * @param string $id unique cache content identifier
- * @param string $name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param string $content cached content
- * @param integer $mtime cache modification timestamp (epoch)
+ * @param string $id unique cache content identifier
+ * @param string $name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param string $content cached content
+ * @param integer $mtime cache modification timestamp (epoch)
+ *
* @return void
*/
- protected abstract function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime);
+ abstract protected function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime);
/**
* Fetch cached content's modification timestamp from data source
- *
* {@internal implementing this method is optional.
* Only implement it if modification times can be accessed faster than loading the complete cached content.}}
*
- * @param string $id unique cache content identifier
- * @param string $name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
+ * @param string $id unique cache content identifier
+ * @param string $name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ *
* @return integer|boolean timestamp (epoch) the template was modified, or false if not found
*/
protected function fetchTimestamp($id, $name, $cache_id, $compile_id)
@@ -48,32 +49,35 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
/**
* Save content to cache
*
- * @param string $id unique cache content identifier
- * @param string $name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param integer|null $exp_time seconds till expiration or null
- * @param string $content content to cache
- * @return boolean success
+ * @param string $id unique cache content identifier
+ * @param string $name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param integer|null $exp_time seconds till expiration or null
+ * @param string $content content to cache
+ *
+ * @return boolean success
*/
- protected abstract function save($id, $name, $cache_id, $compile_id, $exp_time, $content);
+ abstract protected function save($id, $name, $cache_id, $compile_id, $exp_time, $content);
/**
* Delete content from cache
*
- * @param string $name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param integer|null $exp_time seconds till expiration time in seconds or null
- * @return integer number of deleted caches
+ * @param string $name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param integer|null $exp_time seconds till expiration time in seconds or null
+ *
+ * @return integer number of deleted caches
*/
- protected abstract function delete($name, $cache_id, $compile_id, $exp_time);
+ abstract protected function delete($name, $cache_id, $compile_id, $exp_time);
/**
* populate Cached Object with meta data from Resource
*
- * @param Smarty_Template_Cached $cached cached object
- * @param Smarty_Internal_Template $_template template object
+ * @param Smarty_Template_Cached $cached cached object
+ * @param Smarty_Internal_Template $_template template object
+ *
* @return void
*/
public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template)
@@ -88,7 +92,8 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
/**
* populate Cached Object with timestamp and exists from Resource
*
- * @param Smarty_Template_Cached $source cached object
+ * @param Smarty_Template_Cached $cached
+ *
* @return void
*/
public function populateTimestamp(Smarty_Template_Cached $cached)
@@ -97,6 +102,7 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
if ($mtime !== null) {
$cached->timestamp = $mtime;
$cached->exists = !!$cached->timestamp;
+
return;
}
$timestamp = null;
@@ -108,11 +114,12 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
/**
* Read the cached template and process the header
*
- * @param Smarty_Internal_Template $_template template object
- * @param Smarty_Template_Cached $cached cached object
- * @return booelan true or false if the cached content does not exist
+ * @param Smarty_Internal_Template $_template template object
+ * @param Smarty_Template_Cached $cached cached object
+ *
+ * @return boolean true or false if the cached content does not exist
*/
- public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached=null)
+ public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null)
{
if (!$cached) {
$cached = $_template->cached;
@@ -130,19 +137,25 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
);
}
if (isset($content)) {
+ /** @var Smarty_Internal_Template $_smarty_tpl
+ * used in evaluated code
+ */
$_smarty_tpl = $_template;
eval("?>" . $content);
+
return true;
}
+
return false;
}
/**
* Write the rendered template output to cache
*
- * @param Smarty_Internal_Template $_template template object
- * @param string $content content to cache
- * @return boolean success
+ * @param Smarty_Internal_Template $_template template object
+ * @param string $content content to cache
+ *
+ * @return boolean success
*/
public function writeCachedContent(Smarty_Internal_Template $_template, $content)
{
@@ -159,38 +172,69 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
/**
* Empty cache
*
- * @param Smarty $smarty Smarty object
- * @param integer $exp_time expiration time (number of seconds, not timestamp)
+ * @param Smarty $smarty Smarty object
+ * @param integer $exp_time expiration time (number of seconds, not timestamp)
+ *
* @return integer number of cache files deleted
*/
- public function clearAll(Smarty $smarty, $exp_time=null)
+ public function clearAll(Smarty $smarty, $exp_time = null)
{
$this->cache = array();
+
return $this->delete(null, null, null, $exp_time);
}
/**
* Empty cache for a specific template
*
- * @param Smarty $smarty Smarty object
- * @param string $resource_name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param integer $exp_time expiration time (number of seconds, not timestamp)
+ * @param Smarty $smarty Smarty object
+ * @param string $resource_name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param integer $exp_time expiration time (number of seconds, not timestamp)
+ *
* @return integer number of cache files deleted
*/
public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
{
$this->cache = array();
- return $this->delete($resource_name, $cache_id, $compile_id, $exp_time);
+ $cache_name = null;
+
+ if (isset($resource_name)) {
+ $_save_stat = $smarty->caching;
+ $smarty->caching = true;
+ $tpl = new $smarty->template_class($resource_name, $smarty);
+ $smarty->caching = $_save_stat;
+
+ if ($tpl->source->exists) {
+ $cache_name = $tpl->source->name;
+ } else {
+ return 0;
+ }
+ // remove from template cache
+ if ($smarty->allow_ambiguous_resources) {
+ $_templateId = $tpl->source->unique_resource . $tpl->cache_id . $tpl->compile_id;
+ } else {
+ $_templateId = $smarty->joined_template_dir . '#' . $resource_name . $tpl->cache_id . $tpl->compile_id;
+ }
+ if (isset($_templateId[150])) {
+ $_templateId = sha1($_templateId);
+ }
+ unset($smarty->template_objects[$_templateId]);
+ // template object no longer needed
+ unset($tpl);
+ }
+
+ return $this->delete($cache_name, $cache_id, $compile_id, $exp_time);
}
/**
* Check is cache is locked for this template
*
- * @param Smarty $smarty Smarty object
- * @param Smarty_Template_Cached $cached cached object
- * @return booelan true or false if cache is locked
+ * @param Smarty $smarty Smarty object
+ * @param Smarty_Template_Cached $cached cached object
+ *
+ * @return boolean true or false if cache is locked
*/
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
@@ -208,8 +252,10 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
/**
* Lock cache for this template
*
- * @param Smarty $smarty Smarty object
+ * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
+ *
+ * @return bool|void
*/
public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
@@ -223,8 +269,10 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
/**
* Unlock cache for this template
*
- * @param Smarty $smarty Smarty object
+ * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
+ *
+ * @return bool|void
*/
public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
@@ -234,4 +282,3 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
$this->delete($name, null, null, null);
}
}
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php b/library/Smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php
index dff9b65aa..a4b365a82 100644
--- a/library/Smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php
+++ b/library/Smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php
@@ -2,44 +2,43 @@
/**
* Smarty Internal Plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage Cacher
*/
/**
* Smarty Cache Handler Base for Key/Value Storage Implementations
- *
* This class implements the functionality required to use simple key/value stores
* for hierarchical cache groups. key/value stores like memcache or APC do not support
* wildcards in keys, therefore a cache group cannot be cleared like "a|*" - which
* is no problem to filesystem and RDBMS implementations.
- *
* This implementation is based on the concept of invalidation. While one specific cache
* can be identified and cleared, any range of caches cannot be identified. For this reason
* each level of the cache group hierarchy can have its own value in the store. These values
* are nothing but microtimes, telling us when a particular cache group was cleared for the
* last time. These keys are evaluated for every cache read to determine if the cache has
* been invalidated since it was created and should hence be treated as inexistent.
- *
* Although deep hierarchies are possible, they are not recommended. Try to keep your
* cache groups as shallow as possible. Anything up 3-5 parents should be ok. So
* »a|b|c« is a good depth where »a|b|c|d|e|f|g|h|i|j|k« isn't. Try to join correlating
* cache groups: if your cache groups look somewhat like »a|b|$page|$items|$whatever«
* consider using »a|b|c|$page-$items-$whatever« instead.
*
- * @package Smarty
+ * @package Smarty
* @subpackage Cacher
- * @author Rodney Rehm
+ * @author Rodney Rehm
*/
-abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
-
+abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
+{
/**
* cache for contents
+ *
* @var array
*/
protected $contents = array();
/**
* cache for timestamps
+ *
* @var array
*/
protected $timestamps = array();
@@ -47,16 +46,17 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
/**
* populate Cached Object with meta data from Resource
*
- * @param Smarty_Template_Cached $cached cached object
- * @param Smarty_Internal_Template $_template template object
+ * @param Smarty_Template_Cached $cached cached object
+ * @param Smarty_Internal_Template $_template template object
+ *
* @return void
*/
public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template)
{
$cached->filepath = $_template->source->uid
- . '#' . $this->sanitize($cached->source->name)
- . '#' . $this->sanitize($cached->cache_id)
- . '#' . $this->sanitize($cached->compile_id);
+ . '#' . $this->sanitize($cached->source->resource)
+ . '#' . $this->sanitize($cached->cache_id)
+ . '#' . $this->sanitize($cached->compile_id);
$this->populateTimestamp($cached);
}
@@ -64,7 +64,8 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
/**
* populate Cached Object with timestamp and exists from Resource
*
- * @param Smarty_Template_Cached $cached cached object
+ * @param Smarty_Template_Cached $cached cached object
+ *
* @return void
*/
public function populateTimestamp(Smarty_Template_Cached $cached)
@@ -80,11 +81,12 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
/**
* Read the cached template and process the header
*
- * @param Smarty_Internal_Template $_template template object
- * @param Smarty_Template_Cached $cached cached object
- * @return booelan true or false if the cached content does not exist
+ * @param Smarty_Internal_Template $_template template object
+ * @param Smarty_Template_Cached $cached cached object
+ *
+ * @return boolean true or false if the cached content does not exist
*/
- public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached=null)
+ public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null)
{
if (!$cached) {
$cached = $_template->cached;
@@ -97,55 +99,63 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
}
}
if (isset($content)) {
+ /** @var Smarty_Internal_Template $_smarty_tpl
+ * used in evaluated code
+ */
$_smarty_tpl = $_template;
eval("?>" . $content);
+
return true;
}
+
return false;
}
/**
* Write the rendered template output to cache
*
- * @param Smarty_Internal_Template $_template template object
- * @param string $content content to cache
- * @return boolean success
+ * @param Smarty_Internal_Template $_template template object
+ * @param string $content content to cache
+ *
+ * @return boolean success
*/
public function writeCachedContent(Smarty_Internal_Template $_template, $content)
{
$this->addMetaTimestamp($content);
+
return $this->write(array($_template->cached->filepath => $content), $_template->properties['cache_lifetime']);
}
/**
* Empty cache
- *
* {@internal the $exp_time argument is ignored altogether }}
*
- * @param Smarty $smarty Smarty object
- * @param integer $exp_time expiration time [being ignored]
+ * @param Smarty $smarty Smarty object
+ * @param integer $exp_time expiration time [being ignored]
+ *
* @return integer number of cache files deleted [always -1]
* @uses purge() to clear the whole store
* @uses invalidate() to mark everything outdated if purge() is inapplicable
*/
- public function clearAll(Smarty $smarty, $exp_time=null)
+ public function clearAll(Smarty $smarty, $exp_time = null)
{
if (!$this->purge()) {
$this->invalidate(null);
}
- return -1;
+
+ return - 1;
}
/**
* Empty cache for a specific template
- *
* {@internal the $exp_time argument is ignored altogether}}
*
- * @param Smarty $smarty Smarty object
- * @param string $resource_name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param integer $exp_time expiration time [being ignored]
+ * @param Smarty $smarty Smarty object
+ * @param string $resource_name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param integer $exp_time expiration time [being ignored]
+ *
* @return integer number of cache files deleted [always -1]
* @uses buildCachedFilepath() to generate the CacheID
* @uses invalidate() to mark CacheIDs parent chain as outdated
@@ -157,15 +167,18 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
$cid = $uid . '#' . $this->sanitize($resource_name) . '#' . $this->sanitize($cache_id) . '#' . $this->sanitize($compile_id);
$this->delete(array($cid));
$this->invalidate($cid, $resource_name, $cache_id, $compile_id, $uid);
- return -1;
+
+ return - 1;
}
+
/**
* Get template's unique ID
*
- * @param Smarty $smarty Smarty object
- * @param string $resource_name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
+ * @param Smarty $smarty Smarty object
+ * @param string $resource_name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ *
* @return string filepath of cache file
*/
protected function getTemplateUid(Smarty $smarty, $resource_name, $cache_id, $compile_id)
@@ -176,7 +189,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
if ($tpl->source->exists) {
$uid = $tpl->source->uid;
}
-
+
// remove from template cache
if ($smarty->allow_ambiguous_resources) {
$_templateId = $tpl->source->unique_resource . $tpl->cache_id . $tpl->compile_id;
@@ -188,13 +201,15 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
}
unset($smarty->template_objects[$_templateId]);
}
+
return $uid;
}
/**
* Sanitize CacheID components
*
- * @param string $string CacheID component to sanitize
+ * @param string $string CacheID component to sanitize
+ *
* @return string sanitized CacheID component
*/
protected function sanitize($string)
@@ -204,19 +219,21 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
if (!$string) {
return null;
}
+
return preg_replace('#[^\w\|]+#S', '_', $string);
}
/**
* Fetch and prepare a cache object.
*
- * @param string $cid CacheID to fetch
- * @param string $resource_name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param string $content cached content
- * @param integer &$timestamp cached timestamp (epoch)
- * @param string $resource_uid resource's uid
+ * @param string $cid CacheID to fetch
+ * @param string $resource_name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param string $content cached content
+ * @param integer &$timestamp cached timestamp (epoch)
+ * @param string $resource_uid resource's uid
+ *
* @return boolean success
*/
protected function fetch($cid, $resource_name = null, $cache_id = null, $compile_id = null, &$content = null, &$timestamp = null, $resource_uid = null)
@@ -238,7 +255,6 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
/**
* Add current microtime to the beginning of $cache_content
- *
* {@internal the header uses 8 Bytes, the first 4 Bytes are the seconds, the second 4 Bytes are the microseconds}}
*
* @param string &$content the content to be cached
@@ -253,25 +269,28 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
/**
* Extract the timestamp the $content was cached
*
- * @param string &$content the cached content
- * @return float the microtime the content was cached
+ * @param string &$content the cached content
+ *
+ * @return float the microtime the content was cached
*/
protected function getMetaTimestamp(&$content)
{
$s = unpack("N", substr($content, 0, 4));
$m = unpack("N", substr($content, 4, 4));
$content = substr($content, 8);
+
return $s[1] + ($m[1] / 100000000);
}
/**
* Invalidate CacheID
*
- * @param string $cid CacheID
- * @param string $resource_name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param string $resource_uid source's uid
+ * @param string $cid CacheID
+ * @param string $resource_name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param string $resource_uid source's uid
+ *
* @return void
*/
protected function invalidate($cid = null, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null)
@@ -281,22 +300,24 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
// invalidate everything
if (!$resource_name && !$cache_id && !$compile_id) {
$key = 'IVK#ALL';
- }
- // invalidate all caches by template
- else if ($resource_name && !$cache_id && !$compile_id) {
- $key = 'IVK#TEMPLATE#' . $resource_uid . '#' . $this->sanitize($resource_name);
- }
- // invalidate all caches by cache group
- else if (!$resource_name && $cache_id && !$compile_id) {
- $key = 'IVK#CACHE#' . $this->sanitize($cache_id);
- }
- // invalidate all caches by compile id
- else if (!$resource_name && !$cache_id && $compile_id) {
- $key = 'IVK#COMPILE#' . $this->sanitize($compile_id);
- }
- // invalidate by combination
+ } // invalidate all caches by template
else {
- $key = 'IVK#CID#' . $cid;
+ if ($resource_name && !$cache_id && !$compile_id) {
+ $key = 'IVK#TEMPLATE#' . $resource_uid . '#' . $this->sanitize($resource_name);
+ } // invalidate all caches by cache group
+ else {
+ if (!$resource_name && $cache_id && !$compile_id) {
+ $key = 'IVK#CACHE#' . $this->sanitize($cache_id);
+ } // invalidate all caches by compile id
+ else {
+ if (!$resource_name && !$cache_id && $compile_id) {
+ $key = 'IVK#COMPILE#' . $this->sanitize($compile_id);
+ } // invalidate by combination
+ else {
+ $key = 'IVK#CID#' . $cid;
+ }
+ }
+ }
}
$this->write(array($key => $now));
}
@@ -304,12 +325,13 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
/**
* Determine the latest timestamp known to the invalidation chain
*
- * @param string $cid CacheID to determine latest invalidation timestamp of
- * @param string $resource_name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param string $resource_uid source's filepath
- * @return float the microtime the CacheID was invalidated
+ * @param string $cid CacheID to determine latest invalidation timestamp of
+ * @param string $resource_name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param string $resource_uid source's filepath
+ *
+ * @return float the microtime the CacheID was invalidated
*/
protected function getLatestInvalidationTimestamp($cid, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null)
{
@@ -321,27 +343,28 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
if (!($_cid = $this->listInvalidationKeys($cid, $resource_name, $cache_id, $compile_id, $resource_uid))) {
return 0;
}
-
+
// there are no InValidationKeys
if (!($values = $this->read($_cid))) {
return 0;
}
// make sure we're dealing with floats
$values = array_map('floatval', $values);
+
return max($values);
}
/**
* Translate a CacheID into the list of applicable InvalidationKeys.
- *
* Splits "some|chain|into|an|array" into array( '#clearAll#', 'some', 'some|chain', 'some|chain|into', ... )
*
- * @param string $cid CacheID to translate
- * @param string $resource_name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param string $resource_uid source's filepath
- * @return array list of InvalidationKeys
+ * @param string $cid CacheID to translate
+ * @param string $resource_name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param string $resource_uid source's filepath
+ *
+ * @return array list of InvalidationKeys
* @uses $invalidationKeyPrefix to prepend to each InvalidationKey
*/
protected function listInvalidationKeys($cid, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null)
@@ -378,30 +401,35 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
$t[] = 'IVK#CACHE#' . $part;
$t[] = 'IVK#CID' . $_name . $part . $_compile;
// skip past delimiter position
- $i++;
+ $i ++;
}
+
return $t;
}
/**
* Check is cache is locked for this template
*
- * @param Smarty $smarty Smarty object
- * @param Smarty_Template_Cached $cached cached object
- * @return booelan true or false if cache is locked
+ * @param Smarty $smarty Smarty object
+ * @param Smarty_Template_Cached $cached cached object
+ *
+ * @return boolean true or false if cache is locked
*/
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
$key = 'LOCK#' . $cached->filepath;
$data = $this->read(array($key));
+
return $data && time() - $data[$key] < $smarty->locking_timeout;
}
/**
* Lock cache for this template
*
- * @param Smarty $smarty Smarty object
+ * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
+ *
+ * @return bool|void
*/
public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
@@ -413,8 +441,10 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
/**
* Unlock cache for this template
*
- * @param Smarty $smarty Smarty object
+ * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
+ *
+ * @return bool|void
*/
public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
@@ -426,27 +456,30 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
/**
* Read values for a set of keys from cache
*
- * @param array $keys list of keys to fetch
+ * @param array $keys list of keys to fetch
+ *
* @return array list of values with the given keys used as indexes
*/
- protected abstract function read(array $keys);
+ abstract protected function read(array $keys);
/**
* Save values for a set of keys to cache
*
- * @param array $keys list of values to save
- * @param int $expire expiration time
+ * @param array $keys list of values to save
+ * @param int $expire expiration time
+ *
* @return boolean true on success, false on failure
*/
- protected abstract function write(array $keys, $expire=null);
+ abstract protected function write(array $keys, $expire = null);
/**
* Remove values from cache
*
- * @param array $keys list of keys to delete
+ * @param array $keys list of keys to delete
+ *
* @return boolean true on success, false on failure
*/
- protected abstract function delete(array $keys);
+ abstract protected function delete(array $keys);
/**
* Remove *all* values from cache
@@ -457,7 +490,4 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
{
return false;
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_config_source.php b/library/Smarty/libs/sysplugins/smarty_config_source.php
index 043ff13e9..fd37e61f7 100644
--- a/library/Smarty/libs/sysplugins/smarty_config_source.php
+++ b/library/Smarty/libs/sysplugins/smarty_config_source.php
@@ -2,34 +2,32 @@
/**
* Smarty Internal Plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
*/
/**
* Smarty Resource Data Object
- *
* Meta Data Container for Config Files
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Rodney Rehm
- *
+ * @author Rodney Rehm
* @property string $content
* @property int $timestamp
* @property bool $exists
*/
-class Smarty_Config_Source extends Smarty_Template_Source {
-
+class Smarty_Config_Source extends Smarty_Template_Source
+{
/**
* create Config Object container
*
- * @param Smarty_Resource $handler Resource Handler this source object communicates with
- * @param Smarty $smarty Smarty instance this source object belongs to
- * @param string $resource full config_resource
- * @param string $type type of resource
- * @param string $name resource name
- * @param string $unique_resource unqiue resource name
+ * @param Smarty_Resource $handler Resource Handler this source object communicates with
+ * @param Smarty $smarty Smarty instance this source object belongs to
+ * @param string $resource full config_resource
+ * @param string $type type of resource
+ * @param string $name resource name
+ * @param string $unique_resource unqiue resource name
*/
public function __construct(Smarty_Resource $handler, Smarty $smarty, $resource, $type, $name, $unique_resource)
{
@@ -50,8 +48,9 @@ class Smarty_Config_Source extends Smarty_Template_Source {
/**
* <<magic>> Generic setter.
*
- * @param string $property_name valid: content, timestamp, exists
- * @param mixed $value newly assigned value (not check for correct type)
+ * @param string $property_name valid: content, timestamp, exists
+ * @param mixed $value newly assigned value (not check for correct type)
+ *
* @throws SmartyException when the given property name is not valid
*/
public function __set($property_name, $value)
@@ -71,7 +70,9 @@ class Smarty_Config_Source extends Smarty_Template_Source {
/**
* <<magic>> Generic getter.
*
- * @param string $property_name valid: content, timestamp, exists
+ * @param string $property_name valid: content, timestamp, exists
+ *
+ * @return mixed|void
* @throws SmartyException when the given property name is not valid
*/
public function __get($property_name)
@@ -80,6 +81,7 @@ class Smarty_Config_Source extends Smarty_Template_Source {
case 'timestamp':
case 'exists':
$this->handler->populateTimestamp($this);
+
return $this->$property_name;
case 'content':
@@ -89,7 +91,4 @@ class Smarty_Config_Source extends Smarty_Template_Source {
throw new SmartyException("config property '$property_name' does not exist.");
}
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_cacheresource_file.php b/library/Smarty/libs/sysplugins/smarty_internal_cacheresource_file.php
index e5d20bd6e..b8e99cc69 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_cacheresource_file.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_cacheresource_file.php
@@ -2,27 +2,27 @@
/**
* Smarty Internal Plugin CacheResource File
*
- * @package Smarty
+ * @package Smarty
* @subpackage Cacher
- * @author Uwe Tews
- * @author Rodney Rehm
+ * @author Uwe Tews
+ * @author Rodney Rehm
*/
/**
* This class does contain all necessary methods for the HTML cache on file system
- *
* Implements the file system as resource for the HTML cache Version ussing nocache inserts.
*
- * @package Smarty
+ * @package Smarty
* @subpackage Cacher
*/
-class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
-
+class Smarty_Internal_CacheResource_File extends Smarty_CacheResource
+{
/**
* populate Cached Object with meta data from Resource
*
* @param Smarty_Template_Cached $cached cached object
* @param Smarty_Internal_Template $_template template object
+ *
* @return void
*/
public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template)
@@ -58,7 +58,7 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
} else {
$_lock_dir = $_cache_dir;
}
- $cached->lock_id = $_lock_dir.sha1($_cache_id.$_compile_id.$_template->source->uid).'.lock';
+ $cached->lock_id = $_lock_dir . sha1($_cache_id . $_compile_id . $_template->source->uid) . '.lock';
}
$cached->filepath = $_cache_dir . $_cache_id . $_compile_id . $_filepath . '.' . basename($_source_file_path) . '.php';
$cached->timestamp = @filemtime($cached->filepath);
@@ -69,6 +69,7 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
* populate Cached Object with timestamp and exists from Resource
*
* @param Smarty_Template_Cached $cached cached object
+ *
* @return void
*/
public function populateTimestamp(Smarty_Template_Cached $cached)
@@ -81,12 +82,17 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
* Read the cached template and process its header
*
* @param Smarty_Internal_Template $_template template object
- * @param Smarty_Template_Cached $cached cached object
- * @return booelan true or false if the cached content does not exist
+ * @param Smarty_Template_Cached $cached cached object
+ *
+ * @return booleantrue or false if the cached content does not exist
*/
- public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached=null)
+ public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null)
{
+ /** @var Smarty_Internal_Template $_smarty_tpl
+ * used in included file
+ */
$_smarty_tpl = $_template;
+
return @include $_template->cached->filepath;
}
@@ -95,6 +101,7 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
*
* @param Smarty_Internal_Template $_template template object
* @param string $content content to cache
+ *
* @return boolean success
*/
public function writeCachedContent(Smarty_Internal_Template $_template, $content)
@@ -106,14 +113,16 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
return true;
}
}
+
return false;
}
/**
* Empty cache
*
- * @param Smarty_Internal_Template $_template template object
- * @param integer $exp_time expiration time (number of seconds, not timestamp)
+ * @param Smarty $smarty
+ * @param integer $exp_time expiration time (number of seconds, not timestamp)
+ *
* @return integer number of cache files deleted
*/
public function clearAll(Smarty $smarty, $exp_time = null)
@@ -124,20 +133,24 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
/**
* Empty cache for a specific template
*
- * @param Smarty $_template template object
+ * @param Smarty $smarty
* @param string $resource_name template name
* @param string $cache_id cache id
* @param string $compile_id compile id
* @param integer $exp_time expiration time (number of seconds, not timestamp)
+ *
* @return integer number of cache files deleted
- */
+ */
public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
{
$_cache_id = isset($cache_id) ? preg_replace('![^\w\|]+!', '_', $cache_id) : null;
$_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!', '_', $compile_id) : null;
$_dir_sep = $smarty->use_sub_dirs ? '/' : '^';
$_compile_id_offset = $smarty->use_sub_dirs ? 3 : 0;
- $_dir = $smarty->getCacheDir();
+ if (($_dir = realpath($smarty->getCacheDir())) === false) {
+ return 0;
+ }
+ $_dir .= '/';
$_dir_length = strlen($_dir);
if (isset($_cache_id)) {
$_cache_id_parts = explode('|', $_cache_id);
@@ -178,7 +191,9 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
$_cacheDirs = new RecursiveDirectoryIterator($_dir);
$_cache = new RecursiveIteratorIterator($_cacheDirs, RecursiveIteratorIterator::CHILD_FIRST);
foreach ($_cache as $_file) {
- if (substr($_file->getBasename(),0,1) == '.' || strpos($_file, '.svn') !== false) continue;
+ if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) {
+ continue;
+ }
// directory ?
if ($_file->isDir()) {
if (!$_cache->isDot()) {
@@ -186,16 +201,16 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
@rmdir($_file->getPathname());
}
} else {
- $_parts = explode($_dir_sep, str_replace('\\', '/', substr((string)$_file, $_dir_length)));
+ $_parts = explode($_dir_sep, str_replace('\\', '/', substr((string) $_file, $_dir_length)));
$_parts_count = count($_parts);
// check name
if (isset($resource_name)) {
- if ($_parts[$_parts_count-1] != $_resourcename_parts) {
+ if ($_parts[$_parts_count - 1] != $_resourcename_parts) {
continue;
}
}
// check compile id
- if (isset($_compile_id) && (!isset($_parts[$_parts_count-2 - $_compile_id_offset]) || $_parts[$_parts_count-2 - $_compile_id_offset] != $_compile_id)) {
+ if (isset($_compile_id) && (!isset($_parts[$_parts_count - 2 - $_compile_id_offset]) || $_parts[$_parts_count - 2 - $_compile_id_offset] != $_compile_id)) {
continue;
}
// check cache id
@@ -205,27 +220,40 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
if ($_parts_count < $_cache_id_parts_count) {
continue;
}
- for ($i = 0; $i < $_cache_id_parts_count; $i++) {
- if ($_parts[$i] != $_cache_id_parts[$i]) continue 2;
+ for ($i = 0; $i < $_cache_id_parts_count; $i ++) {
+ if ($_parts[$i] != $_cache_id_parts[$i]) {
+ continue 2;
+ }
}
}
// expired ?
- if (isset($exp_time) && $_time - @filemtime($_file) < $exp_time) {
- continue;
+ if (isset($exp_time)) {
+ if ($exp_time < 0) {
+ preg_match('#\'cache_lifetime\' =>\s*(\d*)#', file_get_contents($_file), $match);
+ if ($_time < (@filemtime($_file) + $match[1])) {
+ continue;
+ }
+ } else {
+ if ($_time - @filemtime($_file) < $exp_time) {
+ continue;
+ }
+ }
}
$_count += @unlink((string) $_file) ? 1 : 0;
}
}
}
+
return $_count;
}
/**
* Check is cache is locked for this template
*
- * @param Smarty $smarty Smarty object
+ * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
- * @return booelan true or false if cache is locked
+ *
+ * @return boolean true or false if cache is locked
*/
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
@@ -235,14 +263,17 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
clearstatcache();
}
$t = @filemtime($cached->lock_id);
+
return $t && (time() - $t < $smarty->locking_timeout);
}
/**
* Lock cache for this template
*
- * @param Smarty $smarty Smarty object
+ * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
+ *
+ * @return bool|void
*/
public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
@@ -253,8 +284,10 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
/**
* Unlock cache for this template
*
- * @param Smarty $smarty Smarty object
+ * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
+ *
+ * @return bool|void
*/
public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
@@ -262,5 +295,3 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
@unlink($cached->lock_id);
}
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_append.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_append.php
index f6036e883..cbf65685b 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_append.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_append.php
@@ -1,28 +1,28 @@
<?php
/**
* Smarty Internal Plugin Compile Append
- *
* Compiles the {append} tag
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Append Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign {
-
+class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign
+{
/**
* Compiles code for the {append} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return string compiled code
*/
public function compile($args, $compiler, $parameter)
@@ -47,7 +47,4 @@ class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign {
// call compile assign
return parent::compile($_new_attr, $compiler, $_params);
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_assign.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_assign.php
index 0ac3f68ce..caa34861f 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_assign.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_assign.php
@@ -1,28 +1,28 @@
<?php
/**
* Smarty Internal Plugin Compile Assign
- *
* Compiles the {assign} tag
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Assign Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {assign} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return string compiled code
*/
public function compile($args, $compiler, $parameter)
@@ -39,7 +39,11 @@ class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase {
if ($compiler->tag_nocache || $compiler->nocache) {
$_nocache = 'true';
// create nocache var to make it know for further compiling
- $compiler->template->tpl_vars[trim($_attr['var'], "'")] = new Smarty_variable(null, true);
+ if (isset($compiler->template->tpl_vars[trim($_attr['var'], "'")])) {
+ $compiler->template->tpl_vars[trim($_attr['var'], "'")]->nocache = true;
+ } else {
+ $compiler->template->tpl_vars[trim($_attr['var'], "'")] = new Smarty_variable(null, true);
+ }
}
// scope setup
if (isset($_attr['scope'])) {
@@ -72,13 +76,11 @@ class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase {
} elseif ($_scope == Smarty::SCOPE_ROOT || $_scope == Smarty::SCOPE_GLOBAL) {
$output .= "\n\$_ptr = \$_smarty_tpl->parent; while (\$_ptr != null) {\$_ptr->tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]]; \$_ptr = \$_ptr->parent; }";
}
- if ( $_scope == Smarty::SCOPE_GLOBAL) {
+ if ($_scope == Smarty::SCOPE_GLOBAL) {
$output .= "\nSmarty::\$global_tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]];";
}
$output .= '?>';
+
return $output;
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_block.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_block.php
index 03abf493e..8c2fb975f 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_block.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_block.php
@@ -2,22 +2,23 @@
/**
* Smarty Internal Plugin Compile Block
- *
* Compiles the {block}{/block} tags
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Block Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase {
+class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase
+{
+ const parent = '____SMARTY_BLOCK_PARENT____';
/**
* Attribute definition: Overwrites base class.
*
@@ -32,7 +33,15 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase {
* @var array
* @see Smarty_Internal_CompileBase
*/
- public $shorttag_order = array('name', 'hide');
+ public $shorttag_order = array('name');
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
+ public $option_flags = array('hide', 'append', 'prepend', 'nocache');
/**
* Attribute definition: Overwrites base class.
@@ -40,161 +49,140 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase {
* @var array
* @see Smarty_Internal_CompileBase
*/
- public $optional_attributes = array('hide');
+ public $optional_attributes = array('internal_file', 'internal_uid', 'internal_line');
+ /**
+ * nested child block names
+ *
+ * @var array
+ */
+ public static $nested_block_names = array();
+
+ /**
+ * child block source buffer
+ *
+ * @var array
+ */
+ public static $block_data = array();
/**
* Compiles code for the {block} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
+ *
* @return boolean true
*/
- public function compile($args, $compiler) {
+ public function compile($args, $compiler)
+ {
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
- $save = array($_attr, $compiler->parser->current_buffer, $compiler->nocache, $compiler->smarty->merge_compiled_includes, $compiler->merged_templates, $compiler->smarty->merged_templates_func, $compiler->template->properties, $compiler->template->has_nocache_code);
- $this->openTag($compiler, 'block', $save);
+ $_name = trim($_attr['name'], "\"'");
+
+ // existing child must override parent settings
+ if (isset($compiler->template->block_data[$_name]) && $compiler->template->block_data[$_name]['mode'] == 'replace') {
+ $_attr['append'] = false;
+ $_attr['prepend'] = false;
+ }
+
+ // check if we process an inheritance child template
+ if ($compiler->inheritance_child) {
+ array_unshift(self::$nested_block_names, $_name);
+ // build {block} for child block
+ self::$block_data[$_name]['source'] =
+ "{$compiler->smarty->left_delimiter}private_child_block name={$_attr['name']} file='{$compiler->template->source->filepath}' type='{$compiler->template->source->type}' resource='{$compiler->template->template_resource}'" .
+ " uid='{$compiler->template->source->uid}' line={$compiler->lex->line}";
+ if ($_attr['nocache']) {
+ self::$block_data[$_name]['source'] .= ' nocache';
+ }
+ self::$block_data[$_name]['source'] .= $compiler->smarty->right_delimiter;
+
+ $save = array($_attr, $compiler->inheritance);
+ $this->openTag($compiler, 'block', $save);
+ // set flag for {block} tag
+ $compiler->inheritance = true;
+ $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBLOCK);
+ $compiler->has_code = false;
+ return;
+ }
+ // must merge includes
if ($_attr['nocache'] == true) {
- $compiler->nocache = true;
+ $compiler->tag_nocache = true;
}
- // set flag for {block} tag
+ $save = array($_attr, $compiler->inheritance, $compiler->parser->current_buffer, $compiler->nocache);
+ $this->openTag($compiler, 'block', $save);
$compiler->inheritance = true;
- // must merge includes
- $compiler->smarty->merge_compiled_includes = true;
+ $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
$compiler->parser->current_buffer = new _smarty_template_buffer($compiler->parser);
$compiler->has_code = false;
+
return true;
}
/**
- * Save or replace child block source by block name during parsing
+ * Compile saved child block source
*
- * @param string $block_content block source content
- * @param string $block_tag opening block tag
- * @param object $template template object
- * @param string $filepath filepath of template source
+ * @param object $compiler compiler object
+ * @param string $_name optional name of child block
+ *
+ * @return string compiled code of child block
*/
- public static function saveBlockData($block_content, $block_tag, $template, $filepath) {
- $_rdl = preg_quote($template->smarty->right_delimiter);
- $_ldl = preg_quote($template->smarty->left_delimiter);
- if ($template->smarty->auto_literal) {
- $al = '\s*';
- } else {
- $al = '';
- }
- if (0 == preg_match("!({$_ldl}{$al}block\s+)(name=)?(\w+|'.*'|\".*\")(\s*?)?((append|prepend|nocache)?(\s*)?(hide)?)?(\s*{$_rdl})!", $block_tag, $_match)) {
- $error_text = 'Syntax Error in template "' . $template->source->filepath . '" "' . htmlspecialchars($block_tag) . '" illegal options';
- throw new SmartyCompilerException($error_text);
- } else {
- $_name = trim($_match[3], '\'"');
- if ($_match[8] != 'hide' || isset($template->block_data[$_name])) { // replace {$smarty.block.child}
- // do we have {$smart.block.child} in nested {block} tags?
- if (0 != preg_match_all("!({$_ldl}{$al}block\s+)(name=)?(\w+|'.*'|\".*\")([\s\S]*?)(hide)?(\s*{$_rdl})([\s\S]*?)({$_ldl}{$al}\\\$smarty\.block\.child{$_rdl})([\s\S]*?{$_ldl}{$al}/block{$_rdl})!", $block_content, $_match2)) {
- foreach ($_match2[3] as $key => $name) {
- // get it's replacement
- $_name2 = trim($name, '\'"');
- if ($_match2[5][$key] != 'hide' || isset($template->block_data[$_name2])) {
- if (isset($template->block_data[$_name2])) {
- $replacement = $template->block_data[$_name2]['source'];
- } else {
- $replacement = '';
- }
- // replace {$smarty.block.child} tag
- $search = array("%({$_ldl}{$al}block[\s\S]*?{$name}[\s\S]*?{$_rdl})([\s\S]*?)({$_ldl}{$al}\\\$smarty\.block\.child{$_rdl})([\s\S]*?)({$_ldl}{$al}/block{$_rdl})%", "/§§§child§§§/");
- $replace = array('\2§§§child§§§\4', $replacement);
- $block_content = preg_replace($search, $replace, $block_content);
- } else {
- // remove hidden blocks
- $block_content = preg_replace("%({$_ldl}{$al}block[\s\S]*?{$name}[\s\S]*?{$_rdl}[\s\S]*?{$_ldl}{$al}/block{$_rdl})%", '', $block_content);
- }
- }
- }
- // do we have not nested {$smart.block.child}
- if (0 != preg_match("/({$_ldl}{$al}\\\$smarty\.block\.child{$_rdl})/", $block_content, $_match2)) {
- // get child replacement for this block
- if (isset($template->block_data[$_name])) {
- $replacement = $template->block_data[$_name]['source'];
- unset($template->block_data[$_name]);
- } else {
- $replacement = '';
- }
- $block_content = preg_replace("/({$_ldl}{$al}\\\$smarty\.block\.child{$_rdl})/", $replacement, $block_content);
- }
- if (isset($template->block_data[$_name])) {
- if (strpos($template->block_data[$_name]['source'], '%%%%SMARTY_PARENT%%%%') !== false) {
- $template->block_data[$_name]['source'] =
- str_replace('%%%%SMARTY_PARENT%%%%', $block_content, $template->block_data[$_name]['source']);
- } elseif ($template->block_data[$_name]['mode'] == 'prepend') {
- $template->block_data[$_name]['source'] .= $block_content;
- } elseif ($template->block_data[$_name]['mode'] == 'append') {
- $template->block_data[$_name]['source'] = $block_content . $template->block_data[$_name]['source'];
- }
- } else {
- $template->block_data[$_name]['source'] = $block_content;
- $template->block_data[$_name]['file'] = $filepath;
- }
- if ($_match[6] == 'append') {
- $template->block_data[$_name]['mode'] = 'append';
- } elseif ($_match[6] == 'prepend') {
- $template->block_data[$_name]['mode'] = 'prepend';
- } else {
- $template->block_data[$_name]['mode'] = 'replace';
- }
+ static function compileChildBlock($compiler, $_name = null)
+ {
+ if ($compiler->inheritance_child) {
+ $name1 = Smarty_Internal_Compile_Block::$nested_block_names[0];
+ if (isset($compiler->template->block_data[$name1])) {
+ // replace inner block name with generic
+ Smarty_Internal_Compile_Block::$block_data[$name1]['source'] .= $compiler->template->block_data[$name1]['source'];
+ Smarty_Internal_Compile_Block::$block_data[$name1]['child'] = true;
}
+ $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBLOCK);
+ $compiler->has_code = false;
+ return;
}
- }
-
- /**
- * Compile saved child block source
- *
- * @param object $compiler compiler object
- * @param string $_name optional name of child block
- * @return string compiled code of schild block
- */
- public static function compileChildBlock($compiler, $_name = null) {
- $_output = '';
// if called by {$smarty.block.child} we must search the name of enclosing {block}
if ($_name == null) {
$stack_count = count($compiler->_tag_stack);
while (--$stack_count >= 0) {
if ($compiler->_tag_stack[$stack_count][0] == 'block') {
- $_name = trim($compiler->_tag_stack[$stack_count][1][0]['name'], "'\"");
+ $_name = trim($compiler->_tag_stack[$stack_count][1][0]['name'], "\"'");
break;
}
}
- // flag that child is already compile by {$smarty.block.child} inclusion
- $compiler->template->block_data[$_name]['compiled'] = true;
}
if ($_name == null) {
- $compiler->trigger_template_error('{$smarty.block.child} used out of context', $compiler->lex->taglineno);
+ $compiler->trigger_template_error(' tag {$smarty.block.child} used outside {block} tags ', $compiler->lex->taglineno);
}
// undefined child?
if (!isset($compiler->template->block_data[$_name]['source'])) {
+ $compiler->popTrace();
return '';
}
+ // flag that child is already compile by {$smarty.block.child} inclusion
+ $compiler->template->block_data[$_name]['compiled'] = true;
$_tpl = new Smarty_Internal_template('string:' . $compiler->template->block_data[$_name]['source'], $compiler->smarty, $compiler->template, $compiler->template->cache_id,
- $compiler->template->compile_id = null, $compiler->template->caching, $compiler->template->cache_lifetime);
+ $compiler->template->compile_id, $compiler->template->caching, $compiler->template->cache_lifetime);
+ if ($compiler->smarty->debugging) {
+ Smarty_Internal_Debug::ignore($_tpl);
+ }
+ $_tpl->tpl_vars = $compiler->template->tpl_vars;
$_tpl->variable_filters = $compiler->template->variable_filters;
$_tpl->properties['nocache_hash'] = $compiler->template->properties['nocache_hash'];
- $_tpl->source->filepath = $compiler->template->block_data[$_name]['file'];
$_tpl->allow_relative_path = true;
- if ($compiler->nocache) {
- $_tpl->compiler->forceNocache = 2;
- } else {
- $_tpl->compiler->forceNocache = 1;
- }
+ $_tpl->compiler->inheritance = true;
$_tpl->compiler->suppressHeader = true;
+ $_tpl->compiler->suppressFilter = true;
$_tpl->compiler->suppressTemplatePropertyHeader = true;
$_tpl->compiler->suppressMergedTemplates = true;
- if (strpos($compiler->template->block_data[$_name]['source'], '%%%%SMARTY_PARENT%%%%') !== false) {
- $_output = str_replace('%%%%SMARTY_PARENT%%%%', $compiler->parser->current_buffer->to_smarty_php(), $_tpl->compiler->compileTemplate($_tpl));
+ $nocache = $compiler->nocache || $compiler->tag_nocache;
+ if (strpos($compiler->template->block_data[$_name]['source'], self::parent) !== false) {
+ $_output = str_replace(self::parent, $compiler->parser->current_buffer->to_smarty_php(), $_tpl->compiler->compileTemplate($_tpl, $nocache));
} elseif ($compiler->template->block_data[$_name]['mode'] == 'prepend') {
- $_output = $_tpl->compiler->compileTemplate($_tpl) . $compiler->parser->current_buffer->to_smarty_php();
+ $_output = $_tpl->compiler->compileTemplate($_tpl, $nocache) . $compiler->parser->current_buffer->to_smarty_php();
} elseif ($compiler->template->block_data[$_name]['mode'] == 'append') {
- $_output = $compiler->parser->current_buffer->to_smarty_php() . $_tpl->compiler->compileTemplate($_tpl);
+ $_output = $compiler->parser->current_buffer->to_smarty_php() . $_tpl->compiler->compileTemplate($_tpl, $nocache);
} elseif (!empty($compiler->template->block_data[$_name])) {
- $_output = $_tpl->compiler->compileTemplate($_tpl);
+ $_output = $_tpl->compiler->compileTemplate($_tpl, $nocache);
}
$compiler->template->properties['file_dependency'] = array_merge($compiler->template->properties['file_dependency'], $_tpl->properties['file_dependency']);
$compiler->template->properties['function'] = array_merge($compiler->template->properties['function'], $_tpl->properties['function']);
@@ -216,62 +204,241 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase {
}
}
unset($_tpl);
+ $compiler->has_code = true;
return $_output;
}
+ /**
+ * Compile $smarty.block.parent
+ *
+ * @param object $compiler compiler object
+ * @param string $_name optional name of child block
+ *
+ * @return string compiled code of child block
+ */
+ static function compileParentBlock($compiler, $_name = null)
+ {
+ // if called by {$smarty.block.parent} we must search the name of enclosing {block}
+ if ($_name == null) {
+ $stack_count = count($compiler->_tag_stack);
+ while (--$stack_count >= 0) {
+ if ($compiler->_tag_stack[$stack_count][0] == 'block') {
+ $_name = trim($compiler->_tag_stack[$stack_count][1][0]['name'], "\"'");
+ break;
+ }
+ }
+ }
+ if ($_name == null) {
+ $compiler->trigger_template_error(' tag {$smarty.block.parent} used outside {block} tags ', $compiler->lex->taglineno);
+ }
+ if (empty(Smarty_Internal_Compile_Block::$nested_block_names)) {
+ $compiler->trigger_template_error(' illegal {$smarty.block.parent} in parent template ', $compiler->lex->taglineno);
+ }
+ Smarty_Internal_Compile_Block::$block_data[Smarty_Internal_Compile_Block::$nested_block_names[0]]['source'] .= Smarty_Internal_Compile_Block::parent;
+ $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBLOCK);
+ $compiler->has_code = false;
+ return;
+ }
+
+ /**
+ * Process block source
+ *
+ * @param $compiler
+ * @param string $source source text
+ *
+ */
+ static function blockSource($compiler, $source)
+ {
+ Smarty_Internal_Compile_Block::$block_data[Smarty_Internal_Compile_Block::$nested_block_names[0]]['source'] .= $source;
+ }
}
/**
* Smarty Internal Plugin Compile BlockClose Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {/block} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
+ *
* @return string compiled code
*/
- public function compile($args, $compiler) {
+ public function compile($args, $compiler)
+ {
$compiler->has_code = true;
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
$saved_data = $this->closeTag($compiler, array('block'));
$_name = trim($saved_data[0]['name'], "\"'");
+ // reset flag for {block} tag
+ $compiler->inheritance = $saved_data[1];
+ // check if we process an inheritance child template
+ if ($compiler->inheritance_child) {
+ $name1 = Smarty_Internal_Compile_Block::$nested_block_names[0];
+ Smarty_Internal_Compile_Block::$block_data[$name1]['source'] .= "{$compiler->smarty->left_delimiter}/private_child_block{$compiler->smarty->right_delimiter}";
+ array_shift(Smarty_Internal_Compile_Block::$nested_block_names);
+ if (!empty(Smarty_Internal_Compile_Block::$nested_block_names)) {
+ $name2 = Smarty_Internal_Compile_Block::$nested_block_names[0];
+ if (isset($compiler->template->block_data[$name1]) || !$saved_data[0]['hide']) {
+ if (isset(Smarty_Internal_Compile_Block::$block_data[$name1]['child']) || !isset($compiler->template->block_data[$name1])) {
+ Smarty_Internal_Compile_Block::$block_data[$name2]['source'] .= Smarty_Internal_Compile_Block::$block_data[$name1]['source'];
+ } else {
+ if ($compiler->template->block_data[$name1]['mode'] == 'append') {
+ Smarty_Internal_Compile_Block::$block_data[$name2]['source'] .= Smarty_Internal_Compile_Block::$block_data[$name1]['source'] . $compiler->template->block_data[$name1]['source'];
+ } elseif ($compiler->template->block_data[$name1]['mode'] == 'prepend') {
+ Smarty_Internal_Compile_Block::$block_data[$name2]['source'] .= $compiler->template->block_data[$name1]['source'] . Smarty_Internal_Compile_Block::$block_data[$name1]['source'];
+ } else {
+ Smarty_Internal_Compile_Block::$block_data[$name2]['source'] .= $compiler->template->block_data[$name1]['source'];
+ }
+ }
+ }
+ unset(Smarty_Internal_Compile_Block::$block_data[$name1]);
+ $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBLOCK);
+ } else {
+ if (isset($compiler->template->block_data[$name1]) || !$saved_data[0]['hide']) {
+ if (isset($compiler->template->block_data[$name1]) && !isset(Smarty_Internal_Compile_Block::$block_data[$name1]['child'])) {
+ if (strpos($compiler->template->block_data[$name1]['source'], Smarty_Internal_Compile_Block::parent) !== false) {
+ $compiler->template->block_data[$name1]['source'] =
+ str_replace(Smarty_Internal_Compile_Block::parent, Smarty_Internal_Compile_Block::$block_data[$name1]['source'], $compiler->template->block_data[$name1]['source']);
+ } elseif ($compiler->template->block_data[$name1]['mode'] == 'prepend') {
+ $compiler->template->block_data[$name1]['source'] .= Smarty_Internal_Compile_Block::$block_data[$name1]['source'];
+ } elseif ($compiler->template->block_data[$name1]['mode'] == 'append') {
+ $compiler->template->block_data[$name1]['source'] = Smarty_Internal_Compile_Block::$block_data[$name1]['source'] . $compiler->template->block_data[$name1]['source'];
+ }
+ } else {
+ $compiler->template->block_data[$name1]['source'] = Smarty_Internal_Compile_Block::$block_data[$name1]['source'];
+ }
+ $compiler->template->block_data[$name1]['mode'] = 'replace';
+ if ($saved_data[0]['append']) {
+ $compiler->template->block_data[$name1]['mode'] = 'append';
+ }
+ if ($saved_data[0]['prepend']) {
+ $compiler->template->block_data[$name1]['mode'] = 'prepend';
+ }
+ }
+ unset(Smarty_Internal_Compile_Block::$block_data[$name1]);
+ $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBODY);
+ }
+ $compiler->has_code = false;
+ return;
+ }
if (isset($compiler->template->block_data[$_name]) && !isset($compiler->template->block_data[$_name]['compiled'])) {
- // restore to status before {block} tag as new subtemplate code of parent {block} is not needed
- // TODO: Below code was disabled in 3.1.8 because of problems with {include} in nested {block} tags in child templates
- // combined with append/prepend or $smarty.block.parent
- // For later versions it should be checked under which conditions it could run for optimisation
- //
- //$compiler->merged_templates = $saved_data[4];
- //$compiler->smarty->merged_templates_func = $saved_data[5];
- //$compiler->template->properties = $saved_data[6];
- //$compiler->template->has_nocache_code = $saved_data[7];
$_output = Smarty_Internal_Compile_Block::compileChildBlock($compiler, $_name);
} else {
- if (isset($saved_data[0]['hide']) && !isset($compiler->template->block_data[$_name]['source'])) {
+ if ($saved_data[0]['hide'] && !isset($compiler->template->block_data[$_name]['source'])) {
$_output = '';
} else {
$_output = $compiler->parser->current_buffer->to_smarty_php();
}
- unset($compiler->template->block_data[$_name]['compiled']);
}
+ unset($compiler->template->block_data[$_name]['compiled']);
// reset flags
- $compiler->parser->current_buffer = $saved_data[1];
- $compiler->nocache = $saved_data[2];
- $compiler->smarty->merge_compiled_includes = $saved_data[3];
- // reset flag for {block} tag
- $compiler->inheritance = false;
+ $compiler->parser->current_buffer = $saved_data[2];
+ if ($compiler->nocache) {
+ $compiler->tag_nocache = true;
+ }
+ $compiler->nocache = $saved_data[3];
// $_output content has already nocache code processed
$compiler->suppressNocacheProcessing = true;
+
return $_output;
}
+}
+
+/**
+ * Smarty Internal Plugin Compile Child Block Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Private_Child_Block extends Smarty_Internal_CompileBase
+{
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
+ public $required_attributes = array('name', 'file', 'uid', 'line', 'type', 'resource');
+ /**
+ * Compiles code for the {private_child_block} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
+ * @return boolean true
+ */
+ public function compile($args, $compiler)
+ {
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+
+ // update template with original template resource of {block}
+ if (trim($_attr['type'], "'") == 'file') {
+ $compiler->template->template_resource = 'file:' . realpath(trim($_attr['file'], "'"));
+ } else {
+ $compiler->template->template_resource = trim($_attr['resource'], "'");
+ }
+ // source object
+ unset ($compiler->template->source);
+ $exists = $compiler->template->source->exists;
+
+ // must merge includes
+ if ($_attr['nocache'] == true) {
+ $compiler->tag_nocache = true;
+ }
+ $save = array($_attr, $compiler->nocache);
+
+ // set trace back to child block
+ $compiler->pushTrace(trim($_attr['file'], "\"'"), trim($_attr['uid'], "\"'"), $_attr['line'] - $compiler->lex->line);
+
+ $this->openTag($compiler, 'private_child_block', $save);
+
+ $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
+ $compiler->has_code = false;
+
+ return true;
+ }
}
-?> \ No newline at end of file
+/**
+ * Smarty Internal Plugin Compile Child Block Close Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Private_Child_Blockclose extends Smarty_Internal_CompileBase
+{
+
+ /**
+ * Compiles code for the {/private_child_block} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
+ * @return boolean true
+ */
+ public function compile($args, $compiler)
+ {
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+
+ $saved_data = $this->closeTag($compiler, array('private_child_block'));
+
+ // end of child block
+ $compiler->popTrace();
+
+ $compiler->nocache = $saved_data[1];
+ $compiler->has_code = false;
+
+ return true;
+ }
+}
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_break.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_break.php
index 259c66e2b..b51e9e8f3 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_break.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_break.php
@@ -1,77 +1,75 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Break
- *
- * Compiles the {break} tag
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-/**
- * Smarty Internal Plugin Compile Break Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase {
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $optional_attributes = array('levels');
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $shorttag_order = array('levels');
-
- /**
- * Compiles code for the {break} tag
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @return string compiled code
- */
- public function compile($args, $compiler, $parameter)
- {
- static $_is_loopy = array('for' => true, 'foreach' => true, 'while' => true, 'section' => true);
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
-
- if ($_attr['nocache'] === true) {
- $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
- }
-
- if (isset($_attr['levels'])) {
- if (!is_numeric($_attr['levels'])) {
- $compiler->trigger_template_error('level attribute must be a numeric constant', $compiler->lex->taglineno);
- }
- $_levels = $_attr['levels'];
- } else {
- $_levels = 1;
- }
- $level_count = $_levels;
- $stack_count = count($compiler->_tag_stack) - 1;
- while ($level_count > 0 && $stack_count >= 0) {
- if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) {
- $level_count--;
- }
- $stack_count--;
- }
- if ($level_count != 0) {
- $compiler->trigger_template_error("cannot break {$_levels} level(s)", $compiler->lex->taglineno);
- }
- $compiler->has_code = true;
- return "<?php break {$_levels}?>";
- }
-
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty Internal Plugin Compile Break
+ * Compiles the {break} tag
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
+
+/**
+ * Smarty Internal Plugin Compile Break Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase
+{
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
+ public $optional_attributes = array('levels');
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
+ public $shorttag_order = array('levels');
+
+ /**
+ * Compiles code for the {break} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ */
+ public function compile($args, $compiler, $parameter)
+ {
+ static $_is_loopy = array('for' => true, 'foreach' => true, 'while' => true, 'section' => true);
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+
+ if ($_attr['nocache'] === true) {
+ $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
+ }
+
+ if (isset($_attr['levels'])) {
+ if (!is_numeric($_attr['levels'])) {
+ $compiler->trigger_template_error('level attribute must be a numeric constant', $compiler->lex->taglineno);
+ }
+ $_levels = $_attr['levels'];
+ } else {
+ $_levels = 1;
+ }
+ $level_count = $_levels;
+ $stack_count = count($compiler->_tag_stack) - 1;
+ while ($level_count > 0 && $stack_count >= 0) {
+ if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) {
+ $level_count --;
+ }
+ $stack_count --;
+ }
+ if ($level_count != 0) {
+ $compiler->trigger_template_error("cannot break {$_levels} level(s)", $compiler->lex->taglineno);
+ }
+
+ return "<?php break {$_levels};?>";
+ }
+}
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_call.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_call.php
index af12a048c..bfbd1f547 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_call.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_call.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Function_Call
- *
* Compiles the calls of user defined tags defined by {function}
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Function_Call Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -42,9 +41,9 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase {
/**
* Compiles the calls of user defined tags defined by {function}
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
* @return string compiled code
*/
public function compile($args, $compiler)
@@ -53,7 +52,7 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase {
$_attr = $this->getAttributes($compiler, $args);
// save possible attributes
if (isset($_attr['assign'])) {
- // output will be stored in a smarty variable instead of beind displayed
+ // output will be stored in a smarty variable instead of being displayed
$_assign = $_attr['assign'];
}
$_name = $_attr['name'];
@@ -96,7 +95,7 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase {
}
}
}
- //varibale name?
+ //variable name?
if (!(strpos($_name, '$') === false)) {
$call_cache = $_name;
$call_function = '$tmp = "smarty_template_function_".' . $_name . '; $tmp';
@@ -122,9 +121,7 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase {
$_output = "<?php {$call_function}(\$_smarty_tpl,{$_params});?>\n";
}
}
+
return $_output;
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_capture.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_capture.php
index 9a5071ebe..34728e47a 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_capture.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_capture.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Capture
- *
* Compiles the {capture} tag
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Capture Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -35,8 +34,9 @@ class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {capture} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
* @return string compiled code
*/
public function compile($args, $compiler)
@@ -55,22 +55,22 @@ class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase {
return $_output;
}
-
}
/**
* Smarty Internal Plugin Compile Captureclose Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {/capture} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
* @return string compiled code
*/
public function compile($args, $compiler)
@@ -90,9 +90,7 @@ class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase {
$_output .= " if (isset( \$_capture_append)) \$_smarty_tpl->append( \$_capture_append, ob_get_contents());\n";
$_output .= " Smarty::\$_smarty_vars['capture'][\$_capture_buffer]=ob_get_clean();\n";
$_output .= "} else \$_smarty_tpl->capture_error();?>";
+
return $_output;
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_config_load.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_config_load.php
index deaa052c5..8813664d4 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_config_load.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_config_load.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Config Load
- *
* Compiles the {config load} tag
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Config Load Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -30,7 +29,7 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase {
* @var array
* @see Smarty_Internal_CompileBase
*/
- public $shorttag_order = array('file','section');
+ public $shorttag_order = array('file', 'section');
/**
* Attribute definition: Overwrites base class.
*
@@ -42,13 +41,14 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {config_load} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
* @return string compiled code
*/
public function compile($args, $compiler)
{
- static $_is_legal_scope = array('local' => true,'parent' => true,'root' => true,'global' => true);
+ static $_is_legal_scope = array('local' => true, 'parent' => true, 'root' => true, 'global' => true);
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
@@ -56,8 +56,7 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase {
$compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
}
-
- // save posible attributes
+ // save possible attributes
$conf_file = $_attr['file'];
if (isset($_attr['section'])) {
$section = $_attr['section'];
@@ -70,16 +69,14 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase {
$_attr['scope'] = trim($_attr['scope'], "'\"");
if (isset($_is_legal_scope[$_attr['scope']])) {
$scope = $_attr['scope'];
- } else {
+ } else {
$compiler->trigger_template_error('illegal value for "scope" attribute', $compiler->lex->taglineno);
- }
+ }
}
// create config object
$_output = "<?php \$_config = new Smarty_Internal_Config($conf_file, \$_smarty_tpl->smarty, \$_smarty_tpl);";
$_output .= "\$_config->loadConfigVars($section, '$scope'); ?>";
+
return $_output;
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_continue.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_continue.php
index 4082a93b3..af3765128 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_continue.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_continue.php
@@ -1,78 +1,75 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Continue
- *
- * Compiles the {continue} tag
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Continue Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBase {
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $optional_attributes = array('levels');
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $shorttag_order = array('levels');
-
- /**
- * Compiles code for the {continue} tag
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @return string compiled code
- */
- public function compile($args, $compiler, $parameter)
- {
- static $_is_loopy = array('for' => true, 'foreach' => true, 'while' => true, 'section' => true);
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
-
- if ($_attr['nocache'] === true) {
- $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
- }
-
- if (isset($_attr['levels'])) {
- if (!is_numeric($_attr['levels'])) {
- $compiler->trigger_template_error('level attribute must be a numeric constant', $compiler->lex->taglineno);
- }
- $_levels = $_attr['levels'];
- } else {
- $_levels = 1;
- }
- $level_count = $_levels;
- $stack_count = count($compiler->_tag_stack) - 1;
- while ($level_count > 0 && $stack_count >= 0) {
- if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) {
- $level_count--;
- }
- $stack_count--;
- }
- if ($level_count != 0) {
- $compiler->trigger_template_error("cannot continue {$_levels} level(s)", $compiler->lex->taglineno);
- }
- $compiler->has_code = true;
- return "<?php continue {$_levels}?>";
- }
-
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty Internal Plugin Compile Continue
+ * Compiles the {continue} tag
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
+
+/**
+ * Smarty Internal Plugin Compile Continue Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBase
+{
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
+ public $optional_attributes = array('levels');
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
+ public $shorttag_order = array('levels');
+
+ /**
+ * Compiles code for the {continue} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ */
+ public function compile($args, $compiler, $parameter)
+ {
+ static $_is_loopy = array('for' => true, 'foreach' => true, 'while' => true, 'section' => true);
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+
+ if ($_attr['nocache'] === true) {
+ $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
+ }
+
+ if (isset($_attr['levels'])) {
+ if (!is_numeric($_attr['levels'])) {
+ $compiler->trigger_template_error('level attribute must be a numeric constant', $compiler->lex->taglineno);
+ }
+ $_levels = $_attr['levels'];
+ } else {
+ $_levels = 1;
+ }
+ $level_count = $_levels;
+ $stack_count = count($compiler->_tag_stack) - 1;
+ while ($level_count > 0 && $stack_count >= 0) {
+ if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) {
+ $level_count --;
+ }
+ $stack_count --;
+ }
+ if ($level_count != 0) {
+ $compiler->trigger_template_error("cannot continue {$_levels} level(s)", $compiler->lex->taglineno);
+ }
+
+ return "<?php continue {$_levels};?>";
+ }
+}
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_debug.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_debug.php
index f50c7aee2..b184a746b 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_debug.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_debug.php
@@ -1,28 +1,28 @@
<?php
/**
* Smarty Internal Plugin Compile Debug
- *
* Compiles the {debug} tag.
* It opens a window the the Smarty Debugging Console.
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Debug Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {debug} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
* @return string compiled code
*/
public function compile($args, $compiler)
@@ -35,9 +35,7 @@ class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase {
// display debug template
$_output = "<?php \$_smarty_tpl->smarty->loadPlugin('Smarty_Internal_Debug'); Smarty_Internal_Debug::display_debug(\$_smarty_tpl); ?>";
+
return $_output;
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_eval.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_eval.php
index 6cf481b50..407482f07 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_eval.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_eval.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Eval
- *
* Compiles the {eval} tag.
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Eval Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -37,13 +36,14 @@ class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase {
* @var array
* @see Smarty_Internal_CompileBase
*/
- public $shorttag_order = array('var','assign');
+ public $shorttag_order = array('var', 'assign');
/**
* Compiles code for the {eval} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
* @return string compiled code
*/
public function compile($args, $compiler)
@@ -53,21 +53,19 @@ class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase {
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
if (isset($_attr['assign'])) {
- // output will be stored in a smarty variable instead of beind displayed
+ // output will be stored in a smarty variable instead of being displayed
$_assign = $_attr['assign'];
}
// create template object
- $_output = "\$_template = new {$compiler->smarty->template_class}('eval:'.".$_attr['var'].", \$_smarty_tpl->smarty, \$_smarty_tpl);";
+ $_output = "\$_template = new {$compiler->smarty->template_class}('eval:'." . $_attr['var'] . ", \$_smarty_tpl->smarty, \$_smarty_tpl);";
//was there an assign attribute?
if (isset($_assign)) {
$_output .= "\$_smarty_tpl->assign($_assign,\$_template->fetch());";
} else {
$_output .= "echo \$_template->fetch();";
}
+
return "<?php $_output ?>";
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_extends.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_extends.php
index 9042aa233..2b541f2e3 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_extends.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_extends.php
@@ -1,128 +1,85 @@
<?php
/**
-* Smarty Internal Plugin Compile extend
-*
-* Compiles the {extends} tag
-*
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
+ * Smarty Internal Plugin Compile extend
+ * Compiles the {extends} tag
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
/**
-* Smarty Internal Plugin Compile extend Class
-*
-* @package Smarty
-* @subpackage Compiler
-*/
-class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase {
-
+ * Smarty Internal Plugin Compile extend Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase
+{
/**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
public $required_attributes = array('file');
/**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
public $shorttag_order = array('file');
- /**
- * mbstring.overload flag
- *
- * @var int
- */
- public $mbstring_overload = 0;
/**
- * Compiles code for the {extends} tag
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @return string compiled code
- */
+ * Compiles code for the {extends} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
+ * @return string compiled code
+ */
public function compile($args, $compiler)
{
- static $_is_stringy = array('string' => true, 'eval' => true);
- $this->_rdl = preg_quote($compiler->smarty->right_delimiter);
- $this->_ldl = preg_quote($compiler->smarty->left_delimiter);
- $filepath = $compiler->template->source->filepath;
- $this->mbstring_overload = ini_get('mbstring.func_overload') & 2;
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
if ($_attr['nocache'] === true) {
$compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
}
-
- $_smarty_tpl = $compiler->template;
- $include_file = null;
if (strpos($_attr['file'], '$_tmp') !== false) {
$compiler->trigger_template_error('illegal value for file attribute', $compiler->lex->taglineno);
}
- eval('$include_file = ' . $_attr['file'] . ';');
+
+ $name = $_attr['file'];
+ /** @var Smarty_Internal_Template $_smarty_tpl
+ * used in evaluated code
+ */
+ $_smarty_tpl = $compiler->template;
+ eval("\$tpl_name = $name;");
// create template object
- $_template = new $compiler->smarty->template_class($include_file, $compiler->smarty, $compiler->template);
- // save file dependency
- if (isset($_is_stringy[$_template->source->type])) {
- $template_sha1 = sha1($include_file);
- } else {
- $template_sha1 = sha1($_template->source->filepath);
- }
- if (isset($compiler->template->properties['file_dependency'][$template_sha1])) {
- $compiler->trigger_template_error("illegal recursive call of \"{$include_file}\"", $compiler->lex->line - 1);
- }
- $compiler->template->properties['file_dependency'][$template_sha1] = array($_template->source->filepath, $_template->source->timestamp, $_template->source->type);
- $_content = ($this->mbstring_overload ? mb_substr($compiler->template->source->content, $compiler->lex->counter - 1, 20000000, 'latin1') : substr($compiler->template->source->content, $compiler->lex->counter - 1));
- if (preg_match_all("!({$this->_ldl}block\s(.+?){$this->_rdl})!", $_content, $s) !=
- preg_match_all("!({$this->_ldl}/block{$this->_rdl})!", $_content, $c)) {
- $compiler->trigger_template_error('unmatched {block} {/block} pairs');
+ $_template = new $compiler->smarty->template_class($tpl_name, $compiler->smarty, $compiler->template);
+ // check for recursion
+ $uid = $_template->source->uid;
+ if (isset($compiler->extends_uid[$uid])) {
+ $compiler->trigger_template_error("illegal recursive call of \"$include_file\"", $compiler->lex->line - 1);
}
- preg_match_all("!{$this->_ldl}block\s(.+?){$this->_rdl}|{$this->_ldl}/block{$this->_rdl}|{$this->_ldl}\*([\S\s]*?)\*{$this->_rdl}!", $_content, $_result, PREG_OFFSET_CAPTURE);
- $_result_count = count($_result[0]);
- $_start = 0;
- while ($_start+1 < $_result_count) {
- $_end = 0;
- $_level = 1;
- if (($this->mbstring_overload ? mb_substr($_result[0][$_start][0],0,mb_strlen($compiler->smarty->left_delimiter,'latin1')+1, 'latin1') : substr($_result[0][$_start][0],0,strlen($compiler->smarty->left_delimiter)+1)) == $compiler->smarty->left_delimiter.'*') {
- $_start++;
- continue;
- }
- while ($_level != 0) {
- $_end++;
- if (($this->mbstring_overload ? mb_substr($_result[0][$_start + $_end][0],0,mb_strlen($compiler->smarty->left_delimiter,'latin1')+1, 'latin1') : substr($_result[0][$_start + $_end][0],0,strlen($compiler->smarty->left_delimiter)+1)) == $compiler->smarty->left_delimiter.'*') {
- continue;
- }
- if (!strpos($_result[0][$_start + $_end][0], '/')) {
- $_level++;
- } else {
- $_level--;
+ $compiler->extends_uid[$uid] = true;
+ if (empty($_template->source->components)) {
+ array_unshift($compiler->sources, $_template->source);
+ } else {
+ foreach ($_template->source->components as $source) {
+ array_unshift($compiler->sources, $source);
+ $uid = $source->uid;
+ if (isset($compiler->extends_uid[$uid])) {
+ $compiler->trigger_template_error("illegal recursive call of \"{$source->filepath}\"", $compiler->lex->line - 1);
}
- }
- $_block_content = str_replace($compiler->smarty->left_delimiter . '$smarty.block.parent' . $compiler->smarty->right_delimiter, '%%%%SMARTY_PARENT%%%%',
- ($this->mbstring_overload ? mb_substr($_content, $_result[0][$_start][1] + mb_strlen($_result[0][$_start][0], 'latin1'), $_result[0][$_start + $_end][1] - $_result[0][$_start][1] - + mb_strlen($_result[0][$_start][0], 'latin1'), 'latin1') : substr($_content, $_result[0][$_start][1] + strlen($_result[0][$_start][0]), $_result[0][$_start + $_end][1] - $_result[0][$_start][1] - + strlen($_result[0][$_start][0]))));
- Smarty_Internal_Compile_Block::saveBlockData($_block_content, $_result[0][$_start][0], $compiler->template, $filepath);
- $_start = $_start + $_end + 1;
- }
- if ($_template->source->type == 'extends') {
- $_template->block_data = $compiler->template->block_data;
- }
- $compiler->template->source->content = $_template->source->content;
- if ($_template->source->type == 'extends') {
- $compiler->template->block_data = $_template->block_data;
- foreach ($_template->source->components as $key => $component) {
- $compiler->template->properties['file_dependency'][$key] = array($component->filepath, $component->timestamp, $component->type);
+ $compiler->extends_uid[$uid] = true;
}
}
- $compiler->template->source->filepath = $_template->source->filepath;
- $compiler->abort_and_recompile = true;
+ unset ($_template);
+ $compiler->inheritance_child = true;
+ $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBODY);
return '';
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_for.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_for.php
index 057f4fb79..a624b922c 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_for.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_for.php
@@ -1,39 +1,35 @@
<?php
/**
* Smarty Internal Plugin Compile For
- *
* Compiles the {for} {forelse} {/for} tags
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile For Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {for} tag
- *
- * Smarty 3 does implement two different sytaxes:
- *
+ * Smarty 3 does implement two different syntax's:
* - {for $var in $array}
* For looping over arrays or iterators
- *
* - {for $x=0; $x<$y; $x++}
* For general loops
+ * The parser is generating different sets of attribute by which this compiler can
+ * determine which syntax is used.
*
- * The parser is gereration different sets of attribute by which this compiler can
- * determin which syntax is used.
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
* @return string compiled code
*/
public function compile($args, $compiler, $parameter)
@@ -54,7 +50,7 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase {
$output .= " \$_smarty_tpl->tpl_vars[$_statement[var]] = new Smarty_Variable;";
$output .= " \$_smarty_tpl->tpl_vars[$_statement[var]]->value = $_statement[value];\n";
}
- $output .= " if ($_attr[ifexp]){ for (\$_foo=true;$_attr[ifexp]; \$_smarty_tpl->tpl_vars[$_attr[var]]->value$_attr[step]){\n";
+ $output .= " if ($_attr[ifexp]) { for (\$_foo=true;$_attr[ifexp]; \$_smarty_tpl->tpl_vars[$_attr[var]]->value$_attr[step]) {\n";
} else {
$_statement = $_attr['start'];
$output .= "\$_smarty_tpl->tpl_vars[$_statement[var]] = new Smarty_Variable;";
@@ -64,12 +60,12 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase {
$output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->step = 1;";
}
if (isset($_attr['max'])) {
- $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->total = (int)min(ceil((\$_smarty_tpl->tpl_vars[$_statement[var]]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$_statement[var]]->step)),$_attr[max]);\n";
+ $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->total = (int) min(ceil((\$_smarty_tpl->tpl_vars[$_statement[var]]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$_statement[var]]->step)),$_attr[max]);\n";
} else {
- $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->total = (int)ceil((\$_smarty_tpl->tpl_vars[$_statement[var]]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$_statement[var]]->step));\n";
+ $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->total = (int) ceil((\$_smarty_tpl->tpl_vars[$_statement[var]]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$_statement[var]]->step));\n";
}
- $output .= "if (\$_smarty_tpl->tpl_vars[$_statement[var]]->total > 0){\n";
- $output .= "for (\$_smarty_tpl->tpl_vars[$_statement[var]]->value = $_statement[value], \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration = 1;\$_smarty_tpl->tpl_vars[$_statement[var]]->iteration <= \$_smarty_tpl->tpl_vars[$_statement[var]]->total;\$_smarty_tpl->tpl_vars[$_statement[var]]->value += \$_smarty_tpl->tpl_vars[$_statement[var]]->step, \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration++){\n";
+ $output .= "if (\$_smarty_tpl->tpl_vars[$_statement[var]]->total > 0) {\n";
+ $output .= "for (\$_smarty_tpl->tpl_vars[$_statement[var]]->value = $_statement[value], \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration = 1;\$_smarty_tpl->tpl_vars[$_statement[var]]->iteration <= \$_smarty_tpl->tpl_vars[$_statement[var]]->total;\$_smarty_tpl->tpl_vars[$_statement[var]]->value += \$_smarty_tpl->tpl_vars[$_statement[var]]->step, \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration++) {\n";
$output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->first = \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration == 1;";
$output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->last = \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration == \$_smarty_tpl->tpl_vars[$_statement[var]]->total;";
}
@@ -81,51 +77,52 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase {
// return compiled code
return $output;
}
-
}
/**
* Smarty Internal Plugin Compile Forelse Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Forelse extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Forelse extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {forelse} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return string compiled code
*/
public function compile($args, $compiler, $parameter)
{
// check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
+ $_attr = $this->getAttributes($compiler, $args);
list($openTag, $nocache) = $this->closeTag($compiler, array('for'));
$this->openTag($compiler, 'forelse', array('forelse', $nocache));
+
return "<?php }} else { ?>";
}
-
}
/**
* Smarty Internal Plugin Compile Forclose Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {/for} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return string compiled code
*/
public function compile($args, $compiler, $parameter)
@@ -145,7 +142,4 @@ class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase {
return "<?php }} ?>";
}
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_foreach.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_foreach.php
index 1354c89d5..fc77f5749 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_foreach.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_foreach.php
@@ -1,21 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Foreach
- *
* Compiles the {foreach} {foreachelse} {/foreach} tags
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Foreach Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
+class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -36,19 +36,19 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
* @var array
* @see Smarty_Internal_CompileBase
*/
- public $shorttag_order = array('from','item','key','name');
+ public $shorttag_order = array('from', 'item', 'key', 'name');
/**
* Compiles code for the {foreach} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return string compiled code
*/
public function compile($args, $compiler, $parameter)
{
- $tpl = $compiler->template;
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
@@ -79,12 +79,12 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
$ItemVarName = '$' . trim($item, '\'"') . '@';
// evaluates which Smarty variables and properties have to be computed
if ($has_name) {
- $usesSmartyFirst = strpos($tpl->source->content, $SmartyVarName . 'first') !== false;
- $usesSmartyLast = strpos($tpl->source->content, $SmartyVarName . 'last') !== false;
- $usesSmartyIndex = strpos($tpl->source->content, $SmartyVarName . 'index') !== false;
- $usesSmartyIteration = strpos($tpl->source->content, $SmartyVarName . 'iteration') !== false;
- $usesSmartyShow = strpos($tpl->source->content, $SmartyVarName . 'show') !== false;
- $usesSmartyTotal = strpos($tpl->source->content, $SmartyVarName . 'total') !== false;
+ $usesSmartyFirst = strpos($compiler->lex->data, $SmartyVarName . 'first') !== false;
+ $usesSmartyLast = strpos($compiler->lex->data, $SmartyVarName . 'last') !== false;
+ $usesSmartyIndex = strpos($compiler->lex->data, $SmartyVarName . 'index') !== false;
+ $usesSmartyIteration = strpos($compiler->lex->data, $SmartyVarName . 'iteration') !== false;
+ $usesSmartyShow = strpos($compiler->lex->data, $SmartyVarName . 'show') !== false;
+ $usesSmartyTotal = strpos($compiler->lex->data, $SmartyVarName . 'total') !== false;
} else {
$usesSmartyFirst = false;
$usesSmartyLast = false;
@@ -92,12 +92,12 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
$usesSmartyShow = false;
}
- $usesPropFirst = $usesSmartyFirst || strpos($tpl->source->content, $ItemVarName . 'first') !== false;
- $usesPropLast = $usesSmartyLast || strpos($tpl->source->content, $ItemVarName . 'last') !== false;
- $usesPropIndex = $usesPropFirst || strpos($tpl->source->content, $ItemVarName . 'index') !== false;
- $usesPropIteration = $usesPropLast || strpos($tpl->source->content, $ItemVarName . 'iteration') !== false;
- $usesPropShow = strpos($tpl->source->content, $ItemVarName . 'show') !== false;
- $usesPropTotal = $usesSmartyTotal || $usesSmartyShow || $usesPropShow || $usesPropLast || strpos($tpl->source->content, $ItemVarName . 'total') !== false;
+ $usesPropFirst = $usesSmartyFirst || strpos($compiler->lex->data, $ItemVarName . 'first') !== false;
+ $usesPropLast = $usesSmartyLast || strpos($compiler->lex->data, $ItemVarName . 'last') !== false;
+ $usesPropIndex = $usesPropFirst || strpos($compiler->lex->data, $ItemVarName . 'index') !== false;
+ $usesPropIteration = $usesPropLast || strpos($compiler->lex->data, $ItemVarName . 'iteration') !== false;
+ $usesPropShow = strpos($compiler->lex->data, $ItemVarName . 'show') !== false;
+ $usesPropTotal = $usesSmartyTotal || $usesSmartyShow || $usesPropShow || $usesPropLast || strpos($compiler->lex->data, $ItemVarName . 'total') !== false;
// generate output code
$output = "<?php ";
$output .= " \$_smarty_tpl->tpl_vars[$item] = new Smarty_Variable; \$_smarty_tpl->tpl_vars[$item]->_loop = false;\n";
@@ -131,7 +131,7 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
$output .= " \$_smarty_tpl->tpl_vars['smarty']->value['foreach'][$name]['show']=(\$_smarty_tpl->tpl_vars[$item]->total > 0);\n";
}
}
- $output .= "foreach (\$_from as \$_smarty_tpl->tpl_vars[$item]->key => \$_smarty_tpl->tpl_vars[$item]->value){\n\$_smarty_tpl->tpl_vars[$item]->_loop = true;\n";
+ $output .= "foreach (\$_from as \$_smarty_tpl->tpl_vars[$item]->key => \$_smarty_tpl->tpl_vars[$item]->value) {\n\$_smarty_tpl->tpl_vars[$item]->_loop = true;\n";
if ($key != null) {
$output .= " \$_smarty_tpl->tpl_vars[$key]->value = \$_smarty_tpl->tpl_vars[$item]->key;\n";
}
@@ -170,17 +170,18 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
/**
* Smarty Internal Plugin Compile Foreachelse Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {foreachelse} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return string compiled code
*/
public function compile($args, $compiler, $parameter)
@@ -193,23 +194,23 @@ class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase {
return "<?php }\nif (!\$_smarty_tpl->tpl_vars[$item]->_loop) {\n?>";
}
-
}
/**
* Smarty Internal Plugin Compile Foreachclose Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {/foreach} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return string compiled code
*/
public function compile($args, $compiler, $parameter)
@@ -225,7 +226,4 @@ class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase {
return "<?php } ?>";
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_function.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_function.php
index 876b13dee..298eb16f2 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_function.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_function.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Function
- *
* Compiles the {function} {/function} tags
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Function Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -42,9 +41,10 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {function} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return boolean true
*/
public function compile($args, $compiler, $parameter)
@@ -57,16 +57,19 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase {
}
unset($_attr['nocache']);
$save = array($_attr, $compiler->parser->current_buffer,
- $compiler->template->has_nocache_code, $compiler->template->required_plugins);
+ $compiler->template->has_nocache_code, $compiler->template->required_plugins);
$this->openTag($compiler, 'function', $save);
$_name = trim($_attr['name'], "'\"");
unset($_attr['name']);
// set flag that we are compiling a template function
$compiler->compiles_template_function = true;
$compiler->template->properties['function'][$_name]['parameter'] = array();
+ /** @var Smarty_Internal_Template $_smarty_tpl
+ * used in evaluated code
+ */
$_smarty_tpl = $compiler->template;
foreach ($_attr as $_key => $_data) {
- eval ('$tmp='.$_data.';');
+ eval ('$tmp=' . $_data . ';');
$compiler->template->properties['function'][$_name]['parameter'][$_key] = $tmp;
}
$compiler->smarty->template_functions[$_name]['parameter'] = $compiler->template->properties['function'][$_name]['parameter'];
@@ -79,7 +82,7 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase {
foreach (\$_smarty_tpl->smarty->template_functions['{$_name}']['parameter'] as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);};
foreach (\$params as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}?>";
}
- // Init temporay context
+ // Init temporary context
$compiler->template->required_plugins = array('compiled' => array(), 'nocache' => array());
$compiler->parser->current_buffer = new _smarty_template_buffer($compiler->parser);
$compiler->parser->current_buffer->append_subtree(new _smarty_tag($compiler->parser, $output));
@@ -88,23 +91,23 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase {
$compiler->template->properties['function'][$_name]['compiled'] = '';
return true;
}
-
}
/**
* Smarty Internal Plugin Compile Functionclose Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {/function} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return boolean true
*/
public function compile($args, $compiler, $parameter)
@@ -116,8 +119,8 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
$plugins_string = '';
if (!empty($compiler->template->required_plugins['compiled'])) {
$plugins_string = '<?php ';
- foreach($compiler->template->required_plugins['compiled'] as $tmp) {
- foreach($tmp as $data) {
+ foreach ($compiler->template->required_plugins['compiled'] as $tmp) {
+ foreach ($tmp as $data) {
$plugins_string .= "if (!is_callable('{$data['function']}')) include '{$data['file']}';\n";
}
}
@@ -125,22 +128,17 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
}
if (!empty($compiler->template->required_plugins['nocache'])) {
$plugins_string .= "<?php echo '/*%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/<?php ";
- foreach($compiler->template->required_plugins['nocache'] as $tmp) {
- foreach($tmp as $data) {
+ foreach ($compiler->template->required_plugins['nocache'] as $tmp) {
+ foreach ($tmp as $data) {
$plugins_string .= "if (!is_callable(\'{$data['function']}\')) include \'{$data['file']}\';\n";
}
}
$plugins_string .= "?>/*/%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/';?>\n";
}
- // remove last line break from function definition
- $last = count($compiler->parser->current_buffer->subtrees) - 1;
- if ($compiler->parser->current_buffer->subtrees[$last] instanceof _smarty_linebreak) {
- unset($compiler->parser->current_buffer->subtrees[$last]);
- }
- // if caching save template function for possible nocache call
+ // if caching save template function for possible nocache call
if ($compiler->template->caching) {
$compiler->template->properties['function'][$_name]['compiled'] .= $plugins_string
- . $compiler->parser->current_buffer->to_smarty_php();
+ . $compiler->parser->current_buffer->to_smarty_php();
$compiler->template->properties['function'][$_name]['nocache_hash'] = $compiler->template->properties['nocache_hash'];
$compiler->template->properties['function'][$_name]['has_nocache_code'] = $compiler->template->has_nocache_code;
$compiler->template->properties['function'][$_name]['called_functions'] = $compiler->called_functions;
@@ -149,7 +147,8 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
$compiler->has_code = false;
$output = true;
} else {
- $output = $plugins_string . $compiler->parser->current_buffer->to_smarty_php() . "<?php \$_smarty_tpl->tpl_vars = \$saved_tpl_vars;}}?>\n";
+ $output = $plugins_string . $compiler->parser->current_buffer->to_smarty_php() . "<?php \$_smarty_tpl->tpl_vars = \$saved_tpl_vars;
+foreach (Smarty::\$global_tpl_vars as \$key => \$value) if(!isset(\$_smarty_tpl->tpl_vars[\$key])) \$_smarty_tpl->tpl_vars[\$key] = \$value;}}?>\n";
}
// reset flag that we are compiling a template function
$compiler->compiles_template_function = false;
@@ -157,9 +156,7 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
$compiler->parser->current_buffer = $saved_data[1];
$compiler->template->has_nocache_code = $compiler->template->has_nocache_code | $saved_data[2];
$compiler->template->required_plugins = $saved_data[3];
+
return $output;
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_if.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_if.php
index 8794b014b..d709fcfd8 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_if.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_if.php
@@ -1,30 +1,30 @@
<?php
/**
-* Smarty Internal Plugin Compile If
-*
-* Compiles the {if} {else} {elseif} {/if} tags
-*
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
+ * Smarty Internal Plugin Compile If
+ * Compiles the {if} {else} {elseif} {/if} tags
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
/**
-* Smarty Internal Plugin Compile If Class
-*
-* @package Smarty
-* @subpackage Compiler
-*/
-class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase {
-
+ * Smarty Internal Plugin Compile If Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase
+{
/**
- * Compiles code for the {if} tag
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @return string compiled code
- */
+ * Compiles code for the {if} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ */
public function compile($args, $compiler, $parameter)
{
// check and get attributes
@@ -33,7 +33,7 @@ class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase {
// must whole block be nocache ?
$compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
- if (!array_key_exists("if condition",$parameter)) {
+ if (!array_key_exists("if condition", $parameter)) {
$compiler->trigger_template_error("missing if condition", $compiler->lex->taglineno);
}
@@ -50,62 +50,63 @@ class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase {
$_nocache = '';
}
if (is_array($parameter['if condition']['var'])) {
- $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']['var']."]) || !is_array(\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']['var']."]->value)) \$_smarty_tpl->createLocalArrayVariable(".$parameter['if condition']['var']['var']."$_nocache);\n";
- $_output .= "if (\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']['var']."]->value".$parameter['if condition']['var']['smarty_internal_index']." = ".$parameter['if condition']['value']."){?>";
+ $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->createLocalArrayVariable(" . $parameter['if condition']['var']['var'] . "$_nocache);\n";
+ $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . ") {?>";
} else {
- $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']."])) \$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']."] = new Smarty_Variable(null{$_nocache});";
- $_output .= "if (\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']."]->value = ".$parameter['if condition']['value']."){?>";
+ $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});";
+ $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . ") {?>";
}
+
return $_output;
} else {
- return "<?php if ({$parameter['if condition']}){?>";
+ return "<?php if ({$parameter['if condition']}) {?>";
}
}
-
}
/**
-* Smarty Internal Plugin Compile Else Class
-*
-* @package Smarty
-* @subpackage Compiler
-*/
-class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase {
-
+ * Smarty Internal Plugin Compile Else Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase
+{
/**
- * Compiles code for the {else} tag
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @return string compiled code
- */
+ * Compiles code for the {else} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ */
public function compile($args, $compiler, $parameter)
{
list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif'));
$this->openTag($compiler, 'else', array($nesting, $compiler->tag_nocache));
- return "<?php }else{ ?>";
+ return "<?php } else { ?>";
}
-
}
/**
-* Smarty Internal Plugin Compile ElseIf Class
-*
-* @package Smarty
-* @subpackage Compiler
-*/
-class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase {
-
+ * Smarty Internal Plugin Compile ElseIf Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase
+{
/**
- * Compiles code for the {elseif} tag
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @return string compiled code
- */
+ * Compiles code for the {elseif} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ */
public function compile($args, $compiler, $parameter)
{
// check and get attributes
@@ -113,7 +114,7 @@ class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase {
list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif'));
- if (!array_key_exists("if condition",$parameter)) {
+ if (!array_key_exists("if condition", $parameter)) {
$compiler->trigger_template_error("missing elseif condition", $compiler->lex->taglineno);
}
@@ -138,56 +139,60 @@ class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase {
if ($condition_by_assign) {
$this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache));
if (is_array($parameter['if condition']['var'])) {
- $_output = "<?php }else{ if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->createLocalArrayVariable(" . $parameter['if condition']['var']['var'] . "$_nocache);\n";
- $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . "){?>";
+ $_output = "<?php } else { if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->createLocalArrayVariable(" . $parameter['if condition']['var']['var'] . "$_nocache);\n";
+ $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . ") {?>";
} else {
- $_output = "<?php }else{ if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});";
- $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . "){?>";
+ $_output = "<?php } else { if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});";
+ $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . ") {?>";
}
+
return $_output;
} else {
$this->openTag($compiler, 'elseif', array($nesting, $compiler->tag_nocache));
- return "<?php }elseif({$parameter['if condition']}){?>";
+
+ return "<?php } elseif ({$parameter['if condition']}) {?>";
}
} else {
$tmp = '';
- foreach ($compiler->prefix_code as $code)
- $tmp .= $code;
+ foreach ($compiler->prefix_code as $code) {
+ $tmp .= $code;
+ }
$compiler->prefix_code = array();
$this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache));
if ($condition_by_assign) {
if (is_array($parameter['if condition']['var'])) {
- $_output = "<?php }else{?>{$tmp}<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->createLocalArrayVariable(" . $parameter['if condition']['var']['var'] . "$_nocache);\n";
- $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . "){?>";
+ $_output = "<?php } else {?>{$tmp}<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->createLocalArrayVariable(" . $parameter['if condition']['var']['var'] . "$_nocache);\n";
+ $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . ") {?>";
} else {
- $_output = "<?php }else{?>{$tmp}<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});";
- $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . "){?>";
+ $_output = "<?php } else {?>{$tmp}<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});";
+ $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . ") {?>";
}
+
return $_output;
} else {
- return "<?php }else{?>{$tmp}<?php if ({$parameter['if condition']}){?>";
+ return "<?php } else {?>{$tmp}<?php if ({$parameter['if condition']}) {?>";
}
}
}
-
}
/**
-* Smarty Internal Plugin Compile Ifclose Class
-*
-* @package Smarty
-* @subpackage Compiler
-*/
-class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase {
-
+ * Smarty Internal Plugin Compile Ifclose Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase
+{
/**
- * Compiles code for the {/if} tag
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @return string compiled code
- */
+ * Compiles code for the {/if} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ */
public function compile($args, $compiler, $parameter)
{
// must endblock be nocache?
@@ -196,12 +201,10 @@ class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase {
}
list($nesting, $compiler->nocache) = $this->closeTag($compiler, array('if', 'else', 'elseif'));
$tmp = '';
- for ($i = 0; $i < $nesting; $i++) {
+ for ($i = 0; $i < $nesting; $i ++) {
$tmp .= '}';
}
+
return "<?php {$tmp}?>";
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_include.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_include.php
index 43a144f94..4b7b09ce7 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_include.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_include.php
@@ -1,72 +1,72 @@
<?php
/**
-* Smarty Internal Plugin Compile Include
-*
-* Compiles the {include} tag
-*
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
+ * Smarty Internal Plugin Compile Include
+ * Compiles the {include} tag
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
/**
-* Smarty Internal Plugin Compile Include Class
-*
-* @package Smarty
-* @subpackage Compiler
-*/
-class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase {
-
+ * Smarty Internal Plugin Compile Include Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
+{
/**
- * caching mode to create nocache code but no cache file
- */
+ * caching mode to create nocache code but no cache file
+ */
const CACHING_NOCACHE_CODE = 9999;
/**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
public $required_attributes = array('file');
/**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
public $shorttag_order = array('file');
/**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
public $option_flags = array('nocache', 'inline', 'caching');
/**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
public $optional_attributes = array('_any');
/**
- * Compiles code for the {include} tag
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * Compiles code for the {include} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return string compiled code
*/
public function compile($args, $compiler, $parameter)
{
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
- // save posible attributes
+ // save possible attributes
$include_file = $_attr['file'];
if (isset($_attr['assign'])) {
- // output will be stored in a smarty variable instead of beind displayed
+ // output will be stored in a smarty variable instead of being displayed
$_assign = $_attr['assign'];
}
@@ -81,12 +81,15 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase {
$_parent_scope = Smarty::SCOPE_GLOBAL;
}
}
- $_caching = 'null';
- if ($compiler->nocache || $compiler->tag_nocache) {
- $_caching = Smarty::CACHING_OFF;
- }
- // default for included templates
- if ($compiler->template->caching && !$compiler->nocache && !$compiler->tag_nocache) {
+
+ $_caching = Smarty::CACHING_OFF;
+
+ // flag if included template code should be merged into caller
+ $merge_compiled_includes = ($compiler->smarty->merge_compiled_includes || ($compiler->inheritance && $compiler->smarty->inheritance_merge_compiled_includes) || $_attr['inline'] === true) && !$compiler->template->source->recompiled;
+
+ // set default when in nocache mode
+ // if ($compiler->template->caching && ($compiler->nocache || $compiler->tag_nocache || $compiler->forceNocache == 2)) {
+ if ($compiler->template->caching && ((!$compiler->inheritance && !$compiler->nocache && !$compiler->tag_nocache) || ($compiler->inheritance && ($compiler->nocache || $compiler->tag_nocache)))) {
$_caching = self::CACHING_NOCACHE_CODE;
}
/*
@@ -118,52 +121,93 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase {
}
if ($_attr['nocache'] === true) {
$compiler->tag_nocache = true;
- $_caching = Smarty::CACHING_OFF;
+ if ($merge_compiled_includes) {
+ $_caching = self::CACHING_NOCACHE_CODE;
+ } else {
+ $_caching = Smarty::CACHING_OFF;
+ }
}
$has_compiled_template = false;
- if (($compiler->smarty->merge_compiled_includes || $_attr['inline'] === true) && !$compiler->template->source->recompiled
- && !($compiler->template->caching && ($compiler->tag_nocache || $compiler->nocache)) && $_caching != Smarty::CACHING_LIFETIME_CURRENT) {
- // check if compiled code can be merged (contains no variable part)
- if (!$compiler->has_variable_string && (substr_count($include_file, '"') == 2 or substr_count($include_file, "'") == 2)
- and substr_count($include_file, '(') == 0 and substr_count($include_file, '$_smarty_tpl->') == 0) {
- $tpl_name = null;
- eval("\$tpl_name = $include_file;");
- if (!isset($compiler->smarty->merged_templates_func[$tpl_name]) || $compiler->inheritance) {
- $tpl = new $compiler->smarty->template_class ($tpl_name, $compiler->smarty, $compiler->template, $compiler->template->cache_id, $compiler->template->compile_id);
- // save unique function name
- $compiler->smarty->merged_templates_func[$tpl_name]['func'] = $tpl->properties['unifunc'] = 'content_'. str_replace('.', '_', uniqid('', true));
- // use current nocache hash for inlined code
- $compiler->smarty->merged_templates_func[$tpl_name]['nocache_hash'] = $tpl->properties['nocache_hash'] = $compiler->template->properties['nocache_hash'];
- if ($compiler->template->caching) {
- // needs code for cached page but no cache file
- $tpl->caching = self::CACHING_NOCACHE_CODE;
+ if ($merge_compiled_includes && $_attr['inline'] !== true) {
+ // variable template name ?
+ if ($compiler->has_variable_string || !((substr_count($include_file, '"') == 2 || substr_count($include_file, "'") == 2))
+ || substr_count($include_file, '(') != 0 || substr_count($include_file, '$_smarty_tpl->') != 0
+ ) {
+ $merge_compiled_includes = false;
+ if ($compiler->inheritance && $compiler->smarty->inheritance_merge_compiled_includes) {
+ $compiler->trigger_template_error(' variable template file names not allow within {block} tags');
+ }
+ }
+ // variable compile_id?
+ if (isset($_attr['compile_id'])) {
+ if (!((substr_count($_attr['compile_id'], '"') == 2 || substr_count($_attr['compile_id'], "'") == 2))
+ || substr_count($_attr['compile_id'], '(') != 0 || substr_count($_attr['compile_id'], '$_smarty_tpl->') != 0
+ ) {
+ $merge_compiled_includes = false;
+ if ($compiler->inheritance && $compiler->smarty->inheritance_merge_compiled_includes) {
+ $compiler->trigger_template_error(' variable compile_id not allow within {block} tags');
}
- // make sure whole chain gest compiled
- $tpl->mustCompile = true;
- if (!($tpl->source->uncompiled) && $tpl->source->exists) {
- // get compiled code
- $compiled_code = $tpl->compiler->compileTemplate($tpl);
- // release compiler object to free memory
- unset($tpl->compiler);
- // merge compiled code for {function} tags
- $compiler->template->properties['function'] = array_merge($compiler->template->properties['function'], $tpl->properties['function']);
- // merge filedependency
- $tpl->properties['file_dependency'][$tpl->source->uid] = array($tpl->source->filepath, $tpl->source->timestamp,$tpl->source->type);
- $compiler->template->properties['file_dependency'] = array_merge($compiler->template->properties['file_dependency'], $tpl->properties['file_dependency']);
- // remove header code
- $compiled_code = preg_replace("/(<\?php \/\*%%SmartyHeaderCode:{$tpl->properties['nocache_hash']}%%\*\/(.+?)\/\*\/%%SmartyHeaderCode%%\*\/\?>\n)/s", '', $compiled_code);
- if ($tpl->has_nocache_code) {
- // replace nocache_hash
- $compiled_code = str_replace("{$tpl->properties['nocache_hash']}", $compiler->template->properties['nocache_hash'], $compiled_code);
- $compiler->template->has_nocache_code = true;
- }
- $compiler->merged_templates[$tpl->properties['unifunc']] = $compiled_code;
- $has_compiled_template = true;
+ }
+ }
+ }
+ if ($merge_compiled_includes) {
+ if ($compiler->template->caching && ($compiler->tag_nocache || $compiler->nocache) && $_caching != self::CACHING_NOCACHE_CODE) {
+ $merge_compiled_includes = false;
+ if ($compiler->inheritance && $compiler->smarty->inheritance_merge_compiled_includes) {
+ $compiler->trigger_template_error(' invalid caching mode of subtemplate within {block} tags');
+ }
+ }
+ }
+ if ($merge_compiled_includes) {
+ // we must observe different compile_id
+ $uid = sha1($_compile_id);
+ $tpl_name = null;
+ $nocache = false;
+ /** @var Smarty_Internal_Template $_smarty_tpl
+ * used in evaluated code
+ */
+ $_smarty_tpl = $compiler->template;
+ eval("\$tpl_name = $include_file;");
+ if (!isset($compiler->smarty->merged_templates_func[$tpl_name][$uid])) {
+ $tpl = new $compiler->smarty->template_class ($tpl_name, $compiler->smarty, $compiler->template, $compiler->template->cache_id, $compiler->template->compile_id);
+ // save unique function name
+ $compiler->smarty->merged_templates_func[$tpl_name][$uid]['func'] = $tpl->properties['unifunc'] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true));
+ // use current nocache hash for inlined code
+ $compiler->smarty->merged_templates_func[$tpl_name][$uid]['nocache_hash'] = $tpl->properties['nocache_hash'] = $compiler->template->properties['nocache_hash'];
+ if ($compiler->template->caching && $_caching == self::CACHING_NOCACHE_CODE) {
+ // all code must be nocache
+ $nocache = true;
+ }
+ if ($compiler->inheritance) {
+ $tpl->compiler->inheritance = true;
+ }
+ // make sure whole chain gets compiled
+ $tpl->mustCompile = true;
+ if (!($tpl->source->uncompiled) && $tpl->source->exists) {
+
+ // get compiled code
+ $compiled_code = $tpl->compiler->compileTemplate($tpl, $nocache);
+ // release compiler object to free memory
+ unset($tpl->compiler);
+ // merge compiled code for {function} tags
+ $compiler->template->properties['function'] = array_merge($compiler->template->properties['function'], $tpl->properties['function']);
+ // merge filedependency
+ $tpl->properties['file_dependency'][$tpl->source->uid] = array($tpl->source->filepath, $tpl->source->timestamp, $tpl->source->type);
+ $compiler->template->properties['file_dependency'] = array_merge($compiler->template->properties['file_dependency'], $tpl->properties['file_dependency']);
+ // remove header code
+ $compiled_code = preg_replace("/(<\?php \/\*%%SmartyHeaderCode:{$tpl->properties['nocache_hash']}%%\*\/(.+?)\/\*\/%%SmartyHeaderCode%%\*\/\?>\n)/s", '', $compiled_code);
+ if ($tpl->has_nocache_code) {
+ // replace nocache_hash
+ $compiled_code = str_replace("{$tpl->properties['nocache_hash']}", $compiler->template->properties['nocache_hash'], $compiled_code);
+ $compiler->template->has_nocache_code = true;
}
- } else {
+ $compiler->merged_templates[$tpl->properties['unifunc']] = $compiled_code;
$has_compiled_template = true;
+ unset ($tpl);
}
+ } else {
+ $has_compiled_template = true;
}
}
// delete {include} standard attributes
@@ -172,32 +216,40 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase {
if (!empty($_attr)) {
if ($_parent_scope == Smarty::SCOPE_LOCAL) {
// create variables
+ $nccode = '';
foreach ($_attr as $key => $value) {
$_pairs[] = "'$key'=>$value";
+ $nccode .= "\$_smarty_tpl->tpl_vars['$key'] = new Smarty_variable($value);\n";
}
- $_vars = 'array('.join(',',$_pairs).')';
- $_has_vars = true;
+ $_vars = 'array(' . join(',', $_pairs) . ')';
} else {
$compiler->trigger_template_error('variable passing not allowed in parent/global scope', $compiler->lex->taglineno);
}
} else {
$_vars = 'array()';
- $_has_vars = false;
}
if ($has_compiled_template) {
- $_hash = $compiler->smarty->merged_templates_func[$tpl_name]['nocache_hash'];
+ // never call inline templates in nocache mode
+ $compiler->suppressNocacheProcessing = true;
+ $_hash = $compiler->smarty->merged_templates_func[$tpl_name][$uid]['nocache_hash'];
$_output = "<?php /* Call merged included template \"" . $tpl_name . "\" */\n";
$_output .= "\$_tpl_stack[] = \$_smarty_tpl;\n";
+ if (!empty($nccode) && $_caching == 9999 && $_smarty_tpl->caching) {
+ $compiler->suppressNocacheProcessing = false;
+ $_output .= substr($compiler->processNocacheCode('<?php ' .$nccode . "?>\n", true), 6, -3);
+ $compiler->suppressNocacheProcessing = true;
+ }
$_output .= " \$_smarty_tpl = \$_smarty_tpl->setupInlineSubTemplate($include_file, $_cache_id, $_compile_id, $_caching, $_cache_lifetime, $_vars, $_parent_scope, '$_hash');\n";
if (isset($_assign)) {
$_output .= 'ob_start(); ';
}
- $_output .= $compiler->smarty->merged_templates_func[$tpl_name]['func']. "(\$_smarty_tpl);\n";
+ $_output .= $compiler->smarty->merged_templates_func[$tpl_name][$uid]['func'] . "(\$_smarty_tpl);\n";
$_output .= "\$_smarty_tpl = array_pop(\$_tpl_stack); ";
if (isset($_assign)) {
$_output .= " \$_smarty_tpl->tpl_vars[$_assign] = new Smarty_variable(ob_get_clean());";
}
- $_output .= "/* End of included template \"" . $tpl_name . "\" */?>";
+ $_output .= "\n/* End of included template \"" . $tpl_name . "\" */?>";
+
return $_output;
}
@@ -207,9 +259,7 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase {
} else {
$_output = "<?php echo \$_smarty_tpl->getSubTemplate ($include_file, $_cache_id, $_compile_id, $_caching, $_cache_lifetime, $_vars, $_parent_scope);?>\n";
}
+
return $_output;
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_include_php.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_include_php.php
index d52712368..76f506c52 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_include_php.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_include_php.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Include PHP
- *
* Compiles the {include_php} tag
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Insert Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -42,8 +41,10 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {include_php} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
+ * @throws SmartyException
* @return string compiled code
*/
public function compile($args, $compiler)
@@ -54,8 +55,9 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase {
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
- $_output = '<?php ';
-
+ /** @var Smarty_Internal_Template $_smarty_tpl
+ * used in evaluated code
+ */
$_smarty_tpl = $compiler->template;
$_filepath = false;
eval('$_file = ' . $_attr['file'] . ';');
@@ -68,10 +70,10 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase {
$_dir = $compiler->smarty->trusted_dir;
}
if (!empty($_dir)) {
- foreach((array)$_dir as $_script_dir) {
+ foreach ((array) $_dir as $_script_dir) {
$_script_dir = rtrim($_script_dir, '/\\') . DS;
if (file_exists($_script_dir . $_file)) {
- $_filepath = $_script_dir . $_file;
+ $_filepath = $_script_dir . $_file;
break;
}
}
@@ -102,7 +104,4 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase {
return "<?php include{$_once} ('{$_filepath}');?>\n";
}
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_insert.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_insert.php
index e4d3f9355..4c6585543 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_insert.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_insert.php
@@ -2,22 +2,21 @@
/**
* Smarty Internal Plugin Compile Insert
- *
* Compiles the {insert} tag
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Insert Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -43,8 +42,9 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {insert} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
* @return string compiled code
*/
public function compile($args, $compiler)
@@ -59,12 +59,12 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
$_script = null;
$_output = '<?php ';
- // save posible attributes
+ // save possible attributes
eval('$_name = ' . $_attr['name'] . ';');
if (isset($_attr['assign'])) {
// output will be stored in a smarty variable instead of being displayed
$_assign = $_attr['assign'];
- // create variable to make shure that the compiler knows about its nocache status
+ // create variable to make sure that the compiler knows about its nocache status
$compiler->template->tpl_vars[trim($_attr['assign'], "'")] = new Smarty_Variable(null, true);
}
if (isset($_attr['script'])) {
@@ -82,7 +82,7 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
$_dir = $compiler->smarty->trusted_dir;
}
if (!empty($_dir)) {
- foreach((array)$_dir as $_script_dir) {
+ foreach ((array) $_dir as $_script_dir) {
$_script_dir = rtrim($_script_dir, '/\\') . DS;
if (file_exists($_script_dir . $_script)) {
$_filepath = $_script_dir . $_script;
@@ -134,9 +134,7 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
$_output .= "echo {$_function}({$_params},\$_smarty_tpl);?>";
}
}
+
return $_output;
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_ldelim.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_ldelim.php
index 990632590..91b44881e 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_ldelim.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_ldelim.php
@@ -1,28 +1,28 @@
<?php
/**
* Smarty Internal Plugin Compile Ldelim
- *
* Compiles the {ldelim} tag
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Ldelim Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {ldelim} tag
- *
* This tag does output the left delimiter
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ *
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
* @return string compiled code
*/
public function compile($args, $compiler)
@@ -33,9 +33,7 @@ class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase {
}
// this tag does not return compiled code
$compiler->has_code = true;
+
return $compiler->smarty->left_delimiter;
}
-
}
-
-?>
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_nocache.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_nocache.php
index 5fb71b71d..ba39717fd 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_nocache.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_nocache.php
@@ -1,29 +1,28 @@
<?php
/**
* Smarty Internal Plugin Compile Nocache
- *
* Compiles the {nocache} {/nocache} tags.
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
- * Smarty Internal Plugin Compile Nocache Classv
+ * Smarty Internal Plugin Compile Nocache Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {nocache} tag
- *
* This tag does not generate compiled output. It only sets a compiler flag.
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
* @return bool
*/
public function compile($args, $compiler)
@@ -36,26 +35,26 @@ class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase {
$compiler->nocache = true;
// this tag does not return compiled code
$compiler->has_code = false;
+
return true;
}
-
}
/**
* Smarty Internal Plugin Compile Nocacheclose Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {/nocache} tag
- *
* This tag does not generate compiled output. It only sets a compiler flag.
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
* @return bool
*/
public function compile($args, $compiler)
@@ -65,9 +64,7 @@ class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_CompileBase {
$compiler->nocache = false;
// this tag does not return compiled code
$compiler->has_code = false;
+
return true;
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php
index 5288f4560..3dff8538e 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Block Plugin
- *
* Compiles code for the execution of block plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Block Plugin Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -28,23 +27,24 @@ class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_Compi
/**
* Compiles code for the execution of block plugin
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @param string $tag name of block plugin
- * @param string $function PHP function name
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ * @param string $tag name of block plugin
+ * @param string $function PHP function name
+ *
* @return string compiled code
*/
public function compile($args, $compiler, $parameter, $tag, $function)
{
- if (!isset($tag[5]) || substr($tag, -5) != 'close') {
+ if (!isset($tag[5]) || substr($tag, - 5) != 'close') {
// opening tag of block plugin
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
if ($_attr['nocache'] === true) {
$compiler->tag_nocache = true;
}
- unset($_attr['nocache']);
+ unset($_attr['nocache']);
// convert attributes into parameter array string
$_paramsArray = array();
foreach ($_attr as $_key => $_value) {
@@ -67,21 +67,19 @@ class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_Compi
$compiler->tag_nocache = true;
}
// closing tag of block plugin, restore nocache
- list($_params, $compiler->nocache) = $this->closeTag($compiler, substr($tag, 0, -5));
+ list($_params, $compiler->nocache) = $this->closeTag($compiler, substr($tag, 0, - 5));
// This tag does create output
$compiler->has_output = true;
// compile code
if (!isset($parameter['modifier_list'])) {
- $mod_pre = $mod_post ='';
+ $mod_pre = $mod_post = '';
} else {
$mod_pre = ' ob_start(); ';
- $mod_post = 'echo '.$compiler->compileTag('private_modifier',array(),array('modifierlist'=>$parameter['modifier_list'],'value'=>'ob_get_clean()')).';';
+ $mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], 'value' => 'ob_get_clean()')) . ';';
}
- $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;".$mod_pre." echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); ".$mod_post." } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
+ $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . " } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
}
+
return $output . "\n";
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php
index 70e764318..4fbd4dc18 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Function Plugin
- *
* Compiles code for the execution of function plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Function Plugin Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -35,11 +34,12 @@ class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_Co
/**
* Compiles code for the execution of function plugin
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @param string $tag name of function plugin
- * @param string $function PHP function name
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ * @param string $tag name of function plugin
+ * @param string $function PHP function name
+ *
* @return string compiled code
*/
public function compile($args, $compiler, $parameter, $tag, $function)
@@ -65,9 +65,7 @@ class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_Co
$_params = 'array(' . implode(",", $_paramsArray) . ')';
// compile code
$output = "<?php echo {$function}({$_params},\$_smarty_tpl);?>\n";
+
return $output;
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php
index 120f3ff10..ba03bfcfa 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php
@@ -1,140 +1,139 @@
-<?php
-
-/**
- * Smarty Internal Plugin Compile Modifier
- *
- * Compiles code for modifier execution
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Modifier Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBase {
-
- /**
- * Compiles code for modifier execution
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @return string compiled code
- */
- public function compile($args, $compiler, $parameter) {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- $output = $parameter['value'];
- // loop over list of modifiers
- foreach ($parameter['modifierlist'] as $single_modifier) {
- $modifier = $single_modifier[0];
- $single_modifier[0] = $output;
- $params = implode(',', $single_modifier);
- // check if we know already the type of modifier
- if (isset($compiler->known_modifier_type[$modifier])) {
- $modifier_types = array($compiler->known_modifier_type[$modifier]);
- } else {
- $modifier_types = array(1, 2, 3, 4, 5, 6);
- }
- foreach ($modifier_types as $type) {
- switch ($type) {
- case 1:
- // registered modifier
- if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][$modifier])) {
- $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][$modifier][0];
- if (!is_array($function)) {
- $output = "{$function}({$params})";
- } else {
- if (is_object($function[0])) {
- $output = '$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][\'' . $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')';
- } else {
- $output = $function[0] . '::' . $function[1] . '(' . $params . ')';
- }
- }
- $compiler->known_modifier_type[$modifier] = $type;
- break 2;
- }
- break;
- case 2:
- // registered modifier compiler
- if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIERCOMPILER][$modifier][0])) {
- $output = call_user_func($compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIERCOMPILER][$modifier][0], $single_modifier, $compiler->smarty);
- $compiler->known_modifier_type[$modifier] = $type;
- break 2;
- }
- break;
- case 3:
- // modifiercompiler plugin
- if ($compiler->smarty->loadPlugin('smarty_modifiercompiler_' . $modifier)) {
- // check if modifier allowed
- if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)) {
- $plugin = 'smarty_modifiercompiler_' . $modifier;
- $output = $plugin($single_modifier, $compiler);
- }
- $compiler->known_modifier_type[$modifier] = $type;
- break 2;
- }
- break;
- case 4:
- // modifier plugin
- if ($function = $compiler->getPlugin($modifier, Smarty::PLUGIN_MODIFIER)) {
- // check if modifier allowed
- if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)) {
- $output = "{$function}({$params})";
- }
- $compiler->known_modifier_type[$modifier] = $type;
- break 2;
- }
- break;
- case 5:
- // PHP function
- if (is_callable($modifier)) {
- // check if modifier allowed
- if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedPhpModifier($modifier, $compiler)) {
- $output = "{$modifier}({$params})";
- }
- $compiler->known_modifier_type[$modifier] = $type;
- break 2;
- }
- break;
- case 6:
- // default plugin handler
- if (isset($compiler->default_handler_plugins[Smarty::PLUGIN_MODIFIER][$modifier]) || (is_callable($compiler->smarty->default_plugin_handler_func) && $compiler->getPluginFromDefaultHandler($modifier, Smarty::PLUGIN_MODIFIER))) {
- $function = $compiler->default_handler_plugins[Smarty::PLUGIN_MODIFIER][$modifier][0];
- // check if modifier allowed
- if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)) {
- if (!is_array($function)) {
- $output = "{$function}({$params})";
- } else {
- if (is_object($function[0])) {
- $output = '$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][\'' . $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')';
- } else {
- $output = $function[0] . '::' . $function[1] . '(' . $params . ')';
- }
- }
- }
- if (isset($compiler->template->required_plugins['nocache'][$modifier][Smarty::PLUGIN_MODIFIER]['file']) || isset($compiler->template->required_plugins['compiled'][$modifier][Smarty::PLUGIN_MODIFIER]['file'])) {
- // was a plugin
- $compiler->known_modifier_type[$modifier] = 4;
- } else {
- $compiler->known_modifier_type[$modifier] = $type;
- }
- break 2;
- }
- }
- }
- if (!isset($compiler->known_modifier_type[$modifier])) {
- $compiler->trigger_template_error("unknown modifier \"" . $modifier . "\"", $compiler->lex->taglineno);
- }
- }
- return $output;
- }
-
-}
-
-?> \ No newline at end of file
+<?php
+
+/**
+ * Smarty Internal Plugin Compile Modifier
+ * Compiles code for modifier execution
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
+
+/**
+ * Smarty Internal Plugin Compile Modifier Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBase
+{
+ /**
+ * Compiles code for modifier execution
+ *
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ */
+ public function compile($args, $compiler, $parameter)
+ {
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ $output = $parameter['value'];
+ // loop over list of modifiers
+ foreach ($parameter['modifierlist'] as $single_modifier) {
+ $modifier = $single_modifier[0];
+ $single_modifier[0] = $output;
+ $params = implode(',', $single_modifier);
+ // check if we know already the type of modifier
+ if (isset($compiler->known_modifier_type[$modifier])) {
+ $modifier_types = array($compiler->known_modifier_type[$modifier]);
+ } else {
+ $modifier_types = array(1, 2, 3, 4, 5, 6);
+ }
+ foreach ($modifier_types as $type) {
+ switch ($type) {
+ case 1:
+ // registered modifier
+ if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][$modifier])) {
+ $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][$modifier][0];
+ if (!is_array($function)) {
+ $output = "{$function}({$params})";
+ } else {
+ if (is_object($function[0])) {
+ $output = '$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][\'' . $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')';
+ } else {
+ $output = $function[0] . '::' . $function[1] . '(' . $params . ')';
+ }
+ }
+ $compiler->known_modifier_type[$modifier] = $type;
+ break 2;
+ }
+ break;
+ case 2:
+ // registered modifier compiler
+ if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIERCOMPILER][$modifier][0])) {
+ $output = call_user_func($compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIERCOMPILER][$modifier][0], $single_modifier, $compiler->smarty);
+ $compiler->known_modifier_type[$modifier] = $type;
+ break 2;
+ }
+ break;
+ case 3:
+ // modifiercompiler plugin
+ if ($compiler->smarty->loadPlugin('smarty_modifiercompiler_' . $modifier)) {
+ // check if modifier allowed
+ if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)) {
+ $plugin = 'smarty_modifiercompiler_' . $modifier;
+ $output = $plugin($single_modifier, $compiler);
+ }
+ $compiler->known_modifier_type[$modifier] = $type;
+ break 2;
+ }
+ break;
+ case 4:
+ // modifier plugin
+ if ($function = $compiler->getPlugin($modifier, Smarty::PLUGIN_MODIFIER)) {
+ // check if modifier allowed
+ if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)) {
+ $output = "{$function}({$params})";
+ }
+ $compiler->known_modifier_type[$modifier] = $type;
+ break 2;
+ }
+ break;
+ case 5:
+ // PHP function
+ if (is_callable($modifier)) {
+ // check if modifier allowed
+ if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedPhpModifier($modifier, $compiler)) {
+ $output = "{$modifier}({$params})";
+ }
+ $compiler->known_modifier_type[$modifier] = $type;
+ break 2;
+ }
+ break;
+ case 6:
+ // default plugin handler
+ if (isset($compiler->default_handler_plugins[Smarty::PLUGIN_MODIFIER][$modifier]) || (is_callable($compiler->smarty->default_plugin_handler_func) && $compiler->getPluginFromDefaultHandler($modifier, Smarty::PLUGIN_MODIFIER))) {
+ $function = $compiler->default_handler_plugins[Smarty::PLUGIN_MODIFIER][$modifier][0];
+ // check if modifier allowed
+ if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)) {
+ if (!is_array($function)) {
+ $output = "{$function}({$params})";
+ } else {
+ if (is_object($function[0])) {
+ $output = '$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][\'' . $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')';
+ } else {
+ $output = $function[0] . '::' . $function[1] . '(' . $params . ')';
+ }
+ }
+ }
+ if (isset($compiler->template->required_plugins['nocache'][$modifier][Smarty::PLUGIN_MODIFIER]['file']) || isset($compiler->template->required_plugins['compiled'][$modifier][Smarty::PLUGIN_MODIFIER]['file'])) {
+ // was a plugin
+ $compiler->known_modifier_type[$modifier] = 4;
+ } else {
+ $compiler->known_modifier_type[$modifier] = $type;
+ }
+ break 2;
+ }
+ }
+ }
+ if (!isset($compiler->known_modifier_type[$modifier])) {
+ $compiler->trigger_template_error("unknown modifier \"" . $modifier . "\"", $compiler->lex->taglineno);
+ }
+ }
+
+ return $output;
+ }
+}
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php
index cca924d10..5418fefff 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Object Block Function
- *
* Compiles code for registered objects as block function
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Object Block Function Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -28,16 +27,17 @@ class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Inter
/**
* Compiles code for the execution of block plugin
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @param string $tag name of block object
- * @param string $method name of method to call
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ * @param string $tag name of block object
+ * @param string $method name of method to call
+ *
* @return string compiled code
*/
public function compile($args, $compiler, $parameter, $tag, $method)
{
- if (!isset($tag[5]) || substr($tag, -5) != 'close') {
+ if (!isset($tag[5]) || substr($tag, - 5) != 'close') {
// opening tag of block plugin
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
@@ -62,7 +62,7 @@ class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Inter
// compile code
$output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}->{$method}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
} else {
- $base_tag = substr($tag, 0, -5);
+ $base_tag = substr($tag, 0, - 5);
// must endblock be nocache?
if ($compiler->nocache) {
$compiler->tag_nocache = true;
@@ -80,9 +80,7 @@ class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Inter
}
$output = "<?php \$_block_content = ob_get_contents(); ob_end_clean(); \$_block_repeat=false;" . $mod_pre . " echo \$_smarty_tpl->smarty->registered_objects['{$base_tag}'][0]->{$method}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . " } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
}
+
return $output . "\n";
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php
index f649084c3..d6eb47ab3 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php
@@ -1,22 +1,21 @@
<?php
/**
- * Smarty Internal Plugin Compile Object Funtion
- *
+ * Smarty Internal Plugin Compile Object Function
* Compiles code for registered objects as function
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Object Function Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -28,11 +27,12 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co
/**
* Compiles code for the execution of function plugin
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @param string $tag name of function
- * @param string $method name of method to call
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ * @param string $tag name of function
+ * @param string $method name of method to call
+ *
* @return string compiled code
*/
public function compile($args, $compiler, $parameter, $tag, $method)
@@ -48,22 +48,29 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co
$_assign = $_attr['assign'];
unset($_attr['assign']);
}
- // convert attributes into parameter array string
- if ($compiler->smarty->registered_objects[$tag][2]) {
- $_paramsArray = array();
- foreach ($_attr as $_key => $_value) {
- if (is_int($_key)) {
- $_paramsArray[] = "$_key=>$_value";
- } else {
- $_paramsArray[] = "'$_key'=>$_value";
+ // method or property ?
+ if (method_exists($compiler->smarty->registered_objects[$tag][0], $method)) {
+ // convert attributes into parameter array string
+ if ($compiler->smarty->registered_objects[$tag][2]) {
+ $_paramsArray = array();
+ foreach ($_attr as $_key => $_value) {
+ if (is_int($_key)) {
+ $_paramsArray[] = "$_key=>$_value";
+ } else {
+ $_paramsArray[] = "'$_key'=>$_value";
+ }
}
+ $_params = 'array(' . implode(",", $_paramsArray) . ')';
+ $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params},\$_smarty_tpl)";
+ } else {
+ $_params = implode(",", $_attr);
+ $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params})";
}
- $_params = 'array(' . implode(",", $_paramsArray) . ')';
- $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params},\$_smarty_tpl)";
} else {
- $_params = implode(",", $_attr);
- $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params})";
+ // object property
+ $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}";
}
+
if (empty($_assign)) {
// This tag does create output
$compiler->has_output = true;
@@ -71,9 +78,7 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co
} else {
$output = "<?php \$_smarty_tpl->assign({$_assign},{$return});?>\n";
}
+
return $output;
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php
index a37119547..188bbe77a 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php
@@ -1,45 +1,46 @@
<?php
/**
-* Smarty Internal Plugin Compile Print Expression
-*
-* Compiles any tag which will output an expression or variable
-*
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
+ * Smarty Internal Plugin Compile Print Expression
+ * Compiles any tag which will output an expression or variable
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
/**
-* Smarty Internal Plugin Compile Print Expression Class
-*
-* @package Smarty
-* @subpackage Compiler
-*/
-class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_CompileBase {
-
+ * Smarty Internal Plugin Compile Print Expression Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_CompileBase
+{
/**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
public $optional_attributes = array('assign');
/**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
public $option_flags = array('nocache', 'nofilter');
/**
- * Compiles code for gererting output from any expression
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @return string compiled code
- */
+ * Compiles code for generating output from any expression
+ *
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @throws SmartyException
+ * @return string compiled code
+ */
public function compile($args, $compiler, $parameter)
{
// check and get attributes
@@ -48,12 +49,6 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
if ($_attr['nocache'] === true) {
$compiler->tag_nocache = true;
}
- // filter handling
- if ($_attr['nofilter'] === true) {
- $_filter = 'false';
- } else {
- $_filter = 'true';
- }
if (isset($_attr['assign'])) {
// assign output to variable
$output = "<?php \$_smarty_tpl->assign({$_attr['assign']},{$parameter['value']});?>";
@@ -71,13 +66,13 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
$modifierlist = array();
foreach ($compiler->smarty->default_modifiers as $key => $single_default_modifier) {
preg_match_all('/(\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|:|[^:]+)/', $single_default_modifier, $mod_array);
- for ($i = 0, $count = count($mod_array[0]);$i < $count;$i++) {
+ for ($i = 0, $count = count($mod_array[0]); $i < $count; $i ++) {
if ($mod_array[0][$i] != ':') {
$modifierlist[$key][] = $mod_array[0][$i];
}
}
}
- $compiler->default_modifier_list = $modifierlist;
+ $compiler->default_modifier_list = $modifierlist;
}
$output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => $compiler->default_modifier_list, 'value' => $output));
}
@@ -85,13 +80,13 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
if ($compiler->template->smarty->escape_html) {
$output = "htmlspecialchars({$output}, ENT_QUOTES, '" . addslashes(Smarty::$_CHARSET) . "')";
}
- // loop over registerd filters
+ // loop over registered filters
if (!empty($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE])) {
foreach ($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE] as $key => $function) {
if (!is_array($function)) {
$output = "{$function}({$output},\$_smarty_tpl)";
- } else if (is_object($function[0])) {
- $output = "\$_smarty_tpl->smarty->registered_filters[Smarty::FILTER_VARIABLE][{$key}][0]->{$function[1]}({$output},\$_smarty_tpl)";
+ } elseif (is_object($function[0])) {
+ $output = "\$_smarty_tpl->smarty->registered_filters[Smarty::FILTER_VARIABLE]['{$key}'][0]->{$function[1]}({$output},\$_smarty_tpl)";
} else {
$output = "{$function[0]}::{$function[1]}({$output},\$_smarty_tpl)";
}
@@ -99,7 +94,7 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
}
// auto loaded filters
if (isset($compiler->smarty->autoload_filters[Smarty::FILTER_VARIABLE])) {
- foreach ((array)$compiler->template->smarty->autoload_filters[Smarty::FILTER_VARIABLE] as $name) {
+ foreach ((array) $compiler->template->smarty->autoload_filters[Smarty::FILTER_VARIABLE] as $name) {
$result = $this->compile_output_filter($compiler, $name, $output);
if ($result !== false) {
$output = $result;
@@ -123,15 +118,17 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
$compiler->has_output = true;
$output = "<?php echo {$output};?>";
}
+
return $output;
}
/**
- * @param object $compiler compiler object
- * @param string $name name of variable filter
- * @param type $output embedded output
- * @return string
- */
+ * @param object $compiler compiler object
+ * @param string $name name of variable filter
+ * @param string $output embedded output
+ *
+ * @return string
+ */
private function compile_output_filter($compiler, $name, $output)
{
$plugin_name = "smarty_variablefilter_{$name}";
@@ -148,9 +145,7 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
// not found
return false;
}
+
return "{$plugin_name}({$output},\$_smarty_tpl)";
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php
index 9fed36c3b..68ab644fc 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php
@@ -1,113 +1,111 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Registered Block
- *
- * Compiles code for the execution of a registered block function
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Registered Block Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_CompileBase {
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $optional_attributes = array('_any');
-
- /**
- * Compiles code for the execution of a block function
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @param string $tag name of block function
- * @return string compiled code
- */
- public function compile($args, $compiler, $parameter, $tag)
- {
- if (!isset($tag[5]) || substr($tag,-5) != 'close') {
- // opening tag of block plugin
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- if ($_attr['nocache']) {
- $compiler->tag_nocache = true;
- }
- unset($_attr['nocache']);
- if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag])) {
- $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag];
- } else {
- $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$tag];
- }
- // convert attributes into parameter array string
- $_paramsArray = array();
- foreach ($_attr as $_key => $_value) {
- if (is_int($_key)) {
- $_paramsArray[] = "$_key=>$_value";
- } elseif ($compiler->template->caching && in_array($_key,$tag_info[2])) {
- $_value = str_replace("'","^#^",$_value);
- $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^";
- } else {
- $_paramsArray[] = "'$_key'=>$_value";
- }
- }
- $_params = 'array(' . implode(",", $_paramsArray) . ')';
-
- $this->openTag($compiler, $tag, array($_params, $compiler->nocache));
- // maybe nocache because of nocache variables or nocache plugin
- $compiler->nocache = !$tag_info[1] | $compiler->nocache | $compiler->tag_nocache;
- $function = $tag_info[0];
- // compile code
- if (!is_array($function)) {
- $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
- } else if (is_object($function[0])) {
- $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]->{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
- } else {
- $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function[0]}::{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
- }
- } else {
- // must endblock be nocache?
- if ($compiler->nocache) {
- $compiler->tag_nocache = true;
- }
- $base_tag = substr($tag, 0, -5);
- // closing tag of block plugin, restore nocache
- list($_params, $compiler->nocache) = $this->closeTag($compiler, $base_tag);
- // This tag does create output
- $compiler->has_output = true;
- if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) {
- $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0];
- } else {
- $function = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0];
- }
- // compile code
- if (!isset($parameter['modifier_list'])) {
- $mod_pre = $mod_post ='';
- } else {
- $mod_pre = ' ob_start(); ';
- $mod_post = 'echo '.$compiler->compileTag('private_modifier',array(),array('modifierlist'=>$parameter['modifier_list'],'value'=>'ob_get_clean()')).';';
- }
- if (!is_array($function)) {
- $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;".$mod_pre." echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat);".$mod_post." } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
- } else if (is_object($function[0])) {
- $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;".$mod_pre." echo \$_smarty_tpl->smarty->registered_plugins['block']['{$base_tag}'][0][0]->{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); ".$mod_post."} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
- } else {
- $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;".$mod_pre." echo {$function[0]}::{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); ".$mod_post."} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
- }
- }
- return $output . "\n";
- }
-
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty Internal Plugin Compile Registered Block
+ * Compiles code for the execution of a registered block function
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
+
+/**
+ * Smarty Internal Plugin Compile Registered Block Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_CompileBase
+{
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
+ public $optional_attributes = array('_any');
+
+ /**
+ * Compiles code for the execution of a block function
+ *
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ * @param string $tag name of block function
+ *
+ * @return string compiled code
+ */
+ public function compile($args, $compiler, $parameter, $tag)
+ {
+ if (!isset($tag[5]) || substr($tag, - 5) != 'close') {
+ // opening tag of block plugin
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ if ($_attr['nocache']) {
+ $compiler->tag_nocache = true;
+ }
+ unset($_attr['nocache']);
+ if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag])) {
+ $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag];
+ } else {
+ $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$tag];
+ }
+ // convert attributes into parameter array string
+ $_paramsArray = array();
+ foreach ($_attr as $_key => $_value) {
+ if (is_int($_key)) {
+ $_paramsArray[] = "$_key=>$_value";
+ } elseif ($compiler->template->caching && in_array($_key, $tag_info[2])) {
+ $_value = str_replace("'", "^#^", $_value);
+ $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^";
+ } else {
+ $_paramsArray[] = "'$_key'=>$_value";
+ }
+ }
+ $_params = 'array(' . implode(",", $_paramsArray) . ')';
+
+ $this->openTag($compiler, $tag, array($_params, $compiler->nocache));
+ // maybe nocache because of nocache variables or nocache plugin
+ $compiler->nocache = !$tag_info[1] | $compiler->nocache | $compiler->tag_nocache;
+ $function = $tag_info[0];
+ // compile code
+ if (!is_array($function)) {
+ $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
+ } elseif (is_object($function[0])) {
+ $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]->{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
+ } else {
+ $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function[0]}::{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
+ }
+ } else {
+ // must endblock be nocache?
+ if ($compiler->nocache) {
+ $compiler->tag_nocache = true;
+ }
+ $base_tag = substr($tag, 0, - 5);
+ // closing tag of block plugin, restore nocache
+ list($_params, $compiler->nocache) = $this->closeTag($compiler, $base_tag);
+ // This tag does create output
+ $compiler->has_output = true;
+ if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) {
+ $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0];
+ } else {
+ $function = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0];
+ }
+ // compile code
+ if (!isset($parameter['modifier_list'])) {
+ $mod_pre = $mod_post = '';
+ } else {
+ $mod_pre = ' ob_start(); ';
+ $mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], 'value' => 'ob_get_clean()')) . ';';
+ }
+ if (!is_array($function)) {
+ $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat);" . $mod_post . " } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
+ } elseif (is_object($function[0])) {
+ $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo \$_smarty_tpl->smarty->registered_plugins['block']['{$base_tag}'][0][0]->{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . "} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
+ } else {
+ $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo {$function[0]}::{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . "} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
+ }
+ }
+
+ return $output . "\n";
+ }
+}
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php
index 5058bfbbd..dfb4572f4 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php
@@ -1,81 +1,79 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Registered Function
- *
- * Compiles code for the execution of a registered function
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Registered Function Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Internal_CompileBase {
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $optional_attributes = array('_any');
-
- /**
- * Compiles code for the execution of a registered function
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @param string $tag name of function
- * @return string compiled code
- */
- public function compile($args, $compiler, $parameter, $tag)
- {
- // This tag does create output
- $compiler->has_output = true;
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- if ($_attr['nocache']) {
- $compiler->tag_nocache = true;
- }
- unset($_attr['nocache']);
- if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag])) {
- $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag];
- } else {
- $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_FUNCTION][$tag];
- }
- // not cachable?
- $compiler->tag_nocache = $compiler->tag_nocache || !$tag_info[1];
- // convert attributes into parameter array string
- $_paramsArray = array();
- foreach ($_attr as $_key => $_value) {
- if (is_int($_key)) {
- $_paramsArray[] = "$_key=>$_value";
- } elseif ($compiler->template->caching && in_array($_key,$tag_info[2])) {
- $_value = str_replace("'","^#^",$_value);
- $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^";
- } else {
- $_paramsArray[] = "'$_key'=>$_value";
- }
- }
- $_params = 'array(' . implode(",", $_paramsArray) . ')';
- $function = $tag_info[0];
- // compile code
- if (!is_array($function)) {
- $output = "<?php echo {$function}({$_params},\$_smarty_tpl);?>\n";
- } else if (is_object($function[0])) {
- $output = "<?php echo \$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION]['{$tag}'][0][0]->{$function[1]}({$_params},\$_smarty_tpl);?>\n";
- } else {
- $output = "<?php echo {$function[0]}::{$function[1]}({$_params},\$_smarty_tpl);?>\n";
- }
- return $output;
- }
-
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty Internal Plugin Compile Registered Function
+ * Compiles code for the execution of a registered function
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
+
+/**
+ * Smarty Internal Plugin Compile Registered Function Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Internal_CompileBase
+{
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
+ public $optional_attributes = array('_any');
+
+ /**
+ * Compiles code for the execution of a registered function
+ *
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ * @param string $tag name of function
+ *
+ * @return string compiled code
+ */
+ public function compile($args, $compiler, $parameter, $tag)
+ {
+ // This tag does create output
+ $compiler->has_output = true;
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ if ($_attr['nocache']) {
+ $compiler->tag_nocache = true;
+ }
+ unset($_attr['nocache']);
+ if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag])) {
+ $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag];
+ } else {
+ $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_FUNCTION][$tag];
+ }
+ // not cachable?
+ $compiler->tag_nocache = $compiler->tag_nocache || !$tag_info[1];
+ // convert attributes into parameter array string
+ $_paramsArray = array();
+ foreach ($_attr as $_key => $_value) {
+ if (is_int($_key)) {
+ $_paramsArray[] = "$_key=>$_value";
+ } elseif ($compiler->template->caching && in_array($_key, $tag_info[2])) {
+ $_value = str_replace("'", "^#^", $_value);
+ $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^";
+ } else {
+ $_paramsArray[] = "'$_key'=>$_value";
+ }
+ }
+ $_params = 'array(' . implode(",", $_paramsArray) . ')';
+ $function = $tag_info[0];
+ // compile code
+ if (!is_array($function)) {
+ $output = "<?php echo {$function}({$_params},\$_smarty_tpl);?>\n";
+ } elseif (is_object($function[0])) {
+ $output = "<?php echo \$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION]['{$tag}'][0][0]->{$function[1]}({$_params},\$_smarty_tpl);?>\n";
+ } else {
+ $output = "<?php echo {$function[0]}::{$function[1]}({$_params},\$_smarty_tpl);?>\n";
+ }
+
+ return $output;
+ }
+}
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php
index 4760dbe3f..23b17ae14 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php
@@ -1,32 +1,33 @@
<?php
/**
* Smarty Internal Plugin Compile Special Smarty Variable
- *
* Compiles the special $smarty variables
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile special Smarty Variable Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_CompileBase
+{
/**
- * Compiles code for the speical $smarty variables
+ * Compiles code for the special $smarty variables
+ *
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param $parameter
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler, $parameter)
{
- $_index = preg_split("/\]\[/",substr($parameter, 1, strlen($parameter)-2));
+ $_index = preg_split("/\]\[/", substr($parameter, 1, strlen($parameter) - 2));
$compiled_ref = ' ';
$variable = trim($_index[0], "'");
switch ($variable) {
@@ -56,7 +57,7 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
$compiler->trigger_template_error("(secure mode) super globals not permitted");
break;
}
- $compiled_ref = '$_'.strtoupper($variable);
+ $compiled_ref = '$_' . strtoupper($variable);
break;
case 'template':
@@ -70,6 +71,7 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
case 'version':
$_version = Smarty::SMARTY_VERSION;
+
return "'$_version'";
case 'const':
@@ -77,16 +79,23 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
$compiler->trigger_template_error("(secure mode) constants not permitted");
break;
}
- return '@' . trim($_index[1], "'");
+
+ return "@constant({$_index[1]})";
case 'config':
- return "\$_smarty_tpl->getConfigVariable($_index[1])";
+ if (isset($_index[2])) {
+ return "(is_array(\$tmp = \$_smarty_tpl->getConfigVariable($_index[1])) ? \$tmp[$_index[2]] : null)";
+ } else {
+ return "\$_smarty_tpl->getConfigVariable($_index[1])";
+ }
case 'ldelim':
$_ldelim = $compiler->smarty->left_delimiter;
+
return "'$_ldelim'";
case 'rdelim':
$_rdelim = $compiler->smarty->right_delimiter;
+
return "'$_rdelim'";
default:
@@ -99,9 +108,7 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
$compiled_ref = $compiled_ref . "[$_ind]";
}
}
+
return $compiled_ref;
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_rdelim.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_rdelim.php
index 807c7e2b9..dcff2ae41 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_rdelim.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_rdelim.php
@@ -1,28 +1,28 @@
<?php
/**
* Smarty Internal Plugin Compile Rdelim
- *
* Compiles the {rdelim} tag
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Rdelim Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Rdelim extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Rdelim extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {rdelim} tag
- *
* This tag does output the right delimiter.
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
* @return string compiled code
*/
public function compile($args, $compiler)
@@ -33,9 +33,7 @@ class Smarty_Internal_Compile_Rdelim extends Smarty_Internal_CompileBase {
}
// this tag does not return compiled code
$compiler->has_code = true;
+
return $compiler->smarty->right_delimiter;
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_section.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_section.php
index ccb7673d8..5ac3fb067 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_section.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_section.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Section
- *
* Compiles the {section} {sectionelse} {/section} tags
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Section Class
- *
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -42,8 +41,9 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {section} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
* @return string compiled code
*/
public function compile($args, $compiler)
@@ -65,14 +65,15 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase {
foreach ($_attr as $attr_name => $attr_value) {
switch ($attr_name) {
case 'loop':
- $output .= "{$section_props}['loop'] = is_array(\$_loop=$attr_value) ? count(\$_loop) : max(0, (int)\$_loop); unset(\$_loop);\n";
+ $output .= "{$section_props}['loop'] = is_array(\$_loop=$attr_value) ? count(\$_loop) : max(0, (int) \$_loop); unset(\$_loop);\n";
break;
case 'show':
- if (is_bool($attr_value))
+ if (is_bool($attr_value)) {
$show_attr_value = $attr_value ? 'true' : 'false';
- else
- $show_attr_value = "(bool)$attr_value";
+ } else {
+ $show_attr_value = "(bool) $attr_value";
+ }
$output .= "{$section_props}['show'] = $show_attr_value;\n";
break;
@@ -82,32 +83,36 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase {
case 'max':
case 'start':
- $output .= "{$section_props}['$attr_name'] = (int)$attr_value;\n";
+ $output .= "{$section_props}['$attr_name'] = (int) $attr_value;\n";
break;
case 'step':
- $output .= "{$section_props}['$attr_name'] = ((int)$attr_value) == 0 ? 1 : (int)$attr_value;\n";
+ $output .= "{$section_props}['$attr_name'] = ((int) $attr_value) == 0 ? 1 : (int) $attr_value;\n";
break;
}
}
- if (!isset($_attr['show']))
+ if (!isset($_attr['show'])) {
$output .= "{$section_props}['show'] = true;\n";
+ }
- if (!isset($_attr['loop']))
+ if (!isset($_attr['loop'])) {
$output .= "{$section_props}['loop'] = 1;\n";
+ }
- if (!isset($_attr['max']))
+ if (!isset($_attr['max'])) {
$output .= "{$section_props}['max'] = {$section_props}['loop'];\n";
- else
+ } else {
$output .= "if ({$section_props}['max'] < 0)\n" . " {$section_props}['max'] = {$section_props}['loop'];\n";
+ }
- if (!isset($_attr['step']))
+ if (!isset($_attr['step'])) {
$output .= "{$section_props}['step'] = 1;\n";
+ }
- if (!isset($_attr['start']))
+ if (!isset($_attr['start'])) {
$output .= "{$section_props}['start'] = {$section_props}['step'] > 0 ? 0 : {$section_props}['loop']-1;\n";
- else {
+ } else {
$output .= "if ({$section_props}['start'] < 0)\n" . " {$section_props}['start'] = max({$section_props}['step'] > 0 ? 0 : -1, {$section_props}['loop'] + {$section_props}['start']);\n" . "else\n" . " {$section_props}['start'] = min({$section_props}['start'], {$section_props}['step'] > 0 ? {$section_props}['loop'] : {$section_props}['loop']-1);\n";
}
@@ -131,24 +136,25 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase {
$output .= "{$section_props}['last'] = ({$section_props}['iteration'] == {$section_props}['total']);\n";
$output .= "?>";
+
return $output;
}
-
}
/**
* Smarty Internal Plugin Compile Sectionelse Class
- *
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {sectionelse} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
* @return string compiled code
*/
public function compile($args, $compiler)
@@ -161,22 +167,22 @@ class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_CompileBase {
return "<?php endfor; else: ?>";
}
-
}
/**
* Smarty Internal Plugin Compile Sectionclose Class
- *
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {/section} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
* @return string compiled code
*/
public function compile($args, $compiler)
@@ -197,7 +203,4 @@ class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_CompileBase {
return "<?php endfor; endif; ?>";
}
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_setfilter.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_setfilter.php
index d1dd90cf8..8e91ba6d0 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_setfilter.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_setfilter.php
@@ -1,72 +1,70 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Setfilter
- *
- * Compiles code for setfilter tag
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Setfilter Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Setfilter extends Smarty_Internal_CompileBase {
-
- /**
- * Compiles code for setfilter tag
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @return string compiled code
- */
- public function compile($args, $compiler, $parameter)
- {
- $compiler->variable_filter_stack[] = $compiler->template->variable_filters;
- $compiler->template->variable_filters = $parameter['modifier_list'];
- // this tag does not return compiled code
- $compiler->has_code = false;
- return true;
- }
-
-}
-
-/**
- * Smarty Internal Plugin Compile Setfilterclose Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Setfilterclose extends Smarty_Internal_CompileBase {
-
- /**
- * Compiles code for the {/setfilter} tag
- *
- * This tag does not generate compiled output. It resets variable filter.
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @return string compiled code
- */
- public function compile($args, $compiler)
- {
- $_attr = $this->getAttributes($compiler, $args);
- // reset variable filter to previous state
- if (count($compiler->variable_filter_stack)) {
- $compiler->template->variable_filters = array_pop($compiler->variable_filter_stack);
- } else {
- $compiler->template->variable_filters = array();
- }
- // this tag does not return compiled code
- $compiler->has_code = false;
- return true;
- }
-
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty Internal Plugin Compile Setfilter
+ * Compiles code for setfilter tag
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
+
+/**
+ * Smarty Internal Plugin Compile Setfilter Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Setfilter extends Smarty_Internal_CompileBase
+{
+ /**
+ * Compiles code for setfilter tag
+ *
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ */
+ public function compile($args, $compiler, $parameter)
+ {
+ $compiler->variable_filter_stack[] = $compiler->template->variable_filters;
+ $compiler->template->variable_filters = $parameter['modifier_list'];
+ // this tag does not return compiled code
+ $compiler->has_code = false;
+
+ return true;
+ }
+}
+
+/**
+ * Smarty Internal Plugin Compile Setfilterclose Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Setfilterclose extends Smarty_Internal_CompileBase
+{
+ /**
+ * Compiles code for the {/setfilter} tag
+ * This tag does not generate compiled output. It resets variable filter.
+ *
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
+ * @return string compiled code
+ */
+ public function compile($args, $compiler)
+ {
+ $_attr = $this->getAttributes($compiler, $args);
+ // reset variable filter to previous state
+ if (count($compiler->variable_filter_stack)) {
+ $compiler->template->variable_filters = array_pop($compiler->variable_filter_stack);
+ } else {
+ $compiler->template->variable_filters = array();
+ }
+ // this tag does not return compiled code
+ $compiler->has_code = false;
+
+ return true;
+ }
+}
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_while.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_while.php
index d7d986c34..36dc049db 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_while.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_while.php
@@ -1,28 +1,28 @@
<?php
/**
* Smarty Internal Plugin Compile While
- *
* Compiles the {while} tag
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile While Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {while} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return string compiled code
*/
public function compile($args, $compiler, $parameter)
@@ -31,7 +31,7 @@ class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase {
$_attr = $this->getAttributes($compiler, $args);
$this->openTag($compiler, 'while', $compiler->nocache);
- if (!array_key_exists("if condition",$parameter)) {
+ if (!array_key_exists("if condition", $parameter)) {
$compiler->trigger_template_error("missing while condition", $compiler->lex->taglineno);
}
@@ -51,32 +51,33 @@ class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase {
}
if (is_array($parameter['if condition']['var'])) {
$_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->createLocalArrayVariable(" . $parameter['if condition']['var']['var'] . "$_nocache);\n";
- $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . "){?>";
+ $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . ") {?>";
} else {
$_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});";
- $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . "){?>";
+ $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . ") {?>";
}
+
return $_output;
} else {
- return "<?php while ({$parameter['if condition']}){?>";
+ return "<?php while ({$parameter['if condition']}) {?>";
}
}
-
}
/**
* Smarty Internal Plugin Compile Whileclose Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {/while} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
* @return string compiled code
*/
public function compile($args, $compiler)
@@ -86,9 +87,7 @@ class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase {
$compiler->tag_nocache = true;
}
$compiler->nocache = $this->closeTag($compiler, array('while'));
+
return "<?php }?>";
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compilebase.php b/library/Smarty/libs/sysplugins/smarty_internal_compilebase.php
index 5fb56f371..f78f15f40 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compilebase.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compilebase.php
@@ -2,19 +2,19 @@
/**
* Smarty Internal Plugin CompileBase
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* This class does extend all internal compile plugins
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-abstract class Smarty_Internal_CompileBase {
-
+abstract class Smarty_Internal_CompileBase
+{
/**
* Array of names of required attribute required by tag
*
@@ -43,15 +43,15 @@ abstract class Smarty_Internal_CompileBase {
/**
* This function checks if the attributes passed are valid
- *
* The attributes passed for the tag to compile are checked against the list of required and
* optional attributes. Required attributes must be present. Optional attributes are check against
* the corresponding list. The keyword '_any' specifies that any attribute will be accepted
* as valid
*
- * @param object $compiler compiler object
- * @param array $attributes attributes applied to the tag
- * @return array of mapped attributes for further processing
+ * @param object $compiler compiler object
+ * @param array $attributes attributes applied to the tag
+ *
+ * @return array of mapped attributes for further processing
*/
public function getAttributes($compiler, $attributes)
{
@@ -64,7 +64,7 @@ abstract class Smarty_Internal_CompileBase {
if (in_array(trim($mixed, '\'"'), $this->option_flags)) {
$_indexed_attr[trim($mixed, '\'"')] = true;
// shorthand attribute ?
- } else if (isset($this->shorttag_order[$key])) {
+ } elseif (isset($this->shorttag_order[$key])) {
$_indexed_attr[$this->shorttag_order[$key]] = $mixed;
} else {
// too many shorthands
@@ -77,13 +77,13 @@ abstract class Smarty_Internal_CompileBase {
if (in_array($kv['key'], $this->option_flags)) {
if (is_bool($kv['value'])) {
$_indexed_attr[$kv['key']] = $kv['value'];
- } else if (is_string($kv['value']) && in_array(trim($kv['value'], '\'"'), array('true', 'false'))) {
+ } elseif (is_string($kv['value']) && in_array(trim($kv['value'], '\'"'), array('true', 'false'))) {
if (trim($kv['value']) == 'true') {
$_indexed_attr[$kv['key']] = true;
} else {
$_indexed_attr[$kv['key']] = false;
}
- } else if (is_numeric($kv['value']) && in_array($kv['value'], array(0, 1))) {
+ } elseif (is_numeric($kv['value']) && in_array($kv['value'], array(0, 1))) {
if ($kv['value'] == 1) {
$_indexed_attr[$kv['key']] = true;
} else {
@@ -105,7 +105,7 @@ abstract class Smarty_Internal_CompileBase {
$compiler->trigger_template_error("missing \"" . $attr . "\" attribute", $compiler->lex->taglineno);
}
}
- // check for unallowed attributes
+ // check for not allowed attributes
if ($this->optional_attributes != array('_any')) {
$tmp_array = array_merge($this->required_attributes, $this->optional_attributes, $this->option_flags);
foreach ($_indexed_attr as $key => $dummy) {
@@ -126,12 +126,11 @@ abstract class Smarty_Internal_CompileBase {
/**
* Push opening tag name on stack
- *
* Optionally additional data can be saved on stack
*
- * @param object $compiler compiler object
- * @param string $openTag the opening tag's name
- * @param mixed $data optional data saved
+ * @param object $compiler compiler object
+ * @param string $openTag the opening tag's name
+ * @param mixed $data optional data saved
*/
public function openTag($compiler, $openTag, $data = null)
{
@@ -140,12 +139,12 @@ abstract class Smarty_Internal_CompileBase {
/**
* Pop closing tag
- *
* Raise an error if this stack-top doesn't match with expected opening tags
*
- * @param object $compiler compiler object
- * @param array|string $expectedTag the expected opening tag names
- * @return mixed any type the opening tag's name or saved data
+ * @param object $compiler compiler object
+ * @param array|string $expectedTag the expected opening tag names
+ *
+ * @return mixed any type the opening tag's name or saved data
*/
public function closeTag($compiler, $expectedTag)
{
@@ -163,14 +162,13 @@ abstract class Smarty_Internal_CompileBase {
}
}
// wrong nesting of tags
- $compiler->trigger_template_error("unclosed {" . $_openTag . "} tag");
+ $compiler->trigger_template_error("unclosed {$compiler->smarty->left_delimiter}" . $_openTag . "{$compiler->smarty->right_delimiter} tag");
+
return;
}
// wrong nesting of tags
$compiler->trigger_template_error("unexpected closing tag", $compiler->lex->taglineno);
+
return;
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_config.php b/library/Smarty/libs/sysplugins/smarty_internal_config.php
index a309ec9ff..25694d5a9 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_config.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_config.php
@@ -2,27 +2,23 @@
/**
* Smarty Internal Plugin Config
*
- * @package Smarty
+ * @package Smarty
* @subpackage Config
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Config
- *
* Main class for config variables
*
- * @package Smarty
+ * @package Smarty
* @subpackage Config
- *
- * @property Smarty_Config_Source $source
- * @property Smarty_Config_Compiled $compiled
* @ignore
*/
-class Smarty_Internal_Config {
-
+class Smarty_Internal_Config
+{
/**
- * Samrty instance
+ * Smarty instance
*
* @var Smarty object
*/
@@ -35,6 +31,7 @@ class Smarty_Internal_Config {
public $data = null;
/**
* Config resource
+ *
* @var string
*/
public $config_resource = null;
@@ -58,6 +55,7 @@ class Smarty_Internal_Config {
public $compiled_timestamp = null;
/**
* flag if compiled config file is invalid and must be (re)compiled
+ *
* @var bool
*/
public $mustCompile = null;
@@ -72,8 +70,8 @@ class Smarty_Internal_Config {
* Constructor of config file object
*
* @param string $config_resource config file resource name
- * @param Smarty $smarty Smarty instance
- * @param object $data object for config vars storage
+ * @param Smarty $smarty Smarty instance
+ * @param object $data object for config vars storage
*/
public function __construct($config_resource, $smarty, $data = null)
{
@@ -90,8 +88,8 @@ class Smarty_Internal_Config {
public function getCompiledFilepath()
{
return $this->compiled_filepath === null ?
- ($this->compiled_filepath = $this->buildCompiledFilepath()) :
- $this->compiled_filepath;
+ ($this->compiled_filepath = $this->buildCompiledFilepath()) :
+ $this->compiled_filepath;
}
/**
@@ -103,25 +101,26 @@ class Smarty_Internal_Config {
{
$_compile_id = isset($this->smarty->compile_id) ? preg_replace('![^\w\|]+!', '_', $this->smarty->compile_id) : null;
$_flag = (int) $this->smarty->config_read_hidden + (int) $this->smarty->config_booleanize * 2
- + (int) $this->smarty->config_overwrite * 4;
- $_filepath = sha1($this->source->name . $_flag);
+ + (int) $this->smarty->config_overwrite * 4;
+ $_filepath = sha1(realpath($this->source->filepath) . $_flag);
// if use_sub_dirs, break file into directories
if ($this->smarty->use_sub_dirs) {
$_filepath = substr($_filepath, 0, 2) . DS
- . substr($_filepath, 2, 2) . DS
- . substr($_filepath, 4, 2) . DS
- . $_filepath;
+ . substr($_filepath, 2, 2) . DS
+ . substr($_filepath, 4, 2) . DS
+ . $_filepath;
}
$_compile_dir_sep = $this->smarty->use_sub_dirs ? DS : '^';
if (isset($_compile_id)) {
$_filepath = $_compile_id . $_compile_dir_sep . $_filepath;
}
$_compile_dir = $this->smarty->getCompileDir();
+
return $_compile_dir . $_filepath . '.' . basename($this->source->name) . '.config' . '.php';
}
/**
- * Returns the timpestamp of the compiled file
+ * Returns the timestamp of the compiled file
*
* @return integer the file timestamp
*/
@@ -134,7 +133,6 @@ class Smarty_Internal_Config {
/**
* Returns if the current config file must be compiled
- *
* It does compare the timestamps of config source and the compiled config and checks the force compile configuration
*
* @return boolean true if the file must be compiled
@@ -142,13 +140,12 @@ class Smarty_Internal_Config {
public function mustCompile()
{
return $this->mustCompile === null ?
- $this->mustCompile = ($this->smarty->force_compile || $this->getCompiledTimestamp () === false || $this->smarty->compile_check && $this->getCompiledTimestamp () < $this->source->timestamp):
+ $this->mustCompile = ($this->smarty->force_compile || $this->getCompiledTimestamp() === false || $this->smarty->compile_check && $this->getCompiledTimestamp() < $this->source->timestamp) :
$this->mustCompile;
}
/**
* Returns the compiled config file
- *
* It checks if the config file must be compiled or just read the compiled version
*
* @return string the compiled config file
@@ -163,6 +160,7 @@ class Smarty_Internal_Config {
$this->compiled_config = file_get_contents($this->getCompiledFilepath());
}
}
+
return $this->compiled_config;
}
@@ -187,14 +185,15 @@ class Smarty_Internal_Config {
// call compiler
try {
$this->compiler_object->compileSource($this);
- } catch (Exception $e) {
+ }
+ catch (Exception $e) {
// restore old timestamp in case of error
if ($this->smarty->compile_locking && $saved_timestamp) {
touch($this->getCompiledFilepath(), $saved_timestamp);
}
throw $e;
}
- // compiling succeded
+ // compiling succeeded
// write compiled template
Smarty_Internal_Write_File::writeFile($this->getCompiledFilepath(), $this->getCompiledConfig(), $this->smarty);
}
@@ -202,8 +201,10 @@ class Smarty_Internal_Config {
/**
* load config variables
*
- * @param mixed $sections array of section names, single section or null
- * @param object $scope global,parent or local
+ * @param mixed $sections array of section names, single section or null
+ * @param string $scope global,parent or local
+ *
+ * @throws Exception
*/
public function loadConfigVars($sections = null, $scope = 'local')
{
@@ -240,9 +241,8 @@ class Smarty_Internal_Config {
}
// scan sections
if (!empty($sections)) {
- $sections = array_flip((array) $sections);
- foreach ($_config_vars['sections'] as $this_section => $dummy) {
- if (isset($sections[$this_section])) {
+ foreach ((array) $sections as $this_section) {
+ if (isset($_config_vars['sections'][$this_section])) {
foreach ($_config_vars['sections'][$this_section]['vars'] as $variable => $value) {
if ($this->smarty->config_overwrite || !isset($scope_ptr->config_vars[$variable])) {
$scope_ptr->config_vars[$variable] = $value;
@@ -258,8 +258,9 @@ class Smarty_Internal_Config {
/**
* set Smarty property in template context
*
- * @param string $property_name property name
- * @param mixed $value value
+ * @param string $property_name property name
+ * @param mixed $value value
+ *
* @throws SmartyException if $property_name is not valid
*/
public function __set($property_name, $value)
@@ -268,6 +269,7 @@ class Smarty_Internal_Config {
case 'source':
case 'compiled':
$this->$property_name = $value;
+
return;
}
@@ -277,7 +279,9 @@ class Smarty_Internal_Config {
/**
* get Smarty property in template context
*
- * @param string $property_name property name
+ * @param string $property_name property name
+ *
+ * @return \Smarty_Config_Source|\Smarty_Template_Compiled
* @throws SmartyException if $property_name is not valid
*/
public function __get($property_name)
@@ -288,16 +292,15 @@ class Smarty_Internal_Config {
throw new SmartyException("Unable to parse resource name \"{$this->config_resource}\"");
}
$this->source = Smarty_Resource::config($this);
+
return $this->source;
case 'compiled':
$this->compiled = $this->source->getCompiled($this);
+
return $this->compiled;
}
throw new SmartyException("config attribute '$property_name' does not exist.");
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php b/library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php
index b16a6940d..117310439 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php
@@ -1,23 +1,22 @@
<?php
/**
* Smarty Internal Plugin Config File Compiler
- *
* This is the config file compiler class. It calls the lexer and parser to
* perform the compiling.
*
- * @package Smarty
+ * @package Smarty
* @subpackage Config
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Main config file compiler class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Config
*/
-class Smarty_Internal_Config_File_Compiler {
-
+class Smarty_Internal_Config_File_Compiler
+{
/**
* Lexer object
*
@@ -69,7 +68,8 @@ class Smarty_Internal_Config_File_Compiler {
* Method to compile a Smarty template.
*
* @param Smarty_Internal_Config $config config object
- * @return bool true if compiling succeeded, false if it failed
+ *
+ * @return bool true if compiling succeeded, false if it failed
*/
public function compileSource(Smarty_Internal_Config $config)
{
@@ -84,28 +84,46 @@ class Smarty_Internal_Config_File_Compiler {
return true;
}
// init the lexer/parser to compile the config file
- $lex = new Smarty_Internal_Configfilelexer($_content, $this->smarty);
+ $lex = new Smarty_Internal_Configfilelexer($_content, $this);
$parser = new Smarty_Internal_Configfileparser($lex, $this);
- if ($this->smarty->_parserdebug) $parser->PrintTrace();
+
+ if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) {
+ $mbEncoding = mb_internal_encoding();
+ mb_internal_encoding('ASCII');
+ } else {
+ $mbEncoding = null;
+ }
+
+
+ if ($this->smarty->_parserdebug) {
+ $parser->PrintTrace();
+ }
// get tokens from lexer and parse them
while ($lex->yylex()) {
- if ($this->smarty->_parserdebug) echo "<br>Parsing {$parser->yyTokenName[$lex->token]} Token {$lex->value} Line {$lex->line} \n";
+ if ($this->smarty->_parserdebug) {
+ echo "<br>Parsing {$parser->yyTokenName[$lex->token]} Token {$lex->value} Line {$lex->line} \n";
+ }
$parser->doParse($lex->token, $lex->value);
}
// finish parsing process
$parser->doParse(0, 0);
+
+ if ($mbEncoding) {
+ mb_internal_encoding($mbEncoding);
+ }
+
$config->compiled_config = '<?php $_config_vars = ' . var_export($this->config_data, true) . '; ?>';
}
/**
* display compiler error messages without dying
- *
* If parameter $args is empty it is a parser detected syntax error.
- * In this case the parser is called to obtain information about exspected tokens.
- *
+ * In this case the parser is called to obtain information about expected tokens.
* If parameter $args contains a string this is used as error message
*
* @param string $args individual error message or null
+ *
+ * @throws SmartyCompilerException
*/
public function trigger_config_file_error($args = null)
{
@@ -117,12 +135,12 @@ class Smarty_Internal_Config_File_Compiler {
// $line--;
}
$match = preg_split("/\n/", $this->lex->data);
- $error_text = "Syntax error in config file '{$this->config->source->filepath}' on line {$line} '{$match[$line-1]}' ";
+ $error_text = "Syntax error in config file '{$this->config->source->filepath}' on line {$line} '{$match[$line - 1]}' ";
if (isset($args)) {
// individual error message
$error_text .= $args;
} else {
- // exspected token from parser
+ // expected token from parser
foreach ($this->parser->yy_get_expected_tokens($this->parser->yymajor) as $token) {
$exp_token = $this->parser->yyTokenName[$token];
if (isset($this->lex->smarty_token_names[$exp_token])) {
@@ -138,7 +156,4 @@ class Smarty_Internal_Config_File_Compiler {
}
throw new SmartyCompilerException($error_text);
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_configfilelexer.php b/library/Smarty/libs/sysplugins/smarty_internal_configfilelexer.php
index bade2fe74..f0292196b 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_configfilelexer.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_configfilelexer.php
@@ -1,15 +1,16 @@
<?php
/**
-* Smarty Internal Plugin Configfilelexer
-*
-* This is the lexer to break the config file source into tokens
-* @package Smarty
-* @subpackage Config
-* @author Uwe Tews
-*/
+ * Smarty Internal Plugin Configfilelexer
+ * This is the lexer to break the config file source into tokens
+ *
+ * @package Smarty
+ * @subpackage Config
+ * @author Uwe Tews
+ */
+
/**
-* Smarty Internal Plugin Configfilelexer
-*/
+ * Smarty Internal Plugin Configfilelexer
+ */
class Smarty_Internal_Configfilelexer
{
@@ -20,96 +21,119 @@ class Smarty_Internal_Configfilelexer
public $node;
public $line;
private $state = 1;
- public $smarty_token_names = array ( // Text for parser error messages
- );
-
+ public $yyTraceFILE;
+ public $yyTracePrompt;
+ public $state_name = array(1 => 'START', 2 => 'VALUE', 3 => 'NAKED_STRING_VALUE', 4 => 'COMMENT', 5 => 'SECTION', 6 => 'TRIPPLE');
+ public $smarty_token_names = array( // Text for parser error messages
+ );
- function __construct($data, $smarty)
+ function __construct($data, $compiler)
{
// set instance object
self::instance($this);
$this->data = $data . "\n"; //now all lines are \n-terminated
$this->counter = 0;
+ if (preg_match('/^\xEF\xBB\xBF/', $this->data, $match)) {
+ $this->counter += strlen($match[0]);
+ }
$this->line = 1;
- $this->smarty = $smarty;
- $this->mbstring_overload = ini_get('mbstring.func_overload') & 2;
+ $this->compiler = $compiler;
+ $this->smarty = $compiler->smarty;
}
+
public static function &instance($new_instance = null)
{
static $instance = null;
- if (isset($new_instance) && is_object($new_instance))
+ if (isset($new_instance) && is_object($new_instance)) {
$instance = $new_instance;
+ }
return $instance;
}
-
+ public function PrintTrace()
+ {
+ $this->yyTraceFILE = fopen('php://output', 'w');
+ $this->yyTracePrompt = '<br>';
+ }
private $_yy_state = 1;
private $_yy_stack = array();
- function yylex()
+ public function yylex()
{
return $this->{'yylex' . $this->_yy_state}();
}
- function yypushstate($state)
+ public function yypushstate($state)
{
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sState push %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+ }
array_push($this->_yy_stack, $this->_yy_state);
$this->_yy_state = $state;
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+ }
}
- function yypopstate()
+ public function yypopstate()
{
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sState pop %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+ }
$this->_yy_state = array_pop($this->_yy_stack);
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+ }
}
- function yybegin($state)
+ public function yybegin($state)
{
$this->_yy_state = $state;
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sState set %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+ }
}
-
-
-
- function yylex1()
+ public function yylex1()
{
- $tokenMap = array (
- 1 => 0,
- 2 => 0,
- 3 => 0,
- 4 => 0,
- 5 => 0,
- 6 => 0,
- 7 => 0,
- 8 => 0,
- );
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ $tokenMap = array(
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 0,
+ );
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
$yy_global_pattern = "/\G(#|;)|\G(\\[)|\G(\\])|\G(=)|\G([ \t\r]+)|\G(\n)|\G([0-9]*[a-zA-Z_]\\w*)|\G([\S\s])/iS";
do {
- if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+ if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches;
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
if (!count($yymatches)) {
throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr($this->data,
- $this->counter, 5) . '... state START');
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state START');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
if ($tokenMap[$this->token]) {
// extract sub-patterns for passing to lex function
$yysubmatches = array_slice($yysubmatches, $this->token + 1,
- $tokenMap[$this->token]);
+ $tokenMap[$this->token]);
} else {
$yysubmatches = array();
}
$this->value = current($yymatches); // token value
$r = $this->{'yy_r1_' . $this->token}($yysubmatches);
if ($r === null) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
// accept this token
return true;
@@ -118,110 +142,115 @@ class Smarty_Internal_Configfilelexer
// process this token in the new state
return $this->yylex();
} elseif ($r === false) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
// skip this token
continue;
- } } else {
+ }
+ } else {
throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[$this->counter]);
+ ': ' . $this->data[$this->counter]);
}
break;
} while (true);
-
} // end function
-
const START = 1;
+
function yy_r1_1($yy_subpatterns)
{
- $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART;
- $this->yypushstate(self::COMMENT);
+ $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART;
+ $this->yypushstate(self::COMMENT);
}
+
function yy_r1_2($yy_subpatterns)
{
- $this->token = Smarty_Internal_Configfileparser::TPC_OPENB;
- $this->yypushstate(self::SECTION);
+ $this->token = Smarty_Internal_Configfileparser::TPC_OPENB;
+ $this->yypushstate(self::SECTION);
}
+
function yy_r1_3($yy_subpatterns)
{
- $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB;
+ $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB;
}
+
function yy_r1_4($yy_subpatterns)
{
- $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL;
- $this->yypushstate(self::VALUE);
+ $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL;
+ $this->yypushstate(self::VALUE);
}
+
function yy_r1_5($yy_subpatterns)
{
- return false;
+ return false;
}
+
function yy_r1_6($yy_subpatterns)
{
- $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
+ $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
}
+
function yy_r1_7($yy_subpatterns)
{
- $this->token = Smarty_Internal_Configfileparser::TPC_ID;
+ $this->token = Smarty_Internal_Configfileparser::TPC_ID;
}
+
function yy_r1_8($yy_subpatterns)
{
- $this->token = Smarty_Internal_Configfileparser::TPC_OTHER;
+ $this->token = Smarty_Internal_Configfileparser::TPC_OTHER;
}
-
-
- function yylex2()
+ public function yylex2()
{
- $tokenMap = array (
- 1 => 0,
- 2 => 0,
- 3 => 0,
- 4 => 0,
- 5 => 0,
- 6 => 0,
- 7 => 0,
- 8 => 0,
- 9 => 0,
- );
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ $tokenMap = array(
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 0,
+ 9 => 0,
+ );
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
$yy_global_pattern = "/\G([ \t\r]+)|\G(\\d+\\.\\d+(?=[ \t\r]*[\n#;]))|\G(\\d+(?=[ \t\r]*[\n#;]))|\G(\"\"\")|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(?=[ \t\r]*[\n#;]))|\G(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"(?=[ \t\r]*[\n#;]))|\G([a-zA-Z]+(?=[ \t\r]*[\n#;]))|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/iS";
do {
- if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+ if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches;
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
if (!count($yymatches)) {
throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr($this->data,
- $this->counter, 5) . '... state VALUE');
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state VALUE');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
if ($tokenMap[$this->token]) {
// extract sub-patterns for passing to lex function
$yysubmatches = array_slice($yysubmatches, $this->token + 1,
- $tokenMap[$this->token]);
+ $tokenMap[$this->token]);
} else {
$yysubmatches = array();
}
$this->value = current($yymatches); // token value
$r = $this->{'yy_r2_' . $this->token}($yysubmatches);
if ($r === null) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
// accept this token
return true;
@@ -230,119 +259,125 @@ class Smarty_Internal_Configfilelexer
// process this token in the new state
return $this->yylex();
} elseif ($r === false) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
// skip this token
continue;
- } } else {
+ }
+ } else {
throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[$this->counter]);
+ ': ' . $this->data[$this->counter]);
}
break;
} while (true);
-
} // end function
-
const VALUE = 2;
+
function yy_r2_1($yy_subpatterns)
{
- return false;
+ return false;
}
+
function yy_r2_2($yy_subpatterns)
{
- $this->token = Smarty_Internal_Configfileparser::TPC_FLOAT;
- $this->yypopstate();
+ $this->token = Smarty_Internal_Configfileparser::TPC_FLOAT;
+ $this->yypopstate();
}
+
function yy_r2_3($yy_subpatterns)
{
- $this->token = Smarty_Internal_Configfileparser::TPC_INT;
- $this->yypopstate();
+ $this->token = Smarty_Internal_Configfileparser::TPC_INT;
+ $this->yypopstate();
}
+
function yy_r2_4($yy_subpatterns)
{
- $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES;
- $this->yypushstate(self::TRIPPLE);
+ $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES;
+ $this->yypushstate(self::TRIPPLE);
}
+
function yy_r2_5($yy_subpatterns)
{
- $this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING;
- $this->yypopstate();
+ $this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING;
+ $this->yypopstate();
}
+
function yy_r2_6($yy_subpatterns)
{
- $this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING;
- $this->yypopstate();
+ $this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING;
+ $this->yypopstate();
}
+
function yy_r2_7($yy_subpatterns)
{
- if (!$this->smarty->config_booleanize || !in_array(strtolower($this->value), Array("true", "false", "on", "off", "yes", "no")) ) {
- $this->yypopstate();
- $this->yypushstate(self::NAKED_STRING_VALUE);
- return true; //reprocess in new state
- } else {
- $this->token = Smarty_Internal_Configfileparser::TPC_BOOL;
- $this->yypopstate();
- }
+ if (!$this->smarty->config_booleanize || !in_array(strtolower($this->value), Array("true", "false", "on", "off", "yes", "no"))) {
+ $this->yypopstate();
+ $this->yypushstate(self::NAKED_STRING_VALUE);
+ return true; //reprocess in new state
+ } else {
+ $this->token = Smarty_Internal_Configfileparser::TPC_BOOL;
+ $this->yypopstate();
+ }
}
+
function yy_r2_8($yy_subpatterns)
{
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
- $this->yypopstate();
+ $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ $this->yypopstate();
}
+
function yy_r2_9($yy_subpatterns)
{
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
- $this->value = "";
- $this->yypopstate();
+ $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ $this->value = "";
+ $this->yypopstate();
}
-
-
- function yylex3()
+ public function yylex3()
{
- $tokenMap = array (
- 1 => 0,
- );
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ $tokenMap = array(
+ 1 => 0,
+ );
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
$yy_global_pattern = "/\G([^\n]+?(?=[ \t\r]*\n))/iS";
do {
- if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+ if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches;
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
if (!count($yymatches)) {
throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr($this->data,
- $this->counter, 5) . '... state NAKED_STRING_VALUE');
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state NAKED_STRING_VALUE');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
if ($tokenMap[$this->token]) {
// extract sub-patterns for passing to lex function
$yysubmatches = array_slice($yysubmatches, $this->token + 1,
- $tokenMap[$this->token]);
+ $tokenMap[$this->token]);
} else {
$yysubmatches = array();
}
$this->value = current($yymatches); // token value
$r = $this->{'yy_r3_' . $this->token}($yysubmatches);
if ($r === null) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
// accept this token
return true;
@@ -351,67 +386,65 @@ class Smarty_Internal_Configfilelexer
// process this token in the new state
return $this->yylex();
} elseif ($r === false) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
// skip this token
continue;
- } } else {
+ }
+ } else {
throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[$this->counter]);
+ ': ' . $this->data[$this->counter]);
}
break;
} while (true);
-
} // end function
-
const NAKED_STRING_VALUE = 3;
+
function yy_r3_1($yy_subpatterns)
{
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
- $this->yypopstate();
+ $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ $this->yypopstate();
}
-
-
- function yylex4()
+ public function yylex4()
{
- $tokenMap = array (
- 1 => 0,
- 2 => 0,
- 3 => 0,
- );
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ $tokenMap = array(
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ );
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
$yy_global_pattern = "/\G([ \t\r]+)|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/iS";
do {
- if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+ if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches;
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
if (!count($yymatches)) {
throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr($this->data,
- $this->counter, 5) . '... state COMMENT');
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state COMMENT');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
if ($tokenMap[$this->token]) {
// extract sub-patterns for passing to lex function
$yysubmatches = array_slice($yysubmatches, $this->token + 1,
- $tokenMap[$this->token]);
+ $tokenMap[$this->token]);
} else {
$yysubmatches = array();
}
$this->value = current($yymatches); // token value
$r = $this->{'yy_r4_' . $this->token}($yysubmatches);
if ($r === null) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
// accept this token
return true;
@@ -420,76 +453,76 @@ class Smarty_Internal_Configfilelexer
// process this token in the new state
return $this->yylex();
} elseif ($r === false) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
// skip this token
continue;
- } } else {
+ }
+ } else {
throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[$this->counter]);
+ ': ' . $this->data[$this->counter]);
}
break;
} while (true);
-
} // end function
-
const COMMENT = 4;
+
function yy_r4_1($yy_subpatterns)
{
- return false;
+ return false;
}
+
function yy_r4_2($yy_subpatterns)
{
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
}
+
function yy_r4_3($yy_subpatterns)
{
- $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
- $this->yypopstate();
+ $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
+ $this->yypopstate();
}
-
-
- function yylex5()
+ public function yylex5()
{
- $tokenMap = array (
- 1 => 0,
- 2 => 0,
- );
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ $tokenMap = array(
+ 1 => 0,
+ 2 => 0,
+ );
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
$yy_global_pattern = "/\G(\\.)|\G(.*?(?=[\.=[\]\r\n]))/iS";
do {
- if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+ if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches;
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
if (!count($yymatches)) {
throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr($this->data,
- $this->counter, 5) . '... state SECTION');
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state SECTION');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
if ($tokenMap[$this->token]) {
// extract sub-patterns for passing to lex function
$yysubmatches = array_slice($yysubmatches, $this->token + 1,
- $tokenMap[$this->token]);
+ $tokenMap[$this->token]);
} else {
$yysubmatches = array();
}
$this->value = current($yymatches); // token value
$r = $this->{'yy_r5_' . $this->token}($yysubmatches);
if ($r === null) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
// accept this token
return true;
@@ -498,70 +531,70 @@ class Smarty_Internal_Configfilelexer
// process this token in the new state
return $this->yylex();
} elseif ($r === false) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
// skip this token
continue;
- } } else {
+ }
+ } else {
throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[$this->counter]);
+ ': ' . $this->data[$this->counter]);
}
break;
} while (true);
-
} // end function
-
const SECTION = 5;
+
function yy_r5_1($yy_subpatterns)
{
- $this->token = Smarty_Internal_Configfileparser::TPC_DOT;
+ $this->token = Smarty_Internal_Configfileparser::TPC_DOT;
}
+
function yy_r5_2($yy_subpatterns)
{
- $this->token = Smarty_Internal_Configfileparser::TPC_SECTION;
- $this->yypopstate();
+ $this->token = Smarty_Internal_Configfileparser::TPC_SECTION;
+ $this->yypopstate();
}
-
- function yylex6()
+ public function yylex6()
{
- $tokenMap = array (
- 1 => 0,
- 2 => 0,
- );
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ $tokenMap = array(
+ 1 => 0,
+ 2 => 0,
+ );
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
$yy_global_pattern = "/\G(\"\"\"(?=[ \t\r]*[\n#;]))|\G([\S\s])/iS";
do {
- if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+ if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches;
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
if (!count($yymatches)) {
throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr($this->data,
- $this->counter, 5) . '... state TRIPPLE');
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state TRIPPLE');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
if ($tokenMap[$this->token]) {
// extract sub-patterns for passing to lex function
$yysubmatches = array_slice($yysubmatches, $this->token + 1,
- $tokenMap[$this->token]);
+ $tokenMap[$this->token]);
} else {
$yysubmatches = array();
}
$this->value = current($yymatches); // token value
$r = $this->{'yy_r6_' . $this->token}($yysubmatches);
if ($r === null) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
// accept this token
return true;
@@ -570,53 +603,44 @@ class Smarty_Internal_Configfilelexer
// process this token in the new state
return $this->yylex();
} elseif ($r === false) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
// skip this token
continue;
- } } else {
+ }
+ } else {
throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[$this->counter]);
+ ': ' . $this->data[$this->counter]);
}
break;
} while (true);
-
} // end function
-
const TRIPPLE = 6;
+
function yy_r6_1($yy_subpatterns)
{
- $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES_END;
- $this->yypopstate();
- $this->yypushstate(self::START);
+ $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES_END;
+ $this->yypopstate();
+ $this->yypushstate(self::START);
}
+
function yy_r6_2($yy_subpatterns)
{
- if ($this->mbstring_overload) {
- $to = mb_strlen($this->data,'latin1');
- } else {
- $to = strlen($this->data);
- }
- preg_match("/\"\"\"[ \t\r]*[\n#;]/",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
- if (isset($match[0][1])) {
- $to = $match[0][1];
- } else {
- $this->compiler->trigger_template_error ("missing or misspelled literal closing tag");
- }
- if ($this->mbstring_overload) {
- $this->value = mb_substr($this->data,$this->counter,$to-$this->counter,'latin1');
- } else {
- $this->value = substr($this->data,$this->counter,$to-$this->counter);
- }
- $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_TEXT;
+ $to = strlen($this->data);
+ preg_match("/\"\"\"[ \t\r]*[\n#;]/", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter);
+ if (isset($match[0][1])) {
+ $to = $match[0][1];
+ } else {
+ $this->compiler->trigger_template_error("missing or misspelled literal closing tag");
+ }
+ $this->value = substr($this->data, $this->counter, $to - $this->counter);
+ $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_TEXT;
}
-
-
}
-?> \ No newline at end of file
+
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_configfileparser.php b/library/Smarty/libs/sysplugins/smarty_internal_configfileparser.php
index 784bc684d..fc476ce0a 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_configfileparser.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_configfileparser.php
@@ -1,20 +1,20 @@
<?php
-/**
-* Smarty Internal Plugin Configfileparser
-*
-* This is the config file parser.
-* It is generated from the internal.configfileparser.y file
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
+/**
+ * Smarty Internal Plugin Configfileparser
+ * This is the config file parser.
+ * It is generated from the internal.configfileparser.y file
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
class TPC_yyToken implements ArrayAccess
{
public $string = '';
public $metadata = array();
- function __construct($s, $m = array())
+ public function __construct($s, $m = array())
{
if ($s instanceof TPC_yyToken) {
$this->string = $s->string;
@@ -29,28 +29,29 @@ class TPC_yyToken implements ArrayAccess
}
}
- function __toString()
+ public function __toString()
{
return $this->_string;
}
- function offsetExists($offset)
+ public function offsetExists($offset)
{
return isset($this->metadata[$offset]);
}
- function offsetGet($offset)
+ public function offsetGet($offset)
{
return $this->metadata[$offset];
}
- function offsetSet($offset, $value)
+ public function offsetSet($offset, $value)
{
if ($offset === null) {
if (isset($value[0])) {
$x = ($value instanceof TPC_yyToken) ?
$value->metadata : $value;
$this->metadata = array_merge($this->metadata, $x);
+
return;
}
$offset = count($this->metadata);
@@ -67,7 +68,7 @@ class TPC_yyToken implements ArrayAccess
}
}
- function offsetUnset($offset)
+ public function offsetUnset($offset)
{
unset($this->metadata[$offset]);
}
@@ -75,18 +76,19 @@ class TPC_yyToken implements ArrayAccess
class TPC_yyStackEntry
{
- public $stateno; /* The state-number */
- public $major; /* The major token value. This is the code
+ public $stateno; /* The state-number */
+ public $major; /* The major token value. This is the code
** number for the token at this stack level */
public $minor; /* The user-supplied minor token value. This
** is the value of the token */
-};
+}
+;
#line 12 "smarty_internal_configfileparser.y"
-class Smarty_Internal_Configfileparser#line 79 "smarty_internal_configfileparser.php"
+class Smarty_Internal_Configfileparser #line 80 "smarty_internal_configfileparser.php"
{
-#line 14 "smarty_internal_configfileparser.y"
+ #line 14 "smarty_internal_configfileparser.y"
// states whether the parse was successful or not
public $successful = true;
@@ -94,23 +96,27 @@ class Smarty_Internal_Configfileparser#line 79 "smarty_internal_configfileparser
private $lex;
private $internalError = false;
- function __construct($lex, $compiler) {
+ function __construct($lex, $compiler)
+ {
// set instance object
self::instance($this);
$this->lex = $lex;
$this->smarty = $compiler->smarty;
$this->compiler = $compiler;
}
+
public static function &instance($new_instance = null)
{
static $instance = null;
- if (isset($new_instance) && is_object($new_instance))
+ if (isset($new_instance) && is_object($new_instance)) {
$instance = $new_instance;
+ }
return $instance;
}
- private function parse_bool($str) {
- if (in_array(strtolower($str) ,array('on','yes','true'))) {
+ private function parse_bool($str)
+ {
+ if (in_array(strtolower($str), array('on', 'yes', 'true'))) {
$res = true;
} else {
$res = false;
@@ -119,11 +125,13 @@ class Smarty_Internal_Configfileparser#line 79 "smarty_internal_configfileparser
}
private static $escapes_single = Array('\\' => '\\',
- '\'' => '\'');
- private static function parse_single_quoted_string($qstr) {
- $escaped_string = substr($qstr, 1, strlen($qstr)-2); //remove outer quotes
+ '\'' => '\'');
+
+ private static function parse_single_quoted_string($qstr)
+ {
+ $escaped_string = substr($qstr, 1, strlen($qstr) - 2); //remove outer quotes
- $ss = preg_split('/(\\\\.)/', $escaped_string, -1, PREG_SPLIT_DELIM_CAPTURE);
+ $ss = preg_split('/(\\\\.)/', $escaped_string, - 1, PREG_SPLIT_DELIM_CAPTURE);
$str = "";
foreach ($ss as $s) {
@@ -131,24 +139,27 @@ class Smarty_Internal_Configfileparser#line 79 "smarty_internal_configfileparser
if (isset(self::$escapes_single[$s[1]])) {
$s = self::$escapes_single[$s[1]];
}
- }
+ }
- $str .= $s;
+ $str .= $s;
}
return $str;
}
- private static function parse_double_quoted_string($qstr) {
- $inner_str = substr($qstr, 1, strlen($qstr)-2);
+ private static function parse_double_quoted_string($qstr)
+ {
+ $inner_str = substr($qstr, 1, strlen($qstr) - 2);
return stripcslashes($inner_str);
}
- private static function parse_tripple_double_quoted_string($qstr) {
+ private static function parse_tripple_double_quoted_string($qstr)
+ {
return stripcslashes($qstr);
}
- private function set_var(Array $var, Array &$target_array) {
+ private function set_var(Array $var, Array &$target_array)
+ {
$key = $var["key"];
$value = $var["value"];
@@ -160,16 +171,18 @@ class Smarty_Internal_Configfileparser#line 79 "smarty_internal_configfileparser
}
}
- private function add_global_vars(Array $vars) {
+ private function add_global_vars(Array $vars)
+ {
if (!isset($this->compiler->config_data['vars'])) {
- $this->compiler->config_data['vars'] = Array();
+ $this->compiler->config_data['vars'] = Array();
}
foreach ($vars as $var) {
$this->set_var($var, $this->compiler->config_data);
}
}
- private function add_section_vars($section_name, Array $vars) {
+ private function add_section_vars($section_name, Array $vars)
+ {
if (!isset($this->compiler->config_data['sections'][$section_name]['vars'])) {
$this->compiler->config_data['sections'][$section_name]['vars'] = Array();
}
@@ -177,99 +190,152 @@ class Smarty_Internal_Configfileparser#line 79 "smarty_internal_configfileparser
$this->set_var($var, $this->compiler->config_data['sections'][$section_name]);
}
}
-#line 173 "smarty_internal_configfileparser.php"
-
- const TPC_OPENB = 1;
- const TPC_SECTION = 2;
- const TPC_CLOSEB = 3;
- const TPC_DOT = 4;
- const TPC_ID = 5;
- const TPC_EQUAL = 6;
- const TPC_FLOAT = 7;
- const TPC_INT = 8;
- const TPC_BOOL = 9;
- const TPC_SINGLE_QUOTED_STRING = 10;
- const TPC_DOUBLE_QUOTED_STRING = 11;
- const TPC_TRIPPLE_QUOTES = 12;
- const TPC_TRIPPLE_TEXT = 13;
- const TPC_TRIPPLE_QUOTES_END = 14;
- const TPC_NAKED_STRING = 15;
- const TPC_OTHER = 16;
- const TPC_NEWLINE = 17;
- const TPC_COMMENTSTART = 18;
+
+ #line 174 "smarty_internal_configfileparser.php"
+
+ const TPC_OPENB = 1;
+ const TPC_SECTION = 2;
+ const TPC_CLOSEB = 3;
+ const TPC_DOT = 4;
+ const TPC_ID = 5;
+ const TPC_EQUAL = 6;
+ const TPC_FLOAT = 7;
+ const TPC_INT = 8;
+ const TPC_BOOL = 9;
+ const TPC_SINGLE_QUOTED_STRING = 10;
+ const TPC_DOUBLE_QUOTED_STRING = 11;
+ const TPC_TRIPPLE_QUOTES = 12;
+ const TPC_TRIPPLE_TEXT = 13;
+ const TPC_TRIPPLE_QUOTES_END = 14;
+ const TPC_NAKED_STRING = 15;
+ const TPC_OTHER = 16;
+ const TPC_NEWLINE = 17;
+ const TPC_COMMENTSTART = 18;
const YY_NO_ACTION = 60;
const YY_ACCEPT_ACTION = 59;
const YY_ERROR_ACTION = 58;
const YY_SZ_ACTTAB = 38;
-static public $yy_action = array(
- /* 0 */ 29, 30, 34, 33, 24, 13, 19, 25, 35, 21,
- /* 10 */ 59, 8, 3, 1, 20, 12, 14, 31, 20, 12,
- /* 20 */ 15, 17, 23, 18, 27, 26, 4, 5, 6, 32,
- /* 30 */ 2, 11, 28, 22, 16, 9, 7, 10,
+ static public $yy_action = array(
+ /* 0 */
+ 29, 30, 34, 33, 24, 13, 19, 25, 35, 21,
+ /* 10 */
+ 59, 8, 3, 1, 20, 12, 14, 31, 20, 12,
+ /* 20 */
+ 15, 17, 23, 18, 27, 26, 4, 5, 6, 32,
+ /* 30 */
+ 2, 11, 28, 22, 16, 9, 7, 10,
);
static public $yy_lookahead = array(
- /* 0 */ 7, 8, 9, 10, 11, 12, 5, 27, 15, 16,
- /* 10 */ 20, 21, 23, 23, 17, 18, 13, 14, 17, 18,
- /* 20 */ 15, 2, 17, 4, 25, 26, 6, 3, 3, 14,
- /* 30 */ 23, 1, 24, 17, 2, 25, 22, 25,
-);
- const YY_SHIFT_USE_DFLT = -8;
+ /* 0 */
+ 7, 8, 9, 10, 11, 12, 5, 27, 15, 16,
+ /* 10 */
+ 20, 21, 23, 23, 17, 18, 13, 14, 17, 18,
+ /* 20 */
+ 15, 2, 17, 4, 25, 26, 6, 3, 3, 14,
+ /* 30 */
+ 23, 1, 24, 17, 2, 25, 22, 25,
+ );
+ const YY_SHIFT_USE_DFLT = - 8;
const YY_SHIFT_MAX = 19;
static public $yy_shift_ofst = array(
- /* 0 */ -8, 1, 1, 1, -7, -3, -3, 30, -8, -8,
- /* 10 */ -8, 19, 5, 3, 15, 16, 24, 25, 32, 20,
-);
- const YY_REDUCE_USE_DFLT = -21;
+ /* 0 */
+ - 8, 1, 1, 1, - 7, - 3, - 3, 30, - 8, - 8,
+ /* 10 */
+ - 8, 19, 5, 3, 15, 16, 24, 25, 32, 20,
+ );
+ const YY_REDUCE_USE_DFLT = - 21;
const YY_REDUCE_MAX = 10;
static public $yy_reduce_ofst = array(
- /* 0 */ -10, -1, -1, -1, -20, 10, 12, 8, 14, 7,
- /* 10 */ -11,
-);
+ /* 0 */
+ - 10, - 1, - 1, - 1, - 20, 10, 12, 8, 14, 7,
+ /* 10 */
+ - 11,
+ );
static public $yyExpectedTokens = array(
- /* 0 */ array(),
- /* 1 */ array(5, 17, 18, ),
- /* 2 */ array(5, 17, 18, ),
- /* 3 */ array(5, 17, 18, ),
- /* 4 */ array(7, 8, 9, 10, 11, 12, 15, 16, ),
- /* 5 */ array(17, 18, ),
- /* 6 */ array(17, 18, ),
- /* 7 */ array(1, ),
- /* 8 */ array(),
- /* 9 */ array(),
- /* 10 */ array(),
- /* 11 */ array(2, 4, ),
- /* 12 */ array(15, 17, ),
- /* 13 */ array(13, 14, ),
- /* 14 */ array(14, ),
- /* 15 */ array(17, ),
- /* 16 */ array(3, ),
- /* 17 */ array(3, ),
- /* 18 */ array(2, ),
- /* 19 */ array(6, ),
- /* 20 */ array(),
- /* 21 */ array(),
- /* 22 */ array(),
- /* 23 */ array(),
- /* 24 */ array(),
- /* 25 */ array(),
- /* 26 */ array(),
- /* 27 */ array(),
- /* 28 */ array(),
- /* 29 */ array(),
- /* 30 */ array(),
- /* 31 */ array(),
- /* 32 */ array(),
- /* 33 */ array(),
- /* 34 */ array(),
- /* 35 */ array(),
-);
+ /* 0 */
+ array(),
+ /* 1 */
+ array(5, 17, 18,),
+ /* 2 */
+ array(5, 17, 18,),
+ /* 3 */
+ array(5, 17, 18,),
+ /* 4 */
+ array(7, 8, 9, 10, 11, 12, 15, 16,),
+ /* 5 */
+ array(17, 18,),
+ /* 6 */
+ array(17, 18,),
+ /* 7 */
+ array(1,),
+ /* 8 */
+ array(),
+ /* 9 */
+ array(),
+ /* 10 */
+ array(),
+ /* 11 */
+ array(2, 4,),
+ /* 12 */
+ array(15, 17,),
+ /* 13 */
+ array(13, 14,),
+ /* 14 */
+ array(14,),
+ /* 15 */
+ array(17,),
+ /* 16 */
+ array(3,),
+ /* 17 */
+ array(3,),
+ /* 18 */
+ array(2,),
+ /* 19 */
+ array(6,),
+ /* 20 */
+ array(),
+ /* 21 */
+ array(),
+ /* 22 */
+ array(),
+ /* 23 */
+ array(),
+ /* 24 */
+ array(),
+ /* 25 */
+ array(),
+ /* 26 */
+ array(),
+ /* 27 */
+ array(),
+ /* 28 */
+ array(),
+ /* 29 */
+ array(),
+ /* 30 */
+ array(),
+ /* 31 */
+ array(),
+ /* 32 */
+ array(),
+ /* 33 */
+ array(),
+ /* 34 */
+ array(),
+ /* 35 */
+ array(),
+ );
static public $yy_default = array(
- /* 0 */ 44, 37, 41, 40, 58, 58, 58, 36, 39, 44,
- /* 10 */ 44, 58, 58, 58, 58, 58, 58, 58, 58, 58,
- /* 20 */ 55, 54, 57, 56, 50, 45, 43, 42, 38, 46,
- /* 30 */ 47, 52, 51, 49, 48, 53,
-);
+ /* 0 */
+ 44, 37, 41, 40, 58, 58, 58, 36, 39, 44,
+ /* 10 */
+ 44, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ /* 20 */
+ 55, 54, 57, 56, 50, 45, 43, 42, 38, 46,
+ /* 30 */
+ 47, 52, 51, 49, 48, 53,
+ );
const YYNOCODE = 29;
const YYSTACKDEPTH = 100;
const YYNSTATE = 36;
@@ -277,67 +343,89 @@ static public $yy_action = array(
const YYERRORSYMBOL = 19;
const YYERRSYMDT = 'yy0';
const YYFALLBACK = 0;
- static public $yyFallback = array(
- );
- static function Trace($TraceFILE, $zTracePrompt)
+ public static $yyFallback = array();
+
+ public function Trace($TraceFILE, $zTracePrompt)
{
if (!$TraceFILE) {
$zTracePrompt = 0;
} elseif (!$zTracePrompt) {
$TraceFILE = 0;
}
- self::$yyTraceFILE = $TraceFILE;
- self::$yyTracePrompt = $zTracePrompt;
+ $this->yyTraceFILE = $TraceFILE;
+ $this->yyTracePrompt = $zTracePrompt;
}
- static function PrintTrace()
+ public function PrintTrace()
{
- self::$yyTraceFILE = fopen('php://output', 'w');
- self::$yyTracePrompt = '<br>';
+ $this->yyTraceFILE = fopen('php://output', 'w');
+ $this->yyTracePrompt = '<br>';
}
- static public $yyTraceFILE;
- static public $yyTracePrompt;
- public $yyidx; /* Index of top element in stack */
- public $yyerrcnt; /* Shifts left before out of the error */
- public $yystack = array(); /* The parser's stack */
+ public $yyTraceFILE;
+ public $yyTracePrompt;
+ public $yyidx; /* Index of top element in stack */
+ public $yyerrcnt; /* Shifts left before out of the error */
+ public $yystack = array(); /* The parser's stack */
public $yyTokenName = array(
- '$', 'OPENB', 'SECTION', 'CLOSEB',
- 'DOT', 'ID', 'EQUAL', 'FLOAT',
- 'INT', 'BOOL', 'SINGLE_QUOTED_STRING', 'DOUBLE_QUOTED_STRING',
- 'TRIPPLE_QUOTES', 'TRIPPLE_TEXT', 'TRIPPLE_QUOTES_END', 'NAKED_STRING',
- 'OTHER', 'NEWLINE', 'COMMENTSTART', 'error',
- 'start', 'global_vars', 'sections', 'var_list',
- 'section', 'newline', 'var', 'value',
+ '$', 'OPENB', 'SECTION', 'CLOSEB',
+ 'DOT', 'ID', 'EQUAL', 'FLOAT',
+ 'INT', 'BOOL', 'SINGLE_QUOTED_STRING', 'DOUBLE_QUOTED_STRING',
+ 'TRIPPLE_QUOTES', 'TRIPPLE_TEXT', 'TRIPPLE_QUOTES_END', 'NAKED_STRING',
+ 'OTHER', 'NEWLINE', 'COMMENTSTART', 'error',
+ 'start', 'global_vars', 'sections', 'var_list',
+ 'section', 'newline', 'var', 'value',
);
- static public $yyRuleName = array(
- /* 0 */ "start ::= global_vars sections",
- /* 1 */ "global_vars ::= var_list",
- /* 2 */ "sections ::= sections section",
- /* 3 */ "sections ::=",
- /* 4 */ "section ::= OPENB SECTION CLOSEB newline var_list",
- /* 5 */ "section ::= OPENB DOT SECTION CLOSEB newline var_list",
- /* 6 */ "var_list ::= var_list newline",
- /* 7 */ "var_list ::= var_list var",
- /* 8 */ "var_list ::=",
- /* 9 */ "var ::= ID EQUAL value",
- /* 10 */ "value ::= FLOAT",
- /* 11 */ "value ::= INT",
- /* 12 */ "value ::= BOOL",
- /* 13 */ "value ::= SINGLE_QUOTED_STRING",
- /* 14 */ "value ::= DOUBLE_QUOTED_STRING",
- /* 15 */ "value ::= TRIPPLE_QUOTES TRIPPLE_TEXT TRIPPLE_QUOTES_END",
- /* 16 */ "value ::= TRIPPLE_QUOTES TRIPPLE_QUOTES_END",
- /* 17 */ "value ::= NAKED_STRING",
- /* 18 */ "value ::= OTHER",
- /* 19 */ "newline ::= NEWLINE",
- /* 20 */ "newline ::= COMMENTSTART NEWLINE",
- /* 21 */ "newline ::= COMMENTSTART NAKED_STRING NEWLINE",
+ public static $yyRuleName = array(
+ /* 0 */
+ "start ::= global_vars sections",
+ /* 1 */
+ "global_vars ::= var_list",
+ /* 2 */
+ "sections ::= sections section",
+ /* 3 */
+ "sections ::=",
+ /* 4 */
+ "section ::= OPENB SECTION CLOSEB newline var_list",
+ /* 5 */
+ "section ::= OPENB DOT SECTION CLOSEB newline var_list",
+ /* 6 */
+ "var_list ::= var_list newline",
+ /* 7 */
+ "var_list ::= var_list var",
+ /* 8 */
+ "var_list ::=",
+ /* 9 */
+ "var ::= ID EQUAL value",
+ /* 10 */
+ "value ::= FLOAT",
+ /* 11 */
+ "value ::= INT",
+ /* 12 */
+ "value ::= BOOL",
+ /* 13 */
+ "value ::= SINGLE_QUOTED_STRING",
+ /* 14 */
+ "value ::= DOUBLE_QUOTED_STRING",
+ /* 15 */
+ "value ::= TRIPPLE_QUOTES TRIPPLE_TEXT TRIPPLE_QUOTES_END",
+ /* 16 */
+ "value ::= TRIPPLE_QUOTES TRIPPLE_QUOTES_END",
+ /* 17 */
+ "value ::= NAKED_STRING",
+ /* 18 */
+ "value ::= OTHER",
+ /* 19 */
+ "newline ::= NEWLINE",
+ /* 20 */
+ "newline ::= COMMENTSTART NEWLINE",
+ /* 21 */
+ "newline ::= COMMENTSTART NAKED_STRING NEWLINE",
);
- function tokenName($tokenType)
+ public function tokenName($tokenType)
{
if ($tokenType === 0) {
return 'End of Input';
@@ -349,41 +437,43 @@ static public $yy_action = array(
}
}
- static function yy_destructor($yymajor, $yypminor)
+ public static function yy_destructor($yymajor, $yypminor)
{
switch ($yymajor) {
- default: break; /* If no destructor action specified: do nothing */
+ default:
+ break; /* If no destructor action specified: do nothing */
}
}
- function yy_pop_parser_stack()
+ public function yy_pop_parser_stack()
{
if (!count($this->yystack)) {
return;
}
$yytos = array_pop($this->yystack);
- if (self::$yyTraceFILE && $this->yyidx >= 0) {
- fwrite(self::$yyTraceFILE,
- self::$yyTracePrompt . 'Popping ' . $this->yyTokenName[$yytos->major] .
- "\n");
+ if ($this->yyTraceFILE && $this->yyidx >= 0) {
+ fwrite($this->yyTraceFILE,
+ $this->yyTracePrompt . 'Popping ' . $this->yyTokenName[$yytos->major] .
+ "\n");
}
$yymajor = $yytos->major;
self::yy_destructor($yymajor, $yytos->minor);
- $this->yyidx--;
+ $this->yyidx --;
+
return $yymajor;
}
- function __destruct()
+ public function __destruct()
{
while ($this->yystack !== Array()) {
$this->yy_pop_parser_stack();
}
- if (is_resource(self::$yyTraceFILE)) {
- fclose(self::$yyTraceFILE);
+ if (is_resource($this->yyTraceFILE)) {
+ fclose($this->yyTraceFILE);
}
}
- function yy_get_expected_tokens($token)
+ public function yy_get_expected_tokens($token)
{
$state = $this->yystack[$this->yyidx]->stateno;
$expected = self::$yyExpectedTokens[$state];
@@ -398,7 +488,7 @@ static public $yy_action = array(
// reduce action
$done = 0;
do {
- if ($done++ == 100) {
+ if ($done ++ == 100) {
$this->yyidx = $yyidx;
$this->yystack = $stack;
// too much recursion prevents proper detection
@@ -411,17 +501,18 @@ static public $yy_action = array(
$this->yystack[$this->yyidx]->stateno,
self::$yyRuleInfo[$yyruleno]['lhs']);
if (isset(self::$yyExpectedTokens[$nextstate])) {
- $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]);
- if (in_array($token,
- self::$yyExpectedTokens[$nextstate], true)) {
+ $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]);
+ if (in_array($token,
+ self::$yyExpectedTokens[$nextstate], true)) {
$this->yyidx = $yyidx;
$this->yystack = $stack;
+
return array_unique($expected);
}
}
if ($nextstate < self::YYNSTATE) {
// we need to shift a non-terminal
- $this->yyidx++;
+ $this->yyidx ++;
$x = new TPC_yyStackEntry;
$x->stateno = $nextstate;
$x->major = self::$yyRuleInfo[$yyruleno]['lhs'];
@@ -446,12 +537,13 @@ static public $yy_action = array(
}
break;
} while (true);
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+
return array_unique($expected);
}
- function yy_is_expected_token($token)
+ public function yy_is_expected_token($token)
{
if ($token === 0) {
return true; // 0 is not part of this
@@ -468,7 +560,7 @@ static public $yy_action = array(
// reduce action
$done = 0;
do {
- if ($done++ == 100) {
+ if ($done ++ == 100) {
$this->yyidx = $yyidx;
$this->yystack = $stack;
// too much recursion prevents proper detection
@@ -481,14 +573,16 @@ static public $yy_action = array(
$this->yystack[$this->yyidx]->stateno,
self::$yyRuleInfo[$yyruleno]['lhs']);
if (isset(self::$yyExpectedTokens[$nextstate]) &&
- in_array($token, self::$yyExpectedTokens[$nextstate], true)) {
+ in_array($token, self::$yyExpectedTokens[$nextstate], true)
+ ) {
$this->yyidx = $yyidx;
$this->yystack = $stack;
+
return true;
}
if ($nextstate < self::YYNSTATE) {
// we need to shift a non-terminal
- $this->yyidx++;
+ $this->yyidx ++;
$x = new TPC_yyStackEntry;
$x->stateno = $nextstate;
$x->major = self::$yyRuleInfo[$yyruleno]['lhs'];
@@ -519,10 +613,11 @@ static public $yy_action = array(
} while (true);
$this->yyidx = $yyidx;
$this->yystack = $stack;
+
return true;
}
- function yy_find_shift_action($iLookAhead)
+ public function yy_find_shift_action($iLookAhead)
{
$stateno = $this->yystack[$this->yyidx]->stateno;
@@ -540,23 +635,27 @@ static public $yy_action = array(
}
$i += $iLookAhead;
if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
- self::$yy_lookahead[$i] != $iLookAhead) {
+ self::$yy_lookahead[$i] != $iLookAhead
+ ) {
if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback)
- && ($iFallback = self::$yyFallback[$iLookAhead]) != 0) {
- if (self::$yyTraceFILE) {
- fwrite(self::$yyTraceFILE, self::$yyTracePrompt . "FALLBACK " .
+ && ($iFallback = self::$yyFallback[$iLookAhead]) != 0
+ ) {
+ if ($this->yyTraceFILE) {
+ fwrite($this->yyTraceFILE, $this->yyTracePrompt . "FALLBACK " .
$this->yyTokenName[$iLookAhead] . " => " .
$this->yyTokenName[$iFallback] . "\n");
}
+
return $this->yy_find_shift_action($iFallback);
}
+
return self::$yy_default[$stateno];
} else {
return self::$yy_action[$i];
}
}
- function yy_find_reduce_action($stateno, $iLookAhead)
+ public function yy_find_reduce_action($stateno, $iLookAhead)
{
/* $stateno = $this->yystack[$this->yyidx]->stateno; */
@@ -572,29 +671,31 @@ static public $yy_action = array(
}
$i += $iLookAhead;
if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
- self::$yy_lookahead[$i] != $iLookAhead) {
+ self::$yy_lookahead[$i] != $iLookAhead
+ ) {
return self::$yy_default[$stateno];
} else {
return self::$yy_action[$i];
}
}
- function yy_shift($yyNewState, $yyMajor, $yypMinor)
+ public function yy_shift($yyNewState, $yyMajor, $yypMinor)
{
- $this->yyidx++;
+ $this->yyidx ++;
if ($this->yyidx >= self::YYSTACKDEPTH) {
- $this->yyidx--;
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sStack Overflow!\n", self::$yyTracePrompt);
+ $this->yyidx --;
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt);
}
while ($this->yyidx >= 0) {
$this->yy_pop_parser_stack();
}
-#line 125 "smarty_internal_configfileparser.y"
+ #line 125 "smarty_internal_configfileparser.y"
+
+ $this->internalError = true;
+ $this->compiler->trigger_config_file_error("Stack overflow in configfile parser");
+ #line 601 "smarty_internal_configfileparser.php"
- $this->internalError = true;
- $this->compiler->trigger_config_file_error("Stack overflow in configfile parser");
-#line 593 "smarty_internal_configfileparser.php"
return;
}
$yytos = new TPC_yyStackEntry;
@@ -602,57 +703,57 @@ static public $yy_action = array(
$yytos->major = $yyMajor;
$yytos->minor = $yypMinor;
array_push($this->yystack, $yytos);
- if (self::$yyTraceFILE && $this->yyidx > 0) {
- fprintf(self::$yyTraceFILE, "%sShift %d\n", self::$yyTracePrompt,
- $yyNewState);
- fprintf(self::$yyTraceFILE, "%sStack:", self::$yyTracePrompt);
- for($i = 1; $i <= $this->yyidx; $i++) {
- fprintf(self::$yyTraceFILE, " %s",
- $this->yyTokenName[$this->yystack[$i]->major]);
+ if ($this->yyTraceFILE && $this->yyidx > 0) {
+ fprintf($this->yyTraceFILE, "%sShift %d\n", $this->yyTracePrompt,
+ $yyNewState);
+ fprintf($this->yyTraceFILE, "%sStack:", $this->yyTracePrompt);
+ for ($i = 1; $i <= $this->yyidx; $i ++) {
+ fprintf($this->yyTraceFILE, " %s",
+ $this->yyTokenName[$this->yystack[$i]->major]);
}
- fwrite(self::$yyTraceFILE,"\n");
- }
- }
-
- static public $yyRuleInfo = array(
- array( 'lhs' => 20, 'rhs' => 2 ),
- array( 'lhs' => 21, 'rhs' => 1 ),
- array( 'lhs' => 22, 'rhs' => 2 ),
- array( 'lhs' => 22, 'rhs' => 0 ),
- array( 'lhs' => 24, 'rhs' => 5 ),
- array( 'lhs' => 24, 'rhs' => 6 ),
- array( 'lhs' => 23, 'rhs' => 2 ),
- array( 'lhs' => 23, 'rhs' => 2 ),
- array( 'lhs' => 23, 'rhs' => 0 ),
- array( 'lhs' => 26, 'rhs' => 3 ),
- array( 'lhs' => 27, 'rhs' => 1 ),
- array( 'lhs' => 27, 'rhs' => 1 ),
- array( 'lhs' => 27, 'rhs' => 1 ),
- array( 'lhs' => 27, 'rhs' => 1 ),
- array( 'lhs' => 27, 'rhs' => 1 ),
- array( 'lhs' => 27, 'rhs' => 3 ),
- array( 'lhs' => 27, 'rhs' => 2 ),
- array( 'lhs' => 27, 'rhs' => 1 ),
- array( 'lhs' => 27, 'rhs' => 1 ),
- array( 'lhs' => 25, 'rhs' => 1 ),
- array( 'lhs' => 25, 'rhs' => 2 ),
- array( 'lhs' => 25, 'rhs' => 3 ),
+ fwrite($this->yyTraceFILE, "\n");
+ }
+ }
+
+ public static $yyRuleInfo = array(
+ array('lhs' => 20, 'rhs' => 2),
+ array('lhs' => 21, 'rhs' => 1),
+ array('lhs' => 22, 'rhs' => 2),
+ array('lhs' => 22, 'rhs' => 0),
+ array('lhs' => 24, 'rhs' => 5),
+ array('lhs' => 24, 'rhs' => 6),
+ array('lhs' => 23, 'rhs' => 2),
+ array('lhs' => 23, 'rhs' => 2),
+ array('lhs' => 23, 'rhs' => 0),
+ array('lhs' => 26, 'rhs' => 3),
+ array('lhs' => 27, 'rhs' => 1),
+ array('lhs' => 27, 'rhs' => 1),
+ array('lhs' => 27, 'rhs' => 1),
+ array('lhs' => 27, 'rhs' => 1),
+ array('lhs' => 27, 'rhs' => 1),
+ array('lhs' => 27, 'rhs' => 3),
+ array('lhs' => 27, 'rhs' => 2),
+ array('lhs' => 27, 'rhs' => 1),
+ array('lhs' => 27, 'rhs' => 1),
+ array('lhs' => 25, 'rhs' => 1),
+ array('lhs' => 25, 'rhs' => 2),
+ array('lhs' => 25, 'rhs' => 3),
);
- static public $yyReduceMap = array(
- 0 => 0,
- 2 => 0,
- 3 => 0,
+ public static $yyReduceMap = array(
+ 0 => 0,
+ 2 => 0,
+ 3 => 0,
19 => 0,
20 => 0,
21 => 0,
- 1 => 1,
- 4 => 4,
- 5 => 5,
- 6 => 6,
- 7 => 7,
- 8 => 8,
- 9 => 9,
+ 1 => 1,
+ 4 => 4,
+ 5 => 5,
+ 6 => 6,
+ 7 => 7,
+ 8 => 8,
+ 9 => 9,
10 => 10,
11 => 11,
12 => 12,
@@ -663,101 +764,121 @@ static public $yy_action = array(
17 => 17,
18 => 17,
);
-#line 131 "smarty_internal_configfileparser.y"
- function yy_r0(){
- $this->_retvalue = null;
- }
-#line 666 "smarty_internal_configfileparser.php"
-#line 136 "smarty_internal_configfileparser.y"
- function yy_r1(){
- $this->add_global_vars($this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = null;
- }
-#line 671 "smarty_internal_configfileparser.php"
-#line 149 "smarty_internal_configfileparser.y"
- function yy_r4(){
- $this->add_section_vars($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + 0]->minor);
- $this->_retvalue = null;
- }
-#line 677 "smarty_internal_configfileparser.php"
-#line 154 "smarty_internal_configfileparser.y"
- function yy_r5(){
- if ($this->smarty->config_read_hidden) {
- $this->add_section_vars($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + 0]->minor);
- }
- $this->_retvalue = null;
- }
-#line 685 "smarty_internal_configfileparser.php"
-#line 162 "smarty_internal_configfileparser.y"
- function yy_r6(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
- }
-#line 690 "smarty_internal_configfileparser.php"
-#line 166 "smarty_internal_configfileparser.y"
- function yy_r7(){
- $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor, Array($this->yystack[$this->yyidx + 0]->minor));
- }
-#line 695 "smarty_internal_configfileparser.php"
-#line 170 "smarty_internal_configfileparser.y"
- function yy_r8(){
- $this->_retvalue = Array();
- }
-#line 700 "smarty_internal_configfileparser.php"
-#line 176 "smarty_internal_configfileparser.y"
- function yy_r9(){
- $this->_retvalue = Array("key" => $this->yystack[$this->yyidx + -2]->minor, "value" => $this->yystack[$this->yyidx + 0]->minor);
- }
-#line 705 "smarty_internal_configfileparser.php"
-#line 181 "smarty_internal_configfileparser.y"
- function yy_r10(){
- $this->_retvalue = (float) $this->yystack[$this->yyidx + 0]->minor;
- }
-#line 710 "smarty_internal_configfileparser.php"
-#line 185 "smarty_internal_configfileparser.y"
- function yy_r11(){
- $this->_retvalue = (int) $this->yystack[$this->yyidx + 0]->minor;
- }
-#line 715 "smarty_internal_configfileparser.php"
-#line 189 "smarty_internal_configfileparser.y"
- function yy_r12(){
- $this->_retvalue = $this->parse_bool($this->yystack[$this->yyidx + 0]->minor);
- }
-#line 720 "smarty_internal_configfileparser.php"
-#line 193 "smarty_internal_configfileparser.y"
- function yy_r13(){
- $this->_retvalue = self::parse_single_quoted_string($this->yystack[$this->yyidx + 0]->minor);
- }
-#line 725 "smarty_internal_configfileparser.php"
-#line 197 "smarty_internal_configfileparser.y"
- function yy_r14(){
- $this->_retvalue = self::parse_double_quoted_string($this->yystack[$this->yyidx + 0]->minor);
- }
-#line 730 "smarty_internal_configfileparser.php"
-#line 201 "smarty_internal_configfileparser.y"
- function yy_r15(){
- $this->_retvalue = self::parse_tripple_double_quoted_string($this->yystack[$this->yyidx + -1]->minor);
- }
-#line 735 "smarty_internal_configfileparser.php"
-#line 205 "smarty_internal_configfileparser.y"
- function yy_r16(){
- $this->_retvalue = '';
- }
-#line 740 "smarty_internal_configfileparser.php"
-#line 209 "smarty_internal_configfileparser.y"
- function yy_r17(){
- $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
- }
-#line 745 "smarty_internal_configfileparser.php"
+
+ #line 131 "smarty_internal_configfileparser.y"
+ function yy_r0()
+ {
+ $this->_retvalue = null;
+ }
+ #line 675 "smarty_internal_configfileparser.php"
+ #line 136 "smarty_internal_configfileparser.y"
+ function yy_r1()
+ {
+ $this->add_global_vars($this->yystack[$this->yyidx + 0]->minor);
+ $this->_retvalue = null;
+ }
+ #line 680 "smarty_internal_configfileparser.php"
+ #line 149 "smarty_internal_configfileparser.y"
+ function yy_r4()
+ {
+ $this->add_section_vars($this->yystack[$this->yyidx + - 3]->minor, $this->yystack[$this->yyidx + 0]->minor);
+ $this->_retvalue = null;
+ }
+ #line 686 "smarty_internal_configfileparser.php"
+ #line 154 "smarty_internal_configfileparser.y"
+ function yy_r5()
+ {
+ if ($this->smarty->config_read_hidden) {
+ $this->add_section_vars($this->yystack[$this->yyidx + - 3]->minor, $this->yystack[$this->yyidx + 0]->minor);
+ }
+ $this->_retvalue = null;
+ }
+ #line 694 "smarty_internal_configfileparser.php"
+ #line 162 "smarty_internal_configfileparser.y"
+ function yy_r6()
+ {
+ $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor;
+ }
+ #line 699 "smarty_internal_configfileparser.php"
+ #line 166 "smarty_internal_configfileparser.y"
+ function yy_r7()
+ {
+ $this->_retvalue = array_merge($this->yystack[$this->yyidx + - 1]->minor, Array($this->yystack[$this->yyidx + 0]->minor));
+ }
+ #line 704 "smarty_internal_configfileparser.php"
+ #line 170 "smarty_internal_configfileparser.y"
+ function yy_r8()
+ {
+ $this->_retvalue = Array();
+ }
+ #line 709 "smarty_internal_configfileparser.php"
+ #line 176 "smarty_internal_configfileparser.y"
+ function yy_r9()
+ {
+ $this->_retvalue = Array("key" => $this->yystack[$this->yyidx + - 2]->minor, "value" => $this->yystack[$this->yyidx + 0]->minor);
+ }
+ #line 714 "smarty_internal_configfileparser.php"
+ #line 181 "smarty_internal_configfileparser.y"
+ function yy_r10()
+ {
+ $this->_retvalue = (float) $this->yystack[$this->yyidx + 0]->minor;
+ }
+ #line 719 "smarty_internal_configfileparser.php"
+ #line 185 "smarty_internal_configfileparser.y"
+ function yy_r11()
+ {
+ $this->_retvalue = (int) $this->yystack[$this->yyidx + 0]->minor;
+ }
+ #line 724 "smarty_internal_configfileparser.php"
+ #line 189 "smarty_internal_configfileparser.y"
+ function yy_r12()
+ {
+ $this->_retvalue = $this->parse_bool($this->yystack[$this->yyidx + 0]->minor);
+ }
+ #line 729 "smarty_internal_configfileparser.php"
+ #line 193 "smarty_internal_configfileparser.y"
+ function yy_r13()
+ {
+ $this->_retvalue = self::parse_single_quoted_string($this->yystack[$this->yyidx + 0]->minor);
+ }
+ #line 734 "smarty_internal_configfileparser.php"
+ #line 197 "smarty_internal_configfileparser.y"
+ function yy_r14()
+ {
+ $this->_retvalue = self::parse_double_quoted_string($this->yystack[$this->yyidx + 0]->minor);
+ }
+ #line 739 "smarty_internal_configfileparser.php"
+ #line 201 "smarty_internal_configfileparser.y"
+ function yy_r15()
+ {
+ $this->_retvalue = self::parse_tripple_double_quoted_string($this->yystack[$this->yyidx + - 1]->minor);
+ }
+ #line 744 "smarty_internal_configfileparser.php"
+ #line 205 "smarty_internal_configfileparser.y"
+ function yy_r16()
+ {
+ $this->_retvalue = '';
+ }
+ #line 749 "smarty_internal_configfileparser.php"
+ #line 209 "smarty_internal_configfileparser.y"
+ function yy_r17()
+ {
+ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
+ }
+
+ #line 754 "smarty_internal_configfileparser.php"
private $_retvalue;
- function yy_reduce($yyruleno)
+ public function yy_reduce($yyruleno)
{
$yymsp = $this->yystack[$this->yyidx];
- if (self::$yyTraceFILE && $yyruleno >= 0
- && $yyruleno < count(self::$yyRuleName)) {
- fprintf(self::$yyTraceFILE, "%sReduce (%d) [%s].\n",
- self::$yyTracePrompt, $yyruleno,
- self::$yyRuleName[$yyruleno]);
+ if ($this->yyTraceFILE && $yyruleno >= 0
+ && $yyruleno < count(self::$yyRuleName)
+ ) {
+ fprintf($this->yyTraceFILE, "%sReduce (%d) [%s].\n",
+ $this->yyTracePrompt, $yyruleno,
+ self::$yyRuleName[$yyruleno]);
}
$this->_retvalue = $yy_lefthand_side = null;
@@ -770,14 +891,14 @@ static public $yy_action = array(
$yygoto = self::$yyRuleInfo[$yyruleno]['lhs'];
$yysize = self::$yyRuleInfo[$yyruleno]['rhs'];
$this->yyidx -= $yysize;
- for($i = $yysize; $i; $i--) {
+ for ($i = $yysize; $i; $i --) {
// pop all of the right-hand side parameters
array_pop($this->yystack);
}
$yyact = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, $yygoto);
if ($yyact < self::YYNSTATE) {
- if (!self::$yyTraceFILE && $yysize) {
- $this->yyidx++;
+ if (!$this->yyTraceFILE && $yysize) {
+ $this->yyidx ++;
$x = new TPC_yyStackEntry;
$x->stateno = $yyact;
$x->major = $yygoto;
@@ -791,73 +912,74 @@ static public $yy_action = array(
}
}
- function yy_parse_failed()
+ public function yy_parse_failed()
{
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sFail!\n", self::$yyTracePrompt);
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt);
}
while ($this->yyidx >= 0) {
$this->yy_pop_parser_stack();
}
}
- function yy_syntax_error($yymajor, $TOKEN)
+ public function yy_syntax_error($yymajor, $TOKEN)
{
-#line 118 "smarty_internal_configfileparser.y"
+ #line 118 "smarty_internal_configfileparser.y"
- $this->internalError = true;
- $this->yymajor = $yymajor;
- $this->compiler->trigger_config_file_error();
-#line 808 "smarty_internal_configfileparser.php"
+ $this->internalError = true;
+ $this->yymajor = $yymajor;
+ $this->compiler->trigger_config_file_error();
+ #line 816 "smarty_internal_configfileparser.php"
}
- function yy_accept()
+ public function yy_accept()
{
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sAccept!\n", self::$yyTracePrompt);
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt);
}
while ($this->yyidx >= 0) {
$stack = $this->yy_pop_parser_stack();
}
-#line 110 "smarty_internal_configfileparser.y"
+ #line 110 "smarty_internal_configfileparser.y"
- $this->successful = !$this->internalError;
- $this->internalError = false;
- $this->retvalue = $this->_retvalue;
- //echo $this->retvalue."\n\n";
-#line 826 "smarty_internal_configfileparser.php"
+ $this->successful = !$this->internalError;
+ $this->internalError = false;
+ $this->retvalue = $this->_retvalue;
+ //echo $this->retvalue."\n\n";
+ #line 833 "smarty_internal_configfileparser.php"
}
- function doParse($yymajor, $yytokenvalue)
+ public function doParse($yymajor, $yytokenvalue)
{
- $yyerrorhit = 0; /* True if yymajor has invoked an error */
+ $yyerrorhit = 0; /* True if yymajor has invoked an error */
if ($this->yyidx === null || $this->yyidx < 0) {
$this->yyidx = 0;
- $this->yyerrcnt = -1;
+ $this->yyerrcnt = - 1;
$x = new TPC_yyStackEntry;
$x->stateno = 0;
$x->major = 0;
$this->yystack = array();
array_push($this->yystack, $x);
}
- $yyendofinput = ($yymajor==0);
+ $yyendofinput = ($yymajor == 0);
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sInput %s\n",
- self::$yyTracePrompt, $this->yyTokenName[$yymajor]);
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sInput %s\n",
+ $this->yyTracePrompt, $this->yyTokenName[$yymajor]);
}
do {
$yyact = $this->yy_find_shift_action($yymajor);
if ($yymajor < self::YYERRORSYMBOL &&
- !$this->yy_is_expected_token($yymajor)) {
+ !$this->yy_is_expected_token($yymajor)
+ ) {
// force a syntax error
$yyact = self::YY_ERROR_ACTION;
}
if ($yyact < self::YYNSTATE) {
$this->yy_shift($yyact, $yymajor, $yytokenvalue);
- $this->yyerrcnt--;
+ $this->yyerrcnt --;
if ($yyendofinput && $this->yyidx >= 0) {
$yymajor = 0;
} else {
@@ -866,30 +988,30 @@ static public $yy_action = array(
} elseif ($yyact < self::YYNSTATE + self::YYNRULE) {
$this->yy_reduce($yyact - self::YYNSTATE);
} elseif ($yyact == self::YY_ERROR_ACTION) {
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sSyntax Error!\n",
- self::$yyTracePrompt);
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sSyntax Error!\n",
+ $this->yyTracePrompt);
}
if (self::YYERRORSYMBOL) {
if ($this->yyerrcnt < 0) {
$this->yy_syntax_error($yymajor, $yytokenvalue);
}
$yymx = $this->yystack[$this->yyidx]->major;
- if ($yymx == self::YYERRORSYMBOL || $yyerrorhit ){
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sDiscard input token %s\n",
- self::$yyTracePrompt, $this->yyTokenName[$yymajor]);
+ if ($yymx == self::YYERRORSYMBOL || $yyerrorhit) {
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sDiscard input token %s\n",
+ $this->yyTracePrompt, $this->yyTokenName[$yymajor]);
}
$this->yy_destructor($yymajor, $yytokenvalue);
$yymajor = self::YYNOCODE;
} else {
while ($this->yyidx >= 0 &&
- $yymx != self::YYERRORSYMBOL &&
- ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE
- ){
+ $yymx != self::YYERRORSYMBOL &&
+ ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE
+ ) {
$this->yy_pop_parser_stack();
}
- if ($this->yyidx < 0 || $yymajor==0) {
+ if ($this->yyidx < 0 || $yymajor == 0) {
$this->yy_destructor($yymajor, $yytokenvalue);
$this->yy_parse_failed();
$yymajor = self::YYNOCODE;
@@ -918,4 +1040,3 @@ static public $yy_action = array(
} while ($yymajor != self::YYNOCODE && $this->yyidx >= 0);
}
}
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_data.php b/library/Smarty/libs/sysplugins/smarty_internal_data.php
index 5baf3b76d..9e16f10c0 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_data.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_data.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Data
+ * This file contains the basic classes and methods for template and variable creation
*
- * This file contains the basic classes and methodes for template and variable creation
- *
- * @package Smarty
+ * @package Smarty
* @subpackage Template
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
- * Base class with template and variable methodes
+ * Base class with template and variable methods
*
- * @package Smarty
+ * @package Smarty
* @subpackage Template
*/
-class Smarty_Internal_Data {
-
+class Smarty_Internal_Data
+{
/**
* name of class used for templates
*
@@ -45,10 +44,10 @@ class Smarty_Internal_Data {
/**
* assigns a Smarty variable
*
- * @param array|string $tpl_var the template variable name(s)
- * @param mixed $value the value to assign
- * @param boolean $nocache if true any output of this variable will be not cached
- * @param boolean $scope the scope the variable will have (local,parent or root)
+ * @param array|string $tpl_var the template variable name(s)
+ * @param mixed $value the value to assign
+ * @param boolean $nocache if true any output of this variable will be not cached
+ *
* @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
*/
public function assign($tpl_var, $value = null, $nocache = false)
@@ -71,32 +70,40 @@ class Smarty_Internal_Data {
/**
* assigns a global Smarty variable
*
- * @param string $varname the global variable name
- * @param mixed $value the value to assign
- * @param boolean $nocache if true any output of this variable will be not cached
+ * @param string $varname the global variable name
+ * @param mixed $value the value to assign
+ * @param boolean $nocache if true any output of this variable will be not cached
+ *
* @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
*/
public function assignGlobal($varname, $value = null, $nocache = false)
{
if ($varname != '') {
Smarty::$global_tpl_vars[$varname] = new Smarty_variable($value, $nocache);
+ $ptr = $this;
+ while ($ptr instanceof Smarty_Internal_Template) {
+ $ptr->tpl_vars[$varname] = clone Smarty::$global_tpl_vars[$varname];
+ $ptr = $ptr->parent;
+ }
}
return $this;
}
+
/**
* assigns values to template variables by reference
*
- * @param string $tpl_var the template variable name
- * @param mixed $ &$value the referenced value to assign
- * @param boolean $nocache if true any output of this variable will be not cached
+ * @param string $tpl_var the template variable name
+ * @param $value
+ * @param boolean $nocache if true any output of this variable will be not cached
+ *
* @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
*/
public function assignByRef($tpl_var, &$value, $nocache = false)
{
if ($tpl_var != '') {
$this->tpl_vars[$tpl_var] = new Smarty_variable(null, $nocache);
- $this->tpl_vars[$tpl_var]->value = &$value;
+ $this->tpl_vars[$tpl_var]->value = & $value;
}
return $this;
@@ -105,10 +112,11 @@ class Smarty_Internal_Data {
/**
* appends values to template variables
*
- * @param array|string $tpl_var the template variable name(s)
- * @param mixed $value the value to append
- * @param boolean $merge flag if array elements shall be merged
- * @param boolean $nocache if true any output of this variable will be not cached
+ * @param array|string $tpl_var the template variable name(s)
+ * @param mixed $value the value to append
+ * @param boolean $merge flag if array elements shall be merged
+ * @param boolean $nocache if true any output of this variable will be not cached
+ *
* @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
*/
public function append($tpl_var, $value = null, $merge = false, $nocache = false)
@@ -129,7 +137,7 @@ class Smarty_Internal_Data {
settype($this->tpl_vars[$_key]->value, 'array');
}
if ($merge && is_array($_val)) {
- foreach($_val as $_mkey => $_mval) {
+ foreach ($_val as $_mkey => $_mval) {
$this->tpl_vars[$_key]->value[$_mkey] = $_mval;
}
} else {
@@ -151,7 +159,7 @@ class Smarty_Internal_Data {
settype($this->tpl_vars[$tpl_var]->value, 'array');
}
if ($merge && is_array($value)) {
- foreach($value as $_mkey => $_mval) {
+ foreach ($value as $_mkey => $_mval) {
$this->tpl_vars[$tpl_var]->value[$_mkey] = $_mval;
}
} else {
@@ -166,9 +174,10 @@ class Smarty_Internal_Data {
/**
* appends values to template variables by reference
*
- * @param string $tpl_var the template variable name
- * @param mixed &$value the referenced value to append
- * @param boolean $merge flag if array elements shall be merged
+ * @param string $tpl_var the template variable name
+ * @param mixed &$value the referenced value to append
+ * @param boolean $merge flag if array elements shall be merged
+ *
* @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
*/
public function appendByRef($tpl_var, &$value, $merge = false)
@@ -181,11 +190,11 @@ class Smarty_Internal_Data {
settype($this->tpl_vars[$tpl_var]->value, 'array');
}
if ($merge && is_array($value)) {
- foreach($value as $_key => $_val) {
- $this->tpl_vars[$tpl_var]->value[$_key] = &$value[$_key];
+ foreach ($value as $_key => $_val) {
+ $this->tpl_vars[$tpl_var]->value[$_key] = & $value[$_key];
}
} else {
- $this->tpl_vars[$tpl_var]->value[] = &$value;
+ $this->tpl_vars[$tpl_var]->value[] = & $value;
}
}
@@ -195,10 +204,11 @@ class Smarty_Internal_Data {
/**
* Returns a single or all template variables
*
- * @param string $varname variable name or null
- * @param string $_ptr optional pointer to data object
- * @param boolean $search_parents include parent templates?
- * @return string variable value or or array of variables
+ * @param string $varname variable name or null
+ * @param object $_ptr optional pointer to data object
+ * @param boolean $search_parents include parent templates?
+ *
+ * @return string variable value or or array of variables
*/
public function getTemplateVars($varname = null, $_ptr = null, $search_parents = true)
{
@@ -213,7 +223,8 @@ class Smarty_Internal_Data {
$_result = array();
if ($_ptr === null) {
$_ptr = $this;
- } while ($_ptr !== null) {
+ }
+ while ($_ptr !== null) {
foreach ($_ptr->tpl_vars AS $key => $var) {
if (!array_key_exists($key, $_result)) {
$_result[$key] = $var->value;
@@ -233,6 +244,7 @@ class Smarty_Internal_Data {
}
}
}
+
return $_result;
}
}
@@ -240,7 +252,8 @@ class Smarty_Internal_Data {
/**
* clear the given assigned template variable.
*
- * @param string|array $tpl_var the template variable(s) to clear
+ * @param string|array $tpl_var the template variable(s) to clear
+ *
* @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
*/
public function clearAssign($tpl_var)
@@ -258,19 +271,22 @@ class Smarty_Internal_Data {
/**
* clear all the assigned template variables.
+ *
* @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
*/
public function clearAllAssign()
{
$this->tpl_vars = array();
+
return $this;
}
/**
* load a config file, optionally load just selected sections
*
- * @param string $config_file filename
- * @param mixed $sections array of section names, single section or null
+ * @param string $config_file filename
+ * @param mixed $sections array of section names, single section or null
+ *
* @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
*/
public function configLoad($config_file, $sections = null)
@@ -278,22 +294,26 @@ class Smarty_Internal_Data {
// load Config class
$config = new Smarty_Internal_Config($config_file, $this->smarty, $this);
$config->loadConfigVars($sections);
+
return $this;
}
/**
* gets the object of a Smarty variable
*
- * @param string $variable the name of the Smarty variable
- * @param object $_ptr optional pointer to data object
- * @param boolean $search_parents search also in parent data
- * @return object the object of the variable
+ * @param string $variable the name of the Smarty variable
+ * @param object $_ptr optional pointer to data object
+ * @param boolean $search_parents search also in parent data
+ * @param bool $error_enable
+ *
+ * @return object the object of the variable
*/
public function getVariable($variable, $_ptr = null, $search_parents = true, $error_enable = true)
{
if ($_ptr === null) {
$_ptr = $this;
- } while ($_ptr !== null) {
+ }
+ while ($_ptr !== null) {
if (isset($_ptr->tpl_vars[$variable])) {
// found it, return it
return $_ptr->tpl_vars[$variable];
@@ -313,14 +333,17 @@ class Smarty_Internal_Data {
// force a notice
$x = $$variable;
}
+
return new Undefined_Smarty_Variable;
}
/**
* gets a config variable
*
- * @param string $variable the name of the config variable
- * @return mixed the value of the config variable
+ * @param string $variable the name of the config variable
+ * @param bool $error_enable
+ *
+ * @return mixed the value of the config variable
*/
public function getConfigVariable($variable, $error_enable = true)
{
@@ -337,24 +360,28 @@ class Smarty_Internal_Data {
// force a notice
$x = $$variable;
}
+
return null;
}
/**
* gets a stream variable
*
- * @param string $variable the stream of the variable
- * @return mixed the value of the stream variable
+ * @param string $variable the stream of the variable
+ *
+ * @throws SmartyException
+ * @return mixed the value of the stream variable
*/
public function getStreamVariable($variable)
{
$_result = '';
$fp = fopen($variable, 'r+');
if ($fp) {
- while (!feof($fp) && ($current_line = fgets($fp)) !== false ) {
+ while (!feof($fp) && ($current_line = fgets($fp)) !== false) {
$_result .= $current_line;
}
fclose($fp);
+
return $_result;
}
@@ -368,7 +395,9 @@ class Smarty_Internal_Data {
/**
* Returns a single or all config variables
*
- * @param string $varname variable name or null
+ * @param string $varname variable name or null
+ * @param bool $search_parents
+ *
* @return string variable value or or array of variables
*/
public function getConfigVars($varname = null, $search_parents = true)
@@ -383,7 +412,7 @@ class Smarty_Internal_Data {
} else {
$var_array = array_merge($_ptr->config_vars, $var_array);
}
- // not found, try at parent
+ // not found, try at parent
if ($search_parents) {
$_ptr = $_ptr->parent;
} else {
@@ -400,7 +429,8 @@ class Smarty_Internal_Data {
/**
* Deassigns a single or all config variables
*
- * @param string $varname variable name or null
+ * @param string $varname variable name or null
+ *
* @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
*/
public function clearConfig($varname = null)
@@ -410,21 +440,20 @@ class Smarty_Internal_Data {
} else {
$this->config_vars = array();
}
+
return $this;
}
-
}
/**
* class for the Smarty data object
- *
* The Smarty data object will hold Smarty variables in the current scope
*
- * @package Smarty
+ * @package Smarty
* @subpackage Template
*/
-class Smarty_Data extends Smarty_Internal_Data {
-
+class Smarty_Data extends Smarty_Internal_Data
+{
/**
* Smarty object
*
@@ -435,10 +464,12 @@ class Smarty_Data extends Smarty_Internal_Data {
/**
* create Smarty data object
*
- * @param Smarty|array $_parent parent template
- * @param Smarty $smarty global smarty instance
+ * @param Smarty|array $_parent parent template
+ * @param Smarty|Smarty_Internal_Template $smarty global smarty instance
+ *
+ * @throws SmartyException
*/
- public function __construct ($_parent = null, $smarty = null)
+ public function __construct($_parent = null, $smarty = null)
{
$this->smarty = $smarty;
if (is_object($_parent)) {
@@ -453,19 +484,17 @@ class Smarty_Data extends Smarty_Internal_Data {
throw new SmartyException("Wrong type for template variables");
}
}
-
}
/**
* class for the Smarty variable object
- *
* This class defines the Smarty variable object
*
- * @package Smarty
+ * @package Smarty
* @subpackage Template
*/
-class Smarty_Variable {
-
+class Smarty_Variable
+{
/**
* template variable
*
@@ -508,23 +537,22 @@ class Smarty_Variable {
{
return (string) $this->value;
}
-
}
/**
* class for undefined variable object
- *
* This class defines an object for undefined variable handling
*
- * @package Smarty
+ * @package Smarty
* @subpackage Template
*/
-class Undefined_Smarty_Variable {
-
+class Undefined_Smarty_Variable
+{
/**
* Returns FALSE for 'nocache' and NULL otherwise.
*
- * @param string $name
+ * @param string $name
+ *
* @return bool
*/
public function __get($name)
@@ -545,7 +573,4 @@ class Undefined_Smarty_Variable {
{
return "";
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_debug.php b/library/Smarty/libs/sysplugins/smarty_internal_debug.php
index 2aea13f30..e5175d51d 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_debug.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_debug.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Debug
- *
* Class to collect data for the Smarty Debugging Consol
*
- * @package Smarty
+ * @package Smarty
* @subpackage Debug
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Debug Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Debug
*/
-class Smarty_Internal_Debug extends Smarty_Internal_Data {
-
+class Smarty_Internal_Debug extends Smarty_Internal_Data
+{
/**
* template data
*
@@ -25,13 +24,52 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data {
public static $template_data = array();
/**
+ * List of uid's which shall be ignored
+ *
+ * @var array
+ */
+ public static $ignore_uid = array();
+
+ /**
+ * Ignore template
+ *
+ * @param object $template
+ */
+ public static function ignore($template)
+ {
+ // calculate Uid if not already done
+ if ($template->source->uid == '') {
+ $template->source->filepath;
+ }
+ self::$ignore_uid[$template->source->uid] = true;
+ }
+
+ /**
* Start logging of compile time
*
* @param object $template
*/
public static function start_compile($template)
{
- $key = self::get_key($template);
+ static $_is_stringy = array('string' => true, 'eval' => true);
+ if (!empty($template->compiler->trace_uid)) {
+ $key = $template->compiler->trace_uid;
+ if (!isset(self::$template_data[$key])) {
+ if (isset($_is_stringy[$template->source->type])) {
+ self::$template_data[$key]['name'] = '\'' . substr($template->source->name, 0, 25) . '...\'';
+ } else {
+ self::$template_data[$key]['name'] = $template->source->filepath;
+ }
+ self::$template_data[$key]['compile_time'] = 0;
+ self::$template_data[$key]['render_time'] = 0;
+ self::$template_data[$key]['cache_time'] = 0;
+ }
+ } else {
+ if (isset(self::$ignore_uid[$template->source->uid])) {
+ return;
+ }
+ $key = self::get_key($template);
+ }
self::$template_data[$key]['start_time'] = microtime(true);
}
@@ -42,7 +80,15 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data {
*/
public static function end_compile($template)
{
- $key = self::get_key($template);
+ if (!empty($template->compiler->trace_uid)) {
+ $key = $template->compiler->trace_uid;
+ } else {
+ if (isset(self::$ignore_uid[$template->source->uid])) {
+ return;
+ }
+
+ $key = self::get_key($template);
+ }
self::$template_data[$key]['compile_time'] += microtime(true) - self::$template_data[$key]['start_time'];
}
@@ -115,6 +161,7 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data {
$smarty->left_delimiter = '{';
$smarty->right_delimiter = '}';
$smarty->debugging = false;
+ $smarty->debugging_ctrl = 'NONE';
$smarty->force_compile = false;
$_template = new Smarty_Internal_Template($smarty->debug_tpl, $smarty);
$_template->caching = false;
@@ -138,7 +185,8 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data {
/**
* Recursively gets variables from all template/data scopes
*
- * @param Smarty_Internal_Template|Smarty_Data $obj object to debug
+ * @param Smarty_Internal_Template|Smarty_Data $obj object to debug
+ *
* @return StdClass
*/
public static function get_debug_vars($obj)
@@ -169,14 +217,16 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data {
}
}
}
+
return (object) array('tpl_vars' => $tpl_vars, 'config_vars' => $config_vars);
}
/**
* Return key into $template_data for template
*
- * @param object $template template object
- * @return string key into $template_data
+ * @param object $template template object
+ *
+ * @return string key into $template_data
*/
private static function get_key($template)
{
@@ -190,17 +240,15 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data {
return $key;
} else {
if (isset($_is_stringy[$template->source->type])) {
- self::$template_data[$key]['name'] = '\''.substr($template->source->name,0,25).'...\'';
+ self::$template_data[$key]['name'] = '\'' . substr($template->source->name, 0, 25) . '...\'';
} else {
self::$template_data[$key]['name'] = $template->source->filepath;
}
self::$template_data[$key]['compile_time'] = 0;
self::$template_data[$key]['render_time'] = 0;
self::$template_data[$key]['cache_time'] = 0;
+
return $key;
}
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_filter_handler.php b/library/Smarty/libs/sysplugins/smarty_internal_filter_handler.php
index c9370e1ac..4f0f3981c 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_filter_handler.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_filter_handler.php
@@ -1,41 +1,41 @@
<?php
/**
* Smarty Internal Plugin Filter Handler
- *
* Smarty filter handler class
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsInternal
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Class for filter processing
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsInternal
*/
-class Smarty_Internal_Filter_Handler {
-
+class Smarty_Internal_Filter_Handler
+{
/**
* Run filters over content
- *
* The filters will be lazy loaded if required
* class name format: Smarty_FilterType_FilterName
* plugin filename format: filtertype.filtername.php
* Smarty2 filter plugins could be used
*
- * @param string $type the type of filter ('pre','post','output') which shall run
- * @param string $content the content which shall be processed by the filters
- * @param Smarty_Internal_Template $template template object
- * @return string the filtered content
+ * @param string $type the type of filter ('pre','post','output') which shall run
+ * @param string $content the content which shall be processed by the filters
+ * @param Smarty_Internal_Template $template template object
+ *
+ * @throws SmartyException
+ * @return string the filtered content
*/
public static function runFilter($type, $content, Smarty_Internal_Template $template)
{
$output = $content;
// loop over autoload filters of specified type
if (!empty($template->smarty->autoload_filters[$type])) {
- foreach ((array)$template->smarty->autoload_filters[$type] as $name) {
+ foreach ((array) $template->smarty->autoload_filters[$type] as $name) {
$plugin_name = "Smarty_{$type}filter_{$name}";
if ($template->smarty->loadPlugin($plugin_name)) {
if (function_exists($plugin_name)) {
@@ -64,7 +64,4 @@ class Smarty_Internal_Filter_Handler {
// return filtered output
return $output;
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_function_call_handler.php b/library/Smarty/libs/sysplugins/smarty_internal_function_call_handler.php
index 010d63592..a81ff728b 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_function_call_handler.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_function_call_handler.php
@@ -1,55 +1,52 @@
-<?php
-/**
- * Smarty Internal Plugin Function Call Handler
- *
- * @package Smarty
- * @subpackage PluginsInternal
- * @author Uwe Tews
- */
-
-/**
- * This class does call function defined with the {function} tag
- *
- * @package Smarty
- * @subpackage PluginsInternal
- */
-class Smarty_Internal_Function_Call_Handler {
-
- /**
- * This function handles calls to template functions defined by {function}
- * It does create a PHP function at the first call
- *
- * @param string $_name template function name
- * @param Smarty_Internal_Template $_template template object
- * @param array $_params Smarty variables passed as call parameter
- * @param string $_hash nocache hash value
- * @param bool $_nocache nocache flag
- */
- public static function call($_name, Smarty_Internal_Template $_template, $_params, $_hash, $_nocache)
- {
- if ($_nocache) {
- $_function = "smarty_template_function_{$_name}_nocache";
- } else {
- $_function = "smarty_template_function_{$_hash}_{$_name}";
- }
- if (!is_callable($_function)) {
- $_code = "function {$_function}(\$_smarty_tpl,\$params) {
- \$saved_tpl_vars = \$_smarty_tpl->tpl_vars;
- foreach (\$_smarty_tpl->smarty->template_functions['{$_name}']['parameter'] as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);};
- foreach (\$params as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}?>";
- if ($_nocache) {
- $_code .= preg_replace(array("!<\?php echo \\'/\*%%SmartyNocache:{$_template->smarty->template_functions[$_name]['nocache_hash']}%%\*/|/\*/%%SmartyNocache:{$_template->smarty->template_functions[$_name]['nocache_hash']}%%\*/\\';\?>!",
- "!\\\'!"), array('', "'"), $_template->smarty->template_functions[$_name]['compiled']);
- $_template->smarty->template_functions[$_name]['called_nocache'] = true;
- } else {
- $_code .= preg_replace("/{$_template->smarty->template_functions[$_name]['nocache_hash']}/", $_template->properties['nocache_hash'], $_template->smarty->template_functions[$_name]['compiled']);
- }
- $_code .= "<?php \$_smarty_tpl->tpl_vars = \$saved_tpl_vars;}";
- eval($_code);
- }
- $_function($_template, $_params);
- }
-
-}
-
-?>
+<?php
+/**
+ * Smarty Internal Plugin Function Call Handler
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+
+/**
+ * This class does call function defined with the {function} tag
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ */
+class Smarty_Internal_Function_Call_Handler
+{
+ /**
+ * This function handles calls to template functions defined by {function}
+ * It does create a PHP function at the first call
+ *
+ * @param string $_name template function name
+ * @param Smarty_Internal_Template $_template template object
+ * @param array $_params Smarty variables passed as call parameter
+ * @param string $_hash nocache hash value
+ * @param bool $_nocache nocache flag
+ */
+ public static function call($_name, Smarty_Internal_Template $_template, $_params, $_hash, $_nocache)
+ {
+ if ($_nocache) {
+ $_function = "smarty_template_function_{$_name}_nocache";
+ } else {
+ $_function = "smarty_template_function_{$_hash}_{$_name}";
+ }
+ if (!is_callable($_function)) {
+ $_code = "function {$_function}(\$_smarty_tpl,\$params) {
+ \$saved_tpl_vars = \$_smarty_tpl->tpl_vars;
+ foreach (\$_smarty_tpl->smarty->template_functions['{$_name}']['parameter'] as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);};
+ foreach (\$params as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}?>";
+ if ($_nocache) {
+ $_code .= preg_replace(array("!<\?php echo \\'/\*%%SmartyNocache:{$_template->smarty->template_functions[$_name]['nocache_hash']}%%\*/|/\*/%%SmartyNocache:{$_template->smarty->template_functions[$_name]['nocache_hash']}%%\*/\\';\?>!",
+ "!\\\'!"), array('', "'"), $_template->smarty->template_functions[$_name]['compiled']);
+ $_template->smarty->template_functions[$_name]['called_nocache'] = true;
+ } else {
+ $_code .= preg_replace("/{$_template->smarty->template_functions[$_name]['nocache_hash']}/", $_template->properties['nocache_hash'], $_template->smarty->template_functions[$_name]['compiled']);
+ }
+ $_code .= "<?php \$_smarty_tpl->tpl_vars = \$saved_tpl_vars;}";
+ eval($_code);
+ }
+ $_function($_template, $_params);
+ }
+}
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_get_include_path.php b/library/Smarty/libs/sysplugins/smarty_internal_get_include_path.php
index 518c406aa..d46ca7029 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_get_include_path.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_get_include_path.php
@@ -1,48 +1,46 @@
-<?php
-/**
- * Smarty read include path plugin
- *
- * @package Smarty
- * @subpackage PluginsInternal
- * @author Monte Ohrt
- */
-
-/**
- * Smarty Internal Read Include Path Class
- *
- * @package Smarty
- * @subpackage PluginsInternal
- */
-class Smarty_Internal_Get_Include_Path {
-
- /**
- * Return full file path from PHP include_path
- *
- * @param string $filepath filepath
- * @return string|boolean full filepath or false
- */
- public static function getIncludePath($filepath)
- {
- static $_include_path = null;
-
- if (function_exists('stream_resolve_include_path')) {
- // available since PHP 5.3.2
- return stream_resolve_include_path($filepath);
- }
-
- if ($_include_path === null) {
- $_include_path = explode(PATH_SEPARATOR, get_include_path());
- }
-
- foreach ($_include_path as $_path) {
- if (file_exists($_path . DS . $filepath)) {
- return $_path . DS . $filepath;
- }
- }
-
- return false;
- }
-
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty read include path plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Monte Ohrt
+ */
+
+/**
+ * Smarty Internal Read Include Path Class
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ */
+class Smarty_Internal_Get_Include_Path
+{
+ /**
+ * Return full file path from PHP include_path
+ *
+ * @param string $filepath filepath
+ *
+ * @return string|boolean full filepath or false
+ */
+ public static function getIncludePath($filepath)
+ {
+ static $_include_path = null;
+
+ if (function_exists('stream_resolve_include_path')) {
+ // available since PHP 5.3.2
+ return stream_resolve_include_path($filepath);
+ }
+
+ if ($_include_path === null) {
+ $_include_path = explode(PATH_SEPARATOR, get_include_path());
+ }
+
+ foreach ($_include_path as $_path) {
+ if (file_exists($_path . DS . $filepath)) {
+ return $_path . DS . $filepath;
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_nocache_insert.php b/library/Smarty/libs/sysplugins/smarty_internal_nocache_insert.php
index faae49af6..0d2facfe9 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_nocache_insert.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_nocache_insert.php
@@ -1,53 +1,51 @@
-<?php
-/**
- * Smarty Internal Plugin Nocache Insert
- *
- * Compiles the {insert} tag into the cache file
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Insert Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Nocache_Insert {
-
- /**
- * Compiles code for the {insert} tag into cache file
- *
- * @param string $_function insert function name
- * @param array $_attr array with parameter
- * @param Smarty_Internal_Template $_template template object
- * @param string $_script script name to load or 'null'
- * @param string $_assign optional variable name
- * @return string compiled code
- */
- public static function compile($_function, $_attr, $_template, $_script, $_assign = null)
- {
- $_output = '<?php ';
- if ($_script != 'null') {
- // script which must be included
- // code for script file loading
- $_output .= "require_once '{$_script}';";
- }
- // call insert
- if (isset($_assign)) {
- $_output .= "\$_smarty_tpl->assign('{$_assign}' , {$_function} (" . var_export($_attr, true) . ",\$_smarty_tpl), true);?>";
- } else {
- $_output .= "echo {$_function}(" . var_export($_attr, true) . ",\$_smarty_tpl);?>";
- }
- $_tpl = $_template;
- while ($_tpl->parent instanceof Smarty_Internal_Template) {
- $_tpl = $_tpl->parent;
- }
- return "/*%%SmartyNocache:{$_tpl->properties['nocache_hash']}%%*/" . $_output . "/*/%%SmartyNocache:{$_tpl->properties['nocache_hash']}%%*/";
- }
-
-}
-
-?>
+<?php
+/**
+ * Smarty Internal Plugin Nocache Insert
+ * Compiles the {insert} tag into the cache file
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
+
+/**
+ * Smarty Internal Plugin Compile Insert Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Nocache_Insert
+{
+ /**
+ * Compiles code for the {insert} tag into cache file
+ *
+ * @param string $_function insert function name
+ * @param array $_attr array with parameter
+ * @param Smarty_Internal_Template $_template template object
+ * @param string $_script script name to load or 'null'
+ * @param string $_assign optional variable name
+ *
+ * @return string compiled code
+ */
+ public static function compile($_function, $_attr, $_template, $_script, $_assign = null)
+ {
+ $_output = '<?php ';
+ if ($_script != 'null') {
+ // script which must be included
+ // code for script file loading
+ $_output .= "require_once '{$_script}';";
+ }
+ // call insert
+ if (isset($_assign)) {
+ $_output .= "\$_smarty_tpl->assign('{$_assign}' , {$_function} (" . var_export($_attr, true) . ",\$_smarty_tpl), true);?>";
+ } else {
+ $_output .= "echo {$_function}(" . var_export($_attr, true) . ",\$_smarty_tpl);?>";
+ }
+ $_tpl = $_template;
+ while ($_tpl->parent instanceof Smarty_Internal_Template) {
+ $_tpl = $_tpl->parent;
+ }
+
+ return "/*%%SmartyNocache:{$_tpl->properties['nocache_hash']}%%*/" . $_output . "/*/%%SmartyNocache:{$_tpl->properties['nocache_hash']}%%*/";
+ }
+}
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_parsetree.php b/library/Smarty/libs/sysplugins/smarty_internal_parsetree.php
index c9fb1f762..186671021 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_parsetree.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_parsetree.php
@@ -1,395 +1,361 @@
-<?php
-/**
- * Smarty Internal Plugin Templateparser Parsetrees
- *
- * These are classes to build parsetrees in the template parser
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Thue Kristensen
- * @author Uwe Tews
- */
-
-/**
- * @package Smarty
- * @subpackage Compiler
- * @ignore
- */
-abstract class _smarty_parsetree {
-
- /**
- * Parser object
- * @var object
- */
- public $parser;
- /**
- * Buffer content
- * @var mixed
- */
- public $data;
-
- /**
- * Return buffer
- *
- * @return string buffer content
- */
- abstract public function to_smarty_php();
-
-}
-
-/**
- * A complete smarty tag.
- *
- * @package Smarty
- * @subpackage Compiler
- * @ignore
- */
-class _smarty_tag extends _smarty_parsetree {
-
- /**
- * Saved block nesting level
- * @var int
- */
- public $saved_block_nesting;
-
- /**
- * Create parse tree buffer for Smarty tag
- *
- * @param object $parser parser object
- * @param string $data content
- */
- public function __construct($parser, $data)
- {
- $this->parser = $parser;
- $this->data = $data;
- $this->saved_block_nesting = $parser->block_nesting_level;
- }
-
- /**
- * Return buffer content
- *
- * @return string content
- */
- public function to_smarty_php()
- {
- return $this->data;
- }
-
- /**
- * Return complied code that loads the evaluated outout of buffer content into a temporary variable
- *
- * @return string template code
- */
- public function assign_to_var()
- {
- $var = sprintf('$_tmp%d', ++$this->parser->prefix_number);
- $this->parser->compiler->prefix_code[] = sprintf('<?php ob_start();?>%s<?php %s=ob_get_clean();?>', $this->data, $var);
- return $var;
- }
-
-}
-
-/**
- * Code fragment inside a tag.
- *
- * @package Smarty
- * @subpackage Compiler
- * @ignore
- */
-class _smarty_code extends _smarty_parsetree {
-
-
- /**
- * Create parse tree buffer for code fragment
- *
- * @param object $parser parser object
- * @param string $data content
- */
- public function __construct($parser, $data)
- {
- $this->parser = $parser;
- $this->data = $data;
- }
-
- /**
- * Return buffer content in parentheses
- *
- * @return string content
- */
- public function to_smarty_php()
- {
- return sprintf("(%s)", $this->data);
- }
-
-}
-
-/**
- * Double quoted string inside a tag.
- *
- * @package Smarty
- * @subpackage Compiler
- * @ignore
- */
-class _smarty_doublequoted extends _smarty_parsetree {
-
- /**
- * Create parse tree buffer for double quoted string subtrees
- *
- * @param object $parser parser object
- * @param _smarty_parsetree $subtree parsetree buffer
- */
- public function __construct($parser, _smarty_parsetree $subtree)
- {
- $this->parser = $parser;
- $this->subtrees[] = $subtree;
- if ($subtree instanceof _smarty_tag) {
- $this->parser->block_nesting_level = count($this->parser->compiler->_tag_stack);
- }
- }
-
- /**
- * Append buffer to subtree
- *
- * @param _smarty_parsetree $subtree parsetree buffer
- */
- public function append_subtree(_smarty_parsetree $subtree)
- {
- $last_subtree = count($this->subtrees) - 1;
- if ($last_subtree >= 0 && $this->subtrees[$last_subtree] instanceof _smarty_tag && $this->subtrees[$last_subtree]->saved_block_nesting < $this->parser->block_nesting_level) {
- if ($subtree instanceof _smarty_code) {
- $this->subtrees[$last_subtree]->data .= '<?php echo ' . $subtree->data . ';?>';
- } elseif ($subtree instanceof _smarty_dq_content) {
- $this->subtrees[$last_subtree]->data .= '<?php echo "' . $subtree->data . '";?>';
- } else {
- $this->subtrees[$last_subtree]->data .= $subtree->data;
- }
- } else {
- $this->subtrees[] = $subtree;
- }
- if ($subtree instanceof _smarty_tag) {
- $this->parser->block_nesting_level = count($this->parser->compiler->_tag_stack);
- }
- }
-
- /**
- * Merge subtree buffer content together
- *
- * @return string compiled template code
- */
- public function to_smarty_php()
- {
- $code = '';
- foreach ($this->subtrees as $subtree) {
- if ($code !== "") {
- $code .= ".";
- }
- if ($subtree instanceof _smarty_tag) {
- $more_php = $subtree->assign_to_var();
- } else {
- $more_php = $subtree->to_smarty_php();
- }
-
- $code .= $more_php;
-
- if (!$subtree instanceof _smarty_dq_content) {
- $this->parser->compiler->has_variable_string = true;
- }
- }
- return $code;
- }
-
-}
-
-/**
- * Raw chars as part of a double quoted string.
- *
- * @package Smarty
- * @subpackage Compiler
- * @ignore
- */
-class _smarty_dq_content extends _smarty_parsetree {
-
-
- /**
- * Create parse tree buffer with string content
- *
- * @param object $parser parser object
- * @param string $data string section
- */
- public function __construct($parser, $data)
- {
- $this->parser = $parser;
- $this->data = $data;
- }
-
- /**
- * Return content as double quoted string
- *
- * @return string doubled quoted string
- */
- public function to_smarty_php()
- {
- return '"' . $this->data . '"';
- }
-
-}
-
-/**
- * Template element
- *
- * @package Smarty
- * @subpackage Compiler
- * @ignore
- */
-class _smarty_template_buffer extends _smarty_parsetree {
-
- /**
- * Array of template elements
- *
- * @var array
- */
- public $subtrees = Array();
-
- /**
- * Create root of parse tree for template elements
- *
- * @param object $parser parse object
- */
- public function __construct($parser)
- {
- $this->parser = $parser;
- }
-
- /**
- * Append buffer to subtree
- *
- * @param _smarty_parsetree $subtree
- */
- public function append_subtree(_smarty_parsetree $subtree)
- {
- $this->subtrees[] = $subtree;
- }
-
- /**
- * Sanitize and merge subtree buffers together
- *
- * @return string template code content
- */
- public function to_smarty_php()
- {
- $code = '';
- for ($key = 0, $cnt = count($this->subtrees); $key < $cnt; $key++) {
- if ($key + 2 < $cnt) {
- if ($this->subtrees[$key] instanceof _smarty_linebreak && $this->subtrees[$key + 1] instanceof _smarty_tag && $this->subtrees[$key + 1]->data == '' && $this->subtrees[$key + 2] instanceof _smarty_linebreak) {
- $key = $key + 1;
- continue;
- }
- if (substr($this->subtrees[$key]->data, -1) == '<' && $this->subtrees[$key + 1]->data == '' && substr($this->subtrees[$key + 2]->data, -1) == '?') {
- $key = $key + 2;
- continue;
- }
- }
- if (substr($code, -1) == '<') {
- $subtree = $this->subtrees[$key]->to_smarty_php();
- if (substr($subtree, 0, 1) == '?') {
- $code = substr($code, 0, strlen($code) - 1) . '<<?php ?>?' . substr($subtree, 1);
- } elseif ($this->parser->asp_tags && substr($subtree, 0, 1) == '%') {
- $code = substr($code, 0, strlen($code) - 1) . '<<?php ?>%' . substr($subtree, 1);
- } else {
- $code .= $subtree;
- }
- continue;
- }
- if ($this->parser->asp_tags && substr($code, -1) == '%') {
- $subtree = $this->subtrees[$key]->to_smarty_php();
- if (substr($subtree, 0, 1) == '>') {
- $code = substr($code, 0, strlen($code) - 1) . '%<?php ?>>' . substr($subtree, 1);
- } else {
- $code .= $subtree;
- }
- continue;
- }
- if (substr($code, -1) == '?') {
- $subtree = $this->subtrees[$key]->to_smarty_php();
- if (substr($subtree, 0, 1) == '>') {
- $code = substr($code, 0, strlen($code) - 1) . '?<?php ?>>' . substr($subtree, 1);
- } else {
- $code .= $subtree;
- }
- continue;
- }
- $code .= $this->subtrees[$key]->to_smarty_php();
- }
- return $code;
- }
-
-}
-
-/**
- * template text
- *
- * @package Smarty
- * @subpackage Compiler
- * @ignore
- */
-class _smarty_text extends _smarty_parsetree {
-
-
- /**
- * Create template text buffer
- *
- * @param object $parser parser object
- * @param string $data text
- */
- public function __construct($parser, $data)
- {
- $this->parser = $parser;
- $this->data = $data;
- }
-
- /**
- * Return buffer content
- *
- * @return strint text
- */
- public function to_smarty_php()
- {
- return $this->data;
- }
-
-}
-
-/**
- * template linebreaks
- *
- * @package Smarty
- * @subpackage Compiler
- * @ignore
- */
-class _smarty_linebreak extends _smarty_parsetree {
-
- /**
- * Create buffer with linebreak content
- *
- * @param object $parser parser object
- * @param string $data linebreak string
- */
- public function __construct($parser, $data)
- {
- $this->parser = $parser;
- $this->data = $data;
- }
-
- /**
- * Return linebrak
- *
- * @return string linebreak
- */
- public function to_smarty_php()
- {
- return $this->data;
- }
-
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty Internal Plugin Templateparser Parsetrees
+ * These are classes to build parsetrees in the template parser
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Thue Kristensen
+ * @author Uwe Tews
+ */
+
+/**
+ * @package Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+abstract class _smarty_parsetree
+{
+ /**
+ * Parser object
+ *
+ * @var object
+ */
+ public $parser;
+ /**
+ * Buffer content
+ *
+ * @var mixed
+ */
+ public $data;
+
+ /**
+ * Subtree array
+ *
+ * @var array
+ */
+ public $subtrees = array();
+
+ /**
+ * Return buffer
+ *
+ * @return string buffer content
+ */
+ abstract public function to_smarty_php();
+}
+
+/**
+ * A complete smarty tag.
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+class _smarty_tag extends _smarty_parsetree
+{
+ /**
+ * Saved block nesting level
+ *
+ * @var int
+ */
+ public $saved_block_nesting;
+
+ /**
+ * Create parse tree buffer for Smarty tag
+ *
+ * @param object $parser parser object
+ * @param string $data content
+ */
+ public function __construct($parser, $data)
+ {
+ $this->parser = $parser;
+ $this->data = $data;
+ $this->saved_block_nesting = $parser->block_nesting_level;
+ }
+
+ /**
+ * Return buffer content
+ *
+ * @return string content
+ */
+ public function to_smarty_php()
+ {
+ return $this->data;
+ }
+
+ /**
+ * Return complied code that loads the evaluated output of buffer content into a temporary variable
+ *
+ * @return string template code
+ */
+ public function assign_to_var()
+ {
+ $var = sprintf('$_tmp%d', ++Smarty_Internal_Templateparser::$prefix_number);
+ $this->parser->compiler->prefix_code[] = sprintf("<?php ob_start();\n%s\n%s=ob_get_clean();?>", preg_replace(array('/^\s*<\?php\s+/','/\s*\?>\s*$/'), '', $this->data), $var);
+
+ return $var;
+ }
+}
+
+/**
+ * Code fragment inside a tag.
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+class _smarty_code extends _smarty_parsetree
+{
+ /**
+ * Create parse tree buffer for code fragment
+ *
+ * @param object $parser parser object
+ * @param string $data content
+ */
+ public function __construct($parser, $data)
+ {
+ $this->parser = $parser;
+ $this->data = $data;
+ }
+
+ /**
+ * Return buffer content in parentheses
+ *
+ * @return string content
+ */
+ public function to_smarty_php()
+ {
+ return sprintf("(%s)", $this->data);
+ }
+}
+
+/**
+ * Double quoted string inside a tag.
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+class _smarty_doublequoted extends _smarty_parsetree
+{
+ /**
+ * Create parse tree buffer for double quoted string subtrees
+ *
+ * @param object $parser parser object
+ * @param _smarty_parsetree $subtree parsetree buffer
+ */
+ public function __construct($parser, _smarty_parsetree $subtree)
+ {
+ $this->parser = $parser;
+ $this->subtrees[] = $subtree;
+ if ($subtree instanceof _smarty_tag) {
+ $this->parser->block_nesting_level = count($this->parser->compiler->_tag_stack);
+ }
+ }
+
+ /**
+ * Append buffer to subtree
+ *
+ * @param _smarty_parsetree $subtree parsetree buffer
+ */
+ public function append_subtree(_smarty_parsetree $subtree)
+ {
+ $last_subtree = count($this->subtrees) - 1;
+ if ($last_subtree >= 0 && $this->subtrees[$last_subtree] instanceof _smarty_tag && $this->subtrees[$last_subtree]->saved_block_nesting < $this->parser->block_nesting_level) {
+ if ($subtree instanceof _smarty_code) {
+ $this->subtrees[$last_subtree]->data .= '<?php echo ' . $subtree->data . ';?>';
+ } elseif ($subtree instanceof _smarty_dq_content) {
+ $this->subtrees[$last_subtree]->data .= '<?php echo "' . $subtree->data . '";?>';
+ } else {
+ $this->subtrees[$last_subtree]->data .= $subtree->data;
+ }
+ } else {
+ $this->subtrees[] = $subtree;
+ }
+ if ($subtree instanceof _smarty_tag) {
+ $this->parser->block_nesting_level = count($this->parser->compiler->_tag_stack);
+ }
+ }
+
+ /**
+ * Merge subtree buffer content together
+ *
+ * @return string compiled template code
+ */
+ public function to_smarty_php()
+ {
+ $code = '';
+ foreach ($this->subtrees as $subtree) {
+ if ($code !== "") {
+ $code .= ".";
+ }
+ if ($subtree instanceof _smarty_tag) {
+ $more_php = $subtree->assign_to_var();
+ } else {
+ $more_php = $subtree->to_smarty_php();
+ }
+
+ $code .= $more_php;
+
+ if (!$subtree instanceof _smarty_dq_content) {
+ $this->parser->compiler->has_variable_string = true;
+ }
+ }
+
+ return $code;
+ }
+}
+
+/**
+ * Raw chars as part of a double quoted string.
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+class _smarty_dq_content extends _smarty_parsetree
+{
+ /**
+ * Create parse tree buffer with string content
+ *
+ * @param object $parser parser object
+ * @param string $data string section
+ */
+ public function __construct($parser, $data)
+ {
+ $this->parser = $parser;
+ $this->data = $data;
+ }
+
+ /**
+ * Return content as double quoted string
+ *
+ * @return string doubled quoted string
+ */
+ public function to_smarty_php()
+ {
+ return '"' . $this->data . '"';
+ }
+}
+
+/**
+ * Template element
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+class _smarty_template_buffer extends _smarty_parsetree
+{
+ /**
+ * Array of template elements
+ *
+ * @var array
+ */
+ public $subtrees = Array();
+
+ /**
+ * Create root of parse tree for template elements
+ *
+ * @param object $parser parse object
+ */
+ public function __construct($parser)
+ {
+ $this->parser = $parser;
+ }
+
+ /**
+ * Append buffer to subtree
+ *
+ * @param _smarty_parsetree $subtree
+ */
+ public function append_subtree(_smarty_parsetree $subtree)
+ {
+ if ($subtree->data !== '') {
+ $this->subtrees[] = $subtree;
+ }
+ }
+
+ /**
+ * Sanitize and merge subtree buffers together
+ *
+ * @return string template code content
+ */
+ public function to_smarty_php()
+ {
+ $code = '';
+ for ($key = 0, $cnt = count($this->subtrees); $key < $cnt; $key ++) {
+ if ($this->subtrees[$key] instanceof _smarty_text) {
+ $subtree = $this->subtrees[$key]->to_smarty_php();
+ while ($key + 1 < $cnt && ($this->subtrees[$key+1] instanceof _smarty_text || $this->subtrees[$key +1]->data == '')) {
+ $key++;
+ if ($this->subtrees[$key]->data == '') {
+ continue;
+ }
+ $subtree .= $this->subtrees[$key]->to_smarty_php();
+ }
+ if ($subtree == '') {
+ continue;
+ }
+ $code .= preg_replace('/(<%|%>|<\?php|<\?|\?>|<\/?script)/', "<?php echo '\$1'; ?>\n", $subtree);
+ continue;
+ }
+ if ($this->subtrees[$key] instanceof _smarty_tag) {
+ $subtree = $this->subtrees[$key]->to_smarty_php();
+ while ($key + 1 < $cnt && ($this->subtrees[$key+1] instanceof _smarty_tag || $this->subtrees[$key +1]->data == '')) {
+ $key++;
+ if ($this->subtrees[$key]->data == '') {
+ continue;
+ }
+ $newCode = $this->subtrees[$key]->to_smarty_php();
+ if ((preg_match('/^\s*<\?php\s+/', $newCode) && preg_match('/\s*\?>\s*$/', $subtree))) {
+ $subtree = preg_replace('/\s*\?>\s*$/', "\n", $subtree);
+ $subtree .= preg_replace('/^\s*<\?php\s+/', '', $newCode);
+ } else {
+ $subtree .= $newCode;
+ }
+ }
+ if ($subtree == '') {
+ continue;
+ }
+ $code .= $subtree;
+ continue;
+ }
+ $code .= $this->subtrees[$key]->to_smarty_php();
+ }
+ return $code;
+ }
+
+}
+
+/**
+ * template text
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+class _smarty_text extends _smarty_parsetree
+{
+ /**
+ * Create template text buffer
+ *
+ * @param object $parser parser object
+ * @param string $data text
+ */
+ public function __construct($parser, $data)
+ {
+ $this->parser = $parser;
+ $this->data = $data;
+ }
+
+ /**
+ * Return buffer content
+ *
+ * @return strint text
+ */
+ public function to_smarty_php()
+ {
+ return $this->data;
+ }
+}
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_resource_eval.php b/library/Smarty/libs/sysplugins/smarty_internal_resource_eval.php
index cf2ec3e1c..1c64b7cf5 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_resource_eval.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_resource_eval.php
@@ -1,94 +1,96 @@
-<?php
-/**
- * Smarty Internal Plugin Resource Eval
- *
- * @package Smarty
- * @subpackage TemplateResources
- * @author Uwe Tews
- * @author Rodney Rehm
- */
-
-/**
- * Smarty Internal Plugin Resource Eval
- *
- * Implements the strings as resource for Smarty template
- *
- * {@internal unlike string-resources the compiled state of eval-resources is NOT saved for subsequent access}}
- *
- * @package Smarty
- * @subpackage TemplateResources
- */
-class Smarty_Internal_Resource_Eval extends Smarty_Resource_Recompiled {
-
- /**
- * populate Source Object with meta data from Resource
- *
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
- * @return void
- */
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
- {
- $source->uid = $source->filepath = sha1($source->name);
- $source->timestamp = false;
- $source->exists = true;
- }
-
- /**
- * Load template's source from $resource_name into current template object
- *
- * @uses decode() to decode base64 and urlencoded template_resources
- * @param Smarty_Template_Source $source source object
- * @return string template source
- */
- public function getContent(Smarty_Template_Source $source)
- {
- return $this->decode($source->name);
- }
-
- /**
- * decode base64 and urlencode
- *
- * @param string $string template_resource to decode
- * @return string decoded template_resource
- */
- protected function decode($string)
- {
- // decode if specified
- if (($pos = strpos($string, ':')) !== false) {
- if (!strncmp($string, 'base64', 6)) {
- return base64_decode(substr($string, 7));
- } elseif (!strncmp($string, 'urlencode', 9)) {
- return urldecode(substr($string, 10));
- }
- }
-
- return $string;
- }
-
- /**
- * modify resource_name according to resource handlers specifications
- *
- * @param Smarty $smarty Smarty instance
- * @param string $resource_name resource_name to make unique
- * @return string unique resource name
- */
- protected function buildUniqueResourceName(Smarty $smarty, $resource_name)
- {
- return get_class($this) . '#' .$this->decode($resource_name);
- }
-
- /**
- * Determine basename for compiled filename
- *
- * @param Smarty_Template_Source $source source object
- * @return string resource's basename
- */
- protected function getBasename(Smarty_Template_Source $source)
- {
- return '';
- }
-
-}
-
-?> \ No newline at end of file
+<?php
+/**
+ * Smarty Internal Plugin Resource Eval
+ *
+ * @package Smarty
+ * @subpackage TemplateResources
+ * @author Uwe Tews
+ * @author Rodney Rehm
+ */
+
+/**
+ * Smarty Internal Plugin Resource Eval
+ * Implements the strings as resource for Smarty template
+ * {@internal unlike string-resources the compiled state of eval-resources is NOT saved for subsequent access}}
+ *
+ * @package Smarty
+ * @subpackage TemplateResources
+ */
+class Smarty_Internal_Resource_Eval extends Smarty_Resource_Recompiled
+{
+ /**
+ * populate Source Object with meta data from Resource
+ *
+ * @param Smarty_Template_Source $source source object
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @return void
+ */
+ public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
+ {
+ $source->uid = $source->filepath = sha1($source->name);
+ $source->timestamp = false;
+ $source->exists = true;
+ }
+
+ /**
+ * Load template's source from $resource_name into current template object
+ *
+ * @uses decode() to decode base64 and urlencoded template_resources
+ *
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string template source
+ */
+ public function getContent(Smarty_Template_Source $source)
+ {
+ return $this->decode($source->name);
+ }
+
+ /**
+ * decode base64 and urlencode
+ *
+ * @param string $string template_resource to decode
+ *
+ * @return string decoded template_resource
+ */
+ protected function decode($string)
+ {
+ // decode if specified
+ if (($pos = strpos($string, ':')) !== false) {
+ if (!strncmp($string, 'base64', 6)) {
+ return base64_decode(substr($string, 7));
+ } elseif (!strncmp($string, 'urlencode', 9)) {
+ return urldecode(substr($string, 10));
+ }
+ }
+
+ return $string;
+ }
+
+ /**
+ * modify resource_name according to resource handlers specifications
+ *
+ * @param Smarty $smarty Smarty instance
+ * @param string $resource_name resource_name to make unique
+ * @param boolean $is_config flag for config resource
+ *
+ * @return string unique resource name
+ */
+ protected function buildUniqueResourceName(Smarty $smarty, $resource_name, $is_config = false)
+ {
+ return get_class($this) . '#' . $this->decode($resource_name);
+ }
+
+ /**
+ * Determine basename for compiled filename
+ *
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string resource's basename
+ */
+ protected function getBasename(Smarty_Template_Source $source)
+ {
+ return '';
+ }
+}
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_resource_extends.php b/library/Smarty/libs/sysplugins/smarty_internal_resource_extends.php
index 9481d9922..c78dba512 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_resource_extends.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_resource_extends.php
@@ -1,37 +1,38 @@
<?php
/**
-* Smarty Internal Plugin Resource Extends
-*
-* @package Smarty
-* @subpackage TemplateResources
-* @author Uwe Tews
-* @author Rodney Rehm
-*/
+ * Smarty Internal Plugin Resource Extends
+ *
+ * @package Smarty
+ * @subpackage TemplateResources
+ * @author Uwe Tews
+ * @author Rodney Rehm
+ */
/**
-* Smarty Internal Plugin Resource Extends
-*
-* Implements the file system as resource for Smarty which {extend}s a chain of template files templates
-*
-* @package Smarty
-* @subpackage TemplateResources
-*/
-class Smarty_Internal_Resource_Extends extends Smarty_Resource {
-
+ * Smarty Internal Plugin Resource Extends
+ * Implements the file system as resource for Smarty which {extend}s a chain of template files templates
+ *
+ * @package Smarty
+ * @subpackage TemplateResources
+ */
+class Smarty_Internal_Resource_Extends extends Smarty_Resource
+{
/**
- * mbstring.overload flag
- *
- * @var int
- */
+ * mbstring.overload flag
+ *
+ * @var int
+ */
public $mbstring_overload = 0;
/**
- * populate Source Object with meta data from Resource
- *
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
- */
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+ * populate Source Object with meta data from Resource
+ *
+ * @param Smarty_Template_Source $source source object
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @throws SmartyException
+ */
+ public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
{
$uid = '';
$sources = array();
@@ -43,7 +44,7 @@ class Smarty_Internal_Resource_Extends extends Smarty_Resource {
throw new SmartyException("Resource type {$s->type} cannot be used with the extends resource type");
}
$sources[$s->uid] = $s;
- $uid .= $s->filepath;
+ $uid .= realpath($s->filepath);
if ($_template && $_template->smarty->compile_check) {
$exists = $exists && $s->exists;
}
@@ -60,10 +61,10 @@ class Smarty_Internal_Resource_Extends extends Smarty_Resource {
}
/**
- * populate Source Object with timestamp and exists from Resource
- *
- * @param Smarty_Template_Source $source source object
- */
+ * populate Source Object with timestamp and exists from Resource
+ *
+ * @param Smarty_Template_Source $source source object
+ */
public function populateTimestamp(Smarty_Template_Source $source)
{
$source->exists = true;
@@ -74,84 +75,38 @@ class Smarty_Internal_Resource_Extends extends Smarty_Resource {
}
/**
- * Load template's source from files into current template object
- *
- * @param Smarty_Template_Source $source source object
- * @return string template source
- * @throws SmartyException if source cannot be loaded
- */
+ * Load template's source from files into current template object
+ *
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string template source
+ * @throws SmartyException if source cannot be loaded
+ */
public function getContent(Smarty_Template_Source $source)
{
if (!$source->exists) {
throw new SmartyException("Unable to read template {$source->type} '{$source->name}'");
}
- $this->mbstring_overload = ini_get('mbstring.func_overload') & 2;
- $_rdl = preg_quote($source->smarty->right_delimiter);
- $_ldl = preg_quote($source->smarty->left_delimiter);
$_components = array_reverse($source->components);
- $_first = reset($_components);
- $_last = end($_components);
+ $_content = '';
foreach ($_components as $_component) {
- // register dependency
- if ($_component != $_first) {
- $source->template->properties['file_dependency'][$_component->uid] = array($_component->filepath, $_component->timestamp, $_component->type);
- }
-
// read content
- $source->filepath = $_component->filepath;
- $_content = $_component->content;
-
- // extend sources
- if ($_component != $_last) {
- if (preg_match_all("!({$_ldl}block\s(.+?){$_rdl})!", $_content, $_open) !=
- preg_match_all("!({$_ldl}/block{$_rdl})!", $_content, $_close)) {
- throw new SmartyException("unmatched {block} {/block} pairs in template {$_component->type} '{$_component->name}'");
- }
- preg_match_all("!{$_ldl}block\s(.+?){$_rdl}|{$_ldl}/block{$_rdl}|{$_ldl}\*([\S\s]*?)\*{$_rdl}!", $_content, $_result, PREG_OFFSET_CAPTURE);
- $_result_count = count($_result[0]);
- $_start = 0;
- while ($_start+1 < $_result_count) {
- $_end = 0;
- $_level = 1;
- if (($this->mbstring_overload ? mb_substr($_result[0][$_start][0],0,mb_strlen($source->smarty->left_delimiter,'latin1')+1, 'latin1') : substr($_result[0][$_start][0],0,strlen($source->smarty->left_delimiter)+1)) == $source->smarty->left_delimiter.'*') {
- $_start++;
- continue;
- }
- while ($_level != 0) {
- $_end++;
- if (($this->mbstring_overload ? mb_substr($_result[0][$_start + $_end][0],0,mb_strlen($source->smarty->left_delimiter,'latin1')+1, 'latin1') : substr($_result[0][$_start + $_end][0],0,strlen($source->smarty->left_delimiter)+1)) == $source->smarty->left_delimiter.'*') {
- continue;
- }
- if (!strpos($_result[0][$_start + $_end][0], '/')) {
- $_level++;
- } else {
- $_level--;
- }
- }
- $_block_content = str_replace($source->smarty->left_delimiter . '$smarty.block.parent' . $source->smarty->right_delimiter, '%%%%SMARTY_PARENT%%%%',
- ($this->mbstring_overload ? mb_substr($_content, $_result[0][$_start][1] + mb_strlen($_result[0][$_start][0], 'latin1'), $_result[0][$_start + $_end][1] - $_result[0][$_start][1] - + mb_strlen($_result[0][$_start][0], 'latin1'), 'latin1') : substr($_content, $_result[0][$_start][1] + strlen($_result[0][$_start][0]), $_result[0][$_start + $_end][1] - $_result[0][$_start][1] - + strlen($_result[0][$_start][0]))));
- Smarty_Internal_Compile_Block::saveBlockData($_block_content, $_result[0][$_start][0], $source->template, $_component->filepath);
- $_start = $_start + $_end + 1;
- }
- } else {
- return $_content;
- }
+ $_content .= $_component->content;
}
+ return $_content;
}
/**
- * Determine basename for compiled filename
- *
- * @param Smarty_Template_Source $source source object
- * @return string resource's basename
- */
+ * Determine basename for compiled filename
+ *
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string resource's basename
+ */
public function getBasename(Smarty_Template_Source $source)
{
return str_replace(':', '.', basename($source->filepath));
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_resource_file.php b/library/Smarty/libs/sysplugins/smarty_internal_resource_file.php
index 48b391d20..0abdc4495 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_resource_file.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_resource_file.php
@@ -2,29 +2,28 @@
/**
* Smarty Internal Plugin Resource File
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Uwe Tews
- * @author Rodney Rehm
+ * @author Uwe Tews
+ * @author Rodney Rehm
*/
/**
* Smarty Internal Plugin Resource File
- *
* Implements the file system as resource for Smarty templates
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
*/
-class Smarty_Internal_Resource_File extends Smarty_Resource {
-
+class Smarty_Internal_Resource_File extends Smarty_Resource
+{
/**
* populate Source Object with meta data from Resource
*
* @param Smarty_Template_Source $source source object
* @param Smarty_Internal_Template $_template template object
*/
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+ public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
{
$source->filepath = $this->buildFilepath($source, $_template);
@@ -33,7 +32,7 @@ class Smarty_Internal_Resource_File extends Smarty_Resource {
$source->smarty->security_policy->isTrustedResourceDir($source->filepath);
}
- $source->uid = sha1($source->filepath);
+ $source->uid = sha1(realpath($source->filepath));
if ($source->smarty->compile_check && !isset($source->timestamp)) {
$source->timestamp = @filemtime($source->filepath);
$source->exists = !!$source->timestamp;
@@ -55,9 +54,10 @@ class Smarty_Internal_Resource_File extends Smarty_Resource {
/**
* Load template's source from file into current template object
*
- * @param Smarty_Template_Source $source source object
- * @return string template source
- * @throws SmartyException if source cannot be loaded
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string template source
+ * @throws SmartyException if source cannot be loaded
*/
public function getContent(Smarty_Template_Source $source)
{
@@ -73,8 +73,9 @@ class Smarty_Internal_Resource_File extends Smarty_Resource {
/**
* Determine basename for compiled filename
*
- * @param Smarty_Template_Source $source source object
- * @return string resource's basename
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string resource's basename
*/
public function getBasename(Smarty_Template_Source $source)
{
@@ -82,9 +83,7 @@ class Smarty_Internal_Resource_File extends Smarty_Resource {
if (($_pos = strpos($_file, ']')) !== false) {
$_file = substr($_file, $_pos + 1);
}
+
return basename($_file);
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_resource_php.php b/library/Smarty/libs/sysplugins/smarty_internal_resource_php.php
index 7cd8baeec..7463c2960 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_resource_php.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_resource_php.php
@@ -2,38 +2,40 @@
/**
* Smarty Internal Plugin Resource PHP
- *
* Implements the file system as resource for PHP templates
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Uwe Tews
- * @author Rodney Rehm
+ * @author Uwe Tews
+ * @author Rodney Rehm
*/
-class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled {
+class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled
+{
/**
* container for short_open_tag directive's value before executing PHP templates
+ *
* @var string
*/
protected $short_open_tag;
/**
* Create a new PHP Resource
- *
+
*/
public function __construct()
{
- $this->short_open_tag = ini_get( 'short_open_tag' );
+ $this->short_open_tag = ini_get('short_open_tag');
}
/**
* populate Source Object with meta data from Resource
*
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
+ * @param Smarty_Template_Source $source source object
+ * @param Smarty_Internal_Template $_template template object
+ *
* @return void
*/
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+ public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
{
$source->filepath = $this->buildFilepath($source, $_template);
@@ -53,7 +55,8 @@ class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled {
/**
* populate Source Object with timestamp and exists from Resource
*
- * @param Smarty_Template_Source $source source object
+ * @param Smarty_Template_Source $source source object
+ *
* @return void
*/
public function populateTimestamp(Smarty_Template_Source $source)
@@ -65,9 +68,10 @@ class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled {
/**
* Load template's source from file into current template object
*
- * @param Smarty_Template_Source $source source object
- * @return string template source
- * @throws SmartyException if source cannot be loaded
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string template source
+ * @throws SmartyException if source cannot be loaded
*/
public function getContent(Smarty_Template_Source $source)
{
@@ -80,15 +84,14 @@ class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled {
/**
* Render and output the template (without using the compiler)
*
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
+ * @param Smarty_Template_Source $source source object
+ * @param Smarty_Internal_Template $_template template object
+ *
* @return void
- * @throws SmartyException if template cannot be loaded or allow_php_templates is disabled
+ * @throws SmartyException if template cannot be loaded or allow_php_templates is disabled
*/
public function renderUncompiled(Smarty_Template_Source $source, Smarty_Internal_Template $_template)
{
- $_smarty_template = $_template;
-
if (!$source->smarty->allow_php_templates) {
throw new SmartyException("PHP templates are disabled");
}
@@ -105,10 +108,12 @@ class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled {
extract($_template->getTemplateVars());
// include PHP template with short open tags enabled
- ini_set( 'short_open_tag', '1' );
+ ini_set('short_open_tag', '1');
+ /** @var Smarty_Internal_Template $_smarty_template
+ * used in included file
+ */
+ $_smarty_template = $_template;
include($source->filepath);
- ini_set( 'short_open_tag', $this->short_open_tag );
+ ini_set('short_open_tag', $this->short_open_tag);
}
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_resource_registered.php b/library/Smarty/libs/sysplugins/smarty_internal_resource_registered.php
index 44497b922..f12d843e1 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_resource_registered.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_resource_registered.php
@@ -2,31 +2,31 @@
/**
* Smarty Internal Plugin Resource Registered
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Uwe Tews
- * @author Rodney Rehm
+ * @author Uwe Tews
+ * @author Rodney Rehm
*/
/**
* Smarty Internal Plugin Resource Registered
- *
* Implements the registered resource for Smarty template
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
* @deprecated
*/
-class Smarty_Internal_Resource_Registered extends Smarty_Resource {
-
+class Smarty_Internal_Resource_Registered extends Smarty_Resource
+{
/**
* populate Source Object with meta data from Resource
*
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
+ * @param Smarty_Template_Source $source source object
+ * @param Smarty_Internal_Template $_template template object
+ *
* @return void
*/
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+ public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
{
$source->filepath = $source->type . ':' . $source->name;
$source->uid = sha1($source->filepath);
@@ -39,7 +39,8 @@ class Smarty_Internal_Resource_Registered extends Smarty_Resource {
/**
* populate Source Object with timestamp and exists from Resource
*
- * @param Smarty_Template_Source $source source object
+ * @param Smarty_Template_Source $source source object
+ *
* @return void
*/
public function populateTimestamp(Smarty_Template_Source $source)
@@ -51,23 +52,26 @@ class Smarty_Internal_Resource_Registered extends Smarty_Resource {
/**
* Get timestamp (epoch) the template source was modified
*
- * @param Smarty_Template_Source $source source object
- * @return integer|boolean timestamp (epoch) the template was modified, false if resources has no timestamp
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return integer|boolean timestamp (epoch) the template was modified, false if resources has no timestamp
*/
public function getTemplateTimestamp(Smarty_Template_Source $source)
{
// return timestamp
$time_stamp = false;
call_user_func_array($source->smarty->registered_resources[$source->type][0][1], array($source->name, &$time_stamp, $source->smarty));
+
return is_numeric($time_stamp) ? (int) $time_stamp : $time_stamp;
}
/**
* Load template's source by invoking the registered callback into current template object
*
- * @param Smarty_Template_Source $source source object
- * @return string template source
- * @throws SmartyException if source cannot be loaded
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string template source
+ * @throws SmartyException if source cannot be loaded
*/
public function getContent(Smarty_Template_Source $source)
{
@@ -76,20 +80,19 @@ class Smarty_Internal_Resource_Registered extends Smarty_Resource {
if (is_bool($t) && !$t) {
throw new SmartyException("Unable to read template {$source->type} '{$source->name}'");
}
+
return $source->content;
}
/**
* Determine basename for compiled filename
*
- * @param Smarty_Template_Source $source source object
- * @return string resource's basename
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string resource's basename
*/
protected function getBasename(Smarty_Template_Source $source)
{
return basename($source->name);
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_resource_stream.php b/library/Smarty/libs/sysplugins/smarty_internal_resource_stream.php
index 85698c232..f7d1aac31 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_resource_stream.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_resource_stream.php
@@ -1,36 +1,39 @@
<?php
/**
* Smarty Internal Plugin Resource Stream
- *
* Implements the streams as resource for Smarty template
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Uwe Tews
- * @author Rodney Rehm
+ * @author Uwe Tews
+ * @author Rodney Rehm
*/
/**
* Smarty Internal Plugin Resource Stream
- *
* Implements the streams as resource for Smarty template
*
- * @link http://php.net/streams
- * @package Smarty
+ * @link http://php.net/streams
+ * @package Smarty
* @subpackage TemplateResources
*/
-class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled {
-
+class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled
+{
/**
* populate Source Object with meta data from Resource
*
* @param Smarty_Template_Source $source source object
* @param Smarty_Internal_Template $_template template object
+ *
* @return void
*/
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+ public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
{
- $source->filepath = str_replace(':', '://', $source->resource);
+ if (strpos($source->resource, '://') !== false) {
+ $source->filepath = $source->resource;
+ } else {
+ $source->filepath = str_replace(':', '://', $source->resource);
+ }
$source->uid = false;
$source->content = $this->getContent($source);
$source->timestamp = false;
@@ -41,6 +44,7 @@ class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled {
* Load template's source from stream into current template object
*
* @param Smarty_Template_Source $source source object
+ *
* @return string template source
* @throws SmartyException if source cannot be loaded
*/
@@ -54,23 +58,24 @@ class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled {
$t .= $current_line;
}
fclose($fp);
+
return $t;
} else {
return false;
}
}
-
+
/**
* modify resource_name according to resource handlers specifications
*
- * @param Smarty $smarty Smarty instance
- * @param string $resource_name resource_name to make unique
+ * @param Smarty $smarty Smarty instance
+ * @param string $resource_name resource_name to make unique
+ * @param boolean $is_config flag for config resource
+ *
* @return string unique resource name
*/
- protected function buildUniqueResourceName(Smarty $smarty, $resource_name)
+ protected function buildUniqueResourceName(Smarty $smarty, $resource_name, $is_config = false)
{
return get_class($this) . '#' . $resource_name;
}
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_resource_string.php b/library/Smarty/libs/sysplugins/smarty_internal_resource_string.php
index 9571337b0..bfa069974 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_resource_string.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_resource_string.php
@@ -2,32 +2,31 @@
/**
* Smarty Internal Plugin Resource String
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Uwe Tews
- * @author Rodney Rehm
+ * @author Uwe Tews
+ * @author Rodney Rehm
*/
/**
* Smarty Internal Plugin Resource String
- *
* Implements the strings as resource for Smarty template
- *
* {@internal unlike eval-resources the compiled state of string-resources is saved for subsequent access}}
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
*/
-class Smarty_Internal_Resource_String extends Smarty_Resource {
-
+class Smarty_Internal_Resource_String extends Smarty_Resource
+{
/**
* populate Source Object with meta data from Resource
*
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
+ * @param Smarty_Template_Source $source source object
+ * @param Smarty_Internal_Template $_template template object
+ *
* @return void
*/
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+ public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
{
$source->uid = $source->filepath = sha1($source->name);
$source->timestamp = 0;
@@ -38,18 +37,21 @@ class Smarty_Internal_Resource_String extends Smarty_Resource {
* Load template's source from $resource_name into current template object
*
* @uses decode() to decode base64 and urlencoded template_resources
- * @param Smarty_Template_Source $source source object
- * @return string template source
+ *
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string template source
*/
public function getContent(Smarty_Template_Source $source)
{
return $this->decode($source->name);
}
-
+
/**
* decode base64 and urlencode
*
- * @param string $string template_resource to decode
+ * @param string $string template_resource to decode
+ *
* @return string decoded template_resource
*/
protected function decode($string)
@@ -62,35 +64,34 @@ class Smarty_Internal_Resource_String extends Smarty_Resource {
return urldecode(substr($string, 10));
}
}
-
+
return $string;
}
-
+
/**
* modify resource_name according to resource handlers specifications
*
- * @param Smarty $smarty Smarty instance
- * @param string $resource_name resource_name to make unique
+ * @param Smarty $smarty Smarty instance
+ * @param string $resource_name resource_name to make unique
+ * @param boolean $is_config flag for config resource
+ *
* @return string unique resource name
*/
- protected function buildUniqueResourceName(Smarty $smarty, $resource_name)
+ protected function buildUniqueResourceName(Smarty $smarty, $resource_name, $is_config = false)
{
- return get_class($this) . '#' .$this->decode($resource_name);
+ return get_class($this) . '#' . $this->decode($resource_name);
}
/**
* Determine basename for compiled filename
- *
* Always returns an empty string.
*
- * @param Smarty_Template_Source $source source object
- * @return string resource's basename
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string resource's basename
*/
protected function getBasename(Smarty_Template_Source $source)
{
return '';
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php b/library/Smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php
index 1ec1aa430..50bd16ef2 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php
@@ -1,27 +1,26 @@
<?php
/**
* Smarty Internal Plugin Smarty Template Compiler Base
+ * This file contains the basic classes and methods for compiling Smarty templates with lexer/parser
*
- * This file contains the basic classes and methodes for compiling Smarty templates with lexer/parser
- *
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* @ignore
*/
-include ("smarty_internal_parsetree.php");
+include 'smarty_internal_parsetree.php';
/**
* Class SmartyTemplateCompiler
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCompilerBase {
-
+class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCompilerBase
+{
/**
* Lexer class name
*
@@ -81,10 +80,11 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom
}
/**
- * Methode to compile a Smarty template
+ * method to compile a Smarty template
*
* @param mixed $_content template source
- * @return bool true if compiling succeeded, false if it failed
+ *
+ * @return bool true if compiling succeeded, false if it failed
*/
protected function doCompile($_content)
{
@@ -94,8 +94,21 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom
// init the lexer/parser to compile the template
$this->lex = new $this->lexer_class($_content, $this);
$this->parser = new $this->parser_class($this->lex, $this);
- if ($this->smarty->_parserdebug)
+ if ($this->inheritance_child) {
+ // start state on child templates
+ $this->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBODY);
+ }
+ if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) {
+ $mbEncoding = mb_internal_encoding();
+ mb_internal_encoding('ASCII');
+ } else {
+ $mbEncoding = null;
+ }
+
+ if ($this->smarty->_parserdebug) {
$this->parser->PrintTrace();
+ $this->lex->PrintTrace();
+ }
// get tokens from lexer and parse them
while ($this->lex->yylex() && !$this->abort_and_recompile) {
if ($this->smarty->_parserdebug) {
@@ -111,17 +124,17 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom
}
// finish parsing process
$this->parser->doParse(0, 0);
+ if ($mbEncoding) {
+ mb_internal_encoding($mbEncoding);
+ }
// check for unclosed tags
if (count($this->_tag_stack) > 0) {
// get stacked info
list($openTag, $_data) = array_pop($this->_tag_stack);
- $this->trigger_template_error("unclosed {" . $openTag . "} tag");
+ $this->trigger_template_error("unclosed {$this->smarty->left_delimiter}" . $openTag . "{$this->smarty->right_delimiter} tag");
}
// return compiled code
// return str_replace(array("? >\n<?php","? ><?php"), array('',''), $this->parser->retvalue);
return $this->parser->retvalue;
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_template.php b/library/Smarty/libs/sysplugins/smarty_internal_template.php
index de9d54cf6..f1a73a4ae 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_template.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_template.php
@@ -1,28 +1,27 @@
<?php
/**
* Smarty Internal Plugin Template
- *
* This file contains the Smarty template engine
*
- * @package Smarty
+ * @package Smarty
* @subpackage Template
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Main class with template data structures and methods
*
- * @package Smarty
+ * @package Smarty
* @subpackage Template
- *
* @property Smarty_Template_Source $source
* @property Smarty_Template_Compiled $compiled
* @property Smarty_Template_Cached $cached
*/
-class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
-
+class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
+{
/**
* cache_id
+ *
* @var string
*/
public $cache_id = null;
@@ -33,95 +32,108 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
public $compile_id = null;
/**
* caching enabled
+ *
* @var boolean
*/
public $caching = null;
/**
* cache lifetime in seconds
+ *
* @var integer
*/
public $cache_lifetime = null;
/**
* Template resource
+ *
* @var string
*/
public $template_resource = null;
/**
* flag if compiled template is invalid and must be (re)compiled
+ *
* @var bool
*/
public $mustCompile = null;
/**
* flag if template does contain nocache code sections
+ *
* @var bool
*/
public $has_nocache_code = false;
/**
* special compiled and cached template properties
+ *
* @var array
*/
public $properties = array('file_dependency' => array(),
- 'nocache_hash' => '',
- 'function' => array());
+ 'nocache_hash' => '',
+ 'function' => array());
/**
* required plugins
+ *
* @var array
*/
public $required_plugins = array('compiled' => array(), 'nocache' => array());
/**
* Global smarty instance
+ *
* @var Smarty
*/
public $smarty = null;
/**
* blocks for template inheritance
+ *
* @var array
*/
public $block_data = array();
/**
* variable filters
+ *
* @var array
*/
public $variable_filters = array();
/**
* optional log of tag/attributes
+ *
* @var array
*/
public $used_tags = array();
/**
* internal flag to allow relative path in child template blocks
+ *
* @var bool
*/
public $allow_relative_path = false;
/**
* internal capture runtime stack
+ *
* @var array
*/
public $_capture_stack = array(0 => array());
/**
* Create template data object
- *
* Some of the global Smarty settings copied to template scope
* It load the required template resources and cacher plugins
*
* @param string $template_resource template resource string
* @param Smarty $smarty Smarty instance
* @param Smarty_Internal_Template $_parent back pointer to parent object with variables or null
- * @param mixed $_cache_id cache id or null
+ * @param mixed $_cache_id cache id or null
* @param mixed $_compile_id compile id or null
* @param bool $_caching use caching?
* @param int $_cache_lifetime cache life-time in seconds
*/
public function __construct($template_resource, $smarty, $_parent = null, $_cache_id = null, $_compile_id = null, $_caching = null, $_cache_lifetime = null)
{
- $this->smarty = &$smarty;
+ $this->smarty = & $smarty;
// Smarty parameter
$this->cache_id = $_cache_id === null ? $this->smarty->cache_id : $_cache_id;
$this->compile_id = $_compile_id === null ? $this->smarty->compile_id : $_compile_id;
$this->caching = $_caching === null ? $this->smarty->caching : $_caching;
- if ($this->caching === true)
+ if ($this->caching === true) {
$this->caching = Smarty::CACHING_LIFETIME_CURRENT;
+ }
$this->cache_lifetime = $_cache_lifetime === null ? $this->smarty->cache_lifetime : $_cache_lifetime;
$this->parent = $_parent;
// Template resource
@@ -134,9 +146,9 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
/**
* Returns if the current template must be compiled by the Smarty compiler
- *
* It does compare the timestamps of template source and the compiled templates and checks the force compile configuration
*
+ * @throws SmartyException
* @return boolean true if the template must be compiled
*/
public function mustCompile()
@@ -153,12 +165,12 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
$this->mustCompile = (!$this->source->uncompiled && ($this->smarty->force_compile || $this->source->recompiled || $this->compiled->timestamp === false ||
($this->smarty->compile_check && $this->compiled->timestamp < $this->source->timestamp)));
}
+
return $this->mustCompile;
}
/**
* Compiles the template
- *
* If the template is not evaluated the compiled template is saved on disk
*/
public function compileTemplateSource()
@@ -166,16 +178,14 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
if (!$this->source->recompiled) {
$this->properties['file_dependency'] = array();
if ($this->source->components) {
+ // for the extends resource the compiler will fill it
// uses real resource for file dependency
- $source = end($this->source->components);
- $this->properties['file_dependency'][$this->source->uid] = array($this->source->filepath, $this->source->timestamp, $source->type);
+ // $source = end($this->source->components);
+ // $this->properties['file_dependency'][$this->source->uid] = array($this->source->filepath, $this->source->timestamp, $source->type);
} else {
$this->properties['file_dependency'][$this->source->uid] = array($this->source->filepath, $this->source->timestamp, $this->source->type);
}
}
- if ($this->smarty->debugging) {
- Smarty_Internal_Debug::start_compile($this);
- }
// compile locking
if ($this->smarty->compile_locking && !$this->source->recompiled) {
if ($saved_timestamp = $this->compiled->timestamp) {
@@ -185,7 +195,8 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
// call compiler
try {
$code = $this->compiler->compileTemplate($this);
- } catch (Exception $e) {
+ }
+ catch (Exception $e) {
// restore old timestamp in case of error
if ($this->smarty->compile_locking && !$this->source->recompiled && $saved_timestamp) {
touch($this->compiled->filepath, $saved_timestamp);
@@ -196,15 +207,13 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
if (!$this->source->recompiled && $this->compiler->write_compiled_code) {
// write compiled template
$_filepath = $this->compiled->filepath;
- if ($_filepath === false)
+ if ($_filepath === false) {
throw new SmartyException('getCompiledFilepath() did not return a destination to save the compiled template to');
+ }
Smarty_Internal_Write_File::writeFile($_filepath, $code, $this->smarty);
$this->compiled->exists = true;
$this->compiled->isCompiled = true;
}
- if ($this->smarty->debugging) {
- Smarty_Internal_Debug::end_compile($this);
- }
// release compiler object to free memory
unset($this->compiler);
}
@@ -212,6 +221,8 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
/**
* Writes the cached template output
*
+ * @param string $content
+ *
* @return bool
*/
public function writeCachedContent($content)
@@ -220,13 +231,18 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
// don't write cache file
return false;
}
+ $this->cached->timestamp = time();
$this->properties['cache_lifetime'] = $this->cache_lifetime;
- $this->properties['unifunc'] = 'content_' . str_replace('.', '_', uniqid('', true));
+ $this->properties['unifunc'] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true));
$content = $this->createTemplateCodeFrame($content, true);
+ /** @var Smarty_Internal_Template $_smarty_tpl
+ * used in evaluated code
+ */
$_smarty_tpl = $this;
eval("?>" . $content);
$this->cached->valid = true;
$this->cached->processed = true;
+
return $this->cached->write($this, $content);
}
@@ -238,15 +254,16 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
* @param mixed $compile_id compile id to be used with this template
* @param integer $caching cache mode
* @param integer $cache_lifetime life time of cache data
- * @param array $vars optional variables to assign
+ * @param $data
* @param int $parent_scope scope in which {include} should execute
+ *
* @returns string template content
*/
public function getSubTemplate($template, $cache_id, $compile_id, $caching, $cache_lifetime, $data, $parent_scope)
{
// already in template cache?
if ($this->smarty->allow_ambiguous_resources) {
- $_templateId = Smarty_Resource::getUniqueTemplateName($this->smarty, $template) . $cache_id . $compile_id;
+ $_templateId = Smarty_Resource::getUniqueTemplateName($this, $template) . $cache_id . $compile_id;
} else {
$_templateId = $this->smarty->joined_template_dir . '#' . $template . $cache_id . $compile_id;
}
@@ -268,13 +285,13 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
$tpl->tpl_vars = $this->tpl_vars;
$tpl->tpl_vars['smarty'] = clone $this->tpl_vars['smarty'];
} elseif ($parent_scope == Smarty::SCOPE_PARENT) {
- $tpl->tpl_vars = &$this->tpl_vars;
+ $tpl->tpl_vars = & $this->tpl_vars;
} elseif ($parent_scope == Smarty::SCOPE_GLOBAL) {
- $tpl->tpl_vars = &Smarty::$global_tpl_vars;
+ $tpl->tpl_vars = & Smarty::$global_tpl_vars;
} elseif (($scope_ptr = $this->getScopePointer($parent_scope)) == null) {
- $tpl->tpl_vars = &$this->tpl_vars;
+ $tpl->tpl_vars = & $this->tpl_vars;
} else {
- $tpl->tpl_vars = &$scope_ptr->tpl_vars;
+ $tpl->tpl_vars = & $scope_ptr->tpl_vars;
}
$tpl->config_vars = $this->config_vars;
if (!empty($data)) {
@@ -283,6 +300,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
$tpl->tpl_vars[$_key] = new Smarty_variable($_val);
}
}
+
return $tpl->fetch(null, null, null, null, false, false, true);
}
@@ -294,27 +312,28 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
* @param mixed $compile_id compile id to be used with this template
* @param integer $caching cache mode
* @param integer $cache_lifetime life time of cache data
- * @param array $vars optional variables to assign
+ * @param $data
* @param int $parent_scope scope in which {include} should execute
* @param string $hash nocache hash code
+ *
* @returns string template content
*/
public function setupInlineSubTemplate($template, $cache_id, $compile_id, $caching, $cache_lifetime, $data, $parent_scope, $hash)
{
$tpl = new $this->smarty->template_class($template, $this->smarty, $this, $cache_id, $compile_id, $caching, $cache_lifetime);
- $tpl->properties['nocache_hash'] = $hash;
+ $tpl->properties['nocache_hash'] = $hash;
// get variables from calling scope
- if ($parent_scope == Smarty::SCOPE_LOCAL ) {
+ if ($parent_scope == Smarty::SCOPE_LOCAL) {
$tpl->tpl_vars = $this->tpl_vars;
$tpl->tpl_vars['smarty'] = clone $this->tpl_vars['smarty'];
} elseif ($parent_scope == Smarty::SCOPE_PARENT) {
- $tpl->tpl_vars = &$this->tpl_vars;
+ $tpl->tpl_vars = & $this->tpl_vars;
} elseif ($parent_scope == Smarty::SCOPE_GLOBAL) {
- $tpl->tpl_vars = &Smarty::$global_tpl_vars;
+ $tpl->tpl_vars = & Smarty::$global_tpl_vars;
} elseif (($scope_ptr = $this->getScopePointer($parent_scope)) == null) {
- $tpl->tpl_vars = &$this->tpl_vars;
+ $tpl->tpl_vars = & $this->tpl_vars;
} else {
- $tpl->tpl_vars = &$scope_ptr->tpl_vars;
+ $tpl->tpl_vars = & $scope_ptr->tpl_vars;
}
$tpl->config_vars = $this->config_vars;
if (!empty($data)) {
@@ -323,15 +342,16 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
$tpl->tpl_vars[$_key] = new Smarty_variable($_val);
}
}
+
return $tpl;
}
-
/**
* Create code frame for compiled and cached templates
*
- * @param string $content optional template content
- * @param bool $cache flag for cache file
+ * @param string $content optional template content
+ * @param bool $cache flag for cache file
+ *
* @return string
*/
public function createTemplateCodeFrame($content = '', $cache = false)
@@ -344,7 +364,11 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
foreach ($this->required_plugins['compiled'] as $tmp) {
foreach ($tmp as $data) {
$file = addslashes($data['file']);
- $plugins_string .= "if (!is_callable('{$data['function']}')) include '{$file}';\n";
+ if (is_Array($data['function'])) {
+ $plugins_string .= "if (!is_callable(array('{$data['function'][0]}','{$data['function'][1]}'))) include '{$file}';\n";
+ } else {
+ $plugins_string .= "if (!is_callable('{$data['function']}')) include '{$file}';\n";
+ }
}
}
$plugins_string .= '?>';
@@ -355,7 +379,11 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
foreach ($this->required_plugins['nocache'] as $tmp) {
foreach ($tmp as $data) {
$file = addslashes($data['file']);
- $plugins_string .= addslashes("if (!is_callable('{$data['function']}')) include '{$file}';\n");
+ if (is_Array($data['function'])) {
+ $plugins_string .= addslashes("if (!is_callable(array('{$data['function'][0]}','{$data['function'][1]}'))) include '{$file}';\n");
+ } else {
+ $plugins_string .= addslashes("if (!is_callable('{$data['function']}')) include '{$file}';\n");
+ }
}
}
$plugins_string .= "?>/*/%%SmartyNocache:{$this->properties['nocache_hash']}%%*/';?>\n";
@@ -382,7 +410,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
}
}
}
- foreach ($this->smarty->template_functions as $name => $function_data) {
+ foreach ($this->smarty->template_functions as $name => $function_data) {
if (isset($function_data['called_nocache'])) {
unset($function_data['called_nocache'], $function_data['called_functions'], $this->smarty->template_functions[$name]['called_nocache']);
$this->properties['function'][$name] = $function_data;
@@ -392,7 +420,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
}
$this->properties['version'] = Smarty::SMARTY_VERSION;
if (!isset($this->properties['unifunc'])) {
- $this->properties['unifunc'] = 'content_' . str_replace('.', '_', uniqid('', true));
+ $this->properties['unifunc'] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true));
}
if (!$this->source->recompiled) {
$output .= "\$_valid = \$_smarty_tpl->decodeProperties(" . var_export($this->properties, true) . ',' . ($cache ? 'true' : 'false') . "); /*/%%SmartyHeaderCode%%*/?>\n";
@@ -401,20 +429,21 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
$output .= $plugins_string;
$output .= $content;
if (!$this->source->recompiled) {
- $output .= '<?php }} ?>';
+ $output .= "<?php }} ?>\n";
}
+
return $output;
}
/**
* This function is executed automatically when a compiled or cached template file is included
- *
* - Decode saved properties from compiled template and cache files
* - Check if compiled or cache file is valid
*
- * @param array $properties special template properties
- * @param bool $cache flag if called from cache file
- * @return bool flag if compiled or cache file is valid
+ * @param array $properties special template properties
+ * @param bool $cache flag if called from cache file
+ *
+ * @return bool flag if compiled or cache file is valid
*/
public function decodeProperties($properties, $cache = false)
{
@@ -436,7 +465,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
$is_valid = true;
if ($this->properties['version'] != Smarty::SMARTY_VERSION) {
$is_valid = false;
- } else if (((!$cache && $this->smarty->compile_check && empty($this->compiled->_properties) && !$this->compiled->isCompiled) || $cache && ($this->smarty->compile_check === true || $this->smarty->compile_check === Smarty::COMPILECHECK_ON)) && !empty($this->properties['file_dependency'])) {
+ } elseif (((!$cache && $this->smarty->compile_check && empty($this->compiled->_properties) && !$this->compiled->isCompiled) || $cache && ($this->smarty->compile_check === true || $this->smarty->compile_check === Smarty::COMPILECHECK_ON)) && !empty($this->properties['file_dependency'])) {
foreach ($this->properties['file_dependency'] as $_file_to_check) {
if ($_file_to_check[2] == 'file' || $_file_to_check[2] == 'php') {
if ($this->source->filepath == $_file_to_check[0] && isset($this->source->timestamp)) {
@@ -459,6 +488,13 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
}
}
if ($cache) {
+ // CACHING_LIFETIME_SAVED cache expiry has to be validated here since otherwise we'd define the unifunc
+ if ($this->caching === Smarty::CACHING_LIFETIME_SAVED &&
+ $this->properties['cache_lifetime'] >= 0 &&
+ (time() > ($this->cached->timestamp + $this->properties['cache_lifetime']))
+ ) {
+ $is_valid = false;
+ }
$this->cached->valid = $is_valid;
} else {
$this->mustCompile = !$is_valid;
@@ -467,15 +503,16 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
if (!$cache) {
$this->compiled->_properties = $properties;
}
+
return $is_valid;
}
/**
* Template code runtime function to create a local Smarty variable for array assignments
*
- * @param string $tpl_var tempate variable name
- * @param bool $nocache cache mode of variable
- * @param int $scope scope of variable
+ * @param string $tpl_var tempate variable name
+ * @param bool $nocache cache mode of variable
+ * @param int $scope scope of variable
*/
public function createLocalArrayVariable($tpl_var, $nocache = false, $scope = Smarty::SCOPE_LOCAL)
{
@@ -495,8 +532,9 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
/**
* Template code runtime function to get pointer to template variable array of requested scope
*
- * @param int $scope requested variable scope
- * @return array array of template variables
+ * @param int $scope requested variable scope
+ *
+ * @return array array of template variables
*/
public function &getScope($scope)
{
@@ -507,18 +545,21 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
while (!empty($ptr->parent)) {
$ptr = $ptr->parent;
}
+
return $ptr->tpl_vars;
} elseif ($scope == Smarty::SCOPE_GLOBAL) {
return Smarty::$global_tpl_vars;
}
$null = null;
+
return $null;
}
/**
* Get parent or root of template parent chain
*
- * @param int $scope pqrent or root scope
+ * @param int $scope pqrent or root scope
+ *
* @return mixed object
*/
public function getScopePointer($scope)
@@ -530,16 +571,19 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
while (!empty($ptr->parent)) {
$ptr = $ptr->parent;
}
+
return $ptr;
}
+
return null;
}
/**
* [util function] counts an array, arrayaccess/traversable or PDOStatement object
*
- * @param mixed $value
- * @return int the count for arrays and objects that implement countable, 1 for other objects that don't, and 0 for empty elements
+ * @param mixed $value
+ *
+ * @return int the count for arrays and objects that implement countable, 1 for other objects that don't, and 0 for empty elements
*/
public function _count($value)
{
@@ -562,12 +606,13 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
} elseif (is_object($value)) {
return count($value);
}
+
return 0;
}
/**
* runtime error not matching capture tags
- *
+
*/
public function capture_error()
{
@@ -575,22 +620,26 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
}
/**
- * Empty cache for this template
- *
- * @param integer $exp_time expiration time
- * @return integer number of cache files deleted
- */
- public function clearCache($exp_time=null)
+ * Empty cache for this template
+ *
+ * @param integer $exp_time expiration time
+ *
+ * @return integer number of cache files deleted
+ */
+ public function clearCache($exp_time = null)
{
Smarty_CacheResource::invalidLoadedCache($this->smarty);
+
return $this->cached->handler->clear($this->smarty, $this->template_name, $this->cache_id, $this->compile_id, $exp_time);
}
- /**
+ /**
* set Smarty property in template context
*
* @param string $property_name property name
* @param mixed $value value
+ *
+ * @throws SmartyException
*/
public function __set($property_name, $value)
{
@@ -600,12 +649,14 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
case 'cached':
case 'compiler':
$this->$property_name = $value;
+
return;
// FIXME: routing of template -> smarty attributes
default:
if (property_exists($this->smarty, $property_name)) {
$this->smarty->$property_name = $value;
+
return;
}
}
@@ -617,6 +668,8 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
* get Smarty property in template context
*
* @param string $property_name property name
+ *
+ * @throws SmartyException
*/
public function __get($property_name)
{
@@ -640,10 +693,12 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
}
$this->smarty->template_objects[$_templateId] = $this;
}
+
return $this->source;
case 'compiled':
$this->compiled = $this->source->getCompiled($this);
+
return $this->compiled;
case 'cached':
@@ -651,11 +706,13 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
include SMARTY_SYSPLUGINS_DIR . 'smarty_cacheresource.php';
}
$this->cached = new Smarty_Template_Cached($this);
+
return $this->cached;
case 'compiler':
$this->smarty->loadPlugin($this->source->compiler_class);
$this->compiler = new $this->source->compiler_class($this->source->template_lexer_class, $this->source->template_parser_class, $this->smarty);
+
return $this->compiler;
// FIXME: routing of template -> smarty attributes
@@ -669,8 +726,8 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
}
/**
- * Template data object destrutor
- *
+ * Template data object destructor
+
*/
public function __destruct()
{
@@ -678,7 +735,4 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
$this->cached->handler->releaseLock($this->smarty, $this->cached);
}
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_templatebase.php b/library/Smarty/libs/sysplugins/smarty_internal_templatebase.php
index abd48b799..f8f1c9e1e 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_templatebase.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_templatebase.php
@@ -1,32 +1,34 @@
<?php
/**
* Smarty Internal Plugin Smarty Template Base
+ * This file contains the basic shared methods for template handling
*
- * This file contains the basic shared methodes for template handling
- *
- * @package Smarty
+ * @package Smarty
* @subpackage Template
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
- * Class with shared template methodes
+ * Class with shared template methods
*
- * @package Smarty
+ * @package Smarty
* @subpackage Template
*/
-abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
-
+abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data
+{
/**
* fetches a rendered Smarty template
*
- * @param string $template the resource handle of the template file or template object
- * @param mixed $cache_id cache id to be used with this template
- * @param mixed $compile_id compile id to be used with this template
- * @param object $parent next higher level of Smarty variables
- * @param bool $display true: display, false: fetch
- * @param bool $merge_tpl_vars if true parent template variables merged in to local scope
- * @param bool $no_output_filter if true do not run output filter
+ * @param string $template the resource handle of the template file or template object
+ * @param mixed $cache_id cache id to be used with this template
+ * @param mixed $compile_id compile id to be used with this template
+ * @param object $parent next higher level of Smarty variables
+ * @param bool $display true: display, false: fetch
+ * @param bool $merge_tpl_vars if true parent template variables merged in to local scope
+ * @param bool $no_output_filter if true do not run output filter
+ *
+ * @throws Exception
+ * @throws SmartyException
* @return string rendered template output
*/
public function fetch($template = null, $cache_id = null, $compile_id = null, $parent = null, $display = false, $merge_tpl_vars = true, $no_output_filter = false)
@@ -34,7 +36,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
if ($template === null && $this instanceof $this->template_class) {
$template = $this;
}
- if (!empty($cache_id) && is_object($cache_id)) {
+ if ($cache_id !== null && is_object($cache_id)) {
$parent = $cache_id;
$cache_id = null;
}
@@ -43,8 +45,8 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
}
// create template object if necessary
$_template = ($template instanceof $this->template_class)
- ? $template
- : $this->smarty->createTemplate($template, $cache_id, $compile_id, $parent, false);
+ ? $template
+ : $this->smarty->createTemplate($template, $cache_id, $compile_id, $parent, false);
// if called by Smarty object make sure we use current caching status
if ($this instanceof Smarty) {
$_template->caching = $this->caching;
@@ -130,29 +132,32 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
if (!($_template->caching == Smarty::CACHING_LIFETIME_CURRENT || $_template->caching == Smarty::CACHING_LIFETIME_SAVED) || !$_template->cached->valid) {
// render template (not loaded and not in cache)
if (!$_template->source->uncompiled) {
+ /** @var Smarty_Internal_Template $_smarty_tpl
+ * used in evaluated code
+ */
$_smarty_tpl = $_template;
if ($_template->source->recompiled) {
- if ($this->smarty->debugging) {
- Smarty_Internal_Debug::start_compile($_template);
- }
$code = $_template->compiler->compileTemplate($_template);
if ($this->smarty->debugging) {
- Smarty_Internal_Debug::end_compile($_template);
- }
- if ($this->smarty->debugging) {
Smarty_Internal_Debug::start_render($_template);
}
try {
ob_start();
eval("?>" . $code);
unset($code);
- } catch (Exception $e) {
+ }
+ catch (Exception $e) {
ob_get_clean();
throw $e;
}
} else {
if (!$_template->compiled->exists || ($_template->smarty->force_compile && !$_template->compiled->isCompiled)) {
$_template->compileTemplateSource();
+ $code = file_get_contents($_template->compiled->filepath);
+ eval("?>" . $code);
+ unset($code);
+ $_template->compiled->loaded = true;
+ $_template->compiled->isCompiled = true;
}
if ($this->smarty->debugging) {
Smarty_Internal_Debug::start_render($_template);
@@ -162,7 +167,10 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
if ($_template->mustCompile) {
// recompile and load again
$_template->compileTemplateSource();
- include($_template->compiled->filepath);
+ $code = file_get_contents($_template->compiled->filepath);
+ eval("?>" . $code);
+ unset($code);
+ $_template->compiled->isCompiled = true;
}
$_template->compiled->loaded = true;
} else {
@@ -173,7 +181,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
if (empty($_template->properties['unifunc']) || !is_callable($_template->properties['unifunc'])) {
throw new SmartyException("Invalid compiled template for '{$_template->template_resource}'");
}
- array_unshift($_template->_capture_stack,array());
+ array_unshift($_template->_capture_stack, array());
//
// render compiled template
//
@@ -183,7 +191,8 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
$_template->capture_error();
}
array_shift($_template->_capture_stack);
- } catch (Exception $e) {
+ }
+ catch (Exception $e) {
ob_get_clean();
throw $e;
}
@@ -196,7 +205,8 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
try {
ob_start();
$_template->source->renderUncompiled($_template);
- } catch (Exception $e) {
+ }
+ catch (Exception $e) {
ob_get_clean();
throw $e;
}
@@ -235,7 +245,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
// loop over items, stitch back together
foreach ($cache_split as $curr_idx => $curr_split) {
// escape PHP tags in template content
- $output .= preg_replace('/(<%|%>|<\?php|<\?|\?>)/', '<?php echo \'$1\'; ?>', $curr_split);
+ $output .= preg_replace('/(<%|%>|<\?php|<\?|\?>|<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>)/', "<?php echo '\$1'; ?>\n", $curr_split);
if (isset($cache_parts[0][$curr_idx])) {
$_template->properties['has_nocache_code'] = true;
// remove nocache tags from cache output
@@ -246,12 +256,16 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
$output = Smarty_Internal_Filter_Handler::runFilter('output', $output, $_template);
}
// rendering (must be done before writing cache file because of {function} nocache handling)
+ /** @var Smarty_Internal_Template $_smarty_tpl
+ * used in evaluated code
+ */
$_smarty_tpl = $_template;
try {
ob_start();
eval("?>" . $output);
$_output = ob_get_clean();
- } catch (Exception $e) {
+ }
+ catch (Exception $e) {
ob_get_clean();
throw $e;
}
@@ -274,7 +288,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
}
try {
ob_start();
- array_unshift($_template->_capture_stack,array());
+ array_unshift($_template->_capture_stack, array());
//
// render cached template
//
@@ -285,7 +299,8 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
}
array_shift($_template->_capture_stack);
$_output = ob_get_clean();
- } catch (Exception $e) {
+ }
+ catch (Exception $e) {
ob_get_clean();
throw $e;
}
@@ -306,33 +321,37 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
$_last_modified_date = @substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 0, strpos($_SERVER['HTTP_IF_MODIFIED_SINCE'], 'GMT') + 3);
if ($_isCached && $_template->cached->timestamp <= strtotime($_last_modified_date)) {
switch (PHP_SAPI) {
- case 'cgi': // php-cgi < 5.3
- case 'cgi-fcgi': // php-cgi >= 5.3
- case 'fpm-fcgi': // php-fpm >= 5.3.3
- header('Status: 304 Not Modified');
- break;
+ case 'cgi': // php-cgi < 5.3
+ case 'cgi-fcgi': // php-cgi >= 5.3
+ case 'fpm-fcgi': // php-fpm >= 5.3.3
+ header('Status: 304 Not Modified');
+ break;
case 'cli':
- if (/* ^phpunit */!empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS'])/* phpunit$ */) {
- $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = '304 Not Modified';
- }
- break;
+ if ( /* ^phpunit */
+ !empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS']) /* phpunit$ */
+ ) {
+ $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = '304 Not Modified';
+ }
+ break;
default:
- header($_SERVER['SERVER_PROTOCOL'].' 304 Not Modified');
- break;
+ header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
+ break;
}
} else {
switch (PHP_SAPI) {
case 'cli':
- if (/* ^phpunit */!empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS'])/* phpunit$ */) {
- $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = 'Last-Modified: ' . gmdate('D, d M Y H:i:s', $_template->cached->timestamp) . ' GMT';
- }
- break;
+ if ( /* ^phpunit */
+ !empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS']) /* phpunit$ */
+ ) {
+ $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = 'Last-Modified: ' . gmdate('D, d M Y H:i:s', $_template->cached->timestamp) . ' GMT';
+ }
+ break;
default:
- header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $_template->cached->timestamp) . ' GMT');
- break;
+ header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $_template->cached->timestamp) . ' GMT');
+ break;
}
echo $_output;
}
@@ -341,19 +360,20 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
}
// debug output
if ($this->smarty->debugging) {
- Smarty_Internal_Debug::display_debug($this);
+ Smarty_Internal_Debug::display_debug($_template);
}
if ($merge_tpl_vars) {
// restore local variables
$_template->tpl_vars = $save_tpl_vars;
- $_template->config_vars = $save_config_vars;
+ $_template->config_vars = $save_config_vars;
}
+
return;
} else {
if ($merge_tpl_vars) {
// restore local variables
$_template->tpl_vars = $save_tpl_vars;
- $_template->config_vars = $save_config_vars;
+ $_template->config_vars = $save_config_vars;
}
// return fetched content
return $_output;
@@ -377,11 +397,12 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
/**
* test if cache is valid
*
- * @param string|object $template the resource handle of the template file or template object
- * @param mixed $cache_id cache id to be used with this template
- * @param mixed $compile_id compile id to be used with this template
- * @param object $parent next higher level of Smarty variables
- * @return boolean cache status
+ * @param string|object $template the resource handle of the template file or template object
+ * @param mixed $cache_id cache id to be used with this template
+ * @param mixed $compile_id compile id to be used with this template
+ * @param object $parent next higher level of Smarty variables
+ *
+ * @return boolean cache status
*/
public function isCached($template = null, $cache_id = null, $compile_id = null, $parent = null)
{
@@ -402,6 +423,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
* creates a data object
*
* @param object $parent next higher level of Smarty variables
+ *
* @returns Smarty_Data data object
*/
public function createData($parent = null)
@@ -412,13 +434,14 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
/**
* Registers plugin to be used in templates
*
- * @param string $type plugin type
- * @param string $tag name of template tag
- * @param callback $callback PHP callback to register
- * @param boolean $cacheable if true (default) this fuction is cachable
- * @param array $cache_attr caching attributes if any
+ * @param string $type plugin type
+ * @param string $tag name of template tag
+ * @param callback $callback PHP callback to register
+ * @param boolean $cacheable if true (default) this fuction is cachable
+ * @param array $cache_attr caching attributes if any
+ *
* @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
- * @throws SmartyException when the plugin tag is invalid
+ * @throws SmartyException when the plugin tag is invalid
*/
public function registerPlugin($type, $tag, $callback, $cacheable = true, $cache_attr = null)
{
@@ -436,8 +459,9 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
/**
* Unregister Plugin
*
- * @param string $type of plugin
- * @param string $tag name of plugin
+ * @param string $type of plugin
+ * @param string $tag name of plugin
+ *
* @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
*/
public function unregisterPlugin($type, $tag)
@@ -452,20 +476,23 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
/**
* Registers a resource to fetch a template
*
- * @param string $type name of resource type
- * @param Smarty_Resource|array $callback or instance of Smarty_Resource, or array of callbacks to handle resource (deprecated)
+ * @param string $type name of resource type
+ * @param Smarty_Resource|array $callback or instance of Smarty_Resource, or array of callbacks to handle resource (deprecated)
+ *
* @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
*/
public function registerResource($type, $callback)
{
$this->smarty->registered_resources[$type] = $callback instanceof Smarty_Resource ? $callback : array($callback, false);
+
return $this;
}
/**
* Unregisters a resource
*
- * @param string $type name of resource type
+ * @param string $type name of resource type
+ *
* @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
*/
public function unregisterResource($type)
@@ -480,20 +507,23 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
/**
* Registers a cache resource to cache a template's output
*
- * @param string $type name of cache resource type
- * @param Smarty_CacheResource $callback instance of Smarty_CacheResource to handle output caching
+ * @param string $type name of cache resource type
+ * @param Smarty_CacheResource $callback instance of Smarty_CacheResource to handle output caching
+ *
* @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
*/
public function registerCacheResource($type, Smarty_CacheResource $callback)
{
$this->smarty->registered_cache_resources[$type] = $callback;
+
return $this;
}
/**
* Unregisters a cache resource
*
- * @param string $type name of cache resource type
+ * @param string $type name of cache resource type
+ *
* @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
*/
public function unregisterCacheResource($type)
@@ -508,26 +538,26 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
/**
* Registers object to be used in templates
*
- * @param string $object name of template object
- * @param object $object_impl the referenced PHP object to register
- * @param array $allowed list of allowed methods (empty = all)
- * @param boolean $smarty_args smarty argument format, else traditional
- * @param array $block_methods list of block-methods
- * @param array $block_functs list of methods that are block format
+ * @param $object_name
+ * @param object $object_impl the referenced PHP object to register
+ * @param array $allowed list of allowed methods (empty = all)
+ * @param boolean $smarty_args smarty argument format, else traditional
+ * @param array $block_methods list of block-methods
+ *
+ * @throws SmartyException
* @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
- * @throws SmartyException if any of the methods in $allowed or $block_methods are invalid
*/
public function registerObject($object_name, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array())
{
- // test if allowed methodes callable
+ // test if allowed methods callable
if (!empty($allowed)) {
foreach ((array) $allowed as $method) {
- if (!is_callable(array($object_impl, $method))) {
- throw new SmartyException("Undefined method '$method' in registered object");
+ if (!is_callable(array($object_impl, $method)) && !property_exists($object_impl, $method)) {
+ throw new SmartyException("Undefined method or property '$method' in registered object");
}
}
}
- // test if block methodes callable
+ // test if block methods callable
if (!empty($block_methods)) {
foreach ((array) $block_methods as $method) {
if (!is_callable(array($object_impl, $method))) {
@@ -537,14 +567,16 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
}
// register the object
$this->smarty->registered_objects[$object_name] =
- array($object_impl, (array) $allowed, (boolean) $smarty_args, (array) $block_methods);
+ array($object_impl, (array) $allowed, (boolean) $smarty_args, (array) $block_methods);
+
return $this;
}
/**
* return a reference to a registered object
*
- * @param string $name object name
+ * @param string $name object name
+ *
* @return object
* @throws SmartyException if no such object is found
*/
@@ -556,13 +588,15 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
if (!is_object($this->smarty->registered_objects[$name][0])) {
throw new SmartyException("registered '$name' is not an object");
}
+
return $this->smarty->registered_objects[$name][0];
}
/**
* unregister an object
*
- * @param string $name object name
+ * @param string $name object name
+ *
* @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
*/
public function unregisterObject($name)
@@ -577,10 +611,11 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
/**
* Registers static classes to be used in templates
*
- * @param string $class name of template class
- * @param string $class_impl the referenced PHP class to register
+ * @param $class_name
+ * @param string $class_impl the referenced PHP class to register
+ *
+ * @throws SmartyException
* @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
- * @throws SmartyException if $class_impl does not refer to an existing class
*/
public function registerClass($class_name, $class_impl)
{
@@ -590,15 +625,17 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
}
// register the class
$this->smarty->registered_classes[$class_name] = $class_impl;
+
return $this;
}
/**
* Registers a default plugin handler
*
- * @param callable $callback class/method name
+ * @param callable $callback class/method name
+ *
* @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
- * @throws SmartyException if $callback is not callable
+ * @throws SmartyException if $callback is not callable
*/
public function registerDefaultPluginHandler($callback)
{
@@ -614,9 +651,10 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
/**
* Registers a default template handler
*
- * @param callable $callback class/method name
+ * @param callable $callback class/method name
+ *
* @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
- * @throws SmartyException if $callback is not callable
+ * @throws SmartyException if $callback is not callable
*/
public function registerDefaultTemplateHandler($callback)
{
@@ -632,9 +670,10 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
/**
* Registers a default template handler
*
- * @param callable $callback class/method name
+ * @param callable $callback class/method name
+ *
* @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
- * @throws SmartyException if $callback is not callable
+ * @throws SmartyException if $callback is not callable
*/
public function registerDefaultConfigHandler($callback)
{
@@ -650,21 +689,24 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
/**
* Registers a filter function
*
- * @param string $type filter type
- * @param callback $callback
+ * @param string $type filter type
+ * @param callback $callback
+ *
* @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
*/
public function registerFilter($type, $callback)
{
$this->smarty->registered_filters[$type][$this->_get_filter_name($callback)] = $callback;
+
return $this;
}
/**
* Unregisters a filter function
*
- * @param string $type filter type
- * @param callback $callback
+ * @param string $type filter type
+ * @param callback $callback
+ *
* @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
*/
public function unregisterFilter($type, $callback)
@@ -680,14 +722,16 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
/**
* Return internal filter name
*
- * @param callback $function_name
- * @return string internal filter name
+ * @param callback $function_name
+ *
+ * @return string internal filter name
*/
public function _get_filter_name($function_name)
{
if (is_array($function_name)) {
$_class_name = (is_object($function_name[0]) ?
- get_class($function_name[0]) : $function_name[0]);
+ get_class($function_name[0]) : $function_name[0]);
+
return $_class_name . '_' . $function_name[1];
} else {
return $function_name;
@@ -697,8 +741,9 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
/**
* load a filter of specified type and name
*
- * @param string $type filter type
- * @param string $name filter name
+ * @param string $type filter type
+ * @param string $name filter name
+ *
* @throws SmartyException if filter could not be loaded
*/
public function loadFilter($type, $name)
@@ -711,6 +756,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
}
if (is_callable($_plugin)) {
$this->smarty->registered_filters[$type][$_filter_name] = $_plugin;
+
return true;
}
}
@@ -720,8 +766,9 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
/**
* unload a filter of specified type and name
*
- * @param string $type filter type
- * @param string $name filter name
+ * @param string $type filter type
+ * @param string $name filter name
+ *
* @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
*/
public function unloadFilter($type, $name)
@@ -737,10 +784,12 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
/**
* preg_replace callback to convert camelcase getter/setter to underscore property names
*
- * @param string $match match string
+ * @param string $match match string
+ *
* @return string replacemant
*/
- private function replaceCamelcase($match) {
+ private function replaceCamelcase($match)
+ {
return "_" . strtolower($match[1]);
}
@@ -749,6 +798,8 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
*
* @param string $name unknown method-name
* @param array $args argument array
+ *
+ * @throws SmartyException
*/
public function __call($name, $args)
{
@@ -770,7 +821,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
// lcfirst() not available < PHP 5.3.0, so improvise
$property_name = strtolower(substr($name, 3, 1)) . substr($name, 4);
// convert camel case to underscored name
- $property_name = preg_replace_callback('/([A-Z])/', array($this,'replaceCamelcase'), $property_name);
+ $property_name = preg_replace_callback('/([A-Z])/', array($this, 'replaceCamelcase'), $property_name);
$_resolved_property_name[$name] = $property_name;
}
if (isset($_resolved_property_source[$property_name])) {
@@ -779,25 +830,26 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
$_is_this = null;
if (property_exists($this, $property_name)) {
$_is_this = true;
- } else if (property_exists($this->smarty, $property_name)) {
+ } elseif (property_exists($this->smarty, $property_name)) {
$_is_this = false;
}
$_resolved_property_source[$property_name] = $_is_this;
}
if ($_is_this) {
- if ($first3 == 'get')
- return $this->$property_name;
- else
- return $this->$property_name = $args[0];
- } else if ($_is_this === false) {
- if ($first3 == 'get')
- return $this->smarty->$property_name;
- else
- return $this->smarty->$property_name = $args[0];
+ if ($first3 == 'get') {
+ return $this->$property_name;
+ } else {
+ return $this->$property_name = $args[0];
+ }
+ } elseif ($_is_this === false) {
+ if ($first3 == 'get') {
+ return $this->smarty->$property_name;
+ } else {
+ return $this->smarty->$property_name = $args[0];
+ }
} else {
throw new SmartyException("property '$property_name' does not exist.");
- return false;
- }
+ }
}
if ($name == 'Smarty') {
throw new SmartyException("PHP5 requires you to call __construct() instead of Smarty()");
@@ -805,7 +857,4 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
// must be unknown
throw new SmartyException("Call of unknown method '$name'.");
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php b/library/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php
index 85906239d..d00bfb8f4 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php
@@ -1,661 +1,823 @@
-<?php
-
-/**
- * Smarty Internal Plugin Smarty Template Compiler Base
- *
- * This file contains the basic classes and methodes for compiling Smarty templates with lexer/parser
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Main abstract compiler class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-abstract class Smarty_Internal_TemplateCompilerBase {
-
- /**
- * hash for nocache sections
- *
- * @var mixed
- */
- private $nocache_hash = null;
-
- /**
- * suppress generation of nocache code
- *
- * @var bool
- */
- public $suppressNocacheProcessing = false;
-
- /**
- * suppress generation of merged template code
- *
- * @var bool
- */
- public $suppressMergedTemplates = false;
-
- /**
- * compile tag objects
- *
- * @var array
- */
- public static $_tag_objects = array();
-
- /**
- * tag stack
- *
- * @var array
- */
- public $_tag_stack = array();
-
- /**
- * current template
- *
- * @var Smarty_Internal_Template
- */
- public $template = null;
-
- /**
- * merged templates
- *
- * @var array
- */
- public $merged_templates = array();
-
- /**
- * flag when compiling {block}
- *
- * @var bool
- */
- public $inheritance = false;
-
- /**
- * plugins loaded by default plugin handler
- *
- * @var array
- */
- public $default_handler_plugins = array();
-
- /**
- * saved preprocessed modifier list
- *
- * @var mixed
- */
- public $default_modifier_list = null;
-
- /**
- * force compilation of complete template as nocache
- * @var boolean
- */
- public $forceNocache = false;
-
- /**
- * suppress Smarty header code in compiled template
- * @var bool
- */
- public $suppressHeader = false;
-
- /**
- * suppress template property header code in compiled template
- * @var bool
- */
- public $suppressTemplatePropertyHeader = false;
-
- /**
- * flag if compiled template file shall we written
- * @var bool
- */
- public $write_compiled_code = true;
-
- /**
- * flag if currently a template function is compiled
- * @var bool
- */
- public $compiles_template_function = false;
-
- /**
- * called subfuntions from template function
- * @var array
- */
- public $called_functions = array();
-
- /**
- * flags for used modifier plugins
- * @var array
- */
- public $modifier_plugins = array();
-
- /**
- * type of already compiled modifier
- * @var array
- */
- public $known_modifier_type = array();
-
- /**
- * Initialize compiler
- */
- public function __construct() {
- $this->nocache_hash = str_replace('.', '-', uniqid(rand(), true));
- }
-
- /**
- * Method to compile a Smarty template
- *
- * @param Smarty_Internal_Template $template template object to compile
- * @return bool true if compiling succeeded, false if it failed
- */
- public function compileTemplate(Smarty_Internal_Template $template) {
- if (empty($template->properties['nocache_hash'])) {
- $template->properties['nocache_hash'] = $this->nocache_hash;
- } else {
- $this->nocache_hash = $template->properties['nocache_hash'];
- }
- // flag for nochache sections
- $this->nocache = false;
- $this->tag_nocache = false;
- // save template object in compiler class
- $this->template = $template;
- // reset has noche code flag
- $this->template->has_nocache_code = false;
- $this->smarty->_current_file = $saved_filepath = $this->template->source->filepath;
- // template header code
- $template_header = '';
- if (!$this->suppressHeader) {
- $template_header .= "<?php /* Smarty version " . Smarty::SMARTY_VERSION . ", created on " . strftime("%Y-%m-%d %H:%M:%S") . "\n";
- $template_header .= " compiled from \"" . $this->template->source->filepath . "\" */ ?>\n";
- }
-
- do {
- // flag for aborting current and start recompile
- $this->abort_and_recompile = false;
- // get template source
- $_content = $template->source->content;
- // run prefilter if required
- if (isset($this->smarty->autoload_filters['pre']) || isset($this->smarty->registered_filters['pre'])) {
- $_content = Smarty_Internal_Filter_Handler::runFilter('pre', $_content, $template);
- }
- // on empty template just return header
- if ($_content == '') {
- if ($this->suppressTemplatePropertyHeader) {
- $code = '';
- } else {
- $code = $template_header . $template->createTemplateCodeFrame();
- }
- return $code;
- }
- // call compiler
- $_compiled_code = $this->doCompile($_content);
- } while ($this->abort_and_recompile);
- $this->template->source->filepath = $saved_filepath;
- // free memory
- unset($this->parser->root_buffer, $this->parser->current_buffer, $this->parser, $this->lex, $this->template);
- self::$_tag_objects = array();
- // return compiled code to template object
- $merged_code = '';
- if (!$this->suppressMergedTemplates && !empty($this->merged_templates)) {
- foreach ($this->merged_templates as $code) {
- $merged_code .= $code;
- }
- // run postfilter if required on merged code
- if (isset($this->smarty->autoload_filters['post']) || isset($this->smarty->registered_filters['post'])) {
- $merged_code = Smarty_Internal_Filter_Handler::runFilter('post', $merged_code, $template);
- }
- }
- // run postfilter if required on compiled template code
- if (isset($this->smarty->autoload_filters['post']) || isset($this->smarty->registered_filters['post'])) {
- $_compiled_code = Smarty_Internal_Filter_Handler::runFilter('post', $_compiled_code, $template);
- }
- if ($this->suppressTemplatePropertyHeader) {
- $code = $_compiled_code . $merged_code;
- } else {
- $code = $template_header . $template->createTemplateCodeFrame($_compiled_code) . $merged_code;
- }
- return $code;
- }
-
- /**
- * Compile Tag
- *
- * This is a call back from the lexer/parser
- * It executes the required compile plugin for the Smarty tag
- *
- * @param string $tag tag name
- * @param array $args array with tag attributes
- * @param array $parameter array with compilation parameter
- * @return string compiled code
- */
- public function compileTag($tag, $args, $parameter = array()) {
- // $args contains the attributes parsed and compiled by the lexer/parser
- // assume that tag does compile into code, but creates no HTML output
- $this->has_code = true;
- $this->has_output = false;
- // log tag/attributes
- if (isset($this->smarty->get_used_tags) && $this->smarty->get_used_tags) {
- $this->template->used_tags[] = array($tag, $args);
- }
- // check nocache option flag
- if (in_array("'nocache'", $args) || in_array(array('nocache' => 'true'), $args)
- || in_array(array('nocache' => '"true"'), $args) || in_array(array('nocache' => "'true'"), $args)) {
- $this->tag_nocache = true;
- }
- // compile the smarty tag (required compile classes to compile the tag are autoloaded)
- if (($_output = $this->callTagCompiler($tag, $args, $parameter)) === false) {
- if (isset($this->smarty->template_functions[$tag])) {
- // template defined by {template} tag
- $args['_attr']['name'] = "'" . $tag . "'";
- $_output = $this->callTagCompiler('call', $args, $parameter);
- }
- }
- if ($_output !== false) {
- if ($_output !== true) {
- // did we get compiled code
- if ($this->has_code) {
- // Does it create output?
- if ($this->has_output) {
- $_output .= "\n";
- }
- // return compiled code
- return $_output;
- }
- }
- // tag did not produce compiled code
- return '';
- } else {
- // map_named attributes
- if (isset($args['_attr'])) {
- foreach ($args['_attr'] as $key => $attribute) {
- if (is_array($attribute)) {
- $args = array_merge($args, $attribute);
- }
- }
- }
- // not an internal compiler tag
- if (strlen($tag) < 6 || substr($tag, -5) != 'close') {
- // check if tag is a registered object
- if (isset($this->smarty->registered_objects[$tag]) && isset($parameter['object_methode'])) {
- $methode = $parameter['object_methode'];
- if (!in_array($methode, $this->smarty->registered_objects[$tag][3]) &&
- (empty($this->smarty->registered_objects[$tag][1]) || in_array($methode, $this->smarty->registered_objects[$tag][1]))) {
- return $this->callTagCompiler('private_object_function', $args, $parameter, $tag, $methode);
- } elseif (in_array($methode, $this->smarty->registered_objects[$tag][3])) {
- return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, $methode);
- } else {
- return $this->trigger_template_error('unallowed methode "' . $methode . '" in registered object "' . $tag . '"', $this->lex->taglineno);
- }
- }
- // check if tag is registered
- foreach (array(Smarty::PLUGIN_COMPILER, Smarty::PLUGIN_FUNCTION, Smarty::PLUGIN_BLOCK) as $plugin_type) {
- if (isset($this->smarty->registered_plugins[$plugin_type][$tag])) {
- // if compiler function plugin call it now
- if ($plugin_type == Smarty::PLUGIN_COMPILER) {
- $new_args = array();
- foreach ($args as $key => $mixed) {
- if (is_array($mixed)) {
- $new_args = array_merge($new_args, $mixed);
- } else {
- $new_args[$key] = $mixed;
- }
- }
- if (!$this->smarty->registered_plugins[$plugin_type][$tag][1]) {
- $this->tag_nocache = true;
- }
- $function = $this->smarty->registered_plugins[$plugin_type][$tag][0];
- if (!is_array($function)) {
- return $function($new_args, $this);
- } else if (is_object($function[0])) {
- return $this->smarty->registered_plugins[$plugin_type][$tag][0][0]->$function[1]($new_args, $this);
- } else {
- return call_user_func_array($function, array($new_args, $this));
- }
- }
- // compile registered function or block function
- if ($plugin_type == Smarty::PLUGIN_FUNCTION || $plugin_type == Smarty::PLUGIN_BLOCK) {
- return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter, $tag);
- }
- }
- }
- // check plugins from plugins folder
- foreach ($this->smarty->plugin_search_order as $plugin_type) {
- if ($plugin_type == Smarty::PLUGIN_BLOCK && $this->smarty->loadPlugin('smarty_compiler_' . $tag) && (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this))) {
- $plugin = 'smarty_compiler_' . $tag;
- if (is_callable($plugin)) {
- // convert arguments format for old compiler plugins
- $new_args = array();
- foreach ($args as $key => $mixed) {
- if (is_array($mixed)) {
- $new_args = array_merge($new_args, $mixed);
- } else {
- $new_args[$key] = $mixed;
- }
- }
- return $plugin($new_args, $this->smarty);
- }
- if (class_exists($plugin, false)) {
- $plugin_object = new $plugin;
- if (method_exists($plugin_object, 'compile')) {
- return $plugin_object->compile($args, $this);
- }
- }
- throw new SmartyException("Plugin \"{$tag}\" not callable");
- } else {
- if ($function = $this->getPlugin($tag, $plugin_type)) {
- if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) {
- return $this->callTagCompiler('private_' . $plugin_type . '_plugin', $args, $parameter, $tag, $function);
- }
- }
- }
- }
- if (is_callable($this->smarty->default_plugin_handler_func)) {
- $found = false;
- // look for already resolved tags
- foreach ($this->smarty->plugin_search_order as $plugin_type) {
- if (isset($this->default_handler_plugins[$plugin_type][$tag])) {
- $found = true;
- break;
- }
- }
- if (!$found) {
- // call default handler
- foreach ($this->smarty->plugin_search_order as $plugin_type) {
- if ($this->getPluginFromDefaultHandler($tag, $plugin_type)) {
- $found = true;
- break;
- }
- }
- }
- if ($found) {
- // if compiler function plugin call it now
- if ($plugin_type == Smarty::PLUGIN_COMPILER) {
- $new_args = array();
- foreach ($args as $mixed) {
- $new_args = array_merge($new_args, $mixed);
- }
- $function = $this->default_handler_plugins[$plugin_type][$tag][0];
- if (!is_array($function)) {
- return $function($new_args, $this);
- } else if (is_object($function[0])) {
- return $this->default_handler_plugins[$plugin_type][$tag][0][0]->$function[1]($new_args, $this);
- } else {
- return call_user_func_array($function, array($new_args, $this));
- }
- } else {
- return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter, $tag);
- }
- }
- }
- } else {
- // compile closing tag of block function
- $base_tag = substr($tag, 0, -5);
- // check if closing tag is a registered object
- if (isset($this->smarty->registered_objects[$base_tag]) && isset($parameter['object_methode'])) {
- $methode = $parameter['object_methode'];
- if (in_array($methode, $this->smarty->registered_objects[$base_tag][3])) {
- return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, $methode);
- } else {
- return $this->trigger_template_error('unallowed closing tag methode "' . $methode . '" in registered object "' . $base_tag . '"', $this->lex->taglineno);
- }
- }
- // registered block tag ?
- if (isset($this->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag]) || isset($this->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) {
- return $this->callTagCompiler('private_registered_block', $args, $parameter, $tag);
- }
- // block plugin?
- if ($function = $this->getPlugin($base_tag, Smarty::PLUGIN_BLOCK)) {
- return $this->callTagCompiler('private_block_plugin', $args, $parameter, $tag, $function);
- }
- // registered compiler plugin ?
- if (isset($this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag])) {
- // if compiler function plugin call it now
- $args = array();
- if (!$this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][1]) {
- $this->tag_nocache = true;
- }
- $function = $this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][0];
- if (!is_array($function)) {
- return $function($args, $this);
- } else if (is_object($function[0])) {
- return $this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][0][0]->$function[1]($args, $this);
- } else {
- return call_user_func_array($function, array($args, $this));
- }
- }
- if ($this->smarty->loadPlugin('smarty_compiler_' . $tag)) {
- $plugin = 'smarty_compiler_' . $tag;
- if (is_callable($plugin)) {
- return $plugin($args, $this->smarty);
- }
- if (class_exists($plugin, false)) {
- $plugin_object = new $plugin;
- if (method_exists($plugin_object, 'compile')) {
- return $plugin_object->compile($args, $this);
- }
- }
- throw new SmartyException("Plugin \"{$tag}\" not callable");
- }
- }
- $this->trigger_template_error("unknown tag \"" . $tag . "\"", $this->lex->taglineno);
- }
- }
-
- /**
- * lazy loads internal compile plugin for tag and calls the compile methode
- *
- * compile objects cached for reuse.
- * class name format: Smarty_Internal_Compile_TagName
- * plugin filename format: Smarty_Internal_Tagname.php
- *
- * @param string $tag tag name
- * @param array $args list of tag attributes
- * @param mixed $param1 optional parameter
- * @param mixed $param2 optional parameter
- * @param mixed $param3 optional parameter
- * @return string compiled code
- */
- public function callTagCompiler($tag, $args, $param1 = null, $param2 = null, $param3 = null) {
- // re-use object if already exists
- if (isset(self::$_tag_objects[$tag])) {
- // compile this tag
- return self::$_tag_objects[$tag]->compile($args, $this, $param1, $param2, $param3);
- }
- // lazy load internal compiler plugin
- $class_name = 'Smarty_Internal_Compile_' . $tag;
- if ($this->smarty->loadPlugin($class_name)) {
- // check if tag allowed by security
- if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) {
- // use plugin if found
- self::$_tag_objects[$tag] = new $class_name;
- // compile this tag
- return self::$_tag_objects[$tag]->compile($args, $this, $param1, $param2, $param3);
- }
- }
- // no internal compile plugin for this tag
- return false;
- }
-
- /**
- * Check for plugins and return function name
- *
- * @param string $pugin_name name of plugin or function
- * @param string $plugin_type type of plugin
- * @return string call name of function
- */
- public function getPlugin($plugin_name, $plugin_type) {
- $function = null;
- if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {
- if (isset($this->template->required_plugins['nocache'][$plugin_name][$plugin_type])) {
- $function = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function'];
- } else if (isset($this->template->required_plugins['compiled'][$plugin_name][$plugin_type])) {
- $this->template->required_plugins['nocache'][$plugin_name][$plugin_type] = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type];
- $function = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function'];
- }
- } else {
- if (isset($this->template->required_plugins['compiled'][$plugin_name][$plugin_type])) {
- $function = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function'];
- } else if (isset($this->template->required_plugins['nocache'][$plugin_name][$plugin_type])) {
- $this->template->required_plugins['compiled'][$plugin_name][$plugin_type] = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type];
- $function = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function'];
- }
- }
- if (isset($function)) {
- if ($plugin_type == 'modifier') {
- $this->modifier_plugins[$plugin_name] = true;
- }
- return $function;
- }
- // loop through plugin dirs and find the plugin
- $function = 'smarty_' . $plugin_type . '_' . $plugin_name;
- $file = $this->smarty->loadPlugin($function, false);
-
- if (is_string($file)) {
- if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {
- $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['file'] = $file;
- $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function'] = $function;
- } else {
- $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['file'] = $file;
- $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function'] = $function;
- }
- if ($plugin_type == 'modifier') {
- $this->modifier_plugins[$plugin_name] = true;
- }
- return $function;
- }
- if (is_callable($function)) {
- // plugin function is defined in the script
- return $function;
- }
- return false;
- }
-
- /**
- * Check for plugins by default plugin handler
- *
- * @param string $tag name of tag
- * @param string $plugin_type type of plugin
- * @return boolean true if found
- */
- public function getPluginFromDefaultHandler($tag, $plugin_type) {
- $callback = null;
- $script = null;
- $cacheable = true;
- $result = call_user_func_array(
- $this->smarty->default_plugin_handler_func, array($tag, $plugin_type, $this->template, &$callback, &$script, &$cacheable)
- );
- if ($result) {
- $this->tag_nocache = $this->tag_nocache || !$cacheable;
- if ($script !== null) {
- if (is_file($script)) {
- if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {
- $this->template->required_plugins['nocache'][$tag][$plugin_type]['file'] = $script;
- $this->template->required_plugins['nocache'][$tag][$plugin_type]['function'] = $callback;
- } else {
- $this->template->required_plugins['compiled'][$tag][$plugin_type]['file'] = $script;
- $this->template->required_plugins['compiled'][$tag][$plugin_type]['function'] = $callback;
- }
- include_once $script;
- } else {
- $this->trigger_template_error("Default plugin handler: Returned script file \"{$script}\" for \"{$tag}\" not found");
- }
- }
- if (!is_string($callback) && !(is_array($callback) && is_string($callback[0]) && is_string($callback[1]))) {
- $this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" must be a static function name or array of class and function name");
- }
- if (is_callable($callback)) {
- $this->default_handler_plugins[$plugin_type][$tag] = array($callback, true, array());
- return true;
- } else {
- $this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" not callable");
- }
- }
- return false;
- }
-
- /**
- * Inject inline code for nocache template sections
- *
- * This method gets the content of each template element from the parser.
- * If the content is compiled code and it should be not cached the code is injected
- * into the rendered output.
- *
- * @param string $content content of template element
- * @param boolean $is_code true if content is compiled code
- * @return string content
- */
- public function processNocacheCode($content, $is_code) {
- // If the template is not evaluated and we have a nocache section and or a nocache tag
- if ($is_code && !empty($content)) {
- // generate replacement code
- if ((!($this->template->source->recompiled) || $this->forceNocache) && $this->template->caching && !$this->suppressNocacheProcessing &&
- ($this->nocache || $this->tag_nocache || $this->forceNocache == 2)) {
- $this->template->has_nocache_code = true;
- $_output = str_replace("'", "\'", $content);
- $_output = str_replace('\\\\', '\\\\\\\\', $_output);
- $_output = str_replace("^#^", "'", $_output);
- $_output = "<?php echo '/*%%SmartyNocache:{$this->nocache_hash}%%*/" . $_output . "/*/%%SmartyNocache:{$this->nocache_hash}%%*/';?>\n";
- // make sure we include modifer plugins for nocache code
- foreach ($this->modifier_plugins as $plugin_name => $dummy) {
- if (isset($this->template->required_plugins['compiled'][$plugin_name]['modifier'])) {
- $this->template->required_plugins['nocache'][$plugin_name]['modifier'] = $this->template->required_plugins['compiled'][$plugin_name]['modifier'];
- }
- }
- } else {
- $_output = $content;
- }
- } else {
- $_output = $content;
- }
- $this->modifier_plugins = array();
- $this->suppressNocacheProcessing = false;
- $this->tag_nocache = false;
- return $_output;
- }
-
- /**
- * display compiler error messages without dying
- *
- * If parameter $args is empty it is a parser detected syntax error.
- * In this case the parser is called to obtain information about expected tokens.
- *
- * If parameter $args contains a string this is used as error message
- *
- * @param string $args individual error message or null
- * @param string $line line-number
- * @throws SmartyCompilerException when an unexpected token is found
- */
- public function trigger_template_error($args = null, $line = null) {
- // get template source line which has error
- if (!isset($line)) {
- $line = $this->lex->line;
- }
- $match = preg_split("/\n/", $this->lex->data);
- $error_text = 'Syntax Error in template "' . $this->template->source->filepath . '" on line ' . $line . ' "' . htmlspecialchars(trim(preg_replace('![\t\r\n]+!', ' ', $match[$line - 1]))) . '" ';
- if (isset($args)) {
- // individual error message
- $error_text .= $args;
- } else {
- // expected token from parser
- $error_text .= ' - Unexpected "' . $this->lex->value . '"';
- if (count($this->parser->yy_get_expected_tokens($this->parser->yymajor)) <= 4) {
- foreach ($this->parser->yy_get_expected_tokens($this->parser->yymajor) as $token) {
- $exp_token = $this->parser->yyTokenName[$token];
- if (isset($this->lex->smarty_token_names[$exp_token])) {
- // token type from lexer
- $expect[] = '"' . $this->lex->smarty_token_names[$exp_token] . '"';
- } else {
- // otherwise internal token name
- $expect[] = $this->parser->yyTokenName[$token];
- }
- }
- $error_text .= ', expected one of: ' . implode(' , ', $expect);
- }
- }
- throw new SmartyCompilerException($error_text);
- }
-
-}
-
-?> \ No newline at end of file
+<?php
+
+/**
+ * Smarty Internal Plugin Smarty Template Compiler Base
+ * This file contains the basic classes and methods for compiling Smarty templates with lexer/parser
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
+
+/**
+ * Main abstract compiler class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+abstract class Smarty_Internal_TemplateCompilerBase
+{
+ /**
+ * hash for nocache sections
+ *
+ * @var mixed
+ */
+ private $nocache_hash = null;
+
+ /**
+ * suppress generation of nocache code
+ *
+ * @var bool
+ */
+ public $suppressNocacheProcessing = false;
+
+ /**
+ * suppress generation of merged template code
+ *
+ * @var bool
+ */
+ public $suppressMergedTemplates = false;
+
+ /**
+ * compile tag objects
+ *
+ * @var array
+ */
+ public static $_tag_objects = array();
+
+ /**
+ * tag stack
+ *
+ * @var array
+ */
+ public $_tag_stack = array();
+
+ /**
+ * current template
+ *
+ * @var Smarty_Internal_Template
+ */
+ public $template = null;
+
+ /**
+ * merged templates
+ *
+ * @var array
+ */
+ public $merged_templates = array();
+
+ /**
+ * sources which must be compiled
+ *
+ * @var array
+ */
+ public $sources = array();
+
+ /**
+ * flag that we are inside {block}
+ *
+ * @var bool
+ */
+ public $inheritance = false;
+
+ /**
+ * flag when compiling inheritance child template
+ *
+ * @var bool
+ */
+ public $inheritance_child = false;
+
+ /**
+ * uid of templates called by {extends} for recursion check
+ *
+ * @var array
+ */
+ public $extends_uid = array();
+
+ /**
+ * source line offset for error messages
+ *
+ * @var int
+ */
+ public $trace_line_offset = 0;
+
+ /**
+ * trace uid
+ *
+ * @var string
+ */
+ public $trace_uid = '';
+
+ /**
+ * trace file path
+ *
+ * @var string
+ */
+ public $trace_filepath = '';
+ /**
+ * stack for tracing file and line of nested {block} tags
+ *
+ * @var array
+ */
+ public $trace_stack = array();
+
+ /**
+ * plugins loaded by default plugin handler
+ *
+ * @var array
+ */
+ public $default_handler_plugins = array();
+
+ /**
+ * saved preprocessed modifier list
+ *
+ * @var mixed
+ */
+ public $default_modifier_list = null;
+
+ /**
+ * force compilation of complete template as nocache
+ *
+ * @var boolean
+ */
+ public $forceNocache = false;
+
+ /**
+ * suppress Smarty header code in compiled template
+ *
+ * @var bool
+ */
+ public $suppressHeader = false;
+
+ /**
+ * suppress template property header code in compiled template
+ *
+ * @var bool
+ */
+ public $suppressTemplatePropertyHeader = false;
+
+ /**
+ * suppress pre and post filter
+ *
+ * @var bool
+ */
+ public $suppressFilter = false;
+
+ /**
+ * flag if compiled template file shall we written
+ *
+ * @var bool
+ */
+ public $write_compiled_code = true;
+
+ /**
+ * flag if currently a template function is compiled
+ *
+ * @var bool
+ */
+ public $compiles_template_function = false;
+
+ /**
+ * called subfuntions from template function
+ *
+ * @var array
+ */
+ public $called_functions = array();
+
+ /**
+ * flags for used modifier plugins
+ *
+ * @var array
+ */
+ public $modifier_plugins = array();
+
+ /**
+ * type of already compiled modifier
+ *
+ * @var array
+ */
+ public $known_modifier_type = array();
+
+ /**
+ * method to compile a Smarty template
+ *
+ * @param mixed $_content template source
+ *
+ * @return bool true if compiling succeeded, false if it failed
+ */
+ abstract protected function doCompile($_content);
+
+ /**
+ * Initialize compiler
+ */
+ public function __construct()
+ {
+ $this->nocache_hash = str_replace(array('.', ','), '-', uniqid(rand(), true));
+ }
+
+ /**
+ * Method to compile a Smarty template
+ *
+ * @param Smarty_Internal_Template $template template object to compile
+ * @param bool $nocache true is shall be compiled in nocache mode
+ *
+ * @return bool true if compiling succeeded, false if it failed
+ */
+ public function compileTemplate(Smarty_Internal_Template $template, $nocache = false)
+ {
+ if (empty($template->properties['nocache_hash'])) {
+ $template->properties['nocache_hash'] = $this->nocache_hash;
+ } else {
+ $this->nocache_hash = $template->properties['nocache_hash'];
+ }
+ // flag for nochache sections
+ $this->nocache = $nocache;
+ $this->tag_nocache = false;
+ // save template object in compiler class
+ $this->template = $template;
+ // reset has nocache code flag
+ $this->template->has_nocache_code = false;
+ $save_source = $this->template->source;
+ // template header code
+ $template_header = '';
+ if (!$this->suppressHeader) {
+ $template_header .= "<?php /* Smarty version " . Smarty::SMARTY_VERSION . ", created on " . strftime("%Y-%m-%d %H:%M:%S") . "\n";
+ $template_header .= " compiled from \"" . $this->template->source->filepath . "\" */ ?>\n";
+ }
+
+ if (empty($this->template->source->components)) {
+ $this->sources = array($template->source);
+ } else {
+ // we have array of inheritance templates by extends: resource
+ $this->sources = array_reverse($template->source->components);
+ }
+ $loop = 0;
+ // the $this->sources array can get additional elements while compiling by the {extends} tag
+ while ($this->template->source = array_shift($this->sources)) {
+ $this->smarty->_current_file = $this->template->source->filepath;
+ if ($this->smarty->debugging) {
+ Smarty_Internal_Debug::start_compile($this->template);
+ }
+ $no_sources = count($this->sources);
+ if ($loop || $no_sources) {
+ $this->template->properties['file_dependency'][$this->template->source->uid] = array($this->template->source->filepath, $this->template->source->timestamp, $this->template->source->type);
+ }
+ $loop ++;
+ if ($no_sources) {
+ $this->inheritance_child = true;
+ } else {
+ $this->inheritance_child = false;
+ }
+ do {
+ $_compiled_code = '';
+ // flag for aborting current and start recompile
+ $this->abort_and_recompile = false;
+ // get template source
+ $_content = $this->template->source->content;
+ if ($_content != '') {
+ // run prefilter if required
+ if ((isset($this->smarty->autoload_filters['pre']) || isset($this->smarty->registered_filters['pre'])) && !$this->suppressFilter) {
+ $_content = Smarty_Internal_Filter_Handler::runFilter('pre', $_content, $template);
+ }
+ // call compiler
+ $_compiled_code = $this->doCompile($_content);
+ }
+ } while ($this->abort_and_recompile);
+ if ($this->smarty->debugging) {
+ Smarty_Internal_Debug::end_compile($this->template);
+ }
+ }
+ // restore source
+ $this->template->source = $save_source;
+ unset($save_source);
+ $this->smarty->_current_file = $this->template->source->filepath;
+ // free memory
+ unset($this->parser->root_buffer, $this->parser->current_buffer, $this->parser, $this->lex, $this->template);
+ self::$_tag_objects = array();
+ // return compiled code to template object
+ $merged_code = '';
+ if (!$this->suppressMergedTemplates && !empty($this->merged_templates)) {
+ foreach ($this->merged_templates as $code) {
+ $merged_code .= $code;
+ }
+ }
+ // run postfilter if required on compiled template code
+ if ((isset($this->smarty->autoload_filters['post']) || isset($this->smarty->registered_filters['post'])) && !$this->suppressFilter && $_compiled_code != '') {
+ $_compiled_code = Smarty_Internal_Filter_Handler::runFilter('post', $_compiled_code, $template);
+ }
+ if ($this->suppressTemplatePropertyHeader) {
+ $code = $_compiled_code . $merged_code;
+ } else {
+ $code = $template_header . $template->createTemplateCodeFrame($_compiled_code) . $merged_code;
+ }
+ // unset content because template inheritance could have replace source with parent code
+ unset ($template->source->content);
+
+ return $code;
+ }
+
+ /**
+ * Compile Tag
+ * This is a call back from the lexer/parser
+ * It executes the required compile plugin for the Smarty tag
+ *
+ * @param string $tag tag name
+ * @param array $args array with tag attributes
+ * @param array $parameter array with compilation parameter
+ *
+ * @throws SmartyCompilerException
+ * @throws SmartyException
+ * @return string compiled code
+ */
+ public function compileTag($tag, $args, $parameter = array())
+ {
+ // $args contains the attributes parsed and compiled by the lexer/parser
+ // assume that tag does compile into code, but creates no HTML output
+ $this->has_code = true;
+ $this->has_output = false;
+ // log tag/attributes
+ if (isset($this->smarty->get_used_tags) && $this->smarty->get_used_tags) {
+ $this->template->used_tags[] = array($tag, $args);
+ }
+ // check nocache option flag
+ if (in_array("'nocache'", $args) || in_array(array('nocache' => 'true'), $args)
+ || in_array(array('nocache' => '"true"'), $args) || in_array(array('nocache' => "'true'"), $args)
+ ) {
+ $this->tag_nocache = true;
+ }
+ // compile the smarty tag (required compile classes to compile the tag are autoloaded)
+ if (($_output = $this->callTagCompiler($tag, $args, $parameter)) === false) {
+ if (isset($this->smarty->template_functions[$tag])) {
+ // template defined by {template} tag
+ $args['_attr']['name'] = "'" . $tag . "'";
+ $_output = $this->callTagCompiler('call', $args, $parameter);
+ }
+ }
+ if ($_output !== false) {
+ if ($_output !== true) {
+ // did we get compiled code
+ if ($this->has_code) {
+ // Does it create output?
+ if ($this->has_output) {
+ $_output .= "\n";
+ }
+ // return compiled code
+ return $_output;
+ }
+ }
+ // tag did not produce compiled code
+ return null;
+ } else {
+ // map_named attributes
+ if (isset($args['_attr'])) {
+ foreach ($args['_attr'] as $key => $attribute) {
+ if (is_array($attribute)) {
+ $args = array_merge($args, $attribute);
+ }
+ }
+ }
+ // not an internal compiler tag
+ if (strlen($tag) < 6 || substr($tag, - 5) != 'close') {
+ // check if tag is a registered object
+ if (isset($this->smarty->registered_objects[$tag]) && isset($parameter['object_method'])) {
+ $method = $parameter['object_method'];
+ if (!in_array($method, $this->smarty->registered_objects[$tag][3]) &&
+ (empty($this->smarty->registered_objects[$tag][1]) || in_array($method, $this->smarty->registered_objects[$tag][1]))
+ ) {
+ return $this->callTagCompiler('private_object_function', $args, $parameter, $tag, $method);
+ } elseif (in_array($method, $this->smarty->registered_objects[$tag][3])) {
+ return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, $method);
+ } else {
+ // throw exception
+ $this->trigger_template_error('not allowed method "' . $method . '" in registered object "' . $tag . '"', $this->lex->taglineno);
+ }
+ }
+ // check if tag is registered
+ foreach (array(Smarty::PLUGIN_COMPILER, Smarty::PLUGIN_FUNCTION, Smarty::PLUGIN_BLOCK) as $plugin_type) {
+ if (isset($this->smarty->registered_plugins[$plugin_type][$tag])) {
+ // if compiler function plugin call it now
+ if ($plugin_type == Smarty::PLUGIN_COMPILER) {
+ $new_args = array();
+ foreach ($args as $key => $mixed) {
+ if (is_array($mixed)) {
+ $new_args = array_merge($new_args, $mixed);
+ } else {
+ $new_args[$key] = $mixed;
+ }
+ }
+ if (!$this->smarty->registered_plugins[$plugin_type][$tag][1]) {
+ $this->tag_nocache = true;
+ }
+ $function = $this->smarty->registered_plugins[$plugin_type][$tag][0];
+ if (!is_array($function)) {
+ return $function($new_args, $this);
+ } elseif (is_object($function[0])) {
+ return $this->smarty->registered_plugins[$plugin_type][$tag][0][0]->$function[1]($new_args, $this);
+ } else {
+ return call_user_func_array($function, array($new_args, $this));
+ }
+ }
+ // compile registered function or block function
+ if ($plugin_type == Smarty::PLUGIN_FUNCTION || $plugin_type == Smarty::PLUGIN_BLOCK) {
+ return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter, $tag);
+ }
+ }
+ }
+ // check plugins from plugins folder
+ foreach ($this->smarty->plugin_search_order as $plugin_type) {
+ if ($plugin_type == Smarty::PLUGIN_COMPILER && $this->smarty->loadPlugin('smarty_compiler_' . $tag) && (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this))) {
+ $plugin = 'smarty_compiler_' . $tag;
+ if (is_callable($plugin)) {
+ // convert arguments format for old compiler plugins
+ $new_args = array();
+ foreach ($args as $key => $mixed) {
+ if (is_array($mixed)) {
+ $new_args = array_merge($new_args, $mixed);
+ } else {
+ $new_args[$key] = $mixed;
+ }
+ }
+
+ return $plugin($new_args, $this->smarty);
+ }
+ if (class_exists($plugin, false)) {
+ $plugin_object = new $plugin;
+ if (method_exists($plugin_object, 'compile')) {
+ return $plugin_object->compile($args, $this);
+ }
+ }
+ throw new SmartyException("Plugin \"{$tag}\" not callable");
+ } else {
+ if ($function = $this->getPlugin($tag, $plugin_type)) {
+ if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) {
+ return $this->callTagCompiler('private_' . $plugin_type . '_plugin', $args, $parameter, $tag, $function);
+ }
+ }
+ }
+ }
+ if (is_callable($this->smarty->default_plugin_handler_func)) {
+ $found = false;
+ // look for already resolved tags
+ foreach ($this->smarty->plugin_search_order as $plugin_type) {
+ if (isset($this->default_handler_plugins[$plugin_type][$tag])) {
+ $found = true;
+ break;
+ }
+ }
+ if (!$found) {
+ // call default handler
+ foreach ($this->smarty->plugin_search_order as $plugin_type) {
+ if ($this->getPluginFromDefaultHandler($tag, $plugin_type)) {
+ $found = true;
+ break;
+ }
+ }
+ }
+ if ($found) {
+ // if compiler function plugin call it now
+ if ($plugin_type == Smarty::PLUGIN_COMPILER) {
+ $new_args = array();
+ foreach ($args as $mixed) {
+ $new_args = array_merge($new_args, $mixed);
+ }
+ $function = $this->default_handler_plugins[$plugin_type][$tag][0];
+ if (!is_array($function)) {
+ return $function($new_args, $this);
+ } elseif (is_object($function[0])) {
+ return $this->default_handler_plugins[$plugin_type][$tag][0][0]->$function[1]($new_args, $this);
+ } else {
+ return call_user_func_array($function, array($new_args, $this));
+ }
+ } else {
+ return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter, $tag);
+ }
+ }
+ }
+ } else {
+ // compile closing tag of block function
+ $base_tag = substr($tag, 0, - 5);
+ // check if closing tag is a registered object
+ if (isset($this->smarty->registered_objects[$base_tag]) && isset($parameter['object_method'])) {
+ $method = $parameter['object_method'];
+ if (in_array($method, $this->smarty->registered_objects[$base_tag][3])) {
+ return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, $method);
+ } else {
+ // throw exception
+ $this->trigger_template_error('not allowed closing tag method "' . $method . '" in registered object "' . $base_tag . '"', $this->lex->taglineno);
+ }
+ }
+ // registered block tag ?
+ if (isset($this->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag]) || isset($this->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) {
+ return $this->callTagCompiler('private_registered_block', $args, $parameter, $tag);
+ }
+ // block plugin?
+ if ($function = $this->getPlugin($base_tag, Smarty::PLUGIN_BLOCK)) {
+ return $this->callTagCompiler('private_block_plugin', $args, $parameter, $tag, $function);
+ }
+ // registered compiler plugin ?
+ if (isset($this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag])) {
+ // if compiler function plugin call it now
+ $args = array();
+ if (!$this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][1]) {
+ $this->tag_nocache = true;
+ }
+ $function = $this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][0];
+ if (!is_array($function)) {
+ return $function($args, $this);
+ } elseif (is_object($function[0])) {
+ return $this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][0][0]->$function[1]($args, $this);
+ } else {
+ return call_user_func_array($function, array($args, $this));
+ }
+ }
+ if ($this->smarty->loadPlugin('smarty_compiler_' . $tag)) {
+ $plugin = 'smarty_compiler_' . $tag;
+ if (is_callable($plugin)) {
+ return $plugin($args, $this->smarty);
+ }
+ if (class_exists($plugin, false)) {
+ $plugin_object = new $plugin;
+ if (method_exists($plugin_object, 'compile')) {
+ return $plugin_object->compile($args, $this);
+ }
+ }
+ throw new SmartyException("Plugin \"{$tag}\" not callable");
+ }
+ }
+ $this->trigger_template_error("unknown tag \"" . $tag . "\"", $this->lex->taglineno);
+ }
+ }
+
+ /**
+ * lazy loads internal compile plugin for tag and calls the compile method
+ * compile objects cached for reuse.
+ * class name format: Smarty_Internal_Compile_TagName
+ * plugin filename format: Smarty_Internal_Tagname.php
+ *
+ * @param string $tag tag name
+ * @param array $args list of tag attributes
+ * @param mixed $param1 optional parameter
+ * @param mixed $param2 optional parameter
+ * @param mixed $param3 optional parameter
+ *
+ * @return string compiled code
+ */
+ public function callTagCompiler($tag, $args, $param1 = null, $param2 = null, $param3 = null)
+ {
+ // re-use object if already exists
+ if (isset(self::$_tag_objects[$tag])) {
+ // compile this tag
+ return self::$_tag_objects[$tag]->compile($args, $this, $param1, $param2, $param3);
+ }
+ // lazy load internal compiler plugin
+ $class_name = 'Smarty_Internal_Compile_' . $tag;
+ if ($this->smarty->loadPlugin($class_name)) {
+ // check if tag allowed by security
+ if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) {
+ // use plugin if found
+ self::$_tag_objects[$tag] = new $class_name;
+ // compile this tag
+ return self::$_tag_objects[$tag]->compile($args, $this, $param1, $param2, $param3);
+ }
+ }
+ // no internal compile plugin for this tag
+ return false;
+ }
+
+ /**
+ * Check for plugins and return function name
+ *
+ * @param $plugin_name
+ * @param string $plugin_type type of plugin
+ *
+ * @return string call name of function
+ */
+ public function getPlugin($plugin_name, $plugin_type)
+ {
+ $function = null;
+ if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {
+ if (isset($this->template->required_plugins['nocache'][$plugin_name][$plugin_type])) {
+ $function = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function'];
+ } elseif (isset($this->template->required_plugins['compiled'][$plugin_name][$plugin_type])) {
+ $this->template->required_plugins['nocache'][$plugin_name][$plugin_type] = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type];
+ $function = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function'];
+ }
+ } else {
+ if (isset($this->template->required_plugins['compiled'][$plugin_name][$plugin_type])) {
+ $function = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function'];
+ } elseif (isset($this->template->required_plugins['nocache'][$plugin_name][$plugin_type])) {
+ $this->template->required_plugins['compiled'][$plugin_name][$plugin_type] = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type];
+ $function = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function'];
+ }
+ }
+ if (isset($function)) {
+ if ($plugin_type == 'modifier') {
+ $this->modifier_plugins[$plugin_name] = true;
+ }
+
+ return $function;
+ }
+ // loop through plugin dirs and find the plugin
+ $function = 'smarty_' . $plugin_type . '_' . $plugin_name;
+ $file = $this->smarty->loadPlugin($function, false);
+
+ if (is_string($file)) {
+ if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {
+ $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['file'] = $file;
+ $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function'] = $function;
+ } else {
+ $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['file'] = $file;
+ $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function'] = $function;
+ }
+ if ($plugin_type == 'modifier') {
+ $this->modifier_plugins[$plugin_name] = true;
+ }
+
+ return $function;
+ }
+ if (is_callable($function)) {
+ // plugin function is defined in the script
+ return $function;
+ }
+
+ return false;
+ }
+
+ /**
+ * Check for plugins by default plugin handler
+ *
+ * @param string $tag name of tag
+ * @param string $plugin_type type of plugin
+ *
+ * @return boolean true if found
+ */
+ public function getPluginFromDefaultHandler($tag, $plugin_type)
+ {
+ $callback = null;
+ $script = null;
+ $cacheable = true;
+ $result = call_user_func_array(
+ $this->smarty->default_plugin_handler_func, array($tag, $plugin_type, $this->template, &$callback, &$script, &$cacheable)
+ );
+ if ($result) {
+ $this->tag_nocache = $this->tag_nocache || !$cacheable;
+ if ($script !== null) {
+ if (is_file($script)) {
+ if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {
+ $this->template->required_plugins['nocache'][$tag][$plugin_type]['file'] = $script;
+ $this->template->required_plugins['nocache'][$tag][$plugin_type]['function'] = $callback;
+ } else {
+ $this->template->required_plugins['compiled'][$tag][$plugin_type]['file'] = $script;
+ $this->template->required_plugins['compiled'][$tag][$plugin_type]['function'] = $callback;
+ }
+ include_once $script;
+ } else {
+ $this->trigger_template_error("Default plugin handler: Returned script file \"{$script}\" for \"{$tag}\" not found");
+ }
+ }
+ if (!is_string($callback) && !(is_array($callback) && is_string($callback[0]) && is_string($callback[1]))) {
+ $this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" must be a static function name or array of class and function name");
+ }
+ if (is_callable($callback)) {
+ $this->default_handler_plugins[$plugin_type][$tag] = array($callback, true, array());
+
+ return true;
+ } else {
+ $this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" not callable");
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Inject inline code for nocache template sections
+ * This method gets the content of each template element from the parser.
+ * If the content is compiled code and it should be not cached the code is injected
+ * into the rendered output.
+ *
+ * @param string $content content of template element
+ * @param boolean $is_code true if content is compiled code
+ *
+ * @return string content
+ */
+ public function processNocacheCode($content, $is_code)
+ {
+ // If the template is not evaluated and we have a nocache section and or a nocache tag
+ if ($is_code && !empty($content)) {
+ // generate replacement code
+ if ((!($this->template->source->recompiled) || $this->forceNocache) && $this->template->caching && !$this->suppressNocacheProcessing &&
+ ($this->nocache || $this->tag_nocache)
+ ) {
+ $this->template->has_nocache_code = true;
+ $_output = addcslashes($content, '\'\\');
+ $_output = str_replace("^#^", "'", $_output);
+ $_output = "<?php echo '/*%%SmartyNocache:{$this->nocache_hash}%%*/" . $_output . "/*/%%SmartyNocache:{$this->nocache_hash}%%*/';?>\n";
+ // make sure we include modifier plugins for nocache code
+ foreach ($this->modifier_plugins as $plugin_name => $dummy) {
+ if (isset($this->template->required_plugins['compiled'][$plugin_name]['modifier'])) {
+ $this->template->required_plugins['nocache'][$plugin_name]['modifier'] = $this->template->required_plugins['compiled'][$plugin_name]['modifier'];
+ }
+ }
+ } else {
+ $_output = $content;
+ }
+ } else {
+ $_output = $content;
+ }
+ $this->modifier_plugins = array();
+ $this->suppressNocacheProcessing = false;
+ $this->tag_nocache = false;
+
+ return $_output;
+ }
+
+ /**
+ * push current file and line offset on stack for tracing {block} source lines
+ *
+ * @param string $file new filename
+ * @param string $uid uid of file
+ * @param int $line line offset to source
+ * @param bool $debug false debug end_compile shall not be called
+ */
+ public function pushTrace($file, $uid, $line, $debug = true)
+ {
+ if ($this->smarty->debugging && $debug) {
+ Smarty_Internal_Debug::end_compile($this->template);
+ }
+ array_push($this->trace_stack, array($this->smarty->_current_file, $this->trace_filepath, $this->trace_uid, $this->trace_line_offset));
+ $this->trace_filepath = $this->smarty->_current_file = $file;
+ $this->trace_uid = $uid;
+ $this->trace_line_offset = $line;
+ if ($this->smarty->debugging) {
+ Smarty_Internal_Debug::start_compile($this->template);
+ }
+ }
+
+ /**
+ * restore file and line offset
+
+ */
+ public function popTrace()
+ {
+ if ($this->smarty->debugging) {
+ Smarty_Internal_Debug::end_compile($this->template);
+ }
+ $r = array_pop($this->trace_stack);
+ $this->smarty->_current_file = $r[0];
+ $this->trace_filepath = $r[1];
+ $this->trace_uid = $r[2];
+ $this->trace_line_offset = $r[3];
+ if ($this->smarty->debugging) {
+ Smarty_Internal_Debug::start_compile($this->template);
+ }
+ }
+
+ /**
+ * display compiler error messages without dying
+ * If parameter $args is empty it is a parser detected syntax error.
+ * In this case the parser is called to obtain information about expected tokens.
+ * If parameter $args contains a string this is used as error message
+ *
+ * @param string $args individual error message or null
+ * @param string $line line-number
+ *
+ * @throws SmartyCompilerException when an unexpected token is found
+ */
+ public function trigger_template_error($args = null, $line = null)
+ {
+ // get template source line which has error
+ if (!isset($line)) {
+ $line = $this->lex->line;
+ }
+ // $line += $this->trace_line_offset;
+ $match = preg_split("/\n/", $this->lex->data);
+ $error_text = 'Syntax error in template "' . (empty($this->trace_filepath) ? $this->template->source->filepath : $this->trace_filepath) . '" on line ' . ($line + $this->trace_line_offset) . ' "' . trim(preg_replace('![\t\r\n]+!', ' ', $match[$line - 1])) . '" ';
+ if (isset($args)) {
+ // individual error message
+ $error_text .= $args;
+ } else {
+ // expected token from parser
+ $error_text .= ' - Unexpected "' . $this->lex->value . '"';
+ if (count($this->parser->yy_get_expected_tokens($this->parser->yymajor)) <= 4) {
+ foreach ($this->parser->yy_get_expected_tokens($this->parser->yymajor) as $token) {
+ $exp_token = $this->parser->yyTokenName[$token];
+ if (isset($this->lex->smarty_token_names[$exp_token])) {
+ // token type from lexer
+ $expect[] = '"' . $this->lex->smarty_token_names[$exp_token] . '"';
+ } else {
+ // otherwise internal token name
+ $expect[] = $this->parser->yyTokenName[$token];
+ }
+ }
+ $error_text .= ', expected one of: ' . implode(' , ', $expect);
+ }
+ }
+ $e = new SmartyCompilerException($error_text);
+ $e->line = $line;
+ $e->source = trim(preg_replace('![\t\r\n]+!', ' ', $match[$line - 1]));
+ $e->desc = $args;
+ $e->template = $this->template->source->filepath;
+ throw $e;
+ }
+}
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_templatelexer.php b/library/Smarty/libs/sysplugins/smarty_internal_templatelexer.php
index bfc413aef..4de8a9c06 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_templatelexer.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_templatelexer.php
@@ -1,15 +1,16 @@
<?php
/**
-* Smarty Internal Plugin Templatelexer
-*
-* This is the lexer to break the template source into tokens
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
+ * Smarty Internal Plugin Templatelexer
+ * This is the lexer to break the template source into tokens
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
+
/**
-* Smarty Internal Plugin Templatelexer
-*/
+ * Smarty Internal Plugin Templatelexer
+ */
class Smarty_Internal_Templatelexer
{
public $data;
@@ -19,156 +20,179 @@ class Smarty_Internal_Templatelexer
public $node;
public $line;
public $taglineno;
+ public $is_phpScript = false;
public $state = 1;
+ public $smarty;
+ public $literal_cnt = 0;
private $heredoc_id_stack = Array();
- public $smarty_token_names = array ( // Text for parser error messages
- 'IDENTITY' => '===',
- 'NONEIDENTITY' => '!==',
- 'EQUALS' => '==',
- 'NOTEQUALS' => '!=',
- 'GREATEREQUAL' => '(>=,ge)',
- 'LESSEQUAL' => '(<=,le)',
- 'GREATERTHAN' => '(>,gt)',
- 'LESSTHAN' => '(<,lt)',
- 'MOD' => '(%,mod)',
- 'NOT' => '(!,not)',
- 'LAND' => '(&&,and)',
- 'LOR' => '(||,or)',
- 'LXOR' => 'xor',
- 'OPENP' => '(',
- 'CLOSEP' => ')',
- 'OPENB' => '[',
- 'CLOSEB' => ']',
- 'PTR' => '->',
- 'APTR' => '=>',
- 'EQUAL' => '=',
- 'NUMBER' => 'number',
- 'UNIMATH' => '+" , "-',
- 'MATH' => '*" , "/" , "%',
- 'INCDEC' => '++" , "--',
- 'SPACE' => ' ',
- 'DOLLAR' => '$',
- 'SEMICOLON' => ';',
- 'COLON' => ':',
- 'DOUBLECOLON' => '::',
- 'AT' => '@',
- 'HATCH' => '#',
- 'QUOTE' => '"',
- 'BACKTICK' => '`',
- 'VERT' => '|',
- 'DOT' => '.',
- 'COMMA' => '","',
- 'ANDSYM' => '"&"',
- 'QMARK' => '"?"',
- 'ID' => 'identifier',
- 'TEXT' => 'text',
- 'FAKEPHPSTARTTAG' => 'Fake PHP start tag',
- 'PHPSTARTTAG' => 'PHP start tag',
- 'PHPENDTAG' => 'PHP end tag',
- 'LITERALSTART' => 'Literal start',
- 'LITERALEND' => 'Literal end',
- 'LDELSLASH' => 'closing tag',
- 'COMMENT' => 'comment',
- 'AS' => 'as',
- 'TO' => 'to',
- );
-
-
- function __construct($data,$compiler)
- {
-// $this->data = preg_replace("/(\r\n|\r|\n)/", "\n", $data);
+ public $yyTraceFILE;
+ public $yyTracePrompt;
+ public $state_name = array(1 => 'TEXT', 2 => 'SMARTY', 3 => 'LITERAL', 4 => 'DOUBLEQUOTEDSTRING', 5 => 'CHILDBODY');
+ public $smarty_token_names = array( // Text for parser error messages
+ 'IDENTITY' => '===',
+ 'NONEIDENTITY' => '!==',
+ 'EQUALS' => '==',
+ 'NOTEQUALS' => '!=',
+ 'GREATEREQUAL' => '(>=,ge)',
+ 'LESSEQUAL' => '(<=,le)',
+ 'GREATERTHAN' => '(>,gt)',
+ 'LESSTHAN' => '(<,lt)',
+ 'MOD' => '(%,mod)',
+ 'NOT' => '(!,not)',
+ 'LAND' => '(&&,and)',
+ 'LOR' => '(||,or)',
+ 'LXOR' => 'xor',
+ 'OPENP' => '(',
+ 'CLOSEP' => ')',
+ 'OPENB' => '[',
+ 'CLOSEB' => ']',
+ 'PTR' => '->',
+ 'APTR' => '=>',
+ 'EQUAL' => '=',
+ 'NUMBER' => 'number',
+ 'UNIMATH' => '+" , "-',
+ 'MATH' => '*" , "/" , "%',
+ 'INCDEC' => '++" , "--',
+ 'SPACE' => ' ',
+ 'DOLLAR' => '$',
+ 'SEMICOLON' => ';',
+ 'COLON' => ':',
+ 'DOUBLECOLON' => '::',
+ 'AT' => '@',
+ 'HATCH' => '#',
+ 'QUOTE' => '"',
+ 'BACKTICK' => '`',
+ 'VERT' => '|',
+ 'DOT' => '.',
+ 'COMMA' => '","',
+ 'ANDSYM' => '"&"',
+ 'QMARK' => '"?"',
+ 'ID' => 'identifier',
+ 'TEXT' => 'text',
+ 'FAKEPHPSTARTTAG' => 'Fake PHP start tag',
+ 'PHPSTARTTAG' => 'PHP start tag',
+ 'PHPENDTAG' => 'PHP end tag',
+ 'LITERALSTART' => 'Literal start',
+ 'LITERALEND' => 'Literal end',
+ 'LDELSLASH' => 'closing tag',
+ 'COMMENT' => 'comment',
+ 'AS' => 'as',
+ 'TO' => 'to',
+ );
+
+ function __construct($data, $compiler)
+ {
+ // $this->data = preg_replace("/(\r\n|\r|\n)/", "\n", $data);
$this->data = $data;
$this->counter = 0;
+ if (preg_match('/^\xEF\xBB\xBF/', $this->data, $match)) {
+ $this->counter += strlen($match[0]);
+ }
$this->line = 1;
$this->smarty = $compiler->smarty;
$this->compiler = $compiler;
- $this->ldel = preg_quote($this->smarty->left_delimiter,'/');
+ $this->ldel = preg_quote($this->smarty->left_delimiter, '/');
$this->ldel_length = strlen($this->smarty->left_delimiter);
- $this->rdel = preg_quote($this->smarty->right_delimiter,'/');
- $this->smarty_token_names['LDEL'] = $this->smarty->left_delimiter;
- $this->smarty_token_names['RDEL'] = $this->smarty->right_delimiter;
- $this->mbstring_overload = ini_get('mbstring.func_overload') & 2;
- }
+ $this->rdel = preg_quote($this->smarty->right_delimiter, '/');
+ $this->rdel_length = strlen($this->smarty->right_delimiter);
+ $this->smarty_token_names['LDEL'] = $this->smarty->left_delimiter;
+ $this->smarty_token_names['RDEL'] = $this->smarty->right_delimiter;
+ }
+ public function PrintTrace()
+ {
+ $this->yyTraceFILE = fopen('php://output', 'w');
+ $this->yyTracePrompt = '<br>';
+ }
private $_yy_state = 1;
private $_yy_stack = array();
- function yylex()
+ public function yylex()
{
return $this->{'yylex' . $this->_yy_state}();
}
- function yypushstate($state)
+ public function yypushstate($state)
{
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sState push %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+ }
array_push($this->_yy_stack, $this->_yy_state);
$this->_yy_state = $state;
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+ }
}
- function yypopstate()
+ public function yypopstate()
{
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sState pop %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+ }
$this->_yy_state = array_pop($this->_yy_stack);
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+ }
}
- function yybegin($state)
+ public function yybegin($state)
{
$this->_yy_state = $state;
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sState set %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+ }
}
-
-
- function yylex1()
- {
- $tokenMap = array (
- 1 => 0,
- 2 => 0,
- 3 => 1,
- 5 => 0,
- 6 => 0,
- 7 => 0,
- 8 => 0,
- 9 => 0,
- 10 => 0,
- 11 => 1,
- 13 => 0,
- 14 => 0,
- 15 => 0,
- 16 => 0,
- 17 => 0,
- 18 => 0,
- 19 => 0,
- 20 => 0,
- 21 => 0,
- 22 => 0,
- 23 => 0,
- );
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ public function yylex1()
+ {
+ $tokenMap = array(
+ 1 => 0,
+ 2 => 1,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 1,
+ 9 => 0,
+ 10 => 0,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
+ 14 => 2,
+ 17 => 0,
+ 18 => 0,
+ 19 => 0,
+ 20 => 0,
+ 21 => 0,
+ 22 => 0,
+ );
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
- $yy_global_pattern = "/\G(".$this->ldel."[$]smarty\\.block\\.child".$this->rdel.")|\G(\\{\\})|\G(".$this->ldel."\\*([\S\s]*?)\\*".$this->rdel.")|\G(".$this->ldel."strip".$this->rdel.")|\G(".$this->ldel."\\s{1,}strip\\s{1,}".$this->rdel.")|\G(".$this->ldel."\/strip".$this->rdel.")|\G(".$this->ldel."\\s{1,}\/strip\\s{1,}".$this->rdel.")|\G(".$this->ldel."\\s*literal\\s*".$this->rdel.")|\G(".$this->ldel."\\s{1,}\/)|\G(".$this->ldel."\\s*(if|elseif|else if|while)\\s+)|\G(".$this->ldel."\\s*for\\s+)|\G(".$this->ldel."\\s*foreach(?![^\s]))|\G(".$this->ldel."\\s*setfilter\\s+)|\G(".$this->ldel."\\s{1,})|\G(".$this->ldel."\/)|\G(".$this->ldel.")|\G(<\\?(?:php\\w+|=|[a-zA-Z]+)?)|\G(\\?>)|\G(<%)|\G(%>)|\G([\S\s])/iS";
+ $yy_global_pattern = "/\G(\\{\\})|\G(" . $this->ldel . "\\*([\S\s]*?)\\*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*strip\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*\/strip\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*(if|elseif|else if|while)\\s+)|\G(" . $this->ldel . "\\s*for\\s+)|\G(" . $this->ldel . "\\s*foreach(?![^\s]))|\G(" . $this->ldel . "\\s*setfilter\\s+)|\G(" . $this->ldel . "\\s*\/)|\G(" . $this->ldel . "\\s*)|\G((<script\\s+language\\s*=\\s*[\"']?\\s*php\\s*[\"']?\\s*>)|(<\\?(?:php\\w+|=|[a-zA-Z]+)?))|\G(\\?>)|\G(<\/script>)|\G(\\s*" . $this->rdel . ")|\G(<%)|\G(%>)|\G([\S\s])/iS";
do {
- if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+ if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches;
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
if (!count($yymatches)) {
throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr($this->data,
- $this->counter, 5) . '... state TEXT');
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state TEXT');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
if ($tokenMap[$this->token]) {
// extract sub-patterns for passing to lex function
$yysubmatches = array_slice($yysubmatches, $this->token + 1,
- $tokenMap[$this->token]);
+ $tokenMap[$this->token]);
} else {
$yysubmatches = array();
}
$this->value = current($yymatches); // token value
$r = $this->{'yy_r1_' . $this->token}($yysubmatches);
if ($r === null) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
// accept this token
return true;
@@ -177,300 +201,295 @@ class Smarty_Internal_Templatelexer
// process this token in the new state
return $this->yylex();
} elseif ($r === false) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
// skip this token
continue;
- } } else {
+ }
+ } else {
throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[$this->counter]);
+ ': ' . $this->data[$this->counter]);
}
break;
} while (true);
-
} // end function
-
const TEXT = 1;
+
function yy_r1_1($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILD;
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
}
+
function yy_r1_2($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = Smarty_Internal_Templateparser::TP_COMMENT;
}
- function yy_r1_3($yy_subpatterns)
+
+ function yy_r1_4($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_COMMENT;
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_STRIPON;
+ }
}
+
function yy_r1_5($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_STRIPON;
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_STRIPOFF;
+ }
}
+
function yy_r1_6($yy_subpatterns)
{
- if ($this->smarty->auto_literal) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_STRIPON;
- }
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
+ $this->yypushstate(self::LITERAL);
+ }
}
+
function yy_r1_7($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_STRIPOFF;
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
+ $this->yypushstate(self::SMARTY);
+ $this->taglineno = $this->line;
+ }
}
- function yy_r1_8($yy_subpatterns)
- {
- if ($this->smarty->auto_literal) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_STRIPOFF;
- }
- }
function yy_r1_9($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
- $this->yypushstate(self::LITERAL);
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
+ $this->yypushstate(self::SMARTY);
+ $this->taglineno = $this->line;
+ }
}
+
function yy_r1_10($yy_subpatterns)
{
- if ($this->smarty->auto_literal) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
+ $this->yypushstate(self::SMARTY);
+ $this->taglineno = $this->line;
+ }
}
+
function yy_r1_11($yy_subpatterns)
{
- if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELSETFILTER;
+ $this->yypushstate(self::SMARTY);
+ $this->taglineno = $this->line;
+ }
}
- function yy_r1_13($yy_subpatterns)
- {
- if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
- }
- function yy_r1_14($yy_subpatterns)
+ function yy_r1_12($yy_subpatterns)
{
- if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
+ $this->yypushstate(self::SMARTY);
+ $this->taglineno = $this->line;
+ }
}
- function yy_r1_15($yy_subpatterns)
+
+ function yy_r1_13($yy_subpatterns)
{
- if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELSETFILTER;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->yypushstate(self::SMARTY);
+ $this->taglineno = $this->line;
+ }
}
- function yy_r1_16($yy_subpatterns)
+
+ function yy_r1_14($yy_subpatterns)
{
- if ($this->smarty->auto_literal) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
+ if (($script = strpos($this->value, '<s') === 0) || in_array($this->value, Array('<?', '<?=', '<?php'))) {
+ if ($script) {
+ $this->is_phpScript = true;
+ }
+ $this->token = Smarty_Internal_Templateparser::TP_PHPSTARTTAG;
+ } elseif ($this->value == '<?xml') {
+ $this->token = Smarty_Internal_Templateparser::TP_XMLTAG;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ //$this->value = substr($this->value, 0, 2);
+ }
}
+
function yy_r1_17($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
+ $this->token = Smarty_Internal_Templateparser::TP_PHPENDTAG;
}
+
function yy_r1_18($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
+ $this->token = Smarty_Internal_Templateparser::TP_PHPENDSCRIPT;
}
+
function yy_r1_19($yy_subpatterns)
{
- if (in_array($this->value, Array('<?', '<?=', '<?php'))) {
- $this->token = Smarty_Internal_Templateparser::TP_PHPSTARTTAG;
- } elseif ($this->value == '<?xml') {
- $this->token = Smarty_Internal_Templateparser::TP_XMLTAG;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG;
- $this->value = substr($this->value, 0, 2);
- }
- }
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+
function yy_r1_20($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_PHPENDTAG;
+ $this->token = Smarty_Internal_Templateparser::TP_ASPSTARTTAG;
}
+
function yy_r1_21($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_ASPSTARTTAG;
+ $this->token = Smarty_Internal_Templateparser::TP_ASPENDTAG;
}
+
function yy_r1_22($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_ASPENDTAG;
- }
- function yy_r1_23($yy_subpatterns)
- {
-
- if ($this->mbstring_overload) {
- $to = mb_strlen($this->data,'latin1');
- } else {
- $to = strlen($this->data);
- }
- preg_match("/{$this->ldel}|<\?|\?>|<%|%>/",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
- if (isset($match[0][1])) {
- $to = $match[0][1];
- }
- if ($this->mbstring_overload) {
- $this->value = mb_substr($this->data,$this->counter,$to-$this->counter,'latin1');
- } else {
- $this->value = substr($this->data,$this->counter,$to-$this->counter);
- }
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- }
-
-
- function yylex2()
- {
- $tokenMap = array (
- 1 => 0,
- 2 => 0,
- 3 => 1,
- 5 => 0,
- 6 => 0,
- 7 => 0,
- 8 => 0,
- 9 => 0,
- 10 => 0,
- 11 => 0,
- 12 => 0,
- 13 => 0,
- 14 => 0,
- 15 => 0,
- 16 => 0,
- 17 => 0,
- 18 => 0,
- 19 => 0,
- 20 => 1,
- 22 => 1,
- 24 => 1,
- 26 => 0,
- 27 => 0,
- 28 => 0,
- 29 => 0,
- 30 => 0,
- 31 => 0,
- 32 => 0,
- 33 => 0,
- 34 => 0,
- 35 => 0,
- 36 => 0,
- 37 => 0,
- 38 => 0,
- 39 => 0,
- 40 => 0,
- 41 => 0,
- 42 => 0,
- 43 => 3,
- 47 => 0,
- 48 => 0,
- 49 => 0,
- 50 => 0,
- 51 => 0,
- 52 => 0,
- 53 => 0,
- 54 => 0,
- 55 => 1,
- 57 => 1,
- 59 => 0,
- 60 => 0,
- 61 => 0,
- 62 => 0,
- 63 => 0,
- 64 => 0,
- 65 => 0,
- 66 => 0,
- 67 => 0,
- 68 => 0,
- 69 => 0,
- 70 => 0,
- 71 => 0,
- 72 => 0,
- 73 => 0,
- 74 => 0,
- 75 => 0,
- 76 => 0,
- 77 => 0,
- );
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ $phpEndScript = $this->is_phpScript ? '|<\\/script>' : '';
+ $to = strlen($this->data);
+ preg_match("/{$this->ldel}|<\?|<%|\?>|%>|<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>{$phpEndScript}/", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter);
+ if (isset($match[0][1])) {
+ $to = $match[0][1];
+ }
+ $this->value = substr($this->data, $this->counter, $to - $this->counter);
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+
+ public function yylex2()
+ {
+ $tokenMap = array(
+ 1 => 0,
+ 2 => 0,
+ 3 => 1,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 0,
+ 9 => 0,
+ 10 => 0,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
+ 14 => 0,
+ 15 => 1,
+ 17 => 1,
+ 19 => 1,
+ 21 => 0,
+ 22 => 0,
+ 23 => 0,
+ 24 => 0,
+ 25 => 0,
+ 26 => 0,
+ 27 => 0,
+ 28 => 0,
+ 29 => 0,
+ 30 => 0,
+ 31 => 0,
+ 32 => 0,
+ 33 => 0,
+ 34 => 0,
+ 35 => 0,
+ 36 => 0,
+ 37 => 0,
+ 38 => 3,
+ 42 => 0,
+ 43 => 0,
+ 44 => 0,
+ 45 => 0,
+ 46 => 0,
+ 47 => 0,
+ 48 => 0,
+ 49 => 0,
+ 50 => 1,
+ 52 => 1,
+ 54 => 0,
+ 55 => 0,
+ 56 => 0,
+ 57 => 0,
+ 58 => 0,
+ 59 => 0,
+ 60 => 0,
+ 61 => 0,
+ 62 => 0,
+ 63 => 0,
+ 64 => 0,
+ 65 => 0,
+ 66 => 0,
+ 67 => 0,
+ 68 => 0,
+ 69 => 0,
+ 70 => 1,
+ 72 => 0,
+ 73 => 0,
+ 74 => 0,
+ 75 => 0,
+ 76 => 0,
+ );
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
- $yy_global_pattern = "/\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G(".$this->ldel."\\s{1,}\/)|\G(".$this->ldel."\\s*(if|elseif|else if|while)\\s+)|\G(".$this->ldel."\\s*for\\s+)|\G(".$this->ldel."\\s*foreach(?![^\s]))|\G(".$this->ldel."\\s{1,})|\G(\\s{1,}".$this->rdel.")|\G(".$this->ldel."\/)|\G(".$this->ldel.")|\G(".$this->rdel.")|\G(\\s+is\\s+in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*===\\s*)|\G(\\s*!==\\s*)|\G(\\s*==\\s*|\\s+eq\\s+)|\G(\\s*!=\\s*|\\s*<>\\s*|\\s+(ne|neq)\\s+)|\G(\\s*>=\\s*|\\s+(ge|gte)\\s+)|\G(\\s*<=\\s*|\\s+(le|lte)\\s+)|\G(\\s*>\\s*|\\s+gt\\s+)|\G(\\s*<\\s*|\\s+lt\\s+)|\G(\\s+mod\\s+)|\G(!\\s*|not\\s+)|\G(\\s*&&\\s*|\\s*and\\s+)|\G(\\s*\\|\\|\\s*|\\s*or\\s+)|\G(\\s*xor\\s+)|\G(\\s+is\\s+odd\\s+by\\s+)|\G(\\s+is\\s+not\\s+odd\\s+by\\s+)|\G(\\s+is\\s+odd)|\G(\\s+is\\s+not\\s+odd)|\G(\\s+is\\s+even\\s+by\\s+)|\G(\\s+is\\s+not\\s+even\\s+by\\s+)|\G(\\s+is\\s+even)|\G(\\s+is\\s+not\\s+even)|\G(\\s+is\\s+div\\s+by\\s+)|\G(\\s+is\\s+not\\s+div\\s+by\\s+)|\G(\\((int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)\\)\\s*)|\G(\\s*\\(\\s*)|\G(\\s*\\))|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*->\\s*)|\G(\\s*=>\\s*)|\G(\\s*=\\s*)|\G(\\+\\+|--)|\G(\\s*(\\+|-)\\s*)|\G(\\s*(\\*|\/|%)\\s*)|\G(\\$)|\G(\\s*;)|\G(::)|\G(\\s*:\\s*)|\G(@)|\G(#)|\G(\")|\G(`)|\G(\\|)|\G(\\.)|\G(\\s*,\\s*)|\G(\\s*&\\s*)|\G(\\s*\\?\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s?=\\s?)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G(\\s+)|\G([\S\s])/iS";
+ $yy_global_pattern = "/\G(\")|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$]smarty\\.block\\.(child|parent))|\G(\\$)|\G(\\s*" . $this->rdel . ")|\G(\\s+is\\s+in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*===\\s*)|\G(\\s*!==\\s*)|\G(\\s*==\\s*|\\s+eq\\s+)|\G(\\s*!=\\s*|\\s*<>\\s*|\\s+(ne|neq)\\s+)|\G(\\s*>=\\s*|\\s+(ge|gte)\\s+)|\G(\\s*<=\\s*|\\s+(le|lte)\\s+)|\G(\\s*>\\s*|\\s+gt\\s+)|\G(\\s*<\\s*|\\s+lt\\s+)|\G(\\s+mod\\s+)|\G(!\\s*|not\\s+)|\G(\\s*&&\\s*|\\s*and\\s+)|\G(\\s*\\|\\|\\s*|\\s*or\\s+)|\G(\\s*xor\\s+)|\G(\\s+is\\s+odd\\s+by\\s+)|\G(\\s+is\\s+not\\s+odd\\s+by\\s+)|\G(\\s+is\\s+odd)|\G(\\s+is\\s+not\\s+odd)|\G(\\s+is\\s+even\\s+by\\s+)|\G(\\s+is\\s+not\\s+even\\s+by\\s+)|\G(\\s+is\\s+even)|\G(\\s+is\\s+not\\s+even)|\G(\\s+is\\s+div\\s+by\\s+)|\G(\\s+is\\s+not\\s+div\\s+by\\s+)|\G(\\((int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)\\)\\s*)|\G(\\s*\\(\\s*)|\G(\\s*\\))|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*->\\s*)|\G(\\s*=>\\s*)|\G(\\s*=\\s*)|\G(\\+\\+|--)|\G(\\s*(\\+|-)\\s*)|\G(\\s*(\\*|\/|%)\\s*)|\G(@)|\G(#)|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*=\\s*)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G(`)|\G(\\|)|\G(\\.)|\G(\\s*,\\s*)|\G(\\s*;)|\G(::)|\G(\\s*:\\s*)|\G(\\s*&\\s*)|\G(\\s*\\?\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+)|\G(" . $this->ldel . "\\s*(if|elseif|else if|while)\\s+)|\G(" . $this->ldel . "\\s*for\\s+)|\G(" . $this->ldel . "\\s*foreach(?![^\s]))|\G(" . $this->ldel . "\\s*\/)|\G(" . $this->ldel . "\\s*)|\G([\S\s])/iS";
do {
- if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+ if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches;
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
if (!count($yymatches)) {
throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr($this->data,
- $this->counter, 5) . '... state SMARTY');
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state SMARTY');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
if ($tokenMap[$this->token]) {
// extract sub-patterns for passing to lex function
$yysubmatches = array_slice($yysubmatches, $this->token + 1,
- $tokenMap[$this->token]);
+ $tokenMap[$this->token]);
} else {
$yysubmatches = array();
}
$this->value = current($yymatches); // token value
$r = $this->{'yy_r2_' . $this->token}($yysubmatches);
if ($r === null) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
// accept this token
return true;
@@ -479,443 +498,598 @@ class Smarty_Internal_Templatelexer
// process this token in the new state
return $this->yylex();
} elseif ($r === false) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
// skip this token
continue;
- } } else {
+ }
+ } else {
throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[$this->counter]);
+ ': ' . $this->data[$this->counter]);
}
break;
} while (true);
-
} // end function
-
const SMARTY = 2;
+
function yy_r2_1($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING;
+ $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
+ $this->yypushstate(self::DOUBLEQUOTEDSTRING);
}
+
function yy_r2_2($yy_subpatterns)
{
- if ($this->smarty->auto_literal) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
+ $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING;
}
+
function yy_r2_3($yy_subpatterns)
{
- if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
+ $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILDPARENT;
+ $this->taglineno = $this->line;
}
+
function yy_r2_5($yy_subpatterns)
{
- if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
+ $this->token = Smarty_Internal_Templateparser::TP_DOLLAR;
}
+
function yy_r2_6($yy_subpatterns)
{
- if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
+ $this->token = Smarty_Internal_Templateparser::TP_RDEL;
+ $this->yypopstate();
}
+
function yy_r2_7($yy_subpatterns)
{
- if ($this->smarty->auto_literal) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
+ $this->token = Smarty_Internal_Templateparser::TP_ISIN;
}
+
function yy_r2_8($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_RDEL;
- $this->yypopstate();
+ $this->token = Smarty_Internal_Templateparser::TP_AS;
}
+
function yy_r2_9($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
+ $this->token = Smarty_Internal_Templateparser::TP_TO;
}
+
function yy_r2_10($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
+ $this->token = Smarty_Internal_Templateparser::TP_STEP;
}
+
function yy_r2_11($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_RDEL;
- $this->yypopstate();
+ $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF;
}
+
function yy_r2_12($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_ISIN;
+ $this->token = Smarty_Internal_Templateparser::TP_IDENTITY;
}
+
function yy_r2_13($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_AS;
+ $this->token = Smarty_Internal_Templateparser::TP_NONEIDENTITY;
}
+
function yy_r2_14($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_TO;
+ $this->token = Smarty_Internal_Templateparser::TP_EQUALS;
}
+
function yy_r2_15($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_STEP;
+ $this->token = Smarty_Internal_Templateparser::TP_NOTEQUALS;
}
- function yy_r2_16($yy_subpatterns)
- {
- $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF;
- }
function yy_r2_17($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_IDENTITY;
+ $this->token = Smarty_Internal_Templateparser::TP_GREATEREQUAL;
}
- function yy_r2_18($yy_subpatterns)
- {
- $this->token = Smarty_Internal_Templateparser::TP_NONEIDENTITY;
- }
function yy_r2_19($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_EQUALS;
+ $this->token = Smarty_Internal_Templateparser::TP_LESSEQUAL;
}
- function yy_r2_20($yy_subpatterns)
+
+ function yy_r2_21($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_NOTEQUALS;
+ $this->token = Smarty_Internal_Templateparser::TP_GREATERTHAN;
}
+
function yy_r2_22($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_GREATEREQUAL;
+ $this->token = Smarty_Internal_Templateparser::TP_LESSTHAN;
+ }
+
+ function yy_r2_23($yy_subpatterns)
+ {
+
+ $this->token = Smarty_Internal_Templateparser::TP_MOD;
}
+
function yy_r2_24($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_LESSEQUAL;
+ $this->token = Smarty_Internal_Templateparser::TP_NOT;
+ }
+
+ function yy_r2_25($yy_subpatterns)
+ {
+
+ $this->token = Smarty_Internal_Templateparser::TP_LAND;
}
+
function yy_r2_26($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_GREATERTHAN;
+ $this->token = Smarty_Internal_Templateparser::TP_LOR;
}
+
function yy_r2_27($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_LESSTHAN;
+ $this->token = Smarty_Internal_Templateparser::TP_LXOR;
}
+
function yy_r2_28($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_MOD;
+ $this->token = Smarty_Internal_Templateparser::TP_ISODDBY;
}
+
function yy_r2_29($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_NOT;
+ $this->token = Smarty_Internal_Templateparser::TP_ISNOTODDBY;
}
+
function yy_r2_30($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_LAND;
+ $this->token = Smarty_Internal_Templateparser::TP_ISODD;
}
+
function yy_r2_31($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_LOR;
+ $this->token = Smarty_Internal_Templateparser::TP_ISNOTODD;
}
+
function yy_r2_32($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_LXOR;
+ $this->token = Smarty_Internal_Templateparser::TP_ISEVENBY;
}
+
function yy_r2_33($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_ISODDBY;
+ $this->token = Smarty_Internal_Templateparser::TP_ISNOTEVENBY;
}
+
function yy_r2_34($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_ISNOTODDBY;
+ $this->token = Smarty_Internal_Templateparser::TP_ISEVEN;
}
+
function yy_r2_35($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_ISODD;
+ $this->token = Smarty_Internal_Templateparser::TP_ISNOTEVEN;
}
+
function yy_r2_36($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_ISNOTODD;
+ $this->token = Smarty_Internal_Templateparser::TP_ISDIVBY;
}
+
function yy_r2_37($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_ISEVENBY;
+ $this->token = Smarty_Internal_Templateparser::TP_ISNOTDIVBY;
}
+
function yy_r2_38($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_ISNOTEVENBY;
+ $this->token = Smarty_Internal_Templateparser::TP_TYPECAST;
}
- function yy_r2_39($yy_subpatterns)
+
+ function yy_r2_42($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_ISEVEN;
+ $this->token = Smarty_Internal_Templateparser::TP_OPENP;
}
- function yy_r2_40($yy_subpatterns)
+
+ function yy_r2_43($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_ISNOTEVEN;
+ $this->token = Smarty_Internal_Templateparser::TP_CLOSEP;
}
- function yy_r2_41($yy_subpatterns)
+
+ function yy_r2_44($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_ISDIVBY;
+ $this->token = Smarty_Internal_Templateparser::TP_OPENB;
}
- function yy_r2_42($yy_subpatterns)
+
+ function yy_r2_45($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_ISNOTDIVBY;
+ $this->token = Smarty_Internal_Templateparser::TP_CLOSEB;
}
- function yy_r2_43($yy_subpatterns)
+
+ function yy_r2_46($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_TYPECAST;
+ $this->token = Smarty_Internal_Templateparser::TP_PTR;
}
+
function yy_r2_47($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_OPENP;
+ $this->token = Smarty_Internal_Templateparser::TP_APTR;
}
+
function yy_r2_48($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_CLOSEP;
+ $this->token = Smarty_Internal_Templateparser::TP_EQUAL;
}
+
function yy_r2_49($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_OPENB;
+ $this->token = Smarty_Internal_Templateparser::TP_INCDEC;
}
+
function yy_r2_50($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_CLOSEB;
+ $this->token = Smarty_Internal_Templateparser::TP_UNIMATH;
}
- function yy_r2_51($yy_subpatterns)
- {
- $this->token = Smarty_Internal_Templateparser::TP_PTR;
- }
function yy_r2_52($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_APTR;
+ $this->token = Smarty_Internal_Templateparser::TP_MATH;
}
- function yy_r2_53($yy_subpatterns)
- {
- $this->token = Smarty_Internal_Templateparser::TP_EQUAL;
- }
function yy_r2_54($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_INCDEC;
+ $this->token = Smarty_Internal_Templateparser::TP_AT;
}
+
function yy_r2_55($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_UNIMATH;
+ $this->token = Smarty_Internal_Templateparser::TP_HATCH;
}
+
+ function yy_r2_56($yy_subpatterns)
+ {
+
+ // resolve conflicts with shorttag and right_delimiter starting with '='
+ if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->rdel_length) == $this->smarty->right_delimiter) {
+ preg_match("/\s+/", $this->value, $match);
+ $this->value = $match[0];
+ $this->token = Smarty_Internal_Templateparser::TP_SPACE;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_ATTR;
+ }
+ }
+
function yy_r2_57($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_MATH;
+ $this->token = Smarty_Internal_Templateparser::TP_ID;
+ }
+
+ function yy_r2_58($yy_subpatterns)
+ {
+
+ $this->token = Smarty_Internal_Templateparser::TP_INTEGER;
}
+
function yy_r2_59($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_DOLLAR;
+ $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
+ $this->yypopstate();
}
+
function yy_r2_60($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON;
+ $this->token = Smarty_Internal_Templateparser::TP_VERT;
}
+
function yy_r2_61($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON;
+ $this->token = Smarty_Internal_Templateparser::TP_DOT;
}
+
function yy_r2_62($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_COLON;
+ $this->token = Smarty_Internal_Templateparser::TP_COMMA;
}
+
function yy_r2_63($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_AT;
+ $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON;
}
+
function yy_r2_64($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_HATCH;
+ $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON;
}
+
function yy_r2_65($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
- $this->yypushstate(self::DOUBLEQUOTEDSTRING);
+ $this->token = Smarty_Internal_Templateparser::TP_COLON;
}
+
function yy_r2_66($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
- $this->yypopstate();
+ $this->token = Smarty_Internal_Templateparser::TP_ANDSYM;
}
+
function yy_r2_67($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_VERT;
+ $this->token = Smarty_Internal_Templateparser::TP_QMARK;
}
+
function yy_r2_68($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_DOT;
+ $this->token = Smarty_Internal_Templateparser::TP_HEX;
}
+
function yy_r2_69($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_COMMA;
+ $this->token = Smarty_Internal_Templateparser::TP_SPACE;
}
+
function yy_r2_70($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_ANDSYM;
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
+ $this->yypushstate(self::SMARTY);
+ $this->taglineno = $this->line;
+ }
}
- function yy_r2_71($yy_subpatterns)
- {
- $this->token = Smarty_Internal_Templateparser::TP_QMARK;
- }
function yy_r2_72($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_HEX;
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
+ $this->yypushstate(self::SMARTY);
+ $this->taglineno = $this->line;
+ }
}
+
function yy_r2_73($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_ATTR;
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
+ $this->yypushstate(self::SMARTY);
+ $this->taglineno = $this->line;
+ }
}
+
function yy_r2_74($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_ID;
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
+ $this->yypushstate(self::SMARTY);
+ $this->taglineno = $this->line;
+ }
}
+
function yy_r2_75($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_INTEGER;
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->yypushstate(self::SMARTY);
+ $this->taglineno = $this->line;
+ }
}
+
function yy_r2_76($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_SPACE;
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
}
- function yy_r2_77($yy_subpatterns)
+
+ public function yylex3()
{
+ $tokenMap = array(
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ );
+ if ($this->counter >= strlen($this->data)) {
+ return false; // end of input
+ }
+ $yy_global_pattern = "/\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*\/literal\\s*" . $this->rdel . ")|\G([\S\s])/iS";
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ do {
+ if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
+ $yysubmatches = $yymatches;
+ $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
+ if (!count($yymatches)) {
+ throw new Exception('Error: lexing failed because a rule matched' .
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state LITERAL');
+ }
+ next($yymatches); // skip global match
+ $this->token = key($yymatches); // token number
+ if ($tokenMap[$this->token]) {
+ // extract sub-patterns for passing to lex function
+ $yysubmatches = array_slice($yysubmatches, $this->token + 1,
+ $tokenMap[$this->token]);
+ } else {
+ $yysubmatches = array();
+ }
+ $this->value = current($yymatches); // token value
+ $r = $this->{'yy_r3_' . $this->token}($yysubmatches);
+ if ($r === null) {
+ $this->counter += strlen($this->value);
+ $this->line += substr_count($this->value, "\n");
+ // accept this token
+ return true;
+ } elseif ($r === true) {
+ // we have changed state
+ // process this token in the new state
+ return $this->yylex();
+ } elseif ($r === false) {
+ $this->counter += strlen($this->value);
+ $this->line += substr_count($this->value, "\n");
+ if ($this->counter >= strlen($this->data)) {
+ return false; // end of input
+ }
+ // skip this token
+ continue;
+ }
+ } else {
+ throw new Exception('Unexpected input at line' . $this->line .
+ ': ' . $this->data[$this->counter]);
+ }
+ break;
+ } while (true);
+ } // end function
+
+ const LITERAL = 3;
+
+ function yy_r3_1($yy_subpatterns)
+ {
+
+ $this->literal_cnt ++;
+ $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
}
+ function yy_r3_2($yy_subpatterns)
+ {
+ if ($this->literal_cnt) {
+ $this->literal_cnt --;
+ $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
+ $this->yypopstate();
+ }
+ }
- function yylex3()
+ function yy_r3_3($yy_subpatterns)
{
- $tokenMap = array (
- 1 => 0,
- 2 => 0,
- 3 => 0,
- 4 => 0,
- 5 => 0,
- 6 => 0,
- 7 => 0,
- );
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+
+ $to = strlen($this->data);
+ preg_match("/{$this->ldel}\/?literal{$this->rdel}/", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter);
+ if (isset($match[0][1])) {
+ $to = $match[0][1];
+ } else {
+ $this->compiler->trigger_template_error("missing or misspelled literal closing tag");
+ }
+ $this->value = substr($this->data, $this->counter, $to - $this->counter);
+ $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
+ }
+
+ public function yylex4()
+ {
+ $tokenMap = array(
+ 1 => 1,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 0,
+ 9 => 0,
+ 10 => 0,
+ 11 => 0,
+ 12 => 0,
+ 13 => 3,
+ 17 => 0,
+ );
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
- $yy_global_pattern = "/\G(".$this->ldel."\\s*literal\\s*".$this->rdel.")|\G(".$this->ldel."\\s*\/literal\\s*".$this->rdel.")|\G(<\\?(?:php\\w+|=|[a-zA-Z]+)?)|\G(\\?>)|\G(<%)|\G(%>)|\G([\S\s])/iS";
+ $yy_global_pattern = "/\G(" . $this->ldel . "\\s*(if|elseif|else if|while)\\s+)|\G(" . $this->ldel . "\\s*for\\s+)|\G(" . $this->ldel . "\\s*foreach(?![^\s]))|\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*\/literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*\/)|\G(" . $this->ldel . "\\s*)|\G(\")|\G(`\\$)|\G(\\$[0-9]*[a-zA-Z_]\\w*)|\G(\\$)|\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=(" . $this->ldel . "|\\$|`\\$|\")))|\G([\S\s])/iS";
do {
- if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+ if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches;
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
if (!count($yymatches)) {
throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr($this->data,
- $this->counter, 5) . '... state LITERAL');
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state DOUBLEQUOTEDSTRING');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
if ($tokenMap[$this->token]) {
// extract sub-patterns for passing to lex function
$yysubmatches = array_slice($yysubmatches, $this->token + 1,
- $tokenMap[$this->token]);
+ $tokenMap[$this->token]);
} else {
$yysubmatches = array();
}
$this->value = current($yymatches); // token value
- $r = $this->{'yy_r3_' . $this->token}($yysubmatches);
+ $r = $this->{'yy_r4_' . $this->token}($yysubmatches);
if ($r === null) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
// accept this token
return true;
@@ -924,128 +1098,173 @@ class Smarty_Internal_Templatelexer
// process this token in the new state
return $this->yylex();
} elseif ($r === false) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
// skip this token
continue;
- } } else {
+ }
+ } else {
throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[$this->counter]);
+ ': ' . $this->data[$this->counter]);
}
break;
} while (true);
-
} // end function
+ const DOUBLEQUOTEDSTRING = 4;
- const LITERAL = 3;
- function yy_r3_1($yy_subpatterns)
+ function yy_r4_1($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
- $this->yypushstate(self::LITERAL);
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
+ $this->yypushstate(self::SMARTY);
+ $this->taglineno = $this->line;
+ }
}
- function yy_r3_2($yy_subpatterns)
+
+ function yy_r4_3($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
- $this->yypopstate();
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
+ $this->yypushstate(self::SMARTY);
+ $this->taglineno = $this->line;
+ }
}
- function yy_r3_3($yy_subpatterns)
+
+ function yy_r4_4($yy_subpatterns)
+ {
+
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
+ $this->yypushstate(self::SMARTY);
+ $this->taglineno = $this->line;
+ }
+ }
+
+ function yy_r4_5($yy_subpatterns)
+ {
+
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+
+ function yy_r4_6($yy_subpatterns)
+ {
+
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+
+ function yy_r4_7($yy_subpatterns)
+ {
+
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
+ $this->yypushstate(self::SMARTY);
+ $this->taglineno = $this->line;
+ }
+ }
+
+ function yy_r4_8($yy_subpatterns)
+ {
+
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->yypushstate(self::SMARTY);
+ $this->taglineno = $this->line;
+ }
+ }
+
+ function yy_r4_9($yy_subpatterns)
{
- if (in_array($this->value, Array('<?', '<?=', '<?php'))) {
- $this->token = Smarty_Internal_Templateparser::TP_PHPSTARTTAG;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG;
- $this->value = substr($this->value, 0, 2);
- }
+ $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
+ $this->yypopstate();
}
- function yy_r3_4($yy_subpatterns)
+
+ function yy_r4_10($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_PHPENDTAG;
+ $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
+ $this->value = substr($this->value, 0, - 1);
+ $this->yypushstate(self::SMARTY);
+ $this->taglineno = $this->line;
}
- function yy_r3_5($yy_subpatterns)
+
+ function yy_r4_11($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_ASPSTARTTAG;
+ $this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
}
- function yy_r3_6($yy_subpatterns)
+
+ function yy_r4_12($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_ASPENDTAG;
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
}
- function yy_r3_7($yy_subpatterns)
+
+ function yy_r4_13($yy_subpatterns)
{
- if ($this->mbstring_overload) {
- $to = mb_strlen($this->data,'latin1');
- } else {
- $to = strlen($this->data);
- }
- preg_match("/{$this->ldel}\/?literal{$this->rdel}|<\?|<%|\?>|%>/",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
- if (isset($match[0][1])) {
- $to = $match[0][1];
- } else {
- $this->compiler->trigger_template_error ("missing or misspelled literal closing tag");
- }
- if ($this->mbstring_overload) {
- $this->value = mb_substr($this->data,$this->counter,$to-$this->counter,'latin1');
- } else {
- $this->value = substr($this->data,$this->counter,$to-$this->counter);
- }
- $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
}
+ function yy_r4_17($yy_subpatterns)
+ {
+
+ $to = strlen($this->data);
+ $this->value = substr($this->data, $this->counter, $to - $this->counter);
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
- function yylex4()
+ public function yylex5()
{
- $tokenMap = array (
- 1 => 0,
- 2 => 1,
- 4 => 0,
- 5 => 0,
- 6 => 0,
- 7 => 0,
- 8 => 0,
- 9 => 0,
- 10 => 0,
- 11 => 0,
- 12 => 0,
- 13 => 3,
- 17 => 0,
- );
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ $tokenMap = array(
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ );
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
- $yy_global_pattern = "/\G(".$this->ldel."\\s{1,}\/)|\G(".$this->ldel."\\s*(if|elseif|else if|while)\\s+)|\G(".$this->ldel."\\s*for\\s+)|\G(".$this->ldel."\\s*foreach(?![^\s]))|\G(".$this->ldel."\\s{1,})|\G(".$this->ldel."\/)|\G(".$this->ldel.")|\G(\")|\G(`\\$)|\G(\\$[0-9]*[a-zA-Z_]\\w*)|\G(\\$)|\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=(".$this->ldel."|\\$|`\\$|\")))|\G([\S\s])/iS";
+ $yy_global_pattern = "/\G(" . $this->ldel . "\\s*strip\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*\/strip\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*block)|\G([\S\s])/iS";
do {
- if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+ if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches;
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
if (!count($yymatches)) {
throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr($this->data,
- $this->counter, 5) . '... state DOUBLEQUOTEDSTRING');
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state CHILDBODY');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
if ($tokenMap[$this->token]) {
// extract sub-patterns for passing to lex function
$yysubmatches = array_slice($yysubmatches, $this->token + 1,
- $tokenMap[$this->token]);
+ $tokenMap[$this->token]);
} else {
$yysubmatches = array();
}
$this->value = current($yymatches); // token value
- $r = $this->{'yy_r4_' . $this->token}($yysubmatches);
+ $r = $this->{'yy_r5_' . $this->token}($yysubmatches);
if ($r === null) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
// accept this token
return true;
@@ -1054,137 +1273,280 @@ class Smarty_Internal_Templatelexer
// process this token in the new state
return $this->yylex();
} elseif ($r === false) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
// skip this token
continue;
- } } else {
+ }
+ } else {
throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[$this->counter]);
+ ': ' . $this->data[$this->counter]);
}
break;
} while (true);
-
} // end function
+ const CHILDBODY = 5;
- const DOUBLEQUOTEDSTRING = 4;
- function yy_r4_1($yy_subpatterns)
+ function yy_r5_1($yy_subpatterns)
{
- if ($this->smarty->auto_literal) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ return false;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_STRIPON;
+ }
}
- function yy_r4_2($yy_subpatterns)
+
+ function yy_r5_2($yy_subpatterns)
{
- if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ return false;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_STRIPOFF;
+ }
}
- function yy_r4_4($yy_subpatterns)
+
+ function yy_r5_3($yy_subpatterns)
{
- if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ return false;
+ } else {
+ $this->yypopstate();
+ return true;
+ }
}
- function yy_r4_5($yy_subpatterns)
+
+ function yy_r5_4($yy_subpatterns)
{
- if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
+ $to = strlen($this->data);
+ preg_match("/" . $this->ldel . "\s*((\/)?strip\s*" . $this->rdel . "|block\s+)/", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter);
+ if (isset($match[0][1])) {
+ $to = $match[0][1];
+ }
+ $this->value = substr($this->data, $this->counter, $to - $this->counter);
+ return false;
}
- function yy_r4_6($yy_subpatterns)
+
+ public function yylex6()
{
+ $tokenMap = array(
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 1,
+ 6 => 0,
+ );
+ if ($this->counter >= strlen($this->data)) {
+ return false; // end of input
+ }
+ $yy_global_pattern = "/\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*block)|\G(" . $this->ldel . "\\s*\/block)|\G(" . $this->ldel . "\\s*[$]smarty\\.block\\.(child|parent))|\G([\S\s])/iS";
- if ($this->smarty->auto_literal) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
- }
- function yy_r4_7($yy_subpatterns)
+ do {
+ if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
+ $yysubmatches = $yymatches;
+ $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
+ if (!count($yymatches)) {
+ throw new Exception('Error: lexing failed because a rule matched' .
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state CHILDBLOCK');
+ }
+ next($yymatches); // skip global match
+ $this->token = key($yymatches); // token number
+ if ($tokenMap[$this->token]) {
+ // extract sub-patterns for passing to lex function
+ $yysubmatches = array_slice($yysubmatches, $this->token + 1,
+ $tokenMap[$this->token]);
+ } else {
+ $yysubmatches = array();
+ }
+ $this->value = current($yymatches); // token value
+ $r = $this->{'yy_r6_' . $this->token}($yysubmatches);
+ if ($r === null) {
+ $this->counter += strlen($this->value);
+ $this->line += substr_count($this->value, "\n");
+ // accept this token
+ return true;
+ } elseif ($r === true) {
+ // we have changed state
+ // process this token in the new state
+ return $this->yylex();
+ } elseif ($r === false) {
+ $this->counter += strlen($this->value);
+ $this->line += substr_count($this->value, "\n");
+ if ($this->counter >= strlen($this->data)) {
+ return false; // end of input
+ }
+ // skip this token
+ continue;
+ }
+ } else {
+ throw new Exception('Unexpected input at line' . $this->line .
+ ': ' . $this->data[$this->counter]);
+ }
+ break;
+ } while (true);
+ } // end function
+
+ const CHILDBLOCK = 6;
+
+ function yy_r6_1($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
+ $this->yypushstate(self::CHILDLITERAL);
+ }
}
- function yy_r4_8($yy_subpatterns)
+
+ function yy_r6_2($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
+ } else {
+ $this->yypopstate();
+ return true;
+ }
}
- function yy_r4_9($yy_subpatterns)
+
+ function yy_r6_3($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
- $this->yypopstate();
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
+ } else {
+ $this->yypopstate();
+ return true;
+ }
}
- function yy_r4_10($yy_subpatterns)
+
+ function yy_r6_4($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
- $this->value = substr($this->value,0,-1);
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
+ } else {
+ $this->yypopstate();
+ return true;
+ }
}
- function yy_r4_11($yy_subpatterns)
+
+ function yy_r6_6($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
+ $to = strlen($this->data);
+ preg_match("/" . $this->ldel . "\s*(literal\s*" . $this->rdel . "|(\/)?block(\s|" . $this->rdel . ")|[\$]smarty\.block\.(child|parent))/", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter);
+ if (isset($match[0][1])) {
+ $to = $match[0][1];
+ }
+ $this->value = substr($this->data, $this->counter, $to - $this->counter);
+ $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
}
- function yy_r4_12($yy_subpatterns)
+
+ public function yylex7()
{
+ $tokenMap = array(
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ );
+ if ($this->counter >= strlen($this->data)) {
+ return false; // end of input
+ }
+ $yy_global_pattern = "/\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*\/literal\\s*" . $this->rdel . ")|\G([\S\s])/iS";
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- }
- function yy_r4_13($yy_subpatterns)
+ do {
+ if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
+ $yysubmatches = $yymatches;
+ $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
+ if (!count($yymatches)) {
+ throw new Exception('Error: lexing failed because a rule matched' .
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state CHILDLITERAL');
+ }
+ next($yymatches); // skip global match
+ $this->token = key($yymatches); // token number
+ if ($tokenMap[$this->token]) {
+ // extract sub-patterns for passing to lex function
+ $yysubmatches = array_slice($yysubmatches, $this->token + 1,
+ $tokenMap[$this->token]);
+ } else {
+ $yysubmatches = array();
+ }
+ $this->value = current($yymatches); // token value
+ $r = $this->{'yy_r7_' . $this->token}($yysubmatches);
+ if ($r === null) {
+ $this->counter += strlen($this->value);
+ $this->line += substr_count($this->value, "\n");
+ // accept this token
+ return true;
+ } elseif ($r === true) {
+ // we have changed state
+ // process this token in the new state
+ return $this->yylex();
+ } elseif ($r === false) {
+ $this->counter += strlen($this->value);
+ $this->line += substr_count($this->value, "\n");
+ if ($this->counter >= strlen($this->data)) {
+ return false; // end of input
+ }
+ // skip this token
+ continue;
+ }
+ } else {
+ throw new Exception('Unexpected input at line' . $this->line .
+ ': ' . $this->data[$this->counter]);
+ }
+ break;
+ } while (true);
+ } // end function
+
+ const CHILDLITERAL = 7;
+
+ function yy_r7_1($yy_subpatterns)
{
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
+ $this->yypushstate(self::CHILDLITERAL);
+ }
}
- function yy_r4_17($yy_subpatterns)
+
+ function yy_r7_2($yy_subpatterns)
{
- if ($this->mbstring_overload) {
- $to = mb_strlen($this->data,'latin1');
- } else {
- $to = strlen($this->data);
- }
- if ($this->mbstring_overload) {
- $this->value = mb_substr($this->data,$this->counter,$to-$this->counter,'latin1');
- } else {
- $this->value = substr($this->data,$this->counter,$to-$this->counter);
- }
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
+ $this->yypopstate();
+ }
}
+ function yy_r7_3($yy_subpatterns)
+ {
+
+ $to = strlen($this->data);
+ preg_match("/{$this->ldel}\/?literal\s*{$this->rdel}/", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter);
+ if (isset($match[0][1])) {
+ $to = $match[0][1];
+ } else {
+ $this->compiler->trigger_template_error("missing or misspelled literal closing tag");
+ }
+ $this->value = substr($this->data, $this->counter, $to - $this->counter);
+ $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
+ }
}
-?> \ No newline at end of file
+
+ \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_templateparser.php b/library/Smarty/libs/sysplugins/smarty_internal_templateparser.php
index ed20e8237..98b9fc7fb 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_templateparser.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_templateparser.php
@@ -1,20 +1,20 @@
<?php
-/**
-* Smarty Internal Plugin Templateparser
-*
-* This is the template parser.
-* It is generated from the internal.templateparser.y file
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
+/**
+ * Smarty Internal Plugin Templateparser
+ * This is the template parser.
+ * It is generated from the internal.templateparser.y file
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
class TP_yyToken implements ArrayAccess
{
public $string = '';
public $metadata = array();
- function __construct($s, $m = array())
+ public function __construct($s, $m = array())
{
if ($s instanceof TP_yyToken) {
$this->string = $s->string;
@@ -29,28 +29,29 @@ class TP_yyToken implements ArrayAccess
}
}
- function __toString()
+ public function __toString()
{
return $this->_string;
}
- function offsetExists($offset)
+ public function offsetExists($offset)
{
return isset($this->metadata[$offset]);
}
- function offsetGet($offset)
+ public function offsetGet($offset)
{
return $this->metadata[$offset];
}
- function offsetSet($offset, $value)
+ public function offsetSet($offset, $value)
{
if ($offset === null) {
if (isset($value[0])) {
$x = ($value instanceof TP_yyToken) ?
$value->metadata : $value;
$this->metadata = array_merge($this->metadata, $x);
+
return;
}
$offset = count($this->metadata);
@@ -67,7 +68,7 @@ class TP_yyToken implements ArrayAccess
}
}
- function offsetUnset($offset)
+ public function offsetUnset($offset)
{
unset($this->metadata[$offset]);
}
@@ -80,13 +81,14 @@ class TP_yyStackEntry
** number for the token at this stack level */
public $minor; /* The user-supplied minor token value. This
** is the value of the token */
-};
+}
+;
-#line 12 "smarty_internal_templateparser.y"
-class Smarty_Internal_Templateparser#line 79 "smarty_internal_templateparser.php"
+#line 13 "smarty_internal_templateparser.y"
+class Smarty_Internal_Templateparser#line 80 "smarty_internal_templateparser.php"
{
-#line 14 "smarty_internal_templateparser.y"
+ #line 15 "smarty_internal_templateparser.y"
const Err1 = "Security error: Call to private object member not allowed";
const Err2 = "Security error: Call to dynamic object member not allowed";
@@ -94,18 +96,25 @@ class Smarty_Internal_Templateparser#line 79 "smarty_internal_templateparser.php
// states whether the parse was successful or not
public $successful = true;
public $retvalue = 0;
+ public static $prefix_number = 0;
+ private $_string;
+ public $yymajor;
+ public $last_index;
+ public $last_variable;
+ public $root_buffer;
+ public $current_buffer;
private $lex;
private $internalError = false;
private $strip = false;
- function __construct($lex, $compiler) {
+ function __construct($lex, $compiler)
+ {
$this->lex = $lex;
$this->compiler = $compiler;
$this->smarty = $this->compiler->smarty;
$this->template = $this->compiler->template;
$this->compiler->has_variable_string = false;
$this->compiler->prefix_code = array();
- $this->prefix_number = 0;
$this->block_nesting_level = 0;
if ($this->security = isset($this->smarty->security_policy)) {
$this->php_handling = $this->smarty->security_policy->php_handling;
@@ -117,1367 +126,2494 @@ class Smarty_Internal_Templateparser#line 79 "smarty_internal_templateparser.php
$this->current_buffer = $this->root_buffer = new _smarty_template_buffer($this);
}
- public static function escape_start_tag($tag_text) {
- $tag = preg_replace('/\A<\?(.*)\z/', '<<?php ?>?\1', $tag_text, -1 , $count); //Escape tag
- return $tag;
- }
-
- public static function escape_end_tag($tag_text) {
- return '?<?php ?>>';
- }
-
- public function compileVariable($variable) {
- if (strpos($variable,'(') == 0) {
+ public function compileVariable($variable)
+ {
+ if (strpos($variable, '(') == 0) {
// not a variable variable
- $var = trim($variable,'\'');
- $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable($var, null, true, false)->nocache;
- $this->template->properties['variables'][$var] = $this->compiler->tag_nocache|$this->compiler->nocache;
+ $var = trim($variable, '\'');
+ $this->compiler->tag_nocache = $this->compiler->tag_nocache | $this->template->getVariable($var, null, true, false)->nocache;
+ $this->template->properties['variables'][$var] = $this->compiler->tag_nocache | $this->compiler->nocache;
}
-// return '(isset($_smarty_tpl->tpl_vars['. $variable .'])?$_smarty_tpl->tpl_vars['. $variable .']->value:$_smarty_tpl->getVariable('. $variable .')->value)';
- return '$_smarty_tpl->tpl_vars['. $variable .']->value';
+ // return '(isset($_smarty_tpl->tpl_vars['. $variable .'])?$_smarty_tpl->tpl_vars['. $variable .']->value:$_smarty_tpl->getVariable('. $variable .')->value)';
+ return '$_smarty_tpl->tpl_vars[' . $variable . ']->value';
}
-#line 132 "smarty_internal_templateparser.php"
- const TP_VERT = 1;
- const TP_COLON = 2;
- const TP_COMMENT = 3;
- const TP_PHPSTARTTAG = 4;
- const TP_PHPENDTAG = 5;
- const TP_ASPSTARTTAG = 6;
- const TP_ASPENDTAG = 7;
- const TP_FAKEPHPSTARTTAG = 8;
- const TP_XMLTAG = 9;
- const TP_TEXT = 10;
- const TP_STRIPON = 11;
- const TP_STRIPOFF = 12;
- const TP_LITERALSTART = 13;
- const TP_LITERALEND = 14;
- const TP_LITERAL = 15;
- const TP_LDEL = 16;
- const TP_RDEL = 17;
- const TP_DOLLAR = 18;
- const TP_ID = 19;
- const TP_EQUAL = 20;
- const TP_PTR = 21;
- const TP_LDELIF = 22;
- const TP_LDELFOR = 23;
- const TP_SEMICOLON = 24;
- const TP_INCDEC = 25;
- const TP_TO = 26;
- const TP_STEP = 27;
- const TP_LDELFOREACH = 28;
- const TP_SPACE = 29;
- const TP_AS = 30;
- const TP_APTR = 31;
- const TP_LDELSETFILTER = 32;
- const TP_SMARTYBLOCKCHILD = 33;
- const TP_LDELSLASH = 34;
- const TP_ATTR = 35;
- const TP_INTEGER = 36;
- const TP_COMMA = 37;
- const TP_OPENP = 38;
- const TP_CLOSEP = 39;
- const TP_MATH = 40;
- const TP_UNIMATH = 41;
- const TP_ANDSYM = 42;
- const TP_ISIN = 43;
- const TP_ISDIVBY = 44;
- const TP_ISNOTDIVBY = 45;
- const TP_ISEVEN = 46;
- const TP_ISNOTEVEN = 47;
- const TP_ISEVENBY = 48;
- const TP_ISNOTEVENBY = 49;
- const TP_ISODD = 50;
- const TP_ISNOTODD = 51;
- const TP_ISODDBY = 52;
- const TP_ISNOTODDBY = 53;
- const TP_INSTANCEOF = 54;
- const TP_QMARK = 55;
- const TP_NOT = 56;
- const TP_TYPECAST = 57;
- const TP_HEX = 58;
- const TP_DOT = 59;
- const TP_SINGLEQUOTESTRING = 60;
- const TP_DOUBLECOLON = 61;
- const TP_AT = 62;
- const TP_HATCH = 63;
- const TP_OPENB = 64;
- const TP_CLOSEB = 65;
- const TP_EQUALS = 66;
- const TP_NOTEQUALS = 67;
- const TP_GREATERTHAN = 68;
- const TP_LESSTHAN = 69;
- const TP_GREATEREQUAL = 70;
- const TP_LESSEQUAL = 71;
- const TP_IDENTITY = 72;
- const TP_NONEIDENTITY = 73;
- const TP_MOD = 74;
- const TP_LAND = 75;
- const TP_LOR = 76;
- const TP_LXOR = 77;
- const TP_QUOTE = 78;
- const TP_BACKTICK = 79;
- const TP_DOLLARID = 80;
- const YY_NO_ACTION = 593;
- const YY_ACCEPT_ACTION = 592;
- const YY_ERROR_ACTION = 591;
+ #line 130 "smarty_internal_templateparser.php"
+
+ const TP_VERT = 1;
+ const TP_COLON = 2;
+ const TP_RDEL = 3;
+ const TP_COMMENT = 4;
+ const TP_PHPSTARTTAG = 5;
+ const TP_PHPENDTAG = 6;
+ const TP_PHPENDSCRIPT = 7;
+ const TP_ASPSTARTTAG = 8;
+ const TP_ASPENDTAG = 9;
+ const TP_XMLTAG = 10;
+ const TP_TEXT = 11;
+ const TP_STRIPON = 12;
+ const TP_STRIPOFF = 13;
+ const TP_BLOCKSOURCE = 14;
+ const TP_LITERALSTART = 15;
+ const TP_LITERALEND = 16;
+ const TP_LITERAL = 17;
+ const TP_LDEL = 18;
+ const TP_DOLLAR = 19;
+ const TP_ID = 20;
+ const TP_EQUAL = 21;
+ const TP_PTR = 22;
+ const TP_LDELIF = 23;
+ const TP_LDELFOR = 24;
+ const TP_SEMICOLON = 25;
+ const TP_INCDEC = 26;
+ const TP_TO = 27;
+ const TP_STEP = 28;
+ const TP_LDELFOREACH = 29;
+ const TP_SPACE = 30;
+ const TP_AS = 31;
+ const TP_APTR = 32;
+ const TP_LDELSETFILTER = 33;
+ const TP_SMARTYBLOCKCHILDPARENT = 34;
+ const TP_LDELSLASH = 35;
+ const TP_ATTR = 36;
+ const TP_INTEGER = 37;
+ const TP_COMMA = 38;
+ const TP_OPENP = 39;
+ const TP_CLOSEP = 40;
+ const TP_MATH = 41;
+ const TP_UNIMATH = 42;
+ const TP_ANDSYM = 43;
+ const TP_ISIN = 44;
+ const TP_ISDIVBY = 45;
+ const TP_ISNOTDIVBY = 46;
+ const TP_ISEVEN = 47;
+ const TP_ISNOTEVEN = 48;
+ const TP_ISEVENBY = 49;
+ const TP_ISNOTEVENBY = 50;
+ const TP_ISODD = 51;
+ const TP_ISNOTODD = 52;
+ const TP_ISODDBY = 53;
+ const TP_ISNOTODDBY = 54;
+ const TP_INSTANCEOF = 55;
+ const TP_QMARK = 56;
+ const TP_NOT = 57;
+ const TP_TYPECAST = 58;
+ const TP_HEX = 59;
+ const TP_DOT = 60;
+ const TP_SINGLEQUOTESTRING = 61;
+ const TP_DOUBLECOLON = 62;
+ const TP_AT = 63;
+ const TP_HATCH = 64;
+ const TP_OPENB = 65;
+ const TP_CLOSEB = 66;
+ const TP_EQUALS = 67;
+ const TP_NOTEQUALS = 68;
+ const TP_GREATERTHAN = 69;
+ const TP_LESSTHAN = 70;
+ const TP_GREATEREQUAL = 71;
+ const TP_LESSEQUAL = 72;
+ const TP_IDENTITY = 73;
+ const TP_NONEIDENTITY = 74;
+ const TP_MOD = 75;
+ const TP_LAND = 76;
+ const TP_LOR = 77;
+ const TP_LXOR = 78;
+ const TP_QUOTE = 79;
+ const TP_BACKTICK = 80;
+ const TP_DOLLARID = 81;
+ const YY_NO_ACTION = 560;
+ const YY_ACCEPT_ACTION = 559;
+ const YY_ERROR_ACTION = 558;
- const YY_SZ_ACTTAB = 2453;
-static public $yy_action = array(
- /* 0 */ 210, 320, 317, 316, 312, 311, 313, 314, 315, 322,
- /* 10 */ 323, 189, 191, 340, 43, 168, 292, 290, 161, 25,
- /* 20 */ 3, 108, 284, 29, 294, 199, 146, 294, 15, 15,
- /* 30 */ 244, 296, 243, 277, 18, 18, 285, 12, 127, 48,
- /* 40 */ 52, 50, 44, 9, 14, 384, 385, 17, 16, 386,
- /* 50 */ 283, 41, 39, 210, 592, 95, 260, 319, 321, 6,
- /* 60 */ 21, 194, 135, 374, 193, 387, 383, 382, 378, 377,
- /* 70 */ 379, 380, 381, 363, 362, 345, 344, 28, 31, 34,
- /* 80 */ 370, 15, 19, 237, 137, 187, 25, 18, 203, 284,
- /* 90 */ 29, 203, 48, 52, 50, 44, 9, 14, 384, 385,
- /* 100 */ 17, 16, 386, 283, 41, 39, 329, 324, 326, 327,
- /* 110 */ 325, 24, 288, 4, 4, 189, 332, 330, 387, 383,
- /* 120 */ 382, 378, 377, 379, 380, 381, 363, 362, 345, 344,
- /* 130 */ 210, 368, 231, 210, 251, 117, 139, 139, 84, 132,
- /* 140 */ 278, 25, 10, 162, 284, 359, 338, 302, 346, 459,
- /* 150 */ 226, 228, 369, 364, 15, 375, 230, 15, 15, 177,
- /* 160 */ 18, 459, 240, 18, 18, 212, 257, 459, 294, 48,
- /* 170 */ 52, 50, 44, 9, 14, 384, 385, 17, 16, 386,
- /* 180 */ 283, 41, 39, 131, 101, 159, 47, 196, 340, 371,
- /* 190 */ 25, 190, 340, 284, 294, 387, 383, 382, 378, 377,
- /* 200 */ 379, 380, 381, 363, 362, 345, 344, 210, 368, 208,
- /* 210 */ 210, 203, 140, 210, 8, 56, 123, 118, 210, 457,
- /* 220 */ 366, 261, 234, 343, 302, 346, 453, 147, 228, 369,
- /* 230 */ 364, 457, 375, 15, 342, 15, 231, 457, 15, 18,
- /* 240 */ 4, 18, 307, 37, 18, 195, 48, 52, 50, 44,
- /* 250 */ 9, 14, 384, 385, 17, 16, 386, 283, 41, 39,
- /* 260 */ 210, 25, 2, 139, 284, 11, 47, 185, 210, 45,
- /* 270 */ 266, 47, 387, 383, 382, 378, 377, 379, 380, 381,
- /* 280 */ 363, 362, 345, 344, 286, 242, 104, 166, 15, 210,
- /* 290 */ 276, 184, 188, 23, 18, 272, 294, 22, 162, 48,
- /* 300 */ 52, 50, 44, 9, 14, 384, 385, 17, 16, 386,
- /* 310 */ 283, 41, 39, 203, 106, 170, 13, 15, 203, 288,
- /* 320 */ 318, 319, 321, 18, 294, 387, 383, 382, 378, 377,
- /* 330 */ 379, 380, 381, 363, 362, 345, 344, 210, 131, 105,
- /* 340 */ 210, 203, 23, 368, 268, 130, 249, 152, 355, 25,
- /* 350 */ 197, 132, 284, 271, 32, 162, 287, 155, 354, 210,
- /* 360 */ 3, 108, 15, 228, 369, 364, 146, 375, 18, 252,
- /* 370 */ 244, 296, 243, 375, 303, 305, 48, 52, 50, 44,
- /* 380 */ 9, 14, 384, 385, 17, 16, 386, 283, 41, 39,
- /* 390 */ 103, 210, 36, 208, 109, 388, 303, 232, 8, 4,
- /* 400 */ 248, 246, 387, 383, 382, 378, 377, 379, 380, 381,
- /* 410 */ 363, 362, 345, 344, 198, 40, 361, 27, 353, 179,
- /* 420 */ 175, 20, 139, 236, 239, 211, 116, 18, 294, 294,
- /* 430 */ 48, 52, 50, 44, 9, 14, 384, 385, 17, 16,
- /* 440 */ 386, 283, 41, 39, 178, 200, 200, 23, 25, 267,
- /* 450 */ 351, 284, 186, 294, 285, 201, 387, 383, 382, 378,
- /* 460 */ 377, 379, 380, 381, 363, 362, 345, 344, 210, 368,
- /* 470 */ 200, 210, 210, 140, 301, 181, 69, 123, 238, 25,
- /* 480 */ 210, 147, 284, 347, 202, 302, 346, 459, 304, 228,
- /* 490 */ 369, 364, 15, 375, 241, 15, 297, 172, 18, 459,
- /* 500 */ 235, 18, 203, 306, 129, 459, 294, 48, 52, 50,
- /* 510 */ 44, 9, 14, 384, 385, 17, 16, 386, 283, 41,
- /* 520 */ 39, 210, 25, 200, 47, 229, 25, 134, 210, 233,
- /* 530 */ 120, 119, 210, 387, 383, 382, 378, 377, 379, 380,
- /* 540 */ 381, 363, 362, 345, 344, 373, 373, 143, 308, 180,
- /* 550 */ 236, 282, 25, 25, 42, 284, 216, 236, 238, 250,
- /* 560 */ 48, 52, 50, 44, 9, 14, 384, 385, 17, 16,
- /* 570 */ 386, 283, 41, 39, 210, 30, 203, 360, 182, 25,
- /* 580 */ 285, 47, 222, 126, 167, 303, 387, 383, 382, 378,
- /* 590 */ 377, 379, 380, 381, 363, 362, 345, 344, 245, 373,
- /* 600 */ 15, 372, 160, 334, 6, 333, 18, 247, 254, 35,
- /* 610 */ 255, 294, 114, 48, 52, 50, 44, 9, 14, 384,
- /* 620 */ 385, 17, 16, 386, 283, 41, 39, 373, 192, 281,
- /* 630 */ 253, 145, 38, 298, 300, 226, 94, 124, 102, 387,
- /* 640 */ 383, 382, 378, 377, 379, 380, 381, 363, 362, 345,
- /* 650 */ 344, 210, 368, 373, 210, 141, 140, 368, 336, 71,
- /* 660 */ 132, 149, 136, 7, 10, 132, 165, 204, 302, 346,
- /* 670 */ 456, 98, 228, 369, 364, 294, 375, 228, 369, 364,
- /* 680 */ 279, 375, 456, 220, 232, 335, 373, 285, 456, 162,
- /* 690 */ 48, 52, 50, 44, 9, 14, 384, 385, 17, 16,
- /* 700 */ 386, 283, 41, 39, 210, 210, 309, 47, 285, 200,
- /* 710 */ 371, 45, 162, 183, 144, 97, 387, 383, 382, 378,
- /* 720 */ 377, 379, 380, 381, 363, 362, 345, 344, 285, 131,
- /* 730 */ 373, 354, 331, 107, 110, 256, 376, 327, 327, 327,
- /* 740 */ 327, 327, 115, 48, 52, 50, 44, 9, 14, 384,
- /* 750 */ 385, 17, 16, 386, 283, 41, 39, 373, 327, 327,
- /* 760 */ 327, 327, 327, 327, 327, 327, 327, 327, 356, 387,
- /* 770 */ 383, 382, 378, 377, 379, 380, 381, 363, 362, 345,
- /* 780 */ 344, 210, 352, 368, 327, 210, 327, 140, 327, 327,
- /* 790 */ 71, 132, 327, 100, 339, 327, 138, 269, 337, 302,
- /* 800 */ 346, 328, 327, 228, 369, 364, 15, 375, 373, 327,
- /* 810 */ 15, 373, 18, 15, 219, 327, 18, 327, 327, 18,
- /* 820 */ 48, 52, 50, 44, 9, 14, 384, 385, 17, 16,
- /* 830 */ 386, 283, 41, 39, 210, 327, 327, 327, 47, 327,
- /* 840 */ 327, 327, 327, 327, 327, 327, 387, 383, 382, 378,
- /* 850 */ 377, 379, 380, 381, 363, 362, 345, 344, 327, 327,
- /* 860 */ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
- /* 870 */ 327, 327, 274, 48, 52, 50, 44, 9, 14, 384,
- /* 880 */ 385, 17, 16, 386, 283, 41, 39, 210, 327, 327,
- /* 890 */ 327, 327, 327, 327, 327, 327, 327, 327, 327, 387,
- /* 900 */ 383, 382, 378, 377, 379, 380, 381, 363, 362, 345,
- /* 910 */ 344, 327, 327, 327, 327, 327, 327, 327, 327, 327,
- /* 920 */ 327, 327, 327, 327, 327, 327, 48, 52, 50, 44,
- /* 930 */ 9, 14, 384, 385, 17, 16, 386, 283, 41, 39,
- /* 940 */ 210, 327, 327, 327, 327, 327, 327, 327, 327, 327,
- /* 950 */ 327, 265, 387, 383, 382, 378, 377, 379, 380, 381,
- /* 960 */ 363, 362, 345, 344, 327, 327, 327, 327, 327, 224,
- /* 970 */ 327, 327, 327, 327, 327, 327, 327, 327, 327, 48,
- /* 980 */ 52, 50, 44, 9, 14, 384, 385, 17, 16, 386,
- /* 990 */ 283, 41, 39, 210, 327, 327, 327, 327, 327, 327,
- /* 1000 */ 327, 327, 327, 327, 327, 387, 383, 382, 378, 377,
- /* 1010 */ 379, 380, 381, 363, 362, 345, 344, 327, 327, 327,
- /* 1020 */ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
- /* 1030 */ 327, 327, 48, 52, 50, 44, 9, 14, 384, 385,
- /* 1040 */ 17, 16, 386, 283, 41, 39, 327, 327, 327, 327,
- /* 1050 */ 327, 327, 327, 327, 327, 327, 327, 327, 387, 383,
- /* 1060 */ 382, 378, 377, 379, 380, 381, 363, 362, 345, 344,
- /* 1070 */ 327, 327, 327, 48, 52, 50, 44, 9, 14, 384,
- /* 1080 */ 385, 17, 16, 386, 283, 41, 39, 327, 327, 327,
- /* 1090 */ 327, 327, 327, 327, 327, 327, 327, 327, 327, 387,
- /* 1100 */ 383, 382, 378, 377, 379, 380, 381, 363, 362, 345,
- /* 1110 */ 344, 327, 327, 327, 327, 327, 43, 327, 142, 207,
- /* 1120 */ 327, 327, 3, 108, 327, 264, 327, 368, 146, 327,
- /* 1130 */ 327, 151, 244, 296, 243, 132, 227, 15, 33, 327,
- /* 1140 */ 327, 51, 327, 18, 367, 327, 368, 228, 369, 364,
- /* 1150 */ 150, 375, 327, 174, 132, 327, 49, 46, 299, 225,
- /* 1160 */ 365, 327, 294, 103, 1, 280, 228, 369, 364, 262,
- /* 1170 */ 375, 327, 327, 43, 285, 142, 218, 327, 96, 3,
- /* 1180 */ 108, 15, 289, 327, 327, 146, 327, 18, 327, 244,
- /* 1190 */ 296, 243, 327, 227, 15, 33, 327, 327, 51, 327,
- /* 1200 */ 18, 327, 368, 327, 327, 327, 121, 327, 327, 54,
- /* 1210 */ 132, 327, 327, 49, 46, 299, 225, 365, 302, 346,
- /* 1220 */ 103, 1, 228, 369, 364, 327, 375, 350, 327, 327,
- /* 1230 */ 43, 327, 142, 205, 327, 96, 3, 108, 327, 15,
- /* 1240 */ 169, 327, 146, 327, 358, 18, 244, 296, 243, 294,
- /* 1250 */ 227, 327, 33, 327, 327, 51, 15, 327, 327, 368,
- /* 1260 */ 327, 285, 18, 140, 327, 327, 66, 132, 327, 327,
- /* 1270 */ 49, 46, 299, 225, 365, 302, 346, 103, 1, 228,
- /* 1280 */ 369, 364, 327, 375, 295, 327, 327, 43, 327, 130,
- /* 1290 */ 218, 327, 96, 3, 108, 327, 15, 327, 327, 146,
- /* 1300 */ 327, 293, 18, 244, 296, 243, 327, 227, 327, 26,
- /* 1310 */ 327, 327, 51, 15, 327, 327, 368, 327, 327, 18,
- /* 1320 */ 140, 327, 327, 60, 132, 327, 327, 49, 46, 299,
- /* 1330 */ 225, 365, 302, 346, 103, 1, 228, 369, 364, 327,
- /* 1340 */ 375, 258, 327, 327, 43, 327, 128, 218, 327, 96,
- /* 1350 */ 3, 108, 327, 15, 327, 327, 146, 327, 291, 18,
- /* 1360 */ 244, 296, 243, 327, 227, 327, 5, 327, 327, 51,
- /* 1370 */ 15, 327, 327, 368, 327, 327, 18, 140, 327, 327,
- /* 1380 */ 75, 132, 327, 327, 49, 46, 299, 225, 365, 302,
- /* 1390 */ 346, 103, 1, 228, 369, 364, 327, 375, 259, 327,
- /* 1400 */ 327, 43, 327, 142, 209, 327, 96, 3, 108, 327,
- /* 1410 */ 15, 327, 327, 146, 327, 273, 18, 244, 296, 243,
- /* 1420 */ 327, 227, 327, 33, 327, 327, 51, 15, 327, 327,
- /* 1430 */ 368, 327, 327, 18, 140, 327, 327, 87, 132, 327,
- /* 1440 */ 327, 49, 46, 299, 225, 365, 302, 346, 103, 1,
- /* 1450 */ 228, 369, 364, 327, 375, 275, 327, 327, 43, 327,
- /* 1460 */ 125, 92, 327, 96, 3, 108, 327, 15, 327, 327,
- /* 1470 */ 146, 327, 310, 18, 244, 296, 243, 327, 227, 327,
- /* 1480 */ 33, 327, 327, 51, 15, 327, 327, 368, 327, 327,
- /* 1490 */ 18, 140, 327, 327, 58, 132, 327, 327, 49, 46,
- /* 1500 */ 299, 225, 365, 302, 346, 103, 1, 228, 369, 364,
- /* 1510 */ 327, 375, 341, 327, 327, 43, 327, 133, 218, 327,
- /* 1520 */ 96, 3, 108, 327, 15, 327, 327, 146, 327, 348,
- /* 1530 */ 18, 244, 296, 243, 327, 227, 327, 33, 327, 327,
- /* 1540 */ 51, 15, 327, 327, 368, 327, 327, 18, 140, 327,
- /* 1550 */ 327, 68, 132, 327, 327, 49, 46, 299, 225, 365,
- /* 1560 */ 302, 346, 103, 1, 215, 369, 364, 327, 375, 327,
- /* 1570 */ 327, 327, 43, 327, 142, 206, 327, 96, 3, 108,
- /* 1580 */ 327, 327, 327, 327, 146, 327, 327, 327, 244, 296,
- /* 1590 */ 243, 327, 213, 327, 33, 327, 327, 51, 327, 327,
- /* 1600 */ 327, 368, 327, 327, 327, 140, 327, 327, 89, 132,
- /* 1610 */ 327, 327, 49, 46, 299, 225, 365, 302, 346, 103,
- /* 1620 */ 1, 228, 369, 364, 327, 375, 327, 327, 327, 43,
- /* 1630 */ 327, 130, 214, 327, 96, 3, 108, 327, 327, 327,
- /* 1640 */ 327, 146, 327, 327, 327, 244, 296, 243, 327, 227,
- /* 1650 */ 327, 26, 327, 327, 51, 327, 327, 327, 368, 327,
- /* 1660 */ 327, 327, 93, 327, 327, 53, 122, 327, 327, 49,
- /* 1670 */ 46, 299, 225, 365, 302, 346, 103, 327, 221, 369,
- /* 1680 */ 364, 327, 375, 327, 327, 327, 43, 327, 130, 218,
- /* 1690 */ 327, 96, 3, 108, 327, 327, 327, 327, 146, 327,
- /* 1700 */ 327, 327, 244, 296, 243, 327, 227, 327, 26, 327,
- /* 1710 */ 327, 51, 327, 327, 327, 368, 327, 327, 327, 140,
- /* 1720 */ 327, 327, 71, 132, 327, 327, 49, 46, 299, 225,
- /* 1730 */ 365, 302, 346, 103, 327, 228, 369, 364, 327, 375,
- /* 1740 */ 327, 327, 327, 327, 502, 327, 217, 327, 96, 327,
- /* 1750 */ 327, 502, 327, 502, 502, 355, 502, 502, 327, 327,
- /* 1760 */ 327, 32, 502, 327, 502, 4, 502, 3, 108, 327,
- /* 1770 */ 99, 171, 327, 146, 327, 327, 327, 244, 296, 243,
- /* 1780 */ 294, 502, 327, 28, 31, 327, 327, 327, 139, 327,
- /* 1790 */ 327, 327, 502, 327, 368, 193, 163, 203, 117, 327,
- /* 1800 */ 327, 84, 132, 327, 327, 294, 502, 327, 28, 31,
- /* 1810 */ 302, 346, 327, 368, 228, 369, 364, 157, 375, 327,
- /* 1820 */ 327, 132, 203, 357, 27, 353, 327, 327, 327, 263,
- /* 1830 */ 270, 327, 368, 228, 369, 364, 140, 375, 327, 69,
- /* 1840 */ 132, 327, 210, 368, 327, 327, 327, 140, 302, 346,
- /* 1850 */ 79, 132, 228, 369, 364, 327, 375, 327, 349, 302,
- /* 1860 */ 346, 327, 223, 228, 369, 364, 327, 375, 327, 327,
- /* 1870 */ 15, 327, 327, 327, 368, 327, 18, 327, 140, 4,
- /* 1880 */ 327, 91, 132, 327, 327, 327, 327, 327, 327, 327,
- /* 1890 */ 302, 346, 327, 327, 228, 369, 364, 368, 375, 327,
- /* 1900 */ 327, 140, 139, 368, 76, 132, 327, 153, 327, 327,
- /* 1910 */ 327, 132, 327, 302, 346, 327, 327, 228, 369, 364,
- /* 1920 */ 327, 375, 368, 228, 369, 364, 140, 375, 327, 63,
- /* 1930 */ 132, 327, 327, 368, 327, 327, 327, 111, 302, 346,
- /* 1940 */ 62, 132, 228, 369, 364, 327, 375, 327, 327, 302,
- /* 1950 */ 346, 327, 327, 228, 369, 364, 327, 375, 327, 327,
- /* 1960 */ 368, 193, 176, 327, 140, 327, 327, 78, 132, 327,
- /* 1970 */ 327, 294, 327, 327, 28, 31, 302, 346, 327, 327,
- /* 1980 */ 228, 369, 364, 368, 375, 327, 327, 140, 203, 368,
- /* 1990 */ 64, 132, 327, 154, 327, 327, 327, 132, 327, 302,
- /* 2000 */ 346, 327, 327, 228, 369, 364, 327, 375, 368, 228,
- /* 2010 */ 369, 364, 140, 375, 327, 77, 132, 327, 327, 368,
- /* 2020 */ 327, 327, 327, 140, 302, 346, 80, 132, 228, 369,
- /* 2030 */ 364, 327, 375, 327, 327, 302, 346, 327, 327, 228,
- /* 2040 */ 369, 364, 327, 375, 327, 327, 368, 327, 327, 327,
- /* 2050 */ 140, 327, 327, 61, 132, 327, 327, 327, 327, 327,
- /* 2060 */ 327, 327, 302, 346, 327, 327, 228, 369, 364, 368,
- /* 2070 */ 375, 327, 327, 140, 327, 368, 65, 132, 327, 156,
- /* 2080 */ 327, 327, 327, 132, 327, 302, 346, 327, 327, 228,
- /* 2090 */ 369, 364, 327, 375, 368, 228, 369, 364, 140, 375,
- /* 2100 */ 327, 81, 132, 327, 327, 368, 327, 327, 327, 113,
- /* 2110 */ 302, 346, 88, 132, 228, 369, 364, 327, 375, 327,
- /* 2120 */ 327, 302, 346, 327, 327, 228, 369, 364, 327, 375,
- /* 2130 */ 327, 327, 368, 327, 327, 327, 140, 327, 327, 67,
- /* 2140 */ 132, 327, 327, 327, 327, 327, 327, 327, 302, 346,
- /* 2150 */ 327, 327, 228, 369, 364, 368, 375, 327, 327, 140,
- /* 2160 */ 327, 368, 86, 132, 327, 148, 327, 327, 327, 132,
- /* 2170 */ 327, 302, 346, 327, 327, 228, 369, 364, 327, 375,
- /* 2180 */ 368, 228, 369, 364, 140, 375, 327, 85, 132, 327,
- /* 2190 */ 327, 368, 327, 327, 327, 112, 302, 346, 73, 132,
- /* 2200 */ 228, 369, 364, 327, 375, 327, 327, 302, 346, 327,
- /* 2210 */ 327, 228, 369, 364, 327, 375, 327, 327, 368, 327,
- /* 2220 */ 327, 327, 140, 327, 327, 70, 132, 327, 327, 327,
- /* 2230 */ 327, 327, 327, 327, 302, 346, 327, 327, 228, 369,
- /* 2240 */ 364, 368, 375, 327, 327, 140, 327, 327, 57, 132,
- /* 2250 */ 327, 327, 327, 327, 327, 327, 327, 302, 346, 327,
- /* 2260 */ 327, 228, 369, 364, 327, 375, 368, 327, 327, 327,
- /* 2270 */ 140, 327, 327, 90, 132, 327, 327, 368, 327, 327,
- /* 2280 */ 327, 140, 302, 346, 83, 132, 228, 369, 364, 327,
- /* 2290 */ 375, 327, 327, 302, 346, 327, 327, 228, 369, 364,
- /* 2300 */ 327, 375, 327, 327, 368, 327, 327, 327, 140, 327,
- /* 2310 */ 327, 82, 132, 327, 327, 327, 327, 327, 327, 327,
- /* 2320 */ 302, 346, 327, 327, 228, 369, 364, 368, 375, 327,
- /* 2330 */ 327, 140, 327, 327, 55, 132, 327, 327, 327, 327,
- /* 2340 */ 327, 327, 327, 302, 346, 327, 327, 228, 369, 364,
- /* 2350 */ 327, 375, 368, 327, 327, 327, 140, 327, 327, 72,
- /* 2360 */ 132, 327, 327, 368, 327, 327, 327, 93, 302, 346,
- /* 2370 */ 59, 122, 228, 369, 364, 327, 375, 327, 327, 302,
- /* 2380 */ 346, 327, 327, 228, 369, 364, 327, 375, 327, 327,
- /* 2390 */ 368, 327, 327, 327, 140, 327, 327, 74, 132, 327,
- /* 2400 */ 327, 327, 327, 193, 158, 327, 302, 346, 327, 327,
- /* 2410 */ 228, 369, 364, 294, 375, 327, 28, 31, 193, 173,
- /* 2420 */ 327, 327, 327, 327, 327, 193, 164, 327, 294, 327,
- /* 2430 */ 203, 28, 31, 327, 327, 294, 327, 327, 28, 31,
- /* 2440 */ 327, 327, 327, 327, 327, 203, 327, 327, 327, 327,
- /* 2450 */ 327, 327, 203,
+ const YY_SZ_ACTTAB = 2541;
+ static public $yy_action = array(
+ /* 0 */
+ 225, 35, 312, 333, 198, 272, 273, 275, 283, 292,
+ /* 10 */
+ 293, 294, 295, 287, 288, 267, 190, 43, 19, 8,
+ /* 20 */
+ 204, 14, 212, 299, 2, 108, 225, 9, 424, 41,
+ /* 30 */
+ 139, 208, 225, 41, 250, 32, 228, 13, 159, 32,
+ /* 40 */
+ 51, 52, 50, 44, 11, 12, 298, 300, 21, 23,
+ /* 50 */
+ 303, 302, 25, 17, 225, 424, 234, 225, 225, 381,
+ /* 60 */
+ 421, 424, 45, 38, 145, 357, 313, 323, 322, 324,
+ /* 70 */
+ 325, 326, 320, 315, 314, 316, 317, 319, 127, 41,
+ /* 80 */
+ 46, 42, 338, 41, 168, 32, 41, 421, 14, 32,
+ /* 90 */
+ 299, 34, 32, 421, 51, 52, 50, 44, 11, 12,
+ /* 100 */
+ 298, 300, 21, 23, 303, 302, 25, 17, 225, 104,
+ /* 110 */
+ 185, 46, 46, 559, 95, 279, 242, 271, 3, 321,
+ /* 120 */
+ 313, 323, 322, 324, 325, 326, 320, 315, 314, 316,
+ /* 130 */
+ 317, 319, 14, 241, 299, 34, 208, 41, 225, 14,
+ /* 140 */
+ 418, 299, 28, 32, 179, 7, 356, 285, 51, 52,
+ /* 150 */
+ 50, 44, 11, 12, 298, 300, 21, 23, 303, 302,
+ /* 160 */
+ 25, 17, 225, 225, 274, 424, 240, 41, 134, 190,
+ /* 170 */
+ 332, 343, 340, 32, 313, 323, 322, 324, 325, 326,
+ /* 180 */
+ 320, 315, 314, 316, 317, 319, 37, 122, 182, 31,
+ /* 190 */
+ 202, 225, 424, 352, 225, 14, 7, 299, 424, 225,
+ /* 200 */
+ 150, 386, 51, 52, 50, 44, 11, 12, 298, 300,
+ /* 210 */
+ 21, 23, 303, 302, 25, 17, 225, 46, 349, 134,
+ /* 220 */
+ 41, 278, 242, 271, 7, 29, 32, 341, 313, 323,
+ /* 230 */
+ 322, 324, 325, 326, 320, 315, 314, 316, 317, 319,
+ /* 240 */
+ 226, 227, 197, 304, 103, 184, 232, 134, 46, 14,
+ /* 250 */
+ 35, 299, 265, 46, 321, 18, 51, 52, 50, 44,
+ /* 260 */
+ 11, 12, 298, 300, 21, 23, 303, 302, 25, 17,
+ /* 270 */
+ 225, 208, 264, 259, 258, 218, 6, 109, 345, 35,
+ /* 280 */
+ 193, 263, 313, 323, 322, 324, 325, 326, 320, 315,
+ /* 290 */
+ 314, 316, 317, 319, 241, 192, 304, 107, 102, 175,
+ /* 300 */
+ 269, 201, 191, 304, 203, 142, 253, 208, 321, 335,
+ /* 310 */
+ 51, 52, 50, 44, 11, 12, 298, 300, 21, 23,
+ /* 320 */
+ 303, 302, 25, 17, 225, 208, 268, 196, 208, 305,
+ /* 330 */
+ 485, 208, 230, 200, 308, 485, 313, 323, 322, 324,
+ /* 340 */
+ 325, 326, 320, 315, 314, 316, 317, 319, 30, 159,
+ /* 350 */
+ 105, 20, 233, 161, 186, 305, 301, 274, 256, 247,
+ /* 360 */
+ 208, 225, 321, 36, 51, 52, 50, 44, 11, 12,
+ /* 370 */
+ 298, 300, 21, 23, 303, 302, 25, 17, 225, 204,
+ /* 380 */
+ 207, 14, 254, 299, 131, 259, 249, 225, 158, 127,
+ /* 390 */
+ 313, 323, 322, 324, 325, 326, 320, 315, 314, 316,
+ /* 400 */
+ 317, 319, 237, 262, 130, 225, 45, 183, 187, 14,
+ /* 410 */
+ 169, 223, 301, 342, 274, 334, 321, 321, 51, 52,
+ /* 420 */
+ 50, 44, 11, 12, 298, 300, 21, 23, 303, 302,
+ /* 430 */
+ 25, 17, 225, 204, 204, 14, 6, 244, 141, 259,
+ /* 440 */
+ 291, 46, 98, 194, 313, 323, 322, 324, 325, 326,
+ /* 450 */
+ 320, 315, 314, 316, 317, 319, 132, 262, 227, 166,
+ /* 460 */
+ 163, 189, 14, 284, 231, 26, 237, 27, 321, 321,
+ /* 470 */
+ 321, 32, 51, 52, 50, 44, 11, 12, 298, 300,
+ /* 480 */
+ 21, 23, 303, 302, 25, 17, 225, 204, 14, 276,
+ /* 490 */
+ 245, 206, 22, 4, 144, 328, 150, 120, 313, 323,
+ /* 500 */
+ 322, 324, 325, 326, 320, 315, 314, 316, 317, 319,
+ /* 510 */
+ 195, 348, 262, 176, 171, 39, 30, 199, 143, 180,
+ /* 520 */
+ 148, 281, 321, 260, 159, 230, 51, 52, 50, 44,
+ /* 530 */
+ 11, 12, 298, 300, 21, 23, 303, 302, 25, 17,
+ /* 540 */
+ 225, 296, 205, 129, 346, 289, 124, 329, 125, 339,
+ /* 550 */
+ 97, 119, 313, 323, 322, 324, 325, 326, 320, 315,
+ /* 560 */
+ 314, 316, 317, 319, 127, 262, 262, 239, 277, 282,
+ /* 570 */
+ 307, 94, 266, 351, 269, 170, 159, 181, 172, 106,
+ /* 580 */
+ 51, 52, 50, 44, 11, 12, 298, 300, 21, 23,
+ /* 590 */
+ 303, 302, 25, 17, 225, 330, 270, 301, 15, 115,
+ /* 600 */
+ 331, 310, 326, 255, 140, 126, 313, 323, 322, 324,
+ /* 610 */
+ 325, 326, 320, 315, 314, 316, 317, 319, 301, 326,
+ /* 620 */
+ 262, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 630 */
+ 326, 326, 326, 243, 51, 52, 50, 44, 11, 12,
+ /* 640 */
+ 298, 300, 21, 23, 303, 302, 25, 17, 225, 40,
+ /* 650 */
+ 326, 326, 326, 326, 326, 326, 326, 113, 99, 100,
+ /* 660 */
+ 313, 323, 322, 324, 325, 326, 320, 315, 314, 316,
+ /* 670 */
+ 317, 319, 262, 262, 262, 326, 326, 326, 326, 326,
+ /* 680 */
+ 326, 326, 326, 326, 326, 326, 326, 326, 51, 52,
+ /* 690 */
+ 50, 44, 11, 12, 298, 300, 21, 23, 303, 302,
+ /* 700 */
+ 25, 17, 225, 326, 326, 326, 326, 326, 326, 326,
+ /* 710 */
+ 326, 114, 326, 326, 313, 323, 322, 324, 325, 326,
+ /* 720 */
+ 320, 315, 314, 316, 317, 319, 262, 326, 326, 326,
+ /* 730 */
+ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 740 */
+ 326, 286, 51, 52, 50, 44, 11, 12, 298, 300,
+ /* 750 */
+ 21, 23, 303, 302, 25, 17, 225, 326, 326, 326,
+ /* 760 */
+ 326, 326, 326, 326, 326, 326, 326, 326, 313, 323,
+ /* 770 */
+ 322, 324, 325, 326, 320, 315, 314, 316, 317, 319,
+ /* 780 */
+ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 790 */
+ 326, 326, 326, 326, 326, 326, 51, 52, 50, 44,
+ /* 800 */
+ 11, 12, 298, 300, 21, 23, 303, 302, 25, 17,
+ /* 810 */
+ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 820 */
+ 159, 326, 313, 323, 322, 324, 325, 326, 320, 315,
+ /* 830 */
+ 314, 316, 317, 319, 326, 326, 326, 326, 51, 52,
+ /* 840 */
+ 50, 44, 11, 12, 298, 300, 21, 23, 303, 302,
+ /* 850 */
+ 25, 17, 326, 326, 326, 326, 326, 326, 212, 326,
+ /* 860 */
+ 326, 326, 326, 9, 313, 323, 322, 324, 325, 326,
+ /* 870 */
+ 320, 315, 314, 316, 317, 319, 326, 326, 326, 326,
+ /* 880 */
+ 326, 326, 326, 8, 138, 211, 326, 326, 2, 108,
+ /* 890 */
+ 326, 235, 326, 326, 139, 157, 165, 326, 250, 128,
+ /* 900 */
+ 228, 326, 246, 326, 24, 321, 326, 48, 261, 326,
+ /* 910 */
+ 326, 251, 336, 353, 326, 311, 326, 301, 174, 173,
+ /* 920 */
+ 326, 326, 49, 47, 280, 238, 297, 321, 321, 105,
+ /* 930 */
+ 1, 337, 326, 147, 326, 326, 326, 326, 326, 301,
+ /* 940 */
+ 301, 8, 123, 92, 96, 257, 2, 108, 326, 311,
+ /* 950 */
+ 326, 326, 139, 326, 326, 235, 250, 309, 228, 146,
+ /* 960 */
+ 246, 326, 24, 128, 162, 48, 326, 326, 326, 326,
+ /* 970 */
+ 235, 326, 350, 321, 155, 251, 336, 353, 128, 311,
+ /* 980 */
+ 49, 47, 280, 238, 297, 301, 326, 105, 1, 326,
+ /* 990 */
+ 251, 336, 353, 326, 311, 14, 326, 299, 326, 8,
+ /* 1000 */
+ 138, 224, 96, 326, 2, 108, 326, 41, 326, 252,
+ /* 1010 */
+ 139, 235, 326, 32, 250, 153, 228, 326, 246, 128,
+ /* 1020 */
+ 24, 326, 326, 48, 326, 326, 326, 326, 326, 326,
+ /* 1030 */
+ 326, 251, 336, 353, 326, 311, 326, 326, 49, 47,
+ /* 1040 */
+ 280, 238, 297, 326, 326, 105, 1, 326, 326, 326,
+ /* 1050 */
+ 326, 326, 14, 326, 299, 326, 326, 8, 142, 224,
+ /* 1060 */
+ 96, 326, 2, 108, 41, 235, 248, 326, 139, 154,
+ /* 1070 */
+ 32, 235, 250, 128, 228, 156, 246, 326, 33, 128,
+ /* 1080 */
+ 326, 48, 326, 326, 326, 251, 336, 353, 326, 311,
+ /* 1090 */
+ 326, 251, 336, 353, 326, 311, 49, 47, 280, 238,
+ /* 1100 */
+ 297, 326, 326, 105, 1, 326, 326, 326, 326, 326,
+ /* 1110 */
+ 326, 326, 326, 326, 326, 8, 138, 213, 96, 326,
+ /* 1120 */
+ 2, 108, 326, 326, 326, 326, 139, 235, 326, 326,
+ /* 1130 */
+ 250, 149, 228, 326, 246, 128, 24, 326, 326, 48,
+ /* 1140 */
+ 326, 326, 326, 326, 326, 326, 326, 251, 336, 353,
+ /* 1150 */
+ 326, 311, 326, 326, 49, 47, 280, 238, 297, 326,
+ /* 1160 */
+ 326, 105, 1, 326, 326, 326, 326, 326, 326, 326,
+ /* 1170 */
+ 326, 326, 326, 8, 138, 210, 96, 326, 2, 108,
+ /* 1180 */
+ 326, 326, 326, 326, 139, 235, 326, 326, 250, 151,
+ /* 1190 */
+ 228, 326, 219, 128, 24, 326, 326, 48, 326, 326,
+ /* 1200 */
+ 326, 326, 326, 326, 326, 251, 336, 353, 326, 311,
+ /* 1210 */
+ 326, 326, 49, 47, 280, 238, 297, 326, 326, 105,
+ /* 1220 */
+ 1, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 1230 */
+ 326, 8, 136, 224, 96, 326, 2, 108, 326, 326,
+ /* 1240 */
+ 326, 326, 139, 235, 326, 326, 250, 152, 228, 326,
+ /* 1250 */
+ 246, 128, 24, 326, 326, 48, 326, 326, 326, 326,
+ /* 1260 */
+ 326, 326, 326, 251, 336, 353, 326, 311, 326, 326,
+ /* 1270 */
+ 49, 47, 280, 238, 297, 326, 326, 105, 1, 326,
+ /* 1280 */
+ 225, 326, 391, 326, 422, 326, 326, 326, 326, 8,
+ /* 1290 */
+ 135, 224, 96, 326, 2, 108, 326, 326, 326, 326,
+ /* 1300 */
+ 139, 236, 229, 326, 250, 326, 228, 326, 246, 41,
+ /* 1310 */
+ 5, 422, 326, 48, 326, 32, 326, 422, 7, 326,
+ /* 1320 */
+ 7, 326, 326, 326, 198, 178, 326, 326, 49, 47,
+ /* 1330 */
+ 280, 238, 297, 326, 321, 105, 1, 43, 19, 326,
+ /* 1340 */
+ 326, 134, 326, 134, 326, 326, 326, 8, 138, 209,
+ /* 1350 */
+ 96, 208, 2, 108, 326, 326, 326, 326, 139, 326,
+ /* 1360 */
+ 326, 326, 250, 326, 228, 326, 246, 326, 24, 198,
+ /* 1370 */
+ 164, 48, 326, 326, 326, 326, 326, 326, 326, 321,
+ /* 1380 */
+ 326, 326, 43, 19, 326, 326, 49, 47, 280, 238,
+ /* 1390 */
+ 297, 326, 326, 105, 1, 326, 208, 326, 326, 326,
+ /* 1400 */
+ 326, 326, 326, 326, 326, 8, 142, 224, 96, 326,
+ /* 1410 */
+ 2, 108, 326, 326, 326, 326, 139, 326, 326, 326,
+ /* 1420 */
+ 250, 326, 228, 326, 246, 326, 33, 198, 177, 48,
+ /* 1430 */
+ 326, 326, 326, 326, 326, 326, 326, 321, 326, 326,
+ /* 1440 */
+ 43, 19, 326, 326, 49, 47, 280, 238, 297, 326,
+ /* 1450 */
+ 326, 105, 326, 326, 208, 326, 326, 326, 326, 326,
+ /* 1460 */
+ 326, 326, 326, 8, 142, 222, 96, 326, 2, 108,
+ /* 1470 */
+ 326, 326, 326, 326, 139, 326, 326, 326, 250, 326,
+ /* 1480 */
+ 228, 326, 246, 326, 33, 326, 467, 48, 326, 326,
+ /* 1490 */
+ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 1500 */
+ 326, 326, 49, 47, 280, 238, 297, 326, 467, 105,
+ /* 1510 */
+ 467, 467, 326, 467, 467, 326, 326, 326, 326, 467,
+ /* 1520 */
+ 326, 467, 7, 467, 96, 326, 326, 326, 326, 326,
+ /* 1530 */
+ 326, 326, 326, 326, 326, 235, 326, 326, 467, 121,
+ /* 1540 */
+ 326, 326, 86, 128, 326, 134, 326, 326, 326, 467,
+ /* 1550 */
+ 326, 290, 318, 326, 326, 251, 336, 353, 326, 311,
+ /* 1560 */
+ 326, 326, 326, 467, 326, 326, 326, 235, 326, 216,
+ /* 1570 */
+ 354, 133, 326, 326, 68, 117, 249, 326, 326, 326,
+ /* 1580 */
+ 326, 326, 326, 290, 318, 326, 326, 251, 336, 353,
+ /* 1590 */
+ 235, 311, 326, 326, 133, 326, 326, 76, 128, 326,
+ /* 1600 */
+ 326, 326, 326, 326, 326, 326, 290, 318, 326, 235,
+ /* 1610 */
+ 251, 336, 353, 133, 311, 326, 76, 128, 326, 326,
+ /* 1620 */
+ 326, 221, 326, 326, 326, 290, 318, 326, 326, 251,
+ /* 1630 */
+ 336, 353, 326, 311, 326, 326, 326, 326, 235, 326,
+ /* 1640 */
+ 215, 326, 121, 326, 326, 86, 128, 326, 326, 326,
+ /* 1650 */
+ 326, 326, 326, 326, 290, 318, 326, 326, 251, 336,
+ /* 1660 */
+ 353, 235, 311, 326, 326, 133, 326, 326, 59, 117,
+ /* 1670 */
+ 137, 326, 326, 355, 326, 326, 326, 290, 318, 326,
+ /* 1680 */
+ 326, 251, 336, 353, 235, 311, 326, 326, 133, 326,
+ /* 1690 */
+ 326, 76, 128, 326, 326, 326, 326, 326, 326, 326,
+ /* 1700 */
+ 290, 318, 326, 235, 251, 336, 353, 110, 311, 326,
+ /* 1710 */
+ 69, 128, 326, 326, 326, 217, 326, 326, 326, 290,
+ /* 1720 */
+ 318, 326, 326, 251, 336, 353, 326, 311, 326, 235,
+ /* 1730 */
+ 101, 160, 326, 133, 326, 326, 57, 128, 326, 326,
+ /* 1740 */
+ 321, 326, 326, 43, 19, 290, 318, 326, 235, 251,
+ /* 1750 */
+ 336, 353, 133, 311, 326, 73, 128, 208, 326, 326,
+ /* 1760 */
+ 326, 326, 326, 326, 290, 318, 326, 326, 251, 336,
+ /* 1770 */
+ 353, 235, 311, 326, 326, 133, 326, 326, 78, 128,
+ /* 1780 */
+ 326, 326, 326, 326, 326, 326, 326, 290, 318, 326,
+ /* 1790 */
+ 235, 251, 336, 353, 133, 311, 326, 70, 128, 326,
+ /* 1800 */
+ 326, 326, 326, 326, 326, 326, 290, 318, 326, 326,
+ /* 1810 */
+ 251, 336, 353, 326, 311, 326, 235, 198, 167, 326,
+ /* 1820 */
+ 133, 326, 326, 64, 128, 326, 326, 321, 326, 326,
+ /* 1830 */
+ 43, 19, 290, 318, 326, 235, 251, 336, 353, 133,
+ /* 1840 */
+ 311, 326, 67, 128, 208, 326, 326, 326, 326, 326,
+ /* 1850 */
+ 326, 290, 318, 326, 326, 251, 336, 353, 235, 311,
+ /* 1860 */
+ 326, 326, 133, 326, 326, 88, 128, 326, 326, 326,
+ /* 1870 */
+ 326, 326, 326, 326, 290, 318, 326, 235, 251, 336,
+ /* 1880 */
+ 353, 133, 311, 326, 82, 128, 326, 326, 326, 326,
+ /* 1890 */
+ 326, 326, 326, 290, 318, 326, 326, 251, 336, 353,
+ /* 1900 */
+ 326, 311, 326, 235, 198, 188, 326, 133, 326, 326,
+ /* 1910 */
+ 72, 128, 326, 326, 321, 326, 326, 43, 19, 290,
+ /* 1920 */
+ 318, 326, 235, 251, 336, 353, 93, 311, 326, 55,
+ /* 1930 */
+ 116, 208, 326, 326, 326, 326, 326, 326, 290, 318,
+ /* 1940 */
+ 326, 326, 251, 336, 353, 235, 311, 326, 326, 112,
+ /* 1950 */
+ 326, 326, 87, 128, 326, 326, 326, 326, 326, 326,
+ /* 1960 */
+ 326, 290, 318, 326, 235, 251, 336, 353, 133, 311,
+ /* 1970 */
+ 326, 77, 128, 326, 326, 326, 326, 326, 326, 326,
+ /* 1980 */
+ 290, 318, 326, 326, 251, 336, 353, 326, 311, 326,
+ /* 1990 */
+ 235, 326, 326, 326, 133, 326, 326, 89, 128, 326,
+ /* 2000 */
+ 326, 326, 326, 326, 326, 326, 290, 318, 326, 235,
+ /* 2010 */
+ 251, 336, 353, 133, 311, 326, 75, 128, 326, 326,
+ /* 2020 */
+ 326, 326, 326, 326, 326, 290, 318, 326, 326, 251,
+ /* 2030 */
+ 336, 353, 235, 311, 326, 326, 133, 326, 326, 91,
+ /* 2040 */
+ 128, 326, 326, 326, 326, 326, 326, 326, 290, 318,
+ /* 2050 */
+ 326, 235, 251, 336, 353, 133, 311, 326, 62, 128,
+ /* 2060 */
+ 326, 326, 326, 326, 326, 326, 326, 290, 318, 326,
+ /* 2070 */
+ 326, 251, 336, 353, 326, 311, 326, 235, 326, 326,
+ /* 2080 */
+ 326, 93, 326, 326, 53, 116, 326, 326, 326, 326,
+ /* 2090 */
+ 326, 326, 326, 290, 318, 326, 235, 220, 336, 353,
+ /* 2100 */
+ 133, 311, 326, 63, 128, 326, 326, 326, 326, 326,
+ /* 2110 */
+ 326, 326, 290, 318, 326, 326, 251, 336, 353, 235,
+ /* 2120 */
+ 311, 326, 326, 133, 326, 326, 61, 128, 326, 326,
+ /* 2130 */
+ 326, 326, 326, 326, 326, 290, 318, 326, 235, 214,
+ /* 2140 */
+ 336, 353, 133, 311, 326, 71, 128, 326, 326, 326,
+ /* 2150 */
+ 326, 326, 326, 326, 290, 318, 326, 326, 251, 336,
+ /* 2160 */
+ 353, 326, 311, 326, 235, 326, 326, 326, 133, 326,
+ /* 2170 */
+ 326, 85, 128, 326, 326, 326, 326, 326, 326, 326,
+ /* 2180 */
+ 290, 318, 326, 235, 251, 336, 353, 133, 311, 326,
+ /* 2190 */
+ 65, 128, 326, 326, 326, 326, 326, 326, 326, 290,
+ /* 2200 */
+ 318, 326, 326, 251, 336, 353, 235, 311, 326, 326,
+ /* 2210 */
+ 111, 326, 326, 74, 128, 326, 326, 326, 326, 326,
+ /* 2220 */
+ 326, 326, 290, 318, 326, 235, 251, 336, 353, 118,
+ /* 2230 */
+ 311, 326, 58, 128, 326, 326, 326, 326, 326, 326,
+ /* 2240 */
+ 326, 290, 318, 326, 326, 251, 336, 353, 326, 311,
+ /* 2250 */
+ 326, 235, 326, 326, 326, 133, 326, 326, 56, 128,
+ /* 2260 */
+ 326, 326, 326, 326, 326, 326, 326, 290, 318, 326,
+ /* 2270 */
+ 235, 251, 336, 353, 133, 311, 326, 79, 128, 326,
+ /* 2280 */
+ 326, 326, 326, 326, 326, 326, 290, 318, 326, 326,
+ /* 2290 */
+ 251, 336, 353, 235, 311, 326, 326, 133, 326, 326,
+ /* 2300 */
+ 80, 128, 326, 326, 326, 326, 326, 326, 326, 290,
+ /* 2310 */
+ 318, 326, 235, 251, 336, 353, 133, 311, 326, 84,
+ /* 2320 */
+ 128, 326, 326, 326, 326, 326, 326, 326, 290, 318,
+ /* 2330 */
+ 326, 326, 251, 336, 353, 326, 311, 326, 235, 326,
+ /* 2340 */
+ 326, 326, 133, 326, 326, 66, 128, 326, 326, 326,
+ /* 2350 */
+ 326, 326, 326, 326, 290, 318, 326, 344, 251, 336,
+ /* 2360 */
+ 353, 326, 311, 326, 10, 326, 326, 326, 326, 2,
+ /* 2370 */
+ 108, 344, 326, 326, 326, 139, 326, 326, 10, 250,
+ /* 2380 */
+ 326, 228, 326, 2, 108, 326, 326, 326, 326, 139,
+ /* 2390 */
+ 326, 326, 326, 250, 326, 228, 235, 326, 326, 326,
+ /* 2400 */
+ 133, 326, 326, 60, 128, 326, 326, 326, 326, 326,
+ /* 2410 */
+ 326, 326, 290, 318, 326, 326, 251, 336, 353, 326,
+ /* 2420 */
+ 311, 326, 326, 326, 326, 306, 16, 347, 326, 235,
+ /* 2430 */
+ 326, 326, 326, 133, 326, 326, 81, 128, 326, 327,
+ /* 2440 */
+ 16, 347, 326, 326, 326, 290, 318, 326, 326, 251,
+ /* 2450 */
+ 336, 353, 326, 311, 326, 326, 235, 326, 326, 326,
+ /* 2460 */
+ 133, 326, 326, 68, 128, 326, 326, 326, 326, 326,
+ /* 2470 */
+ 326, 326, 290, 318, 326, 326, 251, 336, 353, 326,
+ /* 2480 */
+ 311, 326, 235, 326, 326, 326, 133, 326, 326, 54,
+ /* 2490 */
+ 128, 326, 326, 326, 326, 326, 326, 326, 290, 318,
+ /* 2500 */
+ 326, 326, 251, 336, 353, 235, 311, 326, 326, 133,
+ /* 2510 */
+ 326, 326, 83, 128, 326, 326, 235, 326, 326, 326,
+ /* 2520 */
+ 133, 290, 318, 90, 128, 251, 336, 353, 326, 311,
+ /* 2530 */
+ 326, 326, 290, 318, 326, 326, 251, 336, 353, 326,
+ /* 2540 */
+ 311,
);
static public $yy_lookahead = array(
- /* 0 */ 1, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- /* 10 */ 12, 13, 113, 114, 16, 91, 17, 17, 91, 16,
- /* 20 */ 22, 23, 19, 20, 100, 24, 28, 100, 29, 29,
- /* 30 */ 32, 33, 34, 29, 35, 35, 112, 16, 37, 40,
- /* 40 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- /* 50 */ 51, 52, 53, 1, 82, 83, 84, 85, 86, 38,
- /* 60 */ 16, 90, 18, 19, 90, 66, 67, 68, 69, 70,
- /* 70 */ 71, 72, 73, 74, 75, 76, 77, 103, 104, 27,
- /* 80 */ 36, 29, 16, 96, 18, 19, 16, 35, 117, 19,
- /* 90 */ 20, 117, 40, 41, 42, 43, 44, 45, 46, 47,
- /* 100 */ 48, 49, 50, 51, 52, 53, 4, 5, 6, 7,
- /* 110 */ 8, 20, 118, 38, 38, 13, 14, 15, 66, 67,
- /* 120 */ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
- /* 130 */ 1, 85, 62, 1, 59, 89, 61, 61, 92, 93,
- /* 140 */ 65, 16, 20, 21, 19, 17, 17, 101, 102, 17,
- /* 150 */ 59, 105, 106, 107, 29, 109, 31, 29, 29, 91,
- /* 160 */ 35, 29, 30, 35, 35, 119, 120, 35, 100, 40,
- /* 170 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- /* 180 */ 51, 52, 53, 61, 90, 91, 54, 113, 114, 111,
- /* 190 */ 16, 113, 114, 19, 100, 66, 67, 68, 69, 70,
- /* 200 */ 71, 72, 73, 74, 75, 76, 77, 1, 85, 59,
- /* 210 */ 1, 117, 89, 1, 64, 92, 93, 94, 1, 17,
- /* 220 */ 108, 17, 20, 17, 101, 102, 17, 115, 105, 106,
- /* 230 */ 107, 29, 109, 29, 17, 29, 62, 35, 29, 35,
- /* 240 */ 38, 35, 19, 31, 35, 99, 40, 41, 42, 43,
- /* 250 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- /* 260 */ 1, 16, 37, 61, 19, 20, 54, 110, 1, 2,
- /* 270 */ 25, 54, 66, 67, 68, 69, 70, 71, 72, 73,
- /* 280 */ 74, 75, 76, 77, 17, 62, 90, 91, 29, 1,
- /* 290 */ 65, 90, 110, 37, 35, 39, 100, 20, 21, 40,
- /* 300 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- /* 310 */ 51, 52, 53, 117, 90, 91, 96, 29, 117, 118,
- /* 320 */ 84, 85, 86, 35, 100, 66, 67, 68, 69, 70,
- /* 330 */ 71, 72, 73, 74, 75, 76, 77, 1, 61, 99,
- /* 340 */ 1, 117, 37, 85, 39, 18, 19, 89, 10, 16,
- /* 350 */ 99, 93, 19, 17, 16, 21, 17, 93, 85, 1,
- /* 360 */ 22, 23, 29, 105, 106, 107, 28, 109, 35, 105,
- /* 370 */ 32, 33, 34, 109, 25, 17, 40, 41, 42, 43,
- /* 380 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- /* 390 */ 63, 1, 31, 59, 121, 122, 25, 2, 64, 38,
- /* 400 */ 18, 19, 66, 67, 68, 69, 70, 71, 72, 73,
- /* 410 */ 74, 75, 76, 77, 24, 20, 78, 79, 80, 91,
- /* 420 */ 91, 29, 61, 93, 94, 95, 19, 35, 100, 100,
- /* 430 */ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
- /* 440 */ 50, 51, 52, 53, 91, 117, 117, 37, 16, 39,
- /* 450 */ 79, 19, 110, 100, 112, 19, 66, 67, 68, 69,
- /* 460 */ 70, 71, 72, 73, 74, 75, 76, 77, 1, 85,
- /* 470 */ 117, 1, 1, 89, 108, 90, 92, 93, 94, 16,
- /* 480 */ 1, 115, 19, 17, 17, 101, 102, 17, 17, 105,
- /* 490 */ 106, 107, 29, 109, 31, 29, 17, 91, 35, 29,
- /* 500 */ 21, 35, 117, 19, 18, 35, 100, 40, 41, 42,
- /* 510 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- /* 520 */ 53, 1, 16, 117, 54, 19, 16, 18, 1, 19,
- /* 530 */ 97, 97, 1, 66, 67, 68, 69, 70, 71, 72,
- /* 540 */ 73, 74, 75, 76, 77, 112, 112, 38, 17, 90,
- /* 550 */ 93, 94, 16, 16, 26, 19, 19, 93, 94, 39,
- /* 560 */ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
- /* 570 */ 50, 51, 52, 53, 1, 2, 117, 17, 110, 16,
- /* 580 */ 112, 54, 19, 18, 97, 25, 66, 67, 68, 69,
- /* 590 */ 70, 71, 72, 73, 74, 75, 76, 77, 62, 112,
- /* 600 */ 29, 19, 91, 86, 38, 88, 35, 19, 63, 55,
- /* 610 */ 63, 100, 97, 40, 41, 42, 43, 44, 45, 46,
- /* 620 */ 47, 48, 49, 50, 51, 52, 53, 112, 19, 65,
- /* 630 */ 39, 18, 2, 36, 36, 59, 19, 18, 97, 66,
- /* 640 */ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- /* 650 */ 77, 1, 85, 112, 1, 18, 89, 85, 19, 92,
- /* 660 */ 93, 89, 19, 38, 20, 93, 91, 17, 101, 102,
- /* 670 */ 17, 97, 105, 106, 107, 100, 109, 105, 106, 107,
- /* 680 */ 19, 109, 29, 116, 2, 19, 112, 112, 35, 21,
- /* 690 */ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
- /* 700 */ 50, 51, 52, 53, 1, 1, 100, 54, 112, 117,
- /* 710 */ 111, 2, 21, 110, 98, 97, 66, 67, 68, 69,
- /* 720 */ 70, 71, 72, 73, 74, 75, 76, 77, 112, 61,
- /* 730 */ 112, 85, 14, 110, 87, 115, 114, 123, 123, 123,
- /* 740 */ 123, 123, 97, 40, 41, 42, 43, 44, 45, 46,
- /* 750 */ 47, 48, 49, 50, 51, 52, 53, 112, 123, 123,
- /* 760 */ 123, 123, 123, 123, 123, 123, 123, 123, 122, 66,
- /* 770 */ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- /* 780 */ 77, 1, 79, 85, 123, 1, 123, 89, 123, 123,
- /* 790 */ 92, 93, 123, 97, 17, 123, 97, 17, 17, 101,
- /* 800 */ 102, 17, 123, 105, 106, 107, 29, 109, 112, 123,
- /* 810 */ 29, 112, 35, 29, 116, 123, 35, 123, 123, 35,
- /* 820 */ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
- /* 830 */ 50, 51, 52, 53, 1, 123, 123, 123, 54, 123,
- /* 840 */ 123, 123, 123, 123, 123, 123, 66, 67, 68, 69,
- /* 850 */ 70, 71, 72, 73, 74, 75, 76, 77, 123, 123,
- /* 860 */ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
- /* 870 */ 123, 123, 39, 40, 41, 42, 43, 44, 45, 46,
- /* 880 */ 47, 48, 49, 50, 51, 52, 53, 1, 123, 123,
- /* 890 */ 123, 123, 123, 123, 123, 123, 123, 123, 123, 66,
- /* 900 */ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- /* 910 */ 77, 123, 123, 123, 123, 123, 123, 123, 123, 123,
- /* 920 */ 123, 123, 123, 123, 123, 123, 40, 41, 42, 43,
- /* 930 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- /* 940 */ 1, 123, 123, 123, 123, 123, 123, 123, 123, 123,
- /* 950 */ 123, 65, 66, 67, 68, 69, 70, 71, 72, 73,
- /* 960 */ 74, 75, 76, 77, 123, 123, 123, 123, 123, 30,
- /* 970 */ 123, 123, 123, 123, 123, 123, 123, 123, 123, 40,
- /* 980 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- /* 990 */ 51, 52, 53, 1, 123, 123, 123, 123, 123, 123,
- /* 1000 */ 123, 123, 123, 123, 123, 66, 67, 68, 69, 70,
- /* 1010 */ 71, 72, 73, 74, 75, 76, 77, 123, 123, 123,
- /* 1020 */ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
- /* 1030 */ 123, 123, 40, 41, 42, 43, 44, 45, 46, 47,
- /* 1040 */ 48, 49, 50, 51, 52, 53, 123, 123, 123, 123,
- /* 1050 */ 123, 123, 123, 123, 123, 123, 123, 123, 66, 67,
- /* 1060 */ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
- /* 1070 */ 123, 123, 123, 40, 41, 42, 43, 44, 45, 46,
- /* 1080 */ 47, 48, 49, 50, 51, 52, 53, 123, 123, 123,
- /* 1090 */ 123, 123, 123, 123, 123, 123, 123, 123, 123, 66,
- /* 1100 */ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- /* 1110 */ 77, 123, 123, 123, 123, 123, 16, 123, 18, 19,
- /* 1120 */ 123, 123, 22, 23, 123, 17, 123, 85, 28, 123,
- /* 1130 */ 123, 89, 32, 33, 34, 93, 36, 29, 38, 123,
- /* 1140 */ 123, 41, 123, 35, 102, 123, 85, 105, 106, 107,
- /* 1150 */ 89, 109, 123, 91, 93, 123, 56, 57, 58, 59,
- /* 1160 */ 60, 123, 100, 63, 64, 65, 105, 106, 107, 17,
- /* 1170 */ 109, 123, 123, 16, 112, 18, 19, 123, 78, 22,
- /* 1180 */ 23, 29, 17, 123, 123, 28, 123, 35, 123, 32,
- /* 1190 */ 33, 34, 123, 36, 29, 38, 123, 123, 41, 123,
- /* 1200 */ 35, 123, 85, 123, 123, 123, 89, 123, 123, 92,
- /* 1210 */ 93, 123, 123, 56, 57, 58, 59, 60, 101, 102,
- /* 1220 */ 63, 64, 105, 106, 107, 123, 109, 17, 123, 123,
- /* 1230 */ 16, 123, 18, 19, 123, 78, 22, 23, 123, 29,
- /* 1240 */ 91, 123, 28, 123, 17, 35, 32, 33, 34, 100,
- /* 1250 */ 36, 123, 38, 123, 123, 41, 29, 123, 123, 85,
- /* 1260 */ 123, 112, 35, 89, 123, 123, 92, 93, 123, 123,
- /* 1270 */ 56, 57, 58, 59, 60, 101, 102, 63, 64, 105,
- /* 1280 */ 106, 107, 123, 109, 17, 123, 123, 16, 123, 18,
- /* 1290 */ 19, 123, 78, 22, 23, 123, 29, 123, 123, 28,
- /* 1300 */ 123, 17, 35, 32, 33, 34, 123, 36, 123, 38,
- /* 1310 */ 123, 123, 41, 29, 123, 123, 85, 123, 123, 35,
- /* 1320 */ 89, 123, 123, 92, 93, 123, 123, 56, 57, 58,
- /* 1330 */ 59, 60, 101, 102, 63, 64, 105, 106, 107, 123,
- /* 1340 */ 109, 17, 123, 123, 16, 123, 18, 19, 123, 78,
- /* 1350 */ 22, 23, 123, 29, 123, 123, 28, 123, 17, 35,
- /* 1360 */ 32, 33, 34, 123, 36, 123, 38, 123, 123, 41,
- /* 1370 */ 29, 123, 123, 85, 123, 123, 35, 89, 123, 123,
- /* 1380 */ 92, 93, 123, 123, 56, 57, 58, 59, 60, 101,
- /* 1390 */ 102, 63, 64, 105, 106, 107, 123, 109, 17, 123,
- /* 1400 */ 123, 16, 123, 18, 19, 123, 78, 22, 23, 123,
- /* 1410 */ 29, 123, 123, 28, 123, 17, 35, 32, 33, 34,
- /* 1420 */ 123, 36, 123, 38, 123, 123, 41, 29, 123, 123,
- /* 1430 */ 85, 123, 123, 35, 89, 123, 123, 92, 93, 123,
- /* 1440 */ 123, 56, 57, 58, 59, 60, 101, 102, 63, 64,
- /* 1450 */ 105, 106, 107, 123, 109, 17, 123, 123, 16, 123,
- /* 1460 */ 18, 19, 123, 78, 22, 23, 123, 29, 123, 123,
- /* 1470 */ 28, 123, 17, 35, 32, 33, 34, 123, 36, 123,
- /* 1480 */ 38, 123, 123, 41, 29, 123, 123, 85, 123, 123,
- /* 1490 */ 35, 89, 123, 123, 92, 93, 123, 123, 56, 57,
- /* 1500 */ 58, 59, 60, 101, 102, 63, 64, 105, 106, 107,
- /* 1510 */ 123, 109, 17, 123, 123, 16, 123, 18, 19, 123,
- /* 1520 */ 78, 22, 23, 123, 29, 123, 123, 28, 123, 17,
- /* 1530 */ 35, 32, 33, 34, 123, 36, 123, 38, 123, 123,
- /* 1540 */ 41, 29, 123, 123, 85, 123, 123, 35, 89, 123,
- /* 1550 */ 123, 92, 93, 123, 123, 56, 57, 58, 59, 60,
- /* 1560 */ 101, 102, 63, 64, 105, 106, 107, 123, 109, 123,
- /* 1570 */ 123, 123, 16, 123, 18, 19, 123, 78, 22, 23,
- /* 1580 */ 123, 123, 123, 123, 28, 123, 123, 123, 32, 33,
- /* 1590 */ 34, 123, 36, 123, 38, 123, 123, 41, 123, 123,
- /* 1600 */ 123, 85, 123, 123, 123, 89, 123, 123, 92, 93,
- /* 1610 */ 123, 123, 56, 57, 58, 59, 60, 101, 102, 63,
- /* 1620 */ 64, 105, 106, 107, 123, 109, 123, 123, 123, 16,
- /* 1630 */ 123, 18, 19, 123, 78, 22, 23, 123, 123, 123,
- /* 1640 */ 123, 28, 123, 123, 123, 32, 33, 34, 123, 36,
- /* 1650 */ 123, 38, 123, 123, 41, 123, 123, 123, 85, 123,
- /* 1660 */ 123, 123, 89, 123, 123, 92, 93, 123, 123, 56,
- /* 1670 */ 57, 58, 59, 60, 101, 102, 63, 123, 105, 106,
- /* 1680 */ 107, 123, 109, 123, 123, 123, 16, 123, 18, 19,
- /* 1690 */ 123, 78, 22, 23, 123, 123, 123, 123, 28, 123,
- /* 1700 */ 123, 123, 32, 33, 34, 123, 36, 123, 38, 123,
- /* 1710 */ 123, 41, 123, 123, 123, 85, 123, 123, 123, 89,
- /* 1720 */ 123, 123, 92, 93, 123, 123, 56, 57, 58, 59,
- /* 1730 */ 60, 101, 102, 63, 123, 105, 106, 107, 123, 109,
- /* 1740 */ 123, 123, 123, 123, 17, 123, 116, 123, 78, 123,
- /* 1750 */ 123, 24, 123, 26, 27, 10, 29, 30, 123, 123,
- /* 1760 */ 123, 16, 35, 123, 37, 38, 39, 22, 23, 123,
- /* 1770 */ 90, 91, 123, 28, 123, 123, 123, 32, 33, 34,
- /* 1780 */ 100, 54, 123, 103, 104, 123, 123, 123, 61, 123,
- /* 1790 */ 123, 123, 65, 123, 85, 90, 91, 117, 89, 123,
- /* 1800 */ 123, 92, 93, 123, 123, 100, 79, 123, 103, 104,
- /* 1810 */ 101, 102, 123, 85, 105, 106, 107, 89, 109, 123,
- /* 1820 */ 123, 93, 117, 78, 79, 80, 123, 123, 123, 120,
- /* 1830 */ 102, 123, 85, 105, 106, 107, 89, 109, 123, 92,
- /* 1840 */ 93, 123, 1, 85, 123, 123, 123, 89, 101, 102,
- /* 1850 */ 92, 93, 105, 106, 107, 123, 109, 123, 17, 101,
- /* 1860 */ 102, 123, 21, 105, 106, 107, 123, 109, 123, 123,
- /* 1870 */ 29, 123, 123, 123, 85, 123, 35, 123, 89, 38,
- /* 1880 */ 123, 92, 93, 123, 123, 123, 123, 123, 123, 123,
- /* 1890 */ 101, 102, 123, 123, 105, 106, 107, 85, 109, 123,
- /* 1900 */ 123, 89, 61, 85, 92, 93, 123, 89, 123, 123,
- /* 1910 */ 123, 93, 123, 101, 102, 123, 123, 105, 106, 107,
- /* 1920 */ 123, 109, 85, 105, 106, 107, 89, 109, 123, 92,
- /* 1930 */ 93, 123, 123, 85, 123, 123, 123, 89, 101, 102,
- /* 1940 */ 92, 93, 105, 106, 107, 123, 109, 123, 123, 101,
- /* 1950 */ 102, 123, 123, 105, 106, 107, 123, 109, 123, 123,
- /* 1960 */ 85, 90, 91, 123, 89, 123, 123, 92, 93, 123,
- /* 1970 */ 123, 100, 123, 123, 103, 104, 101, 102, 123, 123,
- /* 1980 */ 105, 106, 107, 85, 109, 123, 123, 89, 117, 85,
- /* 1990 */ 92, 93, 123, 89, 123, 123, 123, 93, 123, 101,
- /* 2000 */ 102, 123, 123, 105, 106, 107, 123, 109, 85, 105,
- /* 2010 */ 106, 107, 89, 109, 123, 92, 93, 123, 123, 85,
- /* 2020 */ 123, 123, 123, 89, 101, 102, 92, 93, 105, 106,
- /* 2030 */ 107, 123, 109, 123, 123, 101, 102, 123, 123, 105,
- /* 2040 */ 106, 107, 123, 109, 123, 123, 85, 123, 123, 123,
- /* 2050 */ 89, 123, 123, 92, 93, 123, 123, 123, 123, 123,
- /* 2060 */ 123, 123, 101, 102, 123, 123, 105, 106, 107, 85,
- /* 2070 */ 109, 123, 123, 89, 123, 85, 92, 93, 123, 89,
- /* 2080 */ 123, 123, 123, 93, 123, 101, 102, 123, 123, 105,
- /* 2090 */ 106, 107, 123, 109, 85, 105, 106, 107, 89, 109,
- /* 2100 */ 123, 92, 93, 123, 123, 85, 123, 123, 123, 89,
- /* 2110 */ 101, 102, 92, 93, 105, 106, 107, 123, 109, 123,
- /* 2120 */ 123, 101, 102, 123, 123, 105, 106, 107, 123, 109,
- /* 2130 */ 123, 123, 85, 123, 123, 123, 89, 123, 123, 92,
- /* 2140 */ 93, 123, 123, 123, 123, 123, 123, 123, 101, 102,
- /* 2150 */ 123, 123, 105, 106, 107, 85, 109, 123, 123, 89,
- /* 2160 */ 123, 85, 92, 93, 123, 89, 123, 123, 123, 93,
- /* 2170 */ 123, 101, 102, 123, 123, 105, 106, 107, 123, 109,
- /* 2180 */ 85, 105, 106, 107, 89, 109, 123, 92, 93, 123,
- /* 2190 */ 123, 85, 123, 123, 123, 89, 101, 102, 92, 93,
- /* 2200 */ 105, 106, 107, 123, 109, 123, 123, 101, 102, 123,
- /* 2210 */ 123, 105, 106, 107, 123, 109, 123, 123, 85, 123,
- /* 2220 */ 123, 123, 89, 123, 123, 92, 93, 123, 123, 123,
- /* 2230 */ 123, 123, 123, 123, 101, 102, 123, 123, 105, 106,
- /* 2240 */ 107, 85, 109, 123, 123, 89, 123, 123, 92, 93,
- /* 2250 */ 123, 123, 123, 123, 123, 123, 123, 101, 102, 123,
- /* 2260 */ 123, 105, 106, 107, 123, 109, 85, 123, 123, 123,
- /* 2270 */ 89, 123, 123, 92, 93, 123, 123, 85, 123, 123,
- /* 2280 */ 123, 89, 101, 102, 92, 93, 105, 106, 107, 123,
- /* 2290 */ 109, 123, 123, 101, 102, 123, 123, 105, 106, 107,
- /* 2300 */ 123, 109, 123, 123, 85, 123, 123, 123, 89, 123,
- /* 2310 */ 123, 92, 93, 123, 123, 123, 123, 123, 123, 123,
- /* 2320 */ 101, 102, 123, 123, 105, 106, 107, 85, 109, 123,
- /* 2330 */ 123, 89, 123, 123, 92, 93, 123, 123, 123, 123,
- /* 2340 */ 123, 123, 123, 101, 102, 123, 123, 105, 106, 107,
- /* 2350 */ 123, 109, 85, 123, 123, 123, 89, 123, 123, 92,
- /* 2360 */ 93, 123, 123, 85, 123, 123, 123, 89, 101, 102,
- /* 2370 */ 92, 93, 105, 106, 107, 123, 109, 123, 123, 101,
- /* 2380 */ 102, 123, 123, 105, 106, 107, 123, 109, 123, 123,
- /* 2390 */ 85, 123, 123, 123, 89, 123, 123, 92, 93, 123,
- /* 2400 */ 123, 123, 123, 90, 91, 123, 101, 102, 123, 123,
- /* 2410 */ 105, 106, 107, 100, 109, 123, 103, 104, 90, 91,
- /* 2420 */ 123, 123, 123, 123, 123, 90, 91, 123, 100, 123,
- /* 2430 */ 117, 103, 104, 123, 123, 100, 123, 123, 103, 104,
- /* 2440 */ 123, 123, 123, 123, 123, 117, 123, 123, 123, 123,
- /* 2450 */ 123, 123, 117,
-);
- const YY_SHIFT_USE_DFLT = -3;
- const YY_SHIFT_MAX = 252;
+ /* 0 */
+ 1, 38, 3, 40, 91, 4, 5, 6, 7, 8,
+ /* 10 */
+ 9, 10, 11, 12, 13, 14, 15, 104, 105, 18,
+ /* 20 */
+ 118, 18, 60, 20, 23, 24, 1, 65, 3, 30,
+ /* 30 */
+ 29, 118, 1, 30, 33, 36, 35, 21, 22, 36,
+ /* 40 */
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ /* 50 */
+ 51, 52, 53, 54, 1, 30, 31, 1, 1, 3,
+ /* 60 */
+ 3, 36, 2, 18, 19, 20, 67, 68, 69, 70,
+ /* 70 */
+ 71, 72, 73, 74, 75, 76, 77, 78, 62, 30,
+ /* 80 */
+ 55, 28, 37, 30, 111, 36, 30, 30, 18, 36,
+ /* 90 */
+ 20, 21, 36, 36, 41, 42, 43, 44, 45, 46,
+ /* 100 */
+ 47, 48, 49, 50, 51, 52, 53, 54, 1, 91,
+ /* 110 */
+ 92, 55, 55, 83, 84, 85, 86, 87, 38, 101,
+ /* 120 */
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ /* 130 */
+ 77, 78, 18, 63, 20, 21, 118, 30, 1, 18,
+ /* 140 */
+ 3, 20, 21, 36, 111, 39, 66, 26, 41, 42,
+ /* 150 */
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ /* 160 */
+ 53, 54, 1, 1, 26, 3, 60, 30, 62, 15,
+ /* 170 */
+ 16, 17, 66, 36, 67, 68, 69, 70, 71, 72,
+ /* 180 */
+ 73, 74, 75, 76, 77, 78, 18, 19, 20, 32,
+ /* 190 */
+ 100, 1, 30, 109, 1, 18, 39, 20, 36, 1,
+ /* 200 */
+ 116, 3, 41, 42, 43, 44, 45, 46, 47, 48,
+ /* 210 */
+ 49, 50, 51, 52, 53, 54, 1, 55, 80, 62,
+ /* 220 */
+ 30, 85, 86, 87, 39, 32, 36, 66, 67, 68,
+ /* 230 */
+ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ /* 240 */
+ 63, 86, 114, 115, 91, 92, 31, 62, 55, 18,
+ /* 250 */
+ 38, 20, 40, 55, 101, 18, 41, 42, 43, 44,
+ /* 260 */
+ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ /* 270 */
+ 1, 118, 3, 94, 95, 96, 39, 122, 123, 38,
+ /* 280 */
+ 91, 40, 67, 68, 69, 70, 71, 72, 73, 74,
+ /* 290 */
+ 75, 76, 77, 78, 63, 114, 115, 100, 91, 92,
+ /* 300 */
+ 112, 91, 114, 115, 91, 19, 20, 118, 101, 20,
+ /* 310 */
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ /* 320 */
+ 51, 52, 53, 54, 1, 118, 3, 100, 118, 119,
+ /* 330 */
+ 60, 118, 2, 91, 3, 65, 67, 68, 69, 70,
+ /* 340 */
+ 71, 72, 73, 74, 75, 76, 77, 78, 21, 22,
+ /* 350 */
+ 64, 21, 63, 92, 111, 119, 113, 26, 19, 20,
+ /* 360 */
+ 118, 1, 101, 21, 41, 42, 43, 44, 45, 46,
+ /* 370 */
+ 47, 48, 49, 50, 51, 52, 53, 54, 1, 118,
+ /* 380 */
+ 3, 18, 22, 20, 19, 94, 95, 1, 98, 62,
+ /* 390 */
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ /* 400 */
+ 77, 78, 60, 113, 39, 1, 2, 92, 92, 18,
+ /* 410 */
+ 111, 20, 113, 87, 26, 89, 101, 101, 41, 42,
+ /* 420 */
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ /* 430 */
+ 53, 54, 1, 118, 118, 18, 39, 20, 19, 94,
+ /* 440 */
+ 95, 55, 98, 25, 67, 68, 69, 70, 71, 72,
+ /* 450 */
+ 73, 74, 75, 76, 77, 78, 38, 113, 86, 92,
+ /* 460 */
+ 92, 92, 18, 40, 20, 30, 60, 2, 101, 101,
+ /* 470 */
+ 101, 36, 41, 42, 43, 44, 45, 46, 47, 48,
+ /* 480 */
+ 49, 50, 51, 52, 53, 54, 1, 118, 18, 109,
+ /* 490 */
+ 20, 20, 56, 39, 19, 123, 116, 98, 67, 68,
+ /* 500 */
+ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ /* 510 */
+ 25, 80, 113, 92, 64, 27, 21, 20, 19, 64,
+ /* 520 */
+ 20, 3, 101, 20, 22, 2, 41, 42, 43, 44,
+ /* 530 */
+ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ /* 540 */
+ 1, 20, 3, 19, 3, 20, 20, 20, 19, 66,
+ /* 550 */
+ 98, 98, 67, 68, 69, 70, 71, 72, 73, 74,
+ /* 560 */
+ 75, 76, 77, 78, 62, 113, 113, 20, 37, 37,
+ /* 570 */
+ 3, 20, 20, 101, 112, 111, 22, 111, 111, 111,
+ /* 580 */
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ /* 590 */
+ 51, 52, 53, 54, 1, 116, 30, 113, 97, 88,
+ /* 600 */
+ 16, 115, 124, 97, 99, 98, 67, 68, 69, 70,
+ /* 610 */
+ 71, 72, 73, 74, 75, 76, 77, 78, 113, 124,
+ /* 620 */
+ 113, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ /* 630 */
+ 124, 124, 124, 40, 41, 42, 43, 44, 45, 46,
+ /* 640 */
+ 47, 48, 49, 50, 51, 52, 53, 54, 1, 2,
+ /* 650 */
+ 124, 124, 124, 124, 124, 124, 124, 98, 98, 98,
+ /* 660 */
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ /* 670 */
+ 77, 78, 113, 113, 113, 124, 124, 124, 124, 124,
+ /* 680 */
+ 124, 124, 124, 124, 124, 124, 124, 124, 41, 42,
+ /* 690 */
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ /* 700 */
+ 53, 54, 1, 124, 124, 124, 124, 124, 124, 124,
+ /* 710 */
+ 124, 98, 124, 124, 67, 68, 69, 70, 71, 72,
+ /* 720 */
+ 73, 74, 75, 76, 77, 78, 113, 124, 124, 124,
+ /* 730 */
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ /* 740 */
+ 124, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+ /* 750 */
+ 49, 50, 51, 52, 53, 54, 1, 124, 124, 124,
+ /* 760 */
+ 124, 124, 124, 124, 124, 124, 124, 124, 67, 68,
+ /* 770 */
+ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ /* 780 */
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ /* 790 */
+ 124, 124, 124, 124, 124, 124, 41, 42, 43, 44,
+ /* 800 */
+ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ /* 810 */
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ /* 820 */
+ 22, 124, 67, 68, 69, 70, 71, 72, 73, 74,
+ /* 830 */
+ 75, 76, 77, 78, 124, 124, 124, 124, 41, 42,
+ /* 840 */
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ /* 850 */
+ 53, 54, 124, 124, 124, 124, 124, 124, 60, 124,
+ /* 860 */
+ 124, 124, 124, 65, 67, 68, 69, 70, 71, 72,
+ /* 870 */
+ 73, 74, 75, 76, 77, 78, 124, 124, 124, 124,
+ /* 880 */
+ 124, 124, 124, 18, 19, 20, 124, 124, 23, 24,
+ /* 890 */
+ 124, 86, 124, 124, 29, 90, 92, 124, 33, 94,
+ /* 900 */
+ 35, 124, 37, 124, 39, 101, 124, 42, 103, 124,
+ /* 910 */
+ 124, 106, 107, 108, 124, 110, 124, 113, 92, 92,
+ /* 920 */
+ 124, 124, 57, 58, 59, 60, 61, 101, 101, 64,
+ /* 930 */
+ 65, 66, 124, 94, 124, 124, 124, 124, 124, 113,
+ /* 940 */
+ 113, 18, 19, 20, 79, 106, 23, 24, 124, 110,
+ /* 950 */
+ 124, 124, 29, 124, 124, 86, 33, 34, 35, 90,
+ /* 960 */
+ 37, 124, 39, 94, 92, 42, 124, 124, 124, 124,
+ /* 970 */
+ 86, 124, 103, 101, 90, 106, 107, 108, 94, 110,
+ /* 980 */
+ 57, 58, 59, 60, 61, 113, 124, 64, 65, 124,
+ /* 990 */
+ 106, 107, 108, 124, 110, 18, 124, 20, 124, 18,
+ /* 1000 */
+ 19, 20, 79, 124, 23, 24, 124, 30, 124, 32,
+ /* 1010 */
+ 29, 86, 124, 36, 33, 90, 35, 124, 37, 94,
+ /* 1020 */
+ 39, 124, 124, 42, 124, 124, 124, 124, 124, 124,
+ /* 1030 */
+ 124, 106, 107, 108, 124, 110, 124, 124, 57, 58,
+ /* 1040 */
+ 59, 60, 61, 124, 124, 64, 65, 124, 124, 124,
+ /* 1050 */
+ 124, 124, 18, 124, 20, 124, 124, 18, 19, 20,
+ /* 1060 */
+ 79, 124, 23, 24, 30, 86, 32, 124, 29, 90,
+ /* 1070 */
+ 36, 86, 33, 94, 35, 90, 37, 124, 39, 94,
+ /* 1080 */
+ 124, 42, 124, 124, 124, 106, 107, 108, 124, 110,
+ /* 1090 */
+ 124, 106, 107, 108, 124, 110, 57, 58, 59, 60,
+ /* 1100 */
+ 61, 124, 124, 64, 65, 124, 124, 124, 124, 124,
+ /* 1110 */
+ 124, 124, 124, 124, 124, 18, 19, 20, 79, 124,
+ /* 1120 */
+ 23, 24, 124, 124, 124, 124, 29, 86, 124, 124,
+ /* 1130 */
+ 33, 90, 35, 124, 37, 94, 39, 124, 124, 42,
+ /* 1140 */
+ 124, 124, 124, 124, 124, 124, 124, 106, 107, 108,
+ /* 1150 */
+ 124, 110, 124, 124, 57, 58, 59, 60, 61, 124,
+ /* 1160 */
+ 124, 64, 65, 124, 124, 124, 124, 124, 124, 124,
+ /* 1170 */
+ 124, 124, 124, 18, 19, 20, 79, 124, 23, 24,
+ /* 1180 */
+ 124, 124, 124, 124, 29, 86, 124, 124, 33, 90,
+ /* 1190 */
+ 35, 124, 37, 94, 39, 124, 124, 42, 124, 124,
+ /* 1200 */
+ 124, 124, 124, 124, 124, 106, 107, 108, 124, 110,
+ /* 1210 */
+ 124, 124, 57, 58, 59, 60, 61, 124, 124, 64,
+ /* 1220 */
+ 65, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ /* 1230 */
+ 124, 18, 19, 20, 79, 124, 23, 24, 124, 124,
+ /* 1240 */
+ 124, 124, 29, 86, 124, 124, 33, 90, 35, 124,
+ /* 1250 */
+ 37, 94, 39, 124, 124, 42, 124, 124, 124, 124,
+ /* 1260 */
+ 124, 124, 124, 106, 107, 108, 124, 110, 124, 124,
+ /* 1270 */
+ 57, 58, 59, 60, 61, 124, 124, 64, 65, 124,
+ /* 1280 */
+ 1, 124, 3, 124, 3, 124, 124, 124, 124, 18,
+ /* 1290 */
+ 19, 20, 79, 124, 23, 24, 124, 124, 124, 124,
+ /* 1300 */
+ 29, 22, 21, 124, 33, 124, 35, 124, 37, 30,
+ /* 1310 */
+ 39, 30, 124, 42, 124, 36, 124, 36, 39, 124,
+ /* 1320 */
+ 39, 124, 124, 124, 91, 92, 124, 124, 57, 58,
+ /* 1330 */
+ 59, 60, 61, 124, 101, 64, 65, 104, 105, 124,
+ /* 1340 */
+ 124, 62, 124, 62, 124, 124, 124, 18, 19, 20,
+ /* 1350 */
+ 79, 118, 23, 24, 124, 124, 124, 124, 29, 124,
+ /* 1360 */
+ 124, 124, 33, 124, 35, 124, 37, 124, 39, 91,
+ /* 1370 */
+ 92, 42, 124, 124, 124, 124, 124, 124, 124, 101,
+ /* 1380 */
+ 124, 124, 104, 105, 124, 124, 57, 58, 59, 60,
+ /* 1390 */
+ 61, 124, 124, 64, 65, 124, 118, 124, 124, 124,
+ /* 1400 */
+ 124, 124, 124, 124, 124, 18, 19, 20, 79, 124,
+ /* 1410 */
+ 23, 24, 124, 124, 124, 124, 29, 124, 124, 124,
+ /* 1420 */
+ 33, 124, 35, 124, 37, 124, 39, 91, 92, 42,
+ /* 1430 */
+ 124, 124, 124, 124, 124, 124, 124, 101, 124, 124,
+ /* 1440 */
+ 104, 105, 124, 124, 57, 58, 59, 60, 61, 124,
+ /* 1450 */
+ 124, 64, 124, 124, 118, 124, 124, 124, 124, 124,
+ /* 1460 */
+ 124, 124, 124, 18, 19, 20, 79, 124, 23, 24,
+ /* 1470 */
+ 124, 124, 124, 124, 29, 124, 124, 124, 33, 124,
+ /* 1480 */
+ 35, 124, 37, 124, 39, 124, 3, 42, 124, 124,
+ /* 1490 */
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ /* 1500 */
+ 124, 124, 57, 58, 59, 60, 61, 124, 25, 64,
+ /* 1510 */
+ 27, 28, 124, 30, 31, 124, 124, 124, 124, 36,
+ /* 1520 */
+ 124, 38, 39, 40, 79, 124, 124, 124, 124, 124,
+ /* 1530 */
+ 124, 124, 124, 124, 124, 86, 124, 124, 55, 90,
+ /* 1540 */
+ 124, 124, 93, 94, 124, 62, 124, 124, 124, 66,
+ /* 1550 */
+ 124, 102, 103, 124, 124, 106, 107, 108, 124, 110,
+ /* 1560 */
+ 124, 124, 124, 80, 124, 124, 124, 86, 124, 120,
+ /* 1570 */
+ 121, 90, 124, 124, 93, 94, 95, 124, 124, 124,
+ /* 1580 */
+ 124, 124, 124, 102, 103, 124, 124, 106, 107, 108,
+ /* 1590 */
+ 86, 110, 124, 124, 90, 124, 124, 93, 94, 124,
+ /* 1600 */
+ 124, 124, 124, 124, 124, 124, 102, 103, 124, 86,
+ /* 1610 */
+ 106, 107, 108, 90, 110, 124, 93, 94, 124, 124,
+ /* 1620 */
+ 124, 117, 124, 124, 124, 102, 103, 124, 124, 106,
+ /* 1630 */
+ 107, 108, 124, 110, 124, 124, 124, 124, 86, 124,
+ /* 1640 */
+ 117, 124, 90, 124, 124, 93, 94, 124, 124, 124,
+ /* 1650 */
+ 124, 124, 124, 124, 102, 103, 124, 124, 106, 107,
+ /* 1660 */
+ 108, 86, 110, 124, 124, 90, 124, 124, 93, 94,
+ /* 1670 */
+ 95, 124, 124, 121, 124, 124, 124, 102, 103, 124,
+ /* 1680 */
+ 124, 106, 107, 108, 86, 110, 124, 124, 90, 124,
+ /* 1690 */
+ 124, 93, 94, 124, 124, 124, 124, 124, 124, 124,
+ /* 1700 */
+ 102, 103, 124, 86, 106, 107, 108, 90, 110, 124,
+ /* 1710 */
+ 93, 94, 124, 124, 124, 117, 124, 124, 124, 102,
+ /* 1720 */
+ 103, 124, 124, 106, 107, 108, 124, 110, 124, 86,
+ /* 1730 */
+ 91, 92, 124, 90, 124, 124, 93, 94, 124, 124,
+ /* 1740 */
+ 101, 124, 124, 104, 105, 102, 103, 124, 86, 106,
+ /* 1750 */
+ 107, 108, 90, 110, 124, 93, 94, 118, 124, 124,
+ /* 1760 */
+ 124, 124, 124, 124, 102, 103, 124, 124, 106, 107,
+ /* 1770 */
+ 108, 86, 110, 124, 124, 90, 124, 124, 93, 94,
+ /* 1780 */
+ 124, 124, 124, 124, 124, 124, 124, 102, 103, 124,
+ /* 1790 */
+ 86, 106, 107, 108, 90, 110, 124, 93, 94, 124,
+ /* 1800 */
+ 124, 124, 124, 124, 124, 124, 102, 103, 124, 124,
+ /* 1810 */
+ 106, 107, 108, 124, 110, 124, 86, 91, 92, 124,
+ /* 1820 */
+ 90, 124, 124, 93, 94, 124, 124, 101, 124, 124,
+ /* 1830 */
+ 104, 105, 102, 103, 124, 86, 106, 107, 108, 90,
+ /* 1840 */
+ 110, 124, 93, 94, 118, 124, 124, 124, 124, 124,
+ /* 1850 */
+ 124, 102, 103, 124, 124, 106, 107, 108, 86, 110,
+ /* 1860 */
+ 124, 124, 90, 124, 124, 93, 94, 124, 124, 124,
+ /* 1870 */
+ 124, 124, 124, 124, 102, 103, 124, 86, 106, 107,
+ /* 1880 */
+ 108, 90, 110, 124, 93, 94, 124, 124, 124, 124,
+ /* 1890 */
+ 124, 124, 124, 102, 103, 124, 124, 106, 107, 108,
+ /* 1900 */
+ 124, 110, 124, 86, 91, 92, 124, 90, 124, 124,
+ /* 1910 */
+ 93, 94, 124, 124, 101, 124, 124, 104, 105, 102,
+ /* 1920 */
+ 103, 124, 86, 106, 107, 108, 90, 110, 124, 93,
+ /* 1930 */
+ 94, 118, 124, 124, 124, 124, 124, 124, 102, 103,
+ /* 1940 */
+ 124, 124, 106, 107, 108, 86, 110, 124, 124, 90,
+ /* 1950 */
+ 124, 124, 93, 94, 124, 124, 124, 124, 124, 124,
+ /* 1960 */
+ 124, 102, 103, 124, 86, 106, 107, 108, 90, 110,
+ /* 1970 */
+ 124, 93, 94, 124, 124, 124, 124, 124, 124, 124,
+ /* 1980 */
+ 102, 103, 124, 124, 106, 107, 108, 124, 110, 124,
+ /* 1990 */
+ 86, 124, 124, 124, 90, 124, 124, 93, 94, 124,
+ /* 2000 */
+ 124, 124, 124, 124, 124, 124, 102, 103, 124, 86,
+ /* 2010 */
+ 106, 107, 108, 90, 110, 124, 93, 94, 124, 124,
+ /* 2020 */
+ 124, 124, 124, 124, 124, 102, 103, 124, 124, 106,
+ /* 2030 */
+ 107, 108, 86, 110, 124, 124, 90, 124, 124, 93,
+ /* 2040 */
+ 94, 124, 124, 124, 124, 124, 124, 124, 102, 103,
+ /* 2050 */
+ 124, 86, 106, 107, 108, 90, 110, 124, 93, 94,
+ /* 2060 */
+ 124, 124, 124, 124, 124, 124, 124, 102, 103, 124,
+ /* 2070 */
+ 124, 106, 107, 108, 124, 110, 124, 86, 124, 124,
+ /* 2080 */
+ 124, 90, 124, 124, 93, 94, 124, 124, 124, 124,
+ /* 2090 */
+ 124, 124, 124, 102, 103, 124, 86, 106, 107, 108,
+ /* 2100 */
+ 90, 110, 124, 93, 94, 124, 124, 124, 124, 124,
+ /* 2110 */
+ 124, 124, 102, 103, 124, 124, 106, 107, 108, 86,
+ /* 2120 */
+ 110, 124, 124, 90, 124, 124, 93, 94, 124, 124,
+ /* 2130 */
+ 124, 124, 124, 124, 124, 102, 103, 124, 86, 106,
+ /* 2140 */
+ 107, 108, 90, 110, 124, 93, 94, 124, 124, 124,
+ /* 2150 */
+ 124, 124, 124, 124, 102, 103, 124, 124, 106, 107,
+ /* 2160 */
+ 108, 124, 110, 124, 86, 124, 124, 124, 90, 124,
+ /* 2170 */
+ 124, 93, 94, 124, 124, 124, 124, 124, 124, 124,
+ /* 2180 */
+ 102, 103, 124, 86, 106, 107, 108, 90, 110, 124,
+ /* 2190 */
+ 93, 94, 124, 124, 124, 124, 124, 124, 124, 102,
+ /* 2200 */
+ 103, 124, 124, 106, 107, 108, 86, 110, 124, 124,
+ /* 2210 */
+ 90, 124, 124, 93, 94, 124, 124, 124, 124, 124,
+ /* 2220 */
+ 124, 124, 102, 103, 124, 86, 106, 107, 108, 90,
+ /* 2230 */
+ 110, 124, 93, 94, 124, 124, 124, 124, 124, 124,
+ /* 2240 */
+ 124, 102, 103, 124, 124, 106, 107, 108, 124, 110,
+ /* 2250 */
+ 124, 86, 124, 124, 124, 90, 124, 124, 93, 94,
+ /* 2260 */
+ 124, 124, 124, 124, 124, 124, 124, 102, 103, 124,
+ /* 2270 */
+ 86, 106, 107, 108, 90, 110, 124, 93, 94, 124,
+ /* 2280 */
+ 124, 124, 124, 124, 124, 124, 102, 103, 124, 124,
+ /* 2290 */
+ 106, 107, 108, 86, 110, 124, 124, 90, 124, 124,
+ /* 2300 */
+ 93, 94, 124, 124, 124, 124, 124, 124, 124, 102,
+ /* 2310 */
+ 103, 124, 86, 106, 107, 108, 90, 110, 124, 93,
+ /* 2320 */
+ 94, 124, 124, 124, 124, 124, 124, 124, 102, 103,
+ /* 2330 */
+ 124, 124, 106, 107, 108, 124, 110, 124, 86, 124,
+ /* 2340 */
+ 124, 124, 90, 124, 124, 93, 94, 124, 124, 124,
+ /* 2350 */
+ 124, 124, 124, 124, 102, 103, 124, 11, 106, 107,
+ /* 2360 */
+ 108, 124, 110, 124, 18, 124, 124, 124, 124, 23,
+ /* 2370 */
+ 24, 11, 124, 124, 124, 29, 124, 124, 18, 33,
+ /* 2380 */
+ 124, 35, 124, 23, 24, 124, 124, 124, 124, 29,
+ /* 2390 */
+ 124, 124, 124, 33, 124, 35, 86, 124, 124, 124,
+ /* 2400 */
+ 90, 124, 124, 93, 94, 124, 124, 124, 124, 124,
+ /* 2410 */
+ 124, 124, 102, 103, 124, 124, 106, 107, 108, 124,
+ /* 2420 */
+ 110, 124, 124, 124, 124, 79, 80, 81, 124, 86,
+ /* 2430 */
+ 124, 124, 124, 90, 124, 124, 93, 94, 124, 79,
+ /* 2440 */
+ 80, 81, 124, 124, 124, 102, 103, 124, 124, 106,
+ /* 2450 */
+ 107, 108, 124, 110, 124, 124, 86, 124, 124, 124,
+ /* 2460 */
+ 90, 124, 124, 93, 94, 124, 124, 124, 124, 124,
+ /* 2470 */
+ 124, 124, 102, 103, 124, 124, 106, 107, 108, 124,
+ /* 2480 */
+ 110, 124, 86, 124, 124, 124, 90, 124, 124, 93,
+ /* 2490 */
+ 94, 124, 124, 124, 124, 124, 124, 124, 102, 103,
+ /* 2500 */
+ 124, 124, 106, 107, 108, 86, 110, 124, 124, 90,
+ /* 2510 */
+ 124, 124, 93, 94, 124, 124, 86, 124, 124, 124,
+ /* 2520 */
+ 90, 102, 103, 93, 94, 106, 107, 108, 124, 110,
+ /* 2530 */
+ 124, 124, 102, 103, 124, 124, 106, 107, 108, 124,
+ /* 2540 */
+ 110,
+ );
+ const YY_SHIFT_USE_DFLT = - 39;
+ const YY_SHIFT_MAX = 259;
static public $yy_shift_ofst = array(
- /* 0 */ -2, 1385, 1385, 1328, 1157, 1328, 1157, 1157, 1100, 1157,
- /* 10 */ 1157, 1157, 1157, 1157, 1157, 1556, 1157, 1157, 1157, 1157,
- /* 20 */ 1556, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
- /* 30 */ 1157, 1157, 1442, 1157, 1157, 1499, 1157, 1157, 1214, 1157,
- /* 40 */ 1157, 1157, 1157, 1442, 1271, 1271, 1670, 1613, 1670, 1670,
- /* 50 */ 1670, 1670, 1670, 206, 129, 52, -1, 259, 259, 259,
- /* 60 */ 833, 886, 939, 780, 650, 390, 336, 467, 703, 520,
- /* 70 */ 573, 992, 992, 992, 992, 992, 992, 992, 992, 992,
- /* 80 */ 992, 992, 992, 992, 992, 992, 992, 992, 992, 992,
- /* 90 */ 1033, 1033, 1841, 784, 288, -2, 338, 125, 463, 209,
- /* 100 */ 333, 209, 333, 327, 288, 267, 288, 334, 509, 1745,
- /* 110 */ 102, 132, 470, 653, 70, 245, 479, 212, 204, 3,
- /* 120 */ 174, 217, 277, 122, 432, 537, 432, 509, 510, 432,
- /* 130 */ 432, 382, 668, 506, 432, 432, 531, 563, 432, 382,
- /* 140 */ 527, 432, 510, 509, 571, 432, 392, 691, 704, 704,
- /* 150 */ 704, 704, 704, 704, 704, 691, 704, -3, 1341, 1381,
- /* 160 */ 1284, 1267, 66, 1108, 1152, 1165, 1210, 536, 1438, 1398,
- /* 170 */ 1495, 1512, 466, 777, 0, 128, 781, 1324, 1455, 1227,
- /* 180 */ 471, 358, 150, 150, 339, 150, 150, 21, 150, 718,
- /* 190 */ 691, 691, 625, 704, 704, 709, 691, 709, 4, 4,
- /* 200 */ -3, -3, -3, -3, -3, 1727, 202, 75, 44, 361,
- /* 210 */ 223, 1, 225, 91, 76, 371, 395, 410, 76, 256,
- /* 220 */ 305, 560, 625, 617, 619, 598, 597, 576, 349, 630,
- /* 230 */ 637, 639, 666, 682, 661, 643, 644, 613, 591, 528,
- /* 240 */ 565, 486, 484, 407, 436, 582, 566, 564, 609, 547,
- /* 250 */ 554, 588, 545,
-);
- const YY_REDUCE_USE_DFLT = -102;
- const YY_REDUCE_MAX = 204;
+ /* 0 */
+ 1, 1097, 1271, 1097, 981, 1271, 981, 981, 923, 865,
+ /* 10 */
+ 923, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ /* 20 */
+ 981, 981, 1213, 981, 981, 981, 1155, 1329, 981, 981,
+ /* 30 */
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ /* 40 */
+ 981, 1155, 981, 981, 1039, 1039, 1445, 1387, 1387, 1387,
+ /* 50 */
+ 1387, 1387, 1387, - 1, 53, 107, 107, 107, 107, 107,
+ /* 60 */
+ 539, 431, 701, 161, 377, 269, 647, 485, 593, 215,
+ /* 70 */
+ 323, 755, 755, 755, 755, 755, 755, 755, 755, 755,
+ /* 80 */
+ 755, 755, 755, 755, 755, 755, 755, 755, 755, 755,
+ /* 90 */
+ 797, 797, 1279, 56, 190, 1, 2346, 977, 1034, 3,
+ /* 100 */
+ 3, 137, 137, 190, 190, 286, 798, 404, 365, 2360,
+ /* 110 */
+ 25, 162, 57, 121, 70, 154, 16, 327, 198, 231,
+ /* 120 */
+ 114, 193, 417, 391, 360, 363, 363, 339, 502, 363,
+ /* 130 */
+ 365, 363, 365, 386, 339, 444, 470, 49, 444, 435,
+ /* 140 */
+ 49, 363, 363, 363, 363, 363, 31, 554, 31, 31,
+ /* 150 */
+ 554, 31, 31, 31, 31, 31, 31, - 39, 177, 168,
+ /* 160 */
+ 49, 49, 49, 49, 49, 49, 49, 49, - 38, - 38,
+ /* 170 */
+ - 38, 270, - 38, 49, 49, 49, 49, 49, 49, - 38,
+ /* 180 */
+ 270, - 38, 237, 49, 49, 49, - 38, 49, 49, 49,
+ /* 190 */
+ 584, 554, 554, 31, 566, 566, 60, 554, 31, 454,
+ /* 200 */
+ 31, 31, 60, 31, - 39, - 39, - 39, - 39, - 39, 1483,
+ /* 210 */
+ 1281, 106, 45, 157, 138, - 37, 80, 241, 418, 342,
+ /* 220 */
+ 331, 212, 185, 330, 185, 289, 552, 541, 526, 525,
+ /* 230 */
+ 521, 523, 524, 527, 529, 567, 551, 532, 531, 483,
+ /* 240 */
+ 547, 503, 518, 436, 454, 465, 406, 397, 419, 423,
+ /* 250 */
+ 471, 388, 475, 455, 500, 499, 497, 450, 488, 495,
+ );
+ const YY_REDUCE_USE_DFLT = - 99;
+ const YY_REDUCE_MAX = 208;
static public $yy_reduce_ofst = array(
- /* 0 */ -28, 46, 1709, 123, 567, 384, 1630, 698, 1961, 1934,
- /* 10 */ 1923, 1875, 1898, 1984, 2009, 2106, 2095, 2070, 2020, 2047,
- /* 20 */ 1848, 1837, 1402, 1345, 1288, 1174, 1231, 1459, 1516, 1812,
- /* 30 */ 1789, 1758, 1573, 1747, 2156, 2133, 2305, 2267, 2181, 2192,
- /* 40 */ 1117, 2219, 2242, 2278, 1042, 1728, 258, 1061, 572, 2076,
- /* 50 */ 1990, 1904, 1818, 1680, 1871, 1705, 2313, 2335, 2328, 1680,
- /* 60 */ -26, -26, -26, -26, -26, -26, -26, -26, -26, -26,
- /* 70 */ -26, -26, -26, -26, -26, -26, -26, -26, -26, -26,
- /* 80 */ -26, -26, -26, -26, -26, -26, -26, -26, -26, -26,
- /* 90 */ -26, -26, 224, 94, 196, 236, 273, 1149, 1062, 406,
- /* 100 */ -76, 353, 575, 264, 328, 201, 329, 78, 330, 646,
- /* 110 */ 517, -29, -29, -29, 342, 616, 385, -29, 68, 342,
- /* 120 */ 342, -29, 74, 74, 618, 433, 574, 457, 515, 541,
- /* 130 */ 433, 112, 74, 433, 434, 487, 459, 699, 468, 366,
- /* 140 */ -29, 696, 433, 464, 511, 645, -73, -101, -29, -29,
- /* 150 */ -29, -29, -29, -29, -29, 74, -29, -29, 606, 606,
- /* 160 */ 606, 606, 620, 606, 606, 606, 606, 596, 606, 606,
- /* 170 */ 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
- /* 180 */ 592, 592, 599, 599, 592, 599, 599, 603, 599, 647,
- /* 190 */ 622, 622, 623, 592, 592, -6, 622, -6, -13, 220,
- /* 200 */ 251, 240, 182, 146, 157,
-);
+ /* 0 */
+ 30, 1449, 1575, 1552, 1523, 1481, 1504, 1598, 1836, 2010,
+ /* 10 */
+ 1991, 1791, 1685, 1643, 1704, 1749, 2033, 2078, 2310, 2419,
+ /* 20 */
+ 2139, 2207, 2252, 2343, 2370, 1772, 1617, 1946, 1904, 2184,
+ /* 30 */
+ 1923, 1878, 1859, 1965, 2052, 1662, 1817, 1730, 2097, 2396,
+ /* 40 */
+ 2430, 2120, 2165, 2226, 869, 805, 985, 925, 884, 979,
+ /* 50 */
+ 1099, 1041, 1157, 1639, 1233, 1639, 1336, 1278, 1726, 1813,
+ /* 60 */
+ - 87, - 87, - 87, - 87, - 87, - 87, - 87, - 87, - 87, - 87,
+ /* 70 */
+ - 87, - 87, - 87, - 87, - 87, - 87, - 87, - 87, - 87, - 87,
+ /* 80 */
+ - 87, - 87, - 87, - 87, - 87, - 87, - 87, - 87, - 87, - 87,
+ /* 90 */
+ - 87, - 87, 18, 207, 153, 136, 155, 827, 872, 804,
+ /* 100 */
+ 826, 261, 316, 369, 315, 839, 188, 210, 179, 372,
+ /* 110 */
+ 189, 189, 189, 505, 299, 326, 128, 128, 189, 299,
+ /* 120 */
+ 299, 189, 507, 453, 242, 344, 243, 84, 128, 452,
+ /* 130 */
+ 291, 399, 345, 189, 380, 613, 453, 421, 453, 368,
+ /* 140 */
+ 367, 560, 453, 559, 561, 290, 189, 128, 213, 189,
+ /* 150 */
+ 181, 189, 189, 189, 189, 189, 189, 189, 484, 479,
+ /* 160 */
+ 472, 472, 472, 472, 472, 472, 472, 472, 462, 462,
+ /* 170 */
+ 462, 464, 462, 472, 472, 472, 472, 472, 472, 462,
+ /* 180 */
+ 467, 462, 466, 472, 472, 472, 462, 472, 472, 472,
+ /* 190 */
+ 511, 486, 486, - 98, 501, 506, 236, 486, - 98, 468,
+ /* 200 */
+ - 98, - 98, 236, - 98, 227, - 27, 197, 33, 90,
+ );
static public $yyExpectedTokens = array(
- /* 0 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 22, 23, 28, 32, 33, 34, ),
- /* 1 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 2 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 3 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 4 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 5 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 6 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 7 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 8 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 65, 78, ),
- /* 9 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 10 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 11 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 12 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 13 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 14 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 15 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 16 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 17 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 18 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 19 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 20 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 21 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 22 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 23 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 24 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 25 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 26 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 27 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 28 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 29 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 30 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 31 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 32 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 33 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 34 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 35 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 36 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 37 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 38 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 39 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 40 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 41 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 42 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 43 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 44 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 45 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 46 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ),
- /* 47 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ),
- /* 48 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ),
- /* 49 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ),
- /* 50 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ),
- /* 51 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ),
- /* 52 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ),
- /* 53 */ array(1, 17, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 54 */ array(1, 17, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 55 */ array(1, 27, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 56 */ array(1, 17, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 57 */ array(1, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 58 */ array(1, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 59 */ array(1, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 60 */ array(1, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 61 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 62 */ array(1, 30, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 63 */ array(1, 17, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 64 */ array(1, 17, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 65 */ array(1, 24, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 66 */ array(1, 17, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 67 */ array(1, 17, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 68 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, ),
- /* 69 */ array(1, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 70 */ array(1, 2, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 71 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 72 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 73 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 74 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 75 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 76 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 77 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 78 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 79 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 80 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 81 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 82 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 83 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 84 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 85 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 86 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 87 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 88 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 89 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 90 */ array(40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 91 */ array(40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 92 */ array(1, 17, 21, 29, 35, 38, 61, ),
- /* 93 */ array(1, 17, 29, 35, 54, ),
- /* 94 */ array(1, 29, 35, ),
- /* 95 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 22, 23, 28, 32, 33, 34, ),
- /* 96 */ array(10, 16, 22, 23, 28, 32, 33, 34, 78, 79, 80, ),
- /* 97 */ array(16, 19, 29, 31, 35, ),
- /* 98 */ array(16, 19, 29, 31, 35, ),
- /* 99 */ array(1, 17, 29, 35, ),
- /* 100 */ array(16, 19, 29, 35, ),
- /* 101 */ array(1, 17, 29, 35, ),
- /* 102 */ array(16, 19, 29, 35, ),
- /* 103 */ array(18, 19, 63, ),
- /* 104 */ array(1, 29, 35, ),
- /* 105 */ array(1, 2, 17, ),
- /* 106 */ array(1, 29, 35, ),
- /* 107 */ array(21, 59, 64, ),
- /* 108 */ array(18, 38, ),
- /* 109 */ array(10, 16, 22, 23, 28, 32, 33, 34, 78, 79, 80, ),
- /* 110 */ array(4, 5, 6, 7, 8, 13, 14, 15, ),
- /* 111 */ array(1, 17, 29, 30, 35, 54, ),
- /* 112 */ array(1, 17, 29, 35, 54, ),
- /* 113 */ array(1, 17, 29, 35, 54, ),
- /* 114 */ array(16, 19, 20, 62, ),
- /* 115 */ array(16, 19, 20, 25, ),
- /* 116 */ array(1, 17, 21, ),
- /* 117 */ array(1, 31, 54, ),
- /* 118 */ array(17, 29, 35, ),
- /* 119 */ array(16, 19, 20, ),
- /* 120 */ array(16, 19, 62, ),
- /* 121 */ array(1, 17, 54, ),
- /* 122 */ array(20, 21, 61, ),
- /* 123 */ array(20, 21, 61, ),
- /* 124 */ array(16, 19, ),
- /* 125 */ array(16, 19, ),
- /* 126 */ array(16, 19, ),
- /* 127 */ array(18, 38, ),
- /* 128 */ array(16, 19, ),
- /* 129 */ array(16, 19, ),
- /* 130 */ array(16, 19, ),
- /* 131 */ array(18, 19, ),
- /* 132 */ array(21, 61, ),
- /* 133 */ array(16, 19, ),
- /* 134 */ array(16, 19, ),
- /* 135 */ array(16, 19, ),
- /* 136 */ array(1, 17, ),
- /* 137 */ array(16, 19, ),
- /* 138 */ array(16, 19, ),
- /* 139 */ array(18, 19, ),
- /* 140 */ array(1, 54, ),
- /* 141 */ array(16, 19, ),
- /* 142 */ array(16, 19, ),
- /* 143 */ array(18, 38, ),
- /* 144 */ array(29, 35, ),
- /* 145 */ array(16, 19, ),
- /* 146 */ array(29, 35, ),
- /* 147 */ array(21, ),
- /* 148 */ array(1, ),
- /* 149 */ array(1, ),
- /* 150 */ array(1, ),
- /* 151 */ array(1, ),
- /* 152 */ array(1, ),
- /* 153 */ array(1, ),
- /* 154 */ array(1, ),
- /* 155 */ array(21, ),
- /* 156 */ array(1, ),
- /* 157 */ array(),
- /* 158 */ array(17, 29, 35, ),
- /* 159 */ array(17, 29, 35, ),
- /* 160 */ array(17, 29, 35, ),
- /* 161 */ array(17, 29, 35, ),
- /* 162 */ array(16, 18, 19, ),
- /* 163 */ array(17, 29, 35, ),
- /* 164 */ array(17, 29, 35, ),
- /* 165 */ array(17, 29, 35, ),
- /* 166 */ array(17, 29, 35, ),
- /* 167 */ array(16, 19, 62, ),
- /* 168 */ array(17, 29, 35, ),
- /* 169 */ array(17, 29, 35, ),
- /* 170 */ array(17, 29, 35, ),
- /* 171 */ array(17, 29, 35, ),
- /* 172 */ array(17, 29, 35, ),
- /* 173 */ array(17, 29, 35, ),
- /* 174 */ array(17, 29, 35, ),
- /* 175 */ array(17, 29, 35, ),
- /* 176 */ array(17, 29, 35, ),
- /* 177 */ array(17, 29, 35, ),
- /* 178 */ array(17, 29, 35, ),
- /* 179 */ array(17, 29, 35, ),
- /* 180 */ array(1, 17, ),
- /* 181 */ array(1, 17, ),
- /* 182 */ array(59, 64, ),
- /* 183 */ array(59, 64, ),
- /* 184 */ array(1, 17, ),
- /* 185 */ array(59, 64, ),
- /* 186 */ array(59, 64, ),
- /* 187 */ array(16, 38, ),
- /* 188 */ array(59, 64, ),
- /* 189 */ array(14, ),
- /* 190 */ array(21, ),
- /* 191 */ array(21, ),
- /* 192 */ array(38, ),
- /* 193 */ array(1, ),
- /* 194 */ array(1, ),
- /* 195 */ array(2, ),
- /* 196 */ array(21, ),
- /* 197 */ array(2, ),
- /* 198 */ array(29, ),
- /* 199 */ array(29, ),
- /* 200 */ array(),
- /* 201 */ array(),
- /* 202 */ array(),
- /* 203 */ array(),
- /* 204 */ array(),
- /* 205 */ array(17, 24, 26, 27, 29, 30, 35, 37, 38, 39, 54, 61, 65, 79, ),
- /* 206 */ array(17, 20, 29, 35, 38, 61, ),
- /* 207 */ array(38, 59, 61, 65, ),
- /* 208 */ array(16, 18, 19, 36, ),
- /* 209 */ array(31, 38, 61, ),
- /* 210 */ array(19, 62, ),
- /* 211 */ array(24, 37, ),
- /* 212 */ array(37, 65, ),
- /* 213 */ array(20, 59, ),
- /* 214 */ array(38, 61, ),
- /* 215 */ array(25, 79, ),
- /* 216 */ array(2, 20, ),
- /* 217 */ array(37, 39, ),
- /* 218 */ array(38, 61, ),
- /* 219 */ array(37, 39, ),
- /* 220 */ array(37, 39, ),
- /* 221 */ array(17, 25, ),
- /* 222 */ array(38, ),
- /* 223 */ array(19, ),
- /* 224 */ array(18, ),
- /* 225 */ array(36, ),
- /* 226 */ array(36, ),
- /* 227 */ array(59, ),
- /* 228 */ array(25, ),
- /* 229 */ array(2, ),
- /* 230 */ array(18, ),
- /* 231 */ array(19, ),
- /* 232 */ array(19, ),
- /* 233 */ array(2, ),
- /* 234 */ array(19, ),
- /* 235 */ array(19, ),
- /* 236 */ array(20, ),
- /* 237 */ array(18, ),
- /* 238 */ array(39, ),
- /* 239 */ array(26, ),
- /* 240 */ array(18, ),
- /* 241 */ array(18, ),
- /* 242 */ array(19, ),
- /* 243 */ array(19, ),
- /* 244 */ array(19, ),
- /* 245 */ array(19, ),
- /* 246 */ array(38, ),
- /* 247 */ array(65, ),
- /* 248 */ array(19, ),
- /* 249 */ array(63, ),
- /* 250 */ array(55, ),
- /* 251 */ array(19, ),
- /* 252 */ array(63, ),
- /* 253 */ array(),
- /* 254 */ array(),
- /* 255 */ array(),
- /* 256 */ array(),
- /* 257 */ array(),
- /* 258 */ array(),
- /* 259 */ array(),
- /* 260 */ array(),
- /* 261 */ array(),
- /* 262 */ array(),
- /* 263 */ array(),
- /* 264 */ array(),
- /* 265 */ array(),
- /* 266 */ array(),
- /* 267 */ array(),
- /* 268 */ array(),
- /* 269 */ array(),
- /* 270 */ array(),
- /* 271 */ array(),
- /* 272 */ array(),
- /* 273 */ array(),
- /* 274 */ array(),
- /* 275 */ array(),
- /* 276 */ array(),
- /* 277 */ array(),
- /* 278 */ array(),
- /* 279 */ array(),
- /* 280 */ array(),
- /* 281 */ array(),
- /* 282 */ array(),
- /* 283 */ array(),
- /* 284 */ array(),
- /* 285 */ array(),
- /* 286 */ array(),
- /* 287 */ array(),
- /* 288 */ array(),
- /* 289 */ array(),
- /* 290 */ array(),
- /* 291 */ array(),
- /* 292 */ array(),
- /* 293 */ array(),
- /* 294 */ array(),
- /* 295 */ array(),
- /* 296 */ array(),
- /* 297 */ array(),
- /* 298 */ array(),
- /* 299 */ array(),
- /* 300 */ array(),
- /* 301 */ array(),
- /* 302 */ array(),
- /* 303 */ array(),
- /* 304 */ array(),
- /* 305 */ array(),
- /* 306 */ array(),
- /* 307 */ array(),
- /* 308 */ array(),
- /* 309 */ array(),
- /* 310 */ array(),
- /* 311 */ array(),
- /* 312 */ array(),
- /* 313 */ array(),
- /* 314 */ array(),
- /* 315 */ array(),
- /* 316 */ array(),
- /* 317 */ array(),
- /* 318 */ array(),
- /* 319 */ array(),
- /* 320 */ array(),
- /* 321 */ array(),
- /* 322 */ array(),
- /* 323 */ array(),
- /* 324 */ array(),
- /* 325 */ array(),
- /* 326 */ array(),
- /* 327 */ array(),
- /* 328 */ array(),
- /* 329 */ array(),
- /* 330 */ array(),
- /* 331 */ array(),
- /* 332 */ array(),
- /* 333 */ array(),
- /* 334 */ array(),
- /* 335 */ array(),
- /* 336 */ array(),
- /* 337 */ array(),
- /* 338 */ array(),
- /* 339 */ array(),
- /* 340 */ array(),
- /* 341 */ array(),
- /* 342 */ array(),
- /* 343 */ array(),
- /* 344 */ array(),
- /* 345 */ array(),
- /* 346 */ array(),
- /* 347 */ array(),
- /* 348 */ array(),
- /* 349 */ array(),
- /* 350 */ array(),
- /* 351 */ array(),
- /* 352 */ array(),
- /* 353 */ array(),
- /* 354 */ array(),
- /* 355 */ array(),
- /* 356 */ array(),
- /* 357 */ array(),
- /* 358 */ array(),
- /* 359 */ array(),
- /* 360 */ array(),
- /* 361 */ array(),
- /* 362 */ array(),
- /* 363 */ array(),
- /* 364 */ array(),
- /* 365 */ array(),
- /* 366 */ array(),
- /* 367 */ array(),
- /* 368 */ array(),
- /* 369 */ array(),
- /* 370 */ array(),
- /* 371 */ array(),
- /* 372 */ array(),
- /* 373 */ array(),
- /* 374 */ array(),
- /* 375 */ array(),
- /* 376 */ array(),
- /* 377 */ array(),
- /* 378 */ array(),
- /* 379 */ array(),
- /* 380 */ array(),
- /* 381 */ array(),
- /* 382 */ array(),
- /* 383 */ array(),
- /* 384 */ array(),
- /* 385 */ array(),
- /* 386 */ array(),
- /* 387 */ array(),
- /* 388 */ array(),
-);
+ /* 0 */
+ array(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 23, 24, 29, 33, 35,),
+ /* 1 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 2 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 3 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 4 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 5 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 6 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 7 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 8 */
+ array(18, 19, 20, 23, 24, 29, 33, 34, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 9 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 66, 79,),
+ /* 10 */
+ array(18, 19, 20, 23, 24, 29, 33, 34, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 11 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 12 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 13 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 14 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 15 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 16 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 17 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 18 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 19 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 20 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 21 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 22 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 23 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 24 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 25 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 26 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 27 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 28 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 29 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 30 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 31 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 32 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 33 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 34 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 35 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 36 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 37 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 38 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 39 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 40 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 41 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 42 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 43 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 44 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 45 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+ /* 46 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79,),
+ /* 47 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79,),
+ /* 48 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79,),
+ /* 49 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79,),
+ /* 50 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79,),
+ /* 51 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79,),
+ /* 52 */
+ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79,),
+ /* 53 */
+ array(1, 3, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 54 */
+ array(1, 28, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 55 */
+ array(1, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 56 */
+ array(1, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 57 */
+ array(1, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 58 */
+ array(1, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 59 */
+ array(1, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 60 */
+ array(1, 3, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 61 */
+ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80,),
+ /* 62 */
+ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 63 */
+ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 64 */
+ array(1, 3, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 65 */
+ array(1, 3, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 66 */
+ array(1, 2, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 67 */
+ array(1, 25, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 68 */
+ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 69 */
+ array(1, 31, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 70 */
+ array(1, 3, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 71 */
+ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 72 */
+ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 73 */
+ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 74 */
+ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 75 */
+ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 76 */
+ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 77 */
+ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 78 */
+ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 79 */
+ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 80 */
+ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 81 */
+ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 82 */
+ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 83 */
+ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 84 */
+ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 85 */
+ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 86 */
+ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 87 */
+ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 88 */
+ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 89 */
+ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 90 */
+ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 91 */
+ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+ /* 92 */
+ array(1, 3, 22, 30, 36, 39, 62,),
+ /* 93 */
+ array(1, 3, 30, 36, 55,),
+ /* 94 */
+ array(1, 30, 36,),
+ /* 95 */
+ array(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 23, 24, 29, 33, 35,),
+ /* 96 */
+ array(11, 18, 23, 24, 29, 33, 35, 79, 80, 81,),
+ /* 97 */
+ array(18, 20, 30, 32, 36,),
+ /* 98 */
+ array(18, 20, 30, 32, 36,),
+ /* 99 */
+ array(18, 20, 30, 36,),
+ /* 100 */
+ array(18, 20, 30, 36,),
+ /* 101 */
+ array(1, 3, 30, 36,),
+ /* 102 */
+ array(1, 3, 30, 36,),
+ /* 103 */
+ array(1, 30, 36,),
+ /* 104 */
+ array(1, 30, 36,),
+ /* 105 */
+ array(19, 20, 64,),
+ /* 106 */
+ array(22, 60, 65,),
+ /* 107 */
+ array(1, 2,),
+ /* 108 */
+ array(19, 39,),
+ /* 109 */
+ array(11, 18, 23, 24, 29, 33, 35, 79, 80, 81,),
+ /* 110 */
+ array(1, 3, 30, 31, 36, 55,),
+ /* 111 */
+ array(1, 3, 30, 36, 55,),
+ /* 112 */
+ array(1, 3, 30, 36, 55,),
+ /* 113 */
+ array(18, 20, 21, 26,),
+ /* 114 */
+ array(18, 20, 21, 63,),
+ /* 115 */
+ array(15, 16, 17,),
+ /* 116 */
+ array(21, 22, 62,),
+ /* 117 */
+ array(21, 22, 62,),
+ /* 118 */
+ array(1, 3, 55,),
+ /* 119 */
+ array(18, 20, 63,),
+ /* 120 */
+ array(18, 20, 21,),
+ /* 121 */
+ array(1, 32, 55,),
+ /* 122 */
+ array(18, 20,),
+ /* 123 */
+ array(18, 20,),
+ /* 124 */
+ array(1, 22,),
+ /* 125 */
+ array(18, 20,),
+ /* 126 */
+ array(18, 20,),
+ /* 127 */
+ array(19, 20,),
+ /* 128 */
+ array(22, 62,),
+ /* 129 */
+ array(18, 20,),
+ /* 130 */
+ array(19, 39,),
+ /* 131 */
+ array(18, 20,),
+ /* 132 */
+ array(19, 39,),
+ /* 133 */
+ array(1, 55,),
+ /* 134 */
+ array(19, 20,),
+ /* 135 */
+ array(18, 20,),
+ /* 136 */
+ array(18, 20,),
+ /* 137 */
+ array(30, 36,),
+ /* 138 */
+ array(18, 20,),
+ /* 139 */
+ array(30, 36,),
+ /* 140 */
+ array(30, 36,),
+ /* 141 */
+ array(18, 20,),
+ /* 142 */
+ array(18, 20,),
+ /* 143 */
+ array(18, 20,),
+ /* 144 */
+ array(18, 20,),
+ /* 145 */
+ array(18, 20,),
+ /* 146 */
+ array(1,),
+ /* 147 */
+ array(22,),
+ /* 148 */
+ array(1,),
+ /* 149 */
+ array(1,),
+ /* 150 */
+ array(22,),
+ /* 151 */
+ array(1,),
+ /* 152 */
+ array(1,),
+ /* 153 */
+ array(1,),
+ /* 154 */
+ array(1,),
+ /* 155 */
+ array(1,),
+ /* 156 */
+ array(1,),
+ /* 157 */
+ array(),
+ /* 158 */
+ array(18, 20, 63,),
+ /* 159 */
+ array(18, 19, 20,),
+ /* 160 */
+ array(30, 36,),
+ /* 161 */
+ array(30, 36,),
+ /* 162 */
+ array(30, 36,),
+ /* 163 */
+ array(30, 36,),
+ /* 164 */
+ array(30, 36,),
+ /* 165 */
+ array(30, 36,),
+ /* 166 */
+ array(30, 36,),
+ /* 167 */
+ array(30, 36,),
+ /* 168 */
+ array(60, 65,),
+ /* 169 */
+ array(60, 65,),
+ /* 170 */
+ array(60, 65,),
+ /* 171 */
+ array(60, 65,),
+ /* 172 */
+ array(60, 65,),
+ /* 173 */
+ array(30, 36,),
+ /* 174 */
+ array(30, 36,),
+ /* 175 */
+ array(30, 36,),
+ /* 176 */
+ array(30, 36,),
+ /* 177 */
+ array(30, 36,),
+ /* 178 */
+ array(30, 36,),
+ /* 179 */
+ array(60, 65,),
+ /* 180 */
+ array(60, 65,),
+ /* 181 */
+ array(60, 65,),
+ /* 182 */
+ array(18, 39,),
+ /* 183 */
+ array(30, 36,),
+ /* 184 */
+ array(30, 36,),
+ /* 185 */
+ array(30, 36,),
+ /* 186 */
+ array(60, 65,),
+ /* 187 */
+ array(30, 36,),
+ /* 188 */
+ array(30, 36,),
+ /* 189 */
+ array(30, 36,),
+ /* 190 */
+ array(16,),
+ /* 191 */
+ array(22,),
+ /* 192 */
+ array(22,),
+ /* 193 */
+ array(1,),
+ /* 194 */
+ array(30,),
+ /* 195 */
+ array(30,),
+ /* 196 */
+ array(2,),
+ /* 197 */
+ array(22,),
+ /* 198 */
+ array(1,),
+ /* 199 */
+ array(39,),
+ /* 200 */
+ array(1,),
+ /* 201 */
+ array(1,),
+ /* 202 */
+ array(2,),
+ /* 203 */
+ array(1,),
+ /* 204 */
+ array(),
+ /* 205 */
+ array(),
+ /* 206 */
+ array(),
+ /* 207 */
+ array(),
+ /* 208 */
+ array(),
+ /* 209 */
+ array(3, 25, 27, 28, 30, 31, 36, 38, 39, 40, 55, 62, 66, 80,),
+ /* 210 */
+ array(3, 21, 30, 36, 39, 62,),
+ /* 211 */
+ array(39, 60, 62, 66,),
+ /* 212 */
+ array(18, 19, 20, 37,),
+ /* 213 */
+ array(32, 39, 62,),
+ /* 214 */
+ array(26, 80,),
+ /* 215 */
+ array(38, 40,),
+ /* 216 */
+ array(38, 66,),
+ /* 217 */
+ array(38, 40,),
+ /* 218 */
+ array(25, 38,),
+ /* 219 */
+ array(21, 60,),
+ /* 220 */
+ array(3, 26,),
+ /* 221 */
+ array(38, 40,),
+ /* 222 */
+ array(39, 62,),
+ /* 223 */
+ array(2, 21,),
+ /* 224 */
+ array(39, 62,),
+ /* 225 */
+ array(20, 63,),
+ /* 226 */
+ array(20,),
+ /* 227 */
+ array(3,),
+ /* 228 */
+ array(20,),
+ /* 229 */
+ array(20,),
+ /* 230 */
+ array(20,),
+ /* 231 */
+ array(2,),
+ /* 232 */
+ array(19,),
+ /* 233 */
+ array(20,),
+ /* 234 */
+ array(19,),
+ /* 235 */
+ array(3,),
+ /* 236 */
+ array(20,),
+ /* 237 */
+ array(37,),
+ /* 238 */
+ array(37,),
+ /* 239 */
+ array(66,),
+ /* 240 */
+ array(20,),
+ /* 241 */
+ array(20,),
+ /* 242 */
+ array(3,),
+ /* 243 */
+ array(56,),
+ /* 244 */
+ array(39,),
+ /* 245 */
+ array(2,),
+ /* 246 */
+ array(60,),
+ /* 247 */
+ array(39,),
+ /* 248 */
+ array(19,),
+ /* 249 */
+ array(40,),
+ /* 250 */
+ array(20,),
+ /* 251 */
+ array(26,),
+ /* 252 */
+ array(19,),
+ /* 253 */
+ array(64,),
+ /* 254 */
+ array(20,),
+ /* 255 */
+ array(19,),
+ /* 256 */
+ array(20,),
+ /* 257 */
+ array(64,),
+ /* 258 */
+ array(27,),
+ /* 259 */
+ array(21,),
+ /* 260 */
+ array(),
+ /* 261 */
+ array(),
+ /* 262 */
+ array(),
+ /* 263 */
+ array(),
+ /* 264 */
+ array(),
+ /* 265 */
+ array(),
+ /* 266 */
+ array(),
+ /* 267 */
+ array(),
+ /* 268 */
+ array(),
+ /* 269 */
+ array(),
+ /* 270 */
+ array(),
+ /* 271 */
+ array(),
+ /* 272 */
+ array(),
+ /* 273 */
+ array(),
+ /* 274 */
+ array(),
+ /* 275 */
+ array(),
+ /* 276 */
+ array(),
+ /* 277 */
+ array(),
+ /* 278 */
+ array(),
+ /* 279 */
+ array(),
+ /* 280 */
+ array(),
+ /* 281 */
+ array(),
+ /* 282 */
+ array(),
+ /* 283 */
+ array(),
+ /* 284 */
+ array(),
+ /* 285 */
+ array(),
+ /* 286 */
+ array(),
+ /* 287 */
+ array(),
+ /* 288 */
+ array(),
+ /* 289 */
+ array(),
+ /* 290 */
+ array(),
+ /* 291 */
+ array(),
+ /* 292 */
+ array(),
+ /* 293 */
+ array(),
+ /* 294 */
+ array(),
+ /* 295 */
+ array(),
+ /* 296 */
+ array(),
+ /* 297 */
+ array(),
+ /* 298 */
+ array(),
+ /* 299 */
+ array(),
+ /* 300 */
+ array(),
+ /* 301 */
+ array(),
+ /* 302 */
+ array(),
+ /* 303 */
+ array(),
+ /* 304 */
+ array(),
+ /* 305 */
+ array(),
+ /* 306 */
+ array(),
+ /* 307 */
+ array(),
+ /* 308 */
+ array(),
+ /* 309 */
+ array(),
+ /* 310 */
+ array(),
+ /* 311 */
+ array(),
+ /* 312 */
+ array(),
+ /* 313 */
+ array(),
+ /* 314 */
+ array(),
+ /* 315 */
+ array(),
+ /* 316 */
+ array(),
+ /* 317 */
+ array(),
+ /* 318 */
+ array(),
+ /* 319 */
+ array(),
+ /* 320 */
+ array(),
+ /* 321 */
+ array(),
+ /* 322 */
+ array(),
+ /* 323 */
+ array(),
+ /* 324 */
+ array(),
+ /* 325 */
+ array(),
+ /* 326 */
+ array(),
+ /* 327 */
+ array(),
+ /* 328 */
+ array(),
+ /* 329 */
+ array(),
+ /* 330 */
+ array(),
+ /* 331 */
+ array(),
+ /* 332 */
+ array(),
+ /* 333 */
+ array(),
+ /* 334 */
+ array(),
+ /* 335 */
+ array(),
+ /* 336 */
+ array(),
+ /* 337 */
+ array(),
+ /* 338 */
+ array(),
+ /* 339 */
+ array(),
+ /* 340 */
+ array(),
+ /* 341 */
+ array(),
+ /* 342 */
+ array(),
+ /* 343 */
+ array(),
+ /* 344 */
+ array(),
+ /* 345 */
+ array(),
+ /* 346 */
+ array(),
+ /* 347 */
+ array(),
+ /* 348 */
+ array(),
+ /* 349 */
+ array(),
+ /* 350 */
+ array(),
+ /* 351 */
+ array(),
+ /* 352 */
+ array(),
+ /* 353 */
+ array(),
+ /* 354 */
+ array(),
+ /* 355 */
+ array(),
+ /* 356 */
+ array(),
+ /* 357 */
+ array(),
+ );
static public $yy_default = array(
- /* 0 */ 392, 574, 591, 591, 545, 591, 545, 545, 591, 591,
- /* 10 */ 591, 591, 591, 591, 591, 591, 591, 591, 591, 591,
- /* 20 */ 591, 591, 591, 591, 591, 591, 591, 591, 591, 591,
- /* 30 */ 591, 591, 591, 591, 591, 591, 591, 591, 591, 591,
- /* 40 */ 591, 591, 591, 591, 591, 591, 591, 591, 591, 591,
- /* 50 */ 591, 591, 591, 591, 591, 453, 591, 453, 453, 453,
- /* 60 */ 591, 591, 458, 591, 591, 591, 591, 591, 591, 591,
- /* 70 */ 591, 544, 575, 458, 576, 460, 463, 464, 435, 477,
- /* 80 */ 478, 479, 486, 487, 577, 483, 482, 543, 455, 474,
- /* 90 */ 490, 491, 502, 466, 453, 389, 591, 453, 453, 473,
- /* 100 */ 453, 510, 453, 591, 453, 591, 453, 557, 591, 591,
- /* 110 */ 591, 466, 466, 466, 518, 591, 591, 466, 591, 518,
- /* 120 */ 518, 466, 511, 511, 591, 591, 591, 591, 591, 591,
- /* 130 */ 591, 591, 511, 591, 591, 591, 591, 591, 518, 591,
- /* 140 */ 466, 591, 591, 591, 453, 591, 453, 554, 494, 469,
- /* 150 */ 489, 476, 495, 470, 493, 511, 471, 552, 591, 591,
- /* 160 */ 591, 591, 591, 591, 591, 591, 591, 519, 591, 591,
- /* 170 */ 591, 591, 591, 591, 591, 591, 591, 591, 591, 591,
- /* 180 */ 591, 591, 536, 535, 591, 538, 516, 518, 537, 408,
- /* 190 */ 558, 555, 518, 473, 510, 547, 532, 546, 590, 590,
- /* 200 */ 551, 551, 518, 551, 518, 468, 502, 502, 591, 502,
- /* 210 */ 591, 591, 591, 498, 488, 492, 530, 591, 502, 591,
- /* 220 */ 591, 492, 530, 591, 591, 591, 500, 498, 492, 530,
- /* 230 */ 591, 591, 591, 530, 591, 591, 591, 591, 591, 461,
- /* 240 */ 591, 591, 591, 591, 591, 591, 556, 591, 591, 591,
- /* 250 */ 504, 591, 591, 465, 515, 514, 539, 572, 433, 418,
- /* 260 */ 390, 432, 438, 573, 437, 526, 436, 541, 540, 523,
- /* 270 */ 553, 531, 542, 442, 504, 443, 571, 589, 524, 454,
- /* 280 */ 527, 525, 462, 485, 530, 529, 444, 445, 550, 441,
- /* 290 */ 440, 431, 430, 434, 452, 439, 446, 447, 499, 497,
- /* 300 */ 501, 507, 467, 496, 450, 448, 548, 549, 449, 451,
- /* 310 */ 417, 399, 398, 400, 401, 402, 397, 396, 391, 393,
- /* 320 */ 394, 395, 403, 404, 413, 412, 414, 415, 416, 411,
- /* 330 */ 410, 405, 406, 407, 409, 468, 512, 423, 422, 424,
- /* 340 */ 533, 425, 421, 586, 570, 569, 472, 419, 420, 426,
- /* 350 */ 427, 582, 583, 584, 587, 588, 580, 579, 429, 428,
- /* 360 */ 585, 578, 568, 567, 506, 505, 508, 475, 509, 503,
- /* 370 */ 522, 517, 520, 528, 521, 513, 534, 563, 562, 564,
- /* 380 */ 565, 566, 561, 560, 480, 481, 484, 559, 581,
-);
- const YYNOCODE = 124;
- const YYSTACKDEPTH = 100;
- const YYNSTATE = 389;
- const YYNRULE = 202;
- const YYERRORSYMBOL = 81;
+ /* 0 */
+ 361, 541, 558, 558, 512, 558, 512, 512, 558, 558,
+ /* 10 */
+ 558, 558, 558, 558, 558, 558, 558, 558, 558, 558,
+ /* 20 */
+ 558, 558, 558, 558, 558, 558, 558, 558, 558, 558,
+ /* 30 */
+ 558, 558, 558, 558, 558, 558, 558, 558, 558, 558,
+ /* 40 */
+ 558, 558, 558, 558, 558, 558, 558, 558, 558, 558,
+ /* 50 */
+ 558, 558, 558, 558, 418, 418, 418, 418, 387, 395,
+ /* 60 */
+ 558, 558, 558, 558, 558, 558, 558, 558, 558, 423,
+ /* 70 */
+ 558, 428, 425, 510, 423, 429, 511, 543, 444, 542,
+ /* 80 */
+ 447, 448, 443, 442, 439, 452, 544, 420, 451, 400,
+ /* 90 */
+ 456, 455, 467, 431, 418, 358, 558, 418, 418, 418,
+ /* 100 */
+ 418, 438, 475, 418, 418, 558, 524, 409, 558, 558,
+ /* 110 */
+ 431, 431, 431, 558, 485, 558, 476, 476, 431, 485,
+ /* 120 */
+ 485, 431, 558, 558, 412, 558, 485, 558, 476, 558,
+ /* 130 */
+ 558, 558, 558, 431, 558, 558, 558, 397, 558, 418,
+ /* 140 */
+ 418, 558, 558, 558, 558, 558, 441, 476, 414, 434,
+ /* 150 */
+ 521, 436, 435, 460, 459, 458, 454, 519, 486, 558,
+ /* 160 */
+ 385, 384, 405, 404, 389, 406, 399, 388, 505, 483,
+ /* 170 */
+ 482, 481, 480, 407, 408, 383, 398, 403, 402, 504,
+ /* 180 */
+ 479, 502, 485, 393, 392, 390, 503, 382, 396, 394,
+ /* 190 */
+ 378, 525, 522, 475, 557, 557, 513, 499, 438, 485,
+ /* 200 */
+ 413, 410, 514, 415, 518, 485, 518, 485, 518, 433,
+ /* 210 */
+ 467, 467, 558, 467, 457, 558, 558, 558, 558, 463,
+ /* 220 */
+ 457, 558, 453, 497, 467, 558, 558, 558, 558, 558,
+ /* 230 */
+ 558, 497, 558, 558, 558, 558, 558, 465, 558, 558,
+ /* 240 */
+ 558, 558, 558, 469, 497, 497, 463, 523, 558, 558,
+ /* 250 */
+ 558, 457, 558, 558, 558, 558, 558, 558, 426, 558,
+ /* 260 */
+ 477, 520, 495, 507, 490, 508, 487, 374, 498, 484,
+ /* 270 */
+ 556, 364, 363, 365, 461, 366, 472, 466, 360, 359,
+ /* 280 */
+ 462, 362, 464, 367, 430, 401, 469, 372, 373, 419,
+ /* 290 */
+ 432, 427, 368, 369, 370, 371, 433, 470, 445, 497,
+ /* 300 */
+ 446, 496, 450, 449, 500, 517, 545, 474, 552, 411,
+ /* 310 */
+ 501, 478, 553, 526, 534, 533, 535, 536, 437, 537,
+ /* 320 */
+ 532, 417, 528, 527, 529, 530, 531, 546, 547, 515,
+ /* 330 */
+ 506, 375, 376, 509, 377, 516, 468, 494, 489, 492,
+ /* 340 */
+ 491, 493, 379, 380, 555, 548, 554, 551, 550, 549,
+ /* 350 */
+ 440, 416, 473, 471, 539, 540, 538, 488,
+ );
+ const YYNOCODE = 125;
+ const YYSTACKDEPTH = 500;
+ const YYNSTATE = 358;
+ const YYNRULE = 200;
+ const YYERRORSYMBOL = 82;
const YYERRSYMDT = 'yy0';
const YYFALLBACK = 0;
- static public $yyFallback = array(
- );
- static function Trace($TraceFILE, $zTracePrompt)
+ public static $yyFallback = array();
+
+ public function Trace($TraceFILE, $zTracePrompt)
{
if (!$TraceFILE) {
$zTracePrompt = 0;
} elseif (!$zTracePrompt) {
$TraceFILE = 0;
}
- self::$yyTraceFILE = $TraceFILE;
- self::$yyTracePrompt = $zTracePrompt;
+ $this->yyTraceFILE = $TraceFILE;
+ $this->yyTracePrompt = $zTracePrompt;
}
- static function PrintTrace()
+ public function PrintTrace()
{
- self::$yyTraceFILE = fopen('php://output', 'w');
- self::$yyTracePrompt = '<br>';
+ $this->yyTraceFILE = fopen('php://output', 'w');
+ $this->yyTracePrompt = '<br>';
}
- static public $yyTraceFILE;
- static public $yyTracePrompt;
+ public $yyTraceFILE;
+ public $yyTracePrompt;
public $yyidx; /* Index of top element in stack */
public $yyerrcnt; /* Shifts left before out of the error */
public $yystack = array(); /* The parser's stack */
public $yyTokenName = array(
- '$', 'VERT', 'COLON', 'COMMENT',
- 'PHPSTARTTAG', 'PHPENDTAG', 'ASPSTARTTAG', 'ASPENDTAG',
- 'FAKEPHPSTARTTAG', 'XMLTAG', 'TEXT', 'STRIPON',
- 'STRIPOFF', 'LITERALSTART', 'LITERALEND', 'LITERAL',
- 'LDEL', 'RDEL', 'DOLLAR', 'ID',
- 'EQUAL', 'PTR', 'LDELIF', 'LDELFOR',
- 'SEMICOLON', 'INCDEC', 'TO', 'STEP',
- 'LDELFOREACH', 'SPACE', 'AS', 'APTR',
- 'LDELSETFILTER', 'SMARTYBLOCKCHILD', 'LDELSLASH', 'ATTR',
- 'INTEGER', 'COMMA', 'OPENP', 'CLOSEP',
- 'MATH', 'UNIMATH', 'ANDSYM', 'ISIN',
- 'ISDIVBY', 'ISNOTDIVBY', 'ISEVEN', 'ISNOTEVEN',
- 'ISEVENBY', 'ISNOTEVENBY', 'ISODD', 'ISNOTODD',
- 'ISODDBY', 'ISNOTODDBY', 'INSTANCEOF', 'QMARK',
- 'NOT', 'TYPECAST', 'HEX', 'DOT',
- 'SINGLEQUOTESTRING', 'DOUBLECOLON', 'AT', 'HATCH',
- 'OPENB', 'CLOSEB', 'EQUALS', 'NOTEQUALS',
- 'GREATERTHAN', 'LESSTHAN', 'GREATEREQUAL', 'LESSEQUAL',
- 'IDENTITY', 'NONEIDENTITY', 'MOD', 'LAND',
- 'LOR', 'LXOR', 'QUOTE', 'BACKTICK',
- 'DOLLARID', 'error', 'start', 'template',
- 'template_element', 'smartytag', 'literal', 'literal_elements',
- 'literal_element', 'value', 'modifierlist', 'attributes',
- 'expr', 'varindexed', 'statement', 'statements',
- 'optspace', 'varvar', 'foraction', 'modparameters',
- 'attribute', 'ternary', 'array', 'ifcond',
- 'lop', 'variable', 'function', 'doublequoted_with_quotes',
- 'static_class_access', 'object', 'arrayindex', 'indexdef',
- 'varvarele', 'objectchain', 'objectelement', 'method',
- 'params', 'modifier', 'modparameter', 'arrayelements',
- 'arrayelement', 'doublequoted', 'doublequotedcontent',
+ '$', 'VERT', 'COLON', 'RDEL',
+ 'COMMENT', 'PHPSTARTTAG', 'PHPENDTAG', 'PHPENDSCRIPT',
+ 'ASPSTARTTAG', 'ASPENDTAG', 'XMLTAG', 'TEXT',
+ 'STRIPON', 'STRIPOFF', 'BLOCKSOURCE', 'LITERALSTART',
+ 'LITERALEND', 'LITERAL', 'LDEL', 'DOLLAR',
+ 'ID', 'EQUAL', 'PTR', 'LDELIF',
+ 'LDELFOR', 'SEMICOLON', 'INCDEC', 'TO',
+ 'STEP', 'LDELFOREACH', 'SPACE', 'AS',
+ 'APTR', 'LDELSETFILTER', 'SMARTYBLOCKCHILDPARENT', 'LDELSLASH',
+ 'ATTR', 'INTEGER', 'COMMA', 'OPENP',
+ 'CLOSEP', 'MATH', 'UNIMATH', 'ANDSYM',
+ 'ISIN', 'ISDIVBY', 'ISNOTDIVBY', 'ISEVEN',
+ 'ISNOTEVEN', 'ISEVENBY', 'ISNOTEVENBY', 'ISODD',
+ 'ISNOTODD', 'ISODDBY', 'ISNOTODDBY', 'INSTANCEOF',
+ 'QMARK', 'NOT', 'TYPECAST', 'HEX',
+ 'DOT', 'SINGLEQUOTESTRING', 'DOUBLECOLON', 'AT',
+ 'HATCH', 'OPENB', 'CLOSEB', 'EQUALS',
+ 'NOTEQUALS', 'GREATERTHAN', 'LESSTHAN', 'GREATEREQUAL',
+ 'LESSEQUAL', 'IDENTITY', 'NONEIDENTITY', 'MOD',
+ 'LAND', 'LOR', 'LXOR', 'QUOTE',
+ 'BACKTICK', 'DOLLARID', 'error', 'start',
+ 'template', 'template_element', 'smartytag', 'literal',
+ 'literal_elements', 'literal_element', 'value', 'modifierlist',
+ 'attributes', 'expr', 'varindexed', 'statement',
+ 'statements', 'optspace', 'varvar', 'foraction',
+ 'modparameters', 'attribute', 'ternary', 'array',
+ 'ifcond', 'lop', 'variable', 'function',
+ 'doublequoted_with_quotes', 'static_class_access', 'object', 'arrayindex',
+ 'indexdef', 'varvarele', 'objectchain', 'objectelement',
+ 'method', 'params', 'modifier', 'modparameter',
+ 'arrayelements', 'arrayelement', 'doublequoted', 'doublequotedcontent',
);
- static public $yyRuleName = array(
- /* 0 */ "start ::= template",
- /* 1 */ "template ::= template_element",
- /* 2 */ "template ::= template template_element",
- /* 3 */ "template ::=",
- /* 4 */ "template_element ::= smartytag",
- /* 5 */ "template_element ::= COMMENT",
- /* 6 */ "template_element ::= literal",
- /* 7 */ "template_element ::= PHPSTARTTAG",
- /* 8 */ "template_element ::= PHPENDTAG",
- /* 9 */ "template_element ::= ASPSTARTTAG",
- /* 10 */ "template_element ::= ASPENDTAG",
- /* 11 */ "template_element ::= FAKEPHPSTARTTAG",
- /* 12 */ "template_element ::= XMLTAG",
- /* 13 */ "template_element ::= TEXT",
- /* 14 */ "template_element ::= STRIPON",
- /* 15 */ "template_element ::= STRIPOFF",
- /* 16 */ "literal ::= LITERALSTART LITERALEND",
- /* 17 */ "literal ::= LITERALSTART literal_elements LITERALEND",
- /* 18 */ "literal_elements ::= literal_elements literal_element",
- /* 19 */ "literal_elements ::=",
- /* 20 */ "literal_element ::= literal",
- /* 21 */ "literal_element ::= LITERAL",
- /* 22 */ "literal_element ::= PHPSTARTTAG",
- /* 23 */ "literal_element ::= FAKEPHPSTARTTAG",
- /* 24 */ "literal_element ::= PHPENDTAG",
- /* 25 */ "literal_element ::= ASPSTARTTAG",
- /* 26 */ "literal_element ::= ASPENDTAG",
- /* 27 */ "smartytag ::= LDEL value RDEL",
- /* 28 */ "smartytag ::= LDEL value modifierlist attributes RDEL",
- /* 29 */ "smartytag ::= LDEL value attributes RDEL",
- /* 30 */ "smartytag ::= LDEL expr modifierlist attributes RDEL",
- /* 31 */ "smartytag ::= LDEL expr attributes RDEL",
- /* 32 */ "smartytag ::= LDEL DOLLAR ID EQUAL value RDEL",
- /* 33 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr RDEL",
- /* 34 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr attributes RDEL",
- /* 35 */ "smartytag ::= LDEL varindexed EQUAL expr attributes RDEL",
- /* 36 */ "smartytag ::= LDEL ID attributes RDEL",
- /* 37 */ "smartytag ::= LDEL ID RDEL",
- /* 38 */ "smartytag ::= LDEL ID PTR ID attributes RDEL",
- /* 39 */ "smartytag ::= LDEL ID modifierlist attributes RDEL",
- /* 40 */ "smartytag ::= LDEL ID PTR ID modifierlist attributes RDEL",
- /* 41 */ "smartytag ::= LDELIF expr RDEL",
- /* 42 */ "smartytag ::= LDELIF expr attributes RDEL",
- /* 43 */ "smartytag ::= LDELIF statement RDEL",
- /* 44 */ "smartytag ::= LDELIF statement attributes RDEL",
- /* 45 */ "smartytag ::= LDELFOR statements SEMICOLON optspace expr SEMICOLON optspace DOLLAR varvar foraction attributes RDEL",
- /* 46 */ "foraction ::= EQUAL expr",
- /* 47 */ "foraction ::= INCDEC",
- /* 48 */ "smartytag ::= LDELFOR statement TO expr attributes RDEL",
- /* 49 */ "smartytag ::= LDELFOR statement TO expr STEP expr attributes RDEL",
- /* 50 */ "smartytag ::= LDELFOREACH attributes RDEL",
- /* 51 */ "smartytag ::= LDELFOREACH SPACE value AS DOLLAR varvar attributes RDEL",
- /* 52 */ "smartytag ::= LDELFOREACH SPACE value AS DOLLAR varvar APTR DOLLAR varvar attributes RDEL",
- /* 53 */ "smartytag ::= LDELFOREACH SPACE expr AS DOLLAR varvar attributes RDEL",
- /* 54 */ "smartytag ::= LDELFOREACH SPACE expr AS DOLLAR varvar APTR DOLLAR varvar attributes RDEL",
- /* 55 */ "smartytag ::= LDELSETFILTER ID modparameters RDEL",
- /* 56 */ "smartytag ::= LDELSETFILTER ID modparameters modifierlist RDEL",
- /* 57 */ "smartytag ::= SMARTYBLOCKCHILD",
- /* 58 */ "smartytag ::= LDELSLASH ID RDEL",
- /* 59 */ "smartytag ::= LDELSLASH ID modifierlist RDEL",
- /* 60 */ "smartytag ::= LDELSLASH ID PTR ID RDEL",
- /* 61 */ "smartytag ::= LDELSLASH ID PTR ID modifierlist RDEL",
- /* 62 */ "attributes ::= attributes attribute",
- /* 63 */ "attributes ::= attribute",
- /* 64 */ "attributes ::=",
- /* 65 */ "attribute ::= SPACE ID EQUAL ID",
- /* 66 */ "attribute ::= ATTR expr",
- /* 67 */ "attribute ::= ATTR value",
- /* 68 */ "attribute ::= SPACE ID",
- /* 69 */ "attribute ::= SPACE expr",
- /* 70 */ "attribute ::= SPACE value",
- /* 71 */ "attribute ::= SPACE INTEGER EQUAL expr",
- /* 72 */ "statements ::= statement",
- /* 73 */ "statements ::= statements COMMA statement",
- /* 74 */ "statement ::= DOLLAR varvar EQUAL expr",
- /* 75 */ "statement ::= varindexed EQUAL expr",
- /* 76 */ "statement ::= OPENP statement CLOSEP",
- /* 77 */ "expr ::= value",
- /* 78 */ "expr ::= ternary",
- /* 79 */ "expr ::= DOLLAR ID COLON ID",
- /* 80 */ "expr ::= expr MATH value",
- /* 81 */ "expr ::= expr UNIMATH value",
- /* 82 */ "expr ::= expr ANDSYM value",
- /* 83 */ "expr ::= array",
- /* 84 */ "expr ::= expr modifierlist",
- /* 85 */ "expr ::= expr ifcond expr",
- /* 86 */ "expr ::= expr ISIN array",
- /* 87 */ "expr ::= expr ISIN value",
- /* 88 */ "expr ::= expr lop expr",
- /* 89 */ "expr ::= expr ISDIVBY expr",
- /* 90 */ "expr ::= expr ISNOTDIVBY expr",
- /* 91 */ "expr ::= expr ISEVEN",
- /* 92 */ "expr ::= expr ISNOTEVEN",
- /* 93 */ "expr ::= expr ISEVENBY expr",
- /* 94 */ "expr ::= expr ISNOTEVENBY expr",
- /* 95 */ "expr ::= expr ISODD",
- /* 96 */ "expr ::= expr ISNOTODD",
- /* 97 */ "expr ::= expr ISODDBY expr",
- /* 98 */ "expr ::= expr ISNOTODDBY expr",
- /* 99 */ "expr ::= value INSTANCEOF ID",
- /* 100 */ "expr ::= value INSTANCEOF value",
- /* 101 */ "ternary ::= OPENP expr CLOSEP QMARK DOLLAR ID COLON expr",
- /* 102 */ "ternary ::= OPENP expr CLOSEP QMARK expr COLON expr",
- /* 103 */ "value ::= variable",
- /* 104 */ "value ::= UNIMATH value",
- /* 105 */ "value ::= NOT value",
- /* 106 */ "value ::= TYPECAST value",
- /* 107 */ "value ::= variable INCDEC",
- /* 108 */ "value ::= HEX",
- /* 109 */ "value ::= INTEGER",
- /* 110 */ "value ::= INTEGER DOT INTEGER",
- /* 111 */ "value ::= INTEGER DOT",
- /* 112 */ "value ::= DOT INTEGER",
- /* 113 */ "value ::= ID",
- /* 114 */ "value ::= function",
- /* 115 */ "value ::= OPENP expr CLOSEP",
- /* 116 */ "value ::= SINGLEQUOTESTRING",
- /* 117 */ "value ::= doublequoted_with_quotes",
- /* 118 */ "value ::= ID DOUBLECOLON static_class_access",
- /* 119 */ "value ::= varindexed DOUBLECOLON static_class_access",
- /* 120 */ "value ::= smartytag",
- /* 121 */ "value ::= value modifierlist",
- /* 122 */ "variable ::= varindexed",
- /* 123 */ "variable ::= DOLLAR varvar AT ID",
- /* 124 */ "variable ::= object",
- /* 125 */ "variable ::= HATCH ID HATCH",
- /* 126 */ "variable ::= HATCH variable HATCH",
- /* 127 */ "varindexed ::= DOLLAR varvar arrayindex",
- /* 128 */ "arrayindex ::= arrayindex indexdef",
- /* 129 */ "arrayindex ::=",
- /* 130 */ "indexdef ::= DOT DOLLAR varvar",
- /* 131 */ "indexdef ::= DOT DOLLAR varvar AT ID",
- /* 132 */ "indexdef ::= DOT ID",
- /* 133 */ "indexdef ::= DOT INTEGER",
- /* 134 */ "indexdef ::= DOT LDEL expr RDEL",
- /* 135 */ "indexdef ::= OPENB ID CLOSEB",
- /* 136 */ "indexdef ::= OPENB ID DOT ID CLOSEB",
- /* 137 */ "indexdef ::= OPENB expr CLOSEB",
- /* 138 */ "indexdef ::= OPENB CLOSEB",
- /* 139 */ "varvar ::= varvarele",
- /* 140 */ "varvar ::= varvar varvarele",
- /* 141 */ "varvarele ::= ID",
- /* 142 */ "varvarele ::= LDEL expr RDEL",
- /* 143 */ "object ::= varindexed objectchain",
- /* 144 */ "objectchain ::= objectelement",
- /* 145 */ "objectchain ::= objectchain objectelement",
- /* 146 */ "objectelement ::= PTR ID arrayindex",
- /* 147 */ "objectelement ::= PTR DOLLAR varvar arrayindex",
- /* 148 */ "objectelement ::= PTR LDEL expr RDEL arrayindex",
- /* 149 */ "objectelement ::= PTR ID LDEL expr RDEL arrayindex",
- /* 150 */ "objectelement ::= PTR method",
- /* 151 */ "function ::= ID OPENP params CLOSEP",
- /* 152 */ "method ::= ID OPENP params CLOSEP",
- /* 153 */ "method ::= DOLLAR ID OPENP params CLOSEP",
- /* 154 */ "params ::= params COMMA expr",
- /* 155 */ "params ::= expr",
- /* 156 */ "params ::=",
- /* 157 */ "modifierlist ::= modifierlist modifier modparameters",
- /* 158 */ "modifierlist ::= modifier modparameters",
- /* 159 */ "modifier ::= VERT AT ID",
- /* 160 */ "modifier ::= VERT ID",
- /* 161 */ "modparameters ::= modparameters modparameter",
- /* 162 */ "modparameters ::=",
- /* 163 */ "modparameter ::= COLON value",
- /* 164 */ "modparameter ::= COLON array",
- /* 165 */ "static_class_access ::= method",
- /* 166 */ "static_class_access ::= method objectchain",
- /* 167 */ "static_class_access ::= ID",
- /* 168 */ "static_class_access ::= DOLLAR ID arrayindex",
- /* 169 */ "static_class_access ::= DOLLAR ID arrayindex objectchain",
- /* 170 */ "ifcond ::= EQUALS",
- /* 171 */ "ifcond ::= NOTEQUALS",
- /* 172 */ "ifcond ::= GREATERTHAN",
- /* 173 */ "ifcond ::= LESSTHAN",
- /* 174 */ "ifcond ::= GREATEREQUAL",
- /* 175 */ "ifcond ::= LESSEQUAL",
- /* 176 */ "ifcond ::= IDENTITY",
- /* 177 */ "ifcond ::= NONEIDENTITY",
- /* 178 */ "ifcond ::= MOD",
- /* 179 */ "lop ::= LAND",
- /* 180 */ "lop ::= LOR",
- /* 181 */ "lop ::= LXOR",
- /* 182 */ "array ::= OPENB arrayelements CLOSEB",
- /* 183 */ "arrayelements ::= arrayelement",
- /* 184 */ "arrayelements ::= arrayelements COMMA arrayelement",
- /* 185 */ "arrayelements ::=",
- /* 186 */ "arrayelement ::= value APTR expr",
- /* 187 */ "arrayelement ::= ID APTR expr",
- /* 188 */ "arrayelement ::= expr",
- /* 189 */ "doublequoted_with_quotes ::= QUOTE QUOTE",
- /* 190 */ "doublequoted_with_quotes ::= QUOTE doublequoted QUOTE",
- /* 191 */ "doublequoted ::= doublequoted doublequotedcontent",
- /* 192 */ "doublequoted ::= doublequotedcontent",
- /* 193 */ "doublequotedcontent ::= BACKTICK variable BACKTICK",
- /* 194 */ "doublequotedcontent ::= BACKTICK expr BACKTICK",
- /* 195 */ "doublequotedcontent ::= DOLLARID",
- /* 196 */ "doublequotedcontent ::= LDEL variable RDEL",
- /* 197 */ "doublequotedcontent ::= LDEL expr RDEL",
- /* 198 */ "doublequotedcontent ::= smartytag",
- /* 199 */ "doublequotedcontent ::= TEXT",
- /* 200 */ "optspace ::= SPACE",
- /* 201 */ "optspace ::=",
+ public static $yyRuleName = array(
+ /* 0 */
+ "start ::= template",
+ /* 1 */
+ "template ::= template_element",
+ /* 2 */
+ "template ::= template template_element",
+ /* 3 */
+ "template ::=",
+ /* 4 */
+ "template_element ::= smartytag RDEL",
+ /* 5 */
+ "template_element ::= COMMENT",
+ /* 6 */
+ "template_element ::= literal",
+ /* 7 */
+ "template_element ::= PHPSTARTTAG",
+ /* 8 */
+ "template_element ::= PHPENDTAG",
+ /* 9 */
+ "template_element ::= PHPENDSCRIPT",
+ /* 10 */
+ "template_element ::= ASPSTARTTAG",
+ /* 11 */
+ "template_element ::= ASPENDTAG",
+ /* 12 */
+ "template_element ::= XMLTAG",
+ /* 13 */
+ "template_element ::= TEXT",
+ /* 14 */
+ "template_element ::= STRIPON",
+ /* 15 */
+ "template_element ::= STRIPOFF",
+ /* 16 */
+ "template_element ::= BLOCKSOURCE",
+ /* 17 */
+ "literal ::= LITERALSTART LITERALEND",
+ /* 18 */
+ "literal ::= LITERALSTART literal_elements LITERALEND",
+ /* 19 */
+ "literal_elements ::= literal_elements literal_element",
+ /* 20 */
+ "literal_elements ::=",
+ /* 21 */
+ "literal_element ::= literal",
+ /* 22 */
+ "literal_element ::= LITERAL",
+ /* 23 */
+ "smartytag ::= LDEL value",
+ /* 24 */
+ "smartytag ::= LDEL value modifierlist attributes",
+ /* 25 */
+ "smartytag ::= LDEL value attributes",
+ /* 26 */
+ "smartytag ::= LDEL expr modifierlist attributes",
+ /* 27 */
+ "smartytag ::= LDEL expr attributes",
+ /* 28 */
+ "smartytag ::= LDEL DOLLAR ID EQUAL value",
+ /* 29 */
+ "smartytag ::= LDEL DOLLAR ID EQUAL expr",
+ /* 30 */
+ "smartytag ::= LDEL DOLLAR ID EQUAL expr attributes",
+ /* 31 */
+ "smartytag ::= LDEL varindexed EQUAL expr attributes",
+ /* 32 */
+ "smartytag ::= LDEL ID attributes",
+ /* 33 */
+ "smartytag ::= LDEL ID",
+ /* 34 */
+ "smartytag ::= LDEL ID PTR ID attributes",
+ /* 35 */
+ "smartytag ::= LDEL ID modifierlist attributes",
+ /* 36 */
+ "smartytag ::= LDEL ID PTR ID modifierlist attributes",
+ /* 37 */
+ "smartytag ::= LDELIF expr",
+ /* 38 */
+ "smartytag ::= LDELIF expr attributes",
+ /* 39 */
+ "smartytag ::= LDELIF statement",
+ /* 40 */
+ "smartytag ::= LDELIF statement attributes",
+ /* 41 */
+ "smartytag ::= LDELFOR statements SEMICOLON optspace expr SEMICOLON optspace DOLLAR varvar foraction attributes",
+ /* 42 */
+ "foraction ::= EQUAL expr",
+ /* 43 */
+ "foraction ::= INCDEC",
+ /* 44 */
+ "smartytag ::= LDELFOR statement TO expr attributes",
+ /* 45 */
+ "smartytag ::= LDELFOR statement TO expr STEP expr attributes",
+ /* 46 */
+ "smartytag ::= LDELFOREACH attributes",
+ /* 47 */
+ "smartytag ::= LDELFOREACH SPACE value AS DOLLAR varvar attributes",
+ /* 48 */
+ "smartytag ::= LDELFOREACH SPACE value AS DOLLAR varvar APTR DOLLAR varvar attributes",
+ /* 49 */
+ "smartytag ::= LDELFOREACH SPACE expr AS DOLLAR varvar attributes",
+ /* 50 */
+ "smartytag ::= LDELFOREACH SPACE expr AS DOLLAR varvar APTR DOLLAR varvar attributes",
+ /* 51 */
+ "smartytag ::= LDELSETFILTER ID modparameters",
+ /* 52 */
+ "smartytag ::= LDELSETFILTER ID modparameters modifierlist",
+ /* 53 */
+ "smartytag ::= LDEL SMARTYBLOCKCHILDPARENT",
+ /* 54 */
+ "smartytag ::= LDELSLASH ID",
+ /* 55 */
+ "smartytag ::= LDELSLASH ID modifierlist",
+ /* 56 */
+ "smartytag ::= LDELSLASH ID PTR ID",
+ /* 57 */
+ "smartytag ::= LDELSLASH ID PTR ID modifierlist",
+ /* 58 */
+ "attributes ::= attributes attribute",
+ /* 59 */
+ "attributes ::= attribute",
+ /* 60 */
+ "attributes ::=",
+ /* 61 */
+ "attribute ::= SPACE ID EQUAL ID",
+ /* 62 */
+ "attribute ::= ATTR expr",
+ /* 63 */
+ "attribute ::= ATTR value",
+ /* 64 */
+ "attribute ::= SPACE ID",
+ /* 65 */
+ "attribute ::= SPACE expr",
+ /* 66 */
+ "attribute ::= SPACE value",
+ /* 67 */
+ "attribute ::= SPACE INTEGER EQUAL expr",
+ /* 68 */
+ "statements ::= statement",
+ /* 69 */
+ "statements ::= statements COMMA statement",
+ /* 70 */
+ "statement ::= DOLLAR varvar EQUAL expr",
+ /* 71 */
+ "statement ::= varindexed EQUAL expr",
+ /* 72 */
+ "statement ::= OPENP statement CLOSEP",
+ /* 73 */
+ "expr ::= value",
+ /* 74 */
+ "expr ::= ternary",
+ /* 75 */
+ "expr ::= DOLLAR ID COLON ID",
+ /* 76 */
+ "expr ::= expr MATH value",
+ /* 77 */
+ "expr ::= expr UNIMATH value",
+ /* 78 */
+ "expr ::= expr ANDSYM value",
+ /* 79 */
+ "expr ::= array",
+ /* 80 */
+ "expr ::= expr modifierlist",
+ /* 81 */
+ "expr ::= expr ifcond expr",
+ /* 82 */
+ "expr ::= expr ISIN array",
+ /* 83 */
+ "expr ::= expr ISIN value",
+ /* 84 */
+ "expr ::= expr lop expr",
+ /* 85 */
+ "expr ::= expr ISDIVBY expr",
+ /* 86 */
+ "expr ::= expr ISNOTDIVBY expr",
+ /* 87 */
+ "expr ::= expr ISEVEN",
+ /* 88 */
+ "expr ::= expr ISNOTEVEN",
+ /* 89 */
+ "expr ::= expr ISEVENBY expr",
+ /* 90 */
+ "expr ::= expr ISNOTEVENBY expr",
+ /* 91 */
+ "expr ::= expr ISODD",
+ /* 92 */
+ "expr ::= expr ISNOTODD",
+ /* 93 */
+ "expr ::= expr ISODDBY expr",
+ /* 94 */
+ "expr ::= expr ISNOTODDBY expr",
+ /* 95 */
+ "expr ::= value INSTANCEOF ID",
+ /* 96 */
+ "expr ::= value INSTANCEOF value",
+ /* 97 */
+ "ternary ::= OPENP expr CLOSEP QMARK DOLLAR ID COLON expr",
+ /* 98 */
+ "ternary ::= OPENP expr CLOSEP QMARK expr COLON expr",
+ /* 99 */
+ "value ::= variable",
+ /* 100 */
+ "value ::= UNIMATH value",
+ /* 101 */
+ "value ::= NOT value",
+ /* 102 */
+ "value ::= TYPECAST value",
+ /* 103 */
+ "value ::= variable INCDEC",
+ /* 104 */
+ "value ::= HEX",
+ /* 105 */
+ "value ::= INTEGER",
+ /* 106 */
+ "value ::= INTEGER DOT INTEGER",
+ /* 107 */
+ "value ::= INTEGER DOT",
+ /* 108 */
+ "value ::= DOT INTEGER",
+ /* 109 */
+ "value ::= ID",
+ /* 110 */
+ "value ::= function",
+ /* 111 */
+ "value ::= OPENP expr CLOSEP",
+ /* 112 */
+ "value ::= SINGLEQUOTESTRING",
+ /* 113 */
+ "value ::= doublequoted_with_quotes",
+ /* 114 */
+ "value ::= ID DOUBLECOLON static_class_access",
+ /* 115 */
+ "value ::= varindexed DOUBLECOLON static_class_access",
+ /* 116 */
+ "value ::= smartytag RDEL",
+ /* 117 */
+ "value ::= value modifierlist",
+ /* 118 */
+ "variable ::= varindexed",
+ /* 119 */
+ "variable ::= DOLLAR varvar AT ID",
+ /* 120 */
+ "variable ::= object",
+ /* 121 */
+ "variable ::= HATCH ID HATCH",
+ /* 122 */
+ "variable ::= HATCH ID HATCH arrayindex",
+ /* 123 */
+ "variable ::= HATCH variable HATCH",
+ /* 124 */
+ "variable ::= HATCH variable HATCH arrayindex",
+ /* 125 */
+ "varindexed ::= DOLLAR varvar arrayindex",
+ /* 126 */
+ "arrayindex ::= arrayindex indexdef",
+ /* 127 */
+ "arrayindex ::=",
+ /* 128 */
+ "indexdef ::= DOT DOLLAR varvar",
+ /* 129 */
+ "indexdef ::= DOT DOLLAR varvar AT ID",
+ /* 130 */
+ "indexdef ::= DOT ID",
+ /* 131 */
+ "indexdef ::= DOT INTEGER",
+ /* 132 */
+ "indexdef ::= DOT LDEL expr RDEL",
+ /* 133 */
+ "indexdef ::= OPENB ID CLOSEB",
+ /* 134 */
+ "indexdef ::= OPENB ID DOT ID CLOSEB",
+ /* 135 */
+ "indexdef ::= OPENB expr CLOSEB",
+ /* 136 */
+ "indexdef ::= OPENB CLOSEB",
+ /* 137 */
+ "varvar ::= varvarele",
+ /* 138 */
+ "varvar ::= varvar varvarele",
+ /* 139 */
+ "varvarele ::= ID",
+ /* 140 */
+ "varvarele ::= LDEL expr RDEL",
+ /* 141 */
+ "object ::= varindexed objectchain",
+ /* 142 */
+ "objectchain ::= objectelement",
+ /* 143 */
+ "objectchain ::= objectchain objectelement",
+ /* 144 */
+ "objectelement ::= PTR ID arrayindex",
+ /* 145 */
+ "objectelement ::= PTR DOLLAR varvar arrayindex",
+ /* 146 */
+ "objectelement ::= PTR LDEL expr RDEL arrayindex",
+ /* 147 */
+ "objectelement ::= PTR ID LDEL expr RDEL arrayindex",
+ /* 148 */
+ "objectelement ::= PTR method",
+ /* 149 */
+ "function ::= ID OPENP params CLOSEP",
+ /* 150 */
+ "method ::= ID OPENP params CLOSEP",
+ /* 151 */
+ "method ::= DOLLAR ID OPENP params CLOSEP",
+ /* 152 */
+ "params ::= params COMMA expr",
+ /* 153 */
+ "params ::= expr",
+ /* 154 */
+ "params ::=",
+ /* 155 */
+ "modifierlist ::= modifierlist modifier modparameters",
+ /* 156 */
+ "modifierlist ::= modifier modparameters",
+ /* 157 */
+ "modifier ::= VERT AT ID",
+ /* 158 */
+ "modifier ::= VERT ID",
+ /* 159 */
+ "modparameters ::= modparameters modparameter",
+ /* 160 */
+ "modparameters ::=",
+ /* 161 */
+ "modparameter ::= COLON value",
+ /* 162 */
+ "modparameter ::= COLON array",
+ /* 163 */
+ "static_class_access ::= method",
+ /* 164 */
+ "static_class_access ::= method objectchain",
+ /* 165 */
+ "static_class_access ::= ID",
+ /* 166 */
+ "static_class_access ::= DOLLAR ID arrayindex",
+ /* 167 */
+ "static_class_access ::= DOLLAR ID arrayindex objectchain",
+ /* 168 */
+ "ifcond ::= EQUALS",
+ /* 169 */
+ "ifcond ::= NOTEQUALS",
+ /* 170 */
+ "ifcond ::= GREATERTHAN",
+ /* 171 */
+ "ifcond ::= LESSTHAN",
+ /* 172 */
+ "ifcond ::= GREATEREQUAL",
+ /* 173 */
+ "ifcond ::= LESSEQUAL",
+ /* 174 */
+ "ifcond ::= IDENTITY",
+ /* 175 */
+ "ifcond ::= NONEIDENTITY",
+ /* 176 */
+ "ifcond ::= MOD",
+ /* 177 */
+ "lop ::= LAND",
+ /* 178 */
+ "lop ::= LOR",
+ /* 179 */
+ "lop ::= LXOR",
+ /* 180 */
+ "array ::= OPENB arrayelements CLOSEB",
+ /* 181 */
+ "arrayelements ::= arrayelement",
+ /* 182 */
+ "arrayelements ::= arrayelements COMMA arrayelement",
+ /* 183 */
+ "arrayelements ::=",
+ /* 184 */
+ "arrayelement ::= value APTR expr",
+ /* 185 */
+ "arrayelement ::= ID APTR expr",
+ /* 186 */
+ "arrayelement ::= expr",
+ /* 187 */
+ "doublequoted_with_quotes ::= QUOTE QUOTE",
+ /* 188 */
+ "doublequoted_with_quotes ::= QUOTE doublequoted QUOTE",
+ /* 189 */
+ "doublequoted ::= doublequoted doublequotedcontent",
+ /* 190 */
+ "doublequoted ::= doublequotedcontent",
+ /* 191 */
+ "doublequotedcontent ::= BACKTICK variable BACKTICK",
+ /* 192 */
+ "doublequotedcontent ::= BACKTICK expr BACKTICK",
+ /* 193 */
+ "doublequotedcontent ::= DOLLARID",
+ /* 194 */
+ "doublequotedcontent ::= LDEL variable RDEL",
+ /* 195 */
+ "doublequotedcontent ::= LDEL expr RDEL",
+ /* 196 */
+ "doublequotedcontent ::= smartytag RDEL",
+ /* 197 */
+ "doublequotedcontent ::= TEXT",
+ /* 198 */
+ "optspace ::= SPACE",
+ /* 199 */
+ "optspace ::=",
);
- function tokenName($tokenType)
+ public function tokenName($tokenType)
{
if ($tokenType === 0) {
return 'End of Input';
@@ -1489,41 +2625,43 @@ static public $yy_action = array(
}
}
- static function yy_destructor($yymajor, $yypminor)
+ public static function yy_destructor($yymajor, $yypminor)
{
switch ($yymajor) {
- default: break; /* If no destructor action specified: do nothing */
+ default:
+ break; /* If no destructor action specified: do nothing */
}
}
- function yy_pop_parser_stack()
+ public function yy_pop_parser_stack()
{
if (!count($this->yystack)) {
return;
}
$yytos = array_pop($this->yystack);
- if (self::$yyTraceFILE && $this->yyidx >= 0) {
- fwrite(self::$yyTraceFILE,
- self::$yyTracePrompt . 'Popping ' . $this->yyTokenName[$yytos->major] .
- "\n");
+ if ($this->yyTraceFILE && $this->yyidx >= 0) {
+ fwrite($this->yyTraceFILE,
+ $this->yyTracePrompt . 'Popping ' . $this->yyTokenName[$yytos->major] .
+ "\n");
}
$yymajor = $yytos->major;
self::yy_destructor($yymajor, $yytos->minor);
- $this->yyidx--;
+ $this->yyidx --;
+
return $yymajor;
}
- function __destruct()
+ public function __destruct()
{
while ($this->yystack !== Array()) {
$this->yy_pop_parser_stack();
}
- if (is_resource(self::$yyTraceFILE)) {
- fclose(self::$yyTraceFILE);
+ if (is_resource($this->yyTraceFILE)) {
+ fclose($this->yyTraceFILE);
}
}
- function yy_get_expected_tokens($token)
+ public function yy_get_expected_tokens($token)
{
$state = $this->yystack[$this->yyidx]->stateno;
$expected = self::$yyExpectedTokens[$state];
@@ -1538,7 +2676,7 @@ static public $yy_action = array(
// reduce action
$done = 0;
do {
- if ($done++ == 100) {
+ if ($done ++ == 100) {
$this->yyidx = $yyidx;
$this->yystack = $stack;
// too much recursion prevents proper detection
@@ -1551,17 +2689,18 @@ static public $yy_action = array(
$this->yystack[$this->yyidx]->stateno,
self::$yyRuleInfo[$yyruleno]['lhs']);
if (isset(self::$yyExpectedTokens[$nextstate])) {
- $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]);
- if (in_array($token,
- self::$yyExpectedTokens[$nextstate], true)) {
+ $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]);
+ if (in_array($token,
+ self::$yyExpectedTokens[$nextstate], true)) {
$this->yyidx = $yyidx;
$this->yystack = $stack;
+
return array_unique($expected);
}
}
if ($nextstate < self::YYNSTATE) {
// we need to shift a non-terminal
- $this->yyidx++;
+ $this->yyidx ++;
$x = new TP_yyStackEntry;
$x->stateno = $nextstate;
$x->major = self::$yyRuleInfo[$yyruleno]['lhs'];
@@ -1586,12 +2725,13 @@ static public $yy_action = array(
}
break;
} while (true);
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+
return array_unique($expected);
}
- function yy_is_expected_token($token)
+ public function yy_is_expected_token($token)
{
if ($token === 0) {
return true; // 0 is not part of this
@@ -1608,7 +2748,7 @@ static public $yy_action = array(
// reduce action
$done = 0;
do {
- if ($done++ == 100) {
+ if ($done ++ == 100) {
$this->yyidx = $yyidx;
$this->yystack = $stack;
// too much recursion prevents proper detection
@@ -1621,14 +2761,16 @@ static public $yy_action = array(
$this->yystack[$this->yyidx]->stateno,
self::$yyRuleInfo[$yyruleno]['lhs']);
if (isset(self::$yyExpectedTokens[$nextstate]) &&
- in_array($token, self::$yyExpectedTokens[$nextstate], true)) {
+ in_array($token, self::$yyExpectedTokens[$nextstate], true)
+ ) {
$this->yyidx = $yyidx;
$this->yystack = $stack;
+
return true;
}
if ($nextstate < self::YYNSTATE) {
// we need to shift a non-terminal
- $this->yyidx++;
+ $this->yyidx ++;
$x = new TP_yyStackEntry;
$x->stateno = $nextstate;
$x->major = self::$yyRuleInfo[$yyruleno]['lhs'];
@@ -1659,10 +2801,11 @@ static public $yy_action = array(
} while (true);
$this->yyidx = $yyidx;
$this->yystack = $stack;
+
return true;
}
- function yy_find_shift_action($iLookAhead)
+ public function yy_find_shift_action($iLookAhead)
{
$stateno = $this->yystack[$this->yyidx]->stateno;
@@ -1680,23 +2823,27 @@ static public $yy_action = array(
}
$i += $iLookAhead;
if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
- self::$yy_lookahead[$i] != $iLookAhead) {
+ self::$yy_lookahead[$i] != $iLookAhead
+ ) {
if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback)
- && ($iFallback = self::$yyFallback[$iLookAhead]) != 0) {
- if (self::$yyTraceFILE) {
- fwrite(self::$yyTraceFILE, self::$yyTracePrompt . "FALLBACK " .
+ && ($iFallback = self::$yyFallback[$iLookAhead]) != 0
+ ) {
+ if ($this->yyTraceFILE) {
+ fwrite($this->yyTraceFILE, $this->yyTracePrompt . "FALLBACK " .
$this->yyTokenName[$iLookAhead] . " => " .
$this->yyTokenName[$iFallback] . "\n");
}
+
return $this->yy_find_shift_action($iFallback);
}
+
return self::$yy_default[$stateno];
} else {
return self::$yy_action[$i];
}
}
- function yy_find_reduce_action($stateno, $iLookAhead)
+ public function yy_find_reduce_action($stateno, $iLookAhead)
{
/* $stateno = $this->yystack[$this->yyidx]->stateno; */
@@ -1712,29 +2859,31 @@ static public $yy_action = array(
}
$i += $iLookAhead;
if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
- self::$yy_lookahead[$i] != $iLookAhead) {
+ self::$yy_lookahead[$i] != $iLookAhead
+ ) {
return self::$yy_default[$stateno];
} else {
return self::$yy_action[$i];
}
}
- function yy_shift($yyNewState, $yyMajor, $yypMinor)
+ public function yy_shift($yyNewState, $yyMajor, $yypMinor)
{
- $this->yyidx++;
+ $this->yyidx ++;
if ($this->yyidx >= self::YYSTACKDEPTH) {
- $this->yyidx--;
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sStack Overflow!\n", self::$yyTracePrompt);
+ $this->yyidx --;
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt);
}
while ($this->yyidx >= 0) {
$this->yy_pop_parser_stack();
}
-#line 84 "smarty_internal_templateparser.y"
+ #line 82 "smarty_internal_templateparser.y"
+
+ $this->internalError = true;
+ $this->compiler->trigger_template_error("Stack overflow in template parser");
+ #line 1721 "smarty_internal_templateparser.php"
- $this->internalError = true;
- $this->compiler->trigger_template_error("Stack overflow in template parser");
-#line 1733 "smarty_internal_templateparser.php"
return;
}
$yytos = new TP_yyStackEntry;
@@ -1742,377 +2891,375 @@ static public $yy_action = array(
$yytos->major = $yyMajor;
$yytos->minor = $yypMinor;
array_push($this->yystack, $yytos);
- if (self::$yyTraceFILE && $this->yyidx > 0) {
- fprintf(self::$yyTraceFILE, "%sShift %d\n", self::$yyTracePrompt,
- $yyNewState);
- fprintf(self::$yyTraceFILE, "%sStack:", self::$yyTracePrompt);
- for($i = 1; $i <= $this->yyidx; $i++) {
- fprintf(self::$yyTraceFILE, " %s",
- $this->yyTokenName[$this->yystack[$i]->major]);
+ if ($this->yyTraceFILE && $this->yyidx > 0) {
+ fprintf($this->yyTraceFILE, "%sShift %d\n", $this->yyTracePrompt,
+ $yyNewState);
+ fprintf($this->yyTraceFILE, "%sStack:", $this->yyTracePrompt);
+ for ($i = 1; $i <= $this->yyidx; $i ++) {
+ fprintf($this->yyTraceFILE, " %s",
+ $this->yyTokenName[$this->yystack[$i]->major]);
}
- fwrite(self::$yyTraceFILE,"\n");
+ fwrite($this->yyTraceFILE, "\n");
}
}
- static public $yyRuleInfo = array(
- array( 'lhs' => 82, 'rhs' => 1 ),
- array( 'lhs' => 83, 'rhs' => 1 ),
- array( 'lhs' => 83, 'rhs' => 2 ),
- array( 'lhs' => 83, 'rhs' => 0 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 86, 'rhs' => 2 ),
- array( 'lhs' => 86, 'rhs' => 3 ),
- array( 'lhs' => 87, 'rhs' => 2 ),
- array( 'lhs' => 87, 'rhs' => 0 ),
- array( 'lhs' => 88, 'rhs' => 1 ),
- array( 'lhs' => 88, 'rhs' => 1 ),
- array( 'lhs' => 88, 'rhs' => 1 ),
- array( 'lhs' => 88, 'rhs' => 1 ),
- array( 'lhs' => 88, 'rhs' => 1 ),
- array( 'lhs' => 88, 'rhs' => 1 ),
- array( 'lhs' => 88, 'rhs' => 1 ),
- array( 'lhs' => 85, 'rhs' => 3 ),
- array( 'lhs' => 85, 'rhs' => 5 ),
- array( 'lhs' => 85, 'rhs' => 4 ),
- array( 'lhs' => 85, 'rhs' => 5 ),
- array( 'lhs' => 85, 'rhs' => 4 ),
- array( 'lhs' => 85, 'rhs' => 6 ),
- array( 'lhs' => 85, 'rhs' => 6 ),
- array( 'lhs' => 85, 'rhs' => 7 ),
- array( 'lhs' => 85, 'rhs' => 6 ),
- array( 'lhs' => 85, 'rhs' => 4 ),
- array( 'lhs' => 85, 'rhs' => 3 ),
- array( 'lhs' => 85, 'rhs' => 6 ),
- array( 'lhs' => 85, 'rhs' => 5 ),
- array( 'lhs' => 85, 'rhs' => 7 ),
- array( 'lhs' => 85, 'rhs' => 3 ),
- array( 'lhs' => 85, 'rhs' => 4 ),
- array( 'lhs' => 85, 'rhs' => 3 ),
- array( 'lhs' => 85, 'rhs' => 4 ),
- array( 'lhs' => 85, 'rhs' => 12 ),
- array( 'lhs' => 98, 'rhs' => 2 ),
- array( 'lhs' => 98, 'rhs' => 1 ),
- array( 'lhs' => 85, 'rhs' => 6 ),
- array( 'lhs' => 85, 'rhs' => 8 ),
- array( 'lhs' => 85, 'rhs' => 3 ),
- array( 'lhs' => 85, 'rhs' => 8 ),
- array( 'lhs' => 85, 'rhs' => 11 ),
- array( 'lhs' => 85, 'rhs' => 8 ),
- array( 'lhs' => 85, 'rhs' => 11 ),
- array( 'lhs' => 85, 'rhs' => 4 ),
- array( 'lhs' => 85, 'rhs' => 5 ),
- array( 'lhs' => 85, 'rhs' => 1 ),
- array( 'lhs' => 85, 'rhs' => 3 ),
- array( 'lhs' => 85, 'rhs' => 4 ),
- array( 'lhs' => 85, 'rhs' => 5 ),
- array( 'lhs' => 85, 'rhs' => 6 ),
- array( 'lhs' => 91, 'rhs' => 2 ),
- array( 'lhs' => 91, 'rhs' => 1 ),
- array( 'lhs' => 91, 'rhs' => 0 ),
- array( 'lhs' => 100, 'rhs' => 4 ),
- array( 'lhs' => 100, 'rhs' => 2 ),
- array( 'lhs' => 100, 'rhs' => 2 ),
- array( 'lhs' => 100, 'rhs' => 2 ),
- array( 'lhs' => 100, 'rhs' => 2 ),
- array( 'lhs' => 100, 'rhs' => 2 ),
- array( 'lhs' => 100, 'rhs' => 4 ),
- array( 'lhs' => 95, 'rhs' => 1 ),
- array( 'lhs' => 95, 'rhs' => 3 ),
- array( 'lhs' => 94, 'rhs' => 4 ),
- array( 'lhs' => 94, 'rhs' => 3 ),
- array( 'lhs' => 94, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 1 ),
- array( 'lhs' => 92, 'rhs' => 1 ),
- array( 'lhs' => 92, 'rhs' => 4 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 1 ),
- array( 'lhs' => 92, 'rhs' => 2 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 2 ),
- array( 'lhs' => 92, 'rhs' => 2 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 2 ),
- array( 'lhs' => 92, 'rhs' => 2 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 101, 'rhs' => 8 ),
- array( 'lhs' => 101, 'rhs' => 7 ),
- array( 'lhs' => 89, 'rhs' => 1 ),
- array( 'lhs' => 89, 'rhs' => 2 ),
- array( 'lhs' => 89, 'rhs' => 2 ),
- array( 'lhs' => 89, 'rhs' => 2 ),
- array( 'lhs' => 89, 'rhs' => 2 ),
- array( 'lhs' => 89, 'rhs' => 1 ),
- array( 'lhs' => 89, 'rhs' => 1 ),
- array( 'lhs' => 89, 'rhs' => 3 ),
- array( 'lhs' => 89, 'rhs' => 2 ),
- array( 'lhs' => 89, 'rhs' => 2 ),
- array( 'lhs' => 89, 'rhs' => 1 ),
- array( 'lhs' => 89, 'rhs' => 1 ),
- array( 'lhs' => 89, 'rhs' => 3 ),
- array( 'lhs' => 89, 'rhs' => 1 ),
- array( 'lhs' => 89, 'rhs' => 1 ),
- array( 'lhs' => 89, 'rhs' => 3 ),
- array( 'lhs' => 89, 'rhs' => 3 ),
- array( 'lhs' => 89, 'rhs' => 1 ),
- array( 'lhs' => 89, 'rhs' => 2 ),
- array( 'lhs' => 105, 'rhs' => 1 ),
- array( 'lhs' => 105, 'rhs' => 4 ),
- array( 'lhs' => 105, 'rhs' => 1 ),
- array( 'lhs' => 105, 'rhs' => 3 ),
- array( 'lhs' => 105, 'rhs' => 3 ),
- array( 'lhs' => 93, 'rhs' => 3 ),
- array( 'lhs' => 110, 'rhs' => 2 ),
- array( 'lhs' => 110, 'rhs' => 0 ),
- array( 'lhs' => 111, 'rhs' => 3 ),
- array( 'lhs' => 111, 'rhs' => 5 ),
- array( 'lhs' => 111, 'rhs' => 2 ),
- array( 'lhs' => 111, 'rhs' => 2 ),
- array( 'lhs' => 111, 'rhs' => 4 ),
- array( 'lhs' => 111, 'rhs' => 3 ),
- array( 'lhs' => 111, 'rhs' => 5 ),
- array( 'lhs' => 111, 'rhs' => 3 ),
- array( 'lhs' => 111, 'rhs' => 2 ),
- array( 'lhs' => 97, 'rhs' => 1 ),
- array( 'lhs' => 97, 'rhs' => 2 ),
- array( 'lhs' => 112, 'rhs' => 1 ),
- array( 'lhs' => 112, 'rhs' => 3 ),
- array( 'lhs' => 109, 'rhs' => 2 ),
- array( 'lhs' => 113, 'rhs' => 1 ),
- array( 'lhs' => 113, 'rhs' => 2 ),
- array( 'lhs' => 114, 'rhs' => 3 ),
- array( 'lhs' => 114, 'rhs' => 4 ),
- array( 'lhs' => 114, 'rhs' => 5 ),
- array( 'lhs' => 114, 'rhs' => 6 ),
- array( 'lhs' => 114, 'rhs' => 2 ),
- array( 'lhs' => 106, 'rhs' => 4 ),
- array( 'lhs' => 115, 'rhs' => 4 ),
- array( 'lhs' => 115, 'rhs' => 5 ),
- array( 'lhs' => 116, 'rhs' => 3 ),
- array( 'lhs' => 116, 'rhs' => 1 ),
- array( 'lhs' => 116, 'rhs' => 0 ),
- array( 'lhs' => 90, 'rhs' => 3 ),
- array( 'lhs' => 90, 'rhs' => 2 ),
- array( 'lhs' => 117, 'rhs' => 3 ),
- array( 'lhs' => 117, 'rhs' => 2 ),
- array( 'lhs' => 99, 'rhs' => 2 ),
- array( 'lhs' => 99, 'rhs' => 0 ),
- array( 'lhs' => 118, 'rhs' => 2 ),
- array( 'lhs' => 118, 'rhs' => 2 ),
- array( 'lhs' => 108, 'rhs' => 1 ),
- array( 'lhs' => 108, 'rhs' => 2 ),
- array( 'lhs' => 108, 'rhs' => 1 ),
- array( 'lhs' => 108, 'rhs' => 3 ),
- array( 'lhs' => 108, 'rhs' => 4 ),
- array( 'lhs' => 103, 'rhs' => 1 ),
- array( 'lhs' => 103, 'rhs' => 1 ),
- array( 'lhs' => 103, 'rhs' => 1 ),
- array( 'lhs' => 103, 'rhs' => 1 ),
- array( 'lhs' => 103, 'rhs' => 1 ),
- array( 'lhs' => 103, 'rhs' => 1 ),
- array( 'lhs' => 103, 'rhs' => 1 ),
- array( 'lhs' => 103, 'rhs' => 1 ),
- array( 'lhs' => 103, 'rhs' => 1 ),
- array( 'lhs' => 104, 'rhs' => 1 ),
- array( 'lhs' => 104, 'rhs' => 1 ),
- array( 'lhs' => 104, 'rhs' => 1 ),
- array( 'lhs' => 102, 'rhs' => 3 ),
- array( 'lhs' => 119, 'rhs' => 1 ),
- array( 'lhs' => 119, 'rhs' => 3 ),
- array( 'lhs' => 119, 'rhs' => 0 ),
- array( 'lhs' => 120, 'rhs' => 3 ),
- array( 'lhs' => 120, 'rhs' => 3 ),
- array( 'lhs' => 120, 'rhs' => 1 ),
- array( 'lhs' => 107, 'rhs' => 2 ),
- array( 'lhs' => 107, 'rhs' => 3 ),
- array( 'lhs' => 121, 'rhs' => 2 ),
- array( 'lhs' => 121, 'rhs' => 1 ),
- array( 'lhs' => 122, 'rhs' => 3 ),
- array( 'lhs' => 122, 'rhs' => 3 ),
- array( 'lhs' => 122, 'rhs' => 1 ),
- array( 'lhs' => 122, 'rhs' => 3 ),
- array( 'lhs' => 122, 'rhs' => 3 ),
- array( 'lhs' => 122, 'rhs' => 1 ),
- array( 'lhs' => 122, 'rhs' => 1 ),
- array( 'lhs' => 96, 'rhs' => 1 ),
- array( 'lhs' => 96, 'rhs' => 0 ),
+ public static $yyRuleInfo = array(
+ array('lhs' => 83, 'rhs' => 1),
+ array('lhs' => 84, 'rhs' => 1),
+ array('lhs' => 84, 'rhs' => 2),
+ array('lhs' => 84, 'rhs' => 0),
+ array('lhs' => 85, 'rhs' => 2),
+ array('lhs' => 85, 'rhs' => 1),
+ array('lhs' => 85, 'rhs' => 1),
+ array('lhs' => 85, 'rhs' => 1),
+ array('lhs' => 85, 'rhs' => 1),
+ array('lhs' => 85, 'rhs' => 1),
+ array('lhs' => 85, 'rhs' => 1),
+ array('lhs' => 85, 'rhs' => 1),
+ array('lhs' => 85, 'rhs' => 1),
+ array('lhs' => 85, 'rhs' => 1),
+ array('lhs' => 85, 'rhs' => 1),
+ array('lhs' => 85, 'rhs' => 1),
+ array('lhs' => 85, 'rhs' => 1),
+ array('lhs' => 87, 'rhs' => 2),
+ array('lhs' => 87, 'rhs' => 3),
+ array('lhs' => 88, 'rhs' => 2),
+ array('lhs' => 88, 'rhs' => 0),
+ array('lhs' => 89, 'rhs' => 1),
+ array('lhs' => 89, 'rhs' => 1),
+ array('lhs' => 86, 'rhs' => 2),
+ array('lhs' => 86, 'rhs' => 4),
+ array('lhs' => 86, 'rhs' => 3),
+ array('lhs' => 86, 'rhs' => 4),
+ array('lhs' => 86, 'rhs' => 3),
+ array('lhs' => 86, 'rhs' => 5),
+ array('lhs' => 86, 'rhs' => 5),
+ array('lhs' => 86, 'rhs' => 6),
+ array('lhs' => 86, 'rhs' => 5),
+ array('lhs' => 86, 'rhs' => 3),
+ array('lhs' => 86, 'rhs' => 2),
+ array('lhs' => 86, 'rhs' => 5),
+ array('lhs' => 86, 'rhs' => 4),
+ array('lhs' => 86, 'rhs' => 6),
+ array('lhs' => 86, 'rhs' => 2),
+ array('lhs' => 86, 'rhs' => 3),
+ array('lhs' => 86, 'rhs' => 2),
+ array('lhs' => 86, 'rhs' => 3),
+ array('lhs' => 86, 'rhs' => 11),
+ array('lhs' => 99, 'rhs' => 2),
+ array('lhs' => 99, 'rhs' => 1),
+ array('lhs' => 86, 'rhs' => 5),
+ array('lhs' => 86, 'rhs' => 7),
+ array('lhs' => 86, 'rhs' => 2),
+ array('lhs' => 86, 'rhs' => 7),
+ array('lhs' => 86, 'rhs' => 10),
+ array('lhs' => 86, 'rhs' => 7),
+ array('lhs' => 86, 'rhs' => 10),
+ array('lhs' => 86, 'rhs' => 3),
+ array('lhs' => 86, 'rhs' => 4),
+ array('lhs' => 86, 'rhs' => 2),
+ array('lhs' => 86, 'rhs' => 2),
+ array('lhs' => 86, 'rhs' => 3),
+ array('lhs' => 86, 'rhs' => 4),
+ array('lhs' => 86, 'rhs' => 5),
+ array('lhs' => 92, 'rhs' => 2),
+ array('lhs' => 92, 'rhs' => 1),
+ array('lhs' => 92, 'rhs' => 0),
+ array('lhs' => 101, 'rhs' => 4),
+ array('lhs' => 101, 'rhs' => 2),
+ array('lhs' => 101, 'rhs' => 2),
+ array('lhs' => 101, 'rhs' => 2),
+ array('lhs' => 101, 'rhs' => 2),
+ array('lhs' => 101, 'rhs' => 2),
+ array('lhs' => 101, 'rhs' => 4),
+ array('lhs' => 96, 'rhs' => 1),
+ array('lhs' => 96, 'rhs' => 3),
+ array('lhs' => 95, 'rhs' => 4),
+ array('lhs' => 95, 'rhs' => 3),
+ array('lhs' => 95, 'rhs' => 3),
+ array('lhs' => 93, 'rhs' => 1),
+ array('lhs' => 93, 'rhs' => 1),
+ array('lhs' => 93, 'rhs' => 4),
+ array('lhs' => 93, 'rhs' => 3),
+ array('lhs' => 93, 'rhs' => 3),
+ array('lhs' => 93, 'rhs' => 3),
+ array('lhs' => 93, 'rhs' => 1),
+ array('lhs' => 93, 'rhs' => 2),
+ array('lhs' => 93, 'rhs' => 3),
+ array('lhs' => 93, 'rhs' => 3),
+ array('lhs' => 93, 'rhs' => 3),
+ array('lhs' => 93, 'rhs' => 3),
+ array('lhs' => 93, 'rhs' => 3),
+ array('lhs' => 93, 'rhs' => 3),
+ array('lhs' => 93, 'rhs' => 2),
+ array('lhs' => 93, 'rhs' => 2),
+ array('lhs' => 93, 'rhs' => 3),
+ array('lhs' => 93, 'rhs' => 3),
+ array('lhs' => 93, 'rhs' => 2),
+ array('lhs' => 93, 'rhs' => 2),
+ array('lhs' => 93, 'rhs' => 3),
+ array('lhs' => 93, 'rhs' => 3),
+ array('lhs' => 93, 'rhs' => 3),
+ array('lhs' => 93, 'rhs' => 3),
+ array('lhs' => 102, 'rhs' => 8),
+ array('lhs' => 102, 'rhs' => 7),
+ array('lhs' => 90, 'rhs' => 1),
+ array('lhs' => 90, 'rhs' => 2),
+ array('lhs' => 90, 'rhs' => 2),
+ array('lhs' => 90, 'rhs' => 2),
+ array('lhs' => 90, 'rhs' => 2),
+ array('lhs' => 90, 'rhs' => 1),
+ array('lhs' => 90, 'rhs' => 1),
+ array('lhs' => 90, 'rhs' => 3),
+ array('lhs' => 90, 'rhs' => 2),
+ array('lhs' => 90, 'rhs' => 2),
+ array('lhs' => 90, 'rhs' => 1),
+ array('lhs' => 90, 'rhs' => 1),
+ array('lhs' => 90, 'rhs' => 3),
+ array('lhs' => 90, 'rhs' => 1),
+ array('lhs' => 90, 'rhs' => 1),
+ array('lhs' => 90, 'rhs' => 3),
+ array('lhs' => 90, 'rhs' => 3),
+ array('lhs' => 90, 'rhs' => 2),
+ array('lhs' => 90, 'rhs' => 2),
+ array('lhs' => 106, 'rhs' => 1),
+ array('lhs' => 106, 'rhs' => 4),
+ array('lhs' => 106, 'rhs' => 1),
+ array('lhs' => 106, 'rhs' => 3),
+ array('lhs' => 106, 'rhs' => 4),
+ array('lhs' => 106, 'rhs' => 3),
+ array('lhs' => 106, 'rhs' => 4),
+ array('lhs' => 94, 'rhs' => 3),
+ array('lhs' => 111, 'rhs' => 2),
+ array('lhs' => 111, 'rhs' => 0),
+ array('lhs' => 112, 'rhs' => 3),
+ array('lhs' => 112, 'rhs' => 5),
+ array('lhs' => 112, 'rhs' => 2),
+ array('lhs' => 112, 'rhs' => 2),
+ array('lhs' => 112, 'rhs' => 4),
+ array('lhs' => 112, 'rhs' => 3),
+ array('lhs' => 112, 'rhs' => 5),
+ array('lhs' => 112, 'rhs' => 3),
+ array('lhs' => 112, 'rhs' => 2),
+ array('lhs' => 98, 'rhs' => 1),
+ array('lhs' => 98, 'rhs' => 2),
+ array('lhs' => 113, 'rhs' => 1),
+ array('lhs' => 113, 'rhs' => 3),
+ array('lhs' => 110, 'rhs' => 2),
+ array('lhs' => 114, 'rhs' => 1),
+ array('lhs' => 114, 'rhs' => 2),
+ array('lhs' => 115, 'rhs' => 3),
+ array('lhs' => 115, 'rhs' => 4),
+ array('lhs' => 115, 'rhs' => 5),
+ array('lhs' => 115, 'rhs' => 6),
+ array('lhs' => 115, 'rhs' => 2),
+ array('lhs' => 107, 'rhs' => 4),
+ array('lhs' => 116, 'rhs' => 4),
+ array('lhs' => 116, 'rhs' => 5),
+ array('lhs' => 117, 'rhs' => 3),
+ array('lhs' => 117, 'rhs' => 1),
+ array('lhs' => 117, 'rhs' => 0),
+ array('lhs' => 91, 'rhs' => 3),
+ array('lhs' => 91, 'rhs' => 2),
+ array('lhs' => 118, 'rhs' => 3),
+ array('lhs' => 118, 'rhs' => 2),
+ array('lhs' => 100, 'rhs' => 2),
+ array('lhs' => 100, 'rhs' => 0),
+ array('lhs' => 119, 'rhs' => 2),
+ array('lhs' => 119, 'rhs' => 2),
+ array('lhs' => 109, 'rhs' => 1),
+ array('lhs' => 109, 'rhs' => 2),
+ array('lhs' => 109, 'rhs' => 1),
+ array('lhs' => 109, 'rhs' => 3),
+ array('lhs' => 109, 'rhs' => 4),
+ array('lhs' => 104, 'rhs' => 1),
+ array('lhs' => 104, 'rhs' => 1),
+ array('lhs' => 104, 'rhs' => 1),
+ array('lhs' => 104, 'rhs' => 1),
+ array('lhs' => 104, 'rhs' => 1),
+ array('lhs' => 104, 'rhs' => 1),
+ array('lhs' => 104, 'rhs' => 1),
+ array('lhs' => 104, 'rhs' => 1),
+ array('lhs' => 104, 'rhs' => 1),
+ array('lhs' => 105, 'rhs' => 1),
+ array('lhs' => 105, 'rhs' => 1),
+ array('lhs' => 105, 'rhs' => 1),
+ array('lhs' => 103, 'rhs' => 3),
+ array('lhs' => 120, 'rhs' => 1),
+ array('lhs' => 120, 'rhs' => 3),
+ array('lhs' => 120, 'rhs' => 0),
+ array('lhs' => 121, 'rhs' => 3),
+ array('lhs' => 121, 'rhs' => 3),
+ array('lhs' => 121, 'rhs' => 1),
+ array('lhs' => 108, 'rhs' => 2),
+ array('lhs' => 108, 'rhs' => 3),
+ array('lhs' => 122, 'rhs' => 2),
+ array('lhs' => 122, 'rhs' => 1),
+ array('lhs' => 123, 'rhs' => 3),
+ array('lhs' => 123, 'rhs' => 3),
+ array('lhs' => 123, 'rhs' => 1),
+ array('lhs' => 123, 'rhs' => 3),
+ array('lhs' => 123, 'rhs' => 3),
+ array('lhs' => 123, 'rhs' => 2),
+ array('lhs' => 123, 'rhs' => 1),
+ array('lhs' => 97, 'rhs' => 1),
+ array('lhs' => 97, 'rhs' => 0),
);
- static public $yyReduceMap = array(
- 0 => 0,
- 1 => 1,
- 2 => 1,
- 4 => 4,
- 5 => 5,
- 6 => 6,
- 7 => 7,
- 8 => 8,
- 9 => 9,
- 10 => 10,
- 11 => 11,
- 12 => 12,
- 13 => 13,
- 14 => 14,
- 15 => 15,
- 16 => 16,
- 19 => 16,
- 201 => 16,
- 17 => 17,
- 76 => 17,
- 18 => 18,
- 104 => 18,
- 106 => 18,
- 107 => 18,
- 128 => 18,
- 166 => 18,
- 20 => 20,
- 21 => 20,
- 47 => 20,
- 69 => 20,
- 70 => 20,
- 77 => 20,
- 78 => 20,
- 83 => 20,
- 103 => 20,
- 108 => 20,
- 109 => 20,
- 114 => 20,
- 116 => 20,
- 117 => 20,
- 124 => 20,
- 139 => 20,
- 165 => 20,
- 167 => 20,
- 183 => 20,
- 188 => 20,
- 200 => 20,
- 22 => 22,
- 23 => 22,
- 24 => 24,
- 25 => 25,
- 26 => 26,
- 27 => 27,
- 28 => 28,
- 29 => 29,
- 31 => 29,
- 30 => 30,
- 32 => 32,
- 33 => 32,
- 34 => 34,
- 35 => 35,
- 36 => 36,
- 37 => 37,
- 38 => 38,
- 39 => 39,
- 40 => 40,
- 41 => 41,
- 42 => 42,
- 44 => 42,
- 43 => 43,
- 45 => 45,
- 46 => 46,
- 48 => 48,
- 49 => 49,
- 50 => 50,
- 51 => 51,
- 52 => 52,
- 53 => 53,
- 54 => 54,
- 55 => 55,
- 56 => 56,
- 57 => 57,
- 58 => 58,
- 59 => 59,
- 60 => 60,
- 61 => 61,
- 62 => 62,
- 63 => 63,
- 72 => 63,
- 155 => 63,
- 159 => 63,
- 163 => 63,
- 164 => 63,
- 64 => 64,
- 156 => 64,
- 162 => 64,
- 65 => 65,
- 66 => 66,
- 67 => 66,
- 68 => 68,
- 71 => 71,
- 73 => 73,
- 74 => 74,
- 75 => 74,
- 79 => 79,
- 80 => 80,
- 81 => 80,
- 82 => 80,
- 84 => 84,
- 121 => 84,
- 85 => 85,
- 88 => 85,
- 99 => 85,
- 86 => 86,
- 87 => 87,
- 89 => 89,
- 90 => 90,
- 91 => 91,
- 96 => 91,
- 92 => 92,
- 95 => 92,
- 93 => 93,
- 98 => 93,
- 94 => 94,
- 97 => 94,
- 100 => 100,
+ public static $yyReduceMap = array(
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 4 => 4,
+ 5 => 5,
+ 6 => 6,
+ 7 => 7,
+ 8 => 8,
+ 9 => 9,
+ 10 => 10,
+ 11 => 11,
+ 12 => 12,
+ 13 => 13,
+ 14 => 14,
+ 15 => 15,
+ 16 => 16,
+ 17 => 17,
+ 20 => 17,
+ 199 => 17,
+ 18 => 18,
+ 72 => 18,
+ 19 => 19,
+ 100 => 19,
+ 102 => 19,
+ 103 => 19,
+ 126 => 19,
+ 164 => 19,
+ 21 => 21,
+ 22 => 21,
+ 43 => 21,
+ 65 => 21,
+ 66 => 21,
+ 73 => 21,
+ 74 => 21,
+ 79 => 21,
+ 99 => 21,
+ 104 => 21,
+ 105 => 21,
+ 110 => 21,
+ 112 => 21,
+ 113 => 21,
+ 120 => 21,
+ 137 => 21,
+ 163 => 21,
+ 165 => 21,
+ 181 => 21,
+ 186 => 21,
+ 198 => 21,
+ 23 => 23,
+ 24 => 24,
+ 25 => 25,
+ 27 => 25,
+ 26 => 26,
+ 28 => 28,
+ 29 => 28,
+ 30 => 30,
+ 31 => 31,
+ 32 => 32,
+ 33 => 33,
+ 34 => 34,
+ 35 => 35,
+ 36 => 36,
+ 37 => 37,
+ 38 => 38,
+ 40 => 38,
+ 39 => 39,
+ 41 => 41,
+ 42 => 42,
+ 44 => 44,
+ 45 => 45,
+ 46 => 46,
+ 47 => 47,
+ 49 => 47,
+ 48 => 48,
+ 50 => 48,
+ 51 => 51,
+ 52 => 52,
+ 53 => 53,
+ 54 => 54,
+ 55 => 55,
+ 56 => 56,
+ 57 => 57,
+ 58 => 58,
+ 59 => 59,
+ 68 => 59,
+ 153 => 59,
+ 157 => 59,
+ 161 => 59,
+ 162 => 59,
+ 60 => 60,
+ 154 => 60,
+ 160 => 60,
+ 61 => 61,
+ 62 => 62,
+ 63 => 62,
+ 64 => 64,
+ 67 => 67,
+ 69 => 69,
+ 70 => 70,
+ 71 => 70,
+ 75 => 75,
+ 76 => 76,
+ 77 => 76,
+ 78 => 76,
+ 80 => 80,
+ 117 => 80,
+ 81 => 81,
+ 84 => 81,
+ 95 => 81,
+ 82 => 82,
+ 83 => 83,
+ 85 => 85,
+ 86 => 86,
+ 87 => 87,
+ 92 => 87,
+ 88 => 88,
+ 91 => 88,
+ 89 => 89,
+ 94 => 89,
+ 90 => 90,
+ 93 => 90,
+ 96 => 96,
+ 97 => 97,
+ 98 => 98,
101 => 101,
- 102 => 102,
- 105 => 105,
- 110 => 110,
+ 106 => 106,
+ 107 => 107,
+ 108 => 108,
+ 109 => 109,
111 => 111,
- 112 => 112,
- 113 => 113,
+ 114 => 114,
115 => 115,
+ 116 => 116,
118 => 118,
119 => 119,
- 120 => 120,
+ 121 => 121,
122 => 122,
123 => 123,
+ 124 => 124,
125 => 125,
- 126 => 126,
127 => 127,
+ 183 => 127,
+ 128 => 128,
129 => 129,
- 185 => 129,
130 => 130,
131 => 131,
132 => 132,
+ 135 => 132,
133 => 133,
134 => 134,
- 137 => 134,
- 135 => 135,
136 => 136,
138 => 138,
+ 139 => 139,
140 => 140,
141 => 141,
142 => 142,
@@ -2126,12 +3273,12 @@ static public $yy_action = array(
150 => 150,
151 => 151,
152 => 152,
- 153 => 153,
- 154 => 154,
- 157 => 157,
+ 155 => 155,
+ 156 => 156,
158 => 158,
- 160 => 160,
- 161 => 161,
+ 159 => 159,
+ 166 => 166,
+ 167 => 167,
168 => 168,
169 => 169,
170 => 170,
@@ -2145,948 +3292,1118 @@ static public $yy_action = array(
178 => 178,
179 => 179,
180 => 180,
- 181 => 181,
182 => 182,
184 => 184,
- 186 => 186,
+ 185 => 185,
187 => 187,
+ 188 => 188,
189 => 189,
190 => 190,
191 => 191,
- 192 => 192,
+ 192 => 191,
+ 194 => 191,
193 => 193,
- 194 => 193,
- 196 => 193,
195 => 195,
+ 196 => 196,
197 => 197,
- 198 => 198,
- 199 => 199,
);
-#line 95 "smarty_internal_templateparser.y"
- function yy_r0(){
- $this->_retvalue = $this->root_buffer->to_smarty_php();
- }
-#line 2165 "smarty_internal_templateparser.php"
-#line 103 "smarty_internal_templateparser.y"
- function yy_r1(){
- $this->current_buffer->append_subtree($this->yystack[$this->yyidx + 0]->minor);
- }
-#line 2170 "smarty_internal_templateparser.php"
-#line 119 "smarty_internal_templateparser.y"
- function yy_r4(){
- if ($this->compiler->has_code) {
- $tmp =''; foreach ($this->compiler->prefix_code as $code) {$tmp.=$code;} $this->compiler->prefix_code=array();
- $this->_retvalue = new _smarty_tag($this, $this->compiler->processNocacheCode($tmp.$this->yystack[$this->yyidx + 0]->minor,true));
- } else {
- $this->_retvalue = new _smarty_tag($this, $this->yystack[$this->yyidx + 0]->minor);
- }
- $this->compiler->has_variable_string = false;
- $this->block_nesting_level = count($this->compiler->_tag_stack);
- }
-#line 2182 "smarty_internal_templateparser.php"
-#line 131 "smarty_internal_templateparser.y"
- function yy_r5(){
- $this->_retvalue = new _smarty_tag($this, '');
- }
-#line 2187 "smarty_internal_templateparser.php"
-#line 136 "smarty_internal_templateparser.y"
- function yy_r6(){
- $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor);
- }
-#line 2192 "smarty_internal_templateparser.php"
-#line 141 "smarty_internal_templateparser.y"
- function yy_r7(){
- if ($this->php_handling == Smarty::PHP_PASSTHRU) {
- $this->_retvalue = new _smarty_text($this, self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor));
- } elseif ($this->php_handling == Smarty::PHP_QUOTE) {
- $this->_retvalue = new _smarty_text($this, htmlspecialchars($this->yystack[$this->yyidx + 0]->minor, ENT_QUOTES));
- } elseif ($this->php_handling == Smarty::PHP_ALLOW) {
- if (!($this->smarty instanceof SmartyBC)) {
- $this->compiler->trigger_template_error (self::Err3);
+
+ #line 93 "smarty_internal_templateparser.y"
+ function yy_r0()
+ {
+ $this->_retvalue = $this->root_buffer->to_smarty_php();
+ }
+ #line 2150 "smarty_internal_templateparser.php"
+ #line 101 "smarty_internal_templateparser.y"
+ function yy_r1()
+ {
+ if ($this->yystack[$this->yyidx + 0]->minor != null) {
+ $this->current_buffer->append_subtree($this->yystack[$this->yyidx + 0]->minor);
}
- $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('<?php', true));
- } elseif ($this->php_handling == Smarty::PHP_REMOVE) {
- $this->_retvalue = new _smarty_text($this, '');
}
+ #line 2157 "smarty_internal_templateparser.php"
+ #line 108 "smarty_internal_templateparser.y"
+ function yy_r2()
+ {
+ if ($this->yystack[$this->yyidx + 0]->minor != null) {
+ // because of possible code injection
+ $this->current_buffer->append_subtree($this->yystack[$this->yyidx + 0]->minor);
+ }
}
-#line 2208 "smarty_internal_templateparser.php"
-#line 157 "smarty_internal_templateparser.y"
- function yy_r8(){
- if ($this->is_xml) {
+ #line 2165 "smarty_internal_templateparser.php"
+ #line 122 "smarty_internal_templateparser.y"
+ function yy_r4()
+ {
+ if ($this->compiler->has_code) {
+ $tmp = '';
+ foreach ($this->compiler->prefix_code as $code) {
+ $tmp .= $code;
+ }
+ $this->compiler->prefix_code = array();
+ $this->_retvalue = new _smarty_tag($this, $this->compiler->processNocacheCode($tmp . $this->yystack[$this->yyidx + - 1]->minor, true));
+ } else {
+ $this->_retvalue = null;
+ }
+ $this->compiler->has_variable_string = false;
+ $this->block_nesting_level = count($this->compiler->_tag_stack);
+ }
+ #line 2177 "smarty_internal_templateparser.php"
+ #line 134 "smarty_internal_templateparser.y"
+ function yy_r5()
+ {
+ $this->_retvalue = null;
+ }
+ #line 2182 "smarty_internal_templateparser.php"
+ #line 139 "smarty_internal_templateparser.y"
+ function yy_r6()
+ {
+ $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor);
+ }
+ #line 2187 "smarty_internal_templateparser.php"
+ #line 144 "smarty_internal_templateparser.y"
+ function yy_r7()
+ {
+ if (strpos($this->yystack[$this->yyidx + 0]->minor, '<s') === 0) {
+ $this->lex->is_phpScript = true;
+ }
+ if ($this->php_handling == Smarty::PHP_PASSTHRU) {
+ if ($this->lex->is_phpScript) {
+ $s = addcslashes($this->yystack[$this->yyidx + 0]->minor, "'");
+ $this->_retvalue = new _smarty_text($this, $s);
+ } else {
+ $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor);
+ }
+ } elseif ($this->php_handling == Smarty::PHP_QUOTE) {
+ $this->_retvalue = new _smarty_text($this, htmlspecialchars($this->yystack[$this->yyidx + 0]->minor, ENT_QUOTES));
+ } elseif ($this->php_handling == Smarty::PHP_ALLOW) {
+ if (!($this->smarty instanceof SmartyBC)) {
+ $this->compiler->trigger_template_error(self::Err3);
+ }
+ $this->_retvalue = new _smarty_tag($this, $this->compiler->processNocacheCode('<?php ', true));
+ } elseif ($this->php_handling == Smarty::PHP_REMOVE) {
+ $this->_retvalue = null;
+ }
+ }
+ #line 2211 "smarty_internal_templateparser.php"
+ #line 168 "smarty_internal_templateparser.y"
+ function yy_r8()
+ {
+ if ($this->is_xml) {
+ $this->compiler->tag_nocache = true;
+ $this->is_xml = false;
+ $save = $this->template->has_nocache_code;
+ $this->_retvalue = new _smarty_tag($this, $this->compiler->processNocacheCode("<?php echo '?>';?>\n", $this->compiler, true));
+ $this->template->has_nocache_code = $save;
+ } elseif ($this->php_handling == Smarty::PHP_PASSTHRU) {
+ $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor);
+ } elseif ($this->php_handling == Smarty::PHP_QUOTE) {
+ $this->_retvalue = new _smarty_text($this, htmlspecialchars('?>', ENT_QUOTES));
+ } elseif ($this->php_handling == Smarty::PHP_ALLOW) {
+ $this->_retvalue = new _smarty_tag($this, $this->compiler->processNocacheCode('?>', true));
+ } elseif ($this->php_handling == Smarty::PHP_REMOVE) {
+ $this->_retvalue = null;
+ }
+ }
+ #line 2230 "smarty_internal_templateparser.php"
+ #line 186 "smarty_internal_templateparser.y"
+ function yy_r9()
+ {
+ if (!$this->lex->is_phpScript) {
+ $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor);
+ } else {
+ $this->lex->is_phpScript = false;
+ if ($this->php_handling == Smarty::PHP_PASSTHRU) {
+ $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor);
+ } elseif ($this->php_handling == Smarty::PHP_QUOTE) {
+ $this->_retvalue = new _smarty_text($this, htmlspecialchars($this->yystack[$this->yyidx + 0]->minor, ENT_QUOTES));
+ } elseif ($this->php_handling == Smarty::PHP_ALLOW) {
+ $this->_retvalue = new _smarty_tag($this, $this->compiler->processNocacheCode('?>', true));
+ } elseif ($this->php_handling == Smarty::PHP_REMOVE) {
+ $this->_retvalue = null;
+ }
+ }
+ }
+ #line 2248 "smarty_internal_templateparser.php"
+ #line 204 "smarty_internal_templateparser.y"
+ function yy_r10()
+ {
+ if ($this->php_handling == Smarty::PHP_PASSTHRU) {
+ $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor);
+ } elseif ($this->php_handling == Smarty::PHP_QUOTE) {
+ $this->_retvalue = new _smarty_text($this, htmlspecialchars($this->yystack[$this->yyidx + 0]->minor, ENT_QUOTES));
+ } elseif ($this->php_handling == Smarty::PHP_ALLOW) {
+ if ($this->asp_tags) {
+ if (!($this->smarty instanceof SmartyBC)) {
+ $this->compiler->trigger_template_error(self::Err3);
+ }
+ $this->_retvalue = new _smarty_tag($this, $this->compiler->processNocacheCode('<%', true));
+ } else {
+ $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor);
+ }
+ } elseif ($this->php_handling == Smarty::PHP_REMOVE) {
+ if ($this->asp_tags) {
+ $this->_retvalue = null;
+ } else {
+ $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor);
+ }
+ }
+ }
+ #line 2272 "smarty_internal_templateparser.php"
+ #line 228 "smarty_internal_templateparser.y"
+ function yy_r11()
+ {
+ if ($this->php_handling == Smarty::PHP_PASSTHRU) {
+ $this->_retvalue = new _smarty_text($this, st);
+ } elseif ($this->php_handling == Smarty::PHP_QUOTE) {
+ $this->_retvalue = new _smarty_text($this, htmlspecialchars('%>', ENT_QUOTES));
+ } elseif ($this->php_handling == Smarty::PHP_ALLOW) {
+ if ($this->asp_tags) {
+ $this->_retvalue = new _smarty_tag($this, $this->compiler->processNocacheCode('%>', true));
+ } else {
+ $this->_retvalue = new _smarty_text($this, st);
+ }
+ } elseif ($this->php_handling == Smarty::PHP_REMOVE) {
+ if ($this->asp_tags) {
+ $this->_retvalue = null;
+ } else {
+ $this->_retvalue = new _smarty_text($this, st);
+ }
+ }
+ }
+ #line 2293 "smarty_internal_templateparser.php"
+ #line 250 "smarty_internal_templateparser.y"
+ function yy_r12()
+ {
$this->compiler->tag_nocache = true;
- $this->is_xml = false;
+ $this->is_xml = true;
$save = $this->template->has_nocache_code;
- $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode("<?php echo '?>';?>\n", $this->compiler, true));
+ $this->_retvalue = new _smarty_tag($this, $this->compiler->processNocacheCode("<?php echo '<?xml';?>", $this->compiler, true));
$this->template->has_nocache_code = $save;
- } elseif ($this->php_handling == Smarty::PHP_PASSTHRU) {
- $this->_retvalue = new _smarty_text($this, '?<?php ?>>');
- } elseif ($this->php_handling == Smarty::PHP_QUOTE) {
- $this->_retvalue = new _smarty_text($this, htmlspecialchars('?>', ENT_QUOTES));
- } elseif ($this->php_handling == Smarty::PHP_ALLOW) {
- $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('?>', true));
- } elseif ($this->php_handling == Smarty::PHP_REMOVE) {
- $this->_retvalue = new _smarty_text($this, '');
- }
- }
-#line 2227 "smarty_internal_templateparser.php"
-#line 176 "smarty_internal_templateparser.y"
- function yy_r9(){
- if ($this->php_handling == Smarty::PHP_PASSTHRU) {
- $this->_retvalue = new _smarty_text($this, '<<?php ?>%');
- } elseif ($this->php_handling == Smarty::PHP_QUOTE) {
- $this->_retvalue = new _smarty_text($this, htmlspecialchars($this->yystack[$this->yyidx + 0]->minor, ENT_QUOTES));
- } elseif ($this->php_handling == Smarty::PHP_ALLOW) {
- if ($this->asp_tags) {
- if (!($this->smarty instanceof SmartyBC)) {
- $this->compiler->trigger_template_error (self::Err3);
- }
- $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('<%', true));
+ }
+ #line 2302 "smarty_internal_templateparser.php"
+ #line 259 "smarty_internal_templateparser.y"
+ function yy_r13()
+ {
+ if ($this->strip) {
+ $this->_retvalue = new _smarty_text($this, preg_replace('![\t ]*[\r\n]+[\t ]*!', '', $this->yystack[$this->yyidx + 0]->minor));
} else {
- $this->_retvalue = new _smarty_text($this, '<<?php ?>%');
+ $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor);
}
- } elseif ($this->php_handling == Smarty::PHP_REMOVE) {
- if ($this->asp_tags) {
- $this->_retvalue = new _smarty_text($this, '');
+ }
+ #line 2311 "smarty_internal_templateparser.php"
+ #line 268 "smarty_internal_templateparser.y"
+ function yy_r14()
+ {
+ $this->strip = true;
+ }
+ #line 2316 "smarty_internal_templateparser.php"
+ #line 272 "smarty_internal_templateparser.y"
+ function yy_r15()
+ {
+ $this->strip = false;
+ }
+ #line 2321 "smarty_internal_templateparser.php"
+ #line 276 "smarty_internal_templateparser.y"
+ function yy_r16()
+ {
+ if ($this->strip) {
+ SMARTY_INTERNAL_COMPILE_BLOCK::blockSource($this->compiler, preg_replace('![\t ]*[\r\n]+[\t ]*!', '', $this->yystack[$this->yyidx + 0]->minor));
} else {
- $this->_retvalue = new _smarty_text($this, '<<?php ?>%');
+ SMARTY_INTERNAL_COMPILE_BLOCK::blockSource($this->compiler, $this->yystack[$this->yyidx + 0]->minor);
}
}
+ #line 2330 "smarty_internal_templateparser.php"
+ #line 285 "smarty_internal_templateparser.y"
+ function yy_r17()
+ {
+ $this->_retvalue = '';
}
-#line 2251 "smarty_internal_templateparser.php"
-#line 200 "smarty_internal_templateparser.y"
- function yy_r10(){
- if ($this->php_handling == Smarty::PHP_PASSTHRU) {
- $this->_retvalue = new _smarty_text($this, '%<?php ?>>');
- } elseif ($this->php_handling == Smarty::PHP_QUOTE) {
- $this->_retvalue = new _smarty_text($this, htmlspecialchars('%>', ENT_QUOTES));
- } elseif ($this->php_handling == Smarty::PHP_ALLOW) {
- if ($this->asp_tags) {
- $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('%>', true));
+ #line 2335 "smarty_internal_templateparser.php"
+ #line 289 "smarty_internal_templateparser.y"
+ function yy_r18()
+ {
+ $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor;
+ }
+ #line 2340 "smarty_internal_templateparser.php"
+ #line 293 "smarty_internal_templateparser.y"
+ function yy_r19()
+ {
+ $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor . $this->yystack[$this->yyidx + 0]->minor;
+ }
+ #line 2345 "smarty_internal_templateparser.php"
+ #line 301 "smarty_internal_templateparser.y"
+ function yy_r21()
+ {
+ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
+ }
+ #line 2350 "smarty_internal_templateparser.php"
+ #line 314 "smarty_internal_templateparser.y"
+ function yy_r23()
+ {
+ $this->_retvalue = $this->compiler->compileTag('private_print_expression', array(), array('value' => $this->yystack[$this->yyidx + 0]->minor));
+ }
+ #line 2355 "smarty_internal_templateparser.php"
+ #line 318 "smarty_internal_templateparser.y"
+ function yy_r24()
+ {
+ $this->_retvalue = $this->compiler->compileTag('private_print_expression', $this->yystack[$this->yyidx + 0]->minor, array('value' => $this->yystack[$this->yyidx + - 2]->minor, 'modifierlist' => $this->yystack[$this->yyidx + - 1]->minor));
+ }
+ #line 2360 "smarty_internal_templateparser.php"
+ #line 322 "smarty_internal_templateparser.y"
+ function yy_r25()
+ {
+ $this->_retvalue = $this->compiler->compileTag('private_print_expression', $this->yystack[$this->yyidx + 0]->minor, array('value' => $this->yystack[$this->yyidx + - 1]->minor));
+ }
+ #line 2365 "smarty_internal_templateparser.php"
+ #line 326 "smarty_internal_templateparser.y"
+ function yy_r26()
+ {
+ $this->_retvalue = $this->compiler->compileTag('private_print_expression', $this->yystack[$this->yyidx + 0]->minor, array('value' => $this->yystack[$this->yyidx + - 2]->minor, 'modifierlist' => $this->yystack[$this->yyidx + - 1]->minor));
+ }
+ #line 2370 "smarty_internal_templateparser.php"
+ #line 339 "smarty_internal_templateparser.y"
+ function yy_r28()
+ {
+ $this->_retvalue = $this->compiler->compileTag('assign', array(array('value' => $this->yystack[$this->yyidx + 0]->minor), array('var' => "'" . $this->yystack[$this->yyidx + - 2]->minor . "'")));
+ }
+ #line 2375 "smarty_internal_templateparser.php"
+ #line 347 "smarty_internal_templateparser.y"
+ function yy_r30()
+ {
+ $this->_retvalue = $this->compiler->compileTag('assign', array_merge(array(array('value' => $this->yystack[$this->yyidx + - 1]->minor), array('var' => "'" . $this->yystack[$this->yyidx + - 3]->minor . "'")), $this->yystack[$this->yyidx + 0]->minor));
+ }
+ #line 2380 "smarty_internal_templateparser.php"
+ #line 351 "smarty_internal_templateparser.y"
+ function yy_r31()
+ {
+ $this->_retvalue = $this->compiler->compileTag('assign', array_merge(array(array('value' => $this->yystack[$this->yyidx + - 1]->minor), array('var' => $this->yystack[$this->yyidx + - 3]->minor['var'])), $this->yystack[$this->yyidx + 0]->minor), array('smarty_internal_index' => $this->yystack[$this->yyidx + - 3]->minor['smarty_internal_index']));
+ }
+ #line 2385 "smarty_internal_templateparser.php"
+ #line 356 "smarty_internal_templateparser.y"
+ function yy_r32()
+ {
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + - 1]->minor, $this->yystack[$this->yyidx + 0]->minor);
+ }
+ #line 2390 "smarty_internal_templateparser.php"
+ #line 360 "smarty_internal_templateparser.y"
+ function yy_r33()
+ {
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + 0]->minor, array());
+ }
+ #line 2395 "smarty_internal_templateparser.php"
+ #line 365 "smarty_internal_templateparser.y"
+ function yy_r34()
+ {
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + - 3]->minor, $this->yystack[$this->yyidx + 0]->minor, array('object_method' => $this->yystack[$this->yyidx + - 1]->minor));
+ }
+ #line 2400 "smarty_internal_templateparser.php"
+ #line 370 "smarty_internal_templateparser.y"
+ function yy_r35()
+ {
+ $this->_retvalue = '<?php ob_start();?>' . $this->compiler->compileTag($this->yystack[$this->yyidx + - 2]->minor, $this->yystack[$this->yyidx + 0]->minor) . '<?php echo ';
+ $this->_retvalue .= $this->compiler->compileTag('private_modifier', array(), array('modifierlist' => $this->yystack[$this->yyidx + - 1]->minor, 'value' => 'ob_get_clean()')) . '?>';
+ }
+ #line 2406 "smarty_internal_templateparser.php"
+ #line 376 "smarty_internal_templateparser.y"
+ function yy_r36()
+ {
+ $this->_retvalue = '<?php ob_start();?>' . $this->compiler->compileTag($this->yystack[$this->yyidx + - 4]->minor, $this->yystack[$this->yyidx + 0]->minor, array('object_method' => $this->yystack[$this->yyidx + - 2]->minor)) . '<?php echo ';
+ $this->_retvalue .= $this->compiler->compileTag('private_modifier', array(), array('modifierlist' => $this->yystack[$this->yyidx + - 1]->minor, 'value' => 'ob_get_clean()')) . '?>';
+ }
+ #line 2412 "smarty_internal_templateparser.php"
+ #line 382 "smarty_internal_templateparser.y"
+ function yy_r37()
+ {
+ $tag = trim(substr($this->yystack[$this->yyidx + - 1]->minor, $this->lex->ldel_length));
+ $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, array(), array('if condition' => $this->yystack[$this->yyidx + 0]->minor));
+ }
+ #line 2418 "smarty_internal_templateparser.php"
+ #line 387 "smarty_internal_templateparser.y"
+ function yy_r38()
+ {
+ $tag = trim(substr($this->yystack[$this->yyidx + - 2]->minor, $this->lex->ldel_length));
+ $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, $this->yystack[$this->yyidx + 0]->minor, array('if condition' => $this->yystack[$this->yyidx + - 1]->minor));
+ }
+ #line 2424 "smarty_internal_templateparser.php"
+ #line 392 "smarty_internal_templateparser.y"
+ function yy_r39()
+ {
+ $tag = trim(substr($this->yystack[$this->yyidx + - 1]->minor, $this->lex->ldel_length));
+ $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, array(), array('if condition' => $this->yystack[$this->yyidx + 0]->minor));
+ }
+ #line 2430 "smarty_internal_templateparser.php"
+ #line 403 "smarty_internal_templateparser.y"
+ function yy_r41()
+ {
+ $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[$this->yyidx + 0]->minor, array(array('start' => $this->yystack[$this->yyidx + - 9]->minor), array('ifexp' => $this->yystack[$this->yyidx + - 6]->minor), array('var' => $this->yystack[$this->yyidx + - 2]->minor), array('step' => $this->yystack[$this->yyidx + - 1]->minor))), 1);
+ }
+ #line 2435 "smarty_internal_templateparser.php"
+ #line 407 "smarty_internal_templateparser.y"
+ function yy_r42()
+ {
+ $this->_retvalue = '=' . $this->yystack[$this->yyidx + 0]->minor;
+ }
+ #line 2440 "smarty_internal_templateparser.php"
+ #line 415 "smarty_internal_templateparser.y"
+ function yy_r44()
+ {
+ $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[$this->yyidx + 0]->minor, array(array('start' => $this->yystack[$this->yyidx + - 3]->minor), array('to' => $this->yystack[$this->yyidx + - 1]->minor))), 0);
+ }
+ #line 2445 "smarty_internal_templateparser.php"
+ #line 419 "smarty_internal_templateparser.y"
+ function yy_r45()
+ {
+ $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[$this->yyidx + 0]->minor, array(array('start' => $this->yystack[$this->yyidx + - 5]->minor), array('to' => $this->yystack[$this->yyidx + - 3]->minor), array('step' => $this->yystack[$this->yyidx + - 1]->minor))), 0);
+ }
+ #line 2450 "smarty_internal_templateparser.php"
+ #line 424 "smarty_internal_templateparser.y"
+ function yy_r46()
+ {
+ $this->_retvalue = $this->compiler->compileTag('foreach', $this->yystack[$this->yyidx + 0]->minor);
+ }
+ #line 2455 "smarty_internal_templateparser.php"
+ #line 429 "smarty_internal_templateparser.y"
+ function yy_r47()
+ {
+ $this->_retvalue = $this->compiler->compileTag('foreach', array_merge($this->yystack[$this->yyidx + 0]->minor, array(array('from' => $this->yystack[$this->yyidx + - 4]->minor), array('item' => $this->yystack[$this->yyidx + - 1]->minor))));
+ }
+ #line 2460 "smarty_internal_templateparser.php"
+ #line 433 "smarty_internal_templateparser.y"
+ function yy_r48()
+ {
+ $this->_retvalue = $this->compiler->compileTag('foreach', array_merge($this->yystack[$this->yyidx + 0]->minor, array(array('from' => $this->yystack[$this->yyidx + - 7]->minor), array('item' => $this->yystack[$this->yyidx + - 1]->minor), array('key' => $this->yystack[$this->yyidx + - 4]->minor))));
+ }
+ #line 2465 "smarty_internal_templateparser.php"
+ #line 446 "smarty_internal_templateparser.y"
+ function yy_r51()
+ {
+ $this->_retvalue = $this->compiler->compileTag('setfilter', array(), array('modifier_list' => array(array_merge(array($this->yystack[$this->yyidx + - 1]->minor), $this->yystack[$this->yyidx + 0]->minor))));
+ }
+ #line 2470 "smarty_internal_templateparser.php"
+ #line 450 "smarty_internal_templateparser.y"
+ function yy_r52()
+ {
+ $this->_retvalue = $this->compiler->compileTag('setfilter', array(), array('modifier_list' => array_merge(array(array_merge(array($this->yystack[$this->yyidx + - 2]->minor), $this->yystack[$this->yyidx + - 1]->minor)), $this->yystack[$this->yyidx + 0]->minor)));
+ }
+ #line 2475 "smarty_internal_templateparser.php"
+ #line 455 "smarty_internal_templateparser.y"
+ function yy_r53()
+ {
+ $j = strrpos($this->yystack[$this->yyidx + 0]->minor, '.');
+ if ($this->yystack[$this->yyidx + 0]->minor[$j + 1] == 'c') {
+ // {$smarty.block.child}
+ $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileChildBlock($this->compiler);
} else {
- $this->_retvalue = new _smarty_text($this, '%<?php ?>>');
+ // {$smarty.block.parent}
+ $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileParentBlock($this->compiler);
}
- } elseif ($this->php_handling == Smarty::PHP_REMOVE) {
- if ($this->asp_tags) {
- $this->_retvalue = new _smarty_text($this, '');
+ }
+ #line 2487 "smarty_internal_templateparser.php"
+ #line 468 "smarty_internal_templateparser.y"
+ function yy_r54()
+ {
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + 0]->minor . 'close', array());
+ }
+ #line 2492 "smarty_internal_templateparser.php"
+ #line 472 "smarty_internal_templateparser.y"
+ function yy_r55()
+ {
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + - 1]->minor . 'close', array(), array('modifier_list' => $this->yystack[$this->yyidx + 0]->minor));
+ }
+ #line 2497 "smarty_internal_templateparser.php"
+ #line 477 "smarty_internal_templateparser.y"
+ function yy_r56()
+ {
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + - 2]->minor . 'close', array(), array('object_method' => $this->yystack[$this->yyidx + 0]->minor));
+ }
+ #line 2502 "smarty_internal_templateparser.php"
+ #line 481 "smarty_internal_templateparser.y"
+ function yy_r57()
+ {
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + - 3]->minor . 'close', array(), array('object_method' => $this->yystack[$this->yyidx + - 1]->minor, 'modifier_list' => $this->yystack[$this->yyidx + 0]->minor));
+ }
+ #line 2507 "smarty_internal_templateparser.php"
+ #line 489 "smarty_internal_templateparser.y"
+ function yy_r58()
+ {
+ $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor;
+ $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor;
+ }
+ #line 2513 "smarty_internal_templateparser.php"
+ #line 495 "smarty_internal_templateparser.y"
+ function yy_r59()
+ {
+ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);
+ }
+ #line 2518 "smarty_internal_templateparser.php"
+ #line 500 "smarty_internal_templateparser.y"
+ function yy_r60()
+ {
+ $this->_retvalue = array();
+ }
+ #line 2523 "smarty_internal_templateparser.php"
+ #line 505 "smarty_internal_templateparser.y"
+ function yy_r61()
+ {
+ if (preg_match('~^true$~i', $this->yystack[$this->yyidx + 0]->minor)) {
+ $this->_retvalue = array($this->yystack[$this->yyidx + - 2]->minor => 'true');
+ } elseif (preg_match('~^false$~i', $this->yystack[$this->yyidx + 0]->minor)) {
+ $this->_retvalue = array($this->yystack[$this->yyidx + - 2]->minor => 'false');
+ } elseif (preg_match('~^null$~i', $this->yystack[$this->yyidx + 0]->minor)) {
+ $this->_retvalue = array($this->yystack[$this->yyidx + - 2]->minor => 'null');
} else {
- $this->_retvalue = new _smarty_text($this, '%<?php ?>>');
+ $this->_retvalue = array($this->yystack[$this->yyidx + - 2]->minor => "'" . $this->yystack[$this->yyidx + 0]->minor . "'");
}
}
+ #line 2536 "smarty_internal_templateparser.php"
+ #line 517 "smarty_internal_templateparser.y"
+ function yy_r62()
+ {
+ $this->_retvalue = array(trim($this->yystack[$this->yyidx + - 1]->minor, " =\n\r\t") => $this->yystack[$this->yyidx + 0]->minor);
}
-#line 2272 "smarty_internal_templateparser.php"
-#line 220 "smarty_internal_templateparser.y"
- function yy_r11(){
- if ($this->strip) {
- $this->_retvalue = new _smarty_text($this, preg_replace('![\t ]*[\r\n]+[\t ]*!', '', self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor)));
- } else {
- $this->_retvalue = new _smarty_text($this, self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor));
- }
- }
-#line 2281 "smarty_internal_templateparser.php"
-#line 229 "smarty_internal_templateparser.y"
- function yy_r12(){
- $this->compiler->tag_nocache = true;
- $this->is_xml = true;
- $save = $this->template->has_nocache_code;
- $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode("<?php echo '<?xml';?>", $this->compiler, true));
- $this->template->has_nocache_code = $save;
- }
-#line 2290 "smarty_internal_templateparser.php"
-#line 238 "smarty_internal_templateparser.y"
- function yy_r13(){
- if ($this->strip) {
- $this->_retvalue = new _smarty_text($this, preg_replace('![\t ]*[\r\n]+[\t ]*!', '', $this->yystack[$this->yyidx + 0]->minor));
- } else {
- $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor);
+ #line 2541 "smarty_internal_templateparser.php"
+ #line 525 "smarty_internal_templateparser.y"
+ function yy_r64()
+ {
+ $this->_retvalue = "'" . $this->yystack[$this->yyidx + 0]->minor . "'";
+ }
+ #line 2546 "smarty_internal_templateparser.php"
+ #line 537 "smarty_internal_templateparser.y"
+ function yy_r67()
+ {
+ $this->_retvalue = array($this->yystack[$this->yyidx + - 2]->minor => $this->yystack[$this->yyidx + 0]->minor);
+ }
+ #line 2551 "smarty_internal_templateparser.php"
+ #line 550 "smarty_internal_templateparser.y"
+ function yy_r69()
+ {
+ $this->yystack[$this->yyidx + - 2]->minor[] = $this->yystack[$this->yyidx + 0]->minor;
+ $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor;
+ }
+ #line 2557 "smarty_internal_templateparser.php"
+ #line 555 "smarty_internal_templateparser.y"
+ function yy_r70()
+ {
+ $this->_retvalue = array('var' => $this->yystack[$this->yyidx + - 2]->minor, 'value' => $this->yystack[$this->yyidx + 0]->minor);
+ }
+ #line 2562 "smarty_internal_templateparser.php"
+ #line 583 "smarty_internal_templateparser.y"
+ function yy_r75()
+ {
+ $this->_retvalue = '$_smarty_tpl->getStreamVariable(\'' . $this->yystack[$this->yyidx + - 2]->minor . '://' . $this->yystack[$this->yyidx + 0]->minor . '\')';
+ }
+ #line 2567 "smarty_internal_templateparser.php"
+ #line 588 "smarty_internal_templateparser.y"
+ function yy_r76()
+ {
+ $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor . trim($this->yystack[$this->yyidx + - 1]->minor) . $this->yystack[$this->yyidx + 0]->minor;
+ }
+ #line 2572 "smarty_internal_templateparser.php"
+ #line 607 "smarty_internal_templateparser.y"
+ function yy_r80()
+ {
+ $this->_retvalue = $this->compiler->compileTag('private_modifier', array(), array('value' => $this->yystack[$this->yyidx + - 1]->minor, 'modifierlist' => $this->yystack[$this->yyidx + 0]->minor));
+ }
+ #line 2577 "smarty_internal_templateparser.php"
+ #line 613 "smarty_internal_templateparser.y"
+ function yy_r81()
+ {
+ $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor . $this->yystack[$this->yyidx + - 1]->minor . $this->yystack[$this->yyidx + 0]->minor;
+ }
+ #line 2582 "smarty_internal_templateparser.php"
+ #line 617 "smarty_internal_templateparser.y"
+ function yy_r82()
+ {
+ $this->_retvalue = 'in_array(' . $this->yystack[$this->yyidx + - 2]->minor . ',' . $this->yystack[$this->yyidx + 0]->minor . ')';
+ }
+ #line 2587 "smarty_internal_templateparser.php"
+ #line 621 "smarty_internal_templateparser.y"
+ function yy_r83()
+ {
+ $this->_retvalue = 'in_array(' . $this->yystack[$this->yyidx + - 2]->minor . ',(array)' . $this->yystack[$this->yyidx + 0]->minor . ')';
+ }
+ #line 2592 "smarty_internal_templateparser.php"
+ #line 629 "smarty_internal_templateparser.y"
+ function yy_r85()
+ {
+ $this->_retvalue = '!(' . $this->yystack[$this->yyidx + - 2]->minor . ' % ' . $this->yystack[$this->yyidx + 0]->minor . ')';
+ }
+ #line 2597 "smarty_internal_templateparser.php"
+ #line 633 "smarty_internal_templateparser.y"
+ function yy_r86()
+ {
+ $this->_retvalue = '(' . $this->yystack[$this->yyidx + - 2]->minor . ' % ' . $this->yystack[$this->yyidx + 0]->minor . ')';
+ }
+ #line 2602 "smarty_internal_templateparser.php"
+ #line 637 "smarty_internal_templateparser.y"
+ function yy_r87()
+ {
+ $this->_retvalue = '!(1 & ' . $this->yystack[$this->yyidx + - 1]->minor . ')';
+ }
+ #line 2607 "smarty_internal_templateparser.php"
+ #line 641 "smarty_internal_templateparser.y"
+ function yy_r88()
+ {
+ $this->_retvalue = '(1 & ' . $this->yystack[$this->yyidx + - 1]->minor . ')';
+ }
+ #line 2612 "smarty_internal_templateparser.php"
+ #line 645 "smarty_internal_templateparser.y"
+ function yy_r89()
+ {
+ $this->_retvalue = '!(1 & ' . $this->yystack[$this->yyidx + - 2]->minor . ' / ' . $this->yystack[$this->yyidx + 0]->minor . ')';
+ }
+ #line 2617 "smarty_internal_templateparser.php"
+ #line 649 "smarty_internal_templateparser.y"
+ function yy_r90()
+ {
+ $this->_retvalue = '(1 & ' . $this->yystack[$this->yyidx + - 2]->minor . ' / ' . $this->yystack[$this->yyidx + 0]->minor . ')';
+ }
+ #line 2622 "smarty_internal_templateparser.php"
+ #line 673 "smarty_internal_templateparser.y"
+ function yy_r96()
+ {
+ self::$prefix_number ++;
+ $this->compiler->prefix_code[] = '<?php $_tmp' . self::$prefix_number . '=' . $this->yystack[$this->yyidx + 0]->minor . ';?>';
+ $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor . $this->yystack[$this->yyidx + - 1]->minor . '$_tmp' . self::$prefix_number;
+ }
+ #line 2629 "smarty_internal_templateparser.php"
+ #line 682 "smarty_internal_templateparser.y"
+ function yy_r97()
+ {
+ $this->_retvalue = $this->yystack[$this->yyidx + - 6]->minor . ' ? ' . $this->compileVariable("'" . $this->yystack[$this->yyidx + - 2]->minor . "'") . ' : ' . $this->yystack[$this->yyidx + 0]->minor;
+ }
+ #line 2634 "smarty_internal_templateparser.php"
+ #line 686 "smarty_internal_templateparser.y"
+ function yy_r98()
+ {
+ $this->_retvalue = $this->yystack[$this->yyidx + - 5]->minor . ' ? ' . $this->yystack[$this->yyidx + - 2]->minor . ' : ' . $this->yystack[$this->yyidx + 0]->minor;
+ }
+ #line 2639 "smarty_internal_templateparser.php"
+ #line 701 "smarty_internal_templateparser.y"
+ function yy_r101()
+ {
+ $this->_retvalue = '!' . $this->yystack[$this->yyidx + 0]->minor;
+ }
+ #line 2644 "smarty_internal_templateparser.php"
+ #line 722 "smarty_internal_templateparser.y"
+ function yy_r106()
+ {
+ $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor . '.' . $this->yystack[$this->yyidx + 0]->minor;
}
+ #line 2649 "smarty_internal_templateparser.php"
+ #line 726 "smarty_internal_templateparser.y"
+ function yy_r107()
+ {
+ $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor . '.';
+ }
+ #line 2654 "smarty_internal_templateparser.php"
+ #line 730 "smarty_internal_templateparser.y"
+ function yy_r108()
+ {
+ $this->_retvalue = '.' . $this->yystack[$this->yyidx + 0]->minor;
}
-#line 2299 "smarty_internal_templateparser.php"
-#line 247 "smarty_internal_templateparser.y"
- function yy_r14(){
- $this->strip = true;
- $this->_retvalue = new _smarty_text($this, '');
- }
-#line 2305 "smarty_internal_templateparser.php"
-#line 252 "smarty_internal_templateparser.y"
- function yy_r15(){
- $this->strip = false;
- $this->_retvalue = new _smarty_text($this, '');
- }
-#line 2311 "smarty_internal_templateparser.php"
-#line 258 "smarty_internal_templateparser.y"
- function yy_r16(){
- $this->_retvalue = '';
- }
-#line 2316 "smarty_internal_templateparser.php"
-#line 262 "smarty_internal_templateparser.y"
- function yy_r17(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
- }
-#line 2321 "smarty_internal_templateparser.php"
-#line 266 "smarty_internal_templateparser.y"
- function yy_r18(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2326 "smarty_internal_templateparser.php"
-#line 274 "smarty_internal_templateparser.y"
- function yy_r20(){
- $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2331 "smarty_internal_templateparser.php"
-#line 282 "smarty_internal_templateparser.y"
- function yy_r22(){
- $this->_retvalue = self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor);
- }
-#line 2336 "smarty_internal_templateparser.php"
-#line 290 "smarty_internal_templateparser.y"
- function yy_r24(){
- $this->_retvalue = self::escape_end_tag($this->yystack[$this->yyidx + 0]->minor);
- }
-#line 2341 "smarty_internal_templateparser.php"
-#line 294 "smarty_internal_templateparser.y"
- function yy_r25(){
- $this->_retvalue = '<<?php ?>%';
- }
-#line 2346 "smarty_internal_templateparser.php"
-#line 298 "smarty_internal_templateparser.y"
- function yy_r26(){
- $this->_retvalue = '%<?php ?>>';
- }
-#line 2351 "smarty_internal_templateparser.php"
-#line 307 "smarty_internal_templateparser.y"
- function yy_r27(){
- $this->_retvalue = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$this->yystack[$this->yyidx + -1]->minor));
- }
-#line 2356 "smarty_internal_templateparser.php"
-#line 311 "smarty_internal_templateparser.y"
- function yy_r28(){
- $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + -1]->minor,array('value'=>$this->yystack[$this->yyidx + -3]->minor, 'modifierlist'=>$this->yystack[$this->yyidx + -2]->minor));
- }
-#line 2361 "smarty_internal_templateparser.php"
-#line 315 "smarty_internal_templateparser.y"
- function yy_r29(){
- $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + -1]->minor,array('value'=>$this->yystack[$this->yyidx + -2]->minor));
- }
-#line 2366 "smarty_internal_templateparser.php"
-#line 319 "smarty_internal_templateparser.y"
- function yy_r30(){
- $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + -1]->minor,array('value'=>$this->yystack[$this->yyidx + -3]->minor,'modifierlist'=>$this->yystack[$this->yyidx + -2]->minor));
- }
-#line 2371 "smarty_internal_templateparser.php"
-#line 332 "smarty_internal_templateparser.y"
- function yy_r32(){
- $this->_retvalue = $this->compiler->compileTag('assign',array(array('value'=>$this->yystack[$this->yyidx + -1]->minor),array('var'=>"'".$this->yystack[$this->yyidx + -3]->minor."'")));
- }
-#line 2376 "smarty_internal_templateparser.php"
-#line 340 "smarty_internal_templateparser.y"
- function yy_r34(){
- $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + -2]->minor),array('var'=>"'".$this->yystack[$this->yyidx + -4]->minor."'")),$this->yystack[$this->yyidx + -1]->minor));
- }
-#line 2381 "smarty_internal_templateparser.php"
-#line 344 "smarty_internal_templateparser.y"
- function yy_r35(){
- $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + -2]->minor),array('var'=>$this->yystack[$this->yyidx + -4]->minor['var'])),$this->yystack[$this->yyidx + -1]->minor),array('smarty_internal_index'=>$this->yystack[$this->yyidx + -4]->minor['smarty_internal_index']));
- }
-#line 2386 "smarty_internal_templateparser.php"
-#line 349 "smarty_internal_templateparser.y"
- function yy_r36(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor,$this->yystack[$this->yyidx + -1]->minor);
- }
-#line 2391 "smarty_internal_templateparser.php"
-#line 353 "smarty_internal_templateparser.y"
- function yy_r37(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor,array());
- }
-#line 2396 "smarty_internal_templateparser.php"
-#line 358 "smarty_internal_templateparser.y"
- function yy_r38(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor,$this->yystack[$this->yyidx + -1]->minor,array('object_methode'=>$this->yystack[$this->yyidx + -2]->minor));
- }
-#line 2401 "smarty_internal_templateparser.php"
-#line 363 "smarty_internal_templateparser.y"
- function yy_r39(){
- $this->_retvalue = '<?php ob_start();?>'.$this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor,$this->yystack[$this->yyidx + -1]->minor).'<?php echo ';
- $this->_retvalue .= $this->compiler->compileTag('private_modifier',array(),array('modifierlist'=>$this->yystack[$this->yyidx + -2]->minor,'value'=>'ob_get_clean()')).'?>';
- }
-#line 2407 "smarty_internal_templateparser.php"
-#line 369 "smarty_internal_templateparser.y"
- function yy_r40(){
- $this->_retvalue = '<?php ob_start();?>'.$this->compiler->compileTag($this->yystack[$this->yyidx + -5]->minor,$this->yystack[$this->yyidx + -1]->minor,array('object_methode'=>$this->yystack[$this->yyidx + -3]->minor)).'<?php echo ';
- $this->_retvalue .= $this->compiler->compileTag('private_modifier',array(),array('modifierlist'=>$this->yystack[$this->yyidx + -2]->minor,'value'=>'ob_get_clean()')).'?>';
- }
-#line 2413 "smarty_internal_templateparser.php"
-#line 375 "smarty_internal_templateparser.y"
- function yy_r41(){
- $tag = trim(substr($this->yystack[$this->yyidx + -2]->minor,$this->lex->ldel_length));
- $this->_retvalue = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + -1]->minor));
- }
-#line 2419 "smarty_internal_templateparser.php"
-#line 380 "smarty_internal_templateparser.y"
- function yy_r42(){
- $tag = trim(substr($this->yystack[$this->yyidx + -3]->minor,$this->lex->ldel_length));
- $this->_retvalue = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,$this->yystack[$this->yyidx + -1]->minor,array('if condition'=>$this->yystack[$this->yyidx + -2]->minor));
- }
-#line 2425 "smarty_internal_templateparser.php"
-#line 385 "smarty_internal_templateparser.y"
- function yy_r43(){
- $tag = trim(substr($this->yystack[$this->yyidx + -2]->minor,$this->lex->ldel_length));
- $this->_retvalue = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + -1]->minor));
- }
-#line 2431 "smarty_internal_templateparser.php"
-#line 396 "smarty_internal_templateparser.y"
- function yy_r45(){
- $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('start'=>$this->yystack[$this->yyidx + -10]->minor),array('ifexp'=>$this->yystack[$this->yyidx + -7]->minor),array('var'=>$this->yystack[$this->yyidx + -3]->minor),array('step'=>$this->yystack[$this->yyidx + -2]->minor))),1);
- }
-#line 2436 "smarty_internal_templateparser.php"
-#line 400 "smarty_internal_templateparser.y"
- function yy_r46(){
- $this->_retvalue = '='.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2441 "smarty_internal_templateparser.php"
-#line 408 "smarty_internal_templateparser.y"
- function yy_r48(){
- $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('start'=>$this->yystack[$this->yyidx + -4]->minor),array('to'=>$this->yystack[$this->yyidx + -2]->minor))),0);
- }
-#line 2446 "smarty_internal_templateparser.php"
-#line 412 "smarty_internal_templateparser.y"
- function yy_r49(){
- $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('start'=>$this->yystack[$this->yyidx + -6]->minor),array('to'=>$this->yystack[$this->yyidx + -4]->minor),array('step'=>$this->yystack[$this->yyidx + -2]->minor))),0);
- }
-#line 2451 "smarty_internal_templateparser.php"
-#line 417 "smarty_internal_templateparser.y"
- function yy_r50(){
- $this->_retvalue = $this->compiler->compileTag('foreach',$this->yystack[$this->yyidx + -1]->minor);
- }
-#line 2456 "smarty_internal_templateparser.php"
-#line 422 "smarty_internal_templateparser.y"
- function yy_r51(){
- $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('from'=>$this->yystack[$this->yyidx + -5]->minor),array('item'=>$this->yystack[$this->yyidx + -2]->minor))));
- }
-#line 2461 "smarty_internal_templateparser.php"
-#line 426 "smarty_internal_templateparser.y"
- function yy_r52(){
- $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('from'=>$this->yystack[$this->yyidx + -8]->minor),array('item'=>$this->yystack[$this->yyidx + -2]->minor),array('key'=>$this->yystack[$this->yyidx + -5]->minor))));
- }
-#line 2466 "smarty_internal_templateparser.php"
-#line 430 "smarty_internal_templateparser.y"
- function yy_r53(){
- $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('from'=>$this->yystack[$this->yyidx + -5]->minor),array('item'=>$this->yystack[$this->yyidx + -2]->minor))));
- }
-#line 2471 "smarty_internal_templateparser.php"
-#line 434 "smarty_internal_templateparser.y"
- function yy_r54(){
- $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('from'=>$this->yystack[$this->yyidx + -8]->minor),array('item'=>$this->yystack[$this->yyidx + -2]->minor),array('key'=>$this->yystack[$this->yyidx + -5]->minor))));
- }
-#line 2476 "smarty_internal_templateparser.php"
-#line 439 "smarty_internal_templateparser.y"
- function yy_r55(){
- $this->_retvalue = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array(array_merge(array($this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor))));
- }
-#line 2481 "smarty_internal_templateparser.php"
-#line 443 "smarty_internal_templateparser.y"
- function yy_r56(){
- $this->_retvalue = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array_merge(array(array_merge(array($this->yystack[$this->yyidx + -3]->minor),$this->yystack[$this->yyidx + -2]->minor)),$this->yystack[$this->yyidx + -1]->minor)));
- }
-#line 2486 "smarty_internal_templateparser.php"
-#line 448 "smarty_internal_templateparser.y"
- function yy_r57(){
- $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileChildBlock($this->compiler);
- }
-#line 2491 "smarty_internal_templateparser.php"
-#line 454 "smarty_internal_templateparser.y"
- function yy_r58(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor.'close',array());
- }
-#line 2496 "smarty_internal_templateparser.php"
-#line 458 "smarty_internal_templateparser.y"
- function yy_r59(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor.'close',array(),array('modifier_list'=>$this->yystack[$this->yyidx + -1]->minor));
- }
-#line 2501 "smarty_internal_templateparser.php"
-#line 463 "smarty_internal_templateparser.y"
- function yy_r60(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor.'close',array(),array('object_methode'=>$this->yystack[$this->yyidx + -1]->minor));
- }
-#line 2506 "smarty_internal_templateparser.php"
-#line 467 "smarty_internal_templateparser.y"
- function yy_r61(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor.'close',array(),array('object_methode'=>$this->yystack[$this->yyidx + -2]->minor, 'modifier_list'=>$this->yystack[$this->yyidx + -1]->minor));
- }
-#line 2511 "smarty_internal_templateparser.php"
-#line 475 "smarty_internal_templateparser.y"
- function yy_r62(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
- $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2517 "smarty_internal_templateparser.php"
-#line 481 "smarty_internal_templateparser.y"
- function yy_r63(){
- $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);
- }
-#line 2522 "smarty_internal_templateparser.php"
-#line 486 "smarty_internal_templateparser.y"
- function yy_r64(){
- $this->_retvalue = array();
- }
-#line 2527 "smarty_internal_templateparser.php"
-#line 491 "smarty_internal_templateparser.y"
- function yy_r65(){
- if (preg_match('~^true$~i', $this->yystack[$this->yyidx + 0]->minor)) {
- $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'true');
- } elseif (preg_match('~^false$~i', $this->yystack[$this->yyidx + 0]->minor)) {
- $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'false');
- } elseif (preg_match('~^null$~i', $this->yystack[$this->yyidx + 0]->minor)) {
- $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'null');
- } else {
- $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>"'".$this->yystack[$this->yyidx + 0]->minor."'");
- }
- }
-#line 2540 "smarty_internal_templateparser.php"
-#line 503 "smarty_internal_templateparser.y"
- function yy_r66(){
- $this->_retvalue = array(trim($this->yystack[$this->yyidx + -1]->minor," =\n\r\t")=>$this->yystack[$this->yyidx + 0]->minor);
- }
-#line 2545 "smarty_internal_templateparser.php"
-#line 511 "smarty_internal_templateparser.y"
- function yy_r68(){
- $this->_retvalue = "'".$this->yystack[$this->yyidx + 0]->minor."'";
- }
-#line 2550 "smarty_internal_templateparser.php"
-#line 523 "smarty_internal_templateparser.y"
- function yy_r71(){
- $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor);
- }
-#line 2555 "smarty_internal_templateparser.php"
-#line 536 "smarty_internal_templateparser.y"
- function yy_r73(){
- $this->yystack[$this->yyidx + -2]->minor[]=$this->yystack[$this->yyidx + 0]->minor;
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor;
- }
-#line 2561 "smarty_internal_templateparser.php"
-#line 541 "smarty_internal_templateparser.y"
- function yy_r74(){
- $this->_retvalue = array('var' => $this->yystack[$this->yyidx + -2]->minor, 'value'=>$this->yystack[$this->yyidx + 0]->minor);
- }
-#line 2566 "smarty_internal_templateparser.php"
-#line 569 "smarty_internal_templateparser.y"
- function yy_r79(){
- $this->_retvalue = '$_smarty_tpl->getStreamVariable(\''. $this->yystack[$this->yyidx + -2]->minor .'://'. $this->yystack[$this->yyidx + 0]->minor . '\')';
- }
-#line 2571 "smarty_internal_templateparser.php"
-#line 574 "smarty_internal_templateparser.y"
- function yy_r80(){
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . trim($this->yystack[$this->yyidx + -1]->minor) . $this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2576 "smarty_internal_templateparser.php"
-#line 593 "smarty_internal_templateparser.y"
- function yy_r84(){
- $this->_retvalue = $this->compiler->compileTag('private_modifier',array(),array('value'=>$this->yystack[$this->yyidx + -1]->minor,'modifierlist'=>$this->yystack[$this->yyidx + 0]->minor));
- }
-#line 2581 "smarty_internal_templateparser.php"
-#line 599 "smarty_internal_templateparser.y"
- function yy_r85(){
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2586 "smarty_internal_templateparser.php"
-#line 603 "smarty_internal_templateparser.y"
- function yy_r86(){
- $this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor.')';
- }
-#line 2591 "smarty_internal_templateparser.php"
-#line 607 "smarty_internal_templateparser.y"
- function yy_r87(){
- $this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.',(array)'.$this->yystack[$this->yyidx + 0]->minor.')';
- }
-#line 2596 "smarty_internal_templateparser.php"
-#line 615 "smarty_internal_templateparser.y"
- function yy_r89(){
- $this->_retvalue = '!('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')';
- }
-#line 2601 "smarty_internal_templateparser.php"
-#line 619 "smarty_internal_templateparser.y"
- function yy_r90(){
- $this->_retvalue = '('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')';
- }
-#line 2606 "smarty_internal_templateparser.php"
-#line 623 "smarty_internal_templateparser.y"
- function yy_r91(){
- $this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -1]->minor.')';
- }
-#line 2611 "smarty_internal_templateparser.php"
-#line 627 "smarty_internal_templateparser.y"
- function yy_r92(){
- $this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -1]->minor.')';
- }
-#line 2616 "smarty_internal_templateparser.php"
-#line 631 "smarty_internal_templateparser.y"
- function yy_r93(){
- $this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')';
- }
-#line 2621 "smarty_internal_templateparser.php"
-#line 635 "smarty_internal_templateparser.y"
- function yy_r94(){
- $this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')';
- }
-#line 2626 "smarty_internal_templateparser.php"
-#line 659 "smarty_internal_templateparser.y"
- function yy_r100(){
- $this->prefix_number++;
- $this->compiler->prefix_code[] = '<?php $_tmp'.$this->prefix_number.'='.$this->yystack[$this->yyidx + 0]->minor.';?>';
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.'$_tmp'.$this->prefix_number;
- }
-#line 2633 "smarty_internal_templateparser.php"
-#line 668 "smarty_internal_templateparser.y"
- function yy_r101(){
- $this->_retvalue = $this->yystack[$this->yyidx + -6]->minor.' ? '. $this->compileVariable("'".$this->yystack[$this->yyidx + -2]->minor."'") . ' : '.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2638 "smarty_internal_templateparser.php"
-#line 672 "smarty_internal_templateparser.y"
- function yy_r102(){
- $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor.' ? '.$this->yystack[$this->yyidx + -2]->minor.' : '.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2643 "smarty_internal_templateparser.php"
-#line 687 "smarty_internal_templateparser.y"
- function yy_r105(){
- $this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2648 "smarty_internal_templateparser.php"
-#line 708 "smarty_internal_templateparser.y"
- function yy_r110(){
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2653 "smarty_internal_templateparser.php"
-#line 712 "smarty_internal_templateparser.y"
- function yy_r111(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.';
- }
-#line 2658 "smarty_internal_templateparser.php"
-#line 716 "smarty_internal_templateparser.y"
- function yy_r112(){
- $this->_retvalue = '.'.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2663 "smarty_internal_templateparser.php"
-#line 721 "smarty_internal_templateparser.y"
- function yy_r113(){
- if (preg_match('~^true$~i', $this->yystack[$this->yyidx + 0]->minor)) {
- $this->_retvalue = 'true';
- } elseif (preg_match('~^false$~i', $this->yystack[$this->yyidx + 0]->minor)) {
- $this->_retvalue = 'false';
- } elseif (preg_match('~^null$~i', $this->yystack[$this->yyidx + 0]->minor)) {
- $this->_retvalue = 'null';
- } else {
- $this->_retvalue = "'".$this->yystack[$this->yyidx + 0]->minor."'";
- }
- }
-#line 2676 "smarty_internal_templateparser.php"
-#line 739 "smarty_internal_templateparser.y"
- function yy_r115(){
- $this->_retvalue = "(". $this->yystack[$this->yyidx + -1]->minor .")";
- }
-#line 2681 "smarty_internal_templateparser.php"
-#line 754 "smarty_internal_templateparser.y"
- function yy_r118(){
- if (!$this->security || isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor]) || $this->smarty->security_policy->isTrustedStaticClass($this->yystack[$this->yyidx + -2]->minor, $this->compiler)) {
- if (isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor])) {
- $this->_retvalue = $this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor].'::'.$this->yystack[$this->yyidx + 0]->minor;
+ #line 2659 "smarty_internal_templateparser.php"
+ #line 735 "smarty_internal_templateparser.y"
+ function yy_r109()
+ {
+ if (preg_match('~^true$~i', $this->yystack[$this->yyidx + 0]->minor)) {
+ $this->_retvalue = 'true';
+ } elseif (preg_match('~^false$~i', $this->yystack[$this->yyidx + 0]->minor)) {
+ $this->_retvalue = 'false';
+ } elseif (preg_match('~^null$~i', $this->yystack[$this->yyidx + 0]->minor)) {
+ $this->_retvalue = 'null';
} else {
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'::'.$this->yystack[$this->yyidx + 0]->minor;
+ $this->_retvalue = "'" . $this->yystack[$this->yyidx + 0]->minor . "'";
}
- } else {
- $this->compiler->trigger_template_error ("static class '".$this->yystack[$this->yyidx + -2]->minor."' is undefined or not allowed by security setting");
- }
- }
-#line 2694 "smarty_internal_templateparser.php"
-#line 766 "smarty_internal_templateparser.y"
- function yy_r119(){
- if ($this->yystack[$this->yyidx + -2]->minor['var'] == '\'smarty\'') {
- $this->_retvalue = $this->compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index']).'::'.$this->yystack[$this->yyidx + 0]->minor;
- } else {
- $this->_retvalue = $this->compileVariable($this->yystack[$this->yyidx + -2]->minor['var']).$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index'].'::'.$this->yystack[$this->yyidx + 0]->minor;
- }
- }
-#line 2703 "smarty_internal_templateparser.php"
-#line 775 "smarty_internal_templateparser.y"
- function yy_r120(){
- $this->prefix_number++;
- $this->compiler->prefix_code[] = '<?php ob_start();?>'.$this->yystack[$this->yyidx + 0]->minor.'<?php $_tmp'.$this->prefix_number.'=ob_get_clean();?>';
- $this->_retvalue = '$_tmp'.$this->prefix_number;
- }
-#line 2710 "smarty_internal_templateparser.php"
-#line 790 "smarty_internal_templateparser.y"
- function yy_r122(){
- if ($this->yystack[$this->yyidx + 0]->minor['var'] == '\'smarty\'') {
- $smarty_var = $this->compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']);
- $this->_retvalue = $smarty_var;
- } else {
- // used for array reset,next,prev,end,current
- $this->last_variable = $this->yystack[$this->yyidx + 0]->minor['var'];
- $this->last_index = $this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];
- $this->_retvalue = $this->compileVariable($this->yystack[$this->yyidx + 0]->minor['var']).$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];
- }
- }
-#line 2723 "smarty_internal_templateparser.php"
-#line 803 "smarty_internal_templateparser.y"
- function yy_r123(){
- $this->_retvalue = '$_smarty_tpl->tpl_vars['. $this->yystack[$this->yyidx + -2]->minor .']->'.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2728 "smarty_internal_templateparser.php"
-#line 813 "smarty_internal_templateparser.y"
- function yy_r125(){
- $this->_retvalue = '$_smarty_tpl->getConfigVariable(\''. $this->yystack[$this->yyidx + -1]->minor .'\')';
- }
-#line 2733 "smarty_internal_templateparser.php"
-#line 817 "smarty_internal_templateparser.y"
- function yy_r126(){
- $this->_retvalue = '$_smarty_tpl->getConfigVariable('. $this->yystack[$this->yyidx + -1]->minor .')';
- }
-#line 2738 "smarty_internal_templateparser.php"
-#line 821 "smarty_internal_templateparser.y"
- function yy_r127(){
- $this->_retvalue = array('var'=>$this->yystack[$this->yyidx + -1]->minor, 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor);
- }
-#line 2743 "smarty_internal_templateparser.php"
-#line 834 "smarty_internal_templateparser.y"
- function yy_r129(){
- return;
- }
-#line 2748 "smarty_internal_templateparser.php"
-#line 840 "smarty_internal_templateparser.y"
- function yy_r130(){
- $this->_retvalue = '['.$this->compileVariable($this->yystack[$this->yyidx + 0]->minor).']';
- }
-#line 2753 "smarty_internal_templateparser.php"
-#line 844 "smarty_internal_templateparser.y"
- function yy_r131(){
- $this->_retvalue = '['.$this->compileVariable($this->yystack[$this->yyidx + -2]->minor).'->'.$this->yystack[$this->yyidx + 0]->minor.']';
- }
-#line 2758 "smarty_internal_templateparser.php"
-#line 848 "smarty_internal_templateparser.y"
- function yy_r132(){
- $this->_retvalue = "['". $this->yystack[$this->yyidx + 0]->minor ."']";
- }
-#line 2763 "smarty_internal_templateparser.php"
-#line 852 "smarty_internal_templateparser.y"
- function yy_r133(){
- $this->_retvalue = "[". $this->yystack[$this->yyidx + 0]->minor ."]";
- }
-#line 2768 "smarty_internal_templateparser.php"
-#line 856 "smarty_internal_templateparser.y"
- function yy_r134(){
- $this->_retvalue = "[". $this->yystack[$this->yyidx + -1]->minor ."]";
- }
-#line 2773 "smarty_internal_templateparser.php"
-#line 861 "smarty_internal_templateparser.y"
- function yy_r135(){
- $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\'][\'index\']').']';
- }
-#line 2778 "smarty_internal_templateparser.php"
-#line 865 "smarty_internal_templateparser.y"
- function yy_r136(){
- $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.$this->yystack[$this->yyidx + -3]->minor.'\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\']').']';
- }
-#line 2783 "smarty_internal_templateparser.php"
-#line 875 "smarty_internal_templateparser.y"
- function yy_r138(){
- $this->_retvalue = '[]';
- }
-#line 2788 "smarty_internal_templateparser.php"
-#line 888 "smarty_internal_templateparser.y"
- function yy_r140(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2793 "smarty_internal_templateparser.php"
-#line 893 "smarty_internal_templateparser.y"
- function yy_r141(){
- $this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\'';
- }
-#line 2798 "smarty_internal_templateparser.php"
-#line 898 "smarty_internal_templateparser.y"
- function yy_r142(){
- $this->_retvalue = '('.$this->yystack[$this->yyidx + -1]->minor.')';
- }
-#line 2803 "smarty_internal_templateparser.php"
-#line 905 "smarty_internal_templateparser.y"
- function yy_r143(){
- if ($this->yystack[$this->yyidx + -1]->minor['var'] == '\'smarty\'') {
- $this->_retvalue = $this->compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index']).$this->yystack[$this->yyidx + 0]->minor;
- } else {
- $this->_retvalue = $this->compileVariable($this->yystack[$this->yyidx + -1]->minor['var']).$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index'].$this->yystack[$this->yyidx + 0]->minor;
- }
- }
-#line 2812 "smarty_internal_templateparser.php"
-#line 914 "smarty_internal_templateparser.y"
- function yy_r144(){
- $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2817 "smarty_internal_templateparser.php"
-#line 919 "smarty_internal_templateparser.y"
- function yy_r145(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2822 "smarty_internal_templateparser.php"
-#line 924 "smarty_internal_templateparser.y"
- function yy_r146(){
- if ($this->security && substr($this->yystack[$this->yyidx + -1]->minor,0,1) == '_') {
- $this->compiler->trigger_template_error (self::Err1);
- }
- $this->_retvalue = '->'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2830 "smarty_internal_templateparser.php"
-#line 931 "smarty_internal_templateparser.y"
- function yy_r147(){
- if ($this->security) {
- $this->compiler->trigger_template_error (self::Err2);
- }
- $this->_retvalue = '->{'.$this->compileVariable($this->yystack[$this->yyidx + -1]->minor).$this->yystack[$this->yyidx + 0]->minor.'}';
- }
-#line 2838 "smarty_internal_templateparser.php"
-#line 938 "smarty_internal_templateparser.y"
- function yy_r148(){
- if ($this->security) {
- $this->compiler->trigger_template_error (self::Err2);
- }
- $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';
- }
-#line 2846 "smarty_internal_templateparser.php"
-#line 945 "smarty_internal_templateparser.y"
- function yy_r149(){
- if ($this->security) {
- $this->compiler->trigger_template_error (self::Err2);
- }
- $this->_retvalue = '->{\''.$this->yystack[$this->yyidx + -4]->minor.'\'.'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';
- }
-#line 2854 "smarty_internal_templateparser.php"
-#line 953 "smarty_internal_templateparser.y"
- function yy_r150(){
- $this->_retvalue = '->'.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2859 "smarty_internal_templateparser.php"
-#line 961 "smarty_internal_templateparser.y"
- function yy_r151(){
- if (!$this->security || $this->smarty->security_policy->isTrustedPhpFunction($this->yystack[$this->yyidx + -3]->minor, $this->compiler)) {
- if (strcasecmp($this->yystack[$this->yyidx + -3]->minor,'isset') === 0 || strcasecmp($this->yystack[$this->yyidx + -3]->minor,'empty') === 0 || strcasecmp($this->yystack[$this->yyidx + -3]->minor,'array') === 0 || is_callable($this->yystack[$this->yyidx + -3]->minor)) {
- $func_name = strtolower($this->yystack[$this->yyidx + -3]->minor);
- if ($func_name == 'isset') {
- if (count($this->yystack[$this->yyidx + -1]->minor) == 0) {
- $this->compiler->trigger_template_error ('Illegal number of paramer in "isset()"');
- }
- $par = implode(',',$this->yystack[$this->yyidx + -1]->minor);
- if (strncasecmp($par,'$_smarty_tpl->getConfigVariable',strlen('$_smarty_tpl->getConfigVariable')) === 0) {
- $this->prefix_number++;
- $this->compiler->prefix_code[] = '<?php $_tmp'.$this->prefix_number.'='.str_replace(')',', false)',$par).';?>';
- $isset_par = '$_tmp'.$this->prefix_number;
- } else {
- $isset_par=str_replace("')->value","',null,true,false)->value",$par);
- }
- $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(". $isset_par .")";
- } elseif (in_array($func_name,array('empty','reset','current','end','prev','next'))){
- if (count($this->yystack[$this->yyidx + -1]->minor) != 1) {
- $this->compiler->trigger_template_error ('Illegal number of paramer in "empty()"');
- }
- if ($func_name == 'empty') {
- $this->_retvalue = $func_name.'('.str_replace("')->value","',null,true,false)->value",$this->yystack[$this->yyidx + -1]->minor[0]).')';
+ }
+ #line 2672 "smarty_internal_templateparser.php"
+ #line 753 "smarty_internal_templateparser.y"
+ function yy_r111()
+ {
+ $this->_retvalue = "(" . $this->yystack[$this->yyidx + - 1]->minor . ")";
+ }
+ #line 2677 "smarty_internal_templateparser.php"
+ #line 768 "smarty_internal_templateparser.y"
+ function yy_r114()
+ {
+ if (!$this->security || isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + - 2]->minor]) || $this->smarty->security_policy->isTrustedStaticClass($this->yystack[$this->yyidx + - 2]->minor, $this->compiler)) {
+ if (isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + - 2]->minor])) {
+ $this->_retvalue = $this->smarty->registered_classes[$this->yystack[$this->yyidx + - 2]->minor] . '::' . $this->yystack[$this->yyidx + 0]->minor;
+ } else {
+ $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor . '::' . $this->yystack[$this->yyidx + 0]->minor;
+ }
+ } else {
+ $this->compiler->trigger_template_error("static class '" . $this->yystack[$this->yyidx + - 2]->minor . "' is undefined or not allowed by security setting");
+ }
+ }
+ #line 2690 "smarty_internal_templateparser.php"
+ #line 780 "smarty_internal_templateparser.y"
+ function yy_r115()
+ {
+ if ($this->yystack[$this->yyidx + - 2]->minor['var'] == '\'smarty\'') {
+ $this->_retvalue = $this->compiler->compileTag('private_special_variable', array(), $this->yystack[$this->yyidx + - 2]->minor['smarty_internal_index']) . '::' . $this->yystack[$this->yyidx + 0]->minor;
+ } else {
+ $this->_retvalue = $this->compileVariable($this->yystack[$this->yyidx + - 2]->minor['var']) . $this->yystack[$this->yyidx + - 2]->minor['smarty_internal_index'] . '::' . $this->yystack[$this->yyidx + 0]->minor;
+ }
+ }
+ #line 2699 "smarty_internal_templateparser.php"
+ #line 789 "smarty_internal_templateparser.y"
+ function yy_r116()
+ {
+ self::$prefix_number ++;
+ $this->compiler->prefix_code[] = '<?php ob_start();?>' . $this->yystack[$this->yyidx + - 1]->minor . '<?php $_tmp' . self::$prefix_number . '=ob_get_clean();?>';
+ $this->_retvalue = '$_tmp' . self::$prefix_number;
+ }
+ #line 2706 "smarty_internal_templateparser.php"
+ #line 804 "smarty_internal_templateparser.y"
+ function yy_r118()
+ {
+ if ($this->yystack[$this->yyidx + 0]->minor['var'] == '\'smarty\'') {
+ $smarty_var = $this->compiler->compileTag('private_special_variable', array(), $this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']);
+ $this->_retvalue = $smarty_var;
+ } else {
+ // used for array reset,next,prev,end,current
+ $this->last_variable = $this->yystack[$this->yyidx + 0]->minor['var'];
+ $this->last_index = $this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];
+ $this->_retvalue = $this->compileVariable($this->yystack[$this->yyidx + 0]->minor['var']) . $this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];
+ }
+ }
+ #line 2719 "smarty_internal_templateparser.php"
+ #line 817 "smarty_internal_templateparser.y"
+ function yy_r119()
+ {
+ $this->_retvalue = '$_smarty_tpl->tpl_vars[' . $this->yystack[$this->yyidx + - 2]->minor . ']->' . $this->yystack[$this->yyidx + 0]->minor;
+ }
+ #line 2724 "smarty_internal_templateparser.php"
+ #line 827 "smarty_internal_templateparser.y"
+ function yy_r121()
+ {
+ $this->_retvalue = '$_smarty_tpl->getConfigVariable(\'' . $this->yystack[$this->yyidx + - 1]->minor . '\')';
+ }
+ #line 2729 "smarty_internal_templateparser.php"
+ #line 831 "smarty_internal_templateparser.y"
+ function yy_r122()
+ {
+ $this->_retvalue = '(is_array($tmp = $_smarty_tpl->getConfigVariable(\'' . $this->yystack[$this->yyidx + - 2]->minor . '\')) ? $tmp' . $this->yystack[$this->yyidx + 0]->minor . ' :null)';
+ }
+ #line 2734 "smarty_internal_templateparser.php"
+ #line 835 "smarty_internal_templateparser.y"
+ function yy_r123()
+ {
+ $this->_retvalue = '$_smarty_tpl->getConfigVariable(' . $this->yystack[$this->yyidx + - 1]->minor . ')';
+ }
+ #line 2739 "smarty_internal_templateparser.php"
+ #line 839 "smarty_internal_templateparser.y"
+ function yy_r124()
+ {
+ $this->_retvalue = '(is_array($tmp = $_smarty_tpl->getConfigVariable(' . $this->yystack[$this->yyidx + - 2]->minor . ')) ? $tmp' . $this->yystack[$this->yyidx + 0]->minor . ' : null)';
+ }
+ #line 2744 "smarty_internal_templateparser.php"
+ #line 843 "smarty_internal_templateparser.y"
+ function yy_r125()
+ {
+ $this->_retvalue = array('var' => $this->yystack[$this->yyidx + - 1]->minor, 'smarty_internal_index' => $this->yystack[$this->yyidx + 0]->minor);
+ }
+ #line 2749 "smarty_internal_templateparser.php"
+ #line 856 "smarty_internal_templateparser.y"
+ function yy_r127()
+ {
+ return;
+ }
+ #line 2754 "smarty_internal_templateparser.php"
+ #line 862 "smarty_internal_templateparser.y"
+ function yy_r128()
+ {
+ $this->_retvalue = '[' . $this->compileVariable($this->yystack[$this->yyidx + 0]->minor) . ']';
+ }
+ #line 2759 "smarty_internal_templateparser.php"
+ #line 866 "smarty_internal_templateparser.y"
+ function yy_r129()
+ {
+ $this->_retvalue = '[' . $this->compileVariable($this->yystack[$this->yyidx + - 2]->minor) . '->' . $this->yystack[$this->yyidx + 0]->minor . ']';
+ }
+ #line 2764 "smarty_internal_templateparser.php"
+ #line 870 "smarty_internal_templateparser.y"
+ function yy_r130()
+ {
+ $this->_retvalue = "['" . $this->yystack[$this->yyidx + 0]->minor . "']";
+ }
+ #line 2769 "smarty_internal_templateparser.php"
+ #line 874 "smarty_internal_templateparser.y"
+ function yy_r131()
+ {
+ $this->_retvalue = "[" . $this->yystack[$this->yyidx + 0]->minor . "]";
+ }
+ #line 2774 "smarty_internal_templateparser.php"
+ #line 878 "smarty_internal_templateparser.y"
+ function yy_r132()
+ {
+ $this->_retvalue = "[" . $this->yystack[$this->yyidx + - 1]->minor . "]";
+ }
+ #line 2779 "smarty_internal_templateparser.php"
+ #line 883 "smarty_internal_templateparser.y"
+ function yy_r133()
+ {
+ $this->_retvalue = '[' . $this->compiler->compileTag('private_special_variable', array(), '[\'section\'][\'' . $this->yystack[$this->yyidx + - 1]->minor . '\'][\'index\']') . ']';
+ }
+ #line 2784 "smarty_internal_templateparser.php"
+ #line 887 "smarty_internal_templateparser.y"
+ function yy_r134()
+ {
+ $this->_retvalue = '[' . $this->compiler->compileTag('private_special_variable', array(), '[\'section\'][\'' . $this->yystack[$this->yyidx + - 3]->minor . '\'][\'' . $this->yystack[$this->yyidx + - 1]->minor . '\']') . ']';
+ }
+ #line 2789 "smarty_internal_templateparser.php"
+ #line 897 "smarty_internal_templateparser.y"
+ function yy_r136()
+ {
+ $this->_retvalue = '[]';
+ }
+ #line 2794 "smarty_internal_templateparser.php"
+ #line 910 "smarty_internal_templateparser.y"
+ function yy_r138()
+ {
+ $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor . '.' . $this->yystack[$this->yyidx + 0]->minor;
+ }
+ #line 2799 "smarty_internal_templateparser.php"
+ #line 915 "smarty_internal_templateparser.y"
+ function yy_r139()
+ {
+ $this->_retvalue = '\'' . $this->yystack[$this->yyidx + 0]->minor . '\'';
+ }
+ #line 2804 "smarty_internal_templateparser.php"
+ #line 920 "smarty_internal_templateparser.y"
+ function yy_r140()
+ {
+ $this->_retvalue = '(' . $this->yystack[$this->yyidx + - 1]->minor . ')';
+ }
+ #line 2809 "smarty_internal_templateparser.php"
+ #line 927 "smarty_internal_templateparser.y"
+ function yy_r141()
+ {
+ if ($this->yystack[$this->yyidx + - 1]->minor['var'] == '\'smarty\'') {
+ $this->_retvalue = $this->compiler->compileTag('private_special_variable', array(), $this->yystack[$this->yyidx + - 1]->minor['smarty_internal_index']) . $this->yystack[$this->yyidx + 0]->minor;
+ } else {
+ $this->_retvalue = $this->compileVariable($this->yystack[$this->yyidx + - 1]->minor['var']) . $this->yystack[$this->yyidx + - 1]->minor['smarty_internal_index'] . $this->yystack[$this->yyidx + 0]->minor;
+ }
+ }
+ #line 2818 "smarty_internal_templateparser.php"
+ #line 936 "smarty_internal_templateparser.y"
+ function yy_r142()
+ {
+ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
+ }
+ #line 2823 "smarty_internal_templateparser.php"
+ #line 941 "smarty_internal_templateparser.y"
+ function yy_r143()
+ {
+ $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor . $this->yystack[$this->yyidx + 0]->minor;
+ }
+ #line 2828 "smarty_internal_templateparser.php"
+ #line 946 "smarty_internal_templateparser.y"
+ function yy_r144()
+ {
+ if ($this->security && substr($this->yystack[$this->yyidx + - 1]->minor, 0, 1) == '_') {
+ $this->compiler->trigger_template_error(self::Err1);
+ }
+ $this->_retvalue = '->' . $this->yystack[$this->yyidx + - 1]->minor . $this->yystack[$this->yyidx + 0]->minor;
+ }
+ #line 2836 "smarty_internal_templateparser.php"
+ #line 953 "smarty_internal_templateparser.y"
+ function yy_r145()
+ {
+ if ($this->security) {
+ $this->compiler->trigger_template_error(self::Err2);
+ }
+ $this->_retvalue = '->{' . $this->compileVariable($this->yystack[$this->yyidx + - 1]->minor) . $this->yystack[$this->yyidx + 0]->minor . '}';
+ }
+ #line 2844 "smarty_internal_templateparser.php"
+ #line 960 "smarty_internal_templateparser.y"
+ function yy_r146()
+ {
+ if ($this->security) {
+ $this->compiler->trigger_template_error(self::Err2);
+ }
+ $this->_retvalue = '->{' . $this->yystack[$this->yyidx + - 2]->minor . $this->yystack[$this->yyidx + 0]->minor . '}';
+ }
+ #line 2852 "smarty_internal_templateparser.php"
+ #line 967 "smarty_internal_templateparser.y"
+ function yy_r147()
+ {
+ if ($this->security) {
+ $this->compiler->trigger_template_error(self::Err2);
+ }
+ $this->_retvalue = '->{\'' . $this->yystack[$this->yyidx + - 4]->minor . '\'.' . $this->yystack[$this->yyidx + - 2]->minor . $this->yystack[$this->yyidx + 0]->minor . '}';
+ }
+ #line 2860 "smarty_internal_templateparser.php"
+ #line 975 "smarty_internal_templateparser.y"
+ function yy_r148()
+ {
+ $this->_retvalue = '->' . $this->yystack[$this->yyidx + 0]->minor;
+ }
+ #line 2865 "smarty_internal_templateparser.php"
+ #line 983 "smarty_internal_templateparser.y"
+ function yy_r149()
+ {
+ if (!$this->security || $this->smarty->security_policy->isTrustedPhpFunction($this->yystack[$this->yyidx + - 3]->minor, $this->compiler)) {
+ if (strcasecmp($this->yystack[$this->yyidx + - 3]->minor, 'isset') === 0 || strcasecmp($this->yystack[$this->yyidx + - 3]->minor, 'empty') === 0 || strcasecmp($this->yystack[$this->yyidx + - 3]->minor, 'array') === 0 || is_callable($this->yystack[$this->yyidx + - 3]->minor)) {
+ $func_name = strtolower($this->yystack[$this->yyidx + - 3]->minor);
+ if ($func_name == 'isset') {
+ if (count($this->yystack[$this->yyidx + - 1]->minor) == 0) {
+ $this->compiler->trigger_template_error('Illegal number of paramer in "isset()"');
+ }
+ $par = implode(',', $this->yystack[$this->yyidx + - 1]->minor);
+ if (strncasecmp($par, '$_smarty_tpl->getConfigVariable', strlen('$_smarty_tpl->getConfigVariable')) === 0) {
+ self::$prefix_number ++;
+ $this->compiler->prefix_code[] = '<?php $_tmp' . self::$prefix_number . '=' . str_replace(')', ', false)', $par) . ';?>';
+ $isset_par = '$_tmp' . self::$prefix_number;
+ } else {
+ $isset_par = str_replace("')->value", "',null,true,false)->value", $par);
+ }
+ $this->_retvalue = $this->yystack[$this->yyidx + - 3]->minor . "(" . $isset_par . ")";
+ } elseif (in_array($func_name, array('empty', 'reset', 'current', 'end', 'prev', 'next'))) {
+ if (count($this->yystack[$this->yyidx + - 1]->minor) != 1) {
+ $this->compiler->trigger_template_error('Illegal number of paramer in "empty()"');
+ }
+ if ($func_name == 'empty') {
+ $this->_retvalue = $func_name . '(' . str_replace("')->value", "',null,true,false)->value", $this->yystack[$this->yyidx + - 1]->minor[0]) . ')';
+ } else {
+ $this->_retvalue = $func_name . '(' . $this->yystack[$this->yyidx + - 1]->minor[0] . ')';
+ }
} else {
- $this->_retvalue = $func_name.'('.$this->yystack[$this->yyidx + -1]->minor[0].')';
+ $this->_retvalue = $this->yystack[$this->yyidx + - 3]->minor . "(" . implode(',', $this->yystack[$this->yyidx + - 1]->minor) . ")";
}
} else {
- $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(". implode(',',$this->yystack[$this->yyidx + -1]->minor) .")";
+ $this->compiler->trigger_template_error("unknown function \"" . $this->yystack[$this->yyidx + - 3]->minor . "\"");
}
- } else {
- $this->compiler->trigger_template_error ("unknown function \"" . $this->yystack[$this->yyidx + -3]->minor . "\"");
}
}
+ #line 2901 "smarty_internal_templateparser.php"
+ #line 1021 "smarty_internal_templateparser.y"
+ function yy_r150()
+ {
+ if ($this->security && substr($this->yystack[$this->yyidx + - 3]->minor, 0, 1) == '_') {
+ $this->compiler->trigger_template_error(self::Err1);
+ }
+ $this->_retvalue = $this->yystack[$this->yyidx + - 3]->minor . "(" . implode(',', $this->yystack[$this->yyidx + - 1]->minor) . ")";
+ }
+ #line 2909 "smarty_internal_templateparser.php"
+ #line 1028 "smarty_internal_templateparser.y"
+ function yy_r151()
+ {
+ if ($this->security) {
+ $this->compiler->trigger_template_error(self::Err2);
+ }
+ self::$prefix_number ++;
+ $this->compiler->prefix_code[] = '<?php $_tmp' . self::$prefix_number . '=' . $this->compileVariable("'" . $this->yystack[$this->yyidx + - 3]->minor . "'") . ';?>';
+ $this->_retvalue = '$_tmp' . self::$prefix_number . '(' . implode(',', $this->yystack[$this->yyidx + - 1]->minor) . ')';
+ }
+ #line 2919 "smarty_internal_templateparser.php"
+ #line 1039 "smarty_internal_templateparser.y"
+ function yy_r152()
+ {
+ $this->_retvalue = array_merge($this->yystack[$this->yyidx + - 2]->minor, array($this->yystack[$this->yyidx + 0]->minor));
+ }
+ #line 2924 "smarty_internal_templateparser.php"
+ #line 1056 "smarty_internal_templateparser.y"
+ function yy_r155()
+ {
+ $this->_retvalue = array_merge($this->yystack[$this->yyidx + - 2]->minor, array(array_merge($this->yystack[$this->yyidx + - 1]->minor, $this->yystack[$this->yyidx + 0]->minor)));
+ }
+ #line 2929 "smarty_internal_templateparser.php"
+ #line 1060 "smarty_internal_templateparser.y"
+ function yy_r156()
+ {
+ $this->_retvalue = array(array_merge($this->yystack[$this->yyidx + - 1]->minor, $this->yystack[$this->yyidx + 0]->minor));
+ }
+ #line 2934 "smarty_internal_templateparser.php"
+ #line 1068 "smarty_internal_templateparser.y"
+ function yy_r158()
+ {
+ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);
+ }
+ #line 2939 "smarty_internal_templateparser.php"
+ #line 1076 "smarty_internal_templateparser.y"
+ function yy_r159()
+ {
+ $this->_retvalue = array_merge($this->yystack[$this->yyidx + - 1]->minor, $this->yystack[$this->yyidx + 0]->minor);
+ }
+ #line 2944 "smarty_internal_templateparser.php"
+ #line 1110 "smarty_internal_templateparser.y"
+ function yy_r166()
+ {
+ $this->_retvalue = '$' . $this->yystack[$this->yyidx + - 1]->minor . $this->yystack[$this->yyidx + 0]->minor;
+ }
+ #line 2949 "smarty_internal_templateparser.php"
+ #line 1115 "smarty_internal_templateparser.y"
+ function yy_r167()
+ {
+ $this->_retvalue = '$' . $this->yystack[$this->yyidx + - 2]->minor . $this->yystack[$this->yyidx + - 1]->minor . $this->yystack[$this->yyidx + 0]->minor;
+ }
+ #line 2954 "smarty_internal_templateparser.php"
+ #line 1121 "smarty_internal_templateparser.y"
+ function yy_r168()
+ {
+ $this->_retvalue = '==';
+ }
+ #line 2959 "smarty_internal_templateparser.php"
+ #line 1125 "smarty_internal_templateparser.y"
+ function yy_r169()
+ {
+ $this->_retvalue = '!=';
+ }
+ #line 2964 "smarty_internal_templateparser.php"
+ #line 1129 "smarty_internal_templateparser.y"
+ function yy_r170()
+ {
+ $this->_retvalue = '>';
+ }
+ #line 2969 "smarty_internal_templateparser.php"
+ #line 1133 "smarty_internal_templateparser.y"
+ function yy_r171()
+ {
+ $this->_retvalue = '<';
+ }
+ #line 2974 "smarty_internal_templateparser.php"
+ #line 1137 "smarty_internal_templateparser.y"
+ function yy_r172()
+ {
+ $this->_retvalue = '>=';
+ }
+ #line 2979 "smarty_internal_templateparser.php"
+ #line 1141 "smarty_internal_templateparser.y"
+ function yy_r173()
+ {
+ $this->_retvalue = '<=';
+ }
+ #line 2984 "smarty_internal_templateparser.php"
+ #line 1145 "smarty_internal_templateparser.y"
+ function yy_r174()
+ {
+ $this->_retvalue = '===';
+ }
+ #line 2989 "smarty_internal_templateparser.php"
+ #line 1149 "smarty_internal_templateparser.y"
+ function yy_r175()
+ {
+ $this->_retvalue = '!==';
+ }
+ #line 2994 "smarty_internal_templateparser.php"
+ #line 1153 "smarty_internal_templateparser.y"
+ function yy_r176()
+ {
+ $this->_retvalue = '%';
+ }
+ #line 2999 "smarty_internal_templateparser.php"
+ #line 1157 "smarty_internal_templateparser.y"
+ function yy_r177()
+ {
+ $this->_retvalue = '&&';
+ }
+ #line 3004 "smarty_internal_templateparser.php"
+ #line 1161 "smarty_internal_templateparser.y"
+ function yy_r178()
+ {
+ $this->_retvalue = '||';
+ }
+ #line 3009 "smarty_internal_templateparser.php"
+ #line 1165 "smarty_internal_templateparser.y"
+ function yy_r179()
+ {
+ $this->_retvalue = ' XOR ';
+ }
+ #line 3014 "smarty_internal_templateparser.php"
+ #line 1172 "smarty_internal_templateparser.y"
+ function yy_r180()
+ {
+ $this->_retvalue = 'array(' . $this->yystack[$this->yyidx + - 1]->minor . ')';
+ }
+ #line 3019 "smarty_internal_templateparser.php"
+ #line 1180 "smarty_internal_templateparser.y"
+ function yy_r182()
+ {
+ $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor . ',' . $this->yystack[$this->yyidx + 0]->minor;
+ }
+ #line 3024 "smarty_internal_templateparser.php"
+ #line 1188 "smarty_internal_templateparser.y"
+ function yy_r184()
+ {
+ $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor . '=>' . $this->yystack[$this->yyidx + 0]->minor;
+ }
+ #line 3029 "smarty_internal_templateparser.php"
+ #line 1192 "smarty_internal_templateparser.y"
+ function yy_r185()
+ {
+ $this->_retvalue = '\'' . $this->yystack[$this->yyidx + - 2]->minor . '\'=>' . $this->yystack[$this->yyidx + 0]->minor;
+ }
+ #line 3034 "smarty_internal_templateparser.php"
+ #line 1204 "smarty_internal_templateparser.y"
+ function yy_r187()
+ {
+ $this->_retvalue = "''";
+ }
+ #line 3039 "smarty_internal_templateparser.php"
+ #line 1208 "smarty_internal_templateparser.y"
+ function yy_r188()
+ {
+ $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor->to_smarty_php();
+ }
+ #line 3044 "smarty_internal_templateparser.php"
+ #line 1213 "smarty_internal_templateparser.y"
+ function yy_r189()
+ {
+ $this->yystack[$this->yyidx + - 1]->minor->append_subtree($this->yystack[$this->yyidx + 0]->minor);
+ $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor;
+ }
+ #line 3050 "smarty_internal_templateparser.php"
+ #line 1218 "smarty_internal_templateparser.y"
+ function yy_r190()
+ {
+ $this->_retvalue = new _smarty_doublequoted($this, $this->yystack[$this->yyidx + 0]->minor);
+ }
+ #line 3055 "smarty_internal_templateparser.php"
+ #line 1222 "smarty_internal_templateparser.y"
+ function yy_r191()
+ {
+ $this->_retvalue = new _smarty_code($this, '(string)' . $this->yystack[$this->yyidx + - 1]->minor);
+ }
+ #line 3060 "smarty_internal_templateparser.php"
+ #line 1230 "smarty_internal_templateparser.y"
+ function yy_r193()
+ {
+ $this->_retvalue = new _smarty_code($this, '(string)$_smarty_tpl->tpl_vars[\'' . substr($this->yystack[$this->yyidx + 0]->minor, 1) . '\']->value');
+ }
+ #line 3065 "smarty_internal_templateparser.php"
+ #line 1238 "smarty_internal_templateparser.y"
+ function yy_r195()
+ {
+ $this->_retvalue = new _smarty_code($this, '(string)(' . $this->yystack[$this->yyidx + - 1]->minor . ')');
+ }
+ #line 3070 "smarty_internal_templateparser.php"
+ #line 1242 "smarty_internal_templateparser.y"
+ function yy_r196()
+ {
+ $this->_retvalue = new _smarty_tag($this, $this->yystack[$this->yyidx + - 1]->minor);
+ }
+ #line 3075 "smarty_internal_templateparser.php"
+ #line 1246 "smarty_internal_templateparser.y"
+ function yy_r197()
+ {
+ $this->_retvalue = new _smarty_dq_content($this, $this->yystack[$this->yyidx + 0]->minor);
}
-#line 2895 "smarty_internal_templateparser.php"
-#line 999 "smarty_internal_templateparser.y"
- function yy_r152(){
- if ($this->security && substr($this->yystack[$this->yyidx + -3]->minor,0,1) == '_') {
- $this->compiler->trigger_template_error (self::Err1);
- }
- $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(". implode(',',$this->yystack[$this->yyidx + -1]->minor) .")";
- }
-#line 2903 "smarty_internal_templateparser.php"
-#line 1006 "smarty_internal_templateparser.y"
- function yy_r153(){
- if ($this->security) {
- $this->compiler->trigger_template_error (self::Err2);
- }
- $this->prefix_number++;
- $this->compiler->prefix_code[] = '<?php $_tmp'.$this->prefix_number.'='.$this->compileVariable("'".$this->yystack[$this->yyidx + -3]->minor."'").';?>';
- $this->_retvalue = '$_tmp'.$this->prefix_number.'('. implode(',',$this->yystack[$this->yyidx + -1]->minor) .')';
- }
-#line 2913 "smarty_internal_templateparser.php"
-#line 1017 "smarty_internal_templateparser.y"
- function yy_r154(){
- $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array($this->yystack[$this->yyidx + 0]->minor));
- }
-#line 2918 "smarty_internal_templateparser.php"
-#line 1034 "smarty_internal_templateparser.y"
- function yy_r157(){
- $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor)));
- }
-#line 2923 "smarty_internal_templateparser.php"
-#line 1038 "smarty_internal_templateparser.y"
- function yy_r158(){
- $this->_retvalue = array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor));
- }
-#line 2928 "smarty_internal_templateparser.php"
-#line 1046 "smarty_internal_templateparser.y"
- function yy_r160(){
- $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);
- }
-#line 2933 "smarty_internal_templateparser.php"
-#line 1054 "smarty_internal_templateparser.y"
- function yy_r161(){
- $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor);
- }
-#line 2938 "smarty_internal_templateparser.php"
-#line 1088 "smarty_internal_templateparser.y"
- function yy_r168(){
- $this->_retvalue = '$'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2943 "smarty_internal_templateparser.php"
-#line 1093 "smarty_internal_templateparser.y"
- function yy_r169(){
- $this->_retvalue = '$'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2948 "smarty_internal_templateparser.php"
-#line 1099 "smarty_internal_templateparser.y"
- function yy_r170(){
- $this->_retvalue = '==';
- }
-#line 2953 "smarty_internal_templateparser.php"
-#line 1103 "smarty_internal_templateparser.y"
- function yy_r171(){
- $this->_retvalue = '!=';
- }
-#line 2958 "smarty_internal_templateparser.php"
-#line 1107 "smarty_internal_templateparser.y"
- function yy_r172(){
- $this->_retvalue = '>';
- }
-#line 2963 "smarty_internal_templateparser.php"
-#line 1111 "smarty_internal_templateparser.y"
- function yy_r173(){
- $this->_retvalue = '<';
- }
-#line 2968 "smarty_internal_templateparser.php"
-#line 1115 "smarty_internal_templateparser.y"
- function yy_r174(){
- $this->_retvalue = '>=';
- }
-#line 2973 "smarty_internal_templateparser.php"
-#line 1119 "smarty_internal_templateparser.y"
- function yy_r175(){
- $this->_retvalue = '<=';
- }
-#line 2978 "smarty_internal_templateparser.php"
-#line 1123 "smarty_internal_templateparser.y"
- function yy_r176(){
- $this->_retvalue = '===';
- }
-#line 2983 "smarty_internal_templateparser.php"
-#line 1127 "smarty_internal_templateparser.y"
- function yy_r177(){
- $this->_retvalue = '!==';
- }
-#line 2988 "smarty_internal_templateparser.php"
-#line 1131 "smarty_internal_templateparser.y"
- function yy_r178(){
- $this->_retvalue = '%';
- }
-#line 2993 "smarty_internal_templateparser.php"
-#line 1135 "smarty_internal_templateparser.y"
- function yy_r179(){
- $this->_retvalue = '&&';
- }
-#line 2998 "smarty_internal_templateparser.php"
-#line 1139 "smarty_internal_templateparser.y"
- function yy_r180(){
- $this->_retvalue = '||';
- }
-#line 3003 "smarty_internal_templateparser.php"
-#line 1143 "smarty_internal_templateparser.y"
- function yy_r181(){
- $this->_retvalue = ' XOR ';
- }
-#line 3008 "smarty_internal_templateparser.php"
-#line 1150 "smarty_internal_templateparser.y"
- function yy_r182(){
- $this->_retvalue = 'array('.$this->yystack[$this->yyidx + -1]->minor.')';
- }
-#line 3013 "smarty_internal_templateparser.php"
-#line 1158 "smarty_internal_templateparser.y"
- function yy_r184(){
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 3018 "smarty_internal_templateparser.php"
-#line 1166 "smarty_internal_templateparser.y"
- function yy_r186(){
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'=>'.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 3023 "smarty_internal_templateparser.php"
-#line 1170 "smarty_internal_templateparser.y"
- function yy_r187(){
- $this->_retvalue = '\''.$this->yystack[$this->yyidx + -2]->minor.'\'=>'.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 3028 "smarty_internal_templateparser.php"
-#line 1182 "smarty_internal_templateparser.y"
- function yy_r189(){
- $this->_retvalue = "''";
- }
-#line 3033 "smarty_internal_templateparser.php"
-#line 1186 "smarty_internal_templateparser.y"
- function yy_r190(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor->to_smarty_php();
- }
-#line 3038 "smarty_internal_templateparser.php"
-#line 1191 "smarty_internal_templateparser.y"
- function yy_r191(){
- $this->yystack[$this->yyidx + -1]->minor->append_subtree($this->yystack[$this->yyidx + 0]->minor);
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
- }
-#line 3044 "smarty_internal_templateparser.php"
-#line 1196 "smarty_internal_templateparser.y"
- function yy_r192(){
- $this->_retvalue = new _smarty_doublequoted($this, $this->yystack[$this->yyidx + 0]->minor);
- }
-#line 3049 "smarty_internal_templateparser.php"
-#line 1200 "smarty_internal_templateparser.y"
- function yy_r193(){
- $this->_retvalue = new _smarty_code($this, '(string)'.$this->yystack[$this->yyidx + -1]->minor);
- }
-#line 3054 "smarty_internal_templateparser.php"
-#line 1208 "smarty_internal_templateparser.y"
- function yy_r195(){
- $this->_retvalue = new _smarty_code($this, '(string)$_smarty_tpl->tpl_vars[\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\']->value');
- }
-#line 3059 "smarty_internal_templateparser.php"
-#line 1216 "smarty_internal_templateparser.y"
- function yy_r197(){
- $this->_retvalue = new _smarty_code($this, '(string)('.$this->yystack[$this->yyidx + -1]->minor.')');
- }
-#line 3064 "smarty_internal_templateparser.php"
-#line 1220 "smarty_internal_templateparser.y"
- function yy_r198(){
- $this->_retvalue = new _smarty_tag($this, $this->yystack[$this->yyidx + 0]->minor);
- }
-#line 3069 "smarty_internal_templateparser.php"
-#line 1224 "smarty_internal_templateparser.y"
- function yy_r199(){
- $this->_retvalue = new _smarty_dq_content($this, $this->yystack[$this->yyidx + 0]->minor);
- }
-#line 3074 "smarty_internal_templateparser.php"
+
+ #line 3080 "smarty_internal_templateparser.php"
private $_retvalue;
- function yy_reduce($yyruleno)
+ public function yy_reduce($yyruleno)
{
$yymsp = $this->yystack[$this->yyidx];
- if (self::$yyTraceFILE && $yyruleno >= 0
- && $yyruleno < count(self::$yyRuleName)) {
- fprintf(self::$yyTraceFILE, "%sReduce (%d) [%s].\n",
- self::$yyTracePrompt, $yyruleno,
- self::$yyRuleName[$yyruleno]);
+ if ($this->yyTraceFILE && $yyruleno >= 0
+ && $yyruleno < count(self::$yyRuleName)
+ ) {
+ fprintf($this->yyTraceFILE, "%sReduce (%d) [%s].\n",
+ $this->yyTracePrompt, $yyruleno,
+ self::$yyRuleName[$yyruleno]);
}
$this->_retvalue = $yy_lefthand_side = null;
@@ -3099,14 +4416,14 @@ static public $yy_action = array(
$yygoto = self::$yyRuleInfo[$yyruleno]['lhs'];
$yysize = self::$yyRuleInfo[$yyruleno]['rhs'];
$this->yyidx -= $yysize;
- for($i = $yysize; $i; $i--) {
+ for ($i = $yysize; $i; $i --) {
// pop all of the right-hand side parameters
array_pop($this->yystack);
}
$yyact = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, $yygoto);
if ($yyact < self::YYNSTATE) {
- if (!self::$yyTraceFILE && $yysize) {
- $this->yyidx++;
+ if (!$this->yyTraceFILE && $yysize) {
+ $this->yyidx ++;
$x = new TP_yyStackEntry;
$x->stateno = $yyact;
$x->major = $yygoto;
@@ -3120,73 +4437,75 @@ static public $yy_action = array(
}
}
- function yy_parse_failed()
+ public function yy_parse_failed()
{
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sFail!\n", self::$yyTracePrompt);
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt);
}
while ($this->yyidx >= 0) {
$this->yy_pop_parser_stack();
}
}
- function yy_syntax_error($yymajor, $TOKEN)
+ public function yy_syntax_error($yymajor, $TOKEN)
{
-#line 77 "smarty_internal_templateparser.y"
+ #line 75 "smarty_internal_templateparser.y"
- $this->internalError = true;
- $this->yymajor = $yymajor;
- $this->compiler->trigger_template_error();
-#line 3137 "smarty_internal_templateparser.php"
+ $this->internalError = true;
+ $this->yymajor = $yymajor;
+ $this->compiler->trigger_template_error();
+ #line 3142 "smarty_internal_templateparser.php"
}
- function yy_accept()
+ public function yy_accept()
{
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sAccept!\n", self::$yyTracePrompt);
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt);
}
while ($this->yyidx >= 0) {
$stack = $this->yy_pop_parser_stack();
}
-#line 69 "smarty_internal_templateparser.y"
+ #line 66 "smarty_internal_templateparser.y"
+
+ $this->successful = !$this->internalError;
+ $this->internalError = false;
+ $this->retvalue = $this->_retvalue;
+ //echo $this->retvalue."\n\n";
- $this->successful = !$this->internalError;
- $this->internalError = false;
- $this->retvalue = $this->_retvalue;
- //echo $this->retvalue."\n\n";
-#line 3155 "smarty_internal_templateparser.php"
+ #line 3160 "smarty_internal_templateparser.php"
}
- function doParse($yymajor, $yytokenvalue)
+ public function doParse($yymajor, $yytokenvalue)
{
$yyerrorhit = 0; /* True if yymajor has invoked an error */
if ($this->yyidx === null || $this->yyidx < 0) {
$this->yyidx = 0;
- $this->yyerrcnt = -1;
+ $this->yyerrcnt = - 1;
$x = new TP_yyStackEntry;
$x->stateno = 0;
$x->major = 0;
$this->yystack = array();
array_push($this->yystack, $x);
}
- $yyendofinput = ($yymajor==0);
+ $yyendofinput = ($yymajor == 0);
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sInput %s\n",
- self::$yyTracePrompt, $this->yyTokenName[$yymajor]);
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sInput %s\n",
+ $this->yyTracePrompt, $this->yyTokenName[$yymajor]);
}
do {
$yyact = $this->yy_find_shift_action($yymajor);
if ($yymajor < self::YYERRORSYMBOL &&
- !$this->yy_is_expected_token($yymajor)) {
+ !$this->yy_is_expected_token($yymajor)
+ ) {
// force a syntax error
$yyact = self::YY_ERROR_ACTION;
}
if ($yyact < self::YYNSTATE) {
$this->yy_shift($yyact, $yymajor, $yytokenvalue);
- $this->yyerrcnt--;
+ $this->yyerrcnt --;
if ($yyendofinput && $this->yyidx >= 0) {
$yymajor = 0;
} else {
@@ -3195,30 +4514,30 @@ static public $yy_action = array(
} elseif ($yyact < self::YYNSTATE + self::YYNRULE) {
$this->yy_reduce($yyact - self::YYNSTATE);
} elseif ($yyact == self::YY_ERROR_ACTION) {
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sSyntax Error!\n",
- self::$yyTracePrompt);
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sSyntax Error!\n",
+ $this->yyTracePrompt);
}
if (self::YYERRORSYMBOL) {
if ($this->yyerrcnt < 0) {
$this->yy_syntax_error($yymajor, $yytokenvalue);
}
$yymx = $this->yystack[$this->yyidx]->major;
- if ($yymx == self::YYERRORSYMBOL || $yyerrorhit ){
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sDiscard input token %s\n",
- self::$yyTracePrompt, $this->yyTokenName[$yymajor]);
+ if ($yymx == self::YYERRORSYMBOL || $yyerrorhit) {
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sDiscard input token %s\n",
+ $this->yyTracePrompt, $this->yyTokenName[$yymajor]);
}
$this->yy_destructor($yymajor, $yytokenvalue);
$yymajor = self::YYNOCODE;
} else {
while ($this->yyidx >= 0 &&
- $yymx != self::YYERRORSYMBOL &&
- ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE
- ){
+ $yymx != self::YYERRORSYMBOL &&
+ ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE
+ ) {
$this->yy_pop_parser_stack();
}
- if ($this->yyidx < 0 || $yymajor==0) {
+ if ($this->yyidx < 0 || $yymajor == 0) {
$this->yy_destructor($yymajor, $yytokenvalue);
$this->yy_parse_failed();
$yymajor = self::YYNOCODE;
@@ -3247,4 +4566,3 @@ static public $yy_action = array(
} while ($yymajor != self::YYNOCODE && $this->yyidx >= 0);
}
}
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_utility.php b/library/Smarty/libs/sysplugins/smarty_internal_utility.php
index 3e362855c..0a5975bba 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_utility.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_utility.php
@@ -3,47 +3,42 @@
* Project: Smarty: the PHP compiling template engine
* File: smarty_internal_utility.php
* SVN: $Id: $
- *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
- *
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
- *
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
* For questions, help, comments, discussion, etc., please join the
* Smarty mailing list. Send a blank e-mail to
* smarty-discussion-subscribe@googlegroups.com
*
- * @link http://www.smarty.net/
- * @copyright 2008 New Digital Group, Inc.
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author Uwe Tews
- * @package Smarty
+ * @link http://www.smarty.net/
+ * @copyright 2008 New Digital Group, Inc.
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author Uwe Tews
+ * @package Smarty
* @subpackage PluginsInternal
- * @version 3-SVN$Rev: 3286 $
+ * @version 3-SVN$Rev: 3286 $
*/
-
/**
* Utility class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Security
*/
-class Smarty_Internal_Utility {
-
+class Smarty_Internal_Utility
+{
/**
* private constructor to prevent calls creation of new instances
*/
- private final function __construct()
+ final private function __construct()
{
// intentionally left blank
}
@@ -51,14 +46,15 @@ class Smarty_Internal_Utility {
/**
* Compile all template files
*
- * @param string $extension template file name extension
- * @param bool $force_compile force all to recompile
- * @param int $time_limit set maximum execution time
- * @param int $max_errors set maximum allowed errors
- * @param Smarty $smarty Smarty instance
+ * @param string $extension template file name extension
+ * @param bool $force_compile force all to recompile
+ * @param int $time_limit set maximum execution time
+ * @param int $max_errors set maximum allowed errors
+ * @param Smarty $smarty Smarty instance
+ *
* @return integer number of template files compiled
*/
- public static function compileAllTemplates($extention, $force_compile, $time_limit, $max_errors, Smarty $smarty)
+ public static function compileAllTemplates($extension, $force_compile, $time_limit, $max_errors, Smarty $smarty)
{
// switch off time limit
if (function_exists('set_time_limit')) {
@@ -68,26 +64,30 @@ class Smarty_Internal_Utility {
$_count = 0;
$_error_count = 0;
// loop over array of template directories
- foreach($smarty->getTemplateDir() as $_dir) {
+ foreach ($smarty->getTemplateDir() as $_dir) {
$_compileDirs = new RecursiveDirectoryIterator($_dir);
$_compile = new RecursiveIteratorIterator($_compileDirs);
foreach ($_compile as $_fileinfo) {
- if (substr($_fileinfo->getBasename(),0,1) == '.' || strpos($_fileinfo, '.svn') !== false) continue;
$_file = $_fileinfo->getFilename();
- if (!substr_compare($_file, $extention, - strlen($extention)) == 0) continue;
- if ($_fileinfo->getPath() == substr($_dir, 0, -1)) {
- $_template_file = $_file;
+ if (substr(basename($_fileinfo->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) {
+ continue;
+ }
+ if (!substr_compare($_file, $extension, - strlen($extension)) == 0) {
+ continue;
+ }
+ if ($_fileinfo->getPath() == substr($_dir, 0, - 1)) {
+ $_template_file = $_file;
} else {
- $_template_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file;
+ $_template_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file;
}
echo '<br>', $_dir, '---', $_template_file;
flush();
$_start_time = microtime(true);
try {
- $_tpl = $smarty->createTemplate($_template_file,null,null,null,false);
+ $_tpl = $smarty->createTemplate($_template_file, null, null, null, false);
if ($_tpl->mustCompile()) {
$_tpl->compileTemplateSource();
- $_count++;
+ $_count ++;
echo ' compiled in ', microtime(true) - $_start_time, ' seconds';
flush();
} else {
@@ -97,7 +97,7 @@ class Smarty_Internal_Utility {
}
catch (Exception $e) {
echo 'Error: ', $e->getMessage(), "<br><br>";
- $_error_count++;
+ $_error_count ++;
}
// free memory
$smarty->template_objects = array();
@@ -109,20 +109,22 @@ class Smarty_Internal_Utility {
}
}
}
+
return $_count;
}
/**
* Compile all config files
*
- * @param string $extension config file name extension
- * @param bool $force_compile force all to recompile
- * @param int $time_limit set maximum execution time
- * @param int $max_errors set maximum allowed errors
- * @param Smarty $smarty Smarty instance
+ * @param string $extension config file name extension
+ * @param bool $force_compile force all to recompile
+ * @param int $time_limit set maximum execution time
+ * @param int $max_errors set maximum allowed errors
+ * @param Smarty $smarty Smarty instance
+ *
* @return integer number of config files compiled
*/
- public static function compileAllConfig($extention, $force_compile, $time_limit, $max_errors, Smarty $smarty)
+ public static function compileAllConfig($extension, $force_compile, $time_limit, $max_errors, Smarty $smarty)
{
// switch off time limit
if (function_exists('set_time_limit')) {
@@ -132,14 +134,18 @@ class Smarty_Internal_Utility {
$_count = 0;
$_error_count = 0;
// loop over array of template directories
- foreach($smarty->getConfigDir() as $_dir) {
+ foreach ($smarty->getConfigDir() as $_dir) {
$_compileDirs = new RecursiveDirectoryIterator($_dir);
$_compile = new RecursiveIteratorIterator($_compileDirs);
foreach ($_compile as $_fileinfo) {
- if (substr($_fileinfo->getBasename(),0,1) == '.' || strpos($_fileinfo, '.svn') !== false) continue;
$_file = $_fileinfo->getFilename();
- if (!substr_compare($_file, $extention, - strlen($extention)) == 0) continue;
- if ($_fileinfo->getPath() == substr($_dir, 0, -1)) {
+ if (substr(basename($_fileinfo->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) {
+ continue;
+ }
+ if (!substr_compare($_file, $extension, - strlen($extension)) == 0) {
+ continue;
+ }
+ if ($_fileinfo->getPath() == substr($_dir, 0, - 1)) {
$_config_file = $_file;
} else {
$_config_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file;
@@ -151,7 +157,7 @@ class Smarty_Internal_Utility {
$_config = new Smarty_Internal_Config($_config_file, $smarty);
if ($_config->mustCompile()) {
$_config->compileConfigSource();
- $_count++;
+ $_count ++;
echo ' compiled in ', microtime(true) - $_start_time, ' seconds';
flush();
} else {
@@ -161,7 +167,7 @@ class Smarty_Internal_Utility {
}
catch (Exception $e) {
echo 'Error: ', $e->getMessage(), "<br><br>";
- $_error_count++;
+ $_error_count ++;
}
if ($max_errors !== null && $_error_count == $max_errors) {
echo '<br><br>too many errors';
@@ -169,23 +175,25 @@ class Smarty_Internal_Utility {
}
}
}
+
return $_count;
}
/**
* Delete compiled template file
*
- * @param string $resource_name template name
- * @param string $compile_id compile id
- * @param integer $exp_time expiration time
- * @param Smarty $smarty Smarty instance
+ * @param string $resource_name template name
+ * @param string $compile_id compile id
+ * @param integer $exp_time expiration time
+ * @param Smarty $smarty Smarty instance
+ *
* @return integer number of template files deleted
*/
public static function clearCompiledTemplate($resource_name, $compile_id, $exp_time, Smarty $smarty)
{
- $_compile_dir = $smarty->getCompileDir();
+ $_compile_dir = realpath($smarty->getCompileDir()) . '/';
$_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!', '_', $compile_id) : null;
- $_dir_sep = $smarty->use_sub_dirs ? DS : '^';
+ $_dir_sep = $smarty->use_sub_dirs ? '/' : '^';
if (isset($resource_name)) {
$_save_stat = $smarty->caching;
$smarty->caching = false;
@@ -205,13 +213,13 @@ class Smarty_Internal_Utility {
unset($smarty->template_objects[$_templateId]);
if ($tpl->source->exists) {
- $_resource_part_1 = basename(str_replace('^', '/', $tpl->compiled->filepath));
- $_resource_part_1_length = strlen($_resource_part_1);
+ $_resource_part_1 = basename(str_replace('^', '/', $tpl->compiled->filepath));
+ $_resource_part_1_length = strlen($_resource_part_1);
} else {
return 0;
}
- $_resource_part_2 = str_replace('.php','.cache.php',$_resource_part_1);
+ $_resource_part_2 = str_replace('.php', '.cache.php', $_resource_part_1);
$_resource_part_2_length = strlen($_resource_part_2);
}
$_dir = $_compile_dir;
@@ -219,22 +227,24 @@ class Smarty_Internal_Utility {
$_dir .= $_compile_id . $_dir_sep;
}
if (isset($_compile_id)) {
- $_compile_id_part = $_compile_dir . $_compile_id . $_dir_sep;
+ $_compile_id_part = str_replace('\\', '/', $_compile_dir . $_compile_id . $_dir_sep);
$_compile_id_part_length = strlen($_compile_id_part);
}
$_count = 0;
try {
$_compileDirs = new RecursiveDirectoryIterator($_dir);
- // NOTE: UnexpectedValueException thrown for PHP >= 5.3
- } catch (Exception $e) {
+ // NOTE: UnexpectedValueException thrown for PHP >= 5.3
+ }
+ catch (Exception $e) {
return 0;
}
$_compile = new RecursiveIteratorIterator($_compileDirs, RecursiveIteratorIterator::CHILD_FIRST);
foreach ($_compile as $_file) {
- if (substr($_file->getBasename(), 0, 1) == '.' || strpos($_file, '.svn') !== false)
+ if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) {
continue;
+ }
- $_filepath = (string) $_file;
+ $_filepath = str_replace('\\', '/', (string) $_file);
if ($_file->isDir()) {
if (!$_compile->isDot()) {
@@ -243,12 +253,13 @@ class Smarty_Internal_Utility {
}
} else {
$unlink = false;
- if ((!isset($_compile_id) || (isset($_filepath[$_compile_id_part_length]) && !strncmp($_filepath, $_compile_id_part, $_compile_id_part_length)))
+ if ((!isset($_compile_id) || (isset($_filepath[$_compile_id_part_length]) && $a = !strncmp($_filepath, $_compile_id_part, $_compile_id_part_length)))
&& (!isset($resource_name)
|| (isset($_filepath[$_resource_part_1_length])
- && substr_compare($_filepath, $_resource_part_1, -$_resource_part_1_length, $_resource_part_1_length) == 0)
+ && substr_compare($_filepath, $_resource_part_1, - $_resource_part_1_length, $_resource_part_1_length) == 0)
|| (isset($_filepath[$_resource_part_2_length])
- && substr_compare($_filepath, $_resource_part_2, -$_resource_part_2_length, $_resource_part_2_length) == 0))) {
+ && substr_compare($_filepath, $_resource_part_2, - $_resource_part_2_length, $_resource_part_2_length) == 0))
+ ) {
if (isset($exp_time)) {
if (time() - @filemtime($_filepath) >= $exp_time) {
$unlink = true;
@@ -259,40 +270,44 @@ class Smarty_Internal_Utility {
}
if ($unlink && @unlink($_filepath)) {
- $_count++;
+ $_count ++;
}
}
}
// clear compiled cache
Smarty_Resource::$sources = array();
Smarty_Resource::$compileds = array();
+
return $_count;
}
/**
* Return array of tag/attributes of all tags used by an template
*
- * @param Smarty_Internal_Template $templae template object
- * @return array of tag/attributes
+ * @param Smarty_Internal_Template $template
+ *
+ * @throws Exception
+ * @throws SmartyException
+ * @return array of tag/attributes
*/
public static function getTags(Smarty_Internal_Template $template)
{
$template->smarty->get_used_tags = true;
$template->compileTemplateSource();
+
return $template->used_tags;
}
-
/**
* diagnose Smarty setup
- *
* If $errors is secified, the diagnostic report will be appended to the array, rather than being output.
*
- * @param Smarty $smarty Smarty instance to test
- * @param array $errors array to push results into rather than outputting them
- * @return bool status, true if everything is fine, false else
+ * @param Smarty $smarty Smarty instance to test
+ * @param array $errors array to push results into rather than outputting them
+ *
+ * @return bool status, true if everything is fine, false else
*/
- public static function testInstall(Smarty $smarty, &$errors=null)
+ public static function testInstall(Smarty $smarty, &$errors = null)
{
$status = true;
@@ -305,10 +320,10 @@ class Smarty_Internal_Utility {
$_stream_resolve_include_path = function_exists('stream_resolve_include_path');
// test if all registered template_dir are accessible
- foreach($smarty->getTemplateDir() as $template_dir) {
+ foreach ($smarty->getTemplateDir() as $template_dir) {
$_template_dir = $template_dir;
$template_dir = realpath($template_dir);
- // resolve include_path or fail existance
+ // resolve include_path or fail existence
if (!$template_dir) {
if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_template_dir)) {
// try PHP include_path
@@ -371,7 +386,6 @@ class Smarty_Internal_Utility {
}
}
-
if ($errors === null) {
echo "Testing compile directory...\n";
}
@@ -417,19 +431,18 @@ class Smarty_Internal_Utility {
}
}
-
if ($errors === null) {
echo "Testing plugins directory...\n";
}
// test if all registered plugins_dir are accessible
// and if core plugins directory is still registered
- $_core_plugins_dir = realpath(dirname(__FILE__) .'/../plugins');
+ $_core_plugins_dir = realpath(dirname(__FILE__) . '/../plugins');
$_core_plugins_available = false;
- foreach($smarty->getPluginsDir() as $plugin_dir) {
+ foreach ($smarty->getPluginsDir() as $plugin_dir) {
$_plugin_dir = $plugin_dir;
$plugin_dir = realpath($plugin_dir);
- // resolve include_path or fail existance
+ // resolve include_path or fail existence
if (!$plugin_dir) {
if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_plugin_dir)) {
// try PHP include_path
@@ -510,7 +523,6 @@ class Smarty_Internal_Utility {
echo "Testing cache directory...\n";
}
-
// test if all registered cache_dir is accessible
$__cache_dir = $smarty->getCacheDir();
$_cache_dir = realpath($__cache_dir);
@@ -552,16 +564,15 @@ class Smarty_Internal_Utility {
}
}
-
if ($errors === null) {
echo "Testing configs directory...\n";
}
// test if all registered config_dir are accessible
- foreach($smarty->getConfigDir() as $config_dir) {
+ foreach ($smarty->getConfigDir() as $config_dir) {
$_config_dir = $config_dir;
$config_dir = realpath($config_dir);
- // resolve include_path or fail existance
+ // resolve include_path or fail existence
if (!$config_dir) {
if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_config_dir)) {
// try PHP include_path
@@ -624,7 +635,6 @@ class Smarty_Internal_Utility {
}
}
-
if ($errors === null) {
echo "Testing sysplugin files...\n";
}
@@ -632,75 +642,75 @@ class Smarty_Internal_Utility {
$source = SMARTY_SYSPLUGINS_DIR;
if (is_dir($source)) {
$expected = array(
- "smarty_cacheresource.php" => true,
- "smarty_cacheresource_custom.php" => true,
- "smarty_cacheresource_keyvaluestore.php" => true,
- "smarty_config_source.php" => true,
- "smarty_internal_cacheresource_file.php" => true,
- "smarty_internal_compile_append.php" => true,
- "smarty_internal_compile_assign.php" => true,
- "smarty_internal_compile_block.php" => true,
- "smarty_internal_compile_break.php" => true,
- "smarty_internal_compile_call.php" => true,
- "smarty_internal_compile_capture.php" => true,
- "smarty_internal_compile_config_load.php" => true,
- "smarty_internal_compile_continue.php" => true,
- "smarty_internal_compile_debug.php" => true,
- "smarty_internal_compile_eval.php" => true,
- "smarty_internal_compile_extends.php" => true,
- "smarty_internal_compile_for.php" => true,
- "smarty_internal_compile_foreach.php" => true,
- "smarty_internal_compile_function.php" => true,
- "smarty_internal_compile_if.php" => true,
- "smarty_internal_compile_include.php" => true,
- "smarty_internal_compile_include_php.php" => true,
- "smarty_internal_compile_insert.php" => true,
- "smarty_internal_compile_ldelim.php" => true,
- "smarty_internal_compile_nocache.php" => true,
- "smarty_internal_compile_private_block_plugin.php" => true,
- "smarty_internal_compile_private_function_plugin.php" => true,
- "smarty_internal_compile_private_modifier.php" => true,
+ "smarty_cacheresource.php" => true,
+ "smarty_cacheresource_custom.php" => true,
+ "smarty_cacheresource_keyvaluestore.php" => true,
+ "smarty_config_source.php" => true,
+ "smarty_internal_cacheresource_file.php" => true,
+ "smarty_internal_compile_append.php" => true,
+ "smarty_internal_compile_assign.php" => true,
+ "smarty_internal_compile_block.php" => true,
+ "smarty_internal_compile_break.php" => true,
+ "smarty_internal_compile_call.php" => true,
+ "smarty_internal_compile_capture.php" => true,
+ "smarty_internal_compile_config_load.php" => true,
+ "smarty_internal_compile_continue.php" => true,
+ "smarty_internal_compile_debug.php" => true,
+ "smarty_internal_compile_eval.php" => true,
+ "smarty_internal_compile_extends.php" => true,
+ "smarty_internal_compile_for.php" => true,
+ "smarty_internal_compile_foreach.php" => true,
+ "smarty_internal_compile_function.php" => true,
+ "smarty_internal_compile_if.php" => true,
+ "smarty_internal_compile_include.php" => true,
+ "smarty_internal_compile_include_php.php" => true,
+ "smarty_internal_compile_insert.php" => true,
+ "smarty_internal_compile_ldelim.php" => true,
+ "smarty_internal_compile_nocache.php" => true,
+ "smarty_internal_compile_private_block_plugin.php" => true,
+ "smarty_internal_compile_private_function_plugin.php" => true,
+ "smarty_internal_compile_private_modifier.php" => true,
"smarty_internal_compile_private_object_block_function.php" => true,
- "smarty_internal_compile_private_object_function.php" => true,
- "smarty_internal_compile_private_print_expression.php" => true,
- "smarty_internal_compile_private_registered_block.php" => true,
- "smarty_internal_compile_private_registered_function.php" => true,
- "smarty_internal_compile_private_special_variable.php" => true,
- "smarty_internal_compile_rdelim.php" => true,
- "smarty_internal_compile_section.php" => true,
- "smarty_internal_compile_setfilter.php" => true,
- "smarty_internal_compile_while.php" => true,
- "smarty_internal_compilebase.php" => true,
- "smarty_internal_config.php" => true,
- "smarty_internal_config_file_compiler.php" => true,
- "smarty_internal_configfilelexer.php" => true,
- "smarty_internal_configfileparser.php" => true,
- "smarty_internal_data.php" => true,
- "smarty_internal_debug.php" => true,
- "smarty_internal_filter_handler.php" => true,
- "smarty_internal_function_call_handler.php" => true,
- "smarty_internal_get_include_path.php" => true,
- "smarty_internal_nocache_insert.php" => true,
- "smarty_internal_parsetree.php" => true,
- "smarty_internal_resource_eval.php" => true,
- "smarty_internal_resource_extends.php" => true,
- "smarty_internal_resource_file.php" => true,
- "smarty_internal_resource_registered.php" => true,
- "smarty_internal_resource_stream.php" => true,
- "smarty_internal_resource_string.php" => true,
- "smarty_internal_smartytemplatecompiler.php" => true,
- "smarty_internal_template.php" => true,
- "smarty_internal_templatebase.php" => true,
- "smarty_internal_templatecompilerbase.php" => true,
- "smarty_internal_templatelexer.php" => true,
- "smarty_internal_templateparser.php" => true,
- "smarty_internal_utility.php" => true,
- "smarty_internal_write_file.php" => true,
- "smarty_resource.php" => true,
- "smarty_resource_custom.php" => true,
- "smarty_resource_recompiled.php" => true,
- "smarty_resource_uncompiled.php" => true,
- "smarty_security.php" => true,
+ "smarty_internal_compile_private_object_function.php" => true,
+ "smarty_internal_compile_private_print_expression.php" => true,
+ "smarty_internal_compile_private_registered_block.php" => true,
+ "smarty_internal_compile_private_registered_function.php" => true,
+ "smarty_internal_compile_private_special_variable.php" => true,
+ "smarty_internal_compile_rdelim.php" => true,
+ "smarty_internal_compile_section.php" => true,
+ "smarty_internal_compile_setfilter.php" => true,
+ "smarty_internal_compile_while.php" => true,
+ "smarty_internal_compilebase.php" => true,
+ "smarty_internal_config.php" => true,
+ "smarty_internal_config_file_compiler.php" => true,
+ "smarty_internal_configfilelexer.php" => true,
+ "smarty_internal_configfileparser.php" => true,
+ "smarty_internal_data.php" => true,
+ "smarty_internal_debug.php" => true,
+ "smarty_internal_filter_handler.php" => true,
+ "smarty_internal_function_call_handler.php" => true,
+ "smarty_internal_get_include_path.php" => true,
+ "smarty_internal_nocache_insert.php" => true,
+ "smarty_internal_parsetree.php" => true,
+ "smarty_internal_resource_eval.php" => true,
+ "smarty_internal_resource_extends.php" => true,
+ "smarty_internal_resource_file.php" => true,
+ "smarty_internal_resource_registered.php" => true,
+ "smarty_internal_resource_stream.php" => true,
+ "smarty_internal_resource_string.php" => true,
+ "smarty_internal_smartytemplatecompiler.php" => true,
+ "smarty_internal_template.php" => true,
+ "smarty_internal_templatebase.php" => true,
+ "smarty_internal_templatecompilerbase.php" => true,
+ "smarty_internal_templatelexer.php" => true,
+ "smarty_internal_templateparser.php" => true,
+ "smarty_internal_utility.php" => true,
+ "smarty_internal_write_file.php" => true,
+ "smarty_resource.php" => true,
+ "smarty_resource_custom.php" => true,
+ "smarty_resource_recompiled.php" => true,
+ "smarty_resource_uncompiled.php" => true,
+ "smarty_security.php" => true,
);
$iterator = new DirectoryIterator($source);
foreach ($iterator as $file) {
@@ -713,7 +723,7 @@ class Smarty_Internal_Utility {
}
if ($expected) {
$status = false;
- $message = "FAILED: files missing from libs/sysplugins: ". join(', ', array_keys($expected));
+ $message = "FAILED: files missing from libs/sysplugins: " . join(', ', array_keys($expected));
if ($errors === null) {
echo $message . ".\n";
} else {
@@ -724,7 +734,7 @@ class Smarty_Internal_Utility {
}
} else {
$status = false;
- $message = "FAILED: ". SMARTY_SYSPLUGINS_DIR .' is not a directory';
+ $message = "FAILED: " . SMARTY_SYSPLUGINS_DIR . ' is not a directory';
if ($errors === null) {
echo $message . ".\n";
} else {
@@ -739,53 +749,53 @@ class Smarty_Internal_Utility {
$source = SMARTY_PLUGINS_DIR;
if (is_dir($source)) {
$expected = array(
- "block.textformat.php" => true,
- "function.counter.php" => true,
- "function.cycle.php" => true,
- "function.fetch.php" => true,
- "function.html_checkboxes.php" => true,
- "function.html_image.php" => true,
- "function.html_options.php" => true,
- "function.html_radios.php" => true,
- "function.html_select_date.php" => true,
- "function.html_select_time.php" => true,
- "function.html_table.php" => true,
- "function.mailto.php" => true,
- "function.math.php" => true,
- "modifier.capitalize.php" => true,
- "modifier.date_format.php" => true,
- "modifier.debug_print_var.php" => true,
- "modifier.escape.php" => true,
- "modifier.regex_replace.php" => true,
- "modifier.replace.php" => true,
- "modifier.spacify.php" => true,
- "modifier.truncate.php" => true,
- "modifiercompiler.cat.php" => true,
+ "block.textformat.php" => true,
+ "function.counter.php" => true,
+ "function.cycle.php" => true,
+ "function.fetch.php" => true,
+ "function.html_checkboxes.php" => true,
+ "function.html_image.php" => true,
+ "function.html_options.php" => true,
+ "function.html_radios.php" => true,
+ "function.html_select_date.php" => true,
+ "function.html_select_time.php" => true,
+ "function.html_table.php" => true,
+ "function.mailto.php" => true,
+ "function.math.php" => true,
+ "modifier.capitalize.php" => true,
+ "modifier.date_format.php" => true,
+ "modifier.debug_print_var.php" => true,
+ "modifier.escape.php" => true,
+ "modifier.regex_replace.php" => true,
+ "modifier.replace.php" => true,
+ "modifier.spacify.php" => true,
+ "modifier.truncate.php" => true,
+ "modifiercompiler.cat.php" => true,
"modifiercompiler.count_characters.php" => true,
"modifiercompiler.count_paragraphs.php" => true,
- "modifiercompiler.count_sentences.php" => true,
- "modifiercompiler.count_words.php" => true,
- "modifiercompiler.default.php" => true,
- "modifiercompiler.escape.php" => true,
- "modifiercompiler.from_charset.php" => true,
- "modifiercompiler.indent.php" => true,
- "modifiercompiler.lower.php" => true,
- "modifiercompiler.noprint.php" => true,
- "modifiercompiler.string_format.php" => true,
- "modifiercompiler.strip.php" => true,
- "modifiercompiler.strip_tags.php" => true,
- "modifiercompiler.to_charset.php" => true,
- "modifiercompiler.unescape.php" => true,
- "modifiercompiler.upper.php" => true,
- "modifiercompiler.wordwrap.php" => true,
- "outputfilter.trimwhitespace.php" => true,
- "shared.escape_special_chars.php" => true,
- "shared.literal_compiler_param.php" => true,
- "shared.make_timestamp.php" => true,
- "shared.mb_str_replace.php" => true,
- "shared.mb_unicode.php" => true,
- "shared.mb_wordwrap.php" => true,
- "variablefilter.htmlspecialchars.php" => true,
+ "modifiercompiler.count_sentences.php" => true,
+ "modifiercompiler.count_words.php" => true,
+ "modifiercompiler.default.php" => true,
+ "modifiercompiler.escape.php" => true,
+ "modifiercompiler.from_charset.php" => true,
+ "modifiercompiler.indent.php" => true,
+ "modifiercompiler.lower.php" => true,
+ "modifiercompiler.noprint.php" => true,
+ "modifiercompiler.string_format.php" => true,
+ "modifiercompiler.strip.php" => true,
+ "modifiercompiler.strip_tags.php" => true,
+ "modifiercompiler.to_charset.php" => true,
+ "modifiercompiler.unescape.php" => true,
+ "modifiercompiler.upper.php" => true,
+ "modifiercompiler.wordwrap.php" => true,
+ "outputfilter.trimwhitespace.php" => true,
+ "shared.escape_special_chars.php" => true,
+ "shared.literal_compiler_param.php" => true,
+ "shared.make_timestamp.php" => true,
+ "shared.mb_str_replace.php" => true,
+ "shared.mb_unicode.php" => true,
+ "shared.mb_wordwrap.php" => true,
+ "variablefilter.htmlspecialchars.php" => true,
);
$iterator = new DirectoryIterator($source);
foreach ($iterator as $file) {
@@ -798,7 +808,7 @@ class Smarty_Internal_Utility {
}
if ($expected) {
$status = false;
- $message = "FAILED: files missing from libs/plugins: ". join(', ', array_keys($expected));
+ $message = "FAILED: files missing from libs/plugins: " . join(', ', array_keys($expected));
if ($errors === null) {
echo $message . ".\n";
} else {
@@ -809,7 +819,7 @@ class Smarty_Internal_Utility {
}
} else {
$status = false;
- $message = "FAILED: ". SMARTY_PLUGINS_DIR .' is not a directory';
+ $message = "FAILED: " . SMARTY_PLUGINS_DIR . ' is not a directory';
if ($errors === null) {
echo $message . ".\n";
} else {
@@ -824,7 +834,4 @@ class Smarty_Internal_Utility {
return $status;
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_write_file.php b/library/Smarty/libs/sysplugins/smarty_internal_write_file.php
index e5d19ce8d..f46fe2b6c 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_write_file.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_write_file.php
@@ -2,25 +2,27 @@
/**
* Smarty write file plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsInternal
- * @author Monte Ohrt
+ * @author Monte Ohrt
*/
/**
* Smarty Internal Write File Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsInternal
*/
-class Smarty_Internal_Write_File {
-
+class Smarty_Internal_Write_File
+{
/**
* Writes file in a safe way to disk
*
- * @param string $_filepath complete filepath
- * @param string $_contents file content
- * @param Smarty $smarty smarty instance
+ * @param string $_filepath complete filepath
+ * @param string $_contents file content
+ * @param Smarty $smarty smarty instance
+ *
+ * @throws SmartyException
* @return boolean true
*/
public static function writeFile($_filepath, $_contents, Smarty $smarty)
@@ -38,17 +40,16 @@ class Smarty_Internal_Write_File {
}
// write to tmp file, then move to overt file lock race condition
- $_tmp_file = $_dirpath . DS . uniqid('wrt', true);
+ $_tmp_file = $_dirpath . DS . str_replace(array('.', ','), '_', uniqid('wrt', true));
if (!file_put_contents($_tmp_file, $_contents)) {
error_reporting($_error_reporting);
throw new SmartyException("unable to write file {$_tmp_file}");
- return false;
- }
-
+ }
+
/*
* Windows' rename() fails if the destination exists,
* Linux' rename() properly handles the overwrite.
- * Simply unlink()ing a file might cause other processes
+ * Simply unlink()ing a file might cause other processes
* currently reading that file to fail, but linux' rename()
* seems to be smart enough to handle that for us.
*/
@@ -71,7 +72,6 @@ class Smarty_Internal_Write_File {
if (!$success) {
error_reporting($_error_reporting);
throw new SmartyException("unable to write file {$_filepath}");
- return false;
}
if ($smarty->_file_perms !== null) {
@@ -80,9 +80,7 @@ class Smarty_Internal_Write_File {
umask($old_umask);
}
error_reporting($_error_reporting);
+
return true;
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_resource.php b/library/Smarty/libs/sysplugins/smarty_resource.php
index f79373af3..f478a533d 100644
--- a/library/Smarty/libs/sysplugins/smarty_resource.php
+++ b/library/Smarty/libs/sysplugins/smarty_resource.php
@@ -2,84 +2,91 @@
/**
* Smarty Resource Plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Rodney Rehm
+ * @author Rodney Rehm
*/
/**
* Smarty Resource Plugin
- *
* Base implementation for resource plugins
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
*/
-abstract class Smarty_Resource {
+abstract class Smarty_Resource
+{
/**
* cache for Smarty_Template_Source instances
+ *
* @var array
*/
public static $sources = array();
/**
* cache for Smarty_Template_Compiled instances
+ *
* @var array
*/
public static $compileds = array();
/**
* cache for Smarty_Resource instances
+ *
* @var array
*/
public static $resources = array();
/**
* resource types provided by the core
+ *
* @var array
*/
protected static $sysplugins = array(
- 'file' => true,
- 'string' => true,
+ 'file' => true,
+ 'string' => true,
'extends' => true,
- 'stream' => true,
- 'eval' => true,
- 'php' => true
+ 'stream' => true,
+ 'eval' => true,
+ 'php' => true
);
/**
* Name of the Class to compile this resource's contents with
+ *
* @var string
*/
public $compiler_class = 'Smarty_Internal_SmartyTemplateCompiler';
/**
* Name of the Class to tokenize this resource's contents with
+ *
* @var string
*/
public $template_lexer_class = 'Smarty_Internal_Templatelexer';
/**
* Name of the Class to parse this resource's contents with
+ *
* @var string
*/
public $template_parser_class = 'Smarty_Internal_Templateparser';
/**
* Load template's source into current template object
- *
* {@internal The loaded source is assigned to $_template->source->content directly.}}
*
- * @param Smarty_Template_Source $source source object
- * @return string template source
- * @throws SmartyException if source cannot be loaded
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string template source
+ * @throws SmartyException if source cannot be loaded
*/
- public abstract function getContent(Smarty_Template_Source $source);
+ abstract public function getContent(Smarty_Template_Source $source);
/**
* populate Source Object with meta data from Resource
*
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
+ * @param Smarty_Template_Source $source source object
+ * @param Smarty_Internal_Template $_template template object
*/
- public abstract function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null);
+ abstract public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null);
/**
* populate Source Object with timestamp and exists from Resource
@@ -91,17 +98,22 @@ abstract class Smarty_Resource {
// intentionally left blank
}
-
/**
* modify resource_name according to resource handlers specifications
*
- * @param Smarty $smarty Smarty instance
- * @param string $resource_name resource_name to make unique
+ * @param Smarty $smarty Smarty instance
+ * @param string $resource_name resource_name to make unique
+ * @param boolean $is_config flag for config resource
+ *
* @return string unique resource name
*/
- protected function buildUniqueResourceName(Smarty $smarty, $resource_name)
+ protected function buildUniqueResourceName(Smarty $smarty, $resource_name, $is_config = false)
{
- return get_class($this) . '#' . $smarty->joined_template_dir . '#' . $resource_name;
+ if ($is_config) {
+ return get_class($this) . '#' . $smarty->joined_config_dir . '#' . $resource_name;
+ } else {
+ return get_class($this) . '#' . $smarty->joined_template_dir . '#' . $resource_name;
+ }
}
/**
@@ -117,9 +129,9 @@ abstract class Smarty_Resource {
// if use_sub_dirs, break file into directories
if ($_template->smarty->use_sub_dirs) {
$_filepath = substr($_filepath, 0, 2) . DS
- . substr($_filepath, 2, 2) . DS
- . substr($_filepath, 4, 2) . DS
- . $_filepath;
+ . substr($_filepath, 2, 2) . DS
+ . substr($_filepath, 4, 2) . DS
+ . $_filepath;
}
$_compile_dir_sep = $_template->smarty->use_sub_dirs ? DS : '^';
if (isset($_compile_id)) {
@@ -135,7 +147,7 @@ abstract class Smarty_Resource {
// set basename if not specified
$_basename = $this->getBasename($compiled->source);
if ($_basename === null) {
- $_basename = basename( preg_replace('![^\w\/]+!', '_', $compiled->source->name) );
+ $_basename = basename(preg_replace('![^\w\/]+!', '_', $compiled->source->name));
}
// separate (optional) basename by dot
if ($_basename) {
@@ -144,59 +156,63 @@ abstract class Smarty_Resource {
$compiled->filepath = $_compile_dir . $_filepath . '.' . $compiled->source->type . $_basename . $_cache . '.php';
}
-
+
/**
- * Normalize Paths "foo/../bar" to "bar"
+ * Normalize Paths "foo/../bar" to "bar"
+ *
+ * @param string $_path path to normalize
+ * @param boolean $ds respect windows directory separator
*
- * @param string $_path path to normalize
- * @param boolean $ds respect windows directory separator
- * @return string normalized path
+ * @return string normalized path
*/
- protected function normalizePath($_path, $ds=true)
+ protected function normalizePath($_path, $ds = true)
{
if ($ds) {
// don't we all just love windows?
$_path = str_replace('\\', '/', $_path);
}
-
+
+ $offset = 0;
+
// resolve simples
- $_path = preg_replace('#(/\./(\./)*)|/{2,}#', '/', $_path);
+ $_path = preg_replace('#/\./(\./)*#', '/', $_path);
// resolve parents
while (true) {
- $_parent = strpos($_path, '/../');
- if ($_parent === false) {
- break;
- } else if ($_parent === 0) {
- $_path = substr($_path, 3);
+ $_parent = strpos($_path, '/../', $offset);
+ if (!$_parent) {
break;
+ } elseif ($_path[$_parent - 1] === '.') {
+ $offset = $_parent + 3;
+ continue;
}
-
+
$_pos = strrpos($_path, '/', $_parent - strlen($_path) - 1);
if ($_pos === false) {
// don't we all just love windows?
$_pos = $_parent;
}
-
+
$_path = substr_replace($_path, '', $_pos, $_parent + 3 - $_pos);
}
-
+
if ($ds && DS != '/') {
// don't we all just love windows?
$_path = str_replace('/', '\\', $_path);
}
-
+
return $_path;
}
-
+
/**
* build template filepath by traversing the template_dir array
*
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
- * @return string fully qualified filepath
- * @throws SmartyException if default template handler is registered but not callable
+ * @param Smarty_Template_Source $source source object
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @return string fully qualified filepath
+ * @throws SmartyException if default template handler is registered but not callable
*/
- protected function buildFilepath(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+ protected function buildFilepath(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
{
$file = $source->name;
if ($source instanceof Smarty_Config_Source) {
@@ -225,8 +241,6 @@ abstract class Smarty_Resource {
// resolve relative path
if (!preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $file)) {
// don't we all just love windows?
- $_path = str_replace('\\', '/', $file);
- $_was_relative_prefix = $file[0] == '.' ? substr($file, 0, strpos($_path, '/')) : null;
$_path = DS . trim($file, '/');
$_was_relative = true;
} else {
@@ -240,11 +254,7 @@ abstract class Smarty_Resource {
}
// revert to relative
if (isset($_was_relative)) {
- if (isset($_was_relative_prefix)){
- $_path = $_was_relative_prefix . $_path;
- } else {
- $_path = substr($_path, 1);
- }
+ $_path = substr($_path, 1);
}
// this is only required for directories
@@ -261,7 +271,7 @@ abstract class Smarty_Resource {
// try string indexes
if (isset($_directories[$match['key']])) {
$_directory = $_directories[$match['key']];
- } else if (is_numeric($match['key'])) {
+ } elseif (is_numeric($match['key'])) {
// try numeric index
$match['key'] = (int) $match['key'];
if (isset($_directories[$match['key']])) {
@@ -323,15 +333,17 @@ abstract class Smarty_Resource {
}
}
$_return = call_user_func_array($_default_handler,
- array($source->type, $source->name, &$_content, &$_timestamp, $source->smarty));
+ array($source->type, $source->name, &$_content, &$_timestamp, $source->smarty));
if (is_string($_return)) {
$source->timestamp = @filemtime($_return);
$source->exists = !!$source->timestamp;
+
return $_return;
} elseif ($_return === true) {
$source->content = $_content;
$source->timestamp = $_timestamp;
$source->exists = true;
+
return $_filepath;
}
}
@@ -343,22 +355,24 @@ abstract class Smarty_Resource {
/**
* test is file exists and save timestamp
*
- * @param Smarty_Template_Source $source source object
- * @param string $file file name
- * @return bool true if file exists
+ * @param Smarty_Template_Source $source source object
+ * @param string $file file name
+ *
+ * @return bool true if file exists
*/
protected function fileExists(Smarty_Template_Source $source, $file)
{
- $source->timestamp = @filemtime($file);
- return $source->exists = !!$source->timestamp;
+ $source->timestamp = is_file($file) ? @filemtime($file) : false;
+ return $source->exists = !!$source->timestamp;
}
/**
* Determine basename for compiled filename
*
- * @param Smarty_Template_Source $source source object
- * @return string resource's basename
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string resource's basename
*/
protected function getBasename(Smarty_Template_Source $source)
{
@@ -368,8 +382,10 @@ abstract class Smarty_Resource {
/**
* Load Resource Handler
*
- * @param Smarty $smarty smarty object
- * @param string $type name of the resource
+ * @param Smarty $smarty smarty object
+ * @param string $type name of the resource
+ *
+ * @throws SmartyException
* @return Smarty_Resource Resource Handler
*/
public static function load(Smarty $smarty, $type)
@@ -403,6 +419,7 @@ abstract class Smarty_Resource {
$_resource_class = 'Smarty_Internal_Resource_' . ucfirst($type);
self::$resources[$type] = new $_resource_class();
}
+
return $smarty->_resource_handlers[$type] = self::$resources[$type];
}
@@ -415,6 +432,7 @@ abstract class Smarty_Resource {
if (class_exists($_resource_class, false)) {
self::$resources[$type] = new $_resource_class();
+
return $smarty->_resource_handlers[$type] = self::$resources[$type];
} else {
$smarty->registerResource($type, array(
@@ -439,23 +457,25 @@ abstract class Smarty_Resource {
if (!isset(self::$resources['stream'])) {
self::$resources['stream'] = new Smarty_Internal_Resource_Stream();
}
+
return $smarty->_resource_handlers[$type] = self::$resources['stream'];
}
// TODO: try default_(template|config)_handler
// give up
- throw new SmartyException("Unkown resource type '{$type}'");
+ throw new SmartyException("Unknown resource type '{$type}'");
}
/**
* extract resource_type and resource_name from template_resource and config_resource
- *
* @note "C:/foo.tpl" was forced to file resource up till Smarty 3.1.3 (including).
- * @param string $resource_name template_resource or config_resource to parse
- * @param string $default_resource the default resource_type defined in $smarty
- * @param string &$name the parsed resource name
- * @param string &$type the parsed resource type
+ *
+ * @param string $resource_name template_resource or config_resource to parse
+ * @param string $default_resource the default resource_type defined in $smarty
+ * @param string &$name the parsed resource name
+ * @param string &$type the parsed resource type
+ *
* @return void
*/
protected static function parseResourceName($resource_name, $default_resource, &$name, &$type)
@@ -472,41 +492,47 @@ abstract class Smarty_Resource {
}
}
-
/**
* modify resource_name according to resource handlers specifications
*
- * @param Smarty $smarty Smarty instance
- * @param string $resource_name resource_name to make unique
+ * @param Smarty $smarty Smarty instance
+ * @param string $resource_name resource_name to make unique
+ *
* @return string unique resource name
*/
/**
* modify template_resource according to resource handlers specifications
*
- * @param string $smarty Smarty instance
- * @param string $template_resource template_resource to extracate resource handler and name of
+ * @param Smarty_Internal_template $template Smarty instance
+ * @param string $template_resource template_resource to extract resource handler and name of
+ *
* @return string unique resource name
*/
- public static function getUniqueTemplateName($smarty, $template_resource)
+ public static function getUniqueTemplateName($template, $template_resource)
{
- self::parseResourceName($template_resource, $smarty->default_resource_type, $name, $type);
+ self::parseResourceName($template_resource, $template->smarty->default_resource_type, $name, $type);
// TODO: optimize for Smarty's internal resource types
- $resource = Smarty_Resource::load($smarty, $type);
- return $resource->buildUniqueResourceName($smarty, $name);
+ $resource = Smarty_Resource::load($template->smarty, $type);
+ // go relative to a given template?
+ $_file_is_dotted = $name[0] == '.' && ($name[1] == '.' || $name[1] == '/' || $name[1] == "\\");
+ if ($template instanceof Smarty_Internal_Template && $_file_is_dotted && ($template->source->type == 'file' || $template->parent->source->type == 'extends')) {
+ $name = dirname($template->source->filepath) . DS . $name;
+ }
+ return $resource->buildUniqueResourceName($template->smarty, $name);
}
/**
* initialize Source Object for given resource
- *
* Either [$_template] or [$smarty, $template_resource] must be specified
*
- * @param Smarty_Internal_Template $_template template object
- * @param Smarty $smarty smarty object
- * @param string $template_resource resource identifier
- * @return Smarty_Template_Source Source Object
+ * @param Smarty_Internal_Template $_template template object
+ * @param Smarty $smarty smarty object
+ * @param string $template_resource resource identifier
+ *
+ * @return Smarty_Template_Source Source Object
*/
- public static function source(Smarty_Internal_Template $_template=null, Smarty $smarty=null, $template_resource=null)
+ public static function source(Smarty_Internal_Template $_template = null, Smarty $smarty = null, $template_resource = null)
{
if ($_template) {
$smarty = $_template->smarty;
@@ -516,12 +542,19 @@ abstract class Smarty_Resource {
// parse resource_name, load resource handler, identify unique resource name
self::parseResourceName($template_resource, $smarty->default_resource_type, $name, $type);
$resource = Smarty_Resource::load($smarty, $type);
- $unique_resource_name = $resource->buildUniqueResourceName($smarty, $name);
+ // go relative to a given template?
+ $_file_is_dotted = isset($name[0]) && $name[0] == '.' && ($name[1] == '.' || $name[1] == '/' || $name[1] == "\\");
+ if ($_file_is_dotted && isset($_template) && $_template->parent instanceof Smarty_Internal_Template && ($_template->parent->source->type == 'file' || $_template->parent->source->type == 'extends')) {
+ $name2 = dirname($_template->parent->source->filepath) . DS . $name;
+ } else {
+ $name2 = $name;
+ }
+ $unique_resource_name = $resource->buildUniqueResourceName($smarty, $name2);
// check runtime cache
$_cache_key = 'template|' . $unique_resource_name;
if ($smarty->compile_id) {
- $_cache_key .= '|'.$smarty->compile_id;
+ $_cache_key .= '|' . $smarty->compile_id;
}
if (isset(self::$sources[$_cache_key])) {
return self::$sources[$_cache_key];
@@ -533,14 +566,17 @@ abstract class Smarty_Resource {
// runtime cache
self::$sources[$_cache_key] = $source;
+
return $source;
}
/**
* initialize Config Source Object for given resource
*
- * @param Smarty_Internal_Config $_config config object
- * @return Smarty_Config_Source Source Object
+ * @param Smarty_Internal_Config $_config config object
+ *
+ * @throws SmartyException
+ * @return Smarty_Config_Source Source Object
*/
public static function config(Smarty_Internal_Config $_config)
{
@@ -558,7 +594,7 @@ abstract class Smarty_Resource {
// load resource handler, identify unique resource name
$resource = Smarty_Resource::load($smarty, $type);
- $unique_resource_name = $resource->buildUniqueResourceName($smarty, $name);
+ $unique_resource_name = $resource->buildUniqueResourceName($smarty, $name, true);
// check runtime cache
$_cache_key = 'config|' . $unique_resource_name;
@@ -572,107 +608,119 @@ abstract class Smarty_Resource {
// runtime cache
self::$sources[$_cache_key] = $source;
+
return $source;
}
-
}
/**
* Smarty Resource Data Object
- *
* Meta Data Container for Template Files
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Rodney Rehm
- *
+ * @author Rodney Rehm
* @property integer $timestamp Source Timestamp
- * @property boolean $exists Source Existance
+ * @property boolean $exists Source Existence
* @property boolean $template Extended Template reference
* @property string $content Source Content
*/
-class Smarty_Template_Source {
-
+class Smarty_Template_Source
+{
/**
* Name of the Class to compile this resource's contents with
+ *
* @var string
*/
public $compiler_class = null;
/**
* Name of the Class to tokenize this resource's contents with
+ *
* @var string
*/
public $template_lexer_class = null;
/**
* Name of the Class to parse this resource's contents with
+ *
* @var string
*/
public $template_parser_class = null;
/**
* Unique Template ID
+ *
* @var string
*/
public $uid = null;
/**
* Template Resource (Smarty_Internal_Template::$template_resource)
+ *
* @var string
*/
public $resource = null;
/**
* Resource Type
+ *
* @var string
*/
public $type = null;
/**
* Resource Name
+ *
* @var string
*/
public $name = null;
/**
* Unique Resource Name
+ *
* @var string
*/
public $unique_resource = null;
/**
* Source Filepath
+ *
* @var string
*/
public $filepath = null;
/**
* Source is bypassing compiler
+ *
* @var boolean
*/
public $uncompiled = null;
/**
* Source must be recompiled on every occasion
+ *
* @var boolean
*/
public $recompiled = null;
/**
* The Components an extended template is made of
+ *
* @var array
*/
public $components = null;
/**
* Resource Handler
+ *
* @var Smarty_Resource
*/
public $handler = null;
/**
* Smarty instance
+ *
* @var Smarty
*/
public $smarty = null;
@@ -680,12 +728,12 @@ class Smarty_Template_Source {
/**
* create Source Object container
*
- * @param Smarty_Resource $handler Resource Handler this source object communicates with
- * @param Smarty $smarty Smarty instance this source object belongs to
- * @param string $resource full template_resource
- * @param string $type type of resource
- * @param string $name resource name
- * @param string $unique_resource unqiue resource name
+ * @param Smarty_Resource $handler Resource Handler this source object communicates with
+ * @param Smarty $smarty Smarty instance this source object belongs to
+ * @param string $resource full template_resource
+ * @param string $type type of resource
+ * @param string $name resource name
+ * @param string $unique_resource unique resource name
*/
public function __construct(Smarty_Resource $handler, Smarty $smarty, $resource, $type, $name, $unique_resource)
{
@@ -707,10 +755,11 @@ class Smarty_Template_Source {
/**
* get a Compiled Object of this source
*
- * @param Smarty_Internal_Template $_template template objet
+ * @param Smarty_Internal_Template|Smarty_Internal_Config $_template template object
+ *
* @return Smarty_Template_Compiled compiled object
*/
- public function getCompiled(Smarty_Internal_Template $_template)
+ public function getCompiled($_template)
{
// check runtime cache
$_cache_key = $this->unique_resource . '#' . $_template->compile_id;
@@ -742,8 +791,9 @@ class Smarty_Template_Source {
/**
* <<magic>> Generic Setter.
*
- * @param string $property_name valid: timestamp, exists, content, template
- * @param mixed $value new value (is not checked)
+ * @param string $property_name valid: timestamp, exists, content, template
+ * @param mixed $value new value (is not checked)
+ *
* @throws SmartyException if $property_name is not valid
*/
public function __set($property_name, $value)
@@ -753,7 +803,7 @@ class Smarty_Template_Source {
case 'timestamp':
case 'exists':
case 'content':
- // required for extends: only
+ // required for extends: only
case 'template':
$this->$property_name = $value;
break;
@@ -766,7 +816,8 @@ class Smarty_Template_Source {
/**
* <<magic>> Generic getter.
*
- * @param string $property_name valid: timestamp, exists, content
+ * @param string $property_name valid: timestamp, exists, content
+ *
* @return mixed
* @throws SmartyException if $property_name is not valid
*/
@@ -776,6 +827,7 @@ class Smarty_Template_Source {
case 'timestamp':
case 'exists':
$this->handler->populateTimestamp($this);
+
return $this->$property_name;
case 'content':
@@ -785,62 +837,65 @@ class Smarty_Template_Source {
throw new SmartyException("source property '$property_name' does not exist.");
}
}
-
}
/**
* Smarty Resource Data Object
- *
* Meta Data Container for Template Files
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Rodney Rehm
- *
+ * @author Rodney Rehm
* @property string $content compiled content
*/
-class Smarty_Template_Compiled {
-
+class Smarty_Template_Compiled
+{
/**
* Compiled Filepath
+ *
* @var string
*/
public $filepath = null;
/**
* Compiled Timestamp
+ *
* @var integer
*/
public $timestamp = null;
/**
- * Compiled Existance
+ * Compiled Existence
+ *
* @var boolean
*/
public $exists = false;
/**
* Compiled Content Loaded
+ *
* @var boolean
*/
public $loaded = false;
/**
* Template was compiled
+ *
* @var boolean
*/
public $isCompiled = false;
/**
* Source Object
+ *
* @var Smarty_Template_Source
*/
public $source = null;
/**
* Metadata properties
- *
* populated by Smarty_Internal_Template::decodeProperties()
+ *
* @var array
*/
public $_properties = null;
@@ -854,7 +909,4 @@ class Smarty_Template_Compiled {
{
$this->source = $source;
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_resource_custom.php b/library/Smarty/libs/sysplugins/smarty_resource_custom.php
index 9ec1f356b..7c11bd8c7 100644
--- a/library/Smarty/libs/sysplugins/smarty_resource_custom.php
+++ b/library/Smarty/libs/sysplugins/smarty_resource_custom.php
@@ -2,21 +2,20 @@
/**
* Smarty Resource Plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Rodney Rehm
+ * @author Rodney Rehm
*/
/**
* Smarty Resource Plugin
- *
* Wrapper Implementation for custom resource plugins
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
*/
-abstract class Smarty_Resource_Custom extends Smarty_Resource {
-
+abstract class Smarty_Resource_Custom extends Smarty_Resource
+{
/**
* fetch template and its modification time from data source
*
@@ -24,15 +23,15 @@ abstract class Smarty_Resource_Custom extends Smarty_Resource {
* @param string &$source template source
* @param integer &$mtime template modification timestamp (epoch)
*/
- protected abstract function fetch($name, &$source, &$mtime);
+ abstract protected function fetch($name, &$source, &$mtime);
/**
* Fetch template's modification timestamp from data source
- *
* {@internal implementing this method is optional.
* Only implement it if modification times can be accessed faster than loading the complete template source.}}
*
- * @param string $name template name
+ * @param string $name template name
+ *
* @return integer|boolean timestamp (epoch) the template was modified, or false if not found
*/
protected function fetchTimestamp($name)
@@ -46,9 +45,9 @@ abstract class Smarty_Resource_Custom extends Smarty_Resource {
* @param Smarty_Template_Source $source source object
* @param Smarty_Internal_Template $_template template object
*/
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+ public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
{
- $source->filepath = strtolower($source->type . ':' . $source->name);
+ $source->filepath = $source->type . ':' . $source->name;
$source->uid = sha1($source->type . ':' . $source->name);
$mtime = $this->fetchTimestamp($source->name);
@@ -57,8 +56,9 @@ abstract class Smarty_Resource_Custom extends Smarty_Resource {
} else {
$this->fetch($source->name, $content, $timestamp);
$source->timestamp = isset($timestamp) ? $timestamp : false;
- if( isset($content) )
+ if (isset($content)) {
$source->content = $content;
+ }
}
$source->exists = !!$source->timestamp;
}
@@ -66,9 +66,10 @@ abstract class Smarty_Resource_Custom extends Smarty_Resource {
/**
* Load template's source into current template object
*
- * @param Smarty_Template_Source $source source object
- * @return string template source
- * @throws SmartyException if source cannot be loaded
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string template source
+ * @throws SmartyException if source cannot be loaded
*/
public function getContent(Smarty_Template_Source $source)
{
@@ -83,14 +84,12 @@ abstract class Smarty_Resource_Custom extends Smarty_Resource {
/**
* Determine basename for compiled filename
*
- * @param Smarty_Template_Source $source source object
- * @return string resource's basename
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string resource's basename
*/
protected function getBasename(Smarty_Template_Source $source)
{
return basename($source->name);
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_resource_recompiled.php b/library/Smarty/libs/sysplugins/smarty_resource_recompiled.php
index ab55b93a6..66b36e17a 100644
--- a/library/Smarty/libs/sysplugins/smarty_resource_recompiled.php
+++ b/library/Smarty/libs/sysplugins/smarty_resource_recompiled.php
@@ -2,26 +2,26 @@
/**
* Smarty Resource Plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Rodney Rehm
+ * @author Rodney Rehm
*/
/**
* Smarty Resource Plugin
- *
* Base implementation for resource plugins that don't compile cache
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
*/
-abstract class Smarty_Resource_Recompiled extends Smarty_Resource {
-
+abstract class Smarty_Resource_Recompiled extends Smarty_Resource
+{
/**
* populate Compiled Object with compiled filepath
*
- * @param Smarty_Template_Compiled $compiled compiled object
- * @param Smarty_Internal_Template $_template template object
+ * @param Smarty_Template_Compiled $compiled compiled object
+ * @param Smarty_Internal_Template $_template template object
+ *
* @return void
*/
public function populateCompiledFilepath(Smarty_Template_Compiled $compiled, Smarty_Internal_Template $_template)
@@ -30,7 +30,4 @@ abstract class Smarty_Resource_Recompiled extends Smarty_Resource {
$compiled->timestamp = false;
$compiled->exists = false;
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_resource_uncompiled.php b/library/Smarty/libs/sysplugins/smarty_resource_uncompiled.php
index ea8023507..4ee5d7908 100644
--- a/library/Smarty/libs/sysplugins/smarty_resource_uncompiled.php
+++ b/library/Smarty/libs/sysplugins/smarty_resource_uncompiled.php
@@ -2,29 +2,29 @@
/**
* Smarty Resource Plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Rodney Rehm
+ * @author Rodney Rehm
*/
/**
* Smarty Resource Plugin
- *
* Base implementation for resource plugins that don't use the compiler
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
*/
-abstract class Smarty_Resource_Uncompiled extends Smarty_Resource {
-
+abstract class Smarty_Resource_Uncompiled extends Smarty_Resource
+{
/**
* Render and output the template (without using the compiler)
*
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
- * @throws SmartyException on failure
+ * @param Smarty_Template_Source $source source object
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @throws SmartyException on failure
*/
- public abstract function renderUncompiled(Smarty_Template_Source $source, Smarty_Internal_Template $_template);
+ abstract public function renderUncompiled(Smarty_Template_Source $source, Smarty_Internal_Template $_template);
/**
* populate compiled object with compiled filepath
@@ -38,7 +38,4 @@ abstract class Smarty_Resource_Uncompiled extends Smarty_Resource {
$compiled->timestamp = false;
$compiled->exists = false;
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/Smarty/libs/sysplugins/smarty_security.php b/library/Smarty/libs/sysplugins/smarty_security.php
index f8b31d963..9f7183bd0 100644
--- a/library/Smarty/libs/sysplugins/smarty_security.php
+++ b/library/Smarty/libs/sysplugins/smarty_security.php
@@ -2,25 +2,25 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage Security
- * @author Uwe Tews
+ * @author Uwe Tews
*/
-
+
/*
* FIXME: Smarty_Security API
* - getter and setter instead of public properties would allow cultivating an internal cache properly
* - current implementation of isTrustedResourceDir() assumes that Smarty::$template_dir and Smarty::$config_dir are immutable
* the cache is killed every time either of the variables change. That means that two distinct Smarty objects with differing
- * $template_dir or $config_dir should NOT share the same Smarty_Security instance,
- * as this would lead to (severe) performance penalty! how should this be handled?
+ * $template_dir or $config_dir should NOT share the same Smarty_Security instance,
+ * as this would lead to (severe) performance penalty! how should this be handled?
*/
/**
* This class does contain the security settings
*/
-class Smarty_Security {
-
+class Smarty_Security
+{
/**
* This determines how Smarty handles "<?php ... ?>" tags in templates.
* possible values:
@@ -56,17 +56,17 @@ class Smarty_Security {
public $trusted_uri = array();
/**
* This is an array of trusted static classes.
- *
* If empty access to all static classes is allowed.
* If set to 'none' none is allowed.
+ *
* @var array
*/
public $static_classes = array();
/**
* This is an array of trusted PHP functions.
- *
* If empty all functions are allowed.
* To disable all PHP functions set $php_functions = null.
+ *
* @var array
*/
public $php_functions = array(
@@ -77,10 +77,10 @@ class Smarty_Security {
'nl2br',
);
/**
- * This is an array of trusted PHP modifers.
- *
+ * This is an array of trusted PHP modifiers.
* If empty all modifiers are allowed.
- * To disable all modifier set $modifiers = null.
+ * To disable all modifier set $php_modifiers = null.
+ *
* @var array
*/
public $php_modifiers = array(
@@ -89,83 +89,90 @@ class Smarty_Security {
);
/**
* This is an array of allowed tags.
- *
* If empty no restriction by allowed_tags.
+ *
* @var array
*/
public $allowed_tags = array();
/**
* This is an array of disabled tags.
- *
* If empty no restriction by disabled_tags.
+ *
* @var array
*/
public $disabled_tags = array();
/**
* This is an array of allowed modifier plugins.
- *
* If empty no restriction by allowed_modifiers.
+ *
* @var array
*/
public $allowed_modifiers = array();
/**
* This is an array of disabled modifier plugins.
- *
* If empty no restriction by disabled_modifiers.
+ *
* @var array
*/
public $disabled_modifiers = array();
/**
* This is an array of trusted streams.
- *
* If empty all streams are allowed.
* To disable all streams set $streams = null.
+ *
* @var array
*/
public $streams = array('file');
/**
* + flag if constants can be accessed from template
+ *
* @var boolean
*/
public $allow_constants = true;
/**
* + flag if super globals can be accessed from template
+ *
* @var boolean
*/
public $allow_super_globals = true;
/**
- * Cache for $resource_dir lookups
+ * Cache for $resource_dir lookup
+ *
* @var array
*/
protected $_resource_dir = null;
/**
- * Cache for $template_dir lookups
+ * Cache for $template_dir lookup
+ *
* @var array
*/
protected $_template_dir = null;
/**
- * Cache for $config_dir lookups
+ * Cache for $config_dir lookup
+ *
* @var array
*/
protected $_config_dir = null;
/**
- * Cache for $secure_dir lookups
+ * Cache for $secure_dir lookup
+ *
* @var array
*/
protected $_secure_dir = null;
/**
- * Cache for $php_resource_dir lookups
+ * Cache for $php_resource_dir lookup
+ *
* @var array
*/
protected $_php_resource_dir = null;
/**
- * Cache for $trusted_dir lookups
+ * Cache for $trusted_dir lookup
+ *
* @var array
*/
protected $_trusted_dir = null;
-
-
+
/**
* @param Smarty $smarty
*/
@@ -173,13 +180,14 @@ class Smarty_Security {
{
$this->smarty = $smarty;
}
-
+
/**
* Check if PHP function is trusted.
*
- * @param string $function_name
- * @param object $compiler compiler object
- * @return boolean true if function is trusted
+ * @param string $function_name
+ * @param object $compiler compiler object
+ *
+ * @return boolean true if function is trusted
* @throws SmartyCompilerException if php function is not trusted
*/
public function isTrustedPhpFunction($function_name, $compiler)
@@ -189,15 +197,17 @@ class Smarty_Security {
}
$compiler->trigger_template_error("PHP function '{$function_name}' not allowed by security setting");
+
return false; // should not, but who knows what happens to the compiler in the future?
}
/**
* Check if static class is trusted.
*
- * @param string $class_name
- * @param object $compiler compiler object
- * @return boolean true if class is trusted
+ * @param string $class_name
+ * @param object $compiler compiler object
+ *
+ * @return boolean true if class is trusted
* @throws SmartyCompilerException if static class is not trusted
*/
public function isTrustedStaticClass($class_name, $compiler)
@@ -207,15 +217,17 @@ class Smarty_Security {
}
$compiler->trigger_template_error("access to static class '{$class_name}' not allowed by security setting");
+
return false; // should not, but who knows what happens to the compiler in the future?
}
/**
* Check if PHP modifier is trusted.
*
- * @param string $modifier_name
- * @param object $compiler compiler object
- * @return boolean true if modifier is trusted
+ * @param string $modifier_name
+ * @param object $compiler compiler object
+ *
+ * @return boolean true if modifier is trusted
* @throws SmartyCompilerException if modifier is not trusted
*/
public function isTrustedPhpModifier($modifier_name, $compiler)
@@ -225,22 +237,25 @@ class Smarty_Security {
}
$compiler->trigger_template_error("modifier '{$modifier_name}' not allowed by security setting");
+
return false; // should not, but who knows what happens to the compiler in the future?
}
/**
* Check if tag is trusted.
*
- * @param string $tag_name
- * @param object $compiler compiler object
- * @return boolean true if tag is trusted
+ * @param string $tag_name
+ * @param object $compiler compiler object
+ *
+ * @return boolean true if tag is trusted
* @throws SmartyCompilerException if modifier is not trusted
*/
public function isTrustedTag($tag_name, $compiler)
{
// check for internal always required tags
if (in_array($tag_name, array('assign', 'call', 'private_filter', 'private_block_plugin', 'private_function_plugin', 'private_object_block_function',
- 'private_object_function', 'private_registered_function', 'private_registered_block', 'private_special_variable', 'private_print_expression', 'private_modifier'))) {
+ 'private_object_function', 'private_registered_function', 'private_registered_block', 'private_special_variable', 'private_print_expression', 'private_modifier'))
+ ) {
return true;
}
// check security settings
@@ -250,20 +265,22 @@ class Smarty_Security {
} else {
$compiler->trigger_template_error("tag '{$tag_name}' disabled by security setting", $compiler->lex->taglineno);
}
- } else if (in_array($tag_name, $this->allowed_tags) && !in_array($tag_name, $this->disabled_tags)) {
+ } elseif (in_array($tag_name, $this->allowed_tags) && !in_array($tag_name, $this->disabled_tags)) {
return true;
} else {
$compiler->trigger_template_error("tag '{$tag_name}' not allowed by security setting", $compiler->lex->taglineno);
}
+
return false; // should not, but who knows what happens to the compiler in the future?
}
/**
* Check if modifier plugin is trusted.
*
- * @param string $modifier_name
- * @param object $compiler compiler object
- * @return boolean true if tag is trusted
+ * @param string $modifier_name
+ * @param object $compiler compiler object
+ *
+ * @return boolean true if tag is trusted
* @throws SmartyCompilerException if modifier is not trusted
*/
public function isTrustedModifier($modifier_name, $compiler)
@@ -279,19 +296,21 @@ class Smarty_Security {
} else {
$compiler->trigger_template_error("modifier '{$modifier_name}' disabled by security setting", $compiler->lex->taglineno);
}
- } else if (in_array($modifier_name, $this->allowed_modifiers) && !in_array($modifier_name, $this->disabled_modifiers)) {
+ } elseif (in_array($modifier_name, $this->allowed_modifiers) && !in_array($modifier_name, $this->disabled_modifiers)) {
return true;
} else {
$compiler->trigger_template_error("modifier '{$modifier_name}' not allowed by security setting", $compiler->lex->taglineno);
}
+
return false; // should not, but who knows what happens to the compiler in the future?
}
/**
* Check if stream is trusted.
*
- * @param string $stream_name
- * @return boolean true if stream is trusted
+ * @param string $stream_name
+ *
+ * @return boolean true if stream is trusted
* @throws SmartyException if stream is not trusted
*/
public function isTrustedStream($stream_name)
@@ -306,8 +325,9 @@ class Smarty_Security {
/**
* Check if directory of file resource is trusted.
*
- * @param string $filepath
- * @return boolean true if directory is trusted
+ * @param string $filepath
+ *
+ * @return boolean true if directory is trusted
* @throws SmartyException if directory is not trusted
*/
public function isTrustedResourceDir($filepath)
@@ -321,8 +341,8 @@ class Smarty_Security {
// check if index is outdated
if ((!$this->_template_dir || $this->_template_dir !== $_template_dir)
- || (!$this->_config_dir || $this->_config_dir !== $_config_dir)
- || (!empty($this->secure_dir) && (!$this->_secure_dir || $this->_secure_dir !== $this->secure_dir))
+ || (!$this->_config_dir || $this->_config_dir !== $_config_dir)
+ || (!empty($this->secure_dir) && (!$this->_secure_dir || $this->_secure_dir !== $this->secure_dir))
) {
$this->_resource_dir = array();
$_template = true;
@@ -365,8 +385,9 @@ class Smarty_Security {
$_directory[$directory] = true;
// test if the directory is trusted
if (isset($this->_resource_dir[$directory])) {
- // merge sub directories of current $directory into _resource_dir to speed up subsequent lookups
+ // merge sub directories of current $directory into _resource_dir to speed up subsequent lookup
$this->_resource_dir = array_merge($this->_resource_dir, $_directory);
+
return true;
}
// abort if we've reached root
@@ -380,15 +401,16 @@ class Smarty_Security {
// give up
throw new SmartyException("directory '{$_filepath}' not allowed by security setting");
}
-
+
/**
* Check if URI (e.g. {fetch} or {html_image}) is trusted
- *
* To simplify things, isTrustedUri() resolves all input to "{$PROTOCOL}://{$HOSTNAME}".
* So "http://username:password@hello.world.example.org:8080/some-path?some=query-string"
* is reduced to "http://hello.world.example.org" prior to applying the patters from {@link $trusted_uri}.
- * @param string $uri
- * @return boolean true if URI is trusted
+ *
+ * @param string $uri
+ *
+ * @return boolean true if URI is trusted
* @throws SmartyException if URI is not trusted
* @uses $trusted_uri for list of patterns to match against $uri
*/
@@ -403,15 +425,16 @@ class Smarty_Security {
}
}
}
-
+
throw new SmartyException("URI '{$uri}' not allowed by security setting");
}
-
+
/**
* Check if directory of file resource is trusted.
*
- * @param string $filepath
- * @return boolean true if directory is trusted
+ * @param string $filepath
+ *
+ * @return boolean true if directory is trusted
* @throws SmartyException if PHP directory is not trusted
*/
public function isTrustedPHPDir($filepath)
@@ -439,8 +462,9 @@ class Smarty_Security {
$_directory[] = $directory;
// test if the directory is trusted
if (isset($this->_php_resource_dir[$directory])) {
- // merge sub directories of current $directory into _resource_dir to speed up subsequent lookups
+ // merge sub directories of current $directory into _resource_dir to speed up subsequent lookup
$this->_php_resource_dir = array_merge($this->_php_resource_dir, $_directory);
+
return true;
}
// abort if we've reached root
@@ -453,7 +477,4 @@ class Smarty_Security {
throw new SmartyException("directory '{$_filepath}' not allowed by security setting");
}
-
}
-
-?> \ No newline at end of file
diff --git a/library/blueimp_upload/.gitignore b/library/blueimp_upload/.gitignore
new file mode 100644
index 000000000..29a41a8c4
--- /dev/null
+++ b/library/blueimp_upload/.gitignore
@@ -0,0 +1,3 @@
+.DS_Store
+*.pyc
+node_modules
diff --git a/library/blueimp_upload/.jshintrc b/library/blueimp_upload/.jshintrc
new file mode 100644
index 000000000..4ad82e664
--- /dev/null
+++ b/library/blueimp_upload/.jshintrc
@@ -0,0 +1,81 @@
+{
+ "bitwise" : true, // true: Prohibit bitwise operators (&, |, ^, etc.)
+ "camelcase" : true, // true: Identifiers must be in camelCase
+ "curly" : true, // true: Require {} for every new block or scope
+ "eqeqeq" : true, // true: Require triple equals (===) for comparison
+ "forin" : true, // true: Require filtering for..in loops with obj.hasOwnProperty()
+ "immed" : true, // true: Require immediate invocations to be wrapped in parens
+ // e.g. `(function () { } ());`
+ "indent" : 4, // {int} Number of spaces to use for indentation
+ "latedef" : true, // true: Require variables/functions to be defined before being used
+ "newcap" : true, // true: Require capitalization of all constructor functions e.g. `new F()`
+ "noarg" : true, // true: Prohibit use of `arguments.caller` and `arguments.callee`
+ "noempty" : true, // true: Prohibit use of empty blocks
+ "nonew" : true, // true: Prohibit use of constructors for side-effects (without assignment)
+ "plusplus" : false, // true: Prohibit use of `++` & `--`
+ "quotmark" : "single", // Quotation mark consistency:
+ // false : do nothing (default)
+ // true : ensure whatever is used is consistent
+ // "single" : require single quotes
+ // "double" : require double quotes
+ "undef" : true, // true: Require all non-global variables to be declared (prevents global leaks)
+ "unused" : true, // true: Require all defined variables be used
+ "strict" : true, // true: Requires all functions run in ES5 Strict Mode
+ "trailing" : true, // true: Prohibit trailing whitespaces
+ "maxparams" : false, // {int} Max number of formal params allowed per function
+ "maxdepth" : false, // {int} Max depth of nested blocks (within functions)
+ "maxstatements" : false, // {int} Max number statements per function
+ "maxcomplexity" : false, // {int} Max cyclomatic complexity per function
+ "maxlen" : false, // {int} Max number of characters per line
+
+ // Relaxing
+ "asi" : false, // true: Tolerate Automatic Semicolon Insertion (no semicolons)
+ "boss" : false, // true: Tolerate assignments where comparisons would be expected
+ "debug" : false, // true: Allow debugger statements e.g. browser breakpoints.
+ "eqnull" : false, // true: Tolerate use of `== null`
+ "es5" : false, // true: Allow ES5 syntax (ex: getters and setters)
+ "esnext" : false, // true: Allow ES.next (ES6) syntax (ex: `const`)
+ "moz" : false, // true: Allow Mozilla specific syntax (extends and overrides esnext features)
+ // (ex: `for each`, multiple try/catch, function expression…)
+ "evil" : false, // true: Tolerate use of `eval` and `new Function()`
+ "expr" : false, // true: Tolerate `ExpressionStatement` as Programs
+ "funcscope" : false, // true: Tolerate defining variables inside control statements"
+ "globalstrict" : false, // true: Allow global "use strict" (also enables 'strict')
+ "iterator" : false, // true: Tolerate using the `__iterator__` property
+ "lastsemic" : false, // true: Tolerate omitting a semicolon for the last statement of a 1-line block
+ "laxbreak" : false, // true: Tolerate possibly unsafe line breakings
+ "laxcomma" : false, // true: Tolerate comma-first style coding
+ "loopfunc" : false, // true: Tolerate functions being defined in loops
+ "multistr" : false, // true: Tolerate multi-line strings
+ "proto" : false, // true: Tolerate using the `__proto__` property
+ "scripturl" : false, // true: Tolerate script-targeted URLs
+ "smarttabs" : false, // true: Tolerate mixed tabs/spaces when used for alignment
+ "shadow" : false, // true: Allows re-define variables later in code e.g. `var x=1; x=2;`
+ "sub" : false, // true: Tolerate using `[]` notation when it can still be expressed in dot notation
+ "supernew" : false, // true: Tolerate `new function () { ... };` and `new Object;`
+ "validthis" : false, // true: Tolerate using this in a non-constructor function
+
+ // Environments
+ "browser" : false, // Web Browser (window, document, etc)
+ "couch" : false, // CouchDB
+ "devel" : false, // Development/debugging (alert, confirm, etc)
+ "dojo" : false, // Dojo Toolkit
+ "jquery" : false, // jQuery
+ "mootools" : false, // MooTools
+ "node" : false, // Node.js
+ "nonstandard" : false, // Widely adopted globals (escape, unescape, etc)
+ "prototypejs" : false, // Prototype and Scriptaculous
+ "rhino" : false, // Rhino
+ "worker" : false, // Web Workers
+ "wsh" : false, // Windows Scripting Host
+ "yui" : false, // Yahoo User Interface
+
+ // Legacy
+ "nomen" : true, // true: Prohibit dangling `_` in variables
+ "onevar" : true, // true: Allow only one `var` statement per function
+ "passfail" : false, // true: Stop on first error
+ "white" : true, // true: Check against strict whitespace and indentation rules
+
+ // Custom Globals
+ "globals" : {} // additional predefined global variables
+}
diff --git a/library/blueimp_upload/CONTRIBUTING.md b/library/blueimp_upload/CONTRIBUTING.md
new file mode 100644
index 000000000..b8708f8b6
--- /dev/null
+++ b/library/blueimp_upload/CONTRIBUTING.md
@@ -0,0 +1,42 @@
+# Issue Guidelines
+
+The issues tracker should only be used for **bugs** or **feature requests**.
+
+Please post **support requests** and **general discussions** about this project to the [support forum](https://groups.google.com/d/forum/jquery-fileupload).
+
+## Bugs
+
+Please follow these guidelines before reporting a bug:
+
+1. **Update to the latest version** &mdash; Check if you can reproduce the issue with the latest version from the `master` branch.
+
+2. **Use the GitHub issue search** &mdash; check if the issue has already been reported. If it has been, please comment on the existing issue.
+
+3. **Isolate the demonstrable problem** &mdash; Try to reproduce the problem with the [Demo](https://blueimp.github.io/jQuery-File-Upload/) or with a reduced test case that includes the least amount of code necessary to reproduce the problem.
+
+4. **Provide a means to reproduce the problem** &mdash; Please provide as much details as possible, e.g. server information, browser and operating system versions, steps to reproduce the problem. If possible, provide a link to your reduced test case, e.g. via [JSFiddle](http://jsfiddle.net/).
+
+
+## Feature requests
+
+Please follow the bug guidelines above for feature requests, i.e. update to the latest version and search for exising issues before posting a new request.
+
+Generally, feature requests might be accepted if the implementation would benefit a broader use case or the project could be considered incomplete without that feature.
+
+If you need help integrating this project into another framework, please post your request to the [support forum](https://groups.google.com/d/forum/jquery-fileupload).
+
+## Pull requests
+
+[Pull requests](https://help.github.com/articles/using-pull-requests) are welcome and the preferred way of accepting code contributions.
+
+However, if you add a server-side upload handler implementation for another framework, please continue to maintain this version in your own fork without sending a pull request. You are welcome to add a link and possibly documentation about your implementation to the [Wiki](https://github.com/blueimp/jQuery-File-Upload/wiki).
+
+Please follow these guidelines before sending a pull request:
+
+1. Update your fork to the latest upstream version.
+
+2. Follow the coding conventions of the original repository. Changes to one of the JavaScript source files are required to pass the [JSHint](http://www.jshint.com/) validation tool.
+
+3. Keep your commits as atomar as possible, i.e. create a new commit for every single bug fix or feature added.
+
+4. Always add meaningfull commit messages.
diff --git a/library/blueimp_upload/Gruntfile.js b/library/blueimp_upload/Gruntfile.js
new file mode 100644
index 000000000..dcdb5d57a
--- /dev/null
+++ b/library/blueimp_upload/Gruntfile.js
@@ -0,0 +1,37 @@
+/*
+ * jQuery File Upload Gruntfile
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/*global module */
+
+module.exports = function (grunt) {
+ 'use strict';
+
+ grunt.initConfig({
+ jshint: {
+ options: {
+ jshintrc: '.jshintrc'
+ },
+ all: [
+ 'Gruntfile.js',
+ 'js/cors/*.js',
+ 'js/*.js',
+ 'server/node/server.js',
+ 'test/test.js'
+ ]
+ }
+ });
+
+ grunt.loadNpmTasks('grunt-contrib-jshint');
+ grunt.loadNpmTasks('grunt-bump-build-git');
+ grunt.registerTask('test', ['jshint']);
+ grunt.registerTask('default', ['test']);
+
+};
diff --git a/library/blueimp_upload/README.md b/library/blueimp_upload/README.md
new file mode 100644
index 000000000..3aa33de42
--- /dev/null
+++ b/library/blueimp_upload/README.md
@@ -0,0 +1,123 @@
+# jQuery File Upload Plugin
+
+## Demo
+[Demo File Upload](https://blueimp.github.io/jQuery-File-Upload/)
+
+## Description
+File Upload widget with multiple file selection, drag&amp;drop support, progress bars, validation and preview images, audio and video for jQuery.
+Supports cross-domain, chunked and resumable file uploads and client-side image resizing. Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads.
+
+## Setup
+* [How to setup the plugin on your website](https://github.com/blueimp/jQuery-File-Upload/wiki/Setup)
+* [How to use only the basic plugin (minimal setup guide).](https://github.com/blueimp/jQuery-File-Upload/wiki/Basic-plugin)
+
+## Support
+
+* **[Support Forum](https://groups.google.com/d/forum/jquery-fileupload)**
+**Support requests** and **general discussions** about the File Upload plugin can be posted to the official
+[Support Forum](https://groups.google.com/d/forum/jquery-fileupload).
+If your question is not directly related to the File Upload plugin, you might have a better chance to get a reply by posting to [Stack Overflow](http://stackoverflow.com/questions/tagged/blueimp+jquery+file-upload).
+
+* Bugs and Feature requests
+**Bugs** and **Feature requests** can be reported using the [issues tracker](https://github.com/blueimp/jQuery-File-Upload/issues).
+Please read the [issue guidelines](https://github.com/blueimp/jQuery-File-Upload/blob/master/CONTRIBUTING.md) before posting.
+
+## Features
+* **Multiple file upload:**
+ Allows to select multiple files at once and upload them simultaneously.
+* **Drag & Drop support:**
+ Allows to upload files by dragging them from your desktop or filemanager and dropping them on your browser window.
+* **Upload progress bar:**
+ Shows a progress bar indicating the upload progress for individual files and for all uploads combined.
+* **Cancelable uploads:**
+ Individual file uploads can be canceled to stop the upload progress.
+* **Resumable uploads:**
+ Aborted uploads can be resumed with browsers supporting the Blob API.
+* **Chunked uploads:**
+ Large files can be uploaded in smaller chunks with browsers supporting the Blob API.
+* **Client-side image resizing:**
+ Images can be automatically resized on client-side with browsers supporting the required JS APIs.
+* **Preview images, audio and video:**
+ A preview of image, audio and video files can be displayed before uploading with browsers supporting the required APIs.
+* **No browser plugins (e.g. Adobe Flash) required:**
+ The implementation is based on open standards like HTML5 and JavaScript and requires no additional browser plugins.
+* **Graceful fallback for legacy browsers:**
+ Uploads files via XMLHttpRequests if supported and uses iframes as fallback for legacy browsers.
+* **HTML file upload form fallback:**
+ Allows progressive enhancement by using a standard HTML file upload form as widget element.
+* **Cross-site file uploads:**
+ Supports uploading files to a different domain with cross-site XMLHttpRequests or iframe redirects.
+* **Multiple plugin instances:**
+ Allows to use multiple plugin instances on the same webpage.
+* **Customizable and extensible:**
+ Provides an API to set individual options and define callBack methods for various upload events.
+* **Multipart and file contents stream uploads:**
+ Files can be uploaded as standard "multipart/form-data" or file contents stream (HTTP PUT file upload).
+* **Compatible with any server-side application platform:**
+ Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads.
+
+## Requirements
+
+### Mandatory requirements
+* [jQuery](https://jquery.com/) v. 1.6+
+* [jQuery UI widget factory](https://api.jqueryui.com/jQuery.widget/) v. 1.9+ (included)
+* [jQuery Iframe Transport plugin](https://github.com/blueimp/jQuery-File-Upload/blob/master/js/jquery.iframe-transport.js) (included)
+
+The jQuery UI widget factory is a requirement for the basic File Upload plugin, but very lightweight without any other dependencies from the jQuery UI suite.
+
+The jQuery Iframe Transport is required for [browsers without XHR file upload support](https://github.com/blueimp/jQuery-File-Upload/wiki/Browser-support).
+
+### Optional requirements
+* [JavaScript Templates engine](https://github.com/blueimp/JavaScript-Templates) v. 2.5.4+
+* [JavaScript Load Image library](https://github.com/blueimp/JavaScript-Load-Image) v. 1.13.0+
+* [JavaScript Canvas to Blob polyfill](https://github.com/blueimp/JavaScript-Canvas-to-Blob) v. 2.1.1+
+* [blueimp Gallery](https://github.com/blueimp/Gallery) v. 2.15.1+
+* [Bootstrap CSS framework](http://getbootstrap.com/) v. 3.2.0+
+* [Glyphicons](http://glyphicons.com/)
+
+The JavaScript Templates engine is used to render the selected and uploaded files for the Basic Plus UI and jQuery UI versions.
+
+The JavaScript Load Image library and JavaScript Canvas to Blob polyfill are required for the image previews and resizing functionality.
+
+The blueimp Gallery is used to display the uploaded images in a lightbox.
+
+The user interface of all versions except the jQuery UI version is built with Twitter's [Bootstrap](http://getbootstrap.com/) framework and icons from [Glyphicons](http://glyphicons.com/).
+
+### Cross-domain requirements
+[Cross-domain File Uploads](https://github.com/blueimp/jQuery-File-Upload/wiki/Cross-domain-uploads) using the [Iframe Transport plugin](https://github.com/blueimp/jQuery-File-Upload/blob/master/js/jquery.iframe-transport.js) require a redirect back to the origin server to retrieve the upload results. The [example implementation](https://github.com/blueimp/jQuery-File-Upload/blob/master/js/main.js) makes use of [result.html](https://github.com/blueimp/jQuery-File-Upload/blob/master/cors/result.html) as a static redirect page for the origin server.
+
+The repository also includes the [jQuery XDomainRequest Transport plugin](https://github.com/blueimp/jQuery-File-Upload/blob/master/js/cors/jquery.xdr-transport.js), which enables limited cross-domain AJAX requests in Microsoft Internet Explorer 8 and 9 (IE 10 supports cross-domain XHR requests).
+The XDomainRequest object allows GET and POST requests only and doesn't support file uploads. It is used on the [Demo](https://blueimp.github.io/jQuery-File-Upload/) to delete uploaded files from the cross-domain demo file upload service.
+
+## Browsers
+
+### Desktop browsers
+The File Upload plugin is regularly tested with the latest browser versions and supports the following minimal versions:
+
+* Google Chrome
+* Apple Safari 4.0+
+* Mozilla Firefox 3.0+
+* Opera 11.0+
+* Microsoft Internet Explorer 6.0+
+
+### Mobile browsers
+The File Upload plugin has been tested with and supports the following mobile browsers:
+
+* Apple Safari on iOS 6.0+
+* Google Chrome on iOS 6.0+
+* Google Chrome on Android 4.0+
+* Default Browser on Android 2.3+
+* Opera Mobile 12.0+
+
+### Supported features
+For a detailed overview of the features supported by each browser version please have a look at the [Extended browser support information](https://github.com/blueimp/jQuery-File-Upload/wiki/Browser-support).
+
+## License
+Released under the [MIT license](http://www.opensource.org/licenses/MIT).
+
+## Donations
+jQuery File Upload is free software, but you can donate to support the developer, Sebastian Tschan:
+
+Flattr: [![Flattr](https://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/thing/286433/jQuery-File-Upload-Plugin)
+
+PayPal: [![PayPal](https://www.paypalobjects.com/WEBSCR-640-20110429-1/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=PYWYSYP77KL54)
diff --git a/library/blueimp_upload/angularjs.html b/library/blueimp_upload/angularjs.html
new file mode 100644
index 000000000..2a3ca2007
--- /dev/null
+++ b/library/blueimp_upload/angularjs.html
@@ -0,0 +1,211 @@
+<!DOCTYPE HTML>
+<!--
+/*
+ * jQuery File Upload Plugin AngularJS Demo 2.2.0
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+-->
+<html lang="en">
+<head>
+<!-- Force latest IE rendering engine or ChromeFrame if installed -->
+<!--[if IE]>
+<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+<![endif]-->
+<meta charset="utf-8">
+<title>jQuery File Upload Demo - AngularJS version</title>
+<meta name="description" content="File Upload widget with multiple file selection, drag&amp;drop support, progress bars, validation and preview images, audio and video for AngularJS. Supports cross-domain, chunked and resumable file uploads and client-side image resizing. Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads.">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<!-- Bootstrap styles -->
+<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
+<!-- Generic page styles -->
+<link rel="stylesheet" href="css/style.css">
+<!-- blueimp Gallery styles -->
+<link rel="stylesheet" href="//blueimp.github.io/Gallery/css/blueimp-gallery.min.css">
+<!-- CSS to style the file input field as button and adjust the Bootstrap progress bars -->
+<link rel="stylesheet" href="css/jquery.fileupload.css">
+<link rel="stylesheet" href="css/jquery.fileupload-ui.css">
+<!-- CSS adjustments for browsers with JavaScript disabled -->
+<noscript><link rel="stylesheet" href="css/jquery.fileupload-noscript.css"></noscript>
+<noscript><link rel="stylesheet" href="css/jquery.fileupload-ui-noscript.css"></noscript>
+<style>
+/* Hide Angular JS elements before initializing */
+.ng-cloak {
+ display: none;
+}
+</style>
+</head>
+<body>
+<div class="navbar navbar-default navbar-fixed-top">
+ <div class="container">
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-fixed-top .navbar-collapse">
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <a class="navbar-brand" href="https://github.com/blueimp/jQuery-File-Upload">jQuery File Upload</a>
+ </div>
+ <div class="navbar-collapse collapse">
+ <ul class="nav navbar-nav">
+ <li><a href="https://github.com/blueimp/jQuery-File-Upload/tags">Download</a></li>
+ <li><a href="https://github.com/blueimp/jQuery-File-Upload">Source Code</a></li>
+ <li><a href="https://github.com/blueimp/jQuery-File-Upload/wiki">Documentation</a></li>
+ <li><a href="https://blueimp.net">&copy; Sebastian Tschan</a></li>
+ </ul>
+ </div>
+ </div>
+</div>
+<div class="container">
+ <h1>jQuery File Upload Demo</h1>
+ <h2 class="lead">AngularJS version</h2>
+ <ul class="nav nav-tabs">
+ <li><a href="basic.html">Basic</a></li>
+ <li><a href="basic-plus.html">Basic Plus</a></li>
+ <li><a href="index.html">Basic Plus UI</a></li>
+ <li class="active"><a href="angularjs.html">AngularJS</a></li>
+ <li><a href="jquery-ui.html">jQuery UI</a></li>
+ </ul>
+ <br>
+ <blockquote>
+ <p>File Upload widget with multiple file selection, drag&amp;drop support, progress bars, validation and preview images, audio and video for AngularJS.<br>
+ Supports cross-domain, chunked and resumable file uploads and client-side image resizing.<br>
+ Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads.</p>
+ </blockquote>
+ <br>
+ <!-- The file upload form used as target for the file upload widget -->
+ <form id="fileupload" action="//jquery-file-upload.appspot.com/" method="POST" enctype="multipart/form-data" data-ng-app="demo" data-ng-controller="DemoFileUploadController" data-file-upload="options" data-ng-class="{'fileupload-processing': processing() || loadingFiles}">
+ <!-- Redirect browsers with JavaScript disabled to the origin page -->
+ <noscript><input type="hidden" name="redirect" value="https://blueimp.github.io/jQuery-File-Upload/"></noscript>
+ <!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload -->
+ <div class="row fileupload-buttonbar">
+ <div class="col-lg-7">
+ <!-- The fileinput-button span is used to style the file input field as button -->
+ <span class="btn btn-success fileinput-button" ng-class="{disabled: disabled}">
+ <i class="glyphicon glyphicon-plus"></i>
+ <span>Add files...</span>
+ <input type="file" name="files[]" multiple ng-disabled="disabled">
+ </span>
+ <button type="button" class="btn btn-primary start" data-ng-click="submit()">
+ <i class="glyphicon glyphicon-upload"></i>
+ <span>Start upload</span>
+ </button>
+ <button type="button" class="btn btn-warning cancel" data-ng-click="cancel()">
+ <i class="glyphicon glyphicon-ban-circle"></i>
+ <span>Cancel upload</span>
+ </button>
+ <!-- The global file processing state -->
+ <span class="fileupload-process"></span>
+ </div>
+ <!-- The global progress state -->
+ <div class="col-lg-5 fade" data-ng-class="{in: active()}">
+ <!-- The global progress bar -->
+ <div class="progress progress-striped active" data-file-upload-progress="progress()"><div class="progress-bar progress-bar-success" data-ng-style="{width: num + '%'}"></div></div>
+ <!-- The extended global progress state -->
+ <div class="progress-extended">&nbsp;</div>
+ </div>
+ </div>
+ <!-- The table listing the files available for upload/download -->
+ <table class="table table-striped files ng-cloak">
+ <tr data-ng-repeat="file in queue" data-ng-class="{'processing': file.$processing()}">
+ <td data-ng-switch data-on="!!file.thumbnailUrl">
+ <div class="preview" data-ng-switch-when="true">
+ <a data-ng-href="{{file.url}}" title="{{file.name}}" download="{{file.name}}" data-gallery><img data-ng-src="{{file.thumbnailUrl}}" alt=""></a>
+ </div>
+ <div class="preview" data-ng-switch-default data-file-upload-preview="file"></div>
+ </td>
+ <td>
+ <p class="name" data-ng-switch data-on="!!file.url">
+ <span data-ng-switch-when="true" data-ng-switch data-on="!!file.thumbnailUrl">
+ <a data-ng-switch-when="true" data-ng-href="{{file.url}}" title="{{file.name}}" download="{{file.name}}" data-gallery>{{file.name}}</a>
+ <a data-ng-switch-default data-ng-href="{{file.url}}" title="{{file.name}}" download="{{file.name}}">{{file.name}}</a>
+ </span>
+ <span data-ng-switch-default>{{file.name}}</span>
+ </p>
+ <strong data-ng-show="file.error" class="error text-danger">{{file.error}}</strong>
+ </td>
+ <td>
+ <p class="size">{{file.size | formatFileSize}}</p>
+ <div class="progress progress-striped active fade" data-ng-class="{pending: 'in'}[file.$state()]" data-file-upload-progress="file.$progress()"><div class="progress-bar progress-bar-success" data-ng-style="{width: num + '%'}"></div></div>
+ </td>
+ <td>
+ <button type="button" class="btn btn-primary start" data-ng-click="file.$submit()" data-ng-hide="!file.$submit || options.autoUpload" data-ng-disabled="file.$state() == 'pending' || file.$state() == 'rejected'">
+ <i class="glyphicon glyphicon-upload"></i>
+ <span>Start</span>
+ </button>
+ <button type="button" class="btn btn-warning cancel" data-ng-click="file.$cancel()" data-ng-hide="!file.$cancel">
+ <i class="glyphicon glyphicon-ban-circle"></i>
+ <span>Cancel</span>
+ </button>
+ <button data-ng-controller="FileDestroyController" type="button" class="btn btn-danger destroy" data-ng-click="file.$destroy()" data-ng-hide="!file.$destroy">
+ <i class="glyphicon glyphicon-trash"></i>
+ <span>Delete</span>
+ </button>
+ </td>
+ </tr>
+ </table>
+ </form>
+ <br>
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">Demo Notes</h3>
+ </div>
+ <div class="panel-body">
+ <ul>
+ <li>The maximum file size for uploads in this demo is <strong>5 MB</strong> (default file size is unlimited).</li>
+ <li>Only image files (<strong>JPG, GIF, PNG</strong>) are allowed in this demo (by default there is no file type restriction).</li>
+ <li>Uploaded files will be deleted automatically after <strong>5 minutes</strong> (demo setting).</li>
+ <li>You can <strong>drag &amp; drop</strong> files from your desktop on this webpage (see <a href="https://github.com/blueimp/jQuery-File-Upload/wiki/Browser-support">Browser support</a>).</li>
+ <li>Please refer to the <a href="https://github.com/blueimp/jQuery-File-Upload">project website</a> and <a href="https://github.com/blueimp/jQuery-File-Upload/wiki">documentation</a> for more information.</li>
+ <li>Built with the <a href="http://getbootstrap.com/">Bootstrap</a> CSS framework and Icons from <a href="http://glyphicons.com/">Glyphicons</a>.</li>
+ </ul>
+ </div>
+ </div>
+</div>
+<!-- The blueimp Gallery widget -->
+<div id="blueimp-gallery" class="blueimp-gallery blueimp-gallery-controls" data-filter=":even">
+ <div class="slides"></div>
+ <h3 class="title"></h3>
+ <a class="prev">‹</a>
+ <a class="next">›</a>
+ <a class="close">×</a>
+ <a class="play-pause"></a>
+ <ol class="indicator"></ol>
+</div>
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
+<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
+<!-- The jQuery UI widget factory, can be omitted if jQuery UI is already included -->
+<script src="js/vendor/jquery.ui.widget.js"></script>
+<!-- The Load Image plugin is included for the preview images and image resizing functionality -->
+<script src="//blueimp.github.io/JavaScript-Load-Image/js/load-image.all.min.js"></script>
+<!-- The Canvas to Blob plugin is included for image resizing functionality -->
+<script src="//blueimp.github.io/JavaScript-Canvas-to-Blob/js/canvas-to-blob.min.js"></script>
+<!-- Bootstrap JS is not required, but included for the responsive demo navigation -->
+<script src="//netdna.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
+<!-- blueimp Gallery script -->
+<script src="//blueimp.github.io/Gallery/js/jquery.blueimp-gallery.min.js"></script>
+<!-- The Iframe Transport is required for browsers without support for XHR file uploads -->
+<script src="js/jquery.iframe-transport.js"></script>
+<!-- The basic File Upload plugin -->
+<script src="js/jquery.fileupload.js"></script>
+<!-- The File Upload processing plugin -->
+<script src="js/jquery.fileupload-process.js"></script>
+<!-- The File Upload image preview & resize plugin -->
+<script src="js/jquery.fileupload-image.js"></script>
+<!-- The File Upload audio preview plugin -->
+<script src="js/jquery.fileupload-audio.js"></script>
+<!-- The File Upload video preview plugin -->
+<script src="js/jquery.fileupload-video.js"></script>
+<!-- The File Upload validation plugin -->
+<script src="js/jquery.fileupload-validate.js"></script>
+<!-- The File Upload Angular JS module -->
+<script src="js/jquery.fileupload-angular.js"></script>
+<!-- The main application script -->
+<script src="js/app.js"></script>
+</body>
+</html>
diff --git a/library/blueimp_upload/basic-plus.html b/library/blueimp_upload/basic-plus.html
new file mode 100644
index 000000000..59b73b60c
--- /dev/null
+++ b/library/blueimp_upload/basic-plus.html
@@ -0,0 +1,226 @@
+<!DOCTYPE HTML>
+<!--
+/*
+ * jQuery File Upload Plugin Basic Plus Demo 1.4.0
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+-->
+<html lang="en">
+<head>
+<!-- Force latest IE rendering engine or ChromeFrame if installed -->
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><![endif]-->
+<meta charset="utf-8">
+<title>jQuery File Upload Demo - Basic Plus version</title>
+<meta name="description" content="File Upload widget with multiple file selection, drag&amp;drop support, progress bar, validation and preview images, audio and video for jQuery. Supports cross-domain, chunked and resumable file uploads. Works with any server-side platform (Google App Engine, PHP, Python, Ruby on Rails, Java, etc.) that supports standard HTML form file uploads.">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<!-- Bootstrap styles -->
+<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
+<!-- Generic page styles -->
+<link rel="stylesheet" href="css/style.css">
+<!-- CSS to style the file input field as button and adjust the Bootstrap progress bars -->
+<link rel="stylesheet" href="css/jquery.fileupload.css">
+</head>
+<body>
+<div class="navbar navbar-default navbar-fixed-top">
+ <div class="container">
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-fixed-top .navbar-collapse">
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <a class="navbar-brand" href="https://github.com/blueimp/jQuery-File-Upload">jQuery File Upload</a>
+ </div>
+ <div class="navbar-collapse collapse">
+ <ul class="nav navbar-nav">
+ <li><a href="https://github.com/blueimp/jQuery-File-Upload/tags">Download</a></li>
+ <li><a href="https://github.com/blueimp/jQuery-File-Upload">Source Code</a></li>
+ <li><a href="https://github.com/blueimp/jQuery-File-Upload/wiki">Documentation</a></li>
+ <li><a href="https://blueimp.net">&copy; Sebastian Tschan</a></li>
+ </ul>
+ </div>
+ </div>
+</div>
+<div class="container">
+ <h1>jQuery File Upload Demo</h1>
+ <h2 class="lead">Basic Plus version</h2>
+ <ul class="nav nav-tabs">
+ <li><a href="basic.html">Basic</a></li>
+ <li class="active"><a href="basic-plus.html">Basic Plus</a></li>
+ <li><a href="index.html">Basic Plus UI</a></li>
+ <li><a href="angularjs.html">AngularJS</a></li>
+ <li><a href="jquery-ui.html">jQuery UI</a></li>
+ </ul>
+ <br>
+ <blockquote>
+ <p>File Upload widget with multiple file selection, drag&amp;drop support, progress bar, validation and preview images, audio and video for jQuery.<br>
+ Supports cross-domain, chunked and resumable file uploads and client-side image resizing.<br>
+ Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads.</p>
+ </blockquote>
+ <br>
+ <!-- The fileinput-button span is used to style the file input field as button -->
+ <span class="btn btn-success fileinput-button">
+ <i class="glyphicon glyphicon-plus"></i>
+ <span>Add files...</span>
+ <!-- The file input field used as target for the file upload widget -->
+ <input id="fileupload" type="file" name="files[]" multiple>
+ </span>
+ <br>
+ <br>
+ <!-- The global progress bar -->
+ <div id="progress" class="progress">
+ <div class="progress-bar progress-bar-success"></div>
+ </div>
+ <!-- The container for the uploaded files -->
+ <div id="files" class="files"></div>
+ <br>
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">Demo Notes</h3>
+ </div>
+ <div class="panel-body">
+ <ul>
+ <li>The maximum file size for uploads in this demo is <strong>5 MB</strong> (default file size is unlimited).</li>
+ <li>Only image files (<strong>JPG, GIF, PNG</strong>) are allowed in this demo (by default there is no file type restriction).</li>
+ <li>Uploaded files will be deleted automatically after <strong>5 minutes</strong> (demo setting).</li>
+ <li>You can <strong>drag &amp; drop</strong> files from your desktop on this webpage (see <a href="https://github.com/blueimp/jQuery-File-Upload/wiki/Browser-support">Browser support</a>).</li>
+ <li>Please refer to the <a href="https://github.com/blueimp/jQuery-File-Upload">project website</a> and <a href="https://github.com/blueimp/jQuery-File-Upload/wiki">documentation</a> for more information.</li>
+ <li>Built with the <a href="http://getbootstrap.com/">Bootstrap</a> CSS framework and Icons from <a href="http://glyphicons.com/">Glyphicons</a>.</li>
+ </ul>
+ </div>
+ </div>
+</div>
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
+<!-- The jQuery UI widget factory, can be omitted if jQuery UI is already included -->
+<script src="js/vendor/jquery.ui.widget.js"></script>
+<!-- The Load Image plugin is included for the preview images and image resizing functionality -->
+<script src="//blueimp.github.io/JavaScript-Load-Image/js/load-image.all.min.js"></script>
+<!-- The Canvas to Blob plugin is included for image resizing functionality -->
+<script src="//blueimp.github.io/JavaScript-Canvas-to-Blob/js/canvas-to-blob.min.js"></script>
+<!-- Bootstrap JS is not required, but included for the responsive demo navigation -->
+<script src="//netdna.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
+<!-- The Iframe Transport is required for browsers without support for XHR file uploads -->
+<script src="js/jquery.iframe-transport.js"></script>
+<!-- The basic File Upload plugin -->
+<script src="js/jquery.fileupload.js"></script>
+<!-- The File Upload processing plugin -->
+<script src="js/jquery.fileupload-process.js"></script>
+<!-- The File Upload image preview & resize plugin -->
+<script src="js/jquery.fileupload-image.js"></script>
+<!-- The File Upload audio preview plugin -->
+<script src="js/jquery.fileupload-audio.js"></script>
+<!-- The File Upload video preview plugin -->
+<script src="js/jquery.fileupload-video.js"></script>
+<!-- The File Upload validation plugin -->
+<script src="js/jquery.fileupload-validate.js"></script>
+<script>
+/*jslint unparam: true, regexp: true */
+/*global window, $ */
+$(function () {
+ 'use strict';
+ // Change this to the location of your server-side upload handler:
+ var url = window.location.hostname === 'blueimp.github.io' ?
+ '//jquery-file-upload.appspot.com/' : 'server/php/',
+ uploadButton = $('<button/>')
+ .addClass('btn btn-primary')
+ .prop('disabled', true)
+ .text('Processing...')
+ .on('click', function () {
+ var $this = $(this),
+ data = $this.data();
+ $this
+ .off('click')
+ .text('Abort')
+ .on('click', function () {
+ $this.remove();
+ data.abort();
+ });
+ data.submit().always(function () {
+ $this.remove();
+ });
+ });
+ $('#fileupload').fileupload({
+ url: url,
+ dataType: 'json',
+ autoUpload: false,
+ acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
+ maxFileSize: 5000000, // 5 MB
+ // Enable image resizing, except for Android and Opera,
+ // which actually support image resizing, but fail to
+ // send Blob objects via XHR requests:
+ disableImageResize: /Android(?!.*Chrome)|Opera/
+ .test(window.navigator.userAgent),
+ previewMaxWidth: 100,
+ previewMaxHeight: 100,
+ previewCrop: true
+ }).on('fileuploadadd', function (e, data) {
+ data.context = $('<div/>').appendTo('#files');
+ $.each(data.files, function (index, file) {
+ var node = $('<p/>')
+ .append($('<span/>').text(file.name));
+ if (!index) {
+ node
+ .append('<br>')
+ .append(uploadButton.clone(true).data(data));
+ }
+ node.appendTo(data.context);
+ });
+ }).on('fileuploadprocessalways', function (e, data) {
+ var index = data.index,
+ file = data.files[index],
+ node = $(data.context.children()[index]);
+ if (file.preview) {
+ node
+ .prepend('<br>')
+ .prepend(file.preview);
+ }
+ if (file.error) {
+ node
+ .append('<br>')
+ .append($('<span class="text-danger"/>').text(file.error));
+ }
+ if (index + 1 === data.files.length) {
+ data.context.find('button')
+ .text('Upload')
+ .prop('disabled', !!data.files.error);
+ }
+ }).on('fileuploadprogressall', function (e, data) {
+ var progress = parseInt(data.loaded / data.total * 100, 10);
+ $('#progress .progress-bar').css(
+ 'width',
+ progress + '%'
+ );
+ }).on('fileuploaddone', function (e, data) {
+ $.each(data.result.files, function (index, file) {
+ if (file.url) {
+ var link = $('<a>')
+ .attr('target', '_blank')
+ .prop('href', file.url);
+ $(data.context.children()[index])
+ .wrap(link);
+ } else if (file.error) {
+ var error = $('<span class="text-danger"/>').text(file.error);
+ $(data.context.children()[index])
+ .append('<br>')
+ .append(error);
+ }
+ });
+ }).on('fileuploadfail', function (e, data) {
+ $.each(data.files, function (index) {
+ var error = $('<span class="text-danger"/>').text('File upload failed.');
+ $(data.context.children()[index])
+ .append('<br>')
+ .append(error);
+ });
+ }).prop('disabled', !$.support.fileInput)
+ .parent().addClass($.support.fileInput ? undefined : 'disabled');
+});
+</script>
+</body>
+</html>
diff --git a/library/blueimp_upload/basic.html b/library/blueimp_upload/basic.html
new file mode 100644
index 000000000..f248f4d80
--- /dev/null
+++ b/library/blueimp_upload/basic.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML>
+<!--
+/*
+ * jQuery File Upload Plugin Basic Demo 1.3.0
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+-->
+<html lang="en">
+<head>
+<!-- Force latest IE rendering engine or ChromeFrame if installed -->
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><![endif]-->
+<meta charset="utf-8">
+<title>jQuery File Upload Demo - Basic version</title>
+<meta name="description" content="File Upload widget with multiple file selection, drag&amp;drop support and progress bar for jQuery. Supports cross-domain, chunked and resumable file uploads. Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads.">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<!-- Bootstrap styles -->
+<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
+<!-- Generic page styles -->
+<link rel="stylesheet" href="css/style.css">
+<!-- CSS to style the file input field as button and adjust the Bootstrap progress bars -->
+<link rel="stylesheet" href="css/jquery.fileupload.css">
+</head>
+<body>
+<div class="navbar navbar-default navbar-fixed-top">
+ <div class="container">
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-fixed-top .navbar-collapse">
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <a class="navbar-brand" href="https://github.com/blueimp/jQuery-File-Upload">jQuery File Upload</a>
+ </div>
+ <div class="navbar-collapse collapse">
+ <ul class="nav navbar-nav">
+ <li><a href="https://github.com/blueimp/jQuery-File-Upload/tags">Download</a></li>
+ <li><a href="https://github.com/blueimp/jQuery-File-Upload">Source Code</a></li>
+ <li><a href="https://github.com/blueimp/jQuery-File-Upload/wiki">Documentation</a></li>
+ <li><a href="https://blueimp.net">&copy; Sebastian Tschan</a></li>
+ </ul>
+ </div>
+ </div>
+</div>
+<div class="container">
+ <h1>jQuery File Upload Demo</h1>
+ <h2 class="lead">Basic version</h2>
+ <ul class="nav nav-tabs">
+ <li class="active"><a href="basic.html">Basic</a></li>
+ <li><a href="basic-plus.html">Basic Plus</a></li>
+ <li><a href="index.html">Basic Plus UI</a></li>
+ <li><a href="angularjs.html">AngularJS</a></li>
+ <li><a href="jquery-ui.html">jQuery UI</a></li>
+ </ul>
+ <br>
+ <blockquote>
+ <p>File Upload widget with multiple file selection, drag&amp;drop support and progress bar for jQuery.<br>
+ Supports cross-domain, chunked and resumable file uploads.<br>
+ Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads.</p>
+ </blockquote>
+ <br>
+ <!-- The fileinput-button span is used to style the file input field as button -->
+ <span class="btn btn-success fileinput-button">
+ <i class="glyphicon glyphicon-plus"></i>
+ <span>Select files...</span>
+ <!-- The file input field used as target for the file upload widget -->
+ <input id="fileupload" type="file" name="files[]" multiple>
+ </span>
+ <br>
+ <br>
+ <!-- The global progress bar -->
+ <div id="progress" class="progress">
+ <div class="progress-bar progress-bar-success"></div>
+ </div>
+ <!-- The container for the uploaded files -->
+ <div id="files" class="files"></div>
+ <br>
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">Demo Notes</h3>
+ </div>
+ <div class="panel-body">
+ <ul>
+ <li>The maximum file size for uploads in this demo is <strong>5 MB</strong> (default file size is unlimited).</li>
+ <li>Only image files (<strong>JPG, GIF, PNG</strong>) are allowed in this demo (by default there is no file type restriction).</li>
+ <li>Uploaded files will be deleted automatically after <strong>5 minutes</strong> (demo setting).</li>
+ <li>You can <strong>drag &amp; drop</strong> files from your desktop on this webpage (see <a href="https://github.com/blueimp/jQuery-File-Upload/wiki/Browser-support">Browser support</a>).</li>
+ <li>Please refer to the <a href="https://github.com/blueimp/jQuery-File-Upload">project website</a> and <a href="https://github.com/blueimp/jQuery-File-Upload/wiki">documentation</a> for more information.</li>
+ <li>Built with Twitter's <a href="http://twitter.github.com/bootstrap/">Bootstrap</a> CSS framework and Icons from <a href="http://glyphicons.com/">Glyphicons</a>.</li>
+ </ul>
+ </div>
+ </div>
+</div>
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
+<!-- The jQuery UI widget factory, can be omitted if jQuery UI is already included -->
+<script src="js/vendor/jquery.ui.widget.js"></script>
+<!-- The Iframe Transport is required for browsers without support for XHR file uploads -->
+<script src="js/jquery.iframe-transport.js"></script>
+<!-- The basic File Upload plugin -->
+<script src="js/jquery.fileupload.js"></script>
+<!-- Bootstrap JS is not required, but included for the responsive demo navigation -->
+<script src="//netdna.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
+<script>
+/*jslint unparam: true */
+/*global window, $ */
+$(function () {
+ 'use strict';
+ // Change this to the location of your server-side upload handler:
+ var url = window.location.hostname === 'blueimp.github.io' ?
+ '//jquery-file-upload.appspot.com/' : 'server/php/';
+ $('#fileupload').fileupload({
+ url: url,
+ dataType: 'json',
+ done: function (e, data) {
+ $.each(data.result.files, function (index, file) {
+ $('<p/>').text(file.name).appendTo('#files');
+ });
+ },
+ progressall: function (e, data) {
+ var progress = parseInt(data.loaded / data.total * 100, 10);
+ $('#progress .progress-bar').css(
+ 'width',
+ progress + '%'
+ );
+ }
+ }).prop('disabled', !$.support.fileInput)
+ .parent().addClass($.support.fileInput ? undefined : 'disabled');
+});
+</script>
+</body>
+</html>
diff --git a/library/blueimp_upload/blueimp-file-upload.jquery.json b/library/blueimp_upload/blueimp-file-upload.jquery.json
new file mode 100644
index 000000000..d6d8c911c
--- /dev/null
+++ b/library/blueimp_upload/blueimp-file-upload.jquery.json
@@ -0,0 +1,50 @@
+{
+ "name": "blueimp-file-upload",
+ "version": "9.8.0",
+ "title": "jQuery File Upload",
+ "author": {
+ "name": "Sebastian Tschan",
+ "url": "https://blueimp.net"
+ },
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "http://www.opensource.org/licenses/MIT"
+ }
+ ],
+ "dependencies": {
+ "jquery": ">=1.6"
+ },
+ "description": "File Upload widget with multiple file selection, drag&amp;drop support, progress bar, validation and preview images, audio and video for jQuery. Supports cross-domain, chunked and resumable file uploads. Works with any server-side platform (Google App Engine, PHP, Python, Ruby on Rails, Java, etc.) that supports standard HTML form file uploads.",
+ "keywords": [
+ "jquery",
+ "file",
+ "upload",
+ "widget",
+ "multiple",
+ "selection",
+ "drag",
+ "drop",
+ "progress",
+ "preview",
+ "cross-domain",
+ "cross-site",
+ "chunk",
+ "resume",
+ "gae",
+ "go",
+ "python",
+ "php",
+ "bootstrap"
+ ],
+ "homepage": "https://github.com/blueimp/jQuery-File-Upload",
+ "docs": "https://github.com/blueimp/jQuery-File-Upload/wiki",
+ "demo": "https://blueimp.github.io/jQuery-File-Upload/",
+ "bugs": "https://github.com/blueimp/jQuery-File-Upload/issues",
+ "maintainers": [
+ {
+ "name": "Sebastian Tschan",
+ "url": "https://blueimp.net"
+ }
+ ]
+}
diff --git a/library/blueimp_upload/bower.json b/library/blueimp_upload/bower.json
new file mode 100644
index 000000000..c0d3d3259
--- /dev/null
+++ b/library/blueimp_upload/bower.json
@@ -0,0 +1,85 @@
+{
+ "name": "blueimp-file-upload",
+ "version": "9.8.0",
+ "title": "jQuery File Upload",
+ "description": "File Upload widget with multiple file selection, drag&amp;drop support, progress bar, validation and preview images, audio and video for jQuery. Supports cross-domain, chunked and resumable file uploads. Works with any server-side platform (Google App Engine, PHP, Python, Ruby on Rails, Java, etc.) that supports standard HTML form file uploads.",
+ "keywords": [
+ "jquery",
+ "file",
+ "upload",
+ "widget",
+ "multiple",
+ "selection",
+ "drag",
+ "drop",
+ "progress",
+ "preview",
+ "cross-domain",
+ "cross-site",
+ "chunk",
+ "resume",
+ "gae",
+ "go",
+ "python",
+ "php",
+ "bootstrap"
+ ],
+ "homepage": "https://github.com/blueimp/jQuery-File-Upload",
+ "author": {
+ "name": "Sebastian Tschan",
+ "url": "https://blueimp.net"
+ },
+ "maintainers": [
+ {
+ "name": "Sebastian Tschan",
+ "url": "https://blueimp.net"
+ }
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/blueimp/jQuery-File-Upload.git"
+ },
+ "bugs": "https://github.com/blueimp/jQuery-File-Upload/issues",
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "http://www.opensource.org/licenses/MIT"
+ }
+ ],
+ "dependencies": {
+ "jquery": ">=1.6",
+ "blueimp-tmpl": ">=2.5.4",
+ "blueimp-load-image": ">=1.13.0",
+ "blueimp-canvas-to-blob": ">=2.1.1"
+ },
+ "main": [
+ "css/jquery.fileupload.css",
+ "css/jquery.fileupload-ui.css",
+ "css/jquery.fileupload-noscript.css",
+ "css/jquery.fileupload-ui-noscript.css",
+ "js/cors/jquery.postmessage-transport.js",
+ "js/cors/jquery.xdr-transport.js",
+ "js/vendor/jquery.ui.widget.js",
+ "js/jquery.fileupload.js",
+ "js/jquery.fileupload-process.js",
+ "js/jquery.fileupload-validate.js",
+ "js/jquery.fileupload-image.js",
+ "js/jquery.fileupload-audio.js",
+ "js/jquery.fileupload-video.js",
+ "js/jquery.fileupload-ui.js",
+ "js/jquery.fileupload-jquery-ui.js",
+ "js/jquery.fileupload-angular.js",
+ "js/jquery.iframe-transport.js"
+ ],
+ "ignore": [
+ "/*.*",
+ "/cors",
+ "css/demo-ie8.css",
+ "css/demo.css",
+ "css/style.css",
+ "js/app.js",
+ "js/main.js",
+ "server",
+ "test"
+ ]
+}
diff --git a/library/blueimp_upload/cors/postmessage.html b/library/blueimp_upload/cors/postmessage.html
new file mode 100644
index 000000000..3d1448f08
--- /dev/null
+++ b/library/blueimp_upload/cors/postmessage.html
@@ -0,0 +1,75 @@
+<!DOCTYPE HTML>
+<!--
+/*
+ * jQuery File Upload Plugin postMessage API 1.2.1
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+-->
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<title>jQuery File Upload Plugin postMessage API</title>
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
+</head>
+<body>
+<script>
+/*jslint unparam: true, regexp: true */
+/*global $, Blob, FormData, location */
+'use strict';
+var origin = /^http:\/\/example.org/,
+ target = new RegExp('^(http(s)?:)?\\/\\/' + location.host + '\\/');
+$(window).on('message', function (e) {
+ e = e.originalEvent;
+ var s = e.data,
+ xhr = $.ajaxSettings.xhr(),
+ f;
+ if (!origin.test(e.origin)) {
+ throw new Error('Origin "' + e.origin + '" does not match ' + origin);
+ }
+ if (!target.test(e.data.url)) {
+ throw new Error('Target "' + e.data.url + '" does not match ' + target);
+ }
+ $(xhr.upload).on('progress', function (ev) {
+ ev = ev.originalEvent;
+ e.source.postMessage({
+ id: s.id,
+ type: ev.type,
+ timeStamp: ev.timeStamp,
+ lengthComputable: ev.lengthComputable,
+ loaded: ev.loaded,
+ total: ev.total
+ }, e.origin);
+ });
+ s.xhr = function () {
+ return xhr;
+ };
+ if (!(s.data instanceof Blob)) {
+ f = new FormData();
+ $.each(s.data, function (i, v) {
+ f.append(v.name, v.value);
+ });
+ s.data = f;
+ }
+ $.ajax(s).always(function (result, statusText, jqXHR) {
+ if (!jqXHR.done) {
+ jqXHR = result;
+ result = null;
+ }
+ e.source.postMessage({
+ id: s.id,
+ status: jqXHR.status,
+ statusText: statusText,
+ result: result,
+ headers: jqXHR.getAllResponseHeaders()
+ }, e.origin);
+ });
+});
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/library/blueimp_upload/cors/result.html b/library/blueimp_upload/cors/result.html
new file mode 100644
index 000000000..225131495
--- /dev/null
+++ b/library/blueimp_upload/cors/result.html
@@ -0,0 +1,24 @@
+<!DOCTYPE HTML>
+<!--
+/*
+ * jQuery Iframe Transport Plugin Redirect Page 2.0.1
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+-->
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<title>jQuery Iframe Transport Plugin Redirect Page</title>
+</head>
+<body>
+<script>
+document.body.innerText=document.body.textContent=decodeURIComponent(window.location.search.slice(1));
+</script>
+</body>
+</html>
diff --git a/library/blueimp_upload/css/demo-ie8.css b/library/blueimp_upload/css/demo-ie8.css
new file mode 100644
index 000000000..262493d08
--- /dev/null
+++ b/library/blueimp_upload/css/demo-ie8.css
@@ -0,0 +1,21 @@
+@charset "UTF-8";
+/*
+ * jQuery File Upload Demo CSS Fixes for IE<9 1.0.0
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+.navigation {
+ list-style: none;
+ padding: 0;
+ margin: 1em 0;
+}
+.navigation li {
+ display: inline;
+ margin-right: 10px;
+}
diff --git a/library/blueimp_upload/css/demo.css b/library/blueimp_upload/css/demo.css
new file mode 100644
index 000000000..2b4d43934
--- /dev/null
+++ b/library/blueimp_upload/css/demo.css
@@ -0,0 +1,67 @@
+@charset "UTF-8";
+/*
+ * jQuery File Upload Demo CSS 1.1.0
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+body {
+ max-width: 750px;
+ margin: 0 auto;
+ padding: 1em;
+ font-family: "Lucida Grande", "Lucida Sans Unicode", Arial, sans-serif;
+ font-size: 1em;
+ line-height: 1.4em;
+ background: #222;
+ color: #fff;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+a {
+ color: orange;
+ text-decoration: none;
+}
+img {
+ border: 0;
+ vertical-align: middle;
+}
+h1 {
+ line-height: 1em;
+}
+blockquote {
+ padding: 0 0 0 15px;
+ margin: 0 0 20px;
+ border-left: 5px solid #eee;
+}
+table {
+ width: 100%;
+ margin: 10px 0;
+}
+
+.fileupload-progress {
+ margin: 10px 0;
+}
+.fileupload-progress .progress-extended {
+ margin-top: 5px;
+}
+.error {
+ color: red;
+}
+
+@media (min-width: 481px) {
+ .navigation {
+ list-style: none;
+ padding: 0;
+ }
+ .navigation li {
+ display: inline-block;
+ }
+ .navigation li:not(:first-child):before {
+ content: "| ";
+ }
+}
diff --git a/library/blueimp_upload/css/jquery.fileupload-noscript.css b/library/blueimp_upload/css/jquery.fileupload-noscript.css
new file mode 100644
index 000000000..64d728fc3
--- /dev/null
+++ b/library/blueimp_upload/css/jquery.fileupload-noscript.css
@@ -0,0 +1,22 @@
+@charset "UTF-8";
+/*
+ * jQuery File Upload Plugin NoScript CSS 1.2.0
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+.fileinput-button input {
+ position: static;
+ opacity: 1;
+ filter: none;
+ font-size: inherit;
+ direction: inherit;
+}
+.fileinput-button span {
+ display: none;
+}
diff --git a/library/blueimp_upload/css/jquery.fileupload-ui-noscript.css b/library/blueimp_upload/css/jquery.fileupload-ui-noscript.css
new file mode 100644
index 000000000..87f110cdb
--- /dev/null
+++ b/library/blueimp_upload/css/jquery.fileupload-ui-noscript.css
@@ -0,0 +1,17 @@
+@charset "UTF-8";
+/*
+ * jQuery File Upload UI Plugin NoScript CSS 8.8.5
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2012, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+.fileinput-button i,
+.fileupload-buttonbar .delete,
+.fileupload-buttonbar .toggle {
+ display: none;
+}
diff --git a/library/blueimp_upload/css/jquery.fileupload-ui.css b/library/blueimp_upload/css/jquery.fileupload-ui.css
new file mode 100644
index 000000000..76fb376de
--- /dev/null
+++ b/library/blueimp_upload/css/jquery.fileupload-ui.css
@@ -0,0 +1,57 @@
+@charset "UTF-8";
+/*
+ * jQuery File Upload UI Plugin CSS 9.0.0
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+.fileupload-buttonbar .btn,
+.fileupload-buttonbar .toggle {
+ margin-bottom: 5px;
+}
+.progress-animated .progress-bar,
+.progress-animated .bar {
+ background: url("../img/progressbar.gif") !important;
+ filter: none;
+}
+.fileupload-process {
+ float: right;
+ display: none;
+}
+.fileupload-processing .fileupload-process,
+.files .processing .preview {
+ display: block;
+ width: 32px;
+ height: 32px;
+ background: url("../img/loading.gif") center no-repeat;
+ background-size: contain;
+}
+.files audio,
+.files video {
+ max-width: 300px;
+}
+
+@media (max-width: 767px) {
+ .fileupload-buttonbar .toggle,
+ .files .toggle,
+ .files .btn span {
+ display: none;
+ }
+ .files .name {
+ width: 80px;
+ word-wrap: break-word;
+ }
+ .files audio,
+ .files video {
+ max-width: 80px;
+ }
+ .files img,
+ .files canvas {
+ max-width: 100%;
+ }
+}
diff --git a/library/blueimp_upload/css/jquery.fileupload.css b/library/blueimp_upload/css/jquery.fileupload.css
new file mode 100644
index 000000000..fb6044d34
--- /dev/null
+++ b/library/blueimp_upload/css/jquery.fileupload.css
@@ -0,0 +1,36 @@
+@charset "UTF-8";
+/*
+ * jQuery File Upload Plugin CSS 1.3.0
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+.fileinput-button {
+ position: relative;
+ overflow: hidden;
+}
+.fileinput-button input {
+ position: absolute;
+ top: 0;
+ right: 0;
+ margin: 0;
+ opacity: 0;
+ -ms-filter: 'alpha(opacity=0)';
+ font-size: 200px;
+ direction: ltr;
+ cursor: pointer;
+}
+
+/* Fixes for IE < 8 */
+@media screen\9 {
+ .fileinput-button input {
+ filter: alpha(opacity=0);
+ font-size: 100%;
+ height: 100%;
+ }
+}
diff --git a/library/blueimp_upload/css/style.css b/library/blueimp_upload/css/style.css
new file mode 100644
index 000000000..b2c60a6f1
--- /dev/null
+++ b/library/blueimp_upload/css/style.css
@@ -0,0 +1,15 @@
+@charset "UTF-8";
+/*
+ * jQuery File Upload Plugin CSS Example 8.8.2
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+body {
+ padding-top: 60px;
+}
diff --git a/library/blueimp_upload/img/loading.gif b/library/blueimp_upload/img/loading.gif
new file mode 100644
index 000000000..90f28cbdb
--- /dev/null
+++ b/library/blueimp_upload/img/loading.gif
Binary files differ
diff --git a/library/blueimp_upload/img/progressbar.gif b/library/blueimp_upload/img/progressbar.gif
new file mode 100644
index 000000000..fbcce6bc9
--- /dev/null
+++ b/library/blueimp_upload/img/progressbar.gif
Binary files differ
diff --git a/library/blueimp_upload/index.html b/library/blueimp_upload/index.html
new file mode 100644
index 000000000..f92f04aab
--- /dev/null
+++ b/library/blueimp_upload/index.html
@@ -0,0 +1,255 @@
+<!DOCTYPE HTML>
+<!--
+/*
+ * jQuery File Upload Plugin Demo 9.1.0
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+-->
+<html lang="en">
+<head>
+<!-- Force latest IE rendering engine or ChromeFrame if installed -->
+<!--[if IE]>
+<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+<![endif]-->
+<meta charset="utf-8">
+<title>jQuery File Upload Demo</title>
+<meta name="description" content="File Upload widget with multiple file selection, drag&amp;drop support, progress bars, validation and preview images, audio and video for jQuery. Supports cross-domain, chunked and resumable file uploads and client-side image resizing. Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads.">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<!-- Bootstrap styles -->
+<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
+<!-- Generic page styles -->
+<link rel="stylesheet" href="css/style.css">
+<!-- blueimp Gallery styles -->
+<link rel="stylesheet" href="//blueimp.github.io/Gallery/css/blueimp-gallery.min.css">
+<!-- CSS to style the file input field as button and adjust the Bootstrap progress bars -->
+<link rel="stylesheet" href="css/jquery.fileupload.css">
+<link rel="stylesheet" href="css/jquery.fileupload-ui.css">
+<!-- CSS adjustments for browsers with JavaScript disabled -->
+<noscript><link rel="stylesheet" href="css/jquery.fileupload-noscript.css"></noscript>
+<noscript><link rel="stylesheet" href="css/jquery.fileupload-ui-noscript.css"></noscript>
+</head>
+<body>
+<div class="navbar navbar-default navbar-fixed-top">
+ <div class="container">
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-fixed-top .navbar-collapse">
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <a class="navbar-brand" href="https://github.com/blueimp/jQuery-File-Upload">jQuery File Upload</a>
+ </div>
+ <div class="navbar-collapse collapse">
+ <ul class="nav navbar-nav">
+ <li><a href="https://github.com/blueimp/jQuery-File-Upload/tags">Download</a></li>
+ <li><a href="https://github.com/blueimp/jQuery-File-Upload">Source Code</a></li>
+ <li><a href="https://github.com/blueimp/jQuery-File-Upload/wiki">Documentation</a></li>
+ <li><a href="https://blueimp.net">&copy; Sebastian Tschan</a></li>
+ </ul>
+ </div>
+ </div>
+</div>
+<div class="container">
+ <h1>jQuery File Upload Demo</h1>
+ <h2 class="lead">Basic Plus UI version</h2>
+ <ul class="nav nav-tabs">
+ <li><a href="basic.html">Basic</a></li>
+ <li><a href="basic-plus.html">Basic Plus</a></li>
+ <li class="active"><a href="index.html">Basic Plus UI</a></li>
+ <li><a href="angularjs.html">AngularJS</a></li>
+ <li><a href="jquery-ui.html">jQuery UI</a></li>
+ </ul>
+ <br>
+ <blockquote>
+ <p>File Upload widget with multiple file selection, drag&amp;drop support, progress bars, validation and preview images, audio and video for jQuery.<br>
+ Supports cross-domain, chunked and resumable file uploads and client-side image resizing.<br>
+ Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads.</p>
+ </blockquote>
+ <br>
+ <!-- The file upload form used as target for the file upload widget -->
+ <form id="fileupload" action="//jquery-file-upload.appspot.com/" method="POST" enctype="multipart/form-data">
+ <!-- Redirect browsers with JavaScript disabled to the origin page -->
+ <noscript><input type="hidden" name="redirect" value="https://blueimp.github.io/jQuery-File-Upload/"></noscript>
+ <!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload -->
+ <div class="row fileupload-buttonbar">
+ <div class="col-lg-7">
+ <!-- The fileinput-button span is used to style the file input field as button -->
+ <span class="btn btn-success fileinput-button">
+ <i class="glyphicon glyphicon-plus"></i>
+ <span>Add files...</span>
+ <input type="file" name="files[]" multiple>
+ </span>
+ <button type="submit" class="btn btn-primary start">
+ <i class="glyphicon glyphicon-upload"></i>
+ <span>Start upload</span>
+ </button>
+ <button type="reset" class="btn btn-warning cancel">
+ <i class="glyphicon glyphicon-ban-circle"></i>
+ <span>Cancel upload</span>
+ </button>
+ <button type="button" class="btn btn-danger delete">
+ <i class="glyphicon glyphicon-trash"></i>
+ <span>Delete</span>
+ </button>
+ <input type="checkbox" class="toggle">
+ <!-- The global file processing state -->
+ <span class="fileupload-process"></span>
+ </div>
+ <!-- The global progress state -->
+ <div class="col-lg-5 fileupload-progress fade">
+ <!-- The global progress bar -->
+ <div class="progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar progress-bar-success" style="width:0%;"></div>
+ </div>
+ <!-- The extended global progress state -->
+ <div class="progress-extended">&nbsp;</div>
+ </div>
+ </div>
+ <!-- The table listing the files available for upload/download -->
+ <table role="presentation" class="table table-striped"><tbody class="files"></tbody></table>
+ </form>
+ <br>
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">Demo Notes</h3>
+ </div>
+ <div class="panel-body">
+ <ul>
+ <li>The maximum file size for uploads in this demo is <strong>5 MB</strong> (default file size is unlimited).</li>
+ <li>Only image files (<strong>JPG, GIF, PNG</strong>) are allowed in this demo (by default there is no file type restriction).</li>
+ <li>Uploaded files will be deleted automatically after <strong>5 minutes</strong> (demo setting).</li>
+ <li>You can <strong>drag &amp; drop</strong> files from your desktop on this webpage (see <a href="https://github.com/blueimp/jQuery-File-Upload/wiki/Browser-support">Browser support</a>).</li>
+ <li>Please refer to the <a href="https://github.com/blueimp/jQuery-File-Upload">project website</a> and <a href="https://github.com/blueimp/jQuery-File-Upload/wiki">documentation</a> for more information.</li>
+ <li>Built with the <a href="http://getbootstrap.com/">Bootstrap</a> CSS framework and Icons from <a href="http://glyphicons.com/">Glyphicons</a>.</li>
+ </ul>
+ </div>
+ </div>
+</div>
+<!-- The blueimp Gallery widget -->
+<div id="blueimp-gallery" class="blueimp-gallery blueimp-gallery-controls" data-filter=":even">
+ <div class="slides"></div>
+ <h3 class="title"></h3>
+ <a class="prev">‹</a>
+ <a class="next">›</a>
+ <a class="close">×</a>
+ <a class="play-pause"></a>
+ <ol class="indicator"></ol>
+</div>
+<!-- The template to display files available for upload -->
+<script id="template-upload" type="text/x-tmpl">
+{% for (var i=0, file; file=o.files[i]; i++) { %}
+ <tr class="template-upload fade">
+ <td>
+ <span class="preview"></span>
+ </td>
+ <td>
+ <p class="name">{%=file.name%}</p>
+ <strong class="error text-danger"></strong>
+ </td>
+ <td>
+ <p class="size">Processing...</p>
+ <div class="progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"><div class="progress-bar progress-bar-success" style="width:0%;"></div></div>
+ </td>
+ <td>
+ {% if (!i && !o.options.autoUpload) { %}
+ <button class="btn btn-primary start" disabled>
+ <i class="glyphicon glyphicon-upload"></i>
+ <span>Start</span>
+ </button>
+ {% } %}
+ {% if (!i) { %}
+ <button class="btn btn-warning cancel">
+ <i class="glyphicon glyphicon-ban-circle"></i>
+ <span>Cancel</span>
+ </button>
+ {% } %}
+ </td>
+ </tr>
+{% } %}
+</script>
+<!-- The template to display files available for download -->
+<script id="template-download" type="text/x-tmpl">
+{% for (var i=0, file; file=o.files[i]; i++) { %}
+ <tr class="template-download fade">
+ <td>
+ <span class="preview">
+ {% if (file.thumbnailUrl) { %}
+ <a href="{%=file.url%}" title="{%=file.name%}" download="{%=file.name%}" data-gallery><img src="{%=file.thumbnailUrl%}"></a>
+ {% } %}
+ </span>
+ </td>
+ <td>
+ <p class="name">
+ {% if (file.url) { %}
+ <a href="{%=file.url%}" title="{%=file.name%}" download="{%=file.name%}" {%=file.thumbnailUrl?'data-gallery':''%}>{%=file.name%}</a>
+ {% } else { %}
+ <span>{%=file.name%}</span>
+ {% } %}
+ </p>
+ {% if (file.error) { %}
+ <div><span class="label label-danger">Error</span> {%=file.error%}</div>
+ {% } %}
+ </td>
+ <td>
+ <span class="size">{%=o.formatFileSize(file.size)%}</span>
+ </td>
+ <td>
+ {% if (file.deleteUrl) { %}
+ <button class="btn btn-danger delete" data-type="{%=file.deleteType%}" data-url="{%=file.deleteUrl%}"{% if (file.deleteWithCredentials) { %} data-xhr-fields='{"withCredentials":true}'{% } %}>
+ <i class="glyphicon glyphicon-trash"></i>
+ <span>Delete</span>
+ </button>
+ <input type="checkbox" name="delete" value="1" class="toggle">
+ {% } else { %}
+ <button class="btn btn-warning cancel">
+ <i class="glyphicon glyphicon-ban-circle"></i>
+ <span>Cancel</span>
+ </button>
+ {% } %}
+ </td>
+ </tr>
+{% } %}
+</script>
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
+<!-- The jQuery UI widget factory, can be omitted if jQuery UI is already included -->
+<script src="js/vendor/jquery.ui.widget.js"></script>
+<!-- The Templates plugin is included to render the upload/download listings -->
+<script src="//blueimp.github.io/JavaScript-Templates/js/tmpl.min.js"></script>
+<!-- The Load Image plugin is included for the preview images and image resizing functionality -->
+<script src="//blueimp.github.io/JavaScript-Load-Image/js/load-image.all.min.js"></script>
+<!-- The Canvas to Blob plugin is included for image resizing functionality -->
+<script src="//blueimp.github.io/JavaScript-Canvas-to-Blob/js/canvas-to-blob.min.js"></script>
+<!-- Bootstrap JS is not required, but included for the responsive demo navigation -->
+<script src="//netdna.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
+<!-- blueimp Gallery script -->
+<script src="//blueimp.github.io/Gallery/js/jquery.blueimp-gallery.min.js"></script>
+<!-- The Iframe Transport is required for browsers without support for XHR file uploads -->
+<script src="js/jquery.iframe-transport.js"></script>
+<!-- The basic File Upload plugin -->
+<script src="js/jquery.fileupload.js"></script>
+<!-- The File Upload processing plugin -->
+<script src="js/jquery.fileupload-process.js"></script>
+<!-- The File Upload image preview & resize plugin -->
+<script src="js/jquery.fileupload-image.js"></script>
+<!-- The File Upload audio preview plugin -->
+<script src="js/jquery.fileupload-audio.js"></script>
+<!-- The File Upload video preview plugin -->
+<script src="js/jquery.fileupload-video.js"></script>
+<!-- The File Upload validation plugin -->
+<script src="js/jquery.fileupload-validate.js"></script>
+<!-- The File Upload user interface plugin -->
+<script src="js/jquery.fileupload-ui.js"></script>
+<!-- The main application script -->
+<script src="js/main.js"></script>
+<!-- The XDomainRequest Transport is included for cross-domain file deletion for IE 8 and IE 9 -->
+<!--[if (gte IE 8)&(lt IE 10)]>
+<script src="js/cors/jquery.xdr-transport.js"></script>
+<![endif]-->
+</body>
+</html>
diff --git a/library/blueimp_upload/jquery-ui.html b/library/blueimp_upload/jquery-ui.html
new file mode 100644
index 000000000..d61ee5233
--- /dev/null
+++ b/library/blueimp_upload/jquery-ui.html
@@ -0,0 +1,250 @@
+<!DOCTYPE HTML>
+<!--
+/*
+ * jQuery File Upload Plugin jQuery UI Demo 9.1.0
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+-->
+<html lang="en">
+<head>
+<!-- Force latest IE rendering engine or ChromeFrame if installed -->
+<!--[if IE]>
+<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+<![endif]-->
+<meta charset="utf-8">
+<title>jQuery File Upload Demo - jQuery UI version</title>
+<meta name="description" content="File Upload widget with multiple file selection, drag&amp;drop support, progress bars, validation and preview images, audio and video for jQuery. Supports cross-domain, chunked and resumable file uploads and client-side image resizing. Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads.">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<!-- jQuery UI styles -->
+<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/themes/dark-hive/jquery-ui.css" id="theme">
+<!-- Demo styles -->
+<link rel="stylesheet" href="css/demo.css">
+<!--[if lte IE 8]>
+<link rel="stylesheet" href="css/demo-ie8.css">
+<![endif]-->
+<style>
+/* Adjust the jQuery UI widget font-size: */
+.ui-widget {
+ font-size: 0.95em;
+}
+</style>
+<!-- blueimp Gallery styles -->
+<link rel="stylesheet" href="//blueimp.github.io/Gallery/css/blueimp-gallery.min.css">
+<!-- CSS to style the file input field as button and adjust the Bootstrap progress bars -->
+<link rel="stylesheet" href="css/jquery.fileupload.css">
+<link rel="stylesheet" href="css/jquery.fileupload-ui.css">
+<!-- CSS adjustments for browsers with JavaScript disabled -->
+<noscript><link rel="stylesheet" href="css/jquery.fileupload-noscript.css"></noscript>
+<noscript><link rel="stylesheet" href="css/jquery.fileupload-ui-noscript.css"></noscript>
+</head>
+<body>
+<ul class="navigation">
+ <li><h3><a href="https://github.com/blueimp/jQuery-File-Upload">jQuery File Upload</a></h3></li>
+ <li><a href="https://github.com/blueimp/jQuery-File-Upload/tags">Download</a></li>
+ <li><a href="https://github.com/blueimp/jQuery-File-Upload">Source Code</a></li>
+ <li><a href="https://github.com/blueimp/jQuery-File-Upload/wiki">Documentation</a></li>
+ <li><a href="https://blueimp.net">&copy; blueimp.net</a></li>
+</ul>
+<h1>jQuery File Upload Demo</h1>
+<h2>jQuery UI version</h2>
+<form>
+ <label for="theme-switcher">Theme:</label>
+ <select id="theme-switcher" class="pull-right">
+ <option value="black-tie">Black Tie</option>
+ <option value="blitzer">Blitzer</option>
+ <option value="cupertino">Cupertino</option>
+ <option value="dark-hive" selected>Dark Hive</option>
+ <option value="dot-luv">Dot Luv</option>
+ <option value="eggplant">Eggplant</option>
+ <option value="excite-bike">Excite Bike</option>
+ <option value="flick">Flick</option>
+ <option value="hot-sneaks">Hot sneaks</option>
+ <option value="humanity">Humanity</option>
+ <option value="le-frog">Le Frog</option>
+ <option value="mint-choc">Mint Choc</option>
+ <option value="overcast">Overcast</option>
+ <option value="pepper-grinder">Pepper Grinder</option>
+ <option value="redmond">Redmond</option>
+ <option value="smoothness">Smoothness</option>
+ <option value="south-street">South Street</option>
+ <option value="start">Start</option>
+ <option value="sunny">Sunny</option>
+ <option value="swanky-purse">Swanky Purse</option>
+ <option value="trontastic">Trontastic</option>
+ <option value="ui-darkness">UI Darkness</option>
+ <option value="ui-lightness">UI Lightness</option>
+ <option value="vader">Vader</option>
+ </select>
+</form>
+<ul class="navigation">
+ <li><a href="basic.html">Basic</a></li>
+ <li><a href="basic-plus.html">Basic Plus</a></li>
+ <li><a href="index.html">Basic Plus UI</a></li>
+ <li><a href="angularjs.html">AngularJS</a></li>
+ <li class="active"><a href="jquery-ui.html">jQuery UI</a></li>
+</ul>
+<blockquote>
+ <p>File Upload widget with multiple file selection, drag&amp;drop support, progress bars, validation and preview images, audio and video for jQuery UI.<br>
+ Supports cross-domain, chunked and resumable file uploads and client-side image resizing.<br>
+ Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads.</p>
+</blockquote>
+<!-- The file upload form used as target for the file upload widget -->
+<form id="fileupload" action="//jquery-file-upload.appspot.com/" method="POST" enctype="multipart/form-data">
+ <!-- Redirect browsers with JavaScript disabled to the origin page -->
+ <noscript><input type="hidden" name="redirect" value="https://blueimp.github.io/jQuery-File-Upload/"></noscript>
+ <!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload -->
+ <div class="fileupload-buttonbar">
+ <div class="fileupload-buttons">
+ <!-- The fileinput-button span is used to style the file input field as button -->
+ <span class="fileinput-button">
+ <span>Add files...</span>
+ <input type="file" name="files[]" multiple>
+ </span>
+ <button type="submit" class="start">Start upload</button>
+ <button type="reset" class="cancel">Cancel upload</button>
+ <button type="button" class="delete">Delete</button>
+ <input type="checkbox" class="toggle">
+ <!-- The global file processing state -->
+ <span class="fileupload-process"></span>
+ </div>
+ <!-- The global progress state -->
+ <div class="fileupload-progress fade" style="display:none">
+ <!-- The global progress bar -->
+ <div class="progress" role="progressbar" aria-valuemin="0" aria-valuemax="100"></div>
+ <!-- The extended global progress state -->
+ <div class="progress-extended">&nbsp;</div>
+ </div>
+ </div>
+ <!-- The table listing the files available for upload/download -->
+ <table role="presentation"><tbody class="files"></tbody></table>
+</form>
+<br>
+<h3>Demo Notes</h3>
+<ul>
+ <li>The maximum file size for uploads in this demo is <strong>5 MB</strong> (default file size is unlimited).</li>
+ <li>Only image files (<strong>JPG, GIF, PNG</strong>) are allowed in this demo (by default there is no file type restriction).</li>
+ <li>Uploaded files will be deleted automatically after <strong>5 minutes</strong> (demo setting).</li>
+ <li>You can <strong>drag &amp; drop</strong> files from your desktop on this webpage (see <a href="https://github.com/blueimp/jQuery-File-Upload/wiki/Browser-support">Browser support</a>).</li>
+ <li>Please refer to the <a href="https://github.com/blueimp/jQuery-File-Upload">project website</a> and <a href="https://github.com/blueimp/jQuery-File-Upload/wiki">documentation</a> for more information.</li>
+ <li>Built with <a href="https://jqueryui.com">jQuery UI</a>.</li>
+</ul>
+<!-- The blueimp Gallery widget -->
+<div id="blueimp-gallery" class="blueimp-gallery blueimp-gallery-controls" data-filter=":even">
+ <div class="slides"></div>
+ <h3 class="title"></h3>
+ <a class="prev">‹</a>
+ <a class="next">›</a>
+ <a class="close">×</a>
+ <a class="play-pause"></a>
+ <ol class="indicator"></ol>
+</div>
+<!-- The template to display files available for upload -->
+<script id="template-upload" type="text/x-tmpl">
+{% for (var i=0, file; file=o.files[i]; i++) { %}
+ <tr class="template-upload fade">
+ <td>
+ <span class="preview"></span>
+ </td>
+ <td>
+ <p class="name">{%=file.name%}</p>
+ <strong class="error"></strong>
+ </td>
+ <td>
+ <p class="size">Processing...</p>
+ <div class="progress"></div>
+ </td>
+ <td>
+ {% if (!i && !o.options.autoUpload) { %}
+ <button class="start" disabled>Start</button>
+ {% } %}
+ {% if (!i) { %}
+ <button class="cancel">Cancel</button>
+ {% } %}
+ </td>
+ </tr>
+{% } %}
+</script>
+<!-- The template to display files available for download -->
+<script id="template-download" type="text/x-tmpl">
+{% for (var i=0, file; file=o.files[i]; i++) { %}
+ <tr class="template-download fade">
+ <td>
+ <span class="preview">
+ {% if (file.thumbnailUrl) { %}
+ <a href="{%=file.url%}" title="{%=file.name%}" download="{%=file.name%}" data-gallery><img src="{%=file.thumbnailUrl%}"></a>
+ {% } %}
+ </span>
+ </td>
+ <td>
+ <p class="name">
+ <a href="{%=file.url%}" title="{%=file.name%}" download="{%=file.name%}" {%=file.thumbnailUrl?'data-gallery':''%}>{%=file.name%}</a>
+ </p>
+ {% if (file.error) { %}
+ <div><span class="error">Error</span> {%=file.error%}</div>
+ {% } %}
+ </td>
+ <td>
+ <span class="size">{%=o.formatFileSize(file.size)%}</span>
+ </td>
+ <td>
+ <button class="delete" data-type="{%=file.deleteType%}" data-url="{%=file.deleteUrl%}"{% if (file.deleteWithCredentials) { %} data-xhr-fields='{"withCredentials":true}'{% } %}>Delete</button>
+ <input type="checkbox" name="delete" value="1" class="toggle">
+ </td>
+ </tr>
+{% } %}
+</script>
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
+<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/jquery-ui.min.js"></script>
+<!-- The Templates plugin is included to render the upload/download listings -->
+<script src="//blueimp.github.io/JavaScript-Templates/js/tmpl.min.js"></script>
+<!-- The Load Image plugin is included for the preview images and image resizing functionality -->
+<script src="//blueimp.github.io/JavaScript-Load-Image/js/load-image.all.min.js"></script>
+<!-- The Canvas to Blob plugin is included for image resizing functionality -->
+<script src="//blueimp.github.io/JavaScript-Canvas-to-Blob/js/canvas-to-blob.min.js"></script>
+<!-- blueimp Gallery script -->
+<script src="//blueimp.github.io/Gallery/js/jquery.blueimp-gallery.min.js"></script>
+<!-- The Iframe Transport is required for browsers without support for XHR file uploads -->
+<script src="js/jquery.iframe-transport.js"></script>
+<!-- The basic File Upload plugin -->
+<script src="js/jquery.fileupload.js"></script>
+<!-- The File Upload processing plugin -->
+<script src="js/jquery.fileupload-process.js"></script>
+<!-- The File Upload image preview & resize plugin -->
+<script src="js/jquery.fileupload-image.js"></script>
+<!-- The File Upload audio preview plugin -->
+<script src="js/jquery.fileupload-audio.js"></script>
+<!-- The File Upload video preview plugin -->
+<script src="js/jquery.fileupload-video.js"></script>
+<!-- The File Upload validation plugin -->
+<script src="js/jquery.fileupload-validate.js"></script>
+<!-- The File Upload user interface plugin -->
+<script src="js/jquery.fileupload-ui.js"></script>
+<!-- The File Upload jQuery UI plugin -->
+<script src="js/jquery.fileupload-jquery-ui.js"></script>
+<!-- The main application script -->
+<script src="js/main.js"></script>
+<script>
+// Initialize the jQuery UI theme switcher:
+$('#theme-switcher').change(function () {
+ var theme = $('#theme');
+ theme.prop(
+ 'href',
+ theme.prop('href').replace(
+ /[\w\-]+\/jquery-ui.css/,
+ $(this).val() + '/jquery-ui.css'
+ )
+ );
+});
+</script>
+<!-- The XDomainRequest Transport is included for cross-domain file deletion for IE 8 and IE 9 -->
+<!--[if (gte IE 8)&(lt IE 10)]>
+<script src="js/cors/jquery.xdr-transport.js"></script>
+<![endif]-->
+</body>
+</html>
diff --git a/library/blueimp_upload/js/app.js b/library/blueimp_upload/js/app.js
new file mode 100644
index 000000000..47b4f923b
--- /dev/null
+++ b/library/blueimp_upload/js/app.js
@@ -0,0 +1,101 @@
+/*
+ * jQuery File Upload Plugin Angular JS Example 1.2.1
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/* jshint nomen:false */
+/* global window, angular */
+
+(function () {
+ 'use strict';
+
+ var isOnGitHub = window.location.hostname === 'blueimp.github.io',
+ url = isOnGitHub ? '//jquery-file-upload.appspot.com/' : 'server/php/';
+
+ angular.module('demo', [
+ 'blueimp.fileupload'
+ ])
+ .config([
+ '$httpProvider', 'fileUploadProvider',
+ function ($httpProvider, fileUploadProvider) {
+ delete $httpProvider.defaults.headers.common['X-Requested-With'];
+ fileUploadProvider.defaults.redirect = window.location.href.replace(
+ /\/[^\/]*$/,
+ '/cors/result.html?%s'
+ );
+ if (isOnGitHub) {
+ // Demo settings:
+ angular.extend(fileUploadProvider.defaults, {
+ // Enable image resizing, except for Android and Opera,
+ // which actually support image resizing, but fail to
+ // send Blob objects via XHR requests:
+ disableImageResize: /Android(?!.*Chrome)|Opera/
+ .test(window.navigator.userAgent),
+ maxFileSize: 5000000,
+ acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i
+ });
+ }
+ }
+ ])
+
+ .controller('DemoFileUploadController', [
+ '$scope', '$http', '$filter', '$window',
+ function ($scope, $http) {
+ $scope.options = {
+ url: url
+ };
+ if (!isOnGitHub) {
+ $scope.loadingFiles = true;
+ $http.get(url)
+ .then(
+ function (response) {
+ $scope.loadingFiles = false;
+ $scope.queue = response.data.files || [];
+ },
+ function () {
+ $scope.loadingFiles = false;
+ }
+ );
+ }
+ }
+ ])
+
+ .controller('FileDestroyController', [
+ '$scope', '$http',
+ function ($scope, $http) {
+ var file = $scope.file,
+ state;
+ if (file.url) {
+ file.$state = function () {
+ return state;
+ };
+ file.$destroy = function () {
+ state = 'pending';
+ return $http({
+ url: file.deleteUrl,
+ method: file.deleteType
+ }).then(
+ function () {
+ state = 'resolved';
+ $scope.clear(file);
+ },
+ function () {
+ state = 'rejected';
+ }
+ );
+ };
+ } else if (!file.$cancel && !file._index) {
+ file.$cancel = function () {
+ $scope.clear(file);
+ };
+ }
+ }
+ ]);
+
+}());
diff --git a/library/blueimp_upload/js/cors/jquery.postmessage-transport.js b/library/blueimp_upload/js/cors/jquery.postmessage-transport.js
new file mode 100644
index 000000000..2b4851e67
--- /dev/null
+++ b/library/blueimp_upload/js/cors/jquery.postmessage-transport.js
@@ -0,0 +1,117 @@
+/*
+ * jQuery postMessage Transport Plugin 1.1.1
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/* global define, window, document */
+
+(function (factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define(['jquery'], factory);
+ } else {
+ // Browser globals:
+ factory(window.jQuery);
+ }
+}(function ($) {
+ 'use strict';
+
+ var counter = 0,
+ names = [
+ 'accepts',
+ 'cache',
+ 'contents',
+ 'contentType',
+ 'crossDomain',
+ 'data',
+ 'dataType',
+ 'headers',
+ 'ifModified',
+ 'mimeType',
+ 'password',
+ 'processData',
+ 'timeout',
+ 'traditional',
+ 'type',
+ 'url',
+ 'username'
+ ],
+ convert = function (p) {
+ return p;
+ };
+
+ $.ajaxSetup({
+ converters: {
+ 'postmessage text': convert,
+ 'postmessage json': convert,
+ 'postmessage html': convert
+ }
+ });
+
+ $.ajaxTransport('postmessage', function (options) {
+ if (options.postMessage && window.postMessage) {
+ var iframe,
+ loc = $('<a>').prop('href', options.postMessage)[0],
+ target = loc.protocol + '//' + loc.host,
+ xhrUpload = options.xhr().upload;
+ return {
+ send: function (_, completeCallback) {
+ counter += 1;
+ var message = {
+ id: 'postmessage-transport-' + counter
+ },
+ eventName = 'message.' + message.id;
+ iframe = $(
+ '<iframe style="display:none;" src="' +
+ options.postMessage + '" name="' +
+ message.id + '"></iframe>'
+ ).bind('load', function () {
+ $.each(names, function (i, name) {
+ message[name] = options[name];
+ });
+ message.dataType = message.dataType.replace('postmessage ', '');
+ $(window).bind(eventName, function (e) {
+ e = e.originalEvent;
+ var data = e.data,
+ ev;
+ if (e.origin === target && data.id === message.id) {
+ if (data.type === 'progress') {
+ ev = document.createEvent('Event');
+ ev.initEvent(data.type, false, true);
+ $.extend(ev, data);
+ xhrUpload.dispatchEvent(ev);
+ } else {
+ completeCallback(
+ data.status,
+ data.statusText,
+ {postmessage: data.result},
+ data.headers
+ );
+ iframe.remove();
+ $(window).unbind(eventName);
+ }
+ }
+ });
+ iframe[0].contentWindow.postMessage(
+ message,
+ target
+ );
+ }).appendTo(document.body);
+ },
+ abort: function () {
+ if (iframe) {
+ iframe.remove();
+ }
+ }
+ };
+ }
+ });
+
+}));
diff --git a/library/blueimp_upload/js/cors/jquery.xdr-transport.js b/library/blueimp_upload/js/cors/jquery.xdr-transport.js
new file mode 100644
index 000000000..0044cc2d5
--- /dev/null
+++ b/library/blueimp_upload/js/cors/jquery.xdr-transport.js
@@ -0,0 +1,86 @@
+/*
+ * jQuery XDomainRequest Transport Plugin 1.1.3
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ *
+ * Based on Julian Aubourg's ajaxHooks xdr.js:
+ * https://github.com/jaubourg/ajaxHooks/
+ */
+
+/* global define, window, XDomainRequest */
+
+(function (factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define(['jquery'], factory);
+ } else {
+ // Browser globals:
+ factory(window.jQuery);
+ }
+}(function ($) {
+ 'use strict';
+ if (window.XDomainRequest && !$.support.cors) {
+ $.ajaxTransport(function (s) {
+ if (s.crossDomain && s.async) {
+ if (s.timeout) {
+ s.xdrTimeout = s.timeout;
+ delete s.timeout;
+ }
+ var xdr;
+ return {
+ send: function (headers, completeCallback) {
+ var addParamChar = /\?/.test(s.url) ? '&' : '?';
+ function callback(status, statusText, responses, responseHeaders) {
+ xdr.onload = xdr.onerror = xdr.ontimeout = $.noop;
+ xdr = null;
+ completeCallback(status, statusText, responses, responseHeaders);
+ }
+ xdr = new XDomainRequest();
+ // XDomainRequest only supports GET and POST:
+ if (s.type === 'DELETE') {
+ s.url = s.url + addParamChar + '_method=DELETE';
+ s.type = 'POST';
+ } else if (s.type === 'PUT') {
+ s.url = s.url + addParamChar + '_method=PUT';
+ s.type = 'POST';
+ } else if (s.type === 'PATCH') {
+ s.url = s.url + addParamChar + '_method=PATCH';
+ s.type = 'POST';
+ }
+ xdr.open(s.type, s.url);
+ xdr.onload = function () {
+ callback(
+ 200,
+ 'OK',
+ {text: xdr.responseText},
+ 'Content-Type: ' + xdr.contentType
+ );
+ };
+ xdr.onerror = function () {
+ callback(404, 'Not Found');
+ };
+ if (s.xdrTimeout) {
+ xdr.ontimeout = function () {
+ callback(0, 'timeout');
+ };
+ xdr.timeout = s.xdrTimeout;
+ }
+ xdr.send((s.hasContent && s.data) || null);
+ },
+ abort: function () {
+ if (xdr) {
+ xdr.onerror = $.noop();
+ xdr.abort();
+ }
+ }
+ };
+ }
+ });
+ }
+}));
diff --git a/library/blueimp_upload/js/jquery.fileupload-angular.js b/library/blueimp_upload/js/jquery.fileupload-angular.js
new file mode 100644
index 000000000..e4ef3926b
--- /dev/null
+++ b/library/blueimp_upload/js/jquery.fileupload-angular.js
@@ -0,0 +1,429 @@
+/*
+ * jQuery File Upload AngularJS Plugin 2.2.0
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/* jshint nomen:false */
+/* global define, angular */
+
+(function (factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define([
+ 'jquery',
+ 'angular',
+ './jquery.fileupload-image',
+ './jquery.fileupload-audio',
+ './jquery.fileupload-video',
+ './jquery.fileupload-validate'
+ ], factory);
+ } else {
+ factory();
+ }
+}(function () {
+ 'use strict';
+
+ angular.module('blueimp.fileupload', [])
+
+ // The fileUpload service provides configuration options
+ // for the fileUpload directive and default handlers for
+ // File Upload events:
+ .provider('fileUpload', function () {
+ var scopeEvalAsync = function (expression) {
+ var scope = angular.element(this)
+ .fileupload('option', 'scope');
+ // Schedule a new $digest cycle if not already inside of one
+ // and evaluate the given expression:
+ scope.$evalAsync(expression);
+ },
+ addFileMethods = function (scope, data) {
+ var files = data.files,
+ file = files[0];
+ angular.forEach(files, function (file, index) {
+ file._index = index;
+ file.$state = function () {
+ return data.state();
+ };
+ file.$processing = function () {
+ return data.processing();
+ };
+ file.$progress = function () {
+ return data.progress();
+ };
+ file.$response = function () {
+ return data.response();
+ };
+ });
+ file.$submit = function () {
+ if (!file.error) {
+ return data.submit();
+ }
+ };
+ file.$cancel = function () {
+ return data.abort();
+ };
+ },
+ $config;
+ $config = this.defaults = {
+ handleResponse: function (e, data) {
+ var files = data.result && data.result.files;
+ if (files) {
+ data.scope.replace(data.files, files);
+ } else if (data.errorThrown ||
+ data.textStatus === 'error') {
+ data.files[0].error = data.errorThrown ||
+ data.textStatus;
+ }
+ },
+ add: function (e, data) {
+ if (e.isDefaultPrevented()) {
+ return false;
+ }
+ var scope = data.scope,
+ filesCopy = [];
+ angular.forEach(data.files, function (file) {
+ filesCopy.push(file);
+ });
+ scope.$apply(function () {
+ addFileMethods(scope, data);
+ var method = scope.option('prependFiles') ?
+ 'unshift' : 'push';
+ Array.prototype[method].apply(scope.queue, data.files);
+ });
+ data.process(function () {
+ return scope.process(data);
+ }).always(function () {
+ scope.$apply(function () {
+ addFileMethods(scope, data);
+ scope.replace(filesCopy, data.files);
+ });
+ }).then(function () {
+ if ((scope.option('autoUpload') ||
+ data.autoUpload) &&
+ data.autoUpload !== false) {
+ data.submit();
+ }
+ });
+ },
+ progress: function (e, data) {
+ if (e.isDefaultPrevented()) {
+ return false;
+ }
+ data.scope.$apply();
+ },
+ done: function (e, data) {
+ if (e.isDefaultPrevented()) {
+ return false;
+ }
+ var that = this;
+ data.scope.$apply(function () {
+ data.handleResponse.call(that, e, data);
+ });
+ },
+ fail: function (e, data) {
+ if (e.isDefaultPrevented()) {
+ return false;
+ }
+ var that = this,
+ scope = data.scope;
+ if (data.errorThrown === 'abort') {
+ scope.clear(data.files);
+ return;
+ }
+ scope.$apply(function () {
+ data.handleResponse.call(that, e, data);
+ });
+ },
+ stop: scopeEvalAsync,
+ processstart: scopeEvalAsync,
+ processstop: scopeEvalAsync,
+ getNumberOfFiles: function () {
+ var scope = this.scope;
+ return scope.queue.length - scope.processing();
+ },
+ dataType: 'json',
+ autoUpload: false
+ };
+ this.$get = [
+ function () {
+ return {
+ defaults: $config
+ };
+ }
+ ];
+ })
+
+ // Format byte numbers to readable presentations:
+ .provider('formatFileSizeFilter', function () {
+ var $config = {
+ // Byte units following the IEC format
+ // http://en.wikipedia.org/wiki/Kilobyte
+ units: [
+ {size: 1000000000, suffix: ' GB'},
+ {size: 1000000, suffix: ' MB'},
+ {size: 1000, suffix: ' KB'}
+ ]
+ };
+ this.defaults = $config;
+ this.$get = function () {
+ return function (bytes) {
+ if (!angular.isNumber(bytes)) {
+ return '';
+ }
+ var unit = true,
+ i = 0,
+ prefix,
+ suffix;
+ while (unit) {
+ unit = $config.units[i];
+ prefix = unit.prefix || '';
+ suffix = unit.suffix || '';
+ if (i === $config.units.length - 1 || bytes >= unit.size) {
+ return prefix + (bytes / unit.size).toFixed(2) + suffix;
+ }
+ i += 1;
+ }
+ };
+ };
+ })
+
+ // The FileUploadController initializes the fileupload widget and
+ // provides scope methods to control the File Upload functionality:
+ .controller('FileUploadController', [
+ '$scope', '$element', '$attrs', '$window', 'fileUpload',
+ function ($scope, $element, $attrs, $window, fileUpload) {
+ var uploadMethods = {
+ progress: function () {
+ return $element.fileupload('progress');
+ },
+ active: function () {
+ return $element.fileupload('active');
+ },
+ option: function (option, data) {
+ if (arguments.length === 1) {
+ return $element.fileupload('option', option);
+ }
+ $element.fileupload('option', option, data);
+ },
+ add: function (data) {
+ return $element.fileupload('add', data);
+ },
+ send: function (data) {
+ return $element.fileupload('send', data);
+ },
+ process: function (data) {
+ return $element.fileupload('process', data);
+ },
+ processing: function (data) {
+ return $element.fileupload('processing', data);
+ }
+ };
+ $scope.disabled = !$window.jQuery.support.fileInput;
+ $scope.queue = $scope.queue || [];
+ $scope.clear = function (files) {
+ var queue = this.queue,
+ i = queue.length,
+ file = files,
+ length = 1;
+ if (angular.isArray(files)) {
+ file = files[0];
+ length = files.length;
+ }
+ while (i) {
+ i -= 1;
+ if (queue[i] === file) {
+ return queue.splice(i, length);
+ }
+ }
+ };
+ $scope.replace = function (oldFiles, newFiles) {
+ var queue = this.queue,
+ file = oldFiles[0],
+ i,
+ j;
+ for (i = 0; i < queue.length; i += 1) {
+ if (queue[i] === file) {
+ for (j = 0; j < newFiles.length; j += 1) {
+ queue[i + j] = newFiles[j];
+ }
+ return;
+ }
+ }
+ };
+ $scope.applyOnQueue = function (method) {
+ var list = this.queue.slice(0),
+ i,
+ file;
+ for (i = 0; i < list.length; i += 1) {
+ file = list[i];
+ if (file[method]) {
+ file[method]();
+ }
+ }
+ };
+ $scope.submit = function () {
+ this.applyOnQueue('$submit');
+ };
+ $scope.cancel = function () {
+ this.applyOnQueue('$cancel');
+ };
+ // Add upload methods to the scope:
+ angular.extend($scope, uploadMethods);
+ // The fileupload widget will initialize with
+ // the options provided via "data-"-parameters,
+ // as well as those given via options object:
+ $element.fileupload(angular.extend(
+ {scope: $scope},
+ fileUpload.defaults
+ )).on('fileuploadadd', function (e, data) {
+ data.scope = $scope;
+ }).on('fileuploadfail', function (e, data) {
+ if (data.errorThrown === 'abort') {
+ return;
+ }
+ if (data.dataType &&
+ data.dataType.indexOf('json') === data.dataType.length - 4) {
+ try {
+ data.result = angular.fromJson(data.jqXHR.responseText);
+ } catch (ignore) {}
+ }
+ }).on([
+ 'fileuploadadd',
+ 'fileuploadsubmit',
+ 'fileuploadsend',
+ 'fileuploaddone',
+ 'fileuploadfail',
+ 'fileuploadalways',
+ 'fileuploadprogress',
+ 'fileuploadprogressall',
+ 'fileuploadstart',
+ 'fileuploadstop',
+ 'fileuploadchange',
+ 'fileuploadpaste',
+ 'fileuploaddrop',
+ 'fileuploaddragover',
+ 'fileuploadchunksend',
+ 'fileuploadchunkdone',
+ 'fileuploadchunkfail',
+ 'fileuploadchunkalways',
+ 'fileuploadprocessstart',
+ 'fileuploadprocess',
+ 'fileuploadprocessdone',
+ 'fileuploadprocessfail',
+ 'fileuploadprocessalways',
+ 'fileuploadprocessstop'
+ ].join(' '), function (e, data) {
+ if ($scope.$emit(e.type, data).defaultPrevented) {
+ e.preventDefault();
+ }
+ }).on('remove', function () {
+ // Remove upload methods from the scope,
+ // when the widget is removed:
+ var method;
+ for (method in uploadMethods) {
+ if (uploadMethods.hasOwnProperty(method)) {
+ delete $scope[method];
+ }
+ }
+ });
+ // Observe option changes:
+ $scope.$watch(
+ $attrs.fileUpload,
+ function (newOptions) {
+ if (newOptions) {
+ $element.fileupload('option', newOptions);
+ }
+ }
+ );
+ }
+ ])
+
+ // Provide File Upload progress feedback:
+ .controller('FileUploadProgressController', [
+ '$scope', '$attrs', '$parse',
+ function ($scope, $attrs, $parse) {
+ var fn = $parse($attrs.fileUploadProgress),
+ update = function () {
+ var progress = fn($scope);
+ if (!progress || !progress.total) {
+ return;
+ }
+ $scope.num = Math.floor(
+ progress.loaded / progress.total * 100
+ );
+ };
+ update();
+ $scope.$watch(
+ $attrs.fileUploadProgress + '.loaded',
+ function (newValue, oldValue) {
+ if (newValue !== oldValue) {
+ update();
+ }
+ }
+ );
+ }
+ ])
+
+ // Display File Upload previews:
+ .controller('FileUploadPreviewController', [
+ '$scope', '$element', '$attrs',
+ function ($scope, $element, $attrs) {
+ $scope.$watch(
+ $attrs.fileUploadPreview + '.preview',
+ function (preview) {
+ $element.empty();
+ if (preview) {
+ $element.append(preview);
+ }
+ }
+ );
+ }
+ ])
+
+ .directive('fileUpload', function () {
+ return {
+ controller: 'FileUploadController',
+ scope: true
+ };
+ })
+
+ .directive('fileUploadProgress', function () {
+ return {
+ controller: 'FileUploadProgressController',
+ scope: true
+ };
+ })
+
+ .directive('fileUploadPreview', function () {
+ return {
+ controller: 'FileUploadPreviewController'
+ };
+ })
+
+ // Enhance the HTML5 download attribute to
+ // allow drag&drop of files to the desktop:
+ .directive('download', function () {
+ return function (scope, elm) {
+ elm.on('dragstart', function (e) {
+ try {
+ e.originalEvent.dataTransfer.setData(
+ 'DownloadURL',
+ [
+ 'application/octet-stream',
+ elm.prop('download'),
+ elm.prop('href')
+ ].join(':')
+ );
+ } catch (ignore) {}
+ });
+ };
+ });
+
+}));
diff --git a/library/blueimp_upload/js/jquery.fileupload-audio.js b/library/blueimp_upload/js/jquery.fileupload-audio.js
new file mode 100644
index 000000000..575800e82
--- /dev/null
+++ b/library/blueimp_upload/js/jquery.fileupload-audio.js
@@ -0,0 +1,106 @@
+/*
+ * jQuery File Upload Audio Preview Plugin 1.0.3
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/* jshint nomen:false */
+/* global define, window, document */
+
+(function (factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define([
+ 'jquery',
+ 'load-image',
+ './jquery.fileupload-process'
+ ], factory);
+ } else {
+ // Browser globals:
+ factory(
+ window.jQuery,
+ window.loadImage
+ );
+ }
+}(function ($, loadImage) {
+ 'use strict';
+
+ // Prepend to the default processQueue:
+ $.blueimp.fileupload.prototype.options.processQueue.unshift(
+ {
+ action: 'loadAudio',
+ // Use the action as prefix for the "@" options:
+ prefix: true,
+ fileTypes: '@',
+ maxFileSize: '@',
+ disabled: '@disableAudioPreview'
+ },
+ {
+ action: 'setAudio',
+ name: '@audioPreviewName',
+ disabled: '@disableAudioPreview'
+ }
+ );
+
+ // The File Upload Audio Preview plugin extends the fileupload widget
+ // with audio preview functionality:
+ $.widget('blueimp.fileupload', $.blueimp.fileupload, {
+
+ options: {
+ // The regular expression for the types of audio files to load,
+ // matched against the file type:
+ loadAudioFileTypes: /^audio\/.*$/
+ },
+
+ _audioElement: document.createElement('audio'),
+
+ processActions: {
+
+ // Loads the audio file given via data.files and data.index
+ // as audio element if the browser supports playing it.
+ // Accepts the options fileTypes (regular expression)
+ // and maxFileSize (integer) to limit the files to load:
+ loadAudio: function (data, options) {
+ if (options.disabled) {
+ return data;
+ }
+ var file = data.files[data.index],
+ url,
+ audio;
+ if (this._audioElement.canPlayType &&
+ this._audioElement.canPlayType(file.type) &&
+ ($.type(options.maxFileSize) !== 'number' ||
+ file.size <= options.maxFileSize) &&
+ (!options.fileTypes ||
+ options.fileTypes.test(file.type))) {
+ url = loadImage.createObjectURL(file);
+ if (url) {
+ audio = this._audioElement.cloneNode(false);
+ audio.src = url;
+ audio.controls = true;
+ data.audio = audio;
+ return data;
+ }
+ }
+ return data;
+ },
+
+ // Sets the audio element as a property of the file object:
+ setAudio: function (data, options) {
+ if (data.audio && !options.disabled) {
+ data.files[data.index][options.name || 'preview'] = data.audio;
+ }
+ return data;
+ }
+
+ }
+
+ });
+
+}));
diff --git a/library/blueimp_upload/js/jquery.fileupload-image.js b/library/blueimp_upload/js/jquery.fileupload-image.js
new file mode 100644
index 000000000..5bb7026ae
--- /dev/null
+++ b/library/blueimp_upload/js/jquery.fileupload-image.js
@@ -0,0 +1,315 @@
+/*
+ * jQuery File Upload Image Preview & Resize Plugin 1.7.2
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/* jshint nomen:false */
+/* global define, window, Blob */
+
+(function (factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define([
+ 'jquery',
+ 'load-image',
+ 'load-image-meta',
+ 'load-image-exif',
+ 'load-image-ios',
+ 'canvas-to-blob',
+ './jquery.fileupload-process'
+ ], factory);
+ } else {
+ // Browser globals:
+ factory(
+ window.jQuery,
+ window.loadImage
+ );
+ }
+}(function ($, loadImage) {
+ 'use strict';
+
+ // Prepend to the default processQueue:
+ $.blueimp.fileupload.prototype.options.processQueue.unshift(
+ {
+ action: 'loadImageMetaData',
+ disableImageHead: '@',
+ disableExif: '@',
+ disableExifThumbnail: '@',
+ disableExifSub: '@',
+ disableExifGps: '@',
+ disabled: '@disableImageMetaDataLoad'
+ },
+ {
+ action: 'loadImage',
+ // Use the action as prefix for the "@" options:
+ prefix: true,
+ fileTypes: '@',
+ maxFileSize: '@',
+ noRevoke: '@',
+ disabled: '@disableImageLoad'
+ },
+ {
+ action: 'resizeImage',
+ // Use "image" as prefix for the "@" options:
+ prefix: 'image',
+ maxWidth: '@',
+ maxHeight: '@',
+ minWidth: '@',
+ minHeight: '@',
+ crop: '@',
+ orientation: '@',
+ forceResize: '@',
+ disabled: '@disableImageResize'
+ },
+ {
+ action: 'saveImage',
+ quality: '@imageQuality',
+ type: '@imageType',
+ disabled: '@disableImageResize'
+ },
+ {
+ action: 'saveImageMetaData',
+ disabled: '@disableImageMetaDataSave'
+ },
+ {
+ action: 'resizeImage',
+ // Use "preview" as prefix for the "@" options:
+ prefix: 'preview',
+ maxWidth: '@',
+ maxHeight: '@',
+ minWidth: '@',
+ minHeight: '@',
+ crop: '@',
+ orientation: '@',
+ thumbnail: '@',
+ canvas: '@',
+ disabled: '@disableImagePreview'
+ },
+ {
+ action: 'setImage',
+ name: '@imagePreviewName',
+ disabled: '@disableImagePreview'
+ },
+ {
+ action: 'deleteImageReferences',
+ disabled: '@disableImageReferencesDeletion'
+ }
+ );
+
+ // The File Upload Resize plugin extends the fileupload widget
+ // with image resize functionality:
+ $.widget('blueimp.fileupload', $.blueimp.fileupload, {
+
+ options: {
+ // The regular expression for the types of images to load:
+ // matched against the file type:
+ loadImageFileTypes: /^image\/(gif|jpeg|png|svg\+xml)$/,
+ // The maximum file size of images to load:
+ loadImageMaxFileSize: 10000000, // 10MB
+ // The maximum width of resized images:
+ imageMaxWidth: 1920,
+ // The maximum height of resized images:
+ imageMaxHeight: 1080,
+ // Defines the image orientation (1-8) or takes the orientation
+ // value from Exif data if set to true:
+ imageOrientation: false,
+ // Define if resized images should be cropped or only scaled:
+ imageCrop: false,
+ // Disable the resize image functionality by default:
+ disableImageResize: true,
+ // The maximum width of the preview images:
+ previewMaxWidth: 80,
+ // The maximum height of the preview images:
+ previewMaxHeight: 80,
+ // Defines the preview orientation (1-8) or takes the orientation
+ // value from Exif data if set to true:
+ previewOrientation: true,
+ // Create the preview using the Exif data thumbnail:
+ previewThumbnail: true,
+ // Define if preview images should be cropped or only scaled:
+ previewCrop: false,
+ // Define if preview images should be resized as canvas elements:
+ previewCanvas: true
+ },
+
+ processActions: {
+
+ // Loads the image given via data.files and data.index
+ // as img element, if the browser supports the File API.
+ // Accepts the options fileTypes (regular expression)
+ // and maxFileSize (integer) to limit the files to load:
+ loadImage: function (data, options) {
+ if (options.disabled) {
+ return data;
+ }
+ var that = this,
+ file = data.files[data.index],
+ dfd = $.Deferred();
+ if (($.type(options.maxFileSize) === 'number' &&
+ file.size > options.maxFileSize) ||
+ (options.fileTypes &&
+ !options.fileTypes.test(file.type)) ||
+ !loadImage(
+ file,
+ function (img) {
+ if (img.src) {
+ data.img = img;
+ }
+ dfd.resolveWith(that, [data]);
+ },
+ options
+ )) {
+ return data;
+ }
+ return dfd.promise();
+ },
+
+ // Resizes the image given as data.canvas or data.img
+ // and updates data.canvas or data.img with the resized image.
+ // Also stores the resized image as preview property.
+ // Accepts the options maxWidth, maxHeight, minWidth,
+ // minHeight, canvas and crop:
+ resizeImage: function (data, options) {
+ if (options.disabled || !(data.canvas || data.img)) {
+ return data;
+ }
+ options = $.extend({canvas: true}, options);
+ var that = this,
+ dfd = $.Deferred(),
+ img = (options.canvas && data.canvas) || data.img,
+ resolve = function (newImg) {
+ if (newImg && (newImg.width !== img.width ||
+ newImg.height !== img.height ||
+ options.forceResize)) {
+ data[newImg.getContext ? 'canvas' : 'img'] = newImg;
+ }
+ data.preview = newImg;
+ dfd.resolveWith(that, [data]);
+ },
+ thumbnail;
+ if (data.exif) {
+ if (options.orientation === true) {
+ options.orientation = data.exif.get('Orientation');
+ }
+ if (options.thumbnail) {
+ thumbnail = data.exif.get('Thumbnail');
+ if (thumbnail) {
+ loadImage(thumbnail, resolve, options);
+ return dfd.promise();
+ }
+ }
+ // Prevent orienting the same image twice:
+ if (data.orientation) {
+ delete options.orientation;
+ } else {
+ data.orientation = options.orientation;
+ }
+ }
+ if (img) {
+ resolve(loadImage.scale(img, options));
+ return dfd.promise();
+ }
+ return data;
+ },
+
+ // Saves the processed image given as data.canvas
+ // inplace at data.index of data.files:
+ saveImage: function (data, options) {
+ if (!data.canvas || options.disabled) {
+ return data;
+ }
+ var that = this,
+ file = data.files[data.index],
+ dfd = $.Deferred();
+ if (data.canvas.toBlob) {
+ data.canvas.toBlob(
+ function (blob) {
+ if (!blob.name) {
+ if (file.type === blob.type) {
+ blob.name = file.name;
+ } else if (file.name) {
+ blob.name = file.name.replace(
+ /\..+$/,
+ '.' + blob.type.substr(6)
+ );
+ }
+ }
+ // Don't restore invalid meta data:
+ if (file.type !== blob.type) {
+ delete data.imageHead;
+ }
+ // Store the created blob at the position
+ // of the original file in the files list:
+ data.files[data.index] = blob;
+ dfd.resolveWith(that, [data]);
+ },
+ options.type || file.type,
+ options.quality
+ );
+ } else {
+ return data;
+ }
+ return dfd.promise();
+ },
+
+ loadImageMetaData: function (data, options) {
+ if (options.disabled) {
+ return data;
+ }
+ var that = this,
+ dfd = $.Deferred();
+ loadImage.parseMetaData(data.files[data.index], function (result) {
+ $.extend(data, result);
+ dfd.resolveWith(that, [data]);
+ }, options);
+ return dfd.promise();
+ },
+
+ saveImageMetaData: function (data, options) {
+ if (!(data.imageHead && data.canvas &&
+ data.canvas.toBlob && !options.disabled)) {
+ return data;
+ }
+ var file = data.files[data.index],
+ blob = new Blob([
+ data.imageHead,
+ // Resized images always have a head size of 20 bytes,
+ // including the JPEG marker and a minimal JFIF header:
+ this._blobSlice.call(file, 20)
+ ], {type: file.type});
+ blob.name = file.name;
+ data.files[data.index] = blob;
+ return data;
+ },
+
+ // Sets the resized version of the image as a property of the
+ // file object, must be called after "saveImage":
+ setImage: function (data, options) {
+ if (data.preview && !options.disabled) {
+ data.files[data.index][options.name || 'preview'] = data.preview;
+ }
+ return data;
+ },
+
+ deleteImageReferences: function (data, options) {
+ if (!options.disabled) {
+ delete data.img;
+ delete data.canvas;
+ delete data.preview;
+ delete data.imageHead;
+ }
+ return data;
+ }
+
+ }
+
+ });
+
+}));
diff --git a/library/blueimp_upload/js/jquery.fileupload-jquery-ui.js b/library/blueimp_upload/js/jquery.fileupload-jquery-ui.js
new file mode 100755
index 000000000..af0a00b1e
--- /dev/null
+++ b/library/blueimp_upload/js/jquery.fileupload-jquery-ui.js
@@ -0,0 +1,152 @@
+/*
+ * jQuery File Upload jQuery UI Plugin 8.7.1
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/* jshint nomen:false */
+/* global define, window */
+
+(function (factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define(['jquery', './jquery.fileupload-ui'], factory);
+ } else {
+ // Browser globals:
+ factory(window.jQuery);
+ }
+}(function ($) {
+ 'use strict';
+
+ $.widget('blueimp.fileupload', $.blueimp.fileupload, {
+
+ options: {
+ processdone: function (e, data) {
+ data.context.find('.start').button('enable');
+ },
+ progress: function (e, data) {
+ if (data.context) {
+ data.context.find('.progress').progressbar(
+ 'option',
+ 'value',
+ parseInt(data.loaded / data.total * 100, 10)
+ );
+ }
+ },
+ progressall: function (e, data) {
+ var $this = $(this);
+ $this.find('.fileupload-progress')
+ .find('.progress').progressbar(
+ 'option',
+ 'value',
+ parseInt(data.loaded / data.total * 100, 10)
+ ).end()
+ .find('.progress-extended').each(function () {
+ $(this).html(
+ ($this.data('blueimp-fileupload') ||
+ $this.data('fileupload'))
+ ._renderExtendedProgress(data)
+ );
+ });
+ }
+ },
+
+ _renderUpload: function (func, files) {
+ var node = this._super(func, files),
+ showIconText = $(window).width() > 480;
+ node.find('.progress').empty().progressbar();
+ node.find('.start').button({
+ icons: {primary: 'ui-icon-circle-arrow-e'},
+ text: showIconText
+ });
+ node.find('.cancel').button({
+ icons: {primary: 'ui-icon-cancel'},
+ text: showIconText
+ });
+ if (node.hasClass('fade')) {
+ node.hide();
+ }
+ return node;
+ },
+
+ _renderDownload: function (func, files) {
+ var node = this._super(func, files),
+ showIconText = $(window).width() > 480;
+ node.find('.delete').button({
+ icons: {primary: 'ui-icon-trash'},
+ text: showIconText
+ });
+ if (node.hasClass('fade')) {
+ node.hide();
+ }
+ return node;
+ },
+
+ _startHandler: function (e) {
+ $(e.currentTarget).button('disable');
+ this._super(e);
+ },
+
+ _transition: function (node) {
+ var deferred = $.Deferred();
+ if (node.hasClass('fade')) {
+ node.fadeToggle(
+ this.options.transitionDuration,
+ this.options.transitionEasing,
+ function () {
+ deferred.resolveWith(node);
+ }
+ );
+ } else {
+ deferred.resolveWith(node);
+ }
+ return deferred;
+ },
+
+ _create: function () {
+ this._super();
+ this.element
+ .find('.fileupload-buttonbar')
+ .find('.fileinput-button').each(function () {
+ var input = $(this).find('input:file').detach();
+ $(this)
+ .button({icons: {primary: 'ui-icon-plusthick'}})
+ .append(input);
+ })
+ .end().find('.start')
+ .button({icons: {primary: 'ui-icon-circle-arrow-e'}})
+ .end().find('.cancel')
+ .button({icons: {primary: 'ui-icon-cancel'}})
+ .end().find('.delete')
+ .button({icons: {primary: 'ui-icon-trash'}})
+ .end().find('.progress').progressbar();
+ },
+
+ _destroy: function () {
+ this.element
+ .find('.fileupload-buttonbar')
+ .find('.fileinput-button').each(function () {
+ var input = $(this).find('input:file').detach();
+ $(this)
+ .button('destroy')
+ .append(input);
+ })
+ .end().find('.start')
+ .button('destroy')
+ .end().find('.cancel')
+ .button('destroy')
+ .end().find('.delete')
+ .button('destroy')
+ .end().find('.progress').progressbar('destroy');
+ this._super();
+ }
+
+ });
+
+}));
diff --git a/library/blueimp_upload/js/jquery.fileupload-process.js b/library/blueimp_upload/js/jquery.fileupload-process.js
new file mode 100644
index 000000000..8a6b929a6
--- /dev/null
+++ b/library/blueimp_upload/js/jquery.fileupload-process.js
@@ -0,0 +1,172 @@
+/*
+ * jQuery File Upload Processing Plugin 1.3.0
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2012, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/* jshint nomen:false */
+/* global define, window */
+
+(function (factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define([
+ 'jquery',
+ './jquery.fileupload'
+ ], factory);
+ } else {
+ // Browser globals:
+ factory(
+ window.jQuery
+ );
+ }
+}(function ($) {
+ 'use strict';
+
+ var originalAdd = $.blueimp.fileupload.prototype.options.add;
+
+ // The File Upload Processing plugin extends the fileupload widget
+ // with file processing functionality:
+ $.widget('blueimp.fileupload', $.blueimp.fileupload, {
+
+ options: {
+ // The list of processing actions:
+ processQueue: [
+ /*
+ {
+ action: 'log',
+ type: 'debug'
+ }
+ */
+ ],
+ add: function (e, data) {
+ var $this = $(this);
+ data.process(function () {
+ return $this.fileupload('process', data);
+ });
+ originalAdd.call(this, e, data);
+ }
+ },
+
+ processActions: {
+ /*
+ log: function (data, options) {
+ console[options.type](
+ 'Processing "' + data.files[data.index].name + '"'
+ );
+ }
+ */
+ },
+
+ _processFile: function (data, originalData) {
+ var that = this,
+ dfd = $.Deferred().resolveWith(that, [data]),
+ chain = dfd.promise();
+ this._trigger('process', null, data);
+ $.each(data.processQueue, function (i, settings) {
+ var func = function (data) {
+ if (originalData.errorThrown) {
+ return $.Deferred()
+ .rejectWith(that, [originalData]).promise();
+ }
+ return that.processActions[settings.action].call(
+ that,
+ data,
+ settings
+ );
+ };
+ chain = chain.pipe(func, settings.always && func);
+ });
+ chain
+ .done(function () {
+ that._trigger('processdone', null, data);
+ that._trigger('processalways', null, data);
+ })
+ .fail(function () {
+ that._trigger('processfail', null, data);
+ that._trigger('processalways', null, data);
+ });
+ return chain;
+ },
+
+ // Replaces the settings of each processQueue item that
+ // are strings starting with an "@", using the remaining
+ // substring as key for the option map,
+ // e.g. "@autoUpload" is replaced with options.autoUpload:
+ _transformProcessQueue: function (options) {
+ var processQueue = [];
+ $.each(options.processQueue, function () {
+ var settings = {},
+ action = this.action,
+ prefix = this.prefix === true ? action : this.prefix;
+ $.each(this, function (key, value) {
+ if ($.type(value) === 'string' &&
+ value.charAt(0) === '@') {
+ settings[key] = options[
+ value.slice(1) || (prefix ? prefix +
+ key.charAt(0).toUpperCase() + key.slice(1) : key)
+ ];
+ } else {
+ settings[key] = value;
+ }
+
+ });
+ processQueue.push(settings);
+ });
+ options.processQueue = processQueue;
+ },
+
+ // Returns the number of files currently in the processsing queue:
+ processing: function () {
+ return this._processing;
+ },
+
+ // Processes the files given as files property of the data parameter,
+ // returns a Promise object that allows to bind callbacks:
+ process: function (data) {
+ var that = this,
+ options = $.extend({}, this.options, data);
+ if (options.processQueue && options.processQueue.length) {
+ this._transformProcessQueue(options);
+ if (this._processing === 0) {
+ this._trigger('processstart');
+ }
+ $.each(data.files, function (index) {
+ var opts = index ? $.extend({}, options) : options,
+ func = function () {
+ if (data.errorThrown) {
+ return $.Deferred()
+ .rejectWith(that, [data]).promise();
+ }
+ return that._processFile(opts, data);
+ };
+ opts.index = index;
+ that._processing += 1;
+ that._processingQueue = that._processingQueue.pipe(func, func)
+ .always(function () {
+ that._processing -= 1;
+ if (that._processing === 0) {
+ that._trigger('processstop');
+ }
+ });
+ });
+ }
+ return this._processingQueue;
+ },
+
+ _create: function () {
+ this._super();
+ this._processing = 0;
+ this._processingQueue = $.Deferred().resolveWith(this)
+ .promise();
+ }
+
+ });
+
+}));
diff --git a/library/blueimp_upload/js/jquery.fileupload-ui.js b/library/blueimp_upload/js/jquery.fileupload-ui.js
new file mode 100644
index 000000000..62cf9aa38
--- /dev/null
+++ b/library/blueimp_upload/js/jquery.fileupload-ui.js
@@ -0,0 +1,704 @@
+/*
+ * jQuery File Upload User Interface Plugin 9.6.0
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/* jshint nomen:false */
+/* global define, window */
+
+(function (factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define([
+ 'jquery',
+ 'tmpl',
+ './jquery.fileupload-image',
+ './jquery.fileupload-audio',
+ './jquery.fileupload-video',
+ './jquery.fileupload-validate'
+ ], factory);
+ } else {
+ // Browser globals:
+ factory(
+ window.jQuery,
+ window.tmpl
+ );
+ }
+}(function ($, tmpl) {
+ 'use strict';
+
+ $.blueimp.fileupload.prototype._specialOptions.push(
+ 'filesContainer',
+ 'uploadTemplateId',
+ 'downloadTemplateId'
+ );
+
+ // The UI version extends the file upload widget
+ // and adds complete user interface interaction:
+ $.widget('blueimp.fileupload', $.blueimp.fileupload, {
+
+ options: {
+ // By default, files added to the widget are uploaded as soon
+ // as the user clicks on the start buttons. To enable automatic
+ // uploads, set the following option to true:
+ autoUpload: false,
+ // The ID of the upload template:
+ uploadTemplateId: 'template-upload',
+ // The ID of the download template:
+ downloadTemplateId: 'template-download',
+ // The container for the list of files. If undefined, it is set to
+ // an element with class "files" inside of the widget element:
+ filesContainer: undefined,
+ // By default, files are appended to the files container.
+ // Set the following option to true, to prepend files instead:
+ prependFiles: false,
+ // The expected data type of the upload response, sets the dataType
+ // option of the $.ajax upload requests:
+ dataType: 'json',
+
+ // Error and info messages:
+ messages: {
+ unknownError: 'Unknown error'
+ },
+
+ // Function returning the current number of files,
+ // used by the maxNumberOfFiles validation:
+ getNumberOfFiles: function () {
+ return this.filesContainer.children()
+ .not('.processing').length;
+ },
+
+ // Callback to retrieve the list of files from the server response:
+ getFilesFromResponse: function (data) {
+ if (data.result && $.isArray(data.result.files)) {
+ return data.result.files;
+ }
+ return [];
+ },
+
+ // The add callback is invoked as soon as files are added to the fileupload
+ // widget (via file input selection, drag & drop or add API call).
+ // See the basic file upload widget for more information:
+ add: function (e, data) {
+ if (e.isDefaultPrevented()) {
+ return false;
+ }
+ var $this = $(this),
+ that = $this.data('blueimp-fileupload') ||
+ $this.data('fileupload'),
+ options = that.options;
+ data.context = that._renderUpload(data.files)
+ .data('data', data)
+ .addClass('processing');
+ options.filesContainer[
+ options.prependFiles ? 'prepend' : 'append'
+ ](data.context);
+ that._forceReflow(data.context);
+ that._transition(data.context);
+ data.process(function () {
+ return $this.fileupload('process', data);
+ }).always(function () {
+ data.context.each(function (index) {
+ $(this).find('.size').text(
+ that._formatFileSize(data.files[index].size)
+ );
+ }).removeClass('processing');
+ that._renderPreviews(data);
+ }).done(function () {
+ data.context.find('.start').prop('disabled', false);
+ if ((that._trigger('added', e, data) !== false) &&
+ (options.autoUpload || data.autoUpload) &&
+ data.autoUpload !== false) {
+ data.submit();
+ }
+ }).fail(function () {
+ if (data.files.error) {
+ data.context.each(function (index) {
+ var error = data.files[index].error;
+ if (error) {
+ $(this).find('.error').text(error);
+ }
+ });
+ }
+ });
+ },
+ // Callback for the start of each file upload request:
+ send: function (e, data) {
+ if (e.isDefaultPrevented()) {
+ return false;
+ }
+ var that = $(this).data('blueimp-fileupload') ||
+ $(this).data('fileupload');
+ if (data.context && data.dataType &&
+ data.dataType.substr(0, 6) === 'iframe') {
+ // Iframe Transport does not support progress events.
+ // In lack of an indeterminate progress bar, we set
+ // the progress to 100%, showing the full animated bar:
+ data.context
+ .find('.progress').addClass(
+ !$.support.transition && 'progress-animated'
+ )
+ .attr('aria-valuenow', 100)
+ .children().first().css(
+ 'width',
+ '100%'
+ );
+ }
+ return that._trigger('sent', e, data);
+ },
+ // Callback for successful uploads:
+ done: function (e, data) {
+ if (e.isDefaultPrevented()) {
+ return false;
+ }
+ var that = $(this).data('blueimp-fileupload') ||
+ $(this).data('fileupload'),
+ getFilesFromResponse = data.getFilesFromResponse ||
+ that.options.getFilesFromResponse,
+ files = getFilesFromResponse(data),
+ template,
+ deferred;
+ if (data.context) {
+ data.context.each(function (index) {
+ var file = files[index] ||
+ {error: 'Empty file upload result'};
+ deferred = that._addFinishedDeferreds();
+ that._transition($(this)).done(
+ function () {
+ var node = $(this);
+ template = that._renderDownload([file])
+ .replaceAll(node);
+ that._forceReflow(template);
+ that._transition(template).done(
+ function () {
+ data.context = $(this);
+ that._trigger('completed', e, data);
+ that._trigger('finished', e, data);
+ deferred.resolve();
+ }
+ );
+ }
+ );
+ });
+ } else {
+ template = that._renderDownload(files)[
+ that.options.prependFiles ? 'prependTo' : 'appendTo'
+ ](that.options.filesContainer);
+ that._forceReflow(template);
+ deferred = that._addFinishedDeferreds();
+ that._transition(template).done(
+ function () {
+ data.context = $(this);
+ that._trigger('completed', e, data);
+ that._trigger('finished', e, data);
+ deferred.resolve();
+ }
+ );
+ }
+ },
+ // Callback for failed (abort or error) uploads:
+ fail: function (e, data) {
+ if (e.isDefaultPrevented()) {
+ return false;
+ }
+ var that = $(this).data('blueimp-fileupload') ||
+ $(this).data('fileupload'),
+ template,
+ deferred;
+ if (data.context) {
+ data.context.each(function (index) {
+ if (data.errorThrown !== 'abort') {
+ var file = data.files[index];
+ file.error = file.error || data.errorThrown ||
+ data.i18n('unknownError');
+ deferred = that._addFinishedDeferreds();
+ that._transition($(this)).done(
+ function () {
+ var node = $(this);
+ template = that._renderDownload([file])
+ .replaceAll(node);
+ that._forceReflow(template);
+ that._transition(template).done(
+ function () {
+ data.context = $(this);
+ that._trigger('failed', e, data);
+ that._trigger('finished', e, data);
+ deferred.resolve();
+ }
+ );
+ }
+ );
+ } else {
+ deferred = that._addFinishedDeferreds();
+ that._transition($(this)).done(
+ function () {
+ $(this).remove();
+ that._trigger('failed', e, data);
+ that._trigger('finished', e, data);
+ deferred.resolve();
+ }
+ );
+ }
+ });
+ } else if (data.errorThrown !== 'abort') {
+ data.context = that._renderUpload(data.files)[
+ that.options.prependFiles ? 'prependTo' : 'appendTo'
+ ](that.options.filesContainer)
+ .data('data', data);
+ that._forceReflow(data.context);
+ deferred = that._addFinishedDeferreds();
+ that._transition(data.context).done(
+ function () {
+ data.context = $(this);
+ that._trigger('failed', e, data);
+ that._trigger('finished', e, data);
+ deferred.resolve();
+ }
+ );
+ } else {
+ that._trigger('failed', e, data);
+ that._trigger('finished', e, data);
+ that._addFinishedDeferreds().resolve();
+ }
+ },
+ // Callback for upload progress events:
+ progress: function (e, data) {
+ if (e.isDefaultPrevented()) {
+ return false;
+ }
+ var progress = Math.floor(data.loaded / data.total * 100);
+ if (data.context) {
+ data.context.each(function () {
+ $(this).find('.progress')
+ .attr('aria-valuenow', progress)
+ .children().first().css(
+ 'width',
+ progress + '%'
+ );
+ });
+ }
+ },
+ // Callback for global upload progress events:
+ progressall: function (e, data) {
+ if (e.isDefaultPrevented()) {
+ return false;
+ }
+ var $this = $(this),
+ progress = Math.floor(data.loaded / data.total * 100),
+ globalProgressNode = $this.find('.fileupload-progress'),
+ extendedProgressNode = globalProgressNode
+ .find('.progress-extended');
+ if (extendedProgressNode.length) {
+ extendedProgressNode.html(
+ ($this.data('blueimp-fileupload') || $this.data('fileupload'))
+ ._renderExtendedProgress(data)
+ );
+ }
+ globalProgressNode
+ .find('.progress')
+ .attr('aria-valuenow', progress)
+ .children().first().css(
+ 'width',
+ progress + '%'
+ );
+ },
+ // Callback for uploads start, equivalent to the global ajaxStart event:
+ start: function (e) {
+ if (e.isDefaultPrevented()) {
+ return false;
+ }
+ var that = $(this).data('blueimp-fileupload') ||
+ $(this).data('fileupload');
+ that._resetFinishedDeferreds();
+ that._transition($(this).find('.fileupload-progress')).done(
+ function () {
+ that._trigger('started', e);
+ }
+ );
+ },
+ // Callback for uploads stop, equivalent to the global ajaxStop event:
+ stop: function (e) {
+ if (e.isDefaultPrevented()) {
+ return false;
+ }
+ var that = $(this).data('blueimp-fileupload') ||
+ $(this).data('fileupload'),
+ deferred = that._addFinishedDeferreds();
+ $.when.apply($, that._getFinishedDeferreds())
+ .done(function () {
+ that._trigger('stopped', e);
+ });
+ that._transition($(this).find('.fileupload-progress')).done(
+ function () {
+ $(this).find('.progress')
+ .attr('aria-valuenow', '0')
+ .children().first().css('width', '0%');
+ $(this).find('.progress-extended').html('&nbsp;');
+ deferred.resolve();
+ }
+ );
+ },
+ processstart: function (e) {
+ if (e.isDefaultPrevented()) {
+ return false;
+ }
+ $(this).addClass('fileupload-processing');
+ },
+ processstop: function (e) {
+ if (e.isDefaultPrevented()) {
+ return false;
+ }
+ $(this).removeClass('fileupload-processing');
+ },
+ // Callback for file deletion:
+ destroy: function (e, data) {
+ if (e.isDefaultPrevented()) {
+ return false;
+ }
+ var that = $(this).data('blueimp-fileupload') ||
+ $(this).data('fileupload'),
+ removeNode = function () {
+ that._transition(data.context).done(
+ function () {
+ $(this).remove();
+ that._trigger('destroyed', e, data);
+ }
+ );
+ };
+ if (data.url) {
+ data.dataType = data.dataType || that.options.dataType;
+ $.ajax(data).done(removeNode).fail(function () {
+ that._trigger('destroyfailed', e, data);
+ });
+ } else {
+ removeNode();
+ }
+ }
+ },
+
+ _resetFinishedDeferreds: function () {
+ this._finishedUploads = [];
+ },
+
+ _addFinishedDeferreds: function (deferred) {
+ if (!deferred) {
+ deferred = $.Deferred();
+ }
+ this._finishedUploads.push(deferred);
+ return deferred;
+ },
+
+ _getFinishedDeferreds: function () {
+ return this._finishedUploads;
+ },
+
+ // Link handler, that allows to download files
+ // by drag & drop of the links to the desktop:
+ _enableDragToDesktop: function () {
+ var link = $(this),
+ url = link.prop('href'),
+ name = link.prop('download'),
+ type = 'application/octet-stream';
+ link.bind('dragstart', function (e) {
+ try {
+ e.originalEvent.dataTransfer.setData(
+ 'DownloadURL',
+ [type, name, url].join(':')
+ );
+ } catch (ignore) {}
+ });
+ },
+
+ _formatFileSize: function (bytes) {
+ if (typeof bytes !== 'number') {
+ return '';
+ }
+ if (bytes >= 1000000000) {
+ return (bytes / 1000000000).toFixed(2) + ' GB';
+ }
+ if (bytes >= 1000000) {
+ return (bytes / 1000000).toFixed(2) + ' MB';
+ }
+ return (bytes / 1000).toFixed(2) + ' KB';
+ },
+
+ _formatBitrate: function (bits) {
+ if (typeof bits !== 'number') {
+ return '';
+ }
+ if (bits >= 1000000000) {
+ return (bits / 1000000000).toFixed(2) + ' Gbit/s';
+ }
+ if (bits >= 1000000) {
+ return (bits / 1000000).toFixed(2) + ' Mbit/s';
+ }
+ if (bits >= 1000) {
+ return (bits / 1000).toFixed(2) + ' kbit/s';
+ }
+ return bits.toFixed(2) + ' bit/s';
+ },
+
+ _formatTime: function (seconds) {
+ var date = new Date(seconds * 1000),
+ days = Math.floor(seconds / 86400);
+ days = days ? days + 'd ' : '';
+ return days +
+ ('0' + date.getUTCHours()).slice(-2) + ':' +
+ ('0' + date.getUTCMinutes()).slice(-2) + ':' +
+ ('0' + date.getUTCSeconds()).slice(-2);
+ },
+
+ _formatPercentage: function (floatValue) {
+ return (floatValue * 100).toFixed(2) + ' %';
+ },
+
+ _renderExtendedProgress: function (data) {
+ return this._formatBitrate(data.bitrate) + ' | ' +
+ this._formatTime(
+ (data.total - data.loaded) * 8 / data.bitrate
+ ) + ' | ' +
+ this._formatPercentage(
+ data.loaded / data.total
+ ) + ' | ' +
+ this._formatFileSize(data.loaded) + ' / ' +
+ this._formatFileSize(data.total);
+ },
+
+ _renderTemplate: function (func, files) {
+ if (!func) {
+ return $();
+ }
+ var result = func({
+ files: files,
+ formatFileSize: this._formatFileSize,
+ options: this.options
+ });
+ if (result instanceof $) {
+ return result;
+ }
+ return $(this.options.templatesContainer).html(result).children();
+ },
+
+ _renderPreviews: function (data) {
+ data.context.find('.preview').each(function (index, elm) {
+ $(elm).append(data.files[index].preview);
+ });
+ },
+
+ _renderUpload: function (files) {
+ return this._renderTemplate(
+ this.options.uploadTemplate,
+ files
+ );
+ },
+
+ _renderDownload: function (files) {
+ return this._renderTemplate(
+ this.options.downloadTemplate,
+ files
+ ).find('a[download]').each(this._enableDragToDesktop).end();
+ },
+
+ _startHandler: function (e) {
+ e.preventDefault();
+ var button = $(e.currentTarget),
+ template = button.closest('.template-upload'),
+ data = template.data('data');
+ button.prop('disabled', true);
+ if (data && data.submit) {
+ data.submit();
+ }
+ },
+
+ _cancelHandler: function (e) {
+ e.preventDefault();
+ var template = $(e.currentTarget)
+ .closest('.template-upload,.template-download'),
+ data = template.data('data') || {};
+ data.context = data.context || template;
+ if (data.abort) {
+ data.abort();
+ } else {
+ data.errorThrown = 'abort';
+ this._trigger('fail', e, data);
+ }
+ },
+
+ _deleteHandler: function (e) {
+ e.preventDefault();
+ var button = $(e.currentTarget);
+ this._trigger('destroy', e, $.extend({
+ context: button.closest('.template-download'),
+ type: 'DELETE'
+ }, button.data()));
+ },
+
+ _forceReflow: function (node) {
+ return $.support.transition && node.length &&
+ node[0].offsetWidth;
+ },
+
+ _transition: function (node) {
+ var dfd = $.Deferred();
+ if ($.support.transition && node.hasClass('fade') && node.is(':visible')) {
+ node.bind(
+ $.support.transition.end,
+ function (e) {
+ // Make sure we don't respond to other transitions events
+ // in the container element, e.g. from button elements:
+ if (e.target === node[0]) {
+ node.unbind($.support.transition.end);
+ dfd.resolveWith(node);
+ }
+ }
+ ).toggleClass('in');
+ } else {
+ node.toggleClass('in');
+ dfd.resolveWith(node);
+ }
+ return dfd;
+ },
+
+ _initButtonBarEventHandlers: function () {
+ var fileUploadButtonBar = this.element.find('.fileupload-buttonbar'),
+ filesList = this.options.filesContainer;
+ this._on(fileUploadButtonBar.find('.start'), {
+ click: function (e) {
+ e.preventDefault();
+ filesList.find('.start').click();
+ }
+ });
+ this._on(fileUploadButtonBar.find('.cancel'), {
+ click: function (e) {
+ e.preventDefault();
+ filesList.find('.cancel').click();
+ }
+ });
+ this._on(fileUploadButtonBar.find('.delete'), {
+ click: function (e) {
+ e.preventDefault();
+ filesList.find('.toggle:checked')
+ .closest('.template-download')
+ .find('.delete').click();
+ fileUploadButtonBar.find('.toggle')
+ .prop('checked', false);
+ }
+ });
+ this._on(fileUploadButtonBar.find('.toggle'), {
+ change: function (e) {
+ filesList.find('.toggle').prop(
+ 'checked',
+ $(e.currentTarget).is(':checked')
+ );
+ }
+ });
+ },
+
+ _destroyButtonBarEventHandlers: function () {
+ this._off(
+ this.element.find('.fileupload-buttonbar')
+ .find('.start, .cancel, .delete'),
+ 'click'
+ );
+ this._off(
+ this.element.find('.fileupload-buttonbar .toggle'),
+ 'change.'
+ );
+ },
+
+ _initEventHandlers: function () {
+ this._super();
+ this._on(this.options.filesContainer, {
+ 'click .start': this._startHandler,
+ 'click .cancel': this._cancelHandler,
+ 'click .delete': this._deleteHandler
+ });
+ this._initButtonBarEventHandlers();
+ },
+
+ _destroyEventHandlers: function () {
+ this._destroyButtonBarEventHandlers();
+ this._off(this.options.filesContainer, 'click');
+ this._super();
+ },
+
+ _enableFileInputButton: function () {
+ this.element.find('.fileinput-button input')
+ .prop('disabled', false)
+ .parent().removeClass('disabled');
+ },
+
+ _disableFileInputButton: function () {
+ this.element.find('.fileinput-button input')
+ .prop('disabled', true)
+ .parent().addClass('disabled');
+ },
+
+ _initTemplates: function () {
+ var options = this.options;
+ options.templatesContainer = this.document[0].createElement(
+ options.filesContainer.prop('nodeName')
+ );
+ if (tmpl) {
+ if (options.uploadTemplateId) {
+ options.uploadTemplate = tmpl(options.uploadTemplateId);
+ }
+ if (options.downloadTemplateId) {
+ options.downloadTemplate = tmpl(options.downloadTemplateId);
+ }
+ }
+ },
+
+ _initFilesContainer: function () {
+ var options = this.options;
+ if (options.filesContainer === undefined) {
+ options.filesContainer = this.element.find('.files');
+ } else if (!(options.filesContainer instanceof $)) {
+ options.filesContainer = $(options.filesContainer);
+ }
+ },
+
+ _initSpecialOptions: function () {
+ this._super();
+ this._initFilesContainer();
+ this._initTemplates();
+ },
+
+ _create: function () {
+ this._super();
+ this._resetFinishedDeferreds();
+ if (!$.support.fileInput) {
+ this._disableFileInputButton();
+ }
+ },
+
+ enable: function () {
+ var wasDisabled = false;
+ if (this.options.disabled) {
+ wasDisabled = true;
+ }
+ this._super();
+ if (wasDisabled) {
+ this.element.find('input, button').prop('disabled', false);
+ this._enableFileInputButton();
+ }
+ },
+
+ disable: function () {
+ if (!this.options.disabled) {
+ this.element.find('input, button').prop('disabled', true);
+ this._disableFileInputButton();
+ }
+ this._super();
+ }
+
+ });
+
+}));
diff --git a/library/blueimp_upload/js/jquery.fileupload-validate.js b/library/blueimp_upload/js/jquery.fileupload-validate.js
new file mode 100644
index 000000000..f93a18fa2
--- /dev/null
+++ b/library/blueimp_upload/js/jquery.fileupload-validate.js
@@ -0,0 +1,119 @@
+/*
+ * jQuery File Upload Validation Plugin 1.1.2
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/* global define, window */
+
+(function (factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define([
+ 'jquery',
+ './jquery.fileupload-process'
+ ], factory);
+ } else {
+ // Browser globals:
+ factory(
+ window.jQuery
+ );
+ }
+}(function ($) {
+ 'use strict';
+
+ // Append to the default processQueue:
+ $.blueimp.fileupload.prototype.options.processQueue.push(
+ {
+ action: 'validate',
+ // Always trigger this action,
+ // even if the previous action was rejected:
+ always: true,
+ // Options taken from the global options map:
+ acceptFileTypes: '@',
+ maxFileSize: '@',
+ minFileSize: '@',
+ maxNumberOfFiles: '@',
+ disabled: '@disableValidation'
+ }
+ );
+
+ // The File Upload Validation plugin extends the fileupload widget
+ // with file validation functionality:
+ $.widget('blueimp.fileupload', $.blueimp.fileupload, {
+
+ options: {
+ /*
+ // The regular expression for allowed file types, matches
+ // against either file type or file name:
+ acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
+ // The maximum allowed file size in bytes:
+ maxFileSize: 10000000, // 10 MB
+ // The minimum allowed file size in bytes:
+ minFileSize: undefined, // No minimal file size
+ // The limit of files to be uploaded:
+ maxNumberOfFiles: 10,
+ */
+
+ // Function returning the current number of files,
+ // has to be overriden for maxNumberOfFiles validation:
+ getNumberOfFiles: $.noop,
+
+ // Error and info messages:
+ messages: {
+ maxNumberOfFiles: 'Maximum number of files exceeded',
+ acceptFileTypes: 'File type not allowed',
+ maxFileSize: 'File is too large',
+ minFileSize: 'File is too small'
+ }
+ },
+
+ processActions: {
+
+ validate: function (data, options) {
+ if (options.disabled) {
+ return data;
+ }
+ var dfd = $.Deferred(),
+ settings = this.options,
+ file = data.files[data.index],
+ fileSize;
+ if (options.minFileSize || options.maxFileSize) {
+ fileSize = file.size;
+ }
+ if ($.type(options.maxNumberOfFiles) === 'number' &&
+ (settings.getNumberOfFiles() || 0) + data.files.length >
+ options.maxNumberOfFiles) {
+ file.error = settings.i18n('maxNumberOfFiles');
+ } else if (options.acceptFileTypes &&
+ !(options.acceptFileTypes.test(file.type) ||
+ options.acceptFileTypes.test(file.name))) {
+ file.error = settings.i18n('acceptFileTypes');
+ } else if (fileSize > options.maxFileSize) {
+ file.error = settings.i18n('maxFileSize');
+ } else if ($.type(fileSize) === 'number' &&
+ fileSize < options.minFileSize) {
+ file.error = settings.i18n('minFileSize');
+ } else {
+ delete file.error;
+ }
+ if (file.error || data.files.error) {
+ data.files.error = true;
+ dfd.rejectWith(this, [data]);
+ } else {
+ dfd.resolveWith(this, [data]);
+ }
+ return dfd.promise();
+ }
+
+ }
+
+ });
+
+}));
diff --git a/library/blueimp_upload/js/jquery.fileupload-video.js b/library/blueimp_upload/js/jquery.fileupload-video.js
new file mode 100644
index 000000000..3764b27a2
--- /dev/null
+++ b/library/blueimp_upload/js/jquery.fileupload-video.js
@@ -0,0 +1,106 @@
+/*
+ * jQuery File Upload Video Preview Plugin 1.0.3
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/* jshint nomen:false */
+/* global define, window, document */
+
+(function (factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define([
+ 'jquery',
+ 'load-image',
+ './jquery.fileupload-process'
+ ], factory);
+ } else {
+ // Browser globals:
+ factory(
+ window.jQuery,
+ window.loadImage
+ );
+ }
+}(function ($, loadImage) {
+ 'use strict';
+
+ // Prepend to the default processQueue:
+ $.blueimp.fileupload.prototype.options.processQueue.unshift(
+ {
+ action: 'loadVideo',
+ // Use the action as prefix for the "@" options:
+ prefix: true,
+ fileTypes: '@',
+ maxFileSize: '@',
+ disabled: '@disableVideoPreview'
+ },
+ {
+ action: 'setVideo',
+ name: '@videoPreviewName',
+ disabled: '@disableVideoPreview'
+ }
+ );
+
+ // The File Upload Video Preview plugin extends the fileupload widget
+ // with video preview functionality:
+ $.widget('blueimp.fileupload', $.blueimp.fileupload, {
+
+ options: {
+ // The regular expression for the types of video files to load,
+ // matched against the file type:
+ loadVideoFileTypes: /^video\/.*$/
+ },
+
+ _videoElement: document.createElement('video'),
+
+ processActions: {
+
+ // Loads the video file given via data.files and data.index
+ // as video element if the browser supports playing it.
+ // Accepts the options fileTypes (regular expression)
+ // and maxFileSize (integer) to limit the files to load:
+ loadVideo: function (data, options) {
+ if (options.disabled) {
+ return data;
+ }
+ var file = data.files[data.index],
+ url,
+ video;
+ if (this._videoElement.canPlayType &&
+ this._videoElement.canPlayType(file.type) &&
+ ($.type(options.maxFileSize) !== 'number' ||
+ file.size <= options.maxFileSize) &&
+ (!options.fileTypes ||
+ options.fileTypes.test(file.type))) {
+ url = loadImage.createObjectURL(file);
+ if (url) {
+ video = this._videoElement.cloneNode(false);
+ video.src = url;
+ video.controls = true;
+ data.video = video;
+ return data;
+ }
+ }
+ return data;
+ },
+
+ // Sets the video element as a property of the file object:
+ setVideo: function (data, options) {
+ if (data.video && !options.disabled) {
+ data.files[data.index][options.name || 'preview'] = data.video;
+ }
+ return data;
+ }
+
+ }
+
+ });
+
+}));
diff --git a/library/blueimp_upload/js/jquery.fileupload.js b/library/blueimp_upload/js/jquery.fileupload.js
new file mode 100644
index 000000000..a4cfdc0ac
--- /dev/null
+++ b/library/blueimp_upload/js/jquery.fileupload.js
@@ -0,0 +1,1457 @@
+/*
+ * jQuery File Upload Plugin 5.42.0
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/* jshint nomen:false */
+/* global define, window, document, location, Blob, FormData */
+
+(function (factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define([
+ 'jquery',
+ 'jquery.ui.widget'
+ ], factory);
+ } else {
+ // Browser globals:
+ factory(window.jQuery);
+ }
+}(function ($) {
+ 'use strict';
+
+ // Detect file input support, based on
+ // http://viljamis.com/blog/2012/file-upload-support-on-mobile/
+ $.support.fileInput = !(new RegExp(
+ // Handle devices which give false positives for the feature detection:
+ '(Android (1\\.[0156]|2\\.[01]))' +
+ '|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)' +
+ '|(w(eb)?OSBrowser)|(webOS)' +
+ '|(Kindle/(1\\.0|2\\.[05]|3\\.0))'
+ ).test(window.navigator.userAgent) ||
+ // Feature detection for all other devices:
+ $('<input type="file">').prop('disabled'));
+
+ // The FileReader API is not actually used, but works as feature detection,
+ // as some Safari versions (5?) support XHR file uploads via the FormData API,
+ // but not non-multipart XHR file uploads.
+ // window.XMLHttpRequestUpload is not available on IE10, so we check for
+ // window.ProgressEvent instead to detect XHR2 file upload capability:
+ $.support.xhrFileUpload = !!(window.ProgressEvent && window.FileReader);
+ $.support.xhrFormDataFileUpload = !!window.FormData;
+
+ // Detect support for Blob slicing (required for chunked uploads):
+ $.support.blobSlice = window.Blob && (Blob.prototype.slice ||
+ Blob.prototype.webkitSlice || Blob.prototype.mozSlice);
+
+ // Helper function to create drag handlers for dragover/dragenter/dragleave:
+ function getDragHandler(type) {
+ var isDragOver = type === 'dragover';
+ return function (e) {
+ e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;
+ var dataTransfer = e.dataTransfer;
+ if (dataTransfer && $.inArray('Files', dataTransfer.types) !== -1 &&
+ this._trigger(
+ type,
+ $.Event(type, {delegatedEvent: e})
+ ) !== false) {
+ e.preventDefault();
+ if (isDragOver) {
+ dataTransfer.dropEffect = 'copy';
+ }
+ }
+ };
+ }
+
+ // The fileupload widget listens for change events on file input fields defined
+ // via fileInput setting and paste or drop events of the given dropZone.
+ // In addition to the default jQuery Widget methods, the fileupload widget
+ // exposes the "add" and "send" methods, to add or directly send files using
+ // the fileupload API.
+ // By default, files added via file input selection, paste, drag & drop or
+ // "add" method are uploaded immediately, but it is possible to override
+ // the "add" callback option to queue file uploads.
+ $.widget('blueimp.fileupload', {
+
+ options: {
+ // The drop target element(s), by the default the complete document.
+ // Set to null to disable drag & drop support:
+ dropZone: $(document),
+ // The paste target element(s), by the default undefined.
+ // Set to a DOM node or jQuery object to enable file pasting:
+ pasteZone: undefined,
+ // The file input field(s), that are listened to for change events.
+ // If undefined, it is set to the file input fields inside
+ // of the widget element on plugin initialization.
+ // Set to null to disable the change listener.
+ fileInput: undefined,
+ // By default, the file input field is replaced with a clone after
+ // each input field change event. This is required for iframe transport
+ // queues and allows change events to be fired for the same file
+ // selection, but can be disabled by setting the following option to false:
+ replaceFileInput: true,
+ // The parameter name for the file form data (the request argument name).
+ // If undefined or empty, the name property of the file input field is
+ // used, or "files[]" if the file input name property is also empty,
+ // can be a string or an array of strings:
+ paramName: undefined,
+ // By default, each file of a selection is uploaded using an individual
+ // request for XHR type uploads. Set to false to upload file
+ // selections in one request each:
+ singleFileUploads: true,
+ // To limit the number of files uploaded with one XHR request,
+ // set the following option to an integer greater than 0:
+ limitMultiFileUploads: undefined,
+ // The following option limits the number of files uploaded with one
+ // XHR request to keep the request size under or equal to the defined
+ // limit in bytes:
+ limitMultiFileUploadSize: undefined,
+ // Multipart file uploads add a number of bytes to each uploaded file,
+ // therefore the following option adds an overhead for each file used
+ // in the limitMultiFileUploadSize configuration:
+ limitMultiFileUploadSizeOverhead: 512,
+ // Set the following option to true to issue all file upload requests
+ // in a sequential order:
+ sequentialUploads: false,
+ // To limit the number of concurrent uploads,
+ // set the following option to an integer greater than 0:
+ limitConcurrentUploads: undefined,
+ // Set the following option to true to force iframe transport uploads:
+ forceIframeTransport: false,
+ // Set the following option to the location of a redirect url on the
+ // origin server, for cross-domain iframe transport uploads:
+ redirect: undefined,
+ // The parameter name for the redirect url, sent as part of the form
+ // data and set to 'redirect' if this option is empty:
+ redirectParamName: undefined,
+ // Set the following option to the location of a postMessage window,
+ // to enable postMessage transport uploads:
+ postMessage: undefined,
+ // By default, XHR file uploads are sent as multipart/form-data.
+ // The iframe transport is always using multipart/form-data.
+ // Set to false to enable non-multipart XHR uploads:
+ multipart: true,
+ // To upload large files in smaller chunks, set the following option
+ // to a preferred maximum chunk size. If set to 0, null or undefined,
+ // or the browser does not support the required Blob API, files will
+ // be uploaded as a whole.
+ maxChunkSize: undefined,
+ // When a non-multipart upload or a chunked multipart upload has been
+ // aborted, this option can be used to resume the upload by setting
+ // it to the size of the already uploaded bytes. This option is most
+ // useful when modifying the options object inside of the "add" or
+ // "send" callbacks, as the options are cloned for each file upload.
+ uploadedBytes: undefined,
+ // By default, failed (abort or error) file uploads are removed from the
+ // global progress calculation. Set the following option to false to
+ // prevent recalculating the global progress data:
+ recalculateProgress: true,
+ // Interval in milliseconds to calculate and trigger progress events:
+ progressInterval: 100,
+ // Interval in milliseconds to calculate progress bitrate:
+ bitrateInterval: 500,
+ // By default, uploads are started automatically when adding files:
+ autoUpload: true,
+
+ // Error and info messages:
+ messages: {
+ uploadedBytes: 'Uploaded bytes exceed file size'
+ },
+
+ // Translation function, gets the message key to be translated
+ // and an object with context specific data as arguments:
+ i18n: function (message, context) {
+ message = this.messages[message] || message.toString();
+ if (context) {
+ $.each(context, function (key, value) {
+ message = message.replace('{' + key + '}', value);
+ });
+ }
+ return message;
+ },
+
+ // Additional form data to be sent along with the file uploads can be set
+ // using this option, which accepts an array of objects with name and
+ // value properties, a function returning such an array, a FormData
+ // object (for XHR file uploads), or a simple object.
+ // The form of the first fileInput is given as parameter to the function:
+ formData: function (form) {
+ return form.serializeArray();
+ },
+
+ // The add callback is invoked as soon as files are added to the fileupload
+ // widget (via file input selection, drag & drop, paste or add API call).
+ // If the singleFileUploads option is enabled, this callback will be
+ // called once for each file in the selection for XHR file uploads, else
+ // once for each file selection.
+ //
+ // The upload starts when the submit method is invoked on the data parameter.
+ // The data object contains a files property holding the added files
+ // and allows you to override plugin options as well as define ajax settings.
+ //
+ // Listeners for this callback can also be bound the following way:
+ // .bind('fileuploadadd', func);
+ //
+ // data.submit() returns a Promise object and allows to attach additional
+ // handlers using jQuery's Deferred callbacks:
+ // data.submit().done(func).fail(func).always(func);
+ add: function (e, data) {
+ if (e.isDefaultPrevented()) {
+ return false;
+ }
+ if (data.autoUpload || (data.autoUpload !== false &&
+ $(this).fileupload('option', 'autoUpload'))) {
+ data.process().done(function () {
+ data.submit();
+ });
+ }
+ },
+
+ // Other callbacks:
+
+ // Callback for the submit event of each file upload:
+ // submit: function (e, data) {}, // .bind('fileuploadsubmit', func);
+
+ // Callback for the start of each file upload request:
+ // send: function (e, data) {}, // .bind('fileuploadsend', func);
+
+ // Callback for successful uploads:
+ // done: function (e, data) {}, // .bind('fileuploaddone', func);
+
+ // Callback for failed (abort or error) uploads:
+ // fail: function (e, data) {}, // .bind('fileuploadfail', func);
+
+ // Callback for completed (success, abort or error) requests:
+ // always: function (e, data) {}, // .bind('fileuploadalways', func);
+
+ // Callback for upload progress events:
+ // progress: function (e, data) {}, // .bind('fileuploadprogress', func);
+
+ // Callback for global upload progress events:
+ // progressall: function (e, data) {}, // .bind('fileuploadprogressall', func);
+
+ // Callback for uploads start, equivalent to the global ajaxStart event:
+ // start: function (e) {}, // .bind('fileuploadstart', func);
+
+ // Callback for uploads stop, equivalent to the global ajaxStop event:
+ // stop: function (e) {}, // .bind('fileuploadstop', func);
+
+ // Callback for change events of the fileInput(s):
+ // change: function (e, data) {}, // .bind('fileuploadchange', func);
+
+ // Callback for paste events to the pasteZone(s):
+ // paste: function (e, data) {}, // .bind('fileuploadpaste', func);
+
+ // Callback for drop events of the dropZone(s):
+ // drop: function (e, data) {}, // .bind('fileuploaddrop', func);
+
+ // Callback for dragover events of the dropZone(s):
+ // dragover: function (e) {}, // .bind('fileuploaddragover', func);
+
+ // Callback for the start of each chunk upload request:
+ // chunksend: function (e, data) {}, // .bind('fileuploadchunksend', func);
+
+ // Callback for successful chunk uploads:
+ // chunkdone: function (e, data) {}, // .bind('fileuploadchunkdone', func);
+
+ // Callback for failed (abort or error) chunk uploads:
+ // chunkfail: function (e, data) {}, // .bind('fileuploadchunkfail', func);
+
+ // Callback for completed (success, abort or error) chunk upload requests:
+ // chunkalways: function (e, data) {}, // .bind('fileuploadchunkalways', func);
+
+ // The plugin options are used as settings object for the ajax calls.
+ // The following are jQuery ajax settings required for the file uploads:
+ processData: false,
+ contentType: false,
+ cache: false
+ },
+
+ // A list of options that require reinitializing event listeners and/or
+ // special initialization code:
+ _specialOptions: [
+ 'fileInput',
+ 'dropZone',
+ 'pasteZone',
+ 'multipart',
+ 'forceIframeTransport'
+ ],
+
+ _blobSlice: $.support.blobSlice && function () {
+ var slice = this.slice || this.webkitSlice || this.mozSlice;
+ return slice.apply(this, arguments);
+ },
+
+ _BitrateTimer: function () {
+ this.timestamp = ((Date.now) ? Date.now() : (new Date()).getTime());
+ this.loaded = 0;
+ this.bitrate = 0;
+ this.getBitrate = function (now, loaded, interval) {
+ var timeDiff = now - this.timestamp;
+ if (!this.bitrate || !interval || timeDiff > interval) {
+ this.bitrate = (loaded - this.loaded) * (1000 / timeDiff) * 8;
+ this.loaded = loaded;
+ this.timestamp = now;
+ }
+ return this.bitrate;
+ };
+ },
+
+ _isXHRUpload: function (options) {
+ return !options.forceIframeTransport &&
+ ((!options.multipart && $.support.xhrFileUpload) ||
+ $.support.xhrFormDataFileUpload);
+ },
+
+ _getFormData: function (options) {
+ var formData;
+ if ($.type(options.formData) === 'function') {
+ return options.formData(options.form);
+ }
+ if ($.isArray(options.formData)) {
+ return options.formData;
+ }
+ if ($.type(options.formData) === 'object') {
+ formData = [];
+ $.each(options.formData, function (name, value) {
+ formData.push({name: name, value: value});
+ });
+ return formData;
+ }
+ return [];
+ },
+
+ _getTotal: function (files) {
+ var total = 0;
+ $.each(files, function (index, file) {
+ total += file.size || 1;
+ });
+ return total;
+ },
+
+ _initProgressObject: function (obj) {
+ var progress = {
+ loaded: 0,
+ total: 0,
+ bitrate: 0
+ };
+ if (obj._progress) {
+ $.extend(obj._progress, progress);
+ } else {
+ obj._progress = progress;
+ }
+ },
+
+ _initResponseObject: function (obj) {
+ var prop;
+ if (obj._response) {
+ for (prop in obj._response) {
+ if (obj._response.hasOwnProperty(prop)) {
+ delete obj._response[prop];
+ }
+ }
+ } else {
+ obj._response = {};
+ }
+ },
+
+ _onProgress: function (e, data) {
+ if (e.lengthComputable) {
+ var now = ((Date.now) ? Date.now() : (new Date()).getTime()),
+ loaded;
+ if (data._time && data.progressInterval &&
+ (now - data._time < data.progressInterval) &&
+ e.loaded !== e.total) {
+ return;
+ }
+ data._time = now;
+ loaded = Math.floor(
+ e.loaded / e.total * (data.chunkSize || data._progress.total)
+ ) + (data.uploadedBytes || 0);
+ // Add the difference from the previously loaded state
+ // to the global loaded counter:
+ this._progress.loaded += (loaded - data._progress.loaded);
+ this._progress.bitrate = this._bitrateTimer.getBitrate(
+ now,
+ this._progress.loaded,
+ data.bitrateInterval
+ );
+ data._progress.loaded = data.loaded = loaded;
+ data._progress.bitrate = data.bitrate = data._bitrateTimer.getBitrate(
+ now,
+ loaded,
+ data.bitrateInterval
+ );
+ // Trigger a custom progress event with a total data property set
+ // to the file size(s) of the current upload and a loaded data
+ // property calculated accordingly:
+ this._trigger(
+ 'progress',
+ $.Event('progress', {delegatedEvent: e}),
+ data
+ );
+ // Trigger a global progress event for all current file uploads,
+ // including ajax calls queued for sequential file uploads:
+ this._trigger(
+ 'progressall',
+ $.Event('progressall', {delegatedEvent: e}),
+ this._progress
+ );
+ }
+ },
+
+ _initProgressListener: function (options) {
+ var that = this,
+ xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr();
+ // Accesss to the native XHR object is required to add event listeners
+ // for the upload progress event:
+ if (xhr.upload) {
+ $(xhr.upload).bind('progress', function (e) {
+ var oe = e.originalEvent;
+ // Make sure the progress event properties get copied over:
+ e.lengthComputable = oe.lengthComputable;
+ e.loaded = oe.loaded;
+ e.total = oe.total;
+ that._onProgress(e, options);
+ });
+ options.xhr = function () {
+ return xhr;
+ };
+ }
+ },
+
+ _isInstanceOf: function (type, obj) {
+ // Cross-frame instanceof check
+ return Object.prototype.toString.call(obj) === '[object ' + type + ']';
+ },
+
+ _initXHRData: function (options) {
+ var that = this,
+ formData,
+ file = options.files[0],
+ // Ignore non-multipart setting if not supported:
+ multipart = options.multipart || !$.support.xhrFileUpload,
+ paramName = $.type(options.paramName) === 'array' ?
+ options.paramName[0] : options.paramName;
+ options.headers = $.extend({}, options.headers);
+ if (options.contentRange) {
+ options.headers['Content-Range'] = options.contentRange;
+ }
+ if (!multipart || options.blob || !this._isInstanceOf('File', file)) {
+ options.headers['Content-Disposition'] = 'attachment; filename="' +
+ encodeURI(file.name) + '"';
+ }
+ if (!multipart) {
+ options.contentType = file.type || 'application/octet-stream';
+ options.data = options.blob || file;
+ } else if ($.support.xhrFormDataFileUpload) {
+ if (options.postMessage) {
+ // window.postMessage does not allow sending FormData
+ // objects, so we just add the File/Blob objects to
+ // the formData array and let the postMessage window
+ // create the FormData object out of this array:
+ formData = this._getFormData(options);
+ if (options.blob) {
+ formData.push({
+ name: paramName,
+ value: options.blob
+ });
+ } else {
+ $.each(options.files, function (index, file) {
+ formData.push({
+ name: ($.type(options.paramName) === 'array' &&
+ options.paramName[index]) || paramName,
+ value: file
+ });
+ });
+ }
+ } else {
+ if (that._isInstanceOf('FormData', options.formData)) {
+ formData = options.formData;
+ } else {
+ formData = new FormData();
+ $.each(this._getFormData(options), function (index, field) {
+ formData.append(field.name, field.value);
+ });
+ }
+ if (options.blob) {
+ formData.append(paramName, options.blob, file.name);
+ } else {
+ $.each(options.files, function (index, file) {
+ // This check allows the tests to run with
+ // dummy objects:
+ if (that._isInstanceOf('File', file) ||
+ that._isInstanceOf('Blob', file)) {
+ formData.append(
+ ($.type(options.paramName) === 'array' &&
+ options.paramName[index]) || paramName,
+ file,
+ file.uploadName || file.name
+ );
+ }
+ });
+ }
+ }
+ options.data = formData;
+ }
+ // Blob reference is not needed anymore, free memory:
+ options.blob = null;
+ },
+
+ _initIframeSettings: function (options) {
+ var targetHost = $('<a></a>').prop('href', options.url).prop('host');
+ // Setting the dataType to iframe enables the iframe transport:
+ options.dataType = 'iframe ' + (options.dataType || '');
+ // The iframe transport accepts a serialized array as form data:
+ options.formData = this._getFormData(options);
+ // Add redirect url to form data on cross-domain uploads:
+ if (options.redirect && targetHost && targetHost !== location.host) {
+ options.formData.push({
+ name: options.redirectParamName || 'redirect',
+ value: options.redirect
+ });
+ }
+ },
+
+ _initDataSettings: function (options) {
+ if (this._isXHRUpload(options)) {
+ if (!this._chunkedUpload(options, true)) {
+ if (!options.data) {
+ this._initXHRData(options);
+ }
+ this._initProgressListener(options);
+ }
+ if (options.postMessage) {
+ // Setting the dataType to postmessage enables the
+ // postMessage transport:
+ options.dataType = 'postmessage ' + (options.dataType || '');
+ }
+ } else {
+ this._initIframeSettings(options);
+ }
+ },
+
+ _getParamName: function (options) {
+ var fileInput = $(options.fileInput),
+ paramName = options.paramName;
+ if (!paramName) {
+ paramName = [];
+ fileInput.each(function () {
+ var input = $(this),
+ name = input.prop('name') || 'files[]',
+ i = (input.prop('files') || [1]).length;
+ while (i) {
+ paramName.push(name);
+ i -= 1;
+ }
+ });
+ if (!paramName.length) {
+ paramName = [fileInput.prop('name') || 'files[]'];
+ }
+ } else if (!$.isArray(paramName)) {
+ paramName = [paramName];
+ }
+ return paramName;
+ },
+
+ _initFormSettings: function (options) {
+ // Retrieve missing options from the input field and the
+ // associated form, if available:
+ if (!options.form || !options.form.length) {
+ options.form = $(options.fileInput.prop('form'));
+ // If the given file input doesn't have an associated form,
+ // use the default widget file input's form:
+ if (!options.form.length) {
+ options.form = $(this.options.fileInput.prop('form'));
+ }
+ }
+ options.paramName = this._getParamName(options);
+ if (!options.url) {
+ options.url = options.form.prop('action') || location.href;
+ }
+ // The HTTP request method must be "POST" or "PUT":
+ options.type = (options.type ||
+ ($.type(options.form.prop('method')) === 'string' &&
+ options.form.prop('method')) || ''
+ ).toUpperCase();
+ if (options.type !== 'POST' && options.type !== 'PUT' &&
+ options.type !== 'PATCH') {
+ options.type = 'POST';
+ }
+ if (!options.formAcceptCharset) {
+ options.formAcceptCharset = options.form.attr('accept-charset');
+ }
+ },
+
+ _getAJAXSettings: function (data) {
+ var options = $.extend({}, this.options, data);
+ this._initFormSettings(options);
+ this._initDataSettings(options);
+ return options;
+ },
+
+ // jQuery 1.6 doesn't provide .state(),
+ // while jQuery 1.8+ removed .isRejected() and .isResolved():
+ _getDeferredState: function (deferred) {
+ if (deferred.state) {
+ return deferred.state();
+ }
+ if (deferred.isResolved()) {
+ return 'resolved';
+ }
+ if (deferred.isRejected()) {
+ return 'rejected';
+ }
+ return 'pending';
+ },
+
+ // Maps jqXHR callbacks to the equivalent
+ // methods of the given Promise object:
+ _enhancePromise: function (promise) {
+ promise.success = promise.done;
+ promise.error = promise.fail;
+ promise.complete = promise.always;
+ return promise;
+ },
+
+ // Creates and returns a Promise object enhanced with
+ // the jqXHR methods abort, success, error and complete:
+ _getXHRPromise: function (resolveOrReject, context, args) {
+ var dfd = $.Deferred(),
+ promise = dfd.promise();
+ context = context || this.options.context || promise;
+ if (resolveOrReject === true) {
+ dfd.resolveWith(context, args);
+ } else if (resolveOrReject === false) {
+ dfd.rejectWith(context, args);
+ }
+ promise.abort = dfd.promise;
+ return this._enhancePromise(promise);
+ },
+
+ // Adds convenience methods to the data callback argument:
+ _addConvenienceMethods: function (e, data) {
+ var that = this,
+ getPromise = function (args) {
+ return $.Deferred().resolveWith(that, args).promise();
+ };
+ data.process = function (resolveFunc, rejectFunc) {
+ if (resolveFunc || rejectFunc) {
+ data._processQueue = this._processQueue =
+ (this._processQueue || getPromise([this])).pipe(
+ function () {
+ if (data.errorThrown) {
+ return $.Deferred()
+ .rejectWith(that, [data]).promise();
+ }
+ return getPromise(arguments);
+ }
+ ).pipe(resolveFunc, rejectFunc);
+ }
+ return this._processQueue || getPromise([this]);
+ };
+ data.submit = function () {
+ if (this.state() !== 'pending') {
+ data.jqXHR = this.jqXHR =
+ (that._trigger(
+ 'submit',
+ $.Event('submit', {delegatedEvent: e}),
+ this
+ ) !== false) && that._onSend(e, this);
+ }
+ return this.jqXHR || that._getXHRPromise();
+ };
+ data.abort = function () {
+ if (this.jqXHR) {
+ return this.jqXHR.abort();
+ }
+ this.errorThrown = 'abort';
+ that._trigger('fail', null, this);
+ return that._getXHRPromise(false);
+ };
+ data.state = function () {
+ if (this.jqXHR) {
+ return that._getDeferredState(this.jqXHR);
+ }
+ if (this._processQueue) {
+ return that._getDeferredState(this._processQueue);
+ }
+ };
+ data.processing = function () {
+ return !this.jqXHR && this._processQueue && that
+ ._getDeferredState(this._processQueue) === 'pending';
+ };
+ data.progress = function () {
+ return this._progress;
+ };
+ data.response = function () {
+ return this._response;
+ };
+ },
+
+ // Parses the Range header from the server response
+ // and returns the uploaded bytes:
+ _getUploadedBytes: function (jqXHR) {
+ var range = jqXHR.getResponseHeader('Range'),
+ parts = range && range.split('-'),
+ upperBytesPos = parts && parts.length > 1 &&
+ parseInt(parts[1], 10);
+ return upperBytesPos && upperBytesPos + 1;
+ },
+
+ // Uploads a file in multiple, sequential requests
+ // by splitting the file up in multiple blob chunks.
+ // If the second parameter is true, only tests if the file
+ // should be uploaded in chunks, but does not invoke any
+ // upload requests:
+ _chunkedUpload: function (options, testOnly) {
+ options.uploadedBytes = options.uploadedBytes || 0;
+ var that = this,
+ file = options.files[0],
+ fs = file.size,
+ ub = options.uploadedBytes,
+ mcs = options.maxChunkSize || fs,
+ slice = this._blobSlice,
+ dfd = $.Deferred(),
+ promise = dfd.promise(),
+ jqXHR,
+ upload;
+ if (!(this._isXHRUpload(options) && slice && (ub || mcs < fs)) ||
+ options.data) {
+ return false;
+ }
+ if (testOnly) {
+ return true;
+ }
+ if (ub >= fs) {
+ file.error = options.i18n('uploadedBytes');
+ return this._getXHRPromise(
+ false,
+ options.context,
+ [null, 'error', file.error]
+ );
+ }
+ // The chunk upload method:
+ upload = function () {
+ // Clone the options object for each chunk upload:
+ var o = $.extend({}, options),
+ currentLoaded = o._progress.loaded;
+ o.blob = slice.call(
+ file,
+ ub,
+ ub + mcs,
+ file.type
+ );
+ // Store the current chunk size, as the blob itself
+ // will be dereferenced after data processing:
+ o.chunkSize = o.blob.size;
+ // Expose the chunk bytes position range:
+ o.contentRange = 'bytes ' + ub + '-' +
+ (ub + o.chunkSize - 1) + '/' + fs;
+ // Process the upload data (the blob and potential form data):
+ that._initXHRData(o);
+ // Add progress listeners for this chunk upload:
+ that._initProgressListener(o);
+ jqXHR = ((that._trigger('chunksend', null, o) !== false && $.ajax(o)) ||
+ that._getXHRPromise(false, o.context))
+ .done(function (result, textStatus, jqXHR) {
+ ub = that._getUploadedBytes(jqXHR) ||
+ (ub + o.chunkSize);
+ // Create a progress event if no final progress event
+ // with loaded equaling total has been triggered
+ // for this chunk:
+ if (currentLoaded + o.chunkSize - o._progress.loaded) {
+ that._onProgress($.Event('progress', {
+ lengthComputable: true,
+ loaded: ub - o.uploadedBytes,
+ total: ub - o.uploadedBytes
+ }), o);
+ }
+ options.uploadedBytes = o.uploadedBytes = ub;
+ o.result = result;
+ o.textStatus = textStatus;
+ o.jqXHR = jqXHR;
+ that._trigger('chunkdone', null, o);
+ that._trigger('chunkalways', null, o);
+ if (ub < fs) {
+ // File upload not yet complete,
+ // continue with the next chunk:
+ upload();
+ } else {
+ dfd.resolveWith(
+ o.context,
+ [result, textStatus, jqXHR]
+ );
+ }
+ })
+ .fail(function (jqXHR, textStatus, errorThrown) {
+ o.jqXHR = jqXHR;
+ o.textStatus = textStatus;
+ o.errorThrown = errorThrown;
+ that._trigger('chunkfail', null, o);
+ that._trigger('chunkalways', null, o);
+ dfd.rejectWith(
+ o.context,
+ [jqXHR, textStatus, errorThrown]
+ );
+ });
+ };
+ this._enhancePromise(promise);
+ promise.abort = function () {
+ return jqXHR.abort();
+ };
+ upload();
+ return promise;
+ },
+
+ _beforeSend: function (e, data) {
+ if (this._active === 0) {
+ // the start callback is triggered when an upload starts
+ // and no other uploads are currently running,
+ // equivalent to the global ajaxStart event:
+ this._trigger('start');
+ // Set timer for global bitrate progress calculation:
+ this._bitrateTimer = new this._BitrateTimer();
+ // Reset the global progress values:
+ this._progress.loaded = this._progress.total = 0;
+ this._progress.bitrate = 0;
+ }
+ // Make sure the container objects for the .response() and
+ // .progress() methods on the data object are available
+ // and reset to their initial state:
+ this._initResponseObject(data);
+ this._initProgressObject(data);
+ data._progress.loaded = data.loaded = data.uploadedBytes || 0;
+ data._progress.total = data.total = this._getTotal(data.files) || 1;
+ data._progress.bitrate = data.bitrate = 0;
+ this._active += 1;
+ // Initialize the global progress values:
+ this._progress.loaded += data.loaded;
+ this._progress.total += data.total;
+ },
+
+ _onDone: function (result, textStatus, jqXHR, options) {
+ var total = options._progress.total,
+ response = options._response;
+ if (options._progress.loaded < total) {
+ // Create a progress event if no final progress event
+ // with loaded equaling total has been triggered:
+ this._onProgress($.Event('progress', {
+ lengthComputable: true,
+ loaded: total,
+ total: total
+ }), options);
+ }
+ response.result = options.result = result;
+ response.textStatus = options.textStatus = textStatus;
+ response.jqXHR = options.jqXHR = jqXHR;
+ this._trigger('done', null, options);
+ },
+
+ _onFail: function (jqXHR, textStatus, errorThrown, options) {
+ var response = options._response;
+ if (options.recalculateProgress) {
+ // Remove the failed (error or abort) file upload from
+ // the global progress calculation:
+ this._progress.loaded -= options._progress.loaded;
+ this._progress.total -= options._progress.total;
+ }
+ response.jqXHR = options.jqXHR = jqXHR;
+ response.textStatus = options.textStatus = textStatus;
+ response.errorThrown = options.errorThrown = errorThrown;
+ this._trigger('fail', null, options);
+ },
+
+ _onAlways: function (jqXHRorResult, textStatus, jqXHRorError, options) {
+ // jqXHRorResult, textStatus and jqXHRorError are added to the
+ // options object via done and fail callbacks
+ this._trigger('always', null, options);
+ },
+
+ _onSend: function (e, data) {
+ if (!data.submit) {
+ this._addConvenienceMethods(e, data);
+ }
+ var that = this,
+ jqXHR,
+ aborted,
+ slot,
+ pipe,
+ options = that._getAJAXSettings(data),
+ send = function () {
+ that._sending += 1;
+ // Set timer for bitrate progress calculation:
+ options._bitrateTimer = new that._BitrateTimer();
+ jqXHR = jqXHR || (
+ ((aborted || that._trigger(
+ 'send',
+ $.Event('send', {delegatedEvent: e}),
+ options
+ ) === false) &&
+ that._getXHRPromise(false, options.context, aborted)) ||
+ that._chunkedUpload(options) || $.ajax(options)
+ ).done(function (result, textStatus, jqXHR) {
+ that._onDone(result, textStatus, jqXHR, options);
+ }).fail(function (jqXHR, textStatus, errorThrown) {
+ that._onFail(jqXHR, textStatus, errorThrown, options);
+ }).always(function (jqXHRorResult, textStatus, jqXHRorError) {
+ that._onAlways(
+ jqXHRorResult,
+ textStatus,
+ jqXHRorError,
+ options
+ );
+ that._sending -= 1;
+ that._active -= 1;
+ if (options.limitConcurrentUploads &&
+ options.limitConcurrentUploads > that._sending) {
+ // Start the next queued upload,
+ // that has not been aborted:
+ var nextSlot = that._slots.shift();
+ while (nextSlot) {
+ if (that._getDeferredState(nextSlot) === 'pending') {
+ nextSlot.resolve();
+ break;
+ }
+ nextSlot = that._slots.shift();
+ }
+ }
+ if (that._active === 0) {
+ // The stop callback is triggered when all uploads have
+ // been completed, equivalent to the global ajaxStop event:
+ that._trigger('stop');
+ }
+ });
+ return jqXHR;
+ };
+ this._beforeSend(e, options);
+ if (this.options.sequentialUploads ||
+ (this.options.limitConcurrentUploads &&
+ this.options.limitConcurrentUploads <= this._sending)) {
+ if (this.options.limitConcurrentUploads > 1) {
+ slot = $.Deferred();
+ this._slots.push(slot);
+ pipe = slot.pipe(send);
+ } else {
+ this._sequence = this._sequence.pipe(send, send);
+ pipe = this._sequence;
+ }
+ // Return the piped Promise object, enhanced with an abort method,
+ // which is delegated to the jqXHR object of the current upload,
+ // and jqXHR callbacks mapped to the equivalent Promise methods:
+ pipe.abort = function () {
+ aborted = [undefined, 'abort', 'abort'];
+ if (!jqXHR) {
+ if (slot) {
+ slot.rejectWith(options.context, aborted);
+ }
+ return send();
+ }
+ return jqXHR.abort();
+ };
+ return this._enhancePromise(pipe);
+ }
+ return send();
+ },
+
+ _onAdd: function (e, data) {
+ var that = this,
+ result = true,
+ options = $.extend({}, this.options, data),
+ files = data.files,
+ filesLength = files.length,
+ limit = options.limitMultiFileUploads,
+ limitSize = options.limitMultiFileUploadSize,
+ overhead = options.limitMultiFileUploadSizeOverhead,
+ batchSize = 0,
+ paramName = this._getParamName(options),
+ paramNameSet,
+ paramNameSlice,
+ fileSet,
+ i,
+ j = 0;
+ if (limitSize && (!filesLength || files[0].size === undefined)) {
+ limitSize = undefined;
+ }
+ if (!(options.singleFileUploads || limit || limitSize) ||
+ !this._isXHRUpload(options)) {
+ fileSet = [files];
+ paramNameSet = [paramName];
+ } else if (!(options.singleFileUploads || limitSize) && limit) {
+ fileSet = [];
+ paramNameSet = [];
+ for (i = 0; i < filesLength; i += limit) {
+ fileSet.push(files.slice(i, i + limit));
+ paramNameSlice = paramName.slice(i, i + limit);
+ if (!paramNameSlice.length) {
+ paramNameSlice = paramName;
+ }
+ paramNameSet.push(paramNameSlice);
+ }
+ } else if (!options.singleFileUploads && limitSize) {
+ fileSet = [];
+ paramNameSet = [];
+ for (i = 0; i < filesLength; i = i + 1) {
+ batchSize += files[i].size + overhead;
+ if (i + 1 === filesLength ||
+ ((batchSize + files[i + 1].size + overhead) > limitSize) ||
+ (limit && i + 1 - j >= limit)) {
+ fileSet.push(files.slice(j, i + 1));
+ paramNameSlice = paramName.slice(j, i + 1);
+ if (!paramNameSlice.length) {
+ paramNameSlice = paramName;
+ }
+ paramNameSet.push(paramNameSlice);
+ j = i + 1;
+ batchSize = 0;
+ }
+ }
+ } else {
+ paramNameSet = paramName;
+ }
+ data.originalFiles = files;
+ $.each(fileSet || files, function (index, element) {
+ var newData = $.extend({}, data);
+ newData.files = fileSet ? element : [element];
+ newData.paramName = paramNameSet[index];
+ that._initResponseObject(newData);
+ that._initProgressObject(newData);
+ that._addConvenienceMethods(e, newData);
+ result = that._trigger(
+ 'add',
+ $.Event('add', {delegatedEvent: e}),
+ newData
+ );
+ return result;
+ });
+ return result;
+ },
+
+ _replaceFileInput: function (data) {
+ var input = data.fileInput,
+ inputClone = input.clone(true);
+ // Add a reference for the new cloned file input to the data argument:
+ data.fileInputClone = inputClone;
+ $('<form></form>').append(inputClone)[0].reset();
+ // Detaching allows to insert the fileInput on another form
+ // without loosing the file input value:
+ input.after(inputClone).detach();
+ // Avoid memory leaks with the detached file input:
+ $.cleanData(input.unbind('remove'));
+ // Replace the original file input element in the fileInput
+ // elements set with the clone, which has been copied including
+ // event handlers:
+ this.options.fileInput = this.options.fileInput.map(function (i, el) {
+ if (el === input[0]) {
+ return inputClone[0];
+ }
+ return el;
+ });
+ // If the widget has been initialized on the file input itself,
+ // override this.element with the file input clone:
+ if (input[0] === this.element[0]) {
+ this.element = inputClone;
+ }
+ },
+
+ _handleFileTreeEntry: function (entry, path) {
+ var that = this,
+ dfd = $.Deferred(),
+ errorHandler = function (e) {
+ if (e && !e.entry) {
+ e.entry = entry;
+ }
+ // Since $.when returns immediately if one
+ // Deferred is rejected, we use resolve instead.
+ // This allows valid files and invalid items
+ // to be returned together in one set:
+ dfd.resolve([e]);
+ },
+ successHandler = function (entries) {
+ that._handleFileTreeEntries(
+ entries,
+ path + entry.name + '/'
+ ).done(function (files) {
+ dfd.resolve(files);
+ }).fail(errorHandler);
+ },
+ readEntries = function () {
+ dirReader.readEntries(function (results) {
+ if (!results.length) {
+ successHandler(entries);
+ } else {
+ entries = entries.concat(results);
+ readEntries();
+ }
+ }, errorHandler);
+ },
+ dirReader, entries = [];
+ path = path || '';
+ if (entry.isFile) {
+ if (entry._file) {
+ // Workaround for Chrome bug #149735
+ entry._file.relativePath = path;
+ dfd.resolve(entry._file);
+ } else {
+ entry.file(function (file) {
+ file.relativePath = path;
+ dfd.resolve(file);
+ }, errorHandler);
+ }
+ } else if (entry.isDirectory) {
+ dirReader = entry.createReader();
+ readEntries();
+ } else {
+ // Return an empy list for file system items
+ // other than files or directories:
+ dfd.resolve([]);
+ }
+ return dfd.promise();
+ },
+
+ _handleFileTreeEntries: function (entries, path) {
+ var that = this;
+ return $.when.apply(
+ $,
+ $.map(entries, function (entry) {
+ return that._handleFileTreeEntry(entry, path);
+ })
+ ).pipe(function () {
+ return Array.prototype.concat.apply(
+ [],
+ arguments
+ );
+ });
+ },
+
+ _getDroppedFiles: function (dataTransfer) {
+ dataTransfer = dataTransfer || {};
+ var items = dataTransfer.items;
+ if (items && items.length && (items[0].webkitGetAsEntry ||
+ items[0].getAsEntry)) {
+ return this._handleFileTreeEntries(
+ $.map(items, function (item) {
+ var entry;
+ if (item.webkitGetAsEntry) {
+ entry = item.webkitGetAsEntry();
+ if (entry) {
+ // Workaround for Chrome bug #149735:
+ entry._file = item.getAsFile();
+ }
+ return entry;
+ }
+ return item.getAsEntry();
+ })
+ );
+ }
+ return $.Deferred().resolve(
+ $.makeArray(dataTransfer.files)
+ ).promise();
+ },
+
+ _getSingleFileInputFiles: function (fileInput) {
+ fileInput = $(fileInput);
+ var entries = fileInput.prop('webkitEntries') ||
+ fileInput.prop('entries'),
+ files,
+ value;
+ if (entries && entries.length) {
+ return this._handleFileTreeEntries(entries);
+ }
+ files = $.makeArray(fileInput.prop('files'));
+ if (!files.length) {
+ value = fileInput.prop('value');
+ if (!value) {
+ return $.Deferred().resolve([]).promise();
+ }
+ // If the files property is not available, the browser does not
+ // support the File API and we add a pseudo File object with
+ // the input value as name with path information removed:
+ files = [{name: value.replace(/^.*\\/, '')}];
+ } else if (files[0].name === undefined && files[0].fileName) {
+ // File normalization for Safari 4 and Firefox 3:
+ $.each(files, function (index, file) {
+ file.name = file.fileName;
+ file.size = file.fileSize;
+ });
+ }
+ return $.Deferred().resolve(files).promise();
+ },
+
+ _getFileInputFiles: function (fileInput) {
+ if (!(fileInput instanceof $) || fileInput.length === 1) {
+ return this._getSingleFileInputFiles(fileInput);
+ }
+ return $.when.apply(
+ $,
+ $.map(fileInput, this._getSingleFileInputFiles)
+ ).pipe(function () {
+ return Array.prototype.concat.apply(
+ [],
+ arguments
+ );
+ });
+ },
+
+ _onChange: function (e) {
+ var that = this,
+ data = {
+ fileInput: $(e.target),
+ form: $(e.target.form)
+ };
+ this._getFileInputFiles(data.fileInput).always(function (files) {
+ data.files = files;
+ if (that.options.replaceFileInput) {
+ that._replaceFileInput(data);
+ }
+ if (that._trigger(
+ 'change',
+ $.Event('change', {delegatedEvent: e}),
+ data
+ ) !== false) {
+ that._onAdd(e, data);
+ }
+ });
+ },
+
+ _onPaste: function (e) {
+ var items = e.originalEvent && e.originalEvent.clipboardData &&
+ e.originalEvent.clipboardData.items,
+ data = {files: []};
+ if (items && items.length) {
+ $.each(items, function (index, item) {
+ var file = item.getAsFile && item.getAsFile();
+ if (file) {
+ data.files.push(file);
+ }
+ });
+ if (this._trigger(
+ 'paste',
+ $.Event('paste', {delegatedEvent: e}),
+ data
+ ) !== false) {
+ this._onAdd(e, data);
+ }
+ }
+ },
+
+ _onDrop: function (e) {
+ e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;
+ var that = this,
+ dataTransfer = e.dataTransfer,
+ data = {};
+ if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {
+ e.preventDefault();
+ this._getDroppedFiles(dataTransfer).always(function (files) {
+ data.files = files;
+ if (that._trigger(
+ 'drop',
+ $.Event('drop', {delegatedEvent: e}),
+ data
+ ) !== false) {
+ that._onAdd(e, data);
+ }
+ });
+ }
+ },
+
+ _onDragOver: getDragHandler('dragover'),
+
+ _onDragEnter: getDragHandler('dragenter'),
+
+ _onDragLeave: getDragHandler('dragleave'),
+
+ _initEventHandlers: function () {
+ if (this._isXHRUpload(this.options)) {
+ this._on(this.options.dropZone, {
+ dragover: this._onDragOver,
+ drop: this._onDrop,
+ // event.preventDefault() on dragenter is required for IE10+:
+ dragenter: this._onDragEnter,
+ // dragleave is not required, but added for completeness:
+ dragleave: this._onDragLeave
+ });
+ this._on(this.options.pasteZone, {
+ paste: this._onPaste
+ });
+ }
+ if ($.support.fileInput) {
+ this._on(this.options.fileInput, {
+ change: this._onChange
+ });
+ }
+ },
+
+ _destroyEventHandlers: function () {
+ this._off(this.options.dropZone, 'dragenter dragleave dragover drop');
+ this._off(this.options.pasteZone, 'paste');
+ this._off(this.options.fileInput, 'change');
+ },
+
+ _setOption: function (key, value) {
+ var reinit = $.inArray(key, this._specialOptions) !== -1;
+ if (reinit) {
+ this._destroyEventHandlers();
+ }
+ this._super(key, value);
+ if (reinit) {
+ this._initSpecialOptions();
+ this._initEventHandlers();
+ }
+ },
+
+ _initSpecialOptions: function () {
+ var options = this.options;
+ if (options.fileInput === undefined) {
+ options.fileInput = this.element.is('input[type="file"]') ?
+ this.element : this.element.find('input[type="file"]');
+ } else if (!(options.fileInput instanceof $)) {
+ options.fileInput = $(options.fileInput);
+ }
+ if (!(options.dropZone instanceof $)) {
+ options.dropZone = $(options.dropZone);
+ }
+ if (!(options.pasteZone instanceof $)) {
+ options.pasteZone = $(options.pasteZone);
+ }
+ },
+
+ _getRegExp: function (str) {
+ var parts = str.split('/'),
+ modifiers = parts.pop();
+ parts.shift();
+ return new RegExp(parts.join('/'), modifiers);
+ },
+
+ _isRegExpOption: function (key, value) {
+ return key !== 'url' && $.type(value) === 'string' &&
+ /^\/.*\/[igm]{0,3}$/.test(value);
+ },
+
+ _initDataAttributes: function () {
+ var that = this,
+ options = this.options,
+ clone = $(this.element[0].cloneNode(false));
+ // Initialize options set via HTML5 data-attributes:
+ $.each(
+ clone.data(),
+ function (key, value) {
+ var dataAttributeName = 'data-' +
+ // Convert camelCase to hyphen-ated key:
+ key.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
+ if (clone.attr(dataAttributeName)) {
+ if (that._isRegExpOption(key, value)) {
+ value = that._getRegExp(value);
+ }
+ options[key] = value;
+ }
+ }
+ );
+ },
+
+ _create: function () {
+ this._initDataAttributes();
+ this._initSpecialOptions();
+ this._slots = [];
+ this._sequence = this._getXHRPromise(true);
+ this._sending = this._active = 0;
+ this._initProgressObject(this);
+ this._initEventHandlers();
+ },
+
+ // This method is exposed to the widget API and allows to query
+ // the number of active uploads:
+ active: function () {
+ return this._active;
+ },
+
+ // This method is exposed to the widget API and allows to query
+ // the widget upload progress.
+ // It returns an object with loaded, total and bitrate properties
+ // for the running uploads:
+ progress: function () {
+ return this._progress;
+ },
+
+ // This method is exposed to the widget API and allows adding files
+ // using the fileupload API. The data parameter accepts an object which
+ // must have a files property and can contain additional options:
+ // .fileupload('add', {files: filesList});
+ add: function (data) {
+ var that = this;
+ if (!data || this.options.disabled) {
+ return;
+ }
+ if (data.fileInput && !data.files) {
+ this._getFileInputFiles(data.fileInput).always(function (files) {
+ data.files = files;
+ that._onAdd(null, data);
+ });
+ } else {
+ data.files = $.makeArray(data.files);
+ this._onAdd(null, data);
+ }
+ },
+
+ // This method is exposed to the widget API and allows sending files
+ // using the fileupload API. The data parameter accepts an object which
+ // must have a files or fileInput property and can contain additional options:
+ // .fileupload('send', {files: filesList});
+ // The method returns a Promise object for the file upload call.
+ send: function (data) {
+ if (data && !this.options.disabled) {
+ if (data.fileInput && !data.files) {
+ var that = this,
+ dfd = $.Deferred(),
+ promise = dfd.promise(),
+ jqXHR,
+ aborted;
+ promise.abort = function () {
+ aborted = true;
+ if (jqXHR) {
+ return jqXHR.abort();
+ }
+ dfd.reject(null, 'abort', 'abort');
+ return promise;
+ };
+ this._getFileInputFiles(data.fileInput).always(
+ function (files) {
+ if (aborted) {
+ return;
+ }
+ if (!files.length) {
+ dfd.reject();
+ return;
+ }
+ data.files = files;
+ jqXHR = that._onSend(null, data);
+ jqXHR.then(
+ function (result, textStatus, jqXHR) {
+ dfd.resolve(result, textStatus, jqXHR);
+ },
+ function (jqXHR, textStatus, errorThrown) {
+ dfd.reject(jqXHR, textStatus, errorThrown);
+ }
+ );
+ }
+ );
+ return this._enhancePromise(promise);
+ }
+ data.files = $.makeArray(data.files);
+ if (data.files.length) {
+ return this._onSend(null, data);
+ }
+ }
+ return this._getXHRPromise(false, data && data.context);
+ }
+
+ });
+
+}));
diff --git a/library/blueimp_upload/js/jquery.iframe-transport.js b/library/blueimp_upload/js/jquery.iframe-transport.js
new file mode 100644
index 000000000..8d64b591b
--- /dev/null
+++ b/library/blueimp_upload/js/jquery.iframe-transport.js
@@ -0,0 +1,214 @@
+/*
+ * jQuery Iframe Transport Plugin 1.8.2
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/* global define, window, document */
+
+(function (factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define(['jquery'], factory);
+ } else {
+ // Browser globals:
+ factory(window.jQuery);
+ }
+}(function ($) {
+ 'use strict';
+
+ // Helper variable to create unique names for the transport iframes:
+ var counter = 0;
+
+ // The iframe transport accepts four additional options:
+ // options.fileInput: a jQuery collection of file input fields
+ // options.paramName: the parameter name for the file form data,
+ // overrides the name property of the file input field(s),
+ // can be a string or an array of strings.
+ // options.formData: an array of objects with name and value properties,
+ // equivalent to the return data of .serializeArray(), e.g.:
+ // [{name: 'a', value: 1}, {name: 'b', value: 2}]
+ // options.initialIframeSrc: the URL of the initial iframe src,
+ // by default set to "javascript:false;"
+ $.ajaxTransport('iframe', function (options) {
+ if (options.async) {
+ // javascript:false as initial iframe src
+ // prevents warning popups on HTTPS in IE6:
+ /*jshint scripturl: true */
+ var initialIframeSrc = options.initialIframeSrc || 'javascript:false;',
+ /*jshint scripturl: false */
+ form,
+ iframe,
+ addParamChar;
+ return {
+ send: function (_, completeCallback) {
+ form = $('<form style="display:none;"></form>');
+ form.attr('accept-charset', options.formAcceptCharset);
+ addParamChar = /\?/.test(options.url) ? '&' : '?';
+ // XDomainRequest only supports GET and POST:
+ if (options.type === 'DELETE') {
+ options.url = options.url + addParamChar + '_method=DELETE';
+ options.type = 'POST';
+ } else if (options.type === 'PUT') {
+ options.url = options.url + addParamChar + '_method=PUT';
+ options.type = 'POST';
+ } else if (options.type === 'PATCH') {
+ options.url = options.url + addParamChar + '_method=PATCH';
+ options.type = 'POST';
+ }
+ // IE versions below IE8 cannot set the name property of
+ // elements that have already been added to the DOM,
+ // so we set the name along with the iframe HTML markup:
+ counter += 1;
+ iframe = $(
+ '<iframe src="' + initialIframeSrc +
+ '" name="iframe-transport-' + counter + '"></iframe>'
+ ).bind('load', function () {
+ var fileInputClones,
+ paramNames = $.isArray(options.paramName) ?
+ options.paramName : [options.paramName];
+ iframe
+ .unbind('load')
+ .bind('load', function () {
+ var response;
+ // Wrap in a try/catch block to catch exceptions thrown
+ // when trying to access cross-domain iframe contents:
+ try {
+ response = iframe.contents();
+ // Google Chrome and Firefox do not throw an
+ // exception when calling iframe.contents() on
+ // cross-domain requests, so we unify the response:
+ if (!response.length || !response[0].firstChild) {
+ throw new Error();
+ }
+ } catch (e) {
+ response = undefined;
+ }
+ // The complete callback returns the
+ // iframe content document as response object:
+ completeCallback(
+ 200,
+ 'success',
+ {'iframe': response}
+ );
+ // Fix for IE endless progress bar activity bug
+ // (happens on form submits to iframe targets):
+ $('<iframe src="' + initialIframeSrc + '"></iframe>')
+ .appendTo(form);
+ window.setTimeout(function () {
+ // Removing the form in a setTimeout call
+ // allows Chrome's developer tools to display
+ // the response result
+ form.remove();
+ }, 0);
+ });
+ form
+ .prop('target', iframe.prop('name'))
+ .prop('action', options.url)
+ .prop('method', options.type);
+ if (options.formData) {
+ $.each(options.formData, function (index, field) {
+ $('<input type="hidden"/>')
+ .prop('name', field.name)
+ .val(field.value)
+ .appendTo(form);
+ });
+ }
+ if (options.fileInput && options.fileInput.length &&
+ options.type === 'POST') {
+ fileInputClones = options.fileInput.clone();
+ // Insert a clone for each file input field:
+ options.fileInput.after(function (index) {
+ return fileInputClones[index];
+ });
+ if (options.paramName) {
+ options.fileInput.each(function (index) {
+ $(this).prop(
+ 'name',
+ paramNames[index] || options.paramName
+ );
+ });
+ }
+ // Appending the file input fields to the hidden form
+ // removes them from their original location:
+ form
+ .append(options.fileInput)
+ .prop('enctype', 'multipart/form-data')
+ // enctype must be set as encoding for IE:
+ .prop('encoding', 'multipart/form-data');
+ // Remove the HTML5 form attribute from the input(s):
+ options.fileInput.removeAttr('form');
+ }
+ form.submit();
+ // Insert the file input fields at their original location
+ // by replacing the clones with the originals:
+ if (fileInputClones && fileInputClones.length) {
+ options.fileInput.each(function (index, input) {
+ var clone = $(fileInputClones[index]);
+ // Restore the original name and form properties:
+ $(input)
+ .prop('name', clone.prop('name'))
+ .attr('form', clone.attr('form'));
+ clone.replaceWith(input);
+ });
+ }
+ });
+ form.append(iframe).appendTo(document.body);
+ },
+ abort: function () {
+ if (iframe) {
+ // javascript:false as iframe src aborts the request
+ // and prevents warning popups on HTTPS in IE6.
+ // concat is used to avoid the "Script URL" JSLint error:
+ iframe
+ .unbind('load')
+ .prop('src', initialIframeSrc);
+ }
+ if (form) {
+ form.remove();
+ }
+ }
+ };
+ }
+ });
+
+ // The iframe transport returns the iframe content document as response.
+ // The following adds converters from iframe to text, json, html, xml
+ // and script.
+ // Please note that the Content-Type for JSON responses has to be text/plain
+ // or text/html, if the browser doesn't include application/json in the
+ // Accept header, else IE will show a download dialog.
+ // The Content-Type for XML responses on the other hand has to be always
+ // application/xml or text/xml, so IE properly parses the XML response.
+ // See also
+ // https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation
+ $.ajaxSetup({
+ converters: {
+ 'iframe text': function (iframe) {
+ return iframe && $(iframe[0].body).text();
+ },
+ 'iframe json': function (iframe) {
+ return iframe && $.parseJSON($(iframe[0].body).text());
+ },
+ 'iframe html': function (iframe) {
+ return iframe && $(iframe[0].body).html();
+ },
+ 'iframe xml': function (iframe) {
+ var xmlDoc = iframe && iframe[0];
+ return xmlDoc && $.isXMLDoc(xmlDoc) ? xmlDoc :
+ $.parseXML((xmlDoc.XMLDocument && xmlDoc.XMLDocument.xml) ||
+ $(xmlDoc.body).html());
+ },
+ 'iframe script': function (iframe) {
+ return iframe && $.globalEval($(iframe[0].body).text());
+ }
+ }
+ });
+
+}));
diff --git a/library/blueimp_upload/js/main.js b/library/blueimp_upload/js/main.js
new file mode 100644
index 000000000..8f57967a3
--- /dev/null
+++ b/library/blueimp_upload/js/main.js
@@ -0,0 +1,75 @@
+/*
+ * jQuery File Upload Plugin JS Example 8.9.1
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/* global $, window */
+
+$(function () {
+ 'use strict';
+
+ // Initialize the jQuery File Upload widget:
+ $('#fileupload').fileupload({
+ // Uncomment the following to send cross-domain cookies:
+ //xhrFields: {withCredentials: true},
+ url: 'server/php/'
+ });
+
+ // Enable iframe cross-domain access via redirect option:
+ $('#fileupload').fileupload(
+ 'option',
+ 'redirect',
+ window.location.href.replace(
+ /\/[^\/]*$/,
+ '/cors/result.html?%s'
+ )
+ );
+
+ if (window.location.hostname === 'blueimp.github.io') {
+ // Demo settings:
+ $('#fileupload').fileupload('option', {
+ url: '//jquery-file-upload.appspot.com/',
+ // Enable image resizing, except for Android and Opera,
+ // which actually support image resizing, but fail to
+ // send Blob objects via XHR requests:
+ disableImageResize: /Android(?!.*Chrome)|Opera/
+ .test(window.navigator.userAgent),
+ maxFileSize: 5000000,
+ acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i
+ });
+ // Upload server status check for browsers with CORS support:
+ if ($.support.cors) {
+ $.ajax({
+ url: '//jquery-file-upload.appspot.com/',
+ type: 'HEAD'
+ }).fail(function () {
+ $('<div class="alert alert-danger"/>')
+ .text('Upload server currently unavailable - ' +
+ new Date())
+ .appendTo('#fileupload');
+ });
+ }
+ } else {
+ // Load existing files:
+ $('#fileupload').addClass('fileupload-processing');
+ $.ajax({
+ // Uncomment the following to send cross-domain cookies:
+ //xhrFields: {withCredentials: true},
+ url: $('#fileupload').fileupload('option', 'url'),
+ dataType: 'json',
+ context: $('#fileupload')[0]
+ }).always(function () {
+ $(this).removeClass('fileupload-processing');
+ }).done(function (result) {
+ $(this).fileupload('option', 'done')
+ .call(this, $.Event('done'), {result: result});
+ });
+ }
+
+});
diff --git a/library/blueimp_upload/js/vendor/jquery.ui.widget.js b/library/blueimp_upload/js/vendor/jquery.ui.widget.js
new file mode 100644
index 000000000..7899e6bb3
--- /dev/null
+++ b/library/blueimp_upload/js/vendor/jquery.ui.widget.js
@@ -0,0 +1,558 @@
+/*! jQuery UI - v1.11.1 - 2014-09-17
+* http://jqueryui.com
+* Includes: widget.js
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+(function( factory ) {
+ if ( typeof define === "function" && define.amd ) {
+
+ // AMD. Register as an anonymous module.
+ define([ "jquery" ], factory );
+ } else {
+
+ // Browser globals
+ factory( jQuery );
+ }
+}(function( $ ) {
+/*!
+ * jQuery UI Widget 1.11.1
+ * http://jqueryui.com
+ *
+ * Copyright 2014 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/jQuery.widget/
+ */
+
+
+var widget_uuid = 0,
+ widget_slice = Array.prototype.slice;
+
+$.cleanData = (function( orig ) {
+ return function( elems ) {
+ var events, elem, i;
+ for ( i = 0; (elem = elems[i]) != null; i++ ) {
+ try {
+
+ // Only trigger remove when necessary to save time
+ events = $._data( elem, "events" );
+ if ( events && events.remove ) {
+ $( elem ).triggerHandler( "remove" );
+ }
+
+ // http://bugs.jquery.com/ticket/8235
+ } catch( e ) {}
+ }
+ orig( elems );
+ };
+})( $.cleanData );
+
+$.widget = function( name, base, prototype ) {
+ var fullName, existingConstructor, constructor, basePrototype,
+ // proxiedPrototype allows the provided prototype to remain unmodified
+ // so that it can be used as a mixin for multiple widgets (#8876)
+ proxiedPrototype = {},
+ namespace = name.split( "." )[ 0 ];
+
+ name = name.split( "." )[ 1 ];
+ fullName = namespace + "-" + name;
+
+ if ( !prototype ) {
+ prototype = base;
+ base = $.Widget;
+ }
+
+ // create selector for plugin
+ $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
+ return !!$.data( elem, fullName );
+ };
+
+ $[ namespace ] = $[ namespace ] || {};
+ existingConstructor = $[ namespace ][ name ];
+ constructor = $[ namespace ][ name ] = function( options, element ) {
+ // allow instantiation without "new" keyword
+ if ( !this._createWidget ) {
+ return new constructor( options, element );
+ }
+
+ // allow instantiation without initializing for simple inheritance
+ // must use "new" keyword (the code above always passes args)
+ if ( arguments.length ) {
+ this._createWidget( options, element );
+ }
+ };
+ // extend with the existing constructor to carry over any static properties
+ $.extend( constructor, existingConstructor, {
+ version: prototype.version,
+ // copy the object used to create the prototype in case we need to
+ // redefine the widget later
+ _proto: $.extend( {}, prototype ),
+ // track widgets that inherit from this widget in case this widget is
+ // redefined after a widget inherits from it
+ _childConstructors: []
+ });
+
+ basePrototype = new base();
+ // we need to make the options hash a property directly on the new instance
+ // otherwise we'll modify the options hash on the prototype that we're
+ // inheriting from
+ basePrototype.options = $.widget.extend( {}, basePrototype.options );
+ $.each( prototype, function( prop, value ) {
+ if ( !$.isFunction( value ) ) {
+ proxiedPrototype[ prop ] = value;
+ return;
+ }
+ proxiedPrototype[ prop ] = (function() {
+ var _super = function() {
+ return base.prototype[ prop ].apply( this, arguments );
+ },
+ _superApply = function( args ) {
+ return base.prototype[ prop ].apply( this, args );
+ };
+ return function() {
+ var __super = this._super,
+ __superApply = this._superApply,
+ returnValue;
+
+ this._super = _super;
+ this._superApply = _superApply;
+
+ returnValue = value.apply( this, arguments );
+
+ this._super = __super;
+ this._superApply = __superApply;
+
+ return returnValue;
+ };
+ })();
+ });
+ constructor.prototype = $.widget.extend( basePrototype, {
+ // TODO: remove support for widgetEventPrefix
+ // always use the name + a colon as the prefix, e.g., draggable:start
+ // don't prefix for widgets that aren't DOM-based
+ widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name
+ }, proxiedPrototype, {
+ constructor: constructor,
+ namespace: namespace,
+ widgetName: name,
+ widgetFullName: fullName
+ });
+
+ // If this widget is being redefined then we need to find all widgets that
+ // are inheriting from it and redefine all of them so that they inherit from
+ // the new version of this widget. We're essentially trying to replace one
+ // level in the prototype chain.
+ if ( existingConstructor ) {
+ $.each( existingConstructor._childConstructors, function( i, child ) {
+ var childPrototype = child.prototype;
+
+ // redefine the child widget using the same prototype that was
+ // originally used, but inherit from the new version of the base
+ $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
+ });
+ // remove the list of existing child constructors from the old constructor
+ // so the old child constructors can be garbage collected
+ delete existingConstructor._childConstructors;
+ } else {
+ base._childConstructors.push( constructor );
+ }
+
+ $.widget.bridge( name, constructor );
+
+ return constructor;
+};
+
+$.widget.extend = function( target ) {
+ var input = widget_slice.call( arguments, 1 ),
+ inputIndex = 0,
+ inputLength = input.length,
+ key,
+ value;
+ for ( ; inputIndex < inputLength; inputIndex++ ) {
+ for ( key in input[ inputIndex ] ) {
+ value = input[ inputIndex ][ key ];
+ if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
+ // Clone objects
+ if ( $.isPlainObject( value ) ) {
+ target[ key ] = $.isPlainObject( target[ key ] ) ?
+ $.widget.extend( {}, target[ key ], value ) :
+ // Don't extend strings, arrays, etc. with objects
+ $.widget.extend( {}, value );
+ // Copy everything else by reference
+ } else {
+ target[ key ] = value;
+ }
+ }
+ }
+ }
+ return target;
+};
+
+$.widget.bridge = function( name, object ) {
+ var fullName = object.prototype.widgetFullName || name;
+ $.fn[ name ] = function( options ) {
+ var isMethodCall = typeof options === "string",
+ args = widget_slice.call( arguments, 1 ),
+ returnValue = this;
+
+ // allow multiple hashes to be passed on init
+ options = !isMethodCall && args.length ?
+ $.widget.extend.apply( null, [ options ].concat(args) ) :
+ options;
+
+ if ( isMethodCall ) {
+ this.each(function() {
+ var methodValue,
+ instance = $.data( this, fullName );
+ if ( options === "instance" ) {
+ returnValue = instance;
+ return false;
+ }
+ if ( !instance ) {
+ return $.error( "cannot call methods on " + name + " prior to initialization; " +
+ "attempted to call method '" + options + "'" );
+ }
+ if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
+ return $.error( "no such method '" + options + "' for " + name + " widget instance" );
+ }
+ methodValue = instance[ options ].apply( instance, args );
+ if ( methodValue !== instance && methodValue !== undefined ) {
+ returnValue = methodValue && methodValue.jquery ?
+ returnValue.pushStack( methodValue.get() ) :
+ methodValue;
+ return false;
+ }
+ });
+ } else {
+ this.each(function() {
+ var instance = $.data( this, fullName );
+ if ( instance ) {
+ instance.option( options || {} );
+ if ( instance._init ) {
+ instance._init();
+ }
+ } else {
+ $.data( this, fullName, new object( options, this ) );
+ }
+ });
+ }
+
+ return returnValue;
+ };
+};
+
+$.Widget = function( /* options, element */ ) {};
+$.Widget._childConstructors = [];
+
+$.Widget.prototype = {
+ widgetName: "widget",
+ widgetEventPrefix: "",
+ defaultElement: "<div>",
+ options: {
+ disabled: false,
+
+ // callbacks
+ create: null
+ },
+ _createWidget: function( options, element ) {
+ element = $( element || this.defaultElement || this )[ 0 ];
+ this.element = $( element );
+ this.uuid = widget_uuid++;
+ this.eventNamespace = "." + this.widgetName + this.uuid;
+ this.options = $.widget.extend( {},
+ this.options,
+ this._getCreateOptions(),
+ options );
+
+ this.bindings = $();
+ this.hoverable = $();
+ this.focusable = $();
+
+ if ( element !== this ) {
+ $.data( element, this.widgetFullName, this );
+ this._on( true, this.element, {
+ remove: function( event ) {
+ if ( event.target === element ) {
+ this.destroy();
+ }
+ }
+ });
+ this.document = $( element.style ?
+ // element within the document
+ element.ownerDocument :
+ // element is window or document
+ element.document || element );
+ this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
+ }
+
+ this._create();
+ this._trigger( "create", null, this._getCreateEventData() );
+ this._init();
+ },
+ _getCreateOptions: $.noop,
+ _getCreateEventData: $.noop,
+ _create: $.noop,
+ _init: $.noop,
+
+ destroy: function() {
+ this._destroy();
+ // we can probably remove the unbind calls in 2.0
+ // all event bindings should go through this._on()
+ this.element
+ .unbind( this.eventNamespace )
+ .removeData( this.widgetFullName )
+ // support: jquery <1.6.3
+ // http://bugs.jquery.com/ticket/9413
+ .removeData( $.camelCase( this.widgetFullName ) );
+ this.widget()
+ .unbind( this.eventNamespace )
+ .removeAttr( "aria-disabled" )
+ .removeClass(
+ this.widgetFullName + "-disabled " +
+ "ui-state-disabled" );
+
+ // clean up events and states
+ this.bindings.unbind( this.eventNamespace );
+ this.hoverable.removeClass( "ui-state-hover" );
+ this.focusable.removeClass( "ui-state-focus" );
+ },
+ _destroy: $.noop,
+
+ widget: function() {
+ return this.element;
+ },
+
+ option: function( key, value ) {
+ var options = key,
+ parts,
+ curOption,
+ i;
+
+ if ( arguments.length === 0 ) {
+ // don't return a reference to the internal hash
+ return $.widget.extend( {}, this.options );
+ }
+
+ if ( typeof key === "string" ) {
+ // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
+ options = {};
+ parts = key.split( "." );
+ key = parts.shift();
+ if ( parts.length ) {
+ curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
+ for ( i = 0; i < parts.length - 1; i++ ) {
+ curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
+ curOption = curOption[ parts[ i ] ];
+ }
+ key = parts.pop();
+ if ( arguments.length === 1 ) {
+ return curOption[ key ] === undefined ? null : curOption[ key ];
+ }
+ curOption[ key ] = value;
+ } else {
+ if ( arguments.length === 1 ) {
+ return this.options[ key ] === undefined ? null : this.options[ key ];
+ }
+ options[ key ] = value;
+ }
+ }
+
+ this._setOptions( options );
+
+ return this;
+ },
+ _setOptions: function( options ) {
+ var key;
+
+ for ( key in options ) {
+ this._setOption( key, options[ key ] );
+ }
+
+ return this;
+ },
+ _setOption: function( key, value ) {
+ this.options[ key ] = value;
+
+ if ( key === "disabled" ) {
+ this.widget()
+ .toggleClass( this.widgetFullName + "-disabled", !!value );
+
+ // If the widget is becoming disabled, then nothing is interactive
+ if ( value ) {
+ this.hoverable.removeClass( "ui-state-hover" );
+ this.focusable.removeClass( "ui-state-focus" );
+ }
+ }
+
+ return this;
+ },
+
+ enable: function() {
+ return this._setOptions({ disabled: false });
+ },
+ disable: function() {
+ return this._setOptions({ disabled: true });
+ },
+
+ _on: function( suppressDisabledCheck, element, handlers ) {
+ var delegateElement,
+ instance = this;
+
+ // no suppressDisabledCheck flag, shuffle arguments
+ if ( typeof suppressDisabledCheck !== "boolean" ) {
+ handlers = element;
+ element = suppressDisabledCheck;
+ suppressDisabledCheck = false;
+ }
+
+ // no element argument, shuffle and use this.element
+ if ( !handlers ) {
+ handlers = element;
+ element = this.element;
+ delegateElement = this.widget();
+ } else {
+ element = delegateElement = $( element );
+ this.bindings = this.bindings.add( element );
+ }
+
+ $.each( handlers, function( event, handler ) {
+ function handlerProxy() {
+ // allow widgets to customize the disabled handling
+ // - disabled as an array instead of boolean
+ // - disabled class as method for disabling individual parts
+ if ( !suppressDisabledCheck &&
+ ( instance.options.disabled === true ||
+ $( this ).hasClass( "ui-state-disabled" ) ) ) {
+ return;
+ }
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
+ .apply( instance, arguments );
+ }
+
+ // copy the guid so direct unbinding works
+ if ( typeof handler !== "string" ) {
+ handlerProxy.guid = handler.guid =
+ handler.guid || handlerProxy.guid || $.guid++;
+ }
+
+ var match = event.match( /^([\w:-]*)\s*(.*)$/ ),
+ eventName = match[1] + instance.eventNamespace,
+ selector = match[2];
+ if ( selector ) {
+ delegateElement.delegate( selector, eventName, handlerProxy );
+ } else {
+ element.bind( eventName, handlerProxy );
+ }
+ });
+ },
+
+ _off: function( element, eventName ) {
+ eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
+ element.unbind( eventName ).undelegate( eventName );
+ },
+
+ _delay: function( handler, delay ) {
+ function handlerProxy() {
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
+ .apply( instance, arguments );
+ }
+ var instance = this;
+ return setTimeout( handlerProxy, delay || 0 );
+ },
+
+ _hoverable: function( element ) {
+ this.hoverable = this.hoverable.add( element );
+ this._on( element, {
+ mouseenter: function( event ) {
+ $( event.currentTarget ).addClass( "ui-state-hover" );
+ },
+ mouseleave: function( event ) {
+ $( event.currentTarget ).removeClass( "ui-state-hover" );
+ }
+ });
+ },
+
+ _focusable: function( element ) {
+ this.focusable = this.focusable.add( element );
+ this._on( element, {
+ focusin: function( event ) {
+ $( event.currentTarget ).addClass( "ui-state-focus" );
+ },
+ focusout: function( event ) {
+ $( event.currentTarget ).removeClass( "ui-state-focus" );
+ }
+ });
+ },
+
+ _trigger: function( type, event, data ) {
+ var prop, orig,
+ callback = this.options[ type ];
+
+ data = data || {};
+ event = $.Event( event );
+ event.type = ( type === this.widgetEventPrefix ?
+ type :
+ this.widgetEventPrefix + type ).toLowerCase();
+ // the original event may come from any element
+ // so we need to reset the target on the new event
+ event.target = this.element[ 0 ];
+
+ // copy original event properties over to the new event
+ orig = event.originalEvent;
+ if ( orig ) {
+ for ( prop in orig ) {
+ if ( !( prop in event ) ) {
+ event[ prop ] = orig[ prop ];
+ }
+ }
+ }
+
+ this.element.trigger( event, data );
+ return !( $.isFunction( callback ) &&
+ callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
+ event.isDefaultPrevented() );
+ }
+};
+
+$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
+ $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
+ if ( typeof options === "string" ) {
+ options = { effect: options };
+ }
+ var hasOptions,
+ effectName = !options ?
+ method :
+ options === true || typeof options === "number" ?
+ defaultEffect :
+ options.effect || defaultEffect;
+ options = options || {};
+ if ( typeof options === "number" ) {
+ options = { duration: options };
+ }
+ hasOptions = !$.isEmptyObject( options );
+ options.complete = callback;
+ if ( options.delay ) {
+ element.delay( options.delay );
+ }
+ if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
+ element[ method ]( options );
+ } else if ( effectName !== method && element[ effectName ] ) {
+ element[ effectName ]( options.duration, options.easing, callback );
+ } else {
+ element.queue(function( next ) {
+ $( this )[ method ]();
+ if ( callback ) {
+ callback.call( element[ 0 ] );
+ }
+ next();
+ });
+ }
+ };
+});
+
+var widget = $.widget;
+
+
+
+}));
diff --git a/library/blueimp_upload/package.json b/library/blueimp_upload/package.json
new file mode 100644
index 000000000..880574aa7
--- /dev/null
+++ b/library/blueimp_upload/package.json
@@ -0,0 +1,54 @@
+{
+ "name": "blueimp-file-upload",
+ "version": "9.8.0",
+ "title": "jQuery File Upload",
+ "description": "File Upload widget with multiple file selection, drag&amp;drop support, progress bar, validation and preview images, audio and video for jQuery. Supports cross-domain, chunked and resumable file uploads. Works with any server-side platform (Google App Engine, PHP, Python, Ruby on Rails, Java, etc.) that supports standard HTML form file uploads.",
+ "keywords": [
+ "jquery",
+ "file",
+ "upload",
+ "widget",
+ "multiple",
+ "selection",
+ "drag",
+ "drop",
+ "progress",
+ "preview",
+ "cross-domain",
+ "cross-site",
+ "chunk",
+ "resume",
+ "gae",
+ "go",
+ "python",
+ "php",
+ "bootstrap"
+ ],
+ "homepage": "https://github.com/blueimp/jQuery-File-Upload",
+ "author": {
+ "name": "Sebastian Tschan",
+ "url": "https://blueimp.net"
+ },
+ "maintainers": [
+ {
+ "name": "Sebastian Tschan",
+ "url": "https://blueimp.net"
+ }
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/blueimp/jQuery-File-Upload.git"
+ },
+ "bugs": "https://github.com/blueimp/jQuery-File-Upload/issues",
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "http://www.opensource.org/licenses/MIT"
+ }
+ ],
+ "devDependencies": {
+ "grunt": "~0.4.5",
+ "grunt-bump-build-git": "~1.1.1",
+ "grunt-contrib-jshint": "~0.10.0"
+ }
+}
diff --git a/library/blueimp_upload/server/gae-go/app.yaml b/library/blueimp_upload/server/gae-go/app.yaml
new file mode 100644
index 000000000..2d09daa56
--- /dev/null
+++ b/library/blueimp_upload/server/gae-go/app.yaml
@@ -0,0 +1,12 @@
+application: jquery-file-upload
+version: 2
+runtime: go
+api_version: go1
+
+handlers:
+- url: /(favicon\.ico|robots\.txt)
+ static_files: static/\1
+ upload: static/(.*)
+ expiration: '1d'
+- url: /.*
+ script: _go_app
diff --git a/library/blueimp_upload/server/gae-go/app/main.go b/library/blueimp_upload/server/gae-go/app/main.go
new file mode 100644
index 000000000..03af0b1d2
--- /dev/null
+++ b/library/blueimp_upload/server/gae-go/app/main.go
@@ -0,0 +1,296 @@
+/*
+ * jQuery File Upload Plugin GAE Go Example 3.2.0
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+package app
+
+import (
+ "appengine"
+ "appengine/blobstore"
+ "appengine/image"
+ "appengine/taskqueue"
+ "bytes"
+ "encoding/json"
+ "fmt"
+ "io"
+ "log"
+ "mime/multipart"
+ "net/http"
+ "net/url"
+ "regexp"
+ "strings"
+ "time"
+)
+
+const (
+ WEBSITE = "https://blueimp.github.io/jQuery-File-Upload/"
+ MIN_FILE_SIZE = 1 // bytes
+ MAX_FILE_SIZE = 5000000 // bytes
+ IMAGE_TYPES = "image/(gif|p?jpeg|(x-)?png)"
+ ACCEPT_FILE_TYPES = IMAGE_TYPES
+ EXPIRATION_TIME = 300 // seconds
+ THUMBNAIL_PARAM = "=s80"
+)
+
+var (
+ imageTypes = regexp.MustCompile(IMAGE_TYPES)
+ acceptFileTypes = regexp.MustCompile(ACCEPT_FILE_TYPES)
+)
+
+type FileInfo struct {
+ Key appengine.BlobKey `json:"-"`
+ Url string `json:"url,omitempty"`
+ ThumbnailUrl string `json:"thumbnailUrl,omitempty"`
+ Name string `json:"name"`
+ Type string `json:"type"`
+ Size int64 `json:"size"`
+ Error string `json:"error,omitempty"`
+ DeleteUrl string `json:"deleteUrl,omitempty"`
+ DeleteType string `json:"deleteType,omitempty"`
+}
+
+func (fi *FileInfo) ValidateType() (valid bool) {
+ if acceptFileTypes.MatchString(fi.Type) {
+ return true
+ }
+ fi.Error = "Filetype not allowed"
+ return false
+}
+
+func (fi *FileInfo) ValidateSize() (valid bool) {
+ if fi.Size < MIN_FILE_SIZE {
+ fi.Error = "File is too small"
+ } else if fi.Size > MAX_FILE_SIZE {
+ fi.Error = "File is too big"
+ } else {
+ return true
+ }
+ return false
+}
+
+func (fi *FileInfo) CreateUrls(r *http.Request, c appengine.Context) {
+ u := &url.URL{
+ Scheme: r.URL.Scheme,
+ Host: appengine.DefaultVersionHostname(c),
+ Path: "/",
+ }
+ uString := u.String()
+ fi.Url = uString + escape(string(fi.Key)) + "/" +
+ escape(string(fi.Name))
+ fi.DeleteUrl = fi.Url + "?delete=true"
+ fi.DeleteType = "DELETE"
+ if imageTypes.MatchString(fi.Type) {
+ servingUrl, err := image.ServingURL(
+ c,
+ fi.Key,
+ &image.ServingURLOptions{
+ Secure: strings.HasSuffix(u.Scheme, "s"),
+ Size: 0,
+ Crop: false,
+ },
+ )
+ check(err)
+ fi.ThumbnailUrl = servingUrl.String() + THUMBNAIL_PARAM
+ }
+}
+
+func check(err error) {
+ if err != nil {
+ panic(err)
+ }
+}
+
+func escape(s string) string {
+ return strings.Replace(url.QueryEscape(s), "+", "%20", -1)
+}
+
+func delayedDelete(c appengine.Context, fi *FileInfo) {
+ if key := string(fi.Key); key != "" {
+ task := &taskqueue.Task{
+ Path: "/" + escape(key) + "/-",
+ Method: "DELETE",
+ Delay: time.Duration(EXPIRATION_TIME) * time.Second,
+ }
+ taskqueue.Add(c, task, "")
+ }
+}
+
+func handleUpload(r *http.Request, p *multipart.Part) (fi *FileInfo) {
+ fi = &FileInfo{
+ Name: p.FileName(),
+ Type: p.Header.Get("Content-Type"),
+ }
+ if !fi.ValidateType() {
+ return
+ }
+ defer func() {
+ if rec := recover(); rec != nil {
+ log.Println(rec)
+ fi.Error = rec.(error).Error()
+ }
+ }()
+ lr := &io.LimitedReader{R: p, N: MAX_FILE_SIZE + 1}
+ context := appengine.NewContext(r)
+ w, err := blobstore.Create(context, fi.Type)
+ defer func() {
+ w.Close()
+ fi.Size = MAX_FILE_SIZE + 1 - lr.N
+ fi.Key, err = w.Key()
+ check(err)
+ if !fi.ValidateSize() {
+ err := blobstore.Delete(context, fi.Key)
+ check(err)
+ return
+ }
+ delayedDelete(context, fi)
+ fi.CreateUrls(r, context)
+ }()
+ check(err)
+ _, err = io.Copy(w, lr)
+ return
+}
+
+func getFormValue(p *multipart.Part) string {
+ var b bytes.Buffer
+ io.CopyN(&b, p, int64(1<<20)) // Copy max: 1 MiB
+ return b.String()
+}
+
+func handleUploads(r *http.Request) (fileInfos []*FileInfo) {
+ fileInfos = make([]*FileInfo, 0)
+ mr, err := r.MultipartReader()
+ check(err)
+ r.Form, err = url.ParseQuery(r.URL.RawQuery)
+ check(err)
+ part, err := mr.NextPart()
+ for err == nil {
+ if name := part.FormName(); name != "" {
+ if part.FileName() != "" {
+ fileInfos = append(fileInfos, handleUpload(r, part))
+ } else {
+ r.Form[name] = append(r.Form[name], getFormValue(part))
+ }
+ }
+ part, err = mr.NextPart()
+ }
+ return
+}
+
+func get(w http.ResponseWriter, r *http.Request) {
+ if r.URL.Path == "/" {
+ http.Redirect(w, r, WEBSITE, http.StatusFound)
+ return
+ }
+ parts := strings.Split(r.URL.Path, "/")
+ if len(parts) == 3 {
+ if key := parts[1]; key != "" {
+ blobKey := appengine.BlobKey(key)
+ bi, err := blobstore.Stat(appengine.NewContext(r), blobKey)
+ if err == nil {
+ w.Header().Add("X-Content-Type-Options", "nosniff")
+ if !imageTypes.MatchString(bi.ContentType) {
+ w.Header().Add("Content-Type", "application/octet-stream")
+ w.Header().Add(
+ "Content-Disposition",
+ fmt.Sprintf("attachment; filename=\"%s\"", parts[2]),
+ )
+ }
+ w.Header().Add(
+ "Cache-Control",
+ fmt.Sprintf("public,max-age=%d", EXPIRATION_TIME),
+ )
+ blobstore.Send(w, blobKey)
+ return
+ }
+ }
+ }
+ http.Error(w, "404 Not Found", http.StatusNotFound)
+}
+
+func post(w http.ResponseWriter, r *http.Request) {
+ result := make(map[string][]*FileInfo, 1)
+ result["files"] = handleUploads(r)
+ b, err := json.Marshal(result)
+ check(err)
+ if redirect := r.FormValue("redirect"); redirect != "" {
+ if strings.Contains(redirect, "%s") {
+ redirect = fmt.Sprintf(
+ redirect,
+ escape(string(b)),
+ )
+ }
+ http.Redirect(w, r, redirect, http.StatusFound)
+ return
+ }
+ w.Header().Set("Cache-Control", "no-cache")
+ jsonType := "application/json"
+ if strings.Index(r.Header.Get("Accept"), jsonType) != -1 {
+ w.Header().Set("Content-Type", jsonType)
+ }
+ fmt.Fprintln(w, string(b))
+}
+
+func delete(w http.ResponseWriter, r *http.Request) {
+ parts := strings.Split(r.URL.Path, "/")
+ if len(parts) != 3 {
+ return
+ }
+ result := make(map[string]bool, 1)
+ if key := parts[1]; key != "" {
+ c := appengine.NewContext(r)
+ blobKey := appengine.BlobKey(key)
+ err := blobstore.Delete(c, blobKey)
+ check(err)
+ err = image.DeleteServingURL(c, blobKey)
+ check(err)
+ result[key] = true
+ }
+ jsonType := "application/json"
+ if strings.Index(r.Header.Get("Accept"), jsonType) != -1 {
+ w.Header().Set("Content-Type", jsonType)
+ }
+ b, err := json.Marshal(result)
+ check(err)
+ fmt.Fprintln(w, string(b))
+}
+
+func handle(w http.ResponseWriter, r *http.Request) {
+ params, err := url.ParseQuery(r.URL.RawQuery)
+ check(err)
+ w.Header().Add("Access-Control-Allow-Origin", "*")
+ w.Header().Add(
+ "Access-Control-Allow-Methods",
+ "OPTIONS, HEAD, GET, POST, PUT, DELETE",
+ )
+ w.Header().Add(
+ "Access-Control-Allow-Headers",
+ "Content-Type, Content-Range, Content-Disposition",
+ )
+ switch r.Method {
+ case "OPTIONS":
+ case "HEAD":
+ case "GET":
+ get(w, r)
+ case "POST":
+ if len(params["_method"]) > 0 && params["_method"][0] == "DELETE" {
+ delete(w, r)
+ } else {
+ post(w, r)
+ }
+ case "DELETE":
+ delete(w, r)
+ default:
+ http.Error(w, "501 Not Implemented", http.StatusNotImplemented)
+ }
+}
+
+func init() {
+ http.HandleFunc("/", handle)
+}
diff --git a/library/blueimp_upload/server/gae-go/static/robots.txt b/library/blueimp_upload/server/gae-go/static/robots.txt
new file mode 100644
index 000000000..eb0536286
--- /dev/null
+++ b/library/blueimp_upload/server/gae-go/static/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow:
diff --git a/library/blueimp_upload/server/gae-python/app.yaml b/library/blueimp_upload/server/gae-python/app.yaml
new file mode 100644
index 000000000..5fe123f59
--- /dev/null
+++ b/library/blueimp_upload/server/gae-python/app.yaml
@@ -0,0 +1,16 @@
+application: jquery-file-upload
+version: 1
+runtime: python27
+api_version: 1
+threadsafe: true
+
+builtins:
+- deferred: on
+
+handlers:
+- url: /(favicon\.ico|robots\.txt)
+ static_files: static/\1
+ upload: static/(.*)
+ expiration: '1d'
+- url: /.*
+ script: main.app
diff --git a/library/blueimp_upload/server/gae-python/main.py b/library/blueimp_upload/server/gae-python/main.py
new file mode 100644
index 000000000..6276be6a0
--- /dev/null
+++ b/library/blueimp_upload/server/gae-python/main.py
@@ -0,0 +1,170 @@
+# -*- coding: utf-8 -*-
+#
+# jQuery File Upload Plugin GAE Python Example 2.2.0
+# https://github.com/blueimp/jQuery-File-Upload
+#
+# Copyright 2011, Sebastian Tschan
+# https://blueimp.net
+#
+# Licensed under the MIT license:
+# http://www.opensource.org/licenses/MIT
+#
+
+from __future__ import with_statement
+from google.appengine.api import files, images
+from google.appengine.ext import blobstore, deferred
+from google.appengine.ext.webapp import blobstore_handlers
+import json
+import re
+import urllib
+import webapp2
+
+WEBSITE = 'https://blueimp.github.io/jQuery-File-Upload/'
+MIN_FILE_SIZE = 1 # bytes
+MAX_FILE_SIZE = 5000000 # bytes
+IMAGE_TYPES = re.compile('image/(gif|p?jpeg|(x-)?png)')
+ACCEPT_FILE_TYPES = IMAGE_TYPES
+THUMBNAIL_MODIFICATOR = '=s80' # max width / height
+EXPIRATION_TIME = 300 # seconds
+
+
+def cleanup(blob_keys):
+ blobstore.delete(blob_keys)
+
+
+class UploadHandler(webapp2.RequestHandler):
+
+ def initialize(self, request, response):
+ super(UploadHandler, self).initialize(request, response)
+ self.response.headers['Access-Control-Allow-Origin'] = '*'
+ self.response.headers[
+ 'Access-Control-Allow-Methods'
+ ] = 'OPTIONS, HEAD, GET, POST, PUT, DELETE'
+ self.response.headers[
+ 'Access-Control-Allow-Headers'
+ ] = 'Content-Type, Content-Range, Content-Disposition'
+
+ def validate(self, file):
+ if file['size'] < MIN_FILE_SIZE:
+ file['error'] = 'File is too small'
+ elif file['size'] > MAX_FILE_SIZE:
+ file['error'] = 'File is too big'
+ elif not ACCEPT_FILE_TYPES.match(file['type']):
+ file['error'] = 'Filetype not allowed'
+ else:
+ return True
+ return False
+
+ def get_file_size(self, file):
+ file.seek(0, 2) # Seek to the end of the file
+ size = file.tell() # Get the position of EOF
+ file.seek(0) # Reset the file position to the beginning
+ return size
+
+ def write_blob(self, data, info):
+ blob = files.blobstore.create(
+ mime_type=info['type'],
+ _blobinfo_uploaded_filename=info['name']
+ )
+ with files.open(blob, 'a') as f:
+ f.write(data)
+ files.finalize(blob)
+ return files.blobstore.get_blob_key(blob)
+
+ def handle_upload(self):
+ results = []
+ blob_keys = []
+ for name, fieldStorage in self.request.POST.items():
+ if type(fieldStorage) is unicode:
+ continue
+ result = {}
+ result['name'] = re.sub(
+ r'^.*\\',
+ '',
+ fieldStorage.filename
+ )
+ result['type'] = fieldStorage.type
+ result['size'] = self.get_file_size(fieldStorage.file)
+ if self.validate(result):
+ blob_key = str(
+ self.write_blob(fieldStorage.value, result)
+ )
+ blob_keys.append(blob_key)
+ result['deleteType'] = 'DELETE'
+ result['deleteUrl'] = self.request.host_url +\
+ '/?key=' + urllib.quote(blob_key, '')
+ if (IMAGE_TYPES.match(result['type'])):
+ try:
+ result['url'] = images.get_serving_url(
+ blob_key,
+ secure_url=self.request.host_url.startswith(
+ 'https'
+ )
+ )
+ result['thumbnailUrl'] = result['url'] +\
+ THUMBNAIL_MODIFICATOR
+ except: # Could not get an image serving url
+ pass
+ if not 'url' in result:
+ result['url'] = self.request.host_url +\
+ '/' + blob_key + '/' + urllib.quote(
+ result['name'].encode('utf-8'), '')
+ results.append(result)
+ deferred.defer(
+ cleanup,
+ blob_keys,
+ _countdown=EXPIRATION_TIME
+ )
+ return results
+
+ def options(self):
+ pass
+
+ def head(self):
+ pass
+
+ def get(self):
+ self.redirect(WEBSITE)
+
+ def post(self):
+ if (self.request.get('_method') == 'DELETE'):
+ return self.delete()
+ result = {'files': self.handle_upload()}
+ s = json.dumps(result, separators=(',', ':'))
+ redirect = self.request.get('redirect')
+ if redirect:
+ return self.redirect(str(
+ redirect.replace('%s', urllib.quote(s, ''), 1)
+ ))
+ if 'application/json' in self.request.headers.get('Accept'):
+ self.response.headers['Content-Type'] = 'application/json'
+ self.response.write(s)
+
+ def delete(self):
+ key = self.request.get('key') or ''
+ blobstore.delete(key)
+ s = json.dumps({key: True}, separators=(',', ':'))
+ if 'application/json' in self.request.headers.get('Accept'):
+ self.response.headers['Content-Type'] = 'application/json'
+ self.response.write(s)
+
+
+class DownloadHandler(blobstore_handlers.BlobstoreDownloadHandler):
+ def get(self, key, filename):
+ if not blobstore.get(key):
+ self.error(404)
+ else:
+ # Prevent browsers from MIME-sniffing the content-type:
+ self.response.headers['X-Content-Type-Options'] = 'nosniff'
+ # Cache for the expiration time:
+ self.response.headers['Cache-Control'] = 'public,max-age=%d' % EXPIRATION_TIME
+ # Send the file forcing a download dialog:
+ self.send_blob(key, save_as=filename, content_type='application/octet-stream')
+
+app = webapp2.WSGIApplication(
+ [
+ ('/', UploadHandler),
+ ('/([^/]+)/([^/]+)', DownloadHandler)
+ ],
+ debug=True
+)
diff --git a/library/blueimp_upload/server/gae-python/static/robots.txt b/library/blueimp_upload/server/gae-python/static/robots.txt
new file mode 100644
index 000000000..eb0536286
--- /dev/null
+++ b/library/blueimp_upload/server/gae-python/static/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow:
diff --git a/library/blueimp_upload/server/node/.gitignore b/library/blueimp_upload/server/node/.gitignore
new file mode 100644
index 000000000..9daa8247d
--- /dev/null
+++ b/library/blueimp_upload/server/node/.gitignore
@@ -0,0 +1,2 @@
+.DS_Store
+node_modules
diff --git a/library/blueimp_upload/server/node/package.json b/library/blueimp_upload/server/node/package.json
new file mode 100644
index 000000000..dd38c50ca
--- /dev/null
+++ b/library/blueimp_upload/server/node/package.json
@@ -0,0 +1,41 @@
+{
+ "name": "blueimp-file-upload-node",
+ "version": "2.1.0",
+ "title": "jQuery File Upload Node.js example",
+ "description": "Node.js implementation example of a file upload handler for jQuery File Upload.",
+ "keywords": [
+ "file",
+ "upload",
+ "cross-domain",
+ "cross-site",
+ "node"
+ ],
+ "homepage": "https://github.com/blueimp/jQuery-File-Upload",
+ "author": {
+ "name": "Sebastian Tschan",
+ "url": "https://blueimp.net"
+ },
+ "maintainers": [
+ {
+ "name": "Sebastian Tschan",
+ "url": "https://blueimp.net"
+ }
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/blueimp/jQuery-File-Upload.git"
+ },
+ "bugs": "https://github.com/blueimp/jQuery-File-Upload/issues",
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "http://www.opensource.org/licenses/MIT"
+ }
+ ],
+ "dependencies": {
+ "formidable": ">=1.0.11",
+ "node-static": ">=0.6.5",
+ "imagemagick": ">=0.1.3"
+ },
+ "main": "server.js"
+}
diff --git a/library/blueimp_upload/server/node/public/files/.gitignore b/library/blueimp_upload/server/node/public/files/.gitignore
new file mode 100644
index 000000000..d6b7ef32c
--- /dev/null
+++ b/library/blueimp_upload/server/node/public/files/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/library/blueimp_upload/server/node/server.js b/library/blueimp_upload/server/node/server.js
new file mode 100755
index 000000000..7bab20f59
--- /dev/null
+++ b/library/blueimp_upload/server/node/server.js
@@ -0,0 +1,292 @@
+#!/usr/bin/env node
+/*
+ * jQuery File Upload Plugin Node.js Example 2.1.2
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2012, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/* jshint nomen:false */
+/* global require, __dirname, unescape, console */
+
+(function (port) {
+ 'use strict';
+ var path = require('path'),
+ fs = require('fs'),
+ // Since Node 0.8, .existsSync() moved from path to fs:
+ _existsSync = fs.existsSync || path.existsSync,
+ formidable = require('formidable'),
+ nodeStatic = require('node-static'),
+ imageMagick = require('imagemagick'),
+ options = {
+ tmpDir: __dirname + '/tmp',
+ publicDir: __dirname + '/public',
+ uploadDir: __dirname + '/public/files',
+ uploadUrl: '/files/',
+ maxPostSize: 11000000000, // 11 GB
+ minFileSize: 1,
+ maxFileSize: 10000000000, // 10 GB
+ acceptFileTypes: /.+/i,
+ // Files not matched by this regular expression force a download dialog,
+ // to prevent executing any scripts in the context of the service domain:
+ inlineFileTypes: /\.(gif|jpe?g|png)$/i,
+ imageTypes: /\.(gif|jpe?g|png)$/i,
+ imageVersions: {
+ 'thumbnail': {
+ width: 80,
+ height: 80
+ }
+ },
+ accessControl: {
+ allowOrigin: '*',
+ allowMethods: 'OPTIONS, HEAD, GET, POST, PUT, DELETE',
+ allowHeaders: 'Content-Type, Content-Range, Content-Disposition'
+ },
+ /* Uncomment and edit this section to provide the service via HTTPS:
+ ssl: {
+ key: fs.readFileSync('/Applications/XAMPP/etc/ssl.key/server.key'),
+ cert: fs.readFileSync('/Applications/XAMPP/etc/ssl.crt/server.crt')
+ },
+ */
+ nodeStatic: {
+ cache: 3600 // seconds to cache served files
+ }
+ },
+ utf8encode = function (str) {
+ return unescape(encodeURIComponent(str));
+ },
+ fileServer = new nodeStatic.Server(options.publicDir, options.nodeStatic),
+ nameCountRegexp = /(?:(?: \(([\d]+)\))?(\.[^.]+))?$/,
+ nameCountFunc = function (s, index, ext) {
+ return ' (' + ((parseInt(index, 10) || 0) + 1) + ')' + (ext || '');
+ },
+ FileInfo = function (file) {
+ this.name = file.name;
+ this.size = file.size;
+ this.type = file.type;
+ this.deleteType = 'DELETE';
+ },
+ UploadHandler = function (req, res, callback) {
+ this.req = req;
+ this.res = res;
+ this.callback = callback;
+ },
+ serve = function (req, res) {
+ res.setHeader(
+ 'Access-Control-Allow-Origin',
+ options.accessControl.allowOrigin
+ );
+ res.setHeader(
+ 'Access-Control-Allow-Methods',
+ options.accessControl.allowMethods
+ );
+ res.setHeader(
+ 'Access-Control-Allow-Headers',
+ options.accessControl.allowHeaders
+ );
+ var handleResult = function (result, redirect) {
+ if (redirect) {
+ res.writeHead(302, {
+ 'Location': redirect.replace(
+ /%s/,
+ encodeURIComponent(JSON.stringify(result))
+ )
+ });
+ res.end();
+ } else {
+ res.writeHead(200, {
+ 'Content-Type': req.headers.accept
+ .indexOf('application/json') !== -1 ?
+ 'application/json' : 'text/plain'
+ });
+ res.end(JSON.stringify(result));
+ }
+ },
+ setNoCacheHeaders = function () {
+ res.setHeader('Pragma', 'no-cache');
+ res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate');
+ res.setHeader('Content-Disposition', 'inline; filename="files.json"');
+ },
+ handler = new UploadHandler(req, res, handleResult);
+ switch (req.method) {
+ case 'OPTIONS':
+ res.end();
+ break;
+ case 'HEAD':
+ case 'GET':
+ if (req.url === '/') {
+ setNoCacheHeaders();
+ if (req.method === 'GET') {
+ handler.get();
+ } else {
+ res.end();
+ }
+ } else {
+ fileServer.serve(req, res);
+ }
+ break;
+ case 'POST':
+ setNoCacheHeaders();
+ handler.post();
+ break;
+ case 'DELETE':
+ handler.destroy();
+ break;
+ default:
+ res.statusCode = 405;
+ res.end();
+ }
+ };
+ fileServer.respond = function (pathname, status, _headers, files, stat, req, res, finish) {
+ // Prevent browsers from MIME-sniffing the content-type:
+ _headers['X-Content-Type-Options'] = 'nosniff';
+ if (!options.inlineFileTypes.test(files[0])) {
+ // Force a download dialog for unsafe file extensions:
+ _headers['Content-Type'] = 'application/octet-stream';
+ _headers['Content-Disposition'] = 'attachment; filename="' +
+ utf8encode(path.basename(files[0])) + '"';
+ }
+ nodeStatic.Server.prototype.respond
+ .call(this, pathname, status, _headers, files, stat, req, res, finish);
+ };
+ FileInfo.prototype.validate = function () {
+ if (options.minFileSize && options.minFileSize > this.size) {
+ this.error = 'File is too small';
+ } else if (options.maxFileSize && options.maxFileSize < this.size) {
+ this.error = 'File is too big';
+ } else if (!options.acceptFileTypes.test(this.name)) {
+ this.error = 'Filetype not allowed';
+ }
+ return !this.error;
+ };
+ FileInfo.prototype.safeName = function () {
+ // Prevent directory traversal and creating hidden system files:
+ this.name = path.basename(this.name).replace(/^\.+/, '');
+ // Prevent overwriting existing files:
+ while (_existsSync(options.uploadDir + '/' + this.name)) {
+ this.name = this.name.replace(nameCountRegexp, nameCountFunc);
+ }
+ };
+ FileInfo.prototype.initUrls = function (req) {
+ if (!this.error) {
+ var that = this,
+ baseUrl = (options.ssl ? 'https:' : 'http:') +
+ '//' + req.headers.host + options.uploadUrl;
+ this.url = this.deleteUrl = baseUrl + encodeURIComponent(this.name);
+ Object.keys(options.imageVersions).forEach(function (version) {
+ if (_existsSync(
+ options.uploadDir + '/' + version + '/' + that.name
+ )) {
+ that[version + 'Url'] = baseUrl + version + '/' +
+ encodeURIComponent(that.name);
+ }
+ });
+ }
+ };
+ UploadHandler.prototype.get = function () {
+ var handler = this,
+ files = [];
+ fs.readdir(options.uploadDir, function (err, list) {
+ list.forEach(function (name) {
+ var stats = fs.statSync(options.uploadDir + '/' + name),
+ fileInfo;
+ if (stats.isFile() && name[0] !== '.') {
+ fileInfo = new FileInfo({
+ name: name,
+ size: stats.size
+ });
+ fileInfo.initUrls(handler.req);
+ files.push(fileInfo);
+ }
+ });
+ handler.callback({files: files});
+ });
+ };
+ UploadHandler.prototype.post = function () {
+ var handler = this,
+ form = new formidable.IncomingForm(),
+ tmpFiles = [],
+ files = [],
+ map = {},
+ counter = 1,
+ redirect,
+ finish = function () {
+ counter -= 1;
+ if (!counter) {
+ files.forEach(function (fileInfo) {
+ fileInfo.initUrls(handler.req);
+ });
+ handler.callback({files: files}, redirect);
+ }
+ };
+ form.uploadDir = options.tmpDir;
+ form.on('fileBegin', function (name, file) {
+ tmpFiles.push(file.path);
+ var fileInfo = new FileInfo(file);
+ fileInfo.safeName();
+ map[path.basename(file.path)] = fileInfo;
+ files.push(fileInfo);
+ }).on('field', function (name, value) {
+ if (name === 'redirect') {
+ redirect = value;
+ }
+ }).on('file', function (name, file) {
+ var fileInfo = map[path.basename(file.path)];
+ fileInfo.size = file.size;
+ if (!fileInfo.validate()) {
+ fs.unlink(file.path);
+ return;
+ }
+ fs.renameSync(file.path, options.uploadDir + '/' + fileInfo.name);
+ if (options.imageTypes.test(fileInfo.name)) {
+ Object.keys(options.imageVersions).forEach(function (version) {
+ counter += 1;
+ var opts = options.imageVersions[version];
+ imageMagick.resize({
+ width: opts.width,
+ height: opts.height,
+ srcPath: options.uploadDir + '/' + fileInfo.name,
+ dstPath: options.uploadDir + '/' + version + '/' +
+ fileInfo.name
+ }, finish);
+ });
+ }
+ }).on('aborted', function () {
+ tmpFiles.forEach(function (file) {
+ fs.unlink(file);
+ });
+ }).on('error', function (e) {
+ console.log(e);
+ }).on('progress', function (bytesReceived) {
+ if (bytesReceived > options.maxPostSize) {
+ handler.req.connection.destroy();
+ }
+ }).on('end', finish).parse(handler.req);
+ };
+ UploadHandler.prototype.destroy = function () {
+ var handler = this,
+ fileName;
+ if (handler.req.url.slice(0, options.uploadUrl.length) === options.uploadUrl) {
+ fileName = path.basename(decodeURIComponent(handler.req.url));
+ if (fileName[0] !== '.') {
+ fs.unlink(options.uploadDir + '/' + fileName, function (ex) {
+ Object.keys(options.imageVersions).forEach(function (version) {
+ fs.unlink(options.uploadDir + '/' + version + '/' + fileName);
+ });
+ handler.callback({success: !ex});
+ });
+ return;
+ }
+ }
+ handler.callback({success: false});
+ };
+ if (options.ssl) {
+ require('https').createServer(options.ssl, serve).listen(port);
+ } else {
+ require('http').createServer(serve).listen(port);
+ }
+}(8888));
diff --git a/library/blueimp_upload/server/node/tmp/.gitignore b/library/blueimp_upload/server/node/tmp/.gitignore
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/library/blueimp_upload/server/node/tmp/.gitignore
diff --git a/library/blueimp_upload/server/php/UploadHandler.php b/library/blueimp_upload/server/php/UploadHandler.php
new file mode 100755
index 000000000..fb77be1d0
--- /dev/null
+++ b/library/blueimp_upload/server/php/UploadHandler.php
@@ -0,0 +1,1343 @@
+<?php
+/*
+ * jQuery File Upload Plugin PHP Class 8.1.0
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+class UploadHandler
+{
+
+ protected $options;
+
+ // PHP File Upload error message codes:
+ // http://php.net/manual/en/features.file-upload.errors.php
+ protected $error_messages = array(
+ 1 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini',
+ 2 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form',
+ 3 => 'The uploaded file was only partially uploaded',
+ 4 => 'No file was uploaded',
+ 6 => 'Missing a temporary folder',
+ 7 => 'Failed to write file to disk',
+ 8 => 'A PHP extension stopped the file upload',
+ 'post_max_size' => 'The uploaded file exceeds the post_max_size directive in php.ini',
+ 'max_file_size' => 'File is too big',
+ 'min_file_size' => 'File is too small',
+ 'accept_file_types' => 'Filetype not allowed',
+ 'max_number_of_files' => 'Maximum number of files exceeded',
+ 'max_width' => 'Image exceeds maximum width',
+ 'min_width' => 'Image requires a minimum width',
+ 'max_height' => 'Image exceeds maximum height',
+ 'min_height' => 'Image requires a minimum height',
+ 'abort' => 'File upload aborted',
+ 'image_resize' => 'Failed to resize image'
+ );
+
+ protected $image_objects = array();
+
+ function __construct($options = null, $initialize = true, $error_messages = null) {
+ $this->options = array(
+ 'script_url' => $this->get_full_url().'/',
+ 'upload_dir' => dirname($this->get_server_var('SCRIPT_FILENAME')).'/files/',
+ 'upload_url' => $this->get_full_url().'/files/',
+ 'user_dirs' => false,
+ 'mkdir_mode' => 0755,
+ 'param_name' => 'files',
+ // Set the following option to 'POST', if your server does not support
+ // DELETE requests. This is a parameter sent to the client:
+ 'delete_type' => 'DELETE',
+ 'access_control_allow_origin' => '*',
+ 'access_control_allow_credentials' => false,
+ 'access_control_allow_methods' => array(
+ 'OPTIONS',
+ 'HEAD',
+ 'GET',
+ 'POST',
+ 'PUT',
+ 'PATCH',
+ 'DELETE'
+ ),
+ 'access_control_allow_headers' => array(
+ 'Content-Type',
+ 'Content-Range',
+ 'Content-Disposition'
+ ),
+ // Enable to provide file downloads via GET requests to the PHP script:
+ // 1. Set to 1 to download files via readfile method through PHP
+ // 2. Set to 2 to send a X-Sendfile header for lighttpd/Apache
+ // 3. Set to 3 to send a X-Accel-Redirect header for nginx
+ // If set to 2 or 3, adjust the upload_url option to the base path of
+ // the redirect parameter, e.g. '/files/'.
+ 'download_via_php' => false,
+ // Read files in chunks to avoid memory limits when download_via_php
+ // is enabled, set to 0 to disable chunked reading of files:
+ 'readfile_chunk_size' => 10 * 1024 * 1024, // 10 MiB
+ // Defines which files can be displayed inline when downloaded:
+ 'inline_file_types' => '/\.(gif|jpe?g|png)$/i',
+ // Defines which files (based on their names) are accepted for upload:
+ 'accept_file_types' => '/.+$/i',
+ // The php.ini settings upload_max_filesize and post_max_size
+ // take precedence over the following max_file_size setting:
+ 'max_file_size' => null,
+ 'min_file_size' => 1,
+ // The maximum number of files for the upload directory:
+ 'max_number_of_files' => null,
+ // Defines which files are handled as image files:
+ 'image_file_types' => '/\.(gif|jpe?g|png)$/i',
+ // Use exif_imagetype on all files to correct file extensions:
+ 'correct_image_extensions' => false,
+ // Image resolution restrictions:
+ 'max_width' => null,
+ 'max_height' => null,
+ 'min_width' => 1,
+ 'min_height' => 1,
+ // Set the following option to false to enable resumable uploads:
+ 'discard_aborted_uploads' => true,
+ // Set to 0 to use the GD library to scale and orient images,
+ // set to 1 to use imagick (if installed, falls back to GD),
+ // set to 2 to use the ImageMagick convert binary directly:
+ 'image_library' => 1,
+ // Uncomment the following to define an array of resource limits
+ // for imagick:
+ /*
+ 'imagick_resource_limits' => array(
+ imagick::RESOURCETYPE_MAP => 32,
+ imagick::RESOURCETYPE_MEMORY => 32
+ ),
+ */
+ // Command or path for to the ImageMagick convert binary:
+ 'convert_bin' => 'convert',
+ // Uncomment the following to add parameters in front of each
+ // ImageMagick convert call (the limit constraints seem only
+ // to have an effect if put in front):
+ /*
+ 'convert_params' => '-limit memory 32MiB -limit map 32MiB',
+ */
+ // Command or path for to the ImageMagick identify binary:
+ 'identify_bin' => 'identify',
+ 'image_versions' => array(
+ // The empty image version key defines options for the original image:
+ '' => array(
+ // Automatically rotate images based on EXIF meta data:
+ 'auto_orient' => true
+ ),
+ // Uncomment the following to create medium sized images:
+ /*
+ 'medium' => array(
+ 'max_width' => 800,
+ 'max_height' => 600
+ ),
+ */
+ 'thumbnail' => array(
+ // Uncomment the following to use a defined directory for the thumbnails
+ // instead of a subdirectory based on the version identifier.
+ // Make sure that this directory doesn't allow execution of files if you
+ // don't pose any restrictions on the type of uploaded files, e.g. by
+ // copying the .htaccess file from the files directory for Apache:
+ //'upload_dir' => dirname($this->get_server_var('SCRIPT_FILENAME')).'/thumb/',
+ //'upload_url' => $this->get_full_url().'/thumb/',
+ // Uncomment the following to force the max
+ // dimensions and e.g. create square thumbnails:
+ //'crop' => true,
+ 'max_width' => 80,
+ 'max_height' => 80
+ )
+ )
+ );
+ if ($options) {
+ $this->options = $options + $this->options;
+ }
+ if ($error_messages) {
+ $this->error_messages = $error_messages + $this->error_messages;
+ }
+ if ($initialize) {
+ $this->initialize();
+ }
+ }
+
+ protected function initialize() {
+ switch ($this->get_server_var('REQUEST_METHOD')) {
+ case 'OPTIONS':
+ case 'HEAD':
+ $this->head();
+ break;
+ case 'GET':
+ $this->get();
+ break;
+ case 'PATCH':
+ case 'PUT':
+ case 'POST':
+ $this->post();
+ break;
+ case 'DELETE':
+ $this->delete();
+ break;
+ default:
+ $this->header('HTTP/1.1 405 Method Not Allowed');
+ }
+ }
+
+ protected function get_full_url() {
+ $https = !empty($_SERVER['HTTPS']) && strcasecmp($_SERVER['HTTPS'], 'on') === 0 ||
+ !empty($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
+ strcasecmp($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') === 0;
+ return
+ ($https ? 'https://' : 'http://').
+ (!empty($_SERVER['REMOTE_USER']) ? $_SERVER['REMOTE_USER'].'@' : '').
+ (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : ($_SERVER['SERVER_NAME'].
+ ($https && $_SERVER['SERVER_PORT'] === 443 ||
+ $_SERVER['SERVER_PORT'] === 80 ? '' : ':'.$_SERVER['SERVER_PORT']))).
+ substr($_SERVER['SCRIPT_NAME'],0, strrpos($_SERVER['SCRIPT_NAME'], '/'));
+ }
+
+ protected function get_user_id() {
+ @session_start();
+ return session_id();
+ }
+
+ protected function get_user_path() {
+ if ($this->options['user_dirs']) {
+ return $this->get_user_id().'/';
+ }
+ return '';
+ }
+
+ protected function get_upload_path($file_name = null, $version = null) {
+ $file_name = $file_name ? $file_name : '';
+ if (empty($version)) {
+ $version_path = '';
+ } else {
+ $version_dir = @$this->options['image_versions'][$version]['upload_dir'];
+ if ($version_dir) {
+ return $version_dir.$this->get_user_path().$file_name;
+ }
+ $version_path = $version.'/';
+ }
+ return $this->options['upload_dir'].$this->get_user_path()
+ .$version_path.$file_name;
+ }
+
+ protected function get_query_separator($url) {
+ return strpos($url, '?') === false ? '?' : '&';
+ }
+
+ protected function get_download_url($file_name, $version = null, $direct = false) {
+ if (!$direct && $this->options['download_via_php']) {
+ $url = $this->options['script_url']
+ .$this->get_query_separator($this->options['script_url'])
+ .$this->get_singular_param_name()
+ .'='.rawurlencode($file_name);
+ if ($version) {
+ $url .= '&version='.rawurlencode($version);
+ }
+ return $url.'&download=1';
+ }
+ if (empty($version)) {
+ $version_path = '';
+ } else {
+ $version_url = @$this->options['image_versions'][$version]['upload_url'];
+ if ($version_url) {
+ return $version_url.$this->get_user_path().rawurlencode($file_name);
+ }
+ $version_path = rawurlencode($version).'/';
+ }
+ return $this->options['upload_url'].$this->get_user_path()
+ .$version_path.rawurlencode($file_name);
+ }
+
+ protected function set_additional_file_properties($file) {
+ $file->deleteUrl = $this->options['script_url']
+ .$this->get_query_separator($this->options['script_url'])
+ .$this->get_singular_param_name()
+ .'='.rawurlencode($file->name);
+ $file->deleteType = $this->options['delete_type'];
+ if ($file->deleteType !== 'DELETE') {
+ $file->deleteUrl .= '&_method=DELETE';
+ }
+ if ($this->options['access_control_allow_credentials']) {
+ $file->deleteWithCredentials = true;
+ }
+ }
+
+ // Fix for overflowing signed 32 bit integers,
+ // works for sizes up to 2^32-1 bytes (4 GiB - 1):
+ protected function fix_integer_overflow($size) {
+ if ($size < 0) {
+ $size += 2.0 * (PHP_INT_MAX + 1);
+ }
+ return $size;
+ }
+
+ protected function get_file_size($file_path, $clear_stat_cache = false) {
+ if ($clear_stat_cache) {
+ if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
+ clearstatcache(true, $file_path);
+ } else {
+ clearstatcache();
+ }
+ }
+ return $this->fix_integer_overflow(filesize($file_path));
+ }
+
+ protected function is_valid_file_object($file_name) {
+ $file_path = $this->get_upload_path($file_name);
+ if (is_file($file_path) && $file_name[0] !== '.') {
+ return true;
+ }
+ return false;
+ }
+
+ protected function get_file_object($file_name) {
+ if ($this->is_valid_file_object($file_name)) {
+ $file = new \stdClass();
+ $file->name = $file_name;
+ $file->size = $this->get_file_size(
+ $this->get_upload_path($file_name)
+ );
+ $file->url = $this->get_download_url($file->name);
+ foreach($this->options['image_versions'] as $version => $options) {
+ if (!empty($version)) {
+ if (is_file($this->get_upload_path($file_name, $version))) {
+ $file->{$version.'Url'} = $this->get_download_url(
+ $file->name,
+ $version
+ );
+ }
+ }
+ }
+ $this->set_additional_file_properties($file);
+ return $file;
+ }
+ return null;
+ }
+
+ protected function get_file_objects($iteration_method = 'get_file_object') {
+ $upload_dir = $this->get_upload_path();
+ if (!is_dir($upload_dir)) {
+ return array();
+ }
+ return array_values(array_filter(array_map(
+ array($this, $iteration_method),
+ scandir($upload_dir)
+ )));
+ }
+
+ protected function count_file_objects() {
+ return count($this->get_file_objects('is_valid_file_object'));
+ }
+
+ protected function get_error_message($error) {
+ return array_key_exists($error, $this->error_messages) ?
+ $this->error_messages[$error] : $error;
+ }
+
+ function get_config_bytes($val) {
+ $val = trim($val);
+ $last = strtolower($val[strlen($val)-1]);
+ switch($last) {
+ case 'g':
+ $val *= 1024;
+ case 'm':
+ $val *= 1024;
+ case 'k':
+ $val *= 1024;
+ }
+ return $this->fix_integer_overflow($val);
+ }
+
+ protected function validate($uploaded_file, $file, $error, $index) {
+ if ($error) {
+ $file->error = $this->get_error_message($error);
+ return false;
+ }
+ $content_length = $this->fix_integer_overflow(intval(
+ $this->get_server_var('CONTENT_LENGTH')
+ ));
+ $post_max_size = $this->get_config_bytes(ini_get('post_max_size'));
+ if ($post_max_size && ($content_length > $post_max_size)) {
+ $file->error = $this->get_error_message('post_max_size');
+ return false;
+ }
+ if (!preg_match($this->options['accept_file_types'], $file->name)) {
+ $file->error = $this->get_error_message('accept_file_types');
+ return false;
+ }
+ if ($uploaded_file && is_uploaded_file($uploaded_file)) {
+ $file_size = $this->get_file_size($uploaded_file);
+ } else {
+ $file_size = $content_length;
+ }
+ if ($this->options['max_file_size'] && (
+ $file_size > $this->options['max_file_size'] ||
+ $file->size > $this->options['max_file_size'])
+ ) {
+ $file->error = $this->get_error_message('max_file_size');
+ return false;
+ }
+ if ($this->options['min_file_size'] &&
+ $file_size < $this->options['min_file_size']) {
+ $file->error = $this->get_error_message('min_file_size');
+ return false;
+ }
+ if (is_int($this->options['max_number_of_files']) &&
+ ($this->count_file_objects() >= $this->options['max_number_of_files']) &&
+ // Ignore additional chunks of existing files:
+ !is_file($this->get_upload_path($file->name))) {
+ $file->error = $this->get_error_message('max_number_of_files');
+ return false;
+ }
+ $max_width = @$this->options['max_width'];
+ $max_height = @$this->options['max_height'];
+ $min_width = @$this->options['min_width'];
+ $min_height = @$this->options['min_height'];
+ if (($max_width || $max_height || $min_width || $min_height)
+ && preg_match($this->options['image_file_types'], $file->name)) {
+ list($img_width, $img_height) = $this->get_image_size($uploaded_file);
+ }
+ if (!empty($img_width)) {
+ if ($max_width && $img_width > $max_width) {
+ $file->error = $this->get_error_message('max_width');
+ return false;
+ }
+ if ($max_height && $img_height > $max_height) {
+ $file->error = $this->get_error_message('max_height');
+ return false;
+ }
+ if ($min_width && $img_width < $min_width) {
+ $file->error = $this->get_error_message('min_width');
+ return false;
+ }
+ if ($min_height && $img_height < $min_height) {
+ $file->error = $this->get_error_message('min_height');
+ return false;
+ }
+ }
+ return true;
+ }
+
+ protected function upcount_name_callback($matches) {
+ $index = isset($matches[1]) ? intval($matches[1]) + 1 : 1;
+ $ext = isset($matches[2]) ? $matches[2] : '';
+ return ' ('.$index.')'.$ext;
+ }
+
+ protected function upcount_name($name) {
+ return preg_replace_callback(
+ '/(?:(?: \(([\d]+)\))?(\.[^.]+))?$/',
+ array($this, 'upcount_name_callback'),
+ $name,
+ 1
+ );
+ }
+
+ protected function get_unique_filename($file_path, $name, $size, $type, $error,
+ $index, $content_range) {
+ while(is_dir($this->get_upload_path($name))) {
+ $name = $this->upcount_name($name);
+ }
+ // Keep an existing filename if this is part of a chunked upload:
+ $uploaded_bytes = $this->fix_integer_overflow(intval($content_range[1]));
+ while(is_file($this->get_upload_path($name))) {
+ if ($uploaded_bytes === $this->get_file_size(
+ $this->get_upload_path($name))) {
+ break;
+ }
+ $name = $this->upcount_name($name);
+ }
+ return $name;
+ }
+
+ protected function fix_file_extension($file_path, $name, $size, $type, $error,
+ $index, $content_range) {
+ // Add missing file extension for known image types:
+ if (strpos($name, '.') === false &&
+ preg_match('/^image\/(gif|jpe?g|png)/', $type, $matches)) {
+ $name .= '.'.$matches[1];
+ }
+ if ($this->options['correct_image_extensions'] &&
+ function_exists('exif_imagetype')) {
+ switch(@exif_imagetype($file_path)){
+ case IMAGETYPE_JPEG:
+ $extensions = array('jpg', 'jpeg');
+ break;
+ case IMAGETYPE_PNG:
+ $extensions = array('png');
+ break;
+ case IMAGETYPE_GIF:
+ $extensions = array('gif');
+ break;
+ }
+ // Adjust incorrect image file extensions:
+ if (!empty($extensions)) {
+ $parts = explode('.', $name);
+ $extIndex = count($parts) - 1;
+ $ext = strtolower(@$parts[$extIndex]);
+ if (!in_array($ext, $extensions)) {
+ $parts[$extIndex] = $extensions[0];
+ $name = implode('.', $parts);
+ }
+ }
+ }
+ return $name;
+ }
+
+ protected function trim_file_name($file_path, $name, $size, $type, $error,
+ $index, $content_range) {
+ // Remove path information and dots around the filename, to prevent uploading
+ // into different directories or replacing hidden system files.
+ // Also remove control characters and spaces (\x00..\x20) around the filename:
+ $name = trim(basename(stripslashes($name)), ".\x00..\x20");
+ // Use a timestamp for empty filenames:
+ if (!$name) {
+ $name = str_replace('.', '-', microtime(true));
+ }
+ return $name;
+ }
+
+ protected function get_file_name($file_path, $name, $size, $type, $error,
+ $index, $content_range) {
+ $name = $this->trim_file_name($file_path, $name, $size, $type, $error,
+ $index, $content_range);
+ return $this->get_unique_filename(
+ $file_path,
+ $this->fix_file_extension($file_path, $name, $size, $type, $error,
+ $index, $content_range),
+ $size,
+ $type,
+ $error,
+ $index,
+ $content_range
+ );
+ }
+
+ protected function handle_form_data($file, $index) {
+ // Handle form data, e.g. $_REQUEST['description'][$index]
+ }
+
+ protected function get_scaled_image_file_paths($file_name, $version) {
+ $file_path = $this->get_upload_path($file_name);
+ if (!empty($version)) {
+ $version_dir = $this->get_upload_path(null, $version);
+ if (!is_dir($version_dir)) {
+ mkdir($version_dir, $this->options['mkdir_mode'], true);
+ }
+ $new_file_path = $version_dir.'/'.$file_name;
+ } else {
+ $new_file_path = $file_path;
+ }
+ return array($file_path, $new_file_path);
+ }
+
+ protected function gd_get_image_object($file_path, $func, $no_cache = false) {
+ if (empty($this->image_objects[$file_path]) || $no_cache) {
+ $this->gd_destroy_image_object($file_path);
+ $this->image_objects[$file_path] = $func($file_path);
+ }
+ return $this->image_objects[$file_path];
+ }
+
+ protected function gd_set_image_object($file_path, $image) {
+ $this->gd_destroy_image_object($file_path);
+ $this->image_objects[$file_path] = $image;
+ }
+
+ protected function gd_destroy_image_object($file_path) {
+ $image = (isset($this->image_objects[$file_path])) ? $this->image_objects[$file_path] : null ;
+ return $image && imagedestroy($image);
+ }
+
+ protected function gd_imageflip($image, $mode) {
+ if (function_exists('imageflip')) {
+ return imageflip($image, $mode);
+ }
+ $new_width = $src_width = imagesx($image);
+ $new_height = $src_height = imagesy($image);
+ $new_img = imagecreatetruecolor($new_width, $new_height);
+ $src_x = 0;
+ $src_y = 0;
+ switch ($mode) {
+ case '1': // flip on the horizontal axis
+ $src_y = $new_height - 1;
+ $src_height = -$new_height;
+ break;
+ case '2': // flip on the vertical axis
+ $src_x = $new_width - 1;
+ $src_width = -$new_width;
+ break;
+ case '3': // flip on both axes
+ $src_y = $new_height - 1;
+ $src_height = -$new_height;
+ $src_x = $new_width - 1;
+ $src_width = -$new_width;
+ break;
+ default:
+ return $image;
+ }
+ imagecopyresampled(
+ $new_img,
+ $image,
+ 0,
+ 0,
+ $src_x,
+ $src_y,
+ $new_width,
+ $new_height,
+ $src_width,
+ $src_height
+ );
+ return $new_img;
+ }
+
+ protected function gd_orient_image($file_path, $src_img) {
+ if (!function_exists('exif_read_data')) {
+ return false;
+ }
+ $exif = @exif_read_data($file_path);
+ if ($exif === false) {
+ return false;
+ }
+ $orientation = intval(@$exif['Orientation']);
+ if ($orientation < 2 || $orientation > 8) {
+ return false;
+ }
+ switch ($orientation) {
+ case 2:
+ $new_img = $this->gd_imageflip(
+ $src_img,
+ defined('IMG_FLIP_VERTICAL') ? IMG_FLIP_VERTICAL : 2
+ );
+ break;
+ case 3:
+ $new_img = imagerotate($src_img, 180, 0);
+ break;
+ case 4:
+ $new_img = $this->gd_imageflip(
+ $src_img,
+ defined('IMG_FLIP_HORIZONTAL') ? IMG_FLIP_HORIZONTAL : 1
+ );
+ break;
+ case 5:
+ $tmp_img = $this->gd_imageflip(
+ $src_img,
+ defined('IMG_FLIP_HORIZONTAL') ? IMG_FLIP_HORIZONTAL : 1
+ );
+ $new_img = imagerotate($tmp_img, 270, 0);
+ imagedestroy($tmp_img);
+ break;
+ case 6:
+ $new_img = imagerotate($src_img, 270, 0);
+ break;
+ case 7:
+ $tmp_img = $this->gd_imageflip(
+ $src_img,
+ defined('IMG_FLIP_VERTICAL') ? IMG_FLIP_VERTICAL : 2
+ );
+ $new_img = imagerotate($tmp_img, 270, 0);
+ imagedestroy($tmp_img);
+ break;
+ case 8:
+ $new_img = imagerotate($src_img, 90, 0);
+ break;
+ default:
+ return false;
+ }
+ $this->gd_set_image_object($file_path, $new_img);
+ return true;
+ }
+
+ protected function gd_create_scaled_image($file_name, $version, $options) {
+ if (!function_exists('imagecreatetruecolor')) {
+ error_log('Function not found: imagecreatetruecolor');
+ return false;
+ }
+ list($file_path, $new_file_path) =
+ $this->get_scaled_image_file_paths($file_name, $version);
+ $type = strtolower(substr(strrchr($file_name, '.'), 1));
+ switch ($type) {
+ case 'jpg':
+ case 'jpeg':
+ $src_func = 'imagecreatefromjpeg';
+ $write_func = 'imagejpeg';
+ $image_quality = isset($options['jpeg_quality']) ?
+ $options['jpeg_quality'] : 75;
+ break;
+ case 'gif':
+ $src_func = 'imagecreatefromgif';
+ $write_func = 'imagegif';
+ $image_quality = null;
+ break;
+ case 'png':
+ $src_func = 'imagecreatefrompng';
+ $write_func = 'imagepng';
+ $image_quality = isset($options['png_quality']) ?
+ $options['png_quality'] : 9;
+ break;
+ default:
+ return false;
+ }
+ $src_img = $this->gd_get_image_object(
+ $file_path,
+ $src_func,
+ !empty($options['no_cache'])
+ );
+ $image_oriented = false;
+ if (!empty($options['auto_orient']) && $this->gd_orient_image(
+ $file_path,
+ $src_img
+ )) {
+ $image_oriented = true;
+ $src_img = $this->gd_get_image_object(
+ $file_path,
+ $src_func
+ );
+ }
+ $max_width = $img_width = imagesx($src_img);
+ $max_height = $img_height = imagesy($src_img);
+ if (!empty($options['max_width'])) {
+ $max_width = $options['max_width'];
+ }
+ if (!empty($options['max_height'])) {
+ $max_height = $options['max_height'];
+ }
+ $scale = min(
+ $max_width / $img_width,
+ $max_height / $img_height
+ );
+ if ($scale >= 1) {
+ if ($image_oriented) {
+ return $write_func($src_img, $new_file_path, $image_quality);
+ }
+ if ($file_path !== $new_file_path) {
+ return copy($file_path, $new_file_path);
+ }
+ return true;
+ }
+ if (empty($options['crop'])) {
+ $new_width = $img_width * $scale;
+ $new_height = $img_height * $scale;
+ $dst_x = 0;
+ $dst_y = 0;
+ $new_img = imagecreatetruecolor($new_width, $new_height);
+ } else {
+ if (($img_width / $img_height) >= ($max_width / $max_height)) {
+ $new_width = $img_width / ($img_height / $max_height);
+ $new_height = $max_height;
+ } else {
+ $new_width = $max_width;
+ $new_height = $img_height / ($img_width / $max_width);
+ }
+ $dst_x = 0 - ($new_width - $max_width) / 2;
+ $dst_y = 0 - ($new_height - $max_height) / 2;
+ $new_img = imagecreatetruecolor($max_width, $max_height);
+ }
+ // Handle transparency in GIF and PNG images:
+ switch ($type) {
+ case 'gif':
+ case 'png':
+ imagecolortransparent($new_img, imagecolorallocate($new_img, 0, 0, 0));
+ case 'png':
+ imagealphablending($new_img, false);
+ imagesavealpha($new_img, true);
+ break;
+ }
+ $success = imagecopyresampled(
+ $new_img,
+ $src_img,
+ $dst_x,
+ $dst_y,
+ 0,
+ 0,
+ $new_width,
+ $new_height,
+ $img_width,
+ $img_height
+ ) && $write_func($new_img, $new_file_path, $image_quality);
+ $this->gd_set_image_object($file_path, $new_img);
+ return $success;
+ }
+
+ protected function imagick_get_image_object($file_path, $no_cache = false) {
+ if (empty($this->image_objects[$file_path]) || $no_cache) {
+ $this->imagick_destroy_image_object($file_path);
+ $image = new \Imagick();
+ if (!empty($this->options['imagick_resource_limits'])) {
+ foreach ($this->options['imagick_resource_limits'] as $type => $limit) {
+ $image->setResourceLimit($type, $limit);
+ }
+ }
+ $image->readImage($file_path);
+ $this->image_objects[$file_path] = $image;
+ }
+ return $this->image_objects[$file_path];
+ }
+
+ protected function imagick_set_image_object($file_path, $image) {
+ $this->imagick_destroy_image_object($file_path);
+ $this->image_objects[$file_path] = $image;
+ }
+
+ protected function imagick_destroy_image_object($file_path) {
+ $image = (isset($this->image_objects[$file_path])) ? $this->image_objects[$file_path] : null ;
+ return $image && $image->destroy();
+ }
+
+ protected function imagick_orient_image($image) {
+ $orientation = $image->getImageOrientation();
+ $background = new \ImagickPixel('none');
+ switch ($orientation) {
+ case \imagick::ORIENTATION_TOPRIGHT: // 2
+ $image->flopImage(); // horizontal flop around y-axis
+ break;
+ case \imagick::ORIENTATION_BOTTOMRIGHT: // 3
+ $image->rotateImage($background, 180);
+ break;
+ case \imagick::ORIENTATION_BOTTOMLEFT: // 4
+ $image->flipImage(); // vertical flip around x-axis
+ break;
+ case \imagick::ORIENTATION_LEFTTOP: // 5
+ $image->flopImage(); // horizontal flop around y-axis
+ $image->rotateImage($background, 270);
+ break;
+ case \imagick::ORIENTATION_RIGHTTOP: // 6
+ $image->rotateImage($background, 90);
+ break;
+ case \imagick::ORIENTATION_RIGHTBOTTOM: // 7
+ $image->flipImage(); // vertical flip around x-axis
+ $image->rotateImage($background, 270);
+ break;
+ case \imagick::ORIENTATION_LEFTBOTTOM: // 8
+ $image->rotateImage($background, 270);
+ break;
+ default:
+ return false;
+ }
+ $image->setImageOrientation(\imagick::ORIENTATION_TOPLEFT); // 1
+ return true;
+ }
+
+ protected function imagick_create_scaled_image($file_name, $version, $options) {
+ list($file_path, $new_file_path) =
+ $this->get_scaled_image_file_paths($file_name, $version);
+ $image = $this->imagick_get_image_object(
+ $file_path,
+ !empty($options['no_cache'])
+ );
+ if ($image->getImageFormat() === 'GIF') {
+ // Handle animated GIFs:
+ $images = $image->coalesceImages();
+ foreach ($images as $frame) {
+ $image = $frame;
+ $this->imagick_set_image_object($file_name, $image);
+ break;
+ }
+ }
+ $image_oriented = false;
+ if (!empty($options['auto_orient'])) {
+ $image_oriented = $this->imagick_orient_image($image);
+ }
+ $new_width = $max_width = $img_width = $image->getImageWidth();
+ $new_height = $max_height = $img_height = $image->getImageHeight();
+ if (!empty($options['max_width'])) {
+ $new_width = $max_width = $options['max_width'];
+ }
+ if (!empty($options['max_height'])) {
+ $new_height = $max_height = $options['max_height'];
+ }
+ if (!($image_oriented || $max_width < $img_width || $max_height < $img_height)) {
+ if ($file_path !== $new_file_path) {
+ return copy($file_path, $new_file_path);
+ }
+ return true;
+ }
+ $crop = !empty($options['crop']);
+ if ($crop) {
+ $x = 0;
+ $y = 0;
+ if (($img_width / $img_height) >= ($max_width / $max_height)) {
+ $new_width = 0; // Enables proportional scaling based on max_height
+ $x = ($img_width / ($img_height / $max_height) - $max_width) / 2;
+ } else {
+ $new_height = 0; // Enables proportional scaling based on max_width
+ $y = ($img_height / ($img_width / $max_width) - $max_height) / 2;
+ }
+ }
+ $success = $image->resizeImage(
+ $new_width,
+ $new_height,
+ isset($options['filter']) ? $options['filter'] : \imagick::FILTER_LANCZOS,
+ isset($options['blur']) ? $options['blur'] : 1,
+ $new_width && $new_height // fit image into constraints if not to be cropped
+ );
+ if ($success && $crop) {
+ $success = $image->cropImage(
+ $max_width,
+ $max_height,
+ $x,
+ $y
+ );
+ if ($success) {
+ $success = $image->setImagePage($max_width, $max_height, 0, 0);
+ }
+ }
+ $type = strtolower(substr(strrchr($file_name, '.'), 1));
+ switch ($type) {
+ case 'jpg':
+ case 'jpeg':
+ if (!empty($options['jpeg_quality'])) {
+ $image->setImageCompression(\imagick::COMPRESSION_JPEG);
+ $image->setImageCompressionQuality($options['jpeg_quality']);
+ }
+ break;
+ }
+ if (!empty($options['strip'])) {
+ $image->stripImage();
+ }
+ return $success && $image->writeImage($new_file_path);
+ }
+
+ protected function imagemagick_create_scaled_image($file_name, $version, $options) {
+ list($file_path, $new_file_path) =
+ $this->get_scaled_image_file_paths($file_name, $version);
+ $resize = @$options['max_width']
+ .(empty($options['max_height']) ? '' : 'X'.$options['max_height']);
+ if (!$resize && empty($options['auto_orient'])) {
+ if ($file_path !== $new_file_path) {
+ return copy($file_path, $new_file_path);
+ }
+ return true;
+ }
+ $cmd = $this->options['convert_bin'];
+ if (!empty($this->options['convert_params'])) {
+ $cmd .= ' '.$this->options['convert_params'];
+ }
+ $cmd .= ' '.escapeshellarg($file_path);
+ if (!empty($options['auto_orient'])) {
+ $cmd .= ' -auto-orient';
+ }
+ if ($resize) {
+ // Handle animated GIFs:
+ $cmd .= ' -coalesce';
+ if (empty($options['crop'])) {
+ $cmd .= ' -resize '.escapeshellarg($resize.'>');
+ } else {
+ $cmd .= ' -resize '.escapeshellarg($resize.'^');
+ $cmd .= ' -gravity center';
+ $cmd .= ' -crop '.escapeshellarg($resize.'+0+0');
+ }
+ // Make sure the page dimensions are correct (fixes offsets of animated GIFs):
+ $cmd .= ' +repage';
+ }
+ if (!empty($options['convert_params'])) {
+ $cmd .= ' '.$options['convert_params'];
+ }
+ $cmd .= ' '.escapeshellarg($new_file_path);
+ exec($cmd, $output, $error);
+ if ($error) {
+ error_log(implode('\n', $output));
+ return false;
+ }
+ return true;
+ }
+
+ protected function get_image_size($file_path) {
+ if ($this->options['image_library']) {
+ if (extension_loaded('imagick')) {
+ $image = new \Imagick();
+ try {
+ if (@$image->pingImage($file_path)) {
+ $dimensions = array($image->getImageWidth(), $image->getImageHeight());
+ $image->destroy();
+ return $dimensions;
+ }
+ return false;
+ } catch (Exception $e) {
+ error_log($e->getMessage());
+ }
+ }
+ if ($this->options['image_library'] === 2) {
+ $cmd = $this->options['identify_bin'];
+ $cmd .= ' -ping '.escapeshellarg($file_path);
+ exec($cmd, $output, $error);
+ if (!$error && !empty($output)) {
+ // image.jpg JPEG 1920x1080 1920x1080+0+0 8-bit sRGB 465KB 0.000u 0:00.000
+ $infos = preg_split('/\s+/', $output[0]);
+ $dimensions = preg_split('/x/', $infos[2]);
+ return $dimensions;
+ }
+ return false;
+ }
+ }
+ if (!function_exists('getimagesize')) {
+ error_log('Function not found: getimagesize');
+ return false;
+ }
+ return @getimagesize($file_path);
+ }
+
+ protected function create_scaled_image($file_name, $version, $options) {
+ if ($this->options['image_library'] === 2) {
+ return $this->imagemagick_create_scaled_image($file_name, $version, $options);
+ }
+ if ($this->options['image_library'] && extension_loaded('imagick')) {
+ return $this->imagick_create_scaled_image($file_name, $version, $options);
+ }
+ return $this->gd_create_scaled_image($file_name, $version, $options);
+ }
+
+ protected function destroy_image_object($file_path) {
+ if ($this->options['image_library'] && extension_loaded('imagick')) {
+ return $this->imagick_destroy_image_object($file_path);
+ }
+ }
+
+ protected function is_valid_image_file($file_path) {
+ if (!preg_match($this->options['image_file_types'], $file_path)) {
+ return false;
+ }
+ if (function_exists('exif_imagetype')) {
+ return @exif_imagetype($file_path);
+ }
+ $image_info = $this->get_image_size($file_path);
+ return $image_info && $image_info[0] && $image_info[1];
+ }
+
+ protected function handle_image_file($file_path, $file) {
+ $failed_versions = array();
+ foreach($this->options['image_versions'] as $version => $options) {
+ if ($this->create_scaled_image($file->name, $version, $options)) {
+ if (!empty($version)) {
+ $file->{$version.'Url'} = $this->get_download_url(
+ $file->name,
+ $version
+ );
+ } else {
+ $file->size = $this->get_file_size($file_path, true);
+ }
+ } else {
+ $failed_versions[] = $version ? $version : 'original';
+ }
+ }
+ if (count($failed_versions)) {
+ $file->error = $this->get_error_message('image_resize')
+ .' ('.implode($failed_versions,', ').')';
+ }
+ // Free memory:
+ $this->destroy_image_object($file_path);
+ }
+
+ protected function handle_file_upload($uploaded_file, $name, $size, $type, $error,
+ $index = null, $content_range = null) {
+ $file = new \stdClass();
+ $file->name = $this->get_file_name($uploaded_file, $name, $size, $type, $error,
+ $index, $content_range);
+ $file->size = $this->fix_integer_overflow(intval($size));
+ $file->type = $type;
+ if ($this->validate($uploaded_file, $file, $error, $index)) {
+ $this->handle_form_data($file, $index);
+ $upload_dir = $this->get_upload_path();
+ if (!is_dir($upload_dir)) {
+ mkdir($upload_dir, $this->options['mkdir_mode'], true);
+ }
+ $file_path = $this->get_upload_path($file->name);
+ $append_file = $content_range && is_file($file_path) &&
+ $file->size > $this->get_file_size($file_path);
+ if ($uploaded_file && is_uploaded_file($uploaded_file)) {
+ // multipart/formdata uploads (POST method uploads)
+ if ($append_file) {
+ file_put_contents(
+ $file_path,
+ fopen($uploaded_file, 'r'),
+ FILE_APPEND
+ );
+ } else {
+ move_uploaded_file($uploaded_file, $file_path);
+ }
+ } else {
+ // Non-multipart uploads (PUT method support)
+ file_put_contents(
+ $file_path,
+ fopen('php://input', 'r'),
+ $append_file ? FILE_APPEND : 0
+ );
+ }
+ $file_size = $this->get_file_size($file_path, $append_file);
+ if ($file_size === $file->size) {
+ $file->url = $this->get_download_url($file->name);
+ if ($this->is_valid_image_file($file_path)) {
+ $this->handle_image_file($file_path, $file);
+ }
+ } else {
+ $file->size = $file_size;
+ if (!$content_range && $this->options['discard_aborted_uploads']) {
+ unlink($file_path);
+ $file->error = $this->get_error_message('abort');
+ }
+ }
+ $this->set_additional_file_properties($file);
+ }
+ return $file;
+ }
+
+ protected function readfile($file_path) {
+ $file_size = $this->get_file_size($file_path);
+ $chunk_size = $this->options['readfile_chunk_size'];
+ if ($chunk_size && $file_size > $chunk_size) {
+ $handle = fopen($file_path, 'rb');
+ while (!feof($handle)) {
+ echo fread($handle, $chunk_size);
+ @ob_flush();
+ @flush();
+ }
+ fclose($handle);
+ return $file_size;
+ }
+ return readfile($file_path);
+ }
+
+ protected function body($str) {
+ echo $str;
+ }
+
+ protected function header($str) {
+ header($str);
+ }
+
+ protected function get_server_var($id) {
+ return isset($_SERVER[$id]) ? $_SERVER[$id] : '';
+ }
+
+ protected function generate_response($content, $print_response = true) {
+ if ($print_response) {
+ $json = json_encode($content);
+ $redirect = isset($_REQUEST['redirect']) ?
+ stripslashes($_REQUEST['redirect']) : null;
+ if ($redirect) {
+ $this->header('Location: '.sprintf($redirect, rawurlencode($json)));
+ return;
+ }
+ $this->head();
+ if ($this->get_server_var('HTTP_CONTENT_RANGE')) {
+ $files = isset($content[$this->options['param_name']]) ?
+ $content[$this->options['param_name']] : null;
+ if ($files && is_array($files) && is_object($files[0]) && $files[0]->size) {
+ $this->header('Range: 0-'.(
+ $this->fix_integer_overflow(intval($files[0]->size)) - 1
+ ));
+ }
+ }
+ $this->body($json);
+ }
+ return $content;
+ }
+
+ protected function get_version_param() {
+ return isset($_GET['version']) ? basename(stripslashes($_GET['version'])) : null;
+ }
+
+ protected function get_singular_param_name() {
+ return substr($this->options['param_name'], 0, -1);
+ }
+
+ protected function get_file_name_param() {
+ $name = $this->get_singular_param_name();
+ return isset($_REQUEST[$name]) ? basename(stripslashes($_REQUEST[$name])) : null;
+ }
+
+ protected function get_file_names_params() {
+ $params = isset($_REQUEST[$this->options['param_name']]) ?
+ $_REQUEST[$this->options['param_name']] : array();
+ foreach ($params as $key => $value) {
+ $params[$key] = basename(stripslashes($value));
+ }
+ return $params;
+ }
+
+ protected function get_file_type($file_path) {
+ switch (strtolower(pathinfo($file_path, PATHINFO_EXTENSION))) {
+ case 'jpeg':
+ case 'jpg':
+ return 'image/jpeg';
+ case 'png':
+ return 'image/png';
+ case 'gif':
+ return 'image/gif';
+ default:
+ return '';
+ }
+ }
+
+ protected function download() {
+ switch ($this->options['download_via_php']) {
+ case 1:
+ $redirect_header = null;
+ break;
+ case 2:
+ $redirect_header = 'X-Sendfile';
+ break;
+ case 3:
+ $redirect_header = 'X-Accel-Redirect';
+ break;
+ default:
+ return $this->header('HTTP/1.1 403 Forbidden');
+ }
+ $file_name = $this->get_file_name_param();
+ if (!$this->is_valid_file_object($file_name)) {
+ return $this->header('HTTP/1.1 404 Not Found');
+ }
+ if ($redirect_header) {
+ return $this->header(
+ $redirect_header.': '.$this->get_download_url(
+ $file_name,
+ $this->get_version_param(),
+ true
+ )
+ );
+ }
+ $file_path = $this->get_upload_path($file_name, $this->get_version_param());
+ // Prevent browsers from MIME-sniffing the content-type:
+ $this->header('X-Content-Type-Options: nosniff');
+ if (!preg_match($this->options['inline_file_types'], $file_name)) {
+ $this->header('Content-Type: application/octet-stream');
+ $this->header('Content-Disposition: attachment; filename="'.$file_name.'"');
+ } else {
+ $this->header('Content-Type: '.$this->get_file_type($file_path));
+ $this->header('Content-Disposition: inline; filename="'.$file_name.'"');
+ }
+ $this->header('Content-Length: '.$this->get_file_size($file_path));
+ $this->header('Last-Modified: '.gmdate('D, d M Y H:i:s T', filemtime($file_path)));
+ $this->readfile($file_path);
+ }
+
+ protected function send_content_type_header() {
+ $this->header('Vary: Accept');
+ if (strpos($this->get_server_var('HTTP_ACCEPT'), 'application/json') !== false) {
+ $this->header('Content-type: application/json');
+ } else {
+ $this->header('Content-type: text/plain');
+ }
+ }
+
+ protected function send_access_control_headers() {
+ $this->header('Access-Control-Allow-Origin: '.$this->options['access_control_allow_origin']);
+ $this->header('Access-Control-Allow-Credentials: '
+ .($this->options['access_control_allow_credentials'] ? 'true' : 'false'));
+ $this->header('Access-Control-Allow-Methods: '
+ .implode(', ', $this->options['access_control_allow_methods']));
+ $this->header('Access-Control-Allow-Headers: '
+ .implode(', ', $this->options['access_control_allow_headers']));
+ }
+
+ public function head() {
+ $this->header('Pragma: no-cache');
+ $this->header('Cache-Control: no-store, no-cache, must-revalidate');
+ $this->header('Content-Disposition: inline; filename="files.json"');
+ // Prevent Internet Explorer from MIME-sniffing the content-type:
+ $this->header('X-Content-Type-Options: nosniff');
+ if ($this->options['access_control_allow_origin']) {
+ $this->send_access_control_headers();
+ }
+ $this->send_content_type_header();
+ }
+
+ public function get($print_response = true) {
+ if ($print_response && isset($_GET['download'])) {
+ return $this->download();
+ }
+ $file_name = $this->get_file_name_param();
+ if ($file_name) {
+ $response = array(
+ $this->get_singular_param_name() => $this->get_file_object($file_name)
+ );
+ } else {
+ $response = array(
+ $this->options['param_name'] => $this->get_file_objects()
+ );
+ }
+ return $this->generate_response($response, $print_response);
+ }
+
+ public function post($print_response = true) {
+ if (isset($_REQUEST['_method']) && $_REQUEST['_method'] === 'DELETE') {
+ return $this->delete($print_response);
+ }
+ $upload = isset($_FILES[$this->options['param_name']]) ?
+ $_FILES[$this->options['param_name']] : null;
+ // Parse the Content-Disposition header, if available:
+ $file_name = $this->get_server_var('HTTP_CONTENT_DISPOSITION') ?
+ rawurldecode(preg_replace(
+ '/(^[^"]+")|("$)/',
+ '',
+ $this->get_server_var('HTTP_CONTENT_DISPOSITION')
+ )) : null;
+ // Parse the Content-Range header, which has the following form:
+ // Content-Range: bytes 0-524287/2000000
+ $content_range = $this->get_server_var('HTTP_CONTENT_RANGE') ?
+ preg_split('/[^0-9]+/', $this->get_server_var('HTTP_CONTENT_RANGE')) : null;
+ $size = $content_range ? $content_range[3] : null;
+ $files = array();
+ if ($upload && is_array($upload['tmp_name'])) {
+ // param_name is an array identifier like "files[]",
+ // $_FILES is a multi-dimensional array:
+ foreach ($upload['tmp_name'] as $index => $value) {
+ $files[] = $this->handle_file_upload(
+ $upload['tmp_name'][$index],
+ $file_name ? $file_name : $upload['name'][$index],
+ $size ? $size : $upload['size'][$index],
+ $upload['type'][$index],
+ $upload['error'][$index],
+ $index,
+ $content_range
+ );
+ }
+ } else {
+ // param_name is a single object identifier like "file",
+ // $_FILES is a one-dimensional array:
+ $files[] = $this->handle_file_upload(
+ isset($upload['tmp_name']) ? $upload['tmp_name'] : null,
+ $file_name ? $file_name : (isset($upload['name']) ?
+ $upload['name'] : null),
+ $size ? $size : (isset($upload['size']) ?
+ $upload['size'] : $this->get_server_var('CONTENT_LENGTH')),
+ isset($upload['type']) ?
+ $upload['type'] : $this->get_server_var('CONTENT_TYPE'),
+ isset($upload['error']) ? $upload['error'] : null,
+ null,
+ $content_range
+ );
+ }
+ return $this->generate_response(
+ array($this->options['param_name'] => $files),
+ $print_response
+ );
+ }
+
+ public function delete($print_response = true) {
+ $file_names = $this->get_file_names_params();
+ if (empty($file_names)) {
+ $file_names = array($this->get_file_name_param());
+ }
+ $response = array();
+ foreach($file_names as $file_name) {
+ $file_path = $this->get_upload_path($file_name);
+ $success = is_file($file_path) && $file_name[0] !== '.' && unlink($file_path);
+ if ($success) {
+ foreach($this->options['image_versions'] as $version => $options) {
+ if (!empty($version)) {
+ $file = $this->get_upload_path($file_name, $version);
+ if (is_file($file)) {
+ unlink($file);
+ }
+ }
+ }
+ }
+ $response[$file_name] = $success;
+ }
+ return $this->generate_response($response, $print_response);
+ }
+
+}
diff --git a/library/blueimp_upload/server/php/files/.gitignore b/library/blueimp_upload/server/php/files/.gitignore
new file mode 100644
index 000000000..e24a60fae
--- /dev/null
+++ b/library/blueimp_upload/server/php/files/.gitignore
@@ -0,0 +1,3 @@
+*
+!.gitignore
+!.htaccess
diff --git a/library/blueimp_upload/server/php/files/.htaccess b/library/blueimp_upload/server/php/files/.htaccess
new file mode 100644
index 000000000..56689f0bb
--- /dev/null
+++ b/library/blueimp_upload/server/php/files/.htaccess
@@ -0,0 +1,18 @@
+# The following directives force the content-type application/octet-stream
+# and force browsers to display a download dialog for non-image files.
+# This prevents the execution of script files in the context of the website:
+ForceType application/octet-stream
+Header set Content-Disposition attachment
+<FilesMatch "(?i)\.(gif|jpe?g|png)$">
+ ForceType none
+ Header unset Content-Disposition
+</FilesMatch>
+
+# The following directive prevents browsers from MIME-sniffing the content-type.
+# This is an important complement to the ForceType directive above:
+Header set X-Content-Type-Options nosniff
+
+# Uncomment the following lines to prevent unauthorized download of files:
+#AuthName "Authorization required"
+#AuthType Basic
+#require valid-user
diff --git a/library/blueimp_upload/server/php/index.php b/library/blueimp_upload/server/php/index.php
new file mode 100644
index 000000000..3ae1295ef
--- /dev/null
+++ b/library/blueimp_upload/server/php/index.php
@@ -0,0 +1,15 @@
+<?php
+/*
+ * jQuery File Upload Plugin PHP Example 5.14
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+error_reporting(E_ALL | E_STRICT);
+require('UploadHandler.php');
+$upload_handler = new UploadHandler();
diff --git a/library/blueimp_upload/test/index.html b/library/blueimp_upload/test/index.html
new file mode 100644
index 000000000..8779a9a8c
--- /dev/null
+++ b/library/blueimp_upload/test/index.html
@@ -0,0 +1,172 @@
+<!DOCTYPE HTML>
+<!--
+/*
+ * jQuery File Upload Plugin Test 9.1.0
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+-->
+<html lang="en">
+<head>
+<!-- Force latest IE rendering engine or ChromeFrame if installed -->
+<!--[if IE]>
+<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+<![endif]-->
+<meta charset="utf-8">
+<title>jQuery File Upload Plugin Test</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<link rel="stylesheet" href="http://codeorigin.jquery.com/qunit/qunit-1.14.0.css">
+</head>
+<body>
+<h1 id="qunit-header">jQuery File Upload Plugin Test</h1>
+<h2 id="qunit-banner"></h2>
+<div id="qunit-testrunner-toolbar"></div>
+<h2 id="qunit-userAgent"></h2>
+<ol id="qunit-tests"></ol>
+<div id="qunit-fixture">
+ <!-- The file upload form used as target for the file upload widget -->
+ <form id="fileupload" action="../server/php/" method="POST" enctype="multipart/form-data">
+ <!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload -->
+ <div class="row fileupload-buttonbar">
+ <div class="col-lg-7">
+ <!-- The fileinput-button span is used to style the file input field as button -->
+ <span class="btn btn-success fileinput-button">
+ <i class="icon-plus icon-white"></i>
+ <span>Add files...</span>
+ <input type="file" name="files[]" multiple>
+ </span>
+ <button type="submit" class="btn btn-primary start">
+ <i class="icon-upload icon-white"></i>
+ <span>Start upload</span>
+ </button>
+ <button type="reset" class="btn btn-warning cancel">
+ <i class="icon-ban-circle icon-white"></i>
+ <span>Cancel upload</span>
+ </button>
+ <button type="button" class="btn btn-danger delete">
+ <i class="icon-trash icon-white"></i>
+ <span>Delete</span>
+ </button>
+ <input type="checkbox" class="toggle">
+ <!-- The global file processing state -->
+ <span class="fileupload-process"></span>
+ </div>
+ <!-- The global progress state -->
+ <div class="col-lg-5 fileupload-progress">
+ <!-- The global progress bar -->
+ <div class="progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar progress-bar-success" style="width:0%;"></div>
+ </div>
+ <!-- The extended global progress state -->
+ <div class="progress-extended">&nbsp;</div>
+ </div>
+ </div>
+ <!-- The table listing the files available for upload/download -->
+ <table role="presentation" class="table table-striped"><tbody class="files"></tbody></table>
+ </form>
+</div>
+<!-- The template to display files available for upload -->
+<script id="template-upload" type="text/x-tmpl">
+{% for (var i=0, file; file=o.files[i]; i++) { %}
+ <tr class="template-upload">
+ <td>
+ <span class="preview"></span>
+ </td>
+ <td>
+ <p class="name">{%=file.name%}</p>
+ <strong class="error text-danger"></strong>
+ </td>
+ <td>
+ <p class="size">Processing...</p>
+ <div class="progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"><div class="progress-bar progress-bar-success" style="width:0%;"></div></div>
+ </td>
+ <td>
+ {% if (!i && !o.options.autoUpload) { %}
+ <button class="btn btn-primary start" disabled>
+ <i class="glyphicon glyphicon-upload"></i>
+ <span>Start</span>
+ </button>
+ {% } %}
+ {% if (!i) { %}
+ <button class="btn btn-warning cancel">
+ <i class="glyphicon glyphicon-ban-circle"></i>
+ <span>Cancel</span>
+ </button>
+ {% } %}
+ </td>
+ </tr>
+{% } %}
+</script>
+<!-- The template to display files available for download -->
+<script id="template-download" type="text/x-tmpl">
+{% for (var i=0, file; file=o.files[i]; i++) { %}
+ <tr class="template-download">
+ <td>
+ <span class="preview">
+ {% if (file.thumbnailUrl) { %}
+ <a href="{%=file.url%}" title="{%=file.name%}" download="{%=file.name%}" data-gallery><img src="{%=file.thumbnailUrl%}"></a>
+ {% } %}
+ </span>
+ </td>
+ <td>
+ <p class="name">
+ {% if (file.url) { %}
+ <a href="{%=file.url%}" title="{%=file.name%}" download="{%=file.name%}" {%=file.thumbnailUrl?'data-gallery':''%}>{%=file.name%}</a>
+ {% } else { %}
+ <span>{%=file.name%}</span>
+ {% } %}
+ </p>
+ {% if (file.error) { %}
+ <div><span class="label label-danger">Error</span> {%=file.error%}</div>
+ {% } %}
+ </td>
+ <td>
+ <span class="size">{%=o.formatFileSize(file.size)%}</span>
+ </td>
+ <td>
+ {% if (file.deleteUrl) { %}
+ <button class="btn btn-danger delete" data-type="{%=file.deleteType%}" data-url="{%=file.deleteUrl%}"{% if (file.deleteWithCredentials) { %} data-xhr-fields='{"withCredentials":true}'{% } %}>
+ <i class="glyphicon glyphicon-trash"></i>
+ <span>Delete</span>
+ </button>
+ <input type="checkbox" name="delete" value="1" class="toggle">
+ {% } else { %}
+ <button class="btn btn-warning cancel">
+ <i class="glyphicon glyphicon-ban-circle"></i>
+ <span>Cancel</span>
+ </button>
+ {% } %}
+ </td>
+ </tr>
+{% } %}
+</script>
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+<script src="../js/vendor/jquery.ui.widget.js"></script>
+<script src="//blueimp.github.io/JavaScript-Templates/js/tmpl.min.js"></script>
+<script src="//blueimp.github.io/JavaScript-Load-Image/js/load-image.all.min.js"></script>
+<script src="//blueimp.github.io/JavaScript-Canvas-to-Blob/js/canvas-to-blob.min.js"></script>
+<script src="../js/jquery.iframe-transport.js"></script>
+<script src="../js/jquery.fileupload.js"></script>
+<script>
+/* global window, $ */
+window.testBasicWidget = $.blueimp.fileupload;
+</script>
+<script src="../js/jquery.fileupload-process.js"></script>
+<script src="../js/jquery.fileupload-image.js"></script>
+<script src="../js/jquery.fileupload-audio.js"></script>
+<script src="../js/jquery.fileupload-video.js"></script>
+<script src="../js/jquery.fileupload-validate.js"></script>
+<script src="../js/jquery.fileupload-ui.js"></script>
+<script>
+/* global window, $ */
+window.testUIWidget = $.blueimp.fileupload;
+</script>
+<script src="//code.jquery.com/qunit/qunit-1.15.0.js"></script>
+<script src="test.js"></script>
+</body>
+</html>
diff --git a/library/blueimp_upload/test/test.js b/library/blueimp_upload/test/test.js
new file mode 100644
index 000000000..72d08d99e
--- /dev/null
+++ b/library/blueimp_upload/test/test.js
@@ -0,0 +1,1288 @@
+/*
+ * jQuery File Upload Plugin Test 9.4.0
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/* global $, QUnit, window, document, expect, module, test, asyncTest, start, ok, strictEqual, notStrictEqual */
+
+$(function () {
+ // jshint nomen:false
+ 'use strict';
+
+ QUnit.done = function () {
+ // Delete all uploaded files:
+ var url = $('#fileupload').prop('action');
+ $.getJSON(url, function (result) {
+ $.each(result.files, function (index, file) {
+ $.ajax({
+ url: url + '?file=' + encodeURIComponent(file.name),
+ type: 'DELETE'
+ });
+ });
+ });
+ };
+
+ var lifecycle = {
+ setup: function () {
+ // Set the .fileupload method to the basic widget method:
+ $.widget('blueimp.fileupload', window.testBasicWidget, {});
+ },
+ teardown: function () {
+ // Remove all remaining event listeners:
+ $(document).unbind();
+ }
+ },
+ lifecycleUI = {
+ setup: function () {
+ // Set the .fileupload method to the UI widget method:
+ $.widget('blueimp.fileupload', window.testUIWidget, {});
+ },
+ teardown: function () {
+ // Remove all remaining event listeners:
+ $(document).unbind();
+ }
+ };
+
+ module('Initialization', lifecycle);
+
+ test('Widget initialization', function () {
+ var fu = $('#fileupload').fileupload();
+ ok(fu.data('blueimp-fileupload') || fu.data('fileupload'));
+ });
+
+ test('Data attribute options', function () {
+ $('#fileupload').attr('data-url', 'http://example.org');
+ $('#fileupload').fileupload();
+ strictEqual(
+ $('#fileupload').fileupload('option', 'url'),
+ 'http://example.org'
+ );
+ });
+
+ test('File input initialization', function () {
+ var fu = $('#fileupload').fileupload();
+ ok(
+ fu.fileupload('option', 'fileInput').length,
+ 'File input field inside of the widget'
+ );
+ ok(
+ fu.fileupload('option', 'fileInput').length,
+ 'Widget element as file input field'
+ );
+ });
+
+ test('Drop zone initialization', function () {
+ ok($('#fileupload').fileupload()
+ .fileupload('option', 'dropZone').length);
+ });
+
+ test('Paste zone initialization', function () {
+ ok($('#fileupload').fileupload()
+ .fileupload('option', 'pasteZone').length);
+ });
+
+ test('Event listeners initialization', function () {
+ expect(
+ $.support.xhrFormDataFileUpload ? 4 : 1
+ );
+ var eo = {
+ originalEvent: {
+ dataTransfer: {files: [{}], types: ['Files']},
+ clipboardData: {items: [{}]}
+ }
+ },
+ fu = $('#fileupload').fileupload({
+ dragover: function () {
+ ok(true, 'Triggers dragover callback');
+ return false;
+ },
+ drop: function () {
+ ok(true, 'Triggers drop callback');
+ return false;
+ },
+ paste: function () {
+ ok(true, 'Triggers paste callback');
+ return false;
+ },
+ change: function () {
+ ok(true, 'Triggers change callback');
+ return false;
+ }
+ }),
+ fileInput = fu.fileupload('option', 'fileInput'),
+ dropZone = fu.fileupload('option', 'dropZone'),
+ pasteZone = fu.fileupload('option', 'pasteZone');
+ fileInput.trigger($.Event('change', eo));
+ dropZone.trigger($.Event('dragover', eo));
+ dropZone.trigger($.Event('drop', eo));
+ pasteZone.trigger($.Event('paste', eo));
+ });
+
+ module('API', lifecycle);
+
+ test('destroy', function () {
+ expect(4);
+ var eo = {
+ originalEvent: {
+ dataTransfer: {files: [{}], types: ['Files']},
+ clipboardData: {items: [{}]}
+ }
+ },
+ options = {
+ dragover: function () {
+ ok(true, 'Triggers dragover callback');
+ return false;
+ },
+ drop: function () {
+ ok(true, 'Triggers drop callback');
+ return false;
+ },
+ paste: function () {
+ ok(true, 'Triggers paste callback');
+ return false;
+ },
+ change: function () {
+ ok(true, 'Triggers change callback');
+ return false;
+ }
+ },
+ fu = $('#fileupload').fileupload(options),
+ fileInput = fu.fileupload('option', 'fileInput'),
+ dropZone = fu.fileupload('option', 'dropZone'),
+ pasteZone = fu.fileupload('option', 'pasteZone');
+ dropZone.bind('dragover', options.dragover);
+ dropZone.bind('drop', options.drop);
+ pasteZone.bind('paste', options.paste);
+ fileInput.bind('change', options.change);
+ fu.fileupload('destroy');
+ fileInput.trigger($.Event('change', eo));
+ dropZone.trigger($.Event('dragover', eo));
+ dropZone.trigger($.Event('drop', eo));
+ pasteZone.trigger($.Event('paste', eo));
+ });
+
+ test('disable/enable', function () {
+ expect(
+ $.support.xhrFormDataFileUpload ? 4 : 1
+ );
+ var eo = {
+ originalEvent: {
+ dataTransfer: {files: [{}], types: ['Files']},
+ clipboardData: {items: [{}]}
+ }
+ },
+ fu = $('#fileupload').fileupload({
+ dragover: function () {
+ ok(true, 'Triggers dragover callback');
+ return false;
+ },
+ drop: function () {
+ ok(true, 'Triggers drop callback');
+ return false;
+ },
+ paste: function () {
+ ok(true, 'Triggers paste callback');
+ return false;
+ },
+ change: function () {
+ ok(true, 'Triggers change callback');
+ return false;
+ }
+ }),
+ fileInput = fu.fileupload('option', 'fileInput'),
+ dropZone = fu.fileupload('option', 'dropZone'),
+ pasteZone = fu.fileupload('option', 'pasteZone');
+ fu.fileupload('disable');
+ fileInput.trigger($.Event('change', eo));
+ dropZone.trigger($.Event('dragover', eo));
+ dropZone.trigger($.Event('drop', eo));
+ pasteZone.trigger($.Event('paste', eo));
+ fu.fileupload('enable');
+ fileInput.trigger($.Event('change', eo));
+ dropZone.trigger($.Event('dragover', eo));
+ dropZone.trigger($.Event('drop', eo));
+ pasteZone.trigger($.Event('paste', eo));
+ });
+
+ test('option', function () {
+ expect(
+ $.support.xhrFormDataFileUpload ? 10 : 7
+ );
+ var eo = {
+ originalEvent: {
+ dataTransfer: {files: [{}], types: ['Files']},
+ clipboardData: {items: [{}]}
+ }
+ },
+ fu = $('#fileupload').fileupload({
+ dragover: function () {
+ ok(true, 'Triggers dragover callback');
+ return false;
+ },
+ drop: function () {
+ ok(true, 'Triggers drop callback');
+ return false;
+ },
+ paste: function () {
+ ok(true, 'Triggers paste callback');
+ return false;
+ },
+ change: function () {
+ ok(true, 'Triggers change callback');
+ return false;
+ }
+ }),
+ fileInput = fu.fileupload('option', 'fileInput'),
+ dropZone = fu.fileupload('option', 'dropZone'),
+ pasteZone = fu.fileupload('option', 'pasteZone');
+ fu.fileupload('option', 'fileInput', null);
+ fu.fileupload('option', 'dropZone', null);
+ fu.fileupload('option', 'pasteZone', null);
+ fileInput.trigger($.Event('change', eo));
+ dropZone.trigger($.Event('dragover', eo));
+ dropZone.trigger($.Event('drop', eo));
+ pasteZone.trigger($.Event('paste', eo));
+ fu.fileupload('option', 'dropZone', 'body');
+ strictEqual(
+ fu.fileupload('option', 'dropZone')[0],
+ document.body,
+ 'Allow a query string as parameter for the dropZone option'
+ );
+ fu.fileupload('option', 'dropZone', document);
+ strictEqual(
+ fu.fileupload('option', 'dropZone')[0],
+ document,
+ 'Allow a document element as parameter for the dropZone option'
+ );
+ fu.fileupload('option', 'pasteZone', 'body');
+ strictEqual(
+ fu.fileupload('option', 'pasteZone')[0],
+ document.body,
+ 'Allow a query string as parameter for the pasteZone option'
+ );
+ fu.fileupload('option', 'pasteZone', document);
+ strictEqual(
+ fu.fileupload('option', 'pasteZone')[0],
+ document,
+ 'Allow a document element as parameter for the pasteZone option'
+ );
+ fu.fileupload('option', 'fileInput', ':file');
+ strictEqual(
+ fu.fileupload('option', 'fileInput')[0],
+ $(':file')[0],
+ 'Allow a query string as parameter for the fileInput option'
+ );
+ fu.fileupload('option', 'fileInput', $(':file')[0]);
+ strictEqual(
+ fu.fileupload('option', 'fileInput')[0],
+ $(':file')[0],
+ 'Allow a document element as parameter for the fileInput option'
+ );
+ fu.fileupload('option', 'fileInput', fileInput);
+ fu.fileupload('option', 'dropZone', dropZone);
+ fu.fileupload('option', 'pasteZone', pasteZone);
+ fileInput.trigger($.Event('change', eo));
+ dropZone.trigger($.Event('dragover', eo));
+ dropZone.trigger($.Event('drop', eo));
+ pasteZone.trigger($.Event('paste', eo));
+ });
+
+ asyncTest('add', function () {
+ expect(2);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ add: function (e, data) {
+ strictEqual(
+ data.files[0].name,
+ param.files[0].name,
+ 'Triggers add callback'
+ );
+ }
+ }).fileupload('add', param).fileupload(
+ 'option',
+ 'add',
+ function (e, data) {
+ data.submit().complete(function () {
+ ok(true, 'data.submit() Returns a jqXHR object');
+ start();
+ });
+ }
+ ).fileupload('add', param);
+ });
+
+ asyncTest('send', function () {
+ expect(3);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ send: function (e, data) {
+ strictEqual(
+ data.files[0].name,
+ 'test',
+ 'Triggers send callback'
+ );
+ }
+ }).fileupload('send', param).fail(function () {
+ ok(true, 'Allows to abort the request');
+ }).complete(function () {
+ ok(true, 'Returns a jqXHR object');
+ start();
+ }).abort();
+ });
+
+ module('Callbacks', lifecycle);
+
+ asyncTest('add', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ add: function () {
+ ok(true, 'Triggers add callback');
+ start();
+ }
+ }).fileupload('add', param);
+ });
+
+ asyncTest('submit', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ submit: function () {
+ ok(true, 'Triggers submit callback');
+ start();
+ return false;
+ }
+ }).fileupload('add', param);
+ });
+
+ asyncTest('send', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ send: function () {
+ ok(true, 'Triggers send callback');
+ start();
+ return false;
+ }
+ }).fileupload('send', param);
+ });
+
+ asyncTest('done', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ done: function () {
+ ok(true, 'Triggers done callback');
+ start();
+ }
+ }).fileupload('send', param);
+ });
+
+ asyncTest('fail', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]},
+ fu = $('#fileupload').fileupload({
+ url: '404',
+ fail: function () {
+ ok(true, 'Triggers fail callback');
+ start();
+ }
+ });
+ (fu.data('blueimp-fileupload') || fu.data('fileupload'))
+ ._isXHRUpload = function () {
+ return true;
+ };
+ fu.fileupload('send', param);
+ });
+
+ asyncTest('always', function () {
+ expect(2);
+ var param = {files: [{name: 'test'}]},
+ counter = 0,
+ fu = $('#fileupload').fileupload({
+ always: function () {
+ ok(true, 'Triggers always callback');
+ if (counter === 1) {
+ start();
+ } else {
+ counter += 1;
+ }
+ }
+ });
+ (fu.data('blueimp-fileupload') || fu.data('fileupload'))
+ ._isXHRUpload = function () {
+ return true;
+ };
+ fu.fileupload('add', param).fileupload(
+ 'option',
+ 'url',
+ '404'
+ ).fileupload('add', param);
+ });
+
+ asyncTest('progress', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]},
+ counter = 0;
+ $('#fileupload').fileupload({
+ forceIframeTransport: true,
+ progress: function () {
+ ok(true, 'Triggers progress callback');
+ if (counter === 0) {
+ start();
+ } else {
+ counter += 1;
+ }
+ }
+ }).fileupload('send', param);
+ });
+
+ asyncTest('progressall', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]},
+ counter = 0;
+ $('#fileupload').fileupload({
+ forceIframeTransport: true,
+ progressall: function () {
+ ok(true, 'Triggers progressall callback');
+ if (counter === 0) {
+ start();
+ } else {
+ counter += 1;
+ }
+ }
+ }).fileupload('send', param);
+ });
+
+ asyncTest('start', function () {
+ expect(1);
+ var param = {files: [{name: '1'}, {name: '2'}]},
+ active = 0;
+ $('#fileupload').fileupload({
+ send: function () {
+ active += 1;
+ },
+ start: function () {
+ ok(!active, 'Triggers start callback before uploads');
+ start();
+ }
+ }).fileupload('send', param);
+ });
+
+ asyncTest('stop', function () {
+ expect(1);
+ var param = {files: [{name: '1'}, {name: '2'}]},
+ active = 0;
+ $('#fileupload').fileupload({
+ send: function () {
+ active += 1;
+ },
+ always: function () {
+ active -= 1;
+ },
+ stop: function () {
+ ok(!active, 'Triggers stop callback after uploads');
+ start();
+ }
+ }).fileupload('send', param);
+ });
+
+ test('change', function () {
+ var fu = $('#fileupload').fileupload(),
+ fuo = fu.data('blueimp-fileupload') || fu.data('fileupload'),
+ fileInput = fu.fileupload('option', 'fileInput');
+ expect(2);
+ fu.fileupload({
+ change: function (e, data) {
+ ok(true, 'Triggers change callback');
+ strictEqual(
+ data.files.length,
+ 0,
+ 'Returns empty files list'
+ );
+ },
+ add: $.noop
+ });
+ fuo._onChange({
+ data: {fileupload: fuo},
+ target: fileInput[0]
+ });
+ });
+
+ test('paste', function () {
+ var fu = $('#fileupload').fileupload(),
+ fuo = fu.data('blueimp-fileupload') || fu.data('fileupload');
+ expect(1);
+ fu.fileupload({
+ paste: function () {
+ ok(true, 'Triggers paste callback');
+ },
+ add: $.noop
+ });
+ fuo._onPaste({
+ data: {fileupload: fuo},
+ originalEvent: {
+ dataTransfer: {files: [{}]},
+ clipboardData: {items: [{}]}
+ },
+ preventDefault: $.noop
+ });
+ });
+
+ test('drop', function () {
+ var fu = $('#fileupload').fileupload(),
+ fuo = fu.data('blueimp-fileupload') || fu.data('fileupload');
+ expect(1);
+ fu.fileupload({
+ drop: function () {
+ ok(true, 'Triggers drop callback');
+ },
+ add: $.noop
+ });
+ fuo._onDrop({
+ data: {fileupload: fuo},
+ originalEvent: {
+ dataTransfer: {files: [{}]},
+ clipboardData: {items: [{}]}
+ },
+ preventDefault: $.noop
+ });
+ });
+
+ test('dragover', function () {
+ var fu = $('#fileupload').fileupload(),
+ fuo = fu.data('blueimp-fileupload') || fu.data('fileupload');
+ expect(1);
+ fu.fileupload({
+ dragover: function () {
+ ok(true, 'Triggers dragover callback');
+ },
+ add: $.noop
+ });
+ fuo._onDragOver({
+ data: {fileupload: fuo},
+ originalEvent: {dataTransfer: {types: ['Files']}},
+ preventDefault: $.noop
+ });
+ });
+
+ module('Options', lifecycle);
+
+ test('paramName', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ paramName: null,
+ send: function (e, data) {
+ strictEqual(
+ data.paramName[0],
+ data.fileInput.prop('name'),
+ 'Takes paramName from file input field if not set'
+ );
+ return false;
+ }
+ }).fileupload('send', param);
+ });
+
+ test('url', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ url: null,
+ send: function (e, data) {
+ strictEqual(
+ data.url,
+ $(data.fileInput.prop('form')).prop('action'),
+ 'Takes url from form action if not set'
+ );
+ return false;
+ }
+ }).fileupload('send', param);
+ });
+
+ test('type', function () {
+ expect(2);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ type: null,
+ send: function (e, data) {
+ strictEqual(
+ data.type,
+ 'POST',
+ 'Request type is "POST" if not set to "PUT"'
+ );
+ return false;
+ }
+ }).fileupload('send', param);
+ $('#fileupload').fileupload({
+ type: 'PUT',
+ send: function (e, data) {
+ strictEqual(
+ data.type,
+ 'PUT',
+ 'Request type is "PUT" if set to "PUT"'
+ );
+ return false;
+ }
+ }).fileupload('send', param);
+ });
+
+ test('replaceFileInput', function () {
+ var fu = $('#fileupload').fileupload(),
+ fuo = fu.data('blueimp-fileupload') || fu.data('fileupload'),
+ fileInput = fu.fileupload('option', 'fileInput'),
+ fileInputElement = fileInput[0];
+ expect(2);
+ fu.fileupload({
+ replaceFileInput: false,
+ change: function () {
+ strictEqual(
+ fu.fileupload('option', 'fileInput')[0],
+ fileInputElement,
+ 'Keeps file input with replaceFileInput: false'
+ );
+ },
+ add: $.noop
+ });
+ fuo._onChange({
+ data: {fileupload: fuo},
+ target: fileInput[0]
+ });
+ fu.fileupload({
+ replaceFileInput: true,
+ change: function () {
+ notStrictEqual(
+ fu.fileupload('option', 'fileInput')[0],
+ fileInputElement,
+ 'Replaces file input with replaceFileInput: true'
+ );
+ },
+ add: $.noop
+ });
+ fuo._onChange({
+ data: {fileupload: fuo},
+ target: fileInput[0]
+ });
+ });
+
+ asyncTest('forceIframeTransport', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ forceIframeTransport: true,
+ done: function (e, data) {
+ strictEqual(
+ data.dataType.substr(0, 6),
+ 'iframe',
+ 'Iframe Transport is used'
+ );
+ start();
+ }
+ }).fileupload('send', param);
+ });
+
+ test('singleFileUploads', function () {
+ expect(3);
+ var fu = $('#fileupload').fileupload(),
+ param = {files: [{name: '1'}, {name: '2'}]},
+ index = 1;
+ (fu.data('blueimp-fileupload') || fu.data('fileupload'))
+ ._isXHRUpload = function () {
+ return true;
+ };
+ $('#fileupload').fileupload({
+ singleFileUploads: true,
+ add: function () {
+ ok(true, 'Triggers callback number ' + index.toString());
+ index += 1;
+ }
+ }).fileupload('add', param).fileupload(
+ 'option',
+ 'singleFileUploads',
+ false
+ ).fileupload('add', param);
+ });
+
+ test('limitMultiFileUploads', function () {
+ expect(3);
+ var fu = $('#fileupload').fileupload(),
+ param = {files: [
+ {name: '1'},
+ {name: '2'},
+ {name: '3'},
+ {name: '4'},
+ {name: '5'}
+ ]},
+ index = 1;
+ (fu.data('blueimp-fileupload') || fu.data('fileupload'))
+ ._isXHRUpload = function () {
+ return true;
+ };
+ $('#fileupload').fileupload({
+ singleFileUploads: false,
+ limitMultiFileUploads: 2,
+ add: function () {
+ ok(true, 'Triggers callback number ' + index.toString());
+ index += 1;
+ }
+ }).fileupload('add', param);
+ });
+
+ test('limitMultiFileUploadSize', function () {
+ expect(7);
+ var fu = $('#fileupload').fileupload(),
+ param = {files: [
+ {name: '1-1', size: 100000},
+ {name: '1-2', size: 40000},
+ {name: '2-1', size: 100000},
+ {name: '3-1', size: 50000},
+ {name: '3-2', size: 40000},
+ {name: '4-1', size: 45000} // New request due to limitMultiFileUploads
+ ]},
+ param2 = {files: [
+ {name: '5-1'},
+ {name: '5-2'},
+ {name: '6-1'},
+ {name: '6-2'},
+ {name: '7-1'}
+ ]},
+ index = 1;
+ (fu.data('blueimp-fileupload') || fu.data('fileupload'))
+ ._isXHRUpload = function () {
+ return true;
+ };
+ $('#fileupload').fileupload({
+ singleFileUploads: false,
+ limitMultiFileUploads: 2,
+ limitMultiFileUploadSize: 150000,
+ limitMultiFileUploadSizeOverhead: 5000,
+ add: function () {
+ ok(true, 'Triggers callback number ' + index.toString());
+ index += 1;
+ }
+ }).fileupload('add', param).fileupload('add', param2);
+ });
+
+ asyncTest('sequentialUploads', function () {
+ expect(6);
+ var param = {files: [
+ {name: '1'},
+ {name: '2'},
+ {name: '3'},
+ {name: '4'},
+ {name: '5'},
+ {name: '6'}
+ ]},
+ addIndex = 0,
+ sendIndex = 0,
+ loadIndex = 0,
+ fu = $('#fileupload').fileupload({
+ sequentialUploads: true,
+ add: function (e, data) {
+ addIndex += 1;
+ if (addIndex === 4) {
+ data.submit().abort();
+ } else {
+ data.submit();
+ }
+ },
+ send: function () {
+ sendIndex += 1;
+ },
+ done: function () {
+ loadIndex += 1;
+ strictEqual(sendIndex, loadIndex, 'upload in order');
+ },
+ fail: function (e, data) {
+ strictEqual(data.errorThrown, 'abort', 'upload aborted');
+ },
+ stop: function () {
+ start();
+ }
+ });
+ (fu.data('blueimp-fileupload') || fu.data('fileupload'))
+ ._isXHRUpload = function () {
+ return true;
+ };
+ fu.fileupload('add', param);
+ });
+
+ asyncTest('limitConcurrentUploads', function () {
+ expect(12);
+ var param = {files: [
+ {name: '1'},
+ {name: '2'},
+ {name: '3'},
+ {name: '4'},
+ {name: '5'},
+ {name: '6'},
+ {name: '7'},
+ {name: '8'},
+ {name: '9'},
+ {name: '10'},
+ {name: '11'},
+ {name: '12'}
+ ]},
+ addIndex = 0,
+ sendIndex = 0,
+ loadIndex = 0,
+ fu = $('#fileupload').fileupload({
+ limitConcurrentUploads: 3,
+ add: function (e, data) {
+ addIndex += 1;
+ if (addIndex === 4) {
+ data.submit().abort();
+ } else {
+ data.submit();
+ }
+ },
+ send: function () {
+ sendIndex += 1;
+ },
+ done: function () {
+ loadIndex += 1;
+ ok(sendIndex - loadIndex < 3);
+ },
+ fail: function (e, data) {
+ strictEqual(data.errorThrown, 'abort', 'upload aborted');
+ },
+ stop: function () {
+ start();
+ }
+ });
+ (fu.data('blueimp-fileupload') || fu.data('fileupload'))
+ ._isXHRUpload = function () {
+ return true;
+ };
+ fu.fileupload('add', param);
+ });
+
+ if ($.support.xhrFileUpload) {
+ asyncTest('multipart', function () {
+ expect(2);
+ var param = {files: [{
+ name: 'test.png',
+ size: 123,
+ type: 'image/png'
+ }]},
+ fu = $('#fileupload').fileupload({
+ multipart: false,
+ always: function (e, data) {
+ strictEqual(
+ data.contentType,
+ param.files[0].type,
+ 'non-multipart upload sets file type as contentType'
+ );
+ strictEqual(
+ data.headers['Content-Disposition'],
+ 'attachment; filename="' + param.files[0].name + '"',
+ 'non-multipart upload sets Content-Disposition header'
+ );
+ start();
+ }
+ });
+ fu.fileupload('send', param);
+ });
+ }
+
+ module('UI Initialization', lifecycleUI);
+
+ test('Widget initialization', function () {
+ var fu = $('#fileupload').fileupload();
+ ok(fu.data('blueimp-fileupload') || fu.data('fileupload'));
+ ok(
+ $('#fileupload').fileupload('option', 'uploadTemplate').length,
+ 'Initialized upload template'
+ );
+ ok(
+ $('#fileupload').fileupload('option', 'downloadTemplate').length,
+ 'Initialized download template'
+ );
+ });
+
+ test('Buttonbar event listeners', function () {
+ var buttonbar = $('#fileupload .fileupload-buttonbar'),
+ files = [{name: 'test'}];
+ expect(4);
+ $('#fileupload').fileupload({
+ send: function () {
+ ok(true, 'Started file upload via global start button');
+ },
+ fail: function (e, data) {
+ ok(true, 'Canceled file upload via global cancel button');
+ data.context.remove();
+ },
+ destroy: function () {
+ ok(true, 'Delete action called via global delete button');
+ }
+ });
+ $('#fileupload').fileupload('add', {files: files});
+ buttonbar.find('.cancel').click();
+ $('#fileupload').fileupload('add', {files: files});
+ buttonbar.find('.start').click();
+ buttonbar.find('.cancel').click();
+ files[0].deleteUrl = 'http://example.org/banana.jpg';
+ ($('#fileupload').data('blueimp-fileupload') ||
+ $('#fileupload').data('fileupload'))
+ ._renderDownload(files)
+ .appendTo($('#fileupload .files')).show()
+ .find('.toggle').click();
+ buttonbar.find('.delete').click();
+ });
+
+ module('UI API', lifecycleUI);
+
+ test('destroy', function () {
+ var buttonbar = $('#fileupload .fileupload-buttonbar'),
+ files = [{name: 'test'}];
+ expect(1);
+ $('#fileupload').fileupload({
+ send: function () {
+ ok(true, 'This test should not run');
+ return false;
+ }
+ })
+ .fileupload('add', {files: files})
+ .fileupload('destroy');
+ buttonbar.find('.start').click(function () {
+ ok(true, 'Clicked global start button');
+ return false;
+ }).click();
+ });
+
+ test('disable/enable', function () {
+ var buttonbar = $('#fileupload .fileupload-buttonbar');
+ $('#fileupload').fileupload();
+ $('#fileupload').fileupload('disable');
+ strictEqual(
+ buttonbar.find('input[type=file], button').not(':disabled').length,
+ 0,
+ 'Disables the buttonbar buttons'
+ );
+ $('#fileupload').fileupload('enable');
+ strictEqual(
+ buttonbar.find('input[type=file], button').not(':disabled').length,
+ 4,
+ 'Enables the buttonbar buttons'
+ );
+ });
+
+ module('UI Callbacks', lifecycleUI);
+
+ test('destroy', function () {
+ expect(3);
+ $('#fileupload').fileupload({
+ destroy: function (e, data) {
+ ok(true, 'Triggers destroy callback');
+ strictEqual(
+ data.url,
+ 'test',
+ 'Passes over deletion url parameter'
+ );
+ strictEqual(
+ data.type,
+ 'DELETE',
+ 'Passes over deletion request type parameter'
+ );
+ }
+ });
+ ($('#fileupload').data('blueimp-fileupload') ||
+ $('#fileupload').data('fileupload'))
+ ._renderDownload([{
+ name: 'test',
+ deleteUrl: 'test',
+ deleteType: 'DELETE'
+ }])
+ .appendTo($('#fileupload .files'))
+ .show()
+ .find('.toggle').click();
+ $('#fileupload .fileupload-buttonbar .delete').click();
+ });
+
+ asyncTest('added', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ added: function (e, data) {
+ start();
+ strictEqual(
+ data.files[0].name,
+ param.files[0].name,
+ 'Triggers added callback'
+ );
+ },
+ send: function () {
+ return false;
+ }
+ }).fileupload('add', param);
+ });
+
+ asyncTest('started', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ started: function () {
+ start();
+ ok('Triggers started callback');
+ return false;
+ },
+ sent: function () {
+ return false;
+ }
+ }).fileupload('send', param);
+ });
+
+ asyncTest('sent', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ sent: function (e, data) {
+ start();
+ strictEqual(
+ data.files[0].name,
+ param.files[0].name,
+ 'Triggers sent callback'
+ );
+ return false;
+ }
+ }).fileupload('send', param);
+ });
+
+ asyncTest('completed', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ completed: function () {
+ start();
+ ok('Triggers completed callback');
+ return false;
+ }
+ }).fileupload('send', param);
+ });
+
+ asyncTest('failed', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ failed: function () {
+ start();
+ ok('Triggers failed callback');
+ return false;
+ }
+ }).fileupload('send', param).abort();
+ });
+
+ asyncTest('stopped', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ stopped: function () {
+ start();
+ ok('Triggers stopped callback');
+ return false;
+ }
+ }).fileupload('send', param);
+ });
+
+ asyncTest('destroyed', function () {
+ expect(1);
+ $('#fileupload').fileupload({
+ dataType: 'html',
+ destroyed: function () {
+ start();
+ ok(true, 'Triggers destroyed callback');
+ }
+ });
+ ($('#fileupload').data('blueimp-fileupload') ||
+ $('#fileupload').data('fileupload'))
+ ._renderDownload([{
+ name: 'test',
+ deleteUrl: '.',
+ deleteType: 'GET'
+ }])
+ .appendTo($('#fileupload .files'))
+ .show()
+ .find('.toggle').click();
+ $('#fileupload .fileupload-buttonbar .delete').click();
+ });
+
+ module('UI Options', lifecycleUI);
+
+ test('autoUpload', function () {
+ expect(1);
+ $('#fileupload')
+ .fileupload({
+ autoUpload: true,
+ send: function () {
+ ok(true, 'Started file upload automatically');
+ return false;
+ }
+ })
+ .fileupload('add', {files: [{name: 'test'}]})
+ .fileupload('option', 'autoUpload', false)
+ .fileupload('add', {files: [{name: 'test'}]});
+ });
+
+ test('maxNumberOfFiles', function () {
+ expect(3);
+ var addIndex = 0,
+ sendIndex = 0;
+ $('#fileupload')
+ .fileupload({
+ autoUpload: true,
+ maxNumberOfFiles: 3,
+ singleFileUploads: false,
+ send: function () {
+ strictEqual(
+ sendIndex += 1,
+ addIndex
+ );
+ },
+ progress: $.noop,
+ progressall: $.noop,
+ done: $.noop,
+ stop: $.noop
+ })
+ .fileupload('add', {files: [{name: (addIndex += 1)}]})
+ .fileupload('add', {files: [{name: (addIndex += 1)}]})
+ .fileupload('add', {files: [{name: (addIndex += 1)}]})
+ .fileupload('add', {files: [{name: 'test'}]});
+ });
+
+ test('maxFileSize', function () {
+ expect(2);
+ var addIndex = 0,
+ sendIndex = 0;
+ $('#fileupload')
+ .fileupload({
+ autoUpload: true,
+ maxFileSize: 1000,
+ send: function () {
+ strictEqual(
+ sendIndex += 1,
+ addIndex
+ );
+ return false;
+ }
+ })
+ .fileupload('add', {files: [{
+ name: (addIndex += 1)
+ }]})
+ .fileupload('add', {files: [{
+ name: (addIndex += 1),
+ size: 999
+ }]})
+ .fileupload('add', {files: [{
+ name: 'test',
+ size: 1001
+ }]})
+ .fileupload({
+ send: function (e, data) {
+ ok(
+ !$.blueimp.fileupload.prototype.options
+ .send.call(this, e, data)
+ );
+ return false;
+ }
+ });
+ });
+
+ test('minFileSize', function () {
+ expect(2);
+ var addIndex = 0,
+ sendIndex = 0;
+ $('#fileupload')
+ .fileupload({
+ autoUpload: true,
+ minFileSize: 1000,
+ send: function () {
+ strictEqual(
+ sendIndex += 1,
+ addIndex
+ );
+ return false;
+ }
+ })
+ .fileupload('add', {files: [{
+ name: (addIndex += 1)
+ }]})
+ .fileupload('add', {files: [{
+ name: (addIndex += 1),
+ size: 1001
+ }]})
+ .fileupload('add', {files: [{
+ name: 'test',
+ size: 999
+ }]})
+ .fileupload({
+ send: function (e, data) {
+ ok(
+ !$.blueimp.fileupload.prototype.options
+ .send.call(this, e, data)
+ );
+ return false;
+ }
+ });
+ });
+
+ test('acceptFileTypes', function () {
+ expect(2);
+ var addIndex = 0,
+ sendIndex = 0;
+ $('#fileupload')
+ .fileupload({
+ autoUpload: true,
+ acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
+ disableImageMetaDataLoad: true,
+ send: function () {
+ strictEqual(
+ sendIndex += 1,
+ addIndex
+ );
+ return false;
+ }
+ })
+ .fileupload('add', {files: [{
+ name: (addIndex += 1) + '.jpg'
+ }]})
+ .fileupload('add', {files: [{
+ name: (addIndex += 1),
+ type: 'image/jpeg'
+ }]})
+ .fileupload('add', {files: [{
+ name: 'test.txt',
+ type: 'text/plain'
+ }]})
+ .fileupload({
+ send: function (e, data) {
+ ok(
+ !$.blueimp.fileupload.prototype.options
+ .send.call(this, e, data)
+ );
+ return false;
+ }
+ });
+ });
+
+ test('acceptFileTypes as HTML5 data attribute', function () {
+ expect(2);
+ var regExp = /(\.|\/)(gif|jpe?g|png)$/i;
+ $('#fileupload')
+ .attr('data-accept-file-types', regExp.toString())
+ .fileupload();
+ strictEqual(
+ $.type($('#fileupload').fileupload('option', 'acceptFileTypes')),
+ $.type(regExp)
+ );
+ strictEqual(
+ $('#fileupload').fileupload('option', 'acceptFileTypes').toString(),
+ regExp.toString()
+ );
+ });
+
+});
diff --git a/library/bootstrap-datetimepicker/css/bootstrap-datetimepicker.css b/library/bootstrap-datetimepicker/css/bootstrap-datetimepicker.css
deleted file mode 100755
index e5eb7a65c..000000000
--- a/library/bootstrap-datetimepicker/css/bootstrap-datetimepicker.css
+++ /dev/null
@@ -1,174 +0,0 @@
-/**
- * Build file for the dist version of datetimepicker.css
- */
-/*!
- * Datetimepicker for Bootstrap v3
- * https://github.com/Eonasdan/bootstrap-datetimepicker/
- * Copyright 2012 Stefan Petre
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
-.bootstrap-datetimepicker-widget {
- top: 0;
- left: 0;
- width: 250px;
- padding: 4px;
- margin-top: 1px;
- z-index: 9999;
- border-radius: 4px;
- /*.dow {
- border-top: 1px solid #ddd !important;
- }*/
-}
-.bootstrap-datetimepicker-widget .btn {
- padding: 6px;
-}
-.bootstrap-datetimepicker-widget:before {
- content: '';
- display: inline-block;
- border-left: 7px solid transparent;
- border-right: 7px solid transparent;
- border-bottom: 7px solid #ccc;
- border-bottom-color: rgba(0, 0, 0, 0.2);
- position: absolute;
- top: -7px;
- left: 6px;
-}
-.bootstrap-datetimepicker-widget:after {
- content: '';
- display: inline-block;
- border-left: 6px solid transparent;
- border-right: 6px solid transparent;
- border-bottom: 6px solid white;
- position: absolute;
- top: -6px;
- left: 7px;
-}
-.bootstrap-datetimepicker-widget.pull-right:before {
- left: auto;
- right: 6px;
-}
-.bootstrap-datetimepicker-widget.pull-right:after {
- left: auto;
- right: 7px;
-}
-.bootstrap-datetimepicker-widget > ul {
- list-style-type: none;
- margin: 0;
-}
-.bootstrap-datetimepicker-widget .timepicker-hour,
-.bootstrap-datetimepicker-widget .timepicker-minute,
-.bootstrap-datetimepicker-widget .timepicker-second {
- width: 100%;
- font-weight: bold;
- font-size: 1.2em;
-}
-.bootstrap-datetimepicker-widget table[data-hour-format="12"] .separator {
- width: 4px;
- padding: 0;
- margin: 0;
-}
-.bootstrap-datetimepicker-widget .datepicker > div {
- display: none;
-}
-.bootstrap-datetimepicker-widget .picker-switch {
- text-align: center;
-}
-.bootstrap-datetimepicker-widget table {
- width: 100%;
- margin: 0;
-}
-.bootstrap-datetimepicker-widget td,
-.bootstrap-datetimepicker-widget th {
- text-align: center;
- width: 20px;
- height: 20px;
- border-radius: 4px;
-}
-.bootstrap-datetimepicker-widget td.day:hover,
-.bootstrap-datetimepicker-widget td.hour:hover,
-.bootstrap-datetimepicker-widget td.minute:hover,
-.bootstrap-datetimepicker-widget td.second:hover {
- background: #eeeeee;
- cursor: pointer;
-}
-.bootstrap-datetimepicker-widget td.old,
-.bootstrap-datetimepicker-widget td.new {
- color: #999999;
-}
-.bootstrap-datetimepicker-widget td.active,
-.bootstrap-datetimepicker-widget td.active:hover {
- background-color: #428bca;
- color: #fff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-}
-.bootstrap-datetimepicker-widget td.disabled,
-.bootstrap-datetimepicker-widget td.disabled:hover {
- background: none;
- color: #999999;
- cursor: not-allowed;
-}
-.bootstrap-datetimepicker-widget td span {
- display: block;
- width: 47px;
- height: 54px;
- line-height: 54px;
- float: left;
- margin: 2px;
- cursor: pointer;
- border-radius: 4px;
-}
-.bootstrap-datetimepicker-widget td span:hover {
- background: #eeeeee;
-}
-.bootstrap-datetimepicker-widget td span.active {
- background-color: #428bca;
- color: #fff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-}
-.bootstrap-datetimepicker-widget td span.old {
- color: #999999;
-}
-.bootstrap-datetimepicker-widget td span.disabled,
-.bootstrap-datetimepicker-widget td span.disabled:hover {
- background: none;
- color: #999999;
- cursor: not-allowed;
-}
-.bootstrap-datetimepicker-widget th.switch {
- width: 145px;
-}
-.bootstrap-datetimepicker-widget th.next,
-.bootstrap-datetimepicker-widget th.prev {
- font-size: 21px;
-}
-.bootstrap-datetimepicker-widget th.disabled,
-.bootstrap-datetimepicker-widget th.disabled:hover {
- background: none;
- color: #999999;
- cursor: not-allowed;
-}
-.bootstrap-datetimepicker-widget thead tr:first-child th {
- cursor: pointer;
-}
-.bootstrap-datetimepicker-widget thead tr:first-child th:hover {
- background: #eeeeee;
-}
-.input-group.date .input-group-addon span {
- display: block;
- cursor: pointer;
- width: 16px;
- height: 16px;
-}
-.bootstrap-datetimepicker-widget.left-oriented:before {
- left: auto;
- right: 6px;
-}
-.bootstrap-datetimepicker-widget.left-oriented:after {
- left: auto;
- right: 7px;
-}
-.bootstrap-datetimepicker-widget ul.list-unstyled li.in div.timepicker div.timepicker-picker table.table-condensed tbody > tr > td {
- padding: 0px !important;
-}
diff --git a/library/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css b/library/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css
deleted file mode 100755
index 00b768767..000000000
--- a/library/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/*!
- * Datetimepicker for Bootstrap v3
- * https://github.com/Eonasdan/bootstrap-datetimepicker/
- * Copyright 2012 Stefan Petre
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */.bootstrap-datetimepicker-widget{top:0;left:0;width:250px;padding:4px;margin-top:1px;z-index:9999;border-radius:4px}.bootstrap-datetimepicker-widget .btn{padding:6px}.bootstrap-datetimepicker-widget:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,0.2);position:absolute;top:-7px;left:6px}.bootstrap-datetimepicker-widget:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:7px}.bootstrap-datetimepicker-widget.pull-right:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.pull-right:after{left:auto;right:7px}.bootstrap-datetimepicker-widget>ul{list-style-type:none;margin:0}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:100%;font-weight:bold;font-size:1.2em}.bootstrap-datetimepicker-widget table[data-hour-format="12"] .separator{width:4px;padding:0;margin:0}.bootstrap-datetimepicker-widget .datepicker>div{display:none}.bootstrap-datetimepicker-widget .picker-switch{text-align:center}.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget td,.bootstrap-datetimepicker-widget th{text-align:center;width:20px;height:20px;border-radius:4px}.bootstrap-datetimepicker-widget td.day:hover,.bootstrap-datetimepicker-widget td.hour:hover,.bootstrap-datetimepicker-widget td.minute:hover,.bootstrap-datetimepicker-widget td.second:hover{background:#eee;cursor:pointer}.bootstrap-datetimepicker-widget td.old,.bootstrap-datetimepicker-widget td.new{color:#999}.bootstrap-datetimepicker-widget td.active,.bootstrap-datetimepicker-widget td.active:hover{background-color:#428bca;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.bootstrap-datetimepicker-widget td.disabled,.bootstrap-datetimepicker-widget td.disabled:hover{background:none;color:#999;cursor:not-allowed}.bootstrap-datetimepicker-widget td span{display:block;width:47px;height:54px;line-height:54px;float:left;margin:2px;cursor:pointer;border-radius:4px}.bootstrap-datetimepicker-widget td span:hover{background:#eee}.bootstrap-datetimepicker-widget td span.active{background-color:#428bca;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.bootstrap-datetimepicker-widget td span.old{color:#999}.bootstrap-datetimepicker-widget td span.disabled,.bootstrap-datetimepicker-widget td span.disabled:hover{background:none;color:#999;cursor:not-allowed}.bootstrap-datetimepicker-widget th.switch{width:145px}.bootstrap-datetimepicker-widget th.next,.bootstrap-datetimepicker-widget th.prev{font-size:21px}.bootstrap-datetimepicker-widget th.disabled,.bootstrap-datetimepicker-widget th.disabled:hover{background:none;color:#999;cursor:not-allowed}.bootstrap-datetimepicker-widget thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget thead tr:first-child th:hover{background:#eee}.input-group.date .input-group-addon span{display:block;cursor:pointer;width:16px;height:16px}.bootstrap-datetimepicker-widget.left-oriented:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.left-oriented:after{left:auto;right:7px}.bootstrap-datetimepicker-widget ul.list-unstyled li.in div.timepicker div.timepicker-picker table.table-condensed tbody>tr>td{padding:0 !important} \ No newline at end of file
diff --git a/library/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js b/library/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js
deleted file mode 100755
index 3bc74fcbb..000000000
--- a/library/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * version 2.1.11
- * @license
- * =========================================================
- * bootstrap-datetimepicker.js
- * http://www.eyecon.ro/bootstrap-datepicker
- * =========================================================
- * Copyright 2012 Stefan Petre
- *
- * Contributions:
- * - updated for Bootstrap v3 by Jonathan Peterson (@Eonasdan) and (almost)
- * completely rewritten to use Momentjs
- * - based on tarruda's bootstrap-datepicker
- *
- * 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.
- * =========================================================
- */
-(function($){if(typeof moment==="undefined"){alert("momentjs is requried");throw new Error("momentjs is requried")}var dpgId=0,pMoment=moment,DateTimePicker=function(element,options){var defaults={pickDate:true,pickTime:true,startDate:new pMoment({y:1970}),endDate:(new pMoment).add(50,"y"),collapse:true,language:"en",defaultDate:"",disabledDates:[],icons:{},useStrict:false},icons={time:"glyphicon glyphicon-time",date:"glyphicon glyphicon-calendar",up:"glyphicon glyphicon-chevron-up",down:"glyphicon glyphicon-chevron-down"},picker=this,init=function(){var icon=false,i,dDate,longDateFormat;picker.options=$.extend({},defaults,options);picker.options.icons=$.extend({},icons,picker.options.icons);if(!(picker.options.pickTime||picker.options.pickDate))throw new Error("Must choose at least one picker");picker.id=dpgId++;pMoment.lang(picker.options.language);picker.date=pMoment();picker.element=$(element);picker.unset=false;picker.isInput=picker.element.is("input");picker.component=false;if(picker.element.hasClass("input-group")){if(picker.element.find(".datepickerbutton").size()==0){picker.component=picker.element.find(".input-group-addon")}else{picker.component=picker.element.find(".datepickerbutton")}}picker.format=picker.options.format;longDateFormat=pMoment()._lang._longDateFormat;if(!picker.format){if(picker.isInput)picker.format=picker.element.data("format");else picker.format=picker.element.find("input").data("format");if(!picker.format){picker.format=picker.options.pickDate?longDateFormat.L:"";if(picker.options.pickDate&&picker.options.pickTime)picker.format+=" ";picker.format+=picker.options.pickTime?longDateFormat.LT:""}}picker.use24hours=picker.format.toLowerCase().indexOf("a")<1;if(picker.component)icon=picker.component.find("span");if(picker.options.pickTime){if(icon)icon.addClass(picker.options.icons.time)}if(picker.options.pickDate){if(icon){icon.removeClass(picker.options.icons.time);icon.addClass(picker.options.icons.date)}}picker.widget=$(getTemplate(picker.options.pickDate,picker.options.pickTime,picker.options.collapse)).appendTo("body");picker.minViewMode=picker.options.minViewMode||picker.element.data("date-minviewmode")||0;if(typeof picker.minViewMode==="string"){switch(picker.minViewMode){case"months":picker.minViewMode=1;break;case"years":picker.minViewMode=2;break;default:picker.minViewMode=0;break}}picker.viewMode=picker.options.viewMode||picker.element.data("date-viewmode")||0;if(typeof picker.viewMode==="string"){switch(picker.viewMode){case"months":picker.viewMode=1;break;case"years":picker.viewMode=2;break;default:picker.viewMode=0;break}}for(i=0;i<picker.options.disabledDates.length;i++){dDate=picker.options.disabledDates[i];dDate=pMoment(dDate);if(!dDate.isValid())dDate=pMoment(picker.options.startDate).subtract(1,"day");picker.options.disabledDates[i]=dDate.format("L")}picker.startViewMode=picker.viewMode;picker.setStartDate(picker.options.startDate||picker.element.data("date-startdate"));picker.setEndDate(picker.options.endDate||picker.element.data("date-enddate"));fillDow();fillMonths();fillHours();fillMinutes();update();showMode();attachDatePickerEvents();if(picker.options.defaultDate!=="")picker.setValue(picker.options.defaultDate)},place=function(){var position="absolute",offset=picker.component?picker.component.offset():picker.element.offset(),$window=$(window);picker.width=picker.component?picker.component.outerWidth():picker.element.outerWidth();offset.top=offset.top+picker.element.outerHeight();if(picker.options.width!==undefined){picker.widget.width(picker.options.width)}if(picker.options.orientation==="left"){picker.widget.addClass("left-oriented");offset.left=offset.left-picker.widget.width()+20}if(isInFixed()){position="fixed";offset.top-=$window.scrollTop();offset.left-=$window.scrollLeft()}if($window.width()<offset.left+picker.widget.outerWidth()){offset.right=$window.width()-offset.left-picker.width;offset.left="auto";picker.widget.addClass("pull-right")}else{offset.right="auto";picker.widget.removeClass("pull-right")}picker.widget.css({position:position,top:offset.top,left:offset.left,right:offset.right})},notifyChange=function(oldDate){picker.element.trigger({type:"change.dp",date:picker.getDate(),oldDate:oldDate})},notifyError=function(date){picker.element.trigger({type:"error.dp",date:date})},update=function(newDate){pMoment.lang(picker.options.language);var dateStr=newDate;if(!dateStr){if(picker.isInput){dateStr=picker.element.val()}else{dateStr=picker.element.find("input").val()}if(dateStr)picker.date=pMoment(dateStr,picker.format,picker.options.useStrict);if(!picker.date)picker.date=pMoment()}picker.viewDate=pMoment(picker.date).startOf("month");fillDate();fillTime()},fillDow=function(){pMoment.lang(picker.options.language);var html=$("<tr>"),weekdaysMin=pMoment.weekdaysMin(),i;if(pMoment()._lang._week.dow==0){for(i=0;i<7;i++){html.append('<th class="dow">'+weekdaysMin[i]+"</th>")}}else{for(i=1;i<8;i++){if(i==7){html.append('<th class="dow">'+weekdaysMin[0]+"</th>")}else{html.append('<th class="dow">'+weekdaysMin[i]+"</th>")}}}picker.widget.find(".datepicker-days thead").append(html)},fillMonths=function(){pMoment.lang(picker.options.language);var html="",i=0,monthsShort=pMoment.monthsShort();while(i<12){html+='<span class="month">'+monthsShort[i++]+"</span>"}picker.widget.find(".datepicker-months td").append(html)},fillDate=function(){pMoment.lang(picker.options.language);var year=picker.viewDate.year(),month=picker.viewDate.month(),startYear=picker.options.startDate.year(),startMonth=picker.options.startDate.month(),endYear=picker.options.endDate.year(),endMonth=picker.options.endDate.month(),prevMonth,nextMonth,html=[],row,clsName,i,days,yearCont,currentYear,months=pMoment.months();picker.widget.find(".datepicker-days").find(".disabled").removeClass("disabled");picker.widget.find(".datepicker-months").find(".disabled").removeClass("disabled");picker.widget.find(".datepicker-years").find(".disabled").removeClass("disabled");picker.widget.find(".datepicker-days th:eq(1)").text(months[month]+" "+year);prevMonth=pMoment(picker.viewDate).subtract("months",1);days=prevMonth.daysInMonth();prevMonth.date(days).startOf("week");if(year==startYear&&month<=startMonth||year<startYear){picker.widget.find(".datepicker-days th:eq(0)").addClass("disabled")}if(year==endYear&&month>=endMonth||year>endYear){picker.widget.find(".datepicker-days th:eq(2)").addClass("disabled")}nextMonth=pMoment(prevMonth).add(42,"d");while(prevMonth.isBefore(nextMonth)){if(prevMonth.weekday()===pMoment().startOf("week").weekday()){row=$("<tr>");html.push(row)}clsName="";if(prevMonth.year()<year||prevMonth.year()==year&&prevMonth.month()<month){clsName+=" old"}else if(prevMonth.year()>year||prevMonth.year()==year&&prevMonth.month()>month){clsName+=" new"}if(prevMonth.isSame(pMoment({y:picker.date.year(),M:picker.date.month(),d:picker.date.date()}))){clsName+=" active"}if(pMoment(prevMonth).add(1,"d")<=picker.options.startDate||prevMonth>picker.options.endDate||isInDisableDates(prevMonth)){clsName+=" disabled"}row.append('<td class="day'+clsName+'">'+prevMonth.date()+"</td>");prevMonth.add(1,"d")}picker.widget.find(".datepicker-days tbody").empty().append(html);currentYear=pMoment().year(),months=picker.widget.find(".datepicker-months").find("th:eq(1)").text(year).end().find("span").removeClass("active");if(currentYear===year){months.eq(pMoment().month()).addClass("active")}if(currentYear-1<startYear){picker.widget.find(".datepicker-months th:eq(0)").addClass("disabled")}if(currentYear+1>endYear){picker.widget.find(".datepicker-months th:eq(2)").addClass("disabled")}for(i=0;i<12;i++){if(year==startYear&&startMonth>i||year<startYear){$(months[i]).addClass("disabled")}else if(year==endYear&&endMonth<i||year>endYear){$(months[i]).addClass("disabled")}}html="";year=parseInt(year/10,10)*10;yearCont=picker.widget.find(".datepicker-years").find("th:eq(1)").text(year+"-"+(year+9)).end().find("td");picker.widget.find(".datepicker-years").find("th").removeClass("disabled");if(startYear>year){picker.widget.find(".datepicker-years").find("th:eq(0)").addClass("disabled")}if(endYear<year+9){picker.widget.find(".datepicker-years").find("th:eq(2)").addClass("disabled")}year-=1;for(i=-1;i<11;i++){html+='<span class="year'+(i===-1||i===10?" old":"")+(currentYear===year?" active":"")+(year<startYear||year>endYear?" disabled":"")+'">'+year+"</span>";year+=1}yearCont.html(html)},fillHours=function(){pMoment.lang(picker.options.language);var table=picker.widget.find(".timepicker .timepicker-hours table"),html="",current,i,j;table.parent().hide();if(picker.use24hours){current=0;for(i=0;i<6;i+=1){html+="<tr>";for(j=0;j<4;j+=1){html+='<td class="hour">'+padLeft(current.toString())+"</td>";current++}html+="</tr>"}}else{current=1;for(i=0;i<3;i+=1){html+="<tr>";for(j=0;j<4;j+=1){html+='<td class="hour">'+padLeft(current.toString())+"</td>";current++}html+="</tr>"}}table.html(html)},fillMinutes=function(){var table=picker.widget.find(".timepicker .timepicker-minutes table"),html="",current=0,i,j;table.parent().hide();for(i=0;i<5;i++){html+="<tr>";for(j=0;j<4;j+=1){html+='<td class="minute">'+padLeft(current.toString())+"</td>";current+=3}html+="</tr>"}table.html(html)},fillTime=function(){if(!picker.date)return;var timeComponents=picker.widget.find(".timepicker span[data-time-component]"),hour=picker.date.hours(),period="AM";if(!picker.use24hours){if(hour>=12)period="PM";if(hour===0)hour=12;else if(hour!=12)hour=hour%12;picker.widget.find(".timepicker [data-action=togglePeriod]").text(period)}timeComponents.filter("[data-time-component=hours]").text(padLeft(hour));timeComponents.filter("[data-time-component=minutes]").text(padLeft(picker.date.minutes()))},click=function(e){e.stopPropagation();e.preventDefault();picker.unset=false;var target=$(e.target).closest("span, td, th"),month,year,step,day,oldDate=picker.date;if(target.length===1){if(!target.is(".disabled")){switch(target[0].nodeName.toLowerCase()){case"th":switch(target[0].className){case"switch":showMode(1);break;case"prev":case"next":step=dpGlobal.modes[picker.viewMode].navStep;if(target[0].className==="prev")step=step*-1;picker.viewDate.add(step,dpGlobal.modes[picker.viewMode].navFnc);fillDate();break}break;case"span":if(target.is(".month")){month=target.parent().find("span").index(target);picker.viewDate.month(month)}else{year=parseInt(target.text(),10)||0;picker.viewDate.year(year)}if(picker.viewMode!==0){picker.date=pMoment({y:picker.viewDate.year(),M:picker.viewDate.month(),d:picker.viewDate.date(),h:picker.date.hours(),m:picker.date.minutes()});notifyChange(oldDate)}showMode(-1);fillDate();break;case"td":if(target.is(".day")){day=parseInt(target.text(),10)||1;month=picker.viewDate.month();year=picker.viewDate.year();if(target.is(".old")){if(month===0){month=11;year-=1}else{month-=1}}else if(target.is(".new")){if(month==11){month=0;year+=1}else{month+=1}}picker.date=pMoment({y:year,M:month,d:day,h:picker.date.hours(),m:picker.date.minutes()});picker.viewDate=pMoment({y:year,M:month,d:Math.min(28,day)});fillDate();set();notifyChange(oldDate)}break}}}},actions={incrementHours:function(){checkDate("add","hours")},incrementMinutes:function(){checkDate("add","minutes")},decrementHours:function(){checkDate("subtract","hours")},decrementMinutes:function(){checkDate("subtract","minutes")},togglePeriod:function(){var hour=picker.date.hours();if(hour>=12)hour-=12;else hour+=12;picker.date.hours(hour)},showPicker:function(){picker.widget.find(".timepicker > div:not(.timepicker-picker)").hide();picker.widget.find(".timepicker .timepicker-picker").show()},showHours:function(){picker.widget.find(".timepicker .timepicker-picker").hide();picker.widget.find(".timepicker .timepicker-hours").show()},showMinutes:function(){picker.widget.find(".timepicker .timepicker-picker").hide();picker.widget.find(".timepicker .timepicker-minutes").show()},selectHour:function(e){picker.date.hours(parseInt($(e.target).text(),10));actions.showPicker.call(picker)},selectMinute:function(e){picker.date.minutes(parseInt($(e.target).text(),10));actions.showPicker.call(picker)}},doAction=function(e){var action=$(e.currentTarget).data("action"),rv=actions[action].apply(picker,arguments),oldDate=picker.date;stopEvent(e);if(!picker.date)picker.date=pMoment({y:1970});set();fillTime();notifyChange(oldDate);return rv},stopEvent=function(e){e.stopPropagation();e.preventDefault()},change=function(e){pMoment.lang(picker.options.language);var input=$(e.target),oldDate=picker.date,d=pMoment(input.val(),picker.format,picker.options.useStrict);if(d.isValid()){update();picker.setValue(d);notifyChange(oldDate);set()}else{picker.viewDate=oldDate;notifyChange(oldDate);notifyError(d);picker.unset=true;input.val("")}},showMode=function(dir){if(dir){picker.viewMode=Math.max(picker.minViewMode,Math.min(2,picker.viewMode+dir))}picker.widget.find(".datepicker > div").hide().filter(".datepicker-"+dpGlobal.modes[picker.viewMode].clsName).show()},attachDatePickerEvents=function(){var $this,$parent,expanded,closed,collapseData;picker.widget.on("click",".datepicker *",$.proxy(click,this));picker.widget.on("click","[data-action]",$.proxy(doAction,this));picker.widget.on("mousedown",$.proxy(stopEvent,this));if(picker.options.pickDate&&picker.options.pickTime){picker.widget.on("click.togglePicker",".accordion-toggle",function(e){e.stopPropagation();$this=$(this);$parent=$this.closest("ul");expanded=$parent.find(".in");closed=$parent.find(".collapse:not(.in)");if(expanded&&expanded.length){collapseData=expanded.data("collapse");if(collapseData&&collapseData.transitioning)return;expanded.collapse("hide");closed.collapse("show");$this.find("span").toggleClass(picker.options.icons.time+" "+picker.options.icons.date);picker.element.find(".input-group-addon span").toggleClass(picker.options.icons.time+" "+picker.options.icons.date)}})}if(picker.isInput){picker.element.on({focus:$.proxy(picker.show,this),change:$.proxy(change,this),blur:$.proxy(picker.hide,this)})}else{picker.element.on({change:$.proxy(change,this)},"input");if(picker.component){picker.component.on("click",$.proxy(picker.show,this))}else{picker.element.on("click",$.proxy(picker.show,this))}}},attachDatePickerGlobalEvents=function(){$(window).on("resize.datetimepicker"+picker.id,$.proxy(place,this));if(!picker.isInput){$(document).on("mousedown.datetimepicker"+picker.id,$.proxy(picker.hide,this))}},detachDatePickerEvents=function(){picker.widget.off("click",".datepicker *",picker.click);picker.widget.off("click","[data-action]");picker.widget.off("mousedown",picker.stopEvent);if(picker.options.pickDate&&picker.options.pickTime){picker.widget.off("click.togglePicker")}if(picker.isInput){picker.element.off({focus:picker.show,change:picker.change})}else{picker.element.off({change:picker.change},"input");if(picker.component){picker.component.off("click",picker.show)}else{picker.element.off("click",picker.show)}}},detachDatePickerGlobalEvents=function(){$(window).off("resize.datetimepicker"+picker.id);if(!picker.isInput){$(document).off("mousedown.datetimepicker"+picker.id)}},isInFixed=function(){if(picker.element){var parents=picker.element.parents(),inFixed=false,i;for(i=0;i<parents.length;i++){if($(parents[i]).css("position")=="fixed"){inFixed=true;break}}return inFixed}else{return false}},set=function(){pMoment.lang(picker.options.language);var formatted="",input;if(!picker.unset)formatted=pMoment(picker.date).format(picker.format);if(!picker.isInput){if(picker.component){input=picker.element.find("input");input.val(formatted)}picker.element.data("date",formatted)}else{picker.element.val(formatted)}if(!picker.options.pickTime)picker.hide()},checkDate=function(direction,unit){pMoment.lang(picker.options.language);var newDate;if(direction=="add"){newDate=pMoment(picker.date);if(newDate.hours()==23)newDate.add(1,unit);newDate.add(1,unit)}else{newDate=pMoment(picker.date).subtract(1,unit)}if(newDate.isAfter(picker.options.endDate)||newDate.subtract(1,unit).isBefore(picker.options.startDate)||isInDisableDates(newDate)){notifyError(newDate.format(picker.format));return}if(direction=="add"){picker.date.add(1,unit)}else{picker.date.subtract(1,unit)}},isInDisableDates=function(date){pMoment.lang(picker.options.language);var disabled=picker.options.disabledDates,i;for(i in disabled){if(disabled[i]==pMoment(date).format("L")){return true}}return false},padLeft=function(string){string=string.toString();if(string.length>=2)return string;else return"0"+string},getTemplate=function(pickDate,pickTime,collapse){if(pickDate&&pickTime){return'<div class="bootstrap-datetimepicker-widget dropdown-menu" style="z-index:9999 !important;">'+'<ul class="list-unstyled">'+"<li"+(collapse?' class="collapse in"':"")+">"+'<div class="datepicker">'+dpGlobal.template+"</div>"+"</li>"+'<li class="picker-switch accordion-toggle"><a class="btn" style="width:100%"><span class="'+picker.options.icons.time+'"></span></a></li>'+"<li"+(collapse?' class="collapse"':"")+">"+'<div class="timepicker">'+tpGlobal.getTemplate()+"</div>"+"</li>"+"</ul>"+"</div>"}else if(pickTime){return'<div class="bootstrap-datetimepicker-widget dropdown-menu">'+'<div class="timepicker">'+tpGlobal.getTemplate()+"</div>"+"</div>"}else{return'<div class="bootstrap-datetimepicker-widget dropdown-menu">'+'<div class="datepicker">'+dpGlobal.template+"</div>"+"</div>"}},dpGlobal={modes:[{clsName:"days",navFnc:"month",navStep:1},{clsName:"months",navFnc:"year",navStep:1},{clsName:"years",navFnc:"year",navStep:10}],headTemplate:"<thead>"+"<tr>"+'<th class="prev">&lsaquo;</th><th colspan="5" class="switch"></th><th class="next">&rsaquo;</th>'+"</tr>"+"</thead>",contTemplate:'<tbody><tr><td colspan="7"></td></tr></tbody>'},tpGlobal={hourTemplate:'<span data-action="showHours" data-time-component="hours" class="timepicker-hour"></span>',minuteTemplate:'<span data-action="showMinutes" data-time-component="minutes" class="timepicker-minute"></span>'};dpGlobal.template='<div class="datepicker-days">'+'<table class="table-condensed">'+dpGlobal.headTemplate+"<tbody></tbody></table>"+"</div>"+'<div class="datepicker-months">'+'<table class="table-condensed">'+dpGlobal.headTemplate+dpGlobal.contTemplate+"</table>"+"</div>"+'<div class="datepicker-years">'+'<table class="table-condensed">'+dpGlobal.headTemplate+dpGlobal.contTemplate+"</table>"+"</div>";tpGlobal.getTemplate=function(){return'<div class="timepicker-picker">'+'<table class="table-condensed">'+"<tr>"+'<td><a href="#" class="btn" data-action="incrementHours"><span class="'+picker.options.icons.up+'"></span></a></td>'+'<td class="separator"></td>'+'<td><a href="#" class="btn" data-action="incrementMinutes"><span class="'+picker.options.icons.up+'"></span></a></td>'+(!picker.use24hours?'<td class="separator"></td>':"")+"</tr>"+"<tr>"+"<td>"+tpGlobal.hourTemplate+"</td> "+'<td class="separator">:</td>'+"<td>"+tpGlobal.minuteTemplate+"</td> "+(!picker.use24hours?'<td class="separator"></td>'+'<td><button type="button" class="btn btn-primary" data-action="togglePeriod"></button></td>':"")+"</tr>"+"<tr>"+'<td><a href="#" class="btn" data-action="decrementHours"><span class="'+picker.options.icons.down+'"></span></a></td>'+'<td class="separator"></td>'+'<td><a href="#" class="btn" data-action="decrementMinutes"><span class="'+picker.options.icons.down+'"></span></a></td>'+(!picker.use24hours?'<td class="separator"></td>':"")+"</tr>"+"</table>"+"</div>"+'<div class="timepicker-hours" data-action="selectHour">'+'<table class="table-condensed"></table>'+"</div>"+'<div class="timepicker-minutes" data-action="selectMinute">'+'<table class="table-condensed"></table>'+"</div>"};picker.destroy=function(){detachDatePickerEvents();detachDatePickerGlobalEvents();picker.widget.remove();picker.element.removeData("DateTimePicker");if(picker.component)picker.component.removeData("DateTimePicker")};picker.show=function(e){picker.widget.show();picker.height=picker.component?picker.component.outerHeight():picker.element.outerHeight();place();picker.element.trigger({type:"show.dp",date:picker.date});attachDatePickerGlobalEvents();if(e){stopEvent(e)}},picker.disable=function(){picker.element.find("input").prop("disabled",true);detachDatePickerEvents()},picker.enable=function(){picker.element.find("input").prop("disabled",false);attachDatePickerEvents()},picker.hide=function(){var collapse=picker.widget.find(".collapse"),i,collapseData;for(i=0;i<collapse.length;i++){collapseData=collapse.eq(i).data("collapse");if(collapseData&&collapseData.transitioning)return}picker.widget.hide();picker.viewMode=picker.startViewMode;showMode();picker.element.trigger({type:"hide.dp",date:picker.date});detachDatePickerGlobalEvents()},picker.setValue=function(newDate){pMoment.lang(picker.options.language);if(!newDate){picker.unset=true}else{picker.unset=false}if(!pMoment.isMoment(newDate))newDate=pMoment(newDate);if(newDate.isValid()){picker.date=newDate;set();picker.viewDate=pMoment({y:picker.date.year(),M:picker.date.month()});fillDate();fillTime()}else{notifyError(newDate)}},picker.getDate=function(){if(picker.unset)return null;return picker.date},picker.setDate=function(date){if(!date)picker.setValue(null);else picker.setValue(date)},picker.setEndDate=function(date){picker.options.endDate=pMoment(date);if(!picker.options.endDate.isValid()){picker.options.endDate=pMoment().add(50,"y")}if(picker.viewDate)update()},picker.setStartDate=function(date){picker.options.startDate=pMoment(date);if(!picker.options.startDate.isValid()){picker.options.startDate=pMoment({y:1970})}if(picker.viewDate)update()};init()};$.fn.datetimepicker=function(options){return this.each(function(){var $this=$(this),data=$this.data("DateTimePicker");if(!data)$this.data("DateTimePicker",new DateTimePicker(this,options))})}})(jQuery); \ No newline at end of file
diff --git a/library/bootstrap-datetimepicker/js/moment.js b/library/bootstrap-datetimepicker/js/moment.js
deleted file mode 100644
index 0168748fa..000000000
--- a/library/bootstrap-datetimepicker/js/moment.js
+++ /dev/null
@@ -1,7063 +0,0 @@
-//! moment.js
-//! version : 2.4.0
-//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
-//! license : MIT
-//! momentjs.com
-
-(function (undefined) {
-
- /************************************
- Constants
- ************************************/
-
- var moment,
- VERSION = "2.4.0",
- round = Math.round,
- i,
-
- YEAR = 0,
- MONTH = 1,
- DATE = 2,
- HOUR = 3,
- MINUTE = 4,
- SECOND = 5,
- MILLISECOND = 6,
-
- // internal storage for language config files
- languages = {},
-
- // check for nodeJS
- hasModule = (typeof module !== 'undefined' && module.exports),
-
- // ASP.NET json date format regex
- aspNetJsonRegex = /^\/?Date\((\-?\d+)/i,
- aspNetTimeSpanJsonRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,
-
- // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
- // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
- isoDurationRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/,
-
- // format tokens
- formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|X|zz?|ZZ?|.)/g,
- localFormattingTokens = /(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g,
-
- // parsing token regexes
- parseTokenOneOrTwoDigits = /\d\d?/, // 0 - 99
- parseTokenOneToThreeDigits = /\d{1,3}/, // 0 - 999
- parseTokenThreeDigits = /\d{3}/, // 000 - 999
- parseTokenFourDigits = /\d{1,4}/, // 0 - 9999
- parseTokenSixDigits = /[+\-]?\d{1,6}/, // -999,999 - 999,999
- parseTokenDigits = /\d+/, // nonzero number of digits
- parseTokenWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i, // any word (or two) characters or numbers including two/three word month in arabic.
- parseTokenTimezone = /Z|[\+\-]\d\d:?\d\d/i, // +00:00 -00:00 +0000 -0000 or Z
- parseTokenT = /T/i, // T (ISO seperator)
- parseTokenTimestampMs = /[\+\-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123
-
- // preliminary iso regex
- // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000)
- isoRegex = /^\s*\d{4}-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d:?\d\d|Z)?)?$/,
-
- isoFormat = 'YYYY-MM-DDTHH:mm:ssZ',
-
- isoDates = [
- 'YYYY-MM-DD',
- 'GGGG-[W]WW',
- 'GGGG-[W]WW-E',
- 'YYYY-DDD'
- ],
-
- // iso time formats and regexes
- isoTimes = [
- ['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d{1,3}/],
- ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/],
- ['HH:mm', /(T| )\d\d:\d\d/],
- ['HH', /(T| )\d\d/]
- ],
-
- // timezone chunker "+10:00" > ["10", "00"] or "-1530" > ["-15", "30"]
- parseTimezoneChunker = /([\+\-]|\d\d)/gi,
-
- // getter and setter names
- proxyGettersAndSetters = 'Date|Hours|Minutes|Seconds|Milliseconds'.split('|'),
- unitMillisecondFactors = {
- 'Milliseconds' : 1,
- 'Seconds' : 1e3,
- 'Minutes' : 6e4,
- 'Hours' : 36e5,
- 'Days' : 864e5,
- 'Months' : 2592e6,
- 'Years' : 31536e6
- },
-
- unitAliases = {
- ms : 'millisecond',
- s : 'second',
- m : 'minute',
- h : 'hour',
- d : 'day',
- D : 'date',
- w : 'week',
- W : 'isoWeek',
- M : 'month',
- y : 'year',
- DDD : 'dayOfYear',
- e : 'weekday',
- E : 'isoWeekday',
- gg: 'weekYear',
- GG: 'isoWeekYear'
- },
-
- camelFunctions = {
- dayofyear : 'dayOfYear',
- isoweekday : 'isoWeekday',
- isoweek : 'isoWeek',
- weekyear : 'weekYear',
- isoweekyear : 'isoWeekYear'
- },
-
- // format function strings
- formatFunctions = {},
-
- // tokens to ordinalize and pad
- ordinalizeTokens = 'DDD w W M D d'.split(' '),
- paddedTokens = 'M D H h m s w W'.split(' '),
-
- formatTokenFunctions = {
- M : function () {
- return this.month() + 1;
- },
- MMM : function (format) {
- return this.lang().monthsShort(this, format);
- },
- MMMM : function (format) {
- return this.lang().months(this, format);
- },
- D : function () {
- return this.date();
- },
- DDD : function () {
- return this.dayOfYear();
- },
- d : function () {
- return this.day();
- },
- dd : function (format) {
- return this.lang().weekdaysMin(this, format);
- },
- ddd : function (format) {
- return this.lang().weekdaysShort(this, format);
- },
- dddd : function (format) {
- return this.lang().weekdays(this, format);
- },
- w : function () {
- return this.week();
- },
- W : function () {
- return this.isoWeek();
- },
- YY : function () {
- return leftZeroFill(this.year() % 100, 2);
- },
- YYYY : function () {
- return leftZeroFill(this.year(), 4);
- },
- YYYYY : function () {
- return leftZeroFill(this.year(), 5);
- },
- gg : function () {
- return leftZeroFill(this.weekYear() % 100, 2);
- },
- gggg : function () {
- return this.weekYear();
- },
- ggggg : function () {
- return leftZeroFill(this.weekYear(), 5);
- },
- GG : function () {
- return leftZeroFill(this.isoWeekYear() % 100, 2);
- },
- GGGG : function () {
- return this.isoWeekYear();
- },
- GGGGG : function () {
- return leftZeroFill(this.isoWeekYear(), 5);
- },
- e : function () {
- return this.weekday();
- },
- E : function () {
- return this.isoWeekday();
- },
- a : function () {
- return this.lang().meridiem(this.hours(), this.minutes(), true);
- },
- A : function () {
- return this.lang().meridiem(this.hours(), this.minutes(), false);
- },
- H : function () {
- return this.hours();
- },
- h : function () {
- return this.hours() % 12 || 12;
- },
- m : function () {
- return this.minutes();
- },
- s : function () {
- return this.seconds();
- },
- S : function () {
- return toInt(this.milliseconds() / 100);
- },
- SS : function () {
- return leftZeroFill(toInt(this.milliseconds() / 10), 2);
- },
- SSS : function () {
- return leftZeroFill(this.milliseconds(), 3);
- },
- SSSS : function () {
- return leftZeroFill(this.milliseconds(), 3);
- },
- Z : function () {
- var a = -this.zone(),
- b = "+";
- if (a < 0) {
- a = -a;
- b = "-";
- }
- return b + leftZeroFill(toInt(a / 60), 2) + ":" + leftZeroFill(toInt(a) % 60, 2);
- },
- ZZ : function () {
- var a = -this.zone(),
- b = "+";
- if (a < 0) {
- a = -a;
- b = "-";
- }
- return b + leftZeroFill(toInt(10 * a / 6), 4);
- },
- z : function () {
- return this.zoneAbbr();
- },
- zz : function () {
- return this.zoneName();
- },
- X : function () {
- return this.unix();
- }
- },
-
- lists = ['months', 'monthsShort', 'weekdays', 'weekdaysShort', 'weekdaysMin'];
-
- function padToken(func, count) {
- return function (a) {
- return leftZeroFill(func.call(this, a), count);
- };
- }
- function ordinalizeToken(func, period) {
- return function (a) {
- return this.lang().ordinal(func.call(this, a), period);
- };
- }
-
- while (ordinalizeTokens.length) {
- i = ordinalizeTokens.pop();
- formatTokenFunctions[i + 'o'] = ordinalizeToken(formatTokenFunctions[i], i);
- }
- while (paddedTokens.length) {
- i = paddedTokens.pop();
- formatTokenFunctions[i + i] = padToken(formatTokenFunctions[i], 2);
- }
- formatTokenFunctions.DDDD = padToken(formatTokenFunctions.DDD, 3);
-
-
- /************************************
- Constructors
- ************************************/
-
- function Language() {
-
- }
-
- // Moment prototype object
- function Moment(config) {
- checkOverflow(config);
- extend(this, config);
- }
-
- // Duration Constructor
- function Duration(duration) {
- var normalizedInput = normalizeObjectUnits(duration),
- years = normalizedInput.year || 0,
- months = normalizedInput.month || 0,
- weeks = normalizedInput.week || 0,
- days = normalizedInput.day || 0,
- hours = normalizedInput.hour || 0,
- minutes = normalizedInput.minute || 0,
- seconds = normalizedInput.second || 0,
- milliseconds = normalizedInput.millisecond || 0;
-
- // store reference to input for deterministic cloning
- this._input = duration;
-
- // representation for dateAddRemove
- this._milliseconds = +milliseconds +
- seconds * 1e3 + // 1000
- minutes * 6e4 + // 1000 * 60
- hours * 36e5; // 1000 * 60 * 60
- // Because of dateAddRemove treats 24 hours as different from a
- // day when working around DST, we need to store them separately
- this._days = +days +
- weeks * 7;
- // It is impossible translate months into days without knowing
- // which months you are are talking about, so we have to store
- // it separately.
- this._months = +months +
- years * 12;
-
- this._data = {};
-
- this._bubble();
- }
-
- /************************************
- Helpers
- ************************************/
-
-
- function extend(a, b) {
- for (var i in b) {
- if (b.hasOwnProperty(i)) {
- a[i] = b[i];
- }
- }
-
- if (b.hasOwnProperty("toString")) {
- a.toString = b.toString;
- }
-
- if (b.hasOwnProperty("valueOf")) {
- a.valueOf = b.valueOf;
- }
-
- return a;
- }
-
- function absRound(number) {
- if (number < 0) {
- return Math.ceil(number);
- } else {
- return Math.floor(number);
- }
- }
-
- // left zero fill a number
- // see http://jsperf.com/left-zero-filling for performance comparison
- function leftZeroFill(number, targetLength) {
- var output = number + '';
- while (output.length < targetLength) {
- output = '0' + output;
- }
- return output;
- }
-
- // helper function for _.addTime and _.subtractTime
- function addOrSubtractDurationFromMoment(mom, duration, isAdding, ignoreUpdateOffset) {
- var milliseconds = duration._milliseconds,
- days = duration._days,
- months = duration._months,
- minutes,
- hours;
-
- if (milliseconds) {
- mom._d.setTime(+mom._d + milliseconds * isAdding);
- }
- // store the minutes and hours so we can restore them
- if (days || months) {
- minutes = mom.minute();
- hours = mom.hour();
- }
- if (days) {
- mom.date(mom.date() + days * isAdding);
- }
- if (months) {
- mom.month(mom.month() + months * isAdding);
- }
- if (milliseconds && !ignoreUpdateOffset) {
- moment.updateOffset(mom);
- }
- // restore the minutes and hours after possibly changing dst
- if (days || months) {
- mom.minute(minutes);
- mom.hour(hours);
- }
- }
-
- // check if is an array
- function isArray(input) {
- return Object.prototype.toString.call(input) === '[object Array]';
- }
-
- function isDate(input) {
- return Object.prototype.toString.call(input) === '[object Date]' ||
- input instanceof Date;
- }
-
- // compare two arrays, return the number of differences
- function compareArrays(array1, array2, dontConvert) {
- var len = Math.min(array1.length, array2.length),
- lengthDiff = Math.abs(array1.length - array2.length),
- diffs = 0,
- i;
- for (i = 0; i < len; i++) {
- if ((dontConvert && array1[i] !== array2[i]) ||
- (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {
- diffs++;
- }
- }
- return diffs + lengthDiff;
- }
-
- function normalizeUnits(units) {
- if (units) {
- var lowered = units.toLowerCase().replace(/(.)s$/, '$1');
- units = unitAliases[units] || camelFunctions[lowered] || lowered;
- }
- return units;
- }
-
- function normalizeObjectUnits(inputObject) {
- var normalizedInput = {},
- normalizedProp,
- prop,
- index;
-
- for (prop in inputObject) {
- if (inputObject.hasOwnProperty(prop)) {
- normalizedProp = normalizeUnits(prop);
- if (normalizedProp) {
- normalizedInput[normalizedProp] = inputObject[prop];
- }
- }
- }
-
- return normalizedInput;
- }
-
- function makeList(field) {
- var count, setter;
-
- if (field.indexOf('week') === 0) {
- count = 7;
- setter = 'day';
- }
- else if (field.indexOf('month') === 0) {
- count = 12;
- setter = 'month';
- }
- else {
- return;
- }
-
- moment[field] = function (format, index) {
- var i, getter,
- method = moment.fn._lang[field],
- results = [];
-
- if (typeof format === 'number') {
- index = format;
- format = undefined;
- }
-
- getter = function (i) {
- var m = moment().utc().set(setter, i);
- return method.call(moment.fn._lang, m, format || '');
- };
-
- if (index != null) {
- return getter(index);
- }
- else {
- for (i = 0; i < count; i++) {
- results.push(getter(i));
- }
- return results;
- }
- };
- }
-
- function toInt(argumentForCoercion) {
- var coercedNumber = +argumentForCoercion,
- value = 0;
-
- if (coercedNumber !== 0 && isFinite(coercedNumber)) {
- if (coercedNumber >= 0) {
- value = Math.floor(coercedNumber);
- } else {
- value = Math.ceil(coercedNumber);
- }
- }
-
- return value;
- }
-
- function daysInMonth(year, month) {
- return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();
- }
-
- function daysInYear(year) {
- return isLeapYear(year) ? 366 : 365;
- }
-
- function isLeapYear(year) {
- return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
- }
-
- function checkOverflow(m) {
- var overflow;
- if (m._a && m._pf.overflow === -2) {
- overflow =
- m._a[MONTH] < 0 || m._a[MONTH] > 11 ? MONTH :
- m._a[DATE] < 1 || m._a[DATE] > daysInMonth(m._a[YEAR], m._a[MONTH]) ? DATE :
- m._a[HOUR] < 0 || m._a[HOUR] > 23 ? HOUR :
- m._a[MINUTE] < 0 || m._a[MINUTE] > 59 ? MINUTE :
- m._a[SECOND] < 0 || m._a[SECOND] > 59 ? SECOND :
- m._a[MILLISECOND] < 0 || m._a[MILLISECOND] > 999 ? MILLISECOND :
- -1;
-
- if (m._pf._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
- overflow = DATE;
- }
-
- m._pf.overflow = overflow;
- }
- }
-
- function initializeParsingFlags(config) {
- config._pf = {
- empty : false,
- unusedTokens : [],
- unusedInput : [],
- overflow : -2,
- charsLeftOver : 0,
- nullInput : false,
- invalidMonth : null,
- invalidFormat : false,
- userInvalidated : false,
- iso: false
- };
- }
-
- function isValid(m) {
- if (m._isValid == null) {
- m._isValid = !isNaN(m._d.getTime()) &&
- m._pf.overflow < 0 &&
- !m._pf.empty &&
- !m._pf.invalidMonth &&
- !m._pf.nullInput &&
- !m._pf.invalidFormat &&
- !m._pf.userInvalidated;
-
- if (m._strict) {
- m._isValid = m._isValid &&
- m._pf.charsLeftOver === 0 &&
- m._pf.unusedTokens.length === 0;
- }
- }
- return m._isValid;
- }
-
- function normalizeLanguage(key) {
- return key ? key.toLowerCase().replace('_', '-') : key;
- }
-
- /************************************
- Languages
- ************************************/
-
-
- extend(Language.prototype, {
-
- set : function (config) {
- var prop, i;
- for (i in config) {
- prop = config[i];
- if (typeof prop === 'function') {
- this[i] = prop;
- } else {
- this['_' + i] = prop;
- }
- }
- },
-
- _months : "January_February_March_April_May_June_July_August_September_October_November_December".split("_"),
- months : function (m) {
- return this._months[m.month()];
- },
-
- _monthsShort : "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),
- monthsShort : function (m) {
- return this._monthsShort[m.month()];
- },
-
- monthsParse : function (monthName) {
- var i, mom, regex;
-
- if (!this._monthsParse) {
- this._monthsParse = [];
- }
-
- for (i = 0; i < 12; i++) {
- // make the regex if we don't have it already
- if (!this._monthsParse[i]) {
- mom = moment.utc([2000, i]);
- regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
- this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
- }
- // test the regex
- if (this._monthsParse[i].test(monthName)) {
- return i;
- }
- }
- },
-
- _weekdays : "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
- weekdays : function (m) {
- return this._weekdays[m.day()];
- },
-
- _weekdaysShort : "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),
- weekdaysShort : function (m) {
- return this._weekdaysShort[m.day()];
- },
-
- _weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"),
- weekdaysMin : function (m) {
- return this._weekdaysMin[m.day()];
- },
-
- weekdaysParse : function (weekdayName) {
- var i, mom, regex;
-
- if (!this._weekdaysParse) {
- this._weekdaysParse = [];
- }
-
- for (i = 0; i < 7; i++) {
- // make the regex if we don't have it already
- if (!this._weekdaysParse[i]) {
- mom = moment([2000, 1]).day(i);
- regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
- this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
- }
- // test the regex
- if (this._weekdaysParse[i].test(weekdayName)) {
- return i;
- }
- }
- },
-
- _longDateFormat : {
- LT : "h:mm A",
- L : "MM/DD/YYYY",
- LL : "MMMM D YYYY",
- LLL : "MMMM D YYYY LT",
- LLLL : "dddd, MMMM D YYYY LT"
- },
- longDateFormat : function (key) {
- var output = this._longDateFormat[key];
- if (!output && this._longDateFormat[key.toUpperCase()]) {
- output = this._longDateFormat[key.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function (val) {
- return val.slice(1);
- });
- this._longDateFormat[key] = output;
- }
- return output;
- },
-
- isPM : function (input) {
- // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
- // Using charAt should be more compatible.
- return ((input + '').toLowerCase().charAt(0) === 'p');
- },
-
- _meridiemParse : /[ap]\.?m?\.?/i,
- meridiem : function (hours, minutes, isLower) {
- if (hours > 11) {
- return isLower ? 'pm' : 'PM';
- } else {
- return isLower ? 'am' : 'AM';
- }
- },
-
- _calendar : {
- sameDay : '[Today at] LT',
- nextDay : '[Tomorrow at] LT',
- nextWeek : 'dddd [at] LT',
- lastDay : '[Yesterday at] LT',
- lastWeek : '[Last] dddd [at] LT',
- sameElse : 'L'
- },
- calendar : function (key, mom) {
- var output = this._calendar[key];
- return typeof output === 'function' ? output.apply(mom) : output;
- },
-
- _relativeTime : {
- future : "in %s",
- past : "%s ago",
- s : "a few seconds",
- m : "a minute",
- mm : "%d minutes",
- h : "an hour",
- hh : "%d hours",
- d : "a day",
- dd : "%d days",
- M : "a month",
- MM : "%d months",
- y : "a year",
- yy : "%d years"
- },
- relativeTime : function (number, withoutSuffix, string, isFuture) {
- var output = this._relativeTime[string];
- return (typeof output === 'function') ?
- output(number, withoutSuffix, string, isFuture) :
- output.replace(/%d/i, number);
- },
- pastFuture : function (diff, output) {
- var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
- return typeof format === 'function' ? format(output) : format.replace(/%s/i, output);
- },
-
- ordinal : function (number) {
- return this._ordinal.replace("%d", number);
- },
- _ordinal : "%d",
-
- preparse : function (string) {
- return string;
- },
-
- postformat : function (string) {
- return string;
- },
-
- week : function (mom) {
- return weekOfYear(mom, this._week.dow, this._week.doy).week;
- },
-
- _week : {
- dow : 0, // Sunday is the first day of the week.
- doy : 6 // The week that contains Jan 1st is the first week of the year.
- },
-
- _invalidDate: 'Invalid date',
- invalidDate: function () {
- return this._invalidDate;
- }
- });
-
- // Loads a language definition into the `languages` cache. The function
- // takes a key and optionally values. If not in the browser and no values
- // are provided, it will load the language file module. As a convenience,
- // this function also returns the language values.
- function loadLang(key, values) {
- values.abbr = key;
- if (!languages[key]) {
- languages[key] = new Language();
- }
- languages[key].set(values);
- return languages[key];
- }
-
- // Remove a language from the `languages` cache. Mostly useful in tests.
- function unloadLang(key) {
- delete languages[key];
- }
-
- // Determines which language definition to use and returns it.
- //
- // With no parameters, it will return the global language. If you
- // pass in a language key, such as 'en', it will return the
- // definition for 'en', so long as 'en' has already been loaded using
- // moment.lang.
- function getLangDefinition(key) {
- var i = 0, j, lang, next, split,
- get = function (k) {
- if (!languages[k] && hasModule) {
- try {
- require('./lang/' + k);
- } catch (e) { }
- }
- return languages[k];
- };
-
- if (!key) {
- return moment.fn._lang;
- }
-
- if (!isArray(key)) {
- //short-circuit everything else
- lang = get(key);
- if (lang) {
- return lang;
- }
- key = [key];
- }
-
- //pick the language from the array
- //try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
- //substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
- while (i < key.length) {
- split = normalizeLanguage(key[i]).split('-');
- j = split.length;
- next = normalizeLanguage(key[i + 1]);
- next = next ? next.split('-') : null;
- while (j > 0) {
- lang = get(split.slice(0, j).join('-'));
- if (lang) {
- return lang;
- }
- if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {
- //the next array item is better than a shallower substring of this one
- break;
- }
- j--;
- }
- i++;
- }
- return moment.fn._lang;
- }
-
- /************************************
- Formatting
- ************************************/
-
-
- function removeFormattingTokens(input) {
- if (input.match(/\[[\s\S]/)) {
- return input.replace(/^\[|\]$/g, "");
- }
- return input.replace(/\\/g, "");
- }
-
- function makeFormatFunction(format) {
- var array = format.match(formattingTokens), i, length;
-
- for (i = 0, length = array.length; i < length; i++) {
- if (formatTokenFunctions[array[i]]) {
- array[i] = formatTokenFunctions[array[i]];
- } else {
- array[i] = removeFormattingTokens(array[i]);
- }
- }
-
- return function (mom) {
- var output = "";
- for (i = 0; i < length; i++) {
- output += array[i] instanceof Function ? array[i].call(mom, format) : array[i];
- }
- return output;
- };
- }
-
- // format date using native date object
- function formatMoment(m, format) {
-
- if (!m.isValid()) {
- return m.lang().invalidDate();
- }
-
- format = expandFormat(format, m.lang());
-
- if (!formatFunctions[format]) {
- formatFunctions[format] = makeFormatFunction(format);
- }
-
- return formatFunctions[format](m);
- }
-
- function expandFormat(format, lang) {
- var i = 5;
-
- function replaceLongDateFormatTokens(input) {
- return lang.longDateFormat(input) || input;
- }
-
- localFormattingTokens.lastIndex = 0;
- while (i >= 0 && localFormattingTokens.test(format)) {
- format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);
- localFormattingTokens.lastIndex = 0;
- i -= 1;
- }
-
- return format;
- }
-
-
- /************************************
- Parsing
- ************************************/
-
-
- // get the regex to find the next token
- function getParseRegexForToken(token, config) {
- var a;
- switch (token) {
- case 'DDDD':
- return parseTokenThreeDigits;
- case 'YYYY':
- case 'GGGG':
- case 'gggg':
- return parseTokenFourDigits;
- case 'YYYYY':
- case 'GGGGG':
- case 'ggggg':
- return parseTokenSixDigits;
- case 'S':
- case 'SS':
- case 'SSS':
- case 'DDD':
- return parseTokenOneToThreeDigits;
- case 'MMM':
- case 'MMMM':
- case 'dd':
- case 'ddd':
- case 'dddd':
- return parseTokenWord;
- case 'a':
- case 'A':
- return getLangDefinition(config._l)._meridiemParse;
- case 'X':
- return parseTokenTimestampMs;
- case 'Z':
- case 'ZZ':
- return parseTokenTimezone;
- case 'T':
- return parseTokenT;
- case 'SSSS':
- return parseTokenDigits;
- case 'MM':
- case 'DD':
- case 'YY':
- case 'GG':
- case 'gg':
- case 'HH':
- case 'hh':
- case 'mm':
- case 'ss':
- case 'M':
- case 'D':
- case 'd':
- case 'H':
- case 'h':
- case 'm':
- case 's':
- case 'w':
- case 'ww':
- case 'W':
- case 'WW':
- case 'e':
- case 'E':
- return parseTokenOneOrTwoDigits;
- default :
- a = new RegExp(regexpEscape(unescapeFormat(token.replace('\\', '')), "i"));
- return a;
- }
- }
-
- function timezoneMinutesFromString(string) {
- var tzchunk = (parseTokenTimezone.exec(string) || [])[0],
- parts = (tzchunk + '').match(parseTimezoneChunker) || ['-', 0, 0],
- minutes = +(parts[1] * 60) + toInt(parts[2]);
-
- return parts[0] === '+' ? -minutes : minutes;
- }
-
- // function to convert string input to date
- function addTimeToArrayFromToken(token, input, config) {
- var a, datePartArray = config._a;
-
- switch (token) {
- // MONTH
- case 'M' : // fall through to MM
- case 'MM' :
- if (input != null) {
- datePartArray[MONTH] = toInt(input) - 1;
- }
- break;
- case 'MMM' : // fall through to MMMM
- case 'MMMM' :
- a = getLangDefinition(config._l).monthsParse(input);
- // if we didn't find a month name, mark the date as invalid.
- if (a != null) {
- datePartArray[MONTH] = a;
- } else {
- config._pf.invalidMonth = input;
- }
- break;
- // DAY OF MONTH
- case 'D' : // fall through to DD
- case 'DD' :
- if (input != null) {
- datePartArray[DATE] = toInt(input);
- }
- break;
- // DAY OF YEAR
- case 'DDD' : // fall through to DDDD
- case 'DDDD' :
- if (input != null) {
- config._dayOfYear = toInt(input);
- }
-
- break;
- // YEAR
- case 'YY' :
- datePartArray[YEAR] = toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
- break;
- case 'YYYY' :
- case 'YYYYY' :
- datePartArray[YEAR] = toInt(input);
- break;
- // AM / PM
- case 'a' : // fall through to A
- case 'A' :
- config._isPm = getLangDefinition(config._l).isPM(input);
- break;
- // 24 HOUR
- case 'H' : // fall through to hh
- case 'HH' : // fall through to hh
- case 'h' : // fall through to hh
- case 'hh' :
- datePartArray[HOUR] = toInt(input);
- break;
- // MINUTE
- case 'm' : // fall through to mm
- case 'mm' :
- datePartArray[MINUTE] = toInt(input);
- break;
- // SECOND
- case 's' : // fall through to ss
- case 'ss' :
- datePartArray[SECOND] = toInt(input);
- break;
- // MILLISECOND
- case 'S' :
- case 'SS' :
- case 'SSS' :
- case 'SSSS' :
- datePartArray[MILLISECOND] = toInt(('0.' + input) * 1000);
- break;
- // UNIX TIMESTAMP WITH MS
- case 'X':
- config._d = new Date(parseFloat(input) * 1000);
- break;
- // TIMEZONE
- case 'Z' : // fall through to ZZ
- case 'ZZ' :
- config._useUTC = true;
- config._tzm = timezoneMinutesFromString(input);
- break;
- case 'w':
- case 'ww':
- case 'W':
- case 'WW':
- case 'd':
- case 'dd':
- case 'ddd':
- case 'dddd':
- case 'e':
- case 'E':
- token = token.substr(0, 1);
- /* falls through */
- case 'gg':
- case 'gggg':
- case 'GG':
- case 'GGGG':
- case 'GGGGG':
- token = token.substr(0, 2);
- if (input) {
- config._w = config._w || {};
- config._w[token] = input;
- }
- break;
- }
- }
-
- // convert an array to a date.
- // the array should mirror the parameters below
- // note: all values past the year are optional and will default to the lowest possible value.
- // [year, month, day , hour, minute, second, millisecond]
- function dateFromConfig(config) {
- var i, date, input = [], currentDate,
- yearToUse, fixYear, w, temp, lang, weekday, week;
-
- if (config._d) {
- return;
- }
-
- currentDate = currentDateArray(config);
-
- //compute day of the year from weeks and weekdays
- if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
- fixYear = function (val) {
- return val ?
- (val.length < 3 ? (parseInt(val, 10) > 68 ? '19' + val : '20' + val) : val) :
- (config._a[YEAR] == null ? moment().weekYear() : config._a[YEAR]);
- };
-
- w = config._w;
- if (w.GG != null || w.W != null || w.E != null) {
- temp = dayOfYearFromWeeks(fixYear(w.GG), w.W || 1, w.E, 4, 1);
- }
- else {
- lang = getLangDefinition(config._l);
- weekday = w.d != null ? parseWeekday(w.d, lang) :
- (w.e != null ? parseInt(w.e, 10) + lang._week.dow : 0);
-
- week = parseInt(w.w, 10) || 1;
-
- //if we're parsing 'd', then the low day numbers may be next week
- if (w.d != null && weekday < lang._week.dow) {
- week++;
- }
-
- temp = dayOfYearFromWeeks(fixYear(w.gg), week, weekday, lang._week.doy, lang._week.dow);
- }
-
- config._a[YEAR] = temp.year;
- config._dayOfYear = temp.dayOfYear;
- }
-
- //if the day of the year is set, figure out what it is
- if (config._dayOfYear) {
- yearToUse = config._a[YEAR] == null ? currentDate[YEAR] : config._a[YEAR];
-
- if (config._dayOfYear > daysInYear(yearToUse)) {
- config._pf._overflowDayOfYear = true;
- }
-
- date = makeUTCDate(yearToUse, 0, config._dayOfYear);
- config._a[MONTH] = date.getUTCMonth();
- config._a[DATE] = date.getUTCDate();
- }
-
- // Default to current date.
- // * if no year, month, day of month are given, default to today
- // * if day of month is given, default month and year
- // * if month is given, default only year
- // * if year is given, don't default anything
- for (i = 0; i < 3 && config._a[i] == null; ++i) {
- config._a[i] = input[i] = currentDate[i];
- }
-
- // Zero out whatever was not defaulted, including time
- for (; i < 7; i++) {
- config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];
- }
-
- // add the offsets to the time to be parsed so that we can have a clean array for checking isValid
- input[HOUR] += toInt((config._tzm || 0) / 60);
- input[MINUTE] += toInt((config._tzm || 0) % 60);
-
- config._d = (config._useUTC ? makeUTCDate : makeDate).apply(null, input);
- }
-
- function dateFromObject(config) {
- var normalizedInput;
-
- if (config._d) {
- return;
- }
-
- normalizedInput = normalizeObjectUnits(config._i);
- config._a = [
- normalizedInput.year,
- normalizedInput.month,
- normalizedInput.day,
- normalizedInput.hour,
- normalizedInput.minute,
- normalizedInput.second,
- normalizedInput.millisecond
- ];
-
- dateFromConfig(config);
- }
-
- function currentDateArray(config) {
- var now = new Date();
- if (config._useUTC) {
- return [
- now.getUTCFullYear(),
- now.getUTCMonth(),
- now.getUTCDate()
- ];
- } else {
- return [now.getFullYear(), now.getMonth(), now.getDate()];
- }
- }
-
- // date from string and format string
- function makeDateFromStringAndFormat(config) {
-
- config._a = [];
- config._pf.empty = true;
-
- // This array is used to make a Date, either with `new Date` or `Date.UTC`
- var lang = getLangDefinition(config._l),
- string = '' + config._i,
- i, parsedInput, tokens, token, skipped,
- stringLength = string.length,
- totalParsedInputLength = 0;
-
- tokens = expandFormat(config._f, lang).match(formattingTokens) || [];
-
- for (i = 0; i < tokens.length; i++) {
- token = tokens[i];
- parsedInput = (getParseRegexForToken(token, config).exec(string) || [])[0];
- if (parsedInput) {
- skipped = string.substr(0, string.indexOf(parsedInput));
- if (skipped.length > 0) {
- config._pf.unusedInput.push(skipped);
- }
- string = string.slice(string.indexOf(parsedInput) + parsedInput.length);
- totalParsedInputLength += parsedInput.length;
- }
- // don't parse if it's not a known token
- if (formatTokenFunctions[token]) {
- if (parsedInput) {
- config._pf.empty = false;
- }
- else {
- config._pf.unusedTokens.push(token);
- }
- addTimeToArrayFromToken(token, parsedInput, config);
- }
- else if (config._strict && !parsedInput) {
- config._pf.unusedTokens.push(token);
- }
- }
-
- // add remaining unparsed input length to the string
- config._pf.charsLeftOver = stringLength - totalParsedInputLength;
- if (string.length > 0) {
- config._pf.unusedInput.push(string);
- }
-
- // handle am pm
- if (config._isPm && config._a[HOUR] < 12) {
- config._a[HOUR] += 12;
- }
- // if is 12 am, change hours to 0
- if (config._isPm === false && config._a[HOUR] === 12) {
- config._a[HOUR] = 0;
- }
-
- dateFromConfig(config);
- checkOverflow(config);
- }
-
- function unescapeFormat(s) {
- return s.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
- return p1 || p2 || p3 || p4;
- });
- }
-
- // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
- function regexpEscape(s) {
- return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
- }
-
- // date from string and array of format strings
- function makeDateFromStringAndArray(config) {
- var tempConfig,
- bestMoment,
-
- scoreToBeat,
- i,
- currentScore;
-
- if (config._f.length === 0) {
- config._pf.invalidFormat = true;
- config._d = new Date(NaN);
- return;
- }
-
- for (i = 0; i < config._f.length; i++) {
- currentScore = 0;
- tempConfig = extend({}, config);
- initializeParsingFlags(tempConfig);
- tempConfig._f = config._f[i];
- makeDateFromStringAndFormat(tempConfig);
-
- if (!isValid(tempConfig)) {
- continue;
- }
-
- // if there is any input that was not parsed add a penalty for that format
- currentScore += tempConfig._pf.charsLeftOver;
-
- //or tokens
- currentScore += tempConfig._pf.unusedTokens.length * 10;
-
- tempConfig._pf.score = currentScore;
-
- if (scoreToBeat == null || currentScore < scoreToBeat) {
- scoreToBeat = currentScore;
- bestMoment = tempConfig;
- }
- }
-
- extend(config, bestMoment || tempConfig);
- }
-
- // date from iso format
- function makeDateFromString(config) {
- var i,
- string = config._i,
- match = isoRegex.exec(string);
-
- if (match) {
- config._pf.iso = true;
- for (i = 4; i > 0; i--) {
- if (match[i]) {
- // match[5] should be "T" or undefined
- config._f = isoDates[i - 1] + (match[6] || " ");
- break;
- }
- }
- for (i = 0; i < 4; i++) {
- if (isoTimes[i][1].exec(string)) {
- config._f += isoTimes[i][0];
- break;
- }
- }
- if (parseTokenTimezone.exec(string)) {
- config._f += "Z";
- }
- makeDateFromStringAndFormat(config);
- }
- else {
- config._d = new Date(string);
- }
- }
-
- function makeDateFromInput(config) {
- var input = config._i,
- matched = aspNetJsonRegex.exec(input);
-
- if (input === undefined) {
- config._d = new Date();
- } else if (matched) {
- config._d = new Date(+matched[1]);
- } else if (typeof input === 'string') {
- makeDateFromString(config);
- } else if (isArray(input)) {
- config._a = input.slice(0);
- dateFromConfig(config);
- } else if (isDate(input)) {
- config._d = new Date(+input);
- } else if (typeof(input) === 'object') {
- dateFromObject(config);
- } else {
- config._d = new Date(input);
- }
- }
-
- function makeDate(y, m, d, h, M, s, ms) {
- //can't just apply() to create a date:
- //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
- var date = new Date(y, m, d, h, M, s, ms);
-
- //the date constructor doesn't accept years < 1970
- if (y < 1970) {
- date.setFullYear(y);
- }
- return date;
- }
-
- function makeUTCDate(y) {
- var date = new Date(Date.UTC.apply(null, arguments));
- if (y < 1970) {
- date.setUTCFullYear(y);
- }
- return date;
- }
-
- function parseWeekday(input, language) {
- if (typeof input === 'string') {
- if (!isNaN(input)) {
- input = parseInt(input, 10);
- }
- else {
- input = language.weekdaysParse(input);
- if (typeof input !== 'number') {
- return null;
- }
- }
- }
- return input;
- }
-
- /************************************
- Relative Time
- ************************************/
-
-
- // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
- function substituteTimeAgo(string, number, withoutSuffix, isFuture, lang) {
- return lang.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
- }
-
- function relativeTime(milliseconds, withoutSuffix, lang) {
- var seconds = round(Math.abs(milliseconds) / 1000),
- minutes = round(seconds / 60),
- hours = round(minutes / 60),
- days = round(hours / 24),
- years = round(days / 365),
- args = seconds < 45 && ['s', seconds] ||
- minutes === 1 && ['m'] ||
- minutes < 45 && ['mm', minutes] ||
- hours === 1 && ['h'] ||
- hours < 22 && ['hh', hours] ||
- days === 1 && ['d'] ||
- days <= 25 && ['dd', days] ||
- days <= 45 && ['M'] ||
- days < 345 && ['MM', round(days / 30)] ||
- years === 1 && ['y'] || ['yy', years];
- args[2] = withoutSuffix;
- args[3] = milliseconds > 0;
- args[4] = lang;
- return substituteTimeAgo.apply({}, args);
- }
-
-
- /************************************
- Week of Year
- ************************************/
-
-
- // firstDayOfWeek 0 = sun, 6 = sat
- // the day of the week that starts the week
- // (usually sunday or monday)
- // firstDayOfWeekOfYear 0 = sun, 6 = sat
- // the first week is the week that contains the first
- // of this day of the week
- // (eg. ISO weeks use thursday (4))
- function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) {
- var end = firstDayOfWeekOfYear - firstDayOfWeek,
- daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(),
- adjustedMoment;
-
-
- if (daysToDayOfWeek > end) {
- daysToDayOfWeek -= 7;
- }
-
- if (daysToDayOfWeek < end - 7) {
- daysToDayOfWeek += 7;
- }
-
- adjustedMoment = moment(mom).add('d', daysToDayOfWeek);
- return {
- week: Math.ceil(adjustedMoment.dayOfYear() / 7),
- year: adjustedMoment.year()
- };
- }
-
- //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
- function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) {
- var d = new Date(Date.UTC(year, 0)).getUTCDay(),
- daysToAdd, dayOfYear;
-
- weekday = weekday != null ? weekday : firstDayOfWeek;
- daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0);
- dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1;
-
- return {
- year: dayOfYear > 0 ? year : year - 1,
- dayOfYear: dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear
- };
- }
-
- /************************************
- Top Level Functions
- ************************************/
-
- function makeMoment(config) {
- var input = config._i,
- format = config._f;
-
- if (typeof config._pf === 'undefined') {
- initializeParsingFlags(config);
- }
-
- if (input === null) {
- return moment.invalid({nullInput: true});
- }
-
- if (typeof input === 'string') {
- config._i = input = getLangDefinition().preparse(input);
- }
-
- if (moment.isMoment(input)) {
- config = extend({}, input);
-
- config._d = new Date(+input._d);
- } else if (format) {
- if (isArray(format)) {
- makeDateFromStringAndArray(config);
- } else {
- makeDateFromStringAndFormat(config);
- }
- } else {
- makeDateFromInput(config);
- }
-
- return new Moment(config);
- }
-
- moment = function (input, format, lang, strict) {
- if (typeof(lang) === "boolean") {
- strict = lang;
- lang = undefined;
- }
- return makeMoment({
- _i : input,
- _f : format,
- _l : lang,
- _strict : strict,
- _isUTC : false
- });
- };
-
- // creating with utc
- moment.utc = function (input, format, lang, strict) {
- var m;
-
- if (typeof(lang) === "boolean") {
- strict = lang;
- lang = undefined;
- }
- m = makeMoment({
- _useUTC : true,
- _isUTC : true,
- _l : lang,
- _i : input,
- _f : format,
- _strict : strict
- }).utc();
-
- return m;
- };
-
- // creating with unix timestamp (in seconds)
- moment.unix = function (input) {
- return moment(input * 1000);
- };
-
- // duration
- moment.duration = function (input, key) {
- var isDuration = moment.isDuration(input),
- isNumber = (typeof input === 'number'),
- duration = (isDuration ? input._input : (isNumber ? {} : input)),
- // matching against regexp is expensive, do it on demand
- match = null,
- sign,
- ret,
- parseIso,
- timeEmpty,
- dateTimeEmpty;
-
- if (isNumber) {
- if (key) {
- duration[key] = input;
- } else {
- duration.milliseconds = input;
- }
- } else if (!!(match = aspNetTimeSpanJsonRegex.exec(input))) {
- sign = (match[1] === "-") ? -1 : 1;
- duration = {
- y: 0,
- d: toInt(match[DATE]) * sign,
- h: toInt(match[HOUR]) * sign,
- m: toInt(match[MINUTE]) * sign,
- s: toInt(match[SECOND]) * sign,
- ms: toInt(match[MILLISECOND]) * sign
- };
- } else if (!!(match = isoDurationRegex.exec(input))) {
- sign = (match[1] === "-") ? -1 : 1;
- parseIso = function (inp) {
- // We'd normally use ~~inp for this, but unfortunately it also
- // converts floats to ints.
- // inp may be undefined, so careful calling replace on it.
- var res = inp && parseFloat(inp.replace(',', '.'));
- // apply sign while we're at it
- return (isNaN(res) ? 0 : res) * sign;
- };
- duration = {
- y: parseIso(match[2]),
- M: parseIso(match[3]),
- d: parseIso(match[4]),
- h: parseIso(match[5]),
- m: parseIso(match[6]),
- s: parseIso(match[7]),
- w: parseIso(match[8])
- };
- }
-
- ret = new Duration(duration);
-
- if (isDuration && input.hasOwnProperty('_lang')) {
- ret._lang = input._lang;
- }
-
- return ret;
- };
-
- // version number
- moment.version = VERSION;
-
- // default format
- moment.defaultFormat = isoFormat;
-
- // This function will be called whenever a moment is mutated.
- // It is intended to keep the offset in sync with the timezone.
- moment.updateOffset = function () {};
-
- // This function will load languages and then set the global language. If
- // no arguments are passed in, it will simply return the current global
- // language key.
- moment.lang = function (key, values) {
- var r;
- if (!key) {
- return moment.fn._lang._abbr;
- }
- if (values) {
- loadLang(normalizeLanguage(key), values);
- } else if (values === null) {
- unloadLang(key);
- key = 'en';
- } else if (!languages[key]) {
- getLangDefinition(key);
- }
- r = moment.duration.fn._lang = moment.fn._lang = getLangDefinition(key);
- return r._abbr;
- };
-
- // returns language data
- moment.langData = function (key) {
- if (key && key._lang && key._lang._abbr) {
- key = key._lang._abbr;
- }
- return getLangDefinition(key);
- };
-
- // compare moment object
- moment.isMoment = function (obj) {
- return obj instanceof Moment;
- };
-
- // for typechecking Duration objects
- moment.isDuration = function (obj) {
- return obj instanceof Duration;
- };
-
- for (i = lists.length - 1; i >= 0; --i) {
- makeList(lists[i]);
- }
-
- moment.normalizeUnits = function (units) {
- return normalizeUnits(units);
- };
-
- moment.invalid = function (flags) {
- var m = moment.utc(NaN);
- if (flags != null) {
- extend(m._pf, flags);
- }
- else {
- m._pf.userInvalidated = true;
- }
-
- return m;
- };
-
- moment.parseZone = function (input) {
- return moment(input).parseZone();
- };
-
- /************************************
- Moment Prototype
- ************************************/
-
-
- extend(moment.fn = Moment.prototype, {
-
- clone : function () {
- return moment(this);
- },
-
- valueOf : function () {
- return +this._d + ((this._offset || 0) * 60000);
- },
-
- unix : function () {
- return Math.floor(+this / 1000);
- },
-
- toString : function () {
- return this.clone().lang('en').format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ");
- },
-
- toDate : function () {
- return this._offset ? new Date(+this) : this._d;
- },
-
- toISOString : function () {
- return formatMoment(moment(this).utc(), 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
- },
-
- toArray : function () {
- var m = this;
- return [
- m.year(),
- m.month(),
- m.date(),
- m.hours(),
- m.minutes(),
- m.seconds(),
- m.milliseconds()
- ];
- },
-
- isValid : function () {
- return isValid(this);
- },
-
- isDSTShifted : function () {
-
- if (this._a) {
- return this.isValid() && compareArrays(this._a, (this._isUTC ? moment.utc(this._a) : moment(this._a)).toArray()) > 0;
- }
-
- return false;
- },
-
- parsingFlags : function () {
- return extend({}, this._pf);
- },
-
- invalidAt: function () {
- return this._pf.overflow;
- },
-
- utc : function () {
- return this.zone(0);
- },
-
- local : function () {
- this.zone(0);
- this._isUTC = false;
- return this;
- },
-
- format : function (inputString) {
- var output = formatMoment(this, inputString || moment.defaultFormat);
- return this.lang().postformat(output);
- },
-
- add : function (input, val) {
- var dur;
- // switch args to support add('s', 1) and add(1, 's')
- if (typeof input === 'string') {
- dur = moment.duration(+val, input);
- } else {
- dur = moment.duration(input, val);
- }
- addOrSubtractDurationFromMoment(this, dur, 1);
- return this;
- },
-
- subtract : function (input, val) {
- var dur;
- // switch args to support subtract('s', 1) and subtract(1, 's')
- if (typeof input === 'string') {
- dur = moment.duration(+val, input);
- } else {
- dur = moment.duration(input, val);
- }
- addOrSubtractDurationFromMoment(this, dur, -1);
- return this;
- },
-
- diff : function (input, units, asFloat) {
- var that = this._isUTC ? moment(input).zone(this._offset || 0) : moment(input).local(),
- zoneDiff = (this.zone() - that.zone()) * 6e4,
- diff, output;
-
- units = normalizeUnits(units);
-
- if (units === 'year' || units === 'month') {
- // average number of days in the months in the given dates
- diff = (this.daysInMonth() + that.daysInMonth()) * 432e5; // 24 * 60 * 60 * 1000 / 2
- // difference in months
- output = ((this.year() - that.year()) * 12) + (this.month() - that.month());
- // adjust by taking difference in days, average number of days
- // and dst in the given months.
- output += ((this - moment(this).startOf('month')) -
- (that - moment(that).startOf('month'))) / diff;
- // same as above but with zones, to negate all dst
- output -= ((this.zone() - moment(this).startOf('month').zone()) -
- (that.zone() - moment(that).startOf('month').zone())) * 6e4 / diff;
- if (units === 'year') {
- output = output / 12;
- }
- } else {
- diff = (this - that);
- output = units === 'second' ? diff / 1e3 : // 1000
- units === 'minute' ? diff / 6e4 : // 1000 * 60
- units === 'hour' ? diff / 36e5 : // 1000 * 60 * 60
- units === 'day' ? (diff - zoneDiff) / 864e5 : // 1000 * 60 * 60 * 24, negate dst
- units === 'week' ? (diff - zoneDiff) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst
- diff;
- }
- return asFloat ? output : absRound(output);
- },
-
- from : function (time, withoutSuffix) {
- return moment.duration(this.diff(time)).lang(this.lang()._abbr).humanize(!withoutSuffix);
- },
-
- fromNow : function (withoutSuffix) {
- return this.from(moment(), withoutSuffix);
- },
-
- calendar : function () {
- var diff = this.diff(moment().zone(this.zone()).startOf('day'), 'days', true),
- format = diff < -6 ? 'sameElse' :
- diff < -1 ? 'lastWeek' :
- diff < 0 ? 'lastDay' :
- diff < 1 ? 'sameDay' :
- diff < 2 ? 'nextDay' :
- diff < 7 ? 'nextWeek' : 'sameElse';
- return this.format(this.lang().calendar(format, this));
- },
-
- isLeapYear : function () {
- return isLeapYear(this.year());
- },
-
- isDST : function () {
- return (this.zone() < this.clone().month(0).zone() ||
- this.zone() < this.clone().month(5).zone());
- },
-
- day : function (input) {
- var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
- if (input != null) {
- input = parseWeekday(input, this.lang());
- return this.add({ d : input - day });
- } else {
- return day;
- }
- },
-
- month : function (input) {
- var utc = this._isUTC ? 'UTC' : '',
- dayOfMonth;
-
- if (input != null) {
- if (typeof input === 'string') {
- input = this.lang().monthsParse(input);
- if (typeof input !== 'number') {
- return this;
- }
- }
-
- dayOfMonth = this.date();
- this.date(1);
- this._d['set' + utc + 'Month'](input);
- this.date(Math.min(dayOfMonth, this.daysInMonth()));
-
- moment.updateOffset(this);
- return this;
- } else {
- return this._d['get' + utc + 'Month']();
- }
- },
-
- startOf: function (units) {
- units = normalizeUnits(units);
- // the following switch intentionally omits break keywords
- // to utilize falling through the cases.
- switch (units) {
- case 'year':
- this.month(0);
- /* falls through */
- case 'month':
- this.date(1);
- /* falls through */
- case 'week':
- case 'isoWeek':
- case 'day':
- this.hours(0);
- /* falls through */
- case 'hour':
- this.minutes(0);
- /* falls through */
- case 'minute':
- this.seconds(0);
- /* falls through */
- case 'second':
- this.milliseconds(0);
- /* falls through */
- }
-
- // weeks are a special case
- if (units === 'week') {
- this.weekday(0);
- } else if (units === 'isoWeek') {
- this.isoWeekday(1);
- }
-
- return this;
- },
-
- endOf: function (units) {
- units = normalizeUnits(units);
- return this.startOf(units).add((units === 'isoWeek' ? 'week' : units), 1).subtract('ms', 1);
- },
-
- isAfter: function (input, units) {
- units = typeof units !== 'undefined' ? units : 'millisecond';
- return +this.clone().startOf(units) > +moment(input).startOf(units);
- },
-
- isBefore: function (input, units) {
- units = typeof units !== 'undefined' ? units : 'millisecond';
- return +this.clone().startOf(units) < +moment(input).startOf(units);
- },
-
- isSame: function (input, units) {
- units = typeof units !== 'undefined' ? units : 'millisecond';
- return +this.clone().startOf(units) === +moment(input).startOf(units);
- },
-
- min: function (other) {
- other = moment.apply(null, arguments);
- return other < this ? this : other;
- },
-
- max: function (other) {
- other = moment.apply(null, arguments);
- return other > this ? this : other;
- },
-
- zone : function (input) {
- var offset = this._offset || 0;
- if (input != null) {
- if (typeof input === "string") {
- input = timezoneMinutesFromString(input);
- }
- if (Math.abs(input) < 16) {
- input = input * 60;
- }
- this._offset = input;
- this._isUTC = true;
- if (offset !== input) {
- addOrSubtractDurationFromMoment(this, moment.duration(offset - input, 'm'), 1, true);
- }
- } else {
- return this._isUTC ? offset : this._d.getTimezoneOffset();
- }
- return this;
- },
-
- zoneAbbr : function () {
- return this._isUTC ? "UTC" : "";
- },
-
- zoneName : function () {
- return this._isUTC ? "Coordinated Universal Time" : "";
- },
-
- parseZone : function () {
- if (typeof this._i === 'string') {
- this.zone(this._i);
- }
- return this;
- },
-
- hasAlignedHourOffset : function (input) {
- if (!input) {
- input = 0;
- }
- else {
- input = moment(input).zone();
- }
-
- return (this.zone() - input) % 60 === 0;
- },
-
- daysInMonth : function () {
- return daysInMonth(this.year(), this.month());
- },
-
- dayOfYear : function (input) {
- var dayOfYear = round((moment(this).startOf('day') - moment(this).startOf('year')) / 864e5) + 1;
- return input == null ? dayOfYear : this.add("d", (input - dayOfYear));
- },
-
- weekYear : function (input) {
- var year = weekOfYear(this, this.lang()._week.dow, this.lang()._week.doy).year;
- return input == null ? year : this.add("y", (input - year));
- },
-
- isoWeekYear : function (input) {
- var year = weekOfYear(this, 1, 4).year;
- return input == null ? year : this.add("y", (input - year));
- },
-
- week : function (input) {
- var week = this.lang().week(this);
- return input == null ? week : this.add("d", (input - week) * 7);
- },
-
- isoWeek : function (input) {
- var week = weekOfYear(this, 1, 4).week;
- return input == null ? week : this.add("d", (input - week) * 7);
- },
-
- weekday : function (input) {
- var weekday = (this.day() + 7 - this.lang()._week.dow) % 7;
- return input == null ? weekday : this.add("d", input - weekday);
- },
-
- isoWeekday : function (input) {
- // behaves the same as moment#day except
- // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
- // as a setter, sunday should belong to the previous week.
- return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7);
- },
-
- get : function (units) {
- units = normalizeUnits(units);
- return this[units]();
- },
-
- set : function (units, value) {
- units = normalizeUnits(units);
- if (typeof this[units] === 'function') {
- this[units](value);
- }
- return this;
- },
-
- // If passed a language key, it will set the language for this
- // instance. Otherwise, it will return the language configuration
- // variables for this instance.
- lang : function (key) {
- if (key === undefined) {
- return this._lang;
- } else {
- this._lang = getLangDefinition(key);
- return this;
- }
- }
- });
-
- // helper for adding shortcuts
- function makeGetterAndSetter(name, key) {
- moment.fn[name] = moment.fn[name + 's'] = function (input) {
- var utc = this._isUTC ? 'UTC' : '';
- if (input != null) {
- this._d['set' + utc + key](input);
- moment.updateOffset(this);
- return this;
- } else {
- return this._d['get' + utc + key]();
- }
- };
- }
-
- // loop through and add shortcuts (Month, Date, Hours, Minutes, Seconds, Milliseconds)
- for (i = 0; i < proxyGettersAndSetters.length; i ++) {
- makeGetterAndSetter(proxyGettersAndSetters[i].toLowerCase().replace(/s$/, ''), proxyGettersAndSetters[i]);
- }
-
- // add shortcut for year (uses different syntax than the getter/setter 'year' == 'FullYear')
- makeGetterAndSetter('year', 'FullYear');
-
- // add plural methods
- moment.fn.days = moment.fn.day;
- moment.fn.months = moment.fn.month;
- moment.fn.weeks = moment.fn.week;
- moment.fn.isoWeeks = moment.fn.isoWeek;
-
- // add aliased format methods
- moment.fn.toJSON = moment.fn.toISOString;
-
- /************************************
- Duration Prototype
- ************************************/
-
-
- extend(moment.duration.fn = Duration.prototype, {
-
- _bubble : function () {
- var milliseconds = this._milliseconds,
- days = this._days,
- months = this._months,
- data = this._data,
- seconds, minutes, hours, years;
-
- // The following code bubbles up values, see the tests for
- // examples of what that means.
- data.milliseconds = milliseconds % 1000;
-
- seconds = absRound(milliseconds / 1000);
- data.seconds = seconds % 60;
-
- minutes = absRound(seconds / 60);
- data.minutes = minutes % 60;
-
- hours = absRound(minutes / 60);
- data.hours = hours % 24;
-
- days += absRound(hours / 24);
- data.days = days % 30;
-
- months += absRound(days / 30);
- data.months = months % 12;
-
- years = absRound(months / 12);
- data.years = years;
- },
-
- weeks : function () {
- return absRound(this.days() / 7);
- },
-
- valueOf : function () {
- return this._milliseconds +
- this._days * 864e5 +
- (this._months % 12) * 2592e6 +
- toInt(this._months / 12) * 31536e6;
- },
-
- humanize : function (withSuffix) {
- var difference = +this,
- output = relativeTime(difference, !withSuffix, this.lang());
-
- if (withSuffix) {
- output = this.lang().pastFuture(difference, output);
- }
-
- return this.lang().postformat(output);
- },
-
- add : function (input, val) {
- // supports only 2.0-style add(1, 's') or add(moment)
- var dur = moment.duration(input, val);
-
- this._milliseconds += dur._milliseconds;
- this._days += dur._days;
- this._months += dur._months;
-
- this._bubble();
-
- return this;
- },
-
- subtract : function (input, val) {
- var dur = moment.duration(input, val);
-
- this._milliseconds -= dur._milliseconds;
- this._days -= dur._days;
- this._months -= dur._months;
-
- this._bubble();
-
- return this;
- },
-
- get : function (units) {
- units = normalizeUnits(units);
- return this[units.toLowerCase() + 's']();
- },
-
- as : function (units) {
- units = normalizeUnits(units);
- return this['as' + units.charAt(0).toUpperCase() + units.slice(1) + 's']();
- },
-
- lang : moment.fn.lang,
-
- toIsoString : function () {
- // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
- var years = Math.abs(this.years()),
- months = Math.abs(this.months()),
- days = Math.abs(this.days()),
- hours = Math.abs(this.hours()),
- minutes = Math.abs(this.minutes()),
- seconds = Math.abs(this.seconds() + this.milliseconds() / 1000);
-
- if (!this.asSeconds()) {
- // this is the same as C#'s (Noda) and python (isodate)...
- // but not other JS (goog.date)
- return 'P0D';
- }
-
- return (this.asSeconds() < 0 ? '-' : '') +
- 'P' +
- (years ? years + 'Y' : '') +
- (months ? months + 'M' : '') +
- (days ? days + 'D' : '') +
- ((hours || minutes || seconds) ? 'T' : '') +
- (hours ? hours + 'H' : '') +
- (minutes ? minutes + 'M' : '') +
- (seconds ? seconds + 'S' : '');
- }
- });
-
- function makeDurationGetter(name) {
- moment.duration.fn[name] = function () {
- return this._data[name];
- };
- }
-
- function makeDurationAsGetter(name, factor) {
- moment.duration.fn['as' + name] = function () {
- return +this / factor;
- };
- }
-
- for (i in unitMillisecondFactors) {
- if (unitMillisecondFactors.hasOwnProperty(i)) {
- makeDurationAsGetter(i, unitMillisecondFactors[i]);
- makeDurationGetter(i.toLowerCase());
- }
- }
-
- makeDurationAsGetter('Weeks', 6048e5);
- moment.duration.fn.asMonths = function () {
- return (+this - this.years() * 31536e6) / 2592e6 + this.years() * 12;
- };
-
-
- /************************************
- Default Lang
- ************************************/
-
-
- // Set default language, other languages will inherit from English.
- moment.lang('en', {
- ordinal : function (number) {
- var b = number % 10,
- output = (toInt(number % 100 / 10) === 1) ? 'th' :
- (b === 1) ? 'st' :
- (b === 2) ? 'nd' :
- (b === 3) ? 'rd' : 'th';
- return number + output;
- }
- });
-
- // moment.js language configuration
-// language : Moroccan Arabic (ar-ma)
-// author : ElFadili Yassine : https://github.com/ElFadiliY
-// author : Abdel Said : https://github.com/abdelsaid
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('ar-ma', {
- months : "يناير_Ùبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),
- monthsShort : "يناير_Ùبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),
- weekdays : "الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),
- weekdaysShort : "احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),
- weekdaysMin : "ح_ن_ث_ر_خ_ج_س".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "dddd D MMMM YYYY LT"
- },
- calendar : {
- sameDay: "[اليوم على الساعة] LT",
- nextDay: '[غدا على الساعة] LT',
- nextWeek: 'dddd [على الساعة] LT',
- lastDay: '[أمس على الساعة] LT',
- lastWeek: 'dddd [على الساعة] LT',
- sameElse: 'L'
- },
- relativeTime : {
- future : "ÙÙŠ %s",
- past : "منذ %s",
- s : "ثوان",
- m : "دقيقة",
- mm : "%d دقائق",
- h : "ساعة",
- hh : "%d ساعات",
- d : "يوم",
- dd : "%d أيام",
- M : "شهر",
- MM : "%d أشهر",
- y : "سنة",
- yy : "%d سنوات"
- },
- week : {
- dow : 6, // Saturday is the first day of the week.
- doy : 12 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : Arabic (ar)
-// author : Abdel Said : https://github.com/abdelsaid
-// changes in months, weekdays : Ahmed Elkhatib
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('ar', {
- months : "يناير/ كانون الثاني_Ùبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوÙمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"),
- monthsShort : "يناير/ كانون الثاني_Ùبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوÙمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"),
- weekdays : "الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),
- weekdaysShort : "الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),
- weekdaysMin : "ح_ن_ث_ر_خ_ج_س".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "dddd D MMMM YYYY LT"
- },
- calendar : {
- sameDay: "[اليوم على الساعة] LT",
- nextDay: '[غدا على الساعة] LT',
- nextWeek: 'dddd [على الساعة] LT',
- lastDay: '[أمس على الساعة] LT',
- lastWeek: 'dddd [على الساعة] LT',
- sameElse: 'L'
- },
- relativeTime : {
- future : "ÙÙŠ %s",
- past : "منذ %s",
- s : "ثوان",
- m : "دقيقة",
- mm : "%d دقائق",
- h : "ساعة",
- hh : "%d ساعات",
- d : "يوم",
- dd : "%d أيام",
- M : "شهر",
- MM : "%d أشهر",
- y : "سنة",
- yy : "%d سنوات"
- },
- week : {
- dow : 6, // Saturday is the first day of the week.
- doy : 12 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : bulgarian (bg)
-// author : Krasen Borisov : https://github.com/kraz
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('bg', {
- months : "Ñнуари_февруари_март_април_май_юни_юли_авгуÑÑ‚_Ñептември_октомври_ноември_декември".split("_"),
- monthsShort : "Ñнр_фев_мар_апр_май_юни_юли_авг_Ñеп_окт_ное_дек".split("_"),
- weekdays : "неделÑ_понеделник_вторник_ÑÑ€Ñда_четвъртък_петък_Ñъбота".split("_"),
- weekdaysShort : "нед_пон_вто_ÑÑ€Ñ_чет_пет_Ñъб".split("_"),
- weekdaysMin : "нд_пн_вт_ÑÑ€_чт_пт_Ñб".split("_"),
- longDateFormat : {
- LT : "H:mm",
- L : "D.MM.YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "dddd, D MMMM YYYY LT"
- },
- calendar : {
- sameDay : '[Ð”Ð½ÐµÑ Ð²] LT',
- nextDay : '[Утре в] LT',
- nextWeek : 'dddd [в] LT',
- lastDay : '[Вчера в] LT',
- lastWeek : function () {
- switch (this.day()) {
- case 0:
- case 3:
- case 6:
- return '[В изминалата] dddd [в] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[Ð’ изминалиÑ] dddd [в] LT';
- }
- },
- sameElse : 'L'
- },
- relativeTime : {
- future : "Ñлед %s",
- past : "преди %s",
- s : "нÑколко Ñекунди",
- m : "минута",
- mm : "%d минути",
- h : "чаÑ",
- hh : "%d чаÑа",
- d : "ден",
- dd : "%d дни",
- M : "меÑец",
- MM : "%d меÑеца",
- y : "година",
- yy : "%d години"
- },
- ordinal : function (number) {
- var lastDigit = number % 10,
- last2Digits = number % 100;
- if (number === 0) {
- return number + '-ев';
- } else if (last2Digits === 0) {
- return number + '-ен';
- } else if (last2Digits > 10 && last2Digits < 20) {
- return number + '-ти';
- } else if (lastDigit === 1) {
- return number + '-ви';
- } else if (lastDigit === 2) {
- return number + '-ри';
- } else if (lastDigit === 7 || lastDigit === 8) {
- return number + '-ми';
- } else {
- return number + '-ти';
- }
- },
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 7 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : breton (br)
-// author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- function relativeTimeWithMutation(number, withoutSuffix, key) {
- var format = {
- 'mm': "munutenn",
- 'MM': "miz",
- 'dd': "devezh"
- };
- return number + ' ' + mutation(format[key], number);
- }
-
- function specialMutationForYears(number) {
- switch (lastNumber(number)) {
- case 1:
- case 3:
- case 4:
- case 5:
- case 9:
- return number + ' bloaz';
- default:
- return number + ' vloaz';
- }
- }
-
- function lastNumber(number) {
- if (number > 9) {
- return lastNumber(number % 10);
- }
- return number;
- }
-
- function mutation(text, number) {
- if (number === 2) {
- return softMutation(text);
- }
- return text;
- }
-
- function softMutation(text) {
- var mutationTable = {
- 'm': 'v',
- 'b': 'v',
- 'd': 'z'
- };
- if (mutationTable[text.charAt(0)] === undefined) {
- return text;
- }
- return mutationTable[text.charAt(0)] + text.substring(1);
- }
-
- return moment.lang('br', {
- months : "Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),
- monthsShort : "Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),
- weekdays : "Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),
- weekdaysShort : "Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),
- weekdaysMin : "Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),
- longDateFormat : {
- LT : "h[e]mm A",
- L : "DD/MM/YYYY",
- LL : "D [a viz] MMMM YYYY",
- LLL : "D [a viz] MMMM YYYY LT",
- LLLL : "dddd, D [a viz] MMMM YYYY LT"
- },
- calendar : {
- sameDay : '[Hiziv da] LT',
- nextDay : '[Warc\'hoazh da] LT',
- nextWeek : 'dddd [da] LT',
- lastDay : '[Dec\'h da] LT',
- lastWeek : 'dddd [paset da] LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "a-benn %s",
- past : "%s 'zo",
- s : "un nebeud segondennoù",
- m : "ur vunutenn",
- mm : relativeTimeWithMutation,
- h : "un eur",
- hh : "%d eur",
- d : "un devezh",
- dd : relativeTimeWithMutation,
- M : "ur miz",
- MM : relativeTimeWithMutation,
- y : "ur bloaz",
- yy : specialMutationForYears
- },
- ordinal : function (number) {
- var output = (number === 1) ? 'añ' : 'vet';
- return number + output;
- },
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : bosnian (bs)
-// author : Nedim Cholich : https://github.com/frontyard
-// based on (hr) translation by Bojan Marković
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
-
- function translate(number, withoutSuffix, key) {
- var result = number + " ";
- switch (key) {
- case 'm':
- return withoutSuffix ? 'jedna minuta' : 'jedne minute';
- case 'mm':
- if (number === 1) {
- result += 'minuta';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'minute';
- } else {
- result += 'minuta';
- }
- return result;
- case 'h':
- return withoutSuffix ? 'jedan sat' : 'jednog sata';
- case 'hh':
- if (number === 1) {
- result += 'sat';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'sata';
- } else {
- result += 'sati';
- }
- return result;
- case 'dd':
- if (number === 1) {
- result += 'dan';
- } else {
- result += 'dana';
- }
- return result;
- case 'MM':
- if (number === 1) {
- result += 'mjesec';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'mjeseca';
- } else {
- result += 'mjeseci';
- }
- return result;
- case 'yy':
- if (number === 1) {
- result += 'godina';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'godine';
- } else {
- result += 'godina';
- }
- return result;
- }
- }
-
- return moment.lang('bs', {
- months : "januar_februar_mart_april_maj_juni_juli_avgust_septembar_oktobar_novembar_decembar".split("_"),
- monthsShort : "jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),
- weekdays : "nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota".split("_"),
- weekdaysShort : "ned._pon._uto._sri._Äet._pet._sub.".split("_"),
- weekdaysMin : "ne_po_ut_sr_Äe_pe_su".split("_"),
- longDateFormat : {
- LT : "H:mm",
- L : "DD. MM. YYYY",
- LL : "D. MMMM YYYY",
- LLL : "D. MMMM YYYY LT",
- LLLL : "dddd, D. MMMM YYYY LT"
- },
- calendar : {
- sameDay : '[danas u] LT',
- nextDay : '[sutra u] LT',
-
- nextWeek : function () {
- switch (this.day()) {
- case 0:
- return '[u] [nedjelju] [u] LT';
- case 3:
- return '[u] [srijedu] [u] LT';
- case 6:
- return '[u] [subotu] [u] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[u] dddd [u] LT';
- }
- },
- lastDay : '[juÄer u] LT',
- lastWeek : function () {
- switch (this.day()) {
- case 0:
- case 3:
- return '[prošlu] dddd [u] LT';
- case 6:
- return '[prošle] [subote] [u] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[prošli] dddd [u] LT';
- }
- },
- sameElse : 'L'
- },
- relativeTime : {
- future : "za %s",
- past : "prije %s",
- s : "par sekundi",
- m : translate,
- mm : translate,
- h : translate,
- hh : translate,
- d : "dan",
- dd : translate,
- M : "mjesec",
- MM : translate,
- y : "godinu",
- yy : translate
- },
- ordinal : '%d.',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 7 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : catalan (ca)
-// author : Juan G. Hurtado : https://github.com/juanghurtado
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('ca', {
- months : "Gener_Febrer_Març_Abril_Maig_Juny_Juliol_Agost_Setembre_Octubre_Novembre_Desembre".split("_"),
- monthsShort : "Gen._Febr._Mar._Abr._Mai._Jun._Jul._Ag._Set._Oct._Nov._Des.".split("_"),
- weekdays : "Diumenge_Dilluns_Dimarts_Dimecres_Dijous_Divendres_Dissabte".split("_"),
- weekdaysShort : "Dg._Dl._Dt._Dc._Dj._Dv._Ds.".split("_"),
- weekdaysMin : "Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),
- longDateFormat : {
- LT : "H:mm",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "dddd D MMMM YYYY LT"
- },
- calendar : {
- sameDay : function () {
- return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
- },
- nextDay : function () {
- return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
- },
- nextWeek : function () {
- return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
- },
- lastDay : function () {
- return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
- },
- lastWeek : function () {
- return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
- },
- sameElse : 'L'
- },
- relativeTime : {
- future : "en %s",
- past : "fa %s",
- s : "uns segons",
- m : "un minut",
- mm : "%d minuts",
- h : "una hora",
- hh : "%d hores",
- d : "un dia",
- dd : "%d dies",
- M : "un mes",
- MM : "%d mesos",
- y : "un any",
- yy : "%d anys"
- },
- ordinal : '%dº',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : czech (cs)
-// author : petrbela : https://github.com/petrbela
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- var months = "leden_únor_bÅ™ezen_duben_kvÄ›ten_Äerven_Äervenec_srpen_září_říjen_listopad_prosinec".split("_"),
- monthsShort = "led_úno_bÅ™e_dub_kvÄ›_Ävn_Ävc_srp_zář_říj_lis_pro".split("_");
-
- function plural(n) {
- return (n > 1) && (n < 5) && (~~(n / 10) !== 1);
- }
-
- function translate(number, withoutSuffix, key, isFuture) {
- var result = number + " ";
- switch (key) {
- case 's': // a few seconds / in a few seconds / a few seconds ago
- return (withoutSuffix || isFuture) ? 'pár vteřin' : 'pár vteřinami';
- case 'm': // a minute / in a minute / a minute ago
- return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');
- case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
- if (withoutSuffix || isFuture) {
- return result + (plural(number) ? 'minuty' : 'minut');
- } else {
- return result + 'minutami';
- }
- break;
- case 'h': // an hour / in an hour / an hour ago
- return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
- case 'hh': // 9 hours / in 9 hours / 9 hours ago
- if (withoutSuffix || isFuture) {
- return result + (plural(number) ? 'hodiny' : 'hodin');
- } else {
- return result + 'hodinami';
- }
- break;
- case 'd': // a day / in a day / a day ago
- return (withoutSuffix || isFuture) ? 'den' : 'dnem';
- case 'dd': // 9 days / in 9 days / 9 days ago
- if (withoutSuffix || isFuture) {
- return result + (plural(number) ? 'dny' : 'dní');
- } else {
- return result + 'dny';
- }
- break;
- case 'M': // a month / in a month / a month ago
- return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';
- case 'MM': // 9 months / in 9 months / 9 months ago
- if (withoutSuffix || isFuture) {
- return result + (plural(number) ? 'měsíce' : 'měsíců');
- } else {
- return result + 'měsíci';
- }
- break;
- case 'y': // a year / in a year / a year ago
- return (withoutSuffix || isFuture) ? 'rok' : 'rokem';
- case 'yy': // 9 years / in 9 years / 9 years ago
- if (withoutSuffix || isFuture) {
- return result + (plural(number) ? 'roky' : 'let');
- } else {
- return result + 'lety';
- }
- break;
- }
- }
-
- return moment.lang('cs', {
- months : months,
- monthsShort : monthsShort,
- monthsParse : (function (months, monthsShort) {
- var i, _monthsParse = [];
- for (i = 0; i < 12; i++) {
- // use custom parser to solve problem with July (Äervenec)
- _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');
- }
- return _monthsParse;
- }(months, monthsShort)),
- weekdays : "nedÄ›le_pondÄ›lí_úterý_stÅ™eda_Ätvrtek_pátek_sobota".split("_"),
- weekdaysShort : "ne_po_út_st_Ät_pá_so".split("_"),
- weekdaysMin : "ne_po_út_st_Ät_pá_so".split("_"),
- longDateFormat : {
- LT: "H:mm",
- L : "DD.MM.YYYY",
- LL : "D. MMMM YYYY",
- LLL : "D. MMMM YYYY LT",
- LLLL : "dddd D. MMMM YYYY LT"
- },
- calendar : {
- sameDay: "[dnes v] LT",
- nextDay: '[zítra v] LT',
- nextWeek: function () {
- switch (this.day()) {
- case 0:
- return '[v neděli v] LT';
- case 1:
- case 2:
- return '[v] dddd [v] LT';
- case 3:
- return '[ve středu v] LT';
- case 4:
- return '[ve Ätvrtek v] LT';
- case 5:
- return '[v pátek v] LT';
- case 6:
- return '[v sobotu v] LT';
- }
- },
- lastDay: '[vÄera v] LT',
- lastWeek: function () {
- switch (this.day()) {
- case 0:
- return '[minulou neděli v] LT';
- case 1:
- case 2:
- return '[minulé] dddd [v] LT';
- case 3:
- return '[minulou středu v] LT';
- case 4:
- case 5:
- return '[minulý] dddd [v] LT';
- case 6:
- return '[minulou sobotu v] LT';
- }
- },
- sameElse: "L"
- },
- relativeTime : {
- future : "za %s",
- past : "před %s",
- s : translate,
- m : translate,
- mm : translate,
- h : translate,
- hh : translate,
- d : translate,
- dd : translate,
- M : translate,
- MM : translate,
- y : translate,
- yy : translate
- },
- ordinal : '%d.',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : chuvash (cv)
-// author : Anatoly Mironov : https://github.com/mirontoli
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('cv', {
- months : "кăрлач_нарăÑ_пуш_ака_май_çĕртме_утă_çурла_авăн_юпа_чӳк_раштав".split("_"),
- monthsShort : "кăр_нар_пуш_ака_май_çĕр_утă_çур_ав_юпа_чӳк_раш".split("_"),
- weekdays : "вырÑарникун_тунтикун_ытларикун_юнкун_кĕçнерникун_Ñрнекун_шăматкун".split("_"),
- weekdaysShort : "выр_тун_ытл_юн_кĕç_Ñрн_шăм".split("_"),
- weekdaysMin : "вр_тн_Ñ‹Ñ‚_юн_кç_ÑÑ€_шм".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "DD-MM-YYYY",
- LL : "YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ]",
- LLL : "YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT",
- LLLL : "dddd, YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT"
- },
- calendar : {
- sameDay: '[ПаÑн] LT [Ñехетре]',
- nextDay: '[Ыран] LT [Ñехетре]',
- lastDay: '[Ĕнер] LT [Ñехетре]',
- nextWeek: '[ÇитеÑ] dddd LT [Ñехетре]',
- lastWeek: '[Иртнĕ] dddd LT [Ñехетре]',
- sameElse: 'L'
- },
- relativeTime : {
- future : function (output) {
- var affix = /Ñехет$/i.exec(output) ? "рен" : /çул$/i.exec(output) ? "тан" : "ран";
- return output + affix;
- },
- past : "%s каÑлла",
- s : "пĕр-ик çеккунт",
- m : "пĕр минут",
- mm : "%d минут",
- h : "пĕр Ñехет",
- hh : "%d Ñехет",
- d : "пĕр кун",
- dd : "%d кун",
- M : "пĕр уйăх",
- MM : "%d уйăх",
- y : "пĕр çул",
- yy : "%d çул"
- },
- ordinal : '%d-мĕш',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 7 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : Welsh (cy)
-// author : Robert Allen
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang("cy", {
- months: "Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),
- monthsShort: "Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),
- weekdays: "Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),
- weekdaysShort: "Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),
- weekdaysMin: "Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),
- // time formats are the same as en-gb
- longDateFormat: {
- LT: "HH:mm",
- L: "DD/MM/YYYY",
- LL: "D MMMM YYYY",
- LLL: "D MMMM YYYY LT",
- LLLL: "dddd, D MMMM YYYY LT"
- },
- calendar: {
- sameDay: '[Heddiw am] LT',
- nextDay: '[Yfory am] LT',
- nextWeek: 'dddd [am] LT',
- lastDay: '[Ddoe am] LT',
- lastWeek: 'dddd [diwethaf am] LT',
- sameElse: 'L'
- },
- relativeTime: {
- future: "mewn %s",
- past: "%s yn &#244;l",
- s: "ychydig eiliadau",
- m: "munud",
- mm: "%d munud",
- h: "awr",
- hh: "%d awr",
- d: "diwrnod",
- dd: "%d diwrnod",
- M: "mis",
- MM: "%d mis",
- y: "blwyddyn",
- yy: "%d flynedd"
- },
- // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
- ordinal: function (number) {
- var b = number,
- output = '',
- lookup = [
- '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed
- 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed
- ];
-
- if (b > 20) {
- if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
- output = 'fed'; // not 30ain, 70ain or 90ain
- } else {
- output = 'ain';
- }
- } else if (b > 0) {
- output = lookup[b];
- }
-
- return number + output;
- },
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : danish (da)
-// author : Ulrik Nielsen : https://github.com/mrbase
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('da', {
- months : "januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),
- monthsShort : "jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),
- weekdays : "søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),
- weekdaysShort : "søn_man_tir_ons_tor_fre_lør".split("_"),
- weekdaysMin : "sø_ma_ti_on_to_fr_lø".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "dddd D. MMMM, YYYY LT"
- },
- calendar : {
- sameDay : '[I dag kl.] LT',
- nextDay : '[I morgen kl.] LT',
- nextWeek : 'dddd [kl.] LT',
- lastDay : '[I går kl.] LT',
- lastWeek : '[sidste] dddd [kl] LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "om %s",
- past : "%s siden",
- s : "få sekunder",
- m : "et minut",
- mm : "%d minutter",
- h : "en time",
- hh : "%d timer",
- d : "en dag",
- dd : "%d dage",
- M : "en måned",
- MM : "%d måneder",
- y : "et år",
- yy : "%d år"
- },
- ordinal : '%d.',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : german (de)
-// author : lluchs : https://github.com/lluchs
-// author: Menelion Elensúle: https://github.com/Oire
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- function processRelativeTime(number, withoutSuffix, key, isFuture) {
- var format = {
- 'm': ['eine Minute', 'einer Minute'],
- 'h': ['eine Stunde', 'einer Stunde'],
- 'd': ['ein Tag', 'einem Tag'],
- 'dd': [number + ' Tage', number + ' Tagen'],
- 'M': ['ein Monat', 'einem Monat'],
- 'MM': [number + ' Monate', number + ' Monaten'],
- 'y': ['ein Jahr', 'einem Jahr'],
- 'yy': [number + ' Jahre', number + ' Jahren']
- };
- return withoutSuffix ? format[key][0] : format[key][1];
- }
-
- return moment.lang('de', {
- months : "Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),
- monthsShort : "Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),
- weekdays : "Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),
- weekdaysShort : "So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),
- weekdaysMin : "So_Mo_Di_Mi_Do_Fr_Sa".split("_"),
- longDateFormat : {
- LT: "H:mm [Uhr]",
- L : "DD.MM.YYYY",
- LL : "D. MMMM YYYY",
- LLL : "D. MMMM YYYY LT",
- LLLL : "dddd, D. MMMM YYYY LT"
- },
- calendar : {
- sameDay: "[Heute um] LT",
- sameElse: "L",
- nextDay: '[Morgen um] LT',
- nextWeek: 'dddd [um] LT',
- lastDay: '[Gestern um] LT',
- lastWeek: '[letzten] dddd [um] LT'
- },
- relativeTime : {
- future : "in %s",
- past : "vor %s",
- s : "ein paar Sekunden",
- m : processRelativeTime,
- mm : "%d Minuten",
- h : processRelativeTime,
- hh : "%d Stunden",
- d : processRelativeTime,
- dd : processRelativeTime,
- M : processRelativeTime,
- MM : processRelativeTime,
- y : processRelativeTime,
- yy : processRelativeTime
- },
- ordinal : '%d.',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : modern greek (el)
-// author : Aggelos Karalias : https://github.com/mehiel
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('el', {
- monthsNominativeEl : "ΙανουάÏιος_ΦεβÏουάÏιος_ΜάÏτιος_ΑπÏίλιος_Μάιος_ΙοÏνιος_ΙοÏλιος_ΑÏγουστος_ΣεπτέμβÏιος_ΟκτώβÏιος_ÎοέμβÏιος_ΔεκέμβÏιος".split("_"),
- monthsGenitiveEl : "ΙανουαÏίου_ΦεβÏουαÏίου_ΜαÏτίου_ΑπÏιλίου_ΜαÎου_Ιουνίου_Ιουλίου_ΑυγοÏστου_ΣεπτεμβÏίου_ΟκτωβÏίου_ÎοεμβÏίου_ΔεκεμβÏίου".split("_"),
- months : function (momentToFormat, format) {
- if (/D/.test(format.substring(0, format.indexOf("MMMM")))) { // if there is a day number before 'MMMM'
- return this._monthsGenitiveEl[momentToFormat.month()];
- } else {
- return this._monthsNominativeEl[momentToFormat.month()];
- }
- },
- monthsShort : "Ιαν_Φεβ_ΜαÏ_ΑπÏ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Îοε_Δεκ".split("_"),
- weekdays : "ΚυÏιακή_ΔευτέÏα_ΤÏίτη_ΤετάÏτη_Πέμπτη_ΠαÏασκευή_Σάββατο".split("_"),
- weekdaysShort : "ΚυÏ_Δευ_ΤÏι_Τετ_Πεμ_ΠαÏ_Σαβ".split("_"),
- weekdaysMin : "Κυ_Δε_ΤÏ_Τε_Πε_Πα_Σα".split("_"),
- meridiem : function (hours, minutes, isLower) {
- if (hours > 11) {
- return isLower ? 'μμ' : 'ΜΜ';
- } else {
- return isLower ? 'πμ' : 'ΠΜ';
- }
- },
- longDateFormat : {
- LT : "h:mm A",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "dddd, D MMMM YYYY LT"
- },
- calendarEl : {
- sameDay : '[ΣήμεÏα {}] LT',
- nextDay : '[ΑÏÏιο {}] LT',
- nextWeek : 'dddd [{}] LT',
- lastDay : '[Χθες {}] LT',
- lastWeek : '[την Ï€ÏοηγοÏμενη] dddd [{}] LT',
- sameElse : 'L'
- },
- calendar : function (key, mom) {
- var output = this._calendarEl[key],
- hours = mom && mom.hours();
-
- return output.replace("{}", (hours % 12 === 1 ? "στη" : "στις"));
- },
- relativeTime : {
- future : "σε %s",
- past : "%s Ï€Ïιν",
- s : "δευτεÏόλεπτα",
- m : "ένα λεπτό",
- mm : "%d λεπτά",
- h : "μία ÏŽÏα",
- hh : "%d ÏŽÏες",
- d : "μία μέÏα",
- dd : "%d μέÏες",
- M : "ένας μήνας",
- MM : "%d μήνες",
- y : "ένας χÏόνος",
- yy : "%d χÏόνια"
- },
- ordinal : function (number) {
- return number + 'η';
- },
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : australian english (en-au)
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('en-au', {
- months : "January_February_March_April_May_June_July_August_September_October_November_December".split("_"),
- monthsShort : "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),
- weekdays : "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
- weekdaysShort : "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),
- weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"),
- longDateFormat : {
- LT : "h:mm A",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "dddd, D MMMM YYYY LT"
- },
- calendar : {
- sameDay : '[Today at] LT',
- nextDay : '[Tomorrow at] LT',
- nextWeek : 'dddd [at] LT',
- lastDay : '[Yesterday at] LT',
- lastWeek : '[Last] dddd [at] LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "in %s",
- past : "%s ago",
- s : "a few seconds",
- m : "a minute",
- mm : "%d minutes",
- h : "an hour",
- hh : "%d hours",
- d : "a day",
- dd : "%d days",
- M : "a month",
- MM : "%d months",
- y : "a year",
- yy : "%d years"
- },
- ordinal : function (number) {
- var b = number % 10,
- output = (~~ (number % 100 / 10) === 1) ? 'th' :
- (b === 1) ? 'st' :
- (b === 2) ? 'nd' :
- (b === 3) ? 'rd' : 'th';
- return number + output;
- },
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : canadian english (en-ca)
-// author : Jonathan Abourbih : https://github.com/jonbca
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('en-ca', {
- months : "January_February_March_April_May_June_July_August_September_October_November_December".split("_"),
- monthsShort : "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),
- weekdays : "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
- weekdaysShort : "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),
- weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"),
- longDateFormat : {
- LT : "h:mm A",
- L : "YYYY-MM-DD",
- LL : "D MMMM, YYYY",
- LLL : "D MMMM, YYYY LT",
- LLLL : "dddd, D MMMM, YYYY LT"
- },
- calendar : {
- sameDay : '[Today at] LT',
- nextDay : '[Tomorrow at] LT',
- nextWeek : 'dddd [at] LT',
- lastDay : '[Yesterday at] LT',
- lastWeek : '[Last] dddd [at] LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "in %s",
- past : "%s ago",
- s : "a few seconds",
- m : "a minute",
- mm : "%d minutes",
- h : "an hour",
- hh : "%d hours",
- d : "a day",
- dd : "%d days",
- M : "a month",
- MM : "%d months",
- y : "a year",
- yy : "%d years"
- },
- ordinal : function (number) {
- var b = number % 10,
- output = (~~ (number % 100 / 10) === 1) ? 'th' :
- (b === 1) ? 'st' :
- (b === 2) ? 'nd' :
- (b === 3) ? 'rd' : 'th';
- return number + output;
- }
- });
-}));
-// moment.js language configuration
-// language : great britain english (en-gb)
-// author : Chris Gedrim : https://github.com/chrisgedrim
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('en-gb', {
- months : "January_February_March_April_May_June_July_August_September_October_November_December".split("_"),
- monthsShort : "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),
- weekdays : "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
- weekdaysShort : "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),
- weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "dddd, D MMMM YYYY LT"
- },
- calendar : {
- sameDay : '[Today at] LT',
- nextDay : '[Tomorrow at] LT',
- nextWeek : 'dddd [at] LT',
- lastDay : '[Yesterday at] LT',
- lastWeek : '[Last] dddd [at] LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "in %s",
- past : "%s ago",
- s : "a few seconds",
- m : "a minute",
- mm : "%d minutes",
- h : "an hour",
- hh : "%d hours",
- d : "a day",
- dd : "%d days",
- M : "a month",
- MM : "%d months",
- y : "a year",
- yy : "%d years"
- },
- ordinal : function (number) {
- var b = number % 10,
- output = (~~ (number % 100 / 10) === 1) ? 'th' :
- (b === 1) ? 'st' :
- (b === 2) ? 'nd' :
- (b === 3) ? 'rd' : 'th';
- return number + output;
- },
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : esperanto (eo)
-// author : Colin Dean : https://github.com/colindean
-// komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko.
-// Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni!
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('eo', {
- months : "januaro_februaro_marto_aprilo_majo_junio_julio_aÅ­gusto_septembro_oktobro_novembro_decembro".split("_"),
- monthsShort : "jan_feb_mar_apr_maj_jun_jul_aÅ­g_sep_okt_nov_dec".split("_"),
- weekdays : "Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato".split("_"),
- weekdaysShort : "Dim_Lun_Mard_Merk_Ä´aÅ­_Ven_Sab".split("_"),
- weekdaysMin : "Di_Lu_Ma_Me_Ä´a_Ve_Sa".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "YYYY-MM-DD",
- LL : "D[-an de] MMMM, YYYY",
- LLL : "D[-an de] MMMM, YYYY LT",
- LLLL : "dddd, [la] D[-an de] MMMM, YYYY LT"
- },
- meridiem : function (hours, minutes, isLower) {
- if (hours > 11) {
- return isLower ? 'p.t.m.' : 'P.T.M.';
- } else {
- return isLower ? 'a.t.m.' : 'A.T.M.';
- }
- },
- calendar : {
- sameDay : '[HodiaÅ­ je] LT',
- nextDay : '[MorgaÅ­ je] LT',
- nextWeek : 'dddd [je] LT',
- lastDay : '[HieraÅ­ je] LT',
- lastWeek : '[pasinta] dddd [je] LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "je %s",
- past : "antaÅ­ %s",
- s : "sekundoj",
- m : "minuto",
- mm : "%d minutoj",
- h : "horo",
- hh : "%d horoj",
- d : "tago",//ne 'diurno', ĉar estas uzita por proksimumo
- dd : "%d tagoj",
- M : "monato",
- MM : "%d monatoj",
- y : "jaro",
- yy : "%d jaroj"
- },
- ordinal : "%da",
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 7 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : spanish (es)
-// author : Julio Napurí : https://github.com/julionc
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('es', {
- months : "enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),
- monthsShort : "ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),
- weekdays : "domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),
- weekdaysShort : "dom._lun._mar._mié._jue._vie._sáb.".split("_"),
- weekdaysMin : "Do_Lu_Ma_Mi_Ju_Vi_Sá".split("_"),
- longDateFormat : {
- LT : "H:mm",
- L : "DD/MM/YYYY",
- LL : "D [de] MMMM [de] YYYY",
- LLL : "D [de] MMMM [de] YYYY LT",
- LLLL : "dddd, D [de] MMMM [de] YYYY LT"
- },
- calendar : {
- sameDay : function () {
- return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
- },
- nextDay : function () {
- return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
- },
- nextWeek : function () {
- return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
- },
- lastDay : function () {
- return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
- },
- lastWeek : function () {
- return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
- },
- sameElse : 'L'
- },
- relativeTime : {
- future : "en %s",
- past : "hace %s",
- s : "unos segundos",
- m : "un minuto",
- mm : "%d minutos",
- h : "una hora",
- hh : "%d horas",
- d : "un día",
- dd : "%d días",
- M : "un mes",
- MM : "%d meses",
- y : "un año",
- yy : "%d años"
- },
- ordinal : '%dº',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : estonian (et)
-// author : Henry Kehlmann : https://github.com/madhenry
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- function translateSeconds(number, withoutSuffix, key, isFuture) {
- return (isFuture || withoutSuffix) ? 'paari sekundi' : 'paar sekundit';
- }
-
- return moment.lang('et', {
- months : "jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),
- monthsShort : "jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),
- weekdays : "pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),
- weekdaysShort : "P_E_T_K_N_R_L".split("_"),
- weekdaysMin : "P_E_T_K_N_R_L".split("_"),
- longDateFormat : {
- LT : "H:mm",
- L : "DD.MM.YYYY",
- LL : "D. MMMM YYYY",
- LLL : "D. MMMM YYYY LT",
- LLLL : "dddd, D. MMMM YYYY LT"
- },
- calendar : {
- sameDay : '[Täna,] LT',
- nextDay : '[Homme,] LT',
- nextWeek : '[Järgmine] dddd LT',
- lastDay : '[Eile,] LT',
- lastWeek : '[Eelmine] dddd LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "%s pärast",
- past : "%s tagasi",
- s : translateSeconds,
- m : "minut",
- mm : "%d minutit",
- h : "tund",
- hh : "%d tundi",
- d : "päev",
- dd : "%d päeva",
- M : "kuu",
- MM : "%d kuud",
- y : "aasta",
- yy : "%d aastat"
- },
- ordinal : '%d.',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : euskara (eu)
-// author : Eneko Illarramendi : https://github.com/eillarra
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('eu', {
- months : "urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),
- monthsShort : "urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),
- weekdays : "igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),
- weekdaysShort : "ig._al._ar._az._og._ol._lr.".split("_"),
- weekdaysMin : "ig_al_ar_az_og_ol_lr".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "YYYY-MM-DD",
- LL : "YYYY[ko] MMMM[ren] D[a]",
- LLL : "YYYY[ko] MMMM[ren] D[a] LT",
- LLLL : "dddd, YYYY[ko] MMMM[ren] D[a] LT",
- l : "YYYY-M-D",
- ll : "YYYY[ko] MMM D[a]",
- lll : "YYYY[ko] MMM D[a] LT",
- llll : "ddd, YYYY[ko] MMM D[a] LT"
- },
- calendar : {
- sameDay : '[gaur] LT[etan]',
- nextDay : '[bihar] LT[etan]',
- nextWeek : 'dddd LT[etan]',
- lastDay : '[atzo] LT[etan]',
- lastWeek : '[aurreko] dddd LT[etan]',
- sameElse : 'L'
- },
- relativeTime : {
- future : "%s barru",
- past : "duela %s",
- s : "segundo batzuk",
- m : "minutu bat",
- mm : "%d minutu",
- h : "ordu bat",
- hh : "%d ordu",
- d : "egun bat",
- dd : "%d egun",
- M : "hilabete bat",
- MM : "%d hilabete",
- y : "urte bat",
- yy : "%d urte"
- },
- ordinal : '%d.',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 7 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : Persian Language
-// author : Ebrahim Byagowi : https://github.com/ebraminio
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- var symbolMap = {
- '1': 'Û±',
- '2': 'Û²',
- '3': 'Û³',
- '4': 'Û´',
- '5': 'Ûµ',
- '6': 'Û¶',
- '7': 'Û·',
- '8': 'Û¸',
- '9': 'Û¹',
- '0': 'Û°'
- }, numberMap = {
- 'Û±': '1',
- 'Û²': '2',
- 'Û³': '3',
- 'Û´': '4',
- 'Ûµ': '5',
- 'Û¶': '6',
- 'Û·': '7',
- 'Û¸': '8',
- 'Û¹': '9',
- 'Û°': '0'
- };
-
- return moment.lang('fa', {
- months : 'ژانویه_Ùوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
- monthsShort : 'ژانویه_Ùوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
- weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
- weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
- weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),
- longDateFormat : {
- LT : 'HH:mm',
- L : 'DD/MM/YYYY',
- LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
- },
- meridiem : function (hour, minute, isLower) {
- if (hour < 12) {
- return "قبل از ظهر";
- } else {
- return "بعد از ظهر";
- }
- },
- calendar : {
- sameDay : '[امروز ساعت] LT',
- nextDay : '[Ùردا ساعت] LT',
- nextWeek : 'dddd [ساعت] LT',
- lastDay : '[دیروز ساعت] LT',
- lastWeek : 'dddd [پیش] [ساعت] LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : 'در %s',
- past : '%s پیش',
- s : 'چندین ثانیه',
- m : 'یک دقیقه',
- mm : '%d دقیقه',
- h : 'یک ساعت',
- hh : '%d ساعت',
- d : 'یک روز',
- dd : '%d روز',
- M : 'یک ماه',
- MM : '%d ماه',
- y : 'یک سال',
- yy : '%d سال'
- },
- preparse: function (string) {
- return string.replace(/[Û°-Û¹]/g, function (match) {
- return numberMap[match];
- }).replace(/،/g, ',');
- },
- postformat: function (string) {
- return string.replace(/\d/g, function (match) {
- return symbolMap[match];
- }).replace(/,/g, '،');
- },
- ordinal : '%dÙ…',
- week : {
- dow : 6, // Saturday is the first day of the week.
- doy : 12 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : finnish (fi)
-// author : Tarmo Aidantausta : https://github.com/bleadof
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- var numbers_past = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),
- numbers_future = ['nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',
- numbers_past[7], numbers_past[8], numbers_past[9]];
-
- function translate(number, withoutSuffix, key, isFuture) {
- var result = "";
- switch (key) {
- case 's':
- return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
- case 'm':
- return isFuture ? 'minuutin' : 'minuutti';
- case 'mm':
- result = isFuture ? 'minuutin' : 'minuuttia';
- break;
- case 'h':
- return isFuture ? 'tunnin' : 'tunti';
- case 'hh':
- result = isFuture ? 'tunnin' : 'tuntia';
- break;
- case 'd':
- return isFuture ? 'päivän' : 'päivä';
- case 'dd':
- result = isFuture ? 'päivän' : 'päivää';
- break;
- case 'M':
- return isFuture ? 'kuukauden' : 'kuukausi';
- case 'MM':
- result = isFuture ? 'kuukauden' : 'kuukautta';
- break;
- case 'y':
- return isFuture ? 'vuoden' : 'vuosi';
- case 'yy':
- result = isFuture ? 'vuoden' : 'vuotta';
- break;
- }
- result = verbal_number(number, isFuture) + " " + result;
- return result;
- }
-
- function verbal_number(number, isFuture) {
- return number < 10 ? (isFuture ? numbers_future[number] : numbers_past[number]) : number;
- }
-
- return moment.lang('fi', {
- months : "tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),
- monthsShort : "tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),
- weekdays : "sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),
- weekdaysShort : "su_ma_ti_ke_to_pe_la".split("_"),
- weekdaysMin : "su_ma_ti_ke_to_pe_la".split("_"),
- longDateFormat : {
- LT : "HH.mm",
- L : "DD.MM.YYYY",
- LL : "Do MMMM[ta] YYYY",
- LLL : "Do MMMM[ta] YYYY, [klo] LT",
- LLLL : "dddd, Do MMMM[ta] YYYY, [klo] LT",
- l : "D.M.YYYY",
- ll : "Do MMM YYYY",
- lll : "Do MMM YYYY, [klo] LT",
- llll : "ddd, Do MMM YYYY, [klo] LT"
- },
- calendar : {
- sameDay : '[tänään] [klo] LT',
- nextDay : '[huomenna] [klo] LT',
- nextWeek : 'dddd [klo] LT',
- lastDay : '[eilen] [klo] LT',
- lastWeek : '[viime] dddd[na] [klo] LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "%s päästä",
- past : "%s sitten",
- s : translate,
- m : translate,
- mm : translate,
- h : translate,
- hh : translate,
- d : translate,
- dd : translate,
- M : translate,
- MM : translate,
- y : translate,
- yy : translate
- },
- ordinal : "%d.",
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : faroese (fo)
-// author : Ragnar Johannesen : https://github.com/ragnar123
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('fo', {
- months : "januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),
- monthsShort : "jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),
- weekdays : "sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),
- weekdaysShort : "sun_mán_týs_mik_hós_frí_ley".split("_"),
- weekdaysMin : "su_má_tý_mi_hó_fr_le".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "dddd D. MMMM, YYYY LT"
- },
- calendar : {
- sameDay : '[Ã dag kl.] LT',
- nextDay : '[Ã morgin kl.] LT',
- nextWeek : 'dddd [kl.] LT',
- lastDay : '[à gjár kl.] LT',
- lastWeek : '[síðstu] dddd [kl] LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "um %s",
- past : "%s síðani",
- s : "fá sekund",
- m : "ein minutt",
- mm : "%d minuttir",
- h : "ein tími",
- hh : "%d tímar",
- d : "ein dagur",
- dd : "%d dagar",
- M : "ein mánaði",
- MM : "%d mánaðir",
- y : "eitt ár",
- yy : "%d ár"
- },
- ordinal : '%d.',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : canadian french (fr-ca)
-// author : Jonathan Abourbih : https://github.com/jonbca
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('fr-ca', {
- months : "janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),
- monthsShort : "janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),
- weekdays : "dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),
- weekdaysShort : "dim._lun._mar._mer._jeu._ven._sam.".split("_"),
- weekdaysMin : "Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "YYYY-MM-DD",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "dddd D MMMM YYYY LT"
- },
- calendar : {
- sameDay: "[Aujourd'hui à] LT",
- nextDay: '[Demain à] LT',
- nextWeek: 'dddd [à] LT',
- lastDay: '[Hier à] LT',
- lastWeek: 'dddd [dernier à] LT',
- sameElse: 'L'
- },
- relativeTime : {
- future : "dans %s",
- past : "il y a %s",
- s : "quelques secondes",
- m : "une minute",
- mm : "%d minutes",
- h : "une heure",
- hh : "%d heures",
- d : "un jour",
- dd : "%d jours",
- M : "un mois",
- MM : "%d mois",
- y : "un an",
- yy : "%d ans"
- },
- ordinal : function (number) {
- return number + (number === 1 ? 'er' : '');
- }
- });
-}));
-// moment.js language configuration
-// language : french (fr)
-// author : John Fischer : https://github.com/jfroffice
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('fr', {
- months : "janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),
- monthsShort : "janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),
- weekdays : "dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),
- weekdaysShort : "dim._lun._mar._mer._jeu._ven._sam.".split("_"),
- weekdaysMin : "Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "dddd D MMMM YYYY LT"
- },
- calendar : {
- sameDay: "[Aujourd'hui à] LT",
- nextDay: '[Demain à] LT',
- nextWeek: 'dddd [à] LT',
- lastDay: '[Hier à] LT',
- lastWeek: 'dddd [dernier à] LT',
- sameElse: 'L'
- },
- relativeTime : {
- future : "dans %s",
- past : "il y a %s",
- s : "quelques secondes",
- m : "une minute",
- mm : "%d minutes",
- h : "une heure",
- hh : "%d heures",
- d : "un jour",
- dd : "%d jours",
- M : "un mois",
- MM : "%d mois",
- y : "un an",
- yy : "%d ans"
- },
- ordinal : function (number) {
- return number + (number === 1 ? 'er' : '');
- },
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : galician (gl)
-// author : Juan G. Hurtado : https://github.com/juanghurtado
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('gl', {
- months : "Xaneiro_Febreiro_Marzo_Abril_Maio_Xuño_Xullo_Agosto_Setembro_Outubro_Novembro_Decembro".split("_"),
- monthsShort : "Xan._Feb._Mar._Abr._Mai._Xuñ._Xul._Ago._Set._Out._Nov._Dec.".split("_"),
- weekdays : "Domingo_Luns_Martes_Mércores_Xoves_Venres_Sábado".split("_"),
- weekdaysShort : "Dom._Lun._Mar._Mér._Xov._Ven._Sáb.".split("_"),
- weekdaysMin : "Do_Lu_Ma_Mé_Xo_Ve_Sá".split("_"),
- longDateFormat : {
- LT : "H:mm",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "dddd D MMMM YYYY LT"
- },
- calendar : {
- sameDay : function () {
- return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';
- },
- nextDay : function () {
- return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';
- },
- nextWeek : function () {
- return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';
- },
- lastDay : function () {
- return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';
- },
- lastWeek : function () {
- return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';
- },
- sameElse : 'L'
- },
- relativeTime : {
- future : function (str) {
- if (str === "uns segundos") {
- return "nuns segundos";
- }
- return "en " + str;
- },
- past : "hai %s",
- s : "uns segundos",
- m : "un minuto",
- mm : "%d minutos",
- h : "unha hora",
- hh : "%d horas",
- d : "un día",
- dd : "%d días",
- M : "un mes",
- MM : "%d meses",
- y : "un ano",
- yy : "%d anos"
- },
- ordinal : '%dº',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 7 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : Hebrew (he)
-// author : Tomer Cohen : https://github.com/tomer
-// author : Moshe Simantov : https://github.com/DevelopmentIL
-// author : Tal Ater : https://github.com/TalAter
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('he', {
- months : "ינו×ר_פברו×ר_מרץ_×פריל_מ××™_יוני_יולי_×וגוסט_ספטמבר_×וקטובר_נובמבר_דצמבר".split("_"),
- monthsShort : "ינו׳_פבר׳_מרץ_×פר׳_מ××™_יוני_יולי_×וג׳_ספט׳_×וק׳_נוב׳_דצמ׳".split("_"),
- weekdays : "ר×שון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),
- weekdaysShort : "×׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),
- weekdaysMin : "×_ב_×’_ד_×”_ו_ש".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "DD/MM/YYYY",
- LL : "D [ב]MMMM YYYY",
- LLL : "D [ב]MMMM YYYY LT",
- LLLL : "dddd, D [ב]MMMM YYYY LT",
- l : "D/M/YYYY",
- ll : "D MMM YYYY",
- lll : "D MMM YYYY LT",
- llll : "ddd, D MMM YYYY LT"
- },
- calendar : {
- sameDay : '[×”×™×•× ×‘Ö¾]LT',
- nextDay : '[מחר ב־]LT',
- nextWeek : 'dddd [בשעה] LT',
- lastDay : '[×תמול ב־]LT',
- lastWeek : '[ביו×] dddd [×”×חרון בשעה] LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "בעוד %s",
- past : "לפני %s",
- s : "מספר שניות",
- m : "דקה",
- mm : "%d דקות",
- h : "שעה",
- hh : function (number) {
- if (number === 2) {
- return "שעתיי×";
- }
- return number + " שעות";
- },
- d : "יו×",
- dd : function (number) {
- if (number === 2) {
- return "יומיי×";
- }
- return number + " ימי×";
- },
- M : "חודש",
- MM : function (number) {
- if (number === 2) {
- return "חודשיי×";
- }
- return number + " חודשי×";
- },
- y : "שנה",
- yy : function (number) {
- if (number === 2) {
- return "שנתיי×";
- }
- return number + " שני×";
- }
- }
- });
-}));
-// moment.js language configuration
-// language : hindi (hi)
-// author : Mayank Singhal : https://github.com/mayanksinghal
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- var symbolMap = {
- '1': '१',
- '2': '२',
- '3': '३',
- '4': '४',
- '5': '५',
- '6': '६',
- '7': '७',
- '8': '८',
- '9': '९',
- '0': '०'
- },
- numberMap = {
- '१': '1',
- '२': '2',
- '३': '3',
- '४': '4',
- '५': '5',
- '६': '6',
- '७': '7',
- '८': '8',
- '९': '9',
- '०': '0'
- };
-
- return moment.lang('hi', {
- months : 'जनवरी_फ़रवरी_मारà¥à¤š_अपà¥à¤°à¥ˆà¤²_मई_जून_जà¥à¤²à¤¾à¤ˆ_अगसà¥à¤¤_सितमà¥à¤¬à¤°_अकà¥à¤Ÿà¥‚बर_नवमà¥à¤¬à¤°_दिसमà¥à¤¬à¤°'.split("_"),
- monthsShort : 'जन._फ़र._मारà¥à¤š_अपà¥à¤°à¥ˆ._मई_जून_जà¥à¤²._अग._सित._अकà¥à¤Ÿà¥‚._नव._दिस.'.split("_"),
- weekdays : 'रविवार_सोमवार_मंगलवार_बà¥à¤§à¤µà¤¾à¤°_गà¥à¤°à¥‚वार_शà¥à¤•à¥à¤°à¤µà¤¾à¤°_शनिवार'.split("_"),
- weekdaysShort : 'रवि_सोम_मंगल_बà¥à¤§_गà¥à¤°à¥‚_शà¥à¤•à¥à¤°_शनि'.split("_"),
- weekdaysMin : 'र_सो_मं_बà¥_गà¥_शà¥_श'.split("_"),
- longDateFormat : {
- LT : "A h:mm बजे",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY, LT",
- LLLL : "dddd, D MMMM YYYY, LT"
- },
- calendar : {
- sameDay : '[आज] LT',
- nextDay : '[कल] LT',
- nextWeek : 'dddd, LT',
- lastDay : '[कल] LT',
- lastWeek : '[पिछले] dddd, LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "%s में",
- past : "%s पहले",
- s : "कà¥à¤› ही कà¥à¤·à¤£",
- m : "à¤à¤• मिनट",
- mm : "%d मिनट",
- h : "à¤à¤• घंटा",
- hh : "%d घंटे",
- d : "à¤à¤• दिन",
- dd : "%d दिन",
- M : "à¤à¤• महीने",
- MM : "%d महीने",
- y : "à¤à¤• वरà¥à¤·",
- yy : "%d वरà¥à¤·"
- },
- preparse: function (string) {
- return string.replace(/[१२३४५६७८९०]/g, function (match) {
- return numberMap[match];
- });
- },
- postformat: function (string) {
- return string.replace(/\d/g, function (match) {
- return symbolMap[match];
- });
- },
- // Hindi notation for meridiems are quite fuzzy in practice. While there exists
- // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
- meridiem : function (hour, minute, isLower) {
- if (hour < 4) {
- return "रात";
- } else if (hour < 10) {
- return "सà¥à¤¬à¤¹";
- } else if (hour < 17) {
- return "दोपहर";
- } else if (hour < 20) {
- return "शाम";
- } else {
- return "रात";
- }
- },
- week : {
- dow : 0, // Sunday is the first day of the week.
- doy : 6 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : hrvatski (hr)
-// author : Bojan Marković : https://github.com/bmarkovic
-
-// based on (sl) translation by Robert Sedovšek
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
-
- function translate(number, withoutSuffix, key) {
- var result = number + " ";
- switch (key) {
- case 'm':
- return withoutSuffix ? 'jedna minuta' : 'jedne minute';
- case 'mm':
- if (number === 1) {
- result += 'minuta';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'minute';
- } else {
- result += 'minuta';
- }
- return result;
- case 'h':
- return withoutSuffix ? 'jedan sat' : 'jednog sata';
- case 'hh':
- if (number === 1) {
- result += 'sat';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'sata';
- } else {
- result += 'sati';
- }
- return result;
- case 'dd':
- if (number === 1) {
- result += 'dan';
- } else {
- result += 'dana';
- }
- return result;
- case 'MM':
- if (number === 1) {
- result += 'mjesec';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'mjeseca';
- } else {
- result += 'mjeseci';
- }
- return result;
- case 'yy':
- if (number === 1) {
- result += 'godina';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'godine';
- } else {
- result += 'godina';
- }
- return result;
- }
- }
-
- return moment.lang('hr', {
- months : "sjeÄanj_veljaÄa_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_"),
- monthsShort : "sje._vel._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),
- weekdays : "nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota".split("_"),
- weekdaysShort : "ned._pon._uto._sri._Äet._pet._sub.".split("_"),
- weekdaysMin : "ne_po_ut_sr_Äe_pe_su".split("_"),
- longDateFormat : {
- LT : "H:mm",
- L : "DD. MM. YYYY",
- LL : "D. MMMM YYYY",
- LLL : "D. MMMM YYYY LT",
- LLLL : "dddd, D. MMMM YYYY LT"
- },
- calendar : {
- sameDay : '[danas u] LT',
- nextDay : '[sutra u] LT',
-
- nextWeek : function () {
- switch (this.day()) {
- case 0:
- return '[u] [nedjelju] [u] LT';
- case 3:
- return '[u] [srijedu] [u] LT';
- case 6:
- return '[u] [subotu] [u] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[u] dddd [u] LT';
- }
- },
- lastDay : '[juÄer u] LT',
- lastWeek : function () {
- switch (this.day()) {
- case 0:
- case 3:
- return '[prošlu] dddd [u] LT';
- case 6:
- return '[prošle] [subote] [u] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[prošli] dddd [u] LT';
- }
- },
- sameElse : 'L'
- },
- relativeTime : {
- future : "za %s",
- past : "prije %s",
- s : "par sekundi",
- m : translate,
- mm : translate,
- h : translate,
- hh : translate,
- d : "dan",
- dd : translate,
- M : "mjesec",
- MM : translate,
- y : "godinu",
- yy : translate
- },
- ordinal : '%d.',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 7 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : hungarian (hu)
-// author : Adam Brunner : https://github.com/adambrunner
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');
-
- function translate(number, withoutSuffix, key, isFuture) {
- var num = number,
- suffix;
-
- switch (key) {
- case 's':
- return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';
- case 'm':
- return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
- case 'mm':
- return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
- case 'h':
- return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');
- case 'hh':
- return num + (isFuture || withoutSuffix ? ' óra' : ' órája');
- case 'd':
- return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
- case 'dd':
- return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
- case 'M':
- return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
- case 'MM':
- return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
- case 'y':
- return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');
- case 'yy':
- return num + (isFuture || withoutSuffix ? ' év' : ' éve');
- }
-
- return '';
- }
-
- function week(isFuture) {
- return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';
- }
-
- return moment.lang('hu', {
- months : "január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),
- monthsShort : "jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),
- weekdays : "vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),
- weekdaysShort : "vas_hét_kedd_sze_csüt_pén_szo".split("_"),
- weekdaysMin : "v_h_k_sze_cs_p_szo".split("_"),
- longDateFormat : {
- LT : "H:mm",
- L : "YYYY.MM.DD.",
- LL : "YYYY. MMMM D.",
- LLL : "YYYY. MMMM D., LT",
- LLLL : "YYYY. MMMM D., dddd LT"
- },
- calendar : {
- sameDay : '[ma] LT[-kor]',
- nextDay : '[holnap] LT[-kor]',
- nextWeek : function () {
- return week.call(this, true);
- },
- lastDay : '[tegnap] LT[-kor]',
- lastWeek : function () {
- return week.call(this, false);
- },
- sameElse : 'L'
- },
- relativeTime : {
- future : "%s múlva",
- past : "%s",
- s : translate,
- m : translate,
- mm : translate,
- h : translate,
- hh : translate,
- d : translate,
- dd : translate,
- M : translate,
- MM : translate,
- y : translate,
- yy : translate
- },
- ordinal : '%d.',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 7 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : Bahasa Indonesia (id)
-// author : Mohammad Satrio Utomo : https://github.com/tyok
-// reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('id', {
- months : "Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),
- monthsShort : "Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),
- weekdays : "Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),
- weekdaysShort : "Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),
- weekdaysMin : "Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),
- longDateFormat : {
- LT : "HH.mm",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY [pukul] LT",
- LLLL : "dddd, D MMMM YYYY [pukul] LT"
- },
- meridiem : function (hours, minutes, isLower) {
- if (hours < 11) {
- return 'pagi';
- } else if (hours < 15) {
- return 'siang';
- } else if (hours < 19) {
- return 'sore';
- } else {
- return 'malam';
- }
- },
- calendar : {
- sameDay : '[Hari ini pukul] LT',
- nextDay : '[Besok pukul] LT',
- nextWeek : 'dddd [pukul] LT',
- lastDay : '[Kemarin pukul] LT',
- lastWeek : 'dddd [lalu pukul] LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "dalam %s",
- past : "%s yang lalu",
- s : "beberapa detik",
- m : "semenit",
- mm : "%d menit",
- h : "sejam",
- hh : "%d jam",
- d : "sehari",
- dd : "%d hari",
- M : "sebulan",
- MM : "%d bulan",
- y : "setahun",
- yy : "%d tahun"
- },
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 7 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : icelandic (is)
-// author : Hinrik Örn Sigurðsson : https://github.com/hinrik
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- function plural(n) {
- if (n % 100 === 11) {
- return true;
- } else if (n % 10 === 1) {
- return false;
- }
- return true;
- }
-
- function translate(number, withoutSuffix, key, isFuture) {
- var result = number + " ";
- switch (key) {
- case 's':
- return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';
- case 'm':
- return withoutSuffix ? 'mínúta' : 'mínútu';
- case 'mm':
- if (plural(number)) {
- return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');
- } else if (withoutSuffix) {
- return result + 'mínúta';
- }
- return result + 'mínútu';
- case 'hh':
- if (plural(number)) {
- return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');
- }
- return result + 'klukkustund';
- case 'd':
- if (withoutSuffix) {
- return 'dagur';
- }
- return isFuture ? 'dag' : 'degi';
- case 'dd':
- if (plural(number)) {
- if (withoutSuffix) {
- return result + 'dagar';
- }
- return result + (isFuture ? 'daga' : 'dögum');
- } else if (withoutSuffix) {
- return result + 'dagur';
- }
- return result + (isFuture ? 'dag' : 'degi');
- case 'M':
- if (withoutSuffix) {
- return 'mánuður';
- }
- return isFuture ? 'mánuð' : 'mánuði';
- case 'MM':
- if (plural(number)) {
- if (withoutSuffix) {
- return result + 'mánuðir';
- }
- return result + (isFuture ? 'mánuði' : 'mánuðum');
- } else if (withoutSuffix) {
- return result + 'mánuður';
- }
- return result + (isFuture ? 'mánuð' : 'mánuði');
- case 'y':
- return withoutSuffix || isFuture ? 'ár' : 'ári';
- case 'yy':
- if (plural(number)) {
- return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
- }
- return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
- }
- }
-
- return moment.lang('is', {
- months : "janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),
- monthsShort : "jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),
- weekdays : "sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),
- weekdaysShort : "sun_mán_þri_mið_fim_fös_lau".split("_"),
- weekdaysMin : "Su_Má_Þr_Mi_Fi_Fö_La".split("_"),
- longDateFormat : {
- LT : "H:mm",
- L : "DD/MM/YYYY",
- LL : "D. MMMM YYYY",
- LLL : "D. MMMM YYYY [kl.] LT",
- LLLL : "dddd, D. MMMM YYYY [kl.] LT"
- },
- calendar : {
- sameDay : '[í dag kl.] LT',
- nextDay : '[á morgun kl.] LT',
- nextWeek : 'dddd [kl.] LT',
- lastDay : '[í gær kl.] LT',
- lastWeek : '[síðasta] dddd [kl.] LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "eftir %s",
- past : "fyrir %s síðan",
- s : translate,
- m : translate,
- mm : translate,
- h : "klukkustund",
- hh : translate,
- d : translate,
- dd : translate,
- M : translate,
- MM : translate,
- y : translate,
- yy : translate
- },
- ordinal : '%d.',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : italian (it)
-// author : Lorenzo : https://github.com/aliem
-// author: Mattia Larentis: https://github.com/nostalgiaz
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('it', {
- months : "Gennaio_Febbraio_Marzo_Aprile_Maggio_Giugno_Luglio_Agosto_Settembre_Ottobre_Novembre_Dicembre".split("_"),
- monthsShort : "Gen_Feb_Mar_Apr_Mag_Giu_Lug_Ago_Set_Ott_Nov_Dic".split("_"),
- weekdays : "Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato".split("_"),
- weekdaysShort : "Dom_Lun_Mar_Mer_Gio_Ven_Sab".split("_"),
- weekdaysMin : "D_L_Ma_Me_G_V_S".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "dddd, D MMMM YYYY LT"
- },
- calendar : {
- sameDay: '[Oggi alle] LT',
- nextDay: '[Domani alle] LT',
- nextWeek: 'dddd [alle] LT',
- lastDay: '[Ieri alle] LT',
- lastWeek: '[lo scorso] dddd [alle] LT',
- sameElse: 'L'
- },
- relativeTime : {
- future : function (s) {
- return ((/^[0-9].+$/).test(s) ? "tra" : "in") + " " + s;
- },
- past : "%s fa",
- s : "secondi",
- m : "un minuto",
- mm : "%d minuti",
- h : "un'ora",
- hh : "%d ore",
- d : "un giorno",
- dd : "%d giorni",
- M : "un mese",
- MM : "%d mesi",
- y : "un anno",
- yy : "%d anni"
- },
- ordinal: '%dº',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : japanese (ja)
-// author : LI Long : https://github.com/baryon
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('ja', {
- months : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),
- monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),
- weekdays : "日曜日_月曜日_ç«æ›œæ—¥_水曜日_木曜日_金曜日_土曜日".split("_"),
- weekdaysShort : "æ—¥_月_ç«_æ°´_木_金_土".split("_"),
- weekdaysMin : "æ—¥_月_ç«_æ°´_木_金_土".split("_"),
- longDateFormat : {
- LT : "Ah時m分",
- L : "YYYY/MM/DD",
- LL : "YYYY年M月D日",
- LLL : "YYYY年M月D日LT",
- LLLL : "YYYY年M月D日LT dddd"
- },
- meridiem : function (hour, minute, isLower) {
- if (hour < 12) {
- return "åˆå‰";
- } else {
- return "åˆå¾Œ";
- }
- },
- calendar : {
- sameDay : '[今日] LT',
- nextDay : '[明日] LT',
- nextWeek : '[æ¥é€±]dddd LT',
- lastDay : '[昨日] LT',
- lastWeek : '[å‰é€±]dddd LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "%s後",
- past : "%så‰",
- s : "数秒",
- m : "1分",
- mm : "%d分",
- h : "1時間",
- hh : "%d時間",
- d : "1æ—¥",
- dd : "%dæ—¥",
- M : "1ヶ月",
- MM : "%dヶ月",
- y : "1å¹´",
- yy : "%då¹´"
- }
- });
-}));
-// moment.js language configuration
-// language : Georgian (ka)
-// author : Irakli Janiashvili : https://github.com/irakli-janiashvili
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
-
- function monthsCaseReplace(m, format) {
- var months = {
- 'nominative': 'იáƒáƒœáƒ•áƒáƒ áƒ˜_თებერვáƒáƒšáƒ˜_მáƒáƒ áƒ¢áƒ˜_áƒáƒžáƒ áƒ˜áƒšáƒ˜_მáƒáƒ˜áƒ¡áƒ˜_ივნისი_ივლისი_áƒáƒ’ვისტáƒ_სექტემბერი_áƒáƒ¥áƒ¢áƒáƒ›áƒ‘ერი_ნáƒáƒ”მბერი_დეკემბერი'.split('_'),
- 'accusative': 'იáƒáƒœáƒ•áƒáƒ áƒ¡_თებერვáƒáƒšáƒ¡_მáƒáƒ áƒ¢áƒ¡_áƒáƒžáƒ áƒ˜áƒšáƒ˜áƒ¡_მáƒáƒ˜áƒ¡áƒ¡_ივნისს_ივლისს_áƒáƒ’ვისტს_სექტემბერს_áƒáƒ¥áƒ¢áƒáƒ›áƒ‘ერს_ნáƒáƒ”მბერს_დეკემბერს'.split('_')
- },
-
- nounCase = (/D[oD] *MMMM?/).test(format) ?
- 'accusative' :
- 'nominative';
-
- return months[nounCase][m.month()];
- }
-
- function weekdaysCaseReplace(m, format) {
- var weekdays = {
- 'nominative': 'კვირáƒ_áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—ი_სáƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—ი_áƒáƒ—ხშáƒáƒ‘áƒáƒ—ი_ხუთშáƒáƒ‘áƒáƒ—ი_პáƒáƒ áƒáƒ¡áƒ™áƒ”ვი_შáƒáƒ‘áƒáƒ—ი'.split('_'),
- 'accusative': 'კვირáƒáƒ¡_áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—ს_სáƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—ს_áƒáƒ—ხშáƒáƒ‘áƒáƒ—ს_ხუთშáƒáƒ‘áƒáƒ—ს_პáƒáƒ áƒáƒ¡áƒ™áƒ”ვს_შáƒáƒ‘áƒáƒ—ს'.split('_')
- },
-
- nounCase = (/(წინáƒ|შემდეგ)/).test(format) ?
- 'accusative' :
- 'nominative';
-
- return weekdays[nounCase][m.day()];
- }
-
- return moment.lang('ka', {
- months : monthsCaseReplace,
- monthsShort : "იáƒáƒœ_თებ_მáƒáƒ _áƒáƒžáƒ _მáƒáƒ˜_ივნ_ივლ_áƒáƒ’ვ_სექ_áƒáƒ¥áƒ¢_ნáƒáƒ”_დეკ".split("_"),
- weekdays : weekdaysCaseReplace,
- weekdaysShort : "კვი_áƒáƒ áƒ¨_სáƒáƒ›_áƒáƒ—ხ_ხუთ_პáƒáƒ _შáƒáƒ‘".split("_"),
- weekdaysMin : "კვ_áƒáƒ _სáƒ_áƒáƒ—_ხუ_პáƒ_შáƒ".split("_"),
- longDateFormat : {
- LT : "h:mm A",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "dddd, D MMMM YYYY LT"
- },
- calendar : {
- sameDay : '[დღეს] LT[-ზე]',
- nextDay : '[ხვáƒáƒš] LT[-ზე]',
- lastDay : '[გუშინ] LT[-ზე]',
- nextWeek : '[შემდეგ] dddd LT[-ზე]',
- lastWeek : '[წინáƒ] dddd LT-ზე',
- sameElse : 'L'
- },
- relativeTime : {
- future : function (s) {
- return (/(წáƒáƒ›áƒ˜|წუთი|სáƒáƒáƒ—ი|წელი)/).test(s) ?
- s.replace(/ი$/, "ში") :
- s + "ში";
- },
- past : function (s) {
- if ((/(წáƒáƒ›áƒ˜|წუთი|სáƒáƒáƒ—ი|დღე|თვე)/).test(s)) {
- return s.replace(/(ი|ე)$/, "ის წინ");
- }
- if ((/წელი/).test(s)) {
- return s.replace(/წელი$/, "წლის წინ");
- }
- },
- s : "რáƒáƒ›áƒ“ენიმე წáƒáƒ›áƒ˜",
- m : "წუთი",
- mm : "%d წუთი",
- h : "სáƒáƒáƒ—ი",
- hh : "%d სáƒáƒáƒ—ი",
- d : "დღე",
- dd : "%d დღე",
- M : "თვე",
- MM : "%d თვე",
- y : "წელი",
- yy : "%d წელი"
- },
- ordinal : function (number) {
- if (number === 0) {
- return number;
- }
-
- if (number === 1) {
- return number + "-ლი";
- }
-
- if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {
- return "მე-" + number;
- }
-
- return number + "-ე";
- },
- week : {
- dow : 1,
- doy : 7
- }
- });
-}));
-// moment.js language configuration
-// language : korean (ko)
-// author : Kyungwook, Park : https://github.com/kyungw00k
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('ko', {
- months : "1ì›”_2ì›”_3ì›”_4ì›”_5ì›”_6ì›”_7ì›”_8ì›”_9ì›”_10ì›”_11ì›”_12ì›”".split("_"),
- monthsShort : "1ì›”_2ì›”_3ì›”_4ì›”_5ì›”_6ì›”_7ì›”_8ì›”_9ì›”_10ì›”_11ì›”_12ì›”".split("_"),
- weekdays : "ì¼ìš”ì¼_월요ì¼_화요ì¼_수요ì¼_목요ì¼_금요ì¼_토요ì¼".split("_"),
- weekdaysShort : "ì¼_ì›”_í™”_수_목_금_토".split("_"),
- weekdaysMin : "ì¼_ì›”_í™”_수_목_금_토".split("_"),
- longDateFormat : {
- LT : "A h시 mm분",
- L : "YYYY.MM.DD",
- LL : "YYYYë…„ MMMM Dì¼",
- LLL : "YYYYë…„ MMMM Dì¼ LT",
- LLLL : "YYYYë…„ MMMM Dì¼ dddd LT"
- },
- meridiem : function (hour, minute, isUpper) {
- return hour < 12 ? '오전' : '오후';
- },
- calendar : {
- sameDay : '오늘 LT',
- nextDay : 'ë‚´ì¼ LT',
- nextWeek : 'dddd LT',
- lastDay : '어제 LT',
- lastWeek : '지난주 dddd LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "%s 후",
- past : "%s ì „",
- s : "몇초",
- ss : "%dì´ˆ",
- m : "ì¼ë¶„",
- mm : "%d분",
- h : "한시간",
- hh : "%d시간",
- d : "하루",
- dd : "%dì¼",
- M : "한달",
- MM : "%d달",
- y : "ì¼ë…„",
- yy : "%dë…„"
- },
- ordinal : '%dì¼'
- });
-}));
-// moment.js language configuration
-// language : Lithuanian (lt)
-// author : Mindaugas Mozūras : https://github.com/mmozuras
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- var units = {
- "m" : "minutÄ—_minutÄ—s_minutÄ™",
- "mm": "minutÄ—s_minuÄių_minutes",
- "h" : "valanda_valandos_valandÄ…",
- "hh": "valandos_valandų_valandas",
- "d" : "diena_dienos_dienÄ…",
- "dd": "dienos_dienų_dienas",
- "M" : "mėnuo_mėnesio_mėnesį",
- "MM": "mėnesiai_mėnesių_mėnesius",
- "y" : "metai_metų_metus",
- "yy": "metai_metų_metus"
- },
- weekDays = "pirmadienis_antradienis_treÄiadienis_ketvirtadienis_penktadienis_Å¡eÅ¡tadienis_sekmadienis".split("_");
-
- function translateSeconds(number, withoutSuffix, key, isFuture) {
- if (withoutSuffix) {
- return "kelios sekundÄ—s";
- } else {
- return isFuture ? "kelių sekundžių" : "kelias sekundes";
- }
- }
-
- function translateSingular(number, withoutSuffix, key, isFuture) {
- return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);
- }
-
- function special(number) {
- return number % 10 === 0 || (number > 10 && number < 20);
- }
-
- function forms(key) {
- return units[key].split("_");
- }
-
- function translate(number, withoutSuffix, key, isFuture) {
- var result = number + " ";
- if (number === 1) {
- return result + translateSingular(number, withoutSuffix, key[0], isFuture);
- } else if (withoutSuffix) {
- return result + (special(number) ? forms(key)[1] : forms(key)[0]);
- } else {
- if (isFuture) {
- return result + forms(key)[1];
- } else {
- return result + (special(number) ? forms(key)[1] : forms(key)[2]);
- }
- }
- }
-
- function relativeWeekDay(moment, format) {
- var nominative = format.indexOf('dddd LT') === -1,
- weekDay = weekDays[moment.weekday()];
-
- return nominative ? weekDay : weekDay.substring(0, weekDay.length - 2) + "į";
- }
-
- return moment.lang("lt", {
- months : "sausio_vasario_kovo_balandžio_gegužės_biržėlio_liepos_rugpjÅ«Äio_rugsÄ—jo_spalio_lapkriÄio_gruodžio".split("_"),
- monthsShort : "sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),
- weekdays : relativeWeekDay,
- weekdaysShort : "Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),
- weekdaysMin : "S_P_A_T_K_Pn_Å ".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "YYYY-MM-DD",
- LL : "YYYY [m.] MMMM D [d.]",
- LLL : "YYYY [m.] MMMM D [d.], LT [val.]",
- LLLL : "YYYY [m.] MMMM D [d.], dddd, LT [val.]",
- l : "YYYY-MM-DD",
- ll : "YYYY [m.] MMMM D [d.]",
- lll : "YYYY [m.] MMMM D [d.], LT [val.]",
- llll : "YYYY [m.] MMMM D [d.], ddd, LT [val.]"
- },
- calendar : {
- sameDay : "[Å iandien] LT",
- nextDay : "[Rytoj] LT",
- nextWeek : "dddd LT",
- lastDay : "[Vakar] LT",
- lastWeek : "[Praėjusį] dddd LT",
- sameElse : "L"
- },
- relativeTime : {
- future : "po %s",
- past : "prieš %s",
- s : translateSeconds,
- m : translateSingular,
- mm : translate,
- h : translateSingular,
- hh : translate,
- d : translateSingular,
- dd : translate,
- M : translateSingular,
- MM : translate,
- y : translateSingular,
- yy : translate
- },
- ordinal : function (number) {
- return number + '-oji';
- },
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : latvian (lv)
-// author : Kristaps Karlsons : https://github.com/skakri
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- var units = {
- 'mm': 'minūti_minūtes_minūte_minūtes',
- 'hh': 'stundu_stundas_stunda_stundas',
- 'dd': 'dienu_dienas_diena_dienas',
- 'MM': 'mēnesi_mēnešus_mēnesis_mēneši',
- 'yy': 'gadu_gadus_gads_gadi'
- };
-
- function format(word, number, withoutSuffix) {
- var forms = word.split('_');
- if (withoutSuffix) {
- return number % 10 === 1 && number !== 11 ? forms[2] : forms[3];
- } else {
- return number % 10 === 1 && number !== 11 ? forms[0] : forms[1];
- }
- }
-
- function relativeTimeWithPlural(number, withoutSuffix, key) {
- return number + ' ' + format(units[key], number, withoutSuffix);
- }
-
- return moment.lang('lv', {
- months : "janvÄris_februÄris_marts_aprÄ«lis_maijs_jÅ«nijs_jÅ«lijs_augusts_septembris_oktobris_novembris_decembris".split("_"),
- monthsShort : "jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),
- weekdays : "svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),
- weekdaysShort : "Sv_P_O_T_C_Pk_S".split("_"),
- weekdaysMin : "Sv_P_O_T_C_Pk_S".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "DD.MM.YYYY",
- LL : "YYYY. [gada] D. MMMM",
- LLL : "YYYY. [gada] D. MMMM, LT",
- LLLL : "YYYY. [gada] D. MMMM, dddd, LT"
- },
- calendar : {
- sameDay : '[Å odien pulksten] LT',
- nextDay : '[RÄ«t pulksten] LT',
- nextWeek : 'dddd [pulksten] LT',
- lastDay : '[Vakar pulksten] LT',
- lastWeek : '[PagÄjuÅ¡Ä] dddd [pulksten] LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "%s vÄ“lÄk",
- past : "%s agrÄk",
- s : "dažas sekundes",
- m : "minūti",
- mm : relativeTimeWithPlural,
- h : "stundu",
- hh : relativeTimeWithPlural,
- d : "dienu",
- dd : relativeTimeWithPlural,
- M : "mēnesi",
- MM : relativeTimeWithPlural,
- y : "gadu",
- yy : relativeTimeWithPlural
- },
- ordinal : '%d.',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : malayalam (ml)
-// author : Floyd Pink : https://github.com/floydpink
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('ml', {
- months : 'ജനàµà´µà´°à´¿_ഫെബàµà´°àµà´µà´°à´¿_മാർചàµà´šàµ_à´à´ªàµà´°à´¿àµ½_മേയàµ_ജൂൺ_ജൂലൈ_à´“à´—à´¸àµà´±àµà´±àµ_സെപàµà´±àµà´±à´‚ബർ_à´’à´•àµà´Ÿàµ‹à´¬àµ¼_നവംബർ_ഡിസംബർ'.split("_"),
- monthsShort : 'ജനàµ._ഫെബàµà´°àµ._മാർ._à´à´ªàµà´°à´¿._മേയàµ_ജൂൺ_ജൂലൈ._à´“à´—._സെപàµà´±àµà´±._à´’à´•àµà´Ÿàµ‹._നവം._ഡിസം.'.split("_"),
- weekdays : 'ഞായറാഴàµà´š_തിങàµà´•à´³à´¾à´´àµà´š_ചൊവàµà´µà´¾à´´àµà´š_à´¬àµà´§à´¨à´¾à´´àµà´š_à´µàµà´¯à´¾à´´à´¾à´´àµà´š_വെളàµà´³à´¿à´¯à´¾à´´àµà´š_ശനിയാഴàµà´š'.split("_"),
- weekdaysShort : 'ഞായർ_തിങàµà´•àµ¾_ചൊവàµà´µ_à´¬àµà´§àµ»_à´µàµà´¯à´¾à´´à´‚_വെളàµà´³à´¿_ശനി'.split("_"),
- weekdaysMin : 'à´žà´¾_തി_ചൊ_à´¬àµ_à´µàµà´¯à´¾_വെ_à´¶'.split("_"),
- longDateFormat : {
- LT : "A h:mm -à´¨àµ",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY, LT",
- LLLL : "dddd, D MMMM YYYY, LT"
- },
- calendar : {
- sameDay : '[ഇനàµà´¨àµ] LT',
- nextDay : '[നാളെ] LT',
- nextWeek : 'dddd, LT',
- lastDay : '[ഇനàµà´¨à´²àµ†] LT',
- lastWeek : '[à´•à´´à´¿à´žàµà´ž] dddd, LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "%s à´•à´´à´¿à´žàµà´žàµ",
- past : "%s à´®àµàµ»à´ªàµ",
- s : "അൽപ നിമിഷങàµà´™àµ¾",
- m : "ഒരൠമിനിറàµà´±àµ",
- mm : "%d മിനിറàµà´±àµ",
- h : "ഒരൠമണികàµà´•àµ‚ർ",
- hh : "%d മണികàµà´•àµ‚ർ",
- d : "ഒരൠദിവസം",
- dd : "%d ദിവസം",
- M : "ഒരൠമാസം",
- MM : "%d മാസം",
- y : "ഒരൠവർഷം",
- yy : "%d വർഷം"
- },
- meridiem : function (hour, minute, isLower) {
- if (hour < 4) {
- return "രാതàµà´°à´¿";
- } else if (hour < 12) {
- return "രാവിലെ";
- } else if (hour < 17) {
- return "ഉചàµà´š à´•à´´à´¿à´žàµà´žàµ";
- } else if (hour < 20) {
- return "വൈകàµà´¨àµà´¨àµ‡à´°à´‚";
- } else {
- return "രാതàµà´°à´¿";
- }
- }
- });
-}));
-// moment.js language configuration
-// language : Marathi (mr)
-// author : Harshad Kale : https://github.com/kalehv
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- var symbolMap = {
- '1': '१',
- '2': '२',
- '3': '३',
- '4': '४',
- '5': '५',
- '6': '६',
- '7': '७',
- '8': '८',
- '9': '९',
- '0': '०'
- },
- numberMap = {
- '१': '1',
- '२': '2',
- '३': '3',
- '४': '4',
- '५': '5',
- '६': '6',
- '७': '7',
- '८': '8',
- '९': '9',
- '०': '0'
- };
-
- return moment.lang('mr', {
- months : 'जानेवारी_फेबà¥à¤°à¥à¤µà¤¾à¤°à¥€_मारà¥à¤š_à¤à¤ªà¥à¤°à¤¿à¤²_मे_जून_जà¥à¤²à¥ˆ_ऑगसà¥à¤Ÿ_सपà¥à¤Ÿà¥‡à¤‚बर_ऑकà¥à¤Ÿà¥‹à¤¬à¤°_नोवà¥à¤¹à¥‡à¤‚बर_डिसेंबर'.split("_"),
- monthsShort: 'जाने._फेबà¥à¤°à¥._मारà¥à¤š._à¤à¤ªà¥à¤°à¤¿._मे._जून._जà¥à¤²à¥ˆ._ऑग._सपà¥à¤Ÿà¥‡à¤‚._ऑकà¥à¤Ÿà¥‹._नोवà¥à¤¹à¥‡à¤‚._डिसें.'.split("_"),
- weekdays : 'रविवार_सोमवार_मंगळवार_बà¥à¤§à¤µà¤¾à¤°_गà¥à¤°à¥‚वार_शà¥à¤•à¥à¤°à¤µà¤¾à¤°_शनिवार'.split("_"),
- weekdaysShort : 'रवि_सोम_मंगळ_बà¥à¤§_गà¥à¤°à¥‚_शà¥à¤•à¥à¤°_शनि'.split("_"),
- weekdaysMin : 'र_सो_मं_बà¥_गà¥_शà¥_श'.split("_"),
- longDateFormat : {
- LT : "A h:mm वाजता",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY, LT",
- LLLL : "dddd, D MMMM YYYY, LT"
- },
- calendar : {
- sameDay : '[आज] LT',
- nextDay : '[उदà¥à¤¯à¤¾] LT',
- nextWeek : 'dddd, LT',
- lastDay : '[काल] LT',
- lastWeek: '[मागील] dddd, LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "%s नंतर",
- past : "%s पूरà¥à¤µà¥€",
- s : "सेकंद",
- m: "à¤à¤• मिनिट",
- mm: "%d मिनिटे",
- h : "à¤à¤• तास",
- hh : "%d तास",
- d : "à¤à¤• दिवस",
- dd : "%d दिवस",
- M : "à¤à¤• महिना",
- MM : "%d महिने",
- y : "à¤à¤• वरà¥à¤·",
- yy : "%d वरà¥à¤·à¥‡"
- },
- preparse: function (string) {
- return string.replace(/[१२३४५६७८९०]/g, function (match) {
- return numberMap[match];
- });
- },
- postformat: function (string) {
- return string.replace(/\d/g, function (match) {
- return symbolMap[match];
- });
- },
- meridiem: function (hour, minute, isLower)
- {
- if (hour < 4) {
- return "रातà¥à¤°à¥€";
- } else if (hour < 10) {
- return "सकाळी";
- } else if (hour < 17) {
- return "दà¥à¤ªà¤¾à¤°à¥€";
- } else if (hour < 20) {
- return "सायंकाळी";
- } else {
- return "रातà¥à¤°à¥€";
- }
- },
- week : {
- dow : 0, // Sunday is the first day of the week.
- doy : 6 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : Bahasa Malaysia (ms-MY)
-// author : Weldan Jamili : https://github.com/weldan
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('ms-my', {
- months : "Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),
- monthsShort : "Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),
- weekdays : "Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),
- weekdaysShort : "Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),
- weekdaysMin : "Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),
- longDateFormat : {
- LT : "HH.mm",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY [pukul] LT",
- LLLL : "dddd, D MMMM YYYY [pukul] LT"
- },
- meridiem : function (hours, minutes, isLower) {
- if (hours < 11) {
- return 'pagi';
- } else if (hours < 15) {
- return 'tengahari';
- } else if (hours < 19) {
- return 'petang';
- } else {
- return 'malam';
- }
- },
- calendar : {
- sameDay : '[Hari ini pukul] LT',
- nextDay : '[Esok pukul] LT',
- nextWeek : 'dddd [pukul] LT',
- lastDay : '[Kelmarin pukul] LT',
- lastWeek : 'dddd [lepas pukul] LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "dalam %s",
- past : "%s yang lepas",
- s : "beberapa saat",
- m : "seminit",
- mm : "%d minit",
- h : "sejam",
- hh : "%d jam",
- d : "sehari",
- dd : "%d hari",
- M : "sebulan",
- MM : "%d bulan",
- y : "setahun",
- yy : "%d tahun"
- },
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 7 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : norwegian bokmål (nb)
-// authors : Espen Hovlandsdal : https://github.com/rexxars
-// Sigurd Gartmann : https://github.com/sigurdga
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('nb', {
- months : "januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),
- monthsShort : "jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),
- weekdays : "søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),
- weekdaysShort : "sø._ma._ti._on._to._fr._lø.".split("_"),
- weekdaysMin : "sø_ma_ti_on_to_fr_lø".split("_"),
- longDateFormat : {
- LT : "H.mm",
- L : "DD.MM.YYYY",
- LL : "D. MMMM YYYY",
- LLL : "D. MMMM YYYY [kl.] LT",
- LLLL : "dddd D. MMMM YYYY [kl.] LT"
- },
- calendar : {
- sameDay: '[i dag kl.] LT',
- nextDay: '[i morgen kl.] LT',
- nextWeek: 'dddd [kl.] LT',
- lastDay: '[i går kl.] LT',
- lastWeek: '[forrige] dddd [kl.] LT',
- sameElse: 'L'
- },
- relativeTime : {
- future : "om %s",
- past : "for %s siden",
- s : "noen sekunder",
- m : "ett minutt",
- mm : "%d minutter",
- h : "en time",
- hh : "%d timer",
- d : "en dag",
- dd : "%d dager",
- M : "en måned",
- MM : "%d måneder",
- y : "ett år",
- yy : "%d år"
- },
- ordinal : '%d.',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : nepali/nepalese
-// author : suvash : https://github.com/suvash
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- var symbolMap = {
- '1': '१',
- '2': '२',
- '3': '३',
- '4': '४',
- '5': '५',
- '6': '६',
- '7': '७',
- '8': '८',
- '9': '९',
- '0': '०'
- },
- numberMap = {
- '१': '1',
- '२': '2',
- '३': '3',
- '४': '4',
- '५': '5',
- '६': '6',
- '७': '7',
- '८': '8',
- '९': '9',
- '०': '0'
- };
-
- return moment.lang('ne', {
- months : 'जनवरी_फेबà¥à¤°à¥à¤µà¤°à¥€_मारà¥à¤š_अपà¥à¤°à¤¿à¤²_मई_जà¥à¤¨_जà¥à¤²à¤¾à¤ˆ_अगषà¥à¤Ÿ_सेपà¥à¤Ÿà¥‡à¤®à¥à¤¬à¤°_अकà¥à¤Ÿà¥‹à¤¬à¤°_नोभेमà¥à¤¬à¤°_डिसेमà¥à¤¬à¤°'.split("_"),
- monthsShort : 'जन._फेबà¥à¤°à¥._मारà¥à¤š_अपà¥à¤°à¤¿._मई_जà¥à¤¨_जà¥à¤²à¤¾à¤ˆ._अग._सेपà¥à¤Ÿ._अकà¥à¤Ÿà¥‹._नोभे._डिसे.'.split("_"),
- weekdays : 'आइतबार_सोमबार_मङà¥à¤—लबार_बà¥à¤§à¤¬à¤¾à¤°_बिहिबार_शà¥à¤•à¥à¤°à¤¬à¤¾à¤°_शनिबार'.split("_"),
- weekdaysShort : 'आइत._सोम._मङà¥à¤—ल._बà¥à¤§._बिहि._शà¥à¤•à¥à¤°._शनि.'.split("_"),
- weekdaysMin : 'आइ._सो._मङà¥_बà¥._बि._शà¥._श.'.split("_"),
- longDateFormat : {
- LT : "Aको h:mm बजे",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY, LT",
- LLLL : "dddd, D MMMM YYYY, LT"
- },
- preparse: function (string) {
- return string.replace(/[१२३४५६७८९०]/g, function (match) {
- return numberMap[match];
- });
- },
- postformat: function (string) {
- return string.replace(/\d/g, function (match) {
- return symbolMap[match];
- });
- },
- meridiem : function (hour, minute, isLower) {
- if (hour < 3) {
- return "राती";
- } else if (hour < 10) {
- return "बिहान";
- } else if (hour < 15) {
- return "दिउà¤à¤¸à¥‹";
- } else if (hour < 18) {
- return "बेलà¥à¤•à¤¾";
- } else if (hour < 20) {
- return "साà¤à¤";
- } else {
- return "राती";
- }
- },
- calendar : {
- sameDay : '[आज] LT',
- nextDay : '[भोली] LT',
- nextWeek : '[आउà¤à¤¦à¥‹] dddd[,] LT',
- lastDay : '[हिजो] LT',
- lastWeek : '[गà¤à¤•à¥‹] dddd[,] LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "%sमा",
- past : "%s अगाडी",
- s : "केही समय",
- m : "à¤à¤• मिनेट",
- mm : "%d मिनेट",
- h : "à¤à¤• घणà¥à¤Ÿà¤¾",
- hh : "%d घणà¥à¤Ÿà¤¾",
- d : "à¤à¤• दिन",
- dd : "%d दिन",
- M : "à¤à¤• महिना",
- MM : "%d महिना",
- y : "à¤à¤• बरà¥à¤·",
- yy : "%d बरà¥à¤·"
- },
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 7 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : dutch (nl)
-// author : Joris Röling : https://github.com/jjupiter
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- var monthsShortWithDots = "jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),
- monthsShortWithoutDots = "jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_");
-
- return moment.lang('nl', {
- months : "januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),
- monthsShort : function (m, format) {
- if (/-MMM-/.test(format)) {
- return monthsShortWithoutDots[m.month()];
- } else {
- return monthsShortWithDots[m.month()];
- }
- },
- weekdays : "zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),
- weekdaysShort : "zo._ma._di._wo._do._vr._za.".split("_"),
- weekdaysMin : "Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "DD-MM-YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "dddd D MMMM YYYY LT"
- },
- calendar : {
- sameDay: '[vandaag om] LT',
- nextDay: '[morgen om] LT',
- nextWeek: 'dddd [om] LT',
- lastDay: '[gisteren om] LT',
- lastWeek: '[afgelopen] dddd [om] LT',
- sameElse: 'L'
- },
- relativeTime : {
- future : "over %s",
- past : "%s geleden",
- s : "een paar seconden",
- m : "één minuut",
- mm : "%d minuten",
- h : "één uur",
- hh : "%d uur",
- d : "één dag",
- dd : "%d dagen",
- M : "één maand",
- MM : "%d maanden",
- y : "één jaar",
- yy : "%d jaar"
- },
- ordinal : function (number) {
- return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
- },
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : norwegian nynorsk (nn)
-// author : https://github.com/mechuwind
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('nn', {
- months : "januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),
- monthsShort : "jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),
- weekdays : "sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),
- weekdaysShort : "sun_mån_tys_ons_tor_fre_lau".split("_"),
- weekdaysMin : "su_må_ty_on_to_fr_lø".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "DD.MM.YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "dddd D MMMM YYYY LT"
- },
- calendar : {
- sameDay: '[I dag klokka] LT',
- nextDay: '[I morgon klokka] LT',
- nextWeek: 'dddd [klokka] LT',
- lastDay: '[I går klokka] LT',
- lastWeek: '[Føregående] dddd [klokka] LT',
- sameElse: 'L'
- },
- relativeTime : {
- future : "om %s",
- past : "for %s siden",
- s : "noen sekund",
- m : "ett minutt",
- mm : "%d minutt",
- h : "en time",
- hh : "%d timar",
- d : "en dag",
- dd : "%d dagar",
- M : "en månad",
- MM : "%d månader",
- y : "ett år",
- yy : "%d år"
- },
- ordinal : '%d.',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : polish (pl)
-// author : Rafal Hirsz : https://github.com/evoL
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- var monthsNominative = "styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),
- monthsSubjective = "stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");
-
- function plural(n) {
- return (n % 10 < 5) && (n % 10 > 1) && (~~(n / 10) !== 1);
- }
-
- function translate(number, withoutSuffix, key) {
- var result = number + " ";
- switch (key) {
- case 'm':
- return withoutSuffix ? 'minuta' : 'minutÄ™';
- case 'mm':
- return result + (plural(number) ? 'minuty' : 'minut');
- case 'h':
- return withoutSuffix ? 'godzina' : 'godzinÄ™';
- case 'hh':
- return result + (plural(number) ? 'godziny' : 'godzin');
- case 'MM':
- return result + (plural(number) ? 'miesiące' : 'miesięcy');
- case 'yy':
- return result + (plural(number) ? 'lata' : 'lat');
- }
- }
-
- return moment.lang('pl', {
- months : function (momentToFormat, format) {
- if (/D MMMM/.test(format)) {
- return monthsSubjective[momentToFormat.month()];
- } else {
- return monthsNominative[momentToFormat.month()];
- }
- },
- monthsShort : "sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),
- weekdays : "niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),
- weekdaysShort : "nie_pon_wt_śr_czw_pt_sb".split("_"),
- weekdaysMin : "N_Pn_Wt_Åšr_Cz_Pt_So".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "DD.MM.YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "dddd, D MMMM YYYY LT"
- },
- calendar : {
- sameDay: '[DziÅ› o] LT',
- nextDay: '[Jutro o] LT',
- nextWeek: '[W] dddd [o] LT',
- lastDay: '[Wczoraj o] LT',
- lastWeek: function () {
- switch (this.day()) {
- case 0:
- return '[W zeszłą niedzielę o] LT';
- case 3:
- return '[W zeszłą środę o] LT';
- case 6:
- return '[W zeszłą sobotę o] LT';
- default:
- return '[W zeszły] dddd [o] LT';
- }
- },
- sameElse: 'L'
- },
- relativeTime : {
- future : "za %s",
- past : "%s temu",
- s : "kilka sekund",
- m : translate,
- mm : translate,
- h : translate,
- hh : translate,
- d : "1 dzień",
- dd : '%d dni',
- M : "miesiÄ…c",
- MM : translate,
- y : "rok",
- yy : translate
- },
- ordinal : '%d.',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : brazilian portuguese (pt-br)
-// author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('pt-br', {
- months : "Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),
- monthsShort : "Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),
- weekdays : "Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),
- weekdaysShort : "Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),
- weekdaysMin : "Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "DD/MM/YYYY",
- LL : "D [de] MMMM [de] YYYY",
- LLL : "D [de] MMMM [de] YYYY LT",
- LLLL : "dddd, D [de] MMMM [de] YYYY LT"
- },
- calendar : {
- sameDay: '[Hoje às] LT',
- nextDay: '[Amanhã às] LT',
- nextWeek: 'dddd [às] LT',
- lastDay: '[Ontem às] LT',
- lastWeek: function () {
- return (this.day() === 0 || this.day() === 6) ?
- '[Último] dddd [às] LT' : // Saturday + Sunday
- '[Última] dddd [às] LT'; // Monday - Friday
- },
- sameElse: 'L'
- },
- relativeTime : {
- future : "em %s",
- past : "%s atrás",
- s : "segundos",
- m : "um minuto",
- mm : "%d minutos",
- h : "uma hora",
- hh : "%d horas",
- d : "um dia",
- dd : "%d dias",
- M : "um mês",
- MM : "%d meses",
- y : "um ano",
- yy : "%d anos"
- },
- ordinal : '%dº'
- });
-}));
-// moment.js language configuration
-// language : portuguese (pt)
-// author : Jefferson : https://github.com/jalex79
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('pt', {
- months : "Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),
- monthsShort : "Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),
- weekdays : "Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),
- weekdaysShort : "Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),
- weekdaysMin : "Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "DD/MM/YYYY",
- LL : "D [de] MMMM [de] YYYY",
- LLL : "D [de] MMMM [de] YYYY LT",
- LLLL : "dddd, D [de] MMMM [de] YYYY LT"
- },
- calendar : {
- sameDay: '[Hoje às] LT',
- nextDay: '[Amanhã às] LT',
- nextWeek: 'dddd [às] LT',
- lastDay: '[Ontem às] LT',
- lastWeek: function () {
- return (this.day() === 0 || this.day() === 6) ?
- '[Último] dddd [às] LT' : // Saturday + Sunday
- '[Última] dddd [às] LT'; // Monday - Friday
- },
- sameElse: 'L'
- },
- relativeTime : {
- future : "em %s",
- past : "%s atrás",
- s : "segundos",
- m : "um minuto",
- mm : "%d minutos",
- h : "uma hora",
- hh : "%d horas",
- d : "um dia",
- dd : "%d dias",
- M : "um mês",
- MM : "%d meses",
- y : "um ano",
- yy : "%d anos"
- },
- ordinal : '%dº',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : romanian (ro)
-// author : Vlad Gurdiga : https://github.com/gurdiga
-// author : Valentin Agachi : https://github.com/avaly
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('ro', {
- months : "Ianuarie_Februarie_Martie_Aprilie_Mai_Iunie_Iulie_August_Septembrie_Octombrie_Noiembrie_Decembrie".split("_"),
- monthsShort : "Ian_Feb_Mar_Apr_Mai_Iun_Iul_Aug_Sep_Oct_Noi_Dec".split("_"),
- weekdays : "Duminică_Luni_Marţi_Miercuri_Joi_Vineri_Sâmbătă".split("_"),
- weekdaysShort : "Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),
- weekdaysMin : "Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),
- longDateFormat : {
- LT : "H:mm",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY H:mm",
- LLLL : "dddd, D MMMM YYYY H:mm"
- },
- calendar : {
- sameDay: "[azi la] LT",
- nextDay: '[mâine la] LT',
- nextWeek: 'dddd [la] LT',
- lastDay: '[ieri la] LT',
- lastWeek: '[fosta] dddd [la] LT',
- sameElse: 'L'
- },
- relativeTime : {
- future : "peste %s",
- past : "%s în urmă",
- s : "câteva secunde",
- m : "un minut",
- mm : "%d minute",
- h : "o oră",
- hh : "%d ore",
- d : "o zi",
- dd : "%d zile",
- M : "o lună",
- MM : "%d luni",
- y : "un an",
- yy : "%d ani"
- },
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 7 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : russian (ru)
-// author : Viktorminator : https://github.com/Viktorminator
-// Author : Menelion Elensúle : https://github.com/Oire
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- function plural(word, num) {
- var forms = word.split('_');
- return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
- }
-
- function relativeTimeWithPlural(number, withoutSuffix, key) {
- var format = {
- 'mm': 'минута_минуты_минут',
- 'hh': 'чаÑ_чаÑа_чаÑов',
- 'dd': 'день_днÑ_дней',
- 'MM': 'меÑÑц_меÑÑца_меÑÑцев',
- 'yy': 'год_года_лет'
- };
- if (key === 'm') {
- return withoutSuffix ? 'минута' : 'минуту';
- }
- else {
- return number + ' ' + plural(format[key], +number);
- }
- }
-
- function monthsCaseReplace(m, format) {
- var months = {
- 'nominative': 'Ñнварь_февраль_март_апрель_май_июнь_июль_авгуÑÑ‚_ÑентÑбрь_октÑбрь_ноÑбрь_декабрь'.split('_'),
- 'accusative': 'ÑнварÑ_февралÑ_марта_апрелÑ_маÑ_июнÑ_июлÑ_авгуÑта_ÑентÑбрÑ_октÑбрÑ_ноÑбрÑ_декабрÑ'.split('_')
- },
-
- nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
- 'accusative' :
- 'nominative';
-
- return months[nounCase][m.month()];
- }
-
- function monthsShortCaseReplace(m, format) {
- var monthsShort = {
- 'nominative': 'Ñнв_фев_мар_апр_май_июнь_июль_авг_Ñен_окт_ноÑ_дек'.split('_'),
- 'accusative': 'Ñнв_фев_мар_апр_маÑ_июнÑ_июлÑ_авг_Ñен_окт_ноÑ_дек'.split('_')
- },
-
- nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
- 'accusative' :
- 'nominative';
-
- return monthsShort[nounCase][m.month()];
- }
-
- function weekdaysCaseReplace(m, format) {
- var weekdays = {
- 'nominative': 'воÑкреÑенье_понедельник_вторник_Ñреда_четверг_пÑтница_Ñуббота'.split('_'),
- 'accusative': 'воÑкреÑенье_понедельник_вторник_Ñреду_четверг_пÑтницу_Ñубботу'.split('_')
- },
-
- nounCase = (/\[ ?[Вв] ?(?:прошлую|Ñледующую)? ?\] ?dddd/).test(format) ?
- 'accusative' :
- 'nominative';
-
- return weekdays[nounCase][m.day()];
- }
-
- return moment.lang('ru', {
- months : monthsCaseReplace,
- monthsShort : monthsShortCaseReplace,
- weekdays : weekdaysCaseReplace,
- weekdaysShort : "вÑ_пн_вт_ÑÑ€_чт_пт_Ñб".split("_"),
- weekdaysMin : "вÑ_пн_вт_ÑÑ€_чт_пт_Ñб".split("_"),
- monthsParse : [/^Ñнв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[й|Ñ]/i, /^июн/i, /^июл/i, /^авг/i, /^Ñен/i, /^окт/i, /^ноÑ/i, /^дек/i],
- longDateFormat : {
- LT : "HH:mm",
- L : "DD.MM.YYYY",
- LL : "D MMMM YYYY г.",
- LLL : "D MMMM YYYY г., LT",
- LLLL : "dddd, D MMMM YYYY г., LT"
- },
- calendar : {
- sameDay: '[Ð¡ÐµÐ³Ð¾Ð´Ð½Ñ Ð²] LT',
- nextDay: '[Завтра в] LT',
- lastDay: '[Вчера в] LT',
- nextWeek: function () {
- return this.day() === 2 ? '[Во] dddd [в] LT' : '[В] dddd [в] LT';
- },
- lastWeek: function () {
- switch (this.day()) {
- case 0:
- return '[В прошлое] dddd [в] LT';
- case 1:
- case 2:
- case 4:
- return '[В прошлый] dddd [в] LT';
- case 3:
- case 5:
- case 6:
- return '[В прошлую] dddd [в] LT';
- }
- },
- sameElse: 'L'
- },
- relativeTime : {
- future : "через %s",
- past : "%s назад",
- s : "неÑколько Ñекунд",
- m : relativeTimeWithPlural,
- mm : relativeTimeWithPlural,
- h : "чаÑ",
- hh : relativeTimeWithPlural,
- d : "день",
- dd : relativeTimeWithPlural,
- M : "меÑÑц",
- MM : relativeTimeWithPlural,
- y : "год",
- yy : relativeTimeWithPlural
- },
-
- // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
-
- meridiem : function (hour, minute, isLower) {
- if (hour < 4) {
- return "ночи";
- } else if (hour < 12) {
- return "утра";
- } else if (hour < 17) {
- return "днÑ";
- } else {
- return "вечера";
- }
- },
-
- ordinal: function (number, period) {
- switch (period) {
- case 'M':
- case 'd':
- case 'DDD':
- return number + '-й';
- case 'D':
- return number + '-го';
- case 'w':
- case 'W':
- return number + '-Ñ';
- default:
- return number;
- }
- },
-
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 7 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : slovak (sk)
-// author : Martin Minka : https://github.com/k2s
-// based on work of petrbela : https://github.com/petrbela
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- var months = "január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),
- monthsShort = "jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");
-
- function plural(n) {
- return (n > 1) && (n < 5);
- }
-
- function translate(number, withoutSuffix, key, isFuture) {
- var result = number + " ";
- switch (key) {
- case 's': // a few seconds / in a few seconds / a few seconds ago
- return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';
- case 'm': // a minute / in a minute / a minute ago
- return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');
- case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
- if (withoutSuffix || isFuture) {
- return result + (plural(number) ? 'minúty' : 'minút');
- } else {
- return result + 'minútami';
- }
- break;
- case 'h': // an hour / in an hour / an hour ago
- return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
- case 'hh': // 9 hours / in 9 hours / 9 hours ago
- if (withoutSuffix || isFuture) {
- return result + (plural(number) ? 'hodiny' : 'hodín');
- } else {
- return result + 'hodinami';
- }
- break;
- case 'd': // a day / in a day / a day ago
- return (withoutSuffix || isFuture) ? 'deň' : 'dňom';
- case 'dd': // 9 days / in 9 days / 9 days ago
- if (withoutSuffix || isFuture) {
- return result + (plural(number) ? 'dni' : 'dní');
- } else {
- return result + 'dňami';
- }
- break;
- case 'M': // a month / in a month / a month ago
- return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';
- case 'MM': // 9 months / in 9 months / 9 months ago
- if (withoutSuffix || isFuture) {
- return result + (plural(number) ? 'mesiace' : 'mesiacov');
- } else {
- return result + 'mesiacmi';
- }
- break;
- case 'y': // a year / in a year / a year ago
- return (withoutSuffix || isFuture) ? 'rok' : 'rokom';
- case 'yy': // 9 years / in 9 years / 9 years ago
- if (withoutSuffix || isFuture) {
- return result + (plural(number) ? 'roky' : 'rokov');
- } else {
- return result + 'rokmi';
- }
- break;
- }
- }
-
- return moment.lang('sk', {
- months : months,
- monthsShort : monthsShort,
- monthsParse : (function (months, monthsShort) {
- var i, _monthsParse = [];
- for (i = 0; i < 12; i++) {
- // use custom parser to solve problem with July (Äervenec)
- _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');
- }
- return _monthsParse;
- }(months, monthsShort)),
- weekdays : "nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),
- weekdaysShort : "ne_po_ut_st_Å¡t_pi_so".split("_"),
- weekdaysMin : "ne_po_ut_st_Å¡t_pi_so".split("_"),
- longDateFormat : {
- LT: "H:mm",
- L : "DD.MM.YYYY",
- LL : "D. MMMM YYYY",
- LLL : "D. MMMM YYYY LT",
- LLLL : "dddd D. MMMM YYYY LT"
- },
- calendar : {
- sameDay: "[dnes o] LT",
- nextDay: '[zajtra o] LT',
- nextWeek: function () {
- switch (this.day()) {
- case 0:
- return '[v nedeľu o] LT';
- case 1:
- case 2:
- return '[v] dddd [o] LT';
- case 3:
- return '[v stredu o] LT';
- case 4:
- return '[vo Å¡tvrtok o] LT';
- case 5:
- return '[v piatok o] LT';
- case 6:
- return '[v sobotu o] LT';
- }
- },
- lastDay: '[vÄera o] LT',
- lastWeek: function () {
- switch (this.day()) {
- case 0:
- return '[minulú nedeľu o] LT';
- case 1:
- case 2:
- return '[minulý] dddd [o] LT';
- case 3:
- return '[minulú stredu o] LT';
- case 4:
- case 5:
- return '[minulý] dddd [o] LT';
- case 6:
- return '[minulú sobotu o] LT';
- }
- },
- sameElse: "L"
- },
- relativeTime : {
- future : "za %s",
- past : "pred %s",
- s : translate,
- m : translate,
- mm : translate,
- h : translate,
- hh : translate,
- d : translate,
- dd : translate,
- M : translate,
- MM : translate,
- y : translate,
- yy : translate
- },
- ordinal : '%d.',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : slovenian (sl)
-// author : Robert Sedovšek : https://github.com/sedovsek
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- function translate(number, withoutSuffix, key) {
- var result = number + " ";
- switch (key) {
- case 'm':
- return withoutSuffix ? 'ena minuta' : 'eno minuto';
- case 'mm':
- if (number === 1) {
- result += 'minuta';
- } else if (number === 2) {
- result += 'minuti';
- } else if (number === 3 || number === 4) {
- result += 'minute';
- } else {
- result += 'minut';
- }
- return result;
- case 'h':
- return withoutSuffix ? 'ena ura' : 'eno uro';
- case 'hh':
- if (number === 1) {
- result += 'ura';
- } else if (number === 2) {
- result += 'uri';
- } else if (number === 3 || number === 4) {
- result += 'ure';
- } else {
- result += 'ur';
- }
- return result;
- case 'dd':
- if (number === 1) {
- result += 'dan';
- } else {
- result += 'dni';
- }
- return result;
- case 'MM':
- if (number === 1) {
- result += 'mesec';
- } else if (number === 2) {
- result += 'meseca';
- } else if (number === 3 || number === 4) {
- result += 'mesece';
- } else {
- result += 'mesecev';
- }
- return result;
- case 'yy':
- if (number === 1) {
- result += 'leto';
- } else if (number === 2) {
- result += 'leti';
- } else if (number === 3 || number === 4) {
- result += 'leta';
- } else {
- result += 'let';
- }
- return result;
- }
- }
-
- return moment.lang('sl', {
- months : "januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),
- monthsShort : "jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),
- weekdays : "nedelja_ponedeljek_torek_sreda_Äetrtek_petek_sobota".split("_"),
- weekdaysShort : "ned._pon._tor._sre._Äet._pet._sob.".split("_"),
- weekdaysMin : "ne_po_to_sr_Äe_pe_so".split("_"),
- longDateFormat : {
- LT : "H:mm",
- L : "DD. MM. YYYY",
- LL : "D. MMMM YYYY",
- LLL : "D. MMMM YYYY LT",
- LLLL : "dddd, D. MMMM YYYY LT"
- },
- calendar : {
- sameDay : '[danes ob] LT',
- nextDay : '[jutri ob] LT',
-
- nextWeek : function () {
- switch (this.day()) {
- case 0:
- return '[v] [nedeljo] [ob] LT';
- case 3:
- return '[v] [sredo] [ob] LT';
- case 6:
- return '[v] [soboto] [ob] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[v] dddd [ob] LT';
- }
- },
- lastDay : '[vÄeraj ob] LT',
- lastWeek : function () {
- switch (this.day()) {
- case 0:
- case 3:
- case 6:
- return '[prejšnja] dddd [ob] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[prejšnji] dddd [ob] LT';
- }
- },
- sameElse : 'L'
- },
- relativeTime : {
- future : "Äez %s",
- past : "%s nazaj",
- s : "nekaj sekund",
- m : translate,
- mm : translate,
- h : translate,
- hh : translate,
- d : "en dan",
- dd : translate,
- M : "en mesec",
- MM : translate,
- y : "eno leto",
- yy : translate
- },
- ordinal : '%d.',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 7 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : Albanian (sq)
-// author : Flakërim Ismani : https://github.com/flakerimi
-// author: Menelion Elensúle: https://github.com/Oire (tests)
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('sq', {
- months : "Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),
- monthsShort : "Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),
- weekdays : "E Diel_E Hënë_E Marte_E Mërkure_E Enjte_E Premte_E Shtunë".split("_"),
- weekdaysShort : "Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),
- weekdaysMin : "D_H_Ma_Më_E_P_Sh".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "dddd, D MMMM YYYY LT"
- },
- calendar : {
- sameDay : '[Sot në] LT',
- nextDay : '[Neser në] LT',
- nextWeek : 'dddd [në] LT',
- lastDay : '[Dje në] LT',
- lastWeek : 'dddd [e kaluar në] LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "në %s",
- past : "%s me parë",
- s : "disa seconda",
- m : "një minut",
- mm : "%d minutea",
- h : "një orë",
- hh : "%d orë",
- d : "një ditë",
- dd : "%d ditë",
- M : "një muaj",
- MM : "%d muaj",
- y : "një vit",
- yy : "%d vite"
- },
- ordinal : '%d.',
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : swedish (sv)
-// author : Jens Alm : https://github.com/ulmus
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('sv', {
- months : "januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),
- monthsShort : "jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),
- weekdays : "söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),
- weekdaysShort : "sön_mån_tis_ons_tor_fre_lör".split("_"),
- weekdaysMin : "sö_må_ti_on_to_fr_lö".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "YYYY-MM-DD",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "dddd D MMMM YYYY LT"
- },
- calendar : {
- sameDay: '[Idag] LT',
- nextDay: '[Imorgon] LT',
- lastDay: '[Igår] LT',
- nextWeek: 'dddd LT',
- lastWeek: '[Förra] dddd[en] LT',
- sameElse: 'L'
- },
- relativeTime : {
- future : "om %s",
- past : "för %s sedan",
- s : "några sekunder",
- m : "en minut",
- mm : "%d minuter",
- h : "en timme",
- hh : "%d timmar",
- d : "en dag",
- dd : "%d dagar",
- M : "en månad",
- MM : "%d månader",
- y : "ett år",
- yy : "%d år"
- },
- ordinal : function (number) {
- var b = number % 10,
- output = (~~ (number % 100 / 10) === 1) ? 'e' :
- (b === 1) ? 'a' :
- (b === 2) ? 'a' :
- (b === 3) ? 'e' : 'e';
- return number + output;
- },
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : thai (th)
-// author : Kridsada Thanabulpong : https://github.com/sirn
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('th', {
- months : "มà¸à¸£à¸²à¸„ม_à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_à¸à¸£à¸à¸Žà¸²à¸„ม_สิงหาคม_à¸à¸±à¸™à¸¢à¸²à¸¢à¸™_ตุลาคม_พฤศจิà¸à¸²à¸¢à¸™_ธันวาคม".split("_"),
- monthsShort : "มà¸à¸£à¸²_à¸à¸¸à¸¡à¸ à¸²_มีนา_เมษา_พฤษภา_มิถุนา_à¸à¸£à¸à¸Žà¸²_สิงหา_à¸à¸±à¸™à¸¢à¸²_ตุลา_พฤศจิà¸à¸²_ธันวา".split("_"),
- weekdays : "อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุà¸à¸£à¹Œ_เสาร์".split("_"),
- weekdaysShort : "อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุà¸à¸£à¹Œ_เสาร์".split("_"), // yes, three characters difference
- weekdaysMin : "อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),
- longDateFormat : {
- LT : "H นาฬิà¸à¸² m นาที",
- L : "YYYY/MM/DD",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY เวลา LT",
- LLLL : "วันddddที่ D MMMM YYYY เวลา LT"
- },
- meridiem : function (hour, minute, isLower) {
- if (hour < 12) {
- return "à¸à¹ˆà¸­à¸™à¹€à¸—ี่ยง";
- } else {
- return "หลังเที่ยง";
- }
- },
- calendar : {
- sameDay : '[วันนี้ เวลา] LT',
- nextDay : '[พรุ่งนี้ เวลา] LT',
- nextWeek : 'dddd[หน้า เวลา] LT',
- lastDay : '[เมื่อวานนี้ เวลา] LT',
- lastWeek : '[วัน]dddd[ที่à¹à¸¥à¹‰à¸§ เวลา] LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "อีภ%s",
- past : "%sที่à¹à¸¥à¹‰à¸§",
- s : "ไม่à¸à¸µà¹ˆà¸§à¸´à¸™à¸²à¸—ี",
- m : "1 นาที",
- mm : "%d นาที",
- h : "1 ชั่วโมง",
- hh : "%d ชั่วโมง",
- d : "1 วัน",
- dd : "%d วัน",
- M : "1 เดือน",
- MM : "%d เดือน",
- y : "1 ปี",
- yy : "%d ปี"
- }
- });
-}));
-// moment.js language configuration
-// language : Tagalog/Filipino (tl-ph)
-// author : Dan Hagman
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('tl-ph', {
- months : "Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),
- monthsShort : "Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),
- weekdays : "Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),
- weekdaysShort : "Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),
- weekdaysMin : "Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "MM/D/YYYY",
- LL : "MMMM D, YYYY",
- LLL : "MMMM D, YYYY LT",
- LLLL : "dddd, MMMM DD, YYYY LT"
- },
- calendar : {
- sameDay: "[Ngayon sa] LT",
- nextDay: '[Bukas sa] LT',
- nextWeek: 'dddd [sa] LT',
- lastDay: '[Kahapon sa] LT',
- lastWeek: 'dddd [huling linggo] LT',
- sameElse: 'L'
- },
- relativeTime : {
- future : "sa loob ng %s",
- past : "%s ang nakalipas",
- s : "ilang segundo",
- m : "isang minuto",
- mm : "%d minuto",
- h : "isang oras",
- hh : "%d oras",
- d : "isang araw",
- dd : "%d araw",
- M : "isang buwan",
- MM : "%d buwan",
- y : "isang taon",
- yy : "%d taon"
- },
- ordinal : function (number) {
- return number;
- },
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : turkish (tr)
-// authors : Erhan Gundogan : https://github.com/erhangundogan,
-// Burak YiÄŸit Kaya: https://github.com/BYK
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
-
- var suffixes = {
- 1: "'inci",
- 5: "'inci",
- 8: "'inci",
- 70: "'inci",
- 80: "'inci",
-
- 2: "'nci",
- 7: "'nci",
- 20: "'nci",
- 50: "'nci",
-
- 3: "'üncü",
- 4: "'üncü",
- 100: "'üncü",
-
- 6: "'ncı",
-
- 9: "'uncu",
- 10: "'uncu",
- 30: "'uncu",
-
- 60: "'ıncı",
- 90: "'ıncı"
- };
-
- return moment.lang('tr', {
- months : "Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),
- monthsShort : "Oca_Åžub_Mar_Nis_May_Haz_Tem_AÄŸu_Eyl_Eki_Kas_Ara".split("_"),
- weekdays : "Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),
- weekdaysShort : "Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),
- weekdaysMin : "Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "DD.MM.YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "dddd, D MMMM YYYY LT"
- },
- calendar : {
- sameDay : '[bugün saat] LT',
- nextDay : '[yarın saat] LT',
- nextWeek : '[haftaya] dddd [saat] LT',
- lastDay : '[dün] LT',
- lastWeek : '[geçen hafta] dddd [saat] LT',
- sameElse : 'L'
- },
- relativeTime : {
- future : "%s sonra",
- past : "%s önce",
- s : "birkaç saniye",
- m : "bir dakika",
- mm : "%d dakika",
- h : "bir saat",
- hh : "%d saat",
- d : "bir gün",
- dd : "%d gün",
- M : "bir ay",
- MM : "%d ay",
- y : "bir yıl",
- yy : "%d yıl"
- },
- ordinal : function (number) {
- if (number === 0) { // special case for zero
- return number + "'ıncı";
- }
- var a = number % 10,
- b = number % 100 - a,
- c = number >= 100 ? 100 : null;
-
- return number + (suffixes[a] || suffixes[b] || suffixes[c]);
- },
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 7 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : Morocco Central Atlas Tamaziɣt in Latin (tzm-la)
-// author : Abdel Said : https://github.com/abdelsaid
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('tzm-la', {
- months : "innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),
- monthsShort : "innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),
- weekdays : "asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas".split("_"),
- weekdaysShort : "asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas".split("_"),
- weekdaysMin : "asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "dddd D MMMM YYYY LT"
- },
- calendar : {
- sameDay: "[asdkh g] LT",
- nextDay: '[aska g] LT',
- nextWeek: 'dddd [g] LT',
- lastDay: '[assant g] LT',
- lastWeek: 'dddd [g] LT',
- sameElse: 'L'
- },
- relativeTime : {
- future : "dadkh s yan %s",
- past : "yan %s",
- s : "imik",
- m : "minuá¸",
- mm : "%d minuá¸",
- h : "saɛa",
- hh : "%d tassaɛin",
- d : "ass",
- dd : "%d ossan",
- M : "ayowr",
- MM : "%d iyyirn",
- y : "asgas",
- yy : "%d isgasn"
- },
- week : {
- dow : 6, // Saturday is the first day of the week.
- doy : 12 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : Morocco Central Atlas Tamaziɣt (tzm)
-// author : Abdel Said : https://github.com/abdelsaid
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('tzm', {
- months : "ⵉâµâµâ´°âµ¢âµ”_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓâµâµ¢âµ“_ⵢⵓâµâµ¢âµ“âµ£_ⵖⵓⵛⵜ_ⵛⵓⵜⴰâµâ´±âµ‰âµ”_ⴽⵟⵓⴱⵕ_âµâµ“ⵡⴰâµâ´±âµ‰âµ”_ⴷⵓⵊâµâ´±âµ‰âµ”".split("_"),
- monthsShort : "ⵉâµâµâ´°âµ¢âµ”_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓâµâµ¢âµ“_ⵢⵓâµâµ¢âµ“âµ£_ⵖⵓⵛⵜ_ⵛⵓⵜⴰâµâ´±âµ‰âµ”_ⴽⵟⵓⴱⵕ_âµâµ“ⵡⴰâµâ´±âµ‰âµ”_ⴷⵓⵊâµâ´±âµ‰âµ”".split("_"),
- weekdays : "ⴰⵙⴰⵎⴰⵙ_â´°âµ¢âµâ´°âµ™_ⴰⵙⵉâµâ´°âµ™_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),
- weekdaysShort : "ⴰⵙⴰⵎⴰⵙ_â´°âµ¢âµâ´°âµ™_ⴰⵙⵉâµâ´°âµ™_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),
- weekdaysMin : "ⴰⵙⴰⵎⴰⵙ_â´°âµ¢âµâ´°âµ™_ⴰⵙⵉâµâ´°âµ™_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "dddd D MMMM YYYY LT"
- },
- calendar : {
- sameDay: "[ⴰⵙⴷⵅ ⴴ] LT",
- nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',
- nextWeek: 'dddd [â´´] LT',
- lastDay: '[ⴰⵚⴰâµâµœ â´´] LT',
- lastWeek: 'dddd [â´´] LT',
- sameElse: 'L'
- },
- relativeTime : {
- future : "ⴷⴰⴷⵅ ⵙ ⵢⴰⵠ%s",
- past : "ⵢⴰⵠ%s",
- s : "ⵉⵎⵉⴽ",
- m : "ⵎⵉâµâµ“â´º",
- mm : "%d ⵎⵉâµâµ“â´º",
- h : "ⵙⴰⵄⴰ",
- hh : "%d ⵜⴰⵙⵙⴰⵄⵉâµ",
- d : "ⴰⵙⵙ",
- dd : "%d oⵙⵙⴰâµ",
- M : "ⴰⵢoⵓⵔ",
- MM : "%d ⵉⵢⵢⵉⵔâµ",
- y : "ⴰⵙⴳⴰⵙ",
- yy : "%d ⵉⵙⴳⴰⵙâµ"
- },
- week : {
- dow : 6, // Saturday is the first day of the week.
- doy : 12 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : ukrainian (uk)
-// author : zemlanin : https://github.com/zemlanin
-// Author : Menelion Elensúle : https://github.com/Oire
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- function plural(word, num) {
- var forms = word.split('_');
- return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
- }
-
- function relativeTimeWithPlural(number, withoutSuffix, key) {
- var format = {
- 'mm': 'хвилина_хвилини_хвилин',
- 'hh': 'година_години_годин',
- 'dd': 'день_дні_днів',
- 'MM': 'міÑÑць_міÑÑці_міÑÑців',
- 'yy': 'рік_роки_років'
- };
- if (key === 'm') {
- return withoutSuffix ? 'хвилина' : 'хвилину';
- }
- else if (key === 'h') {
- return withoutSuffix ? 'година' : 'годину';
- }
- else {
- return number + ' ' + plural(format[key], +number);
- }
- }
-
- function monthsCaseReplace(m, format) {
- var months = {
- 'nominative': 'Ñічень_лютий_березень_квітень_травень_червень_липень_Ñерпень_вереÑень_жовтень_лиÑтопад_грудень'.split('_'),
- 'accusative': 'ÑічнÑ_лютого_березнÑ_квітнÑ_травнÑ_червнÑ_липнÑ_ÑерпнÑ_вереÑнÑ_жовтнÑ_лиÑтопада_груднÑ'.split('_')
- },
-
- nounCase = (/D[oD]? *MMMM?/).test(format) ?
- 'accusative' :
- 'nominative';
-
- return months[nounCase][m.month()];
- }
-
- function weekdaysCaseReplace(m, format) {
- var weekdays = {
- 'nominative': 'неділÑ_понеділок_вівторок_Ñереда_четвер_п’ÑтницÑ_Ñубота'.split('_'),
- 'accusative': 'неділю_понеділок_вівторок_Ñереду_четвер_п’Ñтницю_Ñуботу'.split('_'),
- 'genitive': 'неділі_понеділка_вівторка_Ñереди_четверга_п’Ñтниці_Ñуботи'.split('_')
- },
-
- nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ?
- 'accusative' :
- ((/\[?(?:минулої|наÑтупної)? ?\] ?dddd/).test(format) ?
- 'genitive' :
- 'nominative');
-
- return weekdays[nounCase][m.day()];
- }
-
- function processHoursFunction(str) {
- return function () {
- return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';
- };
- }
-
- return moment.lang('uk', {
- months : monthsCaseReplace,
- monthsShort : "Ñіч_лют_бер_квіт_трав_черв_лип_Ñерп_вер_жовт_лиÑÑ‚_груд".split("_"),
- weekdays : weekdaysCaseReplace,
- weekdaysShort : "нд_пн_вт_ÑÑ€_чт_пт_Ñб".split("_"),
- weekdaysMin : "нд_пн_вт_ÑÑ€_чт_пт_Ñб".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "DD.MM.YYYY",
- LL : "D MMMM YYYY р.",
- LLL : "D MMMM YYYY р., LT",
- LLLL : "dddd, D MMMM YYYY р., LT"
- },
- calendar : {
- sameDay: processHoursFunction('[Сьогодні '),
- nextDay: processHoursFunction('[Завтра '),
- lastDay: processHoursFunction('[Вчора '),
- nextWeek: processHoursFunction('[У] dddd ['),
- lastWeek: function () {
- switch (this.day()) {
- case 0:
- case 3:
- case 5:
- case 6:
- return processHoursFunction('[Минулої] dddd [').call(this);
- case 1:
- case 2:
- case 4:
- return processHoursFunction('[Минулого] dddd [').call(this);
- }
- },
- sameElse: 'L'
- },
- relativeTime : {
- future : "за %s",
- past : "%s тому",
- s : "декілька Ñекунд",
- m : relativeTimeWithPlural,
- mm : relativeTimeWithPlural,
- h : "годину",
- hh : relativeTimeWithPlural,
- d : "день",
- dd : relativeTimeWithPlural,
- M : "міÑÑць",
- MM : relativeTimeWithPlural,
- y : "рік",
- yy : relativeTimeWithPlural
- },
-
- // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
-
- meridiem : function (hour, minute, isLower) {
- if (hour < 4) {
- return "ночі";
- } else if (hour < 12) {
- return "ранку";
- } else if (hour < 17) {
- return "днÑ";
- } else {
- return "вечора";
- }
- },
-
- ordinal: function (number, period) {
- switch (period) {
- case 'M':
- case 'd':
- case 'DDD':
- case 'w':
- case 'W':
- return number + '-й';
- case 'D':
- return number + '-го';
- default:
- return number;
- }
- },
-
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 7 // The week that contains Jan 1st is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : uzbek
-// author : Sardor Muminov : https://github.com/muminoff
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('uz', {
- months : "Ñнварь_февраль_март_апрель_май_июнь_июль_авгуÑÑ‚_ÑентÑбрь_октÑбрь_ноÑбрь_декабрь".split("_"),
- monthsShort : "Ñнв_фев_мар_апр_май_июн_июл_авг_Ñен_окт_ноÑ_дек".split("_"),
- weekdays : "Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),
- weekdaysShort : "Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),
- weekdaysMin : "Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "DD/MM/YYYY",
- LL : "D MMMM YYYY",
- LLL : "D MMMM YYYY LT",
- LLLL : "D MMMM YYYY, dddd LT"
- },
- calendar : {
- sameDay : '[Бугун Ñоат] LT [да]',
- nextDay : '[Эртага] LT [да]',
- nextWeek : 'dddd [куни Ñоат] LT [да]',
- lastDay : '[Кеча Ñоат] LT [да]',
- lastWeek : '[Утган] dddd [куни Ñоат] LT [да]',
- sameElse : 'L'
- },
- relativeTime : {
- future : "Якин %s ичида",
- past : "Бир неча %s олдин",
- s : "фурÑат",
- m : "бир дакика",
- mm : "%d дакика",
- h : "бир Ñоат",
- hh : "%d Ñоат",
- d : "бир кун",
- dd : "%d кун",
- M : "бир ой",
- MM : "%d ой",
- y : "бир йил",
- yy : "%d йил"
- },
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 7 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : vietnamese (vn)
-// author : Bang Nguyen : https://github.com/bangnk
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('vn', {
- months : "tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),
- monthsShort : "Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),
- weekdays : "chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),
- weekdaysShort : "CN_T2_T3_T4_T5_T6_T7".split("_"),
- weekdaysMin : "CN_T2_T3_T4_T5_T6_T7".split("_"),
- longDateFormat : {
- LT : "HH:mm",
- L : "DD/MM/YYYY",
- LL : "D MMMM [năm] YYYY",
- LLL : "D MMMM [năm] YYYY LT",
- LLLL : "dddd, D MMMM [năm] YYYY LT",
- l : "DD/M/YYYY",
- ll : "D MMM YYYY",
- lll : "D MMM YYYY LT",
- llll : "ddd, D MMM YYYY LT"
- },
- calendar : {
- sameDay: "[Hôm nay lúc] LT",
- nextDay: '[Ngày mai lúc] LT',
- nextWeek: 'dddd [tuần tới lúc] LT',
- lastDay: '[Hôm qua lúc] LT',
- lastWeek: 'dddd [tuần rồi lúc] LT',
- sameElse: 'L'
- },
- relativeTime : {
- future : "%s tá»›i",
- past : "%s trÆ°á»›c",
- s : "vài giây",
- m : "một phút",
- mm : "%d phút",
- h : "má»™t giá»",
- hh : "%d giá»",
- d : "một ngày",
- dd : "%d ngày",
- M : "một tháng",
- MM : "%d tháng",
- y : "một năm",
- yy : "%d năm"
- },
- ordinal : function (number) {
- return number;
- },
- week : {
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : chinese
-// author : suupic : https://github.com/suupic
-// author : Zeno Zeng : https://github.com/zenozeng
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('zh-cn', {
- months : "一月_二月_三月_四月_五月_六月_七月_八月_ä¹æœˆ_å月_å一月_å二月".split("_"),
- monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),
- weekdays : "星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),
- weekdaysShort : "周日_周一_周二_周三_周四_周五_周六".split("_"),
- weekdaysMin : "日_一_二_三_四_五_六".split("_"),
- longDateFormat : {
- LT : "Ah点mm",
- L : "YYYYå¹´MMMDæ—¥",
- LL : "YYYYå¹´MMMDæ—¥",
- LLL : "YYYYå¹´MMMDæ—¥LT",
- LLLL : "YYYYå¹´MMMDæ—¥ddddLT",
- l : "YYYYå¹´MMMDæ—¥",
- ll : "YYYYå¹´MMMDæ—¥",
- lll : "YYYYå¹´MMMDæ—¥LT",
- llll : "YYYYå¹´MMMDæ—¥ddddLT"
- },
- meridiem : function (hour, minute, isLower) {
- var hm = hour * 100 + minute;
- if (hm < 600) {
- return "凌晨";
- } else if (hm < 900) {
- return "早上";
- } else if (hm < 1130) {
- return "上åˆ";
- } else if (hm < 1230) {
- return "中åˆ";
- } else if (hm < 1800) {
- return "下åˆ";
- } else {
- return "晚上";
- }
- },
- calendar : {
- sameDay : function () {
- return this.minutes() === 0 ? "[今天]Ah[点整]" : "[今天]LT";
- },
- nextDay : function () {
- return this.minutes() === 0 ? "[明天]Ah[点整]" : "[明天]LT";
- },
- lastDay : function () {
- return this.minutes() === 0 ? "[昨天]Ah[点整]" : "[昨天]LT";
- },
- nextWeek : function () {
- var startOfWeek, prefix;
- startOfWeek = moment().startOf('week');
- prefix = this.unix() - startOfWeek.unix() >= 7 * 24 * 3600 ? '[下]' : '[本]';
- return this.minutes() === 0 ? prefix + "dddAh点整" : prefix + "dddAh点mm";
- },
- lastWeek : function () {
- var startOfWeek, prefix;
- startOfWeek = moment().startOf('week');
- prefix = this.unix() < startOfWeek.unix() ? '[上]' : '[本]';
- return this.minutes() === 0 ? prefix + "dddAh点整" : prefix + "dddAh点mm";
- },
- sameElse : 'L'
- },
- ordinal : function (number, period) {
- switch (period) {
- case "d":
- case "D":
- case "DDD":
- return number + "æ—¥";
- case "M":
- return number + "月";
- case "w":
- case "W":
- return number + "周";
- default:
- return number;
- }
- },
- relativeTime : {
- future : "%s内",
- past : "%så‰",
- s : "几秒",
- m : "1分钟",
- mm : "%d分钟",
- h : "1å°æ—¶",
- hh : "%då°æ—¶",
- d : "1天",
- dd : "%d天",
- M : "1个月",
- MM : "%d个月",
- y : "1å¹´",
- yy : "%då¹´"
- },
- week : {
- // GB/T 7408-1994《数æ®å…ƒå’Œäº¤æ¢æ ¼å¼Â·ä¿¡æ¯äº¤æ¢Â·æ—¥æœŸå’Œæ—¶é—´è¡¨ç¤ºæ³•ã€‹ä¸ŽISO 8601:1988等效
- dow : 1, // Monday is the first day of the week.
- doy : 4 // The week that contains Jan 4th is the first week of the year.
- }
- });
-}));
-// moment.js language configuration
-// language : traditional chinese (zh-tw)
-// author : Ben : https://github.com/ben-lin
-
-(function (factory) {
- factory(moment);
-}(function (moment) {
- return moment.lang('zh-tw', {
- months : "一月_二月_三月_四月_五月_六月_七月_八月_ä¹æœˆ_å月_å一月_å二月".split("_"),
- monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),
- weekdays : "星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),
- weekdaysShort : "週日_週一_週二_週三_週四_週五_週六".split("_"),
- weekdaysMin : "日_一_二_三_四_五_六".split("_"),
- longDateFormat : {
- LT : "Ah點mm",
- L : "YYYYå¹´MMMDæ—¥",
- LL : "YYYYå¹´MMMDæ—¥",
- LLL : "YYYYå¹´MMMDæ—¥LT",
- LLLL : "YYYYå¹´MMMDæ—¥ddddLT",
- l : "YYYYå¹´MMMDæ—¥",
- ll : "YYYYå¹´MMMDæ—¥",
- lll : "YYYYå¹´MMMDæ—¥LT",
- llll : "YYYYå¹´MMMDæ—¥ddddLT"
- },
- meridiem : function (hour, minute, isLower) {
- var hm = hour * 100 + minute;
- if (hm < 900) {
- return "早上";
- } else if (hm < 1130) {
- return "上åˆ";
- } else if (hm < 1230) {
- return "中åˆ";
- } else if (hm < 1800) {
- return "下åˆ";
- } else {
- return "晚上";
- }
- },
- calendar : {
- sameDay : '[今天]LT',
- nextDay : '[明天]LT',
- nextWeek : '[下]ddddLT',
- lastDay : '[昨天]LT',
- lastWeek : '[上]ddddLT',
- sameElse : 'L'
- },
- ordinal : function (number, period) {
- switch (period) {
- case "d" :
- case "D" :
- case "DDD" :
- return number + "æ—¥";
- case "M" :
- return number + "月";
- case "w" :
- case "W" :
- return number + "週";
- default :
- return number;
- }
- },
- relativeTime : {
- future : "%så…§",
- past : "%så‰",
- s : "幾秒",
- m : "一分é˜",
- mm : "%d分é˜",
- h : "一å°æ™‚",
- hh : "%då°æ™‚",
- d : "一天",
- dd : "%d天",
- M : "一個月",
- MM : "%d個月",
- y : "一年",
- yy : "%då¹´"
- }
- });
-}));
-
- moment.lang('en');
-
-
- /************************************
- Exposing Moment
- ************************************/
-
- function makeGlobal(deprecate) {
- var warned = false, local_moment = moment;
- /*global ender:false */
- if (typeof ender !== 'undefined') {
- return;
- }
- // here, `this` means `window` in the browser, or `global` on the server
- // add `moment` as a global object via a string identifier,
- // for Closure Compiler "advanced" mode
- if (deprecate) {
- this.moment = function () {
- if (!warned && console && console.warn) {
- warned = true;
- console.warn(
- "Accessing Moment through the global scope is " +
- "deprecated, and will be removed in an upcoming " +
- "release.");
- }
- return local_moment.apply(null, arguments);
- };
- } else {
- this['moment'] = moment;
- }
- }
-
- // CommonJS module is defined
- if (hasModule) {
- module.exports = moment;
- makeGlobal(true);
- } else if (typeof define === "function" && define.amd) {
- define("moment", function (require, exports, module) {
- if (module.config().noGlobal !== true) {
- // If user provided noGlobal, he is aware of global
- makeGlobal(module.config().noGlobal === undefined);
- }
-
- return moment;
- });
- } else {
- makeGlobal();
- }
-}).call(this);
diff --git a/library/bootstrap-tagsinput/LICENSE b/library/bootstrap-tagsinput/LICENSE
new file mode 100644
index 000000000..58bc985ba
--- /dev/null
+++ b/library/bootstrap-tagsinput/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2013 Tim Schlechter
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/library/bootstrap-tagsinput/README b/library/bootstrap-tagsinput/README
new file mode 100644
index 000000000..a7c96d53a
--- /dev/null
+++ b/library/bootstrap-tagsinput/README
@@ -0,0 +1 @@
+Taken from https://github.com/gdibble/bootstrap-tagsinput/tree/traditionalPlaceholderEffect which has proper support for placeholders
diff --git a/library/bootstrap-tagsinput/README.md b/library/bootstrap-tagsinput/README.md
new file mode 100644
index 000000000..363c0d50b
--- /dev/null
+++ b/library/bootstrap-tagsinput/README.md
@@ -0,0 +1,879 @@
+
+
+
+
+<!DOCTYPE html>
+<html lang="en" class="">
+ <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# object: http://ogp.me/ns/object# article: http://ogp.me/ns/article# profile: http://ogp.me/ns/profile#">
+ <meta charset='utf-8'>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta http-equiv="Content-Language" content="en">
+
+
+ <title>bootstrap-tagsinput/README.md at master · TimSchlechter/bootstrap-tagsinput · GitHub</title>
+ <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">
+ <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
+ <link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/apple-touch-icon-144.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/apple-touch-icon-144.png">
+ <meta property="fb:app_id" content="1401488693436528">
+
+ <meta content="@github" name="twitter:site" /><meta content="summary" name="twitter:card" /><meta content="TimSchlechter/bootstrap-tagsinput" name="twitter:title" /><meta content="bootstrap-tagsinput - jQuery tags input plugin based on Twitter Bootstrap." name="twitter:description" /><meta content="https://avatars1.githubusercontent.com/u/2721613?v=3&amp;s=400" name="twitter:image:src" />
+<meta content="GitHub" property="og:site_name" /><meta content="object" property="og:type" /><meta content="https://avatars1.githubusercontent.com/u/2721613?v=3&amp;s=400" property="og:image" /><meta content="TimSchlechter/bootstrap-tagsinput" property="og:title" /><meta content="https://github.com/TimSchlechter/bootstrap-tagsinput" property="og:url" /><meta content="bootstrap-tagsinput - jQuery tags input plugin based on Twitter Bootstrap." property="og:description" />
+
+ <meta name="browser-stats-url" content="/_stats">
+ <link rel="assets" href="https://assets-cdn.github.com/">
+ <link rel="conduit-xhr" href="https://ghconduit.com:25035">
+
+ <meta name="pjax-timeout" content="1000">
+
+
+ <meta name="msapplication-TileImage" content="/windows-tile.png">
+ <meta name="msapplication-TileColor" content="#ffffff">
+ <meta name="selected-link" value="repo_source" data-pjax-transient>
+ <meta name="google-analytics" content="UA-3769691-2">
+
+ <meta content="collector.githubapp.com" name="octolytics-host" /><meta content="collector-cdn.github.com" name="octolytics-script-host" /><meta content="github" name="octolytics-app-id" /><meta content="05C412F3:5EFA:620CC:54968B9C" name="octolytics-dimension-request_id" />
+
+ <meta content="Rails, view, blob#show" name="analytics-event" />
+
+
+
+ <link rel="icon" type="image/x-icon" href="https://assets-cdn.github.com/favicon.ico">
+
+
+ <meta content="authenticity_token" name="csrf-param" />
+<meta content="pq46YRAN8EIxwiqw1PBmOS18o8ukCrBKyIwYs6EhhTJPiGbEXhKdJxdkbRWl+VYne3E3iSUijxSIsYnZnQddlg==" name="csrf-token" />
+
+ <link href="https://assets-cdn.github.com/assets/github-9bcf5def7eb44e2a101b20aaecf3707f4b0a10ab8f4d6eebec29371f821c4b29.css" media="all" rel="stylesheet" type="text/css" />
+ <link href="https://assets-cdn.github.com/assets/github2-47bc67324d463c7cecb5ee4c009628c91db85b0e9288a9e663f2d06ff9e03088.css" media="all" rel="stylesheet" type="text/css" />
+
+
+
+
+ <meta http-equiv="x-pjax-version" content="cffc32e08a29062b908cc3ddb47285af">
+
+
+ <meta name="description" content="bootstrap-tagsinput - jQuery tags input plugin based on Twitter Bootstrap.">
+ <meta name="go-import" content="github.com/TimSchlechter/bootstrap-tagsinput git https://github.com/TimSchlechter/bootstrap-tagsinput.git">
+
+ <meta content="2721613" name="octolytics-dimension-user_id" /><meta content="TimSchlechter" name="octolytics-dimension-user_login" /><meta content="11534941" name="octolytics-dimension-repository_id" /><meta content="TimSchlechter/bootstrap-tagsinput" name="octolytics-dimension-repository_nwo" /><meta content="true" name="octolytics-dimension-repository_public" /><meta content="false" name="octolytics-dimension-repository_is_fork" /><meta content="11534941" name="octolytics-dimension-repository_network_root_id" /><meta content="TimSchlechter/bootstrap-tagsinput" name="octolytics-dimension-repository_network_root_nwo" />
+ <link href="https://github.com/TimSchlechter/bootstrap-tagsinput/commits/master.atom" rel="alternate" title="Recent Commits to bootstrap-tagsinput:master" type="application/atom+xml">
+
+ </head>
+
+
+ <body class="logged_out env-production vis-public page-blob">
+ <a href="#start-of-content" tabindex="1" class="accessibility-aid js-skip-to-content">Skip to content</a>
+ <div class="wrapper">
+
+
+
+
+
+
+
+ <div class="header header-logged-out" role="banner">
+ <div class="container clearfix">
+
+ <a class="header-logo-wordmark" href="https://github.com/" ga-data-click="(Logged out) Header, go to homepage, icon:logo-wordmark">
+ <span class="mega-octicon octicon-logo-github"></span>
+ </a>
+
+ <div class="header-actions" role="navigation">
+ <a class="button primary" href="/join" data-ga-click="(Logged out) Header, clicked Sign up, text:sign-up">Sign up</a>
+ <a class="button" href="/login?return_to=%2FTimSchlechter%2Fbootstrap-tagsinput%2Fblob%2Fmaster%2FREADME.md" data-ga-click="(Logged out) Header, clicked Sign in, text:sign-in">Sign in</a>
+ </div>
+
+ <div class="site-search repo-scope js-site-search" role="search">
+ <form accept-charset="UTF-8" action="/TimSchlechter/bootstrap-tagsinput/search" class="js-site-search-form" data-global-search-url="/search" data-repo-search-url="/TimSchlechter/bootstrap-tagsinput/search" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>
+ <input type="text"
+ class="js-site-search-field is-clearable"
+ data-hotkey="s"
+ name="q"
+ placeholder="Search"
+ data-global-scope-placeholder="Search GitHub"
+ data-repo-scope-placeholder="Search"
+ tabindex="1"
+ autocapitalize="off">
+ <div class="scope-badge">This repository</div>
+</form>
+ </div>
+
+ <ul class="header-nav left" role="navigation">
+ <li class="header-nav-item">
+ <a class="header-nav-link" href="/explore" data-ga-click="(Logged out) Header, go to explore, text:explore">Explore</a>
+ </li>
+ <li class="header-nav-item">
+ <a class="header-nav-link" href="/features" data-ga-click="(Logged out) Header, go to features, text:features">Features</a>
+ </li>
+ <li class="header-nav-item">
+ <a class="header-nav-link" href="https://enterprise.github.com/" data-ga-click="(Logged out) Header, go to enterprise, text:enterprise">Enterprise</a>
+ </li>
+ <li class="header-nav-item">
+ <a class="header-nav-link" href="/blog" data-ga-click="(Logged out) Header, go to blog, text:blog">Blog</a>
+ </li>
+ </ul>
+
+ </div>
+</div>
+
+
+
+ <div id="start-of-content" class="accessibility-aid"></div>
+ <div class="site" itemscope itemtype="http://schema.org/WebPage">
+ <div id="js-flash-container">
+
+ </div>
+ <div class="pagehead repohead instapaper_ignore readability-menu">
+ <div class="container">
+
+<ul class="pagehead-actions">
+
+
+ <li>
+ <a href="/login?return_to=%2FTimSchlechter%2Fbootstrap-tagsinput"
+ class="minibutton with-count star-button tooltipped tooltipped-n"
+ aria-label="You must be signed in to star a repository" rel="nofollow">
+ <span class="octicon octicon-star"></span>
+ Star
+ </a>
+
+ <a class="social-count js-social-count" href="/TimSchlechter/bootstrap-tagsinput/stargazers">
+ 755
+ </a>
+
+ </li>
+
+ <li>
+ <a href="/login?return_to=%2FTimSchlechter%2Fbootstrap-tagsinput"
+ class="minibutton with-count js-toggler-target fork-button tooltipped tooltipped-n"
+ aria-label="You must be signed in to fork a repository" rel="nofollow">
+ <span class="octicon octicon-repo-forked"></span>
+ Fork
+ </a>
+ <a href="/TimSchlechter/bootstrap-tagsinput/network" class="social-count">
+ 307
+ </a>
+ </li>
+</ul>
+
+ <h1 itemscope itemtype="http://data-vocabulary.org/Breadcrumb" class="entry-title public">
+ <span class="mega-octicon octicon-repo"></span>
+ <span class="author"><a href="/TimSchlechter" class="url fn" itemprop="url" rel="author"><span itemprop="title">TimSchlechter</span></a></span><!--
+ --><span class="path-divider">/</span><!--
+ --><strong><a href="/TimSchlechter/bootstrap-tagsinput" class="js-current-repository" data-pjax="#js-repo-pjax-container">bootstrap-tagsinput</a></strong>
+
+ <span class="page-context-loader">
+ <img alt="" height="16" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif" width="16" />
+ </span>
+
+ </h1>
+ </div><!-- /.container -->
+ </div><!-- /.repohead -->
+
+ <div class="container">
+ <div class="repository-with-sidebar repo-container new-discussion-timeline ">
+ <div class="repository-sidebar clearfix">
+
+<nav class="sunken-menu repo-nav js-repo-nav js-sidenav-container-pjax js-octicon-loaders"
+ role="navigation"
+ data-pjax="#js-repo-pjax-container"
+ data-issue-count-url="/TimSchlechter/bootstrap-tagsinput/issues/counts">
+ <ul class="sunken-menu-group">
+ <li class="tooltipped tooltipped-w" aria-label="Code">
+ <a href="/TimSchlechter/bootstrap-tagsinput" aria-label="Code" class="selected js-selected-navigation-item sunken-menu-item" data-hotkey="g c" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches /TimSchlechter/bootstrap-tagsinput">
+ <span class="octicon octicon-code"></span> <span class="full-word">Code</span>
+ <img alt="" class="mini-loader" height="16" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif" width="16" />
+</a> </li>
+
+ <li class="tooltipped tooltipped-w" aria-label="Issues">
+ <a href="/TimSchlechter/bootstrap-tagsinput/issues" aria-label="Issues" class="js-selected-navigation-item sunken-menu-item" data-hotkey="g i" data-selected-links="repo_issues repo_labels repo_milestones /TimSchlechter/bootstrap-tagsinput/issues">
+ <span class="octicon octicon-issue-opened"></span> <span class="full-word">Issues</span>
+ <span class="js-issue-replace-counter"></span>
+ <img alt="" class="mini-loader" height="16" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif" width="16" />
+</a> </li>
+
+ <li class="tooltipped tooltipped-w" aria-label="Pull Requests">
+ <a href="/TimSchlechter/bootstrap-tagsinput/pulls" aria-label="Pull Requests" class="js-selected-navigation-item sunken-menu-item" data-hotkey="g p" data-selected-links="repo_pulls /TimSchlechter/bootstrap-tagsinput/pulls">
+ <span class="octicon octicon-git-pull-request"></span> <span class="full-word">Pull Requests</span>
+ <span class="js-pull-replace-counter"></span>
+ <img alt="" class="mini-loader" height="16" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif" width="16" />
+</a> </li>
+
+
+ </ul>
+ <div class="sunken-menu-separator"></div>
+ <ul class="sunken-menu-group">
+
+ <li class="tooltipped tooltipped-w" aria-label="Pulse">
+ <a href="/TimSchlechter/bootstrap-tagsinput/pulse" aria-label="Pulse" class="js-selected-navigation-item sunken-menu-item" data-selected-links="pulse /TimSchlechter/bootstrap-tagsinput/pulse">
+ <span class="octicon octicon-pulse"></span> <span class="full-word">Pulse</span>
+ <img alt="" class="mini-loader" height="16" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif" width="16" />
+</a> </li>
+
+ <li class="tooltipped tooltipped-w" aria-label="Graphs">
+ <a href="/TimSchlechter/bootstrap-tagsinput/graphs" aria-label="Graphs" class="js-selected-navigation-item sunken-menu-item" data-selected-links="repo_graphs repo_contributors /TimSchlechter/bootstrap-tagsinput/graphs">
+ <span class="octicon octicon-graph"></span> <span class="full-word">Graphs</span>
+ <img alt="" class="mini-loader" height="16" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif" width="16" />
+</a> </li>
+ </ul>
+
+
+</nav>
+
+ <div class="only-with-full-nav">
+
+
+<div class="clone-url open"
+ data-protocol-type="http"
+ data-url="/users/set_protocol?protocol_selector=http&amp;protocol_type=clone">
+ <h3><span class="text-emphasized">HTTPS</span> clone URL</h3>
+ <div class="input-group js-zeroclipboard-container">
+ <input type="text" class="input-mini input-monospace js-url-field js-zeroclipboard-target"
+ value="https://github.com/TimSchlechter/bootstrap-tagsinput.git" readonly="readonly">
+ <span class="input-group-button">
+ <button aria-label="Copy to clipboard" class="js-zeroclipboard minibutton zeroclipboard-button" data-copied-hint="Copied!" type="button"><span class="octicon octicon-clippy"></span></button>
+ </span>
+ </div>
+</div>
+
+
+<div class="clone-url "
+ data-protocol-type="subversion"
+ data-url="/users/set_protocol?protocol_selector=subversion&amp;protocol_type=clone">
+ <h3><span class="text-emphasized">Subversion</span> checkout URL</h3>
+ <div class="input-group js-zeroclipboard-container">
+ <input type="text" class="input-mini input-monospace js-url-field js-zeroclipboard-target"
+ value="https://github.com/TimSchlechter/bootstrap-tagsinput" readonly="readonly">
+ <span class="input-group-button">
+ <button aria-label="Copy to clipboard" class="js-zeroclipboard minibutton zeroclipboard-button" data-copied-hint="Copied!" type="button"><span class="octicon octicon-clippy"></span></button>
+ </span>
+ </div>
+</div>
+
+
+
+<p class="clone-options">You can clone with
+ <a href="#" class="js-clone-selector" data-protocol="http">HTTPS</a> or <a href="#" class="js-clone-selector" data-protocol="subversion">Subversion</a>.
+ <a href="https://help.github.com/articles/which-remote-url-should-i-use" class="help tooltipped tooltipped-n" aria-label="Get help on which URL is right for you.">
+ <span class="octicon octicon-question"></span>
+ </a>
+</p>
+
+
+
+ <a href="/TimSchlechter/bootstrap-tagsinput/archive/master.zip"
+ class="minibutton sidebar-button"
+ aria-label="Download the contents of TimSchlechter/bootstrap-tagsinput as a zip file"
+ title="Download the contents of TimSchlechter/bootstrap-tagsinput as a zip file"
+ rel="nofollow">
+ <span class="octicon octicon-cloud-download"></span>
+ Download ZIP
+ </a>
+ </div>
+ </div><!-- /.repository-sidebar -->
+
+ <div id="js-repo-pjax-container" class="repository-content context-loader-container" data-pjax-container>
+
+
+<a href="/TimSchlechter/bootstrap-tagsinput/blob/a4657365808a224fe8aa950c14b96ecfce58b290/README.md" class="hidden js-permalink-shortcut" data-hotkey="y">Permalink</a>
+
+<!-- blob contrib key: blob_contributors:v21:002463f2fb860593a8410f2c5c54cd3a -->
+
+<div class="file-navigation js-zeroclipboard-container">
+
+<div class="select-menu js-menu-container js-select-menu left">
+ <span class="minibutton select-menu-button js-menu-target css-truncate" data-hotkey="w"
+ data-master-branch="master"
+ data-ref="master"
+ title="master"
+ role="button" aria-label="Switch branches or tags" tabindex="0" aria-haspopup="true">
+ <span class="octicon octicon-git-branch"></span>
+ <i>branch:</i>
+ <span class="js-select-button css-truncate-target">master</span>
+ </span>
+
+ <div class="select-menu-modal-holder js-menu-content js-navigation-container" data-pjax aria-hidden="true">
+
+ <div class="select-menu-modal">
+ <div class="select-menu-header">
+ <span class="select-menu-title">Switch branches/tags</span>
+ <span class="octicon octicon-x js-menu-close" role="button" aria-label="Close"></span>
+ </div> <!-- /.select-menu-header -->
+
+ <div class="select-menu-filters">
+ <div class="select-menu-text-filter">
+ <input type="text" aria-label="Filter branches/tags" id="context-commitish-filter-field" class="js-filterable-field js-navigation-enable" placeholder="Filter branches/tags">
+ </div>
+ <div class="select-menu-tabs">
+ <ul>
+ <li class="select-menu-tab">
+ <a href="#" data-tab-filter="branches" class="js-select-menu-tab">Branches</a>
+ </li>
+ <li class="select-menu-tab">
+ <a href="#" data-tab-filter="tags" class="js-select-menu-tab">Tags</a>
+ </li>
+ </ul>
+ </div><!-- /.select-menu-tabs -->
+ </div><!-- /.select-menu-filters -->
+
+ <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="branches">
+
+ <div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring">
+
+
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/blob/gh-pages/README.md"
+ data-name="gh-pages"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="gh-pages">gh-pages</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item selected">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/blob/master/README.md"
+ data-name="master"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="master">master</a>
+ </div> <!-- /.select-menu-item -->
+ </div>
+
+ <div class="select-menu-no-results">Nothing to show</div>
+ </div> <!-- /.select-menu-list -->
+
+ <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="tags">
+ <div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring">
+
+
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.4.2/README.md"
+ data-name="0.4.2"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.4.2">0.4.2</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.4.1/README.md"
+ data-name="0.4.1"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.4.1">0.4.1</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.4/README.md"
+ data-name="0.4"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.4">0.4</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.3.14/README.md"
+ data-name="0.3.14"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.3.14">0.3.14</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.3.13/README.md"
+ data-name="0.3.13"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.3.13">0.3.13</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.3.12/README.md"
+ data-name="0.3.12"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.3.12">0.3.12</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.3.11/README.md"
+ data-name="0.3.11"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.3.11">0.3.11</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.3.10/README.md"
+ data-name="0.3.10"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.3.10">0.3.10</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.3.9/README.md"
+ data-name="0.3.9"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.3.9">0.3.9</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.3.8/README.md"
+ data-name="0.3.8"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.3.8">0.3.8</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.3.7/README.md"
+ data-name="0.3.7"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.3.7">0.3.7</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.3.6/README.md"
+ data-name="0.3.6"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.3.6">0.3.6</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.3.5/README.md"
+ data-name="0.3.5"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.3.5">0.3.5</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.3.4/README.md"
+ data-name="0.3.4"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.3.4">0.3.4</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.3.3/README.md"
+ data-name="0.3.3"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.3.3">0.3.3</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.3.2/README.md"
+ data-name="0.3.2"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.3.2">0.3.2</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.3.1/README.md"
+ data-name="0.3.1"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.3.1">0.3.1</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.3.0/README.md"
+ data-name="0.3.0"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.3.0">0.3.0</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.2.3/README.md"
+ data-name="0.2.3"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.2.3">0.2.3</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.2.2/README.md"
+ data-name="0.2.2"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.2.2">0.2.2</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.2.1/README.md"
+ data-name="0.2.1"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.2.1">0.2.1</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.2.0/README.md"
+ data-name="0.2.0"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.2.0">0.2.0</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.1.1/README.md"
+ data-name="0.1.1"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.1.1">0.1.1</a>
+ </div> <!-- /.select-menu-item -->
+ <div class="select-menu-item js-navigation-item ">
+ <span class="select-menu-item-icon octicon octicon-check"></span>
+ <a href="/TimSchlechter/bootstrap-tagsinput/tree/0.1.0/README.md"
+ data-name="0.1.0"
+ data-skip-pjax="true"
+ rel="nofollow"
+ class="js-navigation-open select-menu-item-text css-truncate-target"
+ title="0.1.0">0.1.0</a>
+ </div> <!-- /.select-menu-item -->
+ </div>
+
+ <div class="select-menu-no-results">Nothing to show</div>
+ </div> <!-- /.select-menu-list -->
+
+ </div> <!-- /.select-menu-modal -->
+ </div> <!-- /.select-menu-modal-holder -->
+</div> <!-- /.select-menu -->
+
+ <div class="button-group right">
+ <a href="/TimSchlechter/bootstrap-tagsinput/find/master"
+ class="js-show-file-finder minibutton empty-icon tooltipped tooltipped-s"
+ data-pjax
+ data-hotkey="t"
+ aria-label="Quickly jump between files">
+ <span class="octicon octicon-list-unordered"></span>
+ </a>
+ <button aria-label="Copy file path to clipboard" class="js-zeroclipboard minibutton zeroclipboard-button" data-copied-hint="Copied!" type="button"><span class="octicon octicon-clippy"></span></button>
+ </div>
+
+ <div class="breadcrumb js-zeroclipboard-target">
+ <span class='repo-root js-repo-root'><span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/TimSchlechter/bootstrap-tagsinput" class="" data-branch="master" data-direction="back" data-pjax="true" itemscope="url"><span itemprop="title">bootstrap-tagsinput</span></a></span></span><span class="separator">/</span><strong class="final-path">README.md</strong>
+ </div>
+</div>
+
+
+ <div class="commit file-history-tease">
+ <div class="file-history-tease-header">
+ <img alt="Tim Schlechter" class="avatar" data-user="2721613" height="24" src="https://avatars3.githubusercontent.com/u/2721613?v=3&amp;s=48" width="24" />
+ <span class="author"><a href="/TimSchlechter" rel="author">TimSchlechter</a></span>
+ <time datetime="2014-07-30T18:40:53Z" is="relative-time">Jul 30, 2014</time>
+ <div class="commit-title">
+ <a href="/TimSchlechter/bootstrap-tagsinput/commit/a64536d346d252a6fb5d013a53ff0b6a6a991ba8" class="message" data-pjax="true" title="Release build 0.4">Release build 0.4</a>
+ </div>
+ </div>
+
+ <div class="participation">
+ <p class="quickstat">
+ <a href="#blob_contributors_box" rel="facebox">
+ <strong>1</strong>
+ contributor
+ </a>
+ </p>
+
+ </div>
+ <div id="blob_contributors_box" style="display:none">
+ <h2 class="facebox-header">Users who have contributed to this file</h2>
+ <ul class="facebox-user-list">
+ <li class="facebox-user-list-item">
+ <img alt="Tim Schlechter" data-user="2721613" height="24" src="https://avatars3.githubusercontent.com/u/2721613?v=3&amp;s=48" width="24" />
+ <a href="/TimSchlechter">TimSchlechter</a>
+ </li>
+ </ul>
+ </div>
+ </div>
+
+<div class="file-box">
+ <div class="file">
+ <div class="meta clearfix">
+ <div class="info file-name">
+ <span>70 lines (61 sloc)</span>
+ <span class="meta-divider"></span>
+ <span>3.157 kb</span>
+ </div>
+ <div class="actions">
+ <div class="button-group">
+ <a href="/TimSchlechter/bootstrap-tagsinput/raw/master/README.md" class="minibutton " id="raw-url">Raw</a>
+ <a href="/TimSchlechter/bootstrap-tagsinput/blame/master/README.md" class="minibutton js-update-url-with-hash">Blame</a>
+ <a href="/TimSchlechter/bootstrap-tagsinput/commits/master/README.md" class="minibutton " rel="nofollow">History</a>
+ </div><!-- /.button-group -->
+
+
+ <a class="octicon-button disabled tooltipped tooltipped-w" href="#"
+ aria-label="You must be signed in to make or propose changes"><span class="octicon octicon-pencil"></span></a>
+
+ <a class="octicon-button danger disabled tooltipped tooltipped-w" href="#"
+ aria-label="You must be signed in to make or propose changes">
+ <span class="octicon octicon-trashcan"></span>
+ </a>
+ </div><!-- /.actions -->
+ </div>
+
+ <div id="readme" class="blob instapaper_body">
+ <article class="markdown-body entry-content" itemprop="mainContentOfPage"><h1>
+<a id="user-content-bootstrap-tags-input-" class="anchor" href="#bootstrap-tags-input-" aria-hidden="true"><span class="octicon octicon-link"></span></a>Bootstrap Tags Input <a href="https://travis-ci.org/TimSchlechter/bootstrap-tagsinput"><img src="https://camo.githubusercontent.com/2d02546931244241329b98071825212a0d77dd4e/68747470733a2f2f7472617669732d63692e6f72672f54696d5363686c6563687465722f626f6f7473747261702d74616773696e7075742e7376673f6272616e63683d6d6173746572" alt="Build Status" data-canonical-src="https://travis-ci.org/TimSchlechter/bootstrap-tagsinput.svg?branch=master" style="max-width:100%;"></a>
+</h1>
+
+<p>Bootstrap Tags Input is a jQuery plugin providing a Twitter Bootstrap user interface for managing tags.</p>
+
+<h2>
+<a id="user-content-usage" class="anchor" href="#usage" aria-hidden="true"><span class="octicon octicon-link"></span></a>Usage</h2>
+
+<p>Examples can be found <a href="http://timschlechter.github.com/bootstrap-tagsinput/examples/">here</a>.</p>
+
+<h2>
+<a id="user-content-features" class="anchor" href="#features" aria-hidden="true"><span class="octicon octicon-link"></span></a>Features</h2>
+
+<ul class="task-list">
+<li>Objects as tags</li>
+<li>True multi value</li>
+<li>Typeahead</li>
+<li>Designed for Bootstrap 2.3.2 and 3</li>
+</ul>
+
+<h3>
+<a id="user-content-objects-as-tags" class="anchor" href="#objects-as-tags" aria-hidden="true"><span class="octicon octicon-link"></span></a>Objects as tags</h3>
+
+<p>Not just support for using strings! This means you can use different values
+for a tag's label and value. Each tag also holds a reference to the object
+by which it was created, so by calling <code>tagsinput('items')</code> an
+array of the original items is returned.</p>
+
+<h3>
+<a id="user-content-true-multi-value-support" class="anchor" href="#true-multi-value-support" aria-hidden="true"><span class="octicon octicon-link"></span></a>True multi value support</h3>
+
+<p>Other implementations just concatenate the values to a comma separated string.
+This results in <code>val()</code> returning just this string, and when
+submitting the form, only one big, concatenated value is sent in the request.</p>
+
+<p>Bootstrap Tags Input provides true multivalue support. Just use a
+<code>&lt;select multiple /&gt;</code> as your input element, and
+<code>val()</code> will return an array of the tag values. When submitting the
+form, an array of values will be sent with the request.</p>
+
+<h3>
+<a id="user-content-typeahead-support" class="anchor" href="#typeahead-support" aria-hidden="true"><span class="octicon octicon-link"></span></a>Typeahead support</h3>
+
+<p>Integrates with Twitter Bootstraps' 2.3.2 typeahead, or use custom typeahead when using Bootstrap 3.</p>
+
+<h2>
+<a id="user-content-development" class="anchor" href="#development" aria-hidden="true"><span class="octicon octicon-link"></span></a>Development</h2>
+
+<p>Install dependencies:</p>
+
+<pre>
+npm install
+bower install
+</pre>
+
+<p>Test:</p>
+
+<pre>
+grunt test
+</pre>
+
+<p>Build:</p>
+
+<pre>
+grunt build
+</pre>
+
+<h2>
+<a id="user-content-history" class="anchor" href="#history" aria-hidden="true"><span class="octicon octicon-link"></span></a>History</h2>
+
+<ul class="task-list">
+<li>0.4
+
+<ul class="task-list">
+<li><a href="https://github.com/TimSchlechter/bootstrap-tagsinput/pull/73">Fix typeahead when using Bootstrap 3</a></li>
+</ul>
+</li>
+<li>0.3.13
+
+<ul class="task-list">
+<li> <a href="https://github.com/TimSchlechter/bootstrap-tagsinput/issues/5">#5: Trigger events on original input/select</a>
+</li>
+<li> Loads of fixes merged with help of @janvt, @rlidwka and @kuraga: thanks for helping me out!</li>
+</ul>
+</li>
+<li>0.3.9
+
+<ul class="task-list">
+<li> <a href="https://github.com/TimSchlechter/bootstrap-tagsinput/issues/48">#48: Type ahead stops when entering second character</a>
+</li>
+</ul>
+</li>
+<li>0.3.8
+
+<ul class="task-list">
+<li> <a href="https://github.com/TimSchlechter/bootstrap-tagsinput/pull/43">#43: Add support for placeholder</a>
+</li>
+<li> <a href="https://github.com/TimSchlechter/bootstrap-tagsinput/pull/46">#46: ie 8 compatibility, replace indexOf method</a>
+</li>
+</ul>
+</li>
+<li>0.3.7
+
+<ul class="task-list">
+<li> <a href="https://github.com/TimSchlechter/bootstrap-tagsinput/issues/39">#39: flash when duplicate is entered</a>
+</li>
+</ul>
+</li>
+<li>0.3.6
+
+<ul class="task-list">
+<li> <a href="https://github.com/TimSchlechter/bootstrap-tagsinput/issues/34">#34: Error in ReloadPage</a>
+</li>
+</ul>
+</li>
+<li>0.3.5
+
+<ul class="task-list">
+<li> <a href="https://github.com/TimSchlechter/bootstrap-tagsinput/issues/10">#10: confirmKeys option</a>
+</li>
+</ul>
+</li>
+<li>0.3.4
+
+<ul class="task-list">
+<li> <a href="https://github.com/TimSchlechter/bootstrap-tagsinput/pull/24">#24: Add bsTagsInput angular directive &amp; example for bootstrap3 with typeahea...</a>
+</li>
+<li> <a href="https://github.com/TimSchlechter/bootstrap-tagsinput/pull/28">#28: Limit number of tags, enable/disable input</a>
+</li>
+<li> <a href="https://github.com/TimSchlechter/bootstrap-tagsinput/pull/33">#33: Avoid conflict with other selects when checking for value presence</a>
+</li>
+</ul>
+</li>
+</ul>
+
+<h2>
+<a id="user-content-license" class="anchor" href="#license" aria-hidden="true"><span class="octicon octicon-link"></span></a>License</h2>
+
+<p>This project is licensed under <a href="https://raw.github.com/TimSchlechter/bootstrap-tagsinput/master/LICENSE" title="Read more about the MIT license">MIT</a>.</p>
+</article>
+ </div>
+
+ </div>
+</div>
+
+<a href="#jump-to-line" rel="facebox[.linejump]" data-hotkey="l" style="display:none">Jump to Line</a>
+<div id="jump-to-line" style="display:none">
+ <form accept-charset="UTF-8" class="js-jump-to-line-form">
+ <input class="linejump-input js-jump-to-line-field" type="text" placeholder="Jump to line&hellip;" autofocus>
+ <button type="submit" class="button">Go</button>
+ </form>
+</div>
+
+ </div>
+
+ </div><!-- /.repo-container -->
+ <div class="modal-backdrop"></div>
+ </div><!-- /.container -->
+ </div><!-- /.site -->
+
+
+ </div><!-- /.wrapper -->
+
+ <div class="container">
+ <div class="site-footer" role="contentinfo">
+ <ul class="site-footer-links right">
+ <li><a href="https://status.github.com/">Status</a></li>
+ <li><a href="https://developer.github.com">API</a></li>
+ <li><a href="http://training.github.com">Training</a></li>
+ <li><a href="http://shop.github.com">Shop</a></li>
+ <li><a href="/blog">Blog</a></li>
+ <li><a href="/about">About</a></li>
+
+ </ul>
+
+ <a href="/" aria-label="Homepage">
+ <span class="mega-octicon octicon-mark-github" title="GitHub"></span>
+ </a>
+
+ <ul class="site-footer-links">
+ <li>&copy; 2014 <span title="0.02664s from github-fe122-cp1-prd.iad.github.net">GitHub</span>, Inc.</li>
+ <li><a href="/site/terms">Terms</a></li>
+ <li><a href="/site/privacy">Privacy</a></li>
+ <li><a href="/security">Security</a></li>
+ <li><a href="/contact">Contact</a></li>
+ </ul>
+ </div><!-- /.site-footer -->
+</div><!-- /.container -->
+
+
+ <div class="fullscreen-overlay js-fullscreen-overlay" id="fullscreen_overlay">
+ <div class="fullscreen-container js-suggester-container">
+ <div class="textarea-wrap">
+ <textarea name="fullscreen-contents" id="fullscreen-contents" class="fullscreen-contents js-fullscreen-contents" placeholder=""></textarea>
+ <div class="suggester-container">
+ <div class="suggester fullscreen-suggester js-suggester js-navigation-container"></div>
+ </div>
+ </div>
+ </div>
+ <div class="fullscreen-sidebar">
+ <a href="#" class="exit-fullscreen js-exit-fullscreen tooltipped tooltipped-w" aria-label="Exit Zen Mode">
+ <span class="mega-octicon octicon-screen-normal"></span>
+ </a>
+ <a href="#" class="theme-switcher js-theme-switcher tooltipped tooltipped-w"
+ aria-label="Switch themes">
+ <span class="octicon octicon-color-mode"></span>
+ </a>
+ </div>
+</div>
+
+
+
+ <div id="ajax-error-message" class="flash flash-error">
+ <span class="octicon octicon-alert"></span>
+ <a href="#" class="octicon octicon-x flash-close js-ajax-error-dismiss" aria-label="Dismiss error"></a>
+ Something went wrong with that request. Please try again.
+ </div>
+
+
+ <script crossorigin="anonymous" src="https://assets-cdn.github.com/assets/frameworks-fc447938e306b7b2c26a33cfee9dfda9052aeb1aa6ad84b72f1b35fd008efe9e.js" type="text/javascript"></script>
+ <script async="async" crossorigin="anonymous" src="https://assets-cdn.github.com/assets/github-56c56f7fe2ed90ca50b9eefebccd56f3b9729a85d7ba17f0f9c9ebd02f20a7e3.js" type="text/javascript"></script>
+
+
+ </body>
+</html>
+
diff --git a/library/bootstrap-tagsinput/bootstrap-tagsinput.css b/library/bootstrap-tagsinput/bootstrap-tagsinput.css
new file mode 100644
index 000000000..55f7c09df
--- /dev/null
+++ b/library/bootstrap-tagsinput/bootstrap-tagsinput.css
@@ -0,0 +1,46 @@
+.bootstrap-tagsinput {
+ background-color: #fff;
+ border: 1px solid #ccc;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ display: inline-block;
+ padding: 4px 6px;
+ margin-bottom: 10px;
+ color: #555;
+ vertical-align: middle;
+ border-radius: 4px;
+ max-width: 100%;
+ line-height: 22px;
+ cursor: text;
+}
+.bootstrap-tagsinput input {
+ border: none;
+ box-shadow: none;
+ outline: none;
+ background-color: transparent;
+ padding: 0;
+ margin: 0;
+ width: auto !important;
+ max-width: inherit;
+}
+.bootstrap-tagsinput input:focus {
+ border: none;
+ box-shadow: none;
+}
+.bootstrap-tagsinput .tag {
+ margin-right: 2px;
+ color: white;
+}
+.bootstrap-tagsinput .tag [data-role="remove"] {
+ margin-left: 8px;
+ cursor: pointer;
+}
+.bootstrap-tagsinput .tag [data-role="remove"]:after {
+ content: "x";
+ padding: 0px 2px;
+}
+.bootstrap-tagsinput .tag [data-role="remove"]:hover {
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+.bootstrap-tagsinput .tag [data-role="remove"]:hover:active {
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+}
diff --git a/library/bootstrap-tagsinput/bootstrap-tagsinput.js b/library/bootstrap-tagsinput/bootstrap-tagsinput.js
new file mode 100644
index 000000000..89cc3b5a4
--- /dev/null
+++ b/library/bootstrap-tagsinput/bootstrap-tagsinput.js
@@ -0,0 +1,643 @@
+(function ($) {
+ "use strict";
+
+ var defaultOptions = {
+ tagClass: function(item) {
+ return 'label label-info';
+ },
+ itemValue: function(item) {
+ return item ? item.toString() : item;
+ },
+ itemText: function(item) {
+ return this.itemValue(item);
+ },
+ freeInput: true,
+ addOnBlur: true,
+ maxTags: undefined,
+ maxChars: undefined,
+ confirmKeys: [13, 44],
+ onTagExists: function(item, $tag) {
+ $tag.hide().fadeIn();
+ },
+ trimValue: false,
+ allowDuplicates: false
+ };
+
+ /**
+ * Constructor function
+ */
+ function TagsInput(element, options) {
+ this.itemsArray = [];
+
+ this.$element = $(element);
+ this.$element.hide();
+
+ this.isSelect = (element.tagName === 'SELECT');
+ this.multiple = (this.isSelect && element.hasAttribute('multiple'));
+ this.objectItems = options && options.itemValue;
+ this.placeholderText = element.hasAttribute('placeholder') ? this.$element.attr('placeholder') : '';
+ this.inputSize = Math.max(1, this.placeholderText.length);
+
+ this.$container = $('<div class="bootstrap-tagsinput"></div>');
+ this.$input = $('<input type="text" placeholder="' + this.placeholderText + '"/>').appendTo(this.$container);
+
+ this.$element.after(this.$container);
+
+ var inputWidth = (this.inputSize < 3 ? 3 : this.inputSize) + "em";
+ this.$input.get(0).style.cssText = "width: " + inputWidth + " !important;";
+ this.build(options);
+ }
+
+ TagsInput.prototype = {
+ constructor: TagsInput,
+
+ /**
+ * Adds the given item as a new tag. Pass true to dontPushVal to prevent
+ * updating the elements val()
+ */
+ add: function(item, dontPushVal) {
+ var self = this;
+
+ if (self.options.maxTags && self.itemsArray.length >= self.options.maxTags)
+ return;
+
+ // Ignore falsey values, except false
+ if (item !== false && !item)
+ return;
+
+ // Trim value
+ if (typeof item === "string" && self.options.trimValue) {
+ item = $.trim(item);
+ }
+
+ // Throw an error when trying to add an object while the itemValue option was not set
+ if (typeof item === "object" && !self.objectItems)
+ throw("Can't add objects when itemValue option is not set");
+
+ // Ignore strings only containg whitespace
+ if (item.toString().match(/^\s*$/))
+ return;
+
+ // If SELECT but not multiple, remove current tag
+ if (self.isSelect && !self.multiple && self.itemsArray.length > 0)
+ self.remove(self.itemsArray[0]);
+
+ if (typeof item === "string" && this.$element[0].tagName === 'INPUT') {
+ var items = item.split(',');
+ if (items.length > 1) {
+ for (var i = 0; i < items.length; i++) {
+ this.add(items[i], true);
+ }
+
+ if (!dontPushVal)
+ self.pushVal();
+ return;
+ }
+ }
+
+ // raise beforeItemAdd arg
+ var beforeItemAddEvent = $.Event('beforeItemAdd', { item: item, cancel: false });
+ self.$element.trigger(beforeItemAddEvent);
+ if (beforeItemAddEvent.cancel)
+ return;
+
+ item = beforeItemAddEvent.item
+
+ var itemValue = self.options.itemValue(item),
+ itemText = self.options.itemText(item),
+ tagClass = self.options.tagClass(item);
+
+ // Ignore items allready added
+ var existing = $.grep(self.itemsArray, function(item) { return self.options.itemValue(item) === itemValue; } )[0];
+ if (existing && !self.options.allowDuplicates) {
+ // Invoke onTagExists
+ if (self.options.onTagExists) {
+ var $existingTag = $(".tag", self.$container).filter(function() { return $(this).data("item") === existing; });
+ self.options.onTagExists(item, $existingTag);
+ }
+ return;
+ }
+
+ // if length greater than limit
+ if (self.items().toString().length + item.length + 1 > self.options.maxInputLength)
+ return;
+
+ // register item in internal array and map
+ self.itemsArray.push(item);
+
+ //remove placeholder if there is an item, restore if no item(s)
+ if (self.itemsArray.length)
+ self.$input.attr('placeholder', '');
+ else
+ self.$input.attr('placeholder', self.placeholderText);
+
+ // add a tag element
+ var $tag = $('<span class="tag ' + htmlEncode(tagClass) + '">' + htmlEncode(itemText) + '<span data-role="remove"></span></span>');
+ $tag.data('item', item);
+ self.findInputWrapper().before($tag);
+ $tag.after(' ');
+
+ // add <option /> if item represents a value not present in one of the <select />'s options
+ if (self.isSelect && !$('option[value="' + encodeURIComponent(itemValue) + '"]',self.$element)[0]) {
+ var $option = $('<option selected>' + htmlEncode(itemText) + '</option>');
+ $option.data('item', item);
+ $option.attr('value', itemValue);
+ self.$element.append($option);
+ }
+
+ //remove placeholder if there is an item, restore if no item(s)
+ if (self.itemsArray.length)
+ self.$input.attr('placeholder', '');
+ else
+ self.$input.attr('placeholder', self.placeholderText);
+
+ if (!dontPushVal)
+ self.pushVal();
+
+ // Add class when reached maxTags
+ if (self.options.maxTags === self.itemsArray.length || self.items().toString().length === self.options.maxInputLength)
+ self.$container.addClass('bootstrap-tagsinput-max');
+
+ self.$element.trigger($.Event('itemAdded', { item: item }));
+ },
+
+ /**
+ * Removes the given item. Pass true to dontPushVal to prevent updating the
+ * elements val()
+ */
+ remove: function(item, dontPushVal) {
+ var self = this;
+
+ if (self.objectItems) {
+ if (typeof item === "object")
+ item = $.grep(self.itemsArray, function(other) { return self.options.itemValue(other) == self.options.itemValue(item); } );
+ else
+ item = $.grep(self.itemsArray, function(other) { return self.options.itemValue(other) == item; } );
+
+ item = item[item.length-1];
+ }
+
+ if (item) {
+ var beforeItemRemoveEvent = $.Event('beforeItemRemove', { item: item, cancel: false });
+ self.$element.trigger(beforeItemRemoveEvent);
+ if (beforeItemRemoveEvent.cancel)
+ return;
+
+ $('.tag', self.$container).filter(function() { return $(this).data('item') === item; }).remove();
+ $('option', self.$element).filter(function() { return $(this).data('item') === item; }).remove();
+ if($.inArray(item, self.itemsArray) !== -1)
+ self.itemsArray.splice($.inArray(item, self.itemsArray), 1);
+ }
+
+ //remove placeholder if there is an item, restore if no item(s)
+ if (self.itemsArray.length)
+ self.$input.attr('placeholder', '');
+ else
+ self.$input.attr('placeholder', self.placeholderText);
+
+ if (!dontPushVal)
+ self.pushVal();
+
+ // Remove class when reached maxTags
+ if (self.options.maxTags > self.itemsArray.length)
+ self.$container.removeClass('bootstrap-tagsinput-max');
+
+ self.$element.trigger($.Event('itemRemoved', { item: item }));
+ },
+
+ /**
+ * Removes all items
+ */
+ removeAll: function() {
+ var self = this;
+
+ $('.tag', self.$container).remove();
+ $('option', self.$element).remove();
+
+ while(self.itemsArray.length > 0)
+ self.itemsArray.pop();
+
+ //remove placeholder if there is an item, restore if no item(s)
+ if (self.itemsArray.length)
+ self.$input.attr('placeholder', '');
+ else
+ self.$input.attr('placeholder', self.placeholderText);
+
+ self.pushVal();
+ },
+
+ /**
+ * Refreshes the tags so they match the text/value of their corresponding
+ * item.
+ */
+ refresh: function() {
+ var self = this;
+ $('.tag', self.$container).each(function() {
+ var $tag = $(this),
+ item = $tag.data('item'),
+ itemValue = self.options.itemValue(item),
+ itemText = self.options.itemText(item),
+ tagClass = self.options.tagClass(item);
+
+ // Update tag's class and inner text
+ $tag.attr('class', null);
+ $tag.addClass('tag ' + htmlEncode(tagClass));
+ $tag.contents().filter(function() {
+ return this.nodeType == 3;
+ })[0].nodeValue = htmlEncode(itemText);
+
+ if (self.isSelect) {
+ var option = $('option', self.$element).filter(function() { return $(this).data('item') === item; });
+ option.attr('value', itemValue);
+ }
+ });
+ },
+
+ /**
+ * Returns the items added as tags
+ */
+ items: function() {
+ return this.itemsArray;
+ },
+
+ /**
+ * Assembly value by retrieving the value of each item, and set it on the
+ * element.
+ */
+ pushVal: function() {
+ var self = this,
+ val = $.map(self.items(), function(item) {
+ return self.options.itemValue(item).toString();
+ });
+
+ self.$element.val(val, true).trigger('change');
+ },
+
+ /**
+ * Initializes the tags input behaviour on the element
+ */
+ build: function(options) {
+ var self = this;
+
+ self.options = $.extend({}, defaultOptions, options);
+ // When itemValue is set, freeInput should always be false
+ if (self.objectItems)
+ self.options.freeInput = false;
+
+ makeOptionItemFunction(self.options, 'itemValue');
+ makeOptionItemFunction(self.options, 'itemText');
+ makeOptionFunction(self.options, 'tagClass');
+
+ // Typeahead Bootstrap version 2.3.2
+ if (self.options.typeahead) {
+ var typeahead = self.options.typeahead || {};
+
+ makeOptionFunction(typeahead, 'source');
+
+ self.$input.typeahead($.extend({}, typeahead, {
+ source: function (query, process) {
+ function processItems(items) {
+ var texts = [];
+
+ for (var i = 0; i < items.length; i++) {
+ var text = self.options.itemText(items[i]);
+ map[text] = items[i];
+ texts.push(text);
+ }
+ process(texts);
+ }
+
+ this.map = {};
+ var map = this.map,
+ data = typeahead.source(query);
+
+ if ($.isFunction(data.success)) {
+ // support for Angular callbacks
+ data.success(processItems);
+ } else if ($.isFunction(data.then)) {
+ // support for Angular promises
+ data.then(processItems);
+ } else {
+ // support for functions and jquery promises
+ $.when(data)
+ .then(processItems);
+ }
+ },
+ updater: function (text) {
+ self.add(this.map[text]);
+ },
+ matcher: function (text) {
+ return (text.toLowerCase().indexOf(this.query.trim().toLowerCase()) !== -1);
+ },
+ sorter: function (texts) {
+ return texts.sort();
+ },
+ highlighter: function (text) {
+ var regex = new RegExp( '(' + this.query + ')', 'gi' );
+ return text.replace( regex, "<strong>$1</strong>" );
+ }
+ }));
+ }
+
+ // typeahead.js
+ if (self.options.typeaheadjs) {
+ var typeaheadjs = self.options.typeaheadjs || {};
+
+ self.$input.typeahead(null, typeaheadjs).on('typeahead:selected', $.proxy(function (obj, datum) {
+ if (typeaheadjs.valueKey)
+ self.add(datum[typeaheadjs.valueKey]);
+ else
+ self.add(datum);
+ self.$input.typeahead('val', '');
+ }, self));
+ }
+
+ self.$container.on('click', $.proxy(function(event) {
+ if (! self.$element.attr('disabled')) {
+ self.$input.removeAttr('disabled');
+ }
+ self.$input.focus();
+ }, self));
+
+ if (self.options.addOnBlur && self.options.freeInput) {
+ self.$input.on('focusout', $.proxy(function(event) {
+ // HACK: only process on focusout when no typeahead opened, to
+ // avoid adding the typeahead text as tag
+ if ($('.typeahead, .twitter-typeahead', self.$container).length === 0) {
+ self.add(self.$input.val());
+ self.$input.val('');
+ }
+ }, self));
+ }
+
+
+ self.$container.on('keydown', 'input', $.proxy(function(event) {
+ var $input = $(event.target),
+ $inputWrapper = self.findInputWrapper();
+
+ if (self.$element.attr('disabled')) {
+ self.$input.attr('disabled', 'disabled');
+ return;
+ }
+
+ switch (event.which) {
+ // BACKSPACE
+ case 8:
+ if (doGetCaretPosition($input[0]) === 0) {
+ var prev = $inputWrapper.prev();
+ if (prev) {
+ self.remove(prev.data('item'));
+ }
+ }
+ break;
+
+ // DELETE
+ case 46:
+ if (doGetCaretPosition($input[0]) === 0) {
+ var next = $inputWrapper.next();
+ if (next) {
+ self.remove(next.data('item'));
+ }
+ }
+ break;
+
+ // LEFT ARROW
+ case 37:
+ // Try to move the input before the previous tag
+ var $prevTag = $inputWrapper.prev();
+ if ($input.val().length === 0 && $prevTag[0]) {
+ $prevTag.before($inputWrapper);
+ $input.focus();
+ }
+ break;
+ // RIGHT ARROW
+ case 39:
+ // Try to move the input after the next tag
+ var $nextTag = $inputWrapper.next();
+ if ($input.val().length === 0 && $nextTag[0]) {
+ $nextTag.after($inputWrapper);
+ $input.focus();
+ }
+ break;
+ default:
+ // ignore
+ }
+
+ // Reset internal input's size
+ var textLength = $input.val().length,
+ wordSpace = Math.ceil(textLength / 5),
+ size = textLength + wordSpace + 1;
+ $input.attr('size', Math.max(this.inputSize, $input.val().length));
+ }, self));
+
+ self.$container.on('keypress', 'input', $.proxy(function(event) {
+ var $input = $(event.target);
+
+ if (self.$element.attr('disabled')) {
+ self.$input.attr('disabled', 'disabled');
+ return;
+ }
+
+ var text = $input.val(),
+ maxLengthReached = self.options.maxChars && text.length >= self.options.maxChars;
+ if (self.options.freeInput && (keyCombinationInList(event, self.options.confirmKeys) || maxLengthReached)) {
+ self.add(maxLengthReached ? text.substr(0, self.options.maxChars) : text);
+ $input.val('');
+ event.preventDefault();
+ }
+
+ // Reset internal input's size
+ var textLength = $input.val().length,
+ wordSpace = Math.ceil(textLength / 5),
+ size = textLength + wordSpace + 1;
+ $input.attr('size', Math.max(this.inputSize, $input.val().length));
+ }, self));
+
+ // Remove icon clicked
+ self.$container.on('click', '[data-role=remove]', $.proxy(function(event) {
+ if (self.$element.attr('disabled')) {
+ return;
+ }
+ self.remove($(event.target).closest('.tag').data('item'));
+ }, self));
+
+ // Only add existing value as tags when using strings as tags
+ if (self.options.itemValue === defaultOptions.itemValue) {
+ if (self.$element[0].tagName === 'INPUT') {
+ self.add(self.$element.val());
+ } else {
+ $('option', self.$element).each(function() {
+ self.add($(this).attr('value'), true);
+ });
+ }
+ }
+ },
+
+ /**
+ * Removes all tagsinput behaviour and unregsiter all event handlers
+ */
+ destroy: function() {
+ var self = this;
+
+ // Unbind events
+ self.$container.off('keypress', 'input');
+ self.$container.off('click', '[role=remove]');
+
+ self.$container.remove();
+ self.$element.removeData('tagsinput');
+ self.$element.show();
+ },
+
+ /**
+ * Sets focus on the tagsinput
+ */
+ focus: function() {
+ this.$input.focus();
+ },
+
+ /**
+ * Returns the internal input element
+ */
+ input: function() {
+ return this.$input;
+ },
+
+ /**
+ * Returns the element which is wrapped around the internal input. This
+ * is normally the $container, but typeahead.js moves the $input element.
+ */
+ findInputWrapper: function() {
+ var elt = this.$input[0],
+ container = this.$container[0];
+ while(elt && elt.parentNode !== container)
+ elt = elt.parentNode;
+
+ return $(elt);
+ }
+ };
+
+ /**
+ * Register JQuery plugin
+ */
+ $.fn.tagsinput = function(arg1, arg2) {
+ var results = [];
+
+ this.each(function() {
+ var tagsinput = $(this).data('tagsinput');
+ // Initialize a new tags input
+ if (!tagsinput) {
+ tagsinput = new TagsInput(this, arg1);
+ $(this).data('tagsinput', tagsinput);
+ results.push(tagsinput);
+
+ if (this.tagName === 'SELECT') {
+ $('option', $(this)).attr('selected', 'selected');
+ }
+
+ // Init tags from $(this).val()
+ $(this).val($(this).val());
+ } else if (!arg1 && !arg2) {
+ // tagsinput already exists
+ // no function, trying to init
+ results.push(tagsinput);
+ } else if(tagsinput[arg1] !== undefined) {
+ // Invoke function on existing tags input
+ var retVal = tagsinput[arg1](arg2);
+ if (retVal !== undefined)
+ results.push(retVal);
+ }
+ });
+
+ if ( typeof arg1 == 'string') {
+ // Return the results from the invoked function calls
+ return results.length > 1 ? results : results[0];
+ } else {
+ return results;
+ }
+ };
+
+ $.fn.tagsinput.Constructor = TagsInput;
+
+ /**
+ * Most options support both a string or number as well as a function as
+ * option value. This function makes sure that the option with the given
+ * key in the given options is wrapped in a function
+ */
+ function makeOptionItemFunction(options, key) {
+ if (typeof options[key] !== 'function') {
+ var propertyName = options[key];
+ options[key] = function(item) { return item[propertyName]; };
+ }
+ }
+ function makeOptionFunction(options, key) {
+ if (typeof options[key] !== 'function') {
+ var value = options[key];
+ options[key] = function() { return value; };
+ }
+ }
+ /**
+ * HtmlEncodes the given value
+ */
+ var htmlEncodeContainer = $('<div />');
+ function htmlEncode(value) {
+ if (value) {
+ return htmlEncodeContainer.text(value).html();
+ } else {
+ return '';
+ }
+ }
+
+ /**
+ * Returns the position of the caret in the given input field
+ * http://flightschool.acylt.com/devnotes/caret-position-woes/
+ */
+ function doGetCaretPosition(oField) {
+ var iCaretPos = 0;
+ if (document.selection) {
+ oField.focus ();
+ var oSel = document.selection.createRange();
+ oSel.moveStart ('character', -oField.value.length);
+ iCaretPos = oSel.text.length;
+ } else if (oField.selectionStart || oField.selectionStart == '0') {
+ iCaretPos = oField.selectionStart;
+ }
+ return (iCaretPos);
+ }
+
+ /**
+ * Returns boolean indicates whether user has pressed an expected key combination.
+ * @param object keyPressEvent: JavaScript event object, refer
+ * http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+ * @param object lookupList: expected key combinations, as in:
+ * [13, {which: 188, shiftKey: true}]
+ */
+ function keyCombinationInList(keyPressEvent, lookupList) {
+ var found = false;
+ $.each(lookupList, function (index, keyCombination) {
+ if (typeof (keyCombination) === 'number' && keyPressEvent.which === keyCombination) {
+ found = true;
+ return false;
+ }
+
+ if (keyPressEvent.which === keyCombination.which) {
+ var alt = !keyCombination.hasOwnProperty('altKey') || keyPressEvent.altKey === keyCombination.altKey,
+ shift = !keyCombination.hasOwnProperty('shiftKey') || keyPressEvent.shiftKey === keyCombination.shiftKey,
+ ctrl = !keyCombination.hasOwnProperty('ctrlKey') || keyPressEvent.ctrlKey === keyCombination.ctrlKey;
+ if (alt && shift && ctrl) {
+ found = true;
+ return false;
+ }
+ }
+ });
+
+ return found;
+ }
+
+ /**
+ * Initialize tagsinput behaviour on inputs and selects which have
+ * data-role=tagsinput
+ */
+ $(function() {
+ $("input[data-role=tagsinput], select[multiple][data-role=tagsinput]").tagsinput();
+ });
+})(window.jQuery);
diff --git a/library/bootstrap/css/bootstrap-theme.css b/library/bootstrap/css/bootstrap-theme.css
index a4069929b..c4cadf15e 100644
--- a/library/bootstrap/css/bootstrap-theme.css
+++ b/library/bootstrap/css/bootstrap-theme.css
@@ -1,5 +1,5 @@
/*!
- * Bootstrap v3.1.1 (http://getbootstrap.com)
+ * Bootstrap v3.3.1 (http://getbootstrap.com)
* Copyright 2011-2014 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
@@ -29,6 +29,14 @@
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
}
+.btn-default .badge,
+.btn-primary .badge,
+.btn-success .badge,
+.btn-info .badge,
+.btn-warning .badge,
+.btn-danger .badge {
+ text-shadow: none;
+}
.btn:active,
.btn.active {
background-image: none;
@@ -36,6 +44,8 @@
.btn-default {
text-shadow: 0 1px 0 #fff;
background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
+ background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
@@ -53,26 +63,40 @@
background-color: #e0e0e0;
border-color: #dbdbdb;
}
+.btn-default:disabled,
+.btn-default[disabled] {
+ background-color: #e0e0e0;
+ background-image: none;
+}
.btn-primary {
- background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
- background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
+ background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
+ background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
- border-color: #2b669a;
+ border-color: #245580;
}
.btn-primary:hover,
.btn-primary:focus {
- background-color: #2d6ca2;
+ background-color: #265a88;
background-position: 0 -15px;
}
.btn-primary:active,
.btn-primary.active {
- background-color: #2d6ca2;
- border-color: #2b669a;
+ background-color: #265a88;
+ border-color: #245580;
+}
+.btn-primary:disabled,
+.btn-primary[disabled] {
+ background-color: #265a88;
+ background-image: none;
}
.btn-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
+ background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
@@ -89,8 +113,15 @@
background-color: #419641;
border-color: #3e8f3e;
}
+.btn-success:disabled,
+.btn-success[disabled] {
+ background-color: #419641;
+ background-image: none;
+}
.btn-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
+ background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
@@ -107,8 +138,15 @@
background-color: #2aabd2;
border-color: #28a4c9;
}
+.btn-info:disabled,
+.btn-info[disabled] {
+ background-color: #2aabd2;
+ background-image: none;
+}
.btn-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
+ background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
@@ -125,8 +163,15 @@
background-color: #eb9316;
border-color: #e38d13;
}
+.btn-warning:disabled,
+.btn-warning[disabled] {
+ background-color: #eb9316;
+ background-image: none;
+}
.btn-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
+ background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
@@ -143,6 +188,11 @@
background-color: #c12e2a;
border-color: #b92c28;
}
+.btn-danger:disabled,
+.btn-danger[disabled] {
+ background-color: #c12e2a;
+ background-image: none;
+}
.thumbnail,
.img-thumbnail {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
@@ -152,6 +202,8 @@
.dropdown-menu > li > a:focus {
background-color: #e8e8e8;
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+ background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
@@ -159,14 +211,18 @@
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
- background-color: #357ebd;
- background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
- background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
+ background-color: #2e6da4;
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+ background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+ background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
.navbar-default {
background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
+ background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
@@ -175,10 +231,13 @@
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
}
+.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .active > a {
- background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
- background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);
+ background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
+ background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
+ background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
@@ -189,15 +248,20 @@
}
.navbar-inverse {
background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
+ background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
}
+.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .active > a {
- background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%);
- background-image: linear-gradient(to bottom, #222 0%, #282828 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);
+ background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
+ background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
+ background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
@@ -211,6 +275,19 @@
.navbar-fixed-bottom {
border-radius: 0;
}
+@media (max-width: 767px) {
+ .navbar .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #fff;
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+ background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+ background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
+ background-repeat: repeat-x;
+ }
+}
.alert {
text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
@@ -218,6 +295,8 @@
}
.alert-success {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
+ background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
background-repeat: repeat-x;
@@ -225,6 +304,8 @@
}
.alert-info {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
+ background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
background-repeat: repeat-x;
@@ -232,6 +313,8 @@
}
.alert-warning {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
+ background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
background-repeat: repeat-x;
@@ -239,6 +322,8 @@
}
.alert-danger {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
+ background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
background-repeat: repeat-x;
@@ -246,40 +331,57 @@
}
.progress {
background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
+ background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar {
- background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);
- background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
+ background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
+ background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
+ background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
+ background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
+ background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
+ background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
background-repeat: repeat-x;
}
+.progress-bar-striped {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
.list-group {
border-radius: 4px;
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
@@ -288,12 +390,19 @@
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
- text-shadow: 0 -1px 0 #3071a9;
- background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);
- background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);
+ text-shadow: 0 -1px 0 #286090;
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
+ background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
+ background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
background-repeat: repeat-x;
- border-color: #3278b3;
+ border-color: #2b669a;
+}
+.list-group-item.active .badge,
+.list-group-item.active:hover .badge,
+.list-group-item.active:focus .badge {
+ text-shadow: none;
}
.panel {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
@@ -301,42 +410,56 @@
}
.panel-default > .panel-heading {
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+ background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
}
.panel-primary > .panel-heading {
- background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
- background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+ background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+ background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
.panel-success > .panel-heading {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
+ background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
background-repeat: repeat-x;
}
.panel-info > .panel-heading {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
+ background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
background-repeat: repeat-x;
}
.panel-warning > .panel-heading {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
+ background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
background-repeat: repeat-x;
}
.panel-danger > .panel-heading {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
+ background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
background-repeat: repeat-x;
}
.well {
background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
+ background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
diff --git a/library/bootstrap/css/bootstrap-theme.min.css b/library/bootstrap/css/bootstrap-theme.min.css
index ba4bd28ae..4c3e7bad7 100644
--- a/library/bootstrap/css/bootstrap-theme.min.css
+++ b/library/bootstrap/css/bootstrap-theme.min.css
@@ -1,7 +1,5 @@
/*!
- * Bootstrap v3.1.1 (http://getbootstrap.com)
+ * Bootstrap v3.3.1 (http://getbootstrap.com)
* Copyright 2011-2014 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:active,.btn.active{background-image:none}.btn-default{background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;text-shadow:0 1px 0 #fff;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-primary{background-image:-webkit-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:linear-gradient(to bottom,#428bca 0,#2d6ca2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#2b669a}.btn-primary:hover,.btn-primary:focus{background-color:#2d6ca2;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2d6ca2;border-color:#2b669a}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-color:#e8e8e8}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-color:#357ebd}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:linear-gradient(to bottom,#222 0,#282828 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0)}.progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0)}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0)}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0)}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0)}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);border-color:#3278b3}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0)}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} \ No newline at end of file
+ */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-default .badge,.btn-primary .badge,.btn-success .badge,.btn-info .badge,.btn-warning .badge,.btn-danger .badge{text-shadow:none}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:hover,.btn-primary:focus{background-color:#265a88;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#265a88;border-color:#245580}.btn-primary:disabled,.btn-primary[disabled]{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:hover .badge,.list-group-item.active:focus .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} \ No newline at end of file
diff --git a/library/bootstrap/css/bootstrap.css b/library/bootstrap/css/bootstrap.css
index 7f3665196..c6f3d2106 100644
--- a/library/bootstrap/css/bootstrap.css
+++ b/library/bootstrap/css/bootstrap.css
@@ -1,10 +1,10 @@
/*!
- * Bootstrap v3.1.1 (http://getbootstrap.com)
+ * Bootstrap v3.3.1 (http://getbootstrap.com)
* Copyright 2011-2014 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
-/*! normalize.css v3.0.0 | MIT License | git.io/normalize */
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
html {
font-family: sans-serif;
-webkit-text-size-adjust: 100%;
@@ -22,6 +22,7 @@ footer,
header,
hgroup,
main,
+menu,
nav,
section,
summary {
@@ -43,7 +44,7 @@ template {
display: none;
}
a {
- background: transparent;
+ background-color: transparent;
}
a:active,
a:hover {
@@ -94,8 +95,9 @@ figure {
}
hr {
height: 0;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
}
pre {
overflow: auto;
@@ -144,7 +146,9 @@ input {
}
input[type="checkbox"],
input[type="radio"] {
- box-sizing: border-box;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
padding: 0;
}
input[type="number"]::-webkit-inner-spin-button,
@@ -184,12 +188,16 @@ td,
th {
padding: 0;
}
+/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
@media print {
- * {
+ *,
+ *:before,
+ *:after {
color: #000 !important;
text-shadow: none !important;
background: transparent !important;
- box-shadow: none !important;
+ -webkit-box-shadow: none !important;
+ box-shadow: none !important;
}
a,
a:visited {
@@ -201,8 +209,8 @@ th {
abbr[title]:after {
content: " (" attr(title) ")";
}
- a[href^="javascript:"]:after,
- a[href^="#"]:after {
+ a[href^="#"]:after,
+ a[href^="javascript:"]:after {
content: "";
}
pre,
@@ -237,10 +245,6 @@ th {
.navbar {
display: none;
}
- .table td,
- .table th {
- background-color: #fff !important;
- }
.btn > .caret,
.dropup > .btn > .caret {
border-top-color: #000 !important;
@@ -251,11 +255,634 @@ th {
.table {
border-collapse: collapse !important;
}
+ .table td,
+ .table th {
+ background-color: #fff !important;
+ }
.table-bordered th,
.table-bordered td {
border: 1px solid #ddd !important;
}
}
+@font-face {
+ font-family: 'Glyphicons Halflings';
+
+ src: url('../fonts/glyphicons-halflings-regular.eot');
+ src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
+}
+.glyphicon {
+ position: relative;
+ top: 1px;
+ display: inline-block;
+ font-family: 'Glyphicons Halflings';
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1;
+
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+.glyphicon-asterisk:before {
+ content: "\2a";
+}
+.glyphicon-plus:before {
+ content: "\2b";
+}
+.glyphicon-euro:before,
+.glyphicon-eur:before {
+ content: "\20ac";
+}
+.glyphicon-minus:before {
+ content: "\2212";
+}
+.glyphicon-cloud:before {
+ content: "\2601";
+}
+.glyphicon-envelope:before {
+ content: "\2709";
+}
+.glyphicon-pencil:before {
+ content: "\270f";
+}
+.glyphicon-glass:before {
+ content: "\e001";
+}
+.glyphicon-music:before {
+ content: "\e002";
+}
+.glyphicon-search:before {
+ content: "\e003";
+}
+.glyphicon-heart:before {
+ content: "\e005";
+}
+.glyphicon-star:before {
+ content: "\e006";
+}
+.glyphicon-star-empty:before {
+ content: "\e007";
+}
+.glyphicon-user:before {
+ content: "\e008";
+}
+.glyphicon-film:before {
+ content: "\e009";
+}
+.glyphicon-th-large:before {
+ content: "\e010";
+}
+.glyphicon-th:before {
+ content: "\e011";
+}
+.glyphicon-th-list:before {
+ content: "\e012";
+}
+.glyphicon-ok:before {
+ content: "\e013";
+}
+.glyphicon-remove:before {
+ content: "\e014";
+}
+.glyphicon-zoom-in:before {
+ content: "\e015";
+}
+.glyphicon-zoom-out:before {
+ content: "\e016";
+}
+.glyphicon-off:before {
+ content: "\e017";
+}
+.glyphicon-signal:before {
+ content: "\e018";
+}
+.glyphicon-cog:before {
+ content: "\e019";
+}
+.glyphicon-trash:before {
+ content: "\e020";
+}
+.glyphicon-home:before {
+ content: "\e021";
+}
+.glyphicon-file:before {
+ content: "\e022";
+}
+.glyphicon-time:before {
+ content: "\e023";
+}
+.glyphicon-road:before {
+ content: "\e024";
+}
+.glyphicon-download-alt:before {
+ content: "\e025";
+}
+.glyphicon-download:before {
+ content: "\e026";
+}
+.glyphicon-upload:before {
+ content: "\e027";
+}
+.glyphicon-inbox:before {
+ content: "\e028";
+}
+.glyphicon-play-circle:before {
+ content: "\e029";
+}
+.glyphicon-repeat:before {
+ content: "\e030";
+}
+.glyphicon-refresh:before {
+ content: "\e031";
+}
+.glyphicon-list-alt:before {
+ content: "\e032";
+}
+.glyphicon-lock:before {
+ content: "\e033";
+}
+.glyphicon-flag:before {
+ content: "\e034";
+}
+.glyphicon-headphones:before {
+ content: "\e035";
+}
+.glyphicon-volume-off:before {
+ content: "\e036";
+}
+.glyphicon-volume-down:before {
+ content: "\e037";
+}
+.glyphicon-volume-up:before {
+ content: "\e038";
+}
+.glyphicon-qrcode:before {
+ content: "\e039";
+}
+.glyphicon-barcode:before {
+ content: "\e040";
+}
+.glyphicon-tag:before {
+ content: "\e041";
+}
+.glyphicon-tags:before {
+ content: "\e042";
+}
+.glyphicon-book:before {
+ content: "\e043";
+}
+.glyphicon-bookmark:before {
+ content: "\e044";
+}
+.glyphicon-print:before {
+ content: "\e045";
+}
+.glyphicon-camera:before {
+ content: "\e046";
+}
+.glyphicon-font:before {
+ content: "\e047";
+}
+.glyphicon-bold:before {
+ content: "\e048";
+}
+.glyphicon-italic:before {
+ content: "\e049";
+}
+.glyphicon-text-height:before {
+ content: "\e050";
+}
+.glyphicon-text-width:before {
+ content: "\e051";
+}
+.glyphicon-align-left:before {
+ content: "\e052";
+}
+.glyphicon-align-center:before {
+ content: "\e053";
+}
+.glyphicon-align-right:before {
+ content: "\e054";
+}
+.glyphicon-align-justify:before {
+ content: "\e055";
+}
+.glyphicon-list:before {
+ content: "\e056";
+}
+.glyphicon-indent-left:before {
+ content: "\e057";
+}
+.glyphicon-indent-right:before {
+ content: "\e058";
+}
+.glyphicon-facetime-video:before {
+ content: "\e059";
+}
+.glyphicon-picture:before {
+ content: "\e060";
+}
+.glyphicon-map-marker:before {
+ content: "\e062";
+}
+.glyphicon-adjust:before {
+ content: "\e063";
+}
+.glyphicon-tint:before {
+ content: "\e064";
+}
+.glyphicon-edit:before {
+ content: "\e065";
+}
+.glyphicon-share:before {
+ content: "\e066";
+}
+.glyphicon-check:before {
+ content: "\e067";
+}
+.glyphicon-move:before {
+ content: "\e068";
+}
+.glyphicon-step-backward:before {
+ content: "\e069";
+}
+.glyphicon-fast-backward:before {
+ content: "\e070";
+}
+.glyphicon-backward:before {
+ content: "\e071";
+}
+.glyphicon-play:before {
+ content: "\e072";
+}
+.glyphicon-pause:before {
+ content: "\e073";
+}
+.glyphicon-stop:before {
+ content: "\e074";
+}
+.glyphicon-forward:before {
+ content: "\e075";
+}
+.glyphicon-fast-forward:before {
+ content: "\e076";
+}
+.glyphicon-step-forward:before {
+ content: "\e077";
+}
+.glyphicon-eject:before {
+ content: "\e078";
+}
+.glyphicon-chevron-left:before {
+ content: "\e079";
+}
+.glyphicon-chevron-right:before {
+ content: "\e080";
+}
+.glyphicon-plus-sign:before {
+ content: "\e081";
+}
+.glyphicon-minus-sign:before {
+ content: "\e082";
+}
+.glyphicon-remove-sign:before {
+ content: "\e083";
+}
+.glyphicon-ok-sign:before {
+ content: "\e084";
+}
+.glyphicon-question-sign:before {
+ content: "\e085";
+}
+.glyphicon-info-sign:before {
+ content: "\e086";
+}
+.glyphicon-screenshot:before {
+ content: "\e087";
+}
+.glyphicon-remove-circle:before {
+ content: "\e088";
+}
+.glyphicon-ok-circle:before {
+ content: "\e089";
+}
+.glyphicon-ban-circle:before {
+ content: "\e090";
+}
+.glyphicon-arrow-left:before {
+ content: "\e091";
+}
+.glyphicon-arrow-right:before {
+ content: "\e092";
+}
+.glyphicon-arrow-up:before {
+ content: "\e093";
+}
+.glyphicon-arrow-down:before {
+ content: "\e094";
+}
+.glyphicon-share-alt:before {
+ content: "\e095";
+}
+.glyphicon-resize-full:before {
+ content: "\e096";
+}
+.glyphicon-resize-small:before {
+ content: "\e097";
+}
+.glyphicon-exclamation-sign:before {
+ content: "\e101";
+}
+.glyphicon-gift:before {
+ content: "\e102";
+}
+.glyphicon-leaf:before {
+ content: "\e103";
+}
+.glyphicon-fire:before {
+ content: "\e104";
+}
+.glyphicon-eye-open:before {
+ content: "\e105";
+}
+.glyphicon-eye-close:before {
+ content: "\e106";
+}
+.glyphicon-warning-sign:before {
+ content: "\e107";
+}
+.glyphicon-plane:before {
+ content: "\e108";
+}
+.glyphicon-calendar:before {
+ content: "\e109";
+}
+.glyphicon-random:before {
+ content: "\e110";
+}
+.glyphicon-comment:before {
+ content: "\e111";
+}
+.glyphicon-magnet:before {
+ content: "\e112";
+}
+.glyphicon-chevron-up:before {
+ content: "\e113";
+}
+.glyphicon-chevron-down:before {
+ content: "\e114";
+}
+.glyphicon-retweet:before {
+ content: "\e115";
+}
+.glyphicon-shopping-cart:before {
+ content: "\e116";
+}
+.glyphicon-folder-close:before {
+ content: "\e117";
+}
+.glyphicon-folder-open:before {
+ content: "\e118";
+}
+.glyphicon-resize-vertical:before {
+ content: "\e119";
+}
+.glyphicon-resize-horizontal:before {
+ content: "\e120";
+}
+.glyphicon-hdd:before {
+ content: "\e121";
+}
+.glyphicon-bullhorn:before {
+ content: "\e122";
+}
+.glyphicon-bell:before {
+ content: "\e123";
+}
+.glyphicon-certificate:before {
+ content: "\e124";
+}
+.glyphicon-thumbs-up:before {
+ content: "\e125";
+}
+.glyphicon-thumbs-down:before {
+ content: "\e126";
+}
+.glyphicon-hand-right:before {
+ content: "\e127";
+}
+.glyphicon-hand-left:before {
+ content: "\e128";
+}
+.glyphicon-hand-up:before {
+ content: "\e129";
+}
+.glyphicon-hand-down:before {
+ content: "\e130";
+}
+.glyphicon-circle-arrow-right:before {
+ content: "\e131";
+}
+.glyphicon-circle-arrow-left:before {
+ content: "\e132";
+}
+.glyphicon-circle-arrow-up:before {
+ content: "\e133";
+}
+.glyphicon-circle-arrow-down:before {
+ content: "\e134";
+}
+.glyphicon-globe:before {
+ content: "\e135";
+}
+.glyphicon-wrench:before {
+ content: "\e136";
+}
+.glyphicon-tasks:before {
+ content: "\e137";
+}
+.glyphicon-filter:before {
+ content: "\e138";
+}
+.glyphicon-briefcase:before {
+ content: "\e139";
+}
+.glyphicon-fullscreen:before {
+ content: "\e140";
+}
+.glyphicon-dashboard:before {
+ content: "\e141";
+}
+.glyphicon-paperclip:before {
+ content: "\e142";
+}
+.glyphicon-heart-empty:before {
+ content: "\e143";
+}
+.glyphicon-link:before {
+ content: "\e144";
+}
+.glyphicon-phone:before {
+ content: "\e145";
+}
+.glyphicon-pushpin:before {
+ content: "\e146";
+}
+.glyphicon-usd:before {
+ content: "\e148";
+}
+.glyphicon-gbp:before {
+ content: "\e149";
+}
+.glyphicon-sort:before {
+ content: "\e150";
+}
+.glyphicon-sort-by-alphabet:before {
+ content: "\e151";
+}
+.glyphicon-sort-by-alphabet-alt:before {
+ content: "\e152";
+}
+.glyphicon-sort-by-order:before {
+ content: "\e153";
+}
+.glyphicon-sort-by-order-alt:before {
+ content: "\e154";
+}
+.glyphicon-sort-by-attributes:before {
+ content: "\e155";
+}
+.glyphicon-sort-by-attributes-alt:before {
+ content: "\e156";
+}
+.glyphicon-unchecked:before {
+ content: "\e157";
+}
+.glyphicon-expand:before {
+ content: "\e158";
+}
+.glyphicon-collapse-down:before {
+ content: "\e159";
+}
+.glyphicon-collapse-up:before {
+ content: "\e160";
+}
+.glyphicon-log-in:before {
+ content: "\e161";
+}
+.glyphicon-flash:before {
+ content: "\e162";
+}
+.glyphicon-log-out:before {
+ content: "\e163";
+}
+.glyphicon-new-window:before {
+ content: "\e164";
+}
+.glyphicon-record:before {
+ content: "\e165";
+}
+.glyphicon-save:before {
+ content: "\e166";
+}
+.glyphicon-open:before {
+ content: "\e167";
+}
+.glyphicon-saved:before {
+ content: "\e168";
+}
+.glyphicon-import:before {
+ content: "\e169";
+}
+.glyphicon-export:before {
+ content: "\e170";
+}
+.glyphicon-send:before {
+ content: "\e171";
+}
+.glyphicon-floppy-disk:before {
+ content: "\e172";
+}
+.glyphicon-floppy-saved:before {
+ content: "\e173";
+}
+.glyphicon-floppy-remove:before {
+ content: "\e174";
+}
+.glyphicon-floppy-save:before {
+ content: "\e175";
+}
+.glyphicon-floppy-open:before {
+ content: "\e176";
+}
+.glyphicon-credit-card:before {
+ content: "\e177";
+}
+.glyphicon-transfer:before {
+ content: "\e178";
+}
+.glyphicon-cutlery:before {
+ content: "\e179";
+}
+.glyphicon-header:before {
+ content: "\e180";
+}
+.glyphicon-compressed:before {
+ content: "\e181";
+}
+.glyphicon-earphone:before {
+ content: "\e182";
+}
+.glyphicon-phone-alt:before {
+ content: "\e183";
+}
+.glyphicon-tower:before {
+ content: "\e184";
+}
+.glyphicon-stats:before {
+ content: "\e185";
+}
+.glyphicon-sd-video:before {
+ content: "\e186";
+}
+.glyphicon-hd-video:before {
+ content: "\e187";
+}
+.glyphicon-subtitles:before {
+ content: "\e188";
+}
+.glyphicon-sound-stereo:before {
+ content: "\e189";
+}
+.glyphicon-sound-dolby:before {
+ content: "\e190";
+}
+.glyphicon-sound-5-1:before {
+ content: "\e191";
+}
+.glyphicon-sound-6-1:before {
+ content: "\e192";
+}
+.glyphicon-sound-7-1:before {
+ content: "\e193";
+}
+.glyphicon-copyright-mark:before {
+ content: "\e194";
+}
+.glyphicon-registration-mark:before {
+ content: "\e195";
+}
+.glyphicon-cloud-download:before {
+ content: "\e197";
+}
+.glyphicon-cloud-upload:before {
+ content: "\e198";
+}
+.glyphicon-tree-conifer:before {
+ content: "\e199";
+}
+.glyphicon-tree-deciduous:before {
+ content: "\e200";
+}
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
@@ -268,7 +895,7 @@ th {
box-sizing: border-box;
}
html {
- font-size: 62.5%;
+ font-size: 10px;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
@@ -288,12 +915,12 @@ textarea {
line-height: inherit;
}
a {
- color: #428bca;
+ color: #337ab7;
text-decoration: none;
}
a:hover,
a:focus {
- color: #2a6496;
+ color: #23527c;
text-decoration: underline;
}
a:focus {
@@ -329,6 +956,7 @@ img {
border: 1px solid #ddd;
border-radius: 4px;
-webkit-transition: all .2s ease-in-out;
+ -o-transition: all .2s ease-in-out;
transition: all .2s ease-in-out;
}
.img-circle {
@@ -350,6 +978,15 @@ hr {
clip: rect(0, 0, 0, 0);
border: 0;
}
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ clip: auto;
+}
h1,
h2,
h3,
@@ -393,7 +1030,7 @@ h6 .small,
.h6 .small {
font-weight: normal;
line-height: 1;
- color: #999;
+ color: #777;
}
h1,
.h1,
@@ -471,7 +1108,7 @@ p {
.lead {
margin-bottom: 20px;
font-size: 16px;
- font-weight: 200;
+ font-weight: 300;
line-height: 1.4;
}
@media (min-width: 768px) {
@@ -483,8 +1120,10 @@ small,
.small {
font-size: 85%;
}
-cite {
- font-style: normal;
+mark,
+.mark {
+ padding: .2em;
+ background-color: #fcf8e3;
}
.text-left {
text-align: left;
@@ -498,14 +1137,26 @@ cite {
.text-justify {
text-align: justify;
}
+.text-nowrap {
+ white-space: nowrap;
+}
+.text-lowercase {
+ text-transform: lowercase;
+}
+.text-uppercase {
+ text-transform: uppercase;
+}
+.text-capitalize {
+ text-transform: capitalize;
+}
.text-muted {
- color: #999;
+ color: #777;
}
.text-primary {
- color: #428bca;
+ color: #337ab7;
}
a.text-primary:hover {
- color: #3071a9;
+ color: #286090;
}
.text-success {
color: #3c763d;
@@ -533,10 +1184,10 @@ a.text-danger:hover {
}
.bg-primary {
color: #fff;
- background-color: #428bca;
+ background-color: #337ab7;
}
a.bg-primary:hover {
- background-color: #3071a9;
+ background-color: #286090;
}
.bg-success {
background-color: #dff0d8;
@@ -623,7 +1274,7 @@ dd {
abbr[title],
abbr[data-original-title] {
cursor: help;
- border-bottom: 1px dotted #999;
+ border-bottom: 1px dotted #777;
}
.initialism {
font-size: 90%;
@@ -646,7 +1297,7 @@ blockquote .small {
display: block;
font-size: 80%;
line-height: 1.42857143;
- color: #999;
+ color: #777;
}
blockquote footer:before,
blockquote small:before,
@@ -677,10 +1328,6 @@ blockquote.pull-right small:after,
blockquote.pull-right .small:after {
content: '\00A0 \2014';
}
-blockquote:before,
-blockquote:after {
- content: "";
-}
address {
margin-bottom: 20px;
font-style: normal;
@@ -696,7 +1343,6 @@ code {
padding: 2px 4px;
font-size: 90%;
color: #c7254e;
- white-space: nowrap;
background-color: #f9f2f4;
border-radius: 4px;
}
@@ -706,7 +1352,15 @@ kbd {
color: #fff;
background-color: #333;
border-radius: 3px;
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
+}
+kbd kbd {
+ padding: 0;
+ font-size: 100%;
+ font-weight: bold;
+ -webkit-box-shadow: none;
+ box-shadow: none;
}
pre {
display: block;
@@ -846,7 +1500,7 @@ pre code {
right: 8.33333333%;
}
.col-xs-pull-0 {
- right: 0;
+ right: auto;
}
.col-xs-push-12 {
left: 100%;
@@ -885,7 +1539,7 @@ pre code {
left: 8.33333333%;
}
.col-xs-push-0 {
- left: 0;
+ left: auto;
}
.col-xs-offset-12 {
margin-left: 100%;
@@ -1003,7 +1657,7 @@ pre code {
right: 8.33333333%;
}
.col-sm-pull-0 {
- right: 0;
+ right: auto;
}
.col-sm-push-12 {
left: 100%;
@@ -1042,7 +1696,7 @@ pre code {
left: 8.33333333%;
}
.col-sm-push-0 {
- left: 0;
+ left: auto;
}
.col-sm-offset-12 {
margin-left: 100%;
@@ -1161,7 +1815,7 @@ pre code {
right: 8.33333333%;
}
.col-md-pull-0 {
- right: 0;
+ right: auto;
}
.col-md-push-12 {
left: 100%;
@@ -1200,7 +1854,7 @@ pre code {
left: 8.33333333%;
}
.col-md-push-0 {
- left: 0;
+ left: auto;
}
.col-md-offset-12 {
margin-left: 100%;
@@ -1319,7 +1973,7 @@ pre code {
right: 8.33333333%;
}
.col-lg-pull-0 {
- right: 0;
+ right: auto;
}
.col-lg-push-12 {
left: 100%;
@@ -1358,7 +2012,7 @@ pre code {
left: 8.33333333%;
}
.col-lg-push-0 {
- left: 0;
+ left: auto;
}
.col-lg-offset-12 {
margin-left: 100%;
@@ -1401,14 +2055,20 @@ pre code {
}
}
table {
- max-width: 100%;
background-color: transparent;
}
+caption {
+ padding-top: 8px;
+ padding-bottom: 8px;
+ color: #777;
+ text-align: left;
+}
th {
text-align: left;
}
.table {
width: 100%;
+ max-width: 100%;
margin-bottom: 20px;
}
.table > thead > tr > th,
@@ -1463,12 +2123,10 @@ th {
.table-bordered > thead > tr > td {
border-bottom-width: 2px;
}
-.table-striped > tbody > tr:nth-child(odd) > td,
-.table-striped > tbody > tr:nth-child(odd) > th {
+.table-striped > tbody > tr:nth-child(odd) {
background-color: #f9f9f9;
}
-.table-hover > tbody > tr:hover > td,
-.table-hover > tbody > tr:hover > th {
+.table-hover > tbody > tr:hover {
background-color: #f5f5f5;
}
table col[class*="col-"] {
@@ -1499,6 +2157,7 @@ table th[class*="col-"] {
.table-hover > tbody > tr > td.active:hover,
.table-hover > tbody > tr > th.active:hover,
.table-hover > tbody > tr.active:hover > td,
+.table-hover > tbody > tr:hover > .active,
.table-hover > tbody > tr.active:hover > th {
background-color: #e8e8e8;
}
@@ -1519,6 +2178,7 @@ table th[class*="col-"] {
.table-hover > tbody > tr > td.success:hover,
.table-hover > tbody > tr > th.success:hover,
.table-hover > tbody > tr.success:hover > td,
+.table-hover > tbody > tr:hover > .success,
.table-hover > tbody > tr.success:hover > th {
background-color: #d0e9c6;
}
@@ -1539,6 +2199,7 @@ table th[class*="col-"] {
.table-hover > tbody > tr > td.info:hover,
.table-hover > tbody > tr > th.info:hover,
.table-hover > tbody > tr.info:hover > td,
+.table-hover > tbody > tr:hover > .info,
.table-hover > tbody > tr.info:hover > th {
background-color: #c4e3f3;
}
@@ -1559,6 +2220,7 @@ table th[class*="col-"] {
.table-hover > tbody > tr > td.warning:hover,
.table-hover > tbody > tr > th.warning:hover,
.table-hover > tbody > tr.warning:hover > td,
+.table-hover > tbody > tr:hover > .warning,
.table-hover > tbody > tr.warning:hover > th {
background-color: #faf2cc;
}
@@ -1579,16 +2241,19 @@ table th[class*="col-"] {
.table-hover > tbody > tr > td.danger:hover,
.table-hover > tbody > tr > th.danger:hover,
.table-hover > tbody > tr.danger:hover > td,
+.table-hover > tbody > tr:hover > .danger,
.table-hover > tbody > tr.danger:hover > th {
background-color: #ebcccc;
}
-@media (max-width: 767px) {
+.table-responsive {
+ min-height: .01%;
+ overflow-x: auto;
+}
+@media screen and (max-width: 767px) {
.table-responsive {
width: 100%;
margin-bottom: 15px;
- overflow-x: scroll;
overflow-y: hidden;
- -webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar;
border: 1px solid #ddd;
}
@@ -1648,6 +2313,7 @@ legend {
}
label {
display: inline-block;
+ max-width: 100%;
margin-bottom: 5px;
font-weight: bold;
}
@@ -1660,7 +2326,6 @@ input[type="radio"],
input[type="checkbox"] {
margin: 4px 0 0;
margin-top: 1px \9;
- /* IE8-9 */
line-height: normal;
}
input[type="file"] {
@@ -1702,7 +2367,8 @@ output {
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
+ -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
}
.form-control:focus {
@@ -1734,23 +2400,41 @@ textarea.form-control {
input[type="search"] {
-webkit-appearance: none;
}
-input[type="date"] {
- line-height: 34px;
+@media screen and (-webkit-min-device-pixel-ratio: 0) {
+ input[type="date"],
+ input[type="time"],
+ input[type="datetime-local"],
+ input[type="month"] {
+ line-height: 34px;
+ }
+ input[type="date"].input-sm,
+ input[type="time"].input-sm,
+ input[type="datetime-local"].input-sm,
+ input[type="month"].input-sm {
+ line-height: 30px;
+ }
+ input[type="date"].input-lg,
+ input[type="time"].input-lg,
+ input[type="datetime-local"].input-lg,
+ input[type="month"].input-lg {
+ line-height: 46px;
+ }
}
.form-group {
margin-bottom: 15px;
}
.radio,
.checkbox {
+ position: relative;
display: block;
- min-height: 20px;
- padding-left: 20px;
margin-top: 10px;
margin-bottom: 10px;
}
.radio label,
.checkbox label {
- display: inline;
+ min-height: 20px;
+ padding-left: 20px;
+ margin-bottom: 0;
font-weight: normal;
cursor: pointer;
}
@@ -1758,7 +2442,8 @@ input[type="date"] {
.radio-inline input[type="radio"],
.checkbox input[type="checkbox"],
.checkbox-inline input[type="checkbox"] {
- float: left;
+ position: absolute;
+ margin-top: 4px \9;
margin-left: -20px;
}
.radio + .radio,
@@ -1781,46 +2466,70 @@ input[type="date"] {
}
input[type="radio"][disabled],
input[type="checkbox"][disabled],
-.radio[disabled],
-.radio-inline[disabled],
-.checkbox[disabled],
-.checkbox-inline[disabled],
+input[type="radio"].disabled,
+input[type="checkbox"].disabled,
fieldset[disabled] input[type="radio"],
-fieldset[disabled] input[type="checkbox"],
-fieldset[disabled] .radio,
+fieldset[disabled] input[type="checkbox"] {
+ cursor: not-allowed;
+}
+.radio-inline.disabled,
+.checkbox-inline.disabled,
fieldset[disabled] .radio-inline,
-fieldset[disabled] .checkbox,
fieldset[disabled] .checkbox-inline {
cursor: not-allowed;
}
-.input-sm {
+.radio.disabled label,
+.checkbox.disabled label,
+fieldset[disabled] .radio label,
+fieldset[disabled] .checkbox label {
+ cursor: not-allowed;
+}
+.form-control-static {
+ padding-top: 7px;
+ padding-bottom: 7px;
+ margin-bottom: 0;
+}
+.form-control-static.input-lg,
+.form-control-static.input-sm {
+ padding-right: 0;
+ padding-left: 0;
+}
+.input-sm,
+.form-group-sm .form-control {
height: 30px;
padding: 5px 10px;
font-size: 12px;
line-height: 1.5;
border-radius: 3px;
}
-select.input-sm {
+select.input-sm,
+select.form-group-sm .form-control {
height: 30px;
line-height: 30px;
}
textarea.input-sm,
-select[multiple].input-sm {
+textarea.form-group-sm .form-control,
+select[multiple].input-sm,
+select[multiple].form-group-sm .form-control {
height: auto;
}
-.input-lg {
+.input-lg,
+.form-group-lg .form-control {
height: 46px;
padding: 10px 16px;
font-size: 18px;
line-height: 1.33;
border-radius: 6px;
}
-select.input-lg {
+select.input-lg,
+select.form-group-lg .form-control {
height: 46px;
line-height: 46px;
}
textarea.input-lg,
-select[multiple].input-lg {
+textarea.form-group-lg .form-control,
+select[multiple].input-lg,
+select[multiple].form-group-lg .form-control {
height: auto;
}
.has-feedback {
@@ -1829,22 +2538,38 @@ select[multiple].input-lg {
.has-feedback .form-control {
padding-right: 42.5px;
}
-.has-feedback .form-control-feedback {
+.form-control-feedback {
position: absolute;
- top: 25px;
+ top: 0;
right: 0;
+ z-index: 2;
display: block;
width: 34px;
height: 34px;
line-height: 34px;
text-align: center;
+ pointer-events: none;
+}
+.input-lg + .form-control-feedback {
+ width: 46px;
+ height: 46px;
+ line-height: 46px;
+}
+.input-sm + .form-control-feedback {
+ width: 30px;
+ height: 30px;
+ line-height: 30px;
}
.has-success .help-block,
.has-success .control-label,
.has-success .radio,
.has-success .checkbox,
.has-success .radio-inline,
-.has-success .checkbox-inline {
+.has-success .checkbox-inline,
+.has-success.radio label,
+.has-success.checkbox label,
+.has-success.radio-inline label,
+.has-success.checkbox-inline label {
color: #3c763d;
}
.has-success .form-control {
@@ -1870,7 +2595,11 @@ select[multiple].input-lg {
.has-warning .radio,
.has-warning .checkbox,
.has-warning .radio-inline,
-.has-warning .checkbox-inline {
+.has-warning .checkbox-inline,
+.has-warning.radio label,
+.has-warning.checkbox label,
+.has-warning.radio-inline label,
+.has-warning.checkbox-inline label {
color: #8a6d3b;
}
.has-warning .form-control {
@@ -1896,7 +2625,11 @@ select[multiple].input-lg {
.has-error .radio,
.has-error .checkbox,
.has-error .radio-inline,
-.has-error .checkbox-inline {
+.has-error .checkbox-inline,
+.has-error.radio label,
+.has-error.checkbox label,
+.has-error.radio-inline label,
+.has-error.checkbox-inline label {
color: #a94442;
}
.has-error .form-control {
@@ -1917,8 +2650,11 @@ select[multiple].input-lg {
.has-error .form-control-feedback {
color: #a94442;
}
-.form-control-static {
- margin-bottom: 0;
+.has-feedback label ~ .form-control-feedback {
+ top: 25px;
+}
+.has-feedback label.sr-only ~ .form-control-feedback {
+ top: 0;
}
.help-block {
display: block;
@@ -1937,6 +2673,18 @@ select[multiple].input-lg {
width: auto;
vertical-align: middle;
}
+ .form-inline .form-control-static {
+ display: inline-block;
+ }
+ .form-inline .input-group {
+ display: inline-table;
+ vertical-align: middle;
+ }
+ .form-inline .input-group .input-group-addon,
+ .form-inline .input-group .input-group-btn,
+ .form-inline .input-group .form-control {
+ width: auto;
+ }
.form-inline .input-group > .form-control {
width: 100%;
}
@@ -1947,21 +2695,23 @@ select[multiple].input-lg {
.form-inline .radio,
.form-inline .checkbox {
display: inline-block;
- padding-left: 0;
margin-top: 0;
margin-bottom: 0;
vertical-align: middle;
}
+ .form-inline .radio label,
+ .form-inline .checkbox label {
+ padding-left: 0;
+ }
.form-inline .radio input[type="radio"],
.form-inline .checkbox input[type="checkbox"] {
- float: none;
+ position: relative;
margin-left: 0;
}
.form-inline .has-feedback .form-control-feedback {
top: 0;
}
}
-.form-horizontal .control-label,
.form-horizontal .radio,
.form-horizontal .checkbox,
.form-horizontal .radio-inline,
@@ -1978,18 +2728,26 @@ select[multiple].input-lg {
margin-right: -15px;
margin-left: -15px;
}
-.form-horizontal .form-control-static {
- padding-top: 7px;
-}
@media (min-width: 768px) {
.form-horizontal .control-label {
+ padding-top: 7px;
+ margin-bottom: 0;
text-align: right;
}
}
.form-horizontal .has-feedback .form-control-feedback {
- top: 0;
right: 15px;
}
+@media (min-width: 768px) {
+ .form-horizontal .form-group-lg .control-label {
+ padding-top: 14.3px;
+ }
+}
+@media (min-width: 768px) {
+ .form-horizontal .form-group-sm .control-label {
+ padding-top: 6px;
+ }
+}
.btn {
display: inline-block;
padding: 6px 12px;
@@ -2000,6 +2758,8 @@ select[multiple].input-lg {
text-align: center;
white-space: nowrap;
vertical-align: middle;
+ -ms-touch-action: manipulation;
+ touch-action: manipulation;
cursor: pointer;
-webkit-user-select: none;
-moz-user-select: none;
@@ -2011,13 +2771,17 @@ select[multiple].input-lg {
}
.btn:focus,
.btn:active:focus,
-.btn.active:focus {
+.btn.active:focus,
+.btn.focus,
+.btn:active.focus,
+.btn.active.focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
.btn:hover,
-.btn:focus {
+.btn:focus,
+.btn.focus {
color: #333;
text-decoration: none;
}
@@ -2045,16 +2809,17 @@ fieldset[disabled] .btn {
}
.btn-default:hover,
.btn-default:focus,
+.btn-default.focus,
.btn-default:active,
.btn-default.active,
-.open .dropdown-toggle.btn-default {
+.open > .dropdown-toggle.btn-default {
color: #333;
- background-color: #ebebeb;
+ background-color: #e6e6e6;
border-color: #adadad;
}
.btn-default:active,
.btn-default.active,
-.open .dropdown-toggle.btn-default {
+.open > .dropdown-toggle.btn-default {
background-image: none;
}
.btn-default.disabled,
@@ -2066,6 +2831,9 @@ fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
+.btn-default.disabled.focus,
+.btn-default[disabled].focus,
+fieldset[disabled] .btn-default.focus,
.btn-default.disabled:active,
.btn-default[disabled]:active,
fieldset[disabled] .btn-default:active,
@@ -2081,21 +2849,22 @@ fieldset[disabled] .btn-default.active {
}
.btn-primary {
color: #fff;
- background-color: #428bca;
- border-color: #357ebd;
+ background-color: #337ab7;
+ border-color: #2e6da4;
}
.btn-primary:hover,
.btn-primary:focus,
+.btn-primary.focus,
.btn-primary:active,
.btn-primary.active,
-.open .dropdown-toggle.btn-primary {
+.open > .dropdown-toggle.btn-primary {
color: #fff;
- background-color: #3276b1;
- border-color: #285e8e;
+ background-color: #286090;
+ border-color: #204d74;
}
.btn-primary:active,
.btn-primary.active,
-.open .dropdown-toggle.btn-primary {
+.open > .dropdown-toggle.btn-primary {
background-image: none;
}
.btn-primary.disabled,
@@ -2107,17 +2876,20 @@ fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled.focus,
+.btn-primary[disabled].focus,
+fieldset[disabled] .btn-primary.focus,
.btn-primary.disabled:active,
.btn-primary[disabled]:active,
fieldset[disabled] .btn-primary:active,
.btn-primary.disabled.active,
.btn-primary[disabled].active,
fieldset[disabled] .btn-primary.active {
- background-color: #428bca;
- border-color: #357ebd;
+ background-color: #337ab7;
+ border-color: #2e6da4;
}
.btn-primary .badge {
- color: #428bca;
+ color: #337ab7;
background-color: #fff;
}
.btn-success {
@@ -2127,16 +2899,17 @@ fieldset[disabled] .btn-primary.active {
}
.btn-success:hover,
.btn-success:focus,
+.btn-success.focus,
.btn-success:active,
.btn-success.active,
-.open .dropdown-toggle.btn-success {
+.open > .dropdown-toggle.btn-success {
color: #fff;
- background-color: #47a447;
+ background-color: #449d44;
border-color: #398439;
}
.btn-success:active,
.btn-success.active,
-.open .dropdown-toggle.btn-success {
+.open > .dropdown-toggle.btn-success {
background-image: none;
}
.btn-success.disabled,
@@ -2148,6 +2921,9 @@ fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
+.btn-success.disabled.focus,
+.btn-success[disabled].focus,
+fieldset[disabled] .btn-success.focus,
.btn-success.disabled:active,
.btn-success[disabled]:active,
fieldset[disabled] .btn-success:active,
@@ -2168,16 +2944,17 @@ fieldset[disabled] .btn-success.active {
}
.btn-info:hover,
.btn-info:focus,
+.btn-info.focus,
.btn-info:active,
.btn-info.active,
-.open .dropdown-toggle.btn-info {
+.open > .dropdown-toggle.btn-info {
color: #fff;
- background-color: #39b3d7;
+ background-color: #31b0d5;
border-color: #269abc;
}
.btn-info:active,
.btn-info.active,
-.open .dropdown-toggle.btn-info {
+.open > .dropdown-toggle.btn-info {
background-image: none;
}
.btn-info.disabled,
@@ -2189,6 +2966,9 @@ fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
+.btn-info.disabled.focus,
+.btn-info[disabled].focus,
+fieldset[disabled] .btn-info.focus,
.btn-info.disabled:active,
.btn-info[disabled]:active,
fieldset[disabled] .btn-info:active,
@@ -2209,16 +2989,17 @@ fieldset[disabled] .btn-info.active {
}
.btn-warning:hover,
.btn-warning:focus,
+.btn-warning.focus,
.btn-warning:active,
.btn-warning.active,
-.open .dropdown-toggle.btn-warning {
+.open > .dropdown-toggle.btn-warning {
color: #fff;
- background-color: #ed9c28;
+ background-color: #ec971f;
border-color: #d58512;
}
.btn-warning:active,
.btn-warning.active,
-.open .dropdown-toggle.btn-warning {
+.open > .dropdown-toggle.btn-warning {
background-image: none;
}
.btn-warning.disabled,
@@ -2230,6 +3011,9 @@ fieldset[disabled] .btn-warning:hover,
.btn-warning.disabled:focus,
.btn-warning[disabled]:focus,
fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled.focus,
+.btn-warning[disabled].focus,
+fieldset[disabled] .btn-warning.focus,
.btn-warning.disabled:active,
.btn-warning[disabled]:active,
fieldset[disabled] .btn-warning:active,
@@ -2250,16 +3034,17 @@ fieldset[disabled] .btn-warning.active {
}
.btn-danger:hover,
.btn-danger:focus,
+.btn-danger.focus,
.btn-danger:active,
.btn-danger.active,
-.open .dropdown-toggle.btn-danger {
+.open > .dropdown-toggle.btn-danger {
color: #fff;
- background-color: #d2322d;
+ background-color: #c9302c;
border-color: #ac2925;
}
.btn-danger:active,
.btn-danger.active,
-.open .dropdown-toggle.btn-danger {
+.open > .dropdown-toggle.btn-danger {
background-image: none;
}
.btn-danger.disabled,
@@ -2271,6 +3056,9 @@ fieldset[disabled] .btn-danger:hover,
.btn-danger.disabled:focus,
.btn-danger[disabled]:focus,
fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled.focus,
+.btn-danger[disabled].focus,
+fieldset[disabled] .btn-danger.focus,
.btn-danger.disabled:active,
.btn-danger[disabled]:active,
fieldset[disabled] .btn-danger:active,
@@ -2286,12 +3074,12 @@ fieldset[disabled] .btn-danger.active {
}
.btn-link {
font-weight: normal;
- color: #428bca;
- cursor: pointer;
+ color: #337ab7;
border-radius: 0;
}
.btn-link,
.btn-link:active,
+.btn-link.active,
.btn-link[disabled],
fieldset[disabled] .btn-link {
background-color: transparent;
@@ -2306,7 +3094,7 @@ fieldset[disabled] .btn-link {
}
.btn-link:hover,
.btn-link:focus {
- color: #2a6496;
+ color: #23527c;
text-decoration: underline;
background-color: transparent;
}
@@ -2314,7 +3102,7 @@ fieldset[disabled] .btn-link {
fieldset[disabled] .btn-link:hover,
.btn-link[disabled]:focus,
fieldset[disabled] .btn-link:focus {
- color: #999;
+ color: #777;
text-decoration: none;
}
.btn-lg,
@@ -2341,8 +3129,6 @@ fieldset[disabled] .btn-link:focus {
.btn-block {
display: block;
width: 100%;
- padding-right: 0;
- padding-left: 0;
}
.btn-block + .btn-block {
margin-top: 5px;
@@ -2355,6 +3141,7 @@ input[type="button"].btn-block {
.fade {
opacity: 0;
-webkit-transition: opacity .15s linear;
+ -o-transition: opacity .15s linear;
transition: opacity .15s linear;
}
.fade.in {
@@ -2362,634 +3149,31 @@ input[type="button"].btn-block {
}
.collapse {
display: none;
+ visibility: hidden;
}
.collapse.in {
display: block;
+ visibility: visible;
+}
+tr.collapse.in {
+ display: table-row;
+}
+tbody.collapse.in {
+ display: table-row-group;
}
.collapsing {
position: relative;
height: 0;
overflow: hidden;
- -webkit-transition: height .35s ease;
- transition: height .35s ease;
-}
-@font-face {
- font-family: 'Glyphicons Halflings';
-
- src: url('../fonts/glyphicons-halflings-regular.eot');
- src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
-}
-.glyphicon {
- position: relative;
- top: 1px;
- display: inline-block;
- font-family: 'Glyphicons Halflings';
- font-style: normal;
- font-weight: normal;
- line-height: 1;
-
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-.glyphicon-asterisk:before {
- content: "\2a";
-}
-.glyphicon-plus:before {
- content: "\2b";
-}
-.glyphicon-euro:before {
- content: "\20ac";
-}
-.glyphicon-minus:before {
- content: "\2212";
-}
-.glyphicon-cloud:before {
- content: "\2601";
-}
-.glyphicon-envelope:before {
- content: "\2709";
-}
-.glyphicon-pencil:before {
- content: "\270f";
-}
-.glyphicon-glass:before {
- content: "\e001";
-}
-.glyphicon-music:before {
- content: "\e002";
-}
-.glyphicon-search:before {
- content: "\e003";
-}
-.glyphicon-heart:before {
- content: "\e005";
-}
-.glyphicon-star:before {
- content: "\e006";
-}
-.glyphicon-star-empty:before {
- content: "\e007";
-}
-.glyphicon-user:before {
- content: "\e008";
-}
-.glyphicon-film:before {
- content: "\e009";
-}
-.glyphicon-th-large:before {
- content: "\e010";
-}
-.glyphicon-th:before {
- content: "\e011";
-}
-.glyphicon-th-list:before {
- content: "\e012";
-}
-.glyphicon-ok:before {
- content: "\e013";
-}
-.glyphicon-remove:before {
- content: "\e014";
-}
-.glyphicon-zoom-in:before {
- content: "\e015";
-}
-.glyphicon-zoom-out:before {
- content: "\e016";
-}
-.glyphicon-off:before {
- content: "\e017";
-}
-.glyphicon-signal:before {
- content: "\e018";
-}
-.glyphicon-cog:before {
- content: "\e019";
-}
-.glyphicon-trash:before {
- content: "\e020";
-}
-.glyphicon-home:before {
- content: "\e021";
-}
-.glyphicon-file:before {
- content: "\e022";
-}
-.glyphicon-time:before {
- content: "\e023";
-}
-.glyphicon-road:before {
- content: "\e024";
-}
-.glyphicon-download-alt:before {
- content: "\e025";
-}
-.glyphicon-download:before {
- content: "\e026";
-}
-.glyphicon-upload:before {
- content: "\e027";
-}
-.glyphicon-inbox:before {
- content: "\e028";
-}
-.glyphicon-play-circle:before {
- content: "\e029";
-}
-.glyphicon-repeat:before {
- content: "\e030";
-}
-.glyphicon-refresh:before {
- content: "\e031";
-}
-.glyphicon-list-alt:before {
- content: "\e032";
-}
-.glyphicon-lock:before {
- content: "\e033";
-}
-.glyphicon-flag:before {
- content: "\e034";
-}
-.glyphicon-headphones:before {
- content: "\e035";
-}
-.glyphicon-volume-off:before {
- content: "\e036";
-}
-.glyphicon-volume-down:before {
- content: "\e037";
-}
-.glyphicon-volume-up:before {
- content: "\e038";
-}
-.glyphicon-qrcode:before {
- content: "\e039";
-}
-.glyphicon-barcode:before {
- content: "\e040";
-}
-.glyphicon-tag:before {
- content: "\e041";
-}
-.glyphicon-tags:before {
- content: "\e042";
-}
-.glyphicon-book:before {
- content: "\e043";
-}
-.glyphicon-bookmark:before {
- content: "\e044";
-}
-.glyphicon-print:before {
- content: "\e045";
-}
-.glyphicon-camera:before {
- content: "\e046";
-}
-.glyphicon-font:before {
- content: "\e047";
-}
-.glyphicon-bold:before {
- content: "\e048";
-}
-.glyphicon-italic:before {
- content: "\e049";
-}
-.glyphicon-text-height:before {
- content: "\e050";
-}
-.glyphicon-text-width:before {
- content: "\e051";
-}
-.glyphicon-align-left:before {
- content: "\e052";
-}
-.glyphicon-align-center:before {
- content: "\e053";
-}
-.glyphicon-align-right:before {
- content: "\e054";
-}
-.glyphicon-align-justify:before {
- content: "\e055";
-}
-.glyphicon-list:before {
- content: "\e056";
-}
-.glyphicon-indent-left:before {
- content: "\e057";
-}
-.glyphicon-indent-right:before {
- content: "\e058";
-}
-.glyphicon-facetime-video:before {
- content: "\e059";
-}
-.glyphicon-picture:before {
- content: "\e060";
-}
-.glyphicon-map-marker:before {
- content: "\e062";
-}
-.glyphicon-adjust:before {
- content: "\e063";
-}
-.glyphicon-tint:before {
- content: "\e064";
-}
-.glyphicon-edit:before {
- content: "\e065";
-}
-.glyphicon-share:before {
- content: "\e066";
-}
-.glyphicon-check:before {
- content: "\e067";
-}
-.glyphicon-move:before {
- content: "\e068";
-}
-.glyphicon-step-backward:before {
- content: "\e069";
-}
-.glyphicon-fast-backward:before {
- content: "\e070";
-}
-.glyphicon-backward:before {
- content: "\e071";
-}
-.glyphicon-play:before {
- content: "\e072";
-}
-.glyphicon-pause:before {
- content: "\e073";
-}
-.glyphicon-stop:before {
- content: "\e074";
-}
-.glyphicon-forward:before {
- content: "\e075";
-}
-.glyphicon-fast-forward:before {
- content: "\e076";
-}
-.glyphicon-step-forward:before {
- content: "\e077";
-}
-.glyphicon-eject:before {
- content: "\e078";
-}
-.glyphicon-chevron-left:before {
- content: "\e079";
-}
-.glyphicon-chevron-right:before {
- content: "\e080";
-}
-.glyphicon-plus-sign:before {
- content: "\e081";
-}
-.glyphicon-minus-sign:before {
- content: "\e082";
-}
-.glyphicon-remove-sign:before {
- content: "\e083";
-}
-.glyphicon-ok-sign:before {
- content: "\e084";
-}
-.glyphicon-question-sign:before {
- content: "\e085";
-}
-.glyphicon-info-sign:before {
- content: "\e086";
-}
-.glyphicon-screenshot:before {
- content: "\e087";
-}
-.glyphicon-remove-circle:before {
- content: "\e088";
-}
-.glyphicon-ok-circle:before {
- content: "\e089";
-}
-.glyphicon-ban-circle:before {
- content: "\e090";
-}
-.glyphicon-arrow-left:before {
- content: "\e091";
-}
-.glyphicon-arrow-right:before {
- content: "\e092";
-}
-.glyphicon-arrow-up:before {
- content: "\e093";
-}
-.glyphicon-arrow-down:before {
- content: "\e094";
-}
-.glyphicon-share-alt:before {
- content: "\e095";
-}
-.glyphicon-resize-full:before {
- content: "\e096";
-}
-.glyphicon-resize-small:before {
- content: "\e097";
-}
-.glyphicon-exclamation-sign:before {
- content: "\e101";
-}
-.glyphicon-gift:before {
- content: "\e102";
-}
-.glyphicon-leaf:before {
- content: "\e103";
-}
-.glyphicon-fire:before {
- content: "\e104";
-}
-.glyphicon-eye-open:before {
- content: "\e105";
-}
-.glyphicon-eye-close:before {
- content: "\e106";
-}
-.glyphicon-warning-sign:before {
- content: "\e107";
-}
-.glyphicon-plane:before {
- content: "\e108";
-}
-.glyphicon-calendar:before {
- content: "\e109";
-}
-.glyphicon-random:before {
- content: "\e110";
-}
-.glyphicon-comment:before {
- content: "\e111";
-}
-.glyphicon-magnet:before {
- content: "\e112";
-}
-.glyphicon-chevron-up:before {
- content: "\e113";
-}
-.glyphicon-chevron-down:before {
- content: "\e114";
-}
-.glyphicon-retweet:before {
- content: "\e115";
-}
-.glyphicon-shopping-cart:before {
- content: "\e116";
-}
-.glyphicon-folder-close:before {
- content: "\e117";
-}
-.glyphicon-folder-open:before {
- content: "\e118";
-}
-.glyphicon-resize-vertical:before {
- content: "\e119";
-}
-.glyphicon-resize-horizontal:before {
- content: "\e120";
-}
-.glyphicon-hdd:before {
- content: "\e121";
-}
-.glyphicon-bullhorn:before {
- content: "\e122";
-}
-.glyphicon-bell:before {
- content: "\e123";
-}
-.glyphicon-certificate:before {
- content: "\e124";
-}
-.glyphicon-thumbs-up:before {
- content: "\e125";
-}
-.glyphicon-thumbs-down:before {
- content: "\e126";
-}
-.glyphicon-hand-right:before {
- content: "\e127";
-}
-.glyphicon-hand-left:before {
- content: "\e128";
-}
-.glyphicon-hand-up:before {
- content: "\e129";
-}
-.glyphicon-hand-down:before {
- content: "\e130";
-}
-.glyphicon-circle-arrow-right:before {
- content: "\e131";
-}
-.glyphicon-circle-arrow-left:before {
- content: "\e132";
-}
-.glyphicon-circle-arrow-up:before {
- content: "\e133";
-}
-.glyphicon-circle-arrow-down:before {
- content: "\e134";
-}
-.glyphicon-globe:before {
- content: "\e135";
-}
-.glyphicon-wrench:before {
- content: "\e136";
-}
-.glyphicon-tasks:before {
- content: "\e137";
-}
-.glyphicon-filter:before {
- content: "\e138";
-}
-.glyphicon-briefcase:before {
- content: "\e139";
-}
-.glyphicon-fullscreen:before {
- content: "\e140";
-}
-.glyphicon-dashboard:before {
- content: "\e141";
-}
-.glyphicon-paperclip:before {
- content: "\e142";
-}
-.glyphicon-heart-empty:before {
- content: "\e143";
-}
-.glyphicon-link:before {
- content: "\e144";
-}
-.glyphicon-phone:before {
- content: "\e145";
-}
-.glyphicon-pushpin:before {
- content: "\e146";
-}
-.glyphicon-usd:before {
- content: "\e148";
-}
-.glyphicon-gbp:before {
- content: "\e149";
-}
-.glyphicon-sort:before {
- content: "\e150";
-}
-.glyphicon-sort-by-alphabet:before {
- content: "\e151";
-}
-.glyphicon-sort-by-alphabet-alt:before {
- content: "\e152";
-}
-.glyphicon-sort-by-order:before {
- content: "\e153";
-}
-.glyphicon-sort-by-order-alt:before {
- content: "\e154";
-}
-.glyphicon-sort-by-attributes:before {
- content: "\e155";
-}
-.glyphicon-sort-by-attributes-alt:before {
- content: "\e156";
-}
-.glyphicon-unchecked:before {
- content: "\e157";
-}
-.glyphicon-expand:before {
- content: "\e158";
-}
-.glyphicon-collapse-down:before {
- content: "\e159";
-}
-.glyphicon-collapse-up:before {
- content: "\e160";
-}
-.glyphicon-log-in:before {
- content: "\e161";
-}
-.glyphicon-flash:before {
- content: "\e162";
-}
-.glyphicon-log-out:before {
- content: "\e163";
-}
-.glyphicon-new-window:before {
- content: "\e164";
-}
-.glyphicon-record:before {
- content: "\e165";
-}
-.glyphicon-save:before {
- content: "\e166";
-}
-.glyphicon-open:before {
- content: "\e167";
-}
-.glyphicon-saved:before {
- content: "\e168";
-}
-.glyphicon-import:before {
- content: "\e169";
-}
-.glyphicon-export:before {
- content: "\e170";
-}
-.glyphicon-send:before {
- content: "\e171";
-}
-.glyphicon-floppy-disk:before {
- content: "\e172";
-}
-.glyphicon-floppy-saved:before {
- content: "\e173";
-}
-.glyphicon-floppy-remove:before {
- content: "\e174";
-}
-.glyphicon-floppy-save:before {
- content: "\e175";
-}
-.glyphicon-floppy-open:before {
- content: "\e176";
-}
-.glyphicon-credit-card:before {
- content: "\e177";
-}
-.glyphicon-transfer:before {
- content: "\e178";
-}
-.glyphicon-cutlery:before {
- content: "\e179";
-}
-.glyphicon-header:before {
- content: "\e180";
-}
-.glyphicon-compressed:before {
- content: "\e181";
-}
-.glyphicon-earphone:before {
- content: "\e182";
-}
-.glyphicon-phone-alt:before {
- content: "\e183";
-}
-.glyphicon-tower:before {
- content: "\e184";
-}
-.glyphicon-stats:before {
- content: "\e185";
-}
-.glyphicon-sd-video:before {
- content: "\e186";
-}
-.glyphicon-hd-video:before {
- content: "\e187";
-}
-.glyphicon-subtitles:before {
- content: "\e188";
-}
-.glyphicon-sound-stereo:before {
- content: "\e189";
-}
-.glyphicon-sound-dolby:before {
- content: "\e190";
-}
-.glyphicon-sound-5-1:before {
- content: "\e191";
-}
-.glyphicon-sound-6-1:before {
- content: "\e192";
-}
-.glyphicon-sound-7-1:before {
- content: "\e193";
-}
-.glyphicon-copyright-mark:before {
- content: "\e194";
-}
-.glyphicon-registration-mark:before {
- content: "\e195";
-}
-.glyphicon-cloud-download:before {
- content: "\e197";
-}
-.glyphicon-cloud-upload:before {
- content: "\e198";
-}
-.glyphicon-tree-conifer:before {
- content: "\e199";
-}
-.glyphicon-tree-deciduous:before {
- content: "\e200";
+ -webkit-transition-timing-function: ease;
+ -o-transition-timing-function: ease;
+ transition-timing-function: ease;
+ -webkit-transition-duration: .35s;
+ -o-transition-duration: .35s;
+ transition-duration: .35s;
+ -webkit-transition-property: height, visibility;
+ -o-transition-property: height, visibility;
+ transition-property: height, visibility;
}
.caret {
display: inline-block;
@@ -3018,9 +3202,11 @@ input[type="button"].btn-block {
padding: 5px 0;
margin: 2px 0 0;
font-size: 14px;
+ text-align: left;
list-style: none;
background-color: #fff;
- background-clip: padding-box;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
border: 1px solid #ccc;
border: 1px solid rgba(0, 0, 0, .15);
border-radius: 4px;
@@ -3057,13 +3243,13 @@ input[type="button"].btn-block {
.dropdown-menu > .active > a:focus {
color: #fff;
text-decoration: none;
- background-color: #428bca;
+ background-color: #337ab7;
outline: 0;
}
.dropdown-menu > .disabled > a,
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
- color: #999;
+ color: #777;
}
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
@@ -3092,7 +3278,8 @@ input[type="button"].btn-block {
padding: 3px 20px;
font-size: 12px;
line-height: 1.42857143;
- color: #999;
+ color: #777;
+ white-space: nowrap;
}
.dropdown-backdrop {
position: fixed;
@@ -3149,10 +3336,6 @@ input[type="button"].btn-block {
.btn-group-vertical > .btn.active {
z-index: 2;
}
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus {
- outline: none;
-}
.btn-group .btn + .btn,
.btn-group .btn + .btn-group,
.btn-group .btn-group + .btn,
@@ -3289,9 +3472,16 @@ input[type="button"].btn-block {
.btn-group-justified > .btn-group .btn {
width: 100%;
}
-[data-toggle="buttons"] > .btn > input[type="radio"],
-[data-toggle="buttons"] > .btn > input[type="checkbox"] {
- display: none;
+.btn-group-justified > .btn-group .dropdown-menu {
+ left: auto;
+}
+[data-toggle="buttons"] > .btn input[type="radio"],
+[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
+[data-toggle="buttons"] > .btn input[type="checkbox"],
+[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
+ position: absolute;
+ clip: rect(0, 0, 0, 0);
+ pointer-events: none;
}
.input-group {
position: relative;
@@ -3467,11 +3657,11 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
background-color: #eee;
}
.nav > li.disabled > a {
- color: #999;
+ color: #777;
}
.nav > li.disabled > a:hover,
.nav > li.disabled > a:focus {
- color: #999;
+ color: #777;
text-decoration: none;
cursor: not-allowed;
background-color: transparent;
@@ -3480,7 +3670,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
.nav .open > a:hover,
.nav .open > a:focus {
background-color: #eee;
- border-color: #428bca;
+ border-color: #337ab7;
}
.nav .nav-divider {
height: 1px;
@@ -3573,7 +3763,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus {
color: #fff;
- background-color: #428bca;
+ background-color: #337ab7;
}
.nav-stacked > li {
float: none;
@@ -3630,9 +3820,11 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
}
.tab-content > .tab-pane {
display: none;
+ visibility: hidden;
}
.tab-content > .active {
display: block;
+ visibility: visible;
}
.nav-tabs .dropdown-menu {
margin-top: -1px;
@@ -3656,13 +3848,13 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
}
}
.navbar-collapse {
- max-height: 340px;
padding-right: 15px;
padding-left: 15px;
overflow-x: visible;
-webkit-overflow-scrolling: touch;
border-top: 1px solid transparent;
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
}
.navbar-collapse.in {
overflow-y: auto;
@@ -3671,13 +3863,15 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
.navbar-collapse {
width: auto;
border-top: 0;
- box-shadow: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
}
.navbar-collapse.collapse {
display: block !important;
height: auto !important;
padding-bottom: 0;
overflow: visible !important;
+ visibility: visible !important;
}
.navbar-collapse.in {
overflow-y: visible;
@@ -3689,6 +3883,16 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
padding-left: 0;
}
}
+.navbar-fixed-top .navbar-collapse,
+.navbar-fixed-bottom .navbar-collapse {
+ max-height: 340px;
+}
+@media (max-device-width: 480px) and (orientation: landscape) {
+ .navbar-fixed-top .navbar-collapse,
+ .navbar-fixed-bottom .navbar-collapse {
+ max-height: 200px;
+ }
+}
.container > .navbar-header,
.container-fluid > .navbar-header,
.container > .navbar-collapse,
@@ -3747,6 +3951,9 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
.navbar-brand:focus {
text-decoration: none;
}
+.navbar-brand > img {
+ display: block;
+}
@media (min-width: 768px) {
.navbar > .container .navbar-brand,
.navbar > .container-fluid .navbar-brand {
@@ -3766,7 +3973,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
border-radius: 4px;
}
.navbar-toggle:focus {
- outline: none;
+ outline: 0;
}
.navbar-toggle .icon-bar {
display: block;
@@ -3798,7 +4005,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
margin-top: 0;
background-color: transparent;
border: 0;
- box-shadow: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
}
.navbar-nav .open .dropdown-menu > li > a,
.navbar-nav .open .dropdown-menu .dropdown-header {
@@ -3824,17 +4032,6 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
padding-top: 15px;
padding-bottom: 15px;
}
- .navbar-nav.navbar-right:last-child {
- margin-right: -15px;
- }
-}
-@media (min-width: 768px) {
- .navbar-left {
- float: left !important;
- }
- .navbar-right {
- float: right !important;
- }
}
.navbar-form {
padding: 10px 15px;
@@ -3858,6 +4055,18 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
width: auto;
vertical-align: middle;
}
+ .navbar-form .form-control-static {
+ display: inline-block;
+ }
+ .navbar-form .input-group {
+ display: inline-table;
+ vertical-align: middle;
+ }
+ .navbar-form .input-group .input-group-addon,
+ .navbar-form .input-group .input-group-btn,
+ .navbar-form .input-group .form-control {
+ width: auto;
+ }
.navbar-form .input-group > .form-control {
width: 100%;
}
@@ -3868,14 +4077,17 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
.navbar-form .radio,
.navbar-form .checkbox {
display: inline-block;
- padding-left: 0;
margin-top: 0;
margin-bottom: 0;
vertical-align: middle;
}
+ .navbar-form .radio label,
+ .navbar-form .checkbox label {
+ padding-left: 0;
+ }
.navbar-form .radio input[type="radio"],
.navbar-form .checkbox input[type="checkbox"] {
- float: none;
+ position: relative;
margin-left: 0;
}
.navbar-form .has-feedback .form-control-feedback {
@@ -3886,6 +4098,9 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
.navbar-form .form-group {
margin-bottom: 5px;
}
+ .navbar-form .form-group:last-child {
+ margin-bottom: 0;
+ }
}
@media (min-width: 768px) {
.navbar-form {
@@ -3898,9 +4113,6 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
-webkit-box-shadow: none;
box-shadow: none;
}
- .navbar-form.navbar-right:last-child {
- margin-right: -15px;
- }
}
.navbar-nav > li > .dropdown-menu {
margin-top: 0;
@@ -3908,6 +4120,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
border-top-right-radius: 0;
}
.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
@@ -3933,7 +4147,16 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
margin-right: 15px;
margin-left: 15px;
}
- .navbar-text.navbar-right:last-child {
+}
+@media (min-width: 768px) {
+ .navbar-left {
+ float: left !important;
+ }
+ .navbar-right {
+ float: right !important;
+ margin-right: -15px;
+ }
+ .navbar-right ~ .navbar-right {
margin-right: 0;
}
}
@@ -4020,12 +4243,25 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
.navbar-default .navbar-link:hover {
color: #333;
}
+.navbar-default .btn-link {
+ color: #777;
+}
+.navbar-default .btn-link:hover,
+.navbar-default .btn-link:focus {
+ color: #333;
+}
+.navbar-default .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-default .btn-link:hover,
+.navbar-default .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-default .btn-link:focus {
+ color: #ccc;
+}
.navbar-inverse {
background-color: #222;
border-color: #080808;
}
.navbar-inverse .navbar-brand {
- color: #999;
+ color: #9d9d9d;
}
.navbar-inverse .navbar-brand:hover,
.navbar-inverse .navbar-brand:focus {
@@ -4033,10 +4269,10 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
background-color: transparent;
}
.navbar-inverse .navbar-text {
- color: #999;
+ color: #9d9d9d;
}
.navbar-inverse .navbar-nav > li > a {
- color: #999;
+ color: #9d9d9d;
}
.navbar-inverse .navbar-nav > li > a:hover,
.navbar-inverse .navbar-nav > li > a:focus {
@@ -4083,7 +4319,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
background-color: #080808;
}
.navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
- color: #999;
+ color: #9d9d9d;
}
.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
@@ -4104,11 +4340,24 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
}
}
.navbar-inverse .navbar-link {
- color: #999;
+ color: #9d9d9d;
}
.navbar-inverse .navbar-link:hover {
color: #fff;
}
+.navbar-inverse .btn-link {
+ color: #9d9d9d;
+}
+.navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link:focus {
+ color: #fff;
+}
+.navbar-inverse .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-inverse .btn-link:focus {
+ color: #444;
+}
.breadcrumb {
padding: 8px 15px;
margin-bottom: 20px;
@@ -4125,7 +4374,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
content: "/\00a0";
}
.breadcrumb > .active {
- color: #999;
+ color: #777;
}
.pagination {
display: inline-block;
@@ -4143,7 +4392,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
padding: 6px 12px;
margin-left: -1px;
line-height: 1.42857143;
- color: #428bca;
+ color: #337ab7;
text-decoration: none;
background-color: #fff;
border: 1px solid #ddd;
@@ -4163,7 +4412,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
.pagination > li > span:hover,
.pagination > li > a:focus,
.pagination > li > span:focus {
- color: #2a6496;
+ color: #23527c;
background-color: #eee;
border-color: #ddd;
}
@@ -4176,8 +4425,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
z-index: 2;
color: #fff;
cursor: default;
- background-color: #428bca;
- border-color: #428bca;
+ background-color: #337ab7;
+ border-color: #337ab7;
}
.pagination > .disabled > span,
.pagination > .disabled > span:hover,
@@ -4185,7 +4434,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
.pagination > .disabled > a,
.pagination > .disabled > a:hover,
.pagination > .disabled > a:focus {
- color: #999;
+ color: #777;
cursor: not-allowed;
background-color: #fff;
border-color: #ddd;
@@ -4254,7 +4503,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
.pager .disabled > a:hover,
.pager .disabled > a:focus,
.pager .disabled > span {
- color: #999;
+ color: #777;
cursor: not-allowed;
background-color: #fff;
}
@@ -4270,8 +4519,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
vertical-align: baseline;
border-radius: .25em;
}
-.label[href]:hover,
-.label[href]:focus {
+a.label:hover,
+a.label:focus {
color: #fff;
text-decoration: none;
cursor: pointer;
@@ -4284,18 +4533,18 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
top: -1px;
}
.label-default {
- background-color: #999;
+ background-color: #777;
}
.label-default[href]:hover,
.label-default[href]:focus {
- background-color: #808080;
+ background-color: #5e5e5e;
}
.label-primary {
- background-color: #428bca;
+ background-color: #337ab7;
}
.label-primary[href]:hover,
.label-primary[href]:focus {
- background-color: #3071a9;
+ background-color: #286090;
}
.label-success {
background-color: #5cb85c;
@@ -4336,7 +4585,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
text-align: center;
white-space: nowrap;
vertical-align: baseline;
- background-color: #999;
+ background-color: #777;
border-radius: 10px;
}
.badge:empty {
@@ -4356,16 +4605,22 @@ a.badge:focus {
text-decoration: none;
cursor: pointer;
}
-a.list-group-item.active > .badge,
+.list-group-item.active > .badge,
.nav-pills > .active > a > .badge {
- color: #428bca;
+ color: #337ab7;
background-color: #fff;
}
+.list-group-item > .badge {
+ float: right;
+}
+.list-group-item > .badge + .badge {
+ margin-right: 5px;
+}
.nav-pills > li > a > .badge {
margin-left: 3px;
}
.jumbotron {
- padding: 30px;
+ padding: 30px 15px;
margin-bottom: 30px;
color: inherit;
background-color: #eee;
@@ -4379,7 +4634,11 @@ a.list-group-item.active > .badge,
font-size: 21px;
font-weight: 200;
}
-.container .jumbotron {
+.jumbotron > hr {
+ border-top-color: #d5d5d5;
+}
+.container .jumbotron,
+.container-fluid .jumbotron {
border-radius: 6px;
}
.jumbotron .container {
@@ -4387,10 +4646,10 @@ a.list-group-item.active > .badge,
}
@media screen and (min-width: 768px) {
.jumbotron {
- padding-top: 48px;
- padding-bottom: 48px;
+ padding: 48px 0;
}
- .container .jumbotron {
+ .container .jumbotron,
+ .container-fluid .jumbotron {
padding-right: 60px;
padding-left: 60px;
}
@@ -4407,8 +4666,9 @@ a.list-group-item.active > .badge,
background-color: #fff;
border: 1px solid #ddd;
border-radius: 4px;
- -webkit-transition: all .2s ease-in-out;
- transition: all .2s ease-in-out;
+ -webkit-transition: border .2s ease-in-out;
+ -o-transition: border .2s ease-in-out;
+ transition: border .2s ease-in-out;
}
.thumbnail > img,
.thumbnail a > img {
@@ -4418,7 +4678,7 @@ a.list-group-item.active > .badge,
a.thumbnail:hover,
a.thumbnail:focus,
a.thumbnail.active {
- border-color: #428bca;
+ border-color: #337ab7;
}
.thumbnail .caption {
padding: 9px;
@@ -4444,10 +4704,12 @@ a.thumbnail.active {
.alert > p + p {
margin-top: 5px;
}
-.alert-dismissable {
+.alert-dismissable,
+.alert-dismissible {
padding-right: 35px;
}
-.alert-dismissable .close {
+.alert-dismissable .close,
+.alert-dismissible .close {
position: relative;
top: -2px;
right: -21px;
@@ -4505,6 +4767,14 @@ a.thumbnail.active {
background-position: 0 0;
}
}
+@-o-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
@keyframes progress-bar-stripes {
from {
background-position: 40px 0;
@@ -4530,19 +4800,25 @@ a.thumbnail.active {
line-height: 20px;
color: #fff;
text-align: center;
- background-color: #428bca;
+ background-color: #337ab7;
-webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
-webkit-transition: width .6s ease;
+ -o-transition: width .6s ease;
transition: width .6s ease;
}
-.progress-striped .progress-bar {
+.progress-striped .progress-bar,
+.progress-bar-striped {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-size: 40px 40px;
+ -webkit-background-size: 40px 40px;
+ background-size: 40px 40px;
}
-.progress.active .progress-bar {
+.progress.active .progress-bar,
+.progress-bar.active {
-webkit-animation: progress-bar-stripes 2s linear infinite;
+ -o-animation: progress-bar-stripes 2s linear infinite;
animation: progress-bar-stripes 2s linear infinite;
}
.progress-bar-success {
@@ -4550,6 +4826,7 @@ a.thumbnail.active {
}
.progress-striped .progress-bar-success {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
.progress-bar-info {
@@ -4557,6 +4834,7 @@ a.thumbnail.active {
}
.progress-striped .progress-bar-info {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
.progress-bar-warning {
@@ -4564,6 +4842,7 @@ a.thumbnail.active {
}
.progress-striped .progress-bar-warning {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
.progress-bar-danger {
@@ -4571,31 +4850,38 @@ a.thumbnail.active {
}
.progress-striped .progress-bar-danger {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
-.media,
-.media-body {
- overflow: hidden;
- zoom: 1;
-}
-.media,
-.media .media {
+.media {
margin-top: 15px;
}
.media:first-child {
margin-top: 0;
}
-.media-object {
- display: block;
-}
-.media-heading {
- margin: 0 0 5px;
+.media-right,
+.media > .pull-right {
+ padding-left: 10px;
}
+.media-left,
.media > .pull-left {
- margin-right: 10px;
+ padding-right: 10px;
}
-.media > .pull-right {
- margin-left: 10px;
+.media-left,
+.media-right,
+.media-body {
+ display: table-cell;
+ vertical-align: top;
+}
+.media-middle {
+ vertical-align: middle;
+}
+.media-bottom {
+ vertical-align: bottom;
+}
+.media-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
}
.media-list {
padding-left: 0;
@@ -4622,12 +4908,6 @@ a.thumbnail.active {
border-bottom-right-radius: 4px;
border-bottom-left-radius: 4px;
}
-.list-group-item > .badge {
- float: right;
-}
-.list-group-item > .badge + .badge {
- margin-right: 5px;
-}
a.list-group-item {
color: #555;
}
@@ -4636,26 +4916,50 @@ a.list-group-item .list-group-item-heading {
}
a.list-group-item:hover,
a.list-group-item:focus {
+ color: #555;
text-decoration: none;
background-color: #f5f5f5;
}
-a.list-group-item.active,
-a.list-group-item.active:hover,
-a.list-group-item.active:focus {
+.list-group-item.disabled,
+.list-group-item.disabled:hover,
+.list-group-item.disabled:focus {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #eee;
+}
+.list-group-item.disabled .list-group-item-heading,
+.list-group-item.disabled:hover .list-group-item-heading,
+.list-group-item.disabled:focus .list-group-item-heading {
+ color: inherit;
+}
+.list-group-item.disabled .list-group-item-text,
+.list-group-item.disabled:hover .list-group-item-text,
+.list-group-item.disabled:focus .list-group-item-text {
+ color: #777;
+}
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
z-index: 2;
color: #fff;
- background-color: #428bca;
- border-color: #428bca;
-}
-a.list-group-item.active .list-group-item-heading,
-a.list-group-item.active:hover .list-group-item-heading,
-a.list-group-item.active:focus .list-group-item-heading {
+ background-color: #337ab7;
+ border-color: #337ab7;
+}
+.list-group-item.active .list-group-item-heading,
+.list-group-item.active:hover .list-group-item-heading,
+.list-group-item.active:focus .list-group-item-heading,
+.list-group-item.active .list-group-item-heading > small,
+.list-group-item.active:hover .list-group-item-heading > small,
+.list-group-item.active:focus .list-group-item-heading > small,
+.list-group-item.active .list-group-item-heading > .small,
+.list-group-item.active:hover .list-group-item-heading > .small,
+.list-group-item.active:focus .list-group-item-heading > .small {
color: inherit;
}
-a.list-group-item.active .list-group-item-text,
-a.list-group-item.active:hover .list-group-item-text,
-a.list-group-item.active:focus .list-group-item-text {
- color: #e1edf7;
+.list-group-item.active .list-group-item-text,
+.list-group-item.active:hover .list-group-item-text,
+.list-group-item.active:focus .list-group-item-text {
+ color: #c7ddef;
}
.list-group-item-success {
color: #3c763d;
@@ -4789,19 +5093,23 @@ a.list-group-item-danger.active:focus {
border-bottom-right-radius: 3px;
border-bottom-left-radius: 3px;
}
-.panel > .list-group {
+.panel > .list-group,
+.panel > .panel-collapse > .list-group {
margin-bottom: 0;
}
-.panel > .list-group .list-group-item {
+.panel > .list-group .list-group-item,
+.panel > .panel-collapse > .list-group .list-group-item {
border-width: 1px 0;
border-radius: 0;
}
-.panel > .list-group:first-child .list-group-item:first-child {
+.panel > .list-group:first-child .list-group-item:first-child,
+.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
border-top: 0;
border-top-left-radius: 3px;
border-top-right-radius: 3px;
}
-.panel > .list-group:last-child .list-group-item:last-child {
+.panel > .list-group:last-child .list-group-item:last-child,
+.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
border-bottom: 0;
border-bottom-right-radius: 3px;
border-bottom-left-radius: 3px;
@@ -4809,15 +5117,32 @@ a.list-group-item-danger.active:focus {
.panel-heading + .list-group .list-group-item:first-child {
border-top-width: 0;
}
+.list-group + .panel-footer {
+ border-top-width: 0;
+}
.panel > .table,
-.panel > .table-responsive > .table {
+.panel > .table-responsive > .table,
+.panel > .panel-collapse > .table {
margin-bottom: 0;
}
+.panel > .table caption,
+.panel > .table-responsive > .table caption,
+.panel > .panel-collapse > .table caption {
+ padding-right: 15px;
+ padding-left: 15px;
+}
.panel > .table:first-child,
.panel > .table-responsive:first-child > .table:first-child {
border-top-left-radius: 3px;
border-top-right-radius: 3px;
}
+.panel > .table:first-child > thead:first-child > tr:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
@@ -4843,6 +5168,13 @@ a.list-group-item-danger.active:focus {
border-bottom-right-radius: 3px;
border-bottom-left-radius: 3px;
}
+.panel > .table:last-child > tbody:last-child > tr:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
@@ -4864,7 +5196,9 @@ a.list-group-item-danger.active:focus {
border-bottom-right-radius: 3px;
}
.panel > .panel-body + .table,
-.panel > .panel-body + .table-responsive {
+.panel > .panel-body + .table-responsive,
+.panel > .table + .panel-body,
+.panel > .table-responsive + .panel-body {
border-top: 1px solid #ddd;
}
.panel > .table > tbody:first-child > tr:first-child th,
@@ -4932,7 +5266,6 @@ a.list-group-item-danger.active:focus {
}
.panel-group .panel {
margin-bottom: 0;
- overflow: hidden;
border-radius: 4px;
}
.panel-group .panel + .panel {
@@ -4941,7 +5274,8 @@ a.list-group-item-danger.active:focus {
.panel-group .panel-heading {
border-bottom: 0;
}
-.panel-group .panel-heading + .panel-collapse .panel-body {
+.panel-group .panel-heading + .panel-collapse > .panel-body,
+.panel-group .panel-heading + .panel-collapse > .list-group {
border-top: 1px solid #ddd;
}
.panel-group .panel-footer {
@@ -4958,25 +5292,33 @@ a.list-group-item-danger.active:focus {
background-color: #f5f5f5;
border-color: #ddd;
}
-.panel-default > .panel-heading + .panel-collapse .panel-body {
+.panel-default > .panel-heading + .panel-collapse > .panel-body {
border-top-color: #ddd;
}
-.panel-default > .panel-footer + .panel-collapse .panel-body {
+.panel-default > .panel-heading .badge {
+ color: #f5f5f5;
+ background-color: #333;
+}
+.panel-default > .panel-footer + .panel-collapse > .panel-body {
border-bottom-color: #ddd;
}
.panel-primary {
- border-color: #428bca;
+ border-color: #337ab7;
}
.panel-primary > .panel-heading {
color: #fff;
- background-color: #428bca;
- border-color: #428bca;
+ background-color: #337ab7;
+ border-color: #337ab7;
}
-.panel-primary > .panel-heading + .panel-collapse .panel-body {
- border-top-color: #428bca;
+.panel-primary > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #337ab7;
}
-.panel-primary > .panel-footer + .panel-collapse .panel-body {
- border-bottom-color: #428bca;
+.panel-primary > .panel-heading .badge {
+ color: #337ab7;
+ background-color: #fff;
+}
+.panel-primary > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #337ab7;
}
.panel-success {
border-color: #d6e9c6;
@@ -4986,10 +5328,14 @@ a.list-group-item-danger.active:focus {
background-color: #dff0d8;
border-color: #d6e9c6;
}
-.panel-success > .panel-heading + .panel-collapse .panel-body {
+.panel-success > .panel-heading + .panel-collapse > .panel-body {
border-top-color: #d6e9c6;
}
-.panel-success > .panel-footer + .panel-collapse .panel-body {
+.panel-success > .panel-heading .badge {
+ color: #dff0d8;
+ background-color: #3c763d;
+}
+.panel-success > .panel-footer + .panel-collapse > .panel-body {
border-bottom-color: #d6e9c6;
}
.panel-info {
@@ -5000,10 +5346,14 @@ a.list-group-item-danger.active:focus {
background-color: #d9edf7;
border-color: #bce8f1;
}
-.panel-info > .panel-heading + .panel-collapse .panel-body {
+.panel-info > .panel-heading + .panel-collapse > .panel-body {
border-top-color: #bce8f1;
}
-.panel-info > .panel-footer + .panel-collapse .panel-body {
+.panel-info > .panel-heading .badge {
+ color: #d9edf7;
+ background-color: #31708f;
+}
+.panel-info > .panel-footer + .panel-collapse > .panel-body {
border-bottom-color: #bce8f1;
}
.panel-warning {
@@ -5014,10 +5364,14 @@ a.list-group-item-danger.active:focus {
background-color: #fcf8e3;
border-color: #faebcc;
}
-.panel-warning > .panel-heading + .panel-collapse .panel-body {
+.panel-warning > .panel-heading + .panel-collapse > .panel-body {
border-top-color: #faebcc;
}
-.panel-warning > .panel-footer + .panel-collapse .panel-body {
+.panel-warning > .panel-heading .badge {
+ color: #fcf8e3;
+ background-color: #8a6d3b;
+}
+.panel-warning > .panel-footer + .panel-collapse > .panel-body {
border-bottom-color: #faebcc;
}
.panel-danger {
@@ -5028,12 +5382,42 @@ a.list-group-item-danger.active:focus {
background-color: #f2dede;
border-color: #ebccd1;
}
-.panel-danger > .panel-heading + .panel-collapse .panel-body {
+.panel-danger > .panel-heading + .panel-collapse > .panel-body {
border-top-color: #ebccd1;
}
-.panel-danger > .panel-footer + .panel-collapse .panel-body {
+.panel-danger > .panel-heading .badge {
+ color: #f2dede;
+ background-color: #a94442;
+}
+.panel-danger > .panel-footer + .panel-collapse > .panel-body {
border-bottom-color: #ebccd1;
}
+.embed-responsive {
+ position: relative;
+ display: block;
+ height: 0;
+ padding: 0;
+ overflow: hidden;
+}
+.embed-responsive .embed-responsive-item,
+.embed-responsive iframe,
+.embed-responsive embed,
+.embed-responsive object,
+.embed-responsive video {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border: 0;
+}
+.embed-responsive.embed-responsive-16by9 {
+ padding-bottom: 56.25%;
+}
+.embed-responsive.embed-responsive-4by3 {
+ padding-bottom: 75%;
+}
.well {
min-height: 20px;
padding: 19px;
@@ -5090,27 +5474,31 @@ button.close {
right: 0;
bottom: 0;
left: 0;
- z-index: 1050;
+ z-index: 1040;
display: none;
- overflow: auto;
- overflow-y: scroll;
+ overflow: hidden;
-webkit-overflow-scrolling: touch;
outline: 0;
}
.modal.fade .modal-dialog {
-webkit-transition: -webkit-transform .3s ease-out;
- -moz-transition: -moz-transform .3s ease-out;
-o-transition: -o-transform .3s ease-out;
transition: transform .3s ease-out;
-webkit-transform: translate(0, -25%);
-ms-transform: translate(0, -25%);
+ -o-transform: translate(0, -25%);
transform: translate(0, -25%);
}
.modal.in .modal-dialog {
-webkit-transform: translate(0, 0);
-ms-transform: translate(0, 0);
+ -o-transform: translate(0, 0);
transform: translate(0, 0);
}
+.modal-open .modal {
+ overflow-x: hidden;
+ overflow-y: auto;
+}
.modal-dialog {
position: relative;
width: auto;
@@ -5119,21 +5507,20 @@ button.close {
.modal-content {
position: relative;
background-color: #fff;
- background-clip: padding-box;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
border: 1px solid #999;
border: 1px solid rgba(0, 0, 0, .2);
border-radius: 6px;
- outline: none;
+ outline: 0;
-webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
}
.modal-backdrop {
- position: fixed;
+ position: absolute;
top: 0;
right: 0;
- bottom: 0;
left: 0;
- z-index: 1040;
background-color: #000;
}
.modal-backdrop.fade {
@@ -5158,11 +5545,10 @@ button.close {
}
.modal-body {
position: relative;
- padding: 20px;
+ padding: 15px;
}
.modal-footer {
- padding: 19px 20px 20px;
- margin-top: 15px;
+ padding: 15px;
text-align: right;
border-top: 1px solid #e5e5e5;
}
@@ -5176,6 +5562,13 @@ button.close {
.modal-footer .btn-block + .btn-block {
margin-left: 0;
}
+.modal-scrollbar-measure {
+ position: absolute;
+ top: -9999px;
+ width: 50px;
+ height: 50px;
+ overflow: scroll;
+}
@media (min-width: 768px) {
.modal-dialog {
width: 600px;
@@ -5196,9 +5589,11 @@ button.close {
}
.tooltip {
position: absolute;
- z-index: 1030;
+ z-index: 1070;
display: block;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 12px;
+ font-weight: normal;
line-height: 1.4;
visibility: visible;
filter: alpha(opacity=0);
@@ -5248,14 +5643,16 @@ button.close {
border-top-color: #000;
}
.tooltip.top-left .tooltip-arrow {
+ right: 5px;
bottom: 0;
- left: 5px;
+ margin-bottom: -5px;
border-width: 5px 5px 0;
border-top-color: #000;
}
.tooltip.top-right .tooltip-arrow {
- right: 5px;
bottom: 0;
+ left: 5px;
+ margin-bottom: -5px;
border-width: 5px 5px 0;
border-top-color: #000;
}
@@ -5282,13 +5679,15 @@ button.close {
}
.tooltip.bottom-left .tooltip-arrow {
top: 0;
- left: 5px;
+ right: 5px;
+ margin-top: -5px;
border-width: 0 5px 5px;
border-bottom-color: #000;
}
.tooltip.bottom-right .tooltip-arrow {
top: 0;
- right: 5px;
+ left: 5px;
+ margin-top: -5px;
border-width: 0 5px 5px;
border-bottom-color: #000;
}
@@ -5296,14 +5695,19 @@ button.close {
position: absolute;
top: 0;
left: 0;
- z-index: 1010;
+ z-index: 1060;
display: none;
max-width: 276px;
padding: 1px;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1.42857143;
text-align: left;
white-space: normal;
background-color: #fff;
- background-clip: padding-box;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
border: 1px solid #ccc;
border: 1px solid rgba(0, 0, 0, .2);
border-radius: 6px;
@@ -5326,8 +5730,6 @@ button.close {
padding: 8px 14px;
margin: 0;
font-size: 14px;
- font-weight: normal;
- line-height: 18px;
background-color: #f7f7f7;
border-bottom: 1px solid #ebebeb;
border-radius: 5px 5px 0 0;
@@ -5423,12 +5825,44 @@ button.close {
position: relative;
display: none;
-webkit-transition: .6s ease-in-out left;
+ -o-transition: .6s ease-in-out left;
transition: .6s ease-in-out left;
}
.carousel-inner > .item > img,
.carousel-inner > .item > a > img {
line-height: 1;
}
+@media all and (transform-3d), (-webkit-transform-3d) {
+ .carousel-inner > .item {
+ -webkit-transition: -webkit-transform .6s ease-in-out;
+ -o-transition: -o-transform .6s ease-in-out;
+ transition: transform .6s ease-in-out;
+
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-perspective: 1000;
+ perspective: 1000;
+ }
+ .carousel-inner > .item.next,
+ .carousel-inner > .item.active.right {
+ left: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+ .carousel-inner > .item.prev,
+ .carousel-inner > .item.active.left {
+ left: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+ .carousel-inner > .item.next.left,
+ .carousel-inner > .item.prev.right,
+ .carousel-inner > .item.active {
+ left: 0;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
.carousel-inner > .active,
.carousel-inner > .next,
.carousel-inner > .prev {
@@ -5473,7 +5907,9 @@ button.close {
opacity: .5;
}
.carousel-control.left {
- background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .5) 0%), color-stop(rgba(0, 0, 0, .0001) 100%));
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
background-repeat: repeat-x;
@@ -5481,7 +5917,9 @@ button.close {
.carousel-control.right {
right: 0;
left: auto;
- background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .0001) 0%), color-stop(rgba(0, 0, 0, .5) 100%));
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
background-repeat: repeat-x;
@@ -5491,7 +5929,7 @@ button.close {
color: #fff;
text-decoration: none;
filter: alpha(opacity=90);
- outline: none;
+ outline: 0;
opacity: .9;
}
.carousel-control .icon-prev,
@@ -5506,17 +5944,18 @@ button.close {
.carousel-control .icon-prev,
.carousel-control .glyphicon-chevron-left {
left: 50%;
+ margin-left: -10px;
}
.carousel-control .icon-next,
.carousel-control .glyphicon-chevron-right {
right: 50%;
+ margin-right: -10px;
}
.carousel-control .icon-prev,
.carousel-control .icon-next {
width: 20px;
height: 20px;
margin-top: -10px;
- margin-left: -10px;
font-family: serif;
}
.carousel-control .icon-prev:before {
@@ -5577,9 +6016,16 @@ button.close {
width: 30px;
height: 30px;
margin-top: -15px;
- margin-left: -15px;
font-size: 30px;
}
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .icon-prev {
+ margin-left: -15px;
+ }
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-next {
+ margin-right: -15px;
+ }
.carousel-caption {
right: 20%;
left: 20%;
@@ -5591,6 +6037,8 @@ button.close {
}
.clearfix:before,
.clearfix:after,
+.dl-horizontal dd:before,
+.dl-horizontal dd:after,
.container:before,
.container:after,
.container-fluid:before,
@@ -5621,6 +6069,7 @@ button.close {
content: " ";
}
.clearfix:after,
+.dl-horizontal dd:after,
.container:after,
.container-fluid:after,
.row:after,
@@ -5679,6 +6128,20 @@ button.close {
.visible-lg {
display: none !important;
}
+.visible-xs-block,
+.visible-xs-inline,
+.visible-xs-inline-block,
+.visible-sm-block,
+.visible-sm-inline,
+.visible-sm-inline-block,
+.visible-md-block,
+.visible-md-inline,
+.visible-md-inline-block,
+.visible-lg-block,
+.visible-lg-inline,
+.visible-lg-inline-block {
+ display: none !important;
+}
@media (max-width: 767px) {
.visible-xs {
display: block !important;
@@ -5694,6 +6157,21 @@ button.close {
display: table-cell !important;
}
}
+@media (max-width: 767px) {
+ .visible-xs-block {
+ display: block !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-inline {
+ display: inline !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-inline-block {
+ display: inline-block !important;
+ }
+}
@media (min-width: 768px) and (max-width: 991px) {
.visible-sm {
display: block !important;
@@ -5709,6 +6187,21 @@ button.close {
display: table-cell !important;
}
}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-block {
+ display: block !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-inline-block {
+ display: inline-block !important;
+ }
+}
@media (min-width: 992px) and (max-width: 1199px) {
.visible-md {
display: block !important;
@@ -5724,6 +6217,21 @@ button.close {
display: table-cell !important;
}
}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-block {
+ display: block !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-inline-block {
+ display: inline-block !important;
+ }
+}
@media (min-width: 1200px) {
.visible-lg {
display: block !important;
@@ -5739,6 +6247,21 @@ button.close {
display: table-cell !important;
}
}
+@media (min-width: 1200px) {
+ .visible-lg-block {
+ display: block !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-inline-block {
+ display: inline-block !important;
+ }
+}
@media (max-width: 767px) {
.hidden-xs {
display: none !important;
@@ -5777,6 +6300,30 @@ button.close {
display: table-cell !important;
}
}
+.visible-print-block {
+ display: none !important;
+}
+@media print {
+ .visible-print-block {
+ display: block !important;
+ }
+}
+.visible-print-inline {
+ display: none !important;
+}
+@media print {
+ .visible-print-inline {
+ display: inline !important;
+ }
+}
+.visible-print-inline-block {
+ display: none !important;
+}
+@media print {
+ .visible-print-inline-block {
+ display: inline-block !important;
+ }
+}
@media print {
.hidden-print {
display: none !important;
diff --git a/library/bootstrap/css/bootstrap.min.css b/library/bootstrap/css/bootstrap.min.css
index 679272d25..b6fe4e0fb 100644
--- a/library/bootstrap/css/bootstrap.min.css
+++ b/library/bootstrap/css/bootstrap.min.css
@@ -1,7 +1,5 @@
/*!
- * Bootstrap v3.1.1 (http://getbootstrap.com)
+ * Bootstrap v3.3.1 (http://getbootstrap.com)
* Copyright 2011-2014 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-/*! normalize.css v3.0.0 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#999}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-muted{color:#999}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#999}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;white-space:nowrap;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:0}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:0}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:0}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:0}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:0}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:0}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:0}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:0}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date]{line-height:34px}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;margin-top:10px;margin-bottom:10px;padding-left:20px}.radio label,.checkbox label{display:inline;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.has-feedback .form-control-feedback{position:absolute;top:25px;right:0;display:block;width:34px;height:34px;line-height:34px;text-align:center}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.form-control-static{margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{float:none;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#428bca;font-weight:400;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#999}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{float:none;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#428bca;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:gray}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#999;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px;overflow:hidden}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faebcc}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ebccd1}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:auto;overflow-y:scroll;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{margin-top:15px;padding:19px 20px 20px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;right:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.5) 0),color-stop(rgba(0,0,0,.0001) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.0001) 0),color-stop(rgba(0,0,0,.5) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file
+ *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:before,:after{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm,select.form-group-sm .form-control{height:30px;line-height:30px}textarea.input-sm,textarea.form-group-sm .form-control,select[multiple].input-sm,select[multiple].form-group-sm .form-control{height:auto}.input-lg,.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg,select.form-group-lg .form-control{height:46px;line-height:46px}textarea.input-lg,textarea.form-group-lg .form-control,select[multiple].input-lg,select[multiple].form-group-lg .form-control{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none;visibility:hidden}.collapse.in{display:block;visibility:visible}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=radio],[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none;visibility:hidden}.tab-content>.active{display:block;visibility:visible}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important;visibility:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-right:15px;padding-left:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:absolute;top:0;right:0;left:0;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.next,.carousel-inner>.item.active.right{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file
diff --git a/library/bootstrap/fonts/glyphicons-halflings-regular.svg b/library/bootstrap/fonts/glyphicons-halflings-regular.svg
index e3e2dc739..25691af8f 100644
--- a/library/bootstrap/fonts/glyphicons-halflings-regular.svg
+++ b/library/bootstrap/fonts/glyphicons-halflings-regular.svg
@@ -226,4 +226,4 @@
<glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
</font>
-</defs></svg> \ No newline at end of file
+</defs></svg> \ No newline at end of file
diff --git a/library/bootstrap/js/bootbox.js b/library/bootstrap/js/bootbox.js
new file mode 100644
index 000000000..a002e4a35
--- /dev/null
+++ b/library/bootstrap/js/bootbox.js
@@ -0,0 +1,894 @@
+/**
+ * bootbox.js [v4.3.0]
+ *
+ * http://bootboxjs.com/license.txt
+ */
+
+// @see https://github.com/makeusabrew/bootbox/issues/180
+// @see https://github.com/makeusabrew/bootbox/issues/186
+(function (root, factory) {
+
+ "use strict";
+ if (typeof define === "function" && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(["jquery"], factory);
+ } else if (typeof exports === "object") {
+ // Node. Does not work with strict CommonJS, but
+ // only CommonJS-like environments that support module.exports,
+ // like Node.
+ module.exports = factory(require("jquery"));
+ } else {
+ // Browser globals (root is window)
+ root.bootbox = factory(root.jQuery);
+ }
+
+}(this, function init($, undefined) {
+
+ "use strict";
+
+ // the base DOM structure needed to create a modal
+ var templates = {
+ dialog:
+ "<div class='bootbox modal' tabindex='-1' role='dialog'>" +
+ "<div class='modal-dialog'>" +
+ "<div class='modal-content'>" +
+ "<div class='modal-body'><div class='bootbox-body'></div></div>" +
+ "</div>" +
+ "</div>" +
+ "</div>",
+ header:
+ "<div class='modal-header'>" +
+ "<h4 class='modal-title'></h4>" +
+ "</div>",
+ footer:
+ "<div class='modal-footer'></div>",
+ closeButton:
+ "<button type='button' class='bootbox-close-button close' data-dismiss='modal' aria-hidden='true'>&times;</button>",
+ form:
+ "<form class='bootbox-form'></form>",
+ inputs: {
+ text:
+ "<input class='bootbox-input bootbox-input-text form-control' autocomplete=off type=text />",
+ textarea:
+ "<textarea class='bootbox-input bootbox-input-textarea form-control'></textarea>",
+ email:
+ "<input class='bootbox-input bootbox-input-email form-control' autocomplete='off' type='email' />",
+ select:
+ "<select class='bootbox-input bootbox-input-select form-control'></select>",
+ checkbox:
+ "<div class='checkbox'><label><input class='bootbox-input bootbox-input-checkbox' type='checkbox' /></label></div>",
+ date:
+ "<input class='bootbox-input bootbox-input-date form-control' autocomplete=off type='date' />",
+ time:
+ "<input class='bootbox-input bootbox-input-time form-control' autocomplete=off type='time' />",
+ number:
+ "<input class='bootbox-input bootbox-input-number form-control' autocomplete=off type='number' />",
+ password:
+ "<input class='bootbox-input bootbox-input-password form-control' autocomplete='off' type='password' />"
+ }
+ };
+
+ var defaults = {
+ // default language
+ locale: "en",
+ // show backdrop or not
+ backdrop: true,
+ // animate the modal in/out
+ animate: true,
+ // additional class string applied to the top level dialog
+ className: null,
+ // whether or not to include a close button
+ closeButton: true,
+ // show the dialog immediately by default
+ show: true,
+ // dialog container
+ container: "body"
+ };
+
+ // our public object; augmented after our private API
+ var exports = {};
+
+ /**
+ * @private
+ */
+ function _t(key) {
+ var locale = locales[defaults.locale];
+ return locale ? locale[key] : locales.en[key];
+ }
+
+ function processCallback(e, dialog, callback) {
+ e.stopPropagation();
+ e.preventDefault();
+
+ // by default we assume a callback will get rid of the dialog,
+ // although it is given the opportunity to override this
+
+ // so, if the callback can be invoked and it *explicitly returns false*
+ // then we'll set a flag to keep the dialog active...
+ var preserveDialog = $.isFunction(callback) && callback(e) === false;
+
+ // ... otherwise we'll bin it
+ if (!preserveDialog) {
+ dialog.modal("hide");
+ }
+ }
+
+ function getKeyLength(obj) {
+ // @TODO defer to Object.keys(x).length if available?
+ var k, t = 0;
+ for (k in obj) {
+ t ++;
+ }
+ return t;
+ }
+
+ function each(collection, iterator) {
+ var index = 0;
+ $.each(collection, function(key, value) {
+ iterator(key, value, index++);
+ });
+ }
+
+ function sanitize(options) {
+ var buttons;
+ var total;
+
+ if (typeof options !== "object") {
+ throw new Error("Please supply an object of options");
+ }
+
+ if (!options.message) {
+ throw new Error("Please specify a message");
+ }
+
+ // make sure any supplied options take precedence over defaults
+ options = $.extend({}, defaults, options);
+
+ if (!options.buttons) {
+ options.buttons = {};
+ }
+
+ // we only support Bootstrap's "static" and false backdrop args
+ // supporting true would mean you could dismiss the dialog without
+ // explicitly interacting with it
+ options.backdrop = options.backdrop ? "static" : false;
+
+ buttons = options.buttons;
+
+ total = getKeyLength(buttons);
+
+ each(buttons, function(key, button, index) {
+
+ if ($.isFunction(button)) {
+ // short form, assume value is our callback. Since button
+ // isn't an object it isn't a reference either so re-assign it
+ button = buttons[key] = {
+ callback: button
+ };
+ }
+
+ // before any further checks make sure by now button is the correct type
+ if ($.type(button) !== "object") {
+ throw new Error("button with key " + key + " must be an object");
+ }
+
+ if (!button.label) {
+ // the lack of an explicit label means we'll assume the key is good enough
+ button.label = key;
+ }
+
+ if (!button.className) {
+ if (total <= 2 && index === total-1) {
+ // always add a primary to the main option in a two-button dialog
+ button.className = "btn-primary";
+ } else {
+ button.className = "btn-default";
+ }
+ }
+ });
+
+ return options;
+ }
+
+ /**
+ * map a flexible set of arguments into a single returned object
+ * if args.length is already one just return it, otherwise
+ * use the properties argument to map the unnamed args to
+ * object properties
+ * so in the latter case:
+ * mapArguments(["foo", $.noop], ["message", "callback"])
+ * -> { message: "foo", callback: $.noop }
+ */
+ function mapArguments(args, properties) {
+ var argn = args.length;
+ var options = {};
+
+ if (argn < 1 || argn > 2) {
+ throw new Error("Invalid argument length");
+ }
+
+ if (argn === 2 || typeof args[0] === "string") {
+ options[properties[0]] = args[0];
+ options[properties[1]] = args[1];
+ } else {
+ options = args[0];
+ }
+
+ return options;
+ }
+
+ /**
+ * merge a set of default dialog options with user supplied arguments
+ */
+ function mergeArguments(defaults, args, properties) {
+ return $.extend(
+ // deep merge
+ true,
+ // ensure the target is an empty, unreferenced object
+ {},
+ // the base options object for this type of dialog (often just buttons)
+ defaults,
+ // args could be an object or array; if it's an array properties will
+ // map it to a proper options object
+ mapArguments(
+ args,
+ properties
+ )
+ );
+ }
+
+ /**
+ * this entry-level method makes heavy use of composition to take a simple
+ * range of inputs and return valid options suitable for passing to bootbox.dialog
+ */
+ function mergeDialogOptions(className, labels, properties, args) {
+ // build up a base set of dialog properties
+ var baseOptions = {
+ className: "bootbox-" + className,
+ buttons: createLabels.apply(null, labels)
+ };
+
+ // ensure the buttons properties generated, *after* merging
+ // with user args are still valid against the supplied labels
+ return validateButtons(
+ // merge the generated base properties with user supplied arguments
+ mergeArguments(
+ baseOptions,
+ args,
+ // if args.length > 1, properties specify how each arg maps to an object key
+ properties
+ ),
+ labels
+ );
+ }
+
+ /**
+ * from a given list of arguments return a suitable object of button labels
+ * all this does is normalise the given labels and translate them where possible
+ * e.g. "ok", "confirm" -> { ok: "OK, cancel: "Annuleren" }
+ */
+ function createLabels() {
+ var buttons = {};
+
+ for (var i = 0, j = arguments.length; i < j; i++) {
+ var argument = arguments[i];
+ var key = argument.toLowerCase();
+ var value = argument.toUpperCase();
+
+ buttons[key] = {
+ label: _t(value)
+ };
+ }
+
+ return buttons;
+ }
+
+ function validateButtons(options, buttons) {
+ var allowedButtons = {};
+ each(buttons, function(key, value) {
+ allowedButtons[value] = true;
+ });
+
+ each(options.buttons, function(key) {
+ if (allowedButtons[key] === undefined) {
+ throw new Error("button key " + key + " is not allowed (options are " + buttons.join("\n") + ")");
+ }
+ });
+
+ return options;
+ }
+
+ exports.alert = function() {
+ var options;
+
+ options = mergeDialogOptions("alert", ["ok"], ["message", "callback"], arguments);
+
+ if (options.callback && !$.isFunction(options.callback)) {
+ throw new Error("alert requires callback property to be a function when provided");
+ }
+
+ /**
+ * overrides
+ */
+ options.buttons.ok.callback = options.onEscape = function() {
+ if ($.isFunction(options.callback)) {
+ return options.callback();
+ }
+ return true;
+ };
+
+ return exports.dialog(options);
+ };
+
+ exports.confirm = function() {
+ var options;
+
+ options = mergeDialogOptions("confirm", ["cancel", "confirm"], ["message", "callback"], arguments);
+
+ /**
+ * overrides; undo anything the user tried to set they shouldn't have
+ */
+ options.buttons.cancel.callback = options.onEscape = function() {
+ return options.callback(false);
+ };
+
+ options.buttons.confirm.callback = function() {
+ return options.callback(true);
+ };
+
+ // confirm specific validation
+ if (!$.isFunction(options.callback)) {
+ throw new Error("confirm requires a callback");
+ }
+
+ return exports.dialog(options);
+ };
+
+ exports.prompt = function() {
+ var options;
+ var defaults;
+ var dialog;
+ var form;
+ var input;
+ var shouldShow;
+ var inputOptions;
+
+ // we have to create our form first otherwise
+ // its value is undefined when gearing up our options
+ // @TODO this could be solved by allowing message to
+ // be a function instead...
+ form = $(templates.form);
+
+ // prompt defaults are more complex than others in that
+ // users can override more defaults
+ // @TODO I don't like that prompt has to do a lot of heavy
+ // lifting which mergeDialogOptions can *almost* support already
+ // just because of 'value' and 'inputType' - can we refactor?
+ defaults = {
+ className: "bootbox-prompt",
+ buttons: createLabels("cancel", "confirm"),
+ value: "",
+ inputType: "text"
+ };
+
+ options = validateButtons(
+ mergeArguments(defaults, arguments, ["title", "callback"]),
+ ["cancel", "confirm"]
+ );
+
+ // capture the user's show value; we always set this to false before
+ // spawning the dialog to give us a chance to attach some handlers to
+ // it, but we need to make sure we respect a preference not to show it
+ shouldShow = (options.show === undefined) ? true : options.show;
+
+ /**
+ * overrides; undo anything the user tried to set they shouldn't have
+ */
+ options.message = form;
+
+ options.buttons.cancel.callback = options.onEscape = function() {
+ return options.callback(null);
+ };
+
+ options.buttons.confirm.callback = function() {
+ var value;
+
+ switch (options.inputType) {
+ case "text":
+ case "textarea":
+ case "email":
+ case "select":
+ case "date":
+ case "time":
+ case "number":
+ case "password":
+ value = input.val();
+ break;
+
+ case "checkbox":
+ var checkedItems = input.find("input:checked");
+
+ // we assume that checkboxes are always multiple,
+ // hence we default to an empty array
+ value = [];
+
+ each(checkedItems, function(_, item) {
+ value.push($(item).val());
+ });
+ break;
+ }
+
+ return options.callback(value);
+ };
+
+ options.show = false;
+
+ // prompt specific validation
+ if (!options.title) {
+ throw new Error("prompt requires a title");
+ }
+
+ if (!$.isFunction(options.callback)) {
+ throw new Error("prompt requires a callback");
+ }
+
+ if (!templates.inputs[options.inputType]) {
+ throw new Error("invalid prompt type");
+ }
+
+ // create the input based on the supplied type
+ input = $(templates.inputs[options.inputType]);
+
+ switch (options.inputType) {
+ case "text":
+ case "textarea":
+ case "email":
+ case "date":
+ case "time":
+ case "number":
+ case "password":
+ input.val(options.value);
+ break;
+
+ case "select":
+ var groups = {};
+ inputOptions = options.inputOptions || [];
+
+ if (!inputOptions.length) {
+ throw new Error("prompt with select requires options");
+ }
+
+ each(inputOptions, function(_, option) {
+
+ // assume the element to attach to is the input...
+ var elem = input;
+
+ if (option.value === undefined || option.text === undefined) {
+ throw new Error("given options in wrong format");
+ }
+
+
+ // ... but override that element if this option sits in a group
+
+ if (option.group) {
+ // initialise group if necessary
+ if (!groups[option.group]) {
+ groups[option.group] = $("<optgroup/>").attr("label", option.group);
+ }
+
+ elem = groups[option.group];
+ }
+
+ elem.append("<option value='" + option.value + "'>" + option.text + "</option>");
+ });
+
+ each(groups, function(_, group) {
+ input.append(group);
+ });
+
+ // safe to set a select's value as per a normal input
+ input.val(options.value);
+ break;
+
+ case "checkbox":
+ var values = $.isArray(options.value) ? options.value : [options.value];
+ inputOptions = options.inputOptions || [];
+
+ if (!inputOptions.length) {
+ throw new Error("prompt with checkbox requires options");
+ }
+
+ if (!inputOptions[0].value || !inputOptions[0].text) {
+ throw new Error("given options in wrong format");
+ }
+
+ // checkboxes have to nest within a containing element, so
+ // they break the rules a bit and we end up re-assigning
+ // our 'input' element to this container instead
+ input = $("<div/>");
+
+ each(inputOptions, function(_, option) {
+ var checkbox = $(templates.inputs[options.inputType]);
+
+ checkbox.find("input").attr("value", option.value);
+ checkbox.find("label").append(option.text);
+
+ // we've ensured values is an array so we can always iterate over it
+ each(values, function(_, value) {
+ if (value === option.value) {
+ checkbox.find("input").prop("checked", true);
+ }
+ });
+
+ input.append(checkbox);
+ });
+ break;
+ }
+
+ if (options.placeholder) {
+ input.attr("placeholder", options.placeholder);
+ }
+
+ if(options.pattern){
+ input.attr("pattern", options.pattern);
+ }
+
+ // now place it in our form
+ form.append(input);
+
+ form.on("submit", function(e) {
+ e.preventDefault();
+ // Fix for SammyJS (or similar JS routing library) hijacking the form post.
+ e.stopPropagation();
+ // @TODO can we actually click *the* button object instead?
+ // e.g. buttons.confirm.click() or similar
+ dialog.find(".btn-primary").click();
+ });
+
+ dialog = exports.dialog(options);
+
+ // clear the existing handler focusing the submit button...
+ dialog.off("shown.bs.modal");
+
+ // ...and replace it with one focusing our input, if possible
+ dialog.on("shown.bs.modal", function() {
+ input.focus();
+ });
+
+ if (shouldShow === true) {
+ dialog.modal("show");
+ }
+
+ return dialog;
+ };
+
+ exports.dialog = function(options) {
+ options = sanitize(options);
+
+ var dialog = $(templates.dialog);
+ var innerDialog = dialog.find(".modal-dialog");
+ var body = dialog.find(".modal-body");
+ var buttons = options.buttons;
+ var buttonStr = "";
+ var callbacks = {
+ onEscape: options.onEscape
+ };
+
+ each(buttons, function(key, button) {
+
+ // @TODO I don't like this string appending to itself; bit dirty. Needs reworking
+ // can we just build up button elements instead? slower but neater. Then button
+ // can just become a template too
+ buttonStr += "<button data-bb-handler='" + key + "' type='button' class='btn " + button.className + "'>" + button.label + "</button>";
+ callbacks[key] = button.callback;
+ });
+
+ body.find(".bootbox-body").html(options.message);
+
+ if (options.animate === true) {
+ dialog.addClass("fade");
+ }
+
+ if (options.className) {
+ dialog.addClass(options.className);
+ }
+
+ if (options.size === "large") {
+ innerDialog.addClass("modal-lg");
+ }
+
+ if (options.size === "small") {
+ innerDialog.addClass("modal-sm");
+ }
+
+ if (options.title) {
+ body.before(templates.header);
+ }
+
+ if (options.closeButton) {
+ var closeButton = $(templates.closeButton);
+
+ if (options.title) {
+ dialog.find(".modal-header").prepend(closeButton);
+ } else {
+ closeButton.css("margin-top", "-10px").prependTo(body);
+ }
+ }
+
+ if (options.title) {
+ dialog.find(".modal-title").html(options.title);
+ }
+
+ if (buttonStr.length) {
+ body.after(templates.footer);
+ dialog.find(".modal-footer").html(buttonStr);
+ }
+
+
+ /**
+ * Bootstrap event listeners; used handle extra
+ * setup & teardown required after the underlying
+ * modal has performed certain actions
+ */
+
+ dialog.on("hidden.bs.modal", function(e) {
+ // ensure we don't accidentally intercept hidden events triggered
+ // by children of the current dialog. We shouldn't anymore now BS
+ // namespaces its events; but still worth doing
+ if (e.target === this) {
+ dialog.remove();
+ }
+ });
+
+ /*
+ dialog.on("show.bs.modal", function() {
+ // sadly this doesn't work; show is called *just* before
+ // the backdrop is added so we'd need a setTimeout hack or
+ // otherwise... leaving in as would be nice
+ if (options.backdrop) {
+ dialog.next(".modal-backdrop").addClass("bootbox-backdrop");
+ }
+ });
+ */
+
+ dialog.on("shown.bs.modal", function() {
+ dialog.find(".btn-primary:first").focus();
+ });
+
+ /**
+ * Bootbox event listeners; experimental and may not last
+ * just an attempt to decouple some behaviours from their
+ * respective triggers
+ */
+
+ dialog.on("escape.close.bb", function(e) {
+ if (callbacks.onEscape) {
+ processCallback(e, dialog, callbacks.onEscape);
+ }
+ });
+
+ /**
+ * Standard jQuery event listeners; used to handle user
+ * interaction with our dialog
+ */
+
+ dialog.on("click", ".modal-footer button", function(e) {
+ var callbackKey = $(this).data("bb-handler");
+
+ processCallback(e, dialog, callbacks[callbackKey]);
+
+ });
+
+ dialog.on("click", ".bootbox-close-button", function(e) {
+ // onEscape might be falsy but that's fine; the fact is
+ // if the user has managed to click the close button we
+ // have to close the dialog, callback or not
+ processCallback(e, dialog, callbacks.onEscape);
+ });
+
+ dialog.on("keyup", function(e) {
+ if (e.which === 27) {
+ dialog.trigger("escape.close.bb");
+ }
+ });
+
+ // the remainder of this method simply deals with adding our
+ // dialogent to the DOM, augmenting it with Bootstrap's modal
+ // functionality and then giving the resulting object back
+ // to our caller
+
+ $(options.container).append(dialog);
+
+ dialog.modal({
+ backdrop: options.backdrop,
+ keyboard: false,
+ show: false
+ });
+
+ if (options.show) {
+ dialog.modal("show");
+ }
+
+ // @TODO should we return the raw element here or should
+ // we wrap it in an object on which we can expose some neater
+ // methods, e.g. var d = bootbox.alert(); d.hide(); instead
+ // of d.modal("hide");
+
+ /*
+ function BBDialog(elem) {
+ this.elem = elem;
+ }
+
+ BBDialog.prototype = {
+ hide: function() {
+ return this.elem.modal("hide");
+ },
+ show: function() {
+ return this.elem.modal("show");
+ }
+ };
+ */
+
+ return dialog;
+
+ };
+
+ exports.setDefaults = function() {
+ var values = {};
+
+ if (arguments.length === 2) {
+ // allow passing of single key/value...
+ values[arguments[0]] = arguments[1];
+ } else {
+ // ... and as an object too
+ values = arguments[0];
+ }
+
+ $.extend(defaults, values);
+ };
+
+ exports.hideAll = function() {
+ $(".bootbox").modal("hide");
+
+ return exports;
+ };
+
+
+ /**
+ * standard locales. Please add more according to ISO 639-1 standard. Multiple language variants are
+ * unlikely to be required. If this gets too large it can be split out into separate JS files.
+ */
+ var locales = {
+ br : {
+ OK : "OK",
+ CANCEL : "Cancelar",
+ CONFIRM : "Sim"
+ },
+ cs : {
+ OK : "OK",
+ CANCEL : "Zrušit",
+ CONFIRM : "Potvrdit"
+ },
+ da : {
+ OK : "OK",
+ CANCEL : "Annuller",
+ CONFIRM : "Accepter"
+ },
+ de : {
+ OK : "OK",
+ CANCEL : "Abbrechen",
+ CONFIRM : "Akzeptieren"
+ },
+ el : {
+ OK : "Εντάξει",
+ CANCEL : "ΑκÏÏωση",
+ CONFIRM : "Επιβεβαίωση"
+ },
+ en : {
+ OK : "OK",
+ CANCEL : "Cancel",
+ CONFIRM : "OK"
+ },
+ es : {
+ OK : "OK",
+ CANCEL : "Cancelar",
+ CONFIRM : "Aceptar"
+ },
+ et : {
+ OK : "OK",
+ CANCEL : "Katkesta",
+ CONFIRM : "OK"
+ },
+ fi : {
+ OK : "OK",
+ CANCEL : "Peruuta",
+ CONFIRM : "OK"
+ },
+ fr : {
+ OK : "OK",
+ CANCEL : "Annuler",
+ CONFIRM : "D'accord"
+ },
+ he : {
+ OK : "×ישור",
+ CANCEL : "ביטול",
+ CONFIRM : "×ישור"
+ },
+ id : {
+ OK : "OK",
+ CANCEL : "Batal",
+ CONFIRM : "OK"
+ },
+ it : {
+ OK : "OK",
+ CANCEL : "Annulla",
+ CONFIRM : "Conferma"
+ },
+ ja : {
+ OK : "OK",
+ CANCEL : "キャンセル",
+ CONFIRM : "確èª"
+ },
+ lt : {
+ OK : "Gerai",
+ CANCEL : "Atšaukti",
+ CONFIRM : "Patvirtinti"
+ },
+ lv : {
+ OK : "Labi",
+ CANCEL : "Atcelt",
+ CONFIRM : "ApstiprinÄt"
+ },
+ nl : {
+ OK : "OK",
+ CANCEL : "Annuleren",
+ CONFIRM : "Accepteren"
+ },
+ no : {
+ OK : "OK",
+ CANCEL : "Avbryt",
+ CONFIRM : "OK"
+ },
+ pl : {
+ OK : "OK",
+ CANCEL : "Anuluj",
+ CONFIRM : "Potwierdź"
+ },
+ pt : {
+ OK : "OK",
+ CANCEL : "Cancelar",
+ CONFIRM : "Confirmar"
+ },
+ ru : {
+ OK : "OK",
+ CANCEL : "Отмена",
+ CONFIRM : "Применить"
+ },
+ sv : {
+ OK : "OK",
+ CANCEL : "Avbryt",
+ CONFIRM : "OK"
+ },
+ tr : {
+ OK : "Tamam",
+ CANCEL : "Ä°ptal",
+ CONFIRM : "Onayla"
+ },
+ zh_CN : {
+ OK : "OK",
+ CANCEL : "å–消",
+ CONFIRM : "确认"
+ },
+ zh_TW : {
+ OK : "OK",
+ CANCEL : "å–消",
+ CONFIRM : "確èª"
+ }
+ };
+
+ exports.init = function(_$) {
+ return init(_$ || $);
+ };
+
+ return exports;
+}));
diff --git a/library/bootstrap/js/bootbox.min.js b/library/bootstrap/js/bootbox.min.js
index 4ea792f3a..a7ea24fe7 100644
--- a/library/bootstrap/js/bootbox.min.js
+++ b/library/bootstrap/js/bootbox.min.js
@@ -1,6 +1,6 @@
/**
- * bootbox.js v4.1.0
+ * bootbox.js v4.3.0
*
* http://bootboxjs.com/license.txt
*/
-window.bootbox=window.bootbox||function a(b,c){"use strict";function d(a){var b=r[p.locale];return b?b[a]:r.en[a]}function e(a,c,d){a.preventDefault();var e=b.isFunction(d)&&d(a)===!1;e||c.modal("hide")}function f(a){var b,c=0;for(b in a)c++;return c}function g(a,c){var d=0;b.each(a,function(a,b){c(a,b,d++)})}function h(a){var c,d;if("object"!=typeof a)throw new Error("Please supply an object of options");if(!a.message)throw new Error("Please specify a message");return a=b.extend({},p,a),a.buttons||(a.buttons={}),a.backdrop=a.backdrop?"static":!1,c=a.buttons,d=f(c),g(c,function(a,e,f){if(b.isFunction(e)&&(e=c[a]={callback:e}),"object"!==b.type(e))throw new Error("button with key "+a+" must be an object");e.label||(e.label=a),e.className||(e.className=2>=d&&f===d-1?"btn-primary":"btn-default")}),a}function i(a,b){var c=a.length,d={};if(1>c||c>2)throw new Error("Invalid argument length");return 2===c||"string"==typeof a[0]?(d[b[0]]=a[0],d[b[1]]=a[1]):d=a[0],d}function j(a,c,d){return b.extend(!0,{},a,i(c,d))}function k(a,b,c,d){var e={className:"bootbox-"+a,buttons:l.apply(null,b)};return m(j(e,d,c),b)}function l(){for(var a={},b=0,c=arguments.length;c>b;b++){var e=arguments[b],f=e.toLowerCase(),g=e.toUpperCase();a[f]={label:d(g)}}return a}function m(a,b){var d={};return g(b,function(a,b){d[b]=!0}),g(a.buttons,function(a){if(d[a]===c)throw new Error("button key "+a+" is not allowed (options are "+b.join("\n")+")")}),a}var n={dialog:"<div class='bootbox modal' tabindex='-1' role='dialog'><div class='modal-dialog'><div class='modal-content'><div class='modal-body'><div class='bootbox-body'></div></div></div></div></div>",header:"<div class='modal-header'><h4 class='modal-title'></h4></div>",footer:"<div class='modal-footer'></div>",closeButton:"<button type='button' class='bootbox-close-button close'>&times;</button>",form:"<form class='bootbox-form'></form>",inputs:{text:"<input class='bootbox-input bootbox-input-text form-control' autocomplete=off type=text />",email:"<input class='bootbox-input bootbox-input-email form-control' autocomplete='off' type='email' />",select:"<select class='bootbox-input bootbox-input-select form-control'></select>",checkbox:"<div class='checkbox'><label><input class='bootbox-input bootbox-input-checkbox' type='checkbox' /></label></div>"}},o=b("body"),p={locale:"en",backdrop:!0,animate:!0,className:null,closeButton:!0,show:!0},q={};q.alert=function(){var a;if(a=k("alert",["ok"],["message","callback"],arguments),a.callback&&!b.isFunction(a.callback))throw new Error("alert requires callback property to be a function when provided");return a.buttons.ok.callback=a.onEscape=function(){return b.isFunction(a.callback)?a.callback():!0},q.dialog(a)},q.confirm=function(){var a;if(a=k("confirm",["cancel","confirm"],["message","callback"],arguments),a.buttons.cancel.callback=a.onEscape=function(){return a.callback(!1)},a.buttons.confirm.callback=function(){return a.callback(!0)},!b.isFunction(a.callback))throw new Error("confirm requires a callback");return q.dialog(a)},q.prompt=function(){var a,d,e,f,h,i,k;if(f=b(n.form),d={className:"bootbox-prompt",buttons:l("cancel","confirm"),value:"",inputType:"text"},a=m(j(d,arguments,["title","callback"]),["cancel","confirm"]),i=a.show===c?!0:a.show,a.message=f,a.buttons.cancel.callback=a.onEscape=function(){return a.callback(null)},a.buttons.confirm.callback=function(){var c;switch(a.inputType){case"text":case"email":case"select":c=h.val();break;case"checkbox":var d=h.find("input:checked");c=[],g(d,function(a,d){c.push(b(d).val())})}return a.callback(c)},a.show=!1,!a.title)throw new Error("prompt requires a title");if(!b.isFunction(a.callback))throw new Error("prompt requires a callback");if(!n.inputs[a.inputType])throw new Error("invalid prompt type");switch(h=b(n.inputs[a.inputType]),a.inputType){case"text":case"email":h.val(a.value);break;case"select":var o={};if(k=a.inputOptions||[],!k.length)throw new Error("prompt with select requires options");g(k,function(a,d){var e=h;if(d.value===c||d.text===c)throw new Error("given options in wrong format");d.group&&(o[d.group]||(o[d.group]=b("<optgroup/>").attr("label",d.group)),e=o[d.group]),e.append("<option value='"+d.value+"'>"+d.text+"</option>")}),g(o,function(a,b){h.append(b)}),h.val(a.value);break;case"checkbox":var p=b.isArray(a.value)?a.value:[a.value];if(k=a.inputOptions||[],!k.length)throw new Error("prompt with checkbox requires options");if(!k[0].value||!k[0].text)throw new Error("given options in wrong format");h=b("<div/>"),g(k,function(c,d){var e=b(n.inputs[a.inputType]);e.find("input").attr("value",d.value),e.find("label").append(d.text),g(p,function(a,b){b===d.value&&e.find("input").prop("checked",!0)}),h.append(e)})}return a.placeholder&&h.attr("placeholder",a.placeholder),f.append(h),f.on("submit",function(a){a.preventDefault(),e.find(".btn-primary").click()}),e=q.dialog(a),e.off("shown.bs.modal"),e.on("shown.bs.modal",function(){h.focus()}),i===!0&&e.modal("show"),e},q.dialog=function(a){a=h(a);var c=b(n.dialog),d=c.find(".modal-body"),f=a.buttons,i="",j={onEscape:a.onEscape};if(g(f,function(a,b){i+="<button data-bb-handler='"+a+"' type='button' class='btn "+b.className+"'>"+b.label+"</button>",j[a]=b.callback}),d.find(".bootbox-body").html(a.message),a.animate===!0&&c.addClass("fade"),a.className&&c.addClass(a.className),a.title&&d.before(n.header),a.closeButton){var k=b(n.closeButton);a.title?c.find(".modal-header").prepend(k):k.css("margin-top","-10px").prependTo(d)}return a.title&&c.find(".modal-title").html(a.title),i.length&&(d.after(n.footer),c.find(".modal-footer").html(i)),c.on("hidden.bs.modal",function(a){a.target===this&&c.remove()}),c.on("shown.bs.modal",function(){c.find(".btn-primary:first").focus()}),c.on("escape.close.bb",function(a){j.onEscape&&e(a,c,j.onEscape)}),c.on("click",".modal-footer button",function(a){var d=b(this).data("bb-handler");e(a,c,j[d])}),c.on("click",".bootbox-close-button",function(a){e(a,c,j.onEscape)}),c.on("keyup",function(a){27===a.which&&c.trigger("escape.close.bb")}),o.append(c),c.modal({backdrop:a.backdrop,keyboard:!1,show:!1}),a.show&&c.modal("show"),c},q.setDefaults=function(){var a={};2===arguments.length?a[arguments[0]]=arguments[1]:a=arguments[0],b.extend(p,a)},q.hideAll=function(){b(".bootbox").modal("hide")};var r={br:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Sim"},da:{OK:"OK",CANCEL:"Annuller",CONFIRM:"Accepter"},de:{OK:"OK",CANCEL:"Abbrechen",CONFIRM:"Akzeptieren"},en:{OK:"OK",CANCEL:"Cancel",CONFIRM:"OK"},es:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Aceptar"},fi:{OK:"OK",CANCEL:"Peruuta",CONFIRM:"OK"},fr:{OK:"OK",CANCEL:"Annuler",CONFIRM:"D'accord"},it:{OK:"OK",CANCEL:"Annulla",CONFIRM:"Conferma"},nl:{OK:"OK",CANCEL:"Annuleren",CONFIRM:"Accepteren"},no:{OK:"OK",CANCEL:"Avbryt",CONFIRM:"OK"},pl:{OK:"OK",CANCEL:"Anuluj",CONFIRM:"Potwierdź"},ru:{OK:"OK",CANCEL:"Отмена",CONFIRM:"Применить"},zh_CN:{OK:"OK",CANCEL:"å–消",CONFIRM:"确认"},zh_TW:{OK:"OK",CANCEL:"å–消",CONFIRM:"確èª"}};return q.init=function(c){window.bootbox=a(c||b)},q}(window.jQuery); \ No newline at end of file
+!function(a,b){"use strict";"function"==typeof define&&define.amd?define(["jquery"],b):"object"==typeof exports?module.exports=b(require("jquery")):a.bootbox=b(a.jQuery)}(this,function a(b,c){"use strict";function d(a){var b=q[o.locale];return b?b[a]:q.en[a]}function e(a,c,d){a.stopPropagation(),a.preventDefault();var e=b.isFunction(d)&&d(a)===!1;e||c.modal("hide")}function f(a){var b,c=0;for(b in a)c++;return c}function g(a,c){var d=0;b.each(a,function(a,b){c(a,b,d++)})}function h(a){var c,d;if("object"!=typeof a)throw new Error("Please supply an object of options");if(!a.message)throw new Error("Please specify a message");return a=b.extend({},o,a),a.buttons||(a.buttons={}),a.backdrop=a.backdrop?"static":!1,c=a.buttons,d=f(c),g(c,function(a,e,f){if(b.isFunction(e)&&(e=c[a]={callback:e}),"object"!==b.type(e))throw new Error("button with key "+a+" must be an object");e.label||(e.label=a),e.className||(e.className=2>=d&&f===d-1?"btn-primary":"btn-default")}),a}function i(a,b){var c=a.length,d={};if(1>c||c>2)throw new Error("Invalid argument length");return 2===c||"string"==typeof a[0]?(d[b[0]]=a[0],d[b[1]]=a[1]):d=a[0],d}function j(a,c,d){return b.extend(!0,{},a,i(c,d))}function k(a,b,c,d){var e={className:"bootbox-"+a,buttons:l.apply(null,b)};return m(j(e,d,c),b)}function l(){for(var a={},b=0,c=arguments.length;c>b;b++){var e=arguments[b],f=e.toLowerCase(),g=e.toUpperCase();a[f]={label:d(g)}}return a}function m(a,b){var d={};return g(b,function(a,b){d[b]=!0}),g(a.buttons,function(a){if(d[a]===c)throw new Error("button key "+a+" is not allowed (options are "+b.join("\n")+")")}),a}var n={dialog:"<div class='bootbox modal' tabindex='-1' role='dialog'><div class='modal-dialog'><div class='modal-content'><div class='modal-body'><div class='bootbox-body'></div></div></div></div></div>",header:"<div class='modal-header'><h4 class='modal-title'></h4></div>",footer:"<div class='modal-footer'></div>",closeButton:"<button type='button' class='bootbox-close-button close' data-dismiss='modal' aria-hidden='true'>&times;</button>",form:"<form class='bootbox-form'></form>",inputs:{text:"<input class='bootbox-input bootbox-input-text form-control' autocomplete=off type=text />",textarea:"<textarea class='bootbox-input bootbox-input-textarea form-control'></textarea>",email:"<input class='bootbox-input bootbox-input-email form-control' autocomplete='off' type='email' />",select:"<select class='bootbox-input bootbox-input-select form-control'></select>",checkbox:"<div class='checkbox'><label><input class='bootbox-input bootbox-input-checkbox' type='checkbox' /></label></div>",date:"<input class='bootbox-input bootbox-input-date form-control' autocomplete=off type='date' />",time:"<input class='bootbox-input bootbox-input-time form-control' autocomplete=off type='time' />",number:"<input class='bootbox-input bootbox-input-number form-control' autocomplete=off type='number' />",password:"<input class='bootbox-input bootbox-input-password form-control' autocomplete='off' type='password' />"}},o={locale:"en",backdrop:!0,animate:!0,className:null,closeButton:!0,show:!0,container:"body"},p={};p.alert=function(){var a;if(a=k("alert",["ok"],["message","callback"],arguments),a.callback&&!b.isFunction(a.callback))throw new Error("alert requires callback property to be a function when provided");return a.buttons.ok.callback=a.onEscape=function(){return b.isFunction(a.callback)?a.callback():!0},p.dialog(a)},p.confirm=function(){var a;if(a=k("confirm",["cancel","confirm"],["message","callback"],arguments),a.buttons.cancel.callback=a.onEscape=function(){return a.callback(!1)},a.buttons.confirm.callback=function(){return a.callback(!0)},!b.isFunction(a.callback))throw new Error("confirm requires a callback");return p.dialog(a)},p.prompt=function(){var a,d,e,f,h,i,k;if(f=b(n.form),d={className:"bootbox-prompt",buttons:l("cancel","confirm"),value:"",inputType:"text"},a=m(j(d,arguments,["title","callback"]),["cancel","confirm"]),i=a.show===c?!0:a.show,a.message=f,a.buttons.cancel.callback=a.onEscape=function(){return a.callback(null)},a.buttons.confirm.callback=function(){var c;switch(a.inputType){case"text":case"textarea":case"email":case"select":case"date":case"time":case"number":case"password":c=h.val();break;case"checkbox":var d=h.find("input:checked");c=[],g(d,function(a,d){c.push(b(d).val())})}return a.callback(c)},a.show=!1,!a.title)throw new Error("prompt requires a title");if(!b.isFunction(a.callback))throw new Error("prompt requires a callback");if(!n.inputs[a.inputType])throw new Error("invalid prompt type");switch(h=b(n.inputs[a.inputType]),a.inputType){case"text":case"textarea":case"email":case"date":case"time":case"number":case"password":h.val(a.value);break;case"select":var o={};if(k=a.inputOptions||[],!k.length)throw new Error("prompt with select requires options");g(k,function(a,d){var e=h;if(d.value===c||d.text===c)throw new Error("given options in wrong format");d.group&&(o[d.group]||(o[d.group]=b("<optgroup/>").attr("label",d.group)),e=o[d.group]),e.append("<option value='"+d.value+"'>"+d.text+"</option>")}),g(o,function(a,b){h.append(b)}),h.val(a.value);break;case"checkbox":var q=b.isArray(a.value)?a.value:[a.value];if(k=a.inputOptions||[],!k.length)throw new Error("prompt with checkbox requires options");if(!k[0].value||!k[0].text)throw new Error("given options in wrong format");h=b("<div/>"),g(k,function(c,d){var e=b(n.inputs[a.inputType]);e.find("input").attr("value",d.value),e.find("label").append(d.text),g(q,function(a,b){b===d.value&&e.find("input").prop("checked",!0)}),h.append(e)})}return a.placeholder&&h.attr("placeholder",a.placeholder),a.pattern&&h.attr("pattern",a.pattern),f.append(h),f.on("submit",function(a){a.preventDefault(),a.stopPropagation(),e.find(".btn-primary").click()}),e=p.dialog(a),e.off("shown.bs.modal"),e.on("shown.bs.modal",function(){h.focus()}),i===!0&&e.modal("show"),e},p.dialog=function(a){a=h(a);var c=b(n.dialog),d=c.find(".modal-dialog"),f=c.find(".modal-body"),i=a.buttons,j="",k={onEscape:a.onEscape};if(g(i,function(a,b){j+="<button data-bb-handler='"+a+"' type='button' class='btn "+b.className+"'>"+b.label+"</button>",k[a]=b.callback}),f.find(".bootbox-body").html(a.message),a.animate===!0&&c.addClass("fade"),a.className&&c.addClass(a.className),"large"===a.size&&d.addClass("modal-lg"),"small"===a.size&&d.addClass("modal-sm"),a.title&&f.before(n.header),a.closeButton){var l=b(n.closeButton);a.title?c.find(".modal-header").prepend(l):l.css("margin-top","-10px").prependTo(f)}return a.title&&c.find(".modal-title").html(a.title),j.length&&(f.after(n.footer),c.find(".modal-footer").html(j)),c.on("hidden.bs.modal",function(a){a.target===this&&c.remove()}),c.on("shown.bs.modal",function(){c.find(".btn-primary:first").focus()}),c.on("escape.close.bb",function(a){k.onEscape&&e(a,c,k.onEscape)}),c.on("click",".modal-footer button",function(a){var d=b(this).data("bb-handler");e(a,c,k[d])}),c.on("click",".bootbox-close-button",function(a){e(a,c,k.onEscape)}),c.on("keyup",function(a){27===a.which&&c.trigger("escape.close.bb")}),b(a.container).append(c),c.modal({backdrop:a.backdrop,keyboard:!1,show:!1}),a.show&&c.modal("show"),c},p.setDefaults=function(){var a={};2===arguments.length?a[arguments[0]]=arguments[1]:a=arguments[0],b.extend(o,a)},p.hideAll=function(){return b(".bootbox").modal("hide"),p};var q={br:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Sim"},cs:{OK:"OK",CANCEL:"ZruÅ¡it",CONFIRM:"Potvrdit"},da:{OK:"OK",CANCEL:"Annuller",CONFIRM:"Accepter"},de:{OK:"OK",CANCEL:"Abbrechen",CONFIRM:"Akzeptieren"},el:{OK:"Εντάξει",CANCEL:"ΑκÏÏωση",CONFIRM:"Επιβεβαίωση"},en:{OK:"OK",CANCEL:"Cancel",CONFIRM:"OK"},es:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Aceptar"},et:{OK:"OK",CANCEL:"Katkesta",CONFIRM:"OK"},fi:{OK:"OK",CANCEL:"Peruuta",CONFIRM:"OK"},fr:{OK:"OK",CANCEL:"Annuler",CONFIRM:"D'accord"},he:{OK:"×ישור",CANCEL:"ביטול",CONFIRM:"×ישור"},id:{OK:"OK",CANCEL:"Batal",CONFIRM:"OK"},it:{OK:"OK",CANCEL:"Annulla",CONFIRM:"Conferma"},ja:{OK:"OK",CANCEL:"キャンセル",CONFIRM:"確èª"},lt:{OK:"Gerai",CANCEL:"AtÅ¡aukti",CONFIRM:"Patvirtinti"},lv:{OK:"Labi",CANCEL:"Atcelt",CONFIRM:"ApstiprinÄt"},nl:{OK:"OK",CANCEL:"Annuleren",CONFIRM:"Accepteren"},no:{OK:"OK",CANCEL:"Avbryt",CONFIRM:"OK"},pl:{OK:"OK",CANCEL:"Anuluj",CONFIRM:"Potwierdź"},pt:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Confirmar"},ru:{OK:"OK",CANCEL:"Отмена",CONFIRM:"Применить"},sv:{OK:"OK",CANCEL:"Avbryt",CONFIRM:"OK"},tr:{OK:"Tamam",CANCEL:"Ä°ptal",CONFIRM:"Onayla"},zh_CN:{OK:"OK",CANCEL:"å–消",CONFIRM:"确认"},zh_TW:{OK:"OK",CANCEL:"å–消",CONFIRM:"確èª"}};return p.init=function(c){return a(c||b)},p}); \ No newline at end of file
diff --git a/library/bootstrap/js/bootstrap.js b/library/bootstrap/js/bootstrap.js
index 8ae571b6d..b6ac8d990 100644
--- a/library/bootstrap/js/bootstrap.js
+++ b/library/bootstrap/js/bootstrap.js
@@ -1,13 +1,22 @@
/*!
- * Bootstrap v3.1.1 (http://getbootstrap.com)
+ * Bootstrap v3.3.1 (http://getbootstrap.com)
* Copyright 2011-2014 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
-if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') }
+if (typeof jQuery === 'undefined') {
+ throw new Error('Bootstrap\'s JavaScript requires jQuery')
+}
+
++function ($) {
+ var version = $.fn.jquery.split(' ')[0].split('.')
+ if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {
+ throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher')
+ }
+}(jQuery);
/* ========================================================================
- * Bootstrap: transition.js v3.1.1
+ * Bootstrap: transition.js v3.3.1
* http://getbootstrap.com/javascript/#transitions
* ========================================================================
* Copyright 2011-2014 Twitter, Inc.
@@ -25,10 +34,10 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
var el = document.createElement('bootstrap')
var transEndEventNames = {
- 'WebkitTransition' : 'webkitTransitionEnd',
- 'MozTransition' : 'transitionend',
- 'OTransition' : 'oTransitionEnd otransitionend',
- 'transition' : 'transitionend'
+ WebkitTransition : 'webkitTransitionEnd',
+ MozTransition : 'transitionend',
+ OTransition : 'oTransitionEnd otransitionend',
+ transition : 'transitionend'
}
for (var name in transEndEventNames) {
@@ -42,8 +51,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
// http://blog.alexmaccaw.com/css-transitions
$.fn.emulateTransitionEnd = function (duration) {
- var called = false, $el = this
- $(this).one($.support.transition.end, function () { called = true })
+ var called = false
+ var $el = this
+ $(this).one('bsTransitionEnd', function () { called = true })
var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
setTimeout(callback, duration)
return this
@@ -51,12 +61,22 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
$(function () {
$.support.transition = transitionEnd()
+
+ if (!$.support.transition) return
+
+ $.event.special.bsTransitionEnd = {
+ bindType: $.support.transition.end,
+ delegateType: $.support.transition.end,
+ handle: function (e) {
+ if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
+ }
+ }
})
}(jQuery);
/* ========================================================================
- * Bootstrap: alert.js v3.1.1
+ * Bootstrap: alert.js v3.3.1
* http://getbootstrap.com/javascript/#alerts
* ========================================================================
* Copyright 2011-2014 Twitter, Inc.
@@ -75,6 +95,10 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
$(el).on('click', dismiss, this.close)
}
+ Alert.VERSION = '3.3.1'
+
+ Alert.TRANSITION_DURATION = 150
+
Alert.prototype.close = function (e) {
var $this = $(this)
var selector = $this.attr('data-target')
@@ -89,7 +113,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
if (e) e.preventDefault()
if (!$parent.length) {
- $parent = $this.hasClass('alert') ? $this : $this.parent()
+ $parent = $this.closest('.alert')
}
$parent.trigger(e = $.Event('close.bs.alert'))
@@ -99,13 +123,14 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
$parent.removeClass('in')
function removeElement() {
- $parent.trigger('closed.bs.alert').remove()
+ // detach from parent, fire event then clean up data
+ $parent.detach().trigger('closed.bs.alert').remove()
}
$.support.transition && $parent.hasClass('fade') ?
$parent
- .one($.support.transition.end, removeElement)
- .emulateTransitionEnd(150) :
+ .one('bsTransitionEnd', removeElement)
+ .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
removeElement()
}
@@ -113,9 +138,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
// ALERT PLUGIN DEFINITION
// =======================
- var old = $.fn.alert
-
- $.fn.alert = function (option) {
+ function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.alert')
@@ -125,6 +148,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
})
}
+ var old = $.fn.alert
+
+ $.fn.alert = Plugin
$.fn.alert.Constructor = Alert
@@ -145,7 +171,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
}(jQuery);
/* ========================================================================
- * Bootstrap: button.js v3.1.1
+ * Bootstrap: button.js v3.3.1
* http://getbootstrap.com/javascript/#buttons
* ========================================================================
* Copyright 2011-2014 Twitter, Inc.
@@ -165,6 +191,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
this.isLoading = false
}
+ Button.VERSION = '3.3.1'
+
Button.DEFAULTS = {
loadingText: 'loading...'
}
@@ -177,12 +205,12 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
state = state + 'Text'
- if (!data.resetText) $el.data('resetText', $el[val]())
-
- $el[val](data[state] || this.options[state])
+ if (data.resetText == null) $el.data('resetText', $el[val]())
// push to event loop to allow forms to submit
setTimeout($.proxy(function () {
+ $el[val](data[state] == null ? this.options[state] : data[state])
+
if (state == 'loadingText') {
this.isLoading = true
$el.addClass(d).attr(d, d)
@@ -204,6 +232,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
else $parent.find('.active').removeClass('active')
}
if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
+ } else {
+ this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
}
if (changed) this.$element.toggleClass('active')
@@ -213,9 +243,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
// BUTTON PLUGIN DEFINITION
// ========================
- var old = $.fn.button
-
- $.fn.button = function (option) {
+ function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.button')
@@ -228,6 +256,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
})
}
+ var old = $.fn.button
+
+ $.fn.button = Plugin
$.fn.button.Constructor = Button
@@ -243,17 +274,21 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
// BUTTON DATA-API
// ===============
- $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {
- var $btn = $(e.target)
- if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
- $btn.button('toggle')
- e.preventDefault()
- })
+ $(document)
+ .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+ var $btn = $(e.target)
+ if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
+ Plugin.call($btn, 'toggle')
+ e.preventDefault()
+ })
+ .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+ $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
+ })
}(jQuery);
/* ========================================================================
- * Bootstrap: carousel.js v3.1.1
+ * Bootstrap: carousel.js v3.3.1
* http://getbootstrap.com/javascript/#carousel
* ========================================================================
* Copyright 2011-2014 Twitter, Inc.
@@ -277,18 +312,36 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
this.$active =
this.$items = null
- this.options.pause == 'hover' && this.$element
- .on('mouseenter', $.proxy(this.pause, this))
- .on('mouseleave', $.proxy(this.cycle, this))
+ this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
+
+ this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
+ .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
+ .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
}
+ Carousel.VERSION = '3.3.1'
+
+ Carousel.TRANSITION_DURATION = 600
+
Carousel.DEFAULTS = {
interval: 5000,
pause: 'hover',
- wrap: true
+ wrap: true,
+ keyboard: true
+ }
+
+ Carousel.prototype.keydown = function (e) {
+ if (/input|textarea/i.test(e.target.tagName)) return
+ switch (e.which) {
+ case 37: this.prev(); break
+ case 39: this.next(); break
+ default: return
+ }
+
+ e.preventDefault()
}
- Carousel.prototype.cycle = function (e) {
+ Carousel.prototype.cycle = function (e) {
e || (this.paused = false)
this.interval && clearInterval(this.interval)
@@ -300,23 +353,28 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
return this
}
- Carousel.prototype.getActiveIndex = function () {
- this.$active = this.$element.find('.item.active')
- this.$items = this.$active.parent().children()
+ Carousel.prototype.getItemIndex = function (item) {
+ this.$items = item.parent().children('.item')
+ return this.$items.index(item || this.$active)
+ }
- return this.$items.index(this.$active)
+ Carousel.prototype.getItemForDirection = function (direction, active) {
+ var delta = direction == 'prev' ? -1 : 1
+ var activeIndex = this.getItemIndex(active)
+ var itemIndex = (activeIndex + delta) % this.$items.length
+ return this.$items.eq(itemIndex)
}
Carousel.prototype.to = function (pos) {
var that = this
- var activeIndex = this.getActiveIndex()
+ var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
if (pos > (this.$items.length - 1) || pos < 0) return
- if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) })
+ if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
if (activeIndex == pos) return this.pause().cycle()
- return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
+ return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
}
Carousel.prototype.pause = function (e) {
@@ -344,7 +402,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
Carousel.prototype.slide = function (type, next) {
var $active = this.$element.find('.item.active')
- var $next = next || $active[type]()
+ var $next = next || this.getItemForDirection(type, $active)
var isCycling = this.interval
var direction = type == 'next' ? 'left' : 'right'
var fallback = type == 'next' ? 'first' : 'last'
@@ -355,11 +413,15 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
$next = this.$element.find('.item')[fallback]()
}
- if ($next.hasClass('active')) return this.sliding = false
+ if ($next.hasClass('active')) return (this.sliding = false)
- var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })
- this.$element.trigger(e)
- if (e.isDefaultPrevented()) return
+ var relatedTarget = $next[0]
+ var slideEvent = $.Event('slide.bs.carousel', {
+ relatedTarget: relatedTarget,
+ direction: direction
+ })
+ this.$element.trigger(slideEvent)
+ if (slideEvent.isDefaultPrevented()) return
this.sliding = true
@@ -367,30 +429,31 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
if (this.$indicators.length) {
this.$indicators.find('.active').removeClass('active')
- this.$element.one('slid.bs.carousel', function () {
- var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
- $nextIndicator && $nextIndicator.addClass('active')
- })
+ var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
+ $nextIndicator && $nextIndicator.addClass('active')
}
+ var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
if ($.support.transition && this.$element.hasClass('slide')) {
$next.addClass(type)
$next[0].offsetWidth // force reflow
$active.addClass(direction)
$next.addClass(direction)
$active
- .one($.support.transition.end, function () {
+ .one('bsTransitionEnd', function () {
$next.removeClass([type, direction].join(' ')).addClass('active')
$active.removeClass(['active', direction].join(' '))
that.sliding = false
- setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0)
+ setTimeout(function () {
+ that.$element.trigger(slidEvent)
+ }, 0)
})
- .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
+ .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
} else {
$active.removeClass('active')
$next.addClass('active')
this.sliding = false
- this.$element.trigger('slid.bs.carousel')
+ this.$element.trigger(slidEvent)
}
isCycling && this.cycle()
@@ -402,9 +465,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
// CAROUSEL PLUGIN DEFINITION
// ==========================
- var old = $.fn.carousel
-
- $.fn.carousel = function (option) {
+ function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.carousel')
@@ -418,6 +479,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
})
}
+ var old = $.fn.carousel
+
+ $.fn.carousel = Plugin
$.fn.carousel.Constructor = Carousel
@@ -433,33 +497,39 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
// CAROUSEL DATA-API
// =================
- $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
- var $this = $(this), href
- var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
+ var clickHandler = function (e) {
+ var href
+ var $this = $(this)
+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
+ if (!$target.hasClass('carousel')) return
var options = $.extend({}, $target.data(), $this.data())
var slideIndex = $this.attr('data-slide-to')
if (slideIndex) options.interval = false
- $target.carousel(options)
+ Plugin.call($target, options)
- if (slideIndex = $this.attr('data-slide-to')) {
+ if (slideIndex) {
$target.data('bs.carousel').to(slideIndex)
}
e.preventDefault()
- })
+ }
+
+ $(document)
+ .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
+ .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
$(window).on('load', function () {
$('[data-ride="carousel"]').each(function () {
var $carousel = $(this)
- $carousel.carousel($carousel.data())
+ Plugin.call($carousel, $carousel.data())
})
})
}(jQuery);
/* ========================================================================
- * Bootstrap: collapse.js v3.1.1
+ * Bootstrap: collapse.js v3.3.1
* http://getbootstrap.com/javascript/#collapse
* ========================================================================
* Copyright 2011-2014 Twitter, Inc.
@@ -476,14 +546,25 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
var Collapse = function (element, options) {
this.$element = $(element)
this.options = $.extend({}, Collapse.DEFAULTS, options)
+ this.$trigger = $(this.options.trigger).filter('[href="#' + element.id + '"], [data-target="#' + element.id + '"]')
this.transitioning = null
- if (this.options.parent) this.$parent = $(this.options.parent)
+ if (this.options.parent) {
+ this.$parent = this.getParent()
+ } else {
+ this.addAriaAndCollapsedClass(this.$element, this.$trigger)
+ }
+
if (this.options.toggle) this.toggle()
}
+ Collapse.VERSION = '3.3.1'
+
+ Collapse.TRANSITION_DURATION = 350
+
Collapse.DEFAULTS = {
- toggle: true
+ toggle: true,
+ trigger: '[data-toggle="collapse"]'
}
Collapse.prototype.dimension = function () {
@@ -494,35 +575,43 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
Collapse.prototype.show = function () {
if (this.transitioning || this.$element.hasClass('in')) return
+ var activesData
+ var actives = this.$parent && this.$parent.find('> .panel').children('.in, .collapsing')
+
+ if (actives && actives.length) {
+ activesData = actives.data('bs.collapse')
+ if (activesData && activesData.transitioning) return
+ }
+
var startEvent = $.Event('show.bs.collapse')
this.$element.trigger(startEvent)
if (startEvent.isDefaultPrevented()) return
- var actives = this.$parent && this.$parent.find('> .panel > .in')
-
if (actives && actives.length) {
- var hasData = actives.data('bs.collapse')
- if (hasData && hasData.transitioning) return
- actives.collapse('hide')
- hasData || actives.data('bs.collapse', null)
+ Plugin.call(actives, 'hide')
+ activesData || actives.data('bs.collapse', null)
}
var dimension = this.dimension()
this.$element
.removeClass('collapse')
- .addClass('collapsing')
- [dimension](0)
+ .addClass('collapsing')[dimension](0)
+ .attr('aria-expanded', true)
+
+ this.$trigger
+ .removeClass('collapsed')
+ .attr('aria-expanded', true)
this.transitioning = 1
var complete = function () {
this.$element
.removeClass('collapsing')
- .addClass('collapse in')
- [dimension]('auto')
+ .addClass('collapse in')[dimension]('')
this.transitioning = 0
- this.$element.trigger('shown.bs.collapse')
+ this.$element
+ .trigger('shown.bs.collapse')
}
if (!$.support.transition) return complete.call(this)
@@ -530,9 +619,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
var scrollSize = $.camelCase(['scroll', dimension].join('-'))
this.$element
- .one($.support.transition.end, $.proxy(complete, this))
- .emulateTransitionEnd(350)
- [dimension](this.$element[0][scrollSize])
+ .one('bsTransitionEnd', $.proxy(complete, this))
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
}
Collapse.prototype.hide = function () {
@@ -544,55 +632,85 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
var dimension = this.dimension()
- this.$element
- [dimension](this.$element[dimension]())
- [0].offsetHeight
+ this.$element[dimension](this.$element[dimension]())[0].offsetHeight
this.$element
.addClass('collapsing')
- .removeClass('collapse')
- .removeClass('in')
+ .removeClass('collapse in')
+ .attr('aria-expanded', false)
+
+ this.$trigger
+ .addClass('collapsed')
+ .attr('aria-expanded', false)
this.transitioning = 1
var complete = function () {
this.transitioning = 0
this.$element
- .trigger('hidden.bs.collapse')
.removeClass('collapsing')
.addClass('collapse')
+ .trigger('hidden.bs.collapse')
}
if (!$.support.transition) return complete.call(this)
this.$element
[dimension](0)
- .one($.support.transition.end, $.proxy(complete, this))
- .emulateTransitionEnd(350)
+ .one('bsTransitionEnd', $.proxy(complete, this))
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
}
Collapse.prototype.toggle = function () {
this[this.$element.hasClass('in') ? 'hide' : 'show']()
}
+ Collapse.prototype.getParent = function () {
+ return $(this.options.parent)
+ .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
+ .each($.proxy(function (i, element) {
+ var $element = $(element)
+ this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
+ }, this))
+ .end()
+ }
+
+ Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
+ var isOpen = $element.hasClass('in')
+
+ $element.attr('aria-expanded', isOpen)
+ $trigger
+ .toggleClass('collapsed', !isOpen)
+ .attr('aria-expanded', isOpen)
+ }
+
+ function getTargetFromTrigger($trigger) {
+ var href
+ var target = $trigger.attr('data-target')
+ || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
+
+ return $(target)
+ }
+
// COLLAPSE PLUGIN DEFINITION
// ==========================
- var old = $.fn.collapse
-
- $.fn.collapse = function (option) {
+ function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.collapse')
var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
- if (!data && options.toggle && option == 'show') option = !option
+ if (!data && options.toggle && option == 'show') options.toggle = false
if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
if (typeof option == 'string') data[option]()
})
}
+ var old = $.fn.collapse
+
+ $.fn.collapse = Plugin
$.fn.collapse.Constructor = Collapse
@@ -608,29 +726,22 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
// COLLAPSE DATA-API
// =================
- $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {
- var $this = $(this), href
- var target = $this.attr('data-target')
- || e.preventDefault()
- || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
- var $target = $(target)
- var data = $target.data('bs.collapse')
- var option = data ? 'toggle' : $this.data()
- var parent = $this.attr('data-parent')
- var $parent = parent && $(parent)
+ $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
+ var $this = $(this)
- if (!data || !data.transitioning) {
- if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed')
- $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
- }
+ if (!$this.attr('data-target')) e.preventDefault()
- $target.collapse(option)
+ var $target = getTargetFromTrigger($this)
+ var data = $target.data('bs.collapse')
+ var option = data ? 'toggle' : $.extend({}, $this.data(), { trigger: this })
+
+ Plugin.call($target, option)
})
}(jQuery);
/* ========================================================================
- * Bootstrap: dropdown.js v3.1.1
+ * Bootstrap: dropdown.js v3.3.1
* http://getbootstrap.com/javascript/#dropdowns
* ========================================================================
* Copyright 2011-2014 Twitter, Inc.
@@ -645,11 +756,13 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
// =========================
var backdrop = '.dropdown-backdrop'
- var toggle = '[data-toggle=dropdown]'
+ var toggle = '[data-toggle="dropdown"]'
var Dropdown = function (element) {
$(element).on('click.bs.dropdown', this.toggle)
}
+ Dropdown.VERSION = '3.3.1'
+
Dropdown.prototype.toggle = function (e) {
var $this = $(this)
@@ -671,18 +784,20 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
if (e.isDefaultPrevented()) return
+ $this
+ .trigger('focus')
+ .attr('aria-expanded', 'true')
+
$parent
.toggleClass('open')
.trigger('shown.bs.dropdown', relatedTarget)
-
- $this.focus()
}
return false
}
Dropdown.prototype.keydown = function (e) {
- if (!/(38|40|27)/.test(e.keyCode)) return
+ if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
var $this = $(this)
@@ -694,33 +809,40 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
var $parent = getParent($this)
var isActive = $parent.hasClass('open')
- if (!isActive || (isActive && e.keyCode == 27)) {
- if (e.which == 27) $parent.find(toggle).focus()
- return $this.click()
+ if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {
+ if (e.which == 27) $parent.find(toggle).trigger('focus')
+ return $this.trigger('click')
}
var desc = ' li:not(.divider):visible a'
- var $items = $parent.find('[role=menu]' + desc + ', [role=listbox]' + desc)
+ var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
if (!$items.length) return
- var index = $items.index($items.filter(':focus'))
+ var index = $items.index(e.target)
- if (e.keyCode == 38 && index > 0) index-- // up
- if (e.keyCode == 40 && index < $items.length - 1) index++ // down
+ if (e.which == 38 && index > 0) index-- // up
+ if (e.which == 40 && index < $items.length - 1) index++ // down
if (!~index) index = 0
- $items.eq(index).focus()
+ $items.eq(index).trigger('focus')
}
function clearMenus(e) {
+ if (e && e.which === 3) return
$(backdrop).remove()
$(toggle).each(function () {
- var $parent = getParent($(this))
+ var $this = $(this)
+ var $parent = getParent($this)
var relatedTarget = { relatedTarget: this }
+
if (!$parent.hasClass('open')) return
+
$parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
+
if (e.isDefaultPrevented()) return
+
+ $this.attr('aria-expanded', 'false')
$parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
})
}
@@ -730,7 +852,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
if (!selector) {
selector = $this.attr('href')
- selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
+ selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
}
var $parent = selector && $(selector)
@@ -742,9 +864,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
// DROPDOWN PLUGIN DEFINITION
// ==========================
- var old = $.fn.dropdown
-
- $.fn.dropdown = function (option) {
+ function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.dropdown')
@@ -754,6 +874,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
})
}
+ var old = $.fn.dropdown
+
+ $.fn.dropdown = Plugin
$.fn.dropdown.Constructor = Dropdown
@@ -773,12 +896,14 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
.on('click.bs.dropdown.data-api', clearMenus)
.on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
.on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
- .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu], [role=listbox]', Dropdown.prototype.keydown)
+ .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
+ .on('keydown.bs.dropdown.data-api', '[role="menu"]', Dropdown.prototype.keydown)
+ .on('keydown.bs.dropdown.data-api', '[role="listbox"]', Dropdown.prototype.keydown)
}(jQuery);
/* ========================================================================
- * Bootstrap: modal.js v3.1.1
+ * Bootstrap: modal.js v3.3.1
* http://getbootstrap.com/javascript/#modals
* ========================================================================
* Copyright 2011-2014 Twitter, Inc.
@@ -793,10 +918,12 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
// ======================
var Modal = function (element, options) {
- this.options = options
- this.$element = $(element)
- this.$backdrop =
- this.isShown = null
+ this.options = options
+ this.$body = $(document.body)
+ this.$element = $(element)
+ this.$backdrop =
+ this.isShown = null
+ this.scrollbarWidth = 0
if (this.options.remote) {
this.$element
@@ -807,6 +934,11 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
}
}
+ Modal.VERSION = '3.3.1'
+
+ Modal.TRANSITION_DURATION = 300
+ Modal.BACKDROP_TRANSITION_DURATION = 150
+
Modal.DEFAULTS = {
backdrop: true,
keyboard: true,
@@ -814,7 +946,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
}
Modal.prototype.toggle = function (_relatedTarget) {
- return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)
+ return this.isShown ? this.hide() : this.show(_relatedTarget)
}
Modal.prototype.show = function (_relatedTarget) {
@@ -827,7 +959,12 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
this.isShown = true
+ this.checkScrollbar()
+ this.setScrollbar()
+ this.$body.addClass('modal-open')
+
this.escape()
+ this.resize()
this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
@@ -835,13 +972,16 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
var transition = $.support.transition && that.$element.hasClass('fade')
if (!that.$element.parent().length) {
- that.$element.appendTo(document.body) // don't move modals dom position
+ that.$element.appendTo(that.$body) // don't move modals dom position
}
that.$element
.show()
.scrollTop(0)
+ if (that.options.backdrop) that.adjustBackdrop()
+ that.adjustDialog()
+
if (transition) {
that.$element[0].offsetWidth // force reflow
}
@@ -856,11 +996,11 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
transition ?
that.$element.find('.modal-dialog') // wait for modal to slide in
- .one($.support.transition.end, function () {
- that.$element.focus().trigger(e)
+ .one('bsTransitionEnd', function () {
+ that.$element.trigger('focus').trigger(e)
})
- .emulateTransitionEnd(300) :
- that.$element.focus().trigger(e)
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+ that.$element.trigger('focus').trigger(e)
})
}
@@ -876,6 +1016,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
this.isShown = false
this.escape()
+ this.resize()
$(document).off('focusin.bs.modal')
@@ -886,8 +1027,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
$.support.transition && this.$element.hasClass('fade') ?
this.$element
- .one($.support.transition.end, $.proxy(this.hideModal, this))
- .emulateTransitionEnd(300) :
+ .one('bsTransitionEnd', $.proxy(this.hideModal, this))
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
this.hideModal()
}
@@ -896,18 +1037,26 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
.off('focusin.bs.modal') // guard against infinite focus loop
.on('focusin.bs.modal', $.proxy(function (e) {
if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
- this.$element.focus()
+ this.$element.trigger('focus')
}
}, this))
}
Modal.prototype.escape = function () {
if (this.isShown && this.options.keyboard) {
- this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {
+ this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
e.which == 27 && this.hide()
}, this))
} else if (!this.isShown) {
- this.$element.off('keyup.dismiss.bs.modal')
+ this.$element.off('keydown.dismiss.bs.modal')
+ }
+ }
+
+ Modal.prototype.resize = function () {
+ if (this.isShown) {
+ $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
+ } else {
+ $(window).off('resize.bs.modal')
}
}
@@ -915,7 +1064,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
var that = this
this.$element.hide()
this.backdrop(function () {
- that.removeBackdrop()
+ that.$body.removeClass('modal-open')
+ that.resetAdjustments()
+ that.resetScrollbar()
that.$element.trigger('hidden.bs.modal')
})
}
@@ -926,20 +1077,20 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
}
Modal.prototype.backdrop = function (callback) {
+ var that = this
var animate = this.$element.hasClass('fade') ? 'fade' : ''
if (this.isShown && this.options.backdrop) {
var doAnimate = $.support.transition && animate
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
- .appendTo(document.body)
-
- this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
- if (e.target !== e.currentTarget) return
- this.options.backdrop == 'static'
- ? this.$element[0].focus.call(this.$element[0])
- : this.hide.call(this)
- }, this))
+ .prependTo(this.$element)
+ .on('click.dismiss.bs.modal', $.proxy(function (e) {
+ if (e.target !== e.currentTarget) return
+ this.options.backdrop == 'static'
+ ? this.$element[0].focus.call(this.$element[0])
+ : this.hide.call(this)
+ }, this))
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
@@ -949,31 +1100,85 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
doAnimate ?
this.$backdrop
- .one($.support.transition.end, callback)
- .emulateTransitionEnd(150) :
+ .one('bsTransitionEnd', callback)
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
callback()
} else if (!this.isShown && this.$backdrop) {
this.$backdrop.removeClass('in')
+ var callbackRemove = function () {
+ that.removeBackdrop()
+ callback && callback()
+ }
$.support.transition && this.$element.hasClass('fade') ?
this.$backdrop
- .one($.support.transition.end, callback)
- .emulateTransitionEnd(150) :
- callback()
+ .one('bsTransitionEnd', callbackRemove)
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+ callbackRemove()
} else if (callback) {
callback()
}
}
+ // these following methods are used to handle overflowing modals
+
+ Modal.prototype.handleUpdate = function () {
+ if (this.options.backdrop) this.adjustBackdrop()
+ this.adjustDialog()
+ }
+
+ Modal.prototype.adjustBackdrop = function () {
+ this.$backdrop
+ .css('height', 0)
+ .css('height', this.$element[0].scrollHeight)
+ }
+
+ Modal.prototype.adjustDialog = function () {
+ var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
+
+ this.$element.css({
+ paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
+ paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
+ })
+ }
+
+ Modal.prototype.resetAdjustments = function () {
+ this.$element.css({
+ paddingLeft: '',
+ paddingRight: ''
+ })
+ }
+
+ Modal.prototype.checkScrollbar = function () {
+ this.bodyIsOverflowing = document.body.scrollHeight > document.documentElement.clientHeight
+ this.scrollbarWidth = this.measureScrollbar()
+ }
+
+ Modal.prototype.setScrollbar = function () {
+ var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
+ if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
+ }
+
+ Modal.prototype.resetScrollbar = function () {
+ this.$body.css('padding-right', '')
+ }
+
+ Modal.prototype.measureScrollbar = function () { // thx walsh
+ var scrollDiv = document.createElement('div')
+ scrollDiv.className = 'modal-scrollbar-measure'
+ this.$body.append(scrollDiv)
+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
+ this.$body[0].removeChild(scrollDiv)
+ return scrollbarWidth
+ }
+
// MODAL PLUGIN DEFINITION
// =======================
- var old = $.fn.modal
-
- $.fn.modal = function (option, _relatedTarget) {
+ function Plugin(option, _relatedTarget) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.modal')
@@ -985,6 +1190,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
})
}
+ var old = $.fn.modal
+
+ $.fn.modal = Plugin
$.fn.modal.Constructor = Modal
@@ -1003,26 +1211,24 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
$(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
var $this = $(this)
var href = $this.attr('href')
- var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
+ var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
if ($this.is('a')) e.preventDefault()
- $target
- .modal(option, this)
- .one('hide', function () {
- $this.is(':visible') && $this.focus()
+ $target.one('show.bs.modal', function (showEvent) {
+ if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
+ $target.one('hidden.bs.modal', function () {
+ $this.is(':visible') && $this.trigger('focus')
})
+ })
+ Plugin.call($target, option, this)
})
- $(document)
- .on('show.bs.modal', '.modal', function () { $(document.body).addClass('modal-open') })
- .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })
-
}(jQuery);
/* ========================================================================
- * Bootstrap: tooltip.js v3.1.1
+ * Bootstrap: tooltip.js v3.3.1
* http://getbootstrap.com/javascript/#tooltip
* Inspired by the original jQuery.tipsy by Jason Frame
* ========================================================================
@@ -1048,23 +1254,32 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
this.init('tooltip', element, options)
}
+ Tooltip.VERSION = '3.3.1'
+
+ Tooltip.TRANSITION_DURATION = 150
+
Tooltip.DEFAULTS = {
animation: true,
placement: 'top',
selector: false,
- template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
+ template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
trigger: 'hover focus',
title: '',
delay: 0,
html: false,
- container: false
+ container: false,
+ viewport: {
+ selector: 'body',
+ padding: 0
+ }
}
Tooltip.prototype.init = function (type, element, options) {
- this.enabled = true
- this.type = type
- this.$element = $(element)
- this.options = this.getOptions(options)
+ this.enabled = true
+ this.type = type
+ this.$element = $(element)
+ this.options = this.getOptions(options)
+ this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)
var triggers = this.options.trigger.split(' ')
@@ -1117,7 +1332,17 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
Tooltip.prototype.enter = function (obj) {
var self = obj instanceof this.constructor ?
- obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
+ obj : $(obj.currentTarget).data('bs.' + this.type)
+
+ if (self && self.$tip && self.$tip.is(':visible')) {
+ self.hoverState = 'in'
+ return
+ }
+
+ if (!self) {
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+ $(obj.currentTarget).data('bs.' + this.type, self)
+ }
clearTimeout(self.timeout)
@@ -1132,7 +1357,12 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
Tooltip.prototype.leave = function (obj) {
var self = obj instanceof this.constructor ?
- obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
+ obj : $(obj.currentTarget).data('bs.' + this.type)
+
+ if (!self) {
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+ $(obj.currentTarget).data('bs.' + this.type, self)
+ }
clearTimeout(self.timeout)
@@ -1151,12 +1381,17 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
if (this.hasContent() && this.enabled) {
this.$element.trigger(e)
- if (e.isDefaultPrevented()) return
- var that = this;
+ var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
+ if (e.isDefaultPrevented() || !inDom) return
+ var that = this
var $tip = this.tip()
+ var tipId = this.getUID(this.type)
+
this.setContent()
+ $tip.attr('id', tipId)
+ this.$element.attr('aria-describedby', tipId)
if (this.options.animation) $tip.addClass('fade')
@@ -1172,6 +1407,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
.detach()
.css({ top: 0, left: 0, display: 'block' })
.addClass(placement)
+ .data('bs.' + this.type, this)
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
@@ -1180,18 +1416,14 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
var actualHeight = $tip[0].offsetHeight
if (autoPlace) {
- var $parent = this.$element.parent()
-
var orgPlacement = placement
- var docScroll = document.documentElement.scrollTop || document.body.scrollTop
- var parentWidth = this.options.container == 'body' ? window.innerWidth : $parent.outerWidth()
- var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()
- var parentLeft = this.options.container == 'body' ? 0 : $parent.offset().left
-
- placement = placement == 'bottom' && pos.top + pos.height + actualHeight - docScroll > parentHeight ? 'top' :
- placement == 'top' && pos.top - docScroll - actualHeight < 0 ? 'bottom' :
- placement == 'right' && pos.right + actualWidth > parentWidth ? 'left' :
- placement == 'left' && pos.left - actualWidth < parentLeft ? 'right' :
+ var $container = this.options.container ? $(this.options.container) : this.$element.parent()
+ var containerDim = this.getPosition($container)
+
+ placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top' :
+ placement == 'top' && pos.top - actualHeight < containerDim.top ? 'bottom' :
+ placement == 'right' && pos.right + actualWidth > containerDim.width ? 'left' :
+ placement == 'left' && pos.left - actualWidth < containerDim.left ? 'right' :
placement
$tip
@@ -1202,22 +1434,24 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
this.applyPlacement(calculatedOffset, placement)
- this.hoverState = null
- var complete = function() {
+ var complete = function () {
+ var prevHoverState = that.hoverState
that.$element.trigger('shown.bs.' + that.type)
+ that.hoverState = null
+
+ if (prevHoverState == 'out') that.leave(that)
}
$.support.transition && this.$tip.hasClass('fade') ?
$tip
- .one($.support.transition.end, complete)
- .emulateTransitionEnd(150) :
+ .one('bsTransitionEnd', complete)
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
complete()
}
}
Tooltip.prototype.applyPlacement = function (offset, placement) {
- var replace
var $tip = this.tip()
var width = $tip[0].offsetWidth
var height = $tip[0].offsetHeight
@@ -1251,33 +1485,26 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
var actualHeight = $tip[0].offsetHeight
if (placement == 'top' && actualHeight != height) {
- replace = true
offset.top = offset.top + height - actualHeight
}
- if (/bottom|top/.test(placement)) {
- var delta = 0
+ var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
- if (offset.left < 0) {
- delta = offset.left * -2
- offset.left = 0
+ if (delta.left) offset.left += delta.left
+ else offset.top += delta.top
- $tip.offset(offset)
+ var isVertical = /top|bottom/.test(placement)
+ var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
+ var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
- actualWidth = $tip[0].offsetWidth
- actualHeight = $tip[0].offsetHeight
- }
-
- this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
- } else {
- this.replaceArrow(actualHeight - height, actualHeight, 'top')
- }
-
- if (replace) $tip.offset(offset)
+ $tip.offset(offset)
+ this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
}
- Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
- this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')
+ Tooltip.prototype.replaceArrow = function (delta, dimension, isHorizontal) {
+ this.arrow()
+ .css(isHorizontal ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
+ .css(isHorizontal ? 'top' : 'left', '')
}
Tooltip.prototype.setContent = function () {
@@ -1288,14 +1515,17 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
$tip.removeClass('fade in top bottom left right')
}
- Tooltip.prototype.hide = function () {
+ Tooltip.prototype.hide = function (callback) {
var that = this
var $tip = this.tip()
var e = $.Event('hide.bs.' + this.type)
function complete() {
if (that.hoverState != 'in') $tip.detach()
- that.$element.trigger('hidden.bs.' + that.type)
+ that.$element
+ .removeAttr('aria-describedby')
+ .trigger('hidden.bs.' + that.type)
+ callback && callback()
}
this.$element.trigger(e)
@@ -1306,8 +1536,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
$.support.transition && this.$tip.hasClass('fade') ?
$tip
- .one($.support.transition.end, complete)
- .emulateTransitionEnd(150) :
+ .one('bsTransitionEnd', complete)
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
complete()
this.hoverState = null
@@ -1317,7 +1547,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
Tooltip.prototype.fixTitle = function () {
var $e = this.$element
- if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
+ if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {
$e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
}
}
@@ -1326,12 +1556,22 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
return this.getTitle()
}
- Tooltip.prototype.getPosition = function () {
- var el = this.$element[0]
- return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
- width: el.offsetWidth,
- height: el.offsetHeight
- }, this.$element.offset())
+ Tooltip.prototype.getPosition = function ($element) {
+ $element = $element || this.$element
+
+ var el = $element[0]
+ var isBody = el.tagName == 'BODY'
+
+ var elRect = el.getBoundingClientRect()
+ if (elRect.width == null) {
+ // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
+ elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
+ }
+ var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
+ var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
+ var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
+
+ return $.extend({}, elRect, scroll, outerDims, elOffset)
}
Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
@@ -1339,6 +1579,35 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
/* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
+
+ }
+
+ Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
+ var delta = { top: 0, left: 0 }
+ if (!this.$viewport) return delta
+
+ var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
+ var viewportDimensions = this.getPosition(this.$viewport)
+
+ if (/right|left/.test(placement)) {
+ var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
+ var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
+ if (topEdgeOffset < viewportDimensions.top) { // top overflow
+ delta.top = viewportDimensions.top - topEdgeOffset
+ } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
+ delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
+ }
+ } else {
+ var leftEdgeOffset = pos.left - viewportPadding
+ var rightEdgeOffset = pos.left + viewportPadding + actualWidth
+ if (leftEdgeOffset < viewportDimensions.left) { // left overflow
+ delta.left = viewportDimensions.left - leftEdgeOffset
+ } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
+ delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
+ }
+ }
+
+ return delta
}
Tooltip.prototype.getTitle = function () {
@@ -1352,20 +1621,18 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
return title
}
- Tooltip.prototype.tip = function () {
- return this.$tip = this.$tip || $(this.options.template)
+ Tooltip.prototype.getUID = function (prefix) {
+ do prefix += ~~(Math.random() * 1000000)
+ while (document.getElementById(prefix))
+ return prefix
}
- Tooltip.prototype.arrow = function () {
- return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')
+ Tooltip.prototype.tip = function () {
+ return (this.$tip = this.$tip || $(this.options.template))
}
- Tooltip.prototype.validate = function () {
- if (!this.$element[0].parentNode) {
- this.hide()
- this.$element = null
- this.options = null
- }
+ Tooltip.prototype.arrow = function () {
+ return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
}
Tooltip.prototype.enable = function () {
@@ -1381,33 +1648,51 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
}
Tooltip.prototype.toggle = function (e) {
- var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this
+ var self = this
+ if (e) {
+ self = $(e.currentTarget).data('bs.' + this.type)
+ if (!self) {
+ self = new this.constructor(e.currentTarget, this.getDelegateOptions())
+ $(e.currentTarget).data('bs.' + this.type, self)
+ }
+ }
+
self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
}
Tooltip.prototype.destroy = function () {
+ var that = this
clearTimeout(this.timeout)
- this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
+ this.hide(function () {
+ that.$element.off('.' + that.type).removeData('bs.' + that.type)
+ })
}
// TOOLTIP PLUGIN DEFINITION
// =========================
- var old = $.fn.tooltip
-
- $.fn.tooltip = function (option) {
+ function Plugin(option) {
return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.tooltip')
- var options = typeof option == 'object' && option
+ var $this = $(this)
+ var data = $this.data('bs.tooltip')
+ var options = typeof option == 'object' && option
+ var selector = options && options.selector
if (!data && option == 'destroy') return
- if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
+ if (selector) {
+ if (!data) $this.data('bs.tooltip', (data = {}))
+ if (!data[selector]) data[selector] = new Tooltip(this, options)
+ } else {
+ if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
+ }
if (typeof option == 'string') data[option]()
})
}
+ var old = $.fn.tooltip
+
+ $.fn.tooltip = Plugin
$.fn.tooltip.Constructor = Tooltip
@@ -1422,7 +1707,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
}(jQuery);
/* ========================================================================
- * Bootstrap: popover.js v3.1.1
+ * Bootstrap: popover.js v3.3.1
* http://getbootstrap.com/javascript/#popovers
* ========================================================================
* Copyright 2011-2014 Twitter, Inc.
@@ -1442,11 +1727,13 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
+ Popover.VERSION = '3.3.1'
+
Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
placement: 'right',
trigger: 'click',
content: '',
- template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
+ template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
})
@@ -1467,7 +1754,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
var content = this.getContent()
$tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
- $tip.find('.popover-content')[ // we use append for html objects to maintain js events
+ $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
](content)
@@ -1493,7 +1780,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
}
Popover.prototype.arrow = function () {
- return this.$arrow = this.$arrow || this.tip().find('.arrow')
+ return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
}
Popover.prototype.tip = function () {
@@ -1505,20 +1792,27 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
// POPOVER PLUGIN DEFINITION
// =========================
- var old = $.fn.popover
-
- $.fn.popover = function (option) {
+ function Plugin(option) {
return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.popover')
- var options = typeof option == 'object' && option
+ var $this = $(this)
+ var data = $this.data('bs.popover')
+ var options = typeof option == 'object' && option
+ var selector = options && options.selector
if (!data && option == 'destroy') return
- if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
+ if (selector) {
+ if (!data) $this.data('bs.popover', (data = {}))
+ if (!data[selector]) data[selector] = new Popover(this, options)
+ } else {
+ if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
+ }
if (typeof option == 'string') data[option]()
})
}
+ var old = $.fn.popover
+
+ $.fn.popover = Plugin
$.fn.popover.Constructor = Popover
@@ -1533,7 +1827,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
}(jQuery);
/* ========================================================================
- * Bootstrap: scrollspy.js v3.1.1
+ * Bootstrap: scrollspy.js v3.3.1
* http://getbootstrap.com/javascript/#scrollspy
* ========================================================================
* Copyright 2011-2014 Twitter, Inc.
@@ -1548,36 +1842,48 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
// ==========================
function ScrollSpy(element, options) {
- var href
var process = $.proxy(this.process, this)
- this.$element = $(element).is('body') ? $(window) : $(element)
this.$body = $('body')
- this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)
+ this.$scrollElement = $(element).is('body') ? $(window) : $(element)
this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
- this.selector = (this.options.target
- || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
- || '') + ' .nav li > a'
- this.offsets = $([])
- this.targets = $([])
+ this.selector = (this.options.target || '') + ' .nav li > a'
+ this.offsets = []
+ this.targets = []
this.activeTarget = null
+ this.scrollHeight = 0
+ this.$scrollElement.on('scroll.bs.scrollspy', process)
this.refresh()
this.process()
}
+ ScrollSpy.VERSION = '3.3.1'
+
ScrollSpy.DEFAULTS = {
offset: 10
}
+ ScrollSpy.prototype.getScrollHeight = function () {
+ return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
+ }
+
ScrollSpy.prototype.refresh = function () {
- var offsetMethod = this.$element[0] == window ? 'offset' : 'position'
+ var offsetMethod = 'offset'
+ var offsetBase = 0
+
+ if (!$.isWindow(this.$scrollElement[0])) {
+ offsetMethod = 'position'
+ offsetBase = this.$scrollElement.scrollTop()
+ }
- this.offsets = $([])
- this.targets = $([])
+ this.offsets = []
+ this.targets = []
+ this.scrollHeight = this.getScrollHeight()
var self = this
- var $targets = this.$body
+
+ this.$body
.find(this.selector)
.map(function () {
var $el = $(this)
@@ -1587,7 +1893,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
return ($href
&& $href.length
&& $href.is(':visible')
- && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null
+ && [[$href[offsetMethod]().top + offsetBase, href]]) || null
})
.sort(function (a, b) { return a[0] - b[0] })
.each(function () {
@@ -1598,35 +1904,38 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
ScrollSpy.prototype.process = function () {
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
- var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
- var maxScroll = scrollHeight - this.$scrollElement.height()
+ var scrollHeight = this.getScrollHeight()
+ var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
var offsets = this.offsets
var targets = this.targets
var activeTarget = this.activeTarget
var i
+ if (this.scrollHeight != scrollHeight) {
+ this.refresh()
+ }
+
if (scrollTop >= maxScroll) {
- return activeTarget != (i = targets.last()[0]) && this.activate(i)
+ return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
}
- if (activeTarget && scrollTop <= offsets[0]) {
- return activeTarget != (i = targets[0]) && this.activate(i)
+ if (activeTarget && scrollTop < offsets[0]) {
+ this.activeTarget = null
+ return this.clear()
}
for (i = offsets.length; i--;) {
activeTarget != targets[i]
&& scrollTop >= offsets[i]
&& (!offsets[i + 1] || scrollTop <= offsets[i + 1])
- && this.activate( targets[i] )
+ && this.activate(targets[i])
}
}
ScrollSpy.prototype.activate = function (target) {
this.activeTarget = target
- $(this.selector)
- .parentsUntil(this.options.target, '.active')
- .removeClass('active')
+ this.clear()
var selector = this.selector +
'[data-target="' + target + '"],' +
@@ -1645,13 +1954,17 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
active.trigger('activate.bs.scrollspy')
}
+ ScrollSpy.prototype.clear = function () {
+ $(this.selector)
+ .parentsUntil(this.options.target, '.active')
+ .removeClass('active')
+ }
+
// SCROLLSPY PLUGIN DEFINITION
// ===========================
- var old = $.fn.scrollspy
-
- $.fn.scrollspy = function (option) {
+ function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.scrollspy')
@@ -1662,6 +1975,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
})
}
+ var old = $.fn.scrollspy
+
+ $.fn.scrollspy = Plugin
$.fn.scrollspy.Constructor = ScrollSpy
@@ -1677,17 +1993,17 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
// SCROLLSPY DATA-API
// ==================
- $(window).on('load', function () {
+ $(window).on('load.bs.scrollspy.data-api', function () {
$('[data-spy="scroll"]').each(function () {
var $spy = $(this)
- $spy.scrollspy($spy.data())
+ Plugin.call($spy, $spy.data())
})
})
}(jQuery);
/* ========================================================================
- * Bootstrap: tab.js v3.1.1
+ * Bootstrap: tab.js v3.3.1
* http://getbootstrap.com/javascript/#tabs
* ========================================================================
* Copyright 2011-2014 Twitter, Inc.
@@ -1705,6 +2021,10 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
this.element = $(element)
}
+ Tab.VERSION = '3.3.1'
+
+ Tab.TRANSITION_DURATION = 150
+
Tab.prototype.show = function () {
var $this = this.element
var $ul = $this.closest('ul:not(.dropdown-menu)')
@@ -1712,27 +2032,35 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
if (!selector) {
selector = $this.attr('href')
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
}
if ($this.parent('li').hasClass('active')) return
- var previous = $ul.find('.active:last a')[0]
- var e = $.Event('show.bs.tab', {
- relatedTarget: previous
+ var $previous = $ul.find('.active:last a')
+ var hideEvent = $.Event('hide.bs.tab', {
+ relatedTarget: $this[0]
+ })
+ var showEvent = $.Event('show.bs.tab', {
+ relatedTarget: $previous[0]
})
- $this.trigger(e)
+ $previous.trigger(hideEvent)
+ $this.trigger(showEvent)
- if (e.isDefaultPrevented()) return
+ if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
var $target = $(selector)
- this.activate($this.parent('li'), $ul)
+ this.activate($this.closest('li'), $ul)
this.activate($target, $target.parent(), function () {
+ $previous.trigger({
+ type: 'hidden.bs.tab',
+ relatedTarget: $this[0]
+ })
$this.trigger({
type: 'shown.bs.tab',
- relatedTarget: previous
+ relatedTarget: $previous[0]
})
})
}
@@ -1741,15 +2069,21 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
var $active = container.find('> .active')
var transition = callback
&& $.support.transition
- && $active.hasClass('fade')
+ && (($active.length && $active.hasClass('fade')) || !!container.find('> .fade').length)
function next() {
$active
.removeClass('active')
.find('> .dropdown-menu > .active')
- .removeClass('active')
+ .removeClass('active')
+ .end()
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', false)
- element.addClass('active')
+ element
+ .addClass('active')
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', true)
if (transition) {
element[0].offsetWidth // reflow for transition
@@ -1759,16 +2093,21 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
}
if (element.parent('.dropdown-menu')) {
- element.closest('li.dropdown').addClass('active')
+ element
+ .closest('li.dropdown')
+ .addClass('active')
+ .end()
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', true)
}
callback && callback()
}
- transition ?
+ $active.length && transition ?
$active
- .one($.support.transition.end, next)
- .emulateTransitionEnd(150) :
+ .one('bsTransitionEnd', next)
+ .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
next()
$active.removeClass('in')
@@ -1778,9 +2117,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
// TAB PLUGIN DEFINITION
// =====================
- var old = $.fn.tab
-
- $.fn.tab = function ( option ) {
+ function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.tab')
@@ -1790,6 +2127,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
})
}
+ var old = $.fn.tab
+
+ $.fn.tab = Plugin
$.fn.tab.Constructor = Tab
@@ -1805,15 +2145,19 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
// TAB DATA-API
// ============
- $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
+ var clickHandler = function (e) {
e.preventDefault()
- $(this).tab('show')
- })
+ Plugin.call($(this), 'show')
+ }
+
+ $(document)
+ .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
+ .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
}(jQuery);
/* ========================================================================
- * Bootstrap: affix.js v3.1.1
+ * Bootstrap: affix.js v3.3.1
* http://getbootstrap.com/javascript/#affix
* ========================================================================
* Copyright 2011-2014 Twitter, Inc.
@@ -1829,7 +2173,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
var Affix = function (element, options) {
this.options = $.extend({}, Affix.DEFAULTS, options)
- this.$window = $(window)
+
+ this.$target = $(this.options.target)
.on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
.on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
@@ -1841,16 +2186,41 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
this.checkPosition()
}
- Affix.RESET = 'affix affix-top affix-bottom'
+ Affix.VERSION = '3.3.1'
+
+ Affix.RESET = 'affix affix-top affix-bottom'
Affix.DEFAULTS = {
- offset: 0
+ offset: 0,
+ target: window
+ }
+
+ Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
+ var scrollTop = this.$target.scrollTop()
+ var position = this.$element.offset()
+ var targetHeight = this.$target.height()
+
+ if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
+
+ if (this.affixed == 'bottom') {
+ if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
+ return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
+ }
+
+ var initializing = this.affixed == null
+ var colliderTop = initializing ? scrollTop : position.top
+ var colliderHeight = initializing ? targetHeight : height
+
+ if (offsetTop != null && colliderTop <= offsetTop) return 'top'
+ if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
+
+ return false
}
Affix.prototype.getPinnedOffset = function () {
if (this.pinnedOffset) return this.pinnedOffset
this.$element.removeClass(Affix.RESET).addClass('affix')
- var scrollTop = this.$window.scrollTop()
+ var scrollTop = this.$target.scrollTop()
var position = this.$element.offset()
return (this.pinnedOffset = position.top - scrollTop)
}
@@ -1862,43 +2232,41 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
Affix.prototype.checkPosition = function () {
if (!this.$element.is(':visible')) return
- var scrollHeight = $(document).height()
- var scrollTop = this.$window.scrollTop()
- var position = this.$element.offset()
+ var height = this.$element.height()
var offset = this.options.offset
var offsetTop = offset.top
var offsetBottom = offset.bottom
-
- if (this.affixed == 'top') position.top += scrollTop
+ var scrollHeight = $('body').height()
if (typeof offset != 'object') offsetBottom = offsetTop = offset
if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
- var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false :
- offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :
- offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
+ var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
- if (this.affixed === affix) return
- if (this.unpin) this.$element.css('top', '')
+ if (this.affixed != affix) {
+ if (this.unpin != null) this.$element.css('top', '')
- var affixType = 'affix' + (affix ? '-' + affix : '')
- var e = $.Event(affixType + '.bs.affix')
+ var affixType = 'affix' + (affix ? '-' + affix : '')
+ var e = $.Event(affixType + '.bs.affix')
- this.$element.trigger(e)
+ this.$element.trigger(e)
- if (e.isDefaultPrevented()) return
+ if (e.isDefaultPrevented()) return
- this.affixed = affix
- this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
+ this.affixed = affix
+ this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
- this.$element
- .removeClass(Affix.RESET)
- .addClass(affixType)
- .trigger($.Event(affixType.replace('affix', 'affixed')))
+ this.$element
+ .removeClass(Affix.RESET)
+ .addClass(affixType)
+ .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
+ }
if (affix == 'bottom') {
- this.$element.offset({ top: scrollHeight - offsetBottom - this.$element.height() })
+ this.$element.offset({
+ top: scrollHeight - height - offsetBottom
+ })
}
}
@@ -1906,9 +2274,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
// AFFIX PLUGIN DEFINITION
// =======================
- var old = $.fn.affix
-
- $.fn.affix = function (option) {
+ function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.affix')
@@ -1919,6 +2285,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
})
}
+ var old = $.fn.affix
+
+ $.fn.affix = Plugin
$.fn.affix.Constructor = Affix
@@ -1941,10 +2310,10 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
data.offset = data.offset || {}
- if (data.offsetBottom) data.offset.bottom = data.offsetBottom
- if (data.offsetTop) data.offset.top = data.offsetTop
+ if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
+ if (data.offsetTop != null) data.offset.top = data.offsetTop
- $spy.affix(data)
+ Plugin.call($spy, data)
})
})
diff --git a/library/bootstrap/js/bootstrap.min.js b/library/bootstrap/js/bootstrap.min.js
index b04a0e82f..d83986590 100644
--- a/library/bootstrap/js/bootstrap.min.js
+++ b/library/bootstrap/js/bootstrap.min.js
@@ -1,6 +1,7 @@
/*!
- * Bootstrap v3.1.1 (http://getbootstrap.com)
+ * Bootstrap v3.3.1 (http://getbootstrap.com)
* Copyright 2011-2014 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
-if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.isLoading=!1};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",f.resetText||d.data("resetText",d[e]()),d[e](f[b]||this.options[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},b.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});return this.$element.trigger(j),j.isDefaultPrevented()?void 0:(this.sliding=!0,f&&this.pause(),this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")),f&&this.cycle(),this)};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("collapse in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);!e&&f.toggle&&"show"==c&&(c=!c),e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery),+function(a){"use strict";function b(b){a(d).remove(),a(e).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;f.toggleClass("open").trigger("shown.bs.dropdown",h),e.focus()}return!1}},f.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var f=c(d),g=f.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&f.find(e).focus(),d.click();var h=" li:not(.divider):visible a",i=f.find("[role=menu]"+h+", [role=listbox]"+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).focus()}}}};var g=a.fn.dropdown;a.fn.dropdown=function(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new f(this)),"string"==typeof b&&d[b].call(c)})},a.fn.dropdown.Constructor=f,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=g,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",e,f.prototype.toggle).on("keydown.bs.dropdown.data-api",e+", [role=menu], [role=listbox]",f.prototype.keydown)}(jQuery),+function(a){"use strict";var b=function(b,c){this.options=c,this.$element=a(b),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};b.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},b.prototype.toggle=function(a){return this[this.isShown?"hide":"show"](a)},b.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(document.body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one(a.support.transition.end,function(){c.$element.focus().trigger(e)}).emulateTransitionEnd(300):c.$element.focus().trigger(e)}))},b.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one(a.support.transition.end,a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},b.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.focus()},this))},b.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},b.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.removeBackdrop(),a.$element.trigger("hidden.bs.modal")})},b.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},b.prototype.backdrop=function(b){var c=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var d=a.support.transition&&c;if(this.$backdrop=a('<div class="modal-backdrop '+c+'" />').appendTo(document.body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),d&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;d?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()):b&&b()};var c=a.fn.modal;a.fn.modal=function(c,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},b.DEFAULTS,e.data(),"object"==typeof c&&c);f||e.data("bs.modal",f=new b(this,g)),"string"==typeof c?f[c](d):g.show&&f.show(d)})},a.fn.modal.Constructor=b,a.fn.modal.noConflict=function(){return a.fn.modal=c,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());c.is("a")&&b.preventDefault(),e.modal(f,this).one("hide",function(){c.is(":visible")&&c.focus()})}),a(document).on("show.bs.modal",".modal",function(){a(document.body).addClass("modal-open")}).on("hidden.bs.modal",".modal",function(){a(document.body).removeClass("modal-open")})}(jQuery),+function(a){"use strict";var b=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};b.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},b.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},b.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},b.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},b.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},b.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){if(this.$element.trigger(b),b.isDefaultPrevented())return;var c=this,d=this.tip();this.setContent(),this.options.animation&&d.addClass("fade");var e="function"==typeof this.options.placement?this.options.placement.call(this,d[0],this.$element[0]):this.options.placement,f=/\s?auto?\s?/i,g=f.test(e);g&&(e=e.replace(f,"")||"top"),d.detach().css({top:0,left:0,display:"block"}).addClass(e),this.options.container?d.appendTo(this.options.container):d.insertAfter(this.$element);var h=this.getPosition(),i=d[0].offsetWidth,j=d[0].offsetHeight;if(g){var k=this.$element.parent(),l=e,m=document.documentElement.scrollTop||document.body.scrollTop,n="body"==this.options.container?window.innerWidth:k.outerWidth(),o="body"==this.options.container?window.innerHeight:k.outerHeight(),p="body"==this.options.container?0:k.offset().left;e="bottom"==e&&h.top+h.height+j-m>o?"top":"top"==e&&h.top-m-j<0?"bottom":"right"==e&&h.right+i>n?"left":"left"==e&&h.left-i<p?"right":e,d.removeClass(l).addClass(e)}var q=this.getCalculatedOffset(e,h,i,j);this.applyPlacement(q,e),this.hoverState=null;var r=function(){c.$element.trigger("shown.bs."+c.type)};a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,r).emulateTransitionEnd(150):r()}},b.prototype.applyPlacement=function(b,c){var d,e=this.tip(),f=e[0].offsetWidth,g=e[0].offsetHeight,h=parseInt(e.css("margin-top"),10),i=parseInt(e.css("margin-left"),10);isNaN(h)&&(h=0),isNaN(i)&&(i=0),b.top=b.top+h,b.left=b.left+i,a.offset.setOffset(e[0],a.extend({using:function(a){e.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),e.addClass("in");var j=e[0].offsetWidth,k=e[0].offsetHeight;if("top"==c&&k!=g&&(d=!0,b.top=b.top+g-k),/bottom|top/.test(c)){var l=0;b.left<0&&(l=-2*b.left,b.left=0,e.offset(b),j=e[0].offsetWidth,k=e[0].offsetHeight),this.replaceArrow(l-f+j,j,"left")}else this.replaceArrow(k-g,k,"top");d&&e.offset(b)},b.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},b.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},b.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},b.prototype.hasContent=function(){return this.getTitle()},b.prototype.getPosition=function(){var b=this.$element[0];return a.extend({},"function"==typeof b.getBoundingClientRect?b.getBoundingClientRect():{width:b.offsetWidth,height:b.offsetHeight},this.$element.offset())},b.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},b.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},b.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},b.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},b.prototype.enable=function(){this.enabled=!0},b.prototype.disable=function(){this.enabled=!1},b.prototype.toggleEnabled=function(){this.enabled=!this.enabled},b.prototype.toggle=function(b){var c=b?a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;c.tip().hasClass("in")?c.leave(c):c.enter(c)},b.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var c=a.fn.tooltip;a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof c&&c;(e||"destroy"!=c)&&(e||d.data("bs.tooltip",e=new b(this,f)),"string"==typeof c&&e[c]())})},a.fn.tooltip.Constructor=b,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=c,this}}(jQuery),+function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");b.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;(e||"destroy"!=c)&&(e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]())})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(a(c).is("body")?window:c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);{var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})}},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(b.RESET).addClass("affix");var a=this.$window.scrollTop(),c=this.$element.offset();return this.pinnedOffset=c.top-a},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"top"==this.affixed&&(e.top+=d),"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(b.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:c-h-this.$element.height()}))}}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery); \ No newline at end of file
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.1",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.1",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.1",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c="prev"==a?-1:1,d=this.getItemIndex(b),e=(d+c)%this.$items.length;return this.$items.eq(e)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i="next"==b?"first":"last",j=this;if(!f.length){if(!this.options.wrap)return;f=this.$element.find(".item")[i]()}if(f.hasClass("active"))return this.sliding=!1;var k=f[0],l=a.Event("slide.bs.carousel",{relatedTarget:k,direction:h});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var m=a(this.$indicators.children()[this.getItemIndex(f)]);m&&m.addClass("active")}var n=a.Event("slid.bs.carousel",{relatedTarget:k,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),j.sliding=!1,setTimeout(function(){j.$element.trigger(n)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(n)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a(this.options.trigger).filter('[href="#'+b.id+'"], [data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.1",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0,trigger:'[data-toggle="collapse"]'},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.find("> .panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":a.extend({},e.data(),{trigger:this});c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.1",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)&&!/input|textarea/i.test(b.target.tagName)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.1",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.options.backdrop&&d.adjustBackdrop(),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$element.find(".modal-dialog").one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('<div class="modal-backdrop '+e+'" />').prependTo(this.$element).on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.options.backdrop&&this.adjustBackdrop(),this.adjustDialog()},c.prototype.adjustBackdrop=function(){this.$backdrop.css("height",0).css("height",this.$element[0].scrollHeight)},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){this.bodyIsOverflowing=document.body.scrollHeight>document.documentElement.clientHeight,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b,g=f&&f.selector;(e||"destroy"!=b)&&(g?(e||d.data("bs.tooltip",e={}),e[g]||(e[g]=new c(this,f))):e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.1",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-m<p.top?"bottom":"right"==h&&k.right+l>p.width?"left":"left"==h&&k.left-l<p.left?"right":h,f.removeClass(n).addClass(h)}var q=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(q,h);var r=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",r).emulateTransitionEnd(c.TRANSITION_DURATION):r()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=this.tip(),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b,g=f&&f.selector;(e||"destroy"!=b)&&(g?(e||d.data("bs.popover",e={}),e[g]||(e[g]=new c(this,f))):e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.1",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.1",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.1",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})
+})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.1",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=i?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a("body").height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file
diff --git a/library/cacert.pem b/library/cacert.pem
index 67f696abc..633005921 100644
--- a/library/cacert.pem
+++ b/library/cacert.pem
@@ -1,18 +1,21 @@
##
-## ca-bundle.crt -- Bundle of CA Root Certificates
+## Bundle of CA Root Certificates
##
-## Certificate data from Mozilla as of: Tue Jan 28 09:38:07 2014
+## Certificate data from Mozilla downloaded on: Wed Sep 3 03:12:03 2014
##
## This is a bundle of X.509 certificates of public Certificate Authorities
## (CA). These were automatically extracted from Mozilla's root certificates
## file (certdata.txt). This file can be found in the mozilla source tree:
-## http://mxr.mozilla.org/mozilla-release/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1
+## http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
##
## It contains the certificates in PEM format and therefore
## can be directly used with curl / libcurl / php_curl, or with
## an Apache+mod_ssl webserver for SSL client authentication.
## Just configure this file as the SSLCACertificateFile.
##
+## Conversion done with mk-ca-bundle.pl verison 1.22.
+## SHA1: c4540021427a6fa29e5f50db9f12d48c97d33889
+##
GTE CyberTrust Global Root
@@ -90,22 +93,6 @@ BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
70+sB3c4
-----END CERTIFICATE-----
-Verisign Class 3 Public Primary Certification Authority
-=======================================================
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
-FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
-XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
-IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
-f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
-hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
-TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
-WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
-Tqj/ZA1k
------END CERTIFICATE-----
-
Verisign Class 3 Public Primary Certification Authority - G2
============================================================
-----BEGIN CERTIFICATE-----
@@ -168,63 +155,6 @@ BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
-----END CERTIFICATE-----
-ValiCert Class 1 VA
-===================
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
-b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
-bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
-MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
-d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
-UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
-LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
-GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
-DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
-lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
-icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
-Orf1LXLI
------END CERTIFICATE-----
-
-ValiCert Class 2 VA
-===================
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
-b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
-bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
-MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
-d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
-UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
-LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
-CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
-ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
-SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
-UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
-W9ViH0Pd
------END CERTIFICATE-----
-
-RSA Root Certificate 1
-======================
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
-b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
-bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
-MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
-d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
-UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
-LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
-3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
-BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
-3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
-V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
-on+jjBXu
------END CERTIFICATE-----
-
Verisign Class 3 Public Primary Certification Authority - G3
============================================================
-----BEGIN CERTIFICATE-----
@@ -273,33 +203,6 @@ RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
-----END CERTIFICATE-----
-Entrust.net Secure Server CA
-============================
------BEGIN CERTIFICATE-----
-MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
-BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
-cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
-ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
-A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
-eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
-dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
-aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
-gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
-ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
-CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
-dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
-bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
-dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
-NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
-HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
-BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
-Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
-n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
------END CERTIFICATE-----
-
Entrust.net Premium 2048 Secure Server CA
=========================================
-----BEGIN CERTIFICATE-----
@@ -953,30 +856,6 @@ nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
-----END CERTIFICATE-----
-TDC Internet Root CA
-====================
------BEGIN CERTIFICATE-----
-MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE
-ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx
-NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu
-ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j
-xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL
-znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc
-5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6
-otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI
-AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM
-VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM
-MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC
-AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe
-UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G
-CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m
-gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
-2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb
-O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU
-Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
------END CERTIFICATE-----
-
UTN DATACorp SGC Root CA
========================
-----BEGIN CERTIFICATE-----
@@ -1117,64 +996,6 @@ KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
8CgHrTwXZoi1/baI
-----END CERTIFICATE-----
-NetLock Business (Class B) Root
-===============================
------BEGIN CERTIFICATE-----
-MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
-CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
-BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg
-VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD
-VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv
-bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg
-VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
-iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S
-o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr
-1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
-HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ
-RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh
-dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0
-ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv
-c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg
-YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
-c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz
-Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA
-bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl
-IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2
-YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj
-cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM
-43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR
-stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI
------END CERTIFICATE-----
-
-NetLock Express (Class C) Root
-==============================
------BEGIN CERTIFICATE-----
-MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT
-CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
-BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD
-KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ
-BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
-dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j
-ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB
-jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z
-W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63
-euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw
-DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN
-RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn
-YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB
-IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i
-aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0
-ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
-ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo
-dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y
-emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k
-IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ
-UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg
-YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2
-xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW
-gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A==
------END CERTIFICATE-----
-
XRamp Global CA Root
====================
-----BEGIN CERTIFICATE-----
@@ -1318,31 +1139,6 @@ CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
-----END CERTIFICATE-----
-Firmaprofesional Root CA
-========================
------BEGIN CERTIFICATE-----
-MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT
-GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp
-Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA
-ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL
-MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT
-OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2
-ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V
-j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH
-lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf
-3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8
-NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww
-KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG
-AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud
-DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD
-ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
-u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf
-wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm
-7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG
-VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA=
------END CERTIFICATE-----
-
Swisscom Root CA 1
==================
-----BEGIN CERTIFICATE-----
@@ -1954,40 +1750,6 @@ PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
-----END CERTIFICATE-----
-AC Ra\xC3\xADz Certic\xC3\xA1mara S.A.
-======================================
------BEGIN CERTIFICATE-----
-MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT
-AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg
-LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w
-HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+
-U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh
-IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B
-AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN
-yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU
-2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3
-4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP
-2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm
-8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf
-HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa
-Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK
-5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b
-czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g
-ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF
-BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug
-cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf
-AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX
-EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v
-/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3
-MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4
-3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk
-eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f
-/RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h
-RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU
-Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ==
------END CERTIFICATE-----
-
TC TrustCenter Class 2 CA II
============================
-----BEGIN CERTIFICATE-----
@@ -2635,22 +2397,6 @@ MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o
tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA==
-----END CERTIFICATE-----
-Verisign Class 3 Public Primary Certification Authority
-=======================================================
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
-FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
-XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
-IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
-f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
-hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky
-CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX
-bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/
-D/xwzoiQ
------END CERTIFICATE-----
-
Microsec e-Szigno Root CA 2009
==============================
-----BEGIN CERTIFICATE-----
@@ -3783,3 +3529,458 @@ i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8
EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3
zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0=
-----END CERTIFICATE-----
+
+TeliaSonera Root CA v1
+======================
+-----BEGIN CERTIFICATE-----
+MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE
+CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4
+MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW
+VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+
+6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA
+3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k
+B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn
+Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH
+oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3
+F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ
+oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7
+gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc
+TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB
+AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW
+DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm
+zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx
+0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW
+pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV
+G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc
+c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT
+JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2
+qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6
+Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems
+WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=
+-----END CERTIFICATE-----
+
+E-Tugra Certification Authority
+===============================
+-----BEGIN CERTIFICATE-----
+MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w
+DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls
+ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN
+ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw
+NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx
+QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl
+cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD
+DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
+MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd
+hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K
+CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g
+ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ
+BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0
+E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz
+rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq
+jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn
+rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5
+dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB
+/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG
+MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK
+kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO
+XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807
+VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo
+a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc
+dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV
+KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT
+Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0
+8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G
+C7TbO6Orb1wdtn7os4I07QZcJA==
+-----END CERTIFICATE-----
+
+T-TeleSec GlobalRoot Class 2
+============================
+-----BEGIN CERTIFICATE-----
+MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
+IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
+cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx
+MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
+dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
+ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ
+SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F
+vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970
+2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV
+WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA
+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy
+YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4
+r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf
+vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR
+3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN
+9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg==
+-----END CERTIFICATE-----
+
+Atos TrustedRoot 2011
+=====================
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU
+cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4
+MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG
+A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV
+hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr
+54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+
+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320
+HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR
+z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R
+l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ
+bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
+CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h
+k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh
+TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9
+61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G
+3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed
+-----END CERTIFICATE-----
+
+QuoVadis Root CA 1 G3
+=====================
+-----BEGIN CERTIFICATE-----
+MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG
+A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv
+b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN
+MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg
+RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE
+PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm
+PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6
+Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN
+ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l
+g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV
+7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX
+9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f
+iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg
+t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
+AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI
+hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC
+MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3
+GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct
+Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP
++V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh
+3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa
+wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6
+O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0
+FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV
+hMJKzRwuJIczYOXD
+-----END CERTIFICATE-----
+
+QuoVadis Root CA 2 G3
+=====================
+-----BEGIN CERTIFICATE-----
+MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG
+A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv
+b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN
+MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg
+RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh
+ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY
+NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t
+oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o
+MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l
+V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo
+L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ
+sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD
+6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh
+lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
+AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI
+hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66
+AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K
+pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9
+x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz
+dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X
+U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw
+mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD
+zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN
+JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr
+O3jtZsSOeWmD3n+M
+-----END CERTIFICATE-----
+
+QuoVadis Root CA 3 G3
+=====================
+-----BEGIN CERTIFICATE-----
+MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG
+A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv
+b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN
+MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg
+RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286
+IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL
+Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe
+6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3
+I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U
+VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7
+5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi
+Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM
+dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt
+rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
+AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI
+hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px
+KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS
+t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ
+TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du
+DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib
+Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD
+hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX
+0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW
+dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2
+PpxxVJkES/1Y+Zj0
+-----END CERTIFICATE-----
+
+DigiCert Assured ID Root G2
+===========================
+-----BEGIN CERTIFICATE-----
+MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
+IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw
+MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
+ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH
+35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq
+bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw
+VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP
+YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn
+lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO
+w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv
+0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz
+d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW
+hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M
+jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo
+IhNzbM8m9Yop5w==
+-----END CERTIFICATE-----
+
+DigiCert Assured ID Root G3
+===========================
+-----BEGIN CERTIFICATE-----
+MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV
+UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD
+VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1
+MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ
+BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb
+RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs
+KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF
+UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy
+YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy
+1vUhZscv6pZjamVFkpUBtA==
+-----END CERTIFICATE-----
+
+DigiCert Global Root G2
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
+HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx
+MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
+dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq
+hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ
+kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO
+3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV
+BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM
+UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB
+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu
+5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr
+F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U
+WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH
+QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/
+iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl
+MrY=
+-----END CERTIFICATE-----
+
+DigiCert Global Root G3
+=======================
+-----BEGIN CERTIFICATE-----
+MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV
+UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD
+VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw
+MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k
+aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C
+AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O
+YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP
+BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp
+Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y
+3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34
+VOKa5Vt8sycX
+-----END CERTIFICATE-----
+
+DigiCert Trusted Root G4
+========================
+-----BEGIN CERTIFICATE-----
+MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw
+HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1
+MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G
+CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp
+pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o
+k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa
+vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY
+QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6
+MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm
+mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7
+f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH
+dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8
+oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud
+DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD
+ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY
+ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr
+yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy
+7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah
+ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN
+5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb
+/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa
+5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK
+G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP
+82Z+
+-----END CERTIFICATE-----
+
+WoSign
+======
+-----BEGIN CERTIFICATE-----
+MIIFdjCCA16gAwIBAgIQXmjWEXGUY1BWAGjzPsnFkTANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQG
+EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxKjAoBgNVBAMTIUNlcnRpZmljYXRpb24g
+QXV0aG9yaXR5IG9mIFdvU2lnbjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMFUxCzAJ
+BgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEqMCgGA1UEAxMhQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkgb2YgV29TaWduMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
+vcqNrLiRFVaXe2tcesLea9mhsMMQI/qnobLMMfo+2aYpbxY94Gv4uEBf2zmoAHqLoE1UfcIiePyO
+CbiohdfMlZdLdNiefvAA5A6JrkkoRBoQmTIPJYhTpA2zDxIIFgsDcSccf+Hb0v1naMQFXQoOXXDX
+2JegvFNBmpGN9J42Znp+VsGQX+axaCA2pIwkLCxHC1l2ZjC1vt7tj/id07sBMOby8w7gLJKA84X5
+KIq0VC6a7fd2/BVoFutKbOsuEo/Uz/4Mx1wdC34FMr5esAkqQtXJTpCzWQ27en7N1QhatH/YHGkR
++ScPewavVIMYe+HdVHpRaG53/Ma/UkpmRqGyZxq7o093oL5d//xWC0Nyd5DKnvnyOfUNqfTq1+ez
+EC8wQjchzDBwyYaYD8xYTYO7feUapTeNtqwylwA6Y3EkHp43xP901DfA4v6IRmAR3Qg/UDaruHqk
+lWJqbrDKaiFaafPz+x1wOZXzp26mgYmhiMU7ccqjUu6Du/2gd/Tkb+dC221KmYo0SLwX3OSACCK2
+8jHAPwQ+658geda4BmRkAjHXqc1S+4RFaQkAKtxVi8QGRkvASh0JWzko/amrzgD5LkhLJuYwTKVY
+yrREgk/nkR4zw7CT/xH8gdLKH3Ep3XZPkiWvHYG3Dy+MwwbMLyejSuQOmbp8HkUff6oZRZb9/D0C
+AwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOFmzw7R
+8bNLtwYgFP6HEtX2/vs+MA0GCSqGSIb3DQEBBQUAA4ICAQCoy3JAsnbBfnv8rWTjMnvMPLZdRtP1
+LOJwXcgu2AZ9mNELIaCJWSQBnfmvCX0KI4I01fx8cpm5o9dU9OpScA7F9dY74ToJMuYhOZO9sxXq
+T2r09Ys/L3yNWC7F4TmgPsc9SnOeQHrAK2GpZ8nzJLmzbVUsWh2eJXLOC62qx1ViC777Y7NhRCOj
+y+EaDveaBk3e1CNOIZZbOVtXHS9dCF4Jef98l7VNg64N1uajeeAz0JmWAjCnPv/So0M/BVoG6kQC
+2nz4SNAzqfkHx5Xh9T71XXG68pWpdIhhWeO/yloTunK0jF02h+mmxTwTv97QRCbut+wucPrXnbes
+5cVAWubXbHssw1abR80LzvobtCHXt2a49CUwi1wNuepnsvRtrtWhnk/Yn+knArAdBtaP4/tIEp9/
+EaEQPkxROpaw0RPxx9gmrjrKkcRpnd8BKWRRb2jaFOwIQZeQjdCygPLPwj2/kWjFgGcexGATVdVh
+mVd8upUPYUk6ynW8yQqTP2cOEvIo4jEbwFcW3wh8GcF+Dx+FHgo2fFt+J7x6v+Db9NpSvd4MVHAx
+kUOVyLzwPt0JfjBkUO1/AaQzZ01oT74V77D2AhGiGxMlOtzCWfHjXEa7ZywCRuoeSKbmW9m1vFGi
+kpbbqsY3Iqb+zCB0oy2pLmvLwIIRIbWTee5Ehr7XHuQe+w==
+-----END CERTIFICATE-----
+
+WoSign China
+============
+-----BEGIN CERTIFICATE-----
+MIIFWDCCA0CgAwIBAgIQUHBrzdgT/BtOOzNy0hFIjTANBgkqhkiG9w0BAQsFADBGMQswCQYDVQQG
+EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMMEkNBIOayg+mAmuagueiv
+geS5pjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMEYxCzAJBgNVBAYTAkNOMRowGAYD
+VQQKExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAwwSQ0Eg5rKD6YCa5qC56K+B5LmmMIICIjAN
+BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0EkhHiX8h8EqwqzbdoYGTufQdDTc7WU1/FDWiD+k
+8H/rD195L4mx/bxjWDeTmzj4t1up+thxx7S8gJeNbEvxUNUqKaqoGXqW5pWOdO2XCld19AXbbQs5
+uQF/qvbW2mzmBeCkTVL829B0txGMe41P/4eDrv8FAxNXUDf+jJZSEExfv5RxadmWPgxDT74wwJ85
+dE8GRV2j1lY5aAfMh09Qd5Nx2UQIsYo06Yms25tO4dnkUkWMLhQfkWsZHWgpLFbE4h4TV2TwYeO5
+Ed+w4VegG63XX9Gv2ystP9Bojg/qnw+LNVgbExz03jWhCl3W6t8Sb8D7aQdGctyB9gQjF+BNdeFy
+b7Ao65vh4YOhn0pdr8yb+gIgthhid5E7o9Vlrdx8kHccREGkSovrlXLp9glk3Kgtn3R46MGiCWOc
+76DbT52VqyBPt7D3h1ymoOQ3OMdc4zUPLK2jgKLsLl3Az+2LBcLmc272idX10kaO6m1jGx6KyX2m
++Jzr5dVjhU1zZmkR/sgO9MHHZklTfuQZa/HpelmjbX7FF+Ynxu8b22/8DU0GAbQOXDBGVWCvOGU6
+yke6rCzMRh+yRpY/8+0mBe53oWprfi1tWFxK1I5nuPHa1UaKJ/kR8slC/k7e3x9cxKSGhxYzoacX
+GKUN5AXlK8IrC6KVkLn9YDxOiT7nnO4fuwECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
+EwEB/wQFMAMBAf8wHQYDVR0OBBYEFOBNv9ybQV0T6GTwp+kVpOGBwboxMA0GCSqGSIb3DQEBCwUA
+A4ICAQBqinA4WbbaixjIvirTthnVZil6Xc1bL3McJk6jfW+rtylNpumlEYOnOXOvEESS5iVdT2H6
+yAa+Tkvv/vMx/sZ8cApBWNromUuWyXi8mHwCKe0JgOYKOoICKuLJL8hWGSbueBwj/feTZU7n85iY
+r83d2Z5AiDEoOqsuC7CsDCT6eiaY8xJhEPRdF/d+4niXVOKM6Cm6jBAyvd0zaziGfjk9DgNyp115
+j0WKWa5bIW4xRtVZjc8VX90xJc/bYNaBRHIpAlf2ltTW/+op2znFuCyKGo3Oy+dCMYYFaA6eFN0A
+kLppRQjbbpCBhqcqBT/mhDn4t/lXX0ykeVoQDF7Va/81XwVRHmyjdanPUIPTfPRm94KNPQx96N97
+qA4bLJyuQHCH2u2nFoJavjVsIE4iYdm8UXrNemHcSxH5/mc0zy4EZmFcV5cjjPOGG0jfKq+nwf/Y
+jj4Du9gqsPoUJbJRa4ZDhS4HIxaAjUz7tGM7zMN07RujHv41D198HRaG9Q7DlfEvr10lO1Hm13ZB
+ONFLAzkopR6RctR9q5czxNM+4Gm2KHmgCY0c0f9BckgG/Jou5yD5m6Leie2uPAmvylezkolwQOQv
+T8Jwg0DXJCxr5wkf09XHwQj02w47HAcLQxGEIYbpgNR12KvxAmLBsX5VYc8T1yaw15zLKYs4SgsO
+kI26oQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIGCDCCA/CgAwIBAgIQKy5u6tl1NmwUim7bo3yMBzANBgkqhkiG9w0BAQwFADCB
+hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV
+BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwMjEy
+MDAwMDAwWhcNMjkwMjExMjM1OTU5WjCBkDELMAkGA1UEBhMCR0IxGzAZBgNVBAgT
+EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
+Q09NT0RPIENBIExpbWl0ZWQxNjA0BgNVBAMTLUNPTU9ETyBSU0EgRG9tYWluIFZh
+bGlkYXRpb24gU2VjdXJlIFNlcnZlciBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAI7CAhnhoFmk6zg1jSz9AdDTScBkxwtiBUUWOqigwAwCfx3M28Sh
+bXcDow+G+eMGnD4LgYqbSRutA776S9uMIO3Vzl5ljj4Nr0zCsLdFXlIvNN5IJGS0
+Qa4Al/e+Z96e0HqnU4A7fK31llVvl0cKfIWLIpeNs4TgllfQcBhglo/uLQeTnaG6
+ytHNe+nEKpooIZFNb5JPJaXyejXdJtxGpdCsWTWM/06RQ1A/WZMebFEh7lgUq/51
+UHg+TLAchhP6a5i84DuUHoVS3AOTJBhuyydRReZw3iVDpA3hSqXttn7IzW3uLh0n
+c13cRTCAquOyQQuvvUSH2rnlG51/ruWFgqUCAwEAAaOCAWUwggFhMB8GA1UdIwQY
+MBaAFLuvfgI9+qbxPISOre44mOzZMjLUMB0GA1UdDgQWBBSQr2o6lFoL2JDqElZz
+30O0Oija5zAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNV
+HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGwYDVR0gBBQwEjAGBgRVHSAAMAgG
+BmeBDAECATBMBgNVHR8ERTBDMEGgP6A9hjtodHRwOi8vY3JsLmNvbW9kb2NhLmNv
+bS9DT01PRE9SU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDBxBggrBgEFBQcB
+AQRlMGMwOwYIKwYBBQUHMAKGL2h0dHA6Ly9jcnQuY29tb2RvY2EuY29tL0NPTU9E
+T1JTQUFkZFRydXN0Q0EuY3J0MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5jb21v
+ZG9jYS5jb20wDQYJKoZIhvcNAQEMBQADggIBAE4rdk+SHGI2ibp3wScF9BzWRJ2p
+mj6q1WZmAT7qSeaiNbz69t2Vjpk1mA42GHWx3d1Qcnyu3HeIzg/3kCDKo2cuH1Z/
+e+FE6kKVxF0NAVBGFfKBiVlsit2M8RKhjTpCipj4SzR7JzsItG8kO3KdY3RYPBps
+P0/HEZrIqPW1N+8QRcZs2eBelSaz662jue5/DJpmNXMyYE7l3YphLG5SEXdoltMY
+dVEVABt0iN3hxzgEQyjpFv3ZBdRdRydg1vs4O2xyopT4Qhrf7W8GjEXCBgCq5Ojc
+2bXhc3js9iPc0d1sjhqPpepUfJa3w/5Vjo1JXvxku88+vZbrac2/4EjxYoIQ5QxG
+V/Iz2tDIY+3GH5QFlkoakdH368+PUq4NCNk+qKBR6cGHdNXJ93SrLlP7u3r7l+L4
+HyaPs9Kg4DdbKDsx5Q5XLVq4rXmsXiBmGqW5prU5wfWYQ//u+aen/e7KJD2AFsQX
+j4rBYKEMrltDR5FL1ZoXX/nUh8HCjLfn4g8wGTeGrODcQgPmlKidrv0PJFGUzpII
+0fxQ8ANAe4hZ7Q7drNJ3gjTcBpUC2JD5Leo31Rpg0Gcg19hCC0Wvgmje3WYkN5Ap
+lBlGGSW4gNfL1IYoakRwJiNiqZ+Gb7+6kHDSVneFeO/qJakXzlByjAA6quPbYzSf
++AZxAeKCINT+b72x
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFdDCCBFygAwIBAgIQJ2buVutJ846r13Ci/ITeIjANBgkqhkiG9w0BAQwFADBv
+MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk
+ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF
+eHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFow
+gYUxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
+BgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMSswKQYD
+VQQDEyJDT01PRE8gUlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkq
+hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkehUktIKVrGsDSTdxc9EZ3SZKzejfSNw
+AHG8U9/E+ioSj0t/EFa9n3Byt2F/yUsPF6c947AEYe7/EZfH9IY+Cvo+XPmT5jR6
+2RRr55yzhaCCenavcZDX7P0N+pxs+t+wgvQUfvm+xKYvT3+Zf7X8Z0NyvQwA1onr
+ayzT7Y+YHBSrfuXjbvzYqOSSJNpDa2K4Vf3qwbxstovzDo2a5JtsaZn4eEgwRdWt
+4Q08RWD8MpZRJ7xnw8outmvqRsfHIKCxH2XeSAi6pE6p8oNGN4Tr6MyBSENnTnIq
+m1y9TBsoilwie7SrmNnu4FGDwwlGTm0+mfqVF9p8M1dBPI1R7Qu2XK8sYxrfV8g/
+vOldxJuvRZnio1oktLqpVj3Pb6r/SVi+8Kj/9Lit6Tf7urj0Czr56ENCHonYhMsT
+8dm74YlguIwoVqwUHZwK53Hrzw7dPamWoUi9PPevtQ0iTMARgexWO/bTouJbt7IE
+IlKVgJNp6I5MZfGRAy1wdALqi2cVKWlSArvX31BqVUa/oKMoYX9w0MOiqiwhqkfO
+KJwGRXa/ghgntNWutMtQ5mv0TIZxMOmm3xaG4Nj/QN370EKIf6MzOi5cHkERgWPO
+GHFrK+ymircxXDpqR+DDeVnWIBqv8mqYqnK8V0rSS527EPywTEHl7R09XiidnMy/
+s1Hap0flhFMCAwEAAaOB9DCB8TAfBgNVHSMEGDAWgBStvZh6NLQm9/rEJlTvA73g
+JMtUGjAdBgNVHQ4EFgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQD
+AgGGMA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0gBAowCDAGBgRVHSAAMEQGA1UdHwQ9
+MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9BZGRUcnVzdEV4dGVy
+bmFsQ0FSb290LmNybDA1BggrBgEFBQcBAQQpMCcwJQYIKwYBBQUHMAGGGWh0dHA6
+Ly9vY3NwLnVzZXJ0cnVzdC5jb20wDQYJKoZIhvcNAQEMBQADggEBAGS/g/FfmoXQ
+zbihKVcN6Fr30ek+8nYEbvFScLsePP9NDXRqzIGCJdPDoCpdTPW6i6FtxFQJdcfj
+Jw5dhHk3QBN39bSsHNA7qxcS1u80GH4r6XnTq1dFDK8o+tDb5VCViLvfhVdpfZLY
+Uspzgb8c8+a4bmYRBbMelC1/kZWSWfFMzqORcUx8Rww7Cxn2obFshj5cqsQugsv5
+B5a6SE2Q8pTIqXOi6wZ7I53eovNNVZ96YUWYGGjHXkBrI/V5eu+MtWuLt29G9Hvx
+PUsE2JOAWVrgQSQdso8VYFhH2+9uRv0V9dlfmrPb2LjkQLPNlzmuhbsdjrzch5vR
+pu/xO28QOG8=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
+IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
+MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
+FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
+bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
+H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
+uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
+mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
+a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
+E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
+WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
+VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
+Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
+cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
+IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
+AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
+YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
+6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
+Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
+c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
+mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
+-----END CERTIFICATE-----
diff --git a/library/certs/README.md b/library/certs/README.md
new file mode 100644
index 000000000..9a2ca7eca
--- /dev/null
+++ b/library/certs/README.md
@@ -0,0 +1 @@
+This directory contains *browser valid* certs for use with redmatrix when using curl (server to server communication). The cacert.pem file in this directory is downloaded (when necessary) from the curl repository and tracks the Mozilla built-in certs. Additionally we've discovered we occasionally require intermediate certs from some cert providers which Mozilla and other browsers obtain automatically but curl does not. You may add these here if required. All these files are concatenated to create the library/cacert.pem file which we will use. \ No newline at end of file
diff --git a/library/certs/cacert.pem b/library/certs/cacert.pem
new file mode 100644
index 000000000..fa9df81f7
--- /dev/null
+++ b/library/certs/cacert.pem
@@ -0,0 +1,3894 @@
+##
+## Bundle of CA Root Certificates
+##
+## Certificate data from Mozilla downloaded on: Wed Sep 3 03:12:03 2014
+##
+## This is a bundle of X.509 certificates of public Certificate Authorities
+## (CA). These were automatically extracted from Mozilla's root certificates
+## file (certdata.txt). This file can be found in the mozilla source tree:
+## http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
+##
+## It contains the certificates in PEM format and therefore
+## can be directly used with curl / libcurl / php_curl, or with
+## an Apache+mod_ssl webserver for SSL client authentication.
+## Just configure this file as the SSLCACertificateFile.
+##
+## Conversion done with mk-ca-bundle.pl verison 1.22.
+## SHA1: c4540021427a6fa29e5f50db9f12d48c97d33889
+##
+
+
+GTE CyberTrust Global Root
+==========================
+-----BEGIN CERTIFICATE-----
+MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
+Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
+A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
+MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
+Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
+IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
+sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
+HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
+AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
+M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
+NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
+-----END CERTIFICATE-----
+
+Thawte Server CA
+================
+-----BEGIN CERTIFICATE-----
+MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
+DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
+dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
+AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
+b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
+BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
+c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
+A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
+ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
+/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
+1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
+MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
+GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
+GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
+-----END CERTIFICATE-----
+
+Thawte Premium Server CA
+========================
+-----BEGIN CERTIFICATE-----
+MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
+DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
+dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
+AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
+ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
+AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
+VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
+aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
+cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
+aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
+Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
+qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
+SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
+8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
+UCemDaYj+bvLpgcUQg==
+-----END CERTIFICATE-----
+
+Equifax Secure CA
+=================
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
+ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
+MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
+B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
+nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
+fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
+8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
+A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
+CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
+A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
+spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
+Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
+zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
+BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
+70+sB3c4
+-----END CERTIFICATE-----
+
+Verisign Class 3 Public Primary Certification Authority - G2
+============================================================
+-----BEGIN CERTIFICATE-----
+MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
+MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
+eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
+biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
+dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
+MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
+eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
+biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
+dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
+FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
+lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
+MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
+1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
+Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
+-----END CERTIFICATE-----
+
+GlobalSign Root CA
+==================
+-----BEGIN CERTIFICATE-----
+MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
+GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
+b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
+BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
+VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
+DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
+THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
+Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
+c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
+gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
+HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
+AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
+Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
+j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
+hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
+X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
+-----END CERTIFICATE-----
+
+GlobalSign Root CA - R2
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
+YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
+bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
+aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
+bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
+ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
+s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
+S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
+TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
+ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
+FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
+YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
+BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
+9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
+01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
+9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
+TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
+-----END CERTIFICATE-----
+
+Verisign Class 3 Public Primary Certification Authority - G3
+============================================================
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
+UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
+cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
+IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
+dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
+cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
+Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
+EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
+cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
+EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
+055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
+ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
+j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
+/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
+xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
+t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
+-----END CERTIFICATE-----
+
+Verisign Class 4 Public Primary Certification Authority - G3
+============================================================
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
+UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
+cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
+IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
+dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
+cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
+Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
+tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
+8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
+Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
+Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
+j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
+mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
+fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
+RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
+UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
+-----END CERTIFICATE-----
+
+Entrust.net Premium 2048 Secure Server CA
+=========================================
+-----BEGIN CERTIFICATE-----
+MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
+ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
+bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
+BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
+NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
+d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
+MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
+ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
+Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
+hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
+nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
+VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E
+BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ
+KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy
+T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
+zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT
+J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e
+nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE=
+-----END CERTIFICATE-----
+
+Baltimore CyberTrust Root
+=========================
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
+ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
+ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
+SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
+dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
+uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
+UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
+G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
+XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
+l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
+VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
+BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
+cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
+hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
+Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
+RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
+-----END CERTIFICATE-----
+
+Equifax Secure Global eBusiness CA
+==================================
+-----BEGIN CERTIFICATE-----
+MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
+RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
+bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
+HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
+b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
+PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
+qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
+hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
+BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
+MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
+I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
+NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
+-----END CERTIFICATE-----
+
+Equifax Secure eBusiness CA 1
+=============================
+-----BEGIN CERTIFICATE-----
+MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
+RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
+LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
+ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
+IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
+1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
+IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
+MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
+Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
+AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
+lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
+KpYrtWKmpj29f5JZzVoqgrI3eQ==
+-----END CERTIFICATE-----
+
+AddTrust Low-Value Services Root
+================================
+-----BEGIN CERTIFICATE-----
+MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
+QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
+cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
+CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
+ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
+54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
+oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
+Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
+GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
+HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
+AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
+RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
+HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
+ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
+iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
+eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
+mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
+ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
+-----END CERTIFICATE-----
+
+AddTrust External Root
+======================
+-----BEGIN CERTIFICATE-----
+MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
+QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
+VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
+NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
+cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
+Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
++iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
+Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
+aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
+2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
+7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
+BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
+VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
+VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
+IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
+j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
+6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
+e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
+G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
+-----END CERTIFICATE-----
+
+AddTrust Public Services Root
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
+QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
+cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
+BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
+dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
+nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
+d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
+Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
+HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
+A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
+/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
+FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
+A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
+JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
++YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
+GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
+Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
+EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
+-----END CERTIFICATE-----
+
+AddTrust Qualified Certificates Root
+====================================
+-----BEGIN CERTIFICATE-----
+MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
+QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
+cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
+CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
+IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
+64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
+KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
+L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
+wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
+MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
+BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
+BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
+azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
+ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
+GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
+dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
+RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
+iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
+-----END CERTIFICATE-----
+
+Entrust Root Certification Authority
+====================================
+-----BEGIN CERTIFICATE-----
+MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
+BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
+b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
+A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
+MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
+MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
+Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
+dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
+A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
+Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
+j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
+rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
+DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
+MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
+hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
+A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
+Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
+v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
+W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
+tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
+-----END CERTIFICATE-----
+
+RSA Security 2048 v3
+====================
+-----BEGIN CERTIFICATE-----
+MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
+ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
+MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
+BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
+Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
+WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
+KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
++Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
+MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
+FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
+v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
+0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
+VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
+nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
+pKnXwiJPZ9d37CAFYd4=
+-----END CERTIFICATE-----
+
+GeoTrust Global CA
+==================
+-----BEGIN CERTIFICATE-----
+MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
+Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
+MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
+LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
+BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
+8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
+T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
+vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
+AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
+DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
+zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
+d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
+mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
+XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
+Mw==
+-----END CERTIFICATE-----
+
+GeoTrust Global CA 2
+====================
+-----BEGIN CERTIFICATE-----
+MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
+R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
+MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
+LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
+NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
+LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
+Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
+HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
+MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
+K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
+srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
+ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
+OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
+x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
+H4z1Ir+rzoPz4iIprn2DQKi6bA==
+-----END CERTIFICATE-----
+
+GeoTrust Universal CA
+=====================
+-----BEGIN CERTIFICATE-----
+MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
+R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
+MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
+Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
+ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
+JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
+RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
+7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
+8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
+qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
+Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
+Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
+KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
+ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
+XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
+hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
+aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
+qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
+oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
+xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
+KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
+DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
+xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
+p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
+P/rmMuGNG2+k5o7Y+SlIis5z/iw=
+-----END CERTIFICATE-----
+
+GeoTrust Universal CA 2
+=======================
+-----BEGIN CERTIFICATE-----
+MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
+R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
+MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
+SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
+A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
+DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
+j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
+JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
+QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
+WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
+20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
+ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
+SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
+8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
++/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
+BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
+dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
+4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
+A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
+Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
+pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
+FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
+gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
+X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
+-----END CERTIFICATE-----
+
+America Online Root Certification Authority 1
+=============================================
+-----BEGIN CERTIFICATE-----
+MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
+QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
+Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
+A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
+T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
+v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
+DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
+sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
+8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
+AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
+o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
+GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
+VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
+3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
+Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
+sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
+-----END CERTIFICATE-----
+
+America Online Root Certification Authority 2
+=============================================
+-----BEGIN CERTIFICATE-----
+MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
+QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
+Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG
+A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
+T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD
+ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en
+fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8
+f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO
+qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN
+RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0
+gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn
+6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid
+FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6
+Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj
+B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op
+aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
+AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY
+T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p
++DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg
+JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy
+zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO
+ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh
+1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf
+GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff
+Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP
+cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
+-----END CERTIFICATE-----
+
+Visa eCommerce Root
+===================
+-----BEGIN CERTIFICATE-----
+MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
+EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
+QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
+WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
+VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
+bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
+F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
+RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
+TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
+/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
+GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
+MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
+CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
+YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
+zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
+YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
+398znM/jra6O1I7mT1GvFpLgXPYHDw==
+-----END CERTIFICATE-----
+
+Certum Root CA
+==============
+-----BEGIN CERTIFICATE-----
+MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
+ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
+Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
+by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
+wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
+kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
+89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
+Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
+NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
+hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
+GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
+GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
+0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
+qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
+-----END CERTIFICATE-----
+
+Comodo AAA Services root
+========================
+-----BEGIN CERTIFICATE-----
+MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
+R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
+TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
+MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
+c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
+BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
+C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
+i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
+Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
+Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
+Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
+BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
+cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
+LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
+7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
+Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
+8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
+12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
+-----END CERTIFICATE-----
+
+Comodo Secure Services root
+===========================
+-----BEGIN CERTIFICATE-----
+MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
+R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
+TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
+MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
+Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
+BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
+9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
+rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
+oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
+p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
+FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
+gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
+YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
+aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
+4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
+Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
+DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
+pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
+RR3B7Hzs/Sk=
+-----END CERTIFICATE-----
+
+Comodo Trusted Services root
+============================
+-----BEGIN CERTIFICATE-----
+MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
+R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
+TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
+MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
+bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
+IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
+3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
+/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
+juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
+ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
+DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
+/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
+ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
+cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
+uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
+pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
+BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
+R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
+9y5Xt5hwXsjEeLBi
+-----END CERTIFICATE-----
+
+QuoVadis Root CA
+================
+-----BEGIN CERTIFICATE-----
+MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
+ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
+eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
+MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
+cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
+EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
+J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
+F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
+YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
+AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
+PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
+ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
+MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
+YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
+ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
+Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
+Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
+BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
+FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
+tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
+fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
+LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
+gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
+5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
+5nrQNiOKSnQ2+Q==
+-----END CERTIFICATE-----
+
+QuoVadis Root CA 2
+==================
+-----BEGIN CERTIFICATE-----
+MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
+EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
+ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
+aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
+DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
+XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
+lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
+lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
+lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
+66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
+wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
+D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
+BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
+J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
+DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
+a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
+ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
+Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
+UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
+VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
++JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
+IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
+WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
+f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
+4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
+VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
+-----END CERTIFICATE-----
+
+QuoVadis Root CA 3
+==================
+-----BEGIN CERTIFICATE-----
+MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
+EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
+OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
+aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
+DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
+DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
+KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
+DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
+BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
+p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
+nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
+MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
+Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
+uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
+BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
+YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
+aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
+BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
+ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
+AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
+qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
+hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
+POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
+Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
+8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
+bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
+g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
+vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
+qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
+-----END CERTIFICATE-----
+
+Security Communication Root CA
+==============================
+-----BEGIN CERTIFICATE-----
+MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
+U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
+HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
+U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
+8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
+DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
+5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
+DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
+JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
+DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
+0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
+mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
+s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
+6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
+FL39vmwLAw==
+-----END CERTIFICATE-----
+
+Sonera Class 2 Root CA
+======================
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
+U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
+NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
+IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
+/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
+dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
+f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
+tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
+nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
+XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
+0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
+cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
+Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
+EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
+llpwrN9M
+-----END CERTIFICATE-----
+
+Staat der Nederlanden Root CA
+=============================
+-----BEGIN CERTIFICATE-----
+MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
+ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
+Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
+HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
+bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
+vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
+jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
+C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
+vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
+22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
+HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
+dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
+BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
+EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
+MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
+nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
+iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
+-----END CERTIFICATE-----
+
+UTN DATACorp SGC Root CA
+========================
+-----BEGIN CERTIFICATE-----
+MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
+BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
+IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
+BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
+MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
+HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
+dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
+raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
+wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
+9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
+33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
+DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
+BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
+LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
+DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
+Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
+I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
+EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
+DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
+-----END CERTIFICATE-----
+
+UTN USERFirst Hardware Root CA
+==============================
+-----BEGIN CERTIFICATE-----
+MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
+BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
+IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
+BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
+OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
+eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
+ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
+wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
+tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
+i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
+Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
+gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
+lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
+UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
+BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
+//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
+XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
+lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
+iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
+nfhmqA==
+-----END CERTIFICATE-----
+
+Camerfirma Chambers of Commerce Root
+====================================
+-----BEGIN CERTIFICATE-----
+MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
+QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
+ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
+NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
+cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
+MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
+AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
+xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
+NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
+DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
+d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
+EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
+cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
+AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
+bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
+VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
+aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
+fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
+L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
+UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
+ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
+erfutGWaIZDgqtCYvDi1czyL+Nw=
+-----END CERTIFICATE-----
+
+Camerfirma Global Chambersign Root
+==================================
+-----BEGIN CERTIFICATE-----
+MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
+QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
+ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
+NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
+YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
+MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
+ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
+1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
+by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
+6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
+8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
+BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
+aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
+Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
+aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
+ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
+bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
+PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
+gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
+PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
+IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
+t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
+-----END CERTIFICATE-----
+
+NetLock Notary (Class A) Root
+=============================
+-----BEGIN CERTIFICATE-----
+MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
+EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
+dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
+ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
+DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
+EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
+VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
+cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
+D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
+z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
+/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
+tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
+4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
+A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
+Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
+bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
+IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
+LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
+ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
+IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
+IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
+b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
+bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
+Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
+bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
+ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
+ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
+CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
+KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
+8CgHrTwXZoi1/baI
+-----END CERTIFICATE-----
+
+XRamp Global CA Root
+====================
+-----BEGIN CERTIFICATE-----
+MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
+BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
+dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
+dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
+HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
+U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
+IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
+foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
+zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
+AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
+xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
+EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
+oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
+AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
+/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
+qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
+nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
+8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
+-----END CERTIFICATE-----
+
+Go Daddy Class 2 CA
+===================
+-----BEGIN CERTIFICATE-----
+MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
+VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
+A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
+RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
+ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
+2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
+qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
+YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
+vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
+BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
+atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
+MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
+A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
+PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
+I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
+HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
+Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
+vZ8=
+-----END CERTIFICATE-----
+
+Starfield Class 2 CA
+====================
+-----BEGIN CERTIFICATE-----
+MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
+U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
+Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
+MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
+A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
+SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
+bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
+JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
+epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
+F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
+MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
+hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
+bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
+QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
+afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
+PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
+xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
+KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
+QBFGmh95DmK/D5fs4C8fF5Q=
+-----END CERTIFICATE-----
+
+StartCom Certification Authority
+================================
+-----BEGIN CERTIFICATE-----
+MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
+U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
+ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
+NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
+LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
+U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
+ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
+o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
+Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
+eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
+2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
+6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
+osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
+untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
+UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
+37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
+FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
+Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
+YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
+AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
+Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
+U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
+LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
+cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
+cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
+dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
+AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
+3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
+vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
+fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
+fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
+EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
+yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
+1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
+lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
+g14=
+-----END CERTIFICATE-----
+
+Taiwan GRCA
+===========
+-----BEGIN CERTIFICATE-----
+MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG
+EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
+DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
+dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
+ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN
+w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5
+BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O
+1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
+htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
+J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7
+Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t
+B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB
+O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
+lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
+HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
+09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
+TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj
+Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
+Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU
+D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
+DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk
+Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk
+7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
+CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
++fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
+-----END CERTIFICATE-----
+
+Swisscom Root CA 1
+==================
+-----BEGIN CERTIFICATE-----
+MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
+EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
+dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
+MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
+aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
+IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM
+MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF
+NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe
+AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC
+b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
+7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
+cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp
+WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5
+haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY
+MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
+HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
+BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9
+MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
+jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
+MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H
+VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl
+vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl
+OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
+1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq
+nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy
+x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW
+NY6E0F/6MBr1mmz0DlP5OlvRHA==
+-----END CERTIFICATE-----
+
+DigiCert Assured ID Root CA
+===========================
+-----BEGIN CERTIFICATE-----
+MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
+IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
+MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
+ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
+9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
+UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
+/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
+oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
+GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
+66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
+hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
+EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
+SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
+8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
+-----END CERTIFICATE-----
+
+DigiCert Global Root CA
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
+HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
+MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
+dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
+hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
+TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
+BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
+4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
+7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
+o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
+8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
+BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
+EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
+tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
+UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
+CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
+-----END CERTIFICATE-----
+
+DigiCert High Assurance EV Root CA
+==================================
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
+KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
+MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
+MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
+Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
+Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
+OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
+MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
+NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
+h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
+Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
+JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
+V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
+myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
+mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
+vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
+-----END CERTIFICATE-----
+
+Certplus Class 2 Primary CA
+===========================
+-----BEGIN CERTIFICATE-----
+MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
+BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
+OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
+dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
+5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
+Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
+YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
+e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
+CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
+YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
+L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
+P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
+TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
+7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
+//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
+l7+ijrRU
+-----END CERTIFICATE-----
+
+DST Root CA X3
+==============
+-----BEGIN CERTIFICATE-----
+MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
+ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
+DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
+cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
+rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
+UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
+xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
+utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
+AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
+MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
+dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
+GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
+RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
+fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
+-----END CERTIFICATE-----
+
+DST ACES CA X6
+==============
+-----BEGIN CERTIFICATE-----
+MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
+EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
+MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
+MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
+CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
+DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
+pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
+GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
+MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
+EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
+Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
+dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
+CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
+5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
+Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
+nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
+vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
+oKfN5XozNmr6mis=
+-----END CERTIFICATE-----
+
+TURKTRUST Certificate Services Provider Root 1
+==============================================
+-----BEGIN CERTIFICATE-----
+MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
+bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP
+MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0
+acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx
+MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg
+U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB
+TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC
+aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX
+yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i
+Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ
+8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4
+W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME
+BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46
+sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
+q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
+B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY
+nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
+-----END CERTIFICATE-----
+
+TURKTRUST Certificate Services Provider Root 2
+==============================================
+-----BEGIN CERTIFICATE-----
+MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
+bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
+MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
+QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
+MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
+dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
+A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
+acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
+LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
+x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
+QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
+5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
+AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
+A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
+Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
+Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
+9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
+UrbnBEI=
+-----END CERTIFICATE-----
+
+SwissSign Gold CA - G2
+======================
+-----BEGIN CERTIFICATE-----
+MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw
+EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN
+MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp
+c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B
+AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq
+t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C
+jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg
+vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF
+ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR
+AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend
+jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
+peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR
+7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi
+GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
+OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
+L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm
+5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr
+44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf
+Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m
+Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp
+mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk
+vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
+KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br
+NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj
+viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
+-----END CERTIFICATE-----
+
+SwissSign Silver CA - G2
+========================
+-----BEGIN CERTIFICATE-----
+MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT
+BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X
+DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3
+aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG
+9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644
+N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm
++/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH
+6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu
+MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h
+qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5
+FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs
+ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc
+celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X
+CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
+BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB
+tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
+cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P
+4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F
+kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L
+3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx
+/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa
+DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP
+e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu
+WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ
+DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub
+DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
+-----END CERTIFICATE-----
+
+GeoTrust Primary Certification Authority
+========================================
+-----BEGIN CERTIFICATE-----
+MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
+EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
+ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
+CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
+cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
+b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
+nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
+RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
+tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
+AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
+hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
+Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
+NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
+Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
+1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
+-----END CERTIFICATE-----
+
+thawte Primary Root CA
+======================
+-----BEGIN CERTIFICATE-----
+MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
+BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
+aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
+cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
+MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
+SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
+KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
+FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
+oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
+1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
+q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
+aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
+afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
+VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
+AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
+uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
+xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
+jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
+z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
+-----END CERTIFICATE-----
+
+VeriSign Class 3 Public Primary Certification Authority - G5
+============================================================
+-----BEGIN CERTIFICATE-----
+MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
+BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
+ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
+IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
+yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
+biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
+dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
+j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
+Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
+Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
+fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
+BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
+Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
+aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
+SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
+KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
+Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
+ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
+-----END CERTIFICATE-----
+
+SecureTrust CA
+==============
+-----BEGIN CERTIFICATE-----
+MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
+EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
+dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
+BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
+ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
+OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
+DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
+GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
+01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
+ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
+BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
+aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
+KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
+SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
+mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
+nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
+3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
+-----END CERTIFICATE-----
+
+Secure Global CA
+================
+-----BEGIN CERTIFICATE-----
+MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
+EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
+bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
+MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
+Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
+YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
+bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
+8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
+HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
+0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
+EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
+oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
+MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
+CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
+3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
+f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
+-----END CERTIFICATE-----
+
+COMODO Certification Authority
+==============================
+-----BEGIN CERTIFICATE-----
+MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
+BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
+A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
+dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
+MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
+T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
++7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
+xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
+4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
+1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
+rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
+BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
+b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
+AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
+OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
+RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
+IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
++8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
+-----END CERTIFICATE-----
+
+Network Solutions Certificate Authority
+=======================================
+-----BEGIN CERTIFICATE-----
+MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
+EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
+IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
+MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
+MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
+jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
+aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
+crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
+/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
+AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
+BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
+bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
+A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
+4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
+GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
+wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
+ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
+-----END CERTIFICATE-----
+
+WellsSecure Public Root Certificate Authority
+=============================================
+-----BEGIN CERTIFICATE-----
+MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
+F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
+NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
+MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
+bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
+VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
+iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
+i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
+bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
+K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
+AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
+cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
+lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
+i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
+GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
+Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
+K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
+bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
+qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
+E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
+tylv2G0xffX8oRAHh84vWdw+WNs=
+-----END CERTIFICATE-----
+
+COMODO ECC Certification Authority
+==================================
+-----BEGIN CERTIFICATE-----
+MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
+R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
+ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
+dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
+GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
+Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
+b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
+4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
+wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
+BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
+FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
+U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
+-----END CERTIFICATE-----
+
+IGC/A
+=====
+-----BEGIN CERTIFICATE-----
+MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
+VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
+Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
+MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
+EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
+STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
+IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
+TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
+So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
+HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
+frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
+tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
+egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
+iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
+q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
+MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
+Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
+lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
+0mBWWg==
+-----END CERTIFICATE-----
+
+Security Communication EV RootCA1
+=================================
+-----BEGIN CERTIFICATE-----
+MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
+U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
+dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
+BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
+Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
+/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
+WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
+ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
+bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
+9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
+SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
+iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
+Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
+mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
+T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
+-----END CERTIFICATE-----
+
+OISTE WISeKey Global Root GA CA
+===============================
+-----BEGIN CERTIFICATE-----
+MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
+BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
+A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
+bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
+VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
+IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
+IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
+Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
+Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
+d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
+/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
+LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
+KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
+MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
++vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
+hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
+okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
+-----END CERTIFICATE-----
+
+Microsec e-Szigno Root CA
+=========================
+-----BEGIN CERTIFICATE-----
+MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
+BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
+EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
+MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
+dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
+GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
+d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
+oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
+QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
+PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
+MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
+IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
+VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
+LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
+dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
+AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
+4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
+AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
+egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
+Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
+PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
+c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
+cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
+IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
+WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
+MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
+MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
+Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
+HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
+nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
+aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
+86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
+yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
+S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
+-----END CERTIFICATE-----
+
+Certigna
+========
+-----BEGIN CERTIFICATE-----
+MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
+EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
+MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
+Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
+XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
+GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
+ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
+DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
+Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
+tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
+BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
+SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
+hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
+PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
+1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
+WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
+-----END CERTIFICATE-----
+
+TC TrustCenter Class 2 CA II
+============================
+-----BEGIN CERTIFICATE-----
+MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
+REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
+IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw
+MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
+c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE
+AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw
+IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2
+xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ
+Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u
+SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB
+/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB
+7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
+Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
+cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
+SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
+TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G
+dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ
+KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj
+TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP
+JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk
+vQ==
+-----END CERTIFICATE-----
+
+TC TrustCenter Class 3 CA II
+============================
+-----BEGIN CERTIFICATE-----
+MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
+REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
+IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw
+MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
+c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE
+AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W
+yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo
+6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ
+uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk
+2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB
+/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB
+7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
+Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
+cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
+SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
+TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE
+O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8
+yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9
+IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal
+092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc
+5A==
+-----END CERTIFICATE-----
+
+TC TrustCenter Universal CA I
+=============================
+-----BEGIN CERTIFICATE-----
+MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC
+REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
+IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN
+MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg
+VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw
+JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC
+qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv
+xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw
+ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O
+gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j
+BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
+AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG
+1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy
+vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3
+ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
+ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a
+7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
+-----END CERTIFICATE-----
+
+Deutsche Telekom Root CA 2
+==========================
+-----BEGIN CERTIFICATE-----
+MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
+RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
+A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
+MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
+A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
+b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
+bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
+KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
+AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
+Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
+jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
+HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
+E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
+zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
+rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
+dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
+Cm26OWMohpLzGITY+9HPBVZkVw==
+-----END CERTIFICATE-----
+
+ComSign Secured CA
+==================
+-----BEGIN CERTIFICATE-----
+MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE
+AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w
+NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD
+QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs
+49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH
+7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB
+kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1
+9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw
+AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t
+U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA
+j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC
+AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a
+BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp
+FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP
+51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
+OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
+-----END CERTIFICATE-----
+
+Cybertrust Global Root
+======================
+-----BEGIN CERTIFICATE-----
+MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
+ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
+MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
+ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
++Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
+0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
+AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
+89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
+8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
+BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
+MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
+A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
+lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
+5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
+hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
+X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
+WL1WMRJOEcgh4LMRkWXbtKaIOM5V
+-----END CERTIFICATE-----
+
+ePKI Root Certification Authority
+=================================
+-----BEGIN CERTIFICATE-----
+MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG
+EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg
+Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx
+MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq
+MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B
+AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs
+IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi
+lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv
+qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX
+12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O
+WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+
+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao
+lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/
+vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi
+Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi
+MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
+ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0
+1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq
+KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV
+xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP
+NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r
+GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE
+xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx
+gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy
+sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD
+BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
+-----END CERTIFICATE-----
+
+T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3
+=============================================================================================================================
+-----BEGIN CERTIFICATE-----
+MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
+DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
+aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
+b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
+BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
+S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
+MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
+IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
+n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
+IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
+dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
+cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
+Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
+xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
+6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
+hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
+BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
+MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
+N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
+y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
+LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
+dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
+-----END CERTIFICATE-----
+
+Buypass Class 2 CA 1
+====================
+-----BEGIN CERTIFICATE-----
+MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
+QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
+MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
+c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
+cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
+0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
+0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
+uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
+MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
+AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
+1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
+7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
+fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
+wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
+-----END CERTIFICATE-----
+
+Buypass Class 3 CA 1
+====================
+-----BEGIN CERTIFICATE-----
+MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
+QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1
+MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
+c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx
+ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0
+n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia
+AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c
+1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC
+MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P
+AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7
+pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA
+EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5
+htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj
+el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
+-----END CERTIFICATE-----
+
+EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
+==========================================================================
+-----BEGIN CERTIFICATE-----
+MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF
+bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg
+QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe
+Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p
+ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt
+IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG
+SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by
+X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b
+gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr
+eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ
+TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy
+Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn
+uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI
+qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm
+ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0
+Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
+/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW
+Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t
+FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm
+zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k
+XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT
+bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU
+RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK
+1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt
+2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ
+Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9
+AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
+-----END CERTIFICATE-----
+
+certSIGN ROOT CA
+================
+-----BEGIN CERTIFICATE-----
+MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
+VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
+Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
+CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
+JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
+rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
+ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
+0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
+AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
+Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
+AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
+SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
+x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
+vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
+TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
+-----END CERTIFICATE-----
+
+CNNIC ROOT
+==========
+-----BEGIN CERTIFICATE-----
+MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
+ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
+OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
+o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
+VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
+VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
+czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
+y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
+wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
+lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
+Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
+O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
+BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
+G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
+mxE=
+-----END CERTIFICATE-----
+
+ApplicationCA - Japanese Government
+===================================
+-----BEGIN CERTIFICATE-----
+MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
+SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
+MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
+cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
+fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
+wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
+jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
+nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
+WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
+BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
+vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
+o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
+/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
+io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
+dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
+rosot4LKGAfmt1t06SAZf7IbiVQ=
+-----END CERTIFICATE-----
+
+GeoTrust Primary Certification Authority - G3
+=============================================
+-----BEGIN CERTIFICATE-----
+MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
+BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
+IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
+eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
+NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
+YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
+LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
+K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
+c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
+IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
+dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
+MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
+2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
+cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
+Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
+AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
+t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
+-----END CERTIFICATE-----
+
+thawte Primary Root CA - G2
+===========================
+-----BEGIN CERTIFICATE-----
+MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
+VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
+IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
+Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
+MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
+b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
+IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
+LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
+8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
+mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
+G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
+rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
+-----END CERTIFICATE-----
+
+thawte Primary Root CA - G3
+===========================
+-----BEGIN CERTIFICATE-----
+MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
+BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
+aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
+cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
+ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
+d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
+VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
+A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
+P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
++BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
+7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
+vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
+BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
+KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
+A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
+t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
+8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
+er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
+-----END CERTIFICATE-----
+
+GeoTrust Primary Certification Authority - G2
+=============================================
+-----BEGIN CERTIFICATE-----
+MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
+VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
+Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
+ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
+OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
+MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
+b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
+BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
+KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
+VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
+EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
+ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
+npaqBA+K
+-----END CERTIFICATE-----
+
+VeriSign Universal Root Certification Authority
+===============================================
+-----BEGIN CERTIFICATE-----
+MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
+BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
+ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
+IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
+IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
+UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
+cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
+IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
+1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
+MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
+9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
+AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
+tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
+CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
+a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
+DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
+Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
+Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
+P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
+wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
+mJO37M2CYfE45k+XmCpajQ==
+-----END CERTIFICATE-----
+
+VeriSign Class 3 Public Primary Certification Authority - G4
+============================================================
+-----BEGIN CERTIFICATE-----
+MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
+VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
+b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
+ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
+MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
+cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
+b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
+IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
+Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
+rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
+/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
+HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
+Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
+A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
+AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
+-----END CERTIFICATE-----
+
+NetLock Arany (Class Gold) Főtanúsítvány
+============================================
+-----BEGIN CERTIFICATE-----
+MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
+A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
+dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
+cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
+MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
+ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
+biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
+c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
+0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
+/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
+H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
+fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
+neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
+BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
+qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
+YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
+bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
+NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
+dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
+-----END CERTIFICATE-----
+
+Staat der Nederlanden Root CA - G2
+==================================
+-----BEGIN CERTIFICATE-----
+MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE
+CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
+Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC
+TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l
+ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ
+5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn
+vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj
+CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil
+e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR
+OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI
+CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65
+48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi
+trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737
+qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB
+AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC
+ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
+HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA
+A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz
++51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj
+f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN
+kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk
+CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF
+URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb
+CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h
+oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV
+IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm
+66+KAQ==
+-----END CERTIFICATE-----
+
+CA Disig
+========
+-----BEGIN CERTIFICATE-----
+MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK
+QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw
+MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz
+bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm
+GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD
+Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo
+hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt
+ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w
+gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P
+AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz
+aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff
+ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa
+BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t
+WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3
+mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
+CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K
+ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA
+4Z7CRneC9VkGjCFMhwnN5ag=
+-----END CERTIFICATE-----
+
+Juur-SK
+=======
+-----BEGIN CERTIFICATE-----
+MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
+c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
+DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
+SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
+aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
+TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
++Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
+UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
+Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
+MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
+HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
+AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
+cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
+AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
+cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
+FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
+A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
+ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
+abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
+IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
+Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
+yyqcjg==
+-----END CERTIFICATE-----
+
+Hongkong Post Root CA 1
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
+DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
+NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
+IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
+ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
+auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
+qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
+V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
+HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
+h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
+l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
+IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
+T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
+c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
+-----END CERTIFICATE-----
+
+SecureSign RootCA11
+===================
+-----BEGIN CERTIFICATE-----
+MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
+SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
+b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
+KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
+cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
+TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
+wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
+g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
+O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
+bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
+t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
+OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
+bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
+Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
+y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
+lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
+-----END CERTIFICATE-----
+
+ACEDICOM Root
+=============
+-----BEGIN CERTIFICATE-----
+MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD
+T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4
+MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG
+A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF
+AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk
+WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD
+YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew
+MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb
+m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk
+HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT
+xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2
+3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9
+2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq
+TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz
+4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU
+9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
+bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg
+aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP
+eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk
+zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1
+ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI
+KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq
+nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE
+I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp
+MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o
+tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA==
+-----END CERTIFICATE-----
+
+Microsec e-Szigno Root CA 2009
+==============================
+-----BEGIN CERTIFICATE-----
+MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
+MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
+c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
+dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
+BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
+U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
+fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
+0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
+pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
+1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
+AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
+QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
+FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
+lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
+I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
+tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
+yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
+LXpUq3DDfSJlgnCW
+-----END CERTIFICATE-----
+
+E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
+===================================================
+-----BEGIN CERTIFICATE-----
+MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
+EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz
+ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3
+MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0
+cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u
+aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY
+8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y
+jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI
+JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk
+9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD
+AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG
+SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d
+F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq
+D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4
+Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
+fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
+-----END CERTIFICATE-----
+
+GlobalSign Root CA - R3
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
+YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
+bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
+aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
+bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
+iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
+0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
+rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
+OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
+xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
+FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
+lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
+EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
+bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
+YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
+kpeDMdmztcpHWD9f
+-----END CERTIFICATE-----
+
+Autoridad de Certificacion Firmaprofesional CIF A62634068
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
+BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
+MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
+QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
+NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
+Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
+B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
+7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
+ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
+plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
+MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
+LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
+bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
+vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
+EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
+DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
+cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
+bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
+ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
+51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
+R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
+T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
+Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
+osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
+crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
+saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
+KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
+6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
+-----END CERTIFICATE-----
+
+Izenpe.com
+==========
+-----BEGIN CERTIFICATE-----
+MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG
+EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz
+MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu
+QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ
+03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK
+ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU
++zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC
+PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT
+OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK
+F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK
+0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+
+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB
+leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID
+AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+
+SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG
+NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
+MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
+BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l
+Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga
+kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q
+hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs
+g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5
+aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5
+nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC
+ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo
+Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
+WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
+-----END CERTIFICATE-----
+
+Chambers of Commerce Root - 2008
+================================
+-----BEGIN CERTIFICATE-----
+MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
+MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
+bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
+QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
+Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
+ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
+EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
+cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
+AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
+XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
+h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
+ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
+NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
+D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
+lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
+0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
+ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
+EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
+G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
+BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
+bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
+bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
+CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
+AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
+wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
+3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
+RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
+M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
+YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
+9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
+zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
+nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
+OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
+-----END CERTIFICATE-----
+
+Global Chambersign Root - 2008
+==============================
+-----BEGIN CERTIFICATE-----
+MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
+MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
+bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
+QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
+NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
+Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
+QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
+aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
+VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
+XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
+ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
+/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
+TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
+H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
+Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
+HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
+wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
+AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
+BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
+BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
+aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
+aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
+1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
+dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
+/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
+ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
+dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
+9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
+foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
+qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
+P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
+c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
+09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
+-----END CERTIFICATE-----
+
+Go Daddy Root Certificate Authority - G2
+========================================
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
+B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
+MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
+MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
+b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
+A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
+9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
++qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
+fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
+NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
+MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
+BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
+vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
+5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
+N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
+LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
+-----END CERTIFICATE-----
+
+Starfield Root Certificate Authority - G2
+=========================================
+-----BEGIN CERTIFICATE-----
+MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
+B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
+b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
+eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
+DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
+VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
+dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
+W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
+bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
+N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
+ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
+JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
+AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
+TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
+4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
+F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
+pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
+c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
+-----END CERTIFICATE-----
+
+Starfield Services Root Certificate Authority - G2
+==================================================
+-----BEGIN CERTIFICATE-----
+MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
+B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
+b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
+IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
+BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
+dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
+Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
+h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
+hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
+LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
+rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
+AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
+SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
+E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
+xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
+iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
+YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
+-----END CERTIFICATE-----
+
+AffirmTrust Commercial
+======================
+-----BEGIN CERTIFICATE-----
+MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
+BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
+MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
+bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
+DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
+C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
+BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
+MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
+HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
+AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
+hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
+qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
+0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
+sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
+-----END CERTIFICATE-----
+
+AffirmTrust Networking
+======================
+-----BEGIN CERTIFICATE-----
+MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
+BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
+MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
+bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
+Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
+dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
+/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
+h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
+HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
+AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
+UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
+12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
+WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
+/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
+-----END CERTIFICATE-----
+
+AffirmTrust Premium
+===================
+-----BEGIN CERTIFICATE-----
+MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
+BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
+OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
+dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
+MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
+BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
+5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
++7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
+GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
+p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
+S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
+6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
+/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
++Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
+/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
+MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
+Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
+6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
+L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
++4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
+BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
+IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
+g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
+zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
+-----END CERTIFICATE-----
+
+AffirmTrust Premium ECC
+=======================
+-----BEGIN CERTIFICATE-----
+MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
+BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
+MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
+cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
+IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
+N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
+BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
+BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
+57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
+eQ==
+-----END CERTIFICATE-----
+
+Certum Trusted Network CA
+=========================
+-----BEGIN CERTIFICATE-----
+MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
+ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
+MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
+ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
+l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
+J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
+fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
+cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
+Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
+DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
+jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
+mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
+Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
+03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
+-----END CERTIFICATE-----
+
+Certinomis - Autorité Racine
+=============================
+-----BEGIN CERTIFICATE-----
+MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
+Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
+LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG
+A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw
+JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD
+ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa
+wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly
+Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw
+2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N
+jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q
+c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC
+lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb
+xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g
+530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna
+4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
+A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
+KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x
+WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva
+R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40
+nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B
+CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv
+JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE
+qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b
+WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE
+wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/
+vgt2Fl43N+bYdJeimUV5
+-----END CERTIFICATE-----
+
+Root CA Generalitat Valenciana
+==============================
+-----BEGIN CERTIFICATE-----
+MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
+ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
+IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
+WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
+CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
+F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
+ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
+D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
+JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
+AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
+dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
+ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
+AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
+YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
+AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
+aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
+AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
+YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
+AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
+OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
+dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
+BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
+A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
+b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
+TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
+Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
+NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
+iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
++GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
+-----END CERTIFICATE-----
+
+A-Trust-nQual-03
+================
+-----BEGIN CERTIFICATE-----
+MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE
+Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy
+a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R
+dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw
+RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0
+ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1
+c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA
+zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n
+yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE
+SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4
+iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V
+cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV
+eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40
+ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr
+sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd
+JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
+mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6
+ahq97BvIxYSazQ==
+-----END CERTIFICATE-----
+
+TWCA Root Certification Authority
+=================================
+-----BEGIN CERTIFICATE-----
+MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
+VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
+EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
+IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
+QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
+oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
+4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
+y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
+BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
+9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
+mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
+QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
+T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
+Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
+-----END CERTIFICATE-----
+
+Security Communication RootCA2
+==============================
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
+U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
+dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
+SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
+aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
+3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
+spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
+EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
+QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
+CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
+u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
+3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
+tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
+mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
+-----END CERTIFICATE-----
+
+EC-ACC
+======
+-----BEGIN CERTIFICATE-----
+MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
+BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
+ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
+VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
+CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
+BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
+MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
+SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
+Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
+cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
+w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
+ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
+HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
+E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
+0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
+BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
+VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
+Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
+dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
+lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
+Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
+l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
+E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
+5EI=
+-----END CERTIFICATE-----
+
+Hellenic Academic and Research Institutions RootCA 2011
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
+O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
+aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
+IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
+AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
+IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
+IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
+1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
+71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
+8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
+3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
+MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
+MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
+b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
+XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
+TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
+/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
+7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
+-----END CERTIFICATE-----
+
+Actalis Authentication Root CA
+==============================
+-----BEGIN CERTIFICATE-----
+MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
+BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
+AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
+MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
+IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
+IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
+wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
+by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
+zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
+YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
+oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
+EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
+hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
+EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
+jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
+iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
+ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
+WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
+JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
+K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
+Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
+4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
+2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
+lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
+OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
+vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
+-----END CERTIFICATE-----
+
+Trustis FPS Root CA
+===================
+-----BEGIN CERTIFICATE-----
+MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
+EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
+IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
+BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
+RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
+H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
+cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
+o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
+AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
+BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
+GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
+yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
+8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
+l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
+iB6XzCGcKQENZetX2fNXlrtIzYE=
+-----END CERTIFICATE-----
+
+StartCom Certification Authority
+================================
+-----BEGIN CERTIFICATE-----
+MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
+U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
+ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
+NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
+LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
+U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
+ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
+o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
+Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
+eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
+2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
+6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
+osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
+untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
+UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
+37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
+VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ
+Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0
+dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu
+c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv
+bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0
+aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
+L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG
+cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5
+fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm
+N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN
+Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T
+tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX
+e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA
+2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs
+HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
+JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib
+D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8=
+-----END CERTIFICATE-----
+
+StartCom Certification Authority G2
+===================================
+-----BEGIN CERTIFICATE-----
+MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
+U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE
+ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O
+o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG
+4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi
+Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul
+Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs
+O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H
+vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L
+nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS
+FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa
+z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E
+BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ
+KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K
+2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk
+J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+
+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG
+/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc
+nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld
+blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc
+l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm
+7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm
+obp573PYtlNXLfbQ4ddI
+-----END CERTIFICATE-----
+
+Buypass Class 2 Root CA
+=======================
+-----BEGIN CERTIFICATE-----
+MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
+QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X
+DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
+eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw
+DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1
+g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn
+9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b
+/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU
+CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff
+awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI
+zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn
+Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX
+Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs
+M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
+VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
+AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s
+A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI
+osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S
+aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd
+DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD
+LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0
+oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC
+wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS
+CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN
+rJgWVqA=
+-----END CERTIFICATE-----
+
+Buypass Class 3 Root CA
+=======================
+-----BEGIN CERTIFICATE-----
+MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
+QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X
+DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
+eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw
+DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH
+sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR
+5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh
+7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ
+ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH
+2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV
+/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ
+RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA
+Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq
+j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
+VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
+AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV
+cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G
+uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG
+Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8
+ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2
+KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz
+6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug
+UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe
+eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi
+Cp/HuZc=
+-----END CERTIFICATE-----
+
+T-TeleSec GlobalRoot Class 3
+============================
+-----BEGIN CERTIFICATE-----
+MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
+IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
+cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
+MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
+dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
+ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
+9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
+NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
+iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
+0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
+AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
+fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
+ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
+P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
+e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
+-----END CERTIFICATE-----
+
+EE Certification Centre Root CA
+===============================
+-----BEGIN CERTIFICATE-----
+MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
+EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy
+dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw
+MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB
+UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy
+ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
+DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM
+TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2
+rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw
+93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN
+P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T
+AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ
+MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF
+BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj
+xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM
+lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
+uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
+3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
+dcGWxZ0=
+-----END CERTIFICATE-----
+
+TURKTRUST Certificate Services Provider Root 2007
+=================================================
+-----BEGIN CERTIFICATE-----
+MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
+bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
+MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
+QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X
+DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl
+a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN
+BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
+bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N
+YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv
+KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya
+KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT
+rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC
+AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP
+BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s
+Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I
+aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO
+Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb
+BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK
+poRq0Tl9
+-----END CERTIFICATE-----
+
+D-TRUST Root Class 3 CA 2 2009
+==============================
+-----BEGIN CERTIFICATE-----
+MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK
+DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe
+Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE
+LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD
+ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA
+BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv
+KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z
+p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC
+AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ
+4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y
+eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw
+MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G
+PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw
+OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm
+2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0
+o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV
+dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph
+X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I=
+-----END CERTIFICATE-----
+
+D-TRUST Root Class 3 CA 2 EV 2009
+=================================
+-----BEGIN CERTIFICATE-----
+MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
+DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
+OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
+DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
+OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS
+egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh
+zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T
+7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60
+sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35
+11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv
+cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v
+ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El
+MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp
+b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh
+c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+
+PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05
+nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX
+ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA
+NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv
+w9y4AyHqnxbxLFS1
+-----END CERTIFICATE-----
+
+PSCProcert
+==========
+-----BEGIN CERTIFICATE-----
+MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk
+ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ
+MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz
+dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl
+cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw
+IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw
+MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w
+DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD
+ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp
+Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw
+DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC
+wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA
+3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh
+RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO
+EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2
+0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH
+0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU
+td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw
+Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp
+r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/
+AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz
+Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId
+xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp
+ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH
+EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h
+Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k
+ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG
+9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG
+MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG
+LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52
+ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy
+YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v
+Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o
+dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq
+T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN
+g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q
+uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1
+n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn
+FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo
+5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq
+3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5
+poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y
+eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km
+-----END CERTIFICATE-----
+
+China Internet Network Information Center EV Certificates Root
+==============================================================
+-----BEGIN CERTIFICATE-----
+MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV
+BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D
+aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg
+Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG
+A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM
+PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl
+cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y
+jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV
+98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H
+klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23
+KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC
+7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV
+HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD
+glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5
+0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM
+7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws
+ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0
+5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8=
+-----END CERTIFICATE-----
+
+Swisscom Root CA 2
+==================
+-----BEGIN CERTIFICATE-----
+MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBkMQswCQYDVQQG
+EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
+dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2
+MjUwNzM4MTRaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
+aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIIC
+IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvErjw0DzpPM
+LgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r0rk0X2s682Q2zsKwzxNo
+ysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJ
+wDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVPACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpH
+Wrumnf2U5NGKpV+GY3aFy6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1a
+SgJA/MTAtukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL6yxS
+NLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0uPoTXGiTOmekl9Ab
+mbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrALacywlKinh/LTSlDcX3KwFnUey7QY
+Ypqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velhk6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3
+qPyZ7iVNTA6z00yPhOgpD/0QVAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
+HQYDVR0hBBYwFDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O
+BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqhb97iEoHF8Twu
+MA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4RfbgZPnm3qKhyN2abGu2sEzsO
+v2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ
+82YqZh6NM4OKb3xuqFp1mrjX2lhIREeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLz
+o9v/tdhZsnPdTSpxsrpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcs
+a0vvaGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciATwoCqISxx
+OQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99nBjx8Oto0QuFmtEYE3saW
+mA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5Wt6NlUe07qxS/TFED6F+KBZvuim6c779o
++sjaC+NCydAXFJy3SuCvkychVSa1ZC+N8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TC
+rvJcwhbtkj6EPnNgiLx29CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX
+5OfNeOI5wSsSnqaeG8XmDtkx2Q==
+-----END CERTIFICATE-----
+
+Swisscom Root EV CA 2
+=====================
+-----BEGIN CERTIFICATE-----
+MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAwZzELMAkGA1UE
+BhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdpdGFsIENlcnRpZmljYXRlIFNl
+cnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcN
+MzEwNjI1MDg0NTA4WjBnMQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsT
+HERpZ2l0YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYg
+Q0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7BxUglgRCgz
+o3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD1ycfMQ4jFrclyxy0uYAy
+Xhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPHoCE2G3pXKSinLr9xJZDzRINpUKTk4Rti
+GZQJo/PDvO/0vezbE53PnUgJUmfANykRHvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8Li
+qG12W0OfvrSdsyaGOx9/5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaH
+Za0zKcQvidm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHLOdAG
+alNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaCNYGu+HuB5ur+rPQa
+m3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f46Fq9mDU5zXNysRojddxyNMkM3Ox
+bPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCBUWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDi
+xzgHcgplwLa7JSnaFp6LNYth7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/
+BAQDAgGGMB0GA1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED
+MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWBbj2ITY1x0kbB
+bkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6xXCX5145v9Ydkn+0UjrgEjihL
+j6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98TPLr+flaYC/NUn81ETm484T4VvwYmneTwkLbU
+wp4wLh/vx3rEUMfqe9pQy3omywC0Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7
+XwgiG/W9mR4U9s70WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH
+59yLGn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm7JFe3VE/
+23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4Snr8PyQUQ3nqjsTzyP6Wq
+J3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VNvBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyA
+HmBR3NdUIR7KYndP+tiPsys6DXhyyWhBWkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/gi
+uMod89a2GQ+fYWVq6nTIfI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuW
+l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc=
+-----END CERTIFICATE-----
+
+CA Disig Root R1
+================
+-----BEGIN CERTIFICATE-----
+MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAlNLMRMw
+EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp
+ZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sx
+EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp
+c2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy
+3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/oOI7bm+V8
+u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3AfQ+lekLZWnDZv6fXARz2
+m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJeIgpFy4QxTaz+29FHuvlglzmxZcfe+5nk
+CiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8noc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTa
+YVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6
+vpmumwKjrckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD3AjL
+LhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE7cderVC6xkGbrPAX
+ZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1is
+XxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLdqvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNV
+HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ
+04IwDQYJKoZIhvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR
+xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaASfX8MPWbTx9B
+LxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXoHqJPYNcHKfyyo6SdbhWSVhlM
+CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5Gfb
+VSUZP/3oNn6z4eGBrxEWi1CXYBmCAMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85
+YmLLW1AL14FABZyb7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKS
+ds+xDzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvkF7mGnjix
+lAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqFa3qdnom2piiZk4hA9z7N
+UaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsTQ6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJ
+a7+h89n07eLw4+1knj0vllJPgFOL
+-----END CERTIFICATE-----
+
+CA Disig Root R2
+================
+-----BEGIN CERTIFICATE-----
+MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw
+EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp
+ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx
+EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp
+c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC
+w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia
+xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7
+A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S
+GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV
+g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa
+5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE
+koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A
+Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i
+Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV
+HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u
+Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM
+tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV
+sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je
+dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8
+1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx
+mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01
+utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0
+sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg
+UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV
+7+ZtsH8tZ/3zbBt1RqPlShfppNcL
+-----END CERTIFICATE-----
+
+ACCVRAIZ1
+=========
+-----BEGIN CERTIFICATE-----
+MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB
+SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1
+MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH
+UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
+DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM
+jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0
+RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD
+aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ
+0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG
+WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7
+8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR
+5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J
+9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK
+Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw
+Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu
+Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2
+VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM
+Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA
+QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh
+AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA
+YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj
+AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA
+IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk
+aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0
+dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2
+MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI
+hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E
+R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN
+YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49
+nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ
+TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3
+sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h
+I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg
+Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd
+3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p
+EfbRD0tVNEYqi4Y7
+-----END CERTIFICATE-----
+
+TWCA Global Root CA
+===================
+-----BEGIN CERTIFICATE-----
+MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT
+CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD
+QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK
+EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg
+Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C
+nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV
+r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR
+Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV
+tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W
+KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99
+sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p
+yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn
+kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI
+zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC
+AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g
+cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn
+LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M
+8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg
+/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg
+lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP
+A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m
+i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8
+EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3
+zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0=
+-----END CERTIFICATE-----
+
+TeliaSonera Root CA v1
+======================
+-----BEGIN CERTIFICATE-----
+MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE
+CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4
+MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW
+VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+
+6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA
+3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k
+B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn
+Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH
+oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3
+F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ
+oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7
+gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc
+TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB
+AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW
+DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm
+zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx
+0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW
+pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV
+G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc
+c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT
+JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2
+qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6
+Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems
+WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=
+-----END CERTIFICATE-----
+
+E-Tugra Certification Authority
+===============================
+-----BEGIN CERTIFICATE-----
+MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w
+DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls
+ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN
+ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw
+NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx
+QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl
+cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD
+DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
+MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd
+hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K
+CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g
+ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ
+BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0
+E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz
+rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq
+jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn
+rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5
+dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB
+/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG
+MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK
+kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO
+XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807
+VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo
+a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc
+dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV
+KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT
+Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0
+8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G
+C7TbO6Orb1wdtn7os4I07QZcJA==
+-----END CERTIFICATE-----
+
+T-TeleSec GlobalRoot Class 2
+============================
+-----BEGIN CERTIFICATE-----
+MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
+IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
+cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx
+MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
+dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
+ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ
+SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F
+vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970
+2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV
+WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA
+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy
+YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4
+r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf
+vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR
+3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN
+9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg==
+-----END CERTIFICATE-----
+
+Atos TrustedRoot 2011
+=====================
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU
+cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4
+MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG
+A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV
+hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr
+54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+
+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320
+HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR
+z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R
+l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ
+bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
+CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h
+k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh
+TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9
+61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G
+3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed
+-----END CERTIFICATE-----
+
+QuoVadis Root CA 1 G3
+=====================
+-----BEGIN CERTIFICATE-----
+MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG
+A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv
+b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN
+MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg
+RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE
+PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm
+PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6
+Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN
+ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l
+g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV
+7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX
+9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f
+iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg
+t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
+AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI
+hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC
+MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3
+GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct
+Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP
++V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh
+3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa
+wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6
+O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0
+FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV
+hMJKzRwuJIczYOXD
+-----END CERTIFICATE-----
+
+QuoVadis Root CA 2 G3
+=====================
+-----BEGIN CERTIFICATE-----
+MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG
+A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv
+b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN
+MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg
+RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh
+ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY
+NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t
+oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o
+MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l
+V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo
+L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ
+sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD
+6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh
+lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
+AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI
+hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66
+AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K
+pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9
+x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz
+dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X
+U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw
+mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD
+zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN
+JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr
+O3jtZsSOeWmD3n+M
+-----END CERTIFICATE-----
+
+QuoVadis Root CA 3 G3
+=====================
+-----BEGIN CERTIFICATE-----
+MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG
+A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv
+b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN
+MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg
+RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286
+IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL
+Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe
+6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3
+I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U
+VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7
+5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi
+Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM
+dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt
+rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
+AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI
+hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px
+KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS
+t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ
+TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du
+DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib
+Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD
+hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX
+0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW
+dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2
+PpxxVJkES/1Y+Zj0
+-----END CERTIFICATE-----
+
+DigiCert Assured ID Root G2
+===========================
+-----BEGIN CERTIFICATE-----
+MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
+IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw
+MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
+ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH
+35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq
+bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw
+VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP
+YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn
+lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO
+w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv
+0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz
+d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW
+hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M
+jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo
+IhNzbM8m9Yop5w==
+-----END CERTIFICATE-----
+
+DigiCert Assured ID Root G3
+===========================
+-----BEGIN CERTIFICATE-----
+MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV
+UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD
+VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1
+MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ
+BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb
+RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs
+KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF
+UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy
+YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy
+1vUhZscv6pZjamVFkpUBtA==
+-----END CERTIFICATE-----
+
+DigiCert Global Root G2
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
+HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx
+MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
+dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq
+hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ
+kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO
+3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV
+BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM
+UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB
+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu
+5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr
+F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U
+WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH
+QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/
+iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl
+MrY=
+-----END CERTIFICATE-----
+
+DigiCert Global Root G3
+=======================
+-----BEGIN CERTIFICATE-----
+MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV
+UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD
+VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw
+MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k
+aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C
+AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O
+YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP
+BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp
+Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y
+3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34
+VOKa5Vt8sycX
+-----END CERTIFICATE-----
+
+DigiCert Trusted Root G4
+========================
+-----BEGIN CERTIFICATE-----
+MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw
+HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1
+MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G
+CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp
+pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o
+k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa
+vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY
+QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6
+MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm
+mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7
+f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH
+dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8
+oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud
+DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD
+ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY
+ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr
+yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy
+7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah
+ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN
+5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb
+/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa
+5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK
+G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP
+82Z+
+-----END CERTIFICATE-----
+
+WoSign
+======
+-----BEGIN CERTIFICATE-----
+MIIFdjCCA16gAwIBAgIQXmjWEXGUY1BWAGjzPsnFkTANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQG
+EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxKjAoBgNVBAMTIUNlcnRpZmljYXRpb24g
+QXV0aG9yaXR5IG9mIFdvU2lnbjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMFUxCzAJ
+BgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEqMCgGA1UEAxMhQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkgb2YgV29TaWduMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
+vcqNrLiRFVaXe2tcesLea9mhsMMQI/qnobLMMfo+2aYpbxY94Gv4uEBf2zmoAHqLoE1UfcIiePyO
+CbiohdfMlZdLdNiefvAA5A6JrkkoRBoQmTIPJYhTpA2zDxIIFgsDcSccf+Hb0v1naMQFXQoOXXDX
+2JegvFNBmpGN9J42Znp+VsGQX+axaCA2pIwkLCxHC1l2ZjC1vt7tj/id07sBMOby8w7gLJKA84X5
+KIq0VC6a7fd2/BVoFutKbOsuEo/Uz/4Mx1wdC34FMr5esAkqQtXJTpCzWQ27en7N1QhatH/YHGkR
++ScPewavVIMYe+HdVHpRaG53/Ma/UkpmRqGyZxq7o093oL5d//xWC0Nyd5DKnvnyOfUNqfTq1+ez
+EC8wQjchzDBwyYaYD8xYTYO7feUapTeNtqwylwA6Y3EkHp43xP901DfA4v6IRmAR3Qg/UDaruHqk
+lWJqbrDKaiFaafPz+x1wOZXzp26mgYmhiMU7ccqjUu6Du/2gd/Tkb+dC221KmYo0SLwX3OSACCK2
+8jHAPwQ+658geda4BmRkAjHXqc1S+4RFaQkAKtxVi8QGRkvASh0JWzko/amrzgD5LkhLJuYwTKVY
+yrREgk/nkR4zw7CT/xH8gdLKH3Ep3XZPkiWvHYG3Dy+MwwbMLyejSuQOmbp8HkUff6oZRZb9/D0C
+AwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOFmzw7R
+8bNLtwYgFP6HEtX2/vs+MA0GCSqGSIb3DQEBBQUAA4ICAQCoy3JAsnbBfnv8rWTjMnvMPLZdRtP1
+LOJwXcgu2AZ9mNELIaCJWSQBnfmvCX0KI4I01fx8cpm5o9dU9OpScA7F9dY74ToJMuYhOZO9sxXq
+T2r09Ys/L3yNWC7F4TmgPsc9SnOeQHrAK2GpZ8nzJLmzbVUsWh2eJXLOC62qx1ViC777Y7NhRCOj
+y+EaDveaBk3e1CNOIZZbOVtXHS9dCF4Jef98l7VNg64N1uajeeAz0JmWAjCnPv/So0M/BVoG6kQC
+2nz4SNAzqfkHx5Xh9T71XXG68pWpdIhhWeO/yloTunK0jF02h+mmxTwTv97QRCbut+wucPrXnbes
+5cVAWubXbHssw1abR80LzvobtCHXt2a49CUwi1wNuepnsvRtrtWhnk/Yn+knArAdBtaP4/tIEp9/
+EaEQPkxROpaw0RPxx9gmrjrKkcRpnd8BKWRRb2jaFOwIQZeQjdCygPLPwj2/kWjFgGcexGATVdVh
+mVd8upUPYUk6ynW8yQqTP2cOEvIo4jEbwFcW3wh8GcF+Dx+FHgo2fFt+J7x6v+Db9NpSvd4MVHAx
+kUOVyLzwPt0JfjBkUO1/AaQzZ01oT74V77D2AhGiGxMlOtzCWfHjXEa7ZywCRuoeSKbmW9m1vFGi
+kpbbqsY3Iqb+zCB0oy2pLmvLwIIRIbWTee5Ehr7XHuQe+w==
+-----END CERTIFICATE-----
+
+WoSign China
+============
+-----BEGIN CERTIFICATE-----
+MIIFWDCCA0CgAwIBAgIQUHBrzdgT/BtOOzNy0hFIjTANBgkqhkiG9w0BAQsFADBGMQswCQYDVQQG
+EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMMEkNBIOayg+mAmuagueiv
+geS5pjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMEYxCzAJBgNVBAYTAkNOMRowGAYD
+VQQKExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAwwSQ0Eg5rKD6YCa5qC56K+B5LmmMIICIjAN
+BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0EkhHiX8h8EqwqzbdoYGTufQdDTc7WU1/FDWiD+k
+8H/rD195L4mx/bxjWDeTmzj4t1up+thxx7S8gJeNbEvxUNUqKaqoGXqW5pWOdO2XCld19AXbbQs5
+uQF/qvbW2mzmBeCkTVL829B0txGMe41P/4eDrv8FAxNXUDf+jJZSEExfv5RxadmWPgxDT74wwJ85
+dE8GRV2j1lY5aAfMh09Qd5Nx2UQIsYo06Yms25tO4dnkUkWMLhQfkWsZHWgpLFbE4h4TV2TwYeO5
+Ed+w4VegG63XX9Gv2ystP9Bojg/qnw+LNVgbExz03jWhCl3W6t8Sb8D7aQdGctyB9gQjF+BNdeFy
+b7Ao65vh4YOhn0pdr8yb+gIgthhid5E7o9Vlrdx8kHccREGkSovrlXLp9glk3Kgtn3R46MGiCWOc
+76DbT52VqyBPt7D3h1ymoOQ3OMdc4zUPLK2jgKLsLl3Az+2LBcLmc272idX10kaO6m1jGx6KyX2m
++Jzr5dVjhU1zZmkR/sgO9MHHZklTfuQZa/HpelmjbX7FF+Ynxu8b22/8DU0GAbQOXDBGVWCvOGU6
+yke6rCzMRh+yRpY/8+0mBe53oWprfi1tWFxK1I5nuPHa1UaKJ/kR8slC/k7e3x9cxKSGhxYzoacX
+GKUN5AXlK8IrC6KVkLn9YDxOiT7nnO4fuwECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
+EwEB/wQFMAMBAf8wHQYDVR0OBBYEFOBNv9ybQV0T6GTwp+kVpOGBwboxMA0GCSqGSIb3DQEBCwUA
+A4ICAQBqinA4WbbaixjIvirTthnVZil6Xc1bL3McJk6jfW+rtylNpumlEYOnOXOvEESS5iVdT2H6
+yAa+Tkvv/vMx/sZ8cApBWNromUuWyXi8mHwCKe0JgOYKOoICKuLJL8hWGSbueBwj/feTZU7n85iY
+r83d2Z5AiDEoOqsuC7CsDCT6eiaY8xJhEPRdF/d+4niXVOKM6Cm6jBAyvd0zaziGfjk9DgNyp115
+j0WKWa5bIW4xRtVZjc8VX90xJc/bYNaBRHIpAlf2ltTW/+op2znFuCyKGo3Oy+dCMYYFaA6eFN0A
+kLppRQjbbpCBhqcqBT/mhDn4t/lXX0ykeVoQDF7Va/81XwVRHmyjdanPUIPTfPRm94KNPQx96N97
+qA4bLJyuQHCH2u2nFoJavjVsIE4iYdm8UXrNemHcSxH5/mc0zy4EZmFcV5cjjPOGG0jfKq+nwf/Y
+jj4Du9gqsPoUJbJRa4ZDhS4HIxaAjUz7tGM7zMN07RujHv41D198HRaG9Q7DlfEvr10lO1Hm13ZB
+ONFLAzkopR6RctR9q5czxNM+4Gm2KHmgCY0c0f9BckgG/Jou5yD5m6Leie2uPAmvylezkolwQOQv
+T8Jwg0DXJCxr5wkf09XHwQj02w47HAcLQxGEIYbpgNR12KvxAmLBsX5VYc8T1yaw15zLKYs4SgsO
+kI26oQ==
+-----END CERTIFICATE-----
diff --git a/library/certs/comodo.pem b/library/certs/comodo.pem
new file mode 100644
index 000000000..67de1292c
--- /dev/null
+++ b/library/certs/comodo.pem
@@ -0,0 +1,92 @@
+-----BEGIN CERTIFICATE-----
+MIIGCDCCA/CgAwIBAgIQKy5u6tl1NmwUim7bo3yMBzANBgkqhkiG9w0BAQwFADCB
+hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV
+BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwMjEy
+MDAwMDAwWhcNMjkwMjExMjM1OTU5WjCBkDELMAkGA1UEBhMCR0IxGzAZBgNVBAgT
+EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
+Q09NT0RPIENBIExpbWl0ZWQxNjA0BgNVBAMTLUNPTU9ETyBSU0EgRG9tYWluIFZh
+bGlkYXRpb24gU2VjdXJlIFNlcnZlciBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAI7CAhnhoFmk6zg1jSz9AdDTScBkxwtiBUUWOqigwAwCfx3M28Sh
+bXcDow+G+eMGnD4LgYqbSRutA776S9uMIO3Vzl5ljj4Nr0zCsLdFXlIvNN5IJGS0
+Qa4Al/e+Z96e0HqnU4A7fK31llVvl0cKfIWLIpeNs4TgllfQcBhglo/uLQeTnaG6
+ytHNe+nEKpooIZFNb5JPJaXyejXdJtxGpdCsWTWM/06RQ1A/WZMebFEh7lgUq/51
+UHg+TLAchhP6a5i84DuUHoVS3AOTJBhuyydRReZw3iVDpA3hSqXttn7IzW3uLh0n
+c13cRTCAquOyQQuvvUSH2rnlG51/ruWFgqUCAwEAAaOCAWUwggFhMB8GA1UdIwQY
+MBaAFLuvfgI9+qbxPISOre44mOzZMjLUMB0GA1UdDgQWBBSQr2o6lFoL2JDqElZz
+30O0Oija5zAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNV
+HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGwYDVR0gBBQwEjAGBgRVHSAAMAgG
+BmeBDAECATBMBgNVHR8ERTBDMEGgP6A9hjtodHRwOi8vY3JsLmNvbW9kb2NhLmNv
+bS9DT01PRE9SU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDBxBggrBgEFBQcB
+AQRlMGMwOwYIKwYBBQUHMAKGL2h0dHA6Ly9jcnQuY29tb2RvY2EuY29tL0NPTU9E
+T1JTQUFkZFRydXN0Q0EuY3J0MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5jb21v
+ZG9jYS5jb20wDQYJKoZIhvcNAQEMBQADggIBAE4rdk+SHGI2ibp3wScF9BzWRJ2p
+mj6q1WZmAT7qSeaiNbz69t2Vjpk1mA42GHWx3d1Qcnyu3HeIzg/3kCDKo2cuH1Z/
+e+FE6kKVxF0NAVBGFfKBiVlsit2M8RKhjTpCipj4SzR7JzsItG8kO3KdY3RYPBps
+P0/HEZrIqPW1N+8QRcZs2eBelSaz662jue5/DJpmNXMyYE7l3YphLG5SEXdoltMY
+dVEVABt0iN3hxzgEQyjpFv3ZBdRdRydg1vs4O2xyopT4Qhrf7W8GjEXCBgCq5Ojc
+2bXhc3js9iPc0d1sjhqPpepUfJa3w/5Vjo1JXvxku88+vZbrac2/4EjxYoIQ5QxG
+V/Iz2tDIY+3GH5QFlkoakdH368+PUq4NCNk+qKBR6cGHdNXJ93SrLlP7u3r7l+L4
+HyaPs9Kg4DdbKDsx5Q5XLVq4rXmsXiBmGqW5prU5wfWYQ//u+aen/e7KJD2AFsQX
+j4rBYKEMrltDR5FL1ZoXX/nUh8HCjLfn4g8wGTeGrODcQgPmlKidrv0PJFGUzpII
+0fxQ8ANAe4hZ7Q7drNJ3gjTcBpUC2JD5Leo31Rpg0Gcg19hCC0Wvgmje3WYkN5Ap
+lBlGGSW4gNfL1IYoakRwJiNiqZ+Gb7+6kHDSVneFeO/qJakXzlByjAA6quPbYzSf
++AZxAeKCINT+b72x
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFdDCCBFygAwIBAgIQJ2buVutJ846r13Ci/ITeIjANBgkqhkiG9w0BAQwFADBv
+MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk
+ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF
+eHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFow
+gYUxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
+BgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMSswKQYD
+VQQDEyJDT01PRE8gUlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkq
+hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkehUktIKVrGsDSTdxc9EZ3SZKzejfSNw
+AHG8U9/E+ioSj0t/EFa9n3Byt2F/yUsPF6c947AEYe7/EZfH9IY+Cvo+XPmT5jR6
+2RRr55yzhaCCenavcZDX7P0N+pxs+t+wgvQUfvm+xKYvT3+Zf7X8Z0NyvQwA1onr
+ayzT7Y+YHBSrfuXjbvzYqOSSJNpDa2K4Vf3qwbxstovzDo2a5JtsaZn4eEgwRdWt
+4Q08RWD8MpZRJ7xnw8outmvqRsfHIKCxH2XeSAi6pE6p8oNGN4Tr6MyBSENnTnIq
+m1y9TBsoilwie7SrmNnu4FGDwwlGTm0+mfqVF9p8M1dBPI1R7Qu2XK8sYxrfV8g/
+vOldxJuvRZnio1oktLqpVj3Pb6r/SVi+8Kj/9Lit6Tf7urj0Czr56ENCHonYhMsT
+8dm74YlguIwoVqwUHZwK53Hrzw7dPamWoUi9PPevtQ0iTMARgexWO/bTouJbt7IE
+IlKVgJNp6I5MZfGRAy1wdALqi2cVKWlSArvX31BqVUa/oKMoYX9w0MOiqiwhqkfO
+KJwGRXa/ghgntNWutMtQ5mv0TIZxMOmm3xaG4Nj/QN370EKIf6MzOi5cHkERgWPO
+GHFrK+ymircxXDpqR+DDeVnWIBqv8mqYqnK8V0rSS527EPywTEHl7R09XiidnMy/
+s1Hap0flhFMCAwEAAaOB9DCB8TAfBgNVHSMEGDAWgBStvZh6NLQm9/rEJlTvA73g
+JMtUGjAdBgNVHQ4EFgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQD
+AgGGMA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0gBAowCDAGBgRVHSAAMEQGA1UdHwQ9
+MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9BZGRUcnVzdEV4dGVy
+bmFsQ0FSb290LmNybDA1BggrBgEFBQcBAQQpMCcwJQYIKwYBBQUHMAGGGWh0dHA6
+Ly9vY3NwLnVzZXJ0cnVzdC5jb20wDQYJKoZIhvcNAQEMBQADggEBAGS/g/FfmoXQ
+zbihKVcN6Fr30ek+8nYEbvFScLsePP9NDXRqzIGCJdPDoCpdTPW6i6FtxFQJdcfj
+Jw5dhHk3QBN39bSsHNA7qxcS1u80GH4r6XnTq1dFDK8o+tDb5VCViLvfhVdpfZLY
+Uspzgb8c8+a4bmYRBbMelC1/kZWSWfFMzqORcUx8Rww7Cxn2obFshj5cqsQugsv5
+B5a6SE2Q8pTIqXOi6wZ7I53eovNNVZ96YUWYGGjHXkBrI/V5eu+MtWuLt29G9Hvx
+PUsE2JOAWVrgQSQdso8VYFhH2+9uRv0V9dlfmrPb2LjkQLPNlzmuhbsdjrzch5vR
+pu/xO28QOG8=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
+IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
+MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
+FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
+bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
+H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
+uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
+mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
+a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
+E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
+WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
+VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
+Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
+cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
+IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
+AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
+YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
+6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
+Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
+c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
+mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
+-----END CERTIFICATE-----
diff --git a/library/colorbox/README.md b/library/colorbox/README.md
index bc002381e..5e7c1a379 100644
--- a/library/colorbox/README.md
+++ b/library/colorbox/README.md
@@ -1,11 +1,231 @@
-## About ColorBox:
+## About Colorbox:
A customizable lightbox plugin for jQuery. See the [project page](http://jacklmoore.com/colorbox/) for documentation and a demonstration, and the [FAQ](http://jacklmoore.com/colorbox/faq/) for solutions and examples to common issues. Released under the [MIT license](http://www.opensource.org/licenses/mit-license.php).
-## Translations Welcome
-Send me your language configuration files. See /i18n/jquery.colorbox-de.js as an example.
-
## Changelog:
+### Version 1.5.14 - 2014/9/9
+
+* When opening, append Colorbox to the DOM if it was detached for whatever reason. Fixes #645.
+
+### Version 1.5.13 - 2014/8/4
+
+* Fixed regression introduced with v1.5.12 with legacy versions of jQuery (1.3x-1.6x). References #628.
+
+### Version 1.5.12 - 2014/7/31
+
+* Allowed setting the overlay opacity via CSS, by setting Colorbox's opacity property to false. References #628.
+
+### Version 1.5.11 - 2014/7/31
+
+* Fixed bug where setting opacity to 0 was ignored. Fixes #628.
+
+### Version 1.5.10 - 2014/6/26
+
+* Minor misc. tweaks (merging pull requests #611, #612, #615, #619, #620).
+
+### Version 1.5.9 - 2014/4/25
+
+* Fixed inline content bug when using child selectors. Fixes #599
+
+### Version 1.5.8 - 2014/4/15
+
+* Fixed accidental leak of global variable. References #591
+* Enabled strict mode. Fixes #597
+
+### Version 1.5.7 - 2014/4/15
+
+* Fix potential error when calling Colorbox directly. References #591
+* Potentially worked around browser limitation of reporting that an image height and width is 0 immediately after onload. Fixes #535
+
+### Version 1.5.6 - 2014/4/4
+
+* Applied maxWidth and maxHeight to the initialWidth and initialHeight. Fixes #391
+
+### Version 1.5.5 - 2014/3/13
+
+* Allow setting the overlay opacity through CSS, rather than having to use Colorbox's opacity property. Fixes #580
+
+### Version 1.5.4 - 2014/3/7
+
+* Fixed potential issue where IE9+ wouldn't close the modal when clicking on the overlay. Fixes #576
+
+### Version 1.5.3 - 2014/3/4
+
+* Added access to settings object in callbacks.
+
+### Version 1.5.2 - 2014/2/28
+
+* Added svg to image types regex.
+
+### Version 1.5.1 - 2014/2/27
+
+* Fixed regression that broke direct calls to Colorbox, ie. $.colorbox(…)
+
+### Version 1.5.0 - 2014/2/27
+
+* Changed when the className is applied: immediately on open, but only updated immediately prior to transition. Fixes #565
+* Fixed potential style flash if #cboxLoadedContent is given a background. Fixes #567
+* Misc. code cleanup
+
+### Version 1.4.37 - 2014/2/11
+
+* Fixed potential error when resizing. Fixes #254
+* Added Microsoft's JPEG XR to photo detection regex.
+
+### Version 1.4.33 - 2013/10/31
+
+* Fixed an issue where private events propagated to the document in versions of jQuery prior to 1.7. Fixes #525, Fixes #526
+
+### Version 1.4.32 - 2013/10/16
+
+* Updated stylesheets to avoid issue with using `div {max-width:100%}` (Fixes #520)
+
+### Version 1.4.31 - 2013/9/25
+
+* Used setAttribute to set londesc, so that the value is accessible via DOM Node longDesc property #508
+
+### Version 1.4.30 - 2013/9/24
+
+* Added longdesc and aria-describedby attributes to photos. Fixes #508
+
+### Version 1.4.29 - 2013/9/10
+
+* Fixed a slideshow regression from 1.4.27
+* Fixed a potential issue with the starting size of #cboxLoadedContent
+
+### Version 1.4.28 - 2013/9/4
+
+* Fixed a potential issue with using the open property with mixed slideshow and non-slideshow groups
+
+### Version 1.4.27 - 2013/7/16
+
+* Fixed a width calculation issue relating to using margin:auto on #cboxLoadedContent.
+
+### Version 1.4.26 - 2013/6/30
+
+* Fixed a regression in IE7 and IE8 that was causing an error.
+
+### Version 1.4.25 - 2013/6/28
+
+* Use an animation speed of zero between same-sized content (fixed).
+* Removed temporary fix for jQuery UI 1.8
+
+### Version 1.4.24 - 2013/6/24
+
+* Added closeButton option. Set to false to remove the close button.
+
+### Version 1.4.23 - 2013/6/23
+
+* Bugfix loading overlay/graphic append order
+
+### Version 1.4.22 - 2013/6/19
+
+* Updated manifest files for the jQuery plugin repository and Bower (no changes to plugin)
+
+### Version 1.4.21 - 2013/6/6
+
+* Replaced new Image() with document.createElement('img') to avoid a potential bug in Chrome 27.
+
+### Version 1.4.20 - 2013/6/5
+
+* Fixing bug/typo from last update.
+
+### Version 1.4.19 - 2013/6/3
+
+* Fixed bug where Colorbox was capturing ctrl+click on assigned links on windows browsers with jQuery 1.7+, rather than ignoring.
+
+### Version 1.4.18 - 2013/5/30
+
+* Fixed a scroll position issue when using $.colorbox.resize()
+
+### Version 1.4.17 - 2013/5/23
+
+* Possible fix for a Chrome 27 issue (https://github.com/jackmoore/colorbox/pull/438#issuecomment-18334804)
+
+### Version 1.4.16 - 2013/5/20
+
+* Added trapFocus setting to allow disabling of focus trapping
+
+### Version 1.4.15 - 2013/4/22
+
+* Added .webp to list of recognized image extensions
+
+### Version 1.4.14 - 2013/4/16
+
+* Added fadeOut property to control the closing fadeOut speed.
+* Removed longdesc attribute for now.
+
+### Version 1.4.13 - 2013/4/11
+
+* Fixed an error involving IE7/IE8 and legacy versions of jQuery
+
+### Version 1.4.12 - 2013/4/9
+
+* Fixed a potential conflict with Twitter Bootstrap default img styles.
+
+### Version 1.4.11 - 2013/4/9
+
+* Added `type='button'` to buttons to prevent accidental form submission
+* Added alt and longdesc attributes to photo content if they are present on the calling element.
+
+### Version 1.4.10 - 2013/4/2
+
+* Better 'old IE' feature detection that fixes an error with jQuery 2.0.0pre.
+
+### Version 1.4.9 - 2013/4/2
+
+* Fixes bug introduced in previous version.
+
+### Version 1.4.8 - 2013/4/2
+
+* Dropped IE6 support.
+* Fixed other issues with $.colorbox.remove.
+
+### Version 1.4.7 - 2013/4/1
+
+* Prevented an error if $.colorbox.remove is called during the transition.
+
+### Version 1.4.6 - 2013/3/19
+
+* Minor change to work around a jQuery 1.4.2 bug for legacy users.
+
+### Version 1.4.5 - 2013/3/10
+
+* Minor change to apply the close and className properties sooner.
+
+### Version 1.4.4 - 2013/3/10
+
+* Fixed an issue with percent-based heights in iOS
+* Fixed an issue with ajax requests being applied at the wrong time.
+
+### Version 1.4.3 - 2013/2/18
+
+* Made image preloading aware of retina settings.
+
+### Version 1.4.2 - 2013/2/18
+
+* Removed $.contains for compatibility with jQuery 1.3.x
+
+### Version 1.4.1 - 2013/2/14
+
+* Ignored left and right arrow keypresses if combined with the alt key.
+
+### Version 1.4.0 - 2013/2/12
+
+* Better accessibility:
+ * Replaced div controls with buttons
+ * Tabbed navigation confined to modal window
+ * Added aria role
+
+### Version 1.3.34 - 2013/2/4
+
+* Updated manifest for plugins.jquery.com
+
+### Version 1.3.33 - 2013/2/4
+
+* Added retina display properties: retinaImage, retinaUrl, retinaSuffix
+* Fixed iframe scrolling on iOS devices.
+
### Version 1.3.32 - 2013/1/31
* Improved internal event subscribing & fixed event bug introduced in v1.3.21
@@ -16,7 +236,7 @@ Send me your language configuration files. See /i18n/jquery.colorbox-de.js as a
### Version 1.3.30 - 2013/1/25
-* Delayed border-width calculations until after opening, to avoid a bug in FF when using ColorBox in a hidden iframe.
+* Delayed border-width calculations until after opening, to avoid a bug in FF when using Colorbox in a hidden iframe.
### Version 1.3.29 - 2013/1/24
@@ -44,7 +264,7 @@ Send me your language configuration files. See /i18n/jquery.colorbox-de.js as a
### Version 1.3.23 - 2013/1/18
-* Minor bugfix for calling ColorBox on empty jQuery collections without a selector.
+* Minor bugfix for calling Colorbox on empty jQuery collections without a selector.
### Version 1.3.22 - 2013/1/17
@@ -53,7 +273,7 @@ Send me your language configuration files. See /i18n/jquery.colorbox-de.js as a
### Version 1.3.21 - 2013/1/15
Files Changed: *.js
-* Fixed compatability issues with jQuery 1.9
+* Fixed compatibility issues with jQuery 1.9
### Version 1.3.20 - August 15 2012
Files Changed:jquery.colorbox.js
@@ -72,8 +292,8 @@ Files Changed:jquery.colorbox.js, colorbox.css (all)
### Version 1.3.18 - October 07 2011
Files Changed:jquery.colorbox.js/jquery.colorbox-min.js, colorbox.css (all) and example 1's controls.png
-* Fixed a regression where Flash content displayed in ColorBox would be reloaded if the browser window was resized.
-* Added safety check to make sure that ColorBox's markup is only added to the DOM a single time, even if $.colorbox.init() is called multiple times. This will allow site owners to manually initialize ColorBox if they need it before the DOM has finished loading.
+* Fixed a regression where Flash content displayed in Colorbox would be reloaded if the browser window was resized.
+* Added safety check to make sure that Colorbox's markup is only added to the DOM a single time, even if $.colorbox.init() is called multiple times. This will allow site owners to manually initialize Colorbox if they need it before the DOM has finished loading.
* Updated the example index.html files to be HTML5 compliant.
* Changed the slideshow behavior so that it immediately moves to the next slide when the slideshow is started.
* Minor regex bugfix to allow automatic detection of image URLs that include fragments.
@@ -82,8 +302,8 @@ Files Changed:jquery.colorbox.js/jquery.colorbox-min.js, colorbox.css (all) and
Files Changed:jquery.colorbox.js/jquery.colorbox-min.js
* Added properties "top", "bottom", "left" and "right" to specify a position relative to the viewport, rather than using the default centering.
-* Added property "data" to specify GET or POST data when using Ajax. ColorBox's ajax functionality is handled by jQuery's .load() method, so the data property works the same way as it does with .load().
-* Added property "fixed" which can provide fixed positioning for ColorBox, rather than absolute positioning. This will allow ColorBox to remain in a fixed position within the visitors viewport, despite scrolling. IE6 support for this was not added, it will continue to use the default absolute positioning.
+* Added property "data" to specify GET or POST data when using Ajax. Colorbox's ajax functionality is handled by jQuery's .load() method, so the data property works the same way as it does with .load().
+* Added property "fixed" which can provide fixed positioning for Colorbox, rather than absolute positioning. This will allow Colorbox to remain in a fixed position within the visitors viewport, despite scrolling. IE6 support for this was not added, it will continue to use the default absolute positioning.
* Fixed ClearType problem with IE7.
* Minor fixes.
@@ -109,7 +329,7 @@ Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
* Changed the index.html example files to use YouTube's new embedded link format.
-* By default, ColorBox returns focus to the element it was launched from once it closes. This can now be disabled by setting the 'returnFocus' property to false. Focus was causing problems for some users who had their anchor elements inside animated containers.
+* By default, Colorbox returns focus to the element it was launched from once it closes. This can now be disabled by setting the 'returnFocus' property to false. Focus was causing problems for some users who had their anchor elements inside animated containers.
* Minor bug fix involved in using a combination of slideshow and non-slideshow content.
### Version 1.3.12 - October 20 2010
@@ -129,8 +349,8 @@ Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
* Fixed compatibility with jQuery 1.4.3
* The 'open' property now accepts a function as a value, like all of the other properties.
* Preloading now loads the correct href for images when using a dynamic (function) value for the href property.
-* Fixed bug in Safari 3 for Win where ColorBox centered on the document, rather than the visitor's viewport.
-* May have fixed an issue in Opera 10.6+ where ColorBox would rarely/randomly freeze up while switching between photos in a group.
+* Fixed bug in Safari 3 for Win where Colorbox centered on the document, rather than the visitor's viewport.
+* May have fixed an issue in Opera 10.6+ where Colorbox would rarely/randomly freeze up while switching between photos in a group.
* Some functionality better encapsulated & minor performance improvements.
### Version 1.3.9 - July 7 2010
@@ -145,7 +365,7 @@ Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
* Fixed a bug in Chrome where it would sometimes render photos at 0 by 0 width and height (behavior introduced in recent update to Chrome).
* Fixed a bug where the onClosed callback would fire twice (only affected 1.3.7).
-* Fixed a bug in IE7 that existed with some iframed websites that use JS to reposition the viewport caused ColorBox to move out of position.
+* Fixed a bug in IE7 that existed with some iframed websites that use JS to reposition the viewport caused Colorbox to move out of position.
* Abstracted the identifiers (HTML ids & classes, and JS plugin name, method, and events) so that the plugin can be easily rebranded.
* Small changes to improve either code readability or compression.
@@ -156,7 +376,7 @@ Files Changed: jquery.colorbox.js/jquery.colorbox-min.js/index.html
* Resize now accepts 'width', 'innerWidth', 'height' and 'innerHeight'. Example: $.colorbox.resize({width:"100%"})
* Added option (loop:false) to disable looping in a group.
* Added options (escKey:false, arrowKey:false) to disable esc-key and arrow-key bindings.
-* Added method for removing ColorBox from a document: $.colorbox.remove();
+* Added method for removing Colorbox from a document: $.colorbox.remove();
* Fixed a bug where iframed URLs would be truncated if they contained an unencoded apostrophe.
* Now uses the exact href specified on an anchor, rather than the version returned by 'this.href'. This was causing "#example" to be normalized to "http://domain/#example" which interfered with how some users were setting up links to inline content.
* Changed example documents over to HTML5.
@@ -164,7 +384,7 @@ Files Changed: jquery.colorbox.js/jquery.colorbox-min.js/index.html
### Version 1.3.6 - Jan 13 2010
Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
-* Small change to make ColorBox compatible with jQuery 1.4
+* Small change to make Colorbox compatible with jQuery 1.4
### Version 1.3.5 - December 15 2009
Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
@@ -176,27 +396,27 @@ Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
### Version 1.3.4 - December 5 2009
Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
-* Event delegation is now used for elements that ColorBox is assigned to, rather than individual click events.
-* Additional callbacks have been added to represent other stages of ColorBox's lifecycle. Available callbacks, in order of their execution: onOpen, onLoad, onComplete, onCleanup, onClosed These take place at the same time as the event hooks, but will be better suited than the hooks for targeting specific instances of ColorBox.
+* Event delegation is now used for elements that Colorbox is assigned to, rather than individual click events.
+* Additional callbacks have been added to represent other stages of Colorbox's lifecycle. Available callbacks, in order of their execution: onOpen, onLoad, onComplete, onCleanup, onClosed These take place at the same time as the event hooks, but will be better suited than the hooks for targeting specific instances of Colorbox.
* Ajax content is now immediately added to the DOM to be more compatible if that content contains script tags.
* Focus is now returned to the calling element on closing.
* Fixed a bug where maxHeight and maxWidth did not work for non-photo content.
-* Direct calls no longer need 'open:true', it is assumed. Example: `$.fn.colorbox({html:'<p>Hi</p>'});`
+* Direct calls no longer need 'open:true', it is assumed. Example: `$.colorbox({html:'<p>Hi</p>'});`
### Version 1.3.3 - November 7 2009
Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
-* Changed $.fn.colorbox.element() to return a jQuery object rather the DOM element.
+* Changed $.colorbox.element() to return a jQuery object rather the DOM element.
* jQuery.colorbox-min.js is compressed with Google's Closure Compiler rather than YUI Compressor.
### Version 1.3.2 - October 27 2009
Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
-* Added 'innerWidth' and 'innerHeight' options to allow people to easily set the size dimensions for ColorBox, without having to anticipate the size of the borders and buttons.
+* Added 'innerWidth' and 'innerHeight' options to allow people to easily set the size dimensions for Colorbox, without having to anticipate the size of the borders and buttons.
* Renamed 'scrollbars' option to 'scrolling' to be in keeping with the existing HTML attribute. The option now also applies to iframes.
* Bug fix: In Safari, positioning occassionally incorrect when using '100%' dimensions.
* Bug fix: In IE6, the background overlay is briefly not full size when first viewing.
-* Bug fix: In Firefox, opening ColorBox causes a split second shift with a small minority of webpage layouts.
+* Bug fix: In Firefox, opening Colorbox causes a split second shift with a small minority of webpage layouts.
* Simplified code in a few areas.
### Version 1.3.1 - September 16 2009
@@ -208,11 +428,11 @@ Files Changed: jquery.colorbox.js/jquery.colorbox-min.js/colorbox.css/colorbox-i
### Version 1.3.0 - September 15 2009
Files Changed: jquery.colorbox.js/jquery.colorbox-min.js/colorbox.css
-* Added $.fn.colorbox.resize() method to allow ColorBox to resize it's height if it's contents change.
+* Added $.colorbox.resize() method to allow Colorbox to resize it's height if it's contents change.
* Added 'scrollbars' option to allow users to turn off scrollbars when using the resize() method.
* Renamed the 'resize' option to be less ambiguous. It's now 'scalePhotos'.
* Renamed the 'cbox_close' event to be less ambiguous. It's now 'cbox_cleanup'. It is the first thing to happen in the close method while the 'cbox_closed' event is the last to happen.
-* Fixed a bug with the slideshow mouseover graphics that appeared after ColorBox is opened a 2nd time.
+* Fixed a bug with the slideshow mouseover graphics that appeared after Colorbox is opened a 2nd time.
* Fixed a bug where ClearType may not work in IE6&7 if using the fade transition.
* Minor code optimizations to increase compression.
@@ -233,12 +453,12 @@ Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
Files Changed: jquery.colorbox.js/jquery.colorbox-min.js, example stylesheets and background images (core styles have not changed and the updates will not affect existing user themes / old example themes)
* Code cleanup and reduction, better organization and documentation in the full source.
-* Added ability to use functions in place of static values for ColorBox's options (thanks Ken!).
-* Added an option for straight HTML. Example: `$.fn.colorbox({html:'<p>Howdy</p>', open:true})`
-* Added an event for the beginning of the closing process. This is in addition to the event that already existed for when ColorBox had completely closed. 'cbox_close' and 'cbox_closed' respectively.
-* Fixed a minor bug in IE6 that would cause a brief content shift in the parent document when opening ColorBox.
-* Fixed a minor bug in IE6 that would reveal select elements that had a hidden visibility after closing ColorBox.
-* The 'esc' key is unbound now when ColorBox is not open, to avoid any potential conflicts.
+* Added ability to use functions in place of static values for Colorbox's options (thanks Ken!).
+* Added an option for straight HTML. Example: `$.colorbox({html:'<p>Howdy</p>', open:true})`
+* Added an event for the beginning of the closing process. This is in addition to the event that already existed for when Colorbox had completely closed. 'cbox_close' and 'cbox_closed' respectively.
+* Fixed a minor bug in IE6 that would cause a brief content shift in the parent document when opening Colorbox.
+* Fixed a minor bug in IE6 that would reveal select elements that had a hidden visibility after closing Colorbox.
+* The 'esc' key is unbound now when Colorbox is not open, to avoid any potential conflicts.
* Used background sprites for examples 1 & 4. Put IE-only (non-sprite) background images in a separate folder.
* Example themes 1, 3, & 4 received slight visual tweaks.
* Optimized pngs for smaller file size.
@@ -248,8 +468,8 @@ Files Changed: jquery.colorbox.js/jquery.colorbox-min.js, example stylesheets an
Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
* Fixed a bug with fixed width/height images in Opera 9.64.
-* Fixed a bug with trying to set a value for rel during a direct call to ColorBox. Example: `$.fn.colorbox({rel:'foo', open:true});`
-* Changed how href/rel/title settings are determined to avoid users having to manually update ColorBox settings if they use JavaScript to update any of those attributes, after ColorBox has been defined.
+* Fixed a bug with trying to set a value for rel during a direct call to Colorbox. Example: `$.colorbox({rel:'foo', open:true});`
+* Changed how href/rel/title settings are determined to avoid users having to manually update Colorbox settings if they use JavaScript to update any of those attributes, after Colorbox has been defined.
* Fixed a FF3 bug where the back button was disabled after closing an iframe.
### Version 1.2.5 - June 23 2009
@@ -261,13 +481,13 @@ Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
### Version 1.2.4 - June 9 2009
Files Changed: jquery.colorbox.js, jquery.colorbox-min.js
-* Fixed an issue where ColorBox may not close completely if it is closed during a transition animation.
+* Fixed an issue where Colorbox may not close completely if it is closed during a transition animation.
* Minor code reduction.
### Version 1.2.3 - June 4 2009
* Fixed a png transparency stacking issue in IE.
* More accurate Ajax auto-sizing if the user was depending on the #cboxLoadedContent ID for CSS styling.
-* Added a public function for returning the current html element that ColorBox is associated with. Example use: var that = $.fn.colorbox.element();
+* Added a public function for returning the current html element that Colorbox is associated with. Example use: var that = $.colorbox.element();
* Added bicubic scaling for resized images in the original IE7.
* Removed the IE6 stylesheet and png files from Example 3. It now uses the same png file for the controls that the rest of the browsers use (an alpha transparency PNG8). This example now only has 2 graphics files and 1 stylesheet.
@@ -277,19 +497,19 @@ Files Changed: jquery.colorbox.js, jquery.colorbox-min.js
### Version 1.2.1 - May 28 2009
* Note: If you are upgrading, update your jquery.colorbox.js and colorbox.css files.
* Added photo resizing.
-* Added a maximum width and maximum height. Example: {height:800, maxHeight:'100%'}, would allow the box to be a maximum potential height of 800px, instead of a fixed height of 800px. With maxHeight of 100% the height of ColorBox cannot exceed the height of the browser window.
-* Added 'rel' setting to add the ability to set an alternative rel for any ColorBox call. This allows the user to group any combination of elements together for a gallery, or to override an existing rel. attribute so those element are not grouped together, without having to alter their rel in the HTML.
-* Added a 'photo' setting to force ColorBox to display a link as a photo. Use this when automatic photo detection fails (such as using a url like 'photo.php' instead of 'photo.jpg', 'photo.jpg#1', or 'photo.jpg?pic=1')
-* Removed the need to ever create disposable elements to call colorbox on. ColorBox can now be called directly, without being associated with any existing element, by using the following format:
- `$.fn.colorbox({open:true, href:'yourLink.xxx'});`
-* ColorBox settings are now persistent and unique for each element. This allows for extremely flexible options for individual elements. You could use this to create a gallery in which each page in the gallery has different settings. One could be a photo with a fade transition, next could be an inline element with an elastic transition with a set width and height, etc.
+* Added a maximum width and maximum height. Example: {height:800, maxHeight:'100%'}, would allow the box to be a maximum potential height of 800px, instead of a fixed height of 800px. With maxHeight of 100% the height of Colorbox cannot exceed the height of the browser window.
+* Added 'rel' setting to add the ability to set an alternative rel for any Colorbox call. This allows the user to group any combination of elements together for a gallery, or to override an existing rel. attribute so those element are not grouped together, without having to alter their rel in the HTML.
+* Added a 'photo' setting to force Colorbox to display a link as a photo. Use this when automatic photo detection fails (such as using a url like 'photo.php' instead of 'photo.jpg', 'photo.jpg#1', or 'photo.jpg?pic=1')
+* Removed the need to ever create disposable elements to call colorbox on. Colorbox can now be called directly, without being associated with any existing element, by using the following format:
+ `$.colorbox({open:true, href:'yourLink.xxx'});`
+* Colorbox settings are now persistent and unique for each element. This allows for extremely flexible options for individual elements. You could use this to create a gallery in which each page in the gallery has different settings. One could be a photo with a fade transition, next could be an inline element with an elastic transition with a set width and height, etc.
* For user callbacks, 'this' now refers to the element colorbox was opened from.
* Fixed a minor grouping issue with IE6, when transition type is set to 'none'.
* Added an Adobe Illustrator file that contains the borders and buttons used in the various examples.
### Version 1.2 - May 13 2009
* Added a slideshow feature.
-* Added re-positioning on browser resize. If the browser is resized, ColorBox will recenter itself onscreen.
+* Added re-positioning on browser resize. If the browser is resized, Colorbox will recenter itself onscreen.
* Added hooks for key events: cbox_open, cbox_load, cbox_complete, cbox_closed.
* Fixed an IE transparency-stacking problem, where transparent PNGs would show through to the background overlay.
* Fixed an IE iframe issue where the ifame might shift up and to the left under certain circumstances.
@@ -299,54 +519,54 @@ Files Changed: jquery.colorbox.js, jquery.colorbox-min.js
* Changed how the JS is structured to be better organized and increase compression. Increased documentation.
* Changed CSS :hover states to a .hover class. This sidesteps a minor IE8 bug with css hover states and allows easier access to hover state user styles from the JavaScript.
* Changed: elements added to the DOM have new ID's. The naming is more consistent and less likely to cause conflicts with existing website stylesheets. All stylesheets have been updated.
-* Changed the behavior for prev/next links so that ColorBox does not get hung up on broken links. A visitor can now skip through broken or long-loading links by clicking prev/next buttons.
+* Changed the behavior for prev/next links so that Colorbox does not get hung up on broken links. A visitor can now skip through broken or long-loading links by clicking prev/next buttons.
* Changed the naming of variables in the parameter map to be more concise and intuitive.
* Removed colorbox.css. Combined the colorbox.css styles with jquery.colorbox.js: the css file was not large enough to warrant being a separate file.
### Version 1.1.6 - April 28 2009
* Prevented the default action of the next & previous anchors and the left and right keys for gallery mode.
-* Fixed a bug where the title element was being added back to the DOM when closing ColorBox while using inline content.
+* Fixed a bug where the title element was being added back to the DOM when closing Colorbox while using inline content.
* Fixed a bug where IE7 would crash for example 2.
* Smaller filesize: removed a small amount of unused code and rewrote the HTML injection with less syntax.
-* Added a public method for closing ColorBox: $.fn.colorbox.close(). This will allow iframe users to add an event to close ColorBox without having to create an additional function.
+* Added a public method for closing Colorbox: $.colorbox.close(). This will allow iframe users to add an event to close Colorbox without having to create an additional function.
### Version 1.1.5 - April 11 2009
-* Fixed minor issues with exiting ColorBox.
+* Fixed minor issues with exiting Colorbox.
### Version 1.1.4 - April 08 2009
-* Fixed a bug in the fade transition where ColorBox not close completely if instructed to close during the fade-in portion of the transition.
+* Fixed a bug in the fade transition where Colorbox not close completely if instructed to close during the fade-in portion of the transition.
### Version 1.1.3 - April 06 2009
-* Fixed an IE6&7 issue with using ColorBox to display animated GIFs.
+* Fixed an IE6&7 issue with using Colorbox to display animated GIFs.
### Version 1.1.2 - April 05 2009
-* Added ability to change content when ColorBox is already open.
+* Added ability to change content when Colorbox is already open.
* Added vertical photo centering now works for all browsers (this feature previously excluded IE6&7).
* Added namespacing to the esc-key keydown event for people who want to disable it: "keydown.colorClose"
-* Added 'title' setting to add the ability to set an alternative title for any ColorBox call.
+* Added 'title' setting to add the ability to set an alternative title for any Colorbox call.
* Fixed rollover navigation issue with IE8. (Added JS-based rollover state due to a browser-bug.)
* Fixed an overflow issue for when the fixed width/height is smaller than the size of a photo.
-* Fixed a bug in the fade transition where the border would still come up if ColorBox was closed mid-transition.
+* Fixed a bug in the fade transition where the border would still come up if Colorbox was closed mid-transition.
* Switch from JSMin to Yui Compressor for minification. Minified code now under 7KB.
### Version 1.1.1 - March 31 2009
* More robust image detection regex. Now detects image file types with url fragments and/or query strings.
* Added 'nofollow' exception to rel grouping.
-* Changed how images are loaded into the DOM to prevent premature size calculation by ColorBox.
+* Changed how images are loaded into the DOM to prevent premature size calculation by Colorbox.
* Added timestamp to iframe name to prevent caching - this was a problem in some browsers if the user had multiple iframes and the visitor left the page and came back, or if they refreshed the page.
### Version 1.1.0 - March 21 2009
* Animation is now much smoother and less resource intensive.
* Added support for % sizing.
* Callback option added.
-* Inline content now preserves JavaScript events, and changes made while ColorBox is open are also preserved.
-* Added 'href' setting to add the ability to set an alternative href for any anchor, or to assign the ColorBox event to non-anchors.
+* Inline content now preserves JavaScript events, and changes made while Colorbox is open are also preserved.
+* Added 'href' setting to add the ability to set an alternative href for any anchor, or to assign the Colorbox event to non-anchors.
Example: $('button').colorbox({'href':'process.php'})
Example: $('a[href='http://msn.com']).colorbox({'href':'http://google.com', iframe:true});
* Photos are now horizontally centered if they are smaller than the lightbox size. Also vertically centered for browsers newer than IE7.
* Buttons in the examples are now included in the 'protected zone'. The lightbox will never expand it's borders or buttons beyond an accessible area of the screen.
* Keypress events don't queue up by holding down the arrow keys.
-* Added option to close ColorBox by clicking on the background overlay.
+* Added option to close Colorbox by clicking on the background overlay.
* Added 'none' transition setting.
* Changed 'contentIframe' and 'contentInline' to 'inline' and 'iframe'. Removed 'contentAjax' because it is automatically assumed for non-image file types.
* Changed 'contentWidth' and 'contentHeight' to 'fixedWidth' and 'fixedHeight'. These sizes now reflect the total size of the lightbox, not just the inner content. This is so users can accurately anticipate % sizes without fear of creating scrollbars.
diff --git a/library/colorbox/bower.json b/library/colorbox/bower.json
new file mode 100644
index 000000000..6cdfb9bab
--- /dev/null
+++ b/library/colorbox/bower.json
@@ -0,0 +1,42 @@
+{
+ "name": "jquery-colorbox",
+ "description": "jQuery lightbox and modal window plugin",
+ "version": "1.5.14",
+ "dependencies": {
+ "jquery": ">=1.3.2"
+ },
+ "keywords": [
+ "modal",
+ "lightbox",
+ "window",
+ "popup",
+ "ui",
+ "jQuery",
+ "jquery-plugin"
+ ],
+ "authors": [
+ {
+ "name": "Jack Moore",
+ "url": "http://www.jacklmoore.com",
+ "email": "hello@jacklmoore.com"
+ }
+ ],
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "http://www.opensource.org/licenses/mit-license.php"
+ }
+ ],
+ "homepage": "http://www.jacklmoore.com/colorbox",
+ "main": "jquery.colorbox.js",
+ "ignore": [
+ "colorbox.jquery.json",
+ "colorbox.ai",
+ "content",
+ "example1/index.html",
+ "example2/index.html",
+ "example3/index.html",
+ "example4/index.html",
+ "example5/index.html"
+ ]
+} \ No newline at end of file
diff --git a/library/colorbox/colorbox.css b/library/colorbox/colorbox.css
deleted file mode 100644
index 544a76f3b..000000000
--- a/library/colorbox/colorbox.css
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- ColorBox Core Style:
- The following CSS is consistent between example themes and should not be altered.
-*/
-#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
-#cboxOverlay{position:fixed; width:100%; height:100%;}
-#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
-#cboxContent{position:relative;}
-#cboxLoadedContent{overflow:auto;}
-#cboxTitle{margin:0;}
-#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
-#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
-.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none;}
-.cboxIframe{width:100%; height:100%; display:block; border:0;}
-#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;}
-
-/*
- User Style:
- Change the following styles to modify the appearance of ColorBox. They are
- ordered & tabbed in a way that represents the nesting of the generated HTML.
-*/
-#cboxOverlay{background:#000;}
-#colorbox{}
- #cboxTopLeft{width:14px; height:14px; background:url(images/controls.png) no-repeat 0 0;}
- #cboxTopCenter{height:14px; background:url(images/border.png) repeat-x top left;}
- #cboxTopRight{width:14px; height:14px; background:url(images/controls.png) no-repeat -36px 0;}
- #cboxBottomLeft{width:14px; height:43px; background:url(images/controls.png) no-repeat 0 -32px;}
- #cboxBottomCenter{height:43px; background:url(images/border.png) repeat-x bottom left;}
- #cboxBottomRight{width:14px; height:43px; background:url(images/controls.png) no-repeat -36px -32px;}
- #cboxMiddleLeft{width:14px; background:url(images/controls.png) repeat-y -175px 0;}
- #cboxMiddleRight{width:14px; background:url(images/controls.png) repeat-y -211px 0;}
- #cboxContent{background:#fff; overflow:visible;}
- .cboxIframe{background:#fff;}
- #cboxError{padding:50px; border:1px solid #ccc;}
- #cboxLoadedContent{margin-bottom:5px;}
- #cboxLoadingOverlay{background:url(images/loading_background.png) no-repeat center center;}
- #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
- #cboxTitle{position:absolute; bottom:-25px; left:0; text-align:center; width:100%; font-weight:bold; color:#7C7C7C;}
- #cboxCurrent{position:absolute; bottom:-25px; left:58px; font-weight:bold; color:#7C7C7C;}
-
- #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{position:absolute; bottom:-29px; background:url(images/controls.png) no-repeat 0px 0px; width:23px; height:23px; text-indent:-9999px;}
- #cboxPrevious{left:0px; background-position: -51px -25px;}
- #cboxPrevious:hover{background-position:-51px 0px;}
- #cboxNext{left:27px; background-position:-75px -25px;}
- #cboxNext:hover{background-position:-75px 0px;}
- #cboxClose{right:0; background-position:-100px -25px;}
- #cboxClose:hover{background-position:-100px 0px;}
-
- .cboxSlideshow_on #cboxSlideshow{background-position:-125px 0px; right:27px;}
- .cboxSlideshow_on #cboxSlideshow:hover{background-position:-150px 0px;}
- .cboxSlideshow_off #cboxSlideshow{background-position:-150px -25px; right:27px;}
- .cboxSlideshow_off #cboxSlideshow:hover{background-position:-125px 0px;} \ No newline at end of file
diff --git a/library/colorbox/colorbox.jquery.json b/library/colorbox/colorbox.jquery.json
deleted file mode 100644
index dd517a5f4..000000000
--- a/library/colorbox/colorbox.jquery.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "name": "colorbox",
- "title": "ColorBox",
- "description": "A lightweight customizable lightbox plugin",
- "keywords": [
- "modal",
- "lightbox",
- "window",
- "popup",
- "ui"
- ],
- "version": "1.3.32",
- "author": {
- "name": "Jack Moore",
- "url": "http://www.jacklmoore.com",
- "email": "jack@colorpowered.com"
- },
- "licenses": [
- {
- "type": "MIT",
- "url": "http://www.opensource.org/licenses/mit-license.php"
- }
- ],
- "homepage": "http://jacklmoore.com/colorbox",
- "demo": "http://jacklmoore.com/colorbox",
- "download": "http://jacklmoore.com/colorbox/colorbox.zip",
- "dependencies": {
- "jquery": ">=1.3.2"
- }
-} \ No newline at end of file
diff --git a/library/colorbox/component.json b/library/colorbox/component.json
deleted file mode 100644
index 171764fbf..000000000
--- a/library/colorbox/component.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "name": "jquery-autosize",
- "version": "1.3.32",
- "main": "./jquery.autosize.js",
- "dependencies": {
- "jquery": ">=1.3.2"
- }
-} \ No newline at end of file
diff --git a/library/colorbox/content/daisy.jpg b/library/colorbox/content/daisy.jpg
new file mode 100644
index 000000000..16da6bdb0
--- /dev/null
+++ b/library/colorbox/content/daisy.jpg
Binary files differ
diff --git a/library/colorbox/content/daisy@2x.jpg b/library/colorbox/content/daisy@2x.jpg
new file mode 100644
index 000000000..f2e688dc2
--- /dev/null
+++ b/library/colorbox/content/daisy@2x.jpg
Binary files differ
diff --git a/library/colorbox/content/homer.jpg b/library/colorbox/content/homer.jpg
index 87ec76c99..864c17a9f 100644
--- a/library/colorbox/content/homer.jpg
+++ b/library/colorbox/content/homer.jpg
Binary files differ
diff --git a/library/colorbox/content/marylou.jpg b/library/colorbox/content/marylou.jpg
index 4c717d276..f113fbf6c 100644
--- a/library/colorbox/content/marylou.jpg
+++ b/library/colorbox/content/marylou.jpg
Binary files differ
diff --git a/library/colorbox/content/ohoopee1.jpg b/library/colorbox/content/ohoopee1.jpg
index aae19a3e6..007fa58a8 100644
--- a/library/colorbox/content/ohoopee1.jpg
+++ b/library/colorbox/content/ohoopee1.jpg
Binary files differ
diff --git a/library/colorbox/content/ohoopee2.jpg b/library/colorbox/content/ohoopee2.jpg
index 206894489..e56bb0f32 100644
--- a/library/colorbox/content/ohoopee2.jpg
+++ b/library/colorbox/content/ohoopee2.jpg
Binary files differ
diff --git a/library/colorbox/content/ohoopee3.jpg b/library/colorbox/content/ohoopee3.jpg
index 4d64d2400..7cc1c7f97 100644
--- a/library/colorbox/content/ohoopee3.jpg
+++ b/library/colorbox/content/ohoopee3.jpg
Binary files differ
diff --git a/library/colorbox/example1/colorbox.css b/library/colorbox/example1/colorbox.css
index 5ee3feba9..8a4ff998c 100644
--- a/library/colorbox/example1/colorbox.css
+++ b/library/colorbox/example1/colorbox.css
@@ -1,26 +1,27 @@
/*
- ColorBox Core Style:
+ Colorbox Core Style:
The following CSS is consistent between example themes and should not be altered.
*/
#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
+#cboxWrapper {max-width:none;}
#cboxOverlay{position:fixed; width:100%; height:100%;}
#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
#cboxContent{position:relative;}
-#cboxLoadedContent{overflow:auto;}
+#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;}
#cboxTitle{margin:0;}
#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
-.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none;}
-.cboxIframe{width:100%; height:100%; display:block; border:0;}
+.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;}
+.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;}
#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;}
/*
User Style:
- Change the following styles to modify the appearance of ColorBox. They are
+ Change the following styles to modify the appearance of Colorbox. They are
ordered & tabbed in a way that represents the nesting of the generated HTML.
*/
-#cboxOverlay{background:url(images/overlay.png) repeat 0 0;}
-#colorbox{}
+#cboxOverlay{background:url(images/overlay.png) repeat 0 0; opacity: 0.9; filter: alpha(opacity = 90);}
+#colorbox{outline:0;}
#cboxTopLeft{width:21px; height:21px; background:url(images/controls.png) no-repeat -101px 0;}
#cboxTopRight{width:21px; height:21px; background:url(images/controls.png) no-repeat -130px 0;}
#cboxBottomLeft{width:21px; height:21px; background:url(images/controls.png) no-repeat -101px -29px;}
@@ -35,13 +36,20 @@
#cboxLoadedContent{margin-bottom:28px;}
#cboxTitle{position:absolute; bottom:4px; left:0; text-align:center; width:100%; color:#949494;}
#cboxCurrent{position:absolute; bottom:4px; left:58px; color:#949494;}
+ #cboxLoadingOverlay{background:url(images/loading_background.png) no-repeat center center;}
+ #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
+
+ /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
+ #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; }
+
+ /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
+ #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;}
+
#cboxSlideshow{position:absolute; bottom:4px; right:30px; color:#0092ef;}
#cboxPrevious{position:absolute; bottom:0; left:0; background:url(images/controls.png) no-repeat -75px 0; width:25px; height:25px; text-indent:-9999px;}
#cboxPrevious:hover{background-position:-75px -25px;}
#cboxNext{position:absolute; bottom:0; left:27px; background:url(images/controls.png) no-repeat -50px 0; width:25px; height:25px; text-indent:-9999px;}
#cboxNext:hover{background-position:-50px -25px;}
- #cboxLoadingOverlay{background:url(images/loading_background.png) no-repeat center center;}
- #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
#cboxClose{position:absolute; bottom:0; right:0; background:url(images/controls.png) no-repeat -25px 0; width:25px; height:25px; text-indent:-9999px;}
#cboxClose:hover{background-position:-25px -25px;}
@@ -59,28 +67,4 @@
.cboxIE #cboxMiddleLeft,
.cboxIE #cboxMiddleRight {
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF);
-}
-
-/*
- The following provides PNG transparency support for IE6
- Feel free to remove this and the /ie6/ directory if you have dropped IE6 support.
-*/
-.cboxIE6 #cboxTopLeft{background:url(images/ie6/borderTopLeft.png);}
-.cboxIE6 #cboxTopCenter{background:url(images/ie6/borderTopCenter.png);}
-.cboxIE6 #cboxTopRight{background:url(images/ie6/borderTopRight.png);}
-.cboxIE6 #cboxBottomLeft{background:url(images/ie6/borderBottomLeft.png);}
-.cboxIE6 #cboxBottomCenter{background:url(images/ie6/borderBottomCenter.png);}
-.cboxIE6 #cboxBottomRight{background:url(images/ie6/borderBottomRight.png);}
-.cboxIE6 #cboxMiddleLeft{background:url(images/ie6/borderMiddleLeft.png);}
-.cboxIE6 #cboxMiddleRight{background:url(images/ie6/borderMiddleRight.png);}
-
-.cboxIE6 #cboxTopLeft,
-.cboxIE6 #cboxTopCenter,
-.cboxIE6 #cboxTopRight,
-.cboxIE6 #cboxBottomLeft,
-.cboxIE6 #cboxBottomCenter,
-.cboxIE6 #cboxBottomRight,
-.cboxIE6 #cboxMiddleLeft,
-.cboxIE6 #cboxMiddleRight {
- _behavior: expression(this.src = this.src ? this.src : this.currentStyle.backgroundImage.split('"')[1], this.style.background = "none", this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=" + this.src + ", sizingMethod='scale')");
-}
+} \ No newline at end of file
diff --git a/library/colorbox/example1/images/border.png b/library/colorbox/example1/images/border.png
index f463a10d8..9386f3504 100644
--- a/library/colorbox/example1/images/border.png
+++ b/library/colorbox/example1/images/border.png
Binary files differ
diff --git a/library/colorbox/example1/images/controls.png b/library/colorbox/example1/images/controls.png
index dcfd6fb9f..1ec3cb1c8 100644
--- a/library/colorbox/example1/images/controls.png
+++ b/library/colorbox/example1/images/controls.png
Binary files differ
diff --git a/library/colorbox/example1/images/ie6/borderBottomCenter.png b/library/colorbox/example1/images/ie6/borderBottomCenter.png
deleted file mode 100644
index 0d4475edf..000000000
--- a/library/colorbox/example1/images/ie6/borderBottomCenter.png
+++ /dev/null
Binary files differ
diff --git a/library/colorbox/example1/images/ie6/borderBottomLeft.png b/library/colorbox/example1/images/ie6/borderBottomLeft.png
deleted file mode 100644
index 2775eba89..000000000
--- a/library/colorbox/example1/images/ie6/borderBottomLeft.png
+++ /dev/null
Binary files differ
diff --git a/library/colorbox/example1/images/ie6/borderBottomRight.png b/library/colorbox/example1/images/ie6/borderBottomRight.png
deleted file mode 100644
index f7f51379c..000000000
--- a/library/colorbox/example1/images/ie6/borderBottomRight.png
+++ /dev/null
Binary files differ
diff --git a/library/colorbox/example1/images/ie6/borderMiddleLeft.png b/library/colorbox/example1/images/ie6/borderMiddleLeft.png
deleted file mode 100644
index a2d63d156..000000000
--- a/library/colorbox/example1/images/ie6/borderMiddleLeft.png
+++ /dev/null
Binary files differ
diff --git a/library/colorbox/example1/images/ie6/borderMiddleRight.png b/library/colorbox/example1/images/ie6/borderMiddleRight.png
deleted file mode 100644
index fd7c3e849..000000000
--- a/library/colorbox/example1/images/ie6/borderMiddleRight.png
+++ /dev/null
Binary files differ
diff --git a/library/colorbox/example1/images/ie6/borderTopCenter.png b/library/colorbox/example1/images/ie6/borderTopCenter.png
deleted file mode 100644
index 2937a9cf9..000000000
--- a/library/colorbox/example1/images/ie6/borderTopCenter.png
+++ /dev/null
Binary files differ
diff --git a/library/colorbox/example1/images/ie6/borderTopLeft.png b/library/colorbox/example1/images/ie6/borderTopLeft.png
deleted file mode 100644
index f9d458b5b..000000000
--- a/library/colorbox/example1/images/ie6/borderTopLeft.png
+++ /dev/null
Binary files differ
diff --git a/library/colorbox/example1/images/ie6/borderTopRight.png b/library/colorbox/example1/images/ie6/borderTopRight.png
deleted file mode 100644
index 74b8583cf..000000000
--- a/library/colorbox/example1/images/ie6/borderTopRight.png
+++ /dev/null
Binary files differ
diff --git a/library/colorbox/example1/images/loading.gif b/library/colorbox/example1/images/loading.gif
index b4695d811..0325c8dbf 100644
--- a/library/colorbox/example1/images/loading.gif
+++ b/library/colorbox/example1/images/loading.gif
Binary files differ
diff --git a/library/colorbox/example1/images/loading_background.png b/library/colorbox/example1/images/loading_background.png
index 6ae83e697..23a336b39 100644
--- a/library/colorbox/example1/images/loading_background.png
+++ b/library/colorbox/example1/images/loading_background.png
Binary files differ
diff --git a/library/colorbox/example1/images/overlay.png b/library/colorbox/example1/images/overlay.png
index 53ea98f70..10362a423 100644
--- a/library/colorbox/example1/images/overlay.png
+++ b/library/colorbox/example1/images/overlay.png
Binary files differ
diff --git a/library/colorbox/example1/index.html b/library/colorbox/example1/index.html
index 727fe78d7..8f10b9306 100644
--- a/library/colorbox/example1/index.html
+++ b/library/colorbox/example1/index.html
@@ -2,24 +2,24 @@
<html>
<head>
<meta charset='utf-8'/>
- <title>ColorBox Examples</title>
+ <title>Colorbox Examples</title>
<style>
body{font:12px/1.2 Verdana, sans-serif; padding:0 10px;}
a:link, a:visited{text-decoration:none; color:#416CE5; border-bottom:1px solid #416CE5;}
h2{font-size:13px; margin:15px 0 0 0;}
</style>
<link rel="stylesheet" href="colorbox.css" />
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="../jquery.colorbox.js"></script>
<script>
$(document).ready(function(){
- //Examples of how to assign the ColorBox event to elements
+ //Examples of how to assign the Colorbox event to elements
$(".group1").colorbox({rel:'group1'});
$(".group2").colorbox({rel:'group2', transition:"fade"});
$(".group3").colorbox({rel:'group3', transition:"none", width:"75%", height:"75%"});
$(".group4").colorbox({rel:'group4', slideshow:true});
$(".ajax").colorbox();
- $(".youtube").colorbox({iframe:true, innerWidth:425, innerHeight:344});
+ $(".youtube").colorbox({iframe:true, innerWidth:640, innerHeight:390});
$(".vimeo").colorbox({iframe:true, innerWidth:500, innerHeight:409});
$(".iframe").colorbox({iframe:true, width:"80%", height:"80%"});
$(".inline").colorbox({inline:true, width:"50%"});
@@ -30,6 +30,9 @@
onCleanup:function(){ alert('onCleanup: colorbox has begun the close process'); },
onClosed:function(){ alert('onClosed: colorbox has completely closed'); }
});
+
+ $('.non-retina').colorbox({rel:'group5', transition:'none'})
+ $('.retina').colorbox({rel:'group5', transition:'none', retinaImage:true, retinaUrl:true});
//Example of preserving a JavaScript event for inline calls.
$("#click").click(function(){
@@ -40,7 +43,7 @@
</script>
</head>
<body>
- <h1>ColorBox Demonstration</h1>
+ <h1>Colorbox Demonstration</h1>
<h2>Elastic Transition</h2>
<p><a class="group1" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
<p><a class="group1" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
@@ -63,7 +66,7 @@
<h2>Other Content Types</h2>
<p><a class='ajax' href="../content/ajax.html" title="Homer Defined">Outside HTML (Ajax)</a></p>
- <p><a class='youtube' href="http://www.youtube.com/embed/617ANIA5Rqs?rel=0&amp;wmode=transparent" title="The Knife: We Share Our Mother's Health">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
+ <p><a class='youtube' href="http://www.youtube.com/embed/VOJyrQa_WR4?rel=0&amp;wmode=transparent">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
<p><a class='vimeo' href="http://player.vimeo.com/video/2285902" title="R&ouml;yksopp: Remind Me">Flash / Video (Iframe/Direct Link To Vimeo)</a></p>
<p><a class='iframe' href="http://wikipedia.com">Outside Webpage (Iframe)</a></p>
<p><a class='inline' href="#inline_content">Inline HTML</a></p>
@@ -71,6 +74,11 @@
<h2>Demonstration of using callbacks</h2>
<p><a class='callbacks' href="../content/marylou.jpg" title="Marylou on Cumberland Island">Example with alerts</a>. Callbacks and event-hooks allow users to extend functionality without having to rewrite parts of the plugin.</p>
+
+ <h2>Retina Images</h2>
+ <p><a class="retina" href="../content/daisy.jpg" title="Retina">Retina</a></p>
+ <p><a class="non-retina" href="../content/daisy.jpg" title="Non-Retina">Non-Retina</a></p>
+
<!-- This contains the hidden content for inline calls -->
<div style='display:none'>
<div id='inline_content' style='padding:10px; background:#fff;'>
@@ -78,7 +86,7 @@
<p>The inline option preserves bound JavaScript events and changes, and it puts the content back where it came from when it is closed.</p>
<p><a id="click" href="#" style='padding:5px; background:#ccc;'>Click me, it will be preserved!</a></p>
- <p><strong>If you try to open a new ColorBox while it is already open, it will update itself with the new content.</strong></p>
+ <p><strong>If you try to open a new Colorbox while it is already open, it will update itself with the new content.</strong></p>
<p>Updating Content Example:<br />
<a class="ajax" href="../content/ajax.html">Click here to load new content</a></p>
</div>
diff --git a/library/colorbox/example2/colorbox.css b/library/colorbox/example2/colorbox.css
index 3bb3d8121..0a6710404 100644
--- a/library/colorbox/example2/colorbox.css
+++ b/library/colorbox/example2/colorbox.css
@@ -1,27 +1,28 @@
/*
- ColorBox Core Style:
+ Colorbox Core Style:
The following CSS is consistent between example themes and should not be altered.
*/
#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
+#cboxWrapper {max-width:none;}
#cboxOverlay{position:fixed; width:100%; height:100%;}
#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
#cboxContent{position:relative;}
-#cboxLoadedContent{overflow:auto;}
+#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;}
#cboxTitle{margin:0;}
#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
-.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none;}
-.cboxIframe{width:100%; height:100%; display:block; border:0;}
+.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;}
+.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;}
#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;}
/*
User Style:
- Change the following styles to modify the appearance of ColorBox. They are
+ Change the following styles to modify the appearance of Colorbox. They are
ordered & tabbed in a way that represents the nesting of the generated HTML.
*/
-#cboxOverlay{background:#fff;}
-#colorbox{}
- #cboxContent{margin-top:32px; overflow:visible;}
+#cboxOverlay{background:#fff; opacity: 0.9; filter: alpha(opacity = 90);}
+#colorbox{outline:0;}
+ #cboxContent{margin-top:32px; overflow:visible; background:#000;}
.cboxIframe{background:#fff;}
#cboxError{padding:50px; border:1px solid #ccc;}
#cboxLoadedContent{background:#000; padding:1px;}
@@ -29,7 +30,13 @@
#cboxLoadingOverlay{background:#000;}
#cboxTitle{position:absolute; top:-22px; left:0; color:#000;}
#cboxCurrent{position:absolute; top:-22px; right:205px; text-indent:-9999px;}
- #cboxSlideshow, #cboxPrevious, #cboxNext, #cboxClose{text-indent:-9999px; width:20px; height:20px; position:absolute; top:-20px; background:url(images/controls.png) no-repeat 0 0;}
+
+ /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
+ #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; text-indent:-9999px; width:20px; height:20px; position:absolute; top:-20px; background:url(images/controls.png) no-repeat 0 0;}
+
+ /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
+ #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;}
+
#cboxPrevious{background-position:0px 0px; right:44px;}
#cboxPrevious:hover{background-position:0px -25px;}
#cboxNext{background-position:-25px 0px; right:22px;}
diff --git a/library/colorbox/example2/images/controls.png b/library/colorbox/example2/images/controls.png
index 8569b57f1..36f526992 100644
--- a/library/colorbox/example2/images/controls.png
+++ b/library/colorbox/example2/images/controls.png
Binary files differ
diff --git a/library/colorbox/example2/images/loading.gif b/library/colorbox/example2/images/loading.gif
index 19c67bbd0..a32df5c08 100644
--- a/library/colorbox/example2/images/loading.gif
+++ b/library/colorbox/example2/images/loading.gif
Binary files differ
diff --git a/library/colorbox/example2/index.html b/library/colorbox/example2/index.html
index 727fe78d7..8f10b9306 100644
--- a/library/colorbox/example2/index.html
+++ b/library/colorbox/example2/index.html
@@ -2,24 +2,24 @@
<html>
<head>
<meta charset='utf-8'/>
- <title>ColorBox Examples</title>
+ <title>Colorbox Examples</title>
<style>
body{font:12px/1.2 Verdana, sans-serif; padding:0 10px;}
a:link, a:visited{text-decoration:none; color:#416CE5; border-bottom:1px solid #416CE5;}
h2{font-size:13px; margin:15px 0 0 0;}
</style>
<link rel="stylesheet" href="colorbox.css" />
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="../jquery.colorbox.js"></script>
<script>
$(document).ready(function(){
- //Examples of how to assign the ColorBox event to elements
+ //Examples of how to assign the Colorbox event to elements
$(".group1").colorbox({rel:'group1'});
$(".group2").colorbox({rel:'group2', transition:"fade"});
$(".group3").colorbox({rel:'group3', transition:"none", width:"75%", height:"75%"});
$(".group4").colorbox({rel:'group4', slideshow:true});
$(".ajax").colorbox();
- $(".youtube").colorbox({iframe:true, innerWidth:425, innerHeight:344});
+ $(".youtube").colorbox({iframe:true, innerWidth:640, innerHeight:390});
$(".vimeo").colorbox({iframe:true, innerWidth:500, innerHeight:409});
$(".iframe").colorbox({iframe:true, width:"80%", height:"80%"});
$(".inline").colorbox({inline:true, width:"50%"});
@@ -30,6 +30,9 @@
onCleanup:function(){ alert('onCleanup: colorbox has begun the close process'); },
onClosed:function(){ alert('onClosed: colorbox has completely closed'); }
});
+
+ $('.non-retina').colorbox({rel:'group5', transition:'none'})
+ $('.retina').colorbox({rel:'group5', transition:'none', retinaImage:true, retinaUrl:true});
//Example of preserving a JavaScript event for inline calls.
$("#click").click(function(){
@@ -40,7 +43,7 @@
</script>
</head>
<body>
- <h1>ColorBox Demonstration</h1>
+ <h1>Colorbox Demonstration</h1>
<h2>Elastic Transition</h2>
<p><a class="group1" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
<p><a class="group1" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
@@ -63,7 +66,7 @@
<h2>Other Content Types</h2>
<p><a class='ajax' href="../content/ajax.html" title="Homer Defined">Outside HTML (Ajax)</a></p>
- <p><a class='youtube' href="http://www.youtube.com/embed/617ANIA5Rqs?rel=0&amp;wmode=transparent" title="The Knife: We Share Our Mother's Health">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
+ <p><a class='youtube' href="http://www.youtube.com/embed/VOJyrQa_WR4?rel=0&amp;wmode=transparent">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
<p><a class='vimeo' href="http://player.vimeo.com/video/2285902" title="R&ouml;yksopp: Remind Me">Flash / Video (Iframe/Direct Link To Vimeo)</a></p>
<p><a class='iframe' href="http://wikipedia.com">Outside Webpage (Iframe)</a></p>
<p><a class='inline' href="#inline_content">Inline HTML</a></p>
@@ -71,6 +74,11 @@
<h2>Demonstration of using callbacks</h2>
<p><a class='callbacks' href="../content/marylou.jpg" title="Marylou on Cumberland Island">Example with alerts</a>. Callbacks and event-hooks allow users to extend functionality without having to rewrite parts of the plugin.</p>
+
+ <h2>Retina Images</h2>
+ <p><a class="retina" href="../content/daisy.jpg" title="Retina">Retina</a></p>
+ <p><a class="non-retina" href="../content/daisy.jpg" title="Non-Retina">Non-Retina</a></p>
+
<!-- This contains the hidden content for inline calls -->
<div style='display:none'>
<div id='inline_content' style='padding:10px; background:#fff;'>
@@ -78,7 +86,7 @@
<p>The inline option preserves bound JavaScript events and changes, and it puts the content back where it came from when it is closed.</p>
<p><a id="click" href="#" style='padding:5px; background:#ccc;'>Click me, it will be preserved!</a></p>
- <p><strong>If you try to open a new ColorBox while it is already open, it will update itself with the new content.</strong></p>
+ <p><strong>If you try to open a new Colorbox while it is already open, it will update itself with the new content.</strong></p>
<p>Updating Content Example:<br />
<a class="ajax" href="../content/ajax.html">Click here to load new content</a></p>
</div>
diff --git a/library/colorbox/example3/colorbox.css b/library/colorbox/example3/colorbox.css
index 153e32e6f..1cebdffd6 100644
--- a/library/colorbox/example3/colorbox.css
+++ b/library/colorbox/example3/colorbox.css
@@ -1,38 +1,45 @@
/*
- ColorBox Core Style:
+ Colorbox Core Style:
The following CSS is consistent between example themes and should not be altered.
*/
#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
+#cboxWrapper {max-width:none;}
#cboxOverlay{position:fixed; width:100%; height:100%;}
#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
#cboxContent{position:relative;}
-#cboxLoadedContent{overflow:auto;}
+#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;}
#cboxTitle{margin:0;}
#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
-.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none;}
-.cboxIframe{width:100%; height:100%; display:block; border:0;}
+.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;}
+.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;}
#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;}
/*
User Style:
- Change the following styles to modify the appearance of ColorBox. They are
+ Change the following styles to modify the appearance of Colorbox. They are
ordered & tabbed in a way that represents the nesting of the generated HTML.
*/
-#cboxOverlay{background:#000;}
-#colorbox{}
- #cboxContent{margin-top:20px;}
+#cboxOverlay{background:#000; opacity: 0.9; filter: alpha(opacity = 90);}
+#colorbox{outline:0;}
+ #cboxContent{margin-top:20px;background:#000;}
.cboxIframe{background:#fff;}
#cboxError{padding:50px; border:1px solid #ccc;}
#cboxLoadedContent{border:5px solid #000; background:#fff;}
#cboxTitle{position:absolute; top:-20px; left:0; color:#ccc;}
#cboxCurrent{position:absolute; top:-20px; right:0px; color:#ccc;}
+ #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
+
+ /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
+ #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; }
+
+ /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
+ #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;}
+
#cboxSlideshow{position:absolute; top:-20px; right:90px; color:#fff;}
#cboxPrevious{position:absolute; top:50%; left:5px; margin-top:-32px; background:url(images/controls.png) no-repeat top left; width:28px; height:65px; text-indent:-9999px;}
#cboxPrevious:hover{background-position:bottom left;}
#cboxNext{position:absolute; top:50%; right:5px; margin-top:-32px; background:url(images/controls.png) no-repeat top right; width:28px; height:65px; text-indent:-9999px;}
#cboxNext:hover{background-position:bottom right;}
- #cboxLoadingOverlay{background:#000;}
- #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
#cboxClose{position:absolute; top:5px; right:5px; display:block; background:url(images/controls.png) no-repeat top center; width:38px; height:19px; text-indent:-9999px;}
- #cboxClose:hover{background-position:bottom center;} \ No newline at end of file
+ #cboxClose:hover{background-position:bottom center;}
diff --git a/library/colorbox/example3/images/loading.gif b/library/colorbox/example3/images/loading.gif
index 19c67bbd0..a32df5c08 100644
--- a/library/colorbox/example3/images/loading.gif
+++ b/library/colorbox/example3/images/loading.gif
Binary files differ
diff --git a/library/colorbox/example3/index.html b/library/colorbox/example3/index.html
index 727fe78d7..8f10b9306 100644
--- a/library/colorbox/example3/index.html
+++ b/library/colorbox/example3/index.html
@@ -2,24 +2,24 @@
<html>
<head>
<meta charset='utf-8'/>
- <title>ColorBox Examples</title>
+ <title>Colorbox Examples</title>
<style>
body{font:12px/1.2 Verdana, sans-serif; padding:0 10px;}
a:link, a:visited{text-decoration:none; color:#416CE5; border-bottom:1px solid #416CE5;}
h2{font-size:13px; margin:15px 0 0 0;}
</style>
<link rel="stylesheet" href="colorbox.css" />
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="../jquery.colorbox.js"></script>
<script>
$(document).ready(function(){
- //Examples of how to assign the ColorBox event to elements
+ //Examples of how to assign the Colorbox event to elements
$(".group1").colorbox({rel:'group1'});
$(".group2").colorbox({rel:'group2', transition:"fade"});
$(".group3").colorbox({rel:'group3', transition:"none", width:"75%", height:"75%"});
$(".group4").colorbox({rel:'group4', slideshow:true});
$(".ajax").colorbox();
- $(".youtube").colorbox({iframe:true, innerWidth:425, innerHeight:344});
+ $(".youtube").colorbox({iframe:true, innerWidth:640, innerHeight:390});
$(".vimeo").colorbox({iframe:true, innerWidth:500, innerHeight:409});
$(".iframe").colorbox({iframe:true, width:"80%", height:"80%"});
$(".inline").colorbox({inline:true, width:"50%"});
@@ -30,6 +30,9 @@
onCleanup:function(){ alert('onCleanup: colorbox has begun the close process'); },
onClosed:function(){ alert('onClosed: colorbox has completely closed'); }
});
+
+ $('.non-retina').colorbox({rel:'group5', transition:'none'})
+ $('.retina').colorbox({rel:'group5', transition:'none', retinaImage:true, retinaUrl:true});
//Example of preserving a JavaScript event for inline calls.
$("#click").click(function(){
@@ -40,7 +43,7 @@
</script>
</head>
<body>
- <h1>ColorBox Demonstration</h1>
+ <h1>Colorbox Demonstration</h1>
<h2>Elastic Transition</h2>
<p><a class="group1" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
<p><a class="group1" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
@@ -63,7 +66,7 @@
<h2>Other Content Types</h2>
<p><a class='ajax' href="../content/ajax.html" title="Homer Defined">Outside HTML (Ajax)</a></p>
- <p><a class='youtube' href="http://www.youtube.com/embed/617ANIA5Rqs?rel=0&amp;wmode=transparent" title="The Knife: We Share Our Mother's Health">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
+ <p><a class='youtube' href="http://www.youtube.com/embed/VOJyrQa_WR4?rel=0&amp;wmode=transparent">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
<p><a class='vimeo' href="http://player.vimeo.com/video/2285902" title="R&ouml;yksopp: Remind Me">Flash / Video (Iframe/Direct Link To Vimeo)</a></p>
<p><a class='iframe' href="http://wikipedia.com">Outside Webpage (Iframe)</a></p>
<p><a class='inline' href="#inline_content">Inline HTML</a></p>
@@ -71,6 +74,11 @@
<h2>Demonstration of using callbacks</h2>
<p><a class='callbacks' href="../content/marylou.jpg" title="Marylou on Cumberland Island">Example with alerts</a>. Callbacks and event-hooks allow users to extend functionality without having to rewrite parts of the plugin.</p>
+
+ <h2>Retina Images</h2>
+ <p><a class="retina" href="../content/daisy.jpg" title="Retina">Retina</a></p>
+ <p><a class="non-retina" href="../content/daisy.jpg" title="Non-Retina">Non-Retina</a></p>
+
<!-- This contains the hidden content for inline calls -->
<div style='display:none'>
<div id='inline_content' style='padding:10px; background:#fff;'>
@@ -78,7 +86,7 @@
<p>The inline option preserves bound JavaScript events and changes, and it puts the content back where it came from when it is closed.</p>
<p><a id="click" href="#" style='padding:5px; background:#ccc;'>Click me, it will be preserved!</a></p>
- <p><strong>If you try to open a new ColorBox while it is already open, it will update itself with the new content.</strong></p>
+ <p><strong>If you try to open a new Colorbox while it is already open, it will update itself with the new content.</strong></p>
<p>Updating Content Example:<br />
<a class="ajax" href="../content/ajax.html">Click here to load new content</a></p>
</div>
diff --git a/library/colorbox/example4/colorbox.css b/library/colorbox/example4/colorbox.css
index 54560688a..d475a343a 100644
--- a/library/colorbox/example4/colorbox.css
+++ b/library/colorbox/example4/colorbox.css
@@ -1,26 +1,27 @@
/*
- ColorBox Core Style:
+ Colorbox Core Style:
The following CSS is consistent between example themes and should not be altered.
*/
#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
+#cboxWrapper {max-width:none;}
#cboxOverlay{position:fixed; width:100%; height:100%;}
#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
#cboxContent{position:relative;}
-#cboxLoadedContent{overflow:auto;}
+#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;}
#cboxTitle{margin:0;}
#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
-.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none;}
-.cboxIframe{width:100%; height:100%; display:block; border:0;}
+.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;}
+.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;}
#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;}
/*
User Style:
- Change the following styles to modify the appearance of ColorBox. They are
+ Change the following styles to modify the appearance of Colorbox. They are
ordered & tabbed in a way that represents the nesting of the generated HTML.
*/
-#cboxOverlay{background:#fff;}
-#colorbox{}
+#cboxOverlay{background:#fff; opacity: 0.9; filter: alpha(opacity = 90);}
+#colorbox{outline:0;}
#cboxTopLeft{width:25px; height:25px; background:url(images/border1.png) no-repeat 0 0;}
#cboxTopCenter{height:25px; background:url(images/border1.png) repeat-x 0 -50px;}
#cboxTopRight{width:25px; height:25px; background:url(images/border1.png) no-repeat -25px 0;}
@@ -35,10 +36,17 @@
#cboxLoadedContent{margin-bottom:20px;}
#cboxTitle{position:absolute; bottom:0px; left:0; text-align:center; width:100%; color:#999;}
#cboxCurrent{position:absolute; bottom:0px; left:100px; color:#999;}
+ #cboxLoadingOverlay{background:#fff url(images/loading.gif) no-repeat 5px 5px;}
+
+ /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
+ #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; }
+
+ /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
+ #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;}
+
#cboxSlideshow{position:absolute; bottom:0px; right:42px; color:#444;}
#cboxPrevious{position:absolute; bottom:0px; left:0; color:#444;}
#cboxNext{position:absolute; bottom:0px; left:63px; color:#444;}
- #cboxLoadingOverlay{background:#fff url(images/loading.gif) no-repeat 5px 5px;}
#cboxClose{position:absolute; bottom:0; right:0; display:block; color:#444;}
/*
@@ -55,28 +63,4 @@
.cboxIE #cboxMiddleLeft,
.cboxIE #cboxMiddleRight {
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF);
-}
-
-/*
- The following provides PNG transparency support for IE6
- Feel free to remove this and the /ie6/ directory if you have dropped IE6 support.
-*/
-.cboxIE6 #cboxTopLeft{background:url(images/ie6/borderTopLeft.png);}
-.cboxIE6 #cboxTopCenter{background:url(images/ie6/borderTopCenter.png);}
-.cboxIE6 #cboxTopRight{background:url(images/ie6/borderTopRight.png);}
-.cboxIE6 #cboxBottomLeft{background:url(images/ie6/borderBottomLeft.png);}
-.cboxIE6 #cboxBottomCenter{background:url(images/ie6/borderBottomCenter.png);}
-.cboxIE6 #cboxBottomRight{background:url(images/ie6/borderBottomRight.png);}
-.cboxIE6 #cboxMiddleLeft{background:url(images/ie6/borderMiddleLeft.png);}
-.cboxIE6 #cboxMiddleRight{background:url(images/ie6/borderMiddleRight.png);}
-
-.cboxIE6 #cboxTopLeft,
-.cboxIE6 #cboxTopCenter,
-.cboxIE6 #cboxTopRight,
-.cboxIE6 #cboxBottomLeft,
-.cboxIE6 #cboxBottomCenter,
-.cboxIE6 #cboxBottomRight,
-.cboxIE6 #cboxMiddleLeft,
-.cboxIE6 #cboxMiddleRight {
- _behavior: expression(this.src = this.src ? this.src : this.currentStyle.backgroundImage.split('"')[1], this.style.background = "none", this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=" + this.src + ", sizingMethod='scale')");
-}
+} \ No newline at end of file
diff --git a/library/colorbox/example4/images/border1.png b/library/colorbox/example4/images/border1.png
index 0ddc70405..ea73e1592 100644
--- a/library/colorbox/example4/images/border1.png
+++ b/library/colorbox/example4/images/border1.png
Binary files differ
diff --git a/library/colorbox/example4/images/border2.png b/library/colorbox/example4/images/border2.png
index aa62a0b72..72cad44ce 100644
--- a/library/colorbox/example4/images/border2.png
+++ b/library/colorbox/example4/images/border2.png
Binary files differ
diff --git a/library/colorbox/example4/images/ie6/borderBottomCenter.png b/library/colorbox/example4/images/ie6/borderBottomCenter.png
deleted file mode 100644
index 12e0e9ac0..000000000
--- a/library/colorbox/example4/images/ie6/borderBottomCenter.png
+++ /dev/null
Binary files differ
diff --git a/library/colorbox/example4/images/ie6/borderBottomLeft.png b/library/colorbox/example4/images/ie6/borderBottomLeft.png
deleted file mode 100644
index b7a474ae0..000000000
--- a/library/colorbox/example4/images/ie6/borderBottomLeft.png
+++ /dev/null
Binary files differ
diff --git a/library/colorbox/example4/images/ie6/borderBottomRight.png b/library/colorbox/example4/images/ie6/borderBottomRight.png
deleted file mode 100644
index 6b6cb159b..000000000
--- a/library/colorbox/example4/images/ie6/borderBottomRight.png
+++ /dev/null
Binary files differ
diff --git a/library/colorbox/example4/images/ie6/borderMiddleLeft.png b/library/colorbox/example4/images/ie6/borderMiddleLeft.png
deleted file mode 100644
index 8d0eb739d..000000000
--- a/library/colorbox/example4/images/ie6/borderMiddleLeft.png
+++ /dev/null
Binary files differ
diff --git a/library/colorbox/example4/images/ie6/borderMiddleRight.png b/library/colorbox/example4/images/ie6/borderMiddleRight.png
deleted file mode 100644
index d65509e30..000000000
--- a/library/colorbox/example4/images/ie6/borderMiddleRight.png
+++ /dev/null
Binary files differ
diff --git a/library/colorbox/example4/images/ie6/borderTopCenter.png b/library/colorbox/example4/images/ie6/borderTopCenter.png
deleted file mode 100644
index 35d8da2d0..000000000
--- a/library/colorbox/example4/images/ie6/borderTopCenter.png
+++ /dev/null
Binary files differ
diff --git a/library/colorbox/example4/images/ie6/borderTopLeft.png b/library/colorbox/example4/images/ie6/borderTopLeft.png
deleted file mode 100644
index ae9bda040..000000000
--- a/library/colorbox/example4/images/ie6/borderTopLeft.png
+++ /dev/null
Binary files differ
diff --git a/library/colorbox/example4/images/ie6/borderTopRight.png b/library/colorbox/example4/images/ie6/borderTopRight.png
deleted file mode 100644
index 0d8868399..000000000
--- a/library/colorbox/example4/images/ie6/borderTopRight.png
+++ /dev/null
Binary files differ
diff --git a/library/colorbox/example4/images/loading.gif b/library/colorbox/example4/images/loading.gif
index 602ce3c3a..1f3a2c0ab 100644
--- a/library/colorbox/example4/images/loading.gif
+++ b/library/colorbox/example4/images/loading.gif
Binary files differ
diff --git a/library/colorbox/example4/index.html b/library/colorbox/example4/index.html
index 727fe78d7..8f10b9306 100644
--- a/library/colorbox/example4/index.html
+++ b/library/colorbox/example4/index.html
@@ -2,24 +2,24 @@
<html>
<head>
<meta charset='utf-8'/>
- <title>ColorBox Examples</title>
+ <title>Colorbox Examples</title>
<style>
body{font:12px/1.2 Verdana, sans-serif; padding:0 10px;}
a:link, a:visited{text-decoration:none; color:#416CE5; border-bottom:1px solid #416CE5;}
h2{font-size:13px; margin:15px 0 0 0;}
</style>
<link rel="stylesheet" href="colorbox.css" />
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="../jquery.colorbox.js"></script>
<script>
$(document).ready(function(){
- //Examples of how to assign the ColorBox event to elements
+ //Examples of how to assign the Colorbox event to elements
$(".group1").colorbox({rel:'group1'});
$(".group2").colorbox({rel:'group2', transition:"fade"});
$(".group3").colorbox({rel:'group3', transition:"none", width:"75%", height:"75%"});
$(".group4").colorbox({rel:'group4', slideshow:true});
$(".ajax").colorbox();
- $(".youtube").colorbox({iframe:true, innerWidth:425, innerHeight:344});
+ $(".youtube").colorbox({iframe:true, innerWidth:640, innerHeight:390});
$(".vimeo").colorbox({iframe:true, innerWidth:500, innerHeight:409});
$(".iframe").colorbox({iframe:true, width:"80%", height:"80%"});
$(".inline").colorbox({inline:true, width:"50%"});
@@ -30,6 +30,9 @@
onCleanup:function(){ alert('onCleanup: colorbox has begun the close process'); },
onClosed:function(){ alert('onClosed: colorbox has completely closed'); }
});
+
+ $('.non-retina').colorbox({rel:'group5', transition:'none'})
+ $('.retina').colorbox({rel:'group5', transition:'none', retinaImage:true, retinaUrl:true});
//Example of preserving a JavaScript event for inline calls.
$("#click").click(function(){
@@ -40,7 +43,7 @@
</script>
</head>
<body>
- <h1>ColorBox Demonstration</h1>
+ <h1>Colorbox Demonstration</h1>
<h2>Elastic Transition</h2>
<p><a class="group1" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
<p><a class="group1" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
@@ -63,7 +66,7 @@
<h2>Other Content Types</h2>
<p><a class='ajax' href="../content/ajax.html" title="Homer Defined">Outside HTML (Ajax)</a></p>
- <p><a class='youtube' href="http://www.youtube.com/embed/617ANIA5Rqs?rel=0&amp;wmode=transparent" title="The Knife: We Share Our Mother's Health">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
+ <p><a class='youtube' href="http://www.youtube.com/embed/VOJyrQa_WR4?rel=0&amp;wmode=transparent">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
<p><a class='vimeo' href="http://player.vimeo.com/video/2285902" title="R&ouml;yksopp: Remind Me">Flash / Video (Iframe/Direct Link To Vimeo)</a></p>
<p><a class='iframe' href="http://wikipedia.com">Outside Webpage (Iframe)</a></p>
<p><a class='inline' href="#inline_content">Inline HTML</a></p>
@@ -71,6 +74,11 @@
<h2>Demonstration of using callbacks</h2>
<p><a class='callbacks' href="../content/marylou.jpg" title="Marylou on Cumberland Island">Example with alerts</a>. Callbacks and event-hooks allow users to extend functionality without having to rewrite parts of the plugin.</p>
+
+ <h2>Retina Images</h2>
+ <p><a class="retina" href="../content/daisy.jpg" title="Retina">Retina</a></p>
+ <p><a class="non-retina" href="../content/daisy.jpg" title="Non-Retina">Non-Retina</a></p>
+
<!-- This contains the hidden content for inline calls -->
<div style='display:none'>
<div id='inline_content' style='padding:10px; background:#fff;'>
@@ -78,7 +86,7 @@
<p>The inline option preserves bound JavaScript events and changes, and it puts the content back where it came from when it is closed.</p>
<p><a id="click" href="#" style='padding:5px; background:#ccc;'>Click me, it will be preserved!</a></p>
- <p><strong>If you try to open a new ColorBox while it is already open, it will update itself with the new content.</strong></p>
+ <p><strong>If you try to open a new Colorbox while it is already open, it will update itself with the new content.</strong></p>
<p>Updating Content Example:<br />
<a class="ajax" href="../content/ajax.html">Click here to load new content</a></p>
</div>
diff --git a/library/colorbox/example5/colorbox.css b/library/colorbox/example5/colorbox.css
index 544a76f3b..889f20fea 100644
--- a/library/colorbox/example5/colorbox.css
+++ b/library/colorbox/example5/colorbox.css
@@ -1,26 +1,27 @@
/*
- ColorBox Core Style:
+ Colorbox Core Style:
The following CSS is consistent between example themes and should not be altered.
*/
#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
+#cboxWrapper {max-width:none;}
#cboxOverlay{position:fixed; width:100%; height:100%;}
#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
#cboxContent{position:relative;}
-#cboxLoadedContent{overflow:auto;}
+#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;}
#cboxTitle{margin:0;}
#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
-.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none;}
-.cboxIframe{width:100%; height:100%; display:block; border:0;}
+.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;}
+.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;}
#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;}
/*
User Style:
- Change the following styles to modify the appearance of ColorBox. They are
+ Change the following styles to modify the appearance of Colorbox. They are
ordered & tabbed in a way that represents the nesting of the generated HTML.
*/
-#cboxOverlay{background:#000;}
-#colorbox{}
+#cboxOverlay{background:#000; opacity: 0.9; filter: alpha(opacity = 90);}
+#colorbox{outline:0;}
#cboxTopLeft{width:14px; height:14px; background:url(images/controls.png) no-repeat 0 0;}
#cboxTopCenter{height:14px; background:url(images/border.png) repeat-x top left;}
#cboxTopRight{width:14px; height:14px; background:url(images/controls.png) no-repeat -36px 0;}
@@ -38,7 +39,12 @@
#cboxTitle{position:absolute; bottom:-25px; left:0; text-align:center; width:100%; font-weight:bold; color:#7C7C7C;}
#cboxCurrent{position:absolute; bottom:-25px; left:58px; font-weight:bold; color:#7C7C7C;}
- #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{position:absolute; bottom:-29px; background:url(images/controls.png) no-repeat 0px 0px; width:23px; height:23px; text-indent:-9999px;}
+ /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
+ #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; position:absolute; bottom:-29px; background:url(images/controls.png) no-repeat 0px 0px; width:23px; height:23px; text-indent:-9999px;}
+
+ /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
+ #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;}
+
#cboxPrevious{left:0px; background-position: -51px -25px;}
#cboxPrevious:hover{background-position:-51px 0px;}
#cboxNext{left:27px; background-position:-75px -25px;}
diff --git a/library/colorbox/example5/images/border.png b/library/colorbox/example5/images/border.png
index df13bb6da..c1cd1a2a4 100644
--- a/library/colorbox/example5/images/border.png
+++ b/library/colorbox/example5/images/border.png
Binary files differ
diff --git a/library/colorbox/example5/images/controls.png b/library/colorbox/example5/images/controls.png
index 65cfd1dc9..259130cd5 100644
--- a/library/colorbox/example5/images/controls.png
+++ b/library/colorbox/example5/images/controls.png
Binary files differ
diff --git a/library/colorbox/example5/images/loading.gif b/library/colorbox/example5/images/loading.gif
index b4695d811..dba33c816 100644
--- a/library/colorbox/example5/images/loading.gif
+++ b/library/colorbox/example5/images/loading.gif
Binary files differ
diff --git a/library/colorbox/example5/images/loading_background.png b/library/colorbox/example5/images/loading_background.png
index 9de11f467..23a336b39 100644
--- a/library/colorbox/example5/images/loading_background.png
+++ b/library/colorbox/example5/images/loading_background.png
Binary files differ
diff --git a/library/colorbox/example5/index.html b/library/colorbox/example5/index.html
index 727fe78d7..8f10b9306 100644
--- a/library/colorbox/example5/index.html
+++ b/library/colorbox/example5/index.html
@@ -2,24 +2,24 @@
<html>
<head>
<meta charset='utf-8'/>
- <title>ColorBox Examples</title>
+ <title>Colorbox Examples</title>
<style>
body{font:12px/1.2 Verdana, sans-serif; padding:0 10px;}
a:link, a:visited{text-decoration:none; color:#416CE5; border-bottom:1px solid #416CE5;}
h2{font-size:13px; margin:15px 0 0 0;}
</style>
<link rel="stylesheet" href="colorbox.css" />
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="../jquery.colorbox.js"></script>
<script>
$(document).ready(function(){
- //Examples of how to assign the ColorBox event to elements
+ //Examples of how to assign the Colorbox event to elements
$(".group1").colorbox({rel:'group1'});
$(".group2").colorbox({rel:'group2', transition:"fade"});
$(".group3").colorbox({rel:'group3', transition:"none", width:"75%", height:"75%"});
$(".group4").colorbox({rel:'group4', slideshow:true});
$(".ajax").colorbox();
- $(".youtube").colorbox({iframe:true, innerWidth:425, innerHeight:344});
+ $(".youtube").colorbox({iframe:true, innerWidth:640, innerHeight:390});
$(".vimeo").colorbox({iframe:true, innerWidth:500, innerHeight:409});
$(".iframe").colorbox({iframe:true, width:"80%", height:"80%"});
$(".inline").colorbox({inline:true, width:"50%"});
@@ -30,6 +30,9 @@
onCleanup:function(){ alert('onCleanup: colorbox has begun the close process'); },
onClosed:function(){ alert('onClosed: colorbox has completely closed'); }
});
+
+ $('.non-retina').colorbox({rel:'group5', transition:'none'})
+ $('.retina').colorbox({rel:'group5', transition:'none', retinaImage:true, retinaUrl:true});
//Example of preserving a JavaScript event for inline calls.
$("#click").click(function(){
@@ -40,7 +43,7 @@
</script>
</head>
<body>
- <h1>ColorBox Demonstration</h1>
+ <h1>Colorbox Demonstration</h1>
<h2>Elastic Transition</h2>
<p><a class="group1" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
<p><a class="group1" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
@@ -63,7 +66,7 @@
<h2>Other Content Types</h2>
<p><a class='ajax' href="../content/ajax.html" title="Homer Defined">Outside HTML (Ajax)</a></p>
- <p><a class='youtube' href="http://www.youtube.com/embed/617ANIA5Rqs?rel=0&amp;wmode=transparent" title="The Knife: We Share Our Mother's Health">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
+ <p><a class='youtube' href="http://www.youtube.com/embed/VOJyrQa_WR4?rel=0&amp;wmode=transparent">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
<p><a class='vimeo' href="http://player.vimeo.com/video/2285902" title="R&ouml;yksopp: Remind Me">Flash / Video (Iframe/Direct Link To Vimeo)</a></p>
<p><a class='iframe' href="http://wikipedia.com">Outside Webpage (Iframe)</a></p>
<p><a class='inline' href="#inline_content">Inline HTML</a></p>
@@ -71,6 +74,11 @@
<h2>Demonstration of using callbacks</h2>
<p><a class='callbacks' href="../content/marylou.jpg" title="Marylou on Cumberland Island">Example with alerts</a>. Callbacks and event-hooks allow users to extend functionality without having to rewrite parts of the plugin.</p>
+
+ <h2>Retina Images</h2>
+ <p><a class="retina" href="../content/daisy.jpg" title="Retina">Retina</a></p>
+ <p><a class="non-retina" href="../content/daisy.jpg" title="Non-Retina">Non-Retina</a></p>
+
<!-- This contains the hidden content for inline calls -->
<div style='display:none'>
<div id='inline_content' style='padding:10px; background:#fff;'>
@@ -78,7 +86,7 @@
<p>The inline option preserves bound JavaScript events and changes, and it puts the content back where it came from when it is closed.</p>
<p><a id="click" href="#" style='padding:5px; background:#ccc;'>Click me, it will be preserved!</a></p>
- <p><strong>If you try to open a new ColorBox while it is already open, it will update itself with the new content.</strong></p>
+ <p><strong>If you try to open a new Colorbox while it is already open, it will update itself with the new content.</strong></p>
<p>Updating Content Example:<br />
<a class="ajax" href="../content/ajax.html">Click here to load new content</a></p>
</div>
diff --git a/library/colorbox/i18n/jquery.colorbox-ar.js b/library/colorbox/i18n/jquery.colorbox-ar.js
new file mode 100644
index 000000000..6c4228cd1
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-ar.js
@@ -0,0 +1,15 @@
+/*
+ jQuery Colorbox language configuration
+ language: Arabic (ar)
+ translated by: A.Rhman Sayes
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "الصورة {current} من {total}",
+ previous: "السابق",
+ next: "التالي",
+ close: "إغلاق",
+ xhrError: "حدث خطأ أثناء تحميل المحتوى.",
+ imgError: "حدث خطأ أثناء تحميل الصورة.",
+ slideshowStart: "تشغيل العرض",
+ slideshowStop: "إيقا٠العرض"
+});
diff --git a/library/colorbox/i18n/jquery.colorbox-bg.js b/library/colorbox/i18n/jquery.colorbox-bg.js
new file mode 100644
index 000000000..de7e4a1d0
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-bg.js
@@ -0,0 +1,16 @@
+/*
+ jQuery Colorbox language configuration
+ language: Bulgarian (bg)
+ translated by: Marian M.Bida
+ site: webmax.bg
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "изображение {current} от {total}",
+ previous: "предишна",
+ next: "Ñледваща",
+ close: "затвори",
+ xhrError: "ÐеуÑпешно зареждане на Ñъдържанието.",
+ imgError: "ÐеуÑпешно зареждане на изображението.",
+ slideshowStart: "пуÑни Ñлайд-шоу",
+ slideshowStop: "Ñпри Ñлайд-шоу"
+});
diff --git a/library/colorbox/i18n/jquery.colorbox-bn.js b/library/colorbox/i18n/jquery.colorbox-bn.js
new file mode 100644
index 000000000..946229d4c
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-bn.js
@@ -0,0 +1,16 @@
+/*
+jQuery Colorbox language configuration
+language: Bengali (bn)
+translated by: Arkaprava Majumder
+http://github.com/arkaindas
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+current: "ছবি {current} à¦à¦° {total}",
+previous: "আগে",
+next: "পরে",
+close: "বনà§à¦§",
+xhrError: "à¦à¦‡ কনà§à¦Ÿà§‡à¦¨à§à¦Ÿ লোড করা যায়নি.",
+imgError: "à¦à¦‡ ছবিটি লোড করা যায়নি.",
+slideshowStart: "সà§à¦²à¦¾à¦‡à¦¡à¦¶à§‹ শà§à¦°à§",
+slideshowStop: "সà§à¦²à¦¾à¦‡à¦¡à¦¶à§‹ বনà§à¦§"
+});
diff --git a/library/colorbox/i18n/jquery.colorbox-ca.js b/library/colorbox/i18n/jquery.colorbox-ca.js
new file mode 100644
index 000000000..173c05fdf
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-ca.js
@@ -0,0 +1,13 @@
+/*
+ jQuery Colorbox language configuration
+ language: Catala (ca)
+ translated by: eduard salla
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "Imatge {current} de {total}",
+ previous: "Anterior",
+ next: "Següent",
+ close: "Tancar",
+ xhrError: "Error en la càrrega del contingut.",
+ imgError: "Error en la càrrega de la imatge."
+});
diff --git a/library/colorbox/i18n/jquery.colorbox-cs.js b/library/colorbox/i18n/jquery.colorbox-cs.js
index 42114c0a7..9649fd455 100644
--- a/library/colorbox/i18n/jquery.colorbox-cs.js
+++ b/library/colorbox/i18n/jquery.colorbox-cs.js
@@ -1,5 +1,5 @@
/*
- jQuery ColorBox language configuration
+ jQuery Colorbox language configuration
language: Czech (cs)
translated by: Filip Novak
site: mame.napilno.cz/filip-novak
@@ -10,5 +10,7 @@ jQuery.extend(jQuery.colorbox.settings, {
next: "Následující",
close: "Zavřít",
xhrError: "Obsah se nepodaÅ™ilo naÄíst.",
- imgError: "Obrázek se nepodaÅ™ilo naÄíst."
+ imgError: "Obrázek se nepodaÅ™ilo naÄíst.",
+ slideshowStart: "Spustit slideshow",
+ slideshowStop: "Zastavit slideshow"
}); \ No newline at end of file
diff --git a/library/colorbox/i18n/jquery.colorbox-da.js b/library/colorbox/i18n/jquery.colorbox-da.js
index 66bfb6cd0..676fffed2 100644
--- a/library/colorbox/i18n/jquery.colorbox-da.js
+++ b/library/colorbox/i18n/jquery.colorbox-da.js
@@ -1,5 +1,5 @@
/*
- jQuery ColorBox language configuration
+ jQuery Colorbox language configuration
language: Danish (da)
translated by: danieljuhl
site: danieljuhl.dk
@@ -10,5 +10,7 @@ jQuery.extend(jQuery.colorbox.settings, {
next: "Næste",
close: "Luk",
xhrError: "Indholdet fejlede i indlæsningen.",
- imgError: "Billedet fejlede i indlæsningen."
+ imgError: "Billedet fejlede i indlæsningen.",
+ slideshowStart: "Start slideshow",
+ slideshowStop: "Stop slideshow"
});
diff --git a/library/colorbox/i18n/jquery.colorbox-de.js b/library/colorbox/i18n/jquery.colorbox-de.js
index 3d6e2e147..d489379bc 100644
--- a/library/colorbox/i18n/jquery.colorbox-de.js
+++ b/library/colorbox/i18n/jquery.colorbox-de.js
@@ -1,5 +1,5 @@
/*
- jQuery ColorBox language configuration
+ jQuery Colorbox language configuration
language: German (de)
translated by: wallenium
*/
@@ -9,5 +9,7 @@ jQuery.extend(jQuery.colorbox.settings, {
next: "Vor",
close: "Schließen",
xhrError: "Dieser Inhalt konnte nicht geladen werden.",
- imgError: "Dieses Bild konnte nicht geladen werden."
+ imgError: "Dieses Bild konnte nicht geladen werden.",
+ slideshowStart: "Slideshow starten",
+ slideshowStop: "Slideshow anhalten"
}); \ No newline at end of file
diff --git a/library/colorbox/i18n/jquery.colorbox-es.js b/library/colorbox/i18n/jquery.colorbox-es.js
index 6449c66f8..11296fc94 100644
--- a/library/colorbox/i18n/jquery.colorbox-es.js
+++ b/library/colorbox/i18n/jquery.colorbox-es.js
@@ -1,5 +1,5 @@
/*
- jQuery ColorBox language configuration
+ jQuery Colorbox language configuration
language: Spanish (es)
translated by: migolo
*/
diff --git a/library/colorbox/i18n/jquery.colorbox-et.js b/library/colorbox/i18n/jquery.colorbox-et.js
new file mode 100644
index 000000000..60a4e888e
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-et.js
@@ -0,0 +1,15 @@
+/*
+ jQuery Colorbox language configuration
+ language: Estonian (et)
+ translated by: keevitaja
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "{current}/{total}",
+ previous: "eelmine",
+ next: "järgmine",
+ close: "sulge",
+ xhrError: "Sisu ei õnnestunud laadida.",
+ imgError: "Pilti ei õnnestunud laadida.",
+ slideshowStart: "Käivita slaidid",
+ slideshowStop: "Peata slaidid"
+}); \ No newline at end of file
diff --git a/library/colorbox/i18n/jquery.colorbox-fa.js b/library/colorbox/i18n/jquery.colorbox-fa.js
new file mode 100644
index 000000000..32869a4c8
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-fa.js
@@ -0,0 +1,18 @@
+/*
+ jQuery Colorbox language configuration
+ language: Persian (Farsi)
+ translated by: Mahdi Jaberzadeh Ansari (MJZSoft)
+ site: www.mjzsoft.ir
+ email: mahdijaberzadehansari (at) yahoo.co.uk
+ Please note : Persian language is right to left like arabic.
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "تصویر {current} از {total}",
+ previous: "قبلی",
+ next: "بعدی",
+ close: "بستن",
+ xhrError: "متاسÙانه محتویات مورد نظر قابل نمایش نیست.",
+ imgError: "متاسÙانه بارگذاری این عکس با مشکل مواجه شده است.",
+ slideshowStart: "آغاز نمایش خودکار",
+ slideshowStop: "توق٠نمایش خودکار"
+});
diff --git a/library/colorbox/i18n/jquery.colorbox-fi.js b/library/colorbox/i18n/jquery.colorbox-fi.js
new file mode 100644
index 000000000..ac03fe021
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-fi.js
@@ -0,0 +1,15 @@
+/*
+ jQuery Colorbox language configuration
+ language: Finnish (fi)
+ translated by: Mikko
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "Kuva {current} / {total}",
+ previous: "Edellinen",
+ next: "Seuraava",
+ close: "Sulje",
+ xhrError: "Sisällön lataaminen epäonnistui.",
+ imgError: "Kuvan lataaminen epäonnistui.",
+ slideshowStart: "Aloita kuvaesitys.",
+ slideshowStop: "Lopeta kuvaesitys."
+});
diff --git a/library/colorbox/i18n/jquery.colorbox-fr.js b/library/colorbox/i18n/jquery.colorbox-fr.js
index f6afe3fd4..f76352bd4 100644
--- a/library/colorbox/i18n/jquery.colorbox-fr.js
+++ b/library/colorbox/i18n/jquery.colorbox-fr.js
@@ -1,14 +1,15 @@
/*
- jQuery ColorBox language configuration
+ jQuery Colorbox language configuration
language: French (fr)
translated by: oaubert
*/
jQuery.extend(jQuery.colorbox.settings, {
-current: "image {current} sur {total}",
-previous: "pr&eacute;c&eacute;dente",
-next: "suivante",
-close: "fermer",
-xhrError: "Impossible de charger ce contenu.",
-imgError: "Impossible de charger cette image."
+ current: "image {current} sur {total}",
+ previous: "pr&eacute;c&eacute;dente",
+ next: "suivante",
+ close: "fermer",
+ xhrError: "Impossible de charger ce contenu.",
+ imgError: "Impossible de charger cette image.",
+ slideshowStart: "d&eacute;marrer la pr&eacute;sentation",
+ slideshowStop: "arr&ecirc;ter la pr&eacute;sentation"
});
-
diff --git a/library/colorbox/i18n/jquery.colorbox-gl.js b/library/colorbox/i18n/jquery.colorbox-gl.js
new file mode 100644
index 000000000..3641b51b1
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-gl.js
@@ -0,0 +1,13 @@
+/*
+ jQuery Colorbox language configuration
+ language: Galician (gl)
+ translated by: donatorouco
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "Imaxe {current} de {total}",
+ previous: "Anterior",
+ next: "Seguinte",
+ close: "Pechar",
+ xhrError: "Erro na carga do contido.",
+ imgError: "Erro na carga da imaxe."
+});
diff --git a/library/colorbox/i18n/jquery.colorbox-gr.js b/library/colorbox/i18n/jquery.colorbox-gr.js
new file mode 100644
index 000000000..0d2c1bb76
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-gr.js
@@ -0,0 +1,16 @@
+/*
+ jQuery Colorbox language configuration
+ language: Greek (gr)
+ translated by: S.Demirtzoglou
+ site: webiq.gr
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "Εικόνα {current} από {total}",
+ previous: "ΠÏοηγοÏμενη",
+ next: "Επόμενη",
+ close: "ΑπόκÏυψη",
+ xhrError: "Το πεÏιεχόμενο δεν μπόÏεσε να φοÏτωθεί.",
+ imgError: "Απέτυχε η φόÏτωση της εικόνας.",
+ slideshowStart: "ΈναÏξη παÏουσίασης",
+ slideshowStop: "ΠαÏση παÏουσίασης"
+});
diff --git a/library/colorbox/i18n/jquery.colorbox-he.js b/library/colorbox/i18n/jquery.colorbox-he.js
new file mode 100644
index 000000000..78908e39f
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-he.js
@@ -0,0 +1,16 @@
+/*
+ jQuery Colorbox language configuration
+ language: Hebrew (he)
+ translated by: DavidCo
+ site: DavidCo.me
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "תמונה {current} מתוך {total}",
+ previous: "הקוד×",
+ next: "הב×",
+ close: "סגור",
+ xhrError: "שגי××” בטעינת התוכן.",
+ imgError: "שגי××” בטעינת התמונה.",
+ slideshowStart: "התחל מצגת",
+ slideshowStop: "עצור מצגת"
+});
diff --git a/library/colorbox/i18n/jquery.colorbox-hr.js b/library/colorbox/i18n/jquery.colorbox-hr.js
new file mode 100644
index 000000000..7eb62becd
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-hr.js
@@ -0,0 +1,15 @@
+/*
+ jQuery Colorbox language configuration
+ language: Croatian (hr)
+ translated by: Mladen Bicanic (base.hr)
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "Slika {current} od {total}",
+ previous: "Prethodna",
+ next: "Sljedeća",
+ close: "Zatvori",
+ xhrError: "NeuspjeÅ¡no uÄitavanje sadržaja.",
+ imgError: "NeuspjeÅ¡no uÄitavanje slike.",
+ slideshowStart: "Pokreni slideshow",
+ slideshowStop: "Zaustavi slideshow"
+}); \ No newline at end of file
diff --git a/library/colorbox/i18n/jquery.colorbox-hu.js b/library/colorbox/i18n/jquery.colorbox-hu.js
new file mode 100644
index 000000000..72e9d36b1
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-hu.js
@@ -0,0 +1,15 @@
+/*
+ jQuery Colorbox language configuration
+ language: Hungarian (hu)
+ translated by: kovadani
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "{current}/{total} kép",
+ previous: "Előző",
+ next: "Következő",
+ close: "Bezár",
+ xhrError: "A tartalmat nem sikerült betölteni.",
+ imgError: "A képet nem sikerült betölteni.",
+ slideshowStart: "Diavetítés indítása",
+ slideshowStop: "Diavetítés leállítása"
+}); \ No newline at end of file
diff --git a/library/colorbox/i18n/jquery.colorbox-id.js b/library/colorbox/i18n/jquery.colorbox-id.js
new file mode 100644
index 000000000..81a62df34
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-id.js
@@ -0,0 +1,15 @@
+/*
+ jQuery Colorbox language configuration
+ language: Indonesian (id)
+ translated by: sarwasunda
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "ke {current} dari {total}",
+ previous: "Sebelumnya",
+ next: "Berikutnya",
+ close: "Tutup",
+ xhrError: "Konten ini tidak dapat dimuat.",
+ imgError: "Gambar ini tidak dapat dimuat.",
+ slideshowStart: "Putar",
+ slideshowStop: "Berhenti"
+});
diff --git a/library/colorbox/i18n/jquery.colorbox-it.js b/library/colorbox/i18n/jquery.colorbox-it.js
index d67d76cf7..2a4af6453 100644
--- a/library/colorbox/i18n/jquery.colorbox-it.js
+++ b/library/colorbox/i18n/jquery.colorbox-it.js
@@ -1,5 +1,5 @@
/*
- jQuery ColorBox language configuration
+ jQuery Colorbox language configuration
language: Italian (it)
translated by: maur8ino
*/
@@ -9,5 +9,7 @@ jQuery.extend(jQuery.colorbox.settings, {
next: "Successiva",
close: "Chiudi",
xhrError: "Errore nel caricamento del contenuto.",
- imgError: "Errore nel caricamento dell'immagine."
+ imgError: "Errore nel caricamento dell'immagine.",
+ slideshowStart: "Inizia la presentazione",
+ slideshowStop: "Termina la presentazione"
});
diff --git a/library/colorbox/i18n/jquery.colorbox-ja.js b/library/colorbox/i18n/jquery.colorbox-ja.js
new file mode 100644
index 000000000..5480de336
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-ja.js
@@ -0,0 +1,15 @@
+/*
+ jQuery Colorbox language configuration
+ language: Japanaese (ja)
+ translated by: Hajime Fujimoto
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "{total}枚中{current}枚目",
+ previous: "å‰",
+ next: "次",
+ close: "é–‰ã˜ã‚‹",
+ xhrError: "コンテンツã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ",
+ imgError: "ç”»åƒã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ",
+ slideshowStart: "スライドショー開始",
+ slideshowStop: "スライドショー終了"
+});
diff --git a/library/colorbox/i18n/jquery.colorbox-kr.js b/library/colorbox/i18n/jquery.colorbox-kr.js
new file mode 100644
index 000000000..b95702bc0
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-kr.js
@@ -0,0 +1,15 @@
+/*
+ jQuery Colorbox language configuration
+ language: Korean (kr)
+ translated by: lunareffect
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "ì´ {total} 중 {current}",
+ previous: "ì´ì „",
+ next: "다ìŒ",
+ close: "닫기",
+ xhrError: "컨í…츠를 불러오는 ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤.",
+ imgError: "ì´ë¯¸ì§€ë¥¼ 불러오는 ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤.",
+ slideshowStart: "슬ë¼ì´ë“œì‡¼ 시작",
+ slideshowStop: "슬ë¼ì´ë“œì‡¼ 중지"
+});
diff --git a/library/colorbox/i18n/jquery.colorbox-lt.js b/library/colorbox/i18n/jquery.colorbox-lt.js
new file mode 100644
index 000000000..a513fcf62
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-lt.js
@@ -0,0 +1,15 @@
+/*
+ jQuery Colorbox language configuration
+ language: Lithuanian (lt)
+ translated by: Tomas Norkūnas
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "Nuotrauka {current} iš {total}",
+ previous: "Atgal",
+ next: "Pirmyn",
+ close: "Uždaryti",
+ xhrError: "Nepavyko užkrauti turinio.",
+ imgError: "Nepavyko užkrauti nuotraukos.",
+ slideshowStart: "Pradėti automatinę peržiūrą",
+ slideshowStop: "Sustabdyti automatinę peržiūrą"
+}); \ No newline at end of file
diff --git a/library/colorbox/i18n/jquery.colorbox-lv.js b/library/colorbox/i18n/jquery.colorbox-lv.js
new file mode 100644
index 000000000..e376366b9
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-lv.js
@@ -0,0 +1,16 @@
+/*
+ jQuery Colorbox language configuration
+ language: Latvian (lv)
+ translated by: Matiss Roberts Treinis
+ site: x0.lv
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "attēls {current} no {total}",
+ previous: "iepriekšējais",
+ next: "nÄkamais",
+ close: "aizvērt",
+ xhrError: "NeizdevÄs ielÄdÄ“t saturu.",
+ imgError: "NeizdevÄs ielÄdÄ“t attÄ“lu.",
+ slideshowStart: "sÄkt slaidrÄdi",
+ slideshowStop: "apturÄ“t slaidrÄdi"
+});
diff --git a/library/colorbox/i18n/jquery.colorbox-my.js b/library/colorbox/i18n/jquery.colorbox-my.js
new file mode 100644
index 000000000..216e252cc
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-my.js
@@ -0,0 +1,15 @@
+/*
+ jQuery Colorbox language configuration
+ language: Myanmar (my)
+ translated by: Yan Naing
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "ပုံ {total} မှာ {current} မြောက်ပုံ",
+ previous: "ရှေ့သို့",
+ next: "နောက်သို့",
+ close: "ပိá€á€ºá€™á€Šá€º",
+ xhrError: "ပါá€á€„်သော အကြောင်းအရာများ ဖော်ပြရာá€á€½á€„် အနည်းငယ် á€á€»á€­á€¯á€·á€šá€½á€„်းမှုရှိနေပါသည်",
+ imgError: "ပုံပြသရာá€á€½á€„် အနည်းငယ် á€á€»á€­á€¯á€·á€šá€½á€„်းá€á€»á€€á€º ရှိနေပါသည်",
+ slideshowStart: "ပုံများ စá€á€„်ပြသမည်",
+ slideshowStop: "ပုံပြသá€á€¼á€„်း ရပ်ဆိုင်မည်"
+});
diff --git a/library/colorbox/i18n/jquery.colorbox-nl.js b/library/colorbox/i18n/jquery.colorbox-nl.js
new file mode 100644
index 000000000..dfc658ec9
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-nl.js
@@ -0,0 +1,15 @@
+/*
+ jQuery Colorbox language configuration
+ language: Dutch (nl)
+ translated by: barryvdh
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "Afbeelding {current} van {total}",
+ previous: "Vorige",
+ next: "Volgende",
+ close: "Sluiten",
+ xhrError: "Deze inhoud kan niet geladen worden.",
+ imgError: "Deze afbeelding kan niet geladen worden.",
+ slideshowStart: "Diashow starten",
+ slideshowStop: "Diashow stoppen"
+}); \ No newline at end of file
diff --git a/library/colorbox/i18n/jquery.colorbox-no.js b/library/colorbox/i18n/jquery.colorbox-no.js
new file mode 100644
index 000000000..277c5d3f9
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-no.js
@@ -0,0 +1,16 @@
+/*
+ jQuery Colorbox language configuration
+ language: Norwegian (no)
+ translated by: lars-erik
+ site: markedspartner.no
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "Bilde {current} av {total}",
+ previous: "Forrige",
+ next: "Neste",
+ close: "Lukk",
+ xhrError: "Feil ved lasting av innhold.",
+ imgError: "Feil ved lasting av bilde.",
+ slideshowStart: "Start lysbildefremvisning",
+ slideshowStop: "Stopp lysbildefremvisning"
+});
diff --git a/library/colorbox/i18n/jquery.colorbox-pl.js b/library/colorbox/i18n/jquery.colorbox-pl.js
new file mode 100644
index 000000000..1c04dae18
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-pl.js
@@ -0,0 +1,16 @@
+/*
+ jQuery Colorbox language configuration
+ language: Polski (pl)
+ translated by: Tomasz Wasiński
+ site: 2bevisible.pl
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "{current}. obrazek z {total}",
+ previous: "Poprzedni",
+ next: "Następny",
+ close: "Zamknij",
+ xhrError: "Nie udało się załadować treści.",
+ imgError: "Nie udało się załadować obrazka.",
+ slideshowStart: "rozpocznij pokaz slajdów",
+ slideshowStop: "zatrzymaj pokaz slajdów"
+}); \ No newline at end of file
diff --git a/library/colorbox/i18n/jquery.colorbox-pt-BR.js b/library/colorbox/i18n/jquery.colorbox-pt-BR.js
new file mode 100644
index 000000000..a405d93df
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-pt-BR.js
@@ -0,0 +1,15 @@
+/*
+ jQuery Colorbox language configuration
+ language: Brazilian Portuguese (pt-BR)
+ translated by: ReinaldoMT
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "Imagem {current} de {total}",
+ previous: "Anterior",
+ next: "Próxima",
+ close: "Fechar",
+ slideshowStart: "iniciar apresentação de slides",
+ slideshowStop: "parar apresentação de slides",
+ xhrError: "Erro ao carregar o conteúdo.",
+ imgError: "Erro ao carregar a imagem."
+}); \ No newline at end of file
diff --git a/library/colorbox/i18n/jquery.colorbox-ro.js b/library/colorbox/i18n/jquery.colorbox-ro.js
new file mode 100644
index 000000000..0a461e28a
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-ro.js
@@ -0,0 +1,15 @@
+/*
+ jQuery Colorbox language configuration
+ language: Romanian (ro)
+ translated by: shurub3l
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "imagine {current} din {total}",
+ previous: "precedenta",
+ next: "următoarea",
+ close: "închideți",
+ xhrError: "Acest conținut nu poate fi încărcat.",
+ imgError: "Această imagine nu poate fi încărcată",
+ slideshowStart: "începeți prezentarea (slideshow)",
+ slideshowStop: "opriți prezentarea (slideshow)"
+}); \ No newline at end of file
diff --git a/library/colorbox/i18n/jquery.colorbox-ru.js b/library/colorbox/i18n/jquery.colorbox-ru.js
index c9c220068..1d88b8cda 100644
--- a/library/colorbox/i18n/jquery.colorbox-ru.js
+++ b/library/colorbox/i18n/jquery.colorbox-ru.js
@@ -1,14 +1,16 @@
/*
- jQuery ColorBox language configuration
+ jQuery Colorbox language configuration
language: Russian (ru)
translated by: Marfa
- site: themarfa.name
+ site: themarfa.name
*/
jQuery.extend(jQuery.colorbox.settings, {
current: "изображение {current} из {total}",
- previous: "предыдущее",
- next: "Ñледующее",
+ previous: "назад",
+ next: "вперёд",
close: "закрыть",
xhrError: "Ðе удалоÑÑŒ загрузить Ñодержимое.",
- imgError: "Ðе удалоÑÑŒ загрузить изображение."
+ imgError: "Ðе удалоÑÑŒ загрузить изображение.",
+ slideshowStart: "начать Ñлайд-шоу",
+ slideshowStop: "оÑтановить Ñлайд-шоу"
}); \ No newline at end of file
diff --git a/library/colorbox/i18n/jquery.colorbox-si.js b/library/colorbox/i18n/jquery.colorbox-si.js
new file mode 100644
index 000000000..034b5b3c4
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-si.js
@@ -0,0 +1,15 @@
+/*
+ jQuery Colorbox language configuration
+ language: Slovenian (si)
+ translated by: Boštjan Pišler (pisler.si)
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "Slika {current} od {total}",
+ previous: "Prejšnja",
+ next: "Naslednja",
+ close: "Zapri",
+ xhrError: "Vsebine ni bilo mogoÄe naložiti.",
+ imgError: "Slike ni bilo mogoÄe naložiti.",
+ slideshowStart: "Zaženi prezentacijo",
+ slideshowStop: "Zaustavi prezentacijo"
+}); \ No newline at end of file
diff --git a/library/colorbox/i18n/jquery.colorbox-sk.js b/library/colorbox/i18n/jquery.colorbox-sk.js
new file mode 100644
index 000000000..faa9291cb
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-sk.js
@@ -0,0 +1,15 @@
+/*
+ jQuery Colorbox language configuration
+ language: Slovak (sk)
+ translated by: Jaroslav Kostal
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "{current}. obrázok z {total}",
+ previous: "Predchádzajúci",
+ next: "Následujúci",
+ close: "Zatvoriť",
+ xhrError: "Obsah sa nepodarilo naÄítaÅ¥.",
+ imgError: "Obrázok sa nepodarilo naÄítaÅ¥.",
+ slideshowStart: "Spustiť slideshow",
+ slideshowStop: "zastaviť slideshow"
+}); \ No newline at end of file
diff --git a/library/colorbox/i18n/jquery.colorbox-sr.js b/library/colorbox/i18n/jquery.colorbox-sr.js
new file mode 100644
index 000000000..618e73c4a
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-sr.js
@@ -0,0 +1,15 @@
+/*
+ jQuery Colorbox language configuration
+ language: Serbian (sr)
+ translated by: Sasa Stefanovic (baguje.com)
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "Slika {current} od {total}",
+ previous: "Prethodna",
+ next: "Sledeća",
+ close: "Zatvori",
+ xhrError: "NeuspeÅ¡no uÄitavanje sadržaja.",
+ imgError: "NeuspeÅ¡no uÄitavanje slike.",
+ slideshowStart: "Pokreni slideshow",
+ slideshowStop: "Zaustavi slideshow"
+});
diff --git a/library/colorbox/i18n/jquery.colorbox-sv.js b/library/colorbox/i18n/jquery.colorbox-sv.js
new file mode 100644
index 000000000..01bb1d8c6
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-sv.js
@@ -0,0 +1,15 @@
+/*
+ jQuery Colorbox language configuration
+ language: Swedish (sv)
+ translated by: Mattias Reichel
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "Bild {current} av {total}",
+ previous: "Föregående",
+ next: "Nästa",
+ close: "Stäng",
+ xhrError: "Innehållet kunde inte laddas.",
+ imgError: "Den här bilden kunde inte laddas.",
+ slideshowStart: "Starta bildspel",
+ slideshowStop: "Stoppa bildspel"
+}); \ No newline at end of file
diff --git a/library/colorbox/i18n/jquery.colorbox-tr.js b/library/colorbox/i18n/jquery.colorbox-tr.js
new file mode 100644
index 000000000..d467c2ef1
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-tr.js
@@ -0,0 +1,19 @@
+/*
+ jQuery Colorbox language configuration
+ language: Turkish (tr)
+ translated by: Caner ÖNCEL
+ site: egonomik.com
+
+ edited by: Sinan Eldem
+ www.sinaneldem.com.tr
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "Görsel {current} / {total}",
+ previous: "Önceki",
+ next: "Sonraki",
+ close: "Kapat",
+ xhrError: "İçerik yüklenirken hata meydana geldi.",
+ imgError: "Resim yüklenirken hata meydana geldi.",
+ slideshowStart: "Slaytı Başlat",
+ slideshowStop: "Slaytı Durdur"
+});
diff --git a/library/colorbox/i18n/jquery.colorbox-uk.js b/library/colorbox/i18n/jquery.colorbox-uk.js
new file mode 100644
index 000000000..3f786d3f4
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-uk.js
@@ -0,0 +1,16 @@
+/*
+ jQuery ColorBox language configuration
+ language: Ukrainian (uk)
+ translated by: Andrew
+ http://acisoftware.com.ua
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ {current} з {total}",
+ previous: "попереднє",
+ next: "наÑтупне",
+ close: "закрити",
+ xhrError: "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ вміÑÑ‚.",
+ imgError: "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ зображеннÑ.",
+ slideshowStart: "почати Ñлайд-шоу",
+ slideshowStop: "зупинити Ñлайд-шоу"
+}); \ No newline at end of file
diff --git a/library/colorbox/i18n/jquery.colorbox-zh-CN.js b/library/colorbox/i18n/jquery.colorbox-zh-CN.js
new file mode 100644
index 000000000..770d8eacf
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-zh-CN.js
@@ -0,0 +1,15 @@
+/*
+ jQuery Colorbox language configuration
+ language: Chinese Simplified (zh-CN)
+ translated by: zhao weiming
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "当å‰å›¾åƒ {current} 总共 {total}",
+ previous: "å‰ä¸€é¡µ",
+ next: "åŽä¸€é¡µ",
+ close: "关闭",
+ xhrError: "此内容无法加载",
+ imgError: "此图片无法加载",
+ slideshowStart: "开始播放幻ç¯ç‰‡",
+ slideshowStop: "åœæ­¢æ’­æ”¾å¹»ç¯ç‰‡"
+}); \ No newline at end of file
diff --git a/library/colorbox/i18n/jquery.colorbox-zh-TW.js b/library/colorbox/i18n/jquery.colorbox-zh-TW.js
new file mode 100644
index 000000000..b0c4f123d
--- /dev/null
+++ b/library/colorbox/i18n/jquery.colorbox-zh-TW.js
@@ -0,0 +1,15 @@
+/*
+ jQuery Colorbox language configuration
+ language: Chinese Traditional (zh-TW)
+ translated by: Atans Chiu
+*/
+jQuery.extend(jQuery.colorbox.settings, {
+ current: "圖片 {current} 總共 {total}",
+ previous: "上一é ",
+ next: "下一é ",
+ close: "關閉",
+ xhrError: "此內容加載失敗.",
+ imgError: "此圖片加載失敗.",
+ slideshowStart: "開始幻燈片",
+ slideshowStop: "çµæŸå¹»ç‡ˆç‰‡"
+}); \ No newline at end of file
diff --git a/library/colorbox/images/border.png b/library/colorbox/images/border.png
deleted file mode 100644
index df13bb6da..000000000
--- a/library/colorbox/images/border.png
+++ /dev/null
Binary files differ
diff --git a/library/colorbox/images/controls.png b/library/colorbox/images/controls.png
deleted file mode 100644
index 65cfd1dc9..000000000
--- a/library/colorbox/images/controls.png
+++ /dev/null
Binary files differ
diff --git a/library/colorbox/images/loading.gif b/library/colorbox/images/loading.gif
deleted file mode 100644
index b4695d811..000000000
--- a/library/colorbox/images/loading.gif
+++ /dev/null
Binary files differ
diff --git a/library/colorbox/images/loading_background.png b/library/colorbox/images/loading_background.png
deleted file mode 100644
index 9de11f467..000000000
--- a/library/colorbox/images/loading_background.png
+++ /dev/null
Binary files differ
diff --git a/library/colorbox/jquery.colorbox-min.js b/library/colorbox/jquery.colorbox-min.js
index 969064042..c0cbe5cb7 100644
--- a/library/colorbox/jquery.colorbox-min.js
+++ b/library/colorbox/jquery.colorbox-min.js
@@ -1 +1,6 @@
-(function($,document,window){var defaults={transition:"elastic",speed:300,width:false,initialWidth:"600",innerWidth:false,maxWidth:false,height:false,initialHeight:"450",innerHeight:false,maxHeight:false,scalePhotos:true,scrolling:true,inline:false,html:false,iframe:false,fastIframe:true,photo:false,href:false,title:false,rel:false,opacity:.9,preloading:true,className:false,current:"image {current} of {total}",previous:"previous",next:"next",close:"close",xhrError:"This content failed to load.",imgError:"This image failed to load.",open:false,returnFocus:true,reposition:true,loop:true,slideshow:false,slideshowAuto:true,slideshowSpeed:2500,slideshowStart:"start slideshow",slideshowStop:"stop slideshow",onOpen:false,onLoad:false,onComplete:false,onCleanup:false,onClosed:false,overlayClose:true,escKey:true,arrowKey:true,top:false,bottom:false,left:false,right:false,fixed:false,data:undefined},colorbox="colorbox",prefix="cbox",boxElement=prefix+"Element",event_open=prefix+"_open",event_load=prefix+"_load",event_complete=prefix+"_complete",event_cleanup=prefix+"_cleanup",event_closed=prefix+"_closed",event_purge=prefix+"_purge",isIE=!$.support.leadingWhitespace,isIE6=isIE&&!window.XMLHttpRequest,event_ie6=prefix+"_IE6",$overlay,$box,$wrap,$content,$topBorder,$leftBorder,$rightBorder,$bottomBorder,$related,$window,$loaded,$loadingBay,$loadingOverlay,$title,$current,$slideshow,$next,$prev,$close,$groupControls,$events=$({}),settings,interfaceHeight,interfaceWidth,loadedHeight,loadedWidth,element,index,photo,open,active,closing,loadingTimer,publicMethod,div="div",className,init;function $tag(tag,id,css){var element=document.createElement(tag);if(id){element.id=prefix+id}if(css){element.style.cssText=css}return $(element)}function getIndex(increment){var max=$related.length,newIndex=(index+increment)%max;return newIndex<0?max+newIndex:newIndex}function setSize(size,dimension){return Math.round((/%/.test(size)?(dimension==="x"?$window.width():$window.height())/100:1)*parseInt(size,10))}function isImage(url){return settings.photo||/\.(gif|png|jp(e|g|eg)|bmp|ico)((#|\?).*)?$/i.test(url)}function makeSettings(){var i,data=$.data(element,colorbox);if(data==null){settings=$.extend({},defaults);if(console&&console.log){console.log("Error: cboxElement missing settings object")}}else{settings=$.extend({},data)}for(i in settings){if($.isFunction(settings[i])&&i.slice(0,2)!=="on"){settings[i]=settings[i].call(element)}}settings.rel=settings.rel||element.rel||$(element).data("rel")||"nofollow";settings.href=settings.href||$(element).attr("href");settings.title=settings.title||element.title;if(typeof settings.href==="string"){settings.href=$.trim(settings.href)}}function trigger(event,callback){$(document).trigger(event);$events.trigger(event);if($.isFunction(callback)){callback.call(element)}}function slideshow(){var timeOut,className=prefix+"Slideshow_",click="click."+prefix,clear,set,start,stop;if(settings.slideshow&&$related[1]){clear=function(){clearTimeout(timeOut)};set=function(){if(settings.loop||$related[index+1]){timeOut=setTimeout(publicMethod.next,settings.slideshowSpeed)}};start=function(){$slideshow.html(settings.slideshowStop).unbind(click).one(click,stop);$events.bind(event_complete,set).bind(event_load,clear).bind(event_cleanup,stop);$box.removeClass(className+"off").addClass(className+"on")};stop=function(){clear();$events.unbind(event_complete,set).unbind(event_load,clear).unbind(event_cleanup,stop);$slideshow.html(settings.slideshowStart).unbind(click).one(click,function(){publicMethod.next();start()});$box.removeClass(className+"on").addClass(className+"off")};if(settings.slideshowAuto){start()}else{stop()}}else{$box.removeClass(className+"off "+className+"on")}}function launch(target){if(!closing){element=target;makeSettings();$related=$(element);index=0;if(settings.rel!=="nofollow"){$related=$("."+boxElement).filter(function(){var data=$.data(this,colorbox),relRelated;if(data){relRelated=$(this).data("rel")||data.rel||this.rel}return relRelated===settings.rel});index=$related.index(element);if(index===-1){$related=$related.add(element);index=$related.length-1}}if(!open){open=active=true;$box.css({visibility:"hidden",display:"block"});$loaded=$tag(div,"LoadedContent","width:0; height:0; overflow:hidden").appendTo($content);interfaceHeight=$topBorder.height()+$bottomBorder.height()+$content.outerHeight(true)-$content.height();interfaceWidth=$leftBorder.width()+$rightBorder.width()+$content.outerWidth(true)-$content.width();loadedHeight=$loaded.outerHeight(true);loadedWidth=$loaded.outerWidth(true);if(settings.returnFocus){$(element).blur();$events.one(event_closed,function(){$(element).focus()})}$overlay.css({opacity:parseFloat(settings.opacity),cursor:settings.overlayClose?"pointer":"auto",visibility:"visible"}).show();settings.w=setSize(settings.initialWidth,"x");settings.h=setSize(settings.initialHeight,"y");publicMethod.position();if(isIE6){$window.bind("resize."+event_ie6+" scroll."+event_ie6,function(){$overlay.css({width:$window.width(),height:$window.height(),top:$window.scrollTop(),left:$window.scrollLeft()})}).trigger("resize."+event_ie6)}slideshow();trigger(event_open,settings.onOpen);$groupControls.add($title).hide();$close.html(settings.close).show()}publicMethod.load(true)}}function appendHTML(){if(!$box&&document.body){init=false;$window=$(window);$box=$tag(div).attr({id:colorbox,"class":isIE?prefix+(isIE6?"IE6":"IE"):""}).hide();$overlay=$tag(div,"Overlay",isIE6?"position:absolute":"").hide();$loadingOverlay=$tag(div,"LoadingOverlay").add($tag(div,"LoadingGraphic"));$wrap=$tag(div,"Wrapper");$content=$tag(div,"Content").append($title=$tag(div,"Title"),$current=$tag(div,"Current"),$next=$tag(div,"Next"),$prev=$tag(div,"Previous"),$slideshow=$tag(div,"Slideshow"),$close=$tag(div,"Close"));$wrap.append($tag(div).append($tag(div,"TopLeft"),$topBorder=$tag(div,"TopCenter"),$tag(div,"TopRight")),$tag(div,false,"clear:left").append($leftBorder=$tag(div,"MiddleLeft"),$content,$rightBorder=$tag(div,"MiddleRight")),$tag(div,false,"clear:left").append($tag(div,"BottomLeft"),$bottomBorder=$tag(div,"BottomCenter"),$tag(div,"BottomRight"))).find("div div").css({"float":"left"});$loadingBay=$tag(div,false,"position:absolute; width:9999px; visibility:hidden; display:none");$groupControls=$next.add($prev).add($current).add($slideshow);$(document.body).append($overlay,$box.append($wrap,$loadingBay))}}function addBindings(){function clickHandler(e){if(!(e.which>1||e.shiftKey||e.altKey||e.metaKey)){e.preventDefault();launch(this)}}if($box){if(!init){init=true;$next.click(function(){publicMethod.next()});$prev.click(function(){publicMethod.prev()});$close.click(function(){publicMethod.close()});$overlay.click(function(){if(settings.overlayClose){publicMethod.close()}});$(document).bind("keydown."+prefix,function(e){var key=e.keyCode;if(open&&settings.escKey&&key===27){e.preventDefault();publicMethod.close()}if(open&&settings.arrowKey&&$related[1]){if(key===37){e.preventDefault();$prev.click()}else if(key===39){e.preventDefault();$next.click()}}});if($.isFunction($.fn.on)){$(document).on("click."+prefix,"."+boxElement,clickHandler)}else{$("."+boxElement).live("click."+prefix,clickHandler)}}return true}return false}if($.colorbox){return}$(appendHTML);publicMethod=$.fn[colorbox]=$[colorbox]=function(options,callback){var $this=this;options=options||{};appendHTML();if(addBindings()){if($.isFunction($this)){$this=$("<a/>");options.open=true}else if(!$this[0]){return $this}if(callback){options.onComplete=callback}$this.each(function(){$.data(this,colorbox,$.extend({},$.data(this,colorbox)||defaults,options))}).addClass(boxElement);if($.isFunction(options.open)&&options.open.call($this)||options.open){launch($this[0])}}return $this};publicMethod.position=function(speed,loadedCallback){var css,top=0,left=0,offset=$box.offset(),scrollTop,scrollLeft;$window.unbind("resize."+prefix);$box.css({top:-9e4,left:-9e4});scrollTop=$window.scrollTop();scrollLeft=$window.scrollLeft();if(settings.fixed&&!isIE6){offset.top-=scrollTop;offset.left-=scrollLeft;$box.css({position:"fixed"})}else{top=scrollTop;left=scrollLeft;$box.css({position:"absolute"})}if(settings.right!==false){left+=Math.max($window.width()-settings.w-loadedWidth-interfaceWidth-setSize(settings.right,"x"),0)}else if(settings.left!==false){left+=setSize(settings.left,"x")}else{left+=Math.round(Math.max($window.width()-settings.w-loadedWidth-interfaceWidth,0)/2)}if(settings.bottom!==false){top+=Math.max($window.height()-settings.h-loadedHeight-interfaceHeight-setSize(settings.bottom,"y"),0)}else if(settings.top!==false){top+=setSize(settings.top,"y")}else{top+=Math.round(Math.max($window.height()-settings.h-loadedHeight-interfaceHeight,0)/2)}$box.css({top:offset.top,left:offset.left,visibility:"visible"});speed=$box.width()===settings.w+loadedWidth&&$box.height()===settings.h+loadedHeight?0:speed||0;$wrap[0].style.width=$wrap[0].style.height="9999px";function modalDimensions(that){$topBorder[0].style.width=$bottomBorder[0].style.width=$content[0].style.width=parseInt(that.style.width,10)-interfaceWidth+"px";$content[0].style.height=$leftBorder[0].style.height=$rightBorder[0].style.height=parseInt(that.style.height,10)-interfaceHeight+"px"}css={width:settings.w+loadedWidth+interfaceWidth,height:settings.h+loadedHeight+interfaceHeight,top:top,left:left};if(speed===0){$box.css(css)}$box.dequeue().animate(css,{duration:speed,complete:function(){modalDimensions(this);active=false;$wrap[0].style.width=settings.w+loadedWidth+interfaceWidth+"px";$wrap[0].style.height=settings.h+loadedHeight+interfaceHeight+"px";if(settings.reposition){setTimeout(function(){$window.bind("resize."+prefix,publicMethod.position)},1)}if(loadedCallback){loadedCallback()}},step:function(){modalDimensions(this)}})};publicMethod.resize=function(options){if(open){options=options||{};if(options.width){settings.w=setSize(options.width,"x")-loadedWidth-interfaceWidth}if(options.innerWidth){settings.w=setSize(options.innerWidth,"x")}$loaded.css({width:settings.w});if(options.height){settings.h=setSize(options.height,"y")-loadedHeight-interfaceHeight}if(options.innerHeight){settings.h=setSize(options.innerHeight,"y")}if(!options.innerHeight&&!options.height){$loaded.css({height:"auto"});settings.h=$loaded.height()}$loaded.css({height:settings.h});publicMethod.position(settings.transition==="none"?0:settings.speed)}};publicMethod.prep=function(object){if(!open){return}var callback,speed=settings.transition==="none"?0:settings.speed;$loaded.empty().remove();$loaded=$tag(div,"LoadedContent").append(object);function getWidth(){settings.w=settings.w||$loaded.width();settings.w=settings.mw&&settings.mw<settings.w?settings.mw:settings.w;return settings.w}function getHeight(){settings.h=settings.h||$loaded.height();settings.h=settings.mh&&settings.mh<settings.h?settings.mh:settings.h;return settings.h}$loaded.hide().appendTo($loadingBay.show()).css({width:getWidth(),overflow:settings.scrolling?"auto":"hidden"}).css({height:getHeight()}).prependTo($content);$loadingBay.hide();$(photo).css({"float":"none"});callback=function(){var total=$related.length,iframe,frameBorder="frameBorder",allowTransparency="allowTransparency",complete;if(!open){return}function removeFilter(){if(isIE){$box[0].style.removeAttribute("filter")}}complete=function(){clearTimeout(loadingTimer);$loadingOverlay.remove();trigger(event_complete,settings.onComplete)};if(isIE){if(photo){$loaded.fadeIn(100)}}$title.html(settings.title).add($loaded).show();if(total>1){if(typeof settings.current==="string"){$current.html(settings.current.replace("{current}",index+1).replace("{total}",total)).show()}$next[settings.loop||index<total-1?"show":"hide"]().html(settings.next);$prev[settings.loop||index?"show":"hide"]().html(settings.previous);if(settings.slideshow){$slideshow.show()}if(settings.preloading){$.each([getIndex(-1),getIndex(1)],function(){var src,img,i=$related[this],data=$.data(i,colorbox);if(data&&data.href){src=data.href;if($.isFunction(src)){src=src.call(i)}}else{src=$(i).attr("href")}if(src&&(isImage(src)||data.photo)){img=new Image;img.src=src}})}}else{$groupControls.hide()}if(settings.iframe){iframe=$tag("iframe")[0];if(frameBorder in iframe){iframe[frameBorder]=0}if(allowTransparency in iframe){iframe[allowTransparency]="true"}if(!settings.scrolling){iframe.scrolling="no"}$(iframe).attr({src:settings.href,name:(new Date).getTime(),"class":prefix+"Iframe",allowFullScreen:true,webkitAllowFullScreen:true,mozallowfullscreen:true}).one("load",complete).appendTo($loaded);$events.one(event_purge,function(){iframe.src="//about:blank"});if(settings.fastIframe){$(iframe).trigger("load")}}else{complete()}if(settings.transition==="fade"){$box.fadeTo(speed,1,removeFilter)}else{removeFilter()}};if(settings.transition==="fade"){$box.fadeTo(speed,0,function(){publicMethod.position(0,callback)})}else{publicMethod.position(speed,callback)}};publicMethod.load=function(launched){var href,setResize,prep=publicMethod.prep,$inline;active=true;photo=false;element=$related[index];if(!launched){makeSettings()}if(className){$box.add($overlay).removeClass(className)}if(settings.className){$box.add($overlay).addClass(settings.className)}className=settings.className;trigger(event_purge);trigger(event_load,settings.onLoad);settings.h=settings.height?setSize(settings.height,"y")-loadedHeight-interfaceHeight:settings.innerHeight&&setSize(settings.innerHeight,"y");settings.w=settings.width?setSize(settings.width,"x")-loadedWidth-interfaceWidth:settings.innerWidth&&setSize(settings.innerWidth,"x");settings.mw=settings.w;settings.mh=settings.h;if(settings.maxWidth){settings.mw=setSize(settings.maxWidth,"x")-loadedWidth-interfaceWidth;settings.mw=settings.w&&settings.w<settings.mw?settings.w:settings.mw}if(settings.maxHeight){settings.mh=setSize(settings.maxHeight,"y")-loadedHeight-interfaceHeight;settings.mh=settings.h&&settings.h<settings.mh?settings.h:settings.mh}href=settings.href;loadingTimer=setTimeout(function(){$loadingOverlay.appendTo($content)},100);if(settings.inline){$inline=$tag(div).hide().insertBefore($(href)[0]);$events.one(event_purge,function(){$inline.replaceWith($loaded.children())});prep($(href))}else if(settings.iframe){prep(" ")}else if(settings.html){prep(settings.html)}else if(isImage(href)){$(photo=new Image).addClass(prefix+"Photo").bind("error",function(){settings.title=false;prep($tag(div,"Error").html(settings.imgError))}).one("load",function(){var percent;if(settings.scalePhotos){setResize=function(){photo.height-=photo.height*percent;photo.width-=photo.width*percent};if(settings.mw&&photo.width>settings.mw){percent=(photo.width-settings.mw)/photo.width;setResize()}if(settings.mh&&photo.height>settings.mh){percent=(photo.height-settings.mh)/photo.height;setResize()}}if(settings.h){photo.style.marginTop=Math.max(settings.mh-photo.height,0)/2+"px"}if($related[1]&&(settings.loop||$related[index+1])){photo.style.cursor="pointer";photo.onclick=function(){publicMethod.next()}}if(isIE){photo.style.msInterpolationMode="bicubic"}setTimeout(function(){prep(photo)},1)});setTimeout(function(){photo.src=href},1)}else if(href){$loadingBay.load(href,settings.data,function(data,status){prep(status==="error"?$tag(div,"Error").html(settings.xhrError):$(this).contents())})}};publicMethod.next=function(){if(!active&&$related[1]&&(settings.loop||$related[index+1])){index=getIndex(1);publicMethod.load()}};publicMethod.prev=function(){if(!active&&$related[1]&&(settings.loop||index)){index=getIndex(-1);publicMethod.load()}};publicMethod.close=function(){if(open&&!closing){closing=true;open=false;trigger(event_cleanup,settings.onCleanup);$window.unbind("."+prefix+" ."+event_ie6);$overlay.fadeTo(200,0);$box.stop().fadeTo(300,0,function(){$box.add($overlay).css({opacity:1,cursor:"auto"}).hide();trigger(event_purge);$loaded.empty().remove();setTimeout(function(){closing=false;trigger(event_closed,settings.onClosed)},1)})}};publicMethod.remove=function(){$([]).add($box).add($overlay).remove();$box=null;$("."+boxElement).removeData(colorbox).removeClass(boxElement);$(document).unbind("click."+prefix)};publicMethod.element=function(){return $(element)};publicMethod.settings=defaults})(jQuery,document,window); \ No newline at end of file
+/*!
+ Colorbox 1.5.14
+ license: MIT
+ http://www.jacklmoore.com/colorbox
+*/
+(function(t,e,i){function n(i,n,o){var r=e.createElement(i);return n&&(r.id=Z+n),o&&(r.style.cssText=o),t(r)}function o(){return i.innerHeight?i.innerHeight:t(i).height()}function r(e,i){i!==Object(i)&&(i={}),this.cache={},this.el=e,this.value=function(e){var n;return void 0===this.cache[e]&&(n=t(this.el).attr("data-cbox-"+e),void 0!==n?this.cache[e]=n:void 0!==i[e]?this.cache[e]=i[e]:void 0!==X[e]&&(this.cache[e]=X[e])),this.cache[e]},this.get=function(e){var i=this.value(e);return t.isFunction(i)?i.call(this.el,this):i}}function h(t){var e=W.length,i=(z+t)%e;return 0>i?e+i:i}function a(t,e){return Math.round((/%/.test(t)?("x"===e?E.width():o())/100:1)*parseInt(t,10))}function s(t,e){return t.get("photo")||t.get("photoRegex").test(e)}function l(t,e){return t.get("retinaUrl")&&i.devicePixelRatio>1?e.replace(t.get("photoRegex"),t.get("retinaSuffix")):e}function d(t){"contains"in y[0]&&!y[0].contains(t.target)&&t.target!==v[0]&&(t.stopPropagation(),y.focus())}function c(t){c.str!==t&&(y.add(v).removeClass(c.str).addClass(t),c.str=t)}function g(e){z=0,e&&e!==!1&&"nofollow"!==e?(W=t("."+te).filter(function(){var i=t.data(this,Y),n=new r(this,i);return n.get("rel")===e}),z=W.index(_.el),-1===z&&(W=W.add(_.el),z=W.length-1)):W=t(_.el)}function u(i){t(e).trigger(i),ae.triggerHandler(i)}function f(i){var o;if(!G){if(o=t(i).data(Y),_=new r(i,o),g(_.get("rel")),!$){$=q=!0,c(_.get("className")),y.css({visibility:"hidden",display:"block",opacity:""}),L=n(se,"LoadedContent","width:0; height:0; overflow:hidden; visibility:hidden"),b.css({width:"",height:""}).append(L),D=T.height()+k.height()+b.outerHeight(!0)-b.height(),j=C.width()+H.width()+b.outerWidth(!0)-b.width(),A=L.outerHeight(!0),N=L.outerWidth(!0);var h=a(_.get("initialWidth"),"x"),s=a(_.get("initialHeight"),"y"),l=_.get("maxWidth"),f=_.get("maxHeight");_.w=(l!==!1?Math.min(h,a(l,"x")):h)-N-j,_.h=(f!==!1?Math.min(s,a(f,"y")):s)-A-D,L.css({width:"",height:_.h}),J.position(),u(ee),_.get("onOpen"),O.add(F).hide(),y.focus(),_.get("trapFocus")&&e.addEventListener&&(e.addEventListener("focus",d,!0),ae.one(re,function(){e.removeEventListener("focus",d,!0)})),_.get("returnFocus")&&ae.one(re,function(){t(_.el).focus()})}var p=parseFloat(_.get("opacity"));v.css({opacity:p===p?p:"",cursor:_.get("overlayClose")?"pointer":"",visibility:"visible"}).show(),_.get("closeButton")?B.html(_.get("close")).appendTo(b):B.appendTo("<div/>"),w()}}function p(){y||(V=!1,E=t(i),y=n(se).attr({id:Y,"class":t.support.opacity===!1?Z+"IE":"",role:"dialog",tabindex:"-1"}).hide(),v=n(se,"Overlay").hide(),S=t([n(se,"LoadingOverlay")[0],n(se,"LoadingGraphic")[0]]),x=n(se,"Wrapper"),b=n(se,"Content").append(F=n(se,"Title"),I=n(se,"Current"),P=t('<button type="button"/>').attr({id:Z+"Previous"}),K=t('<button type="button"/>').attr({id:Z+"Next"}),R=n("button","Slideshow"),S),B=t('<button type="button"/>').attr({id:Z+"Close"}),x.append(n(se).append(n(se,"TopLeft"),T=n(se,"TopCenter"),n(se,"TopRight")),n(se,!1,"clear:left").append(C=n(se,"MiddleLeft"),b,H=n(se,"MiddleRight")),n(se,!1,"clear:left").append(n(se,"BottomLeft"),k=n(se,"BottomCenter"),n(se,"BottomRight"))).find("div div").css({"float":"left"}),M=n(se,!1,"position:absolute; width:9999px; visibility:hidden; display:none; max-width:none;"),O=K.add(P).add(I).add(R)),e.body&&!y.parent().length&&t(e.body).append(v,y.append(x,M))}function m(){function i(t){t.which>1||t.shiftKey||t.altKey||t.metaKey||t.ctrlKey||(t.preventDefault(),f(this))}return y?(V||(V=!0,K.click(function(){J.next()}),P.click(function(){J.prev()}),B.click(function(){J.close()}),v.click(function(){_.get("overlayClose")&&J.close()}),t(e).bind("keydown."+Z,function(t){var e=t.keyCode;$&&_.get("escKey")&&27===e&&(t.preventDefault(),J.close()),$&&_.get("arrowKey")&&W[1]&&!t.altKey&&(37===e?(t.preventDefault(),P.click()):39===e&&(t.preventDefault(),K.click()))}),t.isFunction(t.fn.on)?t(e).on("click."+Z,"."+te,i):t("."+te).live("click."+Z,i)),!0):!1}function w(){var e,o,r,h=J.prep,d=++le;if(q=!0,U=!1,u(he),u(ie),_.get("onLoad"),_.h=_.get("height")?a(_.get("height"),"y")-A-D:_.get("innerHeight")&&a(_.get("innerHeight"),"y"),_.w=_.get("width")?a(_.get("width"),"x")-N-j:_.get("innerWidth")&&a(_.get("innerWidth"),"x"),_.mw=_.w,_.mh=_.h,_.get("maxWidth")&&(_.mw=a(_.get("maxWidth"),"x")-N-j,_.mw=_.w&&_.w<_.mw?_.w:_.mw),_.get("maxHeight")&&(_.mh=a(_.get("maxHeight"),"y")-A-D,_.mh=_.h&&_.h<_.mh?_.h:_.mh),e=_.get("href"),Q=setTimeout(function(){S.show()},100),_.get("inline")){var c=t(e);r=t("<div>").hide().insertBefore(c),ae.one(he,function(){r.replaceWith(c)}),h(c)}else _.get("iframe")?h(" "):_.get("html")?h(_.get("html")):s(_,e)?(e=l(_,e),U=new Image,t(U).addClass(Z+"Photo").bind("error",function(){h(n(se,"Error").html(_.get("imgError")))}).one("load",function(){d===le&&setTimeout(function(){var e;t.each(["alt","longdesc","aria-describedby"],function(e,i){var n=t(_.el).attr(i)||t(_.el).attr("data-"+i);n&&U.setAttribute(i,n)}),_.get("retinaImage")&&i.devicePixelRatio>1&&(U.height=U.height/i.devicePixelRatio,U.width=U.width/i.devicePixelRatio),_.get("scalePhotos")&&(o=function(){U.height-=U.height*e,U.width-=U.width*e},_.mw&&U.width>_.mw&&(e=(U.width-_.mw)/U.width,o()),_.mh&&U.height>_.mh&&(e=(U.height-_.mh)/U.height,o())),_.h&&(U.style.marginTop=Math.max(_.mh-U.height,0)/2+"px"),W[1]&&(_.get("loop")||W[z+1])&&(U.style.cursor="pointer",U.onclick=function(){J.next()}),U.style.width=U.width+"px",U.style.height=U.height+"px",h(U)},1)}),U.src=e):e&&M.load(e,_.get("data"),function(e,i){d===le&&h("error"===i?n(se,"Error").html(_.get("xhrError")):t(this).contents())})}var v,y,x,b,T,C,H,k,W,E,L,M,S,F,I,R,K,P,B,O,_,D,j,A,N,z,U,$,q,G,Q,J,V,X={html:!1,photo:!1,iframe:!1,inline:!1,transition:"elastic",speed:300,fadeOut:300,width:!1,initialWidth:"600",innerWidth:!1,maxWidth:!1,height:!1,initialHeight:"450",innerHeight:!1,maxHeight:!1,scalePhotos:!0,scrolling:!0,opacity:.9,preloading:!0,className:!1,overlayClose:!0,escKey:!0,arrowKey:!0,top:!1,bottom:!1,left:!1,right:!1,fixed:!1,data:void 0,closeButton:!0,fastIframe:!0,open:!1,reposition:!0,loop:!0,slideshow:!1,slideshowAuto:!0,slideshowSpeed:2500,slideshowStart:"start slideshow",slideshowStop:"stop slideshow",photoRegex:/\.(gif|png|jp(e|g|eg)|bmp|ico|webp|jxr|svg)((#|\?).*)?$/i,retinaImage:!1,retinaUrl:!1,retinaSuffix:"@2x.$1",current:"image {current} of {total}",previous:"previous",next:"next",close:"close",xhrError:"This content failed to load.",imgError:"This image failed to load.",returnFocus:!0,trapFocus:!0,onOpen:!1,onLoad:!1,onComplete:!1,onCleanup:!1,onClosed:!1,rel:function(){return this.rel},href:function(){return t(this).attr("href")},title:function(){return this.title}},Y="colorbox",Z="cbox",te=Z+"Element",ee=Z+"_open",ie=Z+"_load",ne=Z+"_complete",oe=Z+"_cleanup",re=Z+"_closed",he=Z+"_purge",ae=t("<a/>"),se="div",le=0,de={},ce=function(){function t(){clearTimeout(h)}function e(){(_.get("loop")||W[z+1])&&(t(),h=setTimeout(J.next,_.get("slideshowSpeed")))}function i(){R.html(_.get("slideshowStop")).unbind(s).one(s,n),ae.bind(ne,e).bind(ie,t),y.removeClass(a+"off").addClass(a+"on")}function n(){t(),ae.unbind(ne,e).unbind(ie,t),R.html(_.get("slideshowStart")).unbind(s).one(s,function(){J.next(),i()}),y.removeClass(a+"on").addClass(a+"off")}function o(){r=!1,R.hide(),t(),ae.unbind(ne,e).unbind(ie,t),y.removeClass(a+"off "+a+"on")}var r,h,a=Z+"Slideshow_",s="click."+Z;return function(){r?_.get("slideshow")||(ae.unbind(oe,o),o()):_.get("slideshow")&&W[1]&&(r=!0,ae.one(oe,o),_.get("slideshowAuto")?i():n(),R.show())}}();t[Y]||(t(p),J=t.fn[Y]=t[Y]=function(e,i){var n,o=this;if(e=e||{},t.isFunction(o))o=t("<a/>"),e.open=!0;else if(!o[0])return o;return o[0]?(p(),m()&&(i&&(e.onComplete=i),o.each(function(){var i=t.data(this,Y)||{};t.data(this,Y,t.extend(i,e))}).addClass(te),n=new r(o[0],e),n.get("open")&&f(o[0])),o):o},J.position=function(e,i){function n(){T[0].style.width=k[0].style.width=b[0].style.width=parseInt(y[0].style.width,10)-j+"px",b[0].style.height=C[0].style.height=H[0].style.height=parseInt(y[0].style.height,10)-D+"px"}var r,h,s,l=0,d=0,c=y.offset();if(E.unbind("resize."+Z),y.css({top:-9e4,left:-9e4}),h=E.scrollTop(),s=E.scrollLeft(),_.get("fixed")?(c.top-=h,c.left-=s,y.css({position:"fixed"})):(l=h,d=s,y.css({position:"absolute"})),d+=_.get("right")!==!1?Math.max(E.width()-_.w-N-j-a(_.get("right"),"x"),0):_.get("left")!==!1?a(_.get("left"),"x"):Math.round(Math.max(E.width()-_.w-N-j,0)/2),l+=_.get("bottom")!==!1?Math.max(o()-_.h-A-D-a(_.get("bottom"),"y"),0):_.get("top")!==!1?a(_.get("top"),"y"):Math.round(Math.max(o()-_.h-A-D,0)/2),y.css({top:c.top,left:c.left,visibility:"visible"}),x[0].style.width=x[0].style.height="9999px",r={width:_.w+N+j,height:_.h+A+D,top:l,left:d},e){var g=0;t.each(r,function(t){return r[t]!==de[t]?(g=e,void 0):void 0}),e=g}de=r,e||y.css(r),y.dequeue().animate(r,{duration:e||0,complete:function(){n(),q=!1,x[0].style.width=_.w+N+j+"px",x[0].style.height=_.h+A+D+"px",_.get("reposition")&&setTimeout(function(){E.bind("resize."+Z,J.position)},1),t.isFunction(i)&&i()},step:n})},J.resize=function(t){var e;$&&(t=t||{},t.width&&(_.w=a(t.width,"x")-N-j),t.innerWidth&&(_.w=a(t.innerWidth,"x")),L.css({width:_.w}),t.height&&(_.h=a(t.height,"y")-A-D),t.innerHeight&&(_.h=a(t.innerHeight,"y")),t.innerHeight||t.height||(e=L.scrollTop(),L.css({height:"auto"}),_.h=L.height()),L.css({height:_.h}),e&&L.scrollTop(e),J.position("none"===_.get("transition")?0:_.get("speed")))},J.prep=function(i){function o(){return _.w=_.w||L.width(),_.w=_.mw&&_.mw<_.w?_.mw:_.w,_.w}function a(){return _.h=_.h||L.height(),_.h=_.mh&&_.mh<_.h?_.mh:_.h,_.h}if($){var d,g="none"===_.get("transition")?0:_.get("speed");L.remove(),L=n(se,"LoadedContent").append(i),L.hide().appendTo(M.show()).css({width:o(),overflow:_.get("scrolling")?"auto":"hidden"}).css({height:a()}).prependTo(b),M.hide(),t(U).css({"float":"none"}),c(_.get("className")),d=function(){function i(){t.support.opacity===!1&&y[0].style.removeAttribute("filter")}var n,o,a=W.length;$&&(o=function(){clearTimeout(Q),S.hide(),u(ne),_.get("onComplete")},F.html(_.get("title")).show(),L.show(),a>1?("string"==typeof _.get("current")&&I.html(_.get("current").replace("{current}",z+1).replace("{total}",a)).show(),K[_.get("loop")||a-1>z?"show":"hide"]().html(_.get("next")),P[_.get("loop")||z?"show":"hide"]().html(_.get("previous")),ce(),_.get("preloading")&&t.each([h(-1),h(1)],function(){var i,n=W[this],o=new r(n,t.data(n,Y)),h=o.get("href");h&&s(o,h)&&(h=l(o,h),i=e.createElement("img"),i.src=h)})):O.hide(),_.get("iframe")?(n=e.createElement("iframe"),"frameBorder"in n&&(n.frameBorder=0),"allowTransparency"in n&&(n.allowTransparency="true"),_.get("scrolling")||(n.scrolling="no"),t(n).attr({src:_.get("href"),name:(new Date).getTime(),"class":Z+"Iframe",allowFullScreen:!0}).one("load",o).appendTo(L),ae.one(he,function(){n.src="//about:blank"}),_.get("fastIframe")&&t(n).trigger("load")):o(),"fade"===_.get("transition")?y.fadeTo(g,1,i):i())},"fade"===_.get("transition")?y.fadeTo(g,0,function(){J.position(0,d)}):J.position(g,d)}},J.next=function(){!q&&W[1]&&(_.get("loop")||W[z+1])&&(z=h(1),f(W[z]))},J.prev=function(){!q&&W[1]&&(_.get("loop")||z)&&(z=h(-1),f(W[z]))},J.close=function(){$&&!G&&(G=!0,$=!1,u(oe),_.get("onCleanup"),E.unbind("."+Z),v.fadeTo(_.get("fadeOut")||0,0),y.stop().fadeTo(_.get("fadeOut")||0,0,function(){y.hide(),v.hide(),u(he),L.remove(),setTimeout(function(){G=!1,u(re),_.get("onClosed")},1)}))},J.remove=function(){y&&(y.stop(),t[Y].close(),y.stop(!1,!0).remove(),v.remove(),G=!1,y=null,t("."+te).removeData(Y).removeClass(te),t(e).unbind("click."+Z).unbind("keydown."+Z))},J.element=function(){return t(_.el)},J.settings=X)})(jQuery,document,window); \ No newline at end of file
diff --git a/library/colorbox/jquery.colorbox.js b/library/colorbox/jquery.colorbox.js
index 5b9aecdc2..c0348849e 100644
--- a/library/colorbox/jquery.colorbox.js
+++ b/library/colorbox/jquery.colorbox.js
@@ -1,15 +1,23 @@
-/*
- jQuery ColorBox v1.3.32 - 2013-01-31
- (c) 2013 Jack Moore - jacklmoore.com/colorbox
- license: http://www.opensource.org/licenses/mit-license.php
+/*!
+ Colorbox 1.5.14
+ license: MIT
+ http://www.jacklmoore.com/colorbox
*/
(function ($, document, window) {
var
// Default settings object.
// See http://jacklmoore.com/colorbox for details.
defaults = {
+ // data sources
+ html: false,
+ photo: false,
+ iframe: false,
+ inline: false,
+
+ // behavior and appearance
transition: "elastic",
speed: 300,
+ fadeOut: 300,
width: false,
initialWidth: "600",
innerWidth: false,
@@ -20,18 +28,36 @@
maxHeight: false,
scalePhotos: true,
scrolling: true,
- inline: false,
- html: false,
- iframe: false,
- fastIframe: true,
- photo: false,
- href: false,
- title: false,
- rel: false,
opacity: 0.9,
preloading: true,
className: false,
+ overlayClose: true,
+ escKey: true,
+ arrowKey: true,
+ top: false,
+ bottom: false,
+ left: false,
+ right: false,
+ fixed: false,
+ data: undefined,
+ closeButton: true,
+ fastIframe: true,
+ open: false,
+ reposition: true,
+ loop: true,
+ slideshow: false,
+ slideshowAuto: true,
+ slideshowSpeed: 2500,
+ slideshowStart: "start slideshow",
+ slideshowStop: "stop slideshow",
+ photoRegex: /\.(gif|png|jp(e|g|eg)|bmp|ico|webp|jxr|svg)((#|\?).*)?$/i,
+
+ // alternate image paths for high-res displays
+ retinaImage: false,
+ retinaUrl: false,
+ retinaSuffix: '@2x.$1',
+ // internationalization
current: "image {current} of {total}",
previous: "previous",
next: "next",
@@ -39,31 +65,29 @@
xhrError: "This content failed to load.",
imgError: "This image failed to load.",
- open: false,
+ // accessbility
returnFocus: true,
- reposition: true,
- loop: true,
- slideshow: false,
- slideshowAuto: true,
- slideshowSpeed: 2500,
- slideshowStart: "start slideshow",
- slideshowStop: "stop slideshow",
+ trapFocus: true,
+
+ // callbacks
onOpen: false,
onLoad: false,
onComplete: false,
onCleanup: false,
onClosed: false,
- overlayClose: true,
- escKey: true,
- arrowKey: true,
- top: false,
- bottom: false,
- left: false,
- right: false,
- fixed: false,
- data: undefined
+
+ rel: function() {
+ return this.rel;
+ },
+ href: function() {
+ // using this.href would give the absolute url, when the href may have been inteded as a selector (e.g. '#container')
+ return $(this).attr('href');
+ },
+ title: function() {
+ return this.title;
+ }
},
-
+
// Abstracting the HTML and event identifiers for easy rebranding
colorbox = 'colorbox',
prefix = 'cbox',
@@ -76,11 +100,6 @@
event_cleanup = prefix + '_cleanup',
event_closed = prefix + '_closed',
event_purge = prefix + '_purge',
-
- // Special Handling for IE
- isIE = !$.support.leadingWhitespace, // IE6 to IE8
- isIE6 = isIE && !window.XMLHttpRequest, // IE6
- event_ie6 = prefix + '_IE6',
// Cached jQuery Object Variables
$overlay,
@@ -103,7 +122,7 @@
$prev,
$close,
$groupControls,
- $events = $({}),
+ $events = $('<a/>'), // $({}) would be prefered, but there is an issue with jQuery 1.4.2
// Variables for cached values or use across multiple functions
settings,
@@ -111,7 +130,6 @@
interfaceWidth,
loadedHeight,
loadedWidth,
- element,
index,
photo,
open,
@@ -120,14 +138,15 @@
loadingTimer,
publicMethod,
div = "div",
- className,
+ requests = 0,
+ previousCSS = {},
init;
// ****************
// HELPER FUNCTIONS
// ****************
- // Convience function for creating new jQuery objects
+ // Convenience function for creating new jQuery objects
function $tag(tag, id, css) {
var element = document.createElement(tag);
@@ -141,6 +160,44 @@
return $(element);
}
+
+ // Get the window height using innerHeight when available to avoid an issue with iOS
+ // http://bugs.jquery.com/ticket/6724
+ function winheight() {
+ return window.innerHeight ? window.innerHeight : $(window).height();
+ }
+
+ function Settings(element, options) {
+ if (options !== Object(options)) {
+ options = {};
+ }
+
+ this.cache = {};
+ this.el = element;
+
+ this.value = function(key) {
+ var dataAttr;
+
+ if (this.cache[key] === undefined) {
+ dataAttr = $(this.el).attr('data-cbox-'+key);
+
+ if (dataAttr !== undefined) {
+ this.cache[key] = dataAttr;
+ } else if (options[key] !== undefined) {
+ this.cache[key] = options[key];
+ } else if (defaults[key] !== undefined) {
+ this.cache[key] = defaults[key];
+ }
+ }
+
+ return this.cache[key];
+ };
+
+ this.get = function(key) {
+ var value = this.value(key);
+ return $.isFunction(value) ? value.call(this.el, this) : value;
+ };
+ }
// Determine the next and previous members in a group.
function getIndex(increment) {
@@ -153,224 +210,254 @@
// Convert '%' and 'px' values to integers
function setSize(size, dimension) {
- return Math.round((/%/.test(size) ? ((dimension === 'x' ? $window.width() : $window.height()) / 100) : 1) * parseInt(size, 10));
+ return Math.round((/%/.test(size) ? ((dimension === 'x' ? $window.width() : winheight()) / 100) : 1) * parseInt(size, 10));
}
// Checks an href to see if it is a photo.
- // There is a force photo option (photo: true) for hrefs that cannot be matched by this regex.
- function isImage(url) {
- return settings.photo || /\.(gif|png|jp(e|g|eg)|bmp|ico)((#|\?).*)?$/i.test(url);
+ // There is a force photo option (photo: true) for hrefs that cannot be matched by the regex.
+ function isImage(settings, url) {
+ return settings.get('photo') || settings.get('photoRegex').test(url);
}
- // Assigns function results to their respective properties
- function makeSettings() {
- var i,
- data = $.data(element, colorbox);
-
- if (data == null) {
- settings = $.extend({}, defaults);
- if (console && console.log) {
- console.log('Error: cboxElement missing settings object');
- }
- } else {
- settings = $.extend({}, data);
+ function retinaUrl(settings, url) {
+ return settings.get('retinaUrl') && window.devicePixelRatio > 1 ? url.replace(settings.get('photoRegex'), settings.get('retinaSuffix')) : url;
+ }
+
+ function trapFocus(e) {
+ if ('contains' in $box[0] && !$box[0].contains(e.target) && e.target !== $overlay[0]) {
+ e.stopPropagation();
+ $box.focus();
}
-
- for (i in settings) {
- if ($.isFunction(settings[i]) && i.slice(0, 2) !== 'on') { // checks to make sure the function isn't one of the callbacks, they will be handled at the appropriate time.
- settings[i] = settings[i].call(element);
- }
+ }
+
+ function setClass(str) {
+ if (setClass.str !== str) {
+ $box.add($overlay).removeClass(setClass.str).addClass(str);
+ setClass.str = str;
}
+ }
+
+ function getRelated(rel) {
+ index = 0;
- settings.rel = settings.rel || element.rel || $(element).data('rel') || 'nofollow';
- settings.href = settings.href || $(element).attr('href');
- settings.title = settings.title || element.title;
-
- if (typeof settings.href === "string") {
- settings.href = $.trim(settings.href);
+ if (rel && rel !== false && rel !== 'nofollow') {
+ $related = $('.' + boxElement).filter(function () {
+ var options = $.data(this, colorbox);
+ var settings = new Settings(this, options);
+ return (settings.get('rel') === rel);
+ });
+ index = $related.index(settings.el);
+
+ // Check direct calls to Colorbox.
+ if (index === -1) {
+ $related = $related.add(settings.el);
+ index = $related.length - 1;
+ }
+ } else {
+ $related = $(settings.el);
}
}
- function trigger(event, callback) {
+ function trigger(event) {
// for external use
$(document).trigger(event);
-
// for internal use
- $events.trigger(event);
+ $events.triggerHandler(event);
+ }
+
+ var slideshow = (function(){
+ var active,
+ className = prefix + "Slideshow_",
+ click = "click." + prefix,
+ timeOut;
- if ($.isFunction(callback)) {
- callback.call(element);
+ function clear () {
+ clearTimeout(timeOut);
}
- }
- // Slideshow functionality
- function slideshow() {
- var
- timeOut,
- className = prefix + "Slideshow_",
- click = "click." + prefix,
- clear,
- set,
- start,
- stop;
-
- if (settings.slideshow && $related[1]) {
- clear = function () {
- clearTimeout(timeOut);
- };
+ function set() {
+ if (settings.get('loop') || $related[index + 1]) {
+ clear();
+ timeOut = setTimeout(publicMethod.next, settings.get('slideshowSpeed'));
+ }
+ }
- set = function () {
- if (settings.loop || $related[index + 1]) {
- timeOut = setTimeout(publicMethod.next, settings.slideshowSpeed);
- }
- };
+ function start() {
+ $slideshow
+ .html(settings.get('slideshowStop'))
+ .unbind(click)
+ .one(click, stop);
- start = function () {
- $slideshow
- .html(settings.slideshowStop)
- .unbind(click)
- .one(click, stop);
+ $events
+ .bind(event_complete, set)
+ .bind(event_load, clear);
- $events
- .bind(event_complete, set)
- .bind(event_load, clear)
- .bind(event_cleanup, stop);
+ $box.removeClass(className + "off").addClass(className + "on");
+ }
- $box.removeClass(className + "off").addClass(className + "on");
- };
+ function stop() {
+ clear();
- stop = function () {
- clear();
-
- $events
- .unbind(event_complete, set)
- .unbind(event_load, clear)
- .unbind(event_cleanup, stop);
-
- $slideshow
- .html(settings.slideshowStart)
- .unbind(click)
- .one(click, function () {
- publicMethod.next();
- start();
- });
+ $events
+ .unbind(event_complete, set)
+ .unbind(event_load, clear);
+
+ $slideshow
+ .html(settings.get('slideshowStart'))
+ .unbind(click)
+ .one(click, function () {
+ publicMethod.next();
+ start();
+ });
- $box.removeClass(className + "on").addClass(className + "off");
- };
-
- if (settings.slideshowAuto) {
- start();
- } else {
- stop();
- }
- } else {
- $box.removeClass(className + "off " + className + "on");
+ $box.removeClass(className + "on").addClass(className + "off");
}
- }
- function launch(target) {
- if (!closing) {
-
- element = target;
-
- makeSettings();
-
- $related = $(element);
-
- index = 0;
-
- if (settings.rel !== 'nofollow') {
- $related = $('.' + boxElement).filter(function () {
- var data = $.data(this, colorbox),
- relRelated;
+ function reset() {
+ active = false;
+ $slideshow.hide();
+ clear();
+ $events
+ .unbind(event_complete, set)
+ .unbind(event_load, clear);
+ $box.removeClass(className + "off " + className + "on");
+ }
- if (data) {
- relRelated = $(this).data('rel') || data.rel || this.rel;
+ return function(){
+ if (active) {
+ if (!settings.get('slideshow')) {
+ $events.unbind(event_cleanup, reset);
+ reset();
+ }
+ } else {
+ if (settings.get('slideshow') && $related[1]) {
+ active = true;
+ $events.one(event_cleanup, reset);
+ if (settings.get('slideshowAuto')) {
+ start();
+ } else {
+ stop();
}
-
- return (relRelated === settings.rel);
- });
- index = $related.index(element);
-
- // Check direct calls to ColorBox.
- if (index === -1) {
- $related = $related.add(element);
- index = $related.length - 1;
+ $slideshow.show();
}
}
+ };
+
+ }());
+
+
+ function launch(element) {
+ var options;
+
+ if (!closing) {
+
+ options = $(element).data(colorbox);
+
+ settings = new Settings(element, options);
+ getRelated(settings.get('rel'));
+
if (!open) {
open = active = true; // Prevents the page-change action from queuing up if the visitor holds down the left or right keys.
+
+ setClass(settings.get('className'));
// Show colorbox so the sizes can be calculated in older versions of jQuery
- $box.css({visibility:'hidden', display:'block'});
+ $box.css({visibility:'hidden', display:'block', opacity:''});
- $loaded = $tag(div, 'LoadedContent', 'width:0; height:0; overflow:hidden').appendTo($content);
+ $loaded = $tag(div, 'LoadedContent', 'width:0; height:0; overflow:hidden; visibility:hidden');
+ $content.css({width:'', height:''}).append($loaded);
// Cache values needed for size calculations
- interfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(true) - $content.height();//Subtraction needed for IE6
+ interfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(true) - $content.height();
interfaceWidth = $leftBorder.width() + $rightBorder.width() + $content.outerWidth(true) - $content.width();
loadedHeight = $loaded.outerHeight(true);
loadedWidth = $loaded.outerWidth(true);
- if (settings.returnFocus) {
- $(element).blur();
- $events.one(event_closed, function () {
- $(element).focus();
- });
- }
-
- $overlay.css({
- opacity: parseFloat(settings.opacity),
- cursor: settings.overlayClose ? "pointer" : "auto",
- visibility: 'visible'
- }).show();
-
- // Opens inital empty ColorBox prior to content being loaded.
- settings.w = setSize(settings.initialWidth, 'x');
- settings.h = setSize(settings.initialHeight, 'y');
+ // Opens inital empty Colorbox prior to content being loaded.
+ var initialWidth = setSize(settings.get('initialWidth'), 'x');
+ var initialHeight = setSize(settings.get('initialHeight'), 'y');
+ var maxWidth = settings.get('maxWidth');
+ var maxHeight = settings.get('maxHeight');
+
+ settings.w = (maxWidth !== false ? Math.min(initialWidth, setSize(maxWidth, 'x')) : initialWidth) - loadedWidth - interfaceWidth;
+ settings.h = (maxHeight !== false ? Math.min(initialHeight, setSize(maxHeight, 'y')) : initialHeight) - loadedHeight - interfaceHeight;
+
+ $loaded.css({width:'', height:settings.h});
publicMethod.position();
- if (isIE6) {
- $window.bind('resize.' + event_ie6 + ' scroll.' + event_ie6, function () {
- $overlay.css({width: $window.width(), height: $window.height(), top: $window.scrollTop(), left: $window.scrollLeft()});
- }).trigger('resize.' + event_ie6);
- }
-
- slideshow();
+ trigger(event_open);
+ settings.get('onOpen');
- trigger(event_open, settings.onOpen);
-
$groupControls.add($title).hide();
+
+ $box.focus();
- $close.html(settings.close).show();
+ if (settings.get('trapFocus')) {
+ // Confine focus to the modal
+ // Uses event capturing that is not supported in IE8-
+ if (document.addEventListener) {
+
+ document.addEventListener('focus', trapFocus, true);
+
+ $events.one(event_closed, function () {
+ document.removeEventListener('focus', trapFocus, true);
+ });
+ }
+ }
+
+ // Return focus on closing
+ if (settings.get('returnFocus')) {
+ $events.one(event_closed, function () {
+ $(settings.el).focus();
+ });
+ }
}
+
+ var opacity = parseFloat(settings.get('opacity'));
+ $overlay.css({
+ opacity: opacity === opacity ? opacity : '',
+ cursor: settings.get('overlayClose') ? 'pointer' : '',
+ visibility: 'visible'
+ }).show();
- publicMethod.load(true);
+ if (settings.get('closeButton')) {
+ $close.html(settings.get('close')).appendTo($content);
+ } else {
+ $close.appendTo('<div/>'); // replace with .detach() when dropping jQuery < 1.4
+ }
+
+ load();
}
}
- // ColorBox's markup needs to be added to the DOM prior to being called
+ // Colorbox's markup needs to be added to the DOM prior to being called
// so that the browser will go ahead and load the CSS background images.
function appendHTML() {
- if (!$box && document.body) {
+ if (!$box) {
init = false;
-
$window = $(window);
- $box = $tag(div).attr({id: colorbox, 'class': isIE ? prefix + (isIE6 ? 'IE6' : 'IE') : ''}).hide();
- $overlay = $tag(div, "Overlay", isIE6 ? 'position:absolute' : '').hide();
- $loadingOverlay = $tag(div, "LoadingOverlay").add($tag(div, "LoadingGraphic"));
+ $box = $tag(div).attr({
+ id: colorbox,
+ 'class': $.support.opacity === false ? prefix + 'IE' : '', // class for optional IE8 & lower targeted CSS.
+ role: 'dialog',
+ tabindex: '-1'
+ }).hide();
+ $overlay = $tag(div, "Overlay").hide();
+ $loadingOverlay = $([$tag(div, "LoadingOverlay")[0],$tag(div, "LoadingGraphic")[0]]);
$wrap = $tag(div, "Wrapper");
$content = $tag(div, "Content").append(
$title = $tag(div, "Title"),
$current = $tag(div, "Current"),
- $next = $tag(div, "Next"),
- $prev = $tag(div, "Previous"),
- $slideshow = $tag(div, "Slideshow"),
- $close = $tag(div, "Close")
+ $prev = $('<button type="button"/>').attr({id:prefix+'Previous'}),
+ $next = $('<button type="button"/>').attr({id:prefix+'Next'}),
+ $slideshow = $tag('button', "Slideshow"),
+ $loadingOverlay
);
+
+ $close = $('<button type="button"/>').attr({id:prefix+'Close'});
- $wrap.append( // The 3x3 Grid that makes up ColorBox
+ $wrap.append( // The 3x3 Grid that makes up Colorbox
$tag(div).append(
$tag(div, "TopLeft"),
$topBorder = $tag(div, "TopCenter"),
@@ -388,20 +475,21 @@
)
).find('div div').css({'float': 'left'});
- $loadingBay = $tag(div, false, 'position:absolute; width:9999px; visibility:hidden; display:none');
+ $loadingBay = $tag(div, false, 'position:absolute; width:9999px; visibility:hidden; display:none; max-width:none;');
$groupControls = $next.add($prev).add($current).add($slideshow);
-
+ }
+ if (document.body && !$box.parent().length) {
$(document.body).append($overlay, $box.append($wrap, $loadingBay));
}
}
- // Add ColorBox's event bindings
+ // Add Colorbox's event bindings
function addBindings() {
function clickHandler(e) {
// ignore non-left-mouse-clicks and clicks modified with ctrl / command, shift, or alt.
// See: http://jacklmoore.com/notes/click-events/
- if (!(e.which > 1 || e.shiftKey || e.altKey || e.metaKey)) {
+ if (!(e.which > 1 || e.shiftKey || e.altKey || e.metaKey || e.ctrlKey)) {
e.preventDefault();
launch(this);
}
@@ -422,7 +510,7 @@
publicMethod.close();
});
$overlay.click(function () {
- if (settings.overlayClose) {
+ if (settings.get('overlayClose')) {
publicMethod.close();
}
});
@@ -430,11 +518,11 @@
// Key Bindings
$(document).bind('keydown.' + prefix, function (e) {
var key = e.keyCode;
- if (open && settings.escKey && key === 27) {
+ if (open && settings.get('escKey') && key === 27) {
e.preventDefault();
publicMethod.close();
}
- if (open && settings.arrowKey && $related[1]) {
+ if (open && settings.get('arrowKey') && $related[1] && !e.altKey) {
if (key === 37) {
e.preventDefault();
$prev.click();
@@ -446,8 +534,12 @@
});
if ($.isFunction($.fn.on)) {
+ // For jQuery 1.7+
$(document).on('click.'+prefix, '.'+boxElement, clickHandler);
- } else { // For jQuery 1.3.x -> 1.6.x
+ } else {
+ // For jQuery 1.3.x -> 1.6.x
+ // This code is never reached in jQuery 1.9, so do not contact me about 'live' being removed.
+ // This is not here for jQuery 1.9, it's here for legacy users.
$('.'+boxElement).live('click.'+prefix, clickHandler);
}
}
@@ -456,8 +548,8 @@
return false;
}
- // Don't do anything if ColorBox already exists.
- if ($.colorbox) {
+ // Don't do anything if Colorbox already exists.
+ if ($[colorbox]) {
return;
}
@@ -467,39 +559,49 @@
// ****************
// PUBLIC FUNCTIONS
- // Usage format: $.fn.colorbox.close();
- // Usage from within an iframe: parent.$.fn.colorbox.close();
+ // Usage format: $.colorbox.close();
+ // Usage from within an iframe: parent.jQuery.colorbox.close();
// ****************
publicMethod = $.fn[colorbox] = $[colorbox] = function (options, callback) {
- var $this = this;
-
+ var settings;
+ var $obj = this;
+
options = options || {};
+
+ if ($.isFunction($obj)) { // assume a call to $.colorbox
+ $obj = $('<a/>');
+ options.open = true;
+ } else if (!$obj[0]) { // colorbox being applied to empty collection
+ return $obj;
+ }
+
+
+ if (!$obj[0]) { // colorbox being applied to empty collection
+ return $obj;
+ }
appendHTML();
if (addBindings()) {
- if ($.isFunction($this)) { // assume a call to $.colorbox
- $this = $('<a/>');
- options.open = true;
- } else if (!$this[0]) { // colorbox being applied to empty collection
- return $this;
- }
-
+
if (callback) {
options.onComplete = callback;
}
-
- $this.each(function () {
- $.data(this, colorbox, $.extend({}, $.data(this, colorbox) || defaults, options));
+
+ $obj.each(function () {
+ var old = $.data(this, colorbox) || {};
+ $.data(this, colorbox, $.extend(old, options));
}).addClass(boxElement);
+
+ settings = new Settings($obj[0], options);
- if (($.isFunction(options.open) && options.open.call($this)) || options.open) {
- launch($this[0]);
+ if (settings.get('open')) {
+ launch($obj[0]);
}
}
- return $this;
+ return $obj;
};
publicMethod.position = function (speed, loadedCallback) {
@@ -519,7 +621,7 @@
scrollTop = $window.scrollTop();
scrollLeft = $window.scrollLeft();
- if (settings.fixed && !isIE6) {
+ if (settings.get('fixed')) {
offset.top -= scrollTop;
offset.left -= scrollLeft;
$box.css({position: 'fixed'});
@@ -530,46 +632,58 @@
}
// keeps the top and left positions within the browser's viewport.
- if (settings.right !== false) {
- left += Math.max($window.width() - settings.w - loadedWidth - interfaceWidth - setSize(settings.right, 'x'), 0);
- } else if (settings.left !== false) {
- left += setSize(settings.left, 'x');
+ if (settings.get('right') !== false) {
+ left += Math.max($window.width() - settings.w - loadedWidth - interfaceWidth - setSize(settings.get('right'), 'x'), 0);
+ } else if (settings.get('left') !== false) {
+ left += setSize(settings.get('left'), 'x');
} else {
left += Math.round(Math.max($window.width() - settings.w - loadedWidth - interfaceWidth, 0) / 2);
}
- if (settings.bottom !== false) {
- top += Math.max($window.height() - settings.h - loadedHeight - interfaceHeight - setSize(settings.bottom, 'y'), 0);
- } else if (settings.top !== false) {
- top += setSize(settings.top, 'y');
+ if (settings.get('bottom') !== false) {
+ top += Math.max(winheight() - settings.h - loadedHeight - interfaceHeight - setSize(settings.get('bottom'), 'y'), 0);
+ } else if (settings.get('top') !== false) {
+ top += setSize(settings.get('top'), 'y');
} else {
- top += Math.round(Math.max($window.height() - settings.h - loadedHeight - interfaceHeight, 0) / 2);
+ top += Math.round(Math.max(winheight() - settings.h - loadedHeight - interfaceHeight, 0) / 2);
}
$box.css({top: offset.top, left: offset.left, visibility:'visible'});
-
- // setting the speed to 0 to reduce the delay between same-sized content.
- speed = ($box.width() === settings.w + loadedWidth && $box.height() === settings.h + loadedHeight) ? 0 : speed || 0;
// this gives the wrapper plenty of breathing room so it's floated contents can move around smoothly,
// but it has to be shrank down around the size of div#colorbox when it's done. If not,
// it can invoke an obscure IE bug when using iframes.
$wrap[0].style.width = $wrap[0].style.height = "9999px";
- function modalDimensions(that) {
- $topBorder[0].style.width = $bottomBorder[0].style.width = $content[0].style.width = (parseInt(that.style.width,10) - interfaceWidth)+'px';
- $content[0].style.height = $leftBorder[0].style.height = $rightBorder[0].style.height = (parseInt(that.style.height,10) - interfaceHeight)+'px';
+ function modalDimensions() {
+ $topBorder[0].style.width = $bottomBorder[0].style.width = $content[0].style.width = (parseInt($box[0].style.width,10) - interfaceWidth)+'px';
+ $content[0].style.height = $leftBorder[0].style.height = $rightBorder[0].style.height = (parseInt($box[0].style.height,10) - interfaceHeight)+'px';
}
css = {width: settings.w + loadedWidth + interfaceWidth, height: settings.h + loadedHeight + interfaceHeight, top: top, left: left};
- if(speed===0){ // temporary workaround to side-step jQuery-UI 1.8 bug (http://bugs.jquery.com/ticket/12273)
+ // setting the speed to 0 if the content hasn't changed size or position
+ if (speed) {
+ var tempSpeed = 0;
+ $.each(css, function(i){
+ if (css[i] !== previousCSS[i]) {
+ tempSpeed = speed;
+ return;
+ }
+ });
+ speed = tempSpeed;
+ }
+
+ previousCSS = css;
+
+ if (!speed) {
$box.css(css);
}
+
$box.dequeue().animate(css, {
- duration: speed,
+ duration: speed || 0,
complete: function () {
- modalDimensions(this);
+ modalDimensions();
active = false;
@@ -577,47 +691,57 @@
$wrap[0].style.width = (settings.w + loadedWidth + interfaceWidth) + "px";
$wrap[0].style.height = (settings.h + loadedHeight + interfaceHeight) + "px";
- if (settings.reposition) {
+ if (settings.get('reposition')) {
setTimeout(function () { // small delay before binding onresize due to an IE8 bug.
$window.bind('resize.' + prefix, publicMethod.position);
}, 1);
}
- if (loadedCallback) {
+ if ($.isFunction(loadedCallback)) {
loadedCallback();
}
},
- step: function () {
- modalDimensions(this);
- }
+ step: modalDimensions
});
};
publicMethod.resize = function (options) {
+ var scrolltop;
+
if (open) {
options = options || {};
if (options.width) {
settings.w = setSize(options.width, 'x') - loadedWidth - interfaceWidth;
}
+
if (options.innerWidth) {
settings.w = setSize(options.innerWidth, 'x');
}
+
$loaded.css({width: settings.w});
if (options.height) {
settings.h = setSize(options.height, 'y') - loadedHeight - interfaceHeight;
}
+
if (options.innerHeight) {
settings.h = setSize(options.innerHeight, 'y');
}
+
if (!options.innerHeight && !options.height) {
+ scrolltop = $loaded.scrollTop();
$loaded.css({height: "auto"});
settings.h = $loaded.height();
}
+
$loaded.css({height: settings.h});
+
+ if(scrolltop) {
+ $loaded.scrollTop(scrolltop);
+ }
- publicMethod.position(settings.transition === "none" ? 0 : settings.speed);
+ publicMethod.position(settings.get('transition') === "none" ? 0 : settings.get('speed'));
}
};
@@ -626,9 +750,9 @@
return;
}
- var callback, speed = settings.transition === "none" ? 0 : settings.speed;
-
- $loaded.empty().remove(); // Using empty first may prevent some IE7 issues.
+ var callback, speed = settings.get('transition') === "none" ? 0 : settings.get('speed');
+
+ $loaded.remove();
$loaded = $tag(div, 'LoadedContent').append(object);
@@ -645,81 +769,65 @@
$loaded.hide()
.appendTo($loadingBay.show())// content has to be appended to the DOM for accurate size calculations.
- .css({width: getWidth(), overflow: settings.scrolling ? 'auto' : 'hidden'})
+ .css({width: getWidth(), overflow: settings.get('scrolling') ? 'auto' : 'hidden'})
.css({height: getHeight()})// sets the height independently from the width in case the new width influences the value of height.
.prependTo($content);
$loadingBay.hide();
// floating the IMG removes the bottom line-height and fixed a problem where IE miscalculates the width of the parent element as 100% of the document width.
- //$(photo).css({'float': 'none', marginLeft: 'auto', marginRight: 'auto'});
$(photo).css({'float': 'none'});
-
+ setClass(settings.get('className'));
+
callback = function () {
var total = $related.length,
iframe,
- frameBorder = 'frameBorder',
- allowTransparency = 'allowTransparency',
complete;
if (!open) {
return;
}
- function removeFilter() {
- if (isIE) {
+ function removeFilter() { // Needed for IE8 in versions of jQuery prior to 1.7.2
+ if ($.support.opacity === false) {
$box[0].style.removeAttribute('filter');
}
}
complete = function () {
clearTimeout(loadingTimer);
- $loadingOverlay.remove();
- trigger(event_complete, settings.onComplete);
+ $loadingOverlay.hide();
+ trigger(event_complete);
+ settings.get('onComplete');
};
+
- if (isIE) {
- //This fadeIn helps the bicubic resampling to kick-in.
- if (photo) {
- $loaded.fadeIn(100);
- }
- }
-
- $title.html(settings.title).add($loaded).show();
+ $title.html(settings.get('title')).show();
+ $loaded.show();
if (total > 1) { // handle grouping
- if (typeof settings.current === "string") {
- $current.html(settings.current.replace('{current}', index + 1).replace('{total}', total)).show();
+ if (typeof settings.get('current') === "string") {
+ $current.html(settings.get('current').replace('{current}', index + 1).replace('{total}', total)).show();
}
- $next[(settings.loop || index < total - 1) ? "show" : "hide"]().html(settings.next);
- $prev[(settings.loop || index) ? "show" : "hide"]().html(settings.previous);
+ $next[(settings.get('loop') || index < total - 1) ? "show" : "hide"]().html(settings.get('next'));
+ $prev[(settings.get('loop') || index) ? "show" : "hide"]().html(settings.get('previous'));
- if (settings.slideshow) {
- $slideshow.show();
- }
+ slideshow();
// Preloads images within a rel group
- if (settings.preloading) {
+ if (settings.get('preloading')) {
$.each([getIndex(-1), getIndex(1)], function(){
- var src,
- img,
+ var img,
i = $related[this],
- data = $.data(i, colorbox);
-
- if (data && data.href) {
- src = data.href;
- if ($.isFunction(src)) {
- src = src.call(i);
- }
- } else {
- src = $(i).attr('href');
- }
+ settings = new Settings(i, $.data(i, colorbox)),
+ src = settings.get('href');
- if (src && (isImage(src) || data.photo)) {
- img = new Image();
+ if (src && isImage(settings, src)) {
+ src = retinaUrl(settings, src);
+ img = document.createElement('img');
img.src = src;
}
});
@@ -728,29 +836,27 @@
$groupControls.hide();
}
- if (settings.iframe) {
- iframe = $tag('iframe')[0];
+ if (settings.get('iframe')) {
+ iframe = document.createElement('iframe');
- if (frameBorder in iframe) {
- iframe[frameBorder] = 0;
+ if ('frameBorder' in iframe) {
+ iframe.frameBorder = 0;
}
- if (allowTransparency in iframe) {
- iframe[allowTransparency] = "true";
+ if ('allowTransparency' in iframe) {
+ iframe.allowTransparency = "true";
}
- if (!settings.scrolling) {
+ if (!settings.get('scrolling')) {
iframe.scrolling = "no";
}
$(iframe)
.attr({
- src: settings.href,
+ src: settings.get('href'),
name: (new Date()).getTime(), // give the iframe a unique name to prevent caching
'class': prefix + 'Iframe',
- allowFullScreen : true, // allow HTML5 video to go fullscreen
- webkitAllowFullScreen : true,
- mozallowfullscreen : true
+ allowFullScreen : true // allow HTML5 video to go fullscreen
})
.one('load', complete)
.appendTo($loaded);
@@ -759,21 +865,21 @@
iframe.src = "//about:blank";
});
- if (settings.fastIframe) {
+ if (settings.get('fastIframe')) {
$(iframe).trigger('load');
}
} else {
complete();
}
- if (settings.transition === 'fade') {
+ if (settings.get('transition') === 'fade') {
$box.fadeTo(speed, 1, removeFilter);
} else {
removeFilter();
}
};
- if (settings.transition === 'fade') {
+ if (settings.get('transition') === 'fade') {
$box.fadeTo(speed, 0, function () {
publicMethod.position(0, callback);
});
@@ -782,38 +888,24 @@
}
};
- publicMethod.load = function (launched) {
- var href, setResize, prep = publicMethod.prep, $inline;
+ function load () {
+ var href, setResize, prep = publicMethod.prep, $inline, request = ++requests;
active = true;
photo = false;
- element = $related[index];
-
- if (!launched) {
- makeSettings();
- }
-
- if (className) {
- $box.add($overlay).removeClass(className);
- }
- if (settings.className) {
- $box.add($overlay).addClass(settings.className);
- }
- className = settings.className;
-
trigger(event_purge);
+ trigger(event_load);
+ settings.get('onLoad');
- trigger(event_load, settings.onLoad);
+ settings.h = settings.get('height') ?
+ setSize(settings.get('height'), 'y') - loadedHeight - interfaceHeight :
+ settings.get('innerHeight') && setSize(settings.get('innerHeight'), 'y');
- settings.h = settings.height ?
- setSize(settings.height, 'y') - loadedHeight - interfaceHeight :
- settings.innerHeight && setSize(settings.innerHeight, 'y');
-
- settings.w = settings.width ?
- setSize(settings.width, 'x') - loadedWidth - interfaceWidth :
- settings.innerWidth && setSize(settings.innerWidth, 'x');
+ settings.w = settings.get('width') ?
+ setSize(settings.get('width'), 'x') - loadedWidth - interfaceWidth :
+ settings.get('innerWidth') && setSize(settings.get('innerWidth'), 'x');
// Sets the minimum dimensions for use in image scaling
settings.mw = settings.w;
@@ -821,153 +913,176 @@
// Re-evaluate the minimum width and height based on maxWidth and maxHeight values.
// If the width or height exceed the maxWidth or maxHeight, use the maximum values instead.
- if (settings.maxWidth) {
- settings.mw = setSize(settings.maxWidth, 'x') - loadedWidth - interfaceWidth;
+ if (settings.get('maxWidth')) {
+ settings.mw = setSize(settings.get('maxWidth'), 'x') - loadedWidth - interfaceWidth;
settings.mw = settings.w && settings.w < settings.mw ? settings.w : settings.mw;
}
- if (settings.maxHeight) {
- settings.mh = setSize(settings.maxHeight, 'y') - loadedHeight - interfaceHeight;
+ if (settings.get('maxHeight')) {
+ settings.mh = setSize(settings.get('maxHeight'), 'y') - loadedHeight - interfaceHeight;
settings.mh = settings.h && settings.h < settings.mh ? settings.h : settings.mh;
}
- href = settings.href;
+ href = settings.get('href');
loadingTimer = setTimeout(function () {
- $loadingOverlay.appendTo($content);
+ $loadingOverlay.show();
}, 100);
- if (settings.inline) {
+ if (settings.get('inline')) {
+ var $target = $(href);
// Inserts an empty placeholder where inline content is being pulled from.
- // An event is bound to put inline content back when ColorBox closes or loads new content.
- $inline = $tag(div).hide().insertBefore($(href)[0]);
+ // An event is bound to put inline content back when Colorbox closes or loads new content.
+ $inline = $('<div>').hide().insertBefore($target);
$events.one(event_purge, function () {
- $inline.replaceWith($loaded.children());
+ $inline.replaceWith($target);
});
- prep($(href));
- } else if (settings.iframe) {
+ prep($target);
+ } else if (settings.get('iframe')) {
// IFrame element won't be added to the DOM until it is ready to be displayed,
// to avoid problems with DOM-ready JS that might be trying to run in that iframe.
prep(" ");
- } else if (settings.html) {
- prep(settings.html);
- } else if (isImage(href)) {
- $(photo = new Image())
+ } else if (settings.get('html')) {
+ prep(settings.get('html'));
+ } else if (isImage(settings, href)) {
+
+ href = retinaUrl(settings, href);
+
+ photo = new Image();
+
+ $(photo)
.addClass(prefix + 'Photo')
.bind('error',function () {
- settings.title = false;
- prep($tag(div, 'Error').html(settings.imgError));
+ prep($tag(div, 'Error').html(settings.get('imgError')));
})
.one('load', function () {
- var percent;
-
- if (settings.scalePhotos) {
- setResize = function () {
- photo.height -= photo.height * percent;
- photo.width -= photo.width * percent;
- };
- if (settings.mw && photo.width > settings.mw) {
- percent = (photo.width - settings.mw) / photo.width;
- setResize();
+ if (request !== requests) {
+ return;
+ }
+
+ // A small pause because some browsers will occassionaly report a
+ // img.width and img.height of zero immediately after the img.onload fires
+ setTimeout(function(){
+ var percent;
+
+ $.each(['alt', 'longdesc', 'aria-describedby'], function(i,val){
+ var attr = $(settings.el).attr(val) || $(settings.el).attr('data-'+val);
+ if (attr) {
+ photo.setAttribute(val, attr);
+ }
+ });
+
+ if (settings.get('retinaImage') && window.devicePixelRatio > 1) {
+ photo.height = photo.height / window.devicePixelRatio;
+ photo.width = photo.width / window.devicePixelRatio;
}
- if (settings.mh && photo.height > settings.mh) {
- percent = (photo.height - settings.mh) / photo.height;
- setResize();
+
+ if (settings.get('scalePhotos')) {
+ setResize = function () {
+ photo.height -= photo.height * percent;
+ photo.width -= photo.width * percent;
+ };
+ if (settings.mw && photo.width > settings.mw) {
+ percent = (photo.width - settings.mw) / photo.width;
+ setResize();
+ }
+ if (settings.mh && photo.height > settings.mh) {
+ percent = (photo.height - settings.mh) / photo.height;
+ setResize();
+ }
}
- }
-
- if (settings.h) {
- photo.style.marginTop = Math.max(settings.mh - photo.height, 0) / 2 + 'px';
- }
-
- if ($related[1] && (settings.loop || $related[index + 1])) {
- photo.style.cursor = 'pointer';
- photo.onclick = function () {
- publicMethod.next();
- };
- }
-
- if (isIE) {
- photo.style.msInterpolationMode = 'bicubic';
- }
-
- setTimeout(function () { // A pause because Chrome will sometimes report a 0 by 0 size otherwise.
+
+ if (settings.h) {
+ photo.style.marginTop = Math.max(settings.mh - photo.height, 0) / 2 + 'px';
+ }
+
+ if ($related[1] && (settings.get('loop') || $related[index + 1])) {
+ photo.style.cursor = 'pointer';
+ photo.onclick = function () {
+ publicMethod.next();
+ };
+ }
+
+ photo.style.width = photo.width + 'px';
+ photo.style.height = photo.height + 'px';
prep(photo);
}, 1);
});
- setTimeout(function () { // A pause because Opera 10.6+ will sometimes not run the onload function otherwise.
- photo.src = href;
- }, 1);
+ photo.src = href;
+
} else if (href) {
- $loadingBay.load(href, settings.data, function (data, status) {
- prep(status === 'error' ? $tag(div, 'Error').html(settings.xhrError) : $(this).contents());
+ $loadingBay.load(href, settings.get('data'), function (data, status) {
+ if (request === requests) {
+ prep(status === 'error' ? $tag(div, 'Error').html(settings.get('xhrError')) : $(this).contents());
+ }
});
}
- };
+ }
// Navigates to the next page/image in a set.
publicMethod.next = function () {
- if (!active && $related[1] && (settings.loop || $related[index + 1])) {
+ if (!active && $related[1] && (settings.get('loop') || $related[index + 1])) {
index = getIndex(1);
- publicMethod.load();
+ launch($related[index]);
}
};
publicMethod.prev = function () {
- if (!active && $related[1] && (settings.loop || index)) {
+ if (!active && $related[1] && (settings.get('loop') || index)) {
index = getIndex(-1);
- publicMethod.load();
+ launch($related[index]);
}
};
- // Note: to use this within an iframe use the following format: parent.$.fn.colorbox.close();
+ // Note: to use this within an iframe use the following format: parent.jQuery.colorbox.close();
publicMethod.close = function () {
if (open && !closing) {
closing = true;
-
open = false;
+ trigger(event_cleanup);
+ settings.get('onCleanup');
+ $window.unbind('.' + prefix);
+ $overlay.fadeTo(settings.get('fadeOut') || 0, 0);
- trigger(event_cleanup, settings.onCleanup);
-
- $window.unbind('.' + prefix + ' .' + event_ie6);
-
- $overlay.fadeTo(200, 0);
-
- $box.stop().fadeTo(300, 0, function () {
-
- $box.add($overlay).css({'opacity': 1, cursor: 'auto'}).hide();
-
+ $box.stop().fadeTo(settings.get('fadeOut') || 0, 0, function () {
+ $box.hide();
+ $overlay.hide();
trigger(event_purge);
-
- $loaded.empty().remove(); // Using empty first may prevent some IE7 issues.
+ $loaded.remove();
setTimeout(function () {
closing = false;
- trigger(event_closed, settings.onClosed);
+ trigger(event_closed);
+ settings.get('onClosed');
}, 1);
});
}
};
- // Removes changes ColorBox made to the document, but does not remove the plugin
- // from jQuery.
+ // Removes changes Colorbox made to the document, but does not remove the plugin.
publicMethod.remove = function () {
- $([]).add($box).add($overlay).remove();
+ if (!$box) { return; }
+
+ $box.stop();
+ $[colorbox].close();
+ $box.stop(false, true).remove();
+ $overlay.remove();
+ closing = false;
$box = null;
$('.' + boxElement)
.removeData(colorbox)
.removeClass(boxElement);
- $(document).unbind('click.'+prefix);
+ $(document).unbind('click.'+prefix).unbind('keydown.'+prefix);
};
- // A method for fetching the current element ColorBox is referencing.
+ // A method for fetching the current element Colorbox is referencing.
// returns a jQuery object.
publicMethod.element = function () {
- return $(element);
+ return $(settings.el);
};
publicMethod.settings = defaults;
diff --git a/library/colorpicker/css/colorpicker.css b/library/colorpicker/css/colorpicker.css
deleted file mode 100644
index 05b02b485..000000000
--- a/library/colorpicker/css/colorpicker.css
+++ /dev/null
@@ -1,161 +0,0 @@
-.colorpicker {
- width: 356px;
- height: 176px;
- overflow: hidden;
- position: absolute;
- background: url(../images/colorpicker_background.png);
- font-family: Arial, Helvetica, sans-serif;
- display: none;
-}
-.colorpicker_color {
- width: 150px;
- height: 150px;
- left: 14px;
- top: 13px;
- position: absolute;
- background: #f00;
- overflow: hidden;
- cursor: crosshair;
-}
-.colorpicker_color div {
- position: absolute;
- top: 0;
- left: 0;
- width: 150px;
- height: 150px;
- background: url(../images/colorpicker_overlay.png);
-}
-.colorpicker_color div div {
- position: absolute;
- top: 0;
- left: 0;
- width: 11px;
- height: 11px;
- overflow: hidden;
- background: url(../images/colorpicker_select.gif);
- margin: -5px 0 0 -5px;
-}
-.colorpicker_hue {
- position: absolute;
- top: 13px;
- left: 171px;
- width: 35px;
- height: 150px;
- cursor: n-resize;
-}
-.colorpicker_hue div {
- position: absolute;
- width: 35px;
- height: 9px;
- overflow: hidden;
- background: url(../images/colorpicker_indic.gif) left top;
- margin: -4px 0 0 0;
- left: 0px;
-}
-.colorpicker_new_color {
- position: absolute;
- width: 60px;
- height: 30px;
- left: 213px;
- top: 13px;
- background: #f00;
-}
-.colorpicker_current_color {
- position: absolute;
- width: 60px;
- height: 30px;
- left: 283px;
- top: 13px;
- background: #f00;
-}
-.colorpicker input {
- background-color: transparent;
- border: 1px solid transparent;
- position: absolute;
- font-size: 10px;
- font-family: Arial, Helvetica, sans-serif;
- color: #898989;
- top: 4px;
- right: 11px;
- text-align: right;
- margin: 0;
- padding: 0;
- height: 11px;
-}
-.colorpicker_hex {
- position: absolute;
- width: 72px;
- height: 22px;
- background: url(../images/colorpicker_hex.png) top;
- left: 212px;
- top: 142px;
-}
-.colorpicker_hex input {
- right: 6px;
-}
-.colorpicker_field {
- height: 22px;
- width: 62px;
- background-position: top;
- position: absolute;
-}
-.colorpicker_field span {
- position: absolute;
- width: 12px;
- height: 22px;
- overflow: hidden;
- top: 0;
- right: 0;
- cursor: n-resize;
-}
-.colorpicker_rgb_r {
- background-image: url(../images/colorpicker_rgb_r.png);
- top: 52px;
- left: 212px;
-}
-.colorpicker_rgb_g {
- background-image: url(../images/colorpicker_rgb_g.png);
- top: 82px;
- left: 212px;
-}
-.colorpicker_rgb_b {
- background-image: url(../images/colorpicker_rgb_b.png);
- top: 112px;
- left: 212px;
-}
-.colorpicker_hsb_h {
- background-image: url(../images/colorpicker_hsb_h.png);
- top: 52px;
- left: 282px;
-}
-.colorpicker_hsb_s {
- background-image: url(../images/colorpicker_hsb_s.png);
- top: 82px;
- left: 282px;
-}
-.colorpicker_hsb_b {
- background-image: url(../images/colorpicker_hsb_b.png);
- top: 112px;
- left: 282px;
-}
-.colorpicker_submit {
- position: absolute;
- width: 22px;
- height: 22px;
- background: url(../images/colorpicker_submit.png) top;
- left: 322px;
- top: 142px;
- overflow: hidden;
-}
-.colorpicker_focus {
- background-position: center;
-}
-.colorpicker_hex.colorpicker_focus {
- background-position: bottom;
-}
-.colorpicker_submit.colorpicker_focus {
- background-position: bottom;
-}
-.colorpicker_slider {
- background-position: bottom;
-}
diff --git a/library/colorpicker/css/layout.css b/library/colorpicker/css/layout.css
deleted file mode 100644
index 8b3f00ff3..000000000
--- a/library/colorpicker/css/layout.css
+++ /dev/null
@@ -1,218 +0,0 @@
-body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td {
- margin:0;
- padding:0;
-}
-table {
- border-collapse:collapse;
- border-spacing:0;
-}
-fieldset,img {
- border:0;
-}
-address,caption,cite,code,dfn,em,strong,th,var {
- font-style:normal;
- font-weight:normal;
-}
-ol,ul {
- list-style:none;
-}
-caption,th {
- text-align:left;
-}
-h1,h2,h3,h4,h5,h6 {
- font-size:100%;
- font-weight:normal;
-}
-q:before,q:after {
- content:'';
-}
-abbr,acronym { border:0;
-}
-html, body {
- background-color: #fff;
- font-family: Arial, Helvetica, sans-serif;
- font-size: 12px;
- line-height: 18px;
- color: #52697E;
-}
-body {
- text-align: center;
- overflow: auto;
-}
-.wrapper {
- width: 700px;
- margin: 0 auto;
- text-align: left;
-}
-h1 {
- font-size: 21px;
- height: 47px;
- line-height: 47px;
- text-transform: uppercase;
-}
-.navigationTabs {
- height: 23px;
- line-height: 23px;
- border-bottom: 1px solid #ccc;
-}
-.navigationTabs li {
- float: left;
- height: 23px;
- line-height: 23px;
- padding-right: 3px;
-}
-.navigationTabs li a{
- float: left;
- dispaly: block;
- height: 23px;
- line-height: 23px;
- padding: 0 10px;
- overflow: hidden;
- color: #52697E;
- background-color: #eee;
- position: relative;
- text-decoration: none;
-}
-.navigationTabs li a:hover {
- background-color: #f0f0f0;
-}
-.navigationTabs li a.active {
- background-color: #fff;
- border: 1px solid #ccc;
- border-bottom: 0px solid;
-}
-.tabsContent {
- border: 1px solid #ccc;
- border-top: 0px solid;
- width: 698px;
- overflow: hidden;
-}
-.tab {
- padding: 16px;
- display: none;
-}
-.tab h2 {
- font-weight: bold;
- font-size: 16px;
-}
-.tab h3 {
- font-weight: bold;
- font-size: 14px;
- margin-top: 20px;
-}
-.tab p {
- margin-top: 16px;
- clear: both;
-}
-.tab ul {
- margin-top: 16px;
- list-style: disc;
-}
-.tab li {
- margin: 10px 0 0 35px;
-}
-.tab a {
- color: #8FB0CF;
-}
-.tab strong {
- font-weight: bold;
-}
-.tab pre {
- font-size: 11px;
- margin-top: 20px;
- width: 668px;
- overflow: auto;
- clear: both;
-}
-.tab table {
- width: 100%;
-}
-.tab table td {
- padding: 6px 10px 6px 0;
- vertical-align: top;
-}
-.tab dt {
- margin-top: 16px;
-}
-
-#colorSelector {
- position: relative;
- width: 36px;
- height: 36px;
- background: url(../images/select.png);
-}
-#colorSelector div {
- position: absolute;
- top: 3px;
- left: 3px;
- width: 30px;
- height: 30px;
- background: url(../images/select.png) center;
-}
-#colorSelector2 {
- position: absolute;
- top: 0;
- left: 0;
- width: 36px;
- height: 36px;
- background: url(../images/select2.png);
-}
-#colorSelector2 div {
- position: absolute;
- top: 4px;
- left: 4px;
- width: 28px;
- height: 28px;
- background: url(../images/select2.png) center;
-}
-#colorpickerHolder2 {
- top: 32px;
- left: 0;
- width: 356px;
- height: 0;
- overflow: hidden;
- position: absolute;
-}
-#colorpickerHolder2 .colorpicker {
- background-image: url(../images/custom_background.png);
- position: absolute;
- bottom: 0;
- left: 0;
-}
-#colorpickerHolder2 .colorpicker_hue div {
- background-image: url(../images/custom_indic.gif);
-}
-#colorpickerHolder2 .colorpicker_hex {
- background-image: url(../images/custom_hex.png);
-}
-#colorpickerHolder2 .colorpicker_rgb_r {
- background-image: url(../images/custom_rgb_r.png);
-}
-#colorpickerHolder2 .colorpicker_rgb_g {
- background-image: url(../images/custom_rgb_g.png);
-}
-#colorpickerHolder2 .colorpicker_rgb_b {
- background-image: url(../images/custom_rgb_b.png);
-}
-#colorpickerHolder2 .colorpicker_hsb_s {
- background-image: url(../images/custom_hsb_s.png);
- display: none;
-}
-#colorpickerHolder2 .colorpicker_hsb_h {
- background-image: url(../images/custom_hsb_h.png);
- display: none;
-}
-#colorpickerHolder2 .colorpicker_hsb_b {
- background-image: url(../images/custom_hsb_b.png);
- display: none;
-}
-#colorpickerHolder2 .colorpicker_submit {
- background-image: url(../images/custom_submit.png);
-}
-#colorpickerHolder2 .colorpicker input {
- color: #778398;
-}
-#customWidget {
- position: relative;
- height: 36px;
-}
diff --git a/library/colorpicker/images/blank.gif b/library/colorpicker/images/blank.gif
deleted file mode 100644
index 75b945d25..000000000
--- a/library/colorpicker/images/blank.gif
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/colorpicker_background.png b/library/colorpicker/images/colorpicker_background.png
deleted file mode 100644
index 8401572f1..000000000
--- a/library/colorpicker/images/colorpicker_background.png
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/colorpicker_hex.png b/library/colorpicker/images/colorpicker_hex.png
deleted file mode 100644
index 4e532d7c6..000000000
--- a/library/colorpicker/images/colorpicker_hex.png
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/colorpicker_hsb_b.png b/library/colorpicker/images/colorpicker_hsb_b.png
deleted file mode 100644
index dfac595d0..000000000
--- a/library/colorpicker/images/colorpicker_hsb_b.png
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/colorpicker_hsb_h.png b/library/colorpicker/images/colorpicker_hsb_h.png
deleted file mode 100644
index 3977ed9f2..000000000
--- a/library/colorpicker/images/colorpicker_hsb_h.png
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/colorpicker_hsb_s.png b/library/colorpicker/images/colorpicker_hsb_s.png
deleted file mode 100644
index a2a699736..000000000
--- a/library/colorpicker/images/colorpicker_hsb_s.png
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/colorpicker_indic.gif b/library/colorpicker/images/colorpicker_indic.gif
deleted file mode 100644
index f9fa95e28..000000000
--- a/library/colorpicker/images/colorpicker_indic.gif
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/colorpicker_overlay.png b/library/colorpicker/images/colorpicker_overlay.png
deleted file mode 100644
index 561cdd9c5..000000000
--- a/library/colorpicker/images/colorpicker_overlay.png
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/colorpicker_rgb_b.png b/library/colorpicker/images/colorpicker_rgb_b.png
deleted file mode 100644
index dfac595d0..000000000
--- a/library/colorpicker/images/colorpicker_rgb_b.png
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/colorpicker_rgb_g.png b/library/colorpicker/images/colorpicker_rgb_g.png
deleted file mode 100644
index 72b32760a..000000000
--- a/library/colorpicker/images/colorpicker_rgb_g.png
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/colorpicker_rgb_r.png b/library/colorpicker/images/colorpicker_rgb_r.png
deleted file mode 100644
index 4855fe03f..000000000
--- a/library/colorpicker/images/colorpicker_rgb_r.png
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/colorpicker_select.gif b/library/colorpicker/images/colorpicker_select.gif
deleted file mode 100644
index 599f7f13a..000000000
--- a/library/colorpicker/images/colorpicker_select.gif
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/colorpicker_submit.png b/library/colorpicker/images/colorpicker_submit.png
deleted file mode 100644
index 7f4c0825f..000000000
--- a/library/colorpicker/images/colorpicker_submit.png
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/custom_background.png b/library/colorpicker/images/custom_background.png
deleted file mode 100644
index cf55ffdd6..000000000
--- a/library/colorpicker/images/custom_background.png
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/custom_hex.png b/library/colorpicker/images/custom_hex.png
deleted file mode 100644
index 888f44449..000000000
--- a/library/colorpicker/images/custom_hex.png
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/custom_hsb_b.png b/library/colorpicker/images/custom_hsb_b.png
deleted file mode 100644
index 2f99dae8e..000000000
--- a/library/colorpicker/images/custom_hsb_b.png
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/custom_hsb_h.png b/library/colorpicker/images/custom_hsb_h.png
deleted file mode 100644
index a217e9218..000000000
--- a/library/colorpicker/images/custom_hsb_h.png
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/custom_hsb_s.png b/library/colorpicker/images/custom_hsb_s.png
deleted file mode 100644
index 7826b4150..000000000
--- a/library/colorpicker/images/custom_hsb_s.png
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/custom_indic.gif b/library/colorpicker/images/custom_indic.gif
deleted file mode 100644
index 222fb94cf..000000000
--- a/library/colorpicker/images/custom_indic.gif
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/custom_rgb_b.png b/library/colorpicker/images/custom_rgb_b.png
deleted file mode 100644
index 80764e5d6..000000000
--- a/library/colorpicker/images/custom_rgb_b.png
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/custom_rgb_g.png b/library/colorpicker/images/custom_rgb_g.png
deleted file mode 100644
index fc9778be1..000000000
--- a/library/colorpicker/images/custom_rgb_g.png
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/custom_rgb_r.png b/library/colorpicker/images/custom_rgb_r.png
deleted file mode 100644
index 91b0cd4c5..000000000
--- a/library/colorpicker/images/custom_rgb_r.png
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/custom_submit.png b/library/colorpicker/images/custom_submit.png
deleted file mode 100644
index cd202cd93..000000000
--- a/library/colorpicker/images/custom_submit.png
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/select.png b/library/colorpicker/images/select.png
deleted file mode 100644
index 21213bfd5..000000000
--- a/library/colorpicker/images/select.png
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/select2.png b/library/colorpicker/images/select2.png
deleted file mode 100644
index 2cd2cabeb..000000000
--- a/library/colorpicker/images/select2.png
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/images/slider.png b/library/colorpicker/images/slider.png
deleted file mode 100644
index 8b03da96e..000000000
--- a/library/colorpicker/images/slider.png
+++ /dev/null
Binary files differ
diff --git a/library/colorpicker/index.html b/library/colorpicker/index.html
deleted file mode 100644
index e1ad5782d..000000000
--- a/library/colorpicker/index.html
+++ /dev/null
@@ -1,184 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <link rel="stylesheet" href="css/colorpicker.css" type="text/css" />
- <link rel="stylesheet" media="screen" type="text/css" href="css/layout.css" />
- <title>ColorPicker - jQuery plugin</title>
- <script type="text/javascript" src="js/jquery.js"></script>
- <script type="text/javascript" src="js/colorpicker.js"></script>
- <script type="text/javascript" src="js/eye.js"></script>
- <script type="text/javascript" src="js/utils.js"></script>
- <script type="text/javascript" src="js/layout.js?ver=1.0.2"></script>
-</head>
-<body>
- <div class="wrapper">
- <h1>Color Picker - jQuery plugin</h1>
- <ul class="navigationTabs">
- <li><a href="#about" rel="about">About</a></li>
- <li><a href="#download" rel="download">Download</a></li>
- <li><a href="#implement" rel="implement">Implement</a></li>
- </ul>
- <div class="tabsContent">
- <div class="tab">
- <h2>About</h2>
- <p>A simple component to select color in the same way you select color in Adobe Photoshop</p>
- <h3>Last update</h3>
- <p>23.05.2009 - Check Download tab</p>
- <h3>Features</h3>
- <ul>
- <li>Flat mode - as element in page</li>
- <li>Powerful controls for color selection</li>
- <li>Easy to customize the look by changing some images</li>
- <li>Fits into the viewport</li>
- </ul>
- <h3>License</h3>
- <p>Dual licensed under the MIT and GPL licenses.</p>
- <h3>Examples</h3>
- <p>Flat mode.</p>
- <p id="colorpickerHolder">
- </p>
- <pre>
-$('#colorpickerHolder').ColorPicker({flat: true});
- </pre>
- <p>Custom skin and using flat mode to display the color picker in a custom widget.</p>
- <div id="customWidget">
- <div id="colorSelector2"><div style="background-color: #00ff00"></div></div>
- <div id="colorpickerHolder2">
- </div>
- </div>
-
- <p>Attached to an text field and using callback functions to update the color with field's value and set the value back in the field by submiting the color.</p>
- <p><input type="text" maxlength="6" size="6" id="colorpickerField1" value="00ff00" /></p>
- <p><input type="text" maxlength="6" size="6" id="colorpickerField3" value="0000ff" /></p>
- <p><input type="text" maxlength="6" size="6" id="colorpickerField2" value="ff0000" /></p>
- <pre>$('#colorpickerField1, #colorpickerField2, #colorpickerField3').ColorPicker({
- onSubmit: function(hsb, hex, rgb, el) {
- $(el).val(hex);
- $(el).ColorPickerHide();
- },
- onBeforeShow: function () {
- $(this).ColorPickerSetColor(this.value);
- }
-})
-.bind('keyup', function(){
- $(this).ColorPickerSetColor(this.value);
-});
-</pre>
- <p>Attached to DOMElement and using callbacks to live preview the color and adding animation.</p>
- <p>
- <div id="colorSelector"><div style="background-color: #0000ff"></div></div>
- </p>
- <pre>
-$('#colorSelector').ColorPicker({
- color: '#0000ff',
- onShow: function (colpkr) {
- $(colpkr).fadeIn(500);
- return false;
- },
- onHide: function (colpkr) {
- $(colpkr).fadeOut(500);
- return false;
- },
- onChange: function (hsb, hex, rgb) {
- $('#colorSelector div').css('backgroundColor', '#' + hex);
- }
-});
-</pre>
- </div>
- <div class="tab">
- <h2>Download</h2>
- <p><a href="colorpicker.zip">colorpicker.zip (73 kb)</a>: jQuery, Javscript files, CSS files, images, examples and instructions.</p>
- <h3>Changelog</h3>
- <dl>
- <dt>23.05.2009</dt>
- <dd>Added: close on color selection example</dd>
- <dd>Added: restore original color option</dd>
- <dd>Changed: color update on key up event</dd>
- <dd>Fixed: colorpicker hide and show methods</dd>
- <dd>Fixed: reference to options. Multiple fields with colorpickers is possible now.</dd>
- <dd>Fixed: RGB to HSB convertion</dd>
- <dt>22.08.2008</dt>
- <dd>Fixed bug: where some events were not canceled right on Safari</dd>
- <dd>Fixed bug: where teh view port was not detected right on Safari</dd>
- <dt>16-07-2008</dt>
- <dd>Fixed bug where the letter 'F' could not be typed in the Hex field</dd>
- <dd>Fixed bug where the changes on Hex field where not parsed</dd>
- <dd>Added new option 'livePreview'</dd>
- <dt>08-07-2008</dt>
- <dd>Fixed typo in the code, both JavaScript and CSS</dd>
- <dd>Changed the cursor for some elements</dd>
- <dd>Added new demo explaining how to implement custom skin</dd>
- <dt>07.07.2008</dt>
- <dd>The first release.</dd>
- </dl>
- </div>
- <div class="tab">
- <h2>Implement</h2>
- <p>Attach the Javascript and CSS files to your document. Edit CSS file and fix the paths to images and change colors to fit your site theme.</p>
- <pre>
-&lt;link rel="stylesheet" media="screen" type="text/css" href="css/colorpicker.css" /&gt;
-&lt;script type="text/javascript" src="js/colorpicker.js"&gt;&lt;/script&gt;
- </pre>
- <h3>Invocation code</h3>
- <p>All you have to do is to select the elements in a jQuery way and call the plugin.</p>
- <pre>
- $('input').ColorPicker(options);
- </pre>
- <h3>Options</h3>
- <p>A hash of parameters. All parameters are optional.</p>
- <table>
- <tr>
- <td><strong>eventName</strong></td>
- <td>string</td>
- <td>The desired event to trigger the colorpicker. Default: 'click'</td>
- </tr>
- <tr>
- <td><strong>color</strong></td>
- <td>string or hash</td>
- <td>The default color. String for hex color or hash for RGB and HSB ({r:255, r:0, b:0}) . Default: 'ff0000'</td>
- </tr>
- <tr>
- <td><strong>flat</strong></td>
- <td>boolean</td>
- <td>Whatever if the color picker is appended to the element or triggered by an event. Default false</td>
- </tr>
- <tr>
- <td><strong>livePreview</strong></td>
- <td>boolean</td>
- <td>Whatever if the color values are filled in the fields while changing values on selector or a field. If false it may improve speed. Default true</td>
- </tr>
- <tr>
- <td><strong>onShow</strong></td>
- <td>function</td>
- <td>Callback function triggered when the color picker is shown</td>
- </tr>
- <tr>
- <td><strong>onBeforeShow</strong></td>
- <td>function</td>
- <td>Callback function triggered before the color picker is shown</td>
- </tr>
- <tr>
- <td><strong>onHide</strong></td>
- <td>function</td>
- <td>Callback function triggered when the color picker is hidden</td>
- </tr>
- <tr>
- <td><strong>onChange</strong></td>
- <td>function</td>
- <td>Callback function triggered when the color is changed</td>
- </tr>
- <tr>
- <td><strong>onSubmit</strong></td>
- <td>function</td>
- <td>Callback function triggered when the color it is chosen</td>
- </tr>
- </table>
- <h3>Set color</h3>
- <p>If you want to set a new color.</p>
- <pre>$('input').ColorPickerSetColor(color);</pre>
- <p>The 'color' argument is the same format as the option color, string for hex color or hash for RGB and HSB ({r:255, r:0, b:0}).</p>
- </div>
- </div>
- </div>
-</body>
-</html>
diff --git a/library/colorpicker/js/colorpicker.js b/library/colorpicker/js/colorpicker.js
deleted file mode 100644
index 10a2b2244..000000000
--- a/library/colorpicker/js/colorpicker.js
+++ /dev/null
@@ -1,484 +0,0 @@
-/**
- *
- * Color picker
- * Author: Stefan Petre www.eyecon.ro
- *
- * Dual licensed under the MIT and GPL licenses
- *
- */
-(function ($) {
- var ColorPicker = function () {
- var
- ids = {},
- inAction,
- charMin = 65,
- visible,
- tpl = '<div class="colorpicker"><div class="colorpicker_color"><div><div></div></div></div><div class="colorpicker_hue"><div></div></div><div class="colorpicker_new_color"></div><div class="colorpicker_current_color"></div><div class="colorpicker_hex"><input type="text" maxlength="6" size="6" /></div><div class="colorpicker_rgb_r colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_rgb_g colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_rgb_b colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_h colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_s colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_b colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_submit"></div></div>',
- defaults = {
- eventName: 'click',
- onShow: function () {},
- onBeforeShow: function(){},
- onHide: function () {},
- onChange: function () {},
- onSubmit: function () {},
- color: 'ff0000',
- livePreview: true,
- flat: false
- },
- fillRGBFields = function (hsb, cal) {
- var rgb = HSBToRGB(hsb);
- $(cal).data('colorpicker').fields
- .eq(1).val(rgb.r).end()
- .eq(2).val(rgb.g).end()
- .eq(3).val(rgb.b).end();
- },
- fillHSBFields = function (hsb, cal) {
- $(cal).data('colorpicker').fields
- .eq(4).val(hsb.h).end()
- .eq(5).val(hsb.s).end()
- .eq(6).val(hsb.b).end();
- },
- fillHexFields = function (hsb, cal) {
- $(cal).data('colorpicker').fields
- .eq(0).val(HSBToHex(hsb)).end();
- },
- setSelector = function (hsb, cal) {
- $(cal).data('colorpicker').selector.css('backgroundColor', '#' + HSBToHex({h: hsb.h, s: 100, b: 100}));
- $(cal).data('colorpicker').selectorIndic.css({
- left: parseInt(150 * hsb.s/100, 10),
- top: parseInt(150 * (100-hsb.b)/100, 10)
- });
- },
- setHue = function (hsb, cal) {
- $(cal).data('colorpicker').hue.css('top', parseInt(150 - 150 * hsb.h/360, 10));
- },
- setCurrentColor = function (hsb, cal) {
- $(cal).data('colorpicker').currentColor.css('backgroundColor', '#' + HSBToHex(hsb));
- },
- setNewColor = function (hsb, cal) {
- $(cal).data('colorpicker').newColor.css('backgroundColor', '#' + HSBToHex(hsb));
- },
- keyDown = function (ev) {
- var pressedKey = ev.charCode || ev.keyCode || -1;
- if ((pressedKey > charMin && pressedKey <= 90) || pressedKey == 32) {
- return false;
- }
- var cal = $(this).parent().parent();
- if (cal.data('colorpicker').livePreview === true) {
- change.apply(this);
- }
- },
- change = function (ev) {
- var cal = $(this).parent().parent(), col;
- if (this.parentNode.className.indexOf('_hex') > 0) {
- cal.data('colorpicker').color = col = HexToHSB(fixHex(this.value));
- } else if (this.parentNode.className.indexOf('_hsb') > 0) {
- cal.data('colorpicker').color = col = fixHSB({
- h: parseInt(cal.data('colorpicker').fields.eq(4).val(), 10),
- s: parseInt(cal.data('colorpicker').fields.eq(5).val(), 10),
- b: parseInt(cal.data('colorpicker').fields.eq(6).val(), 10)
- });
- } else {
- cal.data('colorpicker').color = col = RGBToHSB(fixRGB({
- r: parseInt(cal.data('colorpicker').fields.eq(1).val(), 10),
- g: parseInt(cal.data('colorpicker').fields.eq(2).val(), 10),
- b: parseInt(cal.data('colorpicker').fields.eq(3).val(), 10)
- }));
- }
- if (ev) {
- fillRGBFields(col, cal.get(0));
- fillHexFields(col, cal.get(0));
- fillHSBFields(col, cal.get(0));
- }
- setSelector(col, cal.get(0));
- setHue(col, cal.get(0));
- setNewColor(col, cal.get(0));
- cal.data('colorpicker').onChange.apply(cal, [col, HSBToHex(col), HSBToRGB(col)]);
- },
- blur = function (ev) {
- var cal = $(this).parent().parent();
- cal.data('colorpicker').fields.parent().removeClass('colorpicker_focus');
- },
- focus = function () {
- charMin = this.parentNode.className.indexOf('_hex') > 0 ? 70 : 65;
- $(this).parent().parent().data('colorpicker').fields.parent().removeClass('colorpicker_focus');
- $(this).parent().addClass('colorpicker_focus');
- },
- downIncrement = function (ev) {
- var field = $(this).parent().find('input').focus();
- var current = {
- el: $(this).parent().addClass('colorpicker_slider'),
- max: this.parentNode.className.indexOf('_hsb_h') > 0 ? 360 : (this.parentNode.className.indexOf('_hsb') > 0 ? 100 : 255),
- y: ev.pageY,
- field: field,
- val: parseInt(field.val(), 10),
- preview: $(this).parent().parent().data('colorpicker').livePreview
- };
- $(document).bind('mouseup', current, upIncrement);
- $(document).bind('mousemove', current, moveIncrement);
- },
- moveIncrement = function (ev) {
- ev.data.field.val(Math.max(0, Math.min(ev.data.max, parseInt(ev.data.val + ev.pageY - ev.data.y, 10))));
- if (ev.data.preview) {
- change.apply(ev.data.field.get(0), [true]);
- }
- return false;
- },
- upIncrement = function (ev) {
- change.apply(ev.data.field.get(0), [true]);
- ev.data.el.removeClass('colorpicker_slider').find('input').focus();
- $(document).unbind('mouseup', upIncrement);
- $(document).unbind('mousemove', moveIncrement);
- return false;
- },
- downHue = function (ev) {
- var current = {
- cal: $(this).parent(),
- y: $(this).offset().top
- };
- current.preview = current.cal.data('colorpicker').livePreview;
- $(document).bind('mouseup', current, upHue);
- $(document).bind('mousemove', current, moveHue);
- },
- moveHue = function (ev) {
- change.apply(
- ev.data.cal.data('colorpicker')
- .fields
- .eq(4)
- .val(parseInt(360*(150 - Math.max(0,Math.min(150,(ev.pageY - ev.data.y))))/150, 10))
- .get(0),
- [ev.data.preview]
- );
- return false;
- },
- upHue = function (ev) {
- fillRGBFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0));
- fillHexFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0));
- $(document).unbind('mouseup', upHue);
- $(document).unbind('mousemove', moveHue);
- return false;
- },
- downSelector = function (ev) {
- var current = {
- cal: $(this).parent(),
- pos: $(this).offset()
- };
- current.preview = current.cal.data('colorpicker').livePreview;
- $(document).bind('mouseup', current, upSelector);
- $(document).bind('mousemove', current, moveSelector);
- },
- moveSelector = function (ev) {
- change.apply(
- ev.data.cal.data('colorpicker')
- .fields
- .eq(6)
- .val(parseInt(100*(150 - Math.max(0,Math.min(150,(ev.pageY - ev.data.pos.top))))/150, 10))
- .end()
- .eq(5)
- .val(parseInt(100*(Math.max(0,Math.min(150,(ev.pageX - ev.data.pos.left))))/150, 10))
- .get(0),
- [ev.data.preview]
- );
- return false;
- },
- upSelector = function (ev) {
- fillRGBFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0));
- fillHexFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0));
- $(document).unbind('mouseup', upSelector);
- $(document).unbind('mousemove', moveSelector);
- return false;
- },
- enterSubmit = function (ev) {
- $(this).addClass('colorpicker_focus');
- },
- leaveSubmit = function (ev) {
- $(this).removeClass('colorpicker_focus');
- },
- clickSubmit = function (ev) {
- var cal = $(this).parent();
- var col = cal.data('colorpicker').color;
- cal.data('colorpicker').origColor = col;
- setCurrentColor(col, cal.get(0));
- cal.data('colorpicker').onSubmit(col, HSBToHex(col), HSBToRGB(col), cal.data('colorpicker').el);
- },
- show = function (ev) {
- var cal = $('#' + $(this).data('colorpickerId'));
- cal.data('colorpicker').onBeforeShow.apply(this, [cal.get(0)]);
- var pos = $(this).offset();
- var viewPort = getViewport();
- var top = pos.top + this.offsetHeight;
- var left = pos.left;
- if (top + 176 > viewPort.t + viewPort.h) {
- top -= this.offsetHeight + 176;
- }
- if (left + 356 > viewPort.l + viewPort.w) {
- left -= 356;
- }
- cal.css({left: left + 'px', top: top + 'px'});
- if (cal.data('colorpicker').onShow.apply(this, [cal.get(0)]) != false) {
- cal.show();
- }
- $(document).bind('mousedown', {cal: cal}, hide);
- return false;
- },
- hide = function (ev) {
- if (!isChildOf(ev.data.cal.get(0), ev.target, ev.data.cal.get(0))) {
- if (ev.data.cal.data('colorpicker').onHide.apply(this, [ev.data.cal.get(0)]) != false) {
- ev.data.cal.hide();
- }
- $(document).unbind('mousedown', hide);
- }
- },
- isChildOf = function(parentEl, el, container) {
- if (parentEl == el) {
- return true;
- }
- if (parentEl.contains) {
- return parentEl.contains(el);
- }
- if ( parentEl.compareDocumentPosition ) {
- return !!(parentEl.compareDocumentPosition(el) & 16);
- }
- var prEl = el.parentNode;
- while(prEl && prEl != container) {
- if (prEl == parentEl)
- return true;
- prEl = prEl.parentNode;
- }
- return false;
- },
- getViewport = function () {
- var m = document.compatMode == 'CSS1Compat';
- return {
- l : window.pageXOffset || (m ? document.documentElement.scrollLeft : document.body.scrollLeft),
- t : window.pageYOffset || (m ? document.documentElement.scrollTop : document.body.scrollTop),
- w : window.innerWidth || (m ? document.documentElement.clientWidth : document.body.clientWidth),
- h : window.innerHeight || (m ? document.documentElement.clientHeight : document.body.clientHeight)
- };
- },
- fixHSB = function (hsb) {
- return {
- h: Math.min(360, Math.max(0, hsb.h)),
- s: Math.min(100, Math.max(0, hsb.s)),
- b: Math.min(100, Math.max(0, hsb.b))
- };
- },
- fixRGB = function (rgb) {
- return {
- r: Math.min(255, Math.max(0, rgb.r)),
- g: Math.min(255, Math.max(0, rgb.g)),
- b: Math.min(255, Math.max(0, rgb.b))
- };
- },
- fixHex = function (hex) {
- var len = 6 - hex.length;
- if (len > 0) {
- var o = [];
- for (var i=0; i<len; i++) {
- o.push('0');
- }
- o.push(hex);
- hex = o.join('');
- }
- return hex;
- },
- HexToRGB = function (hex) {
- var hex = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16);
- return {r: hex >> 16, g: (hex & 0x00FF00) >> 8, b: (hex & 0x0000FF)};
- },
- HexToHSB = function (hex) {
- return RGBToHSB(HexToRGB(hex));
- },
- RGBToHSB = function (rgb) {
- var hsb = {
- h: 0,
- s: 0,
- b: 0
- };
- var min = Math.min(rgb.r, rgb.g, rgb.b);
- var max = Math.max(rgb.r, rgb.g, rgb.b);
- var delta = max - min;
- hsb.b = max;
- if (max != 0) {
-
- }
- hsb.s = max != 0 ? 255 * delta / max : 0;
- if (hsb.s != 0) {
- if (rgb.r == max) {
- hsb.h = (rgb.g - rgb.b) / delta;
- } else if (rgb.g == max) {
- hsb.h = 2 + (rgb.b - rgb.r) / delta;
- } else {
- hsb.h = 4 + (rgb.r - rgb.g) / delta;
- }
- } else {
- hsb.h = -1;
- }
- hsb.h *= 60;
- if (hsb.h < 0) {
- hsb.h += 360;
- }
- hsb.s *= 100/255;
- hsb.b *= 100/255;
- return hsb;
- },
- HSBToRGB = function (hsb) {
- var rgb = {};
- var h = Math.round(hsb.h);
- var s = Math.round(hsb.s*255/100);
- var v = Math.round(hsb.b*255/100);
- if(s == 0) {
- rgb.r = rgb.g = rgb.b = v;
- } else {
- var t1 = v;
- var t2 = (255-s)*v/255;
- var t3 = (t1-t2)*(h%60)/60;
- if(h==360) h = 0;
- if(h<60) {rgb.r=t1; rgb.b=t2; rgb.g=t2+t3}
- else if(h<120) {rgb.g=t1; rgb.b=t2; rgb.r=t1-t3}
- else if(h<180) {rgb.g=t1; rgb.r=t2; rgb.b=t2+t3}
- else if(h<240) {rgb.b=t1; rgb.r=t2; rgb.g=t1-t3}
- else if(h<300) {rgb.b=t1; rgb.g=t2; rgb.r=t2+t3}
- else if(h<360) {rgb.r=t1; rgb.g=t2; rgb.b=t1-t3}
- else {rgb.r=0; rgb.g=0; rgb.b=0}
- }
- return {r:Math.round(rgb.r), g:Math.round(rgb.g), b:Math.round(rgb.b)};
- },
- RGBToHex = function (rgb) {
- var hex = [
- rgb.r.toString(16),
- rgb.g.toString(16),
- rgb.b.toString(16)
- ];
- $.each(hex, function (nr, val) {
- if (val.length == 1) {
- hex[nr] = '0' + val;
- }
- });
- return hex.join('');
- },
- HSBToHex = function (hsb) {
- return RGBToHex(HSBToRGB(hsb));
- },
- restoreOriginal = function () {
- var cal = $(this).parent();
- var col = cal.data('colorpicker').origColor;
- cal.data('colorpicker').color = col;
- fillRGBFields(col, cal.get(0));
- fillHexFields(col, cal.get(0));
- fillHSBFields(col, cal.get(0));
- setSelector(col, cal.get(0));
- setHue(col, cal.get(0));
- setNewColor(col, cal.get(0));
- };
- return {
- init: function (opt) {
- opt = $.extend({}, defaults, opt||{});
- if (typeof opt.color == 'string') {
- opt.color = HexToHSB(opt.color);
- } else if (opt.color.r != undefined && opt.color.g != undefined && opt.color.b != undefined) {
- opt.color = RGBToHSB(opt.color);
- } else if (opt.color.h != undefined && opt.color.s != undefined && opt.color.b != undefined) {
- opt.color = fixHSB(opt.color);
- } else {
- return this;
- }
- return this.each(function () {
- if (!$(this).data('colorpickerId')) {
- var options = $.extend({}, opt);
- options.origColor = opt.color;
- var id = 'collorpicker_' + parseInt(Math.random() * 1000);
- $(this).data('colorpickerId', id);
- var cal = $(tpl).attr('id', id);
- if (options.flat) {
- cal.appendTo(this).show();
- } else {
- cal.appendTo(document.body);
- }
- options.fields = cal
- .find('input')
- .bind('keyup', keyDown)
- .bind('change', change)
- .bind('blur', blur)
- .bind('focus', focus);
- cal
- .find('span').bind('mousedown', downIncrement).end()
- .find('>div.colorpicker_current_color').bind('click', restoreOriginal);
- options.selector = cal.find('div.colorpicker_color').bind('mousedown', downSelector);
- options.selectorIndic = options.selector.find('div div');
- options.el = this;
- options.hue = cal.find('div.colorpicker_hue div');
- cal.find('div.colorpicker_hue').bind('mousedown', downHue);
- options.newColor = cal.find('div.colorpicker_new_color');
- options.currentColor = cal.find('div.colorpicker_current_color');
- cal.data('colorpicker', options);
- cal.find('div.colorpicker_submit')
- .bind('mouseenter', enterSubmit)
- .bind('mouseleave', leaveSubmit)
- .bind('click', clickSubmit);
- fillRGBFields(options.color, cal.get(0));
- fillHSBFields(options.color, cal.get(0));
- fillHexFields(options.color, cal.get(0));
- setHue(options.color, cal.get(0));
- setSelector(options.color, cal.get(0));
- setCurrentColor(options.color, cal.get(0));
- setNewColor(options.color, cal.get(0));
- if (options.flat) {
- cal.css({
- position: 'relative',
- display: 'block'
- });
- } else {
- $(this).bind(options.eventName, show);
- }
- }
- });
- },
- showPicker: function() {
- return this.each( function () {
- if ($(this).data('colorpickerId')) {
- show.apply(this);
- }
- });
- },
- hidePicker: function() {
- return this.each( function () {
- if ($(this).data('colorpickerId')) {
- $('#' + $(this).data('colorpickerId')).hide();
- }
- });
- },
- setColor: function(col) {
- if (typeof col == 'string') {
- col = HexToHSB(col);
- } else if (col.r != undefined && col.g != undefined && col.b != undefined) {
- col = RGBToHSB(col);
- } else if (col.h != undefined && col.s != undefined && col.b != undefined) {
- col = fixHSB(col);
- } else {
- return this;
- }
- return this.each(function(){
- if ($(this).data('colorpickerId')) {
- var cal = $('#' + $(this).data('colorpickerId'));
- cal.data('colorpicker').color = col;
- cal.data('colorpicker').origColor = col;
- fillRGBFields(col, cal.get(0));
- fillHSBFields(col, cal.get(0));
- fillHexFields(col, cal.get(0));
- setHue(col, cal.get(0));
- setSelector(col, cal.get(0));
- setCurrentColor(col, cal.get(0));
- setNewColor(col, cal.get(0));
- }
- });
- }
- };
- }();
- $.fn.extend({
- ColorPicker: ColorPicker.init,
- ColorPickerHide: ColorPicker.hidePicker,
- ColorPickerShow: ColorPicker.showPicker,
- ColorPickerSetColor: ColorPicker.setColor
- });
-})(jQuery) \ No newline at end of file
diff --git a/library/colorpicker/js/eye.js b/library/colorpicker/js/eye.js
deleted file mode 100644
index ea70e643f..000000000
--- a/library/colorpicker/js/eye.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- *
- * Zoomimage
- * Author: Stefan Petre www.eyecon.ro
- *
- */
-(function($){
- var EYE = window.EYE = function() {
- var _registered = {
- init: []
- };
- return {
- init: function() {
- $.each(_registered.init, function(nr, fn){
- fn.call();
- });
- },
- extend: function(prop) {
- for (var i in prop) {
- if (prop[i] != undefined) {
- this[i] = prop[i];
- }
- }
- },
- register: function(fn, type) {
- if (!_registered[type]) {
- _registered[type] = [];
- }
- _registered[type].push(fn);
- }
- };
- }();
- $(EYE.init);
-})(jQuery);
diff --git a/library/colorpicker/js/layout.js b/library/colorpicker/js/layout.js
deleted file mode 100644
index e0dfb8f33..000000000
--- a/library/colorpicker/js/layout.js
+++ /dev/null
@@ -1,67 +0,0 @@
-(function($){
- var initLayout = function() {
- var hash = window.location.hash.replace('#', '');
- var currentTab = $('ul.navigationTabs a')
- .bind('click', showTab)
- .filter('a[rel=' + hash + ']');
- if (currentTab.size() == 0) {
- currentTab = $('ul.navigationTabs a:first');
- }
- showTab.apply(currentTab.get(0));
- $('#colorpickerHolder').ColorPicker({flat: true});
- $('#colorpickerHolder2').ColorPicker({
- flat: true,
- color: '#00ff00',
- onSubmit: function(hsb, hex, rgb) {
- $('#colorSelector2 div').css('backgroundColor', '#' + hex);
- }
- });
- $('#colorpickerHolder2>div').css('position', 'absolute');
- var widt = false;
- $('#colorSelector2').bind('click', function() {
- $('#colorpickerHolder2').stop().animate({height: widt ? 0 : 173}, 500);
- widt = !widt;
- });
- $('#colorpickerField1, #colorpickerField2, #colorpickerField3').ColorPicker({
- onSubmit: function(hsb, hex, rgb, el) {
- $(el).val(hex);
- $(el).ColorPickerHide();
- },
- onBeforeShow: function () {
- $(this).ColorPickerSetColor(this.value);
- }
- })
- .bind('keyup', function(){
- $(this).ColorPickerSetColor(this.value);
- });
- $('#colorSelector').ColorPicker({
- color: '#0000ff',
- onShow: function (colpkr) {
- $(colpkr).fadeIn(500);
- return false;
- },
- onHide: function (colpkr) {
- $(colpkr).fadeOut(500);
- return false;
- },
- onChange: function (hsb, hex, rgb) {
- $('#colorSelector div').css('backgroundColor', '#' + hex);
- }
- });
- };
-
- var showTab = function(e) {
- var tabIndex = $('ul.navigationTabs a')
- .removeClass('active')
- .index(this);
- $(this)
- .addClass('active')
- .blur();
- $('div.tab')
- .hide()
- .eq(tabIndex)
- .show();
- };
-
- EYE.register(initLayout, 'init');
-})(jQuery) \ No newline at end of file
diff --git a/library/colorpicker/js/utils.js b/library/colorpicker/js/utils.js
deleted file mode 100644
index cc7ce14ec..000000000
--- a/library/colorpicker/js/utils.js
+++ /dev/null
@@ -1,252 +0,0 @@
-/**
- *
- * Utilities
- * Author: Stefan Petre www.eyecon.ro
- *
- */
-(function($) {
-EYE.extend({
- getPosition : function(e, forceIt)
- {
- var x = 0;
- var y = 0;
- var es = e.style;
- var restoreStyles = false;
- if (forceIt && jQuery.curCSS(e,'display') == 'none') {
- var oldVisibility = es.visibility;
- var oldPosition = es.position;
- restoreStyles = true;
- es.visibility = 'hidden';
- es.display = 'block';
- es.position = 'absolute';
- }
- var el = e;
- if (el.getBoundingClientRect) { // IE
- var box = el.getBoundingClientRect();
- x = box.left + Math.max(document.documentElement.scrollLeft, document.body.scrollLeft) - 2;
- y = box.top + Math.max(document.documentElement.scrollTop, document.body.scrollTop) - 2;
- } else {
- x = el.offsetLeft;
- y = el.offsetTop;
- el = el.offsetParent;
- if (e != el) {
- while (el) {
- x += el.offsetLeft;
- y += el.offsetTop;
- el = el.offsetParent;
- }
- }
- if (jQuery.browser.safari && jQuery.curCSS(e, 'position') == 'absolute' ) {
- x -= document.body.offsetLeft;
- y -= document.body.offsetTop;
- }
- el = e.parentNode;
- while (el && el.tagName.toUpperCase() != 'BODY' && el.tagName.toUpperCase() != 'HTML')
- {
- if (jQuery.curCSS(el, 'display') != 'inline') {
- x -= el.scrollLeft;
- y -= el.scrollTop;
- }
- el = el.parentNode;
- }
- }
- if (restoreStyles == true) {
- es.display = 'none';
- es.position = oldPosition;
- es.visibility = oldVisibility;
- }
- return {x:x, y:y};
- },
- getSize : function(e)
- {
- var w = parseInt(jQuery.curCSS(e,'width'), 10);
- var h = parseInt(jQuery.curCSS(e,'height'), 10);
- var wb = 0;
- var hb = 0;
- if (jQuery.curCSS(e, 'display') != 'none') {
- wb = e.offsetWidth;
- hb = e.offsetHeight;
- } else {
- var es = e.style;
- var oldVisibility = es.visibility;
- var oldPosition = es.position;
- es.visibility = 'hidden';
- es.display = 'block';
- es.position = 'absolute';
- wb = e.offsetWidth;
- hb = e.offsetHeight;
- es.display = 'none';
- es.position = oldPosition;
- es.visibility = oldVisibility;
- }
- return {w:w, h:h, wb:wb, hb:hb};
- },
- getClient : function(e)
- {
- var h, w;
- if (e) {
- w = e.clientWidth;
- h = e.clientHeight;
- } else {
- var de = document.documentElement;
- w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
- h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
- }
- return {w:w,h:h};
- },
- getScroll : function (e)
- {
- var t=0, l=0, w=0, h=0, iw=0, ih=0;
- if (e && e.nodeName.toLowerCase() != 'body') {
- t = e.scrollTop;
- l = e.scrollLeft;
- w = e.scrollWidth;
- h = e.scrollHeight;
- } else {
- if (document.documentElement) {
- t = document.documentElement.scrollTop;
- l = document.documentElement.scrollLeft;
- w = document.documentElement.scrollWidth;
- h = document.documentElement.scrollHeight;
- } else if (document.body) {
- t = document.body.scrollTop;
- l = document.body.scrollLeft;
- w = document.body.scrollWidth;
- h = document.body.scrollHeight;
- }
- if (typeof pageYOffset != 'undefined') {
- t = pageYOffset;
- l = pageXOffset;
- }
- iw = self.innerWidth||document.documentElement.clientWidth||document.body.clientWidth||0;
- ih = self.innerHeight||document.documentElement.clientHeight||document.body.clientHeight||0;
- }
- return { t: t, l: l, w: w, h: h, iw: iw, ih: ih };
- },
- getMargins : function(e, toInteger)
- {
- var t = jQuery.curCSS(e,'marginTop') || '';
- var r = jQuery.curCSS(e,'marginRight') || '';
- var b = jQuery.curCSS(e,'marginBottom') || '';
- var l = jQuery.curCSS(e,'marginLeft') || '';
- if (toInteger)
- return {
- t: parseInt(t, 10)||0,
- r: parseInt(r, 10)||0,
- b: parseInt(b, 10)||0,
- l: parseInt(l, 10)
- };
- else
- return {t: t, r: r, b: b, l: l};
- },
- getPadding : function(e, toInteger)
- {
- var t = jQuery.curCSS(e,'paddingTop') || '';
- var r = jQuery.curCSS(e,'paddingRight') || '';
- var b = jQuery.curCSS(e,'paddingBottom') || '';
- var l = jQuery.curCSS(e,'paddingLeft') || '';
- if (toInteger)
- return {
- t: parseInt(t, 10)||0,
- r: parseInt(r, 10)||0,
- b: parseInt(b, 10)||0,
- l: parseInt(l, 10)
- };
- else
- return {t: t, r: r, b: b, l: l};
- },
- getBorder : function(e, toInteger)
- {
- var t = jQuery.curCSS(e,'borderTopWidth') || '';
- var r = jQuery.curCSS(e,'borderRightWidth') || '';
- var b = jQuery.curCSS(e,'borderBottomWidth') || '';
- var l = jQuery.curCSS(e,'borderLeftWidth') || '';
- if (toInteger)
- return {
- t: parseInt(t, 10)||0,
- r: parseInt(r, 10)||0,
- b: parseInt(b, 10)||0,
- l: parseInt(l, 10)||0
- };
- else
- return {t: t, r: r, b: b, l: l};
- },
- traverseDOM : function(nodeEl, func)
- {
- func(nodeEl);
- nodeEl = nodeEl.firstChild;
- while(nodeEl){
- EYE.traverseDOM(nodeEl, func);
- nodeEl = nodeEl.nextSibling;
- }
- },
- getInnerWidth : function(el, scroll) {
- var offsetW = el.offsetWidth;
- return scroll ? Math.max(el.scrollWidth,offsetW) - offsetW + el.clientWidth:el.clientWidth;
- },
- getInnerHeight : function(el, scroll) {
- var offsetH = el.offsetHeight;
- return scroll ? Math.max(el.scrollHeight,offsetH) - offsetH + el.clientHeight:el.clientHeight;
- },
- getExtraWidth : function(el) {
- if($.boxModel)
- return (parseInt($.curCSS(el, 'paddingLeft'))||0)
- + (parseInt($.curCSS(el, 'paddingRight'))||0)
- + (parseInt($.curCSS(el, 'borderLeftWidth'))||0)
- + (parseInt($.curCSS(el, 'borderRightWidth'))||0);
- return 0;
- },
- getExtraHeight : function(el) {
- if($.boxModel)
- return (parseInt($.curCSS(el, 'paddingTop'))||0)
- + (parseInt($.curCSS(el, 'paddingBottom'))||0)
- + (parseInt($.curCSS(el, 'borderTopWidth'))||0)
- + (parseInt($.curCSS(el, 'borderBottomWidth'))||0);
- return 0;
- },
- isChildOf: function(parentEl, el, container) {
- if (parentEl == el) {
- return true;
- }
- if (!el || !el.nodeType || el.nodeType != 1) {
- return false;
- }
- if (parentEl.contains && !$.browser.safari) {
- return parentEl.contains(el);
- }
- if ( parentEl.compareDocumentPosition ) {
- return !!(parentEl.compareDocumentPosition(el) & 16);
- }
- var prEl = el.parentNode;
- while(prEl && prEl != container) {
- if (prEl == parentEl)
- return true;
- prEl = prEl.parentNode;
- }
- return false;
- },
- centerEl : function(el, axis)
- {
- var clientScroll = EYE.getScroll();
- var size = EYE.getSize(el);
- if (!axis || axis == 'vertically')
- $(el).css(
- {
- top: clientScroll.t + ((Math.min(clientScroll.h,clientScroll.ih) - size.hb)/2) + 'px'
- }
- );
- if (!axis || axis == 'horizontally')
- $(el).css(
- {
- left: clientScroll.l + ((Math.min(clientScroll.w,clientScroll.iw) - size.wb)/2) + 'px'
- }
- );
- }
-});
-if (!$.easing.easeout) {
- $.easing.easeout = function(p, n, firstNum, delta, duration) {
- return -delta * ((n=n/duration-1)*n*n*n - 1) + firstNum;
- };
-}
-
-})(jQuery); \ No newline at end of file
diff --git a/library/datetimepicker/.gitignore b/library/datetimepicker/.gitignore
new file mode 100644
index 000000000..0012f7d23
--- /dev/null
+++ b/library/datetimepicker/.gitignore
@@ -0,0 +1 @@
+index.php \ No newline at end of file
diff --git a/library/datetimepicker/MIT-LICENSE.txt b/library/datetimepicker/MIT-LICENSE.txt
new file mode 100644
index 000000000..2e68e7d6a
--- /dev/null
+++ b/library/datetimepicker/MIT-LICENSE.txt
@@ -0,0 +1,19 @@
+Copyright (c) 2013 http://xdsoft.net
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE. \ No newline at end of file
diff --git a/library/datetimepicker/README.md b/library/datetimepicker/README.md
new file mode 100644
index 000000000..f0d3f40e3
--- /dev/null
+++ b/library/datetimepicker/README.md
@@ -0,0 +1,20 @@
+datetimepicker
+==============
+[Documentation][doc]
+
+
+jQuery Plugin Date and Time Picker
+
+DateTimePicker
+
+![ScreenShot](https://raw2.github.com/xdan/datetimepicker/master/screen/1.png)
+
+DatePicker
+
+![ScreenShot](https://raw2.github.com/xdan/datetimepicker/master/screen/2.png)
+
+TimePicker
+
+![ScreenShot](https://raw2.github.com/xdan/datetimepicker/master/screen/3.png)
+
+[doc]: http://xdsoft.net/jqplugins/datetimepicker/
diff --git a/library/datetimepicker/jquery.datetimepicker.css b/library/datetimepicker/jquery.datetimepicker.css
new file mode 100644
index 000000000..acf674af7
--- /dev/null
+++ b/library/datetimepicker/jquery.datetimepicker.css
@@ -0,0 +1,418 @@
+.xdsoft_datetimepicker{
+ box-shadow: 0px 5px 15px -5px rgba(0, 0, 0, 0.506);
+ background: #FFFFFF;
+ border-bottom: 1px solid #BBBBBB;
+ border-left: 1px solid #CCCCCC;
+ border-right: 1px solid #CCCCCC;
+ border-top: 1px solid #CCCCCC;
+ color: #333333;
+ font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif;
+ padding: 8px;
+ padding-left: 0px;
+ padding-top: 2px;
+ position: absolute;
+ z-index: 9999;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ display:none;
+}
+
+.xdsoft_datetimepicker iframe {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 75px;
+ height: 210px;
+ background: transparent;
+ border:none;
+}
+/*For IE8 or lower*/
+.xdsoft_datetimepicker button {
+ border:none !important;
+}
+
+.xdsoft_noselect{
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ -o-user-select: none;
+ user-select: none;
+}
+.xdsoft_noselect::selection { background: transparent; }
+.xdsoft_noselect::-moz-selection { background: transparent; }
+.xdsoft_datetimepicker.xdsoft_inline{
+ display: inline-block;
+ position: static;
+ box-shadow: none;
+}
+.xdsoft_datetimepicker *{
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding:0px;
+ margin:0px;
+}
+.xdsoft_datetimepicker .xdsoft_datepicker, .xdsoft_datetimepicker .xdsoft_timepicker{
+ display:none;
+}
+.xdsoft_datetimepicker .xdsoft_datepicker.active, .xdsoft_datetimepicker .xdsoft_timepicker.active{
+ display:block;
+}
+.xdsoft_datetimepicker .xdsoft_datepicker{
+ width: 224px;
+ float:left;
+ margin-left:8px;
+}
+.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_datepicker{
+ width: 256px;
+}
+.xdsoft_datetimepicker .xdsoft_timepicker{
+ width: 58px;
+ float:left;
+ text-align:center;
+ margin-left:8px;
+ margin-top:0px;
+}
+.xdsoft_datetimepicker .xdsoft_datepicker.active+.xdsoft_timepicker{
+ margin-top:8px;
+ margin-bottom:3px
+}
+.xdsoft_datetimepicker .xdsoft_mounthpicker{
+ position: relative;
+ text-align: center;
+}
+
+.xdsoft_datetimepicker .xdsoft_label i,
+.xdsoft_datetimepicker .xdsoft_prev,
+.xdsoft_datetimepicker .xdsoft_next,
+.xdsoft_datetimepicker .xdsoft_today_button{
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAeCAYAAADaW7vzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Q0NBRjI1NjM0M0UwMTFFNDk4NkFGMzJFQkQzQjEwRUIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Q0NBRjI1NjQ0M0UwMTFFNDk4NkFGMzJFQkQzQjEwRUIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDQ0FGMjU2MTQzRTAxMUU0OTg2QUYzMkVCRDNCMTBFQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDQ0FGMjU2MjQzRTAxMUU0OTg2QUYzMkVCRDNCMTBFQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoNEP54AAAIOSURBVHja7Jq9TsMwEMcxrZD4WpBYeKUCe+kTMCACHZh4BFfHO/AAIHZGFhYkBBsSEqxsLCAgXKhbXYOTxh9pfJVP+qutnZ5s/5Lz2Y5I03QhWji2GIcgAokWgfCxNvcOCCGKqiSqhUp0laHOne05vdEyGMfkdxJDVjgwDlEQgYQBgx+ULJaWSXXS6r/ER5FBVR8VfGftTKcITNs+a1XpcFoExREIDF14AVIFxgQUS+h520cdud6wNkC0UBw6BCO/HoCYwBhD8QCkQ/x1mwDyD4plh4D6DDV0TAGyo4HcawLIBBSLDkHeH0Mg2yVP3l4TQMZQDDsEOl/MgHQqhMNuE0D+oBh0CIr8MAKyazBH9WyBuKxDWgbXfjNf32TZ1KWm/Ap1oSk/R53UtQ5xTh3LUlMmT8gt6g51Q9p+SobxgJQ/qmsfZhWywGFSl0yBjCLJCMgXail3b7+rumdVJ2YRss4cN+r6qAHDkPWjPjdJCF4n9RmAD/V9A/Wp4NQassDjwlB6XBiCxcJQWmZZb8THFilfy/lfrTvLghq2TqTHrRMTKNJ0sIhdo15RT+RpyWwFdY96UZ/LdQKBGjcXpcc1AlSFEfLmouD+1knuxBDUVrvOBmoOC/rEcN7OQxKVeJTCiAdUzUJhA2Oez9QTkp72OTVcxDcXY8iKNkxGAJXmJCOQwOa6dhyXsOa6XwEGAKdeb5ET3rQdAAAAAElFTkSuQmCC);
+}
+
+.xdsoft_datetimepicker .xdsoft_label i{
+ opacity:0.5;
+ background-position:-92px -19px;
+ display: inline-block;
+ width: 9px;
+ height: 20px;
+ vertical-align: middle;
+}
+
+.xdsoft_datetimepicker .xdsoft_prev{
+ float: left;
+ background-position:-20px 0px;
+}
+.xdsoft_datetimepicker .xdsoft_today_button{
+ float: left;
+ background-position:-70px 0px;
+ margin-left:5px;
+}
+
+.xdsoft_datetimepicker .xdsoft_next{
+ float: right;
+ background-position:0px 0px;
+}
+
+.xdsoft_datetimepicker .xdsoft_next,
+.xdsoft_datetimepicker .xdsoft_prev ,
+.xdsoft_datetimepicker .xdsoft_today_button{
+ background-color: transparent;
+ background-repeat: no-repeat;
+ border: 0px none currentColor;
+ cursor: pointer;
+ display: block;
+ height: 30px;
+ opacity: 0.5;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
+ outline: medium none currentColor;
+ overflow: hidden;
+ padding: 0px;
+ position: relative;
+ text-indent: 100%;
+ white-space: nowrap;
+ width: 20px;
+}
+.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev,
+.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_next{
+ float:none;
+ background-position:-40px -15px;
+ height: 15px;
+ width: 30px;
+ display: block;
+ margin-left:14px;
+ margin-top:7px;
+}
+.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev{
+ background-position:-40px 0px;
+ margin-bottom:7px;
+ margin-top:0px;
+}
+.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box{
+ height:151px;
+ overflow:hidden;
+ border-bottom:1px solid #DDDDDD;
+}
+.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div{
+ background: #F5F5F5;
+ border-top:1px solid #DDDDDD;
+ color: #666666;
+ font-size: 12px;
+ text-align: center;
+ border-collapse:collapse;
+ cursor:pointer;
+ border-bottom-width:0px;
+ height:25px;
+ line-height:25px;
+}
+
+.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div > div:first-child{
+ border-top-width:0px;
+}
+.xdsoft_datetimepicker .xdsoft_today_button:hover,
+.xdsoft_datetimepicker .xdsoft_next:hover,
+.xdsoft_datetimepicker .xdsoft_prev:hover {
+ opacity: 1;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+}
+.xdsoft_datetimepicker .xdsoft_label{
+ display: inline;
+ position: relative;
+ z-index: 9999;
+ margin: 0;
+ padding: 5px 3px;
+ font-size: 14px;
+ line-height: 20px;
+ font-weight: bold;
+ background-color: #fff;
+ float:left;
+ width:182px;
+ text-align:center;
+ cursor:pointer;
+}
+.xdsoft_datetimepicker .xdsoft_label:hover>span{
+ text-decoration:underline;
+}
+.xdsoft_datetimepicker .xdsoft_label:hover i{
+ opacity:1.0;
+}
+.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select{
+ border:1px solid #ccc;
+ position:absolute;
+ right:0px;
+ top:30px;
+ z-index:101;
+ display:none;
+ background:#fff;
+ max-height:160px;
+ overflow-y:hidden;
+}
+.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_monthselect{right:-7px;}
+.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_yearselect{right:2px;}
+.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover{
+ color: #fff;
+ background: #ff8000;
+}
+.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option{
+ padding:2px 10px 2px 5px;
+ text-decoration:none !important;
+}
+.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current{
+ background: #33AAFF;
+ box-shadow: #178FE5 0px 1px 3px 0px inset;
+ color:#fff;
+ font-weight: 700;
+}
+.xdsoft_datetimepicker .xdsoft_month{
+ width:100px;
+ text-align:right;
+}
+.xdsoft_datetimepicker .xdsoft_calendar{
+ clear:both;
+}
+.xdsoft_datetimepicker .xdsoft_year{
+ width: 48px;
+ margin-left: 5px;
+}
+.xdsoft_datetimepicker .xdsoft_calendar table{
+ border-collapse:collapse;
+ width:100%;
+
+}
+.xdsoft_datetimepicker .xdsoft_calendar td > div{
+ padding-right:5px;
+}
+.xdsoft_datetimepicker .xdsoft_calendar th{
+ height: 25px;
+}
+.xdsoft_datetimepicker .xdsoft_calendar td,.xdsoft_datetimepicker .xdsoft_calendar th{
+ width:14.2857142%;
+ background: #F5F5F5;
+ border:1px solid #DDDDDD;
+ color: #666666;
+ font-size: 12px;
+ text-align: right;
+ vertical-align: middle;
+ padding:0px;
+ border-collapse:collapse;
+ cursor:pointer;
+ height: 25px;
+}
+.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_calendar td,.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_calendar th{
+ width:12.5%;
+}
+.xdsoft_datetimepicker .xdsoft_calendar th{
+ background: #F1F1F1;
+}
+.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_today{
+ color:#33AAFF;
+}
+.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_default,
+.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current,
+.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_current{
+ background: #33AAFF;
+ box-shadow: #178FE5 0px 1px 3px 0px inset;
+ color:#fff;
+ font-weight: 700;
+}
+.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month,
+.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled,
+.xdsoft_datetimepicker .xdsoft_time_box >div >div.xdsoft_disabled{
+ opacity:0.5;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
+}
+.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month.xdsoft_disabled{
+ opacity:0.2;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";
+}
+.xdsoft_datetimepicker .xdsoft_calendar td:hover,
+.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div:hover{
+ color: #fff !important;
+ background: #ff8000 !important;
+ box-shadow: none !important;
+}
+.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled:hover,
+.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_disabled:hover{
+ color: inherit !important;
+ background: inherit !important;
+ box-shadow: inherit !important;
+}
+.xdsoft_datetimepicker .xdsoft_calendar th{
+ font-weight: 700;
+ text-align: center;
+ color: #999;
+ cursor:default;
+}
+.xdsoft_datetimepicker .xdsoft_copyright{ color:#ccc !important; font-size:10px;clear:both;float:none;margin-left:8px;}
+.xdsoft_datetimepicker .xdsoft_copyright a{ color:#eee !important;}
+.xdsoft_datetimepicker .xdsoft_copyright a:hover{ color:#aaa !important;}
+
+
+.xdsoft_time_box{
+ position:relative;
+ border:1px solid #ccc;
+}
+.xdsoft_scrollbar >.xdsoft_scroller{
+ background:#ccc !important;
+ height:20px;
+ border-radius:3px;
+}
+.xdsoft_scrollbar{
+ position:absolute;
+ width:7px;
+ right:0px;
+ top:0px;
+ bottom:0px;
+ cursor:pointer;
+}
+.xdsoft_scroller_box{
+position:relative;
+}
+
+
+.xdsoft_datetimepicker.xdsoft_dark{
+ box-shadow: 0px 5px 15px -5px rgba(255, 255, 255, 0.506);
+ background: #000000;
+ border-bottom: 1px solid #444444;
+ border-left: 1px solid #333333;
+ border-right: 1px solid #333333;
+ border-top: 1px solid #333333;
+ color: #cccccc;
+}
+
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box{
+ border-bottom:1px solid #222222;
+}
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div{
+ background: #0a0a0a;
+ border-top:1px solid #222222;
+ color: #999999;
+}
+
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label{
+ background-color: #000;
+}
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select{
+ border:1px solid #333;
+ background:#000;
+}
+
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover{
+ color: #000;
+ background: #007fff;
+}
+
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current{
+ background: #cc5500;
+ box-shadow: #b03e00 0px 1px 3px 0px inset;
+ color:#000;
+}
+
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label i,
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_prev,
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_next,
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_today_button{
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAeCAYAAADaW7vzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUExQUUzOTA0M0UyMTFFNDlBM0FFQTJENTExRDVBODYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUExQUUzOTE0M0UyMTFFNDlBM0FFQTJENTExRDVBODYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQTFBRTM4RTQzRTIxMUU0OUEzQUVBMkQ1MTFENUE4NiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQTFBRTM4RjQzRTIxMUU0OUEzQUVBMkQ1MTFENUE4NiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pp0VxGEAAAIASURBVHja7JrNSgMxEMebtgh+3MSLr1T1Xn2CHoSKB08+QmR8Bx9A8e7RixdB9CKCoNdexIugxFlJa7rNZneTbLIpM/CnNLsdMvNjM8l0mRCiQ9Ye61IKCAgZAUnH+mU3MMZaHYChBnJUDzWOFZdVfc5+ZFLbrWDeXPwbxIqrLLfaeS0hEBVGIRQCEiZoHQwtlGSByCCdYBl8g8egTTAWoKQMRBRBcZxYlhzhKegqMOageErsCHVkk3hXIFooDgHB1KkHIHVgzKB4ADJQ/A1jAFmAYhkQqA5TOBtocrKrgXwQA8gcFIuAIO8sQSA7hidvPwaQGZSaAYHOUWJABhWWw2EMIH9QagQERU4SArJXo0ZZL18uvaxejXt/Em8xjVBXmvFr1KVm/AJ10tRe2XnraNqaJvKE3KHuUbfK1E+VHB0q40/y3sdQSxY4FHWeKJCunP8UyDdqJZenT3ntVV5jIYCAh20vT7ioP8tpf6E2lfEMwERe+whV1MHjwZB7PBiCxcGQWwKZKD62lfGNnP/1poFAA60T7rF1UgcKd2id3KDeUS+oLWV8DfWAepOfq00CgQabi9zjcgJVYVD7PVzQUAUGAQkbNJTBICDhgwYTjDYD6XeW08ZKh+A4pYkzenOxXUbvZcWz7E8ykRMnIHGX1XPl+1m2vPYpL+2qdb8CDAARlKFEz/ZVkAAAAABJRU5ErkJggg==);
+}
+
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td,
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th{
+ background: #0a0a0a;
+ border:1px solid #222222;
+ color: #999999;
+}
+
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th{
+ background: #0e0e0e;
+}
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_today{
+ color:#cc5500;
+}
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_default,
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_current,
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_current{
+ background: #cc5500;
+ box-shadow: #b03e00 0px 1px 3px 0px inset;
+ color:#000;
+}
+
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td:hover,
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div:hover{
+ color: #000 !important;
+ background: #007fff !important;
+}
+
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th{
+ color: #666;
+}
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright{ color:#333 !important;}
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright a{ color:#111 !important;}
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright a:hover{ color:#555 !important;}
+
+
+.xdsoft_dark .xdsoft_time_box{
+ border:1px solid #333;
+}
+.xdsoft_dark .xdsoft_scrollbar >.xdsoft_scroller{
+ background:#333 !important;
+}
diff --git a/library/datetimepicker/jquery.datetimepicker.js b/library/datetimepicker/jquery.datetimepicker.js
new file mode 100644
index 000000000..d4e93dd13
--- /dev/null
+++ b/library/datetimepicker/jquery.datetimepicker.js
@@ -0,0 +1,1661 @@
+/**
+ * @preserve jQuery DateTimePicker plugin v2.4.0
+ * @homepage http://xdsoft.net/jqplugins/datetimepicker/
+ * (c) 2014, Chupurnov Valeriy.
+ */
+/*global document,window,jQuery,setTimeout,clearTimeout*/
+(function ($) {
+ 'use strict';
+ var default_options = {
+ i18n: {
+ ar: { // Arabic
+ months: [
+ "كانون الثاني", "شباط", "آذار", "نيسان", "مايو", "حزيران", "تموز", "آب", "أيلول", "تشرين الأول", "تشرين الثاني", "كانون الأول"
+ ],
+ dayOfWeek: [
+ "ن", "ث", "ع", "خ", "ج", "س", "ح"
+ ]
+ },
+ ro: { // Romanian
+ months: [
+ "ianuarie", "februarie", "martie", "aprilie", "mai", "iunie", "iulie", "august", "septembrie", "octombrie", "noiembrie", "decembrie"
+ ],
+ dayOfWeek: [
+ "l", "ma", "mi", "j", "v", "s", "d"
+ ]
+ },
+ id: { // Indonesian
+ months: [
+ "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"
+ ],
+ dayOfWeek: [
+ "Sen", "Sel", "Rab", "Kam", "Jum", "Sab", "Min"
+ ]
+ },
+ bg: { // Bulgarian
+ months: [
+ "Януари", "Февруари", "Март", "Ðприл", "Май", "Юни", "Юли", "ÐвгуÑÑ‚", "Септември", "Октомври", "Ðоември", "Декември"
+ ],
+ dayOfWeek: [
+ "Ðд", "Пн", "Ð’Ñ‚", "Ср", "Чт", "Пт", "Сб"
+ ]
+ },
+ fa: { // Persian/Farsi
+ months: [
+ 'Ùروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسÙند'
+ ],
+ dayOfWeek: [
+ 'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه'
+ ]
+ },
+ ru: { // Russian
+ months: [
+ 'Январь', 'Февраль', 'Март', 'Ðпрель', 'Май', 'Июнь', 'Июль', 'ÐвгуÑÑ‚', 'СентÑбрь', 'ОктÑбрь', 'ÐоÑбрь', 'Декабрь'
+ ],
+ dayOfWeek: [
+ "Ð’Ñк", "Пн", "Ð’Ñ‚", "Ср", "Чт", "Пт", "Сб"
+ ]
+ },
+ uk: { // Ukrainian
+ months: [
+ 'Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'ВереÑень', 'Жовтень', 'ЛиÑтопад', 'Грудень'
+ ],
+ dayOfWeek: [
+ "Ðдл", "Пнд", "Ð’Ñ‚Ñ€", "Срд", "Чтв", "Птн", "Сбт"
+ ]
+ },
+ en: { // English
+ months: [
+ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
+ ],
+ dayOfWeek: [
+ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
+ ]
+ },
+ el: { // Ελληνικά
+ months: [
+ "ΙανουάÏιος", "ΦεβÏουάÏιος", "ΜάÏτιος", "ΑπÏίλιος", "Μάιος", "ΙοÏνιος", "ΙοÏλιος", "ΑÏγουστος", "ΣεπτέμβÏιος", "ΟκτώβÏιος", "ÎοέμβÏιος", "ΔεκέμβÏιος"
+ ],
+ dayOfWeek: [
+ "ΚυÏ", "Δευ", "ΤÏι", "Τετ", "Πεμ", "ΠαÏ", "Σαβ"
+ ]
+ },
+ de: { // German
+ months: [
+ 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'
+ ],
+ dayOfWeek: [
+ "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"
+ ]
+ },
+ nl: { // Dutch
+ months: [
+ "januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"
+ ],
+ dayOfWeek: [
+ "zo", "ma", "di", "wo", "do", "vr", "za"
+ ]
+ },
+ tr: { // Turkish
+ months: [
+ "Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"
+ ],
+ dayOfWeek: [
+ "Paz", "Pts", "Sal", "Çar", "Per", "Cum", "Cts"
+ ]
+ },
+ fr: { //French
+ months: [
+ "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"
+ ],
+ dayOfWeek: [
+ "Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"
+ ]
+ },
+ es: { // Spanish
+ months: [
+ "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"
+ ],
+ dayOfWeek: [
+ "Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"
+ ]
+ },
+ th: { // Thai
+ months: [
+ 'มà¸à¸£à¸²à¸„ม', 'à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'à¸à¸£à¸à¸Žà¸²à¸„ม', 'สิงหาคม', 'à¸à¸±à¸™à¸¢à¸²à¸¢à¸™', 'ตุลาคม', 'พฤศจิà¸à¸²à¸¢à¸™', 'ธันวาคม'
+ ],
+ dayOfWeek: [
+ 'อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'
+ ]
+ },
+ pl: { // Polish
+ months: [
+ "styczeń", "luty", "marzec", "kwiecień", "maj", "czerwiec", "lipiec", "sierpień", "wrzesień", "październik", "listopad", "grudzień"
+ ],
+ dayOfWeek: [
+ "nd", "pn", "wt", "śr", "cz", "pt", "sb"
+ ]
+ },
+ pt: { // Portuguese
+ months: [
+ "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"
+ ],
+ dayOfWeek: [
+ "Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab"
+ ]
+ },
+ ch: { // Simplified Chinese
+ months: [
+ "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "ä¹æœˆ", "å月", "å一月", "å二月"
+ ],
+ dayOfWeek: [
+ "日", "一", "二", "三", "四", "五", "六"
+ ]
+ },
+ se: { // Swedish
+ months: [
+ "Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"
+ ],
+ dayOfWeek: [
+ "Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"
+ ]
+ },
+ kr: { // Korean
+ months: [
+ "1ì›”", "2ì›”", "3ì›”", "4ì›”", "5ì›”", "6ì›”", "7ì›”", "8ì›”", "9ì›”", "10ì›”", "11ì›”", "12ì›”"
+ ],
+ dayOfWeek: [
+ "ì¼", "ì›”", "í™”", "수", "목", "금", "토"
+ ]
+ },
+ it: { // Italian
+ months: [
+ "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"
+ ],
+ dayOfWeek: [
+ "Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"
+ ]
+ },
+ da: { // Dansk
+ months: [
+ "January", "Februar", "Marts", "April", "Maj", "Juni", "July", "August", "September", "Oktober", "November", "December"
+ ],
+ dayOfWeek: [
+ "Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"
+ ]
+ },
+ no: { // Norwegian
+ months: [
+ "Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"
+ ],
+ dayOfWeek: [
+ "Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"
+ ]
+ },
+ ja: { // Japanese
+ months: [
+ "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"
+ ],
+ dayOfWeek: [
+ "æ—¥", "月", "ç«", "æ°´", "木", "金", "土"
+ ]
+ },
+ vi: { // Vietnamese
+ months: [
+ "Tháng 1", "Tháng 2", "Tháng 3", "Tháng 4", "Tháng 5", "Tháng 6", "Tháng 7", "Tháng 8", "Tháng 9", "Tháng 10", "Tháng 11", "Tháng 12"
+ ],
+ dayOfWeek: [
+ "CN", "T2", "T3", "T4", "T5", "T6", "T7"
+ ]
+ },
+ sl: { // SlovenÅ¡Äina
+ months: [
+ "Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"
+ ],
+ dayOfWeek: [
+ "Ned", "Pon", "Tor", "Sre", "ÄŒet", "Pet", "Sob"
+ ]
+ },
+ cs: { // Čeština
+ months: [
+ "Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"
+ ],
+ dayOfWeek: [
+ "Ne", "Po", "Út", "St", "Čt", "Pá", "So"
+ ]
+ },
+ hu: { // Hungarian
+ months: [
+ "Január", "Február", "Március", "Ãprilis", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"
+ ],
+ dayOfWeek: [
+ "Va", "Hé", "Ke", "Sze", "Cs", "Pé", "Szo"
+ ]
+ }
+ },
+ value: '',
+ lang: 'en',
+
+ format: 'Y/m/d H:i',
+ formatTime: 'H:i',
+ formatDate: 'Y/m/d',
+
+ startDate: false, // new Date(), '1986/12/08', '-1970/01/05','-1970/01/05',
+ step: 60,
+ monthChangeSpinner: true,
+
+ closeOnDateSelect: false,
+ closeOnWithoutClick: true,
+ closeOnInputClick: true,
+
+ timepicker: true,
+ datepicker: true,
+ weeks: false,
+
+ defaultTime: false, // use formatTime format (ex. '10:00' for formatTime: 'H:i')
+ defaultDate: false, // use formatDate format (ex new Date() or '1986/12/08' or '-1970/01/05' or '-1970/01/05')
+
+ minDate: false,
+ maxDate: false,
+ minTime: false,
+ maxTime: false,
+
+ allowTimes: [],
+ opened: false,
+ initTime: true,
+ inline: false,
+ theme: '',
+
+ onSelectDate: function () {},
+ onSelectTime: function () {},
+ onChangeMonth: function () {},
+ onChangeYear: function () {},
+ onChangeDateTime: function () {},
+ onShow: function () {},
+ onClose: function () {},
+ onGenerate: function () {},
+
+ withoutCopyright: true,
+ inverseButton: false,
+ hours12: false,
+ next: 'xdsoft_next',
+ prev : 'xdsoft_prev',
+ dayOfWeekStart: 0,
+ parentID: 'body',
+ timeHeightInTimePicker: 25,
+ timepickerScrollbar: true,
+ todayButton: true,
+ defaultSelect: true,
+
+ scrollMonth: true,
+ scrollTime: true,
+ scrollInput: true,
+
+ lazyInit: false,
+ mask: false,
+ validateOnBlur: true,
+ allowBlank: true,
+ yearStart: 1950,
+ yearEnd: 2050,
+ style: '',
+ id: '',
+ fixed: false,
+ roundTime: 'round', // ceil, floor
+ className: '',
+ weekends: [],
+ disabledDates : [],
+ yearOffset: 0,
+ beforeShowDay: null,
+
+ enterLikeTab: true
+ };
+ // fix for ie8
+ if (!Array.prototype.indexOf) {
+ Array.prototype.indexOf = function (obj, start) {
+ var i, j;
+ for (i = (start || 0), j = this.length; i < j; i += 1) {
+ if (this[i] === obj) { return i; }
+ }
+ return -1;
+ };
+ }
+ Date.prototype.countDaysInMonth = function () {
+ return new Date(this.getFullYear(), this.getMonth() + 1, 0).getDate();
+ };
+ $.fn.xdsoftScroller = function (percent) {
+ return this.each(function () {
+ var timeboxparent = $(this),
+ pointerEventToXY = function (e) {
+ var out = {x: 0, y: 0},
+ touch;
+ if (e.type === 'touchstart' || e.type === 'touchmove' || e.type === 'touchend' || e.type === 'touchcancel') {
+ touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
+ out.x = touch.clientX;
+ out.y = touch.clientY;
+ } else if (e.type === 'mousedown' || e.type === 'mouseup' || e.type === 'mousemove' || e.type === 'mouseover' || e.type === 'mouseout' || e.type === 'mouseenter' || e.type === 'mouseleave') {
+ out.x = e.clientX;
+ out.y = e.clientY;
+ }
+ return out;
+ },
+ move = 0,
+ timebox,
+ parentHeight,
+ height,
+ scrollbar,
+ scroller,
+ maximumOffset = 100,
+ start = false,
+ startY = 0,
+ startTop = 0,
+ h1 = 0,
+ touchStart = false,
+ startTopScroll = 0,
+ calcOffset = function () {};
+ if (percent === 'hide') {
+ timeboxparent.find('.xdsoft_scrollbar').hide();
+ return;
+ }
+ if (!$(this).hasClass('xdsoft_scroller_box')) {
+ timebox = timeboxparent.children().eq(0);
+ parentHeight = timeboxparent[0].clientHeight;
+ height = timebox[0].offsetHeight;
+ scrollbar = $('<div class="xdsoft_scrollbar"></div>');
+ scroller = $('<div class="xdsoft_scroller"></div>');
+ scrollbar.append(scroller);
+
+ timeboxparent.addClass('xdsoft_scroller_box').append(scrollbar);
+ calcOffset = function calcOffset(event) {
+ var offset = pointerEventToXY(event).y - startY + startTopScroll;
+ if (offset < 0) {
+ offset = 0;
+ }
+ if (offset + scroller[0].offsetHeight > h1) {
+ offset = h1 - scroller[0].offsetHeight;
+ }
+ timeboxparent.trigger('scroll_element.xdsoft_scroller', [maximumOffset ? offset / maximumOffset : 0]);
+ };
+
+ scroller
+ .on('touchstart.xdsoft_scroller mousedown.xdsoft_scroller', function (event) {
+ if (!parentHeight) {
+ timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);
+ }
+
+ startY = pointerEventToXY(event).y;
+ startTopScroll = parseInt(scroller.css('margin-top'), 10);
+ h1 = scrollbar[0].offsetHeight;
+
+ if (event.type === 'mousedown') {
+ if (document) {
+ $(document.body).addClass('xdsoft_noselect');
+ }
+ $([document.body, window]).on('mouseup.xdsoft_scroller', function arguments_callee() {
+ $([document.body, window]).off('mouseup.xdsoft_scroller', arguments_callee)
+ .off('mousemove.xdsoft_scroller', calcOffset)
+ .removeClass('xdsoft_noselect');
+ });
+ $(document.body).on('mousemove.xdsoft_scroller', calcOffset);
+ } else {
+ touchStart = true;
+ event.stopPropagation();
+ event.preventDefault();
+ }
+ })
+ .on('touchmove', function (event) {
+ if (touchStart) {
+ event.preventDefault();
+ calcOffset(event);
+ }
+ })
+ .on('touchend touchcancel', function (event) {
+ touchStart = false;
+ startTopScroll = 0;
+ });
+
+ timeboxparent
+ .on('scroll_element.xdsoft_scroller', function (event, percentage) {
+ if (!parentHeight) {
+ timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percentage, true]);
+ }
+ percentage = percentage > 1 ? 1 : (percentage < 0 || isNaN(percentage)) ? 0 : percentage;
+
+ scroller.css('margin-top', maximumOffset * percentage);
+
+ setTimeout(function () {
+ timebox.css('marginTop', -parseInt((timebox[0].offsetHeight - parentHeight) * percentage, 10));
+ }, 10);
+ })
+ .on('resize_scroll.xdsoft_scroller', function (event, percentage, noTriggerScroll) {
+ var percent, sh;
+ parentHeight = timeboxparent[0].clientHeight;
+ height = timebox[0].offsetHeight;
+ percent = parentHeight / height;
+ sh = percent * scrollbar[0].offsetHeight;
+ if (percent > 1) {
+ scroller.hide();
+ } else {
+ scroller.show();
+ scroller.css('height', parseInt(sh > 10 ? sh : 10, 10));
+ maximumOffset = scrollbar[0].offsetHeight - scroller[0].offsetHeight;
+ if (noTriggerScroll !== true) {
+ timeboxparent.trigger('scroll_element.xdsoft_scroller', [percentage || Math.abs(parseInt(timebox.css('marginTop'), 10)) / (height - parentHeight)]);
+ }
+ }
+ });
+
+ timeboxparent.on('mousewheel', function (event) {
+ var top = Math.abs(parseInt(timebox.css('marginTop'), 10));
+
+ top = top - (event.deltaY * 20);
+ if (top < 0) {
+ top = 0;
+ }
+
+ timeboxparent.trigger('scroll_element.xdsoft_scroller', [top / (height - parentHeight)]);
+ event.stopPropagation();
+ return false;
+ });
+
+ timeboxparent.on('touchstart', function (event) {
+ start = pointerEventToXY(event);
+ startTop = Math.abs(parseInt(timebox.css('marginTop'), 10));
+ });
+
+ timeboxparent.on('touchmove', function (event) {
+ if (start) {
+ event.preventDefault();
+ var coord = pointerEventToXY(event);
+ timeboxparent.trigger('scroll_element.xdsoft_scroller', [(startTop - (coord.y - start.y)) / (height - parentHeight)]);
+ }
+ });
+
+ timeboxparent.on('touchend touchcancel', function (event) {
+ start = false;
+ startTop = 0;
+ });
+ }
+ timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);
+ });
+ };
+
+ $.fn.datetimepicker = function (opt) {
+ var KEY0 = 48,
+ KEY9 = 57,
+ _KEY0 = 96,
+ _KEY9 = 105,
+ CTRLKEY = 17,
+ DEL = 46,
+ ENTER = 13,
+ ESC = 27,
+ BACKSPACE = 8,
+ ARROWLEFT = 37,
+ ARROWUP = 38,
+ ARROWRIGHT = 39,
+ ARROWDOWN = 40,
+ TAB = 9,
+ F5 = 116,
+ AKEY = 65,
+ CKEY = 67,
+ VKEY = 86,
+ ZKEY = 90,
+ YKEY = 89,
+ ctrlDown = false,
+ options = ($.isPlainObject(opt) || !opt) ? $.extend(true, {}, default_options, opt) : $.extend(true, {}, default_options),
+
+ lazyInitTimer = 0,
+ createDateTimePicker,
+ destroyDateTimePicker,
+ _xdsoft_datetime,
+
+ lazyInit = function (input) {
+ input
+ .on('open.xdsoft focusin.xdsoft mousedown.xdsoft', function initOnActionCallback(event) {
+ if (input.is(':disabled') || input.is(':hidden') || !input.is(':visible') || input.data('xdsoft_datetimepicker')) {
+ return;
+ }
+ clearTimeout(lazyInitTimer);
+ lazyInitTimer = setTimeout(function () {
+
+ if (!input.data('xdsoft_datetimepicker')) {
+ createDateTimePicker(input);
+ }
+ input
+ .off('open.xdsoft focusin.xdsoft mousedown.xdsoft', initOnActionCallback)
+ .trigger('open.xdsoft');
+ }, 100);
+ });
+ };
+
+ createDateTimePicker = function (input) {
+ var datetimepicker = $('<div ' + (options.id ? 'id="' + options.id + '"' : '') + ' ' + (options.style ? 'style="' + options.style + '"' : '') + ' class="xdsoft_datetimepicker xdsoft_' + options.theme + ' xdsoft_noselect ' + (options.weeks ? ' xdsoft_showweeks' : '') + options.className + '"></div>'),
+ xdsoft_copyright = $('<div class="xdsoft_copyright"><a target="_blank" href="http://xdsoft.net/jqplugins/datetimepicker/">xdsoft.net</a></div>'),
+ datepicker = $('<div class="xdsoft_datepicker active"></div>'),
+ mounth_picker = $('<div class="xdsoft_mounthpicker"><button type="button" class="xdsoft_prev"></button><button type="button" class="xdsoft_today_button"></button>' +
+ '<div class="xdsoft_label xdsoft_month"><span></span><i></i></div>' +
+ '<div class="xdsoft_label xdsoft_year"><span></span><i></i></div>' +
+ '<button type="button" class="xdsoft_next"></button></div>'),
+ calendar = $('<div class="xdsoft_calendar"></div>'),
+ timepicker = $('<div class="xdsoft_timepicker active"><button type="button" class="xdsoft_prev"></button><div class="xdsoft_time_box"></div><button type="button" class="xdsoft_next"></button></div>'),
+ timeboxparent = timepicker.find('.xdsoft_time_box').eq(0),
+ timebox = $('<div class="xdsoft_time_variant"></div>'),
+ /*scrollbar = $('<div class="xdsoft_scrollbar"></div>'),
+ scroller = $('<div class="xdsoft_scroller"></div>'),*/
+ monthselect = $('<div class="xdsoft_select xdsoft_monthselect"><div></div></div>'),
+ yearselect = $('<div class="xdsoft_select xdsoft_yearselect"><div></div></div>'),
+ triggerAfterOpen = false,
+ XDSoft_datetime,
+ //scroll_element,
+ xchangeTimer,
+ timerclick,
+ current_time_index,
+ setPos,
+ timer = 0,
+ timer1 = 0;
+
+ mounth_picker
+ .find('.xdsoft_month span')
+ .after(monthselect);
+ mounth_picker
+ .find('.xdsoft_year span')
+ .after(yearselect);
+
+ mounth_picker
+ .find('.xdsoft_month,.xdsoft_year')
+ .on('mousedown.xdsoft', function (event) {
+ var select = $(this).find('.xdsoft_select').eq(0),
+ val = 0,
+ top = 0,
+ visible = select.is(':visible'),
+ items,
+ i;
+
+ mounth_picker
+ .find('.xdsoft_select')
+ .hide();
+ if (_xdsoft_datetime.currentTime) {
+ val = _xdsoft_datetime.currentTime[$(this).hasClass('xdsoft_month') ? 'getMonth' : 'getFullYear']();
+ }
+
+ select[visible ? 'hide' : 'show']();
+ for (items = select.find('div.xdsoft_option'), i = 0; i < items.length; i += 1) {
+ if (items.eq(i).data('value') === val) {
+ break;
+ } else {
+ top += items[0].offsetHeight;
+ }
+ }
+
+ select.xdsoftScroller(top / (select.children()[0].offsetHeight - (select[0].clientHeight)));
+ event.stopPropagation();
+ return false;
+ });
+
+ mounth_picker
+ .find('.xdsoft_select')
+ .xdsoftScroller()
+ .on('mousedown.xdsoft', function (event) {
+ event.stopPropagation();
+ event.preventDefault();
+ })
+ .on('mousedown.xdsoft', '.xdsoft_option', function (event) {
+ var year = _xdsoft_datetime.currentTime.getFullYear();
+ if (_xdsoft_datetime && _xdsoft_datetime.currentTime) {
+ _xdsoft_datetime.currentTime[$(this).parent().parent().hasClass('xdsoft_monthselect') ? 'setMonth' : 'setFullYear']($(this).data('value'));
+ }
+
+ $(this).parent().parent().hide();
+
+ datetimepicker.trigger('xchange.xdsoft');
+ if (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {
+ options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
+ }
+
+ if (year !== _xdsoft_datetime.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {
+ options.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
+ }
+ });
+
+ datetimepicker.setOptions = function (_options) {
+ options = $.extend(true, {}, options, _options);
+
+ if (_options.allowTimes && $.isArray(_options.allowTimes) && _options.allowTimes.length) {
+ options.allowTimes = $.extend(true, [], _options.allowTimes);
+ }
+
+ if (_options.weekends && $.isArray(_options.weekends) && _options.weekends.length) {
+ options.weekends = $.extend(true, [], _options.weekends);
+ }
+
+ if (_options.disabledDates && $.isArray(_options.disabledDates) && _options.disabledDates.length) {
+ options.disabledDates = $.extend(true, [], _options.disabledDates);
+ }
+
+ if ((options.open || options.opened) && (!options.inline)) {
+ input.trigger('open.xdsoft');
+ }
+
+ if (options.inline) {
+ triggerAfterOpen = true;
+ datetimepicker.addClass('xdsoft_inline');
+ input.after(datetimepicker).hide();
+ }
+
+ if (options.inverseButton) {
+ options.next = 'xdsoft_prev';
+ options.prev = 'xdsoft_next';
+ }
+
+ if (options.datepicker) {
+ datepicker.addClass('active');
+ } else {
+ datepicker.removeClass('active');
+ }
+
+ if (options.timepicker) {
+ timepicker.addClass('active');
+ } else {
+ timepicker.removeClass('active');
+ }
+
+ if (options.value) {
+ if (input && input.val) {
+ input.val(options.value);
+ }
+ _xdsoft_datetime.setCurrentTime(options.value);
+ }
+
+ if (isNaN(options.dayOfWeekStart)) {
+ options.dayOfWeekStart = 0;
+ } else {
+ options.dayOfWeekStart = parseInt(options.dayOfWeekStart, 10) % 7;
+ }
+
+ if (!options.timepickerScrollbar) {
+ timeboxparent.xdsoftScroller('hide');
+ }
+
+ if (options.minDate && /^-(.*)$/.test(options.minDate)) {
+ options.minDate = _xdsoft_datetime.strToDateTime(options.minDate).dateFormat(options.formatDate);
+ }
+
+ if (options.maxDate && /^\+(.*)$/.test(options.maxDate)) {
+ options.maxDate = _xdsoft_datetime.strToDateTime(options.maxDate).dateFormat(options.formatDate);
+ }
+
+ mounth_picker
+ .find('.xdsoft_today_button')
+ .css('visibility', !options.todayButton ? 'hidden' : 'visible');
+
+ if (options.mask) {
+ var e,
+ getCaretPos = function (input) {
+ try {
+ if (document.selection && document.selection.createRange) {
+ var range = document.selection.createRange();
+ return range.getBookmark().charCodeAt(2) - 2;
+ }
+ if (input.setSelectionRange) {
+ return input.selectionStart;
+ }
+ } catch (e) {
+ return 0;
+ }
+ },
+ setCaretPos = function (node, pos) {
+ node = (typeof node === "string" || node instanceof String) ? document.getElementById(node) : node;
+ if (!node) {
+ return false;
+ }
+ if (node.createTextRange) {
+ var textRange = node.createTextRange();
+ textRange.collapse(true);
+ textRange.moveEnd('character', pos);
+ textRange.moveStart('character', pos);
+ textRange.select();
+ return true;
+ }
+ if (node.setSelectionRange) {
+ node.setSelectionRange(pos, pos);
+ return true;
+ }
+ return false;
+ },
+ isValidValue = function (mask, value) {
+ var reg = mask
+ .replace(/([\[\]\/\{\}\(\)\-\.\+]{1})/g, '\\$1')
+ .replace(/_/g, '{digit+}')
+ .replace(/([0-9]{1})/g, '{digit$1}')
+ .replace(/\{digit([0-9]{1})\}/g, '[0-$1_]{1}')
+ .replace(/\{digit[\+]\}/g, '[0-9_]{1}');
+ return (new RegExp(reg)).test(value);
+ };
+ input.off('keydown.xdsoft');
+
+ if (options.mask === true) {
+ options.mask = options.format
+ .replace(/Y/g, '9999')
+ .replace(/F/g, '9999')
+ .replace(/m/g, '19')
+ .replace(/d/g, '39')
+ .replace(/H/g, '29')
+ .replace(/i/g, '59')
+ .replace(/s/g, '59');
+ }
+
+ if ($.type(options.mask) === 'string') {
+ if (!isValidValue(options.mask, input.val())) {
+ input.val(options.mask.replace(/[0-9]/g, '_'));
+ }
+
+ input.on('keydown.xdsoft', function (event) {
+ var val = this.value,
+ key = event.which,
+ pos,
+ digit;
+
+ if (((key >= KEY0 && key <= KEY9) || (key >= _KEY0 && key <= _KEY9)) || (key === BACKSPACE || key === DEL)) {
+ pos = getCaretPos(this);
+ digit = (key !== BACKSPACE && key !== DEL) ? String.fromCharCode((_KEY0 <= key && key <= _KEY9) ? key - KEY0 : key) : '_';
+
+ if ((key === BACKSPACE || key === DEL) && pos) {
+ pos -= 1;
+ digit = '_';
+ }
+
+ while (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {
+ pos += (key === BACKSPACE || key === DEL) ? -1 : 1;
+ }
+
+ val = val.substr(0, pos) + digit + val.substr(pos + 1);
+ if ($.trim(val) === '') {
+ val = options.mask.replace(/[0-9]/g, '_');
+ } else {
+ if (pos === options.mask.length) {
+ event.preventDefault();
+ return false;
+ }
+ }
+
+ pos += (key === BACKSPACE || key === DEL) ? 0 : 1;
+ while (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {
+ pos += (key === BACKSPACE || key === DEL) ? -1 : 1;
+ }
+
+ if (isValidValue(options.mask, val)) {
+ this.value = val;
+ setCaretPos(this, pos);
+ } else if ($.trim(val) === '') {
+ this.value = options.mask.replace(/[0-9]/g, '_');
+ } else {
+ input.trigger('error_input.xdsoft');
+ }
+ } else {
+ if (([AKEY, CKEY, VKEY, ZKEY, YKEY].indexOf(key) !== -1 && ctrlDown) || [ESC, ARROWUP, ARROWDOWN, ARROWLEFT, ARROWRIGHT, F5, CTRLKEY, TAB, ENTER].indexOf(key) !== -1) {
+ return true;
+ }
+ }
+
+ event.preventDefault();
+ return false;
+ });
+ }
+ }
+ if (options.validateOnBlur) {
+ input
+ .off('blur.xdsoft')
+ .on('blur.xdsoft', function () {
+ if (options.allowBlank && !$.trim($(this).val()).length) {
+ $(this).val(null);
+ datetimepicker.data('xdsoft_datetime').empty();
+ } else if (!Date.parseDate($(this).val(), options.format)) {
+ $(this).val((_xdsoft_datetime.now()).dateFormat(options.format));
+ datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());
+ } else {
+ datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());
+ }
+ datetimepicker.trigger('changedatetime.xdsoft');
+ });
+ }
+ options.dayOfWeekStartPrev = (options.dayOfWeekStart === 0) ? 6 : options.dayOfWeekStart - 1;
+
+ datetimepicker
+ .trigger('xchange.xdsoft')
+ .trigger('afterOpen.xdsoft');
+ };
+
+ datetimepicker
+ .data('options', options)
+ .on('mousedown.xdsoft', function (event) {
+ event.stopPropagation();
+ event.preventDefault();
+ yearselect.hide();
+ monthselect.hide();
+ return false;
+ });
+
+ //scroll_element = timepicker.find('.xdsoft_time_box');
+ timeboxparent.append(timebox);
+ timeboxparent.xdsoftScroller();
+
+ datetimepicker.on('afterOpen.xdsoft', function () {
+ timeboxparent.xdsoftScroller();
+ });
+
+ datetimepicker
+ .append(datepicker)
+ .append(timepicker);
+
+ if (options.withoutCopyright !== true) {
+ datetimepicker
+ .append(xdsoft_copyright);
+ }
+
+ datepicker
+ .append(mounth_picker)
+ .append(calendar);
+
+ $(options.parentID)
+ .append(datetimepicker);
+
+ XDSoft_datetime = function () {
+ var _this = this;
+ _this.now = function (norecursion) {
+ var d = new Date(),
+ date,
+ time;
+
+ if (!norecursion && options.defaultDate) {
+ date = _this.strToDate(options.defaultDate);
+ d.setFullYear(date.getFullYear());
+ d.setMonth(date.getMonth());
+ d.setDate(date.getDate());
+ }
+
+ if (options.yearOffset) {
+ d.setFullYear(d.getFullYear() + options.yearOffset);
+ }
+
+ if (!norecursion && options.defaultTime) {
+ time = _this.strtotime(options.defaultTime);
+ d.setHours(time.getHours());
+ d.setMinutes(time.getMinutes());
+ }
+
+ return d;
+ };
+
+ _this.isValidDate = function (d) {
+ if (Object.prototype.toString.call(d) !== "[object Date]") {
+ return false;
+ }
+ return !isNaN(d.getTime());
+ };
+
+ _this.setCurrentTime = function (dTime) {
+ _this.currentTime = (typeof dTime === 'string') ? _this.strToDateTime(dTime) : _this.isValidDate(dTime) ? dTime : _this.now();
+ datetimepicker.trigger('xchange.xdsoft');
+ };
+
+ _this.empty = function () {
+ _this.currentTime = null;
+ };
+
+ _this.getCurrentTime = function (dTime) {
+ return _this.currentTime;
+ };
+
+ _this.nextMonth = function () {
+ var month = _this.currentTime.getMonth() + 1,
+ year;
+ if (month === 12) {
+ _this.currentTime.setFullYear(_this.currentTime.getFullYear() + 1);
+ month = 0;
+ }
+
+ year = _this.currentTime.getFullYear();
+
+ _this.currentTime.setDate(
+ Math.min(
+ new Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),
+ _this.currentTime.getDate()
+ )
+ );
+ _this.currentTime.setMonth(month);
+
+ if (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {
+ options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
+ }
+
+ if (year !== _this.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {
+ options.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
+ }
+
+ datetimepicker.trigger('xchange.xdsoft');
+ return month;
+ };
+
+ _this.prevMonth = function () {
+ var month = _this.currentTime.getMonth() - 1;
+ if (month === -1) {
+ _this.currentTime.setFullYear(_this.currentTime.getFullYear() - 1);
+ month = 11;
+ }
+ _this.currentTime.setDate(
+ Math.min(
+ new Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),
+ _this.currentTime.getDate()
+ )
+ );
+ _this.currentTime.setMonth(month);
+ if (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {
+ options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
+ }
+ datetimepicker.trigger('xchange.xdsoft');
+ return month;
+ };
+
+ _this.getWeekOfYear = function (datetime) {
+ var onejan = new Date(datetime.getFullYear(), 0, 1);
+ return Math.ceil((((datetime - onejan) / 86400000) + onejan.getDay() + 1) / 7);
+ };
+
+ _this.strToDateTime = function (sDateTime) {
+ var tmpDate = [], timeOffset, currentTime;
+
+ if (sDateTime && sDateTime instanceof Date && _this.isValidDate(sDateTime)) {
+ return sDateTime;
+ }
+
+ tmpDate = /^(\+|\-)(.*)$/.exec(sDateTime);
+ if (tmpDate) {
+ tmpDate[2] = Date.parseDate(tmpDate[2], options.formatDate);
+ }
+ if (tmpDate && tmpDate[2]) {
+ timeOffset = tmpDate[2].getTime() - (tmpDate[2].getTimezoneOffset()) * 60000;
+ currentTime = new Date((_xdsoft_datetime.now()).getTime() + parseInt(tmpDate[1] + '1', 10) * timeOffset);
+ } else {
+ currentTime = sDateTime ? Date.parseDate(sDateTime, options.format) : _this.now();
+ }
+
+ if (!_this.isValidDate(currentTime)) {
+ currentTime = _this.now();
+ }
+
+ return currentTime;
+ };
+
+ _this.strToDate = function (sDate) {
+ if (sDate && sDate instanceof Date && _this.isValidDate(sDate)) {
+ return sDate;
+ }
+
+ var currentTime = sDate ? Date.parseDate(sDate, options.formatDate) : _this.now(true);
+ if (!_this.isValidDate(currentTime)) {
+ currentTime = _this.now(true);
+ }
+ return currentTime;
+ };
+
+ _this.strtotime = function (sTime) {
+ if (sTime && sTime instanceof Date && _this.isValidDate(sTime)) {
+ return sTime;
+ }
+ var currentTime = sTime ? Date.parseDate(sTime, options.formatTime) : _this.now(true);
+ if (!_this.isValidDate(currentTime)) {
+ currentTime = _this.now(true);
+ }
+ return currentTime;
+ };
+
+ _this.str = function () {
+ return _this.currentTime.dateFormat(options.format);
+ };
+ _this.currentTime = this.now();
+ };
+
+ _xdsoft_datetime = new XDSoft_datetime();
+
+ mounth_picker
+ .find('.xdsoft_today_button')
+ .on('mousedown.xdsoft', function () {
+ datetimepicker.data('changed', true);
+ _xdsoft_datetime.setCurrentTime(0);
+ datetimepicker.trigger('afterOpen.xdsoft');
+ }).on('dblclick.xdsoft', function () {
+ input.val(_xdsoft_datetime.str());
+ datetimepicker.trigger('close.xdsoft');
+ });
+ mounth_picker
+ .find('.xdsoft_prev,.xdsoft_next')
+ .on('mousedown.xdsoft', function () {
+ var $this = $(this),
+ timer = 0,
+ stop = false;
+
+ (function arguments_callee1(v) {
+ var month = _xdsoft_datetime.currentTime.getMonth();
+ if ($this.hasClass(options.next)) {
+ _xdsoft_datetime.nextMonth();
+ } else if ($this.hasClass(options.prev)) {
+ _xdsoft_datetime.prevMonth();
+ }
+ if (options.monthChangeSpinner) {
+ if (!stop) {
+ timer = setTimeout(arguments_callee1, v || 100);
+ }
+ }
+ }(500));
+
+ $([document.body, window]).on('mouseup.xdsoft', function arguments_callee2() {
+ clearTimeout(timer);
+ stop = true;
+ $([document.body, window]).off('mouseup.xdsoft', arguments_callee2);
+ });
+ });
+
+ timepicker
+ .find('.xdsoft_prev,.xdsoft_next')
+ .on('mousedown.xdsoft', function () {
+ var $this = $(this),
+ timer = 0,
+ stop = false,
+ period = 110;
+ (function arguments_callee4(v) {
+ var pheight = timeboxparent[0].clientHeight,
+ height = timebox[0].offsetHeight,
+ top = Math.abs(parseInt(timebox.css('marginTop'), 10));
+ if ($this.hasClass(options.next) && (height - pheight) - options.timeHeightInTimePicker >= top) {
+ timebox.css('marginTop', '-' + (top + options.timeHeightInTimePicker) + 'px');
+ } else if ($this.hasClass(options.prev) && top - options.timeHeightInTimePicker >= 0) {
+ timebox.css('marginTop', '-' + (top - options.timeHeightInTimePicker) + 'px');
+ }
+ timeboxparent.trigger('scroll_element.xdsoft_scroller', [Math.abs(parseInt(timebox.css('marginTop'), 10) / (height - pheight))]);
+ period = (period > 10) ? 10 : period - 10;
+ if (!stop) {
+ timer = setTimeout(arguments_callee4, v || period);
+ }
+ }(500));
+ $([document.body, window]).on('mouseup.xdsoft', function arguments_callee5() {
+ clearTimeout(timer);
+ stop = true;
+ $([document.body, window])
+ .off('mouseup.xdsoft', arguments_callee5);
+ });
+ });
+
+ xchangeTimer = 0;
+ // base handler - generating a calendar and timepicker
+ datetimepicker
+ .on('xchange.xdsoft', function (event) {
+ clearTimeout(xchangeTimer);
+ xchangeTimer = setTimeout(function () {
+ var table = '',
+ start = new Date(_xdsoft_datetime.currentTime.getFullYear(), _xdsoft_datetime.currentTime.getMonth(), 1, 12, 0, 0),
+ i = 0,
+ j,
+ today = _xdsoft_datetime.now(),
+ maxDate = false,
+ minDate = false,
+ d,
+ y,
+ m,
+ w,
+ classes = [],
+ customDateSettings,
+ newRow = true,
+ time = '',
+ h = '',
+ line_time;
+
+ while (start.getDay() !== options.dayOfWeekStart) {
+ start.setDate(start.getDate() - 1);
+ }
+
+ table += '<table><thead><tr>';
+
+ if (options.weeks) {
+ table += '<th></th>';
+ }
+
+ for (j = 0; j < 7; j += 1) {
+ table += '<th>' + options.i18n[options.lang].dayOfWeek[(j + options.dayOfWeekStart) % 7] + '</th>';
+ }
+
+ table += '</tr></thead>';
+ table += '<tbody>';
+
+ if (options.maxDate !== false) {
+ maxDate = _xdsoft_datetime.strToDate(options.maxDate);
+ maxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59, 59, 999);
+ }
+
+ if (options.minDate !== false) {
+ minDate = _xdsoft_datetime.strToDate(options.minDate);
+ minDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());
+ }
+
+ while (i < _xdsoft_datetime.currentTime.countDaysInMonth() || start.getDay() !== options.dayOfWeekStart || _xdsoft_datetime.currentTime.getMonth() === start.getMonth()) {
+ classes = [];
+ i += 1;
+
+ d = start.getDate();
+ y = start.getFullYear();
+ m = start.getMonth();
+ w = _xdsoft_datetime.getWeekOfYear(start);
+
+ classes.push('xdsoft_date');
+
+ if (options.beforeShowDay && $.isFunction(options.beforeShowDay.call)) {
+ customDateSettings = options.beforeShowDay.call(datetimepicker, start);
+ } else {
+ customDateSettings = null;
+ }
+
+ if ((maxDate !== false && start > maxDate) || (minDate !== false && start < minDate) || (customDateSettings && customDateSettings[0] === false)) {
+ classes.push('xdsoft_disabled');
+ } else if (options.disabledDates.indexOf(start.dateFormat(options.formatDate)) !== -1) {
+ classes.push('xdsoft_disabled');
+ }
+
+ if (customDateSettings && customDateSettings[1] !== "") {
+ classes.push(customDateSettings[1]);
+ }
+
+ if (_xdsoft_datetime.currentTime.getMonth() !== m) {
+ classes.push('xdsoft_other_month');
+ }
+
+ if ((options.defaultSelect || datetimepicker.data('changed')) && _xdsoft_datetime.currentTime.dateFormat(options.formatDate) === start.dateFormat(options.formatDate)) {
+ classes.push('xdsoft_current');
+ }
+
+ if (today.dateFormat(options.formatDate) === start.dateFormat(options.formatDate)) {
+ classes.push('xdsoft_today');
+ }
+
+ if (start.getDay() === 0 || start.getDay() === 6 || options.weekends.indexOf(start.dateFormat(options.formatDate)) === -1) {
+ classes.push('xdsoft_weekend');
+ }
+
+ if (options.beforeShowDay && $.isFunction(options.beforeShowDay)) {
+ classes.push(options.beforeShowDay(start));
+ }
+
+ if (newRow) {
+ table += '<tr>';
+ newRow = false;
+ if (options.weeks) {
+ table += '<th>' + w + '</th>';
+ }
+ }
+
+ table += '<td data-date="' + d + '" data-month="' + m + '" data-year="' + y + '"' + ' class="xdsoft_date xdsoft_day_of_week' + start.getDay() + ' ' + classes.join(' ') + '">' +
+ '<div>' + d + '</div>' +
+ '</td>';
+
+ if (start.getDay() === options.dayOfWeekStartPrev) {
+ table += '</tr>';
+ newRow = true;
+ }
+
+ start.setDate(d + 1);
+ }
+ table += '</tbody></table>';
+
+ calendar.html(table);
+
+ mounth_picker.find('.xdsoft_label span').eq(0).text(options.i18n[options.lang].months[_xdsoft_datetime.currentTime.getMonth()]);
+ mounth_picker.find('.xdsoft_label span').eq(1).text(_xdsoft_datetime.currentTime.getFullYear());
+
+ // generate timebox
+ time = '';
+ h = '';
+ m = '';
+ line_time = function line_time(h, m) {
+ var now = _xdsoft_datetime.now();
+ now.setHours(h);
+ h = parseInt(now.getHours(), 10);
+ now.setMinutes(m);
+ m = parseInt(now.getMinutes(), 10);
+
+ classes = [];
+ if ((options.maxTime !== false && _xdsoft_datetime.strtotime(options.maxTime).getTime() < now.getTime()) || (options.minTime !== false && _xdsoft_datetime.strtotime(options.minTime).getTime() > now.getTime())) {
+ classes.push('xdsoft_disabled');
+ }
+ if ((options.initTime || options.defaultSelect || datetimepicker.data('changed')) && parseInt(_xdsoft_datetime.currentTime.getHours(), 10) === parseInt(h, 10) && (options.step > 59 || Math[options.roundTime](_xdsoft_datetime.currentTime.getMinutes() / options.step) * options.step === parseInt(m, 10))) {
+ if (options.defaultSelect || datetimepicker.data('changed')) {
+ classes.push('xdsoft_current');
+ } else if (options.initTime) {
+ classes.push('xdsoft_init_time');
+ }
+ }
+ if (parseInt(today.getHours(), 10) === parseInt(h, 10) && parseInt(today.getMinutes(), 10) === parseInt(m, 10)) {
+ classes.push('xdsoft_today');
+ }
+ time += '<div class="xdsoft_time ' + classes.join(' ') + '" data-hour="' + h + '" data-minute="' + m + '">' + now.dateFormat(options.formatTime) + '</div>';
+ };
+
+ if (!options.allowTimes || !$.isArray(options.allowTimes) || !options.allowTimes.length) {
+ for (i = 0, j = 0; i < (options.hours12 ? 12 : 24); i += 1) {
+ for (j = 0; j < 60; j += options.step) {
+ h = (i < 10 ? '0' : '') + i;
+ m = (j < 10 ? '0' : '') + j;
+ line_time(h, m);
+ }
+ }
+ } else {
+ for (i = 0; i < options.allowTimes.length; i += 1) {
+ h = _xdsoft_datetime.strtotime(options.allowTimes[i]).getHours();
+ m = _xdsoft_datetime.strtotime(options.allowTimes[i]).getMinutes();
+ line_time(h, m);
+ }
+ }
+
+ timebox.html(time);
+
+ opt = '';
+ i = 0;
+
+ for (i = parseInt(options.yearStart, 10) + options.yearOffset; i <= parseInt(options.yearEnd, 10) + options.yearOffset; i += 1) {
+ opt += '<div class="xdsoft_option ' + (_xdsoft_datetime.currentTime.getFullYear() === i ? 'xdsoft_current' : '') + '" data-value="' + i + '">' + i + '</div>';
+ }
+ yearselect.children().eq(0)
+ .html(opt);
+
+ for (i = 0, opt = ''; i <= 11; i += 1) {
+ opt += '<div class="xdsoft_option ' + (_xdsoft_datetime.currentTime.getMonth() === i ? 'xdsoft_current' : '') + '" data-value="' + i + '">' + options.i18n[options.lang].months[i] + '</div>';
+ }
+ monthselect.children().eq(0).html(opt);
+ $(datetimepicker)
+ .trigger('generate.xdsoft');
+ }, 10);
+ event.stopPropagation();
+ })
+ .on('afterOpen.xdsoft', function () {
+ if (options.timepicker) {
+ var classType, pheight, height, top;
+ if (timebox.find('.xdsoft_current').length) {
+ classType = '.xdsoft_current';
+ } else if (timebox.find('.xdsoft_init_time').length) {
+ classType = '.xdsoft_init_time';
+ }
+ if (classType) {
+ pheight = timeboxparent[0].clientHeight;
+ height = timebox[0].offsetHeight;
+ top = timebox.find(classType).index() * options.timeHeightInTimePicker + 1;
+ if ((height - pheight) < top) {
+ top = height - pheight;
+ }
+ timeboxparent.trigger('scroll_element.xdsoft_scroller', [parseInt(top, 10) / (height - pheight)]);
+ } else {
+ timeboxparent.trigger('scroll_element.xdsoft_scroller', [0]);
+ }
+ }
+ });
+
+ timerclick = 0;
+ calendar
+ .on('click.xdsoft', 'td', function (xdevent) {
+ xdevent.stopPropagation(); // Prevents closing of Pop-ups, Modals and Flyouts in Bootstrap
+ timerclick += 1;
+ var $this = $(this),
+ currentTime = _xdsoft_datetime.currentTime;
+
+ if (currentTime === undefined || currentTime === null) {
+ _xdsoft_datetime.currentTime = _xdsoft_datetime.now();
+ currentTime = _xdsoft_datetime.currentTime;
+ }
+
+ if ($this.hasClass('xdsoft_disabled')) {
+ return false;
+ }
+
+ currentTime.setDate(1);
+ currentTime.setFullYear($this.data('year'));
+ currentTime.setMonth($this.data('month'));
+ currentTime.setDate($this.data('date'));
+
+ datetimepicker.trigger('select.xdsoft', [currentTime]);
+
+ input.val(_xdsoft_datetime.str());
+ if ((timerclick > 1 || (options.closeOnDateSelect === true || (options.closeOnDateSelect === 0 && !options.timepicker))) && !options.inline) {
+ datetimepicker.trigger('close.xdsoft');
+ }
+
+ if (options.onSelectDate && $.isFunction(options.onSelectDate)) {
+ options.onSelectDate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);
+ }
+
+ datetimepicker.data('changed', true);
+ datetimepicker.trigger('xchange.xdsoft');
+ datetimepicker.trigger('changedatetime.xdsoft');
+ setTimeout(function () {
+ timerclick = 0;
+ }, 200);
+ });
+
+ timebox
+ .on('click.xdsoft', 'div', function (xdevent) {
+ xdevent.stopPropagation();
+ var $this = $(this),
+ currentTime = _xdsoft_datetime.currentTime;
+
+ if (currentTime === undefined || currentTime === null) {
+ _xdsoft_datetime.currentTime = _xdsoft_datetime.now();
+ currentTime = _xdsoft_datetime.currentTime;
+ }
+
+ if ($this.hasClass('xdsoft_disabled')) {
+ return false;
+ }
+ currentTime.setHours($this.data('hour'));
+ currentTime.setMinutes($this.data('minute'));
+ datetimepicker.trigger('select.xdsoft', [currentTime]);
+
+ datetimepicker.data('input').val(_xdsoft_datetime.str());
+ if (!options.inline) {
+ datetimepicker.trigger('close.xdsoft');
+ }
+
+ if (options.onSelectTime && $.isFunction(options.onSelectTime)) {
+ options.onSelectTime.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);
+ }
+ datetimepicker.data('changed', true);
+ datetimepicker.trigger('xchange.xdsoft');
+ datetimepicker.trigger('changedatetime.xdsoft');
+ });
+
+
+ datepicker
+ .on('mousewheel.xdsoft', function (event) {
+ if (!options.scrollMonth) {
+ return true;
+ }
+ if (event.deltaY < 0) {
+ _xdsoft_datetime.nextMonth();
+ } else {
+ _xdsoft_datetime.prevMonth();
+ }
+ return false;
+ });
+
+ input
+ .on('mousewheel.xdsoft', function (event) {
+ if (!options.scrollInput) {
+ return true;
+ }
+ if (!options.datepicker && options.timepicker) {
+ current_time_index = timebox.find('.xdsoft_current').length ? timebox.find('.xdsoft_current').eq(0).index() : 0;
+ if (current_time_index + event.deltaY >= 0 && current_time_index + event.deltaY < timebox.children().length) {
+ current_time_index += event.deltaY;
+ }
+ if (timebox.children().eq(current_time_index).length) {
+ timebox.children().eq(current_time_index).trigger('mousedown');
+ }
+ return false;
+ }
+ if (options.datepicker && !options.timepicker) {
+ datepicker.trigger(event, [event.deltaY, event.deltaX, event.deltaY]);
+ if (input.val) {
+ input.val(_xdsoft_datetime.str());
+ }
+ datetimepicker.trigger('changedatetime.xdsoft');
+ return false;
+ }
+ });
+
+ datetimepicker
+ .on('changedatetime.xdsoft', function (event) {
+ if (options.onChangeDateTime && $.isFunction(options.onChangeDateTime)) {
+ var $input = datetimepicker.data('input');
+ options.onChangeDateTime.call(datetimepicker, _xdsoft_datetime.currentTime, $input, event);
+ delete options.value;
+ $input.trigger('change');
+ }
+ })
+ .on('generate.xdsoft', function () {
+ if (options.onGenerate && $.isFunction(options.onGenerate)) {
+ options.onGenerate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
+ }
+ if (triggerAfterOpen) {
+ datetimepicker.trigger('afterOpen.xdsoft');
+ triggerAfterOpen = false;
+ }
+ })
+ .on('click.xdsoft', function (xdevent) {
+ xdevent.stopPropagation();
+ });
+
+ current_time_index = 0;
+
+ setPos = function () {
+ var offset = datetimepicker.data('input').offset(), top = offset.top + datetimepicker.data('input')[0].offsetHeight - 1, left = offset.left, position = "absolute";
+ if (options.fixed) {
+ top -= $(window).scrollTop();
+ left -= $(window).scrollLeft();
+ position = "fixed";
+ } else {
+ if (top + datetimepicker[0].offsetHeight > $(window).height() + $(window).scrollTop()) {
+ top = offset.top - datetimepicker[0].offsetHeight + 1;
+ }
+ if (top < 0) {
+ top = 0;
+ }
+ if (left + datetimepicker[0].offsetWidth > $(window).width()) {
+ left = $(window).width() - datetimepicker[0].offsetWidth;
+ }
+ }
+ datetimepicker.css({
+ left: left,
+ top: top,
+ position: position
+ });
+ };
+ datetimepicker
+ .on('open.xdsoft', function (event) {
+ var onShow = true;
+ if (options.onShow && $.isFunction(options.onShow)) {
+ onShow = options.onShow.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);
+ }
+ if (onShow !== false) {
+ datetimepicker.show();
+ setPos();
+ $(window)
+ .off('resize.xdsoft', setPos)
+ .on('resize.xdsoft', setPos);
+
+ if (options.closeOnWithoutClick) {
+ $([document.body, window]).on('mousedown.xdsoft', function arguments_callee6() {
+ datetimepicker.trigger('close.xdsoft');
+ $([document.body, window]).off('mousedown.xdsoft', arguments_callee6);
+ });
+ }
+ }
+ })
+ .on('close.xdsoft', function (event) {
+ var onClose = true;
+ mounth_picker
+ .find('.xdsoft_month,.xdsoft_year')
+ .find('.xdsoft_select')
+ .hide();
+ if (options.onClose && $.isFunction(options.onClose)) {
+ onClose = options.onClose.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);
+ }
+ if (onClose !== false && !options.opened && !options.inline) {
+ datetimepicker.hide();
+ }
+ event.stopPropagation();
+ })
+ .on('toggle.xdsoft', function (event) {
+ datetimepicker.is(':visible') ? datetimepicker.trigger('close.xdsoft') : datetimepicker.trigger('open.xdsoft');
+ })
+ .data('input', input);
+
+ timer = 0;
+ timer1 = 0;
+
+ datetimepicker.data('xdsoft_datetime', _xdsoft_datetime);
+ datetimepicker.setOptions(options);
+
+ function getCurrentValue() {
+
+ var ct = false, time;
+
+ if (options.startDate) {
+ ct = _xdsoft_datetime.strToDate(options.startDate);
+ } else {
+ ct = options.value || ((input && input.val && input.val()) ? input.val() : '');
+ if (ct) {
+ ct = _xdsoft_datetime.strToDateTime(ct);
+ } else if (options.defaultDate) {
+ ct = _xdsoft_datetime.strToDate(options.defaultDate);
+ if (options.defaultTime) {
+ time = _xdsoft_datetime.strtotime(options.defaultTime);
+ ct.setHours(time.getHours());
+ ct.setMinutes(time.getMinutes());
+ }
+ }
+ }
+
+ if (ct && _xdsoft_datetime.isValidDate(ct)) {
+ datetimepicker.data('changed', true);
+ } else {
+ ct = '';
+ }
+
+ return ct || 0;
+ }
+
+ _xdsoft_datetime.setCurrentTime(getCurrentValue());
+
+ input
+ .data('xdsoft_datetimepicker', datetimepicker)
+ .on('open.xdsoft focusin.xdsoft mousedown.xdsoft', function (event) {
+ if (input.is(':disabled') || input.is(':hidden') || !input.is(':visible') || (input.data('xdsoft_datetimepicker').is(':visible') && options.closeOnInputClick)) {
+ return;
+ }
+ clearTimeout(timer);
+ timer = setTimeout(function () {
+ if (input.is(':disabled') || input.is(':hidden') || !input.is(':visible')) {
+ return;
+ }
+
+ triggerAfterOpen = true;
+ _xdsoft_datetime.setCurrentTime(getCurrentValue());
+
+ datetimepicker.trigger('open.xdsoft');
+ }, 100);
+ })
+ .on('keydown.xdsoft', function (event) {
+ var val = this.value, elementSelector,
+ key = event.which;
+ if ([ENTER].indexOf(key) !== -1 && options.enterLikeTab) {
+ elementSelector = $("input:visible,textarea:visible");
+ datetimepicker.trigger('close.xdsoft');
+ elementSelector.eq(elementSelector.index(this) + 1).focus();
+ return false;
+ }
+ if ([TAB].indexOf(key) !== -1) {
+ datetimepicker.trigger('close.xdsoft');
+ return true;
+ }
+ });
+ };
+ destroyDateTimePicker = function (input) {
+ var datetimepicker = input.data('xdsoft_datetimepicker');
+ if (datetimepicker) {
+ datetimepicker.data('xdsoft_datetime', null);
+ datetimepicker.remove();
+ input
+ .data('xdsoft_datetimepicker', null)
+ .off('.xdsoft');
+ $(window).off('resize.xdsoft');
+ $([window, document.body]).off('mousedown.xdsoft');
+ if (input.unmousewheel) {
+ input.unmousewheel();
+ }
+ }
+ };
+ $(document)
+ .off('keydown.xdsoftctrl keyup.xdsoftctrl')
+ .on('keydown.xdsoftctrl', function (e) {
+ if (e.keyCode === CTRLKEY) {
+ ctrlDown = true;
+ }
+ })
+ .on('keyup.xdsoftctrl', function (e) {
+ if (e.keyCode === CTRLKEY) {
+ ctrlDown = false;
+ }
+ });
+ return this.each(function () {
+ var datetimepicker = $(this).data('xdsoft_datetimepicker');
+ if (datetimepicker) {
+ if ($.type(opt) === 'string') {
+ switch (opt) {
+ case 'show':
+ $(this).select().focus();
+ datetimepicker.trigger('open.xdsoft');
+ break;
+ case 'hide':
+ datetimepicker.trigger('close.xdsoft');
+ break;
+ case 'toggle':
+ datetimepicker.trigger('toggle.xdsoft');
+ break;
+ case 'destroy':
+ destroyDateTimePicker($(this));
+ break;
+ case 'reset':
+ this.value = this.defaultValue;
+ if (!this.value || !datetimepicker.data('xdsoft_datetime').isValidDate(Date.parseDate(this.value, options.format))) {
+ datetimepicker.data('changed', false);
+ }
+ datetimepicker.data('xdsoft_datetime').setCurrentTime(this.value);
+ break;
+ }
+ } else {
+ datetimepicker
+ .setOptions(opt);
+ }
+ return 0;
+ }
+ if ($.type(opt) !== 'string') {
+ if (!options.lazyInit || options.open || options.inline) {
+ createDateTimePicker($(this));
+ } else {
+ lazyInit($(this));
+ }
+ }
+ });
+ };
+ $.fn.datetimepicker.defaults = default_options;
+}(jQuery));
+(function () {
+
+/*! Copyright (c) 2013 Brandon Aaron (http://brandon.aaron.sh)
+ * Licensed under the MIT License (LICENSE.txt).
+ *
+ * Version: 3.1.12
+ *
+ * Requires: jQuery 1.2.2+
+ */
+!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a:a(jQuery)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type="mousewheel","detail"in g&&(m=-1*g.detail),"wheelDelta"in g&&(m=g.wheelDelta),"wheelDeltaY"in g&&(m=g.wheelDeltaY),"wheelDeltaX"in g&&(l=-1*g.wheelDeltaX),"axis"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,"deltaY"in g&&(m=-1*g.deltaY,j=m),"deltaX"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,"mousewheel-line-height");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,"mousewheel-page-height");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?"floor":"ceil"](j/f),l=Math[l>=1?"floor":"ceil"](l/f),m=Math[m>=1?"floor":"ceil"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&"mousewheel"===a.type&&b%120===0}var e,f,g=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],h="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,"mousewheel-line-height",k.getLineHeight(this)),a.data(this,"mousewheel-page-height",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,"mousewheel-line-height"),a.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var c=a(b),d=c["offsetParent"in a.fn?"offsetParent":"parent"]();return d.length||(d=a("body")),parseInt(d.css("fontSize"),10)||parseInt(c.css("fontSize"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})});
+
+// Parse and Format Library
+//http://www.xaprb.com/blog/2005/12/12/javascript-closures-for-runtime-efficiency/
+/*
+ * Copyright (C) 2004 Baron Schwartz <baron at sequent dot org>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by the
+ * Free Software Foundation, version 2.1.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ */
+Date.parseFunctions={count:0};Date.parseRegexes=[];Date.formatFunctions={count:0};Date.prototype.dateFormat=function(b){if(b=="unixtime"){return parseInt(this.getTime()/1000);}if(Date.formatFunctions[b]==null){Date.createNewFormat(b);}var a=Date.formatFunctions[b];return this[a]();};Date.createNewFormat=function(format){var funcName="format"+Date.formatFunctions.count++;Date.formatFunctions[format]=funcName;var code="Date.prototype."+funcName+" = function() {return ";var special=false;var ch="";for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch=="\\"){special=true;}else{if(special){special=false;code+="'"+String.escape(ch)+"' + ";}else{code+=Date.getFormatCode(ch);}}}eval(code.substring(0,code.length-3)+";}");};Date.getFormatCode=function(a){switch(a){case"d":return"String.leftPad(this.getDate(), 2, '0') + ";case"D":return"Date.dayNames[this.getDay()].substring(0, 3) + ";case"j":return"this.getDate() + ";case"l":return"Date.dayNames[this.getDay()] + ";case"S":return"this.getSuffix() + ";case"w":return"this.getDay() + ";case"z":return"this.getDayOfYear() + ";case"W":return"this.getWeekOfYear() + ";case"F":return"Date.monthNames[this.getMonth()] + ";case"m":return"String.leftPad(this.getMonth() + 1, 2, '0') + ";case"M":return"Date.monthNames[this.getMonth()].substring(0, 3) + ";case"n":return"(this.getMonth() + 1) + ";case"t":return"this.getDaysInMonth() + ";case"L":return"(this.isLeapYear() ? 1 : 0) + ";case"Y":return"this.getFullYear() + ";case"y":return"('' + this.getFullYear()).substring(2, 4) + ";case"a":return"(this.getHours() < 12 ? 'am' : 'pm') + ";case"A":return"(this.getHours() < 12 ? 'AM' : 'PM') + ";case"g":return"((this.getHours() %12) ? this.getHours() % 12 : 12) + ";case"G":return"this.getHours() + ";case"h":return"String.leftPad((this.getHours() %12) ? this.getHours() % 12 : 12, 2, '0') + ";case"H":return"String.leftPad(this.getHours(), 2, '0') + ";case"i":return"String.leftPad(this.getMinutes(), 2, '0') + ";case"s":return"String.leftPad(this.getSeconds(), 2, '0') + ";case"O":return"this.getGMTOffset() + ";case"T":return"this.getTimezone() + ";case"Z":return"(this.getTimezoneOffset() * -60) + ";default:return"'"+String.escape(a)+"' + ";}};Date.parseDate=function(a,c){if(c=="unixtime"){return new Date(!isNaN(parseInt(a))?parseInt(a)*1000:0);}if(Date.parseFunctions[c]==null){Date.createParser(c);}var b=Date.parseFunctions[c];return Date[b](a);};Date.createParser=function(format){var funcName="parse"+Date.parseFunctions.count++;var regexNum=Date.parseRegexes.length;var currentGroup=1;Date.parseFunctions[format]=funcName;var code="Date."+funcName+" = function(input) {\nvar y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, z = -1;\nvar d = new Date();\ny = d.getFullYear();\nm = d.getMonth();\nd = d.getDate();\nvar results = input.match(Date.parseRegexes["+regexNum+"]);\nif (results && results.length > 0) {";var regex="";var special=false;var ch="";for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch=="\\"){special=true;}else{if(special){special=false;regex+=String.escape(ch);}else{obj=Date.formatCodeToRegex(ch,currentGroup);currentGroup+=obj.g;regex+=obj.s;if(obj.g&&obj.c){code+=obj.c;}}}}code+="if (y > 0 && z > 0){\nvar doyDate = new Date(y,0);\ndoyDate.setDate(z);\nm = doyDate.getMonth();\nd = doyDate.getDate();\n}";code+="if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n{return new Date(y, m, d, h, i, s);}\nelse if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n{return new Date(y, m, d, h, i);}\nelse if (y > 0 && m >= 0 && d > 0 && h >= 0)\n{return new Date(y, m, d, h);}\nelse if (y > 0 && m >= 0 && d > 0)\n{return new Date(y, m, d);}\nelse if (y > 0 && m >= 0)\n{return new Date(y, m);}\nelse if (y > 0)\n{return new Date(y);}\n}return null;}";Date.parseRegexes[regexNum]=new RegExp("^"+regex+"$");eval(code);};Date.formatCodeToRegex=function(b,a){switch(b){case"D":return{g:0,c:null,s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};case"j":case"d":return{g:1,c:"d = parseInt(results["+a+"], 10);\n",s:"(\\d{1,2})"};case"l":return{g:0,c:null,s:"(?:"+Date.dayNames.join("|")+")"};case"S":return{g:0,c:null,s:"(?:st|nd|rd|th)"};case"w":return{g:0,c:null,s:"\\d"};case"z":return{g:1,c:"z = parseInt(results["+a+"], 10);\n",s:"(\\d{1,3})"};case"W":return{g:0,c:null,s:"(?:\\d{2})"};case"F":return{g:1,c:"m = parseInt(Date.monthNumbers[results["+a+"].substring(0, 3)], 10);\n",s:"("+Date.monthNames.join("|")+")"};case"M":return{g:1,c:"m = parseInt(Date.monthNumbers[results["+a+"]], 10);\n",s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};case"n":case"m":return{g:1,c:"m = parseInt(results["+a+"], 10) - 1;\n",s:"(\\d{1,2})"};case"t":return{g:0,c:null,s:"\\d{1,2}"};case"L":return{g:0,c:null,s:"(?:1|0)"};case"Y":return{g:1,c:"y = parseInt(results["+a+"], 10);\n",s:"(\\d{4})"};case"y":return{g:1,c:"var ty = parseInt(results["+a+"], 10);\ny = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"};case"a":return{g:1,c:"if (results["+a+"] == 'am') {\nif (h == 12) { h = 0; }\n} else { if (h < 12) { h += 12; }}",s:"(am|pm)"};case"A":return{g:1,c:"if (results["+a+"] == 'AM') {\nif (h == 12) { h = 0; }\n} else { if (h < 12) { h += 12; }}",s:"(AM|PM)"};case"g":case"G":case"h":case"H":return{g:1,c:"h = parseInt(results["+a+"], 10);\n",s:"(\\d{1,2})"};case"i":return{g:1,c:"i = parseInt(results["+a+"], 10);\n",s:"(\\d{2})"};case"s":return{g:1,c:"s = parseInt(results["+a+"], 10);\n",s:"(\\d{2})"};case"O":return{g:0,c:null,s:"[+-]\\d{4}"};case"T":return{g:0,c:null,s:"[A-Z]{3}"};case"Z":return{g:0,c:null,s:"[+-]\\d{1,5}"};default:return{g:0,c:null,s:String.escape(b)};}};Date.prototype.getTimezone=function(){return this.toString().replace(/^.*? ([A-Z]{3}) [0-9]{4}.*$/,"$1").replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/,"$1$2$3");};Date.prototype.getGMTOffset=function(){return(this.getTimezoneOffset()>0?"-":"+")+String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset())/60),2,"0")+String.leftPad(Math.abs(this.getTimezoneOffset())%60,2,"0");};Date.prototype.getDayOfYear=function(){var a=0;Date.daysInMonth[1]=this.isLeapYear()?29:28;for(var b=0;b<this.getMonth();++b){a+=Date.daysInMonth[b];}return a+this.getDate();};Date.prototype.getWeekOfYear=function(){var b=this.getDayOfYear()+(4-this.getDay());var a=new Date(this.getFullYear(),0,1);var c=(7-a.getDay()+4);return String.leftPad(Math.ceil((b-c)/7)+1,2,"0");};Date.prototype.isLeapYear=function(){var a=this.getFullYear();return((a&3)==0&&(a%100||(a%400==0&&a)));};Date.prototype.getFirstDayOfMonth=function(){var a=(this.getDay()-(this.getDate()-1))%7;return(a<0)?(a+7):a;};Date.prototype.getLastDayOfMonth=function(){var a=(this.getDay()+(Date.daysInMonth[this.getMonth()]-this.getDate()))%7;return(a<0)?(a+7):a;};Date.prototype.getDaysInMonth=function(){Date.daysInMonth[1]=this.isLeapYear()?29:28;return Date.daysInMonth[this.getMonth()];};Date.prototype.getSuffix=function(){switch(this.getDate()){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th";}};String.escape=function(a){return a.replace(/('|\\)/g,"\\$1");};String.leftPad=function(d,b,c){var a=new String(d);if(c==null){c=" ";}while(a.length<b){a=c+a;}return a;};Date.daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31];Date.monthNames=["January","February","March","April","May","June","July","August","September","October","November","December"];Date.dayNames=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];Date.y2kYear=50;Date.monthNumbers={Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11};Date.patterns={ISO8601LongPattern:"Y-m-d H:i:s",ISO8601ShortPattern:"Y-m-d",ShortDatePattern:"n/j/Y",LongDatePattern:"l, F d, Y",FullDateTimePattern:"l, F d, Y g:i:s A",MonthDayPattern:"F d",ShortTimePattern:"g:i A",LongTimePattern:"g:i:s A",SortableDateTimePattern:"Y-m-d\\TH:i:s",UniversalSortableDateTimePattern:"Y-m-d H:i:sO",YearMonthPattern:"F, Y"};
+}());
diff --git a/library/fancybox/blank.gif b/library/fancybox/blank.gif
deleted file mode 100644
index 35d42e808..000000000
--- a/library/fancybox/blank.gif
+++ /dev/null
Binary files differ
diff --git a/library/fancybox/fancy_close.png b/library/fancybox/fancy_close.png
deleted file mode 100644
index 07035307a..000000000
--- a/library/fancybox/fancy_close.png
+++ /dev/null
Binary files differ
diff --git a/library/fancybox/fancy_loading.png b/library/fancybox/fancy_loading.png
deleted file mode 100644
index 250301796..000000000
--- a/library/fancybox/fancy_loading.png
+++ /dev/null
Binary files differ
diff --git a/library/fancybox/fancy_nav_left.png b/library/fancybox/fancy_nav_left.png
deleted file mode 100644
index ebaa6a4fd..000000000
--- a/library/fancybox/fancy_nav_left.png
+++ /dev/null
Binary files differ
diff --git a/library/fancybox/fancy_nav_right.png b/library/fancybox/fancy_nav_right.png
deleted file mode 100644
index 873294e96..000000000
--- a/library/fancybox/fancy_nav_right.png
+++ /dev/null
Binary files differ
diff --git a/library/fancybox/fancy_shadow_e.png b/library/fancybox/fancy_shadow_e.png
deleted file mode 100644
index 2eda08936..000000000
--- a/library/fancybox/fancy_shadow_e.png
+++ /dev/null
Binary files differ
diff --git a/library/fancybox/fancy_shadow_n.png b/library/fancybox/fancy_shadow_n.png
deleted file mode 100644
index 69aa10e23..000000000
--- a/library/fancybox/fancy_shadow_n.png
+++ /dev/null
Binary files differ
diff --git a/library/fancybox/fancy_shadow_ne.png b/library/fancybox/fancy_shadow_ne.png
deleted file mode 100644
index 79f6980a3..000000000
--- a/library/fancybox/fancy_shadow_ne.png
+++ /dev/null
Binary files differ
diff --git a/library/fancybox/fancy_shadow_nw.png b/library/fancybox/fancy_shadow_nw.png
deleted file mode 100644
index 7182cd938..000000000
--- a/library/fancybox/fancy_shadow_nw.png
+++ /dev/null
Binary files differ
diff --git a/library/fancybox/fancy_shadow_s.png b/library/fancybox/fancy_shadow_s.png
deleted file mode 100644
index d8858bfb7..000000000
--- a/library/fancybox/fancy_shadow_s.png
+++ /dev/null
Binary files differ
diff --git a/library/fancybox/fancy_shadow_se.png b/library/fancybox/fancy_shadow_se.png
deleted file mode 100644
index 541e3ffd3..000000000
--- a/library/fancybox/fancy_shadow_se.png
+++ /dev/null
Binary files differ
diff --git a/library/fancybox/fancy_shadow_sw.png b/library/fancybox/fancy_shadow_sw.png
deleted file mode 100644
index b451689fa..000000000
--- a/library/fancybox/fancy_shadow_sw.png
+++ /dev/null
Binary files differ
diff --git a/library/fancybox/fancy_shadow_w.png b/library/fancybox/fancy_shadow_w.png
deleted file mode 100644
index 8a4e4a887..000000000
--- a/library/fancybox/fancy_shadow_w.png
+++ /dev/null
Binary files differ
diff --git a/library/fancybox/fancy_title_left.png b/library/fancybox/fancy_title_left.png
deleted file mode 100644
index 6049223d1..000000000
--- a/library/fancybox/fancy_title_left.png
+++ /dev/null
Binary files differ
diff --git a/library/fancybox/fancy_title_main.png b/library/fancybox/fancy_title_main.png
deleted file mode 100644
index 8044271f2..000000000
--- a/library/fancybox/fancy_title_main.png
+++ /dev/null
Binary files differ
diff --git a/library/fancybox/fancy_title_over.png b/library/fancybox/fancy_title_over.png
deleted file mode 100644
index d9f458f4b..000000000
--- a/library/fancybox/fancy_title_over.png
+++ /dev/null
Binary files differ
diff --git a/library/fancybox/fancy_title_right.png b/library/fancybox/fancy_title_right.png
deleted file mode 100644
index e36d9db2a..000000000
--- a/library/fancybox/fancy_title_right.png
+++ /dev/null
Binary files differ
diff --git a/library/fancybox/fancybox-x.png b/library/fancybox/fancybox-x.png
deleted file mode 100644
index c2130f869..000000000
--- a/library/fancybox/fancybox-x.png
+++ /dev/null
Binary files differ
diff --git a/library/fancybox/fancybox-y.png b/library/fancybox/fancybox-y.png
deleted file mode 100644
index 7ef399b99..000000000
--- a/library/fancybox/fancybox-y.png
+++ /dev/null
Binary files differ
diff --git a/library/fancybox/fancybox.png b/library/fancybox/fancybox.png
deleted file mode 100644
index 65e14f68f..000000000
--- a/library/fancybox/fancybox.png
+++ /dev/null
Binary files differ
diff --git a/library/fancybox/jquery.easing-1.3.pack.js b/library/fancybox/jquery.easing-1.3.pack.js
deleted file mode 100644
index 9028179e7..000000000
--- a/library/fancybox/jquery.easing-1.3.pack.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
- *
- * Uses the built in easing capabilities added In jQuery 1.1
- * to offer multiple easing options
- *
- * TERMS OF USE - jQuery Easing
- *
- * Open source under the BSD License.
- *
- * Copyright © 2008 George McGinley Smith
- * 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 the author nor the names of 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.
- *
-*/
-
-// t: current time, b: begInnIng value, c: change In value, d: duration
-eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('h.i[\'1a\']=h.i[\'z\'];h.O(h.i,{y:\'D\',z:9(x,t,b,c,d){6 h.i[h.i.y](x,t,b,c,d)},17:9(x,t,b,c,d){6 c*(t/=d)*t+b},D:9(x,t,b,c,d){6-c*(t/=d)*(t-2)+b},13:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t+b;6-c/2*((--t)*(t-2)-1)+b},X:9(x,t,b,c,d){6 c*(t/=d)*t*t+b},U:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t+1)+b},R:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t+b;6 c/2*((t-=2)*t*t+2)+b},N:9(x,t,b,c,d){6 c*(t/=d)*t*t*t+b},M:9(x,t,b,c,d){6-c*((t=t/d-1)*t*t*t-1)+b},L:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t+b;6-c/2*((t-=2)*t*t*t-2)+b},K:9(x,t,b,c,d){6 c*(t/=d)*t*t*t*t+b},J:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t*t*t+1)+b},I:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t*t+b;6 c/2*((t-=2)*t*t*t*t+2)+b},G:9(x,t,b,c,d){6-c*8.C(t/d*(8.g/2))+c+b},15:9(x,t,b,c,d){6 c*8.n(t/d*(8.g/2))+b},12:9(x,t,b,c,d){6-c/2*(8.C(8.g*t/d)-1)+b},Z:9(x,t,b,c,d){6(t==0)?b:c*8.j(2,10*(t/d-1))+b},Y:9(x,t,b,c,d){6(t==d)?b+c:c*(-8.j(2,-10*t/d)+1)+b},W:9(x,t,b,c,d){e(t==0)6 b;e(t==d)6 b+c;e((t/=d/2)<1)6 c/2*8.j(2,10*(t-1))+b;6 c/2*(-8.j(2,-10*--t)+2)+b},V:9(x,t,b,c,d){6-c*(8.o(1-(t/=d)*t)-1)+b},S:9(x,t,b,c,d){6 c*8.o(1-(t=t/d-1)*t)+b},Q:9(x,t,b,c,d){e((t/=d/2)<1)6-c/2*(8.o(1-t*t)-1)+b;6 c/2*(8.o(1-(t-=2)*t)+1)+b},P:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6-(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b},H:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6 a*8.j(2,-10*t)*8.n((t*d-s)*(2*8.g)/p)+c+b},T:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d/2)==2)6 b+c;e(!p)p=d*(.3*1.5);e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);e(t<1)6-.5*(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b;6 a*8.j(2,-10*(t-=1))*8.n((t*d-s)*(2*8.g)/p)*.5+c+b},F:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*(t/=d)*t*((s+1)*t-s)+b},E:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*((t=t/d-1)*t*((s+1)*t+s)+1)+b},16:9(x,t,b,c,d,s){e(s==u)s=1.l;e((t/=d/2)<1)6 c/2*(t*t*(((s*=(1.B))+1)*t-s))+b;6 c/2*((t-=2)*t*(((s*=(1.B))+1)*t+s)+2)+b},A:9(x,t,b,c,d){6 c-h.i.v(x,d-t,0,c,d)+b},v:9(x,t,b,c,d){e((t/=d)<(1/2.k)){6 c*(7.q*t*t)+b}m e(t<(2/2.k)){6 c*(7.q*(t-=(1.5/2.k))*t+.k)+b}m e(t<(2.5/2.k)){6 c*(7.q*(t-=(2.14/2.k))*t+.11)+b}m{6 c*(7.q*(t-=(2.18/2.k))*t+.19)+b}},1b:9(x,t,b,c,d){e(t<d/2)6 h.i.A(x,t*2,0,c,d)*.5+b;6 h.i.v(x,t*2-d,0,c,d)*.5+c*.5+b}});',62,74,'||||||return||Math|function|||||if|var|PI|jQuery|easing|pow|75|70158|else|sin|sqrt||5625|asin|||undefined|easeOutBounce|abs||def|swing|easeInBounce|525|cos|easeOutQuad|easeOutBack|easeInBack|easeInSine|easeOutElastic|easeInOutQuint|easeOutQuint|easeInQuint|easeInOutQuart|easeOutQuart|easeInQuart|extend|easeInElastic|easeInOutCirc|easeInOutCubic|easeOutCirc|easeInOutElastic|easeOutCubic|easeInCirc|easeInOutExpo|easeInCubic|easeOutExpo|easeInExpo||9375|easeInOutSine|easeInOutQuad|25|easeOutSine|easeInOutBack|easeInQuad|625|984375|jswing|easeInOutBounce'.split('|'),0,{}))
-
-/*
- *
- * TERMS OF USE - EASING EQUATIONS
- *
- * Open source under the BSD License.
- *
- * Copyright © 2001 Robert Penner
- * 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 the author nor the names of 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.
- *
- */
diff --git a/library/fancybox/jquery.fancybox-1.3.4.css b/library/fancybox/jquery.fancybox-1.3.4.css
deleted file mode 100644
index 6f53d8f4a..000000000
--- a/library/fancybox/jquery.fancybox-1.3.4.css
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
- * FancyBox - jQuery Plugin
- * Simple and fancy lightbox alternative
- *
- * Examples and documentation at: http://fancybox.net
- *
- * Copyright (c) 2008 - 2010 Janis Skarnelis
- * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated.
- *
- * Version: 1.3.4 (11/11/2010)
- * Requires: jQuery v1.3+
- *
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- */
-
-#fancybox-loading {
- position: fixed;
- top: 50%;
- left: 50%;
- width: 40px;
- height: 40px;
- margin-top: -20px;
- margin-left: -20px;
- cursor: pointer;
- overflow: hidden;
- z-index: 1104;
- display: none;
-}
-
-#fancybox-loading div {
- position: absolute;
- top: 0;
- left: 0;
- width: 40px;
- height: 480px;
- background-image: url('fancybox.png');
-}
-
-#fancybox-overlay {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- z-index: 1100;
- display: none;
-}
-
-#fancybox-tmp {
- padding: 0;
- margin: 0;
- border: 0;
- overflow: auto;
- display: none;
-}
-
-#fancybox-wrap {
- position: absolute;
- top: 0;
- left: 0;
- padding: 20px;
- z-index: 1101;
- outline: none;
- display: none;
-}
-
-#fancybox-outer {
- position: relative;
- width: 100%;
- height: 100%;
- background: #fff;
-}
-
-#fancybox-content {
- width: 0;
- height: 0;
- padding: 0;
- outline: none;
- position: relative;
- overflow: hidden;
- z-index: 1102;
- border: 0px solid #fff;
-}
-
-#fancybox-hide-sel-frame {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background: transparent;
- z-index: 1101;
-}
-
-#fancybox-close {
- position: absolute;
- top: -15px;
- right: -15px;
- width: 30px;
- height: 30px;
- background: transparent url('fancybox.png') -40px 0px;
- cursor: pointer;
- z-index: 1103;
- display: none;
-}
-
-#fancybox-error {
- color: #444;
- font: normal 12px/20px Arial;
- padding: 14px;
- margin: 0;
-}
-
-#fancybox-img {
- width: 100%;
- height: 100%;
- padding: 0;
- margin: 0;
- border: none;
- outline: none;
- line-height: 0;
- vertical-align: top;
-}
-
-#fancybox-frame {
- width: 100%;
- height: 100%;
- border: none;
- display: block;
-}
-
-#fancybox-left, #fancybox-right {
- position: absolute;
- bottom: 0px;
- height: 100%;
- width: 35%;
- cursor: pointer;
- outline: none;
- background: transparent url('blank.gif');
- z-index: 1102;
- display: none;
-}
-
-#fancybox-left {
- left: 0px;
-}
-
-#fancybox-right {
- right: 0px;
-}
-
-#fancybox-left-ico, #fancybox-right-ico {
- position: absolute;
- top: 50%;
- left: -9999px;
- width: 30px;
- height: 30px;
- margin-top: -15px;
- cursor: pointer;
- z-index: 1102;
- display: block;
-}
-
-#fancybox-left-ico {
- background-image: url('fancybox.png');
- background-position: -40px -30px;
-}
-
-#fancybox-right-ico {
- background-image: url('fancybox.png');
- background-position: -40px -60px;
-}
-
-#fancybox-left:hover, #fancybox-right:hover {
- visibility: visible; /* IE6 */
-}
-
-#fancybox-left:hover span {
- left: 20px;
-}
-
-#fancybox-right:hover span {
- left: auto;
- right: 20px;
-}
-
-.fancybox-bg {
- position: absolute;
- padding: 0;
- margin: 0;
- border: 0;
- width: 20px;
- height: 20px;
- z-index: 1001;
-}
-
-#fancybox-bg-n {
- top: -20px;
- left: 0;
- width: 100%;
- background-image: url('fancybox-x.png');
-}
-
-#fancybox-bg-ne {
- top: -20px;
- right: -20px;
- background-image: url('fancybox.png');
- background-position: -40px -162px;
-}
-
-#fancybox-bg-e {
- top: 0;
- right: -20px;
- height: 100%;
- background-image: url('fancybox-y.png');
- background-position: -20px 0px;
-}
-
-#fancybox-bg-se {
- bottom: -20px;
- right: -20px;
- background-image: url('fancybox.png');
- background-position: -40px -182px;
-}
-
-#fancybox-bg-s {
- bottom: -20px;
- left: 0;
- width: 100%;
- background-image: url('fancybox-x.png');
- background-position: 0px -20px;
-}
-
-#fancybox-bg-sw {
- bottom: -20px;
- left: -20px;
- background-image: url('fancybox.png');
- background-position: -40px -142px;
-}
-
-#fancybox-bg-w {
- top: 0;
- left: -20px;
- height: 100%;
- background-image: url('fancybox-y.png');
-}
-
-#fancybox-bg-nw {
- top: -20px;
- left: -20px;
- background-image: url('fancybox.png');
- background-position: -40px -122px;
-}
-
-#fancybox-title {
- font-family: Helvetica;
- font-size: 12px;
- z-index: 1102;
-}
-
-.fancybox-title-inside {
- padding-bottom: 10px;
- text-align: center;
- color: #333;
- background: #fff;
- position: relative;
-}
-
-.fancybox-title-outside {
- padding-top: 10px;
- color: #fff;
-}
-
-.fancybox-title-over {
- position: absolute;
- bottom: 0;
- left: 0;
- color: #FFF;
- text-align: left;
-}
-
-#fancybox-title-over {
- padding: 10px;
- background-image: url('fancy_title_over.png');
- display: block;
-}
-
-.fancybox-title-float {
- position: absolute;
- left: 0;
- bottom: -20px;
- height: 32px;
-}
-
-#fancybox-title-float-wrap {
- border: none;
- border-collapse: collapse;
- width: auto;
-}
-
-#fancybox-title-float-wrap td {
- border: none;
- white-space: nowrap;
-}
-
-#fancybox-title-float-left {
- padding: 0 0 0 15px;
- background: url('fancybox.png') -40px -90px no-repeat;
-}
-
-#fancybox-title-float-main {
- color: #FFF;
- line-height: 29px;
- font-weight: bold;
- padding: 0 0 3px 0;
- background: url('fancybox-x.png') 0px -40px;
-}
-
-#fancybox-title-float-right {
- padding: 0 0 0 15px;
- background: url('fancybox.png') -55px -90px no-repeat;
-}
-
-/* IE6 */
-
-.fancybox-ie6 #fancybox-close { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_close.png', sizingMethod='scale'); }
-
-.fancybox-ie6 #fancybox-left-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_left.png', sizingMethod='scale'); }
-.fancybox-ie6 #fancybox-right-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_right.png', sizingMethod='scale'); }
-
-.fancybox-ie6 #fancybox-title-over { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_over.png', sizingMethod='scale'); zoom: 1; }
-.fancybox-ie6 #fancybox-title-float-left { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_left.png', sizingMethod='scale'); }
-.fancybox-ie6 #fancybox-title-float-main { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_main.png', sizingMethod='scale'); }
-.fancybox-ie6 #fancybox-title-float-right { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_right.png', sizingMethod='scale'); }
-
-.fancybox-ie6 #fancybox-bg-w, .fancybox-ie6 #fancybox-bg-e, .fancybox-ie6 #fancybox-left, .fancybox-ie6 #fancybox-right, #fancybox-hide-sel-frame {
- height: expression(this.parentNode.clientHeight + "px");
-}
-
-#fancybox-loading.fancybox-ie6 {
- position: absolute; margin-top: 0;
- top: expression( (-20 + (document.documentElement.clientHeight ? document.documentElement.clientHeight/2 : document.body.clientHeight/2 ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop )) + 'px');
-}
-
-#fancybox-loading.fancybox-ie6 div { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_loading.png', sizingMethod='scale'); }
-
-/* IE6, IE7, IE8 */
-
-.fancybox-ie .fancybox-bg { background: transparent !important; }
-
-.fancybox-ie #fancybox-bg-n { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_n.png', sizingMethod='scale'); }
-.fancybox-ie #fancybox-bg-ne { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_ne.png', sizingMethod='scale'); }
-.fancybox-ie #fancybox-bg-e { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_e.png', sizingMethod='scale'); }
-.fancybox-ie #fancybox-bg-se { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_se.png', sizingMethod='scale'); }
-.fancybox-ie #fancybox-bg-s { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_s.png', sizingMethod='scale'); }
-.fancybox-ie #fancybox-bg-sw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_sw.png', sizingMethod='scale'); }
-.fancybox-ie #fancybox-bg-w { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_w.png', sizingMethod='scale'); }
-.fancybox-ie #fancybox-bg-nw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_nw.png', sizingMethod='scale'); } \ No newline at end of file
diff --git a/library/fancybox/jquery.fancybox-1.3.4.js b/library/fancybox/jquery.fancybox-1.3.4.js
deleted file mode 100644
index 43e2cd56b..000000000
--- a/library/fancybox/jquery.fancybox-1.3.4.js
+++ /dev/null
@@ -1,1157 +0,0 @@
-/*
- * FancyBox - jQuery Plugin
- * Simple and fancy lightbox alternative
- *
- * Examples and documentation at: http://fancybox.net
- *
- * Copyright (c) 2008 - 2010 Janis Skarnelis
- * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated.
- *
- * Version: 1.3.4 (11/11/2010)
- * Requires: jQuery v1.3+
- *
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- */
-
-;(function($) {
- var tmp, loading, overlay, wrap, outer, content, close, title, nav_left, nav_right,
-
- selectedIndex = 0, selectedOpts = {}, selectedArray = [], currentIndex = 0, currentOpts = {}, currentArray = [],
-
- ajaxLoader = null, imgPreloader = new Image(), imgRegExp = /\.(jpg|gif|png|bmp|jpeg)(.*)?$/i, swfRegExp = /[^\.]\.(swf)\s*$/i,
-
- loadingTimer, loadingFrame = 1,
-
- titleHeight = 0, titleStr = '', start_pos, final_pos, busy = false, fx = $.extend($('<div/>')[0], { prop: 0 }),
-
- isIE6 = false,
-// $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest,
-
- /*
- * Private methods
- */
-
- _abort = function() {
- loading.hide();
-
- imgPreloader.onerror = imgPreloader.onload = null;
-
- if (ajaxLoader) {
- ajaxLoader.abort();
- }
-
- tmp.empty();
- },
-
- _error = function() {
- if (false === selectedOpts.onError(selectedArray, selectedIndex, selectedOpts)) {
- loading.hide();
- busy = false;
- return;
- }
-
- selectedOpts.titleShow = false;
-
- selectedOpts.width = 'auto';
- selectedOpts.height = 'auto';
-
- tmp.html( '<p id="fancybox-error">The requested content cannot be loaded.<br />Please try again later.</p>' );
-
- _process_inline();
- },
-
- _start = function() {
- var obj = selectedArray[ selectedIndex ],
- href,
- type,
- title,
- str,
- emb,
- ret;
-
- _abort();
-
- selectedOpts = $.extend({}, $.fn.fancybox.defaults, (typeof $(obj).data('fancybox') == 'undefined' ? selectedOpts : $(obj).data('fancybox')));
-
- ret = selectedOpts.onStart(selectedArray, selectedIndex, selectedOpts);
-
- if (ret === false) {
- busy = false;
- return;
- } else if (typeof ret == 'object') {
- selectedOpts = $.extend(selectedOpts, ret);
- }
-
- title = selectedOpts.title || (obj.nodeName ? $(obj).attr('title') : obj.title) || '';
-
- if (obj.nodeName && !selectedOpts.orig) {
- selectedOpts.orig = $(obj).children("img:first").length ? $(obj).children("img:first") : $(obj);
- }
-
- if (title === '' && selectedOpts.orig && selectedOpts.titleFromAlt) {
- title = selectedOpts.orig.attr('alt');
- }
-
- href = selectedOpts.href || (obj.nodeName ? $(obj).attr('href') : obj.href) || null;
-
- if ((/^(?:javascript)/i).test(href) || href == '#') {
- href = null;
- }
-
- if (selectedOpts.type) {
- type = selectedOpts.type;
-
- if (!href) {
- href = selectedOpts.content;
- }
-
- } else if (selectedOpts.content) {
- type = 'html';
-
- } else if (href) {
- if (href.match(imgRegExp)) {
- type = 'image';
-
- } else if (href.match(swfRegExp)) {
- type = 'swf';
-
- } else if ($(obj).hasClass("iframe")) {
- type = 'iframe';
-
- } else if (href.indexOf("#") === 0) {
- type = 'inline';
-
- } else {
- type = 'ajax';
- }
- }
-
- if (!type) {
- _error();
- return;
- }
-
- if (type == 'inline') {
- obj = href.substr(href.indexOf("#"));
- type = $(obj).length > 0 ? 'inline' : 'ajax';
- }
-
- selectedOpts.type = type;
- selectedOpts.href = href;
- selectedOpts.title = title;
-
- if (selectedOpts.autoDimensions) {
- if (selectedOpts.type == 'html' || selectedOpts.type == 'inline' || selectedOpts.type == 'ajax') {
- selectedOpts.width = 'auto';
- selectedOpts.height = 'auto';
- } else {
- selectedOpts.autoDimensions = false;
- }
- }
-
- if (selectedOpts.modal) {
- selectedOpts.overlayShow = true;
- selectedOpts.hideOnOverlayClick = false;
- selectedOpts.hideOnContentClick = false;
- selectedOpts.enableEscapeButton = false;
- selectedOpts.showCloseButton = false;
- }
-
- selectedOpts.padding = parseInt(selectedOpts.padding, 10);
- selectedOpts.margin = parseInt(selectedOpts.margin, 10);
-
- tmp.css('padding', (selectedOpts.padding + selectedOpts.margin));
-
- $('.fancybox-inline-tmp').unbind('fancybox-cancel').bind('fancybox-change', function() {
- $(this).replaceWith(content.children());
- });
-
- switch (type) {
- case 'html' :
- tmp.html( selectedOpts.content );
- _process_inline();
- break;
-
- case 'inline' :
- if ( $(obj).parent().is('#fancybox-content') === true) {
- busy = false;
- return;
- }
-
- $('<div class="fancybox-inline-tmp" />')
- .hide()
- .insertBefore( $(obj) )
- .bind('fancybox-cleanup', function() {
- $(this).replaceWith(content.children());
- }).bind('fancybox-cancel', function() {
- $(this).replaceWith(tmp.children());
- });
-
- $(obj).appendTo(tmp);
-
- _process_inline();
- break;
-
- case 'image':
- busy = false;
-
- $.fancybox.showActivity();
-
- imgPreloader = new Image();
-
- imgPreloader.onerror = function() {
- _error();
- };
-
- imgPreloader.onload = function() {
- busy = true;
-
- imgPreloader.onerror = imgPreloader.onload = null;
-
- _process_image();
- };
-
- imgPreloader.src = href;
- break;
-
- case 'swf':
- selectedOpts.scrolling = 'no';
-
- str = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' + selectedOpts.width + '" height="' + selectedOpts.height + '"><param name="movie" value="' + href + '"></param>';
- emb = '';
-
- $.each(selectedOpts.swf, function(name, val) {
- str += '<param name="' + name + '" value="' + val + '"></param>';
- emb += ' ' + name + '="' + val + '"';
- });
-
- str += '<embed src="' + href + '" type="application/x-shockwave-flash" width="' + selectedOpts.width + '" height="' + selectedOpts.height + '"' + emb + '></embed></object>';
-
- tmp.html(str);
-
- _process_inline();
- break;
-
- case 'ajax':
- busy = false;
-
- $.fancybox.showActivity();
-
- selectedOpts.ajax.win = selectedOpts.ajax.success;
-
- ajaxLoader = $.ajax($.extend({}, selectedOpts.ajax, {
- url : href,
- data : selectedOpts.ajax.data || {},
- error : function(XMLHttpRequest, textStatus, errorThrown) {
- if ( XMLHttpRequest.status > 0 ) {
- _error();
- }
- },
- success : function(data, textStatus, XMLHttpRequest) {
- var o = typeof XMLHttpRequest == 'object' ? XMLHttpRequest : ajaxLoader;
- if (o.status == 200) {
- if ( typeof selectedOpts.ajax.win == 'function' ) {
- ret = selectedOpts.ajax.win(href, data, textStatus, XMLHttpRequest);
-
- if (ret === false) {
- loading.hide();
- return;
- } else if (typeof ret == 'string' || typeof ret == 'object') {
- data = ret;
- }
- }
-
- tmp.html( data );
- _process_inline();
- }
- }
- }));
-
- break;
-
- case 'iframe':
- _show();
- break;
- }
- },
-
- _process_inline = function() {
- var
- w = selectedOpts.width,
- h = selectedOpts.height;
-
- if (w.toString().indexOf('%') > -1) {
- w = parseInt( ($(window).width() - (selectedOpts.margin * 2)) * parseFloat(w) / 100, 10) + 'px';
-
- } else {
- w = w == 'auto' ? 'auto' : w + 'px';
- }
-
- if (h.toString().indexOf('%') > -1) {
- h = parseInt( ($(window).height() - (selectedOpts.margin * 2)) * parseFloat(h) / 100, 10) + 'px';
-
- } else {
- h = h == 'auto' ? 'auto' : h + 'px';
- }
-
- tmp.wrapInner('<div style="width:' + w + ';height:' + h + ';overflow: ' + (selectedOpts.scrolling == 'auto' ? 'auto' : (selectedOpts.scrolling == 'yes' ? 'scroll' : 'hidden')) + ';position:relative;"></div>');
-
- selectedOpts.width = tmp.width();
- selectedOpts.height = tmp.height();
-
- _show();
- },
-
- _process_image = function() {
- selectedOpts.width = imgPreloader.width;
- selectedOpts.height = imgPreloader.height;
-
- $("<img />").attr({
- 'id' : 'fancybox-img',
- 'src' : imgPreloader.src,
- 'alt' : selectedOpts.title
- }).appendTo( tmp );
-
- _show();
- },
-
- _show = function() {
- var pos, equal;
-
- loading.hide();
-
- if (wrap.is(":visible") && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) {
- $.event.trigger('fancybox-cancel');
-
- busy = false;
- return;
- }
-
- busy = true;
-
- $(content.add( overlay )).unbind();
-
- $(window).unbind("resize.fb scroll.fb");
- $(document).unbind('keydown.fb');
-
- if (wrap.is(":visible") && currentOpts.titlePosition !== 'outside') {
- wrap.css('height', wrap.height());
- }
-
- currentArray = selectedArray;
- currentIndex = selectedIndex;
- currentOpts = selectedOpts;
-
- if (currentOpts.overlayShow) {
- overlay.css({
- 'background-color' : currentOpts.overlayColor,
- 'opacity' : currentOpts.overlayOpacity,
- 'cursor' : currentOpts.hideOnOverlayClick ? 'pointer' : 'auto',
- 'height' : $(document).height()
- });
-
- if (!overlay.is(':visible')) {
- if (isIE6) {
- $('select:not(#fancybox-tmp select)').filter(function() {
- return this.style.visibility !== 'hidden';
- }).css({'visibility' : 'hidden'}).one('fancybox-cleanup', function() {
- this.style.visibility = 'inherit';
- });
- }
-
- overlay.show();
- }
- } else {
- overlay.hide();
- }
-
- final_pos = _get_zoom_to();
-
- _process_title();
-
- if (wrap.is(":visible")) {
- $( close.add( nav_left ).add( nav_right ) ).hide();
-
- pos = wrap.position(),
-
- start_pos = {
- top : pos.top,
- left : pos.left,
- width : wrap.width(),
- height : wrap.height()
- };
-
- equal = (start_pos.width == final_pos.width && start_pos.height == final_pos.height);
-
- content.fadeTo(currentOpts.changeFade, 0.3, function() {
- var finish_resizing = function() {
- content.html( tmp.contents() ).fadeTo(currentOpts.changeFade, 1, _finish);
- };
-
- $.event.trigger('fancybox-change');
-
- content
- .empty()
- .removeAttr('filter')
- .css({
- 'border-width' : currentOpts.padding,
- 'width' : final_pos.width - currentOpts.padding * 2,
- 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2
- });
-
- if (equal) {
- finish_resizing();
-
- } else {
- fx.prop = 0;
-
- $(fx).animate({prop: 1}, {
- duration : currentOpts.changeSpeed,
- easing : currentOpts.easingChange,
- step : _draw,
- complete : finish_resizing
- });
- }
- });
-
- return;
- }
-
- wrap.removeAttr("style");
-
- content.css('border-width', currentOpts.padding);
-
- if (currentOpts.transitionIn == 'elastic') {
- start_pos = _get_zoom_from();
-
- content.html( tmp.contents() );
-
- wrap.show();
-
- if (currentOpts.opacity) {
- final_pos.opacity = 0;
- }
-
- fx.prop = 0;
-
- $(fx).animate({prop: 1}, {
- duration : currentOpts.speedIn,
- easing : currentOpts.easingIn,
- step : _draw,
- complete : _finish
- });
-
- return;
- }
-
- if (currentOpts.titlePosition == 'inside' && titleHeight > 0) {
- title.show();
- }
-
- content
- .css({
- 'width' : final_pos.width - currentOpts.padding * 2,
- 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2
- })
- .html( tmp.contents() );
-
- wrap
- .css(final_pos)
- .fadeIn( currentOpts.transitionIn == 'none' ? 0 : currentOpts.speedIn, _finish );
- },
-
- _format_title = function(title) {
- if (title && title.length) {
- if (currentOpts.titlePosition == 'float') {
- return '<table id="fancybox-title-float-wrap" cellpadding="0" cellspacing="0"><tr><td id="fancybox-title-float-left"></td><td id="fancybox-title-float-main">' + title + '</td><td id="fancybox-title-float-right"></td></tr></table>';
- }
-
- return '<div id="fancybox-title-' + currentOpts.titlePosition + '">' + title + '</div>';
- }
-
- return false;
- },
-
- _process_title = function() {
- titleStr = currentOpts.title || '';
- titleHeight = 0;
-
- title
- .empty()
- .removeAttr('style')
- .removeClass();
-
- if (currentOpts.titleShow === false) {
- title.hide();
- return;
- }
-
- titleStr = $.isFunction(currentOpts.titleFormat) ? currentOpts.titleFormat(titleStr, currentArray, currentIndex, currentOpts) : _format_title(titleStr);
-
- if (!titleStr || titleStr === '') {
- title.hide();
- return;
- }
-
- title
- .addClass('fancybox-title-' + currentOpts.titlePosition)
- .html( titleStr )
- .appendTo( 'body' )
- .show();
-
- switch (currentOpts.titlePosition) {
- case 'inside':
- title
- .css({
- 'width' : final_pos.width - (currentOpts.padding * 2),
- 'marginLeft' : currentOpts.padding,
- 'marginRight' : currentOpts.padding
- });
-
- titleHeight = title.outerHeight(true);
-
- title.appendTo( outer );
-
- final_pos.height += titleHeight;
- break;
-
- case 'over':
- title
- .css({
- 'marginLeft' : currentOpts.padding,
- 'width' : final_pos.width - (currentOpts.padding * 2),
- 'bottom' : currentOpts.padding
- })
- .appendTo( outer );
- break;
-
- case 'float':
- title
- .css('left', parseInt((title.width() - final_pos.width - 40)/ 2, 10) * -1)
- .appendTo( wrap );
- break;
-
- default:
- title
- .css({
- 'width' : final_pos.width - (currentOpts.padding * 2),
- 'paddingLeft' : currentOpts.padding,
- 'paddingRight' : currentOpts.padding
- })
- .appendTo( wrap );
- break;
- }
-
- title.hide();
- },
-
- _set_navigation = function() {
- if (currentOpts.enableEscapeButton || currentOpts.enableKeyboardNav) {
- $(document).bind('keydown.fb', function(e) {
- if (e.keyCode == 27 && currentOpts.enableEscapeButton) {
- e.preventDefault();
- $.fancybox.close();
-
- } else if ((e.keyCode == 37 || e.keyCode == 39) && currentOpts.enableKeyboardNav && e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA' && e.target.tagName !== 'SELECT') {
- e.preventDefault();
- $.fancybox[ e.keyCode == 37 ? 'prev' : 'next']();
- }
- });
- }
-
- if (!currentOpts.showNavArrows) {
- nav_left.hide();
- nav_right.hide();
- return;
- }
-
- if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex !== 0) {
- nav_left.show();
- }
-
- if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex != (currentArray.length -1)) {
- nav_right.show();
- }
- },
-
- _finish = function () {
- if (!$.support.opacity) {
- content.get(0).style.removeAttribute('filter');
- wrap.get(0).style.removeAttribute('filter');
- }
-
- if (selectedOpts.autoDimensions) {
- content.css('height', 'auto');
- }
-
- wrap.css('height', 'auto');
-
- if (titleStr && titleStr.length) {
- title.show();
- }
-
- if (currentOpts.showCloseButton) {
- close.show();
- }
-
- _set_navigation();
-
- if (currentOpts.hideOnContentClick) {
- content.bind('click', $.fancybox.close);
- }
-
- if (currentOpts.hideOnOverlayClick) {
- overlay.bind('click', $.fancybox.close);
- }
-
- $(window).bind("resize.fb", $.fancybox.resize);
-
- if (currentOpts.centerOnScroll) {
- $(window).bind("scroll.fb", $.fancybox.center);
- }
-
- if (currentOpts.type == 'iframe') {
- $('<iframe id="fancybox-frame" name="fancybox-frame' + new Date().getTime() + '" frameborder="0" hspace="0" ' + ' scrolling="' + selectedOpts.scrolling + '" src="' + currentOpts.href + '"></iframe>').appendTo(content);
- }
-
- wrap.show();
-
- busy = false;
-
- $.fancybox.center();
-
- currentOpts.onComplete(currentArray, currentIndex, currentOpts);
-
- _preload_images();
- },
-
- _preload_images = function() {
- var href,
- objNext;
-
- if ((currentArray.length -1) > currentIndex) {
- href = currentArray[ currentIndex + 1 ].href;
-
- if (typeof href !== 'undefined' && href.match(imgRegExp)) {
- objNext = new Image();
- objNext.src = href;
- }
- }
-
- if (currentIndex > 0) {
- href = currentArray[ currentIndex - 1 ].href;
-
- if (typeof href !== 'undefined' && href.match(imgRegExp)) {
- objNext = new Image();
- objNext.src = href;
- }
- }
- },
-
- _draw = function(pos) {
- var dim = {
- width : parseInt(start_pos.width + (final_pos.width - start_pos.width) * pos, 10),
- height : parseInt(start_pos.height + (final_pos.height - start_pos.height) * pos, 10),
-
- top : parseInt(start_pos.top + (final_pos.top - start_pos.top) * pos, 10),
- left : parseInt(start_pos.left + (final_pos.left - start_pos.left) * pos, 10)
- };
-
- if (typeof final_pos.opacity !== 'undefined') {
- dim.opacity = pos < 0.5 ? 0.5 : pos;
- }
-
- wrap.css(dim);
-
- content.css({
- 'width' : dim.width - currentOpts.padding * 2,
- 'height' : dim.height - (titleHeight * pos) - currentOpts.padding * 2
- });
- },
-
- _get_viewport = function() {
- return [
- $(window).width() - (currentOpts.margin * 2),
- $(window).height() - (currentOpts.margin * 2),
- $(document).scrollLeft() + currentOpts.margin,
- $(document).scrollTop() + currentOpts.margin
- ];
- },
-
- _get_zoom_to = function () {
- var view = _get_viewport(),
- to = {},
- resize = currentOpts.autoScale,
- double_padding = currentOpts.padding * 2,
- ratio;
-
- if (currentOpts.width.toString().indexOf('%') > -1) {
- to.width = parseInt((view[0] * parseFloat(currentOpts.width)) / 100, 10);
- } else {
- to.width = currentOpts.width + double_padding;
- }
-
- if (currentOpts.height.toString().indexOf('%') > -1) {
- to.height = parseInt((view[1] * parseFloat(currentOpts.height)) / 100, 10);
- } else {
- to.height = currentOpts.height + double_padding;
- }
-
- if (resize && (to.width > view[0] || to.height > view[1])) {
- if (selectedOpts.type == 'image' || selectedOpts.type == 'swf') {
- ratio = (currentOpts.width ) / (currentOpts.height );
-
- if ((to.width ) > view[0]) {
- to.width = view[0];
- to.height = parseInt(((to.width - double_padding) / ratio) + double_padding, 10);
- }
-
- if ((to.height) > view[1]) {
- to.height = view[1];
- to.width = parseInt(((to.height - double_padding) * ratio) + double_padding, 10);
- }
-
- } else {
- to.width = Math.min(to.width, view[0]);
- to.height = Math.min(to.height, view[1]);
- }
- }
-
- to.top = parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - to.height - 40) * 0.5)), 10);
- to.left = parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - to.width - 40) * 0.5)), 10);
-
- return to;
- },
-
- _get_obj_pos = function(obj) {
- var pos = obj.offset();
-
- pos.top += parseInt( obj.css('paddingTop'), 10 ) || 0;
- pos.left += parseInt( obj.css('paddingLeft'), 10 ) || 0;
-
- pos.top += parseInt( obj.css('border-top-width'), 10 ) || 0;
- pos.left += parseInt( obj.css('border-left-width'), 10 ) || 0;
-
- pos.width = obj.width();
- pos.height = obj.height();
-
- return pos;
- },
-
- _get_zoom_from = function() {
- var orig = selectedOpts.orig ? $(selectedOpts.orig) : false,
- from = {},
- pos,
- view;
-
- if (orig && orig.length) {
- pos = _get_obj_pos(orig);
-
- from = {
- width : pos.width + (currentOpts.padding * 2),
- height : pos.height + (currentOpts.padding * 2),
- top : pos.top - currentOpts.padding - 20,
- left : pos.left - currentOpts.padding - 20
- };
-
- } else {
- view = _get_viewport();
-
- from = {
- width : currentOpts.padding * 2,
- height : currentOpts.padding * 2,
- top : parseInt(view[3] + view[1] * 0.5, 10),
- left : parseInt(view[2] + view[0] * 0.5, 10)
- };
- }
-
- return from;
- },
-
- _animate_loading = function() {
- if (!loading.is(':visible')){
- clearInterval(loadingTimer);
- return;
- }
-
- $('div', loading).css('top', (loadingFrame * -40) + 'px');
-
- loadingFrame = (loadingFrame + 1) % 12;
- };
-
- /*
- * Public methods
- */
-
- $.fn.fancybox = function(options) {
- if (!$(this).length) {
- return this;
- }
-
- $(this)
- .data('fancybox', $.extend({}, options, ($.metadata ? $(this).metadata() : {})))
- .unbind('click.fb')
- .bind('click.fb', function(e) {
- e.preventDefault();
-
- if (busy) {
- return;
- }
-
- busy = true;
-
- $(this).blur();
-
- selectedArray = [];
- selectedIndex = 0;
-
- var rel = $(this).attr('rel') || '';
-
- if (!rel || rel == '' || rel === 'nofollow') {
- selectedArray.push(this);
-
- } else {
- selectedArray = $("a[rel=" + rel + "], area[rel=" + rel + "]");
- selectedIndex = selectedArray.index( this );
- }
-
- _start();
-
- return;
- });
-
- return this;
- };
-
- $.fancybox = function(obj) {
- var opts;
-
- if (busy) {
- return;
- }
-
- busy = true;
- opts = typeof arguments[1] !== 'undefined' ? arguments[1] : {};
-
- selectedArray = [];
- selectedIndex = parseInt(opts.index, 10) || 0;
-
- if ($.isArray(obj)) {
- for (var i = 0, j = obj.length; i < j; i++) {
- if (typeof obj[i] == 'object') {
- $(obj[i]).data('fancybox', $.extend({}, opts, obj[i]));
- } else {
- obj[i] = $({}).data('fancybox', $.extend({content : obj[i]}, opts));
- }
- }
-
- selectedArray = jQuery.merge(selectedArray, obj);
-
- } else {
- if (typeof obj == 'object') {
- $(obj).data('fancybox', $.extend({}, opts, obj));
- } else {
- obj = $({}).data('fancybox', $.extend({content : obj}, opts));
- }
-
- selectedArray.push(obj);
- }
-
- if (selectedIndex > selectedArray.length || selectedIndex < 0) {
- selectedIndex = 0;
- }
-
- _start();
- };
-
- $.fancybox.showActivity = function() {
- clearInterval(loadingTimer);
-
- loading.show();
- loadingTimer = setInterval(_animate_loading, 66);
- };
-
- $.fancybox.hideActivity = function() {
- loading.hide();
- };
-
- $.fancybox.next = function() {
- return $.fancybox.pos( currentIndex + 1);
- };
-
- $.fancybox.prev = function() {
- return $.fancybox.pos( currentIndex - 1);
- };
-
- $.fancybox.pos = function(pos) {
- if (busy) {
- return;
- }
-
- pos = parseInt(pos);
-
- selectedArray = currentArray;
-
- if (pos > -1 && pos < currentArray.length) {
- selectedIndex = pos;
- _start();
-
- } else if (currentOpts.cyclic && currentArray.length > 1) {
- selectedIndex = pos >= currentArray.length ? 0 : currentArray.length - 1;
- _start();
- }
-
- return;
- };
-
- $.fancybox.cancel = function() {
- if (busy) {
- return;
- }
-
- busy = true;
-
- $.event.trigger('fancybox-cancel');
-
- _abort();
-
- selectedOpts.onCancel(selectedArray, selectedIndex, selectedOpts);
-
- busy = false;
- };
-
- // Note: within an iframe use - parent.$.fancybox.close();
- $.fancybox.close = function() {
- if (busy || wrap.is(':hidden')) {
- return;
- }
-
- busy = true;
-
- if (currentOpts && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) {
- busy = false;
- return;
- }
-
- _abort();
-
- $(close.add( nav_left ).add( nav_right )).hide();
-
- $(content.add( overlay )).unbind();
-
- $(window).unbind("resize.fb scroll.fb");
- $(document).unbind('keydown.fb');
-
- content.find('iframe').attr('src', isIE6 && /^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank');
-
- if (currentOpts.titlePosition !== 'inside') {
- title.empty();
- }
-
- wrap.stop();
-
- function _cleanup() {
- overlay.fadeOut('fast');
-
- title.empty().hide();
- wrap.hide();
-
- $.event.trigger('fancybox-cleanup');
-
- content.empty();
-
- currentOpts.onClosed(currentArray, currentIndex, currentOpts);
-
- currentArray = selectedOpts = [];
- currentIndex = selectedIndex = 0;
- currentOpts = selectedOpts = {};
-
- busy = false;
- }
-
- if (currentOpts.transitionOut == 'elastic') {
- start_pos = _get_zoom_from();
-
- var pos = wrap.position();
-
- final_pos = {
- top : pos.top ,
- left : pos.left,
- width : wrap.width(),
- height : wrap.height()
- };
-
- if (currentOpts.opacity) {
- final_pos.opacity = 1;
- }
-
- title.empty().hide();
-
- fx.prop = 1;
-
- $(fx).animate({ prop: 0 }, {
- duration : currentOpts.speedOut,
- easing : currentOpts.easingOut,
- step : _draw,
- complete : _cleanup
- });
-
- } else {
- wrap.fadeOut( currentOpts.transitionOut == 'none' ? 0 : currentOpts.speedOut, _cleanup);
- }
- };
-
- $.fancybox.resize = function() {
- if (overlay.is(':visible')) {
- overlay.css('height', $(document).height());
- }
-
- $.fancybox.center(true);
- };
-
- $.fancybox.center = function() {
- var view, align;
-
- if (busy) {
- return;
- }
-
- align = arguments[0] === true ? 1 : 0;
- view = _get_viewport();
-
- if (!align && (wrap.width() > view[0] || wrap.height() > view[1])) {
- return;
- }
-
- wrap
- .stop()
- .animate({
- 'top' : parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - content.height() - 40) * 0.5) - currentOpts.padding)),
- 'left' : parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - content.width() - 40) * 0.5) - currentOpts.padding))
- }, typeof arguments[0] == 'number' ? arguments[0] : 200);
- };
-
- $.fancybox.init = function() {
- if ($("#fancybox-wrap").length) {
- return;
- }
-
- $('body').append(
- tmp = $('<div id="fancybox-tmp"></div>'),
- loading = $('<div id="fancybox-loading"><div></div></div>'),
- overlay = $('<div id="fancybox-overlay"></div>'),
- wrap = $('<div id="fancybox-wrap"></div>')
- );
-
- outer = $('<div id="fancybox-outer"></div>')
- .append('<div class="fancybox-bg" id="fancybox-bg-n"></div><div class="fancybox-bg" id="fancybox-bg-ne"></div><div class="fancybox-bg" id="fancybox-bg-e"></div><div class="fancybox-bg" id="fancybox-bg-se"></div><div class="fancybox-bg" id="fancybox-bg-s"></div><div class="fancybox-bg" id="fancybox-bg-sw"></div><div class="fancybox-bg" id="fancybox-bg-w"></div><div class="fancybox-bg" id="fancybox-bg-nw"></div>')
- .appendTo( wrap );
-
- outer.append(
- content = $('<div id="fancybox-content"></div>'),
- close = $('<a id="fancybox-close"></a>'),
- title = $('<div id="fancybox-title"></div>'),
-
- nav_left = $('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'),
- nav_right = $('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>')
- );
-
- close.click($.fancybox.close);
- loading.click($.fancybox.cancel);
-
- nav_left.click(function(e) {
- e.preventDefault();
- $.fancybox.prev();
- });
-
- nav_right.click(function(e) {
- e.preventDefault();
- $.fancybox.next();
- });
-
- if ($.fn.mousewheel) {
- wrap.bind('mousewheel.fb', function(e, delta) {
- if (busy) {
- e.preventDefault();
-
- } else if ($(e.target).get(0).clientHeight == 0 || $(e.target).get(0).scrollHeight === $(e.target).get(0).clientHeight) {
- e.preventDefault();
- $.fancybox[ delta > 0 ? 'prev' : 'next']();
- }
- });
- }
-
- if (!$.support.opacity) {
- wrap.addClass('fancybox-ie');
- }
-
- if (isIE6) {
- loading.addClass('fancybox-ie6');
- wrap.addClass('fancybox-ie6');
-
- $('<iframe id="fancybox-hide-sel-frame" src="' + (/^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank' ) + '" scrolling="no" border="0" frameborder="0" tabindex="-1"></iframe>').prependTo(outer);
- }
- };
-
- $.fn.fancybox.defaults = {
- padding : 10,
- margin : 40,
- opacity : false,
- modal : false,
- cyclic : false,
- scrolling : 'auto', // 'auto', 'yes' or 'no'
-
- width : 560,
- height : 340,
-
- autoScale : true,
- autoDimensions : true,
- centerOnScroll : false,
-
- ajax : {},
- swf : { wmode: 'transparent' },
-
- hideOnOverlayClick : true,
- hideOnContentClick : false,
-
- overlayShow : true,
- overlayOpacity : 0.7,
- overlayColor : '#777',
-
- titleShow : true,
- titlePosition : 'float', // 'float', 'outside', 'inside' or 'over'
- titleFormat : null,
- titleFromAlt : false,
-
- transitionIn : 'fade', // 'elastic', 'fade' or 'none'
- transitionOut : 'fade', // 'elastic', 'fade' or 'none'
-
- speedIn : 300,
- speedOut : 300,
-
- changeSpeed : 300,
- changeFade : 'fast',
-
- easingIn : 'swing',
- easingOut : 'swing',
-
- showCloseButton : true,
- showNavArrows : true,
- enableEscapeButton : true,
- enableKeyboardNav : true,
-
- onStart : function(){},
- onCancel : function(){},
- onComplete : function(){},
- onCleanup : function(){},
- onClosed : function(){},
- onError : function(){}
- };
-
- $(document).ready(function() {
- $.fancybox.init();
- });
-
-})(jQuery); \ No newline at end of file
diff --git a/library/fancybox/jquery.fancybox-1.3.4.pack.js b/library/fancybox/jquery.fancybox-1.3.4.pack.js
deleted file mode 100644
index 1373ed083..000000000
--- a/library/fancybox/jquery.fancybox-1.3.4.pack.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * FancyBox - jQuery Plugin
- * Simple and fancy lightbox alternative
- *
- * Examples and documentation at: http://fancybox.net
- *
- * Copyright (c) 2008 - 2010 Janis Skarnelis
- * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated.
- *
- * Version: 1.3.4 (11/11/2010)
- * Requires: jQuery v1.3+
- *
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- */
-
-;(function(b){var m,t,u,f,D,j,E,n,z,A,q=0,e={},o=[],p=0,d={},l=[],G=null,v=new Image,J=/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i,W=/[^\.]\.(swf)\s*$/i,K,L=1,y=0,s="",r,i,h=false,B=b.extend(b("<div/>")[0],{prop:0}),M=b.browser.msie&&b.browser.version<7&&!window.XMLHttpRequest,N=function(){t.hide();v.onerror=v.onload=null;G&&G.abort();m.empty()},O=function(){if(false===e.onError(o,q,e)){t.hide();h=false}else{e.titleShow=false;e.width="auto";e.height="auto";m.html('<p id="fancybox-error">The requested content cannot be loaded.<br />Please try again later.</p>');
-F()}},I=function(){var a=o[q],c,g,k,C,P,w;N();e=b.extend({},b.fn.fancybox.defaults,typeof b(a).data("fancybox")=="undefined"?e:b(a).data("fancybox"));w=e.onStart(o,q,e);if(w===false)h=false;else{if(typeof w=="object")e=b.extend(e,w);k=e.title||(a.nodeName?b(a).attr("title"):a.title)||"";if(a.nodeName&&!e.orig)e.orig=b(a).children("img:first").length?b(a).children("img:first"):b(a);if(k===""&&e.orig&&e.titleFromAlt)k=e.orig.attr("alt");c=e.href||(a.nodeName?b(a).attr("href"):a.href)||null;if(/^(?:javascript)/i.test(c)||
-c=="#")c=null;if(e.type){g=e.type;if(!c)c=e.content}else if(e.content)g="html";else if(c)g=c.match(J)?"image":c.match(W)?"swf":b(a).hasClass("iframe")?"iframe":c.indexOf("#")===0?"inline":"ajax";if(g){if(g=="inline"){a=c.substr(c.indexOf("#"));g=b(a).length>0?"inline":"ajax"}e.type=g;e.href=c;e.title=k;if(e.autoDimensions)if(e.type=="html"||e.type=="inline"||e.type=="ajax"){e.width="auto";e.height="auto"}else e.autoDimensions=false;if(e.modal){e.overlayShow=true;e.hideOnOverlayClick=false;e.hideOnContentClick=
-false;e.enableEscapeButton=false;e.showCloseButton=false}e.padding=parseInt(e.padding,10);e.margin=parseInt(e.margin,10);m.css("padding",e.padding+e.margin);b(".fancybox-inline-tmp").unbind("fancybox-cancel").bind("fancybox-change",function(){b(this).replaceWith(j.children())});switch(g){case "html":m.html(e.content);F();break;case "inline":if(b(a).parent().is("#fancybox-content")===true){h=false;break}b('<div class="fancybox-inline-tmp" />').hide().insertBefore(b(a)).bind("fancybox-cleanup",function(){b(this).replaceWith(j.children())}).bind("fancybox-cancel",
-function(){b(this).replaceWith(m.children())});b(a).appendTo(m);F();break;case "image":h=false;b.fancybox.showActivity();v=new Image;v.onerror=function(){O()};v.onload=function(){h=true;v.onerror=v.onload=null;e.width=v.width;e.height=v.height;b("<img />").attr({id:"fancybox-img",src:v.src,alt:e.title}).appendTo(m);Q()};v.src=c;break;case "swf":e.scrolling="no";C='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+e.width+'" height="'+e.height+'"><param name="movie" value="'+c+
-'"></param>';P="";b.each(e.swf,function(x,H){C+='<param name="'+x+'" value="'+H+'"></param>';P+=" "+x+'="'+H+'"'});C+='<embed src="'+c+'" type="application/x-shockwave-flash" width="'+e.width+'" height="'+e.height+'"'+P+"></embed></object>";m.html(C);F();break;case "ajax":h=false;b.fancybox.showActivity();e.ajax.win=e.ajax.success;G=b.ajax(b.extend({},e.ajax,{url:c,data:e.ajax.data||{},error:function(x){x.status>0&&O()},success:function(x,H,R){if((typeof R=="object"?R:G).status==200){if(typeof e.ajax.win==
-"function"){w=e.ajax.win(c,x,H,R);if(w===false){t.hide();return}else if(typeof w=="string"||typeof w=="object")x=w}m.html(x);F()}}}));break;case "iframe":Q()}}else O()}},F=function(){var a=e.width,c=e.height;a=a.toString().indexOf("%")>-1?parseInt((b(window).width()-e.margin*2)*parseFloat(a)/100,10)+"px":a=="auto"?"auto":a+"px";c=c.toString().indexOf("%")>-1?parseInt((b(window).height()-e.margin*2)*parseFloat(c)/100,10)+"px":c=="auto"?"auto":c+"px";m.wrapInner('<div style="width:'+a+";height:"+c+
-";overflow: "+(e.scrolling=="auto"?"auto":e.scrolling=="yes"?"scroll":"hidden")+';position:relative;"></div>');e.width=m.width();e.height=m.height();Q()},Q=function(){var a,c;t.hide();if(f.is(":visible")&&false===d.onCleanup(l,p,d)){b.event.trigger("fancybox-cancel");h=false}else{h=true;b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");f.is(":visible")&&d.titlePosition!=="outside"&&f.css("height",f.height());l=o;p=q;d=e;if(d.overlayShow){u.css({"background-color":d.overlayColor,
-opacity:d.overlayOpacity,cursor:d.hideOnOverlayClick?"pointer":"auto",height:b(document).height()});if(!u.is(":visible")){M&&b("select:not(#fancybox-tmp select)").filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one("fancybox-cleanup",function(){this.style.visibility="inherit"});u.show()}}else u.hide();i=X();s=d.title||"";y=0;n.empty().removeAttr("style").removeClass();if(d.titleShow!==false){if(b.isFunction(d.titleFormat))a=d.titleFormat(s,l,p,d);else a=s&&s.length?
-d.titlePosition=="float"?'<table id="fancybox-title-float-wrap" cellpadding="0" cellspacing="0"><tr><td id="fancybox-title-float-left"></td><td id="fancybox-title-float-main">'+s+'</td><td id="fancybox-title-float-right"></td></tr></table>':'<div id="fancybox-title-'+d.titlePosition+'">'+s+"</div>":false;s=a;if(!(!s||s==="")){n.addClass("fancybox-title-"+d.titlePosition).html(s).appendTo("body").show();switch(d.titlePosition){case "inside":n.css({width:i.width-d.padding*2,marginLeft:d.padding,marginRight:d.padding});
-y=n.outerHeight(true);n.appendTo(D);i.height+=y;break;case "over":n.css({marginLeft:d.padding,width:i.width-d.padding*2,bottom:d.padding}).appendTo(D);break;case "float":n.css("left",parseInt((n.width()-i.width-40)/2,10)*-1).appendTo(f);break;default:n.css({width:i.width-d.padding*2,paddingLeft:d.padding,paddingRight:d.padding}).appendTo(f)}}}n.hide();if(f.is(":visible")){b(E.add(z).add(A)).hide();a=f.position();r={top:a.top,left:a.left,width:f.width(),height:f.height()};c=r.width==i.width&&r.height==
-i.height;j.fadeTo(d.changeFade,0.3,function(){var g=function(){j.html(m.contents()).fadeTo(d.changeFade,1,S)};b.event.trigger("fancybox-change");j.empty().removeAttr("filter").css({"border-width":d.padding,width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2});if(c)g();else{B.prop=0;b(B).animate({prop:1},{duration:d.changeSpeed,easing:d.easingChange,step:T,complete:g})}})}else{f.removeAttr("style");j.css("border-width",d.padding);if(d.transitionIn=="elastic"){r=V();j.html(m.contents());
-f.show();if(d.opacity)i.opacity=0;B.prop=0;b(B).animate({prop:1},{duration:d.speedIn,easing:d.easingIn,step:T,complete:S})}else{d.titlePosition=="inside"&&y>0&&n.show();j.css({width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2}).html(m.contents());f.css(i).fadeIn(d.transitionIn=="none"?0:d.speedIn,S)}}}},Y=function(){if(d.enableEscapeButton||d.enableKeyboardNav)b(document).bind("keydown.fb",function(a){if(a.keyCode==27&&d.enableEscapeButton){a.preventDefault();b.fancybox.close()}else if((a.keyCode==
-37||a.keyCode==39)&&d.enableKeyboardNav&&a.target.tagName!=="INPUT"&&a.target.tagName!=="TEXTAREA"&&a.target.tagName!=="SELECT"){a.preventDefault();b.fancybox[a.keyCode==37?"prev":"next"]()}});if(d.showNavArrows){if(d.cyclic&&l.length>1||p!==0)z.show();if(d.cyclic&&l.length>1||p!=l.length-1)A.show()}else{z.hide();A.hide()}},S=function(){if(!b.support.opacity){j.get(0).style.removeAttribute("filter");f.get(0).style.removeAttribute("filter")}e.autoDimensions&&j.css("height","auto");f.css("height","auto");
-s&&s.length&&n.show();d.showCloseButton&&E.show();Y();d.hideOnContentClick&&j.bind("click",b.fancybox.close);d.hideOnOverlayClick&&u.bind("click",b.fancybox.close);b(window).bind("resize.fb",b.fancybox.resize);d.centerOnScroll&&b(window).bind("scroll.fb",b.fancybox.center);if(d.type=="iframe")b('<iframe id="fancybox-frame" name="fancybox-frame'+(new Date).getTime()+'" frameborder="0" hspace="0" '+(b.browser.msie?'allowtransparency="true""':"")+' scrolling="'+e.scrolling+'" src="'+d.href+'"></iframe>').appendTo(j);
-f.show();h=false;b.fancybox.center();d.onComplete(l,p,d);var a,c;if(l.length-1>p){a=l[p+1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}if(p>0){a=l[p-1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}},T=function(a){var c={width:parseInt(r.width+(i.width-r.width)*a,10),height:parseInt(r.height+(i.height-r.height)*a,10),top:parseInt(r.top+(i.top-r.top)*a,10),left:parseInt(r.left+(i.left-r.left)*a,10)};if(typeof i.opacity!=="undefined")c.opacity=a<0.5?0.5:a;f.css(c);
-j.css({width:c.width-d.padding*2,height:c.height-y*a-d.padding*2})},U=function(){return[b(window).width()-d.margin*2,b(window).height()-d.margin*2,b(document).scrollLeft()+d.margin,b(document).scrollTop()+d.margin]},X=function(){var a=U(),c={},g=d.autoScale,k=d.padding*2;c.width=d.width.toString().indexOf("%")>-1?parseInt(a[0]*parseFloat(d.width)/100,10):d.width+k;c.height=d.height.toString().indexOf("%")>-1?parseInt(a[1]*parseFloat(d.height)/100,10):d.height+k;if(g&&(c.width>a[0]||c.height>a[1]))if(e.type==
-"image"||e.type=="swf"){g=d.width/d.height;if(c.width>a[0]){c.width=a[0];c.height=parseInt((c.width-k)/g+k,10)}if(c.height>a[1]){c.height=a[1];c.width=parseInt((c.height-k)*g+k,10)}}else{c.width=Math.min(c.width,a[0]);c.height=Math.min(c.height,a[1])}c.top=parseInt(Math.max(a[3]-20,a[3]+(a[1]-c.height-40)*0.5),10);c.left=parseInt(Math.max(a[2]-20,a[2]+(a[0]-c.width-40)*0.5),10);return c},V=function(){var a=e.orig?b(e.orig):false,c={};if(a&&a.length){c=a.offset();c.top+=parseInt(a.css("paddingTop"),
-10)||0;c.left+=parseInt(a.css("paddingLeft"),10)||0;c.top+=parseInt(a.css("border-top-width"),10)||0;c.left+=parseInt(a.css("border-left-width"),10)||0;c.width=a.width();c.height=a.height();c={width:c.width+d.padding*2,height:c.height+d.padding*2,top:c.top-d.padding-20,left:c.left-d.padding-20}}else{a=U();c={width:d.padding*2,height:d.padding*2,top:parseInt(a[3]+a[1]*0.5,10),left:parseInt(a[2]+a[0]*0.5,10)}}return c},Z=function(){if(t.is(":visible")){b("div",t).css("top",L*-40+"px");L=(L+1)%12}else clearInterval(K)};
-b.fn.fancybox=function(a){if(!b(this).length)return this;b(this).data("fancybox",b.extend({},a,b.metadata?b(this).metadata():{})).unbind("click.fb").bind("click.fb",function(c){c.preventDefault();if(!h){h=true;b(this).blur();o=[];q=0;c=b(this).attr("rel")||"";if(!c||c==""||c==="nofollow")o.push(this);else{o=b("a[rel="+c+"], area[rel="+c+"]");q=o.index(this)}I()}});return this};b.fancybox=function(a,c){var g;if(!h){h=true;g=typeof c!=="undefined"?c:{};o=[];q=parseInt(g.index,10)||0;if(b.isArray(a)){for(var k=
-0,C=a.length;k<C;k++)if(typeof a[k]=="object")b(a[k]).data("fancybox",b.extend({},g,a[k]));else a[k]=b({}).data("fancybox",b.extend({content:a[k]},g));o=jQuery.merge(o,a)}else{if(typeof a=="object")b(a).data("fancybox",b.extend({},g,a));else a=b({}).data("fancybox",b.extend({content:a},g));o.push(a)}if(q>o.length||q<0)q=0;I()}};b.fancybox.showActivity=function(){clearInterval(K);t.show();K=setInterval(Z,66)};b.fancybox.hideActivity=function(){t.hide()};b.fancybox.next=function(){return b.fancybox.pos(p+
-1)};b.fancybox.prev=function(){return b.fancybox.pos(p-1)};b.fancybox.pos=function(a){if(!h){a=parseInt(a);o=l;if(a>-1&&a<l.length){q=a;I()}else if(d.cyclic&&l.length>1){q=a>=l.length?0:l.length-1;I()}}};b.fancybox.cancel=function(){if(!h){h=true;b.event.trigger("fancybox-cancel");N();e.onCancel(o,q,e);h=false}};b.fancybox.close=function(){function a(){u.fadeOut("fast");n.empty().hide();f.hide();b.event.trigger("fancybox-cleanup");j.empty();d.onClosed(l,p,d);l=e=[];p=q=0;d=e={};h=false}if(!(h||f.is(":hidden"))){h=
-true;if(d&&false===d.onCleanup(l,p,d))h=false;else{N();b(E.add(z).add(A)).hide();b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");j.find("iframe").attr("src",M&&/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank");d.titlePosition!=="inside"&&n.empty();f.stop();if(d.transitionOut=="elastic"){r=V();var c=f.position();i={top:c.top,left:c.left,width:f.width(),height:f.height()};if(d.opacity)i.opacity=1;n.empty().hide();B.prop=1;
-b(B).animate({prop:0},{duration:d.speedOut,easing:d.easingOut,step:T,complete:a})}else f.fadeOut(d.transitionOut=="none"?0:d.speedOut,a)}}};b.fancybox.resize=function(){u.is(":visible")&&u.css("height",b(document).height());b.fancybox.center(true)};b.fancybox.center=function(a){var c,g;if(!h){g=a===true?1:0;c=U();!g&&(f.width()>c[0]||f.height()>c[1])||f.stop().animate({top:parseInt(Math.max(c[3]-20,c[3]+(c[1]-j.height()-40)*0.5-d.padding)),left:parseInt(Math.max(c[2]-20,c[2]+(c[0]-j.width()-40)*0.5-
-d.padding))},typeof a=="number"?a:200)}};b.fancybox.init=function(){if(!b("#fancybox-wrap").length){b("body").append(m=b('<div id="fancybox-tmp"></div>'),t=b('<div id="fancybox-loading"><div></div></div>'),u=b('<div id="fancybox-overlay"></div>'),f=b('<div id="fancybox-wrap"></div>'));D=b('<div id="fancybox-outer"></div>').append('<div class="fancybox-bg" id="fancybox-bg-n"></div><div class="fancybox-bg" id="fancybox-bg-ne"></div><div class="fancybox-bg" id="fancybox-bg-e"></div><div class="fancybox-bg" id="fancybox-bg-se"></div><div class="fancybox-bg" id="fancybox-bg-s"></div><div class="fancybox-bg" id="fancybox-bg-sw"></div><div class="fancybox-bg" id="fancybox-bg-w"></div><div class="fancybox-bg" id="fancybox-bg-nw"></div>').appendTo(f);
-D.append(j=b('<div id="fancybox-content"></div>'),E=b('<a id="fancybox-close"></a>'),n=b('<div id="fancybox-title"></div>'),z=b('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'),A=b('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>'));E.click(b.fancybox.close);t.click(b.fancybox.cancel);z.click(function(a){a.preventDefault();b.fancybox.prev()});A.click(function(a){a.preventDefault();b.fancybox.next()});
-b.fn.mousewheel&&f.bind("mousewheel.fb",function(a,c){if(h)a.preventDefault();else if(b(a.target).get(0).clientHeight==0||b(a.target).get(0).scrollHeight===b(a.target).get(0).clientHeight){a.preventDefault();b.fancybox[c>0?"prev":"next"]()}});b.support.opacity||f.addClass("fancybox-ie");if(M){t.addClass("fancybox-ie6");f.addClass("fancybox-ie6");b('<iframe id="fancybox-hide-sel-frame" src="'+(/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank")+'" scrolling="no" border="0" frameborder="0" tabindex="-1"></iframe>').prependTo(D)}}};
-b.fn.fancybox.defaults={padding:10,margin:40,opacity:false,modal:false,cyclic:false,scrolling:"auto",width:560,height:340,autoScale:true,autoDimensions:true,centerOnScroll:false,ajax:{},swf:{wmode:"transparent"},hideOnOverlayClick:true,hideOnContentClick:false,overlayShow:true,overlayOpacity:0.7,overlayColor:"#777",titleShow:true,titlePosition:"float",titleFormat:null,titleFromAlt:false,transitionIn:"fade",transitionOut:"fade",speedIn:300,speedOut:300,changeSpeed:300,changeFade:"fast",easingIn:"swing",
-easingOut:"swing",showCloseButton:true,showNavArrows:true,enableEscapeButton:true,enableKeyboardNav:true,onStart:function(){},onCancel:function(){},onComplete:function(){},onCleanup:function(){},onClosed:function(){},onError:function(){}};b(document).ready(function(){b.fancybox.init()})})(jQuery); \ No newline at end of file
diff --git a/library/fancybox/jquery.mousewheel-3.0.4.pack.js b/library/fancybox/jquery.mousewheel-3.0.4.pack.js
deleted file mode 100644
index cb66588e2..000000000
--- a/library/fancybox/jquery.mousewheel-3.0.4.pack.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net)
-* Licensed under the MIT License (LICENSE.txt).
-*
-* Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
-* Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
-* Thanks to: Seamus Leahy for adding deltaX and deltaY
-*
-* Version: 3.0.4
-*
-* Requires: 1.2.2+
-*/
-
-(function(d){function g(a){var b=a||window.event,i=[].slice.call(arguments,1),c=0,h=0,e=0;a=d.event.fix(b);a.type="mousewheel";if(a.wheelDelta)c=a.wheelDelta/120;if(a.detail)c=-a.detail/3;e=c;if(b.axis!==undefined&&b.axis===b.HORIZONTAL_AXIS){e=0;h=-1*c}if(b.wheelDeltaY!==undefined)e=b.wheelDeltaY/120;if(b.wheelDeltaX!==undefined)h=-1*b.wheelDeltaX/120;i.unshift(a,c,h,e);return d.event.handle.apply(this,i)}var f=["DOMMouseScroll","mousewheel"];d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=
-f.length;a;)this.addEventListener(f[--a],g,false);else this.onmousewheel=g},teardown:function(){if(this.removeEventListener)for(var a=f.length;a;)this.removeEventListener(f[--a],g,false);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery); \ No newline at end of file
diff --git a/library/ical.php b/library/ical.php
new file mode 100644
index 000000000..6bb26bad8
--- /dev/null
+++ b/library/ical.php
@@ -0,0 +1,379 @@
+<?php
+/**
+ * This PHP-Class should only read a iCal-File (*.ics), parse it and give an
+ * array with its content.
+ *
+ * PHP Version 5
+ *
+ * @category Parser
+ * @package Ics-parser
+ * @author Martin Thoma <info@martin-thoma.de>
+ * @license http://www.opensource.org/licenses/mit-license.php MIT License
+ * @version SVN: <svn_id>
+ * @link http://code.google.com/p/ics-parser/
+ * @example $ical = new ical('MyCal.ics');
+ * print_r( $ical->events() );
+ */
+
+/**
+ * This example demonstrates how the Ics-Parser should be used.
+ *
+ * PHP Version 5
+ *
+ * @category Example
+ * @package Ics-parser
+ * @author Martin Thoma <info@martin-thoma.de>
+ * @license http://www.opensource.org/licenses/mit-license.php MIT License
+ * @version SVN: <svn_id>
+ * @link http://code.google.com/p/ics-parser/
+ * @example $ical = new ical('MyCal.ics');
+ * print_r( $ical->get_event_array() );
+
+require 'class.iCalReader.php';
+
+$ical = new ICal('MyCal.ics');
+$events = $ical->events();
+
+$date = $events[0]['DTSTART'];
+echo "The ical date: ";
+echo $date;
+echo "<br/>";
+
+echo "The Unix timestamp: ";
+echo $ical->iCalDateToUnixTimestamp($date);
+echo "<br/>";
+
+echo "The number of events: ";
+echo $ical->event_count;
+echo "<br/>";
+
+echo "The number of todos: ";
+echo $ical->todo_count;
+echo "<br/>";
+echo "<hr/><hr/>";
+
+foreach ($events as $event) {
+ echo "SUMMARY: ".$event['SUMMARY']."<br/>";
+ echo "DTSTART: ".$event['DTSTART']." - UNIX-Time: ".$ical->iCalDateToUnixTimestamp($event['DTSTART'])."<br/>";
+ echo "DTEND: ".$event['DTEND']."<br/>";
+ echo "DTSTAMP: ".$event['DTSTAMP']."<br/>";
+ echo "UID: ".$event['UID']."<br/>";
+ echo "CREATED: ".$event['CREATED']."<br/>";
+ echo "DESCRIPTION: ".$event['DESCRIPTION']."<br/>";
+ echo "LAST-MODIFIED: ".$event['LAST-MODIFIED']."<br/>";
+ echo "LOCATION: ".$event['LOCATION']."<br/>";
+ echo "SEQUENCE: ".$event['SEQUENCE']."<br/>";
+ echo "STATUS: ".$event['STATUS']."<br/>";
+ echo "TRANSP: ".$event['TRANSP']."<br/>";
+ echo "<hr/>";
+}
+
+ (end example)
+ *
+ *
+ */
+
+// error_reporting(E_ALL);
+
+/**
+ * This is the iCal-class
+ *
+ * @category Parser
+ * @package Ics-parser
+ * @author Martin Thoma <info@martin-thoma.de>
+ * @license http://www.opensource.org/licenses/mit-license.php MIT License
+ * @link http://code.google.com/p/ics-parser/
+ *
+ * @param {string} filename The name of the file which should be parsed
+ * @constructor
+ */
+class ICal
+{
+ /* How many ToDos are in this ical? */
+ public /** @type {int} */ $todo_count = 0;
+
+ /* How many events are in this ical? */
+ public /** @type {int} */ $event_count = 0;
+
+ /* The parsed calendar */
+ public /** @type {Array} */ $cal;
+
+ /* Which keyword has been added to cal at last? */
+ private /** @type {string} */ $_lastKeyWord;
+
+ /**
+ * Creates the iCal-Object
+ *
+ * @param {string} $filename The path to the iCal-file
+ *
+ * @return Object The iCal-Object
+ */
+ public function __construct($filename)
+ {
+ if (!$filename) {
+ return false;
+ }
+
+ $lines = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
+ if (stristr($lines[0], 'BEGIN:VCALENDAR') === false) {
+ return false;
+ } else {
+ // TODO: Fix multiline-description problem (see http://tools.ietf.org/html/rfc2445#section-4.8.1.5)
+ foreach ($lines as $line) {
+ $line = trim($line);
+ $add = $this->keyValueFromString($line);
+ if ($add === false) {
+ $this->addCalendarComponentWithKeyAndValue($type, false, $line);
+ continue;
+ }
+
+ list($keyword, $value) = $add;
+
+ switch ($line) {
+ // http://www.kanzaki.com/docs/ical/vtodo.html
+ case "BEGIN:VTODO":
+ $this->todo_count++;
+ $type = "VTODO";
+ break;
+
+ // http://www.kanzaki.com/docs/ical/vevent.html
+ case "BEGIN:VEVENT":
+ //echo "vevent gematcht";
+ $this->event_count++;
+ $type = "VEVENT";
+ break;
+
+ //all other special strings
+ case "BEGIN:VCALENDAR":
+ case "BEGIN:DAYLIGHT":
+ // http://www.kanzaki.com/docs/ical/vtimezone.html
+ case "BEGIN:VTIMEZONE":
+ case "BEGIN:STANDARD":
+ $type = $value;
+ break;
+ case "END:VTODO": // end special text - goto VCALENDAR key
+ case "END:VEVENT":
+ case "END:VCALENDAR":
+ case "END:DAYLIGHT":
+ case "END:VTIMEZONE":
+ case "END:STANDARD":
+ $type = "VCALENDAR";
+ break;
+ default:
+ $this->addCalendarComponentWithKeyAndValue($type,
+ $keyword,
+ $value);
+ break;
+ }
+ }
+ return $this->cal;
+ }
+ }
+
+ /**
+ * Add to $this->ical array one value and key.
+ *
+ * @param {string} $component This could be VTODO, VEVENT, VCALENDAR, ...
+ * @param {string} $keyword The keyword, for example DTSTART
+ * @param {string} $value The value, for example 20110105T090000Z
+ *
+ * @return {None}
+ */
+ public function addCalendarComponentWithKeyAndValue($component,
+ $keyword,
+ $value)
+ {
+ if ($keyword == false) {
+ $keyword = $this->last_keyword;
+ switch ($component) {
+ case 'VEVENT':
+ $value = $this->cal[$component][$this->event_count - 1]
+ [$keyword].$value;
+ break;
+ case 'VTODO' :
+ $value = $this->cal[$component][$this->todo_count - 1]
+ [$keyword].$value;
+ break;
+ }
+ }
+
+ if (stristr($keyword, "DTSTART") or stristr($keyword, "DTEND")) {
+ $keyword = explode(";", $keyword);
+ $keyword = $keyword[0];
+ }
+
+ switch ($component) {
+ case "VTODO":
+ $this->cal[$component][$this->todo_count - 1][$keyword] = $value;
+ //$this->cal[$component][$this->todo_count]['Unix'] = $unixtime;
+ break;
+ case "VEVENT":
+ $this->cal[$component][$this->event_count - 1][$keyword] = $value;
+ break;
+ default:
+ $this->cal[$component][$keyword] = $value;
+ break;
+ }
+ $this->last_keyword = $keyword;
+ }
+
+ /**
+ * Get a key-value pair of a string.
+ *
+ * @param {string} $text which is like "VCALENDAR:Begin" or "LOCATION:"
+ *
+ * @return {array} array("VCALENDAR", "Begin")
+ */
+ public function keyValueFromString($text)
+ {
+ preg_match("/([^:]+)[:]([\w\W]*)/", $text, $matches);
+ if (count($matches) == 0) {
+ return false;
+ }
+ $matches = array_splice($matches, 1, 2);
+ return $matches;
+ }
+
+ /**
+ * Return Unix timestamp from ical date time format
+ *
+ * @param {string} $icalDate A Date in the format YYYYMMDD[T]HHMMSS[Z] or
+ * YYYYMMDD[T]HHMMSS
+ *
+ * @return {int}
+ */
+ public function iCalDateToUnixTimestamp($icalDate)
+ {
+ $icalDate = str_replace('T', '', $icalDate);
+ $icalDate = str_replace('Z', '', $icalDate);
+
+ $pattern = '/([0-9]{4})'; // 1: YYYY
+ $pattern .= '([0-9]{2})'; // 2: MM
+ $pattern .= '([0-9]{2})'; // 3: DD
+ $pattern .= '([0-9]{0,2})'; // 4: HH
+ $pattern .= '([0-9]{0,2})'; // 5: MM
+ $pattern .= '([0-9]{0,2})/'; // 6: SS
+ preg_match($pattern, $icalDate, $date);
+
+ // Unix timestamp can't represent dates before 1970
+ if ($date[1] <= 1970) {
+ return false;
+ }
+ // Unix timestamps after 03:14:07 UTC 2038-01-19 might cause an overflow
+ // if 32 bit integers are used.
+ $timestamp = mktime((int)$date[4],
+ (int)$date[5],
+ (int)$date[6],
+ (int)$date[2],
+ (int)$date[3],
+ (int)$date[1]);
+ return $timestamp;
+ }
+
+ /**
+ * Returns an array of arrays with all events. Every event is an associative
+ * array and each property is an element it.
+ *
+ * @return {array}
+ */
+ public function events()
+ {
+ $array = $this->cal;
+ return $array['VEVENT'];
+ }
+
+ /**
+ * Returns a boolean value whether thr current calendar has events or not
+ *
+ * @return {boolean}
+ */
+ public function hasEvents()
+ {
+ return ( count($this->events()) > 0 ? true : false );
+ }
+
+ /**
+ * Returns false when the current calendar has no events in range, else the
+ * events.
+ *
+ * Note that this function makes use of a UNIX timestamp. This might be a
+ * problem on January the 29th, 2038.
+ * See http://en.wikipedia.org/wiki/Unix_time#Representing_the_number
+ *
+ * @param {boolean} $rangeStart Either true or false
+ * @param {boolean} $rangeEnd Either true or false
+ *
+ * @return {mixed}
+ */
+ public function eventsFromRange($rangeStart = false, $rangeEnd = false)
+ {
+ $events = $this->sortEventsWithOrder($this->events(), SORT_ASC);
+
+ if (!$events) {
+ return false;
+ }
+
+ $extendedEvents = array();
+
+ if ($rangeStart !== false) {
+ $rangeStart = new DateTime();
+ }
+
+ if ($rangeEnd !== false or $rangeEnd <= 0) {
+ $rangeEnd = new DateTime('2038/01/18');
+ } else {
+ $rangeEnd = new DateTime($rangeEnd);
+ }
+
+ $rangeStart = $rangeStart->format('U');
+ $rangeEnd = $rangeEnd->format('U');
+
+
+
+ // loop through all events by adding two new elements
+ foreach ($events as $anEvent) {
+ $timestamp = $this->iCalDateToUnixTimestamp($anEvent['DTSTART']);
+ if ($timestamp >= $rangeStart && $timestamp <= $rangeEnd) {
+ $extendedEvents[] = $anEvent;
+ }
+ }
+
+ return $extendedEvents;
+ }
+
+ /**
+ * Returns a boolean value whether thr current calendar has events or not
+ *
+ * @param {array} $events An array with events.
+ * @param {array} $sortOrder Either SORT_ASC, SORT_DESC, SORT_REGULAR,
+ * SORT_NUMERIC, SORT_STRING
+ *
+ * @return {boolean}
+ */
+ public function sortEventsWithOrder($events, $sortOrder = SORT_ASC)
+ {
+ $extendedEvents = array();
+
+ // loop through all events by adding two new elements
+ foreach ($events as $anEvent) {
+ if (!array_key_exists('UNIX_TIMESTAMP', $anEvent)) {
+ $anEvent['UNIX_TIMESTAMP'] =
+ $this->iCalDateToUnixTimestamp($anEvent['DTSTART']);
+ }
+
+ if (!array_key_exists('REAL_DATETIME', $anEvent)) {
+ $anEvent['REAL_DATETIME'] =
+ date("d.m.Y", $anEvent['UNIX_TIMESTAMP']);
+ }
+
+ $extendedEvents[] = $anEvent;
+ }
+
+ foreach ($extendedEvents as $key => $value) {
+ $timestamp[$key] = $value['UNIX_TIMESTAMP'];
+ }
+ array_multisort($timestamp, $sortOrder, $extendedEvents);
+
+ return $extendedEvents;
+ }
+}
diff --git a/library/intl/.gitignore b/library/intl/.gitignore
new file mode 100644
index 000000000..2659611c8
--- /dev/null
+++ b/library/intl/.gitignore
@@ -0,0 +1 @@
+composer.lock
diff --git a/library/intl/.travis.yml b/library/intl/.travis.yml
new file mode 100644
index 000000000..20bf1805d
--- /dev/null
+++ b/library/intl/.travis.yml
@@ -0,0 +1,14 @@
+language: php
+
+php:
+ - 5.4
+ - 5.5
+ - 5.6
+ - hhvm
+
+install:
+ - composer self-update
+ - composer install
+
+script:
+ - ./vendor/bin/phpunit -c ./phpunit.xml --coverage-text --strict
diff --git a/library/intl/LICENSE b/library/intl/LICENSE
new file mode 100644
index 000000000..e4ef21420
--- /dev/null
+++ b/library/intl/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Commerce Guys
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/library/intl/README.md b/library/intl/README.md
new file mode 100644
index 000000000..8de2de4d9
--- /dev/null
+++ b/library/intl/README.md
@@ -0,0 +1,163 @@
+intl
+=====
+
+[![Build Status](https://travis-ci.org/commerceguys/intl.svg?branch=master)](https://travis-ci.org/commerceguys/intl)
+
+A PHP 5.4+ internationalization library, powered by CLDR data.
+
+Features:
+- NumberFormatter, inspired by [intl](http://php.net/manual/en/class.numberformatter.php).
+- Currencies
+- Countries
+- Languages
+
+Coming soon: date formatting.
+
+Why not use the intl extension?
+-------------------------------
+The intl extension isn't present by default on PHP installs, requiring
+it can hurt software adoption.
+Behind the scenes the extension relies on libicu which includes the CLDR dataset,
+but depending on the OS/distribution used, could be several major CLDR releases behind.
+
+Since the CLDR dataset is freely available in JSON form, it is possible to
+reimplement the intl functionality in pure PHP code while ensuring that the
+dataset is always fresh.
+
+Having access to the CLDR dataset also makes it possible to offer additional APIs,
+such as listing all currencies.
+
+More backstory can be found in [this blog post](https://drupalcommerce.org/blog/15916/commerce-2x-stories-internationalization).
+
+Formatting numbers
+------------------
+Formats numbers (decimals, percents, currency amounts) using locale-specific rules.
+
+This ensures that the decimal and grouping separators, the position of the currency
+symbol, as well as the actual symbol used match what the user is expecting.
+
+The amounts passed for formatting should already be rounded, because the
+formatter doesn't do any rounding of its own.
+
+```php
+use CommerceGuys\Intl\Currency\CurrencyRepository;
+use CommerceGuys\Intl\NumberFormat\NumberFormatRepository;
+use CommerceGuys\Intl\Formatter\NumberFormatter;
+
+$currencyRepository = new CurrencyRepository;
+$numberFormatRepository = new NumberFormatRepository;
+
+$currency = $currencyRepository->get('USD');
+$numberFormat = $numberFormatRepository->get('en');
+
+$decimalFormatter = new NumberFormatter($numberFormat);
+echo $decimalFormatter->format('1234.99'); // 123,456.99
+
+$percentFormatter = new NumberFormatter($numberFormat, NumberFormatter::PERCENT);
+echo $percentFormatter->format('0.75'); // 75%
+
+$currencyFormatter = new NumberFormatter($numberFormat, NumberFormatter::CURRENCY);
+echo $currencyFormatter->formatCurrency('2.99', $currency); // $2.99
+
+// The accounting pattern shows negative numbers differently and is used
+// primarily for amounts shown on invoices.
+$invoiceCurrencyFormatter = new NumberFormatter($numberFormat, NumberFormatter::CURRENCY_ACCOUNTING);
+echo $invoiceCurrencyFormatter->formatCurrency('-2.99', $currency); // (2.99$)
+
+// Arabic, Arabic extended, Bengali, Devanagari digits are supported as expected.
+$currency = $currencyRepository->get('USD', 'ar');
+$numberFormat = $numberFormatRepository->get('ar');
+$currencyFormatter = new NumberFormatter($numberFormat, NumberFormatter::CURRENCY);
+echo $currencyFormatter->formatCurrency('1230.99', $currency); // US$ ١٬٢٣٠٫٩٩
+
+// Parse formatted values into numeric values.
+echo $currencyFormatter->parseCurrency('US$ ١٬٢٣٠٫٩٩', $currency); // 1230.99
+```
+
+Currencies
+----------
+```php
+use CommerceGuys\Intl\Currency\CurrencyRepository;
+
+// Reads the currency definitions from resources/currency.
+$currencyRepository = new CurrencyRepository;
+
+// Get the USD currency using the default locale (en).
+$currency = $currencyRepository->get('USD');
+echo $currency->getCurrencyCode(); // USD
+echo $currency->getNumericCode(); // 840
+echo $currency->getFractionDigits(); // 2
+echo $currency->getName(); // US Dollar
+echo $currency->getSymbol(); // $
+echo $currency->getLocale(); // en
+
+// Get the USD currency using the fr-FR locale.
+$currency = $currencyRepository->get('USD', 'fr-FR');
+echo $currency->getName(); // dollar des États-Unis
+echo $currency->getSymbol(); // $US
+echo $currency->getLocale(); // fr-FR
+
+$allCurrencies = $currencyRepository->getAll();
+```
+
+Countries
+---------
+```php
+use CommerceGuys\Intl\Country\CountryRepository;
+
+// Reads the country definitions from resources/country.
+$countryRepository = new CountryRepository;
+
+// Get the US country using the default locale (en).
+$country = $countryRepository->get('US');
+echo $country->getCountryCode(); // US
+echo $country->getTelephoneCode(); // 1
+echo $country->getName(); // United States
+
+// Get the US country using the fr-FR locale.
+$country = $countryRepository->get('US', 'fr-FR');
+echo $country->getName(); // États-Unis
+
+$allCountries = $countryRepository->getAll();
+```
+
+Languages
+---------
+```php
+use CommerceGuys\Intl\Language\LanguageRepository;
+
+// Reads the language definitions from resources/language.
+$languageRepository = new LanguageRepository;
+
+// Get the german language using the default locale (en).
+$language = $languageRepository->get('de');
+echo $language->getLanguageCode(); // de
+echo $language->getName(); // German
+
+// Get the german language using the fr-FR locale.
+$language = $languageRepository->get('de', 'fr-FR');
+echo $language->getName(); // allemand
+
+$allLanguages = $languageRepository->getAll();
+```
+
+Implementing the library
+------------------------
+While the library can be used as-is, most applications will want to store the
+relevant definitions (currencies, countries, etc) in the database.
+This allows for better performance while giving users the ability to modify and
+expand the data.
+
+Taking currencies as an example, a merchant frequently wants to be able to:
+
+- Define custom currencies.
+- Enable/disable existing currencies
+- Modify an existing currency (changing the default number of fraction digits, for example).
+
+This would be accomplished by using the CurrencyRepository to get all default currencies and
+insert them into the database. The doctrine entity (or any similar data object) would then implement
+the CurrencyInterface so that the NumberFormatter can continue to work.
+
+Related projects
+----------------
+[commerceguys/pricing](http://github.com/commerceguys/pricing) provides a Price object.
diff --git a/library/intl/phpunit.xml b/library/intl/phpunit.xml
new file mode 100644
index 000000000..82bf2b096
--- /dev/null
+++ b/library/intl/phpunit.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<phpunit backupGlobals="false"
+ backupStaticAttributes="false"
+ colors="true"
+ convertErrorsToExceptions="true"
+ convertNoticesToExceptions="true"
+ convertWarningsToExceptions="true"
+ stopOnFailure="false"
+ bootstrap="vendor/autoload.php"
+>
+ <testsuites>
+ <testsuite name="CommerceGuys Intl Test Suite">
+ <directory>./tests/</directory>
+ </testsuite>
+ </testsuites>
+
+ <filter>
+ <whitelist>
+ <directory suffix=".php">./src/</directory>
+ </whitelist>
+ </filter>
+</phpunit>
diff --git a/library/intl/resources/country/af.json b/library/intl/resources/country/af.json
new file mode 100644
index 000000000..a12a35891
--- /dev/null
+++ b/library/intl/resources/country/af.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistan"
+ },
+ "AX": {
+ "name": "Ã…landeilande"
+ },
+ "AL": {
+ "name": "Albanië"
+ },
+ "DZ": {
+ "name": "Algerië"
+ },
+ "AS": {
+ "name": "Amerikaans-Samoa"
+ },
+ "VI": {
+ "name": "Amerikaanse Maagde-eilande"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktika"
+ },
+ "AG": {
+ "name": "Antigua en Barbuda"
+ },
+ "AR": {
+ "name": "Argentinië"
+ },
+ "AM": {
+ "name": "Armenië"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascensioneiland"
+ },
+ "AU": {
+ "name": "Australië"
+ },
+ "AZ": {
+ "name": "Azerbeidjan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrein"
+ },
+ "BD": {
+ "name": "Bangladesj"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "België"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhoetan"
+ },
+ "BO": {
+ "name": "Bolivië"
+ },
+ "BA": {
+ "name": "Bosnië en Herzegowina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasilië"
+ },
+ "IO": {
+ "name": "Britse Indiese Oseaangebied"
+ },
+ "VG": {
+ "name": "Britse Maagde-eilande"
+ },
+ "BN": {
+ "name": "Broenei"
+ },
+ "BG": {
+ "name": "Bulgarye"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "EA": {
+ "name": "Ceuta en Melilla"
+ },
+ "CL": {
+ "name": "Chili"
+ },
+ "CC": {
+ "name": "Cocos- (Keeling) eilande"
+ },
+ "CO": {
+ "name": "Colombië"
+ },
+ "KM": {
+ "name": "Comore"
+ },
+ "CK": {
+ "name": "Cookeilande"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CD": {
+ "name": "Demokratiese Republiek van die Kongo"
+ },
+ "DK": {
+ "name": "Denemarke"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djiboeti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominikaanse Republiek"
+ },
+ "DE": {
+ "name": "Duitsland"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipte"
+ },
+ "IM": {
+ "name": "Eiland Man"
+ },
+ "GQ": {
+ "name": "Ekwatoriaal-Guinee"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estland"
+ },
+ "ET": {
+ "name": "Ethiopië"
+ },
+ "FK": {
+ "name": "Falklandeilande"
+ },
+ "FO": {
+ "name": "Faroëreilande"
+ },
+ "FJ": {
+ "name": "Fidji"
+ },
+ "PH": {
+ "name": "Filippyne"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "Frankryk"
+ },
+ "GF": {
+ "name": "Frans-Guyana"
+ },
+ "PF": {
+ "name": "Frans-Polinesië"
+ },
+ "TF": {
+ "name": "Franse Suidelike Gebiede"
+ },
+ "GA": {
+ "name": "Gaboen"
+ },
+ "GM": {
+ "name": "Gambië"
+ },
+ "GE": {
+ "name": "Georgië"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GR": {
+ "name": "Griekeland"
+ },
+ "GL": {
+ "name": "Groenland"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinee"
+ },
+ "GW": {
+ "name": "Guinee-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haïti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hongarye"
+ },
+ "HK": {
+ "name": "Hongkong SAS Sjina"
+ },
+ "IE": {
+ "name": "Ierland"
+ },
+ "IN": {
+ "name": "Indië"
+ },
+ "ID": {
+ "name": "Indonesië"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italië"
+ },
+ "CI": {
+ "name": "Ivoorkus"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordanië"
+ },
+ "KY": {
+ "name": "Kaaimanseilande"
+ },
+ "CV": {
+ "name": "Kaap Verde"
+ },
+ "KH": {
+ "name": "Kambodja"
+ },
+ "CM": {
+ "name": "Kameroen"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanariese Eilande"
+ },
+ "BQ": {
+ "name": "Karibiese Nederland"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KZ": {
+ "name": "Kazakstan"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "CX": {
+ "name": "Kerseiland"
+ },
+ "KG": {
+ "name": "Kirgisië"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KW": {
+ "name": "Koeweit"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "HR": {
+ "name": "Kroasië"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Letland"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberië"
+ },
+ "LY": {
+ "name": "Libië"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Litaue"
+ },
+ "LU": {
+ "name": "Luxemburg"
+ },
+ "MO": {
+ "name": "Macau SAS Sjina"
+ },
+ "MK": {
+ "name": "Macedonië"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maledive"
+ },
+ "MY": {
+ "name": "Maleisië"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marokko"
+ },
+ "MH": {
+ "name": "Marshalleilande"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritanië"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "MM": {
+ "name": "Mianmar (Birma)"
+ },
+ "FM": {
+ "name": "Mikronesië"
+ },
+ "MD": {
+ "name": "Moldowa"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolië"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mosambiek"
+ },
+ "NA": {
+ "name": "Namibië"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NL": {
+ "name": "Nederland"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NC": {
+ "name": "Nieu-Kaledonië"
+ },
+ "NZ": {
+ "name": "Nieu-Seeland"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigerië"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "KP": {
+ "name": "Noord-Korea"
+ },
+ "MP": {
+ "name": "Noordelike Mariana-eilande"
+ },
+ "NO": {
+ "name": "Noorweë"
+ },
+ "NF": {
+ "name": "Norfolkeiland"
+ },
+ "UA": {
+ "name": "Oekraïne"
+ },
+ "UZ": {
+ "name": "Oesbekistan"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "TL": {
+ "name": "Oos-Timor"
+ },
+ "AT": {
+ "name": "Oostenryk"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestynse gebiede"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papoea-Nieu-Guinee"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairneilande"
+ },
+ "PL": {
+ "name": "Pole"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "CG": {
+ "name": "Republiek van die Kongo"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Roemenië"
+ },
+ "RU": {
+ "name": "Rusland"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "Sao Tome en Principe"
+ },
+ "SA": {
+ "name": "Saoedi-Arabië"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "CF": {
+ "name": "Sentraal-Afrikaanse Republiek"
+ },
+ "RS": {
+ "name": "Serwië"
+ },
+ "SC": {
+ "name": "Seychelle"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapoer"
+ },
+ "BL": {
+ "name": "Sint Barthélemy"
+ },
+ "SH": {
+ "name": "Sint Helena"
+ },
+ "KN": {
+ "name": "Sint Kitts en Nevis"
+ },
+ "LC": {
+ "name": "Sint Lucia"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "MF": {
+ "name": "Sint Martin"
+ },
+ "PM": {
+ "name": "Sint Pierre en Miquelon"
+ },
+ "VC": {
+ "name": "Sint Vincent en die Grenadine"
+ },
+ "CY": {
+ "name": "Siprus"
+ },
+ "SY": {
+ "name": "Sirië"
+ },
+ "CN": {
+ "name": "Sjina"
+ },
+ "SK": {
+ "name": "Slowakye"
+ },
+ "SI": {
+ "name": "Slowenië"
+ },
+ "SD": {
+ "name": "Soedan"
+ },
+ "SB": {
+ "name": "Solomoneilande"
+ },
+ "SO": {
+ "name": "Somalië"
+ },
+ "ES": {
+ "name": "Spanje"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "ZA": {
+ "name": "Suid-Afrika"
+ },
+ "GS": {
+ "name": "Suid-Georgië en die Suidelike Sandwicheilande"
+ },
+ "KR": {
+ "name": "Suid-Korea"
+ },
+ "SS": {
+ "name": "Suid-Soedan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard en Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Swede"
+ },
+ "CH": {
+ "name": "Switserland"
+ },
+ "TJ": {
+ "name": "Tadjikistan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tanzanië"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "CZ": {
+ "name": "Tjeggiese Republiek"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad en Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TD": {
+ "name": "Tsjad"
+ },
+ "TN": {
+ "name": "Tunisië"
+ },
+ "TM": {
+ "name": "Turkmenië"
+ },
+ "TC": {
+ "name": "Turks- en Caicoseilande"
+ },
+ "TR": {
+ "name": "Turkye"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikaanstad"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "AE": {
+ "name": "Verenigde Arabiese Emirate"
+ },
+ "GB": {
+ "name": "Verenigde Koninkryk"
+ },
+ "US": {
+ "name": "Verenigde State van Amerika"
+ },
+ "VN": {
+ "name": "Viëtnam"
+ },
+ "UM": {
+ "name": "VS klein omliggende eilande"
+ },
+ "WF": {
+ "name": "Wallis en Futuna"
+ },
+ "EH": {
+ "name": "Wes-Sahara"
+ },
+ "IS": {
+ "name": "Ysland"
+ },
+ "ZM": {
+ "name": "Zambië"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/agq.json b/library/intl/resources/country/agq.json
new file mode 100644
index 000000000..b95e32c0b
--- /dev/null
+++ b/library/intl/resources/country/agq.json
@@ -0,0 +1,761 @@
+{
+ "AL": {
+ "name": "Àabɛnìa"
+ },
+ "DZ": {
+ "name": "Àadzɛlìa"
+ },
+ "AR": {
+ "name": "Àdzɛ̀ntinà"
+ },
+ "PS": {
+ "name": "AdzɨmÄ kɨ Å‹gùŋ kɨ PalÉ›sɨtɨnyia à kɨ Gazà kò"
+ },
+ "IE": {
+ "name": "Aelɨ̀lân"
+ },
+ "IS": {
+ "name": "Aesɨ̀lân"
+ },
+ "AF": {
+ "name": "Àfɨ̀ganìsɨ̀tân"
+ },
+ "ZA": {
+ "name": "Afɨlekà ghɨ Emàm ghò"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AW": {
+ "name": "Àlubà"
+ },
+ "AS": {
+ "name": "Àmɛlekan Samwà"
+ },
+ "AM": {
+ "name": "Àmɛnyìa"
+ },
+ "AD": {
+ "name": "Àndolà"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Àntigwà à Bàbudà"
+ },
+ "AO": {
+ "name": "Àŋgolà"
+ },
+ "AI": {
+ "name": "Àŋgwilà"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AZ": {
+ "name": "Àzɨbɛ̀dzân"
+ },
+ "BB": {
+ "name": "Bàbadòs"
+ },
+ "BS": {
+ "name": "Bàhamàs"
+ },
+ "BH": {
+ "name": "Bàlaen"
+ },
+ "BD": {
+ "name": "Baŋgɨ̀làdɛ̂"
+ },
+ "BE": {
+ "name": "Bɛɛdzwùm"
+ },
+ "BY": {
+ "name": "Bɛlàlûs"
+ },
+ "BZ": {
+ "name": "Bɛ̀lezɨ̀"
+ },
+ "BM": {
+ "name": "Bɛ̀mudà"
+ },
+ "BJ": {
+ "name": "Bɛ̀nɨ̂ŋ"
+ },
+ "BR": {
+ "name": "Bɨ̀làzîi"
+ },
+ "BN": {
+ "name": "Bɨ̀lunè"
+ },
+ "BO": {
+ "name": "Bòlevà"
+ },
+ "BA": {
+ "name": "Bosɨnyìa à Hɛ̀zɛ̀gòvinà"
+ },
+ "BW": {
+ "name": "Bòtɨ̀swǎnà"
+ },
+ "BF": {
+ "name": "Bùkinà Fasò"
+ },
+ "BI": {
+ "name": "Bùlundì"
+ },
+ "BG": {
+ "name": "Bùugɛlìa"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Châ"
+ },
+ "CN": {
+ "name": "Chaenà"
+ },
+ "CZ": {
+ "name": "Chɛ̂ Lèkpubèlè"
+ },
+ "CL": {
+ "name": "Chilè"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "FK": {
+ "name": "Chwɨlà fɨ Fakɨlàn"
+ },
+ "MH": {
+ "name": "Chwɨlà fɨ Mashà"
+ },
+ "NF": {
+ "name": "Chwɨlà fɨ Nufòʔ"
+ },
+ "SB": {
+ "name": "Chwɨlà fɨ Solomwɨ̀n"
+ },
+ "MP": {
+ "name": "Chwɨlà mÌ€ MàlÇanà mɨ̀ Ekùw mò"
+ },
+ "VG": {
+ "name": "Chwɨlà m̀ Vidzinyìa m̀ Bɨ̀letì mò"
+ },
+ "TC": {
+ "name": "Chwɨla n Tɨtê à Kaekùs"
+ },
+ "KY": {
+ "name": "Chwɨlà ŋ̀ Kaemàn"
+ },
+ "CV": {
+ "name": "Chwɨla ŋ̀ Kɛ̀b Vɛ̂ɛ"
+ },
+ "CK": {
+ "name": "Chwɨla ŋ̀ Kûʔ"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CD": {
+ "name": "Dɛ̀mùkàlatì Lèkpubèlè è Kuŋgù"
+ },
+ "DK": {
+ "name": "Dɛnɨmà"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "IO": {
+ "name": "Dɨŋò kɨ dzughùnstòʔ kɨ Endìa kɨ Bɨ̀letì kò"
+ },
+ "DM": {
+ "name": "Dòmenekà"
+ },
+ "DO": {
+ "name": "Dòmenekà Lèkpubèlè"
+ },
+ "JP": {
+ "name": "Dzàkpân"
+ },
+ "DE": {
+ "name": "Dzamanè"
+ },
+ "JM": {
+ "name": "Dzàmɛkà"
+ },
+ "GI": {
+ "name": "Dzibɨ̀latà"
+ },
+ "DJ": {
+ "name": "Dzìbuwtì"
+ },
+ "JO": {
+ "name": "Dzodàn"
+ },
+ "GE": {
+ "name": "Dzɔɔdzìa"
+ },
+ "EG": {
+ "name": "Edzì"
+ },
+ "EC": {
+ "name": "Ekwadò"
+ },
+ "GQ": {
+ "name": "Èkwɛ̀tolia Ginè"
+ },
+ "IQ": {
+ "name": "Èlâkɨ̀"
+ },
+ "IR": {
+ "name": "Èlân"
+ },
+ "ER": {
+ "name": "Èletɨ̀là"
+ },
+ "IN": {
+ "name": "Endìa"
+ },
+ "ID": {
+ "name": "Èndòneshìa"
+ },
+ "TL": {
+ "name": "Ês Taemò"
+ },
+ "SV": {
+ "name": "Esàvadò"
+ },
+ "EE": {
+ "name": "Èsɨ̀tonyìa"
+ },
+ "IT": {
+ "name": "Etalè"
+ },
+ "ET": {
+ "name": "Ètyǒpìa"
+ },
+ "IL": {
+ "name": "Ezɨ̀lɛ̂"
+ },
+ "FR": {
+ "name": "Fàlâŋnsì"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "PH": {
+ "name": "Felèkpî"
+ },
+ "FJ": {
+ "name": "Fidzi"
+ },
+ "FI": {
+ "name": "Fɨnlàn"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GH": {
+ "name": "Gaanà"
+ },
+ "GA": {
+ "name": "Gàbûn"
+ },
+ "GM": {
+ "name": "Gambìa"
+ },
+ "GF": {
+ "name": "Gàyanà è Fàlâŋnsì"
+ },
+ "GN": {
+ "name": "Ginè"
+ },
+ "GW": {
+ "name": "Ginè Bìsawù"
+ },
+ "NG": {
+ "name": "Gɨ̀anyɨ"
+ },
+ "GL": {
+ "name": "Gɨ̀lenlân"
+ },
+ "GR": {
+ "name": "Gɨ̀lês"
+ },
+ "GD": {
+ "name": "Gɨ̀lɛnadà"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Gùyanà"
+ },
+ "GP": {
+ "name": "Gwadalukpɛ̀"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwàtɨ̀malà"
+ },
+ "HT": {
+ "name": "Hǎetì"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HN": {
+ "name": "Hɔndulàs"
+ },
+ "HU": {
+ "name": "Hɔŋgàlè"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "NC": {
+ "name": "Kàlèdonyìa È fūghū"
+ },
+ "CM": {
+ "name": "Kàmàlûŋ"
+ },
+ "KH": {
+ "name": "Kàmbodìa"
+ },
+ "CA": {
+ "name": "Kanadà"
+ },
+ "QA": {
+ "name": "Katà"
+ },
+ "KZ": {
+ "name": "Kàzasɨ̀tân"
+ },
+ "KI": {
+ "name": "Kèlèbati"
+ },
+ "KG": {
+ "name": "Kìdzisɨ̀tân"
+ },
+ "KE": {
+ "name": "Kɨnyà"
+ },
+ "CO": {
+ "name": "Kòlombìa"
+ },
+ "KM": {
+ "name": "Komolòs"
+ },
+ "CR": {
+ "name": "Kòsɨ̀tà Lekà"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "HR": {
+ "name": "Kòwɛshìa"
+ },
+ "PK": {
+ "name": "Kpakìsɨ̀tân"
+ },
+ "PG": {
+ "name": "Kpakpua Ginè È fūghū"
+ },
+ "PY": {
+ "name": "Kpalàgwɛ̂"
+ },
+ "PW": {
+ "name": "Kpàlawù"
+ },
+ "PA": {
+ "name": "Kpanàma"
+ },
+ "PE": {
+ "name": "Kpɛlû"
+ },
+ "PN": {
+ "name": "Kpitɨ̀kalè"
+ },
+ "PF": {
+ "name": "Kpoleneshìa è Fàlâŋnsì"
+ },
+ "PR": {
+ "name": "KpÇ’to Leko"
+ },
+ "PL": {
+ "name": "Kpulàn"
+ },
+ "PT": {
+ "name": "Kputuwgà"
+ },
+ "CI": {
+ "name": "Ku Dɨ̀vûa"
+ },
+ "CG": {
+ "name": "Kuŋgù"
+ },
+ "KP": {
+ "name": "Kùulîa, Ekùw"
+ },
+ "KR": {
+ "name": "Kùulîa, Emàm"
+ },
+ "CU": {
+ "name": "Kuuwbà"
+ },
+ "KW": {
+ "name": "Kùwɛ̂"
+ },
+ "LR": {
+ "name": "Làebɛlìa"
+ },
+ "LV": {
+ "name": "Làtɨva"
+ },
+ "LA": {
+ "name": "Làwos"
+ },
+ "LY": {
+ "name": "Lebìa"
+ },
+ "LI": {
+ "name": "Letɨnshɨ̀n"
+ },
+ "LT": {
+ "name": "Lètwǎnyìa"
+ },
+ "RE": {
+ "name": "Lèyunyɔ̀ŋ"
+ },
+ "LB": {
+ "name": "Lɛbanè"
+ },
+ "LS": {
+ "name": "Lɛ̀sotù"
+ },
+ "RU": {
+ "name": "Loshìa"
+ },
+ "RO": {
+ "name": "Lùmanyìa"
+ },
+ "RW": {
+ "name": "Lùwandà"
+ },
+ "LU": {
+ "name": "Luzɨmbùʔ"
+ },
+ "MT": {
+ "name": "Maatà"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Màdàgasɨkà"
+ },
+ "MV": {
+ "name": "Màdivè"
+ },
+ "FM": {
+ "name": "Maekòlòneshìa"
+ },
+ "MW": {
+ "name": "Màlawì"
+ },
+ "ML": {
+ "name": "Malè"
+ },
+ "MY": {
+ "name": "Màlɛshìa"
+ },
+ "MQ": {
+ "name": "Màtìnekì"
+ },
+ "YT": {
+ "name": "Màyotì"
+ },
+ "BT": {
+ "name": "Mbutàn"
+ },
+ "MX": {
+ "name": "Mɛkɨzikù"
+ },
+ "MM": {
+ "name": "MÇanmà"
+ },
+ "MK": {
+ "name": "Mɨ̀sɨ̀donyìa"
+ },
+ "MA": {
+ "name": "Mòlokò"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MD": {
+ "name": "Mòodovà"
+ },
+ "MU": {
+ "name": "Mùleshwɨ̀s"
+ },
+ "MR": {
+ "name": "Mùlètanyìa"
+ },
+ "MC": {
+ "name": "Mùnaku"
+ },
+ "MN": {
+ "name": "Mùŋgolìa"
+ },
+ "MS": {
+ "name": "Mùŋtselà"
+ },
+ "MZ": {
+ "name": "Mùzàmbî"
+ },
+ "NE": {
+ "name": "Naedzà"
+ },
+ "NA": {
+ "name": "Nàmibìa"
+ },
+ "NR": {
+ "name": "Nàwulù"
+ },
+ "NL": {
+ "name": "Nedàlân"
+ },
+ "NP": {
+ "name": "Nɛkpâa"
+ },
+ "NI": {
+ "name": "Nikàlagwà"
+ },
+ "NU": {
+ "name": "Niyu"
+ },
+ "NO": {
+ "name": "Noowɛ̂ɛ"
+ },
+ "CY": {
+ "name": "Saekpùlù"
+ },
+ "WS": {
+ "name": "Sàmowà"
+ },
+ "SM": {
+ "name": "Sàn Màlenù"
+ },
+ "ST": {
+ "name": "Sawo Tɔ̀me à Kpèlènsikpɛ̀"
+ },
+ "SA": {
+ "name": "Sawudi Alabi"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Sɛchɛ̀lɛ̀s"
+ },
+ "SH": {
+ "name": "Sɛ̀n Èlenà"
+ },
+ "KN": {
+ "name": "Sɛ̀n Kî à Nevì"
+ },
+ "PM": {
+ "name": "Sɛ̀n Kpiyɛ̀ à Mikelɔŋ"
+ },
+ "LC": {
+ "name": "Sɛ̀n Lushìa"
+ },
+ "VC": {
+ "name": "Sɛ̀n Vinsɨ̀n à Gɨlenadi Ù tē"
+ },
+ "SN": {
+ "name": "Sɛ̀nɛ̀gâa"
+ },
+ "CF": {
+ "name": "Sɛnta Afɨlekan Lèkpobèlè"
+ },
+ "SZ": {
+ "name": "Shǔazìlân"
+ },
+ "SY": {
+ "name": "Silîa"
+ },
+ "SL": {
+ "name": "Silìa lûŋ"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SG": {
+ "name": "Siŋgàkpôo"
+ },
+ "ES": {
+ "name": "Sɨ̀kpɛ̂n"
+ },
+ "LK": {
+ "name": "Sɨ̀le Laŋkà"
+ },
+ "SK": {
+ "name": "Sɨ̀lòvɨkɨ̀a"
+ },
+ "SI": {
+ "name": "Sɨ̀lòvɨnyìa"
+ },
+ "SO": {
+ "name": "Sòmalìa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sùdân"
+ },
+ "SE": {
+ "name": "Suedɨ̀n"
+ },
+ "CH": {
+ "name": "Suezàlân"
+ },
+ "SR": {
+ "name": "Sulènamè"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TZ": {
+ "name": "Tàanzanyìa"
+ },
+ "TJ": {
+ "name": "Tàdzikìsɨ̀tân"
+ },
+ "TH": {
+ "name": "Taelàn"
+ },
+ "TW": {
+ "name": "Taewàn"
+ },
+ "TR": {
+ "name": "Teekì"
+ },
+ "TM": {
+ "name": "Tekɨmènèsɨ̀tân"
+ },
+ "TT": {
+ "name": "Tèlenedà à Tòbagù"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TG": {
+ "name": "Tugù"
+ },
+ "TN": {
+ "name": "Tùneshìa"
+ },
+ "TO": {
+ "name": "Tuŋgà"
+ },
+ "TK": {
+ "name": "Tuwkelawù"
+ },
+ "TV": {
+ "name": "Tuwvalùw"
+ },
+ "VI": {
+ "name": "U. S. Chwɨlà fɨ Mbuʔmbu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "OM": {
+ "name": "Umàn"
+ },
+ "US": {
+ "name": "USA"
+ },
+ "AU": {
+ "name": "Ùsɨ̀tɛ̀lɛlìa"
+ },
+ "AT": {
+ "name": "Usɨtɨ̀là"
+ },
+ "VU": {
+ "name": "Vànǔatùw"
+ },
+ "VA": {
+ "name": "Vatikàn Sɨ̀tɛ̂"
+ },
+ "VE": {
+ "name": "Vɛ̀nɛ̀zǔɛɛlà"
+ },
+ "VN": {
+ "name": "Vìyɛnàm"
+ },
+ "WF": {
+ "name": "Wales à Fùwtuwnà"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yɛmɛ̀n"
+ },
+ "UG": {
+ "name": "Yùgandà"
+ },
+ "UA": {
+ "name": "Yùkɛ̀lɛ̂"
+ },
+ "UY": {
+ "name": "Yulùgwɛ̂"
+ },
+ "AE": {
+ "name": "Yùnaetɛ Alab ɛmelɛ̀"
+ },
+ "GB": {
+ "name": "Yùnaetɛ Kiŋdɔ̀m"
+ },
+ "UZ": {
+ "name": "Yùzɨ̀bɛkìsɨ̀tân"
+ },
+ "ZM": {
+ "name": "Zambìa"
+ },
+ "NZ": {
+ "name": "Zìlân È fūghū"
+ },
+ "ZW": {
+ "name": "Zìmbagbɛ̀"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ak.json b/library/intl/resources/country/ak.json
new file mode 100644
index 000000000..92ccb39c3
--- /dev/null
+++ b/library/intl/resources/country/ak.json
@@ -0,0 +1,761 @@
+{
+ "AM": {
+ "name": "Aamenia"
+ },
+ "IE": {
+ "name": "Aereland"
+ },
+ "IS": {
+ "name": "Aesland"
+ },
+ "AF": {
+ "name": "Afganistan"
+ },
+ "ZA": {
+ "name": "Afrika Anaafo"
+ },
+ "CF": {
+ "name": "Afrika Finimfin Man"
+ },
+ "AR": {
+ "name": "Agyɛntina"
+ },
+ "GB": {
+ "name": "Ahendiman Nkabom"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albenia"
+ },
+ "US": {
+ "name": "Amɛrika"
+ },
+ "AS": {
+ "name": "Amɛrika Samoa"
+ },
+ "VI": {
+ "name": "Amɛrika Virgin Islands"
+ },
+ "KR": {
+ "name": "Anaafo Koria"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua ne Baabuda"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AZ": {
+ "name": "Azebaegyan"
+ },
+ "BB": {
+ "name": "Baabados"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BD": {
+ "name": "Bangladɛhye"
+ },
+ "BH": {
+ "name": "Baren"
+ },
+ "BZ": {
+ "name": "Beliz"
+ },
+ "BY": {
+ "name": "Bɛlarus"
+ },
+ "BE": {
+ "name": "Bɛlgyium"
+ },
+ "BM": {
+ "name": "Bɛmuda"
+ },
+ "BJ": {
+ "name": "Bɛnin"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia ne Hɛzegovina"
+ },
+ "BF": {
+ "name": "Bɔkina Faso"
+ },
+ "BG": {
+ "name": "Bɔlgeria"
+ },
+ "BW": {
+ "name": "Bɔtswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "VG": {
+ "name": "Britainfo Virgin Islands"
+ },
+ "IO": {
+ "name": "Britenfo Hɔn Man Wɔ India Po No Mu"
+ },
+ "BN": {
+ "name": "Brunae"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butan"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Dɛnmak"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dɔmeneka"
+ },
+ "DO": {
+ "name": "Dɔmeneka Kurokɛse"
+ },
+ "KP": {
+ "name": "Etifi Koria"
+ },
+ "SV": {
+ "name": "Æl SalvadÉ”"
+ },
+ "ER": {
+ "name": "Æritrea"
+ },
+ "EE": {
+ "name": "Æstonia"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Figyi"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FK": {
+ "name": "Fɔlkman Aeland"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GF": {
+ "name": "Frɛnkye Gayana"
+ },
+ "PF": {
+ "name": "Frɛnkye Pɔlenehyia"
+ },
+ "FR": {
+ "name": "Frɛnkyeman"
+ },
+ "GH": {
+ "name": "Gaana"
+ },
+ "GA": {
+ "name": "Gabɔn"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GY": {
+ "name": "Gayana"
+ },
+ "GN": {
+ "name": "Gini"
+ },
+ "GW": {
+ "name": "Gini Bisaw"
+ },
+ "GQ": {
+ "name": "Gini Ikuweta"
+ },
+ "GR": {
+ "name": "Greekman"
+ },
+ "GL": {
+ "name": "Greenman"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GP": {
+ "name": "Guwadelup"
+ },
+ "GT": {
+ "name": "Guwatemala"
+ },
+ "DE": {
+ "name": "Gyaaman"
+ },
+ "JM": {
+ "name": "Gyameka"
+ },
+ "JP": {
+ "name": "Gyapan"
+ },
+ "GI": {
+ "name": "Gyebralta"
+ },
+ "DJ": {
+ "name": "Gyibuti"
+ },
+ "JO": {
+ "name": "Gyɔdan"
+ },
+ "GE": {
+ "name": "Gyɔgyea"
+ },
+ "HU": {
+ "name": "Hangari"
+ },
+ "HT": {
+ "name": "Heiti"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HN": {
+ "name": "Hɔnduras"
+ },
+ "EC": {
+ "name": "IkuwadÉ”"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indɔnehyia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Itali"
+ },
+ "ET": {
+ "name": "Ithiopia"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "NC": {
+ "name": "Kaledonia Foforo"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kamɛrun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Kata"
+ },
+ "KZ": {
+ "name": "Kazakstan"
+ },
+ "KY": {
+ "name": "Kemanfo Islands"
+ },
+ "CV": {
+ "name": "Kepvɛdfo Islands"
+ },
+ "KG": {
+ "name": "Kɛɛgestan"
+ },
+ "KE": {
+ "name": "Kɛnya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "CD": {
+ "name": "Kongo (Zair)"
+ },
+ "CK": {
+ "name": "Kook Nsupɔw"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KM": {
+ "name": "Kɔmɔrɔs"
+ },
+ "CR": {
+ "name": "Kɔsta Rika"
+ },
+ "HR": {
+ "name": "Krowehyia"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuwete"
+ },
+ "TD": {
+ "name": "Kyad"
+ },
+ "CN": {
+ "name": "Kyaena"
+ },
+ "CZ": {
+ "name": "Kyɛk Kurokɛse"
+ },
+ "CL": {
+ "name": "Kyili"
+ },
+ "CI": {
+ "name": "La Côte d’Ivoire"
+ },
+ "LR": {
+ "name": "Laeberia"
+ },
+ "LU": {
+ "name": "Laksembɛg"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LI": {
+ "name": "Lektenstaen"
+ },
+ "LB": {
+ "name": "Lɛbanɔn"
+ },
+ "LS": {
+ "name": "Lɛsutu"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LT": {
+ "name": "Lituwenia"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madagaska"
+ },
+ "FM": {
+ "name": "Maekronehyia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "MY": {
+ "name": "Malehyia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MS": {
+ "name": "Mantserat"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MK": {
+ "name": "Masedonia"
+ },
+ "MQ": {
+ "name": "Matinik"
+ },
+ "YT": {
+ "name": "Mayɔte"
+ },
+ "MX": {
+ "name": "Mɛksiko"
+ },
+ "MM": {
+ "name": "Miyanma"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MA": {
+ "name": "Moroko"
+ },
+ "MZ": {
+ "name": "Mozambik"
+ },
+ "MD": {
+ "name": "Mɔldova"
+ },
+ "MT": {
+ "name": "Mɔlta"
+ },
+ "MC": {
+ "name": "Mɔnako"
+ },
+ "MN": {
+ "name": "Mɔngolia"
+ },
+ "MU": {
+ "name": "Mɔrehyeɔs"
+ },
+ "MR": {
+ "name": "Mɔretenia"
+ },
+ "NG": {
+ "name": "Naegyeria"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Naworu"
+ },
+ "NI": {
+ "name": "Nekaraguwa"
+ },
+ "NL": {
+ "name": "Nɛdɛland"
+ },
+ "NP": {
+ "name": "Nɛpɔl"
+ },
+ "NE": {
+ "name": "NigyÉ›"
+ },
+ "EG": {
+ "name": "Nisrim"
+ },
+ "NU": {
+ "name": "Niyu"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NF": {
+ "name": "Nɔfolk Aeland"
+ },
+ "NO": {
+ "name": "Nɔɔwe"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "DZ": {
+ "name": "Ɔlgyeria"
+ },
+ "AU": {
+ "name": "Ɔstrelia"
+ },
+ "AT": {
+ "name": "Ɔstria"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestaen West Bank ne Gaza"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Guinea Foforo"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Pɔtugal"
+ },
+ "PR": {
+ "name": "Puɛto Riko"
+ },
+ "RE": {
+ "name": "Reyuniɔn"
+ },
+ "RO": {
+ "name": "Romenia"
+ },
+ "RU": {
+ "name": "Rɔhyea"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "CY": {
+ "name": "Saeprɔs"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts ne Nɛves"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "PM": {
+ "name": "Saint Pierre ne Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vincent ne Grenadines"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seyhyɛl"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "SingapÉ”"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovinia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Swetzaland"
+ },
+ "TH": {
+ "name": "Taeland"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TR": {
+ "name": "Tɛɛki"
+ },
+ "TM": {
+ "name": "Tɛkmɛnistan"
+ },
+ "TL": {
+ "name": "TimÉ” Boka"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad ne Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunihyia"
+ },
+ "TC": {
+ "name": "Turks ne Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukren"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "UZ": {
+ "name": "Uzbɛkistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican Man"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Viɛtnam"
+ },
+ "WF": {
+ "name": "Wallis ne Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yɛmen"
+ },
+ "UY": {
+ "name": "Yurugwae"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zembabwe"
+ },
+ "NZ": {
+ "name": "Ziland Foforo"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/am.json b/library/intl/resources/country/am.json
new file mode 100644
index 000000000..ea86c156d
--- /dev/null
+++ b/library/intl/resources/country/am.json
@@ -0,0 +1,761 @@
+{
+ "HU": {
+ "name": "ሀንጋሪ"
+ },
+ "HT": {
+ "name": "ሀይቲ"
+ },
+ "IN": {
+ "name": "ህንድ"
+ },
+ "HN": {
+ "name": "ሆንዱራስ"
+ },
+ "HK": {
+ "name": "ሆንጠኮንጠSAR ቻይና"
+ },
+ "LU": {
+ "name": "ሉክሰáˆá‰ áˆ­áŒ"
+ },
+ "LY": {
+ "name": "ሊቢያ"
+ },
+ "LB": {
+ "name": "ሊባኖስ"
+ },
+ "LT": {
+ "name": "ሊቱዌኒያ"
+ },
+ "LI": {
+ "name": "ሊችተንስታይን"
+ },
+ "LV": {
+ "name": "ላትቪያ"
+ },
+ "LA": {
+ "name": "ላኦስ"
+ },
+ "LR": {
+ "name": "ላይቤሪያ"
+ },
+ "LS": {
+ "name": "ሌሶቶ"
+ },
+ "MK": {
+ "name": "መቄዶንያ"
+ },
+ "FM": {
+ "name": "ሚክሮኔዢያ"
+ },
+ "ML": {
+ "name": "ማሊ"
+ },
+ "MW": {
+ "name": "ማላዊ"
+ },
+ "MY": {
+ "name": "ማሌዢያ"
+ },
+ "MT": {
+ "name": "ማáˆá‰³"
+ },
+ "MV": {
+ "name": "ማáˆá‹²á‰­áˆµ"
+ },
+ "MH": {
+ "name": "ማርሻሠአይላንድ"
+ },
+ "MQ": {
+ "name": "ማርቲኒክ"
+ },
+ "MO": {
+ "name": "ማካኡ áˆá‹© የአስተዳደር ክáˆáˆ ቻይና"
+ },
+ "MM": {
+ "name": "ማይናማር(በርማ)"
+ },
+ "MG": {
+ "name": "ማዳጋስካር"
+ },
+ "MX": {
+ "name": "ሜክሲኮ"
+ },
+ "YT": {
+ "name": "ሜይኦቴ"
+ },
+ "TL": {
+ "name": "áˆáˆµáˆ«á‰… ሌስት"
+ },
+ "EH": {
+ "name": "áˆá‹•áˆ«á‰£á‹Š ሳህራ"
+ },
+ "MD": {
+ "name": "ሞáˆá‹¶á‰«"
+ },
+ "MU": {
+ "name": "ሞሪሸስ"
+ },
+ "MR": {
+ "name": "ሞሪቴኒያ"
+ },
+ "MA": {
+ "name": "ሞሮኮ"
+ },
+ "MC": {
+ "name": "ሞናኮ"
+ },
+ "ME": {
+ "name": "ሞንተኔáŒáˆ®"
+ },
+ "MS": {
+ "name": "ሞንትሴራት"
+ },
+ "MN": {
+ "name": "ሞንጎሊያ"
+ },
+ "MZ": {
+ "name": "ሞዛáˆá‰¢áŠ­"
+ },
+ "RW": {
+ "name": "ሩዋንዳ"
+ },
+ "RE": {
+ "name": "ሪዩኒየን"
+ },
+ "RU": {
+ "name": "ራሺያ"
+ },
+ "RO": {
+ "name": "ሮሜኒያ"
+ },
+ "SB": {
+ "name": "ሰሎሞን ደሴት"
+ },
+ "KP": {
+ "name": "ሰሜን ኮሪያ"
+ },
+ "RS": {
+ "name": "ሰርብያ"
+ },
+ "SO": {
+ "name": "ሱማሌ"
+ },
+ "SR": {
+ "name": "ሱሪናáˆ"
+ },
+ "SZ": {
+ "name": "ሱዋዚላንድ"
+ },
+ "SD": {
+ "name": "ሱዳን"
+ },
+ "LK": {
+ "name": "ሲሪላንካ"
+ },
+ "SY": {
+ "name": "ሲሪያ"
+ },
+ "SC": {
+ "name": "ሲሼáˆáˆµ"
+ },
+ "SX": {
+ "name": "ሲንት ማርተን"
+ },
+ "SG": {
+ "name": "ሲንጋá–ር"
+ },
+ "WS": {
+ "name": "ሳሞአ"
+ },
+ "SM": {
+ "name": "ሳን ማሪኖ"
+ },
+ "ST": {
+ "name": "ሳኦ ቶሜ እና á•áˆªáŠ•áˆ²á”"
+ },
+ "SA": {
+ "name": "ሳá‹á‹µáŠ áˆ¨á‰¢á‹«"
+ },
+ "CY": {
+ "name": "ሳይá•áˆ¨áˆµ"
+ },
+ "SL": {
+ "name": "ሴራሊዮን"
+ },
+ "SN": {
+ "name": "ሴኔጋáˆ"
+ },
+ "SH": {
+ "name": "ሴንት ሄለና"
+ },
+ "LC": {
+ "name": "ሴንት ሉቺያ"
+ },
+ "MF": {
+ "name": "ሴንት ማርቲን"
+ },
+ "EA": {
+ "name": "ሴኡታና ሜሊላ"
+ },
+ "SK": {
+ "name": "ስሎቫኪያ"
+ },
+ "SI": {
+ "name": "ስሎቬኒያ"
+ },
+ "SJ": {
+ "name": "ስቫáˆá‰£áˆ­á‹µ እና ጃን ማየን"
+ },
+ "CH": {
+ "name": "ስዊዘርላንድ"
+ },
+ "SE": {
+ "name": "ስዊድን"
+ },
+ "ES": {
+ "name": "ስá”ን"
+ },
+ "BL": {
+ "name": "ቅዱስ በርቴሎሜ"
+ },
+ "VC": {
+ "name": "ቅዱስ ቪንሴንት እና áŒáˆ¬áŠ“ዲንስ"
+ },
+ "KN": {
+ "name": "ቅዱስ ኪትስ እና ኔቪስ"
+ },
+ "PM": {
+ "name": "ቅዱስ á’ዬር እና ሚኩኤሎን"
+ },
+ "BT": {
+ "name": "ቡህታን"
+ },
+ "BG": {
+ "name": "ቡáˆáŒŒáˆªá‹«"
+ },
+ "BF": {
+ "name": "ቡርኪና á‹áˆ¶"
+ },
+ "BS": {
+ "name": "ባሃማስ"
+ },
+ "BH": {
+ "name": "ባህሬን"
+ },
+ "BB": {
+ "name": "ባርቤዶስ"
+ },
+ "BD": {
+ "name": "ባንáŒáˆ‹á‹²áˆ½"
+ },
+ "BZ": {
+ "name": "ቤሊዘ"
+ },
+ "BY": {
+ "name": "ቤላሩስ"
+ },
+ "BE": {
+ "name": "ቤáˆáŒ„áˆ"
+ },
+ "BM": {
+ "name": "ቤርሙዳ"
+ },
+ "BJ": {
+ "name": "ቤኒን"
+ },
+ "BN": {
+ "name": "ብሩኒ"
+ },
+ "BI": {
+ "name": "ብሩንዲ"
+ },
+ "BR": {
+ "name": "ብራዚáˆ"
+ },
+ "BO": {
+ "name": "ቦሊቪያ"
+ },
+ "BA": {
+ "name": "ቦስኒያ እና ሄርዞጎቪኒያ"
+ },
+ "BW": {
+ "name": "ቦትስዋና"
+ },
+ "VA": {
+ "name": "ቫቲካን ከተማ"
+ },
+ "VU": {
+ "name": "ቫኑአቱ"
+ },
+ "VN": {
+ "name": "ቬትናáˆ"
+ },
+ "VE": {
+ "name": "ቬንዙዌላ"
+ },
+ "TR": {
+ "name": "ቱርክ"
+ },
+ "TM": {
+ "name": "ቱርክሜኒስታን"
+ },
+ "TV": {
+ "name": "ቱቫሉ"
+ },
+ "TN": {
+ "name": "ቱኒዚያ"
+ },
+ "TZ": {
+ "name": "ታንዛኒያ"
+ },
+ "TH": {
+ "name": "ታይላንድ"
+ },
+ "TW": {
+ "name": "ታይዋን"
+ },
+ "TJ": {
+ "name": "ታጃኪስታን"
+ },
+ "TA": {
+ "name": "ትሪስታን ዲ ኩንሃ"
+ },
+ "TT": {
+ "name": "ትሪናዳድ እና ቶቤጎ"
+ },
+ "TO": {
+ "name": "ቶንጋ"
+ },
+ "TK": {
+ "name": "ቶክላá‹"
+ },
+ "TG": {
+ "name": "ቶáŒ"
+ },
+ "CL": {
+ "name": "ቺሊ"
+ },
+ "CN": {
+ "name": "ቻይና"
+ },
+ "TD": {
+ "name": "ቻድ"
+ },
+ "CZ": {
+ "name": "ቼክ ሪá‘ብሊክ"
+ },
+ "NU": {
+ "name": "ኒኡይ"
+ },
+ "NI": {
+ "name": "ኒካራጓ"
+ },
+ "NC": {
+ "name": "ኒዠካሌዶኒያ"
+ },
+ "NZ": {
+ "name": "ኒዠዚላንድ"
+ },
+ "NE": {
+ "name": "ኒጀር"
+ },
+ "NA": {
+ "name": "ናሚቢያ"
+ },
+ "NR": {
+ "name": "ናኡሩ"
+ },
+ "NG": {
+ "name": "ናይጄሪያ"
+ },
+ "NL": {
+ "name": "ኔዘርላንድ"
+ },
+ "NP": {
+ "name": "ኔá“áˆ"
+ },
+ "NO": {
+ "name": "ኖርዌ"
+ },
+ "NF": {
+ "name": "ኖርáŽáˆáŠ­ ደሴት"
+ },
+ "AL": {
+ "name": "አáˆá‰£áŠ’á‹«"
+ },
+ "DZ": {
+ "name": "አáˆáŒ„ሪያ"
+ },
+ "AW": {
+ "name": "አሩባ"
+ },
+ "AM": {
+ "name": "አርሜኒያ"
+ },
+ "AR": {
+ "name": "አርጀንቲና"
+ },
+ "AC": {
+ "name": "አሴንሽን ደሴት"
+ },
+ "AG": {
+ "name": "አንቲጓ እና ባሩዳ"
+ },
+ "AQ": {
+ "name": "አንታርክቲካ"
+ },
+ "AD": {
+ "name": "አንዶራ"
+ },
+ "AI": {
+ "name": "አንጉኢላ"
+ },
+ "AO": {
+ "name": "አንáŒáˆ‹"
+ },
+ "AU": {
+ "name": "አá‹áˆµá‰µáˆ«áˆá‹«"
+ },
+ "AZ": {
+ "name": "አዘርባጃን"
+ },
+ "IE": {
+ "name": "አየርላንድ"
+ },
+ "IM": {
+ "name": "አይሠኦá ማን"
+ },
+ "IS": {
+ "name": "አይስላንድ"
+ },
+ "AF": {
+ "name": "አáጋኒስታን"
+ },
+ "UY": {
+ "name": "ኡራጓይ"
+ },
+ "UZ": {
+ "name": "ኡá‹á‰¤áŠªáˆµá‰³áŠ•"
+ },
+ "IQ": {
+ "name": "ኢራቅ"
+ },
+ "IR": {
+ "name": "ኢራን"
+ },
+ "ET": {
+ "name": "ኢትዮጵያ"
+ },
+ "ID": {
+ "name": "ኢንዶኔዢያ"
+ },
+ "GQ": {
+ "name": "ኢኳቶሪያሠጊኒ"
+ },
+ "EC": {
+ "name": "ኢኳዶር"
+ },
+ "SV": {
+ "name": "ኤሠሳáˆá‰«á‹¶áˆ­"
+ },
+ "ER": {
+ "name": "ኤርትራ"
+ },
+ "EE": {
+ "name": "ኤስቶኒያ"
+ },
+ "IL": {
+ "name": "እስራኤáˆ"
+ },
+ "GB": {
+ "name": "እንáŒáˆŠá‹"
+ },
+ "OM": {
+ "name": "ኦማን"
+ },
+ "AT": {
+ "name": "ኦስትሪያ"
+ },
+ "CW": {
+ "name": "ኩራሳዎ"
+ },
+ "CU": {
+ "name": "ኩባ"
+ },
+ "CK": {
+ "name": "ኩክ ደሴቶች"
+ },
+ "KI": {
+ "name": "ኪሪባቲ"
+ },
+ "KG": {
+ "name": "ኪርጊስታን"
+ },
+ "CM": {
+ "name": "ካሜሩን"
+ },
+ "KH": {
+ "name": "ካáˆá‰¦á‹²á‹«"
+ },
+ "CA": {
+ "name": "ካናዳ"
+ },
+ "KZ": {
+ "name": "ካዛኪስታን"
+ },
+ "KY": {
+ "name": "ካይማን ደሴቶች"
+ },
+ "KE": {
+ "name": "ኬንያ"
+ },
+ "CV": {
+ "name": "ኬᕠቬርዴ"
+ },
+ "HR": {
+ "name": "ክሮኤሽያ"
+ },
+ "KW": {
+ "name": "ክዌት"
+ },
+ "CO": {
+ "name": "ኮሎáˆá‰¢á‹«"
+ },
+ "KM": {
+ "name": "ኮሞሮስ"
+ },
+ "CR": {
+ "name": "ኮስታ ሪካ"
+ },
+ "XK": {
+ "name": "ኮሶቮ"
+ },
+ "CI": {
+ "name": "ኮት ዲቯር"
+ },
+ "CG": {
+ "name": "ኮንጎ ብራዛቪáˆ"
+ },
+ "CD": {
+ "name": "ኮንጎ-ኪንሻሳ"
+ },
+ "CC": {
+ "name": "ኮኮስ(ኬሊንáŒ) ደሴቶች"
+ },
+ "QA": {
+ "name": "ኳታር"
+ },
+ "WF": {
+ "name": "ዋሊስ እና á‰á‰±áŠ“ ደሴቶች"
+ },
+ "ZW": {
+ "name": "á‹šáˆá‰§á‰¤"
+ },
+ "ZM": {
+ "name": "á‹›áˆá‰¢á‹«"
+ },
+ "YE": {
+ "name": "የመን"
+ },
+ "CF": {
+ "name": "የመካከለኛዠአáሪካ ሪáብሊክ"
+ },
+ "MP": {
+ "name": "የሰሜናዊ ማሪያና ደሴቶች"
+ },
+ "IO": {
+ "name": "የብሪታኒያ ህንድ á‹á‰‚ያኖስ áŒá‹›á‰µ"
+ },
+ "AE": {
+ "name": "የተባበሩት አረብ ኤáˆáˆ¬á‰µáˆµ"
+ },
+ "TC": {
+ "name": "የቱርኮችና የካኢኮስ ደሴቶች"
+ },
+ "AX": {
+ "name": "የአላንድ ደሴቶች"
+ },
+ "AS": {
+ "name": "የአሜሪካ ሳሞአ"
+ },
+ "VI": {
+ "name": "የአሜሪካ ቨርጂን ደሴቶች"
+ },
+ "VG": {
+ "name": "የእንáŒáˆŠá‹ ቨርጂን ደሴቶች"
+ },
+ "BQ": {
+ "name": "የካሪቢያን ኔዘርላንድስ"
+ },
+ "IC": {
+ "name": "የካናሪ ደሴቶች"
+ },
+ "UM": {
+ "name": "የዩ ኤስ ጠረá ላይ ያሉ ደሴቶች"
+ },
+ "CX": {
+ "name": "የገና ደሴት"
+ },
+ "TF": {
+ "name": "የáˆáˆ¨áŠ•áˆ³á‹­ ደቡባዊ áŒá‹›á‰¶á‰½"
+ },
+ "GF": {
+ "name": "የáˆáˆ¨áŠ•áˆ³á‹­ ጉዊአና"
+ },
+ "PF": {
+ "name": "የáˆáˆ¨áŠ•áˆ³á‹­ á–ሊኔዢያ"
+ },
+ "FO": {
+ "name": "የá‹áˆ® ደሴቶች"
+ },
+ "PS": {
+ "name": "የááˆáˆµáŒ¤áˆ áŒá‹›á‰µ"
+ },
+ "FK": {
+ "name": "የáŽáŠ­áˆ‹áŠ•á‹µ ደሴቶች"
+ },
+ "US": {
+ "name": "ዩናይትድ ስቴትስ"
+ },
+ "UA": {
+ "name": "ዩክሬን"
+ },
+ "UG": {
+ "name": "ዩጋንዳ"
+ },
+ "SS": {
+ "name": "ደቡብ ሱዳን"
+ },
+ "ZA": {
+ "name": "ደቡብ አáሪካ"
+ },
+ "KR": {
+ "name": "ደቡብ ኮሪያ"
+ },
+ "GS": {
+ "name": "ደቡብ ጆርጂያ እና የደቡብ ሳንድዊች ደሴቶች"
+ },
+ "DG": {
+ "name": "ዲዬጎ ጋርሺያ"
+ },
+ "DK": {
+ "name": "ዴንማርክ"
+ },
+ "DM": {
+ "name": "ዶሚኒካ"
+ },
+ "DO": {
+ "name": "ዶሚኒክ ሪá‘ብሊክ"
+ },
+ "DE": {
+ "name": "ጀርመን"
+ },
+ "JE": {
+ "name": "ጀርሲ"
+ },
+ "DJ": {
+ "name": "ጂቡቲ"
+ },
+ "GI": {
+ "name": "ጂብራáˆá‰°áˆ­"
+ },
+ "JM": {
+ "name": "ጃማይካ"
+ },
+ "JP": {
+ "name": "ጃá“ን"
+ },
+ "JO": {
+ "name": "ጆርዳን"
+ },
+ "GE": {
+ "name": "ጆርጂያ"
+ },
+ "GG": {
+ "name": "ጉርáŠáˆ²"
+ },
+ "GU": {
+ "name": "ጉዋáˆ"
+ },
+ "GT": {
+ "name": "ጉዋቲማላ"
+ },
+ "GP": {
+ "name": "ጉዋደሉá•"
+ },
+ "GY": {
+ "name": "ጉያና"
+ },
+ "GN": {
+ "name": "ጊኒ"
+ },
+ "GW": {
+ "name": "ጊኒ ቢሳኦ"
+ },
+ "GM": {
+ "name": "ጋáˆá‰¢á‹«"
+ },
+ "GA": {
+ "name": "ጋቦን"
+ },
+ "GH": {
+ "name": "ጋና"
+ },
+ "GL": {
+ "name": "áŒáˆªáŠ•áˆ‹áŠ•á‹µ"
+ },
+ "GR": {
+ "name": "áŒáˆªáŠ­"
+ },
+ "GD": {
+ "name": "áŒáˆ¬áŠ“ዳ"
+ },
+ "EG": {
+ "name": "áŒá‰¥áŒ½"
+ },
+ "IT": {
+ "name": "ጣሊያን"
+ },
+ "FR": {
+ "name": "áˆáˆ¨áŠ•áˆ³á‹­"
+ },
+ "PH": {
+ "name": "áŠáˆŠá’ንስ"
+ },
+ "FI": {
+ "name": "áŠáŠ•áˆ‹áŠ•á‹µ"
+ },
+ "FJ": {
+ "name": "áŠáŒ‚"
+ },
+ "PN": {
+ "name": "á’ትካኢርን አይስላንድ"
+ },
+ "PW": {
+ "name": "á“ላá‹"
+ },
+ "PY": {
+ "name": "á“ራጓይ"
+ },
+ "PA": {
+ "name": "á“ናማ"
+ },
+ "PK": {
+ "name": "á“ኪስታን"
+ },
+ "PG": {
+ "name": "á“á‘á‹‹ ኒዠጊኒ"
+ },
+ "PE": {
+ "name": "á”ሩ"
+ },
+ "PL": {
+ "name": "á–ላንድ"
+ },
+ "PT": {
+ "name": "á–ርቱጋáˆ"
+ },
+ "PR": {
+ "name": "á–ርታ ሪኮ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ar.json b/library/intl/resources/country/ar.json
new file mode 100644
index 000000000..4c8763235
--- /dev/null
+++ b/library/intl/resources/country/ar.json
@@ -0,0 +1,761 @@
+{
+ "AW": {
+ "name": "آروبا"
+ },
+ "AZ": {
+ "name": "أذربيجان"
+ },
+ "AM": {
+ "name": "أرمينيا"
+ },
+ "ER": {
+ "name": "أريتريا"
+ },
+ "AU": {
+ "name": "أستراليا"
+ },
+ "EE": {
+ "name": "أستونيا"
+ },
+ "AF": {
+ "name": "Ø£Ùغانستان"
+ },
+ "AL": {
+ "name": "ألبانيا"
+ },
+ "DE": {
+ "name": "ألمانيا"
+ },
+ "AQ": {
+ "name": "أنتاركتيكا"
+ },
+ "AG": {
+ "name": "أنتيغوا وبربودا"
+ },
+ "AD": {
+ "name": "أندورا"
+ },
+ "ID": {
+ "name": "أندونيسيا"
+ },
+ "AO": {
+ "name": "أنغولا"
+ },
+ "AI": {
+ "name": "أنغويلا"
+ },
+ "UY": {
+ "name": "أورغواي"
+ },
+ "UZ": {
+ "name": "أوزبكستان"
+ },
+ "UG": {
+ "name": "أوغندا"
+ },
+ "UA": {
+ "name": "أوكرانيا"
+ },
+ "IE": {
+ "name": "أيرلندا"
+ },
+ "IS": {
+ "name": "أيسلندا"
+ },
+ "ET": {
+ "name": "إثيوبيا"
+ },
+ "ES": {
+ "name": "إسبانيا"
+ },
+ "IL": {
+ "name": "إسرائيل"
+ },
+ "IR": {
+ "name": "إيران"
+ },
+ "IT": {
+ "name": "إيطاليا"
+ },
+ "PS": {
+ "name": "الأراضي الÙلسطينية"
+ },
+ "AR": {
+ "name": "الأرجنتين"
+ },
+ "JO": {
+ "name": "الأردن"
+ },
+ "IO": {
+ "name": "الإقليم البريطاني ÙÙŠ المحيط الهندي"
+ },
+ "EC": {
+ "name": "الإكوادور"
+ },
+ "AE": {
+ "name": "الإمارات العربية المتحدة"
+ },
+ "BS": {
+ "name": "الباهاما"
+ },
+ "BH": {
+ "name": "البحرين"
+ },
+ "BR": {
+ "name": "البرازيل"
+ },
+ "PT": {
+ "name": "البرتغال"
+ },
+ "BA": {
+ "name": "البوسنة والهرسك"
+ },
+ "GA": {
+ "name": "الجابون"
+ },
+ "ME": {
+ "name": "الجبل الأسود"
+ },
+ "DZ": {
+ "name": "الجزائر"
+ },
+ "DK": {
+ "name": "الدانمرك"
+ },
+ "CV": {
+ "name": "الرأس الأخضر"
+ },
+ "SV": {
+ "name": "السلÙادور"
+ },
+ "SN": {
+ "name": "السنغال"
+ },
+ "SD": {
+ "name": "السودان"
+ },
+ "SE": {
+ "name": "السويد"
+ },
+ "EH": {
+ "name": "الصحراء الغربية"
+ },
+ "SO": {
+ "name": "الصومال"
+ },
+ "CN": {
+ "name": "الصين"
+ },
+ "IQ": {
+ "name": "العراق"
+ },
+ "VA": {
+ "name": "الÙاتيكان"
+ },
+ "PH": {
+ "name": "الÙلبين"
+ },
+ "CM": {
+ "name": "الكاميرون"
+ },
+ "CG": {
+ "name": "الكونغو - برازاÙيل"
+ },
+ "CD": {
+ "name": "الكونغو - كينشاسا"
+ },
+ "KW": {
+ "name": "الكويت"
+ },
+ "MA": {
+ "name": "المغرب"
+ },
+ "TF": {
+ "name": "المقاطعات الجنوبية الÙرنسية"
+ },
+ "MX": {
+ "name": "المكسيك"
+ },
+ "SA": {
+ "name": "المملكة العربية السعودية"
+ },
+ "GB": {
+ "name": "المملكة المتحدة"
+ },
+ "NO": {
+ "name": "النرويج"
+ },
+ "AT": {
+ "name": "النمسا"
+ },
+ "NE": {
+ "name": "النيجر"
+ },
+ "IN": {
+ "name": "الهند"
+ },
+ "US": {
+ "name": "الولايات المتحدة"
+ },
+ "JP": {
+ "name": "اليابان"
+ },
+ "YE": {
+ "name": "اليمن"
+ },
+ "GR": {
+ "name": "اليونان"
+ },
+ "PG": {
+ "name": "بابوا غينيا الجديدة"
+ },
+ "PY": {
+ "name": "باراغواي"
+ },
+ "PK": {
+ "name": "باكستان"
+ },
+ "PW": {
+ "name": "بالاو"
+ },
+ "BW": {
+ "name": "بتسوانا"
+ },
+ "BB": {
+ "name": "بربادوس"
+ },
+ "BM": {
+ "name": "برمودا"
+ },
+ "BN": {
+ "name": "بروناي"
+ },
+ "BE": {
+ "name": "بلجيكا"
+ },
+ "BG": {
+ "name": "بلغاريا"
+ },
+ "BZ": {
+ "name": "بليز"
+ },
+ "BD": {
+ "name": "بنجلاديش"
+ },
+ "PA": {
+ "name": "بنما"
+ },
+ "BJ": {
+ "name": "بنين"
+ },
+ "BT": {
+ "name": "بوتان"
+ },
+ "PR": {
+ "name": "بورتوريكو"
+ },
+ "BF": {
+ "name": "بوركينا Ùاسو"
+ },
+ "BI": {
+ "name": "بوروندي"
+ },
+ "PL": {
+ "name": "بولندا"
+ },
+ "BO": {
+ "name": "بوليÙيا"
+ },
+ "PF": {
+ "name": "بولينيزيا الÙرنسية"
+ },
+ "PE": {
+ "name": "بيرو"
+ },
+ "TZ": {
+ "name": "تانزانيا"
+ },
+ "TH": {
+ "name": "تايلاند"
+ },
+ "TW": {
+ "name": "تايوان"
+ },
+ "TM": {
+ "name": "تركمانستان"
+ },
+ "TR": {
+ "name": "تركيا"
+ },
+ "TA": {
+ "name": "تريستان دي كونها"
+ },
+ "TT": {
+ "name": "ترينيداد وتوباغو"
+ },
+ "TD": {
+ "name": "تشاد"
+ },
+ "TG": {
+ "name": "توجو"
+ },
+ "TV": {
+ "name": "توÙالو"
+ },
+ "TK": {
+ "name": "توكيلو"
+ },
+ "TN": {
+ "name": "تونس"
+ },
+ "TO": {
+ "name": "تونغا"
+ },
+ "TL": {
+ "name": "تيمور الشرقية"
+ },
+ "JM": {
+ "name": "جامايكا"
+ },
+ "GI": {
+ "name": "جبل طارق"
+ },
+ "AX": {
+ "name": "جزر آلاند"
+ },
+ "TC": {
+ "name": "جزر الترك وجايكوس"
+ },
+ "KM": {
+ "name": "جزر القمر"
+ },
+ "KY": {
+ "name": "جزر الكايمن"
+ },
+ "IC": {
+ "name": "جزر الكناري"
+ },
+ "MH": {
+ "name": "جزر المارشال"
+ },
+ "MV": {
+ "name": "جزر المالديÙ"
+ },
+ "UM": {
+ "name": "جزر الولايات المتحدة النائية"
+ },
+ "PN": {
+ "name": "جزر بيتكيرن"
+ },
+ "SB": {
+ "name": "جزر سليمان"
+ },
+ "FO": {
+ "name": "جزر Ùارو"
+ },
+ "VI": {
+ "name": "جزر Ùرجين الأمريكية"
+ },
+ "VG": {
+ "name": "جزر Ùرجين البريطانية"
+ },
+ "FK": {
+ "name": "جزر Ùوكلاند"
+ },
+ "CK": {
+ "name": "جزر كوك"
+ },
+ "CC": {
+ "name": "جزر كوكوس"
+ },
+ "MP": {
+ "name": "جزر ماريانا الشمالية"
+ },
+ "WF": {
+ "name": "جزر والس ÙˆÙوتونا"
+ },
+ "AC": {
+ "name": "جزيرة أسينشيون"
+ },
+ "CX": {
+ "name": "جزيرة الكريسماس"
+ },
+ "IM": {
+ "name": "جزيرة مان"
+ },
+ "NF": {
+ "name": "جزيرة نورÙوك"
+ },
+ "CF": {
+ "name": "جمهورية Ø£Ùريقيا الوسطى"
+ },
+ "CZ": {
+ "name": "جمهورية التشيك"
+ },
+ "DO": {
+ "name": "جمهورية الدومينيك"
+ },
+ "ZA": {
+ "name": "جنوب Ø£Ùريقيا"
+ },
+ "SS": {
+ "name": "جنوب السودان"
+ },
+ "GP": {
+ "name": "جوادلوب"
+ },
+ "GE": {
+ "name": "جورجيا"
+ },
+ "GS": {
+ "name": "جورجيا الجنوبية وجزر ساندويتش الجنوبية"
+ },
+ "DJ": {
+ "name": "جيبوتي"
+ },
+ "JE": {
+ "name": "جيرسي"
+ },
+ "DM": {
+ "name": "دومينيكا"
+ },
+ "DG": {
+ "name": "دييغو غارسيا"
+ },
+ "RW": {
+ "name": "رواندا"
+ },
+ "RU": {
+ "name": "روسيا"
+ },
+ "BY": {
+ "name": "روسيا البيضاء"
+ },
+ "RO": {
+ "name": "رومانيا"
+ },
+ "RE": {
+ "name": "روينيون"
+ },
+ "ZM": {
+ "name": "زامبيا"
+ },
+ "ZW": {
+ "name": "زيمبابوي"
+ },
+ "CI": {
+ "name": "ساحل العاج"
+ },
+ "WS": {
+ "name": "ساموا"
+ },
+ "AS": {
+ "name": "ساموا الأمريكية"
+ },
+ "BL": {
+ "name": "سان بارتليمي"
+ },
+ "SM": {
+ "name": "سان مارينو"
+ },
+ "PM": {
+ "name": "سانت بيير وميكولون"
+ },
+ "VC": {
+ "name": "سانت Ùنسنت وغرنادين"
+ },
+ "KN": {
+ "name": "سانت كيتس ونيÙيس"
+ },
+ "LC": {
+ "name": "سانت لوسيا"
+ },
+ "MF": {
+ "name": "سانت مارتن"
+ },
+ "SH": {
+ "name": "سانت هيلنا"
+ },
+ "ST": {
+ "name": "ساو تومي وبرينسيبي"
+ },
+ "LK": {
+ "name": "سريلانكا"
+ },
+ "SJ": {
+ "name": "سÙالبارد وجان مايان"
+ },
+ "SK": {
+ "name": "سلوÙاكيا"
+ },
+ "SI": {
+ "name": "سلوÙينيا"
+ },
+ "SG": {
+ "name": "سنغاÙورة"
+ },
+ "SZ": {
+ "name": "سوازيلاند"
+ },
+ "SY": {
+ "name": "سوريا"
+ },
+ "SR": {
+ "name": "سورينام"
+ },
+ "CH": {
+ "name": "سويسرا"
+ },
+ "SL": {
+ "name": "سيراليون"
+ },
+ "SC": {
+ "name": "سيشل"
+ },
+ "SX": {
+ "name": "سينت مارتن"
+ },
+ "EA": {
+ "name": "سيوتا وميليلا"
+ },
+ "CL": {
+ "name": "شيلي"
+ },
+ "RS": {
+ "name": "صربيا"
+ },
+ "TJ": {
+ "name": "طاجكستان"
+ },
+ "OM": {
+ "name": "عÙمان"
+ },
+ "GM": {
+ "name": "غامبيا"
+ },
+ "GH": {
+ "name": "غانا"
+ },
+ "GD": {
+ "name": "غرينادا"
+ },
+ "GL": {
+ "name": "غرينلاند"
+ },
+ "GT": {
+ "name": "غواتيمالا"
+ },
+ "GU": {
+ "name": "غوام"
+ },
+ "GF": {
+ "name": "غويانا الÙرنسية"
+ },
+ "GY": {
+ "name": "غيانا"
+ },
+ "GG": {
+ "name": "غيرنزي"
+ },
+ "GN": {
+ "name": "غينيا"
+ },
+ "GQ": {
+ "name": "غينيا الإستوائية"
+ },
+ "GW": {
+ "name": "غينيا بيساو"
+ },
+ "VU": {
+ "name": "Ùانواتو"
+ },
+ "FR": {
+ "name": "Ùرنسا"
+ },
+ "VE": {
+ "name": "Ùنزويلا"
+ },
+ "FI": {
+ "name": "Ùنلندا"
+ },
+ "VN": {
+ "name": "Ùيتنام"
+ },
+ "FJ": {
+ "name": "Ùيجي"
+ },
+ "CY": {
+ "name": "قبرص"
+ },
+ "KG": {
+ "name": "قرغيزستان"
+ },
+ "QA": {
+ "name": "قطر"
+ },
+ "KZ": {
+ "name": "كازاخستان"
+ },
+ "NC": {
+ "name": "كاليدونيا الجديدة"
+ },
+ "HR": {
+ "name": "كرواتيا"
+ },
+ "KH": {
+ "name": "كمبوديا"
+ },
+ "CA": {
+ "name": "كندا"
+ },
+ "CU": {
+ "name": "كوبا"
+ },
+ "CW": {
+ "name": "كوراساو"
+ },
+ "KR": {
+ "name": "كوريا الجنوبية"
+ },
+ "KP": {
+ "name": "كوريا الشمالية"
+ },
+ "CR": {
+ "name": "كوستاريكا"
+ },
+ "XK": {
+ "name": "كوسوÙÙˆ"
+ },
+ "CO": {
+ "name": "كولومبيا"
+ },
+ "KI": {
+ "name": "كيريباتي"
+ },
+ "KE": {
+ "name": "كينيا"
+ },
+ "LV": {
+ "name": "لاتÙيا"
+ },
+ "LA": {
+ "name": "لاوس"
+ },
+ "LB": {
+ "name": "لبنان"
+ },
+ "LU": {
+ "name": "لوكسمبورغ"
+ },
+ "LY": {
+ "name": "ليبيا"
+ },
+ "LR": {
+ "name": "ليبيريا"
+ },
+ "LT": {
+ "name": "ليتوانيا"
+ },
+ "LI": {
+ "name": "ليختنشتاين"
+ },
+ "LS": {
+ "name": "ليسوتو"
+ },
+ "MQ": {
+ "name": "مارتينيك"
+ },
+ "MT": {
+ "name": "مالطا"
+ },
+ "ML": {
+ "name": "مالي"
+ },
+ "MY": {
+ "name": "ماليزيا"
+ },
+ "YT": {
+ "name": "مايوت"
+ },
+ "MG": {
+ "name": "مدغشقر"
+ },
+ "EG": {
+ "name": "مصر"
+ },
+ "MK": {
+ "name": "مقدونيا"
+ },
+ "MO": {
+ "name": "مكاو الصينية (منطقة إدارية خاصة)"
+ },
+ "MW": {
+ "name": "ملاوي"
+ },
+ "MN": {
+ "name": "منغوليا"
+ },
+ "MR": {
+ "name": "موريتانيا"
+ },
+ "MU": {
+ "name": "موريشيوس"
+ },
+ "MZ": {
+ "name": "موزمبيق"
+ },
+ "MD": {
+ "name": "مولداÙيا"
+ },
+ "MC": {
+ "name": "موناكو"
+ },
+ "MS": {
+ "name": "مونتسرات"
+ },
+ "MM": {
+ "name": "ميانمار -بورما"
+ },
+ "FM": {
+ "name": "ميكرونيزيا"
+ },
+ "NA": {
+ "name": "ناميبيا"
+ },
+ "NR": {
+ "name": "ناورو"
+ },
+ "NP": {
+ "name": "نيبال"
+ },
+ "NG": {
+ "name": "نيجيريا"
+ },
+ "NI": {
+ "name": "نيكاراغوا"
+ },
+ "NZ": {
+ "name": "نيوزيلاندا"
+ },
+ "NU": {
+ "name": "نيوي"
+ },
+ "HT": {
+ "name": "هايتي"
+ },
+ "HN": {
+ "name": "هندوراس"
+ },
+ "HU": {
+ "name": "هنغاريا"
+ },
+ "NL": {
+ "name": "هولندا"
+ },
+ "BQ": {
+ "name": "هولندا الكاريبية"
+ },
+ "HK": {
+ "name": "هونغ كونغ الصينية"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/asa.json b/library/intl/resources/country/asa.json
new file mode 100644
index 000000000..ef6acc8aa
--- /dev/null
+++ b/library/intl/resources/country/asa.json
@@ -0,0 +1,761 @@
+{
+ "AZ": {
+ "name": "Adhabajani"
+ },
+ "ZA": {
+ "name": "Afrika Kuthini"
+ },
+ "AF": {
+ "name": "Afuganistani"
+ },
+ "IS": {
+ "name": "Aithlandi"
+ },
+ "AR": {
+ "name": "Ajentina"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljeria"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua na Barbuda"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Authtralia"
+ },
+ "AT": {
+ "name": "Authtria"
+ },
+ "IE": {
+ "name": "Ayalandi"
+ },
+ "BB": {
+ "name": "Babadothi"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BH": {
+ "name": "Bahareni"
+ },
+ "BD": {
+ "name": "Bangladeshi"
+ },
+ "BY": {
+ "name": "Belaruthi"
+ },
+ "BZ": {
+ "name": "Belidhe"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bothnia na Hedhegovina"
+ },
+ "BW": {
+ "name": "Botthwana"
+ },
+ "BR": {
+ "name": "Brazili"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BF": {
+ "name": "Bukinafatho"
+ },
+ "MG": {
+ "name": "Bukini"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denmaki"
+ },
+ "ZM": {
+ "name": "Dhambia"
+ },
+ "ZW": {
+ "name": "Dhimbabwe"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekwado"
+ },
+ "SV": {
+ "name": "Elsavado"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Ethtonia"
+ },
+ "AE": {
+ "name": "Falme dha Kiarabu"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipino"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Ginebisau"
+ },
+ "GQ": {
+ "name": "Ginekweta"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grinlandi"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GP": {
+ "name": "Gwadelupe"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GF": {
+ "name": "Gwiyana ya Ufarantha"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ES": {
+ "name": "Hithpania"
+ },
+ "HN": {
+ "name": "Hondurathi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungaria"
+ },
+ "IO": {
+ "name": "Ieneo la Uingeredha katika Bahari Hindi"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonethia"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "IL": {
+ "name": "Ithraeli"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "CF": {
+ "name": "Jamhuri ya Afrika ya Kati"
+ },
+ "CZ": {
+ "name": "Jamhuri ya Cheki"
+ },
+ "DO": {
+ "name": "Jamhuri ya Dominika"
+ },
+ "CD": {
+ "name": "Jamhuri ya Kidemokrathia ya Kongo"
+ },
+ "JP": {
+ "name": "Japani"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibralta"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "GE": {
+ "name": "Jojia"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kameruni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katari"
+ },
+ "KZ": {
+ "name": "Kazakithtani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CV": {
+ "name": "Kepuvede"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizithtani"
+ },
+ "NF": {
+ "name": "Kithiwa cha Norfok"
+ },
+ "CI": {
+ "name": "Kodivaa"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komoro"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "HR": {
+ "name": "Korathia"
+ },
+ "KP": {
+ "name": "Korea Kathkazini"
+ },
+ "KR": {
+ "name": "Korea Kuthini"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kothtarika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CY": {
+ "name": "Kuprothi"
+ },
+ "KW": {
+ "name": "Kuwaiti"
+ },
+ "LA": {
+ "name": "Laothi"
+ },
+ "LU": {
+ "name": "Lathembagi"
+ },
+ "LV": {
+ "name": "Lativia"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lethoto"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Lishenteni"
+ },
+ "LT": {
+ "name": "Litwania"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malethia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "US": {
+ "name": "Marekani"
+ },
+ "MQ": {
+ "name": "Martiniki"
+ },
+ "MK": {
+ "name": "Mathedonia"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mekthiko"
+ },
+ "FM": {
+ "name": "Mikronethia"
+ },
+ "EG": {
+ "name": "Mithri"
+ },
+ "MV": {
+ "name": "Modivu"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Monttherrati"
+ },
+ "MR": {
+ "name": "Moritania"
+ },
+ "MU": {
+ "name": "Morithi"
+ },
+ "MA": {
+ "name": "Moroko"
+ },
+ "MZ": {
+ "name": "Mthumbiji"
+ },
+ "MM": {
+ "name": "Myama"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "NE": {
+ "name": "Nijeri"
+ },
+ "NG": {
+ "name": "Nijeria"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norwe"
+ },
+ "NZ": {
+ "name": "Nyudhilandi"
+ },
+ "NC": {
+ "name": "Nyukaledonia"
+ },
+ "OM": {
+ "name": "Omani"
+ },
+ "PK": {
+ "name": "Pakithtani"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestina"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua"
+ },
+ "PY": {
+ "name": "Paragwai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkairni"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PF": {
+ "name": "Polinesia ya Ufarantha"
+ },
+ "PR": {
+ "name": "Pwetoriko"
+ },
+ "RE": {
+ "name": "Riyunioni"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Shelisheli"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TZ": {
+ "name": "Tadhania"
+ },
+ "TH": {
+ "name": "Tailandi"
+ },
+ "TW": {
+ "name": "Taiwani"
+ },
+ "TJ": {
+ "name": "Tajikithtani"
+ },
+ "SM": {
+ "name": "Thamarino"
+ },
+ "WS": {
+ "name": "Thamoa"
+ },
+ "AS": {
+ "name": "Thamoa ya Marekani"
+ },
+ "SH": {
+ "name": "Thantahelena"
+ },
+ "KN": {
+ "name": "Thantakitdhi na Nevith"
+ },
+ "LC": {
+ "name": "Thantaluthia"
+ },
+ "PM": {
+ "name": "Thantapieri na Mikeloni"
+ },
+ "VC": {
+ "name": "Thantavithenti na Grenadini"
+ },
+ "ST": {
+ "name": "Thao Tome na Principe"
+ },
+ "SA": {
+ "name": "Thaudi"
+ },
+ "SN": {
+ "name": "Thenegali"
+ },
+ "SL": {
+ "name": "Thiera Leoni"
+ },
+ "SG": {
+ "name": "Thingapoo"
+ },
+ "SY": {
+ "name": "Thiria"
+ },
+ "LK": {
+ "name": "Thirilanka"
+ },
+ "SI": {
+ "name": "Thlovenia"
+ },
+ "SK": {
+ "name": "Tholvakia"
+ },
+ "SO": {
+ "name": "Thomalia"
+ },
+ "SD": {
+ "name": "Thudani"
+ },
+ "SR": {
+ "name": "Thurinamu"
+ },
+ "TL": {
+ "name": "Timori ya Mashariki"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad na Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunithia"
+ },
+ "TM": {
+ "name": "Turukimenithtani"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "IR": {
+ "name": "Uajemi"
+ },
+ "BE": {
+ "name": "Ubelgiji"
+ },
+ "UZ": {
+ "name": "Udhibekithtani"
+ },
+ "FR": {
+ "name": "Ufarantha"
+ },
+ "FI": {
+ "name": "Ufini"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "GR": {
+ "name": "Ugiriki"
+ },
+ "ET": {
+ "name": "Uhabeshi"
+ },
+ "NL": {
+ "name": "Uholandhi"
+ },
+ "GB": {
+ "name": "Uingeredha"
+ },
+ "DE": {
+ "name": "Ujerumani"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "PT": {
+ "name": "Ureno"
+ },
+ "UY": {
+ "name": "Urugwai"
+ },
+ "RU": {
+ "name": "Uruthi"
+ },
+ "SZ": {
+ "name": "Uthwadhi"
+ },
+ "SE": {
+ "name": "Uthwidi"
+ },
+ "CH": {
+ "name": "Uthwithi"
+ },
+ "TR": {
+ "name": "Uturuki"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietinamu"
+ },
+ "CK": {
+ "name": "Vithiwa vya Cook"
+ },
+ "FK": {
+ "name": "Vithiwa vya Falkland"
+ },
+ "KY": {
+ "name": "Vithiwa vya Kayman"
+ },
+ "MP": {
+ "name": "Vithiwa vya Mariana vya Kathkazini"
+ },
+ "MH": {
+ "name": "Vithiwa vya Marshal"
+ },
+ "SB": {
+ "name": "Vithiwa vya Tholomon"
+ },
+ "TC": {
+ "name": "Vithiwa vya Turki na Kaiko"
+ },
+ "VI": {
+ "name": "Vithiwa vya Virgin vya Marekani"
+ },
+ "VG": {
+ "name": "Vithiwa vya Virgin vya Uingeredha"
+ },
+ "WF": {
+ "name": "Walith na Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "JO": {
+ "name": "Yordani"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ast.json b/library/intl/resources/country/ast.json
new file mode 100644
index 000000000..ab9dc8b5d
--- /dev/null
+++ b/library/intl/resources/country/ast.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AG": {
+ "name": "Antigua y Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudita"
+ },
+ "HK": {
+ "name": "ARE China de Ḥong Kong"
+ },
+ "MO": {
+ "name": "ARE China de Macáu"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "DZ": {
+ "name": "Arxelia"
+ },
+ "AR": {
+ "name": "Arxentina"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaixán"
+ },
+ "BH": {
+ "name": "Baḥréin"
+ },
+ "BD": {
+ "name": "Bangladex"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BE": {
+ "name": "Bélxica"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia y Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunéi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabu Verde"
+ },
+ "KH": {
+ "name": "Camboya"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "EA": {
+ "name": "Ceuta y Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CZ": {
+ "name": "Chequia"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "VA": {
+ "name": "Ciudá del Vaticanu"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "KP": {
+ "name": "Corea del Norte"
+ },
+ "KR": {
+ "name": "Corea del Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "NE": {
+ "name": "El Níxer"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Xuníos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estaos Xuníos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "EG": {
+ "name": "Exiptu"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "PH": {
+ "name": "Filipines"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bisáu"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GF": {
+ "name": "Guyana Francesa"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Hondures"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "AC": {
+ "name": "Islla Ascensión"
+ },
+ "CX": {
+ "name": "Islla Christmas"
+ },
+ "IM": {
+ "name": "Islla de Man"
+ },
+ "NF": {
+ "name": "Islla Norfolk"
+ },
+ "AX": {
+ "name": "Islles Aland"
+ },
+ "KY": {
+ "name": "Islles Caimán"
+ },
+ "IC": {
+ "name": "Islles Canaries"
+ },
+ "CC": {
+ "name": "Islles Cocos (Keeling)"
+ },
+ "CK": {
+ "name": "Islles Cook"
+ },
+ "FO": {
+ "name": "Islles Feroe"
+ },
+ "FJ": {
+ "name": "Islles Fixi"
+ },
+ "MP": {
+ "name": "Islles Marianes del Norte"
+ },
+ "MH": {
+ "name": "Islles Marshall"
+ },
+ "UM": {
+ "name": "Islles Perifériques Menores de los EE.XX."
+ },
+ "PN": {
+ "name": "Islles Pitcairn"
+ },
+ "SB": {
+ "name": "Islles Salomón"
+ },
+ "TC": {
+ "name": "Islles Turques y Caicos"
+ },
+ "VI": {
+ "name": "Islles Vírxenes Americanes"
+ },
+ "VG": {
+ "name": "Islles Vírxenes Britániques"
+ },
+ "GS": {
+ "name": "Islles Xeorxa del Sur y Sandwich del Sur"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "KZ": {
+ "name": "Kazakstán"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirguistán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "AQ": {
+ "name": "L’Antártida"
+ },
+ "MQ": {
+ "name": "La Martinica"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "BS": {
+ "name": "Les Bahames"
+ },
+ "BM": {
+ "name": "Les Bermudes"
+ },
+ "KM": {
+ "name": "Les Comores"
+ },
+ "MV": {
+ "name": "Les Maldives"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbanu"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgu"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malasia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "ML": {
+ "name": "Malí"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marruecos"
+ },
+ "MU": {
+ "name": "Mauriciu"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Mónacu"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegru"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NG": {
+ "name": "Nixeria"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nueva Caledonia"
+ },
+ "NZ": {
+ "name": "Nueva Zelanda"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Baxos"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Paláu"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nueva Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puertu Ricu"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "GB": {
+ "name": "Reinu Xuníu"
+ },
+ "CF": {
+ "name": "República Centroafricana"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumanía"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sáḥara Occidental"
+ },
+ "KN": {
+ "name": "Saint Kitts y Nevis"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre y Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "SM": {
+ "name": "San Marín"
+ },
+ "VC": {
+ "name": "San Vicente y Granadines"
+ },
+ "LC": {
+ "name": "Santa Llucía"
+ },
+ "ST": {
+ "name": "Santu Tomé y Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SH": {
+ "name": "St. Helena"
+ },
+ "SZ": {
+ "name": "Suazilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán del Sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suiza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard ya Islla Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Taxiquistán"
+ },
+ "IO": {
+ "name": "Territoriu Británicu del Océanu Ãndicu"
+ },
+ "TF": {
+ "name": "Tierres Australes Franceses"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokeláu"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidá y Tobagu"
+ },
+ "TA": {
+ "name": "Tristán da Cunha"
+ },
+ "TN": {
+ "name": "Tunicia"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucraína"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbequistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis y Futuna"
+ },
+ "JM": {
+ "name": "Xamaica"
+ },
+ "JP": {
+ "name": "Xapón"
+ },
+ "GE": {
+ "name": "Xeorxa"
+ },
+ "GI": {
+ "name": "Xibraltar"
+ },
+ "CY": {
+ "name": "Xipre"
+ },
+ "JO": {
+ "name": "Xordania"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/az.json b/library/intl/resources/country/az.json
new file mode 100644
index 000000000..98906a92a
--- /dev/null
+++ b/library/intl/resources/country/az.json
@@ -0,0 +1,761 @@
+{
+ "VI": {
+ "name": "ABŞ Vircin Adaları"
+ },
+ "AX": {
+ "name": "Aland Adaları"
+ },
+ "AL": {
+ "name": "Albaniya"
+ },
+ "DE": {
+ "name": "Almaniya"
+ },
+ "US": {
+ "name": "Amerika Birləşmiş Ştatları"
+ },
+ "AS": {
+ "name": "Amerika Samoası"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AI": {
+ "name": "Angila"
+ },
+ "AO": {
+ "name": "Anqola"
+ },
+ "AQ": {
+ "name": "Antarktika"
+ },
+ "AG": {
+ "name": "Antiqua vÉ™ Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Avstraliya"
+ },
+ "AT": {
+ "name": "Avstriya"
+ },
+ "AZ": {
+ "name": "Azərbaycan"
+ },
+ "BS": {
+ "name": "Baham Adaları"
+ },
+ "BD": {
+ "name": "BanqladeÅŸ"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belçika"
+ },
+ "BZ": {
+ "name": "Beliz"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BH": {
+ "name": "Bəhreyn"
+ },
+ "AE": {
+ "name": "BirləşmiÅŸ ÆrÉ™b ÆmirliklÉ™ri"
+ },
+ "GB": {
+ "name": "Birləşmiş Krallıq"
+ },
+ "UM": {
+ "name": "Birləşmiş Ştatlar Uzaq Adalar"
+ },
+ "BO": {
+ "name": "Boliviya"
+ },
+ "BG": {
+ "name": "Bolqariya"
+ },
+ "BA": {
+ "name": "Bosniya vÉ™ Hersoqovina"
+ },
+ "BW": {
+ "name": "Botsvana"
+ },
+ "BR": {
+ "name": "Braziliya"
+ },
+ "IO": {
+ "name": "Britaniya Hind Okeanı Ærazisi"
+ },
+ "VG": {
+ "name": "Britaniya Vircin Adaları"
+ },
+ "BN": {
+ "name": "Bruney"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butan"
+ },
+ "JE": {
+ "name": "Cersi"
+ },
+ "ZA": {
+ "name": "Cənub Afrika"
+ },
+ "GS": {
+ "name": "Cənubi Corciya və Cənubi Sendviç Adaları"
+ },
+ "KR": {
+ "name": "Cənubi Koreya"
+ },
+ "SS": {
+ "name": "Cənubi Sudan"
+ },
+ "DJ": {
+ "name": "Cibuti"
+ },
+ "TD": {
+ "name": "Çad"
+ },
+ "CZ": {
+ "name": "Çexiya"
+ },
+ "CL": {
+ "name": "Çili"
+ },
+ "CN": {
+ "name": "Çin"
+ },
+ "DK": {
+ "name": "Danimarka"
+ },
+ "DG": {
+ "name": "Dieqo Qarsiya"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "DO": {
+ "name": "Dominikan Respublikası"
+ },
+ "ET": {
+ "name": "Efiopiya"
+ },
+ "EC": {
+ "name": "Ekvador"
+ },
+ "GQ": {
+ "name": "Ekvatorial Qvineya"
+ },
+ "ER": {
+ "name": "Eritreya"
+ },
+ "AM": {
+ "name": "Ermənistan"
+ },
+ "EE": {
+ "name": "Estoniya"
+ },
+ "AF": {
+ "name": "Æfqanıstan"
+ },
+ "DZ": {
+ "name": "ÆlcÉ™zair"
+ },
+ "FO": {
+ "name": "Farer Adaları"
+ },
+ "PS": {
+ "name": "FÉ™lÉ™stin ÆrazilÉ™ri"
+ },
+ "FJ": {
+ "name": "Fici"
+ },
+ "CI": {
+ "name": "Fil DiÅŸi Sahili"
+ },
+ "PH": {
+ "name": "Filippin"
+ },
+ "FI": {
+ "name": "Finlandiya"
+ },
+ "FK": {
+ "name": "Folklend Adaları"
+ },
+ "FR": {
+ "name": "Fransa"
+ },
+ "TF": {
+ "name": "Fransa CÉ™nub ÆrazilÉ™ri"
+ },
+ "GF": {
+ "name": "Fransız Qviyanası"
+ },
+ "PF": {
+ "name": "Fransız Polineziyası"
+ },
+ "GG": {
+ "name": "Gernsey"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GE": {
+ "name": "Gürcüstan"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "IN": {
+ "name": "Hindistan"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Honq Konq Xüsusi Ä°nzibati Ærazi Çin"
+ },
+ "HR": {
+ "name": "Xorvatiya"
+ },
+ "ID": {
+ "name": "Ä°ndoneziya"
+ },
+ "JO": {
+ "name": "Ä°ordaniya"
+ },
+ "IQ": {
+ "name": "Ä°raq"
+ },
+ "IR": {
+ "name": "Ä°ran"
+ },
+ "IE": {
+ "name": "Ä°rlandiya"
+ },
+ "IS": {
+ "name": "Ä°slandiya"
+ },
+ "ES": {
+ "name": "Ä°spaniya"
+ },
+ "IL": {
+ "name": "Ä°srail"
+ },
+ "SE": {
+ "name": "İsveç"
+ },
+ "CH": {
+ "name": "İsveçrə"
+ },
+ "IT": {
+ "name": "Ä°taliya"
+ },
+ "KH": {
+ "name": "Kamboca"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanar Adaları"
+ },
+ "CV": {
+ "name": "Kape Verde"
+ },
+ "BQ": {
+ "name": "Karib Niderlandı"
+ },
+ "KY": {
+ "name": "Kayman Adaları"
+ },
+ "KE": {
+ "name": "Keniya"
+ },
+ "CY": {
+ "name": "Kipr"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CC": {
+ "name": "Kokos Adaları"
+ },
+ "CO": {
+ "name": "Kolumbiya"
+ },
+ "KM": {
+ "name": "Komor Adaları"
+ },
+ "CG": {
+ "name": "Konqo - Brazzavil"
+ },
+ "CD": {
+ "name": "Konqo - KinÅŸasa"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kosta Rika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CK": {
+ "name": "Kuk Adaları"
+ },
+ "CW": {
+ "name": "Kurasao"
+ },
+ "KW": {
+ "name": "Küveyt"
+ },
+ "GA": {
+ "name": "Qabon"
+ },
+ "GM": {
+ "name": "Qambiya"
+ },
+ "GH": {
+ "name": "Qana"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "KZ": {
+ "name": "Qazaxıstan"
+ },
+ "EH": {
+ "name": "Qərbi Sahara"
+ },
+ "KG": {
+ "name": "Qırğızıstan"
+ },
+ "GD": {
+ "name": "Qrenada"
+ },
+ "GL": {
+ "name": "Qrenlandiya"
+ },
+ "GU": {
+ "name": "Quam"
+ },
+ "GP": {
+ "name": "Qvadelupa"
+ },
+ "GT": {
+ "name": "Qvatemala"
+ },
+ "GN": {
+ "name": "Qvineya"
+ },
+ "GW": {
+ "name": "Qvineya-Bisau"
+ },
+ "GY": {
+ "name": "Qviyana"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latviya"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LR": {
+ "name": "Liberiya"
+ },
+ "LI": {
+ "name": "LixtenÅŸteyn"
+ },
+ "LT": {
+ "name": "Litva"
+ },
+ "LB": {
+ "name": "Livan"
+ },
+ "LY": {
+ "name": "Liviya"
+ },
+ "LU": {
+ "name": "Lüksemburq"
+ },
+ "HU": {
+ "name": "Macarıstan"
+ },
+ "MG": {
+ "name": "Madaqaskar"
+ },
+ "MO": {
+ "name": "Makao Xüsusi Ä°nzibati Ærazi Çin"
+ },
+ "MK": {
+ "name": "Makedoniya"
+ },
+ "MW": {
+ "name": "Malavi"
+ },
+ "MY": {
+ "name": "Malayziya"
+ },
+ "MV": {
+ "name": "Maldiv Adaları"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marşal Adaları"
+ },
+ "MQ": {
+ "name": "Martinik"
+ },
+ "MU": {
+ "name": "Mavriki"
+ },
+ "MR": {
+ "name": "Mavritaniya"
+ },
+ "YT": {
+ "name": "Mayot"
+ },
+ "MX": {
+ "name": "Meksika"
+ },
+ "IM": {
+ "name": "Men Adası"
+ },
+ "MA": {
+ "name": "Mərakeş"
+ },
+ "CF": {
+ "name": "Mərkəzi Afrika Respublikası"
+ },
+ "FM": {
+ "name": "Mikroneziya"
+ },
+ "CX": {
+ "name": "Milad Adası"
+ },
+ "EG": {
+ "name": "Misir"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Monqoliya"
+ },
+ "MS": {
+ "name": "Monserat"
+ },
+ "ME": {
+ "name": "Monteneqro"
+ },
+ "MZ": {
+ "name": "Mozambik"
+ },
+ "SH": {
+ "name": "Müqəddəs Yelena"
+ },
+ "MM": {
+ "name": "Myanma"
+ },
+ "NA": {
+ "name": "Namibiya"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Niderland"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeriya"
+ },
+ "NI": {
+ "name": "Nikaraqua"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Adası"
+ },
+ "NO": {
+ "name": "Norveç"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "UZ": {
+ "name": "Özbəkistan"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Yeni Qvineya"
+ },
+ "PY": {
+ "name": "Paraqvay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkern Adaları"
+ },
+ "PL": {
+ "name": "PolÅŸa"
+ },
+ "PT": {
+ "name": "Portuqal"
+ },
+ "PR": {
+ "name": "Puerto Riko"
+ },
+ "RE": {
+ "name": "Reunion"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumıniya"
+ },
+ "RU": {
+ "name": "Rusiya"
+ },
+ "SV": {
+ "name": "Salvador"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "BL": {
+ "name": "San Bartolomey"
+ },
+ "KN": {
+ "name": "San Kits vÉ™ Nevis"
+ },
+ "LC": {
+ "name": "San Lüsiya"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martin"
+ },
+ "PM": {
+ "name": "San Pier vÉ™ Mikelon"
+ },
+ "VC": {
+ "name": "San Vinsent vÉ™ Qrenada"
+ },
+ "ST": {
+ "name": "Sao Tome vÉ™ Prinsip"
+ },
+ "SN": {
+ "name": "Seneqal"
+ },
+ "RS": {
+ "name": "Serbiya"
+ },
+ "EA": {
+ "name": "Seuta vÉ™ Melilya"
+ },
+ "SC": {
+ "name": "Seyşel Adaları"
+ },
+ "SA": {
+ "name": "SÉ™udiyyÉ™ ÆrÉ™bistanı"
+ },
+ "SL": {
+ "name": "Siera Leon"
+ },
+ "SG": {
+ "name": "Sinqapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakiya"
+ },
+ "SI": {
+ "name": "Sloveniya"
+ },
+ "SB": {
+ "name": "Solomon Adaları"
+ },
+ "SO": {
+ "name": "Somali"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SY": {
+ "name": "Suriya"
+ },
+ "SJ": {
+ "name": "Svalbard vÉ™ Yan Mayen"
+ },
+ "SZ": {
+ "name": "Svazilend"
+ },
+ "TL": {
+ "name": "Şərqi Timor"
+ },
+ "KP": {
+ "name": "Åžimali Koreya"
+ },
+ "MP": {
+ "name": "Şimali Mariana Adaları"
+ },
+ "LK": {
+ "name": "Åžri Lanka"
+ },
+ "TJ": {
+ "name": "Tacikistan"
+ },
+ "TZ": {
+ "name": "Tanzaniya"
+ },
+ "TH": {
+ "name": "Tayland"
+ },
+ "TW": {
+ "name": "Tayvan"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TG": {
+ "name": "Toqo"
+ },
+ "TO": {
+ "name": "Tonqa"
+ },
+ "TT": {
+ "name": "Trinidad vÉ™ Tobaqo"
+ },
+ "TA": {
+ "name": "Tristan da Kunya"
+ },
+ "TN": {
+ "name": "Tunis"
+ },
+ "TC": {
+ "name": "Turks və Kaikos Adaları"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "TR": {
+ "name": "Türkiya"
+ },
+ "TM": {
+ "name": "Türkmənistan"
+ },
+ "UA": {
+ "name": "Ukrayna"
+ },
+ "UG": {
+ "name": "Uqanda"
+ },
+ "WF": {
+ "name": "Uolis vÉ™ Futuna"
+ },
+ "UY": {
+ "name": "Uruqvay"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikan"
+ },
+ "VE": {
+ "name": "Venesuela"
+ },
+ "VN": {
+ "name": "Vyetnam"
+ },
+ "JM": {
+ "name": "Yamayka"
+ },
+ "JP": {
+ "name": "Yaponiya"
+ },
+ "NC": {
+ "name": "Yeni Kaledoniya"
+ },
+ "NZ": {
+ "name": "Yeni Zelandiya"
+ },
+ "YE": {
+ "name": "Yəmən"
+ },
+ "GR": {
+ "name": "Yunanıstan"
+ },
+ "AC": {
+ "name": "Yüksəliş Adası"
+ },
+ "ZM": {
+ "name": "Zambiya"
+ },
+ "ZW": {
+ "name": "Zimbabve"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/bas.json b/library/intl/resources/country/bas.json
new file mode 100644
index 000000000..4c7ff3212
--- /dev/null
+++ b/library/intl/resources/country/bas.json
@@ -0,0 +1,761 @@
+{
+ "US": {
+ "name": "Àdnà i Bilɔ̀ŋ bi Amerkà"
+ },
+ "AE": {
+ "name": "Àdnà i Bilɔ̀ŋ bi ArÄbìà"
+ },
+ "GB": {
+ "name": "Àdnà i Lɔ̂ŋ"
+ },
+ "AF": {
+ "name": "Àfgànìstâŋ"
+ },
+ "ZA": {
+ "name": "ÀfrÇkà Sɔ̀"
+ },
+ "HT": {
+ "name": "Àitì"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Àlbanìà"
+ },
+ "DZ": {
+ "name": "Àlgerìà"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AD": {
+ "name": "Àŋdɔ̂r"
+ },
+ "AI": {
+ "name": "Àŋgiyà"
+ },
+ "AO": {
+ "name": "Àŋgolà"
+ },
+ "AG": {
+ "name": "Àŋtigà ɓɔ Bàrbudà"
+ },
+ "AR": {
+ "name": "Àrgàŋtinà"
+ },
+ "AM": {
+ "name": "Àrmenìà"
+ },
+ "AW": {
+ "name": "Àrubà"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AZ": {
+ "name": "Àzɛ̀rbajàŋ"
+ },
+ "BS": {
+ "name": "Bàhamàs"
+ },
+ "BD": {
+ "name": "Bàŋglàdɛ̂s"
+ },
+ "BH": {
+ "name": "Bàraìn"
+ },
+ "BB": {
+ "name": "Bàrbadò"
+ },
+ "BY": {
+ "name": "Bèlarùs"
+ },
+ "BZ": {
+ "name": "Bèlîs"
+ },
+ "BJ": {
+ "name": "Bènɛ̂ŋ"
+ },
+ "BE": {
+ "name": "Bɛlgyùm"
+ },
+ "BM": {
+ "name": "Bɛ̀rmudà"
+ },
+ "FK": {
+ "name": "Bìòn bi Falkland"
+ },
+ "KY": {
+ "name": "Bìòn bi Kaymàn"
+ },
+ "CK": {
+ "name": "Bìòn bi Kook"
+ },
+ "VG": {
+ "name": "Bìòn bi kɔnji bi Ŋgisì"
+ },
+ "VI": {
+ "name": "Bìòn bi kɔnji bi U.S."
+ },
+ "MH": {
+ "name": "Bìòn bi Marcàl"
+ },
+ "MP": {
+ "name": "Bìòn bi Marìanà ŋ̀ɔmbɔk"
+ },
+ "SB": {
+ "name": "Bìòn bi SalÅmò"
+ },
+ "TC": {
+ "name": "Bìòn bi Tûrks nì Kalkòs"
+ },
+ "IO": {
+ "name": "Bìtèk bi Ŋgisì i Tūyɛ Īndìà"
+ },
+ "BW": {
+ "name": "Bòdsùanà"
+ },
+ "BA": {
+ "name": "Bòhnià Ærzègòvinà"
+ },
+ "BO": {
+ "name": "Bòlivìà"
+ },
+ "BR": {
+ "name": "Bràsîl"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bùlgarìà"
+ },
+ "BF": {
+ "name": "Bùrkìnà Fasò"
+ },
+ "BI": {
+ "name": "Bùrundì"
+ },
+ "BT": {
+ "name": "Bùtân"
+ },
+ "TD": {
+ "name": "Câd"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Dànmârk"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dòmnîk"
+ },
+ "DO": {
+ "name": "Dòmnikà"
+ },
+ "EG": {
+ "name": "Ègîptò"
+ },
+ "EC": {
+ "name": "Èkwàtorìà"
+ },
+ "ER": {
+ "name": "Èrìtrěà"
+ },
+ "EE": {
+ "name": "Èstonìà"
+ },
+ "ET": {
+ "name": "Ètìopìà"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Fìlìpîn"
+ },
+ "FI": {
+ "name": "Fìnlând"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gàbɔ̂ŋ"
+ },
+ "GM": {
+ "name": "Gàmbià"
+ },
+ "GH": {
+ "name": "Ganà"
+ },
+ "GE": {
+ "name": "Gèɔrgìà"
+ },
+ "GI": {
+ "name": "Gìlbràtâr"
+ },
+ "GN": {
+ "name": "Gìnê"
+ },
+ "GW": {
+ "name": "Gìne Bìsàô"
+ },
+ "GQ": {
+ "name": "Gìne Èkwàtorìà"
+ },
+ "PG": {
+ "name": "Gìne ì Pàpu"
+ },
+ "GD": {
+ "name": "Grènadà"
+ },
+ "GR": {
+ "name": "GrÇkyà"
+ },
+ "GL": {
+ "name": "GrÇnlànd"
+ },
+ "GU": {
+ "name": "Gùâm"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Gùyanà"
+ },
+ "GF": {
+ "name": "Gùyanà Pùlàsi"
+ },
+ "GP": {
+ "name": "Gwàdèlûp"
+ },
+ "GT": {
+ "name": "Gwàtèmalà"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "IN": {
+ "name": "Indìà"
+ },
+ "ID": {
+ "name": "Indònèsià"
+ },
+ "IQ": {
+ "name": "Ìrâk"
+ },
+ "IR": {
+ "name": "Ìrâŋ"
+ },
+ "IE": {
+ "name": "Ìrlând"
+ },
+ "IS": {
+ "name": "Ìslandìà"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Isràɛ̂l"
+ },
+ "IT": {
+ "name": "Ìtalìà"
+ },
+ "JM": {
+ "name": "Jàmàikà"
+ },
+ "DE": {
+ "name": "Jamân"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "DJ": {
+ "name": "Jìbutì"
+ },
+ "CV": {
+ "name": "Kabwɛ᷆r"
+ },
+ "NC": {
+ "name": "Kàlèdonìà Yɔ̀ndɔ"
+ },
+ "KH": {
+ "name": "Kàmbodìà"
+ },
+ "CM": {
+ "name": "Kàmɛ̀rûn"
+ },
+ "CA": {
+ "name": "Kànadà"
+ },
+ "QA": {
+ "name": "Kàtâr"
+ },
+ "KZ": {
+ "name": "Kàzàkstâŋ"
+ },
+ "KE": {
+ "name": "Kenìà"
+ },
+ "CL": {
+ "name": "Kìlî"
+ },
+ "CN": {
+ "name": "Kinà"
+ },
+ "CY": {
+ "name": "Kiprò"
+ },
+ "KG": {
+ "name": "Kìrgìzìstàŋ"
+ },
+ "KI": {
+ "name": "Kìrìbatì"
+ },
+ "CG": {
+ "name": "Kòŋgo"
+ },
+ "CD": {
+ "name": "Kòŋgo ìkɛŋi"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kòstà Rikà"
+ },
+ "KW": {
+ "name": "Kòwêt"
+ },
+ "CO": {
+ "name": "Kɔ̀lɔmbìà"
+ },
+ "KM": {
+ "name": "Kɔ̀mɔ̂r"
+ },
+ "KP": {
+ "name": "Kɔ̀re ì Ŋ̀ɔmbɔk"
+ },
+ "KR": {
+ "name": "Kɔ̀re ì Ŋ̀wɛ̀lmbɔk"
+ },
+ "HR": {
+ "name": "Kròasìà"
+ },
+ "CU": {
+ "name": "Kubà"
+ },
+ "LV": {
+ "name": "Làdvià"
+ },
+ "LA": {
+ "name": "Làôs"
+ },
+ "LB": {
+ "name": "Lèbanòn"
+ },
+ "LS": {
+ "name": "Lesòtò"
+ },
+ "LR": {
+ "name": "Lìberìà"
+ },
+ "LY": {
+ "name": "Libìà"
+ },
+ "LI": {
+ "name": "Ligstɛntàn"
+ },
+ "LT": {
+ "name": "Lìtùanìà"
+ },
+ "LU": {
+ "name": "Lùgsàmbûr"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Màdàgàskâr"
+ },
+ "MW": {
+ "name": "Màlàwi"
+ },
+ "MV": {
+ "name": "Màldîf"
+ },
+ "MY": {
+ "name": "Màlɛ̀sìà"
+ },
+ "ML": {
+ "name": "Màli"
+ },
+ "MT": {
+ "name": "Maltà"
+ },
+ "CI": {
+ "name": "Màŋ mi Njɔ̂k"
+ },
+ "MA": {
+ "name": "Màrokò"
+ },
+ "MQ": {
+ "name": "Màrtìnîk"
+ },
+ "MK": {
+ "name": "Màsèdonìà"
+ },
+ "YT": {
+ "name": "Màyɔ̂t"
+ },
+ "MX": {
+ "name": "Mɛ̀gsîk"
+ },
+ "FM": {
+ "name": "Mìkrònesìà"
+ },
+ "MD": {
+ "name": "Moldavìà"
+ },
+ "MC": {
+ "name": "Mònakò"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MN": {
+ "name": "Mòŋgolìà"
+ },
+ "MU": {
+ "name": "Mòrîs"
+ },
+ "MR": {
+ "name": "Mòrìtanìà"
+ },
+ "MZ": {
+ "name": "Mòsàmbîk"
+ },
+ "MS": {
+ "name": "Mɔ̀ŋseràt"
+ },
+ "MM": {
+ "name": "Myànmâr"
+ },
+ "NA": {
+ "name": "Nàmibìà"
+ },
+ "NP": {
+ "name": "Nèpâl"
+ },
+ "NR": {
+ "name": "Nerù"
+ },
+ "NG": {
+ "name": "Nìgerìà"
+ },
+ "NE": {
+ "name": "Nìjɛ̂r"
+ },
+ "NI": {
+ "name": "Nìkàragwà"
+ },
+ "NU": {
+ "name": "Nìuɛ̀"
+ },
+ "NL": {
+ "name": "Ǹlɛndi"
+ },
+ "NO": {
+ "name": "Nɔ̀rvegìà"
+ },
+ "SH": {
+ "name": "Nûmpubi ÆlÄ“nà"
+ },
+ "KN": {
+ "name": "Nûmpubi Kîts nì Nevìs"
+ },
+ "LC": {
+ "name": "Nûmpubi Lusì"
+ },
+ "SM": {
+ "name": "Nûmpubi MÄatìn"
+ },
+ "PM": {
+ "name": "Nûmpubi Petrò nì Mikèlôn"
+ },
+ "VC": {
+ "name": "Nûmpubi Vɛ̂ŋsâŋ nì grènàdîn"
+ },
+ "CF": {
+ "name": "Ŋ̀ɛm Afrīkà"
+ },
+ "OM": {
+ "name": "Òmân"
+ },
+ "NF": {
+ "name": "Òn i Nɔrfɔ̂k"
+ },
+ "AU": {
+ "name": "Òstralìà"
+ },
+ "AT": {
+ "name": "Ã’strÇk"
+ },
+ "HN": {
+ "name": "Ɔ̀ŋduràs"
+ },
+ "HU": {
+ "name": "Ɔ̀ŋgriì"
+ },
+ "PK": {
+ "name": "Pàkìstân"
+ },
+ "PW": {
+ "name": "Pàlaù"
+ },
+ "PS": {
+ "name": "Pàlɛ̀htinà Hyɔ̀ŋg nì Gazà"
+ },
+ "PA": {
+ "name": "Pànàma"
+ },
+ "ES": {
+ "name": "Pànya"
+ },
+ "PY": {
+ "name": "Pàràgwê"
+ },
+ "PE": {
+ "name": "Pèrû"
+ },
+ "PN": {
+ "name": "Pìdkaìrn"
+ },
+ "PL": {
+ "name": "Pòlànd"
+ },
+ "PF": {
+ "name": "Pòlìnesìà Pùlàsi"
+ },
+ "PR": {
+ "name": "Pɔ̀rtò Rikò"
+ },
+ "PT": {
+ "name": "Pɔ̀tɔkì"
+ },
+ "FR": {
+ "name": "Pùlàsi \/ Fɛ̀lɛ̀nsi \/"
+ },
+ "RE": {
+ "name": "Rèunyɔ̂ŋ"
+ },
+ "RW": {
+ "name": "Rùandà"
+ },
+ "RO": {
+ "name": "Rùmanìà"
+ },
+ "RU": {
+ "name": "Ruslànd"
+ },
+ "SV": {
+ "name": "Sàlvàdɔ̂r"
+ },
+ "WS": {
+ "name": "Sàmoà"
+ },
+ "ST": {
+ "name": "Sào Tòme ɓɔ Prɛ̀ŋcipè"
+ },
+ "SA": {
+ "name": "Sàudi Àrabìà"
+ },
+ "SN": {
+ "name": "Sènègâl"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Sèsɛ̂l"
+ },
+ "SL": {
+ "name": "Sièra Lèɔ̂n"
+ },
+ "NZ": {
+ "name": "Sìlând Yɔ̀ndɔ"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SG": {
+ "name": "Sìŋgàpûr"
+ },
+ "SY": {
+ "name": "Sirìà"
+ },
+ "SK": {
+ "name": "Slòvakìà"
+ },
+ "SI": {
+ "name": "Slòvanìà"
+ },
+ "SO": {
+ "name": "Sòmalìà"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "LK": {
+ "name": "Srìlaŋkà"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sùdâŋ"
+ },
+ "SR": {
+ "name": "Sùrinâm"
+ },
+ "CH": {
+ "name": "Sùwîs"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swàzìlând"
+ },
+ "SE": {
+ "name": "Swedɛ̀n"
+ },
+ "TJ": {
+ "name": "Tàjìkìstaŋ"
+ },
+ "TZ": {
+ "name": "Tànzànià"
+ },
+ "TH": {
+ "name": "Taylànd"
+ },
+ "TW": {
+ "name": "Tàywân"
+ },
+ "TL": {
+ "name": "Tìmɔ̂r lìkòl"
+ },
+ "TG": {
+ "name": "Tògo"
+ },
+ "TK": {
+ "name": "Tòkèlaò"
+ },
+ "TO": {
+ "name": "Tɔŋgà"
+ },
+ "TT": {
+ "name": "Trìnidàd ɓɔ Tòbagò"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tùnisìà"
+ },
+ "TM": {
+ "name": "Tùrgmènìstân"
+ },
+ "TR": {
+ "name": "Tùrkây"
+ },
+ "TV": {
+ "name": "Tùvàlù"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "Ùgandà"
+ },
+ "UA": {
+ "name": "Ùkrɛ̌n"
+ },
+ "UY": {
+ "name": "Ùrùgwêy"
+ },
+ "UZ": {
+ "name": "Ùzbèkìstân"
+ },
+ "VU": {
+ "name": "Vànùatù"
+ },
+ "VA": {
+ "name": "Vàtìkâŋ"
+ },
+ "VE": {
+ "name": "Vènèzùelà"
+ },
+ "VN": {
+ "name": "Vìɛ̀dnâm"
+ },
+ "WF": {
+ "name": "Wàlîs nì Fùtunà"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yèmɛ̂n"
+ },
+ "JO": {
+ "name": "Yɔ̀rdanià"
+ },
+ "ZM": {
+ "name": "Zàmbià"
+ },
+ "ZW": {
+ "name": "Zìmbàbwê"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/base.json b/library/intl/resources/country/base.json
new file mode 100644
index 000000000..20100624b
--- /dev/null
+++ b/library/intl/resources/country/base.json
@@ -0,0 +1,1511 @@
+{
+ "AC": {
+ "code": "AC",
+ "three_letter_code": "ASC",
+ "telephone_code": "247"
+ },
+ "AD": {
+ "code": "AD",
+ "three_letter_code": "AND",
+ "numeric_code": "020",
+ "telephone_code": "376"
+ },
+ "AE": {
+ "code": "AE",
+ "three_letter_code": "ARE",
+ "numeric_code": "784",
+ "telephone_code": "971"
+ },
+ "AF": {
+ "code": "AF",
+ "three_letter_code": "AFG",
+ "numeric_code": "004",
+ "telephone_code": "93"
+ },
+ "AG": {
+ "code": "AG",
+ "three_letter_code": "ATG",
+ "numeric_code": "028",
+ "telephone_code": "1"
+ },
+ "AI": {
+ "code": "AI",
+ "three_letter_code": "AIA",
+ "numeric_code": "660",
+ "telephone_code": "1"
+ },
+ "AL": {
+ "code": "AL",
+ "three_letter_code": "ALB",
+ "numeric_code": "008",
+ "telephone_code": "355"
+ },
+ "AM": {
+ "code": "AM",
+ "three_letter_code": "ARM",
+ "numeric_code": "051",
+ "telephone_code": "374"
+ },
+ "AO": {
+ "code": "AO",
+ "three_letter_code": "AGO",
+ "numeric_code": "024",
+ "telephone_code": "244"
+ },
+ "AQ": {
+ "code": "AQ",
+ "three_letter_code": "ATA",
+ "numeric_code": "010",
+ "telephone_code": "672"
+ },
+ "AR": {
+ "code": "AR",
+ "three_letter_code": "ARG",
+ "numeric_code": "032",
+ "telephone_code": "54"
+ },
+ "AS": {
+ "code": "AS",
+ "three_letter_code": "ASM",
+ "numeric_code": "016",
+ "telephone_code": "1"
+ },
+ "AT": {
+ "code": "AT",
+ "three_letter_code": "AUT",
+ "numeric_code": "040",
+ "telephone_code": "43"
+ },
+ "AU": {
+ "code": "AU",
+ "three_letter_code": "AUS",
+ "numeric_code": "036",
+ "telephone_code": "61"
+ },
+ "AW": {
+ "code": "AW",
+ "three_letter_code": "ABW",
+ "numeric_code": "533",
+ "telephone_code": "297"
+ },
+ "AX": {
+ "code": "AX",
+ "three_letter_code": "ALA",
+ "numeric_code": "248",
+ "telephone_code": "358"
+ },
+ "AZ": {
+ "code": "AZ",
+ "three_letter_code": "AZE",
+ "numeric_code": "031",
+ "telephone_code": "994"
+ },
+ "BA": {
+ "code": "BA",
+ "three_letter_code": "BIH",
+ "numeric_code": "070",
+ "telephone_code": "387"
+ },
+ "BB": {
+ "code": "BB",
+ "three_letter_code": "BRB",
+ "numeric_code": "052",
+ "telephone_code": "1"
+ },
+ "BD": {
+ "code": "BD",
+ "three_letter_code": "BGD",
+ "numeric_code": "050",
+ "telephone_code": "880"
+ },
+ "BE": {
+ "code": "BE",
+ "three_letter_code": "BEL",
+ "numeric_code": "056",
+ "telephone_code": "32"
+ },
+ "BF": {
+ "code": "BF",
+ "three_letter_code": "BFA",
+ "numeric_code": "854",
+ "telephone_code": "226"
+ },
+ "BG": {
+ "code": "BG",
+ "three_letter_code": "BGR",
+ "numeric_code": "100",
+ "telephone_code": "359"
+ },
+ "BH": {
+ "code": "BH",
+ "three_letter_code": "BHR",
+ "numeric_code": "048",
+ "telephone_code": "973"
+ },
+ "BI": {
+ "code": "BI",
+ "three_letter_code": "BDI",
+ "numeric_code": "108",
+ "telephone_code": "257"
+ },
+ "BJ": {
+ "code": "BJ",
+ "three_letter_code": "BEN",
+ "numeric_code": "204",
+ "telephone_code": "229"
+ },
+ "BL": {
+ "code": "BL",
+ "three_letter_code": "BLM",
+ "numeric_code": "652",
+ "telephone_code": "590"
+ },
+ "BM": {
+ "code": "BM",
+ "three_letter_code": "BMU",
+ "numeric_code": "060",
+ "telephone_code": "1"
+ },
+ "BN": {
+ "code": "BN",
+ "three_letter_code": "BRN",
+ "numeric_code": "096",
+ "telephone_code": "673"
+ },
+ "BO": {
+ "code": "BO",
+ "three_letter_code": "BOL",
+ "numeric_code": "068",
+ "telephone_code": "591"
+ },
+ "BQ": {
+ "code": "BQ",
+ "three_letter_code": "BES",
+ "numeric_code": "535",
+ "telephone_code": "599"
+ },
+ "BR": {
+ "code": "BR",
+ "three_letter_code": "BRA",
+ "numeric_code": "076",
+ "telephone_code": "55"
+ },
+ "BS": {
+ "code": "BS",
+ "three_letter_code": "BHS",
+ "numeric_code": "044",
+ "telephone_code": "1"
+ },
+ "BT": {
+ "code": "BT",
+ "three_letter_code": "BTN",
+ "numeric_code": "064",
+ "telephone_code": "975"
+ },
+ "BW": {
+ "code": "BW",
+ "three_letter_code": "BWA",
+ "numeric_code": "072",
+ "telephone_code": "267"
+ },
+ "BY": {
+ "code": "BY",
+ "three_letter_code": "BLR",
+ "numeric_code": "112",
+ "telephone_code": "375"
+ },
+ "BZ": {
+ "code": "BZ",
+ "three_letter_code": "BLZ",
+ "numeric_code": "084",
+ "telephone_code": "501"
+ },
+ "CA": {
+ "code": "CA",
+ "three_letter_code": "CAN",
+ "numeric_code": "124",
+ "telephone_code": "1"
+ },
+ "CC": {
+ "code": "CC",
+ "three_letter_code": "CCK",
+ "numeric_code": "166",
+ "telephone_code": "61"
+ },
+ "CD": {
+ "code": "CD",
+ "three_letter_code": "COD",
+ "numeric_code": "180",
+ "telephone_code": "243"
+ },
+ "CF": {
+ "code": "CF",
+ "three_letter_code": "CAF",
+ "numeric_code": "140",
+ "telephone_code": "236"
+ },
+ "CG": {
+ "code": "CG",
+ "three_letter_code": "COG",
+ "numeric_code": "178",
+ "telephone_code": "242"
+ },
+ "CH": {
+ "code": "CH",
+ "three_letter_code": "CHE",
+ "numeric_code": "756",
+ "telephone_code": "41"
+ },
+ "CI": {
+ "code": "CI",
+ "three_letter_code": "CIV",
+ "numeric_code": "384",
+ "telephone_code": "225"
+ },
+ "CK": {
+ "code": "CK",
+ "three_letter_code": "COK",
+ "numeric_code": "184",
+ "telephone_code": "682"
+ },
+ "CL": {
+ "code": "CL",
+ "three_letter_code": "CHL",
+ "numeric_code": "152",
+ "telephone_code": "56"
+ },
+ "CM": {
+ "code": "CM",
+ "three_letter_code": "CMR",
+ "numeric_code": "120",
+ "telephone_code": "237"
+ },
+ "CN": {
+ "code": "CN",
+ "three_letter_code": "CHN",
+ "numeric_code": "156",
+ "telephone_code": "86"
+ },
+ "CO": {
+ "code": "CO",
+ "three_letter_code": "COL",
+ "numeric_code": "170",
+ "telephone_code": "57"
+ },
+ "CR": {
+ "code": "CR",
+ "three_letter_code": "CRI",
+ "numeric_code": "188",
+ "telephone_code": "506"
+ },
+ "CU": {
+ "code": "CU",
+ "three_letter_code": "CUB",
+ "numeric_code": "192",
+ "telephone_code": "53"
+ },
+ "CV": {
+ "code": "CV",
+ "three_letter_code": "CPV",
+ "numeric_code": "132",
+ "telephone_code": "238"
+ },
+ "CW": {
+ "code": "CW",
+ "three_letter_code": "CUW",
+ "numeric_code": "531",
+ "telephone_code": "599"
+ },
+ "CX": {
+ "code": "CX",
+ "three_letter_code": "CXR",
+ "numeric_code": "162",
+ "telephone_code": "61"
+ },
+ "CY": {
+ "code": "CY",
+ "three_letter_code": "CYP",
+ "numeric_code": "196",
+ "telephone_code": "357"
+ },
+ "CZ": {
+ "code": "CZ",
+ "three_letter_code": "CZE",
+ "numeric_code": "203",
+ "telephone_code": "420"
+ },
+ "DE": {
+ "code": "DE",
+ "three_letter_code": "DEU",
+ "numeric_code": "276",
+ "telephone_code": "49"
+ },
+ "DG": {
+ "code": "DG",
+ "three_letter_code": "DGA"
+ },
+ "DJ": {
+ "code": "DJ",
+ "three_letter_code": "DJI",
+ "numeric_code": "262",
+ "telephone_code": "253"
+ },
+ "DK": {
+ "code": "DK",
+ "three_letter_code": "DNK",
+ "numeric_code": "208",
+ "telephone_code": "45"
+ },
+ "DM": {
+ "code": "DM",
+ "three_letter_code": "DMA",
+ "numeric_code": "212",
+ "telephone_code": "1"
+ },
+ "DO": {
+ "code": "DO",
+ "three_letter_code": "DOM",
+ "numeric_code": "214",
+ "telephone_code": "1"
+ },
+ "DZ": {
+ "code": "DZ",
+ "three_letter_code": "DZA",
+ "numeric_code": "012",
+ "telephone_code": "213"
+ },
+ "EA": {
+ "code": "EA",
+ "telephone_code": "34"
+ },
+ "EC": {
+ "code": "EC",
+ "three_letter_code": "ECU",
+ "numeric_code": "218",
+ "telephone_code": "593"
+ },
+ "EE": {
+ "code": "EE",
+ "three_letter_code": "EST",
+ "numeric_code": "233",
+ "telephone_code": "372"
+ },
+ "EG": {
+ "code": "EG",
+ "three_letter_code": "EGY",
+ "numeric_code": "818",
+ "telephone_code": "20"
+ },
+ "EH": {
+ "code": "EH",
+ "three_letter_code": "ESH",
+ "numeric_code": "732",
+ "telephone_code": "212"
+ },
+ "ER": {
+ "code": "ER",
+ "three_letter_code": "ERI",
+ "numeric_code": "232",
+ "telephone_code": "291"
+ },
+ "ES": {
+ "code": "ES",
+ "three_letter_code": "ESP",
+ "numeric_code": "724",
+ "telephone_code": "34"
+ },
+ "ET": {
+ "code": "ET",
+ "three_letter_code": "ETH",
+ "numeric_code": "231",
+ "telephone_code": "251"
+ },
+ "FI": {
+ "code": "FI",
+ "three_letter_code": "FIN",
+ "numeric_code": "246",
+ "telephone_code": "358"
+ },
+ "FJ": {
+ "code": "FJ",
+ "three_letter_code": "FJI",
+ "numeric_code": "242",
+ "telephone_code": "679"
+ },
+ "FK": {
+ "code": "FK",
+ "three_letter_code": "FLK",
+ "numeric_code": "238",
+ "telephone_code": "500"
+ },
+ "FM": {
+ "code": "FM",
+ "three_letter_code": "FSM",
+ "numeric_code": "583",
+ "telephone_code": "691"
+ },
+ "FO": {
+ "code": "FO",
+ "three_letter_code": "FRO",
+ "numeric_code": "234",
+ "telephone_code": "298"
+ },
+ "FR": {
+ "code": "FR",
+ "three_letter_code": "FRA",
+ "numeric_code": "250",
+ "telephone_code": "33"
+ },
+ "GA": {
+ "code": "GA",
+ "three_letter_code": "GAB",
+ "numeric_code": "266",
+ "telephone_code": "241"
+ },
+ "GB": {
+ "code": "GB",
+ "three_letter_code": "GBR",
+ "numeric_code": "826",
+ "telephone_code": "44"
+ },
+ "GD": {
+ "code": "GD",
+ "three_letter_code": "GRD",
+ "numeric_code": "308",
+ "telephone_code": "1"
+ },
+ "GE": {
+ "code": "GE",
+ "three_letter_code": "GEO",
+ "numeric_code": "268",
+ "telephone_code": "995"
+ },
+ "GF": {
+ "code": "GF",
+ "three_letter_code": "GUF",
+ "numeric_code": "254",
+ "telephone_code": "594"
+ },
+ "GG": {
+ "code": "GG",
+ "three_letter_code": "GGY",
+ "numeric_code": "831",
+ "telephone_code": "44"
+ },
+ "GH": {
+ "code": "GH",
+ "three_letter_code": "GHA",
+ "numeric_code": "288",
+ "telephone_code": "233"
+ },
+ "GI": {
+ "code": "GI",
+ "three_letter_code": "GIB",
+ "numeric_code": "292",
+ "telephone_code": "350"
+ },
+ "GL": {
+ "code": "GL",
+ "three_letter_code": "GRL",
+ "numeric_code": "304",
+ "telephone_code": "299"
+ },
+ "GM": {
+ "code": "GM",
+ "three_letter_code": "GMB",
+ "numeric_code": "270",
+ "telephone_code": "220"
+ },
+ "GN": {
+ "code": "GN",
+ "three_letter_code": "GIN",
+ "numeric_code": "324",
+ "telephone_code": "224"
+ },
+ "GP": {
+ "code": "GP",
+ "three_letter_code": "GLP",
+ "numeric_code": "312",
+ "telephone_code": "590"
+ },
+ "GQ": {
+ "code": "GQ",
+ "three_letter_code": "GNQ",
+ "numeric_code": "226",
+ "telephone_code": "240"
+ },
+ "GR": {
+ "code": "GR",
+ "three_letter_code": "GRC",
+ "numeric_code": "300",
+ "telephone_code": "30"
+ },
+ "GS": {
+ "code": "GS",
+ "three_letter_code": "SGS",
+ "numeric_code": "239",
+ "telephone_code": "500"
+ },
+ "GT": {
+ "code": "GT",
+ "three_letter_code": "GTM",
+ "numeric_code": "320",
+ "telephone_code": "502"
+ },
+ "GU": {
+ "code": "GU",
+ "three_letter_code": "GUM",
+ "numeric_code": "316",
+ "telephone_code": "1"
+ },
+ "GW": {
+ "code": "GW",
+ "three_letter_code": "GNB",
+ "numeric_code": "624",
+ "telephone_code": "245"
+ },
+ "GY": {
+ "code": "GY",
+ "three_letter_code": "GUY",
+ "numeric_code": "328",
+ "telephone_code": "592"
+ },
+ "HK": {
+ "code": "HK",
+ "three_letter_code": "HKG",
+ "numeric_code": "344",
+ "telephone_code": "852"
+ },
+ "HN": {
+ "code": "HN",
+ "three_letter_code": "HND",
+ "numeric_code": "340",
+ "telephone_code": "504"
+ },
+ "HR": {
+ "code": "HR",
+ "three_letter_code": "HRV",
+ "numeric_code": "191",
+ "telephone_code": "385"
+ },
+ "HT": {
+ "code": "HT",
+ "three_letter_code": "HTI",
+ "numeric_code": "332",
+ "telephone_code": "509"
+ },
+ "HU": {
+ "code": "HU",
+ "three_letter_code": "HUN",
+ "numeric_code": "348",
+ "telephone_code": "36"
+ },
+ "IC": {
+ "code": "IC",
+ "telephone_code": "34"
+ },
+ "ID": {
+ "code": "ID",
+ "three_letter_code": "IDN",
+ "numeric_code": "360",
+ "telephone_code": "62"
+ },
+ "IE": {
+ "code": "IE",
+ "three_letter_code": "IRL",
+ "numeric_code": "372",
+ "telephone_code": "353"
+ },
+ "IL": {
+ "code": "IL",
+ "three_letter_code": "ISR",
+ "numeric_code": "376",
+ "telephone_code": "972"
+ },
+ "IM": {
+ "code": "IM",
+ "three_letter_code": "IMN",
+ "numeric_code": "833",
+ "telephone_code": "44"
+ },
+ "IN": {
+ "code": "IN",
+ "three_letter_code": "IND",
+ "numeric_code": "356",
+ "telephone_code": "91"
+ },
+ "IO": {
+ "code": "IO",
+ "three_letter_code": "IOT",
+ "numeric_code": "086",
+ "telephone_code": "246"
+ },
+ "IQ": {
+ "code": "IQ",
+ "three_letter_code": "IRQ",
+ "numeric_code": "368",
+ "telephone_code": "964"
+ },
+ "IR": {
+ "code": "IR",
+ "three_letter_code": "IRN",
+ "numeric_code": "364",
+ "telephone_code": "98"
+ },
+ "IS": {
+ "code": "IS",
+ "three_letter_code": "ISL",
+ "numeric_code": "352",
+ "telephone_code": "354"
+ },
+ "IT": {
+ "code": "IT",
+ "three_letter_code": "ITA",
+ "numeric_code": "380",
+ "telephone_code": "39"
+ },
+ "JE": {
+ "code": "JE",
+ "three_letter_code": "JEY",
+ "numeric_code": "832",
+ "telephone_code": "44"
+ },
+ "JM": {
+ "code": "JM",
+ "three_letter_code": "JAM",
+ "numeric_code": "388",
+ "telephone_code": "1"
+ },
+ "JO": {
+ "code": "JO",
+ "three_letter_code": "JOR",
+ "numeric_code": "400",
+ "telephone_code": "962"
+ },
+ "JP": {
+ "code": "JP",
+ "three_letter_code": "JPN",
+ "numeric_code": "392",
+ "telephone_code": "81"
+ },
+ "KE": {
+ "code": "KE",
+ "three_letter_code": "KEN",
+ "numeric_code": "404",
+ "telephone_code": "254"
+ },
+ "KG": {
+ "code": "KG",
+ "three_letter_code": "KGZ",
+ "numeric_code": "417",
+ "telephone_code": "996"
+ },
+ "KH": {
+ "code": "KH",
+ "three_letter_code": "KHM",
+ "numeric_code": "116",
+ "telephone_code": "855"
+ },
+ "KI": {
+ "code": "KI",
+ "three_letter_code": "KIR",
+ "numeric_code": "296",
+ "telephone_code": "686"
+ },
+ "KM": {
+ "code": "KM",
+ "three_letter_code": "COM",
+ "numeric_code": "174",
+ "telephone_code": "269"
+ },
+ "KN": {
+ "code": "KN",
+ "three_letter_code": "KNA",
+ "numeric_code": "659",
+ "telephone_code": "1"
+ },
+ "KP": {
+ "code": "KP",
+ "three_letter_code": "PRK",
+ "numeric_code": "408",
+ "telephone_code": "850"
+ },
+ "KR": {
+ "code": "KR",
+ "three_letter_code": "KOR",
+ "numeric_code": "410",
+ "telephone_code": "82"
+ },
+ "KW": {
+ "code": "KW",
+ "three_letter_code": "KWT",
+ "numeric_code": "414",
+ "telephone_code": "965"
+ },
+ "KY": {
+ "code": "KY",
+ "three_letter_code": "CYM",
+ "numeric_code": "136",
+ "telephone_code": "1"
+ },
+ "KZ": {
+ "code": "KZ",
+ "three_letter_code": "KAZ",
+ "numeric_code": "398",
+ "telephone_code": "7"
+ },
+ "LA": {
+ "code": "LA",
+ "three_letter_code": "LAO",
+ "numeric_code": "418",
+ "telephone_code": "856"
+ },
+ "LB": {
+ "code": "LB",
+ "three_letter_code": "LBN",
+ "numeric_code": "422",
+ "telephone_code": "961"
+ },
+ "LC": {
+ "code": "LC",
+ "three_letter_code": "LCA",
+ "numeric_code": "662",
+ "telephone_code": "1"
+ },
+ "LI": {
+ "code": "LI",
+ "three_letter_code": "LIE",
+ "numeric_code": "438",
+ "telephone_code": "423"
+ },
+ "LK": {
+ "code": "LK",
+ "three_letter_code": "LKA",
+ "numeric_code": "144",
+ "telephone_code": "94"
+ },
+ "LR": {
+ "code": "LR",
+ "three_letter_code": "LBR",
+ "numeric_code": "430",
+ "telephone_code": "231"
+ },
+ "LS": {
+ "code": "LS",
+ "three_letter_code": "LSO",
+ "numeric_code": "426",
+ "telephone_code": "266"
+ },
+ "LT": {
+ "code": "LT",
+ "three_letter_code": "LTU",
+ "numeric_code": "440",
+ "telephone_code": "370"
+ },
+ "LU": {
+ "code": "LU",
+ "three_letter_code": "LUX",
+ "numeric_code": "442",
+ "telephone_code": "352"
+ },
+ "LV": {
+ "code": "LV",
+ "three_letter_code": "LVA",
+ "numeric_code": "428",
+ "telephone_code": "371"
+ },
+ "LY": {
+ "code": "LY",
+ "three_letter_code": "LBY",
+ "numeric_code": "434",
+ "telephone_code": "218"
+ },
+ "MA": {
+ "code": "MA",
+ "three_letter_code": "MAR",
+ "numeric_code": "504",
+ "telephone_code": "212"
+ },
+ "MC": {
+ "code": "MC",
+ "three_letter_code": "MCO",
+ "numeric_code": "492",
+ "telephone_code": "377"
+ },
+ "MD": {
+ "code": "MD",
+ "three_letter_code": "MDA",
+ "numeric_code": "498",
+ "telephone_code": "373"
+ },
+ "ME": {
+ "code": "ME",
+ "three_letter_code": "MNE",
+ "numeric_code": "499",
+ "telephone_code": "382"
+ },
+ "MF": {
+ "code": "MF",
+ "three_letter_code": "MAF",
+ "numeric_code": "663",
+ "telephone_code": "590"
+ },
+ "MG": {
+ "code": "MG",
+ "three_letter_code": "MDG",
+ "numeric_code": "450",
+ "telephone_code": "261"
+ },
+ "MH": {
+ "code": "MH",
+ "three_letter_code": "MHL",
+ "numeric_code": "584",
+ "telephone_code": "692"
+ },
+ "MK": {
+ "code": "MK",
+ "three_letter_code": "MKD",
+ "numeric_code": "807",
+ "telephone_code": "389"
+ },
+ "ML": {
+ "code": "ML",
+ "three_letter_code": "MLI",
+ "numeric_code": "466",
+ "telephone_code": "223"
+ },
+ "MM": {
+ "code": "MM",
+ "three_letter_code": "MMR",
+ "numeric_code": "104",
+ "telephone_code": "95"
+ },
+ "MN": {
+ "code": "MN",
+ "three_letter_code": "MNG",
+ "numeric_code": "496",
+ "telephone_code": "976"
+ },
+ "MO": {
+ "code": "MO",
+ "three_letter_code": "MAC",
+ "numeric_code": "446",
+ "telephone_code": "853"
+ },
+ "MP": {
+ "code": "MP",
+ "three_letter_code": "MNP",
+ "numeric_code": "580",
+ "telephone_code": "1"
+ },
+ "MQ": {
+ "code": "MQ",
+ "three_letter_code": "MTQ",
+ "numeric_code": "474",
+ "telephone_code": "596"
+ },
+ "MR": {
+ "code": "MR",
+ "three_letter_code": "MRT",
+ "numeric_code": "478",
+ "telephone_code": "222"
+ },
+ "MS": {
+ "code": "MS",
+ "three_letter_code": "MSR",
+ "numeric_code": "500",
+ "telephone_code": "1"
+ },
+ "MT": {
+ "code": "MT",
+ "three_letter_code": "MLT",
+ "numeric_code": "470",
+ "telephone_code": "356"
+ },
+ "MU": {
+ "code": "MU",
+ "three_letter_code": "MUS",
+ "numeric_code": "480",
+ "telephone_code": "230"
+ },
+ "MV": {
+ "code": "MV",
+ "three_letter_code": "MDV",
+ "numeric_code": "462",
+ "telephone_code": "960"
+ },
+ "MW": {
+ "code": "MW",
+ "three_letter_code": "MWI",
+ "numeric_code": "454",
+ "telephone_code": "265"
+ },
+ "MX": {
+ "code": "MX",
+ "three_letter_code": "MEX",
+ "numeric_code": "484",
+ "telephone_code": "52"
+ },
+ "MY": {
+ "code": "MY",
+ "three_letter_code": "MYS",
+ "numeric_code": "458",
+ "telephone_code": "60"
+ },
+ "MZ": {
+ "code": "MZ",
+ "three_letter_code": "MOZ",
+ "numeric_code": "508",
+ "telephone_code": "258"
+ },
+ "NA": {
+ "code": "NA",
+ "three_letter_code": "NAM",
+ "numeric_code": "516",
+ "telephone_code": "264"
+ },
+ "NC": {
+ "code": "NC",
+ "three_letter_code": "NCL",
+ "numeric_code": "540",
+ "telephone_code": "687"
+ },
+ "NE": {
+ "code": "NE",
+ "three_letter_code": "NER",
+ "numeric_code": "562",
+ "telephone_code": "227"
+ },
+ "NF": {
+ "code": "NF",
+ "three_letter_code": "NFK",
+ "numeric_code": "574",
+ "telephone_code": "672"
+ },
+ "NG": {
+ "code": "NG",
+ "three_letter_code": "NGA",
+ "numeric_code": "566",
+ "telephone_code": "234"
+ },
+ "NI": {
+ "code": "NI",
+ "three_letter_code": "NIC",
+ "numeric_code": "558",
+ "telephone_code": "505"
+ },
+ "NL": {
+ "code": "NL",
+ "three_letter_code": "NLD",
+ "numeric_code": "528",
+ "telephone_code": "31"
+ },
+ "NO": {
+ "code": "NO",
+ "three_letter_code": "NOR",
+ "numeric_code": "578",
+ "telephone_code": "47"
+ },
+ "NP": {
+ "code": "NP",
+ "three_letter_code": "NPL",
+ "numeric_code": "524",
+ "telephone_code": "977"
+ },
+ "NR": {
+ "code": "NR",
+ "three_letter_code": "NRU",
+ "numeric_code": "520",
+ "telephone_code": "674"
+ },
+ "NU": {
+ "code": "NU",
+ "three_letter_code": "NIU",
+ "numeric_code": "570",
+ "telephone_code": "683"
+ },
+ "NZ": {
+ "code": "NZ",
+ "three_letter_code": "NZL",
+ "numeric_code": "554",
+ "telephone_code": "64"
+ },
+ "OM": {
+ "code": "OM",
+ "three_letter_code": "OMN",
+ "numeric_code": "512",
+ "telephone_code": "968"
+ },
+ "PA": {
+ "code": "PA",
+ "three_letter_code": "PAN",
+ "numeric_code": "591",
+ "telephone_code": "507"
+ },
+ "PE": {
+ "code": "PE",
+ "three_letter_code": "PER",
+ "numeric_code": "604",
+ "telephone_code": "51"
+ },
+ "PF": {
+ "code": "PF",
+ "three_letter_code": "PYF",
+ "numeric_code": "258",
+ "telephone_code": "689"
+ },
+ "PG": {
+ "code": "PG",
+ "three_letter_code": "PNG",
+ "numeric_code": "598",
+ "telephone_code": "675"
+ },
+ "PH": {
+ "code": "PH",
+ "three_letter_code": "PHL",
+ "numeric_code": "608",
+ "telephone_code": "63"
+ },
+ "PK": {
+ "code": "PK",
+ "three_letter_code": "PAK",
+ "numeric_code": "586",
+ "telephone_code": "92"
+ },
+ "PL": {
+ "code": "PL",
+ "three_letter_code": "POL",
+ "numeric_code": "616",
+ "telephone_code": "48"
+ },
+ "PM": {
+ "code": "PM",
+ "three_letter_code": "SPM",
+ "numeric_code": "666",
+ "telephone_code": "508"
+ },
+ "PN": {
+ "code": "PN",
+ "three_letter_code": "PCN",
+ "numeric_code": "612",
+ "telephone_code": "870"
+ },
+ "PR": {
+ "code": "PR",
+ "three_letter_code": "PRI",
+ "numeric_code": "630",
+ "telephone_code": "1"
+ },
+ "PS": {
+ "code": "PS",
+ "three_letter_code": "PSE",
+ "numeric_code": "275",
+ "telephone_code": "970"
+ },
+ "PT": {
+ "code": "PT",
+ "three_letter_code": "PRT",
+ "numeric_code": "620",
+ "telephone_code": "351"
+ },
+ "PW": {
+ "code": "PW",
+ "three_letter_code": "PLW",
+ "numeric_code": "585",
+ "telephone_code": "680"
+ },
+ "PY": {
+ "code": "PY",
+ "three_letter_code": "PRY",
+ "numeric_code": "600",
+ "telephone_code": "595"
+ },
+ "QA": {
+ "code": "QA",
+ "three_letter_code": "QAT",
+ "numeric_code": "634",
+ "telephone_code": "974"
+ },
+ "RE": {
+ "code": "RE",
+ "three_letter_code": "REU",
+ "numeric_code": "638",
+ "telephone_code": "262"
+ },
+ "RO": {
+ "code": "RO",
+ "three_letter_code": "ROU",
+ "numeric_code": "642",
+ "telephone_code": "40"
+ },
+ "RS": {
+ "code": "RS",
+ "three_letter_code": "SRB",
+ "numeric_code": "688",
+ "telephone_code": "381"
+ },
+ "RU": {
+ "code": "RU",
+ "three_letter_code": "RUS",
+ "numeric_code": "643",
+ "telephone_code": "7"
+ },
+ "RW": {
+ "code": "RW",
+ "three_letter_code": "RWA",
+ "numeric_code": "646",
+ "telephone_code": "250"
+ },
+ "SA": {
+ "code": "SA",
+ "three_letter_code": "SAU",
+ "numeric_code": "682",
+ "telephone_code": "966"
+ },
+ "SB": {
+ "code": "SB",
+ "three_letter_code": "SLB",
+ "numeric_code": "090",
+ "telephone_code": "677"
+ },
+ "SC": {
+ "code": "SC",
+ "three_letter_code": "SYC",
+ "numeric_code": "690",
+ "telephone_code": "248"
+ },
+ "SD": {
+ "code": "SD",
+ "three_letter_code": "SDN",
+ "numeric_code": "729",
+ "telephone_code": "249"
+ },
+ "SE": {
+ "code": "SE",
+ "three_letter_code": "SWE",
+ "numeric_code": "752",
+ "telephone_code": "46"
+ },
+ "SG": {
+ "code": "SG",
+ "three_letter_code": "SGP",
+ "numeric_code": "702",
+ "telephone_code": "65"
+ },
+ "SH": {
+ "code": "SH",
+ "three_letter_code": "SHN",
+ "numeric_code": "654",
+ "telephone_code": "290"
+ },
+ "SI": {
+ "code": "SI",
+ "three_letter_code": "SVN",
+ "numeric_code": "705",
+ "telephone_code": "386"
+ },
+ "SJ": {
+ "code": "SJ",
+ "three_letter_code": "SJM",
+ "numeric_code": "744",
+ "telephone_code": "47"
+ },
+ "SK": {
+ "code": "SK",
+ "three_letter_code": "SVK",
+ "numeric_code": "703",
+ "telephone_code": "421"
+ },
+ "SL": {
+ "code": "SL",
+ "three_letter_code": "SLE",
+ "numeric_code": "694",
+ "telephone_code": "232"
+ },
+ "SM": {
+ "code": "SM",
+ "three_letter_code": "SMR",
+ "numeric_code": "674",
+ "telephone_code": "378"
+ },
+ "SN": {
+ "code": "SN",
+ "three_letter_code": "SEN",
+ "numeric_code": "686",
+ "telephone_code": "221"
+ },
+ "SO": {
+ "code": "SO",
+ "three_letter_code": "SOM",
+ "numeric_code": "706",
+ "telephone_code": "252"
+ },
+ "SR": {
+ "code": "SR",
+ "three_letter_code": "SUR",
+ "numeric_code": "740",
+ "telephone_code": "597"
+ },
+ "SS": {
+ "code": "SS",
+ "three_letter_code": "SSD",
+ "numeric_code": "728",
+ "telephone_code": "211"
+ },
+ "ST": {
+ "code": "ST",
+ "three_letter_code": "STP",
+ "numeric_code": "678",
+ "telephone_code": "239"
+ },
+ "SV": {
+ "code": "SV",
+ "three_letter_code": "SLV",
+ "numeric_code": "222",
+ "telephone_code": "503"
+ },
+ "SX": {
+ "code": "SX",
+ "three_letter_code": "SXM",
+ "numeric_code": "534",
+ "telephone_code": "1"
+ },
+ "SY": {
+ "code": "SY",
+ "three_letter_code": "SYR",
+ "numeric_code": "760",
+ "telephone_code": "963"
+ },
+ "SZ": {
+ "code": "SZ",
+ "three_letter_code": "SWZ",
+ "numeric_code": "748",
+ "telephone_code": "268"
+ },
+ "TA": {
+ "code": "TA",
+ "three_letter_code": "TAA"
+ },
+ "TC": {
+ "code": "TC",
+ "three_letter_code": "TCA",
+ "numeric_code": "796",
+ "telephone_code": "1"
+ },
+ "TD": {
+ "code": "TD",
+ "three_letter_code": "TCD",
+ "numeric_code": "148",
+ "telephone_code": "235"
+ },
+ "TF": {
+ "code": "TF",
+ "three_letter_code": "ATF",
+ "numeric_code": "260",
+ "telephone_code": "262"
+ },
+ "TG": {
+ "code": "TG",
+ "three_letter_code": "TGO",
+ "numeric_code": "768",
+ "telephone_code": "228"
+ },
+ "TH": {
+ "code": "TH",
+ "three_letter_code": "THA",
+ "numeric_code": "764",
+ "telephone_code": "66"
+ },
+ "TJ": {
+ "code": "TJ",
+ "three_letter_code": "TJK",
+ "numeric_code": "762",
+ "telephone_code": "992"
+ },
+ "TK": {
+ "code": "TK",
+ "three_letter_code": "TKL",
+ "numeric_code": "772",
+ "telephone_code": "690"
+ },
+ "TL": {
+ "code": "TL",
+ "three_letter_code": "TLS",
+ "numeric_code": "626",
+ "telephone_code": "670"
+ },
+ "TM": {
+ "code": "TM",
+ "three_letter_code": "TKM",
+ "numeric_code": "795",
+ "telephone_code": "993"
+ },
+ "TN": {
+ "code": "TN",
+ "three_letter_code": "TUN",
+ "numeric_code": "788",
+ "telephone_code": "216"
+ },
+ "TO": {
+ "code": "TO",
+ "three_letter_code": "TON",
+ "numeric_code": "776",
+ "telephone_code": "676"
+ },
+ "TR": {
+ "code": "TR",
+ "three_letter_code": "TUR",
+ "numeric_code": "792",
+ "telephone_code": "90"
+ },
+ "TT": {
+ "code": "TT",
+ "three_letter_code": "TTO",
+ "numeric_code": "780",
+ "telephone_code": "1"
+ },
+ "TV": {
+ "code": "TV",
+ "three_letter_code": "TUV",
+ "numeric_code": "798",
+ "telephone_code": "688"
+ },
+ "TW": {
+ "code": "TW",
+ "three_letter_code": "TWN",
+ "numeric_code": "158",
+ "telephone_code": "886"
+ },
+ "TZ": {
+ "code": "TZ",
+ "three_letter_code": "TZA",
+ "numeric_code": "834",
+ "telephone_code": "255"
+ },
+ "UA": {
+ "code": "UA",
+ "three_letter_code": "UKR",
+ "numeric_code": "804",
+ "telephone_code": "380"
+ },
+ "UG": {
+ "code": "UG",
+ "three_letter_code": "UGA",
+ "numeric_code": "800",
+ "telephone_code": "256"
+ },
+ "UM": {
+ "code": "UM",
+ "three_letter_code": "UMI",
+ "numeric_code": "581",
+ "telephone_code": "1"
+ },
+ "US": {
+ "code": "US",
+ "three_letter_code": "USA",
+ "numeric_code": "840",
+ "telephone_code": "1"
+ },
+ "UY": {
+ "code": "UY",
+ "three_letter_code": "URY",
+ "numeric_code": "858",
+ "telephone_code": "598"
+ },
+ "UZ": {
+ "code": "UZ",
+ "three_letter_code": "UZB",
+ "numeric_code": "860",
+ "telephone_code": "998"
+ },
+ "VA": {
+ "code": "VA",
+ "three_letter_code": "VAT",
+ "numeric_code": "336",
+ "telephone_code": "39"
+ },
+ "VC": {
+ "code": "VC",
+ "three_letter_code": "VCT",
+ "numeric_code": "670",
+ "telephone_code": "1"
+ },
+ "VE": {
+ "code": "VE",
+ "three_letter_code": "VEN",
+ "numeric_code": "862",
+ "telephone_code": "58"
+ },
+ "VG": {
+ "code": "VG",
+ "three_letter_code": "VGB",
+ "numeric_code": "092",
+ "telephone_code": "1"
+ },
+ "VI": {
+ "code": "VI",
+ "three_letter_code": "VIR",
+ "numeric_code": "850",
+ "telephone_code": "1"
+ },
+ "VN": {
+ "code": "VN",
+ "three_letter_code": "VNM",
+ "numeric_code": "704",
+ "telephone_code": "84"
+ },
+ "VU": {
+ "code": "VU",
+ "three_letter_code": "VUT",
+ "numeric_code": "548",
+ "telephone_code": "678"
+ },
+ "WF": {
+ "code": "WF",
+ "three_letter_code": "WLF",
+ "numeric_code": "876",
+ "telephone_code": "681"
+ },
+ "WS": {
+ "code": "WS",
+ "three_letter_code": "WSM",
+ "numeric_code": "882",
+ "telephone_code": "685"
+ },
+ "XK": {
+ "code": "XK",
+ "three_letter_code": "XKK",
+ "numeric_code": "983",
+ "telephone_code": "381"
+ },
+ "YE": {
+ "code": "YE",
+ "three_letter_code": "YEM",
+ "numeric_code": "887",
+ "telephone_code": "967"
+ },
+ "YT": {
+ "code": "YT",
+ "three_letter_code": "MYT",
+ "numeric_code": "175",
+ "telephone_code": "262"
+ },
+ "ZA": {
+ "code": "ZA",
+ "three_letter_code": "ZAF",
+ "numeric_code": "710",
+ "telephone_code": "27"
+ },
+ "ZM": {
+ "code": "ZM",
+ "three_letter_code": "ZMB",
+ "numeric_code": "894",
+ "telephone_code": "260"
+ },
+ "ZW": {
+ "code": "ZW",
+ "three_letter_code": "ZWE",
+ "numeric_code": "716",
+ "telephone_code": "263"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/be.json b/library/intl/resources/country/be.json
new file mode 100644
index 000000000..ad9fe43c0
--- /dev/null
+++ b/library/intl/resources/country/be.json
@@ -0,0 +1,761 @@
+{
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "AE": {
+ "name": "Ðб’ÑÐ´Ð½Ð°Ð½Ñ‹Ñ ÐрабÑÐºÑ–Ñ Ð­Ð¼Ñ–Ñ€Ð°Ñ‚Ñ‹"
+ },
+ "AZ": {
+ "name": "Ðзербайджан"
+ },
+ "AX": {
+ "name": "ÐландÑÐºÑ–Ñ Ð°Ñтравы"
+ },
+ "AL": {
+ "name": "ÐлбаніÑ"
+ },
+ "DZ": {
+ "name": "Ðлжыр"
+ },
+ "OM": {
+ "name": "Ðман"
+ },
+ "AS": {
+ "name": "ÐмерыканÑкае Самоа"
+ },
+ "VI": {
+ "name": "ÐмерыканÑÐºÑ–Ñ Ð’Ñ–Ñ€Ð³Ñ–Ð½ÑÐºÑ–Ñ Ð°Ñтравы"
+ },
+ "AI": {
+ "name": "ÐнгільÑ"
+ },
+ "AO": {
+ "name": "Ðнгола"
+ },
+ "AD": {
+ "name": "Ðндора"
+ },
+ "AQ": {
+ "name": "Ðнтарктыка"
+ },
+ "AG": {
+ "name": "Ðнтыгуа Ñ– Барбуда"
+ },
+ "AR": {
+ "name": "Ðргенціна"
+ },
+ "AM": {
+ "name": "ÐрменіÑ"
+ },
+ "AW": {
+ "name": "Ðруба"
+ },
+ "CK": {
+ "name": "ÐÑтравы Кука"
+ },
+ "PN": {
+ "name": "ÐÑтравы ПіткÑрн"
+ },
+ "AU": {
+ "name": "ÐÑžÑтраліÑ"
+ },
+ "AT": {
+ "name": "ÐÑžÑтрыÑ"
+ },
+ "AF": {
+ "name": "ÐфганіÑтан"
+ },
+ "BS": {
+ "name": "Багамы"
+ },
+ "BG": {
+ "name": "БалгарыÑ"
+ },
+ "BO": {
+ "name": "БалівіÑ"
+ },
+ "BD": {
+ "name": "БангладÑш"
+ },
+ "BB": {
+ "name": "БарбадаÑ"
+ },
+ "BW": {
+ "name": "БатÑвана"
+ },
+ "BH": {
+ "name": "БахрÑйн"
+ },
+ "BY": {
+ "name": "БеларуÑÑŒ"
+ },
+ "BZ": {
+ "name": "Беліз"
+ },
+ "BE": {
+ "name": "БельгіÑ"
+ },
+ "BJ": {
+ "name": "Бенін"
+ },
+ "BM": {
+ "name": "БермудÑÐºÑ–Ñ Ð°Ñтравы"
+ },
+ "BA": {
+ "name": "БоÑÐ½Ñ–Ñ Ñ– Герцагавіна"
+ },
+ "BR": {
+ "name": "БразіліÑ"
+ },
+ "BN": {
+ "name": "Бруней"
+ },
+ "IO": {
+ "name": "БрытанÑÐºÐ°Ñ Ñ‚ÑÑ€Ñ‹Ñ‚Ð¾Ñ€Ñ‹Ñ Ñž ІндыйÑкім акіÑне"
+ },
+ "VG": {
+ "name": "БрытанÑÐºÑ–Ñ Ð’Ñ–Ñ€Ð³Ñ–Ð½ÑÐºÑ–Ñ Ð°Ñтравы"
+ },
+ "BF": {
+ "name": "Буркіна-ФаÑо"
+ },
+ "BI": {
+ "name": "Бурундзі"
+ },
+ "BT": {
+ "name": "Бутан"
+ },
+ "VN": {
+ "name": "В’етнам"
+ },
+ "VU": {
+ "name": "Вануату"
+ },
+ "VA": {
+ "name": "Ватыкан"
+ },
+ "HU": {
+ "name": "ВенгрыÑ"
+ },
+ "VE": {
+ "name": "ВенеÑуÑла"
+ },
+ "GG": {
+ "name": "ВоÑтраў ГернÑÑ–"
+ },
+ "JE": {
+ "name": "ВоÑтраў ДжÑÑ€ÑÑ–"
+ },
+ "CW": {
+ "name": "ВоÑтраў КюраÑаа"
+ },
+ "YT": {
+ "name": "ВоÑтраў Маёта"
+ },
+ "IM": {
+ "name": "ВоÑтраў ÐœÑн"
+ },
+ "NF": {
+ "name": "ВоÑтраў Ðорфалк"
+ },
+ "CX": {
+ "name": "ВоÑтраў РажÑтва"
+ },
+ "GB": {
+ "name": "Ð’ÑлікабрытаніÑ"
+ },
+ "GA": {
+ "name": "Габон"
+ },
+ "HT": {
+ "name": "Гаіці"
+ },
+ "GM": {
+ "name": "ГамбіÑ"
+ },
+ "GH": {
+ "name": "Гана"
+ },
+ "HN": {
+ "name": "ГандураÑ"
+ },
+ "GY": {
+ "name": "ГаÑна"
+ },
+ "GP": {
+ "name": "ГвадÑлупа"
+ },
+ "GT": {
+ "name": "ГватÑмала"
+ },
+ "GN": {
+ "name": "ГвінеÑ"
+ },
+ "GW": {
+ "name": "ГвінеÑ-БіÑау"
+ },
+ "DE": {
+ "name": "ГерманіÑ"
+ },
+ "GI": {
+ "name": "Гібралтар"
+ },
+ "HK": {
+ "name": "Гон-Конг, Кітай (СÐР)"
+ },
+ "GE": {
+ "name": "ГрузіÑ"
+ },
+ "GD": {
+ "name": "ГрÑнада"
+ },
+ "GL": {
+ "name": "ГрÑнландыÑ"
+ },
+ "GR": {
+ "name": "ГрÑцыÑ"
+ },
+ "GU": {
+ "name": "Гуам"
+ },
+ "DM": {
+ "name": "Дамініка"
+ },
+ "DO": {
+ "name": "ДамініканÑÐºÐ°Ñ Ð ÑÑпубліка"
+ },
+ "DK": {
+ "name": "ДаніÑ"
+ },
+ "DJ": {
+ "name": "Джыбуці"
+ },
+ "EG": {
+ "name": "Егіпет"
+ },
+ "YE": {
+ "name": "Емен"
+ },
+ "ZM": {
+ "name": "ЗамбіÑ"
+ },
+ "EH": {
+ "name": "ЗаходнÑÑ Ð¡Ð°Ñ…Ð°Ñ€Ð°"
+ },
+ "ZW": {
+ "name": "ЗімбабвÑ"
+ },
+ "US": {
+ "name": "Ð—Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð¨Ñ‚Ð°Ñ‚Ñ‹ Ðмерыкі"
+ },
+ "JO": {
+ "name": "ІарданіÑ"
+ },
+ "IL": {
+ "name": "Ізраіль"
+ },
+ "ID": {
+ "name": "ІнданезіÑ"
+ },
+ "IN": {
+ "name": "ІндыÑ"
+ },
+ "IQ": {
+ "name": "Ірак"
+ },
+ "IR": {
+ "name": "Іран"
+ },
+ "IE": {
+ "name": "ІрландыÑ"
+ },
+ "IS": {
+ "name": "ІÑландыÑ"
+ },
+ "ES": {
+ "name": "ІÑпаніÑ"
+ },
+ "IT": {
+ "name": "ІталіÑ"
+ },
+ "CV": {
+ "name": "Каба-ВердÑ"
+ },
+ "KZ": {
+ "name": "КазахÑтан"
+ },
+ "KY": {
+ "name": "Кайманавы аÑтравы"
+ },
+ "CC": {
+ "name": "КакоÑÐ°Ð²Ñ‹Ñ Ð°Ñтравы"
+ },
+ "CO": {
+ "name": "КалумбіÑ"
+ },
+ "KH": {
+ "name": "Камбоджа"
+ },
+ "CM": {
+ "name": "Камерун"
+ },
+ "KM": {
+ "name": "КаморÑÐºÑ–Ñ ÐÑтравы"
+ },
+ "CA": {
+ "name": "Канада"
+ },
+ "QA": {
+ "name": "Катар"
+ },
+ "KE": {
+ "name": "КеніÑ"
+ },
+ "CY": {
+ "name": "Кіпр"
+ },
+ "KI": {
+ "name": "Кірыбаці"
+ },
+ "CN": {
+ "name": "Кітай"
+ },
+ "CG": {
+ "name": "Конга"
+ },
+ "CD": {
+ "name": "Конга, ДÑÐ¼Ð°ÐºÑ€Ð°Ñ‚Ñ‹Ñ‡Ð½Ð°Ñ Ð ÑÑпубліка"
+ },
+ "CR": {
+ "name": "КоÑта-Рыка"
+ },
+ "CI": {
+ "name": "Кот-д’Івуар"
+ },
+ "CU": {
+ "name": "Куба"
+ },
+ "KW": {
+ "name": "Кувейт"
+ },
+ "KG": {
+ "name": "КыргызÑтан"
+ },
+ "LA": {
+ "name": "ЛаоÑ"
+ },
+ "LV": {
+ "name": "ЛатвіÑ"
+ },
+ "LS": {
+ "name": "ЛеÑота"
+ },
+ "LR": {
+ "name": "ЛіберыÑ"
+ },
+ "LB": {
+ "name": "Ліван"
+ },
+ "LY": {
+ "name": "ЛівіÑ"
+ },
+ "LT": {
+ "name": "Літва"
+ },
+ "LI": {
+ "name": "ЛіхтÑнштÑйн"
+ },
+ "LU": {
+ "name": "ЛюкÑембург"
+ },
+ "MM": {
+ "name": "М’Ñнма"
+ },
+ "MG": {
+ "name": "МадагаÑкар"
+ },
+ "MZ": {
+ "name": "Мазамбік"
+ },
+ "MO": {
+ "name": "Макао, Кітай (СÐР)"
+ },
+ "MK": {
+ "name": "МакедоніÑ, БЮР"
+ },
+ "MW": {
+ "name": "Малаві"
+ },
+ "MY": {
+ "name": "МалайзіÑ"
+ },
+ "MD": {
+ "name": "Малдова"
+ },
+ "ML": {
+ "name": "Малі"
+ },
+ "MV": {
+ "name": "Мальдывы"
+ },
+ "MT": {
+ "name": "Мальта"
+ },
+ "MC": {
+ "name": "Манака"
+ },
+ "MN": {
+ "name": "МанголіÑ"
+ },
+ "MS": {
+ "name": "МантÑерат"
+ },
+ "MA": {
+ "name": "Марока"
+ },
+ "MQ": {
+ "name": "Марцініка"
+ },
+ "MH": {
+ "name": "Маршалавы ÐÑтравы"
+ },
+ "MU": {
+ "name": "Маўрыкій"
+ },
+ "MR": {
+ "name": "МаўрытаніÑ"
+ },
+ "MX": {
+ "name": "МекÑіка"
+ },
+ "FM": {
+ "name": "МікранезіÑ"
+ },
+ "NA": {
+ "name": "ÐамібіÑ"
+ },
+ "NO": {
+ "name": "ÐарвегіÑ"
+ },
+ "NR": {
+ "name": "Ðауру"
+ },
+ "NP": {
+ "name": "Ðепал"
+ },
+ "NE": {
+ "name": "Ðігер"
+ },
+ "NG": {
+ "name": "ÐігерыÑ"
+ },
+ "NL": {
+ "name": "ÐідÑрланды"
+ },
+ "NI": {
+ "name": "Ðікарагуа"
+ },
+ "NU": {
+ "name": "ÐіуÑ"
+ },
+ "NZ": {
+ "name": "ÐÐ¾Ð²Ð°Ñ Ð—ÐµÐ»Ð°Ð½Ð´Ñ‹Ñ"
+ },
+ "NC": {
+ "name": "ÐÐ¾Ð²Ð°Ñ ÐšÐ°Ð»ÐµÐ´Ð¾Ð½Ñ–Ñ"
+ },
+ "PK": {
+ "name": "ПакіÑтан"
+ },
+ "PW": {
+ "name": "Палау"
+ },
+ "PS": {
+ "name": "ПалеÑтынÑÐºÑ–Ñ Ñ‚Ñрыторыі"
+ },
+ "PA": {
+ "name": "Панама"
+ },
+ "PG": {
+ "name": "Папуа — ÐÐ¾Ð²Ð°Ñ Ð“Ð²Ñ–Ð½ÐµÑ"
+ },
+ "PY": {
+ "name": "Парагвай"
+ },
+ "PT": {
+ "name": "ПартугаліÑ"
+ },
+ "ZA": {
+ "name": "Паўднёва-ÐфрыканÑÐºÐ°Ñ Ð ÑÑпубліка"
+ },
+ "GS": {
+ "name": "ÐŸÐ°ÑžÐ´Ð½Ñ‘Ð²Ð°Ñ Ð”Ð¶Ð¾Ñ€Ð´Ð¶Ñ‹Ñ Ñ– ÐŸÐ°ÑžÐ´Ð½Ñ‘Ð²Ñ‹Ñ Ð¡Ð°Ð½Ð´Ð²Ñ–Ñ‡Ð°Ð²Ñ‹ аÑтравы"
+ },
+ "KR": {
+ "name": "ÐŸÐ°ÑžÐ´Ð½Ñ‘Ð²Ð°Ñ ÐšÐ°Ñ€ÑÑ"
+ },
+ "SS": {
+ "name": "Паўднёвы Судан"
+ },
+ "KP": {
+ "name": "ÐŸÐ°ÑžÐ½Ð¾Ñ‡Ð½Ð°Ñ ÐšÐ°Ñ€ÑÑ"
+ },
+ "MP": {
+ "name": "ÐŸÐ°ÑžÐ½Ð¾Ñ‡Ð½Ñ‹Ñ ÐœÐ°Ñ€Ñ‹ÑнÑÐºÑ–Ñ Ð°Ñтравы"
+ },
+ "PE": {
+ "name": "Перу"
+ },
+ "PL": {
+ "name": "Польшча"
+ },
+ "PR": {
+ "name": "ПуÑрта-Рыка"
+ },
+ "RU": {
+ "name": "РаÑÑ–Ñ"
+ },
+ "RW": {
+ "name": "Руанда"
+ },
+ "RO": {
+ "name": "РумыніÑ"
+ },
+ "RE": {
+ "name": "РÑюньён"
+ },
+ "SB": {
+ "name": "Саламонавы ÐÑтравы"
+ },
+ "SV": {
+ "name": "Сальвадор"
+ },
+ "SO": {
+ "name": "Самалі"
+ },
+ "WS": {
+ "name": "Самоа"
+ },
+ "SM": {
+ "name": "Сан-Марына"
+ },
+ "ST": {
+ "name": "Сан-Ð¢Ð°Ð¼Ñ Ñ– ПрынÑіпі"
+ },
+ "SA": {
+ "name": "СаудаўÑÐºÐ°Ñ ÐравіÑ"
+ },
+ "SZ": {
+ "name": "Свазіленд"
+ },
+ "SJ": {
+ "name": "Свальбард (Паўночна-УÑходнÑÑ Ð—ÑмлÑ) Ñ– Ян-Маен"
+ },
+ "SH": {
+ "name": "СвÑтой Ðлены, ВоÑтраў"
+ },
+ "SC": {
+ "name": "СейшÑльÑÐºÑ–Ñ ÐÑтравы"
+ },
+ "BL": {
+ "name": "Сен-БартÑльмі"
+ },
+ "PM": {
+ "name": "Сен-П’ер і Мікелон"
+ },
+ "SN": {
+ "name": "Сенегал"
+ },
+ "VC": {
+ "name": "Сент-ВінÑент Ñ– ГрÑнадзіны"
+ },
+ "KN": {
+ "name": "Сент-ÐšÑ–Ñ‚Ñ Ñ– ÐевіÑ"
+ },
+ "LC": {
+ "name": "Сент-ЛюÑÑ–Ñ"
+ },
+ "RS": {
+ "name": "СербіÑ"
+ },
+ "SG": {
+ "name": "Сінгапур"
+ },
+ "SY": {
+ "name": "СірыÑ"
+ },
+ "SK": {
+ "name": "СлавакіÑ"
+ },
+ "SI": {
+ "name": "СлавеніÑ"
+ },
+ "SD": {
+ "name": "Судан"
+ },
+ "SR": {
+ "name": "Сурынам"
+ },
+ "SL": {
+ "name": "Сьера-ЛеонÑ"
+ },
+ "TJ": {
+ "name": "ТаджыкіÑтан"
+ },
+ "TW": {
+ "name": "Тайвань"
+ },
+ "TH": {
+ "name": "Тайланд"
+ },
+ "TK": {
+ "name": "Такелау"
+ },
+ "TZ": {
+ "name": "ТанзаніÑ"
+ },
+ "TG": {
+ "name": "Тога"
+ },
+ "TO": {
+ "name": "Тонга"
+ },
+ "TT": {
+ "name": "Трынідад і Табага"
+ },
+ "TV": {
+ "name": "Тувалу"
+ },
+ "TN": {
+ "name": "ТуніÑ"
+ },
+ "TM": {
+ "name": "ТуркменіÑтан"
+ },
+ "TR": {
+ "name": "ТурцыÑ"
+ },
+ "UG": {
+ "name": "Уганда"
+ },
+ "UZ": {
+ "name": "УзбекіÑтан"
+ },
+ "UA": {
+ "name": "Украіна"
+ },
+ "WF": {
+ "name": "Ð£Ð¾Ð»Ñ–Ñ Ñ– Футуна"
+ },
+ "UY": {
+ "name": "Уругвай"
+ },
+ "TL": {
+ "name": "УÑходні Тымор"
+ },
+ "FO": {
+ "name": "ФарÑÑ€ÑÐºÑ–Ñ Ð°Ñтравы"
+ },
+ "FJ": {
+ "name": "Фіджы"
+ },
+ "PH": {
+ "name": "Філіпіны"
+ },
+ "FI": {
+ "name": "ФінлÑндыÑ"
+ },
+ "FK": {
+ "name": "ФолклÑндÑÐºÑ–Ñ Ð°Ñтравы"
+ },
+ "GF": {
+ "name": "ФранцузÑÐºÐ°Ñ Ð“Ð²Ñ–Ñна"
+ },
+ "PF": {
+ "name": "ФранцузÑÐºÐ°Ñ ÐŸÐ°Ð»Ñ–Ð½ÐµÐ·Ñ–Ñ"
+ },
+ "TF": {
+ "name": "ФранцузÑÐºÑ–Ñ ÐŸÐ°ÑžÐ´Ð½Ñ‘Ð²Ñ‹Ñ Ñ‚Ñрыторыі"
+ },
+ "FR": {
+ "name": "ФранцыÑ"
+ },
+ "HR": {
+ "name": "ХарватыÑ"
+ },
+ "TC": {
+ "name": "Ð¦Ñ‘Ñ€ÐºÑ Ñ– КайкаÑ"
+ },
+ "CF": {
+ "name": "ЦÑнтральна-ÐфрыканÑÐºÐ°Ñ Ð ÑÑпубліка"
+ },
+ "TD": {
+ "name": "Чад"
+ },
+ "ME": {
+ "name": "ЧарнагорыÑ"
+ },
+ "CL": {
+ "name": "Чылі"
+ },
+ "CZ": {
+ "name": "ЧÑÑ…Ñ–Ñ"
+ },
+ "CH": {
+ "name": "ШвейцарыÑ"
+ },
+ "SE": {
+ "name": "ШвецыÑ"
+ },
+ "LK": {
+ "name": "Шры-Ланка"
+ },
+ "EC": {
+ "name": "Эквадор"
+ },
+ "GQ": {
+ "name": "ЭкватарыÑÐ»ÑŒÐ½Ð°Ñ Ð“Ð²Ñ–Ð½ÐµÑ"
+ },
+ "ER": {
+ "name": "ЭрытрÑÑ"
+ },
+ "EE": {
+ "name": "ЭÑтоніÑ"
+ },
+ "ET": {
+ "name": "ЭфіопіÑ"
+ },
+ "JM": {
+ "name": "Ямайка"
+ },
+ "JP": {
+ "name": "ЯпоніÑ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/bez.json b/library/intl/resources/country/bez.json
new file mode 100644
index 000000000..202b446f6
--- /dev/null
+++ b/library/intl/resources/country/bez.json
@@ -0,0 +1,761 @@
+{
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "ZA": {
+ "name": "Huafrika iya Hukusini"
+ },
+ "AF": {
+ "name": "Huafuganistani"
+ },
+ "IS": {
+ "name": "Huaislandi"
+ },
+ "AR": {
+ "name": "Huajendina"
+ },
+ "AL": {
+ "name": "Hualbania"
+ },
+ "DZ": {
+ "name": "Hualjelia"
+ },
+ "AW": {
+ "name": "Hualuba"
+ },
+ "AM": {
+ "name": "Huamenia"
+ },
+ "AD": {
+ "name": "Huandola"
+ },
+ "AO": {
+ "name": "Huangola"
+ },
+ "AI": {
+ "name": "Huanguila"
+ },
+ "AG": {
+ "name": "Huantigua na Hubarubuda"
+ },
+ "AT": {
+ "name": "Huastlia"
+ },
+ "AU": {
+ "name": "Huaustlalia"
+ },
+ "IE": {
+ "name": "Huayalandi"
+ },
+ "AZ": {
+ "name": "Huazabajani"
+ },
+ "BB": {
+ "name": "Hubabadosi"
+ },
+ "BH": {
+ "name": "Hubahaleni"
+ },
+ "BS": {
+ "name": "Hubahama"
+ },
+ "BD": {
+ "name": "Hubangaladeshi"
+ },
+ "BY": {
+ "name": "Hubelalusi"
+ },
+ "BZ": {
+ "name": "Hubelize"
+ },
+ "BM": {
+ "name": "Hubelmuda"
+ },
+ "BJ": {
+ "name": "Hubenini"
+ },
+ "BR": {
+ "name": "Hublazili"
+ },
+ "BO": {
+ "name": "Hubolivia"
+ },
+ "BA": {
+ "name": "Hubosinia na Huhezegovina"
+ },
+ "BW": {
+ "name": "Hubotiswana"
+ },
+ "BN": {
+ "name": "Hubrunei"
+ },
+ "BF": {
+ "name": "Hubukinafaso"
+ },
+ "MG": {
+ "name": "Hubukini"
+ },
+ "BG": {
+ "name": "Hubulgaria"
+ },
+ "BI": {
+ "name": "Huburundi"
+ },
+ "BT": {
+ "name": "Hubutani"
+ },
+ "TD": {
+ "name": "Huchadi"
+ },
+ "CL": {
+ "name": "Huchile"
+ },
+ "CN": {
+ "name": "Huchina"
+ },
+ "DK": {
+ "name": "Hudenmaki"
+ },
+ "DM": {
+ "name": "Hudominika"
+ },
+ "EC": {
+ "name": "Huekwado"
+ },
+ "SV": {
+ "name": "Huelsavado"
+ },
+ "ER": {
+ "name": "Hueritrea"
+ },
+ "EE": {
+ "name": "Huestonia"
+ },
+ "AE": {
+ "name": "Hufalme dza Hihalabu"
+ },
+ "FJ": {
+ "name": "Hufiji"
+ },
+ "PH": {
+ "name": "Hufilipino"
+ },
+ "GA": {
+ "name": "Hugaboni"
+ },
+ "GM": {
+ "name": "Hugambia"
+ },
+ "GH": {
+ "name": "Hughana"
+ },
+ "GW": {
+ "name": "Huginebisau"
+ },
+ "GQ": {
+ "name": "Huginekweta"
+ },
+ "GD": {
+ "name": "Hugrenada"
+ },
+ "GY": {
+ "name": "Huguyana"
+ },
+ "GP": {
+ "name": "Hugwadelupe"
+ },
+ "GU": {
+ "name": "Hugwam"
+ },
+ "GT": {
+ "name": "Hugwatemala"
+ },
+ "GF": {
+ "name": "Hugwiyana ya Huufaransa"
+ },
+ "HT": {
+ "name": "Huhaiti"
+ },
+ "ES": {
+ "name": "Huhispania"
+ },
+ "HN": {
+ "name": "Huhondulasi"
+ },
+ "HU": {
+ "name": "Huhungalia"
+ },
+ "IQ": {
+ "name": "Huilaki"
+ },
+ "IN": {
+ "name": "Huindia"
+ },
+ "ID": {
+ "name": "Huindonesia"
+ },
+ "IL": {
+ "name": "Huislaheli"
+ },
+ "IT": {
+ "name": "Huitalia"
+ },
+ "JM": {
+ "name": "Hujamaika"
+ },
+ "JP": {
+ "name": "Hujapani"
+ },
+ "GI": {
+ "name": "Hujiblalta"
+ },
+ "DJ": {
+ "name": "Hujibuti"
+ },
+ "GN": {
+ "name": "Hujine"
+ },
+ "GL": {
+ "name": "Hujinlandi"
+ },
+ "GE": {
+ "name": "Hujojia"
+ },
+ "KH": {
+ "name": "Hukambodia"
+ },
+ "CM": {
+ "name": "Hukameruni"
+ },
+ "CA": {
+ "name": "Hukanada"
+ },
+ "QA": {
+ "name": "Hukatali"
+ },
+ "KZ": {
+ "name": "Hukazakistani"
+ },
+ "KE": {
+ "name": "Hukenya"
+ },
+ "CV": {
+ "name": "Hukepuvede"
+ },
+ "KI": {
+ "name": "Hukilibati"
+ },
+ "KG": {
+ "name": "Hukiligizistani"
+ },
+ "CI": {
+ "name": "Hukodivaa"
+ },
+ "KP": {
+ "name": "Hukolea Kaskazini"
+ },
+ "KR": {
+ "name": "Hukolea Kusini"
+ },
+ "CO": {
+ "name": "Hukolombia"
+ },
+ "KM": {
+ "name": "Hukomoro"
+ },
+ "CG": {
+ "name": "Hukongo"
+ },
+ "HR": {
+ "name": "Hukorasia"
+ },
+ "CR": {
+ "name": "Hukostarika"
+ },
+ "CU": {
+ "name": "Hukuba"
+ },
+ "CY": {
+ "name": "Hukuprosi"
+ },
+ "KW": {
+ "name": "Hukuwaiti"
+ },
+ "LA": {
+ "name": "Hulaosi"
+ },
+ "LU": {
+ "name": "Hulasembagi"
+ },
+ "LV": {
+ "name": "Hulativia"
+ },
+ "LB": {
+ "name": "Hulebanoni"
+ },
+ "LS": {
+ "name": "Hulesoto"
+ },
+ "LR": {
+ "name": "Hulibelia"
+ },
+ "LY": {
+ "name": "Hulibiya"
+ },
+ "LI": {
+ "name": "Hulishenteni"
+ },
+ "LT": {
+ "name": "Hulitwania"
+ },
+ "RE": {
+ "name": "Huliyunioni"
+ },
+ "RO": {
+ "name": "Hulomania"
+ },
+ "RW": {
+ "name": "Hulwanda"
+ },
+ "MW": {
+ "name": "Humalawi"
+ },
+ "US": {
+ "name": "Humalekani"
+ },
+ "MY": {
+ "name": "Humalesia"
+ },
+ "ML": {
+ "name": "Humali"
+ },
+ "MT": {
+ "name": "Humalta"
+ },
+ "MQ": {
+ "name": "Humartiniki"
+ },
+ "MK": {
+ "name": "Humasedonia"
+ },
+ "YT": {
+ "name": "Humayotte"
+ },
+ "MX": {
+ "name": "Humeksiko"
+ },
+ "FM": {
+ "name": "Humikronesia"
+ },
+ "EG": {
+ "name": "Humisri"
+ },
+ "MV": {
+ "name": "Humodivu"
+ },
+ "MD": {
+ "name": "Humoldova"
+ },
+ "MU": {
+ "name": "Humolisi"
+ },
+ "MR": {
+ "name": "Humolitania"
+ },
+ "MA": {
+ "name": "Humoloko"
+ },
+ "MC": {
+ "name": "Humonako"
+ },
+ "MN": {
+ "name": "Humongolia"
+ },
+ "MS": {
+ "name": "Humontserrati"
+ },
+ "MZ": {
+ "name": "Humusumbiji"
+ },
+ "MM": {
+ "name": "Humyama"
+ },
+ "NA": {
+ "name": "Hunamibia"
+ },
+ "NR": {
+ "name": "Hunauru"
+ },
+ "NP": {
+ "name": "Hunepali"
+ },
+ "NE": {
+ "name": "Hunijeli"
+ },
+ "NG": {
+ "name": "Hunijelia"
+ },
+ "NI": {
+ "name": "Hunikaragwa"
+ },
+ "NU": {
+ "name": "Huniue"
+ },
+ "NO": {
+ "name": "Hunolwe"
+ },
+ "NC": {
+ "name": "Hunyukaledonia"
+ },
+ "NZ": {
+ "name": "Hunyuzilandi"
+ },
+ "OM": {
+ "name": "Huomani"
+ },
+ "PK": {
+ "name": "Hupakistani"
+ },
+ "PY": {
+ "name": "Hupalagwai"
+ },
+ "PW": {
+ "name": "Hupalau"
+ },
+ "PA": {
+ "name": "Hupanama"
+ },
+ "PG": {
+ "name": "Hupapua"
+ },
+ "PE": {
+ "name": "Hupelu"
+ },
+ "PN": {
+ "name": "Hupitkaini"
+ },
+ "PL": {
+ "name": "Hupolandi"
+ },
+ "PF": {
+ "name": "Hupolinesia ya Huufaransa"
+ },
+ "PR": {
+ "name": "Hupwetoriko"
+ },
+ "SM": {
+ "name": "Husamalino"
+ },
+ "WS": {
+ "name": "Husamoa"
+ },
+ "AS": {
+ "name": "Husamoa ya Humalekani"
+ },
+ "SH": {
+ "name": "Husantahelena"
+ },
+ "KN": {
+ "name": "Husantakitzi na Hunevis"
+ },
+ "LC": {
+ "name": "Husantalusia"
+ },
+ "PM": {
+ "name": "Husantapieri na Humikeloni"
+ },
+ "VC": {
+ "name": "Husantavisenti na Hugrenadini"
+ },
+ "ST": {
+ "name": "Husaotome na Huprinsipe"
+ },
+ "SA": {
+ "name": "Husaudi"
+ },
+ "SN": {
+ "name": "Husenegali"
+ },
+ "SC": {
+ "name": "Hushelisheli"
+ },
+ "SL": {
+ "name": "Husiela Lioni"
+ },
+ "SY": {
+ "name": "Husilia"
+ },
+ "SG": {
+ "name": "Husingapoo"
+ },
+ "LK": {
+ "name": "Husirilanka"
+ },
+ "SK": {
+ "name": "Huslovakia"
+ },
+ "SI": {
+ "name": "Huslovenia"
+ },
+ "SO": {
+ "name": "Husomalia"
+ },
+ "SD": {
+ "name": "Husudani"
+ },
+ "SR": {
+ "name": "Husurinamu"
+ },
+ "TH": {
+ "name": "Hutailandi"
+ },
+ "TW": {
+ "name": "Hutaiwani"
+ },
+ "TJ": {
+ "name": "Hutajikistani"
+ },
+ "TZ": {
+ "name": "Hutanzania"
+ },
+ "TL": {
+ "name": "Hutimori ya Mashariki"
+ },
+ "TG": {
+ "name": "Hutogo"
+ },
+ "TK": {
+ "name": "Hutokelau"
+ },
+ "TO": {
+ "name": "Hutonga"
+ },
+ "TT": {
+ "name": "Hutrinad na Hutobago"
+ },
+ "TN": {
+ "name": "Hutunisia"
+ },
+ "TV": {
+ "name": "Hutuvalu"
+ },
+ "IR": {
+ "name": "Huuajemi"
+ },
+ "BE": {
+ "name": "Huubelgiji"
+ },
+ "FR": {
+ "name": "Huufaransa"
+ },
+ "FI": {
+ "name": "Huufini"
+ },
+ "UG": {
+ "name": "Huuganda"
+ },
+ "GR": {
+ "name": "Huugiliki"
+ },
+ "ET": {
+ "name": "Huuhabeshi"
+ },
+ "NL": {
+ "name": "Huuholanzi"
+ },
+ "GB": {
+ "name": "Huuingereza"
+ },
+ "DE": {
+ "name": "Huujerumani"
+ },
+ "UA": {
+ "name": "Huukraini"
+ },
+ "PT": {
+ "name": "Huuleno"
+ },
+ "UY": {
+ "name": "Huulugwai"
+ },
+ "RU": {
+ "name": "Huulusi"
+ },
+ "SZ": {
+ "name": "Huuswazi"
+ },
+ "SE": {
+ "name": "Huuswidi"
+ },
+ "CH": {
+ "name": "Huuswisi"
+ },
+ "TR": {
+ "name": "Huuturuki"
+ },
+ "TM": {
+ "name": "Huuturukimenistani"
+ },
+ "UZ": {
+ "name": "Huuzibekistani"
+ },
+ "VU": {
+ "name": "Huvanuatu"
+ },
+ "VA": {
+ "name": "Huvatikani"
+ },
+ "VE": {
+ "name": "Huvenezuela"
+ },
+ "VN": {
+ "name": "Huvietinamu"
+ },
+ "WF": {
+ "name": "Huwalis na Hufutuna"
+ },
+ "YE": {
+ "name": "Huyemeni"
+ },
+ "JO": {
+ "name": "Huyolodani"
+ },
+ "ZM": {
+ "name": "Huzambia"
+ },
+ "ZW": {
+ "name": "Huzimbabwe"
+ },
+ "FK": {
+ "name": "Ifisima fya Falkland"
+ },
+ "KY": {
+ "name": "Ifisima fya Kayman"
+ },
+ "CK": {
+ "name": "Ifisima fya Kook"
+ },
+ "MP": {
+ "name": "Ifisima fya Mariana fya Hukaskazini"
+ },
+ "MH": {
+ "name": "Ifisima fya Marshal"
+ },
+ "SB": {
+ "name": "Ifisima fya Solomon"
+ },
+ "TC": {
+ "name": "Ifisima fya Turki na Kaiko"
+ },
+ "VG": {
+ "name": "Ifisima fya Virgin fya Huingereza"
+ },
+ "VI": {
+ "name": "Ifisima fya Virgin fya Humelekani"
+ },
+ "NF": {
+ "name": "Ihisima sha Norfok"
+ },
+ "CF": {
+ "name": "Ijamhuri ya Afrika ya Pagati"
+ },
+ "CZ": {
+ "name": "Ijamhuri ya Cheki"
+ },
+ "CD": {
+ "name": "Ijamhuri ya Hidemokrasi ya Hukongo"
+ },
+ "DO": {
+ "name": "Ijamhuri ya Hudominika"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "IO": {
+ "name": "Ulubali lwa Hubahari ya Hindi lwa Huingereza"
+ },
+ "PS": {
+ "name": "Ulubali lwa Magharibi nu Gaza wa Hupalestina"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/bg.json b/library/intl/resources/country/bg.json
new file mode 100644
index 000000000..121709871
--- /dev/null
+++ b/library/intl/resources/country/bg.json
@@ -0,0 +1,761 @@
+{
+ "AU": {
+ "name": "ÐвÑтралиÑ"
+ },
+ "AT": {
+ "name": "ÐвÑтриÑ"
+ },
+ "AZ": {
+ "name": "Ðзербайджан"
+ },
+ "AL": {
+ "name": "ÐлбаниÑ"
+ },
+ "DZ": {
+ "name": "Ðлжир"
+ },
+ "AS": {
+ "name": "ÐмериканÑка Самоа"
+ },
+ "VI": {
+ "name": "ÐмериканÑки ВирджинÑки оÑтрови"
+ },
+ "AO": {
+ "name": "Ðнгола"
+ },
+ "AI": {
+ "name": "Ðнгуила"
+ },
+ "AD": {
+ "name": "Ðндора"
+ },
+ "AQ": {
+ "name": "Ðнтарктика"
+ },
+ "AG": {
+ "name": "Ðнтигуа и Барбуда"
+ },
+ "AR": {
+ "name": "Ðржентина"
+ },
+ "AM": {
+ "name": "ÐрмениÑ"
+ },
+ "AW": {
+ "name": "Ðруба"
+ },
+ "AF": {
+ "name": "ÐфганиÑтан"
+ },
+ "BD": {
+ "name": "Бангладеш"
+ },
+ "BB": {
+ "name": "БарбадоÑ"
+ },
+ "BS": {
+ "name": "Бахами"
+ },
+ "BH": {
+ "name": "Бахрейн"
+ },
+ "BY": {
+ "name": "БеларуÑ"
+ },
+ "BE": {
+ "name": "БелгиÑ"
+ },
+ "BZ": {
+ "name": "Белиз"
+ },
+ "BJ": {
+ "name": "Бенин"
+ },
+ "BM": {
+ "name": "Бермуда"
+ },
+ "BO": {
+ "name": "БоливиÑ"
+ },
+ "BA": {
+ "name": "БоÑна и Херцеговина"
+ },
+ "BW": {
+ "name": "БотÑвана"
+ },
+ "BR": {
+ "name": "БразилиÑ"
+ },
+ "IO": {
+ "name": "БританÑка Ñ‚ÐµÑ€Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ Ð² ИндийÑÐºÐ¸Ñ Ð¾ÐºÐµÐ°Ð½"
+ },
+ "VG": {
+ "name": "БританÑки ВирджинÑки оÑтрови"
+ },
+ "BN": {
+ "name": "Бруней ДаруÑалам"
+ },
+ "BF": {
+ "name": "Буркина ФаÑо"
+ },
+ "BI": {
+ "name": "Бурунди"
+ },
+ "BT": {
+ "name": "Бутан"
+ },
+ "BG": {
+ "name": "БългариÑ"
+ },
+ "VU": {
+ "name": "Вануату"
+ },
+ "VA": {
+ "name": "Ватикан"
+ },
+ "GB": {
+ "name": "ВеликобританиÑ"
+ },
+ "VE": {
+ "name": "Венецуела"
+ },
+ "VN": {
+ "name": "Виетнам"
+ },
+ "GA": {
+ "name": "Габон"
+ },
+ "GM": {
+ "name": "ГамбиÑ"
+ },
+ "GH": {
+ "name": "Гана"
+ },
+ "GY": {
+ "name": "ГаÑна"
+ },
+ "GP": {
+ "name": "Гваделупа"
+ },
+ "GT": {
+ "name": "Гватемала"
+ },
+ "GN": {
+ "name": "ГвинеÑ"
+ },
+ "GW": {
+ "name": "ГвинеÑ-БиÑау"
+ },
+ "DE": {
+ "name": "ГерманиÑ"
+ },
+ "GI": {
+ "name": "Гибралтар"
+ },
+ "GD": {
+ "name": "Гренада"
+ },
+ "GL": {
+ "name": "ГренландиÑ"
+ },
+ "GE": {
+ "name": "ГрузиÑ"
+ },
+ "GU": {
+ "name": "Гуам"
+ },
+ "GG": {
+ "name": "ГърнÑи"
+ },
+ "GR": {
+ "name": "ГърциÑ"
+ },
+ "DK": {
+ "name": "ДаниÑ"
+ },
+ "CD": {
+ "name": "Демократична република Конго"
+ },
+ "DJ": {
+ "name": "Джибути"
+ },
+ "JE": {
+ "name": "ДжърÑи"
+ },
+ "DG": {
+ "name": "Диего ГарÑиÑ"
+ },
+ "DM": {
+ "name": "Доминика"
+ },
+ "DO": {
+ "name": "ДоминиканÑка република"
+ },
+ "EG": {
+ "name": "Египет"
+ },
+ "EC": {
+ "name": "Еквадор"
+ },
+ "GQ": {
+ "name": "Екваториална ГвинеÑ"
+ },
+ "ER": {
+ "name": "ЕритреÑ"
+ },
+ "EE": {
+ "name": "ЕÑтониÑ"
+ },
+ "ET": {
+ "name": "ЕтиопиÑ"
+ },
+ "ZM": {
+ "name": "ЗамбиÑ"
+ },
+ "EH": {
+ "name": "Западна Сахара"
+ },
+ "ZW": {
+ "name": "Зимбабве"
+ },
+ "IL": {
+ "name": "Израел"
+ },
+ "TL": {
+ "name": "Източен Тимор"
+ },
+ "IN": {
+ "name": "ИндиÑ"
+ },
+ "ID": {
+ "name": "ИндонезиÑ"
+ },
+ "IQ": {
+ "name": "Ирак"
+ },
+ "IR": {
+ "name": "Иран"
+ },
+ "IE": {
+ "name": "ИрландиÑ"
+ },
+ "IS": {
+ "name": "ИÑландиÑ"
+ },
+ "ES": {
+ "name": "ИÑпаниÑ"
+ },
+ "IT": {
+ "name": "ИталиÑ"
+ },
+ "YE": {
+ "name": "Йемен"
+ },
+ "JO": {
+ "name": "ЙорданиÑ"
+ },
+ "CV": {
+ "name": "Кабо Верде"
+ },
+ "KZ": {
+ "name": "КазахÑтан"
+ },
+ "KY": {
+ "name": "Кайманови оÑтрови"
+ },
+ "KH": {
+ "name": "Камбоджа"
+ },
+ "CM": {
+ "name": "Камерун"
+ },
+ "CA": {
+ "name": "Канада"
+ },
+ "IC": {
+ "name": "КанарÑки оÑтрови"
+ },
+ "BQ": {
+ "name": "КарибÑка ÐидерландиÑ"
+ },
+ "QA": {
+ "name": "Катар"
+ },
+ "KE": {
+ "name": "КениÑ"
+ },
+ "CY": {
+ "name": "Кипър"
+ },
+ "KG": {
+ "name": "КиргизÑтан"
+ },
+ "KI": {
+ "name": "Кирибати"
+ },
+ "CN": {
+ "name": "Китай"
+ },
+ "CC": {
+ "name": "КокоÑови оÑтрови (оÑтрови Кийлинг)"
+ },
+ "CO": {
+ "name": "КолумбиÑ"
+ },
+ "KM": {
+ "name": "КоморÑки оÑтрови"
+ },
+ "CG": {
+ "name": "Конго"
+ },
+ "XK": {
+ "name": "КоÑово"
+ },
+ "CR": {
+ "name": "КоÑта Рика"
+ },
+ "CI": {
+ "name": "Кот д’Ивоар"
+ },
+ "CU": {
+ "name": "Куба"
+ },
+ "KW": {
+ "name": "Кувейт"
+ },
+ "CW": {
+ "name": "КюраÑао"
+ },
+ "LA": {
+ "name": "ЛаоÑ"
+ },
+ "LV": {
+ "name": "ЛатвиÑ"
+ },
+ "LS": {
+ "name": "ЛеÑото"
+ },
+ "LR": {
+ "name": "ЛибериÑ"
+ },
+ "LY": {
+ "name": "ЛибиÑ"
+ },
+ "LB": {
+ "name": "Ливан"
+ },
+ "LT": {
+ "name": "Литва"
+ },
+ "LI": {
+ "name": "Лихтенщайн"
+ },
+ "LU": {
+ "name": "ЛюкÑембург"
+ },
+ "MR": {
+ "name": "МавританиÑ"
+ },
+ "MU": {
+ "name": "Мавриций"
+ },
+ "MG": {
+ "name": "МадагаÑкар"
+ },
+ "YT": {
+ "name": "Майот"
+ },
+ "MO": {
+ "name": "Макао, СÐР на Китай"
+ },
+ "MK": {
+ "name": "МакедониÑ"
+ },
+ "MW": {
+ "name": "Малави"
+ },
+ "MY": {
+ "name": "МалайзиÑ"
+ },
+ "MV": {
+ "name": "Малдиви"
+ },
+ "ML": {
+ "name": "Мали"
+ },
+ "MT": {
+ "name": "Малта"
+ },
+ "MA": {
+ "name": "Мароко"
+ },
+ "MQ": {
+ "name": "Мартиника"
+ },
+ "MH": {
+ "name": "Маршалови оÑтрови"
+ },
+ "MX": {
+ "name": "МекÑико"
+ },
+ "MM": {
+ "name": "Мианмар (Бирма)"
+ },
+ "FM": {
+ "name": "МикронезиÑ"
+ },
+ "MZ": {
+ "name": "Мозамбик"
+ },
+ "MD": {
+ "name": "Молдова"
+ },
+ "MC": {
+ "name": "Монако"
+ },
+ "MN": {
+ "name": "МонголиÑ"
+ },
+ "MS": {
+ "name": "МонтÑерат"
+ },
+ "NA": {
+ "name": "ÐамибиÑ"
+ },
+ "NR": {
+ "name": "Ðауру"
+ },
+ "NP": {
+ "name": "Ðепал"
+ },
+ "NE": {
+ "name": "Ðигер"
+ },
+ "NG": {
+ "name": "ÐигериÑ"
+ },
+ "NL": {
+ "name": "ÐидерландиÑ"
+ },
+ "NI": {
+ "name": "Ðикарагуа"
+ },
+ "NU": {
+ "name": "Ðиуе"
+ },
+ "NZ": {
+ "name": "Ðова ЗеландиÑ"
+ },
+ "NC": {
+ "name": "Ðова КаледониÑ"
+ },
+ "NO": {
+ "name": "ÐорвегиÑ"
+ },
+ "AE": {
+ "name": "Обединени арабÑки емирÑтва"
+ },
+ "AX": {
+ "name": "ОландÑки оÑтрови"
+ },
+ "OM": {
+ "name": "Оман"
+ },
+ "AC": {
+ "name": "оÑтров ВъзнеÑение"
+ },
+ "IM": {
+ "name": "оÑтров Ман"
+ },
+ "NF": {
+ "name": "оÑтров Ðорфолк"
+ },
+ "CX": {
+ "name": "оÑтров РождеÑтво"
+ },
+ "CK": {
+ "name": "оÑтрови Кук"
+ },
+ "PN": {
+ "name": "ОÑтрови Питкерн"
+ },
+ "TC": {
+ "name": "оÑтрови Ð¢ÑŠÑ€ÐºÑ Ð¸ КайкоÑ"
+ },
+ "UM": {
+ "name": "Отдалечени оÑтрови на СÐЩ"
+ },
+ "PK": {
+ "name": "ПакиÑтан"
+ },
+ "PW": {
+ "name": "Палау"
+ },
+ "PS": {
+ "name": "ПалеÑтинÑки територии"
+ },
+ "PA": {
+ "name": "Панама"
+ },
+ "PG": {
+ "name": "Папуа Ðова ГвинеÑ"
+ },
+ "PY": {
+ "name": "Парагвай"
+ },
+ "PE": {
+ "name": "Перу"
+ },
+ "PL": {
+ "name": "Полша"
+ },
+ "PT": {
+ "name": "ПортугалиÑ"
+ },
+ "PR": {
+ "name": "Пуерто Рико"
+ },
+ "RE": {
+ "name": "Реюнион"
+ },
+ "RW": {
+ "name": "Руанда"
+ },
+ "RO": {
+ "name": "РумъниÑ"
+ },
+ "RU": {
+ "name": "РуÑиÑ"
+ },
+ "SV": {
+ "name": "Салвадор"
+ },
+ "WS": {
+ "name": "Самоа"
+ },
+ "SM": {
+ "name": "Сан Марино"
+ },
+ "ST": {
+ "name": "Сао Томе и ПринÑипи"
+ },
+ "SA": {
+ "name": "СаудитÑка ÐрабиÑ"
+ },
+ "SZ": {
+ "name": "Свазиленд"
+ },
+ "SJ": {
+ "name": "Свалбард и Ян Майен"
+ },
+ "SH": {
+ "name": "Света Елена"
+ },
+ "KP": {
+ "name": "Северна КореÑ"
+ },
+ "MP": {
+ "name": "Северни МарианÑки оÑтрови"
+ },
+ "VC": {
+ "name": "Сейнт ВинÑънт и Гренадини"
+ },
+ "KN": {
+ "name": "Сейнт ÐšÐ¸Ñ‚Ñ Ð¸ ÐевиÑ"
+ },
+ "LC": {
+ "name": "Сейнт ЛуÑиÑ"
+ },
+ "SC": {
+ "name": "Сейшели"
+ },
+ "BL": {
+ "name": "Сен Бартелеми"
+ },
+ "MF": {
+ "name": "Сен Мартен"
+ },
+ "PM": {
+ "name": "Сен Пиер и Микелон"
+ },
+ "SN": {
+ "name": "Сенегал"
+ },
+ "EA": {
+ "name": "Сеута и МелиÑ"
+ },
+ "SL": {
+ "name": "Сиера Леоне"
+ },
+ "SG": {
+ "name": "Сингапур"
+ },
+ "SX": {
+ "name": "Синт Мартен"
+ },
+ "SY": {
+ "name": "СириÑ"
+ },
+ "SK": {
+ "name": "СловакиÑ"
+ },
+ "SI": {
+ "name": "СловениÑ"
+ },
+ "SB": {
+ "name": "Соломонови оÑтрови"
+ },
+ "SO": {
+ "name": "СомалиÑ"
+ },
+ "SD": {
+ "name": "Судан"
+ },
+ "SR": {
+ "name": "Суринам"
+ },
+ "US": {
+ "name": "Съединени щати"
+ },
+ "RS": {
+ "name": "СърбиÑ"
+ },
+ "TJ": {
+ "name": "ТаджикиÑтан"
+ },
+ "TW": {
+ "name": "Тайван"
+ },
+ "TH": {
+ "name": "Тайланд"
+ },
+ "TZ": {
+ "name": "ТанзаниÑ"
+ },
+ "TG": {
+ "name": "Того"
+ },
+ "TK": {
+ "name": "Токелау"
+ },
+ "TO": {
+ "name": "Тонга"
+ },
+ "TT": {
+ "name": "Тринидад и Тобаго"
+ },
+ "TA": {
+ "name": "ТриÑтан да КунÑ"
+ },
+ "TV": {
+ "name": "Тувалу"
+ },
+ "TN": {
+ "name": "ТуниÑ"
+ },
+ "TM": {
+ "name": "ТуркмениÑтан"
+ },
+ "TR": {
+ "name": "ТурциÑ"
+ },
+ "UG": {
+ "name": "Уганда"
+ },
+ "UZ": {
+ "name": "УзбекиÑтан"
+ },
+ "UA": {
+ "name": "Украйна"
+ },
+ "HU": {
+ "name": "УнгариÑ"
+ },
+ "WF": {
+ "name": "Ð£Ð¾Ð»Ð¸Ñ Ð¸ Футуна"
+ },
+ "UY": {
+ "name": "Уругвай"
+ },
+ "FO": {
+ "name": "ФарьорÑки оÑтрови"
+ },
+ "FJ": {
+ "name": "Фиджи"
+ },
+ "PH": {
+ "name": "Филипини"
+ },
+ "FI": {
+ "name": "ФинландиÑ"
+ },
+ "FK": {
+ "name": "ФолклендÑки оÑтрови"
+ },
+ "FR": {
+ "name": "ФранциÑ"
+ },
+ "GF": {
+ "name": "ФренÑка Гвиана"
+ },
+ "PF": {
+ "name": "ФренÑка ПолинезиÑ"
+ },
+ "TF": {
+ "name": "ФренÑки южни територии"
+ },
+ "HT": {
+ "name": "Хаити"
+ },
+ "HN": {
+ "name": "ХондураÑ"
+ },
+ "HK": {
+ "name": "Хонконг, СÐР на Китай"
+ },
+ "HR": {
+ "name": "ХърватиÑ"
+ },
+ "CF": {
+ "name": "ЦентралноафриканÑка република"
+ },
+ "TD": {
+ "name": "Чад"
+ },
+ "ME": {
+ "name": "Черна гора"
+ },
+ "CZ": {
+ "name": "ЧехиÑ"
+ },
+ "CL": {
+ "name": "Чили"
+ },
+ "CH": {
+ "name": "ШвейцариÑ"
+ },
+ "SE": {
+ "name": "ШвециÑ"
+ },
+ "LK": {
+ "name": "Шри Ланка"
+ },
+ "SS": {
+ "name": "Южен Судан"
+ },
+ "ZA": {
+ "name": "Южна Ðфрика"
+ },
+ "GS": {
+ "name": "Южна Ð”Ð¶Ð¾Ñ€Ð´Ð¶Ð¸Ñ Ð¸ Южни Сандвичеви оÑтрови"
+ },
+ "KR": {
+ "name": "Южна КореÑ"
+ },
+ "JM": {
+ "name": "Ямайка"
+ },
+ "JP": {
+ "name": "ЯпониÑ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/bm.json b/library/intl/resources/country/bm.json
new file mode 100644
index 000000000..9207ce667
--- /dev/null
+++ b/library/intl/resources/country/bm.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afiganistaŋ"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Alibani"
+ },
+ "DE": {
+ "name": "Alimaɲi"
+ },
+ "DZ": {
+ "name": "Alizeri"
+ },
+ "US": {
+ "name": "Ameriki"
+ },
+ "VI": {
+ "name": "Ameriki ka Sungurunnin Gun"
+ },
+ "AD": {
+ "name": "Andɔr"
+ },
+ "IO": {
+ "name": "Angilɛ ka ɛndu dugukolo"
+ },
+ "VG": {
+ "name": "AngilÉ› ka Sungurunnin Gun"
+ },
+ "GB": {
+ "name": "Angilɛtɛri"
+ },
+ "AI": {
+ "name": "Angiya"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antiga-ni-Barbuda"
+ },
+ "SA": {
+ "name": "Arabiya Sawudiya"
+ },
+ "AE": {
+ "name": "Arabu mara kafoli"
+ },
+ "AM": {
+ "name": "Arimeni"
+ },
+ "AR": {
+ "name": "Arizantin"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "HT": {
+ "name": "Ayiti"
+ },
+ "AZ": {
+ "name": "Azɛrbayjaŋ"
+ },
+ "BS": {
+ "name": "Bahamasi"
+ },
+ "KY": {
+ "name": "Bama Gun"
+ },
+ "BB": {
+ "name": "Barbadi"
+ },
+ "BH": {
+ "name": "Bareyini"
+ },
+ "BY": {
+ "name": "Belarusi"
+ },
+ "BZ": {
+ "name": "Belizi"
+ },
+ "BJ": {
+ "name": "Benɛn"
+ },
+ "BR": {
+ "name": "Berezili"
+ },
+ "BM": {
+ "name": "Bermudi"
+ },
+ "BE": {
+ "name": "Bɛliziki"
+ },
+ "BD": {
+ "name": "Bɛngiladɛsi"
+ },
+ "BO": {
+ "name": "Bolivi"
+ },
+ "BA": {
+ "name": "Bozni-Ærizigovini"
+ },
+ "BW": {
+ "name": "Bɔtisiwana"
+ },
+ "BG": {
+ "name": "Buligari"
+ },
+ "BN": {
+ "name": "Burinɛyi"
+ },
+ "BF": {
+ "name": "Burukina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butaŋ"
+ },
+ "TD": {
+ "name": "Cadi"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Capivɛrdi"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "CZ": {
+ "name": "Ceki republiki"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CY": {
+ "name": "Cipri"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danemarki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DO": {
+ "name": "Dɔmimiki republiki"
+ },
+ "DM": {
+ "name": "Dɔminiki"
+ },
+ "EC": {
+ "name": "Ekwatɔr"
+ },
+ "ER": {
+ "name": "Eritere"
+ },
+ "EE": {
+ "name": "Esetoni"
+ },
+ "ES": {
+ "name": "Esipaɲi"
+ },
+ "ET": {
+ "name": "Etiopi"
+ },
+ "EG": {
+ "name": "Eziputi"
+ },
+ "SH": {
+ "name": "ÆlÉ›ni Senu"
+ },
+ "ID": {
+ "name": "Ændonezi"
+ },
+ "IN": {
+ "name": "Ændujamana"
+ },
+ "FR": {
+ "name": "Faransi"
+ },
+ "GF": {
+ "name": "Faransi ka gwiyani"
+ },
+ "PF": {
+ "name": "Faransi ka polinezi"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipini"
+ },
+ "FI": {
+ "name": "Finilandi"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabɔŋ"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GM": {
+ "name": "Ganbi"
+ },
+ "GR": {
+ "name": "Gɛrɛsi"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Gine Bisawo"
+ },
+ "GQ": {
+ "name": "Gine ekwatɔri"
+ },
+ "GL": {
+ "name": "Gɔrɔhenelandi"
+ },
+ "GD": {
+ "name": "Granadi"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GP": {
+ "name": "Gwadelup"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GY": {
+ "name": "Gwiyana"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HN": {
+ "name": "Hɔndirasi"
+ },
+ "HU": {
+ "name": "Hɔngri"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "IR": {
+ "name": "Iraŋ"
+ },
+ "IE": {
+ "name": "Irilandi"
+ },
+ "RU": {
+ "name": "Irisi"
+ },
+ "IS": {
+ "name": "Isilandi"
+ },
+ "IL": {
+ "name": "Isirayeli"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IT": {
+ "name": "Itali"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "NC": {
+ "name": "Kaledoni Koura"
+ },
+ "KH": {
+ "name": "Kamboji"
+ },
+ "CM": {
+ "name": "Kameruni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katari"
+ },
+ "KZ": {
+ "name": "Kazakistaŋ"
+ },
+ "KE": {
+ "name": "Keniya"
+ },
+ "KP": {
+ "name": "Kɛɲɛka Kore"
+ },
+ "MP": {
+ "name": "Kɛɲɛka Mariyani Gun"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizisitaŋ"
+ },
+ "CI": {
+ "name": "Kodiwari"
+ },
+ "CO": {
+ "name": "Kolombi"
+ },
+ "KM": {
+ "name": "Komɔri"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "CD": {
+ "name": "Kongo ka republiki demɔkratiki"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kowɛti"
+ },
+ "TL": {
+ "name": "Kɔrɔn Timɔr"
+ },
+ "CR": {
+ "name": "Kɔsitarika"
+ },
+ "KN": {
+ "name": "KristÉ”fo-Senu-ni-ÆevÉ›s"
+ },
+ "HR": {
+ "name": "Kroasi"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CK": {
+ "name": "Kuki Gun"
+ },
+ "LA": {
+ "name": "Layosi"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letoni"
+ },
+ "LB": {
+ "name": "Libaŋ"
+ },
+ "LR": {
+ "name": "Liberiya"
+ },
+ "LY": {
+ "name": "Libi"
+ },
+ "LU": {
+ "name": "Likisanburu"
+ },
+ "LI": {
+ "name": "Lisɛnsitayini"
+ },
+ "LT": {
+ "name": "Lituyani"
+ },
+ "LC": {
+ "name": "Lusi-Senu"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedɔni"
+ },
+ "MG": {
+ "name": "Madagasikari"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldivi"
+ },
+ "MY": {
+ "name": "Malɛzi"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malti"
+ },
+ "FK": {
+ "name": "Maluwini Gun"
+ },
+ "SM": {
+ "name": "Marini-Senu"
+ },
+ "MH": {
+ "name": "Marisali Gun"
+ },
+ "MQ": {
+ "name": "Maritiniki"
+ },
+ "MA": {
+ "name": "Marɔku"
+ },
+ "YT": {
+ "name": "Mayoti"
+ },
+ "MX": {
+ "name": "Meksiki"
+ },
+ "FM": {
+ "name": "Mikironesi"
+ },
+ "MD": {
+ "name": "Molidavi"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MN": {
+ "name": "Moŋoli"
+ },
+ "MS": {
+ "name": "Moŋsera"
+ },
+ "MU": {
+ "name": "Morisi"
+ },
+ "MZ": {
+ "name": "Mozanbiki"
+ },
+ "MR": {
+ "name": "Mɔritani"
+ },
+ "MM": {
+ "name": "Myanimari"
+ },
+ "NA": {
+ "name": "Namibi"
+ },
+ "NR": {
+ "name": "Nawuru"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NG": {
+ "name": "Nizeriya"
+ },
+ "NE": {
+ "name": "Nizɛri"
+ },
+ "NO": {
+ "name": "Nɔriwɛzi"
+ },
+ "NF": {
+ "name": "Nɔrofoliki Gun"
+ },
+ "NU": {
+ "name": "Nyuwe"
+ },
+ "OM": {
+ "name": "Omaŋ"
+ },
+ "AU": {
+ "name": "Ositirali"
+ },
+ "AT": {
+ "name": "Otirisi"
+ },
+ "PK": {
+ "name": "Pakisitaŋ"
+ },
+ "PW": {
+ "name": "Palawu"
+ },
+ "PS": {
+ "name": "Palesitini"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papuwasi-Gine-Koura"
+ },
+ "PY": {
+ "name": "Paraguwayi"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "NL": {
+ "name": "Peyiba"
+ },
+ "PN": {
+ "name": "Pitikarini"
+ },
+ "PM": {
+ "name": "Piyɛri-Senu-ni-Mikelɔŋ"
+ },
+ "PL": {
+ "name": "Poloɲi"
+ },
+ "PT": {
+ "name": "Pɔritigali"
+ },
+ "PR": {
+ "name": "Pɔrotoriko"
+ },
+ "RE": {
+ "name": "Reyuɲɔŋ"
+ },
+ "RO": {
+ "name": "Rumani"
+ },
+ "RW": {
+ "name": "Ruwanda"
+ },
+ "SV": {
+ "name": "Salivadɔr"
+ },
+ "SB": {
+ "name": "Salomo Gun"
+ },
+ "WS": {
+ "name": "Samowa"
+ },
+ "AS": {
+ "name": "Samowa amerikani"
+ },
+ "CF": {
+ "name": "Santarafiriki"
+ },
+ "ST": {
+ "name": "Sawo Tome-ni-Prinicipe"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Sesɛli"
+ },
+ "SG": {
+ "name": "Sɛngapuri"
+ },
+ "CL": {
+ "name": "Sili"
+ },
+ "CN": {
+ "name": "Siniwajamana"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siri"
+ },
+ "LK": {
+ "name": "Sirilanka"
+ },
+ "SL": {
+ "name": "Siyera Lewɔni"
+ },
+ "SI": {
+ "name": "Sloveni"
+ },
+ "SK": {
+ "name": "Slowaki"
+ },
+ "SO": {
+ "name": "Somali"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudaŋ"
+ },
+ "SR": {
+ "name": "Surinami"
+ },
+ "SE": {
+ "name": "Suwɛdi"
+ },
+ "CH": {
+ "name": "Suwisi"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swazilandi"
+ },
+ "TJ": {
+ "name": "Tajikisitani"
+ },
+ "TZ": {
+ "name": "Tanzani"
+ },
+ "TH": {
+ "name": "Tayilandi"
+ },
+ "TW": {
+ "name": "Tayiwani"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelo"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinite-ni-Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunizi"
+ },
+ "TR": {
+ "name": "Turiki"
+ },
+ "TC": {
+ "name": "Turiki Gun ni Kayiki"
+ },
+ "TM": {
+ "name": "Turikimenisitani"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukɛrɛni"
+ },
+ "UY": {
+ "name": "Urugwayi"
+ },
+ "UZ": {
+ "name": "Uzebekisitani"
+ },
+ "VU": {
+ "name": "Vanuwatu"
+ },
+ "VA": {
+ "name": "Vatikaŋ"
+ },
+ "VE": {
+ "name": "Venezuwela"
+ },
+ "VC": {
+ "name": "Vinisɛn-Senu-ni-Grenadini"
+ },
+ "WF": {
+ "name": "Walisi-ni-Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "VN": {
+ "name": "Wiyɛtinamu"
+ },
+ "ZA": {
+ "name": "Worodugu Afriki"
+ },
+ "KR": {
+ "name": "Worodugu Kore"
+ },
+ "YE": {
+ "name": "Yemɛni"
+ },
+ "JM": {
+ "name": "Zamayiki"
+ },
+ "ZM": {
+ "name": "Zanbi"
+ },
+ "JP": {
+ "name": "Zapɔn"
+ },
+ "NZ": {
+ "name": "Zelandi Koura"
+ },
+ "GE": {
+ "name": "Zeyɔrzi"
+ },
+ "GI": {
+ "name": "Zibralitari"
+ },
+ "ZW": {
+ "name": "Zimbabuwe"
+ },
+ "JO": {
+ "name": "Zɔrdani"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/bn-IN.json b/library/intl/resources/country/bn-IN.json
new file mode 100644
index 000000000..f6aacc74d
--- /dev/null
+++ b/library/intl/resources/country/bn-IN.json
@@ -0,0 +1,761 @@
+{
+ "AT": {
+ "name": "অসà§à¦Ÿà§à¦°à¦¿à¦¯à¦¼à¦¾"
+ },
+ "AU": {
+ "name": "অসà§à¦Ÿà§à¦°à§‡à¦²à¦¿à¦¯à¦¼à¦¾"
+ },
+ "AO": {
+ "name": "অà§à¦¯à¦¾à¦™à§à¦—োলা"
+ },
+ "AQ": {
+ "name": "অà§à¦¯à¦¾à¦¨à§à¦Ÿà¦¾à¦°à§à¦•à¦Ÿà¦¿à¦•à¦¾"
+ },
+ "AC": {
+ "name": "অà§à¦¯à¦¾à¦¸à¦¸à§‡à¦¨à¦¶à¦¨ আইলà§à¦¯à¦¾à¦¨à§à¦¡"
+ },
+ "CI": {
+ "name": "আইভরি কোসà§à¦Ÿ"
+ },
+ "IM": {
+ "name": "আইল অফ মà§à¦¯à¦¾à¦¨"
+ },
+ "IS": {
+ "name": "আইসলà§à¦¯à¦¾à¦¨à§à¦¡"
+ },
+ "AZ": {
+ "name": "আজারবাইজান"
+ },
+ "AF": {
+ "name": "আফগানিসà§à¦¤à¦¾à¦¨"
+ },
+ "AS": {
+ "name": "আমেরিকান সামোয়া"
+ },
+ "IE": {
+ "name": "আয়ারলà§à¦¯à¦¾à¦¨à§à¦¡"
+ },
+ "AW": {
+ "name": "আরà§à¦¬à¦¾"
+ },
+ "AR": {
+ "name": "আরà§à¦œà§‡à¦¨à§à¦Ÿà¦¿à¦¨à¦¾"
+ },
+ "AM": {
+ "name": "আরà§à¦®à§‡à¦¨à¦¿à¦¯à¦¼à¦¾"
+ },
+ "DZ": {
+ "name": "আলজেরিয়া"
+ },
+ "AL": {
+ "name": "আলবà§à¦¯à¦¾à¦¨à¦¿à¦¯à¦¼à¦¾"
+ },
+ "AX": {
+ "name": "আলানà§à¦¡ দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "UA": {
+ "name": "ইউকà§à¦°à§‡à¦‡à¦¨"
+ },
+ "EC": {
+ "name": "ইকà§à¦¯à¦¼à§‡à¦¡à¦°"
+ },
+ "IT": {
+ "name": "ইতালী"
+ },
+ "ID": {
+ "name": "ইনà§à¦¦à§‹à¦¨à§‡à¦¶à¦¿à¦¯à¦¼à¦¾"
+ },
+ "ET": {
+ "name": "ইফিওপিয়া"
+ },
+ "YE": {
+ "name": "ইয়েমেন"
+ },
+ "IQ": {
+ "name": "ইরাক"
+ },
+ "IR": {
+ "name": "ইরান"
+ },
+ "ER": {
+ "name": "ইরিতà§à¦°à¦¿à¦¯à¦¼à¦¾"
+ },
+ "IL": {
+ "name": "ইসà§à¦°à¦¾à¦¯à¦¼à§‡à¦²"
+ },
+ "UG": {
+ "name": "উগানà§à¦¡à¦¾"
+ },
+ "UZ": {
+ "name": "উজবেকিসà§à¦¤à¦¾à¦¨"
+ },
+ "KP": {
+ "name": "উতà§à¦¤à¦° কোরিয়া"
+ },
+ "MP": {
+ "name": "উতà§à¦¤à¦°à¦¾à¦žà§à¦šà¦²à§€à¦¯à¦¼ মারিয়ানা দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "UY": {
+ "name": "উরà§à¦—à§à¦¯à¦¼à§‡"
+ },
+ "AG": {
+ "name": "à¦à¦¨à§à¦Ÿà¦¿à¦—à§à¦¯à¦¼à¦¾ ও বারবà§à¦¡à¦¾"
+ },
+ "SV": {
+ "name": "à¦à¦² সালভেদর"
+ },
+ "EE": {
+ "name": "à¦à¦¸à§à¦¤à§‹à¦¨à¦¿à¦¯à¦¼à¦¾"
+ },
+ "AI": {
+ "name": "à¦à§à¦¯à¦¾à¦™à§à¦—à§à¦‡à¦²à¦¾"
+ },
+ "AD": {
+ "name": "à¦à§à¦¯à¦¾à¦¨à§à¦¡à§‹à¦°à¦¾"
+ },
+ "OM": {
+ "name": "ওমান"
+ },
+ "WF": {
+ "name": "ওয়ালিস ও ফà§à¦Ÿà§à¦¨à¦¾"
+ },
+ "CG": {
+ "name": "কঙà§à¦—ো - বà§à¦°à¦¾à¦œà¦¾à¦­à¦¿à¦²"
+ },
+ "CD": {
+ "name": "কঙà§à¦—ো-কিনশাসা"
+ },
+ "KM": {
+ "name": "কমোরোস"
+ },
+ "KH": {
+ "name": "কমà§à¦¬à§‹à¦¡à¦¿à¦¯à¦¼à¦¾"
+ },
+ "XK": {
+ "name": "কসোভো"
+ },
+ "KZ": {
+ "name": "কাজাকসà§à¦¥à¦¾à¦¨"
+ },
+ "QA": {
+ "name": "কাতার"
+ },
+ "CA": {
+ "name": "কানাডা"
+ },
+ "CU": {
+ "name": "কিউবা"
+ },
+ "CW": {
+ "name": "কিউরাসাও"
+ },
+ "KI": {
+ "name": "কিরিবাতি"
+ },
+ "KG": {
+ "name": "কিরà§à¦—িজিয়া"
+ },
+ "EA": {
+ "name": "কà§à¦‰à¦Ÿà¦¾ à¦à¦¬à¦‚ মেলিলা"
+ },
+ "CK": {
+ "name": "কà§à¦• দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "KW": {
+ "name": "কà§à¦¯à¦¼à§‡à¦¤"
+ },
+ "KE": {
+ "name": "কেনিয়া"
+ },
+ "CV": {
+ "name": "কেপভারà§à¦¦à§‡"
+ },
+ "KY": {
+ "name": "কেমà§à¦¯à¦¾à¦¨ দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "CC": {
+ "name": "কোকোস (কিলিং)দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "CO": {
+ "name": "কোলোমà§à¦¬à¦¿à¦¯à¦¼à¦¾"
+ },
+ "CR": {
+ "name": "কোসà§à¦Ÿà¦¾à¦°à¦¿à¦•à¦¾"
+ },
+ "IC": {
+ "name": "কà§à¦¯à¦¾à¦¨à¦¾à¦°à¦¿ দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "CM": {
+ "name": "কà§à¦¯à¦¾à¦®à§‡à¦°à§à¦¨"
+ },
+ "BQ": {
+ "name": "কà§à¦¯à¦¾à¦°à¦¿à¦¬à¦¿à¦¯à¦¼à¦¾à¦¨ নেদারলà§à¦¯à¦¾à¦¨à§à¦¡à¦¸"
+ },
+ "CX": {
+ "name": "কà§à¦°à¦¿à¦¸à¦®à¦¾à¦¸ দà§à¦¬à§€à¦ª"
+ },
+ "HR": {
+ "name": "কà§à¦°à§‹à¦¯à¦¼à§‡à¦¶à¦¿à¦¯à¦¼à¦¾"
+ },
+ "GM": {
+ "name": "গামà§à¦¬à¦¿à¦¯à¦¼à¦¾"
+ },
+ "GN": {
+ "name": "গিনি"
+ },
+ "GW": {
+ "name": "গিনি-বিসাউ"
+ },
+ "GY": {
+ "name": "গিয়ানা"
+ },
+ "GP": {
+ "name": "গà§à¦¯à¦¼à¦¾à¦¦à§‡à¦²à§Œà¦ª"
+ },
+ "GU": {
+ "name": "গà§à¦¯à¦¼à¦¾à¦®"
+ },
+ "GT": {
+ "name": "গোয়াতেমালা"
+ },
+ "GA": {
+ "name": "গà§à¦¯à¦¾à¦¬à¦¨"
+ },
+ "GG": {
+ "name": "গà§à¦°à¦¾à¦žà§à¦œà¦¿"
+ },
+ "GL": {
+ "name": "গà§à¦°à§€à¦¨à¦²à§à¦¯à¦¾à¦¨à§à¦¡"
+ },
+ "GR": {
+ "name": "গà§à¦°à§€à¦¸"
+ },
+ "GD": {
+ "name": "গà§à¦°à§‡à¦¨à§‡à¦¡à¦¾"
+ },
+ "GH": {
+ "name": "ঘানা"
+ },
+ "TD": {
+ "name": "চাদ"
+ },
+ "CL": {
+ "name": "চিলি"
+ },
+ "CN": {
+ "name": "চীন"
+ },
+ "CZ": {
+ "name": "চেক পà§à¦°à¦œà¦¾à¦¤à¦¨à§à¦¤à§à¦°"
+ },
+ "GE": {
+ "name": "জরà§à¦œà¦¿à¦¯à¦¼à¦¾"
+ },
+ "JO": {
+ "name": "জরà§à¦¡à¦¨"
+ },
+ "JP": {
+ "name": "জাপান"
+ },
+ "JM": {
+ "name": "জামাইকা"
+ },
+ "ZM": {
+ "name": "জামà§à¦¬à¦¿à¦¯à¦¼à¦¾"
+ },
+ "DE": {
+ "name": "জারà§à¦®à¦¾à¦¨à¦¿"
+ },
+ "JE": {
+ "name": "জারà§à¦¸à¦¿"
+ },
+ "DJ": {
+ "name": "জিবà§à¦¤à¦¿"
+ },
+ "GI": {
+ "name": "জিবà§à¦°à¦¾à¦²à§à¦Ÿà¦¾à¦°"
+ },
+ "ZW": {
+ "name": "জিমà§à¦¬à¦¾à¦¬à§‹à¦¯à¦¼à§‡"
+ },
+ "TV": {
+ "name": "টà§à¦­à¦¾à¦²à§"
+ },
+ "TK": {
+ "name": "টোকেলাউ"
+ },
+ "TG": {
+ "name": "টোগো"
+ },
+ "TO": {
+ "name": "টোঙà§à¦—া"
+ },
+ "TA": {
+ "name": "টà§à¦°à¦¿à¦¸à§à¦Ÿà¦¾à¦¨ ডা কà§à¦¨à¦¹à¦¾"
+ },
+ "DK": {
+ "name": "ডেনমারà§à¦•"
+ },
+ "DM": {
+ "name": "ডোমিনিকা"
+ },
+ "DO": {
+ "name": "ডোমেনিকান পà§à¦°à¦œà¦¾à¦¤à¦¨à§à¦¤à§à¦°"
+ },
+ "TW": {
+ "name": "তাইওয়ান"
+ },
+ "TJ": {
+ "name": "তাজিকসà§à¦¥à¦¾à¦¨"
+ },
+ "TZ": {
+ "name": "তাঞà§à¦œà¦¾à¦¨à¦¿à¦¯à¦¼à¦¾"
+ },
+ "TN": {
+ "name": "তিউনিশিয়া"
+ },
+ "TL": {
+ "name": "তিমà§à¦°-লেসà§à¦¤à§‡"
+ },
+ "TR": {
+ "name": "তà§à¦°à¦¸à§à¦•"
+ },
+ "TM": {
+ "name": "তà§à¦°à§à¦•à¦®à§‡à¦¨à¦¿à¦¸à§à¦¤à¦¾à¦¨"
+ },
+ "TC": {
+ "name": "তà§à¦°à§à¦•à¦¸ ও কাইকোস দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "TT": {
+ "name": "তà§à¦°à¦¿à¦¨à¦¿à¦¨à¦¾à¦¦ ও টোবà§à¦¯à¦¾à¦—ো"
+ },
+ "TH": {
+ "name": "থাইলà§à¦¯à¦¾à¦¨à§à¦¡"
+ },
+ "ZA": {
+ "name": "দকà§à¦·à¦¿à¦£ আফà§à¦°à¦¿à¦•à¦¾"
+ },
+ "KR": {
+ "name": "দকà§à¦·à¦¿à¦£ কোরিয়া"
+ },
+ "GS": {
+ "name": "দকà§à¦·à¦¿à¦£ জরà§à¦œà¦¿à¦¯à¦¼à¦¾ ও দকà§à¦·à¦¿à¦£ সà§à¦¯à¦¾à¦¨à§à¦¡à¦‰à¦‡à¦š দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "SS": {
+ "name": "দকà§à¦·à¦¿à¦¨ সà§à¦¦à¦¾à¦¨"
+ },
+ "DG": {
+ "name": "দিয়েগো গারà§à¦¸à¦¿à¦¯à¦¼à¦¾"
+ },
+ "NO": {
+ "name": "নরওয়ে"
+ },
+ "NE": {
+ "name": "নাইজার"
+ },
+ "NG": {
+ "name": "নাইজেরিয়া"
+ },
+ "NR": {
+ "name": "নাউরà§"
+ },
+ "NA": {
+ "name": "নামিবিয়া"
+ },
+ "NC": {
+ "name": "নিউ কà§à¦¯à¦¾à¦²à§‡à¦¡à§‹à¦¨à¦¿à¦¯à¦¼à¦¾"
+ },
+ "NZ": {
+ "name": "নিউজিলà§à¦¯à¦¾à¦¨à§à¦¡"
+ },
+ "NU": {
+ "name": "নিউয়ে"
+ },
+ "NI": {
+ "name": "নিকারাগà§à¦¯à¦¼à¦¾"
+ },
+ "GQ": {
+ "name": "নিরকà§à¦·à§€à¦¯à¦¼ গিনি"
+ },
+ "NF": {
+ "name": "নিরফোক দà§à¦¬à§€à¦ª"
+ },
+ "NL": {
+ "name": "নেদারলà§à¦¯à¦¾à¦¨à§à¦¡à¦¸"
+ },
+ "NP": {
+ "name": "নেপাল"
+ },
+ "PT": {
+ "name": "পরà§à¦¤à§à¦—াল"
+ },
+ "EH": {
+ "name": "পশà§à¦šà¦¿à¦® সাহারা"
+ },
+ "PK": {
+ "name": "পাকিসà§à¦¤à¦¾à¦¨"
+ },
+ "PA": {
+ "name": "পানামা"
+ },
+ "PG": {
+ "name": "পাপà§à¦¯à¦¼à¦¾ নিউ গিনি"
+ },
+ "PW": {
+ "name": "পালাউ"
+ },
+ "PN": {
+ "name": "পিটকেয়ারà§à¦¨ দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "PE": {
+ "name": "পিরà§"
+ },
+ "PR": {
+ "name": "পà§à¦¯à¦¼à§‡à¦°à§à¦¤à§‹ রিকো"
+ },
+ "PL": {
+ "name": "পোলà§à¦¯à¦¾à¦¨à§à¦¡"
+ },
+ "PY": {
+ "name": "পà§à¦¯à¦¾à¦°à¦¾à¦—à§à¦¯à¦¼à§‡"
+ },
+ "FK": {
+ "name": "ফকলà§à¦¯à¦¾à¦¨à§à¦¡ দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "GF": {
+ "name": "ফরাসী গায়ানা"
+ },
+ "TF": {
+ "name": "ফরাসী দকà§à¦·à¦¿à¦£à¦¾à¦žà§à¦šà¦²"
+ },
+ "PF": {
+ "name": "ফরাসী পলিনেশিয়া"
+ },
+ "FJ": {
+ "name": "ফিজি"
+ },
+ "FI": {
+ "name": "ফিনলà§à¦¯à¦¾à¦¨à§à¦¡"
+ },
+ "PH": {
+ "name": "ফিলিপাইন"
+ },
+ "PS": {
+ "name": "ফিলিসà§à¦¤à¦¿à¦¨ অঞà§à¦šà¦²à¦¸à¦®à§‚হ"
+ },
+ "FO": {
+ "name": "ফà§à¦¯à¦¾à¦°à¦“ দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "FR": {
+ "name": "ফà§à¦°à¦¾à¦¨à§à¦¸"
+ },
+ "BW": {
+ "name": "বতসোয়ানা"
+ },
+ "BA": {
+ "name": "বসনিয়া ও হারà§à¦œà§‡à¦—োভিনা"
+ },
+ "BD": {
+ "name": "বাংলাদেশ"
+ },
+ "BB": {
+ "name": "বারবাদোস"
+ },
+ "BM": {
+ "name": "বারমà§à¦¡à¦¾"
+ },
+ "BH": {
+ "name": "বাহরাইন"
+ },
+ "BS": {
+ "name": "বাহামা দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "BF": {
+ "name": "বà§à¦°à¦•à¦¿à¦¨à¦¾ ফাসো"
+ },
+ "BI": {
+ "name": "বà§à¦°à§à¦¨à§à¦¡à¦¿"
+ },
+ "BG": {
+ "name": "বà§à¦²à¦—েরিয়া"
+ },
+ "BJ": {
+ "name": "বেনিন"
+ },
+ "BE": {
+ "name": "বেলজিয়াম"
+ },
+ "BZ": {
+ "name": "বেলিজ"
+ },
+ "BY": {
+ "name": "বেলোরà§à¦¶à¦¿à¦¯à¦¼à¦¾"
+ },
+ "BO": {
+ "name": "বোলিভিয়া"
+ },
+ "BR": {
+ "name": "বà§à¦°à¦¾à¦œà¦¿à¦²"
+ },
+ "IO": {
+ "name": "বà§à¦°à¦¿à¦Ÿà¦¿à¦¶ ভারত মহাসাগরীয় অঞà§à¦šà¦²"
+ },
+ "VG": {
+ "name": "বà§à¦°à¦¿à¦Ÿà¦¿à¦¶ ভারà§à¦œà¦¿à¦¨ দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "BN": {
+ "name": "বà§à¦°à§à¦¨à§‡à¦‡"
+ },
+ "VU": {
+ "name": "ভানà§à¦¯à¦¼à¦¾à¦Ÿà§"
+ },
+ "IN": {
+ "name": "ভারত"
+ },
+ "VN": {
+ "name": "ভিয়েতনাম"
+ },
+ "BT": {
+ "name": "ভà§à¦Ÿà¦¾à¦¨"
+ },
+ "VE": {
+ "name": "ভেনেজà§à¦¯à¦¼à§‡à¦²à¦¾"
+ },
+ "VA": {
+ "name": "ভà§à¦¯à¦¾à¦Ÿà¦¿à¦•à¦¾à¦¨ সিটি"
+ },
+ "MN": {
+ "name": "মঙà§à¦—োলিয়া"
+ },
+ "CF": {
+ "name": "মধà§à¦¯ আফà§à¦°à¦¿à¦•à¦¾à¦° পà§à¦°à¦œà¦¾à¦¤à¦¨à§à¦¤à§à¦°"
+ },
+ "MS": {
+ "name": "মনà§à¦Ÿà¦¸à§‡à¦°à¦¾à¦Ÿ"
+ },
+ "ME": {
+ "name": "মনà§à¦Ÿà¦¿à¦¨à¦¿à¦—à§à¦°à§‹"
+ },
+ "MR": {
+ "name": "মরিতানিয়া"
+ },
+ "MU": {
+ "name": "মরিশাস"
+ },
+ "FM": {
+ "name": "মাইকà§à¦°à§‹à¦¨à§‡à¦¶à¦¿à¦¯à¦¼à¦¾"
+ },
+ "MG": {
+ "name": "মাদাগাসà§à¦•à¦¾à¦°"
+ },
+ "MM": {
+ "name": "মায়ানমার (বারà§à¦®à¦¾)"
+ },
+ "YT": {
+ "name": "মায়োতà§à¦¤à§‡"
+ },
+ "VI": {
+ "name": "মারà§à¦•à¦¿à¦¨ ভারà§à¦œà¦¿à¦¨ দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "US": {
+ "name": "মারà§à¦•à¦¿à¦¨ যà§à¦•à§à¦¤à¦°à¦¾à¦·à§à¦Ÿà§à¦°"
+ },
+ "MQ": {
+ "name": "মারà§à¦Ÿà¦¿à¦¨à¦¿à¦•"
+ },
+ "MH": {
+ "name": "মারà§à¦¶à¦¾à¦² দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "MV": {
+ "name": "মালদà§à¦¬à§€à¦ª"
+ },
+ "MY": {
+ "name": "মালয়েশিয়া"
+ },
+ "MW": {
+ "name": "মালাউই"
+ },
+ "ML": {
+ "name": "মালি"
+ },
+ "MT": {
+ "name": "মালà§à¦Ÿà¦¾"
+ },
+ "EG": {
+ "name": "মিশর"
+ },
+ "MX": {
+ "name": "মেকà§à¦¸à¦¿à¦•à§‹"
+ },
+ "MZ": {
+ "name": "মোজামà§à¦¬à¦¿à¦•"
+ },
+ "MC": {
+ "name": "মোনাকো"
+ },
+ "MA": {
+ "name": "মোরকà§à¦•à§‹"
+ },
+ "MD": {
+ "name": "মোলà§à¦¦à¦¾à¦­à¦¿à¦¯à¦¼à¦¾"
+ },
+ "MO": {
+ "name": "মà§à¦¯à¦¾à¦•à¦¾à¦“ à¦à¦¸ ঠআর চায়না"
+ },
+ "MK": {
+ "name": "মà§à¦¯à¦¾à¦¸à¦¾à¦¡à§‹à¦¨à¦¿à¦¯à¦¼à¦¾"
+ },
+ "GB": {
+ "name": "যà§à¦•à§à¦¤à¦°à¦¾à¦œà§à¦¯"
+ },
+ "UM": {
+ "name": "যà§à¦•à§à¦¤à¦°à¦¾à¦·à§à¦Ÿà§à¦°à§‡à¦° পারà§à¦¶à§à¦¬à¦¬à¦°à§à¦¤à§€ দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "RU": {
+ "name": "রাশিয়া"
+ },
+ "RE": {
+ "name": "রিইউনিয়ন"
+ },
+ "RO": {
+ "name": "রà§à¦®à¦¾à¦¨à¦¿à¦¯à¦¼à¦¾"
+ },
+ "RW": {
+ "name": "রà§à¦¯à¦¼à¦¾à¦¨à§à¦¡à¦¾"
+ },
+ "LR": {
+ "name": "লাইবেরিয়া"
+ },
+ "LA": {
+ "name": "লাওস"
+ },
+ "LU": {
+ "name": "লাকà§à¦¸à§‡à¦®à¦¬à¦¾à¦°à§à¦—"
+ },
+ "LV": {
+ "name": "লাতà§à¦­à¦¿à¦¯à¦¼à¦¾"
+ },
+ "LI": {
+ "name": "লিচেনসà§à¦Ÿà§‡à¦‡à¦¨"
+ },
+ "LT": {
+ "name": "লিথà§à¦¯à¦¼à¦¾à¦¨à¦¿à¦¯à¦¼à¦¾"
+ },
+ "LY": {
+ "name": "লিবিয়া"
+ },
+ "LB": {
+ "name": "লেবানন"
+ },
+ "LS": {
+ "name": "লেসোথো"
+ },
+ "LK": {
+ "name": "শà§à¦°à§€à¦²à¦™à§à¦•à¦¾"
+ },
+ "SK": {
+ "name": "শà§à¦²à§‹à¦­à¦¾à¦•à¦¿à¦¯à¦¼à¦¾"
+ },
+ "AE": {
+ "name": "সংযà§à¦•à§à¦¤ আরব আমিরাত"
+ },
+ "SB": {
+ "name": "সলোমন দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "CY": {
+ "name": "সাইপà§à¦°à¦¾à¦¸"
+ },
+ "ST": {
+ "name": "সাওটোমা ও পà§à¦°à¦¿à¦¨à§à¦¸à¦¿à¦ªà¦¿"
+ },
+ "SM": {
+ "name": "সান মারিনো"
+ },
+ "WS": {
+ "name": "সামোয়া"
+ },
+ "RS": {
+ "name": "সারà§à¦¬à¦¿à¦¯à¦¼à¦¾"
+ },
+ "SG": {
+ "name": "সিঙà§à¦—াপà§à¦°"
+ },
+ "SX": {
+ "name": "সিনà§à¦Ÿ মারà§à¦Ÿà§‡à¦¨"
+ },
+ "SL": {
+ "name": "সিয়েরালিওন"
+ },
+ "SY": {
+ "name": "সিরিয়া"
+ },
+ "SC": {
+ "name": "সিসিলি"
+ },
+ "CH": {
+ "name": "সà§à¦‡à¦œà¦¾à¦°à¦²à§à¦¯à¦¾à¦¨à§à¦¡"
+ },
+ "SE": {
+ "name": "সà§à¦‡à¦¡à§‡à¦¨"
+ },
+ "SD": {
+ "name": "সà§à¦¦à¦¾à¦¨"
+ },
+ "SR": {
+ "name": "সà§à¦°à¦¿à¦¨à¦¾à¦®"
+ },
+ "SN": {
+ "name": "সেনেগাল"
+ },
+ "KN": {
+ "name": "সেনà§à¦Ÿ কিটস ও নেভিস"
+ },
+ "PM": {
+ "name": "সেনà§à¦Ÿ পিয়ের ও মিকà§à¦¯à¦¼à§‡à¦²à¦¨"
+ },
+ "BL": {
+ "name": "সেনà§à¦Ÿ বারথেলিমি"
+ },
+ "VC": {
+ "name": "সেনà§à¦Ÿ ভিনসেনà§à¦Ÿ ও দà§à¦¯à¦¾ গà§à¦°à§‡à¦¨à¦¾à¦¡à¦¿à¦¨à¦¸"
+ },
+ "MF": {
+ "name": "সেনà§à¦Ÿ মারà§à¦Ÿà¦¿à¦¨"
+ },
+ "LC": {
+ "name": "সেনà§à¦Ÿ লà§à¦¸à¦¿à¦¯à¦¼à¦¾"
+ },
+ "SH": {
+ "name": "সেনà§à¦Ÿ হেলেনা"
+ },
+ "SO": {
+ "name": "সোমালিয়া"
+ },
+ "SZ": {
+ "name": "সোয়াজিলà§à¦¯à¦¾à¦¨à§à¦¡"
+ },
+ "SA": {
+ "name": "সৌদি আরব"
+ },
+ "ES": {
+ "name": "সà§à¦ªà§‡à¦¨"
+ },
+ "SJ": {
+ "name": "সà§à¦¬à¦¾à¦²à¦¬à¦¾à¦°à§à¦¡ ও জান মেয়েন"
+ },
+ "SI": {
+ "name": "সà§à¦²à§‹à¦­à¦¾à¦¨à¦¿à¦¯à¦¼à¦¾"
+ },
+ "HK": {
+ "name": "হংকং à¦à¦¸à¦à¦†à¦° চীনা"
+ },
+ "HN": {
+ "name": "হণà§à¦¡à§à¦°à¦¾à¦¸"
+ },
+ "HT": {
+ "name": "হাইতি"
+ },
+ "HU": {
+ "name": "হাঙà§à¦—েরি"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/bn.json b/library/intl/resources/country/bn.json
new file mode 100644
index 000000000..b55778f7b
--- /dev/null
+++ b/library/intl/resources/country/bn.json
@@ -0,0 +1,761 @@
+{
+ "AT": {
+ "name": "অসà§à¦Ÿà§à¦°à¦¿à¦¯à¦¼à¦¾"
+ },
+ "AU": {
+ "name": "অসà§à¦Ÿà§à¦°à§‡à¦²à¦¿à¦¯à¦¼à¦¾"
+ },
+ "AO": {
+ "name": "অà§à¦¯à¦¾à¦™à§à¦—োলা"
+ },
+ "AQ": {
+ "name": "অà§à¦¯à¦¾à¦¨à§à¦Ÿà¦¾à¦°à§à¦•à¦Ÿà¦¿à¦•à¦¾"
+ },
+ "AC": {
+ "name": "অà§à¦¯à¦¾à¦¸à¦¸à§‡à¦¨à¦¶à¦¨ আইলà§à¦¯à¦¾à¦¨à§à¦¡"
+ },
+ "CI": {
+ "name": "আইভরি কোসà§à¦Ÿ"
+ },
+ "IM": {
+ "name": "আইল অফ মà§à¦¯à¦¾à¦¨"
+ },
+ "IS": {
+ "name": "আইসলà§à¦¯à¦¾à¦¨à§à¦¡"
+ },
+ "AZ": {
+ "name": "আজারবাইজান"
+ },
+ "AF": {
+ "name": "আফগানিসà§à¦¤à¦¾à¦¨"
+ },
+ "AS": {
+ "name": "আমেরিকান সামোয়া"
+ },
+ "IE": {
+ "name": "আয়ারলà§à¦¯à¦¾à¦¨à§à¦¡"
+ },
+ "AW": {
+ "name": "আরà§à¦¬à¦¾"
+ },
+ "AR": {
+ "name": "আরà§à¦œà§‡à¦¨à§à¦Ÿà¦¿à¦¨à¦¾"
+ },
+ "AM": {
+ "name": "আরà§à¦®à§‡à¦¨à¦¿à¦¯à¦¼à¦¾"
+ },
+ "DZ": {
+ "name": "আলজেরিয়া"
+ },
+ "AL": {
+ "name": "আলবà§à¦¯à¦¾à¦¨à¦¿à¦¯à¦¼à¦¾"
+ },
+ "AX": {
+ "name": "আলানà§à¦¡ দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "UA": {
+ "name": "ইউকà§à¦°à§‡à¦‡à¦¨"
+ },
+ "EC": {
+ "name": "ইকà§à¦¯à¦¼à§‡à¦¡à¦°"
+ },
+ "IT": {
+ "name": "ইতালী"
+ },
+ "ID": {
+ "name": "ইনà§à¦¦à§‹à¦¨à§‡à¦¶à¦¿à¦¯à¦¼à¦¾"
+ },
+ "ET": {
+ "name": "ইফিওপিয়া"
+ },
+ "YE": {
+ "name": "ইয়েমেন"
+ },
+ "IQ": {
+ "name": "ইরাক"
+ },
+ "IR": {
+ "name": "ইরান"
+ },
+ "ER": {
+ "name": "ইরিতà§à¦°à¦¿à¦¯à¦¼à¦¾"
+ },
+ "IL": {
+ "name": "ইসà§à¦°à¦¾à¦¯à¦¼à§‡à¦²"
+ },
+ "UG": {
+ "name": "উগানà§à¦¡à¦¾"
+ },
+ "UZ": {
+ "name": "উজবেকিসà§à¦¤à¦¾à¦¨"
+ },
+ "KP": {
+ "name": "উতà§à¦¤à¦° কোরিয়া"
+ },
+ "MP": {
+ "name": "উতà§à¦¤à¦°à¦¾à¦žà§à¦šà¦²à§€à¦¯à¦¼ মারিয়ানা দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "UY": {
+ "name": "উরà§à¦—à§à¦¯à¦¼à§‡"
+ },
+ "AG": {
+ "name": "à¦à¦¨à§à¦Ÿà¦¿à¦—à§à¦¯à¦¼à¦¾ ও বারবà§à¦¡à¦¾"
+ },
+ "SV": {
+ "name": "à¦à¦² সালভেদর"
+ },
+ "EE": {
+ "name": "à¦à¦¸à§à¦¤à§‹à¦¨à¦¿à¦¯à¦¼à¦¾"
+ },
+ "AI": {
+ "name": "à¦à§à¦¯à¦¾à¦™à§à¦—à§à¦‡à¦²à¦¾"
+ },
+ "AD": {
+ "name": "à¦à§à¦¯à¦¾à¦¨à§à¦¡à§‹à¦°à¦¾"
+ },
+ "OM": {
+ "name": "ওমান"
+ },
+ "WF": {
+ "name": "ওয়ালিস ও ফà§à¦Ÿà§à¦¨à¦¾"
+ },
+ "CG": {
+ "name": "কঙà§à¦—ো - বà§à¦°à¦¾à¦œà¦¾à¦­à¦¿à¦²"
+ },
+ "CD": {
+ "name": "কঙà§à¦—ো-কিনশাসা"
+ },
+ "KM": {
+ "name": "কমোরোস"
+ },
+ "KH": {
+ "name": "কমà§à¦¬à§‹à¦¡à¦¿à¦¯à¦¼à¦¾"
+ },
+ "XK": {
+ "name": "কসোভো"
+ },
+ "KZ": {
+ "name": "কাজাকসà§à¦¥à¦¾à¦¨"
+ },
+ "QA": {
+ "name": "কাতার"
+ },
+ "CA": {
+ "name": "কানাডা"
+ },
+ "CU": {
+ "name": "কিউবা"
+ },
+ "CW": {
+ "name": "কিউরাসাও"
+ },
+ "KI": {
+ "name": "কিরিবাতি"
+ },
+ "KG": {
+ "name": "কিরà§à¦—িজিয়া"
+ },
+ "EA": {
+ "name": "কà§à¦‰à¦Ÿà¦¾ à¦à¦¬à¦‚ মেলিলা"
+ },
+ "CK": {
+ "name": "কà§à¦• দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "KW": {
+ "name": "কà§à¦¯à¦¼à§‡à¦¤"
+ },
+ "KE": {
+ "name": "কেনিয়া"
+ },
+ "CV": {
+ "name": "কেপভারà§à¦¦à§‡"
+ },
+ "KY": {
+ "name": "কেমà§à¦¯à¦¾à¦¨ দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "CC": {
+ "name": "কোকোস (কিলিং)দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "CO": {
+ "name": "কোলোমà§à¦¬à¦¿à¦¯à¦¼à¦¾"
+ },
+ "CR": {
+ "name": "কোসà§à¦Ÿà¦¾à¦°à¦¿à¦•à¦¾"
+ },
+ "IC": {
+ "name": "কà§à¦¯à¦¾à¦¨à¦¾à¦°à¦¿ দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "CM": {
+ "name": "কà§à¦¯à¦¾à¦®à§‡à¦°à§à¦¨"
+ },
+ "BQ": {
+ "name": "কà§à¦¯à¦¾à¦°à¦¿à¦¬à¦¿à¦¯à¦¼à¦¾à¦¨ নেদারলà§à¦¯à¦¾à¦¨à§à¦¡à¦¸"
+ },
+ "CX": {
+ "name": "কà§à¦°à¦¿à¦¸à¦®à¦¾à¦¸ দà§à¦¬à§€à¦ª"
+ },
+ "HR": {
+ "name": "কà§à¦°à§‹à¦¯à¦¼à§‡à¦¶à¦¿à¦¯à¦¼à¦¾"
+ },
+ "GM": {
+ "name": "গামà§à¦¬à¦¿à¦¯à¦¼à¦¾"
+ },
+ "GN": {
+ "name": "গিনি"
+ },
+ "GW": {
+ "name": "গিনি-বিসাউ"
+ },
+ "GY": {
+ "name": "গিয়ানা"
+ },
+ "GP": {
+ "name": "গà§à¦¯à¦¼à¦¾à¦¦à§‡à¦²à§Œà¦ª"
+ },
+ "GU": {
+ "name": "গà§à¦¯à¦¼à¦¾à¦®"
+ },
+ "GT": {
+ "name": "গোয়াটিমালা"
+ },
+ "GA": {
+ "name": "গà§à¦¯à¦¾à¦¬à¦¨"
+ },
+ "GG": {
+ "name": "গà§à¦°à¦¾à¦žà§à¦œà¦¿"
+ },
+ "GL": {
+ "name": "গà§à¦°à§€à¦¨à¦²à§à¦¯à¦¾à¦¨à§à¦¡"
+ },
+ "GR": {
+ "name": "গà§à¦°à§€à¦¸"
+ },
+ "GD": {
+ "name": "গà§à¦°à§‡à¦¨à¦¾à¦¡à¦¾"
+ },
+ "GH": {
+ "name": "ঘানা"
+ },
+ "TD": {
+ "name": "চাদ"
+ },
+ "CL": {
+ "name": "চিলি"
+ },
+ "CN": {
+ "name": "চীন"
+ },
+ "CZ": {
+ "name": "চেক পà§à¦°à¦œà¦¾à¦¤à¦¨à§à¦¤à§à¦°"
+ },
+ "GE": {
+ "name": "জরà§à¦œà¦¿à¦¯à¦¼à¦¾"
+ },
+ "JO": {
+ "name": "জরà§à¦¡à¦¨"
+ },
+ "JP": {
+ "name": "জাপান"
+ },
+ "ZM": {
+ "name": "জামà§à¦¬à¦¿à¦¯à¦¼à¦¾"
+ },
+ "DE": {
+ "name": "জারà§à¦®à¦¾à¦¨à¦¿"
+ },
+ "JE": {
+ "name": "জারà§à¦¸à¦¿"
+ },
+ "DJ": {
+ "name": "জিবà§à¦¤à¦¿"
+ },
+ "GI": {
+ "name": "জিবà§à¦°à¦¾à¦²à§à¦Ÿà¦¾à¦°"
+ },
+ "ZW": {
+ "name": "জিমà§à¦¬à¦¾à¦¬à§‹à¦¯à¦¼à§‡"
+ },
+ "JM": {
+ "name": "জà§à¦¯à¦¾à¦®à¦¾à¦‡à¦•à¦¾"
+ },
+ "TV": {
+ "name": "টà§à¦­à¦¾à¦²à§"
+ },
+ "TK": {
+ "name": "টোকেলাউ"
+ },
+ "TG": {
+ "name": "টোগো"
+ },
+ "TO": {
+ "name": "টোঙà§à¦—া"
+ },
+ "TA": {
+ "name": "টà§à¦°à¦¿à¦¸à§à¦Ÿà¦¾à¦¨ ডা কà§à¦¨à¦¹à¦¾"
+ },
+ "DK": {
+ "name": "ডেনমারà§à¦•"
+ },
+ "DM": {
+ "name": "ডোমিনিকা"
+ },
+ "DO": {
+ "name": "ডোমেনিকান পà§à¦°à¦œà¦¾à¦¤à¦¨à§à¦¤à§à¦°"
+ },
+ "TW": {
+ "name": "তাইওয়ান"
+ },
+ "TJ": {
+ "name": "তাজিকসà§à¦¥à¦¾à¦¨"
+ },
+ "TZ": {
+ "name": "তাঞà§à¦œà¦¾à¦¨à¦¿à¦¯à¦¼à¦¾"
+ },
+ "TN": {
+ "name": "তিউনিশিয়া"
+ },
+ "TL": {
+ "name": "তিমà§à¦°-লেসà§à¦¤à§‡"
+ },
+ "TR": {
+ "name": "তà§à¦°à¦¸à§à¦•"
+ },
+ "TM": {
+ "name": "তà§à¦°à§à¦•à¦®à§‡à¦¨à¦¿à¦¸à§à¦¤à¦¾à¦¨"
+ },
+ "TC": {
+ "name": "তà§à¦°à§à¦•à¦¸ ও কাইকোস দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "TT": {
+ "name": "তà§à¦°à¦¿à¦¨à¦¿à¦¨à¦¾à¦¦ ও টোবà§à¦¯à¦¾à¦—ো"
+ },
+ "TH": {
+ "name": "থাইলà§à¦¯à¦¾à¦¨à§à¦¡"
+ },
+ "ZA": {
+ "name": "দকà§à¦·à¦¿à¦£ আফà§à¦°à¦¿à¦•à¦¾"
+ },
+ "KR": {
+ "name": "দকà§à¦·à¦¿à¦£ কোরিয়া"
+ },
+ "GS": {
+ "name": "দকà§à¦·à¦¿à¦£ জরà§à¦œà¦¿à¦¯à¦¼à¦¾ ও দকà§à¦·à¦¿à¦£ সà§à¦¯à¦¾à¦¨à§à¦¡à¦‰à¦‡à¦š দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "SS": {
+ "name": "দকà§à¦·à¦¿à¦¨ সà§à¦¦à¦¾à¦¨"
+ },
+ "DG": {
+ "name": "দিয়েগো গারà§à¦¸à¦¿à¦¯à¦¼à¦¾"
+ },
+ "NO": {
+ "name": "নরওয়ে"
+ },
+ "NE": {
+ "name": "নাইজার"
+ },
+ "NG": {
+ "name": "নাইজেরিয়া"
+ },
+ "NR": {
+ "name": "নাউরà§"
+ },
+ "NA": {
+ "name": "নামিবিয়া"
+ },
+ "NC": {
+ "name": "নিউ কà§à¦¯à¦¾à¦²à§‡à¦¡à§‹à¦¨à¦¿à¦¯à¦¼à¦¾"
+ },
+ "NZ": {
+ "name": "নিউজিলà§à¦¯à¦¾à¦¨à§à¦¡"
+ },
+ "NU": {
+ "name": "নিউয়ে"
+ },
+ "NI": {
+ "name": "নিকারাগà§à¦¯à¦¼à¦¾"
+ },
+ "GQ": {
+ "name": "নিরকà§à¦·à§€à¦¯à¦¼ গিনি"
+ },
+ "NF": {
+ "name": "নিরফোক দà§à¦¬à§€à¦ª"
+ },
+ "NL": {
+ "name": "নেদারলà§à¦¯à¦¾à¦¨à§à¦¡à¦¸"
+ },
+ "NP": {
+ "name": "নেপাল"
+ },
+ "PT": {
+ "name": "পরà§à¦¤à§à¦—াল"
+ },
+ "EH": {
+ "name": "পশà§à¦šà¦¿à¦® সাহারা"
+ },
+ "PK": {
+ "name": "পাকিসà§à¦¤à¦¾à¦¨"
+ },
+ "PA": {
+ "name": "পানামা"
+ },
+ "PG": {
+ "name": "পাপà§à¦¯à¦¼à¦¾ নিউ গিনি"
+ },
+ "PW": {
+ "name": "পালাউ"
+ },
+ "PN": {
+ "name": "পিটকেয়ারà§à¦¨ দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "PE": {
+ "name": "পিরà§"
+ },
+ "PR": {
+ "name": "পà§à¦¯à¦¼à§‡à¦°à§à¦¤à§‹ রিকো"
+ },
+ "PL": {
+ "name": "পোলà§à¦¯à¦¾à¦¨à§à¦¡"
+ },
+ "PY": {
+ "name": "পà§à¦¯à¦¾à¦°à¦¾à¦—à§à¦¯à¦¼à§‡"
+ },
+ "FK": {
+ "name": "ফকলà§à¦¯à¦¾à¦¨à§à¦¡ দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "GF": {
+ "name": "ফরাসী গায়ানা"
+ },
+ "TF": {
+ "name": "ফরাসী দকà§à¦·à¦¿à¦£à¦¾à¦žà§à¦šà¦²"
+ },
+ "PF": {
+ "name": "ফরাসী পলিনেশিয়া"
+ },
+ "FJ": {
+ "name": "ফিজি"
+ },
+ "FI": {
+ "name": "ফিনলà§à¦¯à¦¾à¦¨à§à¦¡"
+ },
+ "PH": {
+ "name": "ফিলিপাইন"
+ },
+ "PS": {
+ "name": "ফিলিসà§à¦¤à¦¿à¦¨ অঞà§à¦šà¦²à¦¸à¦®à§‚হ"
+ },
+ "FO": {
+ "name": "ফà§à¦¯à¦¾à¦°à¦“ দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "FR": {
+ "name": "ফà§à¦°à¦¾à¦¨à§à¦¸"
+ },
+ "BW": {
+ "name": "বতসোয়ানা"
+ },
+ "BA": {
+ "name": "বসনিয়া ও হারà§à¦œà§‡à¦—োভিনা"
+ },
+ "BD": {
+ "name": "বাংলাদেশ"
+ },
+ "BB": {
+ "name": "বারবাদোস"
+ },
+ "BM": {
+ "name": "বারমà§à¦¡à¦¾"
+ },
+ "BH": {
+ "name": "বাহরাইন"
+ },
+ "BS": {
+ "name": "বাহামা দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "BF": {
+ "name": "বà§à¦°à¦•à¦¿à¦¨à¦¾ ফাসো"
+ },
+ "BI": {
+ "name": "বà§à¦°à§à¦¨à§à¦¡à¦¿"
+ },
+ "BG": {
+ "name": "বà§à¦²à¦—েরিয়া"
+ },
+ "BJ": {
+ "name": "বেনিন"
+ },
+ "BE": {
+ "name": "বেলজিয়াম"
+ },
+ "BZ": {
+ "name": "বেলিজ"
+ },
+ "BY": {
+ "name": "বেলোরà§à¦¶à¦¿à¦¯à¦¼à¦¾"
+ },
+ "BO": {
+ "name": "বোলিভিয়া"
+ },
+ "BR": {
+ "name": "বà§à¦°à¦¾à¦œà¦¿à¦²"
+ },
+ "IO": {
+ "name": "বà§à¦°à¦¿à¦Ÿà¦¿à¦¶ ভারত মহাসাগরীয় অঞà§à¦šà¦²"
+ },
+ "VG": {
+ "name": "বà§à¦°à¦¿à¦Ÿà¦¿à¦¶ ভারà§à¦œà¦¿à¦¨ দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "BN": {
+ "name": "বà§à¦°à§à¦¨à§‡à¦‡"
+ },
+ "VU": {
+ "name": "ভানà§à¦¯à¦¼à¦¾à¦Ÿà§"
+ },
+ "IN": {
+ "name": "ভারত"
+ },
+ "VN": {
+ "name": "ভিয়েতনাম"
+ },
+ "BT": {
+ "name": "ভà§à¦Ÿà¦¾à¦¨"
+ },
+ "VE": {
+ "name": "ভেনেজà§à¦¯à¦¼à§‡à¦²à¦¾"
+ },
+ "VA": {
+ "name": "ভà§à¦¯à¦¾à¦Ÿà¦¿à¦•à¦¾à¦¨ সিটি"
+ },
+ "MN": {
+ "name": "মঙà§à¦—োলিয়া"
+ },
+ "CF": {
+ "name": "মধà§à¦¯ আফà§à¦°à¦¿à¦•à¦¾à¦° পà§à¦°à¦œà¦¾à¦¤à¦¨à§à¦¤à§à¦°"
+ },
+ "MS": {
+ "name": "মনà§à¦Ÿà¦¸à§‡à¦°à¦¾à¦Ÿ"
+ },
+ "ME": {
+ "name": "মনà§à¦Ÿà¦¿à¦¨à¦¿à¦—à§à¦°à§‹"
+ },
+ "MR": {
+ "name": "মরিতানিয়া"
+ },
+ "MU": {
+ "name": "মরিশাস"
+ },
+ "FM": {
+ "name": "মাইকà§à¦°à§‹à¦¨à§‡à¦¶à¦¿à¦¯à¦¼à¦¾"
+ },
+ "MG": {
+ "name": "মাদাগাসà§à¦•à¦¾à¦°"
+ },
+ "MM": {
+ "name": "মায়ানমার (বারà§à¦®à¦¾)"
+ },
+ "YT": {
+ "name": "মায়োতà§à¦¤à§‡"
+ },
+ "VI": {
+ "name": "মারà§à¦•à¦¿à¦¨ ভারà§à¦œà¦¿à¦¨ দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "US": {
+ "name": "মারà§à¦•à¦¿à¦¨ যà§à¦•à§à¦¤à¦°à¦¾à¦·à§à¦Ÿà§à¦°"
+ },
+ "MQ": {
+ "name": "মারà§à¦Ÿà¦¿à¦¨à¦¿à¦•"
+ },
+ "MH": {
+ "name": "মারà§à¦¶à¦¾à¦² দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "MV": {
+ "name": "মালদà§à¦¬à§€à¦ª"
+ },
+ "MY": {
+ "name": "মালয়েশিয়া"
+ },
+ "MW": {
+ "name": "মালাউই"
+ },
+ "ML": {
+ "name": "মালি"
+ },
+ "MT": {
+ "name": "মালà§à¦Ÿà¦¾"
+ },
+ "EG": {
+ "name": "মিশর"
+ },
+ "MX": {
+ "name": "মেকà§à¦¸à¦¿à¦•à§‹"
+ },
+ "MZ": {
+ "name": "মোজামà§à¦¬à¦¿à¦•"
+ },
+ "MC": {
+ "name": "মোনাকো"
+ },
+ "MA": {
+ "name": "মোরকà§à¦•à§‹"
+ },
+ "MD": {
+ "name": "মোলà§à¦¦à¦¾à¦­à¦¿à¦¯à¦¼à¦¾"
+ },
+ "MO": {
+ "name": "মà§à¦¯à¦¾à¦•à¦¾à¦“ à¦à¦¸ ঠআর চায়না"
+ },
+ "MK": {
+ "name": "মà§à¦¯à¦¾à¦¸à¦¾à¦¡à§‹à¦¨à¦¿à¦¯à¦¼à¦¾"
+ },
+ "GB": {
+ "name": "যà§à¦•à§à¦¤à¦°à¦¾à¦œà§à¦¯"
+ },
+ "UM": {
+ "name": "যà§à¦•à§à¦¤à¦°à¦¾à¦·à§à¦Ÿà§à¦°à§‡à¦° পারà§à¦¶à§à¦¬à¦¬à¦°à§à¦¤à§€ দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "RU": {
+ "name": "রাশিয়া"
+ },
+ "RE": {
+ "name": "রিইউনিয়ন"
+ },
+ "RO": {
+ "name": "রà§à¦®à¦¾à¦¨à¦¿à¦¯à¦¼à¦¾"
+ },
+ "RW": {
+ "name": "রà§à¦¯à¦¼à¦¾à¦¨à§à¦¡à¦¾"
+ },
+ "LR": {
+ "name": "লাইবেরিয়া"
+ },
+ "LA": {
+ "name": "লাওস"
+ },
+ "LU": {
+ "name": "লাকà§à¦¸à§‡à¦®à¦¬à¦¾à¦°à§à¦—"
+ },
+ "LV": {
+ "name": "লাতà§à¦­à¦¿à¦¯à¦¼à¦¾"
+ },
+ "LI": {
+ "name": "লিচেনসà§à¦Ÿà§‡à¦‡à¦¨"
+ },
+ "LT": {
+ "name": "লিথà§à¦¯à¦¼à¦¾à¦¨à¦¿à¦¯à¦¼à¦¾"
+ },
+ "LY": {
+ "name": "লিবিয়া"
+ },
+ "LB": {
+ "name": "লেবানন"
+ },
+ "LS": {
+ "name": "লেসোথো"
+ },
+ "LK": {
+ "name": "শà§à¦°à§€à¦²à¦™à§à¦•à¦¾"
+ },
+ "SK": {
+ "name": "শà§à¦²à§‹à¦­à¦¾à¦•à¦¿à¦¯à¦¼à¦¾"
+ },
+ "AE": {
+ "name": "সংযà§à¦•à§à¦¤ আরব আমিরাত"
+ },
+ "SB": {
+ "name": "সলোমন দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ"
+ },
+ "CY": {
+ "name": "সাইপà§à¦°à¦¾à¦¸"
+ },
+ "ST": {
+ "name": "সাওটোমা ও পà§à¦°à¦¿à¦¨à§à¦¸à¦¿à¦ªà¦¿"
+ },
+ "SM": {
+ "name": "সান মারিনো"
+ },
+ "WS": {
+ "name": "সামোয়া"
+ },
+ "RS": {
+ "name": "সারà§à¦¬à¦¿à¦¯à¦¼à¦¾"
+ },
+ "SG": {
+ "name": "সিঙà§à¦—াপà§à¦°"
+ },
+ "SX": {
+ "name": "সিনà§à¦Ÿ মারà§à¦Ÿà§‡à¦¨"
+ },
+ "SL": {
+ "name": "সিয়েরালিওন"
+ },
+ "SY": {
+ "name": "সিরিয়া"
+ },
+ "SC": {
+ "name": "সিসিলি"
+ },
+ "CH": {
+ "name": "সà§à¦‡à¦œà¦¾à¦°à¦²à§à¦¯à¦¾à¦¨à§à¦¡"
+ },
+ "SE": {
+ "name": "সà§à¦‡à¦¡à§‡à¦¨"
+ },
+ "SD": {
+ "name": "সà§à¦¦à¦¾à¦¨"
+ },
+ "SR": {
+ "name": "সà§à¦°à¦¿à¦¨à¦¾à¦®"
+ },
+ "SN": {
+ "name": "সেনেগাল"
+ },
+ "KN": {
+ "name": "সেনà§à¦Ÿ কিটস ও নেভিস"
+ },
+ "PM": {
+ "name": "সেনà§à¦Ÿ পিয়ের ও মিকà§à¦¯à¦¼à§‡à¦²à¦¨"
+ },
+ "BL": {
+ "name": "সেনà§à¦Ÿ বারথেলিমি"
+ },
+ "VC": {
+ "name": "সেনà§à¦Ÿ ভিনসেনà§à¦Ÿ ও দà§à¦¯à¦¾ গà§à¦°à§‡à¦¨à¦¾à¦¡à¦¿à¦¨à¦¸"
+ },
+ "MF": {
+ "name": "সেনà§à¦Ÿ মারà§à¦Ÿà¦¿à¦¨"
+ },
+ "LC": {
+ "name": "সেনà§à¦Ÿ লà§à¦¸à¦¿à¦¯à¦¼à¦¾"
+ },
+ "SH": {
+ "name": "সেনà§à¦Ÿ হেলেনা"
+ },
+ "SO": {
+ "name": "সোমালিয়া"
+ },
+ "SZ": {
+ "name": "সোয়াজিলà§à¦¯à¦¾à¦¨à§à¦¡"
+ },
+ "SA": {
+ "name": "সৌদি আরব"
+ },
+ "ES": {
+ "name": "সà§à¦ªà§‡à¦¨"
+ },
+ "SJ": {
+ "name": "সà§à¦¬à¦¾à¦²à¦¬à¦¾à¦°à§à¦¡ ও জান মেয়েন"
+ },
+ "SI": {
+ "name": "সà§à¦²à§‹à¦­à¦¾à¦¨à¦¿à¦¯à¦¼à¦¾"
+ },
+ "HK": {
+ "name": "হংকং à¦à¦¸à¦à¦†à¦° চীনা"
+ },
+ "HN": {
+ "name": "হণà§à¦¡à§à¦°à¦¾à¦¸"
+ },
+ "HT": {
+ "name": "হাইতি"
+ },
+ "HU": {
+ "name": "হাঙà§à¦—েরি"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/bo.json b/library/intl/resources/country/bo.json
new file mode 100644
index 000000000..99d61cd20
--- /dev/null
+++ b/library/intl/resources/country/bo.json
@@ -0,0 +1,761 @@
+{
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "PM": {
+ "name": "St. Pierre & Miquelon"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad & Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks & Caicos Islands"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "WF": {
+ "name": "Wallis & Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "QA": {
+ "name": "ཀ་à½à½±à½¢à¼"
+ },
+ "CM": {
+ "name": "ཀ་མེ་རུནà¼"
+ },
+ "KH": {
+ "name": "ཀམ་བོ་ཌི་ཡà¼"
+ },
+ "KI": {
+ "name": "ཀི་རི་བཱ་à½à½²à¼"
+ },
+ "KW": {
+ "name": "ཀུ་à½à½ºà½‘་རྒྱལ་à½à½–à¼"
+ },
+ "HR": {
+ "name": "ཀུརོ་ཤི་ཡà¼"
+ },
+ "CK": {
+ "name": "ཀཱུག གླིང་ཕྲེན་རྒྱལ་à½à½–à¼"
+ },
+ "CI": {
+ "name": "ཀོ་ཊེ་ཌི༠ཨི་à½à½¼à¼‹à½¢à½ºà¼"
+ },
+ "KR": {
+ "name": "ཀོ་རི་ཡ༠ལྷོ་མà¼"
+ },
+ "CO": {
+ "name": "ཀོ་ལོམ་བི་ཡà¼"
+ },
+ "CR": {
+ "name": "ཀོ་ས྄ཊ་རི་ཀà¼"
+ },
+ "KZ": {
+ "name": "à½à¼‹à½›à½±à½‚་སྟཱནà¼"
+ },
+ "CU": {
+ "name": "à½à¾±à½´à½ à½´à¼‹à½–à¼"
+ },
+ "KG": {
+ "name": "à½à½²à½¢à¼‹à½‚ིཛ་སྟཱནà¼"
+ },
+ "CA": {
+ "name": "à½à½ºà¼‹à½“་ཌà¼"
+ },
+ "KY": {
+ "name": "à½à½ºà¼‹à½˜à½ºà½“་གླིང་ཕྲནà¼"
+ },
+ "KE": {
+ "name": "à½à½ºà½“་ཉི་ཡà¼"
+ },
+ "GH": {
+ "name": "གྷ་ནà¼"
+ },
+ "GD": {
+ "name": "གྷ་རི་ན་ཌà¼"
+ },
+ "GM": {
+ "name": "གྷམ་བི་ཡà¼"
+ },
+ "GW": {
+ "name": "གྷི་ནི་ཡ་བིས྄་སོà¼"
+ },
+ "GN": {
+ "name": "གྷི་ནི་ཡà¼"
+ },
+ "GR": {
+ "name": "གྷི་རཱི་སིà¼"
+ },
+ "GY": {
+ "name": "གྷུ་ཡཱ་ནà¼"
+ },
+ "GT": {
+ "name": "གྷོ་ཊེ་མ་ལà¼"
+ },
+ "GA": {
+ "name": "གེ་བཽནà¼"
+ },
+ "CL": {
+ "name": "ཅི་ལིà¼"
+ },
+ "CZ": {
+ "name": "ཅཻག་སྤྱི་མà½à½´à½“་རྒྱལ་à½à½–à¼"
+ },
+ "TD": {
+ "name": "ཅཻཌà¼"
+ },
+ "GI": {
+ "name": "ཇིབ་རཱལ་ཊརà¼"
+ },
+ "GE": {
+ "name": "ཇོར་ཇི་ཡà¼"
+ },
+ "JO": {
+ "name": "ཇོར་ཌནà¼"
+ },
+ "DK": {
+ "name": "ཌེན་མཱརà¾à¼"
+ },
+ "DM": {
+ "name": "ཌོ་མིན་ནི་ཀà¼"
+ },
+ "DO": {
+ "name": "ཌོ་མིནནི་ཀན་སྤྱི་མà½à½´à½“་རྒྱལ་à½à½–à¼"
+ },
+ "TR": {
+ "name": "à½à½´à½¢à½€à½²à¼"
+ },
+ "TV": {
+ "name": "à½à½´à¼‹à½à¼‹à½£à½´à¼"
+ },
+ "GB": {
+ "name": "དབྱིན་ཇི་"
+ },
+ "NA": {
+ "name": "ན་མི་བི་ཡà¼"
+ },
+ "NE": {
+ "name": "ནའི་ཇརà¼"
+ },
+ "NG": {
+ "name": "ནཱའི་ཇི་རི་ཡà¼"
+ },
+ "NI": {
+ "name": "ནི་ཀ་ར་གུ་ཨà¼"
+ },
+ "NZ": {
+ "name": "ནིའུ་ཛི་ལན྄ཌà¼"
+ },
+ "NU": {
+ "name": "ནིའུ་à½à¼"
+ },
+ "WS": {
+ "name": "ནུ་བ་ས་མོ་འà¼"
+ },
+ "NO": {
+ "name": "ནོར་à½à½ºà¼"
+ },
+ "NR": {
+ "name": "ནཽ་རུà¼"
+ },
+ "PA": {
+ "name": "པ་ནཱ་མà¼"
+ },
+ "PG": {
+ "name": "པ་པུ་ཨ༠ནིའུ༠གྷི་ནིà¼"
+ },
+ "PW": {
+ "name": "པ་ལཽà¼"
+ },
+ "PK": {
+ "name": "པཀི་སྟཱནà¼"
+ },
+ "PY": {
+ "name": "པཱ་ར་གེà¼"
+ },
+ "PE": {
+ "name": "པེ་རུà¼"
+ },
+ "PL": {
+ "name": "པོ་ལནྜà¼"
+ },
+ "PT": {
+ "name": "པོར་à½à½´à¼‹à½‚ྷལà¼"
+ },
+ "FR": {
+ "name": "ཕ་རཱན་སིà¼"
+ },
+ "FK": {
+ "name": "ཕལà¾à¼‹à½£à½“ྜ་གླིང་ཕྲནà¼"
+ },
+ "FJ": {
+ "name": "ཕི་ཇིà¼"
+ },
+ "PH": {
+ "name": "ཕི་ལི་པིནས྄à¼"
+ },
+ "FI": {
+ "name": "ཕིན་ལན྄ཌà¼"
+ },
+ "BR": {
+ "name": "བ་རཱ་ཛིལà¼"
+ },
+ "BD": {
+ "name": "བངྒ་ལ་དེཤà¼"
+ },
+ "BM": {
+ "name": "བར་མུ་ཌà¼"
+ },
+ "NP": {
+ "name": "བར་ཡུལ་"
+ },
+ "BF": {
+ "name": "བརཀི་ན༠ཕསོà¼"
+ },
+ "BS": {
+ "name": "བྷཱ་མས྄à¼"
+ },
+ "BH": {
+ "name": "བྷཱ་རེནà¼"
+ },
+ "BB": {
+ "name": "བཱརྦ་ཌོས྄à¼"
+ },
+ "BJ": {
+ "name": "བཱེ་ནིནà¼"
+ },
+ "VN": {
+ "name": "བི་དི་ནམà¼"
+ },
+ "BN": {
+ "name": "བུ་རུ་ནེà¼"
+ },
+ "BI": {
+ "name": "བུ་རུན་ཌིà¼"
+ },
+ "BG": {
+ "name": "བུལ་ག་རི་ཡà¼"
+ },
+ "BZ": {
+ "name": "བེ་ལིཛà¼"
+ },
+ "BY": {
+ "name": "བེ་ལུ་རུ་སུà¼"
+ },
+ "BE": {
+ "name": "བེལ་ཇི་ཡམà¼"
+ },
+ "BO": {
+ "name": "བོ་ལི་à½à½²à½¡à¼"
+ },
+ "BW": {
+ "name": "བོཙ་à½à¼‹à½“à¼"
+ },
+ "BA": {
+ "name": "བོསྣི་ཡ་དང་ཧརྫོ་གོ་à½à½²à¼‹à½“à¼"
+ },
+ "MG": {
+ "name": "མ་དཱ་གྷསà¾à½±à½¢à¼"
+ },
+ "ML": {
+ "name": "མ་ལིà¼"
+ },
+ "MY": {
+ "name": "མ་ལེ་ཤི་ཡà¼"
+ },
+ "MT": {
+ "name": "མལ་ཊà¼"
+ },
+ "MV": {
+ "name": "མལ་དྭིབà¼"
+ },
+ "MW": {
+ "name": "མཱ་ལཱ་à½à½²à¼"
+ },
+ "MH": {
+ "name": "མཱར་ཤལ་གླིང་ཕྲེནà¼"
+ },
+ "MX": {
+ "name": "མེཀ་སི་ཀོà¼"
+ },
+ "MC": {
+ "name": "མོ་ན་ཀོà¼"
+ },
+ "MZ": {
+ "name": "མོ་ཛམ་བིགà¼"
+ },
+ "MA": {
+ "name": "མོ་རོ་ཀà¾à½¼à¼"
+ },
+ "MR": {
+ "name": "མཽ་རི་à½à¼‹à½“ི་ཡà¼"
+ },
+ "MU": {
+ "name": "མཽ་རིཤས྄à¼"
+ },
+ "JM": {
+ "name": "ཛ་མེ་ཀà¼"
+ },
+ "ZM": {
+ "name": "ཛམ་བི་ཡà¼"
+ },
+ "DJ": {
+ "name": "ཛི་བུ་à½à½²à¼"
+ },
+ "ZW": {
+ "name": "ཛིམ་བྷཱ་བེà¼"
+ },
+ "VU": {
+ "name": "à½à¼‹à½“ུ་ཨ་à½à½´à¼"
+ },
+ "VA": {
+ "name": "à½à½ºà¼‹à½Šà½²à¼‹à½€à½“à¼"
+ },
+ "VE": {
+ "name": "à½à½ºà¼‹à½“ི་ཛུའེ་ལà¼"
+ },
+ "DE": {
+ "name": "འཇར་མན་"
+ },
+ "MM": {
+ "name": "འབར་མà¼"
+ },
+ "BT": {
+ "name": "འབྲུག་ཡུལà¼"
+ },
+ "UA": {
+ "name": "ཡུ་ཀྲནà¼"
+ },
+ "UG": {
+ "name": "ཡུ་གན་ཌà¼"
+ },
+ "YE": {
+ "name": "ཡེ་མེནà¼"
+ },
+ "IN": {
+ "name": "རྒྱ་གར་"
+ },
+ "CN": {
+ "name": "རྒྱ་ནག"
+ },
+ "JP": {
+ "name": "རི་པིན་"
+ },
+ "RW": {
+ "name": "རུ་à½à½“་ཌà¼"
+ },
+ "RO": {
+ "name": "རོ་མཱ་ནིཡà¼"
+ },
+ "LU": {
+ "name": "ལཀ་ཛམ་བོརྒà¼"
+ },
+ "LV": {
+ "name": "ལà½à¼‹à½–ི་ཡà¼"
+ },
+ "ZA": {
+ "name": "ལྷོ་ ཨཕྲི་ཀà¼"
+ },
+ "AQ": {
+ "name": "ལྷོ་རྩེའི་མà½à½ à¼‹à½‚ླིང་à¼"
+ },
+ "LA": {
+ "name": "ལཱ་འོསà¼"
+ },
+ "LT": {
+ "name": "ལི་à½à½´à¼‹à½¨à½ºà¼‹à½“ི་ཡà¼"
+ },
+ "LY": {
+ "name": "ལི་བི་ཡà¼"
+ },
+ "LR": {
+ "name": "ལི་བེ་རི་ཡà¼"
+ },
+ "LS": {
+ "name": "ལེ་སོ་à½à½¼à¼"
+ },
+ "LI": {
+ "name": "ལེག་à½à½ºà½“་ཚིནà¼"
+ },
+ "LB": {
+ "name": "ལེབ་ནོནà¼"
+ },
+ "LK": {
+ "name": "ཤྲཱི་ལངà¾à¼‹à¼"
+ },
+ "ST": {
+ "name": "ས་འོ་à½à½¼à½‘་མད༠དང༌༠པ྄རིན་སི་པེà¼"
+ },
+ "SK": {
+ "name": "ས་ལཽ་à½à½€à¾±à¼"
+ },
+ "SI": {
+ "name": "ས་ལཽ་à½à½ºà¼‹à½“ི་ཡà¼"
+ },
+ "SM": {
+ "name": "སན་མེ་རི་ནོà¼"
+ },
+ "SC": {
+ "name": "སཱ་ཤཻལà¼"
+ },
+ "CY": {
+ "name": "སཱཡེ་པ་རས྄à¼"
+ },
+ "ES": {
+ "name": "སི་པནà¼"
+ },
+ "SG": {
+ "name": "སིངྒ་པུརà¼"
+ },
+ "SD": {
+ "name": "སུ་དཱནà¼"
+ },
+ "SR": {
+ "name": "སུ་རི་ནཱམà¼"
+ },
+ "SN": {
+ "name": "སེ་ནི་གྷལà¼"
+ },
+ "SL": {
+ "name": "སེ་ཡར་ར༠ལིའོནà¼"
+ },
+ "KN": {
+ "name": "སེནྚ༠ཀིཊྚས྄༠དང༌༠ནེ་བིས྄à¼"
+ },
+ "VC": {
+ "name": "སེནྚ༠à½à½²à½“་སན༠དང༌༠གྷིརིན་ཌིནà¼"
+ },
+ "LC": {
+ "name": "སེནྚ༠ལུ་ཤི་ཡà¼"
+ },
+ "SH": {
+ "name": "སེནྚ༠ཧེ་ལི་ནà¼"
+ },
+ "RS": {
+ "name": "སེར་བི་ཡà¼"
+ },
+ "SO": {
+ "name": "སོ་མཱལི་ཡà¼"
+ },
+ "SB": {
+ "name": "སོ་ལོ་མོན༠གླིང་ཕྲན་ཚོ་à½à½‚à¼"
+ },
+ "MN": {
+ "name": "སོག་ཡུལà¼"
+ },
+ "SA": {
+ "name": "སཽ་དྷི་ཨ་རཱ་བི་ཡà¼"
+ },
+ "HU": {
+ "name": "ཧངྒ་རིà¼"
+ },
+ "NL": {
+ "name": "ཧའོ་ལནà¼"
+ },
+ "CH": {
+ "name": "ཧྲུད་ཧྲིà¼"
+ },
+ "SE": {
+ "name": "ཧྲུའི་à½à½“à¼"
+ },
+ "HT": {
+ "name": "ཧེ་à½à½²à¼"
+ },
+ "HN": {
+ "name": "ཧོན་དུ་རས྄à¼"
+ },
+ "US": {
+ "name": "ཨ་མེ་རི་ཀà¼"
+ },
+ "IE": {
+ "name": "ཨ་ཡར་ལནཌà¼"
+ },
+ "AE": {
+ "name": "ཨ་རབ༠ཨི་མི་རཊ྄༠ཆིག་སྒྲིལ་རྒྱལ་à½à½–à¼"
+ },
+ "AW": {
+ "name": "ཨ་རུ་བà¼"
+ },
+ "IS": {
+ "name": "ཨ་ཨི་སི་ལནདà¼"
+ },
+ "AI": {
+ "name": "ཨང་གུའི་ལà¼"
+ },
+ "AO": {
+ "name": "ཨང་གཽ་ལà¼"
+ },
+ "AF": {
+ "name": "ཨཕ་ག་ནི་སྟཱནà¼"
+ },
+ "AZ": {
+ "name": "ཨཛར་བཡེ་ཇནà¼"
+ },
+ "AR": {
+ "name": "ཨར་ཇེན་ཊི་ནà¼"
+ },
+ "AM": {
+ "name": "ཨར་མེ་ནི་ཡà¼"
+ },
+ "DZ": {
+ "name": "ཨལ་ཇི་རི་ཡà¼"
+ },
+ "AL": {
+ "name": "ཨལ་བཱ་ནི་ཡà¼"
+ },
+ "AT": {
+ "name": "ཨསྟྲི་ཡà¼"
+ },
+ "AU": {
+ "name": "ཨསྟྲེ་ལི་ཡà¼"
+ },
+ "IT": {
+ "name": "ཨི་ཀྲར་ལི་"
+ },
+ "EC": {
+ "name": "ཨི་à½à¾­à¼‹à½Œà½¼à½¢à¼"
+ },
+ "EG": {
+ "name": "ཨི་ཇིབྚà¼"
+ },
+ "ET": {
+ "name": "ཨི་à½à½²à½ à½¼à¼‹à½”ི་ཡà¼"
+ },
+ "IL": {
+ "name": "ཨི་ཛ྄་རེལà¼"
+ },
+ "IQ": {
+ "name": "ཨི་རགà¼"
+ },
+ "IR": {
+ "name": "ཨི་རཱནà¼"
+ },
+ "ID": {
+ "name": "ཨིན་ཌོ་ནེ་ཤི་ཡà¼"
+ },
+ "EE": {
+ "name": "ཨིསྟོ་ནི་ཡà¼"
+ },
+ "UY": {
+ "name": "ཨུ་རུ་གྷེà¼"
+ },
+ "RU": {
+ "name": "ཨུ་རུ་སུ་"
+ },
+ "UZ": {
+ "name": "ཨུཛ་བེ་ཀིསྟཱནà¼"
+ },
+ "ER": {
+ "name": "ཨེ་རི་à½à¾²à½ºà¼‹à½¨à¼"
+ },
+ "AG": {
+ "name": "ཨེན་ཊི་གུ་དང་༠བྷར་བུ་ཌà¼"
+ },
+ "AD": {
+ "name": "ཨེན་ཌོ་རà¼"
+ },
+ "SV": {
+ "name": "ཨེལ༠སཱལ་à½à¼‹à½Œà½¼à½¢à¼"
+ },
+ "OM": {
+ "name": "ཨོ་མནà¼"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/br.json b/library/intl/resources/country/br.json
new file mode 100644
index 000000000..7bdcdbde5
--- /dev/null
+++ b/library/intl/resources/country/br.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "DE": {
+ "name": "Alamagn"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljeria"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktika"
+ },
+ "AG": {
+ "name": "Antigua ha Barbuda"
+ },
+ "CI": {
+ "name": "Aod an Olifant"
+ },
+ "AU": {
+ "name": "Aostralia"
+ },
+ "AT": {
+ "name": "Aostria"
+ },
+ "SA": {
+ "name": "Arabia Saoudat"
+ },
+ "AR": {
+ "name": "Arcʼhantina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AZ": {
+ "name": "Azerbaidjan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrein"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgia"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhoutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia ha Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "EA": {
+ "name": "Ceuta ha Melilla"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "TF": {
+ "name": "Douaroù aostral Frañs"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipt"
+ },
+ "AE": {
+ "name": "Emirelezhioù Arab Unanet"
+ },
+ "AC": {
+ "name": "Enez Ascension"
+ },
+ "CX": {
+ "name": "Enez Christmas"
+ },
+ "NF": {
+ "name": "Enez Norfolk"
+ },
+ "PN": {
+ "name": "Enez Pitcairn"
+ },
+ "IM": {
+ "name": "Enez Vanav"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopia"
+ },
+ "FJ": {
+ "name": "Fidji"
+ },
+ "PH": {
+ "name": "Filipinez"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "Frañs"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GN": {
+ "name": "Ginea"
+ },
+ "GQ": {
+ "name": "Ginea ar Cʼheheder"
+ },
+ "GW": {
+ "name": "Ginea-Bissau"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GR": {
+ "name": "Gres"
+ },
+ "GL": {
+ "name": "Greunland"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GP": {
+ "name": "Gwadeloup"
+ },
+ "GG": {
+ "name": "Gwernenez"
+ },
+ "GF": {
+ "name": "Gwiana cʼhall"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong RMD Sina"
+ },
+ "HU": {
+ "name": "Hungaria"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonezia"
+ },
+ "AX": {
+ "name": "Inizi Ã…land"
+ },
+ "KY": {
+ "name": "Inizi Cayman"
+ },
+ "CK": {
+ "name": "Inizi Cook"
+ },
+ "UM": {
+ "name": "Inizi diabell ar Stadoù-Unanet"
+ },
+ "FO": {
+ "name": "Inizi Faero"
+ },
+ "FK": {
+ "name": "Inizi Falkland"
+ },
+ "GS": {
+ "name": "Inizi Georgia ar Su hag Inizi Sandwich ar Su"
+ },
+ "VI": {
+ "name": "Inizi Gwercʼh ar Stadoù-Unanet"
+ },
+ "VG": {
+ "name": "Inizi Gwercʼh Breizh-Veur"
+ },
+ "IC": {
+ "name": "Inizi Kanariez"
+ },
+ "CC": {
+ "name": "Inizi Kokoz"
+ },
+ "MP": {
+ "name": "Inizi Mariana an Norzh"
+ },
+ "MH": {
+ "name": "Inizi Marshall"
+ },
+ "TC": {
+ "name": "Inizi Turks ha Caicos"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IS": {
+ "name": "Island"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "IE": {
+ "name": "Iwerzhon"
+ },
+ "NL": {
+ "name": "Izelvroioù"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jerzenez"
+ },
+ "GI": {
+ "name": "Jibraltar"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "GE": {
+ "name": "Jorjia"
+ },
+ "CV": {
+ "name": "Kab Glas"
+ },
+ "NC": {
+ "name": "Kaledonia Nevez"
+ },
+ "KH": {
+ "name": "Kambodja"
+ },
+ "CM": {
+ "name": "Kameroun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "KZ": {
+ "name": "Kazakstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CY": {
+ "name": "Kiprenez"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komorez"
+ },
+ "CG": {
+ "name": "Kongo - Brazzaville"
+ },
+ "CD": {
+ "name": "Kongo - Kinshasa"
+ },
+ "KP": {
+ "name": "Korea an Norzh"
+ },
+ "KR": {
+ "name": "Korea ar Su"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Koweit"
+ },
+ "HR": {
+ "name": "Kroatia"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LB": {
+ "name": "Liban"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luksembourg"
+ },
+ "MO": {
+ "name": "Macau RMD Sina"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MK": {
+ "name": "Makedonia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldivez"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MR": {
+ "name": "Maouritania"
+ },
+ "MA": {
+ "name": "Maroko"
+ },
+ "MQ": {
+ "name": "Martinik"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mecʼhiko"
+ },
+ "FM": {
+ "name": "Mikronezia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MU": {
+ "name": "Moris"
+ },
+ "MZ": {
+ "name": "Mozambik"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "BQ": {
+ "name": "Nederlandat Karib"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norvegia"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "UG": {
+ "name": "Ouganda"
+ },
+ "UZ": {
+ "name": "Ouzbekistan"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papoua Ginea-Nevez"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perou"
+ },
+ "PF": {
+ "name": "Polinezia Cʼhall"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "DO": {
+ "name": "Republik Dominikan"
+ },
+ "CF": {
+ "name": "Republik Kreizafrikan"
+ },
+ "CZ": {
+ "name": "Republik Tchek"
+ },
+ "RE": {
+ "name": "Reünion"
+ },
+ "GB": {
+ "name": "Rouantelezh-Unanet"
+ },
+ "RO": {
+ "name": "Roumania"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "EH": {
+ "name": "Sahara ar Cʼhornôg"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "KN": {
+ "name": "Saint Kitts ha Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "SH": {
+ "name": "Saint-Helena"
+ },
+ "SB": {
+ "name": "Salomon"
+ },
+ "SV": {
+ "name": "Salvador"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Amerikan"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "VC": {
+ "name": "Sant Visant hag ar Grenadinez"
+ },
+ "PM": {
+ "name": "Sant-Pêr-ha-Mikelon"
+ },
+ "ST": {
+ "name": "São Tomé ha Príncipe"
+ },
+ "SC": {
+ "name": "Sechelez"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "CN": {
+ "name": "Sina"
+ },
+ "SG": {
+ "name": "Singapour"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "SD": {
+ "name": "Soudan"
+ },
+ "ES": {
+ "name": "Spagn"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "US": {
+ "name": "Stadoù-Unanet"
+ },
+ "ZA": {
+ "name": "Suafrika"
+ },
+ "CH": {
+ "name": "Suis"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SS": {
+ "name": "Susoudan"
+ },
+ "SJ": {
+ "name": "Svalbard"
+ },
+ "SE": {
+ "name": "Sveden"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "TJ": {
+ "name": "Tadjikistan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TD": {
+ "name": "Tchad"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "IO": {
+ "name": "Tiriad breizhveurat Meurvor Indez"
+ },
+ "PS": {
+ "name": "Tiriadoù Palestina"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad ha Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunizia"
+ },
+ "TR": {
+ "name": "Turkia"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ukraina"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikan"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Viêt Nam"
+ },
+ "WF": {
+ "name": "Wallis ha Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "NZ": {
+ "name": "Zeland-Nevez"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/brx.json b/library/intl/resources/country/brx.json
new file mode 100644
index 000000000..772221ec7
--- /dev/null
+++ b/library/intl/resources/country/brx.json
@@ -0,0 +1,761 @@
+{
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "AO": {
+ "name": "अंगोला"
+ },
+ "AZ": {
+ "name": "अज़रबैजान"
+ },
+ "AQ": {
+ "name": "अंटारà¥à¤•à¤Ÿà¤¿à¤•à¤¾"
+ },
+ "AF": {
+ "name": "अफ़ग़ानिसà¥à¤¤à¤¾à¤¨"
+ },
+ "AS": {
+ "name": "अमरिकी समोआ"
+ },
+ "AW": {
+ "name": "अरूबा"
+ },
+ "AR": {
+ "name": "अरà¥à¤œà¥‡à¤£à¥à¤Ÿà¤¿à¤¨à¤¾"
+ },
+ "DZ": {
+ "name": "अलà¥à¤œà¥€à¤°à¤¿à¤¯à¤¾"
+ },
+ "AL": {
+ "name": "अलà¥à¤¬à¤¾à¤¨à¤¿à¤¯à¤¾"
+ },
+ "IS": {
+ "name": "आइसलैंड"
+ },
+ "IM": {
+ "name": "आईल ऑफ़ मैन"
+ },
+ "CI": {
+ "name": "आईवरी कोसà¥à¤Ÿ"
+ },
+ "IE": {
+ "name": "आयरलैंड"
+ },
+ "AM": {
+ "name": "आरà¥à¤®à¥‡à¤¨à¤¿à¤¯à¤¾"
+ },
+ "AX": {
+ "name": "आलाà¤à¤¡ दà¥à¤µà¥€à¤ª"
+ },
+ "GQ": {
+ "name": "इकà¥à¤µà¥‡à¤Ÿà¥‹à¤°à¤¿à¤¯à¤² गिनी"
+ },
+ "IT": {
+ "name": "इटली"
+ },
+ "ID": {
+ "name": "इंडोनेशिया"
+ },
+ "ET": {
+ "name": "इथिओपिया"
+ },
+ "IL": {
+ "name": "इसà¥à¤°à¤¾à¤‡à¤²"
+ },
+ "IQ": {
+ "name": "ईराक़"
+ },
+ "IR": {
+ "name": "ईरान"
+ },
+ "UZ": {
+ "name": "उज़बेकिसà¥à¤¤à¤¾à¤¨"
+ },
+ "KP": {
+ "name": "उतà¥à¤¤à¤° कोरिया"
+ },
+ "MP": {
+ "name": "उतà¥à¤¤à¤°à¥€ मारियाना दà¥à¤µà¥€à¤ª"
+ },
+ "AD": {
+ "name": "à¤à¤¨à¥à¤¡à¥‹à¤°à¤¾"
+ },
+ "SV": {
+ "name": "à¤à¤² सालà¥à¤µà¤¾à¤¡à¥‹à¤°"
+ },
+ "EC": {
+ "name": "à¤à¤•à¥à¤µà¤¾à¤¡à¥‹à¤°"
+ },
+ "AI": {
+ "name": "à¤à¤‚गीला"
+ },
+ "AG": {
+ "name": "à¤à¤¨à¥à¤Ÿà¤¿à¤—à¥à¤† à¤à¤µà¤‚ बारबूडा"
+ },
+ "ER": {
+ "name": "à¤à¤°à¤¿à¤Ÿà¥à¤°à¤¿à¤¯à¤¾"
+ },
+ "EE": {
+ "name": "à¤à¤¸à¥à¤Ÿà¥‹à¤¨à¤¿à¤¯à¤¾"
+ },
+ "AT": {
+ "name": "ऑसà¥à¤Ÿà¥à¤°à¤¿à¤¯à¤¾"
+ },
+ "AU": {
+ "name": "ऑसà¥à¤Ÿà¥à¤°à¥‡à¤²à¤¿à¤¯à¤¾"
+ },
+ "OM": {
+ "name": "ओमान"
+ },
+ "KZ": {
+ "name": "कज़ाखसà¥à¤¤à¤¾à¤¨"
+ },
+ "QA": {
+ "name": "क़तार"
+ },
+ "KH": {
+ "name": "कमà¥à¤¬à¥‹à¤¡à¤¿à¤¯à¤¾"
+ },
+ "KI": {
+ "name": "किरिबाती"
+ },
+ "KG": {
+ "name": "किरà¥à¤—िज़"
+ },
+ "CK": {
+ "name": "कà¥à¤• दà¥à¤µà¥€à¤ª"
+ },
+ "KW": {
+ "name": "कà¥à¤µà¥ˆà¤¤"
+ },
+ "KE": {
+ "name": "केनà¥à¤¯à¤¾"
+ },
+ "KY": {
+ "name": "केमैन दà¥à¤µà¥€à¤ª"
+ },
+ "CA": {
+ "name": "कैनाडा"
+ },
+ "CV": {
+ "name": "कैप वेरà¥à¤¦à¥‡"
+ },
+ "CD": {
+ "name": "कॉंगो किनशासा"
+ },
+ "CG": {
+ "name": "कॉंगो बà¥à¤°à¤¾à¤œà¤¼à¥à¤œà¤¼à¤¾à¤µà¥€à¤²"
+ },
+ "CC": {
+ "name": "कोकोस दà¥à¤µà¥€à¤ª"
+ },
+ "CM": {
+ "name": "कोमेरान"
+ },
+ "KM": {
+ "name": "कोमोरोज़"
+ },
+ "CO": {
+ "name": "कोलमà¥à¤¬à¤¿à¤¯à¤¾"
+ },
+ "CR": {
+ "name": "कोसà¥à¤Ÿà¤¾à¤°à¥€à¤•à¤¾"
+ },
+ "CU": {
+ "name": "कà¥à¤¯à¥‚बा"
+ },
+ "CX": {
+ "name": "कà¥à¤°à¤¿à¤¸à¥à¤®à¤¸ दà¥à¤µà¥€à¤ª"
+ },
+ "HR": {
+ "name": "कà¥à¤°à¥‹à¤à¤¶à¤¿à¤¯à¤¾"
+ },
+ "GM": {
+ "name": "गामà¥à¤¬à¤¿à¤¯à¤¾"
+ },
+ "GN": {
+ "name": "गिनी"
+ },
+ "GW": {
+ "name": "गीनी-बिसाउ"
+ },
+ "GU": {
+ "name": "गà¥à¤†à¤®"
+ },
+ "GY": {
+ "name": "गà¥à¤¯à¤¾à¤¨à¤¾"
+ },
+ "GG": {
+ "name": "गेरà¥à¤¨à¤¸à¥‡"
+ },
+ "GA": {
+ "name": "गैबॉन"
+ },
+ "GT": {
+ "name": "गोतेदाला"
+ },
+ "GL": {
+ "name": "गà¥à¤°à¥€à¤¨à¤²à¥ˆà¤£à¥à¤¡"
+ },
+ "GR": {
+ "name": "गà¥à¤°à¥€à¤¸"
+ },
+ "GD": {
+ "name": "गà¥à¤°à¥‡à¤¨à¤¡à¤¾"
+ },
+ "GP": {
+ "name": "गà¥à¤µà¤¾à¤¦à¤²à¥à¤ª"
+ },
+ "GH": {
+ "name": "घाना"
+ },
+ "TD": {
+ "name": "चाड"
+ },
+ "CL": {
+ "name": "चिली"
+ },
+ "CN": {
+ "name": "चीन"
+ },
+ "CZ": {
+ "name": "चेक गणराजà¥à¤¯"
+ },
+ "JM": {
+ "name": "जमाइका"
+ },
+ "DE": {
+ "name": "जरà¥à¤®à¤¨à¥€"
+ },
+ "JE": {
+ "name": "जरà¥à¤¸à¥€"
+ },
+ "JP": {
+ "name": "जापान"
+ },
+ "ZM": {
+ "name": "ज़ामà¥à¤¬à¤¿à¤¯à¤¾"
+ },
+ "GI": {
+ "name": "जिबà¥à¤°à¤¾à¤²à¥à¤Ÿà¤°"
+ },
+ "ZW": {
+ "name": "ज़ीमà¥à¤¬à¤¾à¤¬à¥à¤µà¥‡"
+ },
+ "GE": {
+ "name": "जॉरà¥à¤œà¤¿à¤¯à¤¾"
+ },
+ "JO": {
+ "name": "जॉरà¥à¤¡à¤¨"
+ },
+ "TO": {
+ "name": "टॉंगा"
+ },
+ "TK": {
+ "name": "टोकेलौ"
+ },
+ "TG": {
+ "name": "टोगो"
+ },
+ "TT": {
+ "name": "टà¥à¤°à¤¿à¤¨à¤¿à¤¡à¤¾à¤¡ à¤à¤µà¤‚ टोबैगो"
+ },
+ "DK": {
+ "name": "डेनमारà¥à¤•"
+ },
+ "DO": {
+ "name": "डोमिनिकन गणराजà¥à¤¯"
+ },
+ "DM": {
+ "name": "डोमिनिका"
+ },
+ "TZ": {
+ "name": "तंज़ानिया"
+ },
+ "TW": {
+ "name": "ताइवान"
+ },
+ "TJ": {
+ "name": "ताजिकिसà¥à¤¤à¤¾à¤¨"
+ },
+ "TM": {
+ "name": "तà¥à¤°à¥à¤•à¤®à¥‡à¤¨à¥€à¤¸à¥à¤¤à¤¾à¤¨"
+ },
+ "TR": {
+ "name": "तà¥à¤°à¥à¤•à¥€"
+ },
+ "TC": {
+ "name": "तà¥à¤°à¥à¤•à¥€ à¤à¤µà¤‚ कैकोज़ दà¥à¤µà¥€à¤ª"
+ },
+ "TV": {
+ "name": "तà¥à¤µà¤¾à¤²à¥"
+ },
+ "TN": {
+ "name": "तà¥à¤¯à¥à¤¨à¤¿à¤¶à¤¿à¤¯à¤¾"
+ },
+ "TH": {
+ "name": "थाइलैणà¥à¤¡"
+ },
+ "ZA": {
+ "name": "दकà¥à¤·à¤¿à¤£ अफà¥à¤°à¥€à¤•à¤¾"
+ },
+ "KR": {
+ "name": "दकà¥à¤·à¤¿à¤£ कोरिया"
+ },
+ "GS": {
+ "name": "दकà¥à¤·à¤¿à¤£ जोरà¥à¤œà¤¿à¤¯à¤¾ à¤à¤µà¤‚ दकà¥à¤·à¤¿à¤£ सैंडवीच दà¥à¤µà¥€à¤ª"
+ },
+ "DJ": {
+ "name": "दà¥à¤œà¤¿à¤¬à¥‚ती"
+ },
+ "NG": {
+ "name": "नाइजीरिया"
+ },
+ "NE": {
+ "name": "नाइजेर"
+ },
+ "NR": {
+ "name": "नाउरू"
+ },
+ "NA": {
+ "name": "नामीबिया"
+ },
+ "NI": {
+ "name": "निकारागà¥à¤†"
+ },
+ "NU": {
+ "name": "नीयूà¤"
+ },
+ "NL": {
+ "name": "नेदरलैणà¥à¤¡"
+ },
+ "NP": {
+ "name": "नेपाल"
+ },
+ "NF": {
+ "name": "नॉरफ़ॉक दà¥à¤µà¥€à¤ª"
+ },
+ "NO": {
+ "name": "नॉरà¥à¤µà¥‡"
+ },
+ "NC": {
+ "name": "नà¥à¤¯à¥‚ कैलेडोनिया"
+ },
+ "NZ": {
+ "name": "नà¥à¤¯à¥‚ज़ीलैंड"
+ },
+ "PA": {
+ "name": "पनामा"
+ },
+ "PW": {
+ "name": "पलाऊ"
+ },
+ "EH": {
+ "name": "पशà¥à¤šà¤¿à¤®à¥€ सहारा"
+ },
+ "PK": {
+ "name": "पाकिसà¥à¤¤à¤¾à¤¨"
+ },
+ "PG": {
+ "name": "पापà¥à¤† नà¥à¤¯à¥‚ गिनी"
+ },
+ "PY": {
+ "name": "पारागà¥à¤"
+ },
+ "PN": {
+ "name": "पिटकेरà¥à¤¨"
+ },
+ "PR": {
+ "name": "पà¥à¤à¤°à¥à¤Ÿà¥‹ रीको"
+ },
+ "PT": {
+ "name": "पà¥à¤°à¥à¤¤à¤—ाल"
+ },
+ "TL": {
+ "name": "पूरà¥à¤µà¥€ तिमोर"
+ },
+ "PE": {
+ "name": "पेरू"
+ },
+ "PL": {
+ "name": "पोलैणà¥à¤¡"
+ },
+ "FO": {
+ "name": "फरो दà¥à¤µà¥€à¤ª"
+ },
+ "FJ": {
+ "name": "फिजी"
+ },
+ "FI": {
+ "name": "फिनलैंड"
+ },
+ "PS": {
+ "name": "फ़िलिसà¥à¤¤à¥€à¤¨"
+ },
+ "PH": {
+ "name": "फिलीपिनà¥à¤¸"
+ },
+ "FK": {
+ "name": "फ़ॉलà¥à¤•à¤²à¥ˆà¤‚ड दà¥à¤µà¥€à¤ª"
+ },
+ "FR": {
+ "name": "फà¥à¤°à¤¾à¤à¤¸"
+ },
+ "TF": {
+ "name": "फà¥à¤°à¤¾à¤à¤¸à¥€à¤¸à¥€ उतà¥à¤¤à¤°à¥€ कà¥à¤·à¥‡à¤¤à¥à¤°à¥‹à¤‚"
+ },
+ "GF": {
+ "name": "फà¥à¤°à¤¾à¤à¤¸à¥€à¤¸à¥€ गिआना"
+ },
+ "PF": {
+ "name": "फà¥à¤°à¤¾à¤à¤¸à¥€à¤¸à¥€ पॉलिनीशिया"
+ },
+ "BD": {
+ "name": "बंगलादेश"
+ },
+ "BM": {
+ "name": "बरमूडा"
+ },
+ "BG": {
+ "name": "बलà¥à¤—ैरिया"
+ },
+ "BH": {
+ "name": "बहरैन"
+ },
+ "BS": {
+ "name": "बहामा"
+ },
+ "BB": {
+ "name": "बारबाडोस"
+ },
+ "BI": {
+ "name": "बà¥à¤°à¥à¤‚डी"
+ },
+ "BF": {
+ "name": "बà¥à¤°à¥à¤•à¤¿à¤¨à¤¾ फासो"
+ },
+ "BJ": {
+ "name": "बेनेà¤"
+ },
+ "BY": {
+ "name": "बेलारूस"
+ },
+ "BZ": {
+ "name": "बेलिज़"
+ },
+ "BE": {
+ "name": "बेलà¥à¤œà¤¿à¤¯à¤®"
+ },
+ "BW": {
+ "name": "बोतà¥à¤¸à¥à¤µà¤¾à¤¨à¤¾"
+ },
+ "BO": {
+ "name": "बोलीविया"
+ },
+ "BA": {
+ "name": "बोसनिया हरà¥à¤œà¤¼à¥‡à¤—ोविना"
+ },
+ "BR": {
+ "name": "बà¥à¤°à¤¾à¤œà¤¼à¥€à¤²"
+ },
+ "VG": {
+ "name": "बà¥à¤°à¤¿à¤Ÿà¤¿à¤¶ वरà¥à¤œà¥€à¤¨ आईलंडà¥à¤¸"
+ },
+ "IO": {
+ "name": "बà¥à¤°à¤¿à¤Ÿà¤¿à¤¶ हिंद महासागरिय कà¥à¤·à¥‡à¤¤à¥à¤°"
+ },
+ "GB": {
+ "name": "बà¥à¤°à¤¿à¤¤à¤¨"
+ },
+ "BN": {
+ "name": "बà¥à¤°à¥‚नइ"
+ },
+ "IN": {
+ "name": "भारत"
+ },
+ "BT": {
+ "name": "भूटान"
+ },
+ "MO": {
+ "name": "मकाओ विशेष पà¥à¤°à¤¶à¤¾à¤¸à¤¨à¤¿à¤• कà¥à¤·à¥‡à¤¤à¥à¤° (चीन)"
+ },
+ "MN": {
+ "name": "मंगोलिया"
+ },
+ "MG": {
+ "name": "मदागासà¥à¤•à¤°"
+ },
+ "MW": {
+ "name": "मलावी"
+ },
+ "MY": {
+ "name": "मलेशिया"
+ },
+ "FM": {
+ "name": "माइकà¥à¤°à¥‹à¤¨à¥‡à¤¶à¤¿à¤¯à¤¾"
+ },
+ "MQ": {
+ "name": "मारà¥à¤Ÿà¥€à¤¨à¤¿à¤•"
+ },
+ "MH": {
+ "name": "मारà¥à¤¶à¤² दà¥à¤µà¥€à¤ª"
+ },
+ "MV": {
+ "name": "मालदीव"
+ },
+ "ML": {
+ "name": "माली"
+ },
+ "MT": {
+ "name": "मालà¥à¤Ÿà¤¾"
+ },
+ "EG": {
+ "name": "मिसà¥à¤°"
+ },
+ "MX": {
+ "name": "मैकà¥à¤¸à¤¿à¤•à¥‹"
+ },
+ "YT": {
+ "name": "मैयौट"
+ },
+ "MK": {
+ "name": "मैसेडोनिया"
+ },
+ "MR": {
+ "name": "मॉरिटेनिया"
+ },
+ "MU": {
+ "name": "मॉरिस"
+ },
+ "MS": {
+ "name": "मॉंसेरा"
+ },
+ "MZ": {
+ "name": "मोज़ामà¥à¤¬à¤¿à¤•"
+ },
+ "ME": {
+ "name": "मोंटेनेगà¥à¤°à¥‹"
+ },
+ "MC": {
+ "name": "मोनाको"
+ },
+ "MA": {
+ "name": "मोरोकà¥à¤•à¥‹"
+ },
+ "MD": {
+ "name": "मोलà¥à¤¡à¥‡à¤µà¤¿à¤¯à¤¾"
+ },
+ "MM": {
+ "name": "मà¥à¤¯à¤¾à¤¨à¤®à¤¾à¤°"
+ },
+ "YE": {
+ "name": "यमन"
+ },
+ "VI": {
+ "name": "यà¥.à¤à¤¸. वरà¥à¤œà¥€à¤¨ आईलंडà¥à¤¸"
+ },
+ "UG": {
+ "name": "यà¥à¤—ाà¤à¤¡à¤¾"
+ },
+ "UM": {
+ "name": "यà¥à¤¨à¤¾à¤‡à¤Ÿà¥‡à¤¡ सà¥à¤Ÿà¥‡à¤Ÿà¥à¤¸ के छोटे बाहरिय दà¥à¤µà¥€à¤ª"
+ },
+ "UY": {
+ "name": "यà¥à¤°à¥‚गà¥à¤"
+ },
+ "UA": {
+ "name": "यूकà¥à¤°à¥‡à¤¨"
+ },
+ "RW": {
+ "name": "रूआणà¥à¤¡à¤¾"
+ },
+ "RU": {
+ "name": "रूस"
+ },
+ "RE": {
+ "name": "रेयूनियॉं"
+ },
+ "RO": {
+ "name": "रोमानिया"
+ },
+ "LU": {
+ "name": "लकà¥à¤¸à¤®à¤¬à¤°à¥à¤—"
+ },
+ "LS": {
+ "name": "लसोथो"
+ },
+ "LR": {
+ "name": "लाइबेरिया"
+ },
+ "LA": {
+ "name": "लाओस"
+ },
+ "LV": {
+ "name": "लाटà¥à¤µà¥€à¤¯à¤¾"
+ },
+ "LI": {
+ "name": "लिकà¥à¤Ÿà¥ˆà¤¨à¤¸à¥à¤Ÿà¤¾à¤ˆà¤¨"
+ },
+ "LT": {
+ "name": "लिथà¥à¤†à¤¨à¤¿à¤¯à¤¾"
+ },
+ "LY": {
+ "name": "लीबिया"
+ },
+ "LB": {
+ "name": "लेबनोन"
+ },
+ "VU": {
+ "name": "वानाऊटà¥"
+ },
+ "VN": {
+ "name": "वियतनाम"
+ },
+ "VE": {
+ "name": "वेनेज़à¥à¤à¤²à¤¾"
+ },
+ "VA": {
+ "name": "वैटिकन"
+ },
+ "WF": {
+ "name": "वॉलेस à¤à¤µà¤‚ फ़à¥à¤¯à¥‚चूना"
+ },
+ "LK": {
+ "name": "शà¥à¤°à¥€ लà¤à¤•à¤¾"
+ },
+ "SA": {
+ "name": "सऊदी अरब"
+ },
+ "WS": {
+ "name": "समोआ"
+ },
+ "AE": {
+ "name": "संयà¥à¤•à¥à¤¤ अरब अमीरात"
+ },
+ "US": {
+ "name": "संयà¥à¤•à¥à¤¤ राजà¥à¤¯ अमरिका"
+ },
+ "RS": {
+ "name": "सरà¥à¤¬à¤¿à¤¯à¤¾"
+ },
+ "CY": {
+ "name": "साइपà¥à¤°à¤¸"
+ },
+ "ST": {
+ "name": "साउà¤-तोमे à¤à¤µà¤‚ पà¥à¤°à¤¿à¤‚सिप"
+ },
+ "SG": {
+ "name": "सिंगापà¥à¤°"
+ },
+ "SL": {
+ "name": "सियेरा लेओन"
+ },
+ "SY": {
+ "name": "सीरिया"
+ },
+ "SR": {
+ "name": "सà¥à¤°à¤¿à¤¨à¤¾à¤®"
+ },
+ "SD": {
+ "name": "सूदान"
+ },
+ "PM": {
+ "name": "सेठपीà¤à¤° à¤à¤µà¤‚ मिâ€à¤•à¥‡à¤²à¥‰à¤‚"
+ },
+ "BL": {
+ "name": "सेठबारà¥à¤¥à¥‡à¤²à¥‡à¤®à¥€"
+ },
+ "MF": {
+ "name": "सेठमारà¥à¤Ÿà¥‡à¤"
+ },
+ "KN": {
+ "name": "सेंट किटà¥à¤¸ à¤à¤µà¤‚ नेविस"
+ },
+ "LC": {
+ "name": "सेंट लूसिया"
+ },
+ "VC": {
+ "name": "सेंट विंसंट à¤à¤µà¤‚ दी गà¥à¤°à¤¨à¤¾à¤¡à¥€à¤¨à¥à¤¸à¥"
+ },
+ "CF": {
+ "name": "सेंटà¥à¤°à¤² अफà¥à¤°à¥€à¤•à¤¨ रिपबà¥à¤²à¤¿à¤•"
+ },
+ "SH": {
+ "name": "सेणà¥â€à¤Ÿ हेलेना"
+ },
+ "SN": {
+ "name": "सेनेगाल"
+ },
+ "SC": {
+ "name": "सेशेलà¥à¤¸"
+ },
+ "SM": {
+ "name": "सैन मरीनो"
+ },
+ "SB": {
+ "name": "सॉलोमन दà¥à¤µà¥€à¤ª"
+ },
+ "SO": {
+ "name": "सोमालिया"
+ },
+ "ES": {
+ "name": "सà¥à¤ªà¥‡à¤¨"
+ },
+ "SK": {
+ "name": "सà¥à¤²à¥‹à¤µà¤¾à¤•à¤¿à¤¯à¤¾"
+ },
+ "SI": {
+ "name": "सà¥à¤²à¥‹à¤µà¥‡à¤¨à¤¿à¤¯à¤¾"
+ },
+ "SZ": {
+ "name": "सà¥à¤µà¤¾à¤œà¤¼à¥€à¤²à¥ˆà¤‚ड"
+ },
+ "SJ": {
+ "name": "सà¥à¤µà¤¾à¤²à¥à¤¬à¤¾à¤°à¥à¤¡ à¤à¤µà¤‚ यान मायेन"
+ },
+ "CH": {
+ "name": "सà¥à¤µà¤¿à¤¤à¥à¤œà¤¼à¤°à¤²à¥ˆà¤‚ड"
+ },
+ "SE": {
+ "name": "सà¥à¤µà¥€à¤¡à¤¨"
+ },
+ "HU": {
+ "name": "हंगरी"
+ },
+ "HT": {
+ "name": "हाइती"
+ },
+ "HK": {
+ "name": "हाà¤à¤—काà¤à¤— विशेष पà¥à¤°à¤¶à¤¾à¤¸à¤¨à¤¿à¤• कà¥à¤·à¥‡à¤¤à¥à¤° चीन"
+ },
+ "HN": {
+ "name": "हौणà¥à¤¡à¥‚रास"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/bs-Cyrl.json b/library/intl/resources/country/bs-Cyrl.json
new file mode 100644
index 000000000..70810fd3c
--- /dev/null
+++ b/library/intl/resources/country/bs-Cyrl.json
@@ -0,0 +1,761 @@
+{
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "AF": {
+ "name": "ÐвганиÑтан"
+ },
+ "AZ": {
+ "name": "Ðзербејџан"
+ },
+ "AX": {
+ "name": "ÐландÑка оÑтрва"
+ },
+ "AL": {
+ "name": "Ðлбанија"
+ },
+ "DZ": {
+ "name": "Ðлжир"
+ },
+ "AS": {
+ "name": "Ðмеричка Самоа"
+ },
+ "AI": {
+ "name": "Ðнгвила"
+ },
+ "AO": {
+ "name": "Ðнгола"
+ },
+ "AD": {
+ "name": "Ðндора"
+ },
+ "AQ": {
+ "name": "Ðнтарктик"
+ },
+ "AG": {
+ "name": "Ðнтигве и Барбуда"
+ },
+ "AR": {
+ "name": "Ðргентина"
+ },
+ "AM": {
+ "name": "Ðрменија"
+ },
+ "AW": {
+ "name": "Ðруба"
+ },
+ "AU": {
+ "name": "ÐуÑтралија"
+ },
+ "AT": {
+ "name": "ÐуÑтрија"
+ },
+ "BD": {
+ "name": "Бангладеш"
+ },
+ "BB": {
+ "name": "БарбадоÑ"
+ },
+ "BS": {
+ "name": "Бахами"
+ },
+ "BH": {
+ "name": "Бахреин"
+ },
+ "BE": {
+ "name": "Белгија"
+ },
+ "BZ": {
+ "name": "Белизе"
+ },
+ "BY": {
+ "name": "БелоруÑија"
+ },
+ "BJ": {
+ "name": "Бенин"
+ },
+ "BM": {
+ "name": "Бермуда"
+ },
+ "CX": {
+ "name": "Божићна оÑтрва"
+ },
+ "BO": {
+ "name": "Боливија"
+ },
+ "BA": {
+ "name": "БоÑна и Херцеговина"
+ },
+ "BW": {
+ "name": "Боцвана"
+ },
+ "BR": {
+ "name": "Бразил"
+ },
+ "VG": {
+ "name": "БританÑка ДевичанÑка ОÑтрва"
+ },
+ "IO": {
+ "name": "БританÑка територија у ИндијÑком океану"
+ },
+ "BN": {
+ "name": "Брунеј"
+ },
+ "BG": {
+ "name": "БугарÑка"
+ },
+ "BF": {
+ "name": "Буркина ФаÑо"
+ },
+ "BI": {
+ "name": "Бурунди"
+ },
+ "BT": {
+ "name": "Бутан"
+ },
+ "WF": {
+ "name": "Ð’Ð°Ð»Ð¸Ñ Ð¸ Футуна ОÑтрва"
+ },
+ "VU": {
+ "name": "Вануату"
+ },
+ "VA": {
+ "name": "Ватикан"
+ },
+ "GB": {
+ "name": "Велика Британија"
+ },
+ "VE": {
+ "name": "Венецуела"
+ },
+ "VN": {
+ "name": "Вијетнам"
+ },
+ "GA": {
+ "name": "Габон"
+ },
+ "GM": {
+ "name": "Гамбија"
+ },
+ "GH": {
+ "name": "Гана"
+ },
+ "GP": {
+ "name": "Гваделупе"
+ },
+ "GY": {
+ "name": "Гвајана"
+ },
+ "GT": {
+ "name": "Гватемала"
+ },
+ "GN": {
+ "name": "Гвинеја"
+ },
+ "GW": {
+ "name": "Гвинеја-БиÑао"
+ },
+ "GI": {
+ "name": "Гибралтар"
+ },
+ "GD": {
+ "name": "Гренада"
+ },
+ "GL": {
+ "name": "Гренланд"
+ },
+ "GE": {
+ "name": "Грузија"
+ },
+ "GR": {
+ "name": "Грчка"
+ },
+ "GU": {
+ "name": "Гуам"
+ },
+ "GG": {
+ "name": "ГурнÑи"
+ },
+ "DK": {
+ "name": "ДанÑка"
+ },
+ "DG": {
+ "name": "Дијего ГарÑија"
+ },
+ "DM": {
+ "name": "Доминика"
+ },
+ "DO": {
+ "name": "ДоминиканÑка Република"
+ },
+ "EG": {
+ "name": "Египат"
+ },
+ "EC": {
+ "name": "Еквадор"
+ },
+ "GQ": {
+ "name": "Екваторијална Гвинеја"
+ },
+ "ER": {
+ "name": "Еритреја"
+ },
+ "EE": {
+ "name": "ЕÑтонија"
+ },
+ "ET": {
+ "name": "Етиопија"
+ },
+ "ZM": {
+ "name": "Замбија"
+ },
+ "EH": {
+ "name": "Западна Сахара"
+ },
+ "ZW": {
+ "name": "Зимбабве"
+ },
+ "IL": {
+ "name": "Израел"
+ },
+ "IN": {
+ "name": "Индија"
+ },
+ "ID": {
+ "name": "Индонезија"
+ },
+ "IQ": {
+ "name": "Ирак"
+ },
+ "IR": {
+ "name": "Иран"
+ },
+ "IE": {
+ "name": "ИрÑка"
+ },
+ "IS": {
+ "name": "ИÑланд"
+ },
+ "TL": {
+ "name": "ИÑточни Тимор"
+ },
+ "IT": {
+ "name": "Италија"
+ },
+ "JM": {
+ "name": "Јамајка"
+ },
+ "JP": {
+ "name": "Јапан"
+ },
+ "YE": {
+ "name": "Јемен"
+ },
+ "JO": {
+ "name": "Јордан"
+ },
+ "KR": {
+ "name": "Јужна Кореја"
+ },
+ "GS": {
+ "name": "Јужна Ðорџија и Јужна Сендвич ОÑтрва"
+ },
+ "SS": {
+ "name": "Јужни Судан"
+ },
+ "ZA": {
+ "name": "Јужноафричка Република"
+ },
+ "KZ": {
+ "name": "КазахÑтан"
+ },
+ "KY": {
+ "name": "КајманÑка ОÑтрва"
+ },
+ "KH": {
+ "name": "Камбоџа"
+ },
+ "CM": {
+ "name": "Камерун"
+ },
+ "CA": {
+ "name": "Канада"
+ },
+ "IC": {
+ "name": "КанарÑка оÑтрва"
+ },
+ "CV": {
+ "name": "Капе Верде"
+ },
+ "QA": {
+ "name": "Катар"
+ },
+ "KE": {
+ "name": "Кенија"
+ },
+ "CN": {
+ "name": "Кина"
+ },
+ "CY": {
+ "name": "Кипар"
+ },
+ "KG": {
+ "name": "КиргизÑтан"
+ },
+ "KI": {
+ "name": "Кирибати"
+ },
+ "CC": {
+ "name": "ÐšÐ¾ÐºÐ¾Ñ (Келинг) ОÑтрва"
+ },
+ "CO": {
+ "name": "Колумбија"
+ },
+ "KM": {
+ "name": "КоморÑка ОÑтрва"
+ },
+ "CG": {
+ "name": "Конго - Бразавил"
+ },
+ "CD": {
+ "name": "Конго - КиншаÑа"
+ },
+ "CR": {
+ "name": "КоÑтарика"
+ },
+ "CU": {
+ "name": "Куба"
+ },
+ "KW": {
+ "name": "Кувајт"
+ },
+ "CK": {
+ "name": "Кукова ОÑтрва"
+ },
+ "LA": {
+ "name": "ЛаоÑ"
+ },
+ "LS": {
+ "name": "ЛеÑото"
+ },
+ "LV": {
+ "name": "Летонија"
+ },
+ "LB": {
+ "name": "Либан"
+ },
+ "LR": {
+ "name": "Либерија"
+ },
+ "LY": {
+ "name": "Либија"
+ },
+ "LT": {
+ "name": "Литванија"
+ },
+ "LI": {
+ "name": "Лихтенштајн"
+ },
+ "LU": {
+ "name": "ЛукÑембург"
+ },
+ "MG": {
+ "name": "МадагаÑкар"
+ },
+ "HU": {
+ "name": "МађарÑка"
+ },
+ "YT": {
+ "name": "Мајоте"
+ },
+ "MO": {
+ "name": "Макао С. Ð. Р. Кина"
+ },
+ "MK": {
+ "name": "Македонија"
+ },
+ "MW": {
+ "name": "Малави"
+ },
+ "MV": {
+ "name": "Малдиви"
+ },
+ "MY": {
+ "name": "Малезија"
+ },
+ "ML": {
+ "name": "Мали"
+ },
+ "MT": {
+ "name": "Малта"
+ },
+ "UM": {
+ "name": "Мања удаљена оÑтрва СÐД"
+ },
+ "MA": {
+ "name": "Мароко"
+ },
+ "MQ": {
+ "name": "Мартиник"
+ },
+ "MH": {
+ "name": "МаршалÑка ОÑтрва"
+ },
+ "MR": {
+ "name": "Мауританија"
+ },
+ "MU": {
+ "name": "МаурицијуÑ"
+ },
+ "MX": {
+ "name": "МекÑико"
+ },
+ "MM": {
+ "name": "Мијанмар (Бурма)"
+ },
+ "FM": {
+ "name": "Микронезија"
+ },
+ "MZ": {
+ "name": "Мозамбик"
+ },
+ "MD": {
+ "name": "Молдавија"
+ },
+ "MC": {
+ "name": "Монако"
+ },
+ "MN": {
+ "name": "Монголија"
+ },
+ "MS": {
+ "name": "МонÑерат"
+ },
+ "NA": {
+ "name": "Ðамибија"
+ },
+ "NR": {
+ "name": "Ðауру"
+ },
+ "DE": {
+ "name": "Ðемачка"
+ },
+ "NP": {
+ "name": "Ðепал"
+ },
+ "NE": {
+ "name": "Ðигер"
+ },
+ "NG": {
+ "name": "Ðигерија"
+ },
+ "NI": {
+ "name": "Ðикарагва"
+ },
+ "NU": {
+ "name": "Ðиуе"
+ },
+ "NC": {
+ "name": "Ðова Каледонија"
+ },
+ "NZ": {
+ "name": "Ðови Зеланд"
+ },
+ "NO": {
+ "name": "Ðорвешка"
+ },
+ "NF": {
+ "name": "Ðорфолк ОÑтрво"
+ },
+ "CI": {
+ "name": "Обала Слоноваче"
+ },
+ "OM": {
+ "name": "Оман"
+ },
+ "AC": {
+ "name": "ОÑтрво ÐÑенÑион"
+ },
+ "IM": {
+ "name": "ОÑтрво Ман"
+ },
+ "PK": {
+ "name": "ПакиÑтан"
+ },
+ "PW": {
+ "name": "Палау"
+ },
+ "PS": {
+ "name": "ПалеÑтинÑке територије"
+ },
+ "PA": {
+ "name": "Панама"
+ },
+ "PG": {
+ "name": "Папуа Ðова Гвинеја"
+ },
+ "PY": {
+ "name": "Парагвај"
+ },
+ "PE": {
+ "name": "Перу"
+ },
+ "PN": {
+ "name": "Питкерн"
+ },
+ "PL": {
+ "name": "ПољÑка"
+ },
+ "PR": {
+ "name": "Порто Рико"
+ },
+ "PT": {
+ "name": "Португалија"
+ },
+ "RE": {
+ "name": "Реинион"
+ },
+ "RW": {
+ "name": "Руанда"
+ },
+ "RO": {
+ "name": "Румунија"
+ },
+ "RU": {
+ "name": "РуÑија"
+ },
+ "VI": {
+ "name": "С.Ð.Д. ДевичанÑка ОÑтрва"
+ },
+ "SV": {
+ "name": "Салвадор"
+ },
+ "WS": {
+ "name": "Самоа"
+ },
+ "SM": {
+ "name": "Сан Марино"
+ },
+ "ST": {
+ "name": "Сао Томе и Принципе"
+ },
+ "SA": {
+ "name": "СаудијÑка Ðрабија"
+ },
+ "SZ": {
+ "name": "Свазиленд"
+ },
+ "SJ": {
+ "name": "Свалбард и Јанмајен ОÑтрва"
+ },
+ "SH": {
+ "name": "Света Јелена"
+ },
+ "BL": {
+ "name": "Свети Бартоломеј"
+ },
+ "KP": {
+ "name": "Северна Кореја"
+ },
+ "MP": {
+ "name": "Северна МаријанÑка ОÑтрва"
+ },
+ "SC": {
+ "name": "Сејшели"
+ },
+ "PM": {
+ "name": "Сен Пјер и Микелон"
+ },
+ "SN": {
+ "name": "Сенегал"
+ },
+ "VC": {
+ "name": "Сент ВинÑент и Гренадини"
+ },
+ "KN": {
+ "name": "Сент ÐšÐ¸Ñ‚Ñ Ð¸ ÐевиÑ"
+ },
+ "LC": {
+ "name": "Сент Луција"
+ },
+ "MF": {
+ "name": "Сент Мартин"
+ },
+ "EA": {
+ "name": "Сеута и Мелиља"
+ },
+ "SL": {
+ "name": "Сијера Леоне"
+ },
+ "SG": {
+ "name": "Сингапур"
+ },
+ "SY": {
+ "name": "Сирија"
+ },
+ "US": {
+ "name": "Сједињене Ðмеричке Државе"
+ },
+ "SK": {
+ "name": "Словачка"
+ },
+ "SI": {
+ "name": "Словенија"
+ },
+ "SB": {
+ "name": "СоломонÑка ОÑтрва"
+ },
+ "SO": {
+ "name": "Сомалија"
+ },
+ "RS": {
+ "name": "Србија"
+ },
+ "SD": {
+ "name": "Судан"
+ },
+ "SR": {
+ "name": "Суринам"
+ },
+ "TW": {
+ "name": "Тајван"
+ },
+ "TH": {
+ "name": "Тајланд"
+ },
+ "TZ": {
+ "name": "Танзанија"
+ },
+ "TJ": {
+ "name": "ТаџикиÑтан"
+ },
+ "TG": {
+ "name": "Того"
+ },
+ "TK": {
+ "name": "Токелау"
+ },
+ "TO": {
+ "name": "Тонга"
+ },
+ "TT": {
+ "name": "Тринидад и Тобаго"
+ },
+ "TA": {
+ "name": "ТриÑтан да Куња"
+ },
+ "TV": {
+ "name": "Тувалу"
+ },
+ "TN": {
+ "name": "ТуниÑ"
+ },
+ "TM": {
+ "name": "ТуркмениÑтан"
+ },
+ "TC": {
+ "name": "Ð¢ÑƒÑ€ÐºÑ Ð¸ ÐšÐ°Ñ˜ÐºÐ¾Ñ ÐžÑтрва"
+ },
+ "TR": {
+ "name": "ТурÑка"
+ },
+ "UG": {
+ "name": "Уганда"
+ },
+ "UZ": {
+ "name": "УзбекиÑтан"
+ },
+ "AE": {
+ "name": "Уједињени ÐрапÑки Емирати"
+ },
+ "UA": {
+ "name": "Украјина"
+ },
+ "UY": {
+ "name": "Уругвај"
+ },
+ "FO": {
+ "name": "ФарÑка ОÑтрва"
+ },
+ "PH": {
+ "name": "Филипини"
+ },
+ "FI": {
+ "name": "ФинÑка"
+ },
+ "FJ": {
+ "name": "Фиџи"
+ },
+ "FK": {
+ "name": "ФокландÑка оÑтрва"
+ },
+ "FR": {
+ "name": "ФранцуÑка"
+ },
+ "GF": {
+ "name": "ФранцуÑка Гвајана"
+ },
+ "PF": {
+ "name": "ФранцуÑка Полинезија"
+ },
+ "TF": {
+ "name": "ФранцуÑке Јужне Територије"
+ },
+ "HT": {
+ "name": "Хаити"
+ },
+ "NL": {
+ "name": "Холандија"
+ },
+ "HK": {
+ "name": "Хонг Конг С. Ð. Р. Кина"
+ },
+ "HN": {
+ "name": "ХондураÑ"
+ },
+ "HR": {
+ "name": "ХрватÑка"
+ },
+ "CF": {
+ "name": "Централно Ðфричка Република"
+ },
+ "ME": {
+ "name": "Црна Гора"
+ },
+ "TD": {
+ "name": "Чад"
+ },
+ "CZ": {
+ "name": "Чешка"
+ },
+ "CL": {
+ "name": "Чиле"
+ },
+ "JE": {
+ "name": "ÐерÑи"
+ },
+ "DJ": {
+ "name": "Ðибути"
+ },
+ "CH": {
+ "name": "ШвајцарÑка"
+ },
+ "SE": {
+ "name": "ШведÑка"
+ },
+ "ES": {
+ "name": "Шпанија"
+ },
+ "LK": {
+ "name": "Шри Ланка"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/bs.json b/library/intl/resources/country/bs.json
new file mode 100644
index 000000000..7b76f80cc
--- /dev/null
+++ b/library/intl/resources/country/bs.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistan"
+ },
+ "AX": {
+ "name": "Alandska Ostrva"
+ },
+ "AL": {
+ "name": "Albanija"
+ },
+ "DZ": {
+ "name": "Alžir"
+ },
+ "AS": {
+ "name": "AmeriÄka Samoa"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Angvila"
+ },
+ "AQ": {
+ "name": "Antarktika"
+ },
+ "AG": {
+ "name": "Antigva i Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australija"
+ },
+ "AT": {
+ "name": "Austrija"
+ },
+ "AZ": {
+ "name": "Azerbejdžan"
+ },
+ "BS": {
+ "name": "Bahami"
+ },
+ "BH": {
+ "name": "Bahrein"
+ },
+ "BD": {
+ "name": "Bangladeš"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgija"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BY": {
+ "name": "Bjelorusija"
+ },
+ "BW": {
+ "name": "Bocvana"
+ },
+ "BO": {
+ "name": "Bolivija"
+ },
+ "BA": {
+ "name": "Bosna i Hercegovina"
+ },
+ "CX": {
+ "name": "Božićna Ostrva"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "VG": {
+ "name": "Britanska DjeviÄanska Ostrva"
+ },
+ "IO": {
+ "name": "Britanska Territorija u Indijskom Okeanu"
+ },
+ "BN": {
+ "name": "Brunej"
+ },
+ "BG": {
+ "name": "Bugarska"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butan"
+ },
+ "CF": {
+ "name": "CentralnoafriÄka Republika"
+ },
+ "ME": {
+ "name": "Crna Gora"
+ },
+ "TD": {
+ "name": "ÄŒad"
+ },
+ "CZ": {
+ "name": "Češka"
+ },
+ "CL": {
+ "name": "ÄŒile"
+ },
+ "DK": {
+ "name": "Danska"
+ },
+ "CD": {
+ "name": "Demokratska Republika Kongo"
+ },
+ "DG": {
+ "name": "Dijego Garsija"
+ },
+ "VI": {
+ "name": "DjeviÄanska Ostrva SAD"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "DO": {
+ "name": "Dominikanska Republika"
+ },
+ "JE": {
+ "name": "Džersi"
+ },
+ "DJ": {
+ "name": "Džibuti"
+ },
+ "EG": {
+ "name": "Egipat"
+ },
+ "EC": {
+ "name": "Ekvador"
+ },
+ "GQ": {
+ "name": "Ekvatorijalna Gvineja"
+ },
+ "ER": {
+ "name": "Eritreja"
+ },
+ "EE": {
+ "name": "Estonija"
+ },
+ "ET": {
+ "name": "Etiopija"
+ },
+ "FO": {
+ "name": "Farska Ostrva"
+ },
+ "FJ": {
+ "name": "Fidži"
+ },
+ "PH": {
+ "name": "Filipini"
+ },
+ "FI": {
+ "name": "Finska"
+ },
+ "FK": {
+ "name": "Folklandska Ostrva"
+ },
+ "FR": {
+ "name": "Francuska"
+ },
+ "GF": {
+ "name": "Francuska Gvajana"
+ },
+ "PF": {
+ "name": "Francuska Polinezija"
+ },
+ "TF": {
+ "name": "Francuske Južne Teritorije"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambija"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GG": {
+ "name": "Gernzi"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "GrÄka"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grenland"
+ },
+ "GE": {
+ "name": "Gruzija"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GP": {
+ "name": "Gvadelupe"
+ },
+ "GY": {
+ "name": "Gvajana"
+ },
+ "GT": {
+ "name": "Gvatemala"
+ },
+ "GN": {
+ "name": "Gvineja"
+ },
+ "GW": {
+ "name": "Gvineja-Bisao"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "NL": {
+ "name": "Holandija"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong (S. A. R. Kina)"
+ },
+ "HR": {
+ "name": "Hrvatska"
+ },
+ "IN": {
+ "name": "Indija"
+ },
+ "ID": {
+ "name": "Indonezija"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irska"
+ },
+ "IS": {
+ "name": "Island"
+ },
+ "IT": {
+ "name": "Italija"
+ },
+ "IL": {
+ "name": "Izrael"
+ },
+ "JM": {
+ "name": "Jamajka"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "AM": {
+ "name": "Jermenija"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "GS": {
+ "name": "Južna Džordžija i Južna SendviÄ Ostrva"
+ },
+ "KR": {
+ "name": "Južna Koreja"
+ },
+ "SS": {
+ "name": "Južni Sudan"
+ },
+ "ZA": {
+ "name": "JužnoafriÄka Republika"
+ },
+ "KY": {
+ "name": "Kajmanska Ostrva"
+ },
+ "KH": {
+ "name": "Kambodža"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanarska ostrva"
+ },
+ "CV": {
+ "name": "Kape Verde"
+ },
+ "BQ": {
+ "name": "Karipska Holandija"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KZ": {
+ "name": "Kazahstan"
+ },
+ "KE": {
+ "name": "Kenija"
+ },
+ "CN": {
+ "name": "Kina"
+ },
+ "CY": {
+ "name": "Kipar"
+ },
+ "KG": {
+ "name": "Kirgizstan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CC": {
+ "name": "Kokos (Keling) Ostrva"
+ },
+ "CO": {
+ "name": "Kolumbija"
+ },
+ "KM": {
+ "name": "Komorska Ostrva"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CK": {
+ "name": "Kukova Ostrva"
+ },
+ "CW": {
+ "name": "Kurasao"
+ },
+ "KW": {
+ "name": "Kuvajt"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonija"
+ },
+ "LB": {
+ "name": "Liban"
+ },
+ "LR": {
+ "name": "Liberija"
+ },
+ "LY": {
+ "name": "Libija"
+ },
+ "LI": {
+ "name": "Lihtenštajn"
+ },
+ "LT": {
+ "name": "Litvanija"
+ },
+ "LU": {
+ "name": "Luksemburg"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "HU": {
+ "name": "Mađarska"
+ },
+ "YT": {
+ "name": "Majote"
+ },
+ "MO": {
+ "name": "Makao (S. A. R. Kina)"
+ },
+ "MK": {
+ "name": "Makedonija"
+ },
+ "MW": {
+ "name": "Malavi"
+ },
+ "MV": {
+ "name": "Maldivi"
+ },
+ "MY": {
+ "name": "Malezija"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "UM": {
+ "name": "Manja Udaljena Ostrva SAD"
+ },
+ "MA": {
+ "name": "Maroko"
+ },
+ "MH": {
+ "name": "Maršalska Ostrva"
+ },
+ "MQ": {
+ "name": "Martinik"
+ },
+ "MU": {
+ "name": "Mauricius"
+ },
+ "MR": {
+ "name": "Mauritanija"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "MM": {
+ "name": "Mijanmar"
+ },
+ "FM": {
+ "name": "Mikronezija"
+ },
+ "MD": {
+ "name": "Moldavija"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolija"
+ },
+ "MS": {
+ "name": "Monserat"
+ },
+ "MZ": {
+ "name": "Mozambik"
+ },
+ "NA": {
+ "name": "Namibija"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigerija"
+ },
+ "NI": {
+ "name": "Nikaragva"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Ostrvo"
+ },
+ "NO": {
+ "name": "Norveška"
+ },
+ "NC": {
+ "name": "Nova Kaledonija"
+ },
+ "NZ": {
+ "name": "Novi Zeland"
+ },
+ "DE": {
+ "name": "NjemaÄka"
+ },
+ "CI": {
+ "name": "Obala SlonovaÄe"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "AC": {
+ "name": "Ostrvo Asension"
+ },
+ "IM": {
+ "name": "Ostrvo Man"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinska Teritorija"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Nova Gvineja"
+ },
+ "PY": {
+ "name": "Paragvaj"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkern"
+ },
+ "PL": {
+ "name": "Poljska"
+ },
+ "PR": {
+ "name": "Porto Riko"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "RE": {
+ "name": "Rejunion"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumunija"
+ },
+ "RU": {
+ "name": "Rusija"
+ },
+ "SV": {
+ "name": "Salvador"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "Sao Tome i Principe"
+ },
+ "SA": {
+ "name": "Saudijska Arabija"
+ },
+ "SC": {
+ "name": "Sejšeli"
+ },
+ "PM": {
+ "name": "Sen Pjer i Mikelon"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "KN": {
+ "name": "Sent Kits i Nevis"
+ },
+ "LC": {
+ "name": "Sent Lucija"
+ },
+ "VC": {
+ "name": "Sent Vinsent i Grenadini"
+ },
+ "EA": {
+ "name": "Seuta i Melilja"
+ },
+ "SL": {
+ "name": "Sijera Leone"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Marten"
+ },
+ "SY": {
+ "name": "Sirija"
+ },
+ "US": {
+ "name": "Sjedinjene AmeriÄke Države"
+ },
+ "KP": {
+ "name": "Sjeverna Koreja"
+ },
+ "MP": {
+ "name": "Sjeverna Marijanska Ostrva"
+ },
+ "SK": {
+ "name": "SlovaÄka"
+ },
+ "SI": {
+ "name": "Slovenija"
+ },
+ "SB": {
+ "name": "Solomonska Ostrva"
+ },
+ "SO": {
+ "name": "Somalija"
+ },
+ "RS": {
+ "name": "Srbija"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "BL": {
+ "name": "Sv. Bartolomej"
+ },
+ "MF": {
+ "name": "Sv. Martin"
+ },
+ "SJ": {
+ "name": "Svalbard i Janmajen Ostrva"
+ },
+ "SZ": {
+ "name": "Svazilend"
+ },
+ "SH": {
+ "name": "Sveta Helena"
+ },
+ "ES": {
+ "name": "Å panija"
+ },
+ "LK": {
+ "name": "Å ri Lanka"
+ },
+ "SE": {
+ "name": "Å vedska"
+ },
+ "CH": {
+ "name": "Å vicarska"
+ },
+ "TJ": {
+ "name": "Tadžikistan"
+ },
+ "TH": {
+ "name": "Tajland"
+ },
+ "TW": {
+ "name": "Tajvan"
+ },
+ "TZ": {
+ "name": "Tanzanija"
+ },
+ "TL": {
+ "name": "Timor Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad i Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Kunja"
+ },
+ "TN": {
+ "name": "Tunis"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks i Kajkos Ostrva"
+ },
+ "TR": {
+ "name": "Turska"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "AE": {
+ "name": "Ujedinjeni Arapski Emirati"
+ },
+ "UA": {
+ "name": "Ukrajina"
+ },
+ "UY": {
+ "name": "Urugvaj"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "WF": {
+ "name": "Valis i Futuna Ostrva"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikan"
+ },
+ "GB": {
+ "name": "Velika Britanija"
+ },
+ "VE": {
+ "name": "Venecuela"
+ },
+ "VN": {
+ "name": "Vijetnam"
+ },
+ "ZM": {
+ "name": "Zambija"
+ },
+ "EH": {
+ "name": "Zapadna Sahara"
+ },
+ "ZW": {
+ "name": "Zimbabve"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ca.json b/library/intl/resources/country/ca.json
new file mode 100644
index 000000000..862cc0125
--- /dev/null
+++ b/library/intl/resources/country/ca.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistan"
+ },
+ "AL": {
+ "name": "Albània"
+ },
+ "DE": {
+ "name": "Alemanya"
+ },
+ "DZ": {
+ "name": "Algèria"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antàrtida"
+ },
+ "AG": {
+ "name": "Antigua i Barbuda"
+ },
+ "SA": {
+ "name": "Aràbia Saudita"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armènia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Austràlia"
+ },
+ "AT": {
+ "name": "Àustria"
+ },
+ "AZ": {
+ "name": "Azerbaidjan"
+ },
+ "BS": {
+ "name": "Bahames"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangla Desh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Bèlgica"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermudes"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BY": {
+ "name": "Bielorússia"
+ },
+ "BO": {
+ "name": "Bolívia"
+ },
+ "BA": {
+ "name": "Bòsnia i Hercegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgària"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodja"
+ },
+ "CM": {
+ "name": "Camerun"
+ },
+ "CA": {
+ "name": "Canadà"
+ },
+ "CV": {
+ "name": "Cap Verd"
+ },
+ "BQ": {
+ "name": "Carib Neerlandès"
+ },
+ "EA": {
+ "name": "Ceuta i Melilla"
+ },
+ "VA": {
+ "name": "Ciutat del Vaticà"
+ },
+ "CO": {
+ "name": "Colòmbia"
+ },
+ "KM": {
+ "name": "Comores"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "KP": {
+ "name": "Corea del Nord"
+ },
+ "KR": {
+ "name": "Corea del Sud"
+ },
+ "CI": {
+ "name": "Costa d’Ivori"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croàcia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EG": {
+ "name": "Egipte"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emirats Àrabs Units"
+ },
+ "EC": {
+ "name": "Equador"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovàquia"
+ },
+ "SI": {
+ "name": "Eslovènia"
+ },
+ "ES": {
+ "name": "Espanya"
+ },
+ "US": {
+ "name": "Estats Units"
+ },
+ "EE": {
+ "name": "Estònia"
+ },
+ "ET": {
+ "name": "Etiòpia"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipines"
+ },
+ "FI": {
+ "name": "Finlàndia"
+ },
+ "FR": {
+ "name": "França"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gàmbia"
+ },
+ "GE": {
+ "name": "Geòrgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Grècia"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grenlàndia"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GF": {
+ "name": "Guaiana Francesa"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea Bissau"
+ },
+ "GQ": {
+ "name": "Guinea Equatorial"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Hondures"
+ },
+ "HK": {
+ "name": "Hong Kong (RAE Xina)"
+ },
+ "HU": {
+ "name": "Hongria"
+ },
+ "YE": {
+ "name": "Iemen"
+ },
+ "CX": {
+ "name": "illa Christmas"
+ },
+ "AC": {
+ "name": "illa de l’Ascensió"
+ },
+ "RE": {
+ "name": "Illa de la Reunió"
+ },
+ "IM": {
+ "name": "illa de Man"
+ },
+ "AX": {
+ "name": "illes Ã…land"
+ },
+ "KY": {
+ "name": "Illes Caiman"
+ },
+ "IC": {
+ "name": "illes Canàries"
+ },
+ "CC": {
+ "name": "illes Cocos"
+ },
+ "CK": {
+ "name": "illes Cook"
+ },
+ "FO": {
+ "name": "illes Fèroe"
+ },
+ "GS": {
+ "name": "illes Geòrgia del Sud i Sandwich del Sud"
+ },
+ "FK": {
+ "name": "Illes Malvines"
+ },
+ "MP": {
+ "name": "illes Mariannes del Nord"
+ },
+ "MH": {
+ "name": "illes Marshall"
+ },
+ "UM": {
+ "name": "illes Perifèriques Menors dels EUA"
+ },
+ "PN": {
+ "name": "illes Pitcairn"
+ },
+ "SB": {
+ "name": "illes Salomó"
+ },
+ "TC": {
+ "name": "Illes Turks i Caicos"
+ },
+ "VG": {
+ "name": "Illes Verges Britàniques"
+ },
+ "VI": {
+ "name": "Illes Verges Nord-americanes"
+ },
+ "IN": {
+ "name": "Ãndia"
+ },
+ "ID": {
+ "name": "Indonèsia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "IS": {
+ "name": "Islàndia"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Itàlia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japó"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordània"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KG": {
+ "name": "Kirguizistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Letònia"
+ },
+ "LB": {
+ "name": "Líban"
+ },
+ "LR": {
+ "name": "Libèria"
+ },
+ "LY": {
+ "name": "Líbia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituània"
+ },
+ "LU": {
+ "name": "Luxemburg"
+ },
+ "MO": {
+ "name": "Macau (RAE Xina)"
+ },
+ "MK": {
+ "name": "Macedònia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malàisia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marroc"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Maurici"
+ },
+ "MR": {
+ "name": "Mauritània"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mèxic"
+ },
+ "FM": {
+ "name": "Micronèsia"
+ },
+ "MZ": {
+ "name": "Moçambic"
+ },
+ "MD": {
+ "name": "Moldàvia"
+ },
+ "MC": {
+ "name": "Mònaco"
+ },
+ "MN": {
+ "name": "Mongòlia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MM": {
+ "name": "Myanmar (Birmània)"
+ },
+ "NA": {
+ "name": "Namíbia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigèria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nova Caledònia"
+ },
+ "NZ": {
+ "name": "Nova Zelanda"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "NL": {
+ "name": "Països Baixos"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestina"
+ },
+ "PA": {
+ "name": "Panamà"
+ },
+ "PG": {
+ "name": "Papua Nova Guinea"
+ },
+ "PY": {
+ "name": "Paraguai"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinèsia Francesa"
+ },
+ "PL": {
+ "name": "Polònia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "GB": {
+ "name": "Regne Unit"
+ },
+ "CF": {
+ "name": "República Centreafricana"
+ },
+ "ZA": {
+ "name": "República de Sud-àfrica"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "CZ": {
+ "name": "República Txeca"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RU": {
+ "name": "Rússia"
+ },
+ "EH": {
+ "name": "Sàhara Occidental"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "KN": {
+ "name": "Saint Christopher i Nevis"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "VC": {
+ "name": "Saint Vincent i les Grenadines"
+ },
+ "PM": {
+ "name": "Saint-Pierre-et-Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Nord-americana"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé i Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Sèrbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Síria"
+ },
+ "SO": {
+ "name": "Somàlia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SS": {
+ "name": "Sudan del Sud"
+ },
+ "SE": {
+ "name": "Suècia"
+ },
+ "CH": {
+ "name": "Suïssa"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard i Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swazilàndia"
+ },
+ "TJ": {
+ "name": "Tadjikistan"
+ },
+ "TH": {
+ "name": "Tailàndia"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tanzània"
+ },
+ "IO": {
+ "name": "Territori Britànic de l’Oceà Ãndic"
+ },
+ "TF": {
+ "name": "Territoris Francesos del Sud"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinitat i Tobago"
+ },
+ "TA": {
+ "name": "Tristão da Cunha"
+ },
+ "TN": {
+ "name": "Tunísia"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TR": {
+ "name": "Turquia"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "TD": {
+ "name": "Txad"
+ },
+ "UA": {
+ "name": "Ucraïna"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguai"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Veneçuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis i Futuna"
+ },
+ "CL": {
+ "name": "Xile"
+ },
+ "CN": {
+ "name": "Xina"
+ },
+ "CY": {
+ "name": "Xipre"
+ },
+ "ZM": {
+ "name": "Zàmbia"
+ },
+ "ZW": {
+ "name": "Zimbàbue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/cgg.json b/library/intl/resources/country/cgg.json
new file mode 100644
index 000000000..7d1d151c7
--- /dev/null
+++ b/library/intl/resources/country/cgg.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afuganistani"
+ },
+ "IS": {
+ "name": "Aisilandi"
+ },
+ "CI": {
+ "name": "Aivore Kositi"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AE": {
+ "name": "Amahanga ga Buharabu ageeteereine"
+ },
+ "US": {
+ "name": "Amerika"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AG": {
+ "name": "Angiguwa na Babuda"
+ },
+ "AO": {
+ "name": "Angora"
+ },
+ "AI": {
+ "name": "Angwira"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AR": {
+ "name": "Arigentina"
+ },
+ "DZ": {
+ "name": "Arigyeriya"
+ },
+ "AM": {
+ "name": "Arimeniya"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AL": {
+ "name": "Arubania"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AZ": {
+ "name": "Azabagyani"
+ },
+ "BB": {
+ "name": "Babadosi"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BH": {
+ "name": "Bahareni"
+ },
+ "BD": {
+ "name": "Bangaradeshi"
+ },
+ "BY": {
+ "name": "Bararusi"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BM": {
+ "name": "Berimuda"
+ },
+ "BZ": {
+ "name": "Berize"
+ },
+ "BF": {
+ "name": "Bokina Faso"
+ },
+ "BO": {
+ "name": "Boriiviya"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BA": {
+ "name": "Boziniya na Hezegovina"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "BE": {
+ "name": "Bubirigi"
+ },
+ "FR": {
+ "name": "Bufaransa"
+ },
+ "FI": {
+ "name": "Bufini"
+ },
+ "DE": {
+ "name": "Bugirimaani"
+ },
+ "GB": {
+ "name": "Bungyereza"
+ },
+ "BR": {
+ "name": "Buraziiri"
+ },
+ "BG": {
+ "name": "Burugariya"
+ },
+ "TL": {
+ "name": "Burugweizooba bwa Timori"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BN": {
+ "name": "Burunei"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "TR": {
+ "name": "Buturuki \/Take"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Deenimaaka"
+ },
+ "CD": {
+ "name": "Demokoratika Ripaaburika ya Kongo"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "MP": {
+ "name": "Ebizinga by’amatemba ga Mariana"
+ },
+ "TC": {
+ "name": "Ebizinga bya Buturuki na Kaiko"
+ },
+ "FK": {
+ "name": "Ebizinga bya Faakilanda"
+ },
+ "KY": {
+ "name": "Ebizinga bya Kayimani"
+ },
+ "CV": {
+ "name": "Ebizinga bya Kepuvade"
+ },
+ "CK": {
+ "name": "Ebizinga bya Kuuku"
+ },
+ "MH": {
+ "name": "Ebizinga bya Marshaa"
+ },
+ "SB": {
+ "name": "Ebizinga bya Surimaani"
+ },
+ "VI": {
+ "name": "Ebizinga bya Virigini ebya Amerika"
+ },
+ "VG": {
+ "name": "Ebizinga bya Virigini ebya Bungyereza"
+ },
+ "CF": {
+ "name": "Eihanga rya Rwagati ya Afirika"
+ },
+ "NF": {
+ "name": "Ekizinga Norifoko"
+ },
+ "SV": {
+ "name": "Eri Salivado"
+ },
+ "ER": {
+ "name": "Eriteriya"
+ },
+ "EE": {
+ "name": "Esitoniya"
+ },
+ "ET": {
+ "name": "Ethiyopiya"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Figyi"
+ },
+ "PH": {
+ "name": "Firipino"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabooni"
+ },
+ "GM": {
+ "name": "Gambiya"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GI": {
+ "name": "Giburaata"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Ginebisau"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GQ": {
+ "name": "Guni"
+ },
+ "GD": {
+ "name": "Gurenada"
+ },
+ "GL": {
+ "name": "Guriinirandi"
+ },
+ "GR": {
+ "name": "Guriisi"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GF": {
+ "name": "Guyana ya Bufaransa"
+ },
+ "GP": {
+ "name": "Gwaderupe"
+ },
+ "GU": {
+ "name": "Gwamu"
+ },
+ "GT": {
+ "name": "Gwatemara"
+ },
+ "JM": {
+ "name": "Gyamaika"
+ },
+ "JP": {
+ "name": "Gyapaani"
+ },
+ "DJ": {
+ "name": "Gyibuti"
+ },
+ "GE": {
+ "name": "Gyogiya"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HU": {
+ "name": "Hangare"
+ },
+ "HN": {
+ "name": "Hondurasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "NL": {
+ "name": "Hoorandi"
+ },
+ "EC": {
+ "name": "Ikweda"
+ },
+ "IN": {
+ "name": "Indiya"
+ },
+ "ID": {
+ "name": "Indoneeziya"
+ },
+ "IQ": {
+ "name": "Iraaka"
+ },
+ "IR": {
+ "name": "Iraani"
+ },
+ "IE": {
+ "name": "Irerandi"
+ },
+ "IL": {
+ "name": "Isirairi"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IT": {
+ "name": "Itare"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "KH": {
+ "name": "Kambodiya"
+ },
+ "CM": {
+ "name": "Kameruuni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Kata"
+ },
+ "KZ": {
+ "name": "Kazakisitani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizistani"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "HR": {
+ "name": "Korasiya"
+ },
+ "KR": {
+ "name": "Koreya Amashuuma"
+ },
+ "KP": {
+ "name": "Koreya Amatemba"
+ },
+ "CO": {
+ "name": "Korombiya"
+ },
+ "KM": {
+ "name": "Koromo"
+ },
+ "CR": {
+ "name": "Kositarika"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuweiti"
+ },
+ "LU": {
+ "name": "Lakizembaaga"
+ },
+ "LV": {
+ "name": "Latviya"
+ },
+ "LA": {
+ "name": "Layosi"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberiya"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Lishenteni"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madagasika"
+ },
+ "MW": {
+ "name": "Marawi"
+ },
+ "MY": {
+ "name": "marayizia"
+ },
+ "ML": {
+ "name": "Mari"
+ },
+ "MV": {
+ "name": "Maridives"
+ },
+ "MT": {
+ "name": "Marita"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MK": {
+ "name": "Masedoonia"
+ },
+ "MU": {
+ "name": "Maurishiasi"
+ },
+ "MR": {
+ "name": "Mauriteeniya"
+ },
+ "YT": {
+ "name": "Mayote"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Mikironesiya"
+ },
+ "EG": {
+ "name": "Misiri"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongoria"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrati"
+ },
+ "MD": {
+ "name": "Moridova"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanamar"
+ },
+ "NE": {
+ "name": "Naigya"
+ },
+ "NG": {
+ "name": "Naigyeriya"
+ },
+ "NA": {
+ "name": "Namibiya"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepo"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NC": {
+ "name": "Niukaredonia"
+ },
+ "NZ": {
+ "name": "Niuzirandi"
+ },
+ "NO": {
+ "name": "Noorwe"
+ },
+ "OM": {
+ "name": "Omaani"
+ },
+ "AU": {
+ "name": "Ositureeriya"
+ },
+ "AT": {
+ "name": "Osituria"
+ },
+ "PK": {
+ "name": "Pakisitaani"
+ },
+ "PW": {
+ "name": "Palaawu"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua"
+ },
+ "PY": {
+ "name": "Paragwai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkaini"
+ },
+ "PT": {
+ "name": "Pocugo"
+ },
+ "PF": {
+ "name": "Polinesia ya Bufaransa"
+ },
+ "PL": {
+ "name": "Poorandi"
+ },
+ "PR": {
+ "name": "Pwetoriko"
+ },
+ "DO": {
+ "name": "Ripaaburika ya Dominica"
+ },
+ "CZ": {
+ "name": "Ripaaburika ya Zeeki"
+ },
+ "RE": {
+ "name": "Riyuniyoni"
+ },
+ "RO": {
+ "name": "Romaniya"
+ },
+ "RU": {
+ "name": "Rrasha"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "CY": {
+ "name": "Saipurasi"
+ },
+ "SM": {
+ "name": "Samarino"
+ },
+ "WS": {
+ "name": "Samowa"
+ },
+ "AS": {
+ "name": "Samowa ya Ameerika"
+ },
+ "SA": {
+ "name": "Saudi Areebiya"
+ },
+ "ZA": {
+ "name": "Sausi Afirika"
+ },
+ "ST": {
+ "name": "Sawo Tome na Purinsipo"
+ },
+ "SN": {
+ "name": "Senego"
+ },
+ "SH": {
+ "name": "Senti Herena"
+ },
+ "KN": {
+ "name": "Senti Kittis na Nevisi"
+ },
+ "PM": {
+ "name": "Senti Piyerre na Mikweron"
+ },
+ "LC": {
+ "name": "Senti Rusiya"
+ },
+ "VC": {
+ "name": "Senti Vinsent na Gurenadini"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Shesheresi"
+ },
+ "SG": {
+ "name": "Singapo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "ES": {
+ "name": "Sipeyini"
+ },
+ "LK": {
+ "name": "Siriranka"
+ },
+ "SY": {
+ "name": "Siriya"
+ },
+ "SK": {
+ "name": "Sirovaakiya"
+ },
+ "SI": {
+ "name": "Sirovaaniya"
+ },
+ "SL": {
+ "name": "Sirra Riyooni"
+ },
+ "SO": {
+ "name": "Somaariya"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SR": {
+ "name": "Surinaamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swazirandi"
+ },
+ "SE": {
+ "name": "Swideni"
+ },
+ "CH": {
+ "name": "Swisi"
+ },
+ "TH": {
+ "name": "Tairandi"
+ },
+ "TJ": {
+ "name": "Tajikisitani"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TW": {
+ "name": "Tayiwaani"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokerawu"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunizia"
+ },
+ "TT": {
+ "name": "Turinidad na Tobago"
+ },
+ "TM": {
+ "name": "Turukimenisitani"
+ },
+ "TV": {
+ "name": "Tuvaru"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukureini"
+ },
+ "UY": {
+ "name": "Urugwai"
+ },
+ "UZ": {
+ "name": "Uzibekisitani"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venezuwera"
+ },
+ "VN": {
+ "name": "Viyetinaamu"
+ },
+ "WF": {
+ "name": "Warris na Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "JO": {
+ "name": "Yorudaani"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/chr.json b/library/intl/resources/country/chr.json
new file mode 100644
index 000000000..a42342766
--- /dev/null
+++ b/library/intl/resources/country/chr.json
@@ -0,0 +1,761 @@
+{
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé & Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "LC": {
+ "name": "St. Lucia"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad & Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks & Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis & Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ },
+ "IE": {
+ "name": "ᎠᎢᎴá‚á—"
+ },
+ "AM": {
+ "name": "ᎠᎵᎻá‚Ꭰ"
+ },
+ "AL": {
+ "name": "ᎠᎵá‡á‚á¯"
+ },
+ "DZ": {
+ "name": "ᎠᎵá¥áŽµá¯"
+ },
+ "AW": {
+ "name": "ᎠᎷá†"
+ },
+ "US": {
+ "name": "ᎠᎹá°áŸ"
+ },
+ "AS": {
+ "name": "ᎠᎺᎵᎧ áŒáŽ¼áŽ "
+ },
+ "PF": {
+ "name": "Ꭰá‚ᎦᎸᣠá†áŽµá‚áᎠ"
+ },
+ "GF": {
+ "name": "Ꭰá‚ᎦᎸᥠᎩᎠ"
+ },
+ "AI": {
+ "name": "Ꭰá‚ᎩᎳ"
+ },
+ "AO": {
+ "name": "Ꭰá‚ᎪᎳ"
+ },
+ "PH": {
+ "name": "Ꭰá‚áˆáŽµáŽ©áƒ"
+ },
+ "ES": {
+ "name": "Ꭰá‚áá†á‚á±"
+ },
+ "AD": {
+ "name": "Ꭰá‚á™áŽ³"
+ },
+ "DE": {
+ "name": "Ꭰá‚á›á¥"
+ },
+ "AT": {
+ "name": "ᎠááŸá¯"
+ },
+ "AZ": {
+ "name": "ᎠáᎵá†áŒá‚"
+ },
+ "CK": {
+ "name": "Ꭰá“áá“á´áŽ²áᎩ ᎤᎦášá›"
+ },
+ "SH": {
+ "name": "Ꭰá¥áŽ¸á‰á— ᎮᎵᎾ"
+ },
+ "BL": {
+ "name": "Ꭰá¥áŽ¸á‰á— á†á•áŽ³áŽ»"
+ },
+ "MF": {
+ "name": "Ꭰá¥áŽ¸á‰á— á¡á¡"
+ },
+ "AR": {
+ "name": "Ꭰá¥á‚á˜á‚Ꭰ"
+ },
+ "AF": {
+ "name": "Ꭰá«áŽ¨á‚áá–á‚"
+ },
+ "KN": {
+ "name": "Ꭰá°áŸ ᎾᎿ Ꭸá¥áŽ¸á‰á— Ꭰá‚áªáŒ ᎠᎴ Ꭰá‚áá«á"
+ },
+ "FM": {
+ "name": "Ꭰá°áŸ á§áŽ¾áŽµáŽªáŽ¯ ᎾᎿ ᎹᎢá‰á‚áá¯"
+ },
+ "AU": {
+ "name": "ᎡᎳá—áœ"
+ },
+ "ER": {
+ "name": "ᎡᎵáŸá¯"
+ },
+ "EC": {
+ "name": "Ꭱá†á™áŽµ"
+ },
+ "GQ": {
+ "name": "Ꭱá†á™áŽµáŽ áŽµ ᎩᎢá‚"
+ },
+ "EE": {
+ "name": "Ꭱáá™á‚á¯"
+ },
+ "CV": {
+ "name": "ᎢᎬᎾá•áŽ¾ Ꭲá¤á³áá—"
+ },
+ "IQ": {
+ "name": "ᎢᎳᎩ"
+ },
+ "IR": {
+ "name": "ᎢᎴá‚"
+ },
+ "ID": {
+ "name": "Ꭲá‚á™á‚áá¯"
+ },
+ "IN": {
+ "name": "Ꭲá…á—Ꮎ"
+ },
+ "IL": {
+ "name": "ᎢáᎵá±"
+ },
+ "NC": {
+ "name": "ᎢᤠᎧᎵá™á‚Ꭰá‚"
+ },
+ "NZ": {
+ "name": "ᎢᤠáᎢᎴá‚á—"
+ },
+ "GL": {
+ "name": "Ꭲá¤áá›á±"
+ },
+ "EG": {
+ "name": "Ꭲá¥áˆáŽ¢"
+ },
+ "CI": {
+ "name": "Ꭲá¬áŽµ ᎾᎿ ᎠᎹá³áŽ¶á—"
+ },
+ "AX": {
+ "name": "ᎣᎴá…á“ ášáŽ¦ášá›"
+ },
+ "OM": {
+ "name": "ᎣᎺá‚"
+ },
+ "IM": {
+ "name": "ᎤáᗠᎤᎦášá› ᎾᎿ ᎠáᎦá¯"
+ },
+ "AG": {
+ "name": "Ꭴáªá˜ ᎠᎴ á†áŠá“"
+ },
+ "GH": {
+ "name": "ᎦᎠᎾ"
+ },
+ "FR": {
+ "name": "ᎦᎸá¥á±"
+ },
+ "GM": {
+ "name": "ᎦᎹáˆáŽ¢áŽ "
+ },
+ "GA": {
+ "name": "Ꭶá‰á‚"
+ },
+ "GY": {
+ "name": "Ꭶá¯áŽ¾"
+ },
+ "KI": {
+ "name": "ᎧᎵá†á˜"
+ },
+ "HR": {
+ "name": "ᎧᎶᎡáᎠ"
+ },
+ "CM": {
+ "name": "ᎧᎹᎷá‚"
+ },
+ "KH": {
+ "name": "ᎧᎹá‰á—Ꭰá‚"
+ },
+ "CD": {
+ "name": "Ꭷá‚Ꭺ"
+ },
+ "CG": {
+ "name": "Ꭷá‚Ꭺ (áᎦášáŽ©)"
+ },
+ "KZ": {
+ "name": "ᎧáŽáŽ§áá•á‚"
+ },
+ "QA": {
+ "name": "Ꭷá”Ꮅ"
+ },
+ "KY": {
+ "name": "ᎨᎢᎹႠášáŽ¦ášá›áŽ¢"
+ },
+ "CA": {
+ "name": "ᎨᎾá“"
+ },
+ "KE": {
+ "name": "Ꭸá‚á¯"
+ },
+ "GB": {
+ "name": "ᎩᎵáá²"
+ },
+ "KG": {
+ "name": "ᎩᎵá£áŽ¢á"
+ },
+ "GR": {
+ "name": "ᎪᎢᎯ"
+ },
+ "CC": {
+ "name": "ᎪᎪá (ᎩᎵá‚) ášáŽ¦ášá›"
+ },
+ "CO": {
+ "name": "ᎪᎸᎻáˆáŽ¢áŽ "
+ },
+ "KM": {
+ "name": "ᎪᎼᎳá"
+ },
+ "CR": {
+ "name": "ᎪáᓠᎵᎧ"
+ },
+ "CU": {
+ "name": "Ꭻá†"
+ },
+ "GN": {
+ "name": "Ꭻá‡"
+ },
+ "GW": {
+ "name": "Ꭻá‡-áˆáŒáŽ¤á«"
+ },
+ "KW": {
+ "name": "ᎫáªáŽ¢á˜"
+ },
+ "CF": {
+ "name": "ᎬᎿᎨáᛠᎠá°áŸ áᎦášáŽ©"
+ },
+ "GG": {
+ "name": "Ꭼá‚á"
+ },
+ "HT": {
+ "name": "ᎮᎢá˜"
+ },
+ "HK": {
+ "name": "Ꮀá‚Ꭹ Ꭺá‚Ꭹ"
+ },
+ "HU": {
+ "name": "Ꮂá‚ᎦᎵ"
+ },
+ "LR": {
+ "name": "ᎳáˆáŽµá¯"
+ },
+ "LV": {
+ "name": "Ꮃá˜á«áŽ "
+ },
+ "LA": {
+ "name": "ᎴᎣá"
+ },
+ "LB": {
+ "name": "Ꮄá†áŽ¾á‚"
+ },
+ "LS": {
+ "name": "Ꮄáá™"
+ },
+ "LI": {
+ "name": "ᎵᎦá—á‚áá“á‚"
+ },
+ "LY": {
+ "name": "Ꮅáˆá¯"
+ },
+ "LT": {
+ "name": "Ꮅá—áªá‚Ꭰ"
+ },
+ "RO": {
+ "name": "ᎶᎹá‚á¯"
+ },
+ "RW": {
+ "name": "Ꮆá©á‚á“"
+ },
+ "LU": {
+ "name": "ᎸᎧáŽá‹áŽ©"
+ },
+ "MO": {
+ "name": "ᎹᎧᎣ (Ꭴá“á¤áŽµá“ á§á‚Ꮈá«áá“áᗠᎢᎬᎾá•áŽ¾) á£áŽ¢"
+ },
+ "MW": {
+ "name": "ᎹᎳá«"
+ },
+ "MY": {
+ "name": "ᎹᎴáᎢᎠ"
+ },
+ "ML": {
+ "name": "ᎹᎵ"
+ },
+ "MT": {
+ "name": "ᎹᎵá”"
+ },
+ "MV": {
+ "name": "ᎹᎵá—á«á"
+ },
+ "MD": {
+ "name": "ᎹᎵá™á«áŽ "
+ },
+ "MC": {
+ "name": "ᎹᎾᎪ"
+ },
+ "MN": {
+ "name": "Ꮉá‚ᎪᎵᎠ"
+ },
+ "MS": {
+ "name": "Ꮉá‚á˜áŒáŽ³á—"
+ },
+ "MH": {
+ "name": "ᎹáŒáŽµ ášáŽªášá›"
+ },
+ "MK": {
+ "name": "Ꮉáá™á‚ᎢᎠ"
+ },
+ "MG": {
+ "name": "Ꮉá“ᎦáᎧᎵ"
+ },
+ "MR": {
+ "name": "Ꮉá˜áŽ¢á¯"
+ },
+ "MQ": {
+ "name": "Ꮉá˜á‚Ꭸ"
+ },
+ "MM": {
+ "name": "Ꮉá¯áŽ¹áŽµ"
+ },
+ "MU": {
+ "name": "ᎼᎵáᎥá"
+ },
+ "MA": {
+ "name": "ᎼᎶᎪ"
+ },
+ "ME": {
+ "name": "Ꮌá‚á”áᎦᎶ"
+ },
+ "MZ": {
+ "name": "ᎼáŽáŽ»á‡áŽ©"
+ },
+ "NA": {
+ "name": "ᎾᎻáˆáŽ¢á¯"
+ },
+ "MP": {
+ "name": "ᎾáᎩ Ꭴá´á¢ á—ᜠᎹᎵᎠᎾ ášáŽ¦ášá›"
+ },
+ "BS": {
+ "name": "ᎾáᎩ á†áŽ­áŽ¹á"
+ },
+ "NP": {
+ "name": "áá†áŽµ"
+ },
+ "NL": {
+ "name": "áá›áŽ³á‚"
+ },
+ "CW": {
+ "name": "á‚ᎦᓠᎤá‚Ꮂ ᎾᎿ ᎫᎳᎨᎣ"
+ },
+ "NI": {
+ "name": "á‚ᎧᎳá†"
+ },
+ "NG": {
+ "name": "á‚á¥áŽµá¯"
+ },
+ "NU": {
+ "name": "á‚á³"
+ },
+ "NR": {
+ "name": "áƒáŽ¤áŽ·"
+ },
+ "NF": {
+ "name": "áƒáŽµá¬áŽµáŽ© ᎤᎦášá›"
+ },
+ "NO": {
+ "name": "áƒáª"
+ },
+ "PK": {
+ "name": "á†áŽ©áá–á‚"
+ },
+ "BH": {
+ "name": "á†áŽ­áŽ´áŽ¢á‚"
+ },
+ "PY": {
+ "name": "á†áŽ³á‡áŽ¢á¯"
+ },
+ "PW": {
+ "name": "á†áŽ´áŽ á«"
+ },
+ "PS": {
+ "name": "á†áŽ´áá—á‚ᎠႠá„Ꭼá«á³áŒá•áŽ©"
+ },
+ "GU": {
+ "name": "á†áŽ»"
+ },
+ "PA": {
+ "name": "á†áŽ¾áŽ¹"
+ },
+ "BJ": {
+ "name": "á†á‚Ꭲá‚"
+ },
+ "BD": {
+ "name": "á†á‚ᎦᎵá•á"
+ },
+ "PG": {
+ "name": "á†á‡ ᎢᤠᎩá‚"
+ },
+ "BB": {
+ "name": "á†á‡á™á"
+ },
+ "BM": {
+ "name": "á†áŠá“"
+ },
+ "BR": {
+ "name": "á†áᎵᎢ"
+ },
+ "BW": {
+ "name": "á†á£á©áŽ¾"
+ },
+ "PR": {
+ "name": "á‡áŽ¡á™ ᎵᎢᎪ"
+ },
+ "BY": {
+ "name": "á‡áŽ³áŽ·á"
+ },
+ "BZ": {
+ "name": "á‡áŽµá"
+ },
+ "BE": {
+ "name": "á‡áŽµá¥áŽ¥áŽ»"
+ },
+ "PE": {
+ "name": "á‡áŽ·"
+ },
+ "PN": {
+ "name": "áˆáŽ§áŽµá‚ ᎤᎦášá›áŽ¢"
+ },
+ "IO": {
+ "name": "áˆá—á á´á«á¯ ᎠᎺበᎢᎬᎾá•á…"
+ },
+ "PL": {
+ "name": "á‰áŽ³á‚"
+ },
+ "BO": {
+ "name": "á‰áŽµá«áŽ "
+ },
+ "BA": {
+ "name": "á‰áá‚Ꭰ ᎠᎴ Ꮂá¤áŽªá«"
+ },
+ "PT": {
+ "name": "á‰á¥áŽ¦áŽ³"
+ },
+ "BG": {
+ "name": "áŠáŽµáŽ¨áŽµáŽ "
+ },
+ "BN": {
+ "name": "áŠáŽ¾áŽ¢"
+ },
+ "BT": {
+ "name": "áŠá”á‚"
+ },
+ "BF": {
+ "name": "á‹áŽ©áŽ¾ á©á"
+ },
+ "BI": {
+ "name": "á‹áŽ·á‚á—"
+ },
+ "GD": {
+ "name": "á‹áŽ¾á“"
+ },
+ "CY": {
+ "name": "áŒáŽ¢á†á"
+ },
+ "SA": {
+ "name": "áŒáŽ¤á— ᎡᎴáˆáŽ "
+ },
+ "AE": {
+ "name": "áŒáŠ Ꭲá³áŽ¾áŽµáá”á… áŽ¡áŽ³áˆ áŽ¢áŽ¹áŽµá˜á"
+ },
+ "LK": {
+ "name": "áᎵ Ꮃá‚Ꭷ"
+ },
+ "SK": {
+ "name": "áᎶá©áŽ©áŽ "
+ },
+ "SI": {
+ "name": "áᎶá«á‚Ꭰ"
+ },
+ "MX": {
+ "name": "áá†á‚á±"
+ },
+ "CH": {
+ "name": "áá«á"
+ },
+ "SE": {
+ "name": "áá«á•á‚"
+ },
+ "PM": {
+ "name": "áŽá‚ᘠáˆá“ ᎠᎴ Ꮋá‡áŽ¶á‚"
+ },
+ "SL": {
+ "name": "áᎡᎳ ᎴᎣá‚"
+ },
+ "SC": {
+ "name": "áᎡá¥áŽµá"
+ },
+ "SG": {
+ "name": "áá‚Ꭶá‰áŽµ"
+ },
+ "SB": {
+ "name": "áᎶᎹႠášáŽ¦ášá›"
+ },
+ "SD": {
+ "name": "á‘á•á‚"
+ },
+ "RS": {
+ "name": "á’áˆá¯"
+ },
+ "CN": {
+ "name": "á“Ꮆá‚Ꭸáá›"
+ },
+ "CX": {
+ "name": "á“á‚áá“á²áŽ¯áŽ² ᎤᎦášá›"
+ },
+ "DK": {
+ "name": "á—á‚ᎹᎦ"
+ },
+ "DM": {
+ "name": "á™áŽ»á‚Ꭷ"
+ },
+ "DO": {
+ "name": "á™áŽ»á‚ᎧႠáᎦášáŽ©"
+ },
+ "GE": {
+ "name": "á£áŽ á¥áŽ¢"
+ },
+ "JM": {
+ "name": "á£áŽºáŽ¢áŽ§"
+ },
+ "JP": {
+ "name": "á£á©á‚á"
+ },
+ "CZ": {
+ "name": "á¤áŽ© áᎦášáŽ©"
+ },
+ "CL": {
+ "name": "á¥áŽµ"
+ },
+ "GI": {
+ "name": "á¥á†áŽµá“"
+ },
+ "DJ": {
+ "name": "á¥áŠá—"
+ },
+ "JO": {
+ "name": "á¦á“á‚"
+ },
+ "KR": {
+ "name": "á§áŽ¦áƒá® ᎪᎵᎠ"
+ },
+ "GS": {
+ "name": "á§áŽ¦áƒá® á£á¥á± ᎠᎴ ᎾáᎩ á§áŽ¦áƒá® Ꭰáá›áŽ­áŸ ášáŽ¦ášá›"
+ },
+ "AQ": {
+ "name": "á§ááá“Ꮈ"
+ },
+ "IS": {
+ "name": "á§ááá“ᎸᎯ"
+ },
+ "KP": {
+ "name": "á§á´á¢ ᎪᎵᎠ"
+ },
+ "JE": {
+ "name": "á¨áŽµá"
+ },
+ "FK": {
+ "name": "á©áŽ© ᎤᎦášá›"
+ },
+ "GP": {
+ "name": "á©á“Ꮇá‡"
+ },
+ "GT": {
+ "name": "á©á”ᎹᎳ"
+ },
+ "FO": {
+ "name": "áªáŽ¶ ášáŽ¦ášá›"
+ },
+ "FI": {
+ "name": "á«á‚Ꭶá™áŽ¯"
+ },
+ "FJ": {
+ "name": "á«á¥"
+ },
+ "IT": {
+ "name": "á²áŽ¶"
+ },
+ "RU": {
+ "name": "á²á‚Ꭲ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/cs.json b/library/intl/resources/country/cs.json
new file mode 100644
index 000000000..d7a21b6fa
--- /dev/null
+++ b/library/intl/resources/country/cs.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghánistán"
+ },
+ "AX": {
+ "name": "Ã…landy"
+ },
+ "AL": {
+ "name": "Albánie"
+ },
+ "DZ": {
+ "name": "Alžírsko"
+ },
+ "AS": {
+ "name": "Americká Samoa"
+ },
+ "VI": {
+ "name": "Americké Panenské ostrovy"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktida"
+ },
+ "AG": {
+ "name": "Antigua a Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Arménie"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension"
+ },
+ "AU": {
+ "name": "Austrálie"
+ },
+ "AZ": {
+ "name": "Ãzerbájdžán"
+ },
+ "BS": {
+ "name": "Bahamy"
+ },
+ "BH": {
+ "name": "Bahrajn"
+ },
+ "BD": {
+ "name": "Bangladéš"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgie"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BY": {
+ "name": "Bělorusko"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermudy"
+ },
+ "BT": {
+ "name": "Bhútán"
+ },
+ "BO": {
+ "name": "Bolívie"
+ },
+ "BA": {
+ "name": "Bosna a Hercegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazílie"
+ },
+ "IO": {
+ "name": "Britské indickooceánské území"
+ },
+ "VG": {
+ "name": "Britské Panenské ostrovy"
+ },
+ "BN": {
+ "name": "Brunej"
+ },
+ "BG": {
+ "name": "Bulharsko"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "EA": {
+ "name": "Ceuta a Melilla"
+ },
+ "CK": {
+ "name": "Cookovy ostrovy"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "TD": {
+ "name": "ÄŒad"
+ },
+ "ME": {
+ "name": "Černá Hora"
+ },
+ "CZ": {
+ "name": "Česká republika"
+ },
+ "CN": {
+ "name": "Čína"
+ },
+ "DK": {
+ "name": "Dánsko"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "DO": {
+ "name": "Dominikánská republika"
+ },
+ "DJ": {
+ "name": "Džibutsko"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "EC": {
+ "name": "Ekvádor"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonsko"
+ },
+ "ET": {
+ "name": "Etiopie"
+ },
+ "FO": {
+ "name": "Faerské ostrovy"
+ },
+ "FK": {
+ "name": "Falklandské ostrovy"
+ },
+ "FJ": {
+ "name": "Fidži"
+ },
+ "PH": {
+ "name": "Filipíny"
+ },
+ "FI": {
+ "name": "Finsko"
+ },
+ "FR": {
+ "name": "Francie"
+ },
+ "GF": {
+ "name": "Francouzská Guyana"
+ },
+ "TF": {
+ "name": "Francouzská jižní území"
+ },
+ "PF": {
+ "name": "Francouzská Polynésie"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambie"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grónsko"
+ },
+ "GE": {
+ "name": "Gruzie"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hongkong – ZAO Číny"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "HR": {
+ "name": "Chorvatsko"
+ },
+ "IN": {
+ "name": "Indie"
+ },
+ "ID": {
+ "name": "Indonésie"
+ },
+ "IQ": {
+ "name": "Irák"
+ },
+ "IR": {
+ "name": "Ãrán"
+ },
+ "IE": {
+ "name": "Irsko"
+ },
+ "IS": {
+ "name": "Island"
+ },
+ "IT": {
+ "name": "Itálie"
+ },
+ "IL": {
+ "name": "Izrael"
+ },
+ "JM": {
+ "name": "Jamajka"
+ },
+ "JP": {
+ "name": "Japonsko"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "ZA": {
+ "name": "Jihoafrická republika"
+ },
+ "GS": {
+ "name": "Jižní Georgie a Jižní Sandwichovy ostrovy"
+ },
+ "KR": {
+ "name": "Jižní Korea"
+ },
+ "SS": {
+ "name": "Jižní Súdán"
+ },
+ "JO": {
+ "name": "Jordánsko"
+ },
+ "KY": {
+ "name": "Kajmanské ostrovy"
+ },
+ "KH": {
+ "name": "Kambodža"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanárské ostrovy"
+ },
+ "CV": {
+ "name": "Kapverdy"
+ },
+ "BQ": {
+ "name": "Karibské Nizozemsko"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KZ": {
+ "name": "Kazachstán"
+ },
+ "KE": {
+ "name": "Keňa"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CC": {
+ "name": "Kokosové ostrovy"
+ },
+ "CO": {
+ "name": "Kolumbie"
+ },
+ "KM": {
+ "name": "Komory"
+ },
+ "CG": {
+ "name": "Kongo – Brazzaville"
+ },
+ "CD": {
+ "name": "Kongo – Kinshasa"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuvajt"
+ },
+ "CY": {
+ "name": "Kypr"
+ },
+ "KG": {
+ "name": "Kyrgyzstán"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Libérie"
+ },
+ "LY": {
+ "name": "Libye"
+ },
+ "LI": {
+ "name": "Lichtenštejnsko"
+ },
+ "LT": {
+ "name": "Litva"
+ },
+ "LV": {
+ "name": "Lotyšsko"
+ },
+ "LU": {
+ "name": "Lucembursko"
+ },
+ "MO": {
+ "name": "Macao – ZAO Číny"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "HU": {
+ "name": "MaÄarsko"
+ },
+ "MK": {
+ "name": "Makedonie"
+ },
+ "MY": {
+ "name": "Malajsie"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maledivy"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Maroko"
+ },
+ "MH": {
+ "name": "Marshallovy ostrovy"
+ },
+ "MQ": {
+ "name": "Martinik"
+ },
+ "MU": {
+ "name": "Mauricius"
+ },
+ "MR": {
+ "name": "Mauritánie"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "UM": {
+ "name": "Menší odlehlé ostrovy USA"
+ },
+ "MX": {
+ "name": "Mexiko"
+ },
+ "FM": {
+ "name": "Mikronésie"
+ },
+ "MD": {
+ "name": "Moldavsko"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolsko"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mosambik"
+ },
+ "MM": {
+ "name": "Myanmar (Barma)"
+ },
+ "NA": {
+ "name": "Namibie"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "DE": {
+ "name": "Německo"
+ },
+ "NP": {
+ "name": "Nepál"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigérie"
+ },
+ "NI": {
+ "name": "Nikaragua"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NL": {
+ "name": "Nizozemsko"
+ },
+ "NF": {
+ "name": "Norfolk"
+ },
+ "NO": {
+ "name": "Norsko"
+ },
+ "NC": {
+ "name": "Nová Kaledonie"
+ },
+ "NZ": {
+ "name": "Nový Zéland"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "IM": {
+ "name": "Ostrov Man"
+ },
+ "PK": {
+ "name": "Pákistán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinská území"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua-Nová Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairnovy ostrovy"
+ },
+ "CI": {
+ "name": "Pobřeží slonoviny"
+ },
+ "PL": {
+ "name": "Polsko"
+ },
+ "PR": {
+ "name": "Portoriko"
+ },
+ "PT": {
+ "name": "Portugalsko"
+ },
+ "AT": {
+ "name": "Rakousko"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "GQ": {
+ "name": "Rovníková Guinea"
+ },
+ "RO": {
+ "name": "Rumunsko"
+ },
+ "RU": {
+ "name": "Rusko"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "GR": {
+ "name": "Řecko"
+ },
+ "PM": {
+ "name": "Saint-Pierre a Miquelon"
+ },
+ "SV": {
+ "name": "Salvador"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "SA": {
+ "name": "Saúdská Arábie"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "KP": {
+ "name": "Severní Korea"
+ },
+ "MP": {
+ "name": "Severní Mariany"
+ },
+ "SC": {
+ "name": "Seychely"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SK": {
+ "name": "Slovensko"
+ },
+ "SI": {
+ "name": "Slovinsko"
+ },
+ "SO": {
+ "name": "Somálsko"
+ },
+ "AE": {
+ "name": "Spojené arabské emiráty"
+ },
+ "US": {
+ "name": "Spojené státy"
+ },
+ "RS": {
+ "name": "Srbsko"
+ },
+ "LK": {
+ "name": "Srí Lanka"
+ },
+ "CF": {
+ "name": "Středoafrická republika"
+ },
+ "SD": {
+ "name": "Súdán"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SH": {
+ "name": "Svatá Helena"
+ },
+ "LC": {
+ "name": "Svatá Lucie"
+ },
+ "BL": {
+ "name": "Svatý Bartoloměj"
+ },
+ "KN": {
+ "name": "Svatý Kryštof a Nevis"
+ },
+ "MF": {
+ "name": "Svatý Martin (Francie)"
+ },
+ "SX": {
+ "name": "Svatý Martin (Nizozemsko)"
+ },
+ "ST": {
+ "name": "Svatý Tomáš a Princův ostrov"
+ },
+ "VC": {
+ "name": "Svatý Vincenc a Grenadiny"
+ },
+ "SZ": {
+ "name": "Svazijsko"
+ },
+ "SY": {
+ "name": "Sýrie"
+ },
+ "SB": {
+ "name": "Å alamounovy ostrovy"
+ },
+ "ES": {
+ "name": "Španělsko"
+ },
+ "SJ": {
+ "name": "Å picberky a Jan Mayen"
+ },
+ "SE": {
+ "name": "Švédsko"
+ },
+ "CH": {
+ "name": "Švýcarsko"
+ },
+ "TJ": {
+ "name": "Tádžikistán"
+ },
+ "TZ": {
+ "name": "Tanzanie"
+ },
+ "TH": {
+ "name": "Thajsko"
+ },
+ "TW": {
+ "name": "Tchaj-wan"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad a Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisko"
+ },
+ "TR": {
+ "name": "Turecko"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TC": {
+ "name": "Turks a Caicos"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukrajina"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "CX": {
+ "name": "VánoÄní ostrov"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikán"
+ },
+ "GB": {
+ "name": "Velká Británie"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "TL": {
+ "name": "Východní Timor"
+ },
+ "WF": {
+ "name": "Wallis a Futuna"
+ },
+ "ZM": {
+ "name": "Zambie"
+ },
+ "EH": {
+ "name": "Západní Sahara"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/cy.json b/library/intl/resources/country/cy.json
new file mode 100644
index 000000000..d89800008
--- /dev/null
+++ b/library/intl/resources/country/cy.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua a Barbuda"
+ },
+ "BQ": {
+ "name": "Antilles yr Iseldiroedd"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Awstralia"
+ },
+ "AT": {
+ "name": "Awstria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarws"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolifia"
+ },
+ "BA": {
+ "name": "Bosnia a Hercegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BG": {
+ "name": "Bwlgaria"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "NC": {
+ "name": "Caledonia Newydd"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Camerŵn"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "EA": {
+ "name": "Ceuta a Melilla"
+ },
+ "CU": {
+ "name": "Ciwba"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "ZA": {
+ "name": "De Affrica"
+ },
+ "GS": {
+ "name": "De Georgia ac Ynysoedd Sandwich y De"
+ },
+ "KR": {
+ "name": "De Korea"
+ },
+ "SS": {
+ "name": "De Swdan"
+ },
+ "DK": {
+ "name": "Denmarc"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiradau Arabaidd Unedig"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "VN": {
+ "name": "Fietnam"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FO": {
+ "name": "Føroyar"
+ },
+ "FR": {
+ "name": "Ffrainc"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "KP": {
+ "name": "Gogledd Korea"
+ },
+ "EH": {
+ "name": "Gorllewin Sahara"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GW": {
+ "name": "Guiné-Bissau"
+ },
+ "GQ": {
+ "name": "Guinea Gyhydeddol"
+ },
+ "GN": {
+ "name": "Guinée"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GF": {
+ "name": "Guyane Ffrengig"
+ },
+ "CF": {
+ "name": "Gweriniaeth Canolbarth Affrica"
+ },
+ "DO": {
+ "name": "Gweriniaeth Dominica"
+ },
+ "CZ": {
+ "name": "Gweriniaeth Tsiec"
+ },
+ "BE": {
+ "name": "Gwlad Belg"
+ },
+ "GR": {
+ "name": "Gwlad Groeg"
+ },
+ "JO": {
+ "name": "Gwlad Iorddonen"
+ },
+ "PL": {
+ "name": "Gwlad Pwyl"
+ },
+ "SZ": {
+ "name": "Gwlad Swazi"
+ },
+ "TH": {
+ "name": "Gwlad Thai"
+ },
+ "IS": {
+ "name": "Gwlad yr Iâ"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HK": {
+ "name": "Hong Kong RhGA Tsieina"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hwngari"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irac"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IE": {
+ "name": "Iwerddon"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "KZ": {
+ "name": "Kazakstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latfia"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LB": {
+ "name": "Libanus"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Lwcsembwrg"
+ },
+ "MO": {
+ "name": "Macau RhGA Tsieina"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mecsico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "MD": {
+ "name": "Moldofa"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Moroco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norwy"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Guinea Newydd"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Periw"
+ },
+ "PH": {
+ "name": "Pilipinas"
+ },
+ "PF": {
+ "name": "Polynesia Ffrengig"
+ },
+ "PT": {
+ "name": "Portiwgal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "RO": {
+ "name": "Rwmania"
+ },
+ "RU": {
+ "name": "Rwsia"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts a Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "VC": {
+ "name": "Saint Vincent a’r Grenadines"
+ },
+ "PM": {
+ "name": "Saint-Pierre-et-Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa America"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé a Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "ES": {
+ "name": "Sbaen"
+ },
+ "NZ": {
+ "name": "Seland Newydd"
+ },
+ "SN": {
+ "name": "Sénégal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slofacia"
+ },
+ "SI": {
+ "name": "Slofenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard a Jan Mayen"
+ },
+ "SD": {
+ "name": "Swdan"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TD": {
+ "name": "Tchad"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "IO": {
+ "name": "Tiriogaeth Brydeinig Cefnfor India"
+ },
+ "PS": {
+ "name": "Tiriogaethau Palesteinaidd"
+ },
+ "TF": {
+ "name": "Tiroedd Deheuol ac Antarctig Ffrainc"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TT": {
+ "name": "Trinidad a Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "CN": {
+ "name": "Tsieina"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "TR": {
+ "name": "Twrci"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "WF": {
+ "name": "Wallis a Futuna"
+ },
+ "UA": {
+ "name": "Wcráin"
+ },
+ "BS": {
+ "name": "Y Bahamas"
+ },
+ "CG": {
+ "name": "Y Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Y Congo - Kinshasa"
+ },
+ "GB": {
+ "name": "Y Deyrnas Unedig"
+ },
+ "VA": {
+ "name": "Y Fatican"
+ },
+ "FI": {
+ "name": "Y Ffindir"
+ },
+ "MV": {
+ "name": "Y Maldives"
+ },
+ "CH": {
+ "name": "Y Swistir"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "AC": {
+ "name": "Ynys Ascension"
+ },
+ "IM": {
+ "name": "Ynys Manaw"
+ },
+ "NF": {
+ "name": "Ynys Norfolk"
+ },
+ "GG": {
+ "name": "Ynys y Garn"
+ },
+ "CX": {
+ "name": "Ynys y Nadolig"
+ },
+ "AX": {
+ "name": "Ynysoedd Ã…land"
+ },
+ "KY": {
+ "name": "Ynysoedd Cayman"
+ },
+ "CC": {
+ "name": "Ynysoedd Cocos (Keeling)"
+ },
+ "CK": {
+ "name": "Ynysoedd Cook"
+ },
+ "MP": {
+ "name": "Ynysoedd Gogledd Mariana"
+ },
+ "VG": {
+ "name": "Ynysoedd Gwyryf Prydain"
+ },
+ "VI": {
+ "name": "Ynysoedd Gwyryf yr Unol Daleithiau"
+ },
+ "MH": {
+ "name": "Ynysoedd Marshall"
+ },
+ "UM": {
+ "name": "Ynysoedd Pellennig UDA"
+ },
+ "PN": {
+ "name": "Ynysoedd Pitcairn"
+ },
+ "SB": {
+ "name": "Ynysoedd Solomon"
+ },
+ "TC": {
+ "name": "Ynysoedd Turks a Caicos"
+ },
+ "FK": {
+ "name": "Ynysoedd y Falkland\/Malvinas"
+ },
+ "EG": {
+ "name": "Yr Aifft"
+ },
+ "DE": {
+ "name": "Yr Almaen"
+ },
+ "AR": {
+ "name": "Yr Ariannin"
+ },
+ "IT": {
+ "name": "Yr Eidal"
+ },
+ "NL": {
+ "name": "Yr Iseldiroedd"
+ },
+ "US": {
+ "name": "Yr Unol Daleithiau"
+ },
+ "GL": {
+ "name": "Yr Ynys Las"
+ },
+ "IC": {
+ "name": "Yr Ynysoedd Dedwydd"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/da.json b/library/intl/resources/country/da.json
new file mode 100644
index 000000000..252132661
--- /dev/null
+++ b/library/intl/resources/country/da.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AL": {
+ "name": "Albanien"
+ },
+ "DZ": {
+ "name": "Algeriet"
+ },
+ "AS": {
+ "name": "Amerikansk Samoa"
+ },
+ "UM": {
+ "name": "Amerikanske oversøiske øer"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktis"
+ },
+ "AG": {
+ "name": "Antigua og Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenien"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascensionøen"
+ },
+ "AZ": {
+ "name": "Aserbajdsjan"
+ },
+ "AU": {
+ "name": "Australien"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgien"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnien-Hercegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasilien"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgarien"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodja"
+ },
+ "CM": {
+ "name": "Cameroun"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "KY": {
+ "name": "Caymanøerne"
+ },
+ "CF": {
+ "name": "Centralafrikanske Republik"
+ },
+ "EA": {
+ "name": "Ceuta og Melilla"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CC": {
+ "name": "Cocosøerne"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comorerne"
+ },
+ "CG": {
+ "name": "Congo-Brazzaville"
+ },
+ "CD": {
+ "name": "Congo-Kinshasa"
+ },
+ "CK": {
+ "name": "Cookøerne"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cypern"
+ },
+ "DK": {
+ "name": "Danmark"
+ },
+ "VI": {
+ "name": "De Amerikanske Jomfruøer"
+ },
+ "VG": {
+ "name": "De Britiske Jomfruøer"
+ },
+ "TF": {
+ "name": "De franske besiddelser i Det Sydlige Indiske Ocean"
+ },
+ "PS": {
+ "name": "De palæstinensiske områder"
+ },
+ "DO": {
+ "name": "Den Dominikanske Republik"
+ },
+ "IO": {
+ "name": "Det britiske territorium i Det Indiske Ocean"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypten"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "CI": {
+ "name": "Elfenbenskysten"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estland"
+ },
+ "ET": {
+ "name": "Etiopien"
+ },
+ "FK": {
+ "name": "Falklandsøerne"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filippinerne"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "AE": {
+ "name": "Forenede Arabiske Emirater"
+ },
+ "FR": {
+ "name": "Frankrig"
+ },
+ "GF": {
+ "name": "Fransk Guyana"
+ },
+ "PF": {
+ "name": "Fransk Polynesien"
+ },
+ "FO": {
+ "name": "Færøerne"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgien"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GR": {
+ "name": "Grækenland"
+ },
+ "GL": {
+ "name": "Grønland"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "NL": {
+ "name": "Holland"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hongkong SAR"
+ },
+ "BY": {
+ "name": "Hviderusland"
+ },
+ "IN": {
+ "name": "Indien"
+ },
+ "ID": {
+ "name": "Indonesien"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irland"
+ },
+ "IS": {
+ "name": "Island"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italien"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "CX": {
+ "name": "Juleøen"
+ },
+ "IC": {
+ "name": "Kanariske øer"
+ },
+ "CV": {
+ "name": "Kap Verde"
+ },
+ "KZ": {
+ "name": "Kasakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CN": {
+ "name": "Kina"
+ },
+ "KG": {
+ "name": "Kirgisistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "HR": {
+ "name": "Kroatien"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Letland"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libyen"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Litauen"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macao SAR"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MK": {
+ "name": "Makedonien"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldiverne"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marokko"
+ },
+ "MH": {
+ "name": "Marshalløerne"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauretanien"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Mikronesiens Forenede Stater"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongoliet"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "BQ": {
+ "name": "Nederlandske antiller"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "KP": {
+ "name": "Nordkorea"
+ },
+ "MP": {
+ "name": "Nordmarianerne"
+ },
+ "NF": {
+ "name": "Norfolkøen"
+ },
+ "NO": {
+ "name": "Norge"
+ },
+ "NC": {
+ "name": "Ny Caledonien"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Ny Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PL": {
+ "name": "Polen"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Rumænien"
+ },
+ "RU": {
+ "name": "Rusland"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "KN": {
+ "name": "Saint Kitts og Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre og Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vincent og Grenadinerne"
+ },
+ "SB": {
+ "name": "Salomonøerne"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "Sao Tome og Principe"
+ },
+ "SA": {
+ "name": "Saudi-Arabien"
+ },
+ "CH": {
+ "name": "Schweiz"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbien"
+ },
+ "SC": {
+ "name": "Seychellerne"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakiet"
+ },
+ "SI": {
+ "name": "Slovenien"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "GS": {
+ "name": "South Georgia og South Sandwich Islands"
+ },
+ "ES": {
+ "name": "Spanien"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SH": {
+ "name": "St. Helena"
+ },
+ "GB": {
+ "name": "Storbritannien"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard og Jan Mayen"
+ },
+ "SE": {
+ "name": "Sverige"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "ZA": {
+ "name": "Sydafrika"
+ },
+ "KR": {
+ "name": "Sydkorea"
+ },
+ "SS": {
+ "name": "Sydsudan"
+ },
+ "SY": {
+ "name": "Syrien"
+ },
+ "TJ": {
+ "name": "Tadsjikistan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TD": {
+ "name": "Tchad"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "CZ": {
+ "name": "Tjekkiet"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad og Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunesien"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks- og Caicosøerne"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "TR": {
+ "name": "Tyrkiet"
+ },
+ "DE": {
+ "name": "Tyskland"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "HU": {
+ "name": "Ungarn"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "US": {
+ "name": "USA"
+ },
+ "UZ": {
+ "name": "Usbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikanstaten"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "EH": {
+ "name": "Vestsahara"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis og Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ },
+ "GQ": {
+ "name": "Ækvatorialguinea"
+ },
+ "AT": {
+ "name": "Østrig"
+ },
+ "AX": {
+ "name": "Ålandsøerne"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/dav.json b/library/intl/resources/country/dav.json
new file mode 100644
index 000000000..e57db8007
--- /dev/null
+++ b/library/intl/resources/country/dav.json
@@ -0,0 +1,761 @@
+{
+ "ZA": {
+ "name": "Afrika Kusini"
+ },
+ "AF": {
+ "name": "Afuganistani"
+ },
+ "IS": {
+ "name": "Aislandi"
+ },
+ "AR": {
+ "name": "Ajentina"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljeria"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua na Barbuda"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "IE": {
+ "name": "Ayalandi"
+ },
+ "AZ": {
+ "name": "Azabajani"
+ },
+ "BB": {
+ "name": "Babadosi"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BH": {
+ "name": "Bahareni"
+ },
+ "BD": {
+ "name": "Bangladeshi"
+ },
+ "BY": {
+ "name": "Belarusi"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia na Hezegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazili"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BF": {
+ "name": "Bukinafaso"
+ },
+ "MG": {
+ "name": "Bukini"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denmaki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekwado"
+ },
+ "SV": {
+ "name": "Elsavado"
+ },
+ "IO": {
+ "name": "Eneo la Uingereza katika Bahari Hindi"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "AE": {
+ "name": "Falme za Kiarabu"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipino"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Ginebisau"
+ },
+ "GQ": {
+ "name": "Ginekweta"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grinlandi"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GP": {
+ "name": "Gwadelupe"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GF": {
+ "name": "Gwiyana ya Ufaransa"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ES": {
+ "name": "Hispania"
+ },
+ "HN": {
+ "name": "Hondurasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungaria"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israeli"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "CF": {
+ "name": "Jamhuri ya Afrika ya Kati"
+ },
+ "CZ": {
+ "name": "Jamhuri ya Cheki"
+ },
+ "DO": {
+ "name": "Jamhuri ya Dominika"
+ },
+ "CD": {
+ "name": "Jamhuri ya Kidemokrasia ya Kongo"
+ },
+ "JP": {
+ "name": "Japani"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibralta"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "GE": {
+ "name": "Jojia"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kameruni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katari"
+ },
+ "KZ": {
+ "name": "Kazakistani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CV": {
+ "name": "Kepuvede"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizistani"
+ },
+ "NF": {
+ "name": "Kisiwa cha Norfok"
+ },
+ "CI": {
+ "name": "Kodivaa"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komoro"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "HR": {
+ "name": "Korasia"
+ },
+ "KP": {
+ "name": "Korea Kaskazini"
+ },
+ "KR": {
+ "name": "Korea Kusini"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CY": {
+ "name": "Kuprosi"
+ },
+ "KW": {
+ "name": "Kuwaiti"
+ },
+ "LA": {
+ "name": "Laosi"
+ },
+ "LU": {
+ "name": "Lasembagi"
+ },
+ "LV": {
+ "name": "Lativia"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Lishenteni"
+ },
+ "LT": {
+ "name": "Litwania"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malesia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "US": {
+ "name": "Marekani"
+ },
+ "MQ": {
+ "name": "Martiniki"
+ },
+ "MK": {
+ "name": "Masedonia"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "FM": {
+ "name": "Mikronesia"
+ },
+ "EG": {
+ "name": "Misri"
+ },
+ "MV": {
+ "name": "Modivu"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrati"
+ },
+ "MU": {
+ "name": "Morisi"
+ },
+ "MR": {
+ "name": "Moritania"
+ },
+ "MA": {
+ "name": "Moroko"
+ },
+ "MZ": {
+ "name": "Msumbiji"
+ },
+ "MM": {
+ "name": "Myama"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "NE": {
+ "name": "Nijeri"
+ },
+ "NG": {
+ "name": "Nijeria"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norwe"
+ },
+ "NC": {
+ "name": "Nyukaledonia"
+ },
+ "NZ": {
+ "name": "Nyuzilandi"
+ },
+ "OM": {
+ "name": "Omani"
+ },
+ "PK": {
+ "name": "Pakistani"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua"
+ },
+ "PY": {
+ "name": "Paragwai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkairni"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PF": {
+ "name": "Polinesia ya Ufaransa"
+ },
+ "PR": {
+ "name": "Pwetoriko"
+ },
+ "RE": {
+ "name": "Riyunioni"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SM": {
+ "name": "Samarino"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa ya Marekani"
+ },
+ "SH": {
+ "name": "Santahelena"
+ },
+ "KN": {
+ "name": "Santakitzi na Nevis"
+ },
+ "LC": {
+ "name": "Santalusia"
+ },
+ "PM": {
+ "name": "Santapieri na Mikeloni"
+ },
+ "VC": {
+ "name": "Santavisenti na Grenadini"
+ },
+ "ST": {
+ "name": "Sao Tome na Principe"
+ },
+ "SA": {
+ "name": "Saudi"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Shelisheli"
+ },
+ "SL": {
+ "name": "Siera Leoni"
+ },
+ "SG": {
+ "name": "Singapoo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "LK": {
+ "name": "Sirilanka"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SR": {
+ "name": "Surinamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandi"
+ },
+ "TW": {
+ "name": "Taiwani"
+ },
+ "TJ": {
+ "name": "Tajikistani"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TL": {
+ "name": "Timori ya Mashariki"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad na Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turukimenistani"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "IR": {
+ "name": "Uajemi"
+ },
+ "BE": {
+ "name": "Ubelgiji"
+ },
+ "FR": {
+ "name": "Ufaransa"
+ },
+ "FI": {
+ "name": "Ufini"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "GR": {
+ "name": "Ugiriki"
+ },
+ "ET": {
+ "name": "Uhabeshi"
+ },
+ "NL": {
+ "name": "Uholanzi"
+ },
+ "GB": {
+ "name": "Uingereza"
+ },
+ "DE": {
+ "name": "Ujerumani"
+ },
+ "PS": {
+ "name": "Ukingo wa Magharibi na Ukanda wa Gaza wa Palestina"
+ },
+ "UA": {
+ "name": "Ukraini"
+ },
+ "PT": {
+ "name": "Ureno"
+ },
+ "UY": {
+ "name": "Urugwai"
+ },
+ "RU": {
+ "name": "Urusi"
+ },
+ "SZ": {
+ "name": "Uswazi"
+ },
+ "SE": {
+ "name": "Uswidi"
+ },
+ "CH": {
+ "name": "Uswisi"
+ },
+ "TR": {
+ "name": "Uturuki"
+ },
+ "UZ": {
+ "name": "Uzibekistani"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietinamu"
+ },
+ "CK": {
+ "name": "Visiwa vya Cook"
+ },
+ "FK": {
+ "name": "Visiwa vya Falkland"
+ },
+ "KY": {
+ "name": "Visiwa vya Kayman"
+ },
+ "MP": {
+ "name": "Visiwa vya Mariana vya Kaskazini"
+ },
+ "MH": {
+ "name": "Visiwa vya Marshal"
+ },
+ "SB": {
+ "name": "Visiwa vya Solomon"
+ },
+ "TC": {
+ "name": "Visiwa vya Turki na Kaiko"
+ },
+ "VI": {
+ "name": "Visiwa vya Virgin vya Marekani"
+ },
+ "VG": {
+ "name": "Visiwa vya Virgin vya Uingereza"
+ },
+ "WF": {
+ "name": "Walis na Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "JO": {
+ "name": "Yordani"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/de-CH.json b/library/intl/resources/country/de-CH.json
new file mode 100644
index 000000000..515874b31
--- /dev/null
+++ b/library/intl/resources/country/de-CH.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "EG": {
+ "name": "Ägypten"
+ },
+ "AX": {
+ "name": "Ã…land-Inseln"
+ },
+ "AL": {
+ "name": "Albanien"
+ },
+ "DZ": {
+ "name": "Algerien"
+ },
+ "UM": {
+ "name": "Amerikanisch-Ozeanien"
+ },
+ "AS": {
+ "name": "Amerikanisch-Samoa"
+ },
+ "VI": {
+ "name": "Amerikanische Jungferninseln"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktis"
+ },
+ "AG": {
+ "name": "Antigua und Barbuda"
+ },
+ "GQ": {
+ "name": "Äquatorialguinea"
+ },
+ "AR": {
+ "name": "Argentinien"
+ },
+ "AM": {
+ "name": "Armenien"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension"
+ },
+ "AZ": {
+ "name": "Aserbaidschan"
+ },
+ "ET": {
+ "name": "Äthiopien"
+ },
+ "AU": {
+ "name": "Australien"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgien"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivien"
+ },
+ "BA": {
+ "name": "Bosnien und Herzegowina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasilien"
+ },
+ "VG": {
+ "name": "Britische Jungferninseln"
+ },
+ "IO": {
+ "name": "Britisches Territorium im Indischen Ozean"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgarien"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "EA": {
+ "name": "Ceuta und Melilla"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CK": {
+ "name": "Cookinseln"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Dänemark"
+ },
+ "KP": {
+ "name": "Demokratische Volksrepublik Korea"
+ },
+ "DE": {
+ "name": "Deutschland"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominikanische Republik"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estland"
+ },
+ "FK": {
+ "name": "Falklandinseln"
+ },
+ "FO": {
+ "name": "Färöer"
+ },
+ "FJ": {
+ "name": "Fidschi"
+ },
+ "FI": {
+ "name": "Finnland"
+ },
+ "FR": {
+ "name": "Frankreich"
+ },
+ "GF": {
+ "name": "Französisch-Guayana"
+ },
+ "PF": {
+ "name": "Französisch-Polynesien"
+ },
+ "TF": {
+ "name": "Französische Süd- und Antarktisgebiete"
+ },
+ "GA": {
+ "name": "Gabun"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgien"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GR": {
+ "name": "Griechenland"
+ },
+ "GL": {
+ "name": "Grönland"
+ },
+ "GB": {
+ "name": "Grossbritannien"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "IN": {
+ "name": "Indien"
+ },
+ "ID": {
+ "name": "Indonesien"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irland"
+ },
+ "IS": {
+ "name": "Island"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italien"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordanien"
+ },
+ "KY": {
+ "name": "Kaimaninseln"
+ },
+ "KH": {
+ "name": "Kambodscha"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanarische Inseln"
+ },
+ "CV": {
+ "name": "Kapverden"
+ },
+ "BQ": {
+ "name": "Karibische Niederlande"
+ },
+ "KZ": {
+ "name": "Kasachstan"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirgisistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CC": {
+ "name": "Kokosinseln"
+ },
+ "CO": {
+ "name": "Kolumbien"
+ },
+ "KM": {
+ "name": "Komoren"
+ },
+ "CG": {
+ "name": "Kongo-Brazzaville"
+ },
+ "CD": {
+ "name": "Kongo-Kinshasa"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "HR": {
+ "name": "Kroatien"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Lettland"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libyen"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Litauen"
+ },
+ "LU": {
+ "name": "Luxemburg"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Malediven"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marokko"
+ },
+ "MH": {
+ "name": "Marshall-Inseln"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauretanien"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MK": {
+ "name": "Mazedonien"
+ },
+ "MX": {
+ "name": "Mexiko"
+ },
+ "FM": {
+ "name": "Mikronesien"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolei"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mosambik"
+ },
+ "MM": {
+ "name": "Myanmar"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NC": {
+ "name": "Neukaledonien"
+ },
+ "NZ": {
+ "name": "Neuseeland"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NL": {
+ "name": "Niederlande"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "MP": {
+ "name": "Nördliche Marianen"
+ },
+ "NF": {
+ "name": "Norfolkinsel"
+ },
+ "NO": {
+ "name": "Norwegen"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "AT": {
+ "name": "Österreich"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PS": {
+ "name": "Palästinensische Autonomiegebiete"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua-Neuguinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippinen"
+ },
+ "PN": {
+ "name": "Pitcairninseln"
+ },
+ "PL": {
+ "name": "Polen"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "KR": {
+ "name": "Republik Korea"
+ },
+ "MD": {
+ "name": "Republik Moldau"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Rumänien"
+ },
+ "RU": {
+ "name": "Russische Föderation"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SB": {
+ "name": "Salomon-Inseln"
+ },
+ "ZM": {
+ "name": "Sambia"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "Sao Tomé und Principe"
+ },
+ "SA": {
+ "name": "Saudi-Arabien"
+ },
+ "SE": {
+ "name": "Schweden"
+ },
+ "CH": {
+ "name": "Schweiz"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbien"
+ },
+ "SC": {
+ "name": "Seychellen"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slowakei"
+ },
+ "SI": {
+ "name": "Slowenien"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "MO": {
+ "name": "Sonderverwaltungsregion Macau"
+ },
+ "HK": {
+ "name": "Sonderverwaltungszone Hongkong"
+ },
+ "ES": {
+ "name": "Spanien"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "SH": {
+ "name": "St. Helena"
+ },
+ "KN": {
+ "name": "St. Kitts und Nevis"
+ },
+ "LC": {
+ "name": "St. Lucia"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "PM": {
+ "name": "St. Pierre und Miquelon"
+ },
+ "VC": {
+ "name": "St. Vincent und die Grenadinen"
+ },
+ "ZA": {
+ "name": "Südafrika"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "GS": {
+ "name": "Südgeorgien und die Südlichen Sandwichinseln"
+ },
+ "SS": {
+ "name": "Südsudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard und Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swasiland"
+ },
+ "SY": {
+ "name": "Syrien"
+ },
+ "TJ": {
+ "name": "Tadschikistan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tansania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad und Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TD": {
+ "name": "Tschad"
+ },
+ "CZ": {
+ "name": "Tschechische Republik"
+ },
+ "TN": {
+ "name": "Tunesien"
+ },
+ "TR": {
+ "name": "Türkei"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks- und Caicosinseln"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "HU": {
+ "name": "Ungarn"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Usbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikanstadt"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "AE": {
+ "name": "Vereinigte Arabische Emirate"
+ },
+ "US": {
+ "name": "Vereinigte Staaten"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis und Futuna"
+ },
+ "CX": {
+ "name": "Weihnachtsinsel"
+ },
+ "BY": {
+ "name": "Weissrussland"
+ },
+ "EH": {
+ "name": "Westsahara"
+ },
+ "CF": {
+ "name": "Zentralafrikanische Republik"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ },
+ "CY": {
+ "name": "Zypern"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/de.json b/library/intl/resources/country/de.json
new file mode 100644
index 000000000..30777eaaf
--- /dev/null
+++ b/library/intl/resources/country/de.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "EG": {
+ "name": "Ägypten"
+ },
+ "AX": {
+ "name": "Ã…land-Inseln"
+ },
+ "AL": {
+ "name": "Albanien"
+ },
+ "DZ": {
+ "name": "Algerien"
+ },
+ "UM": {
+ "name": "Amerikanisch-Ozeanien"
+ },
+ "AS": {
+ "name": "Amerikanisch-Samoa"
+ },
+ "VI": {
+ "name": "Amerikanische Jungferninseln"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktis"
+ },
+ "AG": {
+ "name": "Antigua und Barbuda"
+ },
+ "GQ": {
+ "name": "Äquatorialguinea"
+ },
+ "AR": {
+ "name": "Argentinien"
+ },
+ "AM": {
+ "name": "Armenien"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension"
+ },
+ "AZ": {
+ "name": "Aserbaidschan"
+ },
+ "ET": {
+ "name": "Äthiopien"
+ },
+ "AU": {
+ "name": "Australien"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesch"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgien"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivien"
+ },
+ "BA": {
+ "name": "Bosnien und Herzegowina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasilien"
+ },
+ "VG": {
+ "name": "Britische Jungferninseln"
+ },
+ "IO": {
+ "name": "Britisches Territorium im Indischen Ozean"
+ },
+ "BN": {
+ "name": "Brunei Darussalam"
+ },
+ "BG": {
+ "name": "Bulgarien"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "EA": {
+ "name": "Ceuta und Melilla"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CK": {
+ "name": "Cookinseln"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Dänemark"
+ },
+ "KP": {
+ "name": "Demokratische Volksrepublik Korea"
+ },
+ "DE": {
+ "name": "Deutschland"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominikanische Republik"
+ },
+ "DJ": {
+ "name": "Dschibuti"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estland"
+ },
+ "FK": {
+ "name": "Falklandinseln"
+ },
+ "FO": {
+ "name": "Färöer"
+ },
+ "FJ": {
+ "name": "Fidschi"
+ },
+ "FI": {
+ "name": "Finnland"
+ },
+ "FR": {
+ "name": "Frankreich"
+ },
+ "GF": {
+ "name": "Französisch-Guayana"
+ },
+ "PF": {
+ "name": "Französisch-Polynesien"
+ },
+ "TF": {
+ "name": "Französische Süd- und Antarktisgebiete"
+ },
+ "GA": {
+ "name": "Gabun"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgien"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GR": {
+ "name": "Griechenland"
+ },
+ "GL": {
+ "name": "Grönland"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "IN": {
+ "name": "Indien"
+ },
+ "ID": {
+ "name": "Indonesien"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irland"
+ },
+ "IS": {
+ "name": "Island"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italien"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordanien"
+ },
+ "KY": {
+ "name": "Kaimaninseln"
+ },
+ "KH": {
+ "name": "Kambodscha"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanarische Inseln"
+ },
+ "CV": {
+ "name": "Kap Verde"
+ },
+ "BQ": {
+ "name": "Karibische Niederlande"
+ },
+ "KZ": {
+ "name": "Kasachstan"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirgisistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CC": {
+ "name": "Kokosinseln"
+ },
+ "CO": {
+ "name": "Kolumbien"
+ },
+ "KM": {
+ "name": "Komoren"
+ },
+ "CG": {
+ "name": "Kongo-Brazzaville"
+ },
+ "CD": {
+ "name": "Kongo-Kinshasa"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "HR": {
+ "name": "Kroatien"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Lettland"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libyen"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Litauen"
+ },
+ "LU": {
+ "name": "Luxemburg"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Malediven"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marokko"
+ },
+ "MH": {
+ "name": "Marshallinseln"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauretanien"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MK": {
+ "name": "Mazedonien"
+ },
+ "MX": {
+ "name": "Mexiko"
+ },
+ "FM": {
+ "name": "Mikronesien"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolei"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mosambik"
+ },
+ "MM": {
+ "name": "Myanmar"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NC": {
+ "name": "Neukaledonien"
+ },
+ "NZ": {
+ "name": "Neuseeland"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NL": {
+ "name": "Niederlande"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "MP": {
+ "name": "Nördliche Marianen"
+ },
+ "NF": {
+ "name": "Norfolkinsel"
+ },
+ "NO": {
+ "name": "Norwegen"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "AT": {
+ "name": "Österreich"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PS": {
+ "name": "Palästinensische Autonomiegebiete"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua-Neuguinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippinen"
+ },
+ "PN": {
+ "name": "Pitcairninseln"
+ },
+ "PL": {
+ "name": "Polen"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "KR": {
+ "name": "Republik Korea"
+ },
+ "MD": {
+ "name": "Republik Moldau"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumänien"
+ },
+ "RU": {
+ "name": "Russische Föderation"
+ },
+ "SB": {
+ "name": "Salomonen"
+ },
+ "ZM": {
+ "name": "Sambia"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé und Príncipe"
+ },
+ "SA": {
+ "name": "Saudi-Arabien"
+ },
+ "SE": {
+ "name": "Schweden"
+ },
+ "CH": {
+ "name": "Schweiz"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbien"
+ },
+ "SC": {
+ "name": "Seychellen"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "ZW": {
+ "name": "Simbabwe"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slowakei"
+ },
+ "SI": {
+ "name": "Slowenien"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "MO": {
+ "name": "Sonderverwaltungsregion Macau"
+ },
+ "HK": {
+ "name": "Sonderverwaltungszone Hongkong"
+ },
+ "ES": {
+ "name": "Spanien"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "SH": {
+ "name": "St. Helena"
+ },
+ "KN": {
+ "name": "St. Kitts und Nevis"
+ },
+ "LC": {
+ "name": "St. Lucia"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "PM": {
+ "name": "St. Pierre und Miquelon"
+ },
+ "VC": {
+ "name": "St. Vincent und die Grenadinen"
+ },
+ "ZA": {
+ "name": "Südafrika"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "GS": {
+ "name": "Südgeorgien und die Südlichen Sandwichinseln"
+ },
+ "SS": {
+ "name": "Südsudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard und Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swasiland"
+ },
+ "SY": {
+ "name": "Syrien"
+ },
+ "TJ": {
+ "name": "Tadschikistan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tansania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad und Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TD": {
+ "name": "Tschad"
+ },
+ "CZ": {
+ "name": "Tschechische Republik"
+ },
+ "TN": {
+ "name": "Tunesien"
+ },
+ "TR": {
+ "name": "Türkei"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks- und Caicosinseln"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "HU": {
+ "name": "Ungarn"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Usbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikanstadt"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "AE": {
+ "name": "Vereinigte Arabische Emirate"
+ },
+ "US": {
+ "name": "Vereinigte Staaten"
+ },
+ "GB": {
+ "name": "Vereinigtes Königreich"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis und Futuna"
+ },
+ "CX": {
+ "name": "Weihnachtsinsel"
+ },
+ "EH": {
+ "name": "Westsahara"
+ },
+ "CF": {
+ "name": "Zentralafrikanische Republik"
+ },
+ "CY": {
+ "name": "Zypern"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/dje.json b/library/intl/resources/country/dje.json
new file mode 100644
index 000000000..2610631cb
--- /dev/null
+++ b/library/intl/resources/country/dje.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afgaanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albaani"
+ },
+ "GB": {
+ "name": "Albaasalaama Marganta"
+ },
+ "DE": {
+ "name": "Almaaɲe"
+ },
+ "DZ": {
+ "name": "Alžeeri"
+ },
+ "VI": {
+ "name": "Ameerik Virgin Gungey"
+ },
+ "US": {
+ "name": "Ameriki Laabu Margantey"
+ },
+ "AS": {
+ "name": "Ameriki Samoa"
+ },
+ "AD": {
+ "name": "Andoora"
+ },
+ "AI": {
+ "name": "Angiiya"
+ },
+ "AO": {
+ "name": "Angoola"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua nda Barbuuda"
+ },
+ "AR": {
+ "name": "Argentine"
+ },
+ "AM": {
+ "name": "Armeeni"
+ },
+ "AW": {
+ "name": "Aruuba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "IS": {
+ "name": "Ayseland"
+ },
+ "AZ": {
+ "name": "Azerbaayijaŋ"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahareen"
+ },
+ "BD": {
+ "name": "Bangladeši"
+ },
+ "BB": {
+ "name": "Barbaados"
+ },
+ "BE": {
+ "name": "Belgiiki"
+ },
+ "BZ": {
+ "name": "Beliizi"
+ },
+ "BJ": {
+ "name": "Beniŋ"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BY": {
+ "name": "Biloriši"
+ },
+ "BO": {
+ "name": "Boolivi"
+ },
+ "BA": {
+ "name": "Bosni nda Herzegovine"
+ },
+ "BW": {
+ "name": "Botswaana"
+ },
+ "BR": {
+ "name": "Breezil"
+ },
+ "IO": {
+ "name": "Britiši Indu teekoo laama"
+ },
+ "VG": {
+ "name": "Britiši Virgin gungey"
+ },
+ "BN": {
+ "name": "Bruunee"
+ },
+ "BG": {
+ "name": "Bulgaari"
+ },
+ "BF": {
+ "name": "Burkina faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Buutaŋ"
+ },
+ "TD": {
+ "name": "Caadu"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "CZ": {
+ "name": "Cek labo"
+ },
+ "CF": {
+ "name": "Centraafriki koyra"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danemark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Doominiki laboo"
+ },
+ "ET": {
+ "name": "Ecioopi"
+ },
+ "EC": {
+ "name": "Ekwateer"
+ },
+ "ER": {
+ "name": "Eritree"
+ },
+ "ES": {
+ "name": "Espaaɲe"
+ },
+ "EE": {
+ "name": "Estooni"
+ },
+ "FR": {
+ "name": "Faransi"
+ },
+ "GF": {
+ "name": "Faransi Guyaan"
+ },
+ "PF": {
+ "name": "Faransi Polineezi"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipine"
+ },
+ "FI": {
+ "name": "Finlandu"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaabon"
+ },
+ "GH": {
+ "name": "Gaana"
+ },
+ "GM": {
+ "name": "Gambi"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Gine-Bisso"
+ },
+ "GQ": {
+ "name": "Ginee Ekwatorial"
+ },
+ "GE": {
+ "name": "Gorgi"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GD": {
+ "name": "Grenaada"
+ },
+ "GL": {
+ "name": "Grinland"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "KP": {
+ "name": "Gurma Kooree"
+ },
+ "GY": {
+ "name": "Guyaane"
+ },
+ "GP": {
+ "name": "Gwadeluup"
+ },
+ "GT": {
+ "name": "Gwatemaala"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ZA": {
+ "name": "Hawsa Afriki Laboo"
+ },
+ "KR": {
+ "name": "Hawsa Kooree"
+ },
+ "NL": {
+ "name": "Hollandu"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungaari"
+ },
+ "ID": {
+ "name": "Indoneezi"
+ },
+ "IN": {
+ "name": "Indu laboo"
+ },
+ "IQ": {
+ "name": "Iraak"
+ },
+ "IR": {
+ "name": "Iraan"
+ },
+ "RU": {
+ "name": "Iriši laboo"
+ },
+ "IE": {
+ "name": "Irlandu"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israyel"
+ },
+ "IT": {
+ "name": "Itaali"
+ },
+ "JP": {
+ "name": "Jaapoŋ"
+ },
+ "JM": {
+ "name": "Jamaayik"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "DJ": {
+ "name": "Jibuuti"
+ },
+ "NC": {
+ "name": "Kaaledooni Taagaa"
+ },
+ "KZ": {
+ "name": "Kaazakstan"
+ },
+ "FK": {
+ "name": "Kalkan gungey"
+ },
+ "KH": {
+ "name": "kamboogi"
+ },
+ "CM": {
+ "name": "Kameruun"
+ },
+ "CA": {
+ "name": "Kanaada"
+ },
+ "CV": {
+ "name": "Kapuver gungey"
+ },
+ "QA": {
+ "name": "Kataar"
+ },
+ "KY": {
+ "name": "Kayman gungey"
+ },
+ "KE": {
+ "name": "Keeniya"
+ },
+ "KI": {
+ "name": "Kiribaati"
+ },
+ "CO": {
+ "name": "Kolombi"
+ },
+ "KM": {
+ "name": "Komoor"
+ },
+ "CG": {
+ "name": "Kongoo"
+ },
+ "CD": {
+ "name": "Kongoo demookaratiki laboo"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kosta rika"
+ },
+ "HR": {
+ "name": "Krwaasi"
+ },
+ "CI": {
+ "name": "Kudwar"
+ },
+ "CU": {
+ "name": "Kuuba"
+ },
+ "CK": {
+ "name": "Kuuk gungey"
+ },
+ "KW": {
+ "name": "Kuweet"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "AE": {
+ "name": "Laaraw Imaarawey Margantey"
+ },
+ "LA": {
+ "name": "Laawos"
+ },
+ "LS": {
+ "name": "Leesoto"
+ },
+ "LV": {
+ "name": "Letooni"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LY": {
+ "name": "Liibi"
+ },
+ "LT": {
+ "name": "Lituaani"
+ },
+ "LB": {
+ "name": "Lubnaan"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MK": {
+ "name": "Maacedooni"
+ },
+ "ML": {
+ "name": "Maali"
+ },
+ "MA": {
+ "name": "Maarok"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malaawi"
+ },
+ "MV": {
+ "name": "Maldiivu"
+ },
+ "MY": {
+ "name": "Maleezi"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MP": {
+ "name": "Mariana Gurma Gungey"
+ },
+ "MH": {
+ "name": "Maršal gungey"
+ },
+ "MQ": {
+ "name": "Martiniiki"
+ },
+ "MM": {
+ "name": "Maynamar"
+ },
+ "YT": {
+ "name": "Mayooti"
+ },
+ "MX": {
+ "name": "Mexiki"
+ },
+ "FM": {
+ "name": "Mikronezi"
+ },
+ "EG": {
+ "name": "Misra"
+ },
+ "MD": {
+ "name": "Moldovi"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongooli"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MU": {
+ "name": "Mooris gungey"
+ },
+ "MR": {
+ "name": "Mooritaani"
+ },
+ "MZ": {
+ "name": "Mozambik"
+ },
+ "NG": {
+ "name": "Naajiriia"
+ },
+ "NA": {
+ "name": "Naamibi"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Neepal"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NE": {
+ "name": "Nižer"
+ },
+ "NF": {
+ "name": "Norfolk Gungoo"
+ },
+ "NO": {
+ "name": "Norveej"
+ },
+ "OM": {
+ "name": "Omaan"
+ },
+ "AU": {
+ "name": "Ostraali"
+ },
+ "AT": {
+ "name": "Otriši"
+ },
+ "PK": {
+ "name": "Paakistan"
+ },
+ "PS": {
+ "name": "Palestine Dangay nda Gaaza"
+ },
+ "PW": {
+ "name": "Palu"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Ginee Taaga"
+ },
+ "PY": {
+ "name": "Paraguwey"
+ },
+ "PE": {
+ "name": "Peeru"
+ },
+ "PN": {
+ "name": "Pitikarin"
+ },
+ "PL": {
+ "name": "Poloɲe"
+ },
+ "PR": {
+ "name": "Porto Riko"
+ },
+ "PT": {
+ "name": "Portugaal"
+ },
+ "RE": {
+ "name": "Reenioŋ"
+ },
+ "RO": {
+ "name": "Rumaani"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SV": {
+ "name": "Salvador laboo"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "Sao Tome nda Prinsipe"
+ },
+ "SA": {
+ "name": "Saudiya"
+ },
+ "SL": {
+ "name": "Seera Leon"
+ },
+ "SC": {
+ "name": "Seešel"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "SH": {
+ "name": "Seŋ Helena"
+ },
+ "KN": {
+ "name": "Seŋ Kitts nda Nevis"
+ },
+ "LC": {
+ "name": "Seŋ Lussia"
+ },
+ "PM": {
+ "name": "Seŋ Piyer nda Mikelon"
+ },
+ "VC": {
+ "name": "Seŋvinsaŋ nda Grenadine"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "CL": {
+ "name": "Å iili"
+ },
+ "CN": {
+ "name": "Å iin"
+ },
+ "CY": {
+ "name": "Å iipur"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovaaki"
+ },
+ "SI": {
+ "name": "Sloveeni"
+ },
+ "SB": {
+ "name": "Solomon Gungey"
+ },
+ "SO": {
+ "name": "Somaali"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "LK": {
+ "name": "Srilanka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SR": {
+ "name": "Surinaam"
+ },
+ "SD": {
+ "name": "Suudaŋ"
+ },
+ "SY": {
+ "name": "Suuria"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweede"
+ },
+ "CH": {
+ "name": "Swisu"
+ },
+ "TH": {
+ "name": "Taayiland"
+ },
+ "TW": {
+ "name": "Taayiwan"
+ },
+ "TJ": {
+ "name": "Taažikistan"
+ },
+ "TZ": {
+ "name": "Tanzaani"
+ },
+ "TL": {
+ "name": "Timoor hawsa"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad nda Tobaago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunizi"
+ },
+ "TC": {
+ "name": "Turk nda Kayikos Gungey"
+ },
+ "TR": {
+ "name": "Turki"
+ },
+ "TM": {
+ "name": "Turkmenistaŋ"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukreen"
+ },
+ "JO": {
+ "name": "Urdun"
+ },
+ "UY": {
+ "name": "Uruguwey"
+ },
+ "UZ": {
+ "name": "Uzbeekistan"
+ },
+ "VA": {
+ "name": "Vaatikan Laama"
+ },
+ "VU": {
+ "name": "Vanautu"
+ },
+ "VE": {
+ "name": "Veneezuyeela"
+ },
+ "VN": {
+ "name": "Vietnaam"
+ },
+ "WF": {
+ "name": "Wallis nda Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yaman"
+ },
+ "ZM": {
+ "name": "Zambi"
+ },
+ "NZ": {
+ "name": "Zeelandu Taaga"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/dsb.json b/library/intl/resources/country/dsb.json
new file mode 100644
index 000000000..fadf1e4c7
--- /dev/null
+++ b/library/intl/resources/country/dsb.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land"
+ },
+ "AL": {
+ "name": "Albańska"
+ },
+ "DZ": {
+ "name": "Algeriska"
+ },
+ "UM": {
+ "name": "Ameriska Oceaniska"
+ },
+ "AS": {
+ "name": "Ameriska Samoa"
+ },
+ "VI": {
+ "name": "Ameriske kněžniske kupy"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktis"
+ },
+ "AG": {
+ "name": "Antigua a Barbuda"
+ },
+ "AR": {
+ "name": "Argentinska"
+ },
+ "AM": {
+ "name": "Armeńska"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension"
+ },
+ "AU": {
+ "name": "Awstralska"
+ },
+ "AT": {
+ "name": "Awstriska"
+ },
+ "AZ": {
+ "name": "Azerbajdžan"
+ },
+ "BS": {
+ "name": "Bahamy"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladeš"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgiska"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BY": {
+ "name": "Běłoruska"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermudy"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Boliwiska"
+ },
+ "BA": {
+ "name": "Bosniska a Hercegowina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazilska"
+ },
+ "VG": {
+ "name": "Britiske kněžniske kupy"
+ },
+ "IO": {
+ "name": "Britiski indiskooceaniski teritorium"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgarska"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "TD": {
+ "name": "ÄŒad"
+ },
+ "ME": {
+ "name": "Carna Góra"
+ },
+ "CF": {
+ "name": "Centralnoafriska republika"
+ },
+ "CZ": {
+ "name": "ÄŒeska republika"
+ },
+ "EA": {
+ "name": "Ceuta a Melilla"
+ },
+ "CL": {
+ "name": "Chilska"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "HR": {
+ "name": "Chorwatska"
+ },
+ "CK": {
+ "name": "Cookowe kupy"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cypriska"
+ },
+ "DK": {
+ "name": "Dańska"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "DO": {
+ "name": "Dominikańska republika"
+ },
+ "DJ": {
+ "name": "Džibuti"
+ },
+ "EG": {
+ "name": "Egyptojska"
+ },
+ "EC": {
+ "name": "Ekwador"
+ },
+ "GQ": {
+ "name": "Ekwatorialna Gineja"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "ER": {
+ "name": "Eritreja"
+ },
+ "EE": {
+ "name": "Estniska"
+ },
+ "ET": {
+ "name": "Etiopiska"
+ },
+ "FK": {
+ "name": "Falklandske kupy"
+ },
+ "FO": {
+ "name": "Färöje"
+ },
+ "FJ": {
+ "name": "Fidži"
+ },
+ "PH": {
+ "name": "Filipiny"
+ },
+ "FI": {
+ "name": "Finska"
+ },
+ "FR": {
+ "name": "Francojska"
+ },
+ "GF": {
+ "name": "Francojska Guyana"
+ },
+ "PF": {
+ "name": "Francojska Polyneziska"
+ },
+ "TF": {
+ "name": "Francojski pódpołdnjowy a antarktiski teritorium"
+ },
+ "GA": {
+ "name": "Gabun"
+ },
+ "GM": {
+ "name": "Gambija"
+ },
+ "GE": {
+ "name": "Georgiska"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GN": {
+ "name": "Gineja"
+ },
+ "GW": {
+ "name": "Gineja-Bissau"
+ },
+ "CX": {
+ "name": "Gódowne kupy"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GR": {
+ "name": "Grichiska"
+ },
+ "GL": {
+ "name": "Grönlandska"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungorska"
+ },
+ "IN": {
+ "name": "Indiska"
+ },
+ "ID": {
+ "name": "Indoneziska"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irska"
+ },
+ "IS": {
+ "name": "Islandska"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italska"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "JP": {
+ "name": "Japańska"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordaniska"
+ },
+ "KY": {
+ "name": "Kajmaniske kupy"
+ },
+ "KH": {
+ "name": "Kambodža"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanariske kupy"
+ },
+ "CV": {
+ "name": "Kap Verde"
+ },
+ "BQ": {
+ "name": "Karibiska Nižozemska"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KZ": {
+ "name": "Kazachstan"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirgizistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CC": {
+ "name": "Kokosowe kupy"
+ },
+ "CO": {
+ "name": "Kolumbiska"
+ },
+ "KM": {
+ "name": "Komory"
+ },
+ "CG": {
+ "name": "Kongo-Brazzaville"
+ },
+ "CD": {
+ "name": "Kongo-Kinshasa"
+ },
+ "XK": {
+ "name": "Kosowo"
+ },
+ "CR": {
+ "name": "Kosta Rika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Letiska"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberija"
+ },
+ "LY": {
+ "name": "Libyska"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Litawska"
+ },
+ "LU": {
+ "name": "Luxemburgska"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MK": {
+ "name": "Makedońska"
+ },
+ "MY": {
+ "name": "Malajzija"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Malediwy"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "IM": {
+ "name": "Man"
+ },
+ "MA": {
+ "name": "Marokko"
+ },
+ "MH": {
+ "name": "Marshallowe kupy"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "MR": {
+ "name": "Mawretańska"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexiko"
+ },
+ "FM": {
+ "name": "Mikroneziska"
+ },
+ "MD": {
+ "name": "Moldawska"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolska"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mosambik"
+ },
+ "MM": {
+ "name": "Myanmar"
+ },
+ "NA": {
+ "name": "Namibija"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigerija"
+ },
+ "NI": {
+ "name": "Nikaragua"
+ },
+ "DE": {
+ "name": "Nimska"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NL": {
+ "name": "Nižozemska"
+ },
+ "NF": {
+ "name": "Norfolkowa kupa"
+ },
+ "NO": {
+ "name": "Norwegska"
+ },
+ "NC": {
+ "name": "Nowa Kaledoniska"
+ },
+ "NZ": {
+ "name": "Nowoseelandska"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinski awtonomny teritorium"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua-Neuguinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairnowe kupy"
+ },
+ "ZA": {
+ "name": "Pódpołdnjowa Afrika (Republika)"
+ },
+ "GS": {
+ "name": "Pódpołdnjowa Georgiska a Pódpołdnjowe Sandwichowe kupy"
+ },
+ "KR": {
+ "name": "Pódpołdnjowa Koreja"
+ },
+ "SS": {
+ "name": "Pódpołdnjowy Sudan"
+ },
+ "KP": {
+ "name": "Pódpołnocna Koreja"
+ },
+ "MP": {
+ "name": "Pódpołnocne Mariany"
+ },
+ "EH": {
+ "name": "Pódwjacorna Sahara"
+ },
+ "PL": {
+ "name": "Pólska"
+ },
+ "PT": {
+ "name": "Portugalska"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumuńska"
+ },
+ "RU": {
+ "name": "Ruska"
+ },
+ "SB": {
+ "name": "Salomony"
+ },
+ "ZM": {
+ "name": "Sambija"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé a Príncipe"
+ },
+ "SA": {
+ "name": "Saudi-Arabiska"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbiska"
+ },
+ "SC": {
+ "name": "Seychelle"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "ZW": {
+ "name": "Simbabwe"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "SÅ‚owakska"
+ },
+ "SI": {
+ "name": "Słowjeńska"
+ },
+ "SO": {
+ "name": "Somalija"
+ },
+ "ES": {
+ "name": "Špańska"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "SH": {
+ "name": "St. Helena"
+ },
+ "KN": {
+ "name": "St. Kitts a Nevis"
+ },
+ "LC": {
+ "name": "St. Lucia"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "PM": {
+ "name": "St. Pierre a Miquelon"
+ },
+ "VC": {
+ "name": "St. Vincent a Grenadiny"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Surinamska"
+ },
+ "SJ": {
+ "name": "Svalbard a Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swasiska"
+ },
+ "SE": {
+ "name": "Å wedska"
+ },
+ "CH": {
+ "name": "Å wicarska"
+ },
+ "SY": {
+ "name": "Syriska"
+ },
+ "TJ": {
+ "name": "Tadźikistan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tansanija"
+ },
+ "TH": {
+ "name": "Thailandska"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad a Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tuneziska"
+ },
+ "TM": {
+ "name": "Turkmeniska"
+ },
+ "TR": {
+ "name": "Turkojska"
+ },
+ "TC": {
+ "name": "Turks a Caicos kupy"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraina"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikańske město"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis a Futuna"
+ },
+ "HK": {
+ "name": "Wósebna zastojnstwowa cona Hongkong"
+ },
+ "MO": {
+ "name": "Wósebna zastojnstwowa cona Macao"
+ },
+ "AE": {
+ "name": "Zjadnośone arabiske emiraty"
+ },
+ "GB": {
+ "name": "Zjadnośone kralejstwo"
+ },
+ "US": {
+ "name": "Zjadnośone staty Ameriki"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/dyo.json b/library/intl/resources/country/dyo.json
new file mode 100644
index 000000000..f4352b339
--- /dev/null
+++ b/library/intl/resources/country/dyo.json
@@ -0,0 +1,761 @@
+{
+ "SA": {
+ "name": "Abari Saudi"
+ },
+ "AF": {
+ "name": "Afganistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albani"
+ },
+ "DE": {
+ "name": "Almaañ"
+ },
+ "DZ": {
+ "name": "Alseri"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AI": {
+ "name": "Angiiya"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua di Barbuda"
+ },
+ "AM": {
+ "name": "Armeni"
+ },
+ "AR": {
+ "name": "Arsantin"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AZ": {
+ "name": "Aserbaysan"
+ },
+ "HT": {
+ "name": "Ayti"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BH": {
+ "name": "Bahrayn"
+ },
+ "BD": {
+ "name": "Banglades"
+ },
+ "BB": {
+ "name": "Barbad"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BZ": {
+ "name": "Beliis"
+ },
+ "BE": {
+ "name": "Belsik"
+ },
+ "BJ": {
+ "name": "Bene"
+ },
+ "BM": {
+ "name": "Bermud"
+ },
+ "BO": {
+ "name": "Boliivi"
+ },
+ "BA": {
+ "name": "Bosni di Hersegovin"
+ },
+ "BW": {
+ "name": "Boswana"
+ },
+ "BR": {
+ "name": "Bresil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BG": {
+ "name": "Bulgari"
+ },
+ "BF": {
+ "name": "Burukiina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BN": {
+ "name": "Buruney"
+ },
+ "BT": {
+ "name": "Butan"
+ },
+ "TD": {
+ "name": "Cad"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CL": {
+ "name": "Cili"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "NF": {
+ "name": "Ecinkey yati Noorfok"
+ },
+ "ET": {
+ "name": "Ecoopi"
+ },
+ "EC": {
+ "name": "Ekuador"
+ },
+ "IN": {
+ "name": "End"
+ },
+ "ID": {
+ "name": "Endonesi"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritree"
+ },
+ "EG": {
+ "name": "Esípt"
+ },
+ "ES": {
+ "name": "Espaañ"
+ },
+ "EE": {
+ "name": "Estoni"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "Frans"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GH": {
+ "name": "Gaana"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambi"
+ },
+ "GN": {
+ "name": "Giné"
+ },
+ "GW": {
+ "name": "Giné Bisaau"
+ },
+ "GY": {
+ "name": "Giyan"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GR": {
+ "name": "Gres"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GP": {
+ "name": "Guwadalup"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "IS": {
+ "name": "Iisland"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Itali"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KH": {
+ "name": "Kamboj"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "CV": {
+ "name": "Kap Ver"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Keniya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CI": {
+ "name": "Koddiwar"
+ },
+ "CO": {
+ "name": "Kolombi"
+ },
+ "KM": {
+ "name": "Komor"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kosta Rika"
+ },
+ "HR": {
+ "name": "Kroasi"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagaskaar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "CD": {
+ "name": "Mofam demokratik mati Kongo"
+ },
+ "CZ": {
+ "name": "Mofam mati Cek"
+ },
+ "DO": {
+ "name": "Mofam mati Dominik"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "HN": {
+ "name": "Onduras"
+ },
+ "HU": {
+ "name": "OÅ‹ri"
+ },
+ "AU": {
+ "name": "Ostraalia"
+ },
+ "AT": {
+ "name": "Otris"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SV": {
+ "name": "Salvadoor"
+ },
+ "JM": {
+ "name": "Samaik"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa yati Amerik"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "LC": {
+ "name": "Saŋ Lusia"
+ },
+ "ST": {
+ "name": "São Tomé & Príncipe"
+ },
+ "JP": {
+ "name": "Sapoŋ"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "GE": {
+ "name": "Seorsi"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SL": {
+ "name": "Serra Leon"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "CN": {
+ "name": "Siin"
+ },
+ "CY": {
+ "name": "Siipr"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "GI": {
+ "name": "Sipraltaar"
+ },
+ "LK": {
+ "name": "Siri Lanka"
+ },
+ "SK": {
+ "name": "Slovaki"
+ },
+ "SI": {
+ "name": "Sloveni"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somali"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "SH": {
+ "name": "St. Helena"
+ },
+ "KN": {
+ "name": "St. Kitts & Nevis"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "PM": {
+ "name": "St. Pierre & Miquelon"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TH": {
+ "name": "Tailand"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad & Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks & Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis & Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/dz.json b/library/intl/resources/country/dz.json
new file mode 100644
index 000000000..991766ec2
--- /dev/null
+++ b/library/intl/resources/country/dz.json
@@ -0,0 +1,761 @@
+{
+ "XK": {
+ "name": "Kosovo"
+ },
+ "QA": {
+ "name": "ཀ་ཊར"
+ },
+ "IC": {
+ "name": "ཀ་ནེ་རི་གླིང་ཚོམ"
+ },
+ "KZ": {
+ "name": "ཀ་ཛགས་སà½à½±à½“"
+ },
+ "KH": {
+ "name": "ཀམ་བྷོ་ཌི་ཡ"
+ },
+ "CW": {
+ "name": "ཀྱཱུར་ར་ཀོ"
+ },
+ "HR": {
+ "name": "ཀྲོ་ཨེ་ཤ"
+ },
+ "KI": {
+ "name": "ཀི་རི་བ་à½à½²à¼‹à½˜à½šà½¼à¼‹à½‚ླིང"
+ },
+ "CU": {
+ "name": "ཀིའུ་བྷ"
+ },
+ "KG": {
+ "name": "ཀིར་གིས་སà½à½±à½“"
+ },
+ "KW": {
+ "name": "ཀུ་à½à½ºà½Š"
+ },
+ "CK": {
+ "name": "ཀུག་གླིང་ཚོམ"
+ },
+ "CA": {
+ "name": "ཀེ་ན་ཌ"
+ },
+ "CM": {
+ "name": "ཀེ་མ་རུན"
+ },
+ "BQ": {
+ "name": "ཀེ་རི་བི་ཡེན་ནེ་དར་ལནཌས྄"
+ },
+ "KE": {
+ "name": "ཀེན་ཡ"
+ },
+ "CV": {
+ "name": "ཀེཔ་བཱཌ"
+ },
+ "CC": {
+ "name": "ཀོ་ཀོས་གླིང་ཚོམ"
+ },
+ "CI": {
+ "name": "ཀོ་ཊེ་ ཌི་ཨི་à½à½¼à¼‹à½¢à½º"
+ },
+ "KM": {
+ "name": "ཀོ་མོ་རོས"
+ },
+ "CO": {
+ "name": "ཀོ་ལོམ་བྷི་ཡ"
+ },
+ "CD": {
+ "name": "ཀོང་གྷོ ཀིན་ཤ་ས"
+ },
+ "CG": {
+ "name": "ཀོང་གྷོ བྷྲ་ཛ་བིལ"
+ },
+ "CR": {
+ "name": "ཀོས་ཊ་རི་ཀ"
+ },
+ "CX": {
+ "name": "à½à½²à¼‹à½¢à½²à½¦à¾Ÿà¼‹à½˜à½ºà½¦à¼‹à½˜à½šà½¼à¼‹à½‚ླིང"
+ },
+ "KY": {
+ "name": "à½à½ºà¼‹à½˜à½ºà½“་གླིང་ཚོམ"
+ },
+ "GH": {
+ "name": "གྷ་ན"
+ },
+ "GA": {
+ "name": "གྷ་བྷོན"
+ },
+ "GY": {
+ "name": "གྷ་ཡ་ན"
+ },
+ "GN": {
+ "name": "གྷི་ནི"
+ },
+ "GW": {
+ "name": "གྷི་ནི་ བྷི་སཱའུ"
+ },
+ "GM": {
+ "name": "གྷེམ་བི་ཡ"
+ },
+ "GT": {
+ "name": "གྷོ་ཊ་མ་ལ"
+ },
+ "GR": {
+ "name": "གིརིས྄"
+ },
+ "GL": {
+ "name": "གིརཱིན་ལནཌ྄"
+ },
+ "GU": {
+ "name": "གུ་འམ་ མཚོ་གླིང"
+ },
+ "GG": {
+ "name": "གུ་ཨེརྣ་སི"
+ },
+ "GF": {
+ "name": "གུའི་ཡ་ན་ ཕྲནས྄་མངའ་à½à½¼à½„ས"
+ },
+ "GD": {
+ "name": "གྲྀ་ན་ཌ"
+ },
+ "GP": {
+ "name": "གོ་ཌེ་ལུ་པེ"
+ },
+ "TD": {
+ "name": "ཅཱཌ"
+ },
+ "CL": {
+ "name": "ཅི་ལི"
+ },
+ "CZ": {
+ "name": "ཅེཀ་ རི་པབ་ལིཀ"
+ },
+ "JP": {
+ "name": "ཇ་པཱན"
+ },
+ "JM": {
+ "name": "ཇཱ་མཻ་ཀ"
+ },
+ "DE": {
+ "name": "ཇཱར་མ་ནི"
+ },
+ "DJ": {
+ "name": "ཇི་བྷུ་ཊི"
+ },
+ "GI": {
+ "name": "ཇིབ་རཱལ་ཊར"
+ },
+ "JE": {
+ "name": "ཇེར་སི"
+ },
+ "JO": {
+ "name": "ཇོར་ཌན"
+ },
+ "GE": {
+ "name": "ཇཽར་ཇཱ"
+ },
+ "TZ": {
+ "name": "ཊཱན་ཛཱ་ནི་ཡ"
+ },
+ "TW": {
+ "name": "ཊཱའི་à½à½±à½“"
+ },
+ "TR": {
+ "name": "ཊཱར་ཀི"
+ },
+ "TM": {
+ "name": "ཊཱརཀ་མེནའི་སà½à½±à½“"
+ },
+ "TT": {
+ "name": "ཊི་ནི་ཌཱཌ་ ཨེནཌ་ ཊོ་བྷེ་གྷོ"
+ },
+ "TN": {
+ "name": "ཊུ་ནི་ཤི་ཡ"
+ },
+ "TG": {
+ "name": "ཊོ་གྷོ"
+ },
+ "TO": {
+ "name": "ཊོང་གྷ"
+ },
+ "DG": {
+ "name": "ཌི་ཡེ་གོ་གར་སིའོ"
+ },
+ "DK": {
+ "name": "ཌེན་མཱཀ"
+ },
+ "DM": {
+ "name": "ཌོ་མི་ནི་ཀ"
+ },
+ "DO": {
+ "name": "ཌོ་མི་ནི་ཀཱན་ རི་པབ་ལིཀ"
+ },
+ "TJ": {
+ "name": "à½à¼‹à½‡à½²à½‚་གི་སà½à½±à½“"
+ },
+ "TA": {
+ "name": "à½à¾²à½²à½¦à¼‹à½à½“་ད་ཀུན་ཧ"
+ },
+ "TL": {
+ "name": "à½à½²à¼‹à¼‹à½˜à½¼à½¢à¼‹à½£à½ºà¼‹à½¨à½ºà½¦à½Š"
+ },
+ "TV": {
+ "name": "à½à½´à¼‹à½à¼‹à½£à½´"
+ },
+ "TC": {
+ "name": "à½à½´à½¢à¾à½¦à¾„་ ཨེནཌ་ ཀ་ཀོས་གླིང་ཚོམ"
+ },
+ "TK": {
+ "name": "à½à½¼à¼‹à½€à½ºà¼‹à½£à½ à½´à¼‹ མཚོ་གླིང"
+ },
+ "TH": {
+ "name": "à½à½±à½ à½²à¼‹à½£à½ºà½“ཌ"
+ },
+ "NA": {
+ "name": "ན་མི་བི་ཡ"
+ },
+ "NR": {
+ "name": "ནའུ་རུ་"
+ },
+ "NE": {
+ "name": "ནཱའི་ཇཱ"
+ },
+ "NG": {
+ "name": "ནཱའི་ཇི་རི་ཡ"
+ },
+ "NI": {
+ "name": "ནི་ཀྲ་à½à¼‹à½‚"
+ },
+ "NU": {
+ "name": "ནི་ཨུ་ཨཻ"
+ },
+ "NC": {
+ "name": "ནིའུ་ཀ་ལི་དོ་ནི་ཡ"
+ },
+ "NZ": {
+ "name": "ནིའུ་ཛི་ལེནཌ"
+ },
+ "EH": {
+ "name": "ནུབ་ཕྱོགས་ ས་ཧཱ་ར"
+ },
+ "NL": {
+ "name": "ནེ་དར་ལནཌས྄"
+ },
+ "NF": {
+ "name": "ནོར་ཕོལཀ་མཚོ་གླིང༌"
+ },
+ "NO": {
+ "name": "ནོར་à½à½º"
+ },
+ "PK": {
+ "name": "པ་ཀི་སà½à½±à½“"
+ },
+ "PA": {
+ "name": "པ་ན་མ"
+ },
+ "PG": {
+ "name": "པ་པུ་ ནིའུ་གི་ནི"
+ },
+ "PY": {
+ "name": "པ་ར་གུ་à½à½ à½²"
+ },
+ "PW": {
+ "name": "པ་ལའུ"
+ },
+ "PN": {
+ "name": "པིཊ་ཀེ་ཡེརན་གླིང་ཚོམ"
+ },
+ "PR": {
+ "name": "པུ་འེར་ཊོ་རི་à½à½¼"
+ },
+ "PE": {
+ "name": "པེ་རུ"
+ },
+ "PS": {
+ "name": "པེ་ལིསི་ཊི་ནི་ཡན་ཊེ་རི་à½à½¼à¼‹à½¢à½²"
+ },
+ "PL": {
+ "name": "པོ་ལེནཌ"
+ },
+ "PT": {
+ "name": "པོར་ཅུ་གཱལ"
+ },
+ "TF": {
+ "name": "ཕྲནཅ་གི་ལྷོ་ཕྱོགས་མངའ་à½à½¼à½„ས"
+ },
+ "FR": {
+ "name": "ཕྲཱནས"
+ },
+ "PF": {
+ "name": "ཕྲཱནས྄་ཀྱི་པོ་ལི་ནི་ཤི་ཡ"
+ },
+ "FK": {
+ "name": "ཕལà¾à¼‹à½£à½“ྜ་གླིང་ཚོམ"
+ },
+ "FO": {
+ "name": "ཕཱའེ་རོ་གླིང་ཚོམ"
+ },
+ "FJ": {
+ "name": "ཕི་ཇི"
+ },
+ "PH": {
+ "name": "ཕི་ལི་པིནས"
+ },
+ "FI": {
+ "name": "ཕིན་ལེནཌ"
+ },
+ "VA": {
+ "name": "བ་ཊི་ཀཱན་ སི་ཊི"
+ },
+ "BD": {
+ "name": "བངྒ་ལ་དེཤ"
+ },
+ "KP": {
+ "name": "བྱང་ ཀོ་རི་ཡ"
+ },
+ "MP": {
+ "name": "བྱང་ཕྱོགས་ཀྱི་མ་ར་ཡ་ན་གླིང་ཚོམ"
+ },
+ "BM": {
+ "name": "བར་མུ་ཌ"
+ },
+ "BR": {
+ "name": "བྲ་ཛིལ"
+ },
+ "IO": {
+ "name": "བྲི་ཊིཤ་རྒྱ་གར་གྱི་རྒྱ་མཚོ་ས་à½à½¼à½„ས"
+ },
+ "NP": {
+ "name": "བལ་ཡུལ"
+ },
+ "BH": {
+ "name": "བྷ་རེན"
+ },
+ "BS": {
+ "name": "བྷ་ཧ་མས྄"
+ },
+ "BF": {
+ "name": "བྷར་ཀི་ན་ ཕེ་སོ"
+ },
+ "BB": {
+ "name": "བྷར་བེ་ཌོས"
+ },
+ "BN": {
+ "name": "བྷྲུ་ནའི"
+ },
+ "BI": {
+ "name": "བྷུ་རུན་ཌི"
+ },
+ "BJ": {
+ "name": "བྷེ་ནིན"
+ },
+ "BO": {
+ "name": "བྷེ་ལི་བི་ཡ"
+ },
+ "BZ": {
+ "name": "བྷེ་ལིཛ"
+ },
+ "BE": {
+ "name": "བྷེལ་ཇམ"
+ },
+ "BW": {
+ "name": "བྷོཙ་à½à¼‹à½“"
+ },
+ "BA": {
+ "name": "བྷོས་ནི་ཡ་ ཨེནཌ་ ཧར་ཛི་གྷོ་བི་ན"
+ },
+ "BG": {
+ "name": "བུལ་ག་རི་ཡ"
+ },
+ "VE": {
+ "name": "བེ་ནི་ཛུ་à½à½ºà¼‹à½£"
+ },
+ "VN": {
+ "name": "བེཊ་ནཱམ"
+ },
+ "BY": {
+ "name": "བེལ་ཨ་རུ་སུ"
+ },
+ "MG": {
+ "name": "མ་དཱ་གེས་ཀར"
+ },
+ "MW": {
+ "name": "མ་ལ་à½à½²"
+ },
+ "MY": {
+ "name": "མ་ལེ་ཤི་ཡ"
+ },
+ "MK": {
+ "name": "མ་སེ་ཌོ་ནི་ཡ"
+ },
+ "MO": {
+ "name": "མཀ་ཨའུ་ཅཱའི་ན"
+ },
+ "FM": {
+ "name": "མའི་ཀྲོ་ནི་ཤི་ཡ"
+ },
+ "MH": {
+ "name": "མར་ཤེལ་གླིང་ཚོམ"
+ },
+ "ML": {
+ "name": "མཱ་ལི"
+ },
+ "MQ": {
+ "name": "མཱར་ཊི་ནིཀ"
+ },
+ "MT": {
+ "name": "མཱལ་ཊ"
+ },
+ "MV": {
+ "name": "མཱལ་དིབས"
+ },
+ "MM": {
+ "name": "མི་ཡཱན་མར་ (བྷར་མ)"
+ },
+ "YT": {
+ "name": "མེ་ཡོཊ"
+ },
+ "MX": {
+ "name": "མེཀ་སི་ཀོ"
+ },
+ "MC": {
+ "name": "མོ་ན་ཀོ"
+ },
+ "MZ": {
+ "name": "མོ་ཛམ་བྷིཀ"
+ },
+ "MR": {
+ "name": "མོ་རི་ཊེ་ནི་ཡ"
+ },
+ "MU": {
+ "name": "མོ་རི་ཤཱས"
+ },
+ "MA": {
+ "name": "མོ་རོ་ཀོ"
+ },
+ "ME": {
+ "name": "མོན་ཊི་ནེག་རོ"
+ },
+ "MS": {
+ "name": "མོན་ས་རཊ"
+ },
+ "MD": {
+ "name": "མོལ་དོ་བཱ"
+ },
+ "ZM": {
+ "name": "ཛམ་བྷི་ཡ"
+ },
+ "ZW": {
+ "name": "ཛིམ་བྷབ་à½à½º"
+ },
+ "VU": {
+ "name": "à½à¼‹à½“ུ་ཨ་à½à½´"
+ },
+ "VG": {
+ "name": "à½à½¢à½‡à½²à½“་གླིང་ཚོམ་ བྲཱི་ཊིཤ་མངའ་à½à½¼à½„ས"
+ },
+ "VI": {
+ "name": "à½à½¢à½‡à½²à½“་གླིང་ཚོམ་ ཡུ་ཨེས་ཨེ་མངའ་à½à½¼à½„ས"
+ },
+ "WF": {
+ "name": "à½à½£à¼‹à½£à½²à½¦à¾„་ ཨེནཌ་ ཕུ་à½à½´à¼‹à½“་"
+ },
+ "BT": {
+ "name": "འབྲུག"
+ },
+ "AQ": {
+ "name": "འཛམ་གླིང་ལྷོ་མà½à½ à½²à¼‹à½à¾±à½‚ས་གླིང"
+ },
+ "UA": {
+ "name": "ཡུ་ཀརེན"
+ },
+ "UG": {
+ "name": "ཡུ་གྷན་ཌ"
+ },
+ "GB": {
+ "name": "ཡུ་ནཱའི་ཊེཌ་ ཀིང་ཌམ"
+ },
+ "AE": {
+ "name": "ཡུ་ནཱའི་ཊེཌ་ ཨ་རབ་ ཨེ་མེ་རེཊས"
+ },
+ "UY": {
+ "name": "ཡུ་རུ་གུ་à½à½ à½²"
+ },
+ "UM": {
+ "name": "ཡུ་ཨེས་གྱི་མà½à½ à¼‹à½˜à½šà½˜à½¦à¼‹à½˜à½šà½¼à¼‹à½‚ླིང་"
+ },
+ "US": {
+ "name": "ཡུ་ཨེས་ཨེ"
+ },
+ "YE": {
+ "name": "ཡེ་མེན"
+ },
+ "IN": {
+ "name": "རྒྱ་གར"
+ },
+ "CN": {
+ "name": "རྒྱ་ནག"
+ },
+ "RW": {
+ "name": "རུ་à½à½“་ཌ"
+ },
+ "RE": {
+ "name": "རེ་ཡུ་ནི་ཡོན"
+ },
+ "RO": {
+ "name": "རོ་མེ་ནི་ཡ"
+ },
+ "LU": {
+ "name": "ལག་ཛམ་བོརྒ"
+ },
+ "LV": {
+ "name": "ལཊ་བི་ཡ"
+ },
+ "KR": {
+ "name": "ལྷོ་ ཀོ་རི་ཡ"
+ },
+ "LA": {
+ "name": "ལཱ་à½à½¼à½¦"
+ },
+ "LR": {
+ "name": "ལཱའི་བེ་རི་ཡ"
+ },
+ "LT": {
+ "name": "ལི་à½à½´à¼‹à½à½ºà¼‹à½“ི་ཡ"
+ },
+ "LY": {
+ "name": "ལི་བི་ཡ"
+ },
+ "LI": {
+ "name": "ལིཀ་à½à½“ས་à½à¼‹à½¡à½²à½“"
+ },
+ "LB": {
+ "name": "ལེ་བ་ནོན"
+ },
+ "LS": {
+ "name": "ལཻ་སོ་à½à½¼"
+ },
+ "LK": {
+ "name": "ཤྲཱི་ལང་ཀ"
+ },
+ "WS": {
+ "name": "ས་མོ་ཨ"
+ },
+ "AS": {
+ "name": "ས་མོ་ཨ་ཡུ་ཨེས་ཨེ་མངའ་à½à½¼à½„ས"
+ },
+ "ST": {
+ "name": "སà½à¼‹ ཊོ་མེ་ ཨེནཌ་ པྲྀན་སི་པེ"
+ },
+ "SJ": {
+ "name": "སྭཱལ་བྷརྡ་ ཨེནཌ་ ཇཱན་མ་ཡེན"
+ },
+ "SM": {
+ "name": "སཱན་མ་རི་ནོ"
+ },
+ "SA": {
+ "name": "སཱà½à¼‹à½‘ི་ ཨ་རེ་བྷི་ཡ"
+ },
+ "CY": {
+ "name": "སཱའི་པྲས"
+ },
+ "SS": {
+ "name": "སཱའུà½à¼‹ སུ་ཌཱན"
+ },
+ "ZA": {
+ "name": "སཱའུà½à¼‹ ཨཕ་རི་ཀ"
+ },
+ "GS": {
+ "name": "སཱའུà½à¼‹à½‡à½½à½¢à¼‹à½‡à½±à¼‹ དང་ སཱའུà½à¼‹à½¦à½ºà½“ཌ྄་à½à½²à½…་གླིང་ཚོམ"
+ },
+ "RS": {
+ "name": "སཱར་བྷི་ཡ"
+ },
+ "SL": {
+ "name": "སི་ར་ ལི་འོན"
+ },
+ "SY": {
+ "name": "སི་རི་ཡ"
+ },
+ "SG": {
+ "name": "སིང་ག་པོར"
+ },
+ "SX": {
+ "name": "སིནཊ་ མཱར་ཊེན"
+ },
+ "PM": {
+ "name": "སིནཊ་པི་ཡེར་ ཨེནཌ་ མིཀོ་ལེན"
+ },
+ "SD": {
+ "name": "སུ་ཌཱན"
+ },
+ "SZ": {
+ "name": "སུ་à½à¼‹à½›à½²à¼‹à½£à½ºà½“ཌ"
+ },
+ "CH": {
+ "name": "སུ་à½à½²à½Šà¼‹à½›à½¢à¼‹à½£à½ºà½“ཌ"
+ },
+ "SR": {
+ "name": "སུ་རི་ནཱམ"
+ },
+ "SK": {
+ "name": "སུ་ལོ་བཱ་ཀི་ཡ"
+ },
+ "SI": {
+ "name": "སུ་ལོ་བི་ནི་ཡ"
+ },
+ "SE": {
+ "name": "སུའི་ཌེན"
+ },
+ "SN": {
+ "name": "སེ་ནི་གྷལ"
+ },
+ "SC": {
+ "name": "སེ་ཤཱལས"
+ },
+ "EA": {
+ "name": "སེ་ཨུ་à½à¼‹ ཨེནཌ་ མེལ་ལི་ལ"
+ },
+ "CF": {
+ "name": "སེན་ཊལ་ ཨཕ་རི་ཀཱན་ རི་པབ་ལིཀ"
+ },
+ "KN": {
+ "name": "སེནཊ་ ཀིཊས་ དང་ ནེ་བིས"
+ },
+ "BL": {
+ "name": "སེནཊ་ བར་à½à½¼à¼‹à½£à½¼à½˜à¼‹à½˜à½²à½ à½´"
+ },
+ "MF": {
+ "name": "སེནཊ་ མཱར་ཊིན"
+ },
+ "LC": {
+ "name": "སེནཊ་ ལུ་སི་ཡ"
+ },
+ "SH": {
+ "name": "སེནཊ་ ཧེ་ལི་ན"
+ },
+ "VC": {
+ "name": "སེནཊ་à½à½²à½“་སེནཌ྄ ཨེནཌ་ གི་རེ་ན་དིནས྄"
+ },
+ "SO": {
+ "name": "སོ་མ་ལི་ཡ"
+ },
+ "SB": {
+ "name": "སོ་ལོ་མོན་ གླིང་ཚོམ"
+ },
+ "MN": {
+ "name": "སོག་པོ་ཡུལ"
+ },
+ "HU": {
+ "name": "ཧཱང་གྷ་རི"
+ },
+ "HN": {
+ "name": "ཧཱན་ཌུ་རཱས྄"
+ },
+ "HT": {
+ "name": "ཧེ་ཊི"
+ },
+ "HK": {
+ "name": "ཧོང་ཀོང་ཅཱའི་ན"
+ },
+ "AZ": {
+ "name": "ཨ་ཛར་བྷའི་ཇཱན"
+ },
+ "IM": {
+ "name": "ཨ་ཡུལ་ ཨོཕ་ མཱན"
+ },
+ "AW": {
+ "name": "ཨ་རུ་བཱ"
+ },
+ "AX": {
+ "name": "ཨ་ལནཌ་གླིང་ཚོམ"
+ },
+ "AO": {
+ "name": "ཨང་གྷོ་ལ"
+ },
+ "AI": {
+ "name": "ཨང་གི་ལ"
+ },
+ "AG": {
+ "name": "ཨན་ཊི་གུ་à½à¼‹ ཨེནཌ་ བྷར་བྷུ་ཌ"
+ },
+ "AF": {
+ "name": "ཨཕ་གྷ་ནི་སà½à½±à½“"
+ },
+ "AR": {
+ "name": "ཨར་ཇེན་ཊི་ན"
+ },
+ "AM": {
+ "name": "ཨར་མི་ནི་ཡ"
+ },
+ "IE": {
+ "name": "ཨཱ་ཡ་ལེནཌ"
+ },
+ "AD": {
+ "name": "ཨཱན་དོ་ར"
+ },
+ "IS": {
+ "name": "ཨཱའིས་ལེནཌ"
+ },
+ "DZ": {
+ "name": "ཨཱལ་ཇི་རི་ཡ"
+ },
+ "AL": {
+ "name": "ཨཱལ་བེ་ནི་ཡ"
+ },
+ "AT": {
+ "name": "ཨཱོས་ཊྲི་ཡ"
+ },
+ "AU": {
+ "name": "ཨཱོས་ཊྲེལ་ལི་ཡ"
+ },
+ "EG": {
+ "name": "ཨི་ཇིབཊ"
+ },
+ "IT": {
+ "name": "ཨི་ཊ་ལི"
+ },
+ "ET": {
+ "name": "ཨི་à½à½²à¼‹à½¡à½¼à¼‹à½”ི་ཡ"
+ },
+ "IQ": {
+ "name": "ཨི་རཱཀ"
+ },
+ "IR": {
+ "name": "ཨི་རཱན"
+ },
+ "ID": {
+ "name": "ཨིན་ཌོ་ནེ་ཤི་ཡ"
+ },
+ "ES": {
+ "name": "ཨིས་པེན"
+ },
+ "IL": {
+ "name": "ཨིས་ར་ཡེལ"
+ },
+ "RU": {
+ "name": "ཨུ་རུ་སུ"
+ },
+ "UZ": {
+ "name": "ཨུས་བེག་གི་སà½à½±à½“"
+ },
+ "GQ": {
+ "name": "ཨེ་ཀུ་ཊོ་རེལ་ གི་ནི"
+ },
+ "EC": {
+ "name": "ཨེ་à½à¾­à¼‹à½Œà½¼à½¢"
+ },
+ "ER": {
+ "name": "ཨེ་རི་ཊྲེ་ཡ"
+ },
+ "AC": {
+ "name": "ཨེ་སེན་ཤུན་ཚོ་གླིང༌"
+ },
+ "SV": {
+ "name": "ཨེལ་སལ་བ་ཌོར"
+ },
+ "EE": {
+ "name": "ཨེས་ཊོ་ནི་ཡ"
+ },
+ "OM": {
+ "name": "ཨོ་མཱན"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ebu.json b/library/intl/resources/country/ebu.json
new file mode 100644
index 000000000..e57db8007
--- /dev/null
+++ b/library/intl/resources/country/ebu.json
@@ -0,0 +1,761 @@
+{
+ "ZA": {
+ "name": "Afrika Kusini"
+ },
+ "AF": {
+ "name": "Afuganistani"
+ },
+ "IS": {
+ "name": "Aislandi"
+ },
+ "AR": {
+ "name": "Ajentina"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljeria"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua na Barbuda"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "IE": {
+ "name": "Ayalandi"
+ },
+ "AZ": {
+ "name": "Azabajani"
+ },
+ "BB": {
+ "name": "Babadosi"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BH": {
+ "name": "Bahareni"
+ },
+ "BD": {
+ "name": "Bangladeshi"
+ },
+ "BY": {
+ "name": "Belarusi"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia na Hezegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazili"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BF": {
+ "name": "Bukinafaso"
+ },
+ "MG": {
+ "name": "Bukini"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denmaki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekwado"
+ },
+ "SV": {
+ "name": "Elsavado"
+ },
+ "IO": {
+ "name": "Eneo la Uingereza katika Bahari Hindi"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "AE": {
+ "name": "Falme za Kiarabu"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipino"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Ginebisau"
+ },
+ "GQ": {
+ "name": "Ginekweta"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grinlandi"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GP": {
+ "name": "Gwadelupe"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GF": {
+ "name": "Gwiyana ya Ufaransa"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ES": {
+ "name": "Hispania"
+ },
+ "HN": {
+ "name": "Hondurasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungaria"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israeli"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "CF": {
+ "name": "Jamhuri ya Afrika ya Kati"
+ },
+ "CZ": {
+ "name": "Jamhuri ya Cheki"
+ },
+ "DO": {
+ "name": "Jamhuri ya Dominika"
+ },
+ "CD": {
+ "name": "Jamhuri ya Kidemokrasia ya Kongo"
+ },
+ "JP": {
+ "name": "Japani"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibralta"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "GE": {
+ "name": "Jojia"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kameruni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katari"
+ },
+ "KZ": {
+ "name": "Kazakistani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CV": {
+ "name": "Kepuvede"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizistani"
+ },
+ "NF": {
+ "name": "Kisiwa cha Norfok"
+ },
+ "CI": {
+ "name": "Kodivaa"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komoro"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "HR": {
+ "name": "Korasia"
+ },
+ "KP": {
+ "name": "Korea Kaskazini"
+ },
+ "KR": {
+ "name": "Korea Kusini"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CY": {
+ "name": "Kuprosi"
+ },
+ "KW": {
+ "name": "Kuwaiti"
+ },
+ "LA": {
+ "name": "Laosi"
+ },
+ "LU": {
+ "name": "Lasembagi"
+ },
+ "LV": {
+ "name": "Lativia"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Lishenteni"
+ },
+ "LT": {
+ "name": "Litwania"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malesia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "US": {
+ "name": "Marekani"
+ },
+ "MQ": {
+ "name": "Martiniki"
+ },
+ "MK": {
+ "name": "Masedonia"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "FM": {
+ "name": "Mikronesia"
+ },
+ "EG": {
+ "name": "Misri"
+ },
+ "MV": {
+ "name": "Modivu"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrati"
+ },
+ "MU": {
+ "name": "Morisi"
+ },
+ "MR": {
+ "name": "Moritania"
+ },
+ "MA": {
+ "name": "Moroko"
+ },
+ "MZ": {
+ "name": "Msumbiji"
+ },
+ "MM": {
+ "name": "Myama"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "NE": {
+ "name": "Nijeri"
+ },
+ "NG": {
+ "name": "Nijeria"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norwe"
+ },
+ "NC": {
+ "name": "Nyukaledonia"
+ },
+ "NZ": {
+ "name": "Nyuzilandi"
+ },
+ "OM": {
+ "name": "Omani"
+ },
+ "PK": {
+ "name": "Pakistani"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua"
+ },
+ "PY": {
+ "name": "Paragwai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkairni"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PF": {
+ "name": "Polinesia ya Ufaransa"
+ },
+ "PR": {
+ "name": "Pwetoriko"
+ },
+ "RE": {
+ "name": "Riyunioni"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SM": {
+ "name": "Samarino"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa ya Marekani"
+ },
+ "SH": {
+ "name": "Santahelena"
+ },
+ "KN": {
+ "name": "Santakitzi na Nevis"
+ },
+ "LC": {
+ "name": "Santalusia"
+ },
+ "PM": {
+ "name": "Santapieri na Mikeloni"
+ },
+ "VC": {
+ "name": "Santavisenti na Grenadini"
+ },
+ "ST": {
+ "name": "Sao Tome na Principe"
+ },
+ "SA": {
+ "name": "Saudi"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Shelisheli"
+ },
+ "SL": {
+ "name": "Siera Leoni"
+ },
+ "SG": {
+ "name": "Singapoo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "LK": {
+ "name": "Sirilanka"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SR": {
+ "name": "Surinamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandi"
+ },
+ "TW": {
+ "name": "Taiwani"
+ },
+ "TJ": {
+ "name": "Tajikistani"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TL": {
+ "name": "Timori ya Mashariki"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad na Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turukimenistani"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "IR": {
+ "name": "Uajemi"
+ },
+ "BE": {
+ "name": "Ubelgiji"
+ },
+ "FR": {
+ "name": "Ufaransa"
+ },
+ "FI": {
+ "name": "Ufini"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "GR": {
+ "name": "Ugiriki"
+ },
+ "ET": {
+ "name": "Uhabeshi"
+ },
+ "NL": {
+ "name": "Uholanzi"
+ },
+ "GB": {
+ "name": "Uingereza"
+ },
+ "DE": {
+ "name": "Ujerumani"
+ },
+ "PS": {
+ "name": "Ukingo wa Magharibi na Ukanda wa Gaza wa Palestina"
+ },
+ "UA": {
+ "name": "Ukraini"
+ },
+ "PT": {
+ "name": "Ureno"
+ },
+ "UY": {
+ "name": "Urugwai"
+ },
+ "RU": {
+ "name": "Urusi"
+ },
+ "SZ": {
+ "name": "Uswazi"
+ },
+ "SE": {
+ "name": "Uswidi"
+ },
+ "CH": {
+ "name": "Uswisi"
+ },
+ "TR": {
+ "name": "Uturuki"
+ },
+ "UZ": {
+ "name": "Uzibekistani"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietinamu"
+ },
+ "CK": {
+ "name": "Visiwa vya Cook"
+ },
+ "FK": {
+ "name": "Visiwa vya Falkland"
+ },
+ "KY": {
+ "name": "Visiwa vya Kayman"
+ },
+ "MP": {
+ "name": "Visiwa vya Mariana vya Kaskazini"
+ },
+ "MH": {
+ "name": "Visiwa vya Marshal"
+ },
+ "SB": {
+ "name": "Visiwa vya Solomon"
+ },
+ "TC": {
+ "name": "Visiwa vya Turki na Kaiko"
+ },
+ "VI": {
+ "name": "Visiwa vya Virgin vya Marekani"
+ },
+ "VG": {
+ "name": "Visiwa vya Virgin vya Uingereza"
+ },
+ "WF": {
+ "name": "Walis na Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "JO": {
+ "name": "Yordani"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ee.json b/library/intl/resources/country/ee.json
new file mode 100644
index 000000000..e9ef0a4a0
--- /dev/null
+++ b/library/intl/resources/country/ee.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan nutome"
+ },
+ "IS": {
+ "name": "Aiseland nutome"
+ },
+ "IM": {
+ "name": "Aisle of Man nutome"
+ },
+ "AX": {
+ "name": "Ã…land Æ’udomekpo nutome"
+ },
+ "AL": {
+ "name": "Albania nutome"
+ },
+ "DZ": {
+ "name": "Algeria nutome"
+ },
+ "AS": {
+ "name": "Amerika Samoa nutome"
+ },
+ "AD": {
+ "name": "Andorra nutome"
+ },
+ "AO": {
+ "name": "Angola nutome"
+ },
+ "AI": {
+ "name": "Anguilla nutome"
+ },
+ "AQ": {
+ "name": "Antartica nutome"
+ },
+ "AG": {
+ "name": "ÌAntigua kple Barbuda nutome"
+ },
+ "ZA": {
+ "name": "Anyiehe Afrika nutome"
+ },
+ "TF": {
+ "name": "Anyiehe Franseme nutome"
+ },
+ "GS": {
+ "name": "Anyiehe Georgia kple Anyiehe Sandwich Æ’udomekpowo nutome"
+ },
+ "KR": {
+ "name": "Anyiehe Korea nutome"
+ },
+ "SS": {
+ "name": "Anyiehe Sudan nutome"
+ },
+ "AR": {
+ "name": "Argentina nutome"
+ },
+ "AM": {
+ "name": "Armenia nutome"
+ },
+ "AW": {
+ "name": "Aruba nutome"
+ },
+ "AC": {
+ "name": "Ascension Æ’udomekpo nutome"
+ },
+ "AU": {
+ "name": "Australia nutome"
+ },
+ "AT": {
+ "name": "Austria nutome"
+ },
+ "AZ": {
+ "name": "Azerbaijan nutome"
+ },
+ "BS": {
+ "name": "Bahamas nutome"
+ },
+ "BH": {
+ "name": "Bahrain nutome"
+ },
+ "BD": {
+ "name": "Bangladesh nutome"
+ },
+ "BB": {
+ "name": "Barbados nutome"
+ },
+ "BY": {
+ "name": "Belarus nutome"
+ },
+ "BE": {
+ "name": "Belgium nutome"
+ },
+ "BZ": {
+ "name": "Belize nutome"
+ },
+ "BJ": {
+ "name": "Benin nutome"
+ },
+ "BM": {
+ "name": "Bermuda nutome"
+ },
+ "BT": {
+ "name": "Bhutan nutome"
+ },
+ "BO": {
+ "name": "Bolivia nutome"
+ },
+ "BA": {
+ "name": "Bosnia kple Herzergovina nutome"
+ },
+ "BW": {
+ "name": "Botswana nutome"
+ },
+ "BR": {
+ "name": "Brazil nutome"
+ },
+ "IO": {
+ "name": "Britaintɔwo ƒe india ƒudome nutome"
+ },
+ "VG": {
+ "name": "Britaintɔwo ƒe Virgin ƒudomekpowo nutome"
+ },
+ "BN": {
+ "name": "Brunei nutome"
+ },
+ "BG": {
+ "name": "Bulgaria nutome"
+ },
+ "BF": {
+ "name": "Burkina Faso nutome"
+ },
+ "BI": {
+ "name": "Burundi nutome"
+ },
+ "DK": {
+ "name": "Denmark nutome"
+ },
+ "DG": {
+ "name": "Diego Garsia nutome"
+ },
+ "DM": {
+ "name": "Dominika nutome"
+ },
+ "DO": {
+ "name": "Dominika repɔblik nutome"
+ },
+ "JM": {
+ "name": "Dzamaika nutome"
+ },
+ "JP": {
+ "name": "Dzapan nutome"
+ },
+ "JE": {
+ "name": "Dzɛse nutome"
+ },
+ "DJ": {
+ "name": "Dzibuti nutome"
+ },
+ "KP": {
+ "name": "Dziehe Korea nutome"
+ },
+ "MP": {
+ "name": "Dziehe Marina Æ’udomekpowo nutome"
+ },
+ "EG": {
+ "name": "Egypte nutome"
+ },
+ "EC": {
+ "name": "EkuadÉ” nutome"
+ },
+ "GQ": {
+ "name": "Ekuatorial Guini nutome"
+ },
+ "SV": {
+ "name": "El SalvadÉ” nutome"
+ },
+ "ER": {
+ "name": "Eritrea nutome"
+ },
+ "EE": {
+ "name": "Estonia nutome"
+ },
+ "ET": {
+ "name": "Etiopia nutome"
+ },
+ "FK": {
+ "name": "Falkland Æ’udomekpowo nutome"
+ },
+ "FO": {
+ "name": "Faroe Æ’udomekpowo nutome"
+ },
+ "FJ": {
+ "name": "Fidzi nutome"
+ },
+ "PH": {
+ "name": "Filipini nutome"
+ },
+ "FI": {
+ "name": "Finland nutome"
+ },
+ "FR": {
+ "name": "Frans nutome"
+ },
+ "GF": {
+ "name": "Frentsi Gayana nutome"
+ },
+ "PF": {
+ "name": "Frentsi Pɔlinesia nutome"
+ },
+ "GA": {
+ "name": "Gabɔn nutome"
+ },
+ "GM": {
+ "name": "Gambia nutome"
+ },
+ "GE": {
+ "name": "Georgia nutome"
+ },
+ "DE": {
+ "name": "Germania nutome"
+ },
+ "GH": {
+ "name": "Ghana nutome"
+ },
+ "GI": {
+ "name": "Gibraltar nutome"
+ },
+ "GW": {
+ "name": "Gini-Bisao nutome"
+ },
+ "GD": {
+ "name": "Grenada nutome"
+ },
+ "GL": {
+ "name": "Grinland nutome"
+ },
+ "GR": {
+ "name": "Grisi nutome"
+ },
+ "GP": {
+ "name": "Guadelupe nutome"
+ },
+ "GU": {
+ "name": "Guam nutome"
+ },
+ "GT": {
+ "name": "Guatemala nutome"
+ },
+ "GG": {
+ "name": "Guernse nutome"
+ },
+ "GN": {
+ "name": "Guini nutome"
+ },
+ "GY": {
+ "name": "Guyanadu"
+ },
+ "EH": {
+ "name": "Ɣetoɖoƒe Sahara nutome"
+ },
+ "HT": {
+ "name": "Haiti nutome"
+ },
+ "HN": {
+ "name": "Hondurasdu"
+ },
+ "HK": {
+ "name": "Hɔng Kɔng SAR Tsaina nutome"
+ },
+ "HU": {
+ "name": "Hungari nutome"
+ },
+ "IN": {
+ "name": "India nutome"
+ },
+ "ID": {
+ "name": "Indonesia nutome"
+ },
+ "IR": {
+ "name": "Iran nutome"
+ },
+ "IQ": {
+ "name": "iraqdukÉ”"
+ },
+ "IE": {
+ "name": "Ireland nutome"
+ },
+ "IL": {
+ "name": "Israel nutome"
+ },
+ "IT": {
+ "name": "Italia nutome"
+ },
+ "KH": {
+ "name": "Kambodia nutome"
+ },
+ "CM": {
+ "name": "Kamerun nutome"
+ },
+ "CA": {
+ "name": "Kanada nutome"
+ },
+ "IC": {
+ "name": "Kanari Æ’udomekpowo nutome"
+ },
+ "CV": {
+ "name": "Kape Verde nutome"
+ },
+ "BQ": {
+ "name": "Karibbeatɔwo ƒe Nedalanɖs nutome"
+ },
+ "QA": {
+ "name": "Katar nutome"
+ },
+ "KY": {
+ "name": "Kayman Æ’udomekpowo nutome"
+ },
+ "KZ": {
+ "name": "Kazakstan nutome"
+ },
+ "KE": {
+ "name": "Kenya nutome"
+ },
+ "EA": {
+ "name": "Keuta and Melilla nutome"
+ },
+ "KG": {
+ "name": "Kirgizstan nutome"
+ },
+ "KI": {
+ "name": "Kiribati nutome"
+ },
+ "CC": {
+ "name": "Kokos (Kiling) fudomekpo nutome"
+ },
+ "CO": {
+ "name": "Kolombia nutome"
+ },
+ "KM": {
+ "name": "Komoros nutome"
+ },
+ "CG": {
+ "name": "Kongo Brazzaville nutome"
+ },
+ "CD": {
+ "name": "Kongo Kinshasa nutome"
+ },
+ "CK": {
+ "name": "Kook Æ’udomekpo nutome"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kosta Rika nutome"
+ },
+ "CI": {
+ "name": "Kote d’Ivoire nutome"
+ },
+ "CX": {
+ "name": "Kristmas Æ’udomekpo nutome"
+ },
+ "HR": {
+ "name": "Kroatsia nutome"
+ },
+ "CU": {
+ "name": "Kuba nutome"
+ },
+ "CW": {
+ "name": "Kurakao nutome"
+ },
+ "KW": {
+ "name": "Kuwait nutome"
+ },
+ "LA": {
+ "name": "Laos nutome"
+ },
+ "LV": {
+ "name": "Latvia nutome"
+ },
+ "LU": {
+ "name": "Lazembɔg nutome"
+ },
+ "LB": {
+ "name": "Lebanɔn nutome"
+ },
+ "LS": {
+ "name": "Lɛsoto nutome"
+ },
+ "LR": {
+ "name": "Liberia nutome"
+ },
+ "LY": {
+ "name": "Libya nutome"
+ },
+ "LI": {
+ "name": "Litsenstein nutome"
+ },
+ "LT": {
+ "name": "Lituania nutome"
+ },
+ "MO": {
+ "name": "Macau SAR Tsaina nutome"
+ },
+ "MG": {
+ "name": "Madagaska nutome"
+ },
+ "MK": {
+ "name": "Makedonia nutome"
+ },
+ "MW": {
+ "name": "Malawi nutome"
+ },
+ "MY": {
+ "name": "Malaysia nutome"
+ },
+ "MV": {
+ "name": "maldivesdukÉ”"
+ },
+ "ML": {
+ "name": "Mali nutome"
+ },
+ "MT": {
+ "name": "Malta nutome"
+ },
+ "MH": {
+ "name": "Marshal Æ’udomekpowo nutome"
+ },
+ "MQ": {
+ "name": "Martiniki nutome"
+ },
+ "MR": {
+ "name": "Mauritania nutome"
+ },
+ "MU": {
+ "name": "mauritiusdukÉ”"
+ },
+ "YT": {
+ "name": "Mayotte nutome"
+ },
+ "MX": {
+ "name": "Meksico nutome"
+ },
+ "FM": {
+ "name": "Mikronesia nutome"
+ },
+ "MD": {
+ "name": "Moldova nutome"
+ },
+ "MC": {
+ "name": "Monako nutome"
+ },
+ "MN": {
+ "name": "Mongolia nutome"
+ },
+ "ME": {
+ "name": "Montenegro nutome"
+ },
+ "MS": {
+ "name": "Montserrat nutome"
+ },
+ "MA": {
+ "name": "Moroko nutome"
+ },
+ "MZ": {
+ "name": "Mozambiki nutome"
+ },
+ "MM": {
+ "name": "Myanmar (Burma) nutome"
+ },
+ "NA": {
+ "name": "Namibia nutome"
+ },
+ "NR": {
+ "name": "Nauru nutome"
+ },
+ "NL": {
+ "name": "Nedalands nutome"
+ },
+ "NP": {
+ "name": "Nepal nutome"
+ },
+ "NC": {
+ "name": "New Kaledonia nutome"
+ },
+ "NZ": {
+ "name": "New Zealand nutome"
+ },
+ "NI": {
+ "name": "NicaraguadukÉ”"
+ },
+ "NE": {
+ "name": "Niger nutome"
+ },
+ "NG": {
+ "name": "Nigeria nutome"
+ },
+ "NU": {
+ "name": "Niue nutome"
+ },
+ "NF": {
+ "name": "Norfolk Æ’udomekpo nutome"
+ },
+ "NO": {
+ "name": "Norway nutome"
+ },
+ "OM": {
+ "name": "Oman nutome"
+ },
+ "PK": {
+ "name": "Pakistan nutome"
+ },
+ "PW": {
+ "name": "Palau nutome"
+ },
+ "PS": {
+ "name": "Palestinia nutome"
+ },
+ "PA": {
+ "name": "Panama nutome"
+ },
+ "PG": {
+ "name": "Papua New Gini nutome"
+ },
+ "PY": {
+ "name": "Paragua nutome"
+ },
+ "PE": {
+ "name": "Peru nutome"
+ },
+ "PN": {
+ "name": "Pitkairn Æ’udomekpo nutome"
+ },
+ "PL": {
+ "name": "Poland nutome"
+ },
+ "PT": {
+ "name": "Portugal nutome"
+ },
+ "PR": {
+ "name": "Puerto Riko nutome"
+ },
+ "RE": {
+ "name": "Réunion nutome"
+ },
+ "RO": {
+ "name": "Romania nutome"
+ },
+ "RU": {
+ "name": "Russia nutome"
+ },
+ "RW": {
+ "name": "Rwanda nutome"
+ },
+ "BL": {
+ "name": "Saint Barthélemy nutome"
+ },
+ "SH": {
+ "name": "Saint Helena nutome"
+ },
+ "KN": {
+ "name": "Saint Kitis kple Nevis nutome"
+ },
+ "LC": {
+ "name": "Saint Lusia nutome"
+ },
+ "MF": {
+ "name": "Saint Martin nutome"
+ },
+ "PM": {
+ "name": "Saint Pierre kple Mikelɔn nutome"
+ },
+ "VC": {
+ "name": "Saint Vincent kple Grenadine nutome"
+ },
+ "CY": {
+ "name": "Saiprus nutome"
+ },
+ "WS": {
+ "name": "Samoa nutome"
+ },
+ "SM": {
+ "name": "San Marino nutome"
+ },
+ "ST": {
+ "name": "São Tomé kple Príncipe nutome"
+ },
+ "SA": {
+ "name": "Saudi Arabia nutome"
+ },
+ "SN": {
+ "name": "Senegal nutome"
+ },
+ "RS": {
+ "name": "Serbia nutome"
+ },
+ "SC": {
+ "name": "Seshɛls nutome"
+ },
+ "SL": {
+ "name": "Sierra Leone nutome"
+ },
+ "SG": {
+ "name": "Singapɔr nutome"
+ },
+ "SX": {
+ "name": "Sint Maarten nutome"
+ },
+ "SY": {
+ "name": "Siria nutome"
+ },
+ "SK": {
+ "name": "Slovakia nutome"
+ },
+ "SI": {
+ "name": "Slovenia nutome"
+ },
+ "SB": {
+ "name": "Solomon Æ’udomekpowo nutome"
+ },
+ "SO": {
+ "name": "Somalia nutome"
+ },
+ "ES": {
+ "name": "Spania nutome"
+ },
+ "LK": {
+ "name": "Sri Lanka nutome"
+ },
+ "SD": {
+ "name": "Sudan nutome"
+ },
+ "SR": {
+ "name": "Suriname nutome"
+ },
+ "SJ": {
+ "name": "Svalbard kple Yan Mayen nutome"
+ },
+ "SZ": {
+ "name": "Swaziland nutome"
+ },
+ "SE": {
+ "name": "Sweden nutome"
+ },
+ "CH": {
+ "name": "Switzerland nutome"
+ },
+ "TH": {
+ "name": "Tailand nutome"
+ },
+ "TW": {
+ "name": "Taiwan nutome"
+ },
+ "TJ": {
+ "name": "Tajikistan nutome"
+ },
+ "TZ": {
+ "name": "Tanzania nutome"
+ },
+ "TR": {
+ "name": "Tɛki nutome"
+ },
+ "TM": {
+ "name": "Tɛkmenistan nutome"
+ },
+ "TC": {
+ "name": "Tɛks kple Kaikos ƒudomekpowo nutome"
+ },
+ "TL": {
+ "name": "Timor-Leste nutome"
+ },
+ "CF": {
+ "name": "Titina Afrika repɔblik nutome"
+ },
+ "TG": {
+ "name": "Togo nutome"
+ },
+ "TK": {
+ "name": "Tokelau nutome"
+ },
+ "TO": {
+ "name": "Tonga nutome"
+ },
+ "TT": {
+ "name": "Trinidad kple Tobago nutome"
+ },
+ "TA": {
+ "name": "Tristan da Kunha nutome"
+ },
+ "TD": {
+ "name": "Tsad nutome"
+ },
+ "CN": {
+ "name": "Tsaina nutome"
+ },
+ "CZ": {
+ "name": "Tsɛk repɔblik nutome"
+ },
+ "CL": {
+ "name": "Tsile nutome"
+ },
+ "TN": {
+ "name": "Tunisia nutome"
+ },
+ "TV": {
+ "name": "Tuvalu nutome"
+ },
+ "UM": {
+ "name": "U.S. Minor Outlaying Æ’udomekpowo nutome"
+ },
+ "VI": {
+ "name": "U.S. Vɛrgin ƒudomekpowo nutome"
+ },
+ "UG": {
+ "name": "Uganda nutome"
+ },
+ "UA": {
+ "name": "Ukraine nutome"
+ },
+ "AE": {
+ "name": "United Arab Emirates nutome"
+ },
+ "GB": {
+ "name": "United Kingdom nutome"
+ },
+ "UY": {
+ "name": "uruguaydukÉ”"
+ },
+ "US": {
+ "name": "USA nutome"
+ },
+ "UZ": {
+ "name": "Uzbekistan nutome"
+ },
+ "VU": {
+ "name": "Vanuatu nutome"
+ },
+ "VA": {
+ "name": "Vatikandu nutome"
+ },
+ "VE": {
+ "name": "Venezuela nutome"
+ },
+ "VN": {
+ "name": "Vietnam nutome"
+ },
+ "WF": {
+ "name": "Wallis kple Futuna nutome"
+ },
+ "YE": {
+ "name": "Yemen nutome"
+ },
+ "JO": {
+ "name": "Yordan nutome"
+ },
+ "ZM": {
+ "name": "Zambia nutome"
+ },
+ "ZW": {
+ "name": "Zimbabwe nutome"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/el.json b/library/intl/resources/country/el.json
new file mode 100644
index 000000000..807ae358d
--- /dev/null
+++ b/library/intl/resources/country/el.json
@@ -0,0 +1,761 @@
+{
+ "SH": {
+ "name": "Αγία Ελένη"
+ },
+ "LC": {
+ "name": "Αγία Λουκία"
+ },
+ "BL": {
+ "name": "Άγιος ΒαÏθολομαίος"
+ },
+ "VC": {
+ "name": "Άγιος Βικέντιος και ΓÏεναδίνες"
+ },
+ "SM": {
+ "name": "Άγιος ΜαÏίνος"
+ },
+ "MF": {
+ "name": "Άγιος ΜαÏτίνος (Γαλλικό τμήμα)"
+ },
+ "SX": {
+ "name": "Άγιος ΜαÏτίνος (Ολλανδικό τμήμα)"
+ },
+ "KN": {
+ "name": "Άγιος ΧÏιστόφοÏος και Îέβις"
+ },
+ "AZ": {
+ "name": "ΑζεÏμπαϊτζάν"
+ },
+ "EG": {
+ "name": "Αίγυπτος"
+ },
+ "ET": {
+ "name": "Αιθιοπία"
+ },
+ "HT": {
+ "name": "Αϊτή"
+ },
+ "CI": {
+ "name": "Ακτή ΕλεφαντοστοÏ"
+ },
+ "AL": {
+ "name": "Αλβανία"
+ },
+ "DZ": {
+ "name": "ΑλγεÏία"
+ },
+ "VI": {
+ "name": "ΑμεÏικανικές ΠαÏθένοι Îήσοι"
+ },
+ "AS": {
+ "name": "ΑμεÏικανική Σαμόα"
+ },
+ "AO": {
+ "name": "Ανγκόλα"
+ },
+ "AI": {
+ "name": "Ανγκουίλα"
+ },
+ "AD": {
+ "name": "ΑνδόÏα"
+ },
+ "AQ": {
+ "name": "ΑνταÏκτική"
+ },
+ "AG": {
+ "name": "Αντίγκουα και ΜπαÏμποÏντα"
+ },
+ "UM": {
+ "name": "ΑπομακÏυσμένες Îησίδες Η.Π.Α."
+ },
+ "AR": {
+ "name": "ΑÏγεντινή"
+ },
+ "AM": {
+ "name": "ΑÏμενία"
+ },
+ "AW": {
+ "name": "ΑÏοÏμπα"
+ },
+ "AU": {
+ "name": "ΑυστÏαλία"
+ },
+ "AT": {
+ "name": "ΑυστÏία"
+ },
+ "AF": {
+ "name": "Αφγανιστάν"
+ },
+ "VU": {
+ "name": "Βανουάτου"
+ },
+ "VA": {
+ "name": "Βατικανό"
+ },
+ "BE": {
+ "name": "Βέλγιο"
+ },
+ "VE": {
+ "name": "Βενεζουέλα"
+ },
+ "BM": {
+ "name": "ΒεÏμοÏδες"
+ },
+ "VN": {
+ "name": "Βιετνάμ"
+ },
+ "BO": {
+ "name": "Βολιβία"
+ },
+ "KP": {
+ "name": "Î’ÏŒÏεια ΚοÏέα"
+ },
+ "BA": {
+ "name": "Βοσνία - ΕÏζεγοβίνη"
+ },
+ "BG": {
+ "name": "ΒουλγαÏία"
+ },
+ "BR": {
+ "name": "Î’Ïαζιλία"
+ },
+ "IO": {
+ "name": "Î’Ïετανικά Εδάφη Î™Î½Î´Î¹ÎºÎ¿Ï Î©ÎºÎµÎ±Î½Î¿Ï"
+ },
+ "VG": {
+ "name": "Î’Ïετανικές ΠαÏθένοι Îήσοι"
+ },
+ "FR": {
+ "name": "Γαλλία"
+ },
+ "TF": {
+ "name": "Γαλλικές πεÏιοχές του νοτίου ημισφαιÏίου"
+ },
+ "GF": {
+ "name": "Γαλλική Γουιάνα"
+ },
+ "PF": {
+ "name": "Γαλλική Πολυνησία"
+ },
+ "DE": {
+ "name": "ΓεÏμανία"
+ },
+ "GE": {
+ "name": "ΓεωÏγία"
+ },
+ "GI": {
+ "name": "ΓιβÏαλτάÏ"
+ },
+ "GM": {
+ "name": "Γκάμπια"
+ },
+ "GA": {
+ "name": "Γκαμπόν"
+ },
+ "GH": {
+ "name": "Γκάνα"
+ },
+ "GG": {
+ "name": "ΓκέÏνζι"
+ },
+ "GU": {
+ "name": "Γκουάμ"
+ },
+ "GP": {
+ "name": "ΓουαδελοÏπη"
+ },
+ "GT": {
+ "name": "Γουατεμάλα"
+ },
+ "GY": {
+ "name": "Γουιάνα"
+ },
+ "GN": {
+ "name": "Γουινέα"
+ },
+ "GW": {
+ "name": "Γουινέα Μπισάου"
+ },
+ "GD": {
+ "name": "ΓÏενάδα"
+ },
+ "GL": {
+ "name": "ΓÏοιλανδία"
+ },
+ "DK": {
+ "name": "Δανία"
+ },
+ "DO": {
+ "name": "Δομινικανή ΔημοκÏατία"
+ },
+ "EH": {
+ "name": "Δυτική ΣαχάÏα"
+ },
+ "EC": {
+ "name": "ΕκουαδόÏ"
+ },
+ "SV": {
+ "name": "Ελ ΣαλβαδόÏ"
+ },
+ "CH": {
+ "name": "Ελβετία"
+ },
+ "GR": {
+ "name": "Ελλάδα"
+ },
+ "ER": {
+ "name": "ΕÏυθÏαία"
+ },
+ "EE": {
+ "name": "Εσθονία"
+ },
+ "ZM": {
+ "name": "Ζάμπια"
+ },
+ "ZW": {
+ "name": "Ζιμπάμπουε"
+ },
+ "AE": {
+ "name": "Ηνωμένα ΑÏαβικά ΕμιÏάτα"
+ },
+ "US": {
+ "name": "Ηνωμένες Πολιτείες"
+ },
+ "GB": {
+ "name": "Ηνωμένο Βασίλειο"
+ },
+ "EA": {
+ "name": "ΘεοÏτα και Μελίλα"
+ },
+ "JP": {
+ "name": "Ιαπωνία"
+ },
+ "IN": {
+ "name": "Ινδία"
+ },
+ "ID": {
+ "name": "Ινδονησία"
+ },
+ "JO": {
+ "name": "ΙοÏδανία"
+ },
+ "IQ": {
+ "name": "ΙÏάκ"
+ },
+ "IR": {
+ "name": "ΙÏάν"
+ },
+ "IE": {
+ "name": "ΙÏλανδία"
+ },
+ "GQ": {
+ "name": "ΙσημεÏινή Γουινέα"
+ },
+ "IS": {
+ "name": "Ισλανδία"
+ },
+ "ES": {
+ "name": "Ισπανία"
+ },
+ "IL": {
+ "name": "ΙσÏαήλ"
+ },
+ "IT": {
+ "name": "Ιταλία"
+ },
+ "KZ": {
+ "name": "Καζακστάν"
+ },
+ "CM": {
+ "name": "ΚαμεÏοÏν"
+ },
+ "KH": {
+ "name": "Καμπότζη"
+ },
+ "CA": {
+ "name": "Καναδάς"
+ },
+ "IC": {
+ "name": "ΚανάÏιοι Îήσοι"
+ },
+ "QA": {
+ "name": "ΚατάÏ"
+ },
+ "CF": {
+ "name": "ΚεντÏοαφÏικανική ΔημοκÏατία"
+ },
+ "KE": {
+ "name": "Κένυα"
+ },
+ "CN": {
+ "name": "Κίνα"
+ },
+ "KG": {
+ "name": "ΚιÏγιστάν"
+ },
+ "KI": {
+ "name": "ΚιÏιμπάτι"
+ },
+ "CO": {
+ "name": "Κολομβία"
+ },
+ "KM": {
+ "name": "ΚομόÏες"
+ },
+ "CD": {
+ "name": "Κονγκό - Κινσάσα"
+ },
+ "CG": {
+ "name": "Κονγκό - ΜπÏαζαβίλ"
+ },
+ "XK": {
+ "name": "Κόσοβο"
+ },
+ "CR": {
+ "name": "Κόστα Ρίκα"
+ },
+ "CU": {
+ "name": "ΚοÏβα"
+ },
+ "KW": {
+ "name": "Κουβέιτ"
+ },
+ "CW": {
+ "name": "ΚουÏασάο"
+ },
+ "HR": {
+ "name": "ΚÏοατία"
+ },
+ "CY": {
+ "name": "ΚÏÏ€Ïος"
+ },
+ "LA": {
+ "name": "Λάος"
+ },
+ "LS": {
+ "name": "Λεσότο"
+ },
+ "LV": {
+ "name": "Λετονία"
+ },
+ "BY": {
+ "name": "ΛευκοÏωσία"
+ },
+ "LB": {
+ "name": "Λίβανος"
+ },
+ "LR": {
+ "name": "ΛιβεÏία"
+ },
+ "LY": {
+ "name": "ΛιβÏη"
+ },
+ "LT": {
+ "name": "Λιθουανία"
+ },
+ "LI": {
+ "name": "Λιχτενστάιν"
+ },
+ "LU": {
+ "name": "ΛουξεμβοÏÏγο"
+ },
+ "YT": {
+ "name": "Μαγιότ"
+ },
+ "MG": {
+ "name": "ΜαδαγασκάÏη"
+ },
+ "MO": {
+ "name": "Μακάο ΕΔΠ Κίνας"
+ },
+ "MY": {
+ "name": "Μαλαισία"
+ },
+ "MW": {
+ "name": "Μαλάουι"
+ },
+ "MV": {
+ "name": "Μαλδίβες"
+ },
+ "ML": {
+ "name": "Μάλι"
+ },
+ "MT": {
+ "name": "Μάλτα"
+ },
+ "MA": {
+ "name": "ΜαÏόκο"
+ },
+ "MQ": {
+ "name": "ΜαÏτινίκα"
+ },
+ "MU": {
+ "name": "ΜαυÏίκιος"
+ },
+ "MR": {
+ "name": "ΜαυÏιτανία"
+ },
+ "ME": {
+ "name": "ΜαυÏοβοÏνιο"
+ },
+ "MX": {
+ "name": "Μεξικό"
+ },
+ "MM": {
+ "name": "ΜιανμάÏ\/ΒιÏμανία"
+ },
+ "FM": {
+ "name": "ΜικÏονησία"
+ },
+ "MN": {
+ "name": "Μογγολία"
+ },
+ "MZ": {
+ "name": "Μοζαμβίκη"
+ },
+ "MD": {
+ "name": "Μολδαβία"
+ },
+ "MC": {
+ "name": "Μονακό"
+ },
+ "MS": {
+ "name": "ΜονσεÏάτ"
+ },
+ "BD": {
+ "name": "Μπανγκλαντές"
+ },
+ "BB": {
+ "name": "ΜπαÏμπάντος"
+ },
+ "BS": {
+ "name": "Μπαχάμες"
+ },
+ "BH": {
+ "name": "ΜπαχÏέιν"
+ },
+ "BZ": {
+ "name": "Μπελίζ"
+ },
+ "BJ": {
+ "name": "Μπενίν"
+ },
+ "BW": {
+ "name": "Μποτσουάνα"
+ },
+ "BF": {
+ "name": "ΜπουÏκίνα Φάσο"
+ },
+ "BI": {
+ "name": "ΜπουÏοÏντι"
+ },
+ "BT": {
+ "name": "Μπουτάν"
+ },
+ "BN": {
+ "name": "ΜπÏουνέι"
+ },
+ "NA": {
+ "name": "Îαμίμπια"
+ },
+ "NR": {
+ "name": "ÎαουÏοÏ"
+ },
+ "NZ": {
+ "name": "Îέα Ζηλανδία"
+ },
+ "NC": {
+ "name": "Îέα Καληδονία"
+ },
+ "NP": {
+ "name": "Îεπάλ"
+ },
+ "MP": {
+ "name": "Îήσοι Î’ÏŒÏειες ΜαÏιάνες"
+ },
+ "KY": {
+ "name": "Îήσοι Κάιμαν"
+ },
+ "CC": {
+ "name": "Îήσοι Κόκος (Κίλινγκ)"
+ },
+ "CK": {
+ "name": "Îήσοι Κουκ"
+ },
+ "MH": {
+ "name": "Îήσοι ΜάÏσαλ"
+ },
+ "GS": {
+ "name": "Îήσοι Îότια ΓεωÏγία και Îότιες Σάντουιτς"
+ },
+ "AX": {
+ "name": "Îήσοι Όλαντ"
+ },
+ "PN": {
+ "name": "Îήσοι ΠίτκεÏν"
+ },
+ "SB": {
+ "name": "Îήσοι Σολομώντος"
+ },
+ "TC": {
+ "name": "Îήσοι ΤεÏκ και Κάικος"
+ },
+ "FO": {
+ "name": "Îήσοι ΦεÏόες"
+ },
+ "FK": {
+ "name": "Îήσοι Φόκλαντ"
+ },
+ "AC": {
+ "name": "Îήσος Ασενσιόν"
+ },
+ "IM": {
+ "name": "Îήσος Μαν"
+ },
+ "NF": {
+ "name": "Îήσος ÎÏŒÏφολκ"
+ },
+ "CX": {
+ "name": "Îήσος των ΧÏιστουγέννων"
+ },
+ "NE": {
+ "name": "ÎίγηÏας"
+ },
+ "NG": {
+ "name": "ÎιγηÏία"
+ },
+ "NI": {
+ "name": "ÎικαÏάγουα"
+ },
+ "NU": {
+ "name": "ÎιοÏε"
+ },
+ "NO": {
+ "name": "ÎοÏβηγία"
+ },
+ "ZA": {
+ "name": "Îότια ΑφÏική"
+ },
+ "KR": {
+ "name": "Îότια ΚοÏέα"
+ },
+ "SS": {
+ "name": "Îότιο Σουδάν"
+ },
+ "DG": {
+ "name": "Îτιέγκο ΓκαÏσία"
+ },
+ "DM": {
+ "name": "Îτομίνικα"
+ },
+ "NL": {
+ "name": "Ολλανδία"
+ },
+ "BQ": {
+ "name": "Ολλανδία ΚαÏαϊβικής"
+ },
+ "OM": {
+ "name": "Ομάν"
+ },
+ "HN": {
+ "name": "ΟνδοÏÏα"
+ },
+ "WF": {
+ "name": "Ουάλις και ΦουτοÏνα"
+ },
+ "HU": {
+ "name": "ΟυγγαÏία"
+ },
+ "UG": {
+ "name": "Ουγκάντα"
+ },
+ "UZ": {
+ "name": "Ουζμπεκιστάν"
+ },
+ "UA": {
+ "name": "ΟυκÏανία"
+ },
+ "UY": {
+ "name": "ΟυÏουγουάη"
+ },
+ "PK": {
+ "name": "Πακιστάν"
+ },
+ "PS": {
+ "name": "Παλαιστινιακά Εδάφη"
+ },
+ "PW": {
+ "name": "Παλάου"
+ },
+ "PA": {
+ "name": "Παναμάς"
+ },
+ "PG": {
+ "name": "ΠαποÏα Îέα Γουινέα"
+ },
+ "PY": {
+ "name": "ΠαÏαγουάη"
+ },
+ "PE": {
+ "name": "ΠεÏοÏ"
+ },
+ "PL": {
+ "name": "Πολωνία"
+ },
+ "PT": {
+ "name": "ΠοÏτογαλία"
+ },
+ "PR": {
+ "name": "ΠουέÏτο Ρίκο"
+ },
+ "CV": {
+ "name": "ΠÏάσινο ΑκÏωτήÏιο"
+ },
+ "MK": {
+ "name": "ΠÏώην Γιουγκοσλαβική ΔημοκÏατία της Μακεδονίας"
+ },
+ "RE": {
+ "name": "Ρεϊνιόν"
+ },
+ "RW": {
+ "name": "Ρουάντα"
+ },
+ "RO": {
+ "name": "Ρουμανία"
+ },
+ "RU": {
+ "name": "Ρωσία"
+ },
+ "WS": {
+ "name": "Σαμόα"
+ },
+ "ST": {
+ "name": "Σάο Τομέ και ΠÏίνσιπε"
+ },
+ "SA": {
+ "name": "Σαουδική ΑÏαβία"
+ },
+ "SJ": {
+ "name": "ΣβάλμπαÏντ και Γιαν Μαγιέν"
+ },
+ "PM": {
+ "name": "Σεν Î Î¹ÎµÏ ÎºÎ±Î¹ Μικελόν"
+ },
+ "SN": {
+ "name": "Σενεγάλη"
+ },
+ "RS": {
+ "name": "ΣεÏβία"
+ },
+ "SC": {
+ "name": "Σεϋχέλλες"
+ },
+ "SG": {
+ "name": "ΣιγκαποÏÏη"
+ },
+ "SL": {
+ "name": "ΣιέÏα Λεόνε"
+ },
+ "SK": {
+ "name": "Σλοβακία"
+ },
+ "SI": {
+ "name": "Σλοβενία"
+ },
+ "SO": {
+ "name": "Σομαλία"
+ },
+ "SZ": {
+ "name": "Σουαζιλάνδη"
+ },
+ "SD": {
+ "name": "Σουδάν"
+ },
+ "SE": {
+ "name": "Σουηδία"
+ },
+ "SR": {
+ "name": "ΣουÏινάμ"
+ },
+ "LK": {
+ "name": "ΣÏι Λάνκα"
+ },
+ "SY": {
+ "name": "ΣυÏία"
+ },
+ "TW": {
+ "name": "Ταϊβάν"
+ },
+ "TH": {
+ "name": "Ταϊλάνδη"
+ },
+ "TZ": {
+ "name": "Τανζανία"
+ },
+ "TJ": {
+ "name": "Τατζικιστάν"
+ },
+ "JM": {
+ "name": "Τζαμάικα"
+ },
+ "JE": {
+ "name": "ΤζέÏζι"
+ },
+ "DJ": {
+ "name": "Τζιμπουτί"
+ },
+ "TL": {
+ "name": "ΤιμόÏ-Λέστε"
+ },
+ "TG": {
+ "name": "Τόγκο"
+ },
+ "TK": {
+ "name": "Τοκελάου"
+ },
+ "TO": {
+ "name": "Τόνγκα"
+ },
+ "TV": {
+ "name": "ΤουβαλοÏ"
+ },
+ "TR": {
+ "name": "ΤουÏκία"
+ },
+ "TM": {
+ "name": "ΤουÏκμενιστάν"
+ },
+ "TT": {
+ "name": "ΤÏινιντάντ και Τομπάγκο"
+ },
+ "TA": {
+ "name": "ΤÏιστάν ντα ΚοÏνια"
+ },
+ "TD": {
+ "name": "Τσαντ"
+ },
+ "CZ": {
+ "name": "Τσεχική ΔημοκÏατία"
+ },
+ "TN": {
+ "name": "Τυνησία"
+ },
+ "YE": {
+ "name": "Υεμένη"
+ },
+ "PH": {
+ "name": "Φιλιππίνες"
+ },
+ "FI": {
+ "name": "Φινλανδία"
+ },
+ "FJ": {
+ "name": "Φίτζι"
+ },
+ "CL": {
+ "name": "Χιλή"
+ },
+ "HK": {
+ "name": "Χονγκ Κονγκ ΕΔΠ Κίνας"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/en-AU.json b/library/intl/resources/country/en-AU.json
new file mode 100644
index 000000000..b75648523
--- /dev/null
+++ b/library/intl/resources/country/en-AU.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua and Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia and Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta and Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vincent and the Grenadines"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia and the South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard and Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Minor Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/en-BE.json b/library/intl/resources/country/en-BE.json
new file mode 100644
index 000000000..081d5f4c0
--- /dev/null
+++ b/library/intl/resources/country/en-BE.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua and Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia and Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta and Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard and Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/en-DG.json b/library/intl/resources/country/en-DG.json
new file mode 100644
index 000000000..081d5f4c0
--- /dev/null
+++ b/library/intl/resources/country/en-DG.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua and Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia and Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta and Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard and Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/en-FK.json b/library/intl/resources/country/en-FK.json
new file mode 100644
index 000000000..081d5f4c0
--- /dev/null
+++ b/library/intl/resources/country/en-FK.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua and Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia and Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta and Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard and Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/en-GB.json b/library/intl/resources/country/en-GB.json
new file mode 100644
index 000000000..081d5f4c0
--- /dev/null
+++ b/library/intl/resources/country/en-GB.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua and Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia and Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta and Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard and Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/en-GG.json b/library/intl/resources/country/en-GG.json
new file mode 100644
index 000000000..081d5f4c0
--- /dev/null
+++ b/library/intl/resources/country/en-GG.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua and Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia and Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta and Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard and Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/en-GI.json b/library/intl/resources/country/en-GI.json
new file mode 100644
index 000000000..081d5f4c0
--- /dev/null
+++ b/library/intl/resources/country/en-GI.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua and Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia and Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta and Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard and Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/en-HK.json b/library/intl/resources/country/en-HK.json
new file mode 100644
index 000000000..081d5f4c0
--- /dev/null
+++ b/library/intl/resources/country/en-HK.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua and Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia and Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta and Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard and Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/en-IE.json b/library/intl/resources/country/en-IE.json
new file mode 100644
index 000000000..081d5f4c0
--- /dev/null
+++ b/library/intl/resources/country/en-IE.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua and Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia and Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta and Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard and Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/en-IM.json b/library/intl/resources/country/en-IM.json
new file mode 100644
index 000000000..081d5f4c0
--- /dev/null
+++ b/library/intl/resources/country/en-IM.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua and Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia and Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta and Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard and Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/en-IN.json b/library/intl/resources/country/en-IN.json
new file mode 100644
index 000000000..081d5f4c0
--- /dev/null
+++ b/library/intl/resources/country/en-IN.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua and Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia and Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta and Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard and Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/en-IO.json b/library/intl/resources/country/en-IO.json
new file mode 100644
index 000000000..081d5f4c0
--- /dev/null
+++ b/library/intl/resources/country/en-IO.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua and Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia and Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta and Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard and Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/en-JE.json b/library/intl/resources/country/en-JE.json
new file mode 100644
index 000000000..081d5f4c0
--- /dev/null
+++ b/library/intl/resources/country/en-JE.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua and Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia and Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta and Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard and Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/en-MO.json b/library/intl/resources/country/en-MO.json
new file mode 100644
index 000000000..081d5f4c0
--- /dev/null
+++ b/library/intl/resources/country/en-MO.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua and Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia and Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta and Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard and Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/en-MT.json b/library/intl/resources/country/en-MT.json
new file mode 100644
index 000000000..081d5f4c0
--- /dev/null
+++ b/library/intl/resources/country/en-MT.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua and Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia and Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta and Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard and Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/en-NZ.json b/library/intl/resources/country/en-NZ.json
new file mode 100644
index 000000000..081d5f4c0
--- /dev/null
+++ b/library/intl/resources/country/en-NZ.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua and Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia and Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta and Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard and Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/en-PK.json b/library/intl/resources/country/en-PK.json
new file mode 100644
index 000000000..081d5f4c0
--- /dev/null
+++ b/library/intl/resources/country/en-PK.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua and Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia and Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta and Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard and Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/en-SG.json b/library/intl/resources/country/en-SG.json
new file mode 100644
index 000000000..081d5f4c0
--- /dev/null
+++ b/library/intl/resources/country/en-SG.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua and Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia and Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta and Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard and Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/en-SH.json b/library/intl/resources/country/en-SH.json
new file mode 100644
index 000000000..081d5f4c0
--- /dev/null
+++ b/library/intl/resources/country/en-SH.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua and Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia and Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta and Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard and Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/en-VG.json b/library/intl/resources/country/en-VG.json
new file mode 100644
index 000000000..081d5f4c0
--- /dev/null
+++ b/library/intl/resources/country/en-VG.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua and Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia and Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta and Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard and Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/en.json b/library/intl/resources/country/en.json
new file mode 100644
index 000000000..ec4919eb8
--- /dev/null
+++ b/library/intl/resources/country/en.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua & Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia & Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé & Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "SH": {
+ "name": "St. Helena"
+ },
+ "KN": {
+ "name": "St. Kitts & Nevis"
+ },
+ "LC": {
+ "name": "St. Lucia"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "PM": {
+ "name": "St. Pierre & Miquelon"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad & Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks & Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis & Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/eo.json b/library/intl/resources/country/eo.json
new file mode 100644
index 000000000..8d760b59d
--- /dev/null
+++ b/library/intl/resources/country/eo.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganujo"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albanujo"
+ },
+ "DZ": {
+ "name": "AlÄerio"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andoro"
+ },
+ "AO": {
+ "name": "Angolo"
+ },
+ "AI": {
+ "name": "Angvilo"
+ },
+ "AQ": {
+ "name": "Antarkto"
+ },
+ "AG": {
+ "name": "Antigvo-Barbudo"
+ },
+ "AR": {
+ "name": "Argentino"
+ },
+ "AM": {
+ "name": "Armenujo"
+ },
+ "AW": {
+ "name": "Arubo"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "AÅ­stralio"
+ },
+ "AT": {
+ "name": "AÅ­strujo"
+ },
+ "AZ": {
+ "name": "AzerbajÄano"
+ },
+ "BS": {
+ "name": "Bahamoj"
+ },
+ "BD": {
+ "name": "BangladeÅo"
+ },
+ "BB": {
+ "name": "Barbado"
+ },
+ "BH": {
+ "name": "Barejno"
+ },
+ "PW": {
+ "name": "BelaÅ­o"
+ },
+ "BE": {
+ "name": "Belgujo"
+ },
+ "BZ": {
+ "name": "Belizo"
+ },
+ "BY": {
+ "name": "Belorusujo"
+ },
+ "BJ": {
+ "name": "Benino"
+ },
+ "BM": {
+ "name": "Bermudoj"
+ },
+ "BW": {
+ "name": "Bocvano"
+ },
+ "BO": {
+ "name": "Bolivio"
+ },
+ "BA": {
+ "name": "Bosnio-Hercegovino"
+ },
+ "BR": {
+ "name": "Brazilo"
+ },
+ "IO": {
+ "name": "Brita Hindoceana Teritorio"
+ },
+ "VG": {
+ "name": "Britaj Virgulininsuloj"
+ },
+ "BN": {
+ "name": "Brunejo"
+ },
+ "BG": {
+ "name": "Bulgarujo"
+ },
+ "BF": {
+ "name": "Burkino"
+ },
+ "BI": {
+ "name": "Burundo"
+ },
+ "BT": {
+ "name": "Butano"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "CF": {
+ "name": "Centr-Afrika Respubliko"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "TD": {
+ "name": "Ĉado"
+ },
+ "CZ": {
+ "name": "Ĉeĥujo"
+ },
+ "CL": {
+ "name": "Ĉilio"
+ },
+ "CN": {
+ "name": "Ĉinujo"
+ },
+ "DK": {
+ "name": "Danujo"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DO": {
+ "name": "Domingo"
+ },
+ "DM": {
+ "name": "Dominiko"
+ },
+ "CI": {
+ "name": "Ebur-Bordo"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "EC": {
+ "name": "Ekvadoro"
+ },
+ "GQ": {
+ "name": "Ekvatora Gvineo"
+ },
+ "ER": {
+ "name": "Eritreo"
+ },
+ "EE": {
+ "name": "Estonujo"
+ },
+ "ET": {
+ "name": "Etiopujo"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Ferooj"
+ },
+ "FJ": {
+ "name": "FiÄoj"
+ },
+ "PH": {
+ "name": "Filipinoj"
+ },
+ "FI": {
+ "name": "Finnlando"
+ },
+ "GF": {
+ "name": "Franca Gviano"
+ },
+ "PF": {
+ "name": "Franca Polinezio"
+ },
+ "FR": {
+ "name": "Francujo"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabono"
+ },
+ "GM": {
+ "name": "Gambio"
+ },
+ "GH": {
+ "name": "Ganao"
+ },
+ "DE": {
+ "name": "Germanujo"
+ },
+ "GR": {
+ "name": "Grekujo"
+ },
+ "GD": {
+ "name": "Grenado"
+ },
+ "GL": {
+ "name": "Gronlando"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Gujano"
+ },
+ "GP": {
+ "name": "Gvadelupo"
+ },
+ "GU": {
+ "name": "Gvamo"
+ },
+ "GT": {
+ "name": "Gvatemalo"
+ },
+ "GN": {
+ "name": "Gvineo"
+ },
+ "GW": {
+ "name": "Gvineo-BisaÅ­o"
+ },
+ "GI": {
+ "name": "Äœibraltaro"
+ },
+ "DJ": {
+ "name": "Äœibutio"
+ },
+ "HT": {
+ "name": "Haitio"
+ },
+ "IN": {
+ "name": "Hindujo"
+ },
+ "ES": {
+ "name": "Hispanujo"
+ },
+ "HN": {
+ "name": "Honduro"
+ },
+ "HK": {
+ "name": "Honkongo"
+ },
+ "HU": {
+ "name": "Hungarujo"
+ },
+ "ID": {
+ "name": "Indonezio"
+ },
+ "IQ": {
+ "name": "Irako"
+ },
+ "IR": {
+ "name": "Irano"
+ },
+ "IE": {
+ "name": "Irlando"
+ },
+ "IS": {
+ "name": "Islando"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israelo"
+ },
+ "IT": {
+ "name": "Italujo"
+ },
+ "JM": {
+ "name": "Jamajko"
+ },
+ "JP": {
+ "name": "Japanujo"
+ },
+ "YE": {
+ "name": "Jemeno"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordanio"
+ },
+ "CV": {
+ "name": "Kabo-Verdo"
+ },
+ "KH": {
+ "name": "KamboÄo"
+ },
+ "CM": {
+ "name": "Kameruno"
+ },
+ "CA": {
+ "name": "Kanado"
+ },
+ "GE": {
+ "name": "Kartvelujo"
+ },
+ "QA": {
+ "name": "Kataro"
+ },
+ "KZ": {
+ "name": "Kazaĥstano"
+ },
+ "KY": {
+ "name": "Kejmanoj"
+ },
+ "KE": {
+ "name": "Kenjo"
+ },
+ "CY": {
+ "name": "Kipro"
+ },
+ "KG": {
+ "name": "Kirgizistano"
+ },
+ "KI": {
+ "name": "Kiribato"
+ },
+ "CO": {
+ "name": "Kolombio"
+ },
+ "KM": {
+ "name": "Komoroj"
+ },
+ "CG": {
+ "name": "Kongolo"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostariko"
+ },
+ "HR": {
+ "name": "Kroatujo"
+ },
+ "CU": {
+ "name": "Kubo"
+ },
+ "CK": {
+ "name": "Kukinsuloj"
+ },
+ "KW": {
+ "name": "Kuvajto"
+ },
+ "LA": {
+ "name": "Laoso"
+ },
+ "LV": {
+ "name": "Latvujo"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LB": {
+ "name": "Libano"
+ },
+ "LR": {
+ "name": "Liberio"
+ },
+ "LY": {
+ "name": "Libio"
+ },
+ "LI": {
+ "name": "LiÄ¥tenÅtejno"
+ },
+ "LT": {
+ "name": "Litovujo"
+ },
+ "LU": {
+ "name": "Luksemburgo"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madagaskaro"
+ },
+ "YT": {
+ "name": "Majoto"
+ },
+ "MK": {
+ "name": "Makedonujo"
+ },
+ "MY": {
+ "name": "Malajzio"
+ },
+ "MW": {
+ "name": "Malavio"
+ },
+ "MV": {
+ "name": "Maldivoj"
+ },
+ "ML": {
+ "name": "Malio"
+ },
+ "MT": {
+ "name": "Malto"
+ },
+ "MA": {
+ "name": "Maroko"
+ },
+ "MH": {
+ "name": "MarÅaloj"
+ },
+ "MQ": {
+ "name": "Martiniko"
+ },
+ "MU": {
+ "name": "MaÅ­ricio"
+ },
+ "MR": {
+ "name": "MaÅ­ritanujo"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "FM": {
+ "name": "Mikronezio"
+ },
+ "MM": {
+ "name": "Mjanmao"
+ },
+ "MD": {
+ "name": "Moldavujo"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolujo"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambiko"
+ },
+ "NA": {
+ "name": "Namibio"
+ },
+ "NR": {
+ "name": "Nauro"
+ },
+ "NL": {
+ "name": "Nederlando"
+ },
+ "NP": {
+ "name": "Nepalo"
+ },
+ "NG": {
+ "name": "NiÄerio"
+ },
+ "NE": {
+ "name": "NiÄero"
+ },
+ "NI": {
+ "name": "Nikaragvo"
+ },
+ "NU": {
+ "name": "Niuo"
+ },
+ "KP": {
+ "name": "Nord-Koreo"
+ },
+ "MP": {
+ "name": "Nord-Marianoj"
+ },
+ "NF": {
+ "name": "Norfolkinsulo"
+ },
+ "NO": {
+ "name": "Norvegujo"
+ },
+ "NC": {
+ "name": "Nov-Kaledonio"
+ },
+ "NZ": {
+ "name": "Nov-Zelando"
+ },
+ "EH": {
+ "name": "Okcidenta Saharo"
+ },
+ "OM": {
+ "name": "Omano"
+ },
+ "PK": {
+ "name": "Pakistano"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panamo"
+ },
+ "PG": {
+ "name": "Papuo-Nov-Gvineo"
+ },
+ "PY": {
+ "name": "Paragvajo"
+ },
+ "PE": {
+ "name": "Peruo"
+ },
+ "PN": {
+ "name": "Pitkarna Insulo"
+ },
+ "PL": {
+ "name": "Pollando"
+ },
+ "PT": {
+ "name": "Portugalujo"
+ },
+ "PR": {
+ "name": "Puerto-Riko"
+ },
+ "RE": {
+ "name": "Reunio"
+ },
+ "RW": {
+ "name": "Ruando"
+ },
+ "RO": {
+ "name": "Rumanujo"
+ },
+ "RU": {
+ "name": "Rusujo"
+ },
+ "SB": {
+ "name": "Salomonoj"
+ },
+ "SV": {
+ "name": "Salvadoro"
+ },
+ "WS": {
+ "name": "Samoo"
+ },
+ "SM": {
+ "name": "San-Marino"
+ },
+ "ST": {
+ "name": "Sao-Tomeo kaj Principeo"
+ },
+ "SA": {
+ "name": "SaÅ­da Arabujo"
+ },
+ "SC": {
+ "name": "SejÅeloj"
+ },
+ "SN": {
+ "name": "Senegalo"
+ },
+ "SH": {
+ "name": "Sent-Heleno"
+ },
+ "KN": {
+ "name": "Sent-Kristofo kaj Neviso"
+ },
+ "LC": {
+ "name": "Sent-Lucio"
+ },
+ "PM": {
+ "name": "Sent-Piero kaj Mikelono"
+ },
+ "VC": {
+ "name": "Sent-Vincento kaj la Grenadinoj"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SL": {
+ "name": "Siera-Leono"
+ },
+ "SG": {
+ "name": "Singapuro"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Sirio"
+ },
+ "SK": {
+ "name": "Slovakujo"
+ },
+ "SI": {
+ "name": "Slovenujo"
+ },
+ "SO": {
+ "name": "Somalujo"
+ },
+ "LK": {
+ "name": "Sri-Lanko"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "ZA": {
+ "name": "Sud-Afriko"
+ },
+ "GS": {
+ "name": "Sud-Georgio kaj Sud-Sandviĉinsuloj"
+ },
+ "KR": {
+ "name": "Sud-Koreo"
+ },
+ "SS": {
+ "name": "Sud-Sudano"
+ },
+ "SD": {
+ "name": "Sudano"
+ },
+ "SR": {
+ "name": "Surinamo"
+ },
+ "SJ": {
+ "name": "Svalbardo kaj Jan-Majen-insulo"
+ },
+ "SZ": {
+ "name": "Svazilando"
+ },
+ "SE": {
+ "name": "Svedujo"
+ },
+ "CH": {
+ "name": "Svisujo"
+ },
+ "TJ": {
+ "name": "TaÄikujo"
+ },
+ "TH": {
+ "name": "Tajlando"
+ },
+ "TW": {
+ "name": "Tajvano"
+ },
+ "TZ": {
+ "name": "Tanzanio"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togolo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tongo"
+ },
+ "TT": {
+ "name": "Trinidado kaj Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunizio"
+ },
+ "TM": {
+ "name": "Turkmenujo"
+ },
+ "TC": {
+ "name": "Turks & Caicos Islands"
+ },
+ "TR": {
+ "name": "Turkujo"
+ },
+ "TV": {
+ "name": "Tuvalo"
+ },
+ "UG": {
+ "name": "Ugando"
+ },
+ "UA": {
+ "name": "Ukrajno"
+ },
+ "GB": {
+ "name": "UnuiÄinta ReÄlando"
+ },
+ "AE": {
+ "name": "UnuiÄintaj Arabaj Emirlandos"
+ },
+ "UY": {
+ "name": "Urugvajo"
+ },
+ "UM": {
+ "name": "Usonaj malgrandaj insuloj"
+ },
+ "VI": {
+ "name": "Usonaj Virgulininsuloj"
+ },
+ "US": {
+ "name": "Usono"
+ },
+ "UZ": {
+ "name": "Uzbekujo"
+ },
+ "WF": {
+ "name": "Valiso kaj Futuno"
+ },
+ "VU": {
+ "name": "Vanuatuo"
+ },
+ "VA": {
+ "name": "Vatikano"
+ },
+ "VE": {
+ "name": "Venezuelo"
+ },
+ "VN": {
+ "name": "Vjetnamo"
+ },
+ "ZM": {
+ "name": "Zambio"
+ },
+ "ZW": {
+ "name": "Zimbabvo"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/es-AR.json b/library/intl/resources/country/es-AR.json
new file mode 100644
index 000000000..6a02f5aec
--- /dev/null
+++ b/library/intl/resources/country/es-AR.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antigua y Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudí"
+ },
+ "DZ": {
+ "name": "Argelia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaiyán"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladés"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Baréin"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belice"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia y Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunéi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboya"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "EA": {
+ "name": "Ceuta y Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Ciudad del Vaticano"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoras"
+ },
+ "KP": {
+ "name": "Corea del Norte"
+ },
+ "KR": {
+ "name": "Corea del Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curazao"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Unidos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FJ": {
+ "name": "Fiyi"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GF": {
+ "name": "Guayana Francesa"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bisáu"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "AC": {
+ "name": "Isla Ascensión"
+ },
+ "CX": {
+ "name": "Isla Christmas"
+ },
+ "IM": {
+ "name": "Isla de Man"
+ },
+ "NF": {
+ "name": "Isla Norfolk"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "AX": {
+ "name": "Islas Ã…land"
+ },
+ "KY": {
+ "name": "Islas Caimán"
+ },
+ "IC": {
+ "name": "islas Canarias"
+ },
+ "CC": {
+ "name": "Islas Cocos"
+ },
+ "CK": {
+ "name": "Islas Cook"
+ },
+ "FO": {
+ "name": "Islas Feroe"
+ },
+ "GS": {
+ "name": "Islas Georgia del Sur y Sandwich del Sur"
+ },
+ "FK": {
+ "name": "Islas Malvinas"
+ },
+ "MP": {
+ "name": "Islas Marianas del Norte"
+ },
+ "MH": {
+ "name": "Islas Marshall"
+ },
+ "UM": {
+ "name": "Islas menores alejadas de EE. UU."
+ },
+ "PN": {
+ "name": "Islas Pitcairn"
+ },
+ "SB": {
+ "name": "Islas Salomón"
+ },
+ "TC": {
+ "name": "Islas Turcas y Caicos"
+ },
+ "VG": {
+ "name": "Islas Vírgenes Británicas"
+ },
+ "VI": {
+ "name": "Islas Vírgenes de EE. UU."
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japón"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KZ": {
+ "name": "Kazajistán"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirguistán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malasia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marruecos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Mauricio"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nueva Caledonia"
+ },
+ "NZ": {
+ "name": "Nueva Zelanda"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Bajos"
+ },
+ "PK": {
+ "name": "Pakistán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nueva Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "HK": {
+ "name": "RAE de Hong Kong (China)"
+ },
+ "MO": {
+ "name": "RAE de Macao (China)"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centroafricana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "CG": {
+ "name": "República del Congo"
+ },
+ "CD": {
+ "name": "República Democrática del Congo"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumanía"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sáhara Occidental"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "KN": {
+ "name": "San Cristóbal y Nieves"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martín"
+ },
+ "PM": {
+ "name": "San Pedro y Miquelón"
+ },
+ "VC": {
+ "name": "San Vicente y las Granadinas"
+ },
+ "SH": {
+ "name": "Santa Elena"
+ },
+ "LC": {
+ "name": "Santa Lucía"
+ },
+ "ST": {
+ "name": "Santo Tomé y Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leona"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán del Sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suiza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard y Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Tayikistán"
+ },
+ "IO": {
+ "name": "Territorio Británico del Océano Ãndico"
+ },
+ "TF": {
+ "name": "Territorios Australes Franceses"
+ },
+ "PS": {
+ "name": "Territorios Palestinos"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad y Tobago"
+ },
+ "TA": {
+ "name": "Tristán da Cunha"
+ },
+ "TN": {
+ "name": "Túnez"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrania"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis y Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "DJ": {
+ "name": "Yibuti"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/es-BO.json b/library/intl/resources/country/es-BO.json
new file mode 100644
index 000000000..6a02f5aec
--- /dev/null
+++ b/library/intl/resources/country/es-BO.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antigua y Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudí"
+ },
+ "DZ": {
+ "name": "Argelia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaiyán"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladés"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Baréin"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belice"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia y Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunéi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboya"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "EA": {
+ "name": "Ceuta y Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Ciudad del Vaticano"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoras"
+ },
+ "KP": {
+ "name": "Corea del Norte"
+ },
+ "KR": {
+ "name": "Corea del Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curazao"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Unidos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FJ": {
+ "name": "Fiyi"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GF": {
+ "name": "Guayana Francesa"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bisáu"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "AC": {
+ "name": "Isla Ascensión"
+ },
+ "CX": {
+ "name": "Isla Christmas"
+ },
+ "IM": {
+ "name": "Isla de Man"
+ },
+ "NF": {
+ "name": "Isla Norfolk"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "AX": {
+ "name": "Islas Ã…land"
+ },
+ "KY": {
+ "name": "Islas Caimán"
+ },
+ "IC": {
+ "name": "islas Canarias"
+ },
+ "CC": {
+ "name": "Islas Cocos"
+ },
+ "CK": {
+ "name": "Islas Cook"
+ },
+ "FO": {
+ "name": "Islas Feroe"
+ },
+ "GS": {
+ "name": "Islas Georgia del Sur y Sandwich del Sur"
+ },
+ "FK": {
+ "name": "Islas Malvinas"
+ },
+ "MP": {
+ "name": "Islas Marianas del Norte"
+ },
+ "MH": {
+ "name": "Islas Marshall"
+ },
+ "UM": {
+ "name": "Islas menores alejadas de EE. UU."
+ },
+ "PN": {
+ "name": "Islas Pitcairn"
+ },
+ "SB": {
+ "name": "Islas Salomón"
+ },
+ "TC": {
+ "name": "Islas Turcas y Caicos"
+ },
+ "VG": {
+ "name": "Islas Vírgenes Británicas"
+ },
+ "VI": {
+ "name": "Islas Vírgenes de EE. UU."
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japón"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KZ": {
+ "name": "Kazajistán"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirguistán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malasia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marruecos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Mauricio"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nueva Caledonia"
+ },
+ "NZ": {
+ "name": "Nueva Zelanda"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Bajos"
+ },
+ "PK": {
+ "name": "Pakistán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nueva Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "HK": {
+ "name": "RAE de Hong Kong (China)"
+ },
+ "MO": {
+ "name": "RAE de Macao (China)"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centroafricana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "CG": {
+ "name": "República del Congo"
+ },
+ "CD": {
+ "name": "República Democrática del Congo"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumanía"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sáhara Occidental"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "KN": {
+ "name": "San Cristóbal y Nieves"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martín"
+ },
+ "PM": {
+ "name": "San Pedro y Miquelón"
+ },
+ "VC": {
+ "name": "San Vicente y las Granadinas"
+ },
+ "SH": {
+ "name": "Santa Elena"
+ },
+ "LC": {
+ "name": "Santa Lucía"
+ },
+ "ST": {
+ "name": "Santo Tomé y Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leona"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán del Sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suiza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard y Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Tayikistán"
+ },
+ "IO": {
+ "name": "Territorio Británico del Océano Ãndico"
+ },
+ "TF": {
+ "name": "Territorios Australes Franceses"
+ },
+ "PS": {
+ "name": "Territorios Palestinos"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad y Tobago"
+ },
+ "TA": {
+ "name": "Tristán da Cunha"
+ },
+ "TN": {
+ "name": "Túnez"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrania"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis y Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "DJ": {
+ "name": "Yibuti"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/es-CL.json b/library/intl/resources/country/es-CL.json
new file mode 100644
index 000000000..3d5e8080b
--- /dev/null
+++ b/library/intl/resources/country/es-CL.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antigua y Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudita"
+ },
+ "DZ": {
+ "name": "Argelia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbayán"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Baréin"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belice"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia y Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunéi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboya"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "EA": {
+ "name": "Ceuta y Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Ciudad del Vaticano"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoras"
+ },
+ "KP": {
+ "name": "Corea del Norte"
+ },
+ "KR": {
+ "name": "Corea del Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curazao"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Unidos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FJ": {
+ "name": "Fiyi"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GF": {
+ "name": "Guayana Francesa"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bisáu"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "AC": {
+ "name": "Isla Ascensión"
+ },
+ "CX": {
+ "name": "Isla Christmas"
+ },
+ "IM": {
+ "name": "Isla de Man"
+ },
+ "NF": {
+ "name": "Isla Norfolk"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "AX": {
+ "name": "Islas Ã…land"
+ },
+ "KY": {
+ "name": "Islas Caimán"
+ },
+ "IC": {
+ "name": "islas Canarias"
+ },
+ "CC": {
+ "name": "Islas Cocos"
+ },
+ "CK": {
+ "name": "Islas Cook"
+ },
+ "FO": {
+ "name": "Islas Feroe"
+ },
+ "GS": {
+ "name": "Islas Georgia del Sur y Sandwich del Sur"
+ },
+ "FK": {
+ "name": "Islas Malvinas"
+ },
+ "MP": {
+ "name": "Islas Marianas del Norte"
+ },
+ "MH": {
+ "name": "Islas Marshall"
+ },
+ "UM": {
+ "name": "Islas menores alejadas de EE. UU."
+ },
+ "PN": {
+ "name": "Islas Pitcairn"
+ },
+ "SB": {
+ "name": "Islas Salomón"
+ },
+ "TC": {
+ "name": "Islas Turcas y Caicos"
+ },
+ "VG": {
+ "name": "Islas Vírgenes Británicas"
+ },
+ "VI": {
+ "name": "Islas Vírgenes de EE. UU."
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japón"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KZ": {
+ "name": "Kazajistán"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirguistán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malasia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marruecos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Mauricio"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nueva Caledonia"
+ },
+ "NZ": {
+ "name": "Nueva Zelanda"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Bajos"
+ },
+ "PK": {
+ "name": "Pakistán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nueva Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "HK": {
+ "name": "RAE de Hong Kong (China)"
+ },
+ "MO": {
+ "name": "RAE de Macao (China)"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centroafricana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "CG": {
+ "name": "República del Congo"
+ },
+ "CD": {
+ "name": "República Democrática del Congo"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumania"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sahara Occidental"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "KN": {
+ "name": "San Cristóbal y Nieves"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martín"
+ },
+ "PM": {
+ "name": "San Pedro y Miquelón"
+ },
+ "VC": {
+ "name": "San Vicente y las Granadinas"
+ },
+ "SH": {
+ "name": "Santa Elena"
+ },
+ "LC": {
+ "name": "Santa Lucía"
+ },
+ "ST": {
+ "name": "Santo Tomé y Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leona"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán del Sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suiza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard y Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Tayikistán"
+ },
+ "IO": {
+ "name": "Territorio Británico del Océano Ãndico"
+ },
+ "PS": {
+ "name": "Territorio Palestino"
+ },
+ "TF": {
+ "name": "Territorios Australes Franceses"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad y Tobago"
+ },
+ "TA": {
+ "name": "Tristán da Cunha"
+ },
+ "TN": {
+ "name": "Túnez"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrania"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis y Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "DJ": {
+ "name": "Yibuti"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/es-CO.json b/library/intl/resources/country/es-CO.json
new file mode 100644
index 000000000..6a02f5aec
--- /dev/null
+++ b/library/intl/resources/country/es-CO.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antigua y Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudí"
+ },
+ "DZ": {
+ "name": "Argelia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaiyán"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladés"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Baréin"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belice"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia y Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunéi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboya"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "EA": {
+ "name": "Ceuta y Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Ciudad del Vaticano"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoras"
+ },
+ "KP": {
+ "name": "Corea del Norte"
+ },
+ "KR": {
+ "name": "Corea del Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curazao"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Unidos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FJ": {
+ "name": "Fiyi"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GF": {
+ "name": "Guayana Francesa"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bisáu"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "AC": {
+ "name": "Isla Ascensión"
+ },
+ "CX": {
+ "name": "Isla Christmas"
+ },
+ "IM": {
+ "name": "Isla de Man"
+ },
+ "NF": {
+ "name": "Isla Norfolk"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "AX": {
+ "name": "Islas Ã…land"
+ },
+ "KY": {
+ "name": "Islas Caimán"
+ },
+ "IC": {
+ "name": "islas Canarias"
+ },
+ "CC": {
+ "name": "Islas Cocos"
+ },
+ "CK": {
+ "name": "Islas Cook"
+ },
+ "FO": {
+ "name": "Islas Feroe"
+ },
+ "GS": {
+ "name": "Islas Georgia del Sur y Sandwich del Sur"
+ },
+ "FK": {
+ "name": "Islas Malvinas"
+ },
+ "MP": {
+ "name": "Islas Marianas del Norte"
+ },
+ "MH": {
+ "name": "Islas Marshall"
+ },
+ "UM": {
+ "name": "Islas menores alejadas de EE. UU."
+ },
+ "PN": {
+ "name": "Islas Pitcairn"
+ },
+ "SB": {
+ "name": "Islas Salomón"
+ },
+ "TC": {
+ "name": "Islas Turcas y Caicos"
+ },
+ "VG": {
+ "name": "Islas Vírgenes Británicas"
+ },
+ "VI": {
+ "name": "Islas Vírgenes de EE. UU."
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japón"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KZ": {
+ "name": "Kazajistán"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirguistán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malasia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marruecos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Mauricio"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nueva Caledonia"
+ },
+ "NZ": {
+ "name": "Nueva Zelanda"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Bajos"
+ },
+ "PK": {
+ "name": "Pakistán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nueva Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "HK": {
+ "name": "RAE de Hong Kong (China)"
+ },
+ "MO": {
+ "name": "RAE de Macao (China)"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centroafricana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "CG": {
+ "name": "República del Congo"
+ },
+ "CD": {
+ "name": "República Democrática del Congo"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumanía"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sáhara Occidental"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "KN": {
+ "name": "San Cristóbal y Nieves"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martín"
+ },
+ "PM": {
+ "name": "San Pedro y Miquelón"
+ },
+ "VC": {
+ "name": "San Vicente y las Granadinas"
+ },
+ "SH": {
+ "name": "Santa Elena"
+ },
+ "LC": {
+ "name": "Santa Lucía"
+ },
+ "ST": {
+ "name": "Santo Tomé y Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leona"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán del Sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suiza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard y Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Tayikistán"
+ },
+ "IO": {
+ "name": "Territorio Británico del Océano Ãndico"
+ },
+ "TF": {
+ "name": "Territorios Australes Franceses"
+ },
+ "PS": {
+ "name": "Territorios Palestinos"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad y Tobago"
+ },
+ "TA": {
+ "name": "Tristán da Cunha"
+ },
+ "TN": {
+ "name": "Túnez"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrania"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis y Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "DJ": {
+ "name": "Yibuti"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/es-CR.json b/library/intl/resources/country/es-CR.json
new file mode 100644
index 000000000..6a02f5aec
--- /dev/null
+++ b/library/intl/resources/country/es-CR.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antigua y Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudí"
+ },
+ "DZ": {
+ "name": "Argelia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaiyán"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladés"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Baréin"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belice"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia y Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunéi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboya"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "EA": {
+ "name": "Ceuta y Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Ciudad del Vaticano"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoras"
+ },
+ "KP": {
+ "name": "Corea del Norte"
+ },
+ "KR": {
+ "name": "Corea del Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curazao"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Unidos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FJ": {
+ "name": "Fiyi"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GF": {
+ "name": "Guayana Francesa"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bisáu"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "AC": {
+ "name": "Isla Ascensión"
+ },
+ "CX": {
+ "name": "Isla Christmas"
+ },
+ "IM": {
+ "name": "Isla de Man"
+ },
+ "NF": {
+ "name": "Isla Norfolk"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "AX": {
+ "name": "Islas Ã…land"
+ },
+ "KY": {
+ "name": "Islas Caimán"
+ },
+ "IC": {
+ "name": "islas Canarias"
+ },
+ "CC": {
+ "name": "Islas Cocos"
+ },
+ "CK": {
+ "name": "Islas Cook"
+ },
+ "FO": {
+ "name": "Islas Feroe"
+ },
+ "GS": {
+ "name": "Islas Georgia del Sur y Sandwich del Sur"
+ },
+ "FK": {
+ "name": "Islas Malvinas"
+ },
+ "MP": {
+ "name": "Islas Marianas del Norte"
+ },
+ "MH": {
+ "name": "Islas Marshall"
+ },
+ "UM": {
+ "name": "Islas menores alejadas de EE. UU."
+ },
+ "PN": {
+ "name": "Islas Pitcairn"
+ },
+ "SB": {
+ "name": "Islas Salomón"
+ },
+ "TC": {
+ "name": "Islas Turcas y Caicos"
+ },
+ "VG": {
+ "name": "Islas Vírgenes Británicas"
+ },
+ "VI": {
+ "name": "Islas Vírgenes de EE. UU."
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japón"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KZ": {
+ "name": "Kazajistán"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirguistán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malasia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marruecos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Mauricio"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nueva Caledonia"
+ },
+ "NZ": {
+ "name": "Nueva Zelanda"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Bajos"
+ },
+ "PK": {
+ "name": "Pakistán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nueva Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "HK": {
+ "name": "RAE de Hong Kong (China)"
+ },
+ "MO": {
+ "name": "RAE de Macao (China)"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centroafricana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "CG": {
+ "name": "República del Congo"
+ },
+ "CD": {
+ "name": "República Democrática del Congo"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumanía"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sáhara Occidental"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "KN": {
+ "name": "San Cristóbal y Nieves"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martín"
+ },
+ "PM": {
+ "name": "San Pedro y Miquelón"
+ },
+ "VC": {
+ "name": "San Vicente y las Granadinas"
+ },
+ "SH": {
+ "name": "Santa Elena"
+ },
+ "LC": {
+ "name": "Santa Lucía"
+ },
+ "ST": {
+ "name": "Santo Tomé y Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leona"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán del Sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suiza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard y Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Tayikistán"
+ },
+ "IO": {
+ "name": "Territorio Británico del Océano Ãndico"
+ },
+ "TF": {
+ "name": "Territorios Australes Franceses"
+ },
+ "PS": {
+ "name": "Territorios Palestinos"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad y Tobago"
+ },
+ "TA": {
+ "name": "Tristán da Cunha"
+ },
+ "TN": {
+ "name": "Túnez"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrania"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis y Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "DJ": {
+ "name": "Yibuti"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/es-CU.json b/library/intl/resources/country/es-CU.json
new file mode 100644
index 000000000..6a02f5aec
--- /dev/null
+++ b/library/intl/resources/country/es-CU.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antigua y Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudí"
+ },
+ "DZ": {
+ "name": "Argelia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaiyán"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladés"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Baréin"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belice"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia y Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunéi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboya"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "EA": {
+ "name": "Ceuta y Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Ciudad del Vaticano"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoras"
+ },
+ "KP": {
+ "name": "Corea del Norte"
+ },
+ "KR": {
+ "name": "Corea del Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curazao"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Unidos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FJ": {
+ "name": "Fiyi"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GF": {
+ "name": "Guayana Francesa"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bisáu"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "AC": {
+ "name": "Isla Ascensión"
+ },
+ "CX": {
+ "name": "Isla Christmas"
+ },
+ "IM": {
+ "name": "Isla de Man"
+ },
+ "NF": {
+ "name": "Isla Norfolk"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "AX": {
+ "name": "Islas Ã…land"
+ },
+ "KY": {
+ "name": "Islas Caimán"
+ },
+ "IC": {
+ "name": "islas Canarias"
+ },
+ "CC": {
+ "name": "Islas Cocos"
+ },
+ "CK": {
+ "name": "Islas Cook"
+ },
+ "FO": {
+ "name": "Islas Feroe"
+ },
+ "GS": {
+ "name": "Islas Georgia del Sur y Sandwich del Sur"
+ },
+ "FK": {
+ "name": "Islas Malvinas"
+ },
+ "MP": {
+ "name": "Islas Marianas del Norte"
+ },
+ "MH": {
+ "name": "Islas Marshall"
+ },
+ "UM": {
+ "name": "Islas menores alejadas de EE. UU."
+ },
+ "PN": {
+ "name": "Islas Pitcairn"
+ },
+ "SB": {
+ "name": "Islas Salomón"
+ },
+ "TC": {
+ "name": "Islas Turcas y Caicos"
+ },
+ "VG": {
+ "name": "Islas Vírgenes Británicas"
+ },
+ "VI": {
+ "name": "Islas Vírgenes de EE. UU."
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japón"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KZ": {
+ "name": "Kazajistán"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirguistán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malasia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marruecos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Mauricio"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nueva Caledonia"
+ },
+ "NZ": {
+ "name": "Nueva Zelanda"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Bajos"
+ },
+ "PK": {
+ "name": "Pakistán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nueva Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "HK": {
+ "name": "RAE de Hong Kong (China)"
+ },
+ "MO": {
+ "name": "RAE de Macao (China)"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centroafricana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "CG": {
+ "name": "República del Congo"
+ },
+ "CD": {
+ "name": "República Democrática del Congo"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumanía"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sáhara Occidental"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "KN": {
+ "name": "San Cristóbal y Nieves"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martín"
+ },
+ "PM": {
+ "name": "San Pedro y Miquelón"
+ },
+ "VC": {
+ "name": "San Vicente y las Granadinas"
+ },
+ "SH": {
+ "name": "Santa Elena"
+ },
+ "LC": {
+ "name": "Santa Lucía"
+ },
+ "ST": {
+ "name": "Santo Tomé y Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leona"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán del Sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suiza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard y Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Tayikistán"
+ },
+ "IO": {
+ "name": "Territorio Británico del Océano Ãndico"
+ },
+ "TF": {
+ "name": "Territorios Australes Franceses"
+ },
+ "PS": {
+ "name": "Territorios Palestinos"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad y Tobago"
+ },
+ "TA": {
+ "name": "Tristán da Cunha"
+ },
+ "TN": {
+ "name": "Túnez"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrania"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis y Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "DJ": {
+ "name": "Yibuti"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/es-DO.json b/library/intl/resources/country/es-DO.json
new file mode 100644
index 000000000..6a02f5aec
--- /dev/null
+++ b/library/intl/resources/country/es-DO.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antigua y Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudí"
+ },
+ "DZ": {
+ "name": "Argelia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaiyán"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladés"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Baréin"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belice"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia y Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunéi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboya"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "EA": {
+ "name": "Ceuta y Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Ciudad del Vaticano"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoras"
+ },
+ "KP": {
+ "name": "Corea del Norte"
+ },
+ "KR": {
+ "name": "Corea del Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curazao"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Unidos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FJ": {
+ "name": "Fiyi"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GF": {
+ "name": "Guayana Francesa"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bisáu"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "AC": {
+ "name": "Isla Ascensión"
+ },
+ "CX": {
+ "name": "Isla Christmas"
+ },
+ "IM": {
+ "name": "Isla de Man"
+ },
+ "NF": {
+ "name": "Isla Norfolk"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "AX": {
+ "name": "Islas Ã…land"
+ },
+ "KY": {
+ "name": "Islas Caimán"
+ },
+ "IC": {
+ "name": "islas Canarias"
+ },
+ "CC": {
+ "name": "Islas Cocos"
+ },
+ "CK": {
+ "name": "Islas Cook"
+ },
+ "FO": {
+ "name": "Islas Feroe"
+ },
+ "GS": {
+ "name": "Islas Georgia del Sur y Sandwich del Sur"
+ },
+ "FK": {
+ "name": "Islas Malvinas"
+ },
+ "MP": {
+ "name": "Islas Marianas del Norte"
+ },
+ "MH": {
+ "name": "Islas Marshall"
+ },
+ "UM": {
+ "name": "Islas menores alejadas de EE. UU."
+ },
+ "PN": {
+ "name": "Islas Pitcairn"
+ },
+ "SB": {
+ "name": "Islas Salomón"
+ },
+ "TC": {
+ "name": "Islas Turcas y Caicos"
+ },
+ "VG": {
+ "name": "Islas Vírgenes Británicas"
+ },
+ "VI": {
+ "name": "Islas Vírgenes de EE. UU."
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japón"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KZ": {
+ "name": "Kazajistán"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirguistán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malasia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marruecos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Mauricio"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nueva Caledonia"
+ },
+ "NZ": {
+ "name": "Nueva Zelanda"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Bajos"
+ },
+ "PK": {
+ "name": "Pakistán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nueva Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "HK": {
+ "name": "RAE de Hong Kong (China)"
+ },
+ "MO": {
+ "name": "RAE de Macao (China)"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centroafricana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "CG": {
+ "name": "República del Congo"
+ },
+ "CD": {
+ "name": "República Democrática del Congo"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumanía"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sáhara Occidental"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "KN": {
+ "name": "San Cristóbal y Nieves"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martín"
+ },
+ "PM": {
+ "name": "San Pedro y Miquelón"
+ },
+ "VC": {
+ "name": "San Vicente y las Granadinas"
+ },
+ "SH": {
+ "name": "Santa Elena"
+ },
+ "LC": {
+ "name": "Santa Lucía"
+ },
+ "ST": {
+ "name": "Santo Tomé y Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leona"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán del Sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suiza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard y Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Tayikistán"
+ },
+ "IO": {
+ "name": "Territorio Británico del Océano Ãndico"
+ },
+ "TF": {
+ "name": "Territorios Australes Franceses"
+ },
+ "PS": {
+ "name": "Territorios Palestinos"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad y Tobago"
+ },
+ "TA": {
+ "name": "Tristán da Cunha"
+ },
+ "TN": {
+ "name": "Túnez"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrania"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis y Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "DJ": {
+ "name": "Yibuti"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/es-EC.json b/library/intl/resources/country/es-EC.json
new file mode 100644
index 000000000..6a02f5aec
--- /dev/null
+++ b/library/intl/resources/country/es-EC.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antigua y Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudí"
+ },
+ "DZ": {
+ "name": "Argelia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaiyán"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladés"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Baréin"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belice"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia y Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunéi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboya"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "EA": {
+ "name": "Ceuta y Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Ciudad del Vaticano"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoras"
+ },
+ "KP": {
+ "name": "Corea del Norte"
+ },
+ "KR": {
+ "name": "Corea del Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curazao"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Unidos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FJ": {
+ "name": "Fiyi"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GF": {
+ "name": "Guayana Francesa"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bisáu"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "AC": {
+ "name": "Isla Ascensión"
+ },
+ "CX": {
+ "name": "Isla Christmas"
+ },
+ "IM": {
+ "name": "Isla de Man"
+ },
+ "NF": {
+ "name": "Isla Norfolk"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "AX": {
+ "name": "Islas Ã…land"
+ },
+ "KY": {
+ "name": "Islas Caimán"
+ },
+ "IC": {
+ "name": "islas Canarias"
+ },
+ "CC": {
+ "name": "Islas Cocos"
+ },
+ "CK": {
+ "name": "Islas Cook"
+ },
+ "FO": {
+ "name": "Islas Feroe"
+ },
+ "GS": {
+ "name": "Islas Georgia del Sur y Sandwich del Sur"
+ },
+ "FK": {
+ "name": "Islas Malvinas"
+ },
+ "MP": {
+ "name": "Islas Marianas del Norte"
+ },
+ "MH": {
+ "name": "Islas Marshall"
+ },
+ "UM": {
+ "name": "Islas menores alejadas de EE. UU."
+ },
+ "PN": {
+ "name": "Islas Pitcairn"
+ },
+ "SB": {
+ "name": "Islas Salomón"
+ },
+ "TC": {
+ "name": "Islas Turcas y Caicos"
+ },
+ "VG": {
+ "name": "Islas Vírgenes Británicas"
+ },
+ "VI": {
+ "name": "Islas Vírgenes de EE. UU."
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japón"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KZ": {
+ "name": "Kazajistán"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirguistán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malasia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marruecos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Mauricio"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nueva Caledonia"
+ },
+ "NZ": {
+ "name": "Nueva Zelanda"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Bajos"
+ },
+ "PK": {
+ "name": "Pakistán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nueva Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "HK": {
+ "name": "RAE de Hong Kong (China)"
+ },
+ "MO": {
+ "name": "RAE de Macao (China)"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centroafricana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "CG": {
+ "name": "República del Congo"
+ },
+ "CD": {
+ "name": "República Democrática del Congo"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumanía"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sáhara Occidental"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "KN": {
+ "name": "San Cristóbal y Nieves"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martín"
+ },
+ "PM": {
+ "name": "San Pedro y Miquelón"
+ },
+ "VC": {
+ "name": "San Vicente y las Granadinas"
+ },
+ "SH": {
+ "name": "Santa Elena"
+ },
+ "LC": {
+ "name": "Santa Lucía"
+ },
+ "ST": {
+ "name": "Santo Tomé y Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leona"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán del Sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suiza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard y Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Tayikistán"
+ },
+ "IO": {
+ "name": "Territorio Británico del Océano Ãndico"
+ },
+ "TF": {
+ "name": "Territorios Australes Franceses"
+ },
+ "PS": {
+ "name": "Territorios Palestinos"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad y Tobago"
+ },
+ "TA": {
+ "name": "Tristán da Cunha"
+ },
+ "TN": {
+ "name": "Túnez"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrania"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis y Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "DJ": {
+ "name": "Yibuti"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/es-GT.json b/library/intl/resources/country/es-GT.json
new file mode 100644
index 000000000..6a02f5aec
--- /dev/null
+++ b/library/intl/resources/country/es-GT.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antigua y Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudí"
+ },
+ "DZ": {
+ "name": "Argelia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaiyán"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladés"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Baréin"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belice"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia y Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunéi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboya"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "EA": {
+ "name": "Ceuta y Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Ciudad del Vaticano"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoras"
+ },
+ "KP": {
+ "name": "Corea del Norte"
+ },
+ "KR": {
+ "name": "Corea del Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curazao"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Unidos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FJ": {
+ "name": "Fiyi"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GF": {
+ "name": "Guayana Francesa"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bisáu"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "AC": {
+ "name": "Isla Ascensión"
+ },
+ "CX": {
+ "name": "Isla Christmas"
+ },
+ "IM": {
+ "name": "Isla de Man"
+ },
+ "NF": {
+ "name": "Isla Norfolk"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "AX": {
+ "name": "Islas Ã…land"
+ },
+ "KY": {
+ "name": "Islas Caimán"
+ },
+ "IC": {
+ "name": "islas Canarias"
+ },
+ "CC": {
+ "name": "Islas Cocos"
+ },
+ "CK": {
+ "name": "Islas Cook"
+ },
+ "FO": {
+ "name": "Islas Feroe"
+ },
+ "GS": {
+ "name": "Islas Georgia del Sur y Sandwich del Sur"
+ },
+ "FK": {
+ "name": "Islas Malvinas"
+ },
+ "MP": {
+ "name": "Islas Marianas del Norte"
+ },
+ "MH": {
+ "name": "Islas Marshall"
+ },
+ "UM": {
+ "name": "Islas menores alejadas de EE. UU."
+ },
+ "PN": {
+ "name": "Islas Pitcairn"
+ },
+ "SB": {
+ "name": "Islas Salomón"
+ },
+ "TC": {
+ "name": "Islas Turcas y Caicos"
+ },
+ "VG": {
+ "name": "Islas Vírgenes Británicas"
+ },
+ "VI": {
+ "name": "Islas Vírgenes de EE. UU."
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japón"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KZ": {
+ "name": "Kazajistán"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirguistán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malasia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marruecos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Mauricio"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nueva Caledonia"
+ },
+ "NZ": {
+ "name": "Nueva Zelanda"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Bajos"
+ },
+ "PK": {
+ "name": "Pakistán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nueva Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "HK": {
+ "name": "RAE de Hong Kong (China)"
+ },
+ "MO": {
+ "name": "RAE de Macao (China)"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centroafricana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "CG": {
+ "name": "República del Congo"
+ },
+ "CD": {
+ "name": "República Democrática del Congo"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumanía"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sáhara Occidental"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "KN": {
+ "name": "San Cristóbal y Nieves"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martín"
+ },
+ "PM": {
+ "name": "San Pedro y Miquelón"
+ },
+ "VC": {
+ "name": "San Vicente y las Granadinas"
+ },
+ "SH": {
+ "name": "Santa Elena"
+ },
+ "LC": {
+ "name": "Santa Lucía"
+ },
+ "ST": {
+ "name": "Santo Tomé y Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leona"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán del Sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suiza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard y Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Tayikistán"
+ },
+ "IO": {
+ "name": "Territorio Británico del Océano Ãndico"
+ },
+ "TF": {
+ "name": "Territorios Australes Franceses"
+ },
+ "PS": {
+ "name": "Territorios Palestinos"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad y Tobago"
+ },
+ "TA": {
+ "name": "Tristán da Cunha"
+ },
+ "TN": {
+ "name": "Túnez"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrania"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis y Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "DJ": {
+ "name": "Yibuti"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/es-HN.json b/library/intl/resources/country/es-HN.json
new file mode 100644
index 000000000..6a02f5aec
--- /dev/null
+++ b/library/intl/resources/country/es-HN.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antigua y Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudí"
+ },
+ "DZ": {
+ "name": "Argelia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaiyán"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladés"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Baréin"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belice"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia y Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunéi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboya"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "EA": {
+ "name": "Ceuta y Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Ciudad del Vaticano"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoras"
+ },
+ "KP": {
+ "name": "Corea del Norte"
+ },
+ "KR": {
+ "name": "Corea del Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curazao"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Unidos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FJ": {
+ "name": "Fiyi"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GF": {
+ "name": "Guayana Francesa"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bisáu"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "AC": {
+ "name": "Isla Ascensión"
+ },
+ "CX": {
+ "name": "Isla Christmas"
+ },
+ "IM": {
+ "name": "Isla de Man"
+ },
+ "NF": {
+ "name": "Isla Norfolk"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "AX": {
+ "name": "Islas Ã…land"
+ },
+ "KY": {
+ "name": "Islas Caimán"
+ },
+ "IC": {
+ "name": "islas Canarias"
+ },
+ "CC": {
+ "name": "Islas Cocos"
+ },
+ "CK": {
+ "name": "Islas Cook"
+ },
+ "FO": {
+ "name": "Islas Feroe"
+ },
+ "GS": {
+ "name": "Islas Georgia del Sur y Sandwich del Sur"
+ },
+ "FK": {
+ "name": "Islas Malvinas"
+ },
+ "MP": {
+ "name": "Islas Marianas del Norte"
+ },
+ "MH": {
+ "name": "Islas Marshall"
+ },
+ "UM": {
+ "name": "Islas menores alejadas de EE. UU."
+ },
+ "PN": {
+ "name": "Islas Pitcairn"
+ },
+ "SB": {
+ "name": "Islas Salomón"
+ },
+ "TC": {
+ "name": "Islas Turcas y Caicos"
+ },
+ "VG": {
+ "name": "Islas Vírgenes Británicas"
+ },
+ "VI": {
+ "name": "Islas Vírgenes de EE. UU."
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japón"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KZ": {
+ "name": "Kazajistán"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirguistán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malasia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marruecos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Mauricio"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nueva Caledonia"
+ },
+ "NZ": {
+ "name": "Nueva Zelanda"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Bajos"
+ },
+ "PK": {
+ "name": "Pakistán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nueva Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "HK": {
+ "name": "RAE de Hong Kong (China)"
+ },
+ "MO": {
+ "name": "RAE de Macao (China)"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centroafricana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "CG": {
+ "name": "República del Congo"
+ },
+ "CD": {
+ "name": "República Democrática del Congo"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumanía"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sáhara Occidental"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "KN": {
+ "name": "San Cristóbal y Nieves"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martín"
+ },
+ "PM": {
+ "name": "San Pedro y Miquelón"
+ },
+ "VC": {
+ "name": "San Vicente y las Granadinas"
+ },
+ "SH": {
+ "name": "Santa Elena"
+ },
+ "LC": {
+ "name": "Santa Lucía"
+ },
+ "ST": {
+ "name": "Santo Tomé y Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leona"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán del Sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suiza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard y Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Tayikistán"
+ },
+ "IO": {
+ "name": "Territorio Británico del Océano Ãndico"
+ },
+ "TF": {
+ "name": "Territorios Australes Franceses"
+ },
+ "PS": {
+ "name": "Territorios Palestinos"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad y Tobago"
+ },
+ "TA": {
+ "name": "Tristán da Cunha"
+ },
+ "TN": {
+ "name": "Túnez"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrania"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis y Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "DJ": {
+ "name": "Yibuti"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/es-MX.json b/library/intl/resources/country/es-MX.json
new file mode 100644
index 000000000..7d7df13bc
--- /dev/null
+++ b/library/intl/resources/country/es-MX.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antigua y Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudí"
+ },
+ "DZ": {
+ "name": "Argelia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaiyán"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Baréin"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belice"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia-Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunéi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboya"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "EA": {
+ "name": "Ceuta y Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Ciudad del Vaticano"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoras"
+ },
+ "CG": {
+ "name": "Congo Brazzaville"
+ },
+ "KP": {
+ "name": "Corea del Norte"
+ },
+ "KR": {
+ "name": "Corea del Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curazao"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Unidos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FJ": {
+ "name": "Fiyi"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GF": {
+ "name": "Guayana Francesa"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "AC": {
+ "name": "Isla Ascensión"
+ },
+ "IM": {
+ "name": "Isla de Man"
+ },
+ "CX": {
+ "name": "Isla de Navidad"
+ },
+ "NF": {
+ "name": "Isla Norfolk"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "AX": {
+ "name": "Islas Ã…land"
+ },
+ "KY": {
+ "name": "Islas Caimán"
+ },
+ "IC": {
+ "name": "Islas Canarias"
+ },
+ "CC": {
+ "name": "Islas Cocos (Keeling)"
+ },
+ "CK": {
+ "name": "Islas Cook"
+ },
+ "FO": {
+ "name": "Islas Feroe"
+ },
+ "GS": {
+ "name": "Islas Georgias del Sur y Sandwich del Sur"
+ },
+ "FK": {
+ "name": "Islas Malvinas"
+ },
+ "MP": {
+ "name": "Islas Marianas del Norte"
+ },
+ "MH": {
+ "name": "Islas Marshall"
+ },
+ "PN": {
+ "name": "Islas Pitcairn"
+ },
+ "SB": {
+ "name": "Islas Salomón"
+ },
+ "TC": {
+ "name": "Islas Turcas y Caicos"
+ },
+ "UM": {
+ "name": "Islas UltramarinasMenores de Estados Unidos"
+ },
+ "VG": {
+ "name": "Islas Vírgenes Británicas"
+ },
+ "VI": {
+ "name": "Islas Vírgenes de los Estados Unidos"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japón"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KZ": {
+ "name": "Kazajistán"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirguistán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malasia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marruecos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Mauricio"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nueva Caledonia"
+ },
+ "NZ": {
+ "name": "Nueva Zelanda"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Bajos"
+ },
+ "PK": {
+ "name": "Pakistán"
+ },
+ "PW": {
+ "name": "Palaos"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nueva Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "HK": {
+ "name": "Región Administrativa Especial de Hong Kong de la República Popular China"
+ },
+ "MO": {
+ "name": "Región Administrativa Especial de Macao de la República Popular China"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centroafricana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "CD": {
+ "name": "República Democrática del Congo"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumanía"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sáhara Occidental"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "KN": {
+ "name": "San Cristóbal y Nieves"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martín"
+ },
+ "PM": {
+ "name": "San Pedro y Miquelón"
+ },
+ "VC": {
+ "name": "San Vicente y las Granadinas"
+ },
+ "SH": {
+ "name": "Santa Elena"
+ },
+ "LC": {
+ "name": "Santa Lucía"
+ },
+ "ST": {
+ "name": "Santo Tomé y Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leona"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán del Sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suiza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard y Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Tayikistán"
+ },
+ "IO": {
+ "name": "Territorio Británico del Océano Ãndico"
+ },
+ "TF": {
+ "name": "Territorios Australes Franceses"
+ },
+ "PS": {
+ "name": "Territorios Palestinos"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad y Tobago"
+ },
+ "TA": {
+ "name": "Tristán de Acuña"
+ },
+ "TN": {
+ "name": "Túnez"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrania"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis y Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "DJ": {
+ "name": "Yibuti"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/es-NI.json b/library/intl/resources/country/es-NI.json
new file mode 100644
index 000000000..6a02f5aec
--- /dev/null
+++ b/library/intl/resources/country/es-NI.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antigua y Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudí"
+ },
+ "DZ": {
+ "name": "Argelia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaiyán"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladés"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Baréin"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belice"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia y Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunéi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboya"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "EA": {
+ "name": "Ceuta y Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Ciudad del Vaticano"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoras"
+ },
+ "KP": {
+ "name": "Corea del Norte"
+ },
+ "KR": {
+ "name": "Corea del Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curazao"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Unidos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FJ": {
+ "name": "Fiyi"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GF": {
+ "name": "Guayana Francesa"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bisáu"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "AC": {
+ "name": "Isla Ascensión"
+ },
+ "CX": {
+ "name": "Isla Christmas"
+ },
+ "IM": {
+ "name": "Isla de Man"
+ },
+ "NF": {
+ "name": "Isla Norfolk"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "AX": {
+ "name": "Islas Ã…land"
+ },
+ "KY": {
+ "name": "Islas Caimán"
+ },
+ "IC": {
+ "name": "islas Canarias"
+ },
+ "CC": {
+ "name": "Islas Cocos"
+ },
+ "CK": {
+ "name": "Islas Cook"
+ },
+ "FO": {
+ "name": "Islas Feroe"
+ },
+ "GS": {
+ "name": "Islas Georgia del Sur y Sandwich del Sur"
+ },
+ "FK": {
+ "name": "Islas Malvinas"
+ },
+ "MP": {
+ "name": "Islas Marianas del Norte"
+ },
+ "MH": {
+ "name": "Islas Marshall"
+ },
+ "UM": {
+ "name": "Islas menores alejadas de EE. UU."
+ },
+ "PN": {
+ "name": "Islas Pitcairn"
+ },
+ "SB": {
+ "name": "Islas Salomón"
+ },
+ "TC": {
+ "name": "Islas Turcas y Caicos"
+ },
+ "VG": {
+ "name": "Islas Vírgenes Británicas"
+ },
+ "VI": {
+ "name": "Islas Vírgenes de EE. UU."
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japón"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KZ": {
+ "name": "Kazajistán"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirguistán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malasia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marruecos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Mauricio"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nueva Caledonia"
+ },
+ "NZ": {
+ "name": "Nueva Zelanda"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Bajos"
+ },
+ "PK": {
+ "name": "Pakistán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nueva Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "HK": {
+ "name": "RAE de Hong Kong (China)"
+ },
+ "MO": {
+ "name": "RAE de Macao (China)"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centroafricana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "CG": {
+ "name": "República del Congo"
+ },
+ "CD": {
+ "name": "República Democrática del Congo"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumanía"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sáhara Occidental"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "KN": {
+ "name": "San Cristóbal y Nieves"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martín"
+ },
+ "PM": {
+ "name": "San Pedro y Miquelón"
+ },
+ "VC": {
+ "name": "San Vicente y las Granadinas"
+ },
+ "SH": {
+ "name": "Santa Elena"
+ },
+ "LC": {
+ "name": "Santa Lucía"
+ },
+ "ST": {
+ "name": "Santo Tomé y Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leona"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán del Sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suiza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard y Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Tayikistán"
+ },
+ "IO": {
+ "name": "Territorio Británico del Océano Ãndico"
+ },
+ "TF": {
+ "name": "Territorios Australes Franceses"
+ },
+ "PS": {
+ "name": "Territorios Palestinos"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad y Tobago"
+ },
+ "TA": {
+ "name": "Tristán da Cunha"
+ },
+ "TN": {
+ "name": "Túnez"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrania"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis y Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "DJ": {
+ "name": "Yibuti"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/es-PA.json b/library/intl/resources/country/es-PA.json
new file mode 100644
index 000000000..6a02f5aec
--- /dev/null
+++ b/library/intl/resources/country/es-PA.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antigua y Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudí"
+ },
+ "DZ": {
+ "name": "Argelia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaiyán"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladés"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Baréin"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belice"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia y Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunéi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboya"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "EA": {
+ "name": "Ceuta y Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Ciudad del Vaticano"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoras"
+ },
+ "KP": {
+ "name": "Corea del Norte"
+ },
+ "KR": {
+ "name": "Corea del Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curazao"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Unidos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FJ": {
+ "name": "Fiyi"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GF": {
+ "name": "Guayana Francesa"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bisáu"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "AC": {
+ "name": "Isla Ascensión"
+ },
+ "CX": {
+ "name": "Isla Christmas"
+ },
+ "IM": {
+ "name": "Isla de Man"
+ },
+ "NF": {
+ "name": "Isla Norfolk"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "AX": {
+ "name": "Islas Ã…land"
+ },
+ "KY": {
+ "name": "Islas Caimán"
+ },
+ "IC": {
+ "name": "islas Canarias"
+ },
+ "CC": {
+ "name": "Islas Cocos"
+ },
+ "CK": {
+ "name": "Islas Cook"
+ },
+ "FO": {
+ "name": "Islas Feroe"
+ },
+ "GS": {
+ "name": "Islas Georgia del Sur y Sandwich del Sur"
+ },
+ "FK": {
+ "name": "Islas Malvinas"
+ },
+ "MP": {
+ "name": "Islas Marianas del Norte"
+ },
+ "MH": {
+ "name": "Islas Marshall"
+ },
+ "UM": {
+ "name": "Islas menores alejadas de EE. UU."
+ },
+ "PN": {
+ "name": "Islas Pitcairn"
+ },
+ "SB": {
+ "name": "Islas Salomón"
+ },
+ "TC": {
+ "name": "Islas Turcas y Caicos"
+ },
+ "VG": {
+ "name": "Islas Vírgenes Británicas"
+ },
+ "VI": {
+ "name": "Islas Vírgenes de EE. UU."
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japón"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KZ": {
+ "name": "Kazajistán"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirguistán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malasia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marruecos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Mauricio"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nueva Caledonia"
+ },
+ "NZ": {
+ "name": "Nueva Zelanda"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Bajos"
+ },
+ "PK": {
+ "name": "Pakistán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nueva Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "HK": {
+ "name": "RAE de Hong Kong (China)"
+ },
+ "MO": {
+ "name": "RAE de Macao (China)"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centroafricana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "CG": {
+ "name": "República del Congo"
+ },
+ "CD": {
+ "name": "República Democrática del Congo"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumanía"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sáhara Occidental"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "KN": {
+ "name": "San Cristóbal y Nieves"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martín"
+ },
+ "PM": {
+ "name": "San Pedro y Miquelón"
+ },
+ "VC": {
+ "name": "San Vicente y las Granadinas"
+ },
+ "SH": {
+ "name": "Santa Elena"
+ },
+ "LC": {
+ "name": "Santa Lucía"
+ },
+ "ST": {
+ "name": "Santo Tomé y Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leona"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán del Sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suiza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard y Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Tayikistán"
+ },
+ "IO": {
+ "name": "Territorio Británico del Océano Ãndico"
+ },
+ "TF": {
+ "name": "Territorios Australes Franceses"
+ },
+ "PS": {
+ "name": "Territorios Palestinos"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad y Tobago"
+ },
+ "TA": {
+ "name": "Tristán da Cunha"
+ },
+ "TN": {
+ "name": "Túnez"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrania"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis y Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "DJ": {
+ "name": "Yibuti"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/es-PE.json b/library/intl/resources/country/es-PE.json
new file mode 100644
index 000000000..6a02f5aec
--- /dev/null
+++ b/library/intl/resources/country/es-PE.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antigua y Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudí"
+ },
+ "DZ": {
+ "name": "Argelia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaiyán"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladés"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Baréin"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belice"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia y Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunéi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboya"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "EA": {
+ "name": "Ceuta y Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Ciudad del Vaticano"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoras"
+ },
+ "KP": {
+ "name": "Corea del Norte"
+ },
+ "KR": {
+ "name": "Corea del Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curazao"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Unidos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FJ": {
+ "name": "Fiyi"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GF": {
+ "name": "Guayana Francesa"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bisáu"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "AC": {
+ "name": "Isla Ascensión"
+ },
+ "CX": {
+ "name": "Isla Christmas"
+ },
+ "IM": {
+ "name": "Isla de Man"
+ },
+ "NF": {
+ "name": "Isla Norfolk"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "AX": {
+ "name": "Islas Ã…land"
+ },
+ "KY": {
+ "name": "Islas Caimán"
+ },
+ "IC": {
+ "name": "islas Canarias"
+ },
+ "CC": {
+ "name": "Islas Cocos"
+ },
+ "CK": {
+ "name": "Islas Cook"
+ },
+ "FO": {
+ "name": "Islas Feroe"
+ },
+ "GS": {
+ "name": "Islas Georgia del Sur y Sandwich del Sur"
+ },
+ "FK": {
+ "name": "Islas Malvinas"
+ },
+ "MP": {
+ "name": "Islas Marianas del Norte"
+ },
+ "MH": {
+ "name": "Islas Marshall"
+ },
+ "UM": {
+ "name": "Islas menores alejadas de EE. UU."
+ },
+ "PN": {
+ "name": "Islas Pitcairn"
+ },
+ "SB": {
+ "name": "Islas Salomón"
+ },
+ "TC": {
+ "name": "Islas Turcas y Caicos"
+ },
+ "VG": {
+ "name": "Islas Vírgenes Británicas"
+ },
+ "VI": {
+ "name": "Islas Vírgenes de EE. UU."
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japón"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KZ": {
+ "name": "Kazajistán"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirguistán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malasia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marruecos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Mauricio"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nueva Caledonia"
+ },
+ "NZ": {
+ "name": "Nueva Zelanda"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Bajos"
+ },
+ "PK": {
+ "name": "Pakistán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nueva Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "HK": {
+ "name": "RAE de Hong Kong (China)"
+ },
+ "MO": {
+ "name": "RAE de Macao (China)"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centroafricana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "CG": {
+ "name": "República del Congo"
+ },
+ "CD": {
+ "name": "República Democrática del Congo"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumanía"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sáhara Occidental"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "KN": {
+ "name": "San Cristóbal y Nieves"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martín"
+ },
+ "PM": {
+ "name": "San Pedro y Miquelón"
+ },
+ "VC": {
+ "name": "San Vicente y las Granadinas"
+ },
+ "SH": {
+ "name": "Santa Elena"
+ },
+ "LC": {
+ "name": "Santa Lucía"
+ },
+ "ST": {
+ "name": "Santo Tomé y Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leona"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán del Sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suiza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard y Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Tayikistán"
+ },
+ "IO": {
+ "name": "Territorio Británico del Océano Ãndico"
+ },
+ "TF": {
+ "name": "Territorios Australes Franceses"
+ },
+ "PS": {
+ "name": "Territorios Palestinos"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad y Tobago"
+ },
+ "TA": {
+ "name": "Tristán da Cunha"
+ },
+ "TN": {
+ "name": "Túnez"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrania"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis y Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "DJ": {
+ "name": "Yibuti"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/es-PR.json b/library/intl/resources/country/es-PR.json
new file mode 100644
index 000000000..6a02f5aec
--- /dev/null
+++ b/library/intl/resources/country/es-PR.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antigua y Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudí"
+ },
+ "DZ": {
+ "name": "Argelia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaiyán"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladés"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Baréin"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belice"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia y Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunéi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboya"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "EA": {
+ "name": "Ceuta y Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Ciudad del Vaticano"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoras"
+ },
+ "KP": {
+ "name": "Corea del Norte"
+ },
+ "KR": {
+ "name": "Corea del Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curazao"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Unidos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FJ": {
+ "name": "Fiyi"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GF": {
+ "name": "Guayana Francesa"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bisáu"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "AC": {
+ "name": "Isla Ascensión"
+ },
+ "CX": {
+ "name": "Isla Christmas"
+ },
+ "IM": {
+ "name": "Isla de Man"
+ },
+ "NF": {
+ "name": "Isla Norfolk"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "AX": {
+ "name": "Islas Ã…land"
+ },
+ "KY": {
+ "name": "Islas Caimán"
+ },
+ "IC": {
+ "name": "islas Canarias"
+ },
+ "CC": {
+ "name": "Islas Cocos"
+ },
+ "CK": {
+ "name": "Islas Cook"
+ },
+ "FO": {
+ "name": "Islas Feroe"
+ },
+ "GS": {
+ "name": "Islas Georgia del Sur y Sandwich del Sur"
+ },
+ "FK": {
+ "name": "Islas Malvinas"
+ },
+ "MP": {
+ "name": "Islas Marianas del Norte"
+ },
+ "MH": {
+ "name": "Islas Marshall"
+ },
+ "UM": {
+ "name": "Islas menores alejadas de EE. UU."
+ },
+ "PN": {
+ "name": "Islas Pitcairn"
+ },
+ "SB": {
+ "name": "Islas Salomón"
+ },
+ "TC": {
+ "name": "Islas Turcas y Caicos"
+ },
+ "VG": {
+ "name": "Islas Vírgenes Británicas"
+ },
+ "VI": {
+ "name": "Islas Vírgenes de EE. UU."
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japón"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KZ": {
+ "name": "Kazajistán"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirguistán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malasia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marruecos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Mauricio"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nueva Caledonia"
+ },
+ "NZ": {
+ "name": "Nueva Zelanda"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Bajos"
+ },
+ "PK": {
+ "name": "Pakistán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nueva Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "HK": {
+ "name": "RAE de Hong Kong (China)"
+ },
+ "MO": {
+ "name": "RAE de Macao (China)"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centroafricana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "CG": {
+ "name": "República del Congo"
+ },
+ "CD": {
+ "name": "República Democrática del Congo"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumanía"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sáhara Occidental"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "KN": {
+ "name": "San Cristóbal y Nieves"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martín"
+ },
+ "PM": {
+ "name": "San Pedro y Miquelón"
+ },
+ "VC": {
+ "name": "San Vicente y las Granadinas"
+ },
+ "SH": {
+ "name": "Santa Elena"
+ },
+ "LC": {
+ "name": "Santa Lucía"
+ },
+ "ST": {
+ "name": "Santo Tomé y Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leona"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán del Sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suiza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard y Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Tayikistán"
+ },
+ "IO": {
+ "name": "Territorio Británico del Océano Ãndico"
+ },
+ "TF": {
+ "name": "Territorios Australes Franceses"
+ },
+ "PS": {
+ "name": "Territorios Palestinos"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad y Tobago"
+ },
+ "TA": {
+ "name": "Tristán da Cunha"
+ },
+ "TN": {
+ "name": "Túnez"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrania"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis y Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "DJ": {
+ "name": "Yibuti"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/es-PY.json b/library/intl/resources/country/es-PY.json
new file mode 100644
index 000000000..6a02f5aec
--- /dev/null
+++ b/library/intl/resources/country/es-PY.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antigua y Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudí"
+ },
+ "DZ": {
+ "name": "Argelia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaiyán"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladés"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Baréin"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belice"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia y Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunéi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboya"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "EA": {
+ "name": "Ceuta y Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Ciudad del Vaticano"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoras"
+ },
+ "KP": {
+ "name": "Corea del Norte"
+ },
+ "KR": {
+ "name": "Corea del Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curazao"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Unidos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FJ": {
+ "name": "Fiyi"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GF": {
+ "name": "Guayana Francesa"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bisáu"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "AC": {
+ "name": "Isla Ascensión"
+ },
+ "CX": {
+ "name": "Isla Christmas"
+ },
+ "IM": {
+ "name": "Isla de Man"
+ },
+ "NF": {
+ "name": "Isla Norfolk"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "AX": {
+ "name": "Islas Ã…land"
+ },
+ "KY": {
+ "name": "Islas Caimán"
+ },
+ "IC": {
+ "name": "islas Canarias"
+ },
+ "CC": {
+ "name": "Islas Cocos"
+ },
+ "CK": {
+ "name": "Islas Cook"
+ },
+ "FO": {
+ "name": "Islas Feroe"
+ },
+ "GS": {
+ "name": "Islas Georgia del Sur y Sandwich del Sur"
+ },
+ "FK": {
+ "name": "Islas Malvinas"
+ },
+ "MP": {
+ "name": "Islas Marianas del Norte"
+ },
+ "MH": {
+ "name": "Islas Marshall"
+ },
+ "UM": {
+ "name": "Islas menores alejadas de EE. UU."
+ },
+ "PN": {
+ "name": "Islas Pitcairn"
+ },
+ "SB": {
+ "name": "Islas Salomón"
+ },
+ "TC": {
+ "name": "Islas Turcas y Caicos"
+ },
+ "VG": {
+ "name": "Islas Vírgenes Británicas"
+ },
+ "VI": {
+ "name": "Islas Vírgenes de EE. UU."
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japón"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KZ": {
+ "name": "Kazajistán"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirguistán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malasia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marruecos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Mauricio"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nueva Caledonia"
+ },
+ "NZ": {
+ "name": "Nueva Zelanda"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Bajos"
+ },
+ "PK": {
+ "name": "Pakistán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nueva Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "HK": {
+ "name": "RAE de Hong Kong (China)"
+ },
+ "MO": {
+ "name": "RAE de Macao (China)"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centroafricana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "CG": {
+ "name": "República del Congo"
+ },
+ "CD": {
+ "name": "República Democrática del Congo"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumanía"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sáhara Occidental"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "KN": {
+ "name": "San Cristóbal y Nieves"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martín"
+ },
+ "PM": {
+ "name": "San Pedro y Miquelón"
+ },
+ "VC": {
+ "name": "San Vicente y las Granadinas"
+ },
+ "SH": {
+ "name": "Santa Elena"
+ },
+ "LC": {
+ "name": "Santa Lucía"
+ },
+ "ST": {
+ "name": "Santo Tomé y Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leona"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán del Sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suiza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard y Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Tayikistán"
+ },
+ "IO": {
+ "name": "Territorio Británico del Océano Ãndico"
+ },
+ "TF": {
+ "name": "Territorios Australes Franceses"
+ },
+ "PS": {
+ "name": "Territorios Palestinos"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad y Tobago"
+ },
+ "TA": {
+ "name": "Tristán da Cunha"
+ },
+ "TN": {
+ "name": "Túnez"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrania"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis y Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "DJ": {
+ "name": "Yibuti"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/es-SV.json b/library/intl/resources/country/es-SV.json
new file mode 100644
index 000000000..6a02f5aec
--- /dev/null
+++ b/library/intl/resources/country/es-SV.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antigua y Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudí"
+ },
+ "DZ": {
+ "name": "Argelia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaiyán"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladés"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Baréin"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belice"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia y Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunéi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboya"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "EA": {
+ "name": "Ceuta y Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Ciudad del Vaticano"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoras"
+ },
+ "KP": {
+ "name": "Corea del Norte"
+ },
+ "KR": {
+ "name": "Corea del Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curazao"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Unidos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FJ": {
+ "name": "Fiyi"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GF": {
+ "name": "Guayana Francesa"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bisáu"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "AC": {
+ "name": "Isla Ascensión"
+ },
+ "CX": {
+ "name": "Isla Christmas"
+ },
+ "IM": {
+ "name": "Isla de Man"
+ },
+ "NF": {
+ "name": "Isla Norfolk"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "AX": {
+ "name": "Islas Ã…land"
+ },
+ "KY": {
+ "name": "Islas Caimán"
+ },
+ "IC": {
+ "name": "islas Canarias"
+ },
+ "CC": {
+ "name": "Islas Cocos"
+ },
+ "CK": {
+ "name": "Islas Cook"
+ },
+ "FO": {
+ "name": "Islas Feroe"
+ },
+ "GS": {
+ "name": "Islas Georgia del Sur y Sandwich del Sur"
+ },
+ "FK": {
+ "name": "Islas Malvinas"
+ },
+ "MP": {
+ "name": "Islas Marianas del Norte"
+ },
+ "MH": {
+ "name": "Islas Marshall"
+ },
+ "UM": {
+ "name": "Islas menores alejadas de EE. UU."
+ },
+ "PN": {
+ "name": "Islas Pitcairn"
+ },
+ "SB": {
+ "name": "Islas Salomón"
+ },
+ "TC": {
+ "name": "Islas Turcas y Caicos"
+ },
+ "VG": {
+ "name": "Islas Vírgenes Británicas"
+ },
+ "VI": {
+ "name": "Islas Vírgenes de EE. UU."
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japón"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KZ": {
+ "name": "Kazajistán"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirguistán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malasia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marruecos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Mauricio"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nueva Caledonia"
+ },
+ "NZ": {
+ "name": "Nueva Zelanda"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Bajos"
+ },
+ "PK": {
+ "name": "Pakistán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nueva Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "HK": {
+ "name": "RAE de Hong Kong (China)"
+ },
+ "MO": {
+ "name": "RAE de Macao (China)"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centroafricana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "CG": {
+ "name": "República del Congo"
+ },
+ "CD": {
+ "name": "República Democrática del Congo"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumanía"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sáhara Occidental"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "KN": {
+ "name": "San Cristóbal y Nieves"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martín"
+ },
+ "PM": {
+ "name": "San Pedro y Miquelón"
+ },
+ "VC": {
+ "name": "San Vicente y las Granadinas"
+ },
+ "SH": {
+ "name": "Santa Elena"
+ },
+ "LC": {
+ "name": "Santa Lucía"
+ },
+ "ST": {
+ "name": "Santo Tomé y Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leona"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán del Sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suiza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard y Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Tayikistán"
+ },
+ "IO": {
+ "name": "Territorio Británico del Océano Ãndico"
+ },
+ "TF": {
+ "name": "Territorios Australes Franceses"
+ },
+ "PS": {
+ "name": "Territorios Palestinos"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad y Tobago"
+ },
+ "TA": {
+ "name": "Tristán da Cunha"
+ },
+ "TN": {
+ "name": "Túnez"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrania"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis y Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "DJ": {
+ "name": "Yibuti"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/es-US.json b/library/intl/resources/country/es-US.json
new file mode 100644
index 000000000..6a02f5aec
--- /dev/null
+++ b/library/intl/resources/country/es-US.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antigua y Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudí"
+ },
+ "DZ": {
+ "name": "Argelia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaiyán"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladés"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Baréin"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belice"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia y Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunéi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboya"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "EA": {
+ "name": "Ceuta y Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Ciudad del Vaticano"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoras"
+ },
+ "KP": {
+ "name": "Corea del Norte"
+ },
+ "KR": {
+ "name": "Corea del Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curazao"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Unidos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FJ": {
+ "name": "Fiyi"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GF": {
+ "name": "Guayana Francesa"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bisáu"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "AC": {
+ "name": "Isla Ascensión"
+ },
+ "CX": {
+ "name": "Isla Christmas"
+ },
+ "IM": {
+ "name": "Isla de Man"
+ },
+ "NF": {
+ "name": "Isla Norfolk"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "AX": {
+ "name": "Islas Ã…land"
+ },
+ "KY": {
+ "name": "Islas Caimán"
+ },
+ "IC": {
+ "name": "islas Canarias"
+ },
+ "CC": {
+ "name": "Islas Cocos"
+ },
+ "CK": {
+ "name": "Islas Cook"
+ },
+ "FO": {
+ "name": "Islas Feroe"
+ },
+ "GS": {
+ "name": "Islas Georgia del Sur y Sandwich del Sur"
+ },
+ "FK": {
+ "name": "Islas Malvinas"
+ },
+ "MP": {
+ "name": "Islas Marianas del Norte"
+ },
+ "MH": {
+ "name": "Islas Marshall"
+ },
+ "UM": {
+ "name": "Islas menores alejadas de EE. UU."
+ },
+ "PN": {
+ "name": "Islas Pitcairn"
+ },
+ "SB": {
+ "name": "Islas Salomón"
+ },
+ "TC": {
+ "name": "Islas Turcas y Caicos"
+ },
+ "VG": {
+ "name": "Islas Vírgenes Británicas"
+ },
+ "VI": {
+ "name": "Islas Vírgenes de EE. UU."
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japón"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KZ": {
+ "name": "Kazajistán"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirguistán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malasia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marruecos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Mauricio"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nueva Caledonia"
+ },
+ "NZ": {
+ "name": "Nueva Zelanda"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Bajos"
+ },
+ "PK": {
+ "name": "Pakistán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nueva Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "HK": {
+ "name": "RAE de Hong Kong (China)"
+ },
+ "MO": {
+ "name": "RAE de Macao (China)"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centroafricana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "CG": {
+ "name": "República del Congo"
+ },
+ "CD": {
+ "name": "República Democrática del Congo"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumanía"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sáhara Occidental"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "KN": {
+ "name": "San Cristóbal y Nieves"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martín"
+ },
+ "PM": {
+ "name": "San Pedro y Miquelón"
+ },
+ "VC": {
+ "name": "San Vicente y las Granadinas"
+ },
+ "SH": {
+ "name": "Santa Elena"
+ },
+ "LC": {
+ "name": "Santa Lucía"
+ },
+ "ST": {
+ "name": "Santo Tomé y Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leona"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán del Sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suiza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard y Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Tayikistán"
+ },
+ "IO": {
+ "name": "Territorio Británico del Océano Ãndico"
+ },
+ "TF": {
+ "name": "Territorios Australes Franceses"
+ },
+ "PS": {
+ "name": "Territorios Palestinos"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad y Tobago"
+ },
+ "TA": {
+ "name": "Tristán da Cunha"
+ },
+ "TN": {
+ "name": "Túnez"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrania"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis y Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "DJ": {
+ "name": "Yibuti"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/es-UY.json b/library/intl/resources/country/es-UY.json
new file mode 100644
index 000000000..6a02f5aec
--- /dev/null
+++ b/library/intl/resources/country/es-UY.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antigua y Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudí"
+ },
+ "DZ": {
+ "name": "Argelia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaiyán"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladés"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Baréin"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belice"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia y Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunéi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboya"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "EA": {
+ "name": "Ceuta y Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Ciudad del Vaticano"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoras"
+ },
+ "KP": {
+ "name": "Corea del Norte"
+ },
+ "KR": {
+ "name": "Corea del Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curazao"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Unidos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FJ": {
+ "name": "Fiyi"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GF": {
+ "name": "Guayana Francesa"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bisáu"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "AC": {
+ "name": "Isla Ascensión"
+ },
+ "CX": {
+ "name": "Isla Christmas"
+ },
+ "IM": {
+ "name": "Isla de Man"
+ },
+ "NF": {
+ "name": "Isla Norfolk"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "AX": {
+ "name": "Islas Ã…land"
+ },
+ "KY": {
+ "name": "Islas Caimán"
+ },
+ "IC": {
+ "name": "islas Canarias"
+ },
+ "CC": {
+ "name": "Islas Cocos"
+ },
+ "CK": {
+ "name": "Islas Cook"
+ },
+ "FO": {
+ "name": "Islas Feroe"
+ },
+ "GS": {
+ "name": "Islas Georgia del Sur y Sandwich del Sur"
+ },
+ "FK": {
+ "name": "Islas Malvinas"
+ },
+ "MP": {
+ "name": "Islas Marianas del Norte"
+ },
+ "MH": {
+ "name": "Islas Marshall"
+ },
+ "UM": {
+ "name": "Islas menores alejadas de EE. UU."
+ },
+ "PN": {
+ "name": "Islas Pitcairn"
+ },
+ "SB": {
+ "name": "Islas Salomón"
+ },
+ "TC": {
+ "name": "Islas Turcas y Caicos"
+ },
+ "VG": {
+ "name": "Islas Vírgenes Británicas"
+ },
+ "VI": {
+ "name": "Islas Vírgenes de EE. UU."
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japón"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KZ": {
+ "name": "Kazajistán"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirguistán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malasia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marruecos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Mauricio"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nueva Caledonia"
+ },
+ "NZ": {
+ "name": "Nueva Zelanda"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Bajos"
+ },
+ "PK": {
+ "name": "Pakistán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nueva Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "HK": {
+ "name": "RAE de Hong Kong (China)"
+ },
+ "MO": {
+ "name": "RAE de Macao (China)"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centroafricana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "CG": {
+ "name": "República del Congo"
+ },
+ "CD": {
+ "name": "República Democrática del Congo"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumanía"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sáhara Occidental"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "KN": {
+ "name": "San Cristóbal y Nieves"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martín"
+ },
+ "PM": {
+ "name": "San Pedro y Miquelón"
+ },
+ "VC": {
+ "name": "San Vicente y las Granadinas"
+ },
+ "SH": {
+ "name": "Santa Elena"
+ },
+ "LC": {
+ "name": "Santa Lucía"
+ },
+ "ST": {
+ "name": "Santo Tomé y Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leona"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán del Sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suiza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard y Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Tayikistán"
+ },
+ "IO": {
+ "name": "Territorio Británico del Océano Ãndico"
+ },
+ "TF": {
+ "name": "Territorios Australes Franceses"
+ },
+ "PS": {
+ "name": "Territorios Palestinos"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad y Tobago"
+ },
+ "TA": {
+ "name": "Tristán da Cunha"
+ },
+ "TN": {
+ "name": "Túnez"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrania"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis y Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "DJ": {
+ "name": "Yibuti"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/es-VE.json b/library/intl/resources/country/es-VE.json
new file mode 100644
index 000000000..6a02f5aec
--- /dev/null
+++ b/library/intl/resources/country/es-VE.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antigua y Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudí"
+ },
+ "DZ": {
+ "name": "Argelia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaiyán"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladés"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Baréin"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belice"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia y Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunéi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboya"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "EA": {
+ "name": "Ceuta y Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Ciudad del Vaticano"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoras"
+ },
+ "KP": {
+ "name": "Corea del Norte"
+ },
+ "KR": {
+ "name": "Corea del Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curazao"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Unidos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FJ": {
+ "name": "Fiyi"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GF": {
+ "name": "Guayana Francesa"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bisáu"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "AC": {
+ "name": "Isla Ascensión"
+ },
+ "CX": {
+ "name": "Isla Christmas"
+ },
+ "IM": {
+ "name": "Isla de Man"
+ },
+ "NF": {
+ "name": "Isla Norfolk"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "AX": {
+ "name": "Islas Ã…land"
+ },
+ "KY": {
+ "name": "Islas Caimán"
+ },
+ "IC": {
+ "name": "islas Canarias"
+ },
+ "CC": {
+ "name": "Islas Cocos"
+ },
+ "CK": {
+ "name": "Islas Cook"
+ },
+ "FO": {
+ "name": "Islas Feroe"
+ },
+ "GS": {
+ "name": "Islas Georgia del Sur y Sandwich del Sur"
+ },
+ "FK": {
+ "name": "Islas Malvinas"
+ },
+ "MP": {
+ "name": "Islas Marianas del Norte"
+ },
+ "MH": {
+ "name": "Islas Marshall"
+ },
+ "UM": {
+ "name": "Islas menores alejadas de EE. UU."
+ },
+ "PN": {
+ "name": "Islas Pitcairn"
+ },
+ "SB": {
+ "name": "Islas Salomón"
+ },
+ "TC": {
+ "name": "Islas Turcas y Caicos"
+ },
+ "VG": {
+ "name": "Islas Vírgenes Británicas"
+ },
+ "VI": {
+ "name": "Islas Vírgenes de EE. UU."
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japón"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KZ": {
+ "name": "Kazajistán"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirguistán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malasia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marruecos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Mauricio"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nueva Caledonia"
+ },
+ "NZ": {
+ "name": "Nueva Zelanda"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Bajos"
+ },
+ "PK": {
+ "name": "Pakistán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nueva Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "HK": {
+ "name": "RAE de Hong Kong (China)"
+ },
+ "MO": {
+ "name": "RAE de Macao (China)"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centroafricana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "CG": {
+ "name": "República del Congo"
+ },
+ "CD": {
+ "name": "República Democrática del Congo"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumanía"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sáhara Occidental"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "KN": {
+ "name": "San Cristóbal y Nieves"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martín"
+ },
+ "PM": {
+ "name": "San Pedro y Miquelón"
+ },
+ "VC": {
+ "name": "San Vicente y las Granadinas"
+ },
+ "SH": {
+ "name": "Santa Elena"
+ },
+ "LC": {
+ "name": "Santa Lucía"
+ },
+ "ST": {
+ "name": "Santo Tomé y Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leona"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán del Sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suiza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard y Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Tayikistán"
+ },
+ "IO": {
+ "name": "Territorio Británico del Océano Ãndico"
+ },
+ "TF": {
+ "name": "Territorios Australes Franceses"
+ },
+ "PS": {
+ "name": "Territorios Palestinos"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad y Tobago"
+ },
+ "TA": {
+ "name": "Tristán da Cunha"
+ },
+ "TN": {
+ "name": "Túnez"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrania"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis y Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "DJ": {
+ "name": "Yibuti"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/es.json b/library/intl/resources/country/es.json
new file mode 100644
index 000000000..12f040042
--- /dev/null
+++ b/library/intl/resources/country/es.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antigua y Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudí"
+ },
+ "DZ": {
+ "name": "Argelia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaiyán"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladés"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Baréin"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belice"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia-Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunéi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboya"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "EA": {
+ "name": "Ceuta y Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Ciudad del Vaticano"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoras"
+ },
+ "KP": {
+ "name": "Corea del Norte"
+ },
+ "KR": {
+ "name": "Corea del Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curazao"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Unidos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FJ": {
+ "name": "Fiyi"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GF": {
+ "name": "Guayana Francesa"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bisáu"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "CX": {
+ "name": "Isla Christmas"
+ },
+ "AC": {
+ "name": "Isla de la Ascensión"
+ },
+ "IM": {
+ "name": "Isla de Man"
+ },
+ "NU": {
+ "name": "Isla Niue"
+ },
+ "NF": {
+ "name": "Isla Norfolk"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "AX": {
+ "name": "Islas Ã…land"
+ },
+ "KY": {
+ "name": "Islas Caimán"
+ },
+ "IC": {
+ "name": "islas Canarias"
+ },
+ "CC": {
+ "name": "Islas Cocos"
+ },
+ "CK": {
+ "name": "Islas Cook"
+ },
+ "FO": {
+ "name": "Islas Feroe"
+ },
+ "GS": {
+ "name": "Islas Georgia del Sur y Sandwich del Sur"
+ },
+ "FK": {
+ "name": "Islas Malvinas"
+ },
+ "MP": {
+ "name": "Islas Marianas del Norte"
+ },
+ "MH": {
+ "name": "Islas Marshall"
+ },
+ "UM": {
+ "name": "Islas menores alejadas de EE. UU."
+ },
+ "PN": {
+ "name": "Islas Pitcairn"
+ },
+ "SB": {
+ "name": "Islas Salomón"
+ },
+ "TC": {
+ "name": "Islas Turcas y Caicos"
+ },
+ "VG": {
+ "name": "Islas Vírgenes Británicas"
+ },
+ "VI": {
+ "name": "Islas Vírgenes de EE. UU."
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japón"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KZ": {
+ "name": "Kazajistán"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirguistán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malasia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marruecos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Mauricio"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nueva Caledonia"
+ },
+ "NZ": {
+ "name": "Nueva Zelanda"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Bajos"
+ },
+ "PK": {
+ "name": "Pakistán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nueva Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "HK": {
+ "name": "RAE de Hong Kong (China)"
+ },
+ "MO": {
+ "name": "RAE de Macao (China)"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centroafricana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "CG": {
+ "name": "República del Congo"
+ },
+ "CD": {
+ "name": "República Democrática del Congo"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumanía"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sáhara Occidental"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "KN": {
+ "name": "San Cristóbal y Nieves"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martín"
+ },
+ "PM": {
+ "name": "San Pedro y Miquelón"
+ },
+ "VC": {
+ "name": "San Vicente y las Granadinas"
+ },
+ "SH": {
+ "name": "Santa Elena"
+ },
+ "LC": {
+ "name": "Santa Lucía"
+ },
+ "ST": {
+ "name": "Santo Tomé y Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leona"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán del Sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suiza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard y Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Tayikistán"
+ },
+ "IO": {
+ "name": "Territorio Británico del Océano Ãndico"
+ },
+ "TF": {
+ "name": "Territorios Australes Franceses"
+ },
+ "PS": {
+ "name": "Territorios Palestinos"
+ },
+ "TL": {
+ "name": "Timor Oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad y Tobago"
+ },
+ "TA": {
+ "name": "Tristán da Cunha"
+ },
+ "TN": {
+ "name": "Túnez"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrania"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis y Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "DJ": {
+ "name": "Yibuti"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/et.json b/library/intl/resources/country/et.json
new file mode 100644
index 000000000..85758bcff
--- /dev/null
+++ b/library/intl/resources/country/et.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistan"
+ },
+ "AX": {
+ "name": "Ahvenamaa"
+ },
+ "AL": {
+ "name": "Albaania"
+ },
+ "DZ": {
+ "name": "Alžeeria"
+ },
+ "AS": {
+ "name": "Ameerika Samoa"
+ },
+ "US": {
+ "name": "Ameerika Ãœhendriigid"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktis"
+ },
+ "AG": {
+ "name": "Antigua ja Barbuda"
+ },
+ "AE": {
+ "name": "Araabia Ãœhendemiraadid"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armeenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascensioni saar"
+ },
+ "AZ": {
+ "name": "Aserbaidžaan"
+ },
+ "AU": {
+ "name": "Austraalia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BH": {
+ "name": "Bahrein"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "PW": {
+ "name": "Belau"
+ },
+ "BE": {
+ "name": "Belgia"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Boliivia"
+ },
+ "BA": {
+ "name": "Bosnia ja Hertsegoviina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasiilia"
+ },
+ "IO": {
+ "name": "Briti India ookeani ala"
+ },
+ "VG": {
+ "name": "Briti Neitsisaared"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "EA": {
+ "name": "Ceuta ja Melilla"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "CK": {
+ "name": "Cooki saared"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominikaani Vabariik"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EE": {
+ "name": "Eesti"
+ },
+ "EG": {
+ "name": "Egiptus"
+ },
+ "GQ": {
+ "name": "Ekvatoriaal-Guinea"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "ET": {
+ "name": "Etioopia"
+ },
+ "FK": {
+ "name": "Falklandi saared"
+ },
+ "FJ": {
+ "name": "Fidži"
+ },
+ "PH": {
+ "name": "Filipiinid"
+ },
+ "FO": {
+ "name": "Fääri saared"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GE": {
+ "name": "Gruusia"
+ },
+ "GL": {
+ "name": "Gröönimaa"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "CN": {
+ "name": "Hiina"
+ },
+ "ES": {
+ "name": "Hispaania"
+ },
+ "NL": {
+ "name": "Holland"
+ },
+ "BQ": {
+ "name": "Hollandi Kariibi mere saared"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hongkong - Hiina erihalduspiirkond"
+ },
+ "HR": {
+ "name": "Horvaatia"
+ },
+ "TL": {
+ "name": "Ida-Timor"
+ },
+ "IE": {
+ "name": "Iirimaa"
+ },
+ "IL": {
+ "name": "Iisrael"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indoneesia"
+ },
+ "IQ": {
+ "name": "Iraak"
+ },
+ "IR": {
+ "name": "Iraan"
+ },
+ "IS": {
+ "name": "Island"
+ },
+ "IT": {
+ "name": "Itaalia"
+ },
+ "JP": {
+ "name": "Jaapan"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "YE": {
+ "name": "Jeemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordaania"
+ },
+ "CX": {
+ "name": "Jõulusaar"
+ },
+ "KY": {
+ "name": "Kaimanisaared"
+ },
+ "KH": {
+ "name": "Kambodža"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "IC": {
+ "name": "Kanaari saared"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "KZ": {
+ "name": "Kasahstan"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CF": {
+ "name": "Kesk-Aafrika Vabariik"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KM": {
+ "name": "Komoorid"
+ },
+ "CD": {
+ "name": "Kongo DV"
+ },
+ "CG": {
+ "name": "Kongo-Brazzaville"
+ },
+ "CC": {
+ "name": "Kookossaared"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "GR": {
+ "name": "Kreeka"
+ },
+ "CU": {
+ "name": "Kuuba"
+ },
+ "KW": {
+ "name": "Kuveit"
+ },
+ "KG": {
+ "name": "Kõrgõzstan"
+ },
+ "CY": {
+ "name": "Küpros"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LT": {
+ "name": "Leedu"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Libeeria"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LB": {
+ "name": "Liibanon"
+ },
+ "LY": {
+ "name": "Liibüa"
+ },
+ "LU": {
+ "name": "Luksemburg"
+ },
+ "ZA": {
+ "name": "Lõuna-Aafrika Vabariik"
+ },
+ "GS": {
+ "name": "Lõuna-Georgia ja Lõuna-Sandwichi saared"
+ },
+ "KR": {
+ "name": "Lõuna-Korea"
+ },
+ "SS": {
+ "name": "Lõuna-Sudaan"
+ },
+ "LV": {
+ "name": "Läti"
+ },
+ "EH": {
+ "name": "Lääne-Sahara"
+ },
+ "MO": {
+ "name": "Macau - Hiina erihalduspiirkond"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MK": {
+ "name": "Makedoonia"
+ },
+ "MY": {
+ "name": "Malaisia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldiivid"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "IM": {
+ "name": "Mani saar"
+ },
+ "MA": {
+ "name": "Maroko"
+ },
+ "MH": {
+ "name": "Marshalli saared"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritaania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mehhiko"
+ },
+ "FM": {
+ "name": "Mikroneesia Liiduriigid"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongoolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mosambiik"
+ },
+ "MM": {
+ "name": "Myanmar (Birma)"
+ },
+ "NA": {
+ "name": "Namiibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NG": {
+ "name": "Nigeeria"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk"
+ },
+ "NO": {
+ "name": "Norra"
+ },
+ "OM": {
+ "name": "Omaan"
+ },
+ "PG": {
+ "name": "Paapua Uus-Guinea"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PS": {
+ "name": "Palestiina alad"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peruu"
+ },
+ "PN": {
+ "name": "Pitcairni saared"
+ },
+ "PL": {
+ "name": "Poola"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "GF": {
+ "name": "Prantsuse Guajaana"
+ },
+ "TF": {
+ "name": "Prantsuse Lõunaalad"
+ },
+ "PF": {
+ "name": "Prantsuse Polüneesia"
+ },
+ "FR": {
+ "name": "Prantsusmaa"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "KP": {
+ "name": "Põhja-Korea"
+ },
+ "MP": {
+ "name": "Põhja-Mariaanid"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "CV": {
+ "name": "Roheneemesaared"
+ },
+ "SE": {
+ "name": "Rootsi"
+ },
+ "RO": {
+ "name": "Rumeenia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SB": {
+ "name": "Saalomoni Saared"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts ja Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre ja Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vincent ja Grenadiinid"
+ },
+ "DE": {
+ "name": "Saksamaa"
+ },
+ "ZM": {
+ "name": "Sambia"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé ja Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Araabia"
+ },
+ "SC": {
+ "name": "Seišellid"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakkia"
+ },
+ "SI": {
+ "name": "Sloveenia"
+ },
+ "SO": {
+ "name": "Somaalia"
+ },
+ "FI": {
+ "name": "Soome"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SD": {
+ "name": "Sudaan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "GB": {
+ "name": "Suurbritannia"
+ },
+ "SZ": {
+ "name": "Svaasimaa"
+ },
+ "SJ": {
+ "name": "Svalbard ja Jan Mayen"
+ },
+ "SY": {
+ "name": "Süüria"
+ },
+ "CH": {
+ "name": "Å veits"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ },
+ "DK": {
+ "name": "Taani"
+ },
+ "TJ": {
+ "name": "Tadžikistan"
+ },
+ "TH": {
+ "name": "Tai"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tansaania"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad ja Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TD": {
+ "name": "TÅ¡aad"
+ },
+ "CZ": {
+ "name": "TÅ¡ehhi"
+ },
+ "CL": {
+ "name": "TÅ¡iili"
+ },
+ "TN": {
+ "name": "Tuneesia"
+ },
+ "TC": {
+ "name": "Turks ja Caicos"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "TR": {
+ "name": "Türgi"
+ },
+ "TM": {
+ "name": "Türkmenistan"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraina"
+ },
+ "HU": {
+ "name": "Ungari"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "VI": {
+ "name": "USA Neitsisaared"
+ },
+ "UZ": {
+ "name": "Usbekistan"
+ },
+ "NC": {
+ "name": "Uus-Kaledoonia"
+ },
+ "NZ": {
+ "name": "Uus-Meremaa"
+ },
+ "BY": {
+ "name": "Valgevene"
+ },
+ "WF": {
+ "name": "Wallis ja Futuna"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikan"
+ },
+ "RU": {
+ "name": "Venemaa"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "UM": {
+ "name": "Ãœhendriikide hajasaared"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/eu.json b/library/intl/resources/country/eu.json
new file mode 100644
index 000000000..2e210783f
--- /dev/null
+++ b/library/intl/resources/country/eu.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistan"
+ },
+ "CF": {
+ "name": "Afrika Erdiko Errepublika"
+ },
+ "AX": {
+ "name": "Aland uharteak"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemania"
+ },
+ "DZ": {
+ "name": "Aljeria"
+ },
+ "AS": {
+ "name": "Amerikar Samoa"
+ },
+ "US": {
+ "name": "Ameriketako Estatu Batuak"
+ },
+ "UM": {
+ "name": "Ameriketako Estatu Batuetako Kanpoaldeko Uharte Txikiak"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AI": {
+ "name": "Angila"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AQ": {
+ "name": "Antartika"
+ },
+ "AG": {
+ "name": "Antigua eta Barbuda"
+ },
+ "AE": {
+ "name": "Arabiar Emirrerri Batuak"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension uhartea"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamak"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgika"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "VI": {
+ "name": "Birjina uharte amerikarrak"
+ },
+ "VG": {
+ "name": "Birjina uharte britainiarrak"
+ },
+ "CI": {
+ "name": "Boli Kosta"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia-Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "EA": {
+ "name": "Ceuta eta Melilla"
+ },
+ "CX": {
+ "name": "Christmas uhartea"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) uharteak"
+ },
+ "CK": {
+ "name": "Cook uharteak"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danimarka"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibuti"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "DO": {
+ "name": "Dominikar Errepublika"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "TL": {
+ "name": "Ekialdeko Timor"
+ },
+ "EC": {
+ "name": "Ekuador"
+ },
+ "GQ": {
+ "name": "Ekuatore Ginea"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "GB": {
+ "name": "Erresuma Batua"
+ },
+ "RO": {
+ "name": "Errumania"
+ },
+ "RU": {
+ "name": "Errusia"
+ },
+ "SK": {
+ "name": "Eslovakia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "Espainia"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopia"
+ },
+ "FO": {
+ "name": "Faroe uharteak"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipinak"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FR": {
+ "name": "Frantzia"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GN": {
+ "name": "Ginea"
+ },
+ "GW": {
+ "name": "Ginea-Bissau"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GR": {
+ "name": "Grezia"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GF": {
+ "name": "Guyana Frantsesa"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "KR": {
+ "name": "Hego Korea"
+ },
+ "SS": {
+ "name": "Hego Sudan"
+ },
+ "ZA": {
+ "name": "Hegoafrika"
+ },
+ "GS": {
+ "name": "Hegoaldeko Georgia eta Hegoaldeko Sandwich uharteak"
+ },
+ "TF": {
+ "name": "Hegoaldeko lurralde frantsesak"
+ },
+ "NL": {
+ "name": "Herbehereak"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong AEB Txina"
+ },
+ "HU": {
+ "name": "Hungaria"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "IO": {
+ "name": "Indiako Ozeanoko lurralde britainiarra"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "KP": {
+ "name": "Ipar Korea"
+ },
+ "MP": {
+ "name": "Iparraldeko Mariana uharteak"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "JP": {
+ "name": "Japonia"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KY": {
+ "name": "Kaiman uharteak"
+ },
+ "NC": {
+ "name": "Kaledonia Berria"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanariak"
+ },
+ "KH": {
+ "name": "Kanbodia"
+ },
+ "BQ": {
+ "name": "Karibeko Herbehereak"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KG": {
+ "name": "Kirgizistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CO": {
+ "name": "Kolonbia"
+ },
+ "KM": {
+ "name": "Komoreak"
+ },
+ "CG": {
+ "name": "Kongo (Brazzaville)"
+ },
+ "CD": {
+ "name": "Kongoko Errepublika Demokratikoa"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "HR": {
+ "name": "Kroazia"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Libano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxenburgo"
+ },
+ "MO": {
+ "name": "Macau AEB Txina"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldivak"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "FK": {
+ "name": "Malvinak"
+ },
+ "IM": {
+ "name": "Man uhartea"
+ },
+ "MA": {
+ "name": "Maroko"
+ },
+ "MH": {
+ "name": "Marshall uharteak"
+ },
+ "MQ": {
+ "name": "Martinika"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Maurizio"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MK": {
+ "name": "Mazedonia"
+ },
+ "EH": {
+ "name": "Mendebaldeko Sahara"
+ },
+ "MX": {
+ "name": "Mexiko"
+ },
+ "FM": {
+ "name": "Mikronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambike"
+ },
+ "MM": {
+ "name": "Myanmar"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NI": {
+ "name": "Nikaragua"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk uhartea"
+ },
+ "NO": {
+ "name": "Norvegia"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinako Lurraldeak"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Ginea Berria"
+ },
+ "PY": {
+ "name": "Paraguai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn uharteak"
+ },
+ "PF": {
+ "name": "Polinesia Frantsesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Reunion"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts eta Nevis"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "VC": {
+ "name": "Saint Vincent eta Grenadinak"
+ },
+ "PM": {
+ "name": "Saint-Pierre eta Mikelune"
+ },
+ "SB": {
+ "name": "Salomon uharteak"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "BL": {
+ "name": "San Bartolome"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "LC": {
+ "name": "Santa Luzia"
+ },
+ "ST": {
+ "name": "Sao Tome eta Principe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelleak"
+ },
+ "SL": {
+ "name": "Sierra Leona"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SE": {
+ "name": "Suedia"
+ },
+ "CH": {
+ "name": "Suitza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard eta Jan Mayen uharteak"
+ },
+ "SZ": {
+ "name": "Swazilandia"
+ },
+ "TJ": {
+ "name": "Tadjikistan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailandia"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad eta Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TC": {
+ "name": "Turk eta Caicos uharteak"
+ },
+ "TR": {
+ "name": "Turkia"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "TD": {
+ "name": "Txad"
+ },
+ "CZ": {
+ "name": "Txekiar Errepublika"
+ },
+ "CL": {
+ "name": "Txile"
+ },
+ "CN": {
+ "name": "Txina"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraina"
+ },
+ "UY": {
+ "name": "Uruguai"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikano Hiria"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis eta Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "NZ": {
+ "name": "Zeelanda Berria"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ },
+ "CY": {
+ "name": "Zipre"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ewo.json b/library/intl/resources/country/ewo.json
new file mode 100644
index 000000000..48ae55a50
--- /dev/null
+++ b/library/intl/resources/country/ewo.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afəganisətán"
+ },
+ "ZA": {
+ "name": "Afiríka yá Súd"
+ },
+ "HT": {
+ "name": "Aití"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Aləbánia"
+ },
+ "DZ": {
+ "name": "Aləyéria"
+ },
+ "AD": {
+ "name": "Andór"
+ },
+ "AI": {
+ "name": "Angíyə"
+ },
+ "AO": {
+ "name": "Angolá"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antígwa ai Barəbúda"
+ },
+ "SA": {
+ "name": "Arabí Saudí"
+ },
+ "AR": {
+ "name": "Arəhenətína"
+ },
+ "AM": {
+ "name": "Arəménia"
+ },
+ "AW": {
+ "name": "Arúba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AZ": {
+ "name": "Azɛrəbaidzáŋ"
+ },
+ "BS": {
+ "name": "Bahámas"
+ },
+ "BH": {
+ "name": "BahÉ™rÉ›Ìn"
+ },
+ "BD": {
+ "name": "BangaladÉ›Ìs"
+ },
+ "BB": {
+ "name": "Barəbád"
+ },
+ "AE": {
+ "name": "Bemirá yá Arábə uní"
+ },
+ "BY": {
+ "name": "Bəlarús"
+ },
+ "BR": {
+ "name": "Bəlazíl"
+ },
+ "BZ": {
+ "name": "Bəlís"
+ },
+ "BJ": {
+ "name": "Bəníŋ"
+ },
+ "AS": {
+ "name": "BÉ™samóa yá AmÉ™ÌrÉ™ka"
+ },
+ "BE": {
+ "name": "Bɛləhíg"
+ },
+ "BM": {
+ "name": "Bɛrəmúd"
+ },
+ "BO": {
+ "name": "Bolívia"
+ },
+ "BA": {
+ "name": "Bosəní ai ɛrəzegovín"
+ },
+ "BW": {
+ "name": "Botswaná"
+ },
+ "BG": {
+ "name": "Buləgarí"
+ },
+ "BF": {
+ "name": "Buləkiná Fasó"
+ },
+ "BN": {
+ "name": "Buluné"
+ },
+ "BI": {
+ "name": "Burundí"
+ },
+ "BT": {
+ "name": "Butáŋ"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danəmárəg"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dómənika"
+ },
+ "DJ": {
+ "name": "Dzibutí"
+ },
+ "EG": {
+ "name": "Ehíbətɛn"
+ },
+ "EC": {
+ "name": "Ekwatór"
+ },
+ "ER": {
+ "name": "Elitəlé"
+ },
+ "EE": {
+ "name": "Esetoní"
+ },
+ "ET": {
+ "name": "Etiopí"
+ },
+ "IN": {
+ "name": "É›ÌndÉ™"
+ },
+ "ID": {
+ "name": "ɛndonésia"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fidzí"
+ },
+ "PH": {
+ "name": "Filipín"
+ },
+ "FI": {
+ "name": "Finəlán"
+ },
+ "PL": {
+ "name": "fólis"
+ },
+ "PT": {
+ "name": "fÉ”rÉ™tugÉ›Ìs"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "FR": {
+ "name": "Fulɛnsí"
+ },
+ "GA": {
+ "name": "Gabóŋ"
+ },
+ "GM": {
+ "name": "Gambí"
+ },
+ "GH": {
+ "name": "Ganá"
+ },
+ "GD": {
+ "name": "Gələnádə"
+ },
+ "GR": {
+ "name": "GÉ™lÉ›Ìs"
+ },
+ "GN": {
+ "name": "Giné"
+ },
+ "GW": {
+ "name": "Giné Bisaó"
+ },
+ "GQ": {
+ "name": "Giné Ekwató"
+ },
+ "GL": {
+ "name": "Goelán"
+ },
+ "GP": {
+ "name": "Guadəlúb"
+ },
+ "GU": {
+ "name": "Guám"
+ },
+ "GT": {
+ "name": "Guatemalá"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyán"
+ },
+ "GF": {
+ "name": "Guyán yá Fulɛnsí"
+ },
+ "JM": {
+ "name": "Hamaíka"
+ },
+ "JP": {
+ "name": "HapÉ”Ìn"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "JO": {
+ "name": "Horədaní"
+ },
+ "GE": {
+ "name": "HorÉ™Ìyia"
+ },
+ "IQ": {
+ "name": "Irág"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Irəlándə"
+ },
+ "IS": {
+ "name": "Isəlándə"
+ },
+ "IL": {
+ "name": "IsÉ™raÉ›Ìl"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IT": {
+ "name": "Itáliɛn"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "KH": {
+ "name": "kambodía"
+ },
+ "CM": {
+ "name": "Kamərún"
+ },
+ "CA": {
+ "name": "kanadá"
+ },
+ "QA": {
+ "name": "Katár"
+ },
+ "KZ": {
+ "name": "Kazakətáŋ"
+ },
+ "KE": {
+ "name": "Keniá"
+ },
+ "HR": {
+ "name": "Kəlowásia"
+ },
+ "KI": {
+ "name": "Kiribatí"
+ },
+ "KG": {
+ "name": "Kirigisətán"
+ },
+ "CI": {
+ "name": "Kód DivÉ”Ìr"
+ },
+ "CO": {
+ "name": "Kolɔmbí"
+ },
+ "KM": {
+ "name": "KomÉ”Ìr"
+ },
+ "CG": {
+ "name": "Kongó"
+ },
+ "KP": {
+ "name": "Koré yá Nór"
+ },
+ "KR": {
+ "name": "Koré yá Súd"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kosta Ríka"
+ },
+ "KW": {
+ "name": "KowÉ›Ìd"
+ },
+ "ES": {
+ "name": "Kpənyá"
+ },
+ "CU": {
+ "name": "Kubá"
+ },
+ "LA": {
+ "name": "Laós"
+ },
+ "LS": {
+ "name": "Ləsotó"
+ },
+ "LV": {
+ "name": "Lətoní"
+ },
+ "LB": {
+ "name": "Libáŋ"
+ },
+ "LR": {
+ "name": "Libéria"
+ },
+ "LY": {
+ "name": "Libí"
+ },
+ "LI": {
+ "name": "LísÉ™ÌsÉ™Ìtáin"
+ },
+ "LT": {
+ "name": "Lituaní"
+ },
+ "LU": {
+ "name": "Lukəzambúd"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madagasəkárə"
+ },
+ "MW": {
+ "name": "Malawí"
+ },
+ "MV": {
+ "name": "Malədívə"
+ },
+ "MT": {
+ "name": "Málətə"
+ },
+ "MY": {
+ "name": "MalÉ›Ìzia"
+ },
+ "ML": {
+ "name": "Malí"
+ },
+ "MQ": {
+ "name": "Marətiníg"
+ },
+ "MA": {
+ "name": "MarÉ”Ìg"
+ },
+ "MK": {
+ "name": "Masedónia"
+ },
+ "YT": {
+ "name": "MayÉ”Ìd"
+ },
+ "MX": {
+ "name": "Mɛkəsíg"
+ },
+ "MM": {
+ "name": "Mianəmár"
+ },
+ "FM": {
+ "name": "Mikoronésia"
+ },
+ "VI": {
+ "name": "Minlán Mi Amɛrəkə"
+ },
+ "FK": {
+ "name": "Minlán Mi Fóləkəlan"
+ },
+ "CV": {
+ "name": "Minlán Mí Káb Vɛr"
+ },
+ "KY": {
+ "name": "Minlán Mí Kalimáŋ"
+ },
+ "CK": {
+ "name": "Minlán Mí kúg"
+ },
+ "MH": {
+ "name": "Minlán Mí Maresál"
+ },
+ "MP": {
+ "name": "Minlán Mi Marián yá Nór"
+ },
+ "SB": {
+ "name": "Minlán Mí SolomÉ”Ìn"
+ },
+ "TC": {
+ "name": "Minlán Mí túrÉ™Ìg-ai-Kaíg"
+ },
+ "NF": {
+ "name": "Minlán NÉ”rÉ™fÉ”ÌlÉ™kÉ™"
+ },
+ "MD": {
+ "name": "Molədaví"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MU": {
+ "name": "Morís"
+ },
+ "MR": {
+ "name": "Moritaní"
+ },
+ "MZ": {
+ "name": "Mozambíg"
+ },
+ "MC": {
+ "name": "Mɔnakó"
+ },
+ "MN": {
+ "name": "MÉ”ngÉ”Ìlia"
+ },
+ "MS": {
+ "name": "MÉ”Ìntserád"
+ },
+ "NA": {
+ "name": "Namibí"
+ },
+ "NR": {
+ "name": "Naurú"
+ },
+ "DE": {
+ "name": "Ndzáman"
+ },
+ "NP": {
+ "name": "Nepál"
+ },
+ "SM": {
+ "name": "Ǹfúfúb Maríno"
+ },
+ "SH": {
+ "name": "Ǹfúfúb-ÆlÉ›Ìna"
+ },
+ "KN": {
+ "name": "Ǹfúfúb-Kilisətóv-ai-Nevis"
+ },
+ "LC": {
+ "name": "Ǹfúfúb-Lúsia"
+ },
+ "PM": {
+ "name": "Ǹfúfúb-Píɛr-ai-MikÉ™lÉ”ÌÅ‹"
+ },
+ "VC": {
+ "name": "Ǹfúfúb-Vɛngəsáŋ-ai-Bə Gələnadín"
+ },
+ "NG": {
+ "name": "Nihéria"
+ },
+ "NE": {
+ "name": "NihÉ›Ìr"
+ },
+ "NI": {
+ "name": "Nikarágua"
+ },
+ "NU": {
+ "name": "Niué"
+ },
+ "NC": {
+ "name": "Ǹkpámɛn Kaledónia"
+ },
+ "NZ": {
+ "name": "Ǹkpámɛn Zeláŋ"
+ },
+ "US": {
+ "name": "Ǹnam Amɛrəkə"
+ },
+ "GB": {
+ "name": "Ǹnam Engəlis"
+ },
+ "IO": {
+ "name": "ǹnam É›ngÉ™lís yá Máŋ mÉ™Ì É›ÌndÉ™"
+ },
+ "CD": {
+ "name": "ǹnam Kongó Demokəlatíg"
+ },
+ "VG": {
+ "name": "Å„nam Minlán É›ÌngÉ™lís"
+ },
+ "PS": {
+ "name": "Ǹnam Palɛsətín"
+ },
+ "CZ": {
+ "name": "Ǹnam TsÉ›Ìg"
+ },
+ "VA": {
+ "name": "Ǹnam Vatikán"
+ },
+ "CF": {
+ "name": "ǹnam Zǎŋ Afiriká"
+ },
+ "NO": {
+ "name": "NÉ”rÉ™vÉ›Ìs"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "HN": {
+ "name": "Ondurás"
+ },
+ "HU": {
+ "name": "Ongirí"
+ },
+ "AU": {
+ "name": "Osətəlalí"
+ },
+ "AT": {
+ "name": "Osətəlía"
+ },
+ "PK": {
+ "name": "Pakisətán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papwazi yá ǸkpámÉ›Ìn Giné"
+ },
+ "PY": {
+ "name": "Paragué"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "NL": {
+ "name": "Pɛíbá"
+ },
+ "PN": {
+ "name": "PítÉ™ÌkÉ›ÌrÉ›nÉ™"
+ },
+ "PF": {
+ "name": "Polinesí yá Fulɛnsí"
+ },
+ "PR": {
+ "name": "Pwɛrəto Ríko"
+ },
+ "DO": {
+ "name": "République dominicaine"
+ },
+ "RE": {
+ "name": "ReuniÉ”ÌÅ‹"
+ },
+ "RO": {
+ "name": "Rumaní"
+ },
+ "RU": {
+ "name": "Rúsian"
+ },
+ "RW": {
+ "name": "Ruwandá"
+ },
+ "SV": {
+ "name": "Saləvadór"
+ },
+ "WS": {
+ "name": "Samoá"
+ },
+ "ST": {
+ "name": "Saó Tomé ai Pəlinəsípe"
+ },
+ "SN": {
+ "name": "Senegál"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SK": {
+ "name": "Səlovakí"
+ },
+ "SI": {
+ "name": "Səlovénia"
+ },
+ "LK": {
+ "name": "Səri Laŋká"
+ },
+ "SC": {
+ "name": "SÉ›sÉ›Ìl"
+ },
+ "SL": {
+ "name": "Sierá-leónə"
+ },
+ "SG": {
+ "name": "Singapúr"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "CY": {
+ "name": "Sipəlús"
+ },
+ "SY": {
+ "name": "Sirí"
+ },
+ "SO": {
+ "name": "Somália"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudáŋ"
+ },
+ "CH": {
+ "name": "Suís"
+ },
+ "SR": {
+ "name": "Surinám"
+ },
+ "SE": {
+ "name": "SuwÉ›Ìd"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swazilándə"
+ },
+ "TJ": {
+ "name": "Tadzikisətáŋ"
+ },
+ "TH": {
+ "name": "Tailán"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Taŋəzaní"
+ },
+ "TT": {
+ "name": "Təlinité-ai-Tobágo"
+ },
+ "TL": {
+ "name": "Timôr"
+ },
+ "TG": {
+ "name": "Togó"
+ },
+ "TK": {
+ "name": "Tokeló"
+ },
+ "TO": {
+ "name": "Tɔngá"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TD": {
+ "name": "Tsád"
+ },
+ "CN": {
+ "name": "Tsáina"
+ },
+ "CL": {
+ "name": "Tsilí"
+ },
+ "TN": {
+ "name": "Tunisí"
+ },
+ "TM": {
+ "name": "Turəkəmənisətáŋ"
+ },
+ "TR": {
+ "name": "Turəkí"
+ },
+ "TV": {
+ "name": "Tuvalú"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "Ugandá"
+ },
+ "UA": {
+ "name": "UkÉ™rÉ›Ìn"
+ },
+ "UY": {
+ "name": "Urugué"
+ },
+ "UZ": {
+ "name": "Uzubekisətán"
+ },
+ "VU": {
+ "name": "Vanuátu"
+ },
+ "VE": {
+ "name": "Venezuéla"
+ },
+ "VN": {
+ "name": "Viɛdənám"
+ },
+ "WF": {
+ "name": "Walís-ai-Futúna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "YemÉ›Ìn"
+ },
+ "GI": {
+ "name": "Yiləbalatár"
+ },
+ "ZM": {
+ "name": "Zambí"
+ },
+ "ZW": {
+ "name": "Zimbabwé"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/fa-AF.json b/library/intl/resources/country/fa-AF.json
new file mode 100644
index 000000000..f85b42df4
--- /dev/null
+++ b/library/intl/resources/country/fa-AF.json
@@ -0,0 +1,761 @@
+{
+ "AW": {
+ "name": "آروبا"
+ },
+ "AU": {
+ "name": "آسترالیا"
+ },
+ "DE": {
+ "name": "آلمان"
+ },
+ "AI": {
+ "name": "آنگویلا"
+ },
+ "IE": {
+ "name": "آیرلند"
+ },
+ "IS": {
+ "name": "آیسلند"
+ },
+ "AT": {
+ "name": "اتریش"
+ },
+ "AR": {
+ "name": "ارجنتاین"
+ },
+ "JO": {
+ "name": "اردن"
+ },
+ "AM": {
+ "name": "ارمنستان"
+ },
+ "ER": {
+ "name": "اریتریا"
+ },
+ "UZ": {
+ "name": "ازبکستان"
+ },
+ "EE": {
+ "name": "استونیا"
+ },
+ "IL": {
+ "name": "اسرائیل"
+ },
+ "SJ": {
+ "name": "اسوالبارد و جان‌ماین"
+ },
+ "ZA": {
+ "name": "اÙریقای جنوبی"
+ },
+ "CF": {
+ "name": "اÙریقای مرکزی"
+ },
+ "AF": {
+ "name": "اÙغانستان"
+ },
+ "UA": {
+ "name": "اکراین"
+ },
+ "EC": {
+ "name": "اکوادور"
+ },
+ "AL": {
+ "name": "البانیا"
+ },
+ "DZ": {
+ "name": "الجزایر"
+ },
+ "SV": {
+ "name": "السلوادور"
+ },
+ "AE": {
+ "name": "امارات متحدهٔ عربی"
+ },
+ "AG": {
+ "name": "انتیگوا و باربودا"
+ },
+ "AD": {
+ "name": "اندورا"
+ },
+ "ID": {
+ "name": "اندونیزیا"
+ },
+ "AO": {
+ "name": "انگولا"
+ },
+ "UG": {
+ "name": "اوگاندا"
+ },
+ "US": {
+ "name": "ایالات متحدهٔ امریکا"
+ },
+ "IT": {
+ "name": "ایتالیا"
+ },
+ "ET": {
+ "name": "ایتوپیا"
+ },
+ "IR": {
+ "name": "ایران"
+ },
+ "BB": {
+ "name": "باربادوس"
+ },
+ "BH": {
+ "name": "بحرین"
+ },
+ "BR": {
+ "name": "برازیل"
+ },
+ "BM": {
+ "name": "برمودا"
+ },
+ "BN": {
+ "name": "برونی"
+ },
+ "GB": {
+ "name": "بریتانیا"
+ },
+ "BE": {
+ "name": "بلجیم"
+ },
+ "BG": {
+ "name": "بلغاریا"
+ },
+ "BZ": {
+ "name": "بلیز"
+ },
+ "BD": {
+ "name": "بنگله‌دیش"
+ },
+ "BJ": {
+ "name": "بنین"
+ },
+ "BS": {
+ "name": "بهاماس"
+ },
+ "BT": {
+ "name": "بوتان"
+ },
+ "BW": {
+ "name": "بوتسوانا"
+ },
+ "BF": {
+ "name": "بورکیناÙاسو"
+ },
+ "BI": {
+ "name": "بوروندی"
+ },
+ "BA": {
+ "name": "بوسنیا و هرزه‌گوینا"
+ },
+ "BO": {
+ "name": "بولیویا"
+ },
+ "PG": {
+ "name": "پاپوا نیو گینیا"
+ },
+ "PY": {
+ "name": "پاراگوای"
+ },
+ "PK": {
+ "name": "پاکستان"
+ },
+ "PW": {
+ "name": "پالائو"
+ },
+ "PA": {
+ "name": "پانامه"
+ },
+ "PT": {
+ "name": "پرتگال"
+ },
+ "PF": {
+ "name": "پلی‌نزی Ùرانسه"
+ },
+ "PR": {
+ "name": "پورتوریکو"
+ },
+ "PL": {
+ "name": "پولند"
+ },
+ "PE": {
+ "name": "پیرو"
+ },
+ "TJ": {
+ "name": "تاجکستان"
+ },
+ "TZ": {
+ "name": "تانزانیا"
+ },
+ "TH": {
+ "name": "تایلند"
+ },
+ "TW": {
+ "name": "تایوان"
+ },
+ "TM": {
+ "name": "ترکمنستان"
+ },
+ "TR": {
+ "name": "ترکیه"
+ },
+ "TA": {
+ "name": "تریستان دا کونا"
+ },
+ "TT": {
+ "name": "ترینیداد و توباگو"
+ },
+ "TK": {
+ "name": "توکلائو"
+ },
+ "TG": {
+ "name": "توگو"
+ },
+ "TN": {
+ "name": "تونس"
+ },
+ "TO": {
+ "name": "تونگا"
+ },
+ "TV": {
+ "name": "تووالو"
+ },
+ "TL": {
+ "name": "تیمور شرقی"
+ },
+ "JP": {
+ "name": "جاپان"
+ },
+ "JM": {
+ "name": "جامائیکا"
+ },
+ "GI": {
+ "name": "جبل‌الطارق"
+ },
+ "JE": {
+ "name": "جرزی"
+ },
+ "AC": {
+ "name": "جزایر آسنسیون"
+ },
+ "AX": {
+ "name": "جزایر اÙلند"
+ },
+ "PN": {
+ "name": "جزایر پیت‌کرن"
+ },
+ "TC": {
+ "name": "جزایر تورکس و کایکوس"
+ },
+ "GS": {
+ "name": "جزایر جورجیای جنوبی و ساندویچ جنوبی"
+ },
+ "UM": {
+ "name": "جزایر دوراÙتادهٔ ایالات متحده"
+ },
+ "SB": {
+ "name": "جزایر سلومون"
+ },
+ "FO": {
+ "name": "جزایر Ùارو"
+ },
+ "FK": {
+ "name": "جزایر Ùالکلند"
+ },
+ "IC": {
+ "name": "جزایر قناری"
+ },
+ "BQ": {
+ "name": "جزایر کارائیب هلند"
+ },
+ "CK": {
+ "name": "جزایر کوک"
+ },
+ "CC": {
+ "name": "جزایر کوکوس (کیلینگ)"
+ },
+ "KY": {
+ "name": "جزایر Ú©Ùیمن"
+ },
+ "MH": {
+ "name": "جزایر مارشال"
+ },
+ "MP": {
+ "name": "جزایر ماریانای شمالی"
+ },
+ "VI": {
+ "name": "جزایر ویرجین ایالات متحده"
+ },
+ "VG": {
+ "name": "جزایر ویرجین بریتانیا"
+ },
+ "CX": {
+ "name": "جزیرهٔ کریسمس"
+ },
+ "IM": {
+ "name": "جزیرهٔ من"
+ },
+ "NF": {
+ "name": "جزیره نورÙÚ©"
+ },
+ "AZ": {
+ "name": "جمهوری آذربایجان"
+ },
+ "CZ": {
+ "name": "جمهوری چک"
+ },
+ "CD": {
+ "name": "جمهوری دموکراتیک کانگو"
+ },
+ "DO": {
+ "name": "جمهوری دومینیکن"
+ },
+ "AQ": {
+ "name": "جنوبگان"
+ },
+ "DJ": {
+ "name": "جیبوتی"
+ },
+ "TD": {
+ "name": "چاد"
+ },
+ "CL": {
+ "name": "چلی"
+ },
+ "CN": {
+ "name": "چین"
+ },
+ "DK": {
+ "name": "دنمارک"
+ },
+ "DM": {
+ "name": "دومینیکا"
+ },
+ "DG": {
+ "name": "دیه‌گو گارسیا"
+ },
+ "RW": {
+ "name": "روآندا"
+ },
+ "RU": {
+ "name": "روسیه"
+ },
+ "BY": {
+ "name": "روسیهٔ سÙید"
+ },
+ "RO": {
+ "name": "رومانیا"
+ },
+ "RE": {
+ "name": "رئونیون"
+ },
+ "ZM": {
+ "name": "زامبیا"
+ },
+ "NZ": {
+ "name": "زیلاند جدید"
+ },
+ "ZW": {
+ "name": "زیمبابوی"
+ },
+ "CI": {
+ "name": "ساحل عاج"
+ },
+ "WS": {
+ "name": "ساموآ"
+ },
+ "AS": {
+ "name": "ساموآی آمریکا"
+ },
+ "ST": {
+ "name": "سائو تومه و پرینسیپ"
+ },
+ "EA": {
+ "name": "سبته و ملیله"
+ },
+ "PS": {
+ "name": "سرزمین‌های Ùلسطینی"
+ },
+ "LK": {
+ "name": "سریلانکا"
+ },
+ "SK": {
+ "name": "سلواکیا"
+ },
+ "SI": {
+ "name": "سلونیا"
+ },
+ "BL": {
+ "name": "سن بارتلمی"
+ },
+ "PM": {
+ "name": "سن پیر و میکلن"
+ },
+ "SM": {
+ "name": "سن مارینو"
+ },
+ "KN": {
+ "name": "سنت کیتس و نیویس"
+ },
+ "LC": {
+ "name": "سنت لوسیا"
+ },
+ "SX": {
+ "name": "سنت مارتن"
+ },
+ "MF": {
+ "name": "سنت مارتین"
+ },
+ "SH": {
+ "name": "سنت هلن"
+ },
+ "VC": {
+ "name": "سنت وینسنت و گرینادین"
+ },
+ "SZ": {
+ "name": "سوازیلند"
+ },
+ "SD": {
+ "name": "سودان"
+ },
+ "SS": {
+ "name": "سودان جنوبی"
+ },
+ "SR": {
+ "name": "سورینام"
+ },
+ "SY": {
+ "name": "سوریه"
+ },
+ "SO": {
+ "name": "سومالیه"
+ },
+ "SE": {
+ "name": "سویدن"
+ },
+ "CH": {
+ "name": "سویس"
+ },
+ "SL": {
+ "name": "سیرالیون"
+ },
+ "SC": {
+ "name": "سیشل"
+ },
+ "SG": {
+ "name": "سینگاپور"
+ },
+ "SN": {
+ "name": "سینیگال"
+ },
+ "EH": {
+ "name": "صحرای غربی"
+ },
+ "RS": {
+ "name": "صربستان"
+ },
+ "IQ": {
+ "name": "عراق"
+ },
+ "SA": {
+ "name": "عربستان سعودی"
+ },
+ "OM": {
+ "name": "عمان"
+ },
+ "GH": {
+ "name": "غنا"
+ },
+ "FR": {
+ "name": "Ùرانسه"
+ },
+ "FI": {
+ "name": "Ùنلند"
+ },
+ "FJ": {
+ "name": "Ùیجی"
+ },
+ "PH": {
+ "name": "Ùیلیپین"
+ },
+ "CY": {
+ "name": "قبرس"
+ },
+ "KG": {
+ "name": "قرغزستان"
+ },
+ "KZ": {
+ "name": "قزاقستان"
+ },
+ "QA": {
+ "name": "قطر"
+ },
+ "IO": {
+ "name": "قلمرو بریتانیا در اقیانوس هند"
+ },
+ "TF": {
+ "name": "قلمروهای جنوبی Ùرانسه"
+ },
+ "CR": {
+ "name": "کاستریکا"
+ },
+ "NC": {
+ "name": "کالدونیای جدید"
+ },
+ "CM": {
+ "name": "کامرون"
+ },
+ "CA": {
+ "name": "کانادا"
+ },
+ "CG": {
+ "name": "کانگو"
+ },
+ "HR": {
+ "name": "کروشیا"
+ },
+ "KH": {
+ "name": "کمپوچیا"
+ },
+ "CW": {
+ "name": "کوراسائو"
+ },
+ "KR": {
+ "name": "کوریای جنوبی"
+ },
+ "KP": {
+ "name": "کوریای شمالی"
+ },
+ "XK": {
+ "name": "کوزوو"
+ },
+ "CO": {
+ "name": "کولمبیا"
+ },
+ "KM": {
+ "name": "کومور"
+ },
+ "KW": {
+ "name": "کویت"
+ },
+ "CV": {
+ "name": "کیپ‌ورد"
+ },
+ "KI": {
+ "name": "کیریباتی"
+ },
+ "KE": {
+ "name": "کینیا"
+ },
+ "CU": {
+ "name": "کیوبا"
+ },
+ "GA": {
+ "name": "گابن"
+ },
+ "GM": {
+ "name": "گامبیا"
+ },
+ "GE": {
+ "name": "گرجستان"
+ },
+ "GG": {
+ "name": "گرنزی"
+ },
+ "GD": {
+ "name": "گرینادا"
+ },
+ "GL": {
+ "name": "گرینلند"
+ },
+ "GT": {
+ "name": "گواتیمالا"
+ },
+ "GP": {
+ "name": "گوادلوپ"
+ },
+ "GU": {
+ "name": "گوام"
+ },
+ "GF": {
+ "name": "گویان Ùرانسه"
+ },
+ "GY": {
+ "name": "گیانا"
+ },
+ "GN": {
+ "name": "گینیا"
+ },
+ "GQ": {
+ "name": "گینیا استوایی"
+ },
+ "GW": {
+ "name": "گینیا بیسائو"
+ },
+ "LV": {
+ "name": "لاتویا"
+ },
+ "LA": {
+ "name": "لائوس"
+ },
+ "LB": {
+ "name": "لبنان"
+ },
+ "LT": {
+ "name": "لتوانیا"
+ },
+ "LU": {
+ "name": "لوکزامبورگ"
+ },
+ "LR": {
+ "name": "لیبریا"
+ },
+ "LY": {
+ "name": "لیبیا"
+ },
+ "LI": {
+ "name": "لیختن‌اشتاین"
+ },
+ "LS": {
+ "name": "لیسوتو"
+ },
+ "MG": {
+ "name": "مادغاسکر"
+ },
+ "MQ": {
+ "name": "مارتینیک"
+ },
+ "MO": {
+ "name": "ماکائو، ناحیهٔ ویژهٔ حکومتی چین"
+ },
+ "MW": {
+ "name": "مالاوی"
+ },
+ "MT": {
+ "name": "مالتا"
+ },
+ "MV": {
+ "name": "مالدیو"
+ },
+ "ML": {
+ "name": "مالی"
+ },
+ "MY": {
+ "name": "مالیزیا"
+ },
+ "YT": {
+ "name": "مایوت"
+ },
+ "HU": {
+ "name": "مجارستان"
+ },
+ "MA": {
+ "name": "مراکش"
+ },
+ "EG": {
+ "name": "مصر"
+ },
+ "MK": {
+ "name": "مقدونیه"
+ },
+ "MX": {
+ "name": "مکسیکو"
+ },
+ "MN": {
+ "name": "منگولیا"
+ },
+ "MR": {
+ "name": "موریتانیا"
+ },
+ "MU": {
+ "name": "موریس"
+ },
+ "MZ": {
+ "name": "موزمبیق"
+ },
+ "MD": {
+ "name": "مولداوی"
+ },
+ "MC": {
+ "name": "موناکو"
+ },
+ "MS": {
+ "name": "مونت‌سرات"
+ },
+ "ME": {
+ "name": "مونته‌نگرو"
+ },
+ "MM": {
+ "name": "میانمار (برمه)"
+ },
+ "FM": {
+ "name": "میکرونزیا"
+ },
+ "NO": {
+ "name": "ناروی"
+ },
+ "NA": {
+ "name": "نامیبیا"
+ },
+ "NR": {
+ "name": "نائورو"
+ },
+ "NP": {
+ "name": "نیپال"
+ },
+ "NE": {
+ "name": "نیجر"
+ },
+ "NG": {
+ "name": "نیجریا"
+ },
+ "NI": {
+ "name": "نیکاراگوا"
+ },
+ "NU": {
+ "name": "نیوئه"
+ },
+ "NL": {
+ "name": "هالند"
+ },
+ "HN": {
+ "name": "هاندوراس"
+ },
+ "HT": {
+ "name": "هایتی"
+ },
+ "ES": {
+ "name": "هسپانیه"
+ },
+ "IN": {
+ "name": "هند"
+ },
+ "HK": {
+ "name": "هنگ‌کنگ، ناحیهٔ ویژهٔ حکومتی چین"
+ },
+ "VA": {
+ "name": "واتیکان"
+ },
+ "WF": {
+ "name": "والیس Ùˆ Ùوتونا"
+ },
+ "VU": {
+ "name": "وانواتو"
+ },
+ "VE": {
+ "name": "ونزویلا"
+ },
+ "VN": {
+ "name": "ویتنام"
+ },
+ "YE": {
+ "name": "یمن"
+ },
+ "UY": {
+ "name": "یوروگوای"
+ },
+ "GR": {
+ "name": "یونان"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/fa.json b/library/intl/resources/country/fa.json
new file mode 100644
index 000000000..e79fafbd8
--- /dev/null
+++ b/library/intl/resources/country/fa.json
@@ -0,0 +1,761 @@
+{
+ "AR": {
+ "name": "آرژانتین"
+ },
+ "AW": {
+ "name": "آروبا"
+ },
+ "AL": {
+ "name": "آلبانی"
+ },
+ "DE": {
+ "name": "آلمان"
+ },
+ "AG": {
+ "name": "آنتیگوا و باربودا"
+ },
+ "AD": {
+ "name": "آندورا"
+ },
+ "AO": {
+ "name": "آنگولا"
+ },
+ "AI": {
+ "name": "آنگویلا"
+ },
+ "AT": {
+ "name": "اتریش"
+ },
+ "ET": {
+ "name": "اتیوپی"
+ },
+ "JO": {
+ "name": "اردن"
+ },
+ "AM": {
+ "name": "ارمنستان"
+ },
+ "UY": {
+ "name": "اروگوئه"
+ },
+ "ER": {
+ "name": "اریتره"
+ },
+ "UZ": {
+ "name": "ازبکستان"
+ },
+ "ES": {
+ "name": "اسپانیا"
+ },
+ "AU": {
+ "name": "استرالیا"
+ },
+ "EE": {
+ "name": "استونی"
+ },
+ "IL": {
+ "name": "اسرائیل"
+ },
+ "SK": {
+ "name": "اسلواکی"
+ },
+ "SI": {
+ "name": "اسلوونی"
+ },
+ "SJ": {
+ "name": "اسوالبارد و جان‌ماین"
+ },
+ "ZA": {
+ "name": "اÙریقای جنوبی"
+ },
+ "AF": {
+ "name": "اÙغانستان"
+ },
+ "EC": {
+ "name": "اکوادور"
+ },
+ "DZ": {
+ "name": "الجزایر"
+ },
+ "SV": {
+ "name": "السالوادور"
+ },
+ "AE": {
+ "name": "امارات متحدهٔ عربی"
+ },
+ "ID": {
+ "name": "اندونزی"
+ },
+ "UA": {
+ "name": "اوکراین"
+ },
+ "UG": {
+ "name": "اوگاندا"
+ },
+ "US": {
+ "name": "ایالات متحدهٔ امریکا"
+ },
+ "IT": {
+ "name": "ایتالیا"
+ },
+ "IR": {
+ "name": "ایران"
+ },
+ "IE": {
+ "name": "ایرلند"
+ },
+ "IS": {
+ "name": "ایسلند"
+ },
+ "BB": {
+ "name": "باربادوس"
+ },
+ "BS": {
+ "name": "باهاما"
+ },
+ "BH": {
+ "name": "بحرین"
+ },
+ "BR": {
+ "name": "برزیل"
+ },
+ "BM": {
+ "name": "برمودا"
+ },
+ "BN": {
+ "name": "برونئی"
+ },
+ "GB": {
+ "name": "بریتانیا"
+ },
+ "BY": {
+ "name": "بلاروس"
+ },
+ "BE": {
+ "name": "بلژیک"
+ },
+ "BG": {
+ "name": "بلغارستان"
+ },
+ "BZ": {
+ "name": "بلیز"
+ },
+ "BD": {
+ "name": "بنگلادش"
+ },
+ "BJ": {
+ "name": "بنین"
+ },
+ "BT": {
+ "name": "بوتان"
+ },
+ "BW": {
+ "name": "بوتسوانا"
+ },
+ "BF": {
+ "name": "بورکیناÙاسو"
+ },
+ "BI": {
+ "name": "بوروندی"
+ },
+ "BA": {
+ "name": "بوسنی و هرزگوین"
+ },
+ "BO": {
+ "name": "بولیوی"
+ },
+ "PG": {
+ "name": "پاپوا گینهٔ نو"
+ },
+ "PY": {
+ "name": "پاراگوئه"
+ },
+ "PK": {
+ "name": "پاکستان"
+ },
+ "PW": {
+ "name": "پالائو"
+ },
+ "PA": {
+ "name": "پاناما"
+ },
+ "PT": {
+ "name": "پرتغال"
+ },
+ "PE": {
+ "name": "پرو"
+ },
+ "PF": {
+ "name": "پلی‌نزی Ùرانسه"
+ },
+ "PR": {
+ "name": "پورتوریکو"
+ },
+ "TJ": {
+ "name": "تاجیکستان"
+ },
+ "TZ": {
+ "name": "تانزانیا"
+ },
+ "TH": {
+ "name": "تایلند"
+ },
+ "TW": {
+ "name": "تایوان"
+ },
+ "TM": {
+ "name": "ترکمنستان"
+ },
+ "TR": {
+ "name": "ترکیه"
+ },
+ "TA": {
+ "name": "تریستان دا کونا"
+ },
+ "TT": {
+ "name": "ترینیداد و توباگو"
+ },
+ "TK": {
+ "name": "توکلائو"
+ },
+ "TG": {
+ "name": "توگو"
+ },
+ "TN": {
+ "name": "تونس"
+ },
+ "TO": {
+ "name": "تونگا"
+ },
+ "TV": {
+ "name": "تووالو"
+ },
+ "TL": {
+ "name": "تیمور شرقی"
+ },
+ "JM": {
+ "name": "جامائیکا"
+ },
+ "GI": {
+ "name": "جبل‌الطارق"
+ },
+ "JE": {
+ "name": "جرزی"
+ },
+ "AC": {
+ "name": "جزایر آسنسیون"
+ },
+ "AX": {
+ "name": "جزایر اÙلند"
+ },
+ "PN": {
+ "name": "جزایر پیت‌کرن"
+ },
+ "TC": {
+ "name": "جزایر تورکس و کایکوس"
+ },
+ "GS": {
+ "name": "جزایر جورجیای جنوبی و ساندویچ جنوبی"
+ },
+ "UM": {
+ "name": "جزایر دوراÙتادهٔ ایالات متحده"
+ },
+ "SB": {
+ "name": "جزایر سلیمان"
+ },
+ "FO": {
+ "name": "جزایر Ùارو"
+ },
+ "FK": {
+ "name": "جزایر Ùالکلند"
+ },
+ "IC": {
+ "name": "جزایر قناری"
+ },
+ "BQ": {
+ "name": "جزایر کارائیب هلند"
+ },
+ "CK": {
+ "name": "جزایر کوک"
+ },
+ "CC": {
+ "name": "جزایر کوکوس (کیلینگ)"
+ },
+ "KY": {
+ "name": "جزایر Ú©Ùیمن"
+ },
+ "MH": {
+ "name": "جزایر مارشال"
+ },
+ "MP": {
+ "name": "جزایر ماریانای شمالی"
+ },
+ "VI": {
+ "name": "جزایر ویرجین ایالات متحده"
+ },
+ "VG": {
+ "name": "جزایر ویرجین بریتانیا"
+ },
+ "CX": {
+ "name": "جزیرهٔ کریسمس"
+ },
+ "IM": {
+ "name": "جزیرهٔ من"
+ },
+ "NF": {
+ "name": "جزیره نورÙÚ©"
+ },
+ "AZ": {
+ "name": "جمهوری آذربایجان"
+ },
+ "CF": {
+ "name": "جمهوری اÙریقای مرکزی"
+ },
+ "CZ": {
+ "name": "جمهوری چک"
+ },
+ "DO": {
+ "name": "جمهوری دومینیکن"
+ },
+ "AQ": {
+ "name": "جنوبگان"
+ },
+ "DJ": {
+ "name": "جیبوتی"
+ },
+ "TD": {
+ "name": "چاد"
+ },
+ "CN": {
+ "name": "چین"
+ },
+ "DK": {
+ "name": "دانمارک"
+ },
+ "DM": {
+ "name": "دومینیکا"
+ },
+ "DG": {
+ "name": "دیه‌گو گارسیا"
+ },
+ "RE": {
+ "name": "رئونیون"
+ },
+ "RW": {
+ "name": "رواندا"
+ },
+ "RU": {
+ "name": "روسیه"
+ },
+ "RO": {
+ "name": "رومانی"
+ },
+ "ZM": {
+ "name": "زامبیا"
+ },
+ "NZ": {
+ "name": "زلاند نو"
+ },
+ "ZW": {
+ "name": "زیمبابوه"
+ },
+ "JP": {
+ "name": "ژاپن"
+ },
+ "ST": {
+ "name": "سائوتومه و پرینسیپ"
+ },
+ "CI": {
+ "name": "ساحل عاج"
+ },
+ "WS": {
+ "name": "ساموآ"
+ },
+ "AS": {
+ "name": "ساموآی آمریکا"
+ },
+ "EA": {
+ "name": "سبته و ملیله"
+ },
+ "PS": {
+ "name": "سرزمین‌های Ùلسطینی"
+ },
+ "LK": {
+ "name": "سری‌لانکا"
+ },
+ "BL": {
+ "name": "سن بارتلمی"
+ },
+ "PM": {
+ "name": "سن پیر و میکلن"
+ },
+ "SM": {
+ "name": "سن مارینو"
+ },
+ "KN": {
+ "name": "سنت کیتس و نویس"
+ },
+ "LC": {
+ "name": "سنت لوسیا"
+ },
+ "SX": {
+ "name": "سنت مارتن"
+ },
+ "MF": {
+ "name": "سنت مارتین"
+ },
+ "VC": {
+ "name": "سنت وینسنت و گرنادین‌ها"
+ },
+ "SH": {
+ "name": "سنت هلن"
+ },
+ "SG": {
+ "name": "سنگاپور"
+ },
+ "SN": {
+ "name": "سنگال"
+ },
+ "SZ": {
+ "name": "سوازیلند"
+ },
+ "SE": {
+ "name": "سوئد"
+ },
+ "CH": {
+ "name": "سوئیس"
+ },
+ "SD": {
+ "name": "سودان"
+ },
+ "SS": {
+ "name": "سودان جنوبی"
+ },
+ "SR": {
+ "name": "سورینام"
+ },
+ "SY": {
+ "name": "سوریه"
+ },
+ "SO": {
+ "name": "سومالی"
+ },
+ "SL": {
+ "name": "سیرالئون"
+ },
+ "SC": {
+ "name": "سیشل"
+ },
+ "CL": {
+ "name": "شیلی"
+ },
+ "EH": {
+ "name": "صحرای غربی"
+ },
+ "RS": {
+ "name": "صربستان"
+ },
+ "IQ": {
+ "name": "عراق"
+ },
+ "SA": {
+ "name": "عربستان سعودی"
+ },
+ "OM": {
+ "name": "عمان"
+ },
+ "GH": {
+ "name": "غنا"
+ },
+ "FR": {
+ "name": "Ùرانسه"
+ },
+ "FI": {
+ "name": "Ùنلاند"
+ },
+ "FJ": {
+ "name": "Ùیجی"
+ },
+ "PH": {
+ "name": "Ùیلیپین"
+ },
+ "CY": {
+ "name": "قبرس"
+ },
+ "KG": {
+ "name": "قرقیزستان"
+ },
+ "KZ": {
+ "name": "قزاقستان"
+ },
+ "QA": {
+ "name": "قطر"
+ },
+ "IO": {
+ "name": "قلمرو بریتانیا در اقیانوس هند"
+ },
+ "TF": {
+ "name": "قلمروهای جنوبی Ùرانسه"
+ },
+ "CR": {
+ "name": "کاستاریکا"
+ },
+ "NC": {
+ "name": "کالدونیای جدید"
+ },
+ "KH": {
+ "name": "کامبوج"
+ },
+ "CM": {
+ "name": "کامرون"
+ },
+ "CA": {
+ "name": "کانادا"
+ },
+ "HR": {
+ "name": "کرواسی"
+ },
+ "KR": {
+ "name": "کرهٔ جنوبی"
+ },
+ "KP": {
+ "name": "کرهٔ شمالی"
+ },
+ "CO": {
+ "name": "کلمبیا"
+ },
+ "CG": {
+ "name": "کنگو - برازویل"
+ },
+ "CD": {
+ "name": "کنگو - کینشاسا"
+ },
+ "KE": {
+ "name": "کنیا"
+ },
+ "CU": {
+ "name": "کوبا"
+ },
+ "CW": {
+ "name": "کوراسائو"
+ },
+ "XK": {
+ "name": "کوزوو"
+ },
+ "KM": {
+ "name": "کومور"
+ },
+ "KW": {
+ "name": "کویت"
+ },
+ "CV": {
+ "name": "کیپ‌ورد"
+ },
+ "KI": {
+ "name": "کیریباتی"
+ },
+ "GA": {
+ "name": "گابن"
+ },
+ "GM": {
+ "name": "گامبیا"
+ },
+ "GE": {
+ "name": "گرجستان"
+ },
+ "GD": {
+ "name": "گرنادا"
+ },
+ "GG": {
+ "name": "گرنزی"
+ },
+ "GL": {
+ "name": "گرینلند"
+ },
+ "GT": {
+ "name": "گواتمالا"
+ },
+ "GP": {
+ "name": "گوادلوپ"
+ },
+ "GU": {
+ "name": "گوام"
+ },
+ "GY": {
+ "name": "گویان"
+ },
+ "GF": {
+ "name": "گویان Ùرانسه"
+ },
+ "GN": {
+ "name": "گینه"
+ },
+ "GQ": {
+ "name": "گینهٔ استوایی"
+ },
+ "GW": {
+ "name": "گینهٔ بیسائو"
+ },
+ "LA": {
+ "name": "لائوس"
+ },
+ "LB": {
+ "name": "لبنان"
+ },
+ "LV": {
+ "name": "لتونی"
+ },
+ "LS": {
+ "name": "لسوتو"
+ },
+ "LU": {
+ "name": "لوکزامبورگ"
+ },
+ "PL": {
+ "name": "لهستان"
+ },
+ "LR": {
+ "name": "لیبریا"
+ },
+ "LY": {
+ "name": "لیبی"
+ },
+ "LT": {
+ "name": "لیتوانی"
+ },
+ "LI": {
+ "name": "لیختن‌اشتاین"
+ },
+ "MG": {
+ "name": "ماداگاسکار"
+ },
+ "MQ": {
+ "name": "مارتینیک"
+ },
+ "MO": {
+ "name": "ماکائو، ناحیهٔ ویژهٔ حکومتی چین"
+ },
+ "MW": {
+ "name": "مالاوی"
+ },
+ "MT": {
+ "name": "مالت"
+ },
+ "MV": {
+ "name": "مالدیو"
+ },
+ "MY": {
+ "name": "مالزی"
+ },
+ "ML": {
+ "name": "مالی"
+ },
+ "YT": {
+ "name": "مایوت"
+ },
+ "HU": {
+ "name": "مجارستان"
+ },
+ "MA": {
+ "name": "مراکش"
+ },
+ "EG": {
+ "name": "مصر"
+ },
+ "MN": {
+ "name": "مغولستان"
+ },
+ "MK": {
+ "name": "مقدونیه"
+ },
+ "MX": {
+ "name": "مکزیک"
+ },
+ "MR": {
+ "name": "موریتانی"
+ },
+ "MU": {
+ "name": "موریس"
+ },
+ "MZ": {
+ "name": "موزامبیک"
+ },
+ "MD": {
+ "name": "مولداوی"
+ },
+ "MC": {
+ "name": "موناکو"
+ },
+ "MS": {
+ "name": "مونت‌سرات"
+ },
+ "ME": {
+ "name": "مونته‌نگرو"
+ },
+ "MM": {
+ "name": "میانمار (برمه)"
+ },
+ "FM": {
+ "name": "میکرونزی"
+ },
+ "NR": {
+ "name": "نائورو"
+ },
+ "NA": {
+ "name": "نامیبیا"
+ },
+ "NP": {
+ "name": "نپال"
+ },
+ "NO": {
+ "name": "نروژ"
+ },
+ "NE": {
+ "name": "نیجر"
+ },
+ "NG": {
+ "name": "نیجریه"
+ },
+ "NI": {
+ "name": "نیکاراگوئه"
+ },
+ "NU": {
+ "name": "نیوئه"
+ },
+ "VA": {
+ "name": "واتیکان"
+ },
+ "WF": {
+ "name": "والیس Ùˆ Ùوتونا"
+ },
+ "VU": {
+ "name": "وانواتو"
+ },
+ "VE": {
+ "name": "ونزوئلا"
+ },
+ "VN": {
+ "name": "ویتنام"
+ },
+ "HT": {
+ "name": "هائیتی"
+ },
+ "NL": {
+ "name": "هلند"
+ },
+ "IN": {
+ "name": "هند"
+ },
+ "HN": {
+ "name": "هندوراس"
+ },
+ "HK": {
+ "name": "هنگ‌کنگ، ناحیهٔ ویژهٔ حکومتی چین"
+ },
+ "YE": {
+ "name": "یمن"
+ },
+ "GR": {
+ "name": "یونان"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ff.json b/library/intl/resources/country/ff.json
new file mode 100644
index 000000000..28bb49c37
--- /dev/null
+++ b/library/intl/resources/country/ff.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistaan"
+ },
+ "ZA": {
+ "name": "Afrik bŋ Worgo"
+ },
+ "AZ": {
+ "name": "Ajerbayjaan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "DZ": {
+ "name": "Alaseri"
+ },
+ "AL": {
+ "name": "Albanii"
+ },
+ "DE": {
+ "name": "Almaañ"
+ },
+ "AD": {
+ "name": "Anndoora"
+ },
+ "AI": {
+ "name": "Anngiyaa"
+ },
+ "AO": {
+ "name": "Anngolaa"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antiguwaa e Barbudaa"
+ },
+ "SA": {
+ "name": "Arabii Sawdit"
+ },
+ "AR": {
+ "name": "Arjantiin"
+ },
+ "AM": {
+ "name": "Armenii"
+ },
+ "AW": {
+ "name": "Aruuba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "BS": {
+ "name": "Bahamaas"
+ },
+ "BH": {
+ "name": "Bahreyn"
+ },
+ "BD": {
+ "name": "Banglaadees"
+ },
+ "BB": {
+ "name": "Barbadoos"
+ },
+ "BY": {
+ "name": "Belaruus"
+ },
+ "BZ": {
+ "name": "Beliise"
+ },
+ "BE": {
+ "name": "Beljik"
+ },
+ "BJ": {
+ "name": "Benee"
+ },
+ "BR": {
+ "name": "Beresiil"
+ },
+ "BM": {
+ "name": "Bermudaa"
+ },
+ "BO": {
+ "name": "Boliwii"
+ },
+ "BA": {
+ "name": "Bosnii Hersegowiin"
+ },
+ "BW": {
+ "name": "Botswaana"
+ },
+ "BG": {
+ "name": "Bulgarii"
+ },
+ "BF": {
+ "name": "Burkibaa Faaso"
+ },
+ "BN": {
+ "name": "Burnaay"
+ },
+ "BI": {
+ "name": "Burunndi"
+ },
+ "BT": {
+ "name": "Butaan"
+ },
+ "TD": {
+ "name": "Caad"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CL": {
+ "name": "Cilii"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "VA": {
+ "name": "Dowla Waticaan"
+ },
+ "US": {
+ "name": "Dowlaaji DentuÉ—i Amerik"
+ },
+ "FK": {
+ "name": "DuuÉ—e Falkland"
+ },
+ "CV": {
+ "name": "DuuÉ—e Kap Weer"
+ },
+ "KY": {
+ "name": "DuuÉ—e Kaymaa"
+ },
+ "VI": {
+ "name": "DuuÉ—e Kecce Amerik"
+ },
+ "VG": {
+ "name": "duuÉ—e kecce britanii"
+ },
+ "CK": {
+ "name": "DuuÉ—e Kuuk"
+ },
+ "MP": {
+ "name": "DuuÉ—e Mariyaana Rewo"
+ },
+ "MH": {
+ "name": "DuuÉ—e Marsaal"
+ },
+ "NF": {
+ "name": "DuuÉ—e Norfolk"
+ },
+ "SB": {
+ "name": "DuuÉ—e Solomon"
+ },
+ "TC": {
+ "name": "DuuÉ—e Turke e Keikoos"
+ },
+ "ET": {
+ "name": "Ecoppi"
+ },
+ "EG": {
+ "name": "Ejipt"
+ },
+ "EC": {
+ "name": "Ekuwatoor"
+ },
+ "SV": {
+ "name": "El Salwador"
+ },
+ "AE": {
+ "name": "Emiraat Araab DenntuÉ—e"
+ },
+ "IN": {
+ "name": "Enndo"
+ },
+ "ID": {
+ "name": "Enndonesii"
+ },
+ "ER": {
+ "name": "Eriteree"
+ },
+ "ES": {
+ "name": "Espaañ"
+ },
+ "EE": {
+ "name": "Estoni"
+ },
+ "FR": {
+ "name": "Farayse"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FI": {
+ "name": "Fenland"
+ },
+ "FJ": {
+ "name": "Fijji"
+ },
+ "PH": {
+ "name": "Filipiin"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboo"
+ },
+ "GM": {
+ "name": "Gammbi"
+ },
+ "GH": {
+ "name": "Ganaa"
+ },
+ "GD": {
+ "name": "Garnaad"
+ },
+ "GR": {
+ "name": "Gerees"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Gine-Bisaawo"
+ },
+ "GQ": {
+ "name": "Ginee Ekuwaatoriyaal"
+ },
+ "GY": {
+ "name": "Giyaan"
+ },
+ "GF": {
+ "name": "Giyaan Farayse"
+ },
+ "GL": {
+ "name": "Gorwendland"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GU": {
+ "name": "Guwam"
+ },
+ "GP": {
+ "name": "Gwaadalup"
+ },
+ "GT": {
+ "name": "Gwaatemalaa"
+ },
+ "HT": {
+ "name": "Haytii"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "IQ": {
+ "name": "Iraak"
+ },
+ "IR": {
+ "name": "Iraan"
+ },
+ "IE": {
+ "name": "Irlannda"
+ },
+ "IS": {
+ "name": "Islannda"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israa’iila"
+ },
+ "IT": {
+ "name": "Itali"
+ },
+ "JM": {
+ "name": "Jamayka"
+ },
+ "GE": {
+ "name": "Jeorgii"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibraltaar"
+ },
+ "DJ": {
+ "name": "Jibutii"
+ },
+ "JO": {
+ "name": "Jordani"
+ },
+ "KH": {
+ "name": "Kambodso"
+ },
+ "CM": {
+ "name": "Kameruun"
+ },
+ "CA": {
+ "name": "Kanadaa"
+ },
+ "KZ": {
+ "name": "Kasakstaan"
+ },
+ "QA": {
+ "name": "Kataar"
+ },
+ "IO": {
+ "name": "Keeriindi britaani to maayo enndo"
+ },
+ "KE": {
+ "name": "Keñaa"
+ },
+ "KG": {
+ "name": "Kirgistaan"
+ },
+ "KI": {
+ "name": "Kiribari"
+ },
+ "CI": {
+ "name": "Kodduwaar"
+ },
+ "CO": {
+ "name": "Kolombiya"
+ },
+ "KM": {
+ "name": "Komoor"
+ },
+ "CG": {
+ "name": "Konngo"
+ },
+ "KP": {
+ "name": "Koree Rewo"
+ },
+ "KR": {
+ "name": "Koree Worgo"
+ },
+ "HR": {
+ "name": "Korwasii"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kosta Rikaa"
+ },
+ "CU": {
+ "name": "Kubaa"
+ },
+ "KW": {
+ "name": "Kuweyti"
+ },
+ "GB": {
+ "name": "Laamateeri Rentundi"
+ },
+ "LA": {
+ "name": "Lawoos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonii"
+ },
+ "LB": {
+ "name": "Libaa"
+ },
+ "LR": {
+ "name": "Liberiyaa"
+ },
+ "LY": {
+ "name": "Libi"
+ },
+ "LU": {
+ "name": "Liksembuur"
+ },
+ "LI": {
+ "name": "Lincenstayn"
+ },
+ "LT": {
+ "name": "Lituaanii"
+ },
+ "ML": {
+ "name": "Maali"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madagaskaar"
+ },
+ "MW": {
+ "name": "Malaawi"
+ },
+ "MV": {
+ "name": "Maldiiwe"
+ },
+ "MY": {
+ "name": "Malesii"
+ },
+ "MT": {
+ "name": "Malte"
+ },
+ "MQ": {
+ "name": "Martinik"
+ },
+ "MA": {
+ "name": "Maruk"
+ },
+ "YT": {
+ "name": "Mayoot"
+ },
+ "MK": {
+ "name": "Meceduwaan"
+ },
+ "MX": {
+ "name": "Meksik"
+ },
+ "FM": {
+ "name": "Mikoronesii"
+ },
+ "MM": {
+ "name": "Miyamaar"
+ },
+ "MD": {
+ "name": "Moldawii"
+ },
+ "MC": {
+ "name": "Monaakoo"
+ },
+ "MN": {
+ "name": "Monngolii"
+ },
+ "MS": {
+ "name": "Monseraat"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MU": {
+ "name": "Moriis"
+ },
+ "MZ": {
+ "name": "Mosammbik"
+ },
+ "MR": {
+ "name": "Muritani"
+ },
+ "NA": {
+ "name": "Namibii"
+ },
+ "NR": {
+ "name": "Nawuru"
+ },
+ "CZ": {
+ "name": "Ndenndaandi Cek"
+ },
+ "CD": {
+ "name": "Ndenndaandi Demokaraasiire Konngo"
+ },
+ "CF": {
+ "name": "Ndenndaandi Santarafrik"
+ },
+ "DO": {
+ "name": "Ndenndanndi Dominika"
+ },
+ "NL": {
+ "name": "Nederlannda"
+ },
+ "NP": {
+ "name": "Nepaal"
+ },
+ "NE": {
+ "name": "Nijeer"
+ },
+ "NG": {
+ "name": "Nijeriyaa"
+ },
+ "NI": {
+ "name": "Nikaraguwaa"
+ },
+ "NU": {
+ "name": "Niuwe"
+ },
+ "NO": {
+ "name": "Norwees"
+ },
+ "NC": {
+ "name": "Nuwel Kaledonii"
+ },
+ "NZ": {
+ "name": "Nuwel Selannda"
+ },
+ "OM": {
+ "name": "Omaan"
+ },
+ "HN": {
+ "name": "Onnduraas"
+ },
+ "HU": {
+ "name": "Onngiri"
+ },
+ "AU": {
+ "name": "Ostaraalii"
+ },
+ "AT": {
+ "name": "Otiriis"
+ },
+ "PK": {
+ "name": "Pakistaan"
+ },
+ "PW": {
+ "name": "Palawu"
+ },
+ "PS": {
+ "name": "Palestiin Sisjordani e Gaasaa"
+ },
+ "PA": {
+ "name": "Panamaa"
+ },
+ "PG": {
+ "name": "Papuwaa Nuwel Gine"
+ },
+ "PY": {
+ "name": "Paraguwaay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkern"
+ },
+ "PF": {
+ "name": "Polinesii Farayse"
+ },
+ "PL": {
+ "name": "Poloñ"
+ },
+ "PR": {
+ "name": "Porto Rikoo"
+ },
+ "PT": {
+ "name": "Purtugaal"
+ },
+ "RE": {
+ "name": "Rewiñoo"
+ },
+ "RU": {
+ "name": "Riisii"
+ },
+ "RO": {
+ "name": "Rumanii"
+ },
+ "RW": {
+ "name": "Ruwanndaa"
+ },
+ "ZM": {
+ "name": "Sammbi"
+ },
+ "AS": {
+ "name": "Samowa Amerik"
+ },
+ "WS": {
+ "name": "Samowaa"
+ },
+ "JP": {
+ "name": "Sapoo"
+ },
+ "ST": {
+ "name": "Sawo Tome e Perensipe"
+ },
+ "SM": {
+ "name": "See Maree"
+ },
+ "PM": {
+ "name": "See Piyeer e Mikeloo"
+ },
+ "VC": {
+ "name": "See Weesaa e Garnadiin"
+ },
+ "SN": {
+ "name": "Senegaal"
+ },
+ "SH": {
+ "name": "Sent Helen"
+ },
+ "KN": {
+ "name": "Sent Kits e Newis"
+ },
+ "LC": {
+ "name": "Sent Lusiyaa"
+ },
+ "SL": {
+ "name": "Seraa liyon"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seysel"
+ },
+ "CN": {
+ "name": "Siin"
+ },
+ "CY": {
+ "name": "Siipar"
+ },
+ "ZW": {
+ "name": "Simbaabuwe"
+ },
+ "SG": {
+ "name": "Sinngapuur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "LK": {
+ "name": "Siri Lanka"
+ },
+ "SY": {
+ "name": "Sirii"
+ },
+ "SK": {
+ "name": "Slowakii"
+ },
+ "SI": {
+ "name": "Slowenii"
+ },
+ "SO": {
+ "name": "Somalii"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudaan"
+ },
+ "SR": {
+ "name": "Surinaam"
+ },
+ "SE": {
+ "name": "Suweed"
+ },
+ "CH": {
+ "name": "Suwiis"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaasilannda"
+ },
+ "TJ": {
+ "name": "Tajikistaan"
+ },
+ "TZ": {
+ "name": "Tansanii"
+ },
+ "TH": {
+ "name": "Taylannda"
+ },
+ "TW": {
+ "name": "Taywaan"
+ },
+ "TL": {
+ "name": "Timoor FuÉ—naange"
+ },
+ "TT": {
+ "name": "Tirnidaad e Tobaago"
+ },
+ "TG": {
+ "name": "Togoo"
+ },
+ "TK": {
+ "name": "Tokelaaw"
+ },
+ "TO": {
+ "name": "Tonngaa"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisii"
+ },
+ "TR": {
+ "name": "Turkii"
+ },
+ "TM": {
+ "name": "Turkmenistaan"
+ },
+ "TV": {
+ "name": "Tuwaluu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UA": {
+ "name": "Ukereen"
+ },
+ "UG": {
+ "name": "Unganndaa"
+ },
+ "UY": {
+ "name": "Uruguwaay"
+ },
+ "UZ": {
+ "name": "Usbekistaan"
+ },
+ "WF": {
+ "name": "Walis e Futuna"
+ },
+ "VU": {
+ "name": "Wanuwaatuu"
+ },
+ "VE": {
+ "name": "Wenesuwelaa"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "VN": {
+ "name": "Wiyetnaam"
+ },
+ "YE": {
+ "name": "Yemen"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/fi.json b/library/intl/resources/country/fi.json
new file mode 100644
index 000000000..03f847ac1
--- /dev/null
+++ b/library/intl/resources/country/fi.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistan"
+ },
+ "AX": {
+ "name": "Ahvenanmaa"
+ },
+ "NL": {
+ "name": "Alankomaat"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "Amerikan Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktis"
+ },
+ "AG": {
+ "name": "Antigua ja Barbuda"
+ },
+ "AE": {
+ "name": "Arabiemiirikunnat"
+ },
+ "AR": {
+ "name": "Argentiina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension-saari"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AZ": {
+ "name": "Azerbaidžan"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgia"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia ja Hertsegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasilia"
+ },
+ "IO": {
+ "name": "Brittiläinen Intian valtameren alue"
+ },
+ "VG": {
+ "name": "Brittiläiset Neitsytsaaret"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KY": {
+ "name": "Caymansaaret"
+ },
+ "EA": {
+ "name": "Ceuta ja Melilla"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CK": {
+ "name": "Cookinsaaret"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominikaaninen tasavalta"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypti"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "ES": {
+ "name": "Espanja"
+ },
+ "ZA": {
+ "name": "Etelä-Afrikka"
+ },
+ "GS": {
+ "name": "Etelä-Georgia ja Eteläiset Sandwichsaaret"
+ },
+ "KR": {
+ "name": "Etelä-Korea"
+ },
+ "SS": {
+ "name": "Etelä-Sudan"
+ },
+ "ET": {
+ "name": "Etiopia"
+ },
+ "FK": {
+ "name": "Falklandinsaaret"
+ },
+ "FJ": {
+ "name": "Fidži"
+ },
+ "PH": {
+ "name": "Filippiinit"
+ },
+ "FO": {
+ "name": "Färsaaret"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grönlanti"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hongkong – Kiinan e.h.a."
+ },
+ "SJ": {
+ "name": "Huippuvuoret ja Jan Mayen"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IN": {
+ "name": "Intia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irlanti"
+ },
+ "IS": {
+ "name": "Islanti"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "TL": {
+ "name": "Itä-Timor"
+ },
+ "AT": {
+ "name": "Itävalta"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "JP": {
+ "name": "Japani"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "CX": {
+ "name": "Joulusaari"
+ },
+ "KH": {
+ "name": "Kambodža"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanariansaaret"
+ },
+ "CV": {
+ "name": "Kap Verde"
+ },
+ "BQ": {
+ "name": "Karibian Alankomaat"
+ },
+ "KZ": {
+ "name": "Kazakstan"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "CF": {
+ "name": "Keski-Afrikan tasavalta"
+ },
+ "CN": {
+ "name": "Kiina"
+ },
+ "KG": {
+ "name": "Kirgisia"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CO": {
+ "name": "Kolumbia"
+ },
+ "KM": {
+ "name": "Komorit"
+ },
+ "CD": {
+ "name": "Kongon demokraattinen tasavalta"
+ },
+ "CG": {
+ "name": "Kongon tasavalta"
+ },
+ "CC": {
+ "name": "Kookossaaret (Keelingsaaret)"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "GR": {
+ "name": "Kreikka"
+ },
+ "HR": {
+ "name": "Kroatia"
+ },
+ "CU": {
+ "name": "Kuuba"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "CY": {
+ "name": "Kypros"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Liettua"
+ },
+ "LU": {
+ "name": "Luxemburg"
+ },
+ "EH": {
+ "name": "Länsi-Sahara"
+ },
+ "MO": {
+ "name": "Macao – Kiinan e.h.a."
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MK": {
+ "name": "Makedonia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Malediivit"
+ },
+ "MY": {
+ "name": "Malesia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "IM": {
+ "name": "Mansaari"
+ },
+ "MA": {
+ "name": "Marokko"
+ },
+ "MH": {
+ "name": "Marshallinsaaret"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "FM": {
+ "name": "Mikronesian liittovaltio"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mosambik"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolkinsaari"
+ },
+ "NO": {
+ "name": "Norja"
+ },
+ "CI": {
+ "name": "Norsunluurannikko"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestiinalaisalueet"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua-Uusi-Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "KP": {
+ "name": "Pohjois-Korea"
+ },
+ "MP": {
+ "name": "Pohjois-Mariaanit"
+ },
+ "PT": {
+ "name": "Portugali"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "PL": {
+ "name": "Puola"
+ },
+ "GQ": {
+ "name": "Päiväntasaajan Guinea"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "FR": {
+ "name": "Ranska"
+ },
+ "GF": {
+ "name": "Ranskan Guayana"
+ },
+ "PF": {
+ "name": "Ranskan Polynesia"
+ },
+ "TF": {
+ "name": "Ranskan ulkopuoliset eteläiset alueet"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "SE": {
+ "name": "Ruotsi"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts ja Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "VC": {
+ "name": "Saint Vincent ja Grenadiinit"
+ },
+ "BL": {
+ "name": "Saint-Barthélemy"
+ },
+ "MF": {
+ "name": "Saint-Martin"
+ },
+ "PM": {
+ "name": "Saint-Pierre ja Miquelon"
+ },
+ "DE": {
+ "name": "Saksa"
+ },
+ "SB": {
+ "name": "Salomonsaaret"
+ },
+ "ZM": {
+ "name": "Sambia"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé ja Príncipe"
+ },
+ "SA": {
+ "name": "Saudi-Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychellit"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "FI": {
+ "name": "Suomi"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "CH": {
+ "name": "Sveitsi"
+ },
+ "SZ": {
+ "name": "Swazimaa"
+ },
+ "SY": {
+ "name": "Syyria"
+ },
+ "TJ": {
+ "name": "Tadžikistan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tansania"
+ },
+ "DK": {
+ "name": "Tanska"
+ },
+ "TH": {
+ "name": "Thaimaa"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad ja Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TD": {
+ "name": "TÅ¡ad"
+ },
+ "CZ": {
+ "name": "TÅ¡ekki"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkki"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks- ja Caicossaaret"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraina"
+ },
+ "HU": {
+ "name": "Unkari"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "NC": {
+ "name": "Uusi-Kaledonia"
+ },
+ "NZ": {
+ "name": "Uusi-Seelanti"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "BY": {
+ "name": "Valko-Venäjä"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikaani"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "RU": {
+ "name": "Venäjä"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "EE": {
+ "name": "Viro"
+ },
+ "WF": {
+ "name": "Wallis ja Futuna"
+ },
+ "GB": {
+ "name": "Yhdistynyt kuningaskunta"
+ },
+ "US": {
+ "name": "Yhdysvallat"
+ },
+ "UM": {
+ "name": "Yhdysvaltain erillissaaret"
+ },
+ "VI": {
+ "name": "Yhdysvaltain Neitsytsaaret"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/fil.json b/library/intl/resources/country/fil.json
new file mode 100644
index 000000000..1013ed4fb
--- /dev/null
+++ b/library/intl/resources/country/fil.json
@@ -0,0 +1,761 @@
+{
+ "AC": {
+ "name": "Acsencion island"
+ },
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua and Barbuda"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia and Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Island"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta and Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "EH": {
+ "name": "Kanlurang Sahara"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Pilipinas"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vincent and the Grenadines"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia and the South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard and Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "SS": {
+ "name": "Timog Sudan"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan de Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/fo.json b/library/intl/resources/country/fo.json
new file mode 100644
index 000000000..d60f0301f
--- /dev/null
+++ b/library/intl/resources/country/fo.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistan"
+ },
+ "AX": {
+ "name": "Ãland"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "Amerikanska Sámoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktis"
+ },
+ "AG": {
+ "name": "Antigua og Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascensionoyggjin"
+ },
+ "AZ": {
+ "name": "Aserbajdsjan"
+ },
+ "AU": {
+ "name": "Avstralia"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesj"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgia"
+ },
+ "BZ": {
+ "name": "Belis"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia-Hersegovina"
+ },
+ "BW": {
+ "name": "Botsvana"
+ },
+ "BR": {
+ "name": "Brasilia"
+ },
+ "IO": {
+ "name": "Bretsku Indiahavsoyggjarnar"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "MM": {
+ "name": "Burma"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butan"
+ },
+ "KY": {
+ "name": "Caymanoyggjarnar"
+ },
+ "EA": {
+ "name": "Ceuta og Melilla"
+ },
+ "CK": {
+ "name": "Cooksoyggjarnar"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danmørk"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DO": {
+ "name": "Domingo lýðveldið"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EG": {
+ "name": "Egyptaland"
+ },
+ "EC": {
+ "name": "Ekvador"
+ },
+ "GQ": {
+ "name": "Ekvator Guinea"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estland"
+ },
+ "ET": {
+ "name": "Etiopia"
+ },
+ "TL": {
+ "name": "Eystur-Timor"
+ },
+ "AT": {
+ "name": "Eysturríki"
+ },
+ "FK": {
+ "name": "Falklandsoyggjarnar"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "CI": {
+ "name": "Fílabeinsstrondin"
+ },
+ "PH": {
+ "name": "Filipsoyggjar"
+ },
+ "FI": {
+ "name": "Finnland"
+ },
+ "FR": {
+ "name": "Frakland"
+ },
+ "GF": {
+ "name": "Fransk Gujana"
+ },
+ "MF": {
+ "name": "Fransk Saint Martin"
+ },
+ "PF": {
+ "name": "Franska Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "FO": {
+ "name": "Føroyar"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GR": {
+ "name": "Grikkaland"
+ },
+ "CV": {
+ "name": "Grønhøvdaoyggjarnar"
+ },
+ "GL": {
+ "name": "Grønland"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea Bissau"
+ },
+ "GY": {
+ "name": "Gujana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hongkong"
+ },
+ "BY": {
+ "name": "Hvítarussland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Ãrland"
+ },
+ "IS": {
+ "name": "Ãsland"
+ },
+ "IL": {
+ "name": "Ãsrael"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jameika"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "CX": {
+ "name": "Jólaoyggjin"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KH": {
+ "name": "Kambodja"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanaríoyggjarnar"
+ },
+ "KZ": {
+ "name": "Kasakstan"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "CZ": {
+ "name": "Kekkia"
+ },
+ "KE": {
+ "name": "Kenja"
+ },
+ "CL": {
+ "name": "Kili"
+ },
+ "CN": {
+ "name": "Kina"
+ },
+ "KG": {
+ "name": "Kirgisia"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "TD": {
+ "name": "Kjad"
+ },
+ "CC": {
+ "name": "Kokosoyggjarnar"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komorooyggjarnar"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "CD": {
+ "name": "Kongo-Kinshasa"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kosta Rika"
+ },
+ "HR": {
+ "name": "Kroatia"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuvait"
+ },
+ "CY": {
+ "name": "Kýpros"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Lettland"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liktenstein"
+ },
+ "LT": {
+ "name": "Litava"
+ },
+ "LU": {
+ "name": "Luksemborg"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MO": {
+ "name": "Makao"
+ },
+ "MK": {
+ "name": "Makedónia"
+ },
+ "MW": {
+ "name": "Malavi"
+ },
+ "MV": {
+ "name": "Maldivuoyggjarnar"
+ },
+ "MY": {
+ "name": "Maleisia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "IM": {
+ "name": "Mann"
+ },
+ "MA": {
+ "name": "Marokko"
+ },
+ "MH": {
+ "name": "Marshalloyggjarnar"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "CF": {
+ "name": "Miðafrikalýðveldið"
+ },
+ "FM": {
+ "name": "Mikronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MR": {
+ "name": "Móritania"
+ },
+ "MU": {
+ "name": "Móritius"
+ },
+ "MZ": {
+ "name": "Mosambik"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Niðurlond"
+ },
+ "BQ": {
+ "name": "Niðurlonds Karibia"
+ },
+ "SX": {
+ "name": "Niðurlonds Saint Martin"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NI": {
+ "name": "Nikaragua"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "KP": {
+ "name": "Norður-Korea"
+ },
+ "MP": {
+ "name": "Norðurmarianoyggjarnar"
+ },
+ "SD": {
+ "name": "Norðursudan"
+ },
+ "NO": {
+ "name": "Noreg"
+ },
+ "NF": {
+ "name": "Norfolkoyggjin"
+ },
+ "NZ": {
+ "name": "Ný Sæland"
+ },
+ "NC": {
+ "name": "Ný-Kaledonia"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinskt territorium"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Nýguinea"
+ },
+ "PY": {
+ "name": "Paraguei"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PL": {
+ "name": "Pólland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumenia"
+ },
+ "RU": {
+ "name": "Russland"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts og Nevis"
+ },
+ "LC": {
+ "name": "Saint Lusia"
+ },
+ "PM": {
+ "name": "Saint Pierre og Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vinsent og Grenadinoyggjar"
+ },
+ "SB": {
+ "name": "Sálomonoyggjarnar"
+ },
+ "US": {
+ "name": "Sambandsríki Amerika"
+ },
+ "VI": {
+ "name": "Sambandsríki Amerikas Jómfrúoyggjarnar"
+ },
+ "ZM": {
+ "name": "Sambia"
+ },
+ "AE": {
+ "name": "Sameindu Emirríkini"
+ },
+ "WS": {
+ "name": "Sámoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "Sao Tome og Prinsipi"
+ },
+ "SA": {
+ "name": "Saudi-Arábia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seyskelloyggjarnar"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "ZW": {
+ "name": "Simbabvi"
+ },
+ "SG": {
+ "name": "Singapor"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ES": {
+ "name": "Spania"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "GB": {
+ "name": "Stóra Bretland"
+ },
+ "VG": {
+ "name": "Stóra Bretlands Jómfrúoyggjarnar"
+ },
+ "KR": {
+ "name": "Suður-Korea"
+ },
+ "ZA": {
+ "name": "Suðurafrikalýðveldið"
+ },
+ "GS": {
+ "name": "Suðurgeorgia"
+ },
+ "SS": {
+ "name": "Suðursudan"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard og Jan Mayen"
+ },
+ "SZ": {
+ "name": "Svasiland"
+ },
+ "CH": {
+ "name": "Sveis"
+ },
+ "SE": {
+ "name": "Svøríki"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TJ": {
+ "name": "Tadsjikistan"
+ },
+ "TZ": {
+ "name": "Tansania"
+ },
+ "TH": {
+ "name": "Teiland"
+ },
+ "TW": {
+ "name": "Teivan"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad og Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunesia"
+ },
+ "TR": {
+ "name": "Turkaland"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks- og Caicosoyggjarnar"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "DE": {
+ "name": "Týskland"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukreina"
+ },
+ "HU": {
+ "name": "Ungarn"
+ },
+ "UY": {
+ "name": "Uruguei"
+ },
+ "UZ": {
+ "name": "Usbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikan"
+ },
+ "VE": {
+ "name": "Venesuela"
+ },
+ "EH": {
+ "name": "Vestursahara"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis og Futuna"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/fr-CA.json b/library/intl/resources/country/fr-CA.json
new file mode 100644
index 000000000..2b7ccbcf7
--- /dev/null
+++ b/library/intl/resources/country/fr-CA.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "ZA": {
+ "name": "Afrique du Sud"
+ },
+ "AL": {
+ "name": "Albanie"
+ },
+ "DZ": {
+ "name": "Algérie"
+ },
+ "DE": {
+ "name": "Allemagne"
+ },
+ "AD": {
+ "name": "Andorre"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctique"
+ },
+ "AG": {
+ "name": "Antigua-et-Barbuda"
+ },
+ "SA": {
+ "name": "Arabie saoudite"
+ },
+ "AR": {
+ "name": "Argentine"
+ },
+ "AM": {
+ "name": "Arménie"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australie"
+ },
+ "AT": {
+ "name": "Autriche"
+ },
+ "AZ": {
+ "name": "Azerbaïdjan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahreïn"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbade"
+ },
+ "BY": {
+ "name": "Bélarus"
+ },
+ "BE": {
+ "name": "Belgique"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Bénin"
+ },
+ "BM": {
+ "name": "Bermudes"
+ },
+ "BT": {
+ "name": "Bhoutan"
+ },
+ "BO": {
+ "name": "Bolivie"
+ },
+ "BA": {
+ "name": "Bosnie-Herzégovine"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brésil"
+ },
+ "BN": {
+ "name": "Brunéi Darussalam"
+ },
+ "BG": {
+ "name": "Bulgarie"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodge"
+ },
+ "CM": {
+ "name": "Cameroun"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "CV": {
+ "name": "Cap-Vert"
+ },
+ "EA": {
+ "name": "Ceuta et Melilla"
+ },
+ "CL": {
+ "name": "Chili"
+ },
+ "CN": {
+ "name": "Chine"
+ },
+ "CY": {
+ "name": "Chypre"
+ },
+ "CO": {
+ "name": "Colombie"
+ },
+ "KM": {
+ "name": "Comores"
+ },
+ "CG": {
+ "name": "Congo-Brazzaville"
+ },
+ "CD": {
+ "name": "Congo-Kinshasa"
+ },
+ "KP": {
+ "name": "Corée du Nord"
+ },
+ "KR": {
+ "name": "Corée du Sud"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatie"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danemark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominique"
+ },
+ "EG": {
+ "name": "Égypte"
+ },
+ "AE": {
+ "name": "Émirats arabes unis"
+ },
+ "EC": {
+ "name": "Équateur"
+ },
+ "ER": {
+ "name": "Érythrée"
+ },
+ "ES": {
+ "name": "Espagne"
+ },
+ "EE": {
+ "name": "Estonie"
+ },
+ "VA": {
+ "name": "État de la Cité du Vatican"
+ },
+ "US": {
+ "name": "États-Unis"
+ },
+ "ET": {
+ "name": "Éthiopie"
+ },
+ "FJ": {
+ "name": "Fidji"
+ },
+ "FI": {
+ "name": "Finlande"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambie"
+ },
+ "GE": {
+ "name": "Géorgie"
+ },
+ "GS": {
+ "name": "Géorgie du Sud et les îles Sandwich du Sud"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Grèce"
+ },
+ "GD": {
+ "name": "Grenade"
+ },
+ "GL": {
+ "name": "Groenland"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinée"
+ },
+ "GQ": {
+ "name": "Guinée équatoriale"
+ },
+ "GW": {
+ "name": "Guinée-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GF": {
+ "name": "Guyane française"
+ },
+ "HT": {
+ "name": "Haïti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hongrie"
+ },
+ "CX": {
+ "name": "ÃŽle Christmas"
+ },
+ "AC": {
+ "name": "Île de l’Ascension"
+ },
+ "IM": {
+ "name": "ÃŽle de Man"
+ },
+ "NF": {
+ "name": "ÃŽle Norfolk"
+ },
+ "AX": {
+ "name": "ÃŽles Ã…land"
+ },
+ "KY": {
+ "name": "Îles Caïmans"
+ },
+ "IC": {
+ "name": "ÃŽles Canaries"
+ },
+ "CC": {
+ "name": "ÃŽles Cocos (Keeling)"
+ },
+ "CK": {
+ "name": "ÃŽles Cook"
+ },
+ "FO": {
+ "name": "Îles Féroé"
+ },
+ "FK": {
+ "name": "ÃŽles Malouines"
+ },
+ "MP": {
+ "name": "ÃŽles Mariannes du Nord"
+ },
+ "MH": {
+ "name": "ÃŽles Marshall"
+ },
+ "UM": {
+ "name": "Îles mineures éloignées des États-Unis"
+ },
+ "SB": {
+ "name": "ÃŽles Salomon"
+ },
+ "TC": {
+ "name": "Îles Turques-et-Caïques"
+ },
+ "VG": {
+ "name": "ÃŽles Vierges britanniques"
+ },
+ "VI": {
+ "name": "Îles Vierges des États-Unis"
+ },
+ "IN": {
+ "name": "Inde"
+ },
+ "ID": {
+ "name": "Indonésie"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irlande"
+ },
+ "IS": {
+ "name": "Islande"
+ },
+ "IL": {
+ "name": "Israël"
+ },
+ "IT": {
+ "name": "Italie"
+ },
+ "JM": {
+ "name": "Jamaïque"
+ },
+ "JP": {
+ "name": "Japon"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordanie"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KG": {
+ "name": "Kirghizistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Koweït"
+ },
+ "RE": {
+ "name": "La Réunion"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Lettonie"
+ },
+ "LB": {
+ "name": "Liban"
+ },
+ "LR": {
+ "name": "Libéria"
+ },
+ "LY": {
+ "name": "Libye"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituanie"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MK": {
+ "name": "Macédoine"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malaisie"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malte"
+ },
+ "MA": {
+ "name": "Maroc"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MU": {
+ "name": "Maurice"
+ },
+ "MR": {
+ "name": "Mauritanie"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexique"
+ },
+ "FM": {
+ "name": "Micronésie"
+ },
+ "MD": {
+ "name": "Moldavie"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolie"
+ },
+ "ME": {
+ "name": "Monténégro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar"
+ },
+ "NA": {
+ "name": "Namibie"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Népal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigéria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norvège"
+ },
+ "NC": {
+ "name": "Nouvelle-Calédonie"
+ },
+ "NZ": {
+ "name": "Nouvelle-Zélande"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "UG": {
+ "name": "Ouganda"
+ },
+ "UZ": {
+ "name": "Ouzbékistan"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palaos"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papouasie-Nouvelle-Guinée"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "NL": {
+ "name": "Pays-Bas"
+ },
+ "BQ": {
+ "name": "Pays-Bas caribéens"
+ },
+ "PE": {
+ "name": "Pérou"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PL": {
+ "name": "Pologne"
+ },
+ "PF": {
+ "name": "Polynésie française"
+ },
+ "PR": {
+ "name": "Porto Rico"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "HK": {
+ "name": "R.A.S. chinoise de Hong Kong"
+ },
+ "MO": {
+ "name": "R.A.S. chinoise de Macao"
+ },
+ "CF": {
+ "name": "République centrafricaine"
+ },
+ "DO": {
+ "name": "République dominicaine"
+ },
+ "CZ": {
+ "name": "République tchèque"
+ },
+ "RO": {
+ "name": "Roumanie"
+ },
+ "GB": {
+ "name": "Royaume-Uni"
+ },
+ "RU": {
+ "name": "Russie"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "EH": {
+ "name": "Sahara occidental"
+ },
+ "BL": {
+ "name": "Saint-Barthélemy"
+ },
+ "KN": {
+ "name": "Saint-Christophe-et-Niévès"
+ },
+ "SM": {
+ "name": "Saint-Marin"
+ },
+ "MF": {
+ "name": "Saint-Martin (France)"
+ },
+ "SX": {
+ "name": "Saint-Martin (Pays-Bas)"
+ },
+ "PM": {
+ "name": "Saint-Pierre-et-Miquelon"
+ },
+ "VC": {
+ "name": "Saint-Vincent-et-les Grenadines"
+ },
+ "SH": {
+ "name": "Sainte-Hélène"
+ },
+ "LC": {
+ "name": "Sainte-Lucie"
+ },
+ "SV": {
+ "name": "Salvador"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa américaines"
+ },
+ "ST": {
+ "name": "Sao Tomé-et-Principe"
+ },
+ "SN": {
+ "name": "Sénégal"
+ },
+ "RS": {
+ "name": "Serbie"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapour"
+ },
+ "SK": {
+ "name": "Slovaquie"
+ },
+ "SI": {
+ "name": "Slovénie"
+ },
+ "SO": {
+ "name": "Somalie"
+ },
+ "SD": {
+ "name": "Soudan"
+ },
+ "SS": {
+ "name": "Soudan du Sud"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SE": {
+ "name": "Suède"
+ },
+ "CH": {
+ "name": "Suisse"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard et Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SY": {
+ "name": "Syrie"
+ },
+ "TJ": {
+ "name": "Tadjikistan"
+ },
+ "TW": {
+ "name": "Taïwan"
+ },
+ "TZ": {
+ "name": "Tanzanie"
+ },
+ "TD": {
+ "name": "Tchad"
+ },
+ "TF": {
+ "name": "Terres australes françaises"
+ },
+ "IO": {
+ "name": "Territoire britannique de l’océan Indien"
+ },
+ "PS": {
+ "name": "Territoires palestiniens"
+ },
+ "TH": {
+ "name": "Thaïlande"
+ },
+ "TL": {
+ "name": "Timor oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinité-et-Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisie"
+ },
+ "TM": {
+ "name": "Turkménistan"
+ },
+ "TR": {
+ "name": "Turquie"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis-et-Futuna"
+ },
+ "YE": {
+ "name": "Yémen"
+ },
+ "ZM": {
+ "name": "Zambie"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/fr-CH.json b/library/intl/resources/country/fr-CH.json
new file mode 100644
index 000000000..d274eb795
--- /dev/null
+++ b/library/intl/resources/country/fr-CH.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "ZA": {
+ "name": "Afrique du Sud"
+ },
+ "AL": {
+ "name": "Albanie"
+ },
+ "DZ": {
+ "name": "Algérie"
+ },
+ "DE": {
+ "name": "Allemagne"
+ },
+ "AD": {
+ "name": "Andorre"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctique"
+ },
+ "AG": {
+ "name": "Antigua-et-Barbuda"
+ },
+ "SA": {
+ "name": "Arabie saoudite"
+ },
+ "AR": {
+ "name": "Argentine"
+ },
+ "AM": {
+ "name": "Arménie"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australie"
+ },
+ "AT": {
+ "name": "Autriche"
+ },
+ "AZ": {
+ "name": "Azerbaïdjan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahreïn"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbade"
+ },
+ "BE": {
+ "name": "Belgique"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Bénin"
+ },
+ "BM": {
+ "name": "Bermudes"
+ },
+ "BT": {
+ "name": "Bhoutan"
+ },
+ "BY": {
+ "name": "Biélorussie"
+ },
+ "BO": {
+ "name": "Bolivie"
+ },
+ "BA": {
+ "name": "Bosnie-Herzégovine"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brésil"
+ },
+ "BN": {
+ "name": "Brunéi Darussalam"
+ },
+ "BG": {
+ "name": "Bulgarie"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodge"
+ },
+ "CM": {
+ "name": "Cameroun"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "CV": {
+ "name": "Cap-Vert"
+ },
+ "EA": {
+ "name": "Ceuta et Melilla"
+ },
+ "CL": {
+ "name": "Chili"
+ },
+ "CN": {
+ "name": "Chine"
+ },
+ "CY": {
+ "name": "Chypre"
+ },
+ "CO": {
+ "name": "Colombie"
+ },
+ "KM": {
+ "name": "Comores"
+ },
+ "CG": {
+ "name": "Congo-Brazzaville"
+ },
+ "CD": {
+ "name": "Congo-Kinshasa"
+ },
+ "KP": {
+ "name": "Corée du Nord"
+ },
+ "KR": {
+ "name": "Corée du Sud"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatie"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danemark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominique"
+ },
+ "EG": {
+ "name": "Égypte"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Émirats arabes unis"
+ },
+ "EC": {
+ "name": "Équateur"
+ },
+ "ER": {
+ "name": "Érythrée"
+ },
+ "ES": {
+ "name": "Espagne"
+ },
+ "EE": {
+ "name": "Estonie"
+ },
+ "VA": {
+ "name": "État de la Cité du Vatican"
+ },
+ "FM": {
+ "name": "États fédérés de Micronésie"
+ },
+ "US": {
+ "name": "États-Unis"
+ },
+ "ET": {
+ "name": "Éthiopie"
+ },
+ "FJ": {
+ "name": "Fidji"
+ },
+ "FI": {
+ "name": "Finlande"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambie"
+ },
+ "GE": {
+ "name": "Géorgie"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Grèce"
+ },
+ "GD": {
+ "name": "Grenade"
+ },
+ "GL": {
+ "name": "Groenland"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinée"
+ },
+ "GQ": {
+ "name": "Guinée équatoriale"
+ },
+ "GW": {
+ "name": "Guinée-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GF": {
+ "name": "Guyane française"
+ },
+ "HT": {
+ "name": "Haïti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hongrie"
+ },
+ "CX": {
+ "name": "ÃŽle Christmas"
+ },
+ "AC": {
+ "name": "Île de l’Ascension"
+ },
+ "IM": {
+ "name": "ÃŽle de Man"
+ },
+ "NF": {
+ "name": "ÃŽle Norfolk"
+ },
+ "AX": {
+ "name": "ÃŽles Ã…land"
+ },
+ "KY": {
+ "name": "Îles Caïmans"
+ },
+ "IC": {
+ "name": "ÃŽles Canaries"
+ },
+ "CC": {
+ "name": "ÃŽles Cocos"
+ },
+ "CK": {
+ "name": "ÃŽles Cook"
+ },
+ "FO": {
+ "name": "Îles Féroé"
+ },
+ "GS": {
+ "name": "Îles Géorgie du Sud et Sandwich du Sud"
+ },
+ "FK": {
+ "name": "ÃŽles Malouines"
+ },
+ "MP": {
+ "name": "ÃŽles Mariannes du Nord"
+ },
+ "MH": {
+ "name": "ÃŽles Marshall"
+ },
+ "UM": {
+ "name": "Îles mineures éloignées des États-Unis"
+ },
+ "SB": {
+ "name": "ÃŽles Salomon"
+ },
+ "TC": {
+ "name": "Îles Turques-et-Caïques"
+ },
+ "VG": {
+ "name": "ÃŽles Vierges britanniques"
+ },
+ "VI": {
+ "name": "Îles Vierges des États-Unis"
+ },
+ "IN": {
+ "name": "Inde"
+ },
+ "ID": {
+ "name": "Indonésie"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irlande"
+ },
+ "IS": {
+ "name": "Islande"
+ },
+ "IL": {
+ "name": "Israël"
+ },
+ "IT": {
+ "name": "Italie"
+ },
+ "JM": {
+ "name": "Jamaïque"
+ },
+ "JP": {
+ "name": "Japon"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordanie"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KG": {
+ "name": "Kirghizistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Koweït"
+ },
+ "RE": {
+ "name": "La Réunion"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Lettonie"
+ },
+ "LB": {
+ "name": "Liban"
+ },
+ "LR": {
+ "name": "Libéria"
+ },
+ "LY": {
+ "name": "Libye"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituanie"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MK": {
+ "name": "Macédoine"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malaisie"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malte"
+ },
+ "MA": {
+ "name": "Maroc"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MU": {
+ "name": "Maurice"
+ },
+ "MR": {
+ "name": "Mauritanie"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexique"
+ },
+ "MD": {
+ "name": "Moldavie"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolie"
+ },
+ "ME": {
+ "name": "Monténégro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar"
+ },
+ "NA": {
+ "name": "Namibie"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Népal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigéria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norvège"
+ },
+ "NC": {
+ "name": "Nouvelle-Calédonie"
+ },
+ "NZ": {
+ "name": "Nouvelle-Zélande"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "UG": {
+ "name": "Ouganda"
+ },
+ "UZ": {
+ "name": "Ouzbékistan"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palaos"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papouasie-Nouvelle-Guinée"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "NL": {
+ "name": "Pays-Bas"
+ },
+ "BQ": {
+ "name": "Pays-Bas caribéens"
+ },
+ "PE": {
+ "name": "Pérou"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PL": {
+ "name": "Pologne"
+ },
+ "PF": {
+ "name": "Polynésie française"
+ },
+ "PR": {
+ "name": "Porto Rico"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "HK": {
+ "name": "R.A.S. chinoise de Hong Kong"
+ },
+ "MO": {
+ "name": "R.A.S. chinoise de Macao"
+ },
+ "CF": {
+ "name": "République centrafricaine"
+ },
+ "DO": {
+ "name": "République dominicaine"
+ },
+ "CZ": {
+ "name": "République tchèque"
+ },
+ "RO": {
+ "name": "Roumanie"
+ },
+ "GB": {
+ "name": "Royaume-Uni"
+ },
+ "RU": {
+ "name": "Russie"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "EH": {
+ "name": "Sahara occidental"
+ },
+ "BL": {
+ "name": "Saint-Barthélemy"
+ },
+ "KN": {
+ "name": "Saint-Christophe-et-Niévès"
+ },
+ "SM": {
+ "name": "Saint-Marin"
+ },
+ "MF": {
+ "name": "Saint-Martin (partie française)"
+ },
+ "PM": {
+ "name": "Saint-Pierre-et-Miquelon"
+ },
+ "VC": {
+ "name": "Saint-Vincent-et-les-Grenadines"
+ },
+ "SH": {
+ "name": "Sainte-Hélène"
+ },
+ "LC": {
+ "name": "Sainte-Lucie"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa américaines"
+ },
+ "ST": {
+ "name": "Sao Tomé-et-Principe"
+ },
+ "SN": {
+ "name": "Sénégal"
+ },
+ "RS": {
+ "name": "Serbie"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapour"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovaquie"
+ },
+ "SI": {
+ "name": "Slovénie"
+ },
+ "SO": {
+ "name": "Somalie"
+ },
+ "SD": {
+ "name": "Soudan"
+ },
+ "SS": {
+ "name": "Soudan du Sud"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SE": {
+ "name": "Suède"
+ },
+ "CH": {
+ "name": "Suisse"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard et Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SY": {
+ "name": "Syrie"
+ },
+ "TJ": {
+ "name": "Tadjikistan"
+ },
+ "TW": {
+ "name": "Taïwan"
+ },
+ "TZ": {
+ "name": "Tanzanie"
+ },
+ "TD": {
+ "name": "Tchad"
+ },
+ "TF": {
+ "name": "Terres australes françaises"
+ },
+ "IO": {
+ "name": "Territoire britannique de l’océan Indien"
+ },
+ "PS": {
+ "name": "Territoires palestiniens"
+ },
+ "TH": {
+ "name": "Thaïlande"
+ },
+ "TL": {
+ "name": "Timor oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinité-et-Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisie"
+ },
+ "TM": {
+ "name": "Turkménistan"
+ },
+ "TR": {
+ "name": "Turquie"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis-et-Futuna"
+ },
+ "YE": {
+ "name": "Yémen"
+ },
+ "ZM": {
+ "name": "Zambie"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/fr.json b/library/intl/resources/country/fr.json
new file mode 100644
index 000000000..db6e0d8f2
--- /dev/null
+++ b/library/intl/resources/country/fr.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "ZA": {
+ "name": "Afrique du Sud"
+ },
+ "AL": {
+ "name": "Albanie"
+ },
+ "DZ": {
+ "name": "Algérie"
+ },
+ "DE": {
+ "name": "Allemagne"
+ },
+ "AD": {
+ "name": "Andorre"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctique"
+ },
+ "AG": {
+ "name": "Antigua-et-Barbuda"
+ },
+ "SA": {
+ "name": "Arabie saoudite"
+ },
+ "AR": {
+ "name": "Argentine"
+ },
+ "AM": {
+ "name": "Arménie"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australie"
+ },
+ "AT": {
+ "name": "Autriche"
+ },
+ "AZ": {
+ "name": "Azerbaïdjan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahreïn"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbade"
+ },
+ "BE": {
+ "name": "Belgique"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Bénin"
+ },
+ "BM": {
+ "name": "Bermudes"
+ },
+ "BT": {
+ "name": "Bhoutan"
+ },
+ "BY": {
+ "name": "Biélorussie"
+ },
+ "BO": {
+ "name": "Bolivie"
+ },
+ "BA": {
+ "name": "Bosnie-Herzégovine"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brésil"
+ },
+ "BN": {
+ "name": "Brunéi Darussalam"
+ },
+ "BG": {
+ "name": "Bulgarie"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodge"
+ },
+ "CM": {
+ "name": "Cameroun"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "CV": {
+ "name": "Cap-Vert"
+ },
+ "EA": {
+ "name": "Ceuta et Melilla"
+ },
+ "CL": {
+ "name": "Chili"
+ },
+ "CN": {
+ "name": "Chine"
+ },
+ "CY": {
+ "name": "Chypre"
+ },
+ "CO": {
+ "name": "Colombie"
+ },
+ "KM": {
+ "name": "Comores"
+ },
+ "CG": {
+ "name": "Congo-Brazzaville"
+ },
+ "CD": {
+ "name": "Congo-Kinshasa"
+ },
+ "KP": {
+ "name": "Corée du Nord"
+ },
+ "KR": {
+ "name": "Corée du Sud"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatie"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danemark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominique"
+ },
+ "EG": {
+ "name": "Égypte"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Émirats arabes unis"
+ },
+ "EC": {
+ "name": "Équateur"
+ },
+ "ER": {
+ "name": "Érythrée"
+ },
+ "ES": {
+ "name": "Espagne"
+ },
+ "EE": {
+ "name": "Estonie"
+ },
+ "VA": {
+ "name": "État de la Cité du Vatican"
+ },
+ "FM": {
+ "name": "États fédérés de Micronésie"
+ },
+ "US": {
+ "name": "États-Unis"
+ },
+ "ET": {
+ "name": "Éthiopie"
+ },
+ "FJ": {
+ "name": "Fidji"
+ },
+ "FI": {
+ "name": "Finlande"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambie"
+ },
+ "GE": {
+ "name": "Géorgie"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Grèce"
+ },
+ "GD": {
+ "name": "Grenade"
+ },
+ "GL": {
+ "name": "Groenland"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GN": {
+ "name": "Guinée"
+ },
+ "GQ": {
+ "name": "Guinée équatoriale"
+ },
+ "GW": {
+ "name": "Guinée-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GF": {
+ "name": "Guyane française"
+ },
+ "HT": {
+ "name": "Haïti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hongrie"
+ },
+ "CX": {
+ "name": "ÃŽle Christmas"
+ },
+ "AC": {
+ "name": "Île de l’Ascension"
+ },
+ "IM": {
+ "name": "ÃŽle de Man"
+ },
+ "NF": {
+ "name": "ÃŽle Norfolk"
+ },
+ "AX": {
+ "name": "ÃŽles Ã…land"
+ },
+ "KY": {
+ "name": "Îles Caïmans"
+ },
+ "IC": {
+ "name": "ÃŽles Canaries"
+ },
+ "CC": {
+ "name": "ÃŽles Cocos"
+ },
+ "CK": {
+ "name": "ÃŽles Cook"
+ },
+ "FO": {
+ "name": "Îles Féroé"
+ },
+ "GS": {
+ "name": "Îles Géorgie du Sud et Sandwich du Sud"
+ },
+ "FK": {
+ "name": "ÃŽles Malouines"
+ },
+ "MP": {
+ "name": "ÃŽles Mariannes du Nord"
+ },
+ "MH": {
+ "name": "ÃŽles Marshall"
+ },
+ "UM": {
+ "name": "Îles mineures éloignées des États-Unis"
+ },
+ "SB": {
+ "name": "ÃŽles Salomon"
+ },
+ "TC": {
+ "name": "Îles Turques-et-Caïques"
+ },
+ "VG": {
+ "name": "ÃŽles Vierges britanniques"
+ },
+ "VI": {
+ "name": "Îles Vierges des États-Unis"
+ },
+ "IN": {
+ "name": "Inde"
+ },
+ "ID": {
+ "name": "Indonésie"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irlande"
+ },
+ "IS": {
+ "name": "Islande"
+ },
+ "IL": {
+ "name": "Israël"
+ },
+ "IT": {
+ "name": "Italie"
+ },
+ "JM": {
+ "name": "Jamaïque"
+ },
+ "JP": {
+ "name": "Japon"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordanie"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KG": {
+ "name": "Kirghizistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Koweït"
+ },
+ "RE": {
+ "name": "La Réunion"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Lettonie"
+ },
+ "LB": {
+ "name": "Liban"
+ },
+ "LR": {
+ "name": "Libéria"
+ },
+ "LY": {
+ "name": "Libye"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituanie"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MK": {
+ "name": "Macédoine"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malaisie"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malte"
+ },
+ "MA": {
+ "name": "Maroc"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MU": {
+ "name": "Maurice"
+ },
+ "MR": {
+ "name": "Mauritanie"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexique"
+ },
+ "MD": {
+ "name": "Moldavie"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolie"
+ },
+ "ME": {
+ "name": "Monténégro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar"
+ },
+ "NA": {
+ "name": "Namibie"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Népal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigéria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norvège"
+ },
+ "NC": {
+ "name": "Nouvelle-Calédonie"
+ },
+ "NZ": {
+ "name": "Nouvelle-Zélande"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "UG": {
+ "name": "Ouganda"
+ },
+ "UZ": {
+ "name": "Ouzbékistan"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palaos"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papouasie-Nouvelle-Guinée"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "NL": {
+ "name": "Pays-Bas"
+ },
+ "BQ": {
+ "name": "Pays-Bas caribéens"
+ },
+ "PE": {
+ "name": "Pérou"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PL": {
+ "name": "Pologne"
+ },
+ "PF": {
+ "name": "Polynésie française"
+ },
+ "PR": {
+ "name": "Porto Rico"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "HK": {
+ "name": "R.A.S. chinoise de Hong Kong"
+ },
+ "MO": {
+ "name": "R.A.S. chinoise de Macao"
+ },
+ "CF": {
+ "name": "République centrafricaine"
+ },
+ "DO": {
+ "name": "République dominicaine"
+ },
+ "CZ": {
+ "name": "République tchèque"
+ },
+ "RO": {
+ "name": "Roumanie"
+ },
+ "GB": {
+ "name": "Royaume-Uni"
+ },
+ "RU": {
+ "name": "Russie"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "EH": {
+ "name": "Sahara occidental"
+ },
+ "BL": {
+ "name": "Saint-Barthélemy"
+ },
+ "KN": {
+ "name": "Saint-Christophe-et-Niévès"
+ },
+ "SM": {
+ "name": "Saint-Marin"
+ },
+ "MF": {
+ "name": "Saint-Martin (partie française)"
+ },
+ "SX": {
+ "name": "Saint-Martin (partie néerlandaise)"
+ },
+ "PM": {
+ "name": "Saint-Pierre-et-Miquelon"
+ },
+ "VC": {
+ "name": "Saint-Vincent-et-les-Grenadines"
+ },
+ "SH": {
+ "name": "Sainte-Hélène"
+ },
+ "LC": {
+ "name": "Sainte-Lucie"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa américaines"
+ },
+ "ST": {
+ "name": "Sao Tomé-et-Principe"
+ },
+ "SN": {
+ "name": "Sénégal"
+ },
+ "RS": {
+ "name": "Serbie"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapour"
+ },
+ "SK": {
+ "name": "Slovaquie"
+ },
+ "SI": {
+ "name": "Slovénie"
+ },
+ "SO": {
+ "name": "Somalie"
+ },
+ "SD": {
+ "name": "Soudan"
+ },
+ "SS": {
+ "name": "Soudan du Sud"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SE": {
+ "name": "Suède"
+ },
+ "CH": {
+ "name": "Suisse"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard et Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SY": {
+ "name": "Syrie"
+ },
+ "TJ": {
+ "name": "Tadjikistan"
+ },
+ "TW": {
+ "name": "Taïwan"
+ },
+ "TZ": {
+ "name": "Tanzanie"
+ },
+ "TD": {
+ "name": "Tchad"
+ },
+ "TF": {
+ "name": "Terres australes françaises"
+ },
+ "IO": {
+ "name": "Territoire britannique de l’océan Indien"
+ },
+ "PS": {
+ "name": "Territoires palestiniens"
+ },
+ "TH": {
+ "name": "Thaïlande"
+ },
+ "TL": {
+ "name": "Timor oriental"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinité-et-Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisie"
+ },
+ "TM": {
+ "name": "Turkménistan"
+ },
+ "TR": {
+ "name": "Turquie"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis-et-Futuna"
+ },
+ "YE": {
+ "name": "Yémen"
+ },
+ "ZM": {
+ "name": "Zambie"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/fur.json b/library/intl/resources/country/fur.json
new file mode 100644
index 000000000..44bce8a36
--- /dev/null
+++ b/library/intl/resources/country/fur.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AL": {
+ "name": "Albanie"
+ },
+ "DZ": {
+ "name": "Alzerie"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antartic"
+ },
+ "AG": {
+ "name": "Antigua e Barbuda"
+ },
+ "SA": {
+ "name": "Arabie Saudide"
+ },
+ "AR": {
+ "name": "Argjentine"
+ },
+ "AM": {
+ "name": "Armenie"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australie"
+ },
+ "AT": {
+ "name": "Austrie"
+ },
+ "AZ": {
+ "name": "Azerbaigian"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgjiche"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BY": {
+ "name": "Bielorussie"
+ },
+ "MM": {
+ "name": "Birmanie"
+ },
+ "BO": {
+ "name": "Bolivie"
+ },
+ "BA": {
+ "name": "Bosnie e Ercegovine"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasîl"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgarie"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "TD": {
+ "name": "Çad"
+ },
+ "KH": {
+ "name": "Camboze"
+ },
+ "CM": {
+ "name": "Camerun"
+ },
+ "CA": {
+ "name": "Canade"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta e Melilla"
+ },
+ "CL": {
+ "name": "Cile"
+ },
+ "CN": {
+ "name": "Cine"
+ },
+ "CY": {
+ "name": "Cipri"
+ },
+ "CV": {
+ "name": "Cjâf vert"
+ },
+ "CO": {
+ "name": "Colombie"
+ },
+ "KM": {
+ "name": "Comoris"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "KP": {
+ "name": "Coree dal nord"
+ },
+ "KR": {
+ "name": "Coree dal sud"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Cravuazie"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CI": {
+ "name": "Cueste di Avoli"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danimarcje"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominiche"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egjit"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emirâts araps unîts"
+ },
+ "ER": {
+ "name": "Eritree"
+ },
+ "EE": {
+ "name": "Estonie"
+ },
+ "ET": {
+ "name": "Etiopie"
+ },
+ "PH": {
+ "name": "Filipinis"
+ },
+ "FI": {
+ "name": "Finlandie"
+ },
+ "FJ": {
+ "name": "Fizi"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GS": {
+ "name": "Georgia dal Sud e Isulis Sandwich dal Sud"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "DJ": {
+ "name": "Gibuti"
+ },
+ "JM": {
+ "name": "Gjamaiche"
+ },
+ "JP": {
+ "name": "Gjapon"
+ },
+ "GE": {
+ "name": "Gjeorgjie"
+ },
+ "DE": {
+ "name": "Gjermanie"
+ },
+ "GI": {
+ "name": "Gjibraltar"
+ },
+ "NC": {
+ "name": "Gnove Caledonie"
+ },
+ "NZ": {
+ "name": "Gnove Zelande"
+ },
+ "GR": {
+ "name": "Grecie"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Groenlande"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GF": {
+ "name": "Guiana francês"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GN": {
+ "name": "Guinee"
+ },
+ "GQ": {
+ "name": "Guinee ecuatoriâl"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesie"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Irlande"
+ },
+ "IS": {
+ "name": "Islande"
+ },
+ "NF": {
+ "name": "Isole Norfolk"
+ },
+ "IL": {
+ "name": "Israêl"
+ },
+ "CX": {
+ "name": "Isule Christmas"
+ },
+ "IM": {
+ "name": "Isule di Man"
+ },
+ "AX": {
+ "name": "Isulis Aland"
+ },
+ "IC": {
+ "name": "Isulis Canariis"
+ },
+ "KY": {
+ "name": "Isulis Cayman"
+ },
+ "CC": {
+ "name": "Isulis Cocos"
+ },
+ "CK": {
+ "name": "Isulis Cook"
+ },
+ "FK": {
+ "name": "Isulis Falkland"
+ },
+ "FO": {
+ "name": "Isulis Faroe"
+ },
+ "MP": {
+ "name": "Isulis Mariana dal Nord"
+ },
+ "MH": {
+ "name": "Isulis Marshall"
+ },
+ "UM": {
+ "name": "Isulis periferichis minôrs dai Stâts Unîts"
+ },
+ "SB": {
+ "name": "Isulis Salomon"
+ },
+ "TC": {
+ "name": "Isulis Turks e Caicos"
+ },
+ "VI": {
+ "name": "Isulis vergjinis americanis"
+ },
+ "VG": {
+ "name": "Isulis vergjinis britanichis"
+ },
+ "IT": {
+ "name": "Italie"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordanie"
+ },
+ "KZ": {
+ "name": "Kazachistan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KG": {
+ "name": "Kirghizstan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Letonie"
+ },
+ "LB": {
+ "name": "Liban"
+ },
+ "LR": {
+ "name": "Liberie"
+ },
+ "LY": {
+ "name": "Libie"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituanie"
+ },
+ "LU": {
+ "name": "Lussemburc"
+ },
+ "MK": {
+ "name": "Macedonie"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldivis"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Maroc"
+ },
+ "MQ": {
+ "name": "Martiniche"
+ },
+ "MR": {
+ "name": "Mauritanie"
+ },
+ "MU": {
+ "name": "Maurizi"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Messic"
+ },
+ "FM": {
+ "name": "Micronesie"
+ },
+ "MD": {
+ "name": "Moldavie"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolie"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambic"
+ },
+ "NA": {
+ "name": "Namibie"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigerie"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norvegje"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "HU": {
+ "name": "Ongjarie"
+ },
+ "NL": {
+ "name": "Paîs bas"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamà"
+ },
+ "PG": {
+ "name": "Papue Gnove Guinee"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perù"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PF": {
+ "name": "Polinesie francês"
+ },
+ "PL": {
+ "name": "Polonie"
+ },
+ "PR": {
+ "name": "Porto Rico"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "GB": {
+ "name": "Ream unît"
+ },
+ "HK": {
+ "name": "Regjon aministrative speciâl de Cine di Hong Kong"
+ },
+ "MO": {
+ "name": "Regjon aministrative speciâl de Cine di Macao"
+ },
+ "CZ": {
+ "name": "Republiche ceche"
+ },
+ "CF": {
+ "name": "Republiche centri africane"
+ },
+ "CD": {
+ "name": "Republiche Democratiche dal Congo"
+ },
+ "DO": {
+ "name": "Republiche dominicane"
+ },
+ "RE": {
+ "name": "Reunion"
+ },
+ "RO": {
+ "name": "Romanie"
+ },
+ "RW": {
+ "name": "Ruande"
+ },
+ "RU": {
+ "name": "Russie"
+ },
+ "EH": {
+ "name": "Sahara ocidentâl"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa merecanis"
+ },
+ "KN": {
+ "name": "San Kitts e Nevis"
+ },
+ "SM": {
+ "name": "San Marin"
+ },
+ "PM": {
+ "name": "San Pierre e Miquelon"
+ },
+ "VC": {
+ "name": "San Vincent e lis Grenadinis"
+ },
+ "BL": {
+ "name": "Sant Barthélemy"
+ },
+ "MF": {
+ "name": "Sant Martin"
+ },
+ "SH": {
+ "name": "Sante Eline"
+ },
+ "LC": {
+ "name": "Sante Lusie"
+ },
+ "ST": {
+ "name": "Sao Tomè e Principe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbie"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Sirie"
+ },
+ "SK": {
+ "name": "Slovachie"
+ },
+ "SI": {
+ "name": "Slovenie"
+ },
+ "SO": {
+ "name": "Somalie"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spagne"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "US": {
+ "name": "Stâts Unîts"
+ },
+ "ZA": {
+ "name": "Sud Afriche"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard e Jan Mayen"
+ },
+ "SE": {
+ "name": "Svezie"
+ },
+ "CH": {
+ "name": "Svuizare"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "TH": {
+ "name": "Tailandie"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tanzanie"
+ },
+ "TJ": {
+ "name": "Tazikistan"
+ },
+ "IO": {
+ "name": "Teritori britanic dal Ocean Indian"
+ },
+ "TF": {
+ "name": "Teritoris meridionâi francês"
+ },
+ "PS": {
+ "name": "Teritoris palestinês"
+ },
+ "TL": {
+ "name": "Timor orientâl"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad e Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisie"
+ },
+ "TR": {
+ "name": "Turchie"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucraine"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbechistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis e Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/fy.json b/library/intl/resources/country/fy.json
new file mode 100644
index 000000000..ae3b71d81
--- /dev/null
+++ b/library/intl/resources/country/fy.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ålân"
+ },
+ "AL": {
+ "name": "Albanië"
+ },
+ "DZ": {
+ "name": "Algerije"
+ },
+ "AS": {
+ "name": "Amerikaansk Samoa"
+ },
+ "VI": {
+ "name": "Amerikaanske Maagdeneilannen"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua en Barbuda"
+ },
+ "AR": {
+ "name": "Argentinië"
+ },
+ "AM": {
+ "name": "Armenië"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension"
+ },
+ "AU": {
+ "name": "Australië"
+ },
+ "AZ": {
+ "name": "Azerbeidzjan"
+ },
+ "BS": {
+ "name": "Bahama’s"
+ },
+ "BH": {
+ "name": "Bahrein"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "België"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnië en Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazilië"
+ },
+ "IO": {
+ "name": "Britse Gebieden yn de Indyske Oseaan"
+ },
+ "VG": {
+ "name": "Britse Maagdeneilannen"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgarije"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodja"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "KY": {
+ "name": "Caymaneilannen"
+ },
+ "EA": {
+ "name": "Ceuta en Melilla"
+ },
+ "CL": {
+ "name": "Chili"
+ },
+ "KM": {
+ "name": "Comoren"
+ },
+ "CG": {
+ "name": "Congo-Brazzaville"
+ },
+ "CD": {
+ "name": "Congo-Kinshasa"
+ },
+ "CK": {
+ "name": "Cookeilannen"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denemarken"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "DO": {
+ "name": "Dominikaanske Republyk"
+ },
+ "DE": {
+ "name": "Dútslân"
+ },
+ "TL": {
+ "name": "East-Timor"
+ },
+ "AT": {
+ "name": "Eastenryk"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypte"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatoriaal-Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estlân"
+ },
+ "ET": {
+ "name": "Ethiopië"
+ },
+ "FO": {
+ "name": "Faeröer"
+ },
+ "FK": {
+ "name": "Falklâneilannen"
+ },
+ "US": {
+ "name": "Ferienigde Staten"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipijnen"
+ },
+ "FI": {
+ "name": "Finlân"
+ },
+ "FR": {
+ "name": "Frankrijk"
+ },
+ "GF": {
+ "name": "Frans-Guyana"
+ },
+ "PF": {
+ "name": "Frans-Polynesië"
+ },
+ "TF": {
+ "name": "Franse Gebieden in de zuidelijke Indyske Oseaan"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgië"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grienlân"
+ },
+ "GR": {
+ "name": "Grikelân"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinee"
+ },
+ "GW": {
+ "name": "Guinee-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haïti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hongarije"
+ },
+ "HK": {
+ "name": "Hongkong SAR van Sina"
+ },
+ "IE": {
+ "name": "Ierlân"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israël"
+ },
+ "IT": {
+ "name": "Italië"
+ },
+ "CI": {
+ "name": "Ivoorkust"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordanië"
+ },
+ "CV": {
+ "name": "Kaapverdië"
+ },
+ "CM": {
+ "name": "Kameroen"
+ },
+ "IC": {
+ "name": "Kanaryske Eilânnen"
+ },
+ "BQ": {
+ "name": "Karibysk Nederlân"
+ },
+ "KZ": {
+ "name": "Kazachstan"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirgizië"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KW": {
+ "name": "Koeweit"
+ },
+ "CC": {
+ "name": "Kokosilanen"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "HR": {
+ "name": "Kroatië"
+ },
+ "CX": {
+ "name": "Krysteilan"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Letlân"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libië"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Litouwen"
+ },
+ "LU": {
+ "name": "Luxemburg"
+ },
+ "UM": {
+ "name": "Lyts ôflizzen eilannen fan de Ferienigde Staten"
+ },
+ "MO": {
+ "name": "Macao SAR van Sina"
+ },
+ "MK": {
+ "name": "Macedonië"
+ },
+ "MG": {
+ "name": "Madeiaskar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldiven"
+ },
+ "MY": {
+ "name": "Maleisië"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marokko"
+ },
+ "MH": {
+ "name": "Marshalleilannen"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritanië"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesië"
+ },
+ "MD": {
+ "name": "Moldavië"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolië"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birma)"
+ },
+ "NA": {
+ "name": "Namibië"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NL": {
+ "name": "Nederlân"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NC": {
+ "name": "Nij-Caledonië"
+ },
+ "NZ": {
+ "name": "Nij-Seelân"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "KP": {
+ "name": "Noard-Korea"
+ },
+ "MP": {
+ "name": "Noardlike Marianeneilannen"
+ },
+ "NO": {
+ "name": "Noarwegen"
+ },
+ "NF": {
+ "name": "Norfolkeilân"
+ },
+ "UG": {
+ "name": "Oeganda"
+ },
+ "UA": {
+ "name": "Oekraïne"
+ },
+ "UZ": {
+ "name": "Oezbekistan"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestynske gebieten"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papoea-Nij-Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairneilannen"
+ },
+ "PL": {
+ "name": "Polen"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Roemenië"
+ },
+ "RU": {
+ "name": "Ruslân"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "KN": {
+ "name": "Saint Kitts en Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "VC": {
+ "name": "Saint Vincent en de Grenadines"
+ },
+ "MF": {
+ "name": "Saint-Martin"
+ },
+ "PM": {
+ "name": "Saint-Pierre en Miquelon"
+ },
+ "SB": {
+ "name": "Salomonseilannen"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "Sao Tomé en Principe"
+ },
+ "SA": {
+ "name": "Saoedi-Arabië"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Servië"
+ },
+ "SC": {
+ "name": "Seychellen"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "CN": {
+ "name": "Sina"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SH": {
+ "name": "Sint-Helena"
+ },
+ "SX": {
+ "name": "Sint-Maarten"
+ },
+ "CF": {
+ "name": "Sintraal-Afrikaanske Republyk"
+ },
+ "SI": {
+ "name": "Slovenië"
+ },
+ "SK": {
+ "name": "Slowakije"
+ },
+ "SD": {
+ "name": "Soedan"
+ },
+ "SO": {
+ "name": "Somalië"
+ },
+ "ES": {
+ "name": "Spanje"
+ },
+ "SJ": {
+ "name": "Spitsbergen en Jan Mayen"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "ZA": {
+ "name": "Sûd-Afrika"
+ },
+ "GS": {
+ "name": "Sûd-Georgia en Sûdlike Sandwicheilannen"
+ },
+ "KR": {
+ "name": "Sûd-Korea"
+ },
+ "SS": {
+ "name": "Sûd-Soedan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SZ": {
+ "name": "Swazilân"
+ },
+ "CH": {
+ "name": "Switserlân"
+ },
+ "CY": {
+ "name": "Syprus"
+ },
+ "SY": {
+ "name": "Syrië"
+ },
+ "TJ": {
+ "name": "Tadzjikistan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailân"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad en Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TD": {
+ "name": "Tsjaad"
+ },
+ "CZ": {
+ "name": "Tsjechje"
+ },
+ "TN": {
+ "name": "Tunesië"
+ },
+ "TR": {
+ "name": "Turkije"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks- en Caicoseilannen"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vaticaanstêd"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "GB": {
+ "name": "Verenigd Koninkrijk"
+ },
+ "AE": {
+ "name": "Verenigde Arabyske Emiraten"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis en Futuna"
+ },
+ "EH": {
+ "name": "Westelijke Sahara"
+ },
+ "BY": {
+ "name": "Wit-Ruslân"
+ },
+ "ID": {
+ "name": "Yndonesië"
+ },
+ "IS": {
+ "name": "Yslân"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ },
+ "SE": {
+ "name": "Zweden"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ga.json b/library/intl/resources/country/ga.json
new file mode 100644
index 000000000..c43deae91
--- /dev/null
+++ b/library/intl/resources/country/ga.json
@@ -0,0 +1,761 @@
+{
+ "ET": {
+ "name": "An Aetóip"
+ },
+ "AF": {
+ "name": "An Afganastáin"
+ },
+ "ZA": {
+ "name": "An Afraic Theas"
+ },
+ "DZ": {
+ "name": "An Ailgéir"
+ },
+ "AR": {
+ "name": "An Airgintín"
+ },
+ "AM": {
+ "name": "An Airméin"
+ },
+ "AL": {
+ "name": "An Albáin"
+ },
+ "AQ": {
+ "name": "An Antartaice"
+ },
+ "SA": {
+ "name": "An Araib Shádach"
+ },
+ "AZ": {
+ "name": "An Asarbaiseáin"
+ },
+ "AU": {
+ "name": "An Astráil"
+ },
+ "BD": {
+ "name": "An Bhanglaidéis"
+ },
+ "BY": {
+ "name": "An Bhealarúis"
+ },
+ "BE": {
+ "name": "An Bheilg"
+ },
+ "BZ": {
+ "name": "An Bheilís"
+ },
+ "BA": {
+ "name": "An Bhoisnia agus An Heirseagaivéin"
+ },
+ "BO": {
+ "name": "An Bholaiv"
+ },
+ "BW": {
+ "name": "An Bhotsuáin"
+ },
+ "BR": {
+ "name": "An Bhrasaíl"
+ },
+ "BG": {
+ "name": "An Bhulgáir"
+ },
+ "BI": {
+ "name": "An Bhurúin"
+ },
+ "BT": {
+ "name": "An Bhútáin"
+ },
+ "KH": {
+ "name": "An Chambóid"
+ },
+ "KZ": {
+ "name": "An Chasacstáin"
+ },
+ "KE": {
+ "name": "An Chéinia"
+ },
+ "CY": {
+ "name": "An Chipir"
+ },
+ "KG": {
+ "name": "An Chirgeastáin"
+ },
+ "KR": {
+ "name": "An Chóiré Theas"
+ },
+ "KP": {
+ "name": "An Chóiré Thuaidh"
+ },
+ "CO": {
+ "name": "An Cholóim"
+ },
+ "XK": {
+ "name": "An Chosaiv"
+ },
+ "HR": {
+ "name": "An Chróit"
+ },
+ "CG": {
+ "name": "An Congó"
+ },
+ "CI": {
+ "name": "An Cósta Eabhair"
+ },
+ "DK": {
+ "name": "An Danmhairg"
+ },
+ "EE": {
+ "name": "An Eastóin"
+ },
+ "EG": {
+ "name": "An Éigipt"
+ },
+ "CH": {
+ "name": "An Eilvéis"
+ },
+ "ER": {
+ "name": "An Eiritré"
+ },
+ "FI": {
+ "name": "An Fhionlainn"
+ },
+ "FR": {
+ "name": "An Fhrainc"
+ },
+ "GA": {
+ "name": "An Ghabúin"
+ },
+ "GM": {
+ "name": "An Ghaimbia"
+ },
+ "DE": {
+ "name": "An Ghearmáin"
+ },
+ "GL": {
+ "name": "An Ghraonlainn"
+ },
+ "GR": {
+ "name": "An Ghréig"
+ },
+ "GY": {
+ "name": "An Ghuáin"
+ },
+ "GN": {
+ "name": "An Ghuine"
+ },
+ "GQ": {
+ "name": "An Ghuine Mheánchriosach"
+ },
+ "IQ": {
+ "name": "An Iaráic"
+ },
+ "IR": {
+ "name": "An Iaráin"
+ },
+ "IN": {
+ "name": "An India"
+ },
+ "ID": {
+ "name": "An Indinéis"
+ },
+ "IT": {
+ "name": "An Iodáil"
+ },
+ "JO": {
+ "name": "An Iordáin"
+ },
+ "NO": {
+ "name": "An Iorua"
+ },
+ "IS": {
+ "name": "An Ãoslainn"
+ },
+ "NL": {
+ "name": "An Ãsiltír"
+ },
+ "BQ": {
+ "name": "An Ãsiltír Chairibeach"
+ },
+ "LV": {
+ "name": "An Laitvia"
+ },
+ "LR": {
+ "name": "An Libéir"
+ },
+ "LY": {
+ "name": "An Libia"
+ },
+ "LB": {
+ "name": "An Liobáin"
+ },
+ "LT": {
+ "name": "An Liotuáin"
+ },
+ "MK": {
+ "name": "An Mhacadóin"
+ },
+ "MY": {
+ "name": "An Mhalaeisia"
+ },
+ "MW": {
+ "name": "An Mhaláiv"
+ },
+ "MR": {
+ "name": "An Mháratáin"
+ },
+ "FM": {
+ "name": "An Mhicrinéis"
+ },
+ "MD": {
+ "name": "An Mholdóiv"
+ },
+ "MN": {
+ "name": "An Mhongóil"
+ },
+ "NA": {
+ "name": "An Namaib"
+ },
+ "NG": {
+ "name": "An Nigéir"
+ },
+ "NE": {
+ "name": "An Nígir"
+ },
+ "NC": {
+ "name": "An Nua-Chaladóin"
+ },
+ "NZ": {
+ "name": "An Nua-Shéalainn"
+ },
+ "AT": {
+ "name": "An Ostair"
+ },
+ "PK": {
+ "name": "An Phacastáin"
+ },
+ "DO": {
+ "name": "An Phoblacht Dhoiminiceach"
+ },
+ "PL": {
+ "name": "An Pholainn"
+ },
+ "PT": {
+ "name": "An Phortaingéil"
+ },
+ "GB": {
+ "name": "An Ríocht Aontaithe"
+ },
+ "RO": {
+ "name": "An Rómáin"
+ },
+ "RU": {
+ "name": "An Rúis"
+ },
+ "EH": {
+ "name": "An Sahára Thiar"
+ },
+ "ES": {
+ "name": "An Spáinn"
+ },
+ "TJ": {
+ "name": "An Táidsíceastáin"
+ },
+ "TZ": {
+ "name": "An Tansáin"
+ },
+ "TH": {
+ "name": "An Téalainn"
+ },
+ "TW": {
+ "name": "An Téaváin"
+ },
+ "ZM": {
+ "name": "An tSaimbia"
+ },
+ "SV": {
+ "name": "An tSalvadóir"
+ },
+ "JP": {
+ "name": "An tSeapáin"
+ },
+ "SN": {
+ "name": "An tSeineagáil"
+ },
+ "RS": {
+ "name": "An tSeirbia"
+ },
+ "GE": {
+ "name": "An tSeoirsia"
+ },
+ "GS": {
+ "name": "An tSeoirsia Theas agus Oileáin Sandwich Theas"
+ },
+ "CL": {
+ "name": "An tSile"
+ },
+ "CN": {
+ "name": "An tSín"
+ },
+ "ZW": {
+ "name": "An tSiombáib"
+ },
+ "SY": {
+ "name": "An tSiria"
+ },
+ "SI": {
+ "name": "An tSlóivéin"
+ },
+ "SK": {
+ "name": "An tSlóvaic"
+ },
+ "SO": {
+ "name": "An tSomáil"
+ },
+ "SE": {
+ "name": "An tSualainn"
+ },
+ "SZ": {
+ "name": "An tSuasalainn"
+ },
+ "SD": {
+ "name": "An tSúdáin"
+ },
+ "SS": {
+ "name": "An tSúdáin Theas"
+ },
+ "TN": {
+ "name": "An Túinéis"
+ },
+ "TR": {
+ "name": "An Tuirc"
+ },
+ "TM": {
+ "name": "An Tuircméanastáin"
+ },
+ "UA": {
+ "name": "An Úcráin"
+ },
+ "UZ": {
+ "name": "An Úisbéiceastáin"
+ },
+ "HU": {
+ "name": "An Ungáir"
+ },
+ "VA": {
+ "name": "An Vatacáin"
+ },
+ "AD": {
+ "name": "Andóra"
+ },
+ "AI": {
+ "name": "Angaíle"
+ },
+ "AO": {
+ "name": "Angóla"
+ },
+ "AG": {
+ "name": "Antigua agus Barbúda"
+ },
+ "AE": {
+ "name": "Aontas na nÉimíríochtaí Arabacha"
+ },
+ "AW": {
+ "name": "Arúba"
+ },
+ "BH": {
+ "name": "Bairéin"
+ },
+ "BB": {
+ "name": "Barbadós"
+ },
+ "BJ": {
+ "name": "Beinin"
+ },
+ "BM": {
+ "name": "Beirmiúda"
+ },
+ "BN": {
+ "name": "Brúiné"
+ },
+ "BF": {
+ "name": "Buircíne Fasó"
+ },
+ "CM": {
+ "name": "Camarún"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "CA": {
+ "name": "Ceanada"
+ },
+ "EA": {
+ "name": "Ceuta agus Melilla"
+ },
+ "KI": {
+ "name": "Cireabaití"
+ },
+ "CR": {
+ "name": "Cósta Ríce"
+ },
+ "IO": {
+ "name": "Críoch Aigéan Indiach na Breataine"
+ },
+ "TF": {
+ "name": "Críocha Francacha Dheisceart an Domhain"
+ },
+ "KW": {
+ "name": "Cuáit"
+ },
+ "CU": {
+ "name": "Cúba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Doiminice"
+ },
+ "EC": {
+ "name": "Eacuadór"
+ },
+ "YE": {
+ "name": "Éimin"
+ },
+ "IE": {
+ "name": "Éire"
+ },
+ "FJ": {
+ "name": "Fidsí"
+ },
+ "GH": {
+ "name": "Gána"
+ },
+ "GG": {
+ "name": "Geansaí"
+ },
+ "JE": {
+ "name": "Geirsí"
+ },
+ "GI": {
+ "name": "Giobráltar"
+ },
+ "GD": {
+ "name": "Greanáda"
+ },
+ "GP": {
+ "name": "Guadalúip"
+ },
+ "GF": {
+ "name": "Guáin na Fraince"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatamala"
+ },
+ "GW": {
+ "name": "Guine Bissau"
+ },
+ "HT": {
+ "name": "Háítí"
+ },
+ "HN": {
+ "name": "Hondúras"
+ },
+ "JM": {
+ "name": "Iamáice"
+ },
+ "IL": {
+ "name": "Iosrael"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Leosóta"
+ },
+ "LI": {
+ "name": "Lichtinstéin"
+ },
+ "LU": {
+ "name": "Lucsamburg"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MM": {
+ "name": "Maenmar (Burma)"
+ },
+ "ML": {
+ "name": "Mailí"
+ },
+ "MT": {
+ "name": "Málta"
+ },
+ "MA": {
+ "name": "Maracó"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meicsiceo"
+ },
+ "MC": {
+ "name": "Monacó"
+ },
+ "ME": {
+ "name": "Montainéagró"
+ },
+ "MS": {
+ "name": "Montsarat"
+ },
+ "MZ": {
+ "name": "Mósaimbíc"
+ },
+ "BS": {
+ "name": "Na Bahámaí"
+ },
+ "PS": {
+ "name": "Na Críocha Palaistíneacha"
+ },
+ "IC": {
+ "name": "Na hOileáin Chanáracha"
+ },
+ "PH": {
+ "name": "Na hOileáin Fhilipíneacha"
+ },
+ "MP": {
+ "name": "Na hOileáin Mháirianacha Thuaidh"
+ },
+ "SC": {
+ "name": "Na Séiséil"
+ },
+ "NR": {
+ "name": "Nárú"
+ },
+ "NP": {
+ "name": "Neipeal"
+ },
+ "NI": {
+ "name": "Nicearagua"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "PG": {
+ "name": "Nua-Ghuine Phapua"
+ },
+ "AX": {
+ "name": "Oileáin Åland"
+ },
+ "VG": {
+ "name": "Oileáin Bhriotanacha na Maighdean"
+ },
+ "KY": {
+ "name": "Oileáin Cayman"
+ },
+ "KM": {
+ "name": "Oileáin Chomóra"
+ },
+ "CC": {
+ "name": "Oileáin Cocos (Keeling)"
+ },
+ "CK": {
+ "name": "Oileáin Cook"
+ },
+ "FK": {
+ "name": "Oileáin Fháclainne"
+ },
+ "FO": {
+ "name": "Oileáin Fharó"
+ },
+ "UM": {
+ "name": "Oileáin Imeallacha S.A.M."
+ },
+ "MH": {
+ "name": "Oileáin Marshall"
+ },
+ "MV": {
+ "name": "Oileáin Mhaildíve"
+ },
+ "VI": {
+ "name": "Oileáin Mheiriceánacha na Maighdean"
+ },
+ "TC": {
+ "name": "Oileáin na dTurcach agus Caicos"
+ },
+ "PN": {
+ "name": "Oileáin Pitcairn"
+ },
+ "SB": {
+ "name": "Oileáin Sholomón"
+ },
+ "IM": {
+ "name": "Oileán Mhanann"
+ },
+ "MU": {
+ "name": "Oileán Mhuirís"
+ },
+ "AC": {
+ "name": "Oileán na Deascabhála"
+ },
+ "CX": {
+ "name": "Oileán na Nollag"
+ },
+ "TT": {
+ "name": "Oileán na Tríonóide agus Tobága"
+ },
+ "NF": {
+ "name": "Oileán Norfolk"
+ },
+ "OM": {
+ "name": "Óman"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PY": {
+ "name": "Paragua"
+ },
+ "PE": {
+ "name": "Peiriú"
+ },
+ "CD": {
+ "name": "Poblacht Dhaonlathach an Chongó"
+ },
+ "CF": {
+ "name": "Poblacht na hAfraice Láir"
+ },
+ "CZ": {
+ "name": "Poblacht na Seice"
+ },
+ "PF": {
+ "name": "Polainéis na Fraince"
+ },
+ "PR": {
+ "name": "Portó Ríce"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "CV": {
+ "name": "Rinn Verde"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "HK": {
+ "name": "S.R.R. na Síne Hong Cong"
+ },
+ "MO": {
+ "name": "S.R.R. na Síne Macao"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint-Martin"
+ },
+ "PM": {
+ "name": "Saint-Pierre-et-Miquelon"
+ },
+ "WS": {
+ "name": "Samó"
+ },
+ "AS": {
+ "name": "Samó Meiriceánach"
+ },
+ "KN": {
+ "name": "San Críostóir-Nimheas"
+ },
+ "SH": {
+ "name": "San Héilin"
+ },
+ "SM": {
+ "name": "San Mairíne"
+ },
+ "VC": {
+ "name": "San Uinseann agus na Greanáidíní"
+ },
+ "ST": {
+ "name": "São Tomé agus Príncipe"
+ },
+ "TD": {
+ "name": "Sead"
+ },
+ "SL": {
+ "name": "Siarra Leon"
+ },
+ "SG": {
+ "name": "Singeapór"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "LK": {
+ "name": "Srí Lanca"
+ },
+ "US": {
+ "name": "Stáit Aontaithe Mheiriceá"
+ },
+ "SR": {
+ "name": "Suranam"
+ },
+ "SJ": {
+ "name": "Svalbard agus Jan Mayen"
+ },
+ "TL": {
+ "name": "Tíomór Thoir"
+ },
+ "TK": {
+ "name": "Tócalá"
+ },
+ "TG": {
+ "name": "Tóga"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Urugua"
+ },
+ "WF": {
+ "name": "Vailís agus Futúna"
+ },
+ "VU": {
+ "name": "Vanuatú"
+ },
+ "VE": {
+ "name": "Veiniséala"
+ },
+ "VN": {
+ "name": "Vítneam"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/gd.json b/library/intl/resources/country/gd.json
new file mode 100644
index 000000000..9c5898cea
--- /dev/null
+++ b/library/intl/resources/country/gd.json
@@ -0,0 +1,761 @@
+{
+ "BY": {
+ "name": "A’ Bhealaruis"
+ },
+ "BE": {
+ "name": "A’ Bheilg"
+ },
+ "BZ": {
+ "name": "A’ Bheilìs"
+ },
+ "VE": {
+ "name": "A’ Bheiniseala"
+ },
+ "BG": {
+ "name": "A’ Bhulgair"
+ },
+ "GE": {
+ "name": "A’ Chairtbheil"
+ },
+ "CG": {
+ "name": "A’ Chongo - Brazzaville"
+ },
+ "XK": {
+ "name": "A’ Chosobho"
+ },
+ "HR": {
+ "name": "A’ Chròthais"
+ },
+ "GM": {
+ "name": "A’ Ghaimbia"
+ },
+ "DE": {
+ "name": "A’ Ghearmailt"
+ },
+ "GL": {
+ "name": "A’ Ghraonlann"
+ },
+ "GR": {
+ "name": "A’ Ghreug"
+ },
+ "MK": {
+ "name": "A’ Mhasadon"
+ },
+ "MD": {
+ "name": "A’ Mholdobha"
+ },
+ "DO": {
+ "name": "A’ Phoblachd Dhoiminiceach"
+ },
+ "PL": {
+ "name": "A’ Phòlainn"
+ },
+ "PT": {
+ "name": "A’ Phortagail"
+ },
+ "AF": {
+ "name": "Afghanastàn"
+ },
+ "ZA": {
+ "name": "Afraga a Deas"
+ },
+ "DZ": {
+ "name": "Aildiria"
+ },
+ "AG": {
+ "name": "Aintìoga is Barbuda"
+ },
+ "AM": {
+ "name": "Airmeinia"
+ },
+ "AL": {
+ "name": "Albàinia"
+ },
+ "ME": {
+ "name": "Am Monadh Neagrach"
+ },
+ "AQ": {
+ "name": "An Antartaig"
+ },
+ "AR": {
+ "name": "An Argantain"
+ },
+ "CV": {
+ "name": "An Ceap Uaine"
+ },
+ "DK": {
+ "name": "An Danmhairg"
+ },
+ "IT": {
+ "name": "An Eadailt"
+ },
+ "YE": {
+ "name": "An Eaman"
+ },
+ "EE": {
+ "name": "An Eastoin"
+ },
+ "CH": {
+ "name": "An Eilbheis"
+ },
+ "EG": {
+ "name": "An Èiphit"
+ },
+ "FI": {
+ "name": "An Fhionnlann"
+ },
+ "FR": {
+ "name": "An Fhraing"
+ },
+ "ET": {
+ "name": "An Itiop"
+ },
+ "LV": {
+ "name": "An Laitbhe"
+ },
+ "LT": {
+ "name": "An Liotuain"
+ },
+ "NA": {
+ "name": "An Namaib"
+ },
+ "NO": {
+ "name": "An Nirribhidh"
+ },
+ "AT": {
+ "name": "An Ostair"
+ },
+ "GB": {
+ "name": "An Rìoghachd Aonaichte"
+ },
+ "RU": {
+ "name": "An Ruis"
+ },
+ "SV": {
+ "name": "An Salbhador"
+ },
+ "ES": {
+ "name": "An Spàinn"
+ },
+ "TD": {
+ "name": "An t-Seàd"
+ },
+ "JP": {
+ "name": "An t-Seapan"
+ },
+ "RS": {
+ "name": "An t-Sèirb"
+ },
+ "CL": {
+ "name": "An t-Sile"
+ },
+ "CN": {
+ "name": "An t-Sìn"
+ },
+ "ZW": {
+ "name": "An t-Sìombab"
+ },
+ "SK": {
+ "name": "An t-Slòbhac"
+ },
+ "SI": {
+ "name": "An t-Slòbhain"
+ },
+ "SE": {
+ "name": "An t-Suain"
+ },
+ "TZ": {
+ "name": "An Tansan"
+ },
+ "TR": {
+ "name": "An Tuirc"
+ },
+ "UA": {
+ "name": "An Ucràin"
+ },
+ "HU": {
+ "name": "An Ungair"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angòla"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "SA": {
+ "name": "Aràibia nan Sabhd"
+ },
+ "AW": {
+ "name": "Arùba"
+ },
+ "AZ": {
+ "name": "Asarbaideàn"
+ },
+ "AU": {
+ "name": "Astràilia"
+ },
+ "BH": {
+ "name": "Bachrain"
+ },
+ "BD": {
+ "name": "Bangladais"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BM": {
+ "name": "Bearmùda"
+ },
+ "BJ": {
+ "name": "Beinin"
+ },
+ "VN": {
+ "name": "Bhiet-Nam"
+ },
+ "BO": {
+ "name": "Boilibhia"
+ },
+ "BA": {
+ "name": "Bosna agus Hearsagobhana"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Braisil"
+ },
+ "BN": {
+ "name": "Brùnaigh"
+ },
+ "BF": {
+ "name": "Buirciona Faso"
+ },
+ "BI": {
+ "name": "Burundaidh"
+ },
+ "BT": {
+ "name": "Butàn"
+ },
+ "NC": {
+ "name": "Cailleann Nuadh"
+ },
+ "CM": {
+ "name": "Camarun"
+ },
+ "KH": {
+ "name": "Cambuidea"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "KZ": {
+ "name": "Casachstàn"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "VA": {
+ "name": "Cathair na Bhatacain"
+ },
+ "KE": {
+ "name": "Ceinia"
+ },
+ "EA": {
+ "name": "Ceuta agus Melilla"
+ },
+ "CY": {
+ "name": "Cìopras"
+ },
+ "KG": {
+ "name": "Cìorgastan"
+ },
+ "KI": {
+ "name": "Ciribeas"
+ },
+ "KR": {
+ "name": "Coirèa a Deas"
+ },
+ "KP": {
+ "name": "Coirèa a Tuath"
+ },
+ "CO": {
+ "name": "Coloimbia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CR": {
+ "name": "Costa Rìcea"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "CU": {
+ "name": "Cùba"
+ },
+ "KW": {
+ "name": "Cuibhèit"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "JE": {
+ "name": "Deàrsaidh"
+ },
+ "JM": {
+ "name": "Diameuga"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "GI": {
+ "name": "Diobraltar"
+ },
+ "DJ": {
+ "name": "Diobùtaidh"
+ },
+ "DM": {
+ "name": "Doiminicea"
+ },
+ "MN": {
+ "name": "Dùthaich nam Mongol"
+ },
+ "SZ": {
+ "name": "Dùthaich nan Suasaidh"
+ },
+ "TH": {
+ "name": "Dùthaich nan Tàidh"
+ },
+ "EC": {
+ "name": "Eacuador"
+ },
+ "ER": {
+ "name": "Eartra"
+ },
+ "IM": {
+ "name": "Eilean Mhanainn"
+ },
+ "AC": {
+ "name": "Eilean na Deasgabhalach"
+ },
+ "CX": {
+ "name": "Eilean na Nollaig"
+ },
+ "SH": {
+ "name": "Eilean Naomh Eilidh"
+ },
+ "NF": {
+ "name": "Eilean Norfolk"
+ },
+ "PN": {
+ "name": "Eilean Peit a’ Chàirn"
+ },
+ "VI": {
+ "name": "Eileanan Aimeireagach na Maighdinn"
+ },
+ "VG": {
+ "name": "Eileanan Breatannach na Maighdinn"
+ },
+ "CK": {
+ "name": "Eileanan Cook"
+ },
+ "MH": {
+ "name": "Eileanan Mharshall"
+ },
+ "SB": {
+ "name": "Eileanan Sholaimh"
+ },
+ "IE": {
+ "name": "Èirinn"
+ },
+ "FJ": {
+ "name": "Fìdi"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GH": {
+ "name": "Gàna"
+ },
+ "GG": {
+ "name": "Geàrnsaidh"
+ },
+ "GN": {
+ "name": "Gini"
+ },
+ "GQ": {
+ "name": "Gini Mheadhan-Chriosach"
+ },
+ "PG": {
+ "name": "Gini Nuadh Phaputhach"
+ },
+ "GW": {
+ "name": "Gini-Bioso"
+ },
+ "GD": {
+ "name": "Greanàda"
+ },
+ "GP": {
+ "name": "Guadalup"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatamala"
+ },
+ "GY": {
+ "name": "Guidheàna"
+ },
+ "GF": {
+ "name": "Guidheàna na Frainge"
+ },
+ "HT": {
+ "name": "Haidhti"
+ },
+ "HN": {
+ "name": "Hondùras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR na Sìne"
+ },
+ "IS": {
+ "name": "Innis Tìle"
+ },
+ "IQ": {
+ "name": "Ioràc"
+ },
+ "IR": {
+ "name": "Ioràn"
+ },
+ "JO": {
+ "name": "Iòrdan"
+ },
+ "IL": {
+ "name": "Iosrael"
+ },
+ "LA": {
+ "name": "Làthos"
+ },
+ "LB": {
+ "name": "Leabanon"
+ },
+ "LS": {
+ "name": "Leasoto"
+ },
+ "LR": {
+ "name": "Libèir"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Lichtenstein"
+ },
+ "LU": {
+ "name": "Lugsamburg"
+ },
+ "MO": {
+ "name": "Macàthu SAR na Sìne"
+ },
+ "MG": {
+ "name": "Madagasgar"
+ },
+ "ML": {
+ "name": "Màili"
+ },
+ "MQ": {
+ "name": "Mairtinic"
+ },
+ "MW": {
+ "name": "Malabhaidh"
+ },
+ "MY": {
+ "name": "Malaidhsea"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meagsago"
+ },
+ "UM": {
+ "name": "Meanbh-Eileanan Iomallach nan Stàitean Aonaichte"
+ },
+ "MM": {
+ "name": "Miànmar (Burma)"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MS": {
+ "name": "Montsarat"
+ },
+ "MR": {
+ "name": "Moratàinea"
+ },
+ "MA": {
+ "name": "Moroco"
+ },
+ "MZ": {
+ "name": "Mòsaimbic"
+ },
+ "AX": {
+ "name": "Na h-Eileanan Ã…land"
+ },
+ "BS": {
+ "name": "Na h-Eileanan Bhathama"
+ },
+ "KY": {
+ "name": "Na h-Eileanan Caimean"
+ },
+ "IC": {
+ "name": "Na h-Eileanan Canàrach"
+ },
+ "CC": {
+ "name": "Na h-Eileanan Cocos (Keeling)"
+ },
+ "FK": {
+ "name": "Na h-Eileanan Fàclannach"
+ },
+ "FO": {
+ "name": "Na h-Eileanan Fàro"
+ },
+ "PH": {
+ "name": "Na h-Eileanan Filipineach"
+ },
+ "MP": {
+ "name": "Na h-Eileanan Mairianach a Tuath"
+ },
+ "MV": {
+ "name": "Na h-Eileanan Mhaladaibh"
+ },
+ "MU": {
+ "name": "Na h-Eileanan Mhoiriseas"
+ },
+ "SC": {
+ "name": "Na h-Eileanan Sheiseall"
+ },
+ "TC": {
+ "name": "Na h-Eileanan Turcach is Caiceo"
+ },
+ "ID": {
+ "name": "Na h-Innd Innse"
+ },
+ "IN": {
+ "name": "Na h-Innseachan"
+ },
+ "AE": {
+ "name": "Na h-Iomaratan Arabach Aonaichte"
+ },
+ "FM": {
+ "name": "Na Meanbh-Eileanan"
+ },
+ "PS": {
+ "name": "Na Ranntairean Palastaineach"
+ },
+ "US": {
+ "name": "Na Stàitean Aonaichte"
+ },
+ "NL": {
+ "name": "Na Tìrean Ìsle"
+ },
+ "BQ": {
+ "name": "Na Tìrean Ìsle Caraibeach"
+ },
+ "NR": {
+ "name": "Nabhru"
+ },
+ "VC": {
+ "name": "Naomh Bhionsant agus Eileanan Greanadach"
+ },
+ "KN": {
+ "name": "Naomh Crìstean is Nibheis"
+ },
+ "LC": {
+ "name": "Naomh Lùisea"
+ },
+ "MF": {
+ "name": "Naomh Màrtainn"
+ },
+ "NP": {
+ "name": "Neapàl"
+ },
+ "NE": {
+ "name": "Nìgeir"
+ },
+ "NG": {
+ "name": "Nigèiria"
+ },
+ "NI": {
+ "name": "Niocaragua"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "OM": {
+ "name": "Omàn"
+ },
+ "PK": {
+ "name": "Pagastàn"
+ },
+ "PW": {
+ "name": "Palabh"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PY": {
+ "name": "Paraguaidh"
+ },
+ "PE": {
+ "name": "Pearù"
+ },
+ "CF": {
+ "name": "Poblachd Meadhan Afraga"
+ },
+ "CZ": {
+ "name": "Poblachd na Seice"
+ },
+ "PF": {
+ "name": "Poilinèis na Frainge"
+ },
+ "PR": {
+ "name": "Porto Rìceo"
+ },
+ "IO": {
+ "name": "Ranntair Breatannach Cuan nan Innseachan"
+ },
+ "TF": {
+ "name": "Ranntairean a Deas na Frainge"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romàinia"
+ },
+ "RW": {
+ "name": "Rubhanda"
+ },
+ "ZM": {
+ "name": "Sàimbia"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "PM": {
+ "name": "Saint Pierre agus Miquelon"
+ },
+ "WS": {
+ "name": "Samotha"
+ },
+ "AS": {
+ "name": "Samotha na h-Aimeireaga"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé agus Príncipe"
+ },
+ "EH": {
+ "name": "Sathara an Iar"
+ },
+ "NZ": {
+ "name": "Sealainn Nuadh"
+ },
+ "SN": {
+ "name": "Seanagal"
+ },
+ "GS": {
+ "name": "Seòrsea a Deas is na h-Eileanan Sandwich a Deas"
+ },
+ "SL": {
+ "name": "Siarra Leòmhann"
+ },
+ "SG": {
+ "name": "Singeapòr"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siridhea"
+ },
+ "SO": {
+ "name": "Somàilia"
+ },
+ "LK": {
+ "name": "Sri Lanca"
+ },
+ "SD": {
+ "name": "Sudàn"
+ },
+ "SS": {
+ "name": "Sudàn a Deas"
+ },
+ "SR": {
+ "name": "Suranam"
+ },
+ "SJ": {
+ "name": "Svalbard agus Jan Mayen"
+ },
+ "TW": {
+ "name": "Taidh-Bhàn"
+ },
+ "TJ": {
+ "name": "Taidigeastàn"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trianaid agus Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TV": {
+ "name": "Tubhalu"
+ },
+ "TN": {
+ "name": "Tuinisea"
+ },
+ "TM": {
+ "name": "Turcmanastàn"
+ },
+ "WF": {
+ "name": "Uallas agus Futuna"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguaidh"
+ },
+ "UZ": {
+ "name": "Usbagastàn"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/gl.json b/library/intl/resources/country/gl.json
new file mode 100644
index 000000000..f230e9d10
--- /dev/null
+++ b/library/intl/resources/country/gl.json
@@ -0,0 +1,761 @@
+{
+ "AZ": {
+ "name": "Acerbaixán"
+ },
+ "AF": {
+ "name": "Afganistán"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemaña"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antiga e Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudita"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "DZ": {
+ "name": "Arxelia"
+ },
+ "AR": {
+ "name": "Arxentina"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrein"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BZ": {
+ "name": "Belice"
+ },
+ "BE": {
+ "name": "Bélxica"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrusia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia e Hercegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Bután"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Camerún"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "BQ": {
+ "name": "Caribe neerlandés"
+ },
+ "EA": {
+ "name": "Ceuta e Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Cidade do Vaticano"
+ },
+ "ZW": {
+ "name": "Cimbabue"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comores"
+ },
+ "CG": {
+ "name": "Congo"
+ },
+ "KP": {
+ "name": "Corea do Norte"
+ },
+ "KR": {
+ "name": "Corea do Sur"
+ },
+ "CI": {
+ "name": "Costa de Marfil"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croacia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratos Ãrabes Unidos"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "SK": {
+ "name": "Eslovaquia"
+ },
+ "SI": {
+ "name": "Eslovenia"
+ },
+ "ES": {
+ "name": "España"
+ },
+ "US": {
+ "name": "Estados Unidos de América"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopía"
+ },
+ "EG": {
+ "name": "Exipto"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FJ": {
+ "name": "Fixi"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabón"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GL": {
+ "name": "Grenlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Güiana"
+ },
+ "GF": {
+ "name": "Güiana Francesa"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ecuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "HT": {
+ "name": "Haití"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong RAE de China"
+ },
+ "HU": {
+ "name": "Hungría"
+ },
+ "YE": {
+ "name": "Iemen"
+ },
+ "CX": {
+ "name": "Illa Christmas"
+ },
+ "AC": {
+ "name": "Illa de Ascensión"
+ },
+ "IM": {
+ "name": "Illa de Man"
+ },
+ "NF": {
+ "name": "Illa Norfolk"
+ },
+ "AX": {
+ "name": "Illas Aland"
+ },
+ "KY": {
+ "name": "Illas Caimán"
+ },
+ "IC": {
+ "name": "Illas Canarias"
+ },
+ "CC": {
+ "name": "Illas Cocos (Keeling)"
+ },
+ "CK": {
+ "name": "Illas Cook"
+ },
+ "FO": {
+ "name": "Illas Feroe"
+ },
+ "FK": {
+ "name": "Illas Malvinas"
+ },
+ "MP": {
+ "name": "Illas Marianas do norte"
+ },
+ "MH": {
+ "name": "Illas Marshall"
+ },
+ "UM": {
+ "name": "Illas Menores Distantes dos EUA."
+ },
+ "PN": {
+ "name": "Illas Pitcairn"
+ },
+ "SB": {
+ "name": "Illas Salomón"
+ },
+ "TC": {
+ "name": "Illas Turks e Caicos"
+ },
+ "VG": {
+ "name": "Illas Virxes Británicas"
+ },
+ "VI": {
+ "name": "Illas Virxes Estadounidenses"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MO": {
+ "name": "Macau RAE de China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malaisia"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marrocos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Mauricio"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NE": {
+ "name": "Níxer"
+ },
+ "NG": {
+ "name": "Nixeria"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nova Caledonia"
+ },
+ "NZ": {
+ "name": "Nova Celandia"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "NL": {
+ "name": "Países Baixos"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papúa Nova Guinea"
+ },
+ "PK": {
+ "name": "Paquistán"
+ },
+ "PY": {
+ "name": "Paraguai"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PF": {
+ "name": "Polinesia Francesa"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PR": {
+ "name": "Porto Rico"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "KE": {
+ "name": "Quenia"
+ },
+ "KG": {
+ "name": "Quirguicistán"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Africana Central"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "CD": {
+ "name": "República Democrática do Congo"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunión"
+ },
+ "RO": {
+ "name": "Romanía"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "EH": {
+ "name": "Sahara Occidental"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "BL": {
+ "name": "San Bartolomé"
+ },
+ "KN": {
+ "name": "San Cristovo e Nevis"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "MF": {
+ "name": "San Martiño"
+ },
+ "PM": {
+ "name": "San Pedro e Miguelón"
+ },
+ "ST": {
+ "name": "San Tomé e Príncipe"
+ },
+ "VC": {
+ "name": "San Vicente e Granadinas"
+ },
+ "SH": {
+ "name": "Santa Helena"
+ },
+ "LC": {
+ "name": "Santa Lucía"
+ },
+ "SC": {
+ "name": "Seixeles"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SL": {
+ "name": "Serra Leoa"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suacilandia"
+ },
+ "ZA": {
+ "name": "Sudáfrica"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SS": {
+ "name": "Sudán do sur"
+ },
+ "SE": {
+ "name": "Suecia"
+ },
+ "CH": {
+ "name": "Suíza"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard e Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwán"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TJ": {
+ "name": "Taxiquistán"
+ },
+ "IO": {
+ "name": "Territorio Británico do Océano Ãndico"
+ },
+ "TF": {
+ "name": "Territorios Franceses do Sul"
+ },
+ "PS": {
+ "name": "Territorios palestinos"
+ },
+ "TL": {
+ "name": "Timor Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trindade e Tobago"
+ },
+ "TA": {
+ "name": "Tristán da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turkmenistán"
+ },
+ "TR": {
+ "name": "Turquía"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucraína"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguai"
+ },
+ "UZ": {
+ "name": "Uzbekistán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis e Futuna"
+ },
+ "JM": {
+ "name": "Xamaica"
+ },
+ "JP": {
+ "name": "Xapón"
+ },
+ "GE": {
+ "name": "Xeorxia"
+ },
+ "GS": {
+ "name": "Xeorxia do Sur e Illas Sandwich"
+ },
+ "GI": {
+ "name": "Xibraltar"
+ },
+ "DJ": {
+ "name": "Xibuti"
+ },
+ "JO": {
+ "name": "Xordania"
+ },
+ "ZM": {
+ "name": "Zambia"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/gsw.json b/library/intl/resources/country/gsw.json
new file mode 100644
index 000000000..719beca7b
--- /dev/null
+++ b/library/intl/resources/country/gsw.json
@@ -0,0 +1,761 @@
+{
+ "AX": {
+ "name": "Aaland-Insle"
+ },
+ "AF": {
+ "name": "Afganischtan"
+ },
+ "EG": {
+ "name": "Ägüpte"
+ },
+ "AL": {
+ "name": "Albaanie"
+ },
+ "DZ": {
+ "name": "Algeerie"
+ },
+ "AS": {
+ "name": "Amerikaanisch-Samoa"
+ },
+ "VI": {
+ "name": "Amerikaanischi Jungfere-Insle"
+ },
+ "UM": {
+ "name": "Amerikanisch-Ozeaanie"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angoola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktis"
+ },
+ "AG": {
+ "name": "Antigua und Barbuda"
+ },
+ "GQ": {
+ "name": "Äquatoriaalgineea"
+ },
+ "AR": {
+ "name": "Argentiinie"
+ },
+ "ER": {
+ "name": "Äritreea"
+ },
+ "AM": {
+ "name": "Armeenie"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension"
+ },
+ "AZ": {
+ "name": "Aserbäidschan"
+ },
+ "ET": {
+ "name": "Äthiopie"
+ },
+ "AU": {
+ "name": "Auschtraalie"
+ },
+ "BH": {
+ "name": "Bachräin"
+ },
+ "BS": {
+ "name": "Bahaamas"
+ },
+ "BD": {
+ "name": "Bangladesch"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgie"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Boliivie"
+ },
+ "BA": {
+ "name": "Bosnie und Herzegowina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasilie"
+ },
+ "VG": {
+ "name": "Britischi Jungfere-Insle"
+ },
+ "IO": {
+ "name": "Britischs Territoorium im Indische Oozean"
+ },
+ "BN": {
+ "name": "Brunäi Tarussalam"
+ },
+ "BG": {
+ "name": "Bulgaarie"
+ },
+ "BF": {
+ "name": "Burkina Faaso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "IC": {
+ "name": "Canarische Eilanden"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta und Melilla"
+ },
+ "CN": {
+ "name": "Chiina"
+ },
+ "CK": {
+ "name": "Cook-Insle"
+ },
+ "CR": {
+ "name": "Coschta Rica"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "KP": {
+ "name": "Demokraatischi Volksrepublik Koreea"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "JM": {
+ "name": "Dschamäika"
+ },
+ "JE": {
+ "name": "Dschörsi"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EE": {
+ "name": "Eestland"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "CI": {
+ "name": "Elfebäiküschte"
+ },
+ "FK": {
+ "name": "Falkland-Insle"
+ },
+ "FO": {
+ "name": "Färöer"
+ },
+ "FI": {
+ "name": "Finnland"
+ },
+ "FJ": {
+ "name": "Fitschi"
+ },
+ "FR": {
+ "name": "Frankriich"
+ },
+ "GF": {
+ "name": "Französisch-Guäjaana"
+ },
+ "PF": {
+ "name": "Französisch-Polineesie"
+ },
+ "TF": {
+ "name": "Französischi Süüd- und Antarktisgebiet"
+ },
+ "GH": {
+ "name": "Gaana"
+ },
+ "GG": {
+ "name": "Gäärnsi"
+ },
+ "GA": {
+ "name": "Gabun"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Geoorgie"
+ },
+ "QA": {
+ "name": "Ggatar"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GN": {
+ "name": "Gineea"
+ },
+ "GW": {
+ "name": "Gineea-Bissau"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GR": {
+ "name": "Griecheland"
+ },
+ "GL": {
+ "name": "Gröönland"
+ },
+ "GP": {
+ "name": "Guadälup"
+ },
+ "GY": {
+ "name": "Guäjaana"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemaala"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "NL": {
+ "name": "Holland"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "IS": {
+ "name": "Iisland"
+ },
+ "IN": {
+ "name": "Indie"
+ },
+ "ID": {
+ "name": "Indoneesie"
+ },
+ "IM": {
+ "name": "Insle vo Män"
+ },
+ "IQ": {
+ "name": "Iraak"
+ },
+ "IR": {
+ "name": "Iraan"
+ },
+ "IE": {
+ "name": "Irland"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Itaalie"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "YE": {
+ "name": "Jeeme"
+ },
+ "JO": {
+ "name": "Jordaanie"
+ },
+ "KY": {
+ "name": "Käimän-Insle"
+ },
+ "KH": {
+ "name": "Kambodscha"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "CV": {
+ "name": "Kap Verde"
+ },
+ "KZ": {
+ "name": "Kasachschtan"
+ },
+ "KE": {
+ "name": "Keenia"
+ },
+ "KG": {
+ "name": "Kirgiisischtan"
+ },
+ "KI": {
+ "name": "Kiribaati"
+ },
+ "CC": {
+ "name": "Kokos-Insle"
+ },
+ "CO": {
+ "name": "Kolumbie"
+ },
+ "KM": {
+ "name": "Komoore"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "HR": {
+ "name": "Kroaazie"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuwäit"
+ },
+ "LA": {
+ "name": "Laaos"
+ },
+ "LS": {
+ "name": "Lesooto"
+ },
+ "LV": {
+ "name": "Lettland"
+ },
+ "LI": {
+ "name": "Liächteschtäi"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Libeeria"
+ },
+ "LT": {
+ "name": "Littaue"
+ },
+ "LY": {
+ "name": "Lüübie"
+ },
+ "LU": {
+ "name": "Luxemburg"
+ },
+ "ML": {
+ "name": "Maali"
+ },
+ "MG": {
+ "name": "Madagaschkar"
+ },
+ "YT": {
+ "name": "Majott"
+ },
+ "MW": {
+ "name": "Malaawi"
+ },
+ "MY": {
+ "name": "Maläisia"
+ },
+ "MV": {
+ "name": "Malediiwe"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marokko"
+ },
+ "MH": {
+ "name": "Marshallinsle"
+ },
+ "MQ": {
+ "name": "Martinigg"
+ },
+ "MR": {
+ "name": "Mauretaanie"
+ },
+ "MU": {
+ "name": "Mauriizius"
+ },
+ "MK": {
+ "name": "Mazedoonie"
+ },
+ "MX": {
+ "name": "Mexiko"
+ },
+ "FM": {
+ "name": "Mikroneesie"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolei"
+ },
+ "ME": {
+ "name": "Monteneegro"
+ },
+ "MS": {
+ "name": "Moosörrat"
+ },
+ "MZ": {
+ "name": "Mosambik"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namiibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Neepal"
+ },
+ "NI": {
+ "name": "Nicaraagua"
+ },
+ "NG": {
+ "name": "Nigeeria"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NC": {
+ "name": "Nöikaledoonie"
+ },
+ "NZ": {
+ "name": "Nöiseeland"
+ },
+ "MP": {
+ "name": "Nördlichi Mariaane"
+ },
+ "NF": {
+ "name": "Norfolk-Insle"
+ },
+ "NO": {
+ "name": "Norweege"
+ },
+ "OM": {
+ "name": "Omaan"
+ },
+ "AT": {
+ "name": "Ööschtriich"
+ },
+ "TL": {
+ "name": "Oschttimor"
+ },
+ "PK": {
+ "name": "Pakischtan"
+ },
+ "PS": {
+ "name": "Paläschtinänsischi Gebiet"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua-Neuguinea"
+ },
+ "PY": {
+ "name": "Paraguai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippiine"
+ },
+ "PN": {
+ "name": "Pitggäärn"
+ },
+ "PL": {
+ "name": "Poole"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Riggo"
+ },
+ "KR": {
+ "name": "Republik Koreea"
+ },
+ "MD": {
+ "name": "Republik Moldau"
+ },
+ "RE": {
+ "name": "Reünioon"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumäänie"
+ },
+ "RU": {
+ "name": "Russland"
+ },
+ "SB": {
+ "name": "Salomoone"
+ },
+ "ZM": {
+ "name": "Sambia"
+ },
+ "WS": {
+ "name": "Samooa"
+ },
+ "SM": {
+ "name": "San Mariino"
+ },
+ "ST": {
+ "name": "Sao Tome und Prinssipe"
+ },
+ "RS": {
+ "name": "Särbie"
+ },
+ "SA": {
+ "name": "Saudi-Araabie"
+ },
+ "ES": {
+ "name": "Schpanie"
+ },
+ "LK": {
+ "name": "Schri Lanka"
+ },
+ "SE": {
+ "name": "Schweede"
+ },
+ "CH": {
+ "name": "Schwiiz"
+ },
+ "SC": {
+ "name": "Seischälle"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "SL": {
+ "name": "Sierra Leoone"
+ },
+ "ZW": {
+ "name": "Simbabwe"
+ },
+ "SG": {
+ "name": "Singapuur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slowakäi"
+ },
+ "SI": {
+ "name": "Sloweenie"
+ },
+ "SO": {
+ "name": "Somaalie"
+ },
+ "HK": {
+ "name": "Sonderverwaltigszone Hongkong"
+ },
+ "MO": {
+ "name": "Sonderverwaltigszone Macao"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthelemi"
+ },
+ "SH": {
+ "name": "St. Helena"
+ },
+ "KN": {
+ "name": "St. Kitts und Niuwis"
+ },
+ "LC": {
+ "name": "St. Lutschiia"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "PM": {
+ "name": "St. Pierr und Miggelo"
+ },
+ "VC": {
+ "name": "St. Vincent und d’Grönadiine"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "ZA": {
+ "name": "Süüdafrika"
+ },
+ "GS": {
+ "name": "Süüdgeorgie und d’süüdlichi Sändwitsch-Insle"
+ },
+ "SY": {
+ "name": "Süürie"
+ },
+ "SJ": {
+ "name": "Svalbard und Jaan Määie"
+ },
+ "SZ": {
+ "name": "Swasiland"
+ },
+ "TJ": {
+ "name": "Tadschikischtan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "DK": {
+ "name": "Tänemark"
+ },
+ "TZ": {
+ "name": "Tansaniia"
+ },
+ "CD": {
+ "name": "Temokraatischi Republik Kongo"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "DM": {
+ "name": "Tominica"
+ },
+ "DO": {
+ "name": "Tominikaanischi Republik"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TG": {
+ "name": "Toogo"
+ },
+ "TC": {
+ "name": "Törks- und Gaiggos-Insle"
+ },
+ "TT": {
+ "name": "Trinidad und Tobaago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TD": {
+ "name": "Tschad"
+ },
+ "CZ": {
+ "name": "Tschechischi Republik"
+ },
+ "DJ": {
+ "name": "Tschibuuti"
+ },
+ "CL": {
+ "name": "Tschile"
+ },
+ "TN": {
+ "name": "Tuneesie"
+ },
+ "TR": {
+ "name": "Türggei"
+ },
+ "TM": {
+ "name": "Turkmeenischtan"
+ },
+ "DE": {
+ "name": "Tüütschland"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraiine"
+ },
+ "HU": {
+ "name": "Ungarn"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uschbeekischtan"
+ },
+ "VA": {
+ "name": "Vatikanstadt"
+ },
+ "VE": {
+ "name": "Venezueela"
+ },
+ "AE": {
+ "name": "Veräinigti Arabischi Emirate"
+ },
+ "US": {
+ "name": "Veräinigti Schtaate"
+ },
+ "GB": {
+ "name": "Veräinigts Chönigriich"
+ },
+ "WF": {
+ "name": "Wallis und Futuuna"
+ },
+ "VU": {
+ "name": "Wanuatu"
+ },
+ "EH": {
+ "name": "Weschtsahara"
+ },
+ "CX": {
+ "name": "Wienachts-Insle"
+ },
+ "VN": {
+ "name": "Wietnam"
+ },
+ "BY": {
+ "name": "Wiissrussland"
+ },
+ "CF": {
+ "name": "Zentraalafrikaanischi Republik"
+ },
+ "CY": {
+ "name": "Zypere"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/gu.json b/library/intl/resources/country/gu.json
new file mode 100644
index 000000000..00bbacc90
--- /dev/null
+++ b/library/intl/resources/country/gu.json
@@ -0,0 +1,761 @@
+{
+ "AO": {
+ "name": "અંગોલા"
+ },
+ "AZ": {
+ "name": "અàªàª°àª¬à«ˆàªœàª¾àª¨"
+ },
+ "AF": {
+ "name": "અફઘાનિસà«àª¤àª¾àª¨"
+ },
+ "AS": {
+ "name": "અમેરીકન સમોઆ"
+ },
+ "AW": {
+ "name": "અરà«àª¬àª¾"
+ },
+ "DZ": {
+ "name": "અલà«àªœà«€àª°àª¿àª¯àª¾"
+ },
+ "AL": {
+ "name": "અલà«àª¬à«‡àª¨àª¿àª¯àª¾"
+ },
+ "IS": {
+ "name": "આઇસલેનà«àª¡"
+ },
+ "IM": {
+ "name": "આઈલ ઓફ મૅન"
+ },
+ "IE": {
+ "name": "આયરà«àª²à«‡àª‚ડ"
+ },
+ "AR": {
+ "name": "આરà«àªœà«‡àª¨à«àªŸà«€àª¨àª¾"
+ },
+ "AM": {
+ "name": "આરà«àª®à«‡àª¨àª¿àª¯àª¾"
+ },
+ "GQ": {
+ "name": "ઇકà«àªµà«‡àªŸà«‹àª°àª¿àª¯àª² ગિની"
+ },
+ "EG": {
+ "name": "ઇજિપà«àª¤"
+ },
+ "IL": {
+ "name": "ઇàªàª°àª¾àª‡àª²"
+ },
+ "IT": {
+ "name": "ઇટાલી"
+ },
+ "ET": {
+ "name": "ઇથિઓપિયા"
+ },
+ "ID": {
+ "name": "ઇનà«àª¡à«‹àª¨à«‡àª¶àª¿àª¯àª¾"
+ },
+ "IQ": {
+ "name": "ઇરાક"
+ },
+ "IR": {
+ "name": "ઈરાન"
+ },
+ "UZ": {
+ "name": "ઉàªà«àª¬à«‡àª•àª¿àª¸à«àª¤àª¾àª¨"
+ },
+ "KP": {
+ "name": "ઉતà«àª¤àª° કોરિયા"
+ },
+ "MP": {
+ "name": "ઉતà«àª¤àª°à«€àª¯ મારિયાના આઇલેનà«àª¡à«àª¸"
+ },
+ "UY": {
+ "name": "ઉરà«àª—à«àªµà«‡"
+ },
+ "AI": {
+ "name": "àªàª‚ગà«àªµàª¿àª²àª¾"
+ },
+ "AD": {
+ "name": "àªàª‚ડોરા"
+ },
+ "EC": {
+ "name": "àªàª•à«àªµàª¾àª¡à«‹àª°"
+ },
+ "AQ": {
+ "name": "àªàª¨à«àªŸàª¾àª°à«àª•àªŸàª¿àª•àª¾"
+ },
+ "AG": {
+ "name": "àªàª¨à«àªŸà«€àª—à«àª† અને બરબà«àª¡àª¾"
+ },
+ "ER": {
+ "name": "àªàª°àª¿àªŸà«àª°àª¿àª¯àª¾"
+ },
+ "SV": {
+ "name": "àªàª² સેલà«àªµàª¾àª¡à«‹àª°"
+ },
+ "AX": {
+ "name": "àªàª²à«‡àª‚ડ આઇલેનà«àª¡à«àª¸"
+ },
+ "AC": {
+ "name": "àªàª¸à«‡àª¨à«àª¶àª¨ આઇલેનà«àª¡"
+ },
+ "EE": {
+ "name": "àªàª¸à«àªŸà«‹àª¨àª¿àª¯àª¾"
+ },
+ "AT": {
+ "name": "ઑસà«àªŸà«àª°àª¿àª¯àª¾"
+ },
+ "AU": {
+ "name": "ઑસà«àªŸà«àª°à«‡àª²àª¿àª¯àª¾"
+ },
+ "OM": {
+ "name": "ઓમાન"
+ },
+ "KH": {
+ "name": "કંબોડિયા"
+ },
+ "KZ": {
+ "name": "કàªàª¾àª•àª¿àª¸à«àª¤àª¾àª¨"
+ },
+ "QA": {
+ "name": "કતાર"
+ },
+ "KI": {
+ "name": "કિરિબાટી"
+ },
+ "KG": {
+ "name": "કિરà«àª—િàªà«àª¸à«àª¤àª¾àª¨"
+ },
+ "CK": {
+ "name": "કà«àª• આઇલેનà«àª¡à«àª¸"
+ },
+ "CW": {
+ "name": "કà«àª°àª¾àª•àª¾àª“"
+ },
+ "KW": {
+ "name": "કà«àªµà«ˆàª¤"
+ },
+ "IC": {
+ "name": "કૅનેરી આઇલેનà«àª¡à«àª¸"
+ },
+ "CV": {
+ "name": "કૅપ વરà«àª¡à«‡"
+ },
+ "CM": {
+ "name": "કૅમરૂન"
+ },
+ "CA": {
+ "name": "કેનેડા"
+ },
+ "KE": {
+ "name": "કેનà«àª¯àª¾"
+ },
+ "KY": {
+ "name": "કેયમેન આઇલેનà«àª¡à«àª¸"
+ },
+ "BQ": {
+ "name": "કેરેબિયન નેધરલેનà«àª¡à«àª"
+ },
+ "CD": {
+ "name": "કોંગો - કિંશાસા"
+ },
+ "CG": {
+ "name": "કોંગો - બà«àª°àª¾àªàª¾àªµàª¿àª²à«‡"
+ },
+ "CC": {
+ "name": "કોકોઠ(કીલીંગ) આઇલેનà«àª¡à«àª¸"
+ },
+ "CI": {
+ "name": "કોટ ડી આઇવરી"
+ },
+ "KM": {
+ "name": "કોમોરસ"
+ },
+ "CO": {
+ "name": "કોલમà«àª¬àª¿àª¯àª¾"
+ },
+ "XK": {
+ "name": "કોસોવો"
+ },
+ "CR": {
+ "name": "કોસà«àªŸàª¾ રિકા"
+ },
+ "CU": {
+ "name": "કà«àª¯à«àª¬àª¾"
+ },
+ "CX": {
+ "name": "કà«àª°àª¿àª¸àª®àª¸ આઇલેનà«àª¡"
+ },
+ "HR": {
+ "name": "કà«àª°à«‹àªàª¶àª¿àª¯àª¾"
+ },
+ "GY": {
+ "name": "ગયાના"
+ },
+ "GN": {
+ "name": "ગિની"
+ },
+ "GW": {
+ "name": "ગિની-બિસાઉ"
+ },
+ "GA": {
+ "name": "ગેબન"
+ },
+ "GM": {
+ "name": "ગેમà«àª¬àª¿àª¯àª¾"
+ },
+ "GL": {
+ "name": "ગà«àª°à«€àª¨àª²à«‡àª¨à«àª¡"
+ },
+ "GR": {
+ "name": "ગà«àª°à«€àª¸"
+ },
+ "GD": {
+ "name": "ગà«àª°à«‡àª¨à«‡àª¡àª¾"
+ },
+ "GT": {
+ "name": "ગà«àªµàª¾àªŸà«‡àª®àª¾àª²àª¾"
+ },
+ "GP": {
+ "name": "ગà«àªµàª¾àª¡à«‡àª²à«‹àªª"
+ },
+ "GU": {
+ "name": "ગà«àªµàª¾àª®"
+ },
+ "GG": {
+ "name": "ગà«àªµà«‡àª°à«àª¨àª¸à«‡"
+ },
+ "GH": {
+ "name": "ઘાના"
+ },
+ "TD": {
+ "name": "ચાડ"
+ },
+ "CL": {
+ "name": "ચિલી"
+ },
+ "CN": {
+ "name": "ચીન"
+ },
+ "CZ": {
+ "name": "ચેક રીપબà«àª²àª¿àª•"
+ },
+ "JM": {
+ "name": "જમૈકા"
+ },
+ "DE": {
+ "name": "જરà«àª®àª¨à«€"
+ },
+ "JE": {
+ "name": "જરà«àª¸à«€"
+ },
+ "JP": {
+ "name": "જાપાન"
+ },
+ "DJ": {
+ "name": "જીબૌટી"
+ },
+ "GI": {
+ "name": "જીબà«àª°àª¾àª²à«àªŸàª°"
+ },
+ "JO": {
+ "name": "જોરà«àª¡àª¨"
+ },
+ "GE": {
+ "name": "જà«àª¯à«‹àª°à«àªœà«€àª¯àª¾"
+ },
+ "ZM": {
+ "name": "àªàª¾àª®à«àª¬àª¿àª¯àª¾"
+ },
+ "ZW": {
+ "name": "àªàª¿àª®à«àª¬àª¾àª¬à«àªµà«‡"
+ },
+ "TC": {
+ "name": "ટરà«àª•à«àª¸ àªàª¨à«àª¡ કૈકોસ આઇલેનà«àª¡à«àª¸"
+ },
+ "TO": {
+ "name": "ટોંગા"
+ },
+ "TK": {
+ "name": "ટોકેલાઉ"
+ },
+ "TG": {
+ "name": "ટોગો"
+ },
+ "TN": {
+ "name": "ટà«àª¯à«àª¨àª¿àª¶àª¿àª¯àª¾"
+ },
+ "DG": {
+ "name": "ડિàªàª—à«‹ ગારસિઆ"
+ },
+ "DK": {
+ "name": "ડેનમારà«àª•"
+ },
+ "DO": {
+ "name": "ડોમિનિકન રીપબà«àª²àª¿àª•"
+ },
+ "DM": {
+ "name": "ડોમિનિકા"
+ },
+ "TZ": {
+ "name": "તાંàªàª¾àª¨àª¿àª¯àª¾"
+ },
+ "TW": {
+ "name": "તાઇવાન"
+ },
+ "TJ": {
+ "name": "તાજીકિસà«àª¤àª¾àª¨"
+ },
+ "TL": {
+ "name": "તિમોર-લેસà«àª¤à«‡"
+ },
+ "TM": {
+ "name": "તà«àª°à«àª•àª®à«‡àª¨àª¿àª¸à«àª¤àª¾àª¨"
+ },
+ "TR": {
+ "name": "તà«àª°à«àª•à«€"
+ },
+ "TV": {
+ "name": "તà«àªµàª¾àª²à«"
+ },
+ "TT": {
+ "name": "તà«àª°àª¿àª¨àª¿àª¦àª¾àª¦ અને ટોબેગો"
+ },
+ "TA": {
+ "name": "તà«àª°àª¿àª¸à«àª¤àª¾àª¨ દા કà«àª¨à«àª¹àª¾"
+ },
+ "TH": {
+ "name": "થાઇલેંડ"
+ },
+ "ZA": {
+ "name": "દકà«àª·àª¿àª£ આફà«àª°àª¿àª•àª¾"
+ },
+ "KR": {
+ "name": "દકà«àª·àª¿àª£ કોરિયા"
+ },
+ "GS": {
+ "name": "દકà«àª·àª¿àª£ જà«àª¯à«‹àª°à«àªœà«€àª¯àª¾ અને દકà«àª·àª¿àª£ સેનà«àª¡àªµàª¿àªš આઇલેનà«àª¡à«àª¸"
+ },
+ "SS": {
+ "name": "દકà«àª·àª¿àª£ સà«àª¦àª¾àª¨"
+ },
+ "NE": {
+ "name": "નાઇજર"
+ },
+ "NG": {
+ "name": "નાઇજીરીયા"
+ },
+ "NA": {
+ "name": "નામિબિયા"
+ },
+ "NI": {
+ "name": "નિકારાગà«àª†"
+ },
+ "NU": {
+ "name": "નીયà«"
+ },
+ "NL": {
+ "name": "નેધરલેનà«àª¡"
+ },
+ "NP": {
+ "name": "નેપાળ"
+ },
+ "NO": {
+ "name": "નૉરà«àªµà«‡"
+ },
+ "NF": {
+ "name": "નોરફૉક આઇલેનà«àª¡"
+ },
+ "NR": {
+ "name": "નૌરà«"
+ },
+ "NC": {
+ "name": "નà«àª¯à« સેલેડોનિયા"
+ },
+ "NZ": {
+ "name": "નà«àª¯à«àªà«€àª²à«‡àª¨à«àª¡"
+ },
+ "PA": {
+ "name": "પનામા"
+ },
+ "PW": {
+ "name": "પલાઉ"
+ },
+ "EH": {
+ "name": "પશà«àªšàª¿àª®à«€ સહારા"
+ },
+ "PK": {
+ "name": "પાકિસà«àª¤àª¾àª¨"
+ },
+ "PG": {
+ "name": "પાપà«àª† નà«àª¯à«‚ ગિની"
+ },
+ "PN": {
+ "name": "પીટકૈરà«àª¨ આઇલેનà«àª¡à«àª¸"
+ },
+ "PY": {
+ "name": "પેરાગà«àªµà«‡"
+ },
+ "PE": {
+ "name": "પેરà«"
+ },
+ "PS": {
+ "name": "પેલેસà«àªŸàª¿àª¨àª¿àª¯àª¨ ટેરિટરી"
+ },
+ "PT": {
+ "name": "પોરà«àªŸà«àª—લ"
+ },
+ "PL": {
+ "name": "પોલેંડ"
+ },
+ "PR": {
+ "name": "પà«àª¯à«àª…રà«àªŸà«‹ રિકો"
+ },
+ "FI": {
+ "name": "ફિનલેનà«àª¡"
+ },
+ "PH": {
+ "name": "ફિલીપાઇનà«àª¸"
+ },
+ "FJ": {
+ "name": "ફીજી"
+ },
+ "FO": {
+ "name": "ફૅરો આઇલેનà«àª¡à«àª¸"
+ },
+ "FK": {
+ "name": "ફૉકલેનà«àª¡ આઇલેનà«àª¡à«àª¸"
+ },
+ "FR": {
+ "name": "ફà«àª°àª¾àª‚સ"
+ },
+ "GF": {
+ "name": "ફà«àª°à«‡àª‚ચ ગયાના"
+ },
+ "PF": {
+ "name": "ફà«àª°à«‡àª‚ચ પોલિનેશિયા"
+ },
+ "TF": {
+ "name": "ફà«àª°à«‡àª‚ચ સદરà«àª¨ ટેરિટરીàª"
+ },
+ "BM": {
+ "name": "બરà«àª®à«àª¡àª¾"
+ },
+ "BG": {
+ "name": "બલà«àª—ેરિયા"
+ },
+ "BS": {
+ "name": "બહામાસ"
+ },
+ "BD": {
+ "name": "બાંગà«àª²àª¾àª¦à«‡àª¶"
+ },
+ "BB": {
+ "name": "બારà«àª¬àª¾àª¡à«‹àª¸"
+ },
+ "BI": {
+ "name": "બà«àª°à«àª‚ડી"
+ },
+ "BF": {
+ "name": "બà«àª°à«àª•àª¿àª¨àª¾ ફાસો"
+ },
+ "BJ": {
+ "name": "બેનિન"
+ },
+ "BY": {
+ "name": "બેલારà«àª¸"
+ },
+ "BZ": {
+ "name": "બેલીàª"
+ },
+ "BE": {
+ "name": "બેલà«àªœà«€àª¯àª®"
+ },
+ "BH": {
+ "name": "બેહરીન"
+ },
+ "BW": {
+ "name": "બોતà«àª¸à«àªµàª¾àª¨àª¾"
+ },
+ "BO": {
+ "name": "બોલિવિયા"
+ },
+ "BA": {
+ "name": "બોસà«àª¨àª¿àª¯àª¾ અને હરà«àªà«‡àª—ોવિના"
+ },
+ "BR": {
+ "name": "બà«àª°àª¾àªàª¿àª²"
+ },
+ "IO": {
+ "name": "બà«àª°àª¿àªŸàª¿àª¶ ઇનà«àª¡àª¿àª¯àª¨ ઓશન ટેરિટરી"
+ },
+ "VG": {
+ "name": "બà«àª°àª¿àªŸàª¿àª¶ વરà«àªœàª¿àª¨ આઇલેનà«àª¡à«àª¸"
+ },
+ "BN": {
+ "name": "બà«àª°à«àª¨à«‡àª‡"
+ },
+ "IN": {
+ "name": "ભારત"
+ },
+ "BT": {
+ "name": "ભૂટાન"
+ },
+ "MN": {
+ "name": "મંગોલિયા"
+ },
+ "MO": {
+ "name": "મકાઉ SAR ચીન"
+ },
+ "MY": {
+ "name": "મલેશિયા"
+ },
+ "FM": {
+ "name": "માઇકà«àª°à«‹àª¨à«‡àª¶àª¿àª¯àª¾"
+ },
+ "MQ": {
+ "name": "મારà«àªŸà«€àª¨à«€àª•"
+ },
+ "MH": {
+ "name": "મારà«àª¶àª² આઇલેનà«àª¡à«àª¸"
+ },
+ "MV": {
+ "name": "માલદિવà«àª¸"
+ },
+ "MW": {
+ "name": "માલાવી"
+ },
+ "ML": {
+ "name": "માલી"
+ },
+ "MT": {
+ "name": "માલà«àªŸàª¾"
+ },
+ "MX": {
+ "name": "મેકà«àª¸àª¿àª•à«‹"
+ },
+ "MG": {
+ "name": "મેડાગાસà«àª•àª°"
+ },
+ "YT": {
+ "name": "મેયોટ"
+ },
+ "MK": {
+ "name": "મેસેડોનિયા"
+ },
+ "ME": {
+ "name": "મૉનà«àªŸà«‡àª‚નેગà«àª°à«‹"
+ },
+ "MS": {
+ "name": "મોંટસેરાત"
+ },
+ "MZ": {
+ "name": "મોàªàª¾àª®à«àª¬àª¿àª•"
+ },
+ "MC": {
+ "name": "મોનાકો"
+ },
+ "MU": {
+ "name": "મોરિશિયસ"
+ },
+ "MA": {
+ "name": "મોરોકà«àª•à«‹"
+ },
+ "MD": {
+ "name": "મોલડોવા"
+ },
+ "MR": {
+ "name": "મૌરિટાનિયા"
+ },
+ "MM": {
+ "name": "મà«àª¯àª¾àª‚માર (બરà«àª®àª¾)"
+ },
+ "VI": {
+ "name": "યà«.àªàª¸ વરà«àªœàª¿àª¨ આઇલેનà«àª¡à«àª¸"
+ },
+ "UA": {
+ "name": "યà«àª•à«àª°à«‡àª¨"
+ },
+ "UG": {
+ "name": "યà«àª—ાંડા"
+ },
+ "AE": {
+ "name": "યà«àª¨àª¾àª‡àªŸà«‡àª¡ આરબ અમીરાત"
+ },
+ "GB": {
+ "name": "યà«àª¨àª¾àª‡àªŸà«‡àª¡ કિંગડમ"
+ },
+ "YE": {
+ "name": "યેમેન"
+ },
+ "RW": {
+ "name": "રવાંડા"
+ },
+ "RU": {
+ "name": "રશિયા"
+ },
+ "RE": {
+ "name": "રીયà«àª¨àª¿àª¯àª¨"
+ },
+ "RO": {
+ "name": "રોમાનિયા"
+ },
+ "LU": {
+ "name": "લકà«àªàª®àª¬àª°à«àª—"
+ },
+ "LR": {
+ "name": "લાઇબેરિયા"
+ },
+ "LA": {
+ "name": "લાઓસ"
+ },
+ "LV": {
+ "name": "લાતà«àªµàª¿àª¯àª¾"
+ },
+ "LT": {
+ "name": "લિથà«àª†àª¨àª¿àª¯àª¾"
+ },
+ "LY": {
+ "name": "લિબિયા"
+ },
+ "LB": {
+ "name": "લેબનોન"
+ },
+ "LS": {
+ "name": "લેસોથો"
+ },
+ "LI": {
+ "name": "લૈચટેંસà«àªŸà«‡àª‡àª¨"
+ },
+ "VU": {
+ "name": "વાનà«àª†àª¤à«"
+ },
+ "VN": {
+ "name": "વિયેતનામ"
+ },
+ "VA": {
+ "name": "વેટિકન સિટી"
+ },
+ "VE": {
+ "name": "વેનેàªà«àªàª²àª¾"
+ },
+ "WF": {
+ "name": "વૉલિસ àªàª‚ડ ફà«àª¯à«àªšà«àª¨àª¾"
+ },
+ "SC": {
+ "name": "શેશેલà«àª¸"
+ },
+ "LK": {
+ "name": "શà«àª°à«€àª²àª‚કા"
+ },
+ "US": {
+ "name": "સંયà«àª•àª¤ રાજà«àª¯ અમેરિકા"
+ },
+ "UM": {
+ "name": "સંયà«àª•à«àª¤ રાજà«àª¯ આઉટલાઇંગ આયલેનà«àª¡à«àª¸"
+ },
+ "WS": {
+ "name": "સમોઆ"
+ },
+ "RS": {
+ "name": "સરà«àª¬àª¿àª¯àª¾"
+ },
+ "SA": {
+ "name": "સાઉદી અરેબિયા"
+ },
+ "ST": {
+ "name": "સાઓ ટૉમ અને પà«àª°àª¿àª‚સિપે"
+ },
+ "CY": {
+ "name": "સાયપà«àª°àª¸"
+ },
+ "SG": {
+ "name": "સિંગાપà«àª°"
+ },
+ "SX": {
+ "name": "સિંટ મારà«àªŸà«‡àª¨"
+ },
+ "SL": {
+ "name": "સીàªàª°àª¾ લેઓન"
+ },
+ "SY": {
+ "name": "સીરિયા"
+ },
+ "SD": {
+ "name": "સà«àª¦àª¾àª¨"
+ },
+ "SR": {
+ "name": "સà«àª°à«€àª¨àª¾àª®"
+ },
+ "SM": {
+ "name": "સૅન મેરિનો"
+ },
+ "KN": {
+ "name": "સેંટ કિટà«àª¸ àªàª‚ડ નેવિસ"
+ },
+ "PM": {
+ "name": "સેંટ પીàªàª°à«‡ àªàª¨à«àª¡ મિકીલોન"
+ },
+ "BL": {
+ "name": "સેંટ બારà«àª¥àª²à«‡àª®à«€"
+ },
+ "MF": {
+ "name": "સેંટ મારà«àªŸàª¿àª¨"
+ },
+ "LC": {
+ "name": "સેંટ લà«àª¸àª¿àª¯àª¾"
+ },
+ "SH": {
+ "name": "સેંટ હેલેના"
+ },
+ "CF": {
+ "name": "સેંટà«àª°àª² આફà«àª°àª¿àª•àª¨ રીપબà«àª²àª¿àª•"
+ },
+ "SN": {
+ "name": "સેનેગલ"
+ },
+ "VC": {
+ "name": "સેનà«àªŸ વિનà«àª¸à«‡àª¨à«àªŸ àªàª¨à«àª¡ ગà«àª°à«‡àª¨à«‡àª¡à«€àª¨à«àª¸"
+ },
+ "SO": {
+ "name": "સોમાલિયા"
+ },
+ "SB": {
+ "name": "સોલોમન આઇલેનà«àª¡à«àª¸"
+ },
+ "ES": {
+ "name": "સà«àªªà«‡àª¨"
+ },
+ "EA": {
+ "name": "સà«àª¯à«àªŸàª¾ અને મેલિલા"
+ },
+ "SK": {
+ "name": "સà«àª²à«‹àªµà«‡àª•àª¿àª¯àª¾"
+ },
+ "SI": {
+ "name": "સà«àª²à«‹àªµà«‡àª¨àª¿àª¯àª¾"
+ },
+ "SZ": {
+ "name": "સà«àªµàª¾àªàª¿àª²à«‡àª¨à«àª¡"
+ },
+ "SJ": {
+ "name": "સà«àªµàª¾àª²àª¬àª°à«àª¡ àªàª¨à«àª¡ જેન મેયન"
+ },
+ "CH": {
+ "name": "સà«àªµàª¿àªŸà«àªàª°à«àª²à«…નà«àª¡"
+ },
+ "SE": {
+ "name": "સà«àªµà«€àª¡àª¨"
+ },
+ "HU": {
+ "name": "હંગેરી"
+ },
+ "HT": {
+ "name": "હૈતિ"
+ },
+ "HK": {
+ "name": "હોંગકોંગ SAR ચીન"
+ },
+ "HN": {
+ "name": "હોનà«àª¡à«àª°àª¸"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/guz.json b/library/intl/resources/country/guz.json
new file mode 100644
index 000000000..e57db8007
--- /dev/null
+++ b/library/intl/resources/country/guz.json
@@ -0,0 +1,761 @@
+{
+ "ZA": {
+ "name": "Afrika Kusini"
+ },
+ "AF": {
+ "name": "Afuganistani"
+ },
+ "IS": {
+ "name": "Aislandi"
+ },
+ "AR": {
+ "name": "Ajentina"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljeria"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua na Barbuda"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "IE": {
+ "name": "Ayalandi"
+ },
+ "AZ": {
+ "name": "Azabajani"
+ },
+ "BB": {
+ "name": "Babadosi"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BH": {
+ "name": "Bahareni"
+ },
+ "BD": {
+ "name": "Bangladeshi"
+ },
+ "BY": {
+ "name": "Belarusi"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia na Hezegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazili"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BF": {
+ "name": "Bukinafaso"
+ },
+ "MG": {
+ "name": "Bukini"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denmaki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekwado"
+ },
+ "SV": {
+ "name": "Elsavado"
+ },
+ "IO": {
+ "name": "Eneo la Uingereza katika Bahari Hindi"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "AE": {
+ "name": "Falme za Kiarabu"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipino"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Ginebisau"
+ },
+ "GQ": {
+ "name": "Ginekweta"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grinlandi"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GP": {
+ "name": "Gwadelupe"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GF": {
+ "name": "Gwiyana ya Ufaransa"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ES": {
+ "name": "Hispania"
+ },
+ "HN": {
+ "name": "Hondurasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungaria"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israeli"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "CF": {
+ "name": "Jamhuri ya Afrika ya Kati"
+ },
+ "CZ": {
+ "name": "Jamhuri ya Cheki"
+ },
+ "DO": {
+ "name": "Jamhuri ya Dominika"
+ },
+ "CD": {
+ "name": "Jamhuri ya Kidemokrasia ya Kongo"
+ },
+ "JP": {
+ "name": "Japani"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibralta"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "GE": {
+ "name": "Jojia"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kameruni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katari"
+ },
+ "KZ": {
+ "name": "Kazakistani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CV": {
+ "name": "Kepuvede"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizistani"
+ },
+ "NF": {
+ "name": "Kisiwa cha Norfok"
+ },
+ "CI": {
+ "name": "Kodivaa"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komoro"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "HR": {
+ "name": "Korasia"
+ },
+ "KP": {
+ "name": "Korea Kaskazini"
+ },
+ "KR": {
+ "name": "Korea Kusini"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CY": {
+ "name": "Kuprosi"
+ },
+ "KW": {
+ "name": "Kuwaiti"
+ },
+ "LA": {
+ "name": "Laosi"
+ },
+ "LU": {
+ "name": "Lasembagi"
+ },
+ "LV": {
+ "name": "Lativia"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Lishenteni"
+ },
+ "LT": {
+ "name": "Litwania"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malesia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "US": {
+ "name": "Marekani"
+ },
+ "MQ": {
+ "name": "Martiniki"
+ },
+ "MK": {
+ "name": "Masedonia"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "FM": {
+ "name": "Mikronesia"
+ },
+ "EG": {
+ "name": "Misri"
+ },
+ "MV": {
+ "name": "Modivu"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrati"
+ },
+ "MU": {
+ "name": "Morisi"
+ },
+ "MR": {
+ "name": "Moritania"
+ },
+ "MA": {
+ "name": "Moroko"
+ },
+ "MZ": {
+ "name": "Msumbiji"
+ },
+ "MM": {
+ "name": "Myama"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "NE": {
+ "name": "Nijeri"
+ },
+ "NG": {
+ "name": "Nijeria"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norwe"
+ },
+ "NC": {
+ "name": "Nyukaledonia"
+ },
+ "NZ": {
+ "name": "Nyuzilandi"
+ },
+ "OM": {
+ "name": "Omani"
+ },
+ "PK": {
+ "name": "Pakistani"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua"
+ },
+ "PY": {
+ "name": "Paragwai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkairni"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PF": {
+ "name": "Polinesia ya Ufaransa"
+ },
+ "PR": {
+ "name": "Pwetoriko"
+ },
+ "RE": {
+ "name": "Riyunioni"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SM": {
+ "name": "Samarino"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa ya Marekani"
+ },
+ "SH": {
+ "name": "Santahelena"
+ },
+ "KN": {
+ "name": "Santakitzi na Nevis"
+ },
+ "LC": {
+ "name": "Santalusia"
+ },
+ "PM": {
+ "name": "Santapieri na Mikeloni"
+ },
+ "VC": {
+ "name": "Santavisenti na Grenadini"
+ },
+ "ST": {
+ "name": "Sao Tome na Principe"
+ },
+ "SA": {
+ "name": "Saudi"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Shelisheli"
+ },
+ "SL": {
+ "name": "Siera Leoni"
+ },
+ "SG": {
+ "name": "Singapoo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "LK": {
+ "name": "Sirilanka"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SR": {
+ "name": "Surinamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandi"
+ },
+ "TW": {
+ "name": "Taiwani"
+ },
+ "TJ": {
+ "name": "Tajikistani"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TL": {
+ "name": "Timori ya Mashariki"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad na Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turukimenistani"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "IR": {
+ "name": "Uajemi"
+ },
+ "BE": {
+ "name": "Ubelgiji"
+ },
+ "FR": {
+ "name": "Ufaransa"
+ },
+ "FI": {
+ "name": "Ufini"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "GR": {
+ "name": "Ugiriki"
+ },
+ "ET": {
+ "name": "Uhabeshi"
+ },
+ "NL": {
+ "name": "Uholanzi"
+ },
+ "GB": {
+ "name": "Uingereza"
+ },
+ "DE": {
+ "name": "Ujerumani"
+ },
+ "PS": {
+ "name": "Ukingo wa Magharibi na Ukanda wa Gaza wa Palestina"
+ },
+ "UA": {
+ "name": "Ukraini"
+ },
+ "PT": {
+ "name": "Ureno"
+ },
+ "UY": {
+ "name": "Urugwai"
+ },
+ "RU": {
+ "name": "Urusi"
+ },
+ "SZ": {
+ "name": "Uswazi"
+ },
+ "SE": {
+ "name": "Uswidi"
+ },
+ "CH": {
+ "name": "Uswisi"
+ },
+ "TR": {
+ "name": "Uturuki"
+ },
+ "UZ": {
+ "name": "Uzibekistani"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietinamu"
+ },
+ "CK": {
+ "name": "Visiwa vya Cook"
+ },
+ "FK": {
+ "name": "Visiwa vya Falkland"
+ },
+ "KY": {
+ "name": "Visiwa vya Kayman"
+ },
+ "MP": {
+ "name": "Visiwa vya Mariana vya Kaskazini"
+ },
+ "MH": {
+ "name": "Visiwa vya Marshal"
+ },
+ "SB": {
+ "name": "Visiwa vya Solomon"
+ },
+ "TC": {
+ "name": "Visiwa vya Turki na Kaiko"
+ },
+ "VI": {
+ "name": "Visiwa vya Virgin vya Marekani"
+ },
+ "VG": {
+ "name": "Visiwa vya Virgin vya Uingereza"
+ },
+ "WF": {
+ "name": "Walis na Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "JO": {
+ "name": "Yordani"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ha.json b/library/intl/resources/country/ha.json
new file mode 100644
index 000000000..0c4103141
--- /dev/null
+++ b/library/intl/resources/country/ha.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afaganistan"
+ },
+ "ZA": {
+ "name": "Afirka Ta Kudu"
+ },
+ "CI": {
+ "name": "Aibari Kwas"
+ },
+ "IS": {
+ "name": "Aisalan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albaniya"
+ },
+ "DZ": {
+ "name": "Aljeriya"
+ },
+ "US": {
+ "name": "Amurka"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AI": {
+ "name": "Angila"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigwa da Barbuba"
+ },
+ "AR": {
+ "name": "Arjantiniya"
+ },
+ "AM": {
+ "name": "Armeniya"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "IE": {
+ "name": "Ayalan"
+ },
+ "AZ": {
+ "name": "Azarbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Baharan"
+ },
+ "BD": {
+ "name": "Bangiladas"
+ },
+ "VU": {
+ "name": "Banuwatu"
+ },
+ "BB": {
+ "name": "Barbadas"
+ },
+ "BM": {
+ "name": "Barmuda"
+ },
+ "BW": {
+ "name": "Baswana"
+ },
+ "VA": {
+ "name": "Batikan"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgiyom"
+ },
+ "BZ": {
+ "name": "Beliz"
+ },
+ "VE": {
+ "name": "Benezuwela"
+ },
+ "BJ": {
+ "name": "Binin"
+ },
+ "BR": {
+ "name": "Birazil"
+ },
+ "GB": {
+ "name": "Birtaniya"
+ },
+ "VN": {
+ "name": "Biyetinam"
+ },
+ "BO": {
+ "name": "Bolibiya"
+ },
+ "BA": {
+ "name": "Bosniya Harzagobina"
+ },
+ "BG": {
+ "name": "Bulgariya"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "MM": {
+ "name": "Burma, Miyamar"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BN": {
+ "name": "Burune"
+ },
+ "BT": {
+ "name": "Butan"
+ },
+ "TD": {
+ "name": "Cadi"
+ },
+ "CN": {
+ "name": "Caina, Sin"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "CL": {
+ "name": "Cayile"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekwador"
+ },
+ "SV": {
+ "name": "El Salbador"
+ },
+ "ER": {
+ "name": "Eritireya"
+ },
+ "EE": {
+ "name": "Estoniya"
+ },
+ "FR": {
+ "name": "Faransa"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipin"
+ },
+ "FI": {
+ "name": "Finlan"
+ },
+ "PF": {
+ "name": "Folinesiya Ta Faransa"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambiya"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GN": {
+ "name": "Gini"
+ },
+ "GW": {
+ "name": "Gini Bisau"
+ },
+ "GF": {
+ "name": "Gini Ta Faransa"
+ },
+ "GQ": {
+ "name": "Gini Ta Ikwaita"
+ },
+ "GR": {
+ "name": "Girka"
+ },
+ "GD": {
+ "name": "Girnada"
+ },
+ "GL": {
+ "name": "Grinlan"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GP": {
+ "name": "Gwadaluf"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatamala"
+ },
+ "ET": {
+ "name": "Habasha"
+ },
+ "AE": {
+ "name": "HaÉ—aÉ—É—iyar Daular Larabawa"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "NL": {
+ "name": "Holan"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungari"
+ },
+ "IN": {
+ "name": "Indiya"
+ },
+ "ID": {
+ "name": "Indunusiya"
+ },
+ "IQ": {
+ "name": "Iraƙi"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IT": {
+ "name": "Italiya"
+ },
+ "IL": {
+ "name": "Iziraʼila"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "CF": {
+ "name": "Jamhuriyar Afirka Ta Tsakiya"
+ },
+ "CZ": {
+ "name": "Jamhuriyar Cak"
+ },
+ "CD": {
+ "name": "Jamhuriyar DimokuraÉ—iyyar Kongo"
+ },
+ "DO": {
+ "name": "Jamhuriyar Dominika"
+ },
+ "DE": {
+ "name": "Jamus"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibaraltar"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "GE": {
+ "name": "Jiwarjiya"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "NC": {
+ "name": "Kaledoniya Sabuwa"
+ },
+ "CM": {
+ "name": "Kamaru"
+ },
+ "KH": {
+ "name": "Kambodiya"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "KZ": {
+ "name": "Kazakistan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KG": {
+ "name": "Kirgizistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CO": {
+ "name": "Kolambiya"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "KP": {
+ "name": "Koreya Ta Arewa"
+ },
+ "KR": {
+ "name": "Koreya Ta Kudu"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "HR": {
+ "name": "Kurowaishiya"
+ },
+ "KM": {
+ "name": "Kwamoras"
+ },
+ "CR": {
+ "name": "Kwasta Rika"
+ },
+ "QA": {
+ "name": "Kwatar"
+ },
+ "KW": {
+ "name": "Kwiyat"
+ },
+ "CU": {
+ "name": "Kyuba"
+ },
+ "SA": {
+ "name": "Ƙasar Makka"
+ },
+ "LB": {
+ "name": "Labanan"
+ },
+ "LR": {
+ "name": "Laberiya"
+ },
+ "LV": {
+ "name": "latibiya"
+ },
+ "LA": {
+ "name": "Lawas"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LY": {
+ "name": "Libiya"
+ },
+ "LI": {
+ "name": "Licansitan"
+ },
+ "LT": {
+ "name": "Lituweniya"
+ },
+ "LU": {
+ "name": "Lukusambur"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MX": {
+ "name": "Makasiko"
+ },
+ "MY": {
+ "name": "Malaisiya"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldibi"
+ },
+ "MD": {
+ "name": "Maldoba"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MN": {
+ "name": "Mangoliya"
+ },
+ "MS": {
+ "name": "Manserati"
+ },
+ "MA": {
+ "name": "Maroko"
+ },
+ "MQ": {
+ "name": "Martinik"
+ },
+ "EG": {
+ "name": "Masar, Misira"
+ },
+ "MK": {
+ "name": "Masedoniya"
+ },
+ "YT": {
+ "name": "Mayoti"
+ },
+ "FM": {
+ "name": "Mikuronesiya"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MR": {
+ "name": "Moritaniya"
+ },
+ "MU": {
+ "name": "Moritus"
+ },
+ "MZ": {
+ "name": "Mozambik"
+ },
+ "NG": {
+ "name": "Najeriya"
+ },
+ "NA": {
+ "name": "Namibiya"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nefal"
+ },
+ "NE": {
+ "name": "Nijar"
+ },
+ "NI": {
+ "name": "Nikaraguwa"
+ },
+ "NU": {
+ "name": "Niyu"
+ },
+ "NO": {
+ "name": "Norwe"
+ },
+ "NZ": {
+ "name": "Nuzilan"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "AU": {
+ "name": "Ostareliya"
+ },
+ "AT": {
+ "name": "Ostiriya"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PS": {
+ "name": "PalasÉ—inu"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papuwa Nugini"
+ },
+ "PY": {
+ "name": "Paragai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitakarin"
+ },
+ "PL": {
+ "name": "Polan"
+ },
+ "PR": {
+ "name": "Porto Riko"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "RU": {
+ "name": "Rasha"
+ },
+ "RE": {
+ "name": "Rawuniyan"
+ },
+ "RO": {
+ "name": "Romaniya"
+ },
+ "RW": {
+ "name": "Ruwanda"
+ },
+ "SC": {
+ "name": "Saishal"
+ },
+ "SL": {
+ "name": "Salewo"
+ },
+ "WS": {
+ "name": "Samowa"
+ },
+ "AS": {
+ "name": "Samowa Ta Amurka"
+ },
+ "VC": {
+ "name": "San Binsan Da Girnadin"
+ },
+ "SH": {
+ "name": "San Helena"
+ },
+ "KN": {
+ "name": "San Kiti Da Nebis"
+ },
+ "LC": {
+ "name": "San Lusiya"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "PM": {
+ "name": "San Piyar Da Mikelan"
+ },
+ "ST": {
+ "name": "Sawo Tome Da Paransip"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "CY": {
+ "name": "Sifurus"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SN": {
+ "name": "Sinigal"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "ES": {
+ "name": "Sipen"
+ },
+ "LK": {
+ "name": "Siri Lanka"
+ },
+ "SO": {
+ "name": "Somaliya"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SK": {
+ "name": "Sulobakiya"
+ },
+ "SI": {
+ "name": "Sulobeniya"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SZ": {
+ "name": "Suwazilan"
+ },
+ "SE": {
+ "name": "Suwedan"
+ },
+ "CH": {
+ "name": "Suwizalan"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SY": {
+ "name": "Sham, Siriya"
+ },
+ "TH": {
+ "name": "Tailan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TK": {
+ "name": "Takelau"
+ },
+ "TO": {
+ "name": "Tanga"
+ },
+ "TZ": {
+ "name": "Tanzaniya"
+ },
+ "TL": {
+ "name": "Timor Ta Gabas"
+ },
+ "TT": {
+ "name": "Tirinidad Da Tobago"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TV": {
+ "name": "Tubalu"
+ },
+ "TN": {
+ "name": "Tunisiya"
+ },
+ "TC": {
+ "name": "Turkis Da Tsibiran Kaikwas"
+ },
+ "TR": {
+ "name": "Turkiyya"
+ },
+ "TM": {
+ "name": "Turkumenistan"
+ },
+ "VI": {
+ "name": "Tsibiran Birjin Ta Amurka"
+ },
+ "FK": {
+ "name": "Tsibiran Falkilan"
+ },
+ "KY": {
+ "name": "Tsibiran Kaiman"
+ },
+ "CV": {
+ "name": "Tsibiran Kap Barde"
+ },
+ "CK": {
+ "name": "Tsibiran Kuku"
+ },
+ "MP": {
+ "name": "Tsibiran Mariyana Na Arewa"
+ },
+ "MH": {
+ "name": "Tsibiran Marshal"
+ },
+ "SB": {
+ "name": "Tsibiran Salaman"
+ },
+ "VG": {
+ "name": "Tsibirin Birjin Na Birtaniya"
+ },
+ "NF": {
+ "name": "Tsibirin Narfalk"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UZ": {
+ "name": "Uzubekistan"
+ },
+ "WF": {
+ "name": "Walis Da Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yamal"
+ },
+ "IO": {
+ "name": "Yankin Birtaniya Na Tekun Indiya"
+ },
+ "UG": {
+ "name": "Yuganda"
+ },
+ "UA": {
+ "name": "Yukaran"
+ },
+ "UY": {
+ "name": "Yurugai"
+ },
+ "ZM": {
+ "name": "Zambiya"
+ },
+ "ZW": {
+ "name": "Zimbabuwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/he.json b/library/intl/resources/country/he.json
new file mode 100644
index 000000000..bf9160592
--- /dev/null
+++ b/library/intl/resources/country/he.json
@@ -0,0 +1,761 @@
+{
+ "UG": {
+ "name": "×וגנדה"
+ },
+ "UZ": {
+ "name": "×וזבקיסטן"
+ },
+ "AT": {
+ "name": "×וסטריה"
+ },
+ "AU": {
+ "name": "×וסטרליה"
+ },
+ "UA": {
+ "name": "×וקר××™× ×”"
+ },
+ "UY": {
+ "name": "×ורוגוו××™"
+ },
+ "AZ": {
+ "name": "×זרבייג׳ן"
+ },
+ "CX": {
+ "name": "××™ ×—×’ המולד"
+ },
+ "AE": {
+ "name": "×יחוד ×”×מירויות הערביות"
+ },
+ "IT": {
+ "name": "×יטליה"
+ },
+ "AX": {
+ "name": "××™×™ ×ולנד"
+ },
+ "BS": {
+ "name": "××™×™ בה×מה"
+ },
+ "VI": {
+ "name": "××™×™ הבתולה ×”×מריקניי×"
+ },
+ "VG": {
+ "name": "××™×™ הבתולה הבריטיי×"
+ },
+ "WF": {
+ "name": "××™×™ ווליס ופוטונה"
+ },
+ "TC": {
+ "name": "××™×™ טורקס וק×יקוס"
+ },
+ "MP": {
+ "name": "××™×™ מרי×× ×” הצפוניי×"
+ },
+ "MH": {
+ "name": "××™×™ מרשל"
+ },
+ "NF": {
+ "name": "××™×™ נורפוק"
+ },
+ "SC": {
+ "name": "××™×™ סיישל"
+ },
+ "FO": {
+ "name": "××™×™ פ×רו"
+ },
+ "FK": {
+ "name": "××™×™ פוקלנד"
+ },
+ "PN": {
+ "name": "××™×™ פיטקרן"
+ },
+ "CK": {
+ "name": "××™×™ קוק"
+ },
+ "CC": {
+ "name": "××™×™ קוקוס (קילינג)"
+ },
+ "KY": {
+ "name": "××™×™ קיימן"
+ },
+ "SB": {
+ "name": "××™×™ שלמה"
+ },
+ "UM": {
+ "name": "××™×™× ×œ×—×•×£ ×רצות הברית"
+ },
+ "ID": {
+ "name": "×ינדונזיה"
+ },
+ "IS": {
+ "name": "×יסלנד"
+ },
+ "IR": {
+ "name": "×יר×ן"
+ },
+ "IE": {
+ "name": "×ירלנד"
+ },
+ "SV": {
+ "name": "×ל סלבדור"
+ },
+ "AL": {
+ "name": "×לבניה"
+ },
+ "DZ": {
+ "name": "×לג׳יריה"
+ },
+ "AO": {
+ "name": "×נגולה"
+ },
+ "AI": {
+ "name": "×נגילה"
+ },
+ "AD": {
+ "name": "×נדורה"
+ },
+ "AQ": {
+ "name": "×נט×רקטיקה"
+ },
+ "AG": {
+ "name": "×נטיגו××” וברבודה"
+ },
+ "EE": {
+ "name": "×סטוניה"
+ },
+ "AF": {
+ "name": "×פגניסטן"
+ },
+ "EC": {
+ "name": "×קוודור"
+ },
+ "AR": {
+ "name": "×רגנטינה"
+ },
+ "AW": {
+ "name": "×רובה"
+ },
+ "ER": {
+ "name": "×ריתרי××”"
+ },
+ "AM": {
+ "name": "×רמניה"
+ },
+ "US": {
+ "name": "×רצות הברית"
+ },
+ "ET": {
+ "name": "×תיופיה"
+ },
+ "BT": {
+ "name": "בהוטן"
+ },
+ "BW": {
+ "name": "בוטסוו×× ×”"
+ },
+ "BG": {
+ "name": "בולגריה"
+ },
+ "BO": {
+ "name": "בוליביה"
+ },
+ "BA": {
+ "name": "בוסניה והרצגובינה"
+ },
+ "BI": {
+ "name": "בורונדי"
+ },
+ "BF": {
+ "name": "בורקינה פ×סו"
+ },
+ "BH": {
+ "name": "בחריין"
+ },
+ "BY": {
+ "name": "בל×רוס"
+ },
+ "BE": {
+ "name": "בלגיה"
+ },
+ "BZ": {
+ "name": "בליז"
+ },
+ "BD": {
+ "name": "בנגלדש"
+ },
+ "BJ": {
+ "name": "בנין"
+ },
+ "BB": {
+ "name": "ברבדוס"
+ },
+ "BN": {
+ "name": "ברוניי"
+ },
+ "BR": {
+ "name": "ברזיל"
+ },
+ "BM": {
+ "name": "ברמודה"
+ },
+ "GS": {
+ "name": "ג׳ורג׳יה הדרומית ו××™×™ סנדוויץ׳ הדרומיי×"
+ },
+ "DJ": {
+ "name": "ג׳יבוטי"
+ },
+ "JM": {
+ "name": "ג׳מייקה"
+ },
+ "JE": {
+ "name": "ג׳רסי"
+ },
+ "GA": {
+ "name": "×’×בון"
+ },
+ "GE": {
+ "name": "×’×ורגיה"
+ },
+ "GH": {
+ "name": "×’×× ×”"
+ },
+ "GT": {
+ "name": "גו×טמלה"
+ },
+ "GU": {
+ "name": "גו××"
+ },
+ "GP": {
+ "name": "גוו×דלופ"
+ },
+ "GY": {
+ "name": "×’×™×× ×”"
+ },
+ "GF": {
+ "name": "×’×™×× ×” הצרפתית"
+ },
+ "GI": {
+ "name": "גיברלטר"
+ },
+ "GN": {
+ "name": "×’×™× ×™××”"
+ },
+ "GQ": {
+ "name": "×’×™× ×™××” המשוונית"
+ },
+ "GW": {
+ "name": "×’×™× ×™××”-ביס×ו"
+ },
+ "GM": {
+ "name": "גמביה"
+ },
+ "GL": {
+ "name": "גרינלנד"
+ },
+ "DE": {
+ "name": "גרמניה"
+ },
+ "GD": {
+ "name": "גרנדה"
+ },
+ "GG": {
+ "name": "גרנסי"
+ },
+ "DM": {
+ "name": "דומיניקה"
+ },
+ "DG": {
+ "name": "דייגו גרסיה"
+ },
+ "DK": {
+ "name": "דנמרק"
+ },
+ "ZA": {
+ "name": "×“×¨×•× ×פריקה"
+ },
+ "SS": {
+ "name": "×“×¨×•× ×¡×•×“×Ÿ"
+ },
+ "AC": {
+ "name": "×”××™ ×סנשן"
+ },
+ "IM": {
+ "name": "×”××™ מ×ן"
+ },
+ "HT": {
+ "name": "×”×יטי"
+ },
+ "MV": {
+ "name": "×”××™×™× ×”×ž×œ×“×™×‘×™×™×"
+ },
+ "IC": {
+ "name": "×”××™×™× ×”×§× ×¨×™×™×"
+ },
+ "BQ": {
+ "name": "×”××™×™× ×”×§×¨×™×‘×™×™× ×”×”×•×œ× ×“×™×™×"
+ },
+ "IN": {
+ "name": "הודו"
+ },
+ "VA": {
+ "name": "הוותיקן"
+ },
+ "NL": {
+ "name": "הולנד"
+ },
+ "HK": {
+ "name": "הונג קונג - מחוז מנהלי מיוחד של סין"
+ },
+ "HU": {
+ "name": "הונגריה"
+ },
+ "HN": {
+ "name": "הונדורס"
+ },
+ "GB": {
+ "name": "הממלכה המ×וחדת"
+ },
+ "DO": {
+ "name": "הרפובליקה הדומיניקנית"
+ },
+ "CF": {
+ "name": "הרפובליקה של מרכז ×פריקה"
+ },
+ "PS": {
+ "name": "×”×©×˜×—×™× ×”×¤×œ×¡×˜×™× ×™×™×"
+ },
+ "VN": {
+ "name": "וייטנ××"
+ },
+ "VU": {
+ "name": "ונו×טו"
+ },
+ "VE": {
+ "name": "ונצו×לה"
+ },
+ "ZW": {
+ "name": "זימב×בווה"
+ },
+ "ZM": {
+ "name": "זמביה"
+ },
+ "CI": {
+ "name": "חוף השנהב"
+ },
+ "TJ": {
+ "name": "טג׳יקיסטן"
+ },
+ "TV": {
+ "name": "טובלו"
+ },
+ "TG": {
+ "name": "טוגו"
+ },
+ "TO": {
+ "name": "טונגה"
+ },
+ "TK": {
+ "name": "טוקל×ו"
+ },
+ "TR": {
+ "name": "טורקיה"
+ },
+ "TM": {
+ "name": "טורקמניסטן"
+ },
+ "TW": {
+ "name": "טייוו×ן"
+ },
+ "TL": {
+ "name": "טימור לסטה"
+ },
+ "TZ": {
+ "name": "טנזניה"
+ },
+ "IO": {
+ "name": "טריטוריה בריטית ב×וקי×נוס ההודי"
+ },
+ "TF": {
+ "name": "טריטוריות דרומיות של צרפת"
+ },
+ "TT": {
+ "name": "טרינידד וטובגו"
+ },
+ "TA": {
+ "name": "טריסטן דה קונה"
+ },
+ "GR": {
+ "name": "יוון"
+ },
+ "JP": {
+ "name": "יפן"
+ },
+ "JO": {
+ "name": "ירדן"
+ },
+ "IL": {
+ "name": "ישר×ל"
+ },
+ "KW": {
+ "name": "כווית"
+ },
+ "CV": {
+ "name": "כף ורדה"
+ },
+ "LA": {
+ "name": "ל×וס"
+ },
+ "LB": {
+ "name": "לבנון"
+ },
+ "LY": {
+ "name": "לוב"
+ },
+ "LU": {
+ "name": "לוקסמבורג"
+ },
+ "LV": {
+ "name": "לטביה"
+ },
+ "LR": {
+ "name": "ליבריה"
+ },
+ "LT": {
+ "name": "ליט×"
+ },
+ "LI": {
+ "name": "ליכטנשטיין"
+ },
+ "LS": {
+ "name": "לסוטו"
+ },
+ "MR": {
+ "name": "מ×וריטניה"
+ },
+ "MU": {
+ "name": "מ×וריציוס"
+ },
+ "YT": {
+ "name": "מ×יוט"
+ },
+ "ML": {
+ "name": "מ×לי"
+ },
+ "MG": {
+ "name": "מדגסקר"
+ },
+ "MZ": {
+ "name": "מוזמביק"
+ },
+ "MD": {
+ "name": "מולדובה"
+ },
+ "MN": {
+ "name": "מונגוליה"
+ },
+ "ME": {
+ "name": "מונטנגרו"
+ },
+ "MS": {
+ "name": "מונסר×ט"
+ },
+ "MC": {
+ "name": "מונקו"
+ },
+ "MM": {
+ "name": "מי×נמ×ר (בורמה)‎"
+ },
+ "FM": {
+ "name": "מיקרונזיה"
+ },
+ "MW": {
+ "name": "מל×ווי"
+ },
+ "MY": {
+ "name": "מלזיה"
+ },
+ "MT": {
+ "name": "מלטה"
+ },
+ "EG": {
+ "name": "מצרי×"
+ },
+ "MO": {
+ "name": "מק×ו - מחוז מנהלי מיוחד של סין"
+ },
+ "MK": {
+ "name": "מקדוניה"
+ },
+ "MX": {
+ "name": "מקסיקו"
+ },
+ "MA": {
+ "name": "מרוקו"
+ },
+ "MQ": {
+ "name": "מרטיניק"
+ },
+ "NR": {
+ "name": "× ×ורו"
+ },
+ "NO": {
+ "name": "נורווגיה"
+ },
+ "NG": {
+ "name": "ניגריה"
+ },
+ "NZ": {
+ "name": "ניו זילנד"
+ },
+ "NU": {
+ "name": "ניווה"
+ },
+ "NE": {
+ "name": "ניז׳ר"
+ },
+ "NI": {
+ "name": "ניקרגו××”"
+ },
+ "NA": {
+ "name": "נמיביה"
+ },
+ "NP": {
+ "name": "נפ×ל"
+ },
+ "ST": {
+ "name": "ס×ו טומה ופרינסיפה"
+ },
+ "EA": {
+ "name": "ס×וטה ומלייה"
+ },
+ "EH": {
+ "name": "סהרה המערבית"
+ },
+ "SD": {
+ "name": "סודן"
+ },
+ "SZ": {
+ "name": "סווזילנד"
+ },
+ "SJ": {
+ "name": "סוולב×רד וי×ן מ×יין"
+ },
+ "SO": {
+ "name": "סומליה"
+ },
+ "SY": {
+ "name": "סוריה"
+ },
+ "SR": {
+ "name": "סורינ×"
+ },
+ "SL": {
+ "name": "סיירה ל×ונה"
+ },
+ "CN": {
+ "name": "סין"
+ },
+ "SG": {
+ "name": "סינגפור"
+ },
+ "SX": {
+ "name": "סינט מ×רטן"
+ },
+ "SI": {
+ "name": "סלובניה"
+ },
+ "SK": {
+ "name": "סלובקיה"
+ },
+ "WS": {
+ "name": "סמו××”"
+ },
+ "AS": {
+ "name": "סמו××” ×”×מריקנית"
+ },
+ "SM": {
+ "name": "סן מרינו"
+ },
+ "SN": {
+ "name": "סנגל"
+ },
+ "BL": {
+ "name": "סנט ברתולומי×ו"
+ },
+ "SH": {
+ "name": "סנט הלנה"
+ },
+ "VC": {
+ "name": "סנט וינסנט והגרנדיני×"
+ },
+ "LC": {
+ "name": "סנט לוסיה"
+ },
+ "MF": {
+ "name": "סנט מרטין"
+ },
+ "PM": {
+ "name": "סנט פייר ומיקלון"
+ },
+ "KN": {
+ "name": "סנט קיטס ונוויס"
+ },
+ "ES": {
+ "name": "ספרד"
+ },
+ "RS": {
+ "name": "סרביה"
+ },
+ "LK": {
+ "name": "סרי לנקה"
+ },
+ "OM": {
+ "name": "עומ×ן"
+ },
+ "IQ": {
+ "name": "עיר×ק"
+ },
+ "SA": {
+ "name": "ערב הסעודית"
+ },
+ "PW": {
+ "name": "פ×ל×ו"
+ },
+ "PL": {
+ "name": "פולין"
+ },
+ "PF": {
+ "name": "פולינזיה הצרפתית"
+ },
+ "PR": {
+ "name": "פורטו ריקו"
+ },
+ "PT": {
+ "name": "פורטוגל"
+ },
+ "FJ": {
+ "name": "פיג׳י"
+ },
+ "PH": {
+ "name": "פיליפיני×"
+ },
+ "FI": {
+ "name": "פינלנד"
+ },
+ "PA": {
+ "name": "פנמה"
+ },
+ "PG": {
+ "name": "פפו××” ×’×™× ×™××” החדשה"
+ },
+ "PK": {
+ "name": "פקיסטן"
+ },
+ "PY": {
+ "name": "פרגוו××™"
+ },
+ "PE": {
+ "name": "פרו"
+ },
+ "TD": {
+ "name": "צ׳×ד"
+ },
+ "CL": {
+ "name": "צ׳ילה"
+ },
+ "CZ": {
+ "name": "צ׳כיה"
+ },
+ "FR": {
+ "name": "צרפת"
+ },
+ "CU": {
+ "name": "קובה"
+ },
+ "CO": {
+ "name": "קולומביה"
+ },
+ "KM": {
+ "name": "קומורוס"
+ },
+ "CG": {
+ "name": "קונגו - ברז×ויל"
+ },
+ "CD": {
+ "name": "קונגו - קינש×סה"
+ },
+ "XK": {
+ "name": "קוסובו"
+ },
+ "CR": {
+ "name": "קוסטה ריקה"
+ },
+ "CW": {
+ "name": "קור×ס×ו"
+ },
+ "KR": {
+ "name": "קורי××” הדרומית"
+ },
+ "KP": {
+ "name": "קורי××” הצפונית"
+ },
+ "KZ": {
+ "name": "קזחסטן"
+ },
+ "QA": {
+ "name": "קט×ר"
+ },
+ "KG": {
+ "name": "קירגיזסטן"
+ },
+ "KI": {
+ "name": "קיריב×טי"
+ },
+ "NC": {
+ "name": "קלדוניה החדשה"
+ },
+ "KH": {
+ "name": "קמבודיה"
+ },
+ "CM": {
+ "name": "קמרון"
+ },
+ "CA": {
+ "name": "קנדה"
+ },
+ "KE": {
+ "name": "קניה"
+ },
+ "CY": {
+ "name": "קפריסין"
+ },
+ "HR": {
+ "name": "קרו×טיה"
+ },
+ "RE": {
+ "name": "ר×וניון"
+ },
+ "RW": {
+ "name": "רו×נדה"
+ },
+ "RO": {
+ "name": "רומניה"
+ },
+ "RU": {
+ "name": "רוסיה"
+ },
+ "SE": {
+ "name": "שוודיה"
+ },
+ "CH": {
+ "name": "שווייץ"
+ },
+ "TH": {
+ "name": "ת×ילנד"
+ },
+ "TN": {
+ "name": "תוניסיה"
+ },
+ "YE": {
+ "name": "תימן"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/hi.json b/library/intl/resources/country/hi.json
new file mode 100644
index 000000000..1e9ff1e75
--- /dev/null
+++ b/library/intl/resources/country/hi.json
@@ -0,0 +1,761 @@
+{
+ "AO": {
+ "name": "अंगोला"
+ },
+ "AQ": {
+ "name": "अंटारà¥à¤•à¤Ÿà¤¿à¤•à¤¾"
+ },
+ "AZ": {
+ "name": "अज़रबैजान"
+ },
+ "AF": {
+ "name": "अफ़गानिसà¥à¤¤à¤¾à¤¨"
+ },
+ "AS": {
+ "name": "अमेरिकी समोआ"
+ },
+ "AW": {
+ "name": "अरूबा"
+ },
+ "AR": {
+ "name": "अरà¥à¤œà¥‡à¤‚टीना"
+ },
+ "SV": {
+ "name": "अल सलà¥à¤µà¤¾à¤¡à¥‹à¤°"
+ },
+ "DZ": {
+ "name": "अलà¥à¤œà¥€à¤°à¤¿à¤¯à¤¾"
+ },
+ "AL": {
+ "name": "अलà¥à¤¬à¤¾à¤¨à¤¿à¤¯à¤¾"
+ },
+ "AC": {
+ "name": "असेंशन दà¥à¤µà¥€à¤ª"
+ },
+ "IM": {
+ "name": "आइल ऑफ़ मैन"
+ },
+ "IS": {
+ "name": "आइसलैंड"
+ },
+ "IE": {
+ "name": "आयरलैंड"
+ },
+ "AM": {
+ "name": "आरà¥à¤®à¥‡à¤¨à¤¿à¤¯à¤¾"
+ },
+ "ID": {
+ "name": "इंडोनेशिया"
+ },
+ "EC": {
+ "name": "इकà¥à¤µà¤¾à¤¡à¥‹à¤°"
+ },
+ "GQ": {
+ "name": "इकà¥à¤µà¥‡à¤Ÿà¥‹à¤°à¤¿à¤¯à¤² गिनी"
+ },
+ "IT": {
+ "name": "इटली"
+ },
+ "ET": {
+ "name": "इथियोपिया"
+ },
+ "IQ": {
+ "name": "इराक"
+ },
+ "ER": {
+ "name": "इरिटà¥à¤°à¤¿à¤¯à¤¾"
+ },
+ "IL": {
+ "name": "इसराइल"
+ },
+ "IR": {
+ "name": "ईरान"
+ },
+ "UZ": {
+ "name": "उज़à¥à¤¬à¥‡à¤•à¤¿à¤¸à¥à¤¤à¤¾à¤¨"
+ },
+ "KP": {
+ "name": "उतà¥à¤¤à¤° कोरिया"
+ },
+ "MP": {
+ "name": "उतà¥à¤¤à¤°à¥€ मारियाना दà¥à¤µà¥€à¤ªà¤¸à¤®à¥‚ह"
+ },
+ "UY": {
+ "name": "उरूगà¥à¤µà¥‡"
+ },
+ "AI": {
+ "name": "à¤à¤‚गà¥à¤µà¤¿à¤²à¤¾"
+ },
+ "AG": {
+ "name": "à¤à¤‚टिगà¥à¤† और बरबà¥à¤¡à¤¾"
+ },
+ "AD": {
+ "name": "à¤à¤‚डोरा"
+ },
+ "AX": {
+ "name": "à¤à¤²à¥ˆà¤‚ड दà¥à¤µà¥€à¤ªà¤¸à¤®à¥‚ह"
+ },
+ "EE": {
+ "name": "à¤à¤¸à¥à¤Ÿà¥‹à¤¨à¤¿à¤¯à¤¾"
+ },
+ "AT": {
+ "name": "ऑसà¥à¤Ÿà¥à¤°à¤¿à¤¯à¤¾"
+ },
+ "AU": {
+ "name": "ऑसà¥à¤Ÿà¥à¤°à¥‡à¤²à¤¿à¤¯à¤¾"
+ },
+ "OM": {
+ "name": "ओमान"
+ },
+ "KH": {
+ "name": "कंबोडिया"
+ },
+ "KZ": {
+ "name": "कज़ाखसà¥à¤¤à¤¾à¤¨"
+ },
+ "QA": {
+ "name": "क़तर"
+ },
+ "CA": {
+ "name": "कनाडा"
+ },
+ "CD": {
+ "name": "कांगो - किंशासा"
+ },
+ "CG": {
+ "name": "कांगो – बà¥à¤°à¤¾à¤œà¤¼à¤¾à¤µà¤¿à¤²"
+ },
+ "KI": {
+ "name": "किरिबाती"
+ },
+ "KG": {
+ "name": "किरà¥à¤—िज़सà¥à¤¤à¤¾à¤¨"
+ },
+ "CK": {
+ "name": "कà¥à¤• दà¥à¤µà¥€à¤ªà¤¸à¤®à¥‚ह"
+ },
+ "KW": {
+ "name": "कà¥à¤µà¥ˆà¤¤"
+ },
+ "KE": {
+ "name": "केनà¥à¤¯à¤¾"
+ },
+ "CV": {
+ "name": "केप वरà¥à¤¡"
+ },
+ "KY": {
+ "name": "केमैन दà¥à¤µà¥€à¤ªà¤¸à¤®à¥‚ह"
+ },
+ "IC": {
+ "name": "कैनेरी दà¥à¤µà¥€à¤ªà¤¸à¤®à¥‚ह"
+ },
+ "CM": {
+ "name": "कैमरून"
+ },
+ "BQ": {
+ "name": "कैरिबियन नीदरलैंड"
+ },
+ "CC": {
+ "name": "कोकोस (कीलिंग) दà¥à¤µà¥€à¤ªà¤¸à¤®à¥‚ह"
+ },
+ "CI": {
+ "name": "कोट डी आइवर"
+ },
+ "KM": {
+ "name": "कोमोरोस"
+ },
+ "CO": {
+ "name": "कोलंबिया"
+ },
+ "XK": {
+ "name": "कोसोवो"
+ },
+ "CR": {
+ "name": "कोसà¥à¤Ÿà¤¾à¤°à¤¿à¤•à¤¾"
+ },
+ "CU": {
+ "name": "कà¥à¤¯à¥‚बा"
+ },
+ "CW": {
+ "name": "कà¥à¤¯à¥‚रासाओ"
+ },
+ "CX": {
+ "name": "कà¥à¤°à¤¿à¤¸à¤®à¤¸ दà¥à¤µà¥€à¤ª"
+ },
+ "HR": {
+ "name": "कà¥à¤°à¥‹à¤à¤¶à¤¿à¤¯à¤¾"
+ },
+ "GY": {
+ "name": "गयाना"
+ },
+ "GG": {
+ "name": "गरà¥à¤¨à¤¸à¥€"
+ },
+ "GM": {
+ "name": "गामà¥à¤¬à¤¿à¤¯à¤¾"
+ },
+ "GN": {
+ "name": "गिनी"
+ },
+ "GW": {
+ "name": "गिनी-बिसाउ"
+ },
+ "GU": {
+ "name": "गà¥à¤†à¤®"
+ },
+ "GA": {
+ "name": "गैबॉन"
+ },
+ "GL": {
+ "name": "गà¥à¤°à¥€à¤¨à¤²à¥ˆà¤‚ड"
+ },
+ "GD": {
+ "name": "गà¥à¤°à¥‡à¤¨à¤¾à¤¡à¤¾"
+ },
+ "GT": {
+ "name": "गà¥à¤µà¤¾à¤Ÿà¥‡à¤®à¤¾à¤²à¤¾"
+ },
+ "GP": {
+ "name": "गà¥à¤µà¤¾à¤¡à¥‡à¤²à¥‚प"
+ },
+ "GH": {
+ "name": "घाना"
+ },
+ "TD": {
+ "name": "चाड"
+ },
+ "CL": {
+ "name": "चिली"
+ },
+ "CN": {
+ "name": "चीन"
+ },
+ "CZ": {
+ "name": "चेक गणराजà¥à¤¯"
+ },
+ "JM": {
+ "name": "जमैका"
+ },
+ "DE": {
+ "name": "जरà¥à¤®à¤¨à¥€"
+ },
+ "JE": {
+ "name": "जरà¥à¤¸à¥€"
+ },
+ "JP": {
+ "name": "जापान"
+ },
+ "ZM": {
+ "name": "ज़ामà¥à¤¬à¤¿à¤¯à¤¾"
+ },
+ "DJ": {
+ "name": "जिबूती"
+ },
+ "GI": {
+ "name": "जिबà¥à¤°à¤¾à¤²à¥à¤Ÿà¤°"
+ },
+ "ZW": {
+ "name": "ज़िमà¥à¤¬à¤¾à¤¬à¥à¤µà¥‡"
+ },
+ "GE": {
+ "name": "जॉरà¥à¤œà¤¿à¤¯à¤¾"
+ },
+ "JO": {
+ "name": "जॉरà¥à¤¡à¤¨"
+ },
+ "TO": {
+ "name": "टोंगा"
+ },
+ "TG": {
+ "name": "टोगो"
+ },
+ "TN": {
+ "name": "टà¥à¤¯à¥‚नीशिया"
+ },
+ "DG": {
+ "name": "डिà¤à¤—ो गारà¥à¤¸à¤¿à¤¯à¤¾"
+ },
+ "DK": {
+ "name": "डेनमारà¥à¤•"
+ },
+ "DO": {
+ "name": "डोमिनिकन गणराजà¥à¤¯"
+ },
+ "DM": {
+ "name": "डोमिनिका"
+ },
+ "TZ": {
+ "name": "तंज़ानिया"
+ },
+ "TW": {
+ "name": "ताइवान"
+ },
+ "TJ": {
+ "name": "ताजिकिसà¥à¤¤à¤¾à¤¨"
+ },
+ "TL": {
+ "name": "तिमोर-लेसà¥à¤¤"
+ },
+ "TC": {
+ "name": "तà¥à¤°à¥à¤• और कैकोज़ दà¥à¤µà¥€à¤ªà¤¸à¤®à¥‚ह"
+ },
+ "TM": {
+ "name": "तà¥à¤°à¥à¤•à¤®à¥‡à¤¨à¤¿à¤¸à¥à¤¤à¤¾à¤¨"
+ },
+ "TR": {
+ "name": "तà¥à¤°à¥à¤•à¥€"
+ },
+ "TV": {
+ "name": "तà¥à¤µà¤¾à¤²à¥‚"
+ },
+ "TK": {
+ "name": "तोकेलाउ"
+ },
+ "TT": {
+ "name": "तà¥à¤°à¤¿à¤¨à¤¿à¤¦à¤¾à¤¦ और टोबैगो"
+ },
+ "TA": {
+ "name": "तà¥à¤°à¤¿à¤¸à¥à¤Ÿà¤¾à¤¨ डा कà¥à¤¨à¤¾"
+ },
+ "TH": {
+ "name": "थाईलैंड"
+ },
+ "ZA": {
+ "name": "दकà¥à¤·à¤¿à¤£ अफ़à¥à¤°à¥€à¤•à¤¾"
+ },
+ "KR": {
+ "name": "दकà¥à¤·à¤¿à¤£ कोरिया"
+ },
+ "GS": {
+ "name": "दकà¥à¤·à¤¿à¤£ जॉरà¥à¤œà¤¿à¤¯à¤¾ और दकà¥à¤·à¤¿à¤£ सैंडविच दà¥à¤µà¥€à¤ªà¤¸à¤®à¥‚ह"
+ },
+ "SS": {
+ "name": "दकà¥à¤·à¤¿à¤£ सूडान"
+ },
+ "NE": {
+ "name": "नाइजर"
+ },
+ "NG": {
+ "name": "नाइजीरिया"
+ },
+ "NR": {
+ "name": "नाउरà¥"
+ },
+ "NA": {
+ "name": "नामीबिया"
+ },
+ "NI": {
+ "name": "निकारागà¥à¤†"
+ },
+ "NL": {
+ "name": "नीदरलैंड"
+ },
+ "NU": {
+ "name": "नीयू"
+ },
+ "NP": {
+ "name": "नेपाल"
+ },
+ "NF": {
+ "name": "नॉरफ़ॉक दà¥à¤µà¥€à¤ª"
+ },
+ "NO": {
+ "name": "नॉरà¥à¤µà¥‡"
+ },
+ "NC": {
+ "name": "नà¥à¤¯à¥‚ कैलेडोनिया"
+ },
+ "NZ": {
+ "name": "नà¥à¤¯à¥‚ज़ीलैंड"
+ },
+ "PA": {
+ "name": "पनामा"
+ },
+ "PW": {
+ "name": "पलाऊ"
+ },
+ "EH": {
+ "name": "पशà¥à¤šà¤¿à¤®à¥€ सहारा"
+ },
+ "PK": {
+ "name": "पाकिसà¥à¤¤à¤¾à¤¨"
+ },
+ "PG": {
+ "name": "पापà¥à¤† नà¥à¤¯à¥‚ गिनी"
+ },
+ "PN": {
+ "name": "पिटकैरà¥à¤¨ दà¥à¤µà¥€à¤ªà¤¸à¤®à¥‚ह"
+ },
+ "PT": {
+ "name": "पà¥à¤°à¥à¤¤à¤—ाल"
+ },
+ "PY": {
+ "name": "पेरागà¥à¤µà¥‡"
+ },
+ "PE": {
+ "name": "पेरू"
+ },
+ "PR": {
+ "name": "पोरà¥à¤Ÿà¥‹ रिको"
+ },
+ "PL": {
+ "name": "पोलैंड"
+ },
+ "FJ": {
+ "name": "फ़िजी"
+ },
+ "FI": {
+ "name": "फ़िनलैंड"
+ },
+ "PH": {
+ "name": "फ़िलिपींस"
+ },
+ "PS": {
+ "name": "फ़िलिसà¥à¤¤à¥€à¤¨à¥€ कà¥à¤·à¥‡à¤¤à¥à¤°"
+ },
+ "FO": {
+ "name": "फ़ेरो दà¥à¤µà¥€à¤ªà¤¸à¤®à¥‚ह"
+ },
+ "FK": {
+ "name": "फ़ॉकलैंड दà¥à¤µà¥€à¤ªà¤¸à¤®à¥‚ह"
+ },
+ "FR": {
+ "name": "फ़à¥à¤°à¤¾à¤‚स"
+ },
+ "TF": {
+ "name": "फ़à¥à¤°à¤¾à¤‚सीसी दकà¥à¤·à¤¿à¤£à¥€ कà¥à¤·à¥‡à¤¤à¥à¤°"
+ },
+ "GF": {
+ "name": "फ़à¥à¤°à¥‡à¤‚च गयाना"
+ },
+ "PF": {
+ "name": "फ़à¥à¤°à¥‡à¤‚च पोलिनेशिया"
+ },
+ "BM": {
+ "name": "बरमूडा"
+ },
+ "BH": {
+ "name": "बहरीन"
+ },
+ "BS": {
+ "name": "बहामास"
+ },
+ "BD": {
+ "name": "बांगà¥à¤²à¤¾à¤¦à¥‡à¤¶"
+ },
+ "BB": {
+ "name": "बारबाडोस"
+ },
+ "BI": {
+ "name": "बà¥à¤°à¥à¤‚डी"
+ },
+ "BF": {
+ "name": "बà¥à¤°à¥à¤•à¤¿à¤¨à¤¾ फ़ासो"
+ },
+ "BG": {
+ "name": "बà¥à¤²à¥à¤—ारिया"
+ },
+ "BJ": {
+ "name": "बेनिन"
+ },
+ "BY": {
+ "name": "बेलारूस"
+ },
+ "BZ": {
+ "name": "बेलीज़"
+ },
+ "BE": {
+ "name": "बेलà¥à¤œà¤¿à¤¯à¤®"
+ },
+ "BW": {
+ "name": "बोतà¥à¤¸à¥à¤µà¤¾à¤¨à¤¾"
+ },
+ "BO": {
+ "name": "बोलीविया"
+ },
+ "BA": {
+ "name": "बोसà¥à¤¨à¤¿à¤¯à¤¾ और हरà¥à¤œà¤¼à¥‡à¤—ोविना"
+ },
+ "BR": {
+ "name": "बà¥à¤°à¤¾à¤œà¤¼à¥€à¤²"
+ },
+ "VG": {
+ "name": "बà¥à¤°à¤¿à¤Ÿà¤¿à¤¶ वरà¥à¤œà¤¿à¤¨ दà¥à¤µà¥€à¤ªà¤¸à¤®à¥‚ह"
+ },
+ "IO": {
+ "name": "बà¥à¤°à¤¿à¤Ÿà¤¿à¤¶ हिंद महासागरीय कà¥à¤·à¥‡à¤¤à¥à¤°"
+ },
+ "BN": {
+ "name": "बà¥à¤°à¥‚नेई"
+ },
+ "IN": {
+ "name": "भारत"
+ },
+ "BT": {
+ "name": "भूटान"
+ },
+ "MN": {
+ "name": "मंगोलिया"
+ },
+ "MO": {
+ "name": "मकाऊ (विशेष पà¥à¤°à¤¶à¤¾à¤¸à¤¨à¤¿à¤• कà¥à¤·à¥‡à¤¤à¥à¤° चीन)"
+ },
+ "CF": {
+ "name": "मधà¥à¤¯ अफ़à¥à¤°à¥€à¤•à¥€ गणराजà¥à¤¯"
+ },
+ "MW": {
+ "name": "मलावी"
+ },
+ "MY": {
+ "name": "मलेशिया"
+ },
+ "FM": {
+ "name": "माइकà¥à¤°à¥‹à¤¨à¥‡à¤¶à¤¿à¤¯à¤¾"
+ },
+ "YT": {
+ "name": "मायोते"
+ },
+ "MQ": {
+ "name": "मारà¥à¤Ÿà¥€à¤¨à¤¿à¤•"
+ },
+ "MH": {
+ "name": "मारà¥à¤¶à¤² दà¥à¤µà¥€à¤ªà¤¸à¤®à¥‚ह"
+ },
+ "MV": {
+ "name": "मालदीव"
+ },
+ "ML": {
+ "name": "माली"
+ },
+ "MT": {
+ "name": "मालà¥à¤Ÿà¤¾"
+ },
+ "EG": {
+ "name": "मिसà¥à¤°"
+ },
+ "MG": {
+ "name": "मेडागासà¥à¤•à¤°"
+ },
+ "MX": {
+ "name": "मैकà¥à¤¸à¤¿à¤•à¥‹"
+ },
+ "MK": {
+ "name": "मैसिडोनिया"
+ },
+ "MR": {
+ "name": "मॉरिटानिया"
+ },
+ "MU": {
+ "name": "मॉरिशस"
+ },
+ "MD": {
+ "name": "मॉलà¥à¤¡à¥‹à¤µà¤¾"
+ },
+ "MS": {
+ "name": "मोंटसेरात"
+ },
+ "ME": {
+ "name": "मोंटेनेगà¥à¤°à¥‹"
+ },
+ "MZ": {
+ "name": "मोज़ांबिक"
+ },
+ "MC": {
+ "name": "मोनाको"
+ },
+ "MA": {
+ "name": "मोरकà¥à¤•à¥‹"
+ },
+ "MM": {
+ "name": "मà¥à¤¯à¤¾à¤‚मार (बरà¥à¤®à¤¾)"
+ },
+ "YE": {
+ "name": "यमन"
+ },
+ "UG": {
+ "name": "यà¥à¤—ांडा"
+ },
+ "UM": {
+ "name": "यू.à¤à¤¸. आउटलाइंग दà¥à¤µà¥€à¤ªà¤¸à¤®à¥‚ह"
+ },
+ "VI": {
+ "name": "यू.à¤à¤¸. वरà¥à¤œà¤¿à¤¨ दà¥à¤µà¥€à¤ªà¤¸à¤®à¥‚ह"
+ },
+ "UA": {
+ "name": "यूकà¥à¤°à¥‡à¤¨"
+ },
+ "GB": {
+ "name": "यूनाइटेड किंगडम"
+ },
+ "GR": {
+ "name": "यूनान"
+ },
+ "RW": {
+ "name": "रवांडा"
+ },
+ "RE": {
+ "name": "रियूनियन"
+ },
+ "RU": {
+ "name": "रूस"
+ },
+ "RO": {
+ "name": "रोमानिया"
+ },
+ "LU": {
+ "name": "लगà¥à¤œà¤¼à¤®à¤¬à¤°à¥à¤—"
+ },
+ "LR": {
+ "name": "लाइबेरिया"
+ },
+ "LA": {
+ "name": "लाओस"
+ },
+ "LV": {
+ "name": "लातविया"
+ },
+ "LI": {
+ "name": "लिचेंसà¥à¤Ÿà¥€à¤¨"
+ },
+ "LT": {
+ "name": "लिथà¥à¤†à¤¨à¤¿à¤¯à¤¾"
+ },
+ "LY": {
+ "name": "लीबिया"
+ },
+ "LB": {
+ "name": "लेबनान"
+ },
+ "LS": {
+ "name": "लेसोथो"
+ },
+ "VU": {
+ "name": "वनà¥à¤†à¤¤à¥‚"
+ },
+ "WF": {
+ "name": "वालिस और फ़à¥à¤¯à¥‚चूना"
+ },
+ "VN": {
+ "name": "वियतनाम"
+ },
+ "VA": {
+ "name": "वेटिकन सिटी"
+ },
+ "VE": {
+ "name": "वेनेज़à¥à¤à¤²à¤¾"
+ },
+ "LK": {
+ "name": "शà¥à¤°à¥€à¤²à¤‚का"
+ },
+ "AE": {
+ "name": "संयà¥à¤•à¥à¤¤ अरब अमीरात"
+ },
+ "US": {
+ "name": "संयà¥à¤•à¥à¤¤ राजà¥à¤¯"
+ },
+ "SA": {
+ "name": "सऊदी अरब"
+ },
+ "WS": {
+ "name": "समोआ"
+ },
+ "RS": {
+ "name": "सरà¥à¤¬à¤¿à¤¯à¤¾"
+ },
+ "CY": {
+ "name": "साइपà¥à¤°à¤¸"
+ },
+ "ST": {
+ "name": "साओ टोम और पà¥à¤°à¤¿à¤‚सिपे"
+ },
+ "SG": {
+ "name": "सिंगापà¥à¤°"
+ },
+ "SX": {
+ "name": "सिंट मारà¥à¤Ÿà¤¿à¤¨"
+ },
+ "SL": {
+ "name": "सिà¤à¤°à¤¾ लियोन"
+ },
+ "SY": {
+ "name": "सीरिया"
+ },
+ "SD": {
+ "name": "सूडान"
+ },
+ "SR": {
+ "name": "सूरीनाम"
+ },
+ "KN": {
+ "name": "सेंट किटà¥à¤¸ और नेविस"
+ },
+ "PM": {
+ "name": "सेंट पिà¤à¤°à¥‡ और मिकà¥à¤µà¥‡à¤²à¤¾à¤¨"
+ },
+ "BL": {
+ "name": "सेंट बारà¥à¤¥à¥‡à¤²à¥‡à¤®à¥€"
+ },
+ "MF": {
+ "name": "सेंट मारà¥à¤Ÿà¤¿à¤¨"
+ },
+ "LC": {
+ "name": "सेंट लूसिया"
+ },
+ "VC": {
+ "name": "सेंट विंसेंट और गà¥à¤°à¥‡à¤¨à¤¾à¤¡à¤¾à¤‡à¤‚स"
+ },
+ "SH": {
+ "name": "सेंट हेलेना"
+ },
+ "EA": {
+ "name": "सेउटा और मेलिला"
+ },
+ "SN": {
+ "name": "सेनेगल"
+ },
+ "SC": {
+ "name": "सेशेलà¥à¤¸"
+ },
+ "SM": {
+ "name": "सैन मेरीनो"
+ },
+ "SO": {
+ "name": "सोमालिया"
+ },
+ "SB": {
+ "name": "सोलोमन दà¥à¤µà¥€à¤ªà¤¸à¤®à¥‚ह"
+ },
+ "ES": {
+ "name": "सà¥à¤ªà¥‡à¤¨"
+ },
+ "SK": {
+ "name": "सà¥à¤²à¥‹à¤µà¤¾à¤•à¤¿à¤¯à¤¾"
+ },
+ "SI": {
+ "name": "सà¥à¤²à¥‹à¤µà¥‡à¤¨à¤¿à¤¯à¤¾"
+ },
+ "SZ": {
+ "name": "सà¥à¤µà¤¾à¤œà¤¼à¥€à¤²à¥ˆà¤‚ड"
+ },
+ "SJ": {
+ "name": "सà¥à¤µà¤¾à¤²à¤¬à¤¾à¤°à¥à¤¡ और जान मायेन"
+ },
+ "CH": {
+ "name": "सà¥à¤µà¤¿à¤Ÿà¥à¤œà¤¼à¤°à¤²à¥ˆà¤‚ड"
+ },
+ "SE": {
+ "name": "सà¥à¤µà¥€à¤¡à¤¨"
+ },
+ "HU": {
+ "name": "हंगरी"
+ },
+ "HK": {
+ "name": "हाà¤à¤— काà¤à¤— (चीन विशेष पà¥à¤°à¤¶à¤¾à¤¸à¤¨à¤¿à¤• कà¥à¤·à¥‡à¤¤à¥à¤°)"
+ },
+ "HT": {
+ "name": "हैती"
+ },
+ "HN": {
+ "name": "होंडूरास"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/hr.json b/library/intl/resources/country/hr.json
new file mode 100644
index 000000000..ce93f3fcf
--- /dev/null
+++ b/library/intl/resources/country/hr.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistan"
+ },
+ "AL": {
+ "name": "Albanija"
+ },
+ "DZ": {
+ "name": "Alžir"
+ },
+ "AS": {
+ "name": "AmeriÄka Samoa"
+ },
+ "VI": {
+ "name": "AmeriÄki DjeviÄanski Otoci"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Angvila"
+ },
+ "AQ": {
+ "name": "Antarktika"
+ },
+ "AG": {
+ "name": "Antigua i Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenija"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australija"
+ },
+ "AT": {
+ "name": "Austrija"
+ },
+ "AZ": {
+ "name": "Azerbajdžan"
+ },
+ "BS": {
+ "name": "Bahami"
+ },
+ "BH": {
+ "name": "Bahrein"
+ },
+ "BD": {
+ "name": "Bangladeš"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgija"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BY": {
+ "name": "Bjelorusija"
+ },
+ "BW": {
+ "name": "Bocvana"
+ },
+ "BO": {
+ "name": "Bolivija"
+ },
+ "BA": {
+ "name": "Bosna i Hercegovina"
+ },
+ "CX": {
+ "name": "Božićni Otok"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "VG": {
+ "name": "Britanski DjeviÄanski Otoci"
+ },
+ "IO": {
+ "name": "Britanski Indijskooceanski Teritorij"
+ },
+ "BN": {
+ "name": "Brunej"
+ },
+ "BG": {
+ "name": "Bugarska"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butan"
+ },
+ "EA": {
+ "name": "Ceuta i Melilla"
+ },
+ "CY": {
+ "name": "Cipar"
+ },
+ "CK": {
+ "name": "Cookovi Otoci"
+ },
+ "ME": {
+ "name": "Crna Gora"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "TD": {
+ "name": "ÄŒad"
+ },
+ "CZ": {
+ "name": "Češka Republika"
+ },
+ "CL": {
+ "name": "ÄŒile"
+ },
+ "DK": {
+ "name": "Danska"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "DO": {
+ "name": "Dominikanska Republika"
+ },
+ "DJ": {
+ "name": "Džibuti"
+ },
+ "EG": {
+ "name": "Egipat"
+ },
+ "EC": {
+ "name": "Ekvador"
+ },
+ "GQ": {
+ "name": "Ekvatorska Gvineja"
+ },
+ "ER": {
+ "name": "Eritreja"
+ },
+ "EE": {
+ "name": "Estonija"
+ },
+ "ET": {
+ "name": "Etiopija"
+ },
+ "FK": {
+ "name": "Falklandski Otoci"
+ },
+ "FO": {
+ "name": "Farski Otoci"
+ },
+ "FJ": {
+ "name": "Fidži"
+ },
+ "PH": {
+ "name": "Filipini"
+ },
+ "FI": {
+ "name": "Finska"
+ },
+ "FR": {
+ "name": "Francuska"
+ },
+ "GF": {
+ "name": "Francuska Gvajana"
+ },
+ "PF": {
+ "name": "Francuska Polinezija"
+ },
+ "TF": {
+ "name": "Francuske Južne i AntarktiÄke Zemlje"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambija"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "GrÄka"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grenland"
+ },
+ "GE": {
+ "name": "Gruzija"
+ },
+ "GP": {
+ "name": "Guadalupa"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Gvajana"
+ },
+ "GT": {
+ "name": "Gvatemala"
+ },
+ "GN": {
+ "name": "Gvineja"
+ },
+ "GW": {
+ "name": "Gvineja Bisau"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong PUP Kina"
+ },
+ "HR": {
+ "name": "Hrvatska"
+ },
+ "IN": {
+ "name": "Indija"
+ },
+ "ID": {
+ "name": "Indonezija"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irska"
+ },
+ "IS": {
+ "name": "Island"
+ },
+ "TL": {
+ "name": "IstoÄni Timor"
+ },
+ "IT": {
+ "name": "Italija"
+ },
+ "IL": {
+ "name": "Izrael"
+ },
+ "JM": {
+ "name": "Jamajka"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "GS": {
+ "name": "Južna Georgija i Južni SendviÄki Otoci"
+ },
+ "KR": {
+ "name": "Južna Koreja"
+ },
+ "SS": {
+ "name": "Južni Sudan"
+ },
+ "ZA": {
+ "name": "JužnoafriÄka Republika"
+ },
+ "KY": {
+ "name": "Kajmanski Otoci"
+ },
+ "KH": {
+ "name": "Kambodža"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanarski Otoci"
+ },
+ "BQ": {
+ "name": "Karipski otoci Nizozemske"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KZ": {
+ "name": "Kazahstan"
+ },
+ "KE": {
+ "name": "Kenija"
+ },
+ "CN": {
+ "name": "Kina"
+ },
+ "KG": {
+ "name": "Kirgistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CC": {
+ "name": "Kokosovi (Keeling) Otoci"
+ },
+ "CO": {
+ "name": "Kolumbija"
+ },
+ "KM": {
+ "name": "Komori"
+ },
+ "CG": {
+ "name": "Kongo - Brazzaville"
+ },
+ "CD": {
+ "name": "Kongo - Kinshasa"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuvajt"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvija"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberija"
+ },
+ "LY": {
+ "name": "Libija"
+ },
+ "LI": {
+ "name": "Lihtenštajn"
+ },
+ "LT": {
+ "name": "Litva"
+ },
+ "LU": {
+ "name": "Luksemburg"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "HU": {
+ "name": "Mađarska"
+ },
+ "MO": {
+ "name": "Makao PUP Kina"
+ },
+ "MK": {
+ "name": "Makedonija"
+ },
+ "MW": {
+ "name": "Malavi"
+ },
+ "MV": {
+ "name": "Maldivi"
+ },
+ "MY": {
+ "name": "Malezija"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "UM": {
+ "name": "Mali udaljeni otoci SAD-a"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Maroko"
+ },
+ "MH": {
+ "name": "Maršalovi Otoci"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MU": {
+ "name": "Mauricijus"
+ },
+ "MR": {
+ "name": "Mauritanija"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "MM": {
+ "name": "Mijanmar (Burma)"
+ },
+ "FM": {
+ "name": "Mikronezija"
+ },
+ "MD": {
+ "name": "Moldavija"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolija"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambik"
+ },
+ "NA": {
+ "name": "Namibija"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigerija"
+ },
+ "NI": {
+ "name": "Nikaragva"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NL": {
+ "name": "Nizozemska"
+ },
+ "NO": {
+ "name": "Norveška"
+ },
+ "NC": {
+ "name": "Nova Kaledonija"
+ },
+ "NZ": {
+ "name": "Novi Zeland"
+ },
+ "DE": {
+ "name": "NjemaÄka"
+ },
+ "CI": {
+ "name": "Obala Bjelokosti"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "AX": {
+ "name": "Otoci Aland"
+ },
+ "PN": {
+ "name": "Otoci Pitcairn"
+ },
+ "TC": {
+ "name": "Otoci Turks i Caicos"
+ },
+ "AC": {
+ "name": "Otok Ascension"
+ },
+ "IM": {
+ "name": "Otok Man"
+ },
+ "NF": {
+ "name": "Otok Norfolk"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinsko PodruÄje"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Nova Gvineja"
+ },
+ "PY": {
+ "name": "Paragvaj"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PL": {
+ "name": "Poljska"
+ },
+ "PR": {
+ "name": "Portoriko"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "RE": {
+ "name": "Reunion"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumunjska"
+ },
+ "RU": {
+ "name": "Rusija"
+ },
+ "SB": {
+ "name": "Salomonski Otoci"
+ },
+ "SV": {
+ "name": "Salvador"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "SA": {
+ "name": "Saudijska Arabija"
+ },
+ "SC": {
+ "name": "Sejšeli"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "SL": {
+ "name": "Sijera Leone"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Sirija"
+ },
+ "US": {
+ "name": "Sjedinjene AmeriÄke Države"
+ },
+ "KP": {
+ "name": "Sjeverna Koreja"
+ },
+ "MP": {
+ "name": "Sjeverni Marijanski Otoci"
+ },
+ "SK": {
+ "name": "SlovaÄka"
+ },
+ "SI": {
+ "name": "Slovenija"
+ },
+ "SO": {
+ "name": "Somalija"
+ },
+ "RS": {
+ "name": "Srbija"
+ },
+ "CF": {
+ "name": "SrednjoafriÄka Republika"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard i Jan Mayen"
+ },
+ "SZ": {
+ "name": "Svazi"
+ },
+ "SH": {
+ "name": "Sveta Helena"
+ },
+ "LC": {
+ "name": "Sveta Lucija"
+ },
+ "VA": {
+ "name": "Sveta Stolica"
+ },
+ "BL": {
+ "name": "Sveti Bartolomej"
+ },
+ "KN": {
+ "name": "Sveti Kristofor i Nevis"
+ },
+ "MF": {
+ "name": "Sveti Martin"
+ },
+ "PM": {
+ "name": "Sveti Petar i Mikelon"
+ },
+ "ST": {
+ "name": "Sveti Toma i Princip"
+ },
+ "VC": {
+ "name": "Sveti Vincent i Grenadini"
+ },
+ "ES": {
+ "name": "Å panjolska"
+ },
+ "LK": {
+ "name": "Å ri Lanka"
+ },
+ "SE": {
+ "name": "Å vedska"
+ },
+ "CH": {
+ "name": "Å vicarska"
+ },
+ "TJ": {
+ "name": "Tadžikistan"
+ },
+ "TH": {
+ "name": "Tajland"
+ },
+ "TW": {
+ "name": "Tajvan"
+ },
+ "TZ": {
+ "name": "Tanzanija"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad i Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunis"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TR": {
+ "name": "Turska"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "AE": {
+ "name": "Ujedinjeni Arapski Emirati"
+ },
+ "UA": {
+ "name": "Ukrajina"
+ },
+ "UY": {
+ "name": "Urugvaj"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "GB": {
+ "name": "Velika Britanija"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vijetnam"
+ },
+ "WF": {
+ "name": "Wallis i Futuna"
+ },
+ "ZM": {
+ "name": "Zambija"
+ },
+ "EH": {
+ "name": "Zapadna Sahara"
+ },
+ "CV": {
+ "name": "Zelenortska Republika"
+ },
+ "ZW": {
+ "name": "Zimbabve"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/hsb.json b/library/intl/resources/country/hsb.json
new file mode 100644
index 000000000..75614ad74
--- /dev/null
+++ b/library/intl/resources/country/hsb.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land"
+ },
+ "AL": {
+ "name": "Albanska"
+ },
+ "DZ": {
+ "name": "Algeriska"
+ },
+ "UM": {
+ "name": "Ameriska Oceaniska"
+ },
+ "AS": {
+ "name": "Ameriska Samoa"
+ },
+ "VI": {
+ "name": "Ameriske knježniske kupy"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktika"
+ },
+ "AG": {
+ "name": "Antigua a Barbuda"
+ },
+ "AR": {
+ "name": "Argentinska"
+ },
+ "AM": {
+ "name": "Armenska"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension"
+ },
+ "AU": {
+ "name": "Awstralska"
+ },
+ "AT": {
+ "name": "Awstriska"
+ },
+ "AZ": {
+ "name": "Azerbajdźan"
+ },
+ "BS": {
+ "name": "Bahamy"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladeš"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgiska"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BY": {
+ "name": "Běłoruska"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermudy"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BG": {
+ "name": "Bołharska"
+ },
+ "BO": {
+ "name": "Boliwiska"
+ },
+ "BA": {
+ "name": "Bosniska a Hercegowina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazilska"
+ },
+ "VG": {
+ "name": "Britiske knježniske kupy"
+ },
+ "IO": {
+ "name": "Britiski teritorij w Indiskim oceanje"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "TD": {
+ "name": "ÄŒad"
+ },
+ "CF": {
+ "name": "Centralnoafriska republika"
+ },
+ "CZ": {
+ "name": "Čěska republika"
+ },
+ "EA": {
+ "name": "Ceuta a Melilla"
+ },
+ "CL": {
+ "name": "Chilska"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "HR": {
+ "name": "Chorwatska"
+ },
+ "CK": {
+ "name": "Cookowe kupy"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cypern"
+ },
+ "DK": {
+ "name": "Danska"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "DO": {
+ "name": "Dominikanska republika"
+ },
+ "DJ": {
+ "name": "Dźibuti"
+ },
+ "EG": {
+ "name": "Egyptowska"
+ },
+ "EC": {
+ "name": "Ekwador"
+ },
+ "GQ": {
+ "name": "Ekwatorialna Gineja"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "ER": {
+ "name": "Eritreja"
+ },
+ "EE": {
+ "name": "Estiska"
+ },
+ "ET": {
+ "name": "Etiopiska"
+ },
+ "FK": {
+ "name": "Falklandske kupy"
+ },
+ "FO": {
+ "name": "Färöske kupy"
+ },
+ "FJ": {
+ "name": "Fidźi"
+ },
+ "PH": {
+ "name": "Filipiny"
+ },
+ "FI": {
+ "name": "Finska"
+ },
+ "FR": {
+ "name": "Francoska"
+ },
+ "GF": {
+ "name": "Francoska Guyana"
+ },
+ "PF": {
+ "name": "Francoska Polyneziska"
+ },
+ "TF": {
+ "name": "Francoski južny a antarktiski teritorij"
+ },
+ "GA": {
+ "name": "Gabun"
+ },
+ "GM": {
+ "name": "Gambija"
+ },
+ "GE": {
+ "name": "Georgiska"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GN": {
+ "name": "Gineja"
+ },
+ "GW": {
+ "name": "Gineja-Bissau"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GR": {
+ "name": "Grjekska"
+ },
+ "GL": {
+ "name": "Grönlandska"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "CX": {
+ "name": "Hodowna kupa"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "IN": {
+ "name": "Indiska"
+ },
+ "ID": {
+ "name": "Indoneska"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irska"
+ },
+ "IS": {
+ "name": "Islandska"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italska"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "JP": {
+ "name": "Japanska"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordaniska"
+ },
+ "ZA": {
+ "name": "Južna Afrika (Republika)"
+ },
+ "GS": {
+ "name": "Južna Georgiska a Južne Sandwichowe kupy"
+ },
+ "KR": {
+ "name": "Južna Koreja"
+ },
+ "SS": {
+ "name": "Južny Sudan"
+ },
+ "KY": {
+ "name": "Kajmanske kupy"
+ },
+ "KH": {
+ "name": "Kambodźa"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanariske kupy"
+ },
+ "CV": {
+ "name": "Kap Verde"
+ },
+ "BQ": {
+ "name": "Karibiska Nižozemska"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KZ": {
+ "name": "Kazachstan"
+ },
+ "KE": {
+ "name": "Kenija"
+ },
+ "KG": {
+ "name": "Kirgizistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CC": {
+ "name": "Kokosowe kupy"
+ },
+ "CO": {
+ "name": "Kolumbiska"
+ },
+ "KM": {
+ "name": "Komory"
+ },
+ "CG": {
+ "name": "Kongo-Brazzaville"
+ },
+ "CD": {
+ "name": "Kongo-Kinshasa"
+ },
+ "XK": {
+ "name": "Kosowo"
+ },
+ "CR": {
+ "name": "Kosta Rika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "TC": {
+ "name": "kupy Turks a Caicos"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Letiska"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberija"
+ },
+ "LY": {
+ "name": "Libyska"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Litawska"
+ },
+ "LU": {
+ "name": "Luxemburgska"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "HU": {
+ "name": "Madźarska"
+ },
+ "MK": {
+ "name": "Makedonska"
+ },
+ "MY": {
+ "name": "Malajzija"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Malediwy"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "IM": {
+ "name": "Man"
+ },
+ "MA": {
+ "name": "Marokko"
+ },
+ "MH": {
+ "name": "Marshallowe kupy"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "MR": {
+ "name": "Mawretanska"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexiko"
+ },
+ "FM": {
+ "name": "Mikroneziska"
+ },
+ "MD": {
+ "name": "Moldawska"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolska"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mosambik"
+ },
+ "MM": {
+ "name": "Myanmar"
+ },
+ "NA": {
+ "name": "Namibija"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "DE": {
+ "name": "Němska"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigerija"
+ },
+ "NI": {
+ "name": "Nikaragua"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NL": {
+ "name": "Nižozemska"
+ },
+ "NF": {
+ "name": "Norfolkowa kupa"
+ },
+ "NO": {
+ "name": "Norwegska"
+ },
+ "NC": {
+ "name": "Nowa Kaledoniska"
+ },
+ "NZ": {
+ "name": "Nowoseelandska"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinski awtonomny teritorij"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papuwa-Nowa Gineja"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairnowe kupy"
+ },
+ "PL": {
+ "name": "Pólska"
+ },
+ "PT": {
+ "name": "Portugalska"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumunska"
+ },
+ "RU": {
+ "name": "Ruska"
+ },
+ "SB": {
+ "name": "Salomony"
+ },
+ "ZM": {
+ "name": "Sambija"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé a Príncipe"
+ },
+ "SA": {
+ "name": "Sawdi-Arabska"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbiska"
+ },
+ "KP": {
+ "name": "Sewjerna Koreja"
+ },
+ "MP": {
+ "name": "Sewjerne Mariany"
+ },
+ "SC": {
+ "name": "Seychelle"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "ZW": {
+ "name": "Simbabwe"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "SÅ‚owakska"
+ },
+ "SI": {
+ "name": "SÅ‚owjenska"
+ },
+ "SO": {
+ "name": "Somalija"
+ },
+ "ES": {
+ "name": "Å paniska"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "SH": {
+ "name": "St. Helena"
+ },
+ "KN": {
+ "name": "St. Kitts a Nevis"
+ },
+ "LC": {
+ "name": "St. Lucia"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "PM": {
+ "name": "St. Pierre a Miquelon"
+ },
+ "VC": {
+ "name": "St. Vincent a Grenadiny"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard a Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziska"
+ },
+ "SE": {
+ "name": "Å wedska"
+ },
+ "CH": {
+ "name": "Å wicarska"
+ },
+ "SY": {
+ "name": "Syriska"
+ },
+ "TJ": {
+ "name": "Tadźikistan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tansanija"
+ },
+ "TH": {
+ "name": "Thailandska"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad a Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tuneziska"
+ },
+ "TM": {
+ "name": "Turkmeniska"
+ },
+ "TR": {
+ "name": "Turkowska"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraina"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikanske město"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis a Futuna"
+ },
+ "HK": {
+ "name": "Wosebita zarjadniska cona Hongkong"
+ },
+ "MO": {
+ "name": "Wosebita zarjadniska cona Macao"
+ },
+ "EH": {
+ "name": "Zapadna Sahara"
+ },
+ "AE": {
+ "name": "Zjednoćene arabske emiraty"
+ },
+ "GB": {
+ "name": "Zjednoćene kralestwo"
+ },
+ "US": {
+ "name": "Zjednoćene staty Ameriki"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/hu.json b/library/intl/resources/country/hu.json
new file mode 100644
index 000000000..f08b47017
--- /dev/null
+++ b/library/intl/resources/country/hu.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganisztán"
+ },
+ "AX": {
+ "name": "Ã…land-szigetek"
+ },
+ "AL": {
+ "name": "Albánia"
+ },
+ "DZ": {
+ "name": "Algéria"
+ },
+ "UM": {
+ "name": "Amerikai Csendes-óceáni Szigetek"
+ },
+ "AS": {
+ "name": "Amerikai Szamoa"
+ },
+ "VI": {
+ "name": "Amerikai Virgin-szigetek"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktisz"
+ },
+ "AG": {
+ "name": "Antigua és Barbuda"
+ },
+ "AR": {
+ "name": "Argentína"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension-sziget"
+ },
+ "AU": {
+ "name": "Ausztrália"
+ },
+ "AT": {
+ "name": "Ausztria"
+ },
+ "AZ": {
+ "name": "Azerbajdzsán"
+ },
+ "BS": {
+ "name": "Bahama-szigetek"
+ },
+ "BH": {
+ "name": "Bahrein"
+ },
+ "BD": {
+ "name": "Banglades"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhután"
+ },
+ "BO": {
+ "name": "Bolívia"
+ },
+ "BA": {
+ "name": "Bosznia-Hercegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazília"
+ },
+ "IO": {
+ "name": "Brit Indiai-óceáni Terület"
+ },
+ "VG": {
+ "name": "Brit Virgin-szigetek"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgária"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "EA": {
+ "name": "Ceuta és Melilla"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CY": {
+ "name": "Ciprus"
+ },
+ "KM": {
+ "name": "Comore-szigetek"
+ },
+ "CK": {
+ "name": "Cook-szigetek"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "TD": {
+ "name": "Csád"
+ },
+ "CZ": {
+ "name": "Csehország"
+ },
+ "DK": {
+ "name": "Dánia"
+ },
+ "ZA": {
+ "name": "Dél-afrikai Köztársaság"
+ },
+ "KR": {
+ "name": "Dél-Korea"
+ },
+ "SS": {
+ "name": "Dél-Szudán"
+ },
+ "GS": {
+ "name": "Déli-Georgia és Déli-Sandwich-szigetek"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "DO": {
+ "name": "Dominikai Köztársaság"
+ },
+ "DJ": {
+ "name": "Dzsibuti"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "GQ": {
+ "name": "Egyenlítői-Guinea"
+ },
+ "US": {
+ "name": "Egyesült Ãllamok"
+ },
+ "AE": {
+ "name": "Egyesült Arab Emirátus"
+ },
+ "GB": {
+ "name": "Egyesült Királyság"
+ },
+ "EG": {
+ "name": "Egyiptom"
+ },
+ "CI": {
+ "name": "Elefántcsontpart"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "KP": {
+ "name": "Észak-Korea"
+ },
+ "MP": {
+ "name": "Északi Mariana-szigetek"
+ },
+ "EE": {
+ "name": "Észtország"
+ },
+ "ET": {
+ "name": "Etiópia"
+ },
+ "FK": {
+ "name": "Falkland-szigetek"
+ },
+ "BY": {
+ "name": "Fehéroroszország"
+ },
+ "FO": {
+ "name": "Feröer-szigetek"
+ },
+ "FJ": {
+ "name": "Fidzsi-szigetek"
+ },
+ "FI": {
+ "name": "Finnország"
+ },
+ "TF": {
+ "name": "Francia Déli Területek"
+ },
+ "GF": {
+ "name": "Francia Guyana"
+ },
+ "PF": {
+ "name": "Francia Polinézia"
+ },
+ "FR": {
+ "name": "Franciaország"
+ },
+ "PH": {
+ "name": "Fülöp-szigetek"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghána"
+ },
+ "GI": {
+ "name": "Gibraltár"
+ },
+ "GR": {
+ "name": "Görögország"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grönland"
+ },
+ "GE": {
+ "name": "Grúzia"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "BQ": {
+ "name": "Holland Karib-térség"
+ },
+ "NL": {
+ "name": "Hollandia"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hongkong SAR Kína"
+ },
+ "HR": {
+ "name": "Horvátország"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonézia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Ãrország"
+ },
+ "IS": {
+ "name": "Izland"
+ },
+ "IL": {
+ "name": "Izrael"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japán"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordánia"
+ },
+ "KY": {
+ "name": "Kajmán-szigetek"
+ },
+ "KH": {
+ "name": "Kambodzsa"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanári-szigetek"
+ },
+ "CX": {
+ "name": "Karácsony-sziget"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KZ": {
+ "name": "Kazahsztán"
+ },
+ "TL": {
+ "name": "Kelet-Timor"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CN": {
+ "name": "Kína"
+ },
+ "KG": {
+ "name": "Kirgizisztán"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CC": {
+ "name": "Kókusz-szigetek"
+ },
+ "CO": {
+ "name": "Kolumbia"
+ },
+ "CG": {
+ "name": "Kongó - Brazzaville"
+ },
+ "CD": {
+ "name": "Kongó - Kinshasa"
+ },
+ "XK": {
+ "name": "Koszovó"
+ },
+ "CF": {
+ "name": "Közép-afrikai Köztársaság"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuvait"
+ },
+ "LA": {
+ "name": "Laosz"
+ },
+ "PL": {
+ "name": "Lengyelország"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Lettország"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Libéria"
+ },
+ "LY": {
+ "name": "Líbia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Litvánia"
+ },
+ "LU": {
+ "name": "Luxemburg"
+ },
+ "MK": {
+ "name": "Macedónia"
+ },
+ "MG": {
+ "name": "Madagaszkár"
+ },
+ "HU": {
+ "name": "Magyarország"
+ },
+ "MO": {
+ "name": "Makaó SAR Kína"
+ },
+ "MY": {
+ "name": "Malajzia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldív-szigetek"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Málta"
+ },
+ "IM": {
+ "name": "Man-sziget"
+ },
+ "MA": {
+ "name": "Marokkó"
+ },
+ "MH": {
+ "name": "Marshall-szigetek"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritánia"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexikó"
+ },
+ "MM": {
+ "name": "Mianmar (Burma)"
+ },
+ "FM": {
+ "name": "Mikronézia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongólia"
+ },
+ "ME": {
+ "name": "Montenegró"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambik"
+ },
+ "NA": {
+ "name": "Namíbia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "DE": {
+ "name": "Németország"
+ },
+ "NP": {
+ "name": "Nepál"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigéria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk-sziget"
+ },
+ "NO": {
+ "name": "Norvégia"
+ },
+ "EH": {
+ "name": "Nyugat-Szahara"
+ },
+ "IT": {
+ "name": "Olaszország"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "RU": {
+ "name": "Oroszország"
+ },
+ "AM": {
+ "name": "Örményország"
+ },
+ "PK": {
+ "name": "Pakisztán"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palesztin Terület"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Pápua Új-Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn-szigetek"
+ },
+ "PT": {
+ "name": "Portugália"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "RE": {
+ "name": "Reunion"
+ },
+ "RO": {
+ "name": "Románia"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "KN": {
+ "name": "Saint Kitts és Nevis"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre és Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vincent és a Grenadine-szigetek"
+ },
+ "BL": {
+ "name": "Saint-Barthélemy"
+ },
+ "SB": {
+ "name": "Salamon-szigetek"
+ },
+ "SV": {
+ "name": "Salvador"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "LC": {
+ "name": "Santa Lucia"
+ },
+ "ST": {
+ "name": "Sao Tomé és Príncipe"
+ },
+ "SC": {
+ "name": "Seychelle-szigetek"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "ES": {
+ "name": "Spanyolország"
+ },
+ "SJ": {
+ "name": "Spitzbergák és Jan Mayen-szigetek"
+ },
+ "LK": {
+ "name": "Srí Lanka"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "CH": {
+ "name": "Svájc"
+ },
+ "SE": {
+ "name": "Svédország"
+ },
+ "WS": {
+ "name": "Szamoa"
+ },
+ "SA": {
+ "name": "Szaúd-Arábia"
+ },
+ "SN": {
+ "name": "Szenegál"
+ },
+ "SH": {
+ "name": "Szent Ilona"
+ },
+ "RS": {
+ "name": "Szerbia"
+ },
+ "SG": {
+ "name": "Szingapúr"
+ },
+ "SY": {
+ "name": "Szíria"
+ },
+ "SK": {
+ "name": "Szlovákia"
+ },
+ "SI": {
+ "name": "Szlovénia"
+ },
+ "SO": {
+ "name": "Szomália"
+ },
+ "SD": {
+ "name": "Szudán"
+ },
+ "SZ": {
+ "name": "Szváziföld"
+ },
+ "TJ": {
+ "name": "Tádzsikisztán"
+ },
+ "TW": {
+ "name": "Tajvan"
+ },
+ "TZ": {
+ "name": "Tanzánia"
+ },
+ "TH": {
+ "name": "Thaiföld"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TR": {
+ "name": "Törökország"
+ },
+ "TT": {
+ "name": "Trinidad és Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunézia"
+ },
+ "TC": {
+ "name": "Turks- és Caicos-szigetek"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "TM": {
+ "name": "Türkmenisztán"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "NC": {
+ "name": "Új-Kaledónia"
+ },
+ "NZ": {
+ "name": "Új-Zéland"
+ },
+ "UA": {
+ "name": "Ukrajna"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Üzbegisztán"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikán"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis- és Futuna-szigetek"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ },
+ "CV": {
+ "name": "Zöld-foki Köztársaság"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/hy.json b/library/intl/resources/country/hy.json
new file mode 100644
index 000000000..09401a166
--- /dev/null
+++ b/library/intl/resources/country/hy.json
@@ -0,0 +1,761 @@
+{
+ "AZ": {
+ "name": "Ô±Õ¤Ö€Õ¢Õ¥Õ»Õ¡Õ¶"
+ },
+ "AX": {
+ "name": "Ô±Õ¬Õ¡Õ¶Õ¤ÕµÕ¡Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€"
+ },
+ "AL": {
+ "name": "Ô±Õ¬Õ¢Õ¡Õ¶Õ«Õ¡"
+ },
+ "DZ": {
+ "name": "Ô±Õ¬ÕªÕ«Ö€"
+ },
+ "US": {
+ "name": "Ô±Õ´Õ¥Ö€Õ«Õ¯Õ¡ÕµÕ« Õ„Õ«Õ¡ÖÕµÕ¡Õ¬ Õ†Õ¡Õ°Õ¡Õ¶Õ£Õ¶Õ¥Ö€"
+ },
+ "AS": {
+ "name": "Ô±Õ´Õ¥Ö€Õ«Õ¯ÕµÕ¡Õ¶ ÕÕ¡Õ´Õ¸Õ¡"
+ },
+ "VI": {
+ "name": "Ô±Õ´Õ¥Ö€Õ«Õ¯ÕµÕ¡Õ¶ ÕŽÕ«Ö€Õ»Õ«Õ¶ÕµÕ¡Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€"
+ },
+ "AI": {
+ "name": "Ô±Õ¶Õ£Õ«Õ¬Õ«Õ¡"
+ },
+ "AO": {
+ "name": "Ô±Õ¶Õ£Õ¸Õ¬Õ¡"
+ },
+ "AD": {
+ "name": "Ô±Õ¶Õ¤Õ¸Ö€Õ¡"
+ },
+ "AQ": {
+ "name": "Ô±Õ¶Õ¿Õ¡Ö€Õ¯Õ¿Õ«Õ¤Õ¡"
+ },
+ "AG": {
+ "name": "Ô±Õ¶Õ¿Õ«Õ£Õ¸Ö‚Õ¡ Ö‡ Ô²Õ¡Ö€Õ¢Õ¸Ö‚Õ¤Õ¡"
+ },
+ "AU": {
+ "name": "Ô±Õ¾Õ½Õ¿Ö€Õ¡Õ¬Õ«Õ¡"
+ },
+ "AT": {
+ "name": "Ô±Õ¾Õ½Õ¿Ö€Õ«Õ¡"
+ },
+ "AR": {
+ "name": "Ô±Ö€Õ£Õ¥Õ¶Õ¿Õ«Õ¶Õ¡"
+ },
+ "AW": {
+ "name": "Ô±Ö€Õ¸Ö‚Õ¢Õ¡"
+ },
+ "UM": {
+ "name": "Ô±Ö€Õ¿Õ¡Ö„Õ«Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€ (Ô±Õ„Õ†)"
+ },
+ "EH": {
+ "name": "Ô±Ö€Ö‡Õ´Õ¿ÕµÕ¡Õ¶ ÕÕ¡Õ°Õ¡Ö€Õ¡"
+ },
+ "AF": {
+ "name": "Ô±Ö†Õ²Õ¡Õ¶Õ½Õ¿Õ¡Õ¶"
+ },
+ "BS": {
+ "name": "Ô²Õ¡Õ°Õ¡Õ´ÕµÕ¡Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€"
+ },
+ "BH": {
+ "name": "Ô²Õ¡Õ°Ö€Õ¥ÕµÕ¶"
+ },
+ "BD": {
+ "name": "Ô²Õ¡Õ¶Õ£Õ¬Õ¡Õ¤Õ¥Õ·"
+ },
+ "BB": {
+ "name": "Ô²Õ¡Ö€Õ¢Õ¡Õ¤Õ¸Õ½"
+ },
+ "BY": {
+ "name": "Ô²Õ¥Õ¬Õ¡Õ¼Õ¸Ö‚Õ½"
+ },
+ "BE": {
+ "name": "Ô²Õ¥Õ¬Õ£Õ«Õ¡"
+ },
+ "BZ": {
+ "name": "Ô²Õ¥Õ¬Õ«Õ¦"
+ },
+ "BJ": {
+ "name": "Ô²Õ¥Õ¶Õ«Õ¶"
+ },
+ "BM": {
+ "name": "Ô²Õ¥Ö€Õ´Õ¸Ö‚Õ¤ÕµÕ¡Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€"
+ },
+ "BO": {
+ "name": "Ô²Õ¸Õ¬Õ«Õ¾Õ«Õ¡"
+ },
+ "BA": {
+ "name": "Ô²Õ¸Õ½Õ¶Õ«Õ¡ Ö‡ Õ€Õ¥Ö€ÖÕ¥Õ£Õ¸Õ¾Õ«Õ¶Õ¡"
+ },
+ "BW": {
+ "name": "Ô²Õ¸Õ¿Õ½Õ¾Õ¡Õ¶Õ¡"
+ },
+ "BT": {
+ "name": "Ô²Õ¸Ö‚Õ©Õ¡Õ¶"
+ },
+ "BG": {
+ "name": "Ô²Õ¸Ö‚Õ¬Õ²Õ¡Ö€Õ«Õ¡"
+ },
+ "BF": {
+ "name": "Ô²Õ¸Ö‚Ö€Õ¯Õ«Õ¶Õ¡ Õ–Õ¡Õ½Õ¸"
+ },
+ "BI": {
+ "name": "Ô²Õ¸Ö‚Ö€Õ¸Ö‚Õ¶Õ¤Õ«"
+ },
+ "BR": {
+ "name": "Ô²Ö€Õ¡Õ¦Õ«Õ¬Õ«Õ¡"
+ },
+ "VG": {
+ "name": "Ô²Ö€Õ«Õ¿Õ¡Õ¶Õ¡Õ¯Õ¡Õ¶ ÕŽÕ«Ö€Õ»Õ«Õ¶ÕµÕ¡Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€"
+ },
+ "BN": {
+ "name": "Ô²Ö€Õ¸Ö‚Õ¶Õ¥Õµ"
+ },
+ "GA": {
+ "name": "Ô³Õ¡Õ¢Õ¸Õ¶"
+ },
+ "GM": {
+ "name": "Ô³Õ¡Õ´Õ¢Õ«Õ¡"
+ },
+ "GY": {
+ "name": "Ô³Õ¡ÕµÕ¡Õ¶Õ¡"
+ },
+ "GH": {
+ "name": "Ô³Õ¡Õ¶Õ¡"
+ },
+ "DE": {
+ "name": "Ô³Õ¥Ö€Õ´Õ¡Õ¶Õ«Õ¡"
+ },
+ "GG": {
+ "name": "Ô³Õ¥Ö€Õ¶Õ½Õ«"
+ },
+ "GU": {
+ "name": "Ô³Õ¸Ö‚Õ¡Õ´"
+ },
+ "GP": {
+ "name": "Ô³Õ¾Õ¡Õ¤Õ¥Õ¬Õ¸Ö‚ÕºÕ¡"
+ },
+ "GT": {
+ "name": "Ô³Õ¾Õ¡Õ¿Õ¥Õ´Õ¡Õ¬Õ¡"
+ },
+ "GN": {
+ "name": "Ô³Õ¾Õ«Õ¶Õ¥Õ¡"
+ },
+ "GW": {
+ "name": "Ô³Õ¾Õ«Õ¶Õ¥Õ¡-Ô²Õ«Õ½Õ¡Õ¸Ö‚"
+ },
+ "GD": {
+ "name": "Ô³Ö€Õ¥Õ¶Õ¡Õ¤Õ¡"
+ },
+ "GL": {
+ "name": "Ô³Ö€Õ¥Õ¶Õ¬Õ¡Õ¶Õ¤Õ«Õ¡"
+ },
+ "DK": {
+ "name": "Ô´Õ¡Õ¶Õ«Õ¡"
+ },
+ "DG": {
+ "name": "Ô´Õ«Õ¥Õ£Õ¸ Ô³Õ¡Ö€Õ½Õ«Õ¡"
+ },
+ "DM": {
+ "name": "Ô´Õ¸Õ´Õ«Õ¶Õ«Õ¯Õ¡"
+ },
+ "DO": {
+ "name": "Ô´Õ¸Õ´Õ«Õ¶Õ«Õ¯ÕµÕ¡Õ¶ Õ€Õ¡Õ¶Ö€Õ¡ÕºÕ¥Õ¿Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶"
+ },
+ "EG": {
+ "name": "ÔµÕ£Õ«ÕºÕ¿Õ¸Õ½"
+ },
+ "ET": {
+ "name": "ÔµÕ©Õ¸Õ¾ÕºÕ«Õ¡"
+ },
+ "YE": {
+ "name": "ÔµÕ´Õ¥Õ¶"
+ },
+ "ZM": {
+ "name": "Ô¶Õ¡Õ´Õ¢Õ«Õ¡"
+ },
+ "ZW": {
+ "name": "Ô¶Õ«Õ´Õ¢Õ¡Õ¢Õ¾Õ¥"
+ },
+ "EC": {
+ "name": "Ô·Õ¯Õ¾Õ¡Õ¤Õ¸Ö€"
+ },
+ "EE": {
+ "name": "Ô·Õ½Õ¿Õ¸Õ¶Õ«Õ¡"
+ },
+ "ER": {
+ "name": "Ô·Ö€Õ«Õ¿Ö€Õ¥Õ¡"
+ },
+ "TH": {
+ "name": "Ô¹Õ¡Õ«Õ¬Õ¡Õ¶Õ¤"
+ },
+ "TW": {
+ "name": "Ô¹Õ¡ÕµÕ¾Õ¡Õ¶"
+ },
+ "TL": {
+ "name": "Ô¹Õ«Õ´Õ¸Ö€-Ô¼Õ¥Õ½Õ¿Õ¥"
+ },
+ "TN": {
+ "name": "Ô¹Õ¸Ö‚Õ¶Õ«Õ½"
+ },
+ "TR": {
+ "name": "Ô¹Õ¸Ö‚Ö€Ö„Õ«Õ¡"
+ },
+ "TM": {
+ "name": "Ô¹Õ¸Ö‚Ö€Ö„Õ´Õ¥Õ¶Õ½Õ¿Õ¡Õ¶"
+ },
+ "ID": {
+ "name": "Ô»Õ¶Õ¤Õ¸Õ¶Õ¥Õ¦Õ«Õ¡"
+ },
+ "IE": {
+ "name": "Ô»Õ¼Õ¬Õ¡Õ¶Õ¤Õ«Õ¡"
+ },
+ "IS": {
+ "name": "Ô»Õ½Õ¬Õ¡Õ¶Õ¤Õ«Õ¡"
+ },
+ "ES": {
+ "name": "Ô»Õ½ÕºÕ¡Õ¶Õ«Õ¡"
+ },
+ "IL": {
+ "name": "Ô»Õ½Ö€Õ¡ÕµÕ¥Õ¬"
+ },
+ "IT": {
+ "name": "Ô»Õ¿Õ¡Õ¬Õ«Õ¡"
+ },
+ "IR": {
+ "name": "Ô»Ö€Õ¡Õ¶"
+ },
+ "IQ": {
+ "name": "Ô»Ö€Õ¡Ö„"
+ },
+ "LA": {
+ "name": "Ô¼Õ¡Õ¸Õ½"
+ },
+ "LV": {
+ "name": "Ô¼Õ¡Õ¿Õ¾Õ«Õ¡"
+ },
+ "PL": {
+ "name": "Ô¼Õ¥Õ°Õ¡Õ½Õ¿Õ¡Õ¶"
+ },
+ "LS": {
+ "name": "Ô¼Õ¥Õ½Õ¸Õ¿Õ¸"
+ },
+ "LB": {
+ "name": "Ô¼Õ«Õ¢Õ¡Õ¶Õ¡Õ¶"
+ },
+ "LR": {
+ "name": "Ô¼Õ«Õ¢Õ¥Ö€Õ«Õ¡"
+ },
+ "LY": {
+ "name": "Ô¼Õ«Õ¢Õ«Õ¡"
+ },
+ "LI": {
+ "name": "Ô¼Õ«Õ­Õ¿Õ¥Õ¶Õ·Õ¿Õ¥ÕµÕ¶"
+ },
+ "LT": {
+ "name": "Ô¼Õ«Õ¿Õ¾Õ¡"
+ },
+ "LU": {
+ "name": "Ô¼ÕµÕ¸Ö‚Ö„Õ½Õ¥Õ´Õ¢Õ¸Ö‚Ö€Õ£"
+ },
+ "HR": {
+ "name": "Ô½Õ¸Ö€Õ¾Õ¡Õ©Õ«Õ¡"
+ },
+ "CX": {
+ "name": "Ô¾Õ¶Õ¶Õ¤ÕµÕ¡Õ¶ Õ¯Õ²Õ¦Õ«"
+ },
+ "CV": {
+ "name": "Ô¿Õ¡Õ¢Õ¸ ÕŽÕ¥Ö€Õ¤Õ¥"
+ },
+ "KH": {
+ "name": "Ô¿Õ¡Õ´Õ¢Õ¸Õ»Õ¡"
+ },
+ "CM": {
+ "name": "Ô¿Õ¡Õ´Õ¥Ö€Õ¸Ö‚Õ¶"
+ },
+ "KY": {
+ "name": "Ô¿Õ¡ÕµÕ´Õ¡Õ¶ÕµÕ¡Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€"
+ },
+ "CA": {
+ "name": "Ô¿Õ¡Õ¶Õ¡Õ¤Õ¡"
+ },
+ "IC": {
+ "name": "Ô¿Õ¡Õ¶Õ¡Ö€ÕµÕ¡Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€"
+ },
+ "QA": {
+ "name": "Ô¿Õ¡Õ¿Õ¡Ö€"
+ },
+ "BQ": {
+ "name": "Ô¿Õ¡Ö€Õ«Õ¢ÕµÕ¡Õ¶ Õ†Õ«Õ¤Õ¥Ö€Õ¬Õ¡Õ¶Õ¤Õ¶Õ¥Ö€"
+ },
+ "CF": {
+ "name": "Ô¿Õ¥Õ¶Õ¿Ö€Õ¸Õ¶Õ¡Õ¯Õ¡Õ¶ Ô±Ö†Ö€Õ«Õ¯ÕµÕ¡Õ¶ Õ€Õ¡Õ¶Ö€Õ¡ÕºÕ¥Õ¿Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶"
+ },
+ "CY": {
+ "name": "Ô¿Õ«ÕºÖ€Õ¸Õ½"
+ },
+ "KI": {
+ "name": "Ô¿Õ«Ö€Õ«Õ¢Õ¡Õ¿Õ«"
+ },
+ "CW": {
+ "name": "Ô¿ÕµÕ¸Ö‚Ö€Õ¡Õ½Õ¡Õ¸"
+ },
+ "CO": {
+ "name": "Ô¿Õ¸Õ¬Õ¸Ö‚Õ´Õ¢Õ«Õ¡"
+ },
+ "CC": {
+ "name": "Ô¿Õ¸Õ¯Õ¸Õ½ÕµÕ¡Õ¶ (Õ”Õ«Õ¬Õ«Õ¶Õ£) Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€"
+ },
+ "KM": {
+ "name": "Ô¿Õ¸Õ´Õ¸Ö€ÕµÕ¡Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€"
+ },
+ "CG": {
+ "name": "Ô¿Õ¸Õ¶Õ£Õ¸ - Ô²Ö€Õ¡Õ¦Õ¡Õ¾Õ«Õ¬"
+ },
+ "CD": {
+ "name": "Ô¿Õ¸Õ¶Õ£Õ¸ - Ô¿Õ«Õ¶Õ·Õ¡Õ½Õ¡"
+ },
+ "XK": {
+ "name": "Ô¿Õ¸Õ½Õ¸Õ¾Õ¸"
+ },
+ "CR": {
+ "name": "Կոստա-Ռիկա"
+ },
+ "CU": {
+ "name": "Ô¿Õ¸Ö‚Õ¢Õ¡"
+ },
+ "CK": {
+ "name": "Ô¿Õ¸Ö‚Õ¯Õ« Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€"
+ },
+ "HT": {
+ "name": "Õ€Õ¡Õ«Õ©Õ«"
+ },
+ "AC": {
+ "name": "Õ€Õ¡Õ´Õ¢Õ¡Ö€Õ±Õ´Õ¡Õ¶ Õ¯Õ²Õ¦Õ«"
+ },
+ "AM": {
+ "name": "Õ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶"
+ },
+ "GQ": {
+ "name": "Õ€Õ¡Õ½Õ¡Ö€Õ¡Õ¯Õ¡Õ®Õ¡ÕµÕ«Õ¶ Ô³Õ¾Õ«Õ¶Õ¥Õ¡"
+ },
+ "KR": {
+ "name": "Õ€Õ¡Ö€Õ¡Õ¾Õ¡ÕµÕ«Õ¶ Ô¿Õ¸Ö€Õ¥Õ¡"
+ },
+ "GS": {
+ "name": "Õ€Õ¡Ö€Õ¡Õ¾Õ¡ÕµÕ«Õ¶ Õ‹Õ¸Ö€Õ»Õ«Õ¡ Ö‡ Õ€Õ¡Ö€Õ¡Õ¾Õ¡ÕµÕ«Õ¶ ÕÕ¥Õ¶Õ¤Õ¾Õ«Õ¹ÕµÕ¡Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€"
+ },
+ "SS": {
+ "name": "Õ€Õ¡Ö€Õ¡Õ¾Õ¡ÕµÕ«Õ¶ ÕÕ¸Ö‚Õ¤Õ¡Õ¶"
+ },
+ "ZA": {
+ "name": "Õ€Õ¡Ö€Õ¡Õ¾Õ¡Ö†Ö€Õ«Õ¯ÕµÕ¡Õ¶ Õ€Õ¡Õ¶Ö€Õ¡ÕºÕ¥Õ¿Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶"
+ },
+ "KP": {
+ "name": "Õ€ÕµÕ¸Ö‚Õ½Õ«Õ½Õ¡ÕµÕ«Õ¶ Ô¿Õ¸Ö€Õ¥Õ¡"
+ },
+ "MP": {
+ "name": "Õ€ÕµÕ¸Ö‚Õ½Õ«Õ½Õ¡ÕµÕ«Õ¶ Õ„Õ¡Ö€Õ«Õ¡Õ¶ÕµÕ¡Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€"
+ },
+ "IO": {
+ "name": "Õ€Õ¶Õ¤Õ¯Õ¡Õ¯Õ¡Õ¶ Õ•Õ¾Õ¯Õ«Õ¡Õ¶Õ¸Õ½Õ¸Ö‚Õ´ Ô²Ö€Õ«Õ¿Õ¡Õ¶Õ¡Õ¯Õ¡Õ¶ ÕÕ¡Ö€Õ¡Õ®Ö„"
+ },
+ "IN": {
+ "name": "Õ€Õ¶Õ¤Õ¯Õ¡Õ½Õ¿Õ¡Õ¶"
+ },
+ "HN": {
+ "name": "Õ€Õ¸Õ¶Õ¤Õ¸Ö‚Ö€Õ¡Õ½"
+ },
+ "HK": {
+ "name": "Õ€Õ¸Õ¶Õ¯Õ¸Õ¶Õ£Õ« Õ€ÕŽÕ‡"
+ },
+ "JO": {
+ "name": "Õ€Õ¸Ö€Õ¤Õ¡Õ¶Õ¡Õ¶"
+ },
+ "GR": {
+ "name": "Õ€Õ¸Ö‚Õ¶Õ¡Õ½Õ¿Õ¡Õ¶"
+ },
+ "HU": {
+ "name": "Õ€Õ¸Ö‚Õ¶Õ£Õ¡Ö€Õ«Õ¡"
+ },
+ "KZ": {
+ "name": "Õ‚Õ¡Õ¦Õ¡Õ­Õ½Õ¿Õ¡Õ¶"
+ },
+ "KG": {
+ "name": "Õ‚Ö€Õ²Õ¦Õ½Õ¿Õ¡Õ¶"
+ },
+ "JP": {
+ "name": "ÕƒÕ¡ÕºÕ¸Õ¶Õ«Õ¡"
+ },
+ "MG": {
+ "name": "Õ„Õ¡Õ¤Õ¡Õ£Õ¡Õ½Õ¯Õ¡Ö€"
+ },
+ "MY": {
+ "name": "Õ„Õ¡Õ¬Õ¡ÕµÕ¦Õ«Õ¡"
+ },
+ "MW": {
+ "name": "Õ„Õ¡Õ¬Õ¡Õ¾Õ«"
+ },
+ "MV": {
+ "name": "Õ„Õ¡Õ¬Õ¤Õ«Õ¾Õ¶Õ¥Ö€"
+ },
+ "MT": {
+ "name": "Õ„Õ¡Õ¬Õ©Õ¡"
+ },
+ "ML": {
+ "name": "Õ„Õ¡Õ¬Õ«"
+ },
+ "MK": {
+ "name": "Õ„Õ¡Õ¯Õ¥Õ¤Õ¸Õ¶Õ«Õ¡"
+ },
+ "YT": {
+ "name": "Õ„Õ¡ÕµÕ¸Õ¿"
+ },
+ "MU": {
+ "name": "Õ„Õ¡Õ¾Ö€Õ«Õ¯Õ«Õ¸Õ½"
+ },
+ "MR": {
+ "name": "Õ„Õ¡Õ¾Ö€Õ«Õ¿Õ¡Õ¶Õ«Õ¡"
+ },
+ "MH": {
+ "name": "Õ„Õ¡Ö€Õ·Õ¡Õ¬ÕµÕ¡Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€"
+ },
+ "MA": {
+ "name": "Õ„Õ¡Ö€Õ¸Õ¯Õ¸"
+ },
+ "MQ": {
+ "name": "Õ„Õ¡Ö€Õ¿Õ«Õ¶Õ«Õ¯Õ¡"
+ },
+ "IM": {
+ "name": "Õ„Õ¥Õ¶ Õ¯Õ²Õ¦Õ«"
+ },
+ "MX": {
+ "name": "Õ„Õ¥Ö„Õ½Õ«Õ¯Õ¡"
+ },
+ "AE": {
+ "name": "Õ„Õ«Õ¡ÖÕµÕ¡Õ¬ Ô±Ö€Õ¡Õ¢Õ¡Õ¯Õ¡Õ¶ Ô·Õ´Õ«Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€"
+ },
+ "GB": {
+ "name": "Õ„Õ«Õ¡ÖÕµÕ¡Õ¬ Ô¹Õ¡Õ£Õ¡Õ¾Õ¸Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶"
+ },
+ "FM": {
+ "name": "Õ„Õ«Õ¯Ö€Õ¸Õ¶Õ¥Õ¦Õ«Õ¡"
+ },
+ "MM": {
+ "name": "Õ„ÕµÕ¡Õ¶Õ´Õ¡ (Ô²Õ«Ö€Õ´Õ¡)"
+ },
+ "MZ": {
+ "name": "Õ„Õ¸Õ¦Õ¡Õ´Õ¢Õ«Õ¯"
+ },
+ "MD": {
+ "name": "Õ„Õ¸Õ¬Õ¤Õ¸Õ¾Õ¡"
+ },
+ "MC": {
+ "name": "Õ„Õ¸Õ¶Õ¡Õ¯Õ¸"
+ },
+ "MN": {
+ "name": "Õ„Õ¸Õ¶Õ²Õ¸Õ¬Õ«Õ¡"
+ },
+ "MS": {
+ "name": "Õ„Õ¸Õ¶Õ¿Õ½Õ¥Ö€Õ¡Õ¿"
+ },
+ "NA": {
+ "name": "Õ†Õ¡Õ´Õ«Õ¢Õ«Õ¡"
+ },
+ "NR": {
+ "name": "Õ†Õ¡Õ¸Ö‚Ö€Õ¸Ö‚"
+ },
+ "NP": {
+ "name": "Õ†Õ¥ÕºÕ¡Õ¬"
+ },
+ "NE": {
+ "name": "Õ†Õ«Õ£Õ¥Ö€"
+ },
+ "NG": {
+ "name": "Õ†Õ«Õ£Õ¥Ö€Õ«Õ¡"
+ },
+ "NL": {
+ "name": "Õ†Õ«Õ¤Õ¥Ö€Õ¬Õ¡Õ¶Õ¤Õ¥Ö€"
+ },
+ "NI": {
+ "name": "Õ†Õ«Õ¯Õ¡Ö€Õ¡Õ£Õ¸Ö‚Õ¡"
+ },
+ "NU": {
+ "name": "Õ†Õ«Õ¸Ö‚Õ¥"
+ },
+ "NZ": {
+ "name": "Õ†Õ¸Ö€ Ô¶Õ¥Õ¬Õ¡Õ¶Õ¤Õ«Õ¡"
+ },
+ "NC": {
+ "name": "Õ†Õ¸Ö€ Ô¿Õ¡Õ¬Õ¥Õ¤Õ¸Õ¶Õ«Õ¡"
+ },
+ "NO": {
+ "name": "Õ†Õ¸Ö€Õ¾Õ¥Õ£Õ«Õ¡"
+ },
+ "NF": {
+ "name": "Õ†Õ¸Ö€Ö†Õ¸Õ¬Õ¯ Õ¯Õ²Õ¦Õ«"
+ },
+ "SE": {
+ "name": "Õ‡Õ¾Õ¥Õ¤Õ«Õ¡"
+ },
+ "CH": {
+ "name": "Õ‡Õ¾Õ¥ÕµÖÕ¡Ö€Õ«Õ¡"
+ },
+ "LK": {
+ "name": "Õ‡Ö€Õ« Ô¼Õ¡Õ¶Õ¯Õ¡"
+ },
+ "UG": {
+ "name": "ÕˆÖ‚Õ£Õ¡Õ¶Õ¤Õ¡"
+ },
+ "UZ": {
+ "name": "ÕˆÖ‚Õ¦Õ¢Õ¥Õ¯Õ½Õ¿Õ¡Õ¶"
+ },
+ "UA": {
+ "name": "ÕˆÖ‚Õ¯Ö€Õ¡Õ«Õ¶Õ¡"
+ },
+ "WF": {
+ "name": "ÕˆÖ‚Õ¸Õ¬Õ«Õ½ Ö‡ Õ–Õ¸Ö‚Õ¿Õ¸Ö‚Õ¶Õ¡"
+ },
+ "UY": {
+ "name": "ÕˆÖ‚Ö€Õ¸Ö‚Õ£Õ¾Õ¡Õµ"
+ },
+ "TD": {
+ "name": "Õ‰Õ¡Õ¤"
+ },
+ "CZ": {
+ "name": "Õ‰Õ¥Õ­Õ«Õ¡"
+ },
+ "ME": {
+ "name": "Õ‰Õ¥Õ¼Õ¶Õ¸Õ£Õ¸Ö€Õ«Õ¡"
+ },
+ "CL": {
+ "name": "Õ‰Õ«Õ¬Õ«"
+ },
+ "CN": {
+ "name": "Õ‰Õ«Õ¶Õ¡Õ½Õ¿Õ¡Õ¶"
+ },
+ "MO": {
+ "name": "Õ‰Õ«Õ¶Õ¡Õ½Õ¿Õ¡Õ¶Õ« Õ„Õ¡Õ¯Õ¡Õ¸ Õ€ÕŽÕ‡"
+ },
+ "PW": {
+ "name": "ÕŠÕ¡Õ¬Õ¡Õ¸Ö‚"
+ },
+ "PK": {
+ "name": "ÕŠÕ¡Õ¯Õ«Õ½Õ¿Õ¡Õ¶"
+ },
+ "PS": {
+ "name": "ÕŠÕ¡Õ²Õ¥Õ½Õ¿Õ«Õ¶ÕµÕ¡Õ¶ Õ¿Õ¡Ö€Õ¡Õ®Ö„Õ¶Õ¥Ö€"
+ },
+ "PA": {
+ "name": "ÕŠÕ¡Õ¶Õ¡Õ´Õ¡"
+ },
+ "PG": {
+ "name": "ÕŠÕ¡ÕºÕ¸Ö‚Õ¡ Õ†Õ¸Ö€ Ô³Õ¾Õ«Õ¶Õ¥Õ¡"
+ },
+ "PY": {
+ "name": "ÕŠÕ¡Ö€Õ¡Õ£Õ¾Õ¡Õµ"
+ },
+ "PE": {
+ "name": "ÕŠÕ¥Ö€Õ¸Ö‚"
+ },
+ "PN": {
+ "name": "ÕŠÕ«Õ¿Õ¯Õ¥Õ¼Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€"
+ },
+ "PT": {
+ "name": "ÕŠÕ¸Ö€Õ¿Õ¸Ö‚Õ£Õ¡Õ¬Õ«Õ¡"
+ },
+ "PR": {
+ "name": "Պուերտո Ռիկո"
+ },
+ "JM": {
+ "name": "Õ‹Õ¡Õ´Õ¡ÕµÕ¯Õ¡"
+ },
+ "JE": {
+ "name": "Õ‹Õ¥Ö€Õ½Õ«"
+ },
+ "DJ": {
+ "name": "Õ‹Õ«Õ¢Õ¸Ö‚Õ¿Õ«"
+ },
+ "GI": {
+ "name": "Õ‹Õ«Õ¢Ö€Õ¡Õ¬Õ©Õ¡Ö€"
+ },
+ "RE": {
+ "name": "Ռեյունիոն"
+ },
+ "RW": {
+ "name": "Ռուանդա"
+ },
+ "RO": {
+ "name": "Ռումինիա"
+ },
+ "RU": {
+ "name": "Ռուսաստան"
+ },
+ "SV": {
+ "name": "ÕÕ¡Õ¬Õ¾Õ¡Õ¤Õ¸Ö€"
+ },
+ "WS": {
+ "name": "ÕÕ¡Õ´Õ¸Õ¡"
+ },
+ "SM": {
+ "name": "ÕÕ¡Õ¶ Õ„Õ¡Ö€Õ«Õ¶Õ¸"
+ },
+ "ST": {
+ "name": "ÕÕ¡Õ¶ ÕÕ¸Õ´Õ¥ Ö‡ ÕŠÖ€Õ«Õ¶Õ½Õ«ÕºÕ«"
+ },
+ "SA": {
+ "name": "ÕÕ¡Õ¸Ö‚Õ¤ÕµÕ¡Õ¶ Ô±Ö€Õ¡Õ¢Õ«Õ¡"
+ },
+ "SC": {
+ "name": "ÕÕ¥ÕµÕ·Õ¥Õ¬ÕµÕ¡Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€"
+ },
+ "MF": {
+ "name": "ÕÕ¥Õ¶ Õ„Õ¡Ö€Õ¿Õ¥Õ¶"
+ },
+ "PM": {
+ "name": "ÕÕ¥Õ¶ ÕŠÕ«Õ¥Ö€ Ö‡ Õ„Õ«Õ¯Õ¥Õ¬Õ¸Õ¶"
+ },
+ "SN": {
+ "name": "ÕÕ¥Õ¶Õ¥Õ£Õ¡Õ¬"
+ },
+ "LC": {
+ "name": "ÕÕ¥Õ¶Õ© Ô¼ÕµÕ¸Ö‚Õ½Õ«Õ¡"
+ },
+ "VC": {
+ "name": "ÕÕ¥Õ¶Õ© ÕŽÕ«Õ½Õ¥Õ¶Õ¿ Ö‡ Ô³Ö€Õ¥Õ¶Õ¡Õ¤Õ«Õ¶Õ¶Õ¥Ö€"
+ },
+ "KN": {
+ "name": "ÕÕ¥Õ¶Õ© Õ”Õ«Õ©Õ½ Ö‡ Õ†Ö‡Õ«Õ½"
+ },
+ "EA": {
+ "name": "ÕÕ¥Õ¸Ö‚Õ¿Õ¡ Ö‡ Õ„Õ¥Õ¬Õ«Õ¬ÕµÕ¡"
+ },
+ "RS": {
+ "name": "ÕÕ¥Ö€Õ¢Õ«Õ¡"
+ },
+ "SG": {
+ "name": "ÕÕ«Õ¶Õ£Õ¡ÕºÕ¸Ö‚Ö€"
+ },
+ "SX": {
+ "name": "ÕÕ«Õ¶Õ¿ Õ„Õ¡Ö€Õ¿Õ¥Õ¶"
+ },
+ "SY": {
+ "name": "ÕÕ«Ö€Õ«Õ¡"
+ },
+ "SK": {
+ "name": "ÕÕ¬Õ¸Õ¾Õ¡Õ¯Õ«Õ¡"
+ },
+ "SI": {
+ "name": "ÕÕ¬Õ¸Õ¾Õ¥Õ¶Õ«Õ¡"
+ },
+ "SL": {
+ "name": "ÕÕµÕ¥Ö€Õ¡-Ô¼Õ¥Õ¸Õ¶Õ¥"
+ },
+ "SB": {
+ "name": "ÕÕ¸Õ²Õ¸Õ´Õ¸Õ¶ÕµÕ¡Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€"
+ },
+ "SO": {
+ "name": "ÕÕ¸Õ´Õ¡Õ¬Õ«"
+ },
+ "SD": {
+ "name": "ÕÕ¸Ö‚Õ¤Õ¡Õ¶"
+ },
+ "BL": {
+ "name": "ÕÕ¸Ö‚Ö€Õ¢ Ô²Õ¡Ö€Õ©Õ¸Õ²Õ¸Õ´Õ¥Õ¸Õ½Õ« Õ¯Õ²Õ¦Õ«"
+ },
+ "SH": {
+ "name": "ÕÕ¸Ö‚Ö€Õ¢ Õ€Õ¥Õ²Õ«Õ¶Õ¥Õ« Õ¯Õ²Õ¦Õ«"
+ },
+ "SR": {
+ "name": "ÕÕ¸Ö‚Ö€Õ«Õ¶Õ¡Õ´"
+ },
+ "SZ": {
+ "name": "ÕÕ¾Õ¡Õ¦Õ«Õ¬Õ¥Õ¶Õ¤"
+ },
+ "SJ": {
+ "name": "ÕÕ¾Õ¡Õ¬Õ¢Õ¡Ö€Õ¤ Ö‡ Õ…Õ¡Õ¶-Õ„Õ¡ÕµÕ¥Õ¶"
+ },
+ "VU": {
+ "name": "ÕŽÕ¡Õ¶Õ¸Ö‚Õ¡Õ¿Õ¸Ö‚"
+ },
+ "VA": {
+ "name": "ÕŽÕ¡Õ¿Õ«Õ¯Õ¡Õ¶ Ö„Õ¡Õ²Õ¡Ö„-ÕºÕ¥Õ¿Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶"
+ },
+ "VE": {
+ "name": "ÕŽÕ¥Õ¶Õ¥Õ½Õ¸Ö‚Õ¥Õ¬Õ¡"
+ },
+ "VN": {
+ "name": "ÕŽÕ«Õ¥Õ¿Õ¶Õ¡Õ´"
+ },
+ "GE": {
+ "name": "ÕŽÖ€Õ¡Õ½Õ¿Õ¡Õ¶"
+ },
+ "TZ": {
+ "name": "ÕÕ¡Õ¶Õ¦Õ¡Õ¶Õ«Õ¡"
+ },
+ "TJ": {
+ "name": "ÕÕ¡Õ»Õ«Õ¯Õ½Õ¿Õ¡Õ¶"
+ },
+ "TC": {
+ "name": "ÕÕ¥Ö€Õ¯Õ½ Ö‡ Ô¿Õ¡ÕµÕ¯Õ¸Õ½ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€"
+ },
+ "TG": {
+ "name": "ÕÕ¸Õ£Õ¸"
+ },
+ "TK": {
+ "name": "ÕÕ¸Õ¯Õ¥Õ¬Õ¡Õ¸Ö‚"
+ },
+ "TO": {
+ "name": "ÕÕ¸Õ¶Õ£Õ¡"
+ },
+ "TV": {
+ "name": "ÕÕ¸Ö‚Õ¾Õ¡Õ¬Õ¸Ö‚"
+ },
+ "TT": {
+ "name": "ÕÖ€Õ«Õ¶Õ«Õ¤Õ¡Õ¤ Ö‡ ÕÕ¸Õ¢Õ¡Õ£Õ¸"
+ },
+ "TA": {
+ "name": "ÕÖ€Õ«Õ½Õ¿Õ¡Õ¶ Õ¤Õ¡ Ô¿Õ¸Ö‚Õ¶ÕµÕ¡"
+ },
+ "CI": {
+ "name": "Õ“Õ²Õ¸Õ½Õ¯Ö€Õ« Ô±Öƒ"
+ },
+ "KE": {
+ "name": "Õ”Õ¥Õ¶Õ«Õ¡"
+ },
+ "KW": {
+ "name": "Õ”Õ¸Ö‚Õ¾Õ¥ÕµÕ©"
+ },
+ "OM": {
+ "name": "Õ•Õ´Õ¡Õ¶"
+ },
+ "FO": {
+ "name": "Õ–Õ¡Ö€Õ¥Ö€ÕµÕ¡Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€"
+ },
+ "PH": {
+ "name": "Õ–Õ«Õ¬Õ«ÕºÕ«Õ¶Õ¶Õ¥Ö€"
+ },
+ "FI": {
+ "name": "Õ–Õ«Õ¶Õ¬Õ¡Õ¶Õ¤Õ«Õ¡"
+ },
+ "FJ": {
+ "name": "Õ–Õ«Õ»Õ«"
+ },
+ "FK": {
+ "name": "Õ–Õ¸Õ¬Õ¯Õ¬Õ¥Õ¶Õ¤ÕµÕ¡Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€"
+ },
+ "FR": {
+ "name": "Õ–Ö€Õ¡Õ¶Õ½Õ«Õ¡"
+ },
+ "GF": {
+ "name": "Õ–Ö€Õ¡Õ¶Õ½Õ«Õ¡Õ¯Õ¡Õ¶ Ô³Õ¾Õ«Õ¡Õ¶Õ¡"
+ },
+ "TF": {
+ "name": "Õ–Ö€Õ¡Õ¶Õ½Õ«Õ¡Õ¯Õ¡Õ¶ Õ€Õ¡Ö€Õ¡Õ¾Õ¡ÕµÕ«Õ¶ ÕÕ¡Ö€Õ¡Õ®Ö„Õ¶Õ¥Ö€"
+ },
+ "PF": {
+ "name": "Õ–Ö€Õ¡Õ¶Õ½Õ«Õ¡Õ¯Õ¡Õ¶ ÕŠÕ¸Õ¬Õ«Õ¶Õ¥Õ¦Õ«Õ¡"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/id.json b/library/intl/resources/country/id.json
new file mode 100644
index 000000000..c75b113fc
--- /dev/null
+++ b/library/intl/resources/country/id.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistan"
+ },
+ "ZA": {
+ "name": "Afrika Selatan"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljazair"
+ },
+ "US": {
+ "name": "Amerika Serikat"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktika"
+ },
+ "AG": {
+ "name": "Antigua dan Barbuda"
+ },
+ "SA": {
+ "name": "Arab Saudi"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "NL": {
+ "name": "Belanda"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgia"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia dan Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "TD": {
+ "name": "Cad"
+ },
+ "EA": {
+ "name": "Ceuta dan Melilla"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CL": {
+ "name": "Cile"
+ },
+ "CI": {
+ "name": "Cote d’Ivoire"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekuador"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopia"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipina"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GS": {
+ "name": "Georgia Selatan dan Kepulauan Sandwich Selatan"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grinlandia"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Ekuatorial"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GF": {
+ "name": "Guyana Prancis"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungaria"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "GB": {
+ "name": "Inggris"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irlandia"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "JP": {
+ "name": "Jepang"
+ },
+ "DE": {
+ "name": "Jerman"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "NC": {
+ "name": "Kaledonia Baru"
+ },
+ "KH": {
+ "name": "Kamboja"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "BQ": {
+ "name": "Karibia Belanda"
+ },
+ "KZ": {
+ "name": "Kazakstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "AX": {
+ "name": "Kepulauan Aland"
+ },
+ "IC": {
+ "name": "Kepulauan Canary"
+ },
+ "KY": {
+ "name": "Kepulauan Cayman"
+ },
+ "CC": {
+ "name": "Kepulauan Cocos"
+ },
+ "CK": {
+ "name": "Kepulauan Cook"
+ },
+ "FO": {
+ "name": "Kepulauan Faroe"
+ },
+ "FK": {
+ "name": "Kepulauan Malvinas"
+ },
+ "MP": {
+ "name": "Kepulauan Mariana Utara"
+ },
+ "MH": {
+ "name": "Kepulauan Marshall"
+ },
+ "NF": {
+ "name": "Kepulauan Norfolk"
+ },
+ "PN": {
+ "name": "Kepulauan Pitcairn"
+ },
+ "SB": {
+ "name": "Kepulauan Solomon"
+ },
+ "SJ": {
+ "name": "Kepulauan Svalbard dan Jan Mayen"
+ },
+ "UM": {
+ "name": "Kepulauan Terluar A.S."
+ },
+ "TC": {
+ "name": "Kepulauan Turks dan Caicos"
+ },
+ "VI": {
+ "name": "Kepulauan Virgin A.S."
+ },
+ "VG": {
+ "name": "Kepulauan Virgin Inggris"
+ },
+ "WF": {
+ "name": "Kepulauan Wallis dan Futuna"
+ },
+ "KG": {
+ "name": "Kirgistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komoro"
+ },
+ "CG": {
+ "name": "Kongo - Brazzaville"
+ },
+ "CD": {
+ "name": "Kongo - Kinshasa"
+ },
+ "KR": {
+ "name": "Korea Selatan"
+ },
+ "KP": {
+ "name": "Korea Utara"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kosta Rika"
+ },
+ "HR": {
+ "name": "Kroasia"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luksemburg"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MO": {
+ "name": "Makau SAR China"
+ },
+ "MK": {
+ "name": "Makedonia"
+ },
+ "MV": {
+ "name": "Maladewa"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Maroko"
+ },
+ "MQ": {
+ "name": "Martinik"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "EG": {
+ "name": "Mesir"
+ },
+ "FM": {
+ "name": "Mikronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambik"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NI": {
+ "name": "Nikaragua"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norwegia"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Nugini"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PL": {
+ "name": "Polandia"
+ },
+ "PF": {
+ "name": "Polinesia Prancis"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "FR": {
+ "name": "Prancis"
+ },
+ "PR": {
+ "name": "Puerto Riko"
+ },
+ "AC": {
+ "name": "Pulau Ascension"
+ },
+ "CX": {
+ "name": "Pulau Christmas"
+ },
+ "IM": {
+ "name": "Pulau Man"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "CF": {
+ "name": "Republik Afrika Tengah"
+ },
+ "CZ": {
+ "name": "Republik Cheska"
+ },
+ "DO": {
+ "name": "Republik Dominika"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Rumania"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "EH": {
+ "name": "Sahara Barat"
+ },
+ "BL": {
+ "name": "Saint Barthelemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts dan Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre dan Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vincent dan Grenadines"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Amerika"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "Sao Tome dan Principe"
+ },
+ "NZ": {
+ "name": "Selandia Baru"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapura"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "CY": {
+ "name": "Siprus"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ES": {
+ "name": "Spanyol"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SS": {
+ "name": "Sudan Selatan"
+ },
+ "SY": {
+ "name": "Suriah"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Swedia"
+ },
+ "CH": {
+ "name": "Swiss"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "CV": {
+ "name": "Tanjung Verde"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad dan Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turki"
+ },
+ "TM": {
+ "name": "Turkimenistan"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraina"
+ },
+ "AE": {
+ "name": "Uni Emirat Arab"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikan"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "IO": {
+ "name": "Wilayah Inggris di Samudra Hindia"
+ },
+ "TF": {
+ "name": "Wilayah Kutub Selatan Prancis"
+ },
+ "PS": {
+ "name": "Wilayah Palestina"
+ },
+ "YE": {
+ "name": "Yaman"
+ },
+ "JO": {
+ "name": "Yordania"
+ },
+ "GR": {
+ "name": "Yunani"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/is.json b/library/intl/resources/country/is.json
new file mode 100644
index 000000000..00b3c4b7c
--- /dev/null
+++ b/library/intl/resources/country/is.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistan"
+ },
+ "AL": {
+ "name": "Albanía"
+ },
+ "DZ": {
+ "name": "Alsír"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angóla"
+ },
+ "AI": {
+ "name": "Angvilla"
+ },
+ "AG": {
+ "name": "Antígva og Barbúda"
+ },
+ "AR": {
+ "name": "Argentína"
+ },
+ "AM": {
+ "name": "Armenía"
+ },
+ "AW": {
+ "name": "Arúba"
+ },
+ "AC": {
+ "name": "Ascension-eyja"
+ },
+ "AZ": {
+ "name": "Aserbaídsjan"
+ },
+ "AT": {
+ "name": "Austurríki"
+ },
+ "AX": {
+ "name": "Ãlandseyjar"
+ },
+ "AU": {
+ "name": "Ãstralía"
+ },
+ "BS": {
+ "name": "Bahamaeyjar"
+ },
+ "US": {
+ "name": "Bandaríkin"
+ },
+ "AS": {
+ "name": "Bandaríska Samóa"
+ },
+ "VI": {
+ "name": "Bandarísku Jómfrúaeyjar"
+ },
+ "BD": {
+ "name": "Bangladess"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Barein"
+ },
+ "BE": {
+ "name": "Belgía"
+ },
+ "BZ": {
+ "name": "Belís"
+ },
+ "BJ": {
+ "name": "Benín"
+ },
+ "BM": {
+ "name": "Bermúdaeyjar"
+ },
+ "BA": {
+ "name": "Bosnía og Hersegóvína"
+ },
+ "BW": {
+ "name": "Botsvana"
+ },
+ "BO": {
+ "name": "Bólivía"
+ },
+ "BR": {
+ "name": "Brasilía"
+ },
+ "IO": {
+ "name": "Bresku Indlandshafseyjar"
+ },
+ "VG": {
+ "name": "Bresku Jómfrúaeyjar"
+ },
+ "GB": {
+ "name": "Bretland"
+ },
+ "BN": {
+ "name": "Brúnei"
+ },
+ "BG": {
+ "name": "Búlgaría"
+ },
+ "BF": {
+ "name": "Búrkína Fasó"
+ },
+ "BI": {
+ "name": "Búrúndí"
+ },
+ "BT": {
+ "name": "Bútan"
+ },
+ "KY": {
+ "name": "Caymaneyjar"
+ },
+ "EA": {
+ "name": "Ceuta og Melilla"
+ },
+ "CK": {
+ "name": "Cooks-eyjar"
+ },
+ "CW": {
+ "name": "Curacao"
+ },
+ "DK": {
+ "name": "Danmörk"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djíbútí"
+ },
+ "DM": {
+ "name": "Dóminíka"
+ },
+ "DO": {
+ "name": "Dóminíska lýðveldið"
+ },
+ "EG": {
+ "name": "Egyptaland"
+ },
+ "EE": {
+ "name": "Eistland"
+ },
+ "EC": {
+ "name": "Ekvador"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "ER": {
+ "name": "Erítrea"
+ },
+ "ET": {
+ "name": "Eþíópía"
+ },
+ "FK": {
+ "name": "Falklandseyjar"
+ },
+ "PH": {
+ "name": "Filippseyjar"
+ },
+ "FI": {
+ "name": "Finnland"
+ },
+ "FJ": {
+ "name": "Fídjieyjar"
+ },
+ "CI": {
+ "name": "Fílabeinsströndin"
+ },
+ "FR": {
+ "name": "Frakkland"
+ },
+ "GF": {
+ "name": "Franska Gvæjana"
+ },
+ "PF": {
+ "name": "Franska Pólýnesía"
+ },
+ "TF": {
+ "name": "Frönsku suðlægu landsvæðin"
+ },
+ "FO": {
+ "name": "Færeyjar"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambía"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GE": {
+ "name": "Georgía"
+ },
+ "GI": {
+ "name": "Gíbraltar"
+ },
+ "GN": {
+ "name": "Gínea"
+ },
+ "GW": {
+ "name": "Gínea-Bissá"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GR": {
+ "name": "Grikkland"
+ },
+ "CV": {
+ "name": "Grænhöfðaeyjar"
+ },
+ "GL": {
+ "name": "Grænland"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GP": {
+ "name": "Gvadelúpeyjar"
+ },
+ "GU": {
+ "name": "Gvam"
+ },
+ "GT": {
+ "name": "Gvatemala"
+ },
+ "GY": {
+ "name": "Gvæjana"
+ },
+ "HT": {
+ "name": "Haítí"
+ },
+ "PS": {
+ "name": "Heimastjórnarsvæði Palestínumanna"
+ },
+ "NL": {
+ "name": "Holland"
+ },
+ "HN": {
+ "name": "Hondúras"
+ },
+ "BY": {
+ "name": "Hvíta-Rússland"
+ },
+ "IN": {
+ "name": "Indland"
+ },
+ "ID": {
+ "name": "Indónesía"
+ },
+ "IQ": {
+ "name": "Ãrak"
+ },
+ "IR": {
+ "name": "Ãran"
+ },
+ "IE": {
+ "name": "Ãrland"
+ },
+ "IS": {
+ "name": "Ãsland"
+ },
+ "IL": {
+ "name": "Ãsrael"
+ },
+ "IT": {
+ "name": "Ãtalía"
+ },
+ "JM": {
+ "name": "Jamaíka"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "CX": {
+ "name": "Jólaey"
+ },
+ "JO": {
+ "name": "Jórdanía"
+ },
+ "KH": {
+ "name": "Kambódía"
+ },
+ "CM": {
+ "name": "Kamerún"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanaríeyjar"
+ },
+ "BQ": {
+ "name": "Karíbahafshluti Hollands"
+ },
+ "KZ": {
+ "name": "Kasakstan"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KE": {
+ "name": "Kenía"
+ },
+ "KG": {
+ "name": "Kirgistan"
+ },
+ "CN": {
+ "name": "Kína"
+ },
+ "KI": {
+ "name": "Kíribatí"
+ },
+ "CG": {
+ "name": "Kongó-Brazzaville"
+ },
+ "CD": {
+ "name": "Kongó-Kinshasa"
+ },
+ "CR": {
+ "name": "Kostaríka"
+ },
+ "CC": {
+ "name": "Kókoseyjar (Keeling)"
+ },
+ "CO": {
+ "name": "Kólumbía"
+ },
+ "KM": {
+ "name": "Kómoreyjar"
+ },
+ "XK": {
+ "name": "Kósóvó"
+ },
+ "HR": {
+ "name": "Króatía"
+ },
+ "CU": {
+ "name": "Kúba"
+ },
+ "KW": {
+ "name": "Kúveit"
+ },
+ "CY": {
+ "name": "Kýpur"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesótó"
+ },
+ "LV": {
+ "name": "Lettland"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Litháen"
+ },
+ "LB": {
+ "name": "Líbanon"
+ },
+ "LR": {
+ "name": "Líbería"
+ },
+ "LY": {
+ "name": "Líbía"
+ },
+ "LU": {
+ "name": "Lúxemborg"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MK": {
+ "name": "Makedónía"
+ },
+ "MY": {
+ "name": "Malasía"
+ },
+ "MW": {
+ "name": "Malaví"
+ },
+ "MV": {
+ "name": "Maldíveyjar"
+ },
+ "ML": {
+ "name": "Malí"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marokkó"
+ },
+ "MH": {
+ "name": "Marshalleyjar"
+ },
+ "MQ": {
+ "name": "Martiník"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MR": {
+ "name": "Máritanía"
+ },
+ "MU": {
+ "name": "Máritíus"
+ },
+ "MX": {
+ "name": "Mexíkó"
+ },
+ "CF": {
+ "name": "Mið-Afríkulýðveldið"
+ },
+ "GQ": {
+ "name": "Miðbaugs-Gínea"
+ },
+ "FM": {
+ "name": "Míkrónesía"
+ },
+ "MM": {
+ "name": "Mjanmar (Búrma)"
+ },
+ "MD": {
+ "name": "Moldóva"
+ },
+ "MN": {
+ "name": "Mongólía"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MC": {
+ "name": "Mónakó"
+ },
+ "MZ": {
+ "name": "Mósambík"
+ },
+ "IM": {
+ "name": "Mön"
+ },
+ "NA": {
+ "name": "Namibía"
+ },
+ "NR": {
+ "name": "Nárú"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nígería"
+ },
+ "NI": {
+ "name": "Níkaragva"
+ },
+ "KP": {
+ "name": "Norður-Kórea"
+ },
+ "MP": {
+ "name": "Norður-Maríanaeyjar"
+ },
+ "NO": {
+ "name": "Noregur"
+ },
+ "NF": {
+ "name": "Norfolkeyja"
+ },
+ "NC": {
+ "name": "Nýja-Kaledónía"
+ },
+ "NZ": {
+ "name": "Nýja-Sjáland"
+ },
+ "OM": {
+ "name": "Óman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palá"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papúa Nýja-Gínea"
+ },
+ "PY": {
+ "name": "Paragvæ"
+ },
+ "PE": {
+ "name": "Perú"
+ },
+ "PN": {
+ "name": "Pitcairn-eyjar"
+ },
+ "PT": {
+ "name": "Portúgal"
+ },
+ "PL": {
+ "name": "Pólland"
+ },
+ "PR": {
+ "name": "Púertó Ríkó"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RW": {
+ "name": "Rúanda"
+ },
+ "RO": {
+ "name": "Rúmenía"
+ },
+ "RU": {
+ "name": "Rússland"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "SB": {
+ "name": "Salómonseyjar"
+ },
+ "ZM": {
+ "name": "Sambía"
+ },
+ "AE": {
+ "name": "Sameinuðu arabísku furstadæmin"
+ },
+ "WS": {
+ "name": "Samóa"
+ },
+ "SM": {
+ "name": "San Marínó"
+ },
+ "SH": {
+ "name": "Sankti Helena"
+ },
+ "KN": {
+ "name": "Sankti Kitts og Nevis"
+ },
+ "LC": {
+ "name": "Sankti Lúsía"
+ },
+ "PM": {
+ "name": "Sankti Pierre og Miquelon"
+ },
+ "VC": {
+ "name": "Sankti Vinsent og Grenadíneyjar"
+ },
+ "ST": {
+ "name": "Saó Tóme og Prinsípe"
+ },
+ "SA": {
+ "name": "Sádi-Arabía"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbía"
+ },
+ "SC": {
+ "name": "Seychelles-eyjar"
+ },
+ "ZW": {
+ "name": "Simbabve"
+ },
+ "SG": {
+ "name": "Singapúr"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SL": {
+ "name": "Síerra Leóne"
+ },
+ "CL": {
+ "name": "Síle"
+ },
+ "HK": {
+ "name": "Sjálfstjórnarsvæðið Hong Kong"
+ },
+ "MO": {
+ "name": "Sjálfstjórnarsvæðið Makaó"
+ },
+ "SK": {
+ "name": "Slóvakía"
+ },
+ "SI": {
+ "name": "Slóvenía"
+ },
+ "UM": {
+ "name": "Smáeyjar Bandaríkjanna"
+ },
+ "SO": {
+ "name": "Sómalía"
+ },
+ "ES": {
+ "name": "Spánn"
+ },
+ "LK": {
+ "name": "Srí Lanka"
+ },
+ "ZA": {
+ "name": "Suður-Afríka"
+ },
+ "GS": {
+ "name": "Suður-Georgía og Suður-Sandvíkureyjar"
+ },
+ "KR": {
+ "name": "Suður-Kórea"
+ },
+ "SS": {
+ "name": "Suður-Súdan"
+ },
+ "AQ": {
+ "name": "Suðurskautslandið"
+ },
+ "SD": {
+ "name": "Súdan"
+ },
+ "SR": {
+ "name": "Súrínam"
+ },
+ "SJ": {
+ "name": "Svalbarði og Jan Mayen"
+ },
+ "ME": {
+ "name": "Svartfjallaland"
+ },
+ "SZ": {
+ "name": "Svasíland"
+ },
+ "CH": {
+ "name": "Sviss"
+ },
+ "SE": {
+ "name": "Svíþjóð"
+ },
+ "SY": {
+ "name": "Sýrland"
+ },
+ "TJ": {
+ "name": "Tadsjikistan"
+ },
+ "TH": {
+ "name": "Taíland"
+ },
+ "TW": {
+ "name": "Taívan"
+ },
+ "TZ": {
+ "name": "Tansanía"
+ },
+ "CZ": {
+ "name": "Tékkland"
+ },
+ "TL": {
+ "name": "Tímor-Leste"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TG": {
+ "name": "Tógó"
+ },
+ "TK": {
+ "name": "Tókelá"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TT": {
+ "name": "Trínidad og Tóbagó"
+ },
+ "TD": {
+ "name": "Tsjad"
+ },
+ "TC": {
+ "name": "Turks- og Caicoseyjar"
+ },
+ "TN": {
+ "name": "Túnis"
+ },
+ "TM": {
+ "name": "Túrkmenistan"
+ },
+ "TV": {
+ "name": "Túvalú"
+ },
+ "TR": {
+ "name": "Tyrkland"
+ },
+ "HU": {
+ "name": "Ungverjaland"
+ },
+ "UG": {
+ "name": "Úganda"
+ },
+ "UA": {
+ "name": "Úkraína"
+ },
+ "UY": {
+ "name": "Úrúgvæ"
+ },
+ "UZ": {
+ "name": "Úsbekistan"
+ },
+ "VU": {
+ "name": "Vanúatú"
+ },
+ "VA": {
+ "name": "Vatíkanið"
+ },
+ "VE": {
+ "name": "Venesúela"
+ },
+ "EH": {
+ "name": "Vestur-Sahara"
+ },
+ "VN": {
+ "name": "Víetnam"
+ },
+ "WF": {
+ "name": "Wallis- og Fútúnaeyjar"
+ },
+ "DE": {
+ "name": "Þýskaland"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/it.json b/library/intl/resources/country/it.json
new file mode 100644
index 000000000..779d0b18d
--- /dev/null
+++ b/library/intl/resources/country/it.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antartide"
+ },
+ "AG": {
+ "name": "Antigua e Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudita"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaigian"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrein"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgio"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BY": {
+ "name": "Bielorussia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia-Erzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasile"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambogia"
+ },
+ "CM": {
+ "name": "Camerun"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "CV": {
+ "name": "Capo Verde"
+ },
+ "BQ": {
+ "name": "Caraibi Olandesi"
+ },
+ "EA": {
+ "name": "Ceuta e Melilla"
+ },
+ "TD": {
+ "name": "Ciad"
+ },
+ "CL": {
+ "name": "Cile"
+ },
+ "CN": {
+ "name": "Cina"
+ },
+ "CY": {
+ "name": "Cipro"
+ },
+ "VA": {
+ "name": "Città del Vaticano"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comore"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CG": {
+ "name": "Congo-Brazzaville"
+ },
+ "KP": {
+ "name": "Corea del Nord"
+ },
+ "KR": {
+ "name": "Corea del Sud"
+ },
+ "CI": {
+ "name": "Costa d’Avorio"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croazia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danimarca"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egitto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emirati Arabi Uniti"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopia"
+ },
+ "RU": {
+ "name": "Federazione Russa"
+ },
+ "FJ": {
+ "name": "Figi"
+ },
+ "PH": {
+ "name": "Filippine"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FR": {
+ "name": "Francia"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GS": {
+ "name": "Georgia del Sud e isole Sandwich meridionali"
+ },
+ "DE": {
+ "name": "Germania"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "JM": {
+ "name": "Giamaica"
+ },
+ "JP": {
+ "name": "Giappone"
+ },
+ "GI": {
+ "name": "Gibilterra"
+ },
+ "DJ": {
+ "name": "Gibuti"
+ },
+ "JO": {
+ "name": "Giordania"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Groenlandia"
+ },
+ "GP": {
+ "name": "Guadalupa"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GF": {
+ "name": "Guiana Francese"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Equatoriale"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "IS": {
+ "name": "Islanda"
+ },
+ "AC": {
+ "name": "Isola di Ascensione"
+ },
+ "CX": {
+ "name": "Isola di Christmas"
+ },
+ "IM": {
+ "name": "Isola di Man"
+ },
+ "NF": {
+ "name": "Isola Norfolk"
+ },
+ "AX": {
+ "name": "Isole Aland"
+ },
+ "IC": {
+ "name": "Isole Canarie"
+ },
+ "KY": {
+ "name": "Isole Cayman"
+ },
+ "CC": {
+ "name": "Isole Cocos"
+ },
+ "CK": {
+ "name": "Isole Cook"
+ },
+ "FK": {
+ "name": "Isole Falkland"
+ },
+ "FO": {
+ "name": "Isole Faroe"
+ },
+ "MP": {
+ "name": "Isole Marianne Settentrionali"
+ },
+ "MH": {
+ "name": "Isole Marshall"
+ },
+ "UM": {
+ "name": "Isole minori lontane dagli USA"
+ },
+ "PN": {
+ "name": "Isole Pitcairn"
+ },
+ "SB": {
+ "name": "Isole Solomon"
+ },
+ "TC": {
+ "name": "Isole Turks e Caicos"
+ },
+ "VI": {
+ "name": "Isole Vergini Americane"
+ },
+ "VG": {
+ "name": "Isole Vergini Britanniche"
+ },
+ "IL": {
+ "name": "Israele"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "KZ": {
+ "name": "Kazakistan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KG": {
+ "name": "Kirghizistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Lettonia"
+ },
+ "LB": {
+ "name": "Libano"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Lussemburgo"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldive"
+ },
+ "MY": {
+ "name": "Malesia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marocco"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Messico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambico"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norvegia"
+ },
+ "NC": {
+ "name": "Nuova Caledonia"
+ },
+ "NZ": {
+ "name": "Nuova Zelanda"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "NL": {
+ "name": "Paesi Bassi"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papua Nuova Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perù"
+ },
+ "PF": {
+ "name": "Polinesia Francese"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portogallo"
+ },
+ "PR": {
+ "name": "Portorico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "HK": {
+ "name": "RAS di Hong Kong"
+ },
+ "MO": {
+ "name": "RAS di Macao"
+ },
+ "GB": {
+ "name": "Regno Unito"
+ },
+ "CZ": {
+ "name": "Repubblica Ceca"
+ },
+ "CF": {
+ "name": "Repubblica Centrafricana"
+ },
+ "MK": {
+ "name": "Repubblica di Macedonia"
+ },
+ "DO": {
+ "name": "Repubblica Dominicana"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "EH": {
+ "name": "Sahara Occidentale"
+ },
+ "KN": {
+ "name": "Saint Kitts e Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre e Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vincent e Grenadines"
+ },
+ "BL": {
+ "name": "Saint-Barthélemy"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americane"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "SH": {
+ "name": "Sant’Elena"
+ },
+ "ST": {
+ "name": "São Tomé e Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SK": {
+ "name": "Slovacchia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ES": {
+ "name": "Spagna"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "US": {
+ "name": "Stati Uniti"
+ },
+ "ZA": {
+ "name": "Sudafrica"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SS": {
+ "name": "Sudan del Sud"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard e Jan Mayen"
+ },
+ "SE": {
+ "name": "Svezia"
+ },
+ "CH": {
+ "name": "Svizzera"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "TJ": {
+ "name": "Tagikistan"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TF": {
+ "name": "Territori australi francesi"
+ },
+ "PS": {
+ "name": "Territori palestinesi"
+ },
+ "IO": {
+ "name": "Territorio Britannico dell’Oceano Indiano"
+ },
+ "TL": {
+ "name": "Timor Est"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad e Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turchia"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucraina"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "HU": {
+ "name": "Ungheria"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis e Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ja.json b/library/intl/resources/country/ja.json
new file mode 100644
index 000000000..2ba91fa11
--- /dev/null
+++ b/library/intl/resources/country/ja.json
@@ -0,0 +1,761 @@
+{
+ "IS": {
+ "name": "アイスランド"
+ },
+ "IE": {
+ "name": "アイルランド"
+ },
+ "AZ": {
+ "name": "アゼルãƒã‚¤ã‚¸ãƒ£ãƒ³"
+ },
+ "AC": {
+ "name": "アセンション島"
+ },
+ "AF": {
+ "name": "アフガニスタン"
+ },
+ "US": {
+ "name": "アメリカåˆè¡†å›½"
+ },
+ "AE": {
+ "name": "アラブ首長国連邦"
+ },
+ "DZ": {
+ "name": "アルジェリア"
+ },
+ "AR": {
+ "name": "アルゼンãƒãƒ³"
+ },
+ "AW": {
+ "name": "アルãƒ"
+ },
+ "AL": {
+ "name": "アルãƒãƒ‹ã‚¢"
+ },
+ "AM": {
+ "name": "アルメニア"
+ },
+ "AI": {
+ "name": "アンギラ"
+ },
+ "AO": {
+ "name": "アンゴラ"
+ },
+ "AG": {
+ "name": "アンティグア・ãƒãƒ¼ãƒ–ーダ"
+ },
+ "AD": {
+ "name": "アンドラ"
+ },
+ "YE": {
+ "name": "イエメン"
+ },
+ "GB": {
+ "name": "イギリス"
+ },
+ "IL": {
+ "name": "イスラエル"
+ },
+ "IT": {
+ "name": "イタリア"
+ },
+ "IQ": {
+ "name": "イラク"
+ },
+ "IR": {
+ "name": "イラン"
+ },
+ "IN": {
+ "name": "インド"
+ },
+ "ID": {
+ "name": "インドãƒã‚·ã‚¢"
+ },
+ "WF": {
+ "name": "ウォリス・フツナ"
+ },
+ "UG": {
+ "name": "ウガンダ"
+ },
+ "UA": {
+ "name": "ウクライナ"
+ },
+ "UZ": {
+ "name": "ウズベキスタン"
+ },
+ "UY": {
+ "name": "ウルグアイ"
+ },
+ "EC": {
+ "name": "エクアドル"
+ },
+ "EG": {
+ "name": "エジプト"
+ },
+ "EE": {
+ "name": "エストニア"
+ },
+ "ET": {
+ "name": "エãƒã‚ªãƒ”ã‚¢"
+ },
+ "ER": {
+ "name": "エリトリア"
+ },
+ "SV": {
+ "name": "エルサルãƒãƒ‰ãƒ«"
+ },
+ "AU": {
+ "name": "オーストラリア"
+ },
+ "AT": {
+ "name": "オーストリア"
+ },
+ "AX": {
+ "name": "オーランド諸島"
+ },
+ "OM": {
+ "name": "オマーン"
+ },
+ "NL": {
+ "name": "オランダ"
+ },
+ "BQ": {
+ "name": "オランダ領カリブ"
+ },
+ "GH": {
+ "name": "ガーナ"
+ },
+ "CV": {
+ "name": "カーボベルデ"
+ },
+ "GG": {
+ "name": "ガーンジー"
+ },
+ "GY": {
+ "name": "ガイアナ"
+ },
+ "KZ": {
+ "name": "カザフスタン"
+ },
+ "QA": {
+ "name": "カタール"
+ },
+ "CA": {
+ "name": "カナダ"
+ },
+ "IC": {
+ "name": "カナリア諸島"
+ },
+ "GA": {
+ "name": "ガボン"
+ },
+ "CM": {
+ "name": "カメルーン"
+ },
+ "GM": {
+ "name": "ガンビア"
+ },
+ "KH": {
+ "name": "カンボジア"
+ },
+ "GN": {
+ "name": "ギニア"
+ },
+ "GW": {
+ "name": "ギニアビサウ"
+ },
+ "CY": {
+ "name": "キプロス"
+ },
+ "CU": {
+ "name": "キューãƒ"
+ },
+ "CW": {
+ "name": "キュラソー"
+ },
+ "GR": {
+ "name": "ギリシャ"
+ },
+ "KI": {
+ "name": "キリãƒã‚¹"
+ },
+ "KG": {
+ "name": "キルギス"
+ },
+ "GT": {
+ "name": "グアテマラ"
+ },
+ "GP": {
+ "name": "グアドループ"
+ },
+ "GU": {
+ "name": "グアム"
+ },
+ "KW": {
+ "name": "クウェート"
+ },
+ "CK": {
+ "name": "クック諸島"
+ },
+ "GL": {
+ "name": "グリーンランド"
+ },
+ "CX": {
+ "name": "クリスマス島"
+ },
+ "GE": {
+ "name": "グルジア"
+ },
+ "GD": {
+ "name": "グレナダ"
+ },
+ "HR": {
+ "name": "クロアãƒã‚¢"
+ },
+ "KY": {
+ "name": "ケイマン諸島"
+ },
+ "KE": {
+ "name": "ケニア"
+ },
+ "CI": {
+ "name": "コートジボワール"
+ },
+ "CC": {
+ "name": "ココス(キーリング)諸島"
+ },
+ "CR": {
+ "name": "コスタリカ"
+ },
+ "XK": {
+ "name": "コソボ"
+ },
+ "KM": {
+ "name": "コモロ"
+ },
+ "CO": {
+ "name": "コロンビア"
+ },
+ "CG": {
+ "name": "コンゴ共和国(ブラザビル)"
+ },
+ "CD": {
+ "name": "コンゴ民主共和国(キンシャサ)"
+ },
+ "SA": {
+ "name": "サウジアラビア"
+ },
+ "WS": {
+ "name": "サモア"
+ },
+ "BL": {
+ "name": "サン・ãƒãƒ«ãƒ†ãƒ«ãƒŸãƒ¼å³¶"
+ },
+ "MF": {
+ "name": "サン・マルタン"
+ },
+ "ST": {
+ "name": "サントメ・プリンシペ"
+ },
+ "ZM": {
+ "name": "ザンビア"
+ },
+ "PM": {
+ "name": "サンピエール島・ミクロン島"
+ },
+ "SM": {
+ "name": "サンマリノ"
+ },
+ "SL": {
+ "name": "シエラレオãƒ"
+ },
+ "DJ": {
+ "name": "ジブãƒ"
+ },
+ "GI": {
+ "name": "ジブラルタル"
+ },
+ "JE": {
+ "name": "ジャージー"
+ },
+ "JM": {
+ "name": "ジャマイカ"
+ },
+ "SY": {
+ "name": "シリア"
+ },
+ "SG": {
+ "name": "シンガãƒãƒ¼ãƒ«"
+ },
+ "SX": {
+ "name": "シント・マールテン"
+ },
+ "ZW": {
+ "name": "ジンãƒãƒ–エ"
+ },
+ "CH": {
+ "name": "スイス"
+ },
+ "SE": {
+ "name": "スウェーデン"
+ },
+ "SD": {
+ "name": "スーダン"
+ },
+ "SJ": {
+ "name": "スãƒãƒ¼ãƒ«ãƒãƒ«è«¸å³¶ãƒ»ãƒ¤ãƒ³ãƒžã‚¤ã‚¨ãƒ³å³¶"
+ },
+ "ES": {
+ "name": "スペイン"
+ },
+ "SR": {
+ "name": "スリナム"
+ },
+ "LK": {
+ "name": "スリランカ"
+ },
+ "SK": {
+ "name": "スロãƒã‚­ã‚¢"
+ },
+ "SI": {
+ "name": "スロベニア"
+ },
+ "SZ": {
+ "name": "スワジランド"
+ },
+ "EA": {
+ "name": "セウタ・メリリャ"
+ },
+ "SC": {
+ "name": "セーシェル"
+ },
+ "SN": {
+ "name": "ã‚»ãƒã‚¬ãƒ«"
+ },
+ "RS": {
+ "name": "セルビア"
+ },
+ "KN": {
+ "name": "セントクリストファー・ãƒã‚¤ãƒ“ス"
+ },
+ "VC": {
+ "name": "セントビンセント・グレナディーン諸島"
+ },
+ "SH": {
+ "name": "セントヘレナ"
+ },
+ "LC": {
+ "name": "セントルシア"
+ },
+ "SO": {
+ "name": "ソマリア"
+ },
+ "SB": {
+ "name": "ソロモン諸島"
+ },
+ "TC": {
+ "name": "タークス・カイコス諸島"
+ },
+ "TH": {
+ "name": "タイ"
+ },
+ "TJ": {
+ "name": "タジキスタン"
+ },
+ "TZ": {
+ "name": "タンザニア"
+ },
+ "CZ": {
+ "name": "ãƒã‚§ã‚³å…±å’Œå›½"
+ },
+ "TD": {
+ "name": "ãƒãƒ£ãƒ‰"
+ },
+ "TN": {
+ "name": "ãƒãƒ¥ãƒ‹ã‚¸ã‚¢"
+ },
+ "CL": {
+ "name": "ãƒãƒª"
+ },
+ "TV": {
+ "name": "ツãƒãƒ«"
+ },
+ "DG": {
+ "name": "ディエゴガルシア島"
+ },
+ "DK": {
+ "name": "デンマーク"
+ },
+ "DE": {
+ "name": "ドイツ"
+ },
+ "TG": {
+ "name": "トーゴ"
+ },
+ "TK": {
+ "name": "トケラウ"
+ },
+ "DO": {
+ "name": "ドミニカ共和国"
+ },
+ "DM": {
+ "name": "ドミニカ国"
+ },
+ "TA": {
+ "name": "トリスタン・ダ・クーニャ"
+ },
+ "TT": {
+ "name": "トリニダード・トãƒã‚´"
+ },
+ "TM": {
+ "name": "トルクメニスタン"
+ },
+ "TR": {
+ "name": "トルコ"
+ },
+ "TO": {
+ "name": "トンガ"
+ },
+ "NG": {
+ "name": "ナイジェリア"
+ },
+ "NR": {
+ "name": "ナウル"
+ },
+ "NA": {
+ "name": "ナミビア"
+ },
+ "NU": {
+ "name": "ニウエ島"
+ },
+ "NI": {
+ "name": "ニカラグア"
+ },
+ "NE": {
+ "name": "ニジェール"
+ },
+ "NC": {
+ "name": "ニューカレドニア"
+ },
+ "NZ": {
+ "name": "ニュージーランド"
+ },
+ "NP": {
+ "name": "ãƒãƒ‘ール"
+ },
+ "NF": {
+ "name": "ノーフォーク島"
+ },
+ "NO": {
+ "name": "ノルウェー"
+ },
+ "BH": {
+ "name": "ãƒãƒ¼ãƒ¬ãƒ¼ãƒ³"
+ },
+ "HT": {
+ "name": "ãƒã‚¤ãƒ"
+ },
+ "PK": {
+ "name": "パキスタン"
+ },
+ "VA": {
+ "name": "ãƒãƒã‚«ãƒ³å¸‚国"
+ },
+ "PA": {
+ "name": "パナマ"
+ },
+ "VU": {
+ "name": "ãƒãƒŒã‚¢ãƒ„"
+ },
+ "BS": {
+ "name": "ãƒãƒãƒž"
+ },
+ "PG": {
+ "name": "パプアニューギニア"
+ },
+ "BM": {
+ "name": "ãƒãƒŸãƒ¥ãƒ¼ãƒ€"
+ },
+ "PW": {
+ "name": "パラオ"
+ },
+ "PY": {
+ "name": "パラグアイ"
+ },
+ "BB": {
+ "name": "ãƒãƒ«ãƒãƒ‰ã‚¹"
+ },
+ "PS": {
+ "name": "パレスãƒãƒŠ"
+ },
+ "HU": {
+ "name": "ãƒãƒ³ã‚¬ãƒªãƒ¼"
+ },
+ "BD": {
+ "name": "ãƒãƒ³ã‚°ãƒ©ãƒ‡ã‚·ãƒ¥"
+ },
+ "PN": {
+ "name": "ピトケアン諸島"
+ },
+ "FJ": {
+ "name": "フィジー"
+ },
+ "PH": {
+ "name": "フィリピン"
+ },
+ "FI": {
+ "name": "フィンランド"
+ },
+ "BT": {
+ "name": "ブータン"
+ },
+ "PR": {
+ "name": "プエルトリコ"
+ },
+ "FO": {
+ "name": "フェロー諸島"
+ },
+ "FK": {
+ "name": "フォークランド諸島"
+ },
+ "BR": {
+ "name": "ブラジル"
+ },
+ "FR": {
+ "name": "フランス"
+ },
+ "BG": {
+ "name": "ブルガリア"
+ },
+ "BF": {
+ "name": "ブルキナファソ"
+ },
+ "BN": {
+ "name": "ブルãƒã‚¤"
+ },
+ "BI": {
+ "name": "ブルンジ"
+ },
+ "VN": {
+ "name": "ベトナム"
+ },
+ "BJ": {
+ "name": "ベナン"
+ },
+ "VE": {
+ "name": "ベãƒã‚ºã‚¨ãƒ©"
+ },
+ "BY": {
+ "name": "ベラルーシ"
+ },
+ "BZ": {
+ "name": "ベリーズ"
+ },
+ "PE": {
+ "name": "ペルー"
+ },
+ "BE": {
+ "name": "ベルギー"
+ },
+ "PL": {
+ "name": "ãƒãƒ¼ãƒ©ãƒ³ãƒ‰"
+ },
+ "BA": {
+ "name": "ボスニア・ヘルツェゴビナ"
+ },
+ "BW": {
+ "name": "ボツワナ"
+ },
+ "BO": {
+ "name": "ボリビア"
+ },
+ "PT": {
+ "name": "ãƒãƒ«ãƒˆã‚¬ãƒ«"
+ },
+ "HN": {
+ "name": "ホンジュラス"
+ },
+ "MH": {
+ "name": "マーシャル諸島"
+ },
+ "MK": {
+ "name": "マケドニア"
+ },
+ "MG": {
+ "name": "マダガスカル"
+ },
+ "YT": {
+ "name": "マヨット島"
+ },
+ "MW": {
+ "name": "マラウイ"
+ },
+ "ML": {
+ "name": "マリ"
+ },
+ "MT": {
+ "name": "マルタ"
+ },
+ "MQ": {
+ "name": "マルティニーク"
+ },
+ "MY": {
+ "name": "マレーシア"
+ },
+ "IM": {
+ "name": "マン島"
+ },
+ "FM": {
+ "name": "ミクロãƒã‚·ã‚¢é€£é‚¦"
+ },
+ "MM": {
+ "name": "ミャンマー"
+ },
+ "MX": {
+ "name": "メキシコ"
+ },
+ "MU": {
+ "name": "モーリシャス"
+ },
+ "MR": {
+ "name": "モーリタニア"
+ },
+ "MZ": {
+ "name": "モザンビーク"
+ },
+ "MC": {
+ "name": "モナコ"
+ },
+ "MV": {
+ "name": "モルディブ"
+ },
+ "MD": {
+ "name": "モルドãƒ"
+ },
+ "MA": {
+ "name": "モロッコ"
+ },
+ "MN": {
+ "name": "モンゴル"
+ },
+ "ME": {
+ "name": "モンテãƒã‚°ãƒ­"
+ },
+ "MS": {
+ "name": "モントセラト"
+ },
+ "JO": {
+ "name": "ヨルダン"
+ },
+ "LA": {
+ "name": "ラオス"
+ },
+ "LV": {
+ "name": "ラトビア"
+ },
+ "LT": {
+ "name": "リトアニア"
+ },
+ "LY": {
+ "name": "リビア"
+ },
+ "LI": {
+ "name": "リヒテンシュタイン"
+ },
+ "LR": {
+ "name": "リベリア"
+ },
+ "RO": {
+ "name": "ルーマニア"
+ },
+ "LU": {
+ "name": "ルクセンブルグ"
+ },
+ "RW": {
+ "name": "ルワンダ"
+ },
+ "LS": {
+ "name": "レソト"
+ },
+ "LB": {
+ "name": "レãƒãƒŽãƒ³"
+ },
+ "RE": {
+ "name": "レユニオン島"
+ },
+ "RU": {
+ "name": "ロシア"
+ },
+ "IO": {
+ "name": "英領インド洋地域"
+ },
+ "VG": {
+ "name": "英領ヴァージン諸島"
+ },
+ "EH": {
+ "name": "西サãƒãƒ©"
+ },
+ "GQ": {
+ "name": "赤é“ギニア"
+ },
+ "TW": {
+ "name": "å°æ¹¾"
+ },
+ "KR": {
+ "name": "大韓民国"
+ },
+ "CF": {
+ "name": "中央アフリカ共和国"
+ },
+ "MO": {
+ "name": "中è¯äººæ°‘共和国マカオ特別行政区"
+ },
+ "HK": {
+ "name": "中è¯äººæ°‘共和国香港特別行政区"
+ },
+ "CN": {
+ "name": "中国"
+ },
+ "KP": {
+ "name": "æœé®®æ°‘主主義人民共和国"
+ },
+ "TL": {
+ "name": "æ±ãƒ†ã‚£ãƒ¢ãƒ¼ãƒ«"
+ },
+ "ZA": {
+ "name": "å—アフリカ"
+ },
+ "GS": {
+ "name": "å—ジョージア島・å—サンドイッãƒè«¸å³¶"
+ },
+ "SS": {
+ "name": "å—スーダン"
+ },
+ "AQ": {
+ "name": "å—極"
+ },
+ "JP": {
+ "name": "日本"
+ },
+ "GF": {
+ "name": "ä»é ˜ã‚®ã‚¢ãƒŠ"
+ },
+ "PF": {
+ "name": "ä»é ˜ãƒãƒªãƒã‚·ã‚¢"
+ },
+ "TF": {
+ "name": "ä»é ˜æ¥µå—諸島"
+ },
+ "VI": {
+ "name": "米領ヴァージン諸島"
+ },
+ "AS": {
+ "name": "米領サモア"
+ },
+ "UM": {
+ "name": "米領太平洋諸島"
+ },
+ "MP": {
+ "name": "北マリアナ諸島"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/jgo.json b/library/intl/resources/country/jgo.json
new file mode 100644
index 000000000..f8f649e53
--- /dev/null
+++ b/library/intl/resources/country/jgo.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AR": {
+ "name": "Ajɛntîn"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljɛlî"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "IN": {
+ "name": "ÃndÉ›"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua & Barbuda"
+ },
+ "AO": {
+ "name": "AÅ‹gÉ”Ìla"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BA": {
+ "name": "Bosnia & Herzegovina"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "TD": {
+ "name": "Cât"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CL": {
+ "name": "Cíllɛ"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "EG": {
+ "name": "ÆjíptÉ›"
+ },
+ "EC": {
+ "name": "Ækwandɔ̂"
+ },
+ "ER": {
+ "name": "ÆlitÉ›lÉ›Ìya"
+ },
+ "ES": {
+ "name": "Æspániya"
+ },
+ "ET": {
+ "name": "ÆtiyÉ”pî"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FR": {
+ "name": "Fɛlánci"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IQ": {
+ "name": "Ilâk"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IL": {
+ "name": "Islayɛ̂l"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IT": {
+ "name": "Italî"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japɔ̂n"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "CM": {
+ "name": "Kamɛlûn"
+ },
+ "CA": {
+ "name": "Kanadâ"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "KÉ›Ìnya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CO": {
+ "name": "Kɔllɔmbî"
+ },
+ "KM": {
+ "name": "KÉ”mÉ”ÌlÉ”shi"
+ },
+ "CD": {
+ "name": "KÉ”ÌÅ‹gÉ”-Kinshása"
+ },
+ "CG": {
+ "name": "KÉ”ÌÅ‹gÉ”-MbÉ›lazavîl"
+ },
+ "CI": {
+ "name": "KÉ”Ìt Ndivwâ"
+ },
+ "CU": {
+ "name": "Kúba"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "LÉ›sÉ”ÌtÉ”"
+ },
+ "RE": {
+ "name": "LÉ›Ìuniyɔ̂n"
+ },
+ "LR": {
+ "name": "Libɛrî"
+ },
+ "LY": {
+ "name": "Libî"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "RU": {
+ "name": "Lusî"
+ },
+ "RW": {
+ "name": "Luwánda"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MW": {
+ "name": "Maláwi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Malî"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MG": {
+ "name": "Mándaŋgasɛkâ"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayɔ̂t"
+ },
+ "BR": {
+ "name": "Mbɛlazîl"
+ },
+ "BJ": {
+ "name": "Mbɛnɛ̂ŋ"
+ },
+ "BO": {
+ "name": "Mbɔlivî"
+ },
+ "BW": {
+ "name": "Mbɔtswána"
+ },
+ "BF": {
+ "name": "Mbulukína Fásɔ"
+ },
+ "BI": {
+ "name": "Mbulundí"
+ },
+ "MX": {
+ "name": "Mɛksîk"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MR": {
+ "name": "Mɔlitanî"
+ },
+ "MA": {
+ "name": "Mɔlɔ̂k"
+ },
+ "MZ": {
+ "name": "Mɔzambîk"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namimbî"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Nijɛ̂"
+ },
+ "NG": {
+ "name": "Ninjɛliyâ"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "DE": {
+ "name": "Njáman"
+ },
+ "DJ": {
+ "name": "Njimbúti"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "NÉ”lÉ›vÉ›ÌjÉ›"
+ },
+ "GA": {
+ "name": "Ŋgabɔ̂ŋ"
+ },
+ "GM": {
+ "name": "Ŋgambî"
+ },
+ "GH": {
+ "name": "Ŋgána"
+ },
+ "GR": {
+ "name": "Ŋgɛlɛ̂k"
+ },
+ "GN": {
+ "name": "Ŋginɛ̂"
+ },
+ "GQ": {
+ "name": "ÅŠginɛ̂ ÆkwatÉ”liyâl"
+ },
+ "GW": {
+ "name": "Ŋginɛ̂ Mbisáwu"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Pɛlû"
+ },
+ "SC": {
+ "name": "PÉ›sÉ›ÌshÉ›l"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "ST": {
+ "name": "Sáwɔŋ TÉ”mÉ›Ì nÉ›Ì PÉ›línsipÉ›"
+ },
+ "RS": {
+ "name": "Sɛlɛbî"
+ },
+ "SN": {
+ "name": "Sɛnɛgâl"
+ },
+ "CN": {
+ "name": "Shîn"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SL": {
+ "name": "SiyÉ›Ìla Lɛɔ̂n"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "SO": {
+ "name": "Sɔmalî"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "SH": {
+ "name": "St. Helena"
+ },
+ "KN": {
+ "name": "St. Kitts & Nevis"
+ },
+ "LC": {
+ "name": "St. Lucia"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "PM": {
+ "name": "St. Pierre & Miquelon"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sundân"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swazilân"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Sẅísɛ"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzanî"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TG": {
+ "name": "TÉ”ÌÅ‹gÉ”"
+ },
+ "TT": {
+ "name": "Trinidad & Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunizî"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks & Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UG": {
+ "name": "Uŋgánda"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "VÉ›nÉ›zwÉ›Ìla"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis & Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambî"
+ },
+ "ZW": {
+ "name": "Zimbámbwɛ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/jmc.json b/library/intl/resources/country/jmc.json
new file mode 100644
index 000000000..e57db8007
--- /dev/null
+++ b/library/intl/resources/country/jmc.json
@@ -0,0 +1,761 @@
+{
+ "ZA": {
+ "name": "Afrika Kusini"
+ },
+ "AF": {
+ "name": "Afuganistani"
+ },
+ "IS": {
+ "name": "Aislandi"
+ },
+ "AR": {
+ "name": "Ajentina"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljeria"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua na Barbuda"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "IE": {
+ "name": "Ayalandi"
+ },
+ "AZ": {
+ "name": "Azabajani"
+ },
+ "BB": {
+ "name": "Babadosi"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BH": {
+ "name": "Bahareni"
+ },
+ "BD": {
+ "name": "Bangladeshi"
+ },
+ "BY": {
+ "name": "Belarusi"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia na Hezegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazili"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BF": {
+ "name": "Bukinafaso"
+ },
+ "MG": {
+ "name": "Bukini"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denmaki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekwado"
+ },
+ "SV": {
+ "name": "Elsavado"
+ },
+ "IO": {
+ "name": "Eneo la Uingereza katika Bahari Hindi"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "AE": {
+ "name": "Falme za Kiarabu"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipino"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Ginebisau"
+ },
+ "GQ": {
+ "name": "Ginekweta"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grinlandi"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GP": {
+ "name": "Gwadelupe"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GF": {
+ "name": "Gwiyana ya Ufaransa"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ES": {
+ "name": "Hispania"
+ },
+ "HN": {
+ "name": "Hondurasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungaria"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israeli"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "CF": {
+ "name": "Jamhuri ya Afrika ya Kati"
+ },
+ "CZ": {
+ "name": "Jamhuri ya Cheki"
+ },
+ "DO": {
+ "name": "Jamhuri ya Dominika"
+ },
+ "CD": {
+ "name": "Jamhuri ya Kidemokrasia ya Kongo"
+ },
+ "JP": {
+ "name": "Japani"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibralta"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "GE": {
+ "name": "Jojia"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kameruni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katari"
+ },
+ "KZ": {
+ "name": "Kazakistani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CV": {
+ "name": "Kepuvede"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizistani"
+ },
+ "NF": {
+ "name": "Kisiwa cha Norfok"
+ },
+ "CI": {
+ "name": "Kodivaa"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komoro"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "HR": {
+ "name": "Korasia"
+ },
+ "KP": {
+ "name": "Korea Kaskazini"
+ },
+ "KR": {
+ "name": "Korea Kusini"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CY": {
+ "name": "Kuprosi"
+ },
+ "KW": {
+ "name": "Kuwaiti"
+ },
+ "LA": {
+ "name": "Laosi"
+ },
+ "LU": {
+ "name": "Lasembagi"
+ },
+ "LV": {
+ "name": "Lativia"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Lishenteni"
+ },
+ "LT": {
+ "name": "Litwania"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malesia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "US": {
+ "name": "Marekani"
+ },
+ "MQ": {
+ "name": "Martiniki"
+ },
+ "MK": {
+ "name": "Masedonia"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "FM": {
+ "name": "Mikronesia"
+ },
+ "EG": {
+ "name": "Misri"
+ },
+ "MV": {
+ "name": "Modivu"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrati"
+ },
+ "MU": {
+ "name": "Morisi"
+ },
+ "MR": {
+ "name": "Moritania"
+ },
+ "MA": {
+ "name": "Moroko"
+ },
+ "MZ": {
+ "name": "Msumbiji"
+ },
+ "MM": {
+ "name": "Myama"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "NE": {
+ "name": "Nijeri"
+ },
+ "NG": {
+ "name": "Nijeria"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norwe"
+ },
+ "NC": {
+ "name": "Nyukaledonia"
+ },
+ "NZ": {
+ "name": "Nyuzilandi"
+ },
+ "OM": {
+ "name": "Omani"
+ },
+ "PK": {
+ "name": "Pakistani"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua"
+ },
+ "PY": {
+ "name": "Paragwai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkairni"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PF": {
+ "name": "Polinesia ya Ufaransa"
+ },
+ "PR": {
+ "name": "Pwetoriko"
+ },
+ "RE": {
+ "name": "Riyunioni"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SM": {
+ "name": "Samarino"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa ya Marekani"
+ },
+ "SH": {
+ "name": "Santahelena"
+ },
+ "KN": {
+ "name": "Santakitzi na Nevis"
+ },
+ "LC": {
+ "name": "Santalusia"
+ },
+ "PM": {
+ "name": "Santapieri na Mikeloni"
+ },
+ "VC": {
+ "name": "Santavisenti na Grenadini"
+ },
+ "ST": {
+ "name": "Sao Tome na Principe"
+ },
+ "SA": {
+ "name": "Saudi"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Shelisheli"
+ },
+ "SL": {
+ "name": "Siera Leoni"
+ },
+ "SG": {
+ "name": "Singapoo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "LK": {
+ "name": "Sirilanka"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SR": {
+ "name": "Surinamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandi"
+ },
+ "TW": {
+ "name": "Taiwani"
+ },
+ "TJ": {
+ "name": "Tajikistani"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TL": {
+ "name": "Timori ya Mashariki"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad na Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turukimenistani"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "IR": {
+ "name": "Uajemi"
+ },
+ "BE": {
+ "name": "Ubelgiji"
+ },
+ "FR": {
+ "name": "Ufaransa"
+ },
+ "FI": {
+ "name": "Ufini"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "GR": {
+ "name": "Ugiriki"
+ },
+ "ET": {
+ "name": "Uhabeshi"
+ },
+ "NL": {
+ "name": "Uholanzi"
+ },
+ "GB": {
+ "name": "Uingereza"
+ },
+ "DE": {
+ "name": "Ujerumani"
+ },
+ "PS": {
+ "name": "Ukingo wa Magharibi na Ukanda wa Gaza wa Palestina"
+ },
+ "UA": {
+ "name": "Ukraini"
+ },
+ "PT": {
+ "name": "Ureno"
+ },
+ "UY": {
+ "name": "Urugwai"
+ },
+ "RU": {
+ "name": "Urusi"
+ },
+ "SZ": {
+ "name": "Uswazi"
+ },
+ "SE": {
+ "name": "Uswidi"
+ },
+ "CH": {
+ "name": "Uswisi"
+ },
+ "TR": {
+ "name": "Uturuki"
+ },
+ "UZ": {
+ "name": "Uzibekistani"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietinamu"
+ },
+ "CK": {
+ "name": "Visiwa vya Cook"
+ },
+ "FK": {
+ "name": "Visiwa vya Falkland"
+ },
+ "KY": {
+ "name": "Visiwa vya Kayman"
+ },
+ "MP": {
+ "name": "Visiwa vya Mariana vya Kaskazini"
+ },
+ "MH": {
+ "name": "Visiwa vya Marshal"
+ },
+ "SB": {
+ "name": "Visiwa vya Solomon"
+ },
+ "TC": {
+ "name": "Visiwa vya Turki na Kaiko"
+ },
+ "VI": {
+ "name": "Visiwa vya Virgin vya Marekani"
+ },
+ "VG": {
+ "name": "Visiwa vya Virgin vya Uingereza"
+ },
+ "WF": {
+ "name": "Walis na Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "JO": {
+ "name": "Yordani"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ka.json b/library/intl/resources/country/ka.json
new file mode 100644
index 000000000..72d5d68da
--- /dev/null
+++ b/library/intl/resources/country/ka.json
@@ -0,0 +1,761 @@
+{
+ "AU": {
+ "name": "áƒáƒ•áƒ¡áƒ¢áƒ áƒáƒšáƒ˜áƒ"
+ },
+ "AT": {
+ "name": "áƒáƒ•áƒ¡áƒ¢áƒ áƒ˜áƒ"
+ },
+ "AF": {
+ "name": "áƒáƒ•áƒ¦áƒáƒœáƒ”თი"
+ },
+ "AZ": {
+ "name": "áƒáƒ–ერბáƒáƒ˜áƒ¯áƒáƒœáƒ˜"
+ },
+ "AX": {
+ "name": "áƒáƒšáƒáƒœáƒ“ის კუნძულები"
+ },
+ "AL": {
+ "name": "áƒáƒšáƒ‘áƒáƒœáƒ”თი"
+ },
+ "DZ": {
+ "name": "áƒáƒšáƒŸáƒ˜áƒ áƒ˜"
+ },
+ "AC": {
+ "name": "áƒáƒ›áƒáƒ¦áƒšáƒ”ბის კუნძული"
+ },
+ "US": {
+ "name": "áƒáƒ›áƒ”რიკის შეერთებული შტáƒáƒ¢áƒ”ბი"
+ },
+ "AS": {
+ "name": "áƒáƒ›áƒ”რიკული სáƒáƒ›áƒáƒ"
+ },
+ "AI": {
+ "name": "áƒáƒœáƒ’ვილáƒ"
+ },
+ "AO": {
+ "name": "áƒáƒœáƒ’áƒáƒšáƒ"
+ },
+ "AD": {
+ "name": "áƒáƒœáƒ“áƒáƒ áƒ"
+ },
+ "AQ": {
+ "name": "áƒáƒœáƒ¢áƒáƒ áƒ¥áƒ¢áƒ˜áƒ™áƒ"
+ },
+ "AG": {
+ "name": "áƒáƒœáƒ¢áƒ˜áƒ’ურდრბáƒáƒ áƒ‘უდáƒ"
+ },
+ "AE": {
+ "name": "áƒáƒ áƒáƒ‘თრგáƒáƒ”რთიáƒáƒœáƒ”ბული სáƒáƒáƒ›áƒ˜áƒ áƒáƒ”ბი"
+ },
+ "AR": {
+ "name": "áƒáƒ áƒ’ენტინáƒ"
+ },
+ "AW": {
+ "name": "áƒáƒ áƒ£áƒ‘áƒ"
+ },
+ "VI": {
+ "name": "áƒáƒ¨áƒ¨-ის ვირჯინიის კუნძულები"
+ },
+ "UM": {
+ "name": "áƒáƒ¨áƒ¨-ის შáƒáƒ áƒ”ული კუნძულები"
+ },
+ "NZ": {
+ "name": "áƒáƒ®áƒáƒšáƒ˜ ზელáƒáƒœáƒ“იáƒ"
+ },
+ "NC": {
+ "name": "áƒáƒ®áƒáƒšáƒ˜ კáƒáƒšáƒ”დáƒáƒœáƒ˜áƒ"
+ },
+ "BD": {
+ "name": "ბáƒáƒœáƒ’ლáƒáƒ“ეში"
+ },
+ "BB": {
+ "name": "ბáƒáƒ áƒ‘áƒáƒ“áƒáƒ¡áƒ˜"
+ },
+ "BS": {
+ "name": "ბáƒáƒ°áƒáƒ›áƒ˜áƒ¡ კუნძულები"
+ },
+ "BH": {
+ "name": "ბáƒáƒ°áƒ áƒ”ინი"
+ },
+ "BE": {
+ "name": "ბელგიáƒ"
+ },
+ "BZ": {
+ "name": "ბელიზი"
+ },
+ "BY": {
+ "name": "ბელáƒáƒ áƒ£áƒ¡áƒ˜áƒ"
+ },
+ "BJ": {
+ "name": "ბენინი"
+ },
+ "BM": {
+ "name": "ბერმუდი"
+ },
+ "BO": {
+ "name": "ბáƒáƒšáƒ˜áƒ•áƒ˜áƒ"
+ },
+ "BA": {
+ "name": "ბáƒáƒ¡áƒœáƒ˜áƒ დრჰერცეგáƒáƒ•áƒ˜áƒœáƒ"
+ },
+ "BW": {
+ "name": "ბáƒáƒ¢áƒ¡áƒ•áƒáƒœáƒ"
+ },
+ "BR": {
+ "name": "ბრáƒáƒ–ილიáƒ"
+ },
+ "VG": {
+ "name": "ბრიტáƒáƒœáƒ”თის ვირჯინიის კუნძულები"
+ },
+ "IO": {
+ "name": "ბრიტáƒáƒœáƒ£áƒšáƒ˜ ტერიტáƒáƒ áƒ˜áƒ ინდáƒáƒ”თის áƒáƒ™áƒ”áƒáƒœáƒ”ში"
+ },
+ "BN": {
+ "name": "ბრუნეი"
+ },
+ "BG": {
+ "name": "ბულგáƒáƒ áƒ”თი"
+ },
+ "BF": {
+ "name": "ბურკინáƒ-ფáƒáƒ¡áƒ"
+ },
+ "BI": {
+ "name": "ბურუნდი"
+ },
+ "BT": {
+ "name": "ბუტáƒáƒœáƒ˜"
+ },
+ "GA": {
+ "name": "გáƒáƒ‘áƒáƒœáƒ˜"
+ },
+ "GY": {
+ "name": "გáƒáƒ˜áƒáƒœáƒ"
+ },
+ "GM": {
+ "name": "გáƒáƒ›áƒ‘იáƒ"
+ },
+ "GH": {
+ "name": "გáƒáƒœáƒ"
+ },
+ "DE": {
+ "name": "გერმáƒáƒœáƒ˜áƒ"
+ },
+ "GG": {
+ "name": "გერნსი"
+ },
+ "GP": {
+ "name": "გვáƒáƒ“ელუპე"
+ },
+ "GT": {
+ "name": "გვáƒáƒ¢áƒ”მáƒáƒšáƒ"
+ },
+ "GN": {
+ "name": "გვინეáƒ"
+ },
+ "GW": {
+ "name": "გვინეáƒ-ბისáƒáƒ£"
+ },
+ "GI": {
+ "name": "გიბრáƒáƒšáƒ¢áƒáƒ áƒ˜"
+ },
+ "GD": {
+ "name": "გრენáƒáƒ“áƒ"
+ },
+ "GL": {
+ "name": "გრენლáƒáƒœáƒ“იáƒ"
+ },
+ "GU": {
+ "name": "გუáƒáƒ›áƒ˜"
+ },
+ "DK": {
+ "name": "დáƒáƒœáƒ˜áƒ"
+ },
+ "EH": {
+ "name": "დáƒáƒ¡áƒáƒ•áƒšáƒ”თი სáƒáƒ°áƒáƒ áƒ"
+ },
+ "GB": {
+ "name": "დიდი ბრიტáƒáƒœáƒ”თი"
+ },
+ "DG": {
+ "name": "დიეგáƒ-გáƒáƒ áƒ¡áƒ˜áƒ"
+ },
+ "DM": {
+ "name": "დáƒáƒ›áƒ˜áƒœáƒ˜áƒ™áƒ"
+ },
+ "DO": {
+ "name": "დáƒáƒ›áƒ˜áƒœáƒ˜áƒ™áƒáƒœáƒ˜áƒ¡ რესპუბლიკáƒ"
+ },
+ "EG": {
+ "name": "ეგვიპტე"
+ },
+ "ET": {
+ "name": "ეთიáƒáƒžáƒ˜áƒ"
+ },
+ "EC": {
+ "name": "ეკვáƒáƒ“áƒáƒ áƒ˜"
+ },
+ "GQ": {
+ "name": "ეკვáƒáƒ¢áƒáƒ áƒ£áƒšáƒ˜ გვინეáƒ"
+ },
+ "IQ": {
+ "name": "ერáƒáƒ§áƒ˜"
+ },
+ "ER": {
+ "name": "ერიტრეáƒ"
+ },
+ "ES": {
+ "name": "ესპáƒáƒœáƒ”თი"
+ },
+ "EE": {
+ "name": "ესტáƒáƒœáƒ”თი"
+ },
+ "VU": {
+ "name": "ვáƒáƒœáƒ£áƒáƒ¢áƒ£"
+ },
+ "VE": {
+ "name": "ვენესუელáƒ"
+ },
+ "VN": {
+ "name": "ვიეტნáƒáƒ›áƒ˜"
+ },
+ "ZM": {
+ "name": "ზáƒáƒ›áƒ‘იáƒ"
+ },
+ "ZW": {
+ "name": "ზიმბáƒáƒ‘ვე"
+ },
+ "TR": {
+ "name": "თურქეთი"
+ },
+ "TM": {
+ "name": "თურქმენეთი"
+ },
+ "JM": {
+ "name": "იáƒáƒ›áƒáƒ˜áƒ™áƒ"
+ },
+ "JP": {
+ "name": "იáƒáƒžáƒáƒœáƒ˜áƒ"
+ },
+ "YE": {
+ "name": "იემენი"
+ },
+ "IN": {
+ "name": "ინდáƒáƒ”თი"
+ },
+ "ID": {
+ "name": "ინდáƒáƒœáƒ”ზიáƒ"
+ },
+ "JO": {
+ "name": "იáƒáƒ áƒ“áƒáƒœáƒ˜áƒ"
+ },
+ "IR": {
+ "name": "ირáƒáƒœáƒ˜"
+ },
+ "IE": {
+ "name": "ირლáƒáƒœáƒ“იáƒ"
+ },
+ "IS": {
+ "name": "ისლáƒáƒœáƒ“იáƒ"
+ },
+ "IL": {
+ "name": "ისრáƒáƒ”ლი"
+ },
+ "IT": {
+ "name": "იტáƒáƒšáƒ˜áƒ"
+ },
+ "CV": {
+ "name": "კáƒáƒ‘áƒ-ვერდე"
+ },
+ "KY": {
+ "name": "კáƒáƒ˜áƒ›áƒáƒœáƒ˜áƒ¡ კუნძულები"
+ },
+ "KH": {
+ "name": "კáƒáƒ›áƒ‘áƒáƒ¯áƒ"
+ },
+ "CM": {
+ "name": "კáƒáƒ›áƒ”რუნი"
+ },
+ "CA": {
+ "name": "კáƒáƒœáƒáƒ“áƒ"
+ },
+ "IC": {
+ "name": "კáƒáƒœáƒáƒ áƒ˜áƒ¡ კუნძულები"
+ },
+ "BQ": {
+ "name": "კáƒáƒ áƒ˜áƒ‘ის ნიდერლáƒáƒœáƒ“ები"
+ },
+ "QA": {
+ "name": "კáƒáƒ¢áƒáƒ áƒ˜"
+ },
+ "KE": {
+ "name": "კენიáƒ"
+ },
+ "CY": {
+ "name": "კვიპრáƒáƒ¡áƒ˜"
+ },
+ "KI": {
+ "name": "კირიბáƒáƒ¢áƒ˜"
+ },
+ "CW": {
+ "name": "კიურáƒáƒ¡áƒáƒ"
+ },
+ "CO": {
+ "name": "კáƒáƒšáƒ£áƒ›áƒ‘იáƒ"
+ },
+ "KM": {
+ "name": "კáƒáƒ›áƒáƒ áƒ˜áƒ¡ კუნძულები"
+ },
+ "CG": {
+ "name": "კáƒáƒœáƒ’რ- ბრáƒáƒ–áƒáƒ•áƒ˜áƒšáƒ˜"
+ },
+ "CD": {
+ "name": "კáƒáƒœáƒ’რ- კინშáƒáƒ¡áƒ"
+ },
+ "XK": {
+ "name": "კáƒáƒ¡áƒáƒ•áƒ"
+ },
+ "CR": {
+ "name": "კáƒáƒ¡áƒ¢áƒ-რიკáƒ"
+ },
+ "CI": {
+ "name": "კáƒáƒ¢-დივუáƒáƒ áƒ˜"
+ },
+ "CU": {
+ "name": "კუბáƒ"
+ },
+ "CK": {
+ "name": "კუკის კუნძულები"
+ },
+ "LA": {
+ "name": "ლáƒáƒáƒ¡áƒ˜"
+ },
+ "LV": {
+ "name": "ლáƒáƒ¢áƒ•áƒ˜áƒ"
+ },
+ "LS": {
+ "name": "ლესáƒáƒ—áƒ"
+ },
+ "LB": {
+ "name": "ლიბáƒáƒœáƒ˜"
+ },
+ "LR": {
+ "name": "ლიბერიáƒ"
+ },
+ "LY": {
+ "name": "ლიბიáƒ"
+ },
+ "LT": {
+ "name": "ლიტვáƒ"
+ },
+ "LI": {
+ "name": "ლიხტენშტეინი"
+ },
+ "LU": {
+ "name": "ლუქსემბურგი"
+ },
+ "MG": {
+ "name": "მáƒáƒ“áƒáƒ’áƒáƒ¡áƒ™áƒáƒ áƒ˜"
+ },
+ "MU": {
+ "name": "მáƒáƒ•áƒ áƒ˜áƒ™áƒ˜"
+ },
+ "MR": {
+ "name": "მáƒáƒ•áƒ áƒ˜áƒ¢áƒáƒœáƒ˜áƒ"
+ },
+ "YT": {
+ "name": "მáƒáƒ˜áƒáƒ¢áƒ"
+ },
+ "MO": {
+ "name": "მáƒáƒ™áƒáƒáƒ¡ სპეციáƒáƒšáƒ£áƒ áƒ˜ áƒáƒ“მინისტრáƒáƒªáƒ˜áƒ£áƒšáƒ˜ რეგიáƒáƒœáƒ˜ ჩინეთი"
+ },
+ "MK": {
+ "name": "მáƒáƒ™áƒ”დáƒáƒœáƒ˜áƒ"
+ },
+ "MW": {
+ "name": "მáƒáƒšáƒáƒ•áƒ˜"
+ },
+ "MY": {
+ "name": "მáƒáƒšáƒáƒ˜áƒ–იáƒ"
+ },
+ "MV": {
+ "name": "მáƒáƒšáƒ“ივის კუნძულები"
+ },
+ "ML": {
+ "name": "მáƒáƒšáƒ˜"
+ },
+ "MT": {
+ "name": "მáƒáƒšáƒ¢áƒ"
+ },
+ "MA": {
+ "name": "მáƒáƒ áƒáƒ™áƒ"
+ },
+ "MQ": {
+ "name": "მáƒáƒ áƒ¢áƒ˜áƒœáƒ˜áƒ™áƒ"
+ },
+ "MH": {
+ "name": "მáƒáƒ áƒ¨áƒáƒšáƒ˜áƒ¡ კუნძულები"
+ },
+ "IM": {
+ "name": "მენის კუნძული"
+ },
+ "MX": {
+ "name": "მექსიკáƒ"
+ },
+ "MM": {
+ "name": "მიáƒáƒœáƒ›áƒáƒ áƒ˜ (ბირმáƒ)"
+ },
+ "FM": {
+ "name": "მიკრáƒáƒœáƒ”ზიáƒ"
+ },
+ "MZ": {
+ "name": "მáƒáƒ–áƒáƒ›áƒ‘იკი"
+ },
+ "MD": {
+ "name": "მáƒáƒšáƒ“áƒáƒ•áƒ"
+ },
+ "MC": {
+ "name": "მáƒáƒœáƒáƒ™áƒ"
+ },
+ "MS": {
+ "name": "მáƒáƒœáƒ¡áƒ”რáƒáƒ¢áƒ˜"
+ },
+ "ME": {
+ "name": "მáƒáƒœáƒ¢áƒ”ნეგრáƒ"
+ },
+ "MN": {
+ "name": "მáƒáƒœáƒ¦áƒáƒšáƒ”თი"
+ },
+ "NA": {
+ "name": "ნáƒáƒ›áƒ˜áƒ‘იáƒ"
+ },
+ "NR": {
+ "name": "ნáƒáƒ£áƒ áƒ£"
+ },
+ "NP": {
+ "name": "ნეპáƒáƒšáƒ˜"
+ },
+ "NE": {
+ "name": "ნიგერი"
+ },
+ "NG": {
+ "name": "ნიგერიáƒ"
+ },
+ "NL": {
+ "name": "ნიდერლáƒáƒœáƒ“ები"
+ },
+ "NI": {
+ "name": "ნიკáƒáƒ áƒáƒ’უáƒ"
+ },
+ "NU": {
+ "name": "ნიუე"
+ },
+ "NO": {
+ "name": "ნáƒáƒ áƒ•áƒ”გიáƒ"
+ },
+ "NF": {
+ "name": "ნáƒáƒ áƒ¤áƒáƒšáƒ™áƒ˜áƒ¡ კუნძული"
+ },
+ "OM": {
+ "name": "áƒáƒ›áƒáƒœáƒ˜"
+ },
+ "PK": {
+ "name": "პáƒáƒ™áƒ˜áƒ¡áƒ¢áƒáƒœáƒ˜"
+ },
+ "PW": {
+ "name": "პáƒáƒšáƒáƒ£"
+ },
+ "PS": {
+ "name": "პáƒáƒšáƒ”სტინის ტერიტáƒáƒ áƒ˜áƒ”ბი"
+ },
+ "PA": {
+ "name": "პáƒáƒœáƒáƒ›áƒ"
+ },
+ "PG": {
+ "name": "პáƒáƒžáƒ£áƒ-áƒáƒ®áƒáƒšáƒ˜ გვინეáƒ"
+ },
+ "PY": {
+ "name": "პáƒáƒ áƒáƒ’ვáƒáƒ˜"
+ },
+ "PE": {
+ "name": "პერუ"
+ },
+ "PN": {
+ "name": "პიტკერნის კუნძულები"
+ },
+ "PL": {
+ "name": "პáƒáƒšáƒáƒœáƒ”თი"
+ },
+ "PT": {
+ "name": "პáƒáƒ áƒ¢áƒ£áƒ’áƒáƒšáƒ˜áƒ"
+ },
+ "PR": {
+ "name": "პუერტáƒ-რიკáƒ"
+ },
+ "RE": {
+ "name": "რეუნიáƒáƒœáƒ˜"
+ },
+ "RW": {
+ "name": "რუáƒáƒœáƒ“áƒ"
+ },
+ "RO": {
+ "name": "რუმინეთი"
+ },
+ "RU": {
+ "name": "რუსეთი"
+ },
+ "GR": {
+ "name": "სáƒáƒ‘ერძნეთი"
+ },
+ "SV": {
+ "name": "სáƒáƒšáƒ•áƒáƒ“áƒáƒ áƒ˜"
+ },
+ "WS": {
+ "name": "სáƒáƒ›áƒáƒ"
+ },
+ "ZA": {
+ "name": "სáƒáƒ›áƒ®áƒ áƒ”თ áƒáƒ¤áƒ áƒ˜áƒ™áƒ"
+ },
+ "GS": {
+ "name": "სáƒáƒ›áƒ®áƒ áƒ”თი გეáƒáƒ áƒ’ირდრსáƒáƒ›áƒ®áƒ áƒ”თ სენდვიჩის კუნძულები"
+ },
+ "KR": {
+ "name": "სáƒáƒ›áƒ®áƒ áƒ”თი კáƒáƒ áƒ”áƒ"
+ },
+ "SS": {
+ "name": "სáƒáƒ›áƒ®áƒ áƒ”თი სუდáƒáƒœáƒ˜"
+ },
+ "SM": {
+ "name": "სáƒáƒœ-მáƒáƒ áƒ˜áƒœáƒ"
+ },
+ "ST": {
+ "name": "სáƒáƒœ-ტáƒáƒ›áƒ” დრპრინსიპი"
+ },
+ "SA": {
+ "name": "სáƒáƒ£áƒ“ის áƒáƒ áƒáƒ‘ეთი"
+ },
+ "FR": {
+ "name": "სáƒáƒ¤áƒ áƒáƒœáƒ’ეთი"
+ },
+ "GE": {
+ "name": "სáƒáƒ¥áƒáƒ áƒ—ველáƒ"
+ },
+ "SC": {
+ "name": "სეიშელის კუნძულები"
+ },
+ "BL": {
+ "name": "სენ-ბáƒáƒ áƒ—ლემი"
+ },
+ "MF": {
+ "name": "სენ-მáƒáƒ áƒ¢áƒ”ნი"
+ },
+ "PM": {
+ "name": "სენ-პიერი დრმიკელáƒáƒœáƒ˜"
+ },
+ "SN": {
+ "name": "სენეგáƒáƒšáƒ˜"
+ },
+ "VC": {
+ "name": "სენტ-ვინსენტი დრგრენáƒáƒ“ინები"
+ },
+ "KN": {
+ "name": "სენტ-კიტსი დრნევისი"
+ },
+ "LC": {
+ "name": "სენტ-ლუსიáƒ"
+ },
+ "RS": {
+ "name": "სერბეთი"
+ },
+ "EA": {
+ "name": "სეუტრდრმელილáƒ"
+ },
+ "SZ": {
+ "name": "სვáƒáƒ–ილენდი"
+ },
+ "SL": {
+ "name": "სიერáƒ-ლეáƒáƒœáƒ”"
+ },
+ "SG": {
+ "name": "სინგáƒáƒžáƒ£áƒ áƒ˜"
+ },
+ "SX": {
+ "name": "სინტ-მáƒáƒ áƒ¢áƒ”ნი"
+ },
+ "SY": {
+ "name": "სირიáƒ"
+ },
+ "SK": {
+ "name": "სლáƒáƒ•áƒáƒ™áƒ”თი"
+ },
+ "SI": {
+ "name": "სლáƒáƒ•áƒ”ნიáƒ"
+ },
+ "SB": {
+ "name": "სáƒáƒšáƒáƒ›áƒáƒœáƒ˜áƒ¡ კუნძულები"
+ },
+ "SO": {
+ "name": "სáƒáƒ›áƒáƒšáƒ˜"
+ },
+ "AM": {
+ "name": "სáƒáƒ›áƒ®áƒ”თი"
+ },
+ "SD": {
+ "name": "სუდáƒáƒœáƒ˜"
+ },
+ "SR": {
+ "name": "სურინáƒáƒ›áƒ˜"
+ },
+ "TW": {
+ "name": "ტáƒáƒ˜áƒ•áƒáƒœáƒ˜"
+ },
+ "TH": {
+ "name": "ტáƒáƒ˜áƒšáƒáƒœáƒ“ი"
+ },
+ "TZ": {
+ "name": "ტáƒáƒœáƒ–áƒáƒœáƒ˜áƒ"
+ },
+ "TJ": {
+ "name": "ტáƒáƒ¯áƒ˜áƒ™áƒ”თი"
+ },
+ "TC": {
+ "name": "ტერკსის დრკáƒáƒ˜áƒ™áƒáƒ¡áƒ˜áƒ¡ კუნძულები"
+ },
+ "TL": {
+ "name": "ტიმáƒáƒ -ლეშტი"
+ },
+ "TG": {
+ "name": "ტáƒáƒ’áƒ"
+ },
+ "TK": {
+ "name": "ტáƒáƒ™áƒ”ლáƒáƒ£"
+ },
+ "TO": {
+ "name": "ტáƒáƒœáƒ’áƒ"
+ },
+ "TT": {
+ "name": "ტრინიდáƒáƒ“ი დრტáƒáƒ‘áƒáƒ’áƒ"
+ },
+ "TA": {
+ "name": "ტრისტáƒáƒœ-დáƒ-კუნიáƒ"
+ },
+ "TV": {
+ "name": "ტუვáƒáƒšáƒ£"
+ },
+ "TN": {
+ "name": "ტუნისი"
+ },
+ "UG": {
+ "name": "უგáƒáƒœáƒ“áƒ"
+ },
+ "UZ": {
+ "name": "უზბეკეთი"
+ },
+ "UA": {
+ "name": "უკრáƒáƒ˜áƒœáƒ"
+ },
+ "HU": {
+ "name": "უნგრეთი"
+ },
+ "WF": {
+ "name": "უáƒáƒšáƒ˜áƒ¡áƒ˜ დრფუტუნáƒ"
+ },
+ "UY": {
+ "name": "ურუგვáƒáƒ˜"
+ },
+ "FO": {
+ "name": "ფáƒáƒ áƒ”რის კუნძულები"
+ },
+ "PH": {
+ "name": "ფილიპინები"
+ },
+ "FI": {
+ "name": "ფინეთი"
+ },
+ "FJ": {
+ "name": "ფიჯი"
+ },
+ "FK": {
+ "name": "ფáƒáƒšáƒ™áƒšáƒ”ნდის კუნძულები"
+ },
+ "GF": {
+ "name": "ფრáƒáƒœáƒ’ული გვიáƒáƒœáƒ"
+ },
+ "PF": {
+ "name": "ფრáƒáƒœáƒ’ული პáƒáƒšáƒ˜áƒœáƒ”ზიáƒ"
+ },
+ "TF": {
+ "name": "ფრáƒáƒœáƒ’ული სáƒáƒ›áƒ®áƒ áƒ”თის ტერიტáƒáƒ áƒ˜áƒ”ბი"
+ },
+ "VA": {
+ "name": "ქáƒáƒšáƒáƒ¥áƒ˜ ვáƒáƒ¢áƒ˜áƒ™áƒáƒœáƒ˜"
+ },
+ "CC": {
+ "name": "ქáƒáƒ¥áƒáƒ¡áƒ˜áƒ¡ (კილინგის) კუნძულები"
+ },
+ "KW": {
+ "name": "ქუვეითი"
+ },
+ "KZ": {
+ "name": "ყáƒáƒ–áƒáƒ®áƒ”თი"
+ },
+ "KG": {
+ "name": "ყირგიზეთი"
+ },
+ "SE": {
+ "name": "შვედეთი"
+ },
+ "CH": {
+ "name": "შვეიცáƒáƒ áƒ˜áƒ"
+ },
+ "CX": {
+ "name": "შáƒáƒ‘ის კუნძული"
+ },
+ "SJ": {
+ "name": "შპიცბერგენი დრიáƒáƒœ-მáƒáƒ˜áƒ”ნი"
+ },
+ "LK": {
+ "name": "შრი-ლáƒáƒœáƒ™áƒ"
+ },
+ "TD": {
+ "name": "ჩáƒáƒ“ი"
+ },
+ "CZ": {
+ "name": "ჩეხეთის რესპუბლიკáƒ"
+ },
+ "CL": {
+ "name": "ჩილე"
+ },
+ "CN": {
+ "name": "ჩინეთი"
+ },
+ "MP": {
+ "name": "ჩრდილáƒáƒ”თ მáƒáƒ áƒ˜áƒáƒœáƒáƒ¡ კუნძულები"
+ },
+ "KP": {
+ "name": "ჩრდილáƒáƒ”თი კáƒáƒ áƒ”áƒ"
+ },
+ "CF": {
+ "name": "ცენტრáƒáƒšáƒ£áƒ áƒ˜ áƒáƒ¤áƒ áƒ˜áƒ™áƒ˜áƒ¡ რესპუბლიკáƒ"
+ },
+ "SH": {
+ "name": "წმინდრელენეს კუნძული"
+ },
+ "HR": {
+ "name": "ხáƒáƒ áƒ•áƒáƒ¢áƒ˜áƒ"
+ },
+ "JE": {
+ "name": "ჯერსი"
+ },
+ "DJ": {
+ "name": "ჯიბუტი"
+ },
+ "HT": {
+ "name": "ჰáƒáƒ˜áƒ¢áƒ˜"
+ },
+ "HN": {
+ "name": "ჰáƒáƒœáƒ“ურáƒáƒ¡áƒ˜"
+ },
+ "HK": {
+ "name": "ჰáƒáƒœáƒ™áƒáƒœáƒ’ის სპეციáƒáƒšáƒ£áƒ áƒ˜ áƒáƒ“მინისტრáƒáƒªáƒ˜áƒ£áƒšáƒ˜ რეგიáƒáƒœáƒ˜ ჩინეთი"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/kab.json b/library/intl/resources/country/kab.json
new file mode 100644
index 000000000..e247f8ebf
--- /dev/null
+++ b/library/intl/resources/country/kab.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afɣanistan"
+ },
+ "IO": {
+ "name": "Akal Aglizi deg Ugaraw Ahendi"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AR": {
+ "name": "Arjuntin"
+ },
+ "AM": {
+ "name": "Arminya"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "VA": {
+ "name": "Awanek n Vatikan"
+ },
+ "AZ": {
+ "name": "Azrabijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Baḥrin"
+ },
+ "BD": {
+ "name": "Bangladac"
+ },
+ "BB": {
+ "name": "Barbadus"
+ },
+ "BE": {
+ "name": "Belǧik"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BY": {
+ "name": "Bilarus"
+ },
+ "BZ": {
+ "name": "Biliz"
+ },
+ "BJ": {
+ "name": "Binin"
+ },
+ "BR": {
+ "name": "Brizil"
+ },
+ "BN": {
+ "name": "Bruney"
+ },
+ "BG": {
+ "name": "Bulgari"
+ },
+ "BO": {
+ "name": "Bulivi"
+ },
+ "BI": {
+ "name": "Burandi"
+ },
+ "BF": {
+ "name": "Burkina Fasu"
+ },
+ "BA": {
+ "name": "Busna d Hersek"
+ },
+ "BW": {
+ "name": "Bustwana"
+ },
+ "TD": {
+ "name": "ÄŒad"
+ },
+ "KH": {
+ "name": "Cambudya"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "CZ": {
+ "name": "ÄŒÄek"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CL": {
+ "name": "Cili"
+ },
+ "CY": {
+ "name": "Cipr"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Duminik"
+ },
+ "OM": {
+ "name": "Æuman"
+ },
+ "PS": {
+ "name": "Falisṭin d Ɣezza"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipin"
+ },
+ "FI": {
+ "name": "Finlund"
+ },
+ "FR": {
+ "name": "Fransa"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabun"
+ },
+ "GM": {
+ "name": "Gambya"
+ },
+ "DJ": {
+ "name": "Ǧibuti"
+ },
+ "GD": {
+ "name": "Grunad"
+ },
+ "GL": {
+ "name": "Grunland"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guwana"
+ },
+ "GP": {
+ "name": "Gwadalupi"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatimala"
+ },
+ "GH": {
+ "name": "Ɣana"
+ },
+ "GF": {
+ "name": "Ɣana tafransist"
+ },
+ "GN": {
+ "name": "Ɣinya"
+ },
+ "PG": {
+ "name": "Ɣinya Tamaynut Tapaput"
+ },
+ "GQ": {
+ "name": "Ɣinya Tasebgast"
+ },
+ "GW": {
+ "name": "Ɣinya-Bisaw"
+ },
+ "HT": {
+ "name": "Hayti"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HN": {
+ "name": "Hunduras"
+ },
+ "HU": {
+ "name": "Hungri"
+ },
+ "EC": {
+ "name": "Ikwaá¹­ur"
+ },
+ "ID": {
+ "name": "Indunizi"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "ER": {
+ "name": "Iritiria"
+ },
+ "IS": {
+ "name": "Island"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "EE": {
+ "name": "Istunya"
+ },
+ "IL": {
+ "name": "Izrayil"
+ },
+ "JM": {
+ "name": "Jamyika"
+ },
+ "JP": {
+ "name": "Jappu"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibraltar"
+ },
+ "GE": {
+ "name": "Jiyurji"
+ },
+ "NC": {
+ "name": "Kalidunya Tamaynut"
+ },
+ "CM": {
+ "name": "Kamirun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "KZ": {
+ "name": "Kazaxistan"
+ },
+ "HR": {
+ "name": "Kerwasya"
+ },
+ "KE": {
+ "name": "Kinya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigistan"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CO": {
+ "name": "Kulumbi"
+ },
+ "KM": {
+ "name": "Kumur"
+ },
+ "CG": {
+ "name": "Kungu"
+ },
+ "KP": {
+ "name": "Kurya, Ufella"
+ },
+ "KR": {
+ "name": "Kurya, Wadda"
+ },
+ "CR": {
+ "name": "Kusta Rika"
+ },
+ "CI": {
+ "name": "Kuá¹­ Divwar"
+ },
+ "KW": {
+ "name": "Kuwayt"
+ },
+ "CN": {
+ "name": "Lacin"
+ },
+ "GR": {
+ "name": "Lagris"
+ },
+ "JO": {
+ "name": "Lajurdani"
+ },
+ "AL": {
+ "name": "Lalbani"
+ },
+ "DE": {
+ "name": "Lalman"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LA": {
+ "name": "Laws"
+ },
+ "LI": {
+ "name": "Layctenstan"
+ },
+ "DZ": {
+ "name": "Lezzayer"
+ },
+ "IQ": {
+ "name": "Lɛiraq"
+ },
+ "IN": {
+ "name": "Lhend"
+ },
+ "LR": {
+ "name": "Libirya"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "IE": {
+ "name": "Lirlund"
+ },
+ "LT": {
+ "name": "Liá¹­wanya"
+ },
+ "LS": {
+ "name": "Lizuá¹­u"
+ },
+ "MA": {
+ "name": "Lmerruk"
+ },
+ "LB": {
+ "name": "Lubnan"
+ },
+ "LU": {
+ "name": "Luksamburg"
+ },
+ "YE": {
+ "name": "Lyamen"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madaɣecqer"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldib"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MY": {
+ "name": "Malizya"
+ },
+ "MT": {
+ "name": "Malá¹­"
+ },
+ "MQ": {
+ "name": "Martinik"
+ },
+ "MK": {
+ "name": "Masidwan"
+ },
+ "EG": {
+ "name": "Maá¹£r"
+ },
+ "YT": {
+ "name": "Mayuá¹­"
+ },
+ "MX": {
+ "name": "Meksik"
+ },
+ "FM": {
+ "name": "Mikrunizya"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MD": {
+ "name": "Muldabi"
+ },
+ "MC": {
+ "name": "Munaku"
+ },
+ "MN": {
+ "name": "Mungulya"
+ },
+ "MS": {
+ "name": "Munsirat"
+ },
+ "MU": {
+ "name": "Muris"
+ },
+ "MR": {
+ "name": "Muriá¹­anya"
+ },
+ "MZ": {
+ "name": "Muzembiq"
+ },
+ "MM": {
+ "name": "Myanmar"
+ },
+ "NA": {
+ "name": "Namibya"
+ },
+ "NE": {
+ "name": "Nijer"
+ },
+ "NG": {
+ "name": "Nijirya"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NP": {
+ "name": "Nipal"
+ },
+ "NU": {
+ "name": "Niwi"
+ },
+ "NR": {
+ "name": "Nuru"
+ },
+ "NO": {
+ "name": "Nurvij"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palu"
+ },
+ "PA": {
+ "name": "Panam"
+ },
+ "PY": {
+ "name": "Paragway"
+ },
+ "PE": {
+ "name": "Piru"
+ },
+ "PN": {
+ "name": "Pitkarin"
+ },
+ "PL": {
+ "name": "Pulund"
+ },
+ "PF": {
+ "name": "Pulunizi tafransist"
+ },
+ "PR": {
+ "name": "Purtu Riku"
+ },
+ "PT": {
+ "name": "Purtugal"
+ },
+ "QA": {
+ "name": "Qaá¹­ar"
+ },
+ "RU": {
+ "name": "Rrus"
+ },
+ "RO": {
+ "name": "Rumani"
+ },
+ "RW": {
+ "name": "Ruwanda"
+ },
+ "SV": {
+ "name": "Salvadur"
+ },
+ "WS": {
+ "name": "Samwa"
+ },
+ "AS": {
+ "name": "Samwa Tamarikanit"
+ },
+ "KN": {
+ "name": "San Kits d Nivis"
+ },
+ "LC": {
+ "name": "San LuÄya"
+ },
+ "SM": {
+ "name": "San Marinu"
+ },
+ "PM": {
+ "name": "San Pyar d Miklun"
+ },
+ "VC": {
+ "name": "San Vansu d Grunadin"
+ },
+ "SH": {
+ "name": "Sant Ilina"
+ },
+ "ST": {
+ "name": "Saw Tumi d Pransip"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seycel"
+ },
+ "SG": {
+ "name": "Singafur"
+ },
+ "SN": {
+ "name": "Sinigal"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SL": {
+ "name": "Sira Lyun"
+ },
+ "SK": {
+ "name": "Sluvakya"
+ },
+ "SI": {
+ "name": "Sluvinya"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spanya"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SA": {
+ "name": "Suɛudiya Taɛrabt"
+ },
+ "SO": {
+ "name": "á¹¢umal"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SY": {
+ "name": "Surya"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swazilund"
+ },
+ "SE": {
+ "name": "Swid"
+ },
+ "CH": {
+ "name": "Swis"
+ },
+ "ZA": {
+ "name": "Tafriqt Wadda"
+ },
+ "GB": {
+ "name": "Tagelda Yedduklen"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Ṭanzanya"
+ },
+ "TH": {
+ "name": "Ṭayland"
+ },
+ "TW": {
+ "name": "Ṭaywan"
+ },
+ "IT": {
+ "name": "Ṭelyan"
+ },
+ "CF": {
+ "name": "Tigduda n Tefriqt Talemmast"
+ },
+ "DO": {
+ "name": "Tigduda Taduminikit"
+ },
+ "CD": {
+ "name": "Tigduda Tagdudant n Kungu"
+ },
+ "AE": {
+ "name": "Tigeldunin Yedduklen Taɛrabin"
+ },
+ "FK": {
+ "name": "Tigzirin n Falkland"
+ },
+ "KY": {
+ "name": "Tigzirin n Kamyan"
+ },
+ "CK": {
+ "name": "Tigzirin n Kuk"
+ },
+ "MH": {
+ "name": "Tigzirin n Marcal"
+ },
+ "MP": {
+ "name": "Tigzirin n Maryan Ufella"
+ },
+ "SB": {
+ "name": "Tigzirin n Sulumun"
+ },
+ "CV": {
+ "name": "Tigzirin n yixef azegzaw"
+ },
+ "NF": {
+ "name": "Tigzirin Tinawfukin"
+ },
+ "VG": {
+ "name": "Tigzirin Tiverjiniyin Tigliziyin"
+ },
+ "RE": {
+ "name": "Timlilit"
+ },
+ "NL": {
+ "name": "Timura-Yessakesren"
+ },
+ "TT": {
+ "name": "Ṭrindad d Ṭubagu"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TG": {
+ "name": "Ṭugu"
+ },
+ "TK": {
+ "name": "Ṭuklu"
+ },
+ "TL": {
+ "name": "Tumur Asamar"
+ },
+ "TN": {
+ "name": "Tunes"
+ },
+ "TO": {
+ "name": "Ṭunga"
+ },
+ "TR": {
+ "name": "Ṭurk"
+ },
+ "TC": {
+ "name": "Ṭurk d Tegzirin n Kaykus"
+ },
+ "TM": {
+ "name": "Ṭurkmanistan"
+ },
+ "TV": {
+ "name": "Ṭuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "UÉ£anda"
+ },
+ "UA": {
+ "name": "Ukran"
+ },
+ "AD": {
+ "name": "Undura"
+ },
+ "AI": {
+ "name": "Ungiya"
+ },
+ "AO": {
+ "name": "Ungula"
+ },
+ "AG": {
+ "name": "Untiga d Barbuda"
+ },
+ "UY": {
+ "name": "Urugway"
+ },
+ "AU": {
+ "name": "Ustrali"
+ },
+ "AT": {
+ "name": "Ustriya"
+ },
+ "ET": {
+ "name": "Utyupi"
+ },
+ "UZ": {
+ "name": "Uzbaxistan"
+ },
+ "VU": {
+ "name": "Vanwatu"
+ },
+ "VE": {
+ "name": "Venzwila"
+ },
+ "VN": {
+ "name": "Vyeá¹­nam"
+ },
+ "VI": {
+ "name": "W.D. Tigzirin n Virginya"
+ },
+ "WF": {
+ "name": "Wallis d Futuna"
+ },
+ "US": {
+ "name": "WDM"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "ZM": {
+ "name": "Zambya"
+ },
+ "NZ": {
+ "name": "Ziland Tamaynut"
+ },
+ "ZW": {
+ "name": "Zimbabwi"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/kam.json b/library/intl/resources/country/kam.json
new file mode 100644
index 000000000..f14e98d5e
--- /dev/null
+++ b/library/intl/resources/country/kam.json
@@ -0,0 +1,761 @@
+{
+ "ZA": {
+ "name": "Afrika Kusini"
+ },
+ "AF": {
+ "name": "Afuganistani"
+ },
+ "IS": {
+ "name": "Aislandi"
+ },
+ "AR": {
+ "name": "Ajentina"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljeria"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua na Barbuda"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "IE": {
+ "name": "Ayalandi"
+ },
+ "AZ": {
+ "name": "Azabajani"
+ },
+ "BB": {
+ "name": "Babadosi"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BH": {
+ "name": "Bahareni"
+ },
+ "BD": {
+ "name": "Bangladeshi"
+ },
+ "BY": {
+ "name": "Belarusi"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia na Hezegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazili"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BF": {
+ "name": "Bukinafaso"
+ },
+ "MG": {
+ "name": "Bukini"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denmaki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekwado"
+ },
+ "SV": {
+ "name": "Elsavado"
+ },
+ "IO": {
+ "name": "Eneo la Uingereza katika Bahari Hindi"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "AE": {
+ "name": "Falme za Kiarabu"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipino"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Ginebisau"
+ },
+ "GQ": {
+ "name": "Ginekweta"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grinlandi"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GP": {
+ "name": "Gwadelupe"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GF": {
+ "name": "Gwiyana ya Ufaransa"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ES": {
+ "name": "Hispania"
+ },
+ "HN": {
+ "name": "Hondurasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungaria"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "CK": {
+ "name": "Isiwa sya Cook"
+ },
+ "KY": {
+ "name": "Isiwa sya Kayman"
+ },
+ "SB": {
+ "name": "Isiwa sya Solomon"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israeli"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "CF": {
+ "name": "Jamhuri ya Afrika ya Kati"
+ },
+ "CZ": {
+ "name": "Jamhuri ya Cheki"
+ },
+ "DO": {
+ "name": "Jamhuri ya Dominika"
+ },
+ "CD": {
+ "name": "Jamhuri ya Kidemokrasia ya Kongo"
+ },
+ "JP": {
+ "name": "Japani"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibralta"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "GE": {
+ "name": "Jojia"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kameluni"
+ },
+ "CA": {
+ "name": "Kananda"
+ },
+ "QA": {
+ "name": "Katari"
+ },
+ "KZ": {
+ "name": "Kazakistani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CV": {
+ "name": "Kepuvede"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizistani"
+ },
+ "NF": {
+ "name": "Kisiwa cha Norfok"
+ },
+ "CI": {
+ "name": "Kodivaa"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komoro"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "HR": {
+ "name": "Korasia"
+ },
+ "KP": {
+ "name": "Korea Kaskazini"
+ },
+ "KR": {
+ "name": "Korea Kusini"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CY": {
+ "name": "Kuprosi"
+ },
+ "KW": {
+ "name": "Kuwaiti"
+ },
+ "CN": {
+ "name": "Kyaina"
+ },
+ "LA": {
+ "name": "Laosi"
+ },
+ "LU": {
+ "name": "Lasembagi"
+ },
+ "LV": {
+ "name": "Lativia"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Lishenteni"
+ },
+ "LT": {
+ "name": "Litwania"
+ },
+ "RW": {
+ "name": "Lwanda"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malesia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "US": {
+ "name": "Marekani"
+ },
+ "MQ": {
+ "name": "Martiniki"
+ },
+ "MK": {
+ "name": "Masedonia"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "BI": {
+ "name": "Mbulundi"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "FM": {
+ "name": "Mikronesia"
+ },
+ "EG": {
+ "name": "Misili"
+ },
+ "MV": {
+ "name": "Modivu"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrati"
+ },
+ "MU": {
+ "name": "Morisi"
+ },
+ "MR": {
+ "name": "Moritania"
+ },
+ "MA": {
+ "name": "Moroko"
+ },
+ "MZ": {
+ "name": "Msumbiji"
+ },
+ "MM": {
+ "name": "Myama"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "NE": {
+ "name": "Nijeri"
+ },
+ "NG": {
+ "name": "Nijeria"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norwe"
+ },
+ "NC": {
+ "name": "Nyukaledonia"
+ },
+ "NZ": {
+ "name": "Nyuzilandi"
+ },
+ "ZM": {
+ "name": "Nzambia"
+ },
+ "ZW": {
+ "name": "Nzimbambwe"
+ },
+ "OM": {
+ "name": "Omani"
+ },
+ "PK": {
+ "name": "Pakistani"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua"
+ },
+ "PY": {
+ "name": "Paragwai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkairni"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PF": {
+ "name": "Polinesia ya Ufaransa"
+ },
+ "PR": {
+ "name": "Pwetoriko"
+ },
+ "RE": {
+ "name": "Riyunioni"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "SM": {
+ "name": "Samarino"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa ya Marekani"
+ },
+ "SH": {
+ "name": "Santahelena"
+ },
+ "KN": {
+ "name": "Santakitzi na Nevis"
+ },
+ "LC": {
+ "name": "Santalusia"
+ },
+ "PM": {
+ "name": "Santapieri na Mikeloni"
+ },
+ "VC": {
+ "name": "Santavisenti na Grenadini"
+ },
+ "ST": {
+ "name": "Sao Tome na Principe"
+ },
+ "SA": {
+ "name": "Saudi"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Shelisheli"
+ },
+ "SL": {
+ "name": "Siera Leoni"
+ },
+ "SG": {
+ "name": "Singapoo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "LK": {
+ "name": "Sirilanka"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SR": {
+ "name": "Surinamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandi"
+ },
+ "TW": {
+ "name": "Taiwani"
+ },
+ "TJ": {
+ "name": "Tajikistani"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TL": {
+ "name": "Timori ya Mashariki"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad na Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turukimenistani"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "IR": {
+ "name": "Uajemi"
+ },
+ "BE": {
+ "name": "Ubelgiji"
+ },
+ "FI": {
+ "name": "Ufini"
+ },
+ "GR": {
+ "name": "Ugiriki"
+ },
+ "ET": {
+ "name": "Uhabeshi"
+ },
+ "NL": {
+ "name": "Uholanzi"
+ },
+ "GB": {
+ "name": "Uingereza"
+ },
+ "DE": {
+ "name": "Ujerumani"
+ },
+ "UG": {
+ "name": "Ukanda"
+ },
+ "PS": {
+ "name": "Ukingo wa Magharibi na Ukanda wa Gaza wa Palestina"
+ },
+ "UA": {
+ "name": "Ukraini"
+ },
+ "PT": {
+ "name": "Ureno"
+ },
+ "UY": {
+ "name": "Urugwai"
+ },
+ "RU": {
+ "name": "Urusi"
+ },
+ "SZ": {
+ "name": "Uswazi"
+ },
+ "SE": {
+ "name": "Uswidi"
+ },
+ "CH": {
+ "name": "Uswisi"
+ },
+ "TR": {
+ "name": "Uturuki"
+ },
+ "FR": {
+ "name": "Uvalanza"
+ },
+ "UZ": {
+ "name": "Uzibekistani"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietinamu"
+ },
+ "FK": {
+ "name": "Visiwa vya Falkland"
+ },
+ "MP": {
+ "name": "Visiwa vya Mariana vya Kaskazini"
+ },
+ "MH": {
+ "name": "Visiwa vya Marshal"
+ },
+ "TC": {
+ "name": "Visiwa vya Turki na Kaiko"
+ },
+ "VI": {
+ "name": "Visiwa vya Virgin vya Marekani"
+ },
+ "VG": {
+ "name": "Visiwa vya Virgin vya Uingereza"
+ },
+ "WF": {
+ "name": "Walis na Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "JO": {
+ "name": "Yordani"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/kde.json b/library/intl/resources/country/kde.json
new file mode 100644
index 000000000..6f68bfaed
--- /dev/null
+++ b/library/intl/resources/country/kde.json
@@ -0,0 +1,761 @@
+{
+ "AR": {
+ "name": "Adyentina"
+ },
+ "ZA": {
+ "name": "Afilika Kusini"
+ },
+ "AF": {
+ "name": "Afuganistani"
+ },
+ "IS": {
+ "name": "Aislandi"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljelia"
+ },
+ "AM": {
+ "name": "Almenia"
+ },
+ "AW": {
+ "name": "Aluba"
+ },
+ "AD": {
+ "name": "Andola"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Angwila"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua na Balbuda"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Austlalia"
+ },
+ "AT": {
+ "name": "Austlia"
+ },
+ "IE": {
+ "name": "Ayalandi"
+ },
+ "AZ": {
+ "name": "Azabadyani"
+ },
+ "BB": {
+ "name": "Babadosi"
+ },
+ "BH": {
+ "name": "Bahaleni"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BD": {
+ "name": "Bangladeshi"
+ },
+ "BY": {
+ "name": "Belalusi"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BM": {
+ "name": "Belmuda"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BR": {
+ "name": "Blazili"
+ },
+ "BN": {
+ "name": "Blunei"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia na Hezegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BF": {
+ "name": "Buchinafaso"
+ },
+ "MG": {
+ "name": "Bukini"
+ },
+ "BG": {
+ "name": "Bulgalia"
+ },
+ "BI": {
+ "name": "Bulundi"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CK": {
+ "name": "Chisiwa cha Cook"
+ },
+ "FK": {
+ "name": "Chisiwa cha Falkland"
+ },
+ "KY": {
+ "name": "Chisiwa cha Kemen"
+ },
+ "MH": {
+ "name": "Chisiwa cha Malushal"
+ },
+ "MP": {
+ "name": "Chisiwa cha Marian cha Kasikazini"
+ },
+ "NF": {
+ "name": "Chisiwa cha Nolufok"
+ },
+ "SB": {
+ "name": "Chisiwa cha Solomon"
+ },
+ "TC": {
+ "name": "Chisiwa cha Tuluchi na Kaiko"
+ },
+ "VI": {
+ "name": "Chisiwa Chivihi cha Malekani"
+ },
+ "VG": {
+ "name": "Chisiwa Chivihi cha Wingalesa"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denmaki"
+ },
+ "GI": {
+ "name": "Diblalta"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "AE": {
+ "name": "Dimiliki dya Vakulungwa va Chalabu"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "JM": {
+ "name": "Dyamaika"
+ },
+ "JP": {
+ "name": "Dyapani"
+ },
+ "DJ": {
+ "name": "Dyibuti"
+ },
+ "GE": {
+ "name": "Dyodya"
+ },
+ "EC": {
+ "name": "Ekwado"
+ },
+ "ER": {
+ "name": "Elitilea"
+ },
+ "SV": {
+ "name": "Elsavado"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipino"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Ginebisau"
+ },
+ "GQ": {
+ "name": "Ginekweta"
+ },
+ "GD": {
+ "name": "Glenada"
+ },
+ "GL": {
+ "name": "Glinlandi"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GP": {
+ "name": "Gwadelupe"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GF": {
+ "name": "Gwiyana ya Ufalansa"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ES": {
+ "name": "Hispania"
+ },
+ "HN": {
+ "name": "Hondulasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungalia"
+ },
+ "IQ": {
+ "name": "Ilaki"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IL": {
+ "name": "Islaeli"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "CF": {
+ "name": "Jamuhuli ya Afilika ya Paching’ati"
+ },
+ "CZ": {
+ "name": "Jamuhuli ya Chechi"
+ },
+ "CD": {
+ "name": "Jamuhuli ya Chidemoklasia ya kuKongo"
+ },
+ "DO": {
+ "name": "Jamuhuli ya Dominika"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kameluni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katali"
+ },
+ "KZ": {
+ "name": "Kazachistani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CV": {
+ "name": "Kepuvede"
+ },
+ "KI": {
+ "name": "Kilibati"
+ },
+ "KG": {
+ "name": "Kiligizistani"
+ },
+ "CI": {
+ "name": "Kodivaa"
+ },
+ "HR": {
+ "name": "Kolasia"
+ },
+ "KP": {
+ "name": "Kolea Kasikazini"
+ },
+ "KR": {
+ "name": "Kolea Kusini"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komolo"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostalika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CY": {
+ "name": "Kuplosi"
+ },
+ "KW": {
+ "name": "Kuwaiti"
+ },
+ "LA": {
+ "name": "Laosi"
+ },
+ "LU": {
+ "name": "Lasembagi"
+ },
+ "LV": {
+ "name": "Lativia"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LR": {
+ "name": "Libelia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "IO": {
+ "name": "Lieneo lyaki Nngalesa Nbahali ya Hindi"
+ },
+ "LI": {
+ "name": "Lishenteni"
+ },
+ "LT": {
+ "name": "Litwania"
+ },
+ "RE": {
+ "name": "Liyunioni"
+ },
+ "RO": {
+ "name": "Lomania"
+ },
+ "RW": {
+ "name": "Lwanda"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "US": {
+ "name": "Malekani"
+ },
+ "MY": {
+ "name": "Malesia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MQ": {
+ "name": "Malitiniki"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "YT": {
+ "name": "Maole"
+ },
+ "MK": {
+ "name": "Masedonia"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "FM": {
+ "name": "Mikilonesia"
+ },
+ "EG": {
+ "name": "Misli"
+ },
+ "MV": {
+ "name": "Modivu"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MU": {
+ "name": "Molisi"
+ },
+ "MR": {
+ "name": "Molitania"
+ },
+ "MA": {
+ "name": "Moloko"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "MS": {
+ "name": "Monselati"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MZ": {
+ "name": "Msumbiji"
+ },
+ "MM": {
+ "name": "Myama"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Naulu"
+ },
+ "PS": {
+ "name": "Nchingu wa Magalibi wa Mpanda wa kuGaza wa kuPales"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "NE": {
+ "name": "Nidyeli"
+ },
+ "NG": {
+ "name": "Nidyelia"
+ },
+ "NI": {
+ "name": "Nikalagwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "GB": {
+ "name": "Nngalesa"
+ },
+ "NO": {
+ "name": "Norwe"
+ },
+ "NC": {
+ "name": "Nyukaledonia"
+ },
+ "NZ": {
+ "name": "Nyuzilandi"
+ },
+ "OM": {
+ "name": "Omani"
+ },
+ "PK": {
+ "name": "Pakistani"
+ },
+ "PY": {
+ "name": "Palagwai"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua"
+ },
+ "PE": {
+ "name": "Pelu"
+ },
+ "PN": {
+ "name": "Pitikeluni"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PF": {
+ "name": "Polinesia ya Ufalansa"
+ },
+ "PR": {
+ "name": "Pwetoliko"
+ },
+ "SM": {
+ "name": "Samalino"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa ya Malekani"
+ },
+ "SH": {
+ "name": "Santahelena"
+ },
+ "KN": {
+ "name": "Santakitzi na Nevis"
+ },
+ "LC": {
+ "name": "Santalusia"
+ },
+ "PM": {
+ "name": "Santapieli na Mikeloni"
+ },
+ "VC": {
+ "name": "Santavisenti na Glenadini"
+ },
+ "ST": {
+ "name": "Saotome na Prinsipe"
+ },
+ "SA": {
+ "name": "Saudia"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Shelisheli"
+ },
+ "SL": {
+ "name": "Siela Leoni"
+ },
+ "SY": {
+ "name": "Silia"
+ },
+ "LK": {
+ "name": "Sililanka"
+ },
+ "SG": {
+ "name": "Singapoo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SR": {
+ "name": "Sulinamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TJ": {
+ "name": "Tadikistani"
+ },
+ "TH": {
+ "name": "Tailandi"
+ },
+ "TW": {
+ "name": "Taiwani"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TT": {
+ "name": "Tilinidad na Tobago"
+ },
+ "TL": {
+ "name": "Timoli ya Mashaliki"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TM": {
+ "name": "Tuluchimenistani"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "IR": {
+ "name": "Uadyemi"
+ },
+ "BE": {
+ "name": "Ubelgidi"
+ },
+ "DE": {
+ "name": "Udyerumani"
+ },
+ "FR": {
+ "name": "Ufalansa"
+ },
+ "FI": {
+ "name": "Ufini"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "GR": {
+ "name": "Ugilichi"
+ },
+ "ET": {
+ "name": "Uhabeshi"
+ },
+ "NL": {
+ "name": "Uholanzi"
+ },
+ "UA": {
+ "name": "Uklaini"
+ },
+ "PT": {
+ "name": "Uleno"
+ },
+ "UY": {
+ "name": "Ulugwai"
+ },
+ "RU": {
+ "name": "Ulusi"
+ },
+ "SZ": {
+ "name": "Uswazi"
+ },
+ "SE": {
+ "name": "Uswidi"
+ },
+ "CH": {
+ "name": "Uswisi"
+ },
+ "TR": {
+ "name": "Utuluchi"
+ },
+ "UZ": {
+ "name": "Uzibechistani"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietinamu"
+ },
+ "WF": {
+ "name": "Walis na Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "JO": {
+ "name": "Yordani"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/kea.json b/library/intl/resources/country/kea.json
new file mode 100644
index 000000000..426744a03
--- /dev/null
+++ b/library/intl/resources/country/kea.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afeganistãu"
+ },
+ "ZA": {
+ "name": "Afrika di Sul"
+ },
+ "HT": {
+ "name": "Aiti"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alimanha"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AI": {
+ "name": "Angila"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AQ": {
+ "name": "Antartika"
+ },
+ "AG": {
+ "name": "Antigua i Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudita"
+ },
+ "DZ": {
+ "name": "Arjelia"
+ },
+ "AR": {
+ "name": "Arjentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijãu"
+ },
+ "BS": {
+ "name": "Baamas"
+ },
+ "BD": {
+ "name": "Bangladexi"
+ },
+ "BH": {
+ "name": "Barain"
+ },
+ "BB": {
+ "name": "Barbadus"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BZ": {
+ "name": "Belizi"
+ },
+ "BE": {
+ "name": "Béljika"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia-Erzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Fasu"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butãu"
+ },
+ "DG": {
+ "name": "Diegu Garsia"
+ },
+ "DK": {
+ "name": "Dinamarka"
+ },
+ "DJ": {
+ "name": "Djibuti"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EG": {
+ "name": "Ejitu"
+ },
+ "EC": {
+ "name": "Ekuador"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiradus Arabi Unidu"
+ },
+ "FJ": {
+ "name": "Fidji"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FR": {
+ "name": "Fransa"
+ },
+ "GA": {
+ "name": "Gabãu"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GG": {
+ "name": "Gernzi"
+ },
+ "GY": {
+ "name": "Giana"
+ },
+ "GF": {
+ "name": "Giana Franseza"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GQ": {
+ "name": "Gine Ekuatorial"
+ },
+ "GW": {
+ "name": "Gine-Bisau"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Gresia"
+ },
+ "GL": {
+ "name": "Gronelandia"
+ },
+ "GP": {
+ "name": "Guadalupi"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatimala"
+ },
+ "YE": {
+ "name": "Iemen"
+ },
+ "AC": {
+ "name": "Ilha di Asensãu"
+ },
+ "IM": {
+ "name": "Ilha di Man"
+ },
+ "CX": {
+ "name": "Ilha di Natal"
+ },
+ "AX": {
+ "name": "Ilhas Ã…land"
+ },
+ "IO": {
+ "name": "Ilhas Britanika di Indiku"
+ },
+ "FO": {
+ "name": "Ilhas Faroe"
+ },
+ "KY": {
+ "name": "Ilhas Kaimãu"
+ },
+ "CC": {
+ "name": "Ilhas Kokus"
+ },
+ "CK": {
+ "name": "Ilhas Kuk"
+ },
+ "FK": {
+ "name": "Ilhas Malvinas"
+ },
+ "MP": {
+ "name": "Ilhas Marianas di Norti"
+ },
+ "MH": {
+ "name": "Ilhas Marxal"
+ },
+ "MU": {
+ "name": "Ilhas Maurisia"
+ },
+ "UM": {
+ "name": "Ilhas Minoris Distantis de Stadus Unidus"
+ },
+ "NF": {
+ "name": "Ilhas Norfolk"
+ },
+ "SB": {
+ "name": "Ilhas Salumon"
+ },
+ "TC": {
+ "name": "Ilhas Turkas i Kaikus"
+ },
+ "VG": {
+ "name": "Ilhas Virjens Britanikas"
+ },
+ "VI": {
+ "name": "Ilhas Virjens Merkanu"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonezia"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "ER": {
+ "name": "Iritreia"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "IR": {
+ "name": "Iron"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "ET": {
+ "name": "Itiopia"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "JP": {
+ "name": "Japãu"
+ },
+ "GS": {
+ "name": "Jeórjia di Sul i Ilhas di Sanduixi di Sul"
+ },
+ "JE": {
+ "name": "Jersi"
+ },
+ "GI": {
+ "name": "Jibraltar"
+ },
+ "GE": {
+ "name": "Jiorjia"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "CV": {
+ "name": "Kabu Verdi"
+ },
+ "CM": {
+ "name": "Kamarõis"
+ },
+ "KH": {
+ "name": "Kambodja"
+ },
+ "KM": {
+ "name": "Kamoris"
+ },
+ "CA": {
+ "name": "Kanadá"
+ },
+ "IC": {
+ "name": "Kanárias"
+ },
+ "BQ": {
+ "name": "Karaibas olandes"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KZ": {
+ "name": "Kazakistãu"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirgiston"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CG": {
+ "name": "Kongu - Brazavili"
+ },
+ "CD": {
+ "name": "Kongu - Kinxasa"
+ },
+ "KP": {
+ "name": "Koreia di Norti"
+ },
+ "KR": {
+ "name": "Koreia di Sul"
+ },
+ "CI": {
+ "name": "Kosta di Marfin"
+ },
+ "CR": {
+ "name": "Kosta Rika"
+ },
+ "XK": {
+ "name": "Kozovu"
+ },
+ "HR": {
+ "name": "Kroasia"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kueiti"
+ },
+ "CO": {
+ "name": "Kulombia"
+ },
+ "CW": {
+ "name": "Kurasau"
+ },
+ "LA": {
+ "name": "Laus"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LS": {
+ "name": "Lezotu"
+ },
+ "LB": {
+ "name": "Libanu"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LI": {
+ "name": "Lixenstain"
+ },
+ "LU": {
+ "name": "Luxemburgu"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "YT": {
+ "name": "Maiote"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MY": {
+ "name": "Malazia"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marokus"
+ },
+ "MQ": {
+ "name": "Martinika"
+ },
+ "MK": {
+ "name": "Masidonia"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MX": {
+ "name": "Mexiku"
+ },
+ "MM": {
+ "name": "Mianmar"
+ },
+ "FM": {
+ "name": "Mikronezia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Monaku"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "MS": {
+ "name": "Monserat"
+ },
+ "ME": {
+ "name": "Montenegru"
+ },
+ "MZ": {
+ "name": "Musambiki"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NE": {
+ "name": "Nijer"
+ },
+ "NG": {
+ "name": "Nijeria"
+ },
+ "NI": {
+ "name": "Nikaragua"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nova Kalidonia"
+ },
+ "NZ": {
+ "name": "Nova Zilandia"
+ },
+ "NL": {
+ "name": "Olanda"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "HN": {
+ "name": "Onduras"
+ },
+ "PK": {
+ "name": "Pakistãu"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palistina"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua-Nova Gine"
+ },
+ "PY": {
+ "name": "Paraguai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pirkairn"
+ },
+ "PF": {
+ "name": "Polinezia Franseza"
+ },
+ "PR": {
+ "name": "Portu Riku"
+ },
+ "PL": {
+ "name": "Pulonia"
+ },
+ "PT": {
+ "name": "Purtugal"
+ },
+ "GB": {
+ "name": "Reinu Unidu"
+ },
+ "MO": {
+ "name": "Rejiãu Administrativu Special di Makau"
+ },
+ "HK": {
+ "name": "Rejiãu Administrativu Special di Ong Kong"
+ },
+ "DO": {
+ "name": "Repúblika Dominikana"
+ },
+ "CF": {
+ "name": "Republika Sentru-Afrikanu"
+ },
+ "CZ": {
+ "name": "Republika Txeka"
+ },
+ "RO": {
+ "name": "Romenia"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RE": {
+ "name": "Runion"
+ },
+ "RU": {
+ "name": "Rúsia"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Merkanu"
+ },
+ "SM": {
+ "name": "San Marinu"
+ },
+ "PM": {
+ "name": "San Piere i Mikelon"
+ },
+ "SH": {
+ "name": "Santa Ilena"
+ },
+ "LC": {
+ "name": "Santa Lúsia"
+ },
+ "EH": {
+ "name": "Sara Osidental"
+ },
+ "BL": {
+ "name": "Sãu Bartolomeu"
+ },
+ "VC": {
+ "name": "Sãu Bisenti i Granadinas"
+ },
+ "KN": {
+ "name": "Sãu Kristovãu i Nevis"
+ },
+ "MF": {
+ "name": "Sãu Martinhu di Fransa"
+ },
+ "SX": {
+ "name": "Sãu Martinhu di Olanda"
+ },
+ "ST": {
+ "name": "Sãu Tume i Prinsipi"
+ },
+ "SC": {
+ "name": "Seixelis"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "SL": {
+ "name": "Sera Lioa"
+ },
+ "RS": {
+ "name": "Servia"
+ },
+ "EA": {
+ "name": "Seuta i Melila"
+ },
+ "SG": {
+ "name": "Singapura"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "ES": {
+ "name": "Spanha"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "US": {
+ "name": "Stadus Unidos di Merka"
+ },
+ "EE": {
+ "name": "Stonia"
+ },
+ "SZ": {
+ "name": "Suazilándia"
+ },
+ "SD": {
+ "name": "Sudãu"
+ },
+ "SS": {
+ "name": "Sudãu di Sul"
+ },
+ "SE": {
+ "name": "Suesia"
+ },
+ "CH": {
+ "name": "Suisa"
+ },
+ "SO": {
+ "name": "Sumalia"
+ },
+ "SR": {
+ "name": "Surinami"
+ },
+ "SJ": {
+ "name": "Svalbard i Jan Maien"
+ },
+ "TJ": {
+ "name": "Tadjikistãu"
+ },
+ "TH": {
+ "name": "Tailandia"
+ },
+ "TW": {
+ "name": "Taiuan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TF": {
+ "name": "Terras Franses di Sul"
+ },
+ "TL": {
+ "name": "Timor Lesti"
+ },
+ "TG": {
+ "name": "Togu"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad i Tobagu"
+ },
+ "TA": {
+ "name": "Tristan da Kunha"
+ },
+ "TN": {
+ "name": "Tunizia"
+ },
+ "TR": {
+ "name": "Turkia"
+ },
+ "TM": {
+ "name": "Turkumenistãu"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "TD": {
+ "name": "Txadi"
+ },
+ "WF": {
+ "name": "Ualis i Futuna"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukrania"
+ },
+ "HU": {
+ "name": "Ungria"
+ },
+ "UY": {
+ "name": "Uruguai"
+ },
+ "UZ": {
+ "name": "Uzbekistãu"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikanu"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "VE": {
+ "name": "Vinizuela"
+ },
+ "CL": {
+ "name": "Xili"
+ },
+ "CN": {
+ "name": "Xina"
+ },
+ "CY": {
+ "name": "Xipri"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabui"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/khq.json b/library/intl/resources/country/khq.json
new file mode 100644
index 000000000..bdbd80aee
--- /dev/null
+++ b/library/intl/resources/country/khq.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afgaanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albaani"
+ },
+ "GB": {
+ "name": "Albaasalaama Marganta"
+ },
+ "DE": {
+ "name": "Almaaɲe"
+ },
+ "DZ": {
+ "name": "Alžeeri"
+ },
+ "VI": {
+ "name": "Ameerik Virgin Gungey"
+ },
+ "US": {
+ "name": "Ameriki Laabu Margantey"
+ },
+ "AS": {
+ "name": "Ameriki Samoa"
+ },
+ "AD": {
+ "name": "Andoora"
+ },
+ "AI": {
+ "name": "Angiiya"
+ },
+ "AO": {
+ "name": "Angoola"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua nda Barbuuda"
+ },
+ "AR": {
+ "name": "Argentine"
+ },
+ "AM": {
+ "name": "Armeeni"
+ },
+ "AW": {
+ "name": "Aruuba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "IS": {
+ "name": "Ayceland"
+ },
+ "AZ": {
+ "name": "Azerbaayijaŋ"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahareen"
+ },
+ "BD": {
+ "name": "Bangladeši"
+ },
+ "BB": {
+ "name": "Barbaados"
+ },
+ "BE": {
+ "name": "Belgiiki"
+ },
+ "BZ": {
+ "name": "Beliizi"
+ },
+ "BJ": {
+ "name": "Beniŋ"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BY": {
+ "name": "Biloriši"
+ },
+ "BO": {
+ "name": "Boolivi"
+ },
+ "BA": {
+ "name": "Bosni nda Herzegovine"
+ },
+ "BW": {
+ "name": "Botswaana"
+ },
+ "BR": {
+ "name": "Breezil"
+ },
+ "IO": {
+ "name": "Britiši Indu teekoo laama"
+ },
+ "VG": {
+ "name": "Britiši Virgin gungey"
+ },
+ "BN": {
+ "name": "Bruunee"
+ },
+ "BG": {
+ "name": "Bulgaari"
+ },
+ "BF": {
+ "name": "Burkina faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Buutaŋ"
+ },
+ "TD": {
+ "name": "Caadu"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "CZ": {
+ "name": "Cek labo"
+ },
+ "CF": {
+ "name": "Centraafriki koyra"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danemark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Doominiki"
+ },
+ "DO": {
+ "name": "Doominiki laboo"
+ },
+ "ET": {
+ "name": "Ecioopi"
+ },
+ "EC": {
+ "name": "Ekwateer"
+ },
+ "ER": {
+ "name": "Eritree"
+ },
+ "ES": {
+ "name": "Espaaɲe"
+ },
+ "EE": {
+ "name": "Estooni"
+ },
+ "FR": {
+ "name": "Faransi"
+ },
+ "GF": {
+ "name": "Faransi Guyaan"
+ },
+ "PF": {
+ "name": "Faransi Polineezi"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipine"
+ },
+ "FI": {
+ "name": "Finlandu"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaabon"
+ },
+ "GH": {
+ "name": "Gaana"
+ },
+ "GM": {
+ "name": "Gambi"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Gine-Bisso"
+ },
+ "GQ": {
+ "name": "Ginee Ekwatorial"
+ },
+ "GE": {
+ "name": "Gorgi"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GD": {
+ "name": "Grenaada"
+ },
+ "GL": {
+ "name": "Grinland"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyaane"
+ },
+ "GP": {
+ "name": "Gwadeluup"
+ },
+ "GT": {
+ "name": "Gwatemaala"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ZA": {
+ "name": "Hawsa Afriki Laboo"
+ },
+ "NL": {
+ "name": "Hollandu"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungaari"
+ },
+ "ID": {
+ "name": "Indoneezi"
+ },
+ "IN": {
+ "name": "Indu laboo"
+ },
+ "IQ": {
+ "name": "Iraak"
+ },
+ "IR": {
+ "name": "Iraan"
+ },
+ "RU": {
+ "name": "Iriši laboo"
+ },
+ "IE": {
+ "name": "Irlandu"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israyel"
+ },
+ "IT": {
+ "name": "Itaali"
+ },
+ "JP": {
+ "name": "Jaapoŋ"
+ },
+ "JM": {
+ "name": "Jamaayik"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "DJ": {
+ "name": "Jibuuti"
+ },
+ "NC": {
+ "name": "Kaaledooni Taagaa"
+ },
+ "KZ": {
+ "name": "Kaazakstan"
+ },
+ "FK": {
+ "name": "Kalkan gungey"
+ },
+ "KH": {
+ "name": "Kamboogi"
+ },
+ "CM": {
+ "name": "Kameruun"
+ },
+ "CA": {
+ "name": "Kanaada"
+ },
+ "CV": {
+ "name": "Kapuver gungey"
+ },
+ "QA": {
+ "name": "Kataar"
+ },
+ "KY": {
+ "name": "Kayman gungey"
+ },
+ "KE": {
+ "name": "Keeniya"
+ },
+ "KI": {
+ "name": "Kiribaati"
+ },
+ "CO": {
+ "name": "Kolombi"
+ },
+ "KM": {
+ "name": "Komoor"
+ },
+ "CG": {
+ "name": "Kongoo"
+ },
+ "CD": {
+ "name": "Kongoo demookaratiki laboo"
+ },
+ "KP": {
+ "name": "Kooree, Gurma"
+ },
+ "KR": {
+ "name": "Kooree, Hawsa"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kosta rika"
+ },
+ "HR": {
+ "name": "Krwaasi"
+ },
+ "CI": {
+ "name": "Kudwar"
+ },
+ "CU": {
+ "name": "Kuuba"
+ },
+ "CK": {
+ "name": "Kuuk gungey"
+ },
+ "KW": {
+ "name": "Kuweet"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "AE": {
+ "name": "Laaraw Imaarawey Margantey"
+ },
+ "LA": {
+ "name": "Laawos"
+ },
+ "LS": {
+ "name": "Leesoto"
+ },
+ "LV": {
+ "name": "Letooni"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LY": {
+ "name": "Liibi"
+ },
+ "LT": {
+ "name": "Lituaani"
+ },
+ "LB": {
+ "name": "Lubnaan"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MK": {
+ "name": "Maacedooni"
+ },
+ "ML": {
+ "name": "Maali"
+ },
+ "MA": {
+ "name": "Maarok"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malaawi"
+ },
+ "MV": {
+ "name": "Maldiivu"
+ },
+ "MY": {
+ "name": "Maleezi"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MP": {
+ "name": "Mariana Gurma Gungey"
+ },
+ "MH": {
+ "name": "Maršal gungey"
+ },
+ "MQ": {
+ "name": "Martiniiki"
+ },
+ "MM": {
+ "name": "Maynamar"
+ },
+ "YT": {
+ "name": "Mayooti"
+ },
+ "MX": {
+ "name": "Mexiki"
+ },
+ "FM": {
+ "name": "Mikronezi"
+ },
+ "EG": {
+ "name": "Misra"
+ },
+ "MD": {
+ "name": "Moldovi"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongooli"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MU": {
+ "name": "Mooris gungey"
+ },
+ "MR": {
+ "name": "Mooritaani"
+ },
+ "MZ": {
+ "name": "Mozambik"
+ },
+ "NG": {
+ "name": "Naajiriia"
+ },
+ "NA": {
+ "name": "Naamibi"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Neepal"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NE": {
+ "name": "Nižer"
+ },
+ "NF": {
+ "name": "Norfolk Gungoo"
+ },
+ "NO": {
+ "name": "Norveej"
+ },
+ "OM": {
+ "name": "Omaan"
+ },
+ "AU": {
+ "name": "Ostraali"
+ },
+ "AT": {
+ "name": "Otriši"
+ },
+ "PK": {
+ "name": "Paakistan"
+ },
+ "PS": {
+ "name": "Palestine Dangay nda Gaaza"
+ },
+ "PW": {
+ "name": "Palu"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Ginee Taaga"
+ },
+ "PY": {
+ "name": "Paraguwey"
+ },
+ "PE": {
+ "name": "Peeru"
+ },
+ "PN": {
+ "name": "Pitikarin"
+ },
+ "PL": {
+ "name": "Poloɲe"
+ },
+ "PR": {
+ "name": "Porto Riko"
+ },
+ "PT": {
+ "name": "Portugaal"
+ },
+ "RE": {
+ "name": "Reenioŋ"
+ },
+ "RO": {
+ "name": "Rumaani"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SV": {
+ "name": "Salvador laboo"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "Sao Tome nda Prinsipe"
+ },
+ "SA": {
+ "name": "Saudiya"
+ },
+ "SL": {
+ "name": "Seera Leon"
+ },
+ "SC": {
+ "name": "Seešel"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "SH": {
+ "name": "Seŋ Helena"
+ },
+ "KN": {
+ "name": "Seŋ Kitts nda Nevis"
+ },
+ "LC": {
+ "name": "Seŋ Lussia"
+ },
+ "PM": {
+ "name": "Seŋ Piyer nda Mikelon"
+ },
+ "VC": {
+ "name": "Seŋvinsaŋ nda Grenadine"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "CL": {
+ "name": "Å iili"
+ },
+ "CN": {
+ "name": "Å iin"
+ },
+ "CY": {
+ "name": "Å iipur"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovaaki"
+ },
+ "SI": {
+ "name": "Sloveeni"
+ },
+ "SB": {
+ "name": "Solomon Gungey"
+ },
+ "SO": {
+ "name": "Somaali"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "LK": {
+ "name": "Srilanka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SR": {
+ "name": "Surinaam"
+ },
+ "SD": {
+ "name": "Suudaŋ"
+ },
+ "SY": {
+ "name": "Suuria"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweede"
+ },
+ "CH": {
+ "name": "Swisu"
+ },
+ "TH": {
+ "name": "Taayiland"
+ },
+ "TW": {
+ "name": "Taayiwan"
+ },
+ "TJ": {
+ "name": "Taažikistan"
+ },
+ "TZ": {
+ "name": "Tanzaani"
+ },
+ "TL": {
+ "name": "Timoor hawsa"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad nda Tobaago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunizi"
+ },
+ "TC": {
+ "name": "Turk nda Kayikos Gungey"
+ },
+ "TR": {
+ "name": "Turki"
+ },
+ "TM": {
+ "name": "Turkmenistaŋ"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukreen"
+ },
+ "JO": {
+ "name": "Urdun"
+ },
+ "UY": {
+ "name": "Uruguwey"
+ },
+ "UZ": {
+ "name": "Uzbeekistan"
+ },
+ "VA": {
+ "name": "Vaatikan Laama"
+ },
+ "VU": {
+ "name": "Vanautu"
+ },
+ "VE": {
+ "name": "Veneezuyeela"
+ },
+ "VN": {
+ "name": "Vietnaam"
+ },
+ "WF": {
+ "name": "Wallis nda Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yaman"
+ },
+ "ZM": {
+ "name": "Zambi"
+ },
+ "NZ": {
+ "name": "Zeelandu Taaga"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ki.json b/library/intl/resources/country/ki.json
new file mode 100644
index 000000000..0d37a4225
--- /dev/null
+++ b/library/intl/resources/country/ki.json
@@ -0,0 +1,761 @@
+{
+ "ZA": {
+ "name": "Afrika Kusini"
+ },
+ "AF": {
+ "name": "Afuganistani"
+ },
+ "IS": {
+ "name": "Aislandi"
+ },
+ "AR": {
+ "name": "Ajentina"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljeria"
+ },
+ "US": {
+ "name": "Amerika"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua na Barbuda"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "IE": {
+ "name": "Ayalandi"
+ },
+ "AZ": {
+ "name": "Azabajani"
+ },
+ "BB": {
+ "name": "Babadosi"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BH": {
+ "name": "Bahareni"
+ },
+ "BD": {
+ "name": "Bangladeshi"
+ },
+ "BY": {
+ "name": "Belarusi"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia na Hezegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazili"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BF": {
+ "name": "Bukinafaso"
+ },
+ "MG": {
+ "name": "Bukini"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "CN": {
+ "name": "Caina"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denmaki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekwado"
+ },
+ "SV": {
+ "name": "Elsavado"
+ },
+ "IO": {
+ "name": "Eneo la Uingereza katika Bahari Hindi"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "AE": {
+ "name": "Falme za Kiarabu"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipino"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Ginebisau"
+ },
+ "GQ": {
+ "name": "Ginekweta"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grinlandi"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GP": {
+ "name": "Gwadelupe"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GF": {
+ "name": "Gwiyana ya Ufaransa"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ES": {
+ "name": "Hispania"
+ },
+ "HN": {
+ "name": "Hondurasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungaria"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israeli"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "CF": {
+ "name": "Jamhuri ya Afrika ya Kati"
+ },
+ "CZ": {
+ "name": "Jamhuri ya Cheki"
+ },
+ "DO": {
+ "name": "Jamhuri ya Dominika"
+ },
+ "CD": {
+ "name": "Jamhuri ya Kidemokrasia ya Kongo"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibralta"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "GE": {
+ "name": "Jojia"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kameruni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katari"
+ },
+ "KZ": {
+ "name": "Kazakistani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CV": {
+ "name": "Kepuvede"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizistani"
+ },
+ "NF": {
+ "name": "Kisiwa cha Norfok"
+ },
+ "CU": {
+ "name": "Kiumba"
+ },
+ "CI": {
+ "name": "Kodivaa"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komoro"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "HR": {
+ "name": "Korasia"
+ },
+ "KP": {
+ "name": "Korea Kaskazini"
+ },
+ "KR": {
+ "name": "Korea Kusini"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "CY": {
+ "name": "Kuprosi"
+ },
+ "KW": {
+ "name": "Kuwaiti"
+ },
+ "LA": {
+ "name": "Laosi"
+ },
+ "LU": {
+ "name": "Lasembagi"
+ },
+ "LV": {
+ "name": "Lativia"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Lishenteni"
+ },
+ "LT": {
+ "name": "Litwania"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malesia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MQ": {
+ "name": "Martiniki"
+ },
+ "MK": {
+ "name": "Masedonia"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "BI": {
+ "name": "Mburundi"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "FM": {
+ "name": "Mikronesia"
+ },
+ "EG": {
+ "name": "Misri"
+ },
+ "MV": {
+ "name": "Modivu"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrati"
+ },
+ "MU": {
+ "name": "Morisi"
+ },
+ "MR": {
+ "name": "Moritania"
+ },
+ "MA": {
+ "name": "Moroko"
+ },
+ "MZ": {
+ "name": "Msumbiji"
+ },
+ "MM": {
+ "name": "Myama"
+ },
+ "NG": {
+ "name": "Nainjeria"
+ },
+ "NA": {
+ "name": "Namimbia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "GH": {
+ "name": "Ngana"
+ },
+ "GB": {
+ "name": "Ngeretha"
+ },
+ "NE": {
+ "name": "Nijeri"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "JP": {
+ "name": "Njabani"
+ },
+ "DE": {
+ "name": "Njeremani"
+ },
+ "JO": {
+ "name": "Njorondani"
+ },
+ "NO": {
+ "name": "Norwe"
+ },
+ "NC": {
+ "name": "Nyukaledonia"
+ },
+ "NZ": {
+ "name": "Nyuzilandi"
+ },
+ "OM": {
+ "name": "Omani"
+ },
+ "PK": {
+ "name": "Pakistani"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua"
+ },
+ "PY": {
+ "name": "Paragwai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkairni"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PF": {
+ "name": "Polinesia ya Ufaransa"
+ },
+ "PR": {
+ "name": "Pwetoriko"
+ },
+ "RE": {
+ "name": "Riyunioni"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SM": {
+ "name": "Samarino"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa ya Marekani"
+ },
+ "SH": {
+ "name": "Santahelena"
+ },
+ "KN": {
+ "name": "Santakitzi na Nevis"
+ },
+ "LC": {
+ "name": "Santalusia"
+ },
+ "PM": {
+ "name": "Santapieri na Mikeloni"
+ },
+ "VC": {
+ "name": "Santavisenti na Grenadini"
+ },
+ "ST": {
+ "name": "Sao Tome na Principe"
+ },
+ "SA": {
+ "name": "Saudi"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Shelisheli"
+ },
+ "SL": {
+ "name": "Siera Leoni"
+ },
+ "SG": {
+ "name": "Singapoo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "LK": {
+ "name": "Sirilanka"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somaria"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SR": {
+ "name": "Surinamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandi"
+ },
+ "TW": {
+ "name": "Taiwani"
+ },
+ "TJ": {
+ "name": "Tajikistani"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TL": {
+ "name": "Timori ya Mashariki"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad na Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turukimenistani"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "IR": {
+ "name": "Uajemi"
+ },
+ "FR": {
+ "name": "Ubaranja"
+ },
+ "BE": {
+ "name": "Ubelgiji"
+ },
+ "FI": {
+ "name": "Ufini"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "GR": {
+ "name": "Ugiriki"
+ },
+ "ET": {
+ "name": "Uhabeshi"
+ },
+ "NL": {
+ "name": "Uholanzi"
+ },
+ "PS": {
+ "name": "Ukingo wa Magharibi na Ukanda wa Gaza wa Palestina"
+ },
+ "UA": {
+ "name": "Ukraini"
+ },
+ "PT": {
+ "name": "Ureno"
+ },
+ "UY": {
+ "name": "Urugwai"
+ },
+ "RU": {
+ "name": "Urusi"
+ },
+ "SZ": {
+ "name": "Uswazi"
+ },
+ "SE": {
+ "name": "Uswidi"
+ },
+ "CH": {
+ "name": "Uswisi"
+ },
+ "TR": {
+ "name": "Uturuki"
+ },
+ "UZ": {
+ "name": "Uzibekistani"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietinamu"
+ },
+ "CK": {
+ "name": "Visiwa vya Cook"
+ },
+ "FK": {
+ "name": "Visiwa vya Falkland"
+ },
+ "KY": {
+ "name": "Visiwa vya Kayman"
+ },
+ "MP": {
+ "name": "Visiwa vya Mariana vya Kaskazini"
+ },
+ "MH": {
+ "name": "Visiwa vya Marshal"
+ },
+ "SB": {
+ "name": "Visiwa vya Solomon"
+ },
+ "TC": {
+ "name": "Visiwa vya Turki na Kaiko"
+ },
+ "VI": {
+ "name": "Visiwa vya Virgin vya Marekani"
+ },
+ "VG": {
+ "name": "Visiwa vya Virgin vya Uingereza"
+ },
+ "WF": {
+ "name": "Walis na Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/kk.json b/library/intl/resources/country/kk.json
new file mode 100644
index 000000000..5262049b3
--- /dev/null
+++ b/library/intl/resources/country/kk.json
@@ -0,0 +1,761 @@
+{
+ "AU": {
+ "name": "ÐвÑтралиÑ"
+ },
+ "AT": {
+ "name": "ÐвÑтриÑ"
+ },
+ "US": {
+ "name": "ÐҚШ"
+ },
+ "VI": {
+ "name": "ÐҚШ-Ñ‚Ñ‹Ò£ Виргин аралдары"
+ },
+ "UM": {
+ "name": "ÐҚШ-Ñ‚Ñ‹Ò£ ішкі кіші аралдары"
+ },
+ "AX": {
+ "name": "Ðланд аралдары"
+ },
+ "AL": {
+ "name": "ÐлбаниÑ"
+ },
+ "DZ": {
+ "name": "Ðлжир"
+ },
+ "AS": {
+ "name": "Ðмерикан СамоаÑÑ‹"
+ },
+ "AI": {
+ "name": "ÐнгильÑ"
+ },
+ "AO": {
+ "name": "Ðнгола"
+ },
+ "AD": {
+ "name": "Ðндорра"
+ },
+ "AQ": {
+ "name": "Ðнтарктика"
+ },
+ "AG": {
+ "name": "Ðнтигуа мен Барбуда"
+ },
+ "AR": {
+ "name": "Ðргентина"
+ },
+ "AM": {
+ "name": "ÐрмениÑ"
+ },
+ "AW": {
+ "name": "Ðруба"
+ },
+ "AF": {
+ "name": "ÐуғанÑтан"
+ },
+ "AZ": {
+ "name": "Әзербайжан"
+ },
+ "SH": {
+ "name": "Әулие Елена аралы"
+ },
+ "BS": {
+ "name": "Багам аралдары"
+ },
+ "BD": {
+ "name": "Бангладеш"
+ },
+ "BB": {
+ "name": "БарбадоÑ"
+ },
+ "EH": {
+ "name": "Ð‘Ð°Ñ‚Ñ‹Ñ Ð¡Ð°Ñ…Ð°Ñ€Ð°"
+ },
+ "BH": {
+ "name": "Бахрейн"
+ },
+ "BY": {
+ "name": "БеларуÑÑŒ"
+ },
+ "BZ": {
+ "name": "Белиз"
+ },
+ "BE": {
+ "name": "БельгиÑ"
+ },
+ "BJ": {
+ "name": "Бенин"
+ },
+ "BM": {
+ "name": "Бермуд аралдары"
+ },
+ "BG": {
+ "name": "БолгариÑ"
+ },
+ "BO": {
+ "name": "БоливиÑ"
+ },
+ "BA": {
+ "name": "БоÑÐ½Ð¸Ñ Ð¶Ó™Ð½Ðµ Герцеговина"
+ },
+ "BW": {
+ "name": "БотÑвана"
+ },
+ "BR": {
+ "name": "БразилиÑ"
+ },
+ "VG": {
+ "name": "Британдық Виргин аралдары"
+ },
+ "BN": {
+ "name": "Бруней"
+ },
+ "BF": {
+ "name": "Буркина-ФаÑо"
+ },
+ "BI": {
+ "name": "Бурунди"
+ },
+ "BT": {
+ "name": "Бутан"
+ },
+ "AE": {
+ "name": "Біріккен Ðраб Эмираттары"
+ },
+ "GB": {
+ "name": "Бірікккен Корольдік"
+ },
+ "VU": {
+ "name": "Вануату"
+ },
+ "VA": {
+ "name": "Ватикан"
+ },
+ "HU": {
+ "name": "ВенгриÑ"
+ },
+ "VE": {
+ "name": "ВенеÑуÑла"
+ },
+ "VN": {
+ "name": "Вьетнам"
+ },
+ "GA": {
+ "name": "Габон"
+ },
+ "HT": {
+ "name": "Гаити"
+ },
+ "GY": {
+ "name": "Гайана"
+ },
+ "GM": {
+ "name": "ГамбиÑ"
+ },
+ "GH": {
+ "name": "Гана"
+ },
+ "GP": {
+ "name": "Гваделупа"
+ },
+ "GT": {
+ "name": "Гватемала"
+ },
+ "GN": {
+ "name": "ГвинеÑ"
+ },
+ "GW": {
+ "name": "ГвинеÑ-БиÑау"
+ },
+ "DE": {
+ "name": "ГерманиÑ"
+ },
+ "GG": {
+ "name": "ГернÑи"
+ },
+ "GI": {
+ "name": "Гибралтар"
+ },
+ "NL": {
+ "name": "ГолландиÑ"
+ },
+ "HN": {
+ "name": "ГондураÑ"
+ },
+ "GD": {
+ "name": "Гренада"
+ },
+ "GL": {
+ "name": "ГренландиÑ"
+ },
+ "GR": {
+ "name": "ГрециÑ"
+ },
+ "GE": {
+ "name": "ГрузиÑ"
+ },
+ "GU": {
+ "name": "Гуам"
+ },
+ "AC": {
+ "name": "Ғибадат аралы"
+ },
+ "DK": {
+ "name": "ДаниÑ"
+ },
+ "JE": {
+ "name": "ДжерÑи"
+ },
+ "DJ": {
+ "name": "Джибути"
+ },
+ "DG": {
+ "name": "Диего-ГарÑиÑ"
+ },
+ "DM": {
+ "name": "Доминика"
+ },
+ "DO": {
+ "name": "Доминикан РеÑпубликаÑÑ‹"
+ },
+ "NZ": {
+ "name": "Жаңа ЗеландиÑ"
+ },
+ "NC": {
+ "name": "Жаңа КаледониÑ"
+ },
+ "JP": {
+ "name": "ЖапониÑ"
+ },
+ "ZM": {
+ "name": "ЗамбиÑ"
+ },
+ "ZW": {
+ "name": "Зимбабве"
+ },
+ "IL": {
+ "name": "Израиль"
+ },
+ "ID": {
+ "name": "ИндонезиÑ"
+ },
+ "JO": {
+ "name": "ИорданиÑ"
+ },
+ "IQ": {
+ "name": "Ирак"
+ },
+ "IR": {
+ "name": "Иран"
+ },
+ "IE": {
+ "name": "ИрландиÑ"
+ },
+ "IS": {
+ "name": "ИÑландиÑ"
+ },
+ "ES": {
+ "name": "ИÑпаниÑ"
+ },
+ "IT": {
+ "name": "ИталиÑ"
+ },
+ "YE": {
+ "name": "Йемен"
+ },
+ "CV": {
+ "name": "Кабо-Верде"
+ },
+ "KY": {
+ "name": "Кайман аралдары"
+ },
+ "KH": {
+ "name": "Камбоджа"
+ },
+ "CM": {
+ "name": "Камерун"
+ },
+ "CA": {
+ "name": "Канада"
+ },
+ "IC": {
+ "name": "Канар аралдары"
+ },
+ "BQ": {
+ "name": "Кариб ÐидерландыÑÑ‹"
+ },
+ "QA": {
+ "name": "Катар"
+ },
+ "KE": {
+ "name": "КениÑ"
+ },
+ "CY": {
+ "name": "Кипр"
+ },
+ "KI": {
+ "name": "Кирибати"
+ },
+ "CC": {
+ "name": "ÐšÐ¾ÐºÐ¾Ñ Ð°Ñ€Ð°Ð»Ð´Ð°Ñ€Ñ‹"
+ },
+ "CO": {
+ "name": "КолумбиÑ"
+ },
+ "KM": {
+ "name": "Комор"
+ },
+ "CD": {
+ "name": "Конго"
+ },
+ "CG": {
+ "name": "Конго-Браззавиль РеÑпубликаÑÑ‹"
+ },
+ "XK": {
+ "name": "КоÑово"
+ },
+ "CR": {
+ "name": "КоÑта-Рика"
+ },
+ "CI": {
+ "name": "Кот-д’Ивуар"
+ },
+ "CX": {
+ "name": "КриÑÑ‚Ð¼Ð°Ñ Ð°Ñ€Ð°Ð»Ñ‹"
+ },
+ "CU": {
+ "name": "Куба"
+ },
+ "KW": {
+ "name": "Кувейт"
+ },
+ "CK": {
+ "name": "Кук аралдары"
+ },
+ "CW": {
+ "name": "КюраÑао"
+ },
+ "KZ": {
+ "name": "ҚазақÑтан"
+ },
+ "KG": {
+ "name": "ҚырғызÑтан"
+ },
+ "CN": {
+ "name": "Қытай"
+ },
+ "HK": {
+ "name": "Қытай Халық РеÑпубликаÑының Гонг-Конг арнайы әкімшілік ауданы"
+ },
+ "MO": {
+ "name": "Қытай Халық РеÑпубликаÑының Макао арнайы әкімшілік ауданы"
+ },
+ "LA": {
+ "name": "ЛаоÑ"
+ },
+ "LV": {
+ "name": "ЛатвиÑ"
+ },
+ "LS": {
+ "name": "ЛеÑото"
+ },
+ "LR": {
+ "name": "ЛибериÑ"
+ },
+ "LY": {
+ "name": "ЛибиÑ"
+ },
+ "LB": {
+ "name": "Ливан"
+ },
+ "LT": {
+ "name": "Литва"
+ },
+ "LI": {
+ "name": "Лихтенштейн"
+ },
+ "LU": {
+ "name": "ЛюкÑембург"
+ },
+ "MU": {
+ "name": "Маврикий"
+ },
+ "MR": {
+ "name": "МавританиÑ"
+ },
+ "MG": {
+ "name": "МадагаÑкар"
+ },
+ "YT": {
+ "name": "Майотта"
+ },
+ "MK": {
+ "name": "МакедониÑ"
+ },
+ "MW": {
+ "name": "Малави"
+ },
+ "MY": {
+ "name": "МалайзиÑ"
+ },
+ "ML": {
+ "name": "Мали"
+ },
+ "MV": {
+ "name": "Мальдив РеÑпубликаÑÑ‹"
+ },
+ "MT": {
+ "name": "Мальта"
+ },
+ "MQ": {
+ "name": "Мартиника"
+ },
+ "MH": {
+ "name": "Маршалл аралдары"
+ },
+ "MX": {
+ "name": "МекÑика"
+ },
+ "FM": {
+ "name": "МикронезиÑ"
+ },
+ "MZ": {
+ "name": "Мозамбик"
+ },
+ "MD": {
+ "name": "Молдова"
+ },
+ "MC": {
+ "name": "Монако"
+ },
+ "MS": {
+ "name": "МонтÑеррат"
+ },
+ "MN": {
+ "name": "МоңғолиÑ"
+ },
+ "MA": {
+ "name": "Морокко"
+ },
+ "EG": {
+ "name": "МыÑÑ‹Ñ€"
+ },
+ "MM": {
+ "name": "МьÑнма (Бирма)"
+ },
+ "IM": {
+ "name": "ÐœÑн аралы"
+ },
+ "NA": {
+ "name": "ÐамибиÑ"
+ },
+ "NR": {
+ "name": "Ðауру"
+ },
+ "NP": {
+ "name": "Ðепал"
+ },
+ "NE": {
+ "name": "Ðигер"
+ },
+ "NG": {
+ "name": "ÐигериÑ"
+ },
+ "NI": {
+ "name": "Ðикарагуа"
+ },
+ "NU": {
+ "name": "ÐиуÑ"
+ },
+ "NO": {
+ "name": "ÐорвегиÑ"
+ },
+ "NF": {
+ "name": "Ðорфолк аралы"
+ },
+ "OM": {
+ "name": "Оман"
+ },
+ "ZA": {
+ "name": "ОңтүÑтік Ðфрика реÑпубликаÑÑ‹"
+ },
+ "GS": {
+ "name": "ОңтүÑтік Ð“ÐµÐ¾Ñ€Ð³Ð¸Ñ Ð¶Ó™Ð½Ðµ ОңтүÑтік Сандвичев аралы"
+ },
+ "KP": {
+ "name": "ОңтүÑтік КореÑ"
+ },
+ "SS": {
+ "name": "ОңтүÑтік Судан"
+ },
+ "CF": {
+ "name": "Орталық Ðфрика РеÑпубликаÑÑ‹"
+ },
+ "UZ": {
+ "name": "ӨзбекÑтан"
+ },
+ "PW": {
+ "name": "Палау"
+ },
+ "PS": {
+ "name": "ПалеÑтина аймақтары"
+ },
+ "PA": {
+ "name": "Панама"
+ },
+ "PG": {
+ "name": "Папуа — Жаңа ГвинеÑ"
+ },
+ "PY": {
+ "name": "Парагвай"
+ },
+ "PK": {
+ "name": "ПәкіÑтан"
+ },
+ "PE": {
+ "name": "Перу"
+ },
+ "PN": {
+ "name": "ПиткÑрн аралдары"
+ },
+ "PL": {
+ "name": "Польша"
+ },
+ "PT": {
+ "name": "ПортугалиÑ"
+ },
+ "PR": {
+ "name": "ПуÑрто-Рико"
+ },
+ "RU": {
+ "name": "РеÑей"
+ },
+ "RE": {
+ "name": "Реюньон"
+ },
+ "RW": {
+ "name": "Руанда"
+ },
+ "RO": {
+ "name": "РумыниÑ"
+ },
+ "SV": {
+ "name": "Сальвадор"
+ },
+ "WS": {
+ "name": "Самоа"
+ },
+ "SM": {
+ "name": "Сан-Марино"
+ },
+ "ST": {
+ "name": "Сан-Томе мен ПринÑипи"
+ },
+ "SA": {
+ "name": "Сауд ÐрабиÑÑÑ‹"
+ },
+ "SZ": {
+ "name": "Свазиленд"
+ },
+ "SC": {
+ "name": "Сейшель аралдары"
+ },
+ "BL": {
+ "name": "Сен-Бартелеми"
+ },
+ "MF": {
+ "name": "Сен-Мартен"
+ },
+ "PM": {
+ "name": "Сен-Пьер және Микелон"
+ },
+ "SN": {
+ "name": "Сенегал"
+ },
+ "VC": {
+ "name": "Сент-ВинÑент және Гренадиндер"
+ },
+ "KN": {
+ "name": "Сент-ÐšÐ¸Ñ‚Ñ Ð¶Ó™Ð½Ðµ ÐевиÑ"
+ },
+ "LC": {
+ "name": "Сент-ЛюÑиÑ"
+ },
+ "RS": {
+ "name": "СербиÑ"
+ },
+ "EA": {
+ "name": "Сеута мен МелильÑ"
+ },
+ "SG": {
+ "name": "Сингапур"
+ },
+ "SX": {
+ "name": "Синт-Мартен"
+ },
+ "SY": {
+ "name": "СириÑ"
+ },
+ "SK": {
+ "name": "СловакиÑ"
+ },
+ "SI": {
+ "name": "СловениÑ"
+ },
+ "SB": {
+ "name": "Соломон аралдары"
+ },
+ "KR": {
+ "name": "СолтүÑтік КореÑ"
+ },
+ "MP": {
+ "name": "СолтүÑтік Мариан аралдары"
+ },
+ "SO": {
+ "name": "Сомали"
+ },
+ "SD": {
+ "name": "Судан"
+ },
+ "SR": {
+ "name": "Суринам"
+ },
+ "SL": {
+ "name": "Сьерра-Леоне"
+ },
+ "TW": {
+ "name": "Тайвань"
+ },
+ "TH": {
+ "name": "Тайланд"
+ },
+ "TZ": {
+ "name": "ТанзаниÑ"
+ },
+ "TJ": {
+ "name": "ТәжікÑтан"
+ },
+ "TL": {
+ "name": "Тимор-ЛеÑте"
+ },
+ "TG": {
+ "name": "Того"
+ },
+ "TK": {
+ "name": "Токелау"
+ },
+ "TO": {
+ "name": "Тонга"
+ },
+ "TT": {
+ "name": "Тринидад пен Тобаго"
+ },
+ "TA": {
+ "name": "ТриÑтан-да-КуньÑ"
+ },
+ "TV": {
+ "name": "Тувалу"
+ },
+ "TN": {
+ "name": "ТуниÑ"
+ },
+ "TC": {
+ "name": "Ð¢ÑƒÑ€ÐºÑ Ð¿ÐµÐ½ КайкоÑ"
+ },
+ "TR": {
+ "name": "ТүркиÑ"
+ },
+ "TM": {
+ "name": "ТүрікменÑтан"
+ },
+ "UG": {
+ "name": "Уганда"
+ },
+ "UA": {
+ "name": "Украина"
+ },
+ "WF": {
+ "name": "Ð£Ð¾Ð»Ð»Ð¸Ñ Ð¿ÐµÐ½ Футуна"
+ },
+ "UY": {
+ "name": "Уругвай"
+ },
+ "IO": {
+ "name": "Үнді мұхитындағы Британ аймағы"
+ },
+ "IN": {
+ "name": "ҮндіÑтан"
+ },
+ "FO": {
+ "name": "Фарер аралдары"
+ },
+ "FJ": {
+ "name": "Фиджи"
+ },
+ "PH": {
+ "name": "Филиппиндер"
+ },
+ "FI": {
+ "name": "ФинлÑндиÑ"
+ },
+ "FK": {
+ "name": "Фолкленд аралдары"
+ },
+ "FR": {
+ "name": "ФранциÑ"
+ },
+ "TF": {
+ "name": "ФранциÑның ÑолтүÑтік аймағы"
+ },
+ "GF": {
+ "name": "Француз ГвианаÑÑ‹"
+ },
+ "PF": {
+ "name": "Француз ПолинезиÑÑÑ‹"
+ },
+ "HR": {
+ "name": "ХорватиÑ"
+ },
+ "TD": {
+ "name": "Чад"
+ },
+ "ME": {
+ "name": "ЧерногориÑ"
+ },
+ "CZ": {
+ "name": "Чех РеÑпубликаÑÑ‹"
+ },
+ "CL": {
+ "name": "Чили"
+ },
+ "CH": {
+ "name": "ШвейцариÑ"
+ },
+ "SE": {
+ "name": "ШвециÑ"
+ },
+ "SJ": {
+ "name": "Шпицберген мен Ян-Майен"
+ },
+ "LK": {
+ "name": "Шри-Ланка"
+ },
+ "EC": {
+ "name": "Эквадор"
+ },
+ "GQ": {
+ "name": "Экваторлық ГвинеÑ"
+ },
+ "ER": {
+ "name": "ЭритреÑ"
+ },
+ "EE": {
+ "name": "ЭÑтониÑ"
+ },
+ "ET": {
+ "name": "ЭфиопиÑ"
+ },
+ "JM": {
+ "name": "Ямайка"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/kl.json b/library/intl/resources/country/kl.json
new file mode 100644
index 000000000..a770f7ee2
--- /dev/null
+++ b/library/intl/resources/country/kl.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistani"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeriet"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AG": {
+ "name": "Antigua aamma Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension qeqertaq"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "SD": {
+ "name": "Avannarleqsudan"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgia"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia aamma Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "MM": {
+ "name": "Burma"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "CV": {
+ "name": "Cap Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman qeqertaq"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta aamma Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CC": {
+ "name": "Cocos qeqertaq"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CK": {
+ "name": "Cook qeqertaq"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cypern"
+ },
+ "DK": {
+ "name": "Danmarki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypten"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estlandi"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falklandi qeqertaq"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finlandi"
+ },
+ "FR": {
+ "name": "Frankrigi"
+ },
+ "MF": {
+ "name": "Frankrigi Saint Martin"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GR": {
+ "name": "Grækenlandi"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "NL": {
+ "name": "Hollandi"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hongkong"
+ },
+ "BY": {
+ "name": "Hvideruslandi"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irlandi"
+ },
+ "IS": {
+ "name": "Islandi"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japani"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordani"
+ },
+ "CX": {
+ "name": "Jul-qeqertaq"
+ },
+ "GL": {
+ "name": "Kalaallit Nunaat"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "IC": {
+ "name": "Kanaria qeqertaq"
+ },
+ "KZ": {
+ "name": "Kasakhstani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CN": {
+ "name": "Kina"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CG": {
+ "name": "Kongo-Brazzaville"
+ },
+ "CD": {
+ "name": "Kongo-Kinshasa"
+ },
+ "KP": {
+ "name": "Korea Avannarleq"
+ },
+ "KR": {
+ "name": "Korea Kujalleq"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "HR": {
+ "name": "Kroatia"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "ZA": {
+ "name": "Kujalleqafrika"
+ },
+ "SS": {
+ "name": "Kujalleqsudan"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Letlandi"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtensteini"
+ },
+ "LT": {
+ "name": "Litaueni"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macao"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MK": {
+ "name": "Makedonia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marocko"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexiko"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MZ": {
+ "name": "Moçambique"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "US": {
+ "name": "Naalagaaffeqatigiit"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "NO": {
+ "name": "Norge"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NC": {
+ "name": "Nutaaq Caledonia"
+ },
+ "NZ": {
+ "name": "Nutaaq Zeelandi"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistani"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Nutaaq Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poleni"
+ },
+ "PT": {
+ "name": "Portugali"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "AQ": {
+ "name": "Qalasersuaq Kujalleq"
+ },
+ "QA": {
+ "name": "Quatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Rumænia"
+ },
+ "RU": {
+ "name": "Ruslandi"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "EH": {
+ "name": "Sahara Killiit"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts aamma Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "PM": {
+ "name": "Saint Pierre aamma Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé aamma Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "FO": {
+ "name": "Savalimmiut"
+ },
+ "CH": {
+ "name": "Schweizi"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "ES": {
+ "name": "Spania"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard aamma Jan Mayen"
+ },
+ "SE": {
+ "name": "Sverige"
+ },
+ "SZ": {
+ "name": "Swazilandi"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistani"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailandi"
+ },
+ "TL": {
+ "name": "Timor Kangilliit"
+ },
+ "CZ": {
+ "name": "Tjekkia"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad aamma Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "GB": {
+ "name": "Tuluit Nunaat"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turkmenistani"
+ },
+ "TC": {
+ "name": "Turks & Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "TR": {
+ "name": "Tyrkia"
+ },
+ "DE": {
+ "name": "Tysklandi"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraina"
+ },
+ "HU": {
+ "name": "Ungarni"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistani"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis aamma Futuna"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ },
+ "AT": {
+ "name": "Østrigi"
+ },
+ "AX": {
+ "name": "Ã…landi"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/kln.json b/library/intl/resources/country/kln.json
new file mode 100644
index 000000000..ee8ae7c39
--- /dev/null
+++ b/library/intl/resources/country/kln.json
@@ -0,0 +1,761 @@
+{
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "AF": {
+ "name": "Emetab Afghanistan"
+ },
+ "CF": {
+ "name": "Emetab Afrika nebo Kwen"
+ },
+ "ZA": {
+ "name": "Emetab Afrika nebo Murot tai"
+ },
+ "AL": {
+ "name": "Emetab Albania"
+ },
+ "DZ": {
+ "name": "Emetab Algeria"
+ },
+ "AS": {
+ "name": "Emetab American Samoa"
+ },
+ "US": {
+ "name": "Emetab amerika"
+ },
+ "AD": {
+ "name": "Emetab Andorra"
+ },
+ "AO": {
+ "name": "Emetab Angola"
+ },
+ "AI": {
+ "name": "Emetab Anguilla"
+ },
+ "AG": {
+ "name": "Emetab Antigua ak Barbuda"
+ },
+ "AR": {
+ "name": "Emetab Argentina"
+ },
+ "AM": {
+ "name": "Emetab Armenia"
+ },
+ "AW": {
+ "name": "Emetab Aruba"
+ },
+ "AU": {
+ "name": "Emetab Australia"
+ },
+ "AT": {
+ "name": "Emetab Austria"
+ },
+ "AZ": {
+ "name": "Emetab Azerbaijan"
+ },
+ "BS": {
+ "name": "Emetab Bahamas"
+ },
+ "BH": {
+ "name": "Emetab Bahrain"
+ },
+ "BD": {
+ "name": "Emetab Bangladesh"
+ },
+ "BB": {
+ "name": "Emetab Barbados"
+ },
+ "BY": {
+ "name": "Emetab Belarus"
+ },
+ "BE": {
+ "name": "Emetab Belgium"
+ },
+ "BZ": {
+ "name": "Emetab Belize"
+ },
+ "BJ": {
+ "name": "Emetab Benin"
+ },
+ "BM": {
+ "name": "Emetab Bermuda"
+ },
+ "BT": {
+ "name": "Emetab Bhutan"
+ },
+ "BO": {
+ "name": "Emetab Bolivia"
+ },
+ "BA": {
+ "name": "Emetab Bosnia ak Herzegovina"
+ },
+ "BW": {
+ "name": "Emetab Botswana"
+ },
+ "BR": {
+ "name": "Emetab Brazil"
+ },
+ "BN": {
+ "name": "Emetab Brunei"
+ },
+ "BG": {
+ "name": "Emetab Bulgaria"
+ },
+ "BF": {
+ "name": "Emetab Burkina Faso"
+ },
+ "BI": {
+ "name": "Emetab Burundi"
+ },
+ "KH": {
+ "name": "Emetab Cambodia"
+ },
+ "CM": {
+ "name": "Emetab Cameroon"
+ },
+ "CA": {
+ "name": "Emetab Canada"
+ },
+ "TD": {
+ "name": "Emetab Chad"
+ },
+ "CL": {
+ "name": "Emetab Chile"
+ },
+ "CN": {
+ "name": "Emetab China"
+ },
+ "CO": {
+ "name": "Emetab Colombia"
+ },
+ "KM": {
+ "name": "Emetab Comoros"
+ },
+ "CG": {
+ "name": "Emetab Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Emetab Congo - Kinshasa"
+ },
+ "CR": {
+ "name": "Emetab Costa Rica"
+ },
+ "CI": {
+ "name": "Emetab Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Emetab Croatia"
+ },
+ "CU": {
+ "name": "Emetab Cuba"
+ },
+ "CY": {
+ "name": "Emetab Cyprus"
+ },
+ "CZ": {
+ "name": "Emetab Czech Republic"
+ },
+ "DK": {
+ "name": "Emetab Denmark"
+ },
+ "DJ": {
+ "name": "Emetab Djibouti"
+ },
+ "DM": {
+ "name": "Emetab Dominica"
+ },
+ "DO": {
+ "name": "Emetab Dominican Republic"
+ },
+ "EC": {
+ "name": "Emetab Ecuador"
+ },
+ "SV": {
+ "name": "Emetab El Salvador"
+ },
+ "GQ": {
+ "name": "Emetab Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Emetab Eritrea"
+ },
+ "EE": {
+ "name": "Emetab Estonia"
+ },
+ "ET": {
+ "name": "Emetab Ethiopia"
+ },
+ "FJ": {
+ "name": "Emetab Fiji"
+ },
+ "FI": {
+ "name": "Emetab Finland"
+ },
+ "FR": {
+ "name": "Emetab France"
+ },
+ "GA": {
+ "name": "Emetab Gabon"
+ },
+ "GM": {
+ "name": "Emetab Gambia"
+ },
+ "GE": {
+ "name": "Emetab Georgia"
+ },
+ "DE": {
+ "name": "Emetab Geruman"
+ },
+ "GH": {
+ "name": "Emetab Ghana"
+ },
+ "GI": {
+ "name": "Emetab Gibraltar"
+ },
+ "GR": {
+ "name": "Emetab Greece"
+ },
+ "GL": {
+ "name": "Emetab Greenland"
+ },
+ "GD": {
+ "name": "Emetab Grenada"
+ },
+ "GP": {
+ "name": "Emetab Guadeloupe"
+ },
+ "GU": {
+ "name": "Emetab Guam"
+ },
+ "GT": {
+ "name": "Emetab Guatemala"
+ },
+ "GF": {
+ "name": "Emetab Guiana nebo Ufaransa"
+ },
+ "GN": {
+ "name": "Emetab Guinea"
+ },
+ "GW": {
+ "name": "Emetab Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Emetab Guyana"
+ },
+ "HT": {
+ "name": "Emetab Haiti"
+ },
+ "SH": {
+ "name": "Emetab Helena Ne tilil"
+ },
+ "NL": {
+ "name": "Emetab Holand"
+ },
+ "HN": {
+ "name": "Emetab Honduras"
+ },
+ "HU": {
+ "name": "Emetab Hungary"
+ },
+ "IS": {
+ "name": "Emetab Iceland"
+ },
+ "IN": {
+ "name": "Emetab India"
+ },
+ "ID": {
+ "name": "Emetab Indonesia"
+ },
+ "IR": {
+ "name": "Emetab Iran"
+ },
+ "IQ": {
+ "name": "Emetab Iraq"
+ },
+ "IE": {
+ "name": "Emetab Ireland"
+ },
+ "IL": {
+ "name": "Emetab Israel"
+ },
+ "IT": {
+ "name": "Emetab Italy"
+ },
+ "JM": {
+ "name": "Emetab Jamaica"
+ },
+ "JP": {
+ "name": "Emetab Japan"
+ },
+ "JO": {
+ "name": "Emetab Jordan"
+ },
+ "KZ": {
+ "name": "Emetab Kazakhstan"
+ },
+ "KE": {
+ "name": "Emetab Kenya"
+ },
+ "AE": {
+ "name": "Emetab kibagenge nebo arabuk"
+ },
+ "GB": {
+ "name": "Emetab Kibagenge nebo Uingereza"
+ },
+ "KI": {
+ "name": "Emetab Kiribati"
+ },
+ "KP": {
+ "name": "Emetab Korea nebo murot katam"
+ },
+ "KR": {
+ "name": "Emetab korea nebo murot tai"
+ },
+ "KW": {
+ "name": "Emetab Kuwait"
+ },
+ "KG": {
+ "name": "Emetab Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Emetab Laos"
+ },
+ "LV": {
+ "name": "Emetab Latvia"
+ },
+ "LB": {
+ "name": "Emetab Lebanon"
+ },
+ "LS": {
+ "name": "Emetab Lesotho"
+ },
+ "LR": {
+ "name": "Emetab Liberia"
+ },
+ "LY": {
+ "name": "Emetab Libya"
+ },
+ "LI": {
+ "name": "Emetab Liechtenstein"
+ },
+ "LT": {
+ "name": "Emetab Lithuania"
+ },
+ "LC": {
+ "name": "Emetab Lucia Ne"
+ },
+ "LU": {
+ "name": "Emetab Luxembourg"
+ },
+ "MK": {
+ "name": "Emetab Macedonia"
+ },
+ "MG": {
+ "name": "Emetab Madagascar"
+ },
+ "MW": {
+ "name": "Emetab Malawi"
+ },
+ "MY": {
+ "name": "Emetab Malaysia"
+ },
+ "MV": {
+ "name": "Emetab Maldives"
+ },
+ "ML": {
+ "name": "Emetab Mali"
+ },
+ "MT": {
+ "name": "Emetab Malta"
+ },
+ "MQ": {
+ "name": "Emetab Martinique"
+ },
+ "MR": {
+ "name": "Emetab Mauritania"
+ },
+ "MU": {
+ "name": "Emetab Mauritius"
+ },
+ "YT": {
+ "name": "Emetab Mayotte"
+ },
+ "MX": {
+ "name": "Emetab Mexico"
+ },
+ "FM": {
+ "name": "Emetab Micronesia"
+ },
+ "EG": {
+ "name": "Emetab Misiri"
+ },
+ "MD": {
+ "name": "Emetab Moldova"
+ },
+ "MC": {
+ "name": "Emetab Monaco"
+ },
+ "MN": {
+ "name": "Emetab Mongolia"
+ },
+ "MS": {
+ "name": "Emetab Montserrat"
+ },
+ "MA": {
+ "name": "Emetab Morocco"
+ },
+ "MZ": {
+ "name": "Emetab Mozambique"
+ },
+ "MM": {
+ "name": "Emetab Myanmar"
+ },
+ "NA": {
+ "name": "Emetab Namibia"
+ },
+ "NR": {
+ "name": "Emetab Nauru"
+ },
+ "NP": {
+ "name": "Emetab Nepal"
+ },
+ "NC": {
+ "name": "Emetab New Caledonia"
+ },
+ "NZ": {
+ "name": "Emetab New Zealand"
+ },
+ "NI": {
+ "name": "Emetab Nicaragua"
+ },
+ "NE": {
+ "name": "Emetab niger"
+ },
+ "NG": {
+ "name": "Emetab Nigeria"
+ },
+ "NU": {
+ "name": "Emetab Niue"
+ },
+ "NO": {
+ "name": "Emetab Norway"
+ },
+ "OM": {
+ "name": "Emetab Oman"
+ },
+ "PK": {
+ "name": "Emetab Pakistan"
+ },
+ "PW": {
+ "name": "Emetab Palau"
+ },
+ "PS": {
+ "name": "Emetab Palestine"
+ },
+ "PA": {
+ "name": "Emetab Panama"
+ },
+ "PG": {
+ "name": "Emetab Papua New Guinea"
+ },
+ "PY": {
+ "name": "Emetab Paraguay"
+ },
+ "PE": {
+ "name": "Emetab Peru"
+ },
+ "PM": {
+ "name": "Emetab Peter Ne titil ak Miquelon"
+ },
+ "PH": {
+ "name": "Emetab Philippines"
+ },
+ "PN": {
+ "name": "Emetab Pitcairn"
+ },
+ "PL": {
+ "name": "Emetab Poland"
+ },
+ "PF": {
+ "name": "Emetab Polynesia nebo ufaransa"
+ },
+ "PT": {
+ "name": "Emetab Portugal"
+ },
+ "PR": {
+ "name": "Emetab Puerto Rico"
+ },
+ "QA": {
+ "name": "Emetab Qatar"
+ },
+ "RE": {
+ "name": "Emetab Réunion"
+ },
+ "RO": {
+ "name": "Emetab Romania"
+ },
+ "RU": {
+ "name": "Emetab Russia"
+ },
+ "RW": {
+ "name": "Emetab Rwanda"
+ },
+ "KN": {
+ "name": "Emetab Saint Kitts ak Nevis"
+ },
+ "WS": {
+ "name": "Emetab Samoa"
+ },
+ "SM": {
+ "name": "Emetab San Marino"
+ },
+ "ST": {
+ "name": "Emetab São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Emetab Saudi Arabia"
+ },
+ "SN": {
+ "name": "Emetab Senegal"
+ },
+ "SC": {
+ "name": "Emetab Seychelles"
+ },
+ "SL": {
+ "name": "Emetab Sierra Leone"
+ },
+ "SG": {
+ "name": "Emetab Singapore"
+ },
+ "SK": {
+ "name": "Emetab Slovakia"
+ },
+ "SI": {
+ "name": "Emetab Slovenia"
+ },
+ "SO": {
+ "name": "Emetab Somalia"
+ },
+ "ES": {
+ "name": "Emetab Spain"
+ },
+ "LK": {
+ "name": "Emetab Sri Lanka"
+ },
+ "SD": {
+ "name": "Emetab Sudan"
+ },
+ "SR": {
+ "name": "Emetab Suriname"
+ },
+ "SZ": {
+ "name": "Emetab Swaziland"
+ },
+ "SE": {
+ "name": "Emetab Sweden"
+ },
+ "CH": {
+ "name": "Emetab Switzerland"
+ },
+ "SY": {
+ "name": "Emetab Syria"
+ },
+ "TW": {
+ "name": "Emetab Taiwan"
+ },
+ "TJ": {
+ "name": "Emetab Tajikistan"
+ },
+ "TZ": {
+ "name": "Emetab Tanzania"
+ },
+ "TH": {
+ "name": "Emetab Thailand"
+ },
+ "TL": {
+ "name": "Emetab Timor nebo Murot tai"
+ },
+ "TG": {
+ "name": "Emetab Togo"
+ },
+ "TK": {
+ "name": "Emetab Tokelau"
+ },
+ "TO": {
+ "name": "Emetab Tonga"
+ },
+ "TT": {
+ "name": "Emetab Trinidad ak Tobago"
+ },
+ "TN": {
+ "name": "Emetab Tunisia"
+ },
+ "TR": {
+ "name": "Emetab Turkey"
+ },
+ "TM": {
+ "name": "Emetab Turkmenistan"
+ },
+ "TV": {
+ "name": "Emetab Tuvalu"
+ },
+ "UG": {
+ "name": "Emetab Uganda"
+ },
+ "UA": {
+ "name": "Emetab Ukrainie"
+ },
+ "UY": {
+ "name": "Emetab Uruguay"
+ },
+ "UZ": {
+ "name": "Emetab Uzibekistani"
+ },
+ "VU": {
+ "name": "Emetab Vanuatu"
+ },
+ "VA": {
+ "name": "Emetab Vatican"
+ },
+ "VE": {
+ "name": "Emetab Venezuela"
+ },
+ "VN": {
+ "name": "Emetab Vietnam"
+ },
+ "VC": {
+ "name": "Emetab Vincent netilil ak Grenadines"
+ },
+ "WF": {
+ "name": "Emetab Walis ak Futuna"
+ },
+ "YE": {
+ "name": "Emetab Yemen"
+ },
+ "ZM": {
+ "name": "Emetab Zambia"
+ },
+ "ZW": {
+ "name": "Emetab Zimbabwe"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "MP": {
+ "name": "Ikwembeiyotab Mariana nebo murot katam"
+ },
+ "MH": {
+ "name": "Ikwembeiyotab Marshall"
+ },
+ "NF": {
+ "name": "Ikwembeiyotab Norfork"
+ },
+ "SB": {
+ "name": "Ikwembeiyotab Solomon"
+ },
+ "TC": {
+ "name": "Ikwembeiyotab Turks ak Caicos"
+ },
+ "VG": {
+ "name": "Ikwembeyotab British Virgin"
+ },
+ "CV": {
+ "name": "Ikwembeyotab Cape Verde"
+ },
+ "KY": {
+ "name": "Ikwembeyotab Cayman"
+ },
+ "CK": {
+ "name": "Ikwembeyotab Cook"
+ },
+ "FK": {
+ "name": "Ikwembeyotab Falkland"
+ },
+ "VI": {
+ "name": "Ikwemweiyotab Amerika"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "IO": {
+ "name": "Kebebertab araraitab indian Ocean nebo Uingeresa"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/km.json b/library/intl/resources/country/km.json
new file mode 100644
index 000000000..96beeb1b7
--- /dev/null
+++ b/library/intl/resources/country/km.json
@@ -0,0 +1,761 @@
+{
+ "KH": {
+ "name": "កម្ពុជា"
+ },
+ "CA": {
+ "name": "កាណាដា"
+ },
+ "QA": {
+ "name": "កាážáž¶ážš"
+ },
+ "CV": {
+ "name": "កាបវែរ"
+ },
+ "CM": {
+ "name": "កាមáŸážšáž¼áž“"
+ },
+ "KZ": {
+ "name": "កាហ្សាក់ស្ážáž¶áž„់់"
+ },
+ "CG": {
+ "name": "កុងហ្គោ - ប្រាហ្សាវីល"
+ },
+ "CD": {
+ "name": "កុងហ្គោ- គីនស្ហាសា"
+ },
+ "CI": {
+ "name": "កូដឌីវáŸážš"
+ },
+ "CW": {
+ "name": "កូរ៉ាកៅ"
+ },
+ "KP": {
+ "name": "កូរ៉áŸâ€‹ážáž¶áž„​ជើង"
+ },
+ "KR": {
+ "name": "កូរ៉áŸâ€‹ážáž¶áž„​ážáŸ’បូង"
+ },
+ "XK": {
+ "name": "កូសូវ៉ូ"
+ },
+ "CR": {
+ "name": "កូស្ážáž¶ážšáž¸áž€áž¶"
+ },
+ "CO": {
+ "name": "កូឡុំប៊ី"
+ },
+ "KE": {
+ "name": "កáŸáž“យ៉ា"
+ },
+ "KM": {
+ "name": "កុំម៉ូរ៉ូស"
+ },
+ "IC": {
+ "name": "កោះ​កាណារី"
+ },
+ "CC": {
+ "name": "កោះ​កូកូស"
+ },
+ "TC": {
+ "name": "កោះ​កៃកូស និងទូក"
+ },
+ "KY": {
+ "name": "កោះ​កៃម៉ង់"
+ },
+ "CK": {
+ "name": "កោះ​ážáž¼áž€"
+ },
+ "CX": {
+ "name": "កោះ​គ្រីស្មាស"
+ },
+ "NF": {
+ "name": "កោះ​ណáŸážšáž áŸ’វក់"
+ },
+ "PN": {
+ "name": "កោះ​ភីážážáž¶ážšáž·áž“"
+ },
+ "MP": {
+ "name": "កោះ​ម៉ារីណា​ážáž¶áž„​ជើង"
+ },
+ "MH": {
+ "name": "កោះ​ម៉ាស់សល"
+ },
+ "VG": {
+ "name": "កោះ​វឺជិន​ចក្រភព​អង់គ្លáŸážŸ"
+ },
+ "VI": {
+ "name": "កោះ​វឺជីន​អាមáŸážšáž·áž€"
+ },
+ "SB": {
+ "name": "កោះ​ស៊ូឡូម៉ុង"
+ },
+ "FK": {
+ "name": "កោះ​ហ្វក់ឡែន"
+ },
+ "FO": {
+ "name": "កោះ​ហ្វារ៉ូ"
+ },
+ "GS": {
+ "name": "កោះ​ហ្សកហ្ស៊ី​ážáž¶áž„​ážáŸ’បូង និង​សាន់វិច​ážáž¶áž„​ážáŸ’បូង"
+ },
+ "AC": {
+ "name": "កោះ​អាសáŸáž“សិន"
+ },
+ "AX": {
+ "name": "កោះ​អាឡាំង"
+ },
+ "UM": {
+ "name": "កោះ​អៅឡាយីង​អាមáŸážšáž·áž€"
+ },
+ "GR": {
+ "name": "ក្រិច"
+ },
+ "HR": {
+ "name": "ក្រូអាáž"
+ },
+ "KI": {
+ "name": "គិរិបាទី"
+ },
+ "CU": {
+ "name": "គុយបា"
+ },
+ "KW": {
+ "name": "គុយវ៉ែáž"
+ },
+ "KG": {
+ "name": "គៀរហ្គីស្ážáž„់"
+ },
+ "GB": {
+ "name": "ចក្រភព​អង់គ្លáŸážŸ"
+ },
+ "CN": {
+ "name": "áž…áž·áž“"
+ },
+ "TD": {
+ "name": "ឆាដ"
+ },
+ "JP": {
+ "name": "ជប៉ុន"
+ },
+ "EA": {
+ "name": "ជឺážáž¶ និង​ម៉áŸáž›áž¸áž¡áž¶"
+ },
+ "JE": {
+ "name": "ជឺស៊ី"
+ },
+ "NC": {
+ "name": "ញូកាឡáŸážŠáž¼áž“ៀ"
+ },
+ "DK": {
+ "name": "ដាណឺម៉ាក"
+ },
+ "DM": {
+ "name": "ដូមីនីកា"
+ },
+ "TF": {
+ "name": "ដែន​បារាំង​ážáž¶áž„​ážáŸ’បូង"
+ },
+ "PS": {
+ "name": "ដែន​ប៉ាលáŸážŸáŸ’ទីន"
+ },
+ "IO": {
+ "name": "ដែន​មហា​សមុទ្រ​ឥណ្ឌា ចក្រភព​អង់គ្លáŸážŸ"
+ },
+ "DG": {
+ "name": "ឌៀហ្គោហ្គាស៊ី"
+ },
+ "NA": {
+ "name": "ណាមីប៊ី"
+ },
+ "NR": {
+ "name": "ណូរូ"
+ },
+ "NU": {
+ "name": "ណៀ"
+ },
+ "TZ": {
+ "name": "ážáž„់ហ្សានី"
+ },
+ "TJ": {
+ "name": "ážáž¶ážŠáž áŸ’ស៉ីគីស្ážáž„់"
+ },
+ "TO": {
+ "name": "ážáž»áž„ហ្គា"
+ },
+ "TK": {
+ "name": "ážáž¼ážáŸáž¡áŸ…"
+ },
+ "TG": {
+ "name": "ážáž¼áž áŸ’áž‚áž¼"
+ },
+ "TW": {
+ "name": "ážáŸƒážœáŸ‰áž¶áž“់"
+ },
+ "TH": {
+ "name": "ážáŸƒ"
+ },
+ "VA": {
+ "name": "ទីក្រុងវ៉ាទីកង់"
+ },
+ "TL": {
+ "name": "ទីមáŸážš"
+ },
+ "TN": {
+ "name": "ទុយនáŸážŸáŸŠáž¸"
+ },
+ "TV": {
+ "name": "ទូវ៉ាលូ"
+ },
+ "TM": {
+ "name": "ទួគមáŸáž“ីស្ážáž„់"
+ },
+ "TR": {
+ "name": "ទួរគី"
+ },
+ "TT": {
+ "name": "ទ្រីនីដាហនិង​ážáž¼áž”ាហ្គោ"
+ },
+ "TA": {
+ "name": "ទ្រីស្ážáž„់​ដា​ចូនហា"
+ },
+ "NO": {
+ "name": "áž“áŸážšážœáŸ‚ស"
+ },
+ "NI": {
+ "name": "នីការ៉ាហ្គáŸážš"
+ },
+ "NE": {
+ "name": "នីហ្សáŸážš"
+ },
+ "NG": {
+ "name": "នីហ្សáŸážšáž¸áž™áŸ‰áž¶"
+ },
+ "NZ": {
+ "name": "នូវែលហ្សáŸáž¡áž„់"
+ },
+ "NP": {
+ "name": "áž“áŸáž”៉ាល់"
+ },
+ "BD": {
+ "name": "បង់ក្លាដáŸážŸáŸ’áž "
+ },
+ "PK": {
+ "name": "ប៉ាគីស្ážáž¶áž“"
+ },
+ "PA": {
+ "name": "ប៉ាណាម៉ា"
+ },
+ "PG": {
+ "name": "ប៉ាពូអានូវែលហ្គីណáŸ"
+ },
+ "BB": {
+ "name": "បារបាដូស"
+ },
+ "PY": {
+ "name": "ប៉ារ៉ាហ្គាយ"
+ },
+ "BH": {
+ "name": "បារ៉ែន"
+ },
+ "FR": {
+ "name": "បារាំង"
+ },
+ "BS": {
+ "name": "បាហាម៉ា"
+ },
+ "BM": {
+ "name": "ប៊ឺមុយដា"
+ },
+ "BW": {
+ "name": "បុážážŸáŸ’វាណា"
+ },
+ "BG": {
+ "name": "ប៊ុលហ្គារី"
+ },
+ "BT": {
+ "name": "ប៊ូážáž¶áž“"
+ },
+ "BF": {
+ "name": "ប៊ូរគីណាហ្វាសូ"
+ },
+ "BI": {
+ "name": "ប៊ូរុនឌី"
+ },
+ "BO": {
+ "name": "បូលីវី"
+ },
+ "PL": {
+ "name": "ប៉ូលូញ"
+ },
+ "BA": {
+ "name": "បូស្ន៉ី"
+ },
+ "BJ": {
+ "name": "áž”áŸážŽáž¶áŸ†áž„"
+ },
+ "PE": {
+ "name": "ប៉áŸážšáž¼"
+ },
+ "BZ": {
+ "name": "áž”áŸáž›áž¸áž áŸ’ស"
+ },
+ "BY": {
+ "name": "áž”áŸáž¡áž¶ážšáž»ážŸáŸ’ស"
+ },
+ "BE": {
+ "name": "បែលហ្ស៉ិក"
+ },
+ "BR": {
+ "name": "ប្រáŸážŸáŸŠáž¸áž›"
+ },
+ "PW": {
+ "name": "ផៅឡូ"
+ },
+ "PR": {
+ "name": "áž–áŸážšážáž¼ážšáž¸áž€áž¼"
+ },
+ "PT": {
+ "name": "áž–áŸážšáž‘ុយហ្កាល់"
+ },
+ "BN": {
+ "name": "ព្រុយណáŸ"
+ },
+ "MO": {
+ "name": "ម៉ាកាវ"
+ },
+ "MG": {
+ "name": "ម៉ាដាហ្កាស្ការ"
+ },
+ "MQ": {
+ "name": "ម៉ាទីនីក"
+ },
+ "YT": {
+ "name": "ម៉ាយុáž"
+ },
+ "MA": {
+ "name": "ម៉ារ៉ុក"
+ },
+ "MV": {
+ "name": "ម៉ាល់ឌីវ"
+ },
+ "MT": {
+ "name": "ម៉ាល់ážáž¶"
+ },
+ "ML": {
+ "name": "ម៉ាលី"
+ },
+ "MK": {
+ "name": "ម៉ាសáŸážŠáž“"
+ },
+ "MW": {
+ "name": "ម៉ាឡាវី"
+ },
+ "MY": {
+ "name": "ម៉ាឡáŸážŸáŸŠáž¸"
+ },
+ "FM": {
+ "name": "មិក្រូនáŸážŸáŸŠáž¸"
+ },
+ "MX": {
+ "name": "ម៉ិចសិក"
+ },
+ "MM": {
+ "name": "មីយ៉ាន់ម៉ា (ភូមា)"
+ },
+ "ME": {
+ "name": "ម៉ុងážáŸážŽáŸáž áŸ’គ្រោ"
+ },
+ "MS": {
+ "name": "ម៉ុង​សáŸážšáŸ‰áž„់"
+ },
+ "MN": {
+ "name": "ម៉ុងហ្គោលី"
+ },
+ "MC": {
+ "name": "ម៉ូណាកូ"
+ },
+ "MR": {
+ "name": "ម៉ូរីážáž¶áž“ី"
+ },
+ "MU": {
+ "name": "ម៉ូរីទុស"
+ },
+ "MZ": {
+ "name": "ម៉ូហ្សាំប៊ិក"
+ },
+ "YE": {
+ "name": "áž™áŸáž˜áŸ‚áž“"
+ },
+ "RW": {
+ "name": "រវ៉ាន់ដា"
+ },
+ "RU": {
+ "name": "រុស្ស៊ី"
+ },
+ "RO": {
+ "name": "រូម៉ានី"
+ },
+ "RE": {
+ "name": "រ៉áŸáž¢áŸŠáž»áž™áŸ‰áž»áž„"
+ },
+ "LI": {
+ "name": "លិចទáŸáž“ស្ážáŸ‚áž“"
+ },
+ "LT": {
+ "name": "លីទុយអានី"
+ },
+ "LB": {
+ "name": "លីបង់"
+ },
+ "LY": {
+ "name": "លីប៊ី"
+ },
+ "LR": {
+ "name": "លីបáŸážšáž¸áž™áŸ‰áž¶"
+ },
+ "LU": {
+ "name": "លុចហ្សំបួរ"
+ },
+ "LS": {
+ "name": "លើសូážáž¼"
+ },
+ "VU": {
+ "name": "វ៉ាន់ណៅទូ"
+ },
+ "WF": {
+ "name": "វ៉ាលីស និង​ហ្វូទូណា"
+ },
+ "VN": {
+ "name": "វៀážážŽáž¶áž˜"
+ },
+ "VE": {
+ "name": "ážœáŸáž“áŸáž áŸ’ស៊ុយឡា"
+ },
+ "BL": {
+ "name": "សង់ បាážáŸáž¡áŸáž˜áŸ‰áž¸"
+ },
+ "KN": {
+ "name": "សង់ឃីហនិង​ណáŸážœáž¸ážŸ"
+ },
+ "PM": {
+ "name": "សង់ព្យែរ និង​មីគីឡុង"
+ },
+ "MF": {
+ "name": "សង់​ម៉ាទីន"
+ },
+ "LC": {
+ "name": "សង់​លូសៀ"
+ },
+ "SH": {
+ "name": "សង់​ហáŸáž¡áŸážŽáž¶"
+ },
+ "US": {
+ "name": "សហរដ្ឋអាមáŸážšáž·áž€"
+ },
+ "CZ": {
+ "name": "សាធារណរដ្ឋឆáŸáž€"
+ },
+ "DO": {
+ "name": "សាធារណរដ្ឋដូមីនីកែន"
+ },
+ "MD": {
+ "name": "សាធារណរដ្ឋម៉ុលដាវី"
+ },
+ "CF": {
+ "name": "សាធារណរដ្ឋអាហ្វ្រិកកណ្ដាល"
+ },
+ "SM": {
+ "name": "សាន​ម៉ារីណូ"
+ },
+ "WS": {
+ "name": "សាមូអា"
+ },
+ "EH": {
+ "name": "សាហារ៉ាážáž¶áž„លិច"
+ },
+ "SG": {
+ "name": "សិង្ហបុរី"
+ },
+ "SX": {
+ "name": "សីង​ម៉ាធីន"
+ },
+ "CY": {
+ "name": "ស៉ីពរáŸ"
+ },
+ "SY": {
+ "name": "ស៊ីរី"
+ },
+ "CL": {
+ "name": "ស៊ីលី"
+ },
+ "SC": {
+ "name": "សីសែល"
+ },
+ "SE": {
+ "name": "ស៊ុយអែដ"
+ },
+ "SD": {
+ "name": "ស៊ូដង់"
+ },
+ "SS": {
+ "name": "ស៊ូដង់​ážáž¶áž„​ážáŸ’បូង"
+ },
+ "SO": {
+ "name": "សូម៉ាលី"
+ },
+ "SR": {
+ "name": "សូរីណាម"
+ },
+ "SZ": {
+ "name": "សូហ្ស៉ីឡង់"
+ },
+ "RS": {
+ "name": "សើប"
+ },
+ "SN": {
+ "name": "សáŸáž“áŸáž áŸ’កាល់"
+ },
+ "SL": {
+ "name": "សáŸážšáŸ‰áž¶áž¡áŸáž¢áž¼áž“"
+ },
+ "ST": {
+ "name": "សៅ​ážáž»áŸ† និង​ព្រីនស៊ីប៉áŸ"
+ },
+ "AS": {
+ "name": "សៅម៉ៅ អាមáŸážšáž·áž€"
+ },
+ "VC": {
+ "name": "សាំង​វីនសáŸáž“ និង​ឌឹ​ហ្គ្រីណាឌីនីស"
+ },
+ "LK": {
+ "name": "ស្រីលង្កា"
+ },
+ "SK": {
+ "name": "ស្លូវ៉ាគី"
+ },
+ "SI": {
+ "name": "ស្លូវáŸáž“ី"
+ },
+ "SJ": {
+ "name": "ស្វាប៊ឺហនិង​ហ្យង់ម៉ាយáŸáž“"
+ },
+ "CH": {
+ "name": "ស្វីស"
+ },
+ "HK": {
+ "name": "ហុងកុង"
+ },
+ "HU": {
+ "name": "ហុងគ្រី"
+ },
+ "HN": {
+ "name": "ហុងឌួរ៉ាស់"
+ },
+ "NL": {
+ "name": "ហុល្លង់"
+ },
+ "BQ": {
+ "name": "ហុល្លង់ ការ៉ាប៊ីន"
+ },
+ "HT": {
+ "name": "ហៃទី"
+ },
+ "GH": {
+ "name": "ហ្គាណា"
+ },
+ "GT": {
+ "name": "ហ្គាážáŸáž˜áŸ‰áž¶áž¡áž¶"
+ },
+ "GA": {
+ "name": "ហ្គាបុង"
+ },
+ "GN": {
+ "name": "ហ្គីណáŸ"
+ },
+ "GW": {
+ "name": "ហ្គីណáŸáž”៊ីសូ"
+ },
+ "GQ": {
+ "name": "ហ្គីណáŸáž¢áŸáž€áŸ’វាទáŸážš"
+ },
+ "GI": {
+ "name": "ហ្គីប្រាលážáž¶"
+ },
+ "GY": {
+ "name": "ហ្គីយ៉ាណា"
+ },
+ "GG": {
+ "name": "ហ្គáŸáž“ស៊ី"
+ },
+ "GP": {
+ "name": "ហ្គោដឺឡុប"
+ },
+ "GU": {
+ "name": "ហ្គាំ"
+ },
+ "GM": {
+ "name": "ហ្គាំប៊ី"
+ },
+ "GD": {
+ "name": "ហ្គ្រើណាដ"
+ },
+ "GL": {
+ "name": "ហ្គ្រោអង់ឡង់"
+ },
+ "FJ": {
+ "name": "ហ្វីជី"
+ },
+ "PH": {
+ "name": "ហ្វីលីពីន"
+ },
+ "FI": {
+ "name": "ហ្វាំងឡង់"
+ },
+ "PF": {
+ "name": "ហ្វ្រáŸáž“​ប៉ូលី​ណáŸážŸáŸŠáž¸"
+ },
+ "GF": {
+ "name": "ហ្វ្វáŸáž“​ហ្គៀណា"
+ },
+ "JO": {
+ "name": "ហ៊្សកដានី"
+ },
+ "GE": {
+ "name": "ហ្សកហ្ស៉ី"
+ },
+ "JM": {
+ "name": "ហ្សាម៉ាអ៉ិគ"
+ },
+ "DJ": {
+ "name": "ហ្ស៉ីបូទី"
+ },
+ "ZW": {
+ "name": "ហ្ស៊ីមបាបវ៉áŸ"
+ },
+ "ZM": {
+ "name": "ហ្សាំប៊ី"
+ },
+ "LV": {
+ "name": "ឡាážážœáž¸áž™áŸ‰áž¶"
+ },
+ "LA": {
+ "name": "ឡាវ"
+ },
+ "AI": {
+ "name": "អង់កូឡា"
+ },
+ "AD": {
+ "name": "អង់ដូរ៉ា"
+ },
+ "AQ": {
+ "name": "អង់ážáž¶áž‘ីកា"
+ },
+ "AG": {
+ "name": "អង់ទីគáŸážš និង​បាបុយដា"
+ },
+ "AO": {
+ "name": "អង់ហ្គោឡា"
+ },
+ "ZA": {
+ "name": "អាព្រិក​ភាគ​ážáž¶áž„​ážáŸ’បូង"
+ },
+ "AM": {
+ "name": "អារមáŸáž“ី"
+ },
+ "SA": {
+ "name": "អារ៉ាប៊ីសាអ៊ូឌីáž"
+ },
+ "AW": {
+ "name": "អារូបា"
+ },
+ "AL": {
+ "name": "អាល់បានី"
+ },
+ "DZ": {
+ "name": "អាល់ហ្សáŸážšáž¸"
+ },
+ "DE": {
+ "name": "អាល្លឺម៉ង់"
+ },
+ "AF": {
+ "name": "អាហ្វហ្គានីស្ážáž¶áž“"
+ },
+ "AR": {
+ "name": "អាហ្សង់ទីន"
+ },
+ "AZ": {
+ "name": "អាហ៊្សែរបែហ្សង់"
+ },
+ "IN": {
+ "name": "ឥណ្ឌា"
+ },
+ "ID": {
+ "name": "ឥណ្ឌូណáŸážŸáŸŠáž¸"
+ },
+ "IT": {
+ "name": "អ៊ីážáž¶áž›áž¸"
+ },
+ "IR": {
+ "name": "អ៊ីរ៉ង់"
+ },
+ "IQ": {
+ "name": "អ៊ីរ៉ាក់"
+ },
+ "IL": {
+ "name": "អ៊ីស្រាអែល"
+ },
+ "IS": {
+ "name": "អ៊ីស្លង់"
+ },
+ "UA": {
+ "name": "អ៊ុយក្រែន"
+ },
+ "UY": {
+ "name": "អ៊ុយរុយហ្គាយ"
+ },
+ "AT": {
+ "name": "អូទ្រីស"
+ },
+ "OM": {
+ "name": "អូម៉ង់"
+ },
+ "AU": {
+ "name": "អូស្ážáŸ’រាលី"
+ },
+ "UG": {
+ "name": "អ៊ូហ្កង់ដា"
+ },
+ "UZ": {
+ "name": "អ៊ូហ្សបáŸáž‚ីស្ážáž„់"
+ },
+ "IE": {
+ "name": "អៀរឡង់"
+ },
+ "EC": {
+ "name": "អáŸáž€áŸ’វាឌáŸážš"
+ },
+ "ET": {
+ "name": "អáŸážáŸ’យូពី"
+ },
+ "AE": {
+ "name": "អáŸáž˜áž¸ážšáŸ‰áŸ‚ទអារ៉ាប់រួម"
+ },
+ "ER": {
+ "name": "អáŸážšáž¸áž‘្រា"
+ },
+ "EE": {
+ "name": "អáŸážŸáŸ’ážáž¼áž“ី"
+ },
+ "ES": {
+ "name": "អáŸážŸáŸ’ប៉ាញ"
+ },
+ "EG": {
+ "name": "អáŸáž áŸ’ស៉ីប"
+ },
+ "SV": {
+ "name": "អែលសាល់វ៉ាឌáŸážš"
+ },
+ "IM": {
+ "name": "អែលអុហ្វមែន"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/kn.json b/library/intl/resources/country/kn.json
new file mode 100644
index 000000000..e4aa7fceb
--- /dev/null
+++ b/library/intl/resources/country/kn.json
@@ -0,0 +1,761 @@
+{
+ "AO": {
+ "name": "ಅಂಗೋಲಾ"
+ },
+ "AQ": {
+ "name": "ಅಂಟಾರà³à²Ÿà²¿à²•à²¾"
+ },
+ "AD": {
+ "name": "ಅಂಡೋರಾ"
+ },
+ "AZ": {
+ "name": "ಅಜರà³à²¬à³ˆà²œà²¾à²¨à³"
+ },
+ "AF": {
+ "name": "ಅಫಘಾನಿಸà³à²¥à²¾à²¨à³"
+ },
+ "AS": {
+ "name": "ಅಮೇರಿಕನೠಸಮೋವಾ"
+ },
+ "US": {
+ "name": "ಅಮೇರಿಕಾ ಸಂಯà³à²•à³à²¤ ಸಂಸà³à²¥à²¾à²¨"
+ },
+ "AW": {
+ "name": "ಅರà³à²¬à²¾"
+ },
+ "AR": {
+ "name": "ಅರà³à²œà³†à²‚ಟಿನಾ"
+ },
+ "AM": {
+ "name": "ಅರà³à²®à³‡à²¨à²¿à²¯à²¾"
+ },
+ "DZ": {
+ "name": "ಅಲà³à²—ೇರಿಯಾ"
+ },
+ "AL": {
+ "name": "ಅಲà³à²¬à³‡à²¨à²¿à²¯à²¾"
+ },
+ "AC": {
+ "name": "ಅಸೆನà³à²¶à²¨à³ ದà³à²µà³€à²ª"
+ },
+ "AI": {
+ "name": "ಆಂಗà³à²¯à²¿à²²à³à²²à²¾"
+ },
+ "AG": {
+ "name": "ಆಂಟಿಗà³à²µà²¾ ಮತà³à²¤à³ ಬರà³à²¬à³à²¡à²¾"
+ },
+ "AX": {
+ "name": "ಆಲà³à²¯à²¾à²‚ಡೠದà³à²µà³€à²ªà²—ಳà³"
+ },
+ "AT": {
+ "name": "ಆಸà³à²Ÿà³à²°à²¿à²¯à²¾"
+ },
+ "AU": {
+ "name": "ಆಸà³à²Ÿà³à²°à³‡à²²à²¿à²¯"
+ },
+ "ID": {
+ "name": "ಇಂಡೋನೇಶಿಯಾ"
+ },
+ "IT": {
+ "name": "ಇಟಲಿ"
+ },
+ "ET": {
+ "name": "ಇಥಿಯೋಪಿಯಾ"
+ },
+ "IQ": {
+ "name": "ಇರಾಕà³"
+ },
+ "IR": {
+ "name": "ಇರಾನà³"
+ },
+ "IL": {
+ "name": "ಇಸà³à²°à³‡à²²à³"
+ },
+ "GQ": {
+ "name": "ಈಕà³à²µà³†à²Ÿà³‹à²°à²¿à²¯à²²à³ ಗಿನಿ"
+ },
+ "EC": {
+ "name": "ಈಕà³à²µà³†à²¡à²¾à²°à³"
+ },
+ "EG": {
+ "name": "ಈಜಿಪà³à²Ÿà³"
+ },
+ "UA": {
+ "name": "ಉಕà³à²°à³ˆà²¨à³"
+ },
+ "UG": {
+ "name": "ಉಗಾಂಡಾ"
+ },
+ "UZ": {
+ "name": "ಉಜà³à²¬à³‡à²•à²¿à²¸à³à²¥à²¾à²¨à³"
+ },
+ "KP": {
+ "name": "ಉತà³à²¤à²° ಕೋರಿಯಾ"
+ },
+ "MP": {
+ "name": "ಉತà³à²¤à²° ಮರಿಯಾನಾ ದà³à²µà³€à²ªà²—ಳà³"
+ },
+ "UY": {
+ "name": "ಉರà³à²—à³à²µà³‡"
+ },
+ "SV": {
+ "name": "ಎಲೠಸಾಲà³à²µà³‡à²¡à²¾à²°à³"
+ },
+ "EE": {
+ "name": "ಎಸà³à²Ÿà³‹à²¨à²¿à²¯à²¾"
+ },
+ "ER": {
+ "name": "à²à²°à²¿à²Ÿà³à²°à²¿à²¯à²¾"
+ },
+ "IE": {
+ "name": "à²à²°à³à²²à³†à²‚ಡà³"
+ },
+ "IM": {
+ "name": "à²à²²à³ ಆಫೠಮà³à²¯à²¾à²¨à³"
+ },
+ "IS": {
+ "name": "à²à²¸à³â€Œà²²à³à²¯à²¾à²‚ಡà³"
+ },
+ "OM": {
+ "name": "ಓಮನà³"
+ },
+ "KZ": {
+ "name": "ಕà²à²¾à²•à²¿à²¸à³à²¥à²¾à²¨à³"
+ },
+ "CD": {
+ "name": "ಕಾಂಗೋ - ಕಿನà³à²¶à²¾à²¸à²¾"
+ },
+ "CG": {
+ "name": "ಕಾಂಗೋ - ಬà³à²°à²¾à²œà²¾à²µà²¿à²²à³à²²à³‡"
+ },
+ "KH": {
+ "name": "ಕಾಂಬೋಡಿಯಾ"
+ },
+ "KI": {
+ "name": "ಕಿರಿಬಾತಿ"
+ },
+ "KG": {
+ "name": "ಕಿರà³à²—ಿಸà³à²¥à²¾à²¨à³"
+ },
+ "KE": {
+ "name": "ಕೀನà³à²¯à²¾"
+ },
+ "CK": {
+ "name": "ಕà³à²•à³ ದà³à²µà³€à²ªà²—ಳà³"
+ },
+ "CW": {
+ "name": "ಕà³à²°à²¾à²•à²¾à²µà³"
+ },
+ "KW": {
+ "name": "ಕà³à²µà³ˆà²¤à³"
+ },
+ "CA": {
+ "name": "ಕೆನಡಾ"
+ },
+ "BQ": {
+ "name": "ಕೆರೀಬಿಯನೠನೆದರà³â€Œà²²à³à²¯à²¾à²‚ಡà³à²¸à³"
+ },
+ "CV": {
+ "name": "ಕೇಪೠವರà³à²¡à³†"
+ },
+ "KY": {
+ "name": "ಕೇಮನೠದà³à²µà³€à²ªà²—ಳà³"
+ },
+ "CC": {
+ "name": "ಕೊಕೊಸೠ(ಕೀಲಿಂಗà³) ದà³à²µà³€à²ªà²—ಳà³"
+ },
+ "KM": {
+ "name": "ಕೊಮೊರೊಸà³"
+ },
+ "CO": {
+ "name": "ಕೊಲಂಬಿಯಾ"
+ },
+ "XK": {
+ "name": "ಕೊಸೊವೊ"
+ },
+ "CR": {
+ "name": "ಕೊಸà³à²Ÿà²¾ ರಿಕಾ"
+ },
+ "CI": {
+ "name": "ಕೋತà³â€Œ ದಿವಾರà³â€"
+ },
+ "IC": {
+ "name": "ಕà³à²¯à²¾à²¨à²°à²¿ ದà³à²µà³€à²ªà²—ಳà³"
+ },
+ "CM": {
+ "name": "ಕà³à²¯à²¾à²®à²°à³‹à²¨à³"
+ },
+ "CU": {
+ "name": "ಕà³à²¯à³‚ಬಾ"
+ },
+ "CX": {
+ "name": "ಕà³à²°à²¿à²¸à³à²®à²¸à³ ದà³à²µà³€à²ª"
+ },
+ "HR": {
+ "name": "ಕà³à²°à³Šà²¯à³‡à²¶à²¿à²¯à²¾"
+ },
+ "QA": {
+ "name": "ಖತಾರà³"
+ },
+ "GY": {
+ "name": "ಗಯಾನಾ"
+ },
+ "GN": {
+ "name": "ಗಿನಿ"
+ },
+ "GW": {
+ "name": "ಗಿನಿ-ಬಿಸà³à²¸à²¾à²µà³"
+ },
+ "GI": {
+ "name": "ಗಿಬà³à²°à²¾à²²à³à²Ÿà²°à³"
+ },
+ "GP": {
+ "name": "ಗà³à²¡à³†à²²à³‹à²ªà³"
+ },
+ "GU": {
+ "name": "ಗà³à²¯à²¾à²®à³"
+ },
+ "GG": {
+ "name": "ಗà³à²°à³à²¨à³â€Œà²¸à³†"
+ },
+ "GA": {
+ "name": "ಗೆಬೊನà³"
+ },
+ "GM": {
+ "name": "ಗà³à²¯à²¾à²‚ಬಿಯಾ"
+ },
+ "GL": {
+ "name": "ಗà³à²°à³€à²¨à³â€Œà²²à³à²¯à²¾à²‚ಡà³"
+ },
+ "GR": {
+ "name": "ಗà³à²°à³€à²¸à³"
+ },
+ "GD": {
+ "name": "ಗà³à²°à³†à²¨à³†à²¡à²¾"
+ },
+ "GT": {
+ "name": "ಗà³à²µà²¾à²Ÿà³†à²®à²¾à²²à²¾"
+ },
+ "GH": {
+ "name": "ಘಾನಾ"
+ },
+ "TD": {
+ "name": "ಚಾದà³"
+ },
+ "CL": {
+ "name": "ಚಿಲಿ"
+ },
+ "CN": {
+ "name": "ಚೀನಾ"
+ },
+ "CZ": {
+ "name": "ಚೆಕೠರಿಪಬà³à²²à²¿à²•à³"
+ },
+ "JP": {
+ "name": "ಜಪಾನà³"
+ },
+ "JM": {
+ "name": "ಜಮೈಕಾ"
+ },
+ "DE": {
+ "name": "ಜರà³à²®à²¨à²¿"
+ },
+ "GE": {
+ "name": "ಜಾರà³à²œà²¿à²¯à²¾"
+ },
+ "ZW": {
+ "name": "ಜಿಂಬಾಬà³à²µà³†"
+ },
+ "DJ": {
+ "name": "ಜಿಬೋಟಿ"
+ },
+ "JE": {
+ "name": "ಜೆರà³à²¸à²¿"
+ },
+ "JO": {
+ "name": "ಜೋರà³à²¡à²¾à²¨à³"
+ },
+ "ZM": {
+ "name": "à²à²¾à²‚ಬಿಯಾ"
+ },
+ "TR": {
+ "name": "ಟರà³à²•à²¿"
+ },
+ "TC": {
+ "name": "ಟರà³à²•à³à²¸à³ ಮತà³à²¤à³ ಕೈಕೋಸೠದà³à²µà³€à²ªà²—ಳà³"
+ },
+ "TN": {
+ "name": "ಟà³à²¨à²¿à²¶à²¿à²¯à²¾"
+ },
+ "TV": {
+ "name": "ಟà³à²µà²¾à²²à³"
+ },
+ "TO": {
+ "name": "ಟೊಂಗ"
+ },
+ "TK": {
+ "name": "ಟೊಕೆಲಾವà³"
+ },
+ "TG": {
+ "name": "ಟೋಗೋ"
+ },
+ "TT": {
+ "name": "ಟà³à²°à²¿à²¨à²¿à²¡à²¾à²¡à³ ಮತà³à²¤à³ ಟೊಬಾಗೊ"
+ },
+ "TA": {
+ "name": "ಟà³à²°à²¿à²¸à³à²¤à²¨à³ ಡಾ ಕà³à²¨à³à²¹à²¾"
+ },
+ "DK": {
+ "name": "ಡೆನà³à²®à²¾à²°à³à²•à³"
+ },
+ "DG": {
+ "name": "ಡೈಗೋ ಗಾರà³à²¸à²¿à²¯"
+ },
+ "DM": {
+ "name": "ಡೊಮಿನಿಕಾ"
+ },
+ "DO": {
+ "name": "ಡೊಮೆನಿಕನೠರಿಪಬà³à²²à²¿à²•à³"
+ },
+ "TJ": {
+ "name": "ತಜಾಕಿಸà³à²¥à²¾à²¨à³"
+ },
+ "TZ": {
+ "name": "ತಾಂಜೇನಿಯಾ"
+ },
+ "TM": {
+ "name": "ತà³à²°à³à²•à³à²®à³‡à²¨à²¿à²¸à³à²¥à²¾à²¨à³"
+ },
+ "TH": {
+ "name": "ಥೈಲà³à²¯à²¾à²‚ಡà³"
+ },
+ "TW": {
+ "name": "ಥೈವಾನà³"
+ },
+ "ZA": {
+ "name": "ದಕà³à²·à²¿à²£ ಆಫà³à²°à²¿à²•à²¾"
+ },
+ "KR": {
+ "name": "ದಕà³à²·à²¿à²£ ಕೋರಿಯಾ"
+ },
+ "GS": {
+ "name": "ದಕà³à²·à²¿à²£ ಜಾರà³à²œà²¿à²¯à²¾ ಮತà³à²¤à³ ದಕà³à²·à²¿à²£ ಸà³à²¯à²¾à²‚ಡà³â€à²µà²¿à²šà³ ದà³à²µà³€à²ªà²—ಳà³"
+ },
+ "SS": {
+ "name": "ದಕà³à²·à²¿à²£ ಸೂಡಾನà³"
+ },
+ "NA": {
+ "name": "ನಮೀಬಿಯಾ"
+ },
+ "NF": {
+ "name": "ನಾರà³à²«à³‹à²•à³ ದà³à²µà³€à²ª"
+ },
+ "NO": {
+ "name": "ನಾರà³à²µà³‡"
+ },
+ "NI": {
+ "name": "ನಿಕಾರಾಗà³à²µà²¾"
+ },
+ "NU": {
+ "name": "ನಿಯà³"
+ },
+ "NL": {
+ "name": "ನೆದರà³â€Œà²²à³à²¯à²¾à²‚ಡà³à²¸à³"
+ },
+ "NP": {
+ "name": "ನೇಪಾಳ"
+ },
+ "NE": {
+ "name": "ನೈಜರà³"
+ },
+ "NG": {
+ "name": "ನೈಜೀರಿಯಾ"
+ },
+ "NR": {
+ "name": "ನೌರà³"
+ },
+ "NC": {
+ "name": "ನà³à²¯à³‚ ಕà³à²¯à²¾à²²à²¿à²¡à³‹à²¨à²¿à²¯à²¾"
+ },
+ "NZ": {
+ "name": "ನà³à²¯à³‚ಜಿಲೆಂಡà³"
+ },
+ "PA": {
+ "name": "ಪನಾಮಾ"
+ },
+ "PG": {
+ "name": "ಪಪà³à²µà²¾ ನà³à²¯à³‚ಗಿನಿಯಾ"
+ },
+ "PY": {
+ "name": "ಪರಾಗà³à²µà³‡"
+ },
+ "PW": {
+ "name": "ಪಲಾವà³"
+ },
+ "EH": {
+ "name": "ಪಶà³à²šà²¿à²® ಸಹಾರಾ"
+ },
+ "PK": {
+ "name": "ಪಾಕಿಸà³à²¤à²¾à²¨"
+ },
+ "PN": {
+ "name": "ಪಿಟà³â€Œà²•à³ˆà²°à³à²¨à³ ದà³à²µà³€à²ªà²—ಳà³"
+ },
+ "TL": {
+ "name": "ಪೂರà³à²µ ತಿಮೋರà³"
+ },
+ "PE": {
+ "name": "ಪೆರà³"
+ },
+ "PT": {
+ "name": "ಪೋರà³à²šà³à²—ಲà³"
+ },
+ "PL": {
+ "name": "ಪೋಲà³à²¯à²¾à²‚ಡà³"
+ },
+ "PS": {
+ "name": "ಪà³à²¯à²¾à²²à³‡à²¸à³à²Ÿà³‡à²¨à²¿à²¯à²¨à³ ಪà³à²°à²¦à³‡à²¶"
+ },
+ "PR": {
+ "name": "ಪà³à²¯à³‚ರà³à²Ÿà³‹ ರಿಕೊ"
+ },
+ "FO": {
+ "name": "ಫರೋ ದà³à²µà³€à²ªà²—ಳà³"
+ },
+ "FK": {
+ "name": "ಫಾಲà³à²•à³â€Œà²²à³à²¯à²¾à²‚ಡೠದà³à²µà³€à²ªà²—ಳà³"
+ },
+ "FJ": {
+ "name": "ಫಿಜಿ"
+ },
+ "FI": {
+ "name": "ಫಿನà³â€Œà²²à³à²¯à²¾à²‚ಡà³"
+ },
+ "PH": {
+ "name": "ಫಿಲಿಫೈನà³à²¸à³"
+ },
+ "FR": {
+ "name": "ಫà³à²°à²¾à²¨à³à²¸à³"
+ },
+ "GF": {
+ "name": "ಫà³à²°à³†à²‚ಚೠಗಯಾನಾ"
+ },
+ "TF": {
+ "name": "ಫà³à²°à³†à²‚ಚೠದಕà³à²·à²¿à²£ ಪà³à²°à²¦à³‡à²¶à²—ಳà³"
+ },
+ "PF": {
+ "name": "ಫà³à²°à³†à²‚ಚೠಪಾಲಿನೇಷà³à²¯à²¾"
+ },
+ "BM": {
+ "name": "ಬರà³à²®à³à²¡à²¾"
+ },
+ "BG": {
+ "name": "ಬಲà³à²—ೇರಿಯಾ"
+ },
+ "BH": {
+ "name": "ಬಹರೈನà³"
+ },
+ "BS": {
+ "name": "ಬಹಾಮಾಸà³"
+ },
+ "BD": {
+ "name": "ಬಾಂಗà³à²²à²¾à²¦à³‡à²¶à³"
+ },
+ "BB": {
+ "name": "ಬಾರà³à²¬à²¡à³‹à²¸à³"
+ },
+ "BI": {
+ "name": "ಬà³à²°à³à²‚ಡಿ"
+ },
+ "BF": {
+ "name": "ಬà³à²°à³à²•à²¿à²¨à²¾ ಫಾಸೋ"
+ },
+ "BJ": {
+ "name": "ಬೆನಿನà³"
+ },
+ "BY": {
+ "name": "ಬೆಲಾರಸà³"
+ },
+ "BZ": {
+ "name": "ಬೆಲಿಜà³"
+ },
+ "BE": {
+ "name": "ಬೆಲà³à²œà²¿à²¯à²®à³"
+ },
+ "BO": {
+ "name": "ಬೊಲಿವಿಯಾ"
+ },
+ "BW": {
+ "name": "ಬೋಟà³à²¸à³â€Œà²µà²¾à²¨à²¾"
+ },
+ "BA": {
+ "name": "ಬೋಸà³à²¨à²¿à²¯à²¾ ಮತà³à²¤à³ ಹರà³à²œà³†à²—ೋವಿನಾ"
+ },
+ "GB": {
+ "name": "ಬà³à²°à²¿à²Ÿà²¨à³\/ಇಂಗà³à²²à³†à²‚ಡà³"
+ },
+ "VG": {
+ "name": "ಬà³à²°à²¿à²Ÿà²¿à²·à³ ವರà³à²œà²¿à²¨à³ ದà³à²µà³€à²ªà²—ಳà³"
+ },
+ "IO": {
+ "name": "ಬà³à²°à²¿à²Ÿà³€à²¶à³ ಇಂಡಿಯನೠಮಹಾಸಾಗರ ಪà³à²°à²¦à³‡à²¶"
+ },
+ "BN": {
+ "name": "ಬà³à²°à³‚ನಿ"
+ },
+ "BR": {
+ "name": "ಬà³à²°à³†à²œà²¿à²²à³"
+ },
+ "IN": {
+ "name": "ಭಾರತ"
+ },
+ "BT": {
+ "name": "ಭೂತಾನà³"
+ },
+ "MO": {
+ "name": "ಮಖಾವೠ(SAR) ಚೈನಾ"
+ },
+ "MG": {
+ "name": "ಮಡಗಾಸà³à²•à²°à³"
+ },
+ "CF": {
+ "name": "ಮಧà³à²¯ ಆಫà³à²°à²¿à²•à²¾ ಗಣರಾಜà³à²¯"
+ },
+ "MM": {
+ "name": "ಮಯನà³à²®à²¾à²°à³ (ಬರà³à²®à²¾)"
+ },
+ "YT": {
+ "name": "ಮಯೊಟà³à²Ÿà³†"
+ },
+ "MW": {
+ "name": "ಮಲಾವಿ"
+ },
+ "MY": {
+ "name": "ಮಲೇಶಿಯಾ"
+ },
+ "MS": {
+ "name": "ಮಾಂಟà³â€Œà²¸à³†à²°à³‡à²Ÿà³"
+ },
+ "MR": {
+ "name": "ಮಾರಿಟೇನಿಯಾ"
+ },
+ "MU": {
+ "name": "ಮಾರಿಶಿಯಸà³"
+ },
+ "MQ": {
+ "name": "ಮಾರà³à²Ÿà²¿à²¨à²¿à²•à³"
+ },
+ "MH": {
+ "name": "ಮಾರà³à²·à²²à³ ದà³à²µà³€à²ªà²—ಳà³"
+ },
+ "ML": {
+ "name": "ಮಾಲಿ"
+ },
+ "MT": {
+ "name": "ಮಾಲà³à²Ÿà²¾"
+ },
+ "MV": {
+ "name": "ಮಾಲà³à²¡à²¿à²µà³à²¸à³"
+ },
+ "MX": {
+ "name": "ಮೆಕà³à²¸à²¿à²•à³Š"
+ },
+ "FM": {
+ "name": "ಮೈಕà³à²°à³‹à²¨à³‡à²¶à²¿à²¯à²¾"
+ },
+ "MN": {
+ "name": "ಮೊಂಗೋಲಿಯಾ"
+ },
+ "ME": {
+ "name": "ಮೊಂಟೆನೆಗà³à²°à³‹"
+ },
+ "MZ": {
+ "name": "ಮೊಜಾಂಬಿಕà³"
+ },
+ "MC": {
+ "name": "ಮೊನಾಕೊ"
+ },
+ "MA": {
+ "name": "ಮೊರಾಕà³à²•à³Š"
+ },
+ "MD": {
+ "name": "ಮೊಲà³à²¡à³‹à²µà²¾"
+ },
+ "MK": {
+ "name": "ಮà³à²¯à²¾à²¸à²¿à²¡à³‹à²¨à²¿à²¯à²¾"
+ },
+ "VI": {
+ "name": "ಯà³.ಎಸà³. ವರà³à²œà²¿à²¨à³ ದà³à²µà³€à²ªà²—ಳà³"
+ },
+ "UM": {
+ "name": "ಯà³à²Žà²¸à³â€Œ. ಔಟà³â€Œà²²à³‡à²¯à²¿à²‚ಗೠದà³à²µà³€à²ªà²—ಳà³"
+ },
+ "YE": {
+ "name": "ಯೆಮನà³"
+ },
+ "RU": {
+ "name": "ರಷà³à²¯à²¾"
+ },
+ "RE": {
+ "name": "ರೀಯೂನಿಯನà³"
+ },
+ "RW": {
+ "name": "ರà³à²µà²¾à²‚ಡಾ"
+ },
+ "RO": {
+ "name": "ರೊಮೇನಿಯಾ"
+ },
+ "LU": {
+ "name": "ಲಕà³à²¸à²‚ಬರà³à²—à³"
+ },
+ "LV": {
+ "name": "ಲಾಟà³à²µà²¿à²¯à²¾"
+ },
+ "LA": {
+ "name": "ಲಾವೋಸà³"
+ },
+ "LI": {
+ "name": "ಲಿಚೆನà³â€Œà²¸à³à²Ÿà³ˆà²¨à³"
+ },
+ "LT": {
+ "name": "ಲಿಥà³à²µà³‡à²¨à²¿à²¯à²¾"
+ },
+ "LY": {
+ "name": "ಲಿಬಿಯಾ"
+ },
+ "LR": {
+ "name": "ಲಿಬೇರಿಯಾ"
+ },
+ "LB": {
+ "name": "ಲೆಬನಾನà³"
+ },
+ "LS": {
+ "name": "ಲೆಸೊಥೋ"
+ },
+ "VU": {
+ "name": "ವನೌಟà³"
+ },
+ "WF": {
+ "name": "ವಾಲಿಸೠಮತà³à²¤à³ ಫà³à²Ÿà³à²¨à²¾"
+ },
+ "VN": {
+ "name": "ವಿಯೇಟà³à²¨à²¾à²®à³"
+ },
+ "VE": {
+ "name": "ವೆನೆಜà³à²µà³†à²²à²¾"
+ },
+ "VA": {
+ "name": "ವà³à²¯à²¾à²Ÿà²¿à²•à²¨à³"
+ },
+ "LK": {
+ "name": "ಶà³à²°à³€à²²à²‚ಕಾ"
+ },
+ "AE": {
+ "name": "ಸಂಯà³à²•à³à²¤ ಅರಬೠಎಮಿರೇಟಸà³"
+ },
+ "WS": {
+ "name": "ಸಮೋವಾ"
+ },
+ "ST": {
+ "name": "ಸಾವೋ ಟೋಮೠಮತà³à²¤à³ ಪà³à²°à²¿à²¨à³à²¸à²¿à²ªà²¿"
+ },
+ "SG": {
+ "name": "ಸಿಂಗಾಪà³à²°à³"
+ },
+ "SX": {
+ "name": "ಸಿಂಟೠಮಾರà³à²Ÿà³†à²¨à³"
+ },
+ "SL": {
+ "name": "ಸಿಯೆರà³à²°à²¾ ಲಿಯೋನà³"
+ },
+ "SY": {
+ "name": "ಸಿರಿಯಾ"
+ },
+ "SC": {
+ "name": "ಸೀಶೆಲà³à²²à³†à²¸à³"
+ },
+ "SR": {
+ "name": "ಸà³à²°à²¿à²¨à²¾à²®"
+ },
+ "SD": {
+ "name": "ಸೂಡಾನà³"
+ },
+ "SN": {
+ "name": "ಸೆನೆಗಲà³"
+ },
+ "EA": {
+ "name": "ಸೆಯà³à²Ÿà²¾ ಹಾಗೂ ಮೆಲಿಲà³à²²à²¾"
+ },
+ "RS": {
+ "name": "ಸೆರà³à²¬à²¿à²¯à²¾"
+ },
+ "KN": {
+ "name": "ಸೇಂಟೠಕಿಟà³à²¸à³ ಮತà³à²¤à³ ನೆವಿಸà³"
+ },
+ "PM": {
+ "name": "ಸೇಂಟೠಪಿಯರೆ ಮತà³à²¤à³ ಮಿಕೆಲನà³"
+ },
+ "BL": {
+ "name": "ಸೇಂಟೠಬಾರà³à²¥à³†à²²à³†à²®à²¿"
+ },
+ "MF": {
+ "name": "ಸೇಂಟೠಮಾರà³à²Ÿà²¿à²¨à³"
+ },
+ "LC": {
+ "name": "ಸೇಂಟೠಲೂಸಿಯಾ"
+ },
+ "SH": {
+ "name": "ಸೇಂಟೠಹೆಲೆನಾ"
+ },
+ "VC": {
+ "name": "ಸೇಂಟà³. ವಿನà³à²¸à³†à²‚ಟೠಮತà³à²¤à³ ಗà³à²°à³†à²¨à³†à²¡à³ˆà²¨à³à²¸à³"
+ },
+ "CY": {
+ "name": "ಸೈಪà³à²°à²¸à³"
+ },
+ "SO": {
+ "name": "ಸೊಮಾಲಿಯಾ"
+ },
+ "SB": {
+ "name": "ಸೊಲೊಮನೠದà³à²µà³€à²ªà²—ಳà³"
+ },
+ "SA": {
+ "name": "ಸೌದಿ ಅರೇಬಿಯಾ"
+ },
+ "ES": {
+ "name": "ಸà³à²ªà³‡à²¨à³"
+ },
+ "SM": {
+ "name": "ಸà³à²¯à²¾à²¨à³ ಮೆರಿನೋ"
+ },
+ "SK": {
+ "name": "ಸà³à²²à³‹à²µà³‡à²•à²¿à²¯à²¾"
+ },
+ "SI": {
+ "name": "ಸà³à²²à³‹à²µà³‡à²¨à²¿à²¯à²¾"
+ },
+ "SZ": {
+ "name": "ಸà³à²µà²¾à²œà²¿à²²à³à²¯à²¾à²‚ಡà³"
+ },
+ "SJ": {
+ "name": "ಸà³à²µà²¾à²²à³à²¬à²¾à²°à³à²¡à³ ಮತà³à²¤à³ ಜಾನೠಮೆಯನà³"
+ },
+ "CH": {
+ "name": "ಸà³à²µà²¿à²Ÿà³à²œà²°à³à²²à³à²¯à²¾à²‚ಡà³"
+ },
+ "SE": {
+ "name": "ಸà³à²µà³€à²¡à²¨à³"
+ },
+ "HU": {
+ "name": "ಹಂಗಾರಿ"
+ },
+ "HK": {
+ "name": "ಹಾಂಕà³â€Œ ಕಾಂಗೠSAR ಚೈನಾ"
+ },
+ "HT": {
+ "name": "ಹೈಟಿ"
+ },
+ "HN": {
+ "name": "ಹೊಂಡà³à²°à²¾à²¸à³"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ko.json b/library/intl/resources/country/ko.json
new file mode 100644
index 000000000..3b621be9f
--- /dev/null
+++ b/library/intl/resources/country/ko.json
@@ -0,0 +1,761 @@
+{
+ "GH": {
+ "name": "가나"
+ },
+ "GA": {
+ "name": "가봉"
+ },
+ "GY": {
+ "name": "ê°€ì´ì•„나"
+ },
+ "GM": {
+ "name": "ê°ë¹„ì•„"
+ },
+ "GG": {
+ "name": "건지"
+ },
+ "GP": {
+ "name": "과들루프"
+ },
+ "GT": {
+ "name": "과테ë§ë¼"
+ },
+ "GU": {
+ "name": "괌"
+ },
+ "GD": {
+ "name": "그레나다"
+ },
+ "GR": {
+ "name": "그리스"
+ },
+ "GL": {
+ "name": "그린란드"
+ },
+ "GW": {
+ "name": "기네비ì˜"
+ },
+ "GN": {
+ "name": "기니"
+ },
+ "CV": {
+ "name": "까뽀베르ë°"
+ },
+ "NA": {
+ "name": "나미비아"
+ },
+ "NR": {
+ "name": "나우루"
+ },
+ "NG": {
+ "name": "나ì´ì§€ë¦¬ì•„"
+ },
+ "AQ": {
+ "name": "남극 대륙"
+ },
+ "SS": {
+ "name": "남수단"
+ },
+ "ZA": {
+ "name": "남아프리카"
+ },
+ "NL": {
+ "name": "네ëœëž€ë“œ"
+ },
+ "BQ": {
+ "name": "네ëœëž€ë“œë ¹ 카리브"
+ },
+ "NP": {
+ "name": "네팔"
+ },
+ "NO": {
+ "name": "노르웨ì´"
+ },
+ "NF": {
+ "name": "ë…¸í½ì„¬"
+ },
+ "NC": {
+ "name": "뉴 칼레ë„니아"
+ },
+ "NZ": {
+ "name": "뉴질랜드"
+ },
+ "NU": {
+ "name": "니우ì—"
+ },
+ "NE": {
+ "name": "니제르"
+ },
+ "NI": {
+ "name": "니카ë¼ê³¼"
+ },
+ "TW": {
+ "name": "대만"
+ },
+ "KR": {
+ "name": "대한민국"
+ },
+ "DK": {
+ "name": "ë´ë§ˆí¬"
+ },
+ "DM": {
+ "name": "ë„미니카"
+ },
+ "DO": {
+ "name": "ë„미니카 공화국"
+ },
+ "DE": {
+ "name": "ë…ì¼"
+ },
+ "TL": {
+ "name": "ë™í‹°ëª¨ë¥´"
+ },
+ "DG": {
+ "name": "ë””ì—ê³  가르시아"
+ },
+ "LA": {
+ "name": "ë¼ì˜¤ìŠ¤"
+ },
+ "LR": {
+ "name": "ë¼ì´ë² ë¦¬ì•„"
+ },
+ "LV": {
+ "name": "ë¼íŠ¸ë¹„ì•„"
+ },
+ "RU": {
+ "name": "러시아"
+ },
+ "LB": {
+ "name": "레바논"
+ },
+ "LS": {
+ "name": "레소토"
+ },
+ "RO": {
+ "name": "루마니아"
+ },
+ "LU": {
+ "name": "룩셈부르í¬"
+ },
+ "RW": {
+ "name": "르완다"
+ },
+ "LY": {
+ "name": "리비아"
+ },
+ "RE": {
+ "name": "리유니온"
+ },
+ "LT": {
+ "name": "리투아니아"
+ },
+ "LI": {
+ "name": "리히í…슈타ì¸"
+ },
+ "MG": {
+ "name": "마다가스카르"
+ },
+ "MH": {
+ "name": "마샬 êµ°ë„"
+ },
+ "YT": {
+ "name": "마요티"
+ },
+ "MO": {
+ "name": "마카오, 중국 특별행정구"
+ },
+ "MK": {
+ "name": "마케ë„니아"
+ },
+ "MW": {
+ "name": "ë§ë¼ìœ„"
+ },
+ "MY": {
+ "name": "ë§ë ˆì´ì‹œì•„"
+ },
+ "ML": {
+ "name": "ë§ë¦¬"
+ },
+ "MQ": {
+ "name": "ë§í‹°ë‹ˆí¬"
+ },
+ "IM": {
+ "name": "맨 섬"
+ },
+ "MX": {
+ "name": "멕시코"
+ },
+ "MC": {
+ "name": "모나코"
+ },
+ "MA": {
+ "name": "모로코"
+ },
+ "MU": {
+ "name": "모리셔스"
+ },
+ "MR": {
+ "name": "모리타니"
+ },
+ "MZ": {
+ "name": "모잠비í¬"
+ },
+ "ME": {
+ "name": "몬테네그로"
+ },
+ "MS": {
+ "name": "몬트세ë¼íŠ¸"
+ },
+ "MD": {
+ "name": "몰ë„ë°”"
+ },
+ "MV": {
+ "name": "몰디브"
+ },
+ "MT": {
+ "name": "몰타"
+ },
+ "MN": {
+ "name": "몽골"
+ },
+ "US": {
+ "name": "미국"
+ },
+ "VI": {
+ "name": "미국령 버진 ì•„ì¼ëžœë“œ"
+ },
+ "UM": {
+ "name": "미국령 해외 ì œë„"
+ },
+ "MM": {
+ "name": "미얀마"
+ },
+ "FM": {
+ "name": "미í¬ë¡œë„¤ì‹œì•„"
+ },
+ "VU": {
+ "name": "바누아투"
+ },
+ "BH": {
+ "name": "바레ì¸"
+ },
+ "BB": {
+ "name": "바베ì´ë„스"
+ },
+ "VA": {
+ "name": "바티칸"
+ },
+ "BS": {
+ "name": "바하마"
+ },
+ "BD": {
+ "name": "방글ë¼ë°ì‹œ"
+ },
+ "BM": {
+ "name": "버뮤다"
+ },
+ "BJ": {
+ "name": "베냉"
+ },
+ "VE": {
+ "name": "베네수엘ë¼"
+ },
+ "VN": {
+ "name": "베트남"
+ },
+ "BE": {
+ "name": "벨기ì—"
+ },
+ "BY": {
+ "name": "벨ë¼ë£¨ìŠ¤"
+ },
+ "BZ": {
+ "name": "벨리즈"
+ },
+ "BA": {
+ "name": "보스니아 헤르체고비나"
+ },
+ "BW": {
+ "name": "보츠와나"
+ },
+ "BO": {
+ "name": "볼리비아"
+ },
+ "BI": {
+ "name": "부룬디"
+ },
+ "BF": {
+ "name": "부르키나파소"
+ },
+ "BT": {
+ "name": "부탄"
+ },
+ "MP": {
+ "name": "ë¶ë§ˆë¦¬ì•„나제ë„"
+ },
+ "BG": {
+ "name": "불가리아"
+ },
+ "BR": {
+ "name": "브ë¼ì§ˆ"
+ },
+ "BN": {
+ "name": "브루나ì´"
+ },
+ "WS": {
+ "name": "사모아"
+ },
+ "SA": {
+ "name": "사우디아ë¼ë¹„ì•„"
+ },
+ "GS": {
+ "name": "사우스조지아 사우스샌드위치 ì œë„"
+ },
+ "CY": {
+ "name": "사ì´í”„러스"
+ },
+ "SM": {
+ "name": "산마리노"
+ },
+ "ST": {
+ "name": "ìƒíˆ¬ë©” 프린시페"
+ },
+ "MF": {
+ "name": "ìƒ ë§ˆë¥´íƒ±"
+ },
+ "BL": {
+ "name": "ìƒ ë°”ë¥´í…”ë¥´ë¯¸"
+ },
+ "PM": {
+ "name": "ìƒí”¼ì—르 미í´ë¡±"
+ },
+ "EH": {
+ "name": "서사하ë¼"
+ },
+ "SN": {
+ "name": "세네갈"
+ },
+ "RS": {
+ "name": "세르비아"
+ },
+ "EA": {
+ "name": "세우타 ë° ë©œë¦¬ì•¼"
+ },
+ "KN": {
+ "name": "세ì¸íŠ¸ 키츠 네비스"
+ },
+ "LC": {
+ "name": "세ì¸íŠ¸ë£¨ì‹œì•„"
+ },
+ "VC": {
+ "name": "세ì¸íŠ¸ë¹ˆì„¼íŠ¸ê·¸ë ˆë‚˜ë”˜"
+ },
+ "SH": {
+ "name": "세ì¸íŠ¸í—¬ë ˆë‚˜"
+ },
+ "SO": {
+ "name": "소ë§ë¦¬ì•„"
+ },
+ "SB": {
+ "name": "솔로몬 ì œë„"
+ },
+ "SD": {
+ "name": "수단"
+ },
+ "SR": {
+ "name": "수리남"
+ },
+ "SC": {
+ "name": "ì‰ì´ì‰˜"
+ },
+ "LK": {
+ "name": "스리랑카"
+ },
+ "SJ": {
+ "name": "스발바르제ë„-얀마웬섬"
+ },
+ "SZ": {
+ "name": "스와질랜드"
+ },
+ "SE": {
+ "name": "스웨ë´"
+ },
+ "CH": {
+ "name": "스위스"
+ },
+ "ES": {
+ "name": "스페ì¸"
+ },
+ "SK": {
+ "name": "슬로바키아"
+ },
+ "SI": {
+ "name": "슬로베니아"
+ },
+ "SY": {
+ "name": "시리아"
+ },
+ "SL": {
+ "name": "ì‹œì—ë¼ë¦¬ì˜¨"
+ },
+ "SX": {
+ "name": "신트마르턴"
+ },
+ "SG": {
+ "name": "싱가í¬ë¥´"
+ },
+ "AE": {
+ "name": "ì•„ëžì—미리트 ì—°í•©"
+ },
+ "AW": {
+ "name": "아루바"
+ },
+ "AM": {
+ "name": "아르메니아"
+ },
+ "AR": {
+ "name": "아르헨티나"
+ },
+ "AS": {
+ "name": "아메리칸 사모아"
+ },
+ "IS": {
+ "name": "ì•„ì´ìŠ¬ëž€ë“œ"
+ },
+ "HT": {
+ "name": "ì•„ì´í‹°"
+ },
+ "IE": {
+ "name": "ì•„ì¼ëžœë“œ"
+ },
+ "AZ": {
+ "name": "아제르바ì´ìž”"
+ },
+ "AF": {
+ "name": "아프가니스탄"
+ },
+ "AI": {
+ "name": "안길ë¼"
+ },
+ "AD": {
+ "name": "안ë„ë¼"
+ },
+ "AL": {
+ "name": "알바니아"
+ },
+ "DZ": {
+ "name": "알제리"
+ },
+ "AO": {
+ "name": "앙골ë¼"
+ },
+ "AG": {
+ "name": "앤티가 바부다"
+ },
+ "AC": {
+ "name": "어센션 섬"
+ },
+ "ER": {
+ "name": "ì—리트리아"
+ },
+ "EE": {
+ "name": "ì—스토니아"
+ },
+ "EC": {
+ "name": "ì—ì½°ë„르"
+ },
+ "SV": {
+ "name": "엘살바ë„르"
+ },
+ "GB": {
+ "name": "ì˜êµ­"
+ },
+ "VG": {
+ "name": "ì˜êµ­ë ¹ 버진 ì•„ì¼ëžœë“œ"
+ },
+ "IO": {
+ "name": "ì˜êµ­ë ¹ì¸ë„ì–‘ì‹ë¯¼ì§€"
+ },
+ "YE": {
+ "name": "예멘"
+ },
+ "OM": {
+ "name": "오만"
+ },
+ "AU": {
+ "name": "오스트레ì¼ë¦¬ì•„"
+ },
+ "AT": {
+ "name": "오스트리아"
+ },
+ "HN": {
+ "name": "온ë‘ë¼ìŠ¤"
+ },
+ "AX": {
+ "name": "올란드 ì œë„"
+ },
+ "WF": {
+ "name": "왈리스-푸투나 ì œë„"
+ },
+ "JO": {
+ "name": "요르단"
+ },
+ "UG": {
+ "name": "우간다"
+ },
+ "UY": {
+ "name": "우루과ì´"
+ },
+ "UZ": {
+ "name": "우즈베키스탄"
+ },
+ "UA": {
+ "name": "ìš°í¬ë¼ì´ë‚˜"
+ },
+ "ET": {
+ "name": "ì´ë””오피아"
+ },
+ "IQ": {
+ "name": "ì´ë¼í¬"
+ },
+ "IR": {
+ "name": "ì´ëž€"
+ },
+ "IL": {
+ "name": "ì´ìŠ¤ë¼ì—˜"
+ },
+ "EG": {
+ "name": "ì´ì§‘트"
+ },
+ "IT": {
+ "name": "ì´íƒˆë¦¬ì•„"
+ },
+ "IN": {
+ "name": "ì¸ë„"
+ },
+ "ID": {
+ "name": "ì¸ë„네시아"
+ },
+ "JP": {
+ "name": "ì¼ë³¸"
+ },
+ "JM": {
+ "name": "ìžë©”ì´ì¹´"
+ },
+ "ZM": {
+ "name": "잠비아"
+ },
+ "JE": {
+ "name": "저지"
+ },
+ "GQ": {
+ "name": "ì ë„ 기니"
+ },
+ "KP": {
+ "name": "ì¡°ì„  ë¯¼ì£¼ì£¼ì˜ ì¸ë¯¼ 공화국"
+ },
+ "GE": {
+ "name": "조지아"
+ },
+ "CN": {
+ "name": "중국"
+ },
+ "CF": {
+ "name": "중앙 아프리카 공화국"
+ },
+ "DJ": {
+ "name": "지부티"
+ },
+ "GI": {
+ "name": "지브롤터"
+ },
+ "ZW": {
+ "name": "ì§ë°”브웨"
+ },
+ "TD": {
+ "name": "차드"
+ },
+ "CZ": {
+ "name": "ì²´ì½”"
+ },
+ "CL": {
+ "name": "ì¹ ë ˆ"
+ },
+ "IC": {
+ "name": "카나리아 ì œë„"
+ },
+ "CM": {
+ "name": "카메룬"
+ },
+ "KZ": {
+ "name": "ì¹´ìží스탄"
+ },
+ "QA": {
+ "name": "카타르"
+ },
+ "KH": {
+ "name": "캄보디아"
+ },
+ "CA": {
+ "name": "ìºë‚˜ë‹¤"
+ },
+ "KE": {
+ "name": "ì¼€ëƒ"
+ },
+ "KY": {
+ "name": "ì¼€ì´ë§¨ì œë„"
+ },
+ "KM": {
+ "name": "코모로스"
+ },
+ "XK": {
+ "name": "코소보"
+ },
+ "CR": {
+ "name": "코스타리카"
+ },
+ "CC": {
+ "name": "코코스제ë„"
+ },
+ "CI": {
+ "name": "코트디부아르"
+ },
+ "CO": {
+ "name": "콜롬비아"
+ },
+ "CG": {
+ "name": "콩고"
+ },
+ "CD": {
+ "name": "콩고-킨샤사"
+ },
+ "CU": {
+ "name": "ì¿ ë°”"
+ },
+ "KW": {
+ "name": "쿠웨ì´íŠ¸"
+ },
+ "CK": {
+ "name": "ì¿¡ì œë„"
+ },
+ "CW": {
+ "name": "퀴ë¼ì†Œ"
+ },
+ "HR": {
+ "name": "í¬ë¡œì•„í‹°ì•„"
+ },
+ "CX": {
+ "name": "í¬ë¦¬ìŠ¤ë§ˆìŠ¤ì„¬"
+ },
+ "KG": {
+ "name": "키르기스스탄"
+ },
+ "KI": {
+ "name": "키리바시"
+ },
+ "TJ": {
+ "name": "타지키스탄"
+ },
+ "TZ": {
+ "name": "탄ìžë‹ˆì•„"
+ },
+ "TH": {
+ "name": "태국"
+ },
+ "TC": {
+ "name": "í„°í¬ìŠ¤ì¼€ì´ì»¤ìŠ¤ì œë„"
+ },
+ "TR": {
+ "name": "터키"
+ },
+ "TG": {
+ "name": "토고"
+ },
+ "TK": {
+ "name": "토켈ë¼ìš°"
+ },
+ "TO": {
+ "name": "통가"
+ },
+ "TM": {
+ "name": "투르í¬ë©”니스탄"
+ },
+ "TV": {
+ "name": "투발루"
+ },
+ "TN": {
+ "name": "튀니지"
+ },
+ "TT": {
+ "name": "트리니다드 토바고"
+ },
+ "TA": {
+ "name": "트리스탄다쿠나"
+ },
+ "PA": {
+ "name": "파나마"
+ },
+ "PY": {
+ "name": "파ë¼ê³¼ì´"
+ },
+ "PK": {
+ "name": "파키스탄"
+ },
+ "PG": {
+ "name": "파푸아뉴기니"
+ },
+ "PW": {
+ "name": "팔ë¼ìš°"
+ },
+ "PS": {
+ "name": "íŒ”ë ˆìŠ¤íƒ€ì¸ ì§€êµ¬"
+ },
+ "FO": {
+ "name": "페로제ë„"
+ },
+ "PE": {
+ "name": "페루"
+ },
+ "PT": {
+ "name": "í¬ë¥´íˆ¬ê°ˆ"
+ },
+ "FK": {
+ "name": "í¬í´ëžœë“œ ì œë„"
+ },
+ "PL": {
+ "name": "í´ëž€ë“œ"
+ },
+ "PR": {
+ "name": "푸ì—르토리코"
+ },
+ "FR": {
+ "name": "프랑스"
+ },
+ "TF": {
+ "name": "프랑스 남부 지방"
+ },
+ "GF": {
+ "name": "프랑스령 기아나"
+ },
+ "PF": {
+ "name": "프랑스령 í´ë¦¬ë„¤ì‹œì•„"
+ },
+ "FJ": {
+ "name": "피지"
+ },
+ "FI": {
+ "name": "핀란드"
+ },
+ "PH": {
+ "name": "필리핀"
+ },
+ "PN": {
+ "name": "í•ì¼€ì–¸ 섬"
+ },
+ "HU": {
+ "name": "í—가리"
+ },
+ "HK": {
+ "name": "í™ì½©, 중국 특별행정구"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ks.json b/library/intl/resources/country/ks.json
new file mode 100644
index 000000000..08e833978
--- /dev/null
+++ b/library/intl/resources/country/ks.json
@@ -0,0 +1,761 @@
+{
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "AZ": {
+ "name": "آزَرباجان"
+ },
+ "AU": {
+ "name": "آسٹریلÙیا"
+ },
+ "AT": {
+ "name": "آسٹÙیا"
+ },
+ "IM": {
+ "name": "Ø¢ÛŒÙÙ„ آ٠میٛن"
+ },
+ "AR": {
+ "name": "أرجَنٹینا"
+ },
+ "SV": {
+ "name": "اٮ۪ل سَلواڑور"
+ },
+ "AL": {
+ "name": "اٮ۪لبانÙیا"
+ },
+ "DZ": {
+ "name": "اٮ۪لجیرÙیا"
+ },
+ "AG": {
+ "name": "اٮ۪نٹÙÚ¯Ùوا تÛÙ• باربوڑا"
+ },
+ "AD": {
+ "name": "اٮ۪نڑورا"
+ },
+ "ET": {
+ "name": "اÙتھوپÙیا"
+ },
+ "IT": {
+ "name": "اÙٹلی"
+ },
+ "ER": {
+ "name": "اÙرٕٹÙیا"
+ },
+ "AM": {
+ "name": "اَرمانÙیا"
+ },
+ "AW": {
+ "name": "اَروٗبا"
+ },
+ "UZ": {
+ "name": "اÙزبÙÚ©Ùستان"
+ },
+ "IL": {
+ "name": "اÙسرایٖل"
+ },
+ "AF": {
+ "name": "اَÙغانَستان"
+ },
+ "EC": {
+ "name": "اÙکواڑور"
+ },
+ "GQ": {
+ "name": "اÙÚ©ÙˆÙٹورÙیَل Ú¯ÙÙ†ÛŒ"
+ },
+ "AS": {
+ "name": "اَمریٖکَن سَموا"
+ },
+ "ID": {
+ "name": "اÙنڑونیشÙیا"
+ },
+ "AI": {
+ "name": "انگوئیلا"
+ },
+ "AO": {
+ "name": "انگولا"
+ },
+ "OM": {
+ "name": "اومان"
+ },
+ "IQ": {
+ "name": "ایٖراق"
+ },
+ "IR": {
+ "name": "ایٖران"
+ },
+ "IE": {
+ "name": "اَیَرلینٛڑ"
+ },
+ "EE": {
+ "name": "ایسٹونÙیا"
+ },
+ "IS": {
+ "name": "اَیÙسلینٛڑ"
+ },
+ "AX": {
+ "name": "ایلینٛڑ جٔزیٖرٕ"
+ },
+ "AQ": {
+ "name": "اینٹارٹÙکا"
+ },
+ "CI": {
+ "name": "اَیوٕری کوسٹ"
+ },
+ "BB": {
+ "name": "باربیڈاس"
+ },
+ "BH": {
+ "name": "بحریٖن"
+ },
+ "BR": {
+ "name": "برٛازÙÙ„"
+ },
+ "VG": {
+ "name": "بَرطانوی ؤرجÙÙ† جٔزیٖرٕ"
+ },
+ "IO": {
+ "name": "برطانوی بحر٠ÛÙÙ†Ù›Ø¯Û Ø¹Ù„Ø§Ù‚ÛÙ•"
+ },
+ "BQ": {
+ "name": "برطانوی Ù‚ÙطبÛ٠جَنوٗبی علاقÛÙ•"
+ },
+ "BF": {
+ "name": "بÙرکÙنا Ùیسو"
+ },
+ "BM": {
+ "name": "بٔرمیوڈا"
+ },
+ "BN": {
+ "name": "بÙرنٔے"
+ },
+ "BG": {
+ "name": "بَلجیرÙیا"
+ },
+ "BD": {
+ "name": "بَنٛگلادیش"
+ },
+ "BJ": {
+ "name": "بÙÙ†ÙÙ†"
+ },
+ "BS": {
+ "name": "بَÛامَس"
+ },
+ "BW": {
+ "name": "بوتَسوانا"
+ },
+ "BT": {
+ "name": "بوٗٹان"
+ },
+ "BI": {
+ "name": "بورَنڈÙ"
+ },
+ "BA": {
+ "name": "بوسنÙیا تÛÙ• ÛَرزÙگووÙنا"
+ },
+ "BO": {
+ "name": "بولÙÙˆÙیا"
+ },
+ "BY": {
+ "name": "بیلاروٗس"
+ },
+ "BZ": {
+ "name": "بیلÙج"
+ },
+ "BE": {
+ "name": "بیٛلجÙیَم"
+ },
+ "PG": {
+ "name": "پاپÙوا نیوٗ گیٖنی"
+ },
+ "PK": {
+ "name": "پاکÙستان"
+ },
+ "PN": {
+ "name": "Ù¾ÙÙ¹Ú©ÛŒØ±Ù•Ù†Û Ø¬Ù”Ø²ÛŒÙ–Ø±Ù•"
+ },
+ "PY": {
+ "name": "پَراگÙÛ’"
+ },
+ "PT": {
+ "name": "Ù¾ÙرتÙگال"
+ },
+ "PR": {
+ "name": "پٔرٹو رÙÚ©Ùˆ"
+ },
+ "PW": {
+ "name": "پَلاو"
+ },
+ "PA": {
+ "name": "پَناما"
+ },
+ "PL": {
+ "name": "پولینٛڑ"
+ },
+ "PE": {
+ "name": "پیٖروٗ"
+ },
+ "TJ": {
+ "name": "تاجکÙستان"
+ },
+ "TW": {
+ "name": "تایوان"
+ },
+ "TC": {
+ "name": "تÙرÙÚ© تÛÙ• کیکوس جٔزیٖرٕ"
+ },
+ "TR": {
+ "name": "تÙرکی"
+ },
+ "TM": {
+ "name": "تÙرمÙÙ†Ùستان"
+ },
+ "TZ": {
+ "name": "تَنجانÙیا"
+ },
+ "TH": {
+ "name": "تھایلینٛڑ"
+ },
+ "TK": {
+ "name": "توکیلاو"
+ },
+ "TV": {
+ "name": "توٗوالوٗ"
+ },
+ "TT": {
+ "name": "ٹرٛنÙنداد تÛÙ• ٹوبیگو"
+ },
+ "TG": {
+ "name": "ٹوگو"
+ },
+ "TO": {
+ "name": "ٹونٛگا"
+ },
+ "TN": {
+ "name": "ٹونیشÙیا"
+ },
+ "JP": {
+ "name": "جاپان"
+ },
+ "GE": {
+ "name": "جارجÙیا"
+ },
+ "ZM": {
+ "name": "جامبÙیا"
+ },
+ "GI": {
+ "name": "جÙبرالٹَر"
+ },
+ "DJ": {
+ "name": "جÙبوٗتی"
+ },
+ "JE": {
+ "name": "جٔرسی"
+ },
+ "DE": {
+ "name": "جرمٔنی"
+ },
+ "JM": {
+ "name": "جَمایکا"
+ },
+ "ZA": {
+ "name": "جَنوٗبی اَÙریٖکا"
+ },
+ "GS": {
+ "name": "جنوٗبی جارجÙیا تÛÙ• جنوٗبی سینٛڑوٕچ جٔزیٖرٕ"
+ },
+ "KR": {
+ "name": "جنوٗبی کورÙیا"
+ },
+ "TD": {
+ "name": "چاڑ"
+ },
+ "CL": {
+ "name": "Ú†ÙÙ„ÛŒ"
+ },
+ "CZ": {
+ "name": "چیک جَموٗرÙیَت"
+ },
+ "CN": {
+ "name": "چیٖن"
+ },
+ "DM": {
+ "name": "ڈومÙÙ†Ùکا"
+ },
+ "DO": {
+ "name": "ڈومÙÙ†ÙÚ©ÙŽÙ† جموٗرÙیَت"
+ },
+ "DK": {
+ "name": "ڈینٛمارٕک"
+ },
+ "RU": {
+ "name": "روٗس"
+ },
+ "RO": {
+ "name": "رومانÙیا"
+ },
+ "RW": {
+ "name": "روٗوانٛڈا"
+ },
+ "RE": {
+ "name": "رÙیوٗنÙیَن"
+ },
+ "ZW": {
+ "name": "زÙمبابے"
+ },
+ "ST": {
+ "name": "ساو توم تÛÙ• پرٛنسÙÙ¾ÛŒ"
+ },
+ "CY": {
+ "name": "سایÙرٛس"
+ },
+ "ES": {
+ "name": "سٕپین"
+ },
+ "RS": {
+ "name": "سَربÙیا"
+ },
+ "SR": {
+ "name": "سÙرÙنام"
+ },
+ "LK": {
+ "name": "سÙریٖلَنٛکا"
+ },
+ "SK": {
+ "name": "سَلوواکÙیا"
+ },
+ "SI": {
+ "name": "سَلووینÙیا"
+ },
+ "SG": {
+ "name": "ٛسÙنٛگاپوٗر"
+ },
+ "SJ": {
+ "name": "سَوالبریڑ تÛÙ• جان ماییڑ"
+ },
+ "SA": {
+ "name": "سوٗدی عربÙÛŒÛ"
+ },
+ "SD": {
+ "name": "سوٗڈان"
+ },
+ "SE": {
+ "name": "سÙÙˆÙÚˆÙŽÙ†"
+ },
+ "CH": {
+ "name": "سÙÙˆÙزَرلینٛڑ"
+ },
+ "SZ": {
+ "name": "سÙوزÙلینٛڑ"
+ },
+ "SB": {
+ "name": "سولامان جٔزیٖرٕ"
+ },
+ "SO": {
+ "name": "سومالÙیا"
+ },
+ "SL": {
+ "name": "سیٖرالیوون"
+ },
+ "SC": {
+ "name": "سیشَلÙس"
+ },
+ "WS": {
+ "name": "سیمووا"
+ },
+ "SM": {
+ "name": "سین میرÙنو"
+ },
+ "BL": {
+ "name": "سینٛٹ بارتَھیلمی"
+ },
+ "PM": {
+ "name": "سینٛٹ پیٖری تÛÙ• موکیلÙیَن"
+ },
+ "KN": {
+ "name": "سینٛٹ Ú©Ùٹَس تÛÙ• نیوÙس"
+ },
+ "LC": {
+ "name": "سینٛٹ لوٗسÙیا"
+ },
+ "MF": {
+ "name": "سینٛٹ مارٹÙÙ†"
+ },
+ "SH": {
+ "name": "سینٛٹ ÛÙ®ÛªÙ„Ùنا"
+ },
+ "VC": {
+ "name": "سینٛٹ وینسٮ۪ٹ تÛÙ• گرٛیناڑاینٕز"
+ },
+ "SN": {
+ "name": "سینیگَل"
+ },
+ "SY": {
+ "name": "شام"
+ },
+ "KP": {
+ "name": "Ø´Ùمٲلی کورÙیا"
+ },
+ "MP": {
+ "name": "Ø´Ùمٲلی مارÙیانا جٔزیٖرٕ"
+ },
+ "FJ": {
+ "name": "ÙÙجی"
+ },
+ "FR": {
+ "name": "Ùرٛانس"
+ },
+ "TF": {
+ "name": "ÙرٛانسÙسی جَنوٗبی عَلاقÛÙ•"
+ },
+ "GF": {
+ "name": "ÙرٛانسÙسی Ú¯Ùانا"
+ },
+ "PF": {
+ "name": "Ùرٛانسی پولÙنیشÙیا"
+ },
+ "FK": {
+ "name": "Ùٕلاکلینٛڑ جٔزیٖرٕ"
+ },
+ "PH": {
+ "name": "ÙÙÙ„ÙÙ¾Ùینس"
+ },
+ "PS": {
+ "name": "Ùَلَستیٖن"
+ },
+ "FI": {
+ "name": "ÙÙنلینٛڑ"
+ },
+ "QA": {
+ "name": "Ù‚ÙŽØ·Ùر"
+ },
+ "KI": {
+ "name": "Ú©Ùرٕباتی"
+ },
+ "CX": {
+ "name": "کرÙسمَس جٔزیٖرٕ"
+ },
+ "KG": {
+ "name": "Ú©ÙرگÙستان"
+ },
+ "HR": {
+ "name": "کرٛوشÙیا"
+ },
+ "KZ": {
+ "name": "کَزاکÙستان"
+ },
+ "CK": {
+ "name": "Ú©ÙÚ© جٔزیٖرٕ"
+ },
+ "KH": {
+ "name": "کَمبوڑÙیا"
+ },
+ "KM": {
+ "name": "کَمورَس"
+ },
+ "KE": {
+ "name": "Ú©Ùنٛیا"
+ },
+ "CR": {
+ "name": "کوسٹا رÙکا"
+ },
+ "CC": {
+ "name": "کوکَس کیٖلÙÙ†Ù›Ú¯ جٔزیٖرٕ"
+ },
+ "CO": {
+ "name": "کولَمبÙیا"
+ },
+ "CG": {
+ "name": "کونٛگو بٔرٛزاوÙÙ„ÛŒ"
+ },
+ "CD": {
+ "name": "کونٛگو Ú©Ùنشاسا"
+ },
+ "KW": {
+ "name": "Ú©Ùویت"
+ },
+ "CV": {
+ "name": "کیپ ؤرڑی"
+ },
+ "CM": {
+ "name": "کیٚمÙروٗن"
+ },
+ "KY": {
+ "name": "کیمَن جٔزیٖرٕ"
+ },
+ "CA": {
+ "name": "کینَڑا"
+ },
+ "CU": {
+ "name": "کیوٗبا"
+ },
+ "GH": {
+ "name": "گانا"
+ },
+ "GD": {
+ "name": "گرٛنیڑا"
+ },
+ "GR": {
+ "name": "گریٖس"
+ },
+ "GL": {
+ "name": "گریٖنلینٛڑ"
+ },
+ "GM": {
+ "name": "گَمبÙیا"
+ },
+ "GN": {
+ "name": "Ú¯ÙÙ†ÛŒ"
+ },
+ "GP": {
+ "name": "گَواڑیلوپ"
+ },
+ "GU": {
+ "name": "Ú¯Ùوام"
+ },
+ "GT": {
+ "name": "گوتیدالا"
+ },
+ "GY": {
+ "name": "Ú¯Ùیانا"
+ },
+ "GA": {
+ "name": "گیبان"
+ },
+ "GW": {
+ "name": "گیٖنی بÙساو"
+ },
+ "GG": {
+ "name": "گیوَنَرسے"
+ },
+ "LA": {
+ "name": "لاس"
+ },
+ "LR": {
+ "name": "لایبیرÙیا"
+ },
+ "LB": {
+ "name": "لٮ۪بنان"
+ },
+ "LY": {
+ "name": "Ù„Ùبیا"
+ },
+ "LT": {
+ "name": "Ù„ÙتھÙوانÙیا"
+ },
+ "LI": {
+ "name": "Ù„Ùکٹیٛسٹیٖن"
+ },
+ "LU": {
+ "name": "لَکسَمبٔرٕگ"
+ },
+ "LV": {
+ "name": "لیٛٹوÙیا"
+ },
+ "LS": {
+ "name": "لیسوتھو"
+ },
+ "MR": {
+ "name": "مارٕٹانÙیا"
+ },
+ "MQ": {
+ "name": "مارٹÙÙ†ÙÚ©"
+ },
+ "MH": {
+ "name": "مارشَل جٔزیٖرٕ"
+ },
+ "MT": {
+ "name": "مالٹا"
+ },
+ "MV": {
+ "name": "مالدیٖو"
+ },
+ "ML": {
+ "name": "مالی"
+ },
+ "MS": {
+ "name": "مانٛٹسیراٹ"
+ },
+ "MK": {
+ "name": "مٮ۪سوڑونÙیا"
+ },
+ "MX": {
+ "name": "مٮ۪کسÙÚ©Ùˆ"
+ },
+ "AE": {
+ "name": "Ù…ÙØªØ­Ø¯Û Ø¹Ø±ÙŽØ¨ امارات"
+ },
+ "CF": {
+ "name": "مرکٔزی اَÙریٖکی جموٗریَت"
+ },
+ "EG": {
+ "name": "Ù…Ùسٔر"
+ },
+ "TL": {
+ "name": "مَشرÙÙ‚ÛŒ تایمور"
+ },
+ "EH": {
+ "name": "مشرÙÙ‚ÛŒ سَÛارا"
+ },
+ "MO": {
+ "name": "مَکاوو ایس اے آر چیٖن"
+ },
+ "MW": {
+ "name": "ملاوی"
+ },
+ "MY": {
+ "name": "مَلیشÙیا"
+ },
+ "MN": {
+ "name": "مَنٛگولÙیا"
+ },
+ "ME": {
+ "name": "موٹونیٛگÙریو"
+ },
+ "MU": {
+ "name": "مورÙشَس"
+ },
+ "MA": {
+ "name": "موروکو"
+ },
+ "MZ": {
+ "name": "موزَمبÙÚ©"
+ },
+ "MD": {
+ "name": "مولڑاوÙیا"
+ },
+ "MC": {
+ "name": "مونیٚکو"
+ },
+ "MG": {
+ "name": "میڑاگاسکار"
+ },
+ "MM": {
+ "name": "مَیَنما بٔرما"
+ },
+ "YT": {
+ "name": "مَییٹ"
+ },
+ "NF": {
+ "name": "نارÙاک جٔزیٖرٕ"
+ },
+ "NR": {
+ "name": "نارووٗ"
+ },
+ "NO": {
+ "name": "ناروے"
+ },
+ "NI": {
+ "name": "ناکاراگÙوا"
+ },
+ "NA": {
+ "name": "نامÙبÙیا"
+ },
+ "NE": {
+ "name": "نایجَر"
+ },
+ "NG": {
+ "name": "نایجیرÙیا"
+ },
+ "NC": {
+ "name": "Ù†ÙÙˆ کیلÙڑونÙیا"
+ },
+ "NP": {
+ "name": "نیپال"
+ },
+ "NL": {
+ "name": "نیٖدَرلینٛڑ"
+ },
+ "NU": {
+ "name": "نیوٗ"
+ },
+ "NZ": {
+ "name": "نیوٗزÙلینٛڑ"
+ },
+ "HN": {
+ "name": "ÛانٛڈوٗرÙس"
+ },
+ "HK": {
+ "name": "Ûانٛگ کانٛگ ایس اے آر چیٖن"
+ },
+ "HT": {
+ "name": "Ûایتی"
+ },
+ "IN": {
+ "name": "ÛÙنٛدوستان"
+ },
+ "HU": {
+ "name": "Ûَنٛگری"
+ },
+ "WF": {
+ "name": "والÙس تÛÙ• Ùیوٗچوٗنا"
+ },
+ "VU": {
+ "name": "وانوٗتوٗ"
+ },
+ "VA": {
+ "name": "ویٹÙÚ©ÙŽÙ† سÙÙ¹ÛŒ"
+ },
+ "VN": {
+ "name": "ویٹÙنام"
+ },
+ "VE": {
+ "name": "وینازوٗلا"
+ },
+ "YE": {
+ "name": "یَمَن"
+ },
+ "GB": {
+ "name": "ÛŒÙنایٹÙÚ‘ Ú©ÙÙ†Ù›Ú¯ÚˆÙŽÙ…"
+ },
+ "VI": {
+ "name": "یوٗ ایس ؤرجÙÙ† جٔزیٖرٕ"
+ },
+ "UA": {
+ "name": "یوٗرÙکین"
+ },
+ "UY": {
+ "name": "یوٗروگے"
+ },
+ "UG": {
+ "name": "یوٗگانٛڑا"
+ },
+ "US": {
+ "name": "یوٗنایٹÙÚ‘ سÙٹیٹÙس"
+ },
+ "UM": {
+ "name": "یوٗنایٹÙÚ‘ سÙٹیٹÙس ماینَر آوÙٹلییÙÙ†Ù›Ú¯ جٔزیٖرٕ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ksb.json b/library/intl/resources/country/ksb.json
new file mode 100644
index 000000000..ee91470b3
--- /dev/null
+++ b/library/intl/resources/country/ksb.json
@@ -0,0 +1,761 @@
+{
+ "ZA": {
+ "name": "Aflika Kusini"
+ },
+ "AF": {
+ "name": "Afuganistani"
+ },
+ "IS": {
+ "name": "Aislandi"
+ },
+ "AR": {
+ "name": "Ajentina"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljelia"
+ },
+ "AM": {
+ "name": "Almenia"
+ },
+ "AW": {
+ "name": "Aluba"
+ },
+ "AD": {
+ "name": "Andola"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua na Balbuda"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Austlalia"
+ },
+ "AT": {
+ "name": "Austlia"
+ },
+ "IE": {
+ "name": "Ayalandi"
+ },
+ "AZ": {
+ "name": "Azabajani"
+ },
+ "BB": {
+ "name": "Babadosi"
+ },
+ "BH": {
+ "name": "Bahaleni"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BD": {
+ "name": "Bangladeshi"
+ },
+ "BY": {
+ "name": "Belalusi"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BM": {
+ "name": "Belmuda"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BR": {
+ "name": "Blazili"
+ },
+ "BN": {
+ "name": "Blunei"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia na Hezegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BF": {
+ "name": "Bukinafaso"
+ },
+ "MG": {
+ "name": "Bukini"
+ },
+ "BG": {
+ "name": "Bulgalia"
+ },
+ "BI": {
+ "name": "Bulundi"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denmaki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekwado"
+ },
+ "ER": {
+ "name": "Elitlea"
+ },
+ "SV": {
+ "name": "Elsavado"
+ },
+ "IO": {
+ "name": "Eneo ja Uingeeza mwe Bahali Hindi"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "AE": {
+ "name": "Falme za Kialabu"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipino"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Ginebisau"
+ },
+ "GQ": {
+ "name": "Ginekweta"
+ },
+ "GD": {
+ "name": "Glenada"
+ },
+ "GL": {
+ "name": "Glinlandi"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GP": {
+ "name": "Gwadelupe"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GF": {
+ "name": "Gwiyana ya Ufalansa"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ES": {
+ "name": "Hispania"
+ },
+ "HN": {
+ "name": "Honduasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungalia"
+ },
+ "IQ": {
+ "name": "Ilaki"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IL": {
+ "name": "Islaeli"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "CF": {
+ "name": "Jamhuli ya Afrika ya Gati"
+ },
+ "CZ": {
+ "name": "Jamhuli ya Cheki"
+ },
+ "DO": {
+ "name": "Jamhuli ya Dominika"
+ },
+ "CD": {
+ "name": "Jamhuli ya Kidemoklasia ya Kongo"
+ },
+ "JP": {
+ "name": "Japani"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jiblalta"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "GE": {
+ "name": "Jojia"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kameluni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katali"
+ },
+ "KZ": {
+ "name": "Kazakistani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CV": {
+ "name": "Kepuvede"
+ },
+ "KI": {
+ "name": "Kiibati"
+ },
+ "KG": {
+ "name": "Kiigizistani"
+ },
+ "NF": {
+ "name": "Kisiwa cha Nolfok"
+ },
+ "CI": {
+ "name": "Kodivaa"
+ },
+ "HR": {
+ "name": "Kolasia"
+ },
+ "KP": {
+ "name": "Kolea Kaskazini"
+ },
+ "KR": {
+ "name": "Kolea Kusini"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komolo"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostalika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CY": {
+ "name": "Kuplosi"
+ },
+ "KW": {
+ "name": "Kuwaiti"
+ },
+ "LA": {
+ "name": "Laosi"
+ },
+ "LU": {
+ "name": "Lasembagi"
+ },
+ "LV": {
+ "name": "Lativia"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LR": {
+ "name": "Libelia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Lishenteni"
+ },
+ "LT": {
+ "name": "Litwania"
+ },
+ "RE": {
+ "name": "Liyunioni"
+ },
+ "RO": {
+ "name": "Lomania"
+ },
+ "RW": {
+ "name": "Lwanda"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "US": {
+ "name": "Malekani"
+ },
+ "MY": {
+ "name": "Malesia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MQ": {
+ "name": "Maltiniki"
+ },
+ "MK": {
+ "name": "Masedonia"
+ },
+ "MR": {
+ "name": "Maulitania"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "FM": {
+ "name": "Miklonesia"
+ },
+ "EG": {
+ "name": "Misli"
+ },
+ "MV": {
+ "name": "Modivu"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MU": {
+ "name": "Molisi"
+ },
+ "MA": {
+ "name": "Moloko"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montselati"
+ },
+ "MZ": {
+ "name": "Msumbiji"
+ },
+ "MM": {
+ "name": "Myama"
+ },
+ "NE": {
+ "name": "Naija"
+ },
+ "NG": {
+ "name": "Naijelia"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Naulu"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "NI": {
+ "name": "Nikalagwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Nolwei"
+ },
+ "NC": {
+ "name": "Nyukaledonia"
+ },
+ "NZ": {
+ "name": "Nyuzilandi"
+ },
+ "OM": {
+ "name": "Omani"
+ },
+ "PK": {
+ "name": "Pakistani"
+ },
+ "PY": {
+ "name": "Palagwai"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua"
+ },
+ "PE": {
+ "name": "Pelu"
+ },
+ "PN": {
+ "name": "Pitkailni"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PF": {
+ "name": "Polinesia ya Ufalansa"
+ },
+ "PR": {
+ "name": "Pwetoliko"
+ },
+ "SM": {
+ "name": "Samalino"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa ya Malekani"
+ },
+ "SH": {
+ "name": "Santahelena"
+ },
+ "KN": {
+ "name": "Santakitzi na Nevis"
+ },
+ "LC": {
+ "name": "Santalusia"
+ },
+ "PM": {
+ "name": "Santapieli na Mikeloni"
+ },
+ "VC": {
+ "name": "Santavisenti na Glenadini"
+ },
+ "ST": {
+ "name": "Sao Tome na Plincipe"
+ },
+ "SA": {
+ "name": "Saudi"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Shelisheli"
+ },
+ "SL": {
+ "name": "Siela Leoni"
+ },
+ "SY": {
+ "name": "Silia"
+ },
+ "LK": {
+ "name": "Sililanka"
+ },
+ "SG": {
+ "name": "Singapoo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SR": {
+ "name": "Sulinamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandi"
+ },
+ "TW": {
+ "name": "Taiwani"
+ },
+ "TJ": {
+ "name": "Tajikistani"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TL": {
+ "name": "Timoli ya Mashaliki"
+ },
+ "TT": {
+ "name": "Tlinidad na Tobago"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TM": {
+ "name": "Tulukimenistani"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "IR": {
+ "name": "Uajemi"
+ },
+ "FR": {
+ "name": "Ufalansa"
+ },
+ "FI": {
+ "name": "Ufini"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "GR": {
+ "name": "Ugiiki"
+ },
+ "ET": {
+ "name": "Uhabeshi"
+ },
+ "NL": {
+ "name": "Uholanzi"
+ },
+ "GB": {
+ "name": "Uingeeza"
+ },
+ "DE": {
+ "name": "Ujeumani"
+ },
+ "PS": {
+ "name": "Ukingo wa Maghalibi na Ukanda wa Gaza wa Palestina"
+ },
+ "UA": {
+ "name": "Uklaini"
+ },
+ "PT": {
+ "name": "Uleno"
+ },
+ "UY": {
+ "name": "Ulugwai"
+ },
+ "RU": {
+ "name": "Ulusi"
+ },
+ "SZ": {
+ "name": "Uswazi"
+ },
+ "SE": {
+ "name": "Uswidi"
+ },
+ "CH": {
+ "name": "Uswisi"
+ },
+ "TR": {
+ "name": "Utuluki"
+ },
+ "UZ": {
+ "name": "Uzibekistani"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietinamu"
+ },
+ "CK": {
+ "name": "Visiwa vya Cook"
+ },
+ "FK": {
+ "name": "Visiwa vya Falkland"
+ },
+ "KY": {
+ "name": "Visiwa vya Kayman"
+ },
+ "MP": {
+ "name": "Visiwa vya Maliana vya Kaskazini"
+ },
+ "MH": {
+ "name": "Visiwa vya Mashal"
+ },
+ "SB": {
+ "name": "Visiwa vya Solomon"
+ },
+ "TC": {
+ "name": "Visiwa vya Tulki na Kaiko"
+ },
+ "VI": {
+ "name": "Visiwa vya Vilgin vya Malekani"
+ },
+ "VG": {
+ "name": "Visiwa vya Vilgin vya Uingeeza"
+ },
+ "WF": {
+ "name": "Walis na Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "JO": {
+ "name": "Yoldani"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ksf.json b/library/intl/resources/country/ksf.json
new file mode 100644
index 000000000..172636405
--- /dev/null
+++ b/library/intl/resources/country/ksf.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "afganistáŋ"
+ },
+ "ZA": {
+ "name": "afrik anÇ a sud"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "albaní"
+ },
+ "DZ": {
+ "name": "aljɛrí"
+ },
+ "US": {
+ "name": "amɛrika"
+ },
+ "AD": {
+ "name": "andÉ”rÇ"
+ },
+ "AI": {
+ "name": "angiya"
+ },
+ "AO": {
+ "name": "angóla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "antiga ri barbúda"
+ },
+ "SA": {
+ "name": "arabí saodí"
+ },
+ "AR": {
+ "name": "arjÇntín"
+ },
+ "AM": {
+ "name": "armɛní"
+ },
+ "AW": {
+ "name": "aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "HT": {
+ "name": "ayiti"
+ },
+ "AZ": {
+ "name": "azabecán"
+ },
+ "BB": {
+ "name": "baabaadÇ"
+ },
+ "BS": {
+ "name": "baamás"
+ },
+ "BD": {
+ "name": "baÅ‹ladÉ›Ìc"
+ },
+ "BH": {
+ "name": "barÇÌn"
+ },
+ "AE": {
+ "name": "bÇlɔŋ bÇ kaksa bÉ› táatáaÅ‹zÇn"
+ },
+ "BM": {
+ "name": "bɛɛmúdÇ"
+ },
+ "BY": {
+ "name": "bɛlaris"
+ },
+ "BZ": {
+ "name": "bɛliz"
+ },
+ "BE": {
+ "name": "bɛljík"
+ },
+ "BJ": {
+ "name": "bÉ›nÇÌn"
+ },
+ "BW": {
+ "name": "botswana"
+ },
+ "BO": {
+ "name": "bɔɔlíví"
+ },
+ "BA": {
+ "name": "bÉ”snyÉ› ri hÉ›rsÇgÉ”vín"
+ },
+ "BR": {
+ "name": "brɛsíl"
+ },
+ "BN": {
+ "name": "brunÇÌ"
+ },
+ "BF": {
+ "name": "bukína fÇÌ asÉ”"
+ },
+ "BG": {
+ "name": "bulgarí"
+ },
+ "BI": {
+ "name": "burundí"
+ },
+ "BT": {
+ "name": "bután"
+ },
+ "TD": {
+ "name": "caád"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CZ": {
+ "name": "cÉ›Ìk"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CL": {
+ "name": "cíli"
+ },
+ "CN": {
+ "name": "cín"
+ },
+ "CY": {
+ "name": "cíprɛ"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "danmak"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DE": {
+ "name": "djɛrman"
+ },
+ "DM": {
+ "name": "dɔminik"
+ },
+ "DO": {
+ "name": "dɔminik rɛpublík"
+ },
+ "DJ": {
+ "name": "dyibutí"
+ },
+ "EG": {
+ "name": "ɛjípt"
+ },
+ "EC": {
+ "name": "É›kwatÉ›ÇÌ"
+ },
+ "ER": {
+ "name": "É›ritrÉ›Ì"
+ },
+ "EE": {
+ "name": "ɛstoní"
+ },
+ "ET": {
+ "name": "ɛtyɔpí"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "fíji"
+ },
+ "PH": {
+ "name": "filipÇÌn"
+ },
+ "FI": {
+ "name": "fínlan"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "gabɔŋ"
+ },
+ "GM": {
+ "name": "gambí"
+ },
+ "GH": {
+ "name": "gána"
+ },
+ "GN": {
+ "name": "ginÉ›Ì"
+ },
+ "GW": {
+ "name": "ginÉ›Ì bisÉ”Ì"
+ },
+ "GQ": {
+ "name": "ginÉ›Ì É›kwatÉ”rial"
+ },
+ "GR": {
+ "name": "grÉ›Ìk"
+ },
+ "GD": {
+ "name": "grÉ›nadÇ"
+ },
+ "GL": {
+ "name": "grínlan"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "guyán"
+ },
+ "GF": {
+ "name": "guyán i pÉ›rÉ›sÇÌ"
+ },
+ "GP": {
+ "name": "gwadɛlúp"
+ },
+ "GU": {
+ "name": "gwám"
+ },
+ "GT": {
+ "name": "gwátÇmala"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "IE": {
+ "name": "ilán"
+ },
+ "IN": {
+ "name": "indí"
+ },
+ "ID": {
+ "name": "indonɛsí"
+ },
+ "IQ": {
+ "name": "irák"
+ },
+ "IR": {
+ "name": "iráŋ"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "israÉ›Ìl"
+ },
+ "IT": {
+ "name": "italí"
+ },
+ "JM": {
+ "name": "jamaík"
+ },
+ "JP": {
+ "name": "japÉ”ÌÅ‹"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "jibraltá"
+ },
+ "JO": {
+ "name": "jɔrdán"
+ },
+ "GE": {
+ "name": "jɔrjí"
+ },
+ "NC": {
+ "name": "kalÉ›doní anyÉ”Ìn"
+ },
+ "KH": {
+ "name": "kambodj"
+ },
+ "CM": {
+ "name": "kamɛrún"
+ },
+ "CA": {
+ "name": "kanada"
+ },
+ "CV": {
+ "name": "kapvɛr"
+ },
+ "QA": {
+ "name": "katá"
+ },
+ "KZ": {
+ "name": "kazakstáŋ"
+ },
+ "NL": {
+ "name": "kÇlɔŋ kÇ Ã¡zÇ"
+ },
+ "GB": {
+ "name": "kÇlɔŋ kÇ kÇtáatáaÅ‹zÇn"
+ },
+ "KE": {
+ "name": "kɛnya"
+ },
+ "KG": {
+ "name": "kigistáŋ"
+ },
+ "KI": {
+ "name": "kiribáti"
+ },
+ "CO": {
+ "name": "kolɔmbí"
+ },
+ "KM": {
+ "name": "komɔr"
+ },
+ "KP": {
+ "name": "korÉ›anÉ”Ìr"
+ },
+ "KR": {
+ "name": "korɛasud"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CG": {
+ "name": "kɔngó"
+ },
+ "CD": {
+ "name": "kÉ”ngó anyÉ”Ìn"
+ },
+ "CR": {
+ "name": "kɔstaríka"
+ },
+ "CI": {
+ "name": "kɔtiwuár"
+ },
+ "ES": {
+ "name": "kpanyá"
+ },
+ "HR": {
+ "name": "krwasí"
+ },
+ "CU": {
+ "name": "kuba"
+ },
+ "KW": {
+ "name": "kuwɛit"
+ },
+ "LA": {
+ "name": "laɔs"
+ },
+ "LS": {
+ "name": "lÇsóto"
+ },
+ "LV": {
+ "name": "lɛtoní"
+ },
+ "LB": {
+ "name": "libáŋ"
+ },
+ "LR": {
+ "name": "libɛrya"
+ },
+ "LY": {
+ "name": "libí"
+ },
+ "LI": {
+ "name": "lictÉ›nstÉ›Ìn"
+ },
+ "LT": {
+ "name": "litwaní"
+ },
+ "LU": {
+ "name": "luksɛmbúr"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "madagaska"
+ },
+ "MW": {
+ "name": "malawi"
+ },
+ "MV": {
+ "name": "maldivÇ"
+ },
+ "MY": {
+ "name": "malɛsí"
+ },
+ "ML": {
+ "name": "mali"
+ },
+ "MT": {
+ "name": "maltÇ"
+ },
+ "MA": {
+ "name": "marɔk"
+ },
+ "MK": {
+ "name": "másÇdwán"
+ },
+ "MQ": {
+ "name": "matiník"
+ },
+ "YT": {
+ "name": "mayÉ”Ìt"
+ },
+ "MX": {
+ "name": "mɛksík"
+ },
+ "FM": {
+ "name": "mikronÉ›Ìsi"
+ },
+ "MC": {
+ "name": "monako"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MZ": {
+ "name": "mosambík"
+ },
+ "MD": {
+ "name": "mɔldaví"
+ },
+ "MS": {
+ "name": "mɔnsɛrat"
+ },
+ "MN": {
+ "name": "mɔŋolí"
+ },
+ "MU": {
+ "name": "mwarís"
+ },
+ "MR": {
+ "name": "mwaritaní"
+ },
+ "MM": {
+ "name": "myanmár"
+ },
+ "NA": {
+ "name": "namibí"
+ },
+ "NP": {
+ "name": "nɛpal"
+ },
+ "NE": {
+ "name": "nijÉ›Ìr"
+ },
+ "NG": {
+ "name": "nijÉ›Ìrya"
+ },
+ "NI": {
+ "name": "níkarágwa"
+ },
+ "NU": {
+ "name": "niwÉ›Ì"
+ },
+ "NO": {
+ "name": "nÉ”rvÉ›jÇ"
+ },
+ "NR": {
+ "name": "nwarú"
+ },
+ "OM": {
+ "name": "oman"
+ },
+ "AT": {
+ "name": "otric"
+ },
+ "HN": {
+ "name": "ɔnduras"
+ },
+ "HU": {
+ "name": "ɔngrí"
+ },
+ "AU": {
+ "name": "ɔstralí"
+ },
+ "PK": {
+ "name": "pakistáŋ"
+ },
+ "PW": {
+ "name": "palwa"
+ },
+ "PA": {
+ "name": "panama"
+ },
+ "PG": {
+ "name": "papwazí ginÉ›Ì anyÉ”Ìn"
+ },
+ "PY": {
+ "name": "paragwÉ›Ì"
+ },
+ "FR": {
+ "name": "pÉ›rÉ›sÇÌ"
+ },
+ "PE": {
+ "name": "pɛrú"
+ },
+ "PN": {
+ "name": "pitkÉ›Ìn"
+ },
+ "PL": {
+ "name": "polÉ”Ìn"
+ },
+ "PT": {
+ "name": "portugál"
+ },
+ "PF": {
+ "name": "pÉ”linÉ›sí a pÉ›rÉ›sÇÌ"
+ },
+ "PR": {
+ "name": "pɔtoríko"
+ },
+ "RE": {
+ "name": "rɛunyɔŋ"
+ },
+ "RU": {
+ "name": "risí"
+ },
+ "RO": {
+ "name": "rɔmaní"
+ },
+ "RW": {
+ "name": "rwanda"
+ },
+ "SV": {
+ "name": "salvadɔr"
+ },
+ "WS": {
+ "name": "samɔa"
+ },
+ "AS": {
+ "name": "samɔa a amɛrika"
+ },
+ "CF": {
+ "name": "santrafrík"
+ },
+ "ST": {
+ "name": "saotomÉ›Ì ri priÅ‹sib"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "sɛcɛl"
+ },
+ "SN": {
+ "name": "sɛnɛgal"
+ },
+ "KN": {
+ "name": "sÉ›nkrÇstÉ”Ìf ri nyÉ›ÌvÇ"
+ },
+ "SM": {
+ "name": "sÉ›nmarÇn"
+ },
+ "PM": {
+ "name": "sɛnpyɛr ri mikɛlɔŋ"
+ },
+ "SH": {
+ "name": "sÉ›ntÉ›Ìlen"
+ },
+ "LC": {
+ "name": "sɛntlísí"
+ },
+ "VC": {
+ "name": "sÉ›nvÇnsÇÅ‹ ri grÉ›nadín"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SG": {
+ "name": "siŋapó"
+ },
+ "SY": {
+ "name": "sirí"
+ },
+ "SK": {
+ "name": "slovakí"
+ },
+ "SI": {
+ "name": "slovɛní"
+ },
+ "SO": {
+ "name": "somalí"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "LK": {
+ "name": "srílaŋka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "sudan"
+ },
+ "SR": {
+ "name": "surinam"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "swazilan"
+ },
+ "SE": {
+ "name": "swÉ›dÇ"
+ },
+ "CH": {
+ "name": "swís"
+ },
+ "SL": {
+ "name": "syɛraleon"
+ },
+ "TJ": {
+ "name": "tadjikistaŋ"
+ },
+ "TZ": {
+ "name": "tanzaní"
+ },
+ "TH": {
+ "name": "tɛlan"
+ },
+ "TT": {
+ "name": "tɛrinitɛ ri tobago"
+ },
+ "TW": {
+ "name": "tɛwán"
+ },
+ "TL": {
+ "name": "timor anÇ Ã¡ É›st"
+ },
+ "TR": {
+ "name": "tirkí"
+ },
+ "TM": {
+ "name": "tirkmɛnistaŋ"
+ },
+ "TG": {
+ "name": "togo"
+ },
+ "TK": {
+ "name": "tokÇlao"
+ },
+ "TO": {
+ "name": "tɔŋa"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "tunɛsí"
+ },
+ "TV": {
+ "name": "tuwalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "uganda"
+ },
+ "UA": {
+ "name": "ukrain"
+ },
+ "UY": {
+ "name": "urugwÉ›Ì"
+ },
+ "UZ": {
+ "name": "usbɛkistaŋ"
+ },
+ "WF": {
+ "name": "walis ri futuna"
+ },
+ "VU": {
+ "name": "wanwatu"
+ },
+ "VA": {
+ "name": "watikáŋ"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "VE": {
+ "name": "wÉ›nÇzwÉ›la"
+ },
+ "VN": {
+ "name": "wyɛtnám"
+ },
+ "YE": {
+ "name": "yɛmɛn"
+ },
+ "ZM": {
+ "name": "zambí"
+ },
+ "VI": {
+ "name": "zÇ bÉ› gÉ”n inÉ› á amÉ›rika"
+ },
+ "VG": {
+ "name": "zÇ bÉ› gÉ”n inÉ› a ingÉ›rís"
+ },
+ "KY": {
+ "name": "zÇ i gan"
+ },
+ "IS": {
+ "name": "zÇ i glás"
+ },
+ "MH": {
+ "name": "zÇ i marcál"
+ },
+ "IO": {
+ "name": "zÇ ingÉ›rís ncÉ”Ìm wa indi"
+ },
+ "FK": {
+ "name": "zÇ maalwín"
+ },
+ "MP": {
+ "name": "zÇ maryánnÉ”Ìr"
+ },
+ "PS": {
+ "name": "zÇ palÉ›stínÇ"
+ },
+ "SB": {
+ "name": "zÇ salomÉ”Ìn"
+ },
+ "TC": {
+ "name": "zÇ tirk ri kakÉ”s"
+ },
+ "CK": {
+ "name": "zɛ i kúk"
+ },
+ "NF": {
+ "name": "zÉ› nÉ”ÌfÉ”lk"
+ },
+ "NZ": {
+ "name": "zÉ›lan anyÉ”Ìn"
+ },
+ "ZW": {
+ "name": "zimbabwÉ›Ì"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ksh.json b/library/intl/resources/country/ksh.json
new file mode 100644
index 000000000..3d9c7bbac
--- /dev/null
+++ b/library/intl/resources/country/ksh.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afjaanistahn"
+ },
+ "AR": {
+ "name": "Ajjentiinije"
+ },
+ "EG": {
+ "name": "Äjüpte"
+ },
+ "EC": {
+ "name": "Äkwador"
+ },
+ "SV": {
+ "name": "Äl Slavadoor"
+ },
+ "AL": {
+ "name": "Albaanije"
+ },
+ "CI": {
+ "name": "Älfebeijn-Köß"
+ },
+ "DZ": {
+ "name": "Alljeerije"
+ },
+ "AS": {
+ "name": "Ammerikaanesch Sammoha"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AI": {
+ "name": "Anggwilla"
+ },
+ "AO": {
+ "name": "Angjoola"
+ },
+ "AG": {
+ "name": "Antigwa un Barbuda"
+ },
+ "GQ": {
+ "name": "Äquatorial Jineeja"
+ },
+ "ER": {
+ "name": "Äritreja"
+ },
+ "AM": {
+ "name": "Arrmeenije"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Aßension"
+ },
+ "AZ": {
+ "name": "Asserbaidschahn"
+ },
+ "EE": {
+ "name": "Äßland"
+ },
+ "ET": {
+ "name": "Ättijoopije"
+ },
+ "AU": {
+ "name": "Austraalije"
+ },
+ "BH": {
+ "name": "Bachrain"
+ },
+ "BD": {
+ "name": "Bangladesch"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BE": {
+ "name": "Bellje"
+ },
+ "MM": {
+ "name": "Birma"
+ },
+ "BO": {
+ "name": "Bolliivije"
+ },
+ "BA": {
+ "name": "Boßnije un Herzegovina"
+ },
+ "BW": {
+ "name": "Bozwaana"
+ },
+ "BR": {
+ "name": "Brasilije"
+ },
+ "IO": {
+ "name": "Brettesche Besezunge em indesche Oozejahn"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BF": {
+ "name": "Bukkinna-Faase"
+ },
+ "BG": {
+ "name": "Bulljaarije"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Buttaan"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "BJ": {
+ "name": "dä Benin"
+ },
+ "CG": {
+ "name": "dä Konggo (Brassavill)"
+ },
+ "CD": {
+ "name": "dä Konggo (Kinschasa)"
+ },
+ "DK": {
+ "name": "Dänemark"
+ },
+ "VI": {
+ "name": "de ammärrikahnesche Juffer-Enselle"
+ },
+ "BS": {
+ "name": "de Bahamas"
+ },
+ "BM": {
+ "name": "de Bermudas"
+ },
+ "VG": {
+ "name": "de brettesche Juffer-Enselle"
+ },
+ "DG": {
+ "name": "de Diego-Garcia-Ensel"
+ },
+ "DO": {
+ "name": "de Dommenekaanesche Reppublik"
+ },
+ "BB": {
+ "name": "de Ensel Barbados"
+ },
+ "IM": {
+ "name": "de Ensel Män"
+ },
+ "SH": {
+ "name": "de Ensel Zint Hellena"
+ },
+ "LC": {
+ "name": "de Ensel Zint-Lutscha"
+ },
+ "SJ": {
+ "name": "de Enselle Svalbard un Jan Mayen"
+ },
+ "TC": {
+ "name": "de Enselle Turks un Kaikos"
+ },
+ "FK": {
+ "name": "de Falkland-Enselle"
+ },
+ "FO": {
+ "name": "de Färrör-Enselle"
+ },
+ "FJ": {
+ "name": "de Fidschi-Endelle"
+ },
+ "KY": {
+ "name": "de Kaiman-Enselle"
+ },
+ "IC": {
+ "name": "de Kannaresche Enselle"
+ },
+ "CV": {
+ "name": "de kapvärdesche Enselle"
+ },
+ "BQ": {
+ "name": "de karribbesche Nederläng"
+ },
+ "CC": {
+ "name": "de Kokkos-Enselle"
+ },
+ "KM": {
+ "name": "de Kommoore"
+ },
+ "CK": {
+ "name": "de Kuuk-Enselle"
+ },
+ "MH": {
+ "name": "de Machschall-Enselle"
+ },
+ "NL": {
+ "name": "de Nederläng"
+ },
+ "MP": {
+ "name": "de nöödlijje Marijanne-Enselle"
+ },
+ "NF": {
+ "name": "de Noofok-Ensel"
+ },
+ "AX": {
+ "name": "de Ohland-Enselle"
+ },
+ "PN": {
+ "name": "de Pitkärn-Ensel"
+ },
+ "ZA": {
+ "name": "de Republik Södaffrika"
+ },
+ "CH": {
+ "name": "de Schweiz"
+ },
+ "SC": {
+ "name": "de Seischälle"
+ },
+ "SB": {
+ "name": "de Solomone-Enselle"
+ },
+ "TR": {
+ "name": "de Törkei"
+ },
+ "CZ": {
+ "name": "de Tschäschei"
+ },
+ "UA": {
+ "name": "de Ukra’iine"
+ },
+ "UM": {
+ "name": "de Vereineschte Schtaate vun Amärrika ier ußerhallef jelääje Enselsche"
+ },
+ "US": {
+ "name": "de vereineschte Schtaate vun Ammärrika"
+ },
+ "CX": {
+ "name": "de Weihnaachs-Ensel"
+ },
+ "CF": {
+ "name": "de Zäntraalaffrikaanesche Republik"
+ },
+ "BL": {
+ "name": "de Zint Battälmi-Enselle"
+ },
+ "MF": {
+ "name": "de Zint-Määtes-Ensel"
+ },
+ "SN": {
+ "name": "der Sennejall"
+ },
+ "AQ": {
+ "name": "der Södpol"
+ },
+ "TD": {
+ "name": "der Tschadd"
+ },
+ "VA": {
+ "name": "der Vattikahn"
+ },
+ "DM": {
+ "name": "Dominnika"
+ },
+ "DE": {
+ "name": "Doütschland"
+ },
+ "DJ": {
+ "name": "Dschibutti"
+ },
+ "ME": {
+ "name": "et Monteneejro"
+ },
+ "PH": {
+ "name": "Fillipiine"
+ },
+ "FI": {
+ "name": "Finnland"
+ },
+ "FR": {
+ "name": "Frankrisch"
+ },
+ "GF": {
+ "name": "Franzüüsesch Jujaana"
+ },
+ "PF": {
+ "name": "Franzüüsesch Pollineesije"
+ },
+ "TF": {
+ "name": "Franzüüsesche Södsee-Enselle"
+ },
+ "HT": {
+ "name": "Ha’itti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hongkong"
+ },
+ "IN": {
+ "name": "Indije"
+ },
+ "ID": {
+ "name": "Indoneesije"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IE": {
+ "name": "Irrland"
+ },
+ "IS": {
+ "name": "Ißland"
+ },
+ "IL": {
+ "name": "Ißraäl"
+ },
+ "IT": {
+ "name": "Itaalije"
+ },
+ "GH": {
+ "name": "Jaana"
+ },
+ "GA": {
+ "name": "Jabuhn"
+ },
+ "GM": {
+ "name": "Jambija"
+ },
+ "JM": {
+ "name": "Jammaika"
+ },
+ "YE": {
+ "name": "Jämme"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "GE": {
+ "name": "Jeorrjije"
+ },
+ "GI": {
+ "name": "Jibralltaa"
+ },
+ "GN": {
+ "name": "Jinneha"
+ },
+ "GW": {
+ "name": "Jinneha_Bißau"
+ },
+ "GG": {
+ "name": "Jöönsei"
+ },
+ "JE": {
+ "name": "Jööseh"
+ },
+ "JO": {
+ "name": "Jordaanije"
+ },
+ "GD": {
+ "name": "Jrenaada"
+ },
+ "GR": {
+ "name": "Jriescheland"
+ },
+ "GL": {
+ "name": "Jröhnland"
+ },
+ "GB": {
+ "name": "Jruußbrettannije"
+ },
+ "GP": {
+ "name": "Juadelupp"
+ },
+ "GU": {
+ "name": "Juham"
+ },
+ "GY": {
+ "name": "Jujaana"
+ },
+ "GT": {
+ "name": "Juwatemaala"
+ },
+ "KH": {
+ "name": "Kambodscha"
+ },
+ "CM": {
+ "name": "Kammeruhn"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "KZ": {
+ "name": "Kassakstahn"
+ },
+ "QA": {
+ "name": "Kataa"
+ },
+ "KE": {
+ "name": "Keenija"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirrjiisije"
+ },
+ "CO": {
+ "name": "Kolumbije"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "HR": {
+ "name": "Krowazije"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuweit"
+ },
+ "LA": {
+ "name": "La’os"
+ },
+ "LV": {
+ "name": "Lätland"
+ },
+ "LB": {
+ "name": "Lebbannon"
+ },
+ "LS": {
+ "name": "Lesooto"
+ },
+ "LY": {
+ "name": "Libbije"
+ },
+ "LR": {
+ "name": "Libeerija"
+ },
+ "LI": {
+ "name": "Lischteschtein"
+ },
+ "LT": {
+ "name": "Littaue"
+ },
+ "LU": {
+ "name": "Luxembursch"
+ },
+ "ML": {
+ "name": "Maali"
+ },
+ "MQ": {
+ "name": "Machtinik"
+ },
+ "MG": {
+ "name": "Maddajaska"
+ },
+ "YT": {
+ "name": "Majott"
+ },
+ "MO": {
+ "name": "Makau"
+ },
+ "MY": {
+ "name": "Malaisije"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Mallediive"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marokko"
+ },
+ "MU": {
+ "name": "Maurizijus"
+ },
+ "MR": {
+ "name": "Mautitaanije"
+ },
+ "MX": {
+ "name": "Mäxiko"
+ },
+ "MK": {
+ "name": "Mazedoonije"
+ },
+ "FM": {
+ "name": "Mikroneesije"
+ },
+ "MD": {
+ "name": "Moldaavije"
+ },
+ "MC": {
+ "name": "Monakko"
+ },
+ "MN": {
+ "name": "Mongjolei"
+ },
+ "MS": {
+ "name": "Mongßerrat"
+ },
+ "MZ": {
+ "name": "Mosambik"
+ },
+ "NA": {
+ "name": "Namiibije"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepall"
+ },
+ "NC": {
+ "name": "Neuschottland"
+ },
+ "NZ": {
+ "name": "Neuseeland"
+ },
+ "NE": {
+ "name": "Nijer"
+ },
+ "NG": {
+ "name": "Nikaraagua"
+ },
+ "NI": {
+ "name": "Nikaraaguwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "KP": {
+ "name": "Nood-Koreja"
+ },
+ "SD": {
+ "name": "Noodsudahn"
+ },
+ "NO": {
+ "name": "Norrweeje"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "AT": {
+ "name": "Öösterisch"
+ },
+ "TL": {
+ "name": "Oß-Timor"
+ },
+ "PK": {
+ "name": "Pakistahn"
+ },
+ "PS": {
+ "name": "Palästina"
+ },
+ "PW": {
+ "name": "Pallau"
+ },
+ "PA": {
+ "name": "Pannama"
+ },
+ "PG": {
+ "name": "Papuwa Neujineeja"
+ },
+ "PY": {
+ "name": "Parraguwai"
+ },
+ "PE": {
+ "name": "Perruh"
+ },
+ "IR": {
+ "name": "Persije"
+ },
+ "PT": {
+ "name": "Pochtojall"
+ },
+ "PR": {
+ "name": "Pochtoriko"
+ },
+ "PL": {
+ "name": "Pole"
+ },
+ "RE": {
+ "name": "Rehunjohn"
+ },
+ "RO": {
+ "name": "Romäänije"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RU": {
+ "name": "Rußland"
+ },
+ "ZM": {
+ "name": "Sambija"
+ },
+ "WS": {
+ "name": "Sammoha"
+ },
+ "SM": {
+ "name": "San-Marino"
+ },
+ "RS": {
+ "name": "Särbije"
+ },
+ "SA": {
+ "name": "Saudi Arraabije"
+ },
+ "CL": {
+ "name": "Schiile"
+ },
+ "CN": {
+ "name": "Schiina"
+ },
+ "ES": {
+ "name": "Schpaanije"
+ },
+ "SE": {
+ "name": "Schweede"
+ },
+ "ZW": {
+ "name": "Simbabwe"
+ },
+ "SG": {
+ "name": "Singjapuur"
+ },
+ "SL": {
+ "name": "Sjärra Lejone"
+ },
+ "GS": {
+ "name": "Söd-Jeorjie un de södlijje Botteramms-Enselle"
+ },
+ "KR": {
+ "name": "Söd-Koreja"
+ },
+ "SS": {
+ "name": "Södsudahn"
+ },
+ "SO": {
+ "name": "Somaalije"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SK": {
+ "name": "ẞlovakei"
+ },
+ "SI": {
+ "name": "ẞloveenije"
+ },
+ "SZ": {
+ "name": "ẞwaasiland"
+ },
+ "SY": {
+ "name": "Sürije"
+ },
+ "SR": {
+ "name": "Sürinamm"
+ },
+ "TJ": {
+ "name": "Tadschikistahn"
+ },
+ "TH": {
+ "name": "Tailand"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tansanija"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tongga"
+ },
+ "TG": {
+ "name": "Toojo"
+ },
+ "TT": {
+ "name": "Trinidad un Tobääjo"
+ },
+ "TA": {
+ "name": "Tristan da Cunja"
+ },
+ "TN": {
+ "name": "Tuneesije"
+ },
+ "TM": {
+ "name": "Turkmenistahn"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UG": {
+ "name": "Ujanda"
+ },
+ "HU": {
+ "name": "Unjann"
+ },
+ "UY": {
+ "name": "Urrujwai"
+ },
+ "UZ": {
+ "name": "Ußbeekistahn"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "AE": {
+ "name": "Vereinschte Arrabesche Emmirate"
+ },
+ "VN": {
+ "name": "Vijätnamm"
+ },
+ "WF": {
+ "name": "Wallis un Futuna"
+ },
+ "EH": {
+ "name": "Wäß-Sahara"
+ },
+ "BY": {
+ "name": "Wießrußland"
+ },
+ "EA": {
+ "name": "Ze’uta un Meliija"
+ },
+ "KN": {
+ "name": "Zint Kitts un Nevis"
+ },
+ "SX": {
+ "name": "Zint Maarten"
+ },
+ "PM": {
+ "name": "Zint Pjäär un Mikelong"
+ },
+ "ST": {
+ "name": "Zint Tommeh un Printschipe"
+ },
+ "VC": {
+ "name": "Zint Vinzänz un de Jrenadines-Enselle"
+ },
+ "CY": {
+ "name": "Züppere"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ky.json b/library/intl/resources/country/ky.json
new file mode 100644
index 000000000..4944f4888
--- /dev/null
+++ b/library/intl/resources/country/ky.json
@@ -0,0 +1,761 @@
+{
+ "AU": {
+ "name": "ÐвÑтралиÑ"
+ },
+ "AT": {
+ "name": "ÐвÑтриÑ"
+ },
+ "AZ": {
+ "name": "Ðзербайжан"
+ },
+ "UM": {
+ "name": "ÐКШнын Ñырткы аралдары"
+ },
+ "AX": {
+ "name": "Ðланд аралдары"
+ },
+ "AL": {
+ "name": "ÐлбаниÑ"
+ },
+ "DZ": {
+ "name": "Ðлжир"
+ },
+ "US": {
+ "name": "Ðмерика Кошмо Штаттары"
+ },
+ "AS": {
+ "name": "Ðмерика СамоаÑÑ‹"
+ },
+ "AO": {
+ "name": "Ðнгола"
+ },
+ "AI": {
+ "name": "Ðнгуила"
+ },
+ "AD": {
+ "name": "Ðндорра"
+ },
+ "AQ": {
+ "name": "Ðнтарктика"
+ },
+ "AG": {
+ "name": "Ðнтигуа жана Барбуда"
+ },
+ "AR": {
+ "name": "Ðргентина"
+ },
+ "AM": {
+ "name": "ÐрмениÑ"
+ },
+ "AW": {
+ "name": "Ðруба"
+ },
+ "AC": {
+ "name": "ÐÑÑеншин аралы"
+ },
+ "AF": {
+ "name": "ÐфганиÑтан"
+ },
+ "BS": {
+ "name": "Багам аралдары"
+ },
+ "BD": {
+ "name": "Бангладеш"
+ },
+ "BB": {
+ "name": "БарбадоÑ"
+ },
+ "EH": {
+ "name": "Батыш Сахара"
+ },
+ "BH": {
+ "name": "Бахрейн"
+ },
+ "BY": {
+ "name": "БеларуÑÑŒ"
+ },
+ "BZ": {
+ "name": "Белиз"
+ },
+ "BE": {
+ "name": "БельгиÑ"
+ },
+ "BJ": {
+ "name": "Бенин"
+ },
+ "BM": {
+ "name": "Бермуд аралдары"
+ },
+ "AE": {
+ "name": "Бириккен Ðраб Эмираттары"
+ },
+ "BG": {
+ "name": "БолгариÑ"
+ },
+ "BO": {
+ "name": "БоливиÑ"
+ },
+ "CF": {
+ "name": "Борбордук Ðфрика РеÑпубликаÑÑ‹"
+ },
+ "BA": {
+ "name": "БоÑÐ½Ð¸Ñ Ð¶Ð°Ð½Ð° Герцеговина"
+ },
+ "BW": {
+ "name": "БотÑвана"
+ },
+ "BR": {
+ "name": "БразилиÑ"
+ },
+ "IO": {
+ "name": "БританиÑнын Ð˜Ð½Ð´Ð¸Ñ Ð¾ÐºÐµÐ°Ð½Ñ‹Ð½Ð´Ð°Ð³Ñ‹ аймагы"
+ },
+ "BN": {
+ "name": "Бруней"
+ },
+ "BF": {
+ "name": "Буркина-ФаÑо"
+ },
+ "BI": {
+ "name": "Бурунди"
+ },
+ "BT": {
+ "name": "Бутан"
+ },
+ "VU": {
+ "name": "Вануату"
+ },
+ "VA": {
+ "name": "Ватикан"
+ },
+ "HU": {
+ "name": "ВенгриÑ"
+ },
+ "VE": {
+ "name": "ВенеÑуÑла"
+ },
+ "VI": {
+ "name": "Виргин аралдары (ÐКШ)"
+ },
+ "VG": {
+ "name": "Виргин аралдары (БританиÑ)"
+ },
+ "VN": {
+ "name": "Вьетнам"
+ },
+ "GA": {
+ "name": "Габон"
+ },
+ "HT": {
+ "name": "Гаити"
+ },
+ "GY": {
+ "name": "Гайана"
+ },
+ "GM": {
+ "name": "ГамбиÑ"
+ },
+ "GH": {
+ "name": "Гана"
+ },
+ "GP": {
+ "name": "Гваделупа"
+ },
+ "GT": {
+ "name": "Гватемала"
+ },
+ "GF": {
+ "name": "Гвиана (ФранциÑ)"
+ },
+ "GN": {
+ "name": "ГвинеÑ"
+ },
+ "GW": {
+ "name": "ГвинеÑ-БиÑау"
+ },
+ "DE": {
+ "name": "ГерманиÑ"
+ },
+ "GG": {
+ "name": "ГернÑи"
+ },
+ "GI": {
+ "name": "Гибралтар"
+ },
+ "HN": {
+ "name": "ГондураÑ"
+ },
+ "HK": {
+ "name": "Гонконг Кытай ÐÐÐ"
+ },
+ "GD": {
+ "name": "Гренада"
+ },
+ "GL": {
+ "name": "ГренландиÑ"
+ },
+ "GR": {
+ "name": "ГрециÑ"
+ },
+ "GE": {
+ "name": "ГрузиÑ"
+ },
+ "GU": {
+ "name": "Гуам"
+ },
+ "DK": {
+ "name": "ДаниÑ"
+ },
+ "DJ": {
+ "name": "Джибути"
+ },
+ "DG": {
+ "name": "Диего ГарÑиÑ"
+ },
+ "DM": {
+ "name": "Доминика"
+ },
+ "DO": {
+ "name": "Доминика РеÑпубликаÑÑ‹"
+ },
+ "EG": {
+ "name": "Египет"
+ },
+ "NZ": {
+ "name": "Жаӊы ЗеландиÑ"
+ },
+ "NC": {
+ "name": "Жаӊы КаледониÑ"
+ },
+ "JE": {
+ "name": "ЖерÑи"
+ },
+ "ZM": {
+ "name": "ЗамбиÑ"
+ },
+ "ZW": {
+ "name": "Зимбабве"
+ },
+ "IL": {
+ "name": "Израиль"
+ },
+ "IN": {
+ "name": "ИндиÑ"
+ },
+ "ID": {
+ "name": "ИндонезиÑ"
+ },
+ "JO": {
+ "name": "ИорданиÑ"
+ },
+ "IQ": {
+ "name": "Ирак"
+ },
+ "IR": {
+ "name": "Иран"
+ },
+ "IE": {
+ "name": "ИрландиÑ"
+ },
+ "IS": {
+ "name": "ИÑландиÑ"
+ },
+ "ES": {
+ "name": "ИÑпаниÑ"
+ },
+ "IT": {
+ "name": "ИталиÑ"
+ },
+ "YE": {
+ "name": "Йемен"
+ },
+ "KZ": {
+ "name": "КазакÑтан"
+ },
+ "KY": {
+ "name": "Кайман Ðралдары"
+ },
+ "KH": {
+ "name": "Камбоджа"
+ },
+ "CM": {
+ "name": "Камерун"
+ },
+ "CA": {
+ "name": "Канада"
+ },
+ "IC": {
+ "name": "Канар аралдары"
+ },
+ "CV": {
+ "name": "Капе Верде"
+ },
+ "BQ": {
+ "name": "Кариб Ðидерланддары"
+ },
+ "QA": {
+ "name": "Катар"
+ },
+ "KE": {
+ "name": "КениÑ"
+ },
+ "CY": {
+ "name": "Кипр"
+ },
+ "KI": {
+ "name": "Кирибати"
+ },
+ "CC": {
+ "name": "ÐšÐ¾ÐºÐ¾Ñ (Килиӊ) аралдары"
+ },
+ "CO": {
+ "name": "КолумбиÑ"
+ },
+ "KM": {
+ "name": "КомороÑ"
+ },
+ "CG": {
+ "name": "Конго-Браззавил"
+ },
+ "CD": {
+ "name": "Конго-КиншаÑа"
+ },
+ "XK": {
+ "name": "КоÑово"
+ },
+ "CR": {
+ "name": "КоÑта-Рика"
+ },
+ "CI": {
+ "name": "Кот-д’Ивуар"
+ },
+ "CX": {
+ "name": "КриÑÐ¼Ð°Ñ Ð°Ñ€Ð°Ð»Ñ‹"
+ },
+ "CU": {
+ "name": "Куба"
+ },
+ "KW": {
+ "name": "Кувейт"
+ },
+ "CK": {
+ "name": "Кук аралдары"
+ },
+ "KG": {
+ "name": "КыргызÑтан"
+ },
+ "CN": {
+ "name": "Кытай"
+ },
+ "CW": {
+ "name": "КюраÑао"
+ },
+ "LA": {
+ "name": "ЛаоÑ"
+ },
+ "LV": {
+ "name": "ЛатвиÑ"
+ },
+ "LS": {
+ "name": "ЛеÑото"
+ },
+ "LR": {
+ "name": "ЛибериÑ"
+ },
+ "LB": {
+ "name": "Ливан"
+ },
+ "LY": {
+ "name": "ЛивиÑ"
+ },
+ "LT": {
+ "name": "Литва"
+ },
+ "LI": {
+ "name": "Лихтенштейн"
+ },
+ "LU": {
+ "name": "ЛюкÑембург"
+ },
+ "MU": {
+ "name": "Маврикий"
+ },
+ "MR": {
+ "name": "МавританиÑ"
+ },
+ "MG": {
+ "name": "МадагаÑкар"
+ },
+ "YT": {
+ "name": "Майотта"
+ },
+ "MO": {
+ "name": "Макау Кытай ÐÐÐ"
+ },
+ "MK": {
+ "name": "МакедониÑ"
+ },
+ "MW": {
+ "name": "Малави"
+ },
+ "MY": {
+ "name": "МалайзиÑ"
+ },
+ "MV": {
+ "name": "Малдив аралдары"
+ },
+ "ML": {
+ "name": "Мали"
+ },
+ "MT": {
+ "name": "Мальта"
+ },
+ "MA": {
+ "name": "Марокко"
+ },
+ "MQ": {
+ "name": "Мартиника"
+ },
+ "MH": {
+ "name": "Маршалл аралдары"
+ },
+ "MX": {
+ "name": "МекÑика"
+ },
+ "FM": {
+ "name": "МикронезиÑ"
+ },
+ "MZ": {
+ "name": "Мозамбик"
+ },
+ "MD": {
+ "name": "Молдова"
+ },
+ "MC": {
+ "name": "Монако"
+ },
+ "MN": {
+ "name": "МонголиÑ"
+ },
+ "MS": {
+ "name": "МонÑеррат"
+ },
+ "MM": {
+ "name": "МьÑнма (Бирма)"
+ },
+ "IM": {
+ "name": "ÐœÑн аралы"
+ },
+ "NA": {
+ "name": "ÐамибиÑ"
+ },
+ "NR": {
+ "name": "Ðауру"
+ },
+ "NP": {
+ "name": "Ðепал"
+ },
+ "NE": {
+ "name": "Ðигер"
+ },
+ "NG": {
+ "name": "ÐигериÑ"
+ },
+ "NL": {
+ "name": "Ðидерланддар"
+ },
+ "NI": {
+ "name": "Ðикарагуа"
+ },
+ "NU": {
+ "name": "ÐиуÑ"
+ },
+ "NO": {
+ "name": "ÐорвегиÑ"
+ },
+ "NF": {
+ "name": "Ðорфолк аралы"
+ },
+ "OM": {
+ "name": "Оман"
+ },
+ "UZ": {
+ "name": "ӨзбекÑтан"
+ },
+ "PK": {
+ "name": "ПакиÑтан"
+ },
+ "PW": {
+ "name": "Палау"
+ },
+ "PS": {
+ "name": "ПалеÑтина аймактары"
+ },
+ "PA": {
+ "name": "Панама"
+ },
+ "PG": {
+ "name": "Папуа Жаңы-ГвинеÑ"
+ },
+ "PY": {
+ "name": "Парагвай"
+ },
+ "PE": {
+ "name": "Перу"
+ },
+ "PN": {
+ "name": "ПиткÑрн аралдары"
+ },
+ "PL": {
+ "name": "Польша"
+ },
+ "PT": {
+ "name": "ПортугалиÑ"
+ },
+ "PR": {
+ "name": "ПуÑрто-Рико"
+ },
+ "RE": {
+ "name": "Реюнион"
+ },
+ "RU": {
+ "name": "РоÑÑиÑ"
+ },
+ "RW": {
+ "name": "Руанда"
+ },
+ "RO": {
+ "name": "РумыниÑ"
+ },
+ "WS": {
+ "name": "Самоа"
+ },
+ "SM": {
+ "name": "Сан Марино"
+ },
+ "ST": {
+ "name": "Сан-Томе жана ПринÑипи"
+ },
+ "SA": {
+ "name": "Сауд ÐрабиÑÑÑ‹"
+ },
+ "SZ": {
+ "name": "Свазиленд"
+ },
+ "SJ": {
+ "name": "Свалбард жана Жан Майен"
+ },
+ "SC": {
+ "name": "Сейшелдер"
+ },
+ "PM": {
+ "name": "Сен-Пьер жана Микелон"
+ },
+ "SN": {
+ "name": "Сенегал"
+ },
+ "BL": {
+ "name": "Сент Бартелеми"
+ },
+ "VC": {
+ "name": "Сент-ВинÑент жана Гренадиналар"
+ },
+ "KN": {
+ "name": "Сент-ÐšÐ¸Ñ‚Ñ Ð¶Ð°Ð½Ð° ÐевиÑ"
+ },
+ "LC": {
+ "name": "Сент-ЛюÑиÑ"
+ },
+ "MF": {
+ "name": "Сент-Мартин"
+ },
+ "RS": {
+ "name": "СербиÑ"
+ },
+ "EA": {
+ "name": "Сеута жана Мелилла"
+ },
+ "SG": {
+ "name": "Сингапур"
+ },
+ "SX": {
+ "name": "Синт Маартен"
+ },
+ "SY": {
+ "name": "СириÑ"
+ },
+ "SK": {
+ "name": "СловакиÑ"
+ },
+ "SI": {
+ "name": "СловениÑ"
+ },
+ "SB": {
+ "name": "Соломон аралдары"
+ },
+ "SO": {
+ "name": "Сомали"
+ },
+ "SD": {
+ "name": "Судан"
+ },
+ "SR": {
+ "name": "Суринаме"
+ },
+ "SL": {
+ "name": "Сьерра-Леоне"
+ },
+ "TJ": {
+ "name": "ТажикÑтан"
+ },
+ "TH": {
+ "name": "Таиланд"
+ },
+ "TW": {
+ "name": "Тайвань"
+ },
+ "TZ": {
+ "name": "ТанзаниÑ"
+ },
+ "TL": {
+ "name": "Тимор-ЛеÑте"
+ },
+ "TG": {
+ "name": "Того"
+ },
+ "TK": {
+ "name": "Токелау"
+ },
+ "TO": {
+ "name": "Тонга"
+ },
+ "TT": {
+ "name": "Тринидад жана Тобаго"
+ },
+ "TA": {
+ "name": "ТриÑтан да КуньÑ"
+ },
+ "TV": {
+ "name": "Тувалу"
+ },
+ "TN": {
+ "name": "ТуниÑ"
+ },
+ "KP": {
+ "name": "Түндүк КореÑ"
+ },
+ "MP": {
+ "name": "Түндүк Мариана аралдары"
+ },
+ "TR": {
+ "name": "ТүркиÑ"
+ },
+ "TM": {
+ "name": "ТүркмөнÑтан"
+ },
+ "TC": {
+ "name": "Ð¢Ò¯Ñ€ÐºÑ Ð¶Ð°Ð½Ð° ÐšÐ°Ð¹ÐºÐ¾Ñ Ð°Ñ€Ð°Ð»Ð´Ð°Ñ€Ñ‹"
+ },
+ "ZA": {
+ "name": "Түштүк Ðфрика РеÑпубликаÑÑ‹"
+ },
+ "GS": {
+ "name": "Түштүк Ð–Ð¾Ñ€Ð¶Ð¸Ñ Ð¶Ð°Ð½Ð° Түштүк СÑндвич аралдары"
+ },
+ "KR": {
+ "name": "Түштүк КореÑ"
+ },
+ "SS": {
+ "name": "Түштүк Судан"
+ },
+ "UG": {
+ "name": "Уганда"
+ },
+ "UA": {
+ "name": "Украина"
+ },
+ "GB": {
+ "name": "Улуу БританиÑ"
+ },
+ "WF": {
+ "name": "Ð£Ð¾Ð»Ð»Ð¸Ñ Ð¶Ð°Ð½Ð° Футуна"
+ },
+ "UY": {
+ "name": "Уругвай"
+ },
+ "FO": {
+ "name": "Фарер аралдары"
+ },
+ "FJ": {
+ "name": "Фиджи"
+ },
+ "PH": {
+ "name": "Филлипин"
+ },
+ "FI": {
+ "name": "ФинлÑндиÑ"
+ },
+ "FK": {
+ "name": "ФолклÑнд аралдары"
+ },
+ "FR": {
+ "name": "ФранциÑ"
+ },
+ "TF": {
+ "name": "ФранциÑнын Түштүктөгү аймактары"
+ },
+ "PF": {
+ "name": "Француз ПолинезиÑÑÑ‹"
+ },
+ "HR": {
+ "name": "ХорватиÑ"
+ },
+ "TD": {
+ "name": "Чад"
+ },
+ "ME": {
+ "name": "ЧерногориÑ"
+ },
+ "CZ": {
+ "name": "ЧехиÑ"
+ },
+ "CL": {
+ "name": "Чили"
+ },
+ "CH": {
+ "name": "ШвейцариÑ"
+ },
+ "SE": {
+ "name": "ШвециÑ"
+ },
+ "LK": {
+ "name": "Шри-Ланка"
+ },
+ "SH": {
+ "name": "Ыйык Елена"
+ },
+ "EC": {
+ "name": "Эквадор"
+ },
+ "GQ": {
+ "name": "Экваториалдык ГвинеÑ"
+ },
+ "SV": {
+ "name": "Эл Салвадор"
+ },
+ "ER": {
+ "name": "ЭритреÑ"
+ },
+ "EE": {
+ "name": "ЭÑтониÑ"
+ },
+ "ET": {
+ "name": "ЭфиопиÑ"
+ },
+ "JM": {
+ "name": "Ямайка"
+ },
+ "JP": {
+ "name": "ЯпониÑ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/lag.json b/library/intl/resources/country/lag.json
new file mode 100644
index 000000000..ad82eee91
--- /dev/null
+++ b/library/intl/resources/country/lag.json
@@ -0,0 +1,761 @@
+{
+ "ZA": {
+ "name": "Afɨrɨka ya Saame"
+ },
+ "AF": {
+ "name": "Afuganisitáani"
+ },
+ "IS": {
+ "name": "Aisiláandi"
+ },
+ "AR": {
+ "name": "Ajentíina"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "DZ": {
+ "name": "Alijéria"
+ },
+ "AL": {
+ "name": "Alubánia"
+ },
+ "US": {
+ "name": "Amerɨka"
+ },
+ "AD": {
+ "name": "Andóra"
+ },
+ "AO": {
+ "name": "Angóola"
+ },
+ "AI": {
+ "name": "Anguíila"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigúua na Baribúuda"
+ },
+ "AM": {
+ "name": "Ariménia"
+ },
+ "AW": {
+ "name": "Arúuba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Ausiteréelia"
+ },
+ "AT": {
+ "name": "Ãusitiria"
+ },
+ "IE": {
+ "name": "Ayaláandi"
+ },
+ "AZ": {
+ "name": "Azabajáani"
+ },
+ "BB": {
+ "name": "Babadóosi"
+ },
+ "BS": {
+ "name": "Baháama"
+ },
+ "BH": {
+ "name": "Baharéeni"
+ },
+ "BD": {
+ "name": "Bangaladéeshi"
+ },
+ "BY": {
+ "name": "Belarúusi"
+ },
+ "BZ": {
+ "name": "Belíise"
+ },
+ "BJ": {
+ "name": "Beníini"
+ },
+ "BM": {
+ "name": "Berimúuda"
+ },
+ "BO": {
+ "name": "Bolívia"
+ },
+ "BA": {
+ "name": "Bósinia"
+ },
+ "BW": {
+ "name": "Botiswáana"
+ },
+ "BR": {
+ "name": "Brasíili"
+ },
+ "MG": {
+ "name": "Bukíini"
+ },
+ "BF": {
+ "name": "Bukinafáaso"
+ },
+ "BG": {
+ "name": "Buligaría"
+ },
+ "BN": {
+ "name": "Burunéei"
+ },
+ "BI": {
+ "name": "Burúundi"
+ },
+ "BT": {
+ "name": "Butáani"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Cháadi"
+ },
+ "CL": {
+ "name": "Chíile"
+ },
+ "CN": {
+ "name": "Chíina"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denimaki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Domínɨka"
+ },
+ "SV": {
+ "name": "Elisalivado"
+ },
+ "ER": {
+ "name": "Eriterea"
+ },
+ "EE": {
+ "name": "Estonía"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fíiji"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GH": {
+ "name": "Gáana"
+ },
+ "GA": {
+ "name": "Gabóoni"
+ },
+ "GM": {
+ "name": "Gámbia"
+ },
+ "GN": {
+ "name": "Gíine"
+ },
+ "GW": {
+ "name": "Gíine Bisáau"
+ },
+ "GQ": {
+ "name": "Gíine Ikwéeta"
+ },
+ "GD": {
+ "name": "Girenáada"
+ },
+ "GL": {
+ "name": "Giriniláandi"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyáana"
+ },
+ "GP": {
+ "name": "Gwadelúupe"
+ },
+ "GU": {
+ "name": "Gwani"
+ },
+ "GT": {
+ "name": "Gwatemáala"
+ },
+ "GF": {
+ "name": "Gwiyáana yʉ Ʉfaráansa"
+ },
+ "HT": {
+ "name": "Haíiti"
+ },
+ "ES": {
+ "name": "Hisipánia"
+ },
+ "HN": {
+ "name": "Honduráasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungária"
+ },
+ "EC": {
+ "name": "Ãkwado"
+ },
+ "IN": {
+ "name": "Ãndia"
+ },
+ "ID": {
+ "name": "Indonésia"
+ },
+ "IQ": {
+ "name": "Iráaki"
+ },
+ "IL": {
+ "name": "Isiraéeli"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IT": {
+ "name": "Itália"
+ },
+ "CI": {
+ "name": "Ivori Kositi"
+ },
+ "IO": {
+ "name": "Ɨsɨ yʉ Ʉɨngeréesa irivii ra Híindi"
+ },
+ "JM": {
+ "name": "Jamáika"
+ },
+ "CZ": {
+ "name": "Jamuhúuri ya Chéeki"
+ },
+ "DO": {
+ "name": "Jamuhúuri ya Dominɨka"
+ },
+ "CD": {
+ "name": "Jamuhúuri ya Kɨdemokurasía ya Kóongo"
+ },
+ "JP": {
+ "name": "Japáani"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jiburálita"
+ },
+ "DJ": {
+ "name": "Jibúuti"
+ },
+ "JO": {
+ "name": "Jódani"
+ },
+ "GE": {
+ "name": "Jójia"
+ },
+ "CF": {
+ "name": "Juhúuri ya Afɨrɨka ya katɨ katɨ"
+ },
+ "NC": {
+ "name": "Kaledónia Ifya"
+ },
+ "KH": {
+ "name": "Kambódia"
+ },
+ "CM": {
+ "name": "Kamerúuni"
+ },
+ "CA": {
+ "name": "Kánada"
+ },
+ "QA": {
+ "name": "Katáari"
+ },
+ "KZ": {
+ "name": "Kazakasitáani"
+ },
+ "KE": {
+ "name": "Kéenya"
+ },
+ "CV": {
+ "name": "Kepuvéede"
+ },
+ "KI": {
+ "name": "Kiribáati"
+ },
+ "KG": {
+ "name": "Kirigisitáani"
+ },
+ "NF": {
+ "name": "Kisíiwa cha Nofifóoki"
+ },
+ "CO": {
+ "name": "Kolómbia"
+ },
+ "KM": {
+ "name": "Komóoro"
+ },
+ "CG": {
+ "name": "Kóongo"
+ },
+ "KR": {
+ "name": "Koréa ya Saame"
+ },
+ "KP": {
+ "name": "Koréa yʉ ʉtʉrʉko"
+ },
+ "HR": {
+ "name": "Koréshia"
+ },
+ "CR": {
+ "name": "Kósita RɨÌɨka"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CY": {
+ "name": "Kupuróosi"
+ },
+ "KW": {
+ "name": "Kʉwáiti"
+ },
+ "CU": {
+ "name": "Kyúuba"
+ },
+ "LA": {
+ "name": "Laóosi"
+ },
+ "LU": {
+ "name": "Lasembáagi"
+ },
+ "LV": {
+ "name": "Lativia"
+ },
+ "LB": {
+ "name": "Lebanóoni"
+ },
+ "LS": {
+ "name": "Lesóoto"
+ },
+ "LY": {
+ "name": "Líbia"
+ },
+ "LR": {
+ "name": "Liibéria"
+ },
+ "LI": {
+ "name": "Lishentéeni"
+ },
+ "LT": {
+ "name": "Lisuánia"
+ },
+ "ML": {
+ "name": "Máali"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MW": {
+ "name": "Maláawi"
+ },
+ "MY": {
+ "name": "Maleísia"
+ },
+ "MT": {
+ "name": "Málita"
+ },
+ "MQ": {
+ "name": "Maritiníiki"
+ },
+ "MK": {
+ "name": "Masedónia"
+ },
+ "YT": {
+ "name": "Mayóote"
+ },
+ "MX": {
+ "name": "Mekisiko"
+ },
+ "MM": {
+ "name": "Miáama"
+ },
+ "FM": {
+ "name": "Mikironésia"
+ },
+ "EG": {
+ "name": "Mísiri"
+ },
+ "MV": {
+ "name": "Modíivu"
+ },
+ "MD": {
+ "name": "Molidóova"
+ },
+ "MC": {
+ "name": "Monáako"
+ },
+ "MN": {
+ "name": "Mongólia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Monteráati"
+ },
+ "MU": {
+ "name": "Moríisi"
+ },
+ "MR": {
+ "name": "Moritánia"
+ },
+ "MA": {
+ "name": "Moróoko"
+ },
+ "MZ": {
+ "name": "Musumbíiji"
+ },
+ "SH": {
+ "name": "Mʉtakatíifu Heléena"
+ },
+ "KN": {
+ "name": "Mʉtakatíifu kitisi na Nevíisi"
+ },
+ "LC": {
+ "name": "Mʉtakatíifu Lusíia"
+ },
+ "PM": {
+ "name": "Mʉtakatíifu Peéteri na Mɨkaéeli"
+ },
+ "VC": {
+ "name": "Mʉtakatíifu Viséenti na Gernadíini"
+ },
+ "PS": {
+ "name": "Mweemberera wa kʉmweeri wa Gáaza"
+ },
+ "NA": {
+ "name": "Namíbia"
+ },
+ "NR": {
+ "name": "Naúuru"
+ },
+ "NP": {
+ "name": "Nepáali"
+ },
+ "NE": {
+ "name": "Níija"
+ },
+ "NG": {
+ "name": "Niijéria"
+ },
+ "NI": {
+ "name": "Nikarágʉa"
+ },
+ "NU": {
+ "name": "Niúue"
+ },
+ "NO": {
+ "name": "Norwe"
+ },
+ "NZ": {
+ "name": "Nyuzílandi"
+ },
+ "OM": {
+ "name": "Ómani"
+ },
+ "PK": {
+ "name": "Pakisitáani"
+ },
+ "PW": {
+ "name": "Paláau"
+ },
+ "PA": {
+ "name": "Panáama"
+ },
+ "PG": {
+ "name": "Papúua"
+ },
+ "PY": {
+ "name": "Paraguáai"
+ },
+ "PN": {
+ "name": "Patikaírini"
+ },
+ "PE": {
+ "name": "Péeru"
+ },
+ "PL": {
+ "name": "Pólandi"
+ },
+ "PF": {
+ "name": "Polinésia yʉ Ʉfaráansa"
+ },
+ "PR": {
+ "name": "PwetorɨÌɨko"
+ },
+ "RE": {
+ "name": "Reyunióoni"
+ },
+ "RO": {
+ "name": "Romaníia"
+ },
+ "RW": {
+ "name": "Rwáanda"
+ },
+ "SM": {
+ "name": "Samaríino"
+ },
+ "ZM": {
+ "name": "Sámbia"
+ },
+ "WS": {
+ "name": "Samóoa"
+ },
+ "AS": {
+ "name": "Samóoa ya AmerɨÌka"
+ },
+ "ST": {
+ "name": "Sao Tóome na Pirinsipe"
+ },
+ "SA": {
+ "name": "Saudíia Arabíia"
+ },
+ "SN": {
+ "name": "Senegáali"
+ },
+ "SL": {
+ "name": "Seraleóoni"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Shelishéeli"
+ },
+ "ZW": {
+ "name": "Simbáabwe"
+ },
+ "SG": {
+ "name": "Singapoo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Síria"
+ },
+ "LK": {
+ "name": "Siriláanka"
+ },
+ "SO": {
+ "name": "Somália"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudáani"
+ },
+ "SK": {
+ "name": "Sulováakia"
+ },
+ "SI": {
+ "name": "Sulovénia"
+ },
+ "SR": {
+ "name": "Surináamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TZ": {
+ "name": "Taansanía"
+ },
+ "TH": {
+ "name": "Táilandi"
+ },
+ "TW": {
+ "name": "Taiwáani"
+ },
+ "TJ": {
+ "name": "Tajikisitáani"
+ },
+ "TL": {
+ "name": "Timóori yi Itʉʉmba"
+ },
+ "TT": {
+ "name": "Tiriníida ya Tobáago"
+ },
+ "TK": {
+ "name": "Tokeláau"
+ },
+ "TG": {
+ "name": "Tóogo"
+ },
+ "TO": {
+ "name": "Tóonga"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunísia"
+ },
+ "TV": {
+ "name": "Tuváalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "FI": {
+ "name": "Ufíini"
+ },
+ "PH": {
+ "name": "Ufilipíino"
+ },
+ "GR": {
+ "name": "Ugiríki"
+ },
+ "UY": {
+ "name": "Uruguáai"
+ },
+ "RU": {
+ "name": "Urúusi"
+ },
+ "UZ": {
+ "name": "Usibekisitáani"
+ },
+ "SE": {
+ "name": "Uswíidi"
+ },
+ "CH": {
+ "name": "Uswíisi"
+ },
+ "TM": {
+ "name": "Uturukimenisitáani"
+ },
+ "TR": {
+ "name": "Uturúuki"
+ },
+ "IR": {
+ "name": "Ʉajéemi"
+ },
+ "BE": {
+ "name": "Ʉbeligíiji"
+ },
+ "FR": {
+ "name": "Ʉfaráansa"
+ },
+ "UG": {
+ "name": "Ʉgáanda"
+ },
+ "ET": {
+ "name": "Ʉhabéeshi"
+ },
+ "NL": {
+ "name": "Ʉholáanzi"
+ },
+ "GB": {
+ "name": "Ʉɨngeréesa"
+ },
+ "DE": {
+ "name": "Ʉjerumáani"
+ },
+ "UA": {
+ "name": "Ʉkɨréeni"
+ },
+ "PT": {
+ "name": "Ʉréeno"
+ },
+ "SZ": {
+ "name": "Ʉswáazi"
+ },
+ "AE": {
+ "name": "Ʉtemi wa Kɨaráabu"
+ },
+ "VU": {
+ "name": "Vanuáatu"
+ },
+ "VA": {
+ "name": "Vatikáani"
+ },
+ "VE": {
+ "name": "Venezuéela"
+ },
+ "VN": {
+ "name": "Vietináamu"
+ },
+ "FK": {
+ "name": "Visíiwa vya Fakulandi"
+ },
+ "KY": {
+ "name": "Visíiwa vya Kayimani"
+ },
+ "CK": {
+ "name": "Visíiwa vya Kúuku"
+ },
+ "MH": {
+ "name": "Visíiwa vya Marisháali"
+ },
+ "SB": {
+ "name": "Visíiwa vya Solomóoni"
+ },
+ "TC": {
+ "name": "Visíiwa vya Turíiki na Kaíiko"
+ },
+ "VI": {
+ "name": "Visíiwa vya Vigíini vya AmerɨÌka"
+ },
+ "VG": {
+ "name": "Visíiwa vya Vigíini vya Ʉɨngeréesa"
+ },
+ "MP": {
+ "name": "Visiwa vya Mariana vya Kaskazini"
+ },
+ "WF": {
+ "name": "Walíisi na Futúuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yémeni"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/lb.json b/library/intl/resources/country/lb.json
new file mode 100644
index 000000000..b073e04f6
--- /dev/null
+++ b/library/intl/resources/country/lb.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…landinselen"
+ },
+ "AL": {
+ "name": "Albanien"
+ },
+ "DZ": {
+ "name": "Algerien"
+ },
+ "VI": {
+ "name": "Amerikanesch Joffereninselen"
+ },
+ "UM": {
+ "name": "Amerikanesch-Ozeanien"
+ },
+ "AS": {
+ "name": "Amerikanesch-Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktis"
+ },
+ "AG": {
+ "name": "Antigua a Barbuda"
+ },
+ "AR": {
+ "name": "Argentinien"
+ },
+ "AM": {
+ "name": "Armenien"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension"
+ },
+ "AZ": {
+ "name": "Aserbaidschan"
+ },
+ "AU": {
+ "name": "Australien"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesch"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BE": {
+ "name": "Belsch"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivien"
+ },
+ "BA": {
+ "name": "Bosnien an Herzegowina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasilien"
+ },
+ "VG": {
+ "name": "Britesch Joffereninselen"
+ },
+ "IO": {
+ "name": "Britescht Territorium am Indeschen Ozean"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgarien"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "EA": {
+ "name": "Ceuta a Melilla"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Chrëschtdagsinsel"
+ },
+ "CK": {
+ "name": "Cookinselen"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DE": {
+ "name": "Däitschland"
+ },
+ "DK": {
+ "name": "Dänemark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominikanesch Republik"
+ },
+ "DJ": {
+ "name": "Dschibuti"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypten"
+ },
+ "AT": {
+ "name": "Éisträich"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "CI": {
+ "name": "Elfebeeküst"
+ },
+ "GQ": {
+ "name": "Equatorialguinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estland"
+ },
+ "ET": {
+ "name": "Ethiopien"
+ },
+ "FK": {
+ "name": "Falklandinselen"
+ },
+ "FO": {
+ "name": "Färöer"
+ },
+ "FJ": {
+ "name": "Fidschi"
+ },
+ "FI": {
+ "name": "Finnland"
+ },
+ "FR": {
+ "name": "Frankräich"
+ },
+ "TF": {
+ "name": "Franséisch Süd- an Antarktisgebidder"
+ },
+ "PF": {
+ "name": "Franséisch-Polynesien"
+ },
+ "GA": {
+ "name": "Gabun"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgien"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GR": {
+ "name": "Griicheland"
+ },
+ "GL": {
+ "name": "Grönland"
+ },
+ "GB": {
+ "name": "Groussbritannien"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GF": {
+ "name": "Guayane"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "NL": {
+ "name": "Holland"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "IN": {
+ "name": "Indien"
+ },
+ "ID": {
+ "name": "Indonesien"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irland"
+ },
+ "IS": {
+ "name": "Island"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italien"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordanien"
+ },
+ "KY": {
+ "name": "Kaimaninselen"
+ },
+ "KH": {
+ "name": "Kambodscha"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanaresch Inselen"
+ },
+ "CV": {
+ "name": "Kap Verde"
+ },
+ "BQ": {
+ "name": "Karibescht Holland"
+ },
+ "KZ": {
+ "name": "Kasachstan"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirgisistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CC": {
+ "name": "Kokosinselen"
+ },
+ "CO": {
+ "name": "Kolumbien"
+ },
+ "KM": {
+ "name": "Komoren"
+ },
+ "CG": {
+ "name": "Kongo-Brazzaville"
+ },
+ "CD": {
+ "name": "Kongo-Kinshasa"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "HR": {
+ "name": "Kroatien"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Lettland"
+ },
+ "LU": {
+ "name": "Lëtzebuerg"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libyen"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Litauen"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldiven"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marokko"
+ },
+ "MH": {
+ "name": "Marshallinselen"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauretanien"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MK": {
+ "name": "Mazedonien"
+ },
+ "MX": {
+ "name": "Mexiko"
+ },
+ "FM": {
+ "name": "Mikronesien"
+ },
+ "MD": {
+ "name": "Moldawien"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolei"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mosambik"
+ },
+ "MM": {
+ "name": "Myanmar"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NC": {
+ "name": "Neikaledonien"
+ },
+ "NZ": {
+ "name": "Neiséiland"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "MP": {
+ "name": "Nërdlech Marianen"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "KP": {
+ "name": "Nordkorea"
+ },
+ "NF": {
+ "name": "Norfolkinsel"
+ },
+ "NO": {
+ "name": "Norwegen"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "TL": {
+ "name": "Osttimor"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinensesch Autonomiegebidder"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua-Neiguinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippinnen"
+ },
+ "PN": {
+ "name": "Pitcairninselen"
+ },
+ "PL": {
+ "name": "Polen"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumänien"
+ },
+ "RU": {
+ "name": "Russland"
+ },
+ "BL": {
+ "name": "Saint-Barthélemy"
+ },
+ "SB": {
+ "name": "Salomonen"
+ },
+ "ZM": {
+ "name": "Sambia"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé a Príncipe"
+ },
+ "SA": {
+ "name": "Saudi-Arabien"
+ },
+ "CH": {
+ "name": "Schwäiz"
+ },
+ "SE": {
+ "name": "Schweden"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbien"
+ },
+ "SC": {
+ "name": "Seychellen"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "ZW": {
+ "name": "Simbabwe"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slowakei"
+ },
+ "SI": {
+ "name": "Slowenien"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ES": {
+ "name": "Spanien"
+ },
+ "HK": {
+ "name": "Spezialverwaltungszon Hong Kong"
+ },
+ "MO": {
+ "name": "Spezialverwaltungszon Macau"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SH": {
+ "name": "St. Helena"
+ },
+ "KN": {
+ "name": "St. Kitts an Nevis"
+ },
+ "LC": {
+ "name": "St. Lucia"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "PM": {
+ "name": "St. Pierre a Miquelon"
+ },
+ "VC": {
+ "name": "St. Vincent an d’Grenadinnen"
+ },
+ "ZA": {
+ "name": "Südafrika"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "GS": {
+ "name": "Südgeorgien an déi Südlech Sandwichinselen"
+ },
+ "KR": {
+ "name": "Südkorea"
+ },
+ "SS": {
+ "name": "Südsudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard a Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swasiland"
+ },
+ "SY": {
+ "name": "Syrien"
+ },
+ "TJ": {
+ "name": "Tadschikistan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tansania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TR": {
+ "name": "Tierkei"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad an Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TD": {
+ "name": "Tschad"
+ },
+ "CZ": {
+ "name": "Tschechien"
+ },
+ "TN": {
+ "name": "Tunesien"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks- a Caicosinselen"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukrain"
+ },
+ "HU": {
+ "name": "Ungarn"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Usbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikanstad"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "AE": {
+ "name": "Vereenegt Arabesch Emirater"
+ },
+ "US": {
+ "name": "Vereenegt Staate vun Amerika"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "BY": {
+ "name": "Wäissrussland"
+ },
+ "WF": {
+ "name": "Wallis a Futuna"
+ },
+ "EH": {
+ "name": "Westsahara"
+ },
+ "CF": {
+ "name": "Zentralafrikanesch Republik"
+ },
+ "CY": {
+ "name": "Zypern"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/lg.json b/library/intl/resources/country/lg.json
new file mode 100644
index 000000000..d2cf82dc0
--- /dev/null
+++ b/library/intl/resources/country/lg.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afaganisitani"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Alibaniya"
+ },
+ "DZ": {
+ "name": "Aligerya"
+ },
+ "US": {
+ "name": "Amerika"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Angwila"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigwa ne Barabuda"
+ },
+ "AM": {
+ "name": "Arameniya"
+ },
+ "AR": {
+ "name": "Arigentina"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Awusitureliya"
+ },
+ "AT": {
+ "name": "Awusituriya"
+ },
+ "IE": {
+ "name": "Ayalandi"
+ },
+ "IS": {
+ "name": "Ayisirandi"
+ },
+ "AZ": {
+ "name": "Azerebayijaani"
+ },
+ "BH": {
+ "name": "Baareeni"
+ },
+ "BS": {
+ "name": "Bahamasi"
+ },
+ "BD": {
+ "name": "Bangaladesi"
+ },
+ "BB": {
+ "name": "Barabadosi"
+ },
+ "BY": {
+ "name": "Belarusi"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BM": {
+ "name": "Beremuda"
+ },
+ "SB": {
+ "name": "Bizanga by’eSolomooni"
+ },
+ "CV": {
+ "name": "Bizinga by’e Kepu Veredi"
+ },
+ "IO": {
+ "name": "Bizinga by’eCago"
+ },
+ "FK": {
+ "name": "Bizinga by’eFalikalandi"
+ },
+ "KM": {
+ "name": "Bizinga by’eKomoro"
+ },
+ "MV": {
+ "name": "Bizinga by’eMalidive"
+ },
+ "TC": {
+ "name": "Bizinga by’eTaaka ne Kayikosi"
+ },
+ "PH": {
+ "name": "Bizinga bya Firipino"
+ },
+ "CK": {
+ "name": "Bizinga bya Kkuki"
+ },
+ "MH": {
+ "name": "Bizinga bya Mariso"
+ },
+ "MP": {
+ "name": "Bizinga bya Mariyana eby’omumambuka"
+ },
+ "VI": {
+ "name": "Bizinga bya Virigini eby’Amerika"
+ },
+ "KY": {
+ "name": "Bizinga ebya Kayimaani"
+ },
+ "VG": {
+ "name": "Bizinga ebya Virigini ebitwalibwa Bungereza"
+ },
+ "BO": {
+ "name": "Boliviya"
+ },
+ "BW": {
+ "name": "Botiswana"
+ },
+ "BA": {
+ "name": "Boziniya Hezegovina"
+ },
+ "BE": {
+ "name": "Bubirigi"
+ },
+ "DE": {
+ "name": "Budaaki"
+ },
+ "FR": {
+ "name": "Bufalansa"
+ },
+ "GR": {
+ "name": "Bugereeki\/Buyonaani"
+ },
+ "BG": {
+ "name": "Bulugariya"
+ },
+ "GB": {
+ "name": "Bungereza"
+ },
+ "BR": {
+ "name": "Buraziiri"
+ },
+ "BF": {
+ "name": "Burukina Faso"
+ },
+ "BN": {
+ "name": "Burunayi"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butaani"
+ },
+ "IN": {
+ "name": "Buyindi"
+ },
+ "TD": {
+ "name": "Caadi"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "CN": {
+ "name": "Cayina"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CL": {
+ "name": "Cile"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denimaaka"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekwado"
+ },
+ "SV": {
+ "name": "El salivado"
+ },
+ "AE": {
+ "name": "Emireeti"
+ },
+ "ER": {
+ "name": "Eritureya"
+ },
+ "EE": {
+ "name": "Esitoniya"
+ },
+ "ET": {
+ "name": "Esyopya"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finilandi"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambya"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GY": {
+ "name": "Gayana"
+ },
+ "GQ": {
+ "name": "Gayana ey’oku ekweta"
+ },
+ "GI": {
+ "name": "Giburalita"
+ },
+ "GN": {
+ "name": "Gini"
+ },
+ "GW": {
+ "name": "Gini-Bisawu"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GD": {
+ "name": "Gurenada"
+ },
+ "GL": {
+ "name": "Gurenelandi"
+ },
+ "GF": {
+ "name": "Guyana enfalansa"
+ },
+ "GP": {
+ "name": "Gwadalupe"
+ },
+ "GU": {
+ "name": "Gwamu"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GE": {
+ "name": "Gyogya"
+ },
+ "HU": {
+ "name": "Hangare"
+ },
+ "HT": {
+ "name": "Hayiti"
+ },
+ "NL": {
+ "name": "Holandi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HN": {
+ "name": "Hundurasi"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "JM": {
+ "name": "Jamayika"
+ },
+ "JP": {
+ "name": "Japani"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "DJ": {
+ "name": "Jjibuti"
+ },
+ "NC": {
+ "name": "Kaledonya mupya"
+ },
+ "KH": {
+ "name": "Kambodya"
+ },
+ "CM": {
+ "name": "Kameruuni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Kataa"
+ },
+ "KZ": {
+ "name": "Kazakisitaani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizisitaani"
+ },
+ "NF": {
+ "name": "Kizinga ky’eNorofoko"
+ },
+ "CO": {
+ "name": "Kolombya"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "CD": {
+ "name": "Kongo - Zayire"
+ },
+ "KP": {
+ "name": "Koreya ey’omumambuka"
+ },
+ "KR": {
+ "name": "Koreya ey’omumaserengeta"
+ },
+ "CR": {
+ "name": "Kosita Rika"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CI": {
+ "name": "Kote Divwa"
+ },
+ "HR": {
+ "name": "Kurowesya"
+ },
+ "KW": {
+ "name": "Kuweti"
+ },
+ "RU": {
+ "name": "Lasa"
+ },
+ "LV": {
+ "name": "Lativya"
+ },
+ "LA": {
+ "name": "Lawosi"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesoso"
+ },
+ "RE": {
+ "name": "Leyunyoni"
+ },
+ "LR": {
+ "name": "Liberya"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Licitensitayini"
+ },
+ "CF": {
+ "name": "Lipubulika eya Senturafiriki"
+ },
+ "CZ": {
+ "name": "Lipubulika ya Ceeka"
+ },
+ "DO": {
+ "name": "Lipubulika ya Dominika"
+ },
+ "LT": {
+ "name": "Lisuwenya"
+ },
+ "RO": {
+ "name": "Lomaniya"
+ },
+ "LU": {
+ "name": "Lukisembaaga"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madagasika"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malezya"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malita"
+ },
+ "MQ": {
+ "name": "Maritiniiki"
+ },
+ "MK": {
+ "name": "Masedoniya"
+ },
+ "MU": {
+ "name": "Mawulisyasi"
+ },
+ "MR": {
+ "name": "Mawulitenya"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mekisiko"
+ },
+ "FM": {
+ "name": "Mikuronezya"
+ },
+ "EG": {
+ "name": "Misiri"
+ },
+ "MD": {
+ "name": "Molodova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongoliya"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Monteseraati"
+ },
+ "MA": {
+ "name": "Moroko"
+ },
+ "MZ": {
+ "name": "Mozambiiki"
+ },
+ "MM": {
+ "name": "Myanima"
+ },
+ "NA": {
+ "name": "Namibiya"
+ },
+ "NR": {
+ "name": "Nawuru"
+ },
+ "NG": {
+ "name": "Nayijerya"
+ },
+ "NP": {
+ "name": "Nepalo"
+ },
+ "NE": {
+ "name": "Nije"
+ },
+ "NI": {
+ "name": "Nikaraguwa"
+ },
+ "NU": {
+ "name": "Niyuwe"
+ },
+ "NZ": {
+ "name": "Niyuziirandi"
+ },
+ "NO": {
+ "name": "Nowe"
+ },
+ "OM": {
+ "name": "Omaani"
+ },
+ "PK": {
+ "name": "Pakisitaani"
+ },
+ "PW": {
+ "name": "Palawu"
+ },
+ "PS": {
+ "name": "Palesitayini"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papwa Nyugini"
+ },
+ "PY": {
+ "name": "Paragwayi"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitikeeni"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PF": {
+ "name": "Polinesiya enfalansa"
+ },
+ "PR": {
+ "name": "Potoriko"
+ },
+ "PT": {
+ "name": "Potugaali"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "WS": {
+ "name": "Samowa"
+ },
+ "AS": {
+ "name": "Samowa omumerika"
+ },
+ "SM": {
+ "name": "Sanimarino"
+ },
+ "ST": {
+ "name": "Sanitome ne Purincipe"
+ },
+ "SA": {
+ "name": "Sawudarebya - Buwarabu"
+ },
+ "ZA": {
+ "name": "Sawusafirika"
+ },
+ "SN": {
+ "name": "Senegaalo"
+ },
+ "SH": {
+ "name": "Senti Herena"
+ },
+ "KN": {
+ "name": "Senti Kitisi ne Nevisi"
+ },
+ "LC": {
+ "name": "Senti Luciya"
+ },
+ "PM": {
+ "name": "Senti Piyere ne Mikeloni"
+ },
+ "VC": {
+ "name": "Senti Vinsenti ne Gurendadiini"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Sesere"
+ },
+ "SG": {
+ "name": "Singapowa"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "ES": {
+ "name": "Sipeyini"
+ },
+ "CY": {
+ "name": "Sipuriya"
+ },
+ "LK": {
+ "name": "Sirilanka"
+ },
+ "SY": {
+ "name": "Siriya"
+ },
+ "SK": {
+ "name": "Sirovakya"
+ },
+ "SI": {
+ "name": "Sirovenya"
+ },
+ "SL": {
+ "name": "Siyeralewone"
+ },
+ "SO": {
+ "name": "Somaliya"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudaani"
+ },
+ "SR": {
+ "name": "Surinaamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swazirandi"
+ },
+ "SE": {
+ "name": "Swideni"
+ },
+ "CH": {
+ "name": "Switizirandi"
+ },
+ "TJ": {
+ "name": "Tajikisitaani"
+ },
+ "TM": {
+ "name": "Takimenesitaani"
+ },
+ "TZ": {
+ "name": "Tanzaniya"
+ },
+ "TH": {
+ "name": "Tayirandi"
+ },
+ "TW": {
+ "name": "Tayiwani"
+ },
+ "TL": {
+ "name": "Timowa"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelawu"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TR": {
+ "name": "Ttake"
+ },
+ "TN": {
+ "name": "Tunisya"
+ },
+ "TT": {
+ "name": "Turindaadi ne Tobago"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VU": {
+ "name": "Vanawuwatu"
+ },
+ "VA": {
+ "name": "Vatikaani"
+ },
+ "VE": {
+ "name": "Venzwera"
+ },
+ "VN": {
+ "name": "Vyetinaamu"
+ },
+ "WF": {
+ "name": "Walisi ne Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "UY": {
+ "name": "Wurugwayi"
+ },
+ "UZ": {
+ "name": "Wuzibekisitaani"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "ID": {
+ "name": "Yindonezya"
+ },
+ "IQ": {
+ "name": "Yiraaka"
+ },
+ "IR": {
+ "name": "Yiraani"
+ },
+ "IL": {
+ "name": "Yisirayeri"
+ },
+ "IT": {
+ "name": "Yitale"
+ },
+ "JO": {
+ "name": "Yorodani"
+ },
+ "UG": {
+ "name": "Yuganda"
+ },
+ "UA": {
+ "name": "Yukurayine"
+ },
+ "ZM": {
+ "name": "Zambya"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ln.json b/library/intl/resources/country/ln.json
new file mode 100644
index 000000000..4918e72a4
--- /dev/null
+++ b/library/intl/resources/country/ln.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afiganisitá"
+ },
+ "ZA": {
+ "name": "Afríka ya Súdi"
+ },
+ "SA": {
+ "name": "Alabi SawuditÉ›"
+ },
+ "DE": {
+ "name": "Alemani"
+ },
+ "AL": {
+ "name": "Alibani"
+ },
+ "DZ": {
+ "name": "Alizɛri"
+ },
+ "US": {
+ "name": "Ameriki"
+ },
+ "AM": {
+ "name": "Amɛni"
+ },
+ "AD": {
+ "name": "AndorÉ›"
+ },
+ "GB": {
+ "name": "AngÉ›lÉ›tÉ›ÌlÉ›"
+ },
+ "AI": {
+ "name": "AngiyÉ›"
+ },
+ "AO": {
+ "name": "Angóla"
+ },
+ "AQ": {
+ "name": "Antarctique"
+ },
+ "AG": {
+ "name": "Antiga mpé Barbuda"
+ },
+ "AR": {
+ "name": "ArizantinÉ›"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "HT": {
+ "name": "Ayiti"
+ },
+ "AZ": {
+ "name": "Azɛlɛbaizá"
+ },
+ "BS": {
+ "name": "BahamasÉ›"
+ },
+ "BH": {
+ "name": "Bahrɛnɛ"
+ },
+ "BB": {
+ "name": "Barɛbadɛ"
+ },
+ "BE": {
+ "name": "Beleziki"
+ },
+ "BZ": {
+ "name": "BelizÉ›"
+ },
+ "BJ": {
+ "name": "BenÉ›"
+ },
+ "BD": {
+ "name": "Bengalidɛsi"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BG": {
+ "name": "Biligari"
+ },
+ "MM": {
+ "name": "Birmanie"
+ },
+ "IC": {
+ "name": "Bisanga bya Kanári"
+ },
+ "CV": {
+ "name": "Bisanga bya Kapevɛrɛ"
+ },
+ "KY": {
+ "name": "Bisanga bya Kayíma"
+ },
+ "CK": {
+ "name": "Bisanga bya KookÉ›"
+ },
+ "FK": {
+ "name": "Bisanga bya Maluni"
+ },
+ "MP": {
+ "name": "Bisanga bya MarianÉ› ya nÉ”Ìrdi"
+ },
+ "MH": {
+ "name": "Bisanga bya MarishalÉ›"
+ },
+ "TC": {
+ "name": "Bisanga bya Turki mpé Kaiko"
+ },
+ "VI": {
+ "name": "Bisanga bya Vierzi ya Ameriki"
+ },
+ "VG": {
+ "name": "Bisanga bya Vierzi ya AngÉ›lÉ›tÉ›ÌlÉ›"
+ },
+ "AX": {
+ "name": "Bisanga Æland"
+ },
+ "CC": {
+ "name": "Bisanga Kokos"
+ },
+ "SB": {
+ "name": "Bisanga SolomÉ”"
+ },
+ "FO": {
+ "name": "Bisanga ya Fɛróa"
+ },
+ "BO": {
+ "name": "Bolivi"
+ },
+ "BA": {
+ "name": "Bosini mpé Hezegovine"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brezílɛ"
+ },
+ "BN": {
+ "name": "Brineyi"
+ },
+ "BF": {
+ "name": "Bukina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butáni"
+ },
+ "BY": {
+ "name": "Byelorisi"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danɛmarike"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Domínike"
+ },
+ "DJ": {
+ "name": "Dzibuti"
+ },
+ "EC": {
+ "name": "EkwatÉ›ÌlÉ›"
+ },
+ "ER": {
+ "name": "ElitelÉ›"
+ },
+ "NF": {
+ "name": "Esanga NorfokÉ›"
+ },
+ "IM": {
+ "name": "Esanga ya Man"
+ },
+ "CX": {
+ "name": "Esenga ya Mbótama"
+ },
+ "AC": {
+ "name": "Esenga ya Mbuta o likoló"
+ },
+ "ES": {
+ "name": "Esipanye"
+ },
+ "EE": {
+ "name": "Esitoni"
+ },
+ "ET": {
+ "name": "Etsíopi"
+ },
+ "EG": {
+ "name": "Ezípite"
+ },
+ "FR": {
+ "name": "Falánsɛ"
+ },
+ "FJ": {
+ "name": "Fidzi"
+ },
+ "FI": {
+ "name": "FilandÉ›"
+ },
+ "PH": {
+ "name": "FilipinÉ›"
+ },
+ "GA": {
+ "name": "GabÉ”"
+ },
+ "GM": {
+ "name": "Gambi"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GR": {
+ "name": "Geleki"
+ },
+ "GD": {
+ "name": "GelenadÉ›"
+ },
+ "GN": {
+ "name": "GinÉ›"
+ },
+ "GW": {
+ "name": "Ginɛbisau"
+ },
+ "GQ": {
+ "name": "GinÉ›ÌkwatÉ›ÌlÉ›"
+ },
+ "GY": {
+ "name": "Giyane"
+ },
+ "GF": {
+ "name": "Giyanɛ ya Falánsɛ"
+ },
+ "GL": {
+ "name": "Gowelande"
+ },
+ "GG": {
+ "name": "Guernesey"
+ },
+ "GP": {
+ "name": "Gwadɛlupɛ"
+ },
+ "GU": {
+ "name": "GwamÉ›"
+ },
+ "GT": {
+ "name": "Gwatémala"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "UA": {
+ "name": "Ikrɛni"
+ },
+ "GS": {
+ "name": "Îles de Géorgie du Sud et Sandwich du Sud"
+ },
+ "IN": {
+ "name": "ÃndÉ›"
+ },
+ "ID": {
+ "name": "Indonezi"
+ },
+ "IR": {
+ "name": "Irâ"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "IE": {
+ "name": "IrelandÉ›"
+ },
+ "UY": {
+ "name": "Irigwei"
+ },
+ "IS": {
+ "name": "IsilandÉ›"
+ },
+ "IL": {
+ "name": "IsirayelÉ›"
+ },
+ "IT": {
+ "name": "Itali"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "NC": {
+ "name": "Kaledoni ya sika"
+ },
+ "KH": {
+ "name": "Kambodza"
+ },
+ "CM": {
+ "name": "Kamɛrune"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katari"
+ },
+ "KZ": {
+ "name": "Kazakisitá"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CU": {
+ "name": "Kiba"
+ },
+ "KG": {
+ "name": "Kigizisitá"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CO": {
+ "name": "Kolombi"
+ },
+ "KM": {
+ "name": "KomorÉ›"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "KP": {
+ "name": "KorÉ› ya nÉ”Ìrdi"
+ },
+ "KR": {
+ "name": "Korɛ ya súdi"
+ },
+ "CR": {
+ "name": "Kositarika"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CI": {
+ "name": "Kotídivualɛ"
+ },
+ "KW": {
+ "name": "Koweti"
+ },
+ "HR": {
+ "name": "Krowasi"
+ },
+ "LA": {
+ "name": "Lawosi"
+ },
+ "RE": {
+ "name": "Lenyo"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letoni"
+ },
+ "AE": {
+ "name": "Lɛmila alabo"
+ },
+ "LB": {
+ "name": "Libá"
+ },
+ "LR": {
+ "name": "Libériya"
+ },
+ "LY": {
+ "name": "Libí"
+ },
+ "LU": {
+ "name": "Likisambulu"
+ },
+ "LI": {
+ "name": "Lishɛteni"
+ },
+ "LT": {
+ "name": "Litwani"
+ },
+ "IO": {
+ "name": "Mabelé ya AngÉ›lÉ›tÉ›ÌlÉ› na mbú ya Indiya"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madagasikari"
+ },
+ "MV": {
+ "name": "Madívɛ"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malezi"
+ },
+ "ML": {
+ "name": "Malí"
+ },
+ "MT": {
+ "name": "MalitÉ›"
+ },
+ "MA": {
+ "name": "MarokÉ›"
+ },
+ "MQ": {
+ "name": "Martiniki"
+ },
+ "MK": {
+ "name": "MasedwanÉ›"
+ },
+ "YT": {
+ "name": "MayotÉ›"
+ },
+ "MX": {
+ "name": "Meksike"
+ },
+ "FM": {
+ "name": "Mikronezi"
+ },
+ "MD": {
+ "name": "Molidavi"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolí"
+ },
+ "ME": {
+ "name": "Monténégro"
+ },
+ "MU": {
+ "name": "MorisÉ›"
+ },
+ "MR": {
+ "name": "Moritani"
+ },
+ "MS": {
+ "name": "Mɔsera"
+ },
+ "MZ": {
+ "name": "Mozambíki"
+ },
+ "NA": {
+ "name": "Namibi"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepálɛ"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NG": {
+ "name": "Nizerya"
+ },
+ "NE": {
+ "name": "Nizɛrɛ"
+ },
+ "NO": {
+ "name": "NorivezÉ›"
+ },
+ "NU": {
+ "name": "Nyué"
+ },
+ "NL": {
+ "name": "OlandÉ›"
+ },
+ "OM": {
+ "name": "Ománɛ"
+ },
+ "HN": {
+ "name": "OndurasÉ›"
+ },
+ "HU": {
+ "name": "Ongili"
+ },
+ "AU": {
+ "name": "Ositáli"
+ },
+ "AT": {
+ "name": "Otilisi"
+ },
+ "PK": {
+ "name": "Pakisitá"
+ },
+ "PY": {
+ "name": "Palagwei"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palɛsine"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papwazi GinÉ› ya sika"
+ },
+ "PE": {
+ "name": "Péru"
+ },
+ "PN": {
+ "name": "Pikairni"
+ },
+ "PF": {
+ "name": "Polinezi ya Falánsɛ"
+ },
+ "PL": {
+ "name": "Poloni"
+ },
+ "PR": {
+ "name": "Pɔtoriko"
+ },
+ "PT": {
+ "name": "Putúlugɛsi"
+ },
+ "CD": {
+ "name": "Repibiki demokratiki ya Kongó"
+ },
+ "CZ": {
+ "name": "Repibiki TsekÉ›"
+ },
+ "CF": {
+ "name": "Repibiki ya Afríka ya Káti"
+ },
+ "DO": {
+ "name": "Repibiki ya Domínikɛ"
+ },
+ "RU": {
+ "name": "Risí"
+ },
+ "RO": {
+ "name": "Romani"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "EH": {
+ "name": "Sahara ya LimbÉ›"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa ya Ameriki"
+ },
+ "SH": {
+ "name": "Sántu eleni"
+ },
+ "KN": {
+ "name": "Sántu krístofe mpé Nevɛ̀s"
+ },
+ "LC": {
+ "name": "Sántu lisi"
+ },
+ "SM": {
+ "name": "Sántu Marinɛ"
+ },
+ "PM": {
+ "name": "Sántu pététo mpé Mikelɔ"
+ },
+ "VC": {
+ "name": "Sántu vesá mpé Gelenadinɛ"
+ },
+ "ST": {
+ "name": "Sao Tomé mpé Presipɛ"
+ },
+ "SV": {
+ "name": "Savadɔrɛ"
+ },
+ "SN": {
+ "name": "SenegalÉ›"
+ },
+ "RS": {
+ "name": "Serbie"
+ },
+ "SC": {
+ "name": "Sɛshɛlɛ"
+ },
+ "SL": {
+ "name": "Siera LeonÉ›"
+ },
+ "CL": {
+ "name": "Síli"
+ },
+ "SK": {
+ "name": "Silovaki"
+ },
+ "SI": {
+ "name": "Siloveni"
+ },
+ "CN": {
+ "name": "SinÉ›"
+ },
+ "SG": {
+ "name": "SingapurÉ›"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "CY": {
+ "name": "Sípɛlɛ"
+ },
+ "SY": {
+ "name": "Sirí"
+ },
+ "LK": {
+ "name": "Sirilanka"
+ },
+ "SO": {
+ "name": "Somali"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudá"
+ },
+ "SS": {
+ "name": "Sudani ya Sidi"
+ },
+ "SR": {
+ "name": "SurinamÉ›"
+ },
+ "SJ": {
+ "name": "Svalbard mpé Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swazilandi"
+ },
+ "SE": {
+ "name": "Swédɛ"
+ },
+ "CH": {
+ "name": "SwisÉ›"
+ },
+ "TH": {
+ "name": "TailandÉ›"
+ },
+ "TW": {
+ "name": "Taiwanin"
+ },
+ "TZ": {
+ "name": "Tanzani"
+ },
+ "TJ": {
+ "name": "Tazikisitá"
+ },
+ "TF": {
+ "name": "Terres australes et antarctiques françaises"
+ },
+ "TM": {
+ "name": "Tikɛménisitá"
+ },
+ "TR": {
+ "name": "Tiliki"
+ },
+ "TL": {
+ "name": "Timorɛ ya Moniɛlɛ"
+ },
+ "TT": {
+ "name": "Tinidadɛ mpé Tobago"
+ },
+ "TN": {
+ "name": "Tinizi"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TD": {
+ "name": "Tsádi"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UZ": {
+ "name": "Uzibɛkisitá"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatiká"
+ },
+ "VE": {
+ "name": "Venézuela"
+ },
+ "VN": {
+ "name": "ViyetinamÉ›"
+ },
+ "WF": {
+ "name": "Walisɛ mpé Futuna"
+ },
+ "YE": {
+ "name": "Yemɛnɛ"
+ },
+ "JM": {
+ "name": "Zamaiki"
+ },
+ "ZM": {
+ "name": "Zambi"
+ },
+ "JP": {
+ "name": "ZapÉ”"
+ },
+ "NZ": {
+ "name": "ZelandÉ› ya sika"
+ },
+ "EA": {
+ "name": "Zewta mpé Melílla"
+ },
+ "GI": {
+ "name": "ZibatalÉ›"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ },
+ "JO": {
+ "name": "Zɔdani"
+ },
+ "GE": {
+ "name": "Zorzi"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/lo.json b/library/intl/resources/country/lo.json
new file mode 100644
index 000000000..e0dc93bb9
--- /dev/null
+++ b/library/intl/resources/country/lo.json
@@ -0,0 +1,761 @@
+{
+ "GR": {
+ "name": "àºàº£àºµàºŠ"
+ },
+ "GL": {
+ "name": "àºàº£àºµàº™à»àº¥àº™"
+ },
+ "GU": {
+ "name": "àºàº§àº¡"
+ },
+ "GY": {
+ "name": "àºàº²àºàº¢àº²àº™àº²"
+ },
+ "QA": {
+ "name": "àºàº²àº•àº²"
+ },
+ "GH": {
+ "name": "àºàº²àº™àº²"
+ },
+ "GA": {
+ "name": "àºàº²àºšàº­àº™"
+ },
+ "KH": {
+ "name": "àºàº³àº›àº¹à»€àºˆàº"
+ },
+ "GN": {
+ "name": "àºàº´àº™àºµ"
+ },
+ "GW": {
+ "name": "àºàº´àº™àºµ-ບິສເຊົາ"
+ },
+ "GP": {
+ "name": "àºàº»àº§àº”າລູບ"
+ },
+ "GT": {
+ "name": "àºàº»àº§à»€àº—ມາລາ"
+ },
+ "GD": {
+ "name": "ເàºàº£à»€àº™àº”າ"
+ },
+ "CX": {
+ "name": "ເàºàº²àº°àº„ຣິສມາດ"
+ },
+ "NF": {
+ "name": "ເàºàº²àº°àº™à»à»‚ຟàº"
+ },
+ "AC": {
+ "name": "ເàºàº²àº°àº­àº²à»€àºŠàº™àºŠàº±àº™"
+ },
+ "GG": {
+ "name": "ເàºàºµàº™àºŠàºµ"
+ },
+ "KR": {
+ "name": "ເàºàº»àº²àº«àº¥àºµà»ƒàº•à»‰"
+ },
+ "KP": {
+ "name": "ເàºàº»àº²àº«àº¥àºµà»€à»œàº·àº­"
+ },
+ "TF": {
+ "name": "ເຂດà»àº”ນທາງໃຕ້ຂອàºàº®àº±à»ˆàº‡"
+ },
+ "IO": {
+ "name": "ເຂດà»àº”ນບຣິທິສອິນດຽນໂອຊຽນ"
+ },
+ "CD": {
+ "name": "ຄອງໂຠ- ຄິນຊາຊາ"
+ },
+ "CG": {
+ "name": "ຄອງໂຠ- ບຣາຊາວິວ"
+ },
+ "KZ": {
+ "name": "ຄາຊັàºàºªàº°àº–ານ"
+ },
+ "CM": {
+ "name": "ຄາເມຣູນ"
+ },
+ "BQ": {
+ "name": "ຄາຣິບບຽນ ເນເທີà»àº¥àº™"
+ },
+ "KI": {
+ "name": "ຄິຣິບາທິ"
+ },
+ "CU": {
+ "name": "ຄິວບາ"
+ },
+ "KG": {
+ "name": "ຄີàºàº´àºªàº–ານ"
+ },
+ "CW": {
+ "name": "ຄູຣາຊາວ"
+ },
+ "KW": {
+ "name": "ຄູເວດ"
+ },
+ "KE": {
+ "name": "ເຄນຢາ"
+ },
+ "CV": {
+ "name": "ເຄບ ເວີດ"
+ },
+ "KY": {
+ "name": "ເຄà»àº¡àº™ ໄອà»àº¥àº™"
+ },
+ "CA": {
+ "name": "à»àº„ນາດາ"
+ },
+ "CR": {
+ "name": "ໂຄສຕາ ຣິàºàº²"
+ },
+ "XK": {
+ "name": "ໂຄໂຊໂວ"
+ },
+ "CI": {
+ "name": "ໂຄຕີ ວົວ"
+ },
+ "KM": {
+ "name": "ໂຄໂມໂຣສ"
+ },
+ "HR": {
+ "name": "ໂຄຣເອເທàº"
+ },
+ "CO": {
+ "name": "ໂຄລົມເບàº"
+ },
+ "GE": {
+ "name": "ຈà»à»€àºˆàº"
+ },
+ "JO": {
+ "name": "ຈà»à»àº”ນ"
+ },
+ "JM": {
+ "name": "ຈາໄມຄາ"
+ },
+ "GI": {
+ "name": "ຈິບບຣອນທາ"
+ },
+ "DJ": {
+ "name": "ຈິບູຕິ"
+ },
+ "CN": {
+ "name": "ຈີນ"
+ },
+ "JE": {
+ "name": "ເຈີຊີ"
+ },
+ "ES": {
+ "name": "ສະເປນ"
+ },
+ "SK": {
+ "name": "ສະໂລວາເàºàº"
+ },
+ "SI": {
+ "name": "ສະໂລເວເນàº"
+ },
+ "SZ": {
+ "name": "ສະວາຊິà»àº¥àº™"
+ },
+ "SJ": {
+ "name": "ສະວາບາ à»àº¥àº° à»àº¢àº™ ມາເຢນ"
+ },
+ "CH": {
+ "name": "ສະວິດເຊີà»àº¥àº™"
+ },
+ "SE": {
+ "name": "ສະວີເດັນ"
+ },
+ "US": {
+ "name": "ສະຫະລັດ"
+ },
+ "AE": {
+ "name": "ສະຫະລັດອາຣັບເອມິເຣດ"
+ },
+ "GB": {
+ "name": "ສະຫະລາດຊະອະນາຈັàº"
+ },
+ "DO": {
+ "name": "ສາທາລະນະລັດ ໂດມິນິàºàº±àº™"
+ },
+ "GM": {
+ "name": "ສາທາລະນະລັດà»àºàº¡à»€àºšàº"
+ },
+ "CZ": {
+ "name": "ສາທາລະນະລັດເຊàº"
+ },
+ "CF": {
+ "name": "ສາທາລະນະລັດອາຟຣິàºàº²àºàº²àº‡"
+ },
+ "SG": {
+ "name": "ສິງàºàº°à»‚ປ"
+ },
+ "LK": {
+ "name": "ສີລັງàºàº²"
+ },
+ "TD": {
+ "name": "ຊາດ"
+ },
+ "WS": {
+ "name": "ຊາມົວ"
+ },
+ "SA": {
+ "name": "ຊາອຸດິ ອາຣາເບàº"
+ },
+ "EH": {
+ "name": "ຊາຮາຣາຕາເວັນຕົàº"
+ },
+ "SX": {
+ "name": "ຊິນ ມາເທັນ"
+ },
+ "ZW": {
+ "name": "ຊິມບັບເວ"
+ },
+ "CL": {
+ "name": "ຊິລີ"
+ },
+ "SY": {
+ "name": "ຊີເຣàº"
+ },
+ "SD": {
+ "name": "ຊູດານ"
+ },
+ "SS": {
+ "name": "ຊູດານໃຕ້"
+ },
+ "SR": {
+ "name": "ຊູຣິນາມ"
+ },
+ "SC": {
+ "name": "ເຊເຊວເລສ"
+ },
+ "SL": {
+ "name": "ເຊàºàº£àº² ລີໂອນ"
+ },
+ "KN": {
+ "name": "ເຊນ ຄິດ à»àº¥àº° ເນວິສ"
+ },
+ "BL": {
+ "name": "ເຊນ ບາເທເລມີ"
+ },
+ "PM": {
+ "name": "ເຊນ ປີà»àº­ ມິເàºàº§àº¥àº­àº™"
+ },
+ "MF": {
+ "name": "ເຊນ ມາທິນ"
+ },
+ "LC": {
+ "name": "ເຊນ ລູເຊàº"
+ },
+ "VC": {
+ "name": "ເຊນ ວິນເຊນ & ເàºàº£à»€àº™àº”ິນ"
+ },
+ "SH": {
+ "name": "ເຊນ ເຮເລນາ"
+ },
+ "SN": {
+ "name": "ເຊນີໂàºàº¥"
+ },
+ "EA": {
+ "name": "ເຊວຕາ à»àº¥àº°à»€àº¡àº¥àº´àº™àº¥àº²"
+ },
+ "RS": {
+ "name": "ເຊີເບàº"
+ },
+ "ST": {
+ "name": "ເຊົາທູເມ à»àº¥àº° ພຣິນຊິບ"
+ },
+ "SM": {
+ "name": "à»àºŠàº™ ມາຣິໂນ"
+ },
+ "ZM": {
+ "name": "à»àºŠàº¡à»€àºšàº"
+ },
+ "SO": {
+ "name": "ໂຊມາເລàº"
+ },
+ "CY": {
+ "name": "ໄຊປຣັສ"
+ },
+ "JP": {
+ "name": "àºàºµà»ˆàº›àº¸à»ˆàº™"
+ },
+ "PS": {
+ "name": "ດິນà»àº”ນ ປາເລສຕິນຽນ"
+ },
+ "DG": {
+ "name": "ດິເອໂຠàºàº²à»€àºŠàº"
+ },
+ "DK": {
+ "name": "ເດນມາàº"
+ },
+ "DM": {
+ "name": "ໂດມີນິຄາ"
+ },
+ "TN": {
+ "name": "ຕູນິເຊàº"
+ },
+ "TV": {
+ "name": "ຕູວາລູ"
+ },
+ "TK": {
+ "name": "ໂຕເàºà»€àº¥àº»àº²"
+ },
+ "TG": {
+ "name": "ໂຕໂàº"
+ },
+ "TW": {
+ "name": "ໄຕ້ຫວັນ"
+ },
+ "TA": {
+ "name": "ທຣິສຕັນ ດາ àºàº±àº™àº®àº²"
+ },
+ "TT": {
+ "name": "ທຣິນິà»àº”ດ à»àº¥àº° ໂທà»àºšà»‚àº"
+ },
+ "TO": {
+ "name": "ທອງàºàº²"
+ },
+ "TJ": {
+ "name": "ທາຈິàºàº´àºªàº–ານ"
+ },
+ "TZ": {
+ "name": "ທານຊາເນàº"
+ },
+ "TL": {
+ "name": "ທິມà»-ເລສເຕ"
+ },
+ "TM": {
+ "name": "ເທີàºà»€àº¡àº™àº´àºªàº–ານ"
+ },
+ "TR": {
+ "name": "ເທີຄີ"
+ },
+ "TH": {
+ "name": "ໄທ"
+ },
+ "NO": {
+ "name": "ນà»à»€àº§"
+ },
+ "VA": {
+ "name": "ນະຄອນ ວາຕິàºàº±àº™"
+ },
+ "NA": {
+ "name": "ນາມີເບàº"
+ },
+ "NR": {
+ "name": "ນາອູຣູ"
+ },
+ "NI": {
+ "name": "ນິàºàº„າຣາàºàº»àº§"
+ },
+ "NE": {
+ "name": "ນິເຈີ"
+ },
+ "NC": {
+ "name": "ນິວ ຄາເລໂດເນàº"
+ },
+ "NZ": {
+ "name": "ນິວຊີà»àº¥àº™"
+ },
+ "NU": {
+ "name": "ນີອູເອ"
+ },
+ "NL": {
+ "name": "ເນເທີà»àº¥àº™"
+ },
+ "NP": {
+ "name": "ເນປານ"
+ },
+ "NG": {
+ "name": "ໄນຈີເຣàº"
+ },
+ "BR": {
+ "name": "ບຣາຊິວ"
+ },
+ "BN": {
+ "name": "ບຣູໄນ"
+ },
+ "BA": {
+ "name": "ບອດສະເນຠà»àº¥àº° à»àº®àºªà»‚àºàº§àºµàº™àº²"
+ },
+ "BW": {
+ "name": "ບອດສະວານາ"
+ },
+ "BD": {
+ "name": "ບັງàºàº°àº¥àº²à»€àº—ດ"
+ },
+ "BG": {
+ "name": "ບັງàºàº²à»€àº£àº"
+ },
+ "BB": {
+ "name": "ບາບາໂດສ"
+ },
+ "BH": {
+ "name": "ບາເຣນ"
+ },
+ "BS": {
+ "name": "ບາຮາມາສ"
+ },
+ "BI": {
+ "name": "ບູຣຸນດິ"
+ },
+ "BJ": {
+ "name": "ເບນິນ"
+ },
+ "BZ": {
+ "name": "ເບລີຊ"
+ },
+ "BY": {
+ "name": "ເບວບາຣຸສ"
+ },
+ "BE": {
+ "name": "ເບວຢຽມ"
+ },
+ "BF": {
+ "name": "ເບີàºàº´àº™àº² ຟາໂຊ"
+ },
+ "BM": {
+ "name": "ເບີມິວດາ"
+ },
+ "BO": {
+ "name": "ໂບລິເວàº"
+ },
+ "PK": {
+ "name": "ປາàºàº´àºªàº–ານ"
+ },
+ "PG": {
+ "name": "ປາປົວນິວàºàºµàº™àºµ"
+ },
+ "PW": {
+ "name": "ປາເລົາ"
+ },
+ "PE": {
+ "name": "ເປຣູ"
+ },
+ "PL": {
+ "name": "ໂປà»àº¥àº™"
+ },
+ "FR": {
+ "name": "àºàº£àº±à»ˆàº‡"
+ },
+ "PT": {
+ "name": "ພອລທູໂàº"
+ },
+ "PA": {
+ "name": "ພານາມາ"
+ },
+ "PY": {
+ "name": "ພາຣາàºàº§àº"
+ },
+ "BT": {
+ "name": "ພູຖານ"
+ },
+ "PR": {
+ "name": "ເພືອໂຕ ຣິໂàº"
+ },
+ "FJ": {
+ "name": "ຟິຈິ"
+ },
+ "FI": {
+ "name": "ຟິນà»àº¥àº™"
+ },
+ "PH": {
+ "name": "ຟິລິບປິນ"
+ },
+ "GF": {
+ "name": "ເຟຣນຊ໌ àºàº¸àºàº­àº²àº™àº²"
+ },
+ "PF": {
+ "name": "ເຟຣນຊ໌ ໂພລີນີເຊàº"
+ },
+ "MN": {
+ "name": "ມອງໂàºà»€àº¥àº"
+ },
+ "MS": {
+ "name": "ມອນເຊີຣາດ"
+ },
+ "ME": {
+ "name": "ມອນເຕເນໂàºàº£"
+ },
+ "MT": {
+ "name": "ມອນທາ"
+ },
+ "MV": {
+ "name": "ມັນດິຟ"
+ },
+ "MO": {
+ "name": "ມາເàºàº»à»‰àº² ເຂດປົàºàº„ອງພິເສດ ຈີນ"
+ },
+ "MG": {
+ "name": "ມາດາàºàº²àºªàºàº²"
+ },
+ "MQ": {
+ "name": "ມາຕິນີàº"
+ },
+ "YT": {
+ "name": "ມາຢັອດ"
+ },
+ "MW": {
+ "name": "ມາລາວີ"
+ },
+ "ML": {
+ "name": "ມາລິ"
+ },
+ "MY": {
+ "name": "ມາເລເຊàº"
+ },
+ "MU": {
+ "name": "ມົວຣິຊຽສ"
+ },
+ "MR": {
+ "name": "ມົວຣິເທເນàº"
+ },
+ "MM": {
+ "name": "ມຽນມາ (ເບີມາ)"
+ },
+ "MX": {
+ "name": "ເມັàºàºŠàº´à»‚àº"
+ },
+ "MK": {
+ "name": "à»àº¡àºŠàº´à»‚ດເນàº"
+ },
+ "MZ": {
+ "name": "ໂມà»àºŠàº¡àºšàº´àº"
+ },
+ "MD": {
+ "name": "ໂມນໂດວາ"
+ },
+ "MC": {
+ "name": "ໂມນາໂຄ"
+ },
+ "MA": {
+ "name": "ໂມຣັອàºà»‚ຄ"
+ },
+ "FM": {
+ "name": "ໄມໂຄຣນີເຊàº"
+ },
+ "UA": {
+ "name": "ຢູເຄຣນ"
+ },
+ "DE": {
+ "name": "ເຢàºàº¥àº°àº¡àº±àº™"
+ },
+ "YE": {
+ "name": "ເຢເມນ"
+ },
+ "RW": {
+ "name": "ຣວັນດາ"
+ },
+ "RU": {
+ "name": "ຣັດເຊàº"
+ },
+ "RE": {
+ "name": "ເຣອູນິàºàº»àº‡"
+ },
+ "RO": {
+ "name": "ໂຣà»àº¡à»€àº™àº"
+ },
+ "LV": {
+ "name": "ລັດເວàº"
+ },
+ "LA": {
+ "name": "ລາວ"
+ },
+ "LI": {
+ "name": "ລິດເທນສະຕາàº"
+ },
+ "LT": {
+ "name": "ລິທົວເນàº"
+ },
+ "LY": {
+ "name": "ລິເບàº"
+ },
+ "LR": {
+ "name": "ລິເບີເຣàº"
+ },
+ "LU": {
+ "name": "ລຸàºà»àºŠàº¡à»€àºšàºµàº"
+ },
+ "LS": {
+ "name": "ເລໂຊໂທ"
+ },
+ "LB": {
+ "name": "ເລບານອນ"
+ },
+ "VU": {
+ "name": "ວານົວຕູ"
+ },
+ "WF": {
+ "name": "ວາລິສ à»àº¥àº° ຟຸຕູນາ"
+ },
+ "VE": {
+ "name": "ເວເນຊູເອລາ"
+ },
+ "TC": {
+ "name": "à»àº¹à»ˆà»€àºàº²àº° ເທີຠà»àº¥àº° ໄຄໂຄສ"
+ },
+ "VG": {
+ "name": "à»àº¹à»ˆà»€àºàº²àº° ບຣິທິຊ ເວີຈິນ"
+ },
+ "VI": {
+ "name": "à»àº¹à»ˆà»€àºàº²àº° ຢູເອສ ເວີຈິນ"
+ },
+ "CC": {
+ "name": "ຫມູ່ເàºàº²àº°à»‚àºà»‚àºàºª"
+ },
+ "IC": {
+ "name": "à»àº¹à»ˆà»€àºàº²àº°àº„ານາຣີ"
+ },
+ "CK": {
+ "name": "à»àº¹à»ˆà»€àºàº²àº°àº„ຸàº"
+ },
+ "GS": {
+ "name": "à»àº¹à»ˆà»€àºàº²àº°àºˆà»à»€àºˆàº & ເຊົາ à»àºŠàº™àº§àº´àº”"
+ },
+ "SB": {
+ "name": "ຫມູ່ເàºàº²àº°à»‚ຊໂລມອນ"
+ },
+ "PN": {
+ "name": "à»àº¹à»ˆà»€àºàº²àº°àºžàº´àº”à»àº„ນ"
+ },
+ "FK": {
+ "name": "ຫມູ່ເàºàº²àº°àºŸàº­àºà»àº¥àº™"
+ },
+ "FO": {
+ "name": "ຫມູ່ເàºàº²àº°à»àºŸà»‚ຣ"
+ },
+ "MH": {
+ "name": "ຫມູ່ເàºàº²àº°àº¡àº²à»àºŠàº§"
+ },
+ "MP": {
+ "name": "ຫມູ່ເàºàº²àº°àº¡àº²à»àºŠàº§àº•àº­àº™à»€àº«àº™àº·àº­"
+ },
+ "AX": {
+ "name": "ຫມູ່ເàºàº²àº°à»‚ອລັນ"
+ },
+ "UM": {
+ "name": "à»àº¹à»ˆà»€àºàº²àº°àº®àº­àºšàº™àº­àºàº‚ອງສະຫະລັດຯ"
+ },
+ "VN": {
+ "name": "ຫວຽດນາມ"
+ },
+ "AW": {
+ "name": "ອà»àº£àº¹àºšàº²"
+ },
+ "AU": {
+ "name": "ອອສເຕຣເລàº"
+ },
+ "AT": {
+ "name": "ອອສເທຣàº"
+ },
+ "AO": {
+ "name": "ອັນໂàºàº¥àº²"
+ },
+ "AD": {
+ "name": "ອັນດà»àº£àº²"
+ },
+ "DZ": {
+ "name": "ອັລຈິເຣàº"
+ },
+ "AR": {
+ "name": "ອາເຈນທິນາ"
+ },
+ "AZ": {
+ "name": "ອາເຊີໄບຈານ"
+ },
+ "AG": {
+ "name": "ອາທິàºàº»àº§ ບາບູດາ"
+ },
+ "AF": {
+ "name": "ອາຟàºàº²àº™àº´àºªàº–ານ"
+ },
+ "ZA": {
+ "name": "ອາຟະລິàºàº²à»ƒàº•à»‰"
+ },
+ "AM": {
+ "name": "ອາເມເນàº"
+ },
+ "AS": {
+ "name": "ອາເມຣິàºàº² ຊາມົວ"
+ },
+ "IL": {
+ "name": "ອິສຣາເອວ"
+ },
+ "IT": {
+ "name": "ອິຕາລີ"
+ },
+ "IN": {
+ "name": "ອິນເດàº"
+ },
+ "ID": {
+ "name": "ອິນໂດເນເຊàº"
+ },
+ "GQ": {
+ "name": "ອີຄົວໂຕຣຽວ àºàºµàº™àºµ"
+ },
+ "ET": {
+ "name": "ອີທິໂອເປàº"
+ },
+ "EG": {
+ "name": "ອີຢິບ"
+ },
+ "IQ": {
+ "name": "ອີຣັàº"
+ },
+ "IR": {
+ "name": "ອີຣ່ານ"
+ },
+ "UZ": {
+ "name": "ອຸສເບàºàº´àºªàº–ານ"
+ },
+ "UG": {
+ "name": "ອູàºàº²àº™àº”າ"
+ },
+ "UY": {
+ "name": "ອູຣຸàºàº§àº"
+ },
+ "EC": {
+ "name": "ເອàºàºàº§àº²àº”à»"
+ },
+ "EE": {
+ "name": "ເອສໂຕເນàº"
+ },
+ "ER": {
+ "name": "ເອຣິເທຣàº"
+ },
+ "SV": {
+ "name": "ເອວ ຊà»àº§àº²àº”à»"
+ },
+ "IM": {
+ "name": "ເອວ ອອບ à»àº¡àº™"
+ },
+ "AI": {
+ "name": "à»àº­àº™àºàº¸àºàº¥àº²"
+ },
+ "AQ": {
+ "name": "à»àº­àº™àº•àº²àº”ຕິàºàº²"
+ },
+ "AL": {
+ "name": "à»àº­àº§à»€àºšà»€àº™àº"
+ },
+ "OM": {
+ "name": "ໂອມານ"
+ },
+ "IS": {
+ "name": "ໄອສà»àº¥àº™"
+ },
+ "IE": {
+ "name": "ໄອຣ໌à»àº¥àº™"
+ },
+ "HK": {
+ "name": "ຮອງàºàº»àº‡ ເຂດປົàºàº„ອງພິເສດ ຈີນ"
+ },
+ "HN": {
+ "name": "ຮອນດູຣັສ"
+ },
+ "HU": {
+ "name": "ຮັງàºàº²àº£àºµ"
+ },
+ "HT": {
+ "name": "ໄຮຕິ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/lt.json b/library/intl/resources/country/lt.json
new file mode 100644
index 000000000..dd17a5ab3
--- /dev/null
+++ b/library/intl/resources/country/lt.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistanas"
+ },
+ "IE": {
+ "name": "Airija"
+ },
+ "AX": {
+ "name": "Alandų Salos"
+ },
+ "AL": {
+ "name": "Albanija"
+ },
+ "DZ": {
+ "name": "Alžyras"
+ },
+ "AS": {
+ "name": "Amerikos Samoa"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AI": {
+ "name": "Angilija"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AQ": {
+ "name": "Antarktida"
+ },
+ "AG": {
+ "name": "Antigva ir Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "ArmÄ—nija"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australija"
+ },
+ "AT": {
+ "name": "Austrija"
+ },
+ "AZ": {
+ "name": "Azerbaidžanas"
+ },
+ "BS": {
+ "name": "Bahamos"
+ },
+ "BH": {
+ "name": "Bahreinas"
+ },
+ "BY": {
+ "name": "Baltarusija"
+ },
+ "BD": {
+ "name": "Bangladešas"
+ },
+ "BB": {
+ "name": "Barbadosas"
+ },
+ "BE": {
+ "name": "Belgija"
+ },
+ "BZ": {
+ "name": "Belizas"
+ },
+ "BJ": {
+ "name": "Beninas"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "GW": {
+ "name": "Bisau GvinÄ—ja"
+ },
+ "BO": {
+ "name": "Bolivija"
+ },
+ "BA": {
+ "name": "Bosnija ir Hercegovina"
+ },
+ "BW": {
+ "name": "Botsvana"
+ },
+ "BR": {
+ "name": "Brazilija"
+ },
+ "BN": {
+ "name": "BrunÄ—jus"
+ },
+ "BG": {
+ "name": "Bulgarija"
+ },
+ "BF": {
+ "name": "Burkina Fasas"
+ },
+ "BI": {
+ "name": "Burundis"
+ },
+ "BT": {
+ "name": "Butanas"
+ },
+ "CF": {
+ "name": "CentrinÄ—s Afrikos Respublika"
+ },
+ "TD": {
+ "name": "ÄŒadas"
+ },
+ "CZ": {
+ "name": "ÄŒekija"
+ },
+ "CL": {
+ "name": "ÄŒilÄ—"
+ },
+ "AC": {
+ "name": "Dangun Žengimo sala"
+ },
+ "DK": {
+ "name": "Danija"
+ },
+ "GB": {
+ "name": "Didžioji Britanija"
+ },
+ "VG": {
+ "name": "Didžiosios Britanijos Mergelių Salos"
+ },
+ "DG": {
+ "name": "Diego Garsija"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "DO": {
+ "name": "Dominikos Respublika"
+ },
+ "CI": {
+ "name": "Dramblio Kaulo Krantas"
+ },
+ "JE": {
+ "name": "Džersis"
+ },
+ "DJ": {
+ "name": "Džibutis"
+ },
+ "EG": {
+ "name": "Egiptas"
+ },
+ "EC": {
+ "name": "Ekvadoras"
+ },
+ "ER": {
+ "name": "EritrÄ—ja"
+ },
+ "EE": {
+ "name": "Estija"
+ },
+ "ET": {
+ "name": "Etiopija"
+ },
+ "FO": {
+ "name": "Farerų Salos"
+ },
+ "FJ": {
+ "name": "Fidžis"
+ },
+ "PH": {
+ "name": "Filipinai"
+ },
+ "FK": {
+ "name": "Folklando Salos"
+ },
+ "GA": {
+ "name": "Gabonas"
+ },
+ "GY": {
+ "name": "Gajana"
+ },
+ "GM": {
+ "name": "Gambija"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GG": {
+ "name": "Gernsis"
+ },
+ "GI": {
+ "name": "Gibraltaras"
+ },
+ "GR": {
+ "name": "Graikija"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grenlandija"
+ },
+ "GE": {
+ "name": "Gruzija"
+ },
+ "GU": {
+ "name": "Guamas"
+ },
+ "GP": {
+ "name": "Gvadelupa"
+ },
+ "GT": {
+ "name": "Gvatemala"
+ },
+ "GN": {
+ "name": "GvinÄ—ja"
+ },
+ "HT": {
+ "name": "Haitis"
+ },
+ "HN": {
+ "name": "Hondūras"
+ },
+ "IN": {
+ "name": "Indija"
+ },
+ "IO": {
+ "name": "Indijos Vandenyno Britų Sritis"
+ },
+ "ID": {
+ "name": "Indonezija"
+ },
+ "HK": {
+ "name": "Ypatingasis Administracinis Kinijos Regionas Honkongas"
+ },
+ "MO": {
+ "name": "Ypatingasis Administracinis Kinijos Regionas Makao"
+ },
+ "IQ": {
+ "name": "Irakas"
+ },
+ "IR": {
+ "name": "Iranas"
+ },
+ "IS": {
+ "name": "Islandija"
+ },
+ "ES": {
+ "name": "Ispanija"
+ },
+ "IT": {
+ "name": "Italija"
+ },
+ "IL": {
+ "name": "Izraelis"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "JP": {
+ "name": "Japonija"
+ },
+ "YE": {
+ "name": "Jemenas"
+ },
+ "JO": {
+ "name": "Jordanija"
+ },
+ "US": {
+ "name": "JungtinÄ—s Valstijos"
+ },
+ "AE": {
+ "name": "Jungtiniai Arabų Emyratai"
+ },
+ "UM": {
+ "name": "Jungtinių Valstijų Mažosios Tolimosios Salos"
+ },
+ "VI": {
+ "name": "Jungtinių Valstijų Mergelių Salos"
+ },
+ "ME": {
+ "name": "Juodkalnija"
+ },
+ "KY": {
+ "name": "Kaimanų Salos"
+ },
+ "CX": {
+ "name": "Kalėdų Sala"
+ },
+ "KH": {
+ "name": "Kambodža"
+ },
+ "CM": {
+ "name": "Kamerūnas"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanarų salos"
+ },
+ "BQ": {
+ "name": "Karibų Nyderlandai"
+ },
+ "QA": {
+ "name": "Kataras"
+ },
+ "KZ": {
+ "name": "Kazachstanas"
+ },
+ "KE": {
+ "name": "Kenija"
+ },
+ "CN": {
+ "name": "Kinija"
+ },
+ "CY": {
+ "name": "Kipras"
+ },
+ "KG": {
+ "name": "Kirgizija"
+ },
+ "KI": {
+ "name": "Kiribatis"
+ },
+ "CW": {
+ "name": "Kiurasao"
+ },
+ "CC": {
+ "name": "Kokosų (Kilingo) Salos"
+ },
+ "CO": {
+ "name": "Kolumbija"
+ },
+ "KM": {
+ "name": "Komorai"
+ },
+ "CG": {
+ "name": "Kongas-Brazavilis"
+ },
+ "CD": {
+ "name": "Kongas-Kinšasa"
+ },
+ "XK": {
+ "name": "Kosovas"
+ },
+ "CR": {
+ "name": "Kosta Rika"
+ },
+ "HR": {
+ "name": "Kroatija"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CK": {
+ "name": "Kuko Salos"
+ },
+ "KW": {
+ "name": "Kuveitas"
+ },
+ "LA": {
+ "name": "Laosas"
+ },
+ "LV": {
+ "name": "Latvija"
+ },
+ "PL": {
+ "name": "Lenkija"
+ },
+ "LS": {
+ "name": "Lesotas"
+ },
+ "LB": {
+ "name": "Libanas"
+ },
+ "LR": {
+ "name": "Liberija"
+ },
+ "LY": {
+ "name": "Libija"
+ },
+ "LI": {
+ "name": "Lichtenšteinas"
+ },
+ "LT": {
+ "name": "Lietuva"
+ },
+ "LU": {
+ "name": "Liuksemburgas"
+ },
+ "MG": {
+ "name": "Madagaskaras"
+ },
+ "YT": {
+ "name": "Majotas"
+ },
+ "MK": {
+ "name": "Makedonija"
+ },
+ "MY": {
+ "name": "Malaizija"
+ },
+ "MW": {
+ "name": "Malavis"
+ },
+ "MV": {
+ "name": "Maldyvai"
+ },
+ "ML": {
+ "name": "Malis"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MP": {
+ "name": "Marianos Å iaurinÄ—s Salos"
+ },
+ "MA": {
+ "name": "Marokas"
+ },
+ "MH": {
+ "name": "Maršalo Salos"
+ },
+ "MQ": {
+ "name": "Martinika"
+ },
+ "MU": {
+ "name": "Mauricijus"
+ },
+ "MR": {
+ "name": "Mauritanija"
+ },
+ "MX": {
+ "name": "Meksika"
+ },
+ "IM": {
+ "name": "Meno Sala"
+ },
+ "MM": {
+ "name": "Mianmaras (Birma)"
+ },
+ "FM": {
+ "name": "Mikronezija"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monakas"
+ },
+ "MN": {
+ "name": "Mongolija"
+ },
+ "MS": {
+ "name": "Montseratas"
+ },
+ "MZ": {
+ "name": "Mozambikas"
+ },
+ "NA": {
+ "name": "Namibija"
+ },
+ "NC": {
+ "name": "Naujoji Kaledonija"
+ },
+ "NZ": {
+ "name": "Naujoji Zelandija"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepalas"
+ },
+ "NL": {
+ "name": "Nyderlandai"
+ },
+ "NG": {
+ "name": "Nigerija"
+ },
+ "NE": {
+ "name": "Nigeris"
+ },
+ "NI": {
+ "name": "Nikaragva"
+ },
+ "NU": {
+ "name": "NiujÄ—"
+ },
+ "NF": {
+ "name": "Norfolko sala"
+ },
+ "NO": {
+ "name": "Norvegija"
+ },
+ "OM": {
+ "name": "Omanas"
+ },
+ "PK": {
+ "name": "Pakistanas"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinos teritorija"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Naujoji GvinÄ—ja"
+ },
+ "PY": {
+ "name": "Paragvajus"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "ZA": {
+ "name": "Pietų Afrika"
+ },
+ "GS": {
+ "name": "Pietų Džordžija ir Pietų SandviÄo salos"
+ },
+ "KR": {
+ "name": "Pietų Korėja"
+ },
+ "SS": {
+ "name": "Pietų Sudanas"
+ },
+ "PN": {
+ "name": "Pitkernas"
+ },
+ "PT": {
+ "name": "Portugalija"
+ },
+ "FR": {
+ "name": "Prancūzija"
+ },
+ "GF": {
+ "name": "Prancūzijos Gviana"
+ },
+ "TF": {
+ "name": "Prancūzijos Pietų sritys"
+ },
+ "PF": {
+ "name": "Prancūzų Polinezija"
+ },
+ "PR": {
+ "name": "Puerto Rikas"
+ },
+ "GQ": {
+ "name": "Pusiaujo GvinÄ—ja"
+ },
+ "RE": {
+ "name": "Reunjonas"
+ },
+ "TL": {
+ "name": "Rytų Timoras"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumunija"
+ },
+ "RU": {
+ "name": "Rusija"
+ },
+ "SB": {
+ "name": "Saliamono Salos"
+ },
+ "SV": {
+ "name": "Salvadoras"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marinas"
+ },
+ "ST": {
+ "name": "San TomÄ— ir PrinsipÄ—"
+ },
+ "SA": {
+ "name": "Saudo Arabija"
+ },
+ "SC": {
+ "name": "Seišeliai"
+ },
+ "BL": {
+ "name": "Sen Bartelemi"
+ },
+ "MF": {
+ "name": "Sen Martenas"
+ },
+ "PM": {
+ "name": "Sen Pjeras ir Mikelonas"
+ },
+ "SN": {
+ "name": "Senegalas"
+ },
+ "KN": {
+ "name": "Sent Kitsas ir Nevis"
+ },
+ "RS": {
+ "name": "Serbija"
+ },
+ "EA": {
+ "name": "Seuta ir Melila"
+ },
+ "SL": {
+ "name": "Siera LeonÄ—"
+ },
+ "SG": {
+ "name": "Singapūras"
+ },
+ "SX": {
+ "name": "Sint Martenas"
+ },
+ "SY": {
+ "name": "Sirija"
+ },
+ "SK": {
+ "name": "Slovakija"
+ },
+ "SI": {
+ "name": "SlovÄ—nija"
+ },
+ "SO": {
+ "name": "Somalis"
+ },
+ "SD": {
+ "name": "Sudanas"
+ },
+ "FI": {
+ "name": "Suomija"
+ },
+ "SR": {
+ "name": "Surinamas"
+ },
+ "SJ": {
+ "name": "Svalbardas ir Janas Majenas"
+ },
+ "SZ": {
+ "name": "Svazilandas"
+ },
+ "KP": {
+ "name": "Å iaurÄ—s KorÄ—ja"
+ },
+ "LK": {
+ "name": "Å ri Lanka"
+ },
+ "SH": {
+ "name": "Å v. Elenos Sala"
+ },
+ "SE": {
+ "name": "Å vedija"
+ },
+ "CH": {
+ "name": "Å veicarija"
+ },
+ "VC": {
+ "name": "Å ventasis Vincentas ir Grenadinai"
+ },
+ "LC": {
+ "name": "Å ventoji Liucija"
+ },
+ "TJ": {
+ "name": "Tadžikija"
+ },
+ "TH": {
+ "name": "Tailandas"
+ },
+ "TW": {
+ "name": "Taivanas"
+ },
+ "TZ": {
+ "name": "Tanzanija"
+ },
+ "TC": {
+ "name": "Terkso ir Kaikoso Salos"
+ },
+ "TG": {
+ "name": "Togas"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidadas ir Tobagas"
+ },
+ "TA": {
+ "name": "Tristanas da Kunja"
+ },
+ "TN": {
+ "name": "Tunisas"
+ },
+ "TR": {
+ "name": "Turkija"
+ },
+ "TM": {
+ "name": "TurkmÄ—nistanas"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraina"
+ },
+ "UY": {
+ "name": "Urugvajus"
+ },
+ "UZ": {
+ "name": "Uzbekistanas"
+ },
+ "EH": {
+ "name": "Vakarų Sachara"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikano Miesto ValstybÄ—"
+ },
+ "VE": {
+ "name": "Venesuela"
+ },
+ "HU": {
+ "name": "Vengrija"
+ },
+ "VN": {
+ "name": "Vietnamas"
+ },
+ "DE": {
+ "name": "Vokietija"
+ },
+ "WF": {
+ "name": "Volisas ir Futuna"
+ },
+ "ZM": {
+ "name": "Zambija"
+ },
+ "ZW": {
+ "name": "ZimbabvÄ—"
+ },
+ "CV": {
+ "name": "Žaliasis Kyšulys"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/lu.json b/library/intl/resources/country/lu.json
new file mode 100644
index 000000000..e01eb6f8a
--- /dev/null
+++ b/library/intl/resources/country/lu.json
@@ -0,0 +1,761 @@
+{
+ "ZA": {
+ "name": "Afrika ya Súdi"
+ },
+ "AF": {
+ "name": "Afuganisita"
+ },
+ "AZ": {
+ "name": "Ajelbayidja"
+ },
+ "SA": {
+ "name": "Alabu Nsawudi"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "DE": {
+ "name": "Alemanu"
+ },
+ "AR": {
+ "name": "Alijantine"
+ },
+ "DZ": {
+ "name": "Alijeri"
+ },
+ "AL": {
+ "name": "Alubani"
+ },
+ "AM": {
+ "name": "Ameni"
+ },
+ "US": {
+ "name": "Ameriki"
+ },
+ "AD": {
+ "name": "Andore"
+ },
+ "GB": {
+ "name": "Angeletele"
+ },
+ "AI": {
+ "name": "Angiye"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antiga ne Barbuda"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "HT": {
+ "name": "Ayiti"
+ },
+ "BS": {
+ "name": "Bahamase"
+ },
+ "BH": {
+ "name": "Bahrene"
+ },
+ "BB": {
+ "name": "Barebade"
+ },
+ "BE": {
+ "name": "Belejiki"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Bene"
+ },
+ "BD": {
+ "name": "Benguladeshi"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BG": {
+ "name": "Biligari"
+ },
+ "BN": {
+ "name": "Brineyi"
+ },
+ "BF": {
+ "name": "Bukinafaso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "BY": {
+ "name": "Byelorisi"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danemalaku"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "CF": {
+ "name": "Ditunga dya Afrika wa munkatshi"
+ },
+ "CZ": {
+ "name": "Ditunga dya Tsheka"
+ },
+ "DO": {
+ "name": "Ditunga wa Duminiku"
+ },
+ "CD": {
+ "name": "Ditunga wa Kongu"
+ },
+ "DJ": {
+ "name": "Djibuti"
+ },
+ "DM": {
+ "name": "Duminiku"
+ },
+ "EC": {
+ "name": "Ekwatele"
+ },
+ "ER": {
+ "name": "Elitele"
+ },
+ "EE": {
+ "name": "Esitoni"
+ },
+ "ET": {
+ "name": "Etshiopi"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FI": {
+ "name": "Filande"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "FJ": {
+ "name": "Fuji"
+ },
+ "GM": {
+ "name": "Gambi"
+ },
+ "GQ": {
+ "name": "Gine Ekwatele"
+ },
+ "GF": {
+ "name": "Giyane wa Nfalanse"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "IN": {
+ "name": "Inde"
+ },
+ "ID": {
+ "name": "Indonezi"
+ },
+ "IR": {
+ "name": "Ira"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "IE": {
+ "name": "Irelande"
+ },
+ "UY": {
+ "name": "Irigwei"
+ },
+ "IS": {
+ "name": "Isilande"
+ },
+ "IL": {
+ "name": "Isirayele"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IT": {
+ "name": "Itali"
+ },
+ "JM": {
+ "name": "Jamaiki"
+ },
+ "JP": {
+ "name": "Japu"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibeletale"
+ },
+ "JO": {
+ "name": "Jodani"
+ },
+ "GE": {
+ "name": "Joriji"
+ },
+ "NC": {
+ "name": "Kaledoni wa mumu"
+ },
+ "KH": {
+ "name": "Kambodza"
+ },
+ "CM": {
+ "name": "Kamerune"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katari"
+ },
+ "KZ": {
+ "name": "Kazakusita"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KG": {
+ "name": "Kigizisita"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CO": {
+ "name": "Kolombi"
+ },
+ "KM": {
+ "name": "Komoru"
+ },
+ "CG": {
+ "name": "Kongu"
+ },
+ "KP": {
+ "name": "Kore wa muulu"
+ },
+ "KR": {
+ "name": "Kore wa mwinshi"
+ },
+ "CR": {
+ "name": "Kositarika"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CI": {
+ "name": "Kotedivuale"
+ },
+ "KW": {
+ "name": "Koweti"
+ },
+ "HR": {
+ "name": "Krowasi"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "LA": {
+ "name": "Lawosi"
+ },
+ "AE": {
+ "name": "Lemila alabu"
+ },
+ "RE": {
+ "name": "Lenyo"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letoni"
+ },
+ "LB": {
+ "name": "Liba"
+ },
+ "LR": {
+ "name": "Liberiya"
+ },
+ "LY": {
+ "name": "Libi"
+ },
+ "LU": {
+ "name": "Likisambulu"
+ },
+ "LI": {
+ "name": "Lishuteni"
+ },
+ "LT": {
+ "name": "Litwani"
+ },
+ "CV": {
+ "name": "Lutanda lua Kapevele"
+ },
+ "KY": {
+ "name": "Lutanda lua Kayima"
+ },
+ "CK": {
+ "name": "Lutanda lua KookÉ›"
+ },
+ "FK": {
+ "name": "Lutanda lua Maluni"
+ },
+ "MP": {
+ "name": "Lutanda lua Mariane wa muulu"
+ },
+ "MH": {
+ "name": "Lutanda lua Marishale"
+ },
+ "NF": {
+ "name": "Lutanda lua Norfok"
+ },
+ "SB": {
+ "name": "Lutanda lua Solomu"
+ },
+ "TC": {
+ "name": "Lutanda lua Tuluki ne Kaiko"
+ },
+ "VI": {
+ "name": "Lutanda lua Vierzi wa Ameriki"
+ },
+ "VG": {
+ "name": "Lutanda lua Vierzi wa Angeletele"
+ },
+ "IO": {
+ "name": "Lutanda lwa Angeletele ku mbu wa Indiya"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madagasikari"
+ },
+ "MV": {
+ "name": "Madive"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malezi"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malite"
+ },
+ "MA": {
+ "name": "Maroke"
+ },
+ "MQ": {
+ "name": "Martiniki"
+ },
+ "MK": {
+ "name": "Masedwane"
+ },
+ "YT": {
+ "name": "Mayote"
+ },
+ "BO": {
+ "name": "Mbolivi"
+ },
+ "BA": {
+ "name": "Mbosini ne Hezegovine"
+ },
+ "BW": {
+ "name": "Mbotswana"
+ },
+ "MX": {
+ "name": "Meksike"
+ },
+ "FM": {
+ "name": "Mikronezi"
+ },
+ "BR": {
+ "name": "Mnulezile"
+ },
+ "MD": {
+ "name": "Molidavi"
+ },
+ "MC": {
+ "name": "Monaku"
+ },
+ "MN": {
+ "name": "Mongoli"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MU": {
+ "name": "Morise"
+ },
+ "MR": {
+ "name": "Moritani"
+ },
+ "MZ": {
+ "name": "Mozambiki"
+ },
+ "PL": {
+ "name": "Mpoloni"
+ },
+ "PR": {
+ "name": "Mpotoriku"
+ },
+ "PT": {
+ "name": "Mputulugeshi"
+ },
+ "MS": {
+ "name": "Musera"
+ },
+ "EG": {
+ "name": "Mushidi"
+ },
+ "MM": {
+ "name": "Myamare"
+ },
+ "NA": {
+ "name": "Namibi"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepálɛ"
+ },
+ "FR": {
+ "name": "Nfalanse"
+ },
+ "PH": {
+ "name": "Nfilipi"
+ },
+ "GA": {
+ "name": "Ngabu"
+ },
+ "GH": {
+ "name": "Ngana"
+ },
+ "GR": {
+ "name": "Ngeleka"
+ },
+ "GD": {
+ "name": "Ngelenade"
+ },
+ "GN": {
+ "name": "Ngine"
+ },
+ "GW": {
+ "name": "Nginebisau"
+ },
+ "GY": {
+ "name": "Ngiyane"
+ },
+ "GL": {
+ "name": "Ngowelande"
+ },
+ "GP": {
+ "name": "Ngwadelupe"
+ },
+ "GU": {
+ "name": "Ngwame"
+ },
+ "GT": {
+ "name": "Ngwatemala"
+ },
+ "NE": {
+ "name": "Nijere"
+ },
+ "NG": {
+ "name": "Nijerya"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NO": {
+ "name": "Noriveje"
+ },
+ "ES": {
+ "name": "Nsipani"
+ },
+ "VA": {
+ "name": "Nvatika"
+ },
+ "NU": {
+ "name": "Nyue"
+ },
+ "NL": {
+ "name": "OlandÉ›"
+ },
+ "OM": {
+ "name": "Omane"
+ },
+ "HN": {
+ "name": "Ondurase"
+ },
+ "HU": {
+ "name": "Ongili"
+ },
+ "AU": {
+ "name": "Ositali"
+ },
+ "AT": {
+ "name": "Otilisi"
+ },
+ "PK": {
+ "name": "Pakisita"
+ },
+ "PY": {
+ "name": "Palagwei"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palesine"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papwazi wa NginÉ› wa mumu"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pikairni"
+ },
+ "PF": {
+ "name": "Polinezi wa Nfalanse"
+ },
+ "RU": {
+ "name": "Risi"
+ },
+ "RO": {
+ "name": "Romani"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa wa Ameriki"
+ },
+ "SH": {
+ "name": "Santu eleni"
+ },
+ "KN": {
+ "name": "Santu krístofe ne Neves"
+ },
+ "LC": {
+ "name": "Santu lisi"
+ },
+ "SM": {
+ "name": "Santu Marine"
+ },
+ "PM": {
+ "name": "Santu pététo ne Mikelu"
+ },
+ "VC": {
+ "name": "Santu vesa ne Ngelenadine"
+ },
+ "ST": {
+ "name": "Sao Tome ne PresipÉ›"
+ },
+ "SV": {
+ "name": "Savadore"
+ },
+ "SN": {
+ "name": "Senegale"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seshele"
+ },
+ "CL": {
+ "name": "Shili"
+ },
+ "CN": {
+ "name": "Shine"
+ },
+ "CY": {
+ "name": "Shipele"
+ },
+ "SL": {
+ "name": "Siera Leone"
+ },
+ "SK": {
+ "name": "Silovaki"
+ },
+ "SI": {
+ "name": "Siloveni"
+ },
+ "SG": {
+ "name": "Singapure"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siri"
+ },
+ "LK": {
+ "name": "Sirilanka"
+ },
+ "SO": {
+ "name": "Somali"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Suda"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SE": {
+ "name": "Suwedi"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swazilandi"
+ },
+ "CH": {
+ "name": "Swise"
+ },
+ "TW": {
+ "name": "Taiwani"
+ },
+ "TZ": {
+ "name": "Tanzani"
+ },
+ "TH": {
+ "name": "Tayilanda"
+ },
+ "TJ": {
+ "name": "Tazikisita"
+ },
+ "TL": {
+ "name": "Timoru wa diboku"
+ },
+ "TT": {
+ "name": "Tinidade ne Tobago"
+ },
+ "TN": {
+ "name": "Tinizi"
+ },
+ "TG": {
+ "name": "Togu"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TD": {
+ "name": "Tshadi"
+ },
+ "TM": {
+ "name": "Tukemenisita"
+ },
+ "TR": {
+ "name": "Tuluki"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukreni"
+ },
+ "UZ": {
+ "name": "Uzibekisita"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Viyetiname"
+ },
+ "WF": {
+ "name": "Walise ne Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemenu"
+ },
+ "ZM": {
+ "name": "Zambi"
+ },
+ "NZ": {
+ "name": "Zelanda wa mumu"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/luo.json b/library/intl/resources/country/luo.json
new file mode 100644
index 000000000..10ab8cebc
--- /dev/null
+++ b/library/intl/resources/country/luo.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua gi Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia gi Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "FK": {
+ "name": "Chuia mar Falkland"
+ },
+ "MH": {
+ "name": "Chuia mar Marshall"
+ },
+ "NF": {
+ "name": "Chuia mar Norfolk"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "CD": {
+ "name": "Democratic Republic of the Congo"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "TL": {
+ "name": "East Timor"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KP": {
+ "name": "Korea Masawa"
+ },
+ "KR": {
+ "name": "Korea Milambo"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian West Bank gi Gaza"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts gi Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "PM": {
+ "name": "Saint Pierre gi Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vincent gi Grenadines"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé gi Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad gi Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks gi Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "US": {
+ "name": "USA"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican State"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis gi Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/luy.json b/library/intl/resources/country/luy.json
new file mode 100644
index 000000000..9b0be889b
--- /dev/null
+++ b/library/intl/resources/country/luy.json
@@ -0,0 +1,761 @@
+{
+ "ZA": {
+ "name": "Afrika Kusini"
+ },
+ "AF": {
+ "name": "Afuganistani"
+ },
+ "IS": {
+ "name": "Aislandi"
+ },
+ "AR": {
+ "name": "Ajentina"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljeria"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua na Barbuda"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "IE": {
+ "name": "Ayalandi"
+ },
+ "AZ": {
+ "name": "Azabajani"
+ },
+ "BB": {
+ "name": "Babadosi"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BH": {
+ "name": "Bahareni"
+ },
+ "BD": {
+ "name": "Bangladeshi"
+ },
+ "BY": {
+ "name": "Belarusi"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia na Hezegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazili"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BF": {
+ "name": "Bukinafaso"
+ },
+ "MG": {
+ "name": "Bukini"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denmaki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekwado"
+ },
+ "SV": {
+ "name": "Elsavado"
+ },
+ "IO": {
+ "name": "Eneo la Uingereza katika Bahari Hindi"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "AE": {
+ "name": "Falme za Kiarabu"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipino"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Ginebisau"
+ },
+ "GQ": {
+ "name": "Ginekweta"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grinlandi"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GP": {
+ "name": "Gwadelupe"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GF": {
+ "name": "Gwiyana ya Ufaransa"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ES": {
+ "name": "Hispania"
+ },
+ "HN": {
+ "name": "Hondurasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungaria"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israeli"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "CF": {
+ "name": "Jamhuri ya Afrika ya Kati"
+ },
+ "CZ": {
+ "name": "Jamhuri ya Cheki"
+ },
+ "DO": {
+ "name": "Jamhuri ya Dominika"
+ },
+ "CD": {
+ "name": "Jamhuri ya Kidemokrasia ya Kongo"
+ },
+ "JP": {
+ "name": "Japani"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibralta"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "GE": {
+ "name": "Jojia"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kameruni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katari"
+ },
+ "KZ": {
+ "name": "Kazakistani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CV": {
+ "name": "Kepuvede"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizistani"
+ },
+ "NF": {
+ "name": "Kisiwa cha Norfok"
+ },
+ "CI": {
+ "name": "Kodivaa"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komoro"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "HR": {
+ "name": "Korasia"
+ },
+ "KP": {
+ "name": "Korea Kaskazini"
+ },
+ "KR": {
+ "name": "Korea Kusini"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CY": {
+ "name": "Kuprosi"
+ },
+ "KW": {
+ "name": "Kuwaiti"
+ },
+ "LA": {
+ "name": "Laosi"
+ },
+ "LU": {
+ "name": "Lasembagi"
+ },
+ "LV": {
+ "name": "Lativia"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Lishenteni"
+ },
+ "LT": {
+ "name": "Litwania"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malesia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "US": {
+ "name": "Marekani"
+ },
+ "MQ": {
+ "name": "Martiniki"
+ },
+ "MK": {
+ "name": "Masedonia"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "FM": {
+ "name": "Mikronesia"
+ },
+ "EG": {
+ "name": "Misri"
+ },
+ "MV": {
+ "name": "Modivu"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrati"
+ },
+ "MU": {
+ "name": "Morisi"
+ },
+ "MR": {
+ "name": "Moritania"
+ },
+ "MA": {
+ "name": "Moroko"
+ },
+ "MZ": {
+ "name": "Msumbiji"
+ },
+ "MM": {
+ "name": "Myama"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "NE": {
+ "name": "Nijeri"
+ },
+ "NG": {
+ "name": "Nijeria"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norwe"
+ },
+ "NC": {
+ "name": "Nyukaledonia"
+ },
+ "NZ": {
+ "name": "Nyuzilandi"
+ },
+ "OM": {
+ "name": "Omani"
+ },
+ "PK": {
+ "name": "Pakistani"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua"
+ },
+ "PY": {
+ "name": "Paragwai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkairni"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PF": {
+ "name": "Polinesia ya Ufaransa"
+ },
+ "PR": {
+ "name": "Pwetoriko"
+ },
+ "RE": {
+ "name": "Riyunioni"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SM": {
+ "name": "Samarino"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa lya Marekani"
+ },
+ "SH": {
+ "name": "Santahelena"
+ },
+ "KN": {
+ "name": "Santakitzi na Nevis"
+ },
+ "LC": {
+ "name": "Santalusia"
+ },
+ "PM": {
+ "name": "Santapieri na Mikeloni"
+ },
+ "VC": {
+ "name": "Santavisenti na Grenadini"
+ },
+ "ST": {
+ "name": "Sao Tome na Principe"
+ },
+ "SA": {
+ "name": "Saudi"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Shelisheli"
+ },
+ "SL": {
+ "name": "Siera Leoni"
+ },
+ "SG": {
+ "name": "Singapoo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "LK": {
+ "name": "Sirilanka"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SR": {
+ "name": "Surinamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandi"
+ },
+ "TW": {
+ "name": "Taiwani"
+ },
+ "TJ": {
+ "name": "Tajikistani"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TL": {
+ "name": "Timori ya Mashariki"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad na Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turukimenistani"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "IR": {
+ "name": "Uajemi"
+ },
+ "BE": {
+ "name": "Ubelgiji"
+ },
+ "FR": {
+ "name": "Ufaransa"
+ },
+ "FI": {
+ "name": "Ufini"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "GR": {
+ "name": "Ugiriki"
+ },
+ "ET": {
+ "name": "Uhabeshi"
+ },
+ "NL": {
+ "name": "Uholanzi"
+ },
+ "GB": {
+ "name": "Uingereza"
+ },
+ "DE": {
+ "name": "Ujerumani"
+ },
+ "PS": {
+ "name": "Ukingo wa Magharibi na Ukanda wa Gaza wa Palestina"
+ },
+ "UA": {
+ "name": "Ukraini"
+ },
+ "PT": {
+ "name": "Ureno"
+ },
+ "UY": {
+ "name": "Urugwai"
+ },
+ "RU": {
+ "name": "Urusi"
+ },
+ "SZ": {
+ "name": "Uswazi"
+ },
+ "SE": {
+ "name": "Uswidi"
+ },
+ "CH": {
+ "name": "Uswisi"
+ },
+ "TR": {
+ "name": "Uturuki"
+ },
+ "UZ": {
+ "name": "Uzibekistani"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietinamu"
+ },
+ "CK": {
+ "name": "Visiwa vya Cook"
+ },
+ "FK": {
+ "name": "Visiwa vya Falkland"
+ },
+ "KY": {
+ "name": "Visiwa vya Kayman"
+ },
+ "MP": {
+ "name": "Visiwa vya Mariana vya Kaskazini"
+ },
+ "MH": {
+ "name": "Visiwa vya Marshal"
+ },
+ "SB": {
+ "name": "Visiwa vya Solomon"
+ },
+ "TC": {
+ "name": "Visiwa vya Turki na Kaiko"
+ },
+ "VI": {
+ "name": "Visiwa vya Virgin vya Marekani"
+ },
+ "VG": {
+ "name": "Visiwa vya Virgin vya Uingereza"
+ },
+ "WF": {
+ "name": "Walis na Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "JO": {
+ "name": "Yordani"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/lv.json b/library/intl/resources/country/lv.json
new file mode 100644
index 000000000..ff93d7605
--- /dev/null
+++ b/library/intl/resources/country/lv.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "AfganistÄna"
+ },
+ "AL": {
+ "name": "AlbÄnija"
+ },
+ "DZ": {
+ "name": "Alžīrija"
+ },
+ "AS": {
+ "name": "AmerikÄņu Samoa"
+ },
+ "US": {
+ "name": "Amerikas SavienotÄs Valstis"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AI": {
+ "name": "Angilja"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AQ": {
+ "name": "Antarktika"
+ },
+ "AG": {
+ "name": "Antigva un Barbuda"
+ },
+ "AE": {
+ "name": "Apvienotie ArÄbu EmirÄti"
+ },
+ "AR": {
+ "name": "Argentīna"
+ },
+ "AM": {
+ "name": "Armēnija"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "UM": {
+ "name": "ASV Aizjūras salas"
+ },
+ "VI": {
+ "name": "ASV Virdžīnas"
+ },
+ "AU": {
+ "name": "AustrÄlija"
+ },
+ "AT": {
+ "name": "Austrija"
+ },
+ "TL": {
+ "name": "Austrumtimora"
+ },
+ "AZ": {
+ "name": "AzerbaidžÄna"
+ },
+ "BS": {
+ "name": "Bahamu salas"
+ },
+ "BH": {
+ "name": "Bahreina"
+ },
+ "BY": {
+ "name": "Baltkrievija"
+ },
+ "BD": {
+ "name": "Bangladeša"
+ },
+ "BB": {
+ "name": "Barbadosa"
+ },
+ "BZ": {
+ "name": "Beliza"
+ },
+ "BE": {
+ "name": "Beļģija"
+ },
+ "BJ": {
+ "name": "Benina"
+ },
+ "BM": {
+ "name": "Bermudu salas"
+ },
+ "BO": {
+ "name": "Bolīvija"
+ },
+ "BA": {
+ "name": "Bosnija un Hercegovina"
+ },
+ "BW": {
+ "name": "BotsvÄna"
+ },
+ "BR": {
+ "name": "Brazīlija"
+ },
+ "VG": {
+ "name": "Britu Virdžīnas"
+ },
+ "BN": {
+ "name": "Bruneja"
+ },
+ "BG": {
+ "name": "BulgÄrija"
+ },
+ "BF": {
+ "name": "Burkinafaso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "ButÄna"
+ },
+ "CF": {
+ "name": "CentrÄlÄfrikas Republika"
+ },
+ "TD": {
+ "name": "ÄŒada"
+ },
+ "CZ": {
+ "name": "ÄŒehija"
+ },
+ "CL": {
+ "name": "Čīle"
+ },
+ "DK": {
+ "name": "DÄnija"
+ },
+ "AC": {
+ "name": "Debesbraukšanas sala"
+ },
+ "ZA": {
+ "name": "DienvidÄfrikas Republika"
+ },
+ "GS": {
+ "name": "Dienviddžordžija un DienvidsendviÄu salas"
+ },
+ "KR": {
+ "name": "Dienvidkoreja"
+ },
+ "SS": {
+ "name": "DienvidsudÄna"
+ },
+ "DG": {
+ "name": "Djego Garsijas atols"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "DO": {
+ "name": "DominikÄna"
+ },
+ "JE": {
+ "name": "Džērsija"
+ },
+ "DJ": {
+ "name": "Džibutija"
+ },
+ "EG": {
+ "name": "Ä’Ä£ipte"
+ },
+ "EC": {
+ "name": "Ekvadora"
+ },
+ "GQ": {
+ "name": "EkvatoriÄlÄ Gvineja"
+ },
+ "ER": {
+ "name": "Eritreja"
+ },
+ "ET": {
+ "name": "Etiopija"
+ },
+ "FO": {
+ "name": "FÄ“ru Salas"
+ },
+ "FJ": {
+ "name": "Fidži"
+ },
+ "PH": {
+ "name": "Filipīnas"
+ },
+ "FK": {
+ "name": "Folklenda salas"
+ },
+ "FR": {
+ "name": "Francija"
+ },
+ "TF": {
+ "name": "Francijas Dienvidjūru Zemes"
+ },
+ "GF": {
+ "name": "FranÄu GviÄna"
+ },
+ "PF": {
+ "name": "FranÄu PolinÄ“zija"
+ },
+ "GA": {
+ "name": "Gabona"
+ },
+ "GY": {
+ "name": "GajÄna"
+ },
+ "GM": {
+ "name": "Gambija"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GG": {
+ "name": "GÄ“rnsija"
+ },
+ "GI": {
+ "name": "GibraltÄrs"
+ },
+ "GD": {
+ "name": "GrenÄda"
+ },
+ "GL": {
+ "name": "Grenlande"
+ },
+ "GR": {
+ "name": "GrieÄ·ija"
+ },
+ "GE": {
+ "name": "Gruzija"
+ },
+ "GU": {
+ "name": "Guama"
+ },
+ "GP": {
+ "name": "Gvadelupa"
+ },
+ "GT": {
+ "name": "Gvatemala"
+ },
+ "GN": {
+ "name": "Gvineja"
+ },
+ "GW": {
+ "name": "Gvineja-Bisava"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Hondurasa"
+ },
+ "HR": {
+ "name": "HorvÄtija"
+ },
+ "EE": {
+ "name": "Igaunija"
+ },
+ "IN": {
+ "name": "Indija"
+ },
+ "IO": {
+ "name": "Indijas okeÄna Britu teritorija"
+ },
+ "ID": {
+ "name": "Indonēzija"
+ },
+ "IQ": {
+ "name": "IrÄka"
+ },
+ "IR": {
+ "name": "IrÄna"
+ },
+ "IE": {
+ "name": "Īrija"
+ },
+ "IS": {
+ "name": "Īslande"
+ },
+ "IT": {
+ "name": "ItÄlija"
+ },
+ "IL": {
+ "name": "Izraēla"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "JP": {
+ "name": "JapÄna"
+ },
+ "NC": {
+ "name": "Jaunkaledonija"
+ },
+ "NZ": {
+ "name": "Jaunzēlande"
+ },
+ "YE": {
+ "name": "Jemena"
+ },
+ "JO": {
+ "name": "JordÄnija"
+ },
+ "CV": {
+ "name": "Kaboverde"
+ },
+ "KY": {
+ "name": "Kaimanu salas"
+ },
+ "KH": {
+ "name": "Kambodža"
+ },
+ "CM": {
+ "name": "Kamerūna"
+ },
+ "CA": {
+ "name": "KanÄda"
+ },
+ "IC": {
+ "name": "KanÄriju salas"
+ },
+ "QA": {
+ "name": "Katara"
+ },
+ "KZ": {
+ "name": "KazahstÄna"
+ },
+ "KE": {
+ "name": "Kenija"
+ },
+ "CY": {
+ "name": "Kipra"
+ },
+ "CW": {
+ "name": "Kirasao"
+ },
+ "KG": {
+ "name": "KirgizstÄna"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CC": {
+ "name": "Kokosu jeb KÄ«linga salas"
+ },
+ "CO": {
+ "name": "Kolumbija"
+ },
+ "KM": {
+ "name": "Komoru salas"
+ },
+ "CG": {
+ "name": "Kongo - Brazavila"
+ },
+ "CD": {
+ "name": "Kongo-Kinšasa"
+ },
+ "XK": {
+ "name": "Kosova"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "CI": {
+ "name": "KotdivuÄra"
+ },
+ "RU": {
+ "name": "Krievija"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CK": {
+ "name": "Kuka salas"
+ },
+ "KW": {
+ "name": "Kuveita"
+ },
+ "CN": {
+ "name": "Ķīna"
+ },
+ "HK": {
+ "name": "Ķīnas Ä«paÅ¡Äs pÄrvaldes apgabals Honkonga"
+ },
+ "MO": {
+ "name": "Ķīnas Ä«paÅ¡Äs pÄrvaldes apgabals Makao"
+ },
+ "LA": {
+ "name": "Laosa"
+ },
+ "LV": {
+ "name": "Latvija"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LB": {
+ "name": "LibÄna"
+ },
+ "LR": {
+ "name": "Libērija"
+ },
+ "LY": {
+ "name": "LÄ«bija"
+ },
+ "GB": {
+ "name": "LielbritÄnija"
+ },
+ "LT": {
+ "name": "Lietuva"
+ },
+ "LI": {
+ "name": "Lihtenšteina"
+ },
+ "LU": {
+ "name": "Luksemburga"
+ },
+ "MG": {
+ "name": "Madagaskara"
+ },
+ "YT": {
+ "name": "Majota"
+ },
+ "MK": {
+ "name": "MaÄ·edonija"
+ },
+ "MY": {
+ "name": "Malaizija"
+ },
+ "MW": {
+ "name": "MalÄvija"
+ },
+ "MV": {
+ "name": "Maldīvija"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Maroka"
+ },
+ "MH": {
+ "name": "MÄrÅ¡ala salas"
+ },
+ "MQ": {
+ "name": "Martinika"
+ },
+ "MU": {
+ "name": "Maurīcija"
+ },
+ "MR": {
+ "name": "MauritÄnija"
+ },
+ "MX": {
+ "name": "Meksika"
+ },
+ "ME": {
+ "name": "Melnkalne"
+ },
+ "IM": {
+ "name": "Mena"
+ },
+ "FM": {
+ "name": "Mikronēzija"
+ },
+ "MM": {
+ "name": "Mjanma (Birma)"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolija"
+ },
+ "MS": {
+ "name": "Montserrata"
+ },
+ "MZ": {
+ "name": "Mozambika"
+ },
+ "NA": {
+ "name": "Namībija"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "NepÄla"
+ },
+ "NL": {
+ "name": "NÄ«derlande"
+ },
+ "BQ": {
+ "name": "Nīderlandes Karību salas"
+ },
+ "NE": {
+ "name": "Nigēra"
+ },
+ "NG": {
+ "name": "Nigērija"
+ },
+ "NI": {
+ "name": "Nikaragva"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolkas sala"
+ },
+ "NO": {
+ "name": "Norvēģija"
+ },
+ "AX": {
+ "name": "Olandes salas"
+ },
+ "OM": {
+ "name": "OmÄna"
+ },
+ "PK": {
+ "name": "PakistÄna"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestīna"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua-Jaungvineja"
+ },
+ "PY": {
+ "name": "Paragvaja"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkērna"
+ },
+ "PL": {
+ "name": "Polija"
+ },
+ "PT": {
+ "name": "PortugÄle"
+ },
+ "PR": {
+ "name": "Puertoriko"
+ },
+ "RE": {
+ "name": "Reinjona"
+ },
+ "EH": {
+ "name": "RietumsahÄra"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "RumÄnija"
+ },
+ "SV": {
+ "name": "Salvadora"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "Sanmarīno"
+ },
+ "ST": {
+ "name": "Santome un Prinsipi"
+ },
+ "SA": {
+ "name": "SaÅ«da ArÄbija"
+ },
+ "BL": {
+ "name": "Senbartelmī"
+ },
+ "SN": {
+ "name": "SenegÄla"
+ },
+ "MF": {
+ "name": "Senmartēna"
+ },
+ "PM": {
+ "name": "Senpjēra un Mikelona"
+ },
+ "KN": {
+ "name": "Sentkitsa un Nevisa"
+ },
+ "LC": {
+ "name": "Sentlūsija"
+ },
+ "VC": {
+ "name": "Sentvinsenta un Grenadīnas"
+ },
+ "RS": {
+ "name": "Serbija"
+ },
+ "EA": {
+ "name": "Seūta un Melilja"
+ },
+ "SG": {
+ "name": "Singapūra"
+ },
+ "SX": {
+ "name": "SintmÄrtena"
+ },
+ "SY": {
+ "name": "SÄ«rija"
+ },
+ "SL": {
+ "name": "Sjerraleone"
+ },
+ "SK": {
+ "name": "SlovÄkija"
+ },
+ "SI": {
+ "name": "Slovēnija"
+ },
+ "SO": {
+ "name": "SomÄlija"
+ },
+ "FI": {
+ "name": "Somija"
+ },
+ "ES": {
+ "name": "SpÄnija"
+ },
+ "SD": {
+ "name": "SudÄna"
+ },
+ "SR": {
+ "name": "Surinama"
+ },
+ "SH": {
+ "name": "Sv.Helēnas sala"
+ },
+ "SJ": {
+ "name": "SvalbÄra un Jana Majena sala"
+ },
+ "SZ": {
+ "name": "Svazilenda"
+ },
+ "SC": {
+ "name": "Šeišelu salas"
+ },
+ "LK": {
+ "name": "Å rilanka"
+ },
+ "CH": {
+ "name": "Å veice"
+ },
+ "TJ": {
+ "name": "TadžikistÄna"
+ },
+ "TW": {
+ "name": "TaivÄna"
+ },
+ "TH": {
+ "name": "Taizeme"
+ },
+ "TZ": {
+ "name": "TanzÄnija"
+ },
+ "TC": {
+ "name": "TÄ“rksas un Kaikosas salas"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "TrinidÄda un TobÄgo"
+ },
+ "TA": {
+ "name": "Tristana da Kuņas salas"
+ },
+ "TN": {
+ "name": "Tunisija"
+ },
+ "TR": {
+ "name": "Turcija"
+ },
+ "TM": {
+ "name": "TurkmenistÄna"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraina"
+ },
+ "HU": {
+ "name": "UngÄrija"
+ },
+ "UY": {
+ "name": "Urugvaja"
+ },
+ "UZ": {
+ "name": "UzbekistÄna"
+ },
+ "DE": {
+ "name": "VÄcija"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "VatikÄns"
+ },
+ "VE": {
+ "name": "Venecuēla"
+ },
+ "VN": {
+ "name": "Vjetnama"
+ },
+ "WF": {
+ "name": "Volisa un Futuna"
+ },
+ "SB": {
+ "name": "ZÄlamana salas"
+ },
+ "ZM": {
+ "name": "Zambija"
+ },
+ "KP": {
+ "name": "Ziemeļkoreja"
+ },
+ "MP": {
+ "name": "Ziemeļu Marianas salas"
+ },
+ "CX": {
+ "name": "Ziemsvētku sala"
+ },
+ "ZW": {
+ "name": "Zimbabve"
+ },
+ "SE": {
+ "name": "Zviedrija"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/mas.json b/library/intl/resources/country/mas.json
new file mode 100644
index 000000000..5ad80c6ba
--- /dev/null
+++ b/library/intl/resources/country/mas.json
@@ -0,0 +1,761 @@
+{
+ "ZA": {
+ "name": "Afrika Kusini"
+ },
+ "AF": {
+ "name": "Afuganistani"
+ },
+ "IS": {
+ "name": "Aislandi"
+ },
+ "AR": {
+ "name": "Ajentina"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljeria"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua na Barbuda"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "IE": {
+ "name": "Ayalandi"
+ },
+ "AZ": {
+ "name": "Azabajani"
+ },
+ "BB": {
+ "name": "Babadosi"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BH": {
+ "name": "Bahareni"
+ },
+ "BD": {
+ "name": "Bangladeshi"
+ },
+ "BY": {
+ "name": "Belarusi"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia na Hezegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazili"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BF": {
+ "name": "Bukinafaso"
+ },
+ "MG": {
+ "name": "Bukini"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denmaki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekwado"
+ },
+ "SV": {
+ "name": "Elsavado"
+ },
+ "IO": {
+ "name": "Eneo la Uingereza katika Bahari Hindi"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "AE": {
+ "name": "Falme za Kiarabu"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipino"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Ginebisau"
+ },
+ "GQ": {
+ "name": "Ginekweta"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grinlandi"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GP": {
+ "name": "Gwadelupe"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GF": {
+ "name": "Gwiyana ya Ufaransa"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ES": {
+ "name": "Hispania"
+ },
+ "HN": {
+ "name": "Hondurasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungaria"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israeli"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "CF": {
+ "name": "Jamhuri ya Afrika ya Kati"
+ },
+ "CZ": {
+ "name": "Jamhuri ya Cheki"
+ },
+ "DO": {
+ "name": "Jamhuri ya Dominika"
+ },
+ "CD": {
+ "name": "Jamhuri ya Kidemokrasia ya Kongo"
+ },
+ "JP": {
+ "name": "Japani"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibralta"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "GE": {
+ "name": "Jojia"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kameruni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katari"
+ },
+ "KZ": {
+ "name": "Kazakistani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CV": {
+ "name": "Kepuvede"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizistani"
+ },
+ "NF": {
+ "name": "Kisiwa cha Norfok"
+ },
+ "CI": {
+ "name": "Kodivaa"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komoro"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "HR": {
+ "name": "Korasia"
+ },
+ "KP": {
+ "name": "Korea Kaskazini"
+ },
+ "KR": {
+ "name": "Korea Kusini"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CY": {
+ "name": "Kuprosi"
+ },
+ "KW": {
+ "name": "Kuwaiti"
+ },
+ "LA": {
+ "name": "Laosi"
+ },
+ "LU": {
+ "name": "Lasembagi"
+ },
+ "LV": {
+ "name": "Lativia"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Lishenteni"
+ },
+ "LT": {
+ "name": "Litwania"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malesia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "US": {
+ "name": "Marekani"
+ },
+ "MQ": {
+ "name": "Martiniki"
+ },
+ "MK": {
+ "name": "Masedonia"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "FM": {
+ "name": "Mikronesia"
+ },
+ "EG": {
+ "name": "Misri"
+ },
+ "MV": {
+ "name": "Modivu"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrati"
+ },
+ "MU": {
+ "name": "Morisi"
+ },
+ "MR": {
+ "name": "Moritania"
+ },
+ "MA": {
+ "name": "Moroko"
+ },
+ "MZ": {
+ "name": "Msumbiji"
+ },
+ "MM": {
+ "name": "Myama"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "NE": {
+ "name": "Nijeri"
+ },
+ "NG": {
+ "name": "Nijeria"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norwe"
+ },
+ "NC": {
+ "name": "Nyukaledonia"
+ },
+ "NZ": {
+ "name": "Nyuzilandi"
+ },
+ "OM": {
+ "name": "Omani"
+ },
+ "PK": {
+ "name": "Pakistani"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua"
+ },
+ "PY": {
+ "name": "Paragwai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkairni"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PF": {
+ "name": "Polinesia ya Ufaransa"
+ },
+ "PR": {
+ "name": "Pwetoriko"
+ },
+ "RE": {
+ "name": "Riyunioni"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SM": {
+ "name": "Samarino"
+ },
+ "ZM": {
+ "name": "Sambia"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa ya Marekani"
+ },
+ "SH": {
+ "name": "Santahelena"
+ },
+ "KN": {
+ "name": "Santakitzi na Nevis"
+ },
+ "LC": {
+ "name": "Santalusia"
+ },
+ "PM": {
+ "name": "Santapieri na Mikeloni"
+ },
+ "VC": {
+ "name": "Santavisenti na Grenadini"
+ },
+ "ST": {
+ "name": "Sao Tome na Principe"
+ },
+ "SA": {
+ "name": "Saudi"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Shelisheli"
+ },
+ "SL": {
+ "name": "Siera Leoni"
+ },
+ "ZW": {
+ "name": "Simbabwe"
+ },
+ "SG": {
+ "name": "Singapoo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "LK": {
+ "name": "Sirilanka"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SR": {
+ "name": "Surinamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandi"
+ },
+ "TW": {
+ "name": "Taiwani"
+ },
+ "TJ": {
+ "name": "Tajikistani"
+ },
+ "TZ": {
+ "name": "Tansania"
+ },
+ "TL": {
+ "name": "Timori ya Mashariki"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad na Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turukimenistani"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "IR": {
+ "name": "Uajemi"
+ },
+ "BE": {
+ "name": "Ubelgiji"
+ },
+ "FR": {
+ "name": "Ufaransa"
+ },
+ "FI": {
+ "name": "Ufini"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "GR": {
+ "name": "Ugiriki"
+ },
+ "ET": {
+ "name": "Uhabeshi"
+ },
+ "NL": {
+ "name": "Uholanzi"
+ },
+ "GB": {
+ "name": "Uingereza"
+ },
+ "DE": {
+ "name": "Ujerumani"
+ },
+ "PS": {
+ "name": "Ukingo wa Magharibi na Ukanda wa Gaza wa Palestina"
+ },
+ "UA": {
+ "name": "Ukraini"
+ },
+ "PT": {
+ "name": "Ureno"
+ },
+ "UY": {
+ "name": "Urugwai"
+ },
+ "RU": {
+ "name": "Urusi"
+ },
+ "SZ": {
+ "name": "Uswazi"
+ },
+ "SE": {
+ "name": "Uswidi"
+ },
+ "CH": {
+ "name": "Uswisi"
+ },
+ "TR": {
+ "name": "Uturuki"
+ },
+ "UZ": {
+ "name": "Uzibekistani"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietinamu"
+ },
+ "CK": {
+ "name": "Visiwa vya Cook"
+ },
+ "FK": {
+ "name": "Visiwa vya Falkland"
+ },
+ "KY": {
+ "name": "Visiwa vya Kayman"
+ },
+ "MP": {
+ "name": "Visiwa vya Mariana vya Kaskazini"
+ },
+ "MH": {
+ "name": "Visiwa vya Marshal"
+ },
+ "SB": {
+ "name": "Visiwa vya Solomon"
+ },
+ "TC": {
+ "name": "Visiwa vya Turki na Kaiko"
+ },
+ "VI": {
+ "name": "Visiwa vya Virgin vya Marekani"
+ },
+ "VG": {
+ "name": "Visiwa vya Virgin vya Uingereza"
+ },
+ "WF": {
+ "name": "Walis na Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "JO": {
+ "name": "Yordani"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/mer.json b/library/intl/resources/country/mer.json
new file mode 100644
index 000000000..222406ed9
--- /dev/null
+++ b/library/intl/resources/country/mer.json
@@ -0,0 +1,761 @@
+{
+ "IE": {
+ "name": "Aelandi"
+ },
+ "ZA": {
+ "name": "Afrika ya Southi"
+ },
+ "AF": {
+ "name": "Afuganistani"
+ },
+ "CK": {
+ "name": "AÄ©randi cia Cook"
+ },
+ "FK": {
+ "name": "AÄ©randi cia Falklandi"
+ },
+ "KY": {
+ "name": "AÄ©randi cia Kayman"
+ },
+ "MP": {
+ "name": "AÄ©randi cia Mariana ya nothi"
+ },
+ "MH": {
+ "name": "AÄ©randi cia Marshal"
+ },
+ "NF": {
+ "name": "AÄ©randi cia Norfok"
+ },
+ "SB": {
+ "name": "Airandi Cia Solomon"
+ },
+ "TC": {
+ "name": "Aĩrandi cia Takĩ na Kaiko"
+ },
+ "VI": {
+ "name": "AÄ©randi cia Virgin cia Amerika"
+ },
+ "VG": {
+ "name": "AÄ©randi cia Virgin cia Ngeretha"
+ },
+ "IS": {
+ "name": "Aisilandi"
+ },
+ "AR": {
+ "name": "Ajentina"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Alubania"
+ },
+ "US": {
+ "name": "Amerika"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "DZ": {
+ "name": "Angiria"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua na Barbuda"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AT": {
+ "name": "Austiria"
+ },
+ "AU": {
+ "name": "Austrĩlia"
+ },
+ "AZ": {
+ "name": "Azebaijani"
+ },
+ "BB": {
+ "name": "Babadosi"
+ },
+ "BS": {
+ "name": "Bahamasi"
+ },
+ "BH": {
+ "name": "Baharini"
+ },
+ "BM": {
+ "name": "Bamuda"
+ },
+ "BD": {
+ "name": "Bangiradeshi"
+ },
+ "BY": {
+ "name": "Belarusi"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BE": {
+ "name": "Beronjiamu"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia na Hezegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazilu"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BF": {
+ "name": "Bukinafaso"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "CY": {
+ "name": "Caipurasi"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denimaki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekwado"
+ },
+ "SV": {
+ "name": "Elsavado"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "AE": {
+ "name": "Falme cia Kiarabu"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipino"
+ },
+ "FI": {
+ "name": "Finilandi"
+ },
+ "FR": {
+ "name": "Fransi"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GQ": {
+ "name": "Gine ya Iquita"
+ },
+ "GW": {
+ "name": "Ginebisau"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GP": {
+ "name": "Gwadelupe"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GF": {
+ "name": "Gwiyana ya Fransi"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HU": {
+ "name": "Hangarĩ"
+ },
+ "NL": {
+ "name": "Holandi"
+ },
+ "HN": {
+ "name": "Hondurasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "IR": {
+ "name": "Irani"
+ },
+ "IL": {
+ "name": "Isiraeli"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IT": {
+ "name": "Italĩ"
+ },
+ "ET": {
+ "name": "Ithiopia"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "JP": {
+ "name": "Japani"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "GE": {
+ "name": "Jojia"
+ },
+ "JO": {
+ "name": "Jorondani"
+ },
+ "NC": {
+ "name": "Kalendoia Ĩnjeru"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kameruni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Kata"
+ },
+ "KZ": {
+ "name": "Kazakistani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CV": {
+ "name": "Kepuvede"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizistani"
+ },
+ "CU": {
+ "name": "Kiuba"
+ },
+ "CI": {
+ "name": "Kodivaa"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komoro"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "KP": {
+ "name": "Korea Nothi"
+ },
+ "KR": {
+ "name": "Korea Saũthi"
+ },
+ "HR": {
+ "name": "Koroashia"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "KW": {
+ "name": "Kuwĩ ti"
+ },
+ "LA": {
+ "name": "Laosi"
+ },
+ "LV": {
+ "name": "Lativia"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "LÄ©bia"
+ },
+ "LI": {
+ "name": "Lishenteni"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembogu"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagasika"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MY": {
+ "name": "Malĩsia"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MQ": {
+ "name": "Martiniki"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Maurĩtiasi"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexiko"
+ },
+ "FM": {
+ "name": "Mikronesia"
+ },
+ "EG": {
+ "name": "Misiri"
+ },
+ "MV": {
+ "name": "Modivu"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrati"
+ },
+ "MA": {
+ "name": "Moroko"
+ },
+ "MZ": {
+ "name": "Mozambiki"
+ },
+ "MM": {
+ "name": "Myanima"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "GB": {
+ "name": "Ngeretha"
+ },
+ "GI": {
+ "name": "Ngĩbrata"
+ },
+ "GR": {
+ "name": "Ngiriki"
+ },
+ "GL": {
+ "name": "Ngirinilandi"
+ },
+ "NE": {
+ "name": "Nija"
+ },
+ "NG": {
+ "name": "Nijeria"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NZ": {
+ "name": "Niuzilandi"
+ },
+ "DE": {
+ "name": "Njamanĩ"
+ },
+ "NO": {
+ "name": "Norwi"
+ },
+ "IO": {
+ "name": "Nthĩ cia Ngeretha gatagatĩ ka ĩria ria Hindi"
+ },
+ "CF": {
+ "name": "Nthĩ ya Afrika gatĩgatĩ"
+ },
+ "CZ": {
+ "name": "Nthĩ ya Cheki"
+ },
+ "DO": {
+ "name": "Nthĩ ya Dominika"
+ },
+ "CD": {
+ "name": "Nthĩ ya Kidemokrasĩ ya Kongo"
+ },
+ "OM": {
+ "name": "Omani"
+ },
+ "PK": {
+ "name": "Pakistani"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua"
+ },
+ "PY": {
+ "name": "Paragwai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkairni"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PF": {
+ "name": "Polinesia ya Fransi"
+ },
+ "PT": {
+ "name": "Potogo"
+ },
+ "PR": {
+ "name": "Pwetoriko"
+ },
+ "RU": {
+ "name": "Rashia"
+ },
+ "RE": {
+ "name": "Riyunioni"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "PS": {
+ "name": "RÅ©tere rwa Westi banki na Gaza cia Palestina"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SM": {
+ "name": "Samarino"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa ya Amerika"
+ },
+ "SH": {
+ "name": "Santahelena"
+ },
+ "KN": {
+ "name": "Santakitzi na Nevis"
+ },
+ "LC": {
+ "name": "Santalusia"
+ },
+ "PM": {
+ "name": "Santapieri na Mikeloni"
+ },
+ "VC": {
+ "name": "Santavisenti na Grenadini"
+ },
+ "ST": {
+ "name": "Sao Tome na Principe"
+ },
+ "SA": {
+ "name": "Saudi"
+ },
+ "SN": {
+ "name": "Senego"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Shelisheli"
+ },
+ "SL": {
+ "name": "Siera Leoni"
+ },
+ "SG": {
+ "name": "Singapoo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "LK": {
+ "name": "Sirilanka"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spĩni"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SR": {
+ "name": "Surinamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swazilandi"
+ },
+ "SE": {
+ "name": "Swideni"
+ },
+ "CH": {
+ "name": "Swizilandi"
+ },
+ "TW": {
+ "name": "Taiwani"
+ },
+ "TJ": {
+ "name": "Tajikistani"
+ },
+ "TR": {
+ "name": "Takĩ"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thaĩlandi"
+ },
+ "TL": {
+ "name": "Timori ya Isti"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad na Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TM": {
+ "name": "Tukumenistani"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukirĩni"
+ },
+ "UY": {
+ "name": "Urugwĩ"
+ },
+ "UZ": {
+ "name": "Uzibekistani"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietinamu"
+ },
+ "WF": {
+ "name": "Walis na Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/mfe.json b/library/intl/resources/country/mfe.json
new file mode 100644
index 000000000..cdb6195a9
--- /dev/null
+++ b/library/intl/resources/country/mfe.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albani"
+ },
+ "DE": {
+ "name": "Almagn"
+ },
+ "DZ": {
+ "name": "Alzeri"
+ },
+ "AD": {
+ "name": "Andor"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua-ek-Barbuda"
+ },
+ "AM": {
+ "name": "Armeni"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "HT": {
+ "name": "Ayti"
+ },
+ "AZ": {
+ "name": "Azerbaïdjan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahreïn"
+ },
+ "BD": {
+ "name": "Banglades"
+ },
+ "BB": {
+ "name": "Barbad"
+ },
+ "BY": {
+ "name": "Belaris"
+ },
+ "BZ": {
+ "name": "Beliz"
+ },
+ "BE": {
+ "name": "Belzik"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermid"
+ },
+ "BG": {
+ "name": "Bilgari"
+ },
+ "BO": {
+ "name": "Bolivi"
+ },
+ "BA": {
+ "name": "Bosni-Herzegovinn"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BT": {
+ "name": "Boutan"
+ },
+ "BR": {
+ "name": "Brezil"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "DK": {
+ "name": "Dannmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominik"
+ },
+ "EC": {
+ "name": "Ekwater"
+ },
+ "AE": {
+ "name": "Emira arab ini"
+ },
+ "ER": {
+ "name": "Erythre"
+ },
+ "EE": {
+ "name": "Estoni"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fidji"
+ },
+ "PH": {
+ "name": "Filipinn"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambi"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GQ": {
+ "name": "Gine ekwatoryal"
+ },
+ "GW": {
+ "name": "Gine-Bisau"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenad"
+ },
+ "GR": {
+ "name": "Gres"
+ },
+ "GP": {
+ "name": "Guadloup"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GF": {
+ "name": "Gwiyann franse"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "UA": {
+ "name": "Ikrenn"
+ },
+ "ID": {
+ "name": "Indonezi"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irland"
+ },
+ "IS": {
+ "name": "Island"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IT": {
+ "name": "Itali"
+ },
+ "IL": {
+ "name": "Izrael"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "KH": {
+ "name": "Kambodj"
+ },
+ "CM": {
+ "name": "Kamerounn"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "CV": {
+ "name": "Kap-Ver"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KZ": {
+ "name": "Kazakstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KG": {
+ "name": "Kirghizistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CO": {
+ "name": "Kolonbi"
+ },
+ "KM": {
+ "name": "Komor"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Koweit"
+ },
+ "HR": {
+ "name": "Kroasi"
+ },
+ "FR": {
+ "name": "Lafrans"
+ },
+ "KP": {
+ "name": "Lakore-dinor"
+ },
+ "KR": {
+ "name": "Lakore-disid"
+ },
+ "US": {
+ "name": "Lamerik"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "SA": {
+ "name": "Larabi Saoudit"
+ },
+ "RE": {
+ "name": "Larenion"
+ },
+ "RU": {
+ "name": "Larisi"
+ },
+ "AR": {
+ "name": "Larzantinn"
+ },
+ "CN": {
+ "name": "Lasinn"
+ },
+ "SY": {
+ "name": "Lasiri"
+ },
+ "SE": {
+ "name": "Laswed"
+ },
+ "CH": {
+ "name": "Laswis"
+ },
+ "VA": {
+ "name": "Lata Vatikan"
+ },
+ "IN": {
+ "name": "Lenn"
+ },
+ "ES": {
+ "name": "Lespagn"
+ },
+ "ET": {
+ "name": "Letiopi"
+ },
+ "LV": {
+ "name": "Letoni"
+ },
+ "EG": {
+ "name": "Lezipt"
+ },
+ "LS": {
+ "name": "Lezoto"
+ },
+ "LB": {
+ "name": "Liban"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libi"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "NF": {
+ "name": "Lil Norfolk"
+ },
+ "LT": {
+ "name": "Lituani"
+ },
+ "AU": {
+ "name": "Lostrali"
+ },
+ "AT": {
+ "name": "Lostris"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldiv"
+ },
+ "MY": {
+ "name": "Malezi"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malt"
+ },
+ "MA": {
+ "name": "Marok"
+ },
+ "MQ": {
+ "name": "Martinik"
+ },
+ "MK": {
+ "name": "Masedwann"
+ },
+ "YT": {
+ "name": "Mayot"
+ },
+ "MX": {
+ "name": "Mexik"
+ },
+ "FM": {
+ "name": "Mikronezi"
+ },
+ "MD": {
+ "name": "Moldavi"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongoli"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montsera"
+ },
+ "MU": {
+ "name": "Moris"
+ },
+ "MR": {
+ "name": "Moritani"
+ },
+ "MZ": {
+ "name": "Mozambik"
+ },
+ "MM": {
+ "name": "Myanmar"
+ },
+ "NA": {
+ "name": "Namibi"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NU": {
+ "name": "Niowe"
+ },
+ "NE": {
+ "name": "Nizer"
+ },
+ "NG": {
+ "name": "Nizeria"
+ },
+ "NO": {
+ "name": "Norvez"
+ },
+ "NZ": {
+ "name": "Nouvel Zeland"
+ },
+ "NC": {
+ "name": "Nouvel-Kaledoni"
+ },
+ "NL": {
+ "name": "Oland"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "HU": {
+ "name": "Ongri"
+ },
+ "UG": {
+ "name": "Ouganda"
+ },
+ "UZ": {
+ "name": "Ouzbekistan"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papouazi-Nouvel-Gine"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Perou"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PF": {
+ "name": "Polinezi franse"
+ },
+ "PL": {
+ "name": "Pologn"
+ },
+ "PT": {
+ "name": "Portigal"
+ },
+ "PR": {
+ "name": "Porto Rico"
+ },
+ "CZ": {
+ "name": "Repiblik Chek"
+ },
+ "CD": {
+ "name": "Repiblik demokratik Kongo"
+ },
+ "DO": {
+ "name": "Repiblik dominikin"
+ },
+ "CF": {
+ "name": "Repiblik Lafrik Santral"
+ },
+ "RO": {
+ "name": "Roumani"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "KN": {
+ "name": "Saint-Christophe-ek-Niévès"
+ },
+ "SM": {
+ "name": "Saint-Marin"
+ },
+ "PM": {
+ "name": "Saint-Pierre-ek-Miquelon"
+ },
+ "VC": {
+ "name": "Saint-Vincent-ek-Grenadines"
+ },
+ "SH": {
+ "name": "Sainte-Hélène"
+ },
+ "LC": {
+ "name": "Sainte-Lucie"
+ },
+ "SV": {
+ "name": "Salvador"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa amerikin"
+ },
+ "ST": {
+ "name": "São Tome-ek-Prínsip"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Sesel"
+ },
+ "CL": {
+ "name": "Shili"
+ },
+ "ZA": {
+ "name": "Sid-Afrik"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapour"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovaki"
+ },
+ "SI": {
+ "name": "Sloveni"
+ },
+ "SO": {
+ "name": "Somali"
+ },
+ "SD": {
+ "name": "Soudan"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "TJ": {
+ "name": "Tadjikistan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tanzani"
+ },
+ "TD": {
+ "name": "Tchad"
+ },
+ "IO": {
+ "name": "Teritwar Britanik Losean Indien"
+ },
+ "PS": {
+ "name": "Teritwar Palestinn"
+ },
+ "TH": {
+ "name": "Thayland"
+ },
+ "TL": {
+ "name": "Timor oriantal"
+ },
+ "TN": {
+ "name": "Tinizi"
+ },
+ "TR": {
+ "name": "Tirki"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinite-ek-Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis-ek-Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemenn"
+ },
+ "JM": {
+ "name": "Zamaik"
+ },
+ "ZM": {
+ "name": "Zambi"
+ },
+ "JP": {
+ "name": "Zapon"
+ },
+ "GE": {
+ "name": "Zeorzi"
+ },
+ "GI": {
+ "name": "Zibraltar"
+ },
+ "CK": {
+ "name": "Zil Cook"
+ },
+ "KY": {
+ "name": "Zil Kayman"
+ },
+ "FK": {
+ "name": "Zil malwinn"
+ },
+ "MH": {
+ "name": "Zil Marshall"
+ },
+ "MP": {
+ "name": "Zil Maryann dinor"
+ },
+ "SB": {
+ "name": "Zil Salomon"
+ },
+ "TC": {
+ "name": "Zil Tirk ek Caïcos"
+ },
+ "VG": {
+ "name": "Zil vierz britanik"
+ },
+ "VI": {
+ "name": "Zil Vierz Lamerik"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ },
+ "JO": {
+ "name": "Zordani"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/mg.json b/library/intl/resources/country/mg.json
new file mode 100644
index 000000000..b2d229987
--- /dev/null
+++ b/library/intl/resources/country/mg.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "ZA": {
+ "name": "Afrika Atsimo"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DE": {
+ "name": "Alemaina"
+ },
+ "DZ": {
+ "name": "Alzeria"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "GB": {
+ "name": "Angletera"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antiga sy Barboda"
+ },
+ "AU": {
+ "name": "Aostralia"
+ },
+ "AT": {
+ "name": "Aotrisy"
+ },
+ "SA": {
+ "name": "Arabia saodita"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Arobà"
+ },
+ "AR": {
+ "name": "Arzantina"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AZ": {
+ "name": "Azerbaidjan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesy"
+ },
+ "BB": {
+ "name": "Barbady"
+ },
+ "BY": {
+ "name": "Belarosy"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BE": {
+ "name": "Belzika"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermioda"
+ },
+ "BT": {
+ "name": "Bhotana"
+ },
+ "BG": {
+ "name": "Biolgaria"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BF": {
+ "name": "Borkina Faso"
+ },
+ "BI": {
+ "name": "Borondi"
+ },
+ "BA": {
+ "name": "Bosnia sy Herzegovina"
+ },
+ "BW": {
+ "name": "Botsoana"
+ },
+ "BR": {
+ "name": "Brezila"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danmarka"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djiboti"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EG": {
+ "name": "Ejypta"
+ },
+ "EC": {
+ "name": "Ekoatera"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emirà Arabo mitambatra"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "ES": {
+ "name": "Espaina"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "US": {
+ "name": "Etazonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "IO": {
+ "name": "Faridranomasina indiana britanika"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fidji"
+ },
+ "PH": {
+ "name": "Filipina"
+ },
+ "FI": {
+ "name": "Finlandy"
+ },
+ "VA": {
+ "name": "Firenen’i Vatikana"
+ },
+ "FR": {
+ "name": "Frantsa"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GW": {
+ "name": "Giné-Bisao"
+ },
+ "GN": {
+ "name": "Ginea"
+ },
+ "GP": {
+ "name": "Goadelopy"
+ },
+ "GT": {
+ "name": "Goatemalà"
+ },
+ "GD": {
+ "name": "Grenady"
+ },
+ "GR": {
+ "name": "Gresy"
+ },
+ "GL": {
+ "name": "Groenland"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GQ": {
+ "name": "Guinea Ekoatera"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GF": {
+ "name": "Guyana frantsay"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "NL": {
+ "name": "Holanda"
+ },
+ "HN": {
+ "name": "Hondiorasy"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hongria"
+ },
+ "ID": {
+ "name": "Indonezia"
+ },
+ "IN": {
+ "name": "Indy"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irlandy"
+ },
+ "IS": {
+ "name": "Islandy"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israely"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaïka"
+ },
+ "JP": {
+ "name": "Japana"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KH": {
+ "name": "Kambôdja"
+ },
+ "CM": {
+ "name": "Kamerona"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CU": {
+ "name": "Kiobà"
+ },
+ "KG": {
+ "name": "Kiordistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KW": {
+ "name": "Kôeity"
+ },
+ "CO": {
+ "name": "Kôlômbia"
+ },
+ "KM": {
+ "name": "Kômaoro"
+ },
+ "CG": {
+ "name": "Kôngô"
+ },
+ "KR": {
+ "name": "Korea Atsimo"
+ },
+ "KP": {
+ "name": "Korea Avaratra"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kosta Rikà"
+ },
+ "HR": {
+ "name": "Kroasia"
+ },
+ "LA": {
+ "name": "Laôs"
+ },
+ "RE": {
+ "name": "Larenion"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Libana"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LU": {
+ "name": "Lioksamboro"
+ },
+ "LI": {
+ "name": "Listenstein"
+ },
+ "LT": {
+ "name": "Litoania"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madagasikara"
+ },
+ "MK": {
+ "name": "Makedonia"
+ },
+ "MY": {
+ "name": "Malaizia"
+ },
+ "MW": {
+ "name": "Malaoì"
+ },
+ "MV": {
+ "name": "Maldiva"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MU": {
+ "name": "Maorisy"
+ },
+ "MR": {
+ "name": "Maoritania"
+ },
+ "MA": {
+ "name": "Marôka"
+ },
+ "MQ": {
+ "name": "Martinika"
+ },
+ "YT": {
+ "name": "Mayôty"
+ },
+ "MX": {
+ "name": "Meksika"
+ },
+ "FM": {
+ "name": "Mikrônezia"
+ },
+ "MD": {
+ "name": "Môldavia"
+ },
+ "MC": {
+ "name": "Mônakô"
+ },
+ "MN": {
+ "name": "Môngôlia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambika"
+ },
+ "MM": {
+ "name": "Myanmar"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Naorò"
+ },
+ "NP": {
+ "name": "Nepala"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NI": {
+ "name": "Nikaragoà"
+ },
+ "NU": {
+ "name": "Nioé"
+ },
+ "NG": {
+ "name": "Nizeria"
+ },
+ "NO": {
+ "name": "Nôrvezy"
+ },
+ "VG": {
+ "name": "Nosy britanika virijiny"
+ },
+ "CV": {
+ "name": "Nosy Cap-Vert"
+ },
+ "FK": {
+ "name": "Nosy Falkand"
+ },
+ "KY": {
+ "name": "Nosy Kayman"
+ },
+ "CK": {
+ "name": "Nosy Kook"
+ },
+ "MP": {
+ "name": "Nosy Mariana Atsinanana"
+ },
+ "MH": {
+ "name": "Nosy Marshall"
+ },
+ "NF": {
+ "name": "Nosy Norfolk"
+ },
+ "SB": {
+ "name": "Nosy Salomona"
+ },
+ "TC": {
+ "name": "Nosy Turks sy Caïques"
+ },
+ "VI": {
+ "name": "Nosy Virijiny Etazonia"
+ },
+ "NC": {
+ "name": "Nouvelle-Calédonie"
+ },
+ "NZ": {
+ "name": "Nouvelle-Zélande"
+ },
+ "UG": {
+ "name": "Oganda"
+ },
+ "UA": {
+ "name": "Okraina"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "UY": {
+ "name": "Orogoay"
+ },
+ "UZ": {
+ "name": "Ozbekistan"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palao"
+ },
+ "PS": {
+ "name": "Palestina"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papouasie-Nouvelle-Guinée"
+ },
+ "PY": {
+ "name": "Paragoay"
+ },
+ "PE": {
+ "name": "Peroa"
+ },
+ "PN": {
+ "name": "Pitkairn"
+ },
+ "PL": {
+ "name": "Pôlôna"
+ },
+ "PF": {
+ "name": "Polynezia frantsay"
+ },
+ "PT": {
+ "name": "Pôrtiogala"
+ },
+ "PR": {
+ "name": "Pôrtô Rikô"
+ },
+ "DO": {
+ "name": "Repoblika Dominikanina"
+ },
+ "CF": {
+ "name": "Repoblika Ivon’Afrika"
+ },
+ "CD": {
+ "name": "Repoblikan’i Kongo"
+ },
+ "CZ": {
+ "name": "Repoblikan’i Tseky"
+ },
+ "RW": {
+ "name": "Roanda"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Rosia"
+ },
+ "KN": {
+ "name": "Saint-Christophe-et-Niévès"
+ },
+ "SM": {
+ "name": "Saint-Marin"
+ },
+ "PM": {
+ "name": "Saint-Pierre-et-Miquelon"
+ },
+ "VC": {
+ "name": "Saint-Vincent-et-les Grenadines"
+ },
+ "SH": {
+ "name": "Sainte-Hélène"
+ },
+ "LC": {
+ "name": "Sainte-Lucie"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa amerikanina"
+ },
+ "ST": {
+ "name": "São Tomé-et-Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seyshela"
+ },
+ "CL": {
+ "name": "Shili"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "CN": {
+ "name": "Sina"
+ },
+ "SG": {
+ "name": "Singaporo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SZ": {
+ "name": "Soazilandy"
+ },
+ "SD": {
+ "name": "Sodan"
+ },
+ "SE": {
+ "name": "Soedy"
+ },
+ "CH": {
+ "name": "Soisa"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "SR": {
+ "name": "Sorinam"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "CY": {
+ "name": "Sypra"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taioana"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailandy"
+ },
+ "TL": {
+ "name": "Timor Atsinanana"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelao"
+ },
+ "TO": {
+ "name": "Tongà"
+ },
+ "TN": {
+ "name": "Tonizia"
+ },
+ "TR": {
+ "name": "Torkia"
+ },
+ "TM": {
+ "name": "Torkmenistan"
+ },
+ "TV": {
+ "name": "Tovalò"
+ },
+ "TT": {
+ "name": "Trinidad sy Tobagô"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TD": {
+ "name": "Tsady"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VU": {
+ "name": "Vanoatò"
+ },
+ "VE": {
+ "name": "Venezoelà"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis sy Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "GE": {
+ "name": "Zeorzia"
+ },
+ "GI": {
+ "name": "Zibraltara"
+ },
+ "ZW": {
+ "name": "Zimbaboe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/mgh.json b/library/intl/resources/country/mgh.json
new file mode 100644
index 000000000..516a1a273
--- /dev/null
+++ b/library/intl/resources/country/mgh.json
@@ -0,0 +1,761 @@
+{
+ "ZA": {
+ "name": "Afrika du Sulu"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "DZ": {
+ "name": "Alujeria"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua & Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia & Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PY": {
+ "name": "Paragwai"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TC": {
+ "name": "Turks & Caicos Islands"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "AL": {
+ "name": "Ualbania"
+ },
+ "AD": {
+ "name": "Uandora"
+ },
+ "IE": {
+ "name": "Uayalandi"
+ },
+ "AZ": {
+ "name": "Uazabajani"
+ },
+ "BJ": {
+ "name": "Ubelin"
+ },
+ "MG": {
+ "name": "Ubukini"
+ },
+ "TD": {
+ "name": "Uchadi"
+ },
+ "CZ": {
+ "name": "Ucheki"
+ },
+ "CL": {
+ "name": "Uchile"
+ },
+ "CN": {
+ "name": "Uchina"
+ },
+ "DK": {
+ "name": "Udenimaka"
+ },
+ "DM": {
+ "name": "Udominika"
+ },
+ "FR": {
+ "name": "Ufaransa"
+ },
+ "GF": {
+ "name": "Ufaransa yo Gwaya"
+ },
+ "PF": {
+ "name": "Ufaransa yo Potina"
+ },
+ "FJ": {
+ "name": "Ufiji"
+ },
+ "PH": {
+ "name": "Ufilipino"
+ },
+ "FI": {
+ "name": "Ufini"
+ },
+ "AF": {
+ "name": "Ufugustani"
+ },
+ "GA": {
+ "name": "Ugaboni"
+ },
+ "GM": {
+ "name": "Ugambia"
+ },
+ "GH": {
+ "name": "Ugana"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "GN": {
+ "name": "Ugine"
+ },
+ "GW": {
+ "name": "Uginebisau"
+ },
+ "GD": {
+ "name": "Ugrenada"
+ },
+ "GL": {
+ "name": "Ugrinlandi"
+ },
+ "GY": {
+ "name": "Uguyana"
+ },
+ "GP": {
+ "name": "Ugwadelupe"
+ },
+ "GU": {
+ "name": "Ugwam"
+ },
+ "GT": {
+ "name": "Ugwatemala"
+ },
+ "ET": {
+ "name": "Uhabeshi"
+ },
+ "HT": {
+ "name": "Uhaiti"
+ },
+ "IN": {
+ "name": "Uhindini"
+ },
+ "ES": {
+ "name": "Uhispania"
+ },
+ "HN": {
+ "name": "Uhondurasi"
+ },
+ "HU": {
+ "name": "Uhungaria"
+ },
+ "IL": {
+ "name": "Uisraeli"
+ },
+ "JM": {
+ "name": "Ujamaika"
+ },
+ "JP": {
+ "name": "Ujapani"
+ },
+ "GI": {
+ "name": "Ujibralta"
+ },
+ "DJ": {
+ "name": "Ujibuti"
+ },
+ "TJ": {
+ "name": "Ujikistani"
+ },
+ "GE": {
+ "name": "Ujojia"
+ },
+ "KH": {
+ "name": "Ukambodia"
+ },
+ "CA": {
+ "name": "Ukanada"
+ },
+ "QA": {
+ "name": "Ukatari"
+ },
+ "KZ": {
+ "name": "Ukazakistani"
+ },
+ "KE": {
+ "name": "Ukenya"
+ },
+ "CI": {
+ "name": "Ukodiva"
+ },
+ "CO": {
+ "name": "Ukolombia"
+ },
+ "KM": {
+ "name": "Ukomoro"
+ },
+ "CG": {
+ "name": "Ukongo"
+ },
+ "HR": {
+ "name": "Ukorasia"
+ },
+ "KP": {
+ "name": "Ukorea Kaskazini"
+ },
+ "KR": {
+ "name": "Ukorea Kusini"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "CU": {
+ "name": "Ukuba"
+ },
+ "CY": {
+ "name": "Ukuprosi"
+ },
+ "LV": {
+ "name": "Ulativia"
+ },
+ "LB": {
+ "name": "Ulebanoni"
+ },
+ "LS": {
+ "name": "Ulesoto"
+ },
+ "LR": {
+ "name": "Uliberia"
+ },
+ "LY": {
+ "name": "Ulibya"
+ },
+ "MW": {
+ "name": "Umalawi"
+ },
+ "ME": {
+ "name": "Umantegro"
+ },
+ "US": {
+ "name": "Umarekani"
+ },
+ "MK": {
+ "name": "Umasedonia"
+ },
+ "EG": {
+ "name": "Umisiri"
+ },
+ "MZ": {
+ "name": "Umozambiki"
+ },
+ "ID": {
+ "name": "Undonesia"
+ },
+ "NE": {
+ "name": "Unijeri"
+ },
+ "NG": {
+ "name": "Unijeria"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "NO": {
+ "name": "Unorwe"
+ },
+ "OM": {
+ "name": "Uomani"
+ },
+ "PK": {
+ "name": "Upakistani"
+ },
+ "PA": {
+ "name": "Upanama"
+ },
+ "PG": {
+ "name": "Upapua"
+ },
+ "PE": {
+ "name": "Uperuu"
+ },
+ "PN": {
+ "name": "Upitkairni"
+ },
+ "PL": {
+ "name": "Upolandi"
+ },
+ "PR": {
+ "name": "Upwetoriko"
+ },
+ "ER": {
+ "name": "Uriterea"
+ },
+ "RE": {
+ "name": "Uriyunioni"
+ },
+ "RO": {
+ "name": "Uromania"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "BI": {
+ "name": "Urundi"
+ },
+ "RW": {
+ "name": "Urwanda"
+ },
+ "SV": {
+ "name": "Usalavado"
+ },
+ "SM": {
+ "name": "Usamarino"
+ },
+ "WS": {
+ "name": "Usamoa"
+ },
+ "AS": {
+ "name": "Usamoa ya Marekani"
+ },
+ "SH": {
+ "name": "Usantahelena"
+ },
+ "KN": {
+ "name": "Usantakitzi na Nevis"
+ },
+ "LC": {
+ "name": "Usantalusia"
+ },
+ "PM": {
+ "name": "Usantapieri na Mikeloni"
+ },
+ "VC": {
+ "name": "Usantavisenti na Grenadini"
+ },
+ "ST": {
+ "name": "Usao Tome na Principe"
+ },
+ "SA": {
+ "name": "Usaudi"
+ },
+ "LU": {
+ "name": "Usembaji"
+ },
+ "SN": {
+ "name": "Usenegali"
+ },
+ "SC": {
+ "name": "Ushelisheli"
+ },
+ "LI": {
+ "name": "Ushenteni"
+ },
+ "SG": {
+ "name": "Usingapoo"
+ },
+ "SY": {
+ "name": "Usiria"
+ },
+ "LK": {
+ "name": "Usirilanka"
+ },
+ "SK": {
+ "name": "Uslovakia"
+ },
+ "SI": {
+ "name": "Uslovenia"
+ },
+ "SO": {
+ "name": "Usomalia"
+ },
+ "SD": {
+ "name": "Usudani"
+ },
+ "SR": {
+ "name": "Usurinamu"
+ },
+ "SZ": {
+ "name": "Uswazi"
+ },
+ "SE": {
+ "name": "Uswidi"
+ },
+ "CH": {
+ "name": "Uswisi"
+ },
+ "TH": {
+ "name": "Utailandi"
+ },
+ "TZ": {
+ "name": "Utanzania"
+ },
+ "TL": {
+ "name": "Utimo Mashariki"
+ },
+ "TG": {
+ "name": "Utogo"
+ },
+ "TK": {
+ "name": "Utokelau"
+ },
+ "TO": {
+ "name": "Utonga"
+ },
+ "TT": {
+ "name": "Utrinidad na Tobago"
+ },
+ "TR": {
+ "name": "Utuki"
+ },
+ "TN": {
+ "name": "Utunisia"
+ },
+ "TM": {
+ "name": "Uturukimenistani"
+ },
+ "TV": {
+ "name": "Utuvalu"
+ },
+ "LT": {
+ "name": "Utwania"
+ },
+ "VU": {
+ "name": "Uvanuatu"
+ },
+ "VA": {
+ "name": "Uvatikani"
+ },
+ "VE": {
+ "name": "Uvenezuela"
+ },
+ "VN": {
+ "name": "Uvietinamu"
+ },
+ "WF": {
+ "name": "Uwalis na Futuna"
+ },
+ "YE": {
+ "name": "Uyemeni"
+ },
+ "JO": {
+ "name": "Uyordani"
+ },
+ "ZM": {
+ "name": "Uzambia"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "ZW": {
+ "name": "Uzimbabwe"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "IQ": {
+ "name": "Wiraki"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/mk.json b/library/intl/resources/country/mk.json
new file mode 100644
index 000000000..0dae5e0d8
--- /dev/null
+++ b/library/intl/resources/country/mk.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "ÐвганиÑтан"
+ },
+ "AU": {
+ "name": "ÐвÑтралија"
+ },
+ "AT": {
+ "name": "ÐвÑтрија"
+ },
+ "AZ": {
+ "name": "Ðзербејџан"
+ },
+ "AL": {
+ "name": "Ðлбанија"
+ },
+ "DZ": {
+ "name": "Ðлжир"
+ },
+ "AS": {
+ "name": "ÐмериканÑка Самоа"
+ },
+ "VI": {
+ "name": "ÐмериканÑки ДевÑтвени ОÑтрови"
+ },
+ "UM": {
+ "name": "ÐмериканÑки територии во Пацификот"
+ },
+ "AI": {
+ "name": "Ðнгвила"
+ },
+ "AO": {
+ "name": "Ðнгола"
+ },
+ "AD": {
+ "name": "Ðндора"
+ },
+ "AQ": {
+ "name": "Ðнтарктик"
+ },
+ "AG": {
+ "name": "Ðнтигва и Барбуда"
+ },
+ "AR": {
+ "name": "Ðргентина"
+ },
+ "AW": {
+ "name": "Ðруба"
+ },
+ "BD": {
+ "name": "Бангладеш"
+ },
+ "BB": {
+ "name": "БарбадоÑ"
+ },
+ "BS": {
+ "name": "Бахами"
+ },
+ "BH": {
+ "name": "Бахреин"
+ },
+ "BE": {
+ "name": "Белгија"
+ },
+ "BZ": {
+ "name": "Белизе"
+ },
+ "BY": {
+ "name": "БелоруÑија"
+ },
+ "BJ": {
+ "name": "Бенин"
+ },
+ "BM": {
+ "name": "Бермуди"
+ },
+ "CX": {
+ "name": "Божиќен ОÑтров"
+ },
+ "BO": {
+ "name": "Боливија"
+ },
+ "BA": {
+ "name": "БоÑна и Херцеговина"
+ },
+ "BW": {
+ "name": "Боцвана"
+ },
+ "BR": {
+ "name": "Бразил"
+ },
+ "CI": {
+ "name": "Брегот на Слоновата КоÑка"
+ },
+ "IO": {
+ "name": "БританÑка ИндоокеанÑка Територија"
+ },
+ "VG": {
+ "name": "БританÑки ДевÑтвени ОÑтрови"
+ },
+ "BN": {
+ "name": "Брунеј"
+ },
+ "BG": {
+ "name": "Бугарија"
+ },
+ "BF": {
+ "name": "Буркина ФаÑо"
+ },
+ "BI": {
+ "name": "Бурунди"
+ },
+ "BT": {
+ "name": "Бутан"
+ },
+ "VU": {
+ "name": "Вануату"
+ },
+ "VA": {
+ "name": "Ватикан"
+ },
+ "VE": {
+ "name": "Венецуела"
+ },
+ "VN": {
+ "name": "Виетнам"
+ },
+ "WF": {
+ "name": "Ð’Ð¾Ð»Ð¸Ñ Ð¸ Футуна"
+ },
+ "GA": {
+ "name": "Габон"
+ },
+ "GM": {
+ "name": "Гамбија"
+ },
+ "GH": {
+ "name": "Гана"
+ },
+ "GP": {
+ "name": "Гвадалупе"
+ },
+ "GY": {
+ "name": "Гвајана"
+ },
+ "GU": {
+ "name": "Гвам"
+ },
+ "GT": {
+ "name": "Гватемала"
+ },
+ "GN": {
+ "name": "Гвинеја"
+ },
+ "GW": {
+ "name": "Гвинеја-БиÑау"
+ },
+ "DE": {
+ "name": "Германија"
+ },
+ "GG": {
+ "name": "Гернзи"
+ },
+ "GI": {
+ "name": "Гибралтар"
+ },
+ "GD": {
+ "name": "Гренада"
+ },
+ "GL": {
+ "name": "Гренланд"
+ },
+ "GE": {
+ "name": "Грузија"
+ },
+ "GR": {
+ "name": "Грција"
+ },
+ "DK": {
+ "name": "ДанÑка"
+ },
+ "DG": {
+ "name": "Диего ГарÑија"
+ },
+ "DM": {
+ "name": "Доминика"
+ },
+ "DO": {
+ "name": "ДоминиканÑка Република"
+ },
+ "EG": {
+ "name": "Египет"
+ },
+ "EC": {
+ "name": "Еквадор"
+ },
+ "GQ": {
+ "name": "ЕкваторÑка Гвинеја"
+ },
+ "SV": {
+ "name": "Ел Салвадор"
+ },
+ "ER": {
+ "name": "Еритреја"
+ },
+ "AM": {
+ "name": "Ерменија"
+ },
+ "EE": {
+ "name": "ЕÑтонија"
+ },
+ "ET": {
+ "name": "Етиопија"
+ },
+ "ZM": {
+ "name": "Замбија"
+ },
+ "EH": {
+ "name": "Западна Сахара"
+ },
+ "CV": {
+ "name": "Зелен ’Рт"
+ },
+ "ZW": {
+ "name": "Зимбабве"
+ },
+ "IL": {
+ "name": "Израел"
+ },
+ "IN": {
+ "name": "Индија"
+ },
+ "ID": {
+ "name": "Индонезија"
+ },
+ "IQ": {
+ "name": "Ирак"
+ },
+ "IR": {
+ "name": "Иран"
+ },
+ "IE": {
+ "name": "ИрÑка"
+ },
+ "IS": {
+ "name": "ИÑланд"
+ },
+ "TL": {
+ "name": "ИÑточен Тимор (Тимор ЛеÑте)"
+ },
+ "IT": {
+ "name": "Италија"
+ },
+ "JM": {
+ "name": "Јамајка"
+ },
+ "JP": {
+ "name": "Јапонија"
+ },
+ "YE": {
+ "name": "Јемен"
+ },
+ "JO": {
+ "name": "Јордан"
+ },
+ "SS": {
+ "name": "Јужен Судан"
+ },
+ "KR": {
+ "name": "Јужна Кореја"
+ },
+ "GS": {
+ "name": "Јужна Ðорџија и Јужни Сендвички ОÑтрови"
+ },
+ "ZA": {
+ "name": "ЈужноафриканÑка Република"
+ },
+ "KZ": {
+ "name": "КазахÑтан"
+ },
+ "KY": {
+ "name": "КајманÑки ОÑтрови"
+ },
+ "KH": {
+ "name": "Камбоџа"
+ },
+ "CM": {
+ "name": "Камерун"
+ },
+ "CA": {
+ "name": "Канада"
+ },
+ "IC": {
+ "name": "КанарÑки ОÑтрови"
+ },
+ "BQ": {
+ "name": "КарипÑка Холандија"
+ },
+ "QA": {
+ "name": "Катар"
+ },
+ "KE": {
+ "name": "Кенија"
+ },
+ "CN": {
+ "name": "Кина"
+ },
+ "CY": {
+ "name": "Кипар"
+ },
+ "KG": {
+ "name": "КиргиÑтан"
+ },
+ "KI": {
+ "name": "Кирибати"
+ },
+ "CC": {
+ "name": "КокоÑови (Килиншки) ОÑтрови"
+ },
+ "CO": {
+ "name": "Колумбија"
+ },
+ "KM": {
+ "name": "КоморÑки ОÑтрови"
+ },
+ "CG": {
+ "name": "Конго - Бразавил"
+ },
+ "CD": {
+ "name": "Конго - КиншаÑа"
+ },
+ "XK": {
+ "name": "КоÑово"
+ },
+ "CR": {
+ "name": "КоÑтарика"
+ },
+ "CU": {
+ "name": "Куба"
+ },
+ "KW": {
+ "name": "Кувајт"
+ },
+ "CK": {
+ "name": "Кукови ОÑтрови"
+ },
+ "CW": {
+ "name": "КураÑао"
+ },
+ "LA": {
+ "name": "ЛаоÑ"
+ },
+ "LV": {
+ "name": "Латвија"
+ },
+ "LS": {
+ "name": "ЛеÑото"
+ },
+ "LB": {
+ "name": "Либан"
+ },
+ "LR": {
+ "name": "Либерија"
+ },
+ "LY": {
+ "name": "Либија"
+ },
+ "LT": {
+ "name": "Литванија"
+ },
+ "LI": {
+ "name": "Лихтенштајн"
+ },
+ "LU": {
+ "name": "ЛукÑембург"
+ },
+ "MR": {
+ "name": "Мавританија"
+ },
+ "MU": {
+ "name": "МаврициуÑ"
+ },
+ "MG": {
+ "name": "МадагаÑкар"
+ },
+ "YT": {
+ "name": "Мајот"
+ },
+ "MO": {
+ "name": "Макао С.Ð.Р Кина"
+ },
+ "MK": {
+ "name": "Македонија"
+ },
+ "MW": {
+ "name": "Малави"
+ },
+ "MV": {
+ "name": "Малдиви"
+ },
+ "MY": {
+ "name": "Малезија"
+ },
+ "ML": {
+ "name": "Мали"
+ },
+ "MT": {
+ "name": "Малта"
+ },
+ "MA": {
+ "name": "Мароко"
+ },
+ "MQ": {
+ "name": "Мартиник"
+ },
+ "MH": {
+ "name": "МаршалÑки ОÑтрови"
+ },
+ "MX": {
+ "name": "МекÑико"
+ },
+ "FM": {
+ "name": "Микронезија"
+ },
+ "MM": {
+ "name": "Мјанмар (Бурма)"
+ },
+ "MZ": {
+ "name": "Мозамбик"
+ },
+ "MD": {
+ "name": "Молдавија"
+ },
+ "MC": {
+ "name": "Монако"
+ },
+ "MN": {
+ "name": "Монголија"
+ },
+ "MS": {
+ "name": "МонÑерат"
+ },
+ "NA": {
+ "name": "Ðамибија"
+ },
+ "NR": {
+ "name": "Ðауру"
+ },
+ "NP": {
+ "name": "Ðепал"
+ },
+ "NE": {
+ "name": "Ðигер"
+ },
+ "NG": {
+ "name": "Ðигерија"
+ },
+ "NI": {
+ "name": "Ðикарагва"
+ },
+ "NU": {
+ "name": "Ðиуе"
+ },
+ "NZ": {
+ "name": "Ðов Зеланд"
+ },
+ "NC": {
+ "name": "Ðова Каледонија"
+ },
+ "NO": {
+ "name": "Ðорвешка"
+ },
+ "NF": {
+ "name": "Ðорфолшки ОÑтров"
+ },
+ "AE": {
+ "name": "Обединети ÐрапÑки Емирати"
+ },
+ "GB": {
+ "name": "Обединето КралÑтво"
+ },
+ "AX": {
+ "name": "ОландÑки оÑтрови"
+ },
+ "OM": {
+ "name": "Оман"
+ },
+ "AC": {
+ "name": "ОÑтров ÐÑенÑион"
+ },
+ "IM": {
+ "name": "ОÑтров Ман"
+ },
+ "TC": {
+ "name": "ОÑтрови Ð¢ÑƒÑ€ÐºÑ Ð¸ КајкоÑ"
+ },
+ "PK": {
+ "name": "ПакиÑтан"
+ },
+ "PW": {
+ "name": "Палау"
+ },
+ "PS": {
+ "name": "ПалеÑтинÑки територии"
+ },
+ "PA": {
+ "name": "Панама"
+ },
+ "PG": {
+ "name": "Папуа Ðова Гвинеја"
+ },
+ "PY": {
+ "name": "Парагвај"
+ },
+ "PE": {
+ "name": "Перу"
+ },
+ "PN": {
+ "name": "ПиткернÑки ОÑтрови"
+ },
+ "PL": {
+ "name": "ПолÑка"
+ },
+ "PR": {
+ "name": "Порторико"
+ },
+ "PT": {
+ "name": "Португалија"
+ },
+ "CZ": {
+ "name": "Република Чешка"
+ },
+ "RE": {
+ "name": "Ријунион"
+ },
+ "RO": {
+ "name": "Романија"
+ },
+ "RW": {
+ "name": "Руанда"
+ },
+ "RU": {
+ "name": "РуÑија"
+ },
+ "WS": {
+ "name": "Самоа"
+ },
+ "SM": {
+ "name": "Сан Марино"
+ },
+ "ST": {
+ "name": "Сао Томе и ПринÑипе"
+ },
+ "SA": {
+ "name": "СаудиÑка Ðрабија"
+ },
+ "SZ": {
+ "name": "Свазиленд"
+ },
+ "SJ": {
+ "name": "Свалбард и Жан Мејен"
+ },
+ "SH": {
+ "name": "Света Елена"
+ },
+ "LC": {
+ "name": "Света Луција"
+ },
+ "BL": {
+ "name": "Свети Вартоломеј"
+ },
+ "VC": {
+ "name": "Свети ВинÑент и Гренадините"
+ },
+ "KN": {
+ "name": "Свети КриÑтофер и ÐевиÑ"
+ },
+ "SX": {
+ "name": "Свети Мартин"
+ },
+ "KP": {
+ "name": "Северна Кореја"
+ },
+ "MP": {
+ "name": "Северни МаријанÑки ОÑтрови"
+ },
+ "SC": {
+ "name": "Сејшели"
+ },
+ "SN": {
+ "name": "Сенегал"
+ },
+ "MF": {
+ "name": "Сент Мартин"
+ },
+ "PM": {
+ "name": "Сент Пјер и Микелан"
+ },
+ "EA": {
+ "name": "Сеута и Мелиља"
+ },
+ "SL": {
+ "name": "Сиера Леоне"
+ },
+ "SG": {
+ "name": "Сингапур"
+ },
+ "SY": {
+ "name": "Сирија"
+ },
+ "SK": {
+ "name": "Словачка"
+ },
+ "SI": {
+ "name": "Словенија"
+ },
+ "US": {
+ "name": "Соединети ÐмериканÑки Држави"
+ },
+ "SB": {
+ "name": "СоломонÑки ОÑтрови"
+ },
+ "SO": {
+ "name": "Сомалија"
+ },
+ "RS": {
+ "name": "Србија"
+ },
+ "SD": {
+ "name": "Судан"
+ },
+ "SR": {
+ "name": "Суринам"
+ },
+ "TW": {
+ "name": "Тајван"
+ },
+ "TH": {
+ "name": "Тајланд"
+ },
+ "TZ": {
+ "name": "Танзанија"
+ },
+ "TJ": {
+ "name": "ТаџикиÑтан"
+ },
+ "TG": {
+ "name": "Того"
+ },
+ "TK": {
+ "name": "Токелау"
+ },
+ "TO": {
+ "name": "Тонга"
+ },
+ "TT": {
+ "name": "Тринидад и Тобаго"
+ },
+ "TA": {
+ "name": "ТриÑтан да Куња"
+ },
+ "TV": {
+ "name": "Тувалу"
+ },
+ "TN": {
+ "name": "ТуниÑ"
+ },
+ "TM": {
+ "name": "ТуркмениÑтан"
+ },
+ "TR": {
+ "name": "Турција"
+ },
+ "UG": {
+ "name": "Уганда"
+ },
+ "UZ": {
+ "name": "УзбекиÑтан"
+ },
+ "UA": {
+ "name": "Украина"
+ },
+ "HU": {
+ "name": "Унгарија"
+ },
+ "UY": {
+ "name": "Уругвај"
+ },
+ "FO": {
+ "name": "ФарÑки ОÑтрови"
+ },
+ "PH": {
+ "name": "Филипини"
+ },
+ "FI": {
+ "name": "ФинÑка"
+ },
+ "FJ": {
+ "name": "Фиџи"
+ },
+ "FK": {
+ "name": "ФолкландÑки ОÑтрови"
+ },
+ "FR": {
+ "name": "Франција"
+ },
+ "GF": {
+ "name": "ФранцуÑка Гвајана"
+ },
+ "PF": {
+ "name": "ФранцуÑка Полинезија"
+ },
+ "TF": {
+ "name": "ФранцуÑки Јужни територии"
+ },
+ "HT": {
+ "name": "Хаити"
+ },
+ "NL": {
+ "name": "Холандија"
+ },
+ "HK": {
+ "name": "Хонг Конг С.Ð.Р Кина"
+ },
+ "HN": {
+ "name": "ХондураÑ"
+ },
+ "HR": {
+ "name": "ХрватÑка"
+ },
+ "CF": {
+ "name": "ЦентралноафриканÑка Република"
+ },
+ "ME": {
+ "name": "Црна Гора"
+ },
+ "TD": {
+ "name": "Чад"
+ },
+ "CL": {
+ "name": "Чиле"
+ },
+ "JE": {
+ "name": "ÐерÑи"
+ },
+ "DJ": {
+ "name": "Ðибути"
+ },
+ "CH": {
+ "name": "Швајцарија"
+ },
+ "SE": {
+ "name": "ШведÑка"
+ },
+ "ES": {
+ "name": "Шпанија"
+ },
+ "LK": {
+ "name": "Шри Ланка"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ml.json b/library/intl/resources/country/ml.json
new file mode 100644
index 000000000..398c97dd3
--- /dev/null
+++ b/library/intl/resources/country/ml.json
@@ -0,0 +1,761 @@
+{
+ "AQ": {
+ "name": "അൻറാർടàµà´Ÿà´¿à´•àµà´•"
+ },
+ "AD": {
+ "name": "à´…à´¨àµà´±àµ‹à´±"
+ },
+ "AF": {
+ "name": "à´…à´«àµâ€Œà´—ാനിസàµà´¥à´¾àµ»"
+ },
+ "US": {
+ "name": "അമേരികàµà´•àµ» à´à´•àµà´¯à´¨à´¾à´Ÿàµà´•àµ¾"
+ },
+ "AS": {
+ "name": "അമേരികàµà´•àµ» സമോവ"
+ },
+ "AO": {
+ "name": "അംഗോള"
+ },
+ "IE": {
+ "name": "അയർലാൻഡàµ"
+ },
+ "AR": {
+ "name": "അർജൻറീന"
+ },
+ "AM": {
+ "name": "അർമേനിയ"
+ },
+ "AX": {
+ "name": "അലൻഡൠദàµà´µàµ€à´ªàµà´•àµ¾"
+ },
+ "AL": {
+ "name": "അൽബേനിയ"
+ },
+ "AC": {
+ "name": "അസൻഷൻ à´¦àµà´µàµ€à´ªàµ"
+ },
+ "AZ": {
+ "name": "അസർബൈജാൻ"
+ },
+ "DZ": {
+ "name": "അൾജീരിയ"
+ },
+ "AW": {
+ "name": "അറൂബ"
+ },
+ "AI": {
+ "name": "ആൻഗàµà´µà´¿à´²àµà´²"
+ },
+ "AG": {
+ "name": "ആൻറിഗàµà´µà´¯àµà´‚ ബർബàµà´¡à´¯àµà´‚"
+ },
+ "EC": {
+ "name": "ഇകàµà´µà´¡àµ‹àµ¼"
+ },
+ "GQ": {
+ "name": "ഇകàµà´µà´±àµà´±àµ‹à´±à´¿à´¯àµ½ ഗിനിയ"
+ },
+ "ID": {
+ "name": "ഇനàµà´¤àµ‹à´¨àµ‡à´·àµà´¯"
+ },
+ "IN": {
+ "name": "ഇനàµà´¤àµà´¯"
+ },
+ "IL": {
+ "name": "ഇസàµà´°à´¾à´¯àµ‡àµ½"
+ },
+ "IQ": {
+ "name": "ഇറാഖàµ"
+ },
+ "IR": {
+ "name": "ഇറാൻ"
+ },
+ "IT": {
+ "name": "ഇറàµà´±à´²à´¿"
+ },
+ "EG": {
+ "name": "ഈജിപàµà´¤àµ"
+ },
+ "UA": {
+ "name": "ഉകàµà´°àµ†à´¯àµâ€Œàµ»"
+ },
+ "UG": {
+ "name": "ഉഗാണàµà´Ÿ"
+ },
+ "MP": {
+ "name": "ഉതàµà´¤à´° മറിയാനാ à´¦àµà´µàµ€à´ªàµà´•àµ¾"
+ },
+ "KP": {
+ "name": "ഉതàµà´¤à´°à´•àµŠà´±à´¿à´¯"
+ },
+ "UZ": {
+ "name": "ഉസàµâ€Œà´¬àµ†à´•àµà´•à´¿à´¸àµà´¥à´¾àµ»"
+ },
+ "UY": {
+ "name": "ഉറàµà´—àµà´µàµ‡"
+ },
+ "ET": {
+ "name": "à´Žà´¤àµà´¯àµ‹à´ªàµà´¯"
+ },
+ "SV": {
+ "name": "എൽ സാൽവദോർ"
+ },
+ "EE": {
+ "name": "à´Žà´¸àµà´±àµà´±àµ‹à´£à´¿à´¯â€"
+ },
+ "ER": {
+ "name": "എറിതàµà´°à´¿à´¯"
+ },
+ "IM": {
+ "name": "à´àµ½ ഓഫൠമാൻ"
+ },
+ "IS": {
+ "name": "à´à´¸àµâ€Œà´²à´¾à´¨àµà´±àµ"
+ },
+ "OM": {
+ "name": "ഒമാൻ"
+ },
+ "AT": {
+ "name": "à´“à´¸àµà´Ÿàµà´°à´¿à´¯"
+ },
+ "AU": {
+ "name": "à´“à´¸àµâ€Œà´Ÿàµà´°àµ‡à´²à´¿à´¯"
+ },
+ "KH": {
+ "name": "കംബോഡിയ"
+ },
+ "KZ": {
+ "name": "കസാഖിസàµà´¥à´¾àµ»"
+ },
+ "CA": {
+ "name": "കാനഡ"
+ },
+ "IC": {
+ "name": "കാനറി à´¦àµà´µàµ€à´ªàµà´•àµ¾"
+ },
+ "CM": {
+ "name": "കാമറൂൺ"
+ },
+ "KI": {
+ "name": "കിരിബാടàµà´Ÿà´¿"
+ },
+ "KG": {
+ "name": "കിർഗിസàµà´¥à´¾àµ»"
+ },
+ "CK": {
+ "name": "à´•àµà´•àµà´•àµ à´¦àµà´µàµ€à´ªàµà´•àµ¾"
+ },
+ "KW": {
+ "name": "à´•àµà´µàµˆà´±àµà´±àµ"
+ },
+ "CW": {
+ "name": "à´•àµà´±à´¾à´•à´¾à´µàµ‹"
+ },
+ "KE": {
+ "name": "കെനിയ"
+ },
+ "CV": {
+ "name": "കേപàµà´ªàµ വെർദെ"
+ },
+ "KY": {
+ "name": "കേമാൻ à´¦àµà´µàµ€à´ªàµà´•àµ¾"
+ },
+ "XK": {
+ "name": "കൊസോവൊ"
+ },
+ "CO": {
+ "name": "കൊളംബിയ"
+ },
+ "CC": {
+ "name": "കോകàµà´•à´¸àµ à´¦àµà´µàµ€à´ªàµà´•àµ¾"
+ },
+ "CI": {
+ "name": "കോടàµà´Ÿàµ à´¡à´¿ വാർ"
+ },
+ "KM": {
+ "name": "കോമൊറോസàµ"
+ },
+ "CD": {
+ "name": "കോംഗോ - കിൻഷാസ"
+ },
+ "CG": {
+ "name": "കോംഗോ - à´¬àµà´°à´¾à´¸à´µà´¿à´²àµà´²à´¿"
+ },
+ "CR": {
+ "name": "കോസàµà´±àµà´±à´±à´¿à´•àµà´•"
+ },
+ "CU": {
+ "name": "à´•àµà´¯àµ‚à´¬"
+ },
+ "CX": {
+ "name": "à´•àµà´°à´¿à´¸àµà´®à´¸àµ à´¦àµà´µàµ€à´ªàµ"
+ },
+ "HR": {
+ "name": "à´•àµà´°àµŠà´¯àµ‡à´·àµà´¯"
+ },
+ "QA": {
+ "name": "à´–à´¤àµà´¤àµ¼"
+ },
+ "GY": {
+ "name": "ഗയാന"
+ },
+ "GA": {
+ "name": "ഗാബൺ"
+ },
+ "GM": {
+ "name": "ഗാംബിയ"
+ },
+ "GN": {
+ "name": "ഗിനിയ"
+ },
+ "GW": {
+ "name": "ഗിനിയ-ബിസൗ"
+ },
+ "GG": {
+ "name": "ഗേൺസി"
+ },
+ "GD": {
+ "name": "à´—àµà´°à´¨àµ‡à´¡"
+ },
+ "GL": {
+ "name": "à´—àµà´°àµ€àµ»à´²à´¾àµ»à´±àµ"
+ },
+ "GR": {
+ "name": "à´—àµà´°àµ€à´¸àµ"
+ },
+ "GT": {
+ "name": "à´—àµà´µà´¾à´Ÿàµà´Ÿà´¿à´®à´¾à´²"
+ },
+ "GP": {
+ "name": "à´—àµà´µà´¾à´¡à´²àµ‚à´ªàµà´ªàµ"
+ },
+ "GU": {
+ "name": "à´—àµà´µà´¾à´‚"
+ },
+ "GH": {
+ "name": "ഘാന"
+ },
+ "CL": {
+ "name": "ചിലി"
+ },
+ "CZ": {
+ "name": "ചെകàµà´•àµ റിപàµà´ªà´¬àµà´²à´¿à´•àµ"
+ },
+ "CN": {
+ "name": "ചൈന"
+ },
+ "TD": {
+ "name": "ഛാഡàµ"
+ },
+ "JP": {
+ "name": "ജപàµà´ªà´¾àµ»"
+ },
+ "JM": {
+ "name": "ജമൈകàµà´•"
+ },
+ "DE": {
+ "name": "ജർമനി"
+ },
+ "GI": {
+ "name": "ജിബàµà´°à´¾àµ¾à´Ÿàµà´Ÿàµ¼"
+ },
+ "JE": {
+ "name": "ജേഴàµà´¸à´¿"
+ },
+ "GE": {
+ "name": "ജോർജàµà´œà´¿à´¯"
+ },
+ "JO": {
+ "name": "ജോർദàµà´¦à´¾àµ»"
+ },
+ "TC": {
+ "name": "ടർകàµà´•àµâ€Œà´¸àµà´‚ കെയàµâ€Œà´•àµà´•àµ‹ à´¦àµà´µàµ€à´ªàµà´•à´³àµà´‚"
+ },
+ "TZ": {
+ "name": "ടാൻസാനിയ"
+ },
+ "TN": {
+ "name": "à´Ÿàµà´£àµ€à´·àµà´¯"
+ },
+ "TV": {
+ "name": "à´Ÿàµà´µà´¾à´²àµ"
+ },
+ "TK": {
+ "name": "ടോകàµà´•àµ†à´²àµ‚"
+ },
+ "TG": {
+ "name": "ടോഗോ"
+ },
+ "TO": {
+ "name": "ടോംഗ"
+ },
+ "TA": {
+ "name": "à´Ÿàµà´°à´¸àµà´±àµà´±àµ» à´¡ കൂന"
+ },
+ "TT": {
+ "name": "à´Ÿàµà´°à´¿à´¨à´¿à´¡à´¾à´¡àµà´‚ à´Ÿàµà´¬à´¾à´—ോയàµà´‚"
+ },
+ "DG": {
+ "name": "ഡീഗോ à´—àµà´°à´¾à´·àµà´¯"
+ },
+ "DK": {
+ "name": "ഡെൻമാർകàµà´•àµ"
+ },
+ "DM": {
+ "name": "ഡൊമിനികàµà´•"
+ },
+ "DO": {
+ "name": "ഡൊമിനികàµà´•àµ» റിപàµà´ªà´¬àµà´²à´¿à´•àµ"
+ },
+ "TJ": {
+ "name": "താജികàµà´•à´¿à´¸àµà´¥à´¾àµ»"
+ },
+ "TH": {
+ "name": "തായàµâ€Œà´²à´¾àµ»à´¡àµ"
+ },
+ "TW": {
+ "name": "തായàµâ€Œà´µà´¾àµ»"
+ },
+ "TL": {
+ "name": "തിമോർ-ലെസàµà´±àµà´±àµ†"
+ },
+ "TR": {
+ "name": "à´¤àµàµ¼à´•àµà´•à´¿"
+ },
+ "TM": {
+ "name": "à´¤àµàµ¼à´•àµà´•àµà´®àµ†à´¨à´¿à´¸àµà´¥à´¾àµ»"
+ },
+ "GS": {
+ "name": "ദകàµà´·à´¿à´£ ജോർജàµà´œà´¿à´¯à´¯àµà´‚ ദകàµà´·à´¿à´£ സാൻഡàµâ€Œà´µà´¿à´šàµà´šàµ à´¦àµà´µàµ€à´ªàµà´•à´³àµà´‚"
+ },
+ "SS": {
+ "name": "ദകàµà´·à´¿à´£ à´¸àµà´¡à´¾àµ»"
+ },
+ "KR": {
+ "name": "ദകàµà´·à´¿à´£à´•àµŠà´±à´¿à´¯"
+ },
+ "ZA": {
+ "name": "ദകàµà´·à´¿à´£à´¾à´«àµà´°à´¿à´•àµà´•"
+ },
+ "DJ": {
+ "name": "ദിജിബൗടàµà´Ÿà´¿"
+ },
+ "NA": {
+ "name": "നമീബിയ"
+ },
+ "NI": {
+ "name": "നികàµà´•à´°à´¾à´—àµà´µ"
+ },
+ "NL": {
+ "name": "നെതർലാൻഡàµâ€Œà´¸àµ"
+ },
+ "NP": {
+ "name": "നേപàµà´ªà´¾àµ¾"
+ },
+ "NE": {
+ "name": "നൈജർ"
+ },
+ "NG": {
+ "name": "നൈജീരിയ"
+ },
+ "NF": {
+ "name": "നോർഫോകൠദàµà´µàµ€à´ªàµ"
+ },
+ "NO": {
+ "name": "നോർവെ"
+ },
+ "NR": {
+ "name": "നൗറàµ"
+ },
+ "NU": {
+ "name": "à´¨àµà´¯àµ‚യി"
+ },
+ "NZ": {
+ "name": "à´¨àµà´¯àµ‚സിലാൻറàµ"
+ },
+ "PA": {
+ "name": "പനാമ"
+ },
+ "PY": {
+ "name": "പരാഗàµà´µàµ‡"
+ },
+ "PW": {
+ "name": "പലാവàµ"
+ },
+ "EH": {
+ "name": "പശàµà´šà´¿à´® സഹാറ"
+ },
+ "PK": {
+ "name": "പാകàµà´•à´¿à´¸àµà´¥à´¾àµ»"
+ },
+ "PG": {
+ "name": "പാപàµà´ªàµà´µ à´¨àµà´¯àµ‚ ഗിനിയ"
+ },
+ "PS": {
+ "name": "പാലസàµâ€Œà´¤àµ€àµ» à´ªàµà´°à´¦àµ‡à´¶à´™àµà´™àµ¾"
+ },
+ "PN": {
+ "name": "പിറàµà´±àµâ€Œà´•àµ†à´¯àµâ€Œàµ» à´¦àµà´µàµ€à´ªàµà´•àµ¾"
+ },
+ "NC": {
+ "name": "à´ªàµà´¤à´¿à´¯ കാലിഡോണിയ"
+ },
+ "PE": {
+ "name": "പെറàµ"
+ },
+ "PT": {
+ "name": "പോർചàµà´šàµà´—ൽ"
+ },
+ "PL": {
+ "name": "പോളണàµà´Ÿàµ"
+ },
+ "PR": {
+ "name": "à´ªàµà´¯àµ‚ർടàµà´Ÿàµ‹ റികàµà´•àµ‹"
+ },
+ "FO": {
+ "name": "ഫറോ à´¦àµà´µàµ€à´ªàµà´•àµ¾"
+ },
+ "FK": {
+ "name": "ഫാകàµà´•àµâ€Œà´²à´¾à´¨àµà´±àµ à´¦àµà´µàµ€à´ªàµà´•àµ¾"
+ },
+ "FJ": {
+ "name": "ഫിജി"
+ },
+ "FI": {
+ "name": "ഫിൻലാൻഡàµ"
+ },
+ "PH": {
+ "name": "ഫിലിപàµà´ªàµˆàµ»à´¸àµ"
+ },
+ "GF": {
+ "name": "à´«àµà´°à´žàµà´šàµ ഗയാന"
+ },
+ "TF": {
+ "name": "à´«àµà´°à´žàµà´šàµ ദകàµà´·à´¿à´£ ഭൂപàµà´°à´¦àµ‡à´¶à´‚"
+ },
+ "PF": {
+ "name": "à´«àµà´°à´žàµà´šàµ പോളിനേഷàµà´¯"
+ },
+ "FR": {
+ "name": "à´«àµà´°à´¾àµ»à´¸àµ"
+ },
+ "BD": {
+ "name": "ബംഗàµà´²à´¾à´¦àµ‡à´¶àµ"
+ },
+ "BM": {
+ "name": "ബർമàµà´¡"
+ },
+ "BS": {
+ "name": "ബഹാമാസàµ"
+ },
+ "BH": {
+ "name": "ബഹàµà´±à´¿àµ»"
+ },
+ "BG": {
+ "name": "ബൾഗേറിയ"
+ },
+ "BI": {
+ "name": "ബറàµà´£àµà´Ÿà´¿"
+ },
+ "BB": {
+ "name": "ബാർബഡോസàµ"
+ },
+ "BF": {
+ "name": "à´¬àµàµ¼à´•àµà´•à´¿à´¨à´¾ ഫാസോ"
+ },
+ "BJ": {
+ "name": "ബെനിൻ"
+ },
+ "BY": {
+ "name": "ബെലറൂസàµ"
+ },
+ "BZ": {
+ "name": "ബെലീസàµ"
+ },
+ "BE": {
+ "name": "ബെൽജിയം"
+ },
+ "BQ": {
+ "name": "ബൊണെയàµàµ¼, സിനàµà´±àµ à´¯àµà´¸àµà´±àµà´±àµ‡à´·àµà´¯à´¸àµ, സാബ à´Žà´¨àµà´¨à´¿à´µ"
+ },
+ "BO": {
+ "name": "ബൊളീവിയ"
+ },
+ "BW": {
+ "name": "ബോടàµà´¸àµà´µà´¾à´¨"
+ },
+ "BA": {
+ "name": "ബോസàµà´¨à´¿à´¯à´¯àµà´‚ ഹെർസഗോവിനയàµà´‚"
+ },
+ "BR": {
+ "name": "à´¬àµà´°à´¸àµ€àµ½"
+ },
+ "GB": {
+ "name": "à´¬àµà´°à´¿à´Ÿàµà´Ÿàµ»"
+ },
+ "IO": {
+ "name": "à´¬àµà´°à´¿à´Ÿàµà´Ÿàµ€à´·àµ ഇനàµà´¤àµà´¯àµ» മഹാസമàµà´¦àµà´° à´ªàµà´°à´¦àµ‡à´¶à´‚"
+ },
+ "VG": {
+ "name": "à´¬àµà´°à´¿à´Ÿàµà´Ÿàµ€à´·àµ വെർജിൻ à´¦àµà´µàµ€à´ªàµà´•àµ¾"
+ },
+ "BN": {
+ "name": "à´¬àµà´°àµ‚ണൈ"
+ },
+ "BT": {
+ "name": "ഭൂടàµà´Ÿà´¾àµ»"
+ },
+ "MO": {
+ "name": "മകàµà´•à´¾à´µàµ‹ SAR ചൈന"
+ },
+ "MG": {
+ "name": "മഡഗാസàµà´•àµ¼"
+ },
+ "MN": {
+ "name": "മംഗോളിയ"
+ },
+ "YT": {
+ "name": "മയോടàµà´Ÿà´¿"
+ },
+ "MW": {
+ "name": "മലാവി"
+ },
+ "MY": {
+ "name": "മലേഷàµà´¯"
+ },
+ "MD": {
+ "name": "മൾഡോവ"
+ },
+ "MQ": {
+ "name": "മാർടàµà´Ÿà´¿à´¨à´¿à´•àµà´•àµ"
+ },
+ "MH": {
+ "name": "മാർഷൽâ€â€ à´¦àµà´µàµ€à´ªàµà´•àµ¾"
+ },
+ "ML": {
+ "name": "മാലി"
+ },
+ "MV": {
+ "name": "മാലിദàµà´µàµ€à´ªàµ"
+ },
+ "MK": {
+ "name": "മാസിഡോണിയ"
+ },
+ "MT": {
+ "name": "മാൾടàµà´Ÿ"
+ },
+ "MX": {
+ "name": "മെകàµà´¸à´¿à´•àµà´•àµ‹"
+ },
+ "FM": {
+ "name": "മൈകàµà´°àµ‹à´¨àµ‡à´·àµà´¯"
+ },
+ "MC": {
+ "name": "മൊണാകàµà´•àµ‹"
+ },
+ "MS": {
+ "name": "മൊണàµà´Ÿàµ†à´¸à´°à´¤àµà´¤àµ"
+ },
+ "MZ": {
+ "name": "മൊസാംബികàµà´•àµ"
+ },
+ "MA": {
+ "name": "മൊറോകàµà´•àµŠ"
+ },
+ "ME": {
+ "name": "മോണàµà´Ÿàµ†à´¨àµ†à´—àµà´°àµ‹"
+ },
+ "MR": {
+ "name": "മൗറിറàµà´±à´¾à´¨à´¿à´¯"
+ },
+ "MU": {
+ "name": "മൗറീഷàµà´¯à´¸àµ"
+ },
+ "MM": {
+ "name": "à´®àµà´¯à´¾àµ»à´®à´¾àµ¼ (ബർമàµà´®)"
+ },
+ "UM": {
+ "name": "à´¯àµ.à´Žà´¸àµ. à´¦àµà´µàµ€à´ªà´¸à´®àµ‚ഹങàµà´™àµ¾"
+ },
+ "VI": {
+ "name": "à´¯àµ.à´Žà´¸àµ. വെർജിൻ à´¦àµà´µàµ€à´ªàµà´•àµ¾"
+ },
+ "AE": {
+ "name": "à´¯àµà´£àµˆà´±àµà´±à´¡àµ അറബൠഎമിറൈറàµà´±àµâ€Œà´¸àµ"
+ },
+ "YE": {
+ "name": "യെമൻ"
+ },
+ "LU": {
+ "name": "ലകàµà´¸à´‚ബർഗàµ"
+ },
+ "LA": {
+ "name": "ലാവോസàµ"
+ },
+ "LV": {
+ "name": "ലാറàµà´±àµà´µà´¿à´¯"
+ },
+ "LI": {
+ "name": "ലിചàµà´šàµºà´¸àµà´±àµà´±àµˆàµ»"
+ },
+ "LT": {
+ "name": "ലിതàµà´µà´¾à´¨à´¿à´¯"
+ },
+ "LY": {
+ "name": "ലിബിയ"
+ },
+ "LB": {
+ "name": "ലെബനൻ"
+ },
+ "LS": {
+ "name": "ലെസോതോ"
+ },
+ "LR": {
+ "name": "ലൈബീരിയ"
+ },
+ "VA": {
+ "name": "വതàµà´¤à´¿à´•àµà´•à´¾àµ»"
+ },
+ "VU": {
+ "name": "വനàµà´µà´¾à´¤àµ"
+ },
+ "WF": {
+ "name": "വാലിസൠആനàµà´±àµ à´«àµà´¯àµ‚à´šàµà´¯àµà´¨"
+ },
+ "VN": {
+ "name": "വിയറàµà´±àµà´¨à´¾à´‚"
+ },
+ "VE": {
+ "name": "വെനിസàµà´µàµ‡à´²"
+ },
+ "LK": {
+ "name": "à´¶àµà´°àµ€à´²à´™àµà´•"
+ },
+ "WS": {
+ "name": "സമോവ"
+ },
+ "SM": {
+ "name": "സാൻ മറിനോ"
+ },
+ "ZM": {
+ "name": "സാംബിയ"
+ },
+ "ST": {
+ "name": "സാവോ ടോമàµà´‚ à´ªàµà´°à´¿àµ»à´¸à´¿à´ªàµ†à´¯àµà´‚"
+ },
+ "SX": {
+ "name": "സിനàµà´±àµ മാർടàµà´Ÿàµ†àµ»"
+ },
+ "SG": {
+ "name": "സിംഗപàµà´ªàµàµ¼"
+ },
+ "ZW": {
+ "name": "സിംബാബàµâ€Œà´µàµ‡"
+ },
+ "SL": {
+ "name": "സിയെറ ലിയോൺ"
+ },
+ "SY": {
+ "name": "സിറിയ"
+ },
+ "SD": {
+ "name": "à´¸àµà´¡à´¾àµ»"
+ },
+ "SR": {
+ "name": "à´¸àµà´°à´¿à´¨àµ†à´¯à´¿à´‚"
+ },
+ "SN": {
+ "name": "സെനഗൽ"
+ },
+ "CF": {
+ "name": "സെൻടàµà´°àµ½ ആഫàµà´°à´¿à´•àµà´•àµ» റിപàµà´ªà´¬àµà´²à´¿à´•àµ"
+ },
+ "KN": {
+ "name": "സെനàµà´±àµ à´•à´¿à´±àµà´±àµâ€Œà´¸àµà´‚ നെവിസàµà´‚"
+ },
+ "PM": {
+ "name": "സെനàµà´±àµ പിയറിയàµà´‚ മികàµà´•à´²à´£àµà´‚"
+ },
+ "BL": {
+ "name": "സെനàµà´±àµ ബാർതàµà´¤à´²à´®à´¿"
+ },
+ "MF": {
+ "name": "സെൻറൠമാർടàµà´Ÿà´¿àµ»"
+ },
+ "LC": {
+ "name": "സെൻറൠലൂസിയ"
+ },
+ "VC": {
+ "name": "സെനàµà´±àµ വിൻസെനàµà´±àµà´‚ à´—àµà´°à´¨àµ†à´¡àµˆàµ»à´¸àµà´‚"
+ },
+ "SH": {
+ "name": "സെൻറൠഹെലീന"
+ },
+ "EA": {
+ "name": "സെയൂതàµà´¤ ആൻഡൠമെലിയ"
+ },
+ "SC": {
+ "name": "സെയàµâ€Œà´·àµ†àµ½à´¸àµ"
+ },
+ "RS": {
+ "name": "സെർബിയ"
+ },
+ "CY": {
+ "name": "സൈപàµà´°à´¸àµ"
+ },
+ "SO": {
+ "name": "സോമാലിയ"
+ },
+ "SB": {
+ "name": "സോളമൻ†ദàµà´µàµ€à´ªàµà´•àµ¾"
+ },
+ "SA": {
+ "name": "സൗദി അറേബàµà´¯"
+ },
+ "ES": {
+ "name": "à´¸àµâ€Œà´ªàµ†à´¯à´¿àµ»"
+ },
+ "SK": {
+ "name": "à´¸àµà´²àµ‹à´µà´¾à´•àµà´¯"
+ },
+ "SI": {
+ "name": "à´¸àµà´²àµ‹à´µàµ‡à´¨à´¿à´¯"
+ },
+ "SJ": {
+ "name": "à´¸àµà´µà´¾àµ½à´¬à´¾à´¡àµà´‚ ജാൻ മായേനàµà´‚"
+ },
+ "SZ": {
+ "name": "à´¸àµà´µà´¾à´¸à´¿à´²à´¾àµ»à´±àµ"
+ },
+ "CH": {
+ "name": "à´¸àµà´µà´¿à´±àµà´±àµà´¸àµ¼à´²à´¾àµ»à´¡àµ"
+ },
+ "SE": {
+ "name": "à´¸àµà´µàµ€à´¡àµ»"
+ },
+ "HU": {
+ "name": "ഹംഗറി"
+ },
+ "HT": {
+ "name": "ഹെയàµà´¤à´¿"
+ },
+ "HK": {
+ "name": "ഹോങൠകോങൠഎസàµ.à´.ആർ. ചൈന"
+ },
+ "HN": {
+ "name": "ഹോണàµà´Ÿàµà´±à´¾à´¸àµ"
+ },
+ "RU": {
+ "name": "റഷàµà´¯"
+ },
+ "RE": {
+ "name": "റീയൂണിയൻ"
+ },
+ "RW": {
+ "name": "à´±àµà´µà´¾à´£àµà´Ÿ"
+ },
+ "RO": {
+ "name": "റൊമാനിയ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/mn.json b/library/intl/resources/country/mn.json
new file mode 100644
index 000000000..7497cd6da
--- /dev/null
+++ b/library/intl/resources/country/mn.json
@@ -0,0 +1,761 @@
+{
+ "AU": {
+ "name": "ÐвÑтрали"
+ },
+ "AT": {
+ "name": "ÐвÑтри"
+ },
+ "AZ": {
+ "name": "Ðзербайжан"
+ },
+ "AX": {
+ "name": "Ðландын Ðрлууд"
+ },
+ "AL": {
+ "name": "Ðлбани"
+ },
+ "DZ": {
+ "name": "Ðлжир"
+ },
+ "US": {
+ "name": "Ðмерикийн ÐÑгдÑÑн УлÑ"
+ },
+ "AS": {
+ "name": "Ðмерикийн Самоа"
+ },
+ "AI": {
+ "name": "Ðнгила"
+ },
+ "AO": {
+ "name": "Ðнгол"
+ },
+ "AD": {
+ "name": "Ðндорра"
+ },
+ "AQ": {
+ "name": "Ðнтарктик"
+ },
+ "AG": {
+ "name": "Ðнтигуа ба Барбуда"
+ },
+ "VI": {
+ "name": "ÐÐУ-ын Виржиний Ðрлууд"
+ },
+ "UM": {
+ "name": "ÐÐУ-ын тойрÑон арлууд"
+ },
+ "AE": {
+ "name": "Ðрабын ÐÑгдÑÑн Эмират"
+ },
+ "AR": {
+ "name": "Ðргентин"
+ },
+ "AM": {
+ "name": "Ðрмен"
+ },
+ "AW": {
+ "name": "Ðруба"
+ },
+ "AC": {
+ "name": "ÐÑкенÑион Ðрал"
+ },
+ "AF": {
+ "name": "ÐфганиÑтан"
+ },
+ "BS": {
+ "name": "Багам"
+ },
+ "NP": {
+ "name": "Балба"
+ },
+ "BD": {
+ "name": "Бангладеш"
+ },
+ "BB": {
+ "name": "БарбадоÑ"
+ },
+ "EH": {
+ "name": "Баруун Сахар"
+ },
+ "BH": {
+ "name": "Бахрейн"
+ },
+ "BY": {
+ "name": "БеларуÑ"
+ },
+ "BE": {
+ "name": "Белги"
+ },
+ "BZ": {
+ "name": "Белиз"
+ },
+ "BJ": {
+ "name": "Бенин"
+ },
+ "BM": {
+ "name": "Бермуд"
+ },
+ "MO": {
+ "name": "БÐÐ¥ÐУ-ын ТуÑгай захиргааны Ð±Ò¯Ñ ÐœÐ°ÐºÐ°Ð¾"
+ },
+ "HK": {
+ "name": "БÐÐ¥ÐУ-ын ТуÑгай захиргааны Ð±Ò¯Ñ Ð¥Ð¾Ð½Ð³ Конг"
+ },
+ "BG": {
+ "name": "Болгар"
+ },
+ "BO": {
+ "name": "Боливи"
+ },
+ "BA": {
+ "name": "БоÑни Херцеговин"
+ },
+ "BW": {
+ "name": "БотÑвана"
+ },
+ "BR": {
+ "name": "Бразил"
+ },
+ "VG": {
+ "name": "Британийн Виржиний Ðрлууд"
+ },
+ "IO": {
+ "name": "Британийн харьÑа ЭнÑÑ‚Ñ…Ñгийн далай дахь нутаг дÑвÑгÑрүүд"
+ },
+ "BN": {
+ "name": "Бруней"
+ },
+ "BF": {
+ "name": "Буркина фаÑо"
+ },
+ "BI": {
+ "name": "Бурунди"
+ },
+ "BT": {
+ "name": "Бутан"
+ },
+ "DO": {
+ "name": "Бүгд Ðайрамдах Доминикан"
+ },
+ "CZ": {
+ "name": "Бүгд Ðайрамдах Чех УлÑ"
+ },
+ "VU": {
+ "name": "Вануату"
+ },
+ "VA": {
+ "name": "Ватикан хот улÑ"
+ },
+ "VE": {
+ "name": "ВенеÑуÑл"
+ },
+ "VN": {
+ "name": "Вьетнам"
+ },
+ "GA": {
+ "name": "Габон"
+ },
+ "HT": {
+ "name": "Гаити"
+ },
+ "GY": {
+ "name": "Гайана"
+ },
+ "GM": {
+ "name": "Гамби"
+ },
+ "GH": {
+ "name": "Гана"
+ },
+ "GP": {
+ "name": "Гваделуп"
+ },
+ "GT": {
+ "name": "Гватемал"
+ },
+ "GN": {
+ "name": "Гвиней"
+ },
+ "GW": {
+ "name": "Гвиней-БиÑау"
+ },
+ "DE": {
+ "name": "Герман"
+ },
+ "GG": {
+ "name": "ГернÑи"
+ },
+ "GI": {
+ "name": "Гибралтар"
+ },
+ "NL": {
+ "name": "Голланд"
+ },
+ "HN": {
+ "name": "ГондураÑ"
+ },
+ "GR": {
+ "name": "Грек"
+ },
+ "GD": {
+ "name": "Гренада"
+ },
+ "GL": {
+ "name": "Гренланд"
+ },
+ "GU": {
+ "name": "Гуам"
+ },
+ "GE": {
+ "name": "Гүрж"
+ },
+ "DK": {
+ "name": "Дани"
+ },
+ "DJ": {
+ "name": "Джибути"
+ },
+ "DG": {
+ "name": "Диего ГарÑиа"
+ },
+ "DM": {
+ "name": "Доминик"
+ },
+ "EG": {
+ "name": "Египет"
+ },
+ "JE": {
+ "name": "ЖерÑи"
+ },
+ "ZM": {
+ "name": "Замби"
+ },
+ "ZW": {
+ "name": "Зимбабве"
+ },
+ "CX": {
+ "name": "Зул Сарын Ðрал"
+ },
+ "IL": {
+ "name": "Израиль"
+ },
+ "ID": {
+ "name": "Индонези"
+ },
+ "IQ": {
+ "name": "Ирак"
+ },
+ "IR": {
+ "name": "Иран"
+ },
+ "IE": {
+ "name": "Ирланд"
+ },
+ "IS": {
+ "name": "ИÑланд"
+ },
+ "ES": {
+ "name": "ИÑпани"
+ },
+ "IT": {
+ "name": "Итали"
+ },
+ "GB": {
+ "name": "Их Британи"
+ },
+ "YE": {
+ "name": "Йемен"
+ },
+ "JO": {
+ "name": "Йордан"
+ },
+ "KZ": {
+ "name": "КазахÑтан"
+ },
+ "KY": {
+ "name": "Кайманы Ðрлууд"
+ },
+ "KH": {
+ "name": "Камбож"
+ },
+ "CM": {
+ "name": "Камерун"
+ },
+ "CA": {
+ "name": "Канад"
+ },
+ "IC": {
+ "name": "Канарын арлууд"
+ },
+ "CV": {
+ "name": "Капе Верде"
+ },
+ "BQ": {
+ "name": "Карибын Ðидерланд"
+ },
+ "QA": {
+ "name": "Катар"
+ },
+ "KE": {
+ "name": "Кени"
+ },
+ "CY": {
+ "name": "Кипр"
+ },
+ "KI": {
+ "name": "Кирибати"
+ },
+ "CC": {
+ "name": "ÐšÐ¾ÐºÐ¾Ñ (Кийлинг) Ðрлууд"
+ },
+ "CO": {
+ "name": "Колумб"
+ },
+ "KM": {
+ "name": "КомороÑ"
+ },
+ "CG": {
+ "name": "Конго Браззавиль"
+ },
+ "CD": {
+ "name": "Конго-КиншаÑа"
+ },
+ "XK": {
+ "name": "КоÑово"
+ },
+ "CR": {
+ "name": "КоÑта Рика"
+ },
+ "CI": {
+ "name": "Кот д’Ивуар"
+ },
+ "CU": {
+ "name": "Куба"
+ },
+ "KW": {
+ "name": "Кувейт"
+ },
+ "CW": {
+ "name": "Куракао"
+ },
+ "CK": {
+ "name": "Күүкийн Ðрлууд"
+ },
+ "KG": {
+ "name": "КыргызÑтан"
+ },
+ "LA": {
+ "name": "ЛаоÑ"
+ },
+ "LV": {
+ "name": "Латви"
+ },
+ "LS": {
+ "name": "ЛеÑото"
+ },
+ "LR": {
+ "name": "Либери"
+ },
+ "LB": {
+ "name": "Ливан"
+ },
+ "LY": {
+ "name": "Ливи"
+ },
+ "LT": {
+ "name": "Литва"
+ },
+ "LI": {
+ "name": "Лихтенштейн"
+ },
+ "LU": {
+ "name": "ЛюкÑембург"
+ },
+ "MR": {
+ "name": "Мавритани"
+ },
+ "MU": {
+ "name": "МавритуÑ"
+ },
+ "MG": {
+ "name": "МадагаÑкар"
+ },
+ "YT": {
+ "name": "Майотте"
+ },
+ "MK": {
+ "name": "Македон"
+ },
+ "MW": {
+ "name": "Малави"
+ },
+ "MY": {
+ "name": "Малайз"
+ },
+ "ML": {
+ "name": "Мали"
+ },
+ "MV": {
+ "name": "Мальдив"
+ },
+ "MT": {
+ "name": "Мальта"
+ },
+ "MA": {
+ "name": "Марокко"
+ },
+ "MQ": {
+ "name": "Мартиник"
+ },
+ "MH": {
+ "name": "Маршаллын Ðрлууд"
+ },
+ "MX": {
+ "name": "МекÑик"
+ },
+ "FM": {
+ "name": "Микронези"
+ },
+ "MZ": {
+ "name": "Мозамбик"
+ },
+ "MD": {
+ "name": "Молдав"
+ },
+ "MC": {
+ "name": "Монако"
+ },
+ "MN": {
+ "name": "Монгол"
+ },
+ "ME": {
+ "name": "Монтенегро"
+ },
+ "MS": {
+ "name": "МонтÑеррат"
+ },
+ "MM": {
+ "name": "МьÑнмар (Бурма)"
+ },
+ "IM": {
+ "name": "ÐœÑн Ðрал"
+ },
+ "NA": {
+ "name": "Ðамиби"
+ },
+ "NR": {
+ "name": "Ðауру"
+ },
+ "NE": {
+ "name": "Ðигер"
+ },
+ "NG": {
+ "name": "Ðигери"
+ },
+ "NI": {
+ "name": "Ðикарагуа"
+ },
+ "NU": {
+ "name": "ÐиуÑ"
+ },
+ "NO": {
+ "name": "Ðорвеги"
+ },
+ "NF": {
+ "name": "Ðорфолк Ðрлууд"
+ },
+ "OM": {
+ "name": "Оман"
+ },
+ "RU": {
+ "name": "ОроÑ"
+ },
+ "ZA": {
+ "name": "Өмнөд Ðфрик тив"
+ },
+ "GS": {
+ "name": "Өмнөд Жоржиа ба Өмнөд СÑндвичийн Ðрлууд"
+ },
+ "KR": {
+ "name": "Өмнөд СолонгоÑ"
+ },
+ "SS": {
+ "name": "Өмнөд Судан"
+ },
+ "PK": {
+ "name": "ПакиÑтан"
+ },
+ "PW": {
+ "name": "Палау"
+ },
+ "PS": {
+ "name": "ПалеÑтины нутаг дÑвÑгÑрүүд"
+ },
+ "PA": {
+ "name": "Панам"
+ },
+ "PG": {
+ "name": "Папуа Ð¨Ð¸Ð½Ñ Ð“Ð²Ð¸Ð½ÐµÐ¹"
+ },
+ "PY": {
+ "name": "Парагвай"
+ },
+ "PE": {
+ "name": "Перу"
+ },
+ "PN": {
+ "name": "ПиткÑрн Ðрлууд"
+ },
+ "PL": {
+ "name": "Польш"
+ },
+ "PT": {
+ "name": "Португал"
+ },
+ "PR": {
+ "name": "ПуÑрто Рико"
+ },
+ "RE": {
+ "name": "Реюньон"
+ },
+ "RW": {
+ "name": "Руанда"
+ },
+ "RO": {
+ "name": "Румын"
+ },
+ "WS": {
+ "name": "Самоа"
+ },
+ "SM": {
+ "name": "Сан-Марино"
+ },
+ "ST": {
+ "name": "Сан-Томе ба ПринÑипи"
+ },
+ "SA": {
+ "name": "Саудын Ðраб"
+ },
+ "SZ": {
+ "name": "Свазиланд"
+ },
+ "SJ": {
+ "name": "Свалбард ба Ян Майен"
+ },
+ "SC": {
+ "name": "Сейшел"
+ },
+ "SN": {
+ "name": "Сенегал"
+ },
+ "BL": {
+ "name": "Сент Бартельми"
+ },
+ "LC": {
+ "name": "Сент ЛюÑиа"
+ },
+ "SH": {
+ "name": "Сент Хелена"
+ },
+ "KN": {
+ "name": "Сент-ÐšÐ¸Ñ‚Ñ‚Ñ Ð±Ð° ÐевиÑ"
+ },
+ "MF": {
+ "name": "Сент-Мартин"
+ },
+ "RS": {
+ "name": "Серби"
+ },
+ "EA": {
+ "name": "Сеута ба МелильÑ"
+ },
+ "SG": {
+ "name": "Сингапур"
+ },
+ "SX": {
+ "name": "Синт Мартен"
+ },
+ "SY": {
+ "name": "Сири"
+ },
+ "SK": {
+ "name": "Словак"
+ },
+ "SI": {
+ "name": "Словени"
+ },
+ "SB": {
+ "name": "Соломоны Ðрлууд"
+ },
+ "SO": {
+ "name": "Сомали"
+ },
+ "SD": {
+ "name": "Судан"
+ },
+ "SR": {
+ "name": "Суринам"
+ },
+ "SL": {
+ "name": "Сьерра-Леоне"
+ },
+ "VC": {
+ "name": "СÑнт ВинÑÑнт ба Гренадин"
+ },
+ "PM": {
+ "name": "СÑнт Пьер ба Микелон"
+ },
+ "TJ": {
+ "name": "ТажикиÑтан"
+ },
+ "TW": {
+ "name": "Тайван"
+ },
+ "TH": {
+ "name": "Тайланд"
+ },
+ "TZ": {
+ "name": "Танзани"
+ },
+ "TL": {
+ "name": "Тимор-ЛеÑте"
+ },
+ "TG": {
+ "name": "Того"
+ },
+ "TK": {
+ "name": "Токелау"
+ },
+ "TO": {
+ "name": "Тонга"
+ },
+ "CF": {
+ "name": "Төв Ðфрикийн Бүгд Ðайрамдах УлÑ"
+ },
+ "TT": {
+ "name": "Тринидад ба Тобаго"
+ },
+ "TA": {
+ "name": "ТриÑтан да КуньÑ"
+ },
+ "TV": {
+ "name": "Тувалу"
+ },
+ "TN": {
+ "name": "ТуниÑ"
+ },
+ "TR": {
+ "name": "Турк"
+ },
+ "TC": {
+ "name": "Турк ба КайкоÑын Ðрлууд"
+ },
+ "TM": {
+ "name": "ТуркмениÑтан"
+ },
+ "UG": {
+ "name": "Уганда"
+ },
+ "UZ": {
+ "name": "УзбекиÑтан"
+ },
+ "UA": {
+ "name": "Украйн"
+ },
+ "HU": {
+ "name": "Унгар"
+ },
+ "WF": {
+ "name": "Ð£Ð¾Ð»Ð»Ð¸Ñ Ð±Ð° Футуна"
+ },
+ "UY": {
+ "name": "Уругвай"
+ },
+ "FO": {
+ "name": "Ð¤Ð°Ñ€Ð¾Ñ Ðрлууд"
+ },
+ "FJ": {
+ "name": "Фижи"
+ },
+ "PH": {
+ "name": "Филиппин"
+ },
+ "FI": {
+ "name": "Финланд"
+ },
+ "FK": {
+ "name": "Фолькландын Ðрлууд"
+ },
+ "FR": {
+ "name": "Франц"
+ },
+ "GF": {
+ "name": "Францын Гайана"
+ },
+ "TF": {
+ "name": "Францын өмнөд газар нутаг"
+ },
+ "PF": {
+ "name": "Францын Полинез"
+ },
+ "MP": {
+ "name": "Хойд Марианы Ðрлууд"
+ },
+ "KP": {
+ "name": "Хойд СолонгоÑ"
+ },
+ "HR": {
+ "name": "Хорват"
+ },
+ "CN": {
+ "name": "Ð¥Ñтад"
+ },
+ "TD": {
+ "name": "Чад"
+ },
+ "CL": {
+ "name": "Чили"
+ },
+ "SE": {
+ "name": "Швед"
+ },
+ "CH": {
+ "name": "Швейцари"
+ },
+ "NZ": {
+ "name": "Ð¨Ð¸Ð½Ñ Ð—ÐµÐ»Ð°Ð½Ð´"
+ },
+ "NC": {
+ "name": "Ð¨Ð¸Ð½Ñ ÐšÐ°Ð»ÐµÐ´Ð¾Ð½Ð¸"
+ },
+ "LK": {
+ "name": "Шри Ланка"
+ },
+ "EC": {
+ "name": "Эквадор"
+ },
+ "GQ": {
+ "name": "Экваторын Гвиней"
+ },
+ "SV": {
+ "name": "Эль Сальвадор"
+ },
+ "IN": {
+ "name": "ЭнÑÑ‚Ñ…Ñг"
+ },
+ "ER": {
+ "name": "Эритри"
+ },
+ "EE": {
+ "name": "ЭÑтон"
+ },
+ "ET": {
+ "name": "Этиоп"
+ },
+ "JM": {
+ "name": "Ямайк"
+ },
+ "JP": {
+ "name": "Япон"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/mr.json b/library/intl/resources/country/mr.json
new file mode 100644
index 000000000..b8eb8c84c
--- /dev/null
+++ b/library/intl/resources/country/mr.json
@@ -0,0 +1,761 @@
+{
+ "AO": {
+ "name": "अंगोला"
+ },
+ "AI": {
+ "name": "अà¤à¤—à¥à¤µà¤¿à¤²à¤¾"
+ },
+ "AQ": {
+ "name": "अंटारà¥à¤•à¥à¤Ÿà¤¿à¤•à¤¾"
+ },
+ "AG": {
+ "name": "अà¤à¤Ÿà¤¿à¤—à¥à¤µà¤¾ आणि बरà¥à¤¬à¥à¤¡à¤¾"
+ },
+ "AD": {
+ "name": "अà¤à¤¡à¥‹à¤°à¤¾"
+ },
+ "AZ": {
+ "name": "अà¤à¤°à¤¬à¥ˆà¤œà¤¾à¤¨"
+ },
+ "AF": {
+ "name": "अफगाणिसà¥à¤¤à¤¾à¤¨"
+ },
+ "AS": {
+ "name": "अमेरिकन सामोआ"
+ },
+ "AW": {
+ "name": "अरà¥à¤¬à¤¾"
+ },
+ "AR": {
+ "name": "अरà¥à¤œà¥‡à¤‚टिना"
+ },
+ "AM": {
+ "name": "अरà¥à¤®à¥‡à¤¨à¤¿à¤¯à¤¾"
+ },
+ "SV": {
+ "name": "अल सालà¥à¤µà¤¾à¤¡à¥‹à¤°"
+ },
+ "DZ": {
+ "name": "अलà¥à¤œà¥€à¤°à¤¿à¤¯à¤¾"
+ },
+ "AL": {
+ "name": "अलà¥à¤¬à¤¾à¤¨à¤¿à¤¯à¤¾"
+ },
+ "AX": {
+ "name": "अâ€à¥…लà¤à¤¡ बेटे"
+ },
+ "AC": {
+ "name": "अâ€à¥…सेनà¥à¤¶à¤¿à¤¯à¤¨ बेट"
+ },
+ "IS": {
+ "name": "आइसलà¤à¤¡"
+ },
+ "IE": {
+ "name": "आयरà¥à¤²à¤‚ड"
+ },
+ "CI": {
+ "name": "आयवà¥à¤¹à¤°à¥€ कोसà¥à¤Ÿ"
+ },
+ "ID": {
+ "name": "इंडोनेशिया"
+ },
+ "EC": {
+ "name": "इकà¥à¤µà¤¾à¤¡à¥‹à¤°"
+ },
+ "GQ": {
+ "name": "इकà¥à¤µà¥‡à¤Ÿà¥‹à¤°à¤¿à¤¯à¤² गिनी"
+ },
+ "EG": {
+ "name": "इजिपà¥à¤¤"
+ },
+ "IT": {
+ "name": "इटली"
+ },
+ "ET": {
+ "name": "इथिओपिया"
+ },
+ "IQ": {
+ "name": "इराक"
+ },
+ "IL": {
+ "name": "इसà¥à¤¤à¥à¤°à¤¾à¤‡à¤²"
+ },
+ "IM": {
+ "name": "इसà¥à¤²à¥‡ ऑफ मॅन"
+ },
+ "IR": {
+ "name": "ईराण"
+ },
+ "UZ": {
+ "name": "उà¤à¤¬à¥‡à¤•à¤¿à¤¸à¥à¤¤à¤¾à¤¨"
+ },
+ "KP": {
+ "name": "उतà¥à¤¤à¤° कोरिया"
+ },
+ "MP": {
+ "name": "उतà¥à¤¤à¤°à¥€ मारियाना बेटे"
+ },
+ "UY": {
+ "name": "उरà¥à¤—à¥à¤µà¥‡"
+ },
+ "ER": {
+ "name": "à¤à¤°à¤¿à¤Ÿà¥à¤°à¤¿à¤¯à¤¾"
+ },
+ "EE": {
+ "name": "à¤à¤¸à¥à¤Ÿà¥‹à¤¨à¤¿à¤¯à¤¾"
+ },
+ "AT": {
+ "name": "ऑसà¥à¤Ÿà¥à¤°à¤¿à¤¯à¤¾"
+ },
+ "AU": {
+ "name": "ऑसà¥à¤Ÿà¥à¤°à¥‡à¤²à¤¿à¤¯à¤¾"
+ },
+ "OM": {
+ "name": "ओमान"
+ },
+ "KH": {
+ "name": "कंबोडिया"
+ },
+ "KZ": {
+ "name": "कà¤à¤¾à¤•à¤¸à¥à¤¤à¤¾à¤¨"
+ },
+ "QA": {
+ "name": "कतार"
+ },
+ "CD": {
+ "name": "काà¤à¤—ो - किंशासा"
+ },
+ "CG": {
+ "name": "काà¤à¤—ो - बà¥à¤°à¤¾à¤à¤¾à¤µà¤¿à¤²à¥‡"
+ },
+ "KG": {
+ "name": "किरगिà¤à¤¸à¥à¤¤à¤¾à¤¨"
+ },
+ "KI": {
+ "name": "किरीबाटी"
+ },
+ "CK": {
+ "name": "कà¥à¤• बेटे"
+ },
+ "CW": {
+ "name": "कà¥à¤°à¥…को"
+ },
+ "KW": {
+ "name": "कà¥à¤µà¥‡à¤¤"
+ },
+ "CA": {
+ "name": "कॅनडा"
+ },
+ "IC": {
+ "name": "कॅनरी बेटे"
+ },
+ "CM": {
+ "name": "कॅमेरून"
+ },
+ "BQ": {
+ "name": "कॅरिबियन नेदरलà¤à¤¡à¥à¤¸"
+ },
+ "CF": {
+ "name": "केंदà¥à¤°à¥€à¤¯ अफà¥à¤°à¤¿à¤•à¥€ पà¥à¤°à¤œà¤¾à¤¸à¤¤à¥à¤¤à¤¾à¤•"
+ },
+ "KE": {
+ "name": "केनिया"
+ },
+ "CV": {
+ "name": "केप वà¥à¤¹à¤°à¥à¤¡à¥‡"
+ },
+ "KY": {
+ "name": "केमन बेटे"
+ },
+ "CC": {
+ "name": "कोकोस (कीलिंग) बेटे"
+ },
+ "KM": {
+ "name": "कोमोरोज"
+ },
+ "CO": {
+ "name": "कोलमà¥à¤¬à¤¿à¤¯à¤¾"
+ },
+ "XK": {
+ "name": "कोसोवà¥à¤¹à¥‹"
+ },
+ "CR": {
+ "name": "कोसà¥à¤Ÿà¤¾ रिका"
+ },
+ "CU": {
+ "name": "कà¥à¤¯à¥‚बा"
+ },
+ "HR": {
+ "name": "कà¥à¤°à¥‹à¤à¤¶à¤¿à¤¯à¤¾"
+ },
+ "CX": {
+ "name": "खà¥à¤°à¤¿à¤¸à¤®à¤¸ बेट"
+ },
+ "GY": {
+ "name": "गयाना"
+ },
+ "GM": {
+ "name": "गामà¥à¤¬à¤¿à¤¯à¤¾"
+ },
+ "GN": {
+ "name": "गिनी"
+ },
+ "GW": {
+ "name": "गिनी-बिसाउ"
+ },
+ "GU": {
+ "name": "गà¥à¤†à¤®"
+ },
+ "GA": {
+ "name": "गॅबॉन"
+ },
+ "GL": {
+ "name": "गà¥à¤°à¥€à¤¨à¤²à¤‚ड"
+ },
+ "GR": {
+ "name": "गà¥à¤°à¥€à¤¸"
+ },
+ "GD": {
+ "name": "गà¥à¤°à¥‡à¤¨à¥‡à¤¡à¤¾"
+ },
+ "GT": {
+ "name": "गà¥à¤µà¤¾à¤Ÿà¥‡à¤®à¤¾à¤²à¤¾"
+ },
+ "GP": {
+ "name": "गà¥à¤µà¤¾à¤¡à¥‡à¤²à¥‹à¤‰à¤ªà¥‡"
+ },
+ "GG": {
+ "name": "गà¥à¤µà¥‡à¤°à¥à¤¨à¤¸à¥‡"
+ },
+ "GH": {
+ "name": "घाना"
+ },
+ "TD": {
+ "name": "चाड"
+ },
+ "CL": {
+ "name": "चिली"
+ },
+ "CN": {
+ "name": "चीन"
+ },
+ "JP": {
+ "name": "जपान"
+ },
+ "JM": {
+ "name": "जमैका"
+ },
+ "DE": {
+ "name": "जरà¥à¤®à¤¨à¥€"
+ },
+ "JE": {
+ "name": "जरà¥à¤¸à¥€"
+ },
+ "DJ": {
+ "name": "जिबौटी"
+ },
+ "GI": {
+ "name": "जिबà¥à¤°à¤¾à¤²à¥à¤Ÿà¤°"
+ },
+ "GE": {
+ "name": "जॉरà¥à¤œà¤¿à¤¯à¤¾"
+ },
+ "JO": {
+ "name": "जॉरà¥à¤¡à¤¨"
+ },
+ "ZM": {
+ "name": "à¤à¤¾à¤®à¥à¤¬à¤¿à¤¯à¤¾"
+ },
+ "ZW": {
+ "name": "à¤à¤¿à¤®à¥à¤¬à¤¾à¤¬à¥à¤µà¥‡"
+ },
+ "CZ": {
+ "name": "à¤à¥‡à¤• पà¥à¤°à¤œà¤¾à¤¸à¤¤à¥à¤¤à¤¾à¤•"
+ },
+ "TC": {
+ "name": "टरà¥à¤•à¥à¤¸ आणि कैकोस बेटे"
+ },
+ "TZ": {
+ "name": "टांà¤à¤¾à¤¨à¤¿à¤¯à¤¾"
+ },
+ "TV": {
+ "name": "टà¥à¤µà¤¾à¤²à¥"
+ },
+ "TO": {
+ "name": "टोंगा"
+ },
+ "TG": {
+ "name": "टोगो"
+ },
+ "TN": {
+ "name": "टà¥à¤¯à¥‚निशिया"
+ },
+ "TA": {
+ "name": "टà¥à¤°à¤¿à¤¸à¥à¤Ÿà¤¨ दा कà¥à¤¨à¥à¤¹à¤¾"
+ },
+ "DK": {
+ "name": "डेनà¥à¤®à¤¾à¤°à¥à¤•"
+ },
+ "DO": {
+ "name": "डोमिनिकन पà¥à¤°à¤œà¤¾à¤¸à¤¤à¥à¤¤à¤¾à¤•"
+ },
+ "DM": {
+ "name": "डोमिनिका"
+ },
+ "TJ": {
+ "name": "ताजिकिसà¥à¤¤à¤¾à¤¨"
+ },
+ "TM": {
+ "name": "तà¥à¤°à¥à¤•à¤®à¥‡à¤¨à¤¿à¤¸à¥à¤¤à¤¾à¤¨"
+ },
+ "TR": {
+ "name": "तà¥à¤°à¥à¤•à¥€"
+ },
+ "TW": {
+ "name": "तैवान"
+ },
+ "TK": {
+ "name": "तोकेलाउ"
+ },
+ "TT": {
+ "name": "तà¥à¤°à¤¿à¤¨à¤¿à¤¦à¤¾à¤¦ आणि टोबॅगो"
+ },
+ "TH": {
+ "name": "थायलंड"
+ },
+ "ZA": {
+ "name": "दकà¥à¤·à¤¿à¤£ आफà¥à¤°à¤¿à¤•à¤¾"
+ },
+ "KR": {
+ "name": "दकà¥à¤·à¤¿à¤£ कोरिया"
+ },
+ "GS": {
+ "name": "दकà¥à¤·à¤¿à¤£ जॉरà¥à¤œà¤¿à¤¯à¤¾ आणि दकà¥à¤·à¤¿à¤£ सà¤à¤¡à¤µà¤¿à¤š बेटे"
+ },
+ "SS": {
+ "name": "दकà¥à¤·à¤¿à¤£ सà¥à¤¦à¤¾à¤¨"
+ },
+ "DG": {
+ "name": "दिà¤à¤—ो गारà¥à¤¸à¤¿à¤¯à¤¾"
+ },
+ "NR": {
+ "name": "नऊरà¥"
+ },
+ "NE": {
+ "name": "नाइजर"
+ },
+ "NA": {
+ "name": "नामिबिया"
+ },
+ "NG": {
+ "name": "नायजेरिया"
+ },
+ "NI": {
+ "name": "निकारागà¥à¤µà¤¾"
+ },
+ "NU": {
+ "name": "नीयू"
+ },
+ "NL": {
+ "name": "नेदरलà¤à¤¡"
+ },
+ "NP": {
+ "name": "नेपाळ"
+ },
+ "NF": {
+ "name": "नॉरफॉक बेट"
+ },
+ "NO": {
+ "name": "नॉरà¥à¤µà¥‡"
+ },
+ "NC": {
+ "name": "नà¥à¤¯à¥‚ कॅलेडोनिया"
+ },
+ "NZ": {
+ "name": "नà¥à¤¯à¥‚à¤à¥€à¤²à¤‚ड"
+ },
+ "PA": {
+ "name": "पनामा"
+ },
+ "PY": {
+ "name": "परागà¥à¤µà¥‡"
+ },
+ "PW": {
+ "name": "पलाऊ"
+ },
+ "EH": {
+ "name": "पशà¥à¤šà¤¿à¤® सहारा"
+ },
+ "PK": {
+ "name": "पाकिसà¥à¤¤à¤¾à¤¨"
+ },
+ "PG": {
+ "name": "पापà¥à¤† नà¥à¤¯à¥‚ गिनी"
+ },
+ "PN": {
+ "name": "पिटकैरà¥à¤¨ बेटे"
+ },
+ "TL": {
+ "name": "पूरà¥à¤µ तिमोर"
+ },
+ "PS": {
+ "name": "पॅलेसà¥à¤Ÿà¤¿à¤¨à¤¿à¤¯à¤¨ पà¥à¤°à¤¦à¥‡à¤¶"
+ },
+ "PE": {
+ "name": "पेरू"
+ },
+ "PT": {
+ "name": "पोरà¥à¤¤à¥à¤—ाल"
+ },
+ "PL": {
+ "name": "पोलंड"
+ },
+ "PR": {
+ "name": "पà¥à¤¯à¥à¤à¤°à¥à¤¤à¥‹ रिको"
+ },
+ "FJ": {
+ "name": "फिजी"
+ },
+ "FI": {
+ "name": "फिनलंड"
+ },
+ "PH": {
+ "name": "फिलिपिनà¥à¤¸"
+ },
+ "FO": {
+ "name": "फेरो बेटे"
+ },
+ "FK": {
+ "name": "फॉकलंड बेटे"
+ },
+ "FR": {
+ "name": "फà¥à¤°à¤¾à¤¨à¥à¤¸"
+ },
+ "GF": {
+ "name": "फà¥à¤°à¥‡à¤‚च गयाना"
+ },
+ "TF": {
+ "name": "फà¥à¤°à¥‡à¤‚च दाकà¥à¤·à¤¿à¤£à¤¾à¤¤à¥à¤¯ पà¥à¤°à¤¦à¥‡à¤¶"
+ },
+ "PF": {
+ "name": "फà¥à¤°à¥‡à¤‚च पॉलिनेशिया"
+ },
+ "BM": {
+ "name": "बरà¥à¤®à¥à¤¡à¤¾"
+ },
+ "BZ": {
+ "name": "बलिà¤"
+ },
+ "BG": {
+ "name": "बलà¥à¤—ेरिया"
+ },
+ "BS": {
+ "name": "बहामाज"
+ },
+ "BH": {
+ "name": "बहारीन"
+ },
+ "BD": {
+ "name": "बांगलादेश"
+ },
+ "BB": {
+ "name": "बारà¥à¤¬à¤¾à¤¡à¥‹à¤¸"
+ },
+ "BI": {
+ "name": "बà¥à¤°à¥à¤‚डी"
+ },
+ "BF": {
+ "name": "बà¥à¤°à¥à¤•à¤¿à¤¨à¤¾ फासो"
+ },
+ "BJ": {
+ "name": "बेनिन"
+ },
+ "BY": {
+ "name": "बेलारूस"
+ },
+ "BE": {
+ "name": "बेलà¥à¤œà¤¿à¤¯à¤®"
+ },
+ "BW": {
+ "name": "बोटà¥à¤¸à¤µà¤¾à¤¨à¤¾"
+ },
+ "BO": {
+ "name": "बोलिवà¥à¤¹à¤¿à¤¯à¤¾"
+ },
+ "BA": {
+ "name": "बोसà¥à¤¨à¤¿à¤¯à¤¾ अणि हरà¥à¤œà¥‡à¤—ोविना"
+ },
+ "BR": {
+ "name": "बà¥à¤°à¤¾à¤à¤¿à¤²"
+ },
+ "VG": {
+ "name": "बà¥à¤°à¤¿à¤Ÿà¤¿à¤¶ वà¥à¤¹à¤°à¥à¤œà¤¿à¤¨ बेटे"
+ },
+ "IO": {
+ "name": "बà¥à¤°à¤¿à¤Ÿà¤¿à¤¶ हिंदी महासागर कà¥à¤·à¥‡à¤¤à¥à¤°"
+ },
+ "BN": {
+ "name": "बà¥à¤°à¥à¤¨à¥‡à¤ˆ"
+ },
+ "IN": {
+ "name": "भारत"
+ },
+ "BT": {
+ "name": "भूतान"
+ },
+ "MN": {
+ "name": "मंगोलिया"
+ },
+ "MO": {
+ "name": "मकाओ à¤à¤¸à¤à¤†à¤° चीन"
+ },
+ "MW": {
+ "name": "मलावी"
+ },
+ "MY": {
+ "name": "मलेशिया"
+ },
+ "MG": {
+ "name": "मादागासà¥à¤•à¤°"
+ },
+ "FM": {
+ "name": "मायकà¥à¤°à¥‹à¤¨à¥‡à¤¶à¤¿à¤¯à¤¾"
+ },
+ "YT": {
+ "name": "मायोटà¥à¤Ÿà¥‡"
+ },
+ "MQ": {
+ "name": "मारà¥à¤Ÿà¤¿à¤¨à¤¿à¤•"
+ },
+ "MH": {
+ "name": "मारà¥à¤¶à¤² बेटे"
+ },
+ "MV": {
+ "name": "मालदीव"
+ },
+ "ML": {
+ "name": "माली"
+ },
+ "MT": {
+ "name": "मालà¥à¤Ÿà¤¾"
+ },
+ "MK": {
+ "name": "मॅसेडोनिया"
+ },
+ "MX": {
+ "name": "मेकà¥à¤¸à¤¿à¤•à¥‹"
+ },
+ "MS": {
+ "name": "मॉनà¥à¤Ÿà¥à¤¸à¥‡à¤°à¤¾à¤Ÿ"
+ },
+ "MR": {
+ "name": "मॉरिटानिया"
+ },
+ "MU": {
+ "name": "मॉरिशस"
+ },
+ "ME": {
+ "name": "मोंटेनेगà¥à¤°à¥‹"
+ },
+ "MZ": {
+ "name": "मोà¤à¤¾à¤®à¥à¤¬à¤¿à¤•"
+ },
+ "MC": {
+ "name": "मोनॅको"
+ },
+ "MA": {
+ "name": "मोरोकà¥à¤•à¥‹"
+ },
+ "MD": {
+ "name": "मोलà¥à¤¡à¥‹à¤µà¥à¤¹à¤¾"
+ },
+ "MM": {
+ "name": "मà¥à¤¯à¤¾à¤¨à¤®à¤¾à¤° (बरà¥à¤®à¤¾)"
+ },
+ "UA": {
+ "name": "यà¥à¤•à¥à¤°à¥‡à¤¨"
+ },
+ "UG": {
+ "name": "यà¥à¤—ांडा"
+ },
+ "GB": {
+ "name": "यà¥à¤¨à¤¾à¤¯à¤Ÿà¥‡à¤¡ किंगडम"
+ },
+ "US": {
+ "name": "यà¥à¤¨à¤¾à¤¯à¤Ÿà¥‡à¤¡ सà¥à¤Ÿà¥‡à¤Ÿà¥à¤¸"
+ },
+ "UM": {
+ "name": "यू.à¤à¤¸. आउटलाइंग बेटे"
+ },
+ "VI": {
+ "name": "यू.à¤à¤¸. वà¥à¤¹à¤°à¥à¤œà¤¿à¤¨ बेटे"
+ },
+ "YE": {
+ "name": "येमेन"
+ },
+ "RW": {
+ "name": "रवांडा"
+ },
+ "RU": {
+ "name": "रशिया"
+ },
+ "RE": {
+ "name": "रियà¥à¤¨à¤¿à¤¯à¤¨"
+ },
+ "RO": {
+ "name": "रोमानिया"
+ },
+ "LU": {
+ "name": "लकà¥à¤à¥‡à¤‚बरà¥à¤—"
+ },
+ "LA": {
+ "name": "लाओस"
+ },
+ "LV": {
+ "name": "लातà¥à¤µà¤¿à¤¯à¤¾"
+ },
+ "LR": {
+ "name": "लायबेरिया"
+ },
+ "LI": {
+ "name": "लिकà¥à¤Ÿà¥‡à¤¨à¤¸à¥à¤Ÿà¤¾à¤‡à¤¨"
+ },
+ "LT": {
+ "name": "लिथà¥à¤†à¤¨à¤¿à¤¯à¤¾"
+ },
+ "LY": {
+ "name": "लिबिया"
+ },
+ "LB": {
+ "name": "लेबनॉन"
+ },
+ "LS": {
+ "name": "लेसोथो"
+ },
+ "VU": {
+ "name": "वानौटà¥"
+ },
+ "WF": {
+ "name": "वालिस आणि फà¥à¤¯à¥‚चूना"
+ },
+ "VN": {
+ "name": "वà¥à¤¹à¤¿à¤à¤¤à¤¨à¤¾à¤®"
+ },
+ "VA": {
+ "name": "वà¥à¤¹à¥…टिकन सिटी"
+ },
+ "VE": {
+ "name": "वà¥à¤¹à¥‡à¤¨à¥‡à¤à¥à¤à¤²à¤¾"
+ },
+ "LK": {
+ "name": "शà¥à¤°à¥€à¤²à¤‚का"
+ },
+ "AE": {
+ "name": "संयà¥à¤•à¥à¤¤ अरब अमीरात"
+ },
+ "RS": {
+ "name": "सरà¥à¤¬à¤¿à¤¯à¤¾"
+ },
+ "ST": {
+ "name": "साओ टोम आणि पà¥à¤°à¤¿à¤‚सिपे"
+ },
+ "WS": {
+ "name": "सामोआ"
+ },
+ "CY": {
+ "name": "सायपà¥à¤°à¤¸"
+ },
+ "SG": {
+ "name": "सिंगापूर"
+ },
+ "SX": {
+ "name": "सिंट मारà¥à¤Ÿà¥‡à¤¨"
+ },
+ "SL": {
+ "name": "सिà¤à¤°à¤¾ लिओन"
+ },
+ "SY": {
+ "name": "सीरिया"
+ },
+ "SD": {
+ "name": "सà¥à¤¦à¤¾à¤¨"
+ },
+ "SR": {
+ "name": "सà¥à¤°à¤¿à¤¨à¤¾à¤®"
+ },
+ "SM": {
+ "name": "सॅन मरीनो"
+ },
+ "KN": {
+ "name": "सेंट किटà¥à¤¸ आणि नेवà¥à¤¹à¤¿à¤¸"
+ },
+ "PM": {
+ "name": "सेंट पियरे आणि मिकà¥à¤µà¥‡à¤²à¥‹à¤¨"
+ },
+ "BL": {
+ "name": "सेंट बारà¥à¤¥à¥‡à¤²à¥‡à¤®à¥€"
+ },
+ "MF": {
+ "name": "सेंट मारà¥à¤Ÿà¤¿à¤¨"
+ },
+ "LC": {
+ "name": "सेंट लà¥à¤¯à¥‚सिया"
+ },
+ "VC": {
+ "name": "सेंट वà¥à¤¹à¤¿à¤¨à¥à¤¸à¥‡à¤‚ट आणि गà¥à¤°à¥‡à¤¨à¤¡à¤¾à¤‡à¤¨à¥à¤¸"
+ },
+ "SH": {
+ "name": "सेंट हेलेना"
+ },
+ "SN": {
+ "name": "सेनेगल"
+ },
+ "SC": {
+ "name": "सेशेलà¥à¤¸"
+ },
+ "SO": {
+ "name": "सोमालिया"
+ },
+ "SB": {
+ "name": "सोलोमन बेटे"
+ },
+ "SA": {
+ "name": "सौदी अरब"
+ },
+ "ES": {
+ "name": "सà¥à¤ªà¥‡à¤¨"
+ },
+ "EA": {
+ "name": "सà¥à¤¯à¥‚टा आणि मेलिला"
+ },
+ "SK": {
+ "name": "सà¥à¤²à¥‹à¤µà¥à¤¹à¤¾à¤•à¤¿à¤¯à¤¾"
+ },
+ "SI": {
+ "name": "सà¥à¤²à¥‹à¤µà¥à¤¹à¥‡à¤¨à¤¿à¤¯à¤¾"
+ },
+ "SZ": {
+ "name": "सà¥à¤µà¤¾à¤à¤¿à¤²à¤à¤¡"
+ },
+ "SJ": {
+ "name": "सà¥à¤µà¤¾à¤²à¤¬à¤°à¥à¤¡ आणि जान मायेन"
+ },
+ "CH": {
+ "name": "सà¥à¤µà¤¿à¤¤à¥à¤à¤°à¥à¤²à¤‚ड"
+ },
+ "SE": {
+ "name": "सà¥à¤µà¥€à¤¡à¤¨"
+ },
+ "HU": {
+ "name": "हंगेरी"
+ },
+ "HK": {
+ "name": "हाà¤à¤—काà¤à¤— à¤à¤¸à¤à¤†à¤° चीन"
+ },
+ "HT": {
+ "name": "हैती"
+ },
+ "HN": {
+ "name": "होंडà¥à¤°à¤¾à¤¸"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ms.json b/library/intl/resources/country/ms.json
new file mode 100644
index 000000000..736c47018
--- /dev/null
+++ b/library/intl/resources/country/ms.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "ZA": {
+ "name": "Afrika Selatan"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "US": {
+ "name": "Amerika Syarikat"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antartika"
+ },
+ "AG": {
+ "name": "Antigua dan Barbuda"
+ },
+ "SA": {
+ "name": "Arab Saudi"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "NL": {
+ "name": "Belanda"
+ },
+ "BQ": {
+ "name": "Belanda Caribbean"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia dan Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "EA": {
+ "name": "Ceuta dan Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Cote d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curacao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiriah Arab Bersatu"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipina"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GF": {
+ "name": "Guiana Perancis"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea Bissau"
+ },
+ "GQ": {
+ "name": "Guinea Khatulistiwa"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Itali"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Jepun"
+ },
+ "DE": {
+ "name": "Jerman"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KH": {
+ "name": "Kemboja"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "AX": {
+ "name": "Kepulauan Aland"
+ },
+ "IC": {
+ "name": "Kepulauan Canary"
+ },
+ "KY": {
+ "name": "Kepulauan Cayman"
+ },
+ "CC": {
+ "name": "Kepulauan Cocos (Keeling)"
+ },
+ "CK": {
+ "name": "Kepulauan Cook"
+ },
+ "FK": {
+ "name": "Kepulauan Falkland"
+ },
+ "FO": {
+ "name": "Kepulauan Faroe"
+ },
+ "GS": {
+ "name": "Kepulauan Georgia Selatan & Sandwich Selatan"
+ },
+ "MP": {
+ "name": "Kepulauan Mariana Utara"
+ },
+ "MH": {
+ "name": "Kepulauan Marshall"
+ },
+ "PN": {
+ "name": "Kepulauan Pitcairn"
+ },
+ "SB": {
+ "name": "Kepulauan Solomon"
+ },
+ "UM": {
+ "name": "Kepulauan Terpencil A.S."
+ },
+ "TC": {
+ "name": "Kepulauan Turks dan Caicos"
+ },
+ "VI": {
+ "name": "Kepulauan Virgin A.S."
+ },
+ "VG": {
+ "name": "Kepulauan Virgin British"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KR": {
+ "name": "Korea Selatan"
+ },
+ "KP": {
+ "name": "Korea Utara"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "VA": {
+ "name": "Kota Vatican"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LB": {
+ "name": "Lubnan"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MA": {
+ "name": "Maghribi"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "EG": {
+ "name": "Mesir"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "FR": {
+ "name": "Perancis"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PF": {
+ "name": "Polinesia Perancis"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "AC": {
+ "name": "Pulau Ascension"
+ },
+ "CX": {
+ "name": "Pulau Krismas"
+ },
+ "NF": {
+ "name": "Pulau Norfolk"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "CF": {
+ "name": "Republik Afrika Tengah"
+ },
+ "CZ": {
+ "name": "Republik Czech"
+ },
+ "DO": {
+ "name": "Republik Dominica"
+ },
+ "RE": {
+ "name": "Reunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "EH": {
+ "name": "Sahara Barat"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts dan Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre dan Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vincent dan Grenadines"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Amerika"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "Sao Tome dan Principe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "ES": {
+ "name": "Sepanyol"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapura"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SS": {
+ "name": "Sudan Selatan"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard dan Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad dan Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turki"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis dan Futuna"
+ },
+ "IO": {
+ "name": "Wilayah Lautan Hindi British"
+ },
+ "PS": {
+ "name": "Wilayah Palestin"
+ },
+ "TF": {
+ "name": "Wilayah Selatan Perancis"
+ },
+ "YE": {
+ "name": "Yaman"
+ },
+ "GR": {
+ "name": "Yunani"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/mt.json b/library/intl/resources/country/mt.json
new file mode 100644
index 000000000..e471f732e
--- /dev/null
+++ b/library/intl/resources/country/mt.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistan"
+ },
+ "ZA": {
+ "name": "Afrika t’Isfel"
+ },
+ "AL": {
+ "name": "Albanija"
+ },
+ "DZ": {
+ "name": "Alġerija"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Angwilla"
+ },
+ "AQ": {
+ "name": "Antartika"
+ },
+ "AG": {
+ "name": "Antigua and Barbuda"
+ },
+ "AR": {
+ "name": "Arġentina"
+ },
+ "AM": {
+ "name": "Armenja"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Awstralja"
+ },
+ "AT": {
+ "name": "Awstrija"
+ },
+ "AZ": {
+ "name": "Ażerbajġan"
+ },
+ "BS": {
+ "name": "Baħamas"
+ },
+ "BH": {
+ "name": "Baħrajn"
+ },
+ "BD": {
+ "name": "Bangladexx"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belġju"
+ },
+ "BZ": {
+ "name": "Beliże"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BY": {
+ "name": "Bjelorussja"
+ },
+ "BO": {
+ "name": "Bolivja"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BA": {
+ "name": "Bożnija Ħerżegovina"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunej"
+ },
+ "BG": {
+ "name": "Bulgarija"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butan"
+ },
+ "TD": {
+ "name": "ÄŠad"
+ },
+ "CL": {
+ "name": "ÄŠili"
+ },
+ "CY": {
+ "name": "ÄŠipru"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danimarka"
+ },
+ "CD": {
+ "name": "Democratic Republic of the Congo"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EG": {
+ "name": "EÄ¡ittu"
+ },
+ "EC": {
+ "name": "Ekwador"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emirati Għarab Maqgħuda"
+ },
+ "ER": {
+ "name": "Eritreja"
+ },
+ "EE": {
+ "name": "Estonja"
+ },
+ "ET": {
+ "name": "Etijopja"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FJ": {
+ "name": "Fiġi"
+ },
+ "PH": {
+ "name": "Filippini"
+ },
+ "FI": {
+ "name": "Finlandja"
+ },
+ "FR": {
+ "name": "Franza"
+ },
+ "JM": {
+ "name": "Ä amajka"
+ },
+ "DJ": {
+ "name": "Ä ibuti"
+ },
+ "JO": {
+ "name": "Ä ordan"
+ },
+ "GE": {
+ "name": "Ġorġja"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambja"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GQ": {
+ "name": "Ginea Ekwatorjali"
+ },
+ "GW": {
+ "name": "Ginea-Bissaw"
+ },
+ "GN": {
+ "name": "Gineja"
+ },
+ "GR": {
+ "name": "Greċja"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grinlandja"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Gujana"
+ },
+ "GF": {
+ "name": "Gujana Franċiża"
+ },
+ "GP": {
+ "name": "Gwadelupe"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "AX": {
+ "name": "Gżejjer Aland"
+ },
+ "FO": {
+ "name": "Gżejjer Faroe"
+ },
+ "KY": {
+ "name": "Gżejjer Kajmani"
+ },
+ "MP": {
+ "name": "Gżejjer Marjana ta’ Fuq"
+ },
+ "MH": {
+ "name": "Gżejjer ta’ Marshall"
+ },
+ "SA": {
+ "name": "Għarabja Sawdita"
+ },
+ "HT": {
+ "name": "Ħaiti"
+ },
+ "HN": {
+ "name": "Ħonduras"
+ },
+ "HK": {
+ "name": "Ħong Kong S.A.R. Ċina"
+ },
+ "CN": {
+ "name": "IÄ‹-ÄŠina"
+ },
+ "BR": {
+ "name": "Il-Brażil"
+ },
+ "JP": {
+ "name": "Il-Ä appun"
+ },
+ "DE": {
+ "name": "Il-Ä ermanja"
+ },
+ "ID": {
+ "name": "Indoneżja"
+ },
+ "RU": {
+ "name": "Ir-Russja"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "IS": {
+ "name": "Islanda"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Iżrael"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "KH": {
+ "name": "Kambodja"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "CV": {
+ "name": "Kape Verde"
+ },
+ "KZ": {
+ "name": "Każakstan"
+ },
+ "KE": {
+ "name": "Kenja"
+ },
+ "KG": {
+ "name": "Kirgistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CO": {
+ "name": "Kolumbja"
+ },
+ "KM": {
+ "name": "Komoros"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "KR": {
+ "name": "Koreja t’Isfel"
+ },
+ "KP": {
+ "name": "Koreja ta’ Fuq"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kosta Rika"
+ },
+ "CI": {
+ "name": "Kosta ta’ l-Avorju"
+ },
+ "HR": {
+ "name": "Kroazja"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuwajt"
+ },
+ "IN": {
+ "name": "L-Indja"
+ },
+ "GB": {
+ "name": "L-Ingilterra"
+ },
+ "US": {
+ "name": "L-Istati Uniti"
+ },
+ "IT": {
+ "name": "L-Italja"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvja"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LB": {
+ "name": "Libanu"
+ },
+ "LR": {
+ "name": "Liberja"
+ },
+ "LY": {
+ "name": "Libja"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Litwanja"
+ },
+ "LU": {
+ "name": "Lussemburgu"
+ },
+ "MK": {
+ "name": "Maċedonja"
+ },
+ "MO": {
+ "name": "Macao S.A.R., China"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "YT": {
+ "name": "Majotte"
+ },
+ "MY": {
+ "name": "Malasja"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "MD": {
+ "name": "Maldova"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marokk"
+ },
+ "MQ": {
+ "name": "Martinik"
+ },
+ "MR": {
+ "name": "Mawritanja"
+ },
+ "MU": {
+ "name": "Mawrizju"
+ },
+ "MX": {
+ "name": "Messiku"
+ },
+ "FM": {
+ "name": "Mikronesja"
+ },
+ "MM": {
+ "name": "Mjanmar"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolja"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Możambik"
+ },
+ "NA": {
+ "name": "Namibja"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NE": {
+ "name": "Niġer"
+ },
+ "NG": {
+ "name": "Niġerja"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "NO": {
+ "name": "Norveġja"
+ },
+ "NL": {
+ "name": "Olanda"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papwa-Ginea Ä dida"
+ },
+ "PY": {
+ "name": "Paragwaj"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PF": {
+ "name": "Polinesja Franċiża"
+ },
+ "PL": {
+ "name": "Polonja"
+ },
+ "PT": {
+ "name": "Portugall"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "CF": {
+ "name": "Repubblika Afrikana ÄŠentrali"
+ },
+ "CZ": {
+ "name": "Repubblika ÄŠeka"
+ },
+ "DO": {
+ "name": "Republikka Domenikana"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Rumanija"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "EH": {
+ "name": "Sahara tal-Punent"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vincent and the Grenadines"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Amerikana"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "LC": {
+ "name": "Santa Luċija"
+ },
+ "ST": {
+ "name": "Sao Tome and Principe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapor"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Sirja"
+ },
+ "SK": {
+ "name": "Slovakkja"
+ },
+ "SI": {
+ "name": "Slovenja"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalja"
+ },
+ "GS": {
+ "name": "South Georgia and the South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spanja"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard and Jan Mayen"
+ },
+ "CH": {
+ "name": "Svizzera"
+ },
+ "SZ": {
+ "name": "Sważiland"
+ },
+ "TJ": {
+ "name": "Taġikistan"
+ },
+ "TH": {
+ "name": "Tajlandja"
+ },
+ "TW": {
+ "name": "Tajwan"
+ },
+ "TZ": {
+ "name": "Tanżanija"
+ },
+ "TF": {
+ "name": "Territorji Franċiżi ta’ Nofsinhar"
+ },
+ "PS": {
+ "name": "Territorju Palestinjan"
+ },
+ "TL": {
+ "name": "Timor tal-Lvant"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelaw"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad u Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tuneż"
+ },
+ "TR": {
+ "name": "Turkija"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraina"
+ },
+ "HU": {
+ "name": "Ungerija"
+ },
+ "UM": {
+ "name": "United States Minor Outlying Islands"
+ },
+ "UY": {
+ "name": "Urugwaj"
+ },
+ "UZ": {
+ "name": "Użbekistan"
+ },
+ "VU": {
+ "name": "Vanwatu"
+ },
+ "VA": {
+ "name": "Vatikan"
+ },
+ "VE": {
+ "name": "Venezwela"
+ },
+ "VN": {
+ "name": "Vjetnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "ZM": {
+ "name": "Żambja"
+ },
+ "ZW": {
+ "name": "Żimbabwe"
+ },
+ "SE": {
+ "name": "Żvezja"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/mua.json b/library/intl/resources/country/mua.json
new file mode 100644
index 000000000..6bfd0b550
--- /dev/null
+++ b/library/intl/resources/country/mua.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "afghanistaŋ"
+ },
+ "ZA": {
+ "name": "Afrika nekÇsÇÅ‹"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "albaniya"
+ },
+ "DZ": {
+ "name": "algeriya"
+ },
+ "US": {
+ "name": "Amerika"
+ },
+ "AD": {
+ "name": "andorra"
+ },
+ "IO": {
+ "name": "anglofoŋ ma Indiya"
+ },
+ "AO": {
+ "name": "angola"
+ },
+ "AI": {
+ "name": "anguiya"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "antiguan ne Barbuda"
+ },
+ "AR": {
+ "name": "argentiniya"
+ },
+ "AM": {
+ "name": "armeniya"
+ },
+ "AW": {
+ "name": "aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "australiya"
+ },
+ "AT": {
+ "name": "austriya"
+ },
+ "AZ": {
+ "name": "azerbaijaŋ"
+ },
+ "BS": {
+ "name": "bahamas"
+ },
+ "BH": {
+ "name": "bahraiŋ"
+ },
+ "BD": {
+ "name": "bangladeshiya"
+ },
+ "BB": {
+ "name": "barbadiya"
+ },
+ "BY": {
+ "name": "belarussiya"
+ },
+ "BE": {
+ "name": "belgika"
+ },
+ "BZ": {
+ "name": "beliziya"
+ },
+ "BJ": {
+ "name": "beniŋ"
+ },
+ "BM": {
+ "name": "bermudiya"
+ },
+ "BO": {
+ "name": "boliviya"
+ },
+ "BA": {
+ "name": "bosniya ne Herzegovina"
+ },
+ "BW": {
+ "name": "botswana"
+ },
+ "BR": {
+ "name": "brazilya"
+ },
+ "BN": {
+ "name": "bruniya"
+ },
+ "BG": {
+ "name": "bulgariya"
+ },
+ "BF": {
+ "name": "burkina Faso"
+ },
+ "BI": {
+ "name": "burundi"
+ },
+ "BT": {
+ "name": "butaŋ"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "CF": {
+ "name": "centrafrika"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Daŋmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominik"
+ },
+ "EC": {
+ "name": "EkwatÇr"
+ },
+ "ES": {
+ "name": "Espaŋiya"
+ },
+ "EE": {
+ "name": "Estoniya"
+ },
+ "ET": {
+ "name": "Etiopia"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "PH": {
+ "name": "Filipiŋ"
+ },
+ "FR": {
+ "name": "FranssÇ"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboŋ"
+ },
+ "GM": {
+ "name": "Gambiya"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GE": {
+ "name": "Georgiya"
+ },
+ "DE": {
+ "name": "Germaniya"
+ },
+ "GD": {
+ "name": "GrenadÇ"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guine"
+ },
+ "GW": {
+ "name": "Guine ma Bissao"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungriya"
+ },
+ "ID": {
+ "name": "Indonesiya"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iraŋ"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IT": {
+ "name": "Italiya"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "JP": {
+ "name": "Japaŋ"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordaniya"
+ },
+ "NC": {
+ "name": "Kaledoniya mafuu"
+ },
+ "KH": {
+ "name": "kambodiya"
+ },
+ "CM": {
+ "name": "kameruŋ"
+ },
+ "CA": {
+ "name": "kanada"
+ },
+ "CV": {
+ "name": "kap ma laŋne"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KY": {
+ "name": "kayman ma laŋne"
+ },
+ "KZ": {
+ "name": "Kazakstaŋ"
+ },
+ "KG": {
+ "name": "Kirgizstaŋ"
+ },
+ "CO": {
+ "name": "kolombiya"
+ },
+ "KM": {
+ "name": "komora"
+ },
+ "CG": {
+ "name": "kongo"
+ },
+ "CK": {
+ "name": "kook ma laŋne"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "kosta Rika"
+ },
+ "HR": {
+ "name": "kroatiya"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "LV": {
+ "name": "Letoniya"
+ },
+ "LB": {
+ "name": "Libaŋ"
+ },
+ "LR": {
+ "name": "Liberiya"
+ },
+ "LY": {
+ "name": "Libiya"
+ },
+ "LI": {
+ "name": "LichtÇnsteiÅ‹"
+ },
+ "LT": {
+ "name": "Lituaniya"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedoniya"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MY": {
+ "name": "Malaysiya"
+ },
+ "MV": {
+ "name": "MaldivÇ"
+ },
+ "MA": {
+ "name": "Marok"
+ },
+ "MQ": {
+ "name": "Martinika"
+ },
+ "MR": {
+ "name": "Mauritaniya"
+ },
+ "YT": {
+ "name": "Mayot"
+ },
+ "MX": {
+ "name": "Mexiko"
+ },
+ "FM": {
+ "name": "Micronesiya"
+ },
+ "MD": {
+ "name": "Moldoviya"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongoliya"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MZ": {
+ "name": "Mozambika"
+ },
+ "NA": {
+ "name": "Namibiya"
+ },
+ "NG": {
+ "name": "Nigeriya"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niwe"
+ },
+ "NF": {
+ "name": "Norfolk ma laŋne"
+ },
+ "NO": {
+ "name": "NorvegÇ"
+ },
+ "OM": {
+ "name": "Omaŋ"
+ },
+ "PK": {
+ "name": "Pakistaŋ"
+ },
+ "PG": {
+ "name": "Papuasiya Guine mafuu"
+ },
+ "PY": {
+ "name": "Paragwai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkairn"
+ },
+ "PL": {
+ "name": "Pologŋ"
+ },
+ "PR": {
+ "name": "Porto Riko"
+ },
+ "RO": {
+ "name": "Romaniya"
+ },
+ "RU": {
+ "name": "Russiya"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SC": {
+ "name": "Saichel"
+ },
+ "AS": {
+ "name": "samoa Amerika"
+ },
+ "ST": {
+ "name": "Sao Tome ne Principe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "VG": {
+ "name": "ser Anglofon ma laŋne"
+ },
+ "CI": {
+ "name": "ser Ivoiriya"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "VI": {
+ "name": "SÇr amerika ma laÅ‹ne"
+ },
+ "GB": {
+ "name": "SÇr AnglofoÅ‹"
+ },
+ "SA": {
+ "name": "SÇr Arabiya"
+ },
+ "AE": {
+ "name": "SÇr Arabiya ma taini"
+ },
+ "DO": {
+ "name": "SÇr Dominik ma lii"
+ },
+ "EG": {
+ "name": "SÇr Egypt"
+ },
+ "ER": {
+ "name": "SÇr Eritre"
+ },
+ "FJ": {
+ "name": "SÇr Fiji"
+ },
+ "FI": {
+ "name": "SÇr Finland"
+ },
+ "GI": {
+ "name": "SÇr Gibraltar"
+ },
+ "GR": {
+ "name": "SÇr Grek"
+ },
+ "GL": {
+ "name": "SÇr Groenland"
+ },
+ "GQ": {
+ "name": "SÇr Guine"
+ },
+ "GF": {
+ "name": "SÇr Guyana ma FranssÇ"
+ },
+ "GP": {
+ "name": "SÇr GwadeloupÇ"
+ },
+ "HT": {
+ "name": "SÇr Haiti"
+ },
+ "SH": {
+ "name": "SÇr Helena"
+ },
+ "HN": {
+ "name": "SÇr Honduras"
+ },
+ "IN": {
+ "name": "SÇr IndÇ"
+ },
+ "IE": {
+ "name": "SÇr Ireland"
+ },
+ "IS": {
+ "name": "SÇr Island"
+ },
+ "IL": {
+ "name": "SÇr Israel"
+ },
+ "KE": {
+ "name": "SÇr Kenya"
+ },
+ "KI": {
+ "name": "SÇr Kiribati"
+ },
+ "CD": {
+ "name": "SÇr Kongo ma dii ne zair"
+ },
+ "KP": {
+ "name": "SÇr Kore fah sÇÅ‹"
+ },
+ "KR": {
+ "name": "SÇr Kore nekÇsÇÅ‹"
+ },
+ "KW": {
+ "name": "SÇr Kowait"
+ },
+ "KN": {
+ "name": "SÇr Kristof ne NievÇ"
+ },
+ "LK": {
+ "name": "SÇr Lanka"
+ },
+ "LA": {
+ "name": "SÇr Laos"
+ },
+ "LS": {
+ "name": "SÇr Lesotho"
+ },
+ "LC": {
+ "name": "SÇr Lucia"
+ },
+ "LU": {
+ "name": "SÇr Luxemburg"
+ },
+ "NL": {
+ "name": "SÇr ma kasÇÅ‹"
+ },
+ "MW": {
+ "name": "SÇr Malawi"
+ },
+ "ML": {
+ "name": "SÇr Mali"
+ },
+ "FK": {
+ "name": "SÇr malouniya ma laÅ‹ne"
+ },
+ "MT": {
+ "name": "SÇr Malta"
+ },
+ "MP": {
+ "name": "SÇr Maria ma laÅ‹ne"
+ },
+ "SM": {
+ "name": "SÇr Marino"
+ },
+ "MH": {
+ "name": "SÇr Marshall ma laÅ‹ne"
+ },
+ "MU": {
+ "name": "SÇr MauricÇ"
+ },
+ "MS": {
+ "name": "SÇr Montserrat"
+ },
+ "MM": {
+ "name": "SÇr Myanmar"
+ },
+ "NR": {
+ "name": "SÇr Nauru"
+ },
+ "NP": {
+ "name": "SÇr Nepal"
+ },
+ "NE": {
+ "name": "SÇr Niger"
+ },
+ "PW": {
+ "name": "SÇr Palau"
+ },
+ "PS": {
+ "name": "SÇr Palestiniya"
+ },
+ "PA": {
+ "name": "SÇr Panama"
+ },
+ "PM": {
+ "name": "SÇr PÇtar ne MikÇlon"
+ },
+ "PF": {
+ "name": "SÇr Polynesiya ma FranssÇ"
+ },
+ "PT": {
+ "name": "SÇr Portugal"
+ },
+ "RE": {
+ "name": "SÇr Reunion"
+ },
+ "SB": {
+ "name": "SÇr Salomon ma laÅ‹ne"
+ },
+ "SV": {
+ "name": "SÇr Salvador"
+ },
+ "WS": {
+ "name": "SÇr Samoa"
+ },
+ "SE": {
+ "name": "SÇr Sued"
+ },
+ "SR": {
+ "name": "SÇr Surinam"
+ },
+ "SZ": {
+ "name": "SÇr Swaziland"
+ },
+ "CH": {
+ "name": "SÇr Swiss"
+ },
+ "CZ": {
+ "name": "SÇr Syek"
+ },
+ "TG": {
+ "name": "SÇr Togo"
+ },
+ "TK": {
+ "name": "SÇr Tokelau"
+ },
+ "TO": {
+ "name": "SÇr Tonga"
+ },
+ "TV": {
+ "name": "SÇr Tuvalu"
+ },
+ "VU": {
+ "name": "SÇr Vanuatu"
+ },
+ "VE": {
+ "name": "SÇr Venezuela"
+ },
+ "VN": {
+ "name": "SÇr Vietnam"
+ },
+ "VC": {
+ "name": "SÇr VinceÅ‹ ne GrenadiÅ‹"
+ },
+ "SL": {
+ "name": "Sierra LeonÇ"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakiya"
+ },
+ "SI": {
+ "name": "Sloveniya"
+ },
+ "SO": {
+ "name": "Somaliya"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudaŋ"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TD": {
+ "name": "syad"
+ },
+ "CL": {
+ "name": "syili"
+ },
+ "CN": {
+ "name": "syiŋ"
+ },
+ "CY": {
+ "name": "Syipriya"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TH": {
+ "name": "Tailand"
+ },
+ "TW": {
+ "name": "Taiwaŋ"
+ },
+ "TJ": {
+ "name": "Tajikistaŋ"
+ },
+ "TZ": {
+ "name": "Tanzaniya"
+ },
+ "TL": {
+ "name": "Timoriya"
+ },
+ "TT": {
+ "name": "Trinite ne Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisiya"
+ },
+ "TR": {
+ "name": "Turkiya"
+ },
+ "TC": {
+ "name": "Turkiya ne kaicos ma laŋne"
+ },
+ "TM": {
+ "name": "Turkmenistaŋ"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraiŋ"
+ },
+ "UY": {
+ "name": "Urugwai"
+ },
+ "UZ": {
+ "name": "Uzbekistaŋ"
+ },
+ "VA": {
+ "name": "Vaticaŋ"
+ },
+ "WF": {
+ "name": "Wallis ne Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeŋ"
+ },
+ "ZM": {
+ "name": "Zambiya"
+ },
+ "NZ": {
+ "name": "Zeland mafuu"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/my.json b/library/intl/resources/country/my.json
new file mode 100644
index 000000000..100b0d425
--- /dev/null
+++ b/library/intl/resources/country/my.json
@@ -0,0 +1,761 @@
+{
+ "CA": {
+ "name": "ကနေဒါ"
+ },
+ "KZ": {
+ "name": "ကာဇက်စá€á€”်"
+ },
+ "QA": {
+ "name": "ကာá€á€¬"
+ },
+ "IC": {
+ "name": "ကာနာရီကျွန်းစု"
+ },
+ "BQ": {
+ "name": "ကာရီဘီယံနယ်သာလန်"
+ },
+ "KW": {
+ "name": "ကူá€á€­á€á€º"
+ },
+ "KY": {
+ "name": "ကေမန် ကျွန်းစု"
+ },
+ "CR": {
+ "name": "ကော့စ်á€á€¬á€›á€®á€€á€¬"
+ },
+ "CC": {
+ "name": "ကိုကိုး ကျွန်းစု"
+ },
+ "XK": {
+ "name": "ကိုဆိုဗို"
+ },
+ "KM": {
+ "name": "ကိုမိုရိုစ်"
+ },
+ "CO": {
+ "name": "ကိုလံဘီယာ"
+ },
+ "KE": {
+ "name": "ကင်ညာ"
+ },
+ "CM": {
+ "name": "ကင်မရွန်း"
+ },
+ "KH": {
+ "name": "ကမ္ဘောဒီးယား"
+ },
+ "CU": {
+ "name": "ကျူးဘား"
+ },
+ "CK": {
+ "name": "ကွá€á€º ကျွန်းစု"
+ },
+ "CD": {
+ "name": "ကွန်ဂို-ကင်ရှာစ"
+ },
+ "CG": {
+ "name": "ကွန်ဂို-ဘရာဇာဗီလ်"
+ },
+ "KG": {
+ "name": "á€á€›á€°á€‚စ်စá€á€”်"
+ },
+ "HR": {
+ "name": "á€á€›á€­á€¯á€¡á€±á€¸á€›á€¾á€¬á€¸"
+ },
+ "CX": {
+ "name": "á€á€›á€…်စမá€á€º ကျွန်း"
+ },
+ "KI": {
+ "name": "á€á€®á€›á€®á€˜á€¬á€á€®"
+ },
+ "CW": {
+ "name": "á€á€°á€›á€¬á€€á€¬á€¡á€­á€¯"
+ },
+ "CV": {
+ "name": "á€á€±á€·á€•á€ºá€—ာဒူ"
+ },
+ "CL": {
+ "name": "á€á€»á€®á€œá€®"
+ },
+ "CZ": {
+ "name": "á€á€»á€€á€º ပြည်ထောင်စု"
+ },
+ "TD": {
+ "name": "á€á€»á€’်"
+ },
+ "GR": {
+ "name": "ဂရိ"
+ },
+ "GD": {
+ "name": "ဂရီနာဒါ"
+ },
+ "GL": {
+ "name": "ဂရင်းလန်း"
+ },
+ "GH": {
+ "name": "ဂါနာ"
+ },
+ "GA": {
+ "name": "ဂါဘွန်"
+ },
+ "GW": {
+ "name": "ဂီရာနာ-ဘီစ်စာဥ"
+ },
+ "GN": {
+ "name": "ဂီးနီ"
+ },
+ "GY": {
+ "name": "ဂူရာနာ"
+ },
+ "GP": {
+ "name": "ဂူအာဒီလုပ်"
+ },
+ "GU": {
+ "name": "ဂူအမ်"
+ },
+ "GM": {
+ "name": "ဂန်ဘီရာ"
+ },
+ "JP": {
+ "name": "ဂျပန်"
+ },
+ "JM": {
+ "name": "ဂျမေကာ"
+ },
+ "JE": {
+ "name": "ဂျာစီ"
+ },
+ "DE": {
+ "name": "ဂျာမá€á€®"
+ },
+ "GI": {
+ "name": "ဂျီဘရော်လ်á€á€¬"
+ },
+ "DJ": {
+ "name": "ဂျီဘူá€á€®"
+ },
+ "GE": {
+ "name": "ဂျော်ဂျီယာ"
+ },
+ "JO": {
+ "name": "ဂျော်ဒန်"
+ },
+ "GT": {
+ "name": "ဂွာá€á€®á€™á€¬á€œá€¬"
+ },
+ "GG": {
+ "name": "ဂွန်းဇီ"
+ },
+ "ES": {
+ "name": "စပိန်"
+ },
+ "SJ": {
+ "name": "စဗိုလ်ဘá€á€ºá€”ှင့်ဂျန်မေရန်"
+ },
+ "SK": {
+ "name": "စလိုဗေးကီးယား"
+ },
+ "SI": {
+ "name": "စလိုဗေးနီးယား"
+ },
+ "SG": {
+ "name": "စင်္ကာပူ"
+ },
+ "KN": {
+ "name": "စိန့်ကစ်နှင့်နီဗီစ်"
+ },
+ "ST": {
+ "name": "စိန့်á€á€­á€¯á€™á€®á€”ှင့်ပရင်စီပ့်"
+ },
+ "PM": {
+ "name": "စိန့်ပီအဲရီနှင့်မီကွီလွန်"
+ },
+ "VC": {
+ "name": "စိန့်ဗင့်ဆင့်နှင့် သည်ဂရဲနာဒင်းစ်"
+ },
+ "BL": {
+ "name": "စိန့်ဘာသီလီမိုင်"
+ },
+ "MF": {
+ "name": "စိန့်မာá€á€„်"
+ },
+ "LC": {
+ "name": "စိန့်လူစီအာ"
+ },
+ "SH": {
+ "name": "စိန့်ဟဲလီနာ"
+ },
+ "SZ": {
+ "name": "စွာဇီလန်"
+ },
+ "WS": {
+ "name": "ဆာမိုအာ"
+ },
+ "RS": {
+ "name": "ဆားဘီးယား"
+ },
+ "SN": {
+ "name": "ဆီနီဂေါ"
+ },
+ "SL": {
+ "name": "ဆီအဲရာ လီအိုနီ"
+ },
+ "SY": {
+ "name": "ဆီးရီးယား"
+ },
+ "SD": {
+ "name": "ဆူဒန်"
+ },
+ "SR": {
+ "name": "ဆူရီနိမ်း"
+ },
+ "SC": {
+ "name": "ဆေးရှလ်"
+ },
+ "SM": {
+ "name": "ဆော့န်မာရီနို"
+ },
+ "SA": {
+ "name": "ဆော်ဒီအာရေးဗီးယား"
+ },
+ "SB": {
+ "name": "ဆော်လမွန်ကျွန်းစု"
+ },
+ "SO": {
+ "name": "ဆိုမာလီယာ"
+ },
+ "CY": {
+ "name": "ဆိုက်ပရက်စ်"
+ },
+ "SX": {
+ "name": "ဆင့်မာအာá€á€„်"
+ },
+ "EA": {
+ "name": "ဆယ်ဥá€á€¬á€”ှင့်မယ်လီလ်လာ"
+ },
+ "SE": {
+ "name": "ဆွီဒင်"
+ },
+ "CH": {
+ "name": "ဆွစ်ဇလန်"
+ },
+ "ZW": {
+ "name": "ဇင်ဘာဘွေ"
+ },
+ "ZM": {
+ "name": "ဇမ်ဘီယာ"
+ },
+ "CN": {
+ "name": "á€á€›á€¯á€á€º"
+ },
+ "MO": {
+ "name": "á€á€›á€¯á€á€ºá အထူးအုပ်á€á€»á€¯á€•á€ºá€á€½á€„့်ရ မကာအို"
+ },
+ "HK": {
+ "name": "á€á€›á€¯á€á€ºá အထူးအုပ်á€á€»á€¯á€•á€ºá€á€½á€„့်ရ ဟောင်ကောင်"
+ },
+ "TJ": {
+ "name": "á€á€¬á€‚ျီကစ္စá€á€”်"
+ },
+ "TN": {
+ "name": "á€á€°á€”ီးရှား"
+ },
+ "TR": {
+ "name": "á€á€°á€›á€€á€®"
+ },
+ "TG": {
+ "name": "á€á€­á€¯á€‚ို"
+ },
+ "TC": {
+ "name": "á€á€á€ºá€…်နှင့်ကာအီကိုစ်ကျွန်းစု"
+ },
+ "TM": {
+ "name": "á€á€¬á€á€ºá€™á€®á€”့စ်á€á€”်"
+ },
+ "GS": {
+ "name": "á€á€±á€¬á€„် ဂျော်ဂျီယာ နှင့် á€á€±á€¬á€„် ဆင်းဒá€á€…်ဂျ် ကျွန်းစုများ"
+ },
+ "KR": {
+ "name": "á€á€±á€¬á€„်ကိုရီးယား"
+ },
+ "MP": {
+ "name": "á€á€±á€¬á€„်ပိုင်းမာရီအာနာကျွန်းစု"
+ },
+ "ZA": {
+ "name": "á€á€±á€¬á€„်အာဖရိက"
+ },
+ "TZ": {
+ "name": "á€á€”်ဇန်းနီးယား"
+ },
+ "TO": {
+ "name": "á€á€½á€”်ဂါ"
+ },
+ "TT": {
+ "name": "ထရိုင်နီဒá€á€ºá€”ှင့်á€á€­á€¯á€˜á€¬á€‚ို"
+ },
+ "TA": {
+ "name": "ထရစ်á€á€”်ဒါကွန်ဟာ"
+ },
+ "TV": {
+ "name": "ထူးဗလူ"
+ },
+ "TK": {
+ "name": "ထိုးá€á€«á€œá€°"
+ },
+ "TW": {
+ "name": "ထိုင်á€á€™á€º"
+ },
+ "TH": {
+ "name": "ထိုင်း"
+ },
+ "DG": {
+ "name": "ဒီအေဂိုဂရာစီအာ"
+ },
+ "DM": {
+ "name": "ဒိုမီနီကာ"
+ },
+ "DO": {
+ "name": "ဒိုမီနီကန်"
+ },
+ "DK": {
+ "name": "ဒိန်းမá€á€º"
+ },
+ "NC": {
+ "name": "နယူး ကယ်လီဒိုနီးယား"
+ },
+ "NZ": {
+ "name": "နယူးဇီလန်"
+ },
+ "NR": {
+ "name": "နာဥူရူ"
+ },
+ "NI": {
+ "name": "နီကာရာဂွာ"
+ },
+ "NP": {
+ "name": "နီပေါ"
+ },
+ "NU": {
+ "name": "နီဥူအေ"
+ },
+ "NF": {
+ "name": "နောဖော့á€á€ºá€€á€»á€½á€”်း"
+ },
+ "NO": {
+ "name": "နော်á€á€±"
+ },
+ "NE": {
+ "name": "နိုင်ဂျာ"
+ },
+ "NG": {
+ "name": "နိုင်ဂျီးရီးယား"
+ },
+ "NA": {
+ "name": "နမ်မီးဘီးယား"
+ },
+ "NL": {
+ "name": "နယ်သာလန်"
+ },
+ "PA": {
+ "name": "ပနားမား"
+ },
+ "PW": {
+ "name": "ပလောင်"
+ },
+ "PK": {
+ "name": "ပါကစ္စá€á€”်"
+ },
+ "PG": {
+ "name": "ပါပူရာနယူးဂီနီ"
+ },
+ "PY": {
+ "name": "ပါရာဂွေး"
+ },
+ "PS": {
+ "name": "ပါလက်စá€á€­á€¯á€„်း ပိုင်နက်"
+ },
+ "PE": {
+ "name": "ပီရူး"
+ },
+ "PT": {
+ "name": "ပေါ်á€á€°á€‚ီ"
+ },
+ "PR": {
+ "name": "ပေါ်á€á€°á€›á€®á€€á€­á€¯"
+ },
+ "PL": {
+ "name": "ပိုလန်"
+ },
+ "PN": {
+ "name": "ပစ်á€á€ºá€€á€­á€”်းကျွန်းစု"
+ },
+ "FR": {
+ "name": "ပြင်သစ်"
+ },
+ "GF": {
+ "name": "ပြင်သစ် ဂီယာနာ"
+ },
+ "TF": {
+ "name": "ပြင်သစ် á€á€±á€¬á€„်ပိုင်း ပိုင်နက်များ"
+ },
+ "PF": {
+ "name": "ပြင်သစ် ပေါ်လီနေးရှား"
+ },
+ "FO": {
+ "name": "ဖာရိုး ကျွန်းစုများ"
+ },
+ "PH": {
+ "name": "ဖိလစ်ပိုင်"
+ },
+ "FJ": {
+ "name": "ဖီဂျီ"
+ },
+ "FK": {
+ "name": "ဖောက်ကလန် ကျွန်းစု"
+ },
+ "FI": {
+ "name": "ဖင်လန်"
+ },
+ "VA": {
+ "name": "ဗာá€á€®á€€á€”်စီá€á€®á€¸"
+ },
+ "VU": {
+ "name": "ဗာနုအာá€á€°"
+ },
+ "VN": {
+ "name": "ဗီယက်နမ်"
+ },
+ "VE": {
+ "name": "ဗင်နီဇွဲလား"
+ },
+ "VG": {
+ "name": "ဗြိá€á€­á€žá€»á€¾ ဗာဂျင်း ကျွန်းစု"
+ },
+ "IO": {
+ "name": "ဗြိá€á€­á€žá€»á€¾ အိန္ဒြိယ သမုဒ္ဒရာ ပိုင်နက်"
+ },
+ "BR": {
+ "name": "ဘရာဇီး"
+ },
+ "BN": {
+ "name": "ဘရူနိုင်း"
+ },
+ "BS": {
+ "name": "ဘဟားမား"
+ },
+ "BF": {
+ "name": "ဘာကီနာ ဖာဆို"
+ },
+ "BB": {
+ "name": "ဘာဘဒိုးစ်"
+ },
+ "BM": {
+ "name": "ဘာမူဒါ"
+ },
+ "BH": {
+ "name": "ဘာရိန်း"
+ },
+ "BJ": {
+ "name": "ဘီနင်"
+ },
+ "BY": {
+ "name": "ဘီလာရုစ်"
+ },
+ "BG": {
+ "name": "ဘူဂေးရီးယား"
+ },
+ "BT": {
+ "name": "ဘူá€á€”်"
+ },
+ "BI": {
+ "name": "ဘူရွန်ဒီ"
+ },
+ "BZ": {
+ "name": "ဘေလီဇ်"
+ },
+ "BA": {
+ "name": "ဘော့စနီးယား နှင့် ဟာဇီဂိုဘီးနား"
+ },
+ "BW": {
+ "name": "ဘော့စ်á€á€«á€”ာ"
+ },
+ "BO": {
+ "name": "ဘိုလီးဘီးယား"
+ },
+ "BD": {
+ "name": "ဘင်္ဂလားဒေ့ရှ်"
+ },
+ "BE": {
+ "name": "ဘယ်လ်ဂျီယမ်"
+ },
+ "MY": {
+ "name": "မလေးရှား"
+ },
+ "MK": {
+ "name": "မာစီဒိုးနီးယား"
+ },
+ "MQ": {
+ "name": "မာá€á€®á€”ီကီ"
+ },
+ "MG": {
+ "name": "မာဒါဂá€á€ºá€…ကာ"
+ },
+ "MH": {
+ "name": "မာရှယ် ကျွန်းစု"
+ },
+ "MW": {
+ "name": "မာလာá€á€®"
+ },
+ "ML": {
+ "name": "မာလီ"
+ },
+ "YT": {
+ "name": "မေအိုá€á€®"
+ },
+ "MR": {
+ "name": "မောရီá€á€¬á€”ီအာ"
+ },
+ "MU": {
+ "name": "မော်ရေရှားစ်"
+ },
+ "MA": {
+ "name": "မော်ရိုကို"
+ },
+ "MV": {
+ "name": "မော်လ်ဒိုက်"
+ },
+ "MZ": {
+ "name": "မိုဇန်ဘစ်"
+ },
+ "MC": {
+ "name": "မိုနာကို"
+ },
+ "MX": {
+ "name": "မက္ကဆီကို"
+ },
+ "MS": {
+ "name": "မောင့်စဲရက်"
+ },
+ "FM": {
+ "name": "မိုင်á€á€›á€­á€¯á€”ီရှား"
+ },
+ "IM": {
+ "name": "မန်ကျွန်း"
+ },
+ "MT": {
+ "name": "မောလ်á€á€¬"
+ },
+ "MD": {
+ "name": "မောလ်ဒိုဗာ"
+ },
+ "KP": {
+ "name": "မြောက်ကိုရီးယား"
+ },
+ "SS": {
+ "name": "မြောက်ဆူဒန်"
+ },
+ "MM": {
+ "name": "မြန်မာ"
+ },
+ "MN": {
+ "name": "မွန်ဂိုးလီးယား"
+ },
+ "ME": {
+ "name": "မွန်á€á€®á€”ိဂရိုး"
+ },
+ "YE": {
+ "name": "ယီမင်"
+ },
+ "UA": {
+ "name": "ယူကရိန်း"
+ },
+ "UG": {
+ "name": "ယူဂန္ဓာ"
+ },
+ "GB": {
+ "name": "ယူနိုက်á€á€€á€ºá€€á€„်းဒမ်း"
+ },
+ "US": {
+ "name": "ယူနိုက်á€á€€á€ºá€…á€á€­á€á€º"
+ },
+ "UM": {
+ "name": "ယူနိုက်á€á€€á€ºá€…á€á€­á€á€º အပြင်ထွက် နေသည့် သေးငယ်သောကျွန်းများ"
+ },
+ "AE": {
+ "name": "ယူအေအီး"
+ },
+ "VI": {
+ "name": "ယူအက်စ် ဗာဂျင်း ကျွန်းစု"
+ },
+ "RW": {
+ "name": "ရá€á€”်ဒါ"
+ },
+ "RU": {
+ "name": "ရုရှ"
+ },
+ "RE": {
+ "name": "ရဲအူနီရွန်"
+ },
+ "RO": {
+ "name": "ရိုမေးနီးယား"
+ },
+ "LA": {
+ "name": "လာအို"
+ },
+ "LS": {
+ "name": "လီဆိုသို"
+ },
+ "LY": {
+ "name": "လီဗရာ"
+ },
+ "LU": {
+ "name": "လူဇင်ဘá€á€º"
+ },
+ "LB": {
+ "name": "လက်ဘနွန်"
+ },
+ "LR": {
+ "name": "လိုင်ဘေးရီးယား"
+ },
+ "LT": {
+ "name": "လစ်သူယေးနီးယား"
+ },
+ "LI": {
+ "name": "လစ်á€á€ºá€‘င်စá€á€­á€¯á€„်"
+ },
+ "LV": {
+ "name": "လá€á€ºá€—ီးယား"
+ },
+ "WF": {
+ "name": "á€á€±á€«á€œá€…်နှင့်ဖူထူးနား"
+ },
+ "LK": {
+ "name": "သီရိလင်္ကာ"
+ },
+ "HT": {
+ "name": "ဟေá€á€®"
+ },
+ "HU": {
+ "name": "ဟန်ဂေရီ"
+ },
+ "HN": {
+ "name": "ဟွန်ဒူးရပ်စ်"
+ },
+ "AZ": {
+ "name": "အဇာဘိုင်ဂျန်"
+ },
+ "EH": {
+ "name": "အနောက်ပိုင်း ဆာဟာရ"
+ },
+ "AS": {
+ "name": "အမေရိကန် စမိုအ"
+ },
+ "TL": {
+ "name": "အရှေ့á€á€®á€™á€±á€¬"
+ },
+ "CF": {
+ "name": "အလယ်ပိုင်း အာဖရိက ပြည်ထောင်စု"
+ },
+ "AR": {
+ "name": "အာဂျင်á€á€®á€¸á€”ား"
+ },
+ "AF": {
+ "name": "အာဖဂန်နစ္စá€á€”်"
+ },
+ "AM": {
+ "name": "အာမေနီးယား"
+ },
+ "AW": {
+ "name": "အာရုဘာ"
+ },
+ "AX": {
+ "name": "အာလန်ကျွန်း"
+ },
+ "GQ": {
+ "name": "အီကွေá€á€¬ ဂီရာနာ"
+ },
+ "EC": {
+ "name": "အီကွေဒေါ"
+ },
+ "EG": {
+ "name": "အီဂျစ်"
+ },
+ "IT": {
+ "name": "အီá€á€œá€®"
+ },
+ "ER": {
+ "name": "အီရီá€á€›á€®á€¡á€¬"
+ },
+ "IQ": {
+ "name": "အီရá€á€º"
+ },
+ "IR": {
+ "name": "အီရန်"
+ },
+ "ET": {
+ "name": "အီသီယိုးပီးယား"
+ },
+ "UZ": {
+ "name": "ဥဘက်ကစ္စá€á€”်"
+ },
+ "UY": {
+ "name": "ဥရုဂွေး"
+ },
+ "AL": {
+ "name": "အဲလ်ဘာနီအာ"
+ },
+ "AT": {
+ "name": "ဩစá€á€¼á€®á€¸á€šá€¬á€¸"
+ },
+ "AU": {
+ "name": "ဩစá€á€¼á€±á€¸á€œá€»"
+ },
+ "OM": {
+ "name": "အိုမန်"
+ },
+ "EE": {
+ "name": "အက်စá€á€­á€¯á€¸á€”ီးယား"
+ },
+ "AC": {
+ "name": "အက်စ်စင်ရှီအွန်ကျွန်း"
+ },
+ "IS": {
+ "name": "အိုက်စလန်"
+ },
+ "AO": {
+ "name": "အင်ဂိုလာ"
+ },
+ "ID": {
+ "name": "အင်ဒိုနီးရှား"
+ },
+ "CI": {
+ "name": "အိုင်ဗရီကိုစ့်"
+ },
+ "IE": {
+ "name": "အိုင်ယာလန်"
+ },
+ "IL": {
+ "name": "အစ္စရေး"
+ },
+ "AI": {
+ "name": "အန်ဂွီလာ"
+ },
+ "AQ": {
+ "name": "အန္á€á€¬á€á€­á€€"
+ },
+ "AG": {
+ "name": "အန်á€á€®á€‚ုအာနှင့်ဘာဘုဒါ"
+ },
+ "AD": {
+ "name": "အန်ဒိုရာ"
+ },
+ "IN": {
+ "name": "အိန္ဒိယ"
+ },
+ "DZ": {
+ "name": "အယ်လ်ဂျီးရီးယား"
+ },
+ "SV": {
+ "name": "အယ်လ်ဆာဗေးဒိုး"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/naq.json b/library/intl/resources/country/naq.json
new file mode 100644
index 000000000..1d7584f11
--- /dev/null
+++ b/library/intl/resources/country/naq.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistanni"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albaniab"
+ },
+ "DZ": {
+ "name": "Algeriab"
+ },
+ "AS": {
+ "name": "Americab Samoab"
+ },
+ "US": {
+ "name": "Amerikab"
+ },
+ "AD": {
+ "name": "Andorrab"
+ },
+ "AO": {
+ "name": "Angolab"
+ },
+ "AI": {
+ "name": "Anguillab"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antiguab tsî Barbudab"
+ },
+ "AR": {
+ "name": "Argentinab"
+ },
+ "AM": {
+ "name": "Armeniab"
+ },
+ "AW": {
+ "name": "Arubab"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australieb"
+ },
+ "AT": {
+ "name": "Austriab"
+ },
+ "AZ": {
+ "name": "Azerbaijanni"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Banglades"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgiummi"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benins"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BT": {
+ "name": "Bhutans"
+ },
+ "BO": {
+ "name": "Boliviab"
+ },
+ "BA": {
+ "name": "Bosniab tsî Herzegovinab"
+ },
+ "BW": {
+ "name": "Botswanab"
+ },
+ "BR": {
+ "name": "Braziliab"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgariab"
+ },
+ "BF": {
+ "name": "Burkina Fasob"
+ },
+ "BI": {
+ "name": "Burundib"
+ },
+ "KH": {
+ "name": "Cambodiab"
+ },
+ "CM": {
+ "name": "Cameroonni"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republiki"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chilib"
+ },
+ "CN": {
+ "name": "Chinab"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colombiab"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congob"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croatiab"
+ },
+ "CU": {
+ "name": "Cubab"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republiki"
+ },
+ "CD": {
+ "name": "Democratic Republic of the Congo"
+ },
+ "DK": {
+ "name": "Denmarki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominicab"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "DE": {
+ "name": "Duitslandi"
+ },
+ "TL": {
+ "name": "East Timor"
+ },
+ "EC": {
+ "name": "Ecuadori"
+ },
+ "EG": {
+ "name": "Egipteb"
+ },
+ "SV": {
+ "name": "El Salvadori"
+ },
+ "GQ": {
+ "name": "Equatorial Guineab"
+ },
+ "ER": {
+ "name": "Eritreab"
+ },
+ "EE": {
+ "name": "Estoniab"
+ },
+ "ET": {
+ "name": "Ethiopiab"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fijib"
+ },
+ "FI": {
+ "name": "Finlandi"
+ },
+ "FR": {
+ "name": "Frankreiki"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambiab"
+ },
+ "GE": {
+ "name": "Georgiab"
+ },
+ "GH": {
+ "name": "Ghanab"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GN": {
+ "name": "Guineab"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hongareieb"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "Indiab"
+ },
+ "ID": {
+ "name": "Indonesiab"
+ },
+ "IR": {
+ "name": "Iranni"
+ },
+ "IQ": {
+ "name": "Iraqi"
+ },
+ "IE": {
+ "name": "Irlandi"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israeli"
+ },
+ "IT": {
+ "name": "Italiab"
+ },
+ "CI": {
+ "name": "Ivoorkusi"
+ },
+ "JM": {
+ "name": "Jamaicab"
+ },
+ "JP": {
+ "name": "Japanni"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordanni"
+ },
+ "CA": {
+ "name": "Kanadab"
+ },
+ "KZ": {
+ "name": "Kazakhstanni"
+ },
+ "KE": {
+ "name": "Kenyab"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KP": {
+ "name": "Koreab, Noord"
+ },
+ "KR": {
+ "name": "Koreab, Suid"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwaiti"
+ },
+ "KG": {
+ "name": "Kyrgyzstanni"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanonni"
+ },
+ "LS": {
+ "name": "Lesothob"
+ },
+ "LR": {
+ "name": "Liberiab"
+ },
+ "LY": {
+ "name": "Libyab"
+ },
+ "LI": {
+ "name": "Liechtensteinni"
+ },
+ "LT": {
+ "name": "Lithuaniab"
+ },
+ "LU": {
+ "name": "Luxembourgi"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedoniab"
+ },
+ "MG": {
+ "name": "Madagascari"
+ },
+ "MW": {
+ "name": "Malawib"
+ },
+ "MY": {
+ "name": "Malaysiab"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Malib"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexicob"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambiki"
+ },
+ "MM": {
+ "name": "Myanmar"
+ },
+ "NA": {
+ "name": "Namibiab"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealandi"
+ },
+ "NI": {
+ "name": "Nicaraguab"
+ },
+ "NE": {
+ "name": "Nigeri"
+ },
+ "NG": {
+ "name": "Nigerieb"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noorweeb"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistanni"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian West Bank and Gaza"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guineab"
+ },
+ "PY": {
+ "name": "Paraguaib"
+ },
+ "PE": {
+ "name": "Perub"
+ },
+ "PH": {
+ "name": "Philippinni"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PT": {
+ "name": "Portugali"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RU": {
+ "name": "Rasiab"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RW": {
+ "name": "Rwandab"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vincent and the Grenadines"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabiab"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somaliab"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spanieb"
+ },
+ "LK": {
+ "name": "Sri Lankab"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudanni"
+ },
+ "ZA": {
+ "name": "Suid Afrikab"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swazilandi"
+ },
+ "SE": {
+ "name": "Swedeb"
+ },
+ "CH": {
+ "name": "Switzerlandi"
+ },
+ "SY": {
+ "name": "Syriab"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzaniab"
+ },
+ "TH": {
+ "name": "Thailandi"
+ },
+ "TG": {
+ "name": "Togob"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisiab"
+ },
+ "TR": {
+ "name": "Turkeieb"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Ugandab"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "UY": {
+ "name": "Uruguaib"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican State"
+ },
+ "VE": {
+ "name": "Venezuelab"
+ },
+ "VN": {
+ "name": "Vietnammi"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "GR": {
+ "name": "Xrikelandi"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambiab"
+ },
+ "ZW": {
+ "name": "Zimbabweb"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/nb.json b/library/intl/resources/country/nb.json
new file mode 100644
index 000000000..0e4154e07
--- /dev/null
+++ b/library/intl/resources/country/nb.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algerie"
+ },
+ "AS": {
+ "name": "Amerikansk Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktis"
+ },
+ "AG": {
+ "name": "Antigua og Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension"
+ },
+ "AZ": {
+ "name": "Aserbajdsjan"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgia"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia-Hercegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "IO": {
+ "name": "Britiske territorier i Indiahavet"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "KY": {
+ "name": "Caymanøyene"
+ },
+ "EA": {
+ "name": "Ceuta og Melilla"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CX": {
+ "name": "Christmasøya"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "CK": {
+ "name": "Cookøyene"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danmark"
+ },
+ "VI": {
+ "name": "De amerikanske jomfruøyene"
+ },
+ "VG": {
+ "name": "De britiske jomfruøyene"
+ },
+ "AE": {
+ "name": "De forente arabiske emirater"
+ },
+ "TF": {
+ "name": "De franske sørterritorier"
+ },
+ "DO": {
+ "name": "Den dominikanske republikk"
+ },
+ "CF": {
+ "name": "Den sentralafrikanske republikk"
+ },
+ "PS": {
+ "name": "Det palestinske området"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "GQ": {
+ "name": "Ekvatorial-Guinea"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "CI": {
+ "name": "Elfenbenskysten"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estland"
+ },
+ "ET": {
+ "name": "Etiopia"
+ },
+ "FK": {
+ "name": "Falklandsøyene"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filippinene"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "Frankrike"
+ },
+ "GF": {
+ "name": "Fransk Guyana"
+ },
+ "PF": {
+ "name": "Fransk Polynesia"
+ },
+ "FO": {
+ "name": "Færøyene"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grønland"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "GR": {
+ "name": "Hellas"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hongkong S.A.R. Kina"
+ },
+ "BY": {
+ "name": "Hviterussland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irland"
+ },
+ "IS": {
+ "name": "Island"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KH": {
+ "name": "Kambodsja"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "IC": {
+ "name": "Kanariøyene"
+ },
+ "CV": {
+ "name": "Kapp Verde"
+ },
+ "BQ": {
+ "name": "Karibisk Nederland"
+ },
+ "KZ": {
+ "name": "Kasakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CN": {
+ "name": "Kina"
+ },
+ "KG": {
+ "name": "Kirgisistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CC": {
+ "name": "Kokosøyene"
+ },
+ "KM": {
+ "name": "Komorene"
+ },
+ "CG": {
+ "name": "Kongo-Brazzaville"
+ },
+ "CD": {
+ "name": "Kongo-Kinshasa"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "HR": {
+ "name": "Kroatia"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "CY": {
+ "name": "Kypros"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Litauen"
+ },
+ "LU": {
+ "name": "Luxemburg"
+ },
+ "MO": {
+ "name": "Macao S.A.R. Kina"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MK": {
+ "name": "Makedonia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldivene"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "IM": {
+ "name": "Man"
+ },
+ "MA": {
+ "name": "Marokko"
+ },
+ "MH": {
+ "name": "Marshalløyene"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Mikronesiaføderasjonen"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mosambik"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NL": {
+ "name": "Nederland"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "KP": {
+ "name": "Nord-Korea"
+ },
+ "MP": {
+ "name": "Nord-Marianene"
+ },
+ "NF": {
+ "name": "Norfolkøya"
+ },
+ "NO": {
+ "name": "Norge"
+ },
+ "NC": {
+ "name": "Ny-Caledonia"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Ny-Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PL": {
+ "name": "Polen"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russland"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint-Barthélemy"
+ },
+ "MF": {
+ "name": "Saint-Martin"
+ },
+ "SB": {
+ "name": "Salomonøyene"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé og Príncipe"
+ },
+ "SA": {
+ "name": "Saudi-Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychellene"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ES": {
+ "name": "Spania"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SH": {
+ "name": "St. Helena"
+ },
+ "KN": {
+ "name": "St. Kitts og Nevis"
+ },
+ "LC": {
+ "name": "St. Lucia"
+ },
+ "PM": {
+ "name": "St. Pierre og Miquelon"
+ },
+ "VC": {
+ "name": "St. Vincent og Grenadinene"
+ },
+ "GB": {
+ "name": "Storbritannia"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard og Jan Mayen"
+ },
+ "CH": {
+ "name": "Sveits"
+ },
+ "SE": {
+ "name": "Sverige"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "ZA": {
+ "name": "Sør-Afrika"
+ },
+ "GS": {
+ "name": "Sør-Georgia og Sør-Sandwichøyene"
+ },
+ "KR": {
+ "name": "Sør-Korea"
+ },
+ "SS": {
+ "name": "Sør-Sudan"
+ },
+ "TJ": {
+ "name": "Tadsjikistan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad og Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TD": {
+ "name": "Tsjad"
+ },
+ "CZ": {
+ "name": "Tsjekkia"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks- og Caicosøyene"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "TR": {
+ "name": "Tyrkia"
+ },
+ "DE": {
+ "name": "Tyskland"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraina"
+ },
+ "HU": {
+ "name": "Ungarn"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "US": {
+ "name": "USA"
+ },
+ "UM": {
+ "name": "USAs ytre øyer"
+ },
+ "UZ": {
+ "name": "Usbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikanstaten"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "EH": {
+ "name": "Vest-Sahara"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis og Futuna"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ },
+ "TL": {
+ "name": "Øst-Timor"
+ },
+ "AT": {
+ "name": "Østerrike"
+ },
+ "AX": {
+ "name": "Ã…land"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/nd.json b/library/intl/resources/country/nd.json
new file mode 100644
index 000000000..8fe088957
--- /dev/null
+++ b/library/intl/resources/country/nd.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AR": {
+ "name": "Ajentina"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljeriya"
+ },
+ "US": {
+ "name": "Amelika"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua le Barbuda"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Arubha"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BB": {
+ "name": "Bhabhadosi"
+ },
+ "BS": {
+ "name": "Bhahamas"
+ },
+ "BH": {
+ "name": "Bhahareni"
+ },
+ "BD": {
+ "name": "Bhangiladeshi"
+ },
+ "BY": {
+ "name": "Bhelarusi"
+ },
+ "BE": {
+ "name": "Bhelgium"
+ },
+ "BZ": {
+ "name": "Bhelize"
+ },
+ "BM": {
+ "name": "Bhemuda"
+ },
+ "BJ": {
+ "name": "Bhenini"
+ },
+ "BO": {
+ "name": "Bholiviya"
+ },
+ "BA": {
+ "name": "Bhosnia le Herzegovina"
+ },
+ "BF": {
+ "name": "Bhukina Faso"
+ },
+ "BG": {
+ "name": "Bhulgariya"
+ },
+ "BI": {
+ "name": "Bhurundi"
+ },
+ "BT": {
+ "name": "Bhutani"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazili"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "KH": {
+ "name": "Cambodia"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "CD": {
+ "name": "Democratic Republic of the Congo"
+ },
+ "DK": {
+ "name": "Denmakhi"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "DM": {
+ "name": "Dominikha"
+ },
+ "TL": {
+ "name": "East Timor"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "FR": {
+ "name": "Furansi"
+ },
+ "GA": {
+ "name": "Gabhoni"
+ },
+ "GM": {
+ "name": "Gambiya"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GF": {
+ "name": "Gwiyana ye Furansi"
+ },
+ "HT": {
+ "name": "Hayiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "Indiya"
+ },
+ "ID": {
+ "name": "Indonesiya"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Isuraeli"
+ },
+ "IT": {
+ "name": "Itali"
+ },
+ "CI": {
+ "name": "Ivory Coast"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jodani"
+ },
+ "QA": {
+ "name": "Kathari"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "CM": {
+ "name": "Khameruni"
+ },
+ "CA": {
+ "name": "Khanada"
+ },
+ "KE": {
+ "name": "Khenya"
+ },
+ "KI": {
+ "name": "Khiribati"
+ },
+ "CO": {
+ "name": "Kholombiya"
+ },
+ "KM": {
+ "name": "Khomoro"
+ },
+ "CG": {
+ "name": "Khongo"
+ },
+ "CR": {
+ "name": "Khosta Rikha"
+ },
+ "KW": {
+ "name": "Khuweiti"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebhanoni"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Libheriya"
+ },
+ "LY": {
+ "name": "Libhiya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagaska"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "MY": {
+ "name": "Malezhiya"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksikho"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monakho"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morokho"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar"
+ },
+ "ZA": {
+ "name": "Mzansi ye Afrika"
+ },
+ "NA": {
+ "name": "Namibhiya"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nephali"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeriya"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Noweyi"
+ },
+ "OM": {
+ "name": "Omani"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian West Bank and Gaza"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PK": {
+ "name": "Phakistani"
+ },
+ "PE": {
+ "name": "Pheru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PL": {
+ "name": "Pholandi"
+ },
+ "PF": {
+ "name": "Pholinesiya ye Fulansi"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "RU": {
+ "name": "Rashiya"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RW": {
+ "name": "Ruwanda"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vincent and the Grenadines"
+ },
+ "AS": {
+ "name": "Samoa ye Amelika"
+ },
+ "WS": {
+ "name": "Samowa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somaliya"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzaniya"
+ },
+ "TH": {
+ "name": "Thayilandi"
+ },
+ "TW": {
+ "name": "Thayiwani"
+ },
+ "TR": {
+ "name": "Thekhi"
+ },
+ "TG": {
+ "name": "Thogo"
+ },
+ "TK": {
+ "name": "Thokelawu"
+ },
+ "TO": {
+ "name": "Thonga"
+ },
+ "TV": {
+ "name": "Thuvalu"
+ },
+ "TT": {
+ "name": "Trinidad le Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisiya"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VA": {
+ "name": "Vatican State"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VU": {
+ "name": "Vhanuatu"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "UA": {
+ "name": "Yukreini"
+ },
+ "UY": {
+ "name": "Yurugwai"
+ },
+ "ZM": {
+ "name": "Zambiya"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ne.json b/library/intl/resources/country/ne.json
new file mode 100644
index 000000000..01db81abb
--- /dev/null
+++ b/library/intl/resources/country/ne.json
@@ -0,0 +1,761 @@
+{
+ "AO": {
+ "name": "अङà¥à¤—ोला"
+ },
+ "AZ": {
+ "name": "अजरबैजान"
+ },
+ "AQ": {
+ "name": "अनà¥à¤Ÿà¤¾à¤°à¤¤à¤¿à¤•à¤¾"
+ },
+ "AD": {
+ "name": "अनà¥à¤¡à¥‹à¤°à¥à¤°à¤¾"
+ },
+ "AF": {
+ "name": "अफगानिसà¥à¤¤à¤¾à¤¨"
+ },
+ "AS": {
+ "name": "अमेरिकी समोआ"
+ },
+ "AR": {
+ "name": "अरà¥à¤œà¥‡à¤¨à¥à¤Ÿà¤¿à¤¨à¤¾"
+ },
+ "AX": {
+ "name": "अलानà¥à¤¡ टापà¥à¤¹à¤°à¥"
+ },
+ "DZ": {
+ "name": "अलà¥à¤œà¥‡à¤°à¤¿à¤¯à¤¾"
+ },
+ "AL": {
+ "name": "अलà¥à¤¬à¤¾à¤¨à¤¿à¤¯à¤¾"
+ },
+ "AT": {
+ "name": "अषà¥à¤Ÿà¥à¤°à¤¿à¤¯à¤¾"
+ },
+ "AU": {
+ "name": "अषà¥à¤Ÿà¥à¤°à¥‡à¤²à¤¿à¤¯à¤¾"
+ },
+ "IM": {
+ "name": "आइजà¥à¤²à¥‡ अफॠमà¥à¤¯à¤¾à¤¨"
+ },
+ "CI": {
+ "name": "आइभरी कोसà¥à¤Ÿ"
+ },
+ "IS": {
+ "name": "आइसà¥à¤²à¥à¤¯à¤¾à¤£à¥à¤¡"
+ },
+ "AI": {
+ "name": "आङà¥à¤—à¥à¤‡à¤²à¤¾"
+ },
+ "IE": {
+ "name": "आयरलà¥à¤¯à¤¾à¤£à¥à¤¡"
+ },
+ "AW": {
+ "name": "आरूबा"
+ },
+ "AM": {
+ "name": "आरà¥à¤®à¥‡à¤¨à¤¿à¤¯à¤¾"
+ },
+ "EC": {
+ "name": "इकà¥à¤µà¤¡à¥‡à¤°"
+ },
+ "IL": {
+ "name": "इजरायल"
+ },
+ "EG": {
+ "name": "इजिपà¥à¤Ÿ"
+ },
+ "IT": {
+ "name": "इटाली"
+ },
+ "ET": {
+ "name": "इथियोपिया"
+ },
+ "ID": {
+ "name": "इनà¥à¤¡à¥‹à¤¨à¥‡à¤¶à¤¿à¤¯à¤¾"
+ },
+ "IQ": {
+ "name": "इराक"
+ },
+ "IR": {
+ "name": "इरान"
+ },
+ "EE": {
+ "name": "इसà¥à¤Ÿà¥‹à¤¨à¤¿à¤¯à¤¾"
+ },
+ "UZ": {
+ "name": "उजà¥à¤¬à¥‡à¤•à¤¿à¤¸à¥à¤¤à¤¾à¤¨"
+ },
+ "KP": {
+ "name": "उतà¥à¤¤à¤° कोरिया"
+ },
+ "MP": {
+ "name": "उतà¥à¤¤à¤°à¥€ मारिआना टापà¥"
+ },
+ "UY": {
+ "name": "उरूगà¥à¤µà¥‡"
+ },
+ "AG": {
+ "name": "à¤à¤¨à¥à¤Ÿà¤¿à¤—à¥à¤† र बारबà¥à¤¡à¤¾"
+ },
+ "ER": {
+ "name": "à¤à¤°à¤¿à¤¤à¥à¤°à¤¿à¤¯à¤¾"
+ },
+ "SV": {
+ "name": "à¤à¤²à¥ सालà¥à¤­à¤¾à¤¡à¥‹à¤°"
+ },
+ "AC": {
+ "name": "à¤à¤¸à¥à¤•à¥‡à¤¨à¥à¤¸à¤¨ टापà¥"
+ },
+ "OM": {
+ "name": "ओमन"
+ },
+ "QA": {
+ "name": "कतार"
+ },
+ "KH": {
+ "name": "कमà¥à¤¬à¥‹à¤¡à¤¿à¤¯à¤¾"
+ },
+ "KZ": {
+ "name": "काजाकसà¥à¤¤à¤¾à¤¨"
+ },
+ "KI": {
+ "name": "किरिबाटी"
+ },
+ "KG": {
+ "name": "किरà¥à¤—िसà¥à¤¥à¤¾à¤¨"
+ },
+ "CK": {
+ "name": "कà¥à¤• टापà¥à¤¹à¤°à¥"
+ },
+ "CW": {
+ "name": "कà¥à¤°à¤¾à¤•à¤¾à¤“"
+ },
+ "KW": {
+ "name": "कà¥à¤µà¥‡à¤¤"
+ },
+ "CF": {
+ "name": "केनà¥à¤¦à¥à¤°à¥€à¤¯ अफà¥à¤°à¤¿à¤•à¥€ गणतनà¥à¤¤à¥à¤°"
+ },
+ "KE": {
+ "name": "केनà¥à¤¯à¤¾"
+ },
+ "CV": {
+ "name": "केप भरà¥à¤¡à¥‡"
+ },
+ "KY": {
+ "name": "केयमान टापà¥"
+ },
+ "CC": {
+ "name": "कोकोस (किलिंग) टापà¥à¤¹à¤°à¥"
+ },
+ "CG": {
+ "name": "कोङà¥à¤—ो - बà¥à¤°à¤¾à¤œà¥à¤œà¤¾à¤­à¤¿à¤²à¥à¤²à¥‡"
+ },
+ "CD": {
+ "name": "कोङà¥à¤—ो-किनà¥à¤¶à¤¾à¤¸à¤¾"
+ },
+ "KM": {
+ "name": "कोमोरोस"
+ },
+ "CO": {
+ "name": "कोलोमà¥à¤¬à¤¿à¤¯à¤¾"
+ },
+ "CR": {
+ "name": "कोषà¥à¤Ÿà¤¾à¤°à¤¿à¤•à¤¾"
+ },
+ "XK": {
+ "name": "कोसोवो"
+ },
+ "CA": {
+ "name": "कà¥à¤¯à¤¾à¤¨à¤¾à¤¡à¤¾"
+ },
+ "IC": {
+ "name": "कà¥à¤¯à¤¾à¤¨à¤¾à¤°à¥€ टापà¥à¤¹à¤°à¥‚"
+ },
+ "CM": {
+ "name": "कà¥à¤¯à¤¾à¤®à¤°à¥‚न"
+ },
+ "BQ": {
+ "name": "कà¥à¤¯à¤¾à¤°à¤¿à¤µà¤¿à¤¯à¤¨ नेदरलà¥à¤¯à¤¾à¤£à¥à¤¡à¥à¤¸"
+ },
+ "CU": {
+ "name": "कà¥à¤¯à¥à¤¬à¤¾"
+ },
+ "CX": {
+ "name": "कà¥à¤°à¤¿à¤·à¥à¤Ÿà¤®à¤¸ टापà¥"
+ },
+ "HR": {
+ "name": "कà¥à¤°à¥‹à¤à¤¶à¤¿à¤¯à¤¾"
+ },
+ "GM": {
+ "name": "गामà¥à¤µà¤¿à¤¯à¤¾"
+ },
+ "GA": {
+ "name": "गावोन"
+ },
+ "GN": {
+ "name": "गिनी"
+ },
+ "GW": {
+ "name": "गिनी-बिसाउ"
+ },
+ "GG": {
+ "name": "गà¥à¤à¤°à¥à¤¨à¤¸à¥‡"
+ },
+ "GY": {
+ "name": "गà¥à¤¯à¤¾à¤¨à¤¾"
+ },
+ "GU": {
+ "name": "गà¥à¤µà¤¾à¤®"
+ },
+ "GL": {
+ "name": "गà¥à¤°à¤¿à¤¨à¤²à¥à¤¯à¤¾à¤£à¥à¤¡"
+ },
+ "GR": {
+ "name": "गà¥à¤°à¤¿à¤¸"
+ },
+ "GD": {
+ "name": "गà¥à¤°à¥‡à¤¨à¤¾à¤¡à¤¾"
+ },
+ "GT": {
+ "name": "गà¥à¤µà¤¾à¤Ÿà¥‡à¤®à¤¾à¤²à¤¾"
+ },
+ "GP": {
+ "name": "गà¥à¤µà¤¾à¤¡à¥‡à¤²à¥à¤ª"
+ },
+ "GH": {
+ "name": "घाना"
+ },
+ "TD": {
+ "name": "चाड"
+ },
+ "CL": {
+ "name": "चिली"
+ },
+ "CN": {
+ "name": "चीन"
+ },
+ "CZ": {
+ "name": "चेक गणतनà¥à¤¤à¥à¤°"
+ },
+ "JM": {
+ "name": "जमाइका"
+ },
+ "GE": {
+ "name": "जरà¥à¤œà¤¿à¤¯à¤¾"
+ },
+ "DE": {
+ "name": "जरà¥à¤®à¤¨à¥€"
+ },
+ "JE": {
+ "name": "जरà¥à¤¸à¥€"
+ },
+ "JP": {
+ "name": "जापान"
+ },
+ "ZM": {
+ "name": "जामà¥à¤¬à¤¿à¤¯à¤¾"
+ },
+ "GI": {
+ "name": "जिबà¥à¤°à¤¾à¤²à¥à¤Ÿà¤¾à¤°"
+ },
+ "ZW": {
+ "name": "जिमà¥à¤¬à¤¾à¤¬à¥‡"
+ },
+ "JO": {
+ "name": "जोरà¥à¤¡à¤¨"
+ },
+ "TR": {
+ "name": "टरà¥à¤•à¥€"
+ },
+ "TL": {
+ "name": "टिमोर-लेसà¥à¤Ÿà¥‡"
+ },
+ "TO": {
+ "name": "टोंगा"
+ },
+ "TG": {
+ "name": "टोगो"
+ },
+ "TN": {
+ "name": "टà¥à¤¯à¥à¤¨à¤¿à¤¸à¤¿à¤¯à¤¾"
+ },
+ "TA": {
+ "name": "टà¥à¤°à¤¿à¤¸à¥à¤Ÿà¤¾à¤¨ डा कà¥à¤¨à¥à¤¹à¤¾"
+ },
+ "DJ": {
+ "name": "डिजिबà¥à¤Ÿà¥€"
+ },
+ "DG": {
+ "name": "डियगो गारà¥à¤¸à¤¿à¤¯à¤¾"
+ },
+ "DK": {
+ "name": "डेनमारà¥à¤•"
+ },
+ "DO": {
+ "name": "डोमिनिकन गणतनà¥à¤¤à¥à¤°"
+ },
+ "DM": {
+ "name": "डोमिनिका"
+ },
+ "TW": {
+ "name": "ताइवान"
+ },
+ "TJ": {
+ "name": "ताजिकिसà¥à¤¤à¤¾à¤¨"
+ },
+ "TZ": {
+ "name": "तानà¥à¤œà¤¾à¤¨à¤¿à¤¯à¤¾"
+ },
+ "TV": {
+ "name": "तà¥à¤­à¤¾à¤²à¥"
+ },
+ "TC": {
+ "name": "तà¥à¤°à¥à¤• र काइकोस टापà¥"
+ },
+ "TM": {
+ "name": "तà¥à¤°à¥à¤•à¤®à¥‡à¤¨à¤¿à¤¸à¥à¤¤à¤¾à¤¨"
+ },
+ "TK": {
+ "name": "तोकेलाउ"
+ },
+ "TT": {
+ "name": "तà¥à¤°à¤¿à¤¨à¤¿à¤¡à¤¾à¤¡ à¤à¤£à¥à¤¡ टोबागो"
+ },
+ "TH": {
+ "name": "थाइलà¥à¤¯à¤¾à¤£à¥à¤¡"
+ },
+ "ZA": {
+ "name": "दकà¥à¤·à¤¿à¤£ अफà¥à¤°à¤¿à¤•à¤¾"
+ },
+ "KR": {
+ "name": "दकà¥à¤·à¤¿à¤£ कोरिया"
+ },
+ "GS": {
+ "name": "दकà¥à¤·à¤¿à¤£ जरà¥à¤œà¤¿à¤¯à¤¾ र दकà¥à¤·à¤¿à¤£ सà¥à¤¯à¤¾à¤¨à¥à¤¡à¤µà¥€à¤š टापà¥à¤¹à¤°à¥‚"
+ },
+ "SS": {
+ "name": "दकà¥à¤·à¤¿à¤£à¥€ सà¥à¤¡à¤¾à¤¨"
+ },
+ "NC": {
+ "name": "नयाठकालेडोनिया"
+ },
+ "NO": {
+ "name": "नरà¥à¤µà¥‡"
+ },
+ "NE": {
+ "name": "नाइजर"
+ },
+ "NG": {
+ "name": "नाइजेरिया"
+ },
+ "NR": {
+ "name": "नाउरू"
+ },
+ "NA": {
+ "name": "नामिबिया"
+ },
+ "NI": {
+ "name": "निकारागà¥à¤µà¤¾"
+ },
+ "NU": {
+ "name": "नियà¥à¤‡"
+ },
+ "NL": {
+ "name": "नेदरलà¥à¤¯à¤¾à¤£à¥à¤¡à¥à¤¸"
+ },
+ "NP": {
+ "name": "नेपाल"
+ },
+ "NF": {
+ "name": "नोरफोलà¥à¤• टापà¥"
+ },
+ "NZ": {
+ "name": "नà¥à¤¯à¥à¤œà¤¿à¤²à¥à¤¯à¤¾à¤£à¥à¤¡"
+ },
+ "PA": {
+ "name": "पनामा"
+ },
+ "PG": {
+ "name": "पपà¥à¤† नà¥à¤¯à¥‚ गाइनिया"
+ },
+ "PW": {
+ "name": "पलाउ"
+ },
+ "EH": {
+ "name": "पशà¥à¤šà¤¿à¤®à¥€ साहारा"
+ },
+ "PK": {
+ "name": "पाकिसà¥à¤¤à¤¾à¤¨"
+ },
+ "PN": {
+ "name": "पिटकाइरà¥à¤¨ टापà¥à¤¹à¤°à¥"
+ },
+ "PR": {
+ "name": "पà¥à¤à¤°à¥à¤Ÿà¥‹ रिको"
+ },
+ "PE": {
+ "name": "पेरू"
+ },
+ "PT": {
+ "name": "पोरà¥à¤šà¥à¤—ल"
+ },
+ "PL": {
+ "name": "पोलà¥à¤¯à¤¾à¤£à¥à¤¡"
+ },
+ "PY": {
+ "name": "पà¥à¤¯à¤¾à¤°à¤¾à¤—à¥à¤µà¥‡"
+ },
+ "PS": {
+ "name": "पà¥à¤¯à¤¾à¤²à¥‡à¤¸à¥à¤Ÿà¤¨à¥€ भू-भागहरà¥"
+ },
+ "FK": {
+ "name": "फकलà¥à¤¯à¤¾à¤£à¥à¤¡ टापà¥à¤¹à¤°à¥"
+ },
+ "FO": {
+ "name": "फारोर टापà¥à¤¹à¤°à¥"
+ },
+ "FJ": {
+ "name": "फिजी"
+ },
+ "FI": {
+ "name": "फिनà¥à¤²à¥à¤¯à¤¾à¤£à¥à¤¡"
+ },
+ "PH": {
+ "name": "फिलिपिनà¥à¤¸"
+ },
+ "FR": {
+ "name": "फà¥à¤°à¤¾à¤¨à¥à¤¸"
+ },
+ "GF": {
+ "name": "फà¥à¤°à¤¾à¤¨à¥à¤¸à¥‡à¤²à¥€ गायना"
+ },
+ "TF": {
+ "name": "फà¥à¤°à¤¾à¤¨à¥à¤¸à¥‡à¤²à¥€ दकà¥à¤·à¤¿à¤£à¥€ कà¥à¤·à¥‡à¤¤à¥à¤°à¤¹à¤°à¥"
+ },
+ "PF": {
+ "name": "फà¥à¤°à¤¾à¤¨à¥à¤¸à¥‡à¤²à¥€ पोलिनेसिया"
+ },
+ "BD": {
+ "name": "बङà¥à¤—लादेश"
+ },
+ "BF": {
+ "name": "बरà¥à¤•à¤¿à¤¨à¤¾ फासो"
+ },
+ "BM": {
+ "name": "बरà¥à¤®à¥à¤¡à¤¾"
+ },
+ "BH": {
+ "name": "बहराइन"
+ },
+ "BS": {
+ "name": "बहामास"
+ },
+ "BB": {
+ "name": "बारà¥à¤¬à¤¾à¤¡à¥‹à¤¸"
+ },
+ "BI": {
+ "name": "बà¥à¤°à¥‚णà¥à¤¡à¥€"
+ },
+ "BG": {
+ "name": "बà¥à¤²à¥à¤—ेरिया"
+ },
+ "BJ": {
+ "name": "बेनिन"
+ },
+ "GB": {
+ "name": "बेलायत"
+ },
+ "VG": {
+ "name": "बेलायती भरà¥à¤œà¤¿à¤¨ टापà¥à¤¹à¤°à¥"
+ },
+ "IO": {
+ "name": "बेलायती हिनà¥à¤¦ महासागर कà¥à¤·à¥‡à¤¤à¥à¤°"
+ },
+ "BY": {
+ "name": "बेलारूस"
+ },
+ "BZ": {
+ "name": "बेलिज"
+ },
+ "BE": {
+ "name": "बेलà¥à¤œà¤¿à¤¯à¤®"
+ },
+ "BW": {
+ "name": "बोटà¥à¤¸à¥à¤µà¤¾à¤¨à¤¾"
+ },
+ "BO": {
+ "name": "बोलिभिया"
+ },
+ "BA": {
+ "name": "बोसà¥à¤¨à¤¿à¤¯à¤¾ à¤à¤£à¥à¤¡ हरà¥à¤œà¤—ोभिनिया"
+ },
+ "BR": {
+ "name": "बà¥à¤°à¤¾à¤œà¤¿à¤²"
+ },
+ "BN": {
+ "name": "बà¥à¤°à¥à¤¨à¤¾à¤‡"
+ },
+ "VU": {
+ "name": "भानà¥à¤†à¤¤à¥"
+ },
+ "IN": {
+ "name": "भारत"
+ },
+ "VN": {
+ "name": "भिà¤à¤¤à¤¨à¤¾à¤®"
+ },
+ "BT": {
+ "name": "भà¥à¤Ÿà¤¾à¤¨"
+ },
+ "GQ": {
+ "name": "भू-मधà¥à¤¯à¥€à¤¯ गिनी"
+ },
+ "VA": {
+ "name": "भेटिकन सिटी"
+ },
+ "VE": {
+ "name": "भेनेजà¥à¤à¤²à¤¾"
+ },
+ "MO": {
+ "name": "मकावो चिनिà¤à¤¯à¤¾ सà¥à¤µà¤¶à¤¾à¤¸à¤¿à¤¤ कà¥à¤·à¥‡à¤¤à¥à¤°"
+ },
+ "MN": {
+ "name": "मङà¥à¤—ोलिया"
+ },
+ "MG": {
+ "name": "मडागासà¥à¤•à¤°"
+ },
+ "MY": {
+ "name": "मलेसिया"
+ },
+ "FM": {
+ "name": "माइकà¥à¤°à¥‹à¤¨à¥‡à¤¸à¤¿à¤¯à¤¾"
+ },
+ "MU": {
+ "name": "माउरिटस"
+ },
+ "MR": {
+ "name": "माउरिटानिया"
+ },
+ "YT": {
+ "name": "मायोटà¥à¤Ÿ"
+ },
+ "MQ": {
+ "name": "मारà¥à¤Ÿà¤¿à¤¨à¤¿à¤•"
+ },
+ "MH": {
+ "name": "मारà¥à¤¶à¤² टापà¥à¤¹à¤°à¥"
+ },
+ "MW": {
+ "name": "मालावी"
+ },
+ "ML": {
+ "name": "माली"
+ },
+ "MT": {
+ "name": "मालà¥à¤Ÿà¤¾"
+ },
+ "MD": {
+ "name": "मालà¥à¤¡à¥‹à¤­à¤¾"
+ },
+ "MV": {
+ "name": "मालà¥à¤¦à¤¿à¤­à¥à¤¸"
+ },
+ "MX": {
+ "name": "मेकà¥à¤¸à¤¿à¤•à¥‹"
+ },
+ "MZ": {
+ "name": "मोजामà¥à¤¬à¤¿à¤•"
+ },
+ "MC": {
+ "name": "मोनाको"
+ },
+ "MS": {
+ "name": "मोनà¥à¤Ÿà¤¸à¥‡à¤°à¥à¤°à¤¾à¤Ÿ"
+ },
+ "ME": {
+ "name": "मोनà¥à¤Ÿà¥‡à¤¨à¥‡à¤—à¥à¤°à¥‹"
+ },
+ "MA": {
+ "name": "मोरोकà¥à¤•à¥‹"
+ },
+ "MK": {
+ "name": "मà¥à¤¯à¤¾à¤•à¥‡à¤¡à¥‹à¤¨à¤¿à¤¯à¤¾"
+ },
+ "MM": {
+ "name": "मà¥à¤¯à¤¾à¤¨à¥à¤®à¤¾à¤° (बरà¥à¤®à¤¾)"
+ },
+ "UA": {
+ "name": "यà¥à¤•à¥à¤°à¥‡à¤¨"
+ },
+ "UG": {
+ "name": "यà¥à¤—ाणà¥à¤¡à¤¾"
+ },
+ "YE": {
+ "name": "येमेन"
+ },
+ "RW": {
+ "name": "रवाणà¥à¤¡à¤¾"
+ },
+ "RE": {
+ "name": "रियà¥à¤¨à¤¿à¤¯à¤¨"
+ },
+ "RU": {
+ "name": "रूस"
+ },
+ "RO": {
+ "name": "रोमानिया"
+ },
+ "LU": {
+ "name": "लकà¥à¤œà¥‡à¤®à¤¬à¤°à¥à¤—"
+ },
+ "LR": {
+ "name": "लाइबेरिया"
+ },
+ "LA": {
+ "name": "लाओस"
+ },
+ "LV": {
+ "name": "लाटà¥à¤­à¤¿à¤¯à¤¾"
+ },
+ "LI": {
+ "name": "लिà¤à¤–टेनà¥à¤¸à¥à¤Ÿà¤¾à¤‡à¤¨"
+ },
+ "LT": {
+ "name": "लिथà¥à¤…निया"
+ },
+ "LY": {
+ "name": "लिबिया"
+ },
+ "LB": {
+ "name": "लेबनन"
+ },
+ "LS": {
+ "name": "लेसोथो"
+ },
+ "WF": {
+ "name": "वालिस र फà¥à¤Ÿà¥à¤¨à¤¾"
+ },
+ "LK": {
+ "name": "शà¥à¤°à¥€à¤²à¤™à¥à¤•à¤¾"
+ },
+ "SJ": {
+ "name": "सभालà¥à¤¬à¤¾à¤°à¥à¤¡ र जान मायेन"
+ },
+ "AE": {
+ "name": "संयà¥à¤•à¥à¤¤ अरब इमिराटà¥à¤¸"
+ },
+ "US": {
+ "name": "संयà¥à¤•à¥à¤¤ राजà¥à¤¯"
+ },
+ "UM": {
+ "name": "संयà¥à¤•à¥à¤¤ राजà¥à¤¯ बाहà¥à¤¯ टापà¥à¤¹à¤°à¥"
+ },
+ "VI": {
+ "name": "संयà¥à¤•à¥à¤¤ राजà¥à¤¯ भरà¥à¤œà¤¿à¤¨ टापà¥à¤¹à¤°à¥"
+ },
+ "RS": {
+ "name": "सरà¥à¤¬à¤¿à¤¯à¤¾"
+ },
+ "CY": {
+ "name": "साइपà¥à¤°à¤¸"
+ },
+ "SA": {
+ "name": "साउदी अरब"
+ },
+ "ST": {
+ "name": "साओ टोमे र पà¥à¤°à¤¿à¤¨à¥à¤¸à¤¿à¤ª"
+ },
+ "SM": {
+ "name": "सानॠमारिनो"
+ },
+ "WS": {
+ "name": "सामोआ"
+ },
+ "EA": {
+ "name": "सिउटा र मेलिला"
+ },
+ "SL": {
+ "name": "सिà¤à¤°à¥à¤°à¤¾ लिओन"
+ },
+ "SG": {
+ "name": "सिङà¥à¤—ापà¥à¤°"
+ },
+ "SX": {
+ "name": "सिनà¥à¤Ÿ मारà¥à¤Ÿà¥‡à¤¨"
+ },
+ "SY": {
+ "name": "सिरिया"
+ },
+ "SD": {
+ "name": "सà¥à¤¡à¤¾à¤¨"
+ },
+ "SR": {
+ "name": "सà¥à¤°à¤¿à¤¨à¥‡à¤®"
+ },
+ "SC": {
+ "name": "सेचेलेस"
+ },
+ "SN": {
+ "name": "सेनेगाल"
+ },
+ "KN": {
+ "name": "सेनà¥à¤Ÿ किटà¥à¤¸ र नेभिस"
+ },
+ "PM": {
+ "name": "सेनà¥à¤Ÿ पिरà¥à¤°à¥‡ र मिकà¥à¤•à¥‡à¤²à¥‹à¤¨"
+ },
+ "BL": {
+ "name": "सेनà¥à¤Ÿ बारà¥à¤¥à¤¾à¤²à¥‡à¤®à¥€"
+ },
+ "VC": {
+ "name": "सेनà¥à¤Ÿ भिनà¥à¤¸à¥‡à¤¨à¥à¤Ÿ र गà¥à¤°à¥‡à¤¨à¤¾à¤¡à¤¿à¤¨à¥à¤¸"
+ },
+ "MF": {
+ "name": "सेनà¥à¤Ÿ मारà¥à¤Ÿà¤¿à¤¨"
+ },
+ "LC": {
+ "name": "सेनà¥à¤Ÿ लà¥à¤¸à¤¿à¤¯à¤¾"
+ },
+ "SH": {
+ "name": "सेनà¥à¤Ÿ हेलेना"
+ },
+ "SO": {
+ "name": "सोमालिया"
+ },
+ "SB": {
+ "name": "सोलोमोन टापà¥à¤¹à¤°à¥"
+ },
+ "ES": {
+ "name": "सà¥à¤ªà¥‡à¤¨"
+ },
+ "SK": {
+ "name": "सà¥à¤²à¥‹à¤­à¤¾à¤•à¤¿à¤¯à¤¾"
+ },
+ "SI": {
+ "name": "सà¥à¤²à¥‹à¤­à¥‡à¤¨à¤¿à¤¯à¤¾"
+ },
+ "SZ": {
+ "name": "सà¥à¤µà¤¾à¤œà¤¿à¤²à¥à¤¯à¤¾à¤£à¥à¤¡"
+ },
+ "CH": {
+ "name": "सà¥à¤µà¤¿à¤œà¤°à¤²à¥à¤¯à¤¾à¤£à¥à¤¡"
+ },
+ "SE": {
+ "name": "सà¥à¤µà¤¿à¤¡à¥‡à¤¨"
+ },
+ "HK": {
+ "name": "हङकङ चिनिया समाजवादी सà¥à¤µà¤¾à¤¯à¤¤à¥à¤¤ कà¥à¤·à¥‡à¤¤à¥à¤°"
+ },
+ "HU": {
+ "name": "हङà¥à¤—ेरी"
+ },
+ "HN": {
+ "name": "हनà¥à¤¡à¥à¤°à¤¾à¤¸"
+ },
+ "HT": {
+ "name": "हैटी"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/nl-BE.json b/library/intl/resources/country/nl-BE.json
new file mode 100644
index 000000000..57f2522e5
--- /dev/null
+++ b/library/intl/resources/country/nl-BE.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land"
+ },
+ "AL": {
+ "name": "Albanië"
+ },
+ "DZ": {
+ "name": "Algerije"
+ },
+ "AS": {
+ "name": "Amerikaans-Samoa"
+ },
+ "VI": {
+ "name": "Amerikaanse Maagdeneilanden"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua en Barbuda"
+ },
+ "AR": {
+ "name": "Argentinië"
+ },
+ "AM": {
+ "name": "Armenië"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension"
+ },
+ "AU": {
+ "name": "Australië"
+ },
+ "AZ": {
+ "name": "Azerbeidzjan"
+ },
+ "BS": {
+ "name": "Bahama’s"
+ },
+ "BH": {
+ "name": "Bahrein"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "België"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnië en Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazilië"
+ },
+ "IO": {
+ "name": "Britse Gebieden in de Indische Oceaan"
+ },
+ "VG": {
+ "name": "Britse Maagdeneilanden"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgarije"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodja"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canarische Eilanden"
+ },
+ "BQ": {
+ "name": "Caribisch Nederland"
+ },
+ "KY": {
+ "name": "Caymaneilanden"
+ },
+ "CF": {
+ "name": "Centraal-Afrikaanse Republiek"
+ },
+ "EA": {
+ "name": "Ceuta en Melilla"
+ },
+ "CL": {
+ "name": "Chili"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmaseiland"
+ },
+ "CC": {
+ "name": "Cocoseilanden"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoren"
+ },
+ "CG": {
+ "name": "Congo-Brazzaville"
+ },
+ "CD": {
+ "name": "Congo-Kinshasa"
+ },
+ "CK": {
+ "name": "Cookeilanden"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "DK": {
+ "name": "Denemarken"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominicaanse Republiek"
+ },
+ "DE": {
+ "name": "Duitsland"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypte"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatoriaal-Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estland"
+ },
+ "ET": {
+ "name": "Ethiopië"
+ },
+ "FO": {
+ "name": "Faeröer"
+ },
+ "FK": {
+ "name": "Falklandeilanden"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipijnen"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "Frankrijk"
+ },
+ "GF": {
+ "name": "Frans-Guyana"
+ },
+ "PF": {
+ "name": "Frans-Polynesië"
+ },
+ "TF": {
+ "name": "Franse Gebieden in de zuidelijke Indische Oceaan"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgië"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GR": {
+ "name": "Griekenland"
+ },
+ "GL": {
+ "name": "Groenland"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinee"
+ },
+ "GW": {
+ "name": "Guinee-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haïti"
+ },
+ "IM": {
+ "name": "Het Eiland Man"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hongarije"
+ },
+ "HK": {
+ "name": "Hongkong SAR van China"
+ },
+ "IE": {
+ "name": "Ierland"
+ },
+ "IS": {
+ "name": "IJsland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesië"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IL": {
+ "name": "Israël"
+ },
+ "IT": {
+ "name": "Italië"
+ },
+ "CI": {
+ "name": "Ivoorkust"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordanië"
+ },
+ "CV": {
+ "name": "Kaapverdië"
+ },
+ "CM": {
+ "name": "Kameroen"
+ },
+ "KZ": {
+ "name": "Kazachstan"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirgizië"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "UM": {
+ "name": "Kleine afgelegen eilanden van de Verenigde Staten"
+ },
+ "KW": {
+ "name": "Koeweit"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "HR": {
+ "name": "Kroatië"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Letland"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libië"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Litouwen"
+ },
+ "LU": {
+ "name": "Luxemburg"
+ },
+ "MO": {
+ "name": "Macau SAR van China"
+ },
+ "MK": {
+ "name": "Macedonië"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Malediven"
+ },
+ "MY": {
+ "name": "Maleisië"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marokko"
+ },
+ "MH": {
+ "name": "Marshalleilanden"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritanië"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavië"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolië"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birma)"
+ },
+ "NA": {
+ "name": "Namibië"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NL": {
+ "name": "Nederland"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NC": {
+ "name": "Nieuw-Caledonië"
+ },
+ "NZ": {
+ "name": "Nieuw-Zeeland"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "KP": {
+ "name": "Noord-Korea"
+ },
+ "MP": {
+ "name": "Noordelijke Marianen"
+ },
+ "NO": {
+ "name": "Noorwegen"
+ },
+ "NF": {
+ "name": "Norfolk"
+ },
+ "UG": {
+ "name": "Oeganda"
+ },
+ "UA": {
+ "name": "Oekraïne"
+ },
+ "UZ": {
+ "name": "Oezbekistan"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "TL": {
+ "name": "Oost-Timor"
+ },
+ "AT": {
+ "name": "Oostenrijk"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestijnse gebieden"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papoea-Nieuw-Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairneilanden"
+ },
+ "PL": {
+ "name": "Polen"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Roemenië"
+ },
+ "RU": {
+ "name": "Rusland"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "KN": {
+ "name": "Saint Kitts en Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "VC": {
+ "name": "Saint Vincent en de Grenadines"
+ },
+ "BL": {
+ "name": "Saint-Barthélemy"
+ },
+ "MF": {
+ "name": "Saint-Martin"
+ },
+ "PM": {
+ "name": "Saint-Pierre en Miquelon"
+ },
+ "SB": {
+ "name": "Salomoneilanden"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "Sao Tomé en Principe"
+ },
+ "SA": {
+ "name": "Saoedi-Arabië"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Servië"
+ },
+ "SC": {
+ "name": "Seychellen"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SH": {
+ "name": "Sint-Helena"
+ },
+ "SX": {
+ "name": "Sint-Maarten"
+ },
+ "SI": {
+ "name": "Slovenië"
+ },
+ "SK": {
+ "name": "Slowakije"
+ },
+ "SD": {
+ "name": "Soedan"
+ },
+ "SO": {
+ "name": "Somalië"
+ },
+ "ES": {
+ "name": "Spanje"
+ },
+ "SJ": {
+ "name": "Spitsbergen en Jan Mayen"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SY": {
+ "name": "Syrië"
+ },
+ "TJ": {
+ "name": "Tadzjikistan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad en Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TD": {
+ "name": "Tsjaad"
+ },
+ "CZ": {
+ "name": "Tsjechië"
+ },
+ "TN": {
+ "name": "Tunesië"
+ },
+ "TR": {
+ "name": "Turkije"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks- en Caicoseilanden"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vaticaanstad"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "GB": {
+ "name": "Verenigd Koninkrijk"
+ },
+ "AE": {
+ "name": "Verenigde Arabische Emiraten"
+ },
+ "US": {
+ "name": "Verenigde Staten"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis en Futuna"
+ },
+ "EH": {
+ "name": "Westelijke Sahara"
+ },
+ "BY": {
+ "name": "Wit-Rusland"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ },
+ "ZA": {
+ "name": "Zuid-Afrika"
+ },
+ "GS": {
+ "name": "Zuid-Georgia en Zuidelijke Sandwicheilanden"
+ },
+ "KR": {
+ "name": "Zuid-Korea"
+ },
+ "SS": {
+ "name": "Zuid-Soedan"
+ },
+ "SE": {
+ "name": "Zweden"
+ },
+ "CH": {
+ "name": "Zwitserland"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/nl.json b/library/intl/resources/country/nl.json
new file mode 100644
index 000000000..a6facca87
--- /dev/null
+++ b/library/intl/resources/country/nl.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ã…land"
+ },
+ "AL": {
+ "name": "Albanië"
+ },
+ "DZ": {
+ "name": "Algerije"
+ },
+ "AS": {
+ "name": "Amerikaans-Samoa"
+ },
+ "VI": {
+ "name": "Amerikaanse Maagdeneilanden"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua en Barbuda"
+ },
+ "AR": {
+ "name": "Argentinië"
+ },
+ "AM": {
+ "name": "Armenië"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension"
+ },
+ "AU": {
+ "name": "Australië"
+ },
+ "AZ": {
+ "name": "Azerbeidzjan"
+ },
+ "BS": {
+ "name": "Bahama’s"
+ },
+ "BH": {
+ "name": "Bahrein"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "België"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnië en Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazilië"
+ },
+ "IO": {
+ "name": "Britse Gebieden in de Indische Oceaan"
+ },
+ "VG": {
+ "name": "Britse Maagdeneilanden"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgarije"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodja"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canarische Eilanden"
+ },
+ "BQ": {
+ "name": "Caribisch Nederland"
+ },
+ "KY": {
+ "name": "Caymaneilanden"
+ },
+ "CF": {
+ "name": "Centraal-Afrikaanse Republiek"
+ },
+ "EA": {
+ "name": "Ceuta en Melilla"
+ },
+ "CL": {
+ "name": "Chili"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmaseiland"
+ },
+ "CC": {
+ "name": "Cocoseilanden"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoren"
+ },
+ "CG": {
+ "name": "Congo-Brazzaville"
+ },
+ "CD": {
+ "name": "Congo-Kinshasa"
+ },
+ "CK": {
+ "name": "Cookeilanden"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "DK": {
+ "name": "Denemarken"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominicaanse Republiek"
+ },
+ "DE": {
+ "name": "Duitsland"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypte"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatoriaal-Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estland"
+ },
+ "ET": {
+ "name": "Ethiopië"
+ },
+ "FO": {
+ "name": "Faeröer"
+ },
+ "FK": {
+ "name": "Falklandeilanden"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipijnen"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "Frankrijk"
+ },
+ "GF": {
+ "name": "Frans-Guyana"
+ },
+ "PF": {
+ "name": "Frans-Polynesië"
+ },
+ "TF": {
+ "name": "Franse Gebieden in de zuidelijke Indische Oceaan"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgië"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GR": {
+ "name": "Griekenland"
+ },
+ "GL": {
+ "name": "Groenland"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinee"
+ },
+ "GW": {
+ "name": "Guinee-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haïti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hongarije"
+ },
+ "HK": {
+ "name": "Hongkong SAR van China"
+ },
+ "IE": {
+ "name": "Ierland"
+ },
+ "IS": {
+ "name": "IJsland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesië"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israël"
+ },
+ "IT": {
+ "name": "Italië"
+ },
+ "CI": {
+ "name": "Ivoorkust"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordanië"
+ },
+ "CV": {
+ "name": "Kaapverdië"
+ },
+ "CM": {
+ "name": "Kameroen"
+ },
+ "KZ": {
+ "name": "Kazachstan"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirgizië"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "UM": {
+ "name": "Kleine afgelegen eilanden van de Verenigde Staten"
+ },
+ "KW": {
+ "name": "Koeweit"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "HR": {
+ "name": "Kroatië"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Letland"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libië"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Litouwen"
+ },
+ "LU": {
+ "name": "Luxemburg"
+ },
+ "MO": {
+ "name": "Macau SAR van China"
+ },
+ "MK": {
+ "name": "Macedonië"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldiven"
+ },
+ "MY": {
+ "name": "Maleisië"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marokko"
+ },
+ "MH": {
+ "name": "Marshalleilanden"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritanië"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavië"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolië"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Birma)"
+ },
+ "NA": {
+ "name": "Namibië"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NL": {
+ "name": "Nederland"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NC": {
+ "name": "Nieuw-Caledonië"
+ },
+ "NZ": {
+ "name": "Nieuw-Zeeland"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "KP": {
+ "name": "Noord-Korea"
+ },
+ "MP": {
+ "name": "Noordelijke Marianen"
+ },
+ "NO": {
+ "name": "Noorwegen"
+ },
+ "NF": {
+ "name": "Norfolk"
+ },
+ "UG": {
+ "name": "Oeganda"
+ },
+ "UA": {
+ "name": "Oekraïne"
+ },
+ "UZ": {
+ "name": "Oezbekistan"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "TL": {
+ "name": "Oost-Timor"
+ },
+ "AT": {
+ "name": "Oostenrijk"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestijnse gebieden"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papoea-Nieuw-Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairneilanden"
+ },
+ "PL": {
+ "name": "Polen"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Roemenië"
+ },
+ "RU": {
+ "name": "Rusland"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "KN": {
+ "name": "Saint Kitts en Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "VC": {
+ "name": "Saint Vincent en de Grenadines"
+ },
+ "BL": {
+ "name": "Saint-Barthélemy"
+ },
+ "MF": {
+ "name": "Saint-Martin"
+ },
+ "PM": {
+ "name": "Saint-Pierre en Miquelon"
+ },
+ "SB": {
+ "name": "Salomonseilanden"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "Sao Tomé en Principe"
+ },
+ "SA": {
+ "name": "Saoedi-Arabië"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Servië"
+ },
+ "SC": {
+ "name": "Seychellen"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SH": {
+ "name": "Sint-Helena"
+ },
+ "SX": {
+ "name": "Sint-Maarten"
+ },
+ "SI": {
+ "name": "Slovenië"
+ },
+ "SK": {
+ "name": "Slowakije"
+ },
+ "SD": {
+ "name": "Soedan"
+ },
+ "SO": {
+ "name": "Somalië"
+ },
+ "ES": {
+ "name": "Spanje"
+ },
+ "SJ": {
+ "name": "Spitsbergen en Jan Mayen"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SY": {
+ "name": "Syrië"
+ },
+ "TJ": {
+ "name": "Tadzjikistan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad en Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TD": {
+ "name": "Tsjaad"
+ },
+ "CZ": {
+ "name": "Tsjechië"
+ },
+ "TN": {
+ "name": "Tunesië"
+ },
+ "TR": {
+ "name": "Turkije"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks- en Caicoseilanden"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vaticaanstad"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "GB": {
+ "name": "Verenigd Koninkrijk"
+ },
+ "AE": {
+ "name": "Verenigde Arabische Emiraten"
+ },
+ "US": {
+ "name": "Verenigde Staten"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis en Futuna"
+ },
+ "EH": {
+ "name": "Westelijke Sahara"
+ },
+ "BY": {
+ "name": "Wit-Rusland"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ },
+ "ZA": {
+ "name": "Zuid-Afrika"
+ },
+ "GS": {
+ "name": "Zuid-Georgia en Zuidelijke Sandwicheilanden"
+ },
+ "KR": {
+ "name": "Zuid-Korea"
+ },
+ "SS": {
+ "name": "Zuid-Soedan"
+ },
+ "SE": {
+ "name": "Zweden"
+ },
+ "CH": {
+ "name": "Zwitserland"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/nmg.json b/library/intl/resources/country/nmg.json
new file mode 100644
index 000000000..63e8d7fb9
--- /dev/null
+++ b/library/intl/resources/country/nmg.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistaŋ"
+ },
+ "ZA": {
+ "name": "Afríka yí sí"
+ },
+ "EG": {
+ "name": "Ägyptɛn"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "US": {
+ "name": "Amɛŕka"
+ },
+ "AD": {
+ "name": "AndÉ”Ìra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguílla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antíga bá Barbúda"
+ },
+ "AR": {
+ "name": "Argentína"
+ },
+ "AM": {
+ "name": "Arménia"
+ },
+ "AW": {
+ "name": "Ãrúba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "IL": {
+ "name": "Äsrɛl"
+ },
+ "AZ": {
+ "name": "Azerbaïjaŋ"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BB": {
+ "name": "Barbado"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BE": {
+ "name": "Bɛlgik"
+ },
+ "BZ": {
+ "name": "Bɛliz"
+ },
+ "BD": {
+ "name": "Bɛŋgladɛsh"
+ },
+ "BM": {
+ "name": "Bɛrmuda"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia na Ærzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brésil"
+ },
+ "BN": {
+ "name": "Brunɛi"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butaŋ"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danemark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominíka"
+ },
+ "EC": {
+ "name": "Ekuateur"
+ },
+ "ER": {
+ "name": "Erytrea"
+ },
+ "ET": {
+ "name": "Ethiopiá"
+ },
+ "EE": {
+ "name": "Æstonia"
+ },
+ "FR": {
+ "name": "Fala"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fijiá"
+ },
+ "PH": {
+ "name": "Filipin"
+ },
+ "FI": {
+ "name": "Finlande"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabɔŋ"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Gána"
+ },
+ "GI": {
+ "name": "Gilbratar"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GR": {
+ "name": "Grɛce"
+ },
+ "GP": {
+ "name": "Guadeloup"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guine"
+ },
+ "GW": {
+ "name": "Guine Bisso"
+ },
+ "GQ": {
+ "name": "Guine Ekuatorial"
+ },
+ "PG": {
+ "name": "Guine Papuasi"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GF": {
+ "name": "Guyane Fala"
+ },
+ "HT": {
+ "name": "Haïti"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irland"
+ },
+ "IS": {
+ "name": "Island"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "DE": {
+ "name": "Jaman"
+ },
+ "JP": {
+ "name": "Japɔn"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "DJ": {
+ "name": "Jibúti"
+ },
+ "JO": {
+ "name": "Jɔrdania"
+ },
+ "GE": {
+ "name": "Jɔrgia"
+ },
+ "NC": {
+ "name": "Kaledoni nwanah"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KZ": {
+ "name": "Kazakstaŋ"
+ },
+ "KE": {
+ "name": "Kɛnya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "CD": {
+ "name": "Kongó Zaïre"
+ },
+ "KP": {
+ "name": "Koré yí bvuɔ"
+ },
+ "KR": {
+ "name": "Koré yí sí"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kosta Ríka"
+ },
+ "CI": {
+ "name": "Kote d´Ivoire"
+ },
+ "KW": {
+ "name": "Kowɛit"
+ },
+ "CO": {
+ "name": "KÉ”lÉ”Ìmbia"
+ },
+ "KM": {
+ "name": "Kɔmɔr"
+ },
+ "HR": {
+ "name": "Kroasia"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KG": {
+ "name": "Kyrgystaŋ"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LB": {
+ "name": "Libaŋ"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Lishenstein"
+ },
+ "LT": {
+ "name": "Lituaniá"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldivia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "FK": {
+ "name": "Maŋ má Falkland"
+ },
+ "CV": {
+ "name": "MaÅ‹Ì má KapvÉ›r"
+ },
+ "CK": {
+ "name": "MaÅ‹Ì má Kook"
+ },
+ "KY": {
+ "name": "MaÅ‹Ì má kumbi"
+ },
+ "MH": {
+ "name": "MaÅ‹Ì má Marshall"
+ },
+ "NF": {
+ "name": "MaÅ‹Ì má NÉ”rfÉ”rk"
+ },
+ "SB": {
+ "name": "MaÅ‹Ì má SalomÉ”n"
+ },
+ "TC": {
+ "name": "MaÅ‹Ì má Turk na Kaiko"
+ },
+ "MP": {
+ "name": "MaÅ‹Ì Mariá"
+ },
+ "MA": {
+ "name": "Marɔk"
+ },
+ "MQ": {
+ "name": "Martinika"
+ },
+ "YT": {
+ "name": "Mayɔt"
+ },
+ "MX": {
+ "name": "Mɛxik"
+ },
+ "FM": {
+ "name": "Mikronesia"
+ },
+ "AE": {
+ "name": "MinlambÉ”Ì NsaÅ‹Ìnsa mí Arabia"
+ },
+ "VI": {
+ "name": "MinsilÉ› mí maÅ‹Ì m´AmÉ›rka"
+ },
+ "VG": {
+ "name": "MinsilÉ›Ì mímaÅ‹ mí ngɛ̄lɛ̄n"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MU": {
+ "name": "Morisse"
+ },
+ "MR": {
+ "name": "Moritania"
+ },
+ "MZ": {
+ "name": "Mozambik"
+ },
+ "MD": {
+ "name": "Mɔldavia"
+ },
+ "MN": {
+ "name": "Mɔngolia"
+ },
+ "MS": {
+ "name": "Mɔnserrat"
+ },
+ "MM": {
+ "name": "Myanmar"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NL": {
+ "name": "Nedɛrland"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NI": {
+ "name": "Nikaragua"
+ },
+ "NU": {
+ "name": "NiuÉ›"
+ },
+ "CZ": {
+ "name": "NlambÉ”Ì bó tschÉ›k"
+ },
+ "DO": {
+ "name": "NlambÉ”Ì Dominíka"
+ },
+ "GB": {
+ "name": "NlambÉ”Ì NgÉ›lÉ›n"
+ },
+ "IO": {
+ "name": "NlambÉ”Ì ngÉ›lÉ›n ma yí maÅ‹ ntsiÉ›h"
+ },
+ "NR": {
+ "name": "Noru"
+ },
+ "NO": {
+ "name": "Nɔrvɛg"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "AU": {
+ "name": "Östraliá"
+ },
+ "AT": {
+ "name": "Ötrish"
+ },
+ "HN": {
+ "name": "Ɔndúras"
+ },
+ "HU": {
+ "name": "Ɔngría"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PS": {
+ "name": "Palɛstin"
+ },
+ "PW": {
+ "name": "Palo"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "ES": {
+ "name": "Paŋá"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkairn"
+ },
+ "PF": {
+ "name": "Polynesia Fala"
+ },
+ "PL": {
+ "name": "Pɔlɔŋ"
+ },
+ "PT": {
+ "name": "Pɔrtugal"
+ },
+ "PR": {
+ "name": "Puɛrto Riko"
+ },
+ "RE": {
+ "name": "Réuniɔn"
+ },
+ "RO": {
+ "name": "Roumania"
+ },
+ "RU": {
+ "name": "Russi"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "KN": {
+ "name": "Saint Kitts na Nevis"
+ },
+ "SH": {
+ "name": "Saint Lina"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "PM": {
+ "name": "Saint Peter ba Mikelɔn"
+ },
+ "VC": {
+ "name": "Saint Vincent ba Grenadines"
+ },
+ "SV": {
+ "name": "Salvadɔr"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa m ÌAmÉ›Ìrka"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "Sao Tomé ba Prinship"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "CF": {
+ "name": "Sentrafríka"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychɛlle"
+ },
+ "CN": {
+ "name": "Shine"
+ },
+ "SL": {
+ "name": "Sierra Leɔn"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "CY": {
+ "name": "Sipria"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somália"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudaŋ"
+ },
+ "SE": {
+ "name": "Suɛd"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "CH": {
+ "name": "Switzɛrland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TH": {
+ "name": "Taïland"
+ },
+ "TW": {
+ "name": "Taïwan"
+ },
+ "TJ": {
+ "name": "Tajikistaŋ"
+ },
+ "TZ": {
+ "name": "Tanzánía"
+ },
+ "TL": {
+ "name": "Timɔr tsindikēh"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelo"
+ },
+ "TO": {
+ "name": "Tɔnga"
+ },
+ "TT": {
+ "name": "Trinidad ba Tobágó"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TD": {
+ "name": "Tshad"
+ },
+ "CL": {
+ "name": "Tshili"
+ },
+ "TN": {
+ "name": "Tunisiá"
+ },
+ "TR": {
+ "name": "Turki"
+ },
+ "TM": {
+ "name": "Turkmɛnistaŋ"
+ },
+ "TV": {
+ "name": "Tuvalú"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukrɛn"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "UsbÇkistaÅ‹"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikaŋ"
+ },
+ "VE": {
+ "name": "VÇnÇzuela"
+ },
+ "VN": {
+ "name": "Viɛtnam"
+ },
+ "WF": {
+ "name": "Wallis ba Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "YÇmÉ›n"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "NZ": {
+ "name": "Zeland nwanah"
+ },
+ "ZW": {
+ "name": "ZimbabwÇ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/nn.json b/library/intl/resources/country/nn.json
new file mode 100644
index 000000000..f6188d1de
--- /dev/null
+++ b/library/intl/resources/country/nn.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algerie"
+ },
+ "AS": {
+ "name": "Amerikansk Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktis"
+ },
+ "AG": {
+ "name": "Antigua og Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension"
+ },
+ "AZ": {
+ "name": "Aserbajdsjan"
+ },
+ "TL": {
+ "name": "Aust-Timor"
+ },
+ "AT": {
+ "name": "Austerrike"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgia"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia og Hercegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "IO": {
+ "name": "Britiske område i Det indiske hav"
+ },
+ "BN": {
+ "name": "Brunei Darussalam"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "KY": {
+ "name": "Caymanøyane"
+ },
+ "EA": {
+ "name": "Ceuta og Melilla"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CX": {
+ "name": "Christmasøya"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "CK": {
+ "name": "Cookøyane"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danmark"
+ },
+ "VI": {
+ "name": "Dei amerikanske jomfruøyane"
+ },
+ "VG": {
+ "name": "Dei britiske jomfruøyane"
+ },
+ "AE": {
+ "name": "Dei sameinte arabiske emirata"
+ },
+ "DO": {
+ "name": "Den dominikanske republikken"
+ },
+ "CF": {
+ "name": "Den sentralafrikanske republikken"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "GQ": {
+ "name": "Ekvatorial-Guinea"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "CI": {
+ "name": "Elfenbeinskysten"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estland"
+ },
+ "ET": {
+ "name": "Etiopia"
+ },
+ "FK": {
+ "name": "Falklandsøyane"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filippinane"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "Frankrike"
+ },
+ "GF": {
+ "name": "Fransk Guyana"
+ },
+ "PF": {
+ "name": "Fransk Polynesia"
+ },
+ "TF": {
+ "name": "Franske sørområde"
+ },
+ "FO": {
+ "name": "Færøyane"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grønland"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "GR": {
+ "name": "Hellas"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hongkong S.A.R. Kina"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irland"
+ },
+ "IS": {
+ "name": "Island"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KH": {
+ "name": "Kambodsja"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "IC": {
+ "name": "Kanariøyane"
+ },
+ "CV": {
+ "name": "Kapp Verde"
+ },
+ "BQ": {
+ "name": "Karibisk Nederland"
+ },
+ "KZ": {
+ "name": "Kasakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CN": {
+ "name": "Kina"
+ },
+ "KG": {
+ "name": "Kirgisistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CC": {
+ "name": "Kokosøyane"
+ },
+ "KM": {
+ "name": "Komorene"
+ },
+ "CG": {
+ "name": "Kongo-Brazzaville"
+ },
+ "CD": {
+ "name": "Kongo-Kinshasa"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "HR": {
+ "name": "Kroatia"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "BY": {
+ "name": "Kviterussland"
+ },
+ "CY": {
+ "name": "Kypros"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Litauen"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macao S.A.R. Kina"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MK": {
+ "name": "Makedonia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldivane"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "IM": {
+ "name": "Man"
+ },
+ "MA": {
+ "name": "Marokko"
+ },
+ "MH": {
+ "name": "Marshalløyane"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Mikronesiaføderasjonen"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mosambik"
+ },
+ "MM": {
+ "name": "Myanmar"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NL": {
+ "name": "Nederland"
+ },
+ "SX": {
+ "name": "Nederlandsk St. Martin"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "KP": {
+ "name": "Nord-Korea"
+ },
+ "MP": {
+ "name": "Nord-Marianane"
+ },
+ "NO": {
+ "name": "Noreg"
+ },
+ "NF": {
+ "name": "Norfolkøyane"
+ },
+ "NC": {
+ "name": "Ny-Caledonia"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinsk territorium"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Ny-Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PL": {
+ "name": "Polen"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russland"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "SB": {
+ "name": "Salomonøyane"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé og Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychellane"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ES": {
+ "name": "Spania"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "KN": {
+ "name": "St. Christopher og Nevis"
+ },
+ "LC": {
+ "name": "St. Lucia"
+ },
+ "PM": {
+ "name": "St. Pierre og Miquelon"
+ },
+ "VC": {
+ "name": "St. Vincent og Grenadinane"
+ },
+ "GB": {
+ "name": "Storbritannia"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard og Jan Mayen"
+ },
+ "CH": {
+ "name": "Sveits"
+ },
+ "SE": {
+ "name": "Sverige"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "ZA": {
+ "name": "Sør-Afrika"
+ },
+ "GS": {
+ "name": "Sør-Georgia og Sør-Sandwich-øyane"
+ },
+ "KR": {
+ "name": "Sør-Korea"
+ },
+ "SS": {
+ "name": "Sør-Sudan"
+ },
+ "TJ": {
+ "name": "Tadsjikistan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TD": {
+ "name": "Tchad"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad og Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "CZ": {
+ "name": "Tsjekkia"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks- og Caicosøyane"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "TR": {
+ "name": "Tyrkia"
+ },
+ "DE": {
+ "name": "Tyskland"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraina"
+ },
+ "HU": {
+ "name": "Ungarn"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "US": {
+ "name": "USA"
+ },
+ "UM": {
+ "name": "USAs ytre småøyar"
+ },
+ "UZ": {
+ "name": "Usbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikanstaten"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "EH": {
+ "name": "Vest-Sahara"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis og Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ },
+ "AX": {
+ "name": "Ã…land"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/nus.json b/library/intl/resources/country/nus.json
new file mode 100644
index 000000000..e48b5158b
--- /dev/null
+++ b/library/intl/resources/country/nus.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Abganithtan"
+ },
+ "AZ": {
+ "name": "Adhe̱rbe̱ja̱n"
+ },
+ "AR": {
+ "name": "Aɛrgentin"
+ },
+ "AM": {
+ "name": "Aɛrmänia"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albänia"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AS": {
+ "name": "Amerika thamow"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antiguaa kɛnɛ Barbuda"
+ },
+ "AO": {
+ "name": "AÅ‹gola"
+ },
+ "AI": {
+ "name": "Aŋguɛla"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Athɔra̱lia"
+ },
+ "AT": {
+ "name": "Athtɛria"
+ },
+ "BS": {
+ "name": "Bämuɔth"
+ },
+ "BR": {
+ "name": "Bäraadhiil"
+ },
+ "BB": {
+ "name": "Bärbadoth"
+ },
+ "BH": {
+ "name": "Ba̱reen"
+ },
+ "BY": {
+ "name": "Be̱lɛruth"
+ },
+ "BE": {
+ "name": "Be̱lgim"
+ },
+ "BD": {
+ "name": "Bengeladiec"
+ },
+ "BJ": {
+ "name": "Be̱ni̱n"
+ },
+ "BM": {
+ "name": "Be̱rmudaa"
+ },
+ "BZ": {
+ "name": "Bilidha"
+ },
+ "BW": {
+ "name": "Bothiwaana"
+ },
+ "BA": {
+ "name": "Bothnia kɛnɛ ɣärgobinia"
+ },
+ "BG": {
+ "name": "Bulga̱a̱ria"
+ },
+ "BO": {
+ "name": "Bulibia"
+ },
+ "BF": {
+ "name": "Burkinɛ pa̱thu"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BN": {
+ "name": "Burunɛy"
+ },
+ "VG": {
+ "name": "Burutic dhuɔ̱ɔ̱l be̱rgin"
+ },
+ "IO": {
+ "name": "Burutic ɣe̱ndian oce̱n"
+ },
+ "BT": {
+ "name": "Buta̱n"
+ },
+ "TD": {
+ "name": "Ca̱d"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "CN": {
+ "name": "Cayna"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CF": {
+ "name": "Cɛntrɔl aprika repuɔblic"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CL": {
+ "name": "Cili̱"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "CA": {
+ "name": "Känɛda"
+ },
+ "KY": {
+ "name": "Kaymɛn ɣa̱ylɛn"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CM": {
+ "name": "Kɛmɛrun"
+ },
+ "CV": {
+ "name": "Kɛp bedi ɣa̱ylɛn"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CI": {
+ "name": "Kodibo̱o̱"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KH": {
+ "name": "Kombodia"
+ },
+ "KM": {
+ "name": "Komruth"
+ },
+ "HR": {
+ "name": "Korwaatia"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kothtirika"
+ },
+ "CG": {
+ "name": "Kɔŋgɔ"
+ },
+ "CK": {
+ "name": "Kuk ɣa̱ylɛn"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé & Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "SH": {
+ "name": "St. Helena"
+ },
+ "KN": {
+ "name": "St. Kitts & Nevis"
+ },
+ "LC": {
+ "name": "St. Lucia"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "PM": {
+ "name": "St. Pierre & Miquelon"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad & Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks & Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis & Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/nyn.json b/library/intl/resources/country/nyn.json
new file mode 100644
index 000000000..3340bf9ca
--- /dev/null
+++ b/library/intl/resources/country/nyn.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afuganistani"
+ },
+ "IS": {
+ "name": "Aisilandi"
+ },
+ "CI": {
+ "name": "Aivore Kositi"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AE": {
+ "name": "Amahanga ga Buharabu ageeteereine"
+ },
+ "US": {
+ "name": "Amerika"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AG": {
+ "name": "Angiguwa na Babuda"
+ },
+ "AO": {
+ "name": "Angora"
+ },
+ "AI": {
+ "name": "Angwira"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AR": {
+ "name": "Arigentina"
+ },
+ "DZ": {
+ "name": "Arigyeriya"
+ },
+ "AM": {
+ "name": "Arimeniya"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AL": {
+ "name": "Arubania"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AZ": {
+ "name": "Azabagyani"
+ },
+ "BB": {
+ "name": "Babadosi"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BH": {
+ "name": "Bahareni"
+ },
+ "BD": {
+ "name": "Bangaradeshi"
+ },
+ "BY": {
+ "name": "Bararusi"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BM": {
+ "name": "Berimuda"
+ },
+ "BZ": {
+ "name": "Berize"
+ },
+ "BF": {
+ "name": "Bokina Faso"
+ },
+ "BO": {
+ "name": "Boriiviya"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BA": {
+ "name": "Boziniya na Hezegovina"
+ },
+ "BE": {
+ "name": "Bubirigi"
+ },
+ "FR": {
+ "name": "Bufaransa"
+ },
+ "FI": {
+ "name": "Bufini"
+ },
+ "DE": {
+ "name": "Bugirimaani"
+ },
+ "GB": {
+ "name": "Bungyereza"
+ },
+ "BR": {
+ "name": "Buraziiri"
+ },
+ "BG": {
+ "name": "Burugariya"
+ },
+ "TL": {
+ "name": "Burugweizooba bwa Timori"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BN": {
+ "name": "Burunei"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "TR": {
+ "name": "Buturuki \/Take"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Deenimaaka"
+ },
+ "CD": {
+ "name": "Demokoratika Ripaaburika ya Kongo"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "MP": {
+ "name": "Ebizinga by’amatemba ga Mariana"
+ },
+ "TC": {
+ "name": "Ebizinga bya Buturuki na Kaiko"
+ },
+ "FK": {
+ "name": "Ebizinga bya Faakilanda"
+ },
+ "IO": {
+ "name": "Ebizinga bya Indian ebya Bungyereza"
+ },
+ "KY": {
+ "name": "Ebizinga bya Kayimani"
+ },
+ "CV": {
+ "name": "Ebizinga bya Kepuvade"
+ },
+ "CK": {
+ "name": "Ebizinga bya Kuuku"
+ },
+ "MH": {
+ "name": "Ebizinga bya Marshaa"
+ },
+ "SB": {
+ "name": "Ebizinga bya Surimaani"
+ },
+ "VI": {
+ "name": "Ebizinga bya Virigini ebya Amerika"
+ },
+ "VG": {
+ "name": "Ebizinga bya Virigini ebya Bungyereza"
+ },
+ "CF": {
+ "name": "Eihanga rya Rwagati ya Afirika"
+ },
+ "NF": {
+ "name": "Ekizinga Norifoko"
+ },
+ "SV": {
+ "name": "Eri Salivado"
+ },
+ "ER": {
+ "name": "Eriteriya"
+ },
+ "EE": {
+ "name": "Esitoniya"
+ },
+ "ET": {
+ "name": "Ethiyopiya"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Figyi"
+ },
+ "PH": {
+ "name": "Firipino"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabooni"
+ },
+ "GM": {
+ "name": "Gambiya"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GI": {
+ "name": "Giburaata"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Ginebisau"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GQ": {
+ "name": "Guni"
+ },
+ "GD": {
+ "name": "Gurenada"
+ },
+ "GL": {
+ "name": "Guriinirandi"
+ },
+ "GR": {
+ "name": "Guriisi"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GF": {
+ "name": "Guyana ya Bufaransa"
+ },
+ "GP": {
+ "name": "Gwaderupe"
+ },
+ "GU": {
+ "name": "Gwamu"
+ },
+ "GT": {
+ "name": "Gwatemara"
+ },
+ "JM": {
+ "name": "Gyamaika"
+ },
+ "JP": {
+ "name": "Gyapaani"
+ },
+ "DJ": {
+ "name": "Gyibuti"
+ },
+ "GE": {
+ "name": "Gyogiya"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HU": {
+ "name": "Hangare"
+ },
+ "HN": {
+ "name": "Hondurasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "NL": {
+ "name": "Hoorandi"
+ },
+ "EC": {
+ "name": "Ikweda"
+ },
+ "IN": {
+ "name": "Indiya"
+ },
+ "ID": {
+ "name": "Indoneeziya"
+ },
+ "IQ": {
+ "name": "Iraaka"
+ },
+ "IR": {
+ "name": "Iraani"
+ },
+ "IE": {
+ "name": "Irerandi"
+ },
+ "IL": {
+ "name": "Isirairi"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IT": {
+ "name": "Itare"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "KH": {
+ "name": "Kambodiya"
+ },
+ "CM": {
+ "name": "Kameruuni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Kata"
+ },
+ "KZ": {
+ "name": "Kazakisitani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizistani"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "HR": {
+ "name": "Korasiya"
+ },
+ "KR": {
+ "name": "Koreya Amashuuma"
+ },
+ "KP": {
+ "name": "Koreya Amatemba"
+ },
+ "CO": {
+ "name": "Korombiya"
+ },
+ "KM": {
+ "name": "Koromo"
+ },
+ "CR": {
+ "name": "Kositarika"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuweiti"
+ },
+ "LU": {
+ "name": "Lakizembaaga"
+ },
+ "LV": {
+ "name": "Latviya"
+ },
+ "LA": {
+ "name": "Layosi"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberiya"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Lishenteni"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madagasika"
+ },
+ "MW": {
+ "name": "Marawi"
+ },
+ "MY": {
+ "name": "marayizia"
+ },
+ "ML": {
+ "name": "Mari"
+ },
+ "MV": {
+ "name": "Maridives"
+ },
+ "MT": {
+ "name": "Marita"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MK": {
+ "name": "Masedoonia"
+ },
+ "MU": {
+ "name": "Maurishiasi"
+ },
+ "MR": {
+ "name": "Mauriteeniya"
+ },
+ "YT": {
+ "name": "Mayote"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Mikironesiya"
+ },
+ "EG": {
+ "name": "Misiri"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongoria"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrati"
+ },
+ "MD": {
+ "name": "Moridova"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanamar"
+ },
+ "NE": {
+ "name": "Naigya"
+ },
+ "NG": {
+ "name": "Naigyeriya"
+ },
+ "NA": {
+ "name": "Namibiya"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepo"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NC": {
+ "name": "Niukaredonia"
+ },
+ "NZ": {
+ "name": "Niuzirandi"
+ },
+ "NO": {
+ "name": "Noorwe"
+ },
+ "OM": {
+ "name": "Omaani"
+ },
+ "AU": {
+ "name": "Ositureeriya"
+ },
+ "AT": {
+ "name": "Osituria"
+ },
+ "PK": {
+ "name": "Pakisitaani"
+ },
+ "PW": {
+ "name": "Palaawu"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua"
+ },
+ "PY": {
+ "name": "Paragwai"
+ },
+ "PS": {
+ "name": "Parestiina na Gaza"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkaini"
+ },
+ "PT": {
+ "name": "Pocugo"
+ },
+ "PF": {
+ "name": "Polinesia ya Bufaransa"
+ },
+ "PL": {
+ "name": "Poorandi"
+ },
+ "PR": {
+ "name": "Pwetoriko"
+ },
+ "DO": {
+ "name": "Ripaaburika ya Dominica"
+ },
+ "CZ": {
+ "name": "Ripaaburika ya Zeeki"
+ },
+ "RE": {
+ "name": "Riyuniyoni"
+ },
+ "RO": {
+ "name": "Romaniya"
+ },
+ "RU": {
+ "name": "Rrasha"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "CY": {
+ "name": "Saipurasi"
+ },
+ "SM": {
+ "name": "Samarino"
+ },
+ "WS": {
+ "name": "Samowa"
+ },
+ "AS": {
+ "name": "Samowa ya Ameerika"
+ },
+ "SA": {
+ "name": "Saudi Areebiya"
+ },
+ "ZA": {
+ "name": "Sausi Afirika"
+ },
+ "ST": {
+ "name": "Sawo Tome na Purinsipo"
+ },
+ "SN": {
+ "name": "Senego"
+ },
+ "SH": {
+ "name": "Senti Herena"
+ },
+ "KN": {
+ "name": "Senti Kittis na Nevisi"
+ },
+ "PM": {
+ "name": "Senti Piyerre na Mikweron"
+ },
+ "LC": {
+ "name": "Senti Rusiya"
+ },
+ "VC": {
+ "name": "Senti Vinsent na Gurenadini"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Shesheresi"
+ },
+ "SG": {
+ "name": "Singapo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "ES": {
+ "name": "Sipeyini"
+ },
+ "LK": {
+ "name": "Siriranka"
+ },
+ "SY": {
+ "name": "Siriya"
+ },
+ "SK": {
+ "name": "Sirovaakiya"
+ },
+ "SI": {
+ "name": "Sirovaaniya"
+ },
+ "SL": {
+ "name": "Sirra Riyooni"
+ },
+ "SO": {
+ "name": "Somaariya"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SR": {
+ "name": "Surinaamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swazirandi"
+ },
+ "SE": {
+ "name": "Swideni"
+ },
+ "CH": {
+ "name": "Swisi"
+ },
+ "TH": {
+ "name": "Tairandi"
+ },
+ "TJ": {
+ "name": "Tajikisitani"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TW": {
+ "name": "Tayiwaani"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokerawu"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunizia"
+ },
+ "TT": {
+ "name": "Turinidad na Tobago"
+ },
+ "TM": {
+ "name": "Turukimenisitani"
+ },
+ "TV": {
+ "name": "Tuvaru"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukureini"
+ },
+ "UY": {
+ "name": "Urugwai"
+ },
+ "UZ": {
+ "name": "Uzibekisitani"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venezuwera"
+ },
+ "VN": {
+ "name": "Viyetinaamu"
+ },
+ "WF": {
+ "name": "Warris na Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "JO": {
+ "name": "Yorudaani"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/or.json b/library/intl/resources/country/or.json
new file mode 100644
index 000000000..4b225825b
--- /dev/null
+++ b/library/intl/resources/country/or.json
@@ -0,0 +1,761 @@
+{
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "AT": {
+ "name": "ଅଷà­à¬Ÿà­à¬°à¬¿à¬†"
+ },
+ "AU": {
+ "name": "ଅଷà­à¬Ÿà­à¬°à­‡à¬²à¬¿à¬†"
+ },
+ "CI": {
+ "name": "ଆଇବରୀ କୋଷà­à¬Ÿ"
+ },
+ "IM": {
+ "name": "ଆଇଲୠଅଫୠମୈନà­"
+ },
+ "IS": {
+ "name": "ଆଇସଲà­à­Ÿà¬¾à¬£à­à¬¡"
+ },
+ "AI": {
+ "name": "ଆଙà­à¬—à­à¬‡à¬²à­à¬²à¬¾"
+ },
+ "AO": {
+ "name": "ଆଙà­à¬—ୋଲା"
+ },
+ "AZ": {
+ "name": "ଆଜେରବାଇଜାନà­"
+ },
+ "AG": {
+ "name": "ଆଣà­à¬Ÿà¬¿à¬—à­à¬† à¬à¬¬à¬‚ ବାରବà­à¬¦à¬¾"
+ },
+ "AD": {
+ "name": "ଆଣà­à¬¡à­‹à¬°à¬¾"
+ },
+ "AF": {
+ "name": "ଆଫାଗାନିସà­à¬¤à¬¾à¬¨à­"
+ },
+ "AS": {
+ "name": "ଆମେରିକାନୠସାମୋଆ"
+ },
+ "IE": {
+ "name": "ଆୟରଲà­à­Ÿà¬¾à¬£à­à¬¡"
+ },
+ "AW": {
+ "name": "ଆରà­à¬¬à¬¾"
+ },
+ "AR": {
+ "name": "ଆରà­à¬œà­‡à¬£à­à¬Ÿà¬¿à¬¨à¬¾"
+ },
+ "AQ": {
+ "name": "ଆରà­à¬£à­à¬Ÿà¬•à¬Ÿà¬¿à¬•à¬¾"
+ },
+ "AM": {
+ "name": "ଆରà­à¬®à­‡à¬¨à¬¿à¬†"
+ },
+ "DZ": {
+ "name": "ଆଲଜେରିଆ"
+ },
+ "AL": {
+ "name": "ଆଲବାନିଆ"
+ },
+ "AX": {
+ "name": "ଆଲାଣà­à¬¡ ଆଇସଲà­à­Ÿà¬¾à¬£à­à¬¡"
+ },
+ "GQ": {
+ "name": "ଇକà­à¬¬à¬¾à¬Ÿà­‡à¬°à¬¿à¬†à¬²à­ ଗà­à¬‡à¬¨à¬¿à¬†"
+ },
+ "EC": {
+ "name": "ଇକà­à­±à¬¾à¬¡à­‹à¬°à­"
+ },
+ "EG": {
+ "name": "ଇଜିପà­à¬Ÿ"
+ },
+ "IT": {
+ "name": "ଇଟାଲୀ"
+ },
+ "ID": {
+ "name": "ଇଣà­à¬¡à­‹à¬¨à­‡à¬¸à¬¿à¬†"
+ },
+ "ET": {
+ "name": "ଇଥିଓପିଆ"
+ },
+ "IQ": {
+ "name": "ଇରାକà­"
+ },
+ "IR": {
+ "name": "ଇରାନà­"
+ },
+ "ER": {
+ "name": "ଇରିଟà­à¬°à¬¿à­Ÿà¬¾"
+ },
+ "IL": {
+ "name": "ଇସà­à¬°à¬¾à¬à¬²à­"
+ },
+ "UG": {
+ "name": "ଉଗାଣà­à¬¡à¬¾"
+ },
+ "UZ": {
+ "name": "ଉଜବେକିସà­à¬¥à¬¾à¬¨à­"
+ },
+ "KP": {
+ "name": "ଉତà­à¬¤à¬° କୋରିଆ"
+ },
+ "MP": {
+ "name": "ଉତà­à¬¤à¬° ମାରିଆନା ଦà­à¬¬à­€à¬ªà¬ªà­à¬žà­à¬œ"
+ },
+ "UY": {
+ "name": "ଉରà­à¬—à­à¬"
+ },
+ "SV": {
+ "name": "à¬à¬²à­ ସାଲଭାଡୋରà­"
+ },
+ "EE": {
+ "name": "à¬à¬¸à­à¬¤à­‹à¬¨à¬¿à¬†"
+ },
+ "OM": {
+ "name": "ଓମାନà­"
+ },
+ "CD": {
+ "name": "କଙà­à¬—à­‹-କିନସାସା"
+ },
+ "CG": {
+ "name": "କଙà­à¬—à­‹-ବà­à¬°à¬¾à¬œà¬¿à¬­à¬¿à¬²à­à¬²à­‡"
+ },
+ "QA": {
+ "name": "କତାରà­"
+ },
+ "KZ": {
+ "name": "କାଜାକାସà­à¬¥à¬¾à¬¨à­"
+ },
+ "CA": {
+ "name": "କାନାଡା"
+ },
+ "CM": {
+ "name": "କାମେରà­à¬¨à­"
+ },
+ "KM": {
+ "name": "କାମୋରସà­"
+ },
+ "KH": {
+ "name": "କାମà­à¬¬à­‹à¬¡à¬¿à¬†"
+ },
+ "KI": {
+ "name": "କିରିବାଟୀ"
+ },
+ "KG": {
+ "name": "କିରà­à¬—ିଜିସà­à¬¥à¬¾à¬¨"
+ },
+ "KW": {
+ "name": "କà­à¬à¬¤à­"
+ },
+ "CK": {
+ "name": "କà­à¬•à­ ଆଇସଲà­à­Ÿà¬¾à¬£à­à¬¡"
+ },
+ "KE": {
+ "name": "କେନିୟା"
+ },
+ "CV": {
+ "name": "କେପୠଭରà­à¬¦à­‡"
+ },
+ "KY": {
+ "name": "କେମà­à­Ÿà¬¾à¬¨à­ ଦà­à¬¬à­€à¬ªà¬ªà­à¬žà­à¬œ"
+ },
+ "CC": {
+ "name": "କୋକୋସୠଆଇସଲà­à­Ÿà¬¾à¬£à­à¬¡"
+ },
+ "CO": {
+ "name": "କୋଲମà­à¬¬à¬¿à¬†"
+ },
+ "CR": {
+ "name": "କୋଷà­à¬Ÿà¬¾ ରିକା"
+ },
+ "HR": {
+ "name": "କà­à¬°à­‹à¬†à¬Ÿà¬¿à¬†"
+ },
+ "CU": {
+ "name": "କà­à­±à¬¿à¬¬à¬¾"
+ },
+ "CX": {
+ "name": "ଖà­à¬°à­€à¬·à­à¬Ÿà¬®à¬¾à¬¸ ଆଇଲà­à­Ÿà¬¾à¬£à­à¬¡"
+ },
+ "GA": {
+ "name": "ଗାବୋନà­"
+ },
+ "GM": {
+ "name": "ଗାମà­à¬¬à¬¿à¬†"
+ },
+ "GU": {
+ "name": "ଗà­à¬†à¬®à­"
+ },
+ "GY": {
+ "name": "ଗà­à¬‡à¬¨à¬¾"
+ },
+ "GW": {
+ "name": "ଗà­à¬‡à¬¨à¬¿à¬†-ବିସାଉ"
+ },
+ "GT": {
+ "name": "ଗà­à¬à¬¤à¬®à¬¾à¬²à¬¾"
+ },
+ "GN": {
+ "name": "ଗà­à¬à¬¨à­‡à¬†"
+ },
+ "GG": {
+ "name": "ଗà­à¬à¬°à¬¨à­‡à¬¸à¬¿"
+ },
+ "GP": {
+ "name": "ଗୌଡେଲୌପେ"
+ },
+ "GL": {
+ "name": "ଗà­à¬°à­€à¬¨à¬²à­à­Ÿà¬¾à¬£à­à¬¡"
+ },
+ "GR": {
+ "name": "ଗà­à¬°à­€à¬¸à­"
+ },
+ "GD": {
+ "name": "ଗà­à¬°à­‡à¬¨à¬¾à¬¡à¬¾"
+ },
+ "GH": {
+ "name": "ଘାନା"
+ },
+ "TD": {
+ "name": "ଚାଦà­"
+ },
+ "CN": {
+ "name": "ଚିନà­"
+ },
+ "CL": {
+ "name": "ଚିଲà­à¬²à­€"
+ },
+ "CZ": {
+ "name": "ଚେକୠସାଧାରଣତନà­à¬¤à­à¬°"
+ },
+ "GE": {
+ "name": "ଜରà­à¬œà¬¿à¬†"
+ },
+ "DE": {
+ "name": "ଜରà­à¬®à¬¾à¬¨à­€"
+ },
+ "JE": {
+ "name": "ଜରà­à¬¸à¬¿"
+ },
+ "JP": {
+ "name": "ଜାପାନà­"
+ },
+ "JM": {
+ "name": "ଜାମାଇକା"
+ },
+ "ZM": {
+ "name": "ଜାମà­à¬¬à¬¿à¬†"
+ },
+ "GI": {
+ "name": "ଜିବà­à¬°à¬¾à¬²à­à¬Ÿà¬°à­"
+ },
+ "ZW": {
+ "name": "ଜିମà­à¬¬à¬¾à­±à­‡"
+ },
+ "JO": {
+ "name": "ଜୋରà­à¬¡à¬¾à¬¨à­"
+ },
+ "TV": {
+ "name": "ଟà­à¬­à¬¾à¬²à­"
+ },
+ "TK": {
+ "name": "ଟୋକେଲାଉ"
+ },
+ "TG": {
+ "name": "ଟୋଗୋ"
+ },
+ "TO": {
+ "name": "ଟୋଙà­à¬—ା"
+ },
+ "DJ": {
+ "name": "ଡିବୌଟି"
+ },
+ "DK": {
+ "name": "ଡେନମାରà­à¬•"
+ },
+ "DO": {
+ "name": "ଡୋମିନକାନୠପà­à¬°à¬œà¬¾à¬¤à¬¨à­à¬¤à­à¬°"
+ },
+ "DM": {
+ "name": "ଡୋମିନାକା"
+ },
+ "TW": {
+ "name": "ତାଇୱାନà­"
+ },
+ "TJ": {
+ "name": "ତାଜିକିସà­à¬¥à¬¾à¬¨à­"
+ },
+ "TZ": {
+ "name": "ତାଞà­à¬œà¬¾à¬¨à¬¿à¬†"
+ },
+ "TN": {
+ "name": "ତà­à¬¨à¬¿à¬¸à¬¿à¬†"
+ },
+ "TM": {
+ "name": "ତà­à¬°à­à¬•à¬®à­‡à¬¨à¬¿à¬¸à­à¬¤à¬¾à¬¨à­"
+ },
+ "TC": {
+ "name": "ତà­à¬°à­à¬•à¬¸à­ à¬à¬¬à¬‚ ସାଇକସୠଦà­à¬¬à­€à¬ªà¬ªà­à¬žà­à¬œ"
+ },
+ "TR": {
+ "name": "ତà­à¬°à­à¬•à­€"
+ },
+ "TT": {
+ "name": "ତà­à¬°à¬¿à¬¨à¬¿à¬¦à¬¾à¬¦à­ à¬à¬¬à¬‚ ଟୋବାଗୋ"
+ },
+ "TH": {
+ "name": "ଥାଇଲାଣà­à¬¡"
+ },
+ "ZA": {
+ "name": "ଦକà­à¬·à¬¿à¬£ ଆଫà­à¬°à¬¿à¬•à¬¾"
+ },
+ "KR": {
+ "name": "ଦକà­à¬·à¬¿à¬£ କୋରିଆ"
+ },
+ "GS": {
+ "name": "ଦକà­à¬·à¬¿à¬£ ଜରà­à¬œà¬¿à¬† à¬à¬¬à¬‚ ଦକà­à¬·à¬¿à¬£ ସାଣà­à¬¡à­±à¬¿à¬šà­ ଦà­à¬¬à­€à¬ªà¬ªà­à¬žà­à¬œ"
+ },
+ "SS": {
+ "name": "ଦକà­à¬·à¬¿à¬¨ ସà­à¬¦à¬¾à¬¨"
+ },
+ "NF": {
+ "name": "ନରଫà­à¬²à¬•à­ ଦà­à¬¬à­€à¬ª"
+ },
+ "NO": {
+ "name": "ନରୱେ"
+ },
+ "NE": {
+ "name": "ନାଇଜରà­"
+ },
+ "NG": {
+ "name": "ନାଇଜେରିଆ"
+ },
+ "NR": {
+ "name": "ନାଉରà­"
+ },
+ "NA": {
+ "name": "ନାମà­à¬¬à¬¿à¬†"
+ },
+ "NU": {
+ "name": "ନିଉ"
+ },
+ "NI": {
+ "name": "ନିକାରାଗà­à¬†"
+ },
+ "NC": {
+ "name": "ନୂତନ କାଲେଡୋନିଆ"
+ },
+ "NL": {
+ "name": "ନେଦରଲà­à­Ÿà¬¾à¬£à­à¬¡"
+ },
+ "NP": {
+ "name": "ନେପାଳ"
+ },
+ "NZ": {
+ "name": "ନà­à­Ÿà­à¬œà¬¿à¬²à¬¾à¬£à­à¬¡"
+ },
+ "PG": {
+ "name": "ପପà­à¬† ନà­à­Ÿà­ ଗà­à¬à¬¨à¬¿à¬†"
+ },
+ "PT": {
+ "name": "ପରà­à¬¤à­à¬¤à­à¬—ାଲà­"
+ },
+ "EH": {
+ "name": "ପଶà­à¬šà¬¿à¬® ସାହାରା"
+ },
+ "PK": {
+ "name": "ପାକିସà­à¬¤à¬¾à¬¨"
+ },
+ "PA": {
+ "name": "ପାନାମା"
+ },
+ "PY": {
+ "name": "ପାରାଗà­à¬"
+ },
+ "PW": {
+ "name": "ପାଲାଉ"
+ },
+ "PS": {
+ "name": "ପାଲେସà­à¬¤à­‡à¬¨à¬¿à¬†"
+ },
+ "PN": {
+ "name": "ପିଟକାଇରିନà­"
+ },
+ "PR": {
+ "name": "ପà­à¬à¬°à­à¬¤à­à¬¤à­‹ ରିକୋ"
+ },
+ "TL": {
+ "name": "ପà­à¬°à­à¬¬ ତିମୋରà­"
+ },
+ "PE": {
+ "name": "ପେରà­"
+ },
+ "PL": {
+ "name": "ପୋଲାଣà­à¬¡"
+ },
+ "TF": {
+ "name": "ଫରାସୀ ଦକà­à¬·à¬¿à¬£ କà­à¬·à­‡à¬¤à­à¬°"
+ },
+ "FK": {
+ "name": "ଫଲà­à¬•à¬²à­à­Ÿà¬¾à¬£à­à¬¡ ଦà­à¬¬à­€à¬ªà¬ªà­à¬žà­à¬œ"
+ },
+ "FO": {
+ "name": "ଫାରୋଇ ଦà­à¬¬à­€à¬ªà¬ªà­à¬žà­à¬œ"
+ },
+ "FJ": {
+ "name": "ଫିଜି"
+ },
+ "FI": {
+ "name": "ଫିନଲà­à­Ÿà¬¾à¬£à­à¬¡"
+ },
+ "PH": {
+ "name": "ଫିଲିପାଇନସà­"
+ },
+ "FR": {
+ "name": "ଫà­à¬°à¬¾à¬¨à­à¬¸"
+ },
+ "GF": {
+ "name": "ଫà­à¬°à­‡à¬žà­à¬š ଗà­à¬‡à¬¨à¬¾"
+ },
+ "PF": {
+ "name": "ଫà­à¬°à­‡à¬žà­à¬š ପଲିନେସିଆ"
+ },
+ "BM": {
+ "name": "ବରମà­à¬¡à¬¾"
+ },
+ "BD": {
+ "name": "ବାଙà­à¬—ଲାଦେଶà­"
+ },
+ "BB": {
+ "name": "ବାରବାଡୋସà­"
+ },
+ "BS": {
+ "name": "ବାହାମାସà­"
+ },
+ "BH": {
+ "name": "ବାହାରିନà­"
+ },
+ "BI": {
+ "name": "ବà­à¬°à­à¬¨à­à¬¦à¬¿"
+ },
+ "BF": {
+ "name": "ବà­à¬°à­à¬•à¬¿à¬¨à­‹ ଫାସୋ"
+ },
+ "BG": {
+ "name": "ବà­à¬²à¬—େରିଆ"
+ },
+ "BJ": {
+ "name": "ବେନିନà­"
+ },
+ "BE": {
+ "name": "ବେଲଜିୟମà­"
+ },
+ "BY": {
+ "name": "ବେଲାରà­à¬·à­"
+ },
+ "BZ": {
+ "name": "ବେଲିଜà­"
+ },
+ "BW": {
+ "name": "ବୋଟସà­à¬¬à¬¾à¬¨à­"
+ },
+ "BO": {
+ "name": "ବୋଲଭିଆ"
+ },
+ "BA": {
+ "name": "ବୋସନିଆ à¬à¬¬à¬‚ ହରà­à¬œà¬—ୋଭିନା"
+ },
+ "BR": {
+ "name": "ବà­à¬°à¬¾à¬œà¬¿à¬²à­"
+ },
+ "VG": {
+ "name": "ବà­à¬°à¬¿à¬Ÿà¬¿à¬¶à­ ଭରà­à¬œà¬¿à¬¨à­ ଦà­à¬¬à­€à¬ªà¬ªà­à¬žà­à¬œ"
+ },
+ "IO": {
+ "name": "ବà­à¬°à¬¿à¬Ÿà¬¿à¬¶à­ ଭାରତୀୟ ସାମà­à¬¦à­à¬°à¬¿à¬• କà­à¬·à­‡à¬¤à­à¬°"
+ },
+ "GB": {
+ "name": "ବà­à¬°à¬¿à¬Ÿà­‡à¬¨à­"
+ },
+ "BN": {
+ "name": "ବà­à¬°à­à¬¨à­‡à¬‡"
+ },
+ "VA": {
+ "name": "ଭାଟିକାନà­"
+ },
+ "VU": {
+ "name": "ଭାନà­à¬†à¬¤à­"
+ },
+ "IN": {
+ "name": "ଭାରତ"
+ },
+ "VN": {
+ "name": "ଭିà¬à¬¤à¬¨à¬¾à¬®à­"
+ },
+ "BT": {
+ "name": "ଭà­à¬Ÿà¬¾à¬¨à­"
+ },
+ "VE": {
+ "name": "ଭେନଜà­à¬à¬²à¬¾"
+ },
+ "MN": {
+ "name": "ମଙà­à¬—ୋଲିଆ"
+ },
+ "ME": {
+ "name": "ମଣà­à¬Ÿà­‡à¬—à­à¬°à­‹"
+ },
+ "MS": {
+ "name": "ମଣà­à¬Ÿà­‡à¬¸à­‡à¬°à¬¾à¬Ÿà­"
+ },
+ "CF": {
+ "name": "ମଧà­à­Ÿ ଆଫà­à¬°à¬¿à¬•à­€à­Ÿ ଗଣତନà­à¬¤à­à¬°"
+ },
+ "FM": {
+ "name": "ମାଇକà­à¬°à­‹à¬¨à­‡à¬¸à¬¿à¬†"
+ },
+ "MR": {
+ "name": "ମାଉରିଟାନିଆ"
+ },
+ "MO": {
+ "name": "ମାକାଉ SAR ଚିନà­"
+ },
+ "MG": {
+ "name": "ମାଡାଗାସà­à¬•à¬°à­"
+ },
+ "YT": {
+ "name": "ମାୟୋଟେ"
+ },
+ "MQ": {
+ "name": "ମାରà­à¬Ÿà¬¿à¬¨à¬¿à¬•à­à­Ÿà­"
+ },
+ "MH": {
+ "name": "ମାରà­à¬¶à¬²à­ ଦà­à¬¬à­€à¬ªà¬ªà­à¬žà­à¬œ"
+ },
+ "MD": {
+ "name": "ମାଲଡୋଭା"
+ },
+ "MW": {
+ "name": "ମାଲୱି"
+ },
+ "MY": {
+ "name": "ମାଲେସିଆ"
+ },
+ "MT": {
+ "name": "ମାଲà­à¬Ÿà¬¾"
+ },
+ "MV": {
+ "name": "ମାଳଦà­à¬¬à­€à¬ª"
+ },
+ "ML": {
+ "name": "ମାଳୀ"
+ },
+ "MK": {
+ "name": "ମାସେଡୋନିଆ"
+ },
+ "MM": {
+ "name": "ମିୟାମାରà­"
+ },
+ "MX": {
+ "name": "ମେକà­à¬¸à¬¿à¬•à­‹"
+ },
+ "MZ": {
+ "name": "ମୋଜାମà­à¬¬à¬¿à¬•à­à­Ÿà­"
+ },
+ "MC": {
+ "name": "ମୋନାକୋ"
+ },
+ "MA": {
+ "name": "ମୋରୋକà­à¬•à­‹"
+ },
+ "MU": {
+ "name": "ମୌରିସସà­"
+ },
+ "VI": {
+ "name": "à­Ÿà­à¬à¬¸à­ ଭରà­à¬œà¬¿à¬¨à­ ଦà­à¬¬à­€à¬ªà¬ªà­à¬žà­à¬œ"
+ },
+ "US": {
+ "name": "ଯà­à¬•à­à¬¤ ରାଷà­à¬Ÿà­à¬° ଆମେରିକା"
+ },
+ "UA": {
+ "name": "à­Ÿà­à¬•à­à¬°à¬¾à¬‡à¬¨à­"
+ },
+ "UM": {
+ "name": "à­Ÿà­à¬¨à¬¾à¬‡à¬Ÿà­‡à¬¡à­ ଷà­à¬Ÿà­‡à¬Ÿà¬¸à­ ମାଇନରୠଆଉଟଲେଇଂ ଦà­à¬¬à­€à¬ªà¬ªà­à¬žà­à¬œ"
+ },
+ "YE": {
+ "name": "ୟେମେନà­"
+ },
+ "RW": {
+ "name": "ରାୱାଣà­à¬¡à¬¾"
+ },
+ "RE": {
+ "name": "ରିୟà­à¬¨à¬¿à¬…ନà­"
+ },
+ "RU": {
+ "name": "ରà­à¬·à¬¿à¬†"
+ },
+ "RO": {
+ "name": "ରୋମାନିଆ"
+ },
+ "LU": {
+ "name": "ଲକà­à¬¸à­‡à¬®à¬¬à¬°à­à¬—"
+ },
+ "LA": {
+ "name": "ଲାଓସà­"
+ },
+ "LV": {
+ "name": "ଲାଟଭିଆ"
+ },
+ "LI": {
+ "name": "ଲିଚେସà­à¬¤à¬¿à¬†à¬¨à¬¾à¬¨à­"
+ },
+ "LT": {
+ "name": "ଲିଥାଆନିଆ"
+ },
+ "LY": {
+ "name": "ଲିବିଆ"
+ },
+ "LR": {
+ "name": "ଲିବେରିଆ"
+ },
+ "LB": {
+ "name": "ଲେବାନନà­"
+ },
+ "LS": {
+ "name": "ଲେସୋଥୋ"
+ },
+ "WF": {
+ "name": "ୱାଲିସୠà¬à¬¬à¬‚ ଫà­à¬¤à­à¬¨à¬¾"
+ },
+ "LK": {
+ "name": "ଶà­à¬°à­€à¬²à¬™à­à¬•à¬¾"
+ },
+ "AE": {
+ "name": "ସଂଯà­à¬•à­à¬¤ ଆରବ à¬à¬®à¬¿à¬°à­‡à¬Ÿà¬¸à­"
+ },
+ "RS": {
+ "name": "ସରà­à¬¬à¬¿à¬†"
+ },
+ "CY": {
+ "name": "ସାଇପà­à¬°à¬¸à­"
+ },
+ "SA": {
+ "name": "ସାଉଦି ଆରବିଆ"
+ },
+ "ST": {
+ "name": "ସାଓ ଟୋମେ à¬à¬¬à¬‚ ପà­à¬°à¬¿à¬¨à¬¸à¬¿à¬ªà¬¿"
+ },
+ "SM": {
+ "name": "ସାନୠମାରିନୋ"
+ },
+ "WS": {
+ "name": "ସାମୋଆ"
+ },
+ "SJ": {
+ "name": "ସାଲà­à¬­à¬¾à¬°à­à¬¡ à¬à¬¬à¬‚ ଜାନୠମାୟୋନà­"
+ },
+ "SL": {
+ "name": "ସିଓରା ଲିଓନà­"
+ },
+ "SG": {
+ "name": "ସିଙà­à¬—ାପà­à¬°à­"
+ },
+ "SY": {
+ "name": "ସିରିଆ"
+ },
+ "SD": {
+ "name": "ସà­à¬¦à¬¾à¬¨à­"
+ },
+ "SR": {
+ "name": "ସà­à¬°à¬¿à¬¨à¬¾à¬®"
+ },
+ "SC": {
+ "name": "ସେଚେଲସà­"
+ },
+ "KN": {
+ "name": "ସେଣà­à¬Ÿ କିଟସୠà¬à¬£à­à¬¡ ନେଭିସà­"
+ },
+ "PM": {
+ "name": "ସେଣà­à¬Ÿ ପିà¬à¬°à­‡ à¬à¬¬à¬‚ ମିକà­à¬¬à¬¾à¬²à­‹à¬¨à­"
+ },
+ "BL": {
+ "name": "ସେଣà­à¬Ÿ ବାରà­à¬¥à­‡à¬²à­‡à¬®à¬¿"
+ },
+ "VC": {
+ "name": "ସେଣà­à¬Ÿ ଭିନସେଣà­à¬Ÿ à¬à¬¬à¬‚ ଦି ଗà­à¬°à­‡à¬¨à¬¾à¬¡à¬¿à¬¸à­"
+ },
+ "MF": {
+ "name": "ସେଣà­à¬Ÿ ମାରà­à¬Ÿà¬¿à¬¨à­"
+ },
+ "LC": {
+ "name": "ସେଣà­à¬Ÿ ଲà­à¬¸à¬¿à¬†"
+ },
+ "SH": {
+ "name": "ସେଣà­à¬Ÿ ହେଲେନା"
+ },
+ "SN": {
+ "name": "ସେନେଗାଲà­"
+ },
+ "SO": {
+ "name": "ସୋମାଲିଆ"
+ },
+ "SB": {
+ "name": "ସୋଲୋମନୠଦà­à¬¬à­€à¬ªà¬ªà­à¬žà­à¬œ"
+ },
+ "ES": {
+ "name": "ସà­à¬ªà­‡à¬¨à­"
+ },
+ "SZ": {
+ "name": "ସà­à¬¬à¬¾à¬œà¬¿à¬²à¬¾à¬£à­à¬¡"
+ },
+ "CH": {
+ "name": "ସà­à¬¬à¬¿à¬œà¬°à¬²à­à­Ÿà¬¾à¬£à­à¬¡"
+ },
+ "SK": {
+ "name": "ସà­à¬²à­‹à¬­à¬¾à¬•à¬¿à¬†"
+ },
+ "SI": {
+ "name": "ସà­à¬²à­‹à¬­à­‡à¬¨à¬¿à¬†"
+ },
+ "SE": {
+ "name": "ସà­à­±à­‡à¬¡à­‡à¬¨à­"
+ },
+ "HK": {
+ "name": "ହଂକଂ ବିଶେଷ ପà­à¬°à¬¶à¬¾à¬¸à¬¨à¬¿à¬• କà­à¬·à­‡à¬¤à­à¬° ଚୀନà­"
+ },
+ "HU": {
+ "name": "ହଙà­à¬—େରୀ"
+ },
+ "HT": {
+ "name": "ହାଇତି"
+ },
+ "HN": {
+ "name": "ହୋଣà­à¬¡à¬¾à¬°à­à¬¸à­"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/pa.json b/library/intl/resources/country/pa.json
new file mode 100644
index 000000000..cd7671ca5
--- /dev/null
+++ b/library/intl/resources/country/pa.json
@@ -0,0 +1,761 @@
+{
+ "UZ": {
+ "name": "ਉਜ਼ਬੇਕਿਸਤਾਨ"
+ },
+ "KP": {
+ "name": "ਉੱਤਰੀ ਕੋਰੀਆ"
+ },
+ "MP": {
+ "name": "ਉੱਤਰੀ ਮਾਰੀਆਨਾ ਟਾਪੂ"
+ },
+ "UY": {
+ "name": "ਉਰੂਗਵੇ"
+ },
+ "OM": {
+ "name": "ਓਮਾਨ"
+ },
+ "AC": {
+ "name": "ਅਸੈਂਸ਼ਨ ਟਾਪੂ"
+ },
+ "AI": {
+ "name": "ਅੰਗà©à¨‡à¨²à¨¾"
+ },
+ "AO": {
+ "name": "ਅੰਗੋਲਾ"
+ },
+ "AZ": {
+ "name": "ਅਜ਼ਰਬਾਈਜਾਨ"
+ },
+ "AQ": {
+ "name": "ਅੰਟਾਰਕਟਿਕਾ"
+ },
+ "AD": {
+ "name": "ਅੰਡੋਰਾ"
+ },
+ "AF": {
+ "name": "ਅਫ਼ਗਾਨਿਸਤਾਨ"
+ },
+ "AS": {
+ "name": "ਅਮੈਰੀਕਨ ਸਮੋਆ"
+ },
+ "AR": {
+ "name": "ਅਰਜਨਟੀਨਾ"
+ },
+ "AM": {
+ "name": "ਅਰਮੀਨੀਆ"
+ },
+ "AW": {
+ "name": "ਅਰੂਬਾ"
+ },
+ "SV": {
+ "name": "ਅਲ ਸਲਵਾਡੋਰ"
+ },
+ "DZ": {
+ "name": "ਅਲਜੀਰੀਆ"
+ },
+ "AL": {
+ "name": "ਅਲਬਾਨੀਆ"
+ },
+ "AX": {
+ "name": "ਅਲੈਂਡ ਟਾਪੂ"
+ },
+ "IE": {
+ "name": "ਆਇਰਲੈਂਡ"
+ },
+ "IM": {
+ "name": "ਆਇਲ ਆਫ ਮੈਨ"
+ },
+ "IS": {
+ "name": "ਆਈਸਲੈਂਡ"
+ },
+ "AT": {
+ "name": "ਆਸਟਰੀਆ"
+ },
+ "AU": {
+ "name": "ਆਸਟà©à¨°à©‡à¨²à©€à¨†"
+ },
+ "AG": {
+ "name": "à¨à¨‚ਟੀਗà©à¨† ਅਤੇ ਬਾਰਬà©à¨¡à¨¾"
+ },
+ "EE": {
+ "name": "ਇਸਟੋਨੀਆ"
+ },
+ "EC": {
+ "name": "ਇਕਵੇਡੋਰ"
+ },
+ "IL": {
+ "name": "ਇਜ਼ਰਾਈਲ"
+ },
+ "IT": {
+ "name": "ਇਟਲੀ"
+ },
+ "ID": {
+ "name": "ਇੰਡੋਨੇਸ਼ੀਆ"
+ },
+ "ET": {
+ "name": "ਇਥੋਪੀਆ"
+ },
+ "IQ": {
+ "name": "ਇਰਾਕ"
+ },
+ "ER": {
+ "name": "ਇਰੀਟà©à¨°à¨¿à¨†"
+ },
+ "IR": {
+ "name": "ਈਰਾਨ"
+ },
+ "ES": {
+ "name": "ਸਪੇਨ"
+ },
+ "AE": {
+ "name": "ਸੰਯà©à¨•à¨¤ ਅਰਬ ਅਮੀਰਾਤ"
+ },
+ "US": {
+ "name": "ਸੰਯà©à¨•à¨¤ ਰਾਜ"
+ },
+ "RS": {
+ "name": "ਸਰਬੀਆ"
+ },
+ "SK": {
+ "name": "ਸਲੋਵਾਕੀਆ"
+ },
+ "SI": {
+ "name": "ਸਲੋਵੇਨੀਆ"
+ },
+ "SZ": {
+ "name": "ਸਵਾਜ਼ੀਲੈਂਡ"
+ },
+ "SJ": {
+ "name": "ਸਵਾਲਬਰਡ ਅਤੇ ਜਾਨ ਮਾਯੇਨ"
+ },
+ "CH": {
+ "name": "ਸਵਿਟਜ਼ਰਲੈਂਡ"
+ },
+ "SE": {
+ "name": "ਸਵੀਡਨ"
+ },
+ "LK": {
+ "name": "ਸà©à¨°à©€ ਲੰਕਾ"
+ },
+ "SA": {
+ "name": "ਸਾਊਦੀ ਅਰਬ"
+ },
+ "ST": {
+ "name": "ਸਾਓ ਟੋਮ ਅਤੇ ਪà©à¨°à¨¿à©°à¨¸à©€à¨ªà©‡"
+ },
+ "CY": {
+ "name": "ਸਾਇਪà©à¨°à¨¸"
+ },
+ "WS": {
+ "name": "ਸਾਮੋਆ"
+ },
+ "EA": {
+ "name": "ਸਿਓਟਾ ਅਤੇ ਮੇਲਿੱਲਾ"
+ },
+ "SL": {
+ "name": "ਸਿà¨à¨°à¨¾ ਲਿਓਨ"
+ },
+ "SG": {
+ "name": "ਸਿੰਗਾਪà©à¨°"
+ },
+ "SX": {
+ "name": "ਸਿੰਟ ਮਾਰਟੀਨ"
+ },
+ "SY": {
+ "name": "ਸੀਰੀਆ"
+ },
+ "SD": {
+ "name": "ਸੂਡਾਨ"
+ },
+ "SR": {
+ "name": "ਸੂਰੀਨਾਮ"
+ },
+ "SC": {
+ "name": "ਸੇਸ਼ਲਸ"
+ },
+ "SH": {
+ "name": "ਸੇਂਟ ਹੇਲੇਨਾ"
+ },
+ "BL": {
+ "name": "ਸੇਂਟ ਬਾਰਥੇਲੇਮੀ"
+ },
+ "MF": {
+ "name": "ਸੇਂਟ ਮਾਰਟਿਨ"
+ },
+ "LC": {
+ "name": "ਸੇਂਟ ਲੂਸੀਆ"
+ },
+ "VC": {
+ "name": "ਸੇਂਟ ਵਿਨਸੈਂਟ à¨à¨‚ਡ ਗà©à¨°à©‡à¨¨à¨¾à¨¡à©€à¨¨à¨¸"
+ },
+ "SN": {
+ "name": "ਸੇਨੇਗਲ"
+ },
+ "KN": {
+ "name": "ਸੈਂਟ ਕਿਟਸ à¨à¨‚ਡ ਨੇਵਿਸ"
+ },
+ "PM": {
+ "name": "ਸੈਂਟ ਪੀਅਰੇ à¨à¨‚ਡ ਮਿਕੇਲਨ"
+ },
+ "SM": {
+ "name": "ਸੈਨ ਮਰੀਨੋ"
+ },
+ "SO": {
+ "name": "ਸੋਮਾਲੀਆ"
+ },
+ "SB": {
+ "name": "ਸੋਲੋਮਨ ਟਾਪੂ"
+ },
+ "HU": {
+ "name": "ਹੰਗਰੀ"
+ },
+ "HK": {
+ "name": "ਹਾਂਗ ਕਾਂਗ à¨à¨¸à¨à¨†à¨° ਚੀਨ"
+ },
+ "HT": {
+ "name": "ਹੈਤੀ"
+ },
+ "HN": {
+ "name": "ਹੋਂਡà©à¨°à¨¸"
+ },
+ "KZ": {
+ "name": "ਕਜ਼ਾਖਸਤਾਨ"
+ },
+ "QA": {
+ "name": "ਕਤਰ"
+ },
+ "KH": {
+ "name": "ਕੰਬੋਡੀਆ"
+ },
+ "HR": {
+ "name": "ਕਰੋà¨à¨¸à¨¼à©€à¨†"
+ },
+ "CX": {
+ "name": "ਕà©à¨°à¨¿à¨¸à¨®à¨¿à¨¸ ਟਾਪੂ"
+ },
+ "CD": {
+ "name": "ਕਾਂਗੋ - ਕਿੰਸ਼ਾਸਾ"
+ },
+ "CG": {
+ "name": "ਕਾਂਗੋ - ਬà©à¨°à¨¾à¨œà¨¼à¨¾à¨µà¨¿à¨²à©‡"
+ },
+ "CU": {
+ "name": "ਕਿਊਬਾ"
+ },
+ "KG": {
+ "name": "ਕਿਰਗਿਜ਼ਸਤਾਨ"
+ },
+ "KI": {
+ "name": "ਕਿਰਬਾਤੀ"
+ },
+ "KE": {
+ "name": "ਕੀਨੀਆ"
+ },
+ "CK": {
+ "name": "ਕà©à©±à¨• ਟਾਪੂ"
+ },
+ "CW": {
+ "name": "ਕà©à¨°à¨¾à¨•à¨¾à¨“"
+ },
+ "KW": {
+ "name": "ਕà©à¨µà©ˆà¨¤"
+ },
+ "CF": {
+ "name": "ਕੇਂਦਰੀ ਅਫ਼ਰੀਕੀ ਗਣਰਾਜ"
+ },
+ "IC": {
+ "name": "ਕੇਨਾਰੀ ਟਾਪੂ"
+ },
+ "CV": {
+ "name": "ਕੇਪ ਵਰਡੇ"
+ },
+ "KY": {
+ "name": "ਕੇਮੈਨ ਟਾਪੂ"
+ },
+ "CA": {
+ "name": "ਕੈਨੇਡਾ"
+ },
+ "CM": {
+ "name": "ਕੈਮਰੂਨ"
+ },
+ "BQ": {
+ "name": "ਕੈਰੇਬੀਆਈ ਨੀਦਰਲੈਂਡ"
+ },
+ "CR": {
+ "name": "ਕੋਸਟਾ ਰੀਕਾ"
+ },
+ "XK": {
+ "name": "ਕੋਸੋਵੋ"
+ },
+ "CC": {
+ "name": "ਕੋਕੋਸ (ਕੀਲਿੰਗ) ਟਾਪੂ"
+ },
+ "CI": {
+ "name": "ਕੋਟ ਡੀਵੋਆਰ"
+ },
+ "KM": {
+ "name": "ਕੋਮੋਰੋਸ"
+ },
+ "CO": {
+ "name": "ਕੋਲੰਬੀਆ"
+ },
+ "GA": {
+ "name": "ਗਬੋਨ"
+ },
+ "GG": {
+ "name": "ਗਰਨਜੀ"
+ },
+ "GR": {
+ "name": "ਗà©à¨°à©€à¨¸"
+ },
+ "GL": {
+ "name": "ਗà©à¨°à©€à¨¨à¨²à©ˆà¨‚ਡ"
+ },
+ "GD": {
+ "name": "ਗà©à¨°à©‡à¨¨à¨¾à¨¡à¨¾"
+ },
+ "GN": {
+ "name": "ਗਿਨੀ"
+ },
+ "GW": {
+ "name": "ਗਿਨੀ-ਬਿਸਾਉ"
+ },
+ "GT": {
+ "name": "ਗà©à¨†à¨Ÿà©‡à¨®à¨¾à¨²à¨¾"
+ },
+ "GP": {
+ "name": "ਗà©à¨†à¨¡à©‡à¨²à©‹à¨ª"
+ },
+ "GU": {
+ "name": "ਗà©à¨†à¨®"
+ },
+ "GY": {
+ "name": "ਗà©à¨¯à¨¾à¨¨à¨¾"
+ },
+ "GM": {
+ "name": "ਗੈਂਬੀਆ"
+ },
+ "GH": {
+ "name": "ਘਾਨਾ"
+ },
+ "TD": {
+ "name": "ਚਾਡ"
+ },
+ "CL": {
+ "name": "ਚਿਲੀ"
+ },
+ "CN": {
+ "name": "ਚੀਨ"
+ },
+ "CZ": {
+ "name": "ਚੈਕ ਗਣਰਾਜ"
+ },
+ "JP": {
+ "name": "ਜਪਾਨ"
+ },
+ "JM": {
+ "name": "ਜਮਾਇਕਾ"
+ },
+ "JE": {
+ "name": "ਜਰਸੀ"
+ },
+ "DE": {
+ "name": "ਜਰਮਨੀ"
+ },
+ "ZM": {
+ "name": "ਜ਼ਾਮਬੀਆ"
+ },
+ "GE": {
+ "name": "ਜਾਰਜੀਆ"
+ },
+ "JO": {
+ "name": "ਜਾਰਡਨ"
+ },
+ "GI": {
+ "name": "ਜਿਬਰਾਲਟਰ"
+ },
+ "ZW": {
+ "name": "ਜ਼ਿੰਬਾਬਵੇ"
+ },
+ "DJ": {
+ "name": "ਜ਼ੀਬੂਤੀ"
+ },
+ "TA": {
+ "name": "ਟà©à¨°à¨¿à¨¸à¨Ÿà¨¾à¨¨ ਦਾ ਕà©à©°à¨¹à¨¾"
+ },
+ "TT": {
+ "name": "ਟà©à¨°à¨¿à¨¨à©€à¨¡à¨¾à¨¡ ਅਤੇ ਟੋਬਾਗੋ"
+ },
+ "TN": {
+ "name": "ਟਿਊਨੀਸ਼ੀਆ"
+ },
+ "TC": {
+ "name": "ਟà©à¨°à¨•à¨¸ ਅਤੇ ਕੈਕੋਸ ਟਾਪੂ"
+ },
+ "TV": {
+ "name": "ਟà©à¨µà¨¾à¨²à©‚"
+ },
+ "TK": {
+ "name": "ਟੋਕੇਲਾਉ"
+ },
+ "TG": {
+ "name": "ਟੋਗੋ"
+ },
+ "TO": {
+ "name": "ਟੌਂਗਾ"
+ },
+ "DG": {
+ "name": "ਡੀਇਗੋ ਗਾਰਸੀਆ"
+ },
+ "DK": {
+ "name": "ਡੈਨਮਾਰਕ"
+ },
+ "DM": {
+ "name": "ਡੋਮੀਨਿਕਾ"
+ },
+ "DO": {
+ "name": "ਡੋਮੀਨਿਕਾਈ ਗਣਰਾਜ"
+ },
+ "TZ": {
+ "name": "ਤਨਜ਼ਾਨੀਆ"
+ },
+ "TW": {
+ "name": "ਤਾਇਵਾਨ"
+ },
+ "TJ": {
+ "name": "ਤਾਜਿਕਿਸਤਾਨ"
+ },
+ "TL": {
+ "name": "ਤਿਮੋਰ-ਲੇਸਤੇ"
+ },
+ "TM": {
+ "name": "ਤà©à¨°à¨•à¨®à©‡à¨¨à¨¿à¨¸à¨¤à¨¾à¨¨"
+ },
+ "TR": {
+ "name": "ਤà©à¨°à¨•à©€"
+ },
+ "TH": {
+ "name": "ਥਾਈਲੈਂਡ"
+ },
+ "ZA": {
+ "name": "ਦੱਖਣੀ ਅਫਰੀਕਾ"
+ },
+ "SS": {
+ "name": "ਦੱਖਣੀ ਸੂਡਾਨ"
+ },
+ "KR": {
+ "name": "ਦੱਖਣੀ ਕੋਰੀਆ"
+ },
+ "GS": {
+ "name": "ਦੱਖਣੀ ਜਾਰਜੀਆ ਅਤੇ ਦੱਖਣੀ ਸੈਂਡਵਿਚ ਟਾਪੂ"
+ },
+ "NR": {
+ "name": "ਨਾਉਰੂ"
+ },
+ "NE": {
+ "name": "ਨਾਈਜਰ"
+ },
+ "NG": {
+ "name": "ਨਾਈਜੀਰੀਆ"
+ },
+ "NA": {
+ "name": "ਨਾਮੀਬੀਆ"
+ },
+ "NO": {
+ "name": "ਨਾਰਵੇ"
+ },
+ "NC": {
+ "name": "ਨਿਊ ਕੈਲੇਡੋਨੀਆ"
+ },
+ "NZ": {
+ "name": "ਨਿਊਜ਼ੀਲੈਂਡ"
+ },
+ "NI": {
+ "name": "ਨਿਕਾਰਾਗà©à¨†"
+ },
+ "NU": {
+ "name": "ਨਿਯੂ"
+ },
+ "NL": {
+ "name": "ਨੀਦਰਲੈਂਡ"
+ },
+ "NP": {
+ "name": "ਨੇਪਾਲ"
+ },
+ "NF": {
+ "name": "ਨੋਰਫੌਕ ਟਾਪੂ"
+ },
+ "EH": {
+ "name": "ਪੱਛਮੀ ਸਹਾਰਾ"
+ },
+ "PA": {
+ "name": "ਪਨਾਮਾ"
+ },
+ "PW": {
+ "name": "ਪਲਾਉ"
+ },
+ "PK": {
+ "name": "ਪਾਕਿਸਤਾਨ"
+ },
+ "PG": {
+ "name": "ਪਾਪੂਆ ਨਿਊ ਗਿਨੀ"
+ },
+ "PR": {
+ "name": "ਪਿਊਰਟੋ ਰਿਕੋ"
+ },
+ "PN": {
+ "name": "ਪਿਟਕੇਰਨ ਟਾਪੂ"
+ },
+ "PT": {
+ "name": "ਪà©à¨°à¨¤à¨—ਾਲ"
+ },
+ "PE": {
+ "name": "ਪੇਰੂ"
+ },
+ "PY": {
+ "name": "ਪੈਰਾਗਵੇ"
+ },
+ "PL": {
+ "name": "ਪੋਲੈਂਡ"
+ },
+ "FR": {
+ "name": "ਫ਼ਰਾਂਸ"
+ },
+ "GF": {
+ "name": "ਫ਼ਰੈਂਚ ਗà©à¨†à¨¨à¨¾"
+ },
+ "TF": {
+ "name": "ਫਰੈਂਚ ਦੱਖਣੀ ਪà©à¨°à¨¦à©‡à¨¸à¨¼"
+ },
+ "PF": {
+ "name": "ਫਰੈਂਚ ਪੋਲੀਨੇਸ਼ੀਆ"
+ },
+ "FK": {
+ "name": "ਫ਼ਾਕਲੈਂਡ ਟਾਪੂ"
+ },
+ "FJ": {
+ "name": "ਫ਼ਿਜੀ"
+ },
+ "FI": {
+ "name": "ਫਿਨਲੈਂਡ"
+ },
+ "PS": {
+ "name": "ਫਿਲੀਸਤੀਨੀ ਖੇਤਰ"
+ },
+ "PH": {
+ "name": "ਫਿਲੀਪੀਂਸ"
+ },
+ "FO": {
+ "name": "ਫੈਰੋ ਟਾਪੂ"
+ },
+ "BS": {
+ "name": "ਬਹਾਮਾਸ"
+ },
+ "BH": {
+ "name": "ਬਹਿਰੀਨ"
+ },
+ "BD": {
+ "name": "ਬੰਗਲਾਦੇਸ਼"
+ },
+ "IO": {
+ "name": "ਬਰਤਾਨਵੀ ਹਿੰਦ ਮਹਾਂਸਾਗਰ ਪà©à¨°à¨¦à©‡à¨¸à¨¼"
+ },
+ "BM": {
+ "name": "ਬਰਮੂਡਾ"
+ },
+ "BN": {
+ "name": "ਬਰੂਨੇਈ"
+ },
+ "BR": {
+ "name": "ਬà©à¨°à¨¾à¨œà¨¼à©€à¨²"
+ },
+ "VG": {
+ "name": "ਬà©à¨°à¨¿à¨Ÿà¨¿à¨¸à¨¼ ਵਰਜਿਨ ਟਾਪੂ"
+ },
+ "BB": {
+ "name": "ਬਾਰਬਾਡੋਸ"
+ },
+ "BF": {
+ "name": "ਬà©à¨°à¨•à©€à¨¨à¨¾ ਫ਼ਾਸੋ"
+ },
+ "BI": {
+ "name": "ਬà©à¨°à©à©°à¨¡à©€"
+ },
+ "BG": {
+ "name": "ਬà©à¨²à¨—ਾਰੀਆ"
+ },
+ "BJ": {
+ "name": "ਬੇਨਿਨ"
+ },
+ "BY": {
+ "name": "ਬੇਲਾਰੂਸ"
+ },
+ "BZ": {
+ "name": "ਬੇਲੀਜ਼"
+ },
+ "BE": {
+ "name": "ਬੈਲਜੀਅਮ"
+ },
+ "BA": {
+ "name": "ਬੋਸਨੀਆ ਅਤੇ ਹਰਜ਼ੇਗੋਵੀਨਾ"
+ },
+ "BW": {
+ "name": "ਬੋਟਸਵਾਨਾ"
+ },
+ "BO": {
+ "name": "ਬੋਲੀਵੀਆ"
+ },
+ "IN": {
+ "name": "ਭਾਰਤ"
+ },
+ "GQ": {
+ "name": "ਭੂ-ਖੰਡੀ ਗਿਨੀ"
+ },
+ "BT": {
+ "name": "ਭੂਟਾਨ"
+ },
+ "MO": {
+ "name": "ਮਕਾਉ à¨à¨¸à¨à¨†à¨° ਚੀਨ"
+ },
+ "MN": {
+ "name": "ਮੰਗੋਲੀਆ"
+ },
+ "MW": {
+ "name": "ਮਲਾਵੀ"
+ },
+ "MY": {
+ "name": "ਮਲੇਸ਼ੀਆ"
+ },
+ "FM": {
+ "name": "ਮਾਇਕà©à¨°à©‹à¨¨à©‡à¨¸à¨¼à©€à¨†"
+ },
+ "YT": {
+ "name": "ਮਾਯੋਟੀ"
+ },
+ "MH": {
+ "name": "ਮਾਰਸ਼ਲ ਟਾਪੂ"
+ },
+ "MQ": {
+ "name": "ਮਾਰਟੀਨਿਕ"
+ },
+ "MT": {
+ "name": "ਮਾਲਟਾ"
+ },
+ "MV": {
+ "name": "ਮਾਲਦੀਵ"
+ },
+ "ML": {
+ "name": "ਮਾਲੀ"
+ },
+ "MM": {
+ "name": "ਮਿਆਂਮਾਰ (ਬਰਮਾ)"
+ },
+ "EG": {
+ "name": "ਮਿਸਰ"
+ },
+ "MX": {
+ "name": "ਮੈਕਸੀਕੋ"
+ },
+ "MK": {
+ "name": "ਮੈਕਡੋਨੀਆ"
+ },
+ "MG": {
+ "name": "ਮੈਡਾਗਾਸਕਰ"
+ },
+ "MZ": {
+ "name": "ਮੋਜ਼ਾਮਬੀਕ"
+ },
+ "MS": {
+ "name": "ਮੋਂਟਸੇਰਾਤ"
+ },
+ "ME": {
+ "name": "ਮੋਂਟੇਨੇਗਰੋ"
+ },
+ "MC": {
+ "name": "ਮੋਨਾਕੋ"
+ },
+ "MA": {
+ "name": "ਮੋਰੱਕੋ"
+ },
+ "MR": {
+ "name": "ਮੋਰਿਟਾਨੀਆ"
+ },
+ "MD": {
+ "name": "ਮੋਲਡੋਵਾ"
+ },
+ "MU": {
+ "name": "ਮੌਰਿਸ਼ਸ"
+ },
+ "YE": {
+ "name": "ਯਮਨ"
+ },
+ "VI": {
+ "name": "ਯੂ à¨à¨¸ ਵਰਜਿਨ ਟਾਪੂ"
+ },
+ "UM": {
+ "name": "ਯੂ.à¨à¨¸. ਦੂਰ-ਦà©à¨°à¨¾à¨¡à©‡ ਟਾਪੂ"
+ },
+ "UA": {
+ "name": "ਯੂਕਰੇਨ"
+ },
+ "UG": {
+ "name": "ਯੂਗਾਂਡਾ"
+ },
+ "GB": {
+ "name": "ਯੂਨਾਈਟਡ ਕਿੰਗਡਮ"
+ },
+ "RW": {
+ "name": "ਰਵਾਂਡਾ"
+ },
+ "RE": {
+ "name": "ਰਿਯੂਨੀਅਨ"
+ },
+ "RU": {
+ "name": "ਰੂਸ"
+ },
+ "RO": {
+ "name": "ਰੋਮਾਨੀਆ"
+ },
+ "LU": {
+ "name": "ਲਕਜ਼ਮਬਰਗ"
+ },
+ "LA": {
+ "name": "ਲਾਓਸ"
+ },
+ "LR": {
+ "name": "ਲਾਈਬੀਰੀਆ"
+ },
+ "LV": {
+ "name": "ਲਾਟਵੀਆ"
+ },
+ "LI": {
+ "name": "ਲਿਚੇਂਸਟਾਇਨ"
+ },
+ "LT": {
+ "name": "ਲਿਥà©à¨†à¨¨à©€à¨†"
+ },
+ "LY": {
+ "name": "ਲੀਬੀਆ"
+ },
+ "LS": {
+ "name": "ਲੇਸੋਥੋ"
+ },
+ "LB": {
+ "name": "ਲੈਬਨਾਨ"
+ },
+ "VU": {
+ "name": "ਵਾਨੂਆਟੂ"
+ },
+ "WF": {
+ "name": "ਵਾਲਿਸ ਅਤੇ ਫੂਟੂਨਾ"
+ },
+ "VN": {
+ "name": "ਵੀਅਤਨਾਮ"
+ },
+ "VE": {
+ "name": "ਵੇਨੇਜ਼ੂà¨à¨²à¨¾"
+ },
+ "VA": {
+ "name": "ਵੈਟੀਕਨ ਸਿਟੀ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/pl.json b/library/intl/resources/country/pl.json
new file mode 100644
index 000000000..52e02228e
--- /dev/null
+++ b/library/intl/resources/country/pl.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistan"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algieria"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktyka"
+ },
+ "AG": {
+ "name": "Antigua i Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudyjska"
+ },
+ "AR": {
+ "name": "Argentyna"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbejdżan"
+ },
+ "BS": {
+ "name": "Bahamy"
+ },
+ "BH": {
+ "name": "Bahrajn"
+ },
+ "BD": {
+ "name": "Bangladesz"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgia"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermudy"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BY": {
+ "name": "Białoruś"
+ },
+ "BO": {
+ "name": "Boliwia"
+ },
+ "BA": {
+ "name": "Bośnia i Hercegowina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazylia"
+ },
+ "BN": {
+ "name": "Brunei Darussalam"
+ },
+ "IO": {
+ "name": "Brytyjskie Terytorium Oceanu Indyjskiego"
+ },
+ "VG": {
+ "name": "Brytyjskie Wyspy Dziewicze"
+ },
+ "BG": {
+ "name": "Bułgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "EA": {
+ "name": "Ceuta i Melilla"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "Chiny"
+ },
+ "HR": {
+ "name": "Chorwacja"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cypr"
+ },
+ "TD": {
+ "name": "Czad"
+ },
+ "ME": {
+ "name": "Czarnogóra"
+ },
+ "CZ": {
+ "name": "Czechy"
+ },
+ "UM": {
+ "name": "Dalekie Wyspy Mniejsze Stanów Zjednoczonych"
+ },
+ "DK": {
+ "name": "Dania"
+ },
+ "CD": {
+ "name": "Demokratyczna Republika Konga"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "DO": {
+ "name": "Dominikana"
+ },
+ "DJ": {
+ "name": "Dżibuti"
+ },
+ "EG": {
+ "name": "Egipt"
+ },
+ "EC": {
+ "name": "Ekwador"
+ },
+ "ER": {
+ "name": "Erytrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopia"
+ },
+ "FK": {
+ "name": "Falklandy"
+ },
+ "FJ": {
+ "name": "Fidżi"
+ },
+ "PH": {
+ "name": "Filipiny"
+ },
+ "FI": {
+ "name": "Finlandia"
+ },
+ "FR": {
+ "name": "Francja"
+ },
+ "TF": {
+ "name": "Francuskie Terytoria Południowe"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GS": {
+ "name": "Georgia Południowa i Sandwich Południowy"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Grecja"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grenlandia"
+ },
+ "GE": {
+ "name": "Gruzja"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GY": {
+ "name": "Gujana"
+ },
+ "GF": {
+ "name": "Gujana Francuska"
+ },
+ "GP": {
+ "name": "Gwadelupa"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GN": {
+ "name": "Gwinea"
+ },
+ "GW": {
+ "name": "Gwinea Bissau"
+ },
+ "GQ": {
+ "name": "Gwinea Równikowa"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ES": {
+ "name": "Hiszpania"
+ },
+ "NL": {
+ "name": "Holandia"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "IN": {
+ "name": "Indie"
+ },
+ "ID": {
+ "name": "Indonezja"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irlandia"
+ },
+ "IS": {
+ "name": "Islandia"
+ },
+ "IL": {
+ "name": "Izrael"
+ },
+ "JM": {
+ "name": "Jamajka"
+ },
+ "JP": {
+ "name": "Japonia"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KY": {
+ "name": "Kajmany"
+ },
+ "KH": {
+ "name": "Kambodża"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KZ": {
+ "name": "Kazachstan"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirgistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CO": {
+ "name": "Kolumbia"
+ },
+ "KM": {
+ "name": "Komory"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "KR": {
+ "name": "Korea Południowa"
+ },
+ "KP": {
+ "name": "Korea Północna"
+ },
+ "XK": {
+ "name": "Kosowo"
+ },
+ "CR": {
+ "name": "Kostaryka"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuwejt"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LB": {
+ "name": "Liban"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Litwa"
+ },
+ "LU": {
+ "name": "Luksemburg"
+ },
+ "LV": {
+ "name": "Åotwa"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "YT": {
+ "name": "Majotta"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Malediwy"
+ },
+ "MY": {
+ "name": "Malezja"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MP": {
+ "name": "Mariany Północne"
+ },
+ "MA": {
+ "name": "Maroko"
+ },
+ "MQ": {
+ "name": "Martynika"
+ },
+ "MR": {
+ "name": "Mauretania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "MX": {
+ "name": "Meksyk"
+ },
+ "FM": {
+ "name": "Mikronezja"
+ },
+ "MM": {
+ "name": "Mjanma (Birma)"
+ },
+ "MD": {
+ "name": "Mołdawia"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambik"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "BQ": {
+ "name": "Niderlandy Karaibskie"
+ },
+ "DE": {
+ "name": "Niemcy"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NI": {
+ "name": "Nikaragua"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk"
+ },
+ "NO": {
+ "name": "Norwegia"
+ },
+ "NC": {
+ "name": "Nowa Kaledonia"
+ },
+ "NZ": {
+ "name": "Nowa Zelandia"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua-Nowa Gwinea"
+ },
+ "PY": {
+ "name": "Paragwaj"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PF": {
+ "name": "Polinezja Francuska"
+ },
+ "PL": {
+ "name": "Polska"
+ },
+ "PR": {
+ "name": "Portoryko"
+ },
+ "PT": {
+ "name": "Portugalia"
+ },
+ "ZA": {
+ "name": "Republika Południowej Afryki"
+ },
+ "CF": {
+ "name": "Republika Środkowoafrykańska"
+ },
+ "CV": {
+ "name": "Republika Zielonego PrzylÄ…dka"
+ },
+ "RE": {
+ "name": "Reunion"
+ },
+ "RU": {
+ "name": "Rosja"
+ },
+ "RO": {
+ "name": "Rumunia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "EH": {
+ "name": "Sahara Zachodnia"
+ },
+ "KN": {
+ "name": "Saint Kitts i Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "VC": {
+ "name": "Saint Vincent i Grenadyny"
+ },
+ "BL": {
+ "name": "Saint-Barthélemy"
+ },
+ "MF": {
+ "name": "Saint-Martin"
+ },
+ "PM": {
+ "name": "Saint-Pierre i Miquelon"
+ },
+ "SV": {
+ "name": "Salwador"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Amerykańskie"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seszele"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "SÅ‚owacja"
+ },
+ "SI": {
+ "name": "SÅ‚owenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "HK": {
+ "name": "SRA Hongkong (Chiny)"
+ },
+ "MO": {
+ "name": "SRA Makau (Chiny)"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "US": {
+ "name": "Stany Zjednoczone"
+ },
+ "SZ": {
+ "name": "Suazi"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SS": {
+ "name": "Sudan Południowy"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard i Jan Mayen"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "CH": {
+ "name": "Szwajcaria"
+ },
+ "SE": {
+ "name": "Szwecja"
+ },
+ "TJ": {
+ "name": "Tadżykistan"
+ },
+ "TH": {
+ "name": "Tajlandia"
+ },
+ "TW": {
+ "name": "Tajwan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "PS": {
+ "name": "Terytoria Palestyńskie"
+ },
+ "TL": {
+ "name": "Timor Wschodni"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TT": {
+ "name": "Trynidad i Tobago"
+ },
+ "TN": {
+ "name": "Tunezja"
+ },
+ "TR": {
+ "name": "Turcja"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks i Caicos"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraina"
+ },
+ "UY": {
+ "name": "Urugwaj"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "WF": {
+ "name": "Wallis i Futuna"
+ },
+ "VA": {
+ "name": "Watykan"
+ },
+ "VE": {
+ "name": "Wenezuela"
+ },
+ "HU": {
+ "name": "Węgry"
+ },
+ "GB": {
+ "name": "Wielka Brytania"
+ },
+ "VN": {
+ "name": "Wietnam"
+ },
+ "IT": {
+ "name": "WÅ‚ochy"
+ },
+ "CX": {
+ "name": "Wyspa Bożego Narodzenia"
+ },
+ "GG": {
+ "name": "Wyspa Guernsey"
+ },
+ "JE": {
+ "name": "Wyspa Jersey"
+ },
+ "IM": {
+ "name": "Wyspa Man"
+ },
+ "SH": {
+ "name": "Wyspa Świętej Heleny"
+ },
+ "AC": {
+ "name": "Wyspa WniebowstÄ…pienia"
+ },
+ "AX": {
+ "name": "Wyspy Alandzkie"
+ },
+ "CK": {
+ "name": "Wyspy Cooka"
+ },
+ "VI": {
+ "name": "Wyspy Dziewicze Stanów Zjednoczonych"
+ },
+ "IC": {
+ "name": "Wyspy Kanaryjskie"
+ },
+ "CC": {
+ "name": "Wyspy Kokosowe"
+ },
+ "MH": {
+ "name": "Wyspy Marshalla"
+ },
+ "FO": {
+ "name": "Wyspy Owcze"
+ },
+ "SB": {
+ "name": "Wyspy Salomona"
+ },
+ "ST": {
+ "name": "Wyspy Świętego Tomasza i Książęca"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ },
+ "AE": {
+ "name": "Zjednoczone Emiraty Arabskie"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ps.json b/library/intl/resources/country/ps.json
new file mode 100644
index 000000000..454e4ce05
--- /dev/null
+++ b/library/intl/resources/country/ps.json
@@ -0,0 +1,761 @@
+{
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AS": {
+ "name": "American Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AG": {
+ "name": "Antigua & Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgium"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia & Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "Cook Islands"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "FK": {
+ "name": "Falkland Islands"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "KP": {
+ "name": "North Korea"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn Islands"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé & Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "KR": {
+ "name": "South Korea"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "SH": {
+ "name": "St. Helena"
+ },
+ "KN": {
+ "name": "St. Kitts & Nevis"
+ },
+ "LC": {
+ "name": "St. Lucia"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "PM": {
+ "name": "St. Pierre & Miquelon"
+ },
+ "VC": {
+ "name": "St. Vincent & Grenadines"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad & Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks & Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "US": {
+ "name": "United States"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis & Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ },
+ "IS": {
+ "name": "آیسلینډ"
+ },
+ "AT": {
+ "name": "اتریش"
+ },
+ "AF": {
+ "name": "اÙغانستان"
+ },
+ "AL": {
+ "name": "البانیه"
+ },
+ "DZ": {
+ "name": "الجزایر"
+ },
+ "DE": {
+ "name": "المان"
+ },
+ "AQ": {
+ "name": "انتارکتیکا"
+ },
+ "ID": {
+ "name": "اندونیزیا"
+ },
+ "AO": {
+ "name": "انګولا"
+ },
+ "IT": {
+ "name": "ایټالیه"
+ },
+ "GB": {
+ "name": "برتانیه"
+ },
+ "BG": {
+ "name": "بلغاریه"
+ },
+ "BD": {
+ "name": "بنګله‌دیش"
+ },
+ "PK": {
+ "name": "پاکستان"
+ },
+ "PT": {
+ "name": "پورتګال"
+ },
+ "PL": {
+ "name": "پولنډ"
+ },
+ "TJ": {
+ "name": "تاجکستان"
+ },
+ "TZ": {
+ "name": "تنزانیا"
+ },
+ "JP": {
+ "name": "جاپان"
+ },
+ "JM": {
+ "name": "جمیکا"
+ },
+ "CN": {
+ "name": "چین"
+ },
+ "ET": {
+ "name": "حبشه"
+ },
+ "DK": {
+ "name": "ډنمارک"
+ },
+ "RU": {
+ "name": "روسیه"
+ },
+ "RW": {
+ "name": "روندا"
+ },
+ "SV": {
+ "name": "سالوÛډور"
+ },
+ "SA": {
+ "name": "سعودی عربستان"
+ },
+ "SY": {
+ "name": "سوریه"
+ },
+ "SE": {
+ "name": "سویډن"
+ },
+ "CH": {
+ "name": "سویس"
+ },
+ "IQ": {
+ "name": "عراق"
+ },
+ "FR": {
+ "name": "Ùرانسه"
+ },
+ "PS": {
+ "name": "Ùلسطین"
+ },
+ "FI": {
+ "name": "Ùنلینډ"
+ },
+ "CA": {
+ "name": "کاناډا"
+ },
+ "KH": {
+ "name": "کمبودیا"
+ },
+ "CO": {
+ "name": "کولمبیا"
+ },
+ "KW": {
+ "name": "کویټ"
+ },
+ "CU": {
+ "name": "کیوبا"
+ },
+ "GH": {
+ "name": "ګانا"
+ },
+ "GT": {
+ "name": "ګواتیمالا"
+ },
+ "GN": {
+ "name": "ګیانا"
+ },
+ "LA": {
+ "name": "لاوس"
+ },
+ "LR": {
+ "name": "لایبریا"
+ },
+ "LB": {
+ "name": "لبنان"
+ },
+ "LY": {
+ "name": "لیبیا"
+ },
+ "MY": {
+ "name": "مالیزیا"
+ },
+ "HU": {
+ "name": "مجارستان"
+ },
+ "MA": {
+ "name": "مراکش"
+ },
+ "EG": {
+ "name": "مصر"
+ },
+ "MN": {
+ "name": "مغولستان"
+ },
+ "NO": {
+ "name": "ناروÛ"
+ },
+ "NG": {
+ "name": "نایجیریا"
+ },
+ "NI": {
+ "name": "نکاراګوا"
+ },
+ "NP": {
+ "name": "نیپال"
+ },
+ "NZ": {
+ "name": "نیوزیلنډ"
+ },
+ "NL": {
+ "name": "هالÛÙ†Ú‰"
+ },
+ "HN": {
+ "name": "هانډوراس"
+ },
+ "ES": {
+ "name": "هسپانیه"
+ },
+ "IN": {
+ "name": "هند"
+ },
+ "YE": {
+ "name": "یمن"
+ },
+ "UY": {
+ "name": "یوروګوای"
+ },
+ "GR": {
+ "name": "یونان"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/pt-AO.json b/library/intl/resources/country/pt-AO.json
new file mode 100644
index 000000000..0b59b2b6f
--- /dev/null
+++ b/library/intl/resources/country/pt-AO.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afeganistão"
+ },
+ "ZA": {
+ "name": "Ãfrica do Sul"
+ },
+ "AL": {
+ "name": "Albânia"
+ },
+ "DE": {
+ "name": "Alemanha"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antígua e Barbuda"
+ },
+ "SA": {
+ "name": "Arábia Saudita"
+ },
+ "DZ": {
+ "name": "Argélia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Arménia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Austrália"
+ },
+ "AT": {
+ "name": "Ãustria"
+ },
+ "AZ": {
+ "name": "Azerbaijão"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Barém"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benim"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrússia"
+ },
+ "BO": {
+ "name": "Bolívia"
+ },
+ "BA": {
+ "name": "Bósnia e Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgária"
+ },
+ "BF": {
+ "name": "Burquina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butão"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "CM": {
+ "name": "Camarões"
+ },
+ "KH": {
+ "name": "Camboja"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "KZ": {
+ "name": "Cazaquistão"
+ },
+ "EA": {
+ "name": "Ceuta e Melilha"
+ },
+ "TD": {
+ "name": "Chade"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Cidade do Vaticano"
+ },
+ "CO": {
+ "name": "Colômbia"
+ },
+ "KM": {
+ "name": "Comores"
+ },
+ "CG": {
+ "name": "Congo-Brazzaville"
+ },
+ "CD": {
+ "name": "Congo-Kinshasa"
+ },
+ "KP": {
+ "name": "Coreia do Norte"
+ },
+ "KR": {
+ "name": "Coreia do Sul"
+ },
+ "CI": {
+ "name": "Costa do Marfim"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croácia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçau"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Domínica"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emirados Ãrabes Unidos"
+ },
+ "EC": {
+ "name": "Equador"
+ },
+ "ER": {
+ "name": "Eritreia"
+ },
+ "SK": {
+ "name": "Eslováquia"
+ },
+ "SI": {
+ "name": "Eslovénia"
+ },
+ "ES": {
+ "name": "Espanha"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estónia"
+ },
+ "ET": {
+ "name": "Etiópia"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlândia"
+ },
+ "FR": {
+ "name": "França"
+ },
+ "GA": {
+ "name": "Gabão"
+ },
+ "GM": {
+ "name": "Gâmbia"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GE": {
+ "name": "Geórgia"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grécia"
+ },
+ "GL": {
+ "name": "Gronelândia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guame"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guiana"
+ },
+ "GF": {
+ "name": "Guiana Francesa"
+ },
+ "GN": {
+ "name": "Guiné"
+ },
+ "GQ": {
+ "name": "Guiné Equatorial"
+ },
+ "GW": {
+ "name": "Guiné-Bissau"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong, RAE da China"
+ },
+ "HU": {
+ "name": "Hungria"
+ },
+ "YE": {
+ "name": "Iémen"
+ },
+ "AC": {
+ "name": "Ilha de Ascensão"
+ },
+ "IM": {
+ "name": "Ilha de Man"
+ },
+ "CX": {
+ "name": "Ilha do Natal"
+ },
+ "NF": {
+ "name": "Ilha Norfolk"
+ },
+ "AX": {
+ "name": "Ilhas Ã…land"
+ },
+ "KY": {
+ "name": "Ilhas Caimão"
+ },
+ "IC": {
+ "name": "Ilhas Canárias"
+ },
+ "CC": {
+ "name": "Ilhas Cocos"
+ },
+ "CK": {
+ "name": "Ilhas Cook"
+ },
+ "UM": {
+ "name": "Ilhas Distantes dos EUA"
+ },
+ "FK": {
+ "name": "Ilhas Falkland"
+ },
+ "FO": {
+ "name": "Ilhas Faroé"
+ },
+ "GS": {
+ "name": "Ilhas Geórgia do Sul e Sandwich do Sul"
+ },
+ "MP": {
+ "name": "Ilhas Marianas do Norte"
+ },
+ "MH": {
+ "name": "Ilhas Marshall"
+ },
+ "SB": {
+ "name": "Ilhas Salomão"
+ },
+ "TC": {
+ "name": "Ilhas Turcas e Caicos"
+ },
+ "VG": {
+ "name": "Ilhas Virgens Britânicas"
+ },
+ "VI": {
+ "name": "Ilhas Virgens dos EUA"
+ },
+ "IN": {
+ "name": "Ãndia"
+ },
+ "ID": {
+ "name": "Indonésia"
+ },
+ "IR": {
+ "name": "Irão"
+ },
+ "IQ": {
+ "name": "Iraque"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "IS": {
+ "name": "Islândia"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Itália"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japão"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "JO": {
+ "name": "Jordânia"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letónia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Libéria"
+ },
+ "LY": {
+ "name": "Líbia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituânia"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MO": {
+ "name": "Macau, RAE da China"
+ },
+ "MK": {
+ "name": "Macedónia"
+ },
+ "MG": {
+ "name": "Madagáscar"
+ },
+ "YT": {
+ "name": "Maiote"
+ },
+ "MY": {
+ "name": "Malásia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marrocos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Maurícia"
+ },
+ "MR": {
+ "name": "Mauritânia"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "MM": {
+ "name": "Mianmar (Birmânia)"
+ },
+ "FM": {
+ "name": "Micronésia"
+ },
+ "MZ": {
+ "name": "Moçambique"
+ },
+ "MD": {
+ "name": "Moldávia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongólia"
+ },
+ "MS": {
+ "name": "Monserrate"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "NA": {
+ "name": "Namíbia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicarágua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigéria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nova Caledónia"
+ },
+ "NZ": {
+ "name": "Nova Zelândia"
+ },
+ "OM": {
+ "name": "Omã"
+ },
+ "NL": {
+ "name": "Países Baixos"
+ },
+ "BQ": {
+ "name": "Países Baixos Caribenhos"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papua-Nova Guiné"
+ },
+ "PK": {
+ "name": "Paquistão"
+ },
+ "PY": {
+ "name": "Paraguai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PF": {
+ "name": "Polinésia Francesa"
+ },
+ "PL": {
+ "name": "Polónia"
+ },
+ "PR": {
+ "name": "Porto Rico"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "KE": {
+ "name": "Quénia"
+ },
+ "KG": {
+ "name": "Quirguistão"
+ },
+ "KI": {
+ "name": "Quiribati"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centro-Africana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunião"
+ },
+ "RO": {
+ "name": "Roménia"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RU": {
+ "name": "Rússia"
+ },
+ "EH": {
+ "name": "Saara Ocidental"
+ },
+ "PM": {
+ "name": "Saint Pierre e Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "SH": {
+ "name": "Santa Helena"
+ },
+ "LC": {
+ "name": "Santa Lúcia"
+ },
+ "BL": {
+ "name": "São Bartolomeu"
+ },
+ "KN": {
+ "name": "São Cristóvão e Nevis"
+ },
+ "SM": {
+ "name": "São Marino"
+ },
+ "MF": {
+ "name": "São Martinho"
+ },
+ "ST": {
+ "name": "São Tomé e Príncipe"
+ },
+ "VC": {
+ "name": "São Vicente e Granadinas"
+ },
+ "SC": {
+ "name": "Seicheles"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "SL": {
+ "name": "Serra Leoa"
+ },
+ "RS": {
+ "name": "Sérvia"
+ },
+ "SG": {
+ "name": "Singapura"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Síria"
+ },
+ "SO": {
+ "name": "Somália"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilândia"
+ },
+ "SD": {
+ "name": "Sudão"
+ },
+ "SS": {
+ "name": "Sudão do Sul"
+ },
+ "SE": {
+ "name": "Suécia"
+ },
+ "CH": {
+ "name": "Suíça"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard e Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailândia"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajiquistão"
+ },
+ "TZ": {
+ "name": "Tanzânia"
+ },
+ "IO": {
+ "name": "Território Britânico do Oceano Ãndico"
+ },
+ "PS": {
+ "name": "Território Palestiniano"
+ },
+ "TF": {
+ "name": "Territórios Franceses do Sul"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TK": {
+ "name": "Toquelau"
+ },
+ "TT": {
+ "name": "Trindade e Tobago"
+ },
+ "TA": {
+ "name": "Tristão da Cunha"
+ },
+ "TN": {
+ "name": "Tunísia"
+ },
+ "TM": {
+ "name": "Turquemenistão"
+ },
+ "TR": {
+ "name": "Turquia"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrânia"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguai"
+ },
+ "UZ": {
+ "name": "Uzbequistão"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietname"
+ },
+ "WF": {
+ "name": "Wallis e Futuna"
+ },
+ "ZM": {
+ "name": "Zâmbia"
+ },
+ "ZW": {
+ "name": "Zimbabué"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/pt-CV.json b/library/intl/resources/country/pt-CV.json
new file mode 100644
index 000000000..0b59b2b6f
--- /dev/null
+++ b/library/intl/resources/country/pt-CV.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afeganistão"
+ },
+ "ZA": {
+ "name": "Ãfrica do Sul"
+ },
+ "AL": {
+ "name": "Albânia"
+ },
+ "DE": {
+ "name": "Alemanha"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antígua e Barbuda"
+ },
+ "SA": {
+ "name": "Arábia Saudita"
+ },
+ "DZ": {
+ "name": "Argélia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Arménia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Austrália"
+ },
+ "AT": {
+ "name": "Ãustria"
+ },
+ "AZ": {
+ "name": "Azerbaijão"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Barém"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benim"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrússia"
+ },
+ "BO": {
+ "name": "Bolívia"
+ },
+ "BA": {
+ "name": "Bósnia e Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgária"
+ },
+ "BF": {
+ "name": "Burquina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butão"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "CM": {
+ "name": "Camarões"
+ },
+ "KH": {
+ "name": "Camboja"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "KZ": {
+ "name": "Cazaquistão"
+ },
+ "EA": {
+ "name": "Ceuta e Melilha"
+ },
+ "TD": {
+ "name": "Chade"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Cidade do Vaticano"
+ },
+ "CO": {
+ "name": "Colômbia"
+ },
+ "KM": {
+ "name": "Comores"
+ },
+ "CG": {
+ "name": "Congo-Brazzaville"
+ },
+ "CD": {
+ "name": "Congo-Kinshasa"
+ },
+ "KP": {
+ "name": "Coreia do Norte"
+ },
+ "KR": {
+ "name": "Coreia do Sul"
+ },
+ "CI": {
+ "name": "Costa do Marfim"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croácia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçau"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Domínica"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emirados Ãrabes Unidos"
+ },
+ "EC": {
+ "name": "Equador"
+ },
+ "ER": {
+ "name": "Eritreia"
+ },
+ "SK": {
+ "name": "Eslováquia"
+ },
+ "SI": {
+ "name": "Eslovénia"
+ },
+ "ES": {
+ "name": "Espanha"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estónia"
+ },
+ "ET": {
+ "name": "Etiópia"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlândia"
+ },
+ "FR": {
+ "name": "França"
+ },
+ "GA": {
+ "name": "Gabão"
+ },
+ "GM": {
+ "name": "Gâmbia"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GE": {
+ "name": "Geórgia"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grécia"
+ },
+ "GL": {
+ "name": "Gronelândia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guame"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guiana"
+ },
+ "GF": {
+ "name": "Guiana Francesa"
+ },
+ "GN": {
+ "name": "Guiné"
+ },
+ "GQ": {
+ "name": "Guiné Equatorial"
+ },
+ "GW": {
+ "name": "Guiné-Bissau"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong, RAE da China"
+ },
+ "HU": {
+ "name": "Hungria"
+ },
+ "YE": {
+ "name": "Iémen"
+ },
+ "AC": {
+ "name": "Ilha de Ascensão"
+ },
+ "IM": {
+ "name": "Ilha de Man"
+ },
+ "CX": {
+ "name": "Ilha do Natal"
+ },
+ "NF": {
+ "name": "Ilha Norfolk"
+ },
+ "AX": {
+ "name": "Ilhas Ã…land"
+ },
+ "KY": {
+ "name": "Ilhas Caimão"
+ },
+ "IC": {
+ "name": "Ilhas Canárias"
+ },
+ "CC": {
+ "name": "Ilhas Cocos"
+ },
+ "CK": {
+ "name": "Ilhas Cook"
+ },
+ "UM": {
+ "name": "Ilhas Distantes dos EUA"
+ },
+ "FK": {
+ "name": "Ilhas Falkland"
+ },
+ "FO": {
+ "name": "Ilhas Faroé"
+ },
+ "GS": {
+ "name": "Ilhas Geórgia do Sul e Sandwich do Sul"
+ },
+ "MP": {
+ "name": "Ilhas Marianas do Norte"
+ },
+ "MH": {
+ "name": "Ilhas Marshall"
+ },
+ "SB": {
+ "name": "Ilhas Salomão"
+ },
+ "TC": {
+ "name": "Ilhas Turcas e Caicos"
+ },
+ "VG": {
+ "name": "Ilhas Virgens Britânicas"
+ },
+ "VI": {
+ "name": "Ilhas Virgens dos EUA"
+ },
+ "IN": {
+ "name": "Ãndia"
+ },
+ "ID": {
+ "name": "Indonésia"
+ },
+ "IR": {
+ "name": "Irão"
+ },
+ "IQ": {
+ "name": "Iraque"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "IS": {
+ "name": "Islândia"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Itália"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japão"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "JO": {
+ "name": "Jordânia"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letónia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Libéria"
+ },
+ "LY": {
+ "name": "Líbia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituânia"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MO": {
+ "name": "Macau, RAE da China"
+ },
+ "MK": {
+ "name": "Macedónia"
+ },
+ "MG": {
+ "name": "Madagáscar"
+ },
+ "YT": {
+ "name": "Maiote"
+ },
+ "MY": {
+ "name": "Malásia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marrocos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Maurícia"
+ },
+ "MR": {
+ "name": "Mauritânia"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "MM": {
+ "name": "Mianmar (Birmânia)"
+ },
+ "FM": {
+ "name": "Micronésia"
+ },
+ "MZ": {
+ "name": "Moçambique"
+ },
+ "MD": {
+ "name": "Moldávia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongólia"
+ },
+ "MS": {
+ "name": "Monserrate"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "NA": {
+ "name": "Namíbia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicarágua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigéria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nova Caledónia"
+ },
+ "NZ": {
+ "name": "Nova Zelândia"
+ },
+ "OM": {
+ "name": "Omã"
+ },
+ "NL": {
+ "name": "Países Baixos"
+ },
+ "BQ": {
+ "name": "Países Baixos Caribenhos"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papua-Nova Guiné"
+ },
+ "PK": {
+ "name": "Paquistão"
+ },
+ "PY": {
+ "name": "Paraguai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PF": {
+ "name": "Polinésia Francesa"
+ },
+ "PL": {
+ "name": "Polónia"
+ },
+ "PR": {
+ "name": "Porto Rico"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "KE": {
+ "name": "Quénia"
+ },
+ "KG": {
+ "name": "Quirguistão"
+ },
+ "KI": {
+ "name": "Quiribati"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centro-Africana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunião"
+ },
+ "RO": {
+ "name": "Roménia"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RU": {
+ "name": "Rússia"
+ },
+ "EH": {
+ "name": "Saara Ocidental"
+ },
+ "PM": {
+ "name": "Saint Pierre e Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "SH": {
+ "name": "Santa Helena"
+ },
+ "LC": {
+ "name": "Santa Lúcia"
+ },
+ "BL": {
+ "name": "São Bartolomeu"
+ },
+ "KN": {
+ "name": "São Cristóvão e Nevis"
+ },
+ "SM": {
+ "name": "São Marino"
+ },
+ "MF": {
+ "name": "São Martinho"
+ },
+ "ST": {
+ "name": "São Tomé e Príncipe"
+ },
+ "VC": {
+ "name": "São Vicente e Granadinas"
+ },
+ "SC": {
+ "name": "Seicheles"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "SL": {
+ "name": "Serra Leoa"
+ },
+ "RS": {
+ "name": "Sérvia"
+ },
+ "SG": {
+ "name": "Singapura"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Síria"
+ },
+ "SO": {
+ "name": "Somália"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilândia"
+ },
+ "SD": {
+ "name": "Sudão"
+ },
+ "SS": {
+ "name": "Sudão do Sul"
+ },
+ "SE": {
+ "name": "Suécia"
+ },
+ "CH": {
+ "name": "Suíça"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard e Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailândia"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajiquistão"
+ },
+ "TZ": {
+ "name": "Tanzânia"
+ },
+ "IO": {
+ "name": "Território Britânico do Oceano Ãndico"
+ },
+ "PS": {
+ "name": "Território Palestiniano"
+ },
+ "TF": {
+ "name": "Territórios Franceses do Sul"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TK": {
+ "name": "Toquelau"
+ },
+ "TT": {
+ "name": "Trindade e Tobago"
+ },
+ "TA": {
+ "name": "Tristão da Cunha"
+ },
+ "TN": {
+ "name": "Tunísia"
+ },
+ "TM": {
+ "name": "Turquemenistão"
+ },
+ "TR": {
+ "name": "Turquia"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrânia"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguai"
+ },
+ "UZ": {
+ "name": "Uzbequistão"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietname"
+ },
+ "WF": {
+ "name": "Wallis e Futuna"
+ },
+ "ZM": {
+ "name": "Zâmbia"
+ },
+ "ZW": {
+ "name": "Zimbabué"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/pt-GW.json b/library/intl/resources/country/pt-GW.json
new file mode 100644
index 000000000..0b59b2b6f
--- /dev/null
+++ b/library/intl/resources/country/pt-GW.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afeganistão"
+ },
+ "ZA": {
+ "name": "Ãfrica do Sul"
+ },
+ "AL": {
+ "name": "Albânia"
+ },
+ "DE": {
+ "name": "Alemanha"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antígua e Barbuda"
+ },
+ "SA": {
+ "name": "Arábia Saudita"
+ },
+ "DZ": {
+ "name": "Argélia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Arménia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Austrália"
+ },
+ "AT": {
+ "name": "Ãustria"
+ },
+ "AZ": {
+ "name": "Azerbaijão"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Barém"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benim"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrússia"
+ },
+ "BO": {
+ "name": "Bolívia"
+ },
+ "BA": {
+ "name": "Bósnia e Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgária"
+ },
+ "BF": {
+ "name": "Burquina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butão"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "CM": {
+ "name": "Camarões"
+ },
+ "KH": {
+ "name": "Camboja"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "KZ": {
+ "name": "Cazaquistão"
+ },
+ "EA": {
+ "name": "Ceuta e Melilha"
+ },
+ "TD": {
+ "name": "Chade"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Cidade do Vaticano"
+ },
+ "CO": {
+ "name": "Colômbia"
+ },
+ "KM": {
+ "name": "Comores"
+ },
+ "CG": {
+ "name": "Congo-Brazzaville"
+ },
+ "CD": {
+ "name": "Congo-Kinshasa"
+ },
+ "KP": {
+ "name": "Coreia do Norte"
+ },
+ "KR": {
+ "name": "Coreia do Sul"
+ },
+ "CI": {
+ "name": "Costa do Marfim"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croácia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçau"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Domínica"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emirados Ãrabes Unidos"
+ },
+ "EC": {
+ "name": "Equador"
+ },
+ "ER": {
+ "name": "Eritreia"
+ },
+ "SK": {
+ "name": "Eslováquia"
+ },
+ "SI": {
+ "name": "Eslovénia"
+ },
+ "ES": {
+ "name": "Espanha"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estónia"
+ },
+ "ET": {
+ "name": "Etiópia"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlândia"
+ },
+ "FR": {
+ "name": "França"
+ },
+ "GA": {
+ "name": "Gabão"
+ },
+ "GM": {
+ "name": "Gâmbia"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GE": {
+ "name": "Geórgia"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grécia"
+ },
+ "GL": {
+ "name": "Gronelândia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guame"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guiana"
+ },
+ "GF": {
+ "name": "Guiana Francesa"
+ },
+ "GN": {
+ "name": "Guiné"
+ },
+ "GQ": {
+ "name": "Guiné Equatorial"
+ },
+ "GW": {
+ "name": "Guiné-Bissau"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong, RAE da China"
+ },
+ "HU": {
+ "name": "Hungria"
+ },
+ "YE": {
+ "name": "Iémen"
+ },
+ "AC": {
+ "name": "Ilha de Ascensão"
+ },
+ "IM": {
+ "name": "Ilha de Man"
+ },
+ "CX": {
+ "name": "Ilha do Natal"
+ },
+ "NF": {
+ "name": "Ilha Norfolk"
+ },
+ "AX": {
+ "name": "Ilhas Ã…land"
+ },
+ "KY": {
+ "name": "Ilhas Caimão"
+ },
+ "IC": {
+ "name": "Ilhas Canárias"
+ },
+ "CC": {
+ "name": "Ilhas Cocos"
+ },
+ "CK": {
+ "name": "Ilhas Cook"
+ },
+ "UM": {
+ "name": "Ilhas Distantes dos EUA"
+ },
+ "FK": {
+ "name": "Ilhas Falkland"
+ },
+ "FO": {
+ "name": "Ilhas Faroé"
+ },
+ "GS": {
+ "name": "Ilhas Geórgia do Sul e Sandwich do Sul"
+ },
+ "MP": {
+ "name": "Ilhas Marianas do Norte"
+ },
+ "MH": {
+ "name": "Ilhas Marshall"
+ },
+ "SB": {
+ "name": "Ilhas Salomão"
+ },
+ "TC": {
+ "name": "Ilhas Turcas e Caicos"
+ },
+ "VG": {
+ "name": "Ilhas Virgens Britânicas"
+ },
+ "VI": {
+ "name": "Ilhas Virgens dos EUA"
+ },
+ "IN": {
+ "name": "Ãndia"
+ },
+ "ID": {
+ "name": "Indonésia"
+ },
+ "IR": {
+ "name": "Irão"
+ },
+ "IQ": {
+ "name": "Iraque"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "IS": {
+ "name": "Islândia"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Itália"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japão"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "JO": {
+ "name": "Jordânia"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letónia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Libéria"
+ },
+ "LY": {
+ "name": "Líbia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituânia"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MO": {
+ "name": "Macau, RAE da China"
+ },
+ "MK": {
+ "name": "Macedónia"
+ },
+ "MG": {
+ "name": "Madagáscar"
+ },
+ "YT": {
+ "name": "Maiote"
+ },
+ "MY": {
+ "name": "Malásia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marrocos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Maurícia"
+ },
+ "MR": {
+ "name": "Mauritânia"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "MM": {
+ "name": "Mianmar (Birmânia)"
+ },
+ "FM": {
+ "name": "Micronésia"
+ },
+ "MZ": {
+ "name": "Moçambique"
+ },
+ "MD": {
+ "name": "Moldávia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongólia"
+ },
+ "MS": {
+ "name": "Monserrate"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "NA": {
+ "name": "Namíbia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicarágua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigéria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nova Caledónia"
+ },
+ "NZ": {
+ "name": "Nova Zelândia"
+ },
+ "OM": {
+ "name": "Omã"
+ },
+ "NL": {
+ "name": "Países Baixos"
+ },
+ "BQ": {
+ "name": "Países Baixos Caribenhos"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papua-Nova Guiné"
+ },
+ "PK": {
+ "name": "Paquistão"
+ },
+ "PY": {
+ "name": "Paraguai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PF": {
+ "name": "Polinésia Francesa"
+ },
+ "PL": {
+ "name": "Polónia"
+ },
+ "PR": {
+ "name": "Porto Rico"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "KE": {
+ "name": "Quénia"
+ },
+ "KG": {
+ "name": "Quirguistão"
+ },
+ "KI": {
+ "name": "Quiribati"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centro-Africana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunião"
+ },
+ "RO": {
+ "name": "Roménia"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RU": {
+ "name": "Rússia"
+ },
+ "EH": {
+ "name": "Saara Ocidental"
+ },
+ "PM": {
+ "name": "Saint Pierre e Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "SH": {
+ "name": "Santa Helena"
+ },
+ "LC": {
+ "name": "Santa Lúcia"
+ },
+ "BL": {
+ "name": "São Bartolomeu"
+ },
+ "KN": {
+ "name": "São Cristóvão e Nevis"
+ },
+ "SM": {
+ "name": "São Marino"
+ },
+ "MF": {
+ "name": "São Martinho"
+ },
+ "ST": {
+ "name": "São Tomé e Príncipe"
+ },
+ "VC": {
+ "name": "São Vicente e Granadinas"
+ },
+ "SC": {
+ "name": "Seicheles"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "SL": {
+ "name": "Serra Leoa"
+ },
+ "RS": {
+ "name": "Sérvia"
+ },
+ "SG": {
+ "name": "Singapura"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Síria"
+ },
+ "SO": {
+ "name": "Somália"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilândia"
+ },
+ "SD": {
+ "name": "Sudão"
+ },
+ "SS": {
+ "name": "Sudão do Sul"
+ },
+ "SE": {
+ "name": "Suécia"
+ },
+ "CH": {
+ "name": "Suíça"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard e Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailândia"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajiquistão"
+ },
+ "TZ": {
+ "name": "Tanzânia"
+ },
+ "IO": {
+ "name": "Território Britânico do Oceano Ãndico"
+ },
+ "PS": {
+ "name": "Território Palestiniano"
+ },
+ "TF": {
+ "name": "Territórios Franceses do Sul"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TK": {
+ "name": "Toquelau"
+ },
+ "TT": {
+ "name": "Trindade e Tobago"
+ },
+ "TA": {
+ "name": "Tristão da Cunha"
+ },
+ "TN": {
+ "name": "Tunísia"
+ },
+ "TM": {
+ "name": "Turquemenistão"
+ },
+ "TR": {
+ "name": "Turquia"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrânia"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguai"
+ },
+ "UZ": {
+ "name": "Uzbequistão"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietname"
+ },
+ "WF": {
+ "name": "Wallis e Futuna"
+ },
+ "ZM": {
+ "name": "Zâmbia"
+ },
+ "ZW": {
+ "name": "Zimbabué"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/pt-MO.json b/library/intl/resources/country/pt-MO.json
new file mode 100644
index 000000000..0b59b2b6f
--- /dev/null
+++ b/library/intl/resources/country/pt-MO.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afeganistão"
+ },
+ "ZA": {
+ "name": "Ãfrica do Sul"
+ },
+ "AL": {
+ "name": "Albânia"
+ },
+ "DE": {
+ "name": "Alemanha"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antígua e Barbuda"
+ },
+ "SA": {
+ "name": "Arábia Saudita"
+ },
+ "DZ": {
+ "name": "Argélia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Arménia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Austrália"
+ },
+ "AT": {
+ "name": "Ãustria"
+ },
+ "AZ": {
+ "name": "Azerbaijão"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Barém"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benim"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrússia"
+ },
+ "BO": {
+ "name": "Bolívia"
+ },
+ "BA": {
+ "name": "Bósnia e Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgária"
+ },
+ "BF": {
+ "name": "Burquina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butão"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "CM": {
+ "name": "Camarões"
+ },
+ "KH": {
+ "name": "Camboja"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "KZ": {
+ "name": "Cazaquistão"
+ },
+ "EA": {
+ "name": "Ceuta e Melilha"
+ },
+ "TD": {
+ "name": "Chade"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Cidade do Vaticano"
+ },
+ "CO": {
+ "name": "Colômbia"
+ },
+ "KM": {
+ "name": "Comores"
+ },
+ "CG": {
+ "name": "Congo-Brazzaville"
+ },
+ "CD": {
+ "name": "Congo-Kinshasa"
+ },
+ "KP": {
+ "name": "Coreia do Norte"
+ },
+ "KR": {
+ "name": "Coreia do Sul"
+ },
+ "CI": {
+ "name": "Costa do Marfim"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croácia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçau"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Domínica"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emirados Ãrabes Unidos"
+ },
+ "EC": {
+ "name": "Equador"
+ },
+ "ER": {
+ "name": "Eritreia"
+ },
+ "SK": {
+ "name": "Eslováquia"
+ },
+ "SI": {
+ "name": "Eslovénia"
+ },
+ "ES": {
+ "name": "Espanha"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estónia"
+ },
+ "ET": {
+ "name": "Etiópia"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlândia"
+ },
+ "FR": {
+ "name": "França"
+ },
+ "GA": {
+ "name": "Gabão"
+ },
+ "GM": {
+ "name": "Gâmbia"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GE": {
+ "name": "Geórgia"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grécia"
+ },
+ "GL": {
+ "name": "Gronelândia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guame"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guiana"
+ },
+ "GF": {
+ "name": "Guiana Francesa"
+ },
+ "GN": {
+ "name": "Guiné"
+ },
+ "GQ": {
+ "name": "Guiné Equatorial"
+ },
+ "GW": {
+ "name": "Guiné-Bissau"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong, RAE da China"
+ },
+ "HU": {
+ "name": "Hungria"
+ },
+ "YE": {
+ "name": "Iémen"
+ },
+ "AC": {
+ "name": "Ilha de Ascensão"
+ },
+ "IM": {
+ "name": "Ilha de Man"
+ },
+ "CX": {
+ "name": "Ilha do Natal"
+ },
+ "NF": {
+ "name": "Ilha Norfolk"
+ },
+ "AX": {
+ "name": "Ilhas Ã…land"
+ },
+ "KY": {
+ "name": "Ilhas Caimão"
+ },
+ "IC": {
+ "name": "Ilhas Canárias"
+ },
+ "CC": {
+ "name": "Ilhas Cocos"
+ },
+ "CK": {
+ "name": "Ilhas Cook"
+ },
+ "UM": {
+ "name": "Ilhas Distantes dos EUA"
+ },
+ "FK": {
+ "name": "Ilhas Falkland"
+ },
+ "FO": {
+ "name": "Ilhas Faroé"
+ },
+ "GS": {
+ "name": "Ilhas Geórgia do Sul e Sandwich do Sul"
+ },
+ "MP": {
+ "name": "Ilhas Marianas do Norte"
+ },
+ "MH": {
+ "name": "Ilhas Marshall"
+ },
+ "SB": {
+ "name": "Ilhas Salomão"
+ },
+ "TC": {
+ "name": "Ilhas Turcas e Caicos"
+ },
+ "VG": {
+ "name": "Ilhas Virgens Britânicas"
+ },
+ "VI": {
+ "name": "Ilhas Virgens dos EUA"
+ },
+ "IN": {
+ "name": "Ãndia"
+ },
+ "ID": {
+ "name": "Indonésia"
+ },
+ "IR": {
+ "name": "Irão"
+ },
+ "IQ": {
+ "name": "Iraque"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "IS": {
+ "name": "Islândia"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Itália"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japão"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "JO": {
+ "name": "Jordânia"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letónia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Libéria"
+ },
+ "LY": {
+ "name": "Líbia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituânia"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MO": {
+ "name": "Macau, RAE da China"
+ },
+ "MK": {
+ "name": "Macedónia"
+ },
+ "MG": {
+ "name": "Madagáscar"
+ },
+ "YT": {
+ "name": "Maiote"
+ },
+ "MY": {
+ "name": "Malásia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marrocos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Maurícia"
+ },
+ "MR": {
+ "name": "Mauritânia"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "MM": {
+ "name": "Mianmar (Birmânia)"
+ },
+ "FM": {
+ "name": "Micronésia"
+ },
+ "MZ": {
+ "name": "Moçambique"
+ },
+ "MD": {
+ "name": "Moldávia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongólia"
+ },
+ "MS": {
+ "name": "Monserrate"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "NA": {
+ "name": "Namíbia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicarágua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigéria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nova Caledónia"
+ },
+ "NZ": {
+ "name": "Nova Zelândia"
+ },
+ "OM": {
+ "name": "Omã"
+ },
+ "NL": {
+ "name": "Países Baixos"
+ },
+ "BQ": {
+ "name": "Países Baixos Caribenhos"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papua-Nova Guiné"
+ },
+ "PK": {
+ "name": "Paquistão"
+ },
+ "PY": {
+ "name": "Paraguai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PF": {
+ "name": "Polinésia Francesa"
+ },
+ "PL": {
+ "name": "Polónia"
+ },
+ "PR": {
+ "name": "Porto Rico"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "KE": {
+ "name": "Quénia"
+ },
+ "KG": {
+ "name": "Quirguistão"
+ },
+ "KI": {
+ "name": "Quiribati"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centro-Africana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunião"
+ },
+ "RO": {
+ "name": "Roménia"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RU": {
+ "name": "Rússia"
+ },
+ "EH": {
+ "name": "Saara Ocidental"
+ },
+ "PM": {
+ "name": "Saint Pierre e Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "SH": {
+ "name": "Santa Helena"
+ },
+ "LC": {
+ "name": "Santa Lúcia"
+ },
+ "BL": {
+ "name": "São Bartolomeu"
+ },
+ "KN": {
+ "name": "São Cristóvão e Nevis"
+ },
+ "SM": {
+ "name": "São Marino"
+ },
+ "MF": {
+ "name": "São Martinho"
+ },
+ "ST": {
+ "name": "São Tomé e Príncipe"
+ },
+ "VC": {
+ "name": "São Vicente e Granadinas"
+ },
+ "SC": {
+ "name": "Seicheles"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "SL": {
+ "name": "Serra Leoa"
+ },
+ "RS": {
+ "name": "Sérvia"
+ },
+ "SG": {
+ "name": "Singapura"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Síria"
+ },
+ "SO": {
+ "name": "Somália"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilândia"
+ },
+ "SD": {
+ "name": "Sudão"
+ },
+ "SS": {
+ "name": "Sudão do Sul"
+ },
+ "SE": {
+ "name": "Suécia"
+ },
+ "CH": {
+ "name": "Suíça"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard e Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailândia"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajiquistão"
+ },
+ "TZ": {
+ "name": "Tanzânia"
+ },
+ "IO": {
+ "name": "Território Britânico do Oceano Ãndico"
+ },
+ "PS": {
+ "name": "Território Palestiniano"
+ },
+ "TF": {
+ "name": "Territórios Franceses do Sul"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TK": {
+ "name": "Toquelau"
+ },
+ "TT": {
+ "name": "Trindade e Tobago"
+ },
+ "TA": {
+ "name": "Tristão da Cunha"
+ },
+ "TN": {
+ "name": "Tunísia"
+ },
+ "TM": {
+ "name": "Turquemenistão"
+ },
+ "TR": {
+ "name": "Turquia"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrânia"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguai"
+ },
+ "UZ": {
+ "name": "Uzbequistão"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietname"
+ },
+ "WF": {
+ "name": "Wallis e Futuna"
+ },
+ "ZM": {
+ "name": "Zâmbia"
+ },
+ "ZW": {
+ "name": "Zimbabué"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/pt-MZ.json b/library/intl/resources/country/pt-MZ.json
new file mode 100644
index 000000000..0b59b2b6f
--- /dev/null
+++ b/library/intl/resources/country/pt-MZ.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afeganistão"
+ },
+ "ZA": {
+ "name": "Ãfrica do Sul"
+ },
+ "AL": {
+ "name": "Albânia"
+ },
+ "DE": {
+ "name": "Alemanha"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antígua e Barbuda"
+ },
+ "SA": {
+ "name": "Arábia Saudita"
+ },
+ "DZ": {
+ "name": "Argélia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Arménia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Austrália"
+ },
+ "AT": {
+ "name": "Ãustria"
+ },
+ "AZ": {
+ "name": "Azerbaijão"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Barém"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benim"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrússia"
+ },
+ "BO": {
+ "name": "Bolívia"
+ },
+ "BA": {
+ "name": "Bósnia e Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgária"
+ },
+ "BF": {
+ "name": "Burquina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butão"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "CM": {
+ "name": "Camarões"
+ },
+ "KH": {
+ "name": "Camboja"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "KZ": {
+ "name": "Cazaquistão"
+ },
+ "EA": {
+ "name": "Ceuta e Melilha"
+ },
+ "TD": {
+ "name": "Chade"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Cidade do Vaticano"
+ },
+ "CO": {
+ "name": "Colômbia"
+ },
+ "KM": {
+ "name": "Comores"
+ },
+ "CG": {
+ "name": "Congo-Brazzaville"
+ },
+ "CD": {
+ "name": "Congo-Kinshasa"
+ },
+ "KP": {
+ "name": "Coreia do Norte"
+ },
+ "KR": {
+ "name": "Coreia do Sul"
+ },
+ "CI": {
+ "name": "Costa do Marfim"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croácia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçau"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Domínica"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emirados Ãrabes Unidos"
+ },
+ "EC": {
+ "name": "Equador"
+ },
+ "ER": {
+ "name": "Eritreia"
+ },
+ "SK": {
+ "name": "Eslováquia"
+ },
+ "SI": {
+ "name": "Eslovénia"
+ },
+ "ES": {
+ "name": "Espanha"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estónia"
+ },
+ "ET": {
+ "name": "Etiópia"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlândia"
+ },
+ "FR": {
+ "name": "França"
+ },
+ "GA": {
+ "name": "Gabão"
+ },
+ "GM": {
+ "name": "Gâmbia"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GE": {
+ "name": "Geórgia"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grécia"
+ },
+ "GL": {
+ "name": "Gronelândia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guame"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guiana"
+ },
+ "GF": {
+ "name": "Guiana Francesa"
+ },
+ "GN": {
+ "name": "Guiné"
+ },
+ "GQ": {
+ "name": "Guiné Equatorial"
+ },
+ "GW": {
+ "name": "Guiné-Bissau"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong, RAE da China"
+ },
+ "HU": {
+ "name": "Hungria"
+ },
+ "YE": {
+ "name": "Iémen"
+ },
+ "AC": {
+ "name": "Ilha de Ascensão"
+ },
+ "IM": {
+ "name": "Ilha de Man"
+ },
+ "CX": {
+ "name": "Ilha do Natal"
+ },
+ "NF": {
+ "name": "Ilha Norfolk"
+ },
+ "AX": {
+ "name": "Ilhas Ã…land"
+ },
+ "KY": {
+ "name": "Ilhas Caimão"
+ },
+ "IC": {
+ "name": "Ilhas Canárias"
+ },
+ "CC": {
+ "name": "Ilhas Cocos"
+ },
+ "CK": {
+ "name": "Ilhas Cook"
+ },
+ "UM": {
+ "name": "Ilhas Distantes dos EUA"
+ },
+ "FK": {
+ "name": "Ilhas Falkland"
+ },
+ "FO": {
+ "name": "Ilhas Faroé"
+ },
+ "GS": {
+ "name": "Ilhas Geórgia do Sul e Sandwich do Sul"
+ },
+ "MP": {
+ "name": "Ilhas Marianas do Norte"
+ },
+ "MH": {
+ "name": "Ilhas Marshall"
+ },
+ "SB": {
+ "name": "Ilhas Salomão"
+ },
+ "TC": {
+ "name": "Ilhas Turcas e Caicos"
+ },
+ "VG": {
+ "name": "Ilhas Virgens Britânicas"
+ },
+ "VI": {
+ "name": "Ilhas Virgens dos EUA"
+ },
+ "IN": {
+ "name": "Ãndia"
+ },
+ "ID": {
+ "name": "Indonésia"
+ },
+ "IR": {
+ "name": "Irão"
+ },
+ "IQ": {
+ "name": "Iraque"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "IS": {
+ "name": "Islândia"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Itália"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japão"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "JO": {
+ "name": "Jordânia"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letónia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Libéria"
+ },
+ "LY": {
+ "name": "Líbia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituânia"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MO": {
+ "name": "Macau, RAE da China"
+ },
+ "MK": {
+ "name": "Macedónia"
+ },
+ "MG": {
+ "name": "Madagáscar"
+ },
+ "YT": {
+ "name": "Maiote"
+ },
+ "MY": {
+ "name": "Malásia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marrocos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Maurícia"
+ },
+ "MR": {
+ "name": "Mauritânia"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "MM": {
+ "name": "Mianmar (Birmânia)"
+ },
+ "FM": {
+ "name": "Micronésia"
+ },
+ "MZ": {
+ "name": "Moçambique"
+ },
+ "MD": {
+ "name": "Moldávia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongólia"
+ },
+ "MS": {
+ "name": "Monserrate"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "NA": {
+ "name": "Namíbia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicarágua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigéria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nova Caledónia"
+ },
+ "NZ": {
+ "name": "Nova Zelândia"
+ },
+ "OM": {
+ "name": "Omã"
+ },
+ "NL": {
+ "name": "Países Baixos"
+ },
+ "BQ": {
+ "name": "Países Baixos Caribenhos"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papua-Nova Guiné"
+ },
+ "PK": {
+ "name": "Paquistão"
+ },
+ "PY": {
+ "name": "Paraguai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PF": {
+ "name": "Polinésia Francesa"
+ },
+ "PL": {
+ "name": "Polónia"
+ },
+ "PR": {
+ "name": "Porto Rico"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "KE": {
+ "name": "Quénia"
+ },
+ "KG": {
+ "name": "Quirguistão"
+ },
+ "KI": {
+ "name": "Quiribati"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centro-Africana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunião"
+ },
+ "RO": {
+ "name": "Roménia"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RU": {
+ "name": "Rússia"
+ },
+ "EH": {
+ "name": "Saara Ocidental"
+ },
+ "PM": {
+ "name": "Saint Pierre e Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "SH": {
+ "name": "Santa Helena"
+ },
+ "LC": {
+ "name": "Santa Lúcia"
+ },
+ "BL": {
+ "name": "São Bartolomeu"
+ },
+ "KN": {
+ "name": "São Cristóvão e Nevis"
+ },
+ "SM": {
+ "name": "São Marino"
+ },
+ "MF": {
+ "name": "São Martinho"
+ },
+ "ST": {
+ "name": "São Tomé e Príncipe"
+ },
+ "VC": {
+ "name": "São Vicente e Granadinas"
+ },
+ "SC": {
+ "name": "Seicheles"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "SL": {
+ "name": "Serra Leoa"
+ },
+ "RS": {
+ "name": "Sérvia"
+ },
+ "SG": {
+ "name": "Singapura"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Síria"
+ },
+ "SO": {
+ "name": "Somália"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilândia"
+ },
+ "SD": {
+ "name": "Sudão"
+ },
+ "SS": {
+ "name": "Sudão do Sul"
+ },
+ "SE": {
+ "name": "Suécia"
+ },
+ "CH": {
+ "name": "Suíça"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard e Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailândia"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajiquistão"
+ },
+ "TZ": {
+ "name": "Tanzânia"
+ },
+ "IO": {
+ "name": "Território Britânico do Oceano Ãndico"
+ },
+ "PS": {
+ "name": "Território Palestiniano"
+ },
+ "TF": {
+ "name": "Territórios Franceses do Sul"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TK": {
+ "name": "Toquelau"
+ },
+ "TT": {
+ "name": "Trindade e Tobago"
+ },
+ "TA": {
+ "name": "Tristão da Cunha"
+ },
+ "TN": {
+ "name": "Tunísia"
+ },
+ "TM": {
+ "name": "Turquemenistão"
+ },
+ "TR": {
+ "name": "Turquia"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrânia"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguai"
+ },
+ "UZ": {
+ "name": "Uzbequistão"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietname"
+ },
+ "WF": {
+ "name": "Wallis e Futuna"
+ },
+ "ZM": {
+ "name": "Zâmbia"
+ },
+ "ZW": {
+ "name": "Zimbabué"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/pt-PT.json b/library/intl/resources/country/pt-PT.json
new file mode 100644
index 000000000..0b59b2b6f
--- /dev/null
+++ b/library/intl/resources/country/pt-PT.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afeganistão"
+ },
+ "ZA": {
+ "name": "Ãfrica do Sul"
+ },
+ "AL": {
+ "name": "Albânia"
+ },
+ "DE": {
+ "name": "Alemanha"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antígua e Barbuda"
+ },
+ "SA": {
+ "name": "Arábia Saudita"
+ },
+ "DZ": {
+ "name": "Argélia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Arménia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Austrália"
+ },
+ "AT": {
+ "name": "Ãustria"
+ },
+ "AZ": {
+ "name": "Azerbaijão"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Barém"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benim"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrússia"
+ },
+ "BO": {
+ "name": "Bolívia"
+ },
+ "BA": {
+ "name": "Bósnia e Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgária"
+ },
+ "BF": {
+ "name": "Burquina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butão"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "CM": {
+ "name": "Camarões"
+ },
+ "KH": {
+ "name": "Camboja"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "KZ": {
+ "name": "Cazaquistão"
+ },
+ "EA": {
+ "name": "Ceuta e Melilha"
+ },
+ "TD": {
+ "name": "Chade"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Cidade do Vaticano"
+ },
+ "CO": {
+ "name": "Colômbia"
+ },
+ "KM": {
+ "name": "Comores"
+ },
+ "CG": {
+ "name": "Congo-Brazzaville"
+ },
+ "CD": {
+ "name": "Congo-Kinshasa"
+ },
+ "KP": {
+ "name": "Coreia do Norte"
+ },
+ "KR": {
+ "name": "Coreia do Sul"
+ },
+ "CI": {
+ "name": "Costa do Marfim"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croácia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçau"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Domínica"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emirados Ãrabes Unidos"
+ },
+ "EC": {
+ "name": "Equador"
+ },
+ "ER": {
+ "name": "Eritreia"
+ },
+ "SK": {
+ "name": "Eslováquia"
+ },
+ "SI": {
+ "name": "Eslovénia"
+ },
+ "ES": {
+ "name": "Espanha"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estónia"
+ },
+ "ET": {
+ "name": "Etiópia"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlândia"
+ },
+ "FR": {
+ "name": "França"
+ },
+ "GA": {
+ "name": "Gabão"
+ },
+ "GM": {
+ "name": "Gâmbia"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GE": {
+ "name": "Geórgia"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grécia"
+ },
+ "GL": {
+ "name": "Gronelândia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guame"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guiana"
+ },
+ "GF": {
+ "name": "Guiana Francesa"
+ },
+ "GN": {
+ "name": "Guiné"
+ },
+ "GQ": {
+ "name": "Guiné Equatorial"
+ },
+ "GW": {
+ "name": "Guiné-Bissau"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong, RAE da China"
+ },
+ "HU": {
+ "name": "Hungria"
+ },
+ "YE": {
+ "name": "Iémen"
+ },
+ "AC": {
+ "name": "Ilha de Ascensão"
+ },
+ "IM": {
+ "name": "Ilha de Man"
+ },
+ "CX": {
+ "name": "Ilha do Natal"
+ },
+ "NF": {
+ "name": "Ilha Norfolk"
+ },
+ "AX": {
+ "name": "Ilhas Ã…land"
+ },
+ "KY": {
+ "name": "Ilhas Caimão"
+ },
+ "IC": {
+ "name": "Ilhas Canárias"
+ },
+ "CC": {
+ "name": "Ilhas Cocos"
+ },
+ "CK": {
+ "name": "Ilhas Cook"
+ },
+ "UM": {
+ "name": "Ilhas Distantes dos EUA"
+ },
+ "FK": {
+ "name": "Ilhas Falkland"
+ },
+ "FO": {
+ "name": "Ilhas Faroé"
+ },
+ "GS": {
+ "name": "Ilhas Geórgia do Sul e Sandwich do Sul"
+ },
+ "MP": {
+ "name": "Ilhas Marianas do Norte"
+ },
+ "MH": {
+ "name": "Ilhas Marshall"
+ },
+ "SB": {
+ "name": "Ilhas Salomão"
+ },
+ "TC": {
+ "name": "Ilhas Turcas e Caicos"
+ },
+ "VG": {
+ "name": "Ilhas Virgens Britânicas"
+ },
+ "VI": {
+ "name": "Ilhas Virgens dos EUA"
+ },
+ "IN": {
+ "name": "Ãndia"
+ },
+ "ID": {
+ "name": "Indonésia"
+ },
+ "IR": {
+ "name": "Irão"
+ },
+ "IQ": {
+ "name": "Iraque"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "IS": {
+ "name": "Islândia"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Itália"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japão"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "JO": {
+ "name": "Jordânia"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letónia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Libéria"
+ },
+ "LY": {
+ "name": "Líbia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituânia"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MO": {
+ "name": "Macau, RAE da China"
+ },
+ "MK": {
+ "name": "Macedónia"
+ },
+ "MG": {
+ "name": "Madagáscar"
+ },
+ "YT": {
+ "name": "Maiote"
+ },
+ "MY": {
+ "name": "Malásia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marrocos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Maurícia"
+ },
+ "MR": {
+ "name": "Mauritânia"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "MM": {
+ "name": "Mianmar (Birmânia)"
+ },
+ "FM": {
+ "name": "Micronésia"
+ },
+ "MZ": {
+ "name": "Moçambique"
+ },
+ "MD": {
+ "name": "Moldávia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongólia"
+ },
+ "MS": {
+ "name": "Monserrate"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "NA": {
+ "name": "Namíbia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicarágua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigéria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nova Caledónia"
+ },
+ "NZ": {
+ "name": "Nova Zelândia"
+ },
+ "OM": {
+ "name": "Omã"
+ },
+ "NL": {
+ "name": "Países Baixos"
+ },
+ "BQ": {
+ "name": "Países Baixos Caribenhos"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papua-Nova Guiné"
+ },
+ "PK": {
+ "name": "Paquistão"
+ },
+ "PY": {
+ "name": "Paraguai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PF": {
+ "name": "Polinésia Francesa"
+ },
+ "PL": {
+ "name": "Polónia"
+ },
+ "PR": {
+ "name": "Porto Rico"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "KE": {
+ "name": "Quénia"
+ },
+ "KG": {
+ "name": "Quirguistão"
+ },
+ "KI": {
+ "name": "Quiribati"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centro-Africana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunião"
+ },
+ "RO": {
+ "name": "Roménia"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RU": {
+ "name": "Rússia"
+ },
+ "EH": {
+ "name": "Saara Ocidental"
+ },
+ "PM": {
+ "name": "Saint Pierre e Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "SH": {
+ "name": "Santa Helena"
+ },
+ "LC": {
+ "name": "Santa Lúcia"
+ },
+ "BL": {
+ "name": "São Bartolomeu"
+ },
+ "KN": {
+ "name": "São Cristóvão e Nevis"
+ },
+ "SM": {
+ "name": "São Marino"
+ },
+ "MF": {
+ "name": "São Martinho"
+ },
+ "ST": {
+ "name": "São Tomé e Príncipe"
+ },
+ "VC": {
+ "name": "São Vicente e Granadinas"
+ },
+ "SC": {
+ "name": "Seicheles"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "SL": {
+ "name": "Serra Leoa"
+ },
+ "RS": {
+ "name": "Sérvia"
+ },
+ "SG": {
+ "name": "Singapura"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Síria"
+ },
+ "SO": {
+ "name": "Somália"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilândia"
+ },
+ "SD": {
+ "name": "Sudão"
+ },
+ "SS": {
+ "name": "Sudão do Sul"
+ },
+ "SE": {
+ "name": "Suécia"
+ },
+ "CH": {
+ "name": "Suíça"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard e Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailândia"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajiquistão"
+ },
+ "TZ": {
+ "name": "Tanzânia"
+ },
+ "IO": {
+ "name": "Território Britânico do Oceano Ãndico"
+ },
+ "PS": {
+ "name": "Território Palestiniano"
+ },
+ "TF": {
+ "name": "Territórios Franceses do Sul"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TK": {
+ "name": "Toquelau"
+ },
+ "TT": {
+ "name": "Trindade e Tobago"
+ },
+ "TA": {
+ "name": "Tristão da Cunha"
+ },
+ "TN": {
+ "name": "Tunísia"
+ },
+ "TM": {
+ "name": "Turquemenistão"
+ },
+ "TR": {
+ "name": "Turquia"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrânia"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguai"
+ },
+ "UZ": {
+ "name": "Uzbequistão"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietname"
+ },
+ "WF": {
+ "name": "Wallis e Futuna"
+ },
+ "ZM": {
+ "name": "Zâmbia"
+ },
+ "ZW": {
+ "name": "Zimbabué"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/pt-ST.json b/library/intl/resources/country/pt-ST.json
new file mode 100644
index 000000000..0b59b2b6f
--- /dev/null
+++ b/library/intl/resources/country/pt-ST.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afeganistão"
+ },
+ "ZA": {
+ "name": "Ãfrica do Sul"
+ },
+ "AL": {
+ "name": "Albânia"
+ },
+ "DE": {
+ "name": "Alemanha"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antígua e Barbuda"
+ },
+ "SA": {
+ "name": "Arábia Saudita"
+ },
+ "DZ": {
+ "name": "Argélia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Arménia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Austrália"
+ },
+ "AT": {
+ "name": "Ãustria"
+ },
+ "AZ": {
+ "name": "Azerbaijão"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Barém"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benim"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrússia"
+ },
+ "BO": {
+ "name": "Bolívia"
+ },
+ "BA": {
+ "name": "Bósnia e Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgária"
+ },
+ "BF": {
+ "name": "Burquina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butão"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "CM": {
+ "name": "Camarões"
+ },
+ "KH": {
+ "name": "Camboja"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "KZ": {
+ "name": "Cazaquistão"
+ },
+ "EA": {
+ "name": "Ceuta e Melilha"
+ },
+ "TD": {
+ "name": "Chade"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Cidade do Vaticano"
+ },
+ "CO": {
+ "name": "Colômbia"
+ },
+ "KM": {
+ "name": "Comores"
+ },
+ "CG": {
+ "name": "Congo-Brazzaville"
+ },
+ "CD": {
+ "name": "Congo-Kinshasa"
+ },
+ "KP": {
+ "name": "Coreia do Norte"
+ },
+ "KR": {
+ "name": "Coreia do Sul"
+ },
+ "CI": {
+ "name": "Costa do Marfim"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croácia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçau"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Domínica"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emirados Ãrabes Unidos"
+ },
+ "EC": {
+ "name": "Equador"
+ },
+ "ER": {
+ "name": "Eritreia"
+ },
+ "SK": {
+ "name": "Eslováquia"
+ },
+ "SI": {
+ "name": "Eslovénia"
+ },
+ "ES": {
+ "name": "Espanha"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estónia"
+ },
+ "ET": {
+ "name": "Etiópia"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlândia"
+ },
+ "FR": {
+ "name": "França"
+ },
+ "GA": {
+ "name": "Gabão"
+ },
+ "GM": {
+ "name": "Gâmbia"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GE": {
+ "name": "Geórgia"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grécia"
+ },
+ "GL": {
+ "name": "Gronelândia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guame"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guiana"
+ },
+ "GF": {
+ "name": "Guiana Francesa"
+ },
+ "GN": {
+ "name": "Guiné"
+ },
+ "GQ": {
+ "name": "Guiné Equatorial"
+ },
+ "GW": {
+ "name": "Guiné-Bissau"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong, RAE da China"
+ },
+ "HU": {
+ "name": "Hungria"
+ },
+ "YE": {
+ "name": "Iémen"
+ },
+ "AC": {
+ "name": "Ilha de Ascensão"
+ },
+ "IM": {
+ "name": "Ilha de Man"
+ },
+ "CX": {
+ "name": "Ilha do Natal"
+ },
+ "NF": {
+ "name": "Ilha Norfolk"
+ },
+ "AX": {
+ "name": "Ilhas Ã…land"
+ },
+ "KY": {
+ "name": "Ilhas Caimão"
+ },
+ "IC": {
+ "name": "Ilhas Canárias"
+ },
+ "CC": {
+ "name": "Ilhas Cocos"
+ },
+ "CK": {
+ "name": "Ilhas Cook"
+ },
+ "UM": {
+ "name": "Ilhas Distantes dos EUA"
+ },
+ "FK": {
+ "name": "Ilhas Falkland"
+ },
+ "FO": {
+ "name": "Ilhas Faroé"
+ },
+ "GS": {
+ "name": "Ilhas Geórgia do Sul e Sandwich do Sul"
+ },
+ "MP": {
+ "name": "Ilhas Marianas do Norte"
+ },
+ "MH": {
+ "name": "Ilhas Marshall"
+ },
+ "SB": {
+ "name": "Ilhas Salomão"
+ },
+ "TC": {
+ "name": "Ilhas Turcas e Caicos"
+ },
+ "VG": {
+ "name": "Ilhas Virgens Britânicas"
+ },
+ "VI": {
+ "name": "Ilhas Virgens dos EUA"
+ },
+ "IN": {
+ "name": "Ãndia"
+ },
+ "ID": {
+ "name": "Indonésia"
+ },
+ "IR": {
+ "name": "Irão"
+ },
+ "IQ": {
+ "name": "Iraque"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "IS": {
+ "name": "Islândia"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Itália"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japão"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "JO": {
+ "name": "Jordânia"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letónia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Libéria"
+ },
+ "LY": {
+ "name": "Líbia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituânia"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MO": {
+ "name": "Macau, RAE da China"
+ },
+ "MK": {
+ "name": "Macedónia"
+ },
+ "MG": {
+ "name": "Madagáscar"
+ },
+ "YT": {
+ "name": "Maiote"
+ },
+ "MY": {
+ "name": "Malásia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marrocos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Maurícia"
+ },
+ "MR": {
+ "name": "Mauritânia"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "MM": {
+ "name": "Mianmar (Birmânia)"
+ },
+ "FM": {
+ "name": "Micronésia"
+ },
+ "MZ": {
+ "name": "Moçambique"
+ },
+ "MD": {
+ "name": "Moldávia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongólia"
+ },
+ "MS": {
+ "name": "Monserrate"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "NA": {
+ "name": "Namíbia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicarágua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigéria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nova Caledónia"
+ },
+ "NZ": {
+ "name": "Nova Zelândia"
+ },
+ "OM": {
+ "name": "Omã"
+ },
+ "NL": {
+ "name": "Países Baixos"
+ },
+ "BQ": {
+ "name": "Países Baixos Caribenhos"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papua-Nova Guiné"
+ },
+ "PK": {
+ "name": "Paquistão"
+ },
+ "PY": {
+ "name": "Paraguai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PF": {
+ "name": "Polinésia Francesa"
+ },
+ "PL": {
+ "name": "Polónia"
+ },
+ "PR": {
+ "name": "Porto Rico"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "KE": {
+ "name": "Quénia"
+ },
+ "KG": {
+ "name": "Quirguistão"
+ },
+ "KI": {
+ "name": "Quiribati"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centro-Africana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunião"
+ },
+ "RO": {
+ "name": "Roménia"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RU": {
+ "name": "Rússia"
+ },
+ "EH": {
+ "name": "Saara Ocidental"
+ },
+ "PM": {
+ "name": "Saint Pierre e Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "SH": {
+ "name": "Santa Helena"
+ },
+ "LC": {
+ "name": "Santa Lúcia"
+ },
+ "BL": {
+ "name": "São Bartolomeu"
+ },
+ "KN": {
+ "name": "São Cristóvão e Nevis"
+ },
+ "SM": {
+ "name": "São Marino"
+ },
+ "MF": {
+ "name": "São Martinho"
+ },
+ "ST": {
+ "name": "São Tomé e Príncipe"
+ },
+ "VC": {
+ "name": "São Vicente e Granadinas"
+ },
+ "SC": {
+ "name": "Seicheles"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "SL": {
+ "name": "Serra Leoa"
+ },
+ "RS": {
+ "name": "Sérvia"
+ },
+ "SG": {
+ "name": "Singapura"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Síria"
+ },
+ "SO": {
+ "name": "Somália"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilândia"
+ },
+ "SD": {
+ "name": "Sudão"
+ },
+ "SS": {
+ "name": "Sudão do Sul"
+ },
+ "SE": {
+ "name": "Suécia"
+ },
+ "CH": {
+ "name": "Suíça"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard e Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailândia"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajiquistão"
+ },
+ "TZ": {
+ "name": "Tanzânia"
+ },
+ "IO": {
+ "name": "Território Britânico do Oceano Ãndico"
+ },
+ "PS": {
+ "name": "Território Palestiniano"
+ },
+ "TF": {
+ "name": "Territórios Franceses do Sul"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TK": {
+ "name": "Toquelau"
+ },
+ "TT": {
+ "name": "Trindade e Tobago"
+ },
+ "TA": {
+ "name": "Tristão da Cunha"
+ },
+ "TN": {
+ "name": "Tunísia"
+ },
+ "TM": {
+ "name": "Turquemenistão"
+ },
+ "TR": {
+ "name": "Turquia"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrânia"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguai"
+ },
+ "UZ": {
+ "name": "Uzbequistão"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietname"
+ },
+ "WF": {
+ "name": "Wallis e Futuna"
+ },
+ "ZM": {
+ "name": "Zâmbia"
+ },
+ "ZW": {
+ "name": "Zimbabué"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/pt-TL.json b/library/intl/resources/country/pt-TL.json
new file mode 100644
index 000000000..0b59b2b6f
--- /dev/null
+++ b/library/intl/resources/country/pt-TL.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afeganistão"
+ },
+ "ZA": {
+ "name": "Ãfrica do Sul"
+ },
+ "AL": {
+ "name": "Albânia"
+ },
+ "DE": {
+ "name": "Alemanha"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antígua e Barbuda"
+ },
+ "SA": {
+ "name": "Arábia Saudita"
+ },
+ "DZ": {
+ "name": "Argélia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Arménia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Austrália"
+ },
+ "AT": {
+ "name": "Ãustria"
+ },
+ "AZ": {
+ "name": "Azerbaijão"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BH": {
+ "name": "Barém"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benim"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrússia"
+ },
+ "BO": {
+ "name": "Bolívia"
+ },
+ "BA": {
+ "name": "Bósnia e Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgária"
+ },
+ "BF": {
+ "name": "Burquina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butão"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "CM": {
+ "name": "Camarões"
+ },
+ "KH": {
+ "name": "Camboja"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "KZ": {
+ "name": "Cazaquistão"
+ },
+ "EA": {
+ "name": "Ceuta e Melilha"
+ },
+ "TD": {
+ "name": "Chade"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Cidade do Vaticano"
+ },
+ "CO": {
+ "name": "Colômbia"
+ },
+ "KM": {
+ "name": "Comores"
+ },
+ "CG": {
+ "name": "Congo-Brazzaville"
+ },
+ "CD": {
+ "name": "Congo-Kinshasa"
+ },
+ "KP": {
+ "name": "Coreia do Norte"
+ },
+ "KR": {
+ "name": "Coreia do Sul"
+ },
+ "CI": {
+ "name": "Costa do Marfim"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croácia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçau"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DM": {
+ "name": "Domínica"
+ },
+ "EG": {
+ "name": "Egipto"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emirados Ãrabes Unidos"
+ },
+ "EC": {
+ "name": "Equador"
+ },
+ "ER": {
+ "name": "Eritreia"
+ },
+ "SK": {
+ "name": "Eslováquia"
+ },
+ "SI": {
+ "name": "Eslovénia"
+ },
+ "ES": {
+ "name": "Espanha"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estónia"
+ },
+ "ET": {
+ "name": "Etiópia"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlândia"
+ },
+ "FR": {
+ "name": "França"
+ },
+ "GA": {
+ "name": "Gabão"
+ },
+ "GM": {
+ "name": "Gâmbia"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GE": {
+ "name": "Geórgia"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grécia"
+ },
+ "GL": {
+ "name": "Gronelândia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guame"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guiana"
+ },
+ "GF": {
+ "name": "Guiana Francesa"
+ },
+ "GN": {
+ "name": "Guiné"
+ },
+ "GQ": {
+ "name": "Guiné Equatorial"
+ },
+ "GW": {
+ "name": "Guiné-Bissau"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong, RAE da China"
+ },
+ "HU": {
+ "name": "Hungria"
+ },
+ "YE": {
+ "name": "Iémen"
+ },
+ "AC": {
+ "name": "Ilha de Ascensão"
+ },
+ "IM": {
+ "name": "Ilha de Man"
+ },
+ "CX": {
+ "name": "Ilha do Natal"
+ },
+ "NF": {
+ "name": "Ilha Norfolk"
+ },
+ "AX": {
+ "name": "Ilhas Ã…land"
+ },
+ "KY": {
+ "name": "Ilhas Caimão"
+ },
+ "IC": {
+ "name": "Ilhas Canárias"
+ },
+ "CC": {
+ "name": "Ilhas Cocos"
+ },
+ "CK": {
+ "name": "Ilhas Cook"
+ },
+ "UM": {
+ "name": "Ilhas Distantes dos EUA"
+ },
+ "FK": {
+ "name": "Ilhas Falkland"
+ },
+ "FO": {
+ "name": "Ilhas Faroé"
+ },
+ "GS": {
+ "name": "Ilhas Geórgia do Sul e Sandwich do Sul"
+ },
+ "MP": {
+ "name": "Ilhas Marianas do Norte"
+ },
+ "MH": {
+ "name": "Ilhas Marshall"
+ },
+ "SB": {
+ "name": "Ilhas Salomão"
+ },
+ "TC": {
+ "name": "Ilhas Turcas e Caicos"
+ },
+ "VG": {
+ "name": "Ilhas Virgens Britânicas"
+ },
+ "VI": {
+ "name": "Ilhas Virgens dos EUA"
+ },
+ "IN": {
+ "name": "Ãndia"
+ },
+ "ID": {
+ "name": "Indonésia"
+ },
+ "IR": {
+ "name": "Irão"
+ },
+ "IQ": {
+ "name": "Iraque"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "IS": {
+ "name": "Islândia"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Itália"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japão"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "JO": {
+ "name": "Jordânia"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letónia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Libéria"
+ },
+ "LY": {
+ "name": "Líbia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituânia"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MO": {
+ "name": "Macau, RAE da China"
+ },
+ "MK": {
+ "name": "Macedónia"
+ },
+ "MG": {
+ "name": "Madagáscar"
+ },
+ "YT": {
+ "name": "Maiote"
+ },
+ "MY": {
+ "name": "Malásia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marrocos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Maurícia"
+ },
+ "MR": {
+ "name": "Mauritânia"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "MM": {
+ "name": "Mianmar (Birmânia)"
+ },
+ "FM": {
+ "name": "Micronésia"
+ },
+ "MZ": {
+ "name": "Moçambique"
+ },
+ "MD": {
+ "name": "Moldávia"
+ },
+ "MC": {
+ "name": "Mónaco"
+ },
+ "MN": {
+ "name": "Mongólia"
+ },
+ "MS": {
+ "name": "Monserrate"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "NA": {
+ "name": "Namíbia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicarágua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigéria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nova Caledónia"
+ },
+ "NZ": {
+ "name": "Nova Zelândia"
+ },
+ "OM": {
+ "name": "Omã"
+ },
+ "NL": {
+ "name": "Países Baixos"
+ },
+ "BQ": {
+ "name": "Países Baixos Caribenhos"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papua-Nova Guiné"
+ },
+ "PK": {
+ "name": "Paquistão"
+ },
+ "PY": {
+ "name": "Paraguai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PF": {
+ "name": "Polinésia Francesa"
+ },
+ "PL": {
+ "name": "Polónia"
+ },
+ "PR": {
+ "name": "Porto Rico"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "KE": {
+ "name": "Quénia"
+ },
+ "KG": {
+ "name": "Quirguistão"
+ },
+ "KI": {
+ "name": "Quiribati"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centro-Africana"
+ },
+ "CZ": {
+ "name": "República Checa"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "RE": {
+ "name": "Reunião"
+ },
+ "RO": {
+ "name": "Roménia"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RU": {
+ "name": "Rússia"
+ },
+ "EH": {
+ "name": "Saara Ocidental"
+ },
+ "PM": {
+ "name": "Saint Pierre e Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "SH": {
+ "name": "Santa Helena"
+ },
+ "LC": {
+ "name": "Santa Lúcia"
+ },
+ "BL": {
+ "name": "São Bartolomeu"
+ },
+ "KN": {
+ "name": "São Cristóvão e Nevis"
+ },
+ "SM": {
+ "name": "São Marino"
+ },
+ "MF": {
+ "name": "São Martinho"
+ },
+ "ST": {
+ "name": "São Tomé e Príncipe"
+ },
+ "VC": {
+ "name": "São Vicente e Granadinas"
+ },
+ "SC": {
+ "name": "Seicheles"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "SL": {
+ "name": "Serra Leoa"
+ },
+ "RS": {
+ "name": "Sérvia"
+ },
+ "SG": {
+ "name": "Singapura"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Síria"
+ },
+ "SO": {
+ "name": "Somália"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilândia"
+ },
+ "SD": {
+ "name": "Sudão"
+ },
+ "SS": {
+ "name": "Sudão do Sul"
+ },
+ "SE": {
+ "name": "Suécia"
+ },
+ "CH": {
+ "name": "Suíça"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard e Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailândia"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajiquistão"
+ },
+ "TZ": {
+ "name": "Tanzânia"
+ },
+ "IO": {
+ "name": "Território Britânico do Oceano Ãndico"
+ },
+ "PS": {
+ "name": "Território Palestiniano"
+ },
+ "TF": {
+ "name": "Territórios Franceses do Sul"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TK": {
+ "name": "Toquelau"
+ },
+ "TT": {
+ "name": "Trindade e Tobago"
+ },
+ "TA": {
+ "name": "Tristão da Cunha"
+ },
+ "TN": {
+ "name": "Tunísia"
+ },
+ "TM": {
+ "name": "Turquemenistão"
+ },
+ "TR": {
+ "name": "Turquia"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrânia"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguai"
+ },
+ "UZ": {
+ "name": "Uzbequistão"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietname"
+ },
+ "WF": {
+ "name": "Wallis e Futuna"
+ },
+ "ZM": {
+ "name": "Zâmbia"
+ },
+ "ZW": {
+ "name": "Zimbabué"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/pt.json b/library/intl/resources/country/pt.json
new file mode 100644
index 000000000..12a4d3d65
--- /dev/null
+++ b/library/intl/resources/country/pt.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afeganistão"
+ },
+ "ZA": {
+ "name": "Ãfrica do Sul"
+ },
+ "AL": {
+ "name": "Albânia"
+ },
+ "DE": {
+ "name": "Alemanha"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antártida"
+ },
+ "AG": {
+ "name": "Antígua e Barbuda"
+ },
+ "SA": {
+ "name": "Arábia Saudita"
+ },
+ "DZ": {
+ "name": "Argélia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armênia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Austrália"
+ },
+ "AT": {
+ "name": "Ãustria"
+ },
+ "AZ": {
+ "name": "Azerbaijão"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrein"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BY": {
+ "name": "Bielorrússia"
+ },
+ "BO": {
+ "name": "Bolívia"
+ },
+ "BA": {
+ "name": "Bósnia e Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgária"
+ },
+ "BF": {
+ "name": "Burquina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butão"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboja"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "KZ": {
+ "name": "Cazaquistão"
+ },
+ "EA": {
+ "name": "Ceuta e Melilha"
+ },
+ "TD": {
+ "name": "Chade"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "VA": {
+ "name": "Cidade do Vaticano"
+ },
+ "SG": {
+ "name": "Cingapura"
+ },
+ "CO": {
+ "name": "Colômbia"
+ },
+ "KM": {
+ "name": "Comores"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "KP": {
+ "name": "Coreia do Norte"
+ },
+ "KR": {
+ "name": "Coreia do Sul"
+ },
+ "CI": {
+ "name": "Costa do Marfim"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croácia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DJ": {
+ "name": "Djibuti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EG": {
+ "name": "Egito"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emirados Ãrabes Unidos"
+ },
+ "EC": {
+ "name": "Equador"
+ },
+ "ER": {
+ "name": "Eritreia"
+ },
+ "SK": {
+ "name": "Eslováquia"
+ },
+ "SI": {
+ "name": "Eslovênia"
+ },
+ "ES": {
+ "name": "Espanha"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estônia"
+ },
+ "ET": {
+ "name": "Etiópia"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlândia"
+ },
+ "FR": {
+ "name": "França"
+ },
+ "GA": {
+ "name": "Gabão"
+ },
+ "GM": {
+ "name": "Gâmbia"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GE": {
+ "name": "Geórgia"
+ },
+ "GS": {
+ "name": "Geórgia do Sul e Ilhas Sandwich do Sul"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grécia"
+ },
+ "GL": {
+ "name": "Groenlândia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guiana"
+ },
+ "GF": {
+ "name": "Guiana Francesa"
+ },
+ "GN": {
+ "name": "Guiné"
+ },
+ "GW": {
+ "name": "Guiné Bissau"
+ },
+ "GQ": {
+ "name": "Guiné Equatorial"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "NL": {
+ "name": "Holanda"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong, RAE da China"
+ },
+ "HU": {
+ "name": "Hungria"
+ },
+ "YE": {
+ "name": "Iêmen"
+ },
+ "CX": {
+ "name": "Ilha Christmas"
+ },
+ "AC": {
+ "name": "Ilha de Ascensão"
+ },
+ "IM": {
+ "name": "Ilha de Man"
+ },
+ "NF": {
+ "name": "Ilha Norfolk"
+ },
+ "AX": {
+ "name": "Ilhas Ã…land"
+ },
+ "KY": {
+ "name": "Ilhas Caiman"
+ },
+ "IC": {
+ "name": "Ilhas Canárias"
+ },
+ "CC": {
+ "name": "Ilhas Cocos (Keeling)"
+ },
+ "CK": {
+ "name": "Ilhas Cook"
+ },
+ "UM": {
+ "name": "Ilhas Distantes dos EUA"
+ },
+ "FO": {
+ "name": "Ilhas Faroe"
+ },
+ "FK": {
+ "name": "Ilhas Malvinas"
+ },
+ "MP": {
+ "name": "Ilhas Marianas do Norte"
+ },
+ "MH": {
+ "name": "Ilhas Marshall"
+ },
+ "PN": {
+ "name": "Ilhas Pitcairn"
+ },
+ "SB": {
+ "name": "Ilhas Salomão"
+ },
+ "TC": {
+ "name": "Ilhas Turks e Caicos"
+ },
+ "VG": {
+ "name": "Ilhas Virgens Britânicas"
+ },
+ "VI": {
+ "name": "Ilhas Virgens dos EUA"
+ },
+ "IN": {
+ "name": "Ãndia"
+ },
+ "ID": {
+ "name": "Indonésia"
+ },
+ "IR": {
+ "name": "Irã"
+ },
+ "IQ": {
+ "name": "Iraque"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "IS": {
+ "name": "Islândia"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Itália"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japão"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordânia"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letônia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Libéria"
+ },
+ "LY": {
+ "name": "Líbia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituânia"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MO": {
+ "name": "Macau, RAE da China"
+ },
+ "MK": {
+ "name": "Macedônia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malásia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marrocos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Maurício"
+ },
+ "MR": {
+ "name": "Mauritânia"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "MM": {
+ "name": "Mianmar (Birmânia)"
+ },
+ "FM": {
+ "name": "Micronésia"
+ },
+ "MZ": {
+ "name": "Moçambique"
+ },
+ "MD": {
+ "name": "Moldávia"
+ },
+ "MC": {
+ "name": "Mônaco"
+ },
+ "MN": {
+ "name": "Mongólia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "NA": {
+ "name": "Namíbia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicarágua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigéria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nova Caledônia"
+ },
+ "NZ": {
+ "name": "Nova Zelândia"
+ },
+ "OM": {
+ "name": "Omã"
+ },
+ "BQ": {
+ "name": "Países Baixos Caribenhos"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papua-Nova Guiné"
+ },
+ "PK": {
+ "name": "Paquistão"
+ },
+ "PY": {
+ "name": "Paraguai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PF": {
+ "name": "Polinésia Francesa"
+ },
+ "PL": {
+ "name": "Polônia"
+ },
+ "PR": {
+ "name": "Porto Rico"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "KE": {
+ "name": "Quênia"
+ },
+ "KG": {
+ "name": "Quirguistão"
+ },
+ "KI": {
+ "name": "Quiribati"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centro-Africana"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "CM": {
+ "name": "República dos Camarões"
+ },
+ "CZ": {
+ "name": "República Tcheca"
+ },
+ "RE": {
+ "name": "Reunião"
+ },
+ "RO": {
+ "name": "Romênia"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RU": {
+ "name": "Rússia"
+ },
+ "EH": {
+ "name": "Saara Ocidental"
+ },
+ "PM": {
+ "name": "Saint Pierre e Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "SH": {
+ "name": "Santa Helena"
+ },
+ "LC": {
+ "name": "Santa Lúcia"
+ },
+ "BL": {
+ "name": "São Bartolomeu"
+ },
+ "KN": {
+ "name": "São Cristóvão e Nevis"
+ },
+ "MF": {
+ "name": "São Martinho"
+ },
+ "ST": {
+ "name": "São Tomé e Príncipe"
+ },
+ "VC": {
+ "name": "São Vicente e Granadinas"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "SL": {
+ "name": "Serra Leoa"
+ },
+ "RS": {
+ "name": "Sérvia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Síria"
+ },
+ "SO": {
+ "name": "Somália"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SZ": {
+ "name": "Suazilândia"
+ },
+ "SD": {
+ "name": "Sudão"
+ },
+ "SS": {
+ "name": "Sudão do Sul"
+ },
+ "SE": {
+ "name": "Suécia"
+ },
+ "CH": {
+ "name": "Suíça"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard e Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailândia"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajiquistão"
+ },
+ "TZ": {
+ "name": "Tanzânia"
+ },
+ "IO": {
+ "name": "Território Britânico do Oceano Ãndico"
+ },
+ "TF": {
+ "name": "Territórios Franceses do Sul"
+ },
+ "PS": {
+ "name": "Territórios palestinos"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad e Tobago"
+ },
+ "TA": {
+ "name": "Tristão da Cunha"
+ },
+ "TN": {
+ "name": "Tunísia"
+ },
+ "TM": {
+ "name": "Turcomenistão"
+ },
+ "TR": {
+ "name": "Turquia"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucrânia"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguai"
+ },
+ "UZ": {
+ "name": "Uzbequistão"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnã"
+ },
+ "WF": {
+ "name": "Wallis e Futuna"
+ },
+ "ZM": {
+ "name": "Zâmbia"
+ },
+ "ZW": {
+ "name": "Zimbábue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/rm.json b/library/intl/resources/country/rm.json
new file mode 100644
index 000000000..e6ffadbe8
--- /dev/null
+++ b/library/intl/resources/country/rm.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "ZA": {
+ "name": "Africa dal Sid"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua e Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudita"
+ },
+ "AR": {
+ "name": "Argentinia"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AZ": {
+ "name": "Aserbaidschan"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesch"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgia"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BY": {
+ "name": "Bielorussia"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia ed Erzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasila"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodscha"
+ },
+ "CM": {
+ "name": "Camerun"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cap Verd"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Cipra"
+ },
+ "VA": {
+ "name": "Citad dal Vatican"
+ },
+ "CO": {
+ "name": "Columbia"
+ },
+ "KM": {
+ "name": "Comoras"
+ },
+ "CG": {
+ "name": "Congo"
+ },
+ "KP": {
+ "name": "Corea dal Nord"
+ },
+ "KR": {
+ "name": "Corea dal Sid"
+ },
+ "CI": {
+ "name": "Costa d’Ivur"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croazia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danemarc"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DJ": {
+ "name": "Dschibuti"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipta"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emirats Arabs Unids"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopia"
+ },
+ "FJ": {
+ "name": "Fidschi"
+ },
+ "PH": {
+ "name": "Filippinas"
+ },
+ "FI": {
+ "name": "Finlanda"
+ },
+ "FR": {
+ "name": "Frantscha"
+ },
+ "GA": {
+ "name": "Gabun"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GS": {
+ "name": "Georgia dal Sid e las Inslas Sandwich dal Sid"
+ },
+ "DE": {
+ "name": "Germania"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "JM": {
+ "name": "Giamaica"
+ },
+ "JP": {
+ "name": "Giapun"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GR": {
+ "name": "Grezia"
+ },
+ "GL": {
+ "name": "Grönlanda"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Equatoriala"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GF": {
+ "name": "Guyana Franzosa"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "CX": {
+ "name": "Insla da Christmas"
+ },
+ "IM": {
+ "name": "Insla da Man"
+ },
+ "NF": {
+ "name": "Insla Norfolk"
+ },
+ "AX": {
+ "name": "Inslas Aland"
+ },
+ "KY": {
+ "name": "Inslas Cayman"
+ },
+ "CC": {
+ "name": "Inslas Cocos"
+ },
+ "CK": {
+ "name": "Inslas Cook"
+ },
+ "MH": {
+ "name": "Inslas da Marshall"
+ },
+ "FK": {
+ "name": "Inslas dal Falkland"
+ },
+ "FO": {
+ "name": "Inslas Feroe"
+ },
+ "MP": {
+ "name": "Inslas Mariannas dal Nord"
+ },
+ "UM": {
+ "name": "Inslas pitschnas perifericas dals Stadis Unids da l’America"
+ },
+ "TC": {
+ "name": "Inslas Turks e Caicos"
+ },
+ "VI": {
+ "name": "Inslas Verginas Americanas"
+ },
+ "VG": {
+ "name": "Inslas Verginas Britannicas"
+ },
+ "IQ": {
+ "name": "Irac"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "IS": {
+ "name": "Islanda"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordania"
+ },
+ "KZ": {
+ "name": "Kasachstan"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "KG": {
+ "name": "Kirghisistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Lettonia"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburg"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malaisia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Maroc"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauretania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldavia"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mosambic"
+ },
+ "MM": {
+ "name": "Myanmar"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norvegia"
+ },
+ "NC": {
+ "name": "Nova Caledonia"
+ },
+ "NZ": {
+ "name": "Nova Zelanda"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "NL": {
+ "name": "Pajais Bass"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Nova Guinea"
+ },
+ "PY": {
+ "name": "Paraguai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PF": {
+ "name": "Polinesia Franzosa"
+ },
+ "PL": {
+ "name": "Pologna"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "GB": {
+ "name": "Reginavel Unì"
+ },
+ "HK": {
+ "name": "Regiun d’administraziun speziala da Hongkong, China"
+ },
+ "MO": {
+ "name": "Regiun d’administraziun speziala Macao, China"
+ },
+ "CF": {
+ "name": "Republica Centralafricana"
+ },
+ "CD": {
+ "name": "Republica Democratica dal Congo"
+ },
+ "DO": {
+ "name": "Republica Dominicana"
+ },
+ "CZ": {
+ "name": "Republica Tscheca"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumenia"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "EH": {
+ "name": "Sahara Occidentala"
+ },
+ "KN": {
+ "name": "Saint Kitts e Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre e Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vincent e las Grenadinas"
+ },
+ "SB": {
+ "name": "Salomonas"
+ },
+ "ZM": {
+ "name": "Sambia"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé e Principe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychellas"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "ZW": {
+ "name": "Simbabwe"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SK": {
+ "name": "Slovachia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "BL": {
+ "name": "Son Barthélemy"
+ },
+ "SH": {
+ "name": "Sontg’Elena"
+ },
+ "ES": {
+ "name": "Spagna"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "US": {
+ "name": "Stadis Unids da l’America"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SS": {
+ "name": "Sudan dal Sid"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard e Jan Mayen"
+ },
+ "SE": {
+ "name": "Svezia"
+ },
+ "CH": {
+ "name": "Svizra"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "TJ": {
+ "name": "Tadschikistan"
+ },
+ "TH": {
+ "name": "Tailanda"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tansania"
+ },
+ "IO": {
+ "name": "Territori Britannic en l’Ocean Indic"
+ },
+ "PS": {
+ "name": "Territori Palestinais"
+ },
+ "TF": {
+ "name": "Territoris Franzos Meridiunals"
+ },
+ "TL": {
+ "name": "Timor da l’Ost"
+ },
+ "TR": {
+ "name": "Tirchia"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad e Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TD": {
+ "name": "Tschad"
+ },
+ "TN": {
+ "name": "Tunesia"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UA": {
+ "name": "Ucraina"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "HU": {
+ "name": "Ungaria"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Usbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis e Futuna"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/rn.json b/library/intl/resources/country/rn.json
new file mode 100644
index 000000000..cab94b8ef
--- /dev/null
+++ b/library/intl/resources/country/rn.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afuganisitani"
+ },
+ "ZA": {
+ "name": "Afurika y’Epfo"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "DZ": {
+ "name": "Alijeriya"
+ },
+ "AL": {
+ "name": "Alubaniya"
+ },
+ "VI": {
+ "name": "Amazinga y’Isugi y’Abanyamerika"
+ },
+ "PH": {
+ "name": "Amazinga ya Filipine"
+ },
+ "MP": {
+ "name": "Amazinga ya Mariyana ryo mu majaruguru"
+ },
+ "RE": {
+ "name": "Amazinga ya Reyiniyo"
+ },
+ "SB": {
+ "name": "Amazinga ya Salumoni"
+ },
+ "SC": {
+ "name": "Amazinga ya Seyisheli"
+ },
+ "TC": {
+ "name": "Amazinga ya Turkisi na Cayikosi"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Angwila"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigwa na Baribuda"
+ },
+ "SA": {
+ "name": "Arabiya Sawudite"
+ },
+ "AR": {
+ "name": "Arijantine"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AM": {
+ "name": "Arumeniya"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "IS": {
+ "name": "Ayisilandi"
+ },
+ "AZ": {
+ "name": "Azerubayijani"
+ },
+ "BS": {
+ "name": "Bahamasi"
+ },
+ "BH": {
+ "name": "Bahareyini"
+ },
+ "BD": {
+ "name": "Bangaladeshi"
+ },
+ "BB": {
+ "name": "Barubadosi"
+ },
+ "BY": {
+ "name": "Belausi"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Bene"
+ },
+ "BM": {
+ "name": "Berimuda"
+ },
+ "MM": {
+ "name": "Birimaniya"
+ },
+ "BO": {
+ "name": "Boliviya"
+ },
+ "BA": {
+ "name": "Bosiniya na Herigozevine"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BG": {
+ "name": "Buligariya"
+ },
+ "BR": {
+ "name": "Burezili"
+ },
+ "BF": {
+ "name": "Burukina Faso"
+ },
+ "BN": {
+ "name": "Buruneyi"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "TD": {
+ "name": "Cadi"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danimariki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekwateri"
+ },
+ "SV": {
+ "name": "Eli Saluvatori"
+ },
+ "ER": {
+ "name": "Elitereya"
+ },
+ "EE": {
+ "name": "Esitoniya"
+ },
+ "ET": {
+ "name": "Etiyopiya"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finilandi"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabo"
+ },
+ "GM": {
+ "name": "Gambiya"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GD": {
+ "name": "Gerenada"
+ },
+ "GW": {
+ "name": "Gineya Bisawu"
+ },
+ "GQ": {
+ "name": "Gineya Ekwatoriyali"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guneya"
+ },
+ "GL": {
+ "name": "Gurunilandi"
+ },
+ "GY": {
+ "name": "Guyane"
+ },
+ "GP": {
+ "name": "Gwadelupe"
+ },
+ "GU": {
+ "name": "Gwamu"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GF": {
+ "name": "Gwayana y’Abafaransa"
+ },
+ "HT": {
+ "name": "Hayiti"
+ },
+ "ES": {
+ "name": "Hisipaniya"
+ },
+ "HN": {
+ "name": "Hondurasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungariya"
+ },
+ "VG": {
+ "name": "Ibirwa by’isugi by’Abongereza"
+ },
+ "CV": {
+ "name": "Ibirwa bya Kapuveri"
+ },
+ "KY": {
+ "name": "Ibirwa bya Keyimani"
+ },
+ "UA": {
+ "name": "Ikerene"
+ },
+ "ID": {
+ "name": "Indoneziya"
+ },
+ "IO": {
+ "name": "Intara y’Ubwongereza yo mu birwa by’Abahindi"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "IR": {
+ "name": "Irani"
+ },
+ "UY": {
+ "name": "Irigwe"
+ },
+ "IE": {
+ "name": "Irilandi"
+ },
+ "IL": {
+ "name": "Isiraheli"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "FK": {
+ "name": "Izinga rya Filikilandi"
+ },
+ "KM": {
+ "name": "Izinga rya Komore"
+ },
+ "CK": {
+ "name": "Izinga rya Kuku"
+ },
+ "MH": {
+ "name": "Izinga rya Marishari"
+ },
+ "MU": {
+ "name": "Izinga rya Morise"
+ },
+ "NF": {
+ "name": "izinga rya Norufoluke"
+ },
+ "CY": {
+ "name": "Izinga rya Shipure"
+ },
+ "JM": {
+ "name": "Jamayika"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GE": {
+ "name": "Jeworujiya"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "GI": {
+ "name": "Juburalitari"
+ },
+ "KH": {
+ "name": "Kamboje"
+ },
+ "CM": {
+ "name": "Kameruni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katari"
+ },
+ "KZ": {
+ "name": "Kazakisitani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CU": {
+ "name": "Kiba"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigisitani"
+ },
+ "CO": {
+ "name": "Kolombiya"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "KP": {
+ "name": "Koreya y’amajaruguru"
+ },
+ "KR": {
+ "name": "Koreya y’amajepfo"
+ },
+ "HR": {
+ "name": "Korowasiya"
+ },
+ "CR": {
+ "name": "Kositarika"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CI": {
+ "name": "Kotedivuware"
+ },
+ "KW": {
+ "name": "Koweti"
+ },
+ "LV": {
+ "name": "Lativa"
+ },
+ "LA": {
+ "name": "Layosi"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "AE": {
+ "name": "Leta Zunze Ubumwe z’Abarabu"
+ },
+ "US": {
+ "name": "Leta Zunze Ubumwe za Amerika"
+ },
+ "LB": {
+ "name": "Libani"
+ },
+ "LR": {
+ "name": "Liberiya"
+ },
+ "LY": {
+ "name": "Libiya"
+ },
+ "LI": {
+ "name": "Lishyitenshitayini"
+ },
+ "LT": {
+ "name": "Lituwaniya"
+ },
+ "LU": {
+ "name": "Lukusamburu"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madagasikari"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Maleziya"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malita"
+ },
+ "MQ": {
+ "name": "Maritiniki"
+ },
+ "MA": {
+ "name": "Maroke"
+ },
+ "MK": {
+ "name": "Masedoniya"
+ },
+ "YT": {
+ "name": "Mayote"
+ },
+ "MX": {
+ "name": "Migizike"
+ },
+ "FM": {
+ "name": "Mikoroniziya"
+ },
+ "EG": {
+ "name": "Misiri"
+ },
+ "MV": {
+ "name": "Moludave"
+ },
+ "MD": {
+ "name": "Moludavi"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongoliya"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Monteserati"
+ },
+ "MR": {
+ "name": "Moritaniya"
+ },
+ "MZ": {
+ "name": "Mozambiki"
+ },
+ "NA": {
+ "name": "Namibiya"
+ },
+ "NR": {
+ "name": "Nawuru"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "NE": {
+ "name": "Nijeri"
+ },
+ "NG": {
+ "name": "Nijeriya"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NC": {
+ "name": "Niyukaledoniya"
+ },
+ "NU": {
+ "name": "Niyuwe"
+ },
+ "NO": {
+ "name": "Noruveji"
+ },
+ "NZ": {
+ "name": "Nuvelizelandi"
+ },
+ "OM": {
+ "name": "Omani"
+ },
+ "AU": {
+ "name": "Ositaraliya"
+ },
+ "AT": {
+ "name": "Otirishe"
+ },
+ "PK": {
+ "name": "Pakisitani"
+ },
+ "PW": {
+ "name": "Palawu"
+ },
+ "PS": {
+ "name": "Palesitina Wesitibanka na Gaza"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papuwa Niyugineya"
+ },
+ "PY": {
+ "name": "Paragwe"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitikeyirini"
+ },
+ "PF": {
+ "name": "Polineziya y’Abafaransa"
+ },
+ "PL": {
+ "name": "Polonye"
+ },
+ "PT": {
+ "name": "Porutugali"
+ },
+ "PR": {
+ "name": "Puwetoriko"
+ },
+ "CD": {
+ "name": "Repubulika Iharanira Demokarasi ya Kongo"
+ },
+ "CZ": {
+ "name": "Repubulika ya Ceke"
+ },
+ "DO": {
+ "name": "Repubulika ya Dominika"
+ },
+ "CF": {
+ "name": "Repubulika ya Santarafurika"
+ },
+ "RO": {
+ "name": "Rumaniya"
+ },
+ "WS": {
+ "name": "Samowa"
+ },
+ "AS": {
+ "name": "Samowa nyamerika"
+ },
+ "SM": {
+ "name": "Sanimarino"
+ },
+ "ST": {
+ "name": "Sawotome na Perensipe"
+ },
+ "SH": {
+ "name": "Sehelene"
+ },
+ "KN": {
+ "name": "Sekitsi na Nevisi"
+ },
+ "LC": {
+ "name": "Selusiya"
+ },
+ "PM": {
+ "name": "Sempiyeri na Mikeloni"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "VC": {
+ "name": "Sevensa na Gerenadine"
+ },
+ "CL": {
+ "name": "Shili"
+ },
+ "SK": {
+ "name": "Silovakiya"
+ },
+ "SI": {
+ "name": "Siloveniya"
+ },
+ "SG": {
+ "name": "Singapuru"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "LK": {
+ "name": "Sirilanka"
+ },
+ "SY": {
+ "name": "Siriya"
+ },
+ "SL": {
+ "name": "Siyeralewone"
+ },
+ "SO": {
+ "name": "Somaliya"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SZ": {
+ "name": "Suwazilandi"
+ },
+ "SE": {
+ "name": "Suwedi"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TJ": {
+ "name": "Tajikisitani"
+ },
+ "TZ": {
+ "name": "Tanzaniya"
+ },
+ "TH": {
+ "name": "Tayilandi"
+ },
+ "TW": {
+ "name": "Tayiwani"
+ },
+ "TL": {
+ "name": "Timoru y’iburasirazuba"
+ },
+ "TT": {
+ "name": "Tirinidadi na Tobago"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelawu"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tuniziya"
+ },
+ "TR": {
+ "name": "Turukiya"
+ },
+ "TM": {
+ "name": "Turukumenisitani"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "RW": {
+ "name": "u Rwanda"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "BE": {
+ "name": "Ububiligi"
+ },
+ "DE": {
+ "name": "Ubudage"
+ },
+ "FR": {
+ "name": "Ubufaransa"
+ },
+ "UG": {
+ "name": "Ubugande"
+ },
+ "GR": {
+ "name": "Ubugereki"
+ },
+ "IN": {
+ "name": "Ubuhindi"
+ },
+ "NL": {
+ "name": "Ubuholandi"
+ },
+ "BI": {
+ "name": "Uburundi"
+ },
+ "RU": {
+ "name": "Uburusiya"
+ },
+ "CN": {
+ "name": "Ubushinwa"
+ },
+ "CH": {
+ "name": "Ubusuwisi"
+ },
+ "IT": {
+ "name": "Ubutaliyani"
+ },
+ "JP": {
+ "name": "Ubuyapani"
+ },
+ "GB": {
+ "name": "Ubwongereza"
+ },
+ "VA": {
+ "name": "Umurwa wa Vatikani"
+ },
+ "UZ": {
+ "name": "Uzubekisitani"
+ },
+ "VU": {
+ "name": "Vanuwatu"
+ },
+ "VE": {
+ "name": "Venezuwela"
+ },
+ "VN": {
+ "name": "Viyetinamu"
+ },
+ "WF": {
+ "name": "Walisi na Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "JO": {
+ "name": "Yorudaniya"
+ },
+ "ZM": {
+ "name": "Zambiya"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ro.json b/library/intl/resources/country/ro.json
new file mode 100644
index 000000000..acf273ae4
--- /dev/null
+++ b/library/intl/resources/country/ro.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistan"
+ },
+ "ZA": {
+ "name": "Africa de Sud"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua și Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudită"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azerbaidjan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Belgia"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia și Herțegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazilia"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KH": {
+ "name": "Cambodgia"
+ },
+ "CM": {
+ "name": "Camerun"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "CV": {
+ "name": "Capul Verde"
+ },
+ "EA": {
+ "name": "Ceuta și Melilla"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "TD": {
+ "name": "Ciad"
+ },
+ "CY": {
+ "name": "Cipru"
+ },
+ "CO": {
+ "name": "Columbia"
+ },
+ "KM": {
+ "name": "Comore"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "KP": {
+ "name": "Coreea de Nord"
+ },
+ "KR": {
+ "name": "Coreea de Sud"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "Croația"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danemarca"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egipt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "CH": {
+ "name": "Elveția"
+ },
+ "AE": {
+ "name": "Emiratele Arabe Unite"
+ },
+ "ER": {
+ "name": "Eritreea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopia"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipine"
+ },
+ "FI": {
+ "name": "Finlanda"
+ },
+ "FR": {
+ "name": "Franța"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GS": {
+ "name": "Georgia de Sud și Insulele Sandwich de Sud"
+ },
+ "DE": {
+ "name": "Germania"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Grecia"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Groenlanda"
+ },
+ "GP": {
+ "name": "Guadelupa"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guineea"
+ },
+ "GQ": {
+ "name": "Guineea Ecuatorială"
+ },
+ "GW": {
+ "name": "Guineea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GF": {
+ "name": "Guyana Franceză"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonezia"
+ },
+ "AC": {
+ "name": "Insula Ascension"
+ },
+ "CX": {
+ "name": "Insula Christmas"
+ },
+ "IM": {
+ "name": "Insula Man"
+ },
+ "AX": {
+ "name": "Insulele Ã…land"
+ },
+ "IC": {
+ "name": "Insulele Canare"
+ },
+ "BQ": {
+ "name": "Insulele Caraibe Olandeze"
+ },
+ "KY": {
+ "name": "Insulele Cayman"
+ },
+ "CC": {
+ "name": "Insulele Cocos (Keeling)"
+ },
+ "CK": {
+ "name": "Insulele Cook"
+ },
+ "FK": {
+ "name": "Insulele Falkland"
+ },
+ "FO": {
+ "name": "Insulele Feroe"
+ },
+ "UM": {
+ "name": "Insulele Îndepărtate ale S.U.A."
+ },
+ "MP": {
+ "name": "Insulele Mariane de Nord"
+ },
+ "MH": {
+ "name": "Insulele Marshall"
+ },
+ "NF": {
+ "name": "Insulele Norfolk"
+ },
+ "PN": {
+ "name": "Insulele Pitcairn"
+ },
+ "SB": {
+ "name": "Insulele Solomon"
+ },
+ "TC": {
+ "name": "Insulele Turks și Caicos"
+ },
+ "VG": {
+ "name": "Insulele Virgine Britanice"
+ },
+ "VI": {
+ "name": "Insulele Virgine S.U.A."
+ },
+ "JO": {
+ "name": "Iordania"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "IS": {
+ "name": "Islanda"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japonia"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "KZ": {
+ "name": "Kazahstan"
+ },
+ "KG": {
+ "name": "Kârgâzstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuweit"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Letonia"
+ },
+ "LB": {
+ "name": "Liban"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "LU": {
+ "name": "Luxemburg"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malaezia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldive"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Maroc"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexic"
+ },
+ "FM": {
+ "name": "Micronezia"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambic"
+ },
+ "ME": {
+ "name": "Muntenegru"
+ },
+ "MM": {
+ "name": "Myanmar (Birmania)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norvegia"
+ },
+ "NC": {
+ "name": "Noua Caledonie"
+ },
+ "NZ": {
+ "name": "Noua Zeelandă"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua-Noua Guinee"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PF": {
+ "name": "Polinezia Franceză"
+ },
+ "PL": {
+ "name": "Polonia"
+ },
+ "PT": {
+ "name": "Portugalia"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "HK": {
+ "name": "R.A.S. Hong Kong a Chinei"
+ },
+ "MO": {
+ "name": "R.A.S. Macao a Chinei"
+ },
+ "GB": {
+ "name": "Regatul Unit"
+ },
+ "CZ": {
+ "name": "Republica Cehă"
+ },
+ "CF": {
+ "name": "Republica Centrafricană"
+ },
+ "DO": {
+ "name": "Republica Dominicană"
+ },
+ "MD": {
+ "name": "Republica Moldova"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "România"
+ },
+ "RU": {
+ "name": "Rusia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "EH": {
+ "name": "Sahara Occidentală"
+ },
+ "KN": {
+ "name": "Saint Kitts și Nevis"
+ },
+ "VC": {
+ "name": "Saint Vincent și Grenadine"
+ },
+ "PM": {
+ "name": "Saint-Pierre și Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americană"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "Sao Tome și Principe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SH": {
+ "name": "Sfânta Elena"
+ },
+ "LC": {
+ "name": "Sfânta Lucia"
+ },
+ "BL": {
+ "name": "Sfântul Bartolomeu"
+ },
+ "MF": {
+ "name": "Sfântul Martin"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint-Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "SK": {
+ "name": "Slovacia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ES": {
+ "name": "Spania"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "US": {
+ "name": "Statele Unite ale Americii"
+ },
+ "VA": {
+ "name": "Statul Cetății Vaticanului"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SS": {
+ "name": "Sudanul de Sud"
+ },
+ "SE": {
+ "name": "Suedia"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard și Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "TJ": {
+ "name": "Tadjikistan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TF": {
+ "name": "Teritoriile Australe și Antarctice Franceze"
+ },
+ "PS": {
+ "name": "Teritoriile Palestiniene"
+ },
+ "IO": {
+ "name": "Teritoriul Britanic din Oceanul Indian"
+ },
+ "TH": {
+ "name": "Thailanda"
+ },
+ "TL": {
+ "name": "Timorul de Est"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad și Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turcia"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "NL": {
+ "name": "Țările de Jos"
+ },
+ "UA": {
+ "name": "Ucraina"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "HU": {
+ "name": "Ungaria"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis și Futuna"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/rof.json b/library/intl/resources/country/rof.json
new file mode 100644
index 000000000..d88a1bcc7
--- /dev/null
+++ b/library/intl/resources/country/rof.json
@@ -0,0 +1,761 @@
+{
+ "ZA": {
+ "name": "Afrika Kusini"
+ },
+ "AF": {
+ "name": "Afuganistani"
+ },
+ "IS": {
+ "name": "Aislandi"
+ },
+ "AR": {
+ "name": "Ajentina"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljeria"
+ },
+ "AM": {
+ "name": "Amenia"
+ },
+ "AD": {
+ "name": "Andoro"
+ },
+ "AO": {
+ "name": "Angolo"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua na Babuda"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "IE": {
+ "name": "Ayalandi"
+ },
+ "AZ": {
+ "name": "Azabajani"
+ },
+ "BB": {
+ "name": "Babado"
+ },
+ "BS": {
+ "name": "Bahamasi"
+ },
+ "BH": {
+ "name": "Bahareni"
+ },
+ "BD": {
+ "name": "Bangladeshi"
+ },
+ "BY": {
+ "name": "Belarusi"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia na Hezegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazili"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BF": {
+ "name": "Bukinafaso"
+ },
+ "MG": {
+ "name": "Bukini"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denmaki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekwado"
+ },
+ "SV": {
+ "name": "Elsavado"
+ },
+ "IO": {
+ "name": "Eneo la Uingereza katika Bahari Hindi"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "AE": {
+ "name": "Falme za Kiarabu"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipino"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Ginebisau"
+ },
+ "GQ": {
+ "name": "Ginekweta"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grinlandi"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GP": {
+ "name": "Gwadelupe"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GF": {
+ "name": "Gwiyana ya Ufaransa"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ES": {
+ "name": "Hispania"
+ },
+ "HN": {
+ "name": "Hondurasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungaria"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israeli"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "CF": {
+ "name": "Jamhuri ya Afrika ya Kati"
+ },
+ "CZ": {
+ "name": "Jamhuri ya Cheki"
+ },
+ "DO": {
+ "name": "Jamhuri ya Dominika"
+ },
+ "CD": {
+ "name": "Jamhuri ya Kidemokrasia ya Kongo"
+ },
+ "JP": {
+ "name": "Japani"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibralta"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "GE": {
+ "name": "Jojia"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kameruni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katari"
+ },
+ "KZ": {
+ "name": "Kazakistani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CV": {
+ "name": "Kepuvede"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizistani"
+ },
+ "NF": {
+ "name": "Kisiwa cha Norfok"
+ },
+ "CI": {
+ "name": "Kodivaa"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komoro"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "HR": {
+ "name": "Korasia"
+ },
+ "KP": {
+ "name": "Korea Kaskazini"
+ },
+ "KR": {
+ "name": "Korea Kusini"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CY": {
+ "name": "Kuprosi"
+ },
+ "KW": {
+ "name": "Kuwaiti"
+ },
+ "LA": {
+ "name": "Laosi"
+ },
+ "LU": {
+ "name": "Lasembagi"
+ },
+ "LV": {
+ "name": "Lativia"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Lishenteni"
+ },
+ "LT": {
+ "name": "Litwania"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malesia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "US": {
+ "name": "Marekani"
+ },
+ "MQ": {
+ "name": "Martiniki"
+ },
+ "MK": {
+ "name": "Masedonia"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "FM": {
+ "name": "Mikronesia"
+ },
+ "EG": {
+ "name": "Misri"
+ },
+ "MV": {
+ "name": "Modivu"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrati"
+ },
+ "MU": {
+ "name": "Morisi"
+ },
+ "MR": {
+ "name": "Moritania"
+ },
+ "MA": {
+ "name": "Moroko"
+ },
+ "MZ": {
+ "name": "Msumbiji"
+ },
+ "MM": {
+ "name": "Myama"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "NE": {
+ "name": "Nijeri"
+ },
+ "NG": {
+ "name": "Nijeria"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norwe"
+ },
+ "NC": {
+ "name": "Nyukaledonia"
+ },
+ "NZ": {
+ "name": "Nyuzilandi"
+ },
+ "OM": {
+ "name": "Omani"
+ },
+ "AT": {
+ "name": "Ostria"
+ },
+ "PK": {
+ "name": "Pakistani"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua"
+ },
+ "PY": {
+ "name": "Paragwai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkairni"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PF": {
+ "name": "Polinesia ya Ufaransa"
+ },
+ "PR": {
+ "name": "Pwetoriko"
+ },
+ "RE": {
+ "name": "Riyunioni"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SM": {
+ "name": "Samarino"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa ya Marekani"
+ },
+ "SH": {
+ "name": "Santahelena"
+ },
+ "KN": {
+ "name": "Santakitzi na Nevis"
+ },
+ "LC": {
+ "name": "Santalusia"
+ },
+ "PM": {
+ "name": "Santapieri na Mikeloni"
+ },
+ "VC": {
+ "name": "Santavisenti na Grenadini"
+ },
+ "ST": {
+ "name": "Sao Tome na Principe"
+ },
+ "SA": {
+ "name": "Saudi"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Shelisheli"
+ },
+ "SL": {
+ "name": "Siera Leoni"
+ },
+ "SG": {
+ "name": "Singapoo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "LK": {
+ "name": "Sirilanka"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SR": {
+ "name": "Surinamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandi"
+ },
+ "TW": {
+ "name": "Taiwani"
+ },
+ "TJ": {
+ "name": "Tajikistani"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TL": {
+ "name": "Timori ya Mashariki"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad na Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turukimenistani"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "IR": {
+ "name": "Uajemi"
+ },
+ "BE": {
+ "name": "Ubelgiji"
+ },
+ "FR": {
+ "name": "Ufaransa"
+ },
+ "FI": {
+ "name": "Ufini"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "GR": {
+ "name": "Ugiriki"
+ },
+ "ET": {
+ "name": "Uhabeshi"
+ },
+ "NL": {
+ "name": "Uholanzi"
+ },
+ "GB": {
+ "name": "Uingereza"
+ },
+ "DE": {
+ "name": "Ujerumani"
+ },
+ "PS": {
+ "name": "Ukingo wa Magharibi na Ukanda wa Gaza wa Palestina"
+ },
+ "UA": {
+ "name": "Ukraini"
+ },
+ "PT": {
+ "name": "Ureno"
+ },
+ "UY": {
+ "name": "Urugwai"
+ },
+ "RU": {
+ "name": "Urusi"
+ },
+ "SZ": {
+ "name": "Uswazi"
+ },
+ "SE": {
+ "name": "Uswidi"
+ },
+ "CH": {
+ "name": "Uswisi"
+ },
+ "TR": {
+ "name": "Uturuki"
+ },
+ "UZ": {
+ "name": "Uzibekistani"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietinamu"
+ },
+ "CK": {
+ "name": "Visiwa vya Cook"
+ },
+ "FK": {
+ "name": "Visiwa vya Falkland"
+ },
+ "KY": {
+ "name": "Visiwa vya Kaimai"
+ },
+ "MP": {
+ "name": "Visiwa vya Mariana vya Kaskazini"
+ },
+ "MH": {
+ "name": "Visiwa vya Marshal"
+ },
+ "SB": {
+ "name": "Visiwa vya Solomon"
+ },
+ "TC": {
+ "name": "Visiwa vya Turki na Kaiko"
+ },
+ "VI": {
+ "name": "Visiwa vya Virgin vya Marekani"
+ },
+ "VG": {
+ "name": "Visiwa vya Virgin vya Uingereza"
+ },
+ "WF": {
+ "name": "Walis na Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "JO": {
+ "name": "Yordani"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ru.json b/library/intl/resources/country/ru.json
new file mode 100644
index 000000000..a9dabdc07
--- /dev/null
+++ b/library/intl/resources/country/ru.json
@@ -0,0 +1,761 @@
+{
+ "AU": {
+ "name": "ÐвÑтралиÑ"
+ },
+ "AT": {
+ "name": "ÐвÑтриÑ"
+ },
+ "AZ": {
+ "name": "Ðзербайджан"
+ },
+ "AX": {
+ "name": "ÐландÑкие о-ва"
+ },
+ "AL": {
+ "name": "ÐлбаниÑ"
+ },
+ "DZ": {
+ "name": "Ðлжир"
+ },
+ "AS": {
+ "name": "ÐмериканÑкое Самоа"
+ },
+ "AI": {
+ "name": "ÐнгильÑ"
+ },
+ "AO": {
+ "name": "Ðнгола"
+ },
+ "AD": {
+ "name": "Ðндорра"
+ },
+ "AQ": {
+ "name": "Ðнтарктида"
+ },
+ "AG": {
+ "name": "Ðнтигуа и Барбуда"
+ },
+ "AR": {
+ "name": "Ðргентина"
+ },
+ "AM": {
+ "name": "ÐрмениÑ"
+ },
+ "AW": {
+ "name": "Ðруба"
+ },
+ "AF": {
+ "name": "ÐфганиÑтан"
+ },
+ "BS": {
+ "name": "БагамÑкие о-ва"
+ },
+ "BD": {
+ "name": "Бангладеш"
+ },
+ "BB": {
+ "name": "БарбадоÑ"
+ },
+ "BH": {
+ "name": "Бахрейн"
+ },
+ "BY": {
+ "name": "БеларуÑÑŒ"
+ },
+ "BZ": {
+ "name": "Белиз"
+ },
+ "BE": {
+ "name": "БельгиÑ"
+ },
+ "BJ": {
+ "name": "Бенин"
+ },
+ "BM": {
+ "name": "БермудÑкие о-ва"
+ },
+ "BG": {
+ "name": "БолгариÑ"
+ },
+ "BO": {
+ "name": "БоливиÑ"
+ },
+ "BQ": {
+ "name": "БонÑйр, Синт-ЭÑÑ‚Ð°Ñ‚Ð¸ÑƒÑ Ð¸ Саба"
+ },
+ "BA": {
+ "name": "БоÑÐ½Ð¸Ñ Ð¸ Герцеговина"
+ },
+ "BW": {
+ "name": "БотÑвана"
+ },
+ "BR": {
+ "name": "БразилиÑ"
+ },
+ "IO": {
+ "name": "БританÑÐºÐ°Ñ Ñ‚ÐµÑ€Ñ€Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ Ð² ИндийÑком океане"
+ },
+ "BN": {
+ "name": "Бруней-ДаруÑÑалам"
+ },
+ "BF": {
+ "name": "Буркина-ФаÑо"
+ },
+ "BI": {
+ "name": "Бурунди"
+ },
+ "BT": {
+ "name": "Бутан"
+ },
+ "VU": {
+ "name": "Вануату"
+ },
+ "VA": {
+ "name": "Ватикан"
+ },
+ "GB": {
+ "name": "ВеликобританиÑ"
+ },
+ "HU": {
+ "name": "ВенгриÑ"
+ },
+ "VE": {
+ "name": "ВенеÑуÑла"
+ },
+ "VG": {
+ "name": "ВиргинÑкие о-ва (БританÑкие)"
+ },
+ "VI": {
+ "name": "ВиргинÑкие о-ва (СШÐ)"
+ },
+ "UM": {
+ "name": "Внешние малые о-ва (СШÐ)"
+ },
+ "TL": {
+ "name": "ВоÑточный Тимор"
+ },
+ "VN": {
+ "name": "Вьетнам"
+ },
+ "GA": {
+ "name": "Габон"
+ },
+ "HT": {
+ "name": "Гаити"
+ },
+ "GY": {
+ "name": "Гайана"
+ },
+ "GM": {
+ "name": "ГамбиÑ"
+ },
+ "GH": {
+ "name": "Гана"
+ },
+ "GP": {
+ "name": "Гваделупа"
+ },
+ "GT": {
+ "name": "Гватемала"
+ },
+ "GN": {
+ "name": "ГвинеÑ"
+ },
+ "GW": {
+ "name": "ГвинеÑ-БиÑау"
+ },
+ "DE": {
+ "name": "ГерманиÑ"
+ },
+ "GG": {
+ "name": "ГернÑи"
+ },
+ "GI": {
+ "name": "Гибралтар"
+ },
+ "HN": {
+ "name": "ГондураÑ"
+ },
+ "HK": {
+ "name": "Гонконг (оÑобый район)"
+ },
+ "GD": {
+ "name": "Гренада"
+ },
+ "GL": {
+ "name": "ГренландиÑ"
+ },
+ "GR": {
+ "name": "ГрециÑ"
+ },
+ "GE": {
+ "name": "ГрузиÑ"
+ },
+ "GU": {
+ "name": "Гуам"
+ },
+ "DK": {
+ "name": "ДаниÑ"
+ },
+ "JE": {
+ "name": "ДжерÑи"
+ },
+ "DJ": {
+ "name": "Джибути"
+ },
+ "DG": {
+ "name": "Диего-ГарÑиÑ"
+ },
+ "DM": {
+ "name": "Доминика"
+ },
+ "DO": {
+ "name": "ДоминиканÑÐºÐ°Ñ Ð ÐµÑпублика"
+ },
+ "EG": {
+ "name": "Египет"
+ },
+ "ZM": {
+ "name": "ЗамбиÑ"
+ },
+ "EH": {
+ "name": "Ð—Ð°Ð¿Ð°Ð´Ð½Ð°Ñ Ð¡Ð°Ñ…Ð°Ñ€Ð°"
+ },
+ "ZW": {
+ "name": "Зимбабве"
+ },
+ "IL": {
+ "name": "Израиль"
+ },
+ "IN": {
+ "name": "ИндиÑ"
+ },
+ "ID": {
+ "name": "ИндонезиÑ"
+ },
+ "JO": {
+ "name": "ИорданиÑ"
+ },
+ "IQ": {
+ "name": "Ирак"
+ },
+ "IR": {
+ "name": "Иран"
+ },
+ "IE": {
+ "name": "ИрландиÑ"
+ },
+ "IS": {
+ "name": "ИÑландиÑ"
+ },
+ "ES": {
+ "name": "ИÑпаниÑ"
+ },
+ "IT": {
+ "name": "ИталиÑ"
+ },
+ "YE": {
+ "name": "Йемен"
+ },
+ "CV": {
+ "name": "Кабо-Верде"
+ },
+ "KZ": {
+ "name": "КазахÑтан"
+ },
+ "KY": {
+ "name": "Каймановы о-ва"
+ },
+ "KH": {
+ "name": "Камбоджа"
+ },
+ "CM": {
+ "name": "Камерун"
+ },
+ "CA": {
+ "name": "Канада"
+ },
+ "IC": {
+ "name": "КанарÑкие о-ва"
+ },
+ "QA": {
+ "name": "Катар"
+ },
+ "KE": {
+ "name": "КениÑ"
+ },
+ "CY": {
+ "name": "Кипр"
+ },
+ "KG": {
+ "name": "КиргизиÑ"
+ },
+ "KI": {
+ "name": "Кирибати"
+ },
+ "CN": {
+ "name": "Китай"
+ },
+ "KP": {
+ "name": "КÐДР"
+ },
+ "CC": {
+ "name": "КокоÑовые о-ва"
+ },
+ "CO": {
+ "name": "КолумбиÑ"
+ },
+ "KM": {
+ "name": "КоморÑкие о-ва"
+ },
+ "CG": {
+ "name": "Конго - Браззавиль"
+ },
+ "CD": {
+ "name": "Конго - КиншаÑа"
+ },
+ "XK": {
+ "name": "КоÑово"
+ },
+ "CR": {
+ "name": "КоÑта-Рика"
+ },
+ "CI": {
+ "name": "Кот-д’Ивуар"
+ },
+ "CU": {
+ "name": "Куба"
+ },
+ "KW": {
+ "name": "Кувейт"
+ },
+ "CW": {
+ "name": "КюраÑао"
+ },
+ "LA": {
+ "name": "ЛаоÑ"
+ },
+ "LV": {
+ "name": "ЛатвиÑ"
+ },
+ "LS": {
+ "name": "ЛеÑото"
+ },
+ "LR": {
+ "name": "ЛибериÑ"
+ },
+ "LB": {
+ "name": "Ливан"
+ },
+ "LY": {
+ "name": "ЛивиÑ"
+ },
+ "LT": {
+ "name": "Литва"
+ },
+ "LI": {
+ "name": "Лихтенштейн"
+ },
+ "LU": {
+ "name": "ЛюкÑембург"
+ },
+ "MU": {
+ "name": "Маврикий"
+ },
+ "MR": {
+ "name": "МавританиÑ"
+ },
+ "MG": {
+ "name": "МадагаÑкар"
+ },
+ "YT": {
+ "name": "Майотта"
+ },
+ "MO": {
+ "name": "Макао (оÑобый район)"
+ },
+ "MK": {
+ "name": "МакедониÑ"
+ },
+ "MW": {
+ "name": "Малави"
+ },
+ "MY": {
+ "name": "МалайзиÑ"
+ },
+ "ML": {
+ "name": "Мали"
+ },
+ "MV": {
+ "name": "МальдивÑкие о-ва"
+ },
+ "MT": {
+ "name": "Мальта"
+ },
+ "MA": {
+ "name": "Марокко"
+ },
+ "MQ": {
+ "name": "Мартиника"
+ },
+ "MH": {
+ "name": "Маршалловы о-ва"
+ },
+ "MX": {
+ "name": "МекÑика"
+ },
+ "MZ": {
+ "name": "Мозамбик"
+ },
+ "MD": {
+ "name": "Молдова"
+ },
+ "MC": {
+ "name": "Монако"
+ },
+ "MN": {
+ "name": "МонголиÑ"
+ },
+ "MS": {
+ "name": "МонтÑеррат"
+ },
+ "MM": {
+ "name": "МьÑнма (Бирма)"
+ },
+ "NA": {
+ "name": "ÐамибиÑ"
+ },
+ "NR": {
+ "name": "Ðауру"
+ },
+ "NP": {
+ "name": "Ðепал"
+ },
+ "NE": {
+ "name": "Ðигер"
+ },
+ "NG": {
+ "name": "ÐигериÑ"
+ },
+ "NL": {
+ "name": "Ðидерланды"
+ },
+ "NI": {
+ "name": "Ðикарагуа"
+ },
+ "NU": {
+ "name": "ÐиуÑ"
+ },
+ "NZ": {
+ "name": "ÐÐ¾Ð²Ð°Ñ Ð—ÐµÐ»Ð°Ð½Ð´Ð¸Ñ"
+ },
+ "NC": {
+ "name": "ÐÐ¾Ð²Ð°Ñ ÐšÐ°Ð»ÐµÐ´Ð¾Ð½Ð¸Ñ"
+ },
+ "NO": {
+ "name": "ÐорвегиÑ"
+ },
+ "AC": {
+ "name": "о-в ВознеÑениÑ"
+ },
+ "IM": {
+ "name": "О-в ÐœÑн"
+ },
+ "NF": {
+ "name": "о-в Ðорфолк"
+ },
+ "CX": {
+ "name": "о-в РождеÑтва"
+ },
+ "SH": {
+ "name": "О-в Св. Елены"
+ },
+ "CK": {
+ "name": "о-ва Кука"
+ },
+ "TC": {
+ "name": "О-ва Ð¢Ñ‘Ñ€ÐºÑ Ð¸ КайкоÑ"
+ },
+ "AE": {
+ "name": "ОÐЭ"
+ },
+ "OM": {
+ "name": "Оман"
+ },
+ "PK": {
+ "name": "ПакиÑтан"
+ },
+ "PW": {
+ "name": "Палау"
+ },
+ "PS": {
+ "name": "ПалеÑтинÑкие территории"
+ },
+ "PA": {
+ "name": "Панама"
+ },
+ "PG": {
+ "name": "Папуа – ÐÐ¾Ð²Ð°Ñ Ð“Ð²Ð¸Ð½ÐµÑ"
+ },
+ "PY": {
+ "name": "Парагвай"
+ },
+ "PE": {
+ "name": "Перу"
+ },
+ "PN": {
+ "name": "ПиткÑрн"
+ },
+ "PL": {
+ "name": "Польша"
+ },
+ "PT": {
+ "name": "ПортугалиÑ"
+ },
+ "PR": {
+ "name": "ПуÑрто-Рико"
+ },
+ "KR": {
+ "name": "РеÑпублика КореÑ"
+ },
+ "RE": {
+ "name": "Реюньон"
+ },
+ "RU": {
+ "name": "РоÑÑиÑ"
+ },
+ "RW": {
+ "name": "Руанда"
+ },
+ "RO": {
+ "name": "РумыниÑ"
+ },
+ "SV": {
+ "name": "Сальвадор"
+ },
+ "WS": {
+ "name": "Самоа"
+ },
+ "SM": {
+ "name": "Сан-Марино"
+ },
+ "ST": {
+ "name": "Сан-Томе и ПринÑипи"
+ },
+ "SA": {
+ "name": "СаудовÑÐºÐ°Ñ ÐравиÑ"
+ },
+ "SZ": {
+ "name": "Свазиленд"
+ },
+ "MP": {
+ "name": "Северные МарианÑкие о-ва"
+ },
+ "SC": {
+ "name": "СейшельÑкие о-ва"
+ },
+ "BL": {
+ "name": "Сен-Бартельми"
+ },
+ "MF": {
+ "name": "Сен-Мартен"
+ },
+ "PM": {
+ "name": "Сен-Пьер и Микелон"
+ },
+ "SN": {
+ "name": "Сенегал"
+ },
+ "VC": {
+ "name": "Сент-ВинÑент и Гренадины"
+ },
+ "KN": {
+ "name": "Сент-ÐšÐ¸Ñ‚Ñ Ð¸ ÐевиÑ"
+ },
+ "LC": {
+ "name": "Сент-ЛюÑиÑ"
+ },
+ "RS": {
+ "name": "СербиÑ"
+ },
+ "EA": {
+ "name": "Сеута и МелильÑ"
+ },
+ "SG": {
+ "name": "Сингапур"
+ },
+ "SX": {
+ "name": "Синт-Мартен"
+ },
+ "SY": {
+ "name": "СириÑ"
+ },
+ "SK": {
+ "name": "СловакиÑ"
+ },
+ "SI": {
+ "name": "СловениÑ"
+ },
+ "US": {
+ "name": "Соединенные Штаты"
+ },
+ "SB": {
+ "name": "Соломоновы о-ва"
+ },
+ "SO": {
+ "name": "Сомали"
+ },
+ "SD": {
+ "name": "Судан"
+ },
+ "SR": {
+ "name": "Суринам"
+ },
+ "SL": {
+ "name": "Сьерра-Леоне"
+ },
+ "TJ": {
+ "name": "ТаджикиÑтан"
+ },
+ "TH": {
+ "name": "Таиланд"
+ },
+ "TW": {
+ "name": "Тайвань"
+ },
+ "TZ": {
+ "name": "ТанзаниÑ"
+ },
+ "TG": {
+ "name": "Того"
+ },
+ "TK": {
+ "name": "Токелау"
+ },
+ "TO": {
+ "name": "Тонга"
+ },
+ "TT": {
+ "name": "Тринидад и Тобаго"
+ },
+ "TA": {
+ "name": "ТриÑтан-да-КуньÑ"
+ },
+ "TV": {
+ "name": "Тувалу"
+ },
+ "TN": {
+ "name": "ТуниÑ"
+ },
+ "TM": {
+ "name": "ТуркмениÑтан"
+ },
+ "TR": {
+ "name": "ТурциÑ"
+ },
+ "UG": {
+ "name": "Уганда"
+ },
+ "UZ": {
+ "name": "УзбекиÑтан"
+ },
+ "UA": {
+ "name": "Украина"
+ },
+ "WF": {
+ "name": "Ð£Ð¾Ð»Ð»Ð¸Ñ Ð¸ Футуна"
+ },
+ "UY": {
+ "name": "Уругвай"
+ },
+ "FO": {
+ "name": "ФарерÑкие о-ва"
+ },
+ "FM": {
+ "name": "Федеративные Штаты Микронезии"
+ },
+ "FJ": {
+ "name": "Фиджи"
+ },
+ "PH": {
+ "name": "Филиппины"
+ },
+ "FI": {
+ "name": "ФинлÑндиÑ"
+ },
+ "FK": {
+ "name": "ФолклендÑкие о-ва"
+ },
+ "FR": {
+ "name": "ФранциÑ"
+ },
+ "GF": {
+ "name": "ФранцузÑÐºÐ°Ñ Ð“Ð²Ð¸Ð°Ð½Ð°"
+ },
+ "PF": {
+ "name": "ФранцузÑÐºÐ°Ñ ÐŸÐ¾Ð»Ð¸Ð½ÐµÐ·Ð¸Ñ"
+ },
+ "TF": {
+ "name": "ФранцузÑкие Южные Территории"
+ },
+ "HR": {
+ "name": "ХорватиÑ"
+ },
+ "CF": {
+ "name": "ЦÐР"
+ },
+ "TD": {
+ "name": "Чад"
+ },
+ "ME": {
+ "name": "ЧерногориÑ"
+ },
+ "CZ": {
+ "name": "ЧехиÑ"
+ },
+ "CL": {
+ "name": "Чили"
+ },
+ "CH": {
+ "name": "ШвейцариÑ"
+ },
+ "SE": {
+ "name": "ШвециÑ"
+ },
+ "SJ": {
+ "name": "Шпицберген и Ян-Майен"
+ },
+ "LK": {
+ "name": "Шри-Ланка"
+ },
+ "EC": {
+ "name": "Эквадор"
+ },
+ "GQ": {
+ "name": "Ð­ÐºÐ²Ð°Ñ‚Ð¾Ñ€Ð¸Ð°Ð»ÑŒÐ½Ð°Ñ Ð“Ð²Ð¸Ð½ÐµÑ"
+ },
+ "ER": {
+ "name": "ЭритреÑ"
+ },
+ "EE": {
+ "name": "ЭÑтониÑ"
+ },
+ "ET": {
+ "name": "ЭфиопиÑ"
+ },
+ "ZA": {
+ "name": "ЮÐР"
+ },
+ "GS": {
+ "name": "Ð®Ð¶Ð½Ð°Ñ Ð“ÐµÐ¾Ñ€Ð³Ð¸Ñ Ð¸ Южные Сандвичевы о-ва"
+ },
+ "SS": {
+ "name": "Южный Судан"
+ },
+ "JM": {
+ "name": "Ямайка"
+ },
+ "JP": {
+ "name": "ЯпониÑ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/rwk.json b/library/intl/resources/country/rwk.json
new file mode 100644
index 000000000..e57db8007
--- /dev/null
+++ b/library/intl/resources/country/rwk.json
@@ -0,0 +1,761 @@
+{
+ "ZA": {
+ "name": "Afrika Kusini"
+ },
+ "AF": {
+ "name": "Afuganistani"
+ },
+ "IS": {
+ "name": "Aislandi"
+ },
+ "AR": {
+ "name": "Ajentina"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljeria"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua na Barbuda"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "IE": {
+ "name": "Ayalandi"
+ },
+ "AZ": {
+ "name": "Azabajani"
+ },
+ "BB": {
+ "name": "Babadosi"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BH": {
+ "name": "Bahareni"
+ },
+ "BD": {
+ "name": "Bangladeshi"
+ },
+ "BY": {
+ "name": "Belarusi"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia na Hezegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazili"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BF": {
+ "name": "Bukinafaso"
+ },
+ "MG": {
+ "name": "Bukini"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denmaki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekwado"
+ },
+ "SV": {
+ "name": "Elsavado"
+ },
+ "IO": {
+ "name": "Eneo la Uingereza katika Bahari Hindi"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "AE": {
+ "name": "Falme za Kiarabu"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipino"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Ginebisau"
+ },
+ "GQ": {
+ "name": "Ginekweta"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grinlandi"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GP": {
+ "name": "Gwadelupe"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GF": {
+ "name": "Gwiyana ya Ufaransa"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ES": {
+ "name": "Hispania"
+ },
+ "HN": {
+ "name": "Hondurasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungaria"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israeli"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "CF": {
+ "name": "Jamhuri ya Afrika ya Kati"
+ },
+ "CZ": {
+ "name": "Jamhuri ya Cheki"
+ },
+ "DO": {
+ "name": "Jamhuri ya Dominika"
+ },
+ "CD": {
+ "name": "Jamhuri ya Kidemokrasia ya Kongo"
+ },
+ "JP": {
+ "name": "Japani"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibralta"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "GE": {
+ "name": "Jojia"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kameruni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katari"
+ },
+ "KZ": {
+ "name": "Kazakistani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CV": {
+ "name": "Kepuvede"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizistani"
+ },
+ "NF": {
+ "name": "Kisiwa cha Norfok"
+ },
+ "CI": {
+ "name": "Kodivaa"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komoro"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "HR": {
+ "name": "Korasia"
+ },
+ "KP": {
+ "name": "Korea Kaskazini"
+ },
+ "KR": {
+ "name": "Korea Kusini"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CY": {
+ "name": "Kuprosi"
+ },
+ "KW": {
+ "name": "Kuwaiti"
+ },
+ "LA": {
+ "name": "Laosi"
+ },
+ "LU": {
+ "name": "Lasembagi"
+ },
+ "LV": {
+ "name": "Lativia"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Lishenteni"
+ },
+ "LT": {
+ "name": "Litwania"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malesia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "US": {
+ "name": "Marekani"
+ },
+ "MQ": {
+ "name": "Martiniki"
+ },
+ "MK": {
+ "name": "Masedonia"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "FM": {
+ "name": "Mikronesia"
+ },
+ "EG": {
+ "name": "Misri"
+ },
+ "MV": {
+ "name": "Modivu"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrati"
+ },
+ "MU": {
+ "name": "Morisi"
+ },
+ "MR": {
+ "name": "Moritania"
+ },
+ "MA": {
+ "name": "Moroko"
+ },
+ "MZ": {
+ "name": "Msumbiji"
+ },
+ "MM": {
+ "name": "Myama"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "NE": {
+ "name": "Nijeri"
+ },
+ "NG": {
+ "name": "Nijeria"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norwe"
+ },
+ "NC": {
+ "name": "Nyukaledonia"
+ },
+ "NZ": {
+ "name": "Nyuzilandi"
+ },
+ "OM": {
+ "name": "Omani"
+ },
+ "PK": {
+ "name": "Pakistani"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua"
+ },
+ "PY": {
+ "name": "Paragwai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkairni"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PF": {
+ "name": "Polinesia ya Ufaransa"
+ },
+ "PR": {
+ "name": "Pwetoriko"
+ },
+ "RE": {
+ "name": "Riyunioni"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SM": {
+ "name": "Samarino"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa ya Marekani"
+ },
+ "SH": {
+ "name": "Santahelena"
+ },
+ "KN": {
+ "name": "Santakitzi na Nevis"
+ },
+ "LC": {
+ "name": "Santalusia"
+ },
+ "PM": {
+ "name": "Santapieri na Mikeloni"
+ },
+ "VC": {
+ "name": "Santavisenti na Grenadini"
+ },
+ "ST": {
+ "name": "Sao Tome na Principe"
+ },
+ "SA": {
+ "name": "Saudi"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Shelisheli"
+ },
+ "SL": {
+ "name": "Siera Leoni"
+ },
+ "SG": {
+ "name": "Singapoo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "LK": {
+ "name": "Sirilanka"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SR": {
+ "name": "Surinamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandi"
+ },
+ "TW": {
+ "name": "Taiwani"
+ },
+ "TJ": {
+ "name": "Tajikistani"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TL": {
+ "name": "Timori ya Mashariki"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad na Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turukimenistani"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "IR": {
+ "name": "Uajemi"
+ },
+ "BE": {
+ "name": "Ubelgiji"
+ },
+ "FR": {
+ "name": "Ufaransa"
+ },
+ "FI": {
+ "name": "Ufini"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "GR": {
+ "name": "Ugiriki"
+ },
+ "ET": {
+ "name": "Uhabeshi"
+ },
+ "NL": {
+ "name": "Uholanzi"
+ },
+ "GB": {
+ "name": "Uingereza"
+ },
+ "DE": {
+ "name": "Ujerumani"
+ },
+ "PS": {
+ "name": "Ukingo wa Magharibi na Ukanda wa Gaza wa Palestina"
+ },
+ "UA": {
+ "name": "Ukraini"
+ },
+ "PT": {
+ "name": "Ureno"
+ },
+ "UY": {
+ "name": "Urugwai"
+ },
+ "RU": {
+ "name": "Urusi"
+ },
+ "SZ": {
+ "name": "Uswazi"
+ },
+ "SE": {
+ "name": "Uswidi"
+ },
+ "CH": {
+ "name": "Uswisi"
+ },
+ "TR": {
+ "name": "Uturuki"
+ },
+ "UZ": {
+ "name": "Uzibekistani"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietinamu"
+ },
+ "CK": {
+ "name": "Visiwa vya Cook"
+ },
+ "FK": {
+ "name": "Visiwa vya Falkland"
+ },
+ "KY": {
+ "name": "Visiwa vya Kayman"
+ },
+ "MP": {
+ "name": "Visiwa vya Mariana vya Kaskazini"
+ },
+ "MH": {
+ "name": "Visiwa vya Marshal"
+ },
+ "SB": {
+ "name": "Visiwa vya Solomon"
+ },
+ "TC": {
+ "name": "Visiwa vya Turki na Kaiko"
+ },
+ "VI": {
+ "name": "Visiwa vya Virgin vya Marekani"
+ },
+ "VG": {
+ "name": "Visiwa vya Virgin vya Uingereza"
+ },
+ "WF": {
+ "name": "Walis na Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "JO": {
+ "name": "Yordani"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/saq.json b/library/intl/resources/country/saq.json
new file mode 100644
index 000000000..e57db8007
--- /dev/null
+++ b/library/intl/resources/country/saq.json
@@ -0,0 +1,761 @@
+{
+ "ZA": {
+ "name": "Afrika Kusini"
+ },
+ "AF": {
+ "name": "Afuganistani"
+ },
+ "IS": {
+ "name": "Aislandi"
+ },
+ "AR": {
+ "name": "Ajentina"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljeria"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua na Barbuda"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "IE": {
+ "name": "Ayalandi"
+ },
+ "AZ": {
+ "name": "Azabajani"
+ },
+ "BB": {
+ "name": "Babadosi"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BH": {
+ "name": "Bahareni"
+ },
+ "BD": {
+ "name": "Bangladeshi"
+ },
+ "BY": {
+ "name": "Belarusi"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia na Hezegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazili"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BF": {
+ "name": "Bukinafaso"
+ },
+ "MG": {
+ "name": "Bukini"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denmaki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekwado"
+ },
+ "SV": {
+ "name": "Elsavado"
+ },
+ "IO": {
+ "name": "Eneo la Uingereza katika Bahari Hindi"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "AE": {
+ "name": "Falme za Kiarabu"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipino"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Ginebisau"
+ },
+ "GQ": {
+ "name": "Ginekweta"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grinlandi"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GP": {
+ "name": "Gwadelupe"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GF": {
+ "name": "Gwiyana ya Ufaransa"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ES": {
+ "name": "Hispania"
+ },
+ "HN": {
+ "name": "Hondurasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungaria"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israeli"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "CF": {
+ "name": "Jamhuri ya Afrika ya Kati"
+ },
+ "CZ": {
+ "name": "Jamhuri ya Cheki"
+ },
+ "DO": {
+ "name": "Jamhuri ya Dominika"
+ },
+ "CD": {
+ "name": "Jamhuri ya Kidemokrasia ya Kongo"
+ },
+ "JP": {
+ "name": "Japani"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibralta"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "GE": {
+ "name": "Jojia"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kameruni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katari"
+ },
+ "KZ": {
+ "name": "Kazakistani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CV": {
+ "name": "Kepuvede"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizistani"
+ },
+ "NF": {
+ "name": "Kisiwa cha Norfok"
+ },
+ "CI": {
+ "name": "Kodivaa"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komoro"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "HR": {
+ "name": "Korasia"
+ },
+ "KP": {
+ "name": "Korea Kaskazini"
+ },
+ "KR": {
+ "name": "Korea Kusini"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CY": {
+ "name": "Kuprosi"
+ },
+ "KW": {
+ "name": "Kuwaiti"
+ },
+ "LA": {
+ "name": "Laosi"
+ },
+ "LU": {
+ "name": "Lasembagi"
+ },
+ "LV": {
+ "name": "Lativia"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Lishenteni"
+ },
+ "LT": {
+ "name": "Litwania"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malesia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "US": {
+ "name": "Marekani"
+ },
+ "MQ": {
+ "name": "Martiniki"
+ },
+ "MK": {
+ "name": "Masedonia"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "FM": {
+ "name": "Mikronesia"
+ },
+ "EG": {
+ "name": "Misri"
+ },
+ "MV": {
+ "name": "Modivu"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrati"
+ },
+ "MU": {
+ "name": "Morisi"
+ },
+ "MR": {
+ "name": "Moritania"
+ },
+ "MA": {
+ "name": "Moroko"
+ },
+ "MZ": {
+ "name": "Msumbiji"
+ },
+ "MM": {
+ "name": "Myama"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "NE": {
+ "name": "Nijeri"
+ },
+ "NG": {
+ "name": "Nijeria"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norwe"
+ },
+ "NC": {
+ "name": "Nyukaledonia"
+ },
+ "NZ": {
+ "name": "Nyuzilandi"
+ },
+ "OM": {
+ "name": "Omani"
+ },
+ "PK": {
+ "name": "Pakistani"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua"
+ },
+ "PY": {
+ "name": "Paragwai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkairni"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PF": {
+ "name": "Polinesia ya Ufaransa"
+ },
+ "PR": {
+ "name": "Pwetoriko"
+ },
+ "RE": {
+ "name": "Riyunioni"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SM": {
+ "name": "Samarino"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa ya Marekani"
+ },
+ "SH": {
+ "name": "Santahelena"
+ },
+ "KN": {
+ "name": "Santakitzi na Nevis"
+ },
+ "LC": {
+ "name": "Santalusia"
+ },
+ "PM": {
+ "name": "Santapieri na Mikeloni"
+ },
+ "VC": {
+ "name": "Santavisenti na Grenadini"
+ },
+ "ST": {
+ "name": "Sao Tome na Principe"
+ },
+ "SA": {
+ "name": "Saudi"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Shelisheli"
+ },
+ "SL": {
+ "name": "Siera Leoni"
+ },
+ "SG": {
+ "name": "Singapoo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "LK": {
+ "name": "Sirilanka"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SR": {
+ "name": "Surinamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandi"
+ },
+ "TW": {
+ "name": "Taiwani"
+ },
+ "TJ": {
+ "name": "Tajikistani"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TL": {
+ "name": "Timori ya Mashariki"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad na Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turukimenistani"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "IR": {
+ "name": "Uajemi"
+ },
+ "BE": {
+ "name": "Ubelgiji"
+ },
+ "FR": {
+ "name": "Ufaransa"
+ },
+ "FI": {
+ "name": "Ufini"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "GR": {
+ "name": "Ugiriki"
+ },
+ "ET": {
+ "name": "Uhabeshi"
+ },
+ "NL": {
+ "name": "Uholanzi"
+ },
+ "GB": {
+ "name": "Uingereza"
+ },
+ "DE": {
+ "name": "Ujerumani"
+ },
+ "PS": {
+ "name": "Ukingo wa Magharibi na Ukanda wa Gaza wa Palestina"
+ },
+ "UA": {
+ "name": "Ukraini"
+ },
+ "PT": {
+ "name": "Ureno"
+ },
+ "UY": {
+ "name": "Urugwai"
+ },
+ "RU": {
+ "name": "Urusi"
+ },
+ "SZ": {
+ "name": "Uswazi"
+ },
+ "SE": {
+ "name": "Uswidi"
+ },
+ "CH": {
+ "name": "Uswisi"
+ },
+ "TR": {
+ "name": "Uturuki"
+ },
+ "UZ": {
+ "name": "Uzibekistani"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietinamu"
+ },
+ "CK": {
+ "name": "Visiwa vya Cook"
+ },
+ "FK": {
+ "name": "Visiwa vya Falkland"
+ },
+ "KY": {
+ "name": "Visiwa vya Kayman"
+ },
+ "MP": {
+ "name": "Visiwa vya Mariana vya Kaskazini"
+ },
+ "MH": {
+ "name": "Visiwa vya Marshal"
+ },
+ "SB": {
+ "name": "Visiwa vya Solomon"
+ },
+ "TC": {
+ "name": "Visiwa vya Turki na Kaiko"
+ },
+ "VI": {
+ "name": "Visiwa vya Virgin vya Marekani"
+ },
+ "VG": {
+ "name": "Visiwa vya Virgin vya Uingereza"
+ },
+ "WF": {
+ "name": "Walis na Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "JO": {
+ "name": "Yordani"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/sbp.json b/library/intl/resources/country/sbp.json
new file mode 100644
index 000000000..3c3a0c815
--- /dev/null
+++ b/library/intl/resources/country/sbp.json
@@ -0,0 +1,761 @@
+{
+ "ZA": {
+ "name": "Afilika Kusini"
+ },
+ "AF": {
+ "name": "Afuganisitani"
+ },
+ "AR": {
+ "name": "Ajentina"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "DZ": {
+ "name": "Alijeliya"
+ },
+ "AM": {
+ "name": "Alimeniya"
+ },
+ "AW": {
+ "name": "Aluba"
+ },
+ "AL": {
+ "name": "Alubaniya"
+ },
+ "AD": {
+ "name": "Andola"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AG": {
+ "name": "Anitiguya ni Balubuda"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AZ": {
+ "name": "Asabajani"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Awusitilaliya"
+ },
+ "AT": {
+ "name": "Awusitiliya"
+ },
+ "IE": {
+ "name": "Ayalandi"
+ },
+ "IS": {
+ "name": "Ayisilendi"
+ },
+ "BB": {
+ "name": "Babadosi"
+ },
+ "BH": {
+ "name": "Bahaleni"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BD": {
+ "name": "Bangiladeshi"
+ },
+ "BY": {
+ "name": "Belalusi"
+ },
+ "BM": {
+ "name": "Belimuda"
+ },
+ "BZ": {
+ "name": "Belise"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BO": {
+ "name": "Boliviya"
+ },
+ "BA": {
+ "name": "Bosiniya ni Hesegovina"
+ },
+ "BW": {
+ "name": "Botiswana"
+ },
+ "BF": {
+ "name": "Bukinafaso"
+ },
+ "MG": {
+ "name": "Bukini"
+ },
+ "BR": {
+ "name": "Bulasili"
+ },
+ "BG": {
+ "name": "Buligaliya"
+ },
+ "BI": {
+ "name": "Bulundi"
+ },
+ "BN": {
+ "name": "Buluneyi"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denimaki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekwado"
+ },
+ "SV": {
+ "name": "Elisavado"
+ },
+ "ER": {
+ "name": "Elitileya"
+ },
+ "EE": {
+ "name": "Esitoniya"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FK": {
+ "name": "Figunguli fya Fokolendi"
+ },
+ "CK": {
+ "name": "Figunguli fya Kooki"
+ },
+ "MP": {
+ "name": "Figunguli fya Maliyana ifya luvala lwa Kunyamande"
+ },
+ "SB": {
+ "name": "Figunguli fya Solomoni"
+ },
+ "TC": {
+ "name": "Figunguli fya Tuliki ni Kaiko"
+ },
+ "VI": {
+ "name": "Figunguli fya Viliginiya ifya Malekani"
+ },
+ "KY": {
+ "name": "Figunguli ifya Kayimayi"
+ },
+ "MH": {
+ "name": "Figunguli ifya Malishali"
+ },
+ "VG": {
+ "name": "Figunguli ifya Viliginiya ifya Uwingelesa"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipino"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambiya"
+ },
+ "GD": {
+ "name": "Gilenada"
+ },
+ "GL": {
+ "name": "Gilinilandi"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Ginebisawu"
+ },
+ "GQ": {
+ "name": "Ginekweta"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GP": {
+ "name": "Gwadelupe"
+ },
+ "GU": {
+ "name": "Gwamu"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GF": {
+ "name": "Gwiyana ya Wufalansa"
+ },
+ "HT": {
+ "name": "Hayiti"
+ },
+ "ES": {
+ "name": "Hisipaniya"
+ },
+ "HN": {
+ "name": "Hondulasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungaliya"
+ },
+ "IQ": {
+ "name": "Ilaki"
+ },
+ "IN": {
+ "name": "Indiya"
+ },
+ "ID": {
+ "name": "Indonesiya"
+ },
+ "IL": {
+ "name": "Isilaeli"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IT": {
+ "name": "Italiya"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "CF": {
+ "name": "Jamuhuli ya Afilika ya Pakhati"
+ },
+ "DO": {
+ "name": "Jamuhuli ya Dominika"
+ },
+ "CD": {
+ "name": "Jamuhuli ya Kidemokilasiya ya Kongo"
+ },
+ "CZ": {
+ "name": "Jamuhuli ya Sheki"
+ },
+ "JP": {
+ "name": "Japani"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibulalita"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "GE": {
+ "name": "Jojiya"
+ },
+ "KH": {
+ "name": "Kambodiya"
+ },
+ "CM": {
+ "name": "Kameruni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "KZ": {
+ "name": "Kasakisitani"
+ },
+ "QA": {
+ "name": "Katali"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CV": {
+ "name": "Kepuvede"
+ },
+ "GH": {
+ "name": "Khana"
+ },
+ "KI": {
+ "name": "Kilibati"
+ },
+ "KG": {
+ "name": "Kiligisisitani"
+ },
+ "CI": {
+ "name": "Kodivaya"
+ },
+ "HR": {
+ "name": "Kolasiya"
+ },
+ "KR": {
+ "name": "Koleya ya Kusini"
+ },
+ "KP": {
+ "name": "Koleya ya luvala lwa Kunyamande"
+ },
+ "CO": {
+ "name": "Kolombiya"
+ },
+ "KM": {
+ "name": "Komolo"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "CR": {
+ "name": "Kositalika"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CY": {
+ "name": "Kupilosi"
+ },
+ "KW": {
+ "name": "Kuwaiti"
+ },
+ "LU": {
+ "name": "Lasembagi"
+ },
+ "LV": {
+ "name": "Lativiya"
+ },
+ "LA": {
+ "name": "Layosi"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LR": {
+ "name": "Libeliya"
+ },
+ "LY": {
+ "name": "Libiya"
+ },
+ "LI": {
+ "name": "Lisheniteni"
+ },
+ "LT": {
+ "name": "Litwaniya"
+ },
+ "RE": {
+ "name": "Liyunioni"
+ },
+ "RO": {
+ "name": "Lomaniya"
+ },
+ "RW": {
+ "name": "Lwanda"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "US": {
+ "name": "Malekani"
+ },
+ "MY": {
+ "name": "Malesiya"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malita"
+ },
+ "MQ": {
+ "name": "Malitiniki"
+ },
+ "MK": {
+ "name": "Masedoniya"
+ },
+ "YT": {
+ "name": "Mayote"
+ },
+ "MX": {
+ "name": "Mekisiko"
+ },
+ "FM": {
+ "name": "Mikilonesiya"
+ },
+ "EG": {
+ "name": "Misili"
+ },
+ "MV": {
+ "name": "Modivu"
+ },
+ "MD": {
+ "name": "Molidova"
+ },
+ "MU": {
+ "name": "Molisi"
+ },
+ "MR": {
+ "name": "Molitaniya"
+ },
+ "MA": {
+ "name": "Moloko"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongoliya"
+ },
+ "MS": {
+ "name": "Monitiselati"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "PS": {
+ "name": "Munjema gwa Kusikha nu Luvala lwa Gasa lwa Palesit"
+ },
+ "MZ": {
+ "name": "Musumbiji"
+ },
+ "MM": {
+ "name": "Muyama"
+ },
+ "NA": {
+ "name": "Namibiya"
+ },
+ "NR": {
+ "name": "Nawulu"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "NE": {
+ "name": "Nijeli"
+ },
+ "NG": {
+ "name": "Nijeliya"
+ },
+ "NI": {
+ "name": "Nikalagwa"
+ },
+ "NU": {
+ "name": "Niwue"
+ },
+ "NO": {
+ "name": "Nolwe"
+ },
+ "NC": {
+ "name": "Nyukaledoniya"
+ },
+ "NZ": {
+ "name": "Nyusilendi"
+ },
+ "OM": {
+ "name": "Omani"
+ },
+ "PK": {
+ "name": "Pakisitani"
+ },
+ "PY": {
+ "name": "Palagwayi"
+ },
+ "PW": {
+ "name": "Palawu"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papuwa"
+ },
+ "PE": {
+ "name": "Pelu"
+ },
+ "PN": {
+ "name": "Pitikailini"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PF": {
+ "name": "Polinesiya ya Wufalansa"
+ },
+ "PR": {
+ "name": "Pwetoliko"
+ },
+ "SM": {
+ "name": "Samalino"
+ },
+ "ZM": {
+ "name": "Sambiya"
+ },
+ "WS": {
+ "name": "Samoya"
+ },
+ "AS": {
+ "name": "Samoya ya Malekani"
+ },
+ "SH": {
+ "name": "Santahelena"
+ },
+ "KN": {
+ "name": "Santakitisi ni Nevisi"
+ },
+ "LC": {
+ "name": "Santalusiya"
+ },
+ "PM": {
+ "name": "Santapieli ni Mikeloni"
+ },
+ "VC": {
+ "name": "Santavisenti na Gilenadini"
+ },
+ "SA": {
+ "name": "Sawudi"
+ },
+ "ST": {
+ "name": "Sayo Tome ni Pilinikipe"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "TD": {
+ "name": "Shadi"
+ },
+ "SC": {
+ "name": "Shelisheli"
+ },
+ "NF": {
+ "name": "Shigunguli sha Nolifoki"
+ },
+ "CL": {
+ "name": "Shile"
+ },
+ "CN": {
+ "name": "Shina"
+ },
+ "SL": {
+ "name": "Siela Liyoni"
+ },
+ "LK": {
+ "name": "Sililanka"
+ },
+ "SY": {
+ "name": "Siliya"
+ },
+ "SK": {
+ "name": "Silovakiya"
+ },
+ "SI": {
+ "name": "Siloveniya"
+ },
+ "ZW": {
+ "name": "Simbabwe"
+ },
+ "SG": {
+ "name": "Singapoo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SO": {
+ "name": "Somaliya"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SR": {
+ "name": "Sulinamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandi"
+ },
+ "TW": {
+ "name": "Taiwani"
+ },
+ "TJ": {
+ "name": "Tajikisitani"
+ },
+ "TZ": {
+ "name": "Tansaniya"
+ },
+ "TT": {
+ "name": "Tilinidadi ni Tobago"
+ },
+ "TL": {
+ "name": "Timoli ya kunena"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelawu"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TM": {
+ "name": "Tulukimenisitani"
+ },
+ "TN": {
+ "name": "Tunisiya"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "BE": {
+ "name": "Ubeligiji"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "ET": {
+ "name": "Uhabeshi"
+ },
+ "UY": {
+ "name": "Ulugwayi"
+ },
+ "IO": {
+ "name": "Uluvala lwa Uwingelesa ku Bahali ya Hindi"
+ },
+ "UZ": {
+ "name": "Usibekisitani"
+ },
+ "SZ": {
+ "name": "Uswasi"
+ },
+ "SE": {
+ "name": "Uswidi"
+ },
+ "CH": {
+ "name": "Uswisi"
+ },
+ "TR": {
+ "name": "Utuluki"
+ },
+ "IR": {
+ "name": "Uwajemi"
+ },
+ "GB": {
+ "name": "Uwingelesa"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venesuela"
+ },
+ "VN": {
+ "name": "Vietinamu"
+ },
+ "WF": {
+ "name": "Walisi ni Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "FR": {
+ "name": "Wufalansa"
+ },
+ "FI": {
+ "name": "Wufini"
+ },
+ "GR": {
+ "name": "Wugiliki"
+ },
+ "NL": {
+ "name": "Wuholansi"
+ },
+ "DE": {
+ "name": "Wujelumani"
+ },
+ "PT": {
+ "name": "Wuleno"
+ },
+ "RU": {
+ "name": "Wulusi"
+ },
+ "AE": {
+ "name": "Wutwa wa shiyalabu"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "JO": {
+ "name": "Yolodani"
+ },
+ "UA": {
+ "name": "Yukileini"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/se-FI.json b/library/intl/resources/country/se-FI.json
new file mode 100644
index 000000000..8a60295a9
--- /dev/null
+++ b/library/intl/resources/country/se-FI.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ålánda"
+ },
+ "AL": {
+ "name": "Albánia"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "US": {
+ "name": "Amerihká ovttastuvvan stáhtat"
+ },
+ "AS": {
+ "name": "Amerihká Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antárktis"
+ },
+ "AG": {
+ "name": "Antigua ja Barbuda"
+ },
+ "VI": {
+ "name": "AOS Virgin-sullot"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension"
+ },
+ "AZ": {
+ "name": "Aserbaižan"
+ },
+ "AU": {
+ "name": "Austrália"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgia"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia ja Hercegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "Brittania Virgin-sullot"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgária"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "MM": {
+ "name": "Burma"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman-sullot"
+ },
+ "CZ": {
+ "name": "ÄŒeahkka"
+ },
+ "EA": {
+ "name": "Ceuta ja Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "ÄŒiile"
+ },
+ "CC": {
+ "name": "Cocos-sullot"
+ },
+ "CK": {
+ "name": "Cook-sullot"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Dánmárku"
+ },
+ "KP": {
+ "name": "Davvi-Korea"
+ },
+ "MP": {
+ "name": "Davvi-Mariánat"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominikána dásseváldi"
+ },
+ "DE": {
+ "name": "Duiska"
+ },
+ "TR": {
+ "name": "Durka"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypta"
+ },
+ "GQ": {
+ "name": "Ekvatoriála Guinea"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "CI": {
+ "name": "Elfenbenariddu"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estlánda"
+ },
+ "ET": {
+ "name": "Etiopia"
+ },
+ "FK": {
+ "name": "Falklandsullot"
+ },
+ "FO": {
+ "name": "Fearsullot"
+ },
+ "FJ": {
+ "name": "Fijisullot"
+ },
+ "PH": {
+ "name": "Filippiinnat"
+ },
+ "FR": {
+ "name": "Frankriika"
+ },
+ "GF": {
+ "name": "Frankriikka Guayana"
+ },
+ "PF": {
+ "name": "Frankriikka Polynesia"
+ },
+ "MF": {
+ "name": "Frankriikka Saint Martin"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gámbia"
+ },
+ "CF": {
+ "name": "Gaska-Afrihká dásseváldi"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greika"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hongkong"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irlánda"
+ },
+ "IS": {
+ "name": "Islánda"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Itália"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japána"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordánia"
+ },
+ "CX": {
+ "name": "Juovllat-sullot"
+ },
+ "GL": {
+ "name": "Kalaallit Nunaat"
+ },
+ "KH": {
+ "name": "Kamboža"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanáda"
+ },
+ "IC": {
+ "name": "Kanáriasullot"
+ },
+ "CV": {
+ "name": "Kap Verde"
+ },
+ "KZ": {
+ "name": "Kasakstan"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "CN": {
+ "name": "Kiinná"
+ },
+ "KG": {
+ "name": "Kirgisistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komoros"
+ },
+ "CG": {
+ "name": "Kongo-Brazzaville"
+ },
+ "CD": {
+ "name": "Kongo-Kinshasa"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "HR": {
+ "name": "Kroátia"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "CY": {
+ "name": "Kypros"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Látvia"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lietuva"
+ },
+ "GS": {
+ "name": "Lulli Georgia ja Lulli Sandwich-sullot"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MO": {
+ "name": "Makáo"
+ },
+ "MK": {
+ "name": "Makedonia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Malediivvat"
+ },
+ "MY": {
+ "name": "Malesia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Málta"
+ },
+ "IM": {
+ "name": "Mann-sullot"
+ },
+ "MA": {
+ "name": "Marokko"
+ },
+ "MH": {
+ "name": "Marshallsullot"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "ZA": {
+ "name": "Mátta-Afrihká"
+ },
+ "KR": {
+ "name": "Mátta-Korea"
+ },
+ "SS": {
+ "name": "Máttasudan"
+ },
+ "MR": {
+ "name": "Mauretánia"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "FM": {
+ "name": "Mikronesia"
+ },
+ "MD": {
+ "name": "Moldávia"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mosambik"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolksullot"
+ },
+ "NO": {
+ "name": "Norga"
+ },
+ "TL": {
+ "name": "Nuorta-Timor"
+ },
+ "AT": {
+ "name": "Nuortariika"
+ },
+ "EH": {
+ "name": "Oarje-Sahára"
+ },
+ "NC": {
+ "name": "OÄ‘Ä‘a-Kaledonia"
+ },
+ "NZ": {
+ "name": "Ođđa-Selánda"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "AE": {
+ "name": "Ovttastuvvan Arábaemiráhtat"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestina"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua-OÄ‘Ä‘a-Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PL": {
+ "name": "Polen"
+ },
+ "PT": {
+ "name": "Portugála"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Románia"
+ },
+ "RU": {
+ "name": "Ruošša"
+ },
+ "SE": {
+ "name": "Ruoŧŧa"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts ja Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "PM": {
+ "name": "Saint Pierre ja Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vincent ja Grenadine"
+ },
+ "SB": {
+ "name": "Salomon-sullot"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé ja Príncipe"
+ },
+ "SA": {
+ "name": "Saudi-Arábia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychellsullot"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SK": {
+ "name": "Slovákia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somália"
+ },
+ "ES": {
+ "name": "Spánia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "GB": {
+ "name": "Stuorra-Británnia"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "FI": {
+ "name": "Suopma"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbárda ja Jan Mayen"
+ },
+ "SZ": {
+ "name": "Svazieana"
+ },
+ "CH": {
+ "name": "Å veica"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tanzánia"
+ },
+ "TJ": {
+ "name": "Tažikistan"
+ },
+ "TH": {
+ "name": "Thaieana"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad ja Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks ja Caicos-sullot"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraina"
+ },
+ "HU": {
+ "name": "Ungár"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Usbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikána"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "BY": {
+ "name": "Vilges-Ruošša"
+ },
+ "NL": {
+ "name": "Vuolleeatnamat"
+ },
+ "SX": {
+ "name": "Vuolleeatnamat Saint Martin"
+ },
+ "WF": {
+ "name": "Wallis ja Futuna"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/se.json b/library/intl/resources/country/se.json
new file mode 100644
index 000000000..5de6ab076
--- /dev/null
+++ b/library/intl/resources/country/se.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AX": {
+ "name": "Ålánda"
+ },
+ "AL": {
+ "name": "Albánia"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "US": {
+ "name": "Amerihká ovttastuvvan stáhtat"
+ },
+ "AS": {
+ "name": "Amerihká Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antárktis"
+ },
+ "AG": {
+ "name": "Antigua ja Barbuda"
+ },
+ "VI": {
+ "name": "AOS Virgin-sullot"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension"
+ },
+ "AZ": {
+ "name": "Aserbaižan"
+ },
+ "AU": {
+ "name": "Austrália"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgia"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia-Hercegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "Brittania Virgin-sullot"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgária"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "MM": {
+ "name": "Burma"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman-sullot"
+ },
+ "CZ": {
+ "name": "ÄŒeahkka"
+ },
+ "EA": {
+ "name": "Ceuta ja Melilla"
+ },
+ "CL": {
+ "name": "ÄŒiile"
+ },
+ "CC": {
+ "name": "Cocos-sullot"
+ },
+ "CK": {
+ "name": "Cook-sullot"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Dánmárku"
+ },
+ "KP": {
+ "name": "Davvi-Korea"
+ },
+ "MP": {
+ "name": "Davvi-Mariánat"
+ },
+ "SD": {
+ "name": "Davvisudan"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominikána dásseváldi"
+ },
+ "DE": {
+ "name": "Duiska"
+ },
+ "TR": {
+ "name": "Durka"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypta"
+ },
+ "GQ": {
+ "name": "Ekvatoriála Guinea"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "CI": {
+ "name": "Elfenbenariddu"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estlánda"
+ },
+ "ET": {
+ "name": "Etiopia"
+ },
+ "FK": {
+ "name": "Falklandsullot"
+ },
+ "FO": {
+ "name": "Fearsullot"
+ },
+ "FJ": {
+ "name": "Fijisullot"
+ },
+ "PH": {
+ "name": "Filippiinnat"
+ },
+ "FR": {
+ "name": "Frankriika"
+ },
+ "GF": {
+ "name": "Frankriikka Guayana"
+ },
+ "PF": {
+ "name": "Frankriikka Polynesia"
+ },
+ "MF": {
+ "name": "Frankriikka Saint Martin"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gámbia"
+ },
+ "CF": {
+ "name": "Gaska-Afrihká dásseváldi"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greika"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hongkong"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irlánda"
+ },
+ "IS": {
+ "name": "Islánda"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Itália"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japána"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordánia"
+ },
+ "CX": {
+ "name": "Juovllat-sullot"
+ },
+ "GL": {
+ "name": "Kalaallit Nunaat"
+ },
+ "KH": {
+ "name": "Kambodža"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanáda"
+ },
+ "IC": {
+ "name": "Kanáriasullot"
+ },
+ "CV": {
+ "name": "Kap Verde"
+ },
+ "KZ": {
+ "name": "Kasakstan"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "CN": {
+ "name": "Kiinná"
+ },
+ "KG": {
+ "name": "Kirgisistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komoros"
+ },
+ "CG": {
+ "name": "Kongo-Brazzaville"
+ },
+ "CD": {
+ "name": "Kongo-Kinshasa"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "HR": {
+ "name": "Kroátia"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "CY": {
+ "name": "Kypros"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Látvia"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lietuva"
+ },
+ "GS": {
+ "name": "Lulli Georgia ja Lulli Sandwich-sullot"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MO": {
+ "name": "Makáo"
+ },
+ "MK": {
+ "name": "Makedonia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Malediivvat"
+ },
+ "MY": {
+ "name": "Malesia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Málta"
+ },
+ "IM": {
+ "name": "Mann-sullot"
+ },
+ "MA": {
+ "name": "Marokko"
+ },
+ "MH": {
+ "name": "Marshallsullot"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "ZA": {
+ "name": "Mátta-Afrihká"
+ },
+ "KR": {
+ "name": "Mátta-Korea"
+ },
+ "SS": {
+ "name": "Máttasudan"
+ },
+ "MR": {
+ "name": "Mauretánia"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "FM": {
+ "name": "Mikronesia"
+ },
+ "MD": {
+ "name": "Moldávia"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mosambik"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolksullot"
+ },
+ "NO": {
+ "name": "Norga"
+ },
+ "TL": {
+ "name": "Nuorta-Timor"
+ },
+ "AT": {
+ "name": "Nuortariika"
+ },
+ "EH": {
+ "name": "Oarje-Sahára"
+ },
+ "NC": {
+ "name": "OÄ‘Ä‘a-Kaledonia"
+ },
+ "NZ": {
+ "name": "Ođđa-Selánda"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "AE": {
+ "name": "Ovttastuvvan Arábaemiráhtat"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestina"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua-OÄ‘Ä‘a-Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PL": {
+ "name": "Polen"
+ },
+ "PT": {
+ "name": "Portugála"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Románia"
+ },
+ "RU": {
+ "name": "Ruošša"
+ },
+ "SE": {
+ "name": "Ruoŧŧa"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts ja Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "PM": {
+ "name": "Saint Pierre ja Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vincent ja Grenadine"
+ },
+ "SB": {
+ "name": "Salomon-sullot"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé ja Príncipe"
+ },
+ "SA": {
+ "name": "Saudi-Arábia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychellsullot"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SK": {
+ "name": "Slovákia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somália"
+ },
+ "ES": {
+ "name": "Spánia"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "GB": {
+ "name": "Stuorra-Británnia"
+ },
+ "FI": {
+ "name": "Suopma"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbárda ja Jan Mayen"
+ },
+ "SZ": {
+ "name": "Svazieana"
+ },
+ "CH": {
+ "name": "Å veica"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tanzánia"
+ },
+ "TJ": {
+ "name": "Tažikistan"
+ },
+ "TD": {
+ "name": "TÄad"
+ },
+ "TH": {
+ "name": "Thaieana"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad ja Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks ja Caicos-sullot"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraina"
+ },
+ "HU": {
+ "name": "Ungár"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Usbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikána"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "BY": {
+ "name": "Vilges-Ruošša"
+ },
+ "NL": {
+ "name": "Vuolleeatnamat"
+ },
+ "SX": {
+ "name": "Vuolleeatnamat Saint Martin"
+ },
+ "WF": {
+ "name": "Wallis ja Futuna"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/seh.json b/library/intl/resources/country/seh.json
new file mode 100644
index 000000000..aa29db556
--- /dev/null
+++ b/library/intl/resources/country/seh.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afeganistão"
+ },
+ "ZA": {
+ "name": "Ãfrica do Sul"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albânia"
+ },
+ "DE": {
+ "name": "Alemanha"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antígua e Barbuda"
+ },
+ "SA": {
+ "name": "Arábia Saudita"
+ },
+ "DZ": {
+ "name": "Argélia"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armênia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Austrália"
+ },
+ "AT": {
+ "name": "Ãustria"
+ },
+ "AZ": {
+ "name": "Azerbaijão"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BE": {
+ "name": "Bélgica"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermudas"
+ },
+ "BO": {
+ "name": "Bolívia"
+ },
+ "BA": {
+ "name": "Bósnia-Herzegovina"
+ },
+ "BW": {
+ "name": "Botsuana"
+ },
+ "BR": {
+ "name": "Brasil"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgária"
+ },
+ "BF": {
+ "name": "Burquina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butão"
+ },
+ "CV": {
+ "name": "Cabo Verde"
+ },
+ "KH": {
+ "name": "Camboja"
+ },
+ "CA": {
+ "name": "Canadá"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KZ": {
+ "name": "Casaquistão"
+ },
+ "QA": {
+ "name": "Catar"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chade"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CY": {
+ "name": "Chipre"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "SG": {
+ "name": "Cingapura"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "Colômbia"
+ },
+ "KM": {
+ "name": "Comores"
+ },
+ "CG": {
+ "name": "Congo"
+ },
+ "CD": {
+ "name": "Congo-Kinshasa"
+ },
+ "KP": {
+ "name": "Coréia do Norte"
+ },
+ "KR": {
+ "name": "Coréia do Sul"
+ },
+ "CI": {
+ "name": "Costa do Marfim"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "HR": {
+ "name": "Croácia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DK": {
+ "name": "Dinamarca"
+ },
+ "DJ": {
+ "name": "Djibuti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "EG": {
+ "name": "Egito"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emirados Ãrabes Unidos"
+ },
+ "EC": {
+ "name": "Equador"
+ },
+ "ER": {
+ "name": "Eritréia"
+ },
+ "SK": {
+ "name": "Eslováquia"
+ },
+ "SI": {
+ "name": "Eslovênia"
+ },
+ "ES": {
+ "name": "Espanha"
+ },
+ "US": {
+ "name": "Estados Unidos"
+ },
+ "EE": {
+ "name": "Estônia"
+ },
+ "ET": {
+ "name": "Etiópia"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipinas"
+ },
+ "FI": {
+ "name": "Finlândia"
+ },
+ "FR": {
+ "name": "França"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabão"
+ },
+ "GM": {
+ "name": "Gâmbia"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GE": {
+ "name": "Geórgia"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GD": {
+ "name": "Granada"
+ },
+ "GR": {
+ "name": "Grécia"
+ },
+ "GL": {
+ "name": "Groênlandia"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guiana"
+ },
+ "GF": {
+ "name": "Guiana Francesa"
+ },
+ "GN": {
+ "name": "Guiné"
+ },
+ "GW": {
+ "name": "Guiné Bissau"
+ },
+ "GQ": {
+ "name": "Guiné Equatorial"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "NL": {
+ "name": "Holanda"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungria"
+ },
+ "YE": {
+ "name": "Iêmen"
+ },
+ "KY": {
+ "name": "Ilhas Caiman"
+ },
+ "CK": {
+ "name": "Ilhas Cook"
+ },
+ "FK": {
+ "name": "Ilhas Malvinas"
+ },
+ "MP": {
+ "name": "Ilhas Marianas do Norte"
+ },
+ "MH": {
+ "name": "Ilhas Marshall"
+ },
+ "NF": {
+ "name": "Ilhas Norfolk"
+ },
+ "SB": {
+ "name": "Ilhas Salomão"
+ },
+ "TC": {
+ "name": "Ilhas Turks e Caicos"
+ },
+ "VG": {
+ "name": "Ilhas Virgens Britânicas"
+ },
+ "VI": {
+ "name": "Ilhas Virgens dos EUA"
+ },
+ "IN": {
+ "name": "Ãndia"
+ },
+ "ID": {
+ "name": "Indonésia"
+ },
+ "IR": {
+ "name": "Irã"
+ },
+ "IQ": {
+ "name": "Iraque"
+ },
+ "IE": {
+ "name": "Irlanda"
+ },
+ "IS": {
+ "name": "Islândia"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Itália"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japão"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordânia"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letônia"
+ },
+ "LB": {
+ "name": "Líbano"
+ },
+ "LR": {
+ "name": "Libéria"
+ },
+ "LY": {
+ "name": "Líbia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lituânia"
+ },
+ "LU": {
+ "name": "Luxemburgo"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedônia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MY": {
+ "name": "Malásia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldivas"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marrocos"
+ },
+ "MQ": {
+ "name": "Martinica"
+ },
+ "MU": {
+ "name": "Maurício"
+ },
+ "MR": {
+ "name": "Mauritânia"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "México"
+ },
+ "MM": {
+ "name": "Mianmar"
+ },
+ "FM": {
+ "name": "Micronésia"
+ },
+ "MZ": {
+ "name": "Moçambique"
+ },
+ "MD": {
+ "name": "Moldávia"
+ },
+ "MC": {
+ "name": "Mônaco"
+ },
+ "MN": {
+ "name": "Mongólia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "NA": {
+ "name": "Namíbia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicarágua"
+ },
+ "NE": {
+ "name": "Níger"
+ },
+ "NG": {
+ "name": "Nigéria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noruega"
+ },
+ "NC": {
+ "name": "Nova Caledônia"
+ },
+ "NZ": {
+ "name": "Nova Zelândia"
+ },
+ "OM": {
+ "name": "Omã"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panamá"
+ },
+ "PG": {
+ "name": "Papua-Nova Guiné"
+ },
+ "PK": {
+ "name": "Paquistão"
+ },
+ "PY": {
+ "name": "Paraguai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PF": {
+ "name": "Polinésia Francesa"
+ },
+ "PL": {
+ "name": "Polônia"
+ },
+ "PR": {
+ "name": "Porto Rico"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "KE": {
+ "name": "Quênia"
+ },
+ "KG": {
+ "name": "Quirguistão"
+ },
+ "KI": {
+ "name": "Quiribati"
+ },
+ "GB": {
+ "name": "Reino Unido"
+ },
+ "CF": {
+ "name": "República Centro-Africana"
+ },
+ "DO": {
+ "name": "República Dominicana"
+ },
+ "CM": {
+ "name": "República dos Camarões"
+ },
+ "CZ": {
+ "name": "República Tcheca"
+ },
+ "RE": {
+ "name": "Reunião"
+ },
+ "RO": {
+ "name": "Romênia"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RU": {
+ "name": "Rússia"
+ },
+ "PM": {
+ "name": "Saint Pierre e Miquelon"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Americana"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "SH": {
+ "name": "Santa Helena"
+ },
+ "LC": {
+ "name": "Santa Lúcia"
+ },
+ "KN": {
+ "name": "São Cristovão e Nevis"
+ },
+ "ST": {
+ "name": "São Tomé e Príncipe"
+ },
+ "VC": {
+ "name": "São Vicente e Granadinas"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SL": {
+ "name": "Serra Leoa"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Síria"
+ },
+ "SO": {
+ "name": "Somália"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SZ": {
+ "name": "Suazilândia"
+ },
+ "SD": {
+ "name": "Sudão"
+ },
+ "SE": {
+ "name": "Suécia"
+ },
+ "CH": {
+ "name": "Suíça"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TJ": {
+ "name": "Tadjiquistão"
+ },
+ "TH": {
+ "name": "Tailândia"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "IO": {
+ "name": "Território Britânico do Oceano Ãndico"
+ },
+ "PS": {
+ "name": "Território da Palestina"
+ },
+ "TL": {
+ "name": "Timor Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad e Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunísia"
+ },
+ "TM": {
+ "name": "Turcomenistão"
+ },
+ "TR": {
+ "name": "Turquia"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UA": {
+ "name": "Ucrânia"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UY": {
+ "name": "Uruguai"
+ },
+ "UZ": {
+ "name": "Uzbequistão"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vaticano"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnã"
+ },
+ "WF": {
+ "name": "Wallis e Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "ZM": {
+ "name": "Zâmbia"
+ },
+ "ZW": {
+ "name": "Zimbábue"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ses.json b/library/intl/resources/country/ses.json
new file mode 100644
index 000000000..bdbd80aee
--- /dev/null
+++ b/library/intl/resources/country/ses.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afgaanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albaani"
+ },
+ "GB": {
+ "name": "Albaasalaama Marganta"
+ },
+ "DE": {
+ "name": "Almaaɲe"
+ },
+ "DZ": {
+ "name": "Alžeeri"
+ },
+ "VI": {
+ "name": "Ameerik Virgin Gungey"
+ },
+ "US": {
+ "name": "Ameriki Laabu Margantey"
+ },
+ "AS": {
+ "name": "Ameriki Samoa"
+ },
+ "AD": {
+ "name": "Andoora"
+ },
+ "AI": {
+ "name": "Angiiya"
+ },
+ "AO": {
+ "name": "Angoola"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua nda Barbuuda"
+ },
+ "AR": {
+ "name": "Argentine"
+ },
+ "AM": {
+ "name": "Armeeni"
+ },
+ "AW": {
+ "name": "Aruuba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "IS": {
+ "name": "Ayceland"
+ },
+ "AZ": {
+ "name": "Azerbaayijaŋ"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahareen"
+ },
+ "BD": {
+ "name": "Bangladeši"
+ },
+ "BB": {
+ "name": "Barbaados"
+ },
+ "BE": {
+ "name": "Belgiiki"
+ },
+ "BZ": {
+ "name": "Beliizi"
+ },
+ "BJ": {
+ "name": "Beniŋ"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BY": {
+ "name": "Biloriši"
+ },
+ "BO": {
+ "name": "Boolivi"
+ },
+ "BA": {
+ "name": "Bosni nda Herzegovine"
+ },
+ "BW": {
+ "name": "Botswaana"
+ },
+ "BR": {
+ "name": "Breezil"
+ },
+ "IO": {
+ "name": "Britiši Indu teekoo laama"
+ },
+ "VG": {
+ "name": "Britiši Virgin gungey"
+ },
+ "BN": {
+ "name": "Bruunee"
+ },
+ "BG": {
+ "name": "Bulgaari"
+ },
+ "BF": {
+ "name": "Burkina faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Buutaŋ"
+ },
+ "TD": {
+ "name": "Caadu"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "CZ": {
+ "name": "Cek labo"
+ },
+ "CF": {
+ "name": "Centraafriki koyra"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danemark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Doominiki"
+ },
+ "DO": {
+ "name": "Doominiki laboo"
+ },
+ "ET": {
+ "name": "Ecioopi"
+ },
+ "EC": {
+ "name": "Ekwateer"
+ },
+ "ER": {
+ "name": "Eritree"
+ },
+ "ES": {
+ "name": "Espaaɲe"
+ },
+ "EE": {
+ "name": "Estooni"
+ },
+ "FR": {
+ "name": "Faransi"
+ },
+ "GF": {
+ "name": "Faransi Guyaan"
+ },
+ "PF": {
+ "name": "Faransi Polineezi"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipine"
+ },
+ "FI": {
+ "name": "Finlandu"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaabon"
+ },
+ "GH": {
+ "name": "Gaana"
+ },
+ "GM": {
+ "name": "Gambi"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Gine-Bisso"
+ },
+ "GQ": {
+ "name": "Ginee Ekwatorial"
+ },
+ "GE": {
+ "name": "Gorgi"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GD": {
+ "name": "Grenaada"
+ },
+ "GL": {
+ "name": "Grinland"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyaane"
+ },
+ "GP": {
+ "name": "Gwadeluup"
+ },
+ "GT": {
+ "name": "Gwatemaala"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ZA": {
+ "name": "Hawsa Afriki Laboo"
+ },
+ "NL": {
+ "name": "Hollandu"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungaari"
+ },
+ "ID": {
+ "name": "Indoneezi"
+ },
+ "IN": {
+ "name": "Indu laboo"
+ },
+ "IQ": {
+ "name": "Iraak"
+ },
+ "IR": {
+ "name": "Iraan"
+ },
+ "RU": {
+ "name": "Iriši laboo"
+ },
+ "IE": {
+ "name": "Irlandu"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israyel"
+ },
+ "IT": {
+ "name": "Itaali"
+ },
+ "JP": {
+ "name": "Jaapoŋ"
+ },
+ "JM": {
+ "name": "Jamaayik"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "DJ": {
+ "name": "Jibuuti"
+ },
+ "NC": {
+ "name": "Kaaledooni Taagaa"
+ },
+ "KZ": {
+ "name": "Kaazakstan"
+ },
+ "FK": {
+ "name": "Kalkan gungey"
+ },
+ "KH": {
+ "name": "Kamboogi"
+ },
+ "CM": {
+ "name": "Kameruun"
+ },
+ "CA": {
+ "name": "Kanaada"
+ },
+ "CV": {
+ "name": "Kapuver gungey"
+ },
+ "QA": {
+ "name": "Kataar"
+ },
+ "KY": {
+ "name": "Kayman gungey"
+ },
+ "KE": {
+ "name": "Keeniya"
+ },
+ "KI": {
+ "name": "Kiribaati"
+ },
+ "CO": {
+ "name": "Kolombi"
+ },
+ "KM": {
+ "name": "Komoor"
+ },
+ "CG": {
+ "name": "Kongoo"
+ },
+ "CD": {
+ "name": "Kongoo demookaratiki laboo"
+ },
+ "KP": {
+ "name": "Kooree, Gurma"
+ },
+ "KR": {
+ "name": "Kooree, Hawsa"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kosta rika"
+ },
+ "HR": {
+ "name": "Krwaasi"
+ },
+ "CI": {
+ "name": "Kudwar"
+ },
+ "CU": {
+ "name": "Kuuba"
+ },
+ "CK": {
+ "name": "Kuuk gungey"
+ },
+ "KW": {
+ "name": "Kuweet"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "AE": {
+ "name": "Laaraw Imaarawey Margantey"
+ },
+ "LA": {
+ "name": "Laawos"
+ },
+ "LS": {
+ "name": "Leesoto"
+ },
+ "LV": {
+ "name": "Letooni"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LY": {
+ "name": "Liibi"
+ },
+ "LT": {
+ "name": "Lituaani"
+ },
+ "LB": {
+ "name": "Lubnaan"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MK": {
+ "name": "Maacedooni"
+ },
+ "ML": {
+ "name": "Maali"
+ },
+ "MA": {
+ "name": "Maarok"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malaawi"
+ },
+ "MV": {
+ "name": "Maldiivu"
+ },
+ "MY": {
+ "name": "Maleezi"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MP": {
+ "name": "Mariana Gurma Gungey"
+ },
+ "MH": {
+ "name": "Maršal gungey"
+ },
+ "MQ": {
+ "name": "Martiniiki"
+ },
+ "MM": {
+ "name": "Maynamar"
+ },
+ "YT": {
+ "name": "Mayooti"
+ },
+ "MX": {
+ "name": "Mexiki"
+ },
+ "FM": {
+ "name": "Mikronezi"
+ },
+ "EG": {
+ "name": "Misra"
+ },
+ "MD": {
+ "name": "Moldovi"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongooli"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MU": {
+ "name": "Mooris gungey"
+ },
+ "MR": {
+ "name": "Mooritaani"
+ },
+ "MZ": {
+ "name": "Mozambik"
+ },
+ "NG": {
+ "name": "Naajiriia"
+ },
+ "NA": {
+ "name": "Naamibi"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Neepal"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NE": {
+ "name": "Nižer"
+ },
+ "NF": {
+ "name": "Norfolk Gungoo"
+ },
+ "NO": {
+ "name": "Norveej"
+ },
+ "OM": {
+ "name": "Omaan"
+ },
+ "AU": {
+ "name": "Ostraali"
+ },
+ "AT": {
+ "name": "Otriši"
+ },
+ "PK": {
+ "name": "Paakistan"
+ },
+ "PS": {
+ "name": "Palestine Dangay nda Gaaza"
+ },
+ "PW": {
+ "name": "Palu"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Ginee Taaga"
+ },
+ "PY": {
+ "name": "Paraguwey"
+ },
+ "PE": {
+ "name": "Peeru"
+ },
+ "PN": {
+ "name": "Pitikarin"
+ },
+ "PL": {
+ "name": "Poloɲe"
+ },
+ "PR": {
+ "name": "Porto Riko"
+ },
+ "PT": {
+ "name": "Portugaal"
+ },
+ "RE": {
+ "name": "Reenioŋ"
+ },
+ "RO": {
+ "name": "Rumaani"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SV": {
+ "name": "Salvador laboo"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "Sao Tome nda Prinsipe"
+ },
+ "SA": {
+ "name": "Saudiya"
+ },
+ "SL": {
+ "name": "Seera Leon"
+ },
+ "SC": {
+ "name": "Seešel"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "SH": {
+ "name": "Seŋ Helena"
+ },
+ "KN": {
+ "name": "Seŋ Kitts nda Nevis"
+ },
+ "LC": {
+ "name": "Seŋ Lussia"
+ },
+ "PM": {
+ "name": "Seŋ Piyer nda Mikelon"
+ },
+ "VC": {
+ "name": "Seŋvinsaŋ nda Grenadine"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "CL": {
+ "name": "Å iili"
+ },
+ "CN": {
+ "name": "Å iin"
+ },
+ "CY": {
+ "name": "Å iipur"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovaaki"
+ },
+ "SI": {
+ "name": "Sloveeni"
+ },
+ "SB": {
+ "name": "Solomon Gungey"
+ },
+ "SO": {
+ "name": "Somaali"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "LK": {
+ "name": "Srilanka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SR": {
+ "name": "Surinaam"
+ },
+ "SD": {
+ "name": "Suudaŋ"
+ },
+ "SY": {
+ "name": "Suuria"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweede"
+ },
+ "CH": {
+ "name": "Swisu"
+ },
+ "TH": {
+ "name": "Taayiland"
+ },
+ "TW": {
+ "name": "Taayiwan"
+ },
+ "TJ": {
+ "name": "Taažikistan"
+ },
+ "TZ": {
+ "name": "Tanzaani"
+ },
+ "TL": {
+ "name": "Timoor hawsa"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad nda Tobaago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunizi"
+ },
+ "TC": {
+ "name": "Turk nda Kayikos Gungey"
+ },
+ "TR": {
+ "name": "Turki"
+ },
+ "TM": {
+ "name": "Turkmenistaŋ"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukreen"
+ },
+ "JO": {
+ "name": "Urdun"
+ },
+ "UY": {
+ "name": "Uruguwey"
+ },
+ "UZ": {
+ "name": "Uzbeekistan"
+ },
+ "VA": {
+ "name": "Vaatikan Laama"
+ },
+ "VU": {
+ "name": "Vanautu"
+ },
+ "VE": {
+ "name": "Veneezuyeela"
+ },
+ "VN": {
+ "name": "Vietnaam"
+ },
+ "WF": {
+ "name": "Wallis nda Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yaman"
+ },
+ "ZM": {
+ "name": "Zambi"
+ },
+ "NZ": {
+ "name": "Zeelandu Taaga"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/sg.json b/library/intl/resources/country/sg.json
new file mode 100644
index 000000000..799433b59
--- /dev/null
+++ b/library/intl/resources/country/sg.json
@@ -0,0 +1,761 @@
+{
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albanïi"
+ },
+ "US": {
+ "name": "ÂLeaa-Ôko tî Amerika"
+ },
+ "DZ": {
+ "name": "Alzerïi"
+ },
+ "AD": {
+ "name": "Andôro"
+ },
+ "AO": {
+ "name": "Angoläa"
+ },
+ "AI": {
+ "name": "Angûîla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antîgua na Barbûda"
+ },
+ "AE": {
+ "name": "Arâbo Emirâti Ôko"
+ },
+ "AM": {
+ "name": "Armenïi"
+ },
+ "AW": {
+ "name": "Arûba"
+ },
+ "AR": {
+ "name": "Arzantîna"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "VG": {
+ "name": "Âzôâ Viîrîggo tî Anglëe"
+ },
+ "CK": {
+ "name": "âzûâ Kûku"
+ },
+ "MP": {
+ "name": "Âzûâ Märïâni tî Banga"
+ },
+ "MH": {
+ "name": "Âzûâ Märshâl"
+ },
+ "KY": {
+ "name": "Âzûâ Ngundë, Kaimäni"
+ },
+ "CV": {
+ "name": "Azûâ tî Kâpo-Vêre"
+ },
+ "FK": {
+ "name": "Âzûâ tî Mälüîni"
+ },
+ "TC": {
+ "name": "Âzûâ Turku na Kaîki"
+ },
+ "VI": {
+ "name": "Âzûâ Virîgo tî Amerîka"
+ },
+ "BS": {
+ "name": "Bahâmasa"
+ },
+ "BH": {
+ "name": "Bahrâina"
+ },
+ "BB": {
+ "name": "Barabâda"
+ },
+ "BY": {
+ "name": "Belarüsi"
+ },
+ "BE": {
+ "name": "Bêleze, Belezîki"
+ },
+ "BZ": {
+ "name": "Belîzi"
+ },
+ "BJ": {
+ "name": "Benëen"
+ },
+ "BD": {
+ "name": "Bengladêshi"
+ },
+ "BM": {
+ "name": "Beremûda"
+ },
+ "BO": {
+ "name": "Bolivïi"
+ },
+ "BA": {
+ "name": "Bosnïi na Herzegovînni"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brezîli"
+ },
+ "BN": {
+ "name": "Brunêi"
+ },
+ "BG": {
+ "name": "Bulugarïi"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundïi"
+ },
+ "BT": {
+ "name": "Butäan"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danemêrke"
+ },
+ "DJ": {
+ "name": "Dibutùii"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dömïnîka"
+ },
+ "EC": {
+ "name": "Ekuatëre"
+ },
+ "IN": {
+ "name": "Ênnde"
+ },
+ "ID": {
+ "name": "Ênndonezïi"
+ },
+ "ER": {
+ "name": "Eritrëe"
+ },
+ "ES": {
+ "name": "Espânye"
+ },
+ "EE": {
+ "name": "Estonïi"
+ },
+ "ET": {
+ "name": "Etiopïi"
+ },
+ "AF": {
+ "name": "Faganïta, Afganïstäan"
+ },
+ "FR": {
+ "name": "Farânzi"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FI": {
+ "name": "Fëlânde"
+ },
+ "FJ": {
+ "name": "Fidyïi"
+ },
+ "PH": {
+ "name": "Filipîni"
+ },
+ "NC": {
+ "name": "Finî Kaledonïi"
+ },
+ "NZ": {
+ "name": "Finî Zelânde"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaböon"
+ },
+ "GM": {
+ "name": "Gambïi"
+ },
+ "GH": {
+ "name": "Ganäa"
+ },
+ "GY": {
+ "name": "Gayâna"
+ },
+ "GR": {
+ "name": "Gerêsi"
+ },
+ "GN": {
+ "name": "Ginëe"
+ },
+ "GQ": {
+ "name": "Ginëe tî Ekuatëre"
+ },
+ "GW": {
+ "name": "Gninëe-Bisau"
+ },
+ "GL": {
+ "name": "Gorolânde"
+ },
+ "GD": {
+ "name": "Grenâda"
+ },
+ "GP": {
+ "name": "Guadelûpu"
+ },
+ "GU": {
+ "name": "Guâm"
+ },
+ "GT": {
+ "name": "Guatêmälä"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GF": {
+ "name": "Güyâni tî farânzi"
+ },
+ "HT": {
+ "name": "Haitïi"
+ },
+ "NL": {
+ "name": "Holände"
+ },
+ "HN": {
+ "name": "Honduräsi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hongirùii"
+ },
+ "IR": {
+ "name": "Iräan"
+ },
+ "IQ": {
+ "name": "Irâki"
+ },
+ "IE": {
+ "name": "Irlânde"
+ },
+ "IS": {
+ "name": "Islânde"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israëli"
+ },
+ "IT": {
+ "name": "Italùii"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "KH": {
+ "name": "Kämbôzi"
+ },
+ "CM": {
+ "name": "Kamerûne"
+ },
+ "EG": {
+ "name": "Kâmitâ"
+ },
+ "CA": {
+ "name": "Kanadäa"
+ },
+ "QA": {
+ "name": "Katära"
+ },
+ "KZ": {
+ "name": "Kazakisitäan"
+ },
+ "KE": {
+ "name": "Kenyäa"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizitùaan"
+ },
+ "CI": {
+ "name": "Kôdivüära"
+ },
+ "GB": {
+ "name": "Ködörögbïä--Ôko"
+ },
+ "CF": {
+ "name": "Ködörösêse tî Bêafrîka"
+ },
+ "DO": {
+ "name": "Ködörösêse tî Dominîka"
+ },
+ "CD": {
+ "name": "Ködörösêse tî Ngunuhalëzo tî kongö"
+ },
+ "CZ": {
+ "name": "Ködörösêse tî Tyêki"
+ },
+ "CO": {
+ "name": "Kolombïi"
+ },
+ "KM": {
+ "name": "Kömôro"
+ },
+ "CG": {
+ "name": "Kongö"
+ },
+ "KP": {
+ "name": "Korëe tî Banga"
+ },
+ "KR": {
+ "name": "Korëe tî Mbongo"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kôsta Rîka"
+ },
+ "KW": {
+ "name": "Köwêti"
+ },
+ "HR": {
+ "name": "Kroasïi"
+ },
+ "CU": {
+ "name": "Kubäa"
+ },
+ "LS": {
+ "name": "Lesôtho"
+ },
+ "VA": {
+ "name": "Letëe tî Vatikäan"
+ },
+ "LV": {
+ "name": "Letonùii"
+ },
+ "LR": {
+ "name": "Liberïa"
+ },
+ "LY": {
+ "name": "Libïi"
+ },
+ "LB": {
+ "name": "Libùaan"
+ },
+ "LI": {
+ "name": "Liechtenstein,"
+ },
+ "LT": {
+ "name": "Lituanïi"
+ },
+ "LA": {
+ "name": "Lùaôsi"
+ },
+ "LU": {
+ "name": "Lugzambûru"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madagaskära"
+ },
+ "MW": {
+ "name": "Malawïi"
+ },
+ "MV": {
+ "name": "Maldîva"
+ },
+ "MY": {
+ "name": "Malezïi"
+ },
+ "ML": {
+ "name": "Malïi"
+ },
+ "MT": {
+ "name": "Mâlta"
+ },
+ "MA": {
+ "name": "Marôko"
+ },
+ "MQ": {
+ "name": "Märtïnîki"
+ },
+ "MK": {
+ "name": "Maseduäni"
+ },
+ "YT": {
+ "name": "Mäyôte"
+ },
+ "ZA": {
+ "name": "Mbongo-Afrîka"
+ },
+ "MX": {
+ "name": "Mekisîki"
+ },
+ "FM": {
+ "name": "Mikronezïi"
+ },
+ "MD": {
+ "name": "Moldavùii"
+ },
+ "MC": {
+ "name": "Monaköo"
+ },
+ "MN": {
+ "name": "Mongolïi"
+ },
+ "MS": {
+ "name": "Monserâte"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MU": {
+ "name": "Mörîsi"
+ },
+ "MR": {
+ "name": "Moritanïi"
+ },
+ "MZ": {
+ "name": "Mözämbîka"
+ },
+ "MM": {
+ "name": "Myämâra"
+ },
+ "NA": {
+ "name": "Namibùii"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nëpâli"
+ },
+ "NI": {
+ "name": "Nikaragua"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NE": {
+ "name": "Nizëre"
+ },
+ "NG": {
+ "name": "Nizerïa"
+ },
+ "NO": {
+ "name": "Nörvêzi"
+ },
+ "OM": {
+ "name": "Omâni"
+ },
+ "AU": {
+ "name": "Ostralïi, Sotralïi"
+ },
+ "AT": {
+ "name": "Otrîsi"
+ },
+ "PK": {
+ "name": "Pakistäan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papû Finî Ginëe, Papuazïi"
+ },
+ "PY": {
+ "name": "Paraguëe"
+ },
+ "PE": {
+ "name": "Perüu"
+ },
+ "PN": {
+ "name": "Pitikêrni"
+ },
+ "PF": {
+ "name": "Polinezïi tî farânzi"
+ },
+ "PL": {
+ "name": "Pölôni"
+ },
+ "PR": {
+ "name": "Porto Rîko"
+ },
+ "PT": {
+ "name": "Pörtugäle, Ködörö Pûra"
+ },
+ "RE": {
+ "name": "Reinïon"
+ },
+ "RW": {
+ "name": "Ruandäa"
+ },
+ "RO": {
+ "name": "Rumanïi"
+ },
+ "RU": {
+ "name": "Rusïi"
+ },
+ "SV": {
+ "name": "Salvadöro"
+ },
+ "AS": {
+ "name": "Samöa tî Amerîka"
+ },
+ "WS": {
+ "name": "Samoäa"
+ },
+ "ST": {
+ "name": "Sâô Tömê na Prinsîpe"
+ },
+ "SA": {
+ "name": "Saûdi Arabïi"
+ },
+ "KN": {
+ "name": "Sên-Krïstôfo-na-Nevîsi"
+ },
+ "SM": {
+ "name": "Sên-Marëen"
+ },
+ "PM": {
+ "name": "Sên-Pyêre na Mikelöon"
+ },
+ "VC": {
+ "name": "Sên-Vensäan na âGrenadîni"
+ },
+ "SN": {
+ "name": "Senegäle"
+ },
+ "SH": {
+ "name": "Sênt-Helêna"
+ },
+ "LC": {
+ "name": "Sênt-Lisïi"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "IO": {
+ "name": "Sêse tî Anglëe na Ngûyämä tî Ênnde"
+ },
+ "PS": {
+ "name": "Sêse tî Palestîni"
+ },
+ "SC": {
+ "name": "Sëyshêle"
+ },
+ "CL": {
+ "name": "Shilïi"
+ },
+ "CN": {
+ "name": "Shîna"
+ },
+ "SL": {
+ "name": "Sierä-Leône"
+ },
+ "SG": {
+ "name": "Sïngäpûru"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "CY": {
+ "name": "Sîpri"
+ },
+ "LK": {
+ "name": "Sirî-Lanka"
+ },
+ "SY": {
+ "name": "Sirïi"
+ },
+ "SK": {
+ "name": "Solovakïi"
+ },
+ "SI": {
+ "name": "Solovenïi"
+ },
+ "SO": {
+ "name": "Somalïi"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudäan"
+ },
+ "SS": {
+ "name": "Sudäan-Mbongo"
+ },
+ "SE": {
+ "name": "Suêde"
+ },
+ "CH": {
+ "name": "Sûîsi"
+ },
+ "SR": {
+ "name": "Surinäm"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swäzïlânde"
+ },
+ "TJ": {
+ "name": "Taazikiistäan"
+ },
+ "TH": {
+ "name": "Tailânde"
+ },
+ "TW": {
+ "name": "Tâiwâni"
+ },
+ "TZ": {
+ "name": "Tanzanïi"
+ },
+ "TL": {
+ "name": "Timôro tî Tö"
+ },
+ "TG": {
+ "name": "Togö"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinitùee na Tobagö"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunizïi"
+ },
+ "TM": {
+ "name": "Turkumenistäan"
+ },
+ "TR": {
+ "name": "Turukïi"
+ },
+ "TV": {
+ "name": "Tüvalü"
+ },
+ "TD": {
+ "name": "Tyâde"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "Ugandäa"
+ },
+ "UA": {
+ "name": "Ukrêni"
+ },
+ "UY": {
+ "name": "Uruguëe"
+ },
+ "UZ": {
+ "name": "Uzbekistäan"
+ },
+ "VU": {
+ "name": "Vanuatü"
+ },
+ "VE": {
+ "name": "Venezueläa"
+ },
+ "VN": {
+ "name": "Vietnäm"
+ },
+ "WF": {
+ "name": "Walîsi na Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yëmêni"
+ },
+ "JM": {
+ "name": "Zamaîka"
+ },
+ "DE": {
+ "name": "Zâmani"
+ },
+ "ZM": {
+ "name": "Zambïi"
+ },
+ "JP": {
+ "name": "Zapöon"
+ },
+ "AZ": {
+ "name": "Zerebaidyäan, Azerbaidyäan,"
+ },
+ "GI": {
+ "name": "Zibraltära, Zibaratära"
+ },
+ "ZW": {
+ "name": "Zimbäbwe"
+ },
+ "JO": {
+ "name": "Zordanïi"
+ },
+ "GE": {
+ "name": "Zorzïi"
+ },
+ "NF": {
+ "name": "Zûâ Nôrfôlko"
+ },
+ "SB": {
+ "name": "Zûâ Salomöon"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/shi-Latn.json b/library/intl/resources/country/shi-Latn.json
new file mode 100644
index 000000000..278dedd11
--- /dev/null
+++ b/library/intl/resources/country/shi-Latn.json
@@ -0,0 +1,761 @@
+{
+ "AZ": {
+ "name": "adrabijan"
+ },
+ "GI": {
+ "name": "adrar n á¹­aá¹›iq"
+ },
+ "AF": {
+ "name": "afɣanistan"
+ },
+ "ZA": {
+ "name": "afriqya n iffus"
+ },
+ "PS": {
+ "name": "agmmaḠn tagut d ɣzza"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "albanya"
+ },
+ "DE": {
+ "name": "almanya"
+ },
+ "ID": {
+ "name": "andunisya"
+ },
+ "AD": {
+ "name": "andura"
+ },
+ "AI": {
+ "name": "angila"
+ },
+ "AO": {
+ "name": "angula"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "antiga d brbuda"
+ },
+ "AR": {
+ "name": "arjantin"
+ },
+ "AM": {
+ "name": "arminya"
+ },
+ "AW": {
+ "name": "aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "VA": {
+ "name": "awank n fatikan"
+ },
+ "PG": {
+ "name": "babwa ɣinya tamaynut"
+ },
+ "BS": {
+ "name": "bahamas"
+ },
+ "PK": {
+ "name": "bakistan"
+ },
+ "PW": {
+ "name": "balaw"
+ },
+ "PA": {
+ "name": "banama"
+ },
+ "BD": {
+ "name": "bangladic"
+ },
+ "PY": {
+ "name": "baragway"
+ },
+ "BB": {
+ "name": "barbad"
+ },
+ "BH": {
+ "name": "bḥrayn"
+ },
+ "BT": {
+ "name": "bhutan"
+ },
+ "BY": {
+ "name": "bilarusya"
+ },
+ "BZ": {
+ "name": "biliz"
+ },
+ "BJ": {
+ "name": "binin"
+ },
+ "PE": {
+ "name": "biru"
+ },
+ "PN": {
+ "name": "bitkayrn"
+ },
+ "BG": {
+ "name": "blɣara"
+ },
+ "BE": {
+ "name": "bljika"
+ },
+ "BR": {
+ "name": "brazil"
+ },
+ "BM": {
+ "name": "brmuda"
+ },
+ "PT": {
+ "name": "bṛṭqiz"
+ },
+ "BN": {
+ "name": "bruni"
+ },
+ "BO": {
+ "name": "bulibya"
+ },
+ "PF": {
+ "name": "bulinizya tafransist"
+ },
+ "PL": {
+ "name": "bulunya"
+ },
+ "BF": {
+ "name": "burkina fasu"
+ },
+ "PR": {
+ "name": "burtu riku"
+ },
+ "BI": {
+ "name": "burundi"
+ },
+ "BA": {
+ "name": "busna d hirsik"
+ },
+ "BW": {
+ "name": "butswana"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "CL": {
+ "name": "ccili"
+ },
+ "CN": {
+ "name": "ccinwa"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "culumbya"
+ },
+ "KM": {
+ "name": "cumur"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "danmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "djibuti"
+ },
+ "DM": {
+ "name": "duminik"
+ },
+ "DZ": {
+ "name": "dzayr"
+ },
+ "OM": {
+ "name": "ɛuman"
+ },
+ "VU": {
+ "name": "fanwaá¹­u"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "fidji"
+ },
+ "PH": {
+ "name": "filibbin"
+ },
+ "FI": {
+ "name": "fillanda"
+ },
+ "VE": {
+ "name": "finzwila"
+ },
+ "VN": {
+ "name": "fitnam"
+ },
+ "FR": {
+ "name": "fransa"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "gabun"
+ },
+ "GM": {
+ "name": "gambya"
+ },
+ "GL": {
+ "name": "griland"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GP": {
+ "name": "gwadalub"
+ },
+ "GU": {
+ "name": "gwam"
+ },
+ "GT": {
+ "name": "gwatimala"
+ },
+ "GF": {
+ "name": "gwiyan tafransist"
+ },
+ "GY": {
+ "name": "gwiyana"
+ },
+ "GH": {
+ "name": "É£ana"
+ },
+ "GN": {
+ "name": "É£inya"
+ },
+ "GW": {
+ "name": "É£inya bisaw"
+ },
+ "GQ": {
+ "name": "É£inya n ikwadur"
+ },
+ "GD": {
+ "name": "É£rnaá¹­a"
+ },
+ "HT": {
+ "name": "hayti"
+ },
+ "HU": {
+ "name": "hnɣarya"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "NL": {
+ "name": "hulanda"
+ },
+ "HN": {
+ "name": "hunduras"
+ },
+ "EC": {
+ "name": "ikwadur"
+ },
+ "IR": {
+ "name": "iran"
+ },
+ "ER": {
+ "name": "iritirya"
+ },
+ "IE": {
+ "name": "irlanda"
+ },
+ "IS": {
+ "name": "island"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "israyil"
+ },
+ "EE": {
+ "name": "istunya"
+ },
+ "IT": {
+ "name": "iá¹­alya"
+ },
+ "ET": {
+ "name": "ityubya"
+ },
+ "US": {
+ "name": "iwunak munnin n mirikan"
+ },
+ "JM": {
+ "name": "jamayka"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GE": {
+ "name": "jurjya"
+ },
+ "NC": {
+ "name": "kalidunya tamaynut"
+ },
+ "KH": {
+ "name": "kambudya"
+ },
+ "CM": {
+ "name": "kamirun"
+ },
+ "CA": {
+ "name": "kanada"
+ },
+ "KZ": {
+ "name": "kazaxstan"
+ },
+ "KE": {
+ "name": "kinya"
+ },
+ "KG": {
+ "name": "kirɣizistan"
+ },
+ "KI": {
+ "name": "kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "HR": {
+ "name": "krwatya"
+ },
+ "CU": {
+ "name": "kuba"
+ },
+ "CG": {
+ "name": "kungu"
+ },
+ "KR": {
+ "name": "kurya n iffus"
+ },
+ "KP": {
+ "name": "kurya n iẓẓlmá¸"
+ },
+ "CR": {
+ "name": "kusta rika"
+ },
+ "CI": {
+ "name": "kut difwar"
+ },
+ "LV": {
+ "name": "latfya"
+ },
+ "LA": {
+ "name": "laws"
+ },
+ "IQ": {
+ "name": "lɛiraq"
+ },
+ "IN": {
+ "name": "lhind"
+ },
+ "LR": {
+ "name": "libirya"
+ },
+ "LY": {
+ "name": "libya"
+ },
+ "LI": {
+ "name": "likinctayn"
+ },
+ "AE": {
+ "name": "limarat"
+ },
+ "LS": {
+ "name": "liá¹£uá¹­u"
+ },
+ "LT": {
+ "name": "litwanya"
+ },
+ "KW": {
+ "name": "lkwit"
+ },
+ "MA": {
+ "name": "lmɣrib"
+ },
+ "LB": {
+ "name": "lubnan"
+ },
+ "LU": {
+ "name": "luksanburg"
+ },
+ "JO": {
+ "name": "lurdun"
+ },
+ "JP": {
+ "name": "lyaban"
+ },
+ "GR": {
+ "name": "lyunan"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "madaɣacqar"
+ },
+ "MW": {
+ "name": "malawi"
+ },
+ "MV": {
+ "name": "maldif"
+ },
+ "ML": {
+ "name": "mali"
+ },
+ "MY": {
+ "name": "malizya"
+ },
+ "MT": {
+ "name": "malá¹­a"
+ },
+ "MQ": {
+ "name": "martinik"
+ },
+ "MK": {
+ "name": "masidunya"
+ },
+ "YT": {
+ "name": "mayuá¹­"
+ },
+ "FM": {
+ "name": "mikrunizya"
+ },
+ "MX": {
+ "name": "miksik"
+ },
+ "EG": {
+ "name": "miṣṛ"
+ },
+ "MN": {
+ "name": "mnɣulya"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MD": {
+ "name": "muldufya"
+ },
+ "MC": {
+ "name": "munaku"
+ },
+ "MS": {
+ "name": "munsirat"
+ },
+ "MU": {
+ "name": "muris"
+ },
+ "MR": {
+ "name": "muá¹›iá¹­anya"
+ },
+ "MZ": {
+ "name": "muznbiq"
+ },
+ "MM": {
+ "name": "myanmar"
+ },
+ "NA": {
+ "name": "namibya"
+ },
+ "NR": {
+ "name": "nawru"
+ },
+ "NP": {
+ "name": "nibal"
+ },
+ "NG": {
+ "name": "nijirya"
+ },
+ "NI": {
+ "name": "nikaragwa"
+ },
+ "NU": {
+ "name": "niwi"
+ },
+ "NE": {
+ "name": "nnijir"
+ },
+ "AT": {
+ "name": "nnmsa"
+ },
+ "NO": {
+ "name": "nnrwij"
+ },
+ "NZ": {
+ "name": "nyuzilanda"
+ },
+ "QA": {
+ "name": "qatar"
+ },
+ "CY": {
+ "name": "qubrus"
+ },
+ "RE": {
+ "name": "riyunyun"
+ },
+ "RO": {
+ "name": "rumanya"
+ },
+ "RU": {
+ "name": "rusya"
+ },
+ "RW": {
+ "name": "rwanda"
+ },
+ "SV": {
+ "name": "salfadur"
+ },
+ "WS": {
+ "name": "samwa"
+ },
+ "AS": {
+ "name": "samwa tamirikanit"
+ },
+ "PM": {
+ "name": "sanbyir d miklun"
+ },
+ "VC": {
+ "name": "sanfansan d grinadin"
+ },
+ "KN": {
+ "name": "sankris d nifis"
+ },
+ "SM": {
+ "name": "sanmarinu"
+ },
+ "SH": {
+ "name": "santilin"
+ },
+ "LC": {
+ "name": "santlusi"
+ },
+ "ST": {
+ "name": "sawá¹­umi d bransib"
+ },
+ "ES": {
+ "name": "sbanya"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "slufakya"
+ },
+ "SI": {
+ "name": "slufinya"
+ },
+ "SG": {
+ "name": "snɣafura"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "LK": {
+ "name": "srilanka"
+ },
+ "SA": {
+ "name": "ssaɛudiya"
+ },
+ "SC": {
+ "name": "ssicil"
+ },
+ "SN": {
+ "name": "ssinigal"
+ },
+ "SL": {
+ "name": "ssiralyun"
+ },
+ "SD": {
+ "name": "ssudan"
+ },
+ "SO": {
+ "name": "ṣṣumal"
+ },
+ "SE": {
+ "name": "sswid"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SR": {
+ "name": "surinam"
+ },
+ "SY": {
+ "name": "surya"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "swazilanda"
+ },
+ "CH": {
+ "name": "swisra"
+ },
+ "TJ": {
+ "name": "tadjakistan"
+ },
+ "CD": {
+ "name": "tagdudant tadimukratit n Kongo"
+ },
+ "DO": {
+ "name": "tagdudant taduminikt"
+ },
+ "CF": {
+ "name": "tagdudant tanammast n ifriqya"
+ },
+ "CZ": {
+ "name": "tagdudant tatcikit"
+ },
+ "GB": {
+ "name": "tagldit imunn"
+ },
+ "IO": {
+ "name": "tamnaá¸t tanglizit n ugaru ahindi"
+ },
+ "TZ": {
+ "name": "ṭanẓanya"
+ },
+ "TH": {
+ "name": "á¹­ayland"
+ },
+ "TW": {
+ "name": "á¹­aywan"
+ },
+ "TD": {
+ "name": "tcad"
+ },
+ "CV": {
+ "name": "tigzirin n kabbirdi"
+ },
+ "KY": {
+ "name": "tigzirin n kayman"
+ },
+ "CK": {
+ "name": "tigzirin n kuk"
+ },
+ "FK": {
+ "name": "tigzirin n malawi"
+ },
+ "MH": {
+ "name": "tigzirin n marcal"
+ },
+ "MP": {
+ "name": "tigzirin n maryan n iẓẓlmá¸"
+ },
+ "NF": {
+ "name": "tigzirin n nurfulk"
+ },
+ "SB": {
+ "name": "tigzirin n saluman"
+ },
+ "TC": {
+ "name": "tigzirin n turkya d kayk"
+ },
+ "VI": {
+ "name": "tigzirin timgad n iwunak munnin"
+ },
+ "VG": {
+ "name": "tigzirin timgad n nngliz"
+ },
+ "TL": {
+ "name": "timur n lqblt"
+ },
+ "TT": {
+ "name": "trinidad d á¹­ubagu"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TV": {
+ "name": "tufalu"
+ },
+ "TG": {
+ "name": "á¹­ugu"
+ },
+ "TK": {
+ "name": "á¹­uklaw"
+ },
+ "TO": {
+ "name": "á¹­unga"
+ },
+ "TN": {
+ "name": "tuns"
+ },
+ "TM": {
+ "name": "turkmanstan"
+ },
+ "TR": {
+ "name": "turkya"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "uɣanda"
+ },
+ "UA": {
+ "name": "ukranya"
+ },
+ "UY": {
+ "name": "urugway"
+ },
+ "AU": {
+ "name": "ustralya"
+ },
+ "UZ": {
+ "name": "uzbakistan"
+ },
+ "WF": {
+ "name": "walis d futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "yaman"
+ },
+ "ZM": {
+ "name": "zambya"
+ },
+ "ZW": {
+ "name": "zimbabwi"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/shi.json b/library/intl/resources/country/shi.json
new file mode 100644
index 000000000..bfdd20b39
--- /dev/null
+++ b/library/intl/resources/country/shi.json
@@ -0,0 +1,761 @@
+{
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "PS": {
+ "name": "ⴰⴳⵎⵎⴰⴹ ⵠⵜⴰⴳⵓⵜ ⴷ ⵖⵣⵣⴰ"
+ },
+ "AZ": {
+ "name": "ⴰⴷⵔⴰⴱⵉⵊⴰâµ"
+ },
+ "GI": {
+ "name": "ⴰⴷⵔⴰⵔ ⵠⵟⴰⵕⵉⵇ"
+ },
+ "ZA": {
+ "name": "ⴰⴼⵔⵉⵇⵢⴰ ⵠⵉⴼⴼⵓⵙ"
+ },
+ "AF": {
+ "name": "ⴰⴼⵖⴰâµâµ‰âµ™âµœâ´°âµ"
+ },
+ "AL": {
+ "name": "â´°âµâ´±â´°âµâµ¢â´°"
+ },
+ "DE": {
+ "name": "â´°âµâµŽâ´°âµâµ¢â´°"
+ },
+ "AI": {
+ "name": "â´°âµâ´³âµ‰âµâ´°"
+ },
+ "AO": {
+ "name": "â´°âµâ´³âµ“âµâ´°"
+ },
+ "ID": {
+ "name": "â´°âµâ´·âµ“âµâµ‰âµ™âµ¢â´°"
+ },
+ "AD": {
+ "name": "â´°âµâ´·âµ“ⵔⴰ"
+ },
+ "AG": {
+ "name": "â´°âµâµœâµ‰â´³â´° â´· ⴱⵔⴱⵓⴷⴰ"
+ },
+ "AR": {
+ "name": "ⴰⵔⵊⴰâµâµœâµ‰âµ"
+ },
+ "AM": {
+ "name": "ⴰⵔⵎⵉâµâµ¢â´°"
+ },
+ "AW": {
+ "name": "ⴰⵔⵓⴱⴰ"
+ },
+ "VA": {
+ "name": "ⴰⵡⴰâµâ´½ ⵠⴼⴰⵜⵉⴽⴰâµ"
+ },
+ "PG": {
+ "name": "ⴱⴰⴱⵡⴰ ⵖⵉâµâµ¢â´° ⵜⴰⵎⴰⵢâµâµ“ⵜ"
+ },
+ "PK": {
+ "name": "ⴱⴰⴽⵉⵙⵜⴰâµ"
+ },
+ "BS": {
+ "name": "ⴱⴰⵀⴰⵎⴰⵙ"
+ },
+ "PW": {
+ "name": "ⴱⴰâµâ´°âµ¡"
+ },
+ "PA": {
+ "name": "ⴱⴰâµâ´°âµŽâ´°"
+ },
+ "BD": {
+ "name": "ⴱⴰâµâ´³âµâ´°â´·âµ‰âµ›"
+ },
+ "PY": {
+ "name": "ⴱⴰⵔⴰⴳⵡⴰⵢ"
+ },
+ "BB": {
+ "name": "ⴱⴰⵔⴱⴰⴷ"
+ },
+ "BT": {
+ "name": "ⴱⵀⵓⵜⴰâµ"
+ },
+ "BH": {
+ "name": "ⴱⵃⵔⴰⵢâµ"
+ },
+ "BY": {
+ "name": "ⴱⵉâµâ´°âµ”ⵓⵙⵢⴰ"
+ },
+ "BZ": {
+ "name": "ⴱⵉâµâµ‰âµ£"
+ },
+ "BJ": {
+ "name": "ⴱⵉâµâµ‰âµ"
+ },
+ "PE": {
+ "name": "ⴱⵉⵔⵓ"
+ },
+ "PN": {
+ "name": "ⴱⵉⵜⴽⴰⵢⵔâµ"
+ },
+ "BE": {
+ "name": "â´±âµâµŠâµ‰â´½â´°"
+ },
+ "BG": {
+ "name": "â´±âµâµ–ⴰⵔⵢⴰ"
+ },
+ "BO": {
+ "name": "ⴱⵓâµâµ‰â´¼âµ¢â´°"
+ },
+ "PF": {
+ "name": "ⴱⵓâµâµ‰âµâµ‰âµ£âµ¢â´° ⵜⴰⴼⵔⴰâµâµ™âµ‰âµ™âµœ"
+ },
+ "PL": {
+ "name": "ⴱⵓâµâµ“âµâµ¢â´°"
+ },
+ "BF": {
+ "name": "ⴱⵓⵔⴽⵉâµâ´° ⴼⴰⵙⵓ"
+ },
+ "BI": {
+ "name": "ⴱⵓⵔⵓâµâ´·âµ‰"
+ },
+ "PR": {
+ "name": "ⴱⵓⵔⵜⵓ ⵔⵉⴽⵓ"
+ },
+ "BA": {
+ "name": "ⴱⵓⵙâµâ´° â´· ⵀⵉⵔⵙⵉⴽ"
+ },
+ "BW": {
+ "name": "ⴱⵓⵜⵙⵡⴰâµâ´°"
+ },
+ "BR": {
+ "name": "ⴱⵔⴰⵣⵉâµ"
+ },
+ "BM": {
+ "name": "ⴱⵔⵎⵓⴷⴰ"
+ },
+ "BN": {
+ "name": "ⴱⵔⵓâµâµ‰"
+ },
+ "PT": {
+ "name": "ⴱⵕⵟⵇⵉⵣ"
+ },
+ "GA": {
+ "name": "ⴳⴰⴱⵓâµ"
+ },
+ "GM": {
+ "name": "ⴳⴰⵎⴱⵢⴰ"
+ },
+ "GL": {
+ "name": "ⴳⵔⵉâµâ´°âµâ´·"
+ },
+ "GP": {
+ "name": "ⴳⵡⴰⴷⴰâµâµ“â´±"
+ },
+ "GU": {
+ "name": "ⴳⵡⴰⵎ"
+ },
+ "GT": {
+ "name": "ⴳⵡⴰⵜⵉⵎⴰâµâ´°"
+ },
+ "GF": {
+ "name": "ⴳⵡⵉⵢⴰⵠⵜⴰⴼⵔⴰâµâµ™âµ‰âµ™âµœ"
+ },
+ "GY": {
+ "name": "ⴳⵡⵉⵢⴰâµâ´°"
+ },
+ "DK": {
+ "name": "â´·â´°âµâµŽâ´°âµ”â´½"
+ },
+ "DJ": {
+ "name": "ⴷⵊⵉⴱⵓⵜⵉ"
+ },
+ "DM": {
+ "name": "ⴷⵓⵎⵉâµâµ‰â´½"
+ },
+ "DZ": {
+ "name": "ⴷⵣⴰⵢⵔ"
+ },
+ "VU": {
+ "name": "ⴼⴰâµâµ¡â´°âµŸâµ“"
+ },
+ "FJ": {
+ "name": "ⴼⵉⴷⵊⵉ"
+ },
+ "PH": {
+ "name": "ⴼⵉâµâµ‰â´±â´±âµ‰âµ"
+ },
+ "FI": {
+ "name": "ⴼⵉâµâµâ´°âµâ´·â´°"
+ },
+ "VE": {
+ "name": "ⴼⵉâµâµ£âµ¡âµ‰âµâ´°"
+ },
+ "VN": {
+ "name": "ⴼⵉⵜâµâ´°âµŽ"
+ },
+ "FR": {
+ "name": "ⴼⵔⴰâµâµ™â´°"
+ },
+ "NC": {
+ "name": "ⴽⴰâµâµ‰â´·âµ“âµâµ¢â´° ⵜⴰⵎⴰⵢâµâµ“ⵜ"
+ },
+ "KH": {
+ "name": "ⴽⴰⵎⴱⵓⴷⵢⴰ"
+ },
+ "CM": {
+ "name": "ⴽⴰⵎⵉⵔⵓâµ"
+ },
+ "CA": {
+ "name": "ⴽⴰâµâ´°â´·â´°"
+ },
+ "KZ": {
+ "name": "ⴽⴰⵣⴰⵅⵙⵜⴰâµ"
+ },
+ "KE": {
+ "name": "ⴽⵉâµâµ¢â´°"
+ },
+ "KI": {
+ "name": "ⴽⵉⵔⵉⴱⴰⵜⵉ"
+ },
+ "KG": {
+ "name": "ⴽⵉⵔⵖⵉⵣⵉⵙⵜⴰâµ"
+ },
+ "CU": {
+ "name": "ⴽⵓⴱⴰ"
+ },
+ "CO": {
+ "name": "ⴽⵓâµâµ“ⵎⴱⵢⴰ"
+ },
+ "CG": {
+ "name": "ⴽⵓâµâ´³âµ“"
+ },
+ "KR": {
+ "name": "ⴽⵓⵔⵢⴰ ⵠⵉⴼⴼⵓⵙ"
+ },
+ "KP": {
+ "name": "ⴽⵓⵔⵢⴰ ⵠⵉⵥⵥâµâµŽâ´¹"
+ },
+ "CR": {
+ "name": "ⴽⵓⵙⵜⴰ ⵔⵉⴽⴰ"
+ },
+ "CI": {
+ "name": "ⴽⵓⵜ ⴷⵉⴼⵡⴰⵔ"
+ },
+ "HR": {
+ "name": "ⴽⵔⵡⴰⵜⵢⴰ"
+ },
+ "HT": {
+ "name": "ⵀⴰⵢⵜⵉ"
+ },
+ "HU": {
+ "name": "âµ€âµâµ–ⴰⵔⵢⴰ"
+ },
+ "NL": {
+ "name": "ⵀⵓâµâ´°âµâ´·â´°"
+ },
+ "HN": {
+ "name": "ⵀⵓâµâ´·âµ“ⵔⴰⵙ"
+ },
+ "OM": {
+ "name": "ⵄⵓⵎⴰâµ"
+ },
+ "QA": {
+ "name": "ⵇⴰⵜⴰⵔ"
+ },
+ "CY": {
+ "name": "ⵇⵓⴱⵔⵓⵙ"
+ },
+ "KM": {
+ "name": "ⵇⵓⵎⵓⵔ"
+ },
+ "EC": {
+ "name": "ⵉⴽⵡⴰⴷⵓⵔ"
+ },
+ "IR": {
+ "name": "ⵉⵔⴰâµ"
+ },
+ "ER": {
+ "name": "ⵉⵔⵉⵜⵉⵔⵢⴰ"
+ },
+ "IE": {
+ "name": "ⵉⵔâµâ´°âµâ´·â´°"
+ },
+ "IS": {
+ "name": "ⵉⵙâµâ´°âµâ´·"
+ },
+ "IL": {
+ "name": "ⵉⵙⵔⴰⵢⵉâµ"
+ },
+ "EE": {
+ "name": "ⵉⵙⵜⵓâµâµ¢â´°"
+ },
+ "ET": {
+ "name": "ⵉⵜⵢⵓⴱⵢⴰ"
+ },
+ "IT": {
+ "name": "ⵉⵟⴰâµâµ¢â´°"
+ },
+ "US": {
+ "name": "ⵉⵡⵓâµâ´°â´½ ⵎⵓâµâµâµ‰âµ ⵠⵎⵉⵔⵉⴽⴰâµ"
+ },
+ "JM": {
+ "name": "ⵊⴰⵎⴰⵢⴽⴰ"
+ },
+ "GE": {
+ "name": "ⵊⵓⵔⵊⵢⴰ"
+ },
+ "LV": {
+ "name": "âµâ´°âµœâ´¼âµ¢â´°"
+ },
+ "LA": {
+ "name": "âµâ´°âµ¡âµ™"
+ },
+ "KW": {
+ "name": "âµâ´½âµ¡âµ‰âµœ"
+ },
+ "IN": {
+ "name": "âµâµ€âµ‰âµâ´·"
+ },
+ "IQ": {
+ "name": "âµâµ„ⵉⵔⴰⵇ"
+ },
+ "LR": {
+ "name": "âµâµ‰â´±âµ‰âµ”ⵢⴰ"
+ },
+ "LY": {
+ "name": "âµâµ‰â´±âµ¢â´°"
+ },
+ "LI": {
+ "name": "âµâµ‰â´½âµ‰âµâµ›âµœâ´°âµ¢âµ"
+ },
+ "AE": {
+ "name": "âµâµ‰âµŽâ´°âµ”ⴰⵜ"
+ },
+ "LS": {
+ "name": "âµâµ‰âµšâµ“ⵟⵓ"
+ },
+ "LT": {
+ "name": "âµâµ‰âµœâµ¡â´°âµâµ¢â´°"
+ },
+ "MA": {
+ "name": "âµâµŽâµ–ⵔⵉⴱ"
+ },
+ "LB": {
+ "name": "âµâµ“â´±âµâ´°âµ"
+ },
+ "LU": {
+ "name": "âµâµ“ⴽⵙⴰâµâ´±âµ“ⵔⴳ"
+ },
+ "JO": {
+ "name": "âµâµ“ⵔⴷⵓâµ"
+ },
+ "JP": {
+ "name": "âµâµ¢â´°â´±â´°âµ"
+ },
+ "GR": {
+ "name": "âµâµ¢âµ“âµâ´°âµ"
+ },
+ "MG": {
+ "name": "ⵎⴰⴷⴰⵖⴰⵛⵇⴰⵔ"
+ },
+ "MW": {
+ "name": "ⵎⴰâµâ´°âµ¡âµ‰"
+ },
+ "MV": {
+ "name": "ⵎⴰâµâ´·âµ‰â´¼"
+ },
+ "ML": {
+ "name": "ⵎⴰâµâµ‰"
+ },
+ "MY": {
+ "name": "ⵎⴰâµâµ‰âµ£âµ¢â´°"
+ },
+ "MT": {
+ "name": "ⵎⴰâµâµŸâ´°"
+ },
+ "MQ": {
+ "name": "ⵎⴰⵔⵜⵉâµâµ‰â´½"
+ },
+ "MK": {
+ "name": "ⵎⴰⵙⵉⴷⵓâµâµ¢â´°"
+ },
+ "YT": {
+ "name": "ⵎⴰⵢⵓⵟ"
+ },
+ "FM": {
+ "name": "ⵎⵉⴽⵔⵓâµâµ‰âµ£âµ¢â´°"
+ },
+ "MX": {
+ "name": "ⵎⵉⴽⵙⵉⴽ"
+ },
+ "EG": {
+ "name": "ⵎⵉⵚⵕ"
+ },
+ "MN": {
+ "name": "ⵎâµâµ–ⵓâµâµ¢â´°"
+ },
+ "MD": {
+ "name": "ⵎⵓâµâ´·âµ“ⴼⵢⴰ"
+ },
+ "MC": {
+ "name": "ⵎⵓâµâ´°â´½âµ“"
+ },
+ "MS": {
+ "name": "ⵎⵓâµâµ™âµ‰âµ”ⴰⵜ"
+ },
+ "MU": {
+ "name": "ⵎⵓⵔⵉⵙ"
+ },
+ "MR": {
+ "name": "ⵎⵓⵕⵉⵟⴰâµâµ¢â´°"
+ },
+ "MZ": {
+ "name": "ⵎⵓⵣâµâ´±âµ‰âµ‡"
+ },
+ "MM": {
+ "name": "ⵎⵢⴰâµâµŽâ´°âµ”"
+ },
+ "NA": {
+ "name": "âµâ´°âµŽâµ‰â´±âµ¢â´°"
+ },
+ "NR": {
+ "name": "âµâ´°âµ¡âµ”ⵓ"
+ },
+ "NP": {
+ "name": "âµâµ‰â´±â´°âµ"
+ },
+ "NI": {
+ "name": "âµâµ‰â´½â´°âµ”ⴰⴳⵡⴰ"
+ },
+ "NG": {
+ "name": "âµâµ‰âµŠâµ‰âµ”ⵢⴰ"
+ },
+ "NU": {
+ "name": "âµâµ‰âµ¡âµ‰"
+ },
+ "NE": {
+ "name": "âµâµâµ‰âµŠâµ‰âµ”"
+ },
+ "AT": {
+ "name": "âµâµâµŽâµ™â´°"
+ },
+ "NO": {
+ "name": "âµâµâµ”ⵡⵉⵊ"
+ },
+ "NZ": {
+ "name": "âµâµ¢âµ“ⵣⵉâµâ´°âµâ´·â´°"
+ },
+ "UA": {
+ "name": "ⵓⴽⵔⴰâµâµ¢â´°"
+ },
+ "UY": {
+ "name": "ⵓⵔⵓⴳⵡⴰⵢ"
+ },
+ "UG": {
+ "name": "ⵓⵖⴰâµâ´·â´°"
+ },
+ "AU": {
+ "name": "ⵓⵙⵜⵔⴰâµâµ¢â´°"
+ },
+ "UZ": {
+ "name": "ⵓⵣⴱⴰⴽⵉⵙⵜⴰâµ"
+ },
+ "RE": {
+ "name": "ⵔⵉⵢⵓâµâµ¢âµ“âµ"
+ },
+ "RO": {
+ "name": "ⵔⵓⵎⴰâµâµ¢â´°"
+ },
+ "RU": {
+ "name": "ⵔⵓⵙⵢⴰ"
+ },
+ "RW": {
+ "name": "ⵔⵡⴰâµâ´·â´°"
+ },
+ "GH": {
+ "name": "âµ–â´°âµâ´°"
+ },
+ "GN": {
+ "name": "ⵖⵉâµâµ¢â´°"
+ },
+ "GW": {
+ "name": "ⵖⵉâµâµ¢â´° ⴱⵉⵙⴰⵡ"
+ },
+ "GQ": {
+ "name": "ⵖⵉâµâµ¢â´° ⵠⵉⴽⵡⴰⴷⵓⵔ"
+ },
+ "GD": {
+ "name": "âµ–âµ”âµâ´°âµŸâ´°"
+ },
+ "SV": {
+ "name": "ⵙⴰâµâ´¼â´°â´·âµ“âµ”"
+ },
+ "WS": {
+ "name": "ⵙⴰⵎⵡⴰ"
+ },
+ "AS": {
+ "name": "ⵙⴰⵎⵡⴰ ⵜⴰⵎⵉⵔⵉⴽⴰâµâµ‰âµœ"
+ },
+ "PM": {
+ "name": "ⵙⴰâµâ´±âµ¢âµ‰âµ” â´· ⵎⵉⴽâµâµ“âµ"
+ },
+ "VC": {
+ "name": "ⵙⴰâµâ´¼â´°âµâµ™â´°âµ â´· ⴳⵔⵉâµâ´°â´·âµ‰âµ"
+ },
+ "KN": {
+ "name": "ⵙⴰâµâ´½âµ”ⵉⵙ â´· âµâµ‰â´¼âµ‰âµ™"
+ },
+ "SM": {
+ "name": "ⵙⴰâµâµŽâ´°âµ”ⵉâµâµ“"
+ },
+ "SH": {
+ "name": "ⵙⴰâµâµœâµ‰âµâµ‰âµ"
+ },
+ "LC": {
+ "name": "ⵙⴰâµâµœâµâµ“ⵙⵉ"
+ },
+ "ST": {
+ "name": "ⵙⴰⵡⵟⵓⵎⵉ â´· ⴱⵔⴰâµâµ™âµ‰â´±"
+ },
+ "ES": {
+ "name": "ⵙⴱⴰâµâµ¢â´°"
+ },
+ "SK": {
+ "name": "âµ™âµâµ“ⴼⴰⴽⵢⴰ"
+ },
+ "SI": {
+ "name": "âµ™âµâµ“ⴼⵉâµâµ¢â´°"
+ },
+ "SG": {
+ "name": "âµ™âµâµ–ⴰⴼⵓⵔⴰ"
+ },
+ "SR": {
+ "name": "ⵙⵓⵔⵉâµâ´°âµŽ"
+ },
+ "SY": {
+ "name": "ⵙⵓⵔⵢⴰ"
+ },
+ "LK": {
+ "name": "ⵙⵔⵉâµâ´°âµâ´½â´°"
+ },
+ "SA": {
+ "name": "ⵙⵙⴰⵄⵓⴷⵉⵢⴰ"
+ },
+ "SN": {
+ "name": "ⵙⵙⵉâµâµ‰â´³â´°âµ"
+ },
+ "SL": {
+ "name": "ⵙⵙⵉⵔⴰâµâµ¢âµ“âµ"
+ },
+ "SC": {
+ "name": "ⵙⵙⵉⵛⵉâµ"
+ },
+ "SD": {
+ "name": "ⵙⵙⵓⴷⴰâµ"
+ },
+ "SE": {
+ "name": "ⵙⵙⵡⵉⴷ"
+ },
+ "SZ": {
+ "name": "ⵙⵡⴰⵣⵉâµâ´°âµâ´·â´°"
+ },
+ "CH": {
+ "name": "ⵙⵡⵉⵙⵔⴰ"
+ },
+ "SO": {
+ "name": "ⵚⵚⵓⵎⴰâµ"
+ },
+ "CL": {
+ "name": "ⵛⵛⵉâµâµ‰"
+ },
+ "CN": {
+ "name": "ⵛⵛⵉâµâµ¡â´°"
+ },
+ "CD": {
+ "name": "ⵜⴰⴳⴷⵓⴷⴰâµâµœ ⵜⴰⴷⵉⵎⵓⵇⵔⴰⵜⵉⵜ ⵠⴽⵓâµâ´³âµ“"
+ },
+ "DO": {
+ "name": "ⵜⴰⴳⴷⵓⴷⴰâµâµœ ⵜⴰⴷⵓⵎⵉâµâµ‰â´½âµœ"
+ },
+ "CF": {
+ "name": "ⵜⴰⴳⴷⵓⴷⴰâµâµœ ⵜⴰâµâ´°âµŽâµŽâ´°âµ™âµœ ⵠⵉⴼⵔⵉⵇⵢⴰ"
+ },
+ "CZ": {
+ "name": "ⵜⴰⴳⴷⵓⴷⴰâµâµœ ⵜⴰⵜⵛⵉⴽⵉⵜ"
+ },
+ "GB": {
+ "name": "ⵜⴰⴳâµâ´·âµ‰âµœ ⵉⵎⵓâµâµ"
+ },
+ "TJ": {
+ "name": "ⵜⴰⴷⵊⴰⴽⵉⵙⵜⴰâµ"
+ },
+ "IO": {
+ "name": "ⵜⴰⵎâµâ´°â´¹âµœ ⵜⴰâµâ´³âµâµ‰âµ£âµ‰âµœ ⵠⵓⴳⴰⵔⵓ ⴰⵀⵉâµâ´·âµ‰"
+ },
+ "CV": {
+ "name": "ⵜⵉⴳⵣⵉⵔⵉⵠⵠⴽⴰⴱⴱⵉⵔⴷⵉ"
+ },
+ "KY": {
+ "name": "ⵜⵉⴳⵣⵉⵔⵉⵠⵠⴽⴰⵢⵎⴰâµ"
+ },
+ "CK": {
+ "name": "ⵜⵉⴳⵣⵉⵔⵉⵠⵠⴽⵓⴽ"
+ },
+ "FK": {
+ "name": "ⵜⵉⴳⵣⵉⵔⵉⵠⵠⵎⴰâµâ´°âµ¡âµ‰"
+ },
+ "MH": {
+ "name": "ⵜⵉⴳⵣⵉⵔⵉⵠⵠⵎⴰⵔⵛⴰâµ"
+ },
+ "MP": {
+ "name": "ⵜⵉⴳⵣⵉⵔⵉⵠⵠⵎⴰⵔⵢⴰⵠⵠⵉⵥⵥâµâµŽâ´¹"
+ },
+ "NF": {
+ "name": "ⵜⵉⴳⵣⵉⵔⵉⵠⵠâµâµ“ⵔⴼⵓâµâ´½"
+ },
+ "SB": {
+ "name": "ⵜⵉⴳⵣⵉⵔⵉⵠⵠⵙⴰâµâµ“ⵎⴰâµ"
+ },
+ "TC": {
+ "name": "ⵜⵉⴳⵣⵉⵔⵉⵠⵠⵜⵓⵔⴽⵢⴰ ⴷ ⴽⴰⵢⴽ"
+ },
+ "VI": {
+ "name": "ⵜⵉⴳⵣⵉⵔⵉⵠⵜⵉⵎⴳⴰⴷ ⵠⵉⵡⵓâµâ´°â´½ ⵎⵓâµâµâµ‰âµ"
+ },
+ "VG": {
+ "name": "ⵜⵉⴳⵣⵉⵔⵉⵠⵜⵉⵎⴳⴰⴷ âµ âµâµâ´³âµâµ‰âµ£"
+ },
+ "TL": {
+ "name": "ⵜⵉⵎⵓⵔ âµ âµâµ‡â´±âµâµœ"
+ },
+ "TV": {
+ "name": "ⵜⵓⴼⴰâµâµ“"
+ },
+ "TN": {
+ "name": "ⵜⵓâµâµ™"
+ },
+ "TM": {
+ "name": "ⵜⵓⵔⴽⵎⴰâµâµ™âµœâ´°âµ"
+ },
+ "TR": {
+ "name": "ⵜⵓⵔⴽⵢⴰ"
+ },
+ "TT": {
+ "name": "ⵜⵔⵉâµâµ‰â´·â´°â´· â´· ⵟⵓⴱⴰⴳⵓ"
+ },
+ "TD": {
+ "name": "ⵜⵛⴰⴷ"
+ },
+ "TZ": {
+ "name": "ⵟⴰâµâµ¥â´°âµâµ¢â´°"
+ },
+ "TH": {
+ "name": "ⵟⴰⵢâµâ´°âµâ´·"
+ },
+ "TW": {
+ "name": "ⵟⴰⵢⵡⴰâµ"
+ },
+ "TG": {
+ "name": "ⵟⵓⴳⵓ"
+ },
+ "TK": {
+ "name": "ⵟⵓⴽâµâ´°âµ¡"
+ },
+ "TO": {
+ "name": "ⵟⵓâµâ´³â´°"
+ },
+ "WF": {
+ "name": "ⵡⴰâµâµ‰âµ™ â´· ⴼⵓⵜⵓâµâ´°"
+ },
+ "YE": {
+ "name": "ⵢⴰⵎⴰâµ"
+ },
+ "ZM": {
+ "name": "ⵣⴰⵎⴱⵢⴰ"
+ },
+ "ZW": {
+ "name": "ⵣⵉⵎⴱⴰⴱⵡⵉ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/si.json b/library/intl/resources/country/si.json
new file mode 100644
index 000000000..d6fad340f
--- /dev/null
+++ b/library/intl/resources/country/si.json
@@ -0,0 +1,761 @@
+{
+ "IE": {
+ "name": "අයර්ලන්තය"
+ },
+ "IM": {
+ "name": "අයිල් ඔෆ් මෑන්"
+ },
+ "IS": {
+ "name": "අයිස්ලන්තය"
+ },
+ "AW": {
+ "name": "අරුබà·à·€"
+ },
+ "AZ": {
+ "name": "අසර්බයිජà·à¶±à¶º"
+ },
+ "AR": {
+ "name": "ආර්ජෙන්ටිනà·à·€"
+ },
+ "AM": {
+ "name": "ආර්මේනියà·à·€"
+ },
+ "AI": {
+ "name": "ඇන්ගුයිලà·à·€"
+ },
+ "AO": {
+ "name": "ඇන්ගà·à¶½à·à·€"
+ },
+ "AQ": {
+ "name": "ඇන්ටà·à¶šà·Šà¶§à·’කà·à·€"
+ },
+ "AG": {
+ "name": "ඇන්ටිගුව෠සහ බà·à¶¶à·’යුඩà·à·€"
+ },
+ "AD": {
+ "name": "ඇන්ඩà·à¶»à·à·€"
+ },
+ "VI": {
+ "name": "ඇමරිකà·à¶±à·” වර්ජින් දූපත්"
+ },
+ "AS": {
+ "name": "ඇමරිකà·à¶±à·” à·ƒà·à¶¸à·à·€à·à·€"
+ },
+ "DZ": {
+ "name": "ඇල්ජීරියà·à·€"
+ },
+ "AL": {
+ "name": "ඇල්බේනියà·à·€"
+ },
+ "AC": {
+ "name": "ඇසෙන්ෂන් දිවයින"
+ },
+ "AF": {
+ "name": "ඇෆ්ගනිස්ථà·à¶±à¶º"
+ },
+ "EC": {
+ "name": "ඉක්වදà·à¶»à¶º"
+ },
+ "IT": {
+ "name": "ඉතà·à¶½à·’ය"
+ },
+ "ET": {
+ "name": "ඉතියà·à¶´à·’යà·à·€"
+ },
+ "IN": {
+ "name": "ඉන්දියà·à·€"
+ },
+ "ID": {
+ "name": "ඉන්දුනීසියà·à·€"
+ },
+ "IQ": {
+ "name": "ඉරà·à¶šà¶º"
+ },
+ "IR": {
+ "name": "ඉරà·à¶±à¶º"
+ },
+ "EG": {
+ "name": "ඊජිප්තුව"
+ },
+ "IL": {
+ "name": "ඊà·à·Šâ€à¶»à·à¶ºà¶½à¶º"
+ },
+ "UG": {
+ "name": "උගන්ඩà·à·€"
+ },
+ "KP": {
+ "name": "උතුරු කොරියà·à·€"
+ },
+ "MP": {
+ "name": "උතුරු මරියà·à¶±à· දූපත්"
+ },
+ "UY": {
+ "name": "උරුගුවේ"
+ },
+ "UZ": {
+ "name": "උස්බෙකිස්ථà·à¶±à¶º"
+ },
+ "AE": {
+ "name": "එක්සත් අරà·à¶¶à·’ එමිර් රà·à¶¢à·Šâ€à¶ºà¶º"
+ },
+ "UM": {
+ "name": "එක්සත් ජනපද ඈත දූපත්"
+ },
+ "US": {
+ "name": "එක්සත් ජනපදය"
+ },
+ "GB": {
+ "name": "එක්සත් රà·à¶¢à¶°à·à¶±à·’ය"
+ },
+ "ER": {
+ "name": "එරිත්â€à¶»à·’යà·à·€"
+ },
+ "SV": {
+ "name": "එල් à·ƒà·à¶½à·Šà·€à¶¯à·à¶»à¶º"
+ },
+ "EE": {
+ "name": "එස්තà·à¶±à·’යà·à·€"
+ },
+ "AT": {
+ "name": "ඔස්ට්â€à¶»à·’යà·à·€"
+ },
+ "OM": {
+ "name": "ඕමà·à¶±à¶º"
+ },
+ "AX": {
+ "name": "ඕලන්ඩ් දූපත්"
+ },
+ "AU": {
+ "name": "ඕස්ට්â€à¶»à·šà¶½à·’යà·à·€"
+ },
+ "QA": {
+ "name": "කටà·à¶»à·Š"
+ },
+ "KZ": {
+ "name": "කසකස්තà·à¶±à¶º"
+ },
+ "KH": {
+ "name": "කà·à¶¸à·Šà¶¶à·à¶¢à¶º"
+ },
+ "CA": {
+ "name": "කà·à¶±à¶©à·à·€"
+ },
+ "IC": {
+ "name": "කà·à¶±à¶»à·’ සූපත්"
+ },
+ "CM": {
+ "name": "කà·à¶¸à¶»à·–න්"
+ },
+ "BQ": {
+ "name": "කà·à¶»à·’බියà·à¶±à·” නෙදර්ලන්තය"
+ },
+ "CU": {
+ "name": "කියුබà·à·€"
+ },
+ "KI": {
+ "name": "කිරිබති"
+ },
+ "KG": {
+ "name": "කිර්ගිස්තà·à¶±à¶º"
+ },
+ "CK": {
+ "name": "කුක් දූපත්"
+ },
+ "CW": {
+ "name": "කුරකà·à·€à·"
+ },
+ "KW": {
+ "name": "කුවේටය"
+ },
+ "KE": {
+ "name": "කෙන්යà·à·€"
+ },
+ "CV": {
+ "name": "කේප් වර්ඩ්"
+ },
+ "KY": {
+ "name": "කේමන් දූපත්"
+ },
+ "CD": {
+ "name": "කොංගො - කින්à·à·à·ƒà·"
+ },
+ "CG": {
+ "name": "කොංගො - බ්â€à¶»à·ƒà·à·€à·’ල්"
+ },
+ "CC": {
+ "name": "කොකà·à·ƒà·Š දූපත්"
+ },
+ "KM": {
+ "name": "කොමොරà·à·ƒà·Š"
+ },
+ "XK": {
+ "name": "කොසà·à·€à·"
+ },
+ "CR": {
+ "name": "කොස්ටරිකà·à·€"
+ },
+ "CO": {
+ "name": "කොළොම්බියà·à·€"
+ },
+ "CI": {
+ "name": "කà·à¶§à·Š දි අයිවරි"
+ },
+ "CX": {
+ "name": "ක්â€à¶»à·’ස්මස් දූපත"
+ },
+ "HR": {
+ "name": "ක්â€à¶»à·œà¶’ෂියà·à·€"
+ },
+ "GY": {
+ "name": "ගයනà·à·€"
+ },
+ "GG": {
+ "name": "ගර්න්සිය"
+ },
+ "GA": {
+ "name": "ගà·à¶¶à·œà¶±à·Š"
+ },
+ "GM": {
+ "name": "ගà·à¶¸à·Šà¶¶à·’යà·à·€"
+ },
+ "GN": {
+ "name": "ගිණියà·à·€"
+ },
+ "GW": {
+ "name": "ගිනි බිසව්"
+ },
+ "GU": {
+ "name": "ගුවà·à¶¸à·Š"
+ },
+ "GT": {
+ "name": "ගà·à¶­à¶¸à·à¶½à·à·€"
+ },
+ "GD": {
+ "name": "ග්â€à¶»à·à¶±à¶©à·à·€"
+ },
+ "GL": {
+ "name": "ග්â€à¶»à·“න්ලන්තය"
+ },
+ "GR": {
+ "name": "ග්â€à¶»à·“සිය"
+ },
+ "GP": {
+ "name": "ග්වà·à¶©à¶½à·à¶´à·Š"
+ },
+ "GH": {
+ "name": "à¶à·à¶±à·à·€"
+ },
+ "TD": {
+ "name": "චà·à¶ à·Š"
+ },
+ "CL": {
+ "name": "චිලී"
+ },
+ "CN": {
+ "name": "චීනය"
+ },
+ "CZ": {
+ "name": "චෙක් ජනරජය"
+ },
+ "JP": {
+ "name": "ජපà·à¶±à¶º"
+ },
+ "DE": {
+ "name": "ජර්මනිය"
+ },
+ "JE": {
+ "name": "ජර්සි"
+ },
+ "JM": {
+ "name": "ජà·à¶¸à·™à¶ºà·’කà·à·€"
+ },
+ "DJ": {
+ "name": "ජිබුටි"
+ },
+ "GI": {
+ "name": "ජිබ්â€à¶»à·à¶½à·Šà¶§à·à·€"
+ },
+ "GE": {
+ "name": "ජà·à¶»à·Šà¶¢à·’යà·à·€"
+ },
+ "JO": {
+ "name": "ජà·à¶»à·Šà¶¯à·à¶±à¶º"
+ },
+ "TJ": {
+ "name": "ටජිකිස්තà·à¶±à¶º"
+ },
+ "TM": {
+ "name": "ටර්ක්මෙනිස්ථà·à¶±à¶º"
+ },
+ "TC": {
+ "name": "ටර්ක්ස් සහ කයිකොස් දූපත්"
+ },
+ "TZ": {
+ "name": "ටà·à¶±à·Šà·ƒà·à¶±à·’යà·à·€"
+ },
+ "TL": {
+ "name": "ටිමà·à¶»à·Š - ලෙස්ත්"
+ },
+ "TN": {
+ "name": "ටියුනීසියà·à·€"
+ },
+ "TV": {
+ "name": "ටුවà·à¶½à·–"
+ },
+ "TO": {
+ "name": "ටොංගà·"
+ },
+ "TK": {
+ "name": "ටොකලà·à·€à·”"
+ },
+ "TG": {
+ "name": "ටොගà·"
+ },
+ "TT": {
+ "name": "ට්â€à¶»à·’නිඩෑඩ් සහ ටොබà·à¶œà·"
+ },
+ "TA": {
+ "name": "ට්â€à¶»à·’ස්ටන් ද කුන්හà·"
+ },
+ "DK": {
+ "name": "ඩෙන්මà·à¶»à·Šà¶šà¶º"
+ },
+ "DO": {
+ "name": "ඩොමිනික෠ජනරජය"
+ },
+ "DM": {
+ "name": "ඩොමිනිකà·à·€"
+ },
+ "TH": {
+ "name": "තà·à¶ºà·’ලන්තය"
+ },
+ "TW": {
+ "name": "තà·à¶ºà·’à·€à·à¶±à¶º"
+ },
+ "TR": {
+ "name": "තුර්කිය"
+ },
+ "ZA": {
+ "name": "දකුණු අප්â€à¶»à·’කà·à·€"
+ },
+ "KR": {
+ "name": "දකුණු කොරියà·à·€"
+ },
+ "GS": {
+ "name": "දකුණු ජà·à¶»à·Šà¶¢à·’යà·à·€ සහ දකුණු à·ƒà·à¶±à·Šà¶©à·Šà·€à·’ච් දූපත්"
+ },
+ "TF": {
+ "name": "දකුණු ප්â€à¶»à¶‚෠දූපත් සමූහය"
+ },
+ "SS": {
+ "name": "දකුණු සුඩà·à¶±à¶º"
+ },
+ "DG": {
+ "name": "දියà·à¶œà· ගà·à¶»à·Šà·ƒà·’යà·"
+ },
+ "NE": {
+ "name": "නයිජර්"
+ },
+ "NG": {
+ "name": "නයිජීරියà·à·€"
+ },
+ "NC": {
+ "name": "නව කà·à¶½à·’ඩà·à¶±à·’යà·à·€"
+ },
+ "NZ": {
+ "name": "නවසීලන්තය"
+ },
+ "NR": {
+ "name": "නà·à·€à·”රු"
+ },
+ "NA": {
+ "name": "නà·à¶¸à·“බියà·à·€"
+ },
+ "NI": {
+ "name": "නිකරගුවà·à·€"
+ },
+ "NU": {
+ "name": "නියූ"
+ },
+ "NL": {
+ "name": "නෙදර්ලන්තය"
+ },
+ "NP": {
+ "name": "නේපà·à¶½à¶º"
+ },
+ "NO": {
+ "name": "නà·à¶»à·Šà·€à·š"
+ },
+ "NF": {
+ "name": "නà·à·†à·à¶šà·Š දූපත"
+ },
+ "PS": {
+ "name": "පලස්තීන රà·à¶¢à·Šâ€à¶ºà¶º"
+ },
+ "PW": {
+ "name": "පලà·à·€à·”"
+ },
+ "PK": {
+ "name": "පà·à¶šà·’ස්තà·à¶±à¶º"
+ },
+ "PA": {
+ "name": "පà·à¶±à¶¸à·à·€"
+ },
+ "PG": {
+ "name": "පà·à¶´à·”ව෠නිව් ගිනියà·à·€"
+ },
+ "PY": {
+ "name": "පà·à¶»à¶œà·”වේ"
+ },
+ "PN": {
+ "name": "පිට්කෙය්න් දූපත්"
+ },
+ "PH": {
+ "name": "පිලිපීනය"
+ },
+ "PR": {
+ "name": "පුවර්ට෠රිකà·"
+ },
+ "PT": {
+ "name": "පෘතුගà·à¶½à¶º"
+ },
+ "PE": {
+ "name": "පේරු"
+ },
+ "PL": {
+ "name": "පà·à¶½à¶±à·Šà¶­à¶º"
+ },
+ "GF": {
+ "name": "ප්â€à¶»à¶‚෠ගයනà·à·€"
+ },
+ "PF": {
+ "name": "ප්â€à¶»à¶‚෠පොලිනීසියà·à·€"
+ },
+ "FR": {
+ "name": "ප්â€à¶»à¶‚à·à¶º"
+ },
+ "BD": {
+ "name": "බංග්ලà·à¶¯à·šà·à¶º"
+ },
+ "EH": {
+ "name": "බටහිර සහරà·à·€"
+ },
+ "BF": {
+ "name": "බර්කින෠ෆà·à·ƒà·"
+ },
+ "BM": {
+ "name": "බර්මියුඩà·"
+ },
+ "BG": {
+ "name": "බල්ගේරියà·à·€"
+ },
+ "BS": {
+ "name": "බහමà·à·ƒà·Š"
+ },
+ "BH": {
+ "name": "බහරේන්"
+ },
+ "BB": {
+ "name": "බà·à¶»à·Šà¶¶à¶©à·à·ƒà·Š"
+ },
+ "BI": {
+ "name": "බුරුන්දි"
+ },
+ "BN": {
+ "name": "බෲනà·à¶ºà·’"
+ },
+ "BJ": {
+ "name": "බෙනින්"
+ },
+ "BY": {
+ "name": "බෙලරුස්"
+ },
+ "BZ": {
+ "name": "බෙලීස්"
+ },
+ "BE": {
+ "name": "බෙල්ජියම"
+ },
+ "BW": {
+ "name": "බොට්ස්වà·à¶±à·"
+ },
+ "BO": {
+ "name": "බොලීවියà·à·€"
+ },
+ "BA": {
+ "name": "බොස්නියà·à·€ සහ හර්සගොවීනà·à·€"
+ },
+ "BR": {
+ "name": "බ්â€à¶»à·ƒà·“ලය"
+ },
+ "IO": {
+ "name": "බ්â€à¶»à·’තà·à¶±à·Šâ€à¶º ඉන්දීය à·ƒà·à¶œà¶» බල ප්â€à¶»à¶¯à·šà·à¶º"
+ },
+ "VG": {
+ "name": "බ්â€à¶»à·’තà·à¶±à·Šâ€à¶º වර්ජින් දූපත්"
+ },
+ "BT": {
+ "name": "භූතà·à¶±à¶º"
+ },
+ "MO": {
+ "name": "මකà·à·€à·” චීන විà·à·šà·‚ පරිපà·à¶½à¶± කලà·à¶´à¶º"
+ },
+ "CF": {
+ "name": "මධ්â€à¶ºà¶¸ අප්â€à¶»à·’කà·à¶±à·” ජනරජය"
+ },
+ "FM": {
+ "name": "මයික්â€à¶»à·œà¶±à·“සියà·à·€"
+ },
+ "YT": {
+ "name": "මයà·à¶§à·Š"
+ },
+ "MQ": {
+ "name": "මර්ටිනික්"
+ },
+ "MW": {
+ "name": "මලà·à·€à·’"
+ },
+ "MV": {
+ "name": "මà·à¶½ දිවයින"
+ },
+ "ML": {
+ "name": "මà·à¶½à·’"
+ },
+ "MH": {
+ "name": "මà·à·‚ල් දූපත්"
+ },
+ "MG": {
+ "name": "මà·à¶©à¶œà·ƒà·Šà¶šà¶»à¶º"
+ },
+ "MY": {
+ "name": "මà·à¶½à·šà·ƒà·’යà·à·€"
+ },
+ "MK": {
+ "name": "මà·à·ƒà·’ඩà·à¶±à·’යà·à·€"
+ },
+ "MM": {
+ "name": "මියන්මà·à¶»à¶º (බුරුමය)"
+ },
+ "MU": {
+ "name": "මුරුසිය"
+ },
+ "MX": {
+ "name": "මෙක්සිකà·à·€"
+ },
+ "MC": {
+ "name": "මොනà·à¶šà·à·€"
+ },
+ "MN": {
+ "name": "මොන්ගà·à¶½à·’යà·à·€"
+ },
+ "ME": {
+ "name": "මොන්ටෙනීග්â€à¶»à·"
+ },
+ "MS": {
+ "name": "මොන්සෙරà·à¶§à·Š"
+ },
+ "MR": {
+ "name": "මොරිටේනියà·à·€"
+ },
+ "MA": {
+ "name": "මොරොක්කà·à·€"
+ },
+ "MD": {
+ "name": "මොල්ඩà·à·€à·à·€"
+ },
+ "MZ": {
+ "name": "මොසà·à¶¸à·Šà¶¶à·’ක්"
+ },
+ "MT": {
+ "name": "මà·à¶½à·Šà¶§à·à·€"
+ },
+ "UA": {
+ "name": "යුක්රේනය"
+ },
+ "YE": {
+ "name": "යේමනය"
+ },
+ "RE": {
+ "name": "රීයුනියන්"
+ },
+ "RO": {
+ "name": "රුමේනියà·à·€"
+ },
+ "RW": {
+ "name": "රුවන්ඩà·à·€"
+ },
+ "RU": {
+ "name": "රුසියà·à·€"
+ },
+ "LU": {
+ "name": "ලක්à·à¶¸à·Šà¶¶à¶»à·Šà¶œà·Š"
+ },
+ "LR": {
+ "name": "ලයිබීරියà·à·€"
+ },
+ "LA": {
+ "name": "ලà·à¶•à·ƒà¶º"
+ },
+ "LV": {
+ "name": "ලà·à¶§à·Šà·€à·’යà·à·€"
+ },
+ "LI": {
+ "name": "ලික්ටන්ස්ටයින්"
+ },
+ "LT": {
+ "name": "ලිතුවේනියà·à·€"
+ },
+ "LY": {
+ "name": "ලිබියà·à·€"
+ },
+ "LB": {
+ "name": "ලෙබනනය"
+ },
+ "LS": {
+ "name": "ලෙසතà·"
+ },
+ "VA": {
+ "name": "වතිකà·à¶±à·” නගරය"
+ },
+ "VU": {
+ "name": "වනුවà·à¶§à·”"
+ },
+ "WF": {
+ "name": "à·€à·à¶½à·’ස් සහ ෆුටුනà·"
+ },
+ "VN": {
+ "name": "වියට්නà·à¶¸à¶º"
+ },
+ "VE": {
+ "name": "වෙනිසියුලà·à·€"
+ },
+ "KN": {
+ "name": "à·à·à¶±à·Šà¶­ කිට්ස් සහ නේවිස්"
+ },
+ "PM": {
+ "name": "à·à·à¶±à·Šà¶­ පියරේ සහ මà·à¶šà·à¶½à¶±à·Š"
+ },
+ "BL": {
+ "name": "à·à·à¶±à·Šà¶­ බර්තලෙමි"
+ },
+ "MF": {
+ "name": "à·à·à¶±à·Šà¶­ මà·à¶»à·Šà¶§à·’න්"
+ },
+ "SX": {
+ "name": "à·à·à¶±à·Šà¶­ මà·à¶»à·Šà¶§à·™à¶±à·Š"
+ },
+ "LC": {
+ "name": "à·à·à¶±à·Šà¶­ ලුසියà·"
+ },
+ "VC": {
+ "name": "à·à·à¶±à·Šà¶­ වින්සන්ට් සහ ග්â€à¶»à·™à¶±à¶©à·’න්ස්"
+ },
+ "SH": {
+ "name": "à·à·à¶±à·Šà¶­ හෙලේනà·"
+ },
+ "LK": {
+ "name": "à·à·Šâ€à¶»à·“ ලංකà·à·€"
+ },
+ "GQ": {
+ "name": "සමක ගිනියà·à·€"
+ },
+ "CY": {
+ "name": "සයිප්â€à¶»à·ƒà¶º"
+ },
+ "RS": {
+ "name": "සර්බියà·à·€"
+ },
+ "ST": {
+ "name": "à·ƒà·à¶• තà·à¶¸à·Š සහ ප්â€à¶»à·’න්සිප්"
+ },
+ "SM": {
+ "name": "à·ƒà·à¶±à·Š මà·à¶»à·’නà·"
+ },
+ "WS": {
+ "name": "à·ƒà·à¶¸à·à·€à·"
+ },
+ "ZM": {
+ "name": "à·ƒà·à¶¸à·Šà¶¶à·’යà·à·€"
+ },
+ "SG": {
+ "name": "සිංගප්පූරුව"
+ },
+ "ZW": {
+ "name": "සිම්බà·à¶¶à·Šà·€à·š"
+ },
+ "SL": {
+ "name": "සියරà·à¶½à·’යà·à¶±à·Š"
+ },
+ "SY": {
+ "name": "සිරියà·à·€"
+ },
+ "SC": {
+ "name": "සීà·à·™à¶½à·Šà·ƒà·Š"
+ },
+ "SR": {
+ "name": "සුරිනà·à¶¸à¶º"
+ },
+ "SD": {
+ "name": "සූඩà·à¶±à¶º"
+ },
+ "SN": {
+ "name": "සෙනගà·à¶½à¶º"
+ },
+ "EA": {
+ "name": "සෙයුට෠සහ මෙලිල්ලà·"
+ },
+ "SB": {
+ "name": "සොලමන් දූපත්"
+ },
+ "SO": {
+ "name": "à·ƒà·à¶¸à·à¶½à·’යà·à·€"
+ },
+ "SA": {
+ "name": "සෞදි අරà·à¶¶à·’ය"
+ },
+ "ES": {
+ "name": "ස්පà·à¶¤à·Šà¶¤à¶º"
+ },
+ "SK": {
+ "name": "ස්ලà·à·€à·à¶šà·’යà·à·€"
+ },
+ "SI": {
+ "name": "ස්ලà·à·€à·šà¶±à·’යà·à·€"
+ },
+ "SZ": {
+ "name": "ස්වà·à·ƒà·’ලන්තය"
+ },
+ "CH": {
+ "name": "ස්විස්ටර්ලන්තය"
+ },
+ "SE": {
+ "name": "ස්වීඩනය"
+ },
+ "SJ": {
+ "name": "ස්වෙල්බර්ඩ් සහ ජේන් මයේන්"
+ },
+ "HU": {
+ "name": "හන්ගේරියà·à·€"
+ },
+ "HT": {
+ "name": "හයිටි"
+ },
+ "HK": {
+ "name": "හොංකොං චීන විà·à·šà·‚ පරිපà·à¶½à¶± කලà·à¶´à¶º"
+ },
+ "HN": {
+ "name": "හොන්ඩුරà·à·ƒà·Š"
+ },
+ "FO": {
+ "name": "à·†à·à¶»à· දූපත්"
+ },
+ "FI": {
+ "name": "ෆින්ලන්තය"
+ },
+ "FJ": {
+ "name": "ෆීජී"
+ },
+ "FK": {
+ "name": "à·†à·à¶šà·Šà¶½à¶±à·Šà¶­ දූපත්"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/sk.json b/library/intl/resources/country/sk.json
new file mode 100644
index 000000000..39d670693
--- /dev/null
+++ b/library/intl/resources/country/sk.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistan"
+ },
+ "AX": {
+ "name": "Ã…landy"
+ },
+ "AL": {
+ "name": "Albánsko"
+ },
+ "DZ": {
+ "name": "Alžírsko"
+ },
+ "AS": {
+ "name": "Americká Samoa"
+ },
+ "VI": {
+ "name": "Americké Panenské ostrovy"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktída"
+ },
+ "AG": {
+ "name": "Antigua a Barbuda"
+ },
+ "AR": {
+ "name": "Argentína"
+ },
+ "AM": {
+ "name": "Arménsko"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascensión"
+ },
+ "AU": {
+ "name": "Austrália"
+ },
+ "AZ": {
+ "name": "Azerbajdžan"
+ },
+ "BS": {
+ "name": "Bahamy"
+ },
+ "BH": {
+ "name": "Bahrajn"
+ },
+ "BD": {
+ "name": "Bangladéš"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgicko"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermudy"
+ },
+ "BT": {
+ "name": "Bhután"
+ },
+ "BY": {
+ "name": "Bielorusko"
+ },
+ "BO": {
+ "name": "Bolívia"
+ },
+ "BA": {
+ "name": "Bosna a Hercegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazília"
+ },
+ "IO": {
+ "name": "Britské indickooceánske územie"
+ },
+ "VG": {
+ "name": "Britské Panenské ostrovy"
+ },
+ "BN": {
+ "name": "Brunej"
+ },
+ "BG": {
+ "name": "Bulharsko"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "EA": {
+ "name": "Ceuta a Melilla"
+ },
+ "CK": {
+ "name": "Cookove ostrovy"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "TD": {
+ "name": "ÄŒad"
+ },
+ "CZ": {
+ "name": "Česká republika"
+ },
+ "ME": {
+ "name": "ÄŒierna Hora"
+ },
+ "CL": {
+ "name": "ÄŒile"
+ },
+ "CN": {
+ "name": "Čína"
+ },
+ "DK": {
+ "name": "Dánsko"
+ },
+ "DG": {
+ "name": "Diego García"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "DO": {
+ "name": "Dominikánska republika"
+ },
+ "DJ": {
+ "name": "Džibutsko"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "EC": {
+ "name": "Ekvádor"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estónsko"
+ },
+ "ET": {
+ "name": "Etiópia"
+ },
+ "FO": {
+ "name": "Faerské ostrovy"
+ },
+ "FK": {
+ "name": "Falklandy"
+ },
+ "FJ": {
+ "name": "Fidži"
+ },
+ "PH": {
+ "name": "Filipíny"
+ },
+ "FI": {
+ "name": "Fínsko"
+ },
+ "GF": {
+ "name": "Francúzska Guayana"
+ },
+ "PF": {
+ "name": "Francúzska Polynézia"
+ },
+ "TF": {
+ "name": "Francúzske južné a antarktické územia"
+ },
+ "FR": {
+ "name": "Francúzsko"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltár"
+ },
+ "GR": {
+ "name": "Grécko"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grónsko"
+ },
+ "GE": {
+ "name": "Gruzínsko"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GY": {
+ "name": "Guayana"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "NL": {
+ "name": "Holandsko"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hongkong – OAO Číny"
+ },
+ "HR": {
+ "name": "Chorvátsko"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonézia"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Irán"
+ },
+ "IE": {
+ "name": "Ãrsko"
+ },
+ "IS": {
+ "name": "Island"
+ },
+ "IL": {
+ "name": "Izrael"
+ },
+ "JM": {
+ "name": "Jamajka"
+ },
+ "JP": {
+ "name": "Japonsko"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordánsko"
+ },
+ "ZA": {
+ "name": "Južná Afrika"
+ },
+ "GS": {
+ "name": "Južná Georgia a Južné Sandwichove ostrovy"
+ },
+ "KR": {
+ "name": "Južná Kórea"
+ },
+ "SS": {
+ "name": "Južný Sudán"
+ },
+ "KY": {
+ "name": "Kajmanie ostrovy"
+ },
+ "KH": {
+ "name": "Kambodža"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanárske ostrovy"
+ },
+ "CV": {
+ "name": "Kapverdy"
+ },
+ "BQ": {
+ "name": "Karibské Holandsko"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KZ": {
+ "name": "Kazachstan"
+ },
+ "KE": {
+ "name": "Keňa"
+ },
+ "KG": {
+ "name": "Kirgizsko"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CC": {
+ "name": "Kokosové ostrovy"
+ },
+ "CO": {
+ "name": "Kolumbia"
+ },
+ "KM": {
+ "name": "Komory"
+ },
+ "CG": {
+ "name": "Kongo - Brazzaville"
+ },
+ "CD": {
+ "name": "Kongo - Kinshasa"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuvajt"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Libéria"
+ },
+ "LY": {
+ "name": "Líbya"
+ },
+ "LI": {
+ "name": "Lichtenštajnsko"
+ },
+ "LT": {
+ "name": "Litva"
+ },
+ "LV": {
+ "name": "Lotyšsko"
+ },
+ "LU": {
+ "name": "Luxembursko"
+ },
+ "MO": {
+ "name": "Macao – OAO Číny"
+ },
+ "MK": {
+ "name": "Macedónsko"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "HU": {
+ "name": "MaÄarsko"
+ },
+ "MY": {
+ "name": "Malajzia"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldivy"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Maroko"
+ },
+ "MH": {
+ "name": "Marshallove ostrovy"
+ },
+ "MQ": {
+ "name": "Martinik"
+ },
+ "MU": {
+ "name": "Maurícius"
+ },
+ "MR": {
+ "name": "Mauritánia"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "UM": {
+ "name": "Menšie odľahlé ostrovy USA"
+ },
+ "MX": {
+ "name": "Mexiko"
+ },
+ "FM": {
+ "name": "Mikronézia"
+ },
+ "MM": {
+ "name": "Mjanmarsko"
+ },
+ "MD": {
+ "name": "Moldavsko"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolsko"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambik"
+ },
+ "NA": {
+ "name": "Namíbia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "DE": {
+ "name": "Nemecko"
+ },
+ "NP": {
+ "name": "Nepál"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigéria"
+ },
+ "NI": {
+ "name": "Nikaragua"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk"
+ },
+ "NO": {
+ "name": "Nórsko"
+ },
+ "NC": {
+ "name": "Nová Kaledónia"
+ },
+ "NZ": {
+ "name": "Nový Zéland"
+ },
+ "OM": {
+ "name": "Omán"
+ },
+ "IM": {
+ "name": "Ostrov Man"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestínske územia"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Nová Guinea"
+ },
+ "PY": {
+ "name": "Paraguaj"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairnove ostrovy"
+ },
+ "CI": {
+ "name": "Pobrežie Slonoviny"
+ },
+ "PL": {
+ "name": "Poľsko"
+ },
+ "PR": {
+ "name": "Portoriko"
+ },
+ "PT": {
+ "name": "Portugalsko"
+ },
+ "AT": {
+ "name": "Rakúsko"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "GQ": {
+ "name": "Rovníková Guinea"
+ },
+ "RO": {
+ "name": "Rumunsko"
+ },
+ "RU": {
+ "name": "Rusko"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "PM": {
+ "name": "Saint Pierre a Miquelon"
+ },
+ "SV": {
+ "name": "Salvádor"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Maríno"
+ },
+ "SA": {
+ "name": "Saudská Arábia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "KP": {
+ "name": "Severná Kórea"
+ },
+ "MP": {
+ "name": "Severné Mariány"
+ },
+ "SC": {
+ "name": "Seychely"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovensko"
+ },
+ "SI": {
+ "name": "Slovinsko"
+ },
+ "SO": {
+ "name": "Somálsko"
+ },
+ "AE": {
+ "name": "Spojené arabské emiráty"
+ },
+ "GB": {
+ "name": "Spojené kráľovstvo"
+ },
+ "US": {
+ "name": "Spojené štáty"
+ },
+ "RS": {
+ "name": "Srbsko"
+ },
+ "LK": {
+ "name": "Srí Lanka"
+ },
+ "CF": {
+ "name": "Stredoafrická republika"
+ },
+ "SD": {
+ "name": "Sudán"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard a Jan Mayen"
+ },
+ "SZ": {
+ "name": "Svazijsko"
+ },
+ "SH": {
+ "name": "Svätá Helena"
+ },
+ "LC": {
+ "name": "Svätá Lucia"
+ },
+ "BL": {
+ "name": "Svätý Bartolomej"
+ },
+ "KN": {
+ "name": "Svätý Krištof a Nevis"
+ },
+ "MF": {
+ "name": "Svätý Martin"
+ },
+ "ST": {
+ "name": "Svätý Tomáš a Princov ostrov"
+ },
+ "VC": {
+ "name": "Svätý Vincent a Grenadíny"
+ },
+ "SY": {
+ "name": "Sýria"
+ },
+ "SB": {
+ "name": "Šalamúnove ostrovy"
+ },
+ "ES": {
+ "name": "Å panielsko"
+ },
+ "CH": {
+ "name": "Å vajÄiarsko"
+ },
+ "SE": {
+ "name": "Švédsko"
+ },
+ "TJ": {
+ "name": "Tadžikistan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "IT": {
+ "name": "Taliansko"
+ },
+ "TZ": {
+ "name": "Tanzánia"
+ },
+ "TH": {
+ "name": "Thajsko"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad a Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisko"
+ },
+ "TR": {
+ "name": "Turecko"
+ },
+ "TM": {
+ "name": "Turkménsko"
+ },
+ "TC": {
+ "name": "Turks a Caicos"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukrajina"
+ },
+ "UY": {
+ "name": "Uruguaj"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikán"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "CX": {
+ "name": "VianoÄný ostrov"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "TL": {
+ "name": "Východný Timor"
+ },
+ "WF": {
+ "name": "Wallis a Futuna"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "EH": {
+ "name": "Západná Sahara"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/sl.json b/library/intl/resources/country/sl.json
new file mode 100644
index 000000000..3033a159c
--- /dev/null
+++ b/library/intl/resources/country/sl.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistan"
+ },
+ "AX": {
+ "name": "Ã…landski otoki"
+ },
+ "AL": {
+ "name": "Albanija"
+ },
+ "DZ": {
+ "name": "Alžirija"
+ },
+ "AS": {
+ "name": "Ameriška Samoa"
+ },
+ "VI": {
+ "name": "Ameriški Deviški otoki"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Angvila"
+ },
+ "AQ": {
+ "name": "Antarktika"
+ },
+ "AG": {
+ "name": "Antigva in Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenija"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Avstralija"
+ },
+ "AT": {
+ "name": "Avstrija"
+ },
+ "AZ": {
+ "name": "Azerbajdžan"
+ },
+ "BS": {
+ "name": "Bahami"
+ },
+ "BH": {
+ "name": "Bahrajn"
+ },
+ "BD": {
+ "name": "Bangladeš"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgija"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BY": {
+ "name": "Belorusija"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermudi"
+ },
+ "BW": {
+ "name": "Bocvana"
+ },
+ "BG": {
+ "name": "Bolgarija"
+ },
+ "BO": {
+ "name": "Bolivija"
+ },
+ "BA": {
+ "name": "Bosna in Hercegovina"
+ },
+ "CX": {
+ "name": "BožiÄni otok"
+ },
+ "BR": {
+ "name": "Brazilija"
+ },
+ "VG": {
+ "name": "Britanski Deviški otoki"
+ },
+ "IO": {
+ "name": "Britansko ozemlje v Indijskem oceanu"
+ },
+ "BN": {
+ "name": "Brunej"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butan"
+ },
+ "CF": {
+ "name": "Centralnoafriška republika"
+ },
+ "EA": {
+ "name": "Ceuta in Melilla"
+ },
+ "CY": {
+ "name": "Ciper"
+ },
+ "CK": {
+ "name": "Cookovi otoki"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "TD": {
+ "name": "ÄŒad"
+ },
+ "CZ": {
+ "name": "Češka"
+ },
+ "CL": {
+ "name": "ÄŒile"
+ },
+ "ME": {
+ "name": "ÄŒrna gora"
+ },
+ "DK": {
+ "name": "Danska"
+ },
+ "CD": {
+ "name": "DemokratiÄna republika Kongo"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "DO": {
+ "name": "Dominikanska republika"
+ },
+ "UM": {
+ "name": "Druga ameriška ozemlja v Tihem oceanu"
+ },
+ "DJ": {
+ "name": "Džibuti"
+ },
+ "EG": {
+ "name": "Egipt"
+ },
+ "EC": {
+ "name": "Ekvador"
+ },
+ "GQ": {
+ "name": "Ekvatorialna Gvineja"
+ },
+ "ER": {
+ "name": "Eritreja"
+ },
+ "EE": {
+ "name": "Estonija"
+ },
+ "ET": {
+ "name": "Etiopija"
+ },
+ "FK": {
+ "name": "Falklandski otoki"
+ },
+ "FO": {
+ "name": "Ferski otoki"
+ },
+ "FJ": {
+ "name": "Fidži"
+ },
+ "PH": {
+ "name": "Filipini"
+ },
+ "FI": {
+ "name": "Finska"
+ },
+ "FR": {
+ "name": "Francija"
+ },
+ "GF": {
+ "name": "Francoska Gvajana"
+ },
+ "PF": {
+ "name": "Francoska Polinezija"
+ },
+ "TF": {
+ "name": "Francosko južno ozemlje"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambija"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "GrÄija"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grenlandija"
+ },
+ "GE": {
+ "name": "Gruzija"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GP": {
+ "name": "Gvadalupe"
+ },
+ "GY": {
+ "name": "Gvajana"
+ },
+ "GT": {
+ "name": "Gvatemala"
+ },
+ "GN": {
+ "name": "Gvineja"
+ },
+ "GW": {
+ "name": "Gvineja Bissau"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HR": {
+ "name": "Hrvaška"
+ },
+ "IN": {
+ "name": "Indija"
+ },
+ "ID": {
+ "name": "Indonezija"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irska"
+ },
+ "IS": {
+ "name": "Islandija"
+ },
+ "IT": {
+ "name": "Italija"
+ },
+ "IL": {
+ "name": "Izrael"
+ },
+ "JM": {
+ "name": "Jamajka"
+ },
+ "JP": {
+ "name": "Japonska"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordanija"
+ },
+ "GS": {
+ "name": "Južna Georgia in Južni Sandwichevi otoki"
+ },
+ "KR": {
+ "name": "Južna Koreja"
+ },
+ "SS": {
+ "name": "Južni Sudan"
+ },
+ "ZA": {
+ "name": "Južnoafriška republika"
+ },
+ "KY": {
+ "name": "Kajmanski otoki"
+ },
+ "KH": {
+ "name": "Kambodža"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanarski otoki"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KZ": {
+ "name": "Kazahstan"
+ },
+ "KE": {
+ "name": "Kenija"
+ },
+ "KG": {
+ "name": "Kirgizistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CN": {
+ "name": "Kitajska"
+ },
+ "CC": {
+ "name": "Kokosovi otoki"
+ },
+ "CO": {
+ "name": "Kolumbija"
+ },
+ "KM": {
+ "name": "Komori"
+ },
+ "CG": {
+ "name": "Kongo - Brazzaville"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuvajt"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvija"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberija"
+ },
+ "LY": {
+ "name": "Libija"
+ },
+ "LI": {
+ "name": "Lihtenštajn"
+ },
+ "LT": {
+ "name": "Litva"
+ },
+ "LU": {
+ "name": "Luksemburg"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "HU": {
+ "name": "Madžarska"
+ },
+ "MK": {
+ "name": "Makedonija"
+ },
+ "MW": {
+ "name": "Malavi"
+ },
+ "MV": {
+ "name": "Maldivi"
+ },
+ "MY": {
+ "name": "Malezija"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Maroko"
+ },
+ "MH": {
+ "name": "Marshallovi otoki"
+ },
+ "MQ": {
+ "name": "Martinik"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "MR": {
+ "name": "Mavretanija"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mehika"
+ },
+ "FM": {
+ "name": "Mikronezija"
+ },
+ "MM": {
+ "name": "Mjanmar (Burma)"
+ },
+ "MD": {
+ "name": "Moldavija"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolija"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambik"
+ },
+ "NA": {
+ "name": "Namibija"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "DE": {
+ "name": "NemÄija"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigerija"
+ },
+ "NI": {
+ "name": "Nikaragva"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NL": {
+ "name": "Nizozemska"
+ },
+ "BQ": {
+ "name": "Nizozemski Karibi"
+ },
+ "NF": {
+ "name": "Norfolški otok"
+ },
+ "NO": {
+ "name": "Norveška"
+ },
+ "NC": {
+ "name": "Nova Kaledonija"
+ },
+ "NZ": {
+ "name": "Nova Zelandija"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "TC": {
+ "name": "OtoÄji Turks in Caicos"
+ },
+ "AC": {
+ "name": "Otok Ascension"
+ },
+ "IM": {
+ "name": "Otok Man"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinsko ozemlje"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Nova Gvineja"
+ },
+ "PY": {
+ "name": "Paragvaj"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PL": {
+ "name": "Poljska"
+ },
+ "PR": {
+ "name": "Portoriko"
+ },
+ "PT": {
+ "name": "Portugalska"
+ },
+ "HK": {
+ "name": "Posebno administrativno obmoÄje LR Kitajske Hong Kong"
+ },
+ "MO": {
+ "name": "Posebno administrativno obmoÄje LR Kitajske Macao"
+ },
+ "RE": {
+ "name": "Reunion"
+ },
+ "RO": {
+ "name": "Romunija"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RU": {
+ "name": "Rusija"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "KN": {
+ "name": "Saint Kitts in Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre in Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vincent in Grenadine"
+ },
+ "SB": {
+ "name": "Salomonovi otoki"
+ },
+ "SV": {
+ "name": "Salvador"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "Sao Tome in Principe"
+ },
+ "SA": {
+ "name": "Saudova Arabija"
+ },
+ "SC": {
+ "name": "Sejšeli"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "KP": {
+ "name": "Severna Koreja"
+ },
+ "MP": {
+ "name": "Severni Marianski otoki"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Sirija"
+ },
+ "CI": {
+ "name": "SlonokoÅ¡Äena obala"
+ },
+ "SK": {
+ "name": "Slovaška"
+ },
+ "SI": {
+ "name": "Slovenija"
+ },
+ "SO": {
+ "name": "Somalija"
+ },
+ "RS": {
+ "name": "Srbija"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard in Jan Mayen"
+ },
+ "SZ": {
+ "name": "Svazi"
+ },
+ "SH": {
+ "name": "Sveta Helena"
+ },
+ "ES": {
+ "name": "Å panija"
+ },
+ "LK": {
+ "name": "Å rilanka"
+ },
+ "SE": {
+ "name": "Å vedska"
+ },
+ "CH": {
+ "name": "Å vica"
+ },
+ "TJ": {
+ "name": "Tadžikistan"
+ },
+ "TH": {
+ "name": "Tajska"
+ },
+ "TW": {
+ "name": "Tajvan"
+ },
+ "TZ": {
+ "name": "Tanzanija"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad in Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunizija"
+ },
+ "TR": {
+ "name": "TurÄija"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukrajina"
+ },
+ "UY": {
+ "name": "Urugvaj"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikan"
+ },
+ "GB": {
+ "name": "Velika Britanija"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "TL": {
+ "name": "Vzhodni Timor"
+ },
+ "WF": {
+ "name": "Wallis in Futuna"
+ },
+ "EH": {
+ "name": "Zahodna Sahara"
+ },
+ "ZM": {
+ "name": "Zambija"
+ },
+ "US": {
+ "name": "Združene države Amerike"
+ },
+ "AE": {
+ "name": "Združeni arabski emirati"
+ },
+ "CV": {
+ "name": "Zelenortski otoki"
+ },
+ "ZW": {
+ "name": "Zimbabve"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/sn.json b/library/intl/resources/country/sn.json
new file mode 100644
index 000000000..9d85c4fb4
--- /dev/null
+++ b/library/intl/resources/country/sn.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afuganistani"
+ },
+ "AR": {
+ "name": "Ajentina"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljeria"
+ },
+ "US": {
+ "name": "Amerika"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguila"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua ne Barbuda"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Arubha"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "AZ": {
+ "name": "Azabajani"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BH": {
+ "name": "Bahareni"
+ },
+ "BD": {
+ "name": "Bangladeshi"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarusi"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BE": {
+ "name": "Beljium"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutani"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BA": {
+ "name": "Boznia ne Herzegovina"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "BF": {
+ "name": "Bukinafaso"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BN": {
+ "name": "Burunei"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "CF": {
+ "name": "Central African Republic"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "NF": {
+ "name": "Chitsuwa cheNorfolk"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cyprus"
+ },
+ "CZ": {
+ "name": "Czech Republic"
+ },
+ "CD": {
+ "name": "Democratic Republic of the Congo"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominican Republic"
+ },
+ "TL": {
+ "name": "East Timor"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypt"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Etiopia"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "France"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "DE": {
+ "name": "Germany"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungary"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IQ": {
+ "name": "Iraq"
+ },
+ "IE": {
+ "name": "Ireland"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IT": {
+ "name": "Italy"
+ },
+ "CI": {
+ "name": "Ivory Coast"
+ },
+ "IL": {
+ "name": "Izuraeri"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kameruni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komoro"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "HR": {
+ "name": "Korasia"
+ },
+ "KP": {
+ "name": "Korea, North"
+ },
+ "KR": {
+ "name": "Korea, South"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LB": {
+ "name": "Lebanon"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lithuania"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MA": {
+ "name": "Morocco"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MM": {
+ "name": "Myanmar"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norway"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinian Territories"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippines"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PL": {
+ "name": "Poland"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RU": {
+ "name": "Russia"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vincent and the Grenadines"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa ye Amerika"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabia"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ZA": {
+ "name": "South Africa"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "ES": {
+ "name": "Spain"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweden"
+ },
+ "CH": {
+ "name": "Switzerland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TR": {
+ "name": "Turkey"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "AE": {
+ "name": "United Arab Emirates"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatican State"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ },
+ "SB": {
+ "name": "Zvitsuwa zvaSolomon"
+ },
+ "VI": {
+ "name": "Zvitsuwa zveAmerika"
+ },
+ "CV": {
+ "name": "Zvitsuwa zveCape Verde"
+ },
+ "KY": {
+ "name": "Zvitsuwa zveCayman"
+ },
+ "CK": {
+ "name": "Zvitsuwa zveCook"
+ },
+ "FK": {
+ "name": "Zvitsuwa zveFalklands"
+ },
+ "VG": {
+ "name": "Zvitsuwa zveHingirandi"
+ },
+ "MP": {
+ "name": "Zvitsuwa zvekumaodzanyemba eMariana"
+ },
+ "MH": {
+ "name": "Zvitsuwa zveMarshall"
+ },
+ "TC": {
+ "name": "Zvitsuwa zveTurk neCaico"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/so.json b/library/intl/resources/country/so.json
new file mode 100644
index 000000000..bfc1348d4
--- /dev/null
+++ b/library/intl/resources/country/so.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afgaanistaan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albaaniya"
+ },
+ "DZ": {
+ "name": "Aljeeriya"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angoola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua iyo Barbuda"
+ },
+ "AR": {
+ "name": "Arjantiin"
+ },
+ "AM": {
+ "name": "Armeeniya"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Awstaraaliya"
+ },
+ "AT": {
+ "name": "Awsteriya"
+ },
+ "IE": {
+ "name": "Ayrlaand"
+ },
+ "AZ": {
+ "name": "Azerbajaan"
+ },
+ "BB": {
+ "name": "Baarbadoos"
+ },
+ "BS": {
+ "name": "Bahaamas"
+ },
+ "PK": {
+ "name": "Bakistaan"
+ },
+ "BD": {
+ "name": "Bangaaladheesh"
+ },
+ "BH": {
+ "name": "Baxreyn"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BM": {
+ "name": "Bermuuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BE": {
+ "name": "Biljam"
+ },
+ "BJ": {
+ "name": "Biniin"
+ },
+ "BO": {
+ "name": "Boliifiya"
+ },
+ "PL": {
+ "name": "Booland"
+ },
+ "PT": {
+ "name": "Bortuqaal"
+ },
+ "BA": {
+ "name": "Bosniya Hersigoviina"
+ },
+ "BW": {
+ "name": "Botuswaana"
+ },
+ "BR": {
+ "name": "Braasiil"
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "British Virgin Islands"
+ },
+ "BG": {
+ "name": "Bulgaariya"
+ },
+ "BF": {
+ "name": "Burkiina Faaso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BN": {
+ "name": "Buruneeya"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "CV": {
+ "name": "Cape Verde Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "Cayman Islands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "IQ": {
+ "name": "Ciraaq"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "OM": {
+ "name": "Cumaan"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Domeenika"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "GQ": {
+ "name": "Equatorial Guinea"
+ },
+ "ER": {
+ "name": "Eretereeya"
+ },
+ "EE": {
+ "name": "Estooniya"
+ },
+ "VA": {
+ "name": "Faatikaan"
+ },
+ "PS": {
+ "name": "Falastiin Daanka galbeed iyo Qasa"
+ },
+ "FR": {
+ "name": "Faransiis"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "VE": {
+ "name": "Fenisuweela"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filibiin"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "VN": {
+ "name": "Fiyetnaam"
+ },
+ "GF": {
+ "name": "French Guiana"
+ },
+ "PF": {
+ "name": "French Polynesia"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaaboon"
+ },
+ "GH": {
+ "name": "Gaana"
+ },
+ "GM": {
+ "name": "Gambiya"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GN": {
+ "name": "Gini"
+ },
+ "GW": {
+ "name": "Gini-Bisaaw"
+ },
+ "GR": {
+ "name": "Giriig"
+ },
+ "GD": {
+ "name": "Giriinaada"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GT": {
+ "name": "Guwaatamaala"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HU": {
+ "name": "Hangeri"
+ },
+ "HT": {
+ "name": "Hayti"
+ },
+ "IN": {
+ "name": "Hindiya"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "IR": {
+ "name": "Iiraan"
+ },
+ "IS": {
+ "name": "Iislaand"
+ },
+ "EC": {
+ "name": "Ikuwadoor"
+ },
+ "AE": {
+ "name": "Imaaraadka Carabta ee Midoobay"
+ },
+ "ID": {
+ "name": "Indoneesiya"
+ },
+ "ES": {
+ "name": "Isbeyn"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israaʼiil"
+ },
+ "SZ": {
+ "name": "Iswaasilaand"
+ },
+ "SE": {
+ "name": "Iswidhan"
+ },
+ "ET": {
+ "name": "Itoobiya"
+ },
+ "CI": {
+ "name": "Ivory coast"
+ },
+ "TD": {
+ "name": "Jaad"
+ },
+ "JP": {
+ "name": "Jabaan"
+ },
+ "DJ": {
+ "name": "Jabuuti"
+ },
+ "JM": {
+ "name": "Jameyka"
+ },
+ "CF": {
+ "name": "Jamhuuriyadda Afrikada Dhexe"
+ },
+ "CD": {
+ "name": "Jamhuuriyadda Dimuquraadiga Kongo"
+ },
+ "DO": {
+ "name": "Jamhuuriyadda Domeenika"
+ },
+ "CZ": {
+ "name": "Jamhuuriyadda Jek"
+ },
+ "DE": {
+ "name": "Jarmal"
+ },
+ "FK": {
+ "name": "Jaziiradaha Fooklaan"
+ },
+ "CK": {
+ "name": "Jaziiradda Cook"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "CL": {
+ "name": "Jili"
+ },
+ "GE": {
+ "name": "Joorjiya"
+ },
+ "CM": {
+ "name": "Kaameruun"
+ },
+ "KH": {
+ "name": "Kamboodiya"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "KZ": {
+ "name": "Kasaakhistaan"
+ },
+ "KE": {
+ "name": "Kiiniya"
+ },
+ "KG": {
+ "name": "Kirgistaan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CO": {
+ "name": "Kolombiya"
+ },
+ "KM": {
+ "name": "Komooros"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "ZA": {
+ "name": "Koonfur Afrika"
+ },
+ "SS": {
+ "name": "Koonfur Suudaan"
+ },
+ "HR": {
+ "name": "Korweeshiya"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kosta Riika"
+ },
+ "CU": {
+ "name": "Kuuba"
+ },
+ "KR": {
+ "name": "Kuuriyada Koonfureed"
+ },
+ "KP": {
+ "name": "Kuuriyada Waqooyi"
+ },
+ "KW": {
+ "name": "Kuwayt"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latfiya"
+ },
+ "LR": {
+ "name": "Laybeeriya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LY": {
+ "name": "Liibiya"
+ },
+ "LT": {
+ "name": "Lituweeniya"
+ },
+ "LS": {
+ "name": "Losooto"
+ },
+ "LB": {
+ "name": "Lubnaan"
+ },
+ "LU": {
+ "name": "Luksemboorg"
+ },
+ "MT": {
+ "name": "Maalda"
+ },
+ "MV": {
+ "name": "Maaldiqeen"
+ },
+ "ML": {
+ "name": "Maali"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MK": {
+ "name": "Makadooniya"
+ },
+ "MW": {
+ "name": "Malaawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "US": {
+ "name": "Maraykanka"
+ },
+ "MA": {
+ "name": "Marooko"
+ },
+ "MH": {
+ "name": "Marshall Islands"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "EG": {
+ "name": "Masar"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldofa"
+ },
+ "MN": {
+ "name": "Mongooliya"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MC": {
+ "name": "Moonako"
+ },
+ "MU": {
+ "name": "Murishiyoos"
+ },
+ "MR": {
+ "name": "Muritaaniya"
+ },
+ "MZ": {
+ "name": "Musambiig"
+ },
+ "MM": {
+ "name": "Myanmar"
+ },
+ "NA": {
+ "name": "Namiibiya"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NG": {
+ "name": "Nayjeeriya"
+ },
+ "NE": {
+ "name": "Nayjer"
+ },
+ "NP": {
+ "name": "Nebaal"
+ },
+ "NL": {
+ "name": "Netherlands"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "Neyuusilaand"
+ },
+ "NI": {
+ "name": "Nikaraaguwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Noorweey"
+ },
+ "NF": {
+ "name": "Norfolk Island"
+ },
+ "MP": {
+ "name": "Northern Mariana Islands"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qadar"
+ },
+ "CY": {
+ "name": "Qubrus"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Rumaaniya"
+ },
+ "RU": {
+ "name": "Ruush"
+ },
+ "RW": {
+ "name": "Ruwanda"
+ },
+ "ZM": {
+ "name": "Saambiya"
+ },
+ "SA": {
+ "name": "Sacuudi Carabiya"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts and Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "PM": {
+ "name": "Saint Pierre and Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vincent and the Grenadines"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samowa Ameerika"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "CN": {
+ "name": "Shiinaha"
+ },
+ "ZW": {
+ "name": "Simbaabwe"
+ },
+ "SG": {
+ "name": "Singaboor"
+ },
+ "SN": {
+ "name": "Sinigaal"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SL": {
+ "name": "Siraaliyoon"
+ },
+ "LK": {
+ "name": "Sirilaanka"
+ },
+ "SC": {
+ "name": "Sishelis"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SB": {
+ "name": "Solomon Islands"
+ },
+ "SO": {
+ "name": "Soomaaliya"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SD": {
+ "name": "Suudaan"
+ },
+ "SY": {
+ "name": "Suuriya"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "CH": {
+ "name": "Swiiserlaand"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "IT": {
+ "name": "Talyaani"
+ },
+ "TZ": {
+ "name": "Tansaaniya"
+ },
+ "TH": {
+ "name": "Taylaand"
+ },
+ "TW": {
+ "name": "Taywaan"
+ },
+ "TL": {
+ "name": "Timorka bari"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TG": {
+ "name": "Toogo"
+ },
+ "TT": {
+ "name": "Trinidad and Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tuniisiya"
+ },
+ "TR": {
+ "name": "Turki"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VI": {
+ "name": "U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "Ugaanda"
+ },
+ "UA": {
+ "name": "Ukrayn"
+ },
+ "GB": {
+ "name": "United Kingdom"
+ },
+ "JO": {
+ "name": "Urdun"
+ },
+ "UY": {
+ "name": "Uruguwaay"
+ },
+ "UZ": {
+ "name": "Uusbakistaan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "WF": {
+ "name": "Wallis and Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yaman"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/sq.json b/library/intl/resources/country/sq.json
new file mode 100644
index 000000000..fe5f3fe83
--- /dev/null
+++ b/library/intl/resources/country/sq.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganistan"
+ },
+ "ZA": {
+ "name": "Afrika e Jugut"
+ },
+ "DZ": {
+ "name": "Algjeri"
+ },
+ "AD": {
+ "name": "Andorrë"
+ },
+ "AO": {
+ "name": "Angolë"
+ },
+ "AI": {
+ "name": "Anguilë"
+ },
+ "AQ": {
+ "name": "Antarktikë"
+ },
+ "AG": {
+ "name": "Antigua e Barbuda"
+ },
+ "SA": {
+ "name": "Arabia Saudite"
+ },
+ "AR": {
+ "name": "Argjentinë"
+ },
+ "AM": {
+ "name": "Armeni"
+ },
+ "AW": {
+ "name": "Arubë"
+ },
+ "AU": {
+ "name": "Australi"
+ },
+ "AT": {
+ "name": "Austri"
+ },
+ "AZ": {
+ "name": "Azerbajxhan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrein"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgjikë"
+ },
+ "BZ": {
+ "name": "Belizë"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermudë"
+ },
+ "BY": {
+ "name": "Bjellorusi"
+ },
+ "BO": {
+ "name": "Bolivi"
+ },
+ "BA": {
+ "name": "Bosnjë-Hercegovinë"
+ },
+ "BW": {
+ "name": "Botsvanë"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "CI": {
+ "name": "Bregu i Fildishtë"
+ },
+ "BN": {
+ "name": "Brunej"
+ },
+ "BG": {
+ "name": "Bullgari"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burund"
+ },
+ "BT": {
+ "name": "Butan"
+ },
+ "TD": {
+ "name": "Çad"
+ },
+ "DK": {
+ "name": "Danimarkë"
+ },
+ "DG": {
+ "name": "Diego Garsia"
+ },
+ "DM": {
+ "name": "Dominikë"
+ },
+ "EG": {
+ "name": "Egjipt"
+ },
+ "EC": {
+ "name": "Ekuador"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "AE": {
+ "name": "Emiratet e Bashkuara Arabe"
+ },
+ "ER": {
+ "name": "Eritre"
+ },
+ "EE": {
+ "name": "Estoni"
+ },
+ "ET": {
+ "name": "Etiopi"
+ },
+ "PH": {
+ "name": "Filipine"
+ },
+ "FI": {
+ "name": "Finlandë"
+ },
+ "FJ": {
+ "name": "Fixhi"
+ },
+ "FR": {
+ "name": "Francë"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambi"
+ },
+ "GH": {
+ "name": "Ganë"
+ },
+ "GD": {
+ "name": "Grenadë"
+ },
+ "GL": {
+ "name": "Grenlandë"
+ },
+ "GR": {
+ "name": "Greqi"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GF": {
+ "name": "Guajana Franceze"
+ },
+ "GY": {
+ "name": "Guajanë"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemalë"
+ },
+ "GG": {
+ "name": "Guernsej"
+ },
+ "GN": {
+ "name": "Guine"
+ },
+ "GW": {
+ "name": "Guine-Bisau"
+ },
+ "GQ": {
+ "name": "Guineja Ekuatoriale"
+ },
+ "GE": {
+ "name": "Gjeorgji"
+ },
+ "DE": {
+ "name": "Gjermani"
+ },
+ "GI": {
+ "name": "Gjibraltar"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "NL": {
+ "name": "Holandë"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungari"
+ },
+ "IN": {
+ "name": "Indi"
+ },
+ "ID": {
+ "name": "Indonezi"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irlandë"
+ },
+ "IS": {
+ "name": "Islandë"
+ },
+ "AX": {
+ "name": "Ishujt Alandë"
+ },
+ "MP": {
+ "name": "Ishujt e Marianës Veriore"
+ },
+ "VI": {
+ "name": "Ishujt e Virgjër Amerikanë"
+ },
+ "VG": {
+ "name": "Ishujt e Virgjër Britanikë"
+ },
+ "FO": {
+ "name": "Ishujt Faroe"
+ },
+ "FK": {
+ "name": "Ishujt Folklandë"
+ },
+ "KY": {
+ "name": "Ishujt Kajmanë"
+ },
+ "IC": {
+ "name": "Ishujt Kanarie"
+ },
+ "CC": {
+ "name": "Ishujt Kokos"
+ },
+ "CK": {
+ "name": "Ishujt Kukë"
+ },
+ "MH": {
+ "name": "Ishujt Marshallë"
+ },
+ "NF": {
+ "name": "Ishujt Norfolkë"
+ },
+ "UM": {
+ "name": "Ishujt periferikë të SHBA-së"
+ },
+ "PN": {
+ "name": "Ishujt Pitkernë"
+ },
+ "SB": {
+ "name": "Ishujt Solomonë"
+ },
+ "TC": {
+ "name": "Ishujt Turke dhe Kaike"
+ },
+ "AC": {
+ "name": "Ishulli Asenshion"
+ },
+ "CX": {
+ "name": "Ishulli i Krishtlindjes"
+ },
+ "IM": {
+ "name": "Ishulli i Manit"
+ },
+ "IT": {
+ "name": "Itali"
+ },
+ "IL": {
+ "name": "Izrael"
+ },
+ "JP": {
+ "name": "Japoni"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JO": {
+ "name": "Jordani"
+ },
+ "NC": {
+ "name": "Kaledonia e Re"
+ },
+ "KH": {
+ "name": "Kamboxhia"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "BQ": {
+ "name": "Karaibet holandeze"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KZ": {
+ "name": "Kazakistan"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "CV": {
+ "name": "Kepi i Gjelbër"
+ },
+ "CL": {
+ "name": "Kili"
+ },
+ "CN": {
+ "name": "Kinë"
+ },
+ "KG": {
+ "name": "Kirgistan"
+ },
+ "CO": {
+ "name": "Kolumbi"
+ },
+ "KM": {
+ "name": "Komore"
+ },
+ "CG": {
+ "name": "Kongo-Brazavilë"
+ },
+ "CD": {
+ "name": "Kongo-Kinshasa"
+ },
+ "KR": {
+ "name": "Koreja e Jugut"
+ },
+ "KP": {
+ "name": "Koreja e Veriut"
+ },
+ "XK": {
+ "name": "Kosovë"
+ },
+ "CR": {
+ "name": "Kosta Rikë"
+ },
+ "HR": {
+ "name": "Kroaci"
+ },
+ "CU": {
+ "name": "Kubë"
+ },
+ "CW": {
+ "name": "Kuraçao"
+ },
+ "KW": {
+ "name": "Kuvajt"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letoni"
+ },
+ "LB": {
+ "name": "Liban"
+ },
+ "LR": {
+ "name": "Liberi"
+ },
+ "LY": {
+ "name": "Libi"
+ },
+ "LI": {
+ "name": "Lihtënshtajn"
+ },
+ "LT": {
+ "name": "Lituani"
+ },
+ "LU": {
+ "name": "Luksemburg"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "YT": {
+ "name": "Majotë"
+ },
+ "MY": {
+ "name": "Malajzi"
+ },
+ "MW": {
+ "name": "Malavi"
+ },
+ "MV": {
+ "name": "Maldive"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "ME": {
+ "name": "Mali i Zi"
+ },
+ "MT": {
+ "name": "Maltë"
+ },
+ "MK": {
+ "name": "Maqedoni"
+ },
+ "MA": {
+ "name": "Marok"
+ },
+ "MQ": {
+ "name": "Martinik"
+ },
+ "MR": {
+ "name": "Mauritani"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "GB": {
+ "name": "Mbretëria e Bashkuar"
+ },
+ "MX": {
+ "name": "Meksikë"
+ },
+ "MM": {
+ "name": "Mianmar (Burma)"
+ },
+ "FM": {
+ "name": "Mikronezi"
+ },
+ "MD": {
+ "name": "Moldavi"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongoli"
+ },
+ "MS": {
+ "name": "Montserat"
+ },
+ "MZ": {
+ "name": "Mozambik"
+ },
+ "NA": {
+ "name": "Namibi"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeri"
+ },
+ "NI": {
+ "name": "Nikaragua"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norvegji"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Guineja e Re"
+ },
+ "PY": {
+ "name": "Paraguai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PF": {
+ "name": "Polinezia Franceze"
+ },
+ "PL": {
+ "name": "Poloni"
+ },
+ "PR": {
+ "name": "Porto Riko"
+ },
+ "PT": {
+ "name": "Portugali"
+ },
+ "CY": {
+ "name": "Qipro"
+ },
+ "KI": {
+ "name": "Qiribati"
+ },
+ "CF": {
+ "name": "Republika Afrikano-Qendrore"
+ },
+ "CZ": {
+ "name": "Republika Çeke"
+ },
+ "DO": {
+ "name": "Republika Dominikane"
+ },
+ "RE": {
+ "name": "Reunion"
+ },
+ "RW": {
+ "name": "Ruandë"
+ },
+ "RO": {
+ "name": "Rumani"
+ },
+ "RU": {
+ "name": "Rusi"
+ },
+ "HK": {
+ "name": "RVAK i Hong Kongut"
+ },
+ "MO": {
+ "name": "RVAK i Makaos"
+ },
+ "EH": {
+ "name": "Saharaja Perëndimore"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa Amerikane"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "Sao Tome e Prinsipe"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbi"
+ },
+ "SL": {
+ "name": "Siera Leone"
+ },
+ "SG": {
+ "name": "Singapor"
+ },
+ "SY": {
+ "name": "Siri"
+ },
+ "SC": {
+ "name": "Sishel"
+ },
+ "SK": {
+ "name": "Sllovaki"
+ },
+ "SI": {
+ "name": "Slloveni"
+ },
+ "SO": {
+ "name": "Somali"
+ },
+ "ES": {
+ "name": "Spanjë"
+ },
+ "LK": {
+ "name": "Sri Lankë"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SS": {
+ "name": "Sudani i Jugut"
+ },
+ "SE": {
+ "name": "Suedi"
+ },
+ "SR": {
+ "name": "Surinami"
+ },
+ "SJ": {
+ "name": "Svalbard e Zhan Majen"
+ },
+ "SZ": {
+ "name": "Svazilandë"
+ },
+ "BL": {
+ "name": "Shën Bartolemeo"
+ },
+ "SH": {
+ "name": "Shën Helena"
+ },
+ "KN": {
+ "name": "Shën Kits e Nevis"
+ },
+ "LC": {
+ "name": "Shën Luçia"
+ },
+ "MF": {
+ "name": "Shën Martin"
+ },
+ "SX": {
+ "name": "Shën Martin (Sint Maarten-pjesa e Mbretërisë së Holandës)"
+ },
+ "PM": {
+ "name": "Shën Peir dhe Mikuelon"
+ },
+ "VC": {
+ "name": "Shën Vinsent dhe Grenadinet"
+ },
+ "AL": {
+ "name": "Shqipëri"
+ },
+ "US": {
+ "name": "Shtetet e Bashkuara të Amerikës"
+ },
+ "TH": {
+ "name": "Tajlandë"
+ },
+ "TW": {
+ "name": "Tajvan"
+ },
+ "TZ": {
+ "name": "Tanzani"
+ },
+ "TJ": {
+ "name": "Taxhikistan"
+ },
+ "TF": {
+ "name": "Territoret Australiane Franceze"
+ },
+ "PS": {
+ "name": "Territoret Palestineze"
+ },
+ "IO": {
+ "name": "Territori Britanik i Oqeanit Indian"
+ },
+ "TL": {
+ "name": "Timori Lindor"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad e Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Kuna"
+ },
+ "TN": {
+ "name": "Tunizi"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TR": {
+ "name": "Turqi"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "EA": {
+ "name": "Theuta e Melila"
+ },
+ "UG": {
+ "name": "Ugandë"
+ },
+ "UA": {
+ "name": "Ukrainë"
+ },
+ "WF": {
+ "name": "Uollis e Futina"
+ },
+ "UY": {
+ "name": "Uruguai"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikan"
+ },
+ "VE": {
+ "name": "Venezuelë"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "JM": {
+ "name": "Xhamajkë"
+ },
+ "JE": {
+ "name": "Xhersej"
+ },
+ "DJ": {
+ "name": "Xhibut"
+ },
+ "GS": {
+ "name": "Xhorxha Jugore dhe Ishujt Senduiç të Jugut"
+ },
+ "ZM": {
+ "name": "Zambi"
+ },
+ "NZ": {
+ "name": "Zelanda e Re"
+ },
+ "ZW": {
+ "name": "Zimbabve"
+ },
+ "CH": {
+ "name": "Zvicër"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/sr-Latn.json b/library/intl/resources/country/sr-Latn.json
new file mode 100644
index 000000000..ce8338687
--- /dev/null
+++ b/library/intl/resources/country/sr-Latn.json
@@ -0,0 +1,761 @@
+{
+ "AL": {
+ "name": "Albanija"
+ },
+ "DZ": {
+ "name": "Alžir"
+ },
+ "VI": {
+ "name": "AmeriÄka DeviÄanska Ostrva"
+ },
+ "AS": {
+ "name": "AmeriÄka Samoa"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Angvila"
+ },
+ "AQ": {
+ "name": "Antarktik"
+ },
+ "AG": {
+ "name": "Antigva i Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australija"
+ },
+ "AT": {
+ "name": "Austrija"
+ },
+ "AF": {
+ "name": "Avganistan"
+ },
+ "AZ": {
+ "name": "Azerbejdžan"
+ },
+ "BS": {
+ "name": "Bahami"
+ },
+ "BH": {
+ "name": "Bahrein"
+ },
+ "BD": {
+ "name": "Bangladeš"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgija"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BY": {
+ "name": "Belorusija"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BW": {
+ "name": "Bocvana"
+ },
+ "BO": {
+ "name": "Bolivija"
+ },
+ "BA": {
+ "name": "Bosna i Hercegovina"
+ },
+ "CX": {
+ "name": "Božićno ostrvo"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "VG": {
+ "name": "Britanska DeviÄanska Ostrva"
+ },
+ "IO": {
+ "name": "Britanska teritorija u Indijskom okeanu"
+ },
+ "BN": {
+ "name": "Brunej"
+ },
+ "BG": {
+ "name": "Bugarska"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butan"
+ },
+ "CF": {
+ "name": "CentralnoafriÄka Republika"
+ },
+ "ME": {
+ "name": "Crna Gora"
+ },
+ "TD": {
+ "name": "ÄŒad"
+ },
+ "CZ": {
+ "name": "Češka"
+ },
+ "CL": {
+ "name": "ÄŒile"
+ },
+ "DK": {
+ "name": "Danska"
+ },
+ "DG": {
+ "name": "Dijego Garsija"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "DO": {
+ "name": "Dominikanska Republika"
+ },
+ "JE": {
+ "name": "Džersi"
+ },
+ "DJ": {
+ "name": "Džibuti"
+ },
+ "EG": {
+ "name": "Egipat"
+ },
+ "EC": {
+ "name": "Ekvador"
+ },
+ "GQ": {
+ "name": "Ekvatorijalna Gvineja"
+ },
+ "ER": {
+ "name": "Eritreja"
+ },
+ "EE": {
+ "name": "Estonija"
+ },
+ "ET": {
+ "name": "Etiopija"
+ },
+ "FO": {
+ "name": "Farska Ostrva"
+ },
+ "FJ": {
+ "name": "Fidži"
+ },
+ "PH": {
+ "name": "Filipini"
+ },
+ "FI": {
+ "name": "Finska"
+ },
+ "FK": {
+ "name": "Foklandska ostrva"
+ },
+ "FR": {
+ "name": "Francuska"
+ },
+ "GF": {
+ "name": "Francuska Gvajana"
+ },
+ "PF": {
+ "name": "Francuska Polinezija"
+ },
+ "TF": {
+ "name": "Francuske Južne Teritorije"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambija"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "GrÄka"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grenland"
+ },
+ "GE": {
+ "name": "Gruzija"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GG": {
+ "name": "Gurnsi"
+ },
+ "GP": {
+ "name": "Gvadelupe"
+ },
+ "GY": {
+ "name": "Gvajana"
+ },
+ "GT": {
+ "name": "Gvatemala"
+ },
+ "GN": {
+ "name": "Gvineja"
+ },
+ "GW": {
+ "name": "Gvineja-Bisao"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "NL": {
+ "name": "Holandija"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong S. A. R. Kina"
+ },
+ "HR": {
+ "name": "Hrvatska"
+ },
+ "IN": {
+ "name": "Indija"
+ },
+ "ID": {
+ "name": "Indonezija"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irska"
+ },
+ "IS": {
+ "name": "Island"
+ },
+ "TL": {
+ "name": "IstoÄni Timor"
+ },
+ "IT": {
+ "name": "Italija"
+ },
+ "IL": {
+ "name": "Izrael"
+ },
+ "JM": {
+ "name": "Jamajka"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "AM": {
+ "name": "Jermenija"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "GS": {
+ "name": "Južna Džordžija i Južna SendviÄ Ostrva"
+ },
+ "KR": {
+ "name": "Južna Koreja"
+ },
+ "SS": {
+ "name": "Južni Sudan"
+ },
+ "ZA": {
+ "name": "JužnoafriÄka Republika"
+ },
+ "KY": {
+ "name": "Kajmanska Ostrva"
+ },
+ "KH": {
+ "name": "Kambodža"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanarska ostrva"
+ },
+ "BQ": {
+ "name": "Karipska Holandija"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KZ": {
+ "name": "Kazahstan"
+ },
+ "KE": {
+ "name": "Kenija"
+ },
+ "CN": {
+ "name": "Kina"
+ },
+ "CY": {
+ "name": "Kipar"
+ },
+ "KG": {
+ "name": "Kirgistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CC": {
+ "name": "Kokos (Keling) Ostrva"
+ },
+ "CO": {
+ "name": "Kolumbija"
+ },
+ "KM": {
+ "name": "Komorska Ostrva"
+ },
+ "CG": {
+ "name": "Kongo - Brazavil"
+ },
+ "CD": {
+ "name": "Kongo - Kinšasa"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CK": {
+ "name": "Kukova Ostrva"
+ },
+ "CW": {
+ "name": "Kurasao"
+ },
+ "KW": {
+ "name": "Kuvajt"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonija"
+ },
+ "LB": {
+ "name": "Liban"
+ },
+ "LR": {
+ "name": "Liberija"
+ },
+ "LY": {
+ "name": "Libija"
+ },
+ "LI": {
+ "name": "Lihtenštajn"
+ },
+ "LT": {
+ "name": "Litvanija"
+ },
+ "LU": {
+ "name": "Luksemburg"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "HU": {
+ "name": "Mađarska"
+ },
+ "YT": {
+ "name": "Majot"
+ },
+ "MK": {
+ "name": "Makedonija"
+ },
+ "MW": {
+ "name": "Malavi"
+ },
+ "MV": {
+ "name": "Maldivi"
+ },
+ "MY": {
+ "name": "Malezija"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Maroko"
+ },
+ "MH": {
+ "name": "Maršalska Ostrva"
+ },
+ "MQ": {
+ "name": "Martinik"
+ },
+ "MU": {
+ "name": "Mauricijus"
+ },
+ "MR": {
+ "name": "Mauritanija"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "MM": {
+ "name": "Mijanmar (Burma)"
+ },
+ "FM": {
+ "name": "Mikronezija"
+ },
+ "MD": {
+ "name": "Moldavija"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolija"
+ },
+ "MS": {
+ "name": "Monserat"
+ },
+ "MZ": {
+ "name": "Mozambik"
+ },
+ "NA": {
+ "name": "Namibija"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "DE": {
+ "name": "NemaÄka"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigerija"
+ },
+ "NI": {
+ "name": "Nikaragva"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Ostrvo"
+ },
+ "NO": {
+ "name": "Norveška"
+ },
+ "NC": {
+ "name": "Nova Kaledonija"
+ },
+ "NZ": {
+ "name": "Novi Zeland"
+ },
+ "CI": {
+ "name": "Obala SlonovaÄe"
+ },
+ "AX": {
+ "name": "Olandska ostrva"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "TC": {
+ "name": "Ostrva Turks i Kaikos"
+ },
+ "AC": {
+ "name": "Ostrvo Asension"
+ },
+ "IM": {
+ "name": "Ostrvo Man"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinske teritorije"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Nova Gvineja"
+ },
+ "PY": {
+ "name": "Paragvaj"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkern"
+ },
+ "PL": {
+ "name": "Poljska"
+ },
+ "PR": {
+ "name": "Portoriko"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "RE": {
+ "name": "Reinion"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumunija"
+ },
+ "RU": {
+ "name": "Rusija"
+ },
+ "SV": {
+ "name": "Salvador"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "Sao Tome i Principe"
+ },
+ "MO": {
+ "name": "SAR Makao (Kina)"
+ },
+ "SA": {
+ "name": "Saudijska Arabija"
+ },
+ "SC": {
+ "name": "Sejšeli"
+ },
+ "PM": {
+ "name": "Sen Pjer i Mikelon"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "KN": {
+ "name": "Sent Kits i Nevis"
+ },
+ "MF": {
+ "name": "Sent Martin"
+ },
+ "VC": {
+ "name": "Sent Vinsent i Grenadini"
+ },
+ "EA": {
+ "name": "Seuta i Melilja"
+ },
+ "KP": {
+ "name": "Severna Koreja"
+ },
+ "MP": {
+ "name": "Severna Marijanska Ostrva"
+ },
+ "SL": {
+ "name": "Sijera Leone"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SY": {
+ "name": "Sirija"
+ },
+ "US": {
+ "name": "Sjedinjene AmeriÄke Države"
+ },
+ "SK": {
+ "name": "SlovaÄka"
+ },
+ "SI": {
+ "name": "Slovenija"
+ },
+ "SB": {
+ "name": "Solomonska Ostrva"
+ },
+ "SO": {
+ "name": "Somalija"
+ },
+ "RS": {
+ "name": "Srbija"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard i Jan Majen"
+ },
+ "SZ": {
+ "name": "Svazilend"
+ },
+ "SH": {
+ "name": "Sveta Jelena"
+ },
+ "LC": {
+ "name": "Sveta Lucija"
+ },
+ "BL": {
+ "name": "Sveti Bartolomej"
+ },
+ "SX": {
+ "name": "Sveti Martin"
+ },
+ "ES": {
+ "name": "Å panija"
+ },
+ "LK": {
+ "name": "Å ri Lanka"
+ },
+ "CH": {
+ "name": "Å vajcarska"
+ },
+ "SE": {
+ "name": "Å vedska"
+ },
+ "TJ": {
+ "name": "Tadžikistan"
+ },
+ "TH": {
+ "name": "Tajland"
+ },
+ "TW": {
+ "name": "Tajvan"
+ },
+ "TZ": {
+ "name": "Tanzanija"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad i Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Kunja"
+ },
+ "TN": {
+ "name": "Tunis"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TR": {
+ "name": "Turska"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "Udaljena ostrva SAD"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "AE": {
+ "name": "Ujedinjeni Arapski Emirati"
+ },
+ "UA": {
+ "name": "Ukrajina"
+ },
+ "UY": {
+ "name": "Urugvaj"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "WF": {
+ "name": "Valis i Futuna"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikan"
+ },
+ "GB": {
+ "name": "Velika Britanija"
+ },
+ "VE": {
+ "name": "Venecuela"
+ },
+ "VN": {
+ "name": "Vijetnam"
+ },
+ "ZM": {
+ "name": "Zambija"
+ },
+ "EH": {
+ "name": "Zapadna Sahara"
+ },
+ "CV": {
+ "name": "Zelenortska Ostrva"
+ },
+ "ZW": {
+ "name": "Zimbabve"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/sr.json b/library/intl/resources/country/sr.json
new file mode 100644
index 000000000..caf012760
--- /dev/null
+++ b/library/intl/resources/country/sr.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "ÐвганиÑтан"
+ },
+ "AZ": {
+ "name": "Ðзербејџан"
+ },
+ "AL": {
+ "name": "Ðлбанија"
+ },
+ "DZ": {
+ "name": "Ðлжир"
+ },
+ "VI": {
+ "name": "Ðмеричка ДевичанÑка ОÑтрва"
+ },
+ "AS": {
+ "name": "Ðмеричка Самоа"
+ },
+ "AI": {
+ "name": "Ðнгвила"
+ },
+ "AO": {
+ "name": "Ðнгола"
+ },
+ "AD": {
+ "name": "Ðндора"
+ },
+ "AQ": {
+ "name": "Ðнтарктик"
+ },
+ "AG": {
+ "name": "Ðнтигва и Барбуда"
+ },
+ "AR": {
+ "name": "Ðргентина"
+ },
+ "AW": {
+ "name": "Ðруба"
+ },
+ "AU": {
+ "name": "ÐуÑтралија"
+ },
+ "AT": {
+ "name": "ÐуÑтрија"
+ },
+ "BD": {
+ "name": "Бангладеш"
+ },
+ "BB": {
+ "name": "БарбадоÑ"
+ },
+ "BS": {
+ "name": "Бахами"
+ },
+ "BH": {
+ "name": "Бахреин"
+ },
+ "BE": {
+ "name": "Белгија"
+ },
+ "BZ": {
+ "name": "Белизе"
+ },
+ "BY": {
+ "name": "БелоруÑија"
+ },
+ "BJ": {
+ "name": "Бенин"
+ },
+ "BM": {
+ "name": "Бермуда"
+ },
+ "CX": {
+ "name": "Божићно оÑтрво"
+ },
+ "BO": {
+ "name": "Боливија"
+ },
+ "BA": {
+ "name": "БоÑна и Херцеговина"
+ },
+ "BW": {
+ "name": "Боцвана"
+ },
+ "BR": {
+ "name": "Бразил"
+ },
+ "VG": {
+ "name": "БританÑка ДевичанÑка ОÑтрва"
+ },
+ "IO": {
+ "name": "БританÑка територија у ИндијÑком океану"
+ },
+ "BN": {
+ "name": "Брунеј"
+ },
+ "BG": {
+ "name": "БугарÑка"
+ },
+ "BF": {
+ "name": "Буркина ФаÑо"
+ },
+ "BI": {
+ "name": "Бурунди"
+ },
+ "BT": {
+ "name": "Бутан"
+ },
+ "WF": {
+ "name": "Ð’Ð°Ð»Ð¸Ñ Ð¸ Футуна"
+ },
+ "VU": {
+ "name": "Вануату"
+ },
+ "VA": {
+ "name": "Ватикан"
+ },
+ "GB": {
+ "name": "Велика Британија"
+ },
+ "VE": {
+ "name": "Венецуела"
+ },
+ "VN": {
+ "name": "Вијетнам"
+ },
+ "GA": {
+ "name": "Габон"
+ },
+ "GM": {
+ "name": "Гамбија"
+ },
+ "GH": {
+ "name": "Гана"
+ },
+ "GP": {
+ "name": "Гваделупе"
+ },
+ "GY": {
+ "name": "Гвајана"
+ },
+ "GT": {
+ "name": "Гватемала"
+ },
+ "GN": {
+ "name": "Гвинеја"
+ },
+ "GW": {
+ "name": "Гвинеја-БиÑао"
+ },
+ "GI": {
+ "name": "Гибралтар"
+ },
+ "GD": {
+ "name": "Гренада"
+ },
+ "GL": {
+ "name": "Гренланд"
+ },
+ "GE": {
+ "name": "Грузија"
+ },
+ "GR": {
+ "name": "Грчка"
+ },
+ "GU": {
+ "name": "Гуам"
+ },
+ "GG": {
+ "name": "ГурнÑи"
+ },
+ "DK": {
+ "name": "ДанÑка"
+ },
+ "DG": {
+ "name": "Дијего ГарÑија"
+ },
+ "DM": {
+ "name": "Доминика"
+ },
+ "DO": {
+ "name": "ДоминиканÑка Република"
+ },
+ "EG": {
+ "name": "Египат"
+ },
+ "EC": {
+ "name": "Еквадор"
+ },
+ "GQ": {
+ "name": "Екваторијална Гвинеја"
+ },
+ "ER": {
+ "name": "Еритреја"
+ },
+ "EE": {
+ "name": "ЕÑтонија"
+ },
+ "ET": {
+ "name": "Етиопија"
+ },
+ "ZM": {
+ "name": "Замбија"
+ },
+ "EH": {
+ "name": "Западна Сахара"
+ },
+ "CV": {
+ "name": "ЗеленортÑка ОÑтрва"
+ },
+ "ZW": {
+ "name": "Зимбабве"
+ },
+ "IL": {
+ "name": "Израел"
+ },
+ "IN": {
+ "name": "Индија"
+ },
+ "ID": {
+ "name": "Индонезија"
+ },
+ "IQ": {
+ "name": "Ирак"
+ },
+ "IR": {
+ "name": "Иран"
+ },
+ "IE": {
+ "name": "ИрÑка"
+ },
+ "IS": {
+ "name": "ИÑланд"
+ },
+ "TL": {
+ "name": "ИÑточни Тимор"
+ },
+ "IT": {
+ "name": "Италија"
+ },
+ "JM": {
+ "name": "Јамајка"
+ },
+ "JP": {
+ "name": "Јапан"
+ },
+ "YE": {
+ "name": "Јемен"
+ },
+ "AM": {
+ "name": "Јерменија"
+ },
+ "JO": {
+ "name": "Јордан"
+ },
+ "KR": {
+ "name": "Јужна Кореја"
+ },
+ "GS": {
+ "name": "Јужна Ðорџија и Јужна Сендвич ОÑтрва"
+ },
+ "SS": {
+ "name": "Јужни Судан"
+ },
+ "ZA": {
+ "name": "Јужноафричка Република"
+ },
+ "KZ": {
+ "name": "КазахÑтан"
+ },
+ "KY": {
+ "name": "КајманÑка ОÑтрва"
+ },
+ "KH": {
+ "name": "Камбоџа"
+ },
+ "CM": {
+ "name": "Камерун"
+ },
+ "CA": {
+ "name": "Канада"
+ },
+ "IC": {
+ "name": "КанарÑка оÑтрва"
+ },
+ "BQ": {
+ "name": "КарипÑка Холандија"
+ },
+ "QA": {
+ "name": "Катар"
+ },
+ "KE": {
+ "name": "Кенија"
+ },
+ "CN": {
+ "name": "Кина"
+ },
+ "CY": {
+ "name": "Кипар"
+ },
+ "KG": {
+ "name": "КиргиÑтан"
+ },
+ "KI": {
+ "name": "Кирибати"
+ },
+ "CC": {
+ "name": "ÐšÐ¾ÐºÐ¾Ñ (Келинг) ОÑтрва"
+ },
+ "CO": {
+ "name": "Колумбија"
+ },
+ "KM": {
+ "name": "КоморÑка ОÑтрва"
+ },
+ "CG": {
+ "name": "Конго - Бразавил"
+ },
+ "CD": {
+ "name": "Конго - КиншаÑа"
+ },
+ "XK": {
+ "name": "КоÑово"
+ },
+ "CR": {
+ "name": "КоÑтарика"
+ },
+ "CU": {
+ "name": "Куба"
+ },
+ "KW": {
+ "name": "Кувајт"
+ },
+ "CK": {
+ "name": "Кукова ОÑтрва"
+ },
+ "CW": {
+ "name": "КураÑао"
+ },
+ "LA": {
+ "name": "ЛаоÑ"
+ },
+ "LS": {
+ "name": "ЛеÑото"
+ },
+ "LV": {
+ "name": "Летонија"
+ },
+ "LB": {
+ "name": "Либан"
+ },
+ "LR": {
+ "name": "Либерија"
+ },
+ "LY": {
+ "name": "Либија"
+ },
+ "LT": {
+ "name": "Литванија"
+ },
+ "LI": {
+ "name": "Лихтенштајн"
+ },
+ "LU": {
+ "name": "ЛукÑембург"
+ },
+ "MG": {
+ "name": "МадагаÑкар"
+ },
+ "HU": {
+ "name": "МађарÑка"
+ },
+ "YT": {
+ "name": "Мајот"
+ },
+ "MK": {
+ "name": "Македонија"
+ },
+ "MW": {
+ "name": "Малави"
+ },
+ "MV": {
+ "name": "Малдиви"
+ },
+ "MY": {
+ "name": "Малезија"
+ },
+ "ML": {
+ "name": "Мали"
+ },
+ "MT": {
+ "name": "Малта"
+ },
+ "MA": {
+ "name": "Мароко"
+ },
+ "MQ": {
+ "name": "Мартиник"
+ },
+ "MH": {
+ "name": "МаршалÑка ОÑтрва"
+ },
+ "MR": {
+ "name": "Мауританија"
+ },
+ "MU": {
+ "name": "МаурицијуÑ"
+ },
+ "MX": {
+ "name": "МекÑико"
+ },
+ "MM": {
+ "name": "Мијанмар (Бурма)"
+ },
+ "FM": {
+ "name": "Микронезија"
+ },
+ "MZ": {
+ "name": "Мозамбик"
+ },
+ "MD": {
+ "name": "Молдавија"
+ },
+ "MC": {
+ "name": "Монако"
+ },
+ "MN": {
+ "name": "Монголија"
+ },
+ "MS": {
+ "name": "МонÑерат"
+ },
+ "NA": {
+ "name": "Ðамибија"
+ },
+ "NR": {
+ "name": "Ðауру"
+ },
+ "DE": {
+ "name": "Ðемачка"
+ },
+ "NP": {
+ "name": "Ðепал"
+ },
+ "NE": {
+ "name": "Ðигер"
+ },
+ "NG": {
+ "name": "Ðигерија"
+ },
+ "NI": {
+ "name": "Ðикарагва"
+ },
+ "NU": {
+ "name": "Ðиуе"
+ },
+ "NC": {
+ "name": "Ðова Каледонија"
+ },
+ "NZ": {
+ "name": "Ðови Зеланд"
+ },
+ "NO": {
+ "name": "Ðорвешка"
+ },
+ "NF": {
+ "name": "Ðорфолк ОÑтрво"
+ },
+ "CI": {
+ "name": "Обала Слоноваче"
+ },
+ "AX": {
+ "name": "ОландÑка оÑтрва"
+ },
+ "OM": {
+ "name": "Оман"
+ },
+ "TC": {
+ "name": "ОÑтрва Ð¢ÑƒÑ€ÐºÑ Ð¸ КаикоÑ"
+ },
+ "AC": {
+ "name": "ОÑтрво ÐÑенÑион"
+ },
+ "IM": {
+ "name": "ОÑтрво Ман"
+ },
+ "PK": {
+ "name": "ПакиÑтан"
+ },
+ "PW": {
+ "name": "Палау"
+ },
+ "PS": {
+ "name": "ПалеÑтинÑке територије"
+ },
+ "PA": {
+ "name": "Панама"
+ },
+ "PG": {
+ "name": "Папуа Ðова Гвинеја"
+ },
+ "PY": {
+ "name": "Парагвај"
+ },
+ "PE": {
+ "name": "Перу"
+ },
+ "PN": {
+ "name": "Питкерн"
+ },
+ "PL": {
+ "name": "ПољÑка"
+ },
+ "PR": {
+ "name": "Порторико"
+ },
+ "PT": {
+ "name": "Португал"
+ },
+ "RE": {
+ "name": "Реинион"
+ },
+ "RW": {
+ "name": "Руанда"
+ },
+ "RO": {
+ "name": "Румунија"
+ },
+ "RU": {
+ "name": "РуÑија"
+ },
+ "SV": {
+ "name": "Салвадор"
+ },
+ "WS": {
+ "name": "Самоа"
+ },
+ "SM": {
+ "name": "Сан Марино"
+ },
+ "ST": {
+ "name": "Сао Томе и Принципе"
+ },
+ "MO": {
+ "name": "СÐР Макао (Кина)"
+ },
+ "SA": {
+ "name": "СаудијÑка Ðрабија"
+ },
+ "SZ": {
+ "name": "Свазиленд"
+ },
+ "SJ": {
+ "name": "Свалбард и Јан Мајен"
+ },
+ "SH": {
+ "name": "Света Јелена"
+ },
+ "LC": {
+ "name": "Света Луција"
+ },
+ "BL": {
+ "name": "Свети Бартоломеј"
+ },
+ "SX": {
+ "name": "Свети Мартин"
+ },
+ "KP": {
+ "name": "Северна Кореја"
+ },
+ "MP": {
+ "name": "Северна МаријанÑка ОÑтрва"
+ },
+ "SC": {
+ "name": "Сејшели"
+ },
+ "PM": {
+ "name": "Сен Пјер и Микелон"
+ },
+ "SN": {
+ "name": "Сенегал"
+ },
+ "VC": {
+ "name": "Сент ВинÑент и Гренадини"
+ },
+ "KN": {
+ "name": "Сент ÐšÐ¸Ñ‚Ñ Ð¸ ÐевиÑ"
+ },
+ "MF": {
+ "name": "Сент Мартин"
+ },
+ "EA": {
+ "name": "Сеута и Мелиља"
+ },
+ "SL": {
+ "name": "Сијера Леоне"
+ },
+ "SG": {
+ "name": "Сингапур"
+ },
+ "SY": {
+ "name": "Сирија"
+ },
+ "US": {
+ "name": "Сједињене Ðмеричке Државе"
+ },
+ "SK": {
+ "name": "Словачка"
+ },
+ "SI": {
+ "name": "Словенија"
+ },
+ "SB": {
+ "name": "СоломонÑка ОÑтрва"
+ },
+ "SO": {
+ "name": "Сомалија"
+ },
+ "RS": {
+ "name": "Србија"
+ },
+ "SD": {
+ "name": "Судан"
+ },
+ "SR": {
+ "name": "Суринам"
+ },
+ "TW": {
+ "name": "Тајван"
+ },
+ "TH": {
+ "name": "Тајланд"
+ },
+ "TZ": {
+ "name": "Танзанија"
+ },
+ "TJ": {
+ "name": "ТаџикиÑтан"
+ },
+ "TG": {
+ "name": "Того"
+ },
+ "TK": {
+ "name": "Токелау"
+ },
+ "TO": {
+ "name": "Тонга"
+ },
+ "TT": {
+ "name": "Тринидад и Тобаго"
+ },
+ "TA": {
+ "name": "ТриÑтан да Куња"
+ },
+ "TV": {
+ "name": "Тувалу"
+ },
+ "TN": {
+ "name": "ТуниÑ"
+ },
+ "TM": {
+ "name": "ТуркмениÑтан"
+ },
+ "TR": {
+ "name": "ТурÑка"
+ },
+ "UG": {
+ "name": "Уганда"
+ },
+ "UM": {
+ "name": "Удаљена оÑтрва СÐД"
+ },
+ "UZ": {
+ "name": "УзбекиÑтан"
+ },
+ "AE": {
+ "name": "Уједињени ÐрапÑки Емирати"
+ },
+ "UA": {
+ "name": "Украјина"
+ },
+ "UY": {
+ "name": "Уругвај"
+ },
+ "FO": {
+ "name": "ФарÑка ОÑтрва"
+ },
+ "PH": {
+ "name": "Филипини"
+ },
+ "FI": {
+ "name": "ФинÑка"
+ },
+ "FJ": {
+ "name": "Фиџи"
+ },
+ "FK": {
+ "name": "ФокландÑка оÑтрва"
+ },
+ "FR": {
+ "name": "ФранцуÑка"
+ },
+ "GF": {
+ "name": "ФранцуÑка Гвајана"
+ },
+ "PF": {
+ "name": "ФранцуÑка Полинезија"
+ },
+ "TF": {
+ "name": "ФранцуÑке Јужне Територије"
+ },
+ "HT": {
+ "name": "Хаити"
+ },
+ "NL": {
+ "name": "Холандија"
+ },
+ "HK": {
+ "name": "Хонг Конг С. Ð. Р. Кина"
+ },
+ "HN": {
+ "name": "ХондураÑ"
+ },
+ "HR": {
+ "name": "ХрватÑка"
+ },
+ "CF": {
+ "name": "Централноафричка Република"
+ },
+ "ME": {
+ "name": "Црна Гора"
+ },
+ "TD": {
+ "name": "Чад"
+ },
+ "CZ": {
+ "name": "Чешка"
+ },
+ "CL": {
+ "name": "Чиле"
+ },
+ "JE": {
+ "name": "ÐерÑи"
+ },
+ "DJ": {
+ "name": "Ðибути"
+ },
+ "CH": {
+ "name": "ШвајцарÑка"
+ },
+ "SE": {
+ "name": "ШведÑка"
+ },
+ "ES": {
+ "name": "Шпанија"
+ },
+ "LK": {
+ "name": "Шри Ланка"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/sv-FI.json b/library/intl/resources/country/sv-FI.json
new file mode 100644
index 000000000..16e1eeded
--- /dev/null
+++ b/library/intl/resources/country/sv-FI.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AL": {
+ "name": "Albanien"
+ },
+ "DZ": {
+ "name": "Algeriet"
+ },
+ "VI": {
+ "name": "Amerikanska Jungfruöarna"
+ },
+ "AS": {
+ "name": "Amerikanska Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktis"
+ },
+ "AG": {
+ "name": "Antigua och Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenien"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension"
+ },
+ "AU": {
+ "name": "Australien"
+ },
+ "AZ": {
+ "name": "Azerbajdzjan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgien"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BQ": {
+ "name": "Bonaire, S:t Eustatius och Saba"
+ },
+ "BA": {
+ "name": "Bosnien och Hercegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasilien"
+ },
+ "VG": {
+ "name": "Brittiska Jungfruöarna"
+ },
+ "IO": {
+ "name": "Brittiska territoriet i Indiska oceanen"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgarien"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "MM": {
+ "name": "Burma"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KY": {
+ "name": "Caymanöarna"
+ },
+ "CF": {
+ "name": "Centralafrikanska republiken"
+ },
+ "EA": {
+ "name": "Ceuta och Melilla"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "CK": {
+ "name": "Cooköarna"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cypern"
+ },
+ "DK": {
+ "name": "Danmark"
+ },
+ "CD": {
+ "name": "Demokratiska republiken Kongo"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominikanska republiken"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypten"
+ },
+ "GQ": {
+ "name": "Ekvatorialguinea"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "CI": {
+ "name": "Elfenbenskusten"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estland"
+ },
+ "ET": {
+ "name": "Etiopien"
+ },
+ "FK": {
+ "name": "Falklandsöarna"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filippinerna"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "Frankrike"
+ },
+ "GF": {
+ "name": "Franska Guyana"
+ },
+ "PF": {
+ "name": "Franska Polynesien"
+ },
+ "TF": {
+ "name": "Franska sydterritorierna"
+ },
+ "FO": {
+ "name": "Färöarna"
+ },
+ "AE": {
+ "name": "Förenade Arabemiraten"
+ },
+ "GB": {
+ "name": "Förenade kungariket"
+ },
+ "US": {
+ "name": "Förenta staterna"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgien"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Grekland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grönland"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hongkong (S.A.R. Kina)"
+ },
+ "IN": {
+ "name": "Indien"
+ },
+ "ID": {
+ "name": "Indonesien"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irland"
+ },
+ "IS": {
+ "name": "Island"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italien"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordanien"
+ },
+ "CX": {
+ "name": "Julön"
+ },
+ "KH": {
+ "name": "Kambodja"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanarieöarna"
+ },
+ "CV": {
+ "name": "Kap Verde"
+ },
+ "KZ": {
+ "name": "Kazakstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CN": {
+ "name": "Kina"
+ },
+ "KG": {
+ "name": "Kirgizistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CC": {
+ "name": "Kokosöarna"
+ },
+ "KM": {
+ "name": "Komorerna"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "HR": {
+ "name": "Kroatien"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Lettland"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libyen"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Litauen"
+ },
+ "LU": {
+ "name": "Luxemburg"
+ },
+ "MO": {
+ "name": "Macao (S.A.R. Kina)"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MK": {
+ "name": "Makedonien"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldiverna"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marocko"
+ },
+ "MH": {
+ "name": "Marshallöarna"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauretanien"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexiko"
+ },
+ "FM": {
+ "name": "Mikronesien"
+ },
+ "MZ": {
+ "name": "Moçambique"
+ },
+ "MD": {
+ "name": "Moldavien"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongoliet"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NL": {
+ "name": "Nederländerna"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "KP": {
+ "name": "Nordkorea"
+ },
+ "MP": {
+ "name": "Nordmarianerna"
+ },
+ "SD": {
+ "name": "Nordsudan"
+ },
+ "NF": {
+ "name": "Norfolkön"
+ },
+ "NO": {
+ "name": "Norge"
+ },
+ "NC": {
+ "name": "Nya Kaledonien"
+ },
+ "NZ": {
+ "name": "Nya Zeeland"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinska området"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Nya Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PL": {
+ "name": "Polen"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Rumänien"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "RU": {
+ "name": "Ryssland"
+ },
+ "MF": {
+ "name": "S:t Martin (franska delen)"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts och Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "PM": {
+ "name": "Saint Pierre och Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vincent och Grenadinerna"
+ },
+ "BL": {
+ "name": "Saint-Barthélemy"
+ },
+ "SB": {
+ "name": "Salomonöarna"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé och Príncipe"
+ },
+ "SA": {
+ "name": "Saudiarabien"
+ },
+ "CH": {
+ "name": "Schweiz"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbien"
+ },
+ "SC": {
+ "name": "Seychellerna"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Martin"
+ },
+ "SK": {
+ "name": "Slovakien"
+ },
+ "SI": {
+ "name": "Slovenien"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ES": {
+ "name": "Spanien"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard och Jan Mayen"
+ },
+ "SE": {
+ "name": "Sverige"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "ZA": {
+ "name": "Sydafrika"
+ },
+ "GS": {
+ "name": "Sydgeorgien och Sydsandwichöarna"
+ },
+ "KR": {
+ "name": "Sydkorea"
+ },
+ "SS": {
+ "name": "Sydsudan"
+ },
+ "SY": {
+ "name": "Syrien"
+ },
+ "TJ": {
+ "name": "Tadzjikistan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TD": {
+ "name": "Tchad"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "CZ": {
+ "name": "Tjeckien"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelauöarna"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad och Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisien"
+ },
+ "TR": {
+ "name": "Turkiet"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks- och Caicosöarna"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "DE": {
+ "name": "Tyskland"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraina"
+ },
+ "HU": {
+ "name": "Ungern"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UM": {
+ "name": "USA:s yttre öar"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikanen"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "BY": {
+ "name": "Vitryssland"
+ },
+ "EH": {
+ "name": "Västsahara"
+ },
+ "WF": {
+ "name": "Wallis- och Futuna"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ },
+ "AX": {
+ "name": "Ã…land"
+ },
+ "AT": {
+ "name": "Österrike"
+ },
+ "TL": {
+ "name": "Östtimor"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/sv.json b/library/intl/resources/country/sv.json
new file mode 100644
index 000000000..dac3698c6
--- /dev/null
+++ b/library/intl/resources/country/sv.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "AL": {
+ "name": "Albanien"
+ },
+ "DZ": {
+ "name": "Algeriet"
+ },
+ "VI": {
+ "name": "Amerikanska Jungfruöarna"
+ },
+ "AS": {
+ "name": "Amerikanska Samoa"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktis"
+ },
+ "AG": {
+ "name": "Antigua och Barbuda"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenien"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension"
+ },
+ "AU": {
+ "name": "Australien"
+ },
+ "AZ": {
+ "name": "Azerbajdzjan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgien"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnien och Hercegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasilien"
+ },
+ "VG": {
+ "name": "Brittiska Jungfruöarna"
+ },
+ "IO": {
+ "name": "Brittiska territoriet i Indiska oceanen"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgarien"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "KY": {
+ "name": "Caymanöarna"
+ },
+ "CF": {
+ "name": "Centralafrikanska republiken"
+ },
+ "EA": {
+ "name": "Ceuta och Melilla"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "CK": {
+ "name": "Cooköarna"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "CY": {
+ "name": "Cypern"
+ },
+ "DK": {
+ "name": "Danmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "DO": {
+ "name": "Dominikanska republiken"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypten"
+ },
+ "GQ": {
+ "name": "Ekvatorialguinea"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "CI": {
+ "name": "Elfenbenskusten"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estland"
+ },
+ "ET": {
+ "name": "Etiopien"
+ },
+ "FK": {
+ "name": "Falklandsöarna"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filippinerna"
+ },
+ "FI": {
+ "name": "Finland"
+ },
+ "FR": {
+ "name": "Frankrike"
+ },
+ "GF": {
+ "name": "Franska Guyana"
+ },
+ "PF": {
+ "name": "Franska Polynesien"
+ },
+ "TF": {
+ "name": "Franska sydterritorierna"
+ },
+ "FO": {
+ "name": "Färöarna"
+ },
+ "AE": {
+ "name": "Förenade Arabemiraten"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgien"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GR": {
+ "name": "Grekland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grönland"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hongkong (S.A.R. Kina)"
+ },
+ "IN": {
+ "name": "Indien"
+ },
+ "ID": {
+ "name": "Indonesien"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irland"
+ },
+ "IS": {
+ "name": "Island"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italien"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "YE": {
+ "name": "Jemen"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordanien"
+ },
+ "CX": {
+ "name": "Julön"
+ },
+ "KH": {
+ "name": "Kambodja"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanarieöarna"
+ },
+ "CV": {
+ "name": "Kap Verde"
+ },
+ "BQ": {
+ "name": "Karibiska Nederländerna"
+ },
+ "KZ": {
+ "name": "Kazakstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CN": {
+ "name": "Kina"
+ },
+ "KG": {
+ "name": "Kirgizistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CC": {
+ "name": "Kokosöarna"
+ },
+ "KM": {
+ "name": "Komorerna"
+ },
+ "CG": {
+ "name": "Kongo-Brazzaville"
+ },
+ "CD": {
+ "name": "Kongo-Kinshasa"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "HR": {
+ "name": "Kroatien"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuwait"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Lettland"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libyen"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Litauen"
+ },
+ "LU": {
+ "name": "Luxemburg"
+ },
+ "MO": {
+ "name": "Macao (S.A.R. Kina)"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MK": {
+ "name": "Makedonien"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldiverna"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Marocko"
+ },
+ "MH": {
+ "name": "Marshallöarna"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauretanien"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexiko"
+ },
+ "FM": {
+ "name": "Mikronesien"
+ },
+ "MZ": {
+ "name": "Moçambique"
+ },
+ "MD": {
+ "name": "Moldavien"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "MN": {
+ "name": "Mongoliet"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NL": {
+ "name": "Nederländerna"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "KP": {
+ "name": "Nordkorea"
+ },
+ "MP": {
+ "name": "Nordmarianerna"
+ },
+ "NF": {
+ "name": "Norfolkön"
+ },
+ "NO": {
+ "name": "Norge"
+ },
+ "NC": {
+ "name": "Nya Kaledonien"
+ },
+ "NZ": {
+ "name": "Nya Zeeland"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Palestinska territorierna"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Nya Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairnöarna"
+ },
+ "PL": {
+ "name": "Polen"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Rumänien"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "RU": {
+ "name": "Ryssland"
+ },
+ "BL": {
+ "name": "S:t Barthélemy"
+ },
+ "SH": {
+ "name": "S:t Helena"
+ },
+ "KN": {
+ "name": "S:t Kitts och Nevis"
+ },
+ "LC": {
+ "name": "S:t Lucia"
+ },
+ "MF": {
+ "name": "S:t Martin"
+ },
+ "PM": {
+ "name": "S:t Pierre och Miquelon"
+ },
+ "VC": {
+ "name": "S:t Vincent och Grenadinerna"
+ },
+ "SB": {
+ "name": "Salomonöarna"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé och Príncipe"
+ },
+ "SA": {
+ "name": "Saudiarabien"
+ },
+ "CH": {
+ "name": "Schweiz"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbien"
+ },
+ "SC": {
+ "name": "Seychellerna"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakien"
+ },
+ "SI": {
+ "name": "Slovenien"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "ES": {
+ "name": "Spanien"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "GB": {
+ "name": "Storbritannien"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SJ": {
+ "name": "Svalbard och Jan Mayen"
+ },
+ "SE": {
+ "name": "Sverige"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "ZA": {
+ "name": "Sydafrika"
+ },
+ "GS": {
+ "name": "Sydgeorgien och Sydsandwichöarna"
+ },
+ "KR": {
+ "name": "Sydkorea"
+ },
+ "SS": {
+ "name": "Sydsudan"
+ },
+ "SY": {
+ "name": "Syrien"
+ },
+ "TJ": {
+ "name": "Tadzjikistan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TD": {
+ "name": "Tchad"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "CZ": {
+ "name": "Tjeckien"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad och Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisien"
+ },
+ "TR": {
+ "name": "Turkiet"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TC": {
+ "name": "Turks- och Caicosöarna"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "DE": {
+ "name": "Tyskland"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraina"
+ },
+ "HU": {
+ "name": "Ungern"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "US": {
+ "name": "USA"
+ },
+ "UM": {
+ "name": "USA:s yttre öar"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikanstaten"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "BY": {
+ "name": "Vitryssland"
+ },
+ "EH": {
+ "name": "Västsahara"
+ },
+ "WF": {
+ "name": "Wallis- och Futunaöarna"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ },
+ "AX": {
+ "name": "Ã…land"
+ },
+ "AT": {
+ "name": "Österrike"
+ },
+ "TL": {
+ "name": "Östtimor"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/sw.json b/library/intl/resources/country/sw.json
new file mode 100644
index 000000000..850cefc29
--- /dev/null
+++ b/library/intl/resources/country/sw.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "ZA": {
+ "name": "Afrika Kusini"
+ },
+ "IS": {
+ "name": "Aislandi"
+ },
+ "AR": {
+ "name": "Ajentina"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljeria"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antaktika"
+ },
+ "AG": {
+ "name": "Antigua na Barbuda"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "IE": {
+ "name": "Ayalandi"
+ },
+ "AZ": {
+ "name": "Azabajani"
+ },
+ "BB": {
+ "name": "Babadosi"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BH": {
+ "name": "Bahareni"
+ },
+ "BD": {
+ "name": "Bangladeshi"
+ },
+ "BY": {
+ "name": "Belarusi"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia na Hezegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazili"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BF": {
+ "name": "Bukinafaso"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "EA": {
+ "name": "Ceuta na Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CI": {
+ "name": "Côte d’Ivoire"
+ },
+ "DK": {
+ "name": "Denmaki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekwado"
+ },
+ "SV": {
+ "name": "Elsavado"
+ },
+ "IO": {
+ "name": "Eneo la Uingereza katika Bahari Hindi"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "AE": {
+ "name": "Falme za Kiarabu"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipino"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Ginebisau"
+ },
+ "GQ": {
+ "name": "Ginekweta"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grinlandi"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GP": {
+ "name": "Gwadelupe"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GF": {
+ "name": "Gwiyana ya Ufaransa"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ES": {
+ "name": "Hispania"
+ },
+ "HN": {
+ "name": "Hondurasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungaria"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israeli"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "CF": {
+ "name": "Jamhuri ya Afrika ya Kati"
+ },
+ "CZ": {
+ "name": "Jamhuri ya Cheki"
+ },
+ "DO": {
+ "name": "Jamhuri ya Dominika"
+ },
+ "CD": {
+ "name": "Jamhuri ya Kidemokrasia ya Kongo"
+ },
+ "JP": {
+ "name": "Japani"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibralta"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "GE": {
+ "name": "Jojia"
+ },
+ "GS": {
+ "name": "Jojia Kusini na Visiwa vya Sandwich Kusini"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kameruni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katari"
+ },
+ "KZ": {
+ "name": "Kazakistani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CV": {
+ "name": "Kepuvede"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizistani"
+ },
+ "AC": {
+ "name": "Kisiwa cha Ascension"
+ },
+ "CX": {
+ "name": "Kisiwa cha Krismasi"
+ },
+ "NF": {
+ "name": "Kisiwa cha Norfolk"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komoro"
+ },
+ "CG": {
+ "name": "Kongo - Brazzaville"
+ },
+ "HR": {
+ "name": "Korasia"
+ },
+ "KP": {
+ "name": "Korea Kaskazini"
+ },
+ "KR": {
+ "name": "Korea Kusini"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CW": {
+ "name": "Kurakao"
+ },
+ "KW": {
+ "name": "Kuwaiti"
+ },
+ "LA": {
+ "name": "Laosi"
+ },
+ "LU": {
+ "name": "Lasembagi"
+ },
+ "LV": {
+ "name": "Lativia"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Litwania"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madagaska"
+ },
+ "TF": {
+ "name": "Maeneo ya Kusini ya Ufaransa"
+ },
+ "PS": {
+ "name": "Maeneo ya Palestina"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malesia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "US": {
+ "name": "Marekani"
+ },
+ "MQ": {
+ "name": "Martiniki"
+ },
+ "MK": {
+ "name": "Masedonia"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "FM": {
+ "name": "Mikronesia"
+ },
+ "EG": {
+ "name": "Misri"
+ },
+ "MV": {
+ "name": "Modivu"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrati"
+ },
+ "MU": {
+ "name": "Morisi"
+ },
+ "MR": {
+ "name": "Moritania"
+ },
+ "MA": {
+ "name": "Moroko"
+ },
+ "MZ": {
+ "name": "Msumbiji"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NE": {
+ "name": "Nijeri"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norwe"
+ },
+ "NC": {
+ "name": "Nyukaledonia"
+ },
+ "NZ": {
+ "name": "Nyuzilandi"
+ },
+ "OM": {
+ "name": "Omani"
+ },
+ "PK": {
+ "name": "Pakistani"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua"
+ },
+ "PY": {
+ "name": "Paragwai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkairni"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PF": {
+ "name": "Polinesia ya Ufaransa"
+ },
+ "PR": {
+ "name": "Pwetoriko"
+ },
+ "RE": {
+ "name": "Riyunioni"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "EH": {
+ "name": "Sahara Magharibi"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "CY": {
+ "name": "Saiprasi"
+ },
+ "SM": {
+ "name": "Samarino"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa ya Marekani"
+ },
+ "BL": {
+ "name": "Santabathelemi"
+ },
+ "SH": {
+ "name": "Santahelena"
+ },
+ "KN": {
+ "name": "Santakitzi na Nevis"
+ },
+ "LC": {
+ "name": "Santalusia"
+ },
+ "SX": {
+ "name": "Santamatini"
+ },
+ "PM": {
+ "name": "Santapieri na Mikeloni"
+ },
+ "VC": {
+ "name": "Santavisenti na Grenadini"
+ },
+ "ST": {
+ "name": "São Tomé na Príncipe"
+ },
+ "SA": {
+ "name": "Saudi"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Shelisheli"
+ },
+ "SL": {
+ "name": "Siera Leoni"
+ },
+ "SG": {
+ "name": "Singapoo"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "LK": {
+ "name": "Sirilanka"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SS": {
+ "name": "Sudani Kusini"
+ },
+ "SR": {
+ "name": "Surinamu"
+ },
+ "SJ": {
+ "name": "Svalbard na Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandi"
+ },
+ "TW": {
+ "name": "Taiwani"
+ },
+ "TJ": {
+ "name": "Tajikistani"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TL": {
+ "name": "Timor ya Mashariki"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad na Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turukimenistani"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "BE": {
+ "name": "Ubelgiji"
+ },
+ "FR": {
+ "name": "Ufaransa"
+ },
+ "FI": {
+ "name": "Ufini"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "GR": {
+ "name": "Ugiriki"
+ },
+ "ET": {
+ "name": "Uhabeshi"
+ },
+ "NL": {
+ "name": "Uholanzi"
+ },
+ "BQ": {
+ "name": "Uholanzi ya Karibiani"
+ },
+ "GB": {
+ "name": "Uingereza"
+ },
+ "DE": {
+ "name": "Ujerumani"
+ },
+ "UA": {
+ "name": "Ukraini"
+ },
+ "PT": {
+ "name": "Ureno"
+ },
+ "UY": {
+ "name": "Urugwai"
+ },
+ "RU": {
+ "name": "Urusi"
+ },
+ "SZ": {
+ "name": "Uswazi"
+ },
+ "SE": {
+ "name": "Uswidi"
+ },
+ "CH": {
+ "name": "Uswisi"
+ },
+ "TR": {
+ "name": "Uturuki"
+ },
+ "UZ": {
+ "name": "Uzibekistani"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietinamu"
+ },
+ "UM": {
+ "name": "Visiwa Vidogo vya Nje vya Marekani"
+ },
+ "AX": {
+ "name": "Visiwa vya Alandi"
+ },
+ "CC": {
+ "name": "Visiwa vya Cocos (Keeling)"
+ },
+ "CK": {
+ "name": "Visiwa vya Cook"
+ },
+ "FK": {
+ "name": "Visiwa vya Falkland"
+ },
+ "FO": {
+ "name": "Visiwa vya Faroe"
+ },
+ "IC": {
+ "name": "Visiwa vya Kanari"
+ },
+ "KY": {
+ "name": "Visiwa vya Kayman"
+ },
+ "MP": {
+ "name": "Visiwa vya Mariana vya Kaskazini"
+ },
+ "MH": {
+ "name": "Visiwa vya Marshal"
+ },
+ "SB": {
+ "name": "Visiwa vya Solomon"
+ },
+ "TC": {
+ "name": "Visiwa vya Turki na Kaiko"
+ },
+ "VI": {
+ "name": "Visiwa vya Virgin vya Marekani"
+ },
+ "VG": {
+ "name": "Visiwa vya Virgin vya Uingereza"
+ },
+ "WF": {
+ "name": "Walis na Futuna"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "JO": {
+ "name": "Yordani"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/swc.json b/library/intl/resources/country/swc.json
new file mode 100644
index 000000000..e57db8007
--- /dev/null
+++ b/library/intl/resources/country/swc.json
@@ -0,0 +1,761 @@
+{
+ "ZA": {
+ "name": "Afrika Kusini"
+ },
+ "AF": {
+ "name": "Afuganistani"
+ },
+ "IS": {
+ "name": "Aislandi"
+ },
+ "AR": {
+ "name": "Ajentina"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljeria"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua na Barbuda"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "IE": {
+ "name": "Ayalandi"
+ },
+ "AZ": {
+ "name": "Azabajani"
+ },
+ "BB": {
+ "name": "Babadosi"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BH": {
+ "name": "Bahareni"
+ },
+ "BD": {
+ "name": "Bangladeshi"
+ },
+ "BY": {
+ "name": "Belarusi"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia na Hezegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazili"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BF": {
+ "name": "Bukinafaso"
+ },
+ "MG": {
+ "name": "Bukini"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denmaki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekwado"
+ },
+ "SV": {
+ "name": "Elsavado"
+ },
+ "IO": {
+ "name": "Eneo la Uingereza katika Bahari Hindi"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "AE": {
+ "name": "Falme za Kiarabu"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipino"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Ginebisau"
+ },
+ "GQ": {
+ "name": "Ginekweta"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grinlandi"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GP": {
+ "name": "Gwadelupe"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GF": {
+ "name": "Gwiyana ya Ufaransa"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ES": {
+ "name": "Hispania"
+ },
+ "HN": {
+ "name": "Hondurasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungaria"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israeli"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "CF": {
+ "name": "Jamhuri ya Afrika ya Kati"
+ },
+ "CZ": {
+ "name": "Jamhuri ya Cheki"
+ },
+ "DO": {
+ "name": "Jamhuri ya Dominika"
+ },
+ "CD": {
+ "name": "Jamhuri ya Kidemokrasia ya Kongo"
+ },
+ "JP": {
+ "name": "Japani"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibralta"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "GE": {
+ "name": "Jojia"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kameruni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katari"
+ },
+ "KZ": {
+ "name": "Kazakistani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CV": {
+ "name": "Kepuvede"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizistani"
+ },
+ "NF": {
+ "name": "Kisiwa cha Norfok"
+ },
+ "CI": {
+ "name": "Kodivaa"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komoro"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "HR": {
+ "name": "Korasia"
+ },
+ "KP": {
+ "name": "Korea Kaskazini"
+ },
+ "KR": {
+ "name": "Korea Kusini"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CY": {
+ "name": "Kuprosi"
+ },
+ "KW": {
+ "name": "Kuwaiti"
+ },
+ "LA": {
+ "name": "Laosi"
+ },
+ "LU": {
+ "name": "Lasembagi"
+ },
+ "LV": {
+ "name": "Lativia"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Lishenteni"
+ },
+ "LT": {
+ "name": "Litwania"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malesia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "US": {
+ "name": "Marekani"
+ },
+ "MQ": {
+ "name": "Martiniki"
+ },
+ "MK": {
+ "name": "Masedonia"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "FM": {
+ "name": "Mikronesia"
+ },
+ "EG": {
+ "name": "Misri"
+ },
+ "MV": {
+ "name": "Modivu"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrati"
+ },
+ "MU": {
+ "name": "Morisi"
+ },
+ "MR": {
+ "name": "Moritania"
+ },
+ "MA": {
+ "name": "Moroko"
+ },
+ "MZ": {
+ "name": "Msumbiji"
+ },
+ "MM": {
+ "name": "Myama"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "NE": {
+ "name": "Nijeri"
+ },
+ "NG": {
+ "name": "Nijeria"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norwe"
+ },
+ "NC": {
+ "name": "Nyukaledonia"
+ },
+ "NZ": {
+ "name": "Nyuzilandi"
+ },
+ "OM": {
+ "name": "Omani"
+ },
+ "PK": {
+ "name": "Pakistani"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua"
+ },
+ "PY": {
+ "name": "Paragwai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkairni"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PF": {
+ "name": "Polinesia ya Ufaransa"
+ },
+ "PR": {
+ "name": "Pwetoriko"
+ },
+ "RE": {
+ "name": "Riyunioni"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SM": {
+ "name": "Samarino"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa ya Marekani"
+ },
+ "SH": {
+ "name": "Santahelena"
+ },
+ "KN": {
+ "name": "Santakitzi na Nevis"
+ },
+ "LC": {
+ "name": "Santalusia"
+ },
+ "PM": {
+ "name": "Santapieri na Mikeloni"
+ },
+ "VC": {
+ "name": "Santavisenti na Grenadini"
+ },
+ "ST": {
+ "name": "Sao Tome na Principe"
+ },
+ "SA": {
+ "name": "Saudi"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Shelisheli"
+ },
+ "SL": {
+ "name": "Siera Leoni"
+ },
+ "SG": {
+ "name": "Singapoo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "LK": {
+ "name": "Sirilanka"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SR": {
+ "name": "Surinamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandi"
+ },
+ "TW": {
+ "name": "Taiwani"
+ },
+ "TJ": {
+ "name": "Tajikistani"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TL": {
+ "name": "Timori ya Mashariki"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad na Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turukimenistani"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "IR": {
+ "name": "Uajemi"
+ },
+ "BE": {
+ "name": "Ubelgiji"
+ },
+ "FR": {
+ "name": "Ufaransa"
+ },
+ "FI": {
+ "name": "Ufini"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "GR": {
+ "name": "Ugiriki"
+ },
+ "ET": {
+ "name": "Uhabeshi"
+ },
+ "NL": {
+ "name": "Uholanzi"
+ },
+ "GB": {
+ "name": "Uingereza"
+ },
+ "DE": {
+ "name": "Ujerumani"
+ },
+ "PS": {
+ "name": "Ukingo wa Magharibi na Ukanda wa Gaza wa Palestina"
+ },
+ "UA": {
+ "name": "Ukraini"
+ },
+ "PT": {
+ "name": "Ureno"
+ },
+ "UY": {
+ "name": "Urugwai"
+ },
+ "RU": {
+ "name": "Urusi"
+ },
+ "SZ": {
+ "name": "Uswazi"
+ },
+ "SE": {
+ "name": "Uswidi"
+ },
+ "CH": {
+ "name": "Uswisi"
+ },
+ "TR": {
+ "name": "Uturuki"
+ },
+ "UZ": {
+ "name": "Uzibekistani"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietinamu"
+ },
+ "CK": {
+ "name": "Visiwa vya Cook"
+ },
+ "FK": {
+ "name": "Visiwa vya Falkland"
+ },
+ "KY": {
+ "name": "Visiwa vya Kayman"
+ },
+ "MP": {
+ "name": "Visiwa vya Mariana vya Kaskazini"
+ },
+ "MH": {
+ "name": "Visiwa vya Marshal"
+ },
+ "SB": {
+ "name": "Visiwa vya Solomon"
+ },
+ "TC": {
+ "name": "Visiwa vya Turki na Kaiko"
+ },
+ "VI": {
+ "name": "Visiwa vya Virgin vya Marekani"
+ },
+ "VG": {
+ "name": "Visiwa vya Virgin vya Uingereza"
+ },
+ "WF": {
+ "name": "Walis na Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "JO": {
+ "name": "Yordani"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ta.json b/library/intl/resources/country/ta.json
new file mode 100644
index 000000000..611ae6d63
--- /dev/null
+++ b/library/intl/resources/country/ta.json
@@ -0,0 +1,761 @@
+{
+ "AI": {
+ "name": "à®…à®™à¯à®•à¯à®¯à¯à®²à®¾"
+ },
+ "AO": {
+ "name": "à®…à®™à¯à®•à¯‹à®²à®¾"
+ },
+ "AZ": {
+ "name": "அசரà¯à®ªà¯ˆà®œà®¾à®©à¯"
+ },
+ "AQ": {
+ "name": "அணà¯à®Ÿà®¾à®°à¯à®Ÿà®¿à®•à®¾"
+ },
+ "AS": {
+ "name": "அமெரிகà¯à®• சமோவா"
+ },
+ "US": {
+ "name": "அமெரிகà¯à®•à®¾"
+ },
+ "IE": {
+ "name": "அயரà¯à®²à®¾à®¨à¯à®¤à¯"
+ },
+ "AR": {
+ "name": "à®…à®°à¯à®œà¯†à®©à¯à®Ÿà®¿à®©à®¾"
+ },
+ "AW": {
+ "name": "அரூபா"
+ },
+ "AL": {
+ "name": "அலà¯à®ªà¯‡à®©à®¿à®¯à®¾"
+ },
+ "DZ": {
+ "name": "அலà¯à®œà¯€à®°à®¿à®¯à®¾"
+ },
+ "AD": {
+ "name": "அனà¯à®Ÿà¯‹à®°à®¾"
+ },
+ "AC": {
+ "name": "அஷனà¯à®·à®¿à®¯à®©à¯ தீவà¯"
+ },
+ "AG": {
+ "name": "ஆணà¯à®Ÿà®¿à®•à¯à®µà®¾ மறà¯à®±à¯à®®à¯ பாரà¯à®ªà¯à®Ÿà®¾"
+ },
+ "AF": {
+ "name": "ஆபà¯à®•à®¾à®©à®¿à®¸à¯à®¤à®¾à®©à¯"
+ },
+ "AM": {
+ "name": "ஆரà¯à®®à¯‡à®©à®¿à®¯à®¾"
+ },
+ "AX": {
+ "name": "ஆலநà¯à®¤à¯ தீவà¯à®•à®³à¯"
+ },
+ "AT": {
+ "name": "ஆஸà¯à®¤à®¿à®°à®¿à®¯à®¾"
+ },
+ "AU": {
+ "name": "ஆஸà¯à®¤à®¿à®°à¯‡à®²à®¿à®¯à®¾"
+ },
+ "IT": {
+ "name": "இதà¯à®¤à®¾à®²à®¿"
+ },
+ "IN": {
+ "name": "இநà¯à®¤à®¿à®¯à®¾"
+ },
+ "ID": {
+ "name": "இநà¯à®¤à¯‹à®©à¯‡à®·à®¿à®¯à®¾"
+ },
+ "LK": {
+ "name": "இலஙà¯à®•à¯ˆ"
+ },
+ "IL": {
+ "name": "இஸà¯à®°à¯‡à®²à¯"
+ },
+ "GQ": {
+ "name": "ஈகà¯à®•à¯à®µà®¾à®Ÿà¯‹à®°à®¿à®¯à®²à¯ கினியா"
+ },
+ "EC": {
+ "name": "ஈகà¯à®µà®Ÿà®¾à®°à¯"
+ },
+ "IQ": {
+ "name": "ஈராகà¯"
+ },
+ "IR": {
+ "name": "ஈரானà¯"
+ },
+ "UA": {
+ "name": "உகà¯à®°à¯ˆà®©à¯"
+ },
+ "UG": {
+ "name": "உகாணà¯à®Ÿà®¾"
+ },
+ "UY": {
+ "name": "உரà¯à®•à¯à®µà¯‡"
+ },
+ "UZ": {
+ "name": "உஸà¯à®ªà¯†à®•à®¿à®¸à¯à®¤à®¾à®©à¯"
+ },
+ "EG": {
+ "name": "எகிபà¯à®¤à¯"
+ },
+ "ET": {
+ "name": "எதியோபà¯à®ªà®¿à®¯à®¾"
+ },
+ "ER": {
+ "name": "எரிடà¯à®°à®¿à®¯à®¾"
+ },
+ "SV": {
+ "name": "எல௠சாலà¯à®µà®Ÿà®¾à®°à¯"
+ },
+ "EE": {
+ "name": "எஸà¯à®Ÿà¯‹à®©à®¿à®¯à®¾"
+ },
+ "YE": {
+ "name": "à®à®®à®©à¯"
+ },
+ "AE": {
+ "name": "à®à®•à¯à®•à®¿à®¯ அரப௠எமிரேடà¯à®¸à¯"
+ },
+ "GB": {
+ "name": "à®à®•à¯à®•à®¿à®¯ பேரரசà¯"
+ },
+ "IM": {
+ "name": "à®à®²à¯ ஆஃப௠மேனà¯"
+ },
+ "IS": {
+ "name": "à®à®¸à¯à®²à®¾à®¨à¯à®¤à¯"
+ },
+ "OM": {
+ "name": "ஓமனà¯"
+ },
+ "FK": {
+ "name": "ஃபாகà¯à®²à®¾à®¨à¯à®¤à¯ தீவà¯à®•à®³à¯"
+ },
+ "FO": {
+ "name": "ஃபாரோ தீவà¯à®•à®³à¯"
+ },
+ "FJ": {
+ "name": "ஃபிஜி"
+ },
+ "GP": {
+ "name": "கà¯à®µà®¾à®¤à¯‡à®²à¯‹à®ªà¯"
+ },
+ "QA": {
+ "name": "கதà¯à®¤à®¾à®°à¯"
+ },
+ "KH": {
+ "name": "கமà¯à®ªà¯‹à®Ÿà®¿à®¯à®¾"
+ },
+ "GY": {
+ "name": "கயானா"
+ },
+ "BQ": {
+ "name": "கரீபியன௠நெதரà¯à®²à®¾à®¨à¯à®¤à¯"
+ },
+ "GT": {
+ "name": "கவà¯à®¤à®®à®¾à®²à®¾"
+ },
+ "CA": {
+ "name": "கனடா"
+ },
+ "KZ": {
+ "name": "கஸகஸà¯à®¤à®¾à®©à¯"
+ },
+ "CD": {
+ "name": "காஙà¯à®•à¯‹ - கினà¯à®·à®¾à®šà®¾"
+ },
+ "CG": {
+ "name": "காஙà¯à®•à¯‹ - பà¯à®°à®¾à®¸à®¾à®µà®¿à®²à¯à®²à¯‡"
+ },
+ "GM": {
+ "name": "காமà¯à®ªà®¿à®¯à®¾"
+ },
+ "GH": {
+ "name": "கானா"
+ },
+ "CU": {
+ "name": "கியூபா"
+ },
+ "KG": {
+ "name": "கிரà¯à®•à®¿à®¸à¯à®¤à®¾à®©à¯"
+ },
+ "GD": {
+ "name": "கிரனெடா"
+ },
+ "KI": {
+ "name": "கிரிபடி"
+ },
+ "GL": {
+ "name": "கிரீனà¯à®²à®¾à®¨à¯à®¤à¯"
+ },
+ "GR": {
+ "name": "கிரீஸà¯"
+ },
+ "CX": {
+ "name": "கிறிஸà¯à®¤à¯à®®à®¸à¯ தீவà¯"
+ },
+ "GW": {
+ "name": "கினி-பிஸà¯à®¸à®¾à®µà¯"
+ },
+ "GN": {
+ "name": "கினியா"
+ },
+ "CK": {
+ "name": "கà¯à®•à¯ தீவà¯à®•à®³à¯"
+ },
+ "CW": {
+ "name": "கà¯à®°à®¾à®•à®µà¯"
+ },
+ "HR": {
+ "name": "கà¯à®°à¯‹à®šà®¿à®¯à®¾"
+ },
+ "GU": {
+ "name": "கà¯à®µà®¾à®®à¯"
+ },
+ "KW": {
+ "name": "கà¯à®µà¯ˆà®¤à¯"
+ },
+ "GG": {
+ "name": "கெரà¯à®©à¯à®šà®¿"
+ },
+ "KE": {
+ "name": "கெனà¯à®¯à®¾"
+ },
+ "CV": {
+ "name": "கேப௠வெரà¯à®Ÿà¯‡"
+ },
+ "GA": {
+ "name": "கேபானà¯"
+ },
+ "CM": {
+ "name": "கேமரூனà¯"
+ },
+ "KY": {
+ "name": "கேமென௠தீவà¯à®•à®³à¯"
+ },
+ "IC": {
+ "name": "கேனரி தீவà¯à®•à®³à¯"
+ },
+ "XK": {
+ "name": "கொசோவோ"
+ },
+ "CO": {
+ "name": "கொலமà¯à®ªà®¿à®¯à®¾"
+ },
+ "CC": {
+ "name": "கோகோஸ௠(கீலிஙà¯) தீவà¯à®•à®³à¯"
+ },
+ "CI": {
+ "name": "கோட௠தி’வாயரà¯"
+ },
+ "KM": {
+ "name": "கோமரோஸà¯"
+ },
+ "CR": {
+ "name": "கோஸà¯à®Ÿà®¾à®°à®¿à®•à®¾"
+ },
+ "WS": {
+ "name": "சமோவா"
+ },
+ "SA": {
+ "name": "சவூதி அரேபியா"
+ },
+ "TD": {
+ "name": "சாடà¯"
+ },
+ "SB": {
+ "name": "சாலமன௠தீவà¯à®•à®³à¯"
+ },
+ "ST": {
+ "name": "சாவ௠தோம௠மறà¯à®±à¯à®®à¯ பà¯à®°à®¿à®©à¯à®šà®¿à®ªà®¿"
+ },
+ "SM": {
+ "name": "சான௠மெரினோ"
+ },
+ "SG": {
+ "name": "சிஙà¯à®•à®ªà¯à®ªà¯‚à®°à¯"
+ },
+ "SL": {
+ "name": "சியரà¯à®°à®¾ லியோனà¯"
+ },
+ "EA": {
+ "name": "சியூடா மறà¯à®±à¯à®®à¯ மெலிலà¯à®²à®¾"
+ },
+ "SY": {
+ "name": "சிரியா"
+ },
+ "CL": {
+ "name": "சிலி"
+ },
+ "SX": {
+ "name": "சினà¯à®Ÿà¯ மாரà¯à®Ÿà¯†à®©à¯"
+ },
+ "CN": {
+ "name": "சீனா"
+ },
+ "SR": {
+ "name": "சà¯à®°à®¿à®©à®¾à®®à¯"
+ },
+ "SD": {
+ "name": "சூடானà¯"
+ },
+ "CZ": {
+ "name": "செக௠கà¯à®Ÿà®¿à®¯à®°à®šà¯"
+ },
+ "KN": {
+ "name": "செயினà¯à®Ÿà¯ கிடà¯à®¸à¯ மறà¯à®±à¯à®®à¯ நெவிஸà¯"
+ },
+ "BL": {
+ "name": "செயினà¯à®Ÿà¯ பாரà¯à®¤à¯‡à®²à¯†à®®à®¿"
+ },
+ "PM": {
+ "name": "செயினà¯à®Ÿà¯ பியர௠மறà¯à®±à¯à®®à¯ மிகà¯à®µà¯‡à®²à®¾à®©à¯"
+ },
+ "MF": {
+ "name": "செயினà¯à®Ÿà¯ மாரà¯à®Ÿà¯à®Ÿà¯€à®©à¯"
+ },
+ "LC": {
+ "name": "செயினà¯à®Ÿà¯ லூசியா"
+ },
+ "VC": {
+ "name": "செயினà¯à®Ÿà¯ வினà¯à®šà¯†à®©à¯à®Ÿà¯ மறà¯à®±à¯à®®à¯ கிரெனடைனà¯à®¸à¯"
+ },
+ "SH": {
+ "name": "செயினà¯à®Ÿà¯ ஹெலெனா"
+ },
+ "RS": {
+ "name": "செரà¯à®ªà®¿à®¯à®¾"
+ },
+ "SN": {
+ "name": "செனெகலà¯"
+ },
+ "CY": {
+ "name": "சைபà¯à®°à®¸à¯"
+ },
+ "SO": {
+ "name": "சோமாலியா"
+ },
+ "TT": {
+ "name": "டà¯à®°à®¿à®©à®¿à®Ÿà®¾à®Ÿà¯ மறà¯à®±à¯à®®à¯ டà¯à®ªà®¾à®•à¯‹"
+ },
+ "TC": {
+ "name": "டரà¯à®•à¯à®¸à¯ மறà¯à®±à¯à®®à¯ கைகோஸ௠தீவà¯à®•à®³à¯"
+ },
+ "DG": {
+ "name": "டியகோ காரà¯à®·à®¿à®¯à®¾"
+ },
+ "TA": {
+ "name": "டிரிஸà¯à®Ÿà®©à¯ டா கà¯à®©à¯à®¹à®¾"
+ },
+ "TN": {
+ "name": "டà¯à®©à®¿à®šà®¿à®¯à®¾"
+ },
+ "DK": {
+ "name": "டெனà¯à®®à®¾à®°à¯à®•à¯"
+ },
+ "DO": {
+ "name": "டொமினிகன௠கà¯à®Ÿà®¿à®¯à®°à®šà¯"
+ },
+ "DM": {
+ "name": "டொமினிகா"
+ },
+ "TK": {
+ "name": "டோகேலோ"
+ },
+ "TG": {
+ "name": "டோகோ"
+ },
+ "TO": {
+ "name": "டோஙà¯à®•à®¾"
+ },
+ "TH": {
+ "name": "தாயà¯à®²à®¾à®¨à¯à®¤à¯"
+ },
+ "TZ": {
+ "name": "தானà¯à®šà®¾à®©à®¿à®¯à®¾"
+ },
+ "TJ": {
+ "name": "தாஜிகிஸà¯à®¤à®¾à®©à¯"
+ },
+ "TM": {
+ "name": "தà¯à®°à¯à®•à¯à®®à¯†à®©à®¿à®¸à¯à®¤à®¾à®©à¯"
+ },
+ "TR": {
+ "name": "தà¯à®°à¯à®•à¯à®•à®¿"
+ },
+ "TV": {
+ "name": "தà¯à®µà®¾à®²à¯‚"
+ },
+ "SS": {
+ "name": "தெறà¯à®•à¯ சூடானà¯"
+ },
+ "ZA": {
+ "name": "தென௠ஆபà¯à®ªà®¿à®°à®¿à®•à¯à®•à®¾"
+ },
+ "KR": {
+ "name": "தென௠கொரியா"
+ },
+ "GS": {
+ "name": "தென௠ஜியாரà¯à®œà®¿à®¯à®¾ மறà¯à®±à¯à®®à¯ தென௠சானà¯à®Ÿà¯à®µà®¿à®šà¯ தீவà¯à®•à®³à¯"
+ },
+ "TL": {
+ "name": "தைமூரà¯-லெஸà¯à®¤à¯‡"
+ },
+ "TW": {
+ "name": "தைவானà¯"
+ },
+ "NA": {
+ "name": "நமீபியா"
+ },
+ "NF": {
+ "name": "நாரà¯à®ƒà®ªà®¾à®•à¯ தீவà¯à®•à®³à¯"
+ },
+ "NO": {
+ "name": "நாரà¯à®µà¯‡"
+ },
+ "NI": {
+ "name": "நிகரகà¯à®µà®¾"
+ },
+ "NU": {
+ "name": "நியூ"
+ },
+ "NC": {
+ "name": "நியூ கேலிடோனியா"
+ },
+ "NZ": {
+ "name": "நியூசிலாநà¯à®¤à¯"
+ },
+ "NL": {
+ "name": "நெதரà¯à®²à®¾à®¨à¯à®¤à¯"
+ },
+ "NP": {
+ "name": "நேபாளமà¯"
+ },
+ "NE": {
+ "name": "நைஜரà¯"
+ },
+ "NG": {
+ "name": "நைஜீரியா"
+ },
+ "NR": {
+ "name": "நௌரà¯"
+ },
+ "BD": {
+ "name": "பஙà¯à®•à®³à®¾à®¤à¯‡à®·à¯"
+ },
+ "PY": {
+ "name": "பராகà¯à®µà¯‡"
+ },
+ "BG": {
+ "name": "பலà¯à®•à¯‡à®°à®¿à®¯à®¾"
+ },
+ "PA": {
+ "name": "பனாமா"
+ },
+ "BH": {
+ "name": "பஹà¯à®°à¯ˆà®©à¯"
+ },
+ "BS": {
+ "name": "பஹாமாஸà¯"
+ },
+ "PK": {
+ "name": "பாகிஸà¯à®¤à®¾à®©à¯"
+ },
+ "PG": {
+ "name": "பாபà¯à®ªà¯à®µà®¾ நியூ கினி"
+ },
+ "BB": {
+ "name": "பாரà¯à®ªà®Ÿà¯‹à®¸à¯"
+ },
+ "PS": {
+ "name": "பாலஸà¯à®¤à¯€à®©à®¿à®¯ பிரதேசஙà¯à®•à®³à¯"
+ },
+ "PW": {
+ "name": "பாலோ"
+ },
+ "PN": {
+ "name": "பிடà¯à®•à¯†à®¯à¯à®°à¯à®©à¯ தீவà¯à®•à®³à¯"
+ },
+ "PR": {
+ "name": "பியூரà¯à®Ÿà¯‹ ரிகோ"
+ },
+ "FR": {
+ "name": "பிரானà¯à®¸à¯"
+ },
+ "IO": {
+ "name": "பிரிடà¯à®Ÿà®¿à®·à¯ இநà¯à®¤à®¿à®¯à®ªà¯ பெரà¯à®™à¯à®•à®Ÿà®²à¯ பிரதேசமà¯"
+ },
+ "VG": {
+ "name": "பிரிடà¯à®Ÿà¯€à®·à¯ கனà¯à®©à®¿à®¤à¯ தீவà¯à®•à®³à¯"
+ },
+ "GF": {
+ "name": "பிரெஞà¯à®šà¯ கயானா"
+ },
+ "TF": {
+ "name": "பிரெஞà¯à®šà¯ தெறà¯à®•à¯ பிரதேசஙà¯à®•à®³à¯"
+ },
+ "PF": {
+ "name": "பிரெஞà¯à®šà¯ பாலினேஷியா"
+ },
+ "BR": {
+ "name": "பிரேசிலà¯"
+ },
+ "PH": {
+ "name": "பிலிபà¯à®ªà¯ˆà®©à¯à®¸à¯"
+ },
+ "FI": {
+ "name": "பினà¯à®²à®¾à®¨à¯à®¤à¯"
+ },
+ "BF": {
+ "name": "பà¯à®°à¯à®•à®¿à®©à®¾ ஃபாஸோ"
+ },
+ "BI": {
+ "name": "பà¯à®°à¯à®£à¯à®Ÿà®¿"
+ },
+ "BN": {
+ "name": "பà¯à®°à¯‚னேயà¯"
+ },
+ "BT": {
+ "name": "பூடானà¯"
+ },
+ "BM": {
+ "name": "பெரà¯à®®à¯à®Ÿà®¾"
+ },
+ "PE": {
+ "name": "பெரà¯"
+ },
+ "BE": {
+ "name": "பெலà¯à®œà®¿à®¯à®®à¯"
+ },
+ "BY": {
+ "name": "பெலாரூஸà¯"
+ },
+ "BZ": {
+ "name": "பெலிஸà¯"
+ },
+ "BJ": {
+ "name": "பெனினà¯"
+ },
+ "BO": {
+ "name": "பொலிவியா"
+ },
+ "BW": {
+ "name": "போடà¯à®¸à¯à®µà®¾à®©à®¾"
+ },
+ "PT": {
+ "name": "போரà¯à®šà¯à®šà¯à®•à¯à®•à®²à¯"
+ },
+ "PL": {
+ "name": "போலநà¯à®¤à¯"
+ },
+ "BA": {
+ "name": "போஸà¯à®©à®¿à®¯à®¾ மறà¯à®±à¯à®®à¯ ஹெரà¯à®¸à®¿à®•à¯‹à®µà®¿à®©à®¾"
+ },
+ "MO": {
+ "name": "மகாவோ எஸà¯à®à®†à®°à¯ சீனா"
+ },
+ "MN": {
+ "name": "மஙà¯à®•à¯‹à®²à®¿à®¯à®¾"
+ },
+ "MG": {
+ "name": "மடகாஸà¯à®•à®°à¯"
+ },
+ "CF": {
+ "name": "மதà¯à®¤à®¿à®¯ ஆபà¯à®°à®¿à®•à¯à®•à®•à¯ கà¯à®Ÿà®¿à®¯à®°à®šà¯"
+ },
+ "YT": {
+ "name": "மயோதà¯"
+ },
+ "MY": {
+ "name": "மலேஷியா"
+ },
+ "MK": {
+ "name": "மாசிடோனியா"
+ },
+ "MQ": {
+ "name": "மாரà¯à®Ÿà®¿à®©à®¿à®•à¯"
+ },
+ "MH": {
+ "name": "மாரà¯à®·à®²à¯ தீவà¯à®•à®³à¯"
+ },
+ "MT": {
+ "name": "மாலà¯à®Ÿà®¾"
+ },
+ "MD": {
+ "name": "மாலà¯à®Ÿà¯‹à®µà®¾"
+ },
+ "MV": {
+ "name": "மாலதà¯à®¤à¯€à®µà¯"
+ },
+ "MW": {
+ "name": "மாலவி"
+ },
+ "ML": {
+ "name": "மாலி"
+ },
+ "ME": {
+ "name": "மானà¯à®Ÿà¯‡à®©à¯†à®•à¯à®°à¯‹"
+ },
+ "MM": {
+ "name": "மியானà¯à®®à®¾à®°à¯ (பரà¯à®®à®¾)"
+ },
+ "MX": {
+ "name": "மெகà¯à®šà®¿à®•à¯‹"
+ },
+ "EH": {
+ "name": "மேறà¯à®•à¯ சஹாரா"
+ },
+ "FM": {
+ "name": "மைகà¯à®°à¯‹à®©à¯‡à®·à®¿à®¯à®¾"
+ },
+ "MZ": {
+ "name": "மொசாமà¯à®ªà®¿à®•à¯"
+ },
+ "MA": {
+ "name": "மொராகà¯à®•à¯‹"
+ },
+ "MU": {
+ "name": "மொரிசியஸà¯"
+ },
+ "MC": {
+ "name": "மொனாகà¯à®•à¯‹"
+ },
+ "MR": {
+ "name": "மௌரிடானியா"
+ },
+ "MS": {
+ "name": "மௌனà¯à®Ÿà¯à®šà¯†à®°à®¾à®Ÿà¯"
+ },
+ "VI": {
+ "name": "யூ.எஸà¯. கனà¯à®©à®¿à®¤à¯ தீவà¯à®•à®³à¯"
+ },
+ "UM": {
+ "name": "யூஎஸ௠அவà¯à®Ÿà¯à®²à¯‡à®¯à®¿à®™à¯ தீவà¯à®•à®³à¯"
+ },
+ "RU": {
+ "name": "à®°à®·à¯à®¯à®¾"
+ },
+ "RE": {
+ "name": "ரீயூனியனà¯"
+ },
+ "RO": {
+ "name": "à®°à¯à®®à¯‡à®©à®¿à®¯à®¾"
+ },
+ "RW": {
+ "name": "à®°à¯à®µà®¾à®©à¯à®Ÿà®¾"
+ },
+ "LU": {
+ "name": "லகà¯à®¸à¯à®šà®®à¯à®ªà®°à¯à®•à¯"
+ },
+ "LV": {
+ "name": "லாடà¯à®µà®¿à®¯à®¾"
+ },
+ "LA": {
+ "name": "லாவோஸà¯"
+ },
+ "LI": {
+ "name": "லிசà¯à®šà¯†à®£à¯à®¸à¯à®Ÿà¯†à®¯à¯à®©à¯"
+ },
+ "LT": {
+ "name": "லிதà¯à®µà¯‡à®©à®¿à®¯à®¾"
+ },
+ "LY": {
+ "name": "லிபியா"
+ },
+ "LS": {
+ "name": "லெசோதோ"
+ },
+ "LB": {
+ "name": "லெபனானà¯"
+ },
+ "LR": {
+ "name": "லைபீரியா"
+ },
+ "KP": {
+ "name": "வட கொரியா"
+ },
+ "MP": {
+ "name": "வடகà¯à®•à¯ மரியானா தீவà¯à®•à®³à¯"
+ },
+ "VU": {
+ "name": "வனà¯à®µà®¾à®Ÿà¯à®Ÿà¯"
+ },
+ "VA": {
+ "name": "வாடிகன௠நகரமà¯"
+ },
+ "WF": {
+ "name": "வாலிஸ௠மறà¯à®±à¯à®®à¯ ஃபà¯à®Ÿà¯à®©à®¾"
+ },
+ "VN": {
+ "name": "வியடà¯à®¨à®¾à®®à¯"
+ },
+ "VE": {
+ "name": "வெனிசà¯à®²à®¾"
+ },
+ "JP": {
+ "name": "ஜபà¯à®ªà®¾à®©à¯"
+ },
+ "JM": {
+ "name": "ஜமைகா"
+ },
+ "ZM": {
+ "name": "ஜாமà¯à®ªà®¿à®¯à®¾"
+ },
+ "GE": {
+ "name": "ஜாரà¯à®œà®¿à®¯à®¾"
+ },
+ "GI": {
+ "name": "ஜிபà¯à®°à®¾à®²à¯à®Ÿà®°à¯"
+ },
+ "DJ": {
+ "name": "ஜிபௌடà¯à®Ÿà®¿"
+ },
+ "ZW": {
+ "name": "ஜிமà¯à®ªà®¾à®ªà¯à®µà¯‡"
+ },
+ "JE": {
+ "name": "ஜெரà¯à®šà®¿"
+ },
+ "DE": {
+ "name": "ஜெரà¯à®®à®©à®¿"
+ },
+ "JO": {
+ "name": "ஜோரà¯à®Ÿà®¾à®©à¯"
+ },
+ "ES": {
+ "name": "ஸà¯à®ªà¯†à®¯à®¿à®©à¯"
+ },
+ "SK": {
+ "name": "ஸà¯à®²à¯‹à®µà®¾à®•à®¿à®¯à®¾"
+ },
+ "SI": {
+ "name": "ஸà¯à®²à¯‹à®µà¯‡à®©à®¿à®¯à®¾"
+ },
+ "SJ": {
+ "name": "ஸà¯à®µà®²à¯à®ªà®¾à®°à¯à®Ÿà¯ மறà¯à®±à¯à®®à¯ ஜான௠மேயனà¯"
+ },
+ "SZ": {
+ "name": "ஸà¯à®µà®¾à®¸à®¿à®²à®¾à®¨à¯à®¤à¯"
+ },
+ "CH": {
+ "name": "ஸà¯à®µà®¿à®Ÿà¯à®šà®°à¯à®²à®¾à®¨à¯à®¤à¯"
+ },
+ "SE": {
+ "name": "ஸà¯à®µà¯€à®Ÿà®©à¯"
+ },
+ "SC": {
+ "name": "ஸேசேலà¯à®¸à¯"
+ },
+ "HU": {
+ "name": "ஹஙà¯à®•à¯‡à®°à®¿"
+ },
+ "HK": {
+ "name": "ஹாஙà¯à®•à®¾à®™à¯ எஸà¯à®à®†à®°à¯ சீனா"
+ },
+ "HT": {
+ "name": "ஹெயà¯à®¤à®¿"
+ },
+ "HN": {
+ "name": "ஹோணà¯à®Ÿà¯‚ராஸà¯"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/te.json b/library/intl/resources/country/te.json
new file mode 100644
index 000000000..199750306
--- /dev/null
+++ b/library/intl/resources/country/te.json
@@ -0,0 +1,761 @@
+{
+ "AO": {
+ "name": "అంగోలా"
+ },
+ "AQ": {
+ "name": "అంటారà±à°•à°Ÿà°¿à°•à°¾"
+ },
+ "AD": {
+ "name": "అండొరà±à°°à°¾"
+ },
+ "AZ": {
+ "name": "అజరà±à°¬à±ˆà°œà°¾à°¨à±"
+ },
+ "AS": {
+ "name": "అమెరికనౠసమోవా"
+ },
+ "US": {
+ "name": "అమెరికా సంయà±à°•à±à°¤ రాషà±à°Ÿà±à°°à°¾à°²à±"
+ },
+ "AW": {
+ "name": "à°…à°°à±à°¬à°¾"
+ },
+ "AR": {
+ "name": "à°…à°°à±à°œà±†à°‚టీనా"
+ },
+ "DZ": {
+ "name": "à°…à°²à±à°œà±€à°°à°¿à°¯à°¾"
+ },
+ "AL": {
+ "name": "à°…à°²à±à°¬à±‡à°¨à°¿à°¯à°¾"
+ },
+ "AI": {
+ "name": "ఆంగవిలà±à°²à°¾"
+ },
+ "AG": {
+ "name": "ఆంటిగà±à°µà°¾ మరియౠబారà±à°¬à±à°¡à°¾"
+ },
+ "AF": {
+ "name": "ఆఫà±à°˜à°¨à°¿à°¸à±à°¤à°¾à°¨à±"
+ },
+ "AM": {
+ "name": "ఆరà±à°®à±‡à°¨à°¿à°¯à°¾"
+ },
+ "AX": {
+ "name": "ఆలేండౠదీవà±à°²à±"
+ },
+ "AT": {
+ "name": "ఆసà±à°Ÿà±à°°à°¿à°¯à°¾"
+ },
+ "AU": {
+ "name": "ఆసà±à°Ÿà±à°°à±‡à°²à°¿à°¯à°¾"
+ },
+ "ID": {
+ "name": "ఇండోనేషియా"
+ },
+ "IL": {
+ "name": "ఇజà±à°°à°¾à°¯à°¿à°²à±"
+ },
+ "IT": {
+ "name": "ఇటలీ"
+ },
+ "ET": {
+ "name": "ఇథియోపియా"
+ },
+ "IQ": {
+ "name": "ఇరాకà±"
+ },
+ "IR": {
+ "name": "ఇరానà±"
+ },
+ "GQ": {
+ "name": "ఈకà±à°µà°Ÿà±‹à°°à°¿à°¯à°²à± గినియా"
+ },
+ "EC": {
+ "name": "ఈకà±à°µà°¡à°¾à°°à±"
+ },
+ "EG": {
+ "name": "ఈజిపà±à°Ÿà±"
+ },
+ "UA": {
+ "name": "ఉకà±à°°à±†à°¯à°¿à°¨à±"
+ },
+ "UG": {
+ "name": "ఉగాండా"
+ },
+ "UZ": {
+ "name": "ఉజà±à°¬à±†à°•à°¿à°¸à±à°¤à°¾à°¨à±"
+ },
+ "KP": {
+ "name": "ఉతà±à°¤à°° కొరియా"
+ },
+ "MP": {
+ "name": "ఉతà±à°¤à°° మరియానా దీవà±à°²à±"
+ },
+ "UY": {
+ "name": "ఉరà±à°—à±à°µà±‡"
+ },
+ "ER": {
+ "name": "à°Žà°°à°¿à°Ÿà±à°°à°¿à°¯à°¾"
+ },
+ "SV": {
+ "name": "ఎలౠసాలà±à°µà°¡à±‹à°°à±"
+ },
+ "AC": {
+ "name": "ఎసెషనౠదీవి"
+ },
+ "EE": {
+ "name": "à°Žà°¸à±à°Ÿà±‹à°¨à°¿à°¯à°¾"
+ },
+ "IE": {
+ "name": "à°à°°à±à°²à°¾à°‚à°¡à±"
+ },
+ "IM": {
+ "name": "à°à°²à± ఆఫౠమానà±"
+ },
+ "CI": {
+ "name": "à°à°µà°°à±€ కోసà±à°Ÿà±"
+ },
+ "IS": {
+ "name": "à°à°¸à±à°²à°¾à°‚à°¡à±"
+ },
+ "OM": {
+ "name": "ఒమనà±"
+ },
+ "KH": {
+ "name": "కంబోడియా"
+ },
+ "KZ": {
+ "name": "కజకసà±à°¤à°¾à°¨à±"
+ },
+ "QA": {
+ "name": "కతరà±"
+ },
+ "BQ": {
+ "name": "కరీబియనౠనెదరà±à°²à°¾à°‚à°¡à±à°¸à±"
+ },
+ "CD": {
+ "name": "కాంగో- à°•à°¿à°¨à±à°·à°¾à°¸à°¾"
+ },
+ "CG": {
+ "name": "కాంగో- à°¬à±à°°à°¾à°œà°¾à°µà°¿à°²à±à°²à°¿"
+ },
+ "CM": {
+ "name": "కామెరూనà±"
+ },
+ "KI": {
+ "name": "కిరిబాటి"
+ },
+ "KG": {
+ "name": "à°•à°¿à°°à±à°—ిజిసà±à°¤à°¾à°¨à±"
+ },
+ "CK": {
+ "name": "à°•à±à°•à± దీవà±à°²à±"
+ },
+ "CW": {
+ "name": "à°•à±à°°à°¾à°•à°µà±‹"
+ },
+ "KW": {
+ "name": "à°•à±à°µà±ˆà°Ÿà±"
+ },
+ "CA": {
+ "name": "కెనడా"
+ },
+ "KE": {
+ "name": "కెనà±à°¯à°¾"
+ },
+ "IC": {
+ "name": "కేనరీ దీవà±à°²à±"
+ },
+ "CV": {
+ "name": "కేపౠవెరà±à°¡à±‡"
+ },
+ "KY": {
+ "name": "కేమానౠదీవà±à°²à±"
+ },
+ "KM": {
+ "name": "కొమొరోసà±"
+ },
+ "CO": {
+ "name": "కొలంబియా"
+ },
+ "XK": {
+ "name": "కొసోవో"
+ },
+ "CC": {
+ "name": "కోకోసౠ(కీలింగà±) దీవà±à°²à±"
+ },
+ "CR": {
+ "name": "కోసà±à°Ÿà°¾ à°°à°¿à°•à°¾"
+ },
+ "CU": {
+ "name": "à°•à±à°¯à±‚బా"
+ },
+ "CX": {
+ "name": "à°•à±à°°à°¿à°¸à±à°®à°¸à± దీవి"
+ },
+ "NC": {
+ "name": "à°•à±à°°à±Šà°¤à±à°¤ కాలెడోనియా"
+ },
+ "HR": {
+ "name": "à°•à±à°°à±‹à°¯à±‡à°·à°¿à°¯à°¾"
+ },
+ "GY": {
+ "name": "గయానా"
+ },
+ "GM": {
+ "name": "గాంబియా"
+ },
+ "GA": {
+ "name": "గాబనà±"
+ },
+ "GN": {
+ "name": "గినియా"
+ },
+ "GW": {
+ "name": "గినియా-బిసà±à°¸à°¾à°µà±"
+ },
+ "GL": {
+ "name": "à°—à±à°°à±€à°¨à±â€Œà°²à°¾à°‚à°¡à±"
+ },
+ "GR": {
+ "name": "à°—à±à°°à±€à°¸à±"
+ },
+ "GD": {
+ "name": "à°—à±à°°à±†à°¨à±†à°¡à°¾"
+ },
+ "GT": {
+ "name": "à°—à±à°µà°¾à°Ÿà°¿à°®à°¾à°²"
+ },
+ "GP": {
+ "name": "à°—à±à°µà°¾à°¡à±‡à°²à±‹à°ªà±"
+ },
+ "GU": {
+ "name": "à°—à±à°µà°¾à°®à±"
+ },
+ "GG": {
+ "name": "à°—à±à°µà±‡à°°à±à°¨à°¸à±‡"
+ },
+ "GH": {
+ "name": "ఘనా"
+ },
+ "TD": {
+ "name": "చాదà±"
+ },
+ "CL": {
+ "name": "చిలీ"
+ },
+ "CZ": {
+ "name": "చెకౠరిపబà±à°²à°¿à°•à±"
+ },
+ "CN": {
+ "name": "చైనా"
+ },
+ "JP": {
+ "name": "జపానà±"
+ },
+ "JM": {
+ "name": "జమైకా"
+ },
+ "DE": {
+ "name": "జరà±à°®à°¨à±€"
+ },
+ "ZM": {
+ "name": "జాంబియా"
+ },
+ "GE": {
+ "name": "జారà±à°œà°¿à°¯à°¾"
+ },
+ "ZW": {
+ "name": "జింబాబà±à°µà±‡"
+ },
+ "DJ": {
+ "name": "జిబౌటి"
+ },
+ "GI": {
+ "name": "జిబà±à°°à°¾à°²à±à°Ÿà°¾à°°à±"
+ },
+ "JE": {
+ "name": "జెరà±à°¸à±€"
+ },
+ "JO": {
+ "name": "జోరà±à°¡à°¾à°¨à±"
+ },
+ "TR": {
+ "name": "à°Ÿà°°à±à°•à±€"
+ },
+ "TZ": {
+ "name": "టాంజానియా"
+ },
+ "TL": {
+ "name": "టిమోరà±-లెసà±à°Ÿà±†"
+ },
+ "TV": {
+ "name": "à°Ÿà±à°µà°¾à°²à±"
+ },
+ "TO": {
+ "name": "టోంగా"
+ },
+ "TK": {
+ "name": "టోకేలావà±"
+ },
+ "TG": {
+ "name": "టోగో"
+ },
+ "TN": {
+ "name": "à°Ÿà±à°¯à±à°¨à±€à°·à°¿à°¯à°¾"
+ },
+ "TT": {
+ "name": "à°Ÿà±à°°à°¿à°¨à°¿à°¡à°¾à°¡à± మరియౠటొబాగో"
+ },
+ "TA": {
+ "name": "à°Ÿà±à°°à°¿à°¸à±à°Ÿà°¨à± à°¡ à°•à°¨à±à°¹à°¾"
+ },
+ "DG": {
+ "name": "డియాగో గారà±à°¸à°¿à°¯à°¾"
+ },
+ "DK": {
+ "name": "డెనà±à°®à°¾à°°à±à°•à±"
+ },
+ "DO": {
+ "name": "డొమెనికనౠరిపబà±à°²à°¿à°•à±"
+ },
+ "DM": {
+ "name": "డోమెనిక"
+ },
+ "TJ": {
+ "name": "తజికిసà±à°¤à°¾à°¨à±"
+ },
+ "TM": {
+ "name": "à°¤à±à°°à±à°•à°®à±‡à°¨à°¿à°¸à±à°¤à°¾à°¨à±"
+ },
+ "TC": {
+ "name": "à°¤à±à°°à±à°•à± మరియౠకాలికోసౠదీవà±à°²à±"
+ },
+ "TW": {
+ "name": "తైవానà±"
+ },
+ "TH": {
+ "name": "థాయిలాండà±"
+ },
+ "ZA": {
+ "name": "దకà±à°·à°¿à°£ ఆఫà±à°°à°¿à°•à°¾"
+ },
+ "KR": {
+ "name": "దకà±à°·à°¿à°£ కొరియా"
+ },
+ "GS": {
+ "name": "దకà±à°·à°¿à°£ జారà±à°œà°¿à°¯à°¾ & దకà±à°·à°¿à°£ శాండà±à°µà°¿à°šà± దీవà±à°²à±"
+ },
+ "SS": {
+ "name": "దకà±à°·à°¿à°£ సూడానà±"
+ },
+ "NA": {
+ "name": "నమీబియా"
+ },
+ "NF": {
+ "name": "నారà±à°«à°¾à°•à± దీవి"
+ },
+ "NO": {
+ "name": "నారà±à°µà±‡"
+ },
+ "NI": {
+ "name": "నికరాగà±à°µà°¾"
+ },
+ "NU": {
+ "name": "నియà±"
+ },
+ "NL": {
+ "name": "నెదరà±à°²à°¾à°‚à°¡à±à°¸à±"
+ },
+ "NP": {
+ "name": "నేపాలà±"
+ },
+ "NE": {
+ "name": "నైజరà±"
+ },
+ "NG": {
+ "name": "నైజీరియా"
+ },
+ "NR": {
+ "name": "నౌరà±"
+ },
+ "NZ": {
+ "name": "à°¨à±à°¯à±‚జిలాండà±"
+ },
+ "EH": {
+ "name": "పడమటి సహారా"
+ },
+ "PA": {
+ "name": "పనామా"
+ },
+ "PY": {
+ "name": "పరాగà±à°µà±‡"
+ },
+ "PW": {
+ "name": "పలావà±"
+ },
+ "PK": {
+ "name": "పాకిసà±à°¤à°¾à°¨à±"
+ },
+ "PG": {
+ "name": "పాపà±à°µà°¾ à°¨à±à°¯à± గినియా"
+ },
+ "PS": {
+ "name": "పాలసà±à°¤à±€à°¨à°¿à°¯à°¨à± à°ªà±à°°à°¾à°‚తాలà±"
+ },
+ "PN": {
+ "name": "పిటà±â€Œà°•à±†à°¯à°¿à°°à±à°¨à± దీవà±à°²à±"
+ },
+ "PE": {
+ "name": "పెరూ"
+ },
+ "PT": {
+ "name": "పోరà±à°šà±à°—à°²à±"
+ },
+ "PL": {
+ "name": "పోలాండà±"
+ },
+ "FK": {
+ "name": "ఫాకà±â€Œà°²à±à°¯à°¾à°‚డౠదీవà±à°²à±"
+ },
+ "FO": {
+ "name": "ఫారో దీవà±à°²à±"
+ },
+ "FJ": {
+ "name": "ఫిజీ"
+ },
+ "FI": {
+ "name": "à°«à°¿à°¨à±à°²à°¾à°‚à°¡à±"
+ },
+ "PH": {
+ "name": "ఫిలిపà±à°ªà±€à°¨à±à°¸à±"
+ },
+ "PR": {
+ "name": "à°«à±à°¯à±‚à°°à±à°Ÿà±‹ రికో"
+ },
+ "FR": {
+ "name": "à°«à±à°°à°¾à°¨à±à°¸à±â€Œ"
+ },
+ "GF": {
+ "name": "à°«à±à°°à±†à°‚చౠగియానా"
+ },
+ "TF": {
+ "name": "à°«à±à°°à±†à°‚చౠదకà±à°·à°¿à°£ à°ªà±à°°à°¾à°‚తాలà±"
+ },
+ "PF": {
+ "name": "à°«à±à°°à±†à°‚చౠపోలినిషియా"
+ },
+ "BD": {
+ "name": "బంగà±à°²à°¾à°¦à±‡à°¶à±"
+ },
+ "BG": {
+ "name": "బలà±à°—ేరియా"
+ },
+ "BS": {
+ "name": "బహామాసà±"
+ },
+ "BH": {
+ "name": "బహà±à°°à±†à°¯à°¿à°¨à±"
+ },
+ "BB": {
+ "name": "బారà±à°¬à°¡à±‹à°¸à±"
+ },
+ "BI": {
+ "name": "à°¬à±à°°à±à°‚à°¡à°¿"
+ },
+ "BF": {
+ "name": "à°¬à±à°°à±à°•à°¿à°¨à°¾ ఫాసో"
+ },
+ "BJ": {
+ "name": "బెనినà±"
+ },
+ "BM": {
+ "name": "బెరà±à°®à±à°¡à°¾"
+ },
+ "BY": {
+ "name": "బెలారసà±"
+ },
+ "BZ": {
+ "name": "బెలిజà±"
+ },
+ "BE": {
+ "name": "బెలà±à°œà°¿à°¯à°‚"
+ },
+ "BO": {
+ "name": "బొలీవియా"
+ },
+ "BW": {
+ "name": "బోటà±à°¸à±à°µà°¾à°¨à°¾"
+ },
+ "BA": {
+ "name": "బోసà±à°¨à°¿à°¯à°¾ మరియౠహెరà±à°œà±†à°—ొవీనా"
+ },
+ "VG": {
+ "name": "à°¬à±à°°à°¿à°Ÿà°¿à°·à± వరà±à°œà°¿à°¨à± దీవà±à°²à±"
+ },
+ "IO": {
+ "name": "à°¬à±à°°à°¿à°Ÿà±€à°·à± భారతీయ సమà±à°¦à±à°°à°ªà± à°ªà±à°°à°¾à°‚తం"
+ },
+ "BN": {
+ "name": "à°¬à±à°°à±‚నై"
+ },
+ "BR": {
+ "name": "à°¬à±à°°à±†à°œà°¿à°²à±"
+ },
+ "IN": {
+ "name": "భారత దేశం"
+ },
+ "BT": {
+ "name": "భూటానà±"
+ },
+ "MN": {
+ "name": "మంగోలియా"
+ },
+ "MG": {
+ "name": "మడగాసà±à°•à°°à±"
+ },
+ "MM": {
+ "name": "మయనà±à°®à°¾à°°à± (బరà±à°®à°¾)"
+ },
+ "MY": {
+ "name": "మలేషియా"
+ },
+ "MO": {
+ "name": "మాకావౠఎసà±à°à°†à°°à± చైనా"
+ },
+ "YT": {
+ "name": "మాయొటà±à°Ÿà°¿"
+ },
+ "MU": {
+ "name": "మారిషసà±"
+ },
+ "MQ": {
+ "name": "మారà±à°Ÿà°¿à°¨à°¿à°•à±"
+ },
+ "MH": {
+ "name": "మారà±à°·à°²à± దీవà±à°²à±"
+ },
+ "MW": {
+ "name": "మాలావి"
+ },
+ "ML": {
+ "name": "మాలి"
+ },
+ "MT": {
+ "name": "మాలà±à°Ÿà°¾"
+ },
+ "MV": {
+ "name": "మాలà±à°¦à±€à°µà±à°²à±"
+ },
+ "MX": {
+ "name": "మెకà±à°¸à°¿à°•à±‹"
+ },
+ "MK": {
+ "name": "మేసిడోనియా"
+ },
+ "FM": {
+ "name": "మైకà±à°°à±‹à°¨à±‡à°¶à°¿à°¯"
+ },
+ "MZ": {
+ "name": "మొజాంబికà±"
+ },
+ "MC": {
+ "name": "మొనాకో"
+ },
+ "MA": {
+ "name": "మొరాకà±à°•à±‹"
+ },
+ "ME": {
+ "name": "మోంటేనేగà±à°°à±‹"
+ },
+ "MS": {
+ "name": "మోంటà±à°¸à±‡à°°à±à°°à°¾à°Ÿà±"
+ },
+ "MD": {
+ "name": "మోలà±à°¡à±‹à°µà°¾"
+ },
+ "MR": {
+ "name": "మౌరిటేనియా"
+ },
+ "VI": {
+ "name": "à°¯à±.à°Žà°¸à±. వరà±à°œà°¿à°¨à± దీవà±à°²à±"
+ },
+ "AE": {
+ "name": "à°¯à±à°¨à±ˆà°Ÿà±†à°¡à± అరబౠఎమిరేటà±à°¸à±"
+ },
+ "GB": {
+ "name": "à°¯à±à°¨à±ˆà°Ÿà±†à°¡à± à°•à°¿à°‚à°—à±â€Œà°¡à°®à±"
+ },
+ "YE": {
+ "name": "యెమెనà±"
+ },
+ "RU": {
+ "name": "à°°à°·à±à°¯à°¾"
+ },
+ "RE": {
+ "name": "రియూనియనà±"
+ },
+ "RW": {
+ "name": "à°°à±à°µà°¾à°‚à°¡à°¾"
+ },
+ "RO": {
+ "name": "రోమానియా"
+ },
+ "LU": {
+ "name": "లకà±à°¸à°‚బరà±à°—à±"
+ },
+ "LV": {
+ "name": "లాతà±à°µà°¿à°¯à°¾"
+ },
+ "LA": {
+ "name": "లావోసà±"
+ },
+ "LI": {
+ "name": "లికà±à°Ÿà±†à°¸à±à°Ÿà±‡à°¨à±"
+ },
+ "LT": {
+ "name": "లిథà±à°µà±‡à°¨à°¿à°¯à°¾"
+ },
+ "LY": {
+ "name": "లిబియా"
+ },
+ "LB": {
+ "name": "లెబనానà±"
+ },
+ "LS": {
+ "name": "లెసోతో"
+ },
+ "LR": {
+ "name": "లైబీరియా"
+ },
+ "VU": {
+ "name": "వనాటà±"
+ },
+ "VA": {
+ "name": "వాటికనౠనగరం"
+ },
+ "WF": {
+ "name": "వాలిసౠమరియౠఫà±à°¯à±à°¤à±à°¯à±à°¨à°¾"
+ },
+ "VN": {
+ "name": "వియతà±à°¨à°¾à°‚"
+ },
+ "VE": {
+ "name": "వెనà±à°œà±à°µà±‡à°²à°¾"
+ },
+ "LK": {
+ "name": "à°¶à±à°°à±€à°²à°‚à°•"
+ },
+ "UM": {
+ "name": "సంయà±à°•à±à°¤ రాజà±à°¯ అమెరికా బయట ఉనà±à°¨ దీవà±à°²à±"
+ },
+ "WS": {
+ "name": "సమోవా"
+ },
+ "SM": {
+ "name": "సానౠమారినో"
+ },
+ "ST": {
+ "name": "సావోటోమౠమరియౠపà±à°°à°¿à°¨à±à°¸à°¿à°ªà±‡"
+ },
+ "SG": {
+ "name": "సింగపూరà±"
+ },
+ "SX": {
+ "name": "సింటౠమారà±à°Ÿà±†à°¨à±"
+ },
+ "SL": {
+ "name": "సియెరà±à°°à°¾ లియానà±"
+ },
+ "SY": {
+ "name": "సిరియా"
+ },
+ "SC": {
+ "name": "సీషెలà±à°¸à±"
+ },
+ "SR": {
+ "name": "à°¸à±à°°à°¿à°¨à°¾à°®à±"
+ },
+ "SD": {
+ "name": "సూడానà±"
+ },
+ "KN": {
+ "name": "సెంటౠకిటà±à°Ÿà±à°¸à± మరియౠనెవిసà±"
+ },
+ "PM": {
+ "name": "సెంటౠపియెరౠమరియౠమికెలానà±"
+ },
+ "BL": {
+ "name": "సెంటౠబరà±à°¤à±‡à°²à±†à°®à±€"
+ },
+ "MF": {
+ "name": "సెంటౠమారà±à°Ÿà°¿à°¨à±"
+ },
+ "LC": {
+ "name": "సెంటౠలూసియా"
+ },
+ "VC": {
+ "name": "సెంటౠవినà±à°¸à±†à°‚టౠమరియౠగà±à°°à±†à°¨à°¡à±€à°¨à±à°¸à±"
+ },
+ "SH": {
+ "name": "సెంటౠహెలినా"
+ },
+ "CF": {
+ "name": "సెంటà±à°°à°²à± ఆఫà±à°°à°¿à°•à°¨à± రిపబà±à°²à°¿à°•à±"
+ },
+ "SN": {
+ "name": "సెనెగలà±"
+ },
+ "RS": {
+ "name": "సెరà±à°¬à°¿à°¯à°¾"
+ },
+ "CY": {
+ "name": "సైపà±à°°à°¸à±"
+ },
+ "SO": {
+ "name": "సోమాలియా"
+ },
+ "SB": {
+ "name": "సోలమనౠదీవà±à°²à±"
+ },
+ "SA": {
+ "name": "సౌదీ అరేబియా"
+ },
+ "ES": {
+ "name": "à°¸à±à°ªà±†à°¯à°¿à°¨à±"
+ },
+ "EA": {
+ "name": "à°¸à±à°¯à±‚à°Ÿà°¾ మరియౠమెలిలà±à°²à°¾"
+ },
+ "SK": {
+ "name": "à°¸à±à°²à±‹à°µà±‡à°•à°¿à°¯à°¾"
+ },
+ "SI": {
+ "name": "à°¸à±à°²à±‹à°µà±‡à°¨à°¿à°¯à°¾"
+ },
+ "SZ": {
+ "name": "à°¸à±à°µà°¾à°œà°¿à°²à±à°¯à°¾à°‚à°¡à±"
+ },
+ "SJ": {
+ "name": "à°¸à±à°µà°¾à°²à±à°¬à°¾à°°à±à°¡à± మరియౠయానౠమాయేనà±"
+ },
+ "CH": {
+ "name": "à°¸à±à°µà°¿à°Ÿà±à°œà°°à±à°²à°¾à°‚à°¡à±"
+ },
+ "SE": {
+ "name": "à°¸à±à°µà±€à°¡à°¨à±"
+ },
+ "HU": {
+ "name": "హంగేరీ"
+ },
+ "HK": {
+ "name": "హాంకాంగౠఎసà±à°à°†à°°à± చైనా"
+ },
+ "HT": {
+ "name": "హైటి"
+ },
+ "HN": {
+ "name": "హోండà±à°°à°¾à°¸à±"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/teo.json b/library/intl/resources/country/teo.json
new file mode 100644
index 000000000..a5fb3b516
--- /dev/null
+++ b/library/intl/resources/country/teo.json
@@ -0,0 +1,761 @@
+{
+ "ZA": {
+ "name": "Afrika Kusini"
+ },
+ "AF": {
+ "name": "Afuganistani"
+ },
+ "IS": {
+ "name": "Aislandi"
+ },
+ "AR": {
+ "name": "Ajentina"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljeria"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua na Barbuda"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "IE": {
+ "name": "Ayalandi"
+ },
+ "AZ": {
+ "name": "Azabajani"
+ },
+ "BB": {
+ "name": "Babadosi"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BH": {
+ "name": "Bahareni"
+ },
+ "BD": {
+ "name": "Bangladeshi"
+ },
+ "BY": {
+ "name": "Belarusi"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia na Hezegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazili"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BF": {
+ "name": "Bukinafaso"
+ },
+ "MG": {
+ "name": "Bukini"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denmaki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekwado"
+ },
+ "SV": {
+ "name": "Elsavado"
+ },
+ "IO": {
+ "name": "Eneo la Uingereza katika Bahari Hindi"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "AE": {
+ "name": "Falme za Kiarabu"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipino"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Ginebisau"
+ },
+ "GQ": {
+ "name": "Ginekweta"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grinlandi"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GP": {
+ "name": "Gwadelupe"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GF": {
+ "name": "Gwiyana ya Ufaransa"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ES": {
+ "name": "Hispania"
+ },
+ "HN": {
+ "name": "Hondurasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungaria"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israeli"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "CF": {
+ "name": "Jamhuri ya Afrika ya Kati"
+ },
+ "CZ": {
+ "name": "Jamhuri ya Cheki"
+ },
+ "DO": {
+ "name": "Jamhuri ya Dominika"
+ },
+ "CD": {
+ "name": "Jamhuri ya Kidemokrasia ya Kongo"
+ },
+ "JP": {
+ "name": "Japani"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibralta"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "GE": {
+ "name": "Jojia"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kameruni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katari"
+ },
+ "KZ": {
+ "name": "Kazakistani"
+ },
+ "KE": {
+ "name": "Kenia"
+ },
+ "CV": {
+ "name": "Kepuvede"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizistani"
+ },
+ "NF": {
+ "name": "Kisiwa cha Norfok"
+ },
+ "CI": {
+ "name": "Kodivaa"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komoro"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "HR": {
+ "name": "Korasia"
+ },
+ "KP": {
+ "name": "Korea Kaskazini"
+ },
+ "KR": {
+ "name": "Korea Kusini"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CY": {
+ "name": "Kuprosi"
+ },
+ "KW": {
+ "name": "Kuwaiti"
+ },
+ "LA": {
+ "name": "Laosi"
+ },
+ "LU": {
+ "name": "Lasembagi"
+ },
+ "LV": {
+ "name": "Lativia"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Lishenteni"
+ },
+ "LT": {
+ "name": "Litwania"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malesia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "US": {
+ "name": "Marekani"
+ },
+ "MQ": {
+ "name": "Martiniki"
+ },
+ "MK": {
+ "name": "Masedonia"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "FM": {
+ "name": "Mikronesia"
+ },
+ "EG": {
+ "name": "Misri"
+ },
+ "MV": {
+ "name": "Modivu"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrati"
+ },
+ "MU": {
+ "name": "Morisi"
+ },
+ "MR": {
+ "name": "Moritania"
+ },
+ "MA": {
+ "name": "Moroko"
+ },
+ "MZ": {
+ "name": "Msumbiji"
+ },
+ "MM": {
+ "name": "Myama"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "NE": {
+ "name": "Nijeri"
+ },
+ "NG": {
+ "name": "Nijeria"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norwe"
+ },
+ "NC": {
+ "name": "Nyukaledonia"
+ },
+ "NZ": {
+ "name": "Nyuzilandi"
+ },
+ "OM": {
+ "name": "Omani"
+ },
+ "PK": {
+ "name": "Pakistani"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua"
+ },
+ "PY": {
+ "name": "Paragwai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkairni"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PF": {
+ "name": "Polinesia ya Ufaransa"
+ },
+ "PR": {
+ "name": "Pwetoriko"
+ },
+ "RE": {
+ "name": "Riyunioni"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SM": {
+ "name": "Samarino"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa ya Marekani"
+ },
+ "SH": {
+ "name": "Santahelena"
+ },
+ "KN": {
+ "name": "Santakitzi na Nevis"
+ },
+ "LC": {
+ "name": "Santalusia"
+ },
+ "PM": {
+ "name": "Santapieri na Mikeloni"
+ },
+ "VC": {
+ "name": "Santavisenti na Grenadini"
+ },
+ "ST": {
+ "name": "Sao Tome na Principe"
+ },
+ "SA": {
+ "name": "Saudi"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Shelisheli"
+ },
+ "SL": {
+ "name": "Siera Leoni"
+ },
+ "SG": {
+ "name": "Singapoo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "LK": {
+ "name": "Sirilanka"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SR": {
+ "name": "Surinamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandi"
+ },
+ "TW": {
+ "name": "Taiwani"
+ },
+ "TJ": {
+ "name": "Tajikistani"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TL": {
+ "name": "Timori ya Mashariki"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad na Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turukimenistani"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "IR": {
+ "name": "Uajemi"
+ },
+ "BE": {
+ "name": "Ubelgiji"
+ },
+ "FR": {
+ "name": "Ufaransa"
+ },
+ "FI": {
+ "name": "Ufini"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "GR": {
+ "name": "Ugiriki"
+ },
+ "ET": {
+ "name": "Uhabeshi"
+ },
+ "NL": {
+ "name": "Uholanzi"
+ },
+ "GB": {
+ "name": "Uingereza"
+ },
+ "DE": {
+ "name": "Ujerumani"
+ },
+ "PS": {
+ "name": "Ukingo wa Magharibi na Ukanda wa Gaza wa Palestina"
+ },
+ "UA": {
+ "name": "Ukraini"
+ },
+ "PT": {
+ "name": "Ureno"
+ },
+ "UY": {
+ "name": "Urugwai"
+ },
+ "RU": {
+ "name": "Urusi"
+ },
+ "SZ": {
+ "name": "Uswazi"
+ },
+ "SE": {
+ "name": "Uswidi"
+ },
+ "CH": {
+ "name": "Uswisi"
+ },
+ "TR": {
+ "name": "Uturuki"
+ },
+ "UZ": {
+ "name": "Uzibekistani"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietinamu"
+ },
+ "CK": {
+ "name": "Visiwa vya Cook"
+ },
+ "FK": {
+ "name": "Visiwa vya Falkland"
+ },
+ "KY": {
+ "name": "Visiwa vya Kayman"
+ },
+ "MP": {
+ "name": "Visiwa vya Mariana vya Kaskazini"
+ },
+ "MH": {
+ "name": "Visiwa vya Marshal"
+ },
+ "SB": {
+ "name": "Visiwa vya Solomon"
+ },
+ "TC": {
+ "name": "Visiwa vya Turki na Kaiko"
+ },
+ "VI": {
+ "name": "Visiwa vya Virgin vya Marekani"
+ },
+ "VG": {
+ "name": "Visiwa vya Virgin vya Uingereza"
+ },
+ "WF": {
+ "name": "Walis na Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "JO": {
+ "name": "Yordani"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/th.json b/library/intl/resources/country/th.json
new file mode 100644
index 000000000..f849e92a2
--- /dev/null
+++ b/library/intl/resources/country/th.json
@@ -0,0 +1,761 @@
+{
+ "GR": {
+ "name": "à¸à¸£à¸µà¸‹"
+ },
+ "GL": {
+ "name": "à¸à¸£à¸µà¸™à¹à¸¥à¸™à¸”์"
+ },
+ "GU": {
+ "name": "à¸à¸§à¸¡"
+ },
+ "GP": {
+ "name": "à¸à¸§à¸²à¹€à¸”อลูป"
+ },
+ "KH": {
+ "name": "à¸à¸±à¸¡à¸žà¸¹à¸Šà¸²"
+ },
+ "GT": {
+ "name": "à¸à¸±à¸§à¹€à¸•à¸¡à¸²à¸¥à¸²"
+ },
+ "QA": {
+ "name": "à¸à¸²à¸•à¸²à¸£à¹Œ"
+ },
+ "GH": {
+ "name": "à¸à¸²à¸™à¸²"
+ },
+ "GA": {
+ "name": "à¸à¸²à¸šà¸­à¸‡"
+ },
+ "GY": {
+ "name": "à¸à¸²à¸¢à¸­à¸²à¸™à¸²"
+ },
+ "GN": {
+ "name": "à¸à¸´à¸™à¸µ"
+ },
+ "GW": {
+ "name": "à¸à¸´à¸™à¸µ-บิสเซา"
+ },
+ "GD": {
+ "name": "เà¸à¸£à¹€à¸™à¸”า"
+ },
+ "KR": {
+ "name": "เà¸à¸²à¸«à¸¥à¸µà¹ƒà¸•à¹‰"
+ },
+ "KP": {
+ "name": "เà¸à¸²à¸«à¸¥à¸µà¹€à¸«à¸™à¸·à¸­"
+ },
+ "CX": {
+ "name": "เà¸à¸²à¸°à¸„ริสต์มาส"
+ },
+ "GS": {
+ "name": "เà¸à¸²à¸°à¹€à¸‹à¸²à¸—์จอร์เจียà¹à¸¥à¸°à¸«à¸¡à¸¹à¹ˆà¹€à¸à¸²à¸°à¹€à¸‹à¸²à¸—์à¹à¸‹à¸™à¸”์วิช"
+ },
+ "NF": {
+ "name": "เà¸à¸²à¸°à¸™à¸­à¸£à¹Œà¸Ÿà¸­à¸¥à¹Œà¸"
+ },
+ "IM": {
+ "name": "เà¸à¸²à¸°à¹à¸¡à¸™"
+ },
+ "AC": {
+ "name": "เà¸à¸²à¸°à¹à¸­à¸ªà¹€à¸‹à¸™à¸Šà¸±à¸™"
+ },
+ "GG": {
+ "name": "เà¸à¸´à¸£à¹Œà¸™à¸‹à¸µà¸¢à¹Œ"
+ },
+ "GM": {
+ "name": "à¹à¸à¸¡à¹€à¸šà¸µà¸¢"
+ },
+ "MO": {
+ "name": "เขตปà¸à¸„รองพิเศษมาเà¸à¹Šà¸²à¹à¸«à¹ˆà¸‡à¸ªà¸²à¸˜à¸²à¸£à¸“รัà¸à¸›à¸£à¸°à¸Šà¸²à¸Šà¸™à¸ˆà¸µà¸™"
+ },
+ "HK": {
+ "name": "เขตปà¸à¸„รองพิเศษฮ่องà¸à¸‡à¹à¸«à¹ˆà¸‡à¸ªà¸²à¸˜à¸²à¸£à¸“รัà¸à¸›à¸£à¸°à¸Šà¸²à¸Šà¸™à¸ˆà¸µà¸™"
+ },
+ "CD": {
+ "name": "คองโà¸-à¸à¸´à¸™à¸Šà¸²à¸‹à¸²"
+ },
+ "CG": {
+ "name": "คองโà¸-บราซซาวิล"
+ },
+ "KM": {
+ "name": "คอโมโรส"
+ },
+ "CR": {
+ "name": "คอสตาริà¸à¸²"
+ },
+ "KZ": {
+ "name": "คาซัคสถาน"
+ },
+ "KI": {
+ "name": "คิริบาส"
+ },
+ "CU": {
+ "name": "คิวบา"
+ },
+ "KG": {
+ "name": "คีร์à¸à¸µà¸‹à¸ªà¸–าน"
+ },
+ "CW": {
+ "name": "คูราเซา"
+ },
+ "KW": {
+ "name": "คูเวต"
+ },
+ "KE": {
+ "name": "เคนยา"
+ },
+ "CV": {
+ "name": "เคปเวิร์ด"
+ },
+ "CA": {
+ "name": "à¹à¸„นาดา"
+ },
+ "CM": {
+ "name": "à¹à¸„เมอรูน"
+ },
+ "XK": {
+ "name": "โคโซโว"
+ },
+ "HR": {
+ "name": "โครเอเชีย"
+ },
+ "CO": {
+ "name": "โคลอมเบีย"
+ },
+ "GE": {
+ "name": "จอร์เจีย"
+ },
+ "JO": {
+ "name": "จอร์à¹à¸”น"
+ },
+ "JM": {
+ "name": "จาเมà¸à¸²"
+ },
+ "DJ": {
+ "name": "จิบูตี"
+ },
+ "CN": {
+ "name": "จีน"
+ },
+ "JE": {
+ "name": "เจอร์ซีย์"
+ },
+ "TD": {
+ "name": "ชาด"
+ },
+ "CL": {
+ "name": "ชิลี"
+ },
+ "SM": {
+ "name": "ซานมารีโน"
+ },
+ "WS": {
+ "name": "ซามัว"
+ },
+ "SA": {
+ "name": "ซาอุดีอาระเบีย"
+ },
+ "EH": {
+ "name": "ซาฮาราตะวันตà¸"
+ },
+ "ZW": {
+ "name": "ซิมบับเว"
+ },
+ "SY": {
+ "name": "ซีเรีย"
+ },
+ "EA": {
+ "name": "ซีโอตาà¹à¸¥à¸°à¹€à¸¡à¸¥à¸´à¸¥à¸¥à¸²"
+ },
+ "SD": {
+ "name": "ซูดาน"
+ },
+ "SS": {
+ "name": "ซูดานใต้"
+ },
+ "SR": {
+ "name": "ซูรินาเม"
+ },
+ "SC": {
+ "name": "เซเชลส์"
+ },
+ "KN": {
+ "name": "เซนต์คิตส์à¹à¸¥à¸°à¹€à¸™à¸§à¸´à¸ª"
+ },
+ "BL": {
+ "name": "เซนต์บาร์เธเลมี"
+ },
+ "MF": {
+ "name": "เซนต์มาติน"
+ },
+ "SX": {
+ "name": "เซนต์มาร์ติน"
+ },
+ "LC": {
+ "name": "เซนต์ลูเซีย"
+ },
+ "VC": {
+ "name": "เซนต์วินเซนต์à¹à¸¥à¸°à¹€à¸à¸£à¸™à¸²à¸”ีนส์"
+ },
+ "SH": {
+ "name": "เซนต์เฮเลนา"
+ },
+ "SN": {
+ "name": "เซเนà¸à¸±à¸¥"
+ },
+ "RS": {
+ "name": "เซอร์เบีย"
+ },
+ "ST": {
+ "name": "เซาตูเมà¹à¸¥à¸°à¸›à¸£à¸´à¸™à¸‹à¸´à¸›à¸µ"
+ },
+ "SL": {
+ "name": "เซียร์ราลีโอน"
+ },
+ "PM": {
+ "name": "à¹à¸‹à¸‡à¸›à¸µà¹à¸¢à¸£à¹Œà¹à¸¥à¸°à¸¡à¸µà¹€à¸à¸­à¸¥à¸‡"
+ },
+ "ZM": {
+ "name": "à¹à¸‹à¸¡à¹€à¸šà¸µà¸¢"
+ },
+ "SO": {
+ "name": "โซมาเลีย"
+ },
+ "CY": {
+ "name": "ไซปรัส"
+ },
+ "JP": {
+ "name": "à¸à¸µà¹ˆà¸›à¸¸à¹ˆà¸™"
+ },
+ "PS": {
+ "name": "ดินà¹à¸”นปาเลสไตน์"
+ },
+ "DG": {
+ "name": "ดิเอโà¸à¸à¸²à¸£à¹Œà¹€à¸‹à¸µà¸¢"
+ },
+ "DK": {
+ "name": "เดนมาร์à¸"
+ },
+ "DM": {
+ "name": "โดมินิà¸à¸²"
+ },
+ "TT": {
+ "name": "ตรินิà¹à¸”ดà¹à¸¥à¸°à¹‚ตเบโà¸"
+ },
+ "TO": {
+ "name": "ตองà¸à¸²"
+ },
+ "TL": {
+ "name": "ติมอร์-เลสเต"
+ },
+ "TR": {
+ "name": "ตุรà¸à¸µ"
+ },
+ "TN": {
+ "name": "ตูนิเซีย"
+ },
+ "TV": {
+ "name": "ตูวาลู"
+ },
+ "TM": {
+ "name": "เติร์à¸à¹€à¸¡à¸™à¸´à¸ªà¸–าน"
+ },
+ "TK": {
+ "name": "โตเà¸à¹€à¸¥à¸²"
+ },
+ "TG": {
+ "name": "โตโà¸"
+ },
+ "TW": {
+ "name": "ไต้หวัน"
+ },
+ "TA": {
+ "name": "ทริสตัน เดอ คูนา"
+ },
+ "TJ": {
+ "name": "ทาจิà¸à¸´à¸ªà¸–าน"
+ },
+ "TZ": {
+ "name": "à¹à¸—นซาเนีย"
+ },
+ "TH": {
+ "name": "ไทย"
+ },
+ "VA": {
+ "name": "นครวาติà¸à¸±à¸™"
+ },
+ "NO": {
+ "name": "นอร์เวย์"
+ },
+ "NA": {
+ "name": "นามิเบีย"
+ },
+ "NR": {
+ "name": "นาอูรู"
+ },
+ "NI": {
+ "name": "นิà¸à¸²à¸£à¸²à¸à¸±à¸§"
+ },
+ "NC": {
+ "name": "นิวà¹à¸„ลิโดเนีย"
+ },
+ "NZ": {
+ "name": "นิวซีà¹à¸¥à¸™à¸”์"
+ },
+ "NU": {
+ "name": "นีอูเอ"
+ },
+ "NL": {
+ "name": "เนเธอร์à¹à¸¥à¸™à¸”์"
+ },
+ "BQ": {
+ "name": "เนเธอร์à¹à¸¥à¸™à¸”์à¹à¸„ริบเบียน"
+ },
+ "NP": {
+ "name": "เนปาล"
+ },
+ "NG": {
+ "name": "ไนจีเรีย"
+ },
+ "NE": {
+ "name": "ไนเจอร์"
+ },
+ "BR": {
+ "name": "บราซิล"
+ },
+ "IO": {
+ "name": "บริติชอินเดียนโอเชียนเทร์ริทอรี"
+ },
+ "BN": {
+ "name": "บรูไน"
+ },
+ "BW": {
+ "name": "บอตสวานา"
+ },
+ "BA": {
+ "name": "บอสเนียà¹à¸¥à¸°à¹€à¸®à¸­à¸£à¹Œà¹€à¸‹à¹‚à¸à¸§à¸µà¸™à¸²"
+ },
+ "BD": {
+ "name": "บังà¸à¸¥à¸²à¹€à¸—ศ"
+ },
+ "BG": {
+ "name": "บัลà¹à¸à¹€à¸£à¸µà¸¢"
+ },
+ "BB": {
+ "name": "บาร์เบโดส"
+ },
+ "BH": {
+ "name": "บาห์เรน"
+ },
+ "BS": {
+ "name": "บาฮามาส"
+ },
+ "BI": {
+ "name": "บุรุนดี"
+ },
+ "BF": {
+ "name": "บูร์à¸à¸´à¸™à¸²à¸Ÿà¸²à¹‚ซ"
+ },
+ "BJ": {
+ "name": "เบนิน"
+ },
+ "BE": {
+ "name": "เบลเยียม"
+ },
+ "BY": {
+ "name": "เบลารุส"
+ },
+ "BZ": {
+ "name": "เบลีซ"
+ },
+ "BM": {
+ "name": "เบอร์มิวดา"
+ },
+ "BO": {
+ "name": "โบลิเวีย"
+ },
+ "PK": {
+ "name": "ปาà¸à¸µà¸ªà¸–าน"
+ },
+ "PA": {
+ "name": "ปานามา"
+ },
+ "PG": {
+ "name": "ปาปัวนิวà¸à¸´à¸™à¸µ"
+ },
+ "PY": {
+ "name": "ปาราà¸à¸§à¸±à¸¢"
+ },
+ "PW": {
+ "name": "ปาเลา"
+ },
+ "PE": {
+ "name": "เปรู"
+ },
+ "PR": {
+ "name": "เปอร์โตริโà¸"
+ },
+ "PT": {
+ "name": "โปรตุเà¸à¸ª"
+ },
+ "PL": {
+ "name": "โปà¹à¸¥à¸™à¸”์"
+ },
+ "FR": {
+ "name": "à¸à¸£à¸±à¹ˆà¸‡à¹€à¸¨à¸ª"
+ },
+ "FJ": {
+ "name": "ฟิจิ"
+ },
+ "FI": {
+ "name": "ฟินà¹à¸¥à¸™à¸”์"
+ },
+ "PH": {
+ "name": "ฟิลิปปินส์"
+ },
+ "GF": {
+ "name": "เฟรนช์เà¸à¸µà¸¢à¸™à¸²"
+ },
+ "TF": {
+ "name": "เฟรนช์เซาเทิร์นเทร์ริทอรีส์"
+ },
+ "PF": {
+ "name": "เฟรนช์โปลินีเซีย"
+ },
+ "BT": {
+ "name": "ภูà¸à¸²à¸™"
+ },
+ "MN": {
+ "name": "มองโà¸à¹€à¸¥à¸µà¸¢"
+ },
+ "MS": {
+ "name": "มอนต์เซอร์รัต"
+ },
+ "ME": {
+ "name": "มอนเตเนโà¸à¸£"
+ },
+ "MU": {
+ "name": "มอริเชียส"
+ },
+ "MR": {
+ "name": "มอริเตเนีย"
+ },
+ "MD": {
+ "name": "มอลโดวา"
+ },
+ "MT": {
+ "name": "มอลตา"
+ },
+ "MV": {
+ "name": "มัลดีฟส์"
+ },
+ "MK": {
+ "name": "มาซิโดเนีย"
+ },
+ "MG": {
+ "name": "มาดาà¸à¸±à¸ªà¸à¸²à¸£à¹Œ"
+ },
+ "YT": {
+ "name": "มายอต"
+ },
+ "MQ": {
+ "name": "มาร์ตินีà¸"
+ },
+ "MW": {
+ "name": "มาลาวี"
+ },
+ "ML": {
+ "name": "มาลี"
+ },
+ "MY": {
+ "name": "มาเลเซีย"
+ },
+ "MX": {
+ "name": "เม็à¸à¸‹à¸´à¹‚à¸"
+ },
+ "MM": {
+ "name": "เมียนม่าร์ (พม่า)"
+ },
+ "MZ": {
+ "name": "โมซัมบิà¸"
+ },
+ "MC": {
+ "name": "โมนาโà¸"
+ },
+ "MA": {
+ "name": "โมร็อà¸à¹‚à¸"
+ },
+ "FM": {
+ "name": "ไมโครนีเซีย"
+ },
+ "GI": {
+ "name": "ยิบรอลตาร์"
+ },
+ "UG": {
+ "name": "ยูà¸à¸±à¸™à¸”า"
+ },
+ "UA": {
+ "name": "ยูเครน"
+ },
+ "YE": {
+ "name": "เยเมน"
+ },
+ "DE": {
+ "name": "เยอรมนี"
+ },
+ "RW": {
+ "name": "รวันดา"
+ },
+ "RU": {
+ "name": "รัสเซีย"
+ },
+ "RE": {
+ "name": "เรอูนียง"
+ },
+ "RO": {
+ "name": "โรมาเนีย"
+ },
+ "LU": {
+ "name": "ลัà¸à¹€à¸‹à¸¡à¹€à¸šà¸´à¸£à¹Œà¸"
+ },
+ "LV": {
+ "name": "ลัตเวีย"
+ },
+ "LA": {
+ "name": "ลาว"
+ },
+ "LI": {
+ "name": "ลิà¸à¹€à¸•à¸™à¸ªà¹„ตน์"
+ },
+ "LT": {
+ "name": "ลิทัวเนีย"
+ },
+ "LY": {
+ "name": "ลิเบีย"
+ },
+ "LS": {
+ "name": "เลโซโท"
+ },
+ "LB": {
+ "name": "เลบานอน"
+ },
+ "LR": {
+ "name": "ไลบีเรีย"
+ },
+ "VU": {
+ "name": "วานูอาตู"
+ },
+ "WF": {
+ "name": "วาลลิสà¹à¸¥à¸°à¸Ÿà¸¸à¸•à¸¹à¸™à¸²"
+ },
+ "VE": {
+ "name": "เวเนซุเอลา"
+ },
+ "VN": {
+ "name": "เวียดนาม"
+ },
+ "LK": {
+ "name": "ศรีลังà¸à¸²"
+ },
+ "ES": {
+ "name": "สเปน"
+ },
+ "SJ": {
+ "name": "สฟาลบาร์à¹à¸¥à¸°à¸¢à¸²à¸™à¹„มเอน"
+ },
+ "SK": {
+ "name": "สโลวะเà¸à¸µà¸¢"
+ },
+ "SI": {
+ "name": "สโลวีเนีย"
+ },
+ "SZ": {
+ "name": "สวาซิà¹à¸¥à¸™à¸”์"
+ },
+ "CH": {
+ "name": "สวิตเซอร์à¹à¸¥à¸™à¸”์"
+ },
+ "SE": {
+ "name": "สวีเดน"
+ },
+ "US": {
+ "name": "สหรัà¸à¸­à¹€à¸¡à¸£à¸´à¸à¸²"
+ },
+ "AE": {
+ "name": "สหรัà¸à¸­à¸²à¸«à¸£à¸±à¸šà¹€à¸­à¸¡à¸´à¹€à¸£à¸•à¸ªà¹Œ"
+ },
+ "GB": {
+ "name": "สหราชอาณาจัà¸à¸£"
+ },
+ "CZ": {
+ "name": "สาธารณรัà¸à¹€à¸Šà¹‡à¸"
+ },
+ "DO": {
+ "name": "สาธารณรัà¸à¹‚ดมินิà¸à¸±à¸™"
+ },
+ "CF": {
+ "name": "สาธารณรัà¸à¹à¸­à¸Ÿà¸£à¸´à¸à¸²à¸à¸¥à¸²à¸‡"
+ },
+ "SG": {
+ "name": "สิงคโปร์"
+ },
+ "IC": {
+ "name": "หมู่เà¸à¸²à¸°à¸„านารี"
+ },
+ "CK": {
+ "name": "หมู่เà¸à¸²à¸°à¸„ุà¸"
+ },
+ "KY": {
+ "name": "หมู่เà¸à¸²à¸°à¹€à¸„ย์à¹à¸¡à¸™"
+ },
+ "CC": {
+ "name": "หมู่เà¸à¸²à¸°à¹‚คโคส (คีลิง)"
+ },
+ "SB": {
+ "name": "หมู่เà¸à¸²à¸°à¹‚ซโลมอน"
+ },
+ "TC": {
+ "name": "หมู่เà¸à¸²à¸°à¹€à¸•à¸´à¸à¸ªà¹Œà¹à¸¥à¸°à¸«à¸¡à¸¹à¹ˆà¹€à¸à¸²à¸°à¹€à¸„คอส"
+ },
+ "MP": {
+ "name": "หมู่เà¸à¸²à¸°à¸™à¸­à¸£à¹Œà¹€à¸—ิร์นมาเรียนา"
+ },
+ "VG": {
+ "name": "หมู่เà¸à¸²à¸°à¸šà¸£à¸´à¸•à¸´à¸Šà¹€à¸§à¸­à¸£à¹Œà¸ˆà¸´à¸™"
+ },
+ "PN": {
+ "name": "หมู่เà¸à¸²à¸°à¸žà¸´à¸•à¹à¸„ร์น"
+ },
+ "FK": {
+ "name": "หมู่เà¸à¸²à¸°à¸Ÿà¸­à¸¥à¹Œà¸à¹à¸¥à¸™à¸”์"
+ },
+ "FO": {
+ "name": "หมู่เà¸à¸²à¸°à¹à¸Ÿà¹‚ร"
+ },
+ "MH": {
+ "name": "หมู่เà¸à¸²à¸°à¸¡à¸²à¸£à¹Œà¹à¸Šà¸¥à¸¥à¹Œ"
+ },
+ "VI": {
+ "name": "หมู่เà¸à¸²à¸°à¸¢à¸¹à¹€à¸­à¸ªà¹€à¸§à¸­à¸£à¹Œà¸ˆà¸´à¸™"
+ },
+ "UM": {
+ "name": "หมู่เà¸à¸²à¸°à¸£à¸­à¸šà¸™à¸­à¸à¸‚องสหรัà¸à¸­à¹€à¸¡à¸£à¸´à¸à¸²"
+ },
+ "AX": {
+ "name": "หมู่เà¸à¸²à¸°à¹‚อลันด์"
+ },
+ "AS": {
+ "name": "อเมริà¸à¸±à¸™à¸‹à¸²à¸¡à¸±à¸§"
+ },
+ "AU": {
+ "name": "ออสเตรเลีย"
+ },
+ "AT": {
+ "name": "ออสเตรีย"
+ },
+ "AD": {
+ "name": "อันดอร์รา"
+ },
+ "AF": {
+ "name": "อัฟà¸à¸²à¸™à¸´à¸ªà¸–าน"
+ },
+ "AZ": {
+ "name": "อาเซอร์ไบจาน"
+ },
+ "AR": {
+ "name": "อาร์เจนตินา"
+ },
+ "AM": {
+ "name": "อาร์เมเนีย"
+ },
+ "AW": {
+ "name": "อารูบา"
+ },
+ "GQ": {
+ "name": "อิเควทอเรียลà¸à¸´à¸™à¸µ"
+ },
+ "IT": {
+ "name": "อิตาลี"
+ },
+ "IN": {
+ "name": "อินเดีย"
+ },
+ "ID": {
+ "name": "อินโดนีเซีย"
+ },
+ "IQ": {
+ "name": "อิรัà¸"
+ },
+ "IL": {
+ "name": "อิสราเอล"
+ },
+ "IR": {
+ "name": "อิหร่าน"
+ },
+ "EG": {
+ "name": "อียิปต์"
+ },
+ "UZ": {
+ "name": "อุซเบà¸à¸´à¸ªà¸–าน"
+ },
+ "UY": {
+ "name": "อุรุà¸à¸§à¸±à¸¢"
+ },
+ "EC": {
+ "name": "เอà¸à¸§à¸²à¸”อร์"
+ },
+ "ET": {
+ "name": "เอธิโอเปีย"
+ },
+ "ER": {
+ "name": "เอริเทรีย"
+ },
+ "SV": {
+ "name": "เอลซัลวาดอร์"
+ },
+ "EE": {
+ "name": "เอสโตเนีย"
+ },
+ "AI": {
+ "name": "à¹à¸­à¸‡à¸à¸§à¸´à¸¥à¸¥à¸²"
+ },
+ "AO": {
+ "name": "à¹à¸­à¸‡à¹‚à¸à¸¥à¸²"
+ },
+ "AQ": {
+ "name": "à¹à¸­à¸™à¸•à¸²à¸£à¹Œà¸à¸•à¸´à¸à¸²"
+ },
+ "AG": {
+ "name": "à¹à¸­à¸™à¸•à¸´à¸à¸²à¹à¸¥à¸°à¸šà¸²à¸£à¹Œà¸šà¸¹à¸”า"
+ },
+ "ZA": {
+ "name": "à¹à¸­à¸Ÿà¸£à¸´à¸à¸²à¹ƒà¸•à¹‰"
+ },
+ "DZ": {
+ "name": "à¹à¸­à¸¥à¸ˆà¸µà¹€à¸£à¸µà¸¢"
+ },
+ "AL": {
+ "name": "à¹à¸­à¸¥à¹€à¸šà¹€à¸™à¸µà¸¢"
+ },
+ "OM": {
+ "name": "โอมาน"
+ },
+ "IS": {
+ "name": "ไอซ์à¹à¸¥à¸™à¸”์"
+ },
+ "IE": {
+ "name": "ไอร์à¹à¸¥à¸™à¸”์"
+ },
+ "CI": {
+ "name": "ไอวอรี่โคสต์"
+ },
+ "HN": {
+ "name": "ฮอนดูรัส"
+ },
+ "HU": {
+ "name": "ฮังà¸à¸²à¸£à¸µ"
+ },
+ "HT": {
+ "name": "เฮติ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ti.json b/library/intl/resources/country/ti.json
new file mode 100644
index 000000000..6cf5bfa3d
--- /dev/null
+++ b/library/intl/resources/country/ti.json
@@ -0,0 +1,761 @@
+{
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "HU": {
+ "name": "ሀንጋሪ"
+ },
+ "HT": {
+ "name": "ሀይቲ"
+ },
+ "IN": {
+ "name": "ህንድ"
+ },
+ "HN": {
+ "name": "ሆንዱራስ"
+ },
+ "HK": {
+ "name": "ሆንጠኮንáŒ"
+ },
+ "LU": {
+ "name": "ሉክሰáˆá‰ áˆ­áŒ"
+ },
+ "LY": {
+ "name": "ሊቢያ"
+ },
+ "LB": {
+ "name": "ሊባኖስ"
+ },
+ "LT": {
+ "name": "ሊቱዌኒያ"
+ },
+ "LI": {
+ "name": "ሊችተንስታይን"
+ },
+ "LV": {
+ "name": "ላትቪያ"
+ },
+ "LA": {
+ "name": "ላኦስ"
+ },
+ "LR": {
+ "name": "ላይቤሪያ"
+ },
+ "LS": {
+ "name": "ሌሶቶ"
+ },
+ "FM": {
+ "name": "ሚክሮኔዢያ"
+ },
+ "ML": {
+ "name": "ማሊ"
+ },
+ "MW": {
+ "name": "ማላዊ"
+ },
+ "MY": {
+ "name": "ማሌዢያ"
+ },
+ "MT": {
+ "name": "ማáˆá‰³"
+ },
+ "MV": {
+ "name": "ማáˆá‹²á‰­áˆµ"
+ },
+ "MU": {
+ "name": "ማሩሸስ"
+ },
+ "MH": {
+ "name": "ማርሻሠአይላንድ"
+ },
+ "MQ": {
+ "name": "ማርቲኒክ"
+ },
+ "MK": {
+ "name": "ማከዶኒያ"
+ },
+ "MO": {
+ "name": "ማካዎ"
+ },
+ "MM": {
+ "name": "ማያንማር"
+ },
+ "MG": {
+ "name": "ማዳጋስካር"
+ },
+ "MX": {
+ "name": "ሜክሲኮ"
+ },
+ "YT": {
+ "name": "ሜይኦቴ"
+ },
+ "TL": {
+ "name": "áˆáˆµáˆ«á‰… ቲሞር"
+ },
+ "EH": {
+ "name": "áˆá‹•áˆ«á‰£á‹Š ሳህራ"
+ },
+ "MD": {
+ "name": "ሞáˆá‹¶á‰«"
+ },
+ "MR": {
+ "name": "ሞሪቴኒያ"
+ },
+ "MA": {
+ "name": "ሞሮኮ"
+ },
+ "MC": {
+ "name": "ሞናኮ"
+ },
+ "MS": {
+ "name": "ሞንትሴራት"
+ },
+ "MN": {
+ "name": "ሞንጎሊያ"
+ },
+ "MZ": {
+ "name": "ሞዛáˆá‰¢áŠ­"
+ },
+ "RW": {
+ "name": "ሩዋንዳ"
+ },
+ "RE": {
+ "name": "ሪዩኒየን"
+ },
+ "RU": {
+ "name": "ራሺያ"
+ },
+ "RO": {
+ "name": "ሮሜኒያ"
+ },
+ "SB": {
+ "name": "ሰሎሞን ደሴት"
+ },
+ "KP": {
+ "name": "ሰሜን ኮሪያ"
+ },
+ "SO": {
+ "name": "ሱማሌ"
+ },
+ "SR": {
+ "name": "ሱሪናáˆ"
+ },
+ "SZ": {
+ "name": "ሱዋዚላንድ"
+ },
+ "SD": {
+ "name": "ሱዳን"
+ },
+ "LK": {
+ "name": "ሲሪላንካ"
+ },
+ "SY": {
+ "name": "ሲሪያ"
+ },
+ "SC": {
+ "name": "ሲሼáˆáˆµ"
+ },
+ "SG": {
+ "name": "ሲንጋá–ር"
+ },
+ "WS": {
+ "name": "ሳሞአ"
+ },
+ "SM": {
+ "name": "ሳን ማሪኖ"
+ },
+ "ST": {
+ "name": "ሳኦ ቶሜ እና á•áˆªáŠ•áˆ²á”"
+ },
+ "SA": {
+ "name": "ሳá‹á‹µáŠ áˆ¨á‰¢á‹«"
+ },
+ "CY": {
+ "name": "ሳይá•áˆ¨áˆµ"
+ },
+ "SL": {
+ "name": "ሴራሊዮን"
+ },
+ "SN": {
+ "name": "ሴኔጋáˆ"
+ },
+ "SH": {
+ "name": "ሴንት ሄለና"
+ },
+ "LC": {
+ "name": "ሴንት ሉቺያ"
+ },
+ "SK": {
+ "name": "ስሎቫኪያ"
+ },
+ "SI": {
+ "name": "ስሎቬኒያ"
+ },
+ "CH": {
+ "name": "ስዊዘርላንድ"
+ },
+ "SE": {
+ "name": "ስዊድን"
+ },
+ "ES": {
+ "name": "ስá”ን"
+ },
+ "VC": {
+ "name": "ቅዱስ ቪንሴንት እና áŒáˆ¬áŠ“ዲንስ"
+ },
+ "KN": {
+ "name": "ቅዱስ ኪትስ እና ኔቪስ"
+ },
+ "PM": {
+ "name": "ቅዱስ á’ዬር እና ሚኩኤሎን"
+ },
+ "BT": {
+ "name": "ቡህታን"
+ },
+ "BG": {
+ "name": "ቡáˆáŒŒáˆªá‹«"
+ },
+ "BF": {
+ "name": "ቡርኪና á‹áˆ¶"
+ },
+ "GW": {
+ "name": "ቢሳዎ"
+ },
+ "BS": {
+ "name": "ባሃማስ"
+ },
+ "BH": {
+ "name": "ባህሬን"
+ },
+ "BB": {
+ "name": "ባርቤዶስ"
+ },
+ "BD": {
+ "name": "ባንáŒáˆ‹á‹²áˆ½"
+ },
+ "BZ": {
+ "name": "ቤሊዘ"
+ },
+ "BY": {
+ "name": "ቤላሩስ"
+ },
+ "BE": {
+ "name": "ቤáˆáŒ„áˆ"
+ },
+ "BM": {
+ "name": "ቤርሙዳ"
+ },
+ "BJ": {
+ "name": "ቤኒን"
+ },
+ "BN": {
+ "name": "ብሩኒ"
+ },
+ "BI": {
+ "name": "ብሩንዲ"
+ },
+ "BR": {
+ "name": "ብራዚáˆ"
+ },
+ "BO": {
+ "name": "ቦሊቪያ"
+ },
+ "BA": {
+ "name": "ቦስኒያ እና ሄርዞጎቪኒያ"
+ },
+ "BW": {
+ "name": "ቦትስዋና"
+ },
+ "VA": {
+ "name": "ቫቲካን"
+ },
+ "VU": {
+ "name": "ቫኑአቱ"
+ },
+ "VN": {
+ "name": "ቬትናáˆ"
+ },
+ "VE": {
+ "name": "ቬንዙዌላ"
+ },
+ "TR": {
+ "name": "ቱርክ"
+ },
+ "TM": {
+ "name": "ቱርክሜኒስታን"
+ },
+ "TV": {
+ "name": "ቱቫሉ"
+ },
+ "TN": {
+ "name": "ቱኒዚያ"
+ },
+ "TZ": {
+ "name": "ታንዛኒያ"
+ },
+ "TH": {
+ "name": "ታይላንድ"
+ },
+ "TW": {
+ "name": "ታይዋን"
+ },
+ "TJ": {
+ "name": "ታጃኪስታን"
+ },
+ "TT": {
+ "name": "ትሪኒዳድ እና ቶባጎ"
+ },
+ "TO": {
+ "name": "ቶንጋ"
+ },
+ "TK": {
+ "name": "ቶክላá‹"
+ },
+ "TG": {
+ "name": "ቶáŒ"
+ },
+ "CL": {
+ "name": "ቺሊ"
+ },
+ "CN": {
+ "name": "ቻይና"
+ },
+ "TD": {
+ "name": "ቻድ"
+ },
+ "CZ": {
+ "name": "ቼክ ሪá‘ብሊክ"
+ },
+ "NU": {
+ "name": "ኒኡይ"
+ },
+ "NI": {
+ "name": "ኒካራጓ"
+ },
+ "NC": {
+ "name": "ኒዠካሌዶኒያ"
+ },
+ "NZ": {
+ "name": "ኒዠዚላንድ"
+ },
+ "NE": {
+ "name": "ኒጀር"
+ },
+ "NA": {
+ "name": "ናሚቢያ"
+ },
+ "NR": {
+ "name": "ናኡሩ"
+ },
+ "NG": {
+ "name": "ናይጄሪያ"
+ },
+ "NL": {
+ "name": "ኔዘርላንድ"
+ },
+ "NP": {
+ "name": "ኔá“áˆ"
+ },
+ "NO": {
+ "name": "ኖርዌ"
+ },
+ "NF": {
+ "name": "ኖርáŽáˆáŠ­ ደሴት"
+ },
+ "AL": {
+ "name": "አáˆá‰£áŠ’á‹«"
+ },
+ "DZ": {
+ "name": "አáˆáŒ„ሪያ"
+ },
+ "US": {
+ "name": "አሜሪካ"
+ },
+ "AW": {
+ "name": "አሩባ"
+ },
+ "AM": {
+ "name": "አርሜኒያ"
+ },
+ "AR": {
+ "name": "አርጀንቲና"
+ },
+ "AG": {
+ "name": "አንቲጓ እና ባሩዳ"
+ },
+ "AQ": {
+ "name": "አንታርክቲካ"
+ },
+ "AD": {
+ "name": "አንዶራ"
+ },
+ "AI": {
+ "name": "አንጉኢላ"
+ },
+ "AO": {
+ "name": "አንáŒáˆ‹"
+ },
+ "AU": {
+ "name": "አá‹áˆµá‰µáˆ¬áˆŠá‹«"
+ },
+ "AZ": {
+ "name": "አዘርባጃን"
+ },
+ "IE": {
+ "name": "አየርላንድ"
+ },
+ "IS": {
+ "name": "አይስላንድ"
+ },
+ "AF": {
+ "name": "አáጋኒስታን"
+ },
+ "UY": {
+ "name": "ኡራጓይ"
+ },
+ "IQ": {
+ "name": "ኢራቅ"
+ },
+ "IR": {
+ "name": "ኢራን"
+ },
+ "ET": {
+ "name": "ኢትዮጵያ"
+ },
+ "ID": {
+ "name": "ኢንዶኔዢያ"
+ },
+ "GQ": {
+ "name": "ኢኳቶሪያሠጊኒ"
+ },
+ "EC": {
+ "name": "ኢኳዶር"
+ },
+ "SV": {
+ "name": "ኤሠሳáˆá‰«á‹¶áˆ­"
+ },
+ "ER": {
+ "name": "ኤርትራ"
+ },
+ "EE": {
+ "name": "ኤስቶኒያ"
+ },
+ "IL": {
+ "name": "እስራኤáˆ"
+ },
+ "GB": {
+ "name": "እንáŒáˆŠá‹"
+ },
+ "OM": {
+ "name": "ኦማን"
+ },
+ "AT": {
+ "name": "ኦስትሪያ"
+ },
+ "CU": {
+ "name": "ኩባ"
+ },
+ "CK": {
+ "name": "ኩክ ደሴቶች"
+ },
+ "KI": {
+ "name": "ኪሪባቲ"
+ },
+ "CM": {
+ "name": "ካሜሩን"
+ },
+ "KH": {
+ "name": "ካáˆá‰¦á‹²á‹«"
+ },
+ "CA": {
+ "name": "ካናዳ"
+ },
+ "KY": {
+ "name": "ካይማን ደሴቶች"
+ },
+ "KE": {
+ "name": "ኬንያ"
+ },
+ "CV": {
+ "name": "ኬᕠቬርዴ"
+ },
+ "HR": {
+ "name": "ክሮኤሽያ"
+ },
+ "KW": {
+ "name": "ክዌት"
+ },
+ "CO": {
+ "name": "ኮሎáˆá‰¢á‹«"
+ },
+ "KM": {
+ "name": "ኮሞሮስ"
+ },
+ "CR": {
+ "name": "ኮስታ ሪካ"
+ },
+ "CI": {
+ "name": "ኮት ዲቯር"
+ },
+ "CD": {
+ "name": "ኮንጎ"
+ },
+ "CG": {
+ "name": "ኮንáŒ"
+ },
+ "CC": {
+ "name": "ኮኮስ ኬሊንጠደሴቶች"
+ },
+ "QA": {
+ "name": "ኳታር"
+ },
+ "WF": {
+ "name": "ዋሊስ እና á‰á‰±áŠ“ ደሴቶች"
+ },
+ "ZW": {
+ "name": "á‹šáˆá‰§á‰¤"
+ },
+ "ZM": {
+ "name": "á‹›áˆá‰¢á‹«"
+ },
+ "YE": {
+ "name": "የመን"
+ },
+ "CF": {
+ "name": "የመካከለኛዠአáሪካ ሪáብሊክ"
+ },
+ "MP": {
+ "name": "የሰሜናዊ ማሪያና ደሴቶች"
+ },
+ "SJ": {
+ "name": "የስቫáˆá‰£áˆ­á‹µ እና ዣን ማየን ደሴቶች"
+ },
+ "IO": {
+ "name": "የብሪታኒያ ህንድ á‹á‰‚ያኖስ áŒá‹›á‰µ"
+ },
+ "AE": {
+ "name": "የተባበሩት አረብ ኤáˆáˆ¬á‰µáˆµ"
+ },
+ "TC": {
+ "name": "የቱርኮችና የካኢኮስ ደሴቶች"
+ },
+ "AX": {
+ "name": "የአላንድ ደሴቶች"
+ },
+ "UM": {
+ "name": "የአሜሪካ ራቅ ያሉ አናሳ ደሴቶች"
+ },
+ "AS": {
+ "name": "የአሜሪካ ሳሞአ"
+ },
+ "VI": {
+ "name": "የአሜሪካ ቨርጂን ደሴቶች"
+ },
+ "VG": {
+ "name": "የእንáŒáˆŠá‹ ድንáŒáˆ ደሴቶች"
+ },
+ "CX": {
+ "name": "የገና ደሴቶች"
+ },
+ "TF": {
+ "name": "የáˆáˆ¨áŠ•áˆ³á‹­ ደቡባዊ áŒá‹›á‰¶á‰½"
+ },
+ "GF": {
+ "name": "የáˆáˆ¨áŠ•áˆ³á‹­ ጉዊአና"
+ },
+ "PF": {
+ "name": "የáˆáˆ¨áŠ•áˆ³á‹­ á–ሊኔዢያ"
+ },
+ "FO": {
+ "name": "የá‹áˆ®á‹­ ደሴቶች"
+ },
+ "PS": {
+ "name": "የááˆáˆµáŒ¤áˆ áŒá‹›á‰µ"
+ },
+ "FK": {
+ "name": "የáŽáˆáŠ­áˆ‹áŠ•á‹µ ደሴቶች"
+ },
+ "UA": {
+ "name": "ዩክሬን"
+ },
+ "UZ": {
+ "name": "á‹©á‹á‰ áŠªáˆµá‰³áŠ•"
+ },
+ "UG": {
+ "name": "ዩጋንዳ"
+ },
+ "ZA": {
+ "name": "ደቡብ አáሪካ"
+ },
+ "KR": {
+ "name": "ደቡብ ኮሪያ"
+ },
+ "GS": {
+ "name": "ደቡብ ጆርጂያ እና የደቡድ ሳንድዊች ደሴቶች"
+ },
+ "DK": {
+ "name": "ዴንማርክ"
+ },
+ "DM": {
+ "name": "ዶሚኒካ"
+ },
+ "DO": {
+ "name": "ዶሚኒክ ሪá‘ብሊክ"
+ },
+ "DE": {
+ "name": "ጀርመን"
+ },
+ "DJ": {
+ "name": "ጂቡቲ"
+ },
+ "JM": {
+ "name": "ጃማይካ"
+ },
+ "JP": {
+ "name": "ጃá“ን"
+ },
+ "JO": {
+ "name": "ጆርዳን"
+ },
+ "GE": {
+ "name": "ጆርጂያ"
+ },
+ "GU": {
+ "name": "ጉዋáˆ"
+ },
+ "GT": {
+ "name": "ጉዋቲማላ"
+ },
+ "GP": {
+ "name": "ጉዋደሉá•"
+ },
+ "GY": {
+ "name": "ጉያና"
+ },
+ "GI": {
+ "name": "ጊብራáˆá‰³áˆ­"
+ },
+ "GN": {
+ "name": "ጊኒ"
+ },
+ "GM": {
+ "name": "ጋáˆá‰¢á‹«"
+ },
+ "GA": {
+ "name": "ጋቦን"
+ },
+ "GH": {
+ "name": "ጋና"
+ },
+ "GL": {
+ "name": "áŒáˆªáŠ•áˆ‹áŠ•á‹µ"
+ },
+ "GR": {
+ "name": "áŒáˆªáŠ­"
+ },
+ "GD": {
+ "name": "áŒáˆ¬áŠ“ዳ"
+ },
+ "EG": {
+ "name": "áŒá‰¥áŒ½"
+ },
+ "IT": {
+ "name": "ጣሊያን"
+ },
+ "FR": {
+ "name": "áˆáˆ¨áŠ•áˆ³á‹­"
+ },
+ "PH": {
+ "name": "áŠáˆŠá’ንስ"
+ },
+ "FI": {
+ "name": "áŠáŠ•áˆ‹áŠ•á‹µ"
+ },
+ "FJ": {
+ "name": "áŠáŒ‚"
+ },
+ "PN": {
+ "name": "á’ትካኢርን"
+ },
+ "PW": {
+ "name": "á“ላá‹"
+ },
+ "PY": {
+ "name": "á“ራጓይ"
+ },
+ "PA": {
+ "name": "á“ናማ"
+ },
+ "PK": {
+ "name": "á“ኪስታን"
+ },
+ "PG": {
+ "name": "á“á‘á‹‹ ኒዠጊኒ"
+ },
+ "PE": {
+ "name": "á”ሩ"
+ },
+ "PL": {
+ "name": "á–ላንድ"
+ },
+ "PT": {
+ "name": "á–ርቱጋáˆ"
+ },
+ "PR": {
+ "name": "á–ርታ ሪኮ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/to.json b/library/intl/resources/country/to.json
new file mode 100644
index 000000000..645648731
--- /dev/null
+++ b/library/intl/resources/country/to.json
@@ -0,0 +1,761 @@
+{
+ "AI": {
+ "name": "Anikuila"
+ },
+ "AG": {
+ "name": "Anitikua mo Palaputa"
+ },
+ "FR": {
+ "name": "Falanisē"
+ },
+ "PH": {
+ "name": "Filipaini"
+ },
+ "FI": {
+ "name": "Finilani"
+ },
+ "FJ": {
+ "name": "Fisi"
+ },
+ "WS": {
+ "name": "Haʻamoa"
+ },
+ "AS": {
+ "name": "Haʻamoa ʻAmelika"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "NL": {
+ "name": "HÅlani"
+ },
+ "HK": {
+ "name": "Hongi Kongi SAR Siaina"
+ },
+ "HN": {
+ "name": "Honitulasi"
+ },
+ "HU": {
+ "name": "Hungakalia"
+ },
+ "IE": {
+ "name": "ʻAealani"
+ },
+ "AF": {
+ "name": "Ê»AfikÄnisitani"
+ },
+ "ZA": {
+ "name": "ʻAfilika tonga"
+ },
+ "IS": {
+ "name": "ʻAisilani"
+ },
+ "DZ": {
+ "name": "ʻAisilia"
+ },
+ "AE": {
+ "name": "ʻAlepea Fakatahataha"
+ },
+ "AL": {
+ "name": "ʻAlipania"
+ },
+ "AW": {
+ "name": "ʻAlupa"
+ },
+ "AM": {
+ "name": "ʻĀmenia"
+ },
+ "AO": {
+ "name": "ʻAngikola"
+ },
+ "AQ": {
+ "name": "Ê»AnitÄtika"
+ },
+ "AD": {
+ "name": "ʻAnitola"
+ },
+ "AU": {
+ "name": "ʻAositelēlia"
+ },
+ "AT": {
+ "name": "ʻAositulia"
+ },
+ "AZ": {
+ "name": "ʻAsapaisani"
+ },
+ "AR": {
+ "name": "ʻAsenitina"
+ },
+ "GQ": {
+ "name": "ʻEkueta Kini"
+ },
+ "EC": {
+ "name": "ʻEkuetoa"
+ },
+ "SV": {
+ "name": "ʻEle Salavatoa"
+ },
+ "ER": {
+ "name": "ʻElitulia"
+ },
+ "EE": {
+ "name": "Ê»EsitÅnia"
+ },
+ "IQ": {
+ "name": "ʻIlaaki"
+ },
+ "IR": {
+ "name": "ʻIlaani"
+ },
+ "IN": {
+ "name": "ʻInitia"
+ },
+ "ID": {
+ "name": "ʻInitonēsia"
+ },
+ "IL": {
+ "name": "ʻIsileli"
+ },
+ "EG": {
+ "name": "ʻIsipite"
+ },
+ "IT": {
+ "name": "ʻĪtali"
+ },
+ "ET": {
+ "name": "ʻĪtiÅpia"
+ },
+ "UG": {
+ "name": "Ê»IukanitÄ"
+ },
+ "OM": {
+ "name": "ʻOmani"
+ },
+ "FO": {
+ "name": "ʻOtumotu Faloe"
+ },
+ "FK": {
+ "name": "ʻOtumotu Fokulani"
+ },
+ "AX": {
+ "name": "ʻOtumotu ʻAlani"
+ },
+ "IC": {
+ "name": "ʻOtumotu Kaneli"
+ },
+ "KY": {
+ "name": "ʻOtumotu Keimeni"
+ },
+ "CC": {
+ "name": "ʻOtumotu Koko"
+ },
+ "CK": {
+ "name": "ʻOtumotu Kuki"
+ },
+ "MP": {
+ "name": "ʻOtumotu Maliana tokelau"
+ },
+ "MH": {
+ "name": "Ê»Otumotu MÄsolo"
+ },
+ "PN": {
+ "name": "ʻOtumotu Pitikeni"
+ },
+ "SC": {
+ "name": "ʻOtumotu Seiseli"
+ },
+ "GS": {
+ "name": "Ê»Otumotu SeÅsia-tonga mo Saniuisi-tonga"
+ },
+ "UM": {
+ "name": "ʻOtumotu siʻi ʻo ʻAmelika"
+ },
+ "SB": {
+ "name": "ʻOtumotu Solomone"
+ },
+ "TC": {
+ "name": "ʻOtumotu Tuki mo Kaikosi"
+ },
+ "VI": {
+ "name": "ʻOtumotu Vilikini fakaʻamelika"
+ },
+ "VG": {
+ "name": "Ê»Otumotu Vilikini fakapilitÄnia"
+ },
+ "UA": {
+ "name": "ʻŪkalaʻine"
+ },
+ "UY": {
+ "name": "ʻUlukuai"
+ },
+ "UZ": {
+ "name": "ʻUsipekitani"
+ },
+ "WF": {
+ "name": "ʻUvea mo Futuna"
+ },
+ "YE": {
+ "name": "Iemeni"
+ },
+ "BQ": {
+ "name": "Kalipiane fakahÅlani"
+ },
+ "GR": {
+ "name": "Kalisi"
+ },
+ "CM": {
+ "name": "Kameluni"
+ },
+ "GM": {
+ "name": "Kamipia"
+ },
+ "KH": {
+ "name": "KamipÅtia"
+ },
+ "GH": {
+ "name": "Kana"
+ },
+ "CA": {
+ "name": "KÄnata"
+ },
+ "GA": {
+ "name": "Kaponi"
+ },
+ "KZ": {
+ "name": "Kasakitani"
+ },
+ "QA": {
+ "name": "KatÄ"
+ },
+ "GD": {
+ "name": "KelenatÄ"
+ },
+ "KE": {
+ "name": "KeniÄ"
+ },
+ "KG": {
+ "name": "KÄ«kisitani"
+ },
+ "KI": {
+ "name": "Kilipasi"
+ },
+ "GN": {
+ "name": "Kini"
+ },
+ "GW": {
+ "name": "Kini-Pisau"
+ },
+ "CU": {
+ "name": "Kiupa"
+ },
+ "KP": {
+ "name": "KÅlea tokelau"
+ },
+ "KR": {
+ "name": "KÅlea tonga"
+ },
+ "VA": {
+ "name": "Kolo Vatikani"
+ },
+ "CO": {
+ "name": "Kolomipia"
+ },
+ "KM": {
+ "name": "Komolosi"
+ },
+ "CD": {
+ "name": "Kongo - Kinisasa"
+ },
+ "CG": {
+ "name": "Kongo - Palasavila"
+ },
+ "CR": {
+ "name": "Kosita Lika"
+ },
+ "XK": {
+ "name": "KÅsovo"
+ },
+ "GU": {
+ "name": "Kuamu"
+ },
+ "GP": {
+ "name": "Kuatalupe"
+ },
+ "GT": {
+ "name": "Kuatamala"
+ },
+ "KW": {
+ "name": "Kueiti"
+ },
+ "GG": {
+ "name": "Kuenisī"
+ },
+ "GY": {
+ "name": "Kuiana"
+ },
+ "GF": {
+ "name": "Kuiana fakafalanisē"
+ },
+ "CW": {
+ "name": "Kulasao"
+ },
+ "GL": {
+ "name": "Kulinilani"
+ },
+ "HR": {
+ "name": "Kuloisia"
+ },
+ "LR": {
+ "name": "Laipelia"
+ },
+ "LU": {
+ "name": "Lakisimipeki"
+ },
+ "LV": {
+ "name": "Lativia"
+ },
+ "LA": {
+ "name": "Lau"
+ },
+ "LB": {
+ "name": "Lepanoni"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "RE": {
+ "name": "LÄ“unioni"
+ },
+ "LI": {
+ "name": "Likitenisiteini"
+ },
+ "CF": {
+ "name": "Lipapilika ʻAfilika Lotoloto"
+ },
+ "CZ": {
+ "name": "Lipapilika Seki"
+ },
+ "DO": {
+ "name": "Lipapilika Tominika"
+ },
+ "LY": {
+ "name": "LÄ«pia"
+ },
+ "LT": {
+ "name": "Lituania"
+ },
+ "RO": {
+ "name": "Lomēnia"
+ },
+ "RW": {
+ "name": "LuanitÄ"
+ },
+ "RU": {
+ "name": "LÅ«sia"
+ },
+ "YT": {
+ "name": "Maiote"
+ },
+ "MO": {
+ "name": "Makau SAR Siaina"
+ },
+ "MV": {
+ "name": "Malativisi"
+ },
+ "MW": {
+ "name": "Malaui"
+ },
+ "MY": {
+ "name": "Malēsia"
+ },
+ "ML": {
+ "name": "MÄli"
+ },
+ "MT": {
+ "name": "Malita"
+ },
+ "MK": {
+ "name": "MasetÅnia"
+ },
+ "CI": {
+ "name": "Matafonua ʻAivolī"
+ },
+ "MG": {
+ "name": "Matakasika"
+ },
+ "MQ": {
+ "name": "MÄteniki"
+ },
+ "MR": {
+ "name": "Maulitenia"
+ },
+ "MU": {
+ "name": "Maulitiusi"
+ },
+ "MX": {
+ "name": "Mekisikou"
+ },
+ "FM": {
+ "name": "Mikolonīsia"
+ },
+ "MS": {
+ "name": "Moʻungaselati"
+ },
+ "MA": {
+ "name": "Moloko"
+ },
+ "MD": {
+ "name": "Molotova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "MongokÅlia"
+ },
+ "ME": {
+ "name": "Monitenikalo"
+ },
+ "MZ": {
+ "name": "Mosēmipiki"
+ },
+ "AC": {
+ "name": "Motu ʻAsenisini"
+ },
+ "CX": {
+ "name": "Motu Kilisimasi"
+ },
+ "IM": {
+ "name": "Motu Mani"
+ },
+ "NF": {
+ "name": "Motu NÅfoliki"
+ },
+ "CV": {
+ "name": "Muiʻi Vēte"
+ },
+ "NG": {
+ "name": "Naisilia"
+ },
+ "NA": {
+ "name": "Namipia"
+ },
+ "NR": {
+ "name": "Naulu"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "NI": {
+ "name": "Nikalakua"
+ },
+ "NE": {
+ "name": "Nisia"
+ },
+ "NC": {
+ "name": "Niu KaletÅnia"
+ },
+ "NU": {
+ "name": "Niuē"
+ },
+ "NO": {
+ "name": "Noauē"
+ },
+ "NZ": {
+ "name": "Nuʻusila"
+ },
+ "BS": {
+ "name": "Pahama"
+ },
+ "PK": {
+ "name": "PÄkisitani"
+ },
+ "PY": {
+ "name": "Palakuai"
+ },
+ "BR": {
+ "name": "PalÄsili"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "BH": {
+ "name": "Paleini"
+ },
+ "PA": {
+ "name": "PanamÄ"
+ },
+ "BB": {
+ "name": "PÄpeitosi"
+ },
+ "PG": {
+ "name": "Papuaniukini"
+ },
+ "BF": {
+ "name": "Pekano Faso"
+ },
+ "BY": {
+ "name": "Pelalusi"
+ },
+ "BE": {
+ "name": "Pelesiume"
+ },
+ "BZ": {
+ "name": "Pelise"
+ },
+ "PE": {
+ "name": "Pelū"
+ },
+ "MM": {
+ "name": "Pema"
+ },
+ "BM": {
+ "name": "PÄ“muta"
+ },
+ "BD": {
+ "name": "PengilÄtesi"
+ },
+ "BJ": {
+ "name": "Penini"
+ },
+ "GB": {
+ "name": "PilitÄnia"
+ },
+ "PL": {
+ "name": "Polani"
+ },
+ "PF": {
+ "name": "Polinisia fakafalanisē"
+ },
+ "BO": {
+ "name": "Polīvia"
+ },
+ "BA": {
+ "name": "Posinia mo HesikÅvina"
+ },
+ "BW": {
+ "name": "Potisiuana"
+ },
+ "IO": {
+ "name": "Potu fonua moana Ê»Initia fakapilitÄnia"
+ },
+ "TF": {
+ "name": "Potu fonua tonga fakafalanisē"
+ },
+ "PS": {
+ "name": "Potu Palesitaine"
+ },
+ "PT": {
+ "name": "Potukali"
+ },
+ "PR": {
+ "name": "Pueto Liko"
+ },
+ "US": {
+ "name": "Puleʻanga fakatahataha ʻAmelika"
+ },
+ "BG": {
+ "name": "Pulukalia"
+ },
+ "BN": {
+ "name": "Pulunei"
+ },
+ "BI": {
+ "name": "Puluniti"
+ },
+ "BT": {
+ "name": "PÅ«tani"
+ },
+ "SH": {
+ "name": "SÄ Helena"
+ },
+ "KN": {
+ "name": "SÄ Kitisi mo Nevisi"
+ },
+ "LC": {
+ "name": "SÄ LÅ«sia"
+ },
+ "SM": {
+ "name": "SÄ Malino"
+ },
+ "MF": {
+ "name": "SÄ MÄtini (fakafalanisÄ“)"
+ },
+ "SX": {
+ "name": "SÄ MÄtini (fakahÅlani)"
+ },
+ "BL": {
+ "name": "SÄ PatÄ“lemi"
+ },
+ "PM": {
+ "name": "SÄ Piea mo Mikeloni"
+ },
+ "VC": {
+ "name": "SÄ Viniseni mo Kulenatini"
+ },
+ "EH": {
+ "name": "Sahala fakahihifo"
+ },
+ "CY": {
+ "name": "Saipalesi"
+ },
+ "JM": {
+ "name": "Samaika"
+ },
+ "ST": {
+ "name": "Sao Tomē mo Pilinisipe"
+ },
+ "TD": {
+ "name": "SÄti"
+ },
+ "SA": {
+ "name": "Saute ʻAlepea"
+ },
+ "JE": {
+ "name": "Selusī"
+ },
+ "ZM": {
+ "name": "Semipia"
+ },
+ "SN": {
+ "name": "Senekalo"
+ },
+ "GE": {
+ "name": "SeÅsia"
+ },
+ "RS": {
+ "name": "SÄ“pia"
+ },
+ "CN": {
+ "name": "Siaina"
+ },
+ "DE": {
+ "name": "Siamane"
+ },
+ "JP": {
+ "name": "Siapani"
+ },
+ "SL": {
+ "name": "Siela Leone"
+ },
+ "LK": {
+ "name": "SÄ«langikÄ"
+ },
+ "CL": {
+ "name": "Sili"
+ },
+ "SY": {
+ "name": "SÄ«lia"
+ },
+ "SK": {
+ "name": "SilÅvakia"
+ },
+ "SI": {
+ "name": "SilÅvenia"
+ },
+ "ZW": {
+ "name": "Simipapuei"
+ },
+ "SG": {
+ "name": "Singapoa"
+ },
+ "GI": {
+ "name": "SipalÄlitÄ"
+ },
+ "ES": {
+ "name": "Sipeini"
+ },
+ "DJ": {
+ "name": "Siputi"
+ },
+ "EA": {
+ "name": "Siuta mo Melila"
+ },
+ "SJ": {
+ "name": "SivolopÄti mo Sani Maieni"
+ },
+ "JO": {
+ "name": "Soatane"
+ },
+ "SO": {
+ "name": "SÅmalia"
+ },
+ "SZ": {
+ "name": "Suasilani"
+ },
+ "SE": {
+ "name": "Suēteni"
+ },
+ "CH": {
+ "name": "Suisilani"
+ },
+ "SR": {
+ "name": "Suliname"
+ },
+ "SS": {
+ "name": "SÅ«tani fakatonga"
+ },
+ "SD": {
+ "name": "SÅ«teni"
+ },
+ "TH": {
+ "name": "Tailani"
+ },
+ "TW": {
+ "name": "Taiuani"
+ },
+ "TJ": {
+ "name": "Tasikitani"
+ },
+ "DK": {
+ "name": "Tenimaʻake"
+ },
+ "TZ": {
+ "name": "TenisÄnia"
+ },
+ "DG": {
+ "name": "Tieko KÄsia"
+ },
+ "TT": {
+ "name": "Tilinitati mo Topako"
+ },
+ "TL": {
+ "name": "Timoa Hahake"
+ },
+ "TR": {
+ "name": "Toake"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TG": {
+ "name": "Toko"
+ },
+ "DM": {
+ "name": "Tominika"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TM": {
+ "name": "TÅ«kimenisitani"
+ },
+ "TA": {
+ "name": "Tulisiteni ta Kunuha"
+ },
+ "TN": {
+ "name": "Tunīsia"
+ },
+ "TV": {
+ "name": "TÅ«valu"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venesuela"
+ },
+ "VN": {
+ "name": "Vietinami"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/tr.json b/library/intl/resources/country/tr.json
new file mode 100644
index 000000000..1db15e74b
--- /dev/null
+++ b/library/intl/resources/country/tr.json
@@ -0,0 +1,761 @@
+{
+ "US": {
+ "name": "ABD"
+ },
+ "UM": {
+ "name": "ABD Uzak Adaları"
+ },
+ "VI": {
+ "name": "ABD Virjin Adaları"
+ },
+ "AF": {
+ "name": "Afganistan"
+ },
+ "AX": {
+ "name": "Åland Adaları"
+ },
+ "DE": {
+ "name": "Almanya"
+ },
+ "AS": {
+ "name": "Amerikan Samoası"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktika"
+ },
+ "AG": {
+ "name": "Antigua ve Barbuda"
+ },
+ "AR": {
+ "name": "Arjantin"
+ },
+ "AL": {
+ "name": "Arnavutluk"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Adası"
+ },
+ "AU": {
+ "name": "Avustralya"
+ },
+ "AT": {
+ "name": "Avusturya"
+ },
+ "AZ": {
+ "name": "Azerbaycan"
+ },
+ "BS": {
+ "name": "Bahamalar"
+ },
+ "BH": {
+ "name": "Bahreyn"
+ },
+ "BD": {
+ "name": "BangladeÅŸ"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "EH": {
+ "name": "Batı Sahara"
+ },
+ "BE": {
+ "name": "Belçika"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BY": {
+ "name": "Beyaz Rusya"
+ },
+ "AE": {
+ "name": "BirleÅŸik Arap Emirlikleri"
+ },
+ "GB": {
+ "name": "Birleşik Krallık"
+ },
+ "BO": {
+ "name": "Bolivya"
+ },
+ "BA": {
+ "name": "Bosna Hersek"
+ },
+ "BW": {
+ "name": "Botsvana"
+ },
+ "BR": {
+ "name": "Brezilya"
+ },
+ "IO": {
+ "name": "Britanya Hint Okyanusu Toprakları"
+ },
+ "VG": {
+ "name": "Britanya Virjin Adaları"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgaristan"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butan"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "KY": {
+ "name": "Cayman Adaları"
+ },
+ "GI": {
+ "name": "Cebelitarık"
+ },
+ "DZ": {
+ "name": "Cezayir"
+ },
+ "CX": {
+ "name": "Christmas Adası"
+ },
+ "DJ": {
+ "name": "Cibuti"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Adaları"
+ },
+ "CK": {
+ "name": "Cook Adaları"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "TD": {
+ "name": "Çad"
+ },
+ "CZ": {
+ "name": "Çek Cumhuriyeti"
+ },
+ "CN": {
+ "name": "Çin"
+ },
+ "HK": {
+ "name": "Çin Hong Kong ÖYB"
+ },
+ "MO": {
+ "name": "Çin Makao ÖYB"
+ },
+ "DK": {
+ "name": "Danimarka"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DO": {
+ "name": "Dominik Cumhuriyeti"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekvador"
+ },
+ "GQ": {
+ "name": "Ekvator Ginesi"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "ID": {
+ "name": "Endonezya"
+ },
+ "ER": {
+ "name": "Eritre"
+ },
+ "AM": {
+ "name": "Ermenistan"
+ },
+ "EE": {
+ "name": "Estonya"
+ },
+ "ET": {
+ "name": "Etiyopya"
+ },
+ "FK": {
+ "name": "Falkland Adaları"
+ },
+ "FO": {
+ "name": "Faroe Adaları"
+ },
+ "MA": {
+ "name": "Fas"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "CI": {
+ "name": "FildiÅŸi Sahili"
+ },
+ "PH": {
+ "name": "Filipinler"
+ },
+ "PS": {
+ "name": "Filistin Bölgeleri"
+ },
+ "FI": {
+ "name": "Finlandiya"
+ },
+ "FR": {
+ "name": "Fransa"
+ },
+ "GF": {
+ "name": "Fransız Guyanası"
+ },
+ "TF": {
+ "name": "Fransız Güney Toprakları"
+ },
+ "PF": {
+ "name": "Fransız Polinezyası"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambiya"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Gine-Bissau"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grönland"
+ },
+ "GP": {
+ "name": "Guadalupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "ZA": {
+ "name": "Güney Afrika"
+ },
+ "GS": {
+ "name": "Güney Georgia ve Güney Sandwich Adaları"
+ },
+ "CY": {
+ "name": "Güney Kıbrıs Rum Kesimi"
+ },
+ "KR": {
+ "name": "Güney Kore"
+ },
+ "SS": {
+ "name": "Güney Sudan"
+ },
+ "GE": {
+ "name": "Gürcistan"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "HR": {
+ "name": "Hırvatistan"
+ },
+ "IN": {
+ "name": "Hindistan"
+ },
+ "NL": {
+ "name": "Hollanda"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Ä°ran"
+ },
+ "IE": {
+ "name": "Ä°rlanda"
+ },
+ "ES": {
+ "name": "Ä°spanya"
+ },
+ "IL": {
+ "name": "Ä°srail"
+ },
+ "SE": {
+ "name": "İsveç"
+ },
+ "CH": {
+ "name": "İsviçre"
+ },
+ "IT": {
+ "name": "Ä°talya"
+ },
+ "IS": {
+ "name": "Ä°zlanda"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "JP": {
+ "name": "Japonya"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "KH": {
+ "name": "Kamboçya"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanarya Adaları"
+ },
+ "ME": {
+ "name": "KaradaÄŸ"
+ },
+ "BQ": {
+ "name": "Karayip Hollanda"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KZ": {
+ "name": "Kazakistan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KG": {
+ "name": "Kırgızistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CO": {
+ "name": "Kolombiya"
+ },
+ "KM": {
+ "name": "Komorlar"
+ },
+ "CG": {
+ "name": "Kongo - Brazavil"
+ },
+ "CD": {
+ "name": "Kongo - KinÅŸasa"
+ },
+ "XK": {
+ "name": "Kosova"
+ },
+ "CR": {
+ "name": "Kosta Rika"
+ },
+ "KW": {
+ "name": "Kuveyt"
+ },
+ "KP": {
+ "name": "Kuzey Kore"
+ },
+ "MP": {
+ "name": "Kuzey Mariana Adaları"
+ },
+ "CU": {
+ "name": "Küba"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LV": {
+ "name": "Letonya"
+ },
+ "LR": {
+ "name": "Liberya"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Litvanya"
+ },
+ "LB": {
+ "name": "Lübnan"
+ },
+ "LU": {
+ "name": "Lüksemburg"
+ },
+ "HU": {
+ "name": "Macaristan"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MK": {
+ "name": "Makedonya"
+ },
+ "MW": {
+ "name": "Malavi"
+ },
+ "MV": {
+ "name": "Maldivler"
+ },
+ "MY": {
+ "name": "Malezya"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "IM": {
+ "name": "Man Adası"
+ },
+ "MH": {
+ "name": "Marshall Adaları"
+ },
+ "MQ": {
+ "name": "Martinik"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksika"
+ },
+ "EG": {
+ "name": "Mısır"
+ },
+ "FM": {
+ "name": "Mikronezya"
+ },
+ "MN": {
+ "name": "MoÄŸolistan"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MR": {
+ "name": "Moritanya"
+ },
+ "MZ": {
+ "name": "Mozambik"
+ },
+ "MM": {
+ "name": "Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "Namibya"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NE": {
+ "name": "Nijer"
+ },
+ "NG": {
+ "name": "Nijerya"
+ },
+ "NI": {
+ "name": "Nikaragua"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NF": {
+ "name": "Norfolk Adası"
+ },
+ "NO": {
+ "name": "Norveç"
+ },
+ "CF": {
+ "name": "Orta Afrika Cumhuriyeti"
+ },
+ "UZ": {
+ "name": "Özbekistan"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Yeni Gine"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitcairn Adaları"
+ },
+ "PL": {
+ "name": "Polonya"
+ },
+ "PT": {
+ "name": "Portekiz"
+ },
+ "PR": {
+ "name": "Porto Riko"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romanya"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RU": {
+ "name": "Rusya"
+ },
+ "BL": {
+ "name": "Saint Barthelemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts ve Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre ve Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vincent ve Grenadinler"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé ve Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "EA": {
+ "name": "Septe ve Melilla"
+ },
+ "SC": {
+ "name": "SeyÅŸeller"
+ },
+ "RS": {
+ "name": "Sırbistan"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovakya"
+ },
+ "SI": {
+ "name": "Slovenya"
+ },
+ "SB": {
+ "name": "Solomon Adaları"
+ },
+ "SO": {
+ "name": "Somali"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SY": {
+ "name": "Suriye"
+ },
+ "SA": {
+ "name": "Suudi Arabistan"
+ },
+ "SJ": {
+ "name": "Svalbard ve Jan Mayen Adaları"
+ },
+ "SZ": {
+ "name": "Svaziland"
+ },
+ "CL": {
+ "name": "Åžili"
+ },
+ "TJ": {
+ "name": "Tacikistan"
+ },
+ "TZ": {
+ "name": "Tanzanya"
+ },
+ "TH": {
+ "name": "Tayland"
+ },
+ "TW": {
+ "name": "Tayvan"
+ },
+ "TL": {
+ "name": "Timor-Leste"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad ve Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunus"
+ },
+ "TC": {
+ "name": "Turks ve Caicos Adaları"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "TR": {
+ "name": "Türkiye"
+ },
+ "TM": {
+ "name": "Türkmenistan"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukrayna"
+ },
+ "OM": {
+ "name": "Umman"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "JO": {
+ "name": "Ürdün"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikan"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis ve Futuna Adaları"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "NC": {
+ "name": "Yeni Kaledonya"
+ },
+ "NZ": {
+ "name": "Yeni Zelanda"
+ },
+ "GR": {
+ "name": "Yunanistan"
+ },
+ "ZM": {
+ "name": "Zambiya"
+ },
+ "ZW": {
+ "name": "Zimbabve"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/twq.json b/library/intl/resources/country/twq.json
new file mode 100644
index 000000000..7d2210638
--- /dev/null
+++ b/library/intl/resources/country/twq.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afgaanistan"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albaani"
+ },
+ "GB": {
+ "name": "Albaasalaama Marganta"
+ },
+ "DE": {
+ "name": "Almaaɲe"
+ },
+ "DZ": {
+ "name": "Alžeeri"
+ },
+ "VI": {
+ "name": "Ameerik Virgin Gungey"
+ },
+ "US": {
+ "name": "Ameriki Laabu Margantey"
+ },
+ "AS": {
+ "name": "Ameriki Samoa"
+ },
+ "AD": {
+ "name": "Andoora"
+ },
+ "AI": {
+ "name": "Angiiya"
+ },
+ "AO": {
+ "name": "Angoola"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua nda Barbuuda"
+ },
+ "AR": {
+ "name": "Argentine"
+ },
+ "AM": {
+ "name": "Armeeni"
+ },
+ "AW": {
+ "name": "Aruuba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "IS": {
+ "name": "Ayseland"
+ },
+ "AZ": {
+ "name": "Azerbaayijaŋ"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahareen"
+ },
+ "BD": {
+ "name": "Bangladeši"
+ },
+ "BB": {
+ "name": "Barbaados"
+ },
+ "BE": {
+ "name": "Belgiiki"
+ },
+ "BZ": {
+ "name": "Beliizi"
+ },
+ "BJ": {
+ "name": "Beniŋ"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BY": {
+ "name": "Biloriši"
+ },
+ "BO": {
+ "name": "Boolivi"
+ },
+ "BA": {
+ "name": "Bosni nda Herzegovine"
+ },
+ "BW": {
+ "name": "Botswaana"
+ },
+ "BR": {
+ "name": "Breezil"
+ },
+ "IO": {
+ "name": "Britiši Indu teekoo laama"
+ },
+ "VG": {
+ "name": "Britiši Virgin gungey"
+ },
+ "BN": {
+ "name": "Bruunee"
+ },
+ "BG": {
+ "name": "Bulgaari"
+ },
+ "BF": {
+ "name": "Burkina faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Buutaŋ"
+ },
+ "TD": {
+ "name": "Caadu"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "CZ": {
+ "name": "Cek labo"
+ },
+ "CF": {
+ "name": "Centraafriki koyra"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danemark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Doominiki"
+ },
+ "DO": {
+ "name": "Doominiki laboo"
+ },
+ "ET": {
+ "name": "Ecioopi"
+ },
+ "EC": {
+ "name": "Ekwateer"
+ },
+ "ER": {
+ "name": "Eritree"
+ },
+ "ES": {
+ "name": "Espaaɲe"
+ },
+ "EE": {
+ "name": "Estooni"
+ },
+ "FR": {
+ "name": "Faransi"
+ },
+ "GF": {
+ "name": "Faransi Guyaan"
+ },
+ "PF": {
+ "name": "Faransi Polineezi"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipine"
+ },
+ "FI": {
+ "name": "Finlandu"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaabon"
+ },
+ "GH": {
+ "name": "Gaana"
+ },
+ "GM": {
+ "name": "Gambi"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Gine-Bisso"
+ },
+ "GQ": {
+ "name": "Ginee Ekwatorial"
+ },
+ "GE": {
+ "name": "Gorgi"
+ },
+ "GR": {
+ "name": "Greece"
+ },
+ "GD": {
+ "name": "Grenaada"
+ },
+ "GL": {
+ "name": "Grinland"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyaane"
+ },
+ "GP": {
+ "name": "Gwadeluup"
+ },
+ "GT": {
+ "name": "Gwatemaala"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ZA": {
+ "name": "Hawsa Afriki Laboo"
+ },
+ "NL": {
+ "name": "Hollandu"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungaari"
+ },
+ "ID": {
+ "name": "Indoneezi"
+ },
+ "IN": {
+ "name": "Indu laboo"
+ },
+ "IQ": {
+ "name": "Iraak"
+ },
+ "IR": {
+ "name": "Iraan"
+ },
+ "RU": {
+ "name": "Iriši laboo"
+ },
+ "IE": {
+ "name": "Irlandu"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israyel"
+ },
+ "IT": {
+ "name": "Itaali"
+ },
+ "JP": {
+ "name": "Jaapoŋ"
+ },
+ "JM": {
+ "name": "Jamaayik"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "DJ": {
+ "name": "Jibuuti"
+ },
+ "NC": {
+ "name": "Kaaledooni Taagaa"
+ },
+ "KZ": {
+ "name": "Kaazakstan"
+ },
+ "FK": {
+ "name": "Kalkan gungey"
+ },
+ "KH": {
+ "name": "kamboogi"
+ },
+ "CM": {
+ "name": "Kameruun"
+ },
+ "CA": {
+ "name": "Kanaada"
+ },
+ "CV": {
+ "name": "Kapuver gungey"
+ },
+ "QA": {
+ "name": "Kataar"
+ },
+ "KY": {
+ "name": "Kayman gungey"
+ },
+ "KE": {
+ "name": "Keeniya"
+ },
+ "KI": {
+ "name": "Kiribaati"
+ },
+ "CO": {
+ "name": "Kolombi"
+ },
+ "KM": {
+ "name": "Komoor"
+ },
+ "CG": {
+ "name": "Kongoo"
+ },
+ "CD": {
+ "name": "Kongoo demookaratiki laboo"
+ },
+ "KP": {
+ "name": "Kooree, Gurma"
+ },
+ "KR": {
+ "name": "Kooree, Hawsa"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kosta rika"
+ },
+ "HR": {
+ "name": "Krwaasi"
+ },
+ "CI": {
+ "name": "Kudwar"
+ },
+ "CU": {
+ "name": "Kuuba"
+ },
+ "CK": {
+ "name": "Kuuk gungey"
+ },
+ "KW": {
+ "name": "Kuweet"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "AE": {
+ "name": "Laaraw Imaarawey Margantey"
+ },
+ "LA": {
+ "name": "Laawos"
+ },
+ "LS": {
+ "name": "Leesoto"
+ },
+ "LV": {
+ "name": "Letooni"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LY": {
+ "name": "Liibi"
+ },
+ "LT": {
+ "name": "Lituaani"
+ },
+ "LB": {
+ "name": "Lubnaan"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MK": {
+ "name": "Maacedooni"
+ },
+ "ML": {
+ "name": "Maali"
+ },
+ "MA": {
+ "name": "Maarok"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malaawi"
+ },
+ "MV": {
+ "name": "Maldiivu"
+ },
+ "MY": {
+ "name": "Maleezi"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MP": {
+ "name": "Mariana Gurma Gungey"
+ },
+ "MH": {
+ "name": "Maršal gungey"
+ },
+ "MQ": {
+ "name": "Martiniiki"
+ },
+ "MM": {
+ "name": "Maynamar"
+ },
+ "YT": {
+ "name": "Mayooti"
+ },
+ "MX": {
+ "name": "Mexiki"
+ },
+ "FM": {
+ "name": "Mikronezi"
+ },
+ "EG": {
+ "name": "Misra"
+ },
+ "MD": {
+ "name": "Moldovi"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongooli"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MU": {
+ "name": "Mooris gungey"
+ },
+ "MR": {
+ "name": "Mooritaani"
+ },
+ "MZ": {
+ "name": "Mozambik"
+ },
+ "NG": {
+ "name": "Naajiriia"
+ },
+ "NA": {
+ "name": "Naamibi"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Neepal"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NE": {
+ "name": "Nižer"
+ },
+ "NF": {
+ "name": "Norfolk Gungoo"
+ },
+ "NO": {
+ "name": "Norveej"
+ },
+ "OM": {
+ "name": "Omaan"
+ },
+ "AU": {
+ "name": "Ostraali"
+ },
+ "AT": {
+ "name": "Otriši"
+ },
+ "PK": {
+ "name": "Paakistan"
+ },
+ "PS": {
+ "name": "Palestine Dangay nda Gaaza"
+ },
+ "PW": {
+ "name": "Palu"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Ginee Taaga"
+ },
+ "PY": {
+ "name": "Paraguwey"
+ },
+ "PE": {
+ "name": "Peeru"
+ },
+ "PN": {
+ "name": "Pitikarin"
+ },
+ "PL": {
+ "name": "Poloɲe"
+ },
+ "PR": {
+ "name": "Porto Riko"
+ },
+ "PT": {
+ "name": "Portugaal"
+ },
+ "RE": {
+ "name": "Reenioŋ"
+ },
+ "RO": {
+ "name": "Rumaani"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SV": {
+ "name": "Salvador laboo"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "Sao Tome nda Prinsipe"
+ },
+ "SA": {
+ "name": "Saudiya"
+ },
+ "SL": {
+ "name": "Seera Leon"
+ },
+ "SC": {
+ "name": "Seešel"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "SH": {
+ "name": "Seŋ Helena"
+ },
+ "KN": {
+ "name": "Seŋ Kitts nda Nevis"
+ },
+ "LC": {
+ "name": "Seŋ Lussia"
+ },
+ "PM": {
+ "name": "Seŋ Piyer nda Mikelon"
+ },
+ "VC": {
+ "name": "Seŋvinsaŋ nda Grenadine"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "CL": {
+ "name": "Å iili"
+ },
+ "CN": {
+ "name": "Å iin"
+ },
+ "CY": {
+ "name": "Å iipur"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slovaaki"
+ },
+ "SI": {
+ "name": "Sloveeni"
+ },
+ "SB": {
+ "name": "Solomon Gungey"
+ },
+ "SO": {
+ "name": "Somaali"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "LK": {
+ "name": "Srilanka"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SR": {
+ "name": "Surinaam"
+ },
+ "SD": {
+ "name": "Suudaŋ"
+ },
+ "SY": {
+ "name": "Suuria"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SE": {
+ "name": "Sweede"
+ },
+ "CH": {
+ "name": "Swisu"
+ },
+ "TH": {
+ "name": "Taayiland"
+ },
+ "TW": {
+ "name": "Taayiwan"
+ },
+ "TJ": {
+ "name": "Taažikistan"
+ },
+ "TZ": {
+ "name": "Tanzaani"
+ },
+ "TL": {
+ "name": "Timoor hawsa"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad nda Tobaago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunizi"
+ },
+ "TC": {
+ "name": "Turk nda Kayikos Gungey"
+ },
+ "TR": {
+ "name": "Turki"
+ },
+ "TM": {
+ "name": "Turkmenistaŋ"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukreen"
+ },
+ "JO": {
+ "name": "Urdun"
+ },
+ "UY": {
+ "name": "Uruguwey"
+ },
+ "UZ": {
+ "name": "Uzbeekistan"
+ },
+ "VA": {
+ "name": "Vaatikan Laama"
+ },
+ "VU": {
+ "name": "Vanautu"
+ },
+ "VE": {
+ "name": "Veneezuyeela"
+ },
+ "VN": {
+ "name": "Vietnaam"
+ },
+ "WF": {
+ "name": "Wallis nda Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yaman"
+ },
+ "ZM": {
+ "name": "Zambi"
+ },
+ "NZ": {
+ "name": "Zeelandu Taaga"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/tzm.json b/library/intl/resources/country/tzm.json
new file mode 100644
index 000000000..edefc2295
--- /dev/null
+++ b/library/intl/resources/country/tzm.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afɣanistan"
+ },
+ "PS": {
+ "name": "AgemmaḠUgut d Ɣazza Ifilisṭiniyen"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albanya"
+ },
+ "DE": {
+ "name": "Almanya"
+ },
+ "IO": {
+ "name": "Amur n Agaraw Uhindi Ubá¹›iá¹­ani"
+ },
+ "AD": {
+ "name": "Aná¸urra"
+ },
+ "AO": {
+ "name": "Angula"
+ },
+ "AI": {
+ "name": "Angwilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigwa d Barbuda"
+ },
+ "AR": {
+ "name": "Arjuntin"
+ },
+ "AM": {
+ "name": "Arminya"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "VA": {
+ "name": "Awank iɣrem n Vatikan"
+ },
+ "AZ": {
+ "name": "Azerbiǧan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Baḥrayn"
+ },
+ "BD": {
+ "name": "Bangladic"
+ },
+ "BB": {
+ "name": "Barbadus"
+ },
+ "BG": {
+ "name": "Belɣarya"
+ },
+ "BE": {
+ "name": "Beljika"
+ },
+ "BY": {
+ "name": "Bilarusya"
+ },
+ "BZ": {
+ "name": "Biliz"
+ },
+ "BJ": {
+ "name": "Binin"
+ },
+ "BM": {
+ "name": "Birmuda"
+ },
+ "BR": {
+ "name": "Bá¹›azil"
+ },
+ "BN": {
+ "name": "Brunay"
+ },
+ "BO": {
+ "name": "Bulivya"
+ },
+ "BF": {
+ "name": "Burkina Fasu"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BA": {
+ "name": "Busna-d-Hirsik"
+ },
+ "BT": {
+ "name": "Buá¹­an"
+ },
+ "BW": {
+ "name": "Butswana"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "CL": {
+ "name": "Ccili"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danmark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Ḍuminika"
+ },
+ "DZ": {
+ "name": "Dzayer"
+ },
+ "IQ": {
+ "name": "Æiraq"
+ },
+ "OM": {
+ "name": "Æumman"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filippin"
+ },
+ "FI": {
+ "name": "Finlaná¸a"
+ },
+ "FR": {
+ "name": "Fá¹›ansa"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabun"
+ },
+ "GM": {
+ "name": "Gambya"
+ },
+ "DJ": {
+ "name": "Ǧibuti"
+ },
+ "GD": {
+ "name": "Grinada"
+ },
+ "GL": {
+ "name": "Grinlaná¸a"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GF": {
+ "name": "Guyana Tafransist"
+ },
+ "GP": {
+ "name": "Gwadalup"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatimala"
+ },
+ "GH": {
+ "name": "Ɣana"
+ },
+ "GN": {
+ "name": "Ɣinya"
+ },
+ "GQ": {
+ "name": "Ɣinya Tikwaṭur it"
+ },
+ "GW": {
+ "name": "Ɣinya-Bissaw"
+ },
+ "HT": {
+ "name": "Hayti"
+ },
+ "HU": {
+ "name": "Henɣarya"
+ },
+ "IN": {
+ "name": "Hind"
+ },
+ "HN": {
+ "name": "Hinduras"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "NL": {
+ "name": "Hulaná¸a"
+ },
+ "EC": {
+ "name": "Ikwaá¸ur"
+ },
+ "AE": {
+ "name": "Imarat Tiεrabin Tidduklin"
+ },
+ "ID": {
+ "name": "Indunizya"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "ER": {
+ "name": "Iritrya"
+ },
+ "IE": {
+ "name": "Irlaná¸a"
+ },
+ "IS": {
+ "name": "Islaná¸a"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israeil"
+ },
+ "EE": {
+ "name": "Isá¹­unya"
+ },
+ "IT": {
+ "name": "Iá¹­alya"
+ },
+ "ET": {
+ "name": "Ityupya"
+ },
+ "US": {
+ "name": "Iwunak Idduklen n Amirika"
+ },
+ "JM": {
+ "name": "Jamayka"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibralá¹­ar"
+ },
+ "JP": {
+ "name": "Jjappun"
+ },
+ "GE": {
+ "name": "Jyurjya"
+ },
+ "NC": {
+ "name": "kalidunya Tamaynut"
+ },
+ "KH": {
+ "name": "Kambudj"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "KZ": {
+ "name": "Kazaxistan"
+ },
+ "KE": {
+ "name": "Kinya"
+ },
+ "KG": {
+ "name": "Kirɣistan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "HR": {
+ "name": "Krwatya"
+ },
+ "CU": {
+ "name": "kuba"
+ },
+ "CO": {
+ "name": "Kulumbya"
+ },
+ "CG": {
+ "name": "Kungu"
+ },
+ "KP": {
+ "name": "Kurya Tugafat"
+ },
+ "KR": {
+ "name": "Kurya Tunẓult"
+ },
+ "CR": {
+ "name": "Kusá¹­a Rika"
+ },
+ "KW": {
+ "name": "Kuwwayt"
+ },
+ "LA": {
+ "name": "Laws"
+ },
+ "LR": {
+ "name": "Libirya"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Lictencá¹­ayn"
+ },
+ "LU": {
+ "name": "Liksumburg"
+ },
+ "LS": {
+ "name": "Lisuá¹­u"
+ },
+ "LV": {
+ "name": "Liá¹­á¹­unya"
+ },
+ "LT": {
+ "name": "Litwanya"
+ },
+ "LB": {
+ "name": "Lubnan"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madaɣacqar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MV": {
+ "name": "Maldiv"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MY": {
+ "name": "Malizya"
+ },
+ "MT": {
+ "name": "Malá¹­a"
+ },
+ "MN": {
+ "name": "Manɣulya"
+ },
+ "MK": {
+ "name": "Maqdunya"
+ },
+ "MQ": {
+ "name": "Martinik"
+ },
+ "YT": {
+ "name": "Mayuá¹­"
+ },
+ "MA": {
+ "name": "Meṛṛuk"
+ },
+ "FM": {
+ "name": "Mikrunizya"
+ },
+ "MX": {
+ "name": "Miksik"
+ },
+ "EG": {
+ "name": "Miá¹£r"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MD": {
+ "name": "Mulá¸avya"
+ },
+ "MC": {
+ "name": "Munaku"
+ },
+ "MS": {
+ "name": "Muntsirra"
+ },
+ "MU": {
+ "name": "Muris"
+ },
+ "MR": {
+ "name": "Muritanya"
+ },
+ "MZ": {
+ "name": "Muzambiq"
+ },
+ "MM": {
+ "name": "Myanmar"
+ },
+ "NA": {
+ "name": "Namibya"
+ },
+ "NR": {
+ "name": "Nawru"
+ },
+ "NG": {
+ "name": "Nijiria"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NP": {
+ "name": "Nippal"
+ },
+ "NU": {
+ "name": "Niwi"
+ },
+ "NE": {
+ "name": "Nnijer"
+ },
+ "NO": {
+ "name": "Nnurwij"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palu"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papwa Ɣinya Tamaynut"
+ },
+ "PY": {
+ "name": "Paragway"
+ },
+ "PE": {
+ "name": "Piru"
+ },
+ "PN": {
+ "name": "Pitkirn"
+ },
+ "PF": {
+ "name": "Pulinizya Tafransist"
+ },
+ "PL": {
+ "name": "Pulunya"
+ },
+ "PT": {
+ "name": "Purtuɣal"
+ },
+ "PR": {
+ "name": "Purturiku"
+ },
+ "QA": {
+ "name": "Qaá¹­ar"
+ },
+ "CY": {
+ "name": "Qubrus"
+ },
+ "KM": {
+ "name": "Qumur"
+ },
+ "RE": {
+ "name": "Riyyunyun"
+ },
+ "RO": {
+ "name": "Ṛumanya"
+ },
+ "RU": {
+ "name": "Rusya"
+ },
+ "RW": {
+ "name": "Ruwwaná¸a"
+ },
+ "SV": {
+ "name": "Salvaá¸ur"
+ },
+ "WS": {
+ "name": "Samwa"
+ },
+ "AS": {
+ "name": "Samwa Imirikaniyyin"
+ },
+ "SG": {
+ "name": "Sanɣafura"
+ },
+ "SM": {
+ "name": "Sanmarinu"
+ },
+ "SH": {
+ "name": "Santehilin"
+ },
+ "KN": {
+ "name": "Santekits d Nivis"
+ },
+ "LC": {
+ "name": "Santelusya"
+ },
+ "PM": {
+ "name": "Santepyir d Mikelun"
+ },
+ "VC": {
+ "name": "Santevinsent d Grinadin"
+ },
+ "ST": {
+ "name": "Sawá¹­umi d Prinsip"
+ },
+ "ES": {
+ "name": "Sbanya"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SL": {
+ "name": "Siralyun"
+ },
+ "SK": {
+ "name": "Sluvakya"
+ },
+ "SI": {
+ "name": "Sluvinya"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "LK": {
+ "name": "Srilanka"
+ },
+ "SA": {
+ "name": "Ssaεudiyya Taεrabt"
+ },
+ "SE": {
+ "name": "Ssewwid"
+ },
+ "SC": {
+ "name": "Ssicil"
+ },
+ "CN": {
+ "name": "Ṣṣin"
+ },
+ "SN": {
+ "name": "Ssiniɣal"
+ },
+ "SD": {
+ "name": "Ssudan"
+ },
+ "SO": {
+ "name": "Ṣṣumal"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SY": {
+ "name": "Surya"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swazilaná¸a"
+ },
+ "CH": {
+ "name": "Swisra"
+ },
+ "ZA": {
+ "name": "Tafrikt Tunẓul"
+ },
+ "CF": {
+ "name": "Tagduda n Afrika Wammas"
+ },
+ "CZ": {
+ "name": "Tagduda n ÄŒik"
+ },
+ "DO": {
+ "name": "Tagduda n Ḍuminikan"
+ },
+ "CD": {
+ "name": "Tagduda Tadimuqraá¹­it n Kungu"
+ },
+ "GB": {
+ "name": "Tagelda Taddukelt"
+ },
+ "TJ": {
+ "name": "Ṭaǧikistan"
+ },
+ "CI": {
+ "name": "Taɣazut n Uszer"
+ },
+ "TZ": {
+ "name": "Ṭanzanya"
+ },
+ "TH": {
+ "name": "Ṭaylaná¸a"
+ },
+ "TW": {
+ "name": "Ṭaywan"
+ },
+ "TD": {
+ "name": "Tcad"
+ },
+ "VG": {
+ "name": "Tigzirin (Virgin) Tibá¹›iá¹­aniyin"
+ },
+ "FK": {
+ "name": "Tigzirin n Falkland"
+ },
+ "CV": {
+ "name": "Tigzirin n IÉ£f Uzegzaw"
+ },
+ "KY": {
+ "name": "Tigzirin n Kayman"
+ },
+ "CK": {
+ "name": "Tigzirin n Kuk"
+ },
+ "MH": {
+ "name": "Tigzirin n Marcal"
+ },
+ "MP": {
+ "name": "Tigzirin n Maryana Tugafat"
+ },
+ "SB": {
+ "name": "Tigzirin n Salumun"
+ },
+ "VI": {
+ "name": "Tigzirin n Virjin n Iwunak Yedduklen"
+ },
+ "TC": {
+ "name": "Tigzirin Turkiyyin d Tikaykusin"
+ },
+ "NF": {
+ "name": "Tigzirt Nurfulk"
+ },
+ "TL": {
+ "name": "Timur Tagmuá¹­"
+ },
+ "TT": {
+ "name": "Trinidad d Ṭubagu"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TG": {
+ "name": "Ṭṭugu"
+ },
+ "TK": {
+ "name": "Tuklu"
+ },
+ "TN": {
+ "name": "Tunes"
+ },
+ "TO": {
+ "name": "Ṭunga"
+ },
+ "TM": {
+ "name": "Turkmanistan"
+ },
+ "TR": {
+ "name": "Turkya"
+ },
+ "TV": {
+ "name": "Ṭuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "UÉ£anda"
+ },
+ "UA": {
+ "name": "Ukranya"
+ },
+ "JO": {
+ "name": "Urá¸un"
+ },
+ "UY": {
+ "name": "Urugway"
+ },
+ "AU": {
+ "name": "Usá¹­ralya"
+ },
+ "AT": {
+ "name": "Ustriyya"
+ },
+ "UZ": {
+ "name": "Uzbakistan"
+ },
+ "VU": {
+ "name": "Vanwatu"
+ },
+ "VE": {
+ "name": "Vinzwilla"
+ },
+ "VN": {
+ "name": "Viá¹­nam"
+ },
+ "WF": {
+ "name": "Walis d Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yaman"
+ },
+ "GR": {
+ "name": "Yunan"
+ },
+ "ZM": {
+ "name": "Zambya"
+ },
+ "NZ": {
+ "name": "Zilaná¸a Tamaynut"
+ },
+ "ZW": {
+ "name": "Zimbabwi"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ug.json b/library/intl/resources/country/ug.json
new file mode 100644
index 000000000..a9a86b1ce
--- /dev/null
+++ b/library/intl/resources/country/ug.json
@@ -0,0 +1,761 @@
+{
+ "AR": {
+ "name": "ئارگÛنتىنا"
+ },
+ "AW": {
+ "name": "ئارۇبا"
+ },
+ "AC": {
+ "name": "ئاسسÛنسىيون ئارىلى"
+ },
+ "AF": {
+ "name": "ئاÙغانىستان"
+ },
+ "AX": {
+ "name": "ئالاند ئاراللىرى"
+ },
+ "AL": {
+ "name": "ئالبانىيە"
+ },
+ "DZ": {
+ "name": "ئالجىرىيە"
+ },
+ "AS": {
+ "name": "ئامÛرىكا تەۋەلىكىدىكى ساموئا"
+ },
+ "UM": {
+ "name": "ئامÛرىكا تەۋەلىكىدىكى سىرتقى كىچىك ئاراللار"
+ },
+ "VI": {
+ "name": "ئامÛرىكا تەۋەلىكىدىكى ۋىرجىن تاقىم ئاراللىرى"
+ },
+ "US": {
+ "name": "ئامÛرىكا قوشما شتاتلىرى"
+ },
+ "AQ": {
+ "name": "ئانتاركتىكا"
+ },
+ "AG": {
+ "name": "ئانتىگۋا ۋە باربۇدا"
+ },
+ "AD": {
+ "name": "ئاندوررا"
+ },
+ "AO": {
+ "name": "ئانگولا"
+ },
+ "AI": {
+ "name": "ئانگۋىللا"
+ },
+ "AU": {
+ "name": "ئاۋسترالىيە"
+ },
+ "AT": {
+ "name": "ئاۋسترىيە"
+ },
+ "MO": {
+ "name": "ئاۋمÛÙ† ئالاھىدە مەمۇرىي رايونى (جۇڭگو)"
+ },
+ "AM": {
+ "name": "ئەرمÛنىيە"
+ },
+ "AE": {
+ "name": "ئەرەب بىرلەشمە خەلىپىلىكى"
+ },
+ "AZ": {
+ "name": "ئەزەربەيجان"
+ },
+ "SV": {
+ "name": "ئەل سالۋادور"
+ },
+ "GB": {
+ "name": "ئەنگلىيە پادىشاھلىقى"
+ },
+ "VG": {
+ "name": "ئەنگلىيەگە قاراشلىق ۋىرجىن ئارىلى"
+ },
+ "IO": {
+ "name": "ئەنگلىيەنىڭ ھىندى ئوكياندىكى تەۋەلىكى"
+ },
+ "CF": {
+ "name": "ئوتتۇرا ئاÙرىقا جۇمھۇرىيىتى"
+ },
+ "OM": {
+ "name": "ئومان"
+ },
+ "UZ": {
+ "name": "ئۆزبÛكىستان"
+ },
+ "UY": {
+ "name": "ئۇرۇگۋاي"
+ },
+ "UA": {
+ "name": "ئۇكرائىنا"
+ },
+ "UG": {
+ "name": "ئۇگاندا"
+ },
+ "IT": {
+ "name": "ئىتالىيە"
+ },
+ "IQ": {
+ "name": "ئىراق"
+ },
+ "IR": {
+ "name": "ئىران"
+ },
+ "IE": {
+ "name": "ئىرÛلاندىيە"
+ },
+ "ES": {
+ "name": "ئىسپانىيە"
+ },
+ "IL": {
+ "name": "ئىسرائىلىيە"
+ },
+ "IS": {
+ "name": "ئىسلاندىيە"
+ },
+ "JO": {
+ "name": "ئىيوردانىيە"
+ },
+ "ER": {
+ "name": "ئÛرىترÛÙŠÛ•"
+ },
+ "EE": {
+ "name": "ئÛستونىيە"
+ },
+ "ET": {
+ "name": "ئÛÙىيوپىيە"
+ },
+ "GQ": {
+ "name": "ئÛكۋاتور گىۋىنÛيەسى"
+ },
+ "EC": {
+ "name": "ئÛكۋادور"
+ },
+ "BB": {
+ "name": "باربادوس"
+ },
+ "BD": {
+ "name": "باڭلادىش"
+ },
+ "BS": {
+ "name": "باھاما"
+ },
+ "BH": {
+ "name": "بەھرەين"
+ },
+ "BW": {
+ "name": "بوتسۋانا"
+ },
+ "BA": {
+ "name": "بوسنىيە-Ú¯ÛرتسÛگوۋىنا"
+ },
+ "BO": {
+ "name": "بولىۋىيە"
+ },
+ "BT": {
+ "name": "بۇتان"
+ },
+ "BF": {
+ "name": "بۇركىنا-Ùاسو"
+ },
+ "BI": {
+ "name": "بۇرۇندى"
+ },
+ "BG": {
+ "name": "بۇلغارىيە"
+ },
+ "BR": {
+ "name": "بىرازىلىيە"
+ },
+ "MM": {
+ "name": "بىرما"
+ },
+ "BN": {
+ "name": "بىرۇنÛÙŠ"
+ },
+ "BM": {
+ "name": "بÛرمۇدا"
+ },
+ "BY": {
+ "name": "بÛلارۇسىيە"
+ },
+ "BE": {
+ "name": "بÛلگىيە"
+ },
+ "BZ": {
+ "name": "بÛلىز"
+ },
+ "BJ": {
+ "name": "بÛنىن"
+ },
+ "PG": {
+ "name": "پاپۇئا ÙŠÛÚ­Ù‰ گىۋىنÛيەسى"
+ },
+ "PY": {
+ "name": "پاراگۋاي"
+ },
+ "PK": {
+ "name": "پاكىستان"
+ },
+ "PW": {
+ "name": "پالاۋ"
+ },
+ "PA": {
+ "name": "پاناما"
+ },
+ "PS": {
+ "name": "پەلەستىن زÛمىنى"
+ },
+ "PT": {
+ "name": "پورتۇگالىيە"
+ },
+ "PL": {
+ "name": "پولشا"
+ },
+ "PR": {
+ "name": "پۇئÛرتو-رىكو"
+ },
+ "PN": {
+ "name": "پىتكاير ئاراللىرى"
+ },
+ "PE": {
+ "name": "Ù¾Ûرۇ"
+ },
+ "TJ": {
+ "name": "تاجىكىستان"
+ },
+ "TZ": {
+ "name": "تانزانىيە"
+ },
+ "TH": {
+ "name": "تايلاند"
+ },
+ "TA": {
+ "name": "ترىستان داكۇنھا"
+ },
+ "TW": {
+ "name": "تەيۋەن"
+ },
+ "TK": {
+ "name": "توكÛلاۋ"
+ },
+ "TG": {
+ "name": "توگو"
+ },
+ "TO": {
+ "name": "تونگا"
+ },
+ "TC": {
+ "name": "تۇركس ۋە كايكوس ئاراللىرى"
+ },
+ "TN": {
+ "name": "تۇنىس"
+ },
+ "TV": {
+ "name": "تۇۋالۇ"
+ },
+ "TM": {
+ "name": "تۈركمەنىستان"
+ },
+ "TR": {
+ "name": "تۈركىيە"
+ },
+ "TT": {
+ "name": "تىرىنىداد ۋە توباگو"
+ },
+ "GI": {
+ "name": "جەبىلتارىق"
+ },
+ "ZA": {
+ "name": "جەنۇبىي ئاÙرىقا"
+ },
+ "GS": {
+ "name": "جەنۇبىي جورجىيە ۋە جەنۇبىي ساندىۋىچ ئاراللىرى"
+ },
+ "SS": {
+ "name": "جەنۇبىي سۇدان"
+ },
+ "KR": {
+ "name": "جەنۇبىي كورىيە"
+ },
+ "CN": {
+ "name": "جۇڭگو"
+ },
+ "DJ": {
+ "name": "جىبۇتى"
+ },
+ "JE": {
+ "name": "جÛرسÛÙŠ"
+ },
+ "TD": {
+ "name": "چاد"
+ },
+ "CL": {
+ "name": "چىلى"
+ },
+ "CZ": {
+ "name": "Ú†ÛØ® جۇمھۇرىيىتى"
+ },
+ "DK": {
+ "name": "دانىيە"
+ },
+ "DM": {
+ "name": "دومىنىكا"
+ },
+ "DO": {
+ "name": "دومىنىكا جۇمھۇرىيىتى"
+ },
+ "DG": {
+ "name": "دÛÚ¯Ùˆ-گارشىيا"
+ },
+ "CX": {
+ "name": "روژدÛستۋو ئارىلى"
+ },
+ "RU": {
+ "name": "رۇسىيە"
+ },
+ "RO": {
+ "name": "رۇمىنىيە"
+ },
+ "RW": {
+ "name": "رىۋاندا"
+ },
+ "RE": {
+ "name": "رÛئونىيون"
+ },
+ "ZM": {
+ "name": "زامبىيە"
+ },
+ "ZW": {
+ "name": "زىمبابۋÛ"
+ },
+ "WS": {
+ "name": "ساموئا"
+ },
+ "ST": {
+ "name": "سان ØªÙˆÙ…Û Û‹Û• پرىنسىپÛ"
+ },
+ "SM": {
+ "name": "سان-مارىنو"
+ },
+ "SH": {
+ "name": "ساينىت Ú¾ÛÙ„Ûنا"
+ },
+ "BL": {
+ "name": "ساينىت-بارتھÛلەمي ئاراللىرى"
+ },
+ "PM": {
+ "name": "ساينىت-پىئÛر Û‹Û• مىكÛلون ئاراللىرى"
+ },
+ "KN": {
+ "name": "ساينىت-كىرىستوÙÛر Û‹Û• Ù†Ûۋىس"
+ },
+ "LC": {
+ "name": "ساينىت-لۇسىيە"
+ },
+ "MF": {
+ "name": "ساينىت-مارتÛÙ†"
+ },
+ "VC": {
+ "name": "ساينىت-ۋىنسÛنت Û‹Û• گىرÛنادىنÛس"
+ },
+ "SA": {
+ "name": "سەئۇدى ئەرەبىستان"
+ },
+ "SB": {
+ "name": "سولومون ئاراللىرى"
+ },
+ "SO": {
+ "name": "سومالى"
+ },
+ "SD": {
+ "name": "سۇدان"
+ },
+ "SR": {
+ "name": "سۇرىنام"
+ },
+ "SY": {
+ "name": "سۈرىيە"
+ },
+ "CY": {
+ "name": "سىپرۇس"
+ },
+ "LK": {
+ "name": "سىرىلانكا"
+ },
+ "SK": {
+ "name": "سىلوۋاكىيە"
+ },
+ "SI": {
+ "name": "سىلوۋÛنىيە"
+ },
+ "SX": {
+ "name": "سىنت مارتÛÙ†"
+ },
+ "SG": {
+ "name": "سىنگاپور"
+ },
+ "SJ": {
+ "name": "سىۋالبارد Û‹Û• يان-مايÛÙ† ئارىلى"
+ },
+ "SZ": {
+ "name": "سىۋÛزىلاند"
+ },
+ "RS": {
+ "name": "سÛربىيە"
+ },
+ "SL": {
+ "name": "سÛررالÛئون"
+ },
+ "SN": {
+ "name": "سÛÙ†Ûگال"
+ },
+ "EA": {
+ "name": "سÛيتا Û‹Û• Ù…Ûلىلا"
+ },
+ "SC": {
+ "name": "سÛيشÛÙ„"
+ },
+ "TL": {
+ "name": "شەرقىي تىمور"
+ },
+ "KP": {
+ "name": "شىمالىي كورىيە"
+ },
+ "MP": {
+ "name": "شىمالىي مارىيانا ئاراللىرى"
+ },
+ "CH": {
+ "name": "شىۋىتسارىيە"
+ },
+ "SE": {
+ "name": "شىۋÛتسىيە"
+ },
+ "HK": {
+ "name": "شياڭگاڭ ئالاھىدە مەمۇرىي رايونى (جۇڭگو)"
+ },
+ "EH": {
+ "name": "غەربىي ساخارا"
+ },
+ "FO": {
+ "name": "ÙائÛرو ئاراللىرى"
+ },
+ "FK": {
+ "name": "Ùالكلاند ئاراللىرى"
+ },
+ "FJ": {
+ "name": "Ùىجى"
+ },
+ "FR": {
+ "name": "Ùىرانسىيە"
+ },
+ "PF": {
+ "name": "Ùىرانسىيەگە قاراشلىق پولىنÛزىيە"
+ },
+ "TF": {
+ "name": "Ùىرانسىيەگە قاراشلىق جەنۇبتىكى زÛمىنلىرى"
+ },
+ "GF": {
+ "name": "Ùىرانسىيەگە قاراشلىق گىۋىيانا"
+ },
+ "PH": {
+ "name": "Ùىلىپپىن"
+ },
+ "FI": {
+ "name": "Ùىنلاندىيە"
+ },
+ "QA": {
+ "name": "قاتار"
+ },
+ "KZ": {
+ "name": "قازاقىستان"
+ },
+ "KG": {
+ "name": "قىرغىزىستان"
+ },
+ "BQ": {
+ "name": "كارىب دÛڭىزى گوللاندىيە"
+ },
+ "KH": {
+ "name": "كامبودژا"
+ },
+ "CM": {
+ "name": "كامÛرون"
+ },
+ "CA": {
+ "name": "كانادا"
+ },
+ "IC": {
+ "name": "كانارى ئاراللىرى"
+ },
+ "KY": {
+ "name": "كايمان ئاراللىرى"
+ },
+ "CC": {
+ "name": "كەئەلىڭ كوكۇس ئاراللىرى"
+ },
+ "CI": {
+ "name": "ÙƒÙˆØªÛ Ø¯Û Ø¦Ù‰Û‹ÙˆØ¦Ù‰Ø±"
+ },
+ "CR": {
+ "name": "كوستارىكا"
+ },
+ "XK": {
+ "name": "كوسوۋو"
+ },
+ "CO": {
+ "name": "كولومبىيە"
+ },
+ "KM": {
+ "name": "كومورو"
+ },
+ "CG": {
+ "name": "كونگو - بىراززاۋىل"
+ },
+ "CD": {
+ "name": "كونگو - كىنشاسا"
+ },
+ "CU": {
+ "name": "كۇبا"
+ },
+ "CW": {
+ "name": "كۇراسو"
+ },
+ "CK": {
+ "name": "كۇك ئاراللىرى"
+ },
+ "KW": {
+ "name": "كۇۋەيت"
+ },
+ "HR": {
+ "name": "كىرودىيە"
+ },
+ "KI": {
+ "name": "كىرىباتى"
+ },
+ "KE": {
+ "name": "ÙƒÛنىيە"
+ },
+ "GA": {
+ "name": "گابون"
+ },
+ "GM": {
+ "name": "گامبىيە"
+ },
+ "GH": {
+ "name": "گانا"
+ },
+ "NL": {
+ "name": "گوللاندىيە"
+ },
+ "GU": {
+ "name": "گۇئام"
+ },
+ "GE": {
+ "name": "گىروزىيە"
+ },
+ "GR": {
+ "name": "گىرÛتسىيە"
+ },
+ "GD": {
+ "name": "گىرÛنادا"
+ },
+ "GL": {
+ "name": "گىرÛنلاند"
+ },
+ "GT": {
+ "name": "گىۋاتÛمالا"
+ },
+ "GP": {
+ "name": "گىۋادÛÙ„Û‡Ù¾"
+ },
+ "GN": {
+ "name": "گىۋىنÛÙŠÛ•"
+ },
+ "GW": {
+ "name": "گىۋىنÛÙŠÛ•-بىسسائۇ"
+ },
+ "GY": {
+ "name": "گىۋىيانا"
+ },
+ "DE": {
+ "name": "Ú¯Ûرمانىيە"
+ },
+ "GG": {
+ "name": "Ú¯Ûرىنسى"
+ },
+ "LA": {
+ "name": "لائوس"
+ },
+ "LV": {
+ "name": "لاتۋىيە"
+ },
+ "LR": {
+ "name": "لىبÛرىيە"
+ },
+ "LT": {
+ "name": "لىتۋانىيە"
+ },
+ "LI": {
+ "name": "لىچتÛنشتÛين بەگلىكى"
+ },
+ "LB": {
+ "name": "لىۋان"
+ },
+ "LY": {
+ "name": "لىۋىيە"
+ },
+ "LU": {
+ "name": "لىيۇكسÛمبۇرگ"
+ },
+ "LS": {
+ "name": "Ù„Ûسوتو"
+ },
+ "MG": {
+ "name": "ماداغاسقار"
+ },
+ "MA": {
+ "name": "ماراكەش"
+ },
+ "MQ": {
+ "name": "مارتىنىكا"
+ },
+ "MH": {
+ "name": "مارشال ئاراللىرى"
+ },
+ "MK": {
+ "name": "ماكÛدونىيە"
+ },
+ "MW": {
+ "name": "مالاۋى"
+ },
+ "MY": {
+ "name": "مالايشىيا"
+ },
+ "MT": {
+ "name": "مالتا"
+ },
+ "MV": {
+ "name": "مالدىۋÛ"
+ },
+ "ML": {
+ "name": "مالى"
+ },
+ "MR": {
+ "name": "ماۋرىتانىيە"
+ },
+ "MU": {
+ "name": "ماۋرىتىئۇس"
+ },
+ "YT": {
+ "name": "مايوتتÛ"
+ },
+ "MZ": {
+ "name": "موزامبىك"
+ },
+ "MN": {
+ "name": "موڭغۇلىيە"
+ },
+ "MD": {
+ "name": "مولدوۋا"
+ },
+ "MC": {
+ "name": "موناكو"
+ },
+ "MS": {
+ "name": "مونتسÛررات"
+ },
+ "ME": {
+ "name": "مونتÛÙ†Ûگرو"
+ },
+ "EG": {
+ "name": "مىسىر"
+ },
+ "FM": {
+ "name": "مىكرونÛزىيە"
+ },
+ "MX": {
+ "name": "Ù…Ûكسىكا"
+ },
+ "IM": {
+ "name": "Ù…ÛÙ† ئارىلى"
+ },
+ "NA": {
+ "name": "نامىبىيە"
+ },
+ "NR": {
+ "name": "ناۋرۇ"
+ },
+ "NF": {
+ "name": "نورÙولك ئارىلى"
+ },
+ "NO": {
+ "name": "نورۋÛگىيە"
+ },
+ "NI": {
+ "name": "نىكاراگۇئا"
+ },
+ "NG": {
+ "name": "نىگÛرىيە"
+ },
+ "NU": {
+ "name": "نىيۇئÛ"
+ },
+ "NP": {
+ "name": "Ù†Ûپال"
+ },
+ "NE": {
+ "name": "Ù†Ûگىر"
+ },
+ "HT": {
+ "name": "ھايتى"
+ },
+ "HN": {
+ "name": "ھوندۇراس"
+ },
+ "ID": {
+ "name": "ھىندونÛزىيە"
+ },
+ "IN": {
+ "name": "ھىندىستان"
+ },
+ "VA": {
+ "name": "ۋاتىكان شەھىرى"
+ },
+ "WF": {
+ "name": "ۋالىس Û‹Û• Ùۇتۇنا"
+ },
+ "VU": {
+ "name": "ۋانۇئاتۇ"
+ },
+ "VN": {
+ "name": "ۋىيÛتنام"
+ },
+ "HU": {
+ "name": "Û‹Ûنگىرىيە"
+ },
+ "VE": {
+ "name": "Û‹ÛÙ†ÛزۇئÛلا"
+ },
+ "JP": {
+ "name": "ياپونىيە"
+ },
+ "JM": {
+ "name": "يامايكا"
+ },
+ "YE": {
+ "name": "ÙŠÛ•Ù…Û•Ù†"
+ },
+ "CV": {
+ "name": "ÙŠÛشىل تۇمشۇق"
+ },
+ "NZ": {
+ "name": "ÙŠÛÚ­Ù‰ زÛلاندىيە"
+ },
+ "NC": {
+ "name": "ÙŠÛÚ­Ù‰ كالÛدونىيە"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/uk.json b/library/intl/resources/country/uk.json
new file mode 100644
index 000000000..48ab986ba
--- /dev/null
+++ b/library/intl/resources/country/uk.json
@@ -0,0 +1,761 @@
+{
+ "AU": {
+ "name": "ÐвÑтраліÑ"
+ },
+ "AT": {
+ "name": "ÐвÑтріÑ"
+ },
+ "AZ": {
+ "name": "Ðзербайджан"
+ },
+ "AX": {
+ "name": "ÐландÑькі оÑтрови"
+ },
+ "AL": {
+ "name": "ÐлбаніÑ"
+ },
+ "DZ": {
+ "name": "Ðлжир"
+ },
+ "AS": {
+ "name": "ÐмериканÑьке Самоа"
+ },
+ "AI": {
+ "name": "ÐнгільÑ"
+ },
+ "AO": {
+ "name": "Ðнгола"
+ },
+ "AD": {
+ "name": "Ðндорра"
+ },
+ "AQ": {
+ "name": "Ðнтарктика"
+ },
+ "AG": {
+ "name": "Ðнтигуа Ñ– Барбуда"
+ },
+ "AR": {
+ "name": "Ðргентина"
+ },
+ "AW": {
+ "name": "Ðруба"
+ },
+ "AF": {
+ "name": "ÐфганіÑтан"
+ },
+ "BS": {
+ "name": "Багами"
+ },
+ "BD": {
+ "name": "Бангладеш"
+ },
+ "BB": {
+ "name": "БарбадоÑ"
+ },
+ "BH": {
+ "name": "Бахрейн"
+ },
+ "BZ": {
+ "name": "Беліз"
+ },
+ "BE": {
+ "name": "БельгіÑ"
+ },
+ "BJ": {
+ "name": "Бенін"
+ },
+ "BM": {
+ "name": "Бермуди"
+ },
+ "BY": {
+ "name": "БілоруÑÑŒ"
+ },
+ "BG": {
+ "name": "БолгаріÑ"
+ },
+ "BO": {
+ "name": "БолівіÑ"
+ },
+ "BA": {
+ "name": "БоÑÐ½Ñ–Ñ Ñ– Герцоговина"
+ },
+ "BW": {
+ "name": "БотÑвана"
+ },
+ "BR": {
+ "name": "БразиліÑ"
+ },
+ "VG": {
+ "name": "БританÑькі ВіргінÑькі оÑтрови"
+ },
+ "IO": {
+ "name": "БританÑькі території в ІндійÑькому океані"
+ },
+ "BN": {
+ "name": "Бруней"
+ },
+ "BF": {
+ "name": "Буркіна-ФаÑо"
+ },
+ "BI": {
+ "name": "Бурунді"
+ },
+ "BT": {
+ "name": "Бутан"
+ },
+ "VN": {
+ "name": "Вʼєтнам"
+ },
+ "VU": {
+ "name": "Вануату"
+ },
+ "VA": {
+ "name": "Ватикан"
+ },
+ "GB": {
+ "name": "Велика БританіÑ"
+ },
+ "VE": {
+ "name": "ВенеÑуела"
+ },
+ "UM": {
+ "name": "Віддалені оÑтрови СШÐ"
+ },
+ "VI": {
+ "name": "ВіргінÑькі оÑтрови, СШÐ"
+ },
+ "AM": {
+ "name": "ВірменіÑ"
+ },
+ "WF": {
+ "name": "Ð’Ð¾Ð»Ð»Ñ–Ñ Ñ– Футуна"
+ },
+ "GA": {
+ "name": "Габон"
+ },
+ "HT": {
+ "name": "Гаїті"
+ },
+ "GM": {
+ "name": "ГамбіÑ"
+ },
+ "GH": {
+ "name": "Гана"
+ },
+ "GY": {
+ "name": "ГаÑна"
+ },
+ "GP": {
+ "name": "Гваделупа"
+ },
+ "GT": {
+ "name": "Гватемала"
+ },
+ "GN": {
+ "name": "ГвінеÑ"
+ },
+ "GW": {
+ "name": "ГвінеÑ-БіÑау"
+ },
+ "GG": {
+ "name": "ГернÑÑ–"
+ },
+ "GI": {
+ "name": "Гібралтар"
+ },
+ "HN": {
+ "name": "ГондураÑ"
+ },
+ "HK": {
+ "name": "Гонконг, О.Ð.Р. Китаю"
+ },
+ "GD": {
+ "name": "Гренада"
+ },
+ "GL": {
+ "name": "ГренландіÑ"
+ },
+ "GR": {
+ "name": "ГреціÑ"
+ },
+ "GE": {
+ "name": "ГрузіÑ"
+ },
+ "GU": {
+ "name": "Гуам"
+ },
+ "DK": {
+ "name": "ДаніÑ"
+ },
+ "JE": {
+ "name": "ДжерÑÑ–"
+ },
+ "DJ": {
+ "name": "Джибуті"
+ },
+ "DG": {
+ "name": "Дієго-ГарÑÑ–Ñ"
+ },
+ "DM": {
+ "name": "Домініка"
+ },
+ "DO": {
+ "name": "ДомініканÑька РеÑпубліка"
+ },
+ "EC": {
+ "name": "Еквадор"
+ },
+ "GQ": {
+ "name": "Екваторіальна ГвінеÑ"
+ },
+ "ER": {
+ "name": "ЕритреÑ"
+ },
+ "EE": {
+ "name": "ЕÑтоніÑ"
+ },
+ "ET": {
+ "name": "ЕфіопіÑ"
+ },
+ "EG": {
+ "name": "Єгипет"
+ },
+ "YE": {
+ "name": "Ємен"
+ },
+ "ZM": {
+ "name": "ЗамбіÑ"
+ },
+ "EH": {
+ "name": "Західна Сахара"
+ },
+ "ZW": {
+ "name": "Зімбабве"
+ },
+ "IL": {
+ "name": "Ізраїль"
+ },
+ "IN": {
+ "name": "ІндіÑ"
+ },
+ "ID": {
+ "name": "ІндонезіÑ"
+ },
+ "IQ": {
+ "name": "Ірак"
+ },
+ "IR": {
+ "name": "Іран"
+ },
+ "IE": {
+ "name": "ІрландіÑ"
+ },
+ "IS": {
+ "name": "ІÑландіÑ"
+ },
+ "ES": {
+ "name": "ІÑпаніÑ"
+ },
+ "IT": {
+ "name": "ІталіÑ"
+ },
+ "JO": {
+ "name": "ЙорданіÑ"
+ },
+ "CV": {
+ "name": "Кабо Верде"
+ },
+ "KZ": {
+ "name": "КазахÑтан"
+ },
+ "KY": {
+ "name": "Кайманові оÑтрови"
+ },
+ "KH": {
+ "name": "Камбоджа"
+ },
+ "CM": {
+ "name": "Камерун"
+ },
+ "CA": {
+ "name": "Канада"
+ },
+ "IC": {
+ "name": "КанарÑькі оÑтрови"
+ },
+ "QA": {
+ "name": "Катар"
+ },
+ "KE": {
+ "name": "КеніÑ"
+ },
+ "KG": {
+ "name": "КиргизÑтан"
+ },
+ "CN": {
+ "name": "Китай"
+ },
+ "CY": {
+ "name": "Кіпр"
+ },
+ "KI": {
+ "name": "Кірибаті"
+ },
+ "CC": {
+ "name": "КокоÑові (Кілінгові) оÑтрови"
+ },
+ "CO": {
+ "name": "КолумбіÑ"
+ },
+ "KM": {
+ "name": "КоморÑькі оÑтрови"
+ },
+ "CG": {
+ "name": "Конго – Браззавіль"
+ },
+ "CD": {
+ "name": "Конго – КіншаÑа"
+ },
+ "XK": {
+ "name": "КоÑово"
+ },
+ "CR": {
+ "name": "КоÑта-Рика"
+ },
+ "CI": {
+ "name": "Кот-д’Івуар"
+ },
+ "CU": {
+ "name": "Куба"
+ },
+ "KW": {
+ "name": "Кувейт"
+ },
+ "CW": {
+ "name": "КюраÑао"
+ },
+ "LA": {
+ "name": "ЛаоÑ"
+ },
+ "LV": {
+ "name": "ЛатвіÑ"
+ },
+ "LS": {
+ "name": "ЛеÑото"
+ },
+ "LT": {
+ "name": "Литва"
+ },
+ "LR": {
+ "name": "ЛіберіÑ"
+ },
+ "LB": {
+ "name": "Ліван"
+ },
+ "LY": {
+ "name": "ЛівіÑ"
+ },
+ "LI": {
+ "name": "Ліхтенштейн"
+ },
+ "LU": {
+ "name": "ЛюкÑембург"
+ },
+ "MM": {
+ "name": "МʼÑнма (Бірма)"
+ },
+ "MU": {
+ "name": "Маврикій"
+ },
+ "MR": {
+ "name": "МавританіÑ"
+ },
+ "MG": {
+ "name": "МадагаÑкар"
+ },
+ "YT": {
+ "name": "Майотта"
+ },
+ "MO": {
+ "name": "Макао О.Ð.Р. Китаю"
+ },
+ "MK": {
+ "name": "МакедоніÑ"
+ },
+ "MW": {
+ "name": "Малаві"
+ },
+ "MY": {
+ "name": "МалайзіÑ"
+ },
+ "ML": {
+ "name": "Малі"
+ },
+ "MV": {
+ "name": "Мальдіви"
+ },
+ "MT": {
+ "name": "Мальта"
+ },
+ "MA": {
+ "name": "Марокко"
+ },
+ "MQ": {
+ "name": "Мартиніка"
+ },
+ "MH": {
+ "name": "Маршаллові ОÑтрови"
+ },
+ "MX": {
+ "name": "МекÑика"
+ },
+ "FM": {
+ "name": "МікронезіÑ"
+ },
+ "MZ": {
+ "name": "Мозамбік"
+ },
+ "MD": {
+ "name": "Молдова"
+ },
+ "MC": {
+ "name": "Монако"
+ },
+ "MN": {
+ "name": "МонголіÑ"
+ },
+ "MS": {
+ "name": "МонтÑеррат"
+ },
+ "NA": {
+ "name": "ÐамібіÑ"
+ },
+ "NR": {
+ "name": "Ðауру"
+ },
+ "NP": {
+ "name": "Ðепал"
+ },
+ "NE": {
+ "name": "Ðігер"
+ },
+ "NG": {
+ "name": "ÐігеріÑ"
+ },
+ "NL": {
+ "name": "Ðідерланди"
+ },
+ "BQ": {
+ "name": "ÐідерландÑькі КарибÑькі оÑтрови"
+ },
+ "NI": {
+ "name": "Ðікарагуа"
+ },
+ "DE": {
+ "name": "Ðімеччина"
+ },
+ "NU": {
+ "name": "Ðіуе"
+ },
+ "NZ": {
+ "name": "Ðова ЗеландіÑ"
+ },
+ "NC": {
+ "name": "Ðова КаледоніÑ"
+ },
+ "NO": {
+ "name": "ÐорвегіÑ"
+ },
+ "AE": {
+ "name": "Обʼєднані ÐрабÑькі Емірати"
+ },
+ "OM": {
+ "name": "Оман"
+ },
+ "AC": {
+ "name": "ОÑтрів ВознеÑіннÑ"
+ },
+ "IM": {
+ "name": "ОÑтрів Мен"
+ },
+ "NF": {
+ "name": "ОÑтрів Ðорфолк"
+ },
+ "CX": {
+ "name": "ОÑтрів Різдва"
+ },
+ "SH": {
+ "name": "ОÑтрів СвÑтої Єлени"
+ },
+ "CK": {
+ "name": "ОÑтрови Кука"
+ },
+ "PN": {
+ "name": "ОÑтрови Піткерн"
+ },
+ "SJ": {
+ "name": "ОÑтрови Свальбард Ñ– Ян-Маєн"
+ },
+ "TC": {
+ "name": "ОÑтрови Ð¢ÐµÑ€ÐºÑ Ñ– КайкоÑ"
+ },
+ "PK": {
+ "name": "ПакиÑтан"
+ },
+ "PW": {
+ "name": "Палау"
+ },
+ "PS": {
+ "name": "ПалеÑтинÑькі території"
+ },
+ "PA": {
+ "name": "Панама"
+ },
+ "PG": {
+ "name": "Папуа Ðова ГвінеÑ"
+ },
+ "ZA": {
+ "name": "ПÐР"
+ },
+ "PY": {
+ "name": "Парагвай"
+ },
+ "PE": {
+ "name": "Перу"
+ },
+ "GS": {
+ "name": "Південна Ð”Ð¶Ð¾Ñ€Ð´Ð¶Ñ–Ñ Ñ‚Ð° Південні Сандвічеві оÑтрови"
+ },
+ "KR": {
+ "name": "Південна КореÑ"
+ },
+ "SS": {
+ "name": "Південний Судан"
+ },
+ "KP": {
+ "name": "Північна КореÑ"
+ },
+ "MP": {
+ "name": "Північні МаріанÑькі оÑтрови"
+ },
+ "PL": {
+ "name": "Польща"
+ },
+ "PT": {
+ "name": "ПортугаліÑ"
+ },
+ "PR": {
+ "name": "Пуерто-Рико"
+ },
+ "RE": {
+ "name": "Реюньйон"
+ },
+ "RU": {
+ "name": "РоÑÑ–Ñ"
+ },
+ "RW": {
+ "name": "Руанда"
+ },
+ "RO": {
+ "name": "РумуніÑ"
+ },
+ "SV": {
+ "name": "Сальвадор"
+ },
+ "WS": {
+ "name": "Самоа"
+ },
+ "SM": {
+ "name": "Сан-Марино"
+ },
+ "ST": {
+ "name": "Сан-Томе Ñ– ПрінÑіпі"
+ },
+ "SA": {
+ "name": "СаудівÑька ÐравіÑ"
+ },
+ "SZ": {
+ "name": "Свазіленд"
+ },
+ "SC": {
+ "name": "СейшельÑькі оÑтрови"
+ },
+ "BL": {
+ "name": "Сен-Бартельмі"
+ },
+ "MF": {
+ "name": "Сен-Мартен"
+ },
+ "PM": {
+ "name": "Сен-Пʼєр і Мікелон"
+ },
+ "SN": {
+ "name": "Сенегал"
+ },
+ "VC": {
+ "name": "Сент-ВінÑент Ñ– Гренадини"
+ },
+ "KN": {
+ "name": "Сент-ÐšÑ–Ñ‚Ñ Ñ– ÐевіÑ"
+ },
+ "LC": {
+ "name": "Сент-ЛюÑÑ–Ñ"
+ },
+ "RS": {
+ "name": "СербіÑ"
+ },
+ "EA": {
+ "name": "Сеута Ñ– МелільÑ"
+ },
+ "SY": {
+ "name": "СиріÑ"
+ },
+ "SG": {
+ "name": "Сінгапур"
+ },
+ "SX": {
+ "name": "Сінт-Мартен"
+ },
+ "SK": {
+ "name": "Словаччина"
+ },
+ "SI": {
+ "name": "СловеніÑ"
+ },
+ "SB": {
+ "name": "Соломонові ОÑтрови"
+ },
+ "SO": {
+ "name": "Сомалі"
+ },
+ "SD": {
+ "name": "Судан"
+ },
+ "SR": {
+ "name": "Суринам"
+ },
+ "TL": {
+ "name": "Східний Тимор"
+ },
+ "US": {
+ "name": "СШÐ"
+ },
+ "SL": {
+ "name": "Сьєрра-Леоне"
+ },
+ "TJ": {
+ "name": "ТаджикиÑтан"
+ },
+ "TH": {
+ "name": "Таїланд"
+ },
+ "TW": {
+ "name": "Тайвань"
+ },
+ "TZ": {
+ "name": "ТанзаніÑ"
+ },
+ "TG": {
+ "name": "Того"
+ },
+ "TK": {
+ "name": "Токелау"
+ },
+ "TO": {
+ "name": "Тонга"
+ },
+ "TT": {
+ "name": "Тринідад і Тобаго"
+ },
+ "TA": {
+ "name": "ТріÑтан-да-КуньÑ"
+ },
+ "TV": {
+ "name": "Тувалу"
+ },
+ "TN": {
+ "name": "ТуніÑ"
+ },
+ "TR": {
+ "name": "Туреччина"
+ },
+ "TM": {
+ "name": "ТуркменіÑтан"
+ },
+ "UG": {
+ "name": "Уганда"
+ },
+ "HU": {
+ "name": "Угорщина"
+ },
+ "UZ": {
+ "name": "УзбекиÑтан"
+ },
+ "UA": {
+ "name": "Україна"
+ },
+ "UY": {
+ "name": "Уругвай"
+ },
+ "FO": {
+ "name": "ФарерÑькі оÑтрови"
+ },
+ "FJ": {
+ "name": "Фіджі"
+ },
+ "PH": {
+ "name": "Філіппіни"
+ },
+ "FI": {
+ "name": "ФінлÑндіÑ"
+ },
+ "FK": {
+ "name": "ФолклендÑькі оÑтрови"
+ },
+ "FR": {
+ "name": "ФранціÑ"
+ },
+ "GF": {
+ "name": "Французька Гвіана"
+ },
+ "PF": {
+ "name": "Французька ПолінезіÑ"
+ },
+ "TF": {
+ "name": "Французькі Південні Території"
+ },
+ "HR": {
+ "name": "ХорватіÑ"
+ },
+ "CF": {
+ "name": "ЦентральноафриканÑька РеÑпубліка"
+ },
+ "TD": {
+ "name": "Чад"
+ },
+ "CZ": {
+ "name": "ЧехіÑ"
+ },
+ "CL": {
+ "name": "Чилі"
+ },
+ "ME": {
+ "name": "ЧорногоріÑ"
+ },
+ "CH": {
+ "name": "ШвейцаріÑ"
+ },
+ "SE": {
+ "name": "ШвеціÑ"
+ },
+ "LK": {
+ "name": "Шрі-Ланка"
+ },
+ "JM": {
+ "name": "Ямайка"
+ },
+ "JP": {
+ "name": "ЯпоніÑ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ur-IN.json b/library/intl/resources/country/ur-IN.json
new file mode 100644
index 000000000..536cec452
--- /dev/null
+++ b/library/intl/resources/country/ur-IN.json
@@ -0,0 +1,761 @@
+{
+ "IT": {
+ "name": "اٹلی"
+ },
+ "AR": {
+ "name": "ارجنٹینا"
+ },
+ "JO": {
+ "name": "اردن"
+ },
+ "AW": {
+ "name": "اروبا"
+ },
+ "ER": {
+ "name": "اریٹیریا"
+ },
+ "UZ": {
+ "name": "ازبکستان"
+ },
+ "GQ": {
+ "name": "استوائی گیانا"
+ },
+ "EE": {
+ "name": "اسٹونیا"
+ },
+ "IL": {
+ "name": "اسرائیل"
+ },
+ "AF": {
+ "name": "اÙغانستان"
+ },
+ "SV": {
+ "name": "ال سلواڈور"
+ },
+ "AL": {
+ "name": "البانیÛ"
+ },
+ "DZ": {
+ "name": "الجیریا"
+ },
+ "UM": {
+ "name": "امریکی بیرونی جزائر"
+ },
+ "VI": {
+ "name": "امریکی جزائر ورجن"
+ },
+ "AS": {
+ "name": "امریکی ساموآ"
+ },
+ "AQ": {
+ "name": "انٹارکٹیکا"
+ },
+ "AG": {
+ "name": "انٹیگوا اور باربودا"
+ },
+ "AD": {
+ "name": "انڈورا"
+ },
+ "ID": {
+ "name": "انڈونیشیا"
+ },
+ "AO": {
+ "name": "انگولا"
+ },
+ "AI": {
+ "name": "انگوئیلا"
+ },
+ "ET": {
+ "name": "ایتھوپیا"
+ },
+ "IR": {
+ "name": "ایران"
+ },
+ "EC": {
+ "name": "ایکواڈور"
+ },
+ "AZ": {
+ "name": "آذربائجان"
+ },
+ "AM": {
+ "name": "آرمینیا"
+ },
+ "AT": {
+ "name": "آسٹریا"
+ },
+ "AU": {
+ "name": "آسٹریلیا"
+ },
+ "IE": {
+ "name": "آئرلینڈ"
+ },
+ "IS": {
+ "name": "آئس لینڈ"
+ },
+ "IM": {
+ "name": "آئل آ٠مین"
+ },
+ "BB": {
+ "name": "بارباڈوس"
+ },
+ "BH": {
+ "name": "بحرین"
+ },
+ "BR": {
+ "name": "برازیل"
+ },
+ "IO": {
+ "name": "برطانوی بحرÛند خطÛ"
+ },
+ "VG": {
+ "name": "برطانوی جزائر ورجن"
+ },
+ "BF": {
+ "name": "برکینا Ùاسو"
+ },
+ "BM": {
+ "name": "برمودا"
+ },
+ "BI": {
+ "name": "برونڈی"
+ },
+ "BN": {
+ "name": "برونئی"
+ },
+ "BG": {
+ "name": "بلغاریÛ"
+ },
+ "BD": {
+ "name": "Ø¨Ù†Ú¯Ù„Û Ø¯ÛŒØ´"
+ },
+ "BW": {
+ "name": "بوتسوانا"
+ },
+ "BA": {
+ "name": "بوسنیا اور Ûرزیگووینا"
+ },
+ "BO": {
+ "name": "بولیویا"
+ },
+ "BS": {
+ "name": "بÛاماس"
+ },
+ "BY": {
+ "name": "بیلاروس"
+ },
+ "BZ": {
+ "name": "بیلائز"
+ },
+ "BE": {
+ "name": "بیلجیم"
+ },
+ "BJ": {
+ "name": "بینن"
+ },
+ "IN": {
+ "name": "بھارت"
+ },
+ "BT": {
+ "name": "بھوٹان"
+ },
+ "PG": {
+ "name": "پاپوآ نیو گنی"
+ },
+ "PK": {
+ "name": "پاکستان"
+ },
+ "PT": {
+ "name": "پرتگال"
+ },
+ "PW": {
+ "name": "پلاؤ"
+ },
+ "PA": {
+ "name": "پنامÛ"
+ },
+ "PL": {
+ "name": "پولینڈ"
+ },
+ "PY": {
+ "name": "پیراگوئے"
+ },
+ "PE": {
+ "name": "پیرو"
+ },
+ "PR": {
+ "name": "پیورٹو ریکو"
+ },
+ "TJ": {
+ "name": "تاجکستان"
+ },
+ "TW": {
+ "name": "تائیوان"
+ },
+ "TA": {
+ "name": "ترسٹان دا کونیا"
+ },
+ "TM": {
+ "name": "ترکمانستان"
+ },
+ "TR": {
+ "name": "ترکی"
+ },
+ "TT": {
+ "name": "ترینیداد اور ٹوباگو"
+ },
+ "TZ": {
+ "name": "تنزانیÛ"
+ },
+ "TL": {
+ "name": "تیمور لیسٹ"
+ },
+ "TN": {
+ "name": "تیونیسیا"
+ },
+ "TH": {
+ "name": "تھائی لینڈ"
+ },
+ "TK": {
+ "name": "ٹوکیلاؤ"
+ },
+ "TG": {
+ "name": "ٹوگو"
+ },
+ "TO": {
+ "name": "ٹونگا"
+ },
+ "TV": {
+ "name": "ٹووالو"
+ },
+ "JP": {
+ "name": "جاپان"
+ },
+ "GE": {
+ "name": "جارجیا"
+ },
+ "GI": {
+ "name": "جبل الطارق"
+ },
+ "DJ": {
+ "name": "جبوتی"
+ },
+ "JE": {
+ "name": "جرسی"
+ },
+ "DE": {
+ "name": "جرمنی"
+ },
+ "CC": {
+ "name": "جزائر (کیلنگ) کوکوس"
+ },
+ "AX": {
+ "name": "جزائر ایلانڈ"
+ },
+ "PN": {
+ "name": "جزائر پٹکیرن"
+ },
+ "SB": {
+ "name": "جزائر سلیمان"
+ },
+ "MP": {
+ "name": "جزائر شمالی ماریانا"
+ },
+ "FK": {
+ "name": "جزائر Ùاکلینڈ"
+ },
+ "CK": {
+ "name": "جزائر کک"
+ },
+ "IC": {
+ "name": "جزائر کناری"
+ },
+ "TC": {
+ "name": "جزائر کیکس Ùˆ ترکیÛ"
+ },
+ "MH": {
+ "name": "جزائر مارشل"
+ },
+ "FO": {
+ "name": "جزائرÙارو"
+ },
+ "AC": {
+ "name": "Ø¬Ø²ÛŒØ±Û Ø§Ø³ÛŒÙ†Ø´Ù†"
+ },
+ "NF": {
+ "name": "Ø¬Ø²ÛŒØ±Û Ù†Ø§Ø±Ùولک"
+ },
+ "JM": {
+ "name": "جمائیکا"
+ },
+ "ZA": {
+ "name": "جنوبی اÙریقÛ"
+ },
+ "GS": {
+ "name": "جنوبی جارجیا اور جنوبی سینڈوچ جزائر"
+ },
+ "SS": {
+ "name": "جنوبی سوڈان"
+ },
+ "KR": {
+ "name": "جنوبی کوریا"
+ },
+ "TD": {
+ "name": "چاڈ"
+ },
+ "CL": {
+ "name": "چلی"
+ },
+ "CZ": {
+ "name": "چیک جمÛوریÛ"
+ },
+ "CN": {
+ "name": "چین"
+ },
+ "DK": {
+ "name": "ڈنمارک"
+ },
+ "DM": {
+ "name": "ڈومنیکا"
+ },
+ "DO": {
+ "name": "ڈومنیکن جمÛوریÛ"
+ },
+ "DG": {
+ "name": "ڈیگو گارشیا"
+ },
+ "RW": {
+ "name": "روانڈا"
+ },
+ "RU": {
+ "name": "روس"
+ },
+ "RO": {
+ "name": "رومانیا"
+ },
+ "RE": {
+ "name": "ری یونین"
+ },
+ "US": {
+ "name": "ریاستÛائے متحدÛ"
+ },
+ "ZM": {
+ "name": "زامبیا"
+ },
+ "ZW": {
+ "name": "زمبابوے"
+ },
+ "WS": {
+ "name": "ساموآ"
+ },
+ "SM": {
+ "name": "سان مارینو"
+ },
+ "ST": {
+ "name": "ساؤ ٹوم اور پرنسپے"
+ },
+ "RS": {
+ "name": "سربیا"
+ },
+ "LK": {
+ "name": "سری لنکا"
+ },
+ "SC": {
+ "name": "سشلیز"
+ },
+ "SA": {
+ "name": "سعودی عرب"
+ },
+ "GB": {
+ "name": "سلطنت متحدÛ"
+ },
+ "SK": {
+ "name": "سلوواکیÛ"
+ },
+ "SI": {
+ "name": "سلووینیا"
+ },
+ "SX": {
+ "name": "سنٹ مارٹن"
+ },
+ "SG": {
+ "name": "سنگاپور"
+ },
+ "SZ": {
+ "name": "سوازی لینڈ"
+ },
+ "SJ": {
+ "name": "سوالبرڈ اور جان ماین"
+ },
+ "SD": {
+ "name": "سوڈان"
+ },
+ "SR": {
+ "name": "سورینام"
+ },
+ "CH": {
+ "name": "سوئٹزر لینڈ"
+ },
+ "SE": {
+ "name": "سویڈن"
+ },
+ "BL": {
+ "name": "سینٹ برتھلیمی"
+ },
+ "PM": {
+ "name": "سینٹ پیئر اور میکلیئون"
+ },
+ "KN": {
+ "name": "سینٹ کٹس اور نیویس"
+ },
+ "LC": {
+ "name": "سینٹ لوسیا"
+ },
+ "MF": {
+ "name": "سینٹ مارٹن"
+ },
+ "VC": {
+ "name": "سینٹ ونسنٹ اور گرینیڈائنز"
+ },
+ "SH": {
+ "name": "سینٹ Ûیلینا"
+ },
+ "SN": {
+ "name": "سینیگل"
+ },
+ "SL": {
+ "name": "سیئر لیون"
+ },
+ "EA": {
+ "name": "سیئوٹا اور میلیلا"
+ },
+ "SY": {
+ "name": "شام"
+ },
+ "KP": {
+ "name": "شمالی کوریا"
+ },
+ "SO": {
+ "name": "صومالیÛ"
+ },
+ "IQ": {
+ "name": "عراق"
+ },
+ "OM": {
+ "name": "عمان"
+ },
+ "FJ": {
+ "name": "Ùجی"
+ },
+ "FR": {
+ "name": "Ùرانس"
+ },
+ "PF": {
+ "name": "Ùرانسیسی پولینیشیا"
+ },
+ "TF": {
+ "name": "Ùرانسیسی جنوبی خطے"
+ },
+ "GF": {
+ "name": "Ùرانسیسی گیانا"
+ },
+ "PH": {
+ "name": "Ùلپائن"
+ },
+ "PS": {
+ "name": "Ùلسطینی خطے"
+ },
+ "FI": {
+ "name": "ÙÙ† لینڈ"
+ },
+ "CY": {
+ "name": "قبرص"
+ },
+ "KZ": {
+ "name": "قزاخستان"
+ },
+ "QA": {
+ "name": "قطر"
+ },
+ "CG": {
+ "name": "کانگو - برازاویلے"
+ },
+ "CD": {
+ "name": "کانگو - کنشاسا"
+ },
+ "CX": {
+ "name": "کرسمس آئلینڈ"
+ },
+ "KG": {
+ "name": "کرغزستان"
+ },
+ "HR": {
+ "name": "کروشیا"
+ },
+ "KI": {
+ "name": "کریباتی"
+ },
+ "BQ": {
+ "name": "کریبیائی نیدرلینڈز"
+ },
+ "KH": {
+ "name": "کمبوڈیا"
+ },
+ "CI": {
+ "name": "کوت داوواغ"
+ },
+ "CR": {
+ "name": "کوسٹا ریکا"
+ },
+ "XK": {
+ "name": "کوسووو"
+ },
+ "CO": {
+ "name": "کولمبیا"
+ },
+ "KM": {
+ "name": "کوموروس"
+ },
+ "KW": {
+ "name": "کویت"
+ },
+ "CV": {
+ "name": "کیپ ورڈی"
+ },
+ "CM": {
+ "name": "کیمرون"
+ },
+ "KY": {
+ "name": "کیمین آئلینڈز"
+ },
+ "KE": {
+ "name": "کینیا"
+ },
+ "CA": {
+ "name": "کینیڈا"
+ },
+ "CU": {
+ "name": "کیوبا"
+ },
+ "CW": {
+ "name": "کیوراکاؤ"
+ },
+ "GM": {
+ "name": "گامبیا"
+ },
+ "GL": {
+ "name": "گرین لینڈ"
+ },
+ "GD": {
+ "name": "گریناڈا"
+ },
+ "GN": {
+ "name": "گنی"
+ },
+ "GW": {
+ "name": "گنی بساؤ"
+ },
+ "GT": {
+ "name": "گواٹے مالا"
+ },
+ "GP": {
+ "name": "گواڈیلوپ"
+ },
+ "GU": {
+ "name": "گوآم"
+ },
+ "GG": {
+ "name": "گوئرنسی"
+ },
+ "GY": {
+ "name": "گیانا"
+ },
+ "GA": {
+ "name": "گیبون"
+ },
+ "GH": {
+ "name": "گھانا"
+ },
+ "LA": {
+ "name": "لاؤس"
+ },
+ "LR": {
+ "name": "لائبیریا"
+ },
+ "LB": {
+ "name": "لبنان"
+ },
+ "LT": {
+ "name": "لتھوانیا"
+ },
+ "LV": {
+ "name": "لٹویا"
+ },
+ "LU": {
+ "name": "لگژمبرگ"
+ },
+ "LY": {
+ "name": "لیبیا"
+ },
+ "LS": {
+ "name": "لیسوتھو"
+ },
+ "LI": {
+ "name": "لیشٹنسٹائن"
+ },
+ "MQ": {
+ "name": "مارٹینک"
+ },
+ "MU": {
+ "name": "ماریشس"
+ },
+ "MT": {
+ "name": "مالٹا"
+ },
+ "MD": {
+ "name": "مالدووا"
+ },
+ "MV": {
+ "name": "مالدیپ"
+ },
+ "ML": {
+ "name": "مالی"
+ },
+ "FM": {
+ "name": "مائکرونیشیا"
+ },
+ "YT": {
+ "name": "مایوٹ"
+ },
+ "AE": {
+ "name": "Ù…ØªØ­Ø¯Û Ø¹Ø±Ø¨ امارات"
+ },
+ "MG": {
+ "name": "مڈغاسکر"
+ },
+ "MA": {
+ "name": "مراقش"
+ },
+ "EG": {
+ "name": "مصر"
+ },
+ "EH": {
+ "name": "مغربی صحارا"
+ },
+ "MK": {
+ "name": "مقدونیÛ"
+ },
+ "MO": {
+ "name": "مکاؤ SAR چین"
+ },
+ "MW": {
+ "name": "ملاوی"
+ },
+ "MY": {
+ "name": "ملیشیا"
+ },
+ "MN": {
+ "name": "منگولیا"
+ },
+ "MR": {
+ "name": "موریطانیÛ"
+ },
+ "MZ": {
+ "name": "موزمبیق"
+ },
+ "MC": {
+ "name": "موناکو"
+ },
+ "MS": {
+ "name": "مونٹسیراٹ"
+ },
+ "ME": {
+ "name": "مونٹے نیگرو"
+ },
+ "MM": {
+ "name": "میانمار (برما)"
+ },
+ "MX": {
+ "name": "میکسیکو"
+ },
+ "NO": {
+ "name": "ناروے"
+ },
+ "NA": {
+ "name": "نامیبیا"
+ },
+ "NR": {
+ "name": "ناورو"
+ },
+ "NE": {
+ "name": "نائجر"
+ },
+ "NG": {
+ "name": "نائجیریا"
+ },
+ "NI": {
+ "name": "نکاراگووا"
+ },
+ "NP": {
+ "name": "نیپال"
+ },
+ "NL": {
+ "name": "نیدر لینڈز"
+ },
+ "NC": {
+ "name": "نیو کلیڈونیا"
+ },
+ "NZ": {
+ "name": "نیوزی ینڈ"
+ },
+ "NU": {
+ "name": "نیئو"
+ },
+ "VA": {
+ "name": "واٹیکن سٹی"
+ },
+ "CF": {
+ "name": "وسط اÙریقی جمÛوریÛ"
+ },
+ "VN": {
+ "name": "ویتنام"
+ },
+ "WF": {
+ "name": "ویلیز اور Ùیوٹیونا"
+ },
+ "VE": {
+ "name": "وینزوئیلا"
+ },
+ "VU": {
+ "name": "وینوآٹو"
+ },
+ "HK": {
+ "name": "Ûانگ کانگ SAR چین"
+ },
+ "ES": {
+ "name": "ÛسپانیÛ"
+ },
+ "HU": {
+ "name": "Ûنگری"
+ },
+ "HN": {
+ "name": "Ûونڈاروس"
+ },
+ "HT": {
+ "name": "Ûیتی"
+ },
+ "YE": {
+ "name": "یمن"
+ },
+ "UY": {
+ "name": "یوروگوئے"
+ },
+ "UA": {
+ "name": "یوکرین"
+ },
+ "UG": {
+ "name": "یوگانڈا"
+ },
+ "GR": {
+ "name": "یونان"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/ur.json b/library/intl/resources/country/ur.json
new file mode 100644
index 000000000..5bb85870b
--- /dev/null
+++ b/library/intl/resources/country/ur.json
@@ -0,0 +1,761 @@
+{
+ "IT": {
+ "name": "اٹلی"
+ },
+ "AR": {
+ "name": "ارجنٹینا"
+ },
+ "JO": {
+ "name": "اردن"
+ },
+ "AW": {
+ "name": "اروبا"
+ },
+ "ER": {
+ "name": "اریٹیریا"
+ },
+ "UZ": {
+ "name": "ازبکستان"
+ },
+ "GQ": {
+ "name": "استوائی گیانا"
+ },
+ "EE": {
+ "name": "اسٹونیا"
+ },
+ "IL": {
+ "name": "اسرائیل"
+ },
+ "AC": {
+ "name": "اسکینسیئن آئلینڈ"
+ },
+ "AF": {
+ "name": "اÙغانستان"
+ },
+ "SV": {
+ "name": "ال سلواڈور"
+ },
+ "AL": {
+ "name": "البانیÛ"
+ },
+ "DZ": {
+ "name": "الجیریا"
+ },
+ "UM": {
+ "name": "Ø§Ù…Ø±ÛŒÚ©Û Ø³Û’ باÛر Ú©Û’ چھوٹے جزائز"
+ },
+ "AS": {
+ "name": "امریکی ساموآ"
+ },
+ "VI": {
+ "name": "امریکی ورجن آئلینڈز"
+ },
+ "AQ": {
+ "name": "انٹارکٹیکا"
+ },
+ "AG": {
+ "name": "انٹیگوا اور باربودا"
+ },
+ "AD": {
+ "name": "انڈورا"
+ },
+ "ID": {
+ "name": "انڈونیشیا"
+ },
+ "AO": {
+ "name": "انگولا"
+ },
+ "AI": {
+ "name": "انگوئیلا"
+ },
+ "ET": {
+ "name": "ایتھوپیا"
+ },
+ "IR": {
+ "name": "ایران"
+ },
+ "EC": {
+ "name": "ایکواڈور"
+ },
+ "AZ": {
+ "name": "آذربائجان"
+ },
+ "AM": {
+ "name": "آرمینیا"
+ },
+ "AT": {
+ "name": "آسٹریا"
+ },
+ "AU": {
+ "name": "آسٹریلیا"
+ },
+ "AX": {
+ "name": "آلینڈ آئلینڈز"
+ },
+ "IE": {
+ "name": "آئرلینڈ"
+ },
+ "IS": {
+ "name": "آئس لینڈ"
+ },
+ "IM": {
+ "name": "آئل آ٠مین"
+ },
+ "BB": {
+ "name": "باربادوس"
+ },
+ "BH": {
+ "name": "بحرین"
+ },
+ "BR": {
+ "name": "برازیلی"
+ },
+ "VG": {
+ "name": "برٹش ورجن آئلینڈز"
+ },
+ "IO": {
+ "name": "برطانوی Ûندوستانی سمندری خطÛ"
+ },
+ "BF": {
+ "name": "برکینا Ùاسو"
+ },
+ "BM": {
+ "name": "برمودا"
+ },
+ "BI": {
+ "name": "برونڈی"
+ },
+ "BN": {
+ "name": "برونئی"
+ },
+ "BG": {
+ "name": "بلغاریÛ"
+ },
+ "BD": {
+ "name": "Ø¨Ù†Ú¯Ù„Û Ø¯ÛŒØ´"
+ },
+ "BW": {
+ "name": "بوتسوانا"
+ },
+ "BA": {
+ "name": "بوسنیا اور Ûرزیگووینا"
+ },
+ "BO": {
+ "name": "بولیویا"
+ },
+ "BS": {
+ "name": "بÛاماس"
+ },
+ "BY": {
+ "name": "بیلاروس"
+ },
+ "BZ": {
+ "name": "بیلائز"
+ },
+ "BE": {
+ "name": "بیلجیم"
+ },
+ "BJ": {
+ "name": "بینن"
+ },
+ "IN": {
+ "name": "بھارت"
+ },
+ "BT": {
+ "name": "بھوٹان"
+ },
+ "PG": {
+ "name": "پاپوآ نیو گنی"
+ },
+ "PK": {
+ "name": "پاکستان"
+ },
+ "PN": {
+ "name": "پٹکائرن جزائر"
+ },
+ "PT": {
+ "name": "پرتگال"
+ },
+ "PW": {
+ "name": "پلاؤ"
+ },
+ "PA": {
+ "name": "پنامÛ"
+ },
+ "PL": {
+ "name": "پولینڈ"
+ },
+ "PY": {
+ "name": "پیراگوئے"
+ },
+ "PE": {
+ "name": "پیرو"
+ },
+ "PR": {
+ "name": "پیورٹو ریکو"
+ },
+ "TJ": {
+ "name": "تاجکستان"
+ },
+ "TW": {
+ "name": "تائیوان"
+ },
+ "TC": {
+ "name": "ترکس اور کیکاؤس جزائر"
+ },
+ "TM": {
+ "name": "ترکمانستان"
+ },
+ "TR": {
+ "name": "ترکی"
+ },
+ "TT": {
+ "name": "ترینیداد اور ٹوباگو"
+ },
+ "TZ": {
+ "name": "تنزانیÛ"
+ },
+ "TL": {
+ "name": "تیمور لیسٹ"
+ },
+ "TN": {
+ "name": "تیونیسیا"
+ },
+ "TH": {
+ "name": "تھائی لینڈ"
+ },
+ "TA": {
+ "name": "ٹرسٹن ڈا کیونÛا"
+ },
+ "TK": {
+ "name": "ٹوکیلاؤ"
+ },
+ "TG": {
+ "name": "ٹوگو"
+ },
+ "TO": {
+ "name": "ٹونگا"
+ },
+ "TV": {
+ "name": "ٹووالو"
+ },
+ "JP": {
+ "name": "جاپان"
+ },
+ "GE": {
+ "name": "جارجیا"
+ },
+ "GI": {
+ "name": "جبل الطارق"
+ },
+ "DJ": {
+ "name": "جبوتی"
+ },
+ "JE": {
+ "name": "جرسی"
+ },
+ "DE": {
+ "name": "جرمنی"
+ },
+ "JM": {
+ "name": "جمائیکا"
+ },
+ "ZA": {
+ "name": "جنوبی اÙریقÛ"
+ },
+ "GS": {
+ "name": "جنوبی جارجیا اور جنوبی سینڈوچ جزائر"
+ },
+ "SS": {
+ "name": "جنوبی سوڈان"
+ },
+ "KR": {
+ "name": "جنوبی کوریا"
+ },
+ "TD": {
+ "name": "چاڈ"
+ },
+ "CL": {
+ "name": "چلی"
+ },
+ "CZ": {
+ "name": "چیک جمÛوریÛ"
+ },
+ "CN": {
+ "name": "چین"
+ },
+ "DG": {
+ "name": "ڈائجو گارسیا"
+ },
+ "DK": {
+ "name": "ڈنمارک"
+ },
+ "DM": {
+ "name": "ڈومنیکا"
+ },
+ "DO": {
+ "name": "ڈومنیکن جمÛوریÛ"
+ },
+ "RW": {
+ "name": "روانڈا"
+ },
+ "RU": {
+ "name": "روسی"
+ },
+ "RO": {
+ "name": "رومانیا"
+ },
+ "RE": {
+ "name": "ری یونین"
+ },
+ "US": {
+ "name": "ریاستÛائے متحدÛ"
+ },
+ "ZM": {
+ "name": "زامبیا"
+ },
+ "ZW": {
+ "name": "زمبابوے"
+ },
+ "WS": {
+ "name": "ساموآ"
+ },
+ "SM": {
+ "name": "سان مارینو"
+ },
+ "ST": {
+ "name": "ساؤ ٹوم اور پرنسپے"
+ },
+ "RS": {
+ "name": "سربیا"
+ },
+ "LK": {
+ "name": "سری لنکا"
+ },
+ "SC": {
+ "name": "سشلیز"
+ },
+ "SA": {
+ "name": "سعودی عرب"
+ },
+ "GB": {
+ "name": "سلطنت متحدÛ"
+ },
+ "SK": {
+ "name": "سلوواکیÛ"
+ },
+ "SI": {
+ "name": "سلووینیا"
+ },
+ "SX": {
+ "name": "سنٹ مارٹن"
+ },
+ "SG": {
+ "name": "سنگاپور"
+ },
+ "SZ": {
+ "name": "سوازی لینڈ"
+ },
+ "SJ": {
+ "name": "سوالبرڈ اور جان ماین"
+ },
+ "SD": {
+ "name": "سوڈان"
+ },
+ "SR": {
+ "name": "سورینام"
+ },
+ "SB": {
+ "name": "سولومن آئلینڈز"
+ },
+ "CH": {
+ "name": "سوئٹزر لینڈ"
+ },
+ "SE": {
+ "name": "سویڈن"
+ },
+ "BL": {
+ "name": "سینٹ برتھلیمی"
+ },
+ "PM": {
+ "name": "سینٹ پیئر اور میکلیئون"
+ },
+ "KN": {
+ "name": "سینٹ کٹس اور نیویس"
+ },
+ "LC": {
+ "name": "سینٹ لوسیا"
+ },
+ "MF": {
+ "name": "سینٹ مارٹن"
+ },
+ "VC": {
+ "name": "سینٹ ونسنٹ اور گرینیڈائنز"
+ },
+ "SH": {
+ "name": "سینٹ Ûیلینا"
+ },
+ "SN": {
+ "name": "سینیگل"
+ },
+ "SL": {
+ "name": "سیئر لیون"
+ },
+ "EA": {
+ "name": "سیئوٹا اور میلیلا"
+ },
+ "SY": {
+ "name": "شام"
+ },
+ "KP": {
+ "name": "شمالی کوریا"
+ },
+ "MP": {
+ "name": "شمالی ماریانا آئلینڈز"
+ },
+ "SO": {
+ "name": "صومالیÛ"
+ },
+ "IQ": {
+ "name": "عراق"
+ },
+ "OM": {
+ "name": "عمان"
+ },
+ "GD": {
+ "name": "غرناطÛ"
+ },
+ "FK": {
+ "name": "Ùاکلینڈ جزائر"
+ },
+ "FJ": {
+ "name": "Ùجی"
+ },
+ "FR": {
+ "name": "Ùرانس"
+ },
+ "PF": {
+ "name": "Ùرانسیسی پولینیشیا"
+ },
+ "TF": {
+ "name": "Ùرانسیسی جنوبی خطے"
+ },
+ "FO": {
+ "name": "Ùروئی آئلینڈز"
+ },
+ "GF": {
+ "name": "Ùرینچ گیانا"
+ },
+ "PH": {
+ "name": "Ùلپائنی"
+ },
+ "PS": {
+ "name": "Ùلسطینی خطے"
+ },
+ "FI": {
+ "name": "ÙÙ† لینڈ"
+ },
+ "CY": {
+ "name": "قبرص"
+ },
+ "KZ": {
+ "name": "قزاخستان"
+ },
+ "QA": {
+ "name": "قطر"
+ },
+ "CG": {
+ "name": "کانگو - برازاویلے"
+ },
+ "CD": {
+ "name": "کانگو - کنشاسا"
+ },
+ "CX": {
+ "name": "کرسمس آئلینڈ"
+ },
+ "KG": {
+ "name": "کرغزستان"
+ },
+ "HR": {
+ "name": "کروشیا"
+ },
+ "KI": {
+ "name": "کریباتی"
+ },
+ "BQ": {
+ "name": "کریبیائی نیدرلینڈز"
+ },
+ "CK": {
+ "name": "کک آئلینڈز"
+ },
+ "KH": {
+ "name": "کمبوڈیا"
+ },
+ "CI": {
+ "name": "کوٹ ڈی آئیوری"
+ },
+ "CR": {
+ "name": "کوسٹا ریکا"
+ },
+ "XK": {
+ "name": "کوسووو"
+ },
+ "CC": {
+ "name": "کوکوس (کیلنگ) جزائر"
+ },
+ "CO": {
+ "name": "کولمبیا"
+ },
+ "KM": {
+ "name": "کوموروس"
+ },
+ "KW": {
+ "name": "کویت"
+ },
+ "CV": {
+ "name": "کیپ ورڈی"
+ },
+ "CM": {
+ "name": "کیمرون"
+ },
+ "KY": {
+ "name": "کیمین آئلینڈز"
+ },
+ "IC": {
+ "name": "کینری آئلینڈز"
+ },
+ "KE": {
+ "name": "کینیا"
+ },
+ "CA": {
+ "name": "کینیڈا"
+ },
+ "CU": {
+ "name": "کیوبا"
+ },
+ "CW": {
+ "name": "کیوراکاؤ"
+ },
+ "GM": {
+ "name": "گامبیا"
+ },
+ "GL": {
+ "name": "گرین لینڈ"
+ },
+ "GN": {
+ "name": "گنی"
+ },
+ "GW": {
+ "name": "گنی بساؤ"
+ },
+ "GT": {
+ "name": "گواٹے مالا"
+ },
+ "GP": {
+ "name": "گواڈیلوپ"
+ },
+ "GU": {
+ "name": "گوآم"
+ },
+ "GG": {
+ "name": "گوئرنسی"
+ },
+ "GY": {
+ "name": "گیانا"
+ },
+ "GA": {
+ "name": "گیبون"
+ },
+ "GH": {
+ "name": "گھانا"
+ },
+ "LA": {
+ "name": "لاؤس"
+ },
+ "LR": {
+ "name": "لائبیریا"
+ },
+ "LB": {
+ "name": "لبنان"
+ },
+ "LT": {
+ "name": "لتھوانیا"
+ },
+ "LV": {
+ "name": "لٹویا"
+ },
+ "LU": {
+ "name": "لگژمبرگ"
+ },
+ "LY": {
+ "name": "لیبیا"
+ },
+ "LS": {
+ "name": "لیسوتھو"
+ },
+ "LI": {
+ "name": "لیشٹنسٹائن"
+ },
+ "MQ": {
+ "name": "مارٹینک"
+ },
+ "MH": {
+ "name": "مارشل آئلینڈز"
+ },
+ "MU": {
+ "name": "ماریشس"
+ },
+ "MT": {
+ "name": "مالٹا"
+ },
+ "MD": {
+ "name": "مالدووا"
+ },
+ "MV": {
+ "name": "مالدیپ"
+ },
+ "ML": {
+ "name": "مالی"
+ },
+ "FM": {
+ "name": "مائکرونیشیا"
+ },
+ "YT": {
+ "name": "مایوٹ"
+ },
+ "AE": {
+ "name": "Ù…ØªØ­Ø¯Û Ø¹Ø±Ø¨ امارات"
+ },
+ "MG": {
+ "name": "مڈغاسکر"
+ },
+ "MA": {
+ "name": "مراقش"
+ },
+ "EG": {
+ "name": "مصر"
+ },
+ "EH": {
+ "name": "مغربی صحارا"
+ },
+ "MK": {
+ "name": "مقدونیÛ"
+ },
+ "MO": {
+ "name": "مکاؤ SAR چین"
+ },
+ "MW": {
+ "name": "ملاوی"
+ },
+ "MY": {
+ "name": "ملیشیا"
+ },
+ "MN": {
+ "name": "منگولیا"
+ },
+ "MR": {
+ "name": "موریطانیÛ"
+ },
+ "MZ": {
+ "name": "موزمبیق"
+ },
+ "MC": {
+ "name": "موناکو"
+ },
+ "MS": {
+ "name": "مونٹسیراٹ"
+ },
+ "ME": {
+ "name": "مونٹے نیگرو"
+ },
+ "MM": {
+ "name": "میانمار (برما)"
+ },
+ "MX": {
+ "name": "میکسیکو"
+ },
+ "NF": {
+ "name": "نار Ùاک آئلینڈ"
+ },
+ "NO": {
+ "name": "ناروے"
+ },
+ "NA": {
+ "name": "نامیبیا"
+ },
+ "NE": {
+ "name": "نائجر"
+ },
+ "NG": {
+ "name": "نائجیریا"
+ },
+ "NI": {
+ "name": "نکاراگووا"
+ },
+ "NR": {
+ "name": "نؤرو"
+ },
+ "NP": {
+ "name": "نیپال"
+ },
+ "NL": {
+ "name": "نیدر لینڈز"
+ },
+ "NC": {
+ "name": "نیو کلیڈونیا"
+ },
+ "NZ": {
+ "name": "نیوزی ینڈ"
+ },
+ "NU": {
+ "name": "نیئو"
+ },
+ "VA": {
+ "name": "واٹیکن سٹی"
+ },
+ "CF": {
+ "name": "وسط اÙریقی جمÛوریÛ"
+ },
+ "VN": {
+ "name": "ویتنام"
+ },
+ "WF": {
+ "name": "ویلیز اور Ùیوٹیونا"
+ },
+ "VE": {
+ "name": "وینزوئیلا"
+ },
+ "VU": {
+ "name": "وینوآٹو"
+ },
+ "HK": {
+ "name": "Ûانگ کانگ SAR چین"
+ },
+ "ES": {
+ "name": "ÛسپانیÛ"
+ },
+ "HU": {
+ "name": "Ûنگری"
+ },
+ "HN": {
+ "name": "Ûونڈاروس"
+ },
+ "HT": {
+ "name": "Ûیتی"
+ },
+ "YE": {
+ "name": "یمن"
+ },
+ "UY": {
+ "name": "یوروگوئے"
+ },
+ "UA": {
+ "name": "یوکرین"
+ },
+ "UG": {
+ "name": "یوگانڈا"
+ },
+ "GR": {
+ "name": "یونان"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/uz-Cyrl.json b/library/intl/resources/country/uz-Cyrl.json
new file mode 100644
index 000000000..7952cce87
--- /dev/null
+++ b/library/intl/resources/country/uz-Cyrl.json
@@ -0,0 +1,761 @@
+{
+ "AU": {
+ "name": "ÐвÑтралиÑ"
+ },
+ "AT": {
+ "name": "ÐвÑтриÑ"
+ },
+ "VI": {
+ "name": "ÐҚШ Ð’Ð¸Ñ€Ð´Ð¶Ð¸Ð½Ð¸Ñ Ð¾Ñ€Ð¾Ð»Ð»Ð°Ñ€Ð¸"
+ },
+ "UM": {
+ "name": "ÐҚШ ёндош ороллари"
+ },
+ "AX": {
+ "name": "Ðланд ороллари"
+ },
+ "AL": {
+ "name": "ÐлбаниÑ"
+ },
+ "AS": {
+ "name": "Ðмерика СамоаÑи"
+ },
+ "AI": {
+ "name": "Ðнгила"
+ },
+ "AO": {
+ "name": "Ðнгола"
+ },
+ "AD": {
+ "name": "Ðндорра"
+ },
+ "AQ": {
+ "name": "Ðнтарктика"
+ },
+ "AG": {
+ "name": "Ðнтигуа ва БарбадоÑ"
+ },
+ "AR": {
+ "name": "Ðргентина"
+ },
+ "AM": {
+ "name": "ÐрманиÑтон"
+ },
+ "AW": {
+ "name": "Ðруба"
+ },
+ "AF": {
+ "name": "ÐфғониÑтон"
+ },
+ "BS": {
+ "name": "Багама ороллари"
+ },
+ "BD": {
+ "name": "Бангладеш"
+ },
+ "BB": {
+ "name": "БарбадоÑ"
+ },
+ "BH": {
+ "name": "Баҳрайн"
+ },
+ "BZ": {
+ "name": "Белиз"
+ },
+ "BY": {
+ "name": "БелоруÑиÑ"
+ },
+ "BE": {
+ "name": "БельгиÑ"
+ },
+ "BJ": {
+ "name": "Бенин"
+ },
+ "BM": {
+ "name": "Бермуда"
+ },
+ "AE": {
+ "name": "Бирлашган Ðраб Ðмирликлари"
+ },
+ "GB": {
+ "name": "Бирлашган Қироллик"
+ },
+ "BG": {
+ "name": "БолгариÑ"
+ },
+ "BO": {
+ "name": "БоливиÑ"
+ },
+ "BA": {
+ "name": "БоÑÐ½Ð¸Ñ Ð²Ð° Герцеговина"
+ },
+ "BW": {
+ "name": "БотÑванна"
+ },
+ "BR": {
+ "name": "БразилиÑ"
+ },
+ "VG": {
+ "name": "Ð‘Ñ€Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ð’Ð¸Ñ€Ð´Ð¶Ð¸Ð½Ð¸Ñ Ð¾Ñ€Ð¾Ð»Ð»Ð°Ñ€Ð¸"
+ },
+ "IO": {
+ "name": "Ð‘Ñ€Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ò²Ð¸Ð½Ð´ океани ҳудуди"
+ },
+ "BN": {
+ "name": "Бруней"
+ },
+ "BF": {
+ "name": "Буркина-ФаÑо"
+ },
+ "BI": {
+ "name": "Бурунди"
+ },
+ "BT": {
+ "name": "Бутан"
+ },
+ "VU": {
+ "name": "Вануату"
+ },
+ "VA": {
+ "name": "Ватикан"
+ },
+ "HU": {
+ "name": "ВенгриÑ"
+ },
+ "VE": {
+ "name": "ВенеÑуÑла"
+ },
+ "AC": {
+ "name": "ВознеÑение ороли"
+ },
+ "VN": {
+ "name": "Вьетнам"
+ },
+ "GA": {
+ "name": "Габон"
+ },
+ "HT": {
+ "name": "Гаити"
+ },
+ "GM": {
+ "name": "ГамбиÑ"
+ },
+ "GH": {
+ "name": "Гана"
+ },
+ "GY": {
+ "name": "ГаÑна"
+ },
+ "GP": {
+ "name": "Гваделупе"
+ },
+ "GT": {
+ "name": "Гватемала"
+ },
+ "GN": {
+ "name": "ГвинеÑ"
+ },
+ "GW": {
+ "name": "ГвинеÑ-БиÑау"
+ },
+ "GG": {
+ "name": "ГернÑи"
+ },
+ "GI": {
+ "name": "Гибралтар"
+ },
+ "HN": {
+ "name": "ГондураÑ"
+ },
+ "HK": {
+ "name": "Гонконг Хитой ММҲ"
+ },
+ "GD": {
+ "name": "Гренада"
+ },
+ "GL": {
+ "name": "ГренландиÑ"
+ },
+ "GR": {
+ "name": "ГрециÑ"
+ },
+ "GE": {
+ "name": "ГрузиÑ"
+ },
+ "GU": {
+ "name": "Гуам"
+ },
+ "EH": {
+ "name": "Ғарбий Саҳрои Кабир"
+ },
+ "DK": {
+ "name": "ДаниÑ"
+ },
+ "JE": {
+ "name": "ДжерÑи"
+ },
+ "DJ": {
+ "name": "Джибути"
+ },
+ "DG": {
+ "name": "Диего ГарÑиÑ"
+ },
+ "DM": {
+ "name": "Доминика"
+ },
+ "DO": {
+ "name": "Доминикан РеÑпубликаÑи"
+ },
+ "DZ": {
+ "name": "Жазоир"
+ },
+ "ZA": {
+ "name": "Жанубий Ðфрика"
+ },
+ "GS": {
+ "name": "Жанубий Ð”Ð¶Ð¾Ñ€Ð´Ð¶Ð¸Ñ Ð²Ð° Жанубий Сендвич ороллари"
+ },
+ "KR": {
+ "name": "Жанубий КореÑ"
+ },
+ "SS": {
+ "name": "Жанубий Судан"
+ },
+ "ZM": {
+ "name": "ЗамбиÑ"
+ },
+ "ZW": {
+ "name": "Зимбабве"
+ },
+ "ID": {
+ "name": "ИндонезиÑ"
+ },
+ "JO": {
+ "name": "ИорданиÑ"
+ },
+ "IE": {
+ "name": "ИрландиÑ"
+ },
+ "IQ": {
+ "name": "Ироқ"
+ },
+ "IS": {
+ "name": "ИÑландиÑ"
+ },
+ "ES": {
+ "name": "ИÑпаниÑ"
+ },
+ "IL": {
+ "name": "ИÑроил"
+ },
+ "IT": {
+ "name": "ИталиÑ"
+ },
+ "CV": {
+ "name": "Кабо-Верде"
+ },
+ "KY": {
+ "name": "Кайман ороллари"
+ },
+ "KH": {
+ "name": "Камбоджа"
+ },
+ "CM": {
+ "name": "Камерун"
+ },
+ "CA": {
+ "name": "Канада"
+ },
+ "IC": {
+ "name": "Канар ороллари"
+ },
+ "BQ": {
+ "name": "Кариб ÐидерландиÑÑи"
+ },
+ "KE": {
+ "name": "КениÑ"
+ },
+ "CY": {
+ "name": "Кипр"
+ },
+ "KI": {
+ "name": "Кирибати"
+ },
+ "CC": {
+ "name": "ÐšÐ¾ÐºÐ¾Ñ (Килинг) ороллари"
+ },
+ "CO": {
+ "name": "КолумбиÑ"
+ },
+ "KM": {
+ "name": "Комор ороллари"
+ },
+ "CG": {
+ "name": "Конго Браззавиль"
+ },
+ "CD": {
+ "name": "Конго-КиншаÑа"
+ },
+ "XK": {
+ "name": "КоÑово"
+ },
+ "CR": {
+ "name": "КоÑта-Рика"
+ },
+ "CI": {
+ "name": "Кот-д-Ивуар"
+ },
+ "CU": {
+ "name": "Куба"
+ },
+ "KW": {
+ "name": "Кувайт"
+ },
+ "CK": {
+ "name": "Кук ороллари"
+ },
+ "CW": {
+ "name": "КураÑао"
+ },
+ "QA": {
+ "name": "Қатар"
+ },
+ "KG": {
+ "name": "ҚирғизиÑтон"
+ },
+ "KZ": {
+ "name": "ҚозоғиÑтон"
+ },
+ "US": {
+ "name": "Қўшма Штатлар"
+ },
+ "LA": {
+ "name": "ЛаоÑ"
+ },
+ "LV": {
+ "name": "ЛатвиÑ"
+ },
+ "LS": {
+ "name": "ЛеÑото"
+ },
+ "LR": {
+ "name": "ЛибериÑ"
+ },
+ "LB": {
+ "name": "Ливан"
+ },
+ "LY": {
+ "name": "ЛивиÑ"
+ },
+ "LT": {
+ "name": "Литва"
+ },
+ "LI": {
+ "name": "Лихтенштейн"
+ },
+ "LU": {
+ "name": "ЛюкÑембург"
+ },
+ "MU": {
+ "name": "Маврикий"
+ },
+ "MR": {
+ "name": "МавританиÑ"
+ },
+ "MG": {
+ "name": "МадагаÑкар"
+ },
+ "YT": {
+ "name": "Майотта"
+ },
+ "MO": {
+ "name": "Макао Хитой ММҲ"
+ },
+ "MK": {
+ "name": "МакедониÑ"
+ },
+ "MW": {
+ "name": "Малави"
+ },
+ "MY": {
+ "name": "МалайзиÑ"
+ },
+ "ML": {
+ "name": "Мали"
+ },
+ "MV": {
+ "name": "Мальдив ороллари"
+ },
+ "MT": {
+ "name": "Мальта"
+ },
+ "CF": {
+ "name": "Марказий Ðфрика РеÑпубликаÑи"
+ },
+ "MA": {
+ "name": "Марокаш"
+ },
+ "MQ": {
+ "name": "Мартиника"
+ },
+ "MH": {
+ "name": "Маршал ороллари"
+ },
+ "MX": {
+ "name": "МекÑика"
+ },
+ "FM": {
+ "name": "МикронезиÑ"
+ },
+ "EG": {
+ "name": "МиÑÑ€"
+ },
+ "MZ": {
+ "name": "Мозамбик"
+ },
+ "MD": {
+ "name": "Молдова"
+ },
+ "MC": {
+ "name": "Монако"
+ },
+ "MS": {
+ "name": "МонтÑеррат"
+ },
+ "MN": {
+ "name": "МуғулиÑтон"
+ },
+ "BL": {
+ "name": "ÐœÑƒÒ›Ð°Ð´Ð´Ð°Ñ Ð’Ð°Ñ€Ñ„Ð°Ð»Ð¾Ð¼ÐµÐ¹"
+ },
+ "SH": {
+ "name": "ÐœÑƒÒ›Ð°Ð´Ð´Ð°Ñ Ð•Ð»ÐµÐ½Ð° ороллари"
+ },
+ "MM": {
+ "name": "МьÑнма (Бирма)"
+ },
+ "IM": {
+ "name": "ÐœÑн ороли"
+ },
+ "NA": {
+ "name": "ÐамибиÑ"
+ },
+ "NR": {
+ "name": "Ðауру"
+ },
+ "NP": {
+ "name": "Ðепал"
+ },
+ "NE": {
+ "name": "Ðигер"
+ },
+ "NG": {
+ "name": "ÐигериÑ"
+ },
+ "NL": {
+ "name": "ÐидерландиÑ"
+ },
+ "NI": {
+ "name": "Ðикарагуа"
+ },
+ "NU": {
+ "name": "Ðиуе"
+ },
+ "NO": {
+ "name": "ÐорвегиÑ"
+ },
+ "NF": {
+ "name": "Ðорфолк ороллари"
+ },
+ "AZ": {
+ "name": "Озарбайжон"
+ },
+ "DE": {
+ "name": "ОлмониÑ"
+ },
+ "PW": {
+ "name": "Палау"
+ },
+ "PA": {
+ "name": "Панама"
+ },
+ "PG": {
+ "name": "Папуа Янги ГвинеÑ"
+ },
+ "PY": {
+ "name": "Парагвай"
+ },
+ "PE": {
+ "name": "Перу"
+ },
+ "PN": {
+ "name": "Питкарин ороллари"
+ },
+ "PK": {
+ "name": "ПокиÑтон"
+ },
+ "PL": {
+ "name": "Польша"
+ },
+ "PT": {
+ "name": "ПортугалиÑ"
+ },
+ "PR": {
+ "name": "ПуÑрто-Рико"
+ },
+ "RE": {
+ "name": "Реюньон"
+ },
+ "CX": {
+ "name": "РождеÑтво ороли"
+ },
+ "RU": {
+ "name": "РоÑÑиÑ"
+ },
+ "RW": {
+ "name": "Руанда"
+ },
+ "RO": {
+ "name": "РуминиÑ"
+ },
+ "SJ": {
+ "name": "Савльбард ва Жан Маен"
+ },
+ "WS": {
+ "name": "Самоа"
+ },
+ "SM": {
+ "name": "Сан-Марино"
+ },
+ "ST": {
+ "name": "Сан-Томе ва ПринÑипи"
+ },
+ "SA": {
+ "name": "Ð¡Ð°ÑƒÐ´Ð¸Ñ ÐрабиÑтони"
+ },
+ "SZ": {
+ "name": "Свазиленд"
+ },
+ "EA": {
+ "name": "Сейта ва Мелилла"
+ },
+ "SC": {
+ "name": "Сейшел ороллари"
+ },
+ "SN": {
+ "name": "Сенегал"
+ },
+ "VC": {
+ "name": "Сент-ВинÑент ва Гренадин"
+ },
+ "KN": {
+ "name": "Сент-ÐšÐ¸Ñ‚Ñ Ð²Ð° ÐевиÑ"
+ },
+ "LC": {
+ "name": "Сент-ЛюÑиÑ"
+ },
+ "MF": {
+ "name": "Сент-Мартин"
+ },
+ "PM": {
+ "name": "Сент-Пьер ва Микелон"
+ },
+ "RS": {
+ "name": "СербиÑ"
+ },
+ "SG": {
+ "name": "Сингапур"
+ },
+ "SX": {
+ "name": "Синт-Маартен"
+ },
+ "SK": {
+ "name": "СловакиÑ"
+ },
+ "SI": {
+ "name": "СловениÑ"
+ },
+ "SB": {
+ "name": "Соломон ороллари"
+ },
+ "SO": {
+ "name": "Сомали"
+ },
+ "SD": {
+ "name": "Судан"
+ },
+ "SR": {
+ "name": "Суринам"
+ },
+ "SY": {
+ "name": "СуриÑ"
+ },
+ "SL": {
+ "name": "Сьерра-Леоне"
+ },
+ "TW": {
+ "name": "Тайван"
+ },
+ "TH": {
+ "name": "Тайланд"
+ },
+ "TZ": {
+ "name": "ТанзаниÑ"
+ },
+ "TG": {
+ "name": "Того"
+ },
+ "TJ": {
+ "name": "ТожикиÑтон"
+ },
+ "TK": {
+ "name": "Токелау"
+ },
+ "TO": {
+ "name": "Тонга"
+ },
+ "TT": {
+ "name": "Тринидад ва Тобаго"
+ },
+ "TA": {
+ "name": "ТриÑтан де Куна"
+ },
+ "TV": {
+ "name": "Тувалу"
+ },
+ "TN": {
+ "name": "ТуниÑ"
+ },
+ "TR": {
+ "name": "ТуркиÑ"
+ },
+ "TM": {
+ "name": "ТуркманиÑтон"
+ },
+ "TC": {
+ "name": "Ð¢ÑƒÑ€ÐºÑ Ð²Ð° ÐšÐ°Ð¹ÐºÐ¾Ñ Ð¾Ñ€Ð¾Ð»Ð»Ð°Ñ€Ð¸"
+ },
+ "UG": {
+ "name": "Уганда"
+ },
+ "UA": {
+ "name": "Украина"
+ },
+ "OM": {
+ "name": "Уммон"
+ },
+ "UY": {
+ "name": "Уругвай"
+ },
+ "WF": {
+ "name": "УÑÐ»Ð»Ð¸Ñ Ð²Ð° Футуна"
+ },
+ "UZ": {
+ "name": "ЎзбекиÑтон"
+ },
+ "PS": {
+ "name": "ФалаÑтин ҳудуди"
+ },
+ "FO": {
+ "name": "Фарер ороллари"
+ },
+ "FJ": {
+ "name": "Фижи ороллари"
+ },
+ "PH": {
+ "name": "Филиппин"
+ },
+ "FI": {
+ "name": "ФинлÑндиÑ"
+ },
+ "FK": {
+ "name": "Фолькленд ороллари"
+ },
+ "FR": {
+ "name": "ФранциÑ"
+ },
+ "TF": {
+ "name": "Ð¤Ñ€Ð°Ð½Ñ†Ð¸Ñ Ð¶Ð°Ð½ÑƒÐ±Ð¸Ð¹ худудлари"
+ },
+ "GF": {
+ "name": "Француз ГвианаÑи"
+ },
+ "PF": {
+ "name": "Француз ПолинезиÑÑи"
+ },
+ "CN": {
+ "name": "Хитой"
+ },
+ "HR": {
+ "name": "ХорватиÑ"
+ },
+ "IN": {
+ "name": "ҲиндиÑтон"
+ },
+ "TD": {
+ "name": "Чад"
+ },
+ "ME": {
+ "name": "ЧерногориÑ"
+ },
+ "CZ": {
+ "name": "Ð§ÐµÑ…Ð¸Ñ Ð ÐµÑпубликаÑи"
+ },
+ "CL": {
+ "name": "Чили"
+ },
+ "TL": {
+ "name": "Шарқий-Тимор"
+ },
+ "CH": {
+ "name": "ШвейцариÑ"
+ },
+ "SE": {
+ "name": "ШвециÑ"
+ },
+ "KP": {
+ "name": "Шимолий КореÑ"
+ },
+ "MP": {
+ "name": "Шимолий Марианна ороллари"
+ },
+ "LK": {
+ "name": "Шри-Ланка"
+ },
+ "EC": {
+ "name": "Эквадор"
+ },
+ "GQ": {
+ "name": "Экваториал ГвинеÑ"
+ },
+ "SV": {
+ "name": "Эль-Сальвадор"
+ },
+ "ER": {
+ "name": "ЭритреÑ"
+ },
+ "IR": {
+ "name": "Эрон"
+ },
+ "EE": {
+ "name": "ЭÑтониÑ"
+ },
+ "ET": {
+ "name": "ЭфиопиÑ"
+ },
+ "JM": {
+ "name": "Ямайка"
+ },
+ "YE": {
+ "name": "Яман"
+ },
+ "NZ": {
+ "name": "Янги ЗеландиÑ"
+ },
+ "NC": {
+ "name": "Янги КаледониÑ"
+ },
+ "JP": {
+ "name": "ЯпониÑ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/uz.json b/library/intl/resources/country/uz.json
new file mode 100644
index 000000000..9d0ba0099
--- /dev/null
+++ b/library/intl/resources/country/uz.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afgʻoniston"
+ },
+ "AX": {
+ "name": "Aland orollari"
+ },
+ "AL": {
+ "name": "Albaniya"
+ },
+ "AS": {
+ "name": "Amerika Samoasi"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AI": {
+ "name": "Angila"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AQ": {
+ "name": "Antarktika"
+ },
+ "AG": {
+ "name": "Antigua va Barbados"
+ },
+ "VI": {
+ "name": "AQSH Virdjiniya orollari"
+ },
+ "UM": {
+ "name": "AQSH yondosh orollari"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armaniston"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "BL": {
+ "name": "Avliyo Varfolomey"
+ },
+ "AU": {
+ "name": "Avstraliya"
+ },
+ "AT": {
+ "name": "Avstriya"
+ },
+ "BS": {
+ "name": "Bagama orollari"
+ },
+ "BH": {
+ "name": "Bahrayn"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgiya"
+ },
+ "BZ": {
+ "name": "Beliz"
+ },
+ "BY": {
+ "name": "Belorusiya"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "AE": {
+ "name": "Birlashgan Arab Amirliklari"
+ },
+ "GB": {
+ "name": "Birlashgan Qirollik"
+ },
+ "BG": {
+ "name": "Bolgariya"
+ },
+ "BO": {
+ "name": "Boliviya"
+ },
+ "BA": {
+ "name": "Bosniya va Gertsegovina"
+ },
+ "BW": {
+ "name": "Botsvanna"
+ },
+ "BR": {
+ "name": "Braziliya"
+ },
+ "IO": {
+ "name": "Britaniya Hind okeani hududi"
+ },
+ "VG": {
+ "name": "Britaniya Virdjiniya orollari"
+ },
+ "BN": {
+ "name": "Bruney"
+ },
+ "BF": {
+ "name": "Burkina-Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butan"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "ME": {
+ "name": "Chernogoriya"
+ },
+ "CZ": {
+ "name": "Chexiya Respublikasi"
+ },
+ "CL": {
+ "name": "Chili"
+ },
+ "DK": {
+ "name": "Daniya"
+ },
+ "DG": {
+ "name": "Diyego Garsiya"
+ },
+ "JE": {
+ "name": "Djersi"
+ },
+ "DJ": {
+ "name": "Djibuti"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "DO": {
+ "name": "Dominikan Respublikasi"
+ },
+ "ET": {
+ "name": "Efiopiya"
+ },
+ "EC": {
+ "name": "Ekvador"
+ },
+ "GQ": {
+ "name": "Ekvatorial Gvineya"
+ },
+ "ER": {
+ "name": "Eritreya"
+ },
+ "IR": {
+ "name": "Eron"
+ },
+ "EE": {
+ "name": "Estoniya"
+ },
+ "PS": {
+ "name": "Falastin hududi"
+ },
+ "FO": {
+ "name": "Farer orollari"
+ },
+ "FJ": {
+ "name": "Fiji orollari"
+ },
+ "PH": {
+ "name": "Filippin"
+ },
+ "FI": {
+ "name": "Finlyandiya"
+ },
+ "FK": {
+ "name": "Folklend orollari"
+ },
+ "FR": {
+ "name": "Fransiya"
+ },
+ "TF": {
+ "name": "Frantsiya janubiy xududlari"
+ },
+ "GF": {
+ "name": "Frantsuz Gvianasi"
+ },
+ "PF": {
+ "name": "Frantsuz Polineziyasi"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "HT": {
+ "name": "Gaiti"
+ },
+ "GM": {
+ "name": "Gambiya"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GY": {
+ "name": "Gayana"
+ },
+ "DE": {
+ "name": "Germaniya"
+ },
+ "GG": {
+ "name": "Gernsi"
+ },
+ "EH": {
+ "name": "Gʻarbiy Sahroi Kabir"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "HN": {
+ "name": "Gonduras"
+ },
+ "HK": {
+ "name": "Gonkong Xitoy MMH"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grenlandiya"
+ },
+ "GR": {
+ "name": "Gretsiya"
+ },
+ "GE": {
+ "name": "Gruziya"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GP": {
+ "name": "Gvadelupe"
+ },
+ "GT": {
+ "name": "Gvatemala"
+ },
+ "GN": {
+ "name": "Gvineya"
+ },
+ "GW": {
+ "name": "Gvineya-Bisau"
+ },
+ "IN": {
+ "name": "Hindiston"
+ },
+ "ID": {
+ "name": "Indoneziya"
+ },
+ "JO": {
+ "name": "Iordaniya"
+ },
+ "IE": {
+ "name": "Irlandiya"
+ },
+ "IQ": {
+ "name": "Iroq"
+ },
+ "IS": {
+ "name": "Islandiya"
+ },
+ "ES": {
+ "name": "Ispaniya"
+ },
+ "IL": {
+ "name": "Isroil"
+ },
+ "IT": {
+ "name": "Italiya"
+ },
+ "ZA": {
+ "name": "Janubi-Afrika"
+ },
+ "GS": {
+ "name": "Janubiy Djordjiya va Janubiy Sendvich orollari"
+ },
+ "KR": {
+ "name": "Janubiy Koreya"
+ },
+ "SS": {
+ "name": "Janubiy Sudan"
+ },
+ "DZ": {
+ "name": "Jazoir"
+ },
+ "CV": {
+ "name": "Kabo-Verde"
+ },
+ "KH": {
+ "name": "Kambodja"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanar orollari"
+ },
+ "BQ": {
+ "name": "Karib Niderlandiyasi"
+ },
+ "KY": {
+ "name": "Kayman orollari"
+ },
+ "KE": {
+ "name": "Keniya"
+ },
+ "CY": {
+ "name": "Kipr"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CC": {
+ "name": "Kokos (Kiling) orollari"
+ },
+ "CO": {
+ "name": "Kolumbiya"
+ },
+ "KM": {
+ "name": "Komor orollari"
+ },
+ "CG": {
+ "name": "Kongo Brazzavil"
+ },
+ "CD": {
+ "name": "Kongo-Kinshasa"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kosta-Rika"
+ },
+ "CI": {
+ "name": "Kot-d-Ivuar"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CK": {
+ "name": "Kuk orollari"
+ },
+ "CW": {
+ "name": "Kurasao"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LV": {
+ "name": "Latviya"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LR": {
+ "name": "Liberiya"
+ },
+ "LT": {
+ "name": "Litva"
+ },
+ "LB": {
+ "name": "Livan"
+ },
+ "LY": {
+ "name": "Liviya"
+ },
+ "LI": {
+ "name": "Lixtenshteyn"
+ },
+ "LU": {
+ "name": "Lyuksemburg"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MO": {
+ "name": "Makao Xitoy MMH"
+ },
+ "MK": {
+ "name": "Makedoniya"
+ },
+ "MW": {
+ "name": "Malavi"
+ },
+ "MY": {
+ "name": "Malayziya"
+ },
+ "MV": {
+ "name": "Maldiv orollari"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "CF": {
+ "name": "Markaziy Afrika Respublikasi"
+ },
+ "MA": {
+ "name": "Marokash"
+ },
+ "MH": {
+ "name": "Marshal orollari"
+ },
+ "MQ": {
+ "name": "Martinika"
+ },
+ "MU": {
+ "name": "Mavrikiy"
+ },
+ "MR": {
+ "name": "Mavritaniya"
+ },
+ "YT": {
+ "name": "Mayotta"
+ },
+ "MX": {
+ "name": "Meksika"
+ },
+ "IM": {
+ "name": "Men oroli"
+ },
+ "FM": {
+ "name": "Mikroneziya"
+ },
+ "EG": {
+ "name": "Misr"
+ },
+ "MN": {
+ "name": "Mo‘g‘uliston"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambik"
+ },
+ "SH": {
+ "name": "Muqaddas Yelena orollari"
+ },
+ "MM": {
+ "name": "Myanma (Birma)"
+ },
+ "NA": {
+ "name": "Namibiya"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NL": {
+ "name": "Niderlandiya"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeriya"
+ },
+ "NI": {
+ "name": "Nikaragua"
+ },
+ "NU": {
+ "name": "Niuye"
+ },
+ "NF": {
+ "name": "Norfolk orollari"
+ },
+ "NO": {
+ "name": "Norvegiya"
+ },
+ "UZ": {
+ "name": "Oʻzbekiston"
+ },
+ "OM": {
+ "name": "Omon"
+ },
+ "AZ": {
+ "name": "Ozarbayjon"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Yangi Gvineya"
+ },
+ "PY": {
+ "name": "Paragvay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkarin orollari"
+ },
+ "PK": {
+ "name": "Pokiston"
+ },
+ "PL": {
+ "name": "Polsha"
+ },
+ "PT": {
+ "name": "Portugaliya"
+ },
+ "PR": {
+ "name": "Puerto-Riko"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "KG": {
+ "name": "Qirgʻiziston"
+ },
+ "US": {
+ "name": "Qoʻshma Shtatlar"
+ },
+ "KZ": {
+ "name": "Qozogʻiston"
+ },
+ "KW": {
+ "name": "Quveyt"
+ },
+ "RE": {
+ "name": "Reyunon"
+ },
+ "CX": {
+ "name": "Rojdestvo oroli"
+ },
+ "RU": {
+ "name": "Rossiya"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Ruminiya"
+ },
+ "SV": {
+ "name": "Salvador"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San-Marino"
+ },
+ "ST": {
+ "name": "San-Tome va Prinsipi"
+ },
+ "SA": {
+ "name": "Saudiya Arabistoni"
+ },
+ "SJ": {
+ "name": "Savlbard va Jan Mayen"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "KN": {
+ "name": "Sent-Kits va Nevis"
+ },
+ "LC": {
+ "name": "Sent-Lyusiya"
+ },
+ "MF": {
+ "name": "Sent-Martin"
+ },
+ "PM": {
+ "name": "Sent-Pyer va Mikelon"
+ },
+ "VC": {
+ "name": "Sent-Vinsent va Grenadin"
+ },
+ "RS": {
+ "name": "Serbiya"
+ },
+ "SC": {
+ "name": "Seyshel orollari"
+ },
+ "EA": {
+ "name": "Seyta va Melilla"
+ },
+ "TL": {
+ "name": "Sharqiy-Timor"
+ },
+ "KP": {
+ "name": "Shimoliy Koreya"
+ },
+ "MP": {
+ "name": "Shimoliy Marianna orollari"
+ },
+ "LK": {
+ "name": "Shri-Lanka"
+ },
+ "SE": {
+ "name": "Shvetsiya"
+ },
+ "CH": {
+ "name": "Shveysariya"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Martin"
+ },
+ "SK": {
+ "name": "Slovakiya"
+ },
+ "SI": {
+ "name": "Sloveniya"
+ },
+ "SB": {
+ "name": "Solomon orollari"
+ },
+ "SO": {
+ "name": "Somali"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Surinam"
+ },
+ "SY": {
+ "name": "Suriya"
+ },
+ "SZ": {
+ "name": "Svazilend"
+ },
+ "SL": {
+ "name": "Syerra-Leone"
+ },
+ "TZ": {
+ "name": "Tanzaniya"
+ },
+ "TH": {
+ "name": "Tayland"
+ },
+ "TW": {
+ "name": "Tayvan"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TJ": {
+ "name": "Tojikiston"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad va Tobago"
+ },
+ "TA": {
+ "name": "Tristan de Kuna"
+ },
+ "TN": {
+ "name": "Tunis"
+ },
+ "TR": {
+ "name": "Turkiya"
+ },
+ "TM": {
+ "name": "Turkmaniston"
+ },
+ "TC": {
+ "name": "Turks va Kaykos orollari"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "WF": {
+ "name": "Uellis va Futuna"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraina"
+ },
+ "UY": {
+ "name": "Urugvay"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikan"
+ },
+ "VE": {
+ "name": "Venesuela"
+ },
+ "HU": {
+ "name": "Vengriya"
+ },
+ "AC": {
+ "name": "Vozneseniye oroli"
+ },
+ "VN": {
+ "name": "Vyetnam"
+ },
+ "CN": {
+ "name": "Xitoy"
+ },
+ "HR": {
+ "name": "Xorvatiya"
+ },
+ "YE": {
+ "name": "Yaman"
+ },
+ "JM": {
+ "name": "Yamayka"
+ },
+ "NC": {
+ "name": "Yangi Kaledoniya"
+ },
+ "NZ": {
+ "name": "Yangi Zelandiya"
+ },
+ "JP": {
+ "name": "Yaponiya"
+ },
+ "ZM": {
+ "name": "Zambiya"
+ },
+ "ZW": {
+ "name": "Zimbabve"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/vai-Latn.json b/library/intl/resources/country/vai-Latn.json
new file mode 100644
index 000000000..c03ea40b4
--- /dev/null
+++ b/library/intl/resources/country/vai-Latn.json
@@ -0,0 +1,761 @@
+{
+ "AL": {
+ "name": "Abhaniya"
+ },
+ "AF": {
+ "name": "Afigándesitaŋ"
+ },
+ "ZA": {
+ "name": "Afirika Kɔi Leŋŋɛ Lɔ"
+ },
+ "CF": {
+ "name": "Ãfíríka Lumaã TÉ› Boloe"
+ },
+ "DZ": {
+ "name": "Agiriya"
+ },
+ "IS": {
+ "name": "Ãisi Lumaã"
+ },
+ "AR": {
+ "name": "Ajɛŋtína"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AM": {
+ "name": "Améniya"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AD": {
+ "name": "Aŋdóra"
+ },
+ "AI": {
+ "name": "Aŋgíla"
+ },
+ "AO": {
+ "name": "Aŋgóla"
+ },
+ "AG": {
+ "name": "AÅ‹tígwa Æahabhuda"
+ },
+ "IE": {
+ "name": "Ãre Lumaã"
+ },
+ "AW": {
+ "name": "Arubha"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "CD": {
+ "name": "Avorekoo"
+ },
+ "AZ": {
+ "name": "Azabhaijaŋ"
+ },
+ "BS": {
+ "name": "Bahámasi"
+ },
+ "BB": {
+ "name": "Bhabhedo"
+ },
+ "BD": {
+ "name": "Bhangiladɛ̀shi"
+ },
+ "IL": {
+ "name": "Bhanísiláila"
+ },
+ "BH": {
+ "name": "Bharɛŋ"
+ },
+ "BZ": {
+ "name": "Bheliz"
+ },
+ "BE": {
+ "name": "Bhɛgiyɔŋ"
+ },
+ "BY": {
+ "name": "Bhɛlarusi"
+ },
+ "BM": {
+ "name": "Bhɛmuda"
+ },
+ "BJ": {
+ "name": "Bhɛni"
+ },
+ "BF": {
+ "name": "Bhokina Fáso"
+ },
+ "BO": {
+ "name": "Bholiviya"
+ },
+ "BW": {
+ "name": "Bhosuwana"
+ },
+ "BG": {
+ "name": "Bhɔgeriya"
+ },
+ "BA": {
+ "name": "Bhɔsiniya"
+ },
+ "BR": {
+ "name": "Bhurazeli"
+ },
+ "BI": {
+ "name": "Bhurundi"
+ },
+ "BN": {
+ "name": "Bhurunɛĩ"
+ },
+ "BT": {
+ "name": "Bhutaŋ"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chádi"
+ },
+ "CN": {
+ "name": "Cháína"
+ },
+ "CL": {
+ "name": "Chéli"
+ },
+ "CZ": {
+ "name": "Chɛki Boloe"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Danimaha"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Domíiníka"
+ },
+ "DO": {
+ "name": "Domíiníka Æoloe"
+ },
+ "GQ": {
+ "name": "Dúúnyá Tɛ Giini"
+ },
+ "EC": {
+ "name": "ÆÌkúwédÉ”"
+ },
+ "SV": {
+ "name": "ÆlÉ› SávádÉ”"
+ },
+ "ER": {
+ "name": "Æritera"
+ },
+ "EE": {
+ "name": "Æsitóninya"
+ },
+ "FK": {
+ "name": "Fáháki Luma Tiŋŋɛ"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "PH": {
+ "name": "Félepiŋ"
+ },
+ "FR": {
+ "name": "Fɛŋsi"
+ },
+ "GF": {
+ "name": "Fɛŋsi Giwana"
+ },
+ "PF": {
+ "name": "Fɛŋsi Polinísiya"
+ },
+ "FJ": {
+ "name": "Fíji"
+ },
+ "FI": {
+ "name": "Fiŋlɛŋ"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gabhɔŋ"
+ },
+ "GM": {
+ "name": "Gambiya"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "SL": {
+ "name": "Gbeya BahawÉ”"
+ },
+ "GN": {
+ "name": "Gini"
+ },
+ "GW": {
+ "name": "Gini Bhisawo"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GD": {
+ "name": "Gurinéda"
+ },
+ "GP": {
+ "name": "Guwadelupe"
+ },
+ "GU": {
+ "name": "Guwami"
+ },
+ "GT": {
+ "name": "Guwatɛmala"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Háiti"
+ },
+ "GR": {
+ "name": "Hɛlɛŋ"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HN": {
+ "name": "Hɔndura"
+ },
+ "HU": {
+ "name": "HÉ”Ìngare"
+ },
+ "IN": {
+ "name": "Ãndiya"
+ },
+ "ID": {
+ "name": "Ãndonisiya"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "IR": {
+ "name": "Iraŋ"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IT": {
+ "name": "Ãtali"
+ },
+ "ET": {
+ "name": "Ãtiyópiya"
+ },
+ "DE": {
+ "name": "Jamáĩ"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "GL": {
+ "name": "Jamba Kuwa Lumaã"
+ },
+ "JP": {
+ "name": "Japaŋ"
+ },
+ "VG": {
+ "name": "Jengéesi Bhɛɛ Lɔ Musu Tiŋŋɛ"
+ },
+ "IO": {
+ "name": "Jengéesi Gbawoe Ãndiya KÉ”iyÉ› LÉ”"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibhurata"
+ },
+ "DJ": {
+ "name": "Jibhuti"
+ },
+ "JO": {
+ "name": "Jɔɔdaŋ"
+ },
+ "GE": {
+ "name": "Jɔɔjiya"
+ },
+ "NC": {
+ "name": "Kalidoninya Námaá"
+ },
+ "CM": {
+ "name": "Kameruŋ"
+ },
+ "CA": {
+ "name": "Kánáda"
+ },
+ "KH": {
+ "name": "Kaŋbhodiya"
+ },
+ "QA": {
+ "name": "Kataha"
+ },
+ "KZ": {
+ "name": "Kazasitaŋ"
+ },
+ "KY": {
+ "name": "Keemaŋ Tiŋŋɛ"
+ },
+ "KE": {
+ "name": "Kénya"
+ },
+ "CV": {
+ "name": "Kepi Vɛdi Tiŋŋɛ"
+ },
+ "KG": {
+ "name": "Kigisitaŋ"
+ },
+ "KI": {
+ "name": "Kiribhati"
+ },
+ "CU": {
+ "name": "Kiyubha"
+ },
+ "CI": {
+ "name": "Kódivówa"
+ },
+ "CK": {
+ "name": "Kóki Tiŋŋɛ"
+ },
+ "KM": {
+ "name": "Komorosi"
+ },
+ "CG": {
+ "name": "Kóngo"
+ },
+ "HR": {
+ "name": "Koresiya"
+ },
+ "KP": {
+ "name": "Koriya Kɔi Kaŋndɔ"
+ },
+ "KR": {
+ "name": "Koriya Kɔi Leŋŋɛ Lɔ"
+ },
+ "CR": {
+ "name": "Kósíta Ríko"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "MP": {
+ "name": "Kɔi Kaŋndɔ Mariyana Tiŋŋɛ"
+ },
+ "CO": {
+ "name": "Kɔlɔmbiya"
+ },
+ "KW": {
+ "name": "Kuweti"
+ },
+ "SA": {
+ "name": "Lahabu"
+ },
+ "LR": {
+ "name": "Laibhiya"
+ },
+ "LV": {
+ "name": "Lativiya"
+ },
+ "LA": {
+ "name": "Lawosi"
+ },
+ "LB": {
+ "name": "LebhanÉ”"
+ },
+ "LY": {
+ "name": "Lebhiya"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LS": {
+ "name": "Lisóto"
+ },
+ "LT": {
+ "name": "Lituweninya"
+ },
+ "LU": {
+ "name": "LusimbÉ”"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madagasita"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malesiya"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MV": {
+ "name": "Malidavi"
+ },
+ "MT": {
+ "name": "Malita"
+ },
+ "MK": {
+ "name": "Masedoninya"
+ },
+ "MH": {
+ "name": "Masha Tiŋŋɛ"
+ },
+ "MQ": {
+ "name": "Matiniki"
+ },
+ "YT": {
+ "name": "Mavote"
+ },
+ "MX": {
+ "name": "Mɛsíko"
+ },
+ "FM": {
+ "name": "Mikonisiya"
+ },
+ "EG": {
+ "name": "Míséla"
+ },
+ "MM": {
+ "name": "Miyamaha"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MZ": {
+ "name": "Mozambiki"
+ },
+ "MD": {
+ "name": "Mɔlidova"
+ },
+ "MC": {
+ "name": "Mɔnako"
+ },
+ "MN": {
+ "name": "Mɔngoliya"
+ },
+ "MU": {
+ "name": "Mɔreshɔ"
+ },
+ "MR": {
+ "name": "Mɔretaninya"
+ },
+ "MA": {
+ "name": "Mɔroko"
+ },
+ "MS": {
+ "name": "Mɔserati"
+ },
+ "NE": {
+ "name": "Naĩja"
+ },
+ "NG": {
+ "name": "Naĩjiriya"
+ },
+ "NA": {
+ "name": "Namibiya"
+ },
+ "NP": {
+ "name": "Nepa"
+ },
+ "NL": {
+ "name": "Nidɔlɛŋ"
+ },
+ "NI": {
+ "name": "Nikaraguwa"
+ },
+ "NU": {
+ "name": "Niwe"
+ },
+ "NR": {
+ "name": "Noru"
+ },
+ "NF": {
+ "name": "Nɔfɔ Tiŋŋɛ"
+ },
+ "NO": {
+ "name": "Nɔɔwe"
+ },
+ "OM": {
+ "name": "Omaŋ"
+ },
+ "AT": {
+ "name": "ƆÌsituwa"
+ },
+ "AU": {
+ "name": "Ɔsituwéeliya"
+ },
+ "PK": {
+ "name": "Pakisitaŋ"
+ },
+ "PS": {
+ "name": "Palesitininya Tele Jii Kɔiyɛ lá hĩ Gaza"
+ },
+ "PW": {
+ "name": "Palo"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "ES": {
+ "name": "Panyɛĩ"
+ },
+ "PG": {
+ "name": "Papuwa Gini Námaá"
+ },
+ "PY": {
+ "name": "Paragɔe"
+ },
+ "PE": {
+ "name": "Pɛru"
+ },
+ "PN": {
+ "name": "Pitikɛŋ"
+ },
+ "PR": {
+ "name": "Piyuto Riko"
+ },
+ "PL": {
+ "name": "Pólɛŋ"
+ },
+ "US": {
+ "name": "Poo"
+ },
+ "VI": {
+ "name": "Poo Bhɛɛ lɔ Musu Tiŋŋɛ"
+ },
+ "AS": {
+ "name": "Poo Sambowa"
+ },
+ "PT": {
+ "name": "Potokíi"
+ },
+ "RW": {
+ "name": "Rawunda"
+ },
+ "RE": {
+ "name": "Renyɔɔ̃"
+ },
+ "RO": {
+ "name": "Romininya"
+ },
+ "RU": {
+ "name": "Rɔshiya"
+ },
+ "CY": {
+ "name": "Saɛpurɔ"
+ },
+ "WS": {
+ "name": "Samowa"
+ },
+ "SM": {
+ "name": "Saŋ Marindo"
+ },
+ "ST": {
+ "name": "Sawo Tombe É“É› a Gbawoe"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seshɛɛ"
+ },
+ "SG": {
+ "name": "Síingapoo"
+ },
+ "SN": {
+ "name": "Sinigaha"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SH": {
+ "name": "Siŋ Hɛlina"
+ },
+ "KN": {
+ "name": "SiÅ‹ Kisi É“É›Ì Nevisi"
+ },
+ "LC": {
+ "name": "Siŋ Lusiya"
+ },
+ "PM": {
+ "name": "SiÅ‹ PiiyÉ› É“É›Ì Mikelɔŋ"
+ },
+ "VC": {
+ "name": "Siŋ Viŋsi"
+ },
+ "SY": {
+ "name": "Síyaŋ"
+ },
+ "SO": {
+ "name": "Somaliya"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudɛŋ"
+ },
+ "SB": {
+ "name": "Sulaimaãna Tiŋŋɛ"
+ },
+ "SK": {
+ "name": "Sulovakiya"
+ },
+ "SI": {
+ "name": "Suloveninya"
+ },
+ "LK": {
+ "name": "Suri Laŋka"
+ },
+ "SR": {
+ "name": "Surinambe"
+ },
+ "SZ": {
+ "name": "Suwazi Lumaã"
+ },
+ "CH": {
+ "name": "Suweza Lumaã"
+ },
+ "SE": {
+ "name": "Suwidɛŋ"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TH": {
+ "name": "Tai Lumaã"
+ },
+ "TW": {
+ "name": "Taiwaŋ"
+ },
+ "TJ": {
+ "name": "Tajikisitaŋ"
+ },
+ "TZ": {
+ "name": "Taŋzaninya"
+ },
+ "TL": {
+ "name": "Tele ÆÉ”Ì Timɔɔ̃"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelo"
+ },
+ "TO": {
+ "name": "Tɔnga"
+ },
+ "TR": {
+ "name": "TÉ”ÌÉ”Ìki"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TM": {
+ "name": "Tukimɛnisitaŋ"
+ },
+ "TC": {
+ "name": "Tukisi ɓɛ̀ Kaikóosi Tiŋŋɛ"
+ },
+ "TN": {
+ "name": "Tunisiya"
+ },
+ "TT": {
+ "name": "Turindeda É“É›Ì Tobhego"
+ },
+ "TV": {
+ "name": "Tuválu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VU": {
+ "name": "Vanuwátu"
+ },
+ "VA": {
+ "name": "VatikaÅ‹ Æoloe"
+ },
+ "VE": {
+ "name": "Vɛnɛzuwela"
+ },
+ "VN": {
+ "name": "Viyanami"
+ },
+ "WF": {
+ "name": "Walísi"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemɛni"
+ },
+ "UZ": {
+ "name": "Yubhɛkisitaŋ"
+ },
+ "UG": {
+ "name": "Yuganda"
+ },
+ "UA": {
+ "name": "Yukuréŋ"
+ },
+ "AE": {
+ "name": "YunaitÉ› Arabhi Æmire"
+ },
+ "GB": {
+ "name": "Yunaitɛ Kíŋdɔŋ"
+ },
+ "UY": {
+ "name": "Yuwegɔwe"
+ },
+ "ZM": {
+ "name": "Zambiya"
+ },
+ "NZ": {
+ "name": "Zilɛŋ Námaá"
+ },
+ "ZW": {
+ "name": "Zimbabhuwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/vai.json b/library/intl/resources/country/vai.json
new file mode 100644
index 000000000..108a35283
--- /dev/null
+++ b/library/intl/resources/country/vai.json
@@ -0,0 +1,761 @@
+{
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VA": {
+ "name": "Vatican City"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "ER": {
+ "name": "ꔀꔸꔳꕟ"
+ },
+ "BZ": {
+ "name": "ꔆꔷꔘ"
+ },
+ "SL": {
+ "name": "ꔋꕩ ꕒꕌꖺ ꕸꖃꔀ"
+ },
+ "TL": {
+ "name": "ꔎꔒ ꗃ ꔳꗞꖻ"
+ },
+ "LY": {
+ "name": "ꔒꔫꕩ"
+ },
+ "LB": {
+ "name": "ꔒꕑꗟꘋ"
+ },
+ "RE": {
+ "name": "ꔓꗠꖻ"
+ },
+ "SC": {
+ "name": "ꔖꗼꔷ"
+ },
+ "CL": {
+ "name": "ꔚꔷ"
+ },
+ "IO": {
+ "name": "ꔛꔟꔻ ꔤꔺꕩ ꗛꔤꘂ ꕗꕴꔀ ꕮ"
+ },
+ "VG": {
+ "name": "ꔛꔟꔻ ê—©ê—¡ ê— ê–·ê–¬ ꔳꘋꗣ"
+ },
+ "JP": {
+ "name": "ꔛꗨꗢ"
+ },
+ "YE": {
+ "name": "ê”ꘈꘋ"
+ },
+ "KY": {
+ "name": "ꔞꔀꕮꘋ ꔳꘋꗣ"
+ },
+ "CV": {
+ "name": "ꔞꔪ ꗲꔵ ꔳꘋꗣ"
+ },
+ "KE": {
+ "name": "ꔞꕰ"
+ },
+ "ET": {
+ "name": "ꔤꔳꖎꔪꕩ"
+ },
+ "IN": {
+ "name": "ꔤꔺꕩ"
+ },
+ "IT": {
+ "name": "ꔤꕚꔷ"
+ },
+ "IQ": {
+ "name": "ꔤꕟꕃ"
+ },
+ "IR": {
+ "name": "ꔤꕟꘋ"
+ },
+ "ID": {
+ "name": "ꔤꖆꕇꔻꕩ"
+ },
+ "PN": {
+ "name": "ꔪꔳꕪꕆ"
+ },
+ "PR": {
+ "name": "ꔪꖳꕿ ꔸê–"
+ },
+ "PH": {
+ "name": "ꔱꔒꔪꘋ"
+ },
+ "FJ": {
+ "name": "ꔱꔤꕀ"
+ },
+ "FI": {
+ "name": "ꔱꘋ ꖨꕮꕊ"
+ },
+ "LS": {
+ "name": "ꔷꖇꕿ"
+ },
+ "LT": {
+ "name": "ꔷꖤꔃꕇꕰ"
+ },
+ "LI": {
+ "name": "ꔷꗿꘋꔻꗳꘋ"
+ },
+ "SN": {
+ "name": "ꔻꕇꕭꕌ"
+ },
+ "SY": {
+ "name": "ꔻꕩꘋ"
+ },
+ "SG": {
+ "name": "ꔻꕬꕶꕱ"
+ },
+ "SI": {
+ "name": "ꔻꖃê”ꕇꕰ"
+ },
+ "SK": {
+ "name": "ꔻꖃꕙꕃꕩ"
+ },
+ "PM": {
+ "name": "ꔻꘋ ꔪꘂ ê—ª ꕆꔞê—ꘋ"
+ },
+ "VC": {
+ "name": "ꔻꘋ ꔲꘋꔻꘋ ꗪ ꖶꔓꕯꔵꘋ ꖸ"
+ },
+ "KN": {
+ "name": "ꔻꘋ ꕃꔳꔻ ꗪ ꔕꔲꔻ"
+ },
+ "LC": {
+ "name": "ꔻꘋ ꖨꔻꕩ"
+ },
+ "SH": {
+ "name": "ꔻꘋ ꗥꔷꕯ"
+ },
+ "NZ": {
+ "name": "ꔽꔤ ꖨꕮ ꕯꕮꕊ"
+ },
+ "ZW": {
+ "name": "ꔽꕓꖜꔃ"
+ },
+ "DJ": {
+ "name": "ꕀꖜꔳ"
+ },
+ "GI": {
+ "name": "ꕀꖜꕟꕚ"
+ },
+ "KI": {
+ "name": "ꕃꔸꕑꔳ"
+ },
+ "KG": {
+ "name": "ꕃꕅꔻꕚꘋ"
+ },
+ "CU": {
+ "name": "ꕃꖳꕑ"
+ },
+ "GN": {
+ "name": "ꕅꔤꕇ"
+ },
+ "GW": {
+ "name": "ꕅꔤꕇ ꔫꕢꕴ"
+ },
+ "EG": {
+ "name": "ꕆꔖꕞ"
+ },
+ "MM": {
+ "name": "ꕆꕩꘋꕮ"
+ },
+ "FM": {
+ "name": "ꕆê–ꕇꔻꕩ"
+ },
+ "NP": {
+ "name": "ꕇê•ê”·"
+ },
+ "NI": {
+ "name": "ꕇꕪꕟꖶꕎ"
+ },
+ "IE": {
+ "name": "ꕉꔓ ꖨꕮꕊ"
+ },
+ "IS": {
+ "name": "ꕉꔤꔻ ꖨꕮꕊ"
+ },
+ "ZA": {
+ "name": "ꕉꔱꔸꕪ ꗛꔤ ꔒꘋꗣ ê— ê•¸ê–ƒê”€"
+ },
+ "CF": {
+ "name": "ꕉꔱꔸꕪ ꗳ ꗳ ꕸꖃꔀ"
+ },
+ "AF": {
+ "name": "ꕉꔱꕭꔕꔻꕚꘋ"
+ },
+ "DZ": {
+ "name": "ꕉꔷꔠꔸꕩ"
+ },
+ "AL": {
+ "name": "ꕉꔷꕑꕇꕩ"
+ },
+ "AI": {
+ "name": "ꕉꕄꕞ"
+ },
+ "AM": {
+ "name": "ꕉꕆꕯ"
+ },
+ "AZ": {
+ "name": "ꕉꕤꕑꔤꕧꘋ"
+ },
+ "AD": {
+ "name": "ꕉꖆꕟ"
+ },
+ "AO": {
+ "name": "ꕉê–ê•ž"
+ },
+ "AW": {
+ "name": "ꕉꖩꕑ"
+ },
+ "AR": {
+ "name": "ꕉꘀꘋꔳꕯ"
+ },
+ "AG": {
+ "name": "ꕉꘋꔳꖶꕎ ꗪ ꕑꖜꕜ"
+ },
+ "HT": {
+ "name": "ꕌꔤꔳ"
+ },
+ "WF": {
+ "name": "ꕎꔷꔻ ꗪ ꖢꖤꕯ"
+ },
+ "PS": {
+ "name": "ê•ê”’ꔻꔳꕯ ꔎꔒ ꕀꔤ ꗛꔤ ê•ž ê—± ê—ª ꕭꕌꕤ"
+ },
+ "PK": {
+ "name": "ê•ê•ƒê”»ê•šê˜‹"
+ },
+ "PY": {
+ "name": "ê•ê•Ÿê—ꔀ"
+ },
+ "PA": {
+ "name": "ê•ê•¯ê•®"
+ },
+ "PW": {
+ "name": "ê•ê–ƒ"
+ },
+ "PG": {
+ "name": "ê•ê–›ê•Ž ꕅꔤꕇ ꕯꕮꕊ"
+ },
+ "ES": {
+ "name": "ê•ê˜Šê”§"
+ },
+ "BB": {
+ "name": "ꕑꔆê–ê”»"
+ },
+ "BD": {
+ "name": "ꕑꕅꕞꗵꔼ"
+ },
+ "IL": {
+ "name": "ꕑꕇꔻꕞꔤꕞ"
+ },
+ "BS": {
+ "name": "ꕑꕌꕮꔻ"
+ },
+ "BH": {
+ "name": "ꕑꗸꘋ"
+ },
+ "FK": {
+ "name": "ꕘꔷꕃ ꖨꕮ ꔳꘋꗣ"
+ },
+ "VE": {
+ "name": "ꕙꔳꕪꘋ ꕸꖃꔀ"
+ },
+ "VU": {
+ "name": "ꕙꖸꕎꖤ"
+ },
+ "TH": {
+ "name": "ꕚꔤ ꖨꕮꕊ"
+ },
+ "TW": {
+ "name": "ꕚꔤꕎꘋ"
+ },
+ "TJ": {
+ "name": "ꕚꕀꕃꔻꕚꘋ"
+ },
+ "TV": {
+ "name": "ꕚꖣꖨ"
+ },
+ "TZ": {
+ "name": "ꕚꘋꕤꕇꕰ"
+ },
+ "DK": {
+ "name": "ꕜꕇꕮꕃ"
+ },
+ "LR": {
+ "name": "ꕞꔤꔫꕩ"
+ },
+ "LV": {
+ "name": "ꕞꔳꔲꕩ"
+ },
+ "SA": {
+ "name": "ê•žê•Œê– ê•¸ê–ƒê”€"
+ },
+ "LA": {
+ "name": "ê•žê•´ê”»"
+ },
+ "RW": {
+ "name": "ꕟꖙꕡ"
+ },
+ "ST": {
+ "name": "ꕢꕴ ꕿꔈ ꗪ ꕉ ꕮꔧ ꕗꕴꔀ"
+ },
+ "WS": {
+ "name": "ꕢꕹꖙꕉ"
+ },
+ "CY": {
+ "name": "ꕢꗡꖛê—ê”»"
+ },
+ "ZM": {
+ "name": "ꕤꔭꕩ"
+ },
+ "CN": {
+ "name": "ꕦꔤꕯ"
+ },
+ "TD": {
+ "name": "ꕦꔵ"
+ },
+ "GL": {
+ "name": "ꕧꕓ ꖴꕎ ꖨꕮꕊ"
+ },
+ "DE": {
+ "name": "ꕧꕮꔧ"
+ },
+ "JM": {
+ "name": "ꕧꕮꔧꕪ"
+ },
+ "CM": {
+ "name": "ꕪꔈꖩꘋ"
+ },
+ "NC": {
+ "name": "ꕪꔷê–ꕇꕰ ꕯꕮꕊ"
+ },
+ "QA": {
+ "name": "ꕪꕚꕌ"
+ },
+ "KZ": {
+ "name": "ꕪꕤꔻꕚꘋ"
+ },
+ "CA": {
+ "name": "ꕪꕯꕜ"
+ },
+ "KH": {
+ "name": "ꕪꕹꔵꕩ"
+ },
+ "GM": {
+ "name": "ê•­ê”­ê•©"
+ },
+ "GH": {
+ "name": "ꕭꕌꕯ"
+ },
+ "GA": {
+ "name": "ꕭꕷꘋ"
+ },
+ "MY": {
+ "name": "ꕮꔒꔻꕩ"
+ },
+ "MK": {
+ "name": "ꕮꔖê–ꕇꕰ"
+ },
+ "MQ": {
+ "name": "ꕮꔳꕇꕃ"
+ },
+ "ML": {
+ "name": "ꕮꔷ"
+ },
+ "MV": {
+ "name": "ꕮꔷꕜê”"
+ },
+ "SM": {
+ "name": "ꕮꔸꖆ ꕢꘋ"
+ },
+ "MT": {
+ "name": "ꕮꕊꕚ"
+ },
+ "MH": {
+ "name": "ꕮꕊꕣ ꔳꘋꗣ"
+ },
+ "MG": {
+ "name": "ꕮꕜꕭꔻꕪ"
+ },
+ "MW": {
+ "name": "ꕮꕞꕌꔨ"
+ },
+ "YT": {
+ "name": "ꕮꗚꔎ"
+ },
+ "NG": {
+ "name": "ꕯꔤꕀꔸꕩ"
+ },
+ "NE": {
+ "name": "ꕯꔤꕧ"
+ },
+ "NA": {
+ "name": "ꕯꕆꔫꕩ"
+ },
+ "OM": {
+ "name": "ꕱꕮꘋ"
+ },
+ "US": {
+ "name": "ꕶꕱ"
+ },
+ "AS": {
+ "name": "ꕶꕱ ꕢꕹꕎ"
+ },
+ "VI": {
+ "name": "ꕶꕱ ê—©ê—¡ ê— ê–·ê–¬ ꔳꘋꗣ"
+ },
+ "PT": {
+ "name": "ꕶꕿꕃꔤ ꕸꖃꔀ"
+ },
+ "PL": {
+ "name": "ꕶꗷꘋ"
+ },
+ "BO": {
+ "name": "ꕷꔷꔲꕩ"
+ },
+ "BA": {
+ "name": "ꕷꔻꕇꕰ ꗪ ꗥꕤꖑꔲꕯ"
+ },
+ "BF": {
+ "name": "ꕷꕃꕯ ꕘꖇ"
+ },
+ "BW": {
+ "name": "ꕷꖬꕎꕯ"
+ },
+ "MZ": {
+ "name": "ꕹꕤꔭꕃ"
+ },
+ "TK": {
+ "name": "ꕿꔞꖃ"
+ },
+ "TG": {
+ "name": "ê•¿ê–‘"
+ },
+ "DM": {
+ "name": "ê–ꕆꕇꕪ"
+ },
+ "DO": {
+ "name": "ê–ꕆꕇꕪꘋ ꕸꕱꔀ"
+ },
+ "RO": {
+ "name": "ꖄꕆꕇꕰ"
+ },
+ "NR": {
+ "name": "ꖆꖩ"
+ },
+ "SO": {
+ "name": "ꖇꕮꔷꕩ"
+ },
+ "HR": {
+ "name": "ê–ꔓꔻꕩ"
+ },
+ "CI": {
+ "name": "ê–ꔳ ꕾꕎ"
+ },
+ "KR": {
+ "name": "ê–ꔸꕩ ꗛꔤ ꔒꘋꗣ ê—"
+ },
+ "KP": {
+ "name": "ê–ꔸꕩ ꗛꔤ ꕪꘋꗒ"
+ },
+ "CR": {
+ "name": "ê–ꔻꕚ ꔸꕪ"
+ },
+ "CK": {
+ "name": "ê–ꕃ ꔳꘋꗣ"
+ },
+ "KM": {
+ "name": "ê–ꕹꖄꔻ"
+ },
+ "CG": {
+ "name": "ê–ê–"
+ },
+ "CD": {
+ "name": "ê–ê– ê—µê—žê–´ê•Ÿê”Ž ꕸꖃꔀ"
+ },
+ "MD": {
+ "name": "ê–’ê”·ê–ê•™"
+ },
+ "GB": {
+ "name": "ꖕꕯꔤꗳ"
+ },
+ "BT": {
+ "name": "ꖜꕚꘋ"
+ },
+ "BR": {
+ "name": "ꖜꕟꔘꔀ"
+ },
+ "BI": {
+ "name": "ꖜꖩꔺ"
+ },
+ "BN": {
+ "name": "ꖜꖩꘉꔧ"
+ },
+ "FR": {
+ "name": "ꖢꕟꘋꔻ"
+ },
+ "TT": {
+ "name": "ꖤꔸꔕꕜ ꗪ ꕿꔆꖑ"
+ },
+ "TN": {
+ "name": "ꖤꕇꔻꕩ"
+ },
+ "GQ": {
+ "name": "ꖦꕰꕊ ꗳ ꕅꔤꕇ"
+ },
+ "CH": {
+ "name": "ꖬꔃꕤ ꖨꕮꕊ"
+ },
+ "SE": {
+ "name": "ꖬꔨꗵꘋ"
+ },
+ "LK": {
+ "name": "ꖬꔸ ꕞꘋꕪ"
+ },
+ "SR": {
+ "name": "ꖬꔸꕯꔈ"
+ },
+ "SZ": {
+ "name": "ꖬꕎꔽ ꖨꕮꕊ"
+ },
+ "SB": {
+ "name": "ꖬꕞꔤꕮꕊꕯ ꔳꘋꗣ"
+ },
+ "SD": {
+ "name": "ꖬꗵꘋ"
+ },
+ "UY": {
+ "name": "ꖳꔓê—ꔀ"
+ },
+ "UG": {
+ "name": "ꖳꕭꕡ"
+ },
+ "AE": {
+ "name": "ꖳꕯꔤꗳ ꕉꕟꔬ ꗡꕆꔓꔻ"
+ },
+ "UA": {
+ "name": "ꖳꖴꔓꘋ"
+ },
+ "UZ": {
+ "name": "ꖳꗩꕃꔻꕚꘋ"
+ },
+ "KW": {
+ "name": "ꖴꔃꔳ"
+ },
+ "GT": {
+ "name": "ꖶꕎꔎꕮꕞ"
+ },
+ "GP": {
+ "name": "ꖶꕎê”ꖨꔅ"
+ },
+ "GU": {
+ "name": "ꖶꕎꕆ"
+ },
+ "GD": {
+ "name": "ꖶꕟꕯꕜ"
+ },
+ "GY": {
+ "name": "ꖶꕩꕯ"
+ },
+ "NU": {
+ "name": "ꖸꔃꔤ"
+ },
+ "AT": {
+ "name": "ꖺꔻꖤꕎ"
+ },
+ "AU": {
+ "name": "ꖺꖬꖤꔃꔷꕩ"
+ },
+ "HN": {
+ "name": "ꖽꖫꕟ"
+ },
+ "HU": {
+ "name": "ꖽꘋꕭꔓ"
+ },
+ "BG": {
+ "name": "ꗂꔠꔸꕩ"
+ },
+ "TO": {
+ "name": "ꗋꕬ"
+ },
+ "TR": {
+ "name": "ꗋꖺꕃ"
+ },
+ "TC": {
+ "name": "ꗋꖺꕃꔻ ê—ª ꕪꔤê–ê”» ꔳꘋꗣ"
+ },
+ "TM": {
+ "name": "ꗋꖺꕃꕮꕇꔻꕚꘋ"
+ },
+ "LU": {
+ "name": "ê—ꔻꘋꗂꖺ"
+ },
+ "RU": {
+ "name": "ê—ꖺꔻꕩ"
+ },
+ "GE": {
+ "name": "ꗘꖺꕀꕩ"
+ },
+ "JO": {
+ "name": "ꗘꖺꗵꘋ"
+ },
+ "MP": {
+ "name": "ꗛꔤ ꕪꘋꗒ ꕮꔸꕩꕯ ꔳꘋꗣ"
+ },
+ "CO": {
+ "name": "ê—›ê—ê”­ê•©"
+ },
+ "MR": {
+ "name": "ꗞꔓꔎꕇꕰ"
+ },
+ "MU": {
+ "name": "ꗞꔓꗔ"
+ },
+ "MA": {
+ "name": "ê—žê•Ÿê–"
+ },
+ "MC": {
+ "name": "ꗞꕯê–"
+ },
+ "MN": {
+ "name": "ê—žê–ê”·ê•©"
+ },
+ "MS": {
+ "name": "ꗞꘋꔖꕟꔳ"
+ },
+ "NO": {
+ "name": "ꗟꖺꔃ"
+ },
+ "NF": {
+ "name": "ꗟꖺꗉ ꔳꘋꗣ"
+ },
+ "EE": {
+ "name": "ꗡꔻꕿꕇꕰ"
+ },
+ "EC": {
+ "name": "ꗡꖴꔃê—"
+ },
+ "SV": {
+ "name": "ê—¡ê—· ê•¢ê”ê—ê–º"
+ },
+ "GR": {
+ "name": "ꗥꗷꘋ"
+ },
+ "PE": {
+ "name": "ꗨꗡꖩ"
+ },
+ "BE": {
+ "name": "ꗩꕀꗚꘋ"
+ },
+ "BJ": {
+ "name": "ꗩꕇꘋ"
+ },
+ "BY": {
+ "name": "ê—©ê•žê–©ê”»"
+ },
+ "BM": {
+ "name": "ꗩꖷꕜ"
+ },
+ "PF": {
+ "name": "ꗱꘋꔻ ꕶꔷꕇꔻꕩ"
+ },
+ "GF": {
+ "name": "ꗱꘋꔻ ꖶꕎꕯ"
+ },
+ "VN": {
+ "name": "ꗲꕇꖮꔃꕞ"
+ },
+ "CZ": {
+ "name": "ꗿꕃ ꕸꖃꔀ"
+ },
+ "MX": {
+ "name": "ꘈꔻê–"
+ },
+ "NL": {
+ "name": "ꘉꕜ ꖨꕮꕊ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/vi.json b/library/intl/resources/country/vi.json
new file mode 100644
index 000000000..985ab0e48
--- /dev/null
+++ b/library/intl/resources/country/vi.json
@@ -0,0 +1,761 @@
+{
+ "SA": {
+ "name": "Ả Rập Xê-út"
+ },
+ "AF": {
+ "name": "Afghanistan"
+ },
+ "EG": {
+ "name": "Ai Cập"
+ },
+ "IE": {
+ "name": "Ai-len"
+ },
+ "AL": {
+ "name": "Albani"
+ },
+ "DZ": {
+ "name": "Algeria"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AG": {
+ "name": "Antigua và Barbuda"
+ },
+ "AT": {
+ "name": "Ão"
+ },
+ "AR": {
+ "name": "Argentina"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AZ": {
+ "name": "Azerbaijan"
+ },
+ "IN": {
+ "name": "Ấn Äá»™"
+ },
+ "PL": {
+ "name": "Ba Lan"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BH": {
+ "name": "Bahrain"
+ },
+ "BD": {
+ "name": "Bangladesh"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BY": {
+ "name": "Belarus"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BE": {
+ "name": "Bỉ"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia và Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "PT": {
+ "name": "Bồ Äào Nha"
+ },
+ "CI": {
+ "name": "BỠBiển Ngà"
+ },
+ "BR": {
+ "name": "Brazil"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bungari"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BQ": {
+ "name": "Ca-ri-bê Hà Lan"
+ },
+ "UM": {
+ "name": "Các đảo nhỠxa t.tâm thuộc Mỹ"
+ },
+ "AE": {
+ "name": "Các Tiểu V.quốc Ả Rập T.nhất"
+ },
+ "CM": {
+ "name": "Cameroon"
+ },
+ "KH": {
+ "name": "Campuchia"
+ },
+ "CA": {
+ "name": "Canada"
+ },
+ "CV": {
+ "name": "Cape Verde"
+ },
+ "EA": {
+ "name": "Ceuta và Melilla"
+ },
+ "TD": {
+ "name": "Chad"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CO": {
+ "name": "Colombia"
+ },
+ "KM": {
+ "name": "Comoros"
+ },
+ "CG": {
+ "name": "Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "Congo - Kinshasa"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "KW": {
+ "name": "Cô-oét"
+ },
+ "DO": {
+ "name": "Cộng hòa Dominica"
+ },
+ "CZ": {
+ "name": "Cộng hòa Séc"
+ },
+ "CF": {
+ "name": "Cộng hòa Trung Phi"
+ },
+ "HR": {
+ "name": "Croatia"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DJ": {
+ "name": "Djibouti"
+ },
+ "DM": {
+ "name": "Dominica"
+ },
+ "TW": {
+ "name": "Äài Loan"
+ },
+ "DK": {
+ "name": "Äan Mạch"
+ },
+ "AC": {
+ "name": "Äảo Ascension"
+ },
+ "CX": {
+ "name": "Äảo Giáng Sinh"
+ },
+ "IM": {
+ "name": "Äảo Man"
+ },
+ "NF": {
+ "name": "Äảo Norfolk"
+ },
+ "AS": {
+ "name": "Äảo Somoa thuá»™c Mỹ"
+ },
+ "HK": {
+ "name": "Äặc khu hành chính Hồng Kông - Trung Quốc"
+ },
+ "MO": {
+ "name": "Äặc khu hành chính Macao - Trung Quốc"
+ },
+ "TL": {
+ "name": "Äông Timor"
+ },
+ "DE": {
+ "name": "Äức"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "ET": {
+ "name": "Ethiopia"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GE": {
+ "name": "Georgia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GL": {
+ "name": "Greenland"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GF": {
+ "name": "Guiana thuộc Pháp"
+ },
+ "GN": {
+ "name": "Guinea"
+ },
+ "GQ": {
+ "name": "Guinea Xích Äạo"
+ },
+ "GW": {
+ "name": "Guinea-Bissau"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "NL": {
+ "name": "Hà Lan"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "KR": {
+ "name": "Hàn Quốc"
+ },
+ "US": {
+ "name": "Hoa Kỳ"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "HU": {
+ "name": "Hungari"
+ },
+ "GR": {
+ "name": "Hy Lạp"
+ },
+ "IQ": {
+ "name": "I-rắc"
+ },
+ "IS": {
+ "name": "Iceland"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "JM": {
+ "name": "Jamaica"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordan"
+ },
+ "KZ": {
+ "name": "Kazakhstan"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "KG": {
+ "name": "Kyrgyzstan"
+ },
+ "TF": {
+ "name": "Lãnh thổ miá»n nam nÆ°á»›c Pháp"
+ },
+ "PS": {
+ "name": "Lãnh thổ Palestine"
+ },
+ "LA": {
+ "name": "Lào"
+ },
+ "LV": {
+ "name": "Latvia"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LB": {
+ "name": "Li-băng"
+ },
+ "LY": {
+ "name": "Li-bi"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LI": {
+ "name": "Liechtenstein"
+ },
+ "LT": {
+ "name": "Lít-va"
+ },
+ "LU": {
+ "name": "Luxembourg"
+ },
+ "MA": {
+ "name": "Ma-rốc"
+ },
+ "MK": {
+ "name": "Macedonia"
+ },
+ "MG": {
+ "name": "Madagascar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Maldives"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauritania"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mexico"
+ },
+ "FM": {
+ "name": "Micronesia"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monaco"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrat"
+ },
+ "MZ": {
+ "name": "Mozambique"
+ },
+ "MN": {
+ "name": "Mông Cổ"
+ },
+ "MM": {
+ "name": "Myanmar (Miến Äiện)"
+ },
+ "NO": {
+ "name": "Na Uy"
+ },
+ "AQ": {
+ "name": "Nam Cá»±c"
+ },
+ "ZA": {
+ "name": "Nam Phi"
+ },
+ "SS": {
+ "name": "Nam Sudan"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NC": {
+ "name": "New Caledonia"
+ },
+ "NZ": {
+ "name": "New Zealand"
+ },
+ "RU": {
+ "name": "Nga"
+ },
+ "JP": {
+ "name": "Nhật Bản"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "PK": {
+ "name": "Pakistan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua New Guinea"
+ },
+ "PY": {
+ "name": "Paraguay"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "FR": {
+ "name": "Pháp"
+ },
+ "FI": {
+ "name": "Phần Lan"
+ },
+ "PH": {
+ "name": "Philippin"
+ },
+ "PF": {
+ "name": "Polynesia thuộc Pháp"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "QA": {
+ "name": "Qatar"
+ },
+ "AX": {
+ "name": "Quần đảo Åland"
+ },
+ "MP": {
+ "name": "Quần đảo Bắc Mariana"
+ },
+ "IC": {
+ "name": "Quần đảo Canary"
+ },
+ "KY": {
+ "name": "Quần đảo Cayman"
+ },
+ "CC": {
+ "name": "Quần đảo Cocos (Keeling)"
+ },
+ "CK": {
+ "name": "Quần đảo Cook"
+ },
+ "FK": {
+ "name": "Quần đảo Falkland"
+ },
+ "FO": {
+ "name": "Quần đảo Faroe"
+ },
+ "MH": {
+ "name": "Quần đảo Marshall"
+ },
+ "GS": {
+ "name": "Quần đảo Nam Georgia và Nam Sandwich"
+ },
+ "PN": {
+ "name": "Quần đảo Pitcairn"
+ },
+ "SB": {
+ "name": "Quần đảo Solomon"
+ },
+ "TC": {
+ "name": "Quần đảo Turk và Caicos"
+ },
+ "VG": {
+ "name": "Quần đảo Virgin thuộc Anh"
+ },
+ "VI": {
+ "name": "Quần đảo Virgin thuộc Mỹ"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "BL": {
+ "name": "Saint Barthélemy"
+ },
+ "SH": {
+ "name": "Saint Helena"
+ },
+ "KN": {
+ "name": "Saint Kitts và Nevis"
+ },
+ "LC": {
+ "name": "Saint Lucia"
+ },
+ "MF": {
+ "name": "Saint Martin"
+ },
+ "PM": {
+ "name": "Saint Pierre và Miquelon"
+ },
+ "VC": {
+ "name": "Saint Vincent và Grenadines"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé và Príncipe"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Seychelles"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "SG": {
+ "name": "Singapore"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "CY": {
+ "name": "Síp"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somali"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard và Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swaziland"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "TJ": {
+ "name": "Tajikistan"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "ES": {
+ "name": "Tây Ban Nha"
+ },
+ "EH": {
+ "name": "Tây Sahara"
+ },
+ "TH": {
+ "name": "Thái Lan"
+ },
+ "VA": {
+ "name": "Thành Vatican"
+ },
+ "TR": {
+ "name": "Thổ Nhĩ Kỳ"
+ },
+ "IO": {
+ "name": "Thuá»™c địa Anh tại Ấn Äá»™ DÆ°Æ¡ng"
+ },
+ "SE": {
+ "name": "Thụy Äiển"
+ },
+ "CH": {
+ "name": "Thụy Sĩ"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "KP": {
+ "name": "Triá»u Tiên"
+ },
+ "TT": {
+ "name": "Trinidad và Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "CN": {
+ "name": "Trung Quốc"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turkmenistan"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "AU": {
+ "name": "Úc"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraina"
+ },
+ "UY": {
+ "name": "Uruguay"
+ },
+ "UZ": {
+ "name": "Uzbekistan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Việt Nam"
+ },
+ "GB": {
+ "name": "Vương quốc Anh"
+ },
+ "WF": {
+ "name": "Wallis và Futuna"
+ },
+ "IT": {
+ "name": "Ã"
+ },
+ "YE": {
+ "name": "Yemen"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/vun.json b/library/intl/resources/country/vun.json
new file mode 100644
index 000000000..e57db8007
--- /dev/null
+++ b/library/intl/resources/country/vun.json
@@ -0,0 +1,761 @@
+{
+ "ZA": {
+ "name": "Afrika Kusini"
+ },
+ "AF": {
+ "name": "Afuganistani"
+ },
+ "IS": {
+ "name": "Aislandi"
+ },
+ "AR": {
+ "name": "Ajentina"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Albania"
+ },
+ "DZ": {
+ "name": "Aljeria"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigua na Barbuda"
+ },
+ "AM": {
+ "name": "Armenia"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Australia"
+ },
+ "AT": {
+ "name": "Austria"
+ },
+ "IE": {
+ "name": "Ayalandi"
+ },
+ "AZ": {
+ "name": "Azabajani"
+ },
+ "BB": {
+ "name": "Babadosi"
+ },
+ "BS": {
+ "name": "Bahama"
+ },
+ "BH": {
+ "name": "Bahareni"
+ },
+ "BD": {
+ "name": "Bangladeshi"
+ },
+ "BY": {
+ "name": "Belarusi"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BO": {
+ "name": "Bolivia"
+ },
+ "BA": {
+ "name": "Bosnia na Hezegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brazili"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BF": {
+ "name": "Bukinafaso"
+ },
+ "MG": {
+ "name": "Bukini"
+ },
+ "BG": {
+ "name": "Bulgaria"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butani"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "TD": {
+ "name": "Chadi"
+ },
+ "CL": {
+ "name": "Chile"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denmaki"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "EC": {
+ "name": "Ekwado"
+ },
+ "SV": {
+ "name": "Elsavado"
+ },
+ "IO": {
+ "name": "Eneo la Uingereza katika Bahari Hindi"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "Estonia"
+ },
+ "AE": {
+ "name": "Falme za Kiarabu"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "PH": {
+ "name": "Filipino"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Ghana"
+ },
+ "GN": {
+ "name": "Gine"
+ },
+ "GW": {
+ "name": "Ginebisau"
+ },
+ "GQ": {
+ "name": "Ginekweta"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GL": {
+ "name": "Grinlandi"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "GP": {
+ "name": "Gwadelupe"
+ },
+ "GU": {
+ "name": "Gwam"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GF": {
+ "name": "Gwiyana ya Ufaransa"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "ES": {
+ "name": "Hispania"
+ },
+ "HN": {
+ "name": "Hondurasi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "Hungaria"
+ },
+ "IN": {
+ "name": "India"
+ },
+ "ID": {
+ "name": "Indonesia"
+ },
+ "IQ": {
+ "name": "Iraki"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israeli"
+ },
+ "IT": {
+ "name": "Italia"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "CF": {
+ "name": "Jamhuri ya Afrika ya Kati"
+ },
+ "CZ": {
+ "name": "Jamhuri ya Cheki"
+ },
+ "DO": {
+ "name": "Jamhuri ya Dominika"
+ },
+ "CD": {
+ "name": "Jamhuri ya Kidemokrasia ya Kongo"
+ },
+ "JP": {
+ "name": "Japani"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GI": {
+ "name": "Jibralta"
+ },
+ "DJ": {
+ "name": "Jibuti"
+ },
+ "GE": {
+ "name": "Jojia"
+ },
+ "KH": {
+ "name": "Kambodia"
+ },
+ "CM": {
+ "name": "Kameruni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Katari"
+ },
+ "KZ": {
+ "name": "Kazakistani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "CV": {
+ "name": "Kepuvede"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizistani"
+ },
+ "NF": {
+ "name": "Kisiwa cha Norfok"
+ },
+ "CI": {
+ "name": "Kodivaa"
+ },
+ "CO": {
+ "name": "Kolombia"
+ },
+ "KM": {
+ "name": "Komoro"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "HR": {
+ "name": "Korasia"
+ },
+ "KP": {
+ "name": "Korea Kaskazini"
+ },
+ "KR": {
+ "name": "Korea Kusini"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kostarika"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "CY": {
+ "name": "Kuprosi"
+ },
+ "KW": {
+ "name": "Kuwaiti"
+ },
+ "LA": {
+ "name": "Laosi"
+ },
+ "LU": {
+ "name": "Lasembagi"
+ },
+ "LV": {
+ "name": "Lativia"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesoto"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Lishenteni"
+ },
+ "LT": {
+ "name": "Litwania"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malesia"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "US": {
+ "name": "Marekani"
+ },
+ "MQ": {
+ "name": "Martiniki"
+ },
+ "MK": {
+ "name": "Masedonia"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Meksiko"
+ },
+ "FM": {
+ "name": "Mikronesia"
+ },
+ "EG": {
+ "name": "Misri"
+ },
+ "MV": {
+ "name": "Modivu"
+ },
+ "MD": {
+ "name": "Moldova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongolia"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Montserrati"
+ },
+ "MU": {
+ "name": "Morisi"
+ },
+ "MR": {
+ "name": "Moritania"
+ },
+ "MA": {
+ "name": "Moroko"
+ },
+ "MZ": {
+ "name": "Msumbiji"
+ },
+ "MM": {
+ "name": "Myama"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepali"
+ },
+ "NE": {
+ "name": "Nijeri"
+ },
+ "NG": {
+ "name": "Nijeria"
+ },
+ "NI": {
+ "name": "Nikaragwa"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NO": {
+ "name": "Norwe"
+ },
+ "NC": {
+ "name": "Nyukaledonia"
+ },
+ "NZ": {
+ "name": "Nyuzilandi"
+ },
+ "OM": {
+ "name": "Omani"
+ },
+ "PK": {
+ "name": "Pakistani"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua"
+ },
+ "PY": {
+ "name": "Paragwai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitkairni"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PF": {
+ "name": "Polinesia ya Ufaransa"
+ },
+ "PR": {
+ "name": "Pwetoriko"
+ },
+ "RE": {
+ "name": "Riyunioni"
+ },
+ "RO": {
+ "name": "Romania"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "SM": {
+ "name": "Samarino"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "AS": {
+ "name": "Samoa ya Marekani"
+ },
+ "SH": {
+ "name": "Santahelena"
+ },
+ "KN": {
+ "name": "Santakitzi na Nevis"
+ },
+ "LC": {
+ "name": "Santalusia"
+ },
+ "PM": {
+ "name": "Santapieri na Mikeloni"
+ },
+ "VC": {
+ "name": "Santavisenti na Grenadini"
+ },
+ "ST": {
+ "name": "Sao Tome na Principe"
+ },
+ "SA": {
+ "name": "Saudi"
+ },
+ "SN": {
+ "name": "Senegali"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Shelisheli"
+ },
+ "SL": {
+ "name": "Siera Leoni"
+ },
+ "SG": {
+ "name": "Singapoo"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SY": {
+ "name": "Siria"
+ },
+ "LK": {
+ "name": "Sirilanka"
+ },
+ "SK": {
+ "name": "Slovakia"
+ },
+ "SI": {
+ "name": "Slovenia"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudani"
+ },
+ "SR": {
+ "name": "Surinamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TH": {
+ "name": "Tailandi"
+ },
+ "TW": {
+ "name": "Taiwani"
+ },
+ "TJ": {
+ "name": "Tajikistani"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TL": {
+ "name": "Timori ya Mashariki"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad na Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TN": {
+ "name": "Tunisia"
+ },
+ "TM": {
+ "name": "Turukimenistani"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "IR": {
+ "name": "Uajemi"
+ },
+ "BE": {
+ "name": "Ubelgiji"
+ },
+ "FR": {
+ "name": "Ufaransa"
+ },
+ "FI": {
+ "name": "Ufini"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "GR": {
+ "name": "Ugiriki"
+ },
+ "ET": {
+ "name": "Uhabeshi"
+ },
+ "NL": {
+ "name": "Uholanzi"
+ },
+ "GB": {
+ "name": "Uingereza"
+ },
+ "DE": {
+ "name": "Ujerumani"
+ },
+ "PS": {
+ "name": "Ukingo wa Magharibi na Ukanda wa Gaza wa Palestina"
+ },
+ "UA": {
+ "name": "Ukraini"
+ },
+ "PT": {
+ "name": "Ureno"
+ },
+ "UY": {
+ "name": "Urugwai"
+ },
+ "RU": {
+ "name": "Urusi"
+ },
+ "SZ": {
+ "name": "Uswazi"
+ },
+ "SE": {
+ "name": "Uswidi"
+ },
+ "CH": {
+ "name": "Uswisi"
+ },
+ "TR": {
+ "name": "Uturuki"
+ },
+ "UZ": {
+ "name": "Uzibekistani"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikani"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "VN": {
+ "name": "Vietinamu"
+ },
+ "CK": {
+ "name": "Visiwa vya Cook"
+ },
+ "FK": {
+ "name": "Visiwa vya Falkland"
+ },
+ "KY": {
+ "name": "Visiwa vya Kayman"
+ },
+ "MP": {
+ "name": "Visiwa vya Mariana vya Kaskazini"
+ },
+ "MH": {
+ "name": "Visiwa vya Marshal"
+ },
+ "SB": {
+ "name": "Visiwa vya Solomon"
+ },
+ "TC": {
+ "name": "Visiwa vya Turki na Kaiko"
+ },
+ "VI": {
+ "name": "Visiwa vya Virgin vya Marekani"
+ },
+ "VG": {
+ "name": "Visiwa vya Virgin vya Uingereza"
+ },
+ "WF": {
+ "name": "Walis na Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "JO": {
+ "name": "Yordani"
+ },
+ "ZM": {
+ "name": "Zambia"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/wae.json b/library/intl/resources/country/wae.json
new file mode 100644
index 000000000..103ba487f
--- /dev/null
+++ b/library/intl/resources/country/wae.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afganištan"
+ },
+ "AX": {
+ "name": "Alandinslä"
+ },
+ "AL": {
+ "name": "Albanie"
+ },
+ "DZ": {
+ "name": "Algerie"
+ },
+ "US": {
+ "name": "Amerika"
+ },
+ "UM": {
+ "name": "Amerikaniš Ozeanie"
+ },
+ "AS": {
+ "name": "Amerikaniš Samoa"
+ },
+ "VI": {
+ "name": "Amerikaniši Jungfröiwinslä"
+ },
+ "AD": {
+ "name": "Andorra"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Anguilla"
+ },
+ "AQ": {
+ "name": "Antarktis"
+ },
+ "AG": {
+ "name": "Antigua und Barbuda"
+ },
+ "AR": {
+ "name": "Argentinie"
+ },
+ "AM": {
+ "name": "Armenie"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AZ": {
+ "name": "Aserbaidšan"
+ },
+ "AU": {
+ "name": "Australie"
+ },
+ "BH": {
+ "name": "BaÄrain"
+ },
+ "BS": {
+ "name": "Bahamas"
+ },
+ "BD": {
+ "name": "Bangladeš"
+ },
+ "BB": {
+ "name": "Barbados"
+ },
+ "BE": {
+ "name": "Belgie"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benin"
+ },
+ "BM": {
+ "name": "Bermuda"
+ },
+ "BT": {
+ "name": "Bhutan"
+ },
+ "BO": {
+ "name": "Boliwie"
+ },
+ "BA": {
+ "name": "Bosnie und Herzegovina"
+ },
+ "BW": {
+ "name": "Botswana"
+ },
+ "BR": {
+ "name": "Brasilie"
+ },
+ "IO": {
+ "name": "Britišes Territorium em indiše Ozean"
+ },
+ "VG": {
+ "name": "Britiši Jungfröiwinslä"
+ },
+ "BN": {
+ "name": "Brunei"
+ },
+ "BG": {
+ "name": "Bulgarie"
+ },
+ "BF": {
+ "name": "Burkina Faso"
+ },
+ "MM": {
+ "name": "Burma"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta und Melilla"
+ },
+ "CN": {
+ "name": "China"
+ },
+ "CK": {
+ "name": "Cookinslä"
+ },
+ "CR": {
+ "name": "Costa Rica"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Dänemark"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DO": {
+ "name": "Dominikaniši Rebublik"
+ },
+ "DM": {
+ "name": "Doninica"
+ },
+ "DJ": {
+ "name": "DÅ¡ibuti"
+ },
+ "EC": {
+ "name": "Ecuador"
+ },
+ "EG": {
+ "name": "Egypte"
+ },
+ "SV": {
+ "name": "El Salvador"
+ },
+ "CI": {
+ "name": "Elfebeiküšta"
+ },
+ "GB": {
+ "name": "England"
+ },
+ "GQ": {
+ "name": "Equatorialginea"
+ },
+ "ER": {
+ "name": "Eritrea"
+ },
+ "EE": {
+ "name": "EÅ¡tland"
+ },
+ "ET": {
+ "name": "Ethiopie"
+ },
+ "FK": {
+ "name": "Falklandinslä"
+ },
+ "FO": {
+ "name": "Färöe"
+ },
+ "FJ": {
+ "name": "Fidši"
+ },
+ "FI": {
+ "name": "Finnland"
+ },
+ "FR": {
+ "name": "FrankriÄ"
+ },
+ "GF": {
+ "name": "Französiš Guiana"
+ },
+ "PF": {
+ "name": "Französiš Polinesie"
+ },
+ "TF": {
+ "name": "Französiši Süd- und Antarktisgebiet"
+ },
+ "GA": {
+ "name": "Gabon"
+ },
+ "GM": {
+ "name": "Gambia"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GE": {
+ "name": "Georgie"
+ },
+ "GI": {
+ "name": "Gibraltar"
+ },
+ "GN": {
+ "name": "Ginea"
+ },
+ "GW": {
+ "name": "Ginea Bissau"
+ },
+ "GD": {
+ "name": "Grenada"
+ },
+ "GR": {
+ "name": "GriÄeland"
+ },
+ "GL": {
+ "name": "Grönland"
+ },
+ "GP": {
+ "name": "Guadeloupe"
+ },
+ "GU": {
+ "name": "Guam"
+ },
+ "GT": {
+ "name": "Guatemala"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GY": {
+ "name": "Guyana"
+ },
+ "HT": {
+ "name": "Haiti"
+ },
+ "AC": {
+ "name": "Himmelfártsinsla"
+ },
+ "NL": {
+ "name": "Holand"
+ },
+ "HN": {
+ "name": "Honduras"
+ },
+ "IN": {
+ "name": "Indie"
+ },
+ "ID": {
+ "name": "Indonesie"
+ },
+ "IQ": {
+ "name": "Irak"
+ },
+ "IR": {
+ "name": "Iran"
+ },
+ "IE": {
+ "name": "Irland"
+ },
+ "IS": {
+ "name": "Island"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IL": {
+ "name": "Israel"
+ },
+ "IT": {
+ "name": "Italie"
+ },
+ "JM": {
+ "name": "Jamaika"
+ },
+ "JP": {
+ "name": "Japan"
+ },
+ "YE": {
+ "name": "Jéme"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "JO": {
+ "name": "Jordanie"
+ },
+ "KY": {
+ "name": "Kaimaninslä"
+ },
+ "KH": {
+ "name": "Kambodša"
+ },
+ "CM": {
+ "name": "Kamerun"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "IC": {
+ "name": "Kanariše Inslä"
+ },
+ "CV": {
+ "name": "Kap Verde"
+ },
+ "KZ": {
+ "name": "KasaÄstan"
+ },
+ "QA": {
+ "name": "Katar"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KG": {
+ "name": "Kirgištan"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "CC": {
+ "name": "Kokosinslä"
+ },
+ "CO": {
+ "name": "Kolumbie"
+ },
+ "KM": {
+ "name": "Komore"
+ },
+ "CG": {
+ "name": "Kongo Brazzaville"
+ },
+ "CD": {
+ "name": "Kongo-Kinshasa"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "HR": {
+ "name": "Kroatie"
+ },
+ "CU": {
+ "name": "Kuba"
+ },
+ "KW": {
+ "name": "Kuweit"
+ },
+ "LA": {
+ "name": "Laos"
+ },
+ "LS": {
+ "name": "Lesotho"
+ },
+ "LV": {
+ "name": "Lettland"
+ },
+ "LB": {
+ "name": "Libanon"
+ },
+ "LR": {
+ "name": "Liberia"
+ },
+ "LI": {
+ "name": "LieÄteÅ¡tei"
+ },
+ "LT": {
+ "name": "Litaue"
+ },
+ "LY": {
+ "name": "Lübie"
+ },
+ "LU": {
+ "name": "Luxeburg"
+ },
+ "MG": {
+ "name": "Madagaskar"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malaysia"
+ },
+ "MV": {
+ "name": "Malediwe"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malta"
+ },
+ "MA": {
+ "name": "Maroko"
+ },
+ "MH": {
+ "name": "Maršalinslä"
+ },
+ "MQ": {
+ "name": "Martinique"
+ },
+ "MR": {
+ "name": "Mauretanie"
+ },
+ "MU": {
+ "name": "Mauritius"
+ },
+ "MK": {
+ "name": "Mazedonie"
+ },
+ "MX": {
+ "name": "Mexiko"
+ },
+ "FM": {
+ "name": "Mikronesie"
+ },
+ "MD": {
+ "name": "Moldau"
+ },
+ "MC": {
+ "name": "Monago"
+ },
+ "MN": {
+ "name": "Mongolei"
+ },
+ "MS": {
+ "name": "Monserrat"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MZ": {
+ "name": "Mosambik"
+ },
+ "YT": {
+ "name": "Moyette"
+ },
+ "NA": {
+ "name": "Namibia"
+ },
+ "NR": {
+ "name": "Nauru"
+ },
+ "NP": {
+ "name": "Nepal"
+ },
+ "NI": {
+ "name": "Nicaragua"
+ },
+ "NE": {
+ "name": "Niger"
+ },
+ "NG": {
+ "name": "Nigeria"
+ },
+ "NU": {
+ "name": "Niue"
+ },
+ "NC": {
+ "name": "Niwkaledonie"
+ },
+ "NZ": {
+ "name": "Niwséland"
+ },
+ "KP": {
+ "name": "Nordkorea"
+ },
+ "MP": {
+ "name": "NördliÄi Mariane"
+ },
+ "NF": {
+ "name": "Norfolkinsla"
+ },
+ "NO": {
+ "name": "Norwäge"
+ },
+ "OM": {
+ "name": "Oman"
+ },
+ "AT": {
+ "name": "ÖštriÄ"
+ },
+ "TL": {
+ "name": "OÅ¡ttimor"
+ },
+ "PK": {
+ "name": "Pakištan"
+ },
+ "PW": {
+ "name": "Palau"
+ },
+ "PS": {
+ "name": "Paleština"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papua Niwginea"
+ },
+ "PY": {
+ "name": "Paraguai"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PH": {
+ "name": "Philippine"
+ },
+ "PN": {
+ "name": "Pitcairn"
+ },
+ "PL": {
+ "name": "Pole"
+ },
+ "PT": {
+ "name": "Portugal"
+ },
+ "PR": {
+ "name": "Puerto Rico"
+ },
+ "RE": {
+ "name": "Réunion"
+ },
+ "RW": {
+ "name": "Ruanda"
+ },
+ "RO": {
+ "name": "Rumänie"
+ },
+ "RU": {
+ "name": "Russland"
+ },
+ "SB": {
+ "name": "Salomone"
+ },
+ "ZM": {
+ "name": "Sambia"
+ },
+ "WS": {
+ "name": "Samoa"
+ },
+ "SM": {
+ "name": "San Marino"
+ },
+ "ST": {
+ "name": "São Tomé and Príncipe"
+ },
+ "SA": {
+ "name": "Saudi Arabie"
+ },
+ "ES": {
+ "name": "Schpanie"
+ },
+ "SE": {
+ "name": "Schwede"
+ },
+ "CH": {
+ "name": "Schwiz"
+ },
+ "SC": {
+ "name": "SeÄelle"
+ },
+ "SN": {
+ "name": "Senegal"
+ },
+ "RS": {
+ "name": "Serbie"
+ },
+ "SL": {
+ "name": "Sierra Leone"
+ },
+ "ZW": {
+ "name": "Simbabwe"
+ },
+ "SG": {
+ "name": "Singapur"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "SK": {
+ "name": "Slowakei"
+ },
+ "SI": {
+ "name": "Slowenie"
+ },
+ "SO": {
+ "name": "Somalia"
+ },
+ "HK": {
+ "name": "Sonderverwaltigszona Hongkong"
+ },
+ "MO": {
+ "name": "Sonderverwaltigszona Makau"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "LK": {
+ "name": "Sri Lanka"
+ },
+ "BL": {
+ "name": "St. Bartholomäus-Insla"
+ },
+ "SH": {
+ "name": "St. Helena"
+ },
+ "KN": {
+ "name": "St. Kitts und Nevis"
+ },
+ "LC": {
+ "name": "St. Lucia"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "PM": {
+ "name": "St. Pierre und Miquelon"
+ },
+ "VC": {
+ "name": "St. Vincent und d’Grenadine"
+ },
+ "ZA": {
+ "name": "Südafrika"
+ },
+ "SD": {
+ "name": "Sudan"
+ },
+ "GS": {
+ "name": "Südgeorgie und d’südliÄe SenwiÄinslä"
+ },
+ "KR": {
+ "name": "Südkorea"
+ },
+ "SY": {
+ "name": "Sürie"
+ },
+ "SR": {
+ "name": "Suriname"
+ },
+ "SJ": {
+ "name": "Svalbard und Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swasiland"
+ },
+ "TJ": {
+ "name": "Tadšikistan"
+ },
+ "TW": {
+ "name": "Taiwan"
+ },
+ "TZ": {
+ "name": "Tansania"
+ },
+ "TH": {
+ "name": "Thailand"
+ },
+ "DE": {
+ "name": "Titšland"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelau"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TT": {
+ "name": "Trinidad und Tobago"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TD": {
+ "name": "TÅ¡ad"
+ },
+ "CZ": {
+ "name": "TÅ¡eÄie"
+ },
+ "CL": {
+ "name": "TÅ¡ile"
+ },
+ "TN": {
+ "name": "Tunesie"
+ },
+ "TR": {
+ "name": "Türkei"
+ },
+ "TM": {
+ "name": "Turkmeništan"
+ },
+ "TC": {
+ "name": "Turks- und Caicosinslä"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UG": {
+ "name": "Uganda"
+ },
+ "UA": {
+ "name": "Ukraine"
+ },
+ "HU": {
+ "name": "Ungare"
+ },
+ "UY": {
+ "name": "Urugauy"
+ },
+ "UZ": {
+ "name": "Usbekištan"
+ },
+ "VU": {
+ "name": "Vanuatu"
+ },
+ "VA": {
+ "name": "Vatikan"
+ },
+ "VE": {
+ "name": "Venezuela"
+ },
+ "AE": {
+ "name": "Vereinigti Arabiše Emirat"
+ },
+ "VN": {
+ "name": "Vietnam"
+ },
+ "WF": {
+ "name": "Wallis und Futuna"
+ },
+ "EH": {
+ "name": "Weštsahara"
+ },
+ "CX": {
+ "name": "WienäÄtsinslä"
+ },
+ "BY": {
+ "name": "Wísrussland"
+ },
+ "CF": {
+ "name": "Zentralafrikaniši Rebublik"
+ },
+ "CY": {
+ "name": "Zypre"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/xog.json b/library/intl/resources/country/xog.json
new file mode 100644
index 000000000..d76c8706d
--- /dev/null
+++ b/library/intl/resources/country/xog.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "Afaganisitani"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AL": {
+ "name": "Alibaniya"
+ },
+ "DZ": {
+ "name": "Aligerya"
+ },
+ "US": {
+ "name": "Amerika"
+ },
+ "AD": {
+ "name": "Andora"
+ },
+ "AO": {
+ "name": "Angola"
+ },
+ "AI": {
+ "name": "Angwila"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AG": {
+ "name": "Antigwa ni Barabuda"
+ },
+ "AM": {
+ "name": "Arameniya"
+ },
+ "AR": {
+ "name": "Arigentina"
+ },
+ "AW": {
+ "name": "Aruba"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AU": {
+ "name": "Awusitureliya"
+ },
+ "AT": {
+ "name": "Awusituriya"
+ },
+ "IE": {
+ "name": "Ayalandi"
+ },
+ "IS": {
+ "name": "Ayisirandi"
+ },
+ "AZ": {
+ "name": "Azerebayijaani"
+ },
+ "BH": {
+ "name": "Baareeni"
+ },
+ "BS": {
+ "name": "Bahamasi"
+ },
+ "BD": {
+ "name": "Bangaladesi"
+ },
+ "BB": {
+ "name": "Barabadosi"
+ },
+ "BY": {
+ "name": "Belarusi"
+ },
+ "BZ": {
+ "name": "Belize"
+ },
+ "BJ": {
+ "name": "Benini"
+ },
+ "BM": {
+ "name": "Beremuda"
+ },
+ "MH": {
+ "name": "Bizinga bya Mariso"
+ },
+ "MP": {
+ "name": "Bizinga bya Mariyana ebyamumambuka"
+ },
+ "BO": {
+ "name": "Boliviya"
+ },
+ "BW": {
+ "name": "Botiswana"
+ },
+ "BA": {
+ "name": "Boziniya Hezegovina"
+ },
+ "BE": {
+ "name": "Bubirigi"
+ },
+ "DE": {
+ "name": "Budaaki"
+ },
+ "FR": {
+ "name": "Bufalansa"
+ },
+ "BG": {
+ "name": "Bulugariya"
+ },
+ "GB": {
+ "name": "Bungereza"
+ },
+ "BR": {
+ "name": "Buraziiri"
+ },
+ "BF": {
+ "name": "Burukina Faso"
+ },
+ "BN": {
+ "name": "Burunayi"
+ },
+ "BI": {
+ "name": "Burundi"
+ },
+ "BT": {
+ "name": "Butaani"
+ },
+ "IN": {
+ "name": "Buyindi"
+ },
+ "GR": {
+ "name": "Buyonaani"
+ },
+ "TD": {
+ "name": "Caadi"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "CN": {
+ "name": "Cayina"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CL": {
+ "name": "Cile"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CU": {
+ "name": "Cuba"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DK": {
+ "name": "Denimaaka"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "DM": {
+ "name": "Dominika"
+ },
+ "FK": {
+ "name": "Ebiizinga bya Falikalandi"
+ },
+ "SB": {
+ "name": "Ebizanga bya Solomooni"
+ },
+ "IO": {
+ "name": "Ebizinga bya Cago"
+ },
+ "PH": {
+ "name": "Ebizinga bya Firipino"
+ },
+ "KY": {
+ "name": "Ebizinga bya Kayimaani"
+ },
+ "CV": {
+ "name": "Ebizinga bya Kepu Veredi"
+ },
+ "CK": {
+ "name": "Ebizinga bya Kkuki"
+ },
+ "KM": {
+ "name": "Ebizinga bya Komoro"
+ },
+ "MV": {
+ "name": "Ebizinga bya Malidive"
+ },
+ "TC": {
+ "name": "Ebizinga bya Taaka ni Kayikosi"
+ },
+ "VG": {
+ "name": "Ebizinga bya Virigini ebitwalibwa Bungereza"
+ },
+ "VI": {
+ "name": "Ebizinga bya Virigini eby’Amerika"
+ },
+ "EC": {
+ "name": "Ekwado"
+ },
+ "SV": {
+ "name": "El salivado"
+ },
+ "AE": {
+ "name": "Emireeti"
+ },
+ "ER": {
+ "name": "Eritureya"
+ },
+ "EE": {
+ "name": "Esitoniya"
+ },
+ "ET": {
+ "name": "Esyopya"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "FJ": {
+ "name": "Fiji"
+ },
+ "FI": {
+ "name": "Finilandi"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GA": {
+ "name": "Gaboni"
+ },
+ "GM": {
+ "name": "Gambya"
+ },
+ "GH": {
+ "name": "Gana"
+ },
+ "GY": {
+ "name": "Gayana"
+ },
+ "GQ": {
+ "name": "Gayana yaku ekweta"
+ },
+ "GI": {
+ "name": "Giburalita"
+ },
+ "GN": {
+ "name": "Gini"
+ },
+ "GW": {
+ "name": "Gini-Bisawu"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "GD": {
+ "name": "Gurenada"
+ },
+ "GL": {
+ "name": "Gurenelandi"
+ },
+ "GF": {
+ "name": "Guyana enfalansa"
+ },
+ "GP": {
+ "name": "Gwadalupe"
+ },
+ "GU": {
+ "name": "Gwamu"
+ },
+ "GT": {
+ "name": "Gwatemala"
+ },
+ "GE": {
+ "name": "Gyogya"
+ },
+ "HU": {
+ "name": "Hangare"
+ },
+ "HT": {
+ "name": "Hayiti"
+ },
+ "NL": {
+ "name": "Holandi"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "HN": {
+ "name": "Hundurasi"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "JM": {
+ "name": "Jamayika"
+ },
+ "JP": {
+ "name": "Japani"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "DJ": {
+ "name": "Jjibuti"
+ },
+ "NC": {
+ "name": "Kaledonya mupya"
+ },
+ "KH": {
+ "name": "Kambodya"
+ },
+ "CM": {
+ "name": "Kameruuni"
+ },
+ "CA": {
+ "name": "Kanada"
+ },
+ "QA": {
+ "name": "Kataa"
+ },
+ "KZ": {
+ "name": "Kazakisitaani"
+ },
+ "KE": {
+ "name": "Kenya"
+ },
+ "KI": {
+ "name": "Kiribati"
+ },
+ "KG": {
+ "name": "Kirigizisitaani"
+ },
+ "NF": {
+ "name": "Kizinga ky’eNorofoko"
+ },
+ "CO": {
+ "name": "Kolombya"
+ },
+ "CG": {
+ "name": "Kongo"
+ },
+ "CD": {
+ "name": "Kongo - Zayire"
+ },
+ "KP": {
+ "name": "Koreya eya mumambuka"
+ },
+ "KR": {
+ "name": "Koreya eya mumaserengeta"
+ },
+ "CR": {
+ "name": "Kosita Rika"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CI": {
+ "name": "Kote Divwa"
+ },
+ "HR": {
+ "name": "Kurowesya"
+ },
+ "KW": {
+ "name": "Kuweti"
+ },
+ "RU": {
+ "name": "Lasa"
+ },
+ "LV": {
+ "name": "Lativya"
+ },
+ "LA": {
+ "name": "Lawosi"
+ },
+ "LB": {
+ "name": "Lebanoni"
+ },
+ "LS": {
+ "name": "Lesoso"
+ },
+ "RE": {
+ "name": "Leyunyoni"
+ },
+ "LR": {
+ "name": "Liberya"
+ },
+ "LY": {
+ "name": "Libya"
+ },
+ "LI": {
+ "name": "Licitensitayini"
+ },
+ "CZ": {
+ "name": "Lipabulika ya Ceeka"
+ },
+ "DO": {
+ "name": "Lipabulika ya Dominika"
+ },
+ "CF": {
+ "name": "Lipabulika ya Senturafiriki"
+ },
+ "LT": {
+ "name": "Lisuwenya"
+ },
+ "RO": {
+ "name": "Lomaniya"
+ },
+ "LU": {
+ "name": "Lukisembaaga"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MG": {
+ "name": "Madagasika"
+ },
+ "MW": {
+ "name": "Malawi"
+ },
+ "MY": {
+ "name": "Malezya"
+ },
+ "ML": {
+ "name": "Mali"
+ },
+ "MT": {
+ "name": "Malita"
+ },
+ "MQ": {
+ "name": "Maritiniiki"
+ },
+ "MK": {
+ "name": "Masedoniya"
+ },
+ "MU": {
+ "name": "Mawulisyasi"
+ },
+ "MR": {
+ "name": "Mawulitenya"
+ },
+ "YT": {
+ "name": "Mayotte"
+ },
+ "MX": {
+ "name": "Mekisiko"
+ },
+ "FM": {
+ "name": "Mikuronezya"
+ },
+ "EG": {
+ "name": "Misiri"
+ },
+ "MD": {
+ "name": "Molodova"
+ },
+ "MC": {
+ "name": "Monako"
+ },
+ "MN": {
+ "name": "Mongoliya"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MS": {
+ "name": "Monteseraati"
+ },
+ "MA": {
+ "name": "Moroko"
+ },
+ "MZ": {
+ "name": "Mozambiiki"
+ },
+ "MM": {
+ "name": "Myanima"
+ },
+ "NA": {
+ "name": "Namibiya"
+ },
+ "NR": {
+ "name": "Nawuru"
+ },
+ "NG": {
+ "name": "Nayijerya"
+ },
+ "NP": {
+ "name": "Nepalo"
+ },
+ "NE": {
+ "name": "Nije"
+ },
+ "NI": {
+ "name": "Nikaraguwa"
+ },
+ "NU": {
+ "name": "Niyuwe"
+ },
+ "NZ": {
+ "name": "Niyuziirandi"
+ },
+ "NO": {
+ "name": "Nowe"
+ },
+ "OM": {
+ "name": "Omaani"
+ },
+ "PK": {
+ "name": "Pakisitaani"
+ },
+ "PW": {
+ "name": "Palawu"
+ },
+ "PS": {
+ "name": "Palesitayini ni Gaza"
+ },
+ "PA": {
+ "name": "Panama"
+ },
+ "PG": {
+ "name": "Papwa Nyugini"
+ },
+ "PY": {
+ "name": "Paragwayi"
+ },
+ "PE": {
+ "name": "Peru"
+ },
+ "PN": {
+ "name": "Pitikeeni"
+ },
+ "PL": {
+ "name": "Polandi"
+ },
+ "PF": {
+ "name": "Polinesiya enfalansa"
+ },
+ "PR": {
+ "name": "Potoriko"
+ },
+ "PT": {
+ "name": "Potugaali"
+ },
+ "RW": {
+ "name": "Rwanda"
+ },
+ "WS": {
+ "name": "Samowa"
+ },
+ "AS": {
+ "name": "Samowa omumerika"
+ },
+ "SM": {
+ "name": "Sanimarino"
+ },
+ "ST": {
+ "name": "Sanitome ni Purincipe"
+ },
+ "SA": {
+ "name": "Sawudarebya"
+ },
+ "ZA": {
+ "name": "Sawusafirika"
+ },
+ "SN": {
+ "name": "Senegaalo"
+ },
+ "SH": {
+ "name": "Senti Herena"
+ },
+ "KN": {
+ "name": "Senti Kitisi ne Nevisi"
+ },
+ "LC": {
+ "name": "Senti Luciya"
+ },
+ "PM": {
+ "name": "Senti Piyere ni Mikeloni"
+ },
+ "VC": {
+ "name": "Senti Vinsenti ni Gurendadiini"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "Sesere"
+ },
+ "SG": {
+ "name": "Singapowa"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "ES": {
+ "name": "Sipeyini"
+ },
+ "CY": {
+ "name": "Sipuriya"
+ },
+ "LK": {
+ "name": "Sirilanka"
+ },
+ "SY": {
+ "name": "Siriya"
+ },
+ "SK": {
+ "name": "Sirovakya"
+ },
+ "SI": {
+ "name": "Sirovenya"
+ },
+ "SL": {
+ "name": "Siyeralewone"
+ },
+ "SO": {
+ "name": "Somaliya"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SD": {
+ "name": "Sudaani"
+ },
+ "SR": {
+ "name": "Surinaamu"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SZ": {
+ "name": "Swazirandi"
+ },
+ "SE": {
+ "name": "Swideni"
+ },
+ "CH": {
+ "name": "Switizirandi"
+ },
+ "TJ": {
+ "name": "Tajikisitaani"
+ },
+ "TM": {
+ "name": "Takimenesitaani"
+ },
+ "TZ": {
+ "name": "Tanzania"
+ },
+ "TH": {
+ "name": "Tayirandi"
+ },
+ "TW": {
+ "name": "Tayiwani"
+ },
+ "TL": {
+ "name": "Timowa"
+ },
+ "TG": {
+ "name": "Togo"
+ },
+ "TK": {
+ "name": "Tokelawu"
+ },
+ "TO": {
+ "name": "Tonga"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TR": {
+ "name": "Ttake"
+ },
+ "TN": {
+ "name": "Tunisya"
+ },
+ "TT": {
+ "name": "Turindaadi ni Tobago"
+ },
+ "TV": {
+ "name": "Tuvalu"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "VU": {
+ "name": "Vanawuwatu"
+ },
+ "VA": {
+ "name": "Vatikaani"
+ },
+ "VE": {
+ "name": "Venzwera"
+ },
+ "VN": {
+ "name": "Vyetinaamu"
+ },
+ "WF": {
+ "name": "Walisi ni Futuna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "UY": {
+ "name": "Wurugwayi"
+ },
+ "UZ": {
+ "name": "Wuzibekisitaani"
+ },
+ "YE": {
+ "name": "Yemeni"
+ },
+ "ID": {
+ "name": "Yindonezya"
+ },
+ "IQ": {
+ "name": "Yiraaka"
+ },
+ "IR": {
+ "name": "Yiraani"
+ },
+ "IL": {
+ "name": "Yisirayeri"
+ },
+ "IT": {
+ "name": "Yitale"
+ },
+ "JO": {
+ "name": "Yorodani"
+ },
+ "UG": {
+ "name": "Yuganda"
+ },
+ "UA": {
+ "name": "Yukurayine"
+ },
+ "ZM": {
+ "name": "Zambya"
+ },
+ "ZW": {
+ "name": "Zimbabwe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/yav.json b/library/intl/resources/country/yav.json
new file mode 100644
index 000000000..c1ef5c1b2
--- /dev/null
+++ b/library/intl/resources/country/yav.json
@@ -0,0 +1,761 @@
+{
+ "ZA": {
+ "name": "afilí mbátÉ›Ì"
+ },
+ "AF": {
+ "name": "Afkanistáŋ"
+ },
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "SA": {
+ "name": "alapísawutíit"
+ },
+ "AM": {
+ "name": "Almanía"
+ },
+ "AL": {
+ "name": "Alpaní"
+ },
+ "AR": {
+ "name": "Alsaŋtín"
+ },
+ "DZ": {
+ "name": "Alselí"
+ },
+ "AW": {
+ "name": "Alúpa"
+ },
+ "US": {
+ "name": "amálíka"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AI": {
+ "name": "Aŋkíla"
+ },
+ "AO": {
+ "name": "Aŋkúla"
+ },
+ "AG": {
+ "name": "Aŋtíka na Palpúta"
+ },
+ "AD": {
+ "name": "Aŋtúla"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "AZ": {
+ "name": "Asɛlpaisáŋ"
+ },
+ "HT": {
+ "name": "ayíti"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "EC": {
+ "name": "ekuatÉ›Ìl"
+ },
+ "RE": {
+ "name": "elewuniÉ”ÌÅ‹"
+ },
+ "ER": {
+ "name": "elitée"
+ },
+ "ET": {
+ "name": "etiopí"
+ },
+ "IN": {
+ "name": "É›ÌÉ›nd"
+ },
+ "ID": {
+ "name": "ɛndonesí"
+ },
+ "EE": {
+ "name": "ɛstoni"
+ },
+ "VU": {
+ "name": "fanuatú"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "VA": {
+ "name": "fatikáaŋ"
+ },
+ "FR": {
+ "name": "felensí"
+ },
+ "VE": {
+ "name": "fenesuwelá"
+ },
+ "FI": {
+ "name": "fɛnlánd"
+ },
+ "VN": {
+ "name": "fiɛtnáam"
+ },
+ "PH": {
+ "name": "filipíin"
+ },
+ "VG": {
+ "name": "Filisíin ungilís"
+ },
+ "FJ": {
+ "name": "físi"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "MP": {
+ "name": "il maliyanÉ› u muÉ›nÉ›Ì"
+ },
+ "NF": {
+ "name": "il nÉ”ÌlfÉ”ÌlÉ”k"
+ },
+ "SB": {
+ "name": "il salomÉ”ÌÅ‹"
+ },
+ "IQ": {
+ "name": "ilák"
+ },
+ "IR": {
+ "name": "iláŋ"
+ },
+ "IE": {
+ "name": "ililánd"
+ },
+ "MH": {
+ "name": "ílmalasáal"
+ },
+ "AE": {
+ "name": "imiláat i paaláap"
+ },
+ "GB": {
+ "name": "ingilíís"
+ },
+ "IL": {
+ "name": "ísilayÉ›Ìl"
+ },
+ "EG": {
+ "name": "isípit"
+ },
+ "IS": {
+ "name": "isláand"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "IT": {
+ "name": "italí"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "GM": {
+ "name": "kambíi"
+ },
+ "KH": {
+ "name": "Kámbóse"
+ },
+ "GH": {
+ "name": "kaná"
+ },
+ "CA": {
+ "name": "Kánáta"
+ },
+ "CV": {
+ "name": "Kápfɛl"
+ },
+ "GA": {
+ "name": "kapÉ”ÌÅ‹"
+ },
+ "KZ": {
+ "name": "kasaksitáŋ"
+ },
+ "QA": {
+ "name": "katáal"
+ },
+ "KY": {
+ "name": "Káyímanɛ"
+ },
+ "GD": {
+ "name": "kelenáat"
+ },
+ "CM": {
+ "name": "Kemelún"
+ },
+ "KE": {
+ "name": "kénia"
+ },
+ "GN": {
+ "name": "kiiné"
+ },
+ "GW": {
+ "name": "kiinépisaó"
+ },
+ "GR": {
+ "name": "kilÉ›ÌÉ›k"
+ },
+ "KG": {
+ "name": "kilikisistáŋ"
+ },
+ "KI": {
+ "name": "kilipatí"
+ },
+ "GQ": {
+ "name": "kinéekuatolial"
+ },
+ "CZ": {
+ "name": "kitɔŋ kí cÉ›Ìk"
+ },
+ "CD": {
+ "name": "kitɔŋ kí kongó"
+ },
+ "PS": {
+ "name": "kitɔŋ ki palɛstíin"
+ },
+ "DO": {
+ "name": "kitɔŋ kí tumunikÉ›ÌÅ‹"
+ },
+ "HR": {
+ "name": "Kolowasíi"
+ },
+ "CG": {
+ "name": "Kongó"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "CR": {
+ "name": "Kóstálíka"
+ },
+ "CI": {
+ "name": "Kótifualɛ"
+ },
+ "KW": {
+ "name": "kowéet"
+ },
+ "KP": {
+ "name": "kÉ”lé u muÉ›nÉ›Ì"
+ },
+ "KR": {
+ "name": "kɔlé wu mbát"
+ },
+ "CO": {
+ "name": "KÉ”lÉ”Ìmbía"
+ },
+ "KM": {
+ "name": "KÉ”mÉ”ÌÉ”l"
+ },
+ "IO": {
+ "name": "KɔɔÌm kí ndián yi ngilís"
+ },
+ "GU": {
+ "name": "kuamiÉ›"
+ },
+ "GP": {
+ "name": "kuatelúup"
+ },
+ "GT": {
+ "name": "kuatemalá"
+ },
+ "GL": {
+ "name": "kuluɛnlánd"
+ },
+ "CU": {
+ "name": "kúpa"
+ },
+ "CK": {
+ "name": "Kúuke"
+ },
+ "GY": {
+ "name": "kuyáan"
+ },
+ "GF": {
+ "name": "kuyáan u felensí"
+ },
+ "LA": {
+ "name": "lawós"
+ },
+ "LS": {
+ "name": "lesotó"
+ },
+ "LV": {
+ "name": "letoní"
+ },
+ "LU": {
+ "name": "liksambúul"
+ },
+ "LB": {
+ "name": "lipáŋ"
+ },
+ "LR": {
+ "name": "lipélia"
+ },
+ "LY": {
+ "name": "lipíi"
+ },
+ "LI": {
+ "name": "lístÉ›Ìnsitáyin"
+ },
+ "LT": {
+ "name": "litiyaní"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "MW": {
+ "name": "malawí"
+ },
+ "MY": {
+ "name": "malesí"
+ },
+ "MV": {
+ "name": "maletíif"
+ },
+ "MT": {
+ "name": "málÉ›Ìt"
+ },
+ "ML": {
+ "name": "malí"
+ },
+ "MA": {
+ "name": "malóok"
+ },
+ "MQ": {
+ "name": "maltiníik"
+ },
+ "FK": {
+ "name": "maluwín"
+ },
+ "MK": {
+ "name": "masetuán"
+ },
+ "MG": {
+ "name": "matakaskáal"
+ },
+ "YT": {
+ "name": "mayÉ”ÌÉ”t"
+ },
+ "MX": {
+ "name": "mɛksíik"
+ },
+ "MM": {
+ "name": "miaŋmáal"
+ },
+ "FM": {
+ "name": "mikolonesí"
+ },
+ "MU": {
+ "name": "molís"
+ },
+ "MR": {
+ "name": "molitaní"
+ },
+ "MD": {
+ "name": "moltafí"
+ },
+ "MC": {
+ "name": "monakó"
+ },
+ "MN": {
+ "name": "mongolí"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "MZ": {
+ "name": "mosambík"
+ },
+ "MS": {
+ "name": "mɔŋsilá"
+ },
+ "NA": {
+ "name": "namipí"
+ },
+ "NR": {
+ "name": "nawulú"
+ },
+ "NP": {
+ "name": "nepáal"
+ },
+ "NI": {
+ "name": "nikalaká"
+ },
+ "NG": {
+ "name": "nisélia"
+ },
+ "NE": {
+ "name": "nisÉ›ÌÉ›l"
+ },
+ "NL": {
+ "name": "nitililáand"
+ },
+ "NU": {
+ "name": "niyuwé"
+ },
+ "NO": {
+ "name": "nÉ”lfÉ›ÌÉ›s"
+ },
+ "DE": {
+ "name": "nsáman"
+ },
+ "NC": {
+ "name": "nufÉ›Ìl kaletoní"
+ },
+ "NZ": {
+ "name": "nufÉ›Ìl seláand"
+ },
+ "OM": {
+ "name": "omáŋ"
+ },
+ "AU": {
+ "name": "Otalalí"
+ },
+ "AT": {
+ "name": "Otilís"
+ },
+ "HN": {
+ "name": "ɔndúlas"
+ },
+ "HU": {
+ "name": "ɔngilí"
+ },
+ "BS": {
+ "name": "Pahámas"
+ },
+ "PK": {
+ "name": "pakistáŋ"
+ },
+ "PY": {
+ "name": "palakúé"
+ },
+ "PW": {
+ "name": "palawú"
+ },
+ "BH": {
+ "name": "Palɛŋ"
+ },
+ "BB": {
+ "name": "Palpatós"
+ },
+ "PA": {
+ "name": "panamá"
+ },
+ "ES": {
+ "name": "panyá"
+ },
+ "BD": {
+ "name": "Paŋkalatɛs"
+ },
+ "PG": {
+ "name": "papuasí nufÉ›Ìl kiiné"
+ },
+ "BY": {
+ "name": "Pelalús"
+ },
+ "BZ": {
+ "name": "Pelíse"
+ },
+ "PE": {
+ "name": "pelú"
+ },
+ "BJ": {
+ "name": "Penɛŋ"
+ },
+ "BM": {
+ "name": "Pɛlmúta"
+ },
+ "BE": {
+ "name": "Pɛlsíik"
+ },
+ "BR": {
+ "name": "Pilesíl"
+ },
+ "VI": {
+ "name": "pindisúlÉ›Ì pi amálíka"
+ },
+ "PN": {
+ "name": "pitikÉ›ÌÉ›línÉ›Ì"
+ },
+ "BO": {
+ "name": "Polífia"
+ },
+ "PF": {
+ "name": "polinesí u felensí"
+ },
+ "PR": {
+ "name": "pólótolíko"
+ },
+ "BW": {
+ "name": "Posuána"
+ },
+ "PL": {
+ "name": "pÉ”lÉ”ÌÉ”ny"
+ },
+ "PT": {
+ "name": "pɔltukáal"
+ },
+ "BF": {
+ "name": "Pulikínafásó"
+ },
+ "BG": {
+ "name": "Pulukalíi"
+ },
+ "BI": {
+ "name": "Púlúndí"
+ },
+ "BN": {
+ "name": "Pulunéy"
+ },
+ "BA": {
+ "name": "Pusiní-ɛlkofína"
+ },
+ "BT": {
+ "name": "Putaŋ"
+ },
+ "ZM": {
+ "name": "saambíi"
+ },
+ "TD": {
+ "name": "Sáat"
+ },
+ "SV": {
+ "name": "salfatÉ”ÌÉ”l"
+ },
+ "JM": {
+ "name": "samayíik"
+ },
+ "WS": {
+ "name": "samowá"
+ },
+ "AS": {
+ "name": "Sámua u Amelíka"
+ },
+ "SM": {
+ "name": "san malíno"
+ },
+ "CF": {
+ "name": "Santalafilíik"
+ },
+ "JP": {
+ "name": "sapÉ”Ìɔŋ"
+ },
+ "ST": {
+ "name": "sáwó tomé e pelensípe"
+ },
+ "SN": {
+ "name": "senekáal"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SC": {
+ "name": "sesÉ›ÌÉ›l"
+ },
+ "VC": {
+ "name": "sÉ›ÌÅ‹ fɛŋsáŋ elekelenatíin"
+ },
+ "KN": {
+ "name": "sÉ›ÌÅ‹kilistÉ”Ìf eniÉ›Ìf"
+ },
+ "PM": {
+ "name": "sÉ›ÌÅ‹piÉ›Ìl e mikelÉ”ÌÅ‹"
+ },
+ "SH": {
+ "name": "sÉ›ÌÅ‹tÉ›Ì elÉ›ÌÉ›nÉ›"
+ },
+ "LC": {
+ "name": "sÉ›ÌÅ‹tÉ›Ìlusí"
+ },
+ "SL": {
+ "name": "sieláleyÉ”ÌÉ”n"
+ },
+ "CN": {
+ "name": "Síine"
+ },
+ "CL": {
+ "name": "Silí"
+ },
+ "LK": {
+ "name": "silíláŋka"
+ },
+ "SK": {
+ "name": "silofakí"
+ },
+ "SI": {
+ "name": "silofení"
+ },
+ "GI": {
+ "name": "sílpalatáal"
+ },
+ "ZW": {
+ "name": "simbapuwé"
+ },
+ "SG": {
+ "name": "singapúul"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "CY": {
+ "name": "síplɛ"
+ },
+ "DJ": {
+ "name": "síputí"
+ },
+ "SO": {
+ "name": "somalí"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "SS": {
+ "name": "South Sudan"
+ },
+ "GE": {
+ "name": "sɔlsíi"
+ },
+ "JO": {
+ "name": "sɔltaní"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SZ": {
+ "name": "suasiláand"
+ },
+ "SE": {
+ "name": "suÉ›Ìt"
+ },
+ "SR": {
+ "name": "sulináam"
+ },
+ "SD": {
+ "name": "sutáaŋ"
+ },
+ "CH": {
+ "name": "suwíis"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "SY": {
+ "name": "Syria"
+ },
+ "DK": {
+ "name": "tanemálk"
+ },
+ "TZ": {
+ "name": "taŋsaní"
+ },
+ "TJ": {
+ "name": "tasikistáaŋ"
+ },
+ "TH": {
+ "name": "tayiláand"
+ },
+ "TW": {
+ "name": "tayiwáan"
+ },
+ "TT": {
+ "name": "tilinitáat na tupákɔ"
+ },
+ "TL": {
+ "name": "timÉ”ÌÉ”l u nipálÉ›Ìn"
+ },
+ "TK": {
+ "name": "tokeló"
+ },
+ "TG": {
+ "name": "tokó"
+ },
+ "TO": {
+ "name": "tÉ”ÌÅ‹ka"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "TV": {
+ "name": "tufalú"
+ },
+ "TC": {
+ "name": "túluk na káyiik"
+ },
+ "TR": {
+ "name": "tulukíi"
+ },
+ "TM": {
+ "name": "tulukmenisitáaŋ"
+ },
+ "DM": {
+ "name": "túmúnéke"
+ },
+ "TN": {
+ "name": "tunusí"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "UG": {
+ "name": "ukánda"
+ },
+ "UA": {
+ "name": "ukilÉ›ÌÉ›n"
+ },
+ "RW": {
+ "name": "uluándá"
+ },
+ "UY": {
+ "name": "ulukuéy"
+ },
+ "RO": {
+ "name": "ulumaní"
+ },
+ "RU": {
+ "name": "ulusí"
+ },
+ "UZ": {
+ "name": "usupekistáaŋ"
+ },
+ "WF": {
+ "name": "walíis na futúna"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "YE": {
+ "name": "yémɛn"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/yo-BJ.json b/library/intl/resources/country/yo-BJ.json
new file mode 100644
index 000000000..c37ec283b
--- /dev/null
+++ b/library/intl/resources/country/yo-BJ.json
@@ -0,0 +1,761 @@
+{
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "SS": {
+ "name": "Gúúsù Sudan"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "AD": {
+ "name": "OrílÉ›Ìède Ààndórà"
+ },
+ "AO": {
+ "name": "OrílÉ›Ìède Ààngólà"
+ },
+ "AI": {
+ "name": "OrílÉ›Ìède Ààngúlílà"
+ },
+ "AG": {
+ "name": "OrílÉ›Ìède Ààntígúà àti Báríbúdà"
+ },
+ "AF": {
+ "name": "OrílÉ›Ìède Àfùgànístánì"
+ },
+ "AR": {
+ "name": "OrílÉ›Ìède Agentínà"
+ },
+ "IE": {
+ "name": "OrílÉ›Ìède Ailandi"
+ },
+ "AL": {
+ "name": "OrílÉ›Ìède Àlùbàníánì"
+ },
+ "DZ": {
+ "name": "OrílÉ›Ìède Àlùgèríánì"
+ },
+ "AM": {
+ "name": "OrílÉ›Ìède Améníà"
+ },
+ "CF": {
+ "name": "OrílÉ›Ìède Àrin gùngun Ãfíríkà"
+ },
+ "ZA": {
+ "name": "OrílÉ›Ìède Ariwa Afirika"
+ },
+ "KR": {
+ "name": "OrílÉ›Ìède Ariwa KÉ”ria"
+ },
+ "AW": {
+ "name": "OrílÉ›Ìède Ãrúbà"
+ },
+ "AZ": {
+ "name": "OrílÉ›Ìède AsÉ›Ìbájánì"
+ },
+ "IS": {
+ "name": "OrílÉ›Ìède Ashilandi"
+ },
+ "AT": {
+ "name": "OrílÉ›Ìède Asítíríà"
+ },
+ "AU": {
+ "name": "OrílÉ›Ìède Ãstràlìá"
+ },
+ "BB": {
+ "name": "OrílÉ›Ìède Bábádósì"
+ },
+ "BS": {
+ "name": "OrílÉ›Ìède Bàhámásì"
+ },
+ "BD": {
+ "name": "OrílÉ›Ìède Bángáládésì"
+ },
+ "BH": {
+ "name": "OrílÉ›Ìède Báránì"
+ },
+ "BR": {
+ "name": "OrílÉ›Ìède Bàràsílì"
+ },
+ "BE": {
+ "name": "OrílÉ›Ìède BégíɔÌmù"
+ },
+ "BY": {
+ "name": "OrílÉ›Ìède Bélárúsì"
+ },
+ "BZ": {
+ "name": "OrílÉ›Ìède Bèlísɛ̀"
+ },
+ "BM": {
+ "name": "OrílÉ›Ìède Bémúdà"
+ },
+ "BJ": {
+ "name": "OrílÉ›Ìède Bɛ̀nɛ̀"
+ },
+ "BO": {
+ "name": "OrílÉ›Ìède Bɔ̀lífíyà"
+ },
+ "BA": {
+ "name": "OrílÉ›Ìède Bɔ̀síníà àti ÆtisÉ›gófínà"
+ },
+ "BW": {
+ "name": "OrílÉ›Ìède Bɔ̀tìsúwánà"
+ },
+ "BN": {
+ "name": "OrílÉ›Ìède BúrúnÉ›Ìlì"
+ },
+ "BT": {
+ "name": "OrílÉ›Ìède Bútánì"
+ },
+ "BG": {
+ "name": "OrílÉ›Ìède Bùùgáríà"
+ },
+ "BF": {
+ "name": "OrílÉ›Ìède Bùùkíná Fasò"
+ },
+ "BI": {
+ "name": "OrílÉ›Ìède Bùùrúndì"
+ },
+ "DK": {
+ "name": "OrílÉ›Ìède DÉ›Ìmákì"
+ },
+ "DJ": {
+ "name": "OrílÉ›Ìède DíbÉ”Ìótì"
+ },
+ "DM": {
+ "name": "OrílÉ›Ìède Dòmíníkà"
+ },
+ "DO": {
+ "name": "OrilÉ›Ìède Dòmíníkánì"
+ },
+ "EG": {
+ "name": "OrílÉ›Ìède Égípítì"
+ },
+ "EC": {
+ "name": "OrílÉ›Ìède Ekuádò"
+ },
+ "GQ": {
+ "name": "OrílÉ›Ìède Ekutoria Gini"
+ },
+ "ER": {
+ "name": "OrílÉ›Ìède Eritira"
+ },
+ "EE": {
+ "name": "OrílÉ›Ìède Esitonia"
+ },
+ "VI": {
+ "name": "OrílÉ›Ìède Etikun Fagini ti AmÉ›rika"
+ },
+ "VG": {
+ "name": "OrílÉ›Ìède Etíkun Fágínì ti ìlú Bírítísì"
+ },
+ "FK": {
+ "name": "OrílÉ›Ìède Etikun Fakalandi"
+ },
+ "MP": {
+ "name": "OrílÉ›Ìède Etikun Guusu Mariana"
+ },
+ "IO": {
+ "name": "OrílÉ›Ìède Etíkun Ãndíánì ti ÃŒlú Bírítísì"
+ },
+ "MH": {
+ "name": "OrílÉ›Ìède Etikun Máshali"
+ },
+ "NF": {
+ "name": "OrílÉ›Ìède Etikun NÉ”Ìúfókì"
+ },
+ "SB": {
+ "name": "OrílÉ›Ìède Etikun Solomoni"
+ },
+ "KY": {
+ "name": "OrílÉ›Ìède Etíokun Kámánì"
+ },
+ "CV": {
+ "name": "OrílÉ›Ìède Etíokun Kápé féndè"
+ },
+ "CK": {
+ "name": "OrílÉ›Ìède Etíokun Kùúkù"
+ },
+ "ET": {
+ "name": "OrílÉ›Ìède Etopia"
+ },
+ "SV": {
+ "name": "OrílÉ›Ìède ÆÉ›sáfádò"
+ },
+ "AE": {
+ "name": "OrílÉ›Ìède Æmirate ti AwÉ”n Arabu"
+ },
+ "VU": {
+ "name": "OrílÉ›Ìède Faniatu"
+ },
+ "FR": {
+ "name": "OrílÉ›Ìède Faranse"
+ },
+ "VA": {
+ "name": "OrílÉ›Ìède Fatikani"
+ },
+ "VE": {
+ "name": "OrílÉ›Ìède FÉ›nÉ›shuÉ›la"
+ },
+ "VN": {
+ "name": "OrílÉ›Ìède FÉ›tinami"
+ },
+ "FJ": {
+ "name": "OrílÉ›Ìède Fiji"
+ },
+ "FI": {
+ "name": "OrílÉ›Ìède Filandi"
+ },
+ "PH": {
+ "name": "OrílÉ›Ìède filipini"
+ },
+ "GF": {
+ "name": "OrílÉ›Ìède Firenshi Guana"
+ },
+ "PF": {
+ "name": "OrílÉ›Ìède Firenshi Polinesia"
+ },
+ "VC": {
+ "name": "OrílÉ›Ìède FisÉ›nnti ati Genadina"
+ },
+ "GA": {
+ "name": "OrílÉ›Ìède Gabon"
+ },
+ "GP": {
+ "name": "OrílÉ›Ìède Gadelope"
+ },
+ "GM": {
+ "name": "OrílÉ›Ìède Gambia"
+ },
+ "GH": {
+ "name": "OrílÉ›Ìède Gana"
+ },
+ "DE": {
+ "name": "OrílÉ›Ìède Gemani"
+ },
+ "GD": {
+ "name": "OrílÉ›Ìède Genada"
+ },
+ "GN": {
+ "name": "OrílÉ›Ìède Gene"
+ },
+ "GW": {
+ "name": "OrílÉ›Ìède Gene-Busau"
+ },
+ "GL": {
+ "name": "OrílÉ›Ìède Gerelandi"
+ },
+ "GR": {
+ "name": "OrílÉ›Ìède Geriisi"
+ },
+ "GI": {
+ "name": "OrílÉ›Ìède Gibaratara"
+ },
+ "GE": {
+ "name": "OrílÉ›Ìède GÉ”gia"
+ },
+ "GU": {
+ "name": "OrílÉ›Ìède Guamu"
+ },
+ "GT": {
+ "name": "OrílÉ›Ìède Guatemala"
+ },
+ "KP": {
+ "name": "OrílÉ›Ìède Guusu KÉ”ria"
+ },
+ "GY": {
+ "name": "OrílÉ›Ìède Guyana"
+ },
+ "HT": {
+ "name": "OrílÉ›Ìède Haati"
+ },
+ "SH": {
+ "name": "OrílÉ›Ìède HÉ›lena"
+ },
+ "HN": {
+ "name": "OrílÉ›Ìède Hondurasi"
+ },
+ "HU": {
+ "name": "OrílÉ›Ìède Hungari"
+ },
+ "TL": {
+ "name": "OrílÉ›Ìède ÃŒlàOòrùn Tímɔ̀"
+ },
+ "IN": {
+ "name": "OrílÉ›Ìède India"
+ },
+ "ID": {
+ "name": "OrílÉ›Ìède Indonesia"
+ },
+ "IQ": {
+ "name": "OrílÉ›Ìède Iraki"
+ },
+ "IR": {
+ "name": "OrílÉ›Ìède Irani"
+ },
+ "IL": {
+ "name": "OrílÉ›Ìède IserÉ›li"
+ },
+ "IT": {
+ "name": "OrílÉ›Ìède Italiyi"
+ },
+ "PS": {
+ "name": "OrílÉ›Ìède IwÉ”orun Pakisitian ati Gasha"
+ },
+ "JM": {
+ "name": "OrílÉ›Ìède Jamaika"
+ },
+ "JP": {
+ "name": "OrílÉ›Ìède Japani"
+ },
+ "JO": {
+ "name": "OrílÉ›Ìède JÉ”dani"
+ },
+ "NC": {
+ "name": "OrílÉ›Ìède Kaledonia Titun"
+ },
+ "CM": {
+ "name": "OrílÉ›Ìède Kamerúúnì"
+ },
+ "KH": {
+ "name": "OrílÉ›Ìède Kàmùbódíà"
+ },
+ "CA": {
+ "name": "OrílÉ›Ìède Kánádà"
+ },
+ "KZ": {
+ "name": "OrílÉ›Ìède Kashashatani"
+ },
+ "KE": {
+ "name": "OrílÉ›Ìède Kenya"
+ },
+ "KN": {
+ "name": "OrílÉ›Ìède Kiiti ati Neefi"
+ },
+ "KI": {
+ "name": "OrílÉ›Ìède Kiribati"
+ },
+ "CO": {
+ "name": "OrílÉ›Ìède Kòlómíbìa"
+ },
+ "KM": {
+ "name": "OrílÉ›Ìède Kòmòrósì"
+ },
+ "CD": {
+ "name": "OrilÉ›Ìède Kóngò"
+ },
+ "CG": {
+ "name": "OrílÉ›Ìède Kóngò"
+ },
+ "HR": {
+ "name": "OrílÉ›Ìède Kòróátíà"
+ },
+ "QA": {
+ "name": "OrílÉ›Ìède Kota"
+ },
+ "CI": {
+ "name": "OrílÉ›Ìède Kóútè forà"
+ },
+ "CU": {
+ "name": "OrílÉ›Ìède Kúbà"
+ },
+ "KG": {
+ "name": "OrílÉ›Ìède Kurishisitani"
+ },
+ "CY": {
+ "name": "OrílÉ›Ìède Kúrúsì"
+ },
+ "CR": {
+ "name": "OrílÉ›Ìède Kuusita Ríkà"
+ },
+ "KW": {
+ "name": "OrílÉ›Ìède Kuweti"
+ },
+ "LR": {
+ "name": "OrílÉ›Ìède Laberia"
+ },
+ "LA": {
+ "name": "OrílÉ›Ìède Laosi"
+ },
+ "LV": {
+ "name": "OrílÉ›Ìède Latifia"
+ },
+ "LB": {
+ "name": "OrílÉ›Ìède Lebanoni"
+ },
+ "LS": {
+ "name": "OrílÉ›Ìède Lesoto"
+ },
+ "LI": {
+ "name": "OrílÉ›Ìède LÉ›shitÉ›nisiteni"
+ },
+ "LY": {
+ "name": "OrílÉ›Ìède Libiya"
+ },
+ "LT": {
+ "name": "OrílÉ›Ìède Lituania"
+ },
+ "LU": {
+ "name": "OrílÉ›Ìède Lusemogi"
+ },
+ "LC": {
+ "name": "OrílÉ›Ìède Lushia"
+ },
+ "MG": {
+ "name": "OrílÉ›Ìède Madasika"
+ },
+ "FM": {
+ "name": "OrílÉ›Ìède Makoronesia"
+ },
+ "MV": {
+ "name": "OrílÉ›Ìède Maladifi"
+ },
+ "MY": {
+ "name": "OrílÉ›Ìède Malasia"
+ },
+ "MT": {
+ "name": "OrílÉ›Ìède Malata"
+ },
+ "MW": {
+ "name": "OrílÉ›Ìède Malawi"
+ },
+ "ML": {
+ "name": "OrílÉ›Ìède Mali"
+ },
+ "MM": {
+ "name": "OrílÉ›Ìède Manamari"
+ },
+ "MR": {
+ "name": "OrílÉ›Ìède Maritania"
+ },
+ "MU": {
+ "name": "OrílÉ›Ìède Maritiusi"
+ },
+ "MK": {
+ "name": "OrílÉ›Ìède Masidonia"
+ },
+ "MQ": {
+ "name": "OrílÉ›Ìède Matinikuwi"
+ },
+ "YT": {
+ "name": "OrílÉ›Ìède Mayote"
+ },
+ "MX": {
+ "name": "OrílÉ›Ìède Mesiko"
+ },
+ "MD": {
+ "name": "OrílÉ›Ìède Modofia"
+ },
+ "MN": {
+ "name": "OrílÉ›Ìède Mogolia"
+ },
+ "MC": {
+ "name": "OrílÉ›Ìède Monako"
+ },
+ "MA": {
+ "name": "OrílÉ›Ìède Moroko"
+ },
+ "MZ": {
+ "name": "OrílÉ›Ìède Moshamibiku"
+ },
+ "MS": {
+ "name": "OrílÉ›Ìède Motserati"
+ },
+ "NE": {
+ "name": "OrílÉ›Ìède Nàìjá"
+ },
+ "NG": {
+ "name": "OrílÉ›Ìède Nàìjíríà"
+ },
+ "NA": {
+ "name": "OrílÉ›Ìède Namibia"
+ },
+ "NR": {
+ "name": "OrílÉ›Ìède Nauru"
+ },
+ "NL": {
+ "name": "OrílÉ›Ìède Nedalandi"
+ },
+ "NP": {
+ "name": "OrílÉ›Ìède Nepa"
+ },
+ "NI": {
+ "name": "OrílÉ›Ìède NIkaragua"
+ },
+ "NU": {
+ "name": "OrílÉ›Ìède Niue"
+ },
+ "NO": {
+ "name": "OrílÉ›Ìède Nɔɔwii"
+ },
+ "UY": {
+ "name": "OrílÉ›Ìède Nruguayi"
+ },
+ "UZ": {
+ "name": "OrílÉ›Ìède NshibÉ›kisitani"
+ },
+ "GB": {
+ "name": "OrílÉ›Ìède Omobabirin"
+ },
+ "US": {
+ "name": "OrílÉ›Ìède OrilÉ›ede Amerika"
+ },
+ "OM": {
+ "name": "OrílÉ›Ìède Ɔɔma"
+ },
+ "PW": {
+ "name": "OrílÉ›Ìède Paalu"
+ },
+ "PG": {
+ "name": "OrílÉ›Ìède Paapu ti Giini"
+ },
+ "PK": {
+ "name": "OrílÉ›Ìède Pakisitan"
+ },
+ "PA": {
+ "name": "OrílÉ›Ìède Panama"
+ },
+ "PY": {
+ "name": "OrílÉ›Ìède Paraguye"
+ },
+ "PE": {
+ "name": "OrílÉ›Ìède Peru"
+ },
+ "PM": {
+ "name": "OrílÉ›Ìède Pɛɛri ati mikuloni"
+ },
+ "PN": {
+ "name": "OrílÉ›Ìède Pikarini"
+ },
+ "PL": {
+ "name": "OrílÉ›Ìède Polandi"
+ },
+ "PR": {
+ "name": "OrílÉ›Ìède PÉ”to Riko"
+ },
+ "PT": {
+ "name": "OrílÉ›Ìède PÉ”tugi"
+ },
+ "RE": {
+ "name": "OrílÉ›Ìède Riuniyan"
+ },
+ "RO": {
+ "name": "OrílÉ›Ìède Romaniya"
+ },
+ "RU": {
+ "name": "OrílÉ›Ìède RÉ”shia"
+ },
+ "RW": {
+ "name": "OrílÉ›Ìède Ruwanda"
+ },
+ "WS": {
+ "name": "OrílÉ›Ìède SamÉ”"
+ },
+ "SM": {
+ "name": "OrílÉ›Ìède Sani Marino"
+ },
+ "ST": {
+ "name": "OrílÉ›Ìède Sao tomi ati piriishipi"
+ },
+ "SZ": {
+ "name": "OrílÉ›Ìède Sashiland"
+ },
+ "SA": {
+ "name": "OrílÉ›Ìède Saudi Arabia"
+ },
+ "SC": {
+ "name": "OrílÉ›Ìède seshÉ›lÉ›si"
+ },
+ "SN": {
+ "name": "OrílÉ›Ìède SÉ›nÉ›ga"
+ },
+ "TD": {
+ "name": "OrílÉ›Ìède shààdì"
+ },
+ "CN": {
+ "name": "OrílÉ›Ìède sháínà"
+ },
+ "ZM": {
+ "name": "OrílÉ›Ìède shamibia"
+ },
+ "CZ": {
+ "name": "OrílÉ›Ìède shÉ›ÌÉ›Ìkì"
+ },
+ "NZ": {
+ "name": "OrílÉ›Ìède shilandi Titun"
+ },
+ "CL": {
+ "name": "OrílÉ›Ìède shílè"
+ },
+ "ZW": {
+ "name": "OrílÉ›Ìède shimibabe"
+ },
+ "SK": {
+ "name": "OrílÉ›Ìède Silofakia"
+ },
+ "SI": {
+ "name": "OrílÉ›Ìède Silofania"
+ },
+ "SG": {
+ "name": "OrílÉ›Ìède Singapo"
+ },
+ "ES": {
+ "name": "OrílÉ›Ìède Sipani"
+ },
+ "LK": {
+ "name": "OrílÉ›Ìède Siri Lanka"
+ },
+ "SY": {
+ "name": "OrílÉ›Ìède Siria"
+ },
+ "SL": {
+ "name": "OrílÉ›Ìède Siria looni"
+ },
+ "SO": {
+ "name": "OrílÉ›Ìède Somalia"
+ },
+ "SD": {
+ "name": "OrílÉ›Ìède Sudani"
+ },
+ "SR": {
+ "name": "OrílÉ›Ìède Surinami"
+ },
+ "SE": {
+ "name": "OrílÉ›Ìède Swidini"
+ },
+ "CH": {
+ "name": "OrílÉ›Ìède switishilandi"
+ },
+ "TH": {
+ "name": "OrílÉ›Ìède Tailandi"
+ },
+ "TW": {
+ "name": "OrílÉ›Ìède Taiwani"
+ },
+ "TJ": {
+ "name": "OrílÉ›Ìède Takisitani"
+ },
+ "TZ": {
+ "name": "OrílÉ›Ìède Tanshania"
+ },
+ "TT": {
+ "name": "OrílÉ›Ìède Tirinida ati Tobaga"
+ },
+ "TG": {
+ "name": "OrílÉ›Ìède Togo"
+ },
+ "TK": {
+ "name": "OrílÉ›Ìède Tokelau"
+ },
+ "TO": {
+ "name": "OrílÉ›Ìède Tonga"
+ },
+ "TR": {
+ "name": "OrílÉ›Ìède Tɔɔki"
+ },
+ "TC": {
+ "name": "OrílÉ›Ìède Tɔɔki ati Etikun KakÉ”si"
+ },
+ "TM": {
+ "name": "OrílÉ›Ìède Tɔɔkimenisita"
+ },
+ "TV": {
+ "name": "OrílÉ›Ìède Tufalu"
+ },
+ "TN": {
+ "name": "OrílÉ›Ìède Tunishia"
+ },
+ "UG": {
+ "name": "OrílÉ›Ìède Uganda"
+ },
+ "UA": {
+ "name": "OrílÉ›Ìède Ukarini"
+ },
+ "WF": {
+ "name": "OrílÉ›Ìède Wali ati futuna"
+ },
+ "YE": {
+ "name": "OrílÉ›Ìède yemeni"
+ },
+ "AS": {
+ "name": "Sámóánì ti OrílÉ›Ìède Àméríkà"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/yo.json b/library/intl/resources/country/yo.json
new file mode 100644
index 000000000..561b81669
--- /dev/null
+++ b/library/intl/resources/country/yo.json
@@ -0,0 +1,761 @@
+{
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "SS": {
+ "name": "Gúúsù Sudan"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "ME": {
+ "name": "Montenegro"
+ },
+ "AD": {
+ "name": "OrílẹÌède Ààndórà"
+ },
+ "AO": {
+ "name": "OrílẹÌède Ààngólà"
+ },
+ "AI": {
+ "name": "OrílẹÌède Ààngúlílà"
+ },
+ "AG": {
+ "name": "OrílẹÌède Ààntígúà àti Báríbúdà"
+ },
+ "AF": {
+ "name": "OrílẹÌède Àfùgànístánì"
+ },
+ "AR": {
+ "name": "OrílẹÌède Agentínà"
+ },
+ "IE": {
+ "name": "OrílẹÌède Ailandi"
+ },
+ "AL": {
+ "name": "OrílẹÌède Àlùbàníánì"
+ },
+ "DZ": {
+ "name": "OrílẹÌède Àlùgèríánì"
+ },
+ "AM": {
+ "name": "OrílẹÌède Améníà"
+ },
+ "CF": {
+ "name": "OrílẹÌède Àrin gùngun Ãfíríkà"
+ },
+ "ZA": {
+ "name": "OrílẹÌède Ariwa Afirika"
+ },
+ "KR": {
+ "name": "OrílẹÌède Ariwa Ká»ria"
+ },
+ "AW": {
+ "name": "OrílẹÌède Ãrúbà"
+ },
+ "AZ": {
+ "name": "OrílẹÌède AsẹÌbájánì"
+ },
+ "AT": {
+ "name": "OrílẹÌède Asítíríà"
+ },
+ "AU": {
+ "name": "OrílẹÌède Ãstràlìá"
+ },
+ "IS": {
+ "name": "OrílẹÌède Aá¹£ilandi"
+ },
+ "BB": {
+ "name": "OrílẹÌède Bábádósì"
+ },
+ "BS": {
+ "name": "OrílẹÌède Bàhámásì"
+ },
+ "BD": {
+ "name": "OrílẹÌède Bángáládésì"
+ },
+ "BH": {
+ "name": "OrílẹÌède Báránì"
+ },
+ "BR": {
+ "name": "OrílẹÌède Bàràsílì"
+ },
+ "BE": {
+ "name": "OrílẹÌède Bégíá»Ìmù"
+ },
+ "BY": {
+ "name": "OrílẹÌède Bélárúsì"
+ },
+ "BZ": {
+ "name": "OrílẹÌède Bèlísẹ̀"
+ },
+ "BM": {
+ "name": "OrílẹÌède Bémúdà"
+ },
+ "BJ": {
+ "name": "OrílẹÌède Bẹ̀nẹ̀"
+ },
+ "BO": {
+ "name": "OrílẹÌède Bá»Ì€lífíyà"
+ },
+ "BA": {
+ "name": "OrílẹÌède Bá»Ì€síníà àti Ẹtisẹgófínà"
+ },
+ "BW": {
+ "name": "OrílẹÌède Bá»Ì€tìsúwánà"
+ },
+ "BN": {
+ "name": "OrílẹÌède BúrúnẹÌlì"
+ },
+ "BT": {
+ "name": "OrílẹÌède Bútánì"
+ },
+ "BG": {
+ "name": "OrílẹÌède Bùùgáríà"
+ },
+ "BF": {
+ "name": "OrílẹÌède Bùùkíná Fasò"
+ },
+ "BI": {
+ "name": "OrílẹÌède Bùùrúndì"
+ },
+ "DK": {
+ "name": "OrílẹÌède DẹÌmákì"
+ },
+ "DJ": {
+ "name": "OrílẹÌède Díbá»Ìótì"
+ },
+ "DM": {
+ "name": "OrílẹÌède Dòmíníkà"
+ },
+ "DO": {
+ "name": "OrilẹÌède Dòmíníkánì"
+ },
+ "EG": {
+ "name": "OrílẹÌède Égípítì"
+ },
+ "EC": {
+ "name": "OrílẹÌède Ekuádò"
+ },
+ "GQ": {
+ "name": "OrílẹÌède Ekutoria Gini"
+ },
+ "ER": {
+ "name": "OrílẹÌède Eritira"
+ },
+ "EE": {
+ "name": "OrílẹÌède Esitonia"
+ },
+ "VI": {
+ "name": "OrílẹÌède Etikun Fagini ti Amẹrika"
+ },
+ "VG": {
+ "name": "OrílẹÌède Etíkun Fágínì ti ìlú Bírítísì"
+ },
+ "FK": {
+ "name": "OrílẹÌède Etikun Fakalandi"
+ },
+ "MP": {
+ "name": "OrílẹÌède Etikun Guusu Mariana"
+ },
+ "IO": {
+ "name": "OrílẹÌède Etíkun Ãndíánì ti ÃŒlú Bírítísì"
+ },
+ "MH": {
+ "name": "OrílẹÌède Etikun Máṣali"
+ },
+ "NF": {
+ "name": "OrílẹÌède Etikun Ná»Ìúfókì"
+ },
+ "SB": {
+ "name": "OrílẹÌède Etikun Solomoni"
+ },
+ "KY": {
+ "name": "OrílẹÌède Etíokun Kámánì"
+ },
+ "CV": {
+ "name": "OrílẹÌède Etíokun Kápé féndè"
+ },
+ "CK": {
+ "name": "OrílẹÌède Etíokun Kùúkù"
+ },
+ "ET": {
+ "name": "OrílẹÌède Etopia"
+ },
+ "SV": {
+ "name": "OrílẹÌède Ẹẹsáfádò"
+ },
+ "AE": {
+ "name": "OrílẹÌède Ẹmirate ti Awá»n Arabu"
+ },
+ "VU": {
+ "name": "OrílẹÌède Faniatu"
+ },
+ "FR": {
+ "name": "OrílẹÌède Faranse"
+ },
+ "VA": {
+ "name": "OrílẹÌède Fatikani"
+ },
+ "VE": {
+ "name": "OrílẹÌède Fẹnẹṣuẹla"
+ },
+ "VN": {
+ "name": "OrílẹÌède Fẹtinami"
+ },
+ "FJ": {
+ "name": "OrílẹÌède Fiji"
+ },
+ "FI": {
+ "name": "OrílẹÌède Filandi"
+ },
+ "PH": {
+ "name": "OrílẹÌède filipini"
+ },
+ "GF": {
+ "name": "OrílẹÌède Firená¹£i Guana"
+ },
+ "PF": {
+ "name": "OrílẹÌède Firená¹£i Polinesia"
+ },
+ "VC": {
+ "name": "OrílẹÌède Fisẹnnti ati Genadina"
+ },
+ "GA": {
+ "name": "OrílẹÌède Gabon"
+ },
+ "GP": {
+ "name": "OrílẹÌède Gadelope"
+ },
+ "GM": {
+ "name": "OrílẹÌède Gambia"
+ },
+ "GH": {
+ "name": "OrílẹÌède Gana"
+ },
+ "DE": {
+ "name": "OrílẹÌède Gemani"
+ },
+ "GD": {
+ "name": "OrílẹÌède Genada"
+ },
+ "GN": {
+ "name": "OrílẹÌède Gene"
+ },
+ "GW": {
+ "name": "OrílẹÌède Gene-Busau"
+ },
+ "GL": {
+ "name": "OrílẹÌède Gerelandi"
+ },
+ "GR": {
+ "name": "OrílẹÌède Geriisi"
+ },
+ "GI": {
+ "name": "OrílẹÌède Gibaratara"
+ },
+ "GE": {
+ "name": "OrílẹÌède Gá»gia"
+ },
+ "GU": {
+ "name": "OrílẹÌède Guamu"
+ },
+ "GT": {
+ "name": "OrílẹÌède Guatemala"
+ },
+ "KP": {
+ "name": "OrílẹÌède Guusu Ká»ria"
+ },
+ "GY": {
+ "name": "OrílẹÌède Guyana"
+ },
+ "HT": {
+ "name": "OrílẹÌède Haati"
+ },
+ "SH": {
+ "name": "OrílẹÌède Hẹlena"
+ },
+ "HN": {
+ "name": "OrílẹÌède Hondurasi"
+ },
+ "HU": {
+ "name": "OrílẹÌède Hungari"
+ },
+ "TL": {
+ "name": "OrílẹÌède ÃŒlàOòrùn Tímá»Ì€"
+ },
+ "IN": {
+ "name": "OrílẹÌède India"
+ },
+ "ID": {
+ "name": "OrílẹÌède Indonesia"
+ },
+ "IQ": {
+ "name": "OrílẹÌède Iraki"
+ },
+ "IR": {
+ "name": "OrílẹÌède Irani"
+ },
+ "IL": {
+ "name": "OrílẹÌède Iserẹli"
+ },
+ "IT": {
+ "name": "OrílẹÌède Italiyi"
+ },
+ "PS": {
+ "name": "OrílẹÌède Iwá»orun Pakisitian ati Gaá¹£a"
+ },
+ "JM": {
+ "name": "OrílẹÌède Jamaika"
+ },
+ "JP": {
+ "name": "OrílẹÌède Japani"
+ },
+ "JO": {
+ "name": "OrílẹÌède Já»dani"
+ },
+ "NC": {
+ "name": "OrílẹÌède Kaledonia Titun"
+ },
+ "CM": {
+ "name": "OrílẹÌède Kamerúúnì"
+ },
+ "KH": {
+ "name": "OrílẹÌède Kàmùbódíà"
+ },
+ "CA": {
+ "name": "OrílẹÌède Kánádà"
+ },
+ "KZ": {
+ "name": "OrílẹÌède Kaá¹£aá¹£atani"
+ },
+ "KE": {
+ "name": "OrílẹÌède Kenya"
+ },
+ "KN": {
+ "name": "OrílẹÌède Kiiti ati Neefi"
+ },
+ "KI": {
+ "name": "OrílẹÌède Kiribati"
+ },
+ "CO": {
+ "name": "OrílẹÌède Kòlómíbìa"
+ },
+ "KM": {
+ "name": "OrílẹÌède Kòmòrósì"
+ },
+ "CD": {
+ "name": "OrilẹÌède Kóngò"
+ },
+ "CG": {
+ "name": "OrílẹÌède Kóngò"
+ },
+ "HR": {
+ "name": "OrílẹÌède Kòróátíà"
+ },
+ "QA": {
+ "name": "OrílẹÌède Kota"
+ },
+ "CI": {
+ "name": "OrílẹÌède Kóútè forà"
+ },
+ "CU": {
+ "name": "OrílẹÌède Kúbà"
+ },
+ "KG": {
+ "name": "OrílẹÌède Kuriá¹£isitani"
+ },
+ "CY": {
+ "name": "OrílẹÌède Kúrúsì"
+ },
+ "CR": {
+ "name": "OrílẹÌède Kuusita Ríkà"
+ },
+ "KW": {
+ "name": "OrílẹÌède Kuweti"
+ },
+ "LR": {
+ "name": "OrílẹÌède Laberia"
+ },
+ "LA": {
+ "name": "OrílẹÌède Laosi"
+ },
+ "LV": {
+ "name": "OrílẹÌède Latifia"
+ },
+ "LB": {
+ "name": "OrílẹÌède Lebanoni"
+ },
+ "LS": {
+ "name": "OrílẹÌède Lesoto"
+ },
+ "LI": {
+ "name": "OrílẹÌède Lẹṣitẹnisiteni"
+ },
+ "LY": {
+ "name": "OrílẹÌède Libiya"
+ },
+ "LT": {
+ "name": "OrílẹÌède Lituania"
+ },
+ "LU": {
+ "name": "OrílẹÌède Lusemogi"
+ },
+ "LC": {
+ "name": "OrílẹÌède Luá¹£ia"
+ },
+ "MG": {
+ "name": "OrílẹÌède Madasika"
+ },
+ "FM": {
+ "name": "OrílẹÌède Makoronesia"
+ },
+ "MV": {
+ "name": "OrílẹÌède Maladifi"
+ },
+ "MY": {
+ "name": "OrílẹÌède Malasia"
+ },
+ "MT": {
+ "name": "OrílẹÌède Malata"
+ },
+ "MW": {
+ "name": "OrílẹÌède Malawi"
+ },
+ "ML": {
+ "name": "OrílẹÌède Mali"
+ },
+ "MM": {
+ "name": "OrílẹÌède Manamari"
+ },
+ "MR": {
+ "name": "OrílẹÌède Maritania"
+ },
+ "MU": {
+ "name": "OrílẹÌède Maritiusi"
+ },
+ "MK": {
+ "name": "OrílẹÌède Masidonia"
+ },
+ "MQ": {
+ "name": "OrílẹÌède Matinikuwi"
+ },
+ "YT": {
+ "name": "OrílẹÌède Mayote"
+ },
+ "MX": {
+ "name": "OrílẹÌède Mesiko"
+ },
+ "MD": {
+ "name": "OrílẹÌède Modofia"
+ },
+ "MN": {
+ "name": "OrílẹÌède Mogolia"
+ },
+ "MC": {
+ "name": "OrílẹÌède Monako"
+ },
+ "MA": {
+ "name": "OrílẹÌède Moroko"
+ },
+ "MZ": {
+ "name": "OrílẹÌède Moá¹£amibiku"
+ },
+ "MS": {
+ "name": "OrílẹÌède Motserati"
+ },
+ "NE": {
+ "name": "OrílẹÌède Nàìjá"
+ },
+ "NG": {
+ "name": "OrílẹÌède Nàìjíríà"
+ },
+ "NA": {
+ "name": "OrílẹÌède Namibia"
+ },
+ "NR": {
+ "name": "OrílẹÌède Nauru"
+ },
+ "NL": {
+ "name": "OrílẹÌède Nedalandi"
+ },
+ "NP": {
+ "name": "OrílẹÌède Nepa"
+ },
+ "NI": {
+ "name": "OrílẹÌède NIkaragua"
+ },
+ "NU": {
+ "name": "OrílẹÌède Niue"
+ },
+ "NO": {
+ "name": "OrílẹÌède Ná»á»wii"
+ },
+ "UY": {
+ "name": "OrílẹÌède Nruguayi"
+ },
+ "UZ": {
+ "name": "OrílẹÌède Ná¹£ibẹkisitani"
+ },
+ "GB": {
+ "name": "OrílẹÌède Omobabirin"
+ },
+ "US": {
+ "name": "OrílẹÌède Orilẹede Amerika"
+ },
+ "OM": {
+ "name": "OrílẹÌède Ọá»ma"
+ },
+ "PW": {
+ "name": "OrílẹÌède Paalu"
+ },
+ "PG": {
+ "name": "OrílẹÌède Paapu ti Giini"
+ },
+ "PK": {
+ "name": "OrílẹÌède Pakisitan"
+ },
+ "PA": {
+ "name": "OrílẹÌède Panama"
+ },
+ "PY": {
+ "name": "OrílẹÌède Paraguye"
+ },
+ "PE": {
+ "name": "OrílẹÌède Peru"
+ },
+ "PM": {
+ "name": "OrílẹÌède Pẹẹri ati mikuloni"
+ },
+ "PN": {
+ "name": "OrílẹÌède Pikarini"
+ },
+ "PL": {
+ "name": "OrílẹÌède Polandi"
+ },
+ "PR": {
+ "name": "OrílẹÌède Pá»to Riko"
+ },
+ "PT": {
+ "name": "OrílẹÌède Pá»tugi"
+ },
+ "RE": {
+ "name": "OrílẹÌède Riuniyan"
+ },
+ "RO": {
+ "name": "OrílẹÌède Romaniya"
+ },
+ "RU": {
+ "name": "OrílẹÌède Rá»á¹£ia"
+ },
+ "RW": {
+ "name": "OrílẹÌède Ruwanda"
+ },
+ "WS": {
+ "name": "OrílẹÌède Samá»"
+ },
+ "SM": {
+ "name": "OrílẹÌède Sani Marino"
+ },
+ "ST": {
+ "name": "OrílẹÌède Sao tomi ati piriiá¹£ipi"
+ },
+ "SZ": {
+ "name": "OrílẹÌède Saá¹£iland"
+ },
+ "SA": {
+ "name": "OrílẹÌède Saudi Arabia"
+ },
+ "SC": {
+ "name": "OrílẹÌède seṣẹlẹsi"
+ },
+ "SN": {
+ "name": "OrílẹÌède Sẹnẹga"
+ },
+ "SK": {
+ "name": "OrílẹÌède Silofakia"
+ },
+ "SI": {
+ "name": "OrílẹÌède Silofania"
+ },
+ "SG": {
+ "name": "OrílẹÌède Singapo"
+ },
+ "ES": {
+ "name": "OrílẹÌède Sipani"
+ },
+ "LK": {
+ "name": "OrílẹÌède Siri Lanka"
+ },
+ "SY": {
+ "name": "OrílẹÌède Siria"
+ },
+ "SL": {
+ "name": "OrílẹÌède Siria looni"
+ },
+ "SO": {
+ "name": "OrílẹÌède Somalia"
+ },
+ "SD": {
+ "name": "OrílẹÌède Sudani"
+ },
+ "SR": {
+ "name": "OrílẹÌède Surinami"
+ },
+ "SE": {
+ "name": "OrílẹÌède Swidini"
+ },
+ "CH": {
+ "name": "OrílẹÌède switiá¹£ilandi"
+ },
+ "TD": {
+ "name": "OrílẹÌède ṣààdì"
+ },
+ "CN": {
+ "name": "OrílẹÌède ṣáínà"
+ },
+ "ZM": {
+ "name": "OrílẹÌède á¹£amibia"
+ },
+ "CZ": {
+ "name": "OrílẹÌède ṣẹÌẹÌkì"
+ },
+ "NZ": {
+ "name": "OrílẹÌède á¹£ilandi Titun"
+ },
+ "CL": {
+ "name": "OrílẹÌède ṣílè"
+ },
+ "ZW": {
+ "name": "OrílẹÌède á¹£imibabe"
+ },
+ "TH": {
+ "name": "OrílẹÌède Tailandi"
+ },
+ "TW": {
+ "name": "OrílẹÌède Taiwani"
+ },
+ "TJ": {
+ "name": "OrílẹÌède Takisitani"
+ },
+ "TZ": {
+ "name": "OrílẹÌède Taná¹£ania"
+ },
+ "TT": {
+ "name": "OrílẹÌède Tirinida ati Tobaga"
+ },
+ "TG": {
+ "name": "OrílẹÌède Togo"
+ },
+ "TK": {
+ "name": "OrílẹÌède Tokelau"
+ },
+ "TO": {
+ "name": "OrílẹÌède Tonga"
+ },
+ "TR": {
+ "name": "OrílẹÌède Tá»á»ki"
+ },
+ "TC": {
+ "name": "OrílẹÌède Tá»á»ki ati Etikun Kaká»si"
+ },
+ "TM": {
+ "name": "OrílẹÌède Tá»á»kimenisita"
+ },
+ "TV": {
+ "name": "OrílẹÌède Tufalu"
+ },
+ "TN": {
+ "name": "OrílẹÌède Tuniá¹£ia"
+ },
+ "UG": {
+ "name": "OrílẹÌède Uganda"
+ },
+ "UA": {
+ "name": "OrílẹÌède Ukarini"
+ },
+ "WF": {
+ "name": "OrílẹÌède Wali ati futuna"
+ },
+ "YE": {
+ "name": "OrílẹÌède yemeni"
+ },
+ "AS": {
+ "name": "Sámóánì ti OrílẹÌède Àméríkà"
+ },
+ "RS": {
+ "name": "Serbia"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/zgh.json b/library/intl/resources/country/zgh.json
new file mode 100644
index 000000000..9aa27f8b5
--- /dev/null
+++ b/library/intl/resources/country/zgh.json
@@ -0,0 +1,761 @@
+{
+ "AX": {
+ "name": "Ã…land Islands"
+ },
+ "AQ": {
+ "name": "Antarctica"
+ },
+ "AC": {
+ "name": "Ascension Island"
+ },
+ "IC": {
+ "name": "Canary Islands"
+ },
+ "BQ": {
+ "name": "Caribbean Netherlands"
+ },
+ "EA": {
+ "name": "Ceuta & Melilla"
+ },
+ "CX": {
+ "name": "Christmas Island"
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands"
+ },
+ "CW": {
+ "name": "Curaçao"
+ },
+ "DG": {
+ "name": "Diego Garcia"
+ },
+ "FO": {
+ "name": "Faroe Islands"
+ },
+ "TF": {
+ "name": "French Southern Territories"
+ },
+ "GG": {
+ "name": "Guernsey"
+ },
+ "HK": {
+ "name": "Hong Kong SAR China"
+ },
+ "IM": {
+ "name": "Isle of Man"
+ },
+ "JE": {
+ "name": "Jersey"
+ },
+ "XK": {
+ "name": "Kosovo"
+ },
+ "MO": {
+ "name": "Macau SAR China"
+ },
+ "SX": {
+ "name": "Sint Maarten"
+ },
+ "GS": {
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ "BL": {
+ "name": "St. Barthélemy"
+ },
+ "MF": {
+ "name": "St. Martin"
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen"
+ },
+ "TA": {
+ "name": "Tristan da Cunha"
+ },
+ "UM": {
+ "name": "U.S. Outlying Islands"
+ },
+ "EH": {
+ "name": "Western Sahara"
+ },
+ "PS": {
+ "name": "ⴰⴳⵎⵎⴰⴹ ⵠⵜⴰⴳⵓⵜ ⴷ ⵖⵣⵣⴰ"
+ },
+ "AZ": {
+ "name": "ⴰⴷⵔⴰⴱⵉⵊⴰâµ"
+ },
+ "GI": {
+ "name": "ⴰⴷⵔⴰⵔ ⵠⵟⴰⵕⵉⵇ"
+ },
+ "ZA": {
+ "name": "ⴰⴼⵔⵉⵇⵢⴰ ⵠⵉⴼⴼⵓⵙ"
+ },
+ "AF": {
+ "name": "ⴰⴼⵖⴰâµâµ‰âµ™âµœâ´°âµ"
+ },
+ "AL": {
+ "name": "â´°âµâ´±â´°âµâµ¢â´°"
+ },
+ "DE": {
+ "name": "â´°âµâµŽâ´°âµâµ¢â´°"
+ },
+ "AI": {
+ "name": "â´°âµâ´³âµ‰âµâ´°"
+ },
+ "AO": {
+ "name": "â´°âµâ´³âµ“âµâ´°"
+ },
+ "ID": {
+ "name": "â´°âµâ´·âµ“âµâµ‰âµ™âµ¢â´°"
+ },
+ "AD": {
+ "name": "â´°âµâ´·âµ“ⵔⴰ"
+ },
+ "AG": {
+ "name": "â´°âµâµœâµ‰â´³â´° â´· ⴱⵔⴱⵓⴷⴰ"
+ },
+ "AR": {
+ "name": "ⴰⵔⵊⴰâµâµœâµ‰âµ"
+ },
+ "AM": {
+ "name": "ⴰⵔⵎⵉâµâµ¢â´°"
+ },
+ "AW": {
+ "name": "ⴰⵔⵓⴱⴰ"
+ },
+ "VA": {
+ "name": "ⴰⵡⴰâµâ´½ ⵠⴼⴰⵜⵉⴽⴰâµ"
+ },
+ "PG": {
+ "name": "ⴱⴰⴱⵡⴰ ⵖⵉâµâµ¢â´° ⵜⴰⵎⴰⵢâµâµ“ⵜ"
+ },
+ "PK": {
+ "name": "ⴱⴰⴽⵉⵙⵜⴰâµ"
+ },
+ "BS": {
+ "name": "ⴱⴰⵀⴰⵎⴰⵙ"
+ },
+ "PW": {
+ "name": "ⴱⴰâµâ´°âµ¡"
+ },
+ "PA": {
+ "name": "ⴱⴰâµâ´°âµŽâ´°"
+ },
+ "BD": {
+ "name": "ⴱⴰâµâ´³âµâ´°â´·âµ‰âµ›"
+ },
+ "PY": {
+ "name": "ⴱⴰⵔⴰⴳⵡⴰⵢ"
+ },
+ "BB": {
+ "name": "ⴱⴰⵔⴱⴰⴷ"
+ },
+ "BT": {
+ "name": "ⴱⵀⵓⵜⴰâµ"
+ },
+ "BH": {
+ "name": "ⴱⵃⵔⴰⵢâµ"
+ },
+ "BY": {
+ "name": "ⴱⵉâµâ´°âµ”ⵓⵙⵢⴰ"
+ },
+ "BZ": {
+ "name": "ⴱⵉâµâµ‰âµ£"
+ },
+ "BJ": {
+ "name": "ⴱⵉâµâµ‰âµ"
+ },
+ "PE": {
+ "name": "ⴱⵉⵔⵓ"
+ },
+ "PN": {
+ "name": "ⴱⵉⵜⴽⴰⵢⵔâµ"
+ },
+ "BE": {
+ "name": "â´±âµâµŠâµ‰â´½â´°"
+ },
+ "BG": {
+ "name": "â´±âµâµ–ⴰⵔⵢⴰ"
+ },
+ "BO": {
+ "name": "ⴱⵓâµâµ‰â´±âµ¢â´°"
+ },
+ "PF": {
+ "name": "ⴱⵓâµâµ‰âµâµ‰âµ£âµ¢â´° ⵜⴰⴼⵔⴰâµâµ™âµ‰âµ™âµœ"
+ },
+ "PL": {
+ "name": "ⴱⵓâµâµ“âµâµ¢â´°"
+ },
+ "BF": {
+ "name": "ⴱⵓⵔⴽⵉâµâ´° ⴼⴰⵙⵓ"
+ },
+ "BI": {
+ "name": "ⴱⵓⵔⵓâµâ´·âµ‰"
+ },
+ "PR": {
+ "name": "ⴱⵓⵔⵜⵓ ⵔⵉⴽⵓ"
+ },
+ "BA": {
+ "name": "ⴱⵓⵙâµâ´° â´· ⵀⵉⵔⵙⵉⴽ"
+ },
+ "BW": {
+ "name": "ⴱⵓⵜⵙⵡⴰâµâ´°"
+ },
+ "BR": {
+ "name": "ⴱⵔⴰⵣⵉâµ"
+ },
+ "BM": {
+ "name": "ⴱⵔⵎⵓⴷⴰ"
+ },
+ "BN": {
+ "name": "ⴱⵔⵓâµâµ‰"
+ },
+ "PT": {
+ "name": "ⴱⵕⵟⵇⵉⵣ"
+ },
+ "GA": {
+ "name": "ⴳⴰⴱⵓâµ"
+ },
+ "GM": {
+ "name": "ⴳⴰⵎⴱⵢⴰ"
+ },
+ "GL": {
+ "name": "ⴳⵔⵉâµâ´°âµâ´·"
+ },
+ "GP": {
+ "name": "ⴳⵡⴰⴷⴰâµâµ“â´±"
+ },
+ "GU": {
+ "name": "ⴳⵡⴰⵎ"
+ },
+ "GT": {
+ "name": "ⴳⵡⴰⵜⵉⵎⴰâµâ´°"
+ },
+ "GF": {
+ "name": "ⴳⵡⵉⵢⴰⵠⵜⴰⴼⵔⴰâµâµ™âµ‰âµ™âµœ"
+ },
+ "GY": {
+ "name": "ⴳⵡⵉⵢⴰâµâ´°"
+ },
+ "DK": {
+ "name": "â´·â´°âµâµŽâ´°âµ”â´½"
+ },
+ "DJ": {
+ "name": "ⴷⵊⵉⴱⵓⵜⵉ"
+ },
+ "DM": {
+ "name": "ⴷⵓⵎⵉâµâµ‰â´½"
+ },
+ "DZ": {
+ "name": "ⴷⵣⴰⵢⵔ"
+ },
+ "VU": {
+ "name": "ⴼⴰâµâµ¡â´°âµŸâµ“"
+ },
+ "FJ": {
+ "name": "ⴼⵉⴷⵊⵉ"
+ },
+ "PH": {
+ "name": "ⴼⵉâµâµ‰â´±â´±âµ‰âµ"
+ },
+ "FI": {
+ "name": "ⴼⵉâµâµâ´°âµâ´·â´°"
+ },
+ "VE": {
+ "name": "ⴼⵉâµâµ£âµ¡âµ‰âµâ´°"
+ },
+ "VN": {
+ "name": "ⴼⵉⵜâµâ´°âµŽ"
+ },
+ "FR": {
+ "name": "ⴼⵔⴰâµâµ™â´°"
+ },
+ "NC": {
+ "name": "ⴽⴰâµâµ‰â´·âµ“âµâµ¢â´° ⵜⴰⵎⴰⵢâµâµ“ⵜ"
+ },
+ "KH": {
+ "name": "ⴽⴰⵎⴱⵓⴷⵢⴰ"
+ },
+ "CM": {
+ "name": "ⴽⴰⵎⵉⵔⵓâµ"
+ },
+ "CA": {
+ "name": "ⴽⴰâµâ´°â´·â´°"
+ },
+ "KZ": {
+ "name": "ⴽⴰⵣⴰⵅⵙⵜⴰâµ"
+ },
+ "KE": {
+ "name": "ⴽⵉâµâµ¢â´°"
+ },
+ "KI": {
+ "name": "ⴽⵉⵔⵉⴱⴰⵜⵉ"
+ },
+ "KG": {
+ "name": "ⴽⵉⵔⵖⵉⵣⵉⵙⵜⴰâµ"
+ },
+ "CU": {
+ "name": "ⴽⵓⴱⴰ"
+ },
+ "CO": {
+ "name": "ⴽⵓâµâµ“ⵎⴱⵢⴰ"
+ },
+ "CG": {
+ "name": "ⴽⵓâµâ´³âµ“"
+ },
+ "KR": {
+ "name": "ⴽⵓⵔⵢⴰ ⵠⵉⴼⴼⵓⵙ"
+ },
+ "KP": {
+ "name": "ⴽⵓⵔⵢⴰ ⵠⵉⵥⵥâµâµŽâ´¹"
+ },
+ "CR": {
+ "name": "ⴽⵓⵙⵜⴰ ⵔⵉⴽⴰ"
+ },
+ "CI": {
+ "name": "ⴽⵓⵜ ⴷⵉⴼⵡⴰⵔ"
+ },
+ "HR": {
+ "name": "ⴽⵔⵡⴰⵜⵢⴰ"
+ },
+ "HT": {
+ "name": "ⵀⴰⵢⵜⵉ"
+ },
+ "HU": {
+ "name": "âµ€âµâµ–ⴰⵔⵢⴰ"
+ },
+ "NL": {
+ "name": "ⵀⵓâµâ´°âµâ´·â´°"
+ },
+ "HN": {
+ "name": "ⵀⵓâµâ´·âµ“ⵔⴰⵙ"
+ },
+ "OM": {
+ "name": "ⵄⵓⵎⴰâµ"
+ },
+ "QA": {
+ "name": "ⵇⴰⵜⴰⵔ"
+ },
+ "CY": {
+ "name": "ⵇⵓⴱⵔⵓⵙ"
+ },
+ "KM": {
+ "name": "ⵇⵓⵎⵓⵔ"
+ },
+ "EC": {
+ "name": "ⵉⴽⵡⴰⴷⵓⵔ"
+ },
+ "IR": {
+ "name": "ⵉⵔⴰâµ"
+ },
+ "ER": {
+ "name": "ⵉⵔⵉⵜⵉⵔⵢⴰ"
+ },
+ "IE": {
+ "name": "ⵉⵔâµâ´°âµâ´·â´°"
+ },
+ "IS": {
+ "name": "ⵉⵙâµâ´°âµâ´·"
+ },
+ "IL": {
+ "name": "ⵉⵙⵔⴰⵢⵉâµ"
+ },
+ "EE": {
+ "name": "ⵉⵙⵜⵓâµâµ¢â´°"
+ },
+ "ET": {
+ "name": "ⵉⵜⵢⵓⴱⵢⴰ"
+ },
+ "IT": {
+ "name": "ⵉⵟⴰâµâµ¢â´°"
+ },
+ "US": {
+ "name": "ⵉⵡⵓâµâ´°â´½ ⵎⵓâµâµâµ‰âµ ⵠⵎⵉⵔⵉⴽⴰâµ"
+ },
+ "JM": {
+ "name": "ⵊⴰⵎⴰⵢⴽⴰ"
+ },
+ "GE": {
+ "name": "ⵊⵓⵔⵊⵢⴰ"
+ },
+ "LV": {
+ "name": "âµâ´°âµœâ´¼âµ¢â´°"
+ },
+ "LA": {
+ "name": "âµâ´°âµ¡âµ™"
+ },
+ "KW": {
+ "name": "âµâ´½âµ¡âµ‰âµœ"
+ },
+ "IN": {
+ "name": "âµâµ€âµ‰âµâ´·"
+ },
+ "IQ": {
+ "name": "âµâµ„ⵉⵔⴰⵇ"
+ },
+ "LR": {
+ "name": "âµâµ‰â´±âµ‰âµ”ⵢⴰ"
+ },
+ "LY": {
+ "name": "âµâµ‰â´±âµ¢â´°"
+ },
+ "LI": {
+ "name": "âµâµ‰â´½âµ‰âµâµ›âµœâ´°âµ¢âµ"
+ },
+ "AE": {
+ "name": "âµâµ‰âµŽâ´°âµ”ⴰⵜ"
+ },
+ "LS": {
+ "name": "âµâµ‰âµšâµ“ⵟⵓ"
+ },
+ "LT": {
+ "name": "âµâµ‰âµœâµ¡â´°âµâµ¢â´°"
+ },
+ "MA": {
+ "name": "âµâµŽâµ–ⵔⵉⴱ"
+ },
+ "LB": {
+ "name": "âµâµ“â´±âµâ´°âµ"
+ },
+ "LU": {
+ "name": "âµâµ“ⴽⵙⴰâµâ´±âµ“ⵔⴳ"
+ },
+ "JO": {
+ "name": "âµâµ“ⵔⴷⵓâµ"
+ },
+ "JP": {
+ "name": "âµâµ¢â´°â´±â´°âµ"
+ },
+ "GR": {
+ "name": "âµâµ¢âµ“âµâ´°âµ"
+ },
+ "MG": {
+ "name": "ⵎⴰⴷⴰⵖⴰⵛⵇⴰⵔ"
+ },
+ "MW": {
+ "name": "ⵎⴰâµâ´°âµ¡âµ‰"
+ },
+ "MV": {
+ "name": "ⵎⴰâµâ´·âµ‰â´¼"
+ },
+ "ML": {
+ "name": "ⵎⴰâµâµ‰"
+ },
+ "MY": {
+ "name": "ⵎⴰâµâµ‰âµ£âµ¢â´°"
+ },
+ "MT": {
+ "name": "ⵎⴰâµâµŸâ´°"
+ },
+ "MQ": {
+ "name": "ⵎⴰⵔⵜⵉâµâµ‰â´½"
+ },
+ "MK": {
+ "name": "ⵎⴰⵙⵉⴷⵓâµâµ¢â´°"
+ },
+ "YT": {
+ "name": "ⵎⴰⵢⵓⵟ"
+ },
+ "FM": {
+ "name": "ⵎⵉⴽⵔⵓâµâµ‰âµ£âµ¢â´°"
+ },
+ "MX": {
+ "name": "ⵎⵉⴽⵙⵉⴽ"
+ },
+ "EG": {
+ "name": "ⵎⵉⵚⵕ"
+ },
+ "MN": {
+ "name": "ⵎâµâµ–ⵓâµâµ¢â´°"
+ },
+ "MD": {
+ "name": "ⵎⵓâµâ´·âµ“ⴼⵢⴰ"
+ },
+ "MC": {
+ "name": "ⵎⵓâµâ´°â´½âµ“"
+ },
+ "MS": {
+ "name": "ⵎⵓâµâµ™âµ‰âµ”ⴰⵜ"
+ },
+ "ME": {
+ "name": "ⵎⵓâµâµœâµ‰âµâµ‰â´³âµ”ⵓ"
+ },
+ "MU": {
+ "name": "ⵎⵓⵔⵉⵙ"
+ },
+ "MR": {
+ "name": "ⵎⵓⵕⵉⵟⴰâµâµ¢â´°"
+ },
+ "MZ": {
+ "name": "ⵎⵓⵣâµâ´±âµ‰âµ‡"
+ },
+ "MM": {
+ "name": "ⵎⵢⴰâµâµŽâ´°âµ”"
+ },
+ "NA": {
+ "name": "âµâ´°âµŽâµ‰â´±âµ¢â´°"
+ },
+ "NR": {
+ "name": "âµâ´°âµ¡âµ”ⵓ"
+ },
+ "NP": {
+ "name": "âµâµ‰â´±â´°âµ"
+ },
+ "NI": {
+ "name": "âµâµ‰â´½â´°âµ”ⴰⴳⵡⴰ"
+ },
+ "NG": {
+ "name": "âµâµ‰âµŠâµ‰âµ”ⵢⴰ"
+ },
+ "NU": {
+ "name": "âµâµ‰âµ¡âµ‰"
+ },
+ "NE": {
+ "name": "âµâµâµ‰âµŠâµ‰âµ”"
+ },
+ "AT": {
+ "name": "âµâµâµŽâµ™â´°"
+ },
+ "NO": {
+ "name": "âµâµâµ”ⵡⵉⵊ"
+ },
+ "NZ": {
+ "name": "âµâµ¢âµ“ⵣⵉâµâ´°âµâ´·â´°"
+ },
+ "UA": {
+ "name": "ⵓⴽⵔⴰâµâµ¢â´°"
+ },
+ "UY": {
+ "name": "ⵓⵔⵓⴳⵡⴰⵢ"
+ },
+ "UG": {
+ "name": "ⵓⵖⴰâµâ´·â´°"
+ },
+ "AU": {
+ "name": "ⵓⵙⵜⵔⴰâµâµ¢â´°"
+ },
+ "UZ": {
+ "name": "ⵓⵣⴱⴰⴽⵉⵙⵜⴰâµ"
+ },
+ "RE": {
+ "name": "ⵔⵉⵢⵓâµâµ¢âµ“âµ"
+ },
+ "RO": {
+ "name": "ⵔⵓⵎⴰâµâµ¢â´°"
+ },
+ "RU": {
+ "name": "ⵔⵓⵙⵢⴰ"
+ },
+ "RW": {
+ "name": "ⵔⵡⴰâµâ´·â´°"
+ },
+ "GH": {
+ "name": "âµ–â´°âµâ´°"
+ },
+ "GN": {
+ "name": "ⵖⵉâµâµ¢â´°"
+ },
+ "GW": {
+ "name": "ⵖⵉâµâµ¢â´° ⴱⵉⵙⴰⵡ"
+ },
+ "GQ": {
+ "name": "ⵖⵉâµâµ¢â´° ⵠⵉⴽⵡⴰⴷⵓⵔ"
+ },
+ "GD": {
+ "name": "âµ–âµ”âµâ´°âµŸâ´°"
+ },
+ "SV": {
+ "name": "ⵙⴰâµâ´¼â´°â´·âµ“âµ”"
+ },
+ "WS": {
+ "name": "ⵙⴰⵎⵡⴰ"
+ },
+ "AS": {
+ "name": "ⵙⴰⵎⵡⴰ ⵜⴰⵎⵉⵔⵉⴽⴰâµâµ‰âµœ"
+ },
+ "PM": {
+ "name": "ⵙⴰâµâ´±âµ¢âµ‰âµ” â´· ⵎⵉⴽâµâµ“âµ"
+ },
+ "VC": {
+ "name": "ⵙⴰâµâ´¼â´°âµâµ™â´°âµ â´· ⴳⵔⵉâµâ´°â´·âµ‰âµ"
+ },
+ "KN": {
+ "name": "ⵙⴰâµâ´½âµ”ⵉⵙ â´· âµâµ‰â´¼âµ‰âµ™"
+ },
+ "SM": {
+ "name": "ⵙⴰâµâµŽâ´°âµ”ⵉâµâµ“"
+ },
+ "SH": {
+ "name": "ⵙⴰâµâµœâµ‰âµâµ‰âµ"
+ },
+ "LC": {
+ "name": "ⵙⴰâµâµœâµâµ“ⵙⵉ"
+ },
+ "ST": {
+ "name": "ⵙⴰⵡⵟⵓⵎⵉ â´· ⴱⵔⴰâµâµ™âµ‰â´±"
+ },
+ "ES": {
+ "name": "ⵙⴱⴰâµâµ¢â´°"
+ },
+ "RS": {
+ "name": "ⵙⵉⵔⴱⵢⴰ"
+ },
+ "SK": {
+ "name": "âµ™âµâµ“ⴼⴰⴽⵢⴰ"
+ },
+ "SI": {
+ "name": "âµ™âµâµ“ⴼⵉâµâµ¢â´°"
+ },
+ "SG": {
+ "name": "âµ™âµâµ–ⴰⴼⵓⵔⴰ"
+ },
+ "SR": {
+ "name": "ⵙⵓⵔⵉâµâ´°âµŽ"
+ },
+ "SY": {
+ "name": "ⵙⵓⵔⵢⴰ"
+ },
+ "LK": {
+ "name": "ⵙⵔⵉâµâ´°âµâ´½â´°"
+ },
+ "SA": {
+ "name": "ⵙⵙⴰⵄⵓⴷⵉⵢⴰ"
+ },
+ "SN": {
+ "name": "ⵙⵙⵉâµâµ‰â´³â´°âµ"
+ },
+ "SL": {
+ "name": "ⵙⵙⵉⵔⴰâµâµ¢âµ“âµ"
+ },
+ "SC": {
+ "name": "ⵙⵙⵉⵛⵉâµ"
+ },
+ "SD": {
+ "name": "ⵙⵙⵓⴷⴰâµ"
+ },
+ "SS": {
+ "name": "ⵙⵙⵓⴷⴰⵠⵠⵉⴼⴼⵓⵙ"
+ },
+ "SE": {
+ "name": "ⵙⵙⵡⵉⴷ"
+ },
+ "SZ": {
+ "name": "ⵙⵡⴰⵣⵉâµâ´°âµâ´·â´°"
+ },
+ "CH": {
+ "name": "ⵙⵡⵉⵙⵔⴰ"
+ },
+ "SO": {
+ "name": "ⵚⵚⵓⵎⴰâµ"
+ },
+ "CL": {
+ "name": "ⵛⵛⵉâµâµ‰"
+ },
+ "CN": {
+ "name": "ⵛⵛⵉâµâµ¡â´°"
+ },
+ "CD": {
+ "name": "ⵜⴰⴳⴷⵓⴷⴰâµâµœ ⵜⴰⴷⵉⵎⵓⵇⵔⴰⵜⵉⵜ ⵠⴽⵓâµâ´³âµ“"
+ },
+ "DO": {
+ "name": "ⵜⴰⴳⴷⵓⴷⴰâµâµœ ⵜⴰⴷⵓⵎⵉâµâµ‰â´½âµœ"
+ },
+ "CF": {
+ "name": "ⵜⴰⴳⴷⵓⴷⴰâµâµœ ⵜⴰâµâ´°âµŽâµŽâ´°âµ™âµœ ⵠⵉⴼⵔⵉⵇⵢⴰ"
+ },
+ "CZ": {
+ "name": "ⵜⴰⴳⴷⵓⴷⴰâµâµœ ⵜⴰⵜⵛⵉⴽⵉⵜ"
+ },
+ "GB": {
+ "name": "ⵜⴰⴳâµâ´·âµ‰âµœ ⵉⵎⵓâµâµ"
+ },
+ "TJ": {
+ "name": "ⵜⴰⴷⵊⴰⴽⵉⵙⵜⴰâµ"
+ },
+ "IO": {
+ "name": "ⵜⴰⵎâµâ´°â´¹âµœ ⵜⴰâµâ´³âµâµ‰âµ£âµ‰âµœ ⵠⵓⴳⴰⵔⵓ ⴰⵀⵉâµâ´·âµ‰"
+ },
+ "CV": {
+ "name": "ⵜⵉⴳⵣⵉⵔⵉⵠⵠⴽⴰⴱⴱⵉⵔⴷⵉ"
+ },
+ "KY": {
+ "name": "ⵜⵉⴳⵣⵉⵔⵉⵠⵠⴽⴰⵢⵎⴰâµ"
+ },
+ "CK": {
+ "name": "ⵜⵉⴳⵣⵉⵔⵉⵠⵠⴽⵓⴽ"
+ },
+ "FK": {
+ "name": "ⵜⵉⴳⵣⵉⵔⵉⵠⵠⵎⴰâµâ´°âµ¡âµ‰"
+ },
+ "MH": {
+ "name": "ⵜⵉⴳⵣⵉⵔⵉⵠⵠⵎⴰⵔⵛⴰâµ"
+ },
+ "MP": {
+ "name": "ⵜⵉⴳⵣⵉⵔⵉⵠⵠⵎⴰⵔⵢⴰⵠⵠⵉⵥⵥâµâµŽâ´¹"
+ },
+ "NF": {
+ "name": "ⵜⵉⴳⵣⵉⵔⵉⵠⵠâµâµ“ⵔⴼⵓâµâ´½"
+ },
+ "SB": {
+ "name": "ⵜⵉⴳⵣⵉⵔⵉⵠⵠⵙⴰâµâµ“ⵎⴰâµ"
+ },
+ "TC": {
+ "name": "ⵜⵉⴳⵣⵉⵔⵉⵠⵠⵜⵓⵔⴽⵢⴰ ⴷ ⴽⴰⵢⴽ"
+ },
+ "VI": {
+ "name": "ⵜⵉⴳⵣⵉⵔⵉⵠⵜⵉⵎⴳⴰⴷ ⵠⵉⵡⵓâµâ´°â´½ ⵎⵓâµâµâµ‰âµ"
+ },
+ "VG": {
+ "name": "ⵜⵉⴳⵣⵉⵔⵉⵠⵜⵉⵎⴳⴰⴷ âµ âµâµâ´³âµâµ‰âµ£"
+ },
+ "TL": {
+ "name": "ⵜⵉⵎⵓⵔ âµ âµâµ‡â´±âµâµœ"
+ },
+ "TV": {
+ "name": "ⵜⵓⴼⴰâµâµ“"
+ },
+ "TN": {
+ "name": "ⵜⵓâµâµ™"
+ },
+ "TM": {
+ "name": "ⵜⵓⵔⴽⵎⴰâµâµ™âµœâ´°âµ"
+ },
+ "TR": {
+ "name": "ⵜⵓⵔⴽⵢⴰ"
+ },
+ "TT": {
+ "name": "ⵜⵔⵉâµâµ‰â´·â´°â´· â´· ⵟⵓⴱⴰⴳⵓ"
+ },
+ "TD": {
+ "name": "ⵜⵛⴰⴷ"
+ },
+ "TZ": {
+ "name": "ⵟⴰâµâµ¥â´°âµâµ¢â´°"
+ },
+ "TH": {
+ "name": "ⵟⴰⵢâµâ´°âµâ´·"
+ },
+ "TW": {
+ "name": "ⵟⴰⵢⵡⴰâµ"
+ },
+ "TG": {
+ "name": "ⵟⵓⴳⵓ"
+ },
+ "TK": {
+ "name": "ⵟⵓⴽâµâ´°âµ¡"
+ },
+ "TO": {
+ "name": "ⵟⵓâµâ´³â´°"
+ },
+ "WF": {
+ "name": "ⵡⴰâµâµ‰âµ™ â´· ⴼⵓⵜⵓâµâ´°"
+ },
+ "YE": {
+ "name": "ⵢⴰⵎⴰâµ"
+ },
+ "ZM": {
+ "name": "ⵣⴰⵎⴱⵢⴰ"
+ },
+ "ZW": {
+ "name": "ⵣⵉⵎⴱⴰⴱⵡⵉ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/zh-Hans-HK.json b/library/intl/resources/country/zh-Hans-HK.json
new file mode 100644
index 000000000..b1984d291
--- /dev/null
+++ b/library/intl/resources/country/zh-Hans-HK.json
@@ -0,0 +1,761 @@
+{
+ "AL": {
+ "name": "阿尔巴尼亚"
+ },
+ "DZ": {
+ "name": "阿尔åŠåˆ©äºš"
+ },
+ "AF": {
+ "name": "阿富汗"
+ },
+ "AR": {
+ "name": "阿根廷"
+ },
+ "AE": {
+ "name": "阿拉伯è”åˆé…‹é•¿å›½"
+ },
+ "AW": {
+ "name": "阿é²å·´"
+ },
+ "OM": {
+ "name": "阿曼"
+ },
+ "AZ": {
+ "name": "阿塞拜疆"
+ },
+ "AC": {
+ "name": "阿森æ¾å²›"
+ },
+ "EG": {
+ "name": "埃åŠ"
+ },
+ "ET": {
+ "name": "埃塞俄比亚"
+ },
+ "IE": {
+ "name": "爱尔兰"
+ },
+ "EE": {
+ "name": "爱沙尼亚"
+ },
+ "AD": {
+ "name": "安é“å°”"
+ },
+ "AO": {
+ "name": "安哥拉"
+ },
+ "AI": {
+ "name": "安圭拉"
+ },
+ "AG": {
+ "name": "安æ瓜和巴布达"
+ },
+ "AT": {
+ "name": "奥地利"
+ },
+ "AX": {
+ "name": "奥兰群岛"
+ },
+ "AU": {
+ "name": "澳大利亚"
+ },
+ "BB": {
+ "name": "巴巴多斯"
+ },
+ "PG": {
+ "name": "巴布亚新几内亚"
+ },
+ "BS": {
+ "name": "巴哈马"
+ },
+ "PK": {
+ "name": "巴基斯å¦"
+ },
+ "PY": {
+ "name": "巴拉圭"
+ },
+ "PS": {
+ "name": "å·´å‹’æ–¯å¦é¢†åœŸ"
+ },
+ "BH": {
+ "name": "å·´æž—"
+ },
+ "PA": {
+ "name": "巴拿马"
+ },
+ "BR": {
+ "name": "巴西"
+ },
+ "BY": {
+ "name": "白俄罗斯"
+ },
+ "BM": {
+ "name": "百慕大"
+ },
+ "BG": {
+ "name": "ä¿åŠ åˆ©äºš"
+ },
+ "MP": {
+ "name": "北马里亚纳群岛"
+ },
+ "BJ": {
+ "name": "è´å®"
+ },
+ "BE": {
+ "name": "比利时"
+ },
+ "IS": {
+ "name": "冰岛"
+ },
+ "PR": {
+ "name": "波多黎å„"
+ },
+ "PL": {
+ "name": "波兰"
+ },
+ "BA": {
+ "name": "波斯尼亚和黑塞哥维那"
+ },
+ "BO": {
+ "name": "玻利维亚"
+ },
+ "BZ": {
+ "name": "伯利兹"
+ },
+ "BW": {
+ "name": "åšèŒ¨ç“¦çº³"
+ },
+ "BT": {
+ "name": "ä¸ä¸¹"
+ },
+ "BF": {
+ "name": "布基纳法索"
+ },
+ "BI": {
+ "name": "布隆迪"
+ },
+ "KP": {
+ "name": "æœé²œ"
+ },
+ "GQ": {
+ "name": "赤é“几内亚"
+ },
+ "DK": {
+ "name": "丹麦"
+ },
+ "DE": {
+ "name": "德国"
+ },
+ "DG": {
+ "name": "迪戈加西亚岛"
+ },
+ "TL": {
+ "name": "东å¸æ±¶"
+ },
+ "TG": {
+ "name": "多哥"
+ },
+ "DO": {
+ "name": "多米尼加共和国"
+ },
+ "DM": {
+ "name": "多米尼克"
+ },
+ "RU": {
+ "name": "ä¿„ç½—æ–¯"
+ },
+ "EC": {
+ "name": "厄瓜多尔"
+ },
+ "ER": {
+ "name": "厄立特里亚"
+ },
+ "FR": {
+ "name": "法国"
+ },
+ "FO": {
+ "name": "法罗群岛"
+ },
+ "PF": {
+ "name": "法属波利尼西亚"
+ },
+ "GF": {
+ "name": "法属圭亚那"
+ },
+ "TF": {
+ "name": "法属å—部领地"
+ },
+ "MF": {
+ "name": "法属圣马ä¸"
+ },
+ "VA": {
+ "name": "梵蒂冈"
+ },
+ "PH": {
+ "name": "è²å¾‹å®¾"
+ },
+ "FJ": {
+ "name": "æ–济"
+ },
+ "FI": {
+ "name": "芬兰"
+ },
+ "CV": {
+ "name": "佛得角"
+ },
+ "FK": {
+ "name": "ç¦å…‹å…°ç¾¤å²›"
+ },
+ "GM": {
+ "name": "冈比亚"
+ },
+ "CG": {
+ "name": "刚果(布)"
+ },
+ "CD": {
+ "name": "刚果(金)"
+ },
+ "CO": {
+ "name": "哥伦比亚"
+ },
+ "CR": {
+ "name": "哥斯达黎加"
+ },
+ "GD": {
+ "name": "格林纳达"
+ },
+ "GL": {
+ "name": "格陵兰"
+ },
+ "GE": {
+ "name": "æ ¼é²å‰äºš"
+ },
+ "GG": {
+ "name": "根西岛"
+ },
+ "CU": {
+ "name": "å¤å·´"
+ },
+ "GP": {
+ "name": "瓜德罗普岛"
+ },
+ "GU": {
+ "name": "关岛"
+ },
+ "GY": {
+ "name": "圭亚那"
+ },
+ "KZ": {
+ "name": "哈è¨å…‹æ–¯å¦"
+ },
+ "HT": {
+ "name": "海地"
+ },
+ "KR": {
+ "name": "韩国"
+ },
+ "NL": {
+ "name": "è·å…°"
+ },
+ "BQ": {
+ "name": "è·å…°åŠ å‹’比区"
+ },
+ "SX": {
+ "name": "è·å±žåœ£é©¬ä¸"
+ },
+ "ME": {
+ "name": "黑山"
+ },
+ "HN": {
+ "name": "洪都拉斯"
+ },
+ "KI": {
+ "name": "基里巴斯"
+ },
+ "DJ": {
+ "name": "å‰å¸ƒæ"
+ },
+ "KG": {
+ "name": "å‰å°”å‰æ–¯æ–¯å¦"
+ },
+ "GN": {
+ "name": "几内亚"
+ },
+ "GW": {
+ "name": "几内亚比ç»"
+ },
+ "CA": {
+ "name": "加拿大"
+ },
+ "GH": {
+ "name": "加纳"
+ },
+ "IC": {
+ "name": "加纳利群岛"
+ },
+ "GA": {
+ "name": "加蓬"
+ },
+ "KH": {
+ "name": "柬埔寨"
+ },
+ "CZ": {
+ "name": "æ·å…‹å…±å’Œå›½"
+ },
+ "ZW": {
+ "name": "津巴布韦"
+ },
+ "CM": {
+ "name": "喀麦隆"
+ },
+ "QA": {
+ "name": "å¡å¡”å°”"
+ },
+ "KY": {
+ "name": "开曼群岛"
+ },
+ "CC": {
+ "name": "科科斯(基林)群岛"
+ },
+ "KM": {
+ "name": "科摩罗"
+ },
+ "XK": {
+ "name": "科索沃"
+ },
+ "CI": {
+ "name": "科特迪瓦"
+ },
+ "KW": {
+ "name": "科å¨ç‰¹"
+ },
+ "HR": {
+ "name": "克罗地亚"
+ },
+ "KE": {
+ "name": "肯尼亚"
+ },
+ "CK": {
+ "name": "库克群岛"
+ },
+ "CW": {
+ "name": "库拉索"
+ },
+ "LV": {
+ "name": "拉脱维亚"
+ },
+ "LS": {
+ "name": "莱索托"
+ },
+ "LA": {
+ "name": "è€æŒ"
+ },
+ "LB": {
+ "name": "黎巴嫩"
+ },
+ "LT": {
+ "name": "立陶宛"
+ },
+ "LR": {
+ "name": "利比里亚"
+ },
+ "LY": {
+ "name": "利比亚"
+ },
+ "LI": {
+ "name": "列支敦士登"
+ },
+ "RE": {
+ "name": "留尼汪"
+ },
+ "LU": {
+ "name": "å¢æ£®å ¡"
+ },
+ "RW": {
+ "name": "å¢æ—ºè¾¾"
+ },
+ "RO": {
+ "name": "罗马尼亚"
+ },
+ "MG": {
+ "name": "马达加斯加"
+ },
+ "MV": {
+ "name": "马尔代夫"
+ },
+ "MT": {
+ "name": "马耳他"
+ },
+ "MW": {
+ "name": "马拉维"
+ },
+ "MY": {
+ "name": "马æ¥è¥¿äºš"
+ },
+ "ML": {
+ "name": "马里"
+ },
+ "MK": {
+ "name": "马其顿"
+ },
+ "MH": {
+ "name": "马ç»å°”群岛"
+ },
+ "MQ": {
+ "name": "马æ尼克"
+ },
+ "YT": {
+ "name": "马约特"
+ },
+ "IM": {
+ "name": "曼岛"
+ },
+ "MU": {
+ "name": "毛里求斯"
+ },
+ "MR": {
+ "name": "毛里塔尼亚"
+ },
+ "US": {
+ "name": "美国"
+ },
+ "UM": {
+ "name": "美国本土外å°å²›å±¿"
+ },
+ "AS": {
+ "name": "美属è¨æ‘©äºš"
+ },
+ "VI": {
+ "name": "美属维京群岛"
+ },
+ "MN": {
+ "name": "è’™å¤"
+ },
+ "MS": {
+ "name": "蒙特塞拉特"
+ },
+ "BD": {
+ "name": "孟加拉国"
+ },
+ "PE": {
+ "name": "秘é²"
+ },
+ "FM": {
+ "name": "密克罗尼西亚"
+ },
+ "MM": {
+ "name": "缅甸"
+ },
+ "MD": {
+ "name": "摩尔多瓦"
+ },
+ "MA": {
+ "name": "摩洛哥"
+ },
+ "MC": {
+ "name": "摩纳哥"
+ },
+ "MZ": {
+ "name": "莫桑比克"
+ },
+ "MX": {
+ "name": "墨西哥"
+ },
+ "NA": {
+ "name": "纳米比亚"
+ },
+ "ZA": {
+ "name": "å—éž"
+ },
+ "AQ": {
+ "name": "å—æžæ´²"
+ },
+ "GS": {
+ "name": "å—乔治亚岛和å—æ¡‘å¨é½ç¾¤å²›"
+ },
+ "SS": {
+ "name": "å—è‹ä¸¹"
+ },
+ "NR": {
+ "name": "ç‘™é²"
+ },
+ "NI": {
+ "name": "尼加拉瓜"
+ },
+ "NP": {
+ "name": "尼泊尔"
+ },
+ "NE": {
+ "name": "尼日尔"
+ },
+ "NG": {
+ "name": "尼日利亚"
+ },
+ "NU": {
+ "name": "纽埃"
+ },
+ "NO": {
+ "name": "挪å¨"
+ },
+ "NF": {
+ "name": "诺ç¦å…‹å²›"
+ },
+ "PW": {
+ "name": "帕劳"
+ },
+ "PN": {
+ "name": "皮特凯æ©ç¾¤å²›"
+ },
+ "PT": {
+ "name": "è‘¡è„牙"
+ },
+ "JP": {
+ "name": "日本"
+ },
+ "SE": {
+ "name": "ç‘žå…¸"
+ },
+ "CH": {
+ "name": "瑞士"
+ },
+ "SV": {
+ "name": "è¨å°”瓦多"
+ },
+ "WS": {
+ "name": "è¨æ‘©äºš"
+ },
+ "RS": {
+ "name": "塞尔维亚"
+ },
+ "SL": {
+ "name": "塞拉利昂"
+ },
+ "SN": {
+ "name": "塞内加尔"
+ },
+ "CY": {
+ "name": "塞浦路斯"
+ },
+ "SC": {
+ "name": "塞舌尔"
+ },
+ "SA": {
+ "name": "沙特阿拉伯"
+ },
+ "BL": {
+ "name": "圣巴泰勒米"
+ },
+ "CX": {
+ "name": "圣诞岛"
+ },
+ "ST": {
+ "name": "圣多美和普林西比"
+ },
+ "SH": {
+ "name": "圣赫勒拿"
+ },
+ "KN": {
+ "name": "圣基茨和尼维斯"
+ },
+ "LC": {
+ "name": "圣å¢è¥¿äºš"
+ },
+ "SM": {
+ "name": "圣马力诺"
+ },
+ "PM": {
+ "name": "圣皮埃尔和密克隆"
+ },
+ "VC": {
+ "name": "圣文森特和格林纳ä¸æ–¯"
+ },
+ "LK": {
+ "name": "斯里兰å¡"
+ },
+ "SK": {
+ "name": "斯洛ä¼å…‹"
+ },
+ "SI": {
+ "name": "斯洛文尼亚"
+ },
+ "SJ": {
+ "name": "斯瓦尔巴特和扬马延"
+ },
+ "SZ": {
+ "name": "æ–¯å¨å£«å…°"
+ },
+ "SD": {
+ "name": "è‹ä¸¹"
+ },
+ "SR": {
+ "name": "è‹é‡Œå—"
+ },
+ "SB": {
+ "name": "所罗门群岛"
+ },
+ "SO": {
+ "name": "索马里"
+ },
+ "TJ": {
+ "name": "å¡”å‰å…‹æ–¯å¦"
+ },
+ "TW": {
+ "name": "å°æ¹¾"
+ },
+ "TH": {
+ "name": "泰国"
+ },
+ "TZ": {
+ "name": "å¦æ¡‘尼亚"
+ },
+ "TO": {
+ "name": "汤加"
+ },
+ "TC": {
+ "name": "特克斯和凯科斯群岛"
+ },
+ "TA": {
+ "name": "特里斯å¦-达库尼亚群岛"
+ },
+ "TT": {
+ "name": "特立尼达和多巴哥"
+ },
+ "TN": {
+ "name": "çªå°¼æ–¯"
+ },
+ "TV": {
+ "name": "图瓦å¢"
+ },
+ "TR": {
+ "name": "土耳其"
+ },
+ "TM": {
+ "name": "土库曼斯å¦"
+ },
+ "TK": {
+ "name": "托克劳"
+ },
+ "WF": {
+ "name": "瓦利斯和富图纳"
+ },
+ "VU": {
+ "name": "瓦努阿图"
+ },
+ "GT": {
+ "name": "å±åœ°é©¬æ‹‰"
+ },
+ "VE": {
+ "name": "委内瑞拉"
+ },
+ "BN": {
+ "name": "文莱"
+ },
+ "UG": {
+ "name": "乌干达"
+ },
+ "UA": {
+ "name": "乌克兰"
+ },
+ "UY": {
+ "name": "乌拉圭"
+ },
+ "UZ": {
+ "name": "乌兹别克斯å¦"
+ },
+ "GR": {
+ "name": "希腊"
+ },
+ "ES": {
+ "name": "西ç­ç‰™"
+ },
+ "EH": {
+ "name": "西撒哈拉"
+ },
+ "SG": {
+ "name": "新加å¡"
+ },
+ "NC": {
+ "name": "新喀里多尼亚"
+ },
+ "NZ": {
+ "name": "新西兰"
+ },
+ "HU": {
+ "name": "匈牙利"
+ },
+ "EA": {
+ "name": "休达åŠæ¢…利利亚"
+ },
+ "SY": {
+ "name": "å™åˆ©äºš"
+ },
+ "JM": {
+ "name": "牙买加"
+ },
+ "AM": {
+ "name": "亚美尼亚"
+ },
+ "YE": {
+ "name": "也门"
+ },
+ "IQ": {
+ "name": "伊拉克"
+ },
+ "IR": {
+ "name": "伊朗"
+ },
+ "IL": {
+ "name": "以色列"
+ },
+ "IT": {
+ "name": "æ„大利"
+ },
+ "IN": {
+ "name": "å°åº¦"
+ },
+ "ID": {
+ "name": "å°åº¦å°¼è¥¿äºš"
+ },
+ "GB": {
+ "name": "英国"
+ },
+ "VG": {
+ "name": "英属维京群岛"
+ },
+ "IO": {
+ "name": "英属å°åº¦æ´‹é¢†åœ°"
+ },
+ "JO": {
+ "name": "约旦"
+ },
+ "VN": {
+ "name": "越å—"
+ },
+ "ZM": {
+ "name": "赞比亚"
+ },
+ "JE": {
+ "name": "泽西岛"
+ },
+ "TD": {
+ "name": "ä¹å¾—"
+ },
+ "GI": {
+ "name": "直布罗陀"
+ },
+ "CL": {
+ "name": "智利"
+ },
+ "CF": {
+ "name": "中éžå…±å’Œå›½"
+ },
+ "CN": {
+ "name": "中国"
+ },
+ "MO": {
+ "name": "中国澳门特别行政区"
+ },
+ "HK": {
+ "name": "中国香港特别行政区"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/zh-Hans-MO.json b/library/intl/resources/country/zh-Hans-MO.json
new file mode 100644
index 000000000..dac93f65b
--- /dev/null
+++ b/library/intl/resources/country/zh-Hans-MO.json
@@ -0,0 +1,761 @@
+{
+ "AL": {
+ "name": "阿尔巴尼亚"
+ },
+ "DZ": {
+ "name": "阿尔åŠåˆ©äºš"
+ },
+ "AF": {
+ "name": "阿富汗"
+ },
+ "AR": {
+ "name": "阿根廷"
+ },
+ "AE": {
+ "name": "阿拉伯è”åˆé…‹é•¿å›½"
+ },
+ "AW": {
+ "name": "阿é²å·´"
+ },
+ "OM": {
+ "name": "阿曼"
+ },
+ "AZ": {
+ "name": "阿塞拜疆"
+ },
+ "AC": {
+ "name": "阿森æ¾å²›"
+ },
+ "EG": {
+ "name": "埃åŠ"
+ },
+ "ET": {
+ "name": "埃塞俄比亚"
+ },
+ "IE": {
+ "name": "爱尔兰"
+ },
+ "EE": {
+ "name": "爱沙尼亚"
+ },
+ "AD": {
+ "name": "安é“å°”"
+ },
+ "AO": {
+ "name": "安哥拉"
+ },
+ "AI": {
+ "name": "安圭拉"
+ },
+ "AG": {
+ "name": "安æ瓜和巴布达"
+ },
+ "AT": {
+ "name": "奥地利"
+ },
+ "AX": {
+ "name": "奥兰群岛"
+ },
+ "AU": {
+ "name": "澳大利亚"
+ },
+ "BB": {
+ "name": "巴巴多斯"
+ },
+ "PG": {
+ "name": "巴布亚新几内亚"
+ },
+ "BS": {
+ "name": "巴哈马"
+ },
+ "PK": {
+ "name": "巴基斯å¦"
+ },
+ "PY": {
+ "name": "巴拉圭"
+ },
+ "PS": {
+ "name": "å·´å‹’æ–¯å¦é¢†åœŸ"
+ },
+ "BH": {
+ "name": "å·´æž—"
+ },
+ "PA": {
+ "name": "巴拿马"
+ },
+ "BR": {
+ "name": "巴西"
+ },
+ "BY": {
+ "name": "白俄罗斯"
+ },
+ "BM": {
+ "name": "百慕大"
+ },
+ "BG": {
+ "name": "ä¿åŠ åˆ©äºš"
+ },
+ "MP": {
+ "name": "北马里亚纳群岛"
+ },
+ "BJ": {
+ "name": "è´å®"
+ },
+ "BE": {
+ "name": "比利时"
+ },
+ "IS": {
+ "name": "冰岛"
+ },
+ "PR": {
+ "name": "波多黎å„"
+ },
+ "PL": {
+ "name": "波兰"
+ },
+ "BA": {
+ "name": "波斯尼亚和黑塞哥维那"
+ },
+ "BO": {
+ "name": "玻利维亚"
+ },
+ "BZ": {
+ "name": "伯利兹"
+ },
+ "BW": {
+ "name": "åšèŒ¨ç“¦çº³"
+ },
+ "BT": {
+ "name": "ä¸ä¸¹"
+ },
+ "BF": {
+ "name": "布基纳法索"
+ },
+ "BI": {
+ "name": "布隆迪"
+ },
+ "KP": {
+ "name": "æœé²œ"
+ },
+ "GQ": {
+ "name": "赤é“几内亚"
+ },
+ "DK": {
+ "name": "丹麦"
+ },
+ "DE": {
+ "name": "德国"
+ },
+ "DG": {
+ "name": "迪戈加西亚岛"
+ },
+ "TL": {
+ "name": "东å¸æ±¶"
+ },
+ "TG": {
+ "name": "多哥"
+ },
+ "DO": {
+ "name": "多米尼加共和国"
+ },
+ "DM": {
+ "name": "多米尼克"
+ },
+ "RU": {
+ "name": "ä¿„ç½—æ–¯"
+ },
+ "EC": {
+ "name": "厄瓜多尔"
+ },
+ "ER": {
+ "name": "厄立特里亚"
+ },
+ "FR": {
+ "name": "法国"
+ },
+ "FO": {
+ "name": "法罗群岛"
+ },
+ "PF": {
+ "name": "法属波利尼西亚"
+ },
+ "GF": {
+ "name": "法属圭亚那"
+ },
+ "TF": {
+ "name": "法属å—部领地"
+ },
+ "MF": {
+ "name": "法属圣马ä¸"
+ },
+ "VA": {
+ "name": "梵蒂冈"
+ },
+ "PH": {
+ "name": "è²å¾‹å®¾"
+ },
+ "FJ": {
+ "name": "æ–济"
+ },
+ "FI": {
+ "name": "芬兰"
+ },
+ "CV": {
+ "name": "佛得角"
+ },
+ "FK": {
+ "name": "ç¦å…‹å…°ç¾¤å²›"
+ },
+ "GM": {
+ "name": "冈比亚"
+ },
+ "CG": {
+ "name": "刚果(布)"
+ },
+ "CD": {
+ "name": "刚果(金)"
+ },
+ "CO": {
+ "name": "哥伦比亚"
+ },
+ "CR": {
+ "name": "哥斯达黎加"
+ },
+ "GD": {
+ "name": "格林纳达"
+ },
+ "GL": {
+ "name": "格陵兰"
+ },
+ "GE": {
+ "name": "æ ¼é²å‰äºš"
+ },
+ "GG": {
+ "name": "根西岛"
+ },
+ "CU": {
+ "name": "å¤å·´"
+ },
+ "GP": {
+ "name": "瓜德罗普"
+ },
+ "GU": {
+ "name": "关岛"
+ },
+ "GY": {
+ "name": "圭亚那"
+ },
+ "KZ": {
+ "name": "哈è¨å…‹æ–¯å¦"
+ },
+ "HT": {
+ "name": "海地"
+ },
+ "KR": {
+ "name": "韩国"
+ },
+ "NL": {
+ "name": "è·å…°"
+ },
+ "BQ": {
+ "name": "è·å…°åŠ å‹’比区"
+ },
+ "SX": {
+ "name": "è·å±žåœ£é©¬ä¸"
+ },
+ "ME": {
+ "name": "黑山"
+ },
+ "HN": {
+ "name": "洪都拉斯"
+ },
+ "KI": {
+ "name": "基里巴斯"
+ },
+ "DJ": {
+ "name": "å‰å¸ƒæ"
+ },
+ "KG": {
+ "name": "å‰å°”å‰æ–¯æ–¯å¦"
+ },
+ "GN": {
+ "name": "几内亚"
+ },
+ "GW": {
+ "name": "几内亚比ç»"
+ },
+ "CA": {
+ "name": "加拿大"
+ },
+ "GH": {
+ "name": "加纳"
+ },
+ "IC": {
+ "name": "加纳利群岛"
+ },
+ "GA": {
+ "name": "加蓬"
+ },
+ "KH": {
+ "name": "柬埔寨"
+ },
+ "CZ": {
+ "name": "æ·å…‹å…±å’Œå›½"
+ },
+ "ZW": {
+ "name": "津巴布韦"
+ },
+ "CM": {
+ "name": "喀麦隆"
+ },
+ "QA": {
+ "name": "å¡å¡”å°”"
+ },
+ "KY": {
+ "name": "开曼群岛"
+ },
+ "CC": {
+ "name": "科科斯(基林)群岛"
+ },
+ "KM": {
+ "name": "科摩罗"
+ },
+ "XK": {
+ "name": "科索沃"
+ },
+ "CI": {
+ "name": "科特迪瓦"
+ },
+ "KW": {
+ "name": "科å¨ç‰¹"
+ },
+ "HR": {
+ "name": "克罗地亚"
+ },
+ "KE": {
+ "name": "肯尼亚"
+ },
+ "CK": {
+ "name": "库克群岛"
+ },
+ "CW": {
+ "name": "库拉索"
+ },
+ "LV": {
+ "name": "拉脱维亚"
+ },
+ "LS": {
+ "name": "莱索托"
+ },
+ "LA": {
+ "name": "è€æŒ"
+ },
+ "LB": {
+ "name": "黎巴嫩"
+ },
+ "LT": {
+ "name": "立陶宛"
+ },
+ "LR": {
+ "name": "利比里亚"
+ },
+ "LY": {
+ "name": "利比亚"
+ },
+ "LI": {
+ "name": "列支敦士登"
+ },
+ "RE": {
+ "name": "留尼汪"
+ },
+ "LU": {
+ "name": "å¢æ£®å ¡"
+ },
+ "RW": {
+ "name": "å¢æ—ºè¾¾"
+ },
+ "RO": {
+ "name": "罗马尼亚"
+ },
+ "MG": {
+ "name": "马达加斯加"
+ },
+ "MV": {
+ "name": "马尔代夫"
+ },
+ "MT": {
+ "name": "马耳他"
+ },
+ "MW": {
+ "name": "马拉维"
+ },
+ "MY": {
+ "name": "马æ¥è¥¿äºš"
+ },
+ "ML": {
+ "name": "马里"
+ },
+ "MK": {
+ "name": "马其顿"
+ },
+ "MH": {
+ "name": "马ç»å°”群岛"
+ },
+ "MQ": {
+ "name": "马æ尼克"
+ },
+ "YT": {
+ "name": "马约特"
+ },
+ "IM": {
+ "name": "曼岛"
+ },
+ "MU": {
+ "name": "毛里求斯"
+ },
+ "MR": {
+ "name": "毛里塔尼亚"
+ },
+ "US": {
+ "name": "美国"
+ },
+ "UM": {
+ "name": "美国本土外å°å²›å±¿"
+ },
+ "AS": {
+ "name": "美属è¨æ‘©äºš"
+ },
+ "VI": {
+ "name": "美属维京群岛"
+ },
+ "MN": {
+ "name": "è’™å¤"
+ },
+ "MS": {
+ "name": "蒙特塞拉特"
+ },
+ "BD": {
+ "name": "孟加拉国"
+ },
+ "PE": {
+ "name": "秘é²"
+ },
+ "FM": {
+ "name": "密克罗尼西亚"
+ },
+ "MM": {
+ "name": "缅甸"
+ },
+ "MD": {
+ "name": "摩尔多瓦"
+ },
+ "MA": {
+ "name": "摩洛哥"
+ },
+ "MC": {
+ "name": "摩纳哥"
+ },
+ "MZ": {
+ "name": "莫桑比克"
+ },
+ "MX": {
+ "name": "墨西哥"
+ },
+ "NA": {
+ "name": "纳米比亚"
+ },
+ "ZA": {
+ "name": "å—éž"
+ },
+ "AQ": {
+ "name": "å—æžæ´²"
+ },
+ "GS": {
+ "name": "å—乔治亚岛和å—æ¡‘å¨é½ç¾¤å²›"
+ },
+ "SS": {
+ "name": "å—è‹ä¸¹"
+ },
+ "NR": {
+ "name": "ç‘™é²"
+ },
+ "NI": {
+ "name": "尼加拉瓜"
+ },
+ "NP": {
+ "name": "尼泊尔"
+ },
+ "NE": {
+ "name": "尼日尔"
+ },
+ "NG": {
+ "name": "尼日利亚"
+ },
+ "NU": {
+ "name": "纽埃"
+ },
+ "NO": {
+ "name": "挪å¨"
+ },
+ "NF": {
+ "name": "诺ç¦å…‹å²›"
+ },
+ "PW": {
+ "name": "帕劳"
+ },
+ "PN": {
+ "name": "皮特凯æ©ç¾¤å²›"
+ },
+ "PT": {
+ "name": "è‘¡è„牙"
+ },
+ "JP": {
+ "name": "日本"
+ },
+ "SE": {
+ "name": "ç‘žå…¸"
+ },
+ "CH": {
+ "name": "瑞士"
+ },
+ "SV": {
+ "name": "è¨å°”瓦多"
+ },
+ "WS": {
+ "name": "è¨æ‘©äºš"
+ },
+ "RS": {
+ "name": "塞尔维亚"
+ },
+ "SL": {
+ "name": "塞拉利昂"
+ },
+ "SN": {
+ "name": "塞内加尔"
+ },
+ "CY": {
+ "name": "塞浦路斯"
+ },
+ "SC": {
+ "name": "塞舌尔"
+ },
+ "SA": {
+ "name": "沙特阿拉伯"
+ },
+ "BL": {
+ "name": "圣巴泰勒米"
+ },
+ "CX": {
+ "name": "圣诞岛"
+ },
+ "ST": {
+ "name": "圣多美和普林西比"
+ },
+ "SH": {
+ "name": "圣赫勒拿"
+ },
+ "KN": {
+ "name": "圣基茨和尼维斯"
+ },
+ "LC": {
+ "name": "圣å¢è¥¿äºš"
+ },
+ "SM": {
+ "name": "圣马力诺"
+ },
+ "PM": {
+ "name": "圣皮埃尔和密克隆"
+ },
+ "VC": {
+ "name": "圣文森特和格林纳ä¸æ–¯"
+ },
+ "LK": {
+ "name": "斯里兰å¡"
+ },
+ "SK": {
+ "name": "斯洛ä¼å…‹"
+ },
+ "SI": {
+ "name": "斯洛文尼亚"
+ },
+ "SJ": {
+ "name": "斯瓦尔巴特和扬马延"
+ },
+ "SZ": {
+ "name": "æ–¯å¨å£«å…°"
+ },
+ "SD": {
+ "name": "è‹ä¸¹"
+ },
+ "SR": {
+ "name": "è‹é‡Œå—"
+ },
+ "SB": {
+ "name": "所罗门群岛"
+ },
+ "SO": {
+ "name": "索马里"
+ },
+ "TJ": {
+ "name": "å¡”å‰å…‹æ–¯å¦"
+ },
+ "TW": {
+ "name": "å°æ¹¾"
+ },
+ "TH": {
+ "name": "泰国"
+ },
+ "TZ": {
+ "name": "å¦æ¡‘尼亚"
+ },
+ "TO": {
+ "name": "汤加"
+ },
+ "TC": {
+ "name": "特克斯和凯科斯群岛"
+ },
+ "TA": {
+ "name": "特里斯å¦-达库尼亚群岛"
+ },
+ "TT": {
+ "name": "特立尼达和多巴哥"
+ },
+ "TN": {
+ "name": "çªå°¼æ–¯"
+ },
+ "TV": {
+ "name": "图瓦å¢"
+ },
+ "TR": {
+ "name": "土耳其"
+ },
+ "TM": {
+ "name": "土库曼斯å¦"
+ },
+ "TK": {
+ "name": "托克劳"
+ },
+ "WF": {
+ "name": "瓦利斯和富图纳"
+ },
+ "VU": {
+ "name": "瓦努阿图"
+ },
+ "GT": {
+ "name": "å±åœ°é©¬æ‹‰"
+ },
+ "VE": {
+ "name": "委内瑞拉"
+ },
+ "BN": {
+ "name": "文莱"
+ },
+ "UG": {
+ "name": "乌干达"
+ },
+ "UA": {
+ "name": "乌克兰"
+ },
+ "UY": {
+ "name": "乌拉圭"
+ },
+ "UZ": {
+ "name": "乌兹别克斯å¦"
+ },
+ "GR": {
+ "name": "希腊"
+ },
+ "ES": {
+ "name": "西ç­ç‰™"
+ },
+ "EH": {
+ "name": "西撒哈拉"
+ },
+ "SG": {
+ "name": "新加å¡"
+ },
+ "NC": {
+ "name": "新喀里多尼亚"
+ },
+ "NZ": {
+ "name": "新西兰"
+ },
+ "HU": {
+ "name": "匈牙利"
+ },
+ "EA": {
+ "name": "休达åŠæ¢…利利亚"
+ },
+ "SY": {
+ "name": "å™åˆ©äºš"
+ },
+ "JM": {
+ "name": "牙买加"
+ },
+ "AM": {
+ "name": "亚美尼亚"
+ },
+ "YE": {
+ "name": "也门"
+ },
+ "IQ": {
+ "name": "伊拉克"
+ },
+ "IR": {
+ "name": "伊朗"
+ },
+ "IL": {
+ "name": "以色列"
+ },
+ "IT": {
+ "name": "æ„大利"
+ },
+ "IN": {
+ "name": "å°åº¦"
+ },
+ "ID": {
+ "name": "å°åº¦å°¼è¥¿äºš"
+ },
+ "GB": {
+ "name": "英国"
+ },
+ "VG": {
+ "name": "英属维京群岛"
+ },
+ "IO": {
+ "name": "英属å°åº¦æ´‹é¢†åœ°"
+ },
+ "JO": {
+ "name": "约旦"
+ },
+ "VN": {
+ "name": "越å—"
+ },
+ "ZM": {
+ "name": "赞比亚"
+ },
+ "JE": {
+ "name": "泽西岛"
+ },
+ "TD": {
+ "name": "ä¹å¾—"
+ },
+ "GI": {
+ "name": "直布罗陀"
+ },
+ "CL": {
+ "name": "智利"
+ },
+ "CF": {
+ "name": "中éžå…±å’Œå›½"
+ },
+ "CN": {
+ "name": "中国"
+ },
+ "MO": {
+ "name": "中国澳门特别行政区"
+ },
+ "HK": {
+ "name": "中国香港特别行政区"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/zh-Hans-SG.json b/library/intl/resources/country/zh-Hans-SG.json
new file mode 100644
index 000000000..dac93f65b
--- /dev/null
+++ b/library/intl/resources/country/zh-Hans-SG.json
@@ -0,0 +1,761 @@
+{
+ "AL": {
+ "name": "阿尔巴尼亚"
+ },
+ "DZ": {
+ "name": "阿尔åŠåˆ©äºš"
+ },
+ "AF": {
+ "name": "阿富汗"
+ },
+ "AR": {
+ "name": "阿根廷"
+ },
+ "AE": {
+ "name": "阿拉伯è”åˆé…‹é•¿å›½"
+ },
+ "AW": {
+ "name": "阿é²å·´"
+ },
+ "OM": {
+ "name": "阿曼"
+ },
+ "AZ": {
+ "name": "阿塞拜疆"
+ },
+ "AC": {
+ "name": "阿森æ¾å²›"
+ },
+ "EG": {
+ "name": "埃åŠ"
+ },
+ "ET": {
+ "name": "埃塞俄比亚"
+ },
+ "IE": {
+ "name": "爱尔兰"
+ },
+ "EE": {
+ "name": "爱沙尼亚"
+ },
+ "AD": {
+ "name": "安é“å°”"
+ },
+ "AO": {
+ "name": "安哥拉"
+ },
+ "AI": {
+ "name": "安圭拉"
+ },
+ "AG": {
+ "name": "安æ瓜和巴布达"
+ },
+ "AT": {
+ "name": "奥地利"
+ },
+ "AX": {
+ "name": "奥兰群岛"
+ },
+ "AU": {
+ "name": "澳大利亚"
+ },
+ "BB": {
+ "name": "巴巴多斯"
+ },
+ "PG": {
+ "name": "巴布亚新几内亚"
+ },
+ "BS": {
+ "name": "巴哈马"
+ },
+ "PK": {
+ "name": "巴基斯å¦"
+ },
+ "PY": {
+ "name": "巴拉圭"
+ },
+ "PS": {
+ "name": "å·´å‹’æ–¯å¦é¢†åœŸ"
+ },
+ "BH": {
+ "name": "å·´æž—"
+ },
+ "PA": {
+ "name": "巴拿马"
+ },
+ "BR": {
+ "name": "巴西"
+ },
+ "BY": {
+ "name": "白俄罗斯"
+ },
+ "BM": {
+ "name": "百慕大"
+ },
+ "BG": {
+ "name": "ä¿åŠ åˆ©äºš"
+ },
+ "MP": {
+ "name": "北马里亚纳群岛"
+ },
+ "BJ": {
+ "name": "è´å®"
+ },
+ "BE": {
+ "name": "比利时"
+ },
+ "IS": {
+ "name": "冰岛"
+ },
+ "PR": {
+ "name": "波多黎å„"
+ },
+ "PL": {
+ "name": "波兰"
+ },
+ "BA": {
+ "name": "波斯尼亚和黑塞哥维那"
+ },
+ "BO": {
+ "name": "玻利维亚"
+ },
+ "BZ": {
+ "name": "伯利兹"
+ },
+ "BW": {
+ "name": "åšèŒ¨ç“¦çº³"
+ },
+ "BT": {
+ "name": "ä¸ä¸¹"
+ },
+ "BF": {
+ "name": "布基纳法索"
+ },
+ "BI": {
+ "name": "布隆迪"
+ },
+ "KP": {
+ "name": "æœé²œ"
+ },
+ "GQ": {
+ "name": "赤é“几内亚"
+ },
+ "DK": {
+ "name": "丹麦"
+ },
+ "DE": {
+ "name": "德国"
+ },
+ "DG": {
+ "name": "迪戈加西亚岛"
+ },
+ "TL": {
+ "name": "东å¸æ±¶"
+ },
+ "TG": {
+ "name": "多哥"
+ },
+ "DO": {
+ "name": "多米尼加共和国"
+ },
+ "DM": {
+ "name": "多米尼克"
+ },
+ "RU": {
+ "name": "ä¿„ç½—æ–¯"
+ },
+ "EC": {
+ "name": "厄瓜多尔"
+ },
+ "ER": {
+ "name": "厄立特里亚"
+ },
+ "FR": {
+ "name": "法国"
+ },
+ "FO": {
+ "name": "法罗群岛"
+ },
+ "PF": {
+ "name": "法属波利尼西亚"
+ },
+ "GF": {
+ "name": "法属圭亚那"
+ },
+ "TF": {
+ "name": "法属å—部领地"
+ },
+ "MF": {
+ "name": "法属圣马ä¸"
+ },
+ "VA": {
+ "name": "梵蒂冈"
+ },
+ "PH": {
+ "name": "è²å¾‹å®¾"
+ },
+ "FJ": {
+ "name": "æ–济"
+ },
+ "FI": {
+ "name": "芬兰"
+ },
+ "CV": {
+ "name": "佛得角"
+ },
+ "FK": {
+ "name": "ç¦å…‹å…°ç¾¤å²›"
+ },
+ "GM": {
+ "name": "冈比亚"
+ },
+ "CG": {
+ "name": "刚果(布)"
+ },
+ "CD": {
+ "name": "刚果(金)"
+ },
+ "CO": {
+ "name": "哥伦比亚"
+ },
+ "CR": {
+ "name": "哥斯达黎加"
+ },
+ "GD": {
+ "name": "格林纳达"
+ },
+ "GL": {
+ "name": "格陵兰"
+ },
+ "GE": {
+ "name": "æ ¼é²å‰äºš"
+ },
+ "GG": {
+ "name": "根西岛"
+ },
+ "CU": {
+ "name": "å¤å·´"
+ },
+ "GP": {
+ "name": "瓜德罗普"
+ },
+ "GU": {
+ "name": "关岛"
+ },
+ "GY": {
+ "name": "圭亚那"
+ },
+ "KZ": {
+ "name": "哈è¨å…‹æ–¯å¦"
+ },
+ "HT": {
+ "name": "海地"
+ },
+ "KR": {
+ "name": "韩国"
+ },
+ "NL": {
+ "name": "è·å…°"
+ },
+ "BQ": {
+ "name": "è·å…°åŠ å‹’比区"
+ },
+ "SX": {
+ "name": "è·å±žåœ£é©¬ä¸"
+ },
+ "ME": {
+ "name": "黑山"
+ },
+ "HN": {
+ "name": "洪都拉斯"
+ },
+ "KI": {
+ "name": "基里巴斯"
+ },
+ "DJ": {
+ "name": "å‰å¸ƒæ"
+ },
+ "KG": {
+ "name": "å‰å°”å‰æ–¯æ–¯å¦"
+ },
+ "GN": {
+ "name": "几内亚"
+ },
+ "GW": {
+ "name": "几内亚比ç»"
+ },
+ "CA": {
+ "name": "加拿大"
+ },
+ "GH": {
+ "name": "加纳"
+ },
+ "IC": {
+ "name": "加纳利群岛"
+ },
+ "GA": {
+ "name": "加蓬"
+ },
+ "KH": {
+ "name": "柬埔寨"
+ },
+ "CZ": {
+ "name": "æ·å…‹å…±å’Œå›½"
+ },
+ "ZW": {
+ "name": "津巴布韦"
+ },
+ "CM": {
+ "name": "喀麦隆"
+ },
+ "QA": {
+ "name": "å¡å¡”å°”"
+ },
+ "KY": {
+ "name": "开曼群岛"
+ },
+ "CC": {
+ "name": "科科斯(基林)群岛"
+ },
+ "KM": {
+ "name": "科摩罗"
+ },
+ "XK": {
+ "name": "科索沃"
+ },
+ "CI": {
+ "name": "科特迪瓦"
+ },
+ "KW": {
+ "name": "科å¨ç‰¹"
+ },
+ "HR": {
+ "name": "克罗地亚"
+ },
+ "KE": {
+ "name": "肯尼亚"
+ },
+ "CK": {
+ "name": "库克群岛"
+ },
+ "CW": {
+ "name": "库拉索"
+ },
+ "LV": {
+ "name": "拉脱维亚"
+ },
+ "LS": {
+ "name": "莱索托"
+ },
+ "LA": {
+ "name": "è€æŒ"
+ },
+ "LB": {
+ "name": "黎巴嫩"
+ },
+ "LT": {
+ "name": "立陶宛"
+ },
+ "LR": {
+ "name": "利比里亚"
+ },
+ "LY": {
+ "name": "利比亚"
+ },
+ "LI": {
+ "name": "列支敦士登"
+ },
+ "RE": {
+ "name": "留尼汪"
+ },
+ "LU": {
+ "name": "å¢æ£®å ¡"
+ },
+ "RW": {
+ "name": "å¢æ—ºè¾¾"
+ },
+ "RO": {
+ "name": "罗马尼亚"
+ },
+ "MG": {
+ "name": "马达加斯加"
+ },
+ "MV": {
+ "name": "马尔代夫"
+ },
+ "MT": {
+ "name": "马耳他"
+ },
+ "MW": {
+ "name": "马拉维"
+ },
+ "MY": {
+ "name": "马æ¥è¥¿äºš"
+ },
+ "ML": {
+ "name": "马里"
+ },
+ "MK": {
+ "name": "马其顿"
+ },
+ "MH": {
+ "name": "马ç»å°”群岛"
+ },
+ "MQ": {
+ "name": "马æ尼克"
+ },
+ "YT": {
+ "name": "马约特"
+ },
+ "IM": {
+ "name": "曼岛"
+ },
+ "MU": {
+ "name": "毛里求斯"
+ },
+ "MR": {
+ "name": "毛里塔尼亚"
+ },
+ "US": {
+ "name": "美国"
+ },
+ "UM": {
+ "name": "美国本土外å°å²›å±¿"
+ },
+ "AS": {
+ "name": "美属è¨æ‘©äºš"
+ },
+ "VI": {
+ "name": "美属维京群岛"
+ },
+ "MN": {
+ "name": "è’™å¤"
+ },
+ "MS": {
+ "name": "蒙特塞拉特"
+ },
+ "BD": {
+ "name": "孟加拉国"
+ },
+ "PE": {
+ "name": "秘é²"
+ },
+ "FM": {
+ "name": "密克罗尼西亚"
+ },
+ "MM": {
+ "name": "缅甸"
+ },
+ "MD": {
+ "name": "摩尔多瓦"
+ },
+ "MA": {
+ "name": "摩洛哥"
+ },
+ "MC": {
+ "name": "摩纳哥"
+ },
+ "MZ": {
+ "name": "莫桑比克"
+ },
+ "MX": {
+ "name": "墨西哥"
+ },
+ "NA": {
+ "name": "纳米比亚"
+ },
+ "ZA": {
+ "name": "å—éž"
+ },
+ "AQ": {
+ "name": "å—æžæ´²"
+ },
+ "GS": {
+ "name": "å—乔治亚岛和å—æ¡‘å¨é½ç¾¤å²›"
+ },
+ "SS": {
+ "name": "å—è‹ä¸¹"
+ },
+ "NR": {
+ "name": "ç‘™é²"
+ },
+ "NI": {
+ "name": "尼加拉瓜"
+ },
+ "NP": {
+ "name": "尼泊尔"
+ },
+ "NE": {
+ "name": "尼日尔"
+ },
+ "NG": {
+ "name": "尼日利亚"
+ },
+ "NU": {
+ "name": "纽埃"
+ },
+ "NO": {
+ "name": "挪å¨"
+ },
+ "NF": {
+ "name": "诺ç¦å…‹å²›"
+ },
+ "PW": {
+ "name": "帕劳"
+ },
+ "PN": {
+ "name": "皮特凯æ©ç¾¤å²›"
+ },
+ "PT": {
+ "name": "è‘¡è„牙"
+ },
+ "JP": {
+ "name": "日本"
+ },
+ "SE": {
+ "name": "ç‘žå…¸"
+ },
+ "CH": {
+ "name": "瑞士"
+ },
+ "SV": {
+ "name": "è¨å°”瓦多"
+ },
+ "WS": {
+ "name": "è¨æ‘©äºš"
+ },
+ "RS": {
+ "name": "塞尔维亚"
+ },
+ "SL": {
+ "name": "塞拉利昂"
+ },
+ "SN": {
+ "name": "塞内加尔"
+ },
+ "CY": {
+ "name": "塞浦路斯"
+ },
+ "SC": {
+ "name": "塞舌尔"
+ },
+ "SA": {
+ "name": "沙特阿拉伯"
+ },
+ "BL": {
+ "name": "圣巴泰勒米"
+ },
+ "CX": {
+ "name": "圣诞岛"
+ },
+ "ST": {
+ "name": "圣多美和普林西比"
+ },
+ "SH": {
+ "name": "圣赫勒拿"
+ },
+ "KN": {
+ "name": "圣基茨和尼维斯"
+ },
+ "LC": {
+ "name": "圣å¢è¥¿äºš"
+ },
+ "SM": {
+ "name": "圣马力诺"
+ },
+ "PM": {
+ "name": "圣皮埃尔和密克隆"
+ },
+ "VC": {
+ "name": "圣文森特和格林纳ä¸æ–¯"
+ },
+ "LK": {
+ "name": "斯里兰å¡"
+ },
+ "SK": {
+ "name": "斯洛ä¼å…‹"
+ },
+ "SI": {
+ "name": "斯洛文尼亚"
+ },
+ "SJ": {
+ "name": "斯瓦尔巴特和扬马延"
+ },
+ "SZ": {
+ "name": "æ–¯å¨å£«å…°"
+ },
+ "SD": {
+ "name": "è‹ä¸¹"
+ },
+ "SR": {
+ "name": "è‹é‡Œå—"
+ },
+ "SB": {
+ "name": "所罗门群岛"
+ },
+ "SO": {
+ "name": "索马里"
+ },
+ "TJ": {
+ "name": "å¡”å‰å…‹æ–¯å¦"
+ },
+ "TW": {
+ "name": "å°æ¹¾"
+ },
+ "TH": {
+ "name": "泰国"
+ },
+ "TZ": {
+ "name": "å¦æ¡‘尼亚"
+ },
+ "TO": {
+ "name": "汤加"
+ },
+ "TC": {
+ "name": "特克斯和凯科斯群岛"
+ },
+ "TA": {
+ "name": "特里斯å¦-达库尼亚群岛"
+ },
+ "TT": {
+ "name": "特立尼达和多巴哥"
+ },
+ "TN": {
+ "name": "çªå°¼æ–¯"
+ },
+ "TV": {
+ "name": "图瓦å¢"
+ },
+ "TR": {
+ "name": "土耳其"
+ },
+ "TM": {
+ "name": "土库曼斯å¦"
+ },
+ "TK": {
+ "name": "托克劳"
+ },
+ "WF": {
+ "name": "瓦利斯和富图纳"
+ },
+ "VU": {
+ "name": "瓦努阿图"
+ },
+ "GT": {
+ "name": "å±åœ°é©¬æ‹‰"
+ },
+ "VE": {
+ "name": "委内瑞拉"
+ },
+ "BN": {
+ "name": "文莱"
+ },
+ "UG": {
+ "name": "乌干达"
+ },
+ "UA": {
+ "name": "乌克兰"
+ },
+ "UY": {
+ "name": "乌拉圭"
+ },
+ "UZ": {
+ "name": "乌兹别克斯å¦"
+ },
+ "GR": {
+ "name": "希腊"
+ },
+ "ES": {
+ "name": "西ç­ç‰™"
+ },
+ "EH": {
+ "name": "西撒哈拉"
+ },
+ "SG": {
+ "name": "新加å¡"
+ },
+ "NC": {
+ "name": "新喀里多尼亚"
+ },
+ "NZ": {
+ "name": "新西兰"
+ },
+ "HU": {
+ "name": "匈牙利"
+ },
+ "EA": {
+ "name": "休达åŠæ¢…利利亚"
+ },
+ "SY": {
+ "name": "å™åˆ©äºš"
+ },
+ "JM": {
+ "name": "牙买加"
+ },
+ "AM": {
+ "name": "亚美尼亚"
+ },
+ "YE": {
+ "name": "也门"
+ },
+ "IQ": {
+ "name": "伊拉克"
+ },
+ "IR": {
+ "name": "伊朗"
+ },
+ "IL": {
+ "name": "以色列"
+ },
+ "IT": {
+ "name": "æ„大利"
+ },
+ "IN": {
+ "name": "å°åº¦"
+ },
+ "ID": {
+ "name": "å°åº¦å°¼è¥¿äºš"
+ },
+ "GB": {
+ "name": "英国"
+ },
+ "VG": {
+ "name": "英属维京群岛"
+ },
+ "IO": {
+ "name": "英属å°åº¦æ´‹é¢†åœ°"
+ },
+ "JO": {
+ "name": "约旦"
+ },
+ "VN": {
+ "name": "越å—"
+ },
+ "ZM": {
+ "name": "赞比亚"
+ },
+ "JE": {
+ "name": "泽西岛"
+ },
+ "TD": {
+ "name": "ä¹å¾—"
+ },
+ "GI": {
+ "name": "直布罗陀"
+ },
+ "CL": {
+ "name": "智利"
+ },
+ "CF": {
+ "name": "中éžå…±å’Œå›½"
+ },
+ "CN": {
+ "name": "中国"
+ },
+ "MO": {
+ "name": "中国澳门特别行政区"
+ },
+ "HK": {
+ "name": "中国香港特别行政区"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/zh-Hant-HK.json b/library/intl/resources/country/zh-Hant-HK.json
new file mode 100644
index 000000000..f0f5ba0cf
--- /dev/null
+++ b/library/intl/resources/country/zh-Hant-HK.json
@@ -0,0 +1,761 @@
+{
+ "YE": {
+ "name": "也門"
+ },
+ "TT": {
+ "name": "åƒé‡Œé”和多巴哥"
+ },
+ "TR": {
+ "name": "土耳其"
+ },
+ "TM": {
+ "name": "土庫曼"
+ },
+ "BT": {
+ "name": "ä¸ä¸¹"
+ },
+ "CF": {
+ "name": "中éžå…±å’Œåœ‹"
+ },
+ "CN": {
+ "name": "中è¯äººæ°‘共和國"
+ },
+ "HK": {
+ "name": "中è¯äººæ°‘共和國香港特別行政å€"
+ },
+ "MO": {
+ "name": "中è¯äººæ°‘共和國澳門特別行政å€"
+ },
+ "DK": {
+ "name": "丹麥"
+ },
+ "EC": {
+ "name": "厄瓜多"
+ },
+ "ER": {
+ "name": "厄立特里亞"
+ },
+ "BB": {
+ "name": "巴巴多斯"
+ },
+ "PG": {
+ "name": "巴布亞新幾內亞"
+ },
+ "BR": {
+ "name": "巴西"
+ },
+ "PY": {
+ "name": "巴拉圭"
+ },
+ "BH": {
+ "name": "å·´æž—"
+ },
+ "BS": {
+ "name": "巴哈馬"
+ },
+ "PA": {
+ "name": "巴拿馬"
+ },
+ "PS": {
+ "name": "å·´å‹’æ–¯å¦è‡ªæ²»å€"
+ },
+ "PK": {
+ "name": "巴基斯å¦"
+ },
+ "JP": {
+ "name": "日本"
+ },
+ "BE": {
+ "name": "比利時"
+ },
+ "MR": {
+ "name": "毛里塔尼亞"
+ },
+ "MU": {
+ "name": "毛里裘斯"
+ },
+ "JM": {
+ "name": "牙買加"
+ },
+ "TD": {
+ "name": "ä¹å¾—"
+ },
+ "IL": {
+ "name": "以色列"
+ },
+ "IC": {
+ "name": "加那利群島"
+ },
+ "CA": {
+ "name": "加拿大"
+ },
+ "GH": {
+ "name": "加ç´"
+ },
+ "GA": {
+ "name": "加蓬"
+ },
+ "MP": {
+ "name": "北馬里亞ç´ç¾¤å³¶"
+ },
+ "KP": {
+ "name": "北韓"
+ },
+ "QA": {
+ "name": "å¡å¡”爾"
+ },
+ "CU": {
+ "name": "å¤å·´"
+ },
+ "CC": {
+ "name": "å¯å¯æ–¯ç¾¤å³¶"
+ },
+ "TW": {
+ "name": "å°ç£"
+ },
+ "NG": {
+ "name": "尼日利亞"
+ },
+ "NE": {
+ "name": "尼日爾"
+ },
+ "NI": {
+ "name": "尼加拉瓜"
+ },
+ "NP": {
+ "name": "尼泊爾"
+ },
+ "BF": {
+ "name": "布å‰ç´æ³•ç´¢"
+ },
+ "BI": {
+ "name": "布隆迪"
+ },
+ "GP": {
+ "name": "瓜地洛普"
+ },
+ "WF": {
+ "name": "瓦利斯和富圖ç´ç¾¤å³¶"
+ },
+ "VU": {
+ "name": "瓦努阿圖"
+ },
+ "BY": {
+ "name": "白俄羅斯"
+ },
+ "PN": {
+ "name": "皮特凱æ©å³¶"
+ },
+ "LT": {
+ "name": "立陶宛"
+ },
+ "IQ": {
+ "name": "伊拉克"
+ },
+ "IR": {
+ "name": "伊朗"
+ },
+ "EA": {
+ "name": "休é”與梅利利亞"
+ },
+ "IS": {
+ "name": "冰島"
+ },
+ "LI": {
+ "name": "列支敦士登"
+ },
+ "HU": {
+ "name": "匈牙利"
+ },
+ "ID": {
+ "name": "å°å°¼"
+ },
+ "IN": {
+ "name": "å°åº¦"
+ },
+ "GT": {
+ "name": "å±åœ°é¦¬æ‹‰"
+ },
+ "DJ": {
+ "name": "å‰å¸ƒåœ°"
+ },
+ "KI": {
+ "name": "å‰é‡Œå·´æ–¯"
+ },
+ "KG": {
+ "name": "å‰çˆ¾å‰æ–¯"
+ },
+ "DM": {
+ "name": "多米尼克"
+ },
+ "DO": {
+ "name": "多明尼加共和國"
+ },
+ "TG": {
+ "name": "多哥共和國"
+ },
+ "AI": {
+ "name": "安圭拉"
+ },
+ "AO": {
+ "name": "安哥拉"
+ },
+ "AG": {
+ "name": "安æç“œåŠå·´å¸ƒé”"
+ },
+ "AD": {
+ "name": "安é“爾"
+ },
+ "TK": {
+ "name": "托克勞群島"
+ },
+ "BM": {
+ "name": "百慕é”"
+ },
+ "ES": {
+ "name": "西ç­ç‰™"
+ },
+ "EH": {
+ "name": "西撒哈拉"
+ },
+ "BZ": {
+ "name": "伯利茲"
+ },
+ "CV": {
+ "name": "佛得角"
+ },
+ "HR": {
+ "name": "克羅地亞"
+ },
+ "LR": {
+ "name": "利比里亞"
+ },
+ "LY": {
+ "name": "利比亞"
+ },
+ "GR": {
+ "name": "希臘"
+ },
+ "BN": {
+ "name": "汶èŠ"
+ },
+ "SA": {
+ "name": "沙特阿拉伯"
+ },
+ "BJ": {
+ "name": "è²å¯§"
+ },
+ "GQ": {
+ "name": "赤é“幾內亞"
+ },
+ "AM": {
+ "name": "亞美尼亞"
+ },
+ "TZ": {
+ "name": "å¦æ¡‘尼亞"
+ },
+ "VE": {
+ "name": "委內瑞拉"
+ },
+ "BD": {
+ "name": "孟加拉"
+ },
+ "GM": {
+ "name": "岡比亞"
+ },
+ "PW": {
+ "name": "帛ç‰"
+ },
+ "SB": {
+ "name": "所羅門群島"
+ },
+ "LV": {
+ "name": "拉脫維亞"
+ },
+ "TL": {
+ "name": "æ±å¸æ±¶"
+ },
+ "FR": {
+ "name": "法國"
+ },
+ "FO": {
+ "name": "法羅群島"
+ },
+ "GF": {
+ "name": "法屬圭亞那"
+ },
+ "PF": {
+ "name": "法屬波利尼西亞"
+ },
+ "TF": {
+ "name": "法屬å—部地å€"
+ },
+ "MF": {
+ "name": "法屬è–馬ä¸"
+ },
+ "PR": {
+ "name": "波多黎å„"
+ },
+ "BA": {
+ "name": "波斯尼亞和黑塞哥維那"
+ },
+ "PL": {
+ "name": "波蘭"
+ },
+ "GI": {
+ "name": "直布羅陀"
+ },
+ "KE": {
+ "name": "肯雅"
+ },
+ "FI": {
+ "name": "芬蘭"
+ },
+ "AE": {
+ "name": "阿拉伯è¯åˆé…‹é•·åœ‹"
+ },
+ "AR": {
+ "name": "阿根廷"
+ },
+ "OM": {
+ "name": "阿曼"
+ },
+ "AF": {
+ "name": "阿富汗"
+ },
+ "AC": {
+ "name": "阿森æ¾å³¶"
+ },
+ "AZ": {
+ "name": "阿塞拜疆"
+ },
+ "DZ": {
+ "name": "阿爾åŠåˆ©äºž"
+ },
+ "AL": {
+ "name": "阿爾巴尼亞"
+ },
+ "AW": {
+ "name": "阿魯巴"
+ },
+ "RU": {
+ "name": "ä¿„ç¾…æ–¯"
+ },
+ "BG": {
+ "name": "ä¿åŠ åˆ©äºž"
+ },
+ "GS": {
+ "name": "å—ä½æ²»äºžå³¶èˆ‡å—æ¡‘å¨å¥‡ç¾¤å³¶"
+ },
+ "ZA": {
+ "name": "å—éž"
+ },
+ "AQ": {
+ "name": "å—極洲"
+ },
+ "KR": {
+ "name": "å—韓"
+ },
+ "SS": {
+ "name": "å—蘇丹"
+ },
+ "KZ": {
+ "name": "哈薩克"
+ },
+ "KH": {
+ "name": "柬埔寨"
+ },
+ "ZW": {
+ "name": "津巴布韋"
+ },
+ "HN": {
+ "name": "洪都拉斯"
+ },
+ "BO": {
+ "name": "玻利維亞"
+ },
+ "KW": {
+ "name": "科å¨ç‰¹"
+ },
+ "CI": {
+ "name": "科特迪瓦"
+ },
+ "XK": {
+ "name": "科索沃"
+ },
+ "KM": {
+ "name": "科摩羅"
+ },
+ "TN": {
+ "name": "çªå°¼è¥¿äºž"
+ },
+ "JO": {
+ "name": "ç´„æ—¦"
+ },
+ "US": {
+ "name": "美國"
+ },
+ "UM": {
+ "name": "美國本土外å°å³¶å¶¼"
+ },
+ "VI": {
+ "name": "美屬維京群島"
+ },
+ "AS": {
+ "name": "美屬薩摩亞群島"
+ },
+ "GB": {
+ "name": "英國"
+ },
+ "IO": {
+ "name": "英屬å°åº¦æ´‹é ˜åœŸ"
+ },
+ "IM": {
+ "name": "英屬地曼島"
+ },
+ "VG": {
+ "name": "英屬維京群島"
+ },
+ "DG": {
+ "name": "迪亞哥加西亞島"
+ },
+ "CG": {
+ "name": "剛果 - 布拉薩"
+ },
+ "CD": {
+ "name": "剛果 - 金å¤æ²™"
+ },
+ "CO": {
+ "name": "哥倫比亞"
+ },
+ "CR": {
+ "name": "哥斯é”黎加"
+ },
+ "EG": {
+ "name": "埃åŠ"
+ },
+ "ET": {
+ "name": "埃塞俄比亞"
+ },
+ "CK": {
+ "name": "庫克群島"
+ },
+ "CW": {
+ "name": "庫拉索"
+ },
+ "NO": {
+ "name": "挪å¨"
+ },
+ "GG": {
+ "name": "根西島"
+ },
+ "GD": {
+ "name": "格林ç´é”"
+ },
+ "GL": {
+ "name": "格陵蘭"
+ },
+ "GE": {
+ "name": "格魯å‰äºž"
+ },
+ "TH": {
+ "name": "泰國"
+ },
+ "HT": {
+ "name": "海地"
+ },
+ "UG": {
+ "name": "çƒå¹²é”"
+ },
+ "UA": {
+ "name": "çƒå…‹è˜­"
+ },
+ "UY": {
+ "name": "çƒæ‹‰åœ­"
+ },
+ "UZ": {
+ "name": "çƒèŒ²åˆ¥å…‹"
+ },
+ "TC": {
+ "name": "特克斯和凱科斯群島"
+ },
+ "TA": {
+ "name": "特里斯å¦é”庫尼亞群島"
+ },
+ "RE": {
+ "name": "留尼旺"
+ },
+ "PE": {
+ "name": "秘魯"
+ },
+ "NA": {
+ "name": "ç´ç±³æ¯”亞"
+ },
+ "NZ": {
+ "name": "ç´è¥¿è˜­"
+ },
+ "NU": {
+ "name": "ç´åŸƒå³¶"
+ },
+ "SO": {
+ "name": "索馬里"
+ },
+ "MQ": {
+ "name": "馬ä¸å°¼å…‹å³¶"
+ },
+ "ML": {
+ "name": "馬里"
+ },
+ "MY": {
+ "name": "馬來西亞"
+ },
+ "MK": {
+ "name": "馬其頓"
+ },
+ "MW": {
+ "name": "馬拉å¨"
+ },
+ "YT": {
+ "name": "馬約特"
+ },
+ "MH": {
+ "name": "馬紹爾群島"
+ },
+ "MG": {
+ "name": "馬é”加斯加"
+ },
+ "MT": {
+ "name": "馬爾他"
+ },
+ "MV": {
+ "name": "馬爾代夫"
+ },
+ "FM": {
+ "name": "密克羅尼西亞群島"
+ },
+ "CZ": {
+ "name": "æ·å…‹å…±å’Œåœ‹"
+ },
+ "SY": {
+ "name": "敘利亞"
+ },
+ "VA": {
+ "name": "梵蒂岡宮城"
+ },
+ "SX": {
+ "name": "è·å±¬è–馬ä¸"
+ },
+ "NL": {
+ "name": "è·è˜­"
+ },
+ "BQ": {
+ "name": "è·è˜­åŠ å‹’比å€"
+ },
+ "MZ": {
+ "name": "莫桑比克"
+ },
+ "BW": {
+ "name": "åšèŒ¨ç“¦ç´"
+ },
+ "CM": {
+ "name": "喀麥隆"
+ },
+ "GN": {
+ "name": "幾內亞"
+ },
+ "GW": {
+ "name": "幾內亞比紹"
+ },
+ "FJ": {
+ "name": "æ–æ¿Ÿ"
+ },
+ "SJ": {
+ "name": "斯瓦爾巴群島åŠæšé¦¬å»¶å³¶"
+ },
+ "LK": {
+ "name": "斯里蘭å¡"
+ },
+ "SZ": {
+ "name": "æ–¯å¨å£«è˜­"
+ },
+ "SI": {
+ "name": "斯洛文尼亞"
+ },
+ "SK": {
+ "name": "斯洛ä¼å…‹"
+ },
+ "CL": {
+ "name": "智利"
+ },
+ "TO": {
+ "name": "湯加"
+ },
+ "PH": {
+ "name": "è²å¾‹è³“"
+ },
+ "LS": {
+ "name": "èŠç´¢æ‰˜"
+ },
+ "VN": {
+ "name": "越å—"
+ },
+ "KY": {
+ "name": "開曼群島"
+ },
+ "ME": {
+ "name": "黑山"
+ },
+ "TJ": {
+ "name": "å¡”å‰å…‹"
+ },
+ "SN": {
+ "name": "塞內加爾"
+ },
+ "SC": {
+ "name": "塞舌爾"
+ },
+ "SL": {
+ "name": "塞拉利昂"
+ },
+ "CY": {
+ "name": "塞浦路斯"
+ },
+ "RS": {
+ "name": "塞爾維亞"
+ },
+ "AT": {
+ "name": "奧地利"
+ },
+ "AX": {
+ "name": "奧蘭群島"
+ },
+ "IT": {
+ "name": "æ„大利"
+ },
+ "EE": {
+ "name": "愛沙尼亞"
+ },
+ "IE": {
+ "name": "愛爾蘭"
+ },
+ "SG": {
+ "name": "新加å¡"
+ },
+ "NC": {
+ "name": "新喀里多尼亞"
+ },
+ "NR": {
+ "name": "瑙魯"
+ },
+ "CH": {
+ "name": "瑞士"
+ },
+ "SE": {
+ "name": "ç‘žå…¸"
+ },
+ "BL": {
+ "name": "è–å·´æ³°å‹’ç±³"
+ },
+ "VC": {
+ "name": "è–文森特和格林ç´ä¸æ–¯"
+ },
+ "PM": {
+ "name": "è–皮埃爾和密克隆群島"
+ },
+ "ST": {
+ "name": "è–多美普林西比"
+ },
+ "SM": {
+ "name": "è–馬利諾"
+ },
+ "KN": {
+ "name": "è–基茨和尼維斯"
+ },
+ "SH": {
+ "name": "è–赫勒拿島"
+ },
+ "CX": {
+ "name": "è–誕島"
+ },
+ "LC": {
+ "name": "è–盧西亞"
+ },
+ "PT": {
+ "name": "è‘¡è„牙"
+ },
+ "TV": {
+ "name": "圖瓦盧"
+ },
+ "FK": {
+ "name": "ç¦å…‹è˜­ç¾¤å³¶"
+ },
+ "MN": {
+ "name": "è’™å¤"
+ },
+ "MS": {
+ "name": "蒙塞拉特島"
+ },
+ "GY": {
+ "name": "蓋亞那"
+ },
+ "LA": {
+ "name": "寮國"
+ },
+ "DE": {
+ "name": "德國"
+ },
+ "MA": {
+ "name": "摩洛哥"
+ },
+ "MC": {
+ "name": "æ‘©ç´å“¥"
+ },
+ "MD": {
+ "name": "摩爾多瓦"
+ },
+ "MM": {
+ "name": "緬甸"
+ },
+ "LB": {
+ "name": "黎巴嫩"
+ },
+ "MX": {
+ "name": "墨西哥"
+ },
+ "JE": {
+ "name": "澤西島"
+ },
+ "AU": {
+ "name": "澳洲"
+ },
+ "RW": {
+ "name": "盧旺é”"
+ },
+ "LU": {
+ "name": "盧森堡"
+ },
+ "NF": {
+ "name": "諾ç¦å…‹å³¶"
+ },
+ "SV": {
+ "name": "薩爾瓦多"
+ },
+ "WS": {
+ "name": "薩摩亞群島"
+ },
+ "RO": {
+ "name": "羅馬尼亞"
+ },
+ "ZM": {
+ "name": "贊比亞"
+ },
+ "GU": {
+ "name": "關島"
+ },
+ "SD": {
+ "name": "蘇丹"
+ },
+ "SR": {
+ "name": "蘇里å—"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/zh-Hant-MO.json b/library/intl/resources/country/zh-Hant-MO.json
new file mode 100644
index 000000000..f0f5ba0cf
--- /dev/null
+++ b/library/intl/resources/country/zh-Hant-MO.json
@@ -0,0 +1,761 @@
+{
+ "YE": {
+ "name": "也門"
+ },
+ "TT": {
+ "name": "åƒé‡Œé”和多巴哥"
+ },
+ "TR": {
+ "name": "土耳其"
+ },
+ "TM": {
+ "name": "土庫曼"
+ },
+ "BT": {
+ "name": "ä¸ä¸¹"
+ },
+ "CF": {
+ "name": "中éžå…±å’Œåœ‹"
+ },
+ "CN": {
+ "name": "中è¯äººæ°‘共和國"
+ },
+ "HK": {
+ "name": "中è¯äººæ°‘共和國香港特別行政å€"
+ },
+ "MO": {
+ "name": "中è¯äººæ°‘共和國澳門特別行政å€"
+ },
+ "DK": {
+ "name": "丹麥"
+ },
+ "EC": {
+ "name": "厄瓜多"
+ },
+ "ER": {
+ "name": "厄立特里亞"
+ },
+ "BB": {
+ "name": "巴巴多斯"
+ },
+ "PG": {
+ "name": "巴布亞新幾內亞"
+ },
+ "BR": {
+ "name": "巴西"
+ },
+ "PY": {
+ "name": "巴拉圭"
+ },
+ "BH": {
+ "name": "å·´æž—"
+ },
+ "BS": {
+ "name": "巴哈馬"
+ },
+ "PA": {
+ "name": "巴拿馬"
+ },
+ "PS": {
+ "name": "å·´å‹’æ–¯å¦è‡ªæ²»å€"
+ },
+ "PK": {
+ "name": "巴基斯å¦"
+ },
+ "JP": {
+ "name": "日本"
+ },
+ "BE": {
+ "name": "比利時"
+ },
+ "MR": {
+ "name": "毛里塔尼亞"
+ },
+ "MU": {
+ "name": "毛里裘斯"
+ },
+ "JM": {
+ "name": "牙買加"
+ },
+ "TD": {
+ "name": "ä¹å¾—"
+ },
+ "IL": {
+ "name": "以色列"
+ },
+ "IC": {
+ "name": "加那利群島"
+ },
+ "CA": {
+ "name": "加拿大"
+ },
+ "GH": {
+ "name": "加ç´"
+ },
+ "GA": {
+ "name": "加蓬"
+ },
+ "MP": {
+ "name": "北馬里亞ç´ç¾¤å³¶"
+ },
+ "KP": {
+ "name": "北韓"
+ },
+ "QA": {
+ "name": "å¡å¡”爾"
+ },
+ "CU": {
+ "name": "å¤å·´"
+ },
+ "CC": {
+ "name": "å¯å¯æ–¯ç¾¤å³¶"
+ },
+ "TW": {
+ "name": "å°ç£"
+ },
+ "NG": {
+ "name": "尼日利亞"
+ },
+ "NE": {
+ "name": "尼日爾"
+ },
+ "NI": {
+ "name": "尼加拉瓜"
+ },
+ "NP": {
+ "name": "尼泊爾"
+ },
+ "BF": {
+ "name": "布å‰ç´æ³•ç´¢"
+ },
+ "BI": {
+ "name": "布隆迪"
+ },
+ "GP": {
+ "name": "瓜地洛普"
+ },
+ "WF": {
+ "name": "瓦利斯和富圖ç´ç¾¤å³¶"
+ },
+ "VU": {
+ "name": "瓦努阿圖"
+ },
+ "BY": {
+ "name": "白俄羅斯"
+ },
+ "PN": {
+ "name": "皮特凱æ©å³¶"
+ },
+ "LT": {
+ "name": "立陶宛"
+ },
+ "IQ": {
+ "name": "伊拉克"
+ },
+ "IR": {
+ "name": "伊朗"
+ },
+ "EA": {
+ "name": "休é”與梅利利亞"
+ },
+ "IS": {
+ "name": "冰島"
+ },
+ "LI": {
+ "name": "列支敦士登"
+ },
+ "HU": {
+ "name": "匈牙利"
+ },
+ "ID": {
+ "name": "å°å°¼"
+ },
+ "IN": {
+ "name": "å°åº¦"
+ },
+ "GT": {
+ "name": "å±åœ°é¦¬æ‹‰"
+ },
+ "DJ": {
+ "name": "å‰å¸ƒåœ°"
+ },
+ "KI": {
+ "name": "å‰é‡Œå·´æ–¯"
+ },
+ "KG": {
+ "name": "å‰çˆ¾å‰æ–¯"
+ },
+ "DM": {
+ "name": "多米尼克"
+ },
+ "DO": {
+ "name": "多明尼加共和國"
+ },
+ "TG": {
+ "name": "多哥共和國"
+ },
+ "AI": {
+ "name": "安圭拉"
+ },
+ "AO": {
+ "name": "安哥拉"
+ },
+ "AG": {
+ "name": "安æç“œåŠå·´å¸ƒé”"
+ },
+ "AD": {
+ "name": "安é“爾"
+ },
+ "TK": {
+ "name": "托克勞群島"
+ },
+ "BM": {
+ "name": "百慕é”"
+ },
+ "ES": {
+ "name": "西ç­ç‰™"
+ },
+ "EH": {
+ "name": "西撒哈拉"
+ },
+ "BZ": {
+ "name": "伯利茲"
+ },
+ "CV": {
+ "name": "佛得角"
+ },
+ "HR": {
+ "name": "克羅地亞"
+ },
+ "LR": {
+ "name": "利比里亞"
+ },
+ "LY": {
+ "name": "利比亞"
+ },
+ "GR": {
+ "name": "希臘"
+ },
+ "BN": {
+ "name": "汶èŠ"
+ },
+ "SA": {
+ "name": "沙特阿拉伯"
+ },
+ "BJ": {
+ "name": "è²å¯§"
+ },
+ "GQ": {
+ "name": "赤é“幾內亞"
+ },
+ "AM": {
+ "name": "亞美尼亞"
+ },
+ "TZ": {
+ "name": "å¦æ¡‘尼亞"
+ },
+ "VE": {
+ "name": "委內瑞拉"
+ },
+ "BD": {
+ "name": "孟加拉"
+ },
+ "GM": {
+ "name": "岡比亞"
+ },
+ "PW": {
+ "name": "帛ç‰"
+ },
+ "SB": {
+ "name": "所羅門群島"
+ },
+ "LV": {
+ "name": "拉脫維亞"
+ },
+ "TL": {
+ "name": "æ±å¸æ±¶"
+ },
+ "FR": {
+ "name": "法國"
+ },
+ "FO": {
+ "name": "法羅群島"
+ },
+ "GF": {
+ "name": "法屬圭亞那"
+ },
+ "PF": {
+ "name": "法屬波利尼西亞"
+ },
+ "TF": {
+ "name": "法屬å—部地å€"
+ },
+ "MF": {
+ "name": "法屬è–馬ä¸"
+ },
+ "PR": {
+ "name": "波多黎å„"
+ },
+ "BA": {
+ "name": "波斯尼亞和黑塞哥維那"
+ },
+ "PL": {
+ "name": "波蘭"
+ },
+ "GI": {
+ "name": "直布羅陀"
+ },
+ "KE": {
+ "name": "肯雅"
+ },
+ "FI": {
+ "name": "芬蘭"
+ },
+ "AE": {
+ "name": "阿拉伯è¯åˆé…‹é•·åœ‹"
+ },
+ "AR": {
+ "name": "阿根廷"
+ },
+ "OM": {
+ "name": "阿曼"
+ },
+ "AF": {
+ "name": "阿富汗"
+ },
+ "AC": {
+ "name": "阿森æ¾å³¶"
+ },
+ "AZ": {
+ "name": "阿塞拜疆"
+ },
+ "DZ": {
+ "name": "阿爾åŠåˆ©äºž"
+ },
+ "AL": {
+ "name": "阿爾巴尼亞"
+ },
+ "AW": {
+ "name": "阿魯巴"
+ },
+ "RU": {
+ "name": "ä¿„ç¾…æ–¯"
+ },
+ "BG": {
+ "name": "ä¿åŠ åˆ©äºž"
+ },
+ "GS": {
+ "name": "å—ä½æ²»äºžå³¶èˆ‡å—æ¡‘å¨å¥‡ç¾¤å³¶"
+ },
+ "ZA": {
+ "name": "å—éž"
+ },
+ "AQ": {
+ "name": "å—極洲"
+ },
+ "KR": {
+ "name": "å—韓"
+ },
+ "SS": {
+ "name": "å—蘇丹"
+ },
+ "KZ": {
+ "name": "哈薩克"
+ },
+ "KH": {
+ "name": "柬埔寨"
+ },
+ "ZW": {
+ "name": "津巴布韋"
+ },
+ "HN": {
+ "name": "洪都拉斯"
+ },
+ "BO": {
+ "name": "玻利維亞"
+ },
+ "KW": {
+ "name": "科å¨ç‰¹"
+ },
+ "CI": {
+ "name": "科特迪瓦"
+ },
+ "XK": {
+ "name": "科索沃"
+ },
+ "KM": {
+ "name": "科摩羅"
+ },
+ "TN": {
+ "name": "çªå°¼è¥¿äºž"
+ },
+ "JO": {
+ "name": "ç´„æ—¦"
+ },
+ "US": {
+ "name": "美國"
+ },
+ "UM": {
+ "name": "美國本土外å°å³¶å¶¼"
+ },
+ "VI": {
+ "name": "美屬維京群島"
+ },
+ "AS": {
+ "name": "美屬薩摩亞群島"
+ },
+ "GB": {
+ "name": "英國"
+ },
+ "IO": {
+ "name": "英屬å°åº¦æ´‹é ˜åœŸ"
+ },
+ "IM": {
+ "name": "英屬地曼島"
+ },
+ "VG": {
+ "name": "英屬維京群島"
+ },
+ "DG": {
+ "name": "迪亞哥加西亞島"
+ },
+ "CG": {
+ "name": "剛果 - 布拉薩"
+ },
+ "CD": {
+ "name": "剛果 - 金å¤æ²™"
+ },
+ "CO": {
+ "name": "哥倫比亞"
+ },
+ "CR": {
+ "name": "哥斯é”黎加"
+ },
+ "EG": {
+ "name": "埃åŠ"
+ },
+ "ET": {
+ "name": "埃塞俄比亞"
+ },
+ "CK": {
+ "name": "庫克群島"
+ },
+ "CW": {
+ "name": "庫拉索"
+ },
+ "NO": {
+ "name": "挪å¨"
+ },
+ "GG": {
+ "name": "根西島"
+ },
+ "GD": {
+ "name": "格林ç´é”"
+ },
+ "GL": {
+ "name": "格陵蘭"
+ },
+ "GE": {
+ "name": "格魯å‰äºž"
+ },
+ "TH": {
+ "name": "泰國"
+ },
+ "HT": {
+ "name": "海地"
+ },
+ "UG": {
+ "name": "çƒå¹²é”"
+ },
+ "UA": {
+ "name": "çƒå…‹è˜­"
+ },
+ "UY": {
+ "name": "çƒæ‹‰åœ­"
+ },
+ "UZ": {
+ "name": "çƒèŒ²åˆ¥å…‹"
+ },
+ "TC": {
+ "name": "特克斯和凱科斯群島"
+ },
+ "TA": {
+ "name": "特里斯å¦é”庫尼亞群島"
+ },
+ "RE": {
+ "name": "留尼旺"
+ },
+ "PE": {
+ "name": "秘魯"
+ },
+ "NA": {
+ "name": "ç´ç±³æ¯”亞"
+ },
+ "NZ": {
+ "name": "ç´è¥¿è˜­"
+ },
+ "NU": {
+ "name": "ç´åŸƒå³¶"
+ },
+ "SO": {
+ "name": "索馬里"
+ },
+ "MQ": {
+ "name": "馬ä¸å°¼å…‹å³¶"
+ },
+ "ML": {
+ "name": "馬里"
+ },
+ "MY": {
+ "name": "馬來西亞"
+ },
+ "MK": {
+ "name": "馬其頓"
+ },
+ "MW": {
+ "name": "馬拉å¨"
+ },
+ "YT": {
+ "name": "馬約特"
+ },
+ "MH": {
+ "name": "馬紹爾群島"
+ },
+ "MG": {
+ "name": "馬é”加斯加"
+ },
+ "MT": {
+ "name": "馬爾他"
+ },
+ "MV": {
+ "name": "馬爾代夫"
+ },
+ "FM": {
+ "name": "密克羅尼西亞群島"
+ },
+ "CZ": {
+ "name": "æ·å…‹å…±å’Œåœ‹"
+ },
+ "SY": {
+ "name": "敘利亞"
+ },
+ "VA": {
+ "name": "梵蒂岡宮城"
+ },
+ "SX": {
+ "name": "è·å±¬è–馬ä¸"
+ },
+ "NL": {
+ "name": "è·è˜­"
+ },
+ "BQ": {
+ "name": "è·è˜­åŠ å‹’比å€"
+ },
+ "MZ": {
+ "name": "莫桑比克"
+ },
+ "BW": {
+ "name": "åšèŒ¨ç“¦ç´"
+ },
+ "CM": {
+ "name": "喀麥隆"
+ },
+ "GN": {
+ "name": "幾內亞"
+ },
+ "GW": {
+ "name": "幾內亞比紹"
+ },
+ "FJ": {
+ "name": "æ–æ¿Ÿ"
+ },
+ "SJ": {
+ "name": "斯瓦爾巴群島åŠæšé¦¬å»¶å³¶"
+ },
+ "LK": {
+ "name": "斯里蘭å¡"
+ },
+ "SZ": {
+ "name": "æ–¯å¨å£«è˜­"
+ },
+ "SI": {
+ "name": "斯洛文尼亞"
+ },
+ "SK": {
+ "name": "斯洛ä¼å…‹"
+ },
+ "CL": {
+ "name": "智利"
+ },
+ "TO": {
+ "name": "湯加"
+ },
+ "PH": {
+ "name": "è²å¾‹è³“"
+ },
+ "LS": {
+ "name": "èŠç´¢æ‰˜"
+ },
+ "VN": {
+ "name": "越å—"
+ },
+ "KY": {
+ "name": "開曼群島"
+ },
+ "ME": {
+ "name": "黑山"
+ },
+ "TJ": {
+ "name": "å¡”å‰å…‹"
+ },
+ "SN": {
+ "name": "塞內加爾"
+ },
+ "SC": {
+ "name": "塞舌爾"
+ },
+ "SL": {
+ "name": "塞拉利昂"
+ },
+ "CY": {
+ "name": "塞浦路斯"
+ },
+ "RS": {
+ "name": "塞爾維亞"
+ },
+ "AT": {
+ "name": "奧地利"
+ },
+ "AX": {
+ "name": "奧蘭群島"
+ },
+ "IT": {
+ "name": "æ„大利"
+ },
+ "EE": {
+ "name": "愛沙尼亞"
+ },
+ "IE": {
+ "name": "愛爾蘭"
+ },
+ "SG": {
+ "name": "新加å¡"
+ },
+ "NC": {
+ "name": "新喀里多尼亞"
+ },
+ "NR": {
+ "name": "瑙魯"
+ },
+ "CH": {
+ "name": "瑞士"
+ },
+ "SE": {
+ "name": "ç‘žå…¸"
+ },
+ "BL": {
+ "name": "è–å·´æ³°å‹’ç±³"
+ },
+ "VC": {
+ "name": "è–文森特和格林ç´ä¸æ–¯"
+ },
+ "PM": {
+ "name": "è–皮埃爾和密克隆群島"
+ },
+ "ST": {
+ "name": "è–多美普林西比"
+ },
+ "SM": {
+ "name": "è–馬利諾"
+ },
+ "KN": {
+ "name": "è–基茨和尼維斯"
+ },
+ "SH": {
+ "name": "è–赫勒拿島"
+ },
+ "CX": {
+ "name": "è–誕島"
+ },
+ "LC": {
+ "name": "è–盧西亞"
+ },
+ "PT": {
+ "name": "è‘¡è„牙"
+ },
+ "TV": {
+ "name": "圖瓦盧"
+ },
+ "FK": {
+ "name": "ç¦å…‹è˜­ç¾¤å³¶"
+ },
+ "MN": {
+ "name": "è’™å¤"
+ },
+ "MS": {
+ "name": "蒙塞拉特島"
+ },
+ "GY": {
+ "name": "蓋亞那"
+ },
+ "LA": {
+ "name": "寮國"
+ },
+ "DE": {
+ "name": "德國"
+ },
+ "MA": {
+ "name": "摩洛哥"
+ },
+ "MC": {
+ "name": "æ‘©ç´å“¥"
+ },
+ "MD": {
+ "name": "摩爾多瓦"
+ },
+ "MM": {
+ "name": "緬甸"
+ },
+ "LB": {
+ "name": "黎巴嫩"
+ },
+ "MX": {
+ "name": "墨西哥"
+ },
+ "JE": {
+ "name": "澤西島"
+ },
+ "AU": {
+ "name": "澳洲"
+ },
+ "RW": {
+ "name": "盧旺é”"
+ },
+ "LU": {
+ "name": "盧森堡"
+ },
+ "NF": {
+ "name": "諾ç¦å…‹å³¶"
+ },
+ "SV": {
+ "name": "薩爾瓦多"
+ },
+ "WS": {
+ "name": "薩摩亞群島"
+ },
+ "RO": {
+ "name": "羅馬尼亞"
+ },
+ "ZM": {
+ "name": "贊比亞"
+ },
+ "GU": {
+ "name": "關島"
+ },
+ "SD": {
+ "name": "蘇丹"
+ },
+ "SR": {
+ "name": "蘇里å—"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/zh-Hant.json b/library/intl/resources/country/zh-Hant.json
new file mode 100644
index 000000000..08638e361
--- /dev/null
+++ b/library/intl/resources/country/zh-Hant.json
@@ -0,0 +1,761 @@
+{
+ "TT": {
+ "name": "åƒé‡Œé”åŠæ‰˜å·´å“¥"
+ },
+ "TR": {
+ "name": "土耳其"
+ },
+ "TC": {
+ "name": "土克斯åŠé–‹ç§‘斯群島"
+ },
+ "TM": {
+ "name": "土庫曼"
+ },
+ "BT": {
+ "name": "ä¸ä¸¹"
+ },
+ "CF": {
+ "name": "中éžå…±å’Œåœ‹"
+ },
+ "CN": {
+ "name": "中è¯äººæ°‘共和國"
+ },
+ "HK": {
+ "name": "中è¯äººæ°‘共和國香港特別行政å€"
+ },
+ "MO": {
+ "name": "中è¯äººæ°‘共和國澳門特別行政å€"
+ },
+ "DK": {
+ "name": "丹麥"
+ },
+ "EC": {
+ "name": "厄瓜多"
+ },
+ "ER": {
+ "name": "厄利垂亞"
+ },
+ "PG": {
+ "name": "巴布亞ç´å¹¾å…§äºž"
+ },
+ "BR": {
+ "name": "巴西"
+ },
+ "BB": {
+ "name": "å·´è²å¤š"
+ },
+ "PY": {
+ "name": "巴拉圭"
+ },
+ "BH": {
+ "name": "å·´æž—"
+ },
+ "BS": {
+ "name": "巴哈馬"
+ },
+ "PA": {
+ "name": "巴拿馬"
+ },
+ "PS": {
+ "name": "å·´å‹’æ–¯å¦è‡ªæ²»å€"
+ },
+ "PK": {
+ "name": "巴基斯å¦"
+ },
+ "JP": {
+ "name": "日本"
+ },
+ "BE": {
+ "name": "比利時"
+ },
+ "JM": {
+ "name": "牙買加"
+ },
+ "IL": {
+ "name": "以色列"
+ },
+ "IC": {
+ "name": "加那利群島"
+ },
+ "CA": {
+ "name": "加拿大"
+ },
+ "GA": {
+ "name": "加彭"
+ },
+ "MP": {
+ "name": "北馬里亞ç´ç¾¤å³¶"
+ },
+ "KP": {
+ "name": "北韓"
+ },
+ "QA": {
+ "name": "å¡é”"
+ },
+ "CU": {
+ "name": "å¤å·´"
+ },
+ "CC": {
+ "name": "å¯å¯æ–¯ç¾¤å³¶"
+ },
+ "TW": {
+ "name": "å°ç£"
+ },
+ "SZ": {
+ "name": "å²ç“¦æ¿Ÿè˜­"
+ },
+ "NE": {
+ "name": "尼日"
+ },
+ "NI": {
+ "name": "尼加拉瓜"
+ },
+ "NP": {
+ "name": "尼泊爾"
+ },
+ "BF": {
+ "name": "布å‰ç´æ³•ç´¢"
+ },
+ "GP": {
+ "name": "瓜地洛普"
+ },
+ "GT": {
+ "name": "瓜地馬拉"
+ },
+ "WF": {
+ "name": "瓦利斯和富圖ç´ç¾¤å³¶"
+ },
+ "GM": {
+ "name": "甘比亞"
+ },
+ "BY": {
+ "name": "白俄羅斯"
+ },
+ "PN": {
+ "name": "皮特肯群島"
+ },
+ "LT": {
+ "name": "立陶宛"
+ },
+ "IQ": {
+ "name": "伊拉克"
+ },
+ "IR": {
+ "name": "伊朗"
+ },
+ "EA": {
+ "name": "休é”與梅利利亞"
+ },
+ "IS": {
+ "name": "冰島"
+ },
+ "LI": {
+ "name": "列支敦斯登"
+ },
+ "HU": {
+ "name": "匈牙利"
+ },
+ "ID": {
+ "name": "å°å°¼"
+ },
+ "IN": {
+ "name": "å°åº¦"
+ },
+ "DJ": {
+ "name": "å‰å¸ƒåœ°"
+ },
+ "KI": {
+ "name": "å‰é‡Œå·´æ–¯"
+ },
+ "KG": {
+ "name": "å‰çˆ¾å‰æ–¯"
+ },
+ "TV": {
+ "name": "å瓦魯"
+ },
+ "DM": {
+ "name": "多米尼克"
+ },
+ "DO": {
+ "name": "多明尼加共和國"
+ },
+ "TG": {
+ "name": "多哥共和國"
+ },
+ "AI": {
+ "name": "安圭拉島"
+ },
+ "AG": {
+ "name": "安地å¡åŠå·´å¸ƒé”"
+ },
+ "AO": {
+ "name": "安哥拉"
+ },
+ "AD": {
+ "name": "安é“爾"
+ },
+ "TK": {
+ "name": "托克勞群島"
+ },
+ "BM": {
+ "name": "百慕é”"
+ },
+ "ET": {
+ "name": "衣索比亞"
+ },
+ "ES": {
+ "name": "西ç­ç‰™"
+ },
+ "EH": {
+ "name": "西撒哈拉"
+ },
+ "HR": {
+ "name": "克羅埃西亞"
+ },
+ "SJ": {
+ "name": "冷岸åŠå¤®éº¥æ©ç¾¤å³¶"
+ },
+ "LY": {
+ "name": "利比亞"
+ },
+ "HN": {
+ "name": "å®éƒ½æ‹‰æ–¯"
+ },
+ "GR": {
+ "name": "希臘"
+ },
+ "BN": {
+ "name": "汶èŠ"
+ },
+ "SA": {
+ "name": "æ²™çƒåœ°é˜¿æ‹‰ä¼¯"
+ },
+ "BZ": {
+ "name": "è²é‡Œæ–¯"
+ },
+ "BJ": {
+ "name": "è²å—"
+ },
+ "GQ": {
+ "name": "赤é“幾內亞"
+ },
+ "ZW": {
+ "name": "辛巴å¨"
+ },
+ "AM": {
+ "name": "亞美尼亞"
+ },
+ "AZ": {
+ "name": "亞塞拜然"
+ },
+ "TZ": {
+ "name": "å¦å°šå°¼äºž"
+ },
+ "NG": {
+ "name": "奈åŠåˆ©äºž"
+ },
+ "VE": {
+ "name": "委內瑞拉"
+ },
+ "BD": {
+ "name": "孟加拉"
+ },
+ "ZM": {
+ "name": "尚比亞"
+ },
+ "PW": {
+ "name": "帛ç‰"
+ },
+ "LV": {
+ "name": "拉脫維亞"
+ },
+ "TO": {
+ "name": "æ±åŠ "
+ },
+ "TL": {
+ "name": "æ±å¸æ±¶"
+ },
+ "FR": {
+ "name": "法國"
+ },
+ "FO": {
+ "name": "法羅群島"
+ },
+ "GF": {
+ "name": "法屬圭亞那"
+ },
+ "TF": {
+ "name": "法屬å—方屬地"
+ },
+ "PF": {
+ "name": "法屬玻里尼西亞"
+ },
+ "MF": {
+ "name": "法屬è–馬ä¸"
+ },
+ "BA": {
+ "name": "波士尼亞與赫塞格維ç´"
+ },
+ "BW": {
+ "name": "波札那"
+ },
+ "PR": {
+ "name": "波多黎å„"
+ },
+ "PL": {
+ "name": "波蘭"
+ },
+ "GI": {
+ "name": "直布羅陀"
+ },
+ "KE": {
+ "name": "肯亞"
+ },
+ "FI": {
+ "name": "芬蘭"
+ },
+ "AE": {
+ "name": "阿拉伯è¯åˆå¤§å…¬åœ‹"
+ },
+ "AR": {
+ "name": "阿根廷"
+ },
+ "OM": {
+ "name": "阿曼王國"
+ },
+ "AF": {
+ "name": "阿富汗"
+ },
+ "AC": {
+ "name": "阿森æ¾å³¶"
+ },
+ "AW": {
+ "name": "阿路巴"
+ },
+ "DZ": {
+ "name": "阿爾åŠåˆ©äºž"
+ },
+ "AL": {
+ "name": "阿爾巴尼亞"
+ },
+ "RU": {
+ "name": "ä¿„ç¾…æ–¯"
+ },
+ "BG": {
+ "name": "ä¿åŠ åˆ©äºž"
+ },
+ "ZA": {
+ "name": "å—éž"
+ },
+ "GS": {
+ "name": "å—喬治亞與å—三明治群島"
+ },
+ "AQ": {
+ "name": "å—極洲"
+ },
+ "KR": {
+ "name": "å—韓"
+ },
+ "SS": {
+ "name": "å—蘇丹"
+ },
+ "KZ": {
+ "name": "哈薩克"
+ },
+ "TD": {
+ "name": "查德"
+ },
+ "KH": {
+ "name": "柬埔寨"
+ },
+ "BO": {
+ "name": "玻利維亞"
+ },
+ "KW": {
+ "name": "科å¨ç‰¹"
+ },
+ "XK": {
+ "name": "科索沃"
+ },
+ "TN": {
+ "name": "çªå°¼è¥¿äºž"
+ },
+ "JO": {
+ "name": "ç´„æ—¦"
+ },
+ "US": {
+ "name": "美國"
+ },
+ "UM": {
+ "name": "美國本土外å°å³¶å¶¼"
+ },
+ "VI": {
+ "name": "美屬維京群島"
+ },
+ "AS": {
+ "name": "美屬薩摩亞群島"
+ },
+ "GB": {
+ "name": "英國"
+ },
+ "IO": {
+ "name": "英屬å°åº¦æ´‹é ˜åœŸ"
+ },
+ "VG": {
+ "name": "英屬維京群島"
+ },
+ "MR": {
+ "name": "茅利塔尼亞"
+ },
+ "GH": {
+ "name": "迦ç´"
+ },
+ "DG": {
+ "name": "迪亞哥加西亞島"
+ },
+ "CG": {
+ "name": "剛果(布拉薩)"
+ },
+ "CD": {
+ "name": "剛果(金å¤æ²™ï¼‰"
+ },
+ "CO": {
+ "name": "哥倫比亞"
+ },
+ "CR": {
+ "name": "哥斯大黎加"
+ },
+ "EG": {
+ "name": "埃åŠ"
+ },
+ "CK": {
+ "name": "庫克群島"
+ },
+ "CW": {
+ "name": "庫拉索"
+ },
+ "NO": {
+ "name": "挪å¨"
+ },
+ "GG": {
+ "name": "根西島"
+ },
+ "GL": {
+ "name": "格陵蘭"
+ },
+ "GD": {
+ "name": "格瑞那é”"
+ },
+ "TH": {
+ "name": "泰國"
+ },
+ "HT": {
+ "name": "海地"
+ },
+ "UG": {
+ "name": "çƒå¹²é”"
+ },
+ "UA": {
+ "name": "çƒå…‹è˜­"
+ },
+ "UY": {
+ "name": "çƒæ‹‰åœ­"
+ },
+ "UZ": {
+ "name": "çƒèŒ²åˆ¥å…‹"
+ },
+ "TA": {
+ "name": "特里斯å¦é”庫尼亞群島"
+ },
+ "RE": {
+ "name": "留尼旺"
+ },
+ "PE": {
+ "name": "秘魯"
+ },
+ "NA": {
+ "name": "ç´ç±³æ¯”亞"
+ },
+ "NZ": {
+ "name": "ç´è¥¿è˜­"
+ },
+ "NU": {
+ "name": "ç´åŸƒå³¶"
+ },
+ "SO": {
+ "name": "索馬利亞"
+ },
+ "SB": {
+ "name": "索羅門群島"
+ },
+ "MQ": {
+ "name": "馬ä¸å°¼å…‹å³¶"
+ },
+ "ML": {
+ "name": "馬利"
+ },
+ "MY": {
+ "name": "馬來西亞"
+ },
+ "MK": {
+ "name": "馬其頓"
+ },
+ "MW": {
+ "name": "馬拉å¨"
+ },
+ "YT": {
+ "name": "馬約特"
+ },
+ "MH": {
+ "name": "馬紹爾群島"
+ },
+ "MG": {
+ "name": "馬é”加斯加"
+ },
+ "MT": {
+ "name": "馬爾他"
+ },
+ "MV": {
+ "name": "馬爾地夫"
+ },
+ "FM": {
+ "name": "密克羅尼西亞群島"
+ },
+ "CZ": {
+ "name": "æ·å…‹å…±å’Œåœ‹"
+ },
+ "SY": {
+ "name": "敘利亞"
+ },
+ "IM": {
+ "name": "曼島"
+ },
+ "VA": {
+ "name": "梵蒂岡"
+ },
+ "SX": {
+ "name": "è·å±¬è–馬ä¸"
+ },
+ "NL": {
+ "name": "è·è˜­"
+ },
+ "BQ": {
+ "name": "è·è˜­åŠ å‹’比å€"
+ },
+ "MZ": {
+ "name": "莫三比克"
+ },
+ "CM": {
+ "name": "喀麥隆"
+ },
+ "GE": {
+ "name": "喬治亞共和國"
+ },
+ "GN": {
+ "name": "幾內亞"
+ },
+ "GW": {
+ "name": "幾內亞比紹"
+ },
+ "FJ": {
+ "name": "æ–æ¿Ÿ"
+ },
+ "LK": {
+ "name": "斯里蘭å¡"
+ },
+ "SK": {
+ "name": "斯洛ä¼å…‹"
+ },
+ "SI": {
+ "name": "斯洛維尼亞"
+ },
+ "CL": {
+ "name": "智利"
+ },
+ "PH": {
+ "name": "è²å¾‹è³“"
+ },
+ "CI": {
+ "name": "象牙海岸"
+ },
+ "VN": {
+ "name": "越å—"
+ },
+ "KY": {
+ "name": "開曼群島"
+ },
+ "TJ": {
+ "name": "å¡”å‰å…‹"
+ },
+ "SN": {
+ "name": "塞內加爾"
+ },
+ "SC": {
+ "name": "塞席爾"
+ },
+ "RS": {
+ "name": "塞爾維亞"
+ },
+ "AT": {
+ "name": "奧地利"
+ },
+ "AX": {
+ "name": "奧蘭群島"
+ },
+ "EE": {
+ "name": "愛沙尼亞"
+ },
+ "IE": {
+ "name": "愛爾蘭"
+ },
+ "SG": {
+ "name": "新加å¡"
+ },
+ "NC": {
+ "name": "新喀里多尼亞群島"
+ },
+ "SL": {
+ "name": "ç…å­å±±"
+ },
+ "CH": {
+ "name": "瑞士"
+ },
+ "SE": {
+ "name": "ç‘žå…¸"
+ },
+ "VU": {
+ "name": "è¬é‚£æœ"
+ },
+ "IT": {
+ "name": "義大利"
+ },
+ "BL": {
+ "name": "è–å·´ç‘Ÿç±³"
+ },
+ "VC": {
+ "name": "è–文森åŠæ ¼ç‘žé‚£ä¸"
+ },
+ "PM": {
+ "name": "è–皮埃爾和密克隆群島"
+ },
+ "ST": {
+ "name": "è–多美åŠæ™®æž—西比"
+ },
+ "KN": {
+ "name": "è–克里斯多ç¦åŠå°¼ç¶­æ–¯"
+ },
+ "SM": {
+ "name": "è–馬利諾"
+ },
+ "SH": {
+ "name": "è–赫勒拿島"
+ },
+ "CX": {
+ "name": "è–誕島"
+ },
+ "LC": {
+ "name": "è–露西亞"
+ },
+ "YE": {
+ "name": "葉門"
+ },
+ "KM": {
+ "name": "葛摩"
+ },
+ "PT": {
+ "name": "è‘¡è„牙"
+ },
+ "FK": {
+ "name": "ç¦å…‹è˜­ç¾¤å³¶"
+ },
+ "CV": {
+ "name": "維德角"
+ },
+ "MN": {
+ "name": "è’™å¤"
+ },
+ "MS": {
+ "name": "蒙哲臘"
+ },
+ "ME": {
+ "name": "蒙特內哥羅"
+ },
+ "BI": {
+ "name": "蒲隆地"
+ },
+ "GY": {
+ "name": "蓋亞那"
+ },
+ "LA": {
+ "name": "寮國"
+ },
+ "DE": {
+ "name": "德國"
+ },
+ "MA": {
+ "name": "摩洛哥"
+ },
+ "MC": {
+ "name": "æ‘©ç´å“¥"
+ },
+ "MD": {
+ "name": "摩爾多瓦"
+ },
+ "MU": {
+ "name": "模里西斯"
+ },
+ "MM": {
+ "name": "緬甸"
+ },
+ "LB": {
+ "name": "黎巴嫩"
+ },
+ "MX": {
+ "name": "墨西哥"
+ },
+ "JE": {
+ "name": "澤西島"
+ },
+ "AU": {
+ "name": "澳洲"
+ },
+ "RW": {
+ "name": "盧安é”"
+ },
+ "LU": {
+ "name": "盧森堡"
+ },
+ "NF": {
+ "name": "諾ç¦å…‹å³¶"
+ },
+ "NR": {
+ "name": "諾魯"
+ },
+ "LR": {
+ "name": "賴比瑞亞"
+ },
+ "LS": {
+ "name": "賴索托"
+ },
+ "CY": {
+ "name": "賽普勒斯"
+ },
+ "SV": {
+ "name": "薩爾瓦多"
+ },
+ "WS": {
+ "name": "薩摩亞群島"
+ },
+ "RO": {
+ "name": "羅馬尼亞"
+ },
+ "GU": {
+ "name": "關島"
+ },
+ "SD": {
+ "name": "蘇丹"
+ },
+ "SR": {
+ "name": "蘇利å—"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/zh.json b/library/intl/resources/country/zh.json
new file mode 100644
index 000000000..71061e76a
--- /dev/null
+++ b/library/intl/resources/country/zh.json
@@ -0,0 +1,761 @@
+{
+ "AL": {
+ "name": "阿尔巴尼亚"
+ },
+ "DZ": {
+ "name": "阿尔åŠåˆ©äºš"
+ },
+ "AF": {
+ "name": "阿富汗"
+ },
+ "AR": {
+ "name": "阿根廷"
+ },
+ "AE": {
+ "name": "阿拉伯è”åˆé…‹é•¿å›½"
+ },
+ "AW": {
+ "name": "阿é²å·´"
+ },
+ "OM": {
+ "name": "阿曼"
+ },
+ "AZ": {
+ "name": "阿塞拜疆"
+ },
+ "AC": {
+ "name": "阿森æ¾å²›"
+ },
+ "EG": {
+ "name": "埃åŠ"
+ },
+ "ET": {
+ "name": "埃塞俄比亚"
+ },
+ "IE": {
+ "name": "爱尔兰"
+ },
+ "EE": {
+ "name": "爱沙尼亚"
+ },
+ "AD": {
+ "name": "安é“å°”"
+ },
+ "AO": {
+ "name": "安哥拉"
+ },
+ "AI": {
+ "name": "安圭拉"
+ },
+ "AG": {
+ "name": "安æ瓜和巴布达"
+ },
+ "AT": {
+ "name": "奥地利"
+ },
+ "AX": {
+ "name": "奥兰群岛"
+ },
+ "AU": {
+ "name": "澳大利亚"
+ },
+ "BB": {
+ "name": "巴巴多斯"
+ },
+ "PG": {
+ "name": "巴布亚新几内亚"
+ },
+ "BS": {
+ "name": "巴哈马"
+ },
+ "PK": {
+ "name": "巴基斯å¦"
+ },
+ "PY": {
+ "name": "巴拉圭"
+ },
+ "PS": {
+ "name": "å·´å‹’æ–¯å¦é¢†åœŸ"
+ },
+ "BH": {
+ "name": "å·´æž—"
+ },
+ "PA": {
+ "name": "巴拿马"
+ },
+ "BR": {
+ "name": "巴西"
+ },
+ "BY": {
+ "name": "白俄罗斯"
+ },
+ "BM": {
+ "name": "百慕大"
+ },
+ "BG": {
+ "name": "ä¿åŠ åˆ©äºš"
+ },
+ "MP": {
+ "name": "北马里亚纳群岛"
+ },
+ "BJ": {
+ "name": "è´å®"
+ },
+ "BE": {
+ "name": "比利时"
+ },
+ "IS": {
+ "name": "冰岛"
+ },
+ "PR": {
+ "name": "波多黎å„"
+ },
+ "PL": {
+ "name": "波兰"
+ },
+ "BA": {
+ "name": "波斯尼亚和黑塞哥维那"
+ },
+ "BO": {
+ "name": "玻利维亚"
+ },
+ "BZ": {
+ "name": "伯利兹"
+ },
+ "BW": {
+ "name": "åšèŒ¨ç“¦çº³"
+ },
+ "BT": {
+ "name": "ä¸ä¸¹"
+ },
+ "BF": {
+ "name": "布基纳法索"
+ },
+ "BI": {
+ "name": "布隆迪"
+ },
+ "KP": {
+ "name": "æœé²œ"
+ },
+ "GQ": {
+ "name": "赤é“几内亚"
+ },
+ "DK": {
+ "name": "丹麦"
+ },
+ "DE": {
+ "name": "德国"
+ },
+ "DG": {
+ "name": "迪戈加西亚岛"
+ },
+ "TL": {
+ "name": "东å¸æ±¶"
+ },
+ "TG": {
+ "name": "多哥"
+ },
+ "DO": {
+ "name": "多米尼加共和国"
+ },
+ "DM": {
+ "name": "多米尼克"
+ },
+ "RU": {
+ "name": "ä¿„ç½—æ–¯"
+ },
+ "EC": {
+ "name": "厄瓜多尔"
+ },
+ "ER": {
+ "name": "厄立特里亚"
+ },
+ "FR": {
+ "name": "法国"
+ },
+ "FO": {
+ "name": "法罗群岛"
+ },
+ "PF": {
+ "name": "法属波利尼西亚"
+ },
+ "GF": {
+ "name": "法属圭亚那"
+ },
+ "TF": {
+ "name": "法属å—部领地"
+ },
+ "MF": {
+ "name": "法属圣马ä¸"
+ },
+ "VA": {
+ "name": "梵蒂冈"
+ },
+ "PH": {
+ "name": "è²å¾‹å®¾"
+ },
+ "FJ": {
+ "name": "æ–济"
+ },
+ "FI": {
+ "name": "芬兰"
+ },
+ "CV": {
+ "name": "佛得角"
+ },
+ "FK": {
+ "name": "ç¦å…‹å…°ç¾¤å²›"
+ },
+ "GM": {
+ "name": "冈比亚"
+ },
+ "CG": {
+ "name": "刚果(布)"
+ },
+ "CD": {
+ "name": "刚果(金)"
+ },
+ "CO": {
+ "name": "哥伦比亚"
+ },
+ "CR": {
+ "name": "哥斯达黎加"
+ },
+ "GD": {
+ "name": "格林纳达"
+ },
+ "GL": {
+ "name": "格陵兰"
+ },
+ "GE": {
+ "name": "æ ¼é²å‰äºš"
+ },
+ "GG": {
+ "name": "根西岛"
+ },
+ "CU": {
+ "name": "å¤å·´"
+ },
+ "GP": {
+ "name": "瓜德罗普"
+ },
+ "GU": {
+ "name": "关岛"
+ },
+ "GY": {
+ "name": "圭亚那"
+ },
+ "KZ": {
+ "name": "哈è¨å…‹æ–¯å¦"
+ },
+ "HT": {
+ "name": "海地"
+ },
+ "KR": {
+ "name": "韩国"
+ },
+ "NL": {
+ "name": "è·å…°"
+ },
+ "BQ": {
+ "name": "è·å…°åŠ å‹’比区"
+ },
+ "SX": {
+ "name": "è·å±žåœ£é©¬ä¸"
+ },
+ "ME": {
+ "name": "黑山共和国"
+ },
+ "HN": {
+ "name": "洪都拉斯"
+ },
+ "KI": {
+ "name": "基里巴斯"
+ },
+ "DJ": {
+ "name": "å‰å¸ƒæ"
+ },
+ "KG": {
+ "name": "å‰å°”å‰æ–¯æ–¯å¦"
+ },
+ "GN": {
+ "name": "几内亚"
+ },
+ "GW": {
+ "name": "几内亚比ç»"
+ },
+ "CA": {
+ "name": "加拿大"
+ },
+ "GH": {
+ "name": "加纳"
+ },
+ "IC": {
+ "name": "加纳利群岛"
+ },
+ "GA": {
+ "name": "加蓬"
+ },
+ "KH": {
+ "name": "柬埔寨"
+ },
+ "CZ": {
+ "name": "æ·å…‹å…±å’Œå›½"
+ },
+ "ZW": {
+ "name": "津巴布韦"
+ },
+ "CM": {
+ "name": "喀麦隆"
+ },
+ "QA": {
+ "name": "å¡å¡”å°”"
+ },
+ "KY": {
+ "name": "开曼群岛"
+ },
+ "CC": {
+ "name": "科科斯(基林)群岛"
+ },
+ "KM": {
+ "name": "科摩罗"
+ },
+ "XK": {
+ "name": "科索沃"
+ },
+ "CI": {
+ "name": "科特迪瓦"
+ },
+ "KW": {
+ "name": "科å¨ç‰¹"
+ },
+ "HR": {
+ "name": "克罗地亚"
+ },
+ "KE": {
+ "name": "肯尼亚"
+ },
+ "CK": {
+ "name": "库克群岛"
+ },
+ "CW": {
+ "name": "库拉索"
+ },
+ "LV": {
+ "name": "拉脱维亚"
+ },
+ "LS": {
+ "name": "莱索托"
+ },
+ "LA": {
+ "name": "è€æŒ"
+ },
+ "LB": {
+ "name": "黎巴嫩"
+ },
+ "LT": {
+ "name": "立陶宛"
+ },
+ "LR": {
+ "name": "利比里亚"
+ },
+ "LY": {
+ "name": "利比亚"
+ },
+ "LI": {
+ "name": "列支敦士登"
+ },
+ "RE": {
+ "name": "留尼汪"
+ },
+ "LU": {
+ "name": "å¢æ£®å ¡"
+ },
+ "RW": {
+ "name": "å¢æ—ºè¾¾"
+ },
+ "RO": {
+ "name": "罗马尼亚"
+ },
+ "MG": {
+ "name": "马达加斯加"
+ },
+ "MV": {
+ "name": "马尔代夫"
+ },
+ "MT": {
+ "name": "马耳他"
+ },
+ "MW": {
+ "name": "马拉维"
+ },
+ "MY": {
+ "name": "马æ¥è¥¿äºš"
+ },
+ "ML": {
+ "name": "马里"
+ },
+ "MK": {
+ "name": "马其顿"
+ },
+ "MH": {
+ "name": "马ç»å°”群岛"
+ },
+ "MQ": {
+ "name": "马æ尼克"
+ },
+ "YT": {
+ "name": "马约特"
+ },
+ "IM": {
+ "name": "曼岛"
+ },
+ "MU": {
+ "name": "毛里求斯"
+ },
+ "MR": {
+ "name": "毛里塔尼亚"
+ },
+ "US": {
+ "name": "美国"
+ },
+ "UM": {
+ "name": "美国本土外å°å²›å±¿"
+ },
+ "AS": {
+ "name": "美属è¨æ‘©äºš"
+ },
+ "VI": {
+ "name": "美属维京群岛"
+ },
+ "MN": {
+ "name": "è’™å¤"
+ },
+ "MS": {
+ "name": "蒙特塞拉特"
+ },
+ "BD": {
+ "name": "孟加拉国"
+ },
+ "PE": {
+ "name": "秘é²"
+ },
+ "FM": {
+ "name": "密克罗尼西亚"
+ },
+ "MM": {
+ "name": "缅甸"
+ },
+ "MD": {
+ "name": "摩尔多瓦"
+ },
+ "MA": {
+ "name": "摩洛哥"
+ },
+ "MC": {
+ "name": "摩纳哥"
+ },
+ "MZ": {
+ "name": "莫桑比克"
+ },
+ "MX": {
+ "name": "墨西哥"
+ },
+ "NA": {
+ "name": "纳米比亚"
+ },
+ "ZA": {
+ "name": "å—éž"
+ },
+ "AQ": {
+ "name": "å—æžæ´²"
+ },
+ "GS": {
+ "name": "å—乔治亚岛和å—æ¡‘å¨é½ç¾¤å²›"
+ },
+ "SS": {
+ "name": "å—è‹ä¸¹"
+ },
+ "NR": {
+ "name": "ç‘™é²"
+ },
+ "NI": {
+ "name": "尼加拉瓜"
+ },
+ "NP": {
+ "name": "尼泊尔"
+ },
+ "NE": {
+ "name": "尼日尔"
+ },
+ "NG": {
+ "name": "尼日利亚"
+ },
+ "NU": {
+ "name": "纽埃"
+ },
+ "NO": {
+ "name": "挪å¨"
+ },
+ "NF": {
+ "name": "诺ç¦å…‹å²›"
+ },
+ "PW": {
+ "name": "帕劳"
+ },
+ "PN": {
+ "name": "皮特凯æ©ç¾¤å²›"
+ },
+ "PT": {
+ "name": "è‘¡è„牙"
+ },
+ "JP": {
+ "name": "日本"
+ },
+ "SE": {
+ "name": "ç‘žå…¸"
+ },
+ "CH": {
+ "name": "瑞士"
+ },
+ "SV": {
+ "name": "è¨å°”瓦多"
+ },
+ "WS": {
+ "name": "è¨æ‘©äºš"
+ },
+ "RS": {
+ "name": "塞尔维亚"
+ },
+ "SL": {
+ "name": "塞拉利昂"
+ },
+ "SN": {
+ "name": "塞内加尔"
+ },
+ "CY": {
+ "name": "塞浦路斯"
+ },
+ "SC": {
+ "name": "塞舌尔"
+ },
+ "SA": {
+ "name": "沙特阿拉伯"
+ },
+ "BL": {
+ "name": "圣巴泰勒米"
+ },
+ "CX": {
+ "name": "圣诞岛"
+ },
+ "ST": {
+ "name": "圣多美和普林西比"
+ },
+ "SH": {
+ "name": "圣赫勒拿"
+ },
+ "KN": {
+ "name": "圣基茨和尼维斯"
+ },
+ "LC": {
+ "name": "圣å¢è¥¿äºš"
+ },
+ "SM": {
+ "name": "圣马力诺"
+ },
+ "PM": {
+ "name": "圣皮埃尔和密克隆群岛"
+ },
+ "VC": {
+ "name": "圣文森特和格林纳ä¸æ–¯"
+ },
+ "LK": {
+ "name": "斯里兰å¡"
+ },
+ "SK": {
+ "name": "斯洛ä¼å…‹"
+ },
+ "SI": {
+ "name": "斯洛文尼亚"
+ },
+ "SJ": {
+ "name": "斯瓦尔巴特和扬马延"
+ },
+ "SZ": {
+ "name": "æ–¯å¨å£«å…°"
+ },
+ "SD": {
+ "name": "è‹ä¸¹"
+ },
+ "SR": {
+ "name": "è‹é‡Œå—"
+ },
+ "SB": {
+ "name": "所罗门群岛"
+ },
+ "SO": {
+ "name": "索马里"
+ },
+ "TJ": {
+ "name": "å¡”å‰å…‹æ–¯å¦"
+ },
+ "TW": {
+ "name": "å°æ¹¾"
+ },
+ "TH": {
+ "name": "泰国"
+ },
+ "TZ": {
+ "name": "å¦æ¡‘尼亚"
+ },
+ "TO": {
+ "name": "汤加"
+ },
+ "TC": {
+ "name": "特克斯和凯科斯群岛"
+ },
+ "TA": {
+ "name": "特里斯å¦-达库尼亚群岛"
+ },
+ "TT": {
+ "name": "特立尼达和多巴哥"
+ },
+ "TN": {
+ "name": "çªå°¼æ–¯"
+ },
+ "TV": {
+ "name": "图瓦å¢"
+ },
+ "TR": {
+ "name": "土耳其"
+ },
+ "TM": {
+ "name": "土库曼斯å¦"
+ },
+ "TK": {
+ "name": "托克劳"
+ },
+ "WF": {
+ "name": "瓦利斯和富图纳"
+ },
+ "VU": {
+ "name": "瓦努阿图"
+ },
+ "GT": {
+ "name": "å±åœ°é©¬æ‹‰"
+ },
+ "VE": {
+ "name": "委内瑞拉"
+ },
+ "BN": {
+ "name": "文莱"
+ },
+ "UG": {
+ "name": "乌干达"
+ },
+ "UA": {
+ "name": "乌克兰"
+ },
+ "UY": {
+ "name": "乌拉圭"
+ },
+ "UZ": {
+ "name": "乌兹别克斯å¦"
+ },
+ "GR": {
+ "name": "希腊"
+ },
+ "ES": {
+ "name": "西ç­ç‰™"
+ },
+ "EH": {
+ "name": "西撒哈拉"
+ },
+ "SG": {
+ "name": "新加å¡"
+ },
+ "NC": {
+ "name": "新喀里多尼亚"
+ },
+ "NZ": {
+ "name": "新西兰"
+ },
+ "HU": {
+ "name": "匈牙利"
+ },
+ "EA": {
+ "name": "休达åŠæ¢…利利亚"
+ },
+ "SY": {
+ "name": "å™åˆ©äºš"
+ },
+ "JM": {
+ "name": "牙买加"
+ },
+ "AM": {
+ "name": "亚美尼亚"
+ },
+ "YE": {
+ "name": "也门"
+ },
+ "IQ": {
+ "name": "伊拉克"
+ },
+ "IR": {
+ "name": "伊朗"
+ },
+ "IL": {
+ "name": "以色列"
+ },
+ "IT": {
+ "name": "æ„大利"
+ },
+ "IN": {
+ "name": "å°åº¦"
+ },
+ "ID": {
+ "name": "å°åº¦å°¼è¥¿äºš"
+ },
+ "GB": {
+ "name": "英国"
+ },
+ "VG": {
+ "name": "英属维京群岛"
+ },
+ "IO": {
+ "name": "英属å°åº¦æ´‹é¢†åœ°"
+ },
+ "JO": {
+ "name": "约旦"
+ },
+ "VN": {
+ "name": "越å—"
+ },
+ "ZM": {
+ "name": "赞比亚"
+ },
+ "JE": {
+ "name": "泽西岛"
+ },
+ "TD": {
+ "name": "ä¹å¾—"
+ },
+ "GI": {
+ "name": "直布罗陀"
+ },
+ "CL": {
+ "name": "智利"
+ },
+ "CF": {
+ "name": "中éžå…±å’Œå›½"
+ },
+ "CN": {
+ "name": "中国"
+ },
+ "MO": {
+ "name": "中国澳门特别行政区"
+ },
+ "HK": {
+ "name": "中国香港特别行政区"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/country/zu.json b/library/intl/resources/country/zu.json
new file mode 100644
index 000000000..20b4d0623
--- /dev/null
+++ b/library/intl/resources/country/zu.json
@@ -0,0 +1,761 @@
+{
+ "AF": {
+ "name": "i-Afghanistan"
+ },
+ "AX": {
+ "name": "i-Ã…land Islands"
+ },
+ "AL": {
+ "name": "i-Albania"
+ },
+ "DZ": {
+ "name": "i-Algeria"
+ },
+ "AS": {
+ "name": "i-American Samoa"
+ },
+ "AD": {
+ "name": "i-Andorra"
+ },
+ "AO": {
+ "name": "i-Angola"
+ },
+ "AI": {
+ "name": "i-Anguilla"
+ },
+ "AQ": {
+ "name": "i-Antarctica"
+ },
+ "AG": {
+ "name": "i-Antigua and Barbuda"
+ },
+ "AR": {
+ "name": "i-Argentina"
+ },
+ "AM": {
+ "name": "i-Armenia"
+ },
+ "AW": {
+ "name": "i-Aruba"
+ },
+ "AC": {
+ "name": "i-Ascension Island"
+ },
+ "AU": {
+ "name": "i-Australia"
+ },
+ "AT": {
+ "name": "i-Austria"
+ },
+ "AZ": {
+ "name": "i-Azerbaijan"
+ },
+ "BS": {
+ "name": "i-Bahamas"
+ },
+ "BH": {
+ "name": "i-Bahrain"
+ },
+ "BD": {
+ "name": "i-Bangladesh"
+ },
+ "BB": {
+ "name": "i-Barbados"
+ },
+ "BY": {
+ "name": "i-Belarus"
+ },
+ "BE": {
+ "name": "i-Belgium"
+ },
+ "BZ": {
+ "name": "i-Belize"
+ },
+ "BJ": {
+ "name": "i-Benin"
+ },
+ "BM": {
+ "name": "i-Bermuda"
+ },
+ "BT": {
+ "name": "i-Bhutan"
+ },
+ "BO": {
+ "name": "i-Bolivia"
+ },
+ "BA": {
+ "name": "i-Bosnia ne-Herzegovina"
+ },
+ "BW": {
+ "name": "i-Botswana"
+ },
+ "BR": {
+ "name": "i-Brazil"
+ },
+ "IO": {
+ "name": "i-British Indian Ocean Territory"
+ },
+ "VG": {
+ "name": "i-British Virgin Islands"
+ },
+ "BN": {
+ "name": "i-Brunei"
+ },
+ "BG": {
+ "name": "i-Bulgaria"
+ },
+ "BF": {
+ "name": "i-Burkina Faso"
+ },
+ "BI": {
+ "name": "i-Burundi"
+ },
+ "KH": {
+ "name": "i-Cambodia"
+ },
+ "CM": {
+ "name": "i-Cameroon"
+ },
+ "CA": {
+ "name": "i-Canada"
+ },
+ "IC": {
+ "name": "i-Canary Islands"
+ },
+ "CV": {
+ "name": "i-Cape Verde"
+ },
+ "BQ": {
+ "name": "i-Caribbean Netherlands"
+ },
+ "KY": {
+ "name": "i-Cayman Islands"
+ },
+ "CF": {
+ "name": "i-Central African Republic"
+ },
+ "TD": {
+ "name": "i-Chad"
+ },
+ "CL": {
+ "name": "i-Chile"
+ },
+ "CN": {
+ "name": "i-China"
+ },
+ "CX": {
+ "name": "i-Christmas Island"
+ },
+ "CC": {
+ "name": "i-Cocos (Keeling) Islands"
+ },
+ "CO": {
+ "name": "i-Colombia"
+ },
+ "KM": {
+ "name": "i-Comoros"
+ },
+ "CG": {
+ "name": "i-Congo - Brazzaville"
+ },
+ "CD": {
+ "name": "i-Congo - Kinshasa"
+ },
+ "CK": {
+ "name": "i-Cook Islands"
+ },
+ "CR": {
+ "name": "i-Costa Rica"
+ },
+ "CI": {
+ "name": "i-Côte d’Ivoire"
+ },
+ "HR": {
+ "name": "i-Croatia"
+ },
+ "CU": {
+ "name": "i-Cuba"
+ },
+ "EA": {
+ "name": "i-Cueta ne-Melilla"
+ },
+ "CW": {
+ "name": "i-Curaçao"
+ },
+ "CY": {
+ "name": "i-Cyprus"
+ },
+ "CZ": {
+ "name": "i-Czech Republic"
+ },
+ "DK": {
+ "name": "i-Denmark"
+ },
+ "DG": {
+ "name": "i-Diego Garcia"
+ },
+ "DJ": {
+ "name": "i-Djibouti"
+ },
+ "DM": {
+ "name": "i-Dominica"
+ },
+ "DO": {
+ "name": "i-Dominican Republic"
+ },
+ "EC": {
+ "name": "i-Ecuador"
+ },
+ "EG": {
+ "name": "i-Egypt"
+ },
+ "SV": {
+ "name": "i-El Salvador"
+ },
+ "GQ": {
+ "name": "i-Equatorial Guinea"
+ },
+ "ER": {
+ "name": "i-Eritrea"
+ },
+ "EE": {
+ "name": "i-Estonia"
+ },
+ "ET": {
+ "name": "i-Ethiopia"
+ },
+ "FK": {
+ "name": "i-Falkland Islands"
+ },
+ "FO": {
+ "name": "i-Faroe Islands"
+ },
+ "FJ": {
+ "name": "i-Fiji"
+ },
+ "FI": {
+ "name": "i-Finland"
+ },
+ "FR": {
+ "name": "i-France"
+ },
+ "PF": {
+ "name": "i-French Polynesia"
+ },
+ "TF": {
+ "name": "i-French Southern Territories"
+ },
+ "GA": {
+ "name": "i-Gabon"
+ },
+ "GM": {
+ "name": "i-Gambia"
+ },
+ "GE": {
+ "name": "i-Georgia"
+ },
+ "DE": {
+ "name": "i-Germany"
+ },
+ "GH": {
+ "name": "i-Ghana"
+ },
+ "GI": {
+ "name": "i-Gibraltar"
+ },
+ "GR": {
+ "name": "i-Greece"
+ },
+ "GL": {
+ "name": "i-Greenland"
+ },
+ "GD": {
+ "name": "i-Grenada"
+ },
+ "GP": {
+ "name": "i-Guadeloupe"
+ },
+ "GU": {
+ "name": "i-Guam"
+ },
+ "GT": {
+ "name": "i-Guatemala"
+ },
+ "GG": {
+ "name": "i-Guernsey"
+ },
+ "GN": {
+ "name": "i-Guinea"
+ },
+ "GW": {
+ "name": "i-Guinea-Bissau"
+ },
+ "GY": {
+ "name": "i-Guyana"
+ },
+ "HT": {
+ "name": "i-Haiti"
+ },
+ "HN": {
+ "name": "i-Honduras"
+ },
+ "HK": {
+ "name": "i-Hong Kong SAR China"
+ },
+ "HU": {
+ "name": "i-Hungary"
+ },
+ "IS": {
+ "name": "i-Iceland"
+ },
+ "IN": {
+ "name": "i-India"
+ },
+ "ID": {
+ "name": "i-Indonesia"
+ },
+ "IR": {
+ "name": "i-Iran"
+ },
+ "IQ": {
+ "name": "i-Iraq"
+ },
+ "IE": {
+ "name": "i-Ireland"
+ },
+ "IM": {
+ "name": "i-Isle of Man"
+ },
+ "IL": {
+ "name": "i-Israel"
+ },
+ "IT": {
+ "name": "i-Italy"
+ },
+ "JM": {
+ "name": "i-Jamaica"
+ },
+ "JP": {
+ "name": "i-Japan"
+ },
+ "JE": {
+ "name": "i-Jersey"
+ },
+ "JO": {
+ "name": "i-Jordan"
+ },
+ "KZ": {
+ "name": "i-Kazakhstan"
+ },
+ "KE": {
+ "name": "i-Kenya"
+ },
+ "KI": {
+ "name": "i-Kiribati"
+ },
+ "XK": {
+ "name": "i-Kosovo"
+ },
+ "KW": {
+ "name": "i-Kuwait"
+ },
+ "KG": {
+ "name": "i-Kyrgyzstan"
+ },
+ "LA": {
+ "name": "i-Laos"
+ },
+ "LV": {
+ "name": "i-Latvia"
+ },
+ "LB": {
+ "name": "i-Lebanon"
+ },
+ "LS": {
+ "name": "i-Lesotho"
+ },
+ "LR": {
+ "name": "i-Liberia"
+ },
+ "LY": {
+ "name": "i-Libya"
+ },
+ "LI": {
+ "name": "i-Liechtenstein"
+ },
+ "LT": {
+ "name": "i-Lithuania"
+ },
+ "LU": {
+ "name": "i-Luxembourg"
+ },
+ "MO": {
+ "name": "i-Macau SAR China"
+ },
+ "MK": {
+ "name": "i-Macedonia"
+ },
+ "MG": {
+ "name": "i-Madagascar"
+ },
+ "MW": {
+ "name": "i-Malawi"
+ },
+ "MY": {
+ "name": "i-Malaysia"
+ },
+ "MV": {
+ "name": "i-Maldives"
+ },
+ "ML": {
+ "name": "i-Mali"
+ },
+ "MT": {
+ "name": "i-Malta"
+ },
+ "MH": {
+ "name": "i-Marshall Islands"
+ },
+ "MQ": {
+ "name": "i-Martinique"
+ },
+ "MR": {
+ "name": "i-Mauritania"
+ },
+ "MU": {
+ "name": "i-Mauritius"
+ },
+ "YT": {
+ "name": "i-Mayotte"
+ },
+ "MX": {
+ "name": "i-Mexico"
+ },
+ "FM": {
+ "name": "i-Micronesia"
+ },
+ "MD": {
+ "name": "i-Moldova"
+ },
+ "MC": {
+ "name": "i-Monaco"
+ },
+ "MN": {
+ "name": "i-Mongolia"
+ },
+ "ME": {
+ "name": "i-Montenegro"
+ },
+ "MS": {
+ "name": "i-Montserrat"
+ },
+ "MA": {
+ "name": "i-Morocco"
+ },
+ "MZ": {
+ "name": "i-Mozambique"
+ },
+ "MM": {
+ "name": "i-Myanmar (Burma)"
+ },
+ "NA": {
+ "name": "i-Namibia"
+ },
+ "NR": {
+ "name": "i-Nauru"
+ },
+ "NP": {
+ "name": "i-Nepal"
+ },
+ "NL": {
+ "name": "i-Netherlands"
+ },
+ "NC": {
+ "name": "i-New Caledonia"
+ },
+ "NZ": {
+ "name": "i-New Zealand"
+ },
+ "NI": {
+ "name": "i-Nicaragua"
+ },
+ "NE": {
+ "name": "i-Niger"
+ },
+ "NG": {
+ "name": "i-Nigeria"
+ },
+ "NU": {
+ "name": "i-Niue"
+ },
+ "NF": {
+ "name": "i-Norfolk Island"
+ },
+ "KP": {
+ "name": "i-North Korea"
+ },
+ "MP": {
+ "name": "i-Northern Mariana Islands"
+ },
+ "NO": {
+ "name": "i-Norway"
+ },
+ "OM": {
+ "name": "i-Oman"
+ },
+ "PK": {
+ "name": "i-Pakistan"
+ },
+ "PW": {
+ "name": "i-Palau"
+ },
+ "PS": {
+ "name": "i-Palestinian Territories"
+ },
+ "PA": {
+ "name": "i-Panama"
+ },
+ "PG": {
+ "name": "i-Papua New Guinea"
+ },
+ "PY": {
+ "name": "i-Paraguay"
+ },
+ "PE": {
+ "name": "i-Peru"
+ },
+ "PH": {
+ "name": "i-Philippines"
+ },
+ "PN": {
+ "name": "i-Pitcairn Islands"
+ },
+ "PL": {
+ "name": "i-Poland"
+ },
+ "PT": {
+ "name": "i-Portugal"
+ },
+ "PR": {
+ "name": "i-Puerto Rico"
+ },
+ "QA": {
+ "name": "i-Qatar"
+ },
+ "RE": {
+ "name": "i-Réunion"
+ },
+ "RO": {
+ "name": "i-Romania"
+ },
+ "RU": {
+ "name": "i-Russia"
+ },
+ "RW": {
+ "name": "i-Rwanda"
+ },
+ "BL": {
+ "name": "i-Saint Barthélemy"
+ },
+ "SH": {
+ "name": "i-Saint Helena"
+ },
+ "KN": {
+ "name": "i-Saint Kitts ne-Nevis"
+ },
+ "LC": {
+ "name": "i-Saint Lucia"
+ },
+ "MF": {
+ "name": "i-Saint Martin"
+ },
+ "PM": {
+ "name": "i-Saint Pierre kanye ne-Miquelon"
+ },
+ "VC": {
+ "name": "i-Saint Vincent ne-Grenadines"
+ },
+ "WS": {
+ "name": "i-Samoa"
+ },
+ "SM": {
+ "name": "i-San Marino"
+ },
+ "ST": {
+ "name": "i-São Tomé kanye ne-Príncipe"
+ },
+ "SA": {
+ "name": "i-Saudi Arabia"
+ },
+ "SN": {
+ "name": "i-Senegal"
+ },
+ "RS": {
+ "name": "i-Serbia"
+ },
+ "SC": {
+ "name": "i-Seychelles"
+ },
+ "SL": {
+ "name": "i-Sierra Leone"
+ },
+ "SG": {
+ "name": "i-Singapore"
+ },
+ "SX": {
+ "name": "I-Sint Maarten"
+ },
+ "SK": {
+ "name": "i-Slovakia"
+ },
+ "SI": {
+ "name": "i-Slovenia"
+ },
+ "SB": {
+ "name": "i-Solomon Islands"
+ },
+ "SO": {
+ "name": "i-Somalia"
+ },
+ "ZA": {
+ "name": "i-South Africa"
+ },
+ "GS": {
+ "name": "i-South Georgia ne-South Sandwich Islands"
+ },
+ "KR": {
+ "name": "i-South Korea"
+ },
+ "SS": {
+ "name": "i-South Sudan"
+ },
+ "ES": {
+ "name": "i-Spain"
+ },
+ "LK": {
+ "name": "i-Sri Lanka"
+ },
+ "SD": {
+ "name": "i-Sudan"
+ },
+ "SR": {
+ "name": "i-Suriname"
+ },
+ "SJ": {
+ "name": "i-Svalbard ne-Jan Mayen"
+ },
+ "SZ": {
+ "name": "i-Swaziland"
+ },
+ "SE": {
+ "name": "i-Sweden"
+ },
+ "CH": {
+ "name": "i-Switzerland"
+ },
+ "SY": {
+ "name": "i-Syria"
+ },
+ "TW": {
+ "name": "i-Taiwan"
+ },
+ "TJ": {
+ "name": "i-Tajikistan"
+ },
+ "TZ": {
+ "name": "i-Tanzania"
+ },
+ "TH": {
+ "name": "i-Thailand"
+ },
+ "TL": {
+ "name": "i-Timor-Leste"
+ },
+ "TG": {
+ "name": "i-Togo"
+ },
+ "TK": {
+ "name": "i-Tokelau"
+ },
+ "TO": {
+ "name": "i-Tonga"
+ },
+ "TT": {
+ "name": "i-Trinidad ne-Tobago"
+ },
+ "TA": {
+ "name": "i-Tristan da Cunha"
+ },
+ "TN": {
+ "name": "i-Tunisia"
+ },
+ "TR": {
+ "name": "i-Turkey"
+ },
+ "TM": {
+ "name": "i-Turkmenistan"
+ },
+ "TC": {
+ "name": "i-Turks and Caicos Islands"
+ },
+ "TV": {
+ "name": "i-Tuvalu"
+ },
+ "UM": {
+ "name": "i-U.S. Minor Outlying Islands"
+ },
+ "VI": {
+ "name": "i-U.S. Virgin Islands"
+ },
+ "UG": {
+ "name": "i-Uganda"
+ },
+ "UA": {
+ "name": "i-Ukraine"
+ },
+ "AE": {
+ "name": "i-United Arab Emirates"
+ },
+ "GB": {
+ "name": "i-United Kingdom"
+ },
+ "US": {
+ "name": "i-United States"
+ },
+ "UY": {
+ "name": "i-Uruguay"
+ },
+ "UZ": {
+ "name": "i-Uzbekistan"
+ },
+ "VU": {
+ "name": "i-Vanuatu"
+ },
+ "VA": {
+ "name": "i-Vatican City"
+ },
+ "VE": {
+ "name": "i-Venezuela"
+ },
+ "VN": {
+ "name": "i-Vietnam"
+ },
+ "WF": {
+ "name": "i-Wallis ne-Futuna"
+ },
+ "EH": {
+ "name": "i-Western Sahara"
+ },
+ "YE": {
+ "name": "i-Yemen"
+ },
+ "ZM": {
+ "name": "i-Zambia"
+ },
+ "ZW": {
+ "name": "i-Zimbabwe"
+ },
+ "GF": {
+ "name": "isi-French Guiana"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/af.json b/library/intl/resources/currency/af.json
new file mode 100644
index 000000000..b7e5c4930
--- /dev/null
+++ b/library/intl/resources/currency/af.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afgaanse afgani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanese lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algeriese dinar",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "Amerikaanse dollar",
+ "symbol": "US$"
+ },
+ "AOA": {
+ "name": "Angolese kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentynse peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armeense dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Arubaanse floryn",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australiese dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbeidjaanse manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamiaanse dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahreinse dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladesjiese taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbados-dollar",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Beliziese dollar",
+ "symbol": "BZD"
+ },
+ "BYR": {
+ "name": "Belo-Russiese roebel",
+ "symbol": "BYR"
+ },
+ "BMD": {
+ "name": "Bermuda-dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhoetanese ngoeltroem",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Boliviaanse boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnies-Herzegowiniese omskakelbare marka",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswana pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brasilliaanse reaal",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "Britse pond",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Broeneise dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgaarse lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundiese frank",
+ "symbol": "BIF"
+ },
+ "KYD": {
+ "name": "Cayman-eilande dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA frank BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA frank BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP-frank",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chileense peso",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "Colombiaanse peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comoraanse frank",
+ "symbol": "KMF"
+ },
+ "CRC": {
+ "name": "Costa Ricaanse colón",
+ "symbol": "CRC"
+ },
+ "DKK": {
+ "name": "Deense kroon",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboeti frank",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominikaanse peso",
+ "symbol": "DOP"
+ },
+ "EGP": {
+ "name": "Egiptiese pond",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrese nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Etiopiese birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland-eilande pond",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fidjiaanse dollar",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "Filippynse peso",
+ "symbol": "PHP"
+ },
+ "GMD": {
+ "name": "Gambiese dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgiese lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanese cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltarese pond",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalaanse quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinese frank",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanese dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haïtiaanse gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Hondurese lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hongaarse florint",
+ "symbol": "HUF"
+ },
+ "INR": {
+ "name": "Indiese roepee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesiese roepia",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "Irakse dinar",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "Iranse rial",
+ "symbol": "IRR"
+ },
+ "ILS": {
+ "name": "Israeliese nuwe sikkel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaikaanse dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japannese jen",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "Jemenitiese rial",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "Jordaniese dinar",
+ "symbol": "JOD"
+ },
+ "CVE": {
+ "name": "Kaap Verdiese escudo",
+ "symbol": "CVE"
+ },
+ "KHR": {
+ "name": "Kambodjaanse riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Kanadese dollar",
+ "symbol": "CA$"
+ },
+ "QAR": {
+ "name": "Katarrese rial",
+ "symbol": "QAR"
+ },
+ "KZT": {
+ "name": "Kazakse tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Keniaanse sjieling",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "Kirgisiese som",
+ "symbol": "KGS"
+ },
+ "KWD": {
+ "name": "Koeweitse dinar",
+ "symbol": "KWD"
+ },
+ "CDF": {
+ "name": "Kongolese frank",
+ "symbol": "CDF"
+ },
+ "HRK": {
+ "name": "Kroatiese kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Kubaanse omskakelbare peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Kubaanse peso",
+ "symbol": "CUP"
+ },
+ "LAK": {
+ "name": "Laosiaanse kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese pond",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberiese dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libiese dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Litause litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macaose pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedoniese denar",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "Malawiese kwacha",
+ "symbol": "MWK"
+ },
+ "MVR": {
+ "name": "Malediviese rufia",
+ "symbol": "MVR"
+ },
+ "MYR": {
+ "name": "Maleisiese ringgit",
+ "symbol": "MYR"
+ },
+ "MGA": {
+ "name": "Malgassiese ariary",
+ "symbol": "MGA"
+ },
+ "MAD": {
+ "name": "Marokkaanse dirham",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "Mauritaniese ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritiaanse rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Meksikaanse peso",
+ "symbol": "MXN"
+ },
+ "MMK": {
+ "name": "Mianmese kyat",
+ "symbol": "MMK"
+ },
+ "MDL": {
+ "name": "Moldowiese leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongoolse toegrik",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "Mosambiekse metical",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "Namibiese dollar",
+ "symbol": "NAD"
+ },
+ "ANG": {
+ "name": "Nederlands-Antilliaanse gulde",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "Nepalese roepee",
+ "symbol": "NPR"
+ },
+ "NIO": {
+ "name": "Nicaraguaanse córdoba",
+ "symbol": "NIO"
+ },
+ "NZD": {
+ "name": "Nieu-Seeland dollar",
+ "symbol": "NZ$"
+ },
+ "NGN": {
+ "name": "Nigeriese naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "Noord-Koreaanse won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Noorse kroon",
+ "symbol": "NOK"
+ },
+ "TWD": {
+ "name": "Nuwe Taiwanese dollar",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "Oekraïnse hriwna",
+ "symbol": "UAH"
+ },
+ "UZS": {
+ "name": "Oezbekiese som",
+ "symbol": "UZS"
+ },
+ "OMR": {
+ "name": "Omaanse rial",
+ "symbol": "OMR"
+ },
+ "XCD": {
+ "name": "Oos-Karibbiese dollar",
+ "symbol": "EC$"
+ },
+ "PKR": {
+ "name": "Pakistanse roepee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamese balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papoea-Nieu-Guinese kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguaanse guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruaanse nuwe sol",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "Poolse zloty",
+ "symbol": "PLN"
+ },
+ "RON": {
+ "name": "Roemeense leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russiese roebel",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandiese frank",
+ "symbol": "RWF"
+ },
+ "SBD": {
+ "name": "Salomonseilande dollar",
+ "symbol": "SBD"
+ },
+ "WST": {
+ "name": "Samoaanse tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé en Príncipe dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saoedi-Arabiese riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbiese dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellese rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leoniese leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapoer dollar",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "Sint Helena pond",
+ "symbol": "SHP"
+ },
+ "SYP": {
+ "name": "Siriese pond",
+ "symbol": "SYP"
+ },
+ "CNY": {
+ "name": "Sjinese joean renminbi",
+ "symbol": "CNÂ¥"
+ },
+ "SDG": {
+ "name": "Soedannese pond",
+ "symbol": "SDG"
+ },
+ "SOS": {
+ "name": "Somaliese sjieling",
+ "symbol": "SOS"
+ },
+ "LKR": {
+ "name": "Sri Lankaanse roepee",
+ "symbol": "LKR"
+ },
+ "ZAR": {
+ "name": "Suid-Afrikaanse rand",
+ "symbol": "R"
+ },
+ "KRW": {
+ "name": "Suid-Koreaanse won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "Suid-Soedanese pond",
+ "symbol": "SSP"
+ },
+ "SRD": {
+ "name": "Surinaamse dollar",
+ "symbol": "SRD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SZL": {
+ "name": "Swazilandse lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Sweedse kroon",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Switserse frank",
+ "symbol": "CHF"
+ },
+ "TJS": {
+ "name": "Tadjikse roebel",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzaniese sjieling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thaise baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongaanse pa’anga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad en Tobago dollar",
+ "symbol": "TTD"
+ },
+ "CZK": {
+ "name": "Tsjeggiese kroon",
+ "symbol": "CZK"
+ },
+ "TND": {
+ "name": "Tunisiese dinar",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "Turkmeense manat",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "Turkse lier",
+ "symbol": "TRY"
+ },
+ "UGX": {
+ "name": "Ugandese sjieling",
+ "symbol": "UGX"
+ },
+ "UYU": {
+ "name": "Uruguaanse peso",
+ "symbol": "UYU"
+ },
+ "VUV": {
+ "name": "Vanuatuse vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezolaanse bolivar",
+ "symbol": "VEF"
+ },
+ "AED": {
+ "name": "Verenigde Arabiese Emirate dirham",
+ "symbol": "AED"
+ },
+ "VND": {
+ "name": "Viëtnamese dong",
+ "symbol": "â‚«"
+ },
+ "ISK": {
+ "name": "Yslandse kroon",
+ "symbol": "ISK"
+ },
+ "ZMW": {
+ "name": "Zambiese kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/agq.json b/library/intl/resources/currency/agq.json
new file mode 100644
index 000000000..3e769825f
--- /dev/null
+++ b/library/intl/resources/currency/agq.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ÀlÇalè è Màlàgasì",
+ "symbol": "MGA"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Bîi è Etyǒkpìa",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "EGP": {
+ "name": "Bɔ̀ŋ è Edzì",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Bɔ̀ŋ è Sɛ̀n Èlenà",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Bɔ̀ŋ è Sùdànê",
+ "symbol": "SDG"
+ },
+ "GBP": {
+ "name": "Bɔ̀ŋ Sɨ̀telè è Bèletì",
+ "symbol": "£"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "XOF": {
+ "name": "CFA Fàlâŋ BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Fàlâŋ BEAC",
+ "symbol": "FCFA"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dàlasì è Gambìa",
+ "symbol": "GMD"
+ },
+ "MAD": {
+ "name": "Dilàm è Mòlokò",
+ "symbol": "MAD"
+ },
+ "AED": {
+ "name": "Dilàm è Yùnaetɛ Alab Emelɛ̀",
+ "symbol": "AED"
+ },
+ "DZD": {
+ "name": "Dinà è Àdzɛlìa",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinà è Balae",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinà è Lebìa",
+ "symbol": "LYD"
+ },
+ "TND": {
+ "name": "Dinà è Tùwneshìa",
+ "symbol": "TND"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "STD": {
+ "name": "Dɔbàlà è Sàwu Tɔ̀me à Pèlènsipè",
+ "symbol": "STD"
+ },
+ "CAD": {
+ "name": "Dɔlà è Kanadà",
+ "symbol": "CA$"
+ },
+ "NAD": {
+ "name": "Dɔlà è Nàmibìa",
+ "symbol": "NAD"
+ },
+ "USD": {
+ "name": "Dɔlà è US",
+ "symbol": "US$"
+ },
+ "AUD": {
+ "name": "Dɔlà e Ùsɨ̀tɛ̀lɛlìa",
+ "symbol": "A$"
+ },
+ "LRD": {
+ "name": "Dɔlà Làebɛlìa",
+ "symbol": "LRD"
+ },
+ "BIF": {
+ "name": "Fàlâŋ è Bùlundì",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Fàlâŋ è Dzìbutì",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Fàlâŋ è Komolìa",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Fàlâŋ è Kuŋgùlê",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Fàlâŋ è Lùwandà",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Fàlâŋ è Sues",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "JPY": {
+ "name": "Ghɨ̂n Dzàkpànê",
+ "symbol": "JPÂ¥"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "CVE": {
+ "name": "Kàbòvàdianù è Èsùkudò",
+ "symbol": "CVE"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "BWP": {
+ "name": "Kpuwlà è Botɨshǔanà",
+ "symbol": "BWP"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kwachà è Màlawè",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwachà è Zambìa",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanzà è Àŋgolà",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "ZAR": {
+ "name": "Lân è Afɨlekà ghɨ Emàm ghò",
+ "symbol": "ZAR"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SZL": {
+ "name": "Lèlàŋgenè",
+ "symbol": "SZL"
+ },
+ "SAR": {
+ "name": "Leyà è Sàwudì",
+ "symbol": "SAR"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Lɔtì Lèsutù",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "INR": {
+ "name": "Lukpì è Endìa",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Lukpìi è Mùleshòs",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Lukpìi è Sɛchɛ̀lɛ̀",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Lyɔ̂ŋ",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naelà è Gɨ̀anyɨ",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakafa è Èletɨ̀làe",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "Shwɨlà è Sùmalìa",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Shwɨlà è Tàanzanyìa",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Shwɨlà è Yùgandà",
+ "symbol": "UGX"
+ },
+ "KES": {
+ "name": "Shwɨlà tɨ Kenyà",
+ "symbol": "KES"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ùgueya è Mùlètenyìa",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "EUR": {
+ "name": "Yulù",
+ "symbol": "€"
+ },
+ "CNY": {
+ "name": "Yùwân Lèmembi è Chaenî",
+ "symbol": "CNÂ¥"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ak.json b/library/intl/resources/currency/ak.json
new file mode 100644
index 000000000..6c8a24eaf
--- /dev/null
+++ b/library/intl/resources/currency/ak.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ZAR": {
+ "name": "Afrika Anaafo Rand",
+ "symbol": "ZAR"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "USD": {
+ "name": "Amɛrika Dɔla",
+ "symbol": "US$"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "Angola Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BHD": {
+ "name": "Baren Dina",
+ "symbol": "BHD"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BWP": {
+ "name": "Botswana Pula",
+ "symbol": "BWP"
+ },
+ "GBP": {
+ "name": "Breten Pɔn",
+ "symbol": "£"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BIF": {
+ "name": "Burundi Frank",
+ "symbol": "BIF"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CHF": {
+ "name": "CHF",
+ "symbol": "CHF"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "EGP": {
+ "name": "Egypt Pɔn",
+ "symbol": "EGP"
+ },
+ "AED": {
+ "name": "Æmirete Arab NkabÉ”mu Deram",
+ "symbol": "AED"
+ },
+ "ERN": {
+ "name": "Æretereya Nakfa",
+ "symbol": "ERN"
+ },
+ "CVE": {
+ "name": "Æskudo",
+ "symbol": "CVE"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GMD": {
+ "name": "Gambia Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghana Sidi",
+ "symbol": "GH₵"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "JPY": {
+ "name": "Gyapan Yɛn",
+ "symbol": "JPÂ¥"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "DJF": {
+ "name": "Gyebuti Frank",
+ "symbol": "DJF"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "India Rupi",
+ "symbol": "₹"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "EUR": {
+ "name": "Iro",
+ "symbol": "€"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "ETB": {
+ "name": "Itiopia Bir",
+ "symbol": "ETB"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "CAD": {
+ "name": "Kanada Dɔla",
+ "symbol": "CA$"
+ },
+ "KES": {
+ "name": "Kenya Hyelen",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "Komoro Frank",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Kongo Frank",
+ "symbol": "CDF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LRD": {
+ "name": "Laeberia Dɔla",
+ "symbol": "LRD"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leone",
+ "symbol": "SLL"
+ },
+ "LSL": {
+ "name": "Lesoto Loti",
+ "symbol": "LSL"
+ },
+ "LYD": {
+ "name": "Libya Dina",
+ "symbol": "LYD"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MGA": {
+ "name": "Madagasi Frank",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawi Kwacha",
+ "symbol": "MWK"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MAD": {
+ "name": "Moroko Diram",
+ "symbol": "MAD"
+ },
+ "MUR": {
+ "name": "Mɔrehyeɔs Rupi",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "Mɔretenia Ouguiya",
+ "symbol": "MRO"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naegyeria Naira",
+ "symbol": "NGN"
+ },
+ "NAD": {
+ "name": "Namibia Dɔla",
+ "symbol": "NAD"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "DZD": {
+ "name": "Ɔlgyeria Dina",
+ "symbol": "DZD"
+ },
+ "AUD": {
+ "name": "Ɔstrelia Dɔla",
+ "symbol": "A$"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RWF": {
+ "name": "Rewanda Frank",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "STD": {
+ "name": "Sao Tome ne Principe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "XAF": {
+ "name": "Sefa",
+ "symbol": "FCFA"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SCR": {
+ "name": "Seyhyɛls Rupi",
+ "symbol": "SCR"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "Somailia Hyelen",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SHP": {
+ "name": "St Helena Pɔn",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Sudan Dina",
+ "symbol": "SDG"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "TZS": {
+ "name": "Tanzania Hyelen",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisia Dina",
+ "symbol": "TND"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "Uganda Hyelen",
+ "symbol": "UGX"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "ZMW": {
+ "name": "Zambia Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/am.json b/library/intl/resources/currency/am.json
new file mode 100644
index 000000000..1b86003b4
--- /dev/null
+++ b/library/intl/resources/currency/am.json
@@ -0,0 +1,634 @@
+{
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "LTL": {
+ "name": "ሊቱዌንያን ሊታስ",
+ "symbol": "LTL"
+ },
+ "MMK": {
+ "name": "áˆá‹«áŠ•áˆ› ክያት",
+ "symbol": "MMK"
+ },
+ "MDL": {
+ "name": "ሞáˆá‹¶á‰«áŠ• ሊኡ",
+ "symbol": "MDL"
+ },
+ "XPF": {
+ "name": "ሲ ኤá á’ áራንክ",
+ "symbol": "CFPF"
+ },
+ "WST": {
+ "name": "ሳሞአን ታላ",
+ "symbol": "WST"
+ },
+ "XOF": {
+ "name": "ሴኤáአ áራንክ ቤሴእአኦ",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "ሴኤáአ áራንክ ቤእአሴ",
+ "symbol": "FCFA"
+ },
+ "BTN": {
+ "name": "ብáˆá‰³áŠ’ዠንጉáˆá‰µáˆ¨áˆ",
+ "symbol": "BTN"
+ },
+ "TMT": {
+ "name": "ቱርክሜኒስታኒ ማናት",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "ቶንጋን á“’አንጋ",
+ "symbol": "TOP"
+ },
+ "CZK": {
+ "name": "ቼክ ሪáብሊክ ኮሩና",
+ "symbol": "CZK"
+ },
+ "ANG": {
+ "name": "ኔዘርላንድስ አንቲሊአን ጊáˆá‹°áˆ­",
+ "symbol": "ANG"
+ },
+ "AWG": {
+ "name": "አሩባን áሎሪን",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "የáˆáŠ•áŒ‹áˆª áŽáˆªáŠ•á‰µ",
+ "symbol": "HUF"
+ },
+ "HNL": {
+ "name": "የሃንዱራ ሌáˆá“አይራ",
+ "symbol": "HNL"
+ },
+ "HTG": {
+ "name": "የሃያቲ ጓርዴ",
+ "symbol": "HTG"
+ },
+ "HKD": {
+ "name": "የሆንáŒáŠ®áŠ•áŒ ዶላር",
+ "symbol": "HK$"
+ },
+ "LYD": {
+ "name": "የሊቢያ ዲናር",
+ "symbol": "LYD"
+ },
+ "LBP": {
+ "name": "የሊባኖስ á“á‹áŠ•á‹µ",
+ "symbol": "LBP"
+ },
+ "LAK": {
+ "name": "የላኦቲ ኪá•",
+ "symbol": "LAK"
+ },
+ "LRD": {
+ "name": "የላይቤሪያ ዶላር",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "የሌሶቶ ሎቲ",
+ "symbol": "LSL"
+ },
+ "INR": {
+ "name": "የሕንድ ሩá’",
+ "symbol": "₹"
+ },
+ "MWK": {
+ "name": "የማላዊ ኩዋቻ",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "የማሌዥያ ሪንጊት",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "የማáˆá‹²á‰« ሩáŠá‹«",
+ "symbol": "MVR"
+ },
+ "MOP": {
+ "name": "የማካኔዠá“ታካ",
+ "symbol": "MOP"
+ },
+ "MGA": {
+ "name": "የማደጋስካር ማላጋስይ አሪያርይ",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "የሜቆድንያ ዲናር",
+ "symbol": "MKD"
+ },
+ "MXN": {
+ "name": "የሜክሲኮ á”ሶ",
+ "symbol": "MX$"
+ },
+ "XCD": {
+ "name": "የáˆá‹•áˆ«á‰¥ ካሪብያን ዶላር",
+ "symbol": "EC$"
+ },
+ "MUR": {
+ "name": "የሞሪሸስ ሩá’",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "የሞሪቴኒያ ኦá‹áŒ‰á‹«",
+ "symbol": "MRO"
+ },
+ "MAD": {
+ "name": "የሞሮኮ ዲርሀáˆ",
+ "symbol": "MAD"
+ },
+ "MNT": {
+ "name": "የሞንጎሊያን ቱáŒáˆªáŠ­",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "የሞዛáˆá‰¢áŠ­ ሜቲካáˆ",
+ "symbol": "MZN"
+ },
+ "RUB": {
+ "name": "የሩስያ ሩብáˆ",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "የሩዋንዳ áራንክ",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "የሮማኒያ ለá‹",
+ "symbol": "RON"
+ },
+ "SBD": {
+ "name": "የሰለሞን ደሴቶች ዶላር",
+ "symbol": "SBD"
+ },
+ "KPW": {
+ "name": "የሰሜን ኮሪያ ዎን",
+ "symbol": "KPW"
+ },
+ "RSD": {
+ "name": "የሰርቢያ ዲናር",
+ "symbol": "RSD"
+ },
+ "SRD": {
+ "name": "የሰርናሜዠዶላር",
+ "symbol": "SRD"
+ },
+ "SDG": {
+ "name": "የሱዳን ዲናር",
+ "symbol": "SDG"
+ },
+ "LKR": {
+ "name": "የሲሪላንካ ሩá’",
+ "symbol": "LKR"
+ },
+ "SYP": {
+ "name": "የሲሪያ á“á‹áŠ•á‹µ",
+ "symbol": "SYP"
+ },
+ "SCR": {
+ "name": "የሲሼሠሩá’",
+ "symbol": "SCR"
+ },
+ "SGD": {
+ "name": "የሲንጋá–ር ዶላር",
+ "symbol": "SGD"
+ },
+ "STD": {
+ "name": "የሳኦ ቶመ እና á•áˆªáŠ•áˆ²á ዶብራ",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "የሳá‹á‹² ሪያáˆ",
+ "symbol": "SAR"
+ },
+ "SLL": {
+ "name": "የሴራሊዎን ሊዎን",
+ "symbol": "SLL"
+ },
+ "SHP": {
+ "name": "የሴይንት ሔሌና á“á‹áŠ•á‹µ",
+ "symbol": "SHP"
+ },
+ "CHF": {
+ "name": "የስዊስ áራንክ",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "የስዊድን ክሮና",
+ "symbol": "SEK"
+ },
+ "SZL": {
+ "name": "የስዋዚላንድ ሊላንገኒ",
+ "symbol": "SZL"
+ },
+ "SOS": {
+ "name": "የሶማሌ ሺሊንáŒ",
+ "symbol": "SOS"
+ },
+ "BGN": {
+ "name": "የቡáˆáŒ‹áˆªá‹« ሌቭ",
+ "symbol": "BGN"
+ },
+ "BSD": {
+ "name": "የባሃማስ ዶላር",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "የባርቤዶስ ዶላር",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "የባንáŒáˆ‹á‹²áˆ½ ታካ",
+ "symbol": "BDT"
+ },
+ "BHD": {
+ "name": "የባኽሬን ዲናር",
+ "symbol": "BHD"
+ },
+ "BZD": {
+ "name": "የቤሊዠዶላር",
+ "symbol": "BZD"
+ },
+ "BYR": {
+ "name": "የቤላሩስያ ሩብáˆ",
+ "symbol": "BYR"
+ },
+ "BMD": {
+ "name": "የቤርሙዳ ዶላር",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "የብሩኔ ዶላር",
+ "symbol": "BND"
+ },
+ "BIF": {
+ "name": "የብሩንዲ áራንክ",
+ "symbol": "BIF"
+ },
+ "BRL": {
+ "name": "የብራዚሠሪáˆ",
+ "symbol": "R$"
+ },
+ "BOB": {
+ "name": "የቦሊቪያ ቦሊቪያኖ",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "የቦስኒያ ሄርዞጎቪና የሚመáŠá‹˜áˆ­ ማርክ",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "የቦትስዋና á‘ላ",
+ "symbol": "BWP"
+ },
+ "VUV": {
+ "name": "የቫንዋንቱ ቫቱ",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "የቬንá‹á‹Œáˆ‹ ቦሊቫር",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "የቭየትናሠዶንáŒ",
+ "symbol": "â‚«"
+ },
+ "AED": {
+ "name": "የተባበሩት የአረብ ኤáˆáˆ¨á‰µáˆµ ዲርሀáˆ",
+ "symbol": "AED"
+ },
+ "TRY": {
+ "name": "የቱርክ ሊራ",
+ "symbol": "TRY"
+ },
+ "TND": {
+ "name": "የቱኒዚያ ዲናር",
+ "symbol": "TND"
+ },
+ "TZS": {
+ "name": "የታንዛኒያ ሺሊንáŒ",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "የታይላንድ ባህት",
+ "symbol": "฿"
+ },
+ "TJS": {
+ "name": "የታጂክስታን ሶሞኒ",
+ "symbol": "TJS"
+ },
+ "TTD": {
+ "name": "የትሪንዳድ እና ቶቤጎዶላር",
+ "symbol": "TTD"
+ },
+ "CLP": {
+ "name": "የቺሊ á”ሶ",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "የቻይና የን",
+ "symbol": "CNÂ¥"
+ },
+ "NIO": {
+ "name": "የኒካራጓ ኮርዶባ",
+ "symbol": "NIO"
+ },
+ "NZD": {
+ "name": "የኒá‹á‹šáˆ‹áŠ•á‹µ ዶላር",
+ "symbol": "NZ$"
+ },
+ "NAD": {
+ "name": "የናሚቢያ ዶላር",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "የናይጄሪያ ናይራ",
+ "symbol": "NGN"
+ },
+ "NPR": {
+ "name": "የኔá“ሠሩá’",
+ "symbol": "NPR"
+ },
+ "NOK": {
+ "name": "የኖርዌይ ክሮን",
+ "symbol": "NOK"
+ },
+ "ALL": {
+ "name": "የአáˆá‰£áŠ•á‹« ሌክ",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "የአáˆáŒ„ሪያ ዲናር",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "የአሜሪካን ዶላር",
+ "symbol": "US$"
+ },
+ "AMD": {
+ "name": "የአርመን ድራáˆ",
+ "symbol": "AMD"
+ },
+ "ARS": {
+ "name": "የአርጀንቲና á”ሶ",
+ "symbol": "ARS"
+ },
+ "AOA": {
+ "name": "የአንጎላ ኩዋንዛ",
+ "symbol": "AOA"
+ },
+ "AUD": {
+ "name": "የአá‹áˆµá‰µáˆ«áˆŠá‹« ዶላር",
+ "symbol": "AU$"
+ },
+ "AZN": {
+ "name": "የአዛርባጃን ማናት",
+ "symbol": "AZN"
+ },
+ "ISK": {
+ "name": "የአይስላንድ ክሮና",
+ "symbol": "ISK"
+ },
+ "TWD": {
+ "name": "የአዲሷ ታይዋን ዶላር",
+ "symbol": "NT$"
+ },
+ "AFN": {
+ "name": "የአáጋን አáጋኒ",
+ "symbol": "AFN"
+ },
+ "UYU": {
+ "name": "የኡራጓይ á”ሶ",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "የኡá‹á”ኪስታን ሶáˆ",
+ "symbol": "UZS"
+ },
+ "IQD": {
+ "name": "የኢራቅ ዲናር",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "የኢራን ሪአáˆ",
+ "symbol": "IRR"
+ },
+ "ETB": {
+ "name": "የኢትዮጵያ ብር",
+ "symbol": "ብር"
+ },
+ "IDR": {
+ "name": "የኢንዶኔዥያ ሩá’ሃ",
+ "symbol": "IDR"
+ },
+ "ERN": {
+ "name": "የኤርትራ ናቅá‹",
+ "symbol": "ERN"
+ },
+ "ILS": {
+ "name": "የእስራኤሠአዲስ ሽቅáˆ",
+ "symbol": "₪"
+ },
+ "GBP": {
+ "name": "የእንáŒáˆŠá‹ á“á‹áŠ•á‹µ ስተርሊንáŒ",
+ "symbol": "£"
+ },
+ "OMR": {
+ "name": "የኦማን ሪአáˆ",
+ "symbol": "OMR"
+ },
+ "CUC": {
+ "name": "የኩባ የሚመáŠá‹˜áˆ­ á”ሶ",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "የኩባ á”ሶ",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "የኩዌት ዲናር",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "የኪርጊስታን ሶáˆ",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "የካáˆá‰¦á‹²á‹« ሬáˆ",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "የካናዳ ዶላር",
+ "symbol": "CA$"
+ },
+ "KZT": {
+ "name": "የካዛኪስታን ተንጌ",
+ "symbol": "KZT"
+ },
+ "KYD": {
+ "name": "የካይማን ደሴቶች ዶላር",
+ "symbol": "KYD"
+ },
+ "KES": {
+ "name": "የኬኒያ ሺሊንáŒ",
+ "symbol": "KES"
+ },
+ "CVE": {
+ "name": "የኬᕠቫርዲ ኤስኩዶ",
+ "symbol": "CVE"
+ },
+ "HRK": {
+ "name": "የክሮሽያ ኩና",
+ "symbol": "HRK"
+ },
+ "COP": {
+ "name": "የኮሎáˆá‰¢á‹« á”ሶ",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "የኮሞሮ áራንክ",
+ "symbol": "KMF"
+ },
+ "CRC": {
+ "name": "የኮስታሪካ ኮሎን",
+ "symbol": "CRC"
+ },
+ "CDF": {
+ "name": "የኮንጠáራንክ ኮንáŒáˆŒá‹",
+ "symbol": "CDF"
+ },
+ "QAR": {
+ "name": "የኳታር ሪአáˆ",
+ "symbol": "QAR"
+ },
+ "ZMW": {
+ "name": "የዛáˆá‰¢á‹« ክዋቻ",
+ "symbol": "ZMW"
+ },
+ "YER": {
+ "name": "የየመን ሪአáˆ",
+ "symbol": "YER"
+ },
+ "UAH": {
+ "name": "የዩክሬን ሀሪይቭኒአ",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "የዩጋንዳ ሺሊንáŒ",
+ "symbol": "UGX"
+ },
+ "SSP": {
+ "name": "የደቡብ ሱዳን á“á‹áŠ•á‹µ",
+ "symbol": "SSP"
+ },
+ "ZAR": {
+ "name": "የደቡብ አáሪካ ራንድ",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "የደቡብ ኮሪያ ዎን",
+ "symbol": "â‚©"
+ },
+ "DKK": {
+ "name": "የዴንማርክ ክሮን",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "የዶሚኒክ á”ሶ",
+ "symbol": "DOP"
+ },
+ "JMD": {
+ "name": "የጃማይካ ዶላር",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "የጃá“ን የን",
+ "symbol": "JPÂ¥"
+ },
+ "DJF": {
+ "name": "የጅቡቲ áራንክ",
+ "symbol": "DJF"
+ },
+ "JOD": {
+ "name": "የጆርዳን ዲናር",
+ "symbol": "JOD"
+ },
+ "GEL": {
+ "name": "የጆርጅያ ላሪ",
+ "symbol": "GEL"
+ },
+ "GYD": {
+ "name": "የጉየና ዶላር",
+ "symbol": "GYD"
+ },
+ "GNF": {
+ "name": "የጊኒ áራንክ",
+ "symbol": "GNF"
+ },
+ "GMD": {
+ "name": "የጋáˆá‰¢á‹« ዳላሲ",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "የጋና ሲዲ",
+ "symbol": "GHS"
+ },
+ "EGP": {
+ "name": "የáŒá‰¥áŒ½ á“á‹áŠ•á‹µ",
+ "symbol": "EGP"
+ },
+ "PHP": {
+ "name": "የáŠáˆŠá’ንስ á”ሶ",
+ "symbol": "PHP"
+ },
+ "FJD": {
+ "name": "የáŠáŒ‚ ዶላር",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "የáŽáŠ­áˆ‹áŠ•á‹µ ደሴቶች á“á‹áŠ•á‹µ",
+ "symbol": "FKP"
+ },
+ "PYG": {
+ "name": "የá“ራጓይ ጉአራኒ",
+ "symbol": "PYG"
+ },
+ "PKR": {
+ "name": "የá“ኪስታን ሩá’",
+ "symbol": "PKR"
+ },
+ "PGK": {
+ "name": "የá“á•á‹‹ ኒዠጊኒ ኪና",
+ "symbol": "PGK"
+ },
+ "PEN": {
+ "name": "የá”ሩቪያ ኑኤቮ ሶáˆ",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "የá–ላንድ á‹áˆŽá‰²",
+ "symbol": "PLN"
+ },
+ "EUR": {
+ "name": "ዩሮ",
+ "symbol": "€"
+ },
+ "GIP": {
+ "name": "ጂብራáˆá‰°áˆ­ á“á‹áŠ•á‹µ",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "ጓቲማላን ኩቲዛáˆ",
+ "symbol": "GTQ"
+ },
+ "PAB": {
+ "name": "á“ናማኒአን ባáˆá‰¦áŠ ",
+ "symbol": "PAB"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ar.json b/library/intl/resources/currency/ar.json
new file mode 100644
index 000000000..d8d56ee12
--- /dev/null
+++ b/library/intl/resources/currency/ar.json
@@ -0,0 +1,634 @@
+{
+ "MGA": {
+ "name": "أرياري مدغشقر",
+ "symbol": "MGA"
+ },
+ "AFN": {
+ "name": "Ø£Ùغاني",
+ "symbol": "AFN"
+ },
+ "MRO": {
+ "name": "أوقية موريتانية",
+ "symbol": "Ø£.Ù….â€"
+ },
+ "CVE": {
+ "name": "اسكودو الرأس الخضراء",
+ "symbol": "CVE"
+ },
+ "MOP": {
+ "name": "باتاكا ماكاوي",
+ "symbol": "MOP"
+ },
+ "THB": {
+ "name": "باخت تايلاندي",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "بالبوا بنمي",
+ "symbol": "PAB"
+ },
+ "TOP": {
+ "name": "بانغا تونغا",
+ "symbol": "TOP"
+ },
+ "BWP": {
+ "name": "بولا بتسواني",
+ "symbol": "BWP"
+ },
+ "VEF": {
+ "name": "بوليÙار Ùنزويلي",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "بوليÙيانو بوليÙÙŠ",
+ "symbol": "BOB"
+ },
+ "ETB": {
+ "name": "بير أثيوبي",
+ "symbol": "ETB"
+ },
+ "ARS": {
+ "name": "بيزو أرجنتيني",
+ "symbol": "ARS"
+ },
+ "DOP": {
+ "name": "بيزو الدومنيكان",
+ "symbol": "DOP"
+ },
+ "UYU": {
+ "name": "بيزو اوروغواي",
+ "symbol": "UYU"
+ },
+ "CLP": {
+ "name": "بيزو شيلي",
+ "symbol": "CLP"
+ },
+ "PHP": {
+ "name": "بيزو Ùلبيني",
+ "symbol": "PHP"
+ },
+ "CUP": {
+ "name": "بيزو كوبي",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "بيزو كوبي قابل للتحويل",
+ "symbol": "CUC"
+ },
+ "COP": {
+ "name": "بيزو كولومبي",
+ "symbol": "COP"
+ },
+ "MXN": {
+ "name": "بيزو مكسيكي",
+ "symbol": "MX$"
+ },
+ "BDT": {
+ "name": "تاكا بنجلاديشي",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "تالا ساموا",
+ "symbol": "WST"
+ },
+ "MNT": {
+ "name": "توغروغ منغولي",
+ "symbol": "MNT"
+ },
+ "KZT": {
+ "name": "تينغ كازاخستاني",
+ "symbol": "KZT"
+ },
+ "LBP": {
+ "name": "جنية لبناني",
+ "symbol": "Ù„.Ù„.â€"
+ },
+ "GBP": {
+ "name": "جنيه إسترليني",
+ "symbol": "£"
+ },
+ "GIP": {
+ "name": "جنيه جبل طارق",
+ "symbol": "GIP"
+ },
+ "FKP": {
+ "name": "جنيه جزر Ùوكلاند",
+ "symbol": "FKP"
+ },
+ "SSP": {
+ "name": "جنيه جنوب السودان",
+ "symbol": "ج.ج.س."
+ },
+ "SHP": {
+ "name": "جنيه سانت هيلين",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "جنيه سوداني",
+ "symbol": "ج.س."
+ },
+ "EGP": {
+ "name": "جنيه مصري",
+ "symbol": "ج.Ù….â€"
+ },
+ "PYG": {
+ "name": "جواراني باراجواي",
+ "symbol": "PYG"
+ },
+ "HTG": {
+ "name": "جوردى هايتي",
+ "symbol": "HTG"
+ },
+ "AMD": {
+ "name": "درام أرميني",
+ "symbol": "AMD"
+ },
+ "AED": {
+ "name": "درهم إماراتي",
+ "symbol": "د.Ø¥.â€"
+ },
+ "MAD": {
+ "name": "درهم مغربي",
+ "symbol": "د.Ù….â€"
+ },
+ "GMD": {
+ "name": "دلاسي جامبي",
+ "symbol": "GMD"
+ },
+ "STD": {
+ "name": "دوبرا ساو تومي وبرينسيبي",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "دولار أسترالي",
+ "symbol": "AU$"
+ },
+ "USD": {
+ "name": "دولار أمريكي",
+ "symbol": "US$"
+ },
+ "BSD": {
+ "name": "دولار باهامي",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "دولار بربادوسي",
+ "symbol": "BBD"
+ },
+ "BMD": {
+ "name": "دولار برمودي",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "دولار بروناي",
+ "symbol": "BND"
+ },
+ "BZD": {
+ "name": "دولار بليزي",
+ "symbol": "BZD"
+ },
+ "TWD": {
+ "name": "دولار تايواني",
+ "symbol": "NT$"
+ },
+ "TTD": {
+ "name": "دولار ترينداد وتوباجو",
+ "symbol": "TTD"
+ },
+ "JMD": {
+ "name": "دولار جامايكي",
+ "symbol": "JMD"
+ },
+ "SBD": {
+ "name": "دولار جزر سليمان",
+ "symbol": "SBD"
+ },
+ "KYD": {
+ "name": "دولار جزر كيمن",
+ "symbol": "KYD"
+ },
+ "ZWL": {
+ "name": "دولار زمبابوي 2009",
+ "symbol": "ZWL"
+ },
+ "SGD": {
+ "name": "دولار سنغاÙوري",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "دولار سورينامي",
+ "symbol": "SRD"
+ },
+ "XCD": {
+ "name": "دولار شرق الكاريبي",
+ "symbol": "EC$"
+ },
+ "GYD": {
+ "name": "دولار غيانا",
+ "symbol": "GYD"
+ },
+ "FJD": {
+ "name": "دولار Ùيجي",
+ "symbol": "FJD"
+ },
+ "CAD": {
+ "name": "دولار كندي",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "دولار ليبيري",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "دولار ناميبي",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "دولار نيوزيلندي",
+ "symbol": "NZ$"
+ },
+ "HKD": {
+ "name": "دولار هونج كونج",
+ "symbol": "HK$"
+ },
+ "VND": {
+ "name": "دونج Ùيتنامي",
+ "symbol": "â‚«"
+ },
+ "JOD": {
+ "name": "دينار أردني",
+ "symbol": "د.Ø£.â€"
+ },
+ "BHD": {
+ "name": "دينار بحريني",
+ "symbol": "د.ب.â€"
+ },
+ "DZD": {
+ "name": "دينار جزائري",
+ "symbol": "د.ج.â€"
+ },
+ "RSD": {
+ "name": "دينار صربي",
+ "symbol": "RSD"
+ },
+ "IQD": {
+ "name": "دينار عراقي",
+ "symbol": "د.ع.â€"
+ },
+ "KWD": {
+ "name": "دينار كويتي",
+ "symbol": "د.Ùƒ.â€"
+ },
+ "LYD": {
+ "name": "دينار ليبي",
+ "symbol": "د.Ù„.â€"
+ },
+ "MKD": {
+ "name": "دينار مقدوني",
+ "symbol": "MKD"
+ },
+ "TND": {
+ "name": "دينارتونسي",
+ "symbol": "د.ت.â€"
+ },
+ "ZAR": {
+ "name": "راند جنوب Ø£Ùريقيا",
+ "symbol": "ZAR"
+ },
+ "BYR": {
+ "name": "روبل بيلاروسي",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "روبل روسي",
+ "symbol": "RUB"
+ },
+ "IDR": {
+ "name": "روبية إندونيسية",
+ "symbol": "ر.إن."
+ },
+ "PKR": {
+ "name": "روبية باكستاني",
+ "symbol": "ر.ب."
+ },
+ "LKR": {
+ "name": "روبية سريلانكية",
+ "symbol": "LKR"
+ },
+ "SCR": {
+ "name": "روبية سيشيلية",
+ "symbol": "SCR"
+ },
+ "MUR": {
+ "name": "روبية موريشيوسية",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "روبية نيبالي",
+ "symbol": "NPR"
+ },
+ "INR": {
+ "name": "روبيه هندي",
+ "symbol": "ر.Ù‡.â€"
+ },
+ "MVR": {
+ "name": "روÙيه جزر المالديÙ",
+ "symbol": "MVR"
+ },
+ "IRR": {
+ "name": "ريال إيراني",
+ "symbol": "ر.إ."
+ },
+ "BRL": {
+ "name": "ريال برازيلي",
+ "symbol": "R$"
+ },
+ "SAR": {
+ "name": "ريال سعودي",
+ "symbol": "ر.س.â€"
+ },
+ "OMR": {
+ "name": "ريال عماني",
+ "symbol": "ر.ع.â€"
+ },
+ "QAR": {
+ "name": "ريال قطري",
+ "symbol": "ر.Ù‚.â€"
+ },
+ "YER": {
+ "name": "ريال يمني",
+ "symbol": "ر.ÙŠ.â€"
+ },
+ "MYR": {
+ "name": "رينغيت ماليزي",
+ "symbol": "MYR"
+ },
+ "KHR": {
+ "name": "رييال كمبودي",
+ "symbol": "KHR"
+ },
+ "PLN": {
+ "name": "زلوتي بولندي",
+ "symbol": "PLN"
+ },
+ "PEN": {
+ "name": "سول جديد البيرو",
+ "symbol": "PEN"
+ },
+ "UZS": {
+ "name": "سوم أوزبكستاني",
+ "symbol": "UZS"
+ },
+ "KGS": {
+ "name": "سوم قيرغستاني",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "سوموني طاجيكستاني",
+ "symbol": "TJS"
+ },
+ "GHS": {
+ "name": "سيدي غانا",
+ "symbol": "GHS"
+ },
+ "UGX": {
+ "name": "شلن أوغندي",
+ "symbol": "UGX"
+ },
+ "TZS": {
+ "name": "شلن تنزاني",
+ "symbol": "TZS"
+ },
+ "SOS": {
+ "name": "شلن صومالي",
+ "symbol": "SOS"
+ },
+ "KES": {
+ "name": "شلن كينيي",
+ "symbol": "KES"
+ },
+ "ILS": {
+ "name": "شيكل إسرائيلي جديد",
+ "symbol": "₪"
+ },
+ "ANG": {
+ "name": "غيلدر هولندي أنتيلي",
+ "symbol": "ANG"
+ },
+ "VUV": {
+ "name": "Ùاتو Ùانواتو",
+ "symbol": "VUV"
+ },
+ "XAF": {
+ "name": "Ùرنك Ø£Ùريقي",
+ "symbol": "FCFA"
+ },
+ "BIF": {
+ "name": "Ùرنك بروندي",
+ "symbol": "BIF"
+ },
+ "KMF": {
+ "name": "Ùرنك جزر القمر",
+ "symbol": "Ù.ج.Ù‚.â€"
+ },
+ "DJF": {
+ "name": "Ùرنك جيبوتي",
+ "symbol": "DJF"
+ },
+ "RWF": {
+ "name": "Ùرنك رواندي",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Ùرنك سويسري",
+ "symbol": "CHF"
+ },
+ "XOF": {
+ "name": "Ùرنك سي إ٠إيه غرب Ø¥Ùريقيا",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "Ùرنك سي إ٠بي",
+ "symbol": "CFPF"
+ },
+ "GNF": {
+ "name": "Ùرنك غينيا",
+ "symbol": "GNF"
+ },
+ "CDF": {
+ "name": "Ùرنك كونغولي",
+ "symbol": "CDF"
+ },
+ "AWG": {
+ "name": "Ùلورن أروبي",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "Ùورينت مجري",
+ "symbol": "HUF"
+ },
+ "NIO": {
+ "name": "قرطبة نيكاراغوا",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "كرونة تشيكية",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "كرونة دانماركي",
+ "symbol": "DKK"
+ },
+ "SEK": {
+ "name": "كرونة سويدية",
+ "symbol": "SEK"
+ },
+ "NOK": {
+ "name": "كرونة نرويجية",
+ "symbol": "NOK"
+ },
+ "ISK": {
+ "name": "كرونه أيسلندي",
+ "symbol": "ISK"
+ },
+ "ZMW": {
+ "name": "كواشا زامبي",
+ "symbol": "ZMW"
+ },
+ "MWK": {
+ "name": "كواشا مالاوي",
+ "symbol": "MWK"
+ },
+ "AOA": {
+ "name": "كوانزا أنجولي",
+ "symbol": "AOA"
+ },
+ "GTQ": {
+ "name": "كوتزال جواتيمالا",
+ "symbol": "GTQ"
+ },
+ "CRC": {
+ "name": "كولن كوستا ريكي",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "كولون سلÙادوري",
+ "symbol": "SVC"
+ },
+ "HRK": {
+ "name": "كونا كرواتي",
+ "symbol": "HRK"
+ },
+ "MMK": {
+ "name": "كيات ميانمار",
+ "symbol": "MMK"
+ },
+ "LAK": {
+ "name": "كيب لاوسي",
+ "symbol": "LAK"
+ },
+ "PGK": {
+ "name": "كينا بابوا غينيا الجديدة",
+ "symbol": "PGK"
+ },
+ "GEL": {
+ "name": "لارى جورجي",
+ "symbol": "GEL"
+ },
+ "LSL": {
+ "name": "لوتي ليسوتو",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "ليتا ليتوانية",
+ "symbol": "LTL"
+ },
+ "TRY": {
+ "name": "ليرة تركية",
+ "symbol": "ل.ت."
+ },
+ "SYP": {
+ "name": "ليرة سورية",
+ "symbol": "Ù„.س.â€"
+ },
+ "BGN": {
+ "name": "لي٠بلغاري",
+ "symbol": "BGN"
+ },
+ "ALL": {
+ "name": "ليك ألباني",
+ "symbol": "ALL"
+ },
+ "SZL": {
+ "name": "ليلانجيني سوازيلندي",
+ "symbol": "SZL"
+ },
+ "HNL": {
+ "name": "ليمبيرا هنداروس",
+ "symbol": "HNL"
+ },
+ "RON": {
+ "name": "ليو روماني",
+ "symbol": "RON"
+ },
+ "MDL": {
+ "name": "ليو مولدوÙÙŠ",
+ "symbol": "MDL"
+ },
+ "SLL": {
+ "name": "ليون سيراليوني",
+ "symbol": "SLL"
+ },
+ "BAM": {
+ "name": "مارك البوسنة والهرسك قابل للتحويل",
+ "symbol": "BAM"
+ },
+ "AZN": {
+ "name": "مانات أذربيجان",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "مانات تركمانستان",
+ "symbol": "TMT"
+ },
+ "MZN": {
+ "name": "متكال موزمبيقي",
+ "symbol": "MZN"
+ },
+ "ERN": {
+ "name": "ناكÙا أريتري",
+ "symbol": "ERN"
+ },
+ "NGN": {
+ "name": "نايرا نيجيري",
+ "symbol": "NGN"
+ },
+ "BTN": {
+ "name": "نولتوم بوتاني",
+ "symbol": "BTN"
+ },
+ "UAH": {
+ "name": "هريÙنيا أوكراني",
+ "symbol": "UAH"
+ },
+ "KRW": {
+ "name": "وون كوريا الجنوبية",
+ "symbol": "â‚©"
+ },
+ "KPW": {
+ "name": "وون كوريا الشمالية",
+ "symbol": "KPW"
+ },
+ "JPY": {
+ "name": "ين ياباني",
+ "symbol": "JPÂ¥"
+ },
+ "CNY": {
+ "name": "يوان صيني",
+ "symbol": "ي.ص"
+ },
+ "EUR": {
+ "name": "يورو",
+ "symbol": "€"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/asa.json b/library/intl/resources/currency/asa.json
new file mode 100644
index 000000000..4936fcc9b
--- /dev/null
+++ b/library/intl/resources/currency/asa.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "bir ya Uhabeshi",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "dalathi ya Gambia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinari ya Aljeria",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinari ya Bahareni",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "dinari ya Libya",
+ "symbol": "LYD"
+ },
+ "SDG": {
+ "name": "dinari ya Thudani",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "dinari ya Tunithia",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dirham ya Falme dha Kiarabu",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dirham ya Moroko",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "dobra ya Thao Tome na Principe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dola ya Authtralia",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "dola ya Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "dola ya Liberia",
+ "symbol": "LRD"
+ },
+ "USD": {
+ "name": "dola ya Marekani",
+ "symbol": "US$"
+ },
+ "NAD": {
+ "name": "dola ya Namibia",
+ "symbol": "NAD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "ethkudo ya Kepuvede",
+ "symbol": "CVE"
+ },
+ "XOF": {
+ "name": "faranga CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "faranga CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "MGA": {
+ "name": "faranga ya Bukini",
+ "symbol": "MGA"
+ },
+ "BIF": {
+ "name": "faranga ya Burundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "faranga ya Jibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "faranga ya Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "faranga ya Kongo",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "faranga ya Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "faranga ya Uthwithi",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "ZMW": {
+ "name": "kwacha ya Dhambia",
+ "symbol": "ZMW"
+ },
+ "MWK": {
+ "name": "kwacha ya Malawi",
+ "symbol": "MWK"
+ },
+ "AOA": {
+ "name": "kwandha ya Angola",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "leoni",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "loti ya Lethoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira ya Nijeria",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa ya Eritrea",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "EGP": {
+ "name": "pauni ya Mithri",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "pauni ya Thantahelena",
+ "symbol": "SHP"
+ },
+ "GBP": {
+ "name": "pauni ya Uingeredha",
+ "symbol": "£"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "pula ya Botthwana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "randi ya Afrika Kuthini",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "riyal ya Thaudia",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "rupia ya India",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "rupia ya Morithi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "rupia ya Shelisheli",
+ "symbol": "SCR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "shilingi ya Kenya",
+ "symbol": "KES"
+ },
+ "TZS": {
+ "name": "shilingi ya Tandhania",
+ "symbol": "TSh"
+ },
+ "SOS": {
+ "name": "shilingi ya Thomalia",
+ "symbol": "SOS"
+ },
+ "UGX": {
+ "name": "shilingi ya Uganda",
+ "symbol": "UGX"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "JPY": {
+ "name": "tharafu ya Kijapani",
+ "symbol": "JPÂ¥"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "ugwiya ya Moritania",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "yuan renminbi ya China",
+ "symbol": "CNÂ¥"
+ },
+ "EUR": {
+ "name": "yuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ast.json b/library/intl/resources/currency/ast.json
new file mode 100644
index 000000000..c36cb7697
--- /dev/null
+++ b/library/intl/resources/currency/ast.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afganí afganistanu",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariary malgaxe",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "baht tailandés",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "balboa panamiegu",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "birr etíope",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar venezolanu",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "bolivianu",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi ghanianu",
+ "symbol": "GHS"
+ },
+ "CRC": {
+ "name": "colón costarricanu",
+ "symbol": "CRC"
+ },
+ "NIO": {
+ "name": "córdoba nicaraguanu",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "corona checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi gambianu",
+ "symbol": "GMD"
+ },
+ "MKD": {
+ "name": "denar",
+ "symbol": "MKD"
+ },
+ "DZD": {
+ "name": "dinar arxelín",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar baḥreiní",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquín",
+ "symbol": "IQD"
+ },
+ "KWD": {
+ "name": "dinar kuwaitianu",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libiu",
+ "symbol": "LYD"
+ },
+ "RSD": {
+ "name": "dinar serbiu",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunecín",
+ "symbol": "TND"
+ },
+ "JOD": {
+ "name": "dinar xordanu",
+ "symbol": "JOD"
+ },
+ "AED": {
+ "name": "dirḥam de los Emiratos Ãrabes Xuníos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dirḥam marroquín",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra de Santu Tomé y Príncipe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dólar australianu",
+ "symbol": "A$"
+ },
+ "BSD": {
+ "name": "dólar bahamés",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dólar barbadianu",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dólar belizianu",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "dólar bermudianu",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "dólar bruneyanu",
+ "symbol": "BND"
+ },
+ "KYD": {
+ "name": "dólar caimanés",
+ "symbol": "KYD"
+ },
+ "CAD": {
+ "name": "dólar canadiense",
+ "symbol": "CA$"
+ },
+ "USD": {
+ "name": "dólar de los Estaos Xuníos",
+ "symbol": "$"
+ },
+ "TTD": {
+ "name": "dólar de Trinidá y Tobagu",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dólar del Caribe Oriental",
+ "symbol": "EC$"
+ },
+ "FJD": {
+ "name": "dólar fixanu",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dólar guyanés",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dólar hongkonés",
+ "symbol": "HK$"
+ },
+ "LRD": {
+ "name": "dólar liberianu",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dólar namibianu",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dólar neozelandés",
+ "symbol": "NZ$"
+ },
+ "TWD": {
+ "name": "dólar nuevu taiwanés",
+ "symbol": "NT$"
+ },
+ "SBD": {
+ "name": "dólar salomonés",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "dólar singapuranu",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dólar surinamés",
+ "symbol": "SRD"
+ },
+ "JMD": {
+ "name": "dólar xamaicanu",
+ "symbol": "JMD"
+ },
+ "VND": {
+ "name": "dong vietnamín",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "dram armeniu",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudu cabuverdianu",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "AWG": {
+ "name": "florín arubanu",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "forint",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "francu burundianu",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "francu CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "francu CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "francu CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "francu comoranu",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "francu congolés",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "francu guineanu",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "francu ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "francu suizu",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "francu xibutianu",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "gourde haitianu",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "grivna",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "guaraní paraguayu",
+ "symbol": "PYG"
+ },
+ "ANG": {
+ "name": "guilder de les Antilles Neerlandeses",
+ "symbol": "ANG"
+ },
+ "PGK": {
+ "name": "kina papuana",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip laosianu",
+ "symbol": "LAK"
+ },
+ "HRK": {
+ "name": "kuna",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "kwacha malauianu",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kwacha zambianu",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "kwanza angolanu",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "kyat de Myanmar",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "lari xeorxanu",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondurana",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leone sierralleonés",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldavu",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumanu",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "lev",
+ "symbol": "BGN"
+ },
+ "SZL": {
+ "name": "lilangeni suazilandés",
+ "symbol": "SZL"
+ },
+ "LTL": {
+ "name": "litas",
+ "symbol": "LTL"
+ },
+ "SHP": {
+ "name": "llibra de Santa Lena",
+ "symbol": "SHP"
+ },
+ "GIP": {
+ "name": "llibra de Xibraltar",
+ "symbol": "GIP"
+ },
+ "GBP": {
+ "name": "llibra esterlina",
+ "symbol": "£"
+ },
+ "EGP": {
+ "name": "llibra exipciana",
+ "symbol": "EGP"
+ },
+ "LBP": {
+ "name": "llibra libanesa",
+ "symbol": "LBP"
+ },
+ "FKP": {
+ "name": "llibra malviniana",
+ "symbol": "FKP"
+ },
+ "SYP": {
+ "name": "llibra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "llibra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "llibra sursudanesa",
+ "symbol": "SSP"
+ },
+ "TRY": {
+ "name": "llira turca",
+ "symbol": "TRY"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerbaixanu",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turcomanu",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marcu convertible de Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical mozambicanu",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira nixeriana",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa eritréu",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "ngultrum butanés",
+ "symbol": "BTN"
+ },
+ "MRO": {
+ "name": "ouguiya mauritanu",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "paʻanga tonganu",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca de Macáu",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "pesu arxentín",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "pesu chilenu",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "pesu colombianu",
+ "symbol": "COP"
+ },
+ "CUC": {
+ "name": "pesu convertible cubanu",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "pesu cubanu",
+ "symbol": "CUP"
+ },
+ "DOP": {
+ "name": "pesu dominicanu",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "pesu filipín",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "pesu mexicanu",
+ "symbol": "MX$"
+ },
+ "UYU": {
+ "name": "pesu uruguayu",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula botsuaniana",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal de Guatemala",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand sudafricanu",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasilanu",
+ "symbol": "R$"
+ },
+ "IRR": {
+ "name": "rial iranín",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omanianu",
+ "symbol": "OMR"
+ },
+ "QAR": {
+ "name": "rial qatarín",
+ "symbol": "QAR"
+ },
+ "YER": {
+ "name": "rial yemenín",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel camboyanu",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringgit malasiu",
+ "symbol": "MYR"
+ },
+ "SAR": {
+ "name": "riyal saudita",
+ "symbol": "SAR"
+ },
+ "BYR": {
+ "name": "rublu bielorrusu",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublu rusu",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiyaa maldiviana",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "rupia de Sri Lanka",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia india",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalesa",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia paquistanina",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "rupia seixelesa",
+ "symbol": "SCR"
+ },
+ "IDR": {
+ "name": "rupiah indonesia",
+ "symbol": "IDR"
+ },
+ "KES": {
+ "name": "shilling kenianu",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "shilling somalín",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "shilling tanzanianu",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "shilling ugandés",
+ "symbol": "UGX"
+ },
+ "PEN": {
+ "name": "sol nuevu peruanu",
+ "symbol": "PEN"
+ },
+ "KGS": {
+ "name": "som kirguistanín",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "som uzbequistanín",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "somoni taxiquistanín",
+ "symbol": "TJS"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "BDT": {
+ "name": "taka bangladexí",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala samoanu",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazaquistanín",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik mongol",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "vatu vanuatuanu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won norcoreanu",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won surcoreanu",
+ "symbol": "â‚©"
+ },
+ "ILS": {
+ "name": "xequel nuevu",
+ "symbol": "₪"
+ },
+ "JPY": {
+ "name": "yen xaponés",
+ "symbol": "Â¥"
+ },
+ "CNY": {
+ "name": "yuan chinu",
+ "symbol": "CNÂ¥"
+ },
+ "PLN": {
+ "name": "zloty",
+ "symbol": "PLN"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/az.json b/library/intl/resources/currency/az.json
new file mode 100644
index 000000000..f238801a8
--- /dev/null
+++ b/library/intl/resources/currency/az.json
@@ -0,0 +1,634 @@
+{
+ "USD": {
+ "name": "ABŞ Dolları",
+ "symbol": "US$"
+ },
+ "ALL": {
+ "name": "Albaniya Leki",
+ "symbol": "ALL"
+ },
+ "AOA": {
+ "name": "Anqola Kvanzası",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentina Pesosu",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "Aruba Florini",
+ "symbol": "AWG"
+ },
+ "EUR": {
+ "name": "Avro",
+ "symbol": "€"
+ },
+ "AUD": {
+ "name": "Avstraliya Dolları",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azərbaycan Manatı",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahama Dolları",
+ "symbol": "BSD"
+ },
+ "BDT": {
+ "name": "Banqladeş Takası",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbados Dolları",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarus Rublu",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Beliz Dolları",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermuda Dolları",
+ "symbol": "BMD"
+ },
+ "BHD": {
+ "name": "Bəhreyn Dinarı",
+ "symbol": "BHD"
+ },
+ "AED": {
+ "name": "BirləşmiÅŸ ÆrÉ™b ÆmirliklÉ™ri DirhÉ™mi",
+ "symbol": "AED"
+ },
+ "BOB": {
+ "name": "Boliviya Bolivianosu",
+ "symbol": "BOB"
+ },
+ "BGN": {
+ "name": "Bolqarıstan Levi",
+ "symbol": "BGN"
+ },
+ "BAM": {
+ "name": "Bosniya-Herseqovina Markası",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botsvana Pulası",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Braziliya Realı",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "Britaniya Funt Sterlinqi",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Bruney Dolları",
+ "symbol": "BND"
+ },
+ "BIF": {
+ "name": "Burundi Frankı",
+ "symbol": "BIF"
+ },
+ "BTN": {
+ "name": "Butan Nqultrumu",
+ "symbol": "BTN"
+ },
+ "ZAR": {
+ "name": "Cənubi Afrika Randı",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "Cənubi Koreya Vonu",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "Cənubi Sudan Funtu",
+ "symbol": "SSP"
+ },
+ "DJF": {
+ "name": "Cibuti Frankı",
+ "symbol": "DJF"
+ },
+ "CZK": {
+ "name": "Çexiya Korunası",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "Çili Pesosu",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Çin Yuanı",
+ "symbol": "CNÂ¥"
+ },
+ "DKK": {
+ "name": "Danimarka Kronu",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "Dominika Pesosu",
+ "symbol": "DOP"
+ },
+ "ETB": {
+ "name": "Efiopiya Bırrı",
+ "symbol": "ETB"
+ },
+ "SVC": {
+ "name": "El Salvador kolonu",
+ "symbol": "SVC"
+ },
+ "ERN": {
+ "name": "Eritreya Nakfası",
+ "symbol": "ERN"
+ },
+ "AMD": {
+ "name": "Ermənistan Dramı",
+ "symbol": "AMD"
+ },
+ "AFN": {
+ "name": "Æfqanıstan Æfqanisi",
+ "symbol": "AFN"
+ },
+ "DZD": {
+ "name": "ÆlcÉ™zair Dinarı",
+ "symbol": "DZD"
+ },
+ "FJD": {
+ "name": "Fici Dolları",
+ "symbol": "FJD"
+ },
+ "XOF": {
+ "name": "Fil Dişi Sahili Frankı",
+ "symbol": "CFA"
+ },
+ "PHP": {
+ "name": "Filippin Pesosu",
+ "symbol": "PHP"
+ },
+ "FKP": {
+ "name": "Folklend Adaları Funtu",
+ "symbol": "FKP"
+ },
+ "XPF": {
+ "name": "Fransız Polineziyası Frankı",
+ "symbol": "CFPF"
+ },
+ "GIP": {
+ "name": "Gibraltar Funtu",
+ "symbol": "GIP"
+ },
+ "GEL": {
+ "name": "Gürcüstan Larisi",
+ "symbol": "GEL"
+ },
+ "HTG": {
+ "name": "Haiti Qourdu",
+ "symbol": "HTG"
+ },
+ "INR": {
+ "name": "Hindistan Rupisi",
+ "symbol": "₹"
+ },
+ "HNL": {
+ "name": "Honduras Lempirası",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Honq Konq Dolları",
+ "symbol": "HK$"
+ },
+ "HRK": {
+ "name": "Xorvatiya Kunası",
+ "symbol": "HRK"
+ },
+ "IDR": {
+ "name": "Ä°ndoneziya Rupisi",
+ "symbol": "IDR"
+ },
+ "JOD": {
+ "name": "İordaniya Dinarı",
+ "symbol": "JOD"
+ },
+ "IQD": {
+ "name": "İraq Dinarı",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "İran Rialı",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "Ä°slandiya Kronu",
+ "symbol": "ISK"
+ },
+ "ILS": {
+ "name": "Ä°srail Yeni Åžekeli",
+ "symbol": "₪"
+ },
+ "SEK": {
+ "name": "İsveç Kronu",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "İsveçrə Frankı",
+ "symbol": "CHF"
+ },
+ "KHR": {
+ "name": "Kamboca Rieli",
+ "symbol": "KHR"
+ },
+ "XAF": {
+ "name": "Kamerun Frankı",
+ "symbol": "FCFA"
+ },
+ "CAD": {
+ "name": "Kanada Dolları",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Kape Verde Eskudosu",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Kayman Adaları Dolları",
+ "symbol": "KYD"
+ },
+ "KES": {
+ "name": "Keniya Åžillinqi",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "Kırğızıstan Somu",
+ "symbol": "KGS"
+ },
+ "COP": {
+ "name": "Kolumbiya Pesosu",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Komor Frankı",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Konqo Frankı",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Kosta Rika Kolonu",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "Kuba Çevrilən Pesosu",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Kuba Pesosu",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "Küveyt Dinarı",
+ "symbol": "KWD"
+ },
+ "GMD": {
+ "name": "Qambiya Dalasisi",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "Qana Sedisi",
+ "symbol": "GHS"
+ },
+ "QAR": {
+ "name": "Qatar Rialı",
+ "symbol": "QAR"
+ },
+ "GYD": {
+ "name": "Qayana Dolları",
+ "symbol": "GYD"
+ },
+ "KZT": {
+ "name": "Qazaxıstan Tengesi",
+ "symbol": "KZT"
+ },
+ "GTQ": {
+ "name": "Qvatemala Küetzalı",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Qvineya Frankı",
+ "symbol": "GNF"
+ },
+ "LAK": {
+ "name": "Laos Kipi",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "Lesoto Lotisi",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberiya Dolları",
+ "symbol": "LRD"
+ },
+ "LTL": {
+ "name": "Litva Liti",
+ "symbol": "LTL"
+ },
+ "LBP": {
+ "name": "Livan Funtu",
+ "symbol": "LBP"
+ },
+ "LYD": {
+ "name": "Liviya Dinarı",
+ "symbol": "LYD"
+ },
+ "HUF": {
+ "name": "Macarıstan Forinti",
+ "symbol": "HUF"
+ },
+ "MGA": {
+ "name": "Madaqaskar Ariarisi",
+ "symbol": "MGA"
+ },
+ "MOP": {
+ "name": "Makao Patakası",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Makedoniya Dinarı",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "Malavi Kvaçası",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malayziya Ringiti",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldiv Rufiyası",
+ "symbol": "MVR"
+ },
+ "MUR": {
+ "name": "Mavriki Rupisi",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "Mavritaniya Ugiyası",
+ "symbol": "MRO"
+ },
+ "MXN": {
+ "name": "Meksika Pesosu",
+ "symbol": "MX$"
+ },
+ "MAD": {
+ "name": "Mərakeş Dirhəmi",
+ "symbol": "MAD"
+ },
+ "EGP": {
+ "name": "Misir Funtu",
+ "symbol": "EGP"
+ },
+ "MDL": {
+ "name": "Moldova Leyi",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Monqoliya Tuqriki",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "Mozambik Metikalı",
+ "symbol": "MZN"
+ },
+ "SHP": {
+ "name": "Müqəddəs Yelena Funtu",
+ "symbol": "SHP"
+ },
+ "MMK": {
+ "name": "Myanma Kiyatı",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibiya Dolları",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepal Rupisi",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Niderland Antilyası Gilderi",
+ "symbol": "ANG"
+ },
+ "NGN": {
+ "name": "Nigeriya Nairası",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "Nikaraqua Kordobası",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "Norveç Kronu",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Oman Rialı",
+ "symbol": "OMR"
+ },
+ "UZS": {
+ "name": "Özbəkistan Somu",
+ "symbol": "UZS"
+ },
+ "PKR": {
+ "name": "Pakistan Rupisi",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panama Balboası",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua Yeni Qvineya Kinası",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraqvay Quaranisi",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peru Nuevo Solu",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "Polşa Zlotısı",
+ "symbol": "PLN"
+ },
+ "RWF": {
+ "name": "Ruanda Frankı",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "Rumıniya Leyi",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Rusiya Rublu",
+ "symbol": "RUB"
+ },
+ "WST": {
+ "name": "Samoa Talası",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "San Tom və Prinsip Dobrası",
+ "symbol": "STD"
+ },
+ "RSD": {
+ "name": "Serbiya Dinarı",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "SeyÅŸel Rupisi",
+ "symbol": "SCR"
+ },
+ "SAR": {
+ "name": "Səudiyyə Riyalı",
+ "symbol": "SAR"
+ },
+ "SLL": {
+ "name": "Sierra Leon Leonu",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Sinqapur Dolları",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Solomon Adaları Dolları",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Åžillinqi",
+ "symbol": "SOS"
+ },
+ "SDG": {
+ "name": "Sudan Funtu",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinam Dolları",
+ "symbol": "SRD"
+ },
+ "SYP": {
+ "name": "Suriya Funtu",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "Svazilend Lilangenini",
+ "symbol": "SZL"
+ },
+ "XCD": {
+ "name": "Şərqi Karib Dolları",
+ "symbol": "EC$"
+ },
+ "KPW": {
+ "name": "Åžimali Koreya Vonu",
+ "symbol": "KPW"
+ },
+ "LKR": {
+ "name": "Åžri Lanka Rupisi",
+ "symbol": "LKR"
+ },
+ "TJS": {
+ "name": "Tacikistan Somonisi",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzaniya Åžillinqi",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Tayland Batı",
+ "symbol": "฿"
+ },
+ "TWD": {
+ "name": "Tayvan Yeni Dolları",
+ "symbol": "NT$"
+ },
+ "TOP": {
+ "name": "Tonqa Panqası",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad və Tobaqo Dolları",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunis Dinarı",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Türkiyə Lirəsi",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Türkmənistan Manatı",
+ "symbol": "TMT"
+ },
+ "UAH": {
+ "name": "Ukrayna Qrivnası",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "Uqanda Åžillinqi",
+ "symbol": "UGX"
+ },
+ "UYU": {
+ "name": "Uruqvay Pesosu",
+ "symbol": "UYU"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatusu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venesuela Bolivarı",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vyetnam Donqu",
+ "symbol": "â‚«"
+ },
+ "JMD": {
+ "name": "Yamayka Dolları",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Yaponiya Yeni",
+ "symbol": "JPÂ¥"
+ },
+ "NZD": {
+ "name": "Yeni Zelandiya Dolları",
+ "symbol": "NZ$"
+ },
+ "YER": {
+ "name": "Yəmən Rialı",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambiya Kvaçası",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabve Dolları (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/bas.json b/library/intl/resources/currency/bas.json
new file mode 100644
index 000000000..06d2a4a65
--- /dev/null
+++ b/library/intl/resources/currency/bas.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Bîr ètìopìà",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasì gambìà",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dìnâr àlgerìà",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinâr Bàraìn",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dìnâr libìà",
+ "symbol": "LYD"
+ },
+ "SDG": {
+ "name": "Dìnâr sùdân",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "Dìnâr tùnîs",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirhàm èmìrâ",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dìrham màrôk",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobrà sàotòme",
+ "symbol": "STD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "USD": {
+ "name": "Dɔla àmerkà",
+ "symbol": "US$"
+ },
+ "CAD": {
+ "name": "Dɔ̀lâr kànadà",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dɔ̀lâr lìberìà",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Dɔ̀lâr nàmibìà",
+ "symbol": "NAD"
+ },
+ "AUD": {
+ "name": "Dɔ̀lâr òstralìà",
+ "symbol": "A$"
+ },
+ "EUR": {
+ "name": "Èrô",
+ "symbol": "€"
+ },
+ "CVE": {
+ "name": "Èskudò kabwe᷆r",
+ "symbol": "CVE"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "BIF": {
+ "name": "Frǎŋ bùrundì",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "FrÇŽÅ‹ CFA (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "FrÇŽÅ‹ CFA (BEAC)",
+ "symbol": "FCFA"
+ },
+ "DJF": {
+ "name": "Frǎŋ jìbutì",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Frǎŋ kòmorà",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Frǎŋ kòŋgo",
+ "symbol": "CDF"
+ },
+ "MGA": {
+ "name": "Frǎŋ màlàgasì",
+ "symbol": "MGA"
+ },
+ "RWF": {
+ "name": "Frǎŋ Rùandà",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Frǎŋ sùwîs",
+ "symbol": "CHF"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kwaca màlawì",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwàca sàmbià",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwànza àŋgolà",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Lèonɛ̀",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lìlàŋgeni swàzì",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Lotì lèsòtò",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "ERN": {
+ "name": "Nafkà èrìtrěà",
+ "symbol": "ERN"
+ },
+ "NGN": {
+ "name": "Nayrà nìgerìà",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "EGP": {
+ "name": "Paùnd ègîptò",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Paùnd hèlenà",
+ "symbol": "SHP"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pùla Bòtswanà",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Rân àfrÇkàsɔ̀",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Rìal sàudì",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rùpi īndìà",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupìɛ̀ mòrîs",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rùpiɛ̀ sèsɛ̂l",
+ "symbol": "SCR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "Silîŋ kenìà",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Silîŋ sòmàli",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Silîŋ tànzànià",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Silîŋ ùgàndà",
+ "symbol": "UGX"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "GBP": {
+ "name": "Stɛrlìŋ ŋgìsì",
+ "symbol": "£"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ùgwiya mòrìtanìa",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "JPY": {
+ "name": "Yɛ̂n yàpân",
+ "symbol": "JPÂ¥"
+ },
+ "CNY": {
+ "name": "Yùan kinà",
+ "symbol": "CNÂ¥"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/base.json b/library/intl/resources/currency/base.json
new file mode 100644
index 000000000..b99ca7ad0
--- /dev/null
+++ b/library/intl/resources/currency/base.json
@@ -0,0 +1,683 @@
+{
+ "AED": {
+ "code": "AED",
+ "numeric_code": "784"
+ },
+ "AFN": {
+ "code": "AFN",
+ "numeric_code": "971",
+ "fraction_digits": "0"
+ },
+ "ALL": {
+ "code": "ALL",
+ "numeric_code": "008",
+ "fraction_digits": "0"
+ },
+ "AMD": {
+ "code": "AMD",
+ "numeric_code": "051",
+ "fraction_digits": "0"
+ },
+ "ANG": {
+ "code": "ANG",
+ "numeric_code": "532"
+ },
+ "AOA": {
+ "code": "AOA",
+ "numeric_code": "973"
+ },
+ "ARS": {
+ "code": "ARS",
+ "numeric_code": "032"
+ },
+ "AUD": {
+ "code": "AUD",
+ "numeric_code": "036"
+ },
+ "AWG": {
+ "code": "AWG",
+ "numeric_code": "533"
+ },
+ "AZN": {
+ "code": "AZN",
+ "numeric_code": "944"
+ },
+ "BAM": {
+ "code": "BAM",
+ "numeric_code": "977"
+ },
+ "BBD": {
+ "code": "BBD",
+ "numeric_code": "052"
+ },
+ "BDT": {
+ "code": "BDT",
+ "numeric_code": "050"
+ },
+ "BGN": {
+ "code": "BGN",
+ "numeric_code": "975"
+ },
+ "BHD": {
+ "code": "BHD",
+ "numeric_code": "048",
+ "fraction_digits": "3"
+ },
+ "BIF": {
+ "code": "BIF",
+ "numeric_code": "108",
+ "fraction_digits": "0"
+ },
+ "BMD": {
+ "code": "BMD",
+ "numeric_code": "060"
+ },
+ "BND": {
+ "code": "BND",
+ "numeric_code": "096"
+ },
+ "BOB": {
+ "code": "BOB",
+ "numeric_code": "068"
+ },
+ "BRL": {
+ "code": "BRL",
+ "numeric_code": "986"
+ },
+ "BSD": {
+ "code": "BSD",
+ "numeric_code": "044"
+ },
+ "BTN": {
+ "code": "BTN",
+ "numeric_code": "064"
+ },
+ "BWP": {
+ "code": "BWP",
+ "numeric_code": "072"
+ },
+ "BYR": {
+ "code": "BYR",
+ "numeric_code": "974",
+ "fraction_digits": "0"
+ },
+ "BZD": {
+ "code": "BZD",
+ "numeric_code": "084"
+ },
+ "CAD": {
+ "code": "CAD",
+ "numeric_code": "124"
+ },
+ "CDF": {
+ "code": "CDF",
+ "numeric_code": "976"
+ },
+ "CHF": {
+ "code": "CHF",
+ "numeric_code": "756"
+ },
+ "CLP": {
+ "code": "CLP",
+ "numeric_code": "152",
+ "fraction_digits": "0"
+ },
+ "CNY": {
+ "code": "CNY",
+ "numeric_code": "156"
+ },
+ "COP": {
+ "code": "COP",
+ "numeric_code": "170",
+ "fraction_digits": "0"
+ },
+ "CRC": {
+ "code": "CRC",
+ "numeric_code": "188",
+ "fraction_digits": "0"
+ },
+ "CUC": {
+ "code": "CUC",
+ "numeric_code": "931"
+ },
+ "CUP": {
+ "code": "CUP",
+ "numeric_code": "192"
+ },
+ "CVE": {
+ "code": "CVE",
+ "numeric_code": "132"
+ },
+ "CZK": {
+ "code": "CZK",
+ "numeric_code": "203"
+ },
+ "DJF": {
+ "code": "DJF",
+ "numeric_code": "262",
+ "fraction_digits": "0"
+ },
+ "DKK": {
+ "code": "DKK",
+ "numeric_code": "208"
+ },
+ "DOP": {
+ "code": "DOP",
+ "numeric_code": "214"
+ },
+ "DZD": {
+ "code": "DZD",
+ "numeric_code": "012"
+ },
+ "EGP": {
+ "code": "EGP",
+ "numeric_code": "818"
+ },
+ "ERN": {
+ "code": "ERN",
+ "numeric_code": "232"
+ },
+ "ETB": {
+ "code": "ETB",
+ "numeric_code": "230"
+ },
+ "EUR": {
+ "code": "EUR",
+ "numeric_code": "978"
+ },
+ "FJD": {
+ "code": "FJD",
+ "numeric_code": "242"
+ },
+ "FKP": {
+ "code": "FKP",
+ "numeric_code": "238"
+ },
+ "GBP": {
+ "code": "GBP",
+ "numeric_code": "826"
+ },
+ "GEL": {
+ "code": "GEL",
+ "numeric_code": "981"
+ },
+ "GHS": {
+ "code": "GHS",
+ "numeric_code": "936"
+ },
+ "GIP": {
+ "code": "GIP",
+ "numeric_code": "292"
+ },
+ "GMD": {
+ "code": "GMD",
+ "numeric_code": "270"
+ },
+ "GNF": {
+ "code": "GNF",
+ "numeric_code": "324",
+ "fraction_digits": "0"
+ },
+ "GTQ": {
+ "code": "GTQ",
+ "numeric_code": "320"
+ },
+ "GYD": {
+ "code": "GYD",
+ "numeric_code": "328",
+ "fraction_digits": "0"
+ },
+ "HKD": {
+ "code": "HKD",
+ "numeric_code": "344"
+ },
+ "HNL": {
+ "code": "HNL",
+ "numeric_code": "340"
+ },
+ "HRK": {
+ "code": "HRK",
+ "numeric_code": "191"
+ },
+ "HTG": {
+ "code": "HTG",
+ "numeric_code": "332"
+ },
+ "HUF": {
+ "code": "HUF",
+ "numeric_code": "348"
+ },
+ "IDR": {
+ "code": "IDR",
+ "numeric_code": "360",
+ "fraction_digits": "0"
+ },
+ "ILS": {
+ "code": "ILS",
+ "numeric_code": "376"
+ },
+ "INR": {
+ "code": "INR",
+ "numeric_code": "356"
+ },
+ "IQD": {
+ "code": "IQD",
+ "numeric_code": "368",
+ "fraction_digits": "0"
+ },
+ "IRR": {
+ "code": "IRR",
+ "numeric_code": "364",
+ "fraction_digits": "0"
+ },
+ "ISK": {
+ "code": "ISK",
+ "numeric_code": "352",
+ "fraction_digits": "0"
+ },
+ "JMD": {
+ "code": "JMD",
+ "numeric_code": "388"
+ },
+ "JOD": {
+ "code": "JOD",
+ "numeric_code": "400",
+ "fraction_digits": "3"
+ },
+ "JPY": {
+ "code": "JPY",
+ "numeric_code": "392",
+ "fraction_digits": "0"
+ },
+ "KES": {
+ "code": "KES",
+ "numeric_code": "404"
+ },
+ "KGS": {
+ "code": "KGS",
+ "numeric_code": "417"
+ },
+ "KHR": {
+ "code": "KHR",
+ "numeric_code": "116"
+ },
+ "KMF": {
+ "code": "KMF",
+ "numeric_code": "174",
+ "fraction_digits": "0"
+ },
+ "KPW": {
+ "code": "KPW",
+ "numeric_code": "408",
+ "fraction_digits": "0"
+ },
+ "KRW": {
+ "code": "KRW",
+ "numeric_code": "410",
+ "fraction_digits": "0"
+ },
+ "KWD": {
+ "code": "KWD",
+ "numeric_code": "414",
+ "fraction_digits": "3"
+ },
+ "KYD": {
+ "code": "KYD",
+ "numeric_code": "136"
+ },
+ "KZT": {
+ "code": "KZT",
+ "numeric_code": "398"
+ },
+ "LAK": {
+ "code": "LAK",
+ "numeric_code": "418",
+ "fraction_digits": "0"
+ },
+ "LBP": {
+ "code": "LBP",
+ "numeric_code": "422",
+ "fraction_digits": "0"
+ },
+ "LKR": {
+ "code": "LKR",
+ "numeric_code": "144"
+ },
+ "LRD": {
+ "code": "LRD",
+ "numeric_code": "430"
+ },
+ "LSL": {
+ "code": "LSL",
+ "numeric_code": "426"
+ },
+ "LTL": {
+ "code": "LTL",
+ "numeric_code": "440"
+ },
+ "LYD": {
+ "code": "LYD",
+ "numeric_code": "434",
+ "fraction_digits": "3"
+ },
+ "MAD": {
+ "code": "MAD",
+ "numeric_code": "504"
+ },
+ "MDL": {
+ "code": "MDL",
+ "numeric_code": "498"
+ },
+ "MGA": {
+ "code": "MGA",
+ "numeric_code": "969",
+ "fraction_digits": "0"
+ },
+ "MKD": {
+ "code": "MKD",
+ "numeric_code": "807"
+ },
+ "MMK": {
+ "code": "MMK",
+ "numeric_code": "104",
+ "fraction_digits": "0"
+ },
+ "MNT": {
+ "code": "MNT",
+ "numeric_code": "496",
+ "fraction_digits": "0"
+ },
+ "MOP": {
+ "code": "MOP",
+ "numeric_code": "446"
+ },
+ "MRO": {
+ "code": "MRO",
+ "numeric_code": "478",
+ "fraction_digits": "0"
+ },
+ "MUR": {
+ "code": "MUR",
+ "numeric_code": "480",
+ "fraction_digits": "0"
+ },
+ "MVR": {
+ "code": "MVR",
+ "numeric_code": "462"
+ },
+ "MWK": {
+ "code": "MWK",
+ "numeric_code": "454"
+ },
+ "MXN": {
+ "code": "MXN",
+ "numeric_code": "484"
+ },
+ "MYR": {
+ "code": "MYR",
+ "numeric_code": "458"
+ },
+ "MZN": {
+ "code": "MZN",
+ "numeric_code": "943"
+ },
+ "NAD": {
+ "code": "NAD",
+ "numeric_code": "516"
+ },
+ "NGN": {
+ "code": "NGN",
+ "numeric_code": "566"
+ },
+ "NIO": {
+ "code": "NIO",
+ "numeric_code": "558"
+ },
+ "NOK": {
+ "code": "NOK",
+ "numeric_code": "578"
+ },
+ "NPR": {
+ "code": "NPR",
+ "numeric_code": "524"
+ },
+ "NZD": {
+ "code": "NZD",
+ "numeric_code": "554"
+ },
+ "OMR": {
+ "code": "OMR",
+ "numeric_code": "512",
+ "fraction_digits": "3"
+ },
+ "PAB": {
+ "code": "PAB",
+ "numeric_code": "590"
+ },
+ "PEN": {
+ "code": "PEN",
+ "numeric_code": "604"
+ },
+ "PGK": {
+ "code": "PGK",
+ "numeric_code": "598"
+ },
+ "PHP": {
+ "code": "PHP",
+ "numeric_code": "608"
+ },
+ "PKR": {
+ "code": "PKR",
+ "numeric_code": "586",
+ "fraction_digits": "0"
+ },
+ "PLN": {
+ "code": "PLN",
+ "numeric_code": "985"
+ },
+ "PYG": {
+ "code": "PYG",
+ "numeric_code": "600",
+ "fraction_digits": "0"
+ },
+ "QAR": {
+ "code": "QAR",
+ "numeric_code": "634"
+ },
+ "RON": {
+ "code": "RON",
+ "numeric_code": "946"
+ },
+ "RSD": {
+ "code": "RSD",
+ "numeric_code": "941",
+ "fraction_digits": "0"
+ },
+ "RUB": {
+ "code": "RUB",
+ "numeric_code": "643"
+ },
+ "RWF": {
+ "code": "RWF",
+ "numeric_code": "646",
+ "fraction_digits": "0"
+ },
+ "SAR": {
+ "code": "SAR",
+ "numeric_code": "682"
+ },
+ "SBD": {
+ "code": "SBD",
+ "numeric_code": "090"
+ },
+ "SCR": {
+ "code": "SCR",
+ "numeric_code": "690"
+ },
+ "SDG": {
+ "code": "SDG",
+ "numeric_code": "938"
+ },
+ "SEK": {
+ "code": "SEK",
+ "numeric_code": "752"
+ },
+ "SGD": {
+ "code": "SGD",
+ "numeric_code": "702"
+ },
+ "SHP": {
+ "code": "SHP",
+ "numeric_code": "654"
+ },
+ "SLL": {
+ "code": "SLL",
+ "numeric_code": "694",
+ "fraction_digits": "0"
+ },
+ "SOS": {
+ "code": "SOS",
+ "numeric_code": "706",
+ "fraction_digits": "0"
+ },
+ "SRD": {
+ "code": "SRD",
+ "numeric_code": "968"
+ },
+ "SSP": {
+ "code": "SSP",
+ "numeric_code": "728"
+ },
+ "STD": {
+ "code": "STD",
+ "numeric_code": "678",
+ "fraction_digits": "0"
+ },
+ "SVC": {
+ "code": "SVC",
+ "numeric_code": "222"
+ },
+ "SYP": {
+ "code": "SYP",
+ "numeric_code": "760",
+ "fraction_digits": "0"
+ },
+ "SZL": {
+ "code": "SZL",
+ "numeric_code": "748"
+ },
+ "THB": {
+ "code": "THB",
+ "numeric_code": "764"
+ },
+ "TJS": {
+ "code": "TJS",
+ "numeric_code": "972"
+ },
+ "TMT": {
+ "code": "TMT",
+ "numeric_code": "934"
+ },
+ "TND": {
+ "code": "TND",
+ "numeric_code": "788",
+ "fraction_digits": "3"
+ },
+ "TOP": {
+ "code": "TOP",
+ "numeric_code": "776"
+ },
+ "TRY": {
+ "code": "TRY",
+ "numeric_code": "949"
+ },
+ "TTD": {
+ "code": "TTD",
+ "numeric_code": "780"
+ },
+ "TWD": {
+ "code": "TWD",
+ "numeric_code": "901"
+ },
+ "TZS": {
+ "code": "TZS",
+ "numeric_code": "834",
+ "fraction_digits": "0"
+ },
+ "UAH": {
+ "code": "UAH",
+ "numeric_code": "980"
+ },
+ "UGX": {
+ "code": "UGX",
+ "numeric_code": "800",
+ "fraction_digits": "0"
+ },
+ "USD": {
+ "code": "USD",
+ "numeric_code": "840"
+ },
+ "UYU": {
+ "code": "UYU",
+ "numeric_code": "858"
+ },
+ "UZS": {
+ "code": "UZS",
+ "numeric_code": "860",
+ "fraction_digits": "0"
+ },
+ "VEF": {
+ "code": "VEF",
+ "numeric_code": "937"
+ },
+ "VND": {
+ "code": "VND",
+ "numeric_code": "704",
+ "fraction_digits": "0"
+ },
+ "VUV": {
+ "code": "VUV",
+ "numeric_code": "548",
+ "fraction_digits": "0"
+ },
+ "WST": {
+ "code": "WST",
+ "numeric_code": "882"
+ },
+ "XAF": {
+ "code": "XAF",
+ "numeric_code": "950",
+ "fraction_digits": "0"
+ },
+ "XCD": {
+ "code": "XCD",
+ "numeric_code": "951"
+ },
+ "XOF": {
+ "code": "XOF",
+ "numeric_code": "952",
+ "fraction_digits": "0"
+ },
+ "XPF": {
+ "code": "XPF",
+ "numeric_code": "953",
+ "fraction_digits": "0"
+ },
+ "YER": {
+ "code": "YER",
+ "numeric_code": "886",
+ "fraction_digits": "0"
+ },
+ "ZAR": {
+ "code": "ZAR",
+ "numeric_code": "710"
+ },
+ "ZMW": {
+ "code": "ZMW",
+ "numeric_code": "967"
+ },
+ "ZWL": {
+ "code": "ZWL",
+ "numeric_code": "932"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/be.json b/library/intl/resources/currency/be.json
new file mode 100644
index 000000000..fe0d366ca
--- /dev/null
+++ b/library/intl/resources/currency/be.json
@@ -0,0 +1,634 @@
+{
+ "AED": {
+ "name": "AED",
+ "symbol": "AED"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "AOA",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BHD": {
+ "name": "BHD",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "BIF",
+ "symbol": "BIF"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BWP": {
+ "name": "BWP",
+ "symbol": "BWP"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CAD": {
+ "name": "CAD",
+ "symbol": "CA$"
+ },
+ "CDF": {
+ "name": "CDF",
+ "symbol": "CDF"
+ },
+ "CHF": {
+ "name": "CHF",
+ "symbol": "CHF"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CVE": {
+ "name": "CVE",
+ "symbol": "CVE"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DJF": {
+ "name": "DJF",
+ "symbol": "DJF"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "DZD": {
+ "name": "DZD",
+ "symbol": "DZD"
+ },
+ "EGP": {
+ "name": "EGP",
+ "symbol": "EGP"
+ },
+ "ETB": {
+ "name": "ETB",
+ "symbol": "ETB"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GMD": {
+ "name": "GMD",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KES": {
+ "name": "KES",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "KMF",
+ "symbol": "KMF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LRD": {
+ "name": "LRD",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "LYD",
+ "symbol": "LYD"
+ },
+ "MAD": {
+ "name": "MAD",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MGA": {
+ "name": "MGA",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MRO": {
+ "name": "MRO",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "MWK",
+ "symbol": "MWK"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SAR": {
+ "name": "SAR",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "SDG",
+ "symbol": "SDG"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SOS",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "TND",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "TZS": {
+ "name": "TZS",
+ "symbol": "TZS"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "UGX",
+ "symbol": "UGX"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZAR": {
+ "name": "ZAR",
+ "symbol": "ZAR"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "GBP": {
+ "name": "англійÑкі фунт",
+ "symbol": "£"
+ },
+ "AUD": {
+ "name": "аўÑтралійÑкі далÑÑ€",
+ "symbol": "A$"
+ },
+ "BYR": {
+ "name": "беларуÑкі рубель",
+ "symbol": "Ñ€."
+ },
+ "BRL": {
+ "name": "бразільÑкі Ñ€Ñал",
+ "symbol": "R$"
+ },
+ "USD": {
+ "name": "долар ЗШÐ",
+ "symbol": "$"
+ },
+ "EUR": {
+ "name": "еўра",
+ "symbol": "€"
+ },
+ "INR": {
+ "name": "індыйÑÐºÐ°Ñ Ñ€ÑƒÐ¿Ñ–Ñ",
+ "symbol": "₹"
+ },
+ "CNY": {
+ "name": "кітайÑкі юань",
+ "symbol": "CNÂ¥"
+ },
+ "NOK": {
+ "name": "нарвÑÑÐºÐ°Ñ ÐºÑ€Ð¾Ð½Ð°",
+ "symbol": "NOK"
+ },
+ "RUB": {
+ "name": "руÑкі рубель",
+ "symbol": "раÑ. руб."
+ },
+ "ERN": {
+ "name": "ÑрытрÑйÑÐºÐ°Ñ Ð½Ð°ÐºÑ„Ð°",
+ "symbol": "ERN"
+ },
+ "JPY": {
+ "name": "ÑпонÑÐºÐ°Ñ Ñ–ÐµÐ½Ð°",
+ "symbol": "Â¥"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/bez.json b/library/intl/resources/currency/bez.json
new file mode 100644
index 000000000..ea896cc8f
--- /dev/null
+++ b/library/intl/resources/currency/bez.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "XOF": {
+ "name": "Lupila lwa CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Lupila lwa CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "JPY": {
+ "name": "Lupila lwa Hijapani",
+ "symbol": "JPÂ¥"
+ },
+ "ZAR": {
+ "name": "Lupila lwa Huafriaka ya Hukusini",
+ "symbol": "ZAR"
+ },
+ "DZD": {
+ "name": "Lupila lwa Hualjelia",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Lupila lwa Huangola",
+ "symbol": "AOA"
+ },
+ "AUD": {
+ "name": "Lupila lwa Huaustlalia",
+ "symbol": "A$"
+ },
+ "BHD": {
+ "name": "Lupila lwa Hubahareni",
+ "symbol": "BHD"
+ },
+ "BWP": {
+ "name": "Lupila lwa Hubotswana",
+ "symbol": "BWP"
+ },
+ "MGA": {
+ "name": "Lupila lwa Hubukini",
+ "symbol": "MGA"
+ },
+ "BIF": {
+ "name": "Lupila lwa Huburundi",
+ "symbol": "BIF"
+ },
+ "CNY": {
+ "name": "Lupila lwa Huchina",
+ "symbol": "CNÂ¥"
+ },
+ "ERN": {
+ "name": "Lupila lwa Hueritrea",
+ "symbol": "ERN"
+ },
+ "AED": {
+ "name": "Lupila lwa Hufalme dza Huhihalabu",
+ "symbol": "AED"
+ },
+ "GMD": {
+ "name": "Lupila lwa Hugambia",
+ "symbol": "GMD"
+ },
+ "INR": {
+ "name": "Lupila lwa Huindia",
+ "symbol": "₹"
+ },
+ "DJF": {
+ "name": "Lupila lwa Hujibuti",
+ "symbol": "DJF"
+ },
+ "CAD": {
+ "name": "Lupila lwa Hukanada",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Lupila lwa Hukepuvede",
+ "symbol": "CVE"
+ },
+ "KMF": {
+ "name": "Lupila lwa Hukomoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Lupila lwa Hukongo",
+ "symbol": "CDF"
+ },
+ "LSL": {
+ "name": "Lupila lwa Hulesoto",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Lupila lwa Hulibelia",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Lupila lwa Hulibya",
+ "symbol": "LYD"
+ },
+ "MWK": {
+ "name": "Lupila lwa Humalawi",
+ "symbol": "MWK"
+ },
+ "USD": {
+ "name": "Lupila lwa Humalekani",
+ "symbol": "US$"
+ },
+ "EGP": {
+ "name": "Lupila lwa Humisri",
+ "symbol": "EGP"
+ },
+ "MUR": {
+ "name": "Lupila lwa Humolisi",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "Lupila lwa Humolitania",
+ "symbol": "MRO"
+ },
+ "MAD": {
+ "name": "Lupila lwa Humoloko",
+ "symbol": "MAD"
+ },
+ "NAD": {
+ "name": "Lupila lwa Hunamibia",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "Lupila lwa Hunijelia",
+ "symbol": "NGN"
+ },
+ "RWF": {
+ "name": "Lupila lwa Hurwanda",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Lupila lwa Husantahelena",
+ "symbol": "SHP"
+ },
+ "STD": {
+ "name": "Lupila lwa Husaotome na Huprinisipe",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Lupila lwa Husaudi",
+ "symbol": "SAR"
+ },
+ "SCR": {
+ "name": "Lupila lwa Hushelisheli",
+ "symbol": "SCR"
+ },
+ "SOS": {
+ "name": "Lupila lwa Husomalia",
+ "symbol": "SOS"
+ },
+ "SDG": {
+ "name": "Lupila lwa Husudani",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "Lupila lwa Hutunisia",
+ "symbol": "TND"
+ },
+ "ETB": {
+ "name": "Lupila lwa Huuhabeshi",
+ "symbol": "ETB"
+ },
+ "GBP": {
+ "name": "Lupila lwa Huuingereza",
+ "symbol": "£"
+ },
+ "CHF": {
+ "name": "Lupila lwa Huuswisi",
+ "symbol": "CHF"
+ },
+ "ZMW": {
+ "name": "Lupila lwa Huzambia",
+ "symbol": "ZMW"
+ },
+ "SZL": {
+ "name": "Lupila lwa Lilangeni",
+ "symbol": "SZL"
+ },
+ "SLL": {
+ "name": "Lupila lwa Lioni",
+ "symbol": "SLL"
+ },
+ "EUR": {
+ "name": "Lupila lwa Yulo",
+ "symbol": "€"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "Shilingi ya Hukenya",
+ "symbol": "KES"
+ },
+ "TZS": {
+ "name": "Shilingi ya Hutanzania",
+ "symbol": "TSh"
+ },
+ "UGX": {
+ "name": "Shilingi ya Huuganda",
+ "symbol": "UGX"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/bg.json b/library/intl/resources/currency/bg.json
new file mode 100644
index 000000000..b13dddefa
--- /dev/null
+++ b/library/intl/resources/currency/bg.json
@@ -0,0 +1,634 @@
+{
+ "AUD": {
+ "name": "ÐвÑтралийÑки долар",
+ "symbol": "AUD"
+ },
+ "AZN": {
+ "name": "ÐзербайджанÑки манат",
+ "symbol": "AZN"
+ },
+ "ALL": {
+ "name": "ÐлбанÑки лек",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "ÐлжирÑки динар",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "ÐнголÑка кванза",
+ "symbol": "AOA"
+ },
+ "ANG": {
+ "name": "ÐнтилÑки гулден",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ÐржентинÑко пеÑо",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "ÐрменÑки драм",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "ÐрубÑки флорин",
+ "symbol": "AWG"
+ },
+ "AFN": {
+ "name": "ÐфганиÑтанÑки афган",
+ "symbol": "AFN"
+ },
+ "BDT": {
+ "name": "Бангладешка така",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "БарбадоÑки долар",
+ "symbol": "BBD"
+ },
+ "BSD": {
+ "name": "БахамÑки долар",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "БахрейнÑки динар",
+ "symbol": "BHD"
+ },
+ "BYR": {
+ "name": "БеларуÑка рубла",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "БелизийÑки долар",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "БермудÑки долар",
+ "symbol": "BMD"
+ },
+ "BOB": {
+ "name": "БоливийÑко боливиано",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "БоÑненÑка конвертируема марка",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "БотÑванÑка пула",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "БразилÑки реал",
+ "symbol": "BRL"
+ },
+ "GBP": {
+ "name": "БританÑка лира",
+ "symbol": "GBP"
+ },
+ "BND": {
+ "name": "БрунейÑки долар",
+ "symbol": "BND"
+ },
+ "BIF": {
+ "name": "БурундийÑки франк",
+ "symbol": "BIF"
+ },
+ "BTN": {
+ "name": "БутанÑки нгултрум",
+ "symbol": "BTN"
+ },
+ "BGN": {
+ "name": "БългарÑки лев",
+ "symbol": "лв."
+ },
+ "VUV": {
+ "name": "ВануатÑко вату",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "ВенецуелÑки боливар",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "ВиетнамÑки донг",
+ "symbol": "VND"
+ },
+ "GMD": {
+ "name": "ГамбийÑко далаÑи",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "ГанайÑко Ñеди",
+ "symbol": "GHS"
+ },
+ "GYD": {
+ "name": "ГаÑнÑки долар",
+ "symbol": "GYD"
+ },
+ "GTQ": {
+ "name": "ГватемалÑки кетцал",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "ГвинейÑки франк",
+ "symbol": "GNF"
+ },
+ "GIP": {
+ "name": "ГибралтарÑка лира",
+ "symbol": "GIP"
+ },
+ "GEL": {
+ "name": "ГрузинÑки лари",
+ "symbol": "GEL"
+ },
+ "DKK": {
+ "name": "ДатÑка крона",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "ДжибутÑки франк",
+ "symbol": "DJF"
+ },
+ "AED": {
+ "name": "Дирхам на Обединените арабÑки емирÑтва",
+ "symbol": "AED"
+ },
+ "STD": {
+ "name": "Добра на Сао Томе и ПринÑипи",
+ "symbol": "STD"
+ },
+ "SBD": {
+ "name": "Долар на Соломоновите оÑтрови",
+ "symbol": "SBD"
+ },
+ "TTD": {
+ "name": "Долар на Тринидад и Тобаго",
+ "symbol": "TTD"
+ },
+ "DOP": {
+ "name": "ДоминиканÑко пеÑо",
+ "symbol": "DOP"
+ },
+ "EUR": {
+ "name": "Евро",
+ "symbol": "€"
+ },
+ "EGP": {
+ "name": "ЕгипетÑка лира",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "ЕритрейÑка накфа",
+ "symbol": "ERN"
+ },
+ "CVE": {
+ "name": "ЕÑкудо на Кабо Верде",
+ "symbol": "CVE"
+ },
+ "ETB": {
+ "name": "ЕтиопÑки бир",
+ "symbol": "ETB"
+ },
+ "ZMW": {
+ "name": "ЗамбийÑка куача",
+ "symbol": "ZMW"
+ },
+ "XOF": {
+ "name": "ЗападноафриканÑки франк",
+ "symbol": "CFA"
+ },
+ "ZWL": {
+ "name": "ЗимбабвийÑки долар (2009)",
+ "symbol": "ZWL"
+ },
+ "ILS": {
+ "name": "ИзраелÑки нов шекел",
+ "symbol": "ILS"
+ },
+ "XCD": {
+ "name": "ИзточнокарибÑки долар",
+ "symbol": "XCD"
+ },
+ "INR": {
+ "name": "ИндийÑка рупиÑ",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "ИндонезийÑка рупиÑ",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "ИракÑки динар",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "ИранÑки риал",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ИÑландÑка крона",
+ "symbol": "ISK"
+ },
+ "YER": {
+ "name": "ЙеменÑки риал",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "ЙорданÑки динар",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "КазахÑтанÑко тенге",
+ "symbol": "KZT"
+ },
+ "KYD": {
+ "name": "Кайманов долар",
+ "symbol": "KYD"
+ },
+ "KHR": {
+ "name": "КамбоджанÑки риел",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "КанадÑки долар",
+ "symbol": "CAD"
+ },
+ "QAR": {
+ "name": "КатарÑки риал",
+ "symbol": "QAR"
+ },
+ "KES": {
+ "name": "КенийÑки шилинг",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "КиргизÑтанÑки Ñом",
+ "symbol": "KGS"
+ },
+ "CNY": {
+ "name": "КитайÑки юан",
+ "symbol": "CNY"
+ },
+ "COP": {
+ "name": "КолумбийÑко пеÑо",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "КоморÑки франк",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "КонгоанÑки франк",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "КоÑтариканÑки колон",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "КубинÑко конвертируемо пеÑо",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "КубинÑко пеÑо",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "КувейтÑки динар",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "ЛаоÑки кип",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "ЛеÑотÑко лоти",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "ЛиберийÑки долар",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "ЛибийÑки динар",
+ "symbol": "LYD"
+ },
+ "LBP": {
+ "name": "ЛиванÑка лира",
+ "symbol": "LBP"
+ },
+ "SHP": {
+ "name": "Лира на Света Елена",
+ "symbol": "SHP"
+ },
+ "LTL": {
+ "name": "ЛитовÑки литаÑ",
+ "symbol": "LTL"
+ },
+ "MRO": {
+ "name": "МавританÑка угиÑ",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "МаврицийÑка рупиÑ",
+ "symbol": "MUR"
+ },
+ "MKD": {
+ "name": "МакедонÑки денар",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "МалавийÑка квача",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "МалайзийÑки рингит",
+ "symbol": "MYR"
+ },
+ "MGA": {
+ "name": "Малгашко ариари",
+ "symbol": "MGA"
+ },
+ "MVR": {
+ "name": "МалдивÑка руфиÑ",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "МароканÑки дирхам",
+ "symbol": "MAD"
+ },
+ "MXN": {
+ "name": "МекÑиканÑко пеÑо",
+ "symbol": "MXN"
+ },
+ "MMK": {
+ "name": "МианмарÑки киÑÑ‚",
+ "symbol": "MMK"
+ },
+ "MZN": {
+ "name": "МозамбикÑки метикал",
+ "symbol": "MZN"
+ },
+ "MDL": {
+ "name": "МолдовÑко леу",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "МонголÑки тугрик",
+ "symbol": "MNT"
+ },
+ "NAD": {
+ "name": "ÐамибийÑки долар",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "ÐепалÑка рупиÑ",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "ÐигерийÑка найра",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "ÐикарагуанÑка кордоба",
+ "symbol": "NIO"
+ },
+ "NZD": {
+ "name": "ÐовозеландÑки долар",
+ "symbol": "NZD"
+ },
+ "NOK": {
+ "name": "Ðорвежка крона",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "ОманÑки риал",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "ПакиÑтанÑка рупиÑ",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "ПанамÑка балбоа",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Папуа-новогвинейÑка кина",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "ПарагвайÑко гуарани",
+ "symbol": "PYG"
+ },
+ "MOP": {
+ "name": "Патака на Макао",
+ "symbol": "MOP"
+ },
+ "PEN": {
+ "name": "ПеруанÑки нов Ñол",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "ПолÑка злота",
+ "symbol": "PLN"
+ },
+ "RWF": {
+ "name": "РуандÑки франк",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "РумънÑка леÑ",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "РуÑка рубла",
+ "symbol": "руб."
+ },
+ "SVC": {
+ "name": "СалвадорÑки колон",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "СамоанÑка тала",
+ "symbol": "WST"
+ },
+ "SAR": {
+ "name": "СаудитÑкоарабÑки риал",
+ "symbol": "SAR"
+ },
+ "SZL": {
+ "name": "СвазилендÑки лилангени",
+ "symbol": "SZL"
+ },
+ "KPW": {
+ "name": "СевернокорейÑки вон",
+ "symbol": "KPW"
+ },
+ "SCR": {
+ "name": "СейшелÑка рупиÑ",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "СиералеонÑко леоне",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "СингапурÑки долар",
+ "symbol": "SGD"
+ },
+ "SYP": {
+ "name": "СирийÑка лира",
+ "symbol": "SYP"
+ },
+ "SOS": {
+ "name": "СомалийÑки шилинг",
+ "symbol": "SOS"
+ },
+ "RSD": {
+ "name": "СръбÑки динар",
+ "symbol": "RSD"
+ },
+ "SDG": {
+ "name": "СуданÑка лира",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "СуринамÑки долар",
+ "symbol": "SRD"
+ },
+ "TJS": {
+ "name": "ТаджикиÑтанÑки Ñомони",
+ "symbol": "TJS"
+ },
+ "TWD": {
+ "name": "ТайванÑки долар",
+ "symbol": "TWD"
+ },
+ "THB": {
+ "name": "ТайландÑки бат",
+ "symbol": "THB"
+ },
+ "TZS": {
+ "name": "ТанзанийÑки шилинг",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "ТонганÑка паанга",
+ "symbol": "TOP"
+ },
+ "TND": {
+ "name": "ТунизийÑки динар",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "ТуркменÑки манат",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "ТурÑка лира",
+ "symbol": "TRY"
+ },
+ "UGX": {
+ "name": "УгандÑки шилинг",
+ "symbol": "UGX"
+ },
+ "UZS": {
+ "name": "УзбекÑки Ñум",
+ "symbol": "UZS"
+ },
+ "UAH": {
+ "name": "УкраинÑка хривнÑ",
+ "symbol": "UAH"
+ },
+ "HUF": {
+ "name": "УнгарÑки форинт",
+ "symbol": "HUF"
+ },
+ "UYU": {
+ "name": "УругвайÑко пеÑо",
+ "symbol": "UYU"
+ },
+ "FJD": {
+ "name": "ФиджийÑки долар",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "ФилипинÑко пеÑо",
+ "symbol": "PHP"
+ },
+ "FKP": {
+ "name": "ФолклендÑка лира",
+ "symbol": "FKP"
+ },
+ "XPF": {
+ "name": "ФренÑкополинезийÑки франк",
+ "symbol": "CFPF"
+ },
+ "HTG": {
+ "name": "ХаитÑки гурд",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "ХондураÑка лемпира",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "ХонконгÑки долар",
+ "symbol": "HKD"
+ },
+ "HRK": {
+ "name": "ХърватÑка куна",
+ "symbol": "HRK"
+ },
+ "XAF": {
+ "name": "ЦентралноафриканÑки франк",
+ "symbol": "FCFA"
+ },
+ "CZK": {
+ "name": "Чешка крона",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "ЧилийÑко пеÑо",
+ "symbol": "CLP"
+ },
+ "SEK": {
+ "name": "ШведÑка крона",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "ШвейцарÑки франк",
+ "symbol": "CHF"
+ },
+ "LKR": {
+ "name": "ШриланкÑка рупиÑ",
+ "symbol": "LKR"
+ },
+ "USD": {
+ "name": "ЩатÑки долар",
+ "symbol": "щ.д."
+ },
+ "ZAR": {
+ "name": "ЮжноафриканÑки ранд",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "ЮжнокорейÑки вон",
+ "symbol": "KRW"
+ },
+ "SSP": {
+ "name": "ЮжноÑуданÑка лира",
+ "symbol": "SSP"
+ },
+ "JMD": {
+ "name": "ЯмайÑки долар",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "ЯпонÑка йена",
+ "symbol": "JPY"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/bm.json b/library/intl/resources/currency/bm.json
new file mode 100644
index 000000000..069cf70b5
--- /dev/null
+++ b/library/intl/resources/currency/bm.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "DZD": {
+ "name": "alizeri Dinar",
+ "symbol": "DZD"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "USD": {
+ "name": "ameriki Dolar",
+ "symbol": "US$"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "GBP": {
+ "name": "angilÉ› Livri Siterlingi",
+ "symbol": "£"
+ },
+ "AOA": {
+ "name": "angola Kwanza",
+ "symbol": "AOA"
+ },
+ "AED": {
+ "name": "arabu mara kafoli Diram",
+ "symbol": "AED"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BHD": {
+ "name": "bareyini Dinar",
+ "symbol": "BHD"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BWP": {
+ "name": "bɔtisiwana Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BIF": {
+ "name": "burundi Fraŋ",
+ "symbol": "BIF"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CVE": {
+ "name": "capivɛrdi Esekudo",
+ "symbol": "CVE"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "ERN": {
+ "name": "eritere Nafika",
+ "symbol": "ERN"
+ },
+ "EUR": {
+ "name": "ero",
+ "symbol": "€"
+ },
+ "ETB": {
+ "name": "etiopi Bir",
+ "symbol": "ETB"
+ },
+ "EGP": {
+ "name": "eziputi Livri",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "ÆlÉ›ni-Senu Livri",
+ "symbol": "SHP"
+ },
+ "INR": {
+ "name": "Ændu Rupi",
+ "symbol": "₹"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GMD": {
+ "name": "gambi Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "DJF": {
+ "name": "jibuti Fraŋ",
+ "symbol": "DJF"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "CAD": {
+ "name": "kanada Dolar",
+ "symbol": "CA$"
+ },
+ "KES": {
+ "name": "keniya Siling",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "komɔri Fraŋ",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "kongole Fraŋ",
+ "symbol": "CDF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "lesoto Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "liberiya Dolar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "libi Dinar",
+ "symbol": "LYD"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MGA": {
+ "name": "madagasikari Fraŋ",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "malawi Kwaca",
+ "symbol": "MWK"
+ },
+ "MAD": {
+ "name": "marɔku Diram",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MUR": {
+ "name": "morisi Rupi",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "mɔritani Uguwiya",
+ "symbol": "MRO"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "namibi Dolar",
+ "symbol": "NAD"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "nizeriya Nɛra",
+ "symbol": "NGN"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "AUD": {
+ "name": "ositirali Dolar",
+ "symbol": "A$"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "ruwanda Fraŋ",
+ "symbol": "RWF"
+ },
+ "STD": {
+ "name": "sawotome Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "sawudiya Riyal",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "XOF": {
+ "name": "sefa Fraŋ (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "sefa Fraŋ (BEAC)",
+ "symbol": "FCFA"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SCR": {
+ "name": "sesɛli Rupi",
+ "symbol": "SCR"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "CNY": {
+ "name": "siniwa Yuwan",
+ "symbol": "CNÂ¥"
+ },
+ "SLL": {
+ "name": "siyeralewɔni Lewɔni",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "somali Siling",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "ZAR": {
+ "name": "sudafriki Randi",
+ "symbol": "ZAR"
+ },
+ "SDG": {
+ "name": "sudani Dinar",
+ "symbol": "SDG"
+ },
+ "CHF": {
+ "name": "suwisi Fraŋ",
+ "symbol": "CHF"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SZL": {
+ "name": "swazilandi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "TZS": {
+ "name": "tanzani Siling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "tunizi Dinar",
+ "symbol": "TND"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "uganda Siling",
+ "symbol": "UGX"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "zambi Kwaca",
+ "symbol": "ZMW"
+ },
+ "JPY": {
+ "name": "zapɔne Yɛn",
+ "symbol": "JPÂ¥"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/bn.json b/library/intl/resources/currency/bn.json
new file mode 100644
index 000000000..2ce66d769
--- /dev/null
+++ b/library/intl/resources/currency/bn.json
@@ -0,0 +1,634 @@
+{
+ "AUD": {
+ "name": "অসà§à¦Ÿà§à¦°à§‡à¦²à¦¿à¦¯à¦¼à¦¾à¦¨ ডলার",
+ "symbol": "A$"
+ },
+ "ISK": {
+ "name": "আইসলà§à¦¯à¦¾à¦¨à§à¦¡ কà§à¦°à§Œà¦¨",
+ "symbol": "ISK"
+ },
+ "AZN": {
+ "name": "আজারবাইজান মানাত",
+ "symbol": "AZN"
+ },
+ "AFN": {
+ "name": "আফগান আফগানি",
+ "symbol": "AFN"
+ },
+ "AMD": {
+ "name": "আরমেনিয়ান দà§à¦°à¦¾à¦®",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "আরà§à¦¬à¦¾ গিলà§à¦¡à¦¾à¦°",
+ "symbol": "AWG"
+ },
+ "ARS": {
+ "name": "আরà§à¦œà§‡à¦¨à§à¦Ÿà¦¿à¦¨à¦¾ পেসো",
+ "symbol": "ARS"
+ },
+ "DZD": {
+ "name": "আলজেরীয় দিনার",
+ "symbol": "DZD"
+ },
+ "ALL": {
+ "name": "আলবেনিয়ান লেক",
+ "symbol": "ALL"
+ },
+ "UAH": {
+ "name": "ইউকà§à¦°à§‡à¦‡à¦¨ হৃভনিয়া",
+ "symbol": "UAH"
+ },
+ "EUR": {
+ "name": "ইউরো",
+ "symbol": "€"
+ },
+ "ETB": {
+ "name": "ইথিওপিয়ান বির",
+ "symbol": "ETB"
+ },
+ "IDR": {
+ "name": "ইনà§à¦¦à§‹à¦¨à§‡à¦¶à¦¿à¦¯à¦¼à¦¾à¦¨ রà§à¦ªà¦¿à¦¯à¦¼à¦¾à¦¹",
+ "symbol": "IDR"
+ },
+ "YER": {
+ "name": "ইয়েমেনি রিয়াল",
+ "symbol": "YER"
+ },
+ "IQD": {
+ "name": "ইরাকি দিনার",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "ইরানিয়ান রিয়াল",
+ "symbol": "IRR"
+ },
+ "ILS": {
+ "name": "ইসà§à¦°à¦¾à¦‡à¦²à¦¿ নতà§à¦¨ শেকেল",
+ "symbol": "₪"
+ },
+ "UGX": {
+ "name": "উগানà§à¦¡à¦¾à¦¨ শিলিং",
+ "symbol": "UGX"
+ },
+ "UZS": {
+ "name": "উজবেকিসà§à¦¤à¦¾à¦¨à¦¿ সোম",
+ "symbol": "UZS"
+ },
+ "KPW": {
+ "name": "উতà§à¦¤à¦° কোরিয়ার ওন",
+ "symbol": "KPW"
+ },
+ "UYU": {
+ "name": "উরà§à¦—à§à¦¯à¦¼à§‡ পেসো",
+ "symbol": "UYU"
+ },
+ "ERN": {
+ "name": "à¦à¦°à¦¿à¦Ÿà§à¦°à¦¿à¦¯à¦¼à§‡à¦¨ নাকফা",
+ "symbol": "ERN"
+ },
+ "SVC": {
+ "name": "à¦à¦² সà§à¦¯à¦¾à¦²à¦­à§‹à¦¡à§‹à¦° কোলোন",
+ "symbol": "SVC"
+ },
+ "AOA": {
+ "name": "à¦à§à¦¯à¦¾à¦™à§à¦—োলান কওয়ানজা",
+ "symbol": "AOA"
+ },
+ "OMR": {
+ "name": "ওমানি রিয়াল",
+ "symbol": "OMR"
+ },
+ "CDF": {
+ "name": "কঙà§à¦—োলিস ফà§à¦°à§à¦¯à¦¾à¦™à§à¦•",
+ "symbol": "CDF"
+ },
+ "KHR": {
+ "name": "কমà§à¦¬à§‹à¦¡à¦¿à¦¯à¦¼à¦¾à¦¨ রিয়েল",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "কমà§à¦¬à§‹à¦°à§‹ ফà§à¦°à¦¾à¦™à§à¦•",
+ "symbol": "KMF"
+ },
+ "COP": {
+ "name": "কলোমà§à¦¬à¦¿à¦¯à¦¼à¦¾à¦¨ পেসো",
+ "symbol": "COP"
+ },
+ "KZT": {
+ "name": "কাজাকà§à¦¸à¦Ÿà¦¾à¦¨ টেঙà§à¦—ে",
+ "symbol": "KZT"
+ },
+ "QAR": {
+ "name": "কাতার রিয়à§à¦¯à¦¾à¦²",
+ "symbol": "QAR"
+ },
+ "CAD": {
+ "name": "কানাডিয়ান ডলার",
+ "symbol": "CA$"
+ },
+ "CUP": {
+ "name": "কিউবান পেসো",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "কিউবান রূপানà§à¦¤à¦°à¦¯à§‹à¦—à§à¦¯ পেসো",
+ "symbol": "CUC"
+ },
+ "KGS": {
+ "name": "কিরগিজসà§à¦¤à¦¾à¦¨ সোম",
+ "symbol": "KGS"
+ },
+ "KWD": {
+ "name": "কà§à¦¯à¦¼à§‡à¦¤à¦¿ দিনার",
+ "symbol": "KWD"
+ },
+ "KES": {
+ "name": "কেনিয়ান শিলিং",
+ "symbol": "KES"
+ },
+ "CVE": {
+ "name": "কেপ ভারà§à¦¦à§‡ à¦à¦¸à¦•à§à¦¡à§‹",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "কেমà§à¦¯à¦¾à¦¨ দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œà§‡à¦° ডলার",
+ "symbol": "KYD"
+ },
+ "CRC": {
+ "name": "কোসà§à¦Ÿà¦¾ রিকা কোলোন",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "কà§à¦°à§‹à¦¯à¦¼à§‡à¦¶à¦¿à¦¯à¦¼à¦¾à¦¨ কà§à¦¨à¦¾",
+ "symbol": "HRK"
+ },
+ "GYD": {
+ "name": "গাইয়েনা ডলার",
+ "symbol": "GYD"
+ },
+ "GMD": {
+ "name": "গামà§à¦¬à¦¿à¦¯à¦¼à¦¾ ডালাসি",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "গিনি ফà§à¦°à¦¾à¦™à§à¦•",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "গà§à¦¯à¦¼à¦¾à¦¤à§‡à¦®à¦¾à¦²à¦¾ কà§à¦¯à¦¼à§‡à§Žà¦œà¦¾à¦²",
+ "symbol": "GTQ"
+ },
+ "GHS": {
+ "name": "ঘানা সেডি",
+ "symbol": "GHS"
+ },
+ "CLP": {
+ "name": "চিলি পেসো",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "চীনা য়à§à¦¯à¦¼à¦¾à¦¨",
+ "symbol": "CNÂ¥"
+ },
+ "CZK": {
+ "name": "চেকোসà§à¦²à§‹à¦­à¦¾à¦• কোরà§à¦¨à¦¾",
+ "symbol": "CZK"
+ },
+ "GEL": {
+ "name": "জরà§à¦œà¦¿à¦¯à¦¼à¦¾à¦¨ লারি",
+ "symbol": "GEL"
+ },
+ "JOD": {
+ "name": "জরà§à¦¡à¦¾à¦¨à¦¿à¦¯à¦¼à¦¾à¦¨ দিনার",
+ "symbol": "JOD"
+ },
+ "JPY": {
+ "name": "জাপানি ইয়েন",
+ "symbol": "JPÂ¥"
+ },
+ "ZMW": {
+ "name": "জামà§à¦¬à¦¿à¦¯à¦¼à¦¾à¦¨ কওয়াচা",
+ "symbol": "ZMW"
+ },
+ "DJF": {
+ "name": "জিবà§à¦¤à¦¿ ফà§à¦°à¦¾à¦™à§à¦•",
+ "symbol": "DJF"
+ },
+ "GIP": {
+ "name": "জিবà§à¦°à¦¾à¦²à§à¦Ÿà¦¾à¦° পাউনà§à¦¡",
+ "symbol": "GIP"
+ },
+ "ZWL": {
+ "name": "জিমà§à¦¬à¦¾à¦¬à§à¦¯à¦¼à§‡ ডলার (২০০৯)",
+ "symbol": "ZWL"
+ },
+ "JMD": {
+ "name": "জà§à¦¯à¦¾à¦®à¦¾à¦‡à¦•à¦¾à¦¨ ডলার",
+ "symbol": "JMD"
+ },
+ "TOP": {
+ "name": "টোঙà§à¦—া পা’আঙà§à¦—া",
+ "symbol": "TOP"
+ },
+ "DOP": {
+ "name": "ডোমিনিকান পেসো",
+ "symbol": "DOP"
+ },
+ "DKK": {
+ "name": "ডà§à¦¯à¦¾à¦¨à¦¿à¦¶ কà§à¦°à§Œà¦¨",
+ "symbol": "DKK"
+ },
+ "TJS": {
+ "name": "তাজিকিসà§à¦¤à¦¾à¦¨ সোমোনি",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "তাঞà§à¦œà¦¨à¦¿à¦¯à¦¼à¦¾ শিলিং",
+ "symbol": "TZS"
+ },
+ "TND": {
+ "name": "তিউনেশিয়ান দিনার",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "তà§à¦°à§à¦•à¦®à§‡à¦¨à¦¿à¦¸à§à¦¤à¦¾à¦¨ নতà§à¦¨ মানত",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "তà§à¦°à§à¦•à¦¿ লিরা",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "তà§à¦°à¦¿à¦¨à¦¿à¦¦à¦¾à¦¦ à¦à¦¬à¦‚ টোবাগো ডলার",
+ "symbol": "TTD"
+ },
+ "THB": {
+ "name": "থাই বাত",
+ "symbol": "฿"
+ },
+ "ZAR": {
+ "name": "দকà§à¦·à¦¿à¦£ আফà§à¦°à¦¿à¦•à¦¾à¦¨ রেনà§à¦¡",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "দকà§à¦·à¦¿à¦£ কোরিয়ান ওন",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "দকà§à¦·à¦¿à¦£ সà§à¦¦à¦¾à¦¨à¦¿ পাউনà§à¦¡",
+ "symbol": "SSP"
+ },
+ "TWD": {
+ "name": "নতà§à¦¨ তাইওয়ান ডলার",
+ "symbol": "NT$"
+ },
+ "NOK": {
+ "name": "নরওয়ে কà§à¦°à§Œà¦¨",
+ "symbol": "NOK"
+ },
+ "NGN": {
+ "name": "নাইজেরিয়ান নায়রা",
+ "symbol": "NGN"
+ },
+ "NAD": {
+ "name": "নামিবিয়া ডলার",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "নিউজিলà§à¦¯à¦¾à¦¨à§à¦¡ ডলার",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "নিকারাগà§à¦¯à¦¼à¦¾à¦¨ করà§à¦¡à§‹à¦¬à¦¾",
+ "symbol": "NIO"
+ },
+ "ANG": {
+ "name": "নেদারলà§à¦¯à¦¾à¦¨à§à¦¡ à¦à§à¦¯à¦¾à¦¨à§à¦Ÿà¦¿à¦²à¦¿à¦¯à¦¼à¦¾à¦¨ গà§à¦²à§à¦¡à§‡à¦°",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "নেপালি রà§à¦ªà¦¿",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "পাকিসà§à¦¤à¦¾à¦¨à¦¿ রà§à¦ªà¦¿",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "পানামা বেলবোয়া",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "পাপà§à¦¯à¦¼à¦¾ নিউ গিনিয়ান কিনা",
+ "symbol": "PGK"
+ },
+ "XCD": {
+ "name": "পূরà§à¦¬ কà§à¦¯à¦¾à¦°à¦¾à¦¬à¦¿à¦¯à¦¼à¦¾à¦¨ ডলার",
+ "symbol": "EC$"
+ },
+ "PEN": {
+ "name": "পেরà§à¦­à¦¿à¦¯à¦¼à¦¾à¦¨ সোল নà§à¦¯à¦¼à§‡à¦­à§‹",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "পোলিশ জà§à¦²à§‹à¦Ÿà¦¿",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "পà§à¦¯à¦¾à¦°à¦—à§à¦¯à¦¼à¦¾à¦¨",
+ "symbol": "PYG"
+ },
+ "FKP": {
+ "name": "ফকলà§à¦¯à¦¾à¦¨à§à¦¡ দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ পাউনà§à¦¡",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "ফিজি ডলার",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "ফিলিপাইন পেসো",
+ "symbol": "PHP"
+ },
+ "BWP": {
+ "name": "বতসোয়ানা পà§à¦²à¦¾",
+ "symbol": "BWP"
+ },
+ "BOB": {
+ "name": "বলিভিয়ানো",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "বসনিয়া à¦à¦¬à¦‚ হারà§à¦œà§‡à¦—োভিনা মারà§à¦•",
+ "symbol": "BAM"
+ },
+ "BDT": {
+ "name": "বাংলাদেশী টাকা",
+ "symbol": "৳"
+ },
+ "BMD": {
+ "name": "বারমিউডান ডলার",
+ "symbol": "BMD"
+ },
+ "BBD": {
+ "name": "বারà§à¦¬à§‡à¦¡à§‹à¦œ ডলার",
+ "symbol": "BBD"
+ },
+ "BHD": {
+ "name": "বাহরাইনি দিনার",
+ "symbol": "BHD"
+ },
+ "BSD": {
+ "name": "বাহামিয়ান ডলার",
+ "symbol": "BSD"
+ },
+ "BIF": {
+ "name": "বà§à¦°à§à¦¨à§à¦¡à¦¿ ফà§à¦°à¦¾à¦™à§à¦•",
+ "symbol": "BIF"
+ },
+ "BGN": {
+ "name": "বà§à¦²à¦—েরীয় নিউ লেভ",
+ "symbol": "BGN"
+ },
+ "BYR": {
+ "name": "বেলারà§à¦¶à¦¿à¦¯à¦¼à¦¾à¦¨ রà§à¦¬à§‡à¦²",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "বেলিজ ডলার",
+ "symbol": "BZD"
+ },
+ "BRL": {
+ "name": "বà§à¦°à¦¾à¦œà¦¿à¦²à¦¿à¦¯à¦¼à¦¾à¦¨ রিয়েল",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "বà§à¦°à¦¿à¦Ÿà¦¿à¦¶ পাউনà§à¦¡ সà§à¦Ÿà¦¾à¦°à§à¦²à¦¿à¦‚",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "বà§à¦°à§à¦¨à§‡à¦‡ ডলার",
+ "symbol": "BND"
+ },
+ "VUV": {
+ "name": "ভানà§à¦¯à¦¼à¦¾à¦¤à§ ভাতà§",
+ "symbol": "VUV"
+ },
+ "INR": {
+ "name": "ভারতীয় রà§à¦ªà¦¿",
+ "symbol": "₹"
+ },
+ "VND": {
+ "name": "ভিয়েতনামি ডঙà§à¦—",
+ "symbol": "â‚«"
+ },
+ "BTN": {
+ "name": "ভà§à¦Ÿà¦¾à¦¨à¦¿ à¦à¦¨à¦—à§à¦²à§à¦Ÿà§à¦°à§à¦®",
+ "symbol": "BTN"
+ },
+ "VEF": {
+ "name": "ভেনিজà§à¦¯à¦¼à§‡à¦²à§€à¦¯à¦¼ বলিভার",
+ "symbol": "VEF"
+ },
+ "MNT": {
+ "name": "মঙà§à¦—োলিয়ান তà§à¦—রিক",
+ "symbol": "MNT"
+ },
+ "MGA": {
+ "name": "মাদাগাসà§à¦•à¦¾à¦° আরিয়ারি",
+ "symbol": "MGA"
+ },
+ "MMK": {
+ "name": "মায়ানমার কিয়াত",
+ "symbol": "MMK"
+ },
+ "USD": {
+ "name": "মারà§à¦•à¦¿à¦¨ ডলার",
+ "symbol": "US$"
+ },
+ "MVR": {
+ "name": "মালদিভিয়ান রà§à¦«à¦¿à¦¯à¦¼à¦¾",
+ "symbol": "MVR"
+ },
+ "MYR": {
+ "name": "মালয়েশিয়ান রিঙà§à¦—িৎ",
+ "symbol": "MYR"
+ },
+ "MWK": {
+ "name": "মালাউইয়ান কওয়াচ",
+ "symbol": "MWK"
+ },
+ "EGP": {
+ "name": "মিশরীয় পাউনà§à¦¡",
+ "symbol": "EGP"
+ },
+ "MZN": {
+ "name": "মোজামà§à¦¬à¦¿à¦• মেটিকেল",
+ "symbol": "MZN"
+ },
+ "MAD": {
+ "name": "মোরোকà§à¦•à¦¾à¦¨ দিরহাম",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "মোলà§à¦¡à§‹à¦­à¦¾à¦¨ লেয়à§",
+ "symbol": "MDL"
+ },
+ "MRO": {
+ "name": "মৌরিতানিয়ান ওউগà§à¦‡à¦¯à¦¼à¦¾",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "মৌরিতানিয়ান রà§à¦ªà¦¿",
+ "symbol": "MUR"
+ },
+ "MOP": {
+ "name": "মà§à¦¯à¦¾à¦•à§à¦¯à¦¾à¦“ পাটাকা",
+ "symbol": "MOP"
+ },
+ "MXN": {
+ "name": "মà§à¦¯à¦¾à¦•à§à¦¸à¦¿à¦•à¦¾à¦¨ পেসো",
+ "symbol": "MX$"
+ },
+ "MKD": {
+ "name": "মà§à¦¯à¦¾à¦¸à§‡à¦¡à§‹à¦¨à¦¿à¦¯à¦¼à¦¾à¦¨ দিনার",
+ "symbol": "MKD"
+ },
+ "RUB": {
+ "name": "রাশিয়ান রà§à¦¬à§‡à¦²",
+ "symbol": "RUB"
+ },
+ "RON": {
+ "name": "রà§à¦®à¦¾à¦¨à¦¿à¦¯à¦¼à¦¾ লেয়à§",
+ "symbol": "RON"
+ },
+ "RWF": {
+ "name": "রà§à¦¯à¦¼à¦¾à¦¨à§à¦¡à¦¾à¦¨ ফà§à¦°à¦¾à¦™à§à¦•",
+ "symbol": "RWF"
+ },
+ "LRD": {
+ "name": "লাইবেরিয়ান ডলার",
+ "symbol": "LRD"
+ },
+ "LTL": {
+ "name": "লিথà§à¦‡à¦¨à¦¿à¦¯à¦¼à¦¾à¦¨ লিটা",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "লিবিয়ান ডলার",
+ "symbol": "LYD"
+ },
+ "LAK": {
+ "name": "লেউশান কিপ",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "লেবানিজ পাউনà§à¦¡",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "লেসà§à¦Ÿà§ লোটি",
+ "symbol": "LSL"
+ },
+ "LKR": {
+ "name": "শà§à¦°à§€à¦²à¦™à§à¦•à¦¾à¦¨ রà§à¦ªà¦¿",
+ "symbol": "LKR"
+ },
+ "AED": {
+ "name": "সংযà§à¦•à§à¦¤ আরব আমিরাত দিরহাম",
+ "symbol": "AED"
+ },
+ "SBD": {
+ "name": "সলোমন দà§à¦¬à§€à¦ªà¦ªà§à¦žà§à¦œ ডলার",
+ "symbol": "SBD"
+ },
+ "STD": {
+ "name": "সাও টোমে à¦à¦¬à¦‚ পà§à¦°à¦¿à¦¨à§à¦¸à¦¿à¦ªà§‡ ডোবরা",
+ "symbol": "STD"
+ },
+ "WST": {
+ "name": "সামোয়ান টালা",
+ "symbol": "WST"
+ },
+ "RSD": {
+ "name": "সারবিয়ান দিনার",
+ "symbol": "RSD"
+ },
+ "XAF": {
+ "name": "সিà¦à¦«à¦ ফà§à¦°à§à¦¯à¦¾à¦™à§à¦• বিইà¦à¦¸à¦¿",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "সিà¦à¦«à¦ ফà§à¦°à§à¦¯à¦¾à¦™à§à¦• বিসিইà¦à¦“",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "সিà¦à¦«à¦ªà¦¿ ফà§à¦°à§à¦¯à¦¾à¦™à§à¦•",
+ "symbol": "CFPF"
+ },
+ "SGD": {
+ "name": "সিঙà§à¦—াপà§à¦° ডলার",
+ "symbol": "SGD"
+ },
+ "SLL": {
+ "name": "সিয়েরালিয়ন লিয়ন",
+ "symbol": "SLL"
+ },
+ "SYP": {
+ "name": "সিরিয়ান পাউনà§à¦¡",
+ "symbol": "SYP"
+ },
+ "SEK": {
+ "name": "সà§à¦‡à¦¡à¦¿à¦¶ কà§à¦°à§‹à¦¨à¦¾",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "সà§à¦‡à¦¸ ফà§à¦°à¦¾à¦™à§à¦•",
+ "symbol": "CHF"
+ },
+ "SDG": {
+ "name": "সà§à¦¦à¦¾à¦¨à¦¿ পাউনà§à¦¡",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "সà§à¦°à¦¿à¦¨à¦¾à¦® ডলার",
+ "symbol": "SRD"
+ },
+ "SHP": {
+ "name": "সেনà§à¦Ÿ হেলেনা পাউনà§à¦¡",
+ "symbol": "SHP"
+ },
+ "SCR": {
+ "name": "সেয়চেলà§à¦²à§‹à¦‡à¦¸ রà§à¦ªà¦¿",
+ "symbol": "SCR"
+ },
+ "SOS": {
+ "name": "সোমালি শিলিং",
+ "symbol": "SOS"
+ },
+ "SZL": {
+ "name": "সোয়াজিলà§à¦¯à¦¾à¦¨à§à¦¡ লিলাঙà§à¦—েনি",
+ "symbol": "SZL"
+ },
+ "SAR": {
+ "name": "সৌদি রিয়à§à¦¯à¦¾à¦²",
+ "symbol": "SAR"
+ },
+ "HKD": {
+ "name": "হংকং ডলার",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "হনà§à¦¡à§à¦°à¦¾à¦¸ লেমà§à¦ªà¦¿à¦°à¦¾",
+ "symbol": "HNL"
+ },
+ "HTG": {
+ "name": "হাইতি গৌরà§à¦¦à§‡",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "হাঙà§à¦—েরিয়ান ফোরিনà§à¦Ÿ",
+ "symbol": "HUF"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/bo.json b/library/intl/resources/currency/bo.json
new file mode 100644
index 000000000..46970dd56
--- /dev/null
+++ b/library/intl/resources/currency/bo.json
@@ -0,0 +1,634 @@
+{
+ "AED": {
+ "name": "AED",
+ "symbol": "AED"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "AOA",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AUD": {
+ "name": "AUD",
+ "symbol": "A$"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BHD": {
+ "name": "BHD",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "BIF",
+ "symbol": "BIF"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BWP": {
+ "name": "BWP",
+ "symbol": "BWP"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CAD": {
+ "name": "CAD",
+ "symbol": "CA$"
+ },
+ "CDF": {
+ "name": "CDF",
+ "symbol": "CDF"
+ },
+ "CHF": {
+ "name": "CHF",
+ "symbol": "CHF"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CVE": {
+ "name": "CVE",
+ "symbol": "CVE"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DJF": {
+ "name": "DJF",
+ "symbol": "DJF"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "DZD": {
+ "name": "DZD",
+ "symbol": "DZD"
+ },
+ "EGP": {
+ "name": "EGP",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "ERN",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "ETB",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "EUR",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GBP": {
+ "name": "GBP",
+ "symbol": "£"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GMD": {
+ "name": "GMD",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "JPY": {
+ "name": "JPY",
+ "symbol": "JPÂ¥"
+ },
+ "KES": {
+ "name": "KES",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "KMF",
+ "symbol": "KMF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LRD": {
+ "name": "LRD",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "LYD",
+ "symbol": "LYD"
+ },
+ "MAD": {
+ "name": "MAD",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MGA": {
+ "name": "MGA",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MRO": {
+ "name": "MRO",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "MWK",
+ "symbol": "MWK"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SAR": {
+ "name": "SAR",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "SDG",
+ "symbol": "SDG"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SOS",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "TND",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "TZS": {
+ "name": "TZS",
+ "symbol": "TZS"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "UGX",
+ "symbol": "UGX"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZAR": {
+ "name": "ZAR",
+ "symbol": "ZAR"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "CNY": {
+ "name": "ཡུ་ཨན་",
+ "symbol": "Â¥"
+ },
+ "INR": {
+ "name": "རྒྱ་གར་སྒོར་མོ་",
+ "symbol": "₹"
+ },
+ "USD": {
+ "name": "ཨ་རིའི་སྒོར་མོà¼",
+ "symbol": "US$"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/br.json b/library/intl/resources/currency/br.json
new file mode 100644
index 000000000..556fd5444
--- /dev/null
+++ b/library/intl/resources/currency/br.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afghani Afghanistan",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariary Madagaskar",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "baht Thailand",
+ "symbol": "THB"
+ },
+ "PAB": {
+ "name": "balboa Panamá",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "birr Etiopia",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolivar Venezuela",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano Bolivia",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi Ghana",
+ "symbol": "GHS"
+ },
+ "CRC": {
+ "name": "colón Costa Rica",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón Salvador",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "cordoba Nicaragua",
+ "symbol": "NIO"
+ },
+ "GMD": {
+ "name": "dalasi Gambia",
+ "symbol": "GMD"
+ },
+ "MKD": {
+ "name": "denar Makedonia",
+ "symbol": "MKD"
+ },
+ "DZD": {
+ "name": "dinar Aljeria",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar Bahrein",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar Iraq",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar Jordania",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar Koweit",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar Libia",
+ "symbol": "LYD"
+ },
+ "RSD": {
+ "name": "dinar Serbia",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar Tunizia",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dirham EAU",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dirham Maroko",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra São Tomé ha Príncipe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dollar Aostralia",
+ "symbol": "$A"
+ },
+ "BSD": {
+ "name": "dollar Bahamas",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dollar Barbados",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dollar Belize",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "dollar Bermuda",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "dollar Brunei",
+ "symbol": "BND"
+ },
+ "FJD": {
+ "name": "dollar Fidji",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dollar Guyana",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dollar Hong Kong",
+ "symbol": "$ HK"
+ },
+ "KYD": {
+ "name": "dollar Inizi Cayman",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "dollar Inizi Salomon",
+ "symbol": "SBD"
+ },
+ "JMD": {
+ "name": "dollar Jamaika",
+ "symbol": "JMD"
+ },
+ "CAD": {
+ "name": "dollar Kanada",
+ "symbol": "$CA"
+ },
+ "XCD": {
+ "name": "dollar Karib ar reter",
+ "symbol": "EC$"
+ },
+ "LRD": {
+ "name": "dollar Liberia",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dollar Namibia",
+ "symbol": "NAD"
+ },
+ "TWD": {
+ "name": "dollar nevez Taiwan",
+ "symbol": "NT$"
+ },
+ "SGD": {
+ "name": "dollar Singapour",
+ "symbol": "SGD"
+ },
+ "USD": {
+ "name": "dollar SU",
+ "symbol": "$ SU"
+ },
+ "SRD": {
+ "name": "dollar Surinam",
+ "symbol": "SRD"
+ },
+ "TTD": {
+ "name": "dollar Trinidad ha Tobago",
+ "symbol": "TTD"
+ },
+ "NZD": {
+ "name": "dollar Zeland-Nevez",
+ "symbol": "$ ZN"
+ },
+ "ZWL": {
+ "name": "dollar Zimbabwe (2009)",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong Viêt Nam",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "dram Armenia",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo Kab Glas",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "ANG": {
+ "name": "florin Antilhez nederlandat",
+ "symbol": "ANG"
+ },
+ "AWG": {
+ "name": "florin Aruba",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "forint Hungaria",
+ "symbol": "HUF"
+ },
+ "HTG": {
+ "name": "gourde Haiti",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "guarani Paraguay",
+ "symbol": "PYG"
+ },
+ "UAH": {
+ "name": "hryvnia Ukraina",
+ "symbol": "UAH"
+ },
+ "PGK": {
+ "name": "kina Papoua Ginea-Nevez",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip Laos",
+ "symbol": "LAK"
+ },
+ "HRK": {
+ "name": "kuna Kroatia",
+ "symbol": "HRK"
+ },
+ "DKK": {
+ "name": "kurunenn Danmark",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "kurunenn Island",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "kurunenn Norvegia",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "kurunenn Sveden",
+ "symbol": "SEK"
+ },
+ "CZK": {
+ "name": "kurunenn Tchek",
+ "symbol": "CZK"
+ },
+ "MWK": {
+ "name": "kwacha Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kwacha Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "kwanza Angola",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "kyat Myanmar",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "lari Jorjia",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek Albania",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira Honduras",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leone Sierra Leone",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu Moldova",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu Roumania",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "lev Bulgaria",
+ "symbol": "BGN"
+ },
+ "SZL": {
+ "name": "lilangeni Swaziland",
+ "symbol": "SZL"
+ },
+ "LTL": {
+ "name": "litas Lituania",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti Lesotho",
+ "symbol": "LSL"
+ },
+ "BIF": {
+ "name": "lur Burundi",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "lur CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "lur CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "lur CFP",
+ "symbol": "CFPF"
+ },
+ "DJF": {
+ "name": "lur Djibouti",
+ "symbol": "DJF"
+ },
+ "EGP": {
+ "name": "lur Egipt",
+ "symbol": "EGP"
+ },
+ "GNF": {
+ "name": "lur Ginea",
+ "symbol": "GNF"
+ },
+ "FKP": {
+ "name": "lur Inizi Falkland",
+ "symbol": "FKP"
+ },
+ "GIP": {
+ "name": "lur Jibraltar",
+ "symbol": "GIP"
+ },
+ "KMF": {
+ "name": "lur Komorez",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "lur Kongo",
+ "symbol": "CDF"
+ },
+ "LBP": {
+ "name": "lur Liban",
+ "symbol": "LBP"
+ },
+ "RWF": {
+ "name": "lur Rwanda",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "lur Saint-Helena",
+ "symbol": "SHP"
+ },
+ "SYP": {
+ "name": "lur Siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "lur Soudan",
+ "symbol": "SDG"
+ },
+ "GBP": {
+ "name": "lur sterling Breizh-Veur",
+ "symbol": "£ RU"
+ },
+ "CHF": {
+ "name": "lur Suis",
+ "symbol": "CHF"
+ },
+ "SSP": {
+ "name": "lur Susoudan",
+ "symbol": "SSP"
+ },
+ "TRY": {
+ "name": "lur Turkia",
+ "symbol": "TRY"
+ },
+ "AZN": {
+ "name": "manat Azerbaidjan",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat Turkmenistan",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "mark kemmadus Bosnia ha Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical Mozambik",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira Nigeria",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa Eritrea",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "ngultrum Bhoutan",
+ "symbol": "BTN"
+ },
+ "PEN": {
+ "name": "nuevo sol Perou",
+ "symbol": "PEN"
+ },
+ "MRO": {
+ "name": "ouguiya Maouritania",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "paʻanga Tonga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca Macau",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso Arcʼhantina",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso Chile",
+ "symbol": "CLP"
+ },
+ "DOP": {
+ "name": "peso Dominikan",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso Filipinez",
+ "symbol": "PHP"
+ },
+ "CUC": {
+ "name": "peso kemmadus Kuba",
+ "symbol": "CUC"
+ },
+ "COP": {
+ "name": "peso Kolombia",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso Kuba",
+ "symbol": "CUP"
+ },
+ "MXN": {
+ "name": "peso Mecʼhiko",
+ "symbol": "MX$"
+ },
+ "UYU": {
+ "name": "peso Uruguay",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula Botswana",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal Guatemala",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand Suafrika",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real Brazil",
+ "symbol": "R$"
+ },
+ "IRR": {
+ "name": "rial Iran",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial Oman",
+ "symbol": "OMR"
+ },
+ "QAR": {
+ "name": "rial Qatar",
+ "symbol": "QAR"
+ },
+ "YER": {
+ "name": "rial Yemen",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel Kambodja",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringgit Malaysia",
+ "symbol": "MYR"
+ },
+ "SAR": {
+ "name": "riyal Arabia Saoudat",
+ "symbol": "SAR"
+ },
+ "BYR": {
+ "name": "roubl Belarus",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "roubl Rusia",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "roupi India",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "roupi Indonezia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "roupi Moris",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "roupi Nepal",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "roupi Pakistan",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "roupi Sechelez",
+ "symbol": "SCR"
+ },
+ "LKR": {
+ "name": "roupi Sri Lanka",
+ "symbol": "LKR"
+ },
+ "MVR": {
+ "name": "rufiyaa Maldivez",
+ "symbol": "MVR"
+ },
+ "ILS": {
+ "name": "shekel nevez Israel",
+ "symbol": "₪"
+ },
+ "KES": {
+ "name": "shilling Kenya",
+ "symbol": "KES"
+ },
+ "UGX": {
+ "name": "shilling Ouganda",
+ "symbol": "UGX"
+ },
+ "SOS": {
+ "name": "shilling Somalia",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "shilling Tanzania",
+ "symbol": "TZS"
+ },
+ "KGS": {
+ "name": "som Kyrgyzstan",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "som Ouzbekistan",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "somoni Tadjikistan",
+ "symbol": "TJS"
+ },
+ "BDT": {
+ "name": "taka Bangladesh",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala Samoa",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge Kazakstan",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik Mongolia",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "vatu Vanuatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won Korea an Norzh",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won Korea ar Su",
+ "symbol": "â‚©"
+ },
+ "JPY": {
+ "name": "yen Japan",
+ "symbol": "JPÂ¥"
+ },
+ "CNY": {
+ "name": "yuan Sina",
+ "symbol": "CNÂ¥"
+ },
+ "PLN": {
+ "name": "zloty Polonia",
+ "symbol": "PLN"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/brx.json b/library/intl/resources/currency/brx.json
new file mode 100644
index 000000000..f391c009c
--- /dev/null
+++ b/library/intl/resources/currency/brx.json
@@ -0,0 +1,634 @@
+{
+ "XAF": {
+ "name": "(सीà¤à¤«à¤¼à¤) फà¥à¤°à¤¾à¤¨à¤¸à¥€à¤¸à¥€ फेदरेशनी फà¥à¤°à¤¾à¤",
+ "symbol": "FCFA"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "AFN": {
+ "name": "अफ़ग़ानी",
+ "symbol": "AFN"
+ },
+ "USD": {
+ "name": "अमरिकी डॉलर",
+ "symbol": "US$"
+ },
+ "AWG": {
+ "name": "अरà¥à¤¬à¤¾ गीलà¥à¤¡à¤°",
+ "symbol": "AWG"
+ },
+ "ARS": {
+ "name": "अरà¥à¤œà¥‡à¤£à¥à¤Ÿà¥€à¤¨à¥€ पेसो",
+ "symbol": "ARS"
+ },
+ "ISK": {
+ "name": "आईसलैणà¥à¤¡ कà¥à¤°à¥‹à¤¨à¤¾",
+ "symbol": "ISK"
+ },
+ "AZN": {
+ "name": "आज़रबैजानी मनात",
+ "symbol": "AZN"
+ },
+ "AMD": {
+ "name": "आरमिनियाई दिरà¥à¤¹à¤¾à¤®",
+ "symbol": "AMD"
+ },
+ "DZD": {
+ "name": "आलà¥à¤œà¥€à¤°à¥€ दीनार",
+ "symbol": "DZD"
+ },
+ "ALL": {
+ "name": "आलà¥à¤¬à¥‡à¤¨à¤¿à¤¯à¤¾ का लेक",
+ "symbol": "ALL"
+ },
+ "IDR": {
+ "name": "इणà¥à¤¡à¥‹à¤¨à¥‡à¤¶à¤¿à¤¯à¤¾à¤ˆ रà¥à¤ªà¤¿à¤¯à¤¾",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "इसà¥à¤°à¤¾à¤‡à¤²à¥€ शेकेल",
+ "symbol": "₪"
+ },
+ "ETB": {
+ "name": "ईथिओपिया का बीरà¥à¤°",
+ "symbol": "ETB"
+ },
+ "IQD": {
+ "name": "ईराक़ी दीनार",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "ईरानी रीयाल",
+ "symbol": "IRR"
+ },
+ "XCD": {
+ "name": "ईसà¥à¤Ÿ करिबियन डॉलर",
+ "symbol": "EC$"
+ },
+ "UZS": {
+ "name": "ऊज़बेक सà¥à¤®",
+ "symbol": "UZS"
+ },
+ "KPW": {
+ "name": "ऊतà¥à¤¤à¤° कोरियाई वोन",
+ "symbol": "KPW"
+ },
+ "UYU": {
+ "name": "ऊरà¥à¤—à¥à¤ का ऊरà¥à¤—à¥à¤†à¤¯à¥‹ पेसो",
+ "symbol": "UYU"
+ },
+ "AOA": {
+ "name": "à¤à¤‚गोला कà¥à¤µà¤¾à¤¨à¤œà¤¼à¤¾",
+ "symbol": "AOA"
+ },
+ "SVC": {
+ "name": "à¤à¤² सालवादर कोलोन",
+ "symbol": "SVC"
+ },
+ "ERN": {
+ "name": "à¤à¤°à¤¿à¤¤à¥à¤°à¥€à¤¯à¤¾ का नाफ़का",
+ "symbol": "ERN"
+ },
+ "AUD": {
+ "name": "ऑसà¥à¤Ÿà¥à¤°à¥‡à¤²à¤¿à¤¯à¤¨ डॉलर",
+ "symbol": "A$"
+ },
+ "OMR": {
+ "name": "ओमानी रियाल",
+ "symbol": "OMR"
+ },
+ "QAR": {
+ "name": "क़तारी रीयाल",
+ "symbol": "QAR"
+ },
+ "CAD": {
+ "name": "कनेडियन डॉलर",
+ "symbol": "CA$"
+ },
+ "KHR": {
+ "name": "कंबोडिया का रिà¤à¤²",
+ "symbol": "KHR"
+ },
+ "KZT": {
+ "name": "क़ाज़ाख़सà¥à¤¤à¤¾à¤¨ तेंगे",
+ "symbol": "KZT"
+ },
+ "CVE": {
+ "name": "काप वेरà¥à¤¦à¥‡ का à¤à¤¸à¥à¤•à¥à¤¦à¥‹",
+ "symbol": "CVE"
+ },
+ "KES": {
+ "name": "किनियाई शीलींग",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "क़ीरà¥à¤—़ीज़सà¥à¤¤à¤¾à¤¨à¥€ सोम",
+ "symbol": "KGS"
+ },
+ "KWD": {
+ "name": "क़à¥à¤µà¥ˆà¤¤à¥€ दीनार",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "कैमान दà¥à¤µà¥€à¤ª का डॉलर",
+ "symbol": "KYD"
+ },
+ "CDF": {
+ "name": "कॉंगोलीज़ फà¥à¤°à¤¾à¤",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "कॉसà¥à¤Ÿà¤¾ रीका का कोलोन",
+ "symbol": "CRC"
+ },
+ "KMF": {
+ "name": "कोमोरो का फà¥à¤°à¤¾à¤",
+ "symbol": "KMF"
+ },
+ "COP": {
+ "name": "कोलमà¥à¤¬à¤¿à¤¯à¤¾à¤ˆ पेसो",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "कà¥à¤¯à¥à¤¬à¤¾ का पेसो",
+ "symbol": "CUP"
+ },
+ "HRK": {
+ "name": "कà¥à¤°à¥‹à¤à¤¶à¤¿à¤¯à¤¾à¤ˆ कà¥à¤¨à¤¾",
+ "symbol": "HRK"
+ },
+ "GMD": {
+ "name": "गाà¤à¤¬à¤¿à¤¯à¤¾ का दलासी",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "गीनी फà¥à¤°à¤¾à¤",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "गà¥à¤¯à¤¾à¤¨à¤¾ डॉलर",
+ "symbol": "GYD"
+ },
+ "GTQ": {
+ "name": "गà¥à¤µà¤¾à¤¤à¥‡à¤®à¤¾à¤²à¤¾ क़à¥à¤µà¥‡à¤¤à¥à¤œà¤¼à¤¾à¤²",
+ "symbol": "GTQ"
+ },
+ "GHS": {
+ "name": "घाना चेदी",
+ "symbol": "GHS"
+ },
+ "CLP": {
+ "name": "चिली पेसो",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "चीनी यà¥à¤†à¤¨ रेनमीनबी",
+ "symbol": "CNÂ¥"
+ },
+ "CZK": {
+ "name": "चेक गनतंतà¥à¤° का कोरà¥à¤¨à¤¾",
+ "symbol": "CZK"
+ },
+ "JMD": {
+ "name": "जमाईका का डॉलर",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "जापानी येन",
+ "symbol": "JPÂ¥"
+ },
+ "ZMW": {
+ "name": "ज़ामà¥à¤¬à¤¿à¤¯à¤¾à¤ˆ कà¥à¤µà¤¾à¤šà¤¾",
+ "symbol": "ZMW"
+ },
+ "DJF": {
+ "name": "जीबà¥à¤¤à¥€ फà¥à¤°à¤¾à¤",
+ "symbol": "DJF"
+ },
+ "GIP": {
+ "name": "जीबà¥à¤°à¤¾à¤²à¤Ÿà¤° का पौणà¥à¤¡",
+ "symbol": "GIP"
+ },
+ "GEL": {
+ "name": "जॉरà¥à¤œà¤¿à¤¯à¤¾ का लारी",
+ "symbol": "GEL"
+ },
+ "JOD": {
+ "name": "जोरà¥à¤¡à¤¨à¥€ दीनार",
+ "symbol": "JOD"
+ },
+ "TOP": {
+ "name": "टॉंगा पाईंगा",
+ "symbol": "TOP"
+ },
+ "DKK": {
+ "name": "डेनमारà¥à¤• का कà¥à¤°à¥‹à¤¨",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "डॉमीनीकन पेसो",
+ "symbol": "DOP"
+ },
+ "TWD": {
+ "name": "ताईवानी नया डॉलर",
+ "symbol": "NT$"
+ },
+ "TJS": {
+ "name": "ताजीक़ीसà¥à¤¤à¤¾à¤¨à¥€ सोमोनी",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "तानà¥à¤œà¤¼à¥‡à¤¨à¤¿à¤¯à¤¾à¤ˆ शीलींग",
+ "symbol": "TZS"
+ },
+ "TRY": {
+ "name": "तà¥à¤°à¥à¤•à¥€ नया लीरा",
+ "symbol": "TRY"
+ },
+ "TND": {
+ "name": "तà¥à¤¯à¥à¤¨à¥€à¤¸à¥€ दीनर",
+ "symbol": "TND"
+ },
+ "TTD": {
+ "name": "तà¥à¤°à¥€à¤¨à¥€à¤¦à¤¾à¤¦ à¤à¤µà¤‚ टोबागो डॉलर",
+ "symbol": "TTD"
+ },
+ "THB": {
+ "name": "थाई बाहà¥à¤Ÿ",
+ "symbol": "THB"
+ },
+ "ZAR": {
+ "name": "दकà¥à¤·à¤¿à¤£ अफ़à¥à¤°à¥€à¤•à¥€ रॅणà¥à¤¡",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "दकà¥à¤·à¤¿à¤£ कोरियाई वोन",
+ "symbol": "â‚©"
+ },
+ "NAD": {
+ "name": "नमीबिया डॉलर",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "नाईजीरीयाई नाईरा",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "नीकारागà¥à¤†à¤ˆ सà¥à¤µà¤°à¥à¤£ कोरà¥à¤¦à¥‹à¤¬à¤¾",
+ "symbol": "NIO"
+ },
+ "ANG": {
+ "name": "नेदरलैणà¥à¤¡ à¤à¤¨à¥à¤Ÿà¥€à¤²à¥€à¤œà¤¼ का गीलà¥à¤¡à¤°",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "नेपाली रà¥à¤ªà¥€",
+ "symbol": "NPR"
+ },
+ "NOK": {
+ "name": "नॉरà¥à¤µà¥‡ का कà¥à¤°à¥‹à¤¨",
+ "symbol": "NOK"
+ },
+ "NZD": {
+ "name": "नà¥à¤¯à¥‚ज़ीलैंड डॉलर",
+ "symbol": "NZ$"
+ },
+ "PAB": {
+ "name": "पनामा का बालबोआ",
+ "symbol": "PAB"
+ },
+ "PKR": {
+ "name": "पाकिसà¥à¤¤à¤¾à¤¨à¥€ रà¥à¤ªà¤¯à¤¾",
+ "symbol": "PKR"
+ },
+ "PGK": {
+ "name": "पापà¥à¤† नà¥à¤¯à¥ गीनी का कीना",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "पारागà¥à¤à¤ˆ गà¥à¤†à¤°à¤¾à¤¨à¥€",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "पेरà¥à¤µà¤¾à¤ˆ नया सोल",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "पोलिश ज़à¥à¤²à¥‰à¤Ÿà¥€",
+ "symbol": "PLN"
+ },
+ "FKP": {
+ "name": "फालà¥à¤•à¤²à¥ˆà¤£à¥à¤¡ दà¥à¤µà¥€à¤ª पौणà¥à¤¡",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "फ़िजी का डॉलर",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "फ़िलिपीन का पेसो",
+ "symbol": "PHP"
+ },
+ "XPF": {
+ "name": "फà¥à¤°à¤¾à¤¨à¤¸à¥€à¤¸à¥€ फेदेरेशनी फà¥à¤°à¤¾à¤",
+ "symbol": "CFPF"
+ },
+ "XOF": {
+ "name": "फà¥à¤°à¤¾à¤¨à¤¸à¥€à¤¸à¥€ फेदेरेशनी बीसीà¤à¤†à¤“ फà¥à¤°à¤¾à¤",
+ "symbol": "CFA"
+ },
+ "BMD": {
+ "name": "बरमà¥à¤¡à¥€ डॉलर",
+ "symbol": "BMD"
+ },
+ "BGN": {
+ "name": "बलà¥à¤—ेरियाई लेव",
+ "symbol": "BGN"
+ },
+ "BSD": {
+ "name": "बहामा डॉलर",
+ "symbol": "BSD"
+ },
+ "BDT": {
+ "name": "बांगलादेश टका",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "बारबादोस डॉलर",
+ "symbol": "BBD"
+ },
+ "BHD": {
+ "name": "बाहरैनी दीनार",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "बà¥à¤°à¥à¤‚दी फà¥à¤°à¤¾à¤",
+ "symbol": "BIF"
+ },
+ "BYR": {
+ "name": "बेलारà¥à¤¸à¥€ रूबल",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "बेलीज़ डॉलर",
+ "symbol": "BZD"
+ },
+ "BWP": {
+ "name": "बोटà¥à¤¸à¤µà¤¾à¤¨à¤¾ का पà¥à¤²à¤¾à¤Ÿ",
+ "symbol": "BWP"
+ },
+ "BOB": {
+ "name": "बोलिवियानो",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "बोसनिया हेरà¥à¤œà¤¼à¥‡à¤—ोविना कनवरà¥à¤Ÿà¥€à¤¬à¤² मारà¥à¤•",
+ "symbol": "BAM"
+ },
+ "BRL": {
+ "name": "बà¥à¤°à¤œà¤¼à¥€à¤²à¥€ रेयाल",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "बà¥à¤°à¤¿à¤¤à¤¨ का पौणà¥à¤¡ सà¥à¤Ÿà¤°à¥à¤²à¤¿à¤—",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "बà¥à¤°à¥à¤¨à¤ˆ डॉलर",
+ "symbol": "BND"
+ },
+ "BTN": {
+ "name": "भà¥à¤¤à¤¾à¤¨ का नगà¥à¤²à¤¤à¥à¤°à¥à¤®",
+ "symbol": "BTN"
+ },
+ "MYR": {
+ "name": "मलेशियन रिंगित",
+ "symbol": "MYR"
+ },
+ "MKD": {
+ "name": "मसेदोनियाई दीनार",
+ "symbol": "MKD"
+ },
+ "MOP": {
+ "name": "माकाव पाताचा",
+ "symbol": "MOP"
+ },
+ "MGA": {
+ "name": "मादागासà¥à¤•à¤°à¥€ आरिआरी",
+ "symbol": "MGA"
+ },
+ "MVR": {
+ "name": "मालदीव दà¥à¤µà¥€à¤ª का रूफिया",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "मालवी कà¥à¤µà¤¾à¤šà¤¾",
+ "symbol": "MWK"
+ },
+ "EGP": {
+ "name": "मिसà¥à¤°à¥€ पाउणà¥à¤¡",
+ "symbol": "EGP"
+ },
+ "MXN": {
+ "name": "मेकà¥à¤¸à¤¿à¤•à¤¨ पेसो",
+ "symbol": "MX$"
+ },
+ "MZN": {
+ "name": "मोज़ांबीक मेतीकाल",
+ "symbol": "MZN"
+ },
+ "MAD": {
+ "name": "मोरकà¥à¤•à¤¿à¤¯ दिरà¥à¤¹à¤¾à¤®",
+ "symbol": "MAD"
+ },
+ "MUR": {
+ "name": "मोरिशियस का रूपी",
+ "symbol": "MUR"
+ },
+ "MDL": {
+ "name": "मोलà¥à¤¡à¥‹à¤µà¤¿à¤¯à¤¾à¤ˆ ल",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "मौंगोलीयाई तà¥à¤—à¥à¤°à¥€à¤•",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "मौरिटानी ऊगà¥à¤¯à¤¾",
+ "symbol": "MRO"
+ },
+ "MMK": {
+ "name": "मà¥à¤¯à¤¾à¤¨à¤®à¤¾à¤°à¥€ कà¥à¤¯à¤¾à¤Ÿ",
+ "symbol": "MMK"
+ },
+ "YER": {
+ "name": "यमनी रीयाल",
+ "symbol": "YER"
+ },
+ "UAH": {
+ "name": "यà¥à¤•à¥à¤°à¥‡à¤¨à¥€ हà¥à¤°à¥€à¤µà¤¨à¤¿à¤¯à¤¾",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "यà¥à¤—ाà¤à¤¡à¤¾à¤ˆ शीलींग",
+ "symbol": "UGX"
+ },
+ "EUR": {
+ "name": "यà¥à¤°à¥‹",
+ "symbol": "€"
+ },
+ "INR": {
+ "name": "रां",
+ "symbol": "₹"
+ },
+ "RWF": {
+ "name": "रà¥à¤†à¤à¤¦à¤¾ फà¥à¤°à¤¾à¤",
+ "symbol": "RWF"
+ },
+ "RUB": {
+ "name": "रूसी रूबल",
+ "symbol": "RUB"
+ },
+ "RON": {
+ "name": "रोमानियाई ल",
+ "symbol": "RON"
+ },
+ "LSL": {
+ "name": "लसोथो का लोटी",
+ "symbol": "LSL"
+ },
+ "LAK": {
+ "name": "लाओस का कीप",
+ "symbol": "LAK"
+ },
+ "LTL": {
+ "name": "लिथà¥à¤†à¤¨à¤¿à¤¯à¤¾à¤ˆ लिता",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "लिबियाई दीनार",
+ "symbol": "LYD"
+ },
+ "LBP": {
+ "name": "लीबानी पौंड",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "लीबेरियाई डॉलर",
+ "symbol": "LRD"
+ },
+ "VUV": {
+ "name": "वनà¥à¤†à¤Ÿà¥ वटà¥",
+ "symbol": "VUV"
+ },
+ "VND": {
+ "name": "वीयतनामी डॉंग",
+ "symbol": "â‚«"
+ },
+ "VEF": {
+ "name": "वेनेज़à¥à¤à¤²à¤¾à¤ˆ बोलिवार",
+ "symbol": "VEF"
+ },
+ "WST": {
+ "name": "वेसà¥à¤Ÿà¤°à¥à¤¨ समोआ ताला",
+ "symbol": "WST"
+ },
+ "LKR": {
+ "name": "शà¥à¤°à¥€ लंका रूपी",
+ "symbol": "LKR"
+ },
+ "AED": {
+ "name": "संयà¥à¤•à¥à¤¤ अरब अमीरात का दिरà¥à¤¹à¤¾à¤®",
+ "symbol": "AED"
+ },
+ "RSD": {
+ "name": "सरà¥à¤¬à¤¿à¤¯à¤¾à¤ˆ दिनार",
+ "symbol": "RSD"
+ },
+ "SAR": {
+ "name": "साउदी रियाल",
+ "symbol": "SAR"
+ },
+ "STD": {
+ "name": "साà¤à¤µ तोमे à¤à¤µà¤‚ पà¥à¤°à¥€à¤¨à¥à¤¸à¥€à¤ªà¥‡ का डोबà¥à¤°à¤¾",
+ "symbol": "STD"
+ },
+ "SGD": {
+ "name": "सिंगापà¥à¤° डॉलर",
+ "symbol": "SGD"
+ },
+ "SLL": {
+ "name": "सीयेरा लीयोनेई लीयोने",
+ "symbol": "SLL"
+ },
+ "SYP": {
+ "name": "सीरियाई पौंड",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "सà¥à¤¦à¤¾à¤¨à¥€ पौंड",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "सà¥à¤°à¥€à¤¨à¤¾à¤® डॉलर",
+ "symbol": "SRD"
+ },
+ "SHP": {
+ "name": "सेंट हेलीना पौंड",
+ "symbol": "SHP"
+ },
+ "SCR": {
+ "name": "सेशेल रूपी",
+ "symbol": "SCR"
+ },
+ "SOS": {
+ "name": "सोमाली शीलींग",
+ "symbol": "SOS"
+ },
+ "SBD": {
+ "name": "सोलोमन दà¥à¤µà¥€à¤ª का डॉलर",
+ "symbol": "SBD"
+ },
+ "SZL": {
+ "name": "सà¥à¤µà¤¾à¤œà¤¼à¥€à¤²à¥ˆà¤£à¥à¤¡ लीलांगेनी",
+ "symbol": "SZL"
+ },
+ "CHF": {
+ "name": "सà¥à¤µà¤¿à¤¸ फ़à¥à¤°à¥ˆà¤‚क",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "सà¥à¤µà¥€à¤¡à¤¨ कà¥à¤°à¥‹à¤¨à¤¾",
+ "symbol": "SEK"
+ },
+ "HUF": {
+ "name": "हंगेरियाई फ़ोरिणà¥à¤Ÿ",
+ "symbol": "HUF"
+ },
+ "HTG": {
+ "name": "हाईती गà¥à¤°à¥à¤¦",
+ "symbol": "HTG"
+ },
+ "HKD": {
+ "name": "हाà¤à¤— काà¤à¤— डॉलर",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "हॉंडà¥à¤°à¤¾à¤¸ लेंपीरा",
+ "symbol": "HNL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/bs-Cyrl.json b/library/intl/resources/currency/bs-Cyrl.json
new file mode 100644
index 000000000..87889b7e6
--- /dev/null
+++ b/library/intl/resources/currency/bs-Cyrl.json
@@ -0,0 +1,634 @@
+{
+ "XOF": {
+ "name": "CFA франак BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA франак BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP франак",
+ "symbol": "CFPF"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "AFN": {
+ "name": "ÐвганиÑтанÑки авган",
+ "symbol": "AFN"
+ },
+ "AZN": {
+ "name": "ÐзербејџанÑки манат",
+ "symbol": "AZN"
+ },
+ "ALL": {
+ "name": "ÐлбанÑки лек",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "ÐлжирÑки динар",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "Ðмерички долар",
+ "symbol": "US$"
+ },
+ "AOA": {
+ "name": "анголÑка кванза",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "аргентинÑки пезо",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "ÐрубанÑки флорин",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "ÐуÑтралијÑки долар",
+ "symbol": "A$"
+ },
+ "BDT": {
+ "name": "Бангладешка така",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Барбадошки долар",
+ "symbol": "BBD"
+ },
+ "BSD": {
+ "name": "БахамÑки долар",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "БахреинÑки динар",
+ "symbol": "BHD"
+ },
+ "BZD": {
+ "name": "Белизе долар",
+ "symbol": "BZD"
+ },
+ "BYR": {
+ "name": "БелоруÑка рубља",
+ "symbol": "BYR"
+ },
+ "BMD": {
+ "name": "БермудÑки долар",
+ "symbol": "BMD"
+ },
+ "BOB": {
+ "name": "БоливијÑки Боливиано",
+ "symbol": "BOB"
+ },
+ "BWP": {
+ "name": "БоцванÑка пула",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "БразилÑки Реал",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "БританÑка фунта Ñтерлинга",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "БрунејÑки долар",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "БугарÑки лев",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "БурундÑки франак",
+ "symbol": "BIF"
+ },
+ "BTN": {
+ "name": "БутанÑки нгултрум",
+ "symbol": "BTN"
+ },
+ "VUV": {
+ "name": "ВануатÑки вату",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "ВенецуеланÑки боливар",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "ВијетнамÑки донг",
+ "symbol": "â‚«"
+ },
+ "GMD": {
+ "name": "ГамбијÑки далаÑи",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "ГанÑки цеди",
+ "symbol": "GHS"
+ },
+ "GTQ": {
+ "name": "ГватемалÑки квецал",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "ГвинејÑки франак",
+ "symbol": "GNF"
+ },
+ "GIP": {
+ "name": "Гибралташка фунта",
+ "symbol": "GIP"
+ },
+ "GEL": {
+ "name": "ГрузијÑки лари",
+ "symbol": "GEL"
+ },
+ "GYD": {
+ "name": "ГујанÑки долар",
+ "symbol": "GYD"
+ },
+ "DKK": {
+ "name": "ДанÑка круна",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "ДоминиканÑки пезо",
+ "symbol": "DOP"
+ },
+ "EUR": {
+ "name": "Евро",
+ "symbol": "€"
+ },
+ "EGP": {
+ "name": "ЕгипатÑка фунта",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "ЕритреанÑка накфа",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "етиопијÑки бир",
+ "symbol": "ETB"
+ },
+ "ZMW": {
+ "name": "ЗамбијÑка квача",
+ "symbol": "ZMW"
+ },
+ "CVE": {
+ "name": "ЗеленортÑки еÑкудо",
+ "symbol": "CVE"
+ },
+ "ZWL": {
+ "name": "ЗимбабвеанÑки долар (2009)",
+ "symbol": "ZWL"
+ },
+ "ILS": {
+ "name": "ИзраелÑки нови шекел",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "ИндијÑки Рупи",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "ИндонезијÑка рупиа",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "ИранÑки риал",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Ирачки динар",
+ "symbol": "IQD"
+ },
+ "ISK": {
+ "name": "ИÑландÑка круна",
+ "symbol": "ISK"
+ },
+ "XCD": {
+ "name": "ИÑточно-карибÑки долар",
+ "symbol": "EC$"
+ },
+ "JMD": {
+ "name": "ЈамајÑки долар",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "ЈапанÑки јен",
+ "symbol": "Â¥"
+ },
+ "YER": {
+ "name": "ЈеменÑки риал",
+ "symbol": "YER"
+ },
+ "AMD": {
+ "name": "ЈерменÑки драм",
+ "symbol": "AMD"
+ },
+ "JOD": {
+ "name": "ЈорданÑки динар",
+ "symbol": "JOD"
+ },
+ "ZAR": {
+ "name": "Јужно-афрички ранд",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "ЈужнокорејÑки Вон",
+ "symbol": "â‚©"
+ },
+ "KZT": {
+ "name": "КазахÑтанÑки тенџ",
+ "symbol": "KZT"
+ },
+ "KYD": {
+ "name": "КајманÑка оÑтрва долар",
+ "symbol": "KYD"
+ },
+ "KHR": {
+ "name": "КамбоџијÑки риел",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "КанадÑки долар",
+ "symbol": "CA$"
+ },
+ "QAR": {
+ "name": "Катаршки ријал",
+ "symbol": "QAR"
+ },
+ "KES": {
+ "name": "КенијÑки шилинг",
+ "symbol": "KES"
+ },
+ "CNY": {
+ "name": "КинеÑки јуан ренминби",
+ "symbol": "CNÂ¥"
+ },
+ "KGS": {
+ "name": "КиргиÑтанÑки Ñом",
+ "symbol": "KGS"
+ },
+ "COP": {
+ "name": "КолумбијÑки пезо",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "КоморÑки франак",
+ "symbol": "KMF"
+ },
+ "BAM": {
+ "name": "Конвертибилна марка",
+ "symbol": "КМ"
+ },
+ "CDF": {
+ "name": "КонголÑки франак",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "КоÑтариканÑки колон",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "кубанÑки конвертибилни пеÑо",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "КубанÑки пезо",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "КувајтÑки динар",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "Лаошки кип",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "ЛебанÑка фунта",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "ЛеÑото лоти",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "ЛиберијÑки долар",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "ЛибијÑки динар",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "ЛитванÑки литаÑ",
+ "symbol": "LTL"
+ },
+ "HUF": {
+ "name": "МађарÑка форинта",
+ "symbol": "HUF"
+ },
+ "MOP": {
+ "name": "Маканишка патака",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "МакедонÑки денар",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "МалавијÑка квача",
+ "symbol": "MWK"
+ },
+ "MGA": {
+ "name": "МалагаÑијÑки ариари",
+ "symbol": "MGA"
+ },
+ "MVR": {
+ "name": "МалдивијÑка руфија",
+ "symbol": "MVR"
+ },
+ "MYR": {
+ "name": "МалезијÑки ринггит",
+ "symbol": "MYR"
+ },
+ "MAD": {
+ "name": "МароканÑки дирхам",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "МауританијÑка угвија",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "МаурицијÑки рупи",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "МекÑички пезо",
+ "symbol": "MX$"
+ },
+ "MMK": {
+ "name": "Мјанмашки кјат",
+ "symbol": "MMK"
+ },
+ "MZN": {
+ "name": "МозамбијÑки метикал",
+ "symbol": "MZN"
+ },
+ "MDL": {
+ "name": "МолдовÑки љу",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "МонголÑки тугрик",
+ "symbol": "MNT"
+ },
+ "NAD": {
+ "name": "намбијÑки долар",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "ÐепалÑки рупи",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "ÐигеријÑка наира",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "ÐикарагванÑка златна кордоба",
+ "symbol": "NIO"
+ },
+ "TWD": {
+ "name": "Ðови тајванÑки долар",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "ÐовозеландÑки долар",
+ "symbol": "NZ$"
+ },
+ "NOK": {
+ "name": "Ðорвешка круна",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "ОманÑки ријал",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "ПакиÑтанÑки рупи",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "ПанамÑка балбоа",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Папуа ново-гвинејшка кина",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "ПарагвајÑки гуарни",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "ПеруанÑки нуево Ñол",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "ПољÑки злот",
+ "symbol": "зл"
+ },
+ "RWF": {
+ "name": "РуанданÑки франак",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "РумунÑки леу",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "РуÑка рубља",
+ "symbol": "RUB"
+ },
+ "SVC": {
+ "name": "СалвадорÑки колон",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "СамоанÑка тала",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "Сао Томе и Принципе добра",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "СаудијÑки ријал",
+ "symbol": "SAR"
+ },
+ "SHP": {
+ "name": "Св. јеленÑка фунта",
+ "symbol": "SHP"
+ },
+ "SZL": {
+ "name": "Свази лилангени",
+ "symbol": "SZL"
+ },
+ "KPW": {
+ "name": "СевернокорејÑки вон",
+ "symbol": "KPW"
+ },
+ "SCR": {
+ "name": "СејшелÑка рупија",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Сијера-леоншки леоне",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "СингапурÑки долар",
+ "symbol": "SGD"
+ },
+ "SYP": {
+ "name": "СиријÑка фунта",
+ "symbol": "SYP"
+ },
+ "SBD": {
+ "name": "СоломонÑко-оÑтрвÑки долар",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "СОмалијÑки шилинг",
+ "symbol": "SOS"
+ },
+ "RSD": {
+ "name": "СрпÑки динар",
+ "symbol": "дин."
+ },
+ "SDG": {
+ "name": "СуданÑка фунта",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "СУринамÑки долар",
+ "symbol": "SRD"
+ },
+ "THB": {
+ "name": "Таи бахт",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "ТаљихиÑтанÑки Ñомони",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "ТанзанијÑки шилинг",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "Тонгоншка Панга",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Тринидад тобагошки долар",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "ТунизијÑки долар",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "ТуркмениÑтанÑки манат",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "ТурÑка лира",
+ "symbol": "Тл"
+ },
+ "UGX": {
+ "name": "УгандÑки шилинг",
+ "symbol": "UGX"
+ },
+ "UZS": {
+ "name": "УзбекиÑтанÑки Ñом",
+ "symbol": "UZS"
+ },
+ "AED": {
+ "name": "Уједињени арапÑки емирати дирхам",
+ "symbol": "AED"
+ },
+ "UAH": {
+ "name": "УкрајинÑка хривња",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "УругвајÑки пезо",
+ "symbol": "UYU"
+ },
+ "PHP": {
+ "name": "ФилипинÑки пезо",
+ "symbol": "PHP"
+ },
+ "FJD": {
+ "name": "Фиџи долар",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "ФокландÑка оÑтрва фунта",
+ "symbol": "FKP"
+ },
+ "HTG": {
+ "name": "ХаићанÑки гурд",
+ "symbol": "HTG"
+ },
+ "ANG": {
+ "name": "ХоландÑки антили гилдер",
+ "symbol": "ANG"
+ },
+ "HKD": {
+ "name": "Хонгконшки долар",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "Хондурашка лемпира",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "ХрватÑка куна",
+ "symbol": "HRK"
+ },
+ "CZK": {
+ "name": "Чешка круна",
+ "symbol": "Кч"
+ },
+ "CLP": {
+ "name": "ЧилеанÑки пезо",
+ "symbol": "CLP"
+ },
+ "DJF": {
+ "name": "ÐибутанÑки франак",
+ "symbol": "DJF"
+ },
+ "CHF": {
+ "name": "ШвајцарÑки франак",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "ШведÑка круна",
+ "symbol": "SEK"
+ },
+ "LKR": {
+ "name": "ШриланканÑки рупи",
+ "symbol": "LKR"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/bs.json b/library/intl/resources/currency/bs.json
new file mode 100644
index 000000000..e86f73e94
--- /dev/null
+++ b/library/intl/resources/currency/bs.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afganistanski afgan",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanski lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Alžirski dinar",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "AmeriÄki dolar",
+ "symbol": "USD"
+ },
+ "AOA": {
+ "name": "Angolska kvanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentinski pezos",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "Arubanski florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australijski dolar",
+ "symbol": "AUD"
+ },
+ "AZN": {
+ "name": "Azerbejdžanski manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamski dolar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahreinski dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeška taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadoski dolar",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Belizeanski dolar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudski dolar",
+ "symbol": "BMD"
+ },
+ "BYR": {
+ "name": "Bjeloruska rublja",
+ "symbol": "BYR"
+ },
+ "BWP": {
+ "name": "Bocvanska pula",
+ "symbol": "BWP"
+ },
+ "BOB": {
+ "name": "Bolivijski boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosansko-HercegovaÄka konvertibilna marka",
+ "symbol": "KM"
+ },
+ "BRL": {
+ "name": "Brazilski real",
+ "symbol": "BRL"
+ },
+ "GBP": {
+ "name": "Britanska funta sterlinga",
+ "symbol": "GBP"
+ },
+ "BND": {
+ "name": "Brunejski dolar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bugarski lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundski franak",
+ "symbol": "BIF"
+ },
+ "BTN": {
+ "name": "Butanski ngultrum",
+ "symbol": "BTN"
+ },
+ "XOF": {
+ "name": "CFA franak BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA franak BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP franak",
+ "symbol": "XPF"
+ },
+ "CZK": {
+ "name": "Češka kruna",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "ÄŒileanski pezos",
+ "symbol": "CLP"
+ },
+ "DKK": {
+ "name": "Danska kruna",
+ "symbol": "DKK"
+ },
+ "AED": {
+ "name": "Dirham Ujedinjenih Arapskih Emirata",
+ "symbol": "AED"
+ },
+ "STD": {
+ "name": "Dobra Sao Toma i Principa",
+ "symbol": "STD"
+ },
+ "DOP": {
+ "name": "Dominikanski pezos",
+ "symbol": "DOP"
+ },
+ "DJF": {
+ "name": "Džibutski franak",
+ "symbol": "DJF"
+ },
+ "EGP": {
+ "name": "Egipatska funta",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrejska nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Etiopski bir",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "Fidži dolar",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "Filipinski pezos",
+ "symbol": "PHP"
+ },
+ "FKP": {
+ "name": "Folklandska funta",
+ "symbol": "FKP"
+ },
+ "GMD": {
+ "name": "Gambijski dalasi",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "Ganski cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltarska funta",
+ "symbol": "GIP"
+ },
+ "GEL": {
+ "name": "Gruzijski lari",
+ "symbol": "GEL"
+ },
+ "ANG": {
+ "name": "Gulden Holandskih Antila",
+ "symbol": "ANG"
+ },
+ "GYD": {
+ "name": "Gvajanski dolar",
+ "symbol": "GYD"
+ },
+ "GTQ": {
+ "name": "Gvatemalski kecal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Gvinejski franak",
+ "symbol": "GNF"
+ },
+ "HTG": {
+ "name": "Haićanski gurd",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduraska lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Honkonški dolar",
+ "symbol": "HKD"
+ },
+ "HRK": {
+ "name": "Hrvatska kuna",
+ "symbol": "kn"
+ },
+ "INR": {
+ "name": "Indijska rupija",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonežanska rupija",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "IraÄki dinar",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "Iranski rijal",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "Islandska kruna",
+ "symbol": "ISK"
+ },
+ "XCD": {
+ "name": "IstoÄnokaripski dolar",
+ "symbol": "XCD"
+ },
+ "ILS": {
+ "name": "Izraelski novi Å¡ekel",
+ "symbol": "ILS"
+ },
+ "JMD": {
+ "name": "Jamajski dolar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanski jen",
+ "symbol": "Â¥"
+ },
+ "YER": {
+ "name": "Jemenski rijal",
+ "symbol": "YER"
+ },
+ "AMD": {
+ "name": "Jermenski dram",
+ "symbol": "AMD"
+ },
+ "JOD": {
+ "name": "Jordanski dinar",
+ "symbol": "JOD"
+ },
+ "ZAR": {
+ "name": "JužnoafriÄki rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "Južnokorejski von",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "Južnosudanska funta",
+ "symbol": "SSP"
+ },
+ "KYD": {
+ "name": "Kajmanski dolar",
+ "symbol": "KYD"
+ },
+ "KHR": {
+ "name": "Kambodžanski rijel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Kanadski dolar",
+ "symbol": "CAD"
+ },
+ "QAR": {
+ "name": "Katarski rijal",
+ "symbol": "QAR"
+ },
+ "KZT": {
+ "name": "Kazahstanski tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenijski Å¡iling",
+ "symbol": "KES"
+ },
+ "PGK": {
+ "name": "Kina Papue Nove Gvineje",
+ "symbol": "PGK"
+ },
+ "CNY": {
+ "name": "Kineski juan",
+ "symbol": "CNY"
+ },
+ "KGS": {
+ "name": "Kirgistanski som",
+ "symbol": "KGS"
+ },
+ "COP": {
+ "name": "Kolumbijski pezos",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Komorski franak",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Kongoanski franak",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Kostarikanski kolon",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "Kubanski konvertibilni pezos",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "kubanski pezos",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "Kuvajtski dinar",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "Laoski kip",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "Lesotski loti",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "Libanska funta",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "Liberijski dolar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libijski dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Litvanski litas",
+ "symbol": "LTL"
+ },
+ "HUF": {
+ "name": "Mađarska forinta",
+ "symbol": "HUF"
+ },
+ "MOP": {
+ "name": "Makaonska pataka",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Makedonski denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagaski ariari",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malavska kvaÄa",
+ "symbol": "MWK"
+ },
+ "MVR": {
+ "name": "Maldivska rufija",
+ "symbol": "MVR"
+ },
+ "MYR": {
+ "name": "Malezijski ringit",
+ "symbol": "MYR"
+ },
+ "MAD": {
+ "name": "Marokanski dirham",
+ "symbol": "MAD"
+ },
+ "MUR": {
+ "name": "Mauricijska rupija",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "Mauritanijska ugvija",
+ "symbol": "MRO"
+ },
+ "MXN": {
+ "name": "MeksiÄki pezos",
+ "symbol": "MXN"
+ },
+ "MMK": {
+ "name": "Mijanmarski kjat",
+ "symbol": "MMK"
+ },
+ "MDL": {
+ "name": "Moldavski lev",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolski tugrik",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "Mozambijski metikal",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "Namibijski dolar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalska rupija",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "Nigerijska naira",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "Nikaragvanska kordoba",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "Norveška kruna",
+ "symbol": "NOK"
+ },
+ "TWD": {
+ "name": "Novi tajvanski dolar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "Novozelandski dolar",
+ "symbol": "NZD"
+ },
+ "OMR": {
+ "name": "Omanski rijal",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistanska rupija",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamska balboa",
+ "symbol": "PAB"
+ },
+ "PYG": {
+ "name": "Paragvajski gvarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruanski novi sol",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "Poljski zlot",
+ "symbol": "PLN"
+ },
+ "RWF": {
+ "name": "Ruandski franak",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "Rumunski lev",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Ruska rublja",
+ "symbol": "RUB"
+ },
+ "SVC": {
+ "name": "Salvadorski kolon",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoanska tala",
+ "symbol": "WST"
+ },
+ "SAR": {
+ "name": "Saudijski rijal",
+ "symbol": "SAR"
+ },
+ "SCR": {
+ "name": "Sejšelska rupija",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sijeraleonski leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapurski dolar",
+ "symbol": "SGD"
+ },
+ "SYP": {
+ "name": "Sirijska funta",
+ "symbol": "SYP"
+ },
+ "KPW": {
+ "name": "Sjevernokorejski von",
+ "symbol": "KPW"
+ },
+ "SBD": {
+ "name": "Solomonski dolar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somalski Å¡iling",
+ "symbol": "SOS"
+ },
+ "RSD": {
+ "name": "Srpski dinar",
+ "symbol": "din."
+ },
+ "SDG": {
+ "name": "Sudanska funta",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamski dolar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Svazilendski lilangeni",
+ "symbol": "SZL"
+ },
+ "SHP": {
+ "name": "Svetohelenska funta",
+ "symbol": "SHP"
+ },
+ "LKR": {
+ "name": "Å rilankanska rupija",
+ "symbol": "LKR"
+ },
+ "SEK": {
+ "name": "Å vedska kruna",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Å vicarski franak",
+ "symbol": "CHF"
+ },
+ "TJS": {
+ "name": "Tadžikistanski somoni",
+ "symbol": "TJS"
+ },
+ "THB": {
+ "name": "Tajlandski baht",
+ "symbol": "฿"
+ },
+ "TZS": {
+ "name": "Tanzanski Å¡iling",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "Tonganska panga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidadtobaški dolar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tuniski dinar",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "Turkmenistanski manat",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "Turska lira",
+ "symbol": "TRY"
+ },
+ "UGX": {
+ "name": "Ugandski Å¡iling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrajinska grivna",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "Urugvajski pezos",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "Uzbekistanski som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatski vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venecuelanski bolivar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vijetnamski dong",
+ "symbol": "â‚«"
+ },
+ "ZMW": {
+ "name": "Zambijska kvaÄa",
+ "symbol": "ZMW"
+ },
+ "CVE": {
+ "name": "Zelenortski eskudo",
+ "symbol": "CVE"
+ },
+ "ZWL": {
+ "name": "Zimbabvejski dolar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ca.json b/library/intl/resources/currency/ca.json
new file mode 100644
index 000000000..ec73887e6
--- /dev/null
+++ b/library/intl/resources/currency/ca.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani afganès",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariary malgaix",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "baht tailandès",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "balboa panameny",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "birr etíop",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar veneçolà",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "bolivià",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi ghanès",
+ "symbol": "GHS"
+ },
+ "CRC": {
+ "name": "colón costa-riqueny",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadorenc",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba oro nicaragüenca",
+ "symbol": "NIO"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "CZK": {
+ "name": "corona txeca",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "dalasi gambià",
+ "symbol": "GMD"
+ },
+ "MKD": {
+ "name": "denar macedoni",
+ "symbol": "MKD"
+ },
+ "DZD": {
+ "name": "dinar algerià",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar de Bahrain",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquià",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordà",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwaitià",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libi",
+ "symbol": "LYD"
+ },
+ "RSD": {
+ "name": "dinar serbi",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunisià",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dírham de la UEA",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dírham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra de São Tomé i Príncipe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dòlar australià",
+ "symbol": "AU$"
+ },
+ "CAD": {
+ "name": "dòlar canadenc",
+ "symbol": "CAD"
+ },
+ "BBD": {
+ "name": "dòlar de Barbados",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dòlar de Belize",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "dòlar de Brunei",
+ "symbol": "BND"
+ },
+ "GYD": {
+ "name": "dòlar de Guyana",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dòlar de Hong Kong",
+ "symbol": "HK$"
+ },
+ "BSD": {
+ "name": "dòlar de les Bahames",
+ "symbol": "BSD"
+ },
+ "BMD": {
+ "name": "dòlar de les Bermudes",
+ "symbol": "BMD"
+ },
+ "KYD": {
+ "name": "dòlar de les illes Caiman",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "dòlar de les illes Salomó",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "dòlar de Singapur",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dòlar de Surinam",
+ "symbol": "SRD"
+ },
+ "TTD": {
+ "name": "dòlar de Trinitat i Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dòlar del Carib Oriental",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dòlar dels Estats Units",
+ "symbol": "USD"
+ },
+ "FJD": {
+ "name": "dòlar fijià",
+ "symbol": "FJD"
+ },
+ "JMD": {
+ "name": "dòlar jamaicà",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dòlar liberià",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dòlar namibià",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dòlar neozelandès",
+ "symbol": "NZ$"
+ },
+ "ZWL": {
+ "name": "dòlar zimbabuès (2009)",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong vietnamita",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "dram armeni",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escut de Cap Verd",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "AWG": {
+ "name": "florí d’Aruba",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "florí de les Antilles Neerlandeses",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "fòrint hongarès",
+ "symbol": "HUF"
+ },
+ "XOF": {
+ "name": "franc CFA BCEAO",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franc CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "franc CFP",
+ "symbol": "CFPF"
+ },
+ "CDF": {
+ "name": "franc congolès",
+ "symbol": "CDF"
+ },
+ "BIF": {
+ "name": "franc de Burundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "franc de Djibouti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "franc de les Comores",
+ "symbol": "KMF"
+ },
+ "RWF": {
+ "name": "franc de Ruanda",
+ "symbol": "RWF"
+ },
+ "GNF": {
+ "name": "franc guineà",
+ "symbol": "GNF"
+ },
+ "CHF": {
+ "name": "franc suís",
+ "symbol": "CHF"
+ },
+ "HTG": {
+ "name": "gourde haitià",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "guaraní paraguaià",
+ "symbol": "PYG"
+ },
+ "UAH": {
+ "name": "hrívnia ucraïnesa",
+ "symbol": "UAH"
+ },
+ "JPY": {
+ "name": "ien japonès",
+ "symbol": "JPÂ¥"
+ },
+ "CNY": {
+ "name": "iuan xinès",
+ "symbol": "Â¥"
+ },
+ "PGK": {
+ "name": "kina de Papua Nova Guinea",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip laosià",
+ "symbol": "LAK"
+ },
+ "HRK": {
+ "name": "kuna croata",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "kwacha malawià",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kwacha zambià",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "kwanza angolès",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "kyat de Myanmar",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "lari georgià",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek albanès",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondurenya",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leone de Sierra Leone",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldau",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu romanès",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "lev búlgar",
+ "symbol": "BGN"
+ },
+ "SZL": {
+ "name": "lilangeni swazi",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litas lituà",
+ "symbol": "LTL"
+ },
+ "GIP": {
+ "name": "lliura de Gibraltar",
+ "symbol": "GIP"
+ },
+ "FKP": {
+ "name": "lliura de les illes Malvines",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "lliura de Santa Helena",
+ "symbol": "SHP"
+ },
+ "SSP": {
+ "name": "lliura del Sudan del Sud",
+ "symbol": "SSP"
+ },
+ "EGP": {
+ "name": "lliura egípcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "lliura esterlina britànica",
+ "symbol": "£"
+ },
+ "LBP": {
+ "name": "lliura libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "lliura síria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "lliura sudanesa",
+ "symbol": "SDG"
+ },
+ "LSL": {
+ "name": "loti de Lesotho",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerbaidjanès",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turcman",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marc convertible de Bòsnia i Hercegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical moçambiquès",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira nigerià",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa eritreu",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "ngultrum de Bhutan",
+ "symbol": "BTN"
+ },
+ "TWD": {
+ "name": "nou dòlar de Taiwan",
+ "symbol": "NT$"
+ },
+ "PEN": {
+ "name": "nou sol peruà",
+ "symbol": "PEN"
+ },
+ "ILS": {
+ "name": "nou xéquel israelià",
+ "symbol": "₪"
+ },
+ "MRO": {
+ "name": "ouguiya maurità",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "pa‘anga tongà",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca de Macau",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentí",
+ "symbol": "ARS"
+ },
+ "COP": {
+ "name": "peso colombià",
+ "symbol": "COP"
+ },
+ "CUC": {
+ "name": "peso convertible cubà",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "peso cubà",
+ "symbol": "CUP"
+ },
+ "DOP": {
+ "name": "peso dominicà",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipí",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexicà",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso uruguaià",
+ "symbol": "UYU"
+ },
+ "CLP": {
+ "name": "peso xilè",
+ "symbol": "CLP"
+ },
+ "BWP": {
+ "name": "pula de Botswana",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalenc",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand sud-africà",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasiler",
+ "symbol": "BRL"
+ },
+ "QAR": {
+ "name": "rial de Qatar",
+ "symbol": "QAR"
+ },
+ "YER": {
+ "name": "rial iemenita",
+ "symbol": "YER"
+ },
+ "IRR": {
+ "name": "rial iranià",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omanita",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saudita",
+ "symbol": "SAR"
+ },
+ "KHR": {
+ "name": "riel cambodjà",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringgit de Malàisia",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "ruble bielorús",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "ruble rus",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rupia de les Maldives",
+ "symbol": "MVR"
+ },
+ "SCR": {
+ "name": "rupia de les Seychelles",
+ "symbol": "SCR"
+ },
+ "LKR": {
+ "name": "rupia de Sri Lanka",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia índia",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "rupia indonèsia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalesa",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistanesa",
+ "symbol": "PKR"
+ },
+ "KGS": {
+ "name": "som kirguís",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "som uzbek",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "somoni tadjik",
+ "symbol": "TJS"
+ },
+ "BDT": {
+ "name": "taka de Bangla Desh",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala samoà",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazakh",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tögrög mongol",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "vatu de Vanuatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won nord-coreà",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won sud-coreà",
+ "symbol": "â‚©"
+ },
+ "KES": {
+ "name": "xíling kenyà",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "xíling somali",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "xíling tanzà",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "xíling ugandès",
+ "symbol": "UGX"
+ },
+ "PLN": {
+ "name": "zloty polonès",
+ "symbol": "PLN"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/cgg.json b/library/intl/resources/currency/cgg.json
new file mode 100644
index 000000000..351a9d9bf
--- /dev/null
+++ b/library/intl/resources/currency/cgg.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "MGA": {
+ "name": "Ariari ya Maragariita",
+ "symbol": "MGA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Birr ya Ethiopiya",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi ya Gambia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinari ya Arigyeriya",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinari ya Bahareni",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinari ya Libya",
+ "symbol": "LYD"
+ },
+ "SDG": {
+ "name": "Dinari ya Sudani",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "Dinari ya Tunisia",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham za Buharabu",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirram ya Moroko",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobra ya Sao Tome na Purinsipo",
+ "symbol": "STD"
+ },
+ "USD": {
+ "name": "Doora ya America",
+ "symbol": "US$"
+ },
+ "AUD": {
+ "name": "Doora ya Austureeriya",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "Doora ya Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Doora ya Liberia",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Doora ya Namibiya",
+ "symbol": "NAD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "SOS": {
+ "name": "Eshiringi ya Somalia",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Eshiringi ya Tanzania",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Eshiringi ya Uganda",
+ "symbol": "USh"
+ },
+ "CVE": {
+ "name": "Eskudo ya Kepuvede",
+ "symbol": "CVE"
+ },
+ "BIF": {
+ "name": "Faranga ya Burundi",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Faranga ya CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Faranga ya CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "DJF": {
+ "name": "Faranga ya Gyibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Faranga ya Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Faranga ya Kongo",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Faranga ya Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Faranga ya Swisi",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kwaca ya Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha ya Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza ya Angora",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leone",
+ "symbol": "SLL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti ya Lesoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira ya Naigyeriya",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa ya Eritireya",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "MRO": {
+ "name": "Ougwiya ya Mouriteeniya",
+ "symbol": "MRO"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "GBP": {
+ "name": "Paundi ya Bungyereza",
+ "symbol": "£"
+ },
+ "EGP": {
+ "name": "Paundi ya Misiri",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Paundi ya Senti Herena",
+ "symbol": "SHP"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pura ya Botswana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Randi ya Sausi Afirika",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riya ya Saudi",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "MUR": {
+ "name": "Rupiiha ya Mauritiasi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupiiha ya Sherisheri",
+ "symbol": "SCR"
+ },
+ "INR": {
+ "name": "Rupiya ya India",
+ "symbol": "₹"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "Shiringi ya Kenya",
+ "symbol": "KES"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "JPY": {
+ "name": "Yeni ya Japaani",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yuan Renminbi ya China",
+ "symbol": "CNÂ¥"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/chr.json b/library/intl/resources/currency/chr.json
new file mode 100644
index 000000000..0360e743d
--- /dev/null
+++ b/library/intl/resources/currency/chr.json
@@ -0,0 +1,634 @@
+{
+ "AED": {
+ "name": "AED",
+ "symbol": "AED"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "AOA",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AUD": {
+ "name": "AUD",
+ "symbol": "A$"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BHD": {
+ "name": "BHD",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "BIF",
+ "symbol": "BIF"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BWP": {
+ "name": "BWP",
+ "symbol": "BWP"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CDF": {
+ "name": "CDF",
+ "symbol": "CDF"
+ },
+ "CHF": {
+ "name": "CHF",
+ "symbol": "CHF"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CVE": {
+ "name": "CVE",
+ "symbol": "CVE"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DJF": {
+ "name": "DJF",
+ "symbol": "DJF"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "DZD": {
+ "name": "DZD",
+ "symbol": "DZD"
+ },
+ "EGP": {
+ "name": "EGP",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "ERN",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "ETB",
+ "symbol": "ETB"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GMD": {
+ "name": "GMD",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KES": {
+ "name": "KES",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "KMF",
+ "symbol": "KMF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LRD": {
+ "name": "LRD",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "LYD",
+ "symbol": "LYD"
+ },
+ "MAD": {
+ "name": "MAD",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MGA": {
+ "name": "MGA",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MRO": {
+ "name": "MRO",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "MWK",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SAR": {
+ "name": "SAR",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "SDG",
+ "symbol": "SDG"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SOS",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "TND",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "TZS": {
+ "name": "TZS",
+ "symbol": "TZS"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "UGX",
+ "symbol": "UGX"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZAR": {
+ "name": "ZAR",
+ "symbol": "ZAR"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "INR": {
+ "name": "Ꭲá…á—Ꮎ Ꭰá•áŽ³",
+ "symbol": "₹"
+ },
+ "USD": {
+ "name": "Ꭴáƒáá—",
+ "symbol": "$"
+ },
+ "CAD": {
+ "name": "ᎧᎾᓠᎠá•áŽ³",
+ "symbol": "CA$"
+ },
+ "GBP": {
+ "name": "ᎩᎵáᲠᎠá•áŽ³",
+ "symbol": "£"
+ },
+ "BRL": {
+ "name": "á†áᎵᎢ Ꭰá•áŽ³",
+ "symbol": "R$"
+ },
+ "MXN": {
+ "name": "áá†á‚ Ꭰá•áŽ³",
+ "symbol": "MX$"
+ },
+ "CNY": {
+ "name": "á“Ꮆá‚Ꭸ Ꭰá•áŽ³",
+ "symbol": "CNÂ¥"
+ },
+ "JPY": {
+ "name": "á£á©á‚á Ꭰá•áŽ³",
+ "symbol": "JPÂ¥"
+ },
+ "RUB": {
+ "name": "á²á‚Ꭲ Ꭰá•áŽ³",
+ "symbol": "RUB"
+ },
+ "EUR": {
+ "name": "á³áŽ³á›",
+ "symbol": "€"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/cs.json b/library/intl/resources/currency/cs.json
new file mode 100644
index 000000000..274a38487
--- /dev/null
+++ b/library/intl/resources/currency/cs.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afghánský afghán",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "albánský lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "alžírský dinár",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "americký dolar",
+ "symbol": "US$"
+ },
+ "AOA": {
+ "name": "angolská kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "argentinské peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "arménský dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "arubský zlatý",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "australský dolar",
+ "symbol": "AU$"
+ },
+ "AZN": {
+ "name": "ázerbájdžánský manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "bahamský dolar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "bahrajnský dinár",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "bangladéšská taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "barbadoský dolar",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "belizský dolar",
+ "symbol": "BZD"
+ },
+ "BYR": {
+ "name": "běloruský rubl",
+ "symbol": "BYR"
+ },
+ "BMD": {
+ "name": "bermudský dolar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "bhútánský ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "bolivijský boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "bosenská konvertibilní marka",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "botswanská pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "brazilský real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "britská libra",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "brunejský dolar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "bulharský lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "burundský frank",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "CFA\/BCEAO frank",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA\/BEAC frank",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP frank",
+ "symbol": "CFPF"
+ },
+ "CZK": {
+ "name": "Äeská koruna",
+ "symbol": "KÄ"
+ },
+ "CNY": {
+ "name": "Äínský jüan",
+ "symbol": "CNÂ¥"
+ },
+ "DKK": {
+ "name": "dánská koruna",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "dominikánské peso",
+ "symbol": "DOP"
+ },
+ "DJF": {
+ "name": "džibutský frank",
+ "symbol": "DJF"
+ },
+ "EGP": {
+ "name": "egyptská libra",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "eritrejská nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "etiopský birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "falklandská libra",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "fidžijský dolar",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "filipínské peso",
+ "symbol": "PHP"
+ },
+ "GMD": {
+ "name": "gambijský dalasi",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "ghanský cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "gibraltarská libra",
+ "symbol": "GIP"
+ },
+ "GEL": {
+ "name": "gruzínské lari",
+ "symbol": "GEL"
+ },
+ "GTQ": {
+ "name": "guatemalský quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "guinejský frank",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "guyanský dolar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "haitský gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "honduraská lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "hongkongský dolar",
+ "symbol": "HK$"
+ },
+ "CLP": {
+ "name": "chilské peso",
+ "symbol": "CLP"
+ },
+ "HRK": {
+ "name": "chorvatská kuna",
+ "symbol": "HRK"
+ },
+ "INR": {
+ "name": "indická rupie",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "indonéská rupie",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "irácký dinár",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "íránský rijál",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "islandská koruna",
+ "symbol": "ISK"
+ },
+ "ILS": {
+ "name": "izraelský nový šekel",
+ "symbol": "ILS"
+ },
+ "JMD": {
+ "name": "jamajský dolar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "japonský jen",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "jemenský rijál",
+ "symbol": "YER"
+ },
+ "ZAR": {
+ "name": "jihoafrický rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "jihokorejský won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "jihosúdánská libra",
+ "symbol": "SSP"
+ },
+ "JOD": {
+ "name": "jordánský dinár",
+ "symbol": "JOD"
+ },
+ "KYD": {
+ "name": "kajmanský dolar",
+ "symbol": "KYD"
+ },
+ "KHR": {
+ "name": "kambodžský riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "kanadský dolar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "kapverdské escudo",
+ "symbol": "CVE"
+ },
+ "QAR": {
+ "name": "katarský rijál",
+ "symbol": "QAR"
+ },
+ "KZT": {
+ "name": "kazašské tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "keňský šilink",
+ "symbol": "KES"
+ },
+ "COP": {
+ "name": "kolumbijské peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "komorský frank",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "konžský frank",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "kostarický colón",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "kubánské konvertibilní peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "kubánské peso",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "kuvajtský dinár",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "kyrgyzský som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "laoský kip",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "lesothský loti",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "libanonská libra",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "liberijský dolar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "libyjský dinár",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "litevský litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "macajská pataca",
+ "symbol": "MOP"
+ },
+ "MGA": {
+ "name": "madagaskarský ariary",
+ "symbol": "MGA"
+ },
+ "HUF": {
+ "name": "maÄarský forint",
+ "symbol": "HUF"
+ },
+ "MKD": {
+ "name": "makedonský denár",
+ "symbol": "MKD"
+ },
+ "MYR": {
+ "name": "malajsijský ringgit",
+ "symbol": "MYR"
+ },
+ "MWK": {
+ "name": "malawijská kwacha",
+ "symbol": "MWK"
+ },
+ "MVR": {
+ "name": "maledivská rupie",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "marocký dinár",
+ "symbol": "MAD"
+ },
+ "MUR": {
+ "name": "mauricijská rupie",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "mauritánská ouguiya",
+ "symbol": "MRO"
+ },
+ "MXN": {
+ "name": "mexické peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "moldavský leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "mongolský tugrik",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "mozambický metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "myanmarský kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "namibijský dolar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "nepálská rupie",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "nigerijská naira",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "nikaragujská córdoba",
+ "symbol": "NIO"
+ },
+ "ANG": {
+ "name": "nizozemskoantilský gulden",
+ "symbol": "ANG"
+ },
+ "NOK": {
+ "name": "norská koruna",
+ "symbol": "NOK"
+ },
+ "NZD": {
+ "name": "novozélandský dolar",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "ománský rijál",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "pákistánská rupie",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "panamská balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "papuánská nová kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "paraguajské guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "peruánský nový sol",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "polský zlotý",
+ "symbol": "PLN"
+ },
+ "RON": {
+ "name": "rumunské leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "ruský rubl",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "rwandský frank",
+ "symbol": "RWF"
+ },
+ "AED": {
+ "name": "SAE dirham",
+ "symbol": "AED"
+ },
+ "SVC": {
+ "name": "salvadorský colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "samojská tala",
+ "symbol": "WST"
+ },
+ "SAR": {
+ "name": "saúdský rijál",
+ "symbol": "SAR"
+ },
+ "KPW": {
+ "name": "severokorejský won",
+ "symbol": "KPW"
+ },
+ "SCR": {
+ "name": "seychelská rupie",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "sierro-leonský leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "singapurský dolar",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "somálský šilink",
+ "symbol": "SOS"
+ },
+ "RSD": {
+ "name": "srbský dinár",
+ "symbol": "RSD"
+ },
+ "LKR": {
+ "name": "srílanská rupie",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "súdánská libra",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "surinamský dolar",
+ "symbol": "SRD"
+ },
+ "SHP": {
+ "name": "svatohelenská libra",
+ "symbol": "SHP"
+ },
+ "STD": {
+ "name": "svatotomášská dobra",
+ "symbol": "STD"
+ },
+ "SZL": {
+ "name": "svazijský lilangeni",
+ "symbol": "SZL"
+ },
+ "SYP": {
+ "name": "syrská libra",
+ "symbol": "SYP"
+ },
+ "SBD": {
+ "name": "šalamounský dolar",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "švédská koruna",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "švýcarský frank",
+ "symbol": "CHF"
+ },
+ "TJS": {
+ "name": "tádžické somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "tanzanský šilink",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "thajský baht",
+ "symbol": "THB"
+ },
+ "TWD": {
+ "name": "tchajwanský dolar",
+ "symbol": "NT$"
+ },
+ "TOP": {
+ "name": "tonžská paanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "trinidadský dolar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "tuniský dinár",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "turecká lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "turkmenský manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "ugandský šilink",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "ukrajinská hřivna",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "uruguayské peso",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "uzbecký sum",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "vanuatský vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "venezuelský bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "vietnamský dong",
+ "symbol": "VND"
+ },
+ "XCD": {
+ "name": "východokaribský dolar",
+ "symbol": "EC$"
+ },
+ "ZMW": {
+ "name": "zambijská kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "zimbabwský dolar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/cy.json b/library/intl/resources/currency/cy.json
new file mode 100644
index 000000000..33ad977af
--- /dev/null
+++ b/library/intl/resources/currency/cy.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghani Afghanistan",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "Ariary Madagascar",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "Baht Gwlad Thai",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "Balboa Panama",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "Birr Ethiopia",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "Bolívar Venezuela",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "Boliviano Bolifia",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "Cedi Ghana",
+ "symbol": "GHS"
+ },
+ "CRC": {
+ "name": "Colón Costa Rica",
+ "symbol": "CRC"
+ },
+ "NIO": {
+ "name": "Córdoba Nicaragua",
+ "symbol": "NIO"
+ },
+ "GMD": {
+ "name": "Dalasi Gambia",
+ "symbol": "GMD"
+ },
+ "MKD": {
+ "name": "Denar Macedonia",
+ "symbol": "MKD"
+ },
+ "DZD": {
+ "name": "Dinar Algeria",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinar Bahrain",
+ "symbol": "BHD"
+ },
+ "JOD": {
+ "name": "Dinar Gwlad yr Iorddonen",
+ "symbol": "JOD"
+ },
+ "IQD": {
+ "name": "Dinar Irac",
+ "symbol": "IQD"
+ },
+ "KWD": {
+ "name": "Dinar Kuwait",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "Dinar Libya",
+ "symbol": "LYD"
+ },
+ "RSD": {
+ "name": "Dinar Serbia",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "Dinar Tunisia",
+ "symbol": "TND"
+ },
+ "MAD": {
+ "name": "Dirham Moroco",
+ "symbol": "MAD"
+ },
+ "AED": {
+ "name": "Dirham Yr Emiradau Arabaidd Unedig",
+ "symbol": "AED"
+ },
+ "STD": {
+ "name": "Dobra São Tomé a Príncipe",
+ "symbol": "STD"
+ },
+ "VND": {
+ "name": "Dong Fietnam",
+ "symbol": "â‚«"
+ },
+ "AUD": {
+ "name": "Doler Awstralia",
+ "symbol": "A$"
+ },
+ "BBD": {
+ "name": "Doler Barbados",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Doler Belize",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Doler Bermuda",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "Doler Brunei",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "Doler Canada",
+ "symbol": "CA$"
+ },
+ "XCD": {
+ "name": "Doler Dwyrain y Caribî",
+ "symbol": "EC$"
+ },
+ "FJD": {
+ "name": "Doler Ffiji",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "Doler Guyana",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "Doler Hong Kong",
+ "symbol": "HK$"
+ },
+ "JMD": {
+ "name": "Doler Jamaica",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "Doler Liberia",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Doler Namibia",
+ "symbol": "NAD"
+ },
+ "TWD": {
+ "name": "Doler Newydd Taiwan",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "Doler Seland Newydd",
+ "symbol": "NZ$"
+ },
+ "SGD": {
+ "name": "Doler Singapore",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "Doler Surinam",
+ "symbol": "SRD"
+ },
+ "TTD": {
+ "name": "Doler Trinidad a Tobago",
+ "symbol": "TTD"
+ },
+ "USD": {
+ "name": "Doler UDA",
+ "symbol": "US$"
+ },
+ "BSD": {
+ "name": "Doler y Bahamas",
+ "symbol": "BSD"
+ },
+ "KYD": {
+ "name": "Doler Ynysoedd Cayman",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "Doler Ynysoedd Solomon",
+ "symbol": "SBD"
+ },
+ "AMD": {
+ "name": "Dram Armenia",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "Esgwdo Cabo Verde",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "Ewro",
+ "symbol": "€"
+ },
+ "AWG": {
+ "name": "Fflorin Aruba",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "Fforint Hwngari",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "Ffranc Burundi",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Ffranc CFA y BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Ffranc CFA y BEAC",
+ "symbol": "FCFA"
+ },
+ "CDF": {
+ "name": "Ffranc Congo",
+ "symbol": "CDF"
+ },
+ "KMF": {
+ "name": "Ffranc Comoros",
+ "symbol": "KMF"
+ },
+ "XPF": {
+ "name": "Ffranc CPF",
+ "symbol": "CFPF"
+ },
+ "DJF": {
+ "name": "Ffranc Djibouti",
+ "symbol": "DJF"
+ },
+ "GNF": {
+ "name": "Ffranc Guinée",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "Ffranc Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Ffranc y Swistir",
+ "symbol": "CHF"
+ },
+ "HTG": {
+ "name": "Gourde Haiti",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "Guarani Paraguay",
+ "symbol": "PYG"
+ },
+ "ANG": {
+ "name": "Guilder Antilles yr Iseldiroedd",
+ "symbol": "ANG"
+ },
+ "BTN": {
+ "name": "Ngultrum Bhutan",
+ "symbol": "BTN"
+ },
+ "UAH": {
+ "name": "Hryvnia Wcráin",
+ "symbol": "UAH"
+ },
+ "PGK": {
+ "name": "Kina Papua Guinea Newydd",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "Kip Laos",
+ "symbol": "LAK"
+ },
+ "CZK": {
+ "name": "Koruna Tsiec",
+ "symbol": "CZK"
+ },
+ "ISK": {
+ "name": "Króna Gwlad yr Iâ",
+ "symbol": "ISK"
+ },
+ "SEK": {
+ "name": "Krona Sweden",
+ "symbol": "SEK"
+ },
+ "DKK": {
+ "name": "Krone Denmarc",
+ "symbol": "DKK"
+ },
+ "NOK": {
+ "name": "Krone Norwy",
+ "symbol": "NOK"
+ },
+ "HRK": {
+ "name": "Kuna Croatia",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "Kwacha Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza Angola",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "Kyat Myanmar",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "Lari Georgia",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "Lek Albania",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "Lempira Honduras",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "Leone Sierra Leone",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "Leu Moldofa",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "Leu Rwmania",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "Lev Bwlgaria",
+ "symbol": "BGN"
+ },
+ "SZL": {
+ "name": "Lilangeni Gwlad Swazi",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "Lira Twrci",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "Litas Lithwania",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "Manat Azerbaijan",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "Manat Turkmenistan",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "Marc Trosadwy Bosnia a Hercegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "Metical Mozambique",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira Nigeria",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa Eritrea",
+ "symbol": "ERN"
+ },
+ "PEN": {
+ "name": "Nuevo Sol Periw",
+ "symbol": "PEN"
+ },
+ "MRO": {
+ "name": "Ouguiya Mauritania",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "Paʻanga Tonga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "Pataca Macau",
+ "symbol": "MOP"
+ },
+ "COP": {
+ "name": "Peso Colombia",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "Peso Cuba",
+ "symbol": "CUP"
+ },
+ "CLP": {
+ "name": "Peso Chile",
+ "symbol": "CLP"
+ },
+ "DOP": {
+ "name": "Peso Gweriniaeth Dominica",
+ "symbol": "DOP"
+ },
+ "MXN": {
+ "name": "Peso México",
+ "symbol": "MX$"
+ },
+ "PHP": {
+ "name": "Peso Pilipinas",
+ "symbol": "PHP"
+ },
+ "CUC": {
+ "name": "Peso Trosadwy Cuba",
+ "symbol": "CUC"
+ },
+ "UYU": {
+ "name": "Peso Uruguay",
+ "symbol": "UYU"
+ },
+ "ARS": {
+ "name": "Peso yr Ariannin",
+ "symbol": "ARS"
+ },
+ "BWP": {
+ "name": "Pula Botswana",
+ "symbol": "BWP"
+ },
+ "SSP": {
+ "name": "Punt De Sudan",
+ "symbol": "SSP"
+ },
+ "GIP": {
+ "name": "Punt Gibraltar",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "Punt Libanus",
+ "symbol": "LBP"
+ },
+ "SHP": {
+ "name": "Punt Saint Helena",
+ "symbol": "SHP"
+ },
+ "GBP": {
+ "name": "Punt Sterling Prydain",
+ "symbol": "£"
+ },
+ "SDG": {
+ "name": "Punt Sudan",
+ "symbol": "SDG"
+ },
+ "SYP": {
+ "name": "Punt Syria",
+ "symbol": "SYP"
+ },
+ "FKP": {
+ "name": "Punt Ynysoedd Falkland\/Malvinas",
+ "symbol": "FKP"
+ },
+ "EGP": {
+ "name": "Punt Yr Aifft",
+ "symbol": "EGP"
+ },
+ "GTQ": {
+ "name": "Quetzal Guatemala",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "Rand De Affrica",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "Real Brasil",
+ "symbol": "R$"
+ },
+ "IRR": {
+ "name": "Rial Iran",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "Rial Oman",
+ "symbol": "OMR"
+ },
+ "QAR": {
+ "name": "Rial Qatar",
+ "symbol": "QAR"
+ },
+ "YER": {
+ "name": "Rial Yemen",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "Riel Cambodia",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "Ringgit Malaysia",
+ "symbol": "MYR"
+ },
+ "SAR": {
+ "name": "Riyal Saudi Arabia",
+ "symbol": "SAR"
+ },
+ "MVR": {
+ "name": "Rufiyaa’r Maldives",
+ "symbol": "MVR"
+ },
+ "IDR": {
+ "name": "Rupiah Indonesia",
+ "symbol": "IDR"
+ },
+ "BYR": {
+ "name": "Rwbl Belarws",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "Rwbl Rwsia",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rwpî India",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rwpî Mauritius",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "Rwpî Nepal",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "Rwpî Pacistan",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "Rwpî Seychelles",
+ "symbol": "SCR"
+ },
+ "LKR": {
+ "name": "Rwpî Sri Lanka",
+ "symbol": "LKR"
+ },
+ "ILS": {
+ "name": "Shegel Newydd Israel",
+ "symbol": "₪"
+ },
+ "KGS": {
+ "name": "Som Kyrgyzstan",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "Som Uzbekistan",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "Somoni Tajikistan",
+ "symbol": "TJS"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "KES": {
+ "name": "Swllt Kenya",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Swllt Somalia",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Swllt Tanzania",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Swllt Uganda",
+ "symbol": "UGX"
+ },
+ "BDT": {
+ "name": "Taka Bangladesh",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "Tala Samoa",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "Tenge Kazakstan",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "Tugrik Mongolia",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "Vatu Vanuatu",
+ "symbol": "VUV"
+ },
+ "KRW": {
+ "name": "Won De Korea",
+ "symbol": "â‚©"
+ },
+ "KPW": {
+ "name": "Won Gogledd Corea",
+ "symbol": "KPW"
+ },
+ "JPY": {
+ "name": "Yen Japan",
+ "symbol": "JPÂ¥"
+ },
+ "CNY": {
+ "name": "Yuan Tsieina",
+ "symbol": "CNÂ¥"
+ },
+ "PLN": {
+ "name": "Zloty Gwlad Pwyl",
+ "symbol": "PLN"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/da.json b/library/intl/resources/currency/da.json
new file mode 100644
index 000000000..dd9d1d3c1
--- /dev/null
+++ b/library/intl/resources/currency/da.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghansk afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albansk lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerisk dinar",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "Amerikansk dollar",
+ "symbol": "$"
+ },
+ "AOA": {
+ "name": "Angolansk kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentinsk peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armensk dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Arubansk florin",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "Aserbajdsjansk manat",
+ "symbol": "AZN"
+ },
+ "AUD": {
+ "name": "Australsk dollar",
+ "symbol": "AU$"
+ },
+ "BSD": {
+ "name": "Bahamansk dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahrainsk dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshisk taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadisk dollar",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Belizisk dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudansk dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutansk ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Boliviansk boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnien-Hercegovinsk konvertibel mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswansk pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brasiliansk real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "Britisk pund",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Bruneisk dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarsk lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundisk franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodjansk riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadisk dollar",
+ "symbol": "CA$"
+ },
+ "KYD": {
+ "name": "Caymansk dollar",
+ "symbol": "KYD"
+ },
+ "XAF": {
+ "name": "CFA-franc (BEAC)",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "CFA-franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "CFP-franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilensk peso",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "Colombiansk peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorisk franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolesisk franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costaricansk colón",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "Cubansk konvertibel peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cubansk peso",
+ "symbol": "CUP"
+ },
+ "DKK": {
+ "name": "Dansk krone",
+ "symbol": "kr."
+ },
+ "AED": {
+ "name": "Dirham fra de Forenede Arabiske Emirater",
+ "symbol": "AED"
+ },
+ "DJF": {
+ "name": "Djiboutisk franc",
+ "symbol": "DJF"
+ },
+ "STD": {
+ "name": "Dobra fra Sao Tome og Principe",
+ "symbol": "STD"
+ },
+ "TTD": {
+ "name": "Dollar fra Trinidad og Tobago",
+ "symbol": "TTD"
+ },
+ "DOP": {
+ "name": "Dominikansk peso",
+ "symbol": "DOP"
+ },
+ "EGP": {
+ "name": "Egyptisk pund",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritreisk nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Etiopisk birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "Fijiansk dollar",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "Filippinsk peso",
+ "symbol": "PHP"
+ },
+ "GMD": {
+ "name": "Gambisk dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgisk lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanesisk cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltarisk pund",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalansk quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guineansk franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyansk dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitisk gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduransk lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hongkong dollar",
+ "symbol": "HK$"
+ },
+ "BYR": {
+ "name": "Hviderussisk rubel",
+ "symbol": "BYR"
+ },
+ "INR": {
+ "name": "Indisk rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesisk rupiah",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "Irakisk dinar",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "Iransk rial",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "Islansk krone",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "Jamaicansk dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japansk yen",
+ "symbol": "JPÂ¥"
+ },
+ "JOD": {
+ "name": "Jordansk dinar",
+ "symbol": "JOD"
+ },
+ "CVE": {
+ "name": "Kapverdisk escudo",
+ "symbol": "CVE"
+ },
+ "KZT": {
+ "name": "Kasakhisk tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyansk shilling",
+ "symbol": "KES"
+ },
+ "CNY": {
+ "name": "Kinesisk yuan renminbi",
+ "symbol": "CNÂ¥"
+ },
+ "KGS": {
+ "name": "Kirgisisk som",
+ "symbol": "KGS"
+ },
+ "HRK": {
+ "name": "Kroatisk kuna",
+ "symbol": "HRK"
+ },
+ "KWD": {
+ "name": "Kuwaitisk dinar",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "Laotisk kip",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "Lesothisk loti",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "Libanesisk pund",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "Liberisk dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libysk dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Litauisk litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macaosk pataca",
+ "symbol": "MOP"
+ },
+ "MGA": {
+ "name": "Madagaskisk ariary",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "Makedonsk denar",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "Malawisk kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysisk ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivisk rufiyaa",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "Marokkansk dirham",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "Mauritansk ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritisk rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexicansk peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldovisk leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolsk tugrik",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "Mozambiquisk metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmarsk kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibisk dollar",
+ "symbol": "NAD"
+ },
+ "ANG": {
+ "name": "Nederlandske Antiller-gylden",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "Nepalesisk rupee",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "New Zealandsk dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaraguansk cordoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigeriansk naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "Nordkoreansk won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norsk krone",
+ "symbol": "NOK"
+ },
+ "ILS": {
+ "name": "Ny israelsk shekel",
+ "symbol": "₪"
+ },
+ "TWD": {
+ "name": "Ny taiwansk dollar",
+ "symbol": "NT$"
+ },
+ "OMR": {
+ "name": "Omansk rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistansk rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamansk balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papuansk kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguaysk guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruviansk nuevo sol",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "Polsk zloty",
+ "symbol": "PLN"
+ },
+ "FKP": {
+ "name": "Pund fra Falklandsøerne",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "Pund fra Saint Helena",
+ "symbol": "SHP"
+ },
+ "QAR": {
+ "name": "Qatarsk rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Rumænsk leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russisk rubel",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandisk franc",
+ "symbol": "RWF"
+ },
+ "SBD": {
+ "name": "Salomonsk dollar",
+ "symbol": "SBD"
+ },
+ "SVC": {
+ "name": "Salvadoransk colon",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoansk tala",
+ "symbol": "WST"
+ },
+ "SAR": {
+ "name": "Saudiarabisk riyal",
+ "symbol": "SAR"
+ },
+ "CHF": {
+ "name": "Schweizisk franc",
+ "symbol": "CHF"
+ },
+ "RSD": {
+ "name": "Serbisk dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellisk rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierraleonsk leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singaporeansk dollar",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "Somalisk shilling",
+ "symbol": "SOS"
+ },
+ "LKR": {
+ "name": "Srilankansk rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudansk pund",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamsk dollar",
+ "symbol": "SRD"
+ },
+ "SEK": {
+ "name": "Svensk krone",
+ "symbol": "SEK"
+ },
+ "SZL": {
+ "name": "Swazilandsk lilangeni",
+ "symbol": "SZL"
+ },
+ "ZAR": {
+ "name": "Sydafrikansk rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "Sydkoreansk won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "Sydsudanske pund",
+ "symbol": "SSP"
+ },
+ "SYP": {
+ "name": "Syrisk pund",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tadsjikisk somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanisk shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thailandsk baht",
+ "symbol": "฿"
+ },
+ "CZK": {
+ "name": "Tjekkisk koruna",
+ "symbol": "CZK"
+ },
+ "TOP": {
+ "name": "Tongansk paʻanga",
+ "symbol": "TOP"
+ },
+ "TND": {
+ "name": "Tunesisk dinar",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "Turkmensk manat",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "Tyrkisk lira",
+ "symbol": "TRY"
+ },
+ "UGX": {
+ "name": "Ugandisk shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainsk grynia",
+ "symbol": "UAH"
+ },
+ "HUF": {
+ "name": "Ungarsk forint",
+ "symbol": "HUF"
+ },
+ "UYU": {
+ "name": "Uruguayansk peso",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "Usbekisk sum",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuaisk vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelansk bolivar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamesisk dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemenitisk rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambisk kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwisk dollar (2009)",
+ "symbol": "ZWL"
+ },
+ "XCD": {
+ "name": "Østkaribisk dollar",
+ "symbol": "EC$"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/dav.json b/library/intl/resources/currency/dav.json
new file mode 100644
index 000000000..4401f9af7
--- /dev/null
+++ b/library/intl/resources/currency/dav.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "MGA": {
+ "name": "Ariary ya Bukini",
+ "symbol": "MGA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Bir ya Uhabeshi",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi ya Gambia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinari ya Aljeria",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinari ya Bahareni",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinari ya Libya",
+ "symbol": "LYD"
+ },
+ "TND": {
+ "name": "Dinari ya Tunisia",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham ya Falme za Kiarabu",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham ya Moroko",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobra ya Sao Tome na Principe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "Dola ya Australia",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "Dola ya Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dola ya Liberia",
+ "symbol": "LRD"
+ },
+ "USD": {
+ "name": "Dola ya Marekani",
+ "symbol": "US$"
+ },
+ "NAD": {
+ "name": "Dola ya Namibia",
+ "symbol": "NAD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "Eskudo ya Kepuvede",
+ "symbol": "CVE"
+ },
+ "XOF": {
+ "name": "Faranga CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Faranga CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "BIF": {
+ "name": "Faranga ya Burundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Faranga ya Jibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Faranga ya Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Faranga ya Kongo",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Faranga ya Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Faranga ya Uswisi",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kwacha ya Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha ya Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza ya Angola",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leoni",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti ya Lesoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira ya Nijeria",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa ya Eritrea",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "EGP": {
+ "name": "Pauni ya Misri",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Pauni ya Santahelena",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Pauni ya Sudani",
+ "symbol": "SDG"
+ },
+ "GBP": {
+ "name": "Pauni ya Uingereza",
+ "symbol": "£"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pula ya Botswana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Randi ya Afrika Kusini",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riyal ya Saudia",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupia ya India",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupia ya Morisi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupia ya Shelisheli",
+ "symbol": "SCR"
+ },
+ "JPY": {
+ "name": "Sarafu ya Kijapani",
+ "symbol": "JPÂ¥"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "Shilingi ya Kenya",
+ "symbol": "Ksh"
+ },
+ "SOS": {
+ "name": "Shilingi ya Somalia",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Shilingi ya Tanzania",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Shilingi ya Uganda",
+ "symbol": "UGX"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ugwiya ya Moritania",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yuan Renminbi ya China",
+ "symbol": "CNÂ¥"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/de-CH.json b/library/intl/resources/currency/de-CH.json
new file mode 100644
index 000000000..3518b82a8
--- /dev/null
+++ b/library/intl/resources/currency/de-CH.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghanischer Afghani",
+ "symbol": "AFN"
+ },
+ "EGP": {
+ "name": "Ägyptisches Pfund",
+ "symbol": "EGP"
+ },
+ "ALL": {
+ "name": "Albanischer Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerischer Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolanischer Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentinischer Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenischer Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruba-Florin",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "Aserbaidschan-Manat",
+ "symbol": "AZN"
+ },
+ "ETB": {
+ "name": "Äthiopischer Birr",
+ "symbol": "ETB"
+ },
+ "AUD": {
+ "name": "Australischer Dollar",
+ "symbol": "AU$"
+ },
+ "BSD": {
+ "name": "Bahamas-Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahrain-Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladesch-Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbados-Dollar",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Belize-Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermuda-Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutan-Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivanischer Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnien und Herzegowina Konvertierbare Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanischer Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brasilianischer Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "Britisches Pfund Sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunei-Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarischer Lew",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundi-Franc",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "CFA-Franc (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA-Franc (BEAC)",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP-Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilenischer Peso",
+ "symbol": "CLP"
+ },
+ "CRC": {
+ "name": "Costa-Rica-Colón",
+ "symbol": "CRC"
+ },
+ "DKK": {
+ "name": "Dänische Krone",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "Dominikanischer Peso",
+ "symbol": "DOP"
+ },
+ "DJF": {
+ "name": "Dschibuti-Franc",
+ "symbol": "DJF"
+ },
+ "SVC": {
+ "name": "El Salvador Colon",
+ "symbol": "SVC"
+ },
+ "ERN": {
+ "name": "Eritreischer Nakfa",
+ "symbol": "ERN"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland-Pfund",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fidschi-Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambia-Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgischer Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaischer Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar-Pfund",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemaltekischer Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinea-Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyana-Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitianische Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduras-Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hongkong-Dollar",
+ "symbol": "HK$"
+ },
+ "INR": {
+ "name": "Indische Rupie",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesische Rupiah",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "Irakischer Dinar",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "Iranischer Rial",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "Isländische Krone",
+ "symbol": "ISK"
+ },
+ "ILS": {
+ "name": "Israelischer Neuer Schekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaika-Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanischer Yen",
+ "symbol": "Â¥"
+ },
+ "YER": {
+ "name": "Jemen-Rial",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "Jordanischer Dinar",
+ "symbol": "JOD"
+ },
+ "KYD": {
+ "name": "Kaiman-Dollar",
+ "symbol": "KYD"
+ },
+ "KHR": {
+ "name": "Kambodschanischer Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Kanadischer Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Kap-Verde-Escudo",
+ "symbol": "CVE"
+ },
+ "KZT": {
+ "name": "Kasachischer Tenge",
+ "symbol": "KZT"
+ },
+ "QAR": {
+ "name": "Katar-Riyal",
+ "symbol": "QAR"
+ },
+ "KES": {
+ "name": "Kenia-Schilling",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "Kirgisischer Som",
+ "symbol": "KGS"
+ },
+ "COP": {
+ "name": "Kolumbianischer Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Komoren-Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Kongo-Franc",
+ "symbol": "CDF"
+ },
+ "HRK": {
+ "name": "Kroatischer Kuna",
+ "symbol": "HRK"
+ },
+ "CUP": {
+ "name": "Kubanischer Peso",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "Kubanischer Peso (konvertibel)",
+ "symbol": "CUC"
+ },
+ "KWD": {
+ "name": "Kuwait-Dinar",
+ "symbol": "KWD"
+ },
+ "ZMW": {
+ "name": "Kwacha",
+ "symbol": "ZMW"
+ },
+ "LAK": {
+ "name": "Laotischer Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Libanesisches Pfund",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "Liberianischer Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyscher Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Litauischer Litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Loti",
+ "symbol": "LSL"
+ },
+ "MOP": {
+ "name": "Macao-Pataca",
+ "symbol": "MOP"
+ },
+ "MGA": {
+ "name": "Madagaskar-Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawi-Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysischer Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Malediven-Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "Marokkanischer Dirham",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "Mauretanischer Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritius-Rupie",
+ "symbol": "MUR"
+ },
+ "MKD": {
+ "name": "Mazedonischer Denar",
+ "symbol": "MKD"
+ },
+ "MXN": {
+ "name": "Mexikanischer Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldau-Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolischer Tögrög",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "Mosambikanischer Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmarischer Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibia-Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalesische Rupie",
+ "symbol": "NPR"
+ },
+ "TWD": {
+ "name": "Neuer Taiwan-Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "Neuseeland-Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaragua-Córdoba",
+ "symbol": "NIO"
+ },
+ "ANG": {
+ "name": "Niederländische-Antillen-Gulden",
+ "symbol": "ANG"
+ },
+ "NGN": {
+ "name": "Nigerianischer Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "Nordkoreanischer Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegische Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omanischer Rial",
+ "symbol": "OMR"
+ },
+ "XCD": {
+ "name": "Ostkaribischer Dollar",
+ "symbol": "EC$"
+ },
+ "PKR": {
+ "name": "Pakistanische Rupie",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamaischer Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua-Neuguineischer Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayischer Guaraní",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruanischer Neuer Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippinischer Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polnischer ZÅ‚oty",
+ "symbol": "PLN"
+ },
+ "CNY": {
+ "name": "Renminbi Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "RWF": {
+ "name": "Ruanda-Franc",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "Rumänischer Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russischer Rubel",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "Salomonen-Dollar",
+ "symbol": "SBD"
+ },
+ "WST": {
+ "name": "Samoanischer Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São-toméischer Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi-Rial",
+ "symbol": "SAR"
+ },
+ "SEK": {
+ "name": "Schwedische Krone",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Schweizer Franken",
+ "symbol": "CHF"
+ },
+ "RSD": {
+ "name": "Serbischer Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellen-Rupie",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra-leonischer Leone",
+ "symbol": "SLL"
+ },
+ "ZWL": {
+ "name": "Simbabwe-Dollar (2009)",
+ "symbol": "ZWL"
+ },
+ "SGD": {
+ "name": "Singapur-Dollar",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "Somalia-Schilling",
+ "symbol": "SOS"
+ },
+ "LKR": {
+ "name": "Sri-Lanka-Rupie",
+ "symbol": "LKR"
+ },
+ "SHP": {
+ "name": "St. Helena-Pfund",
+ "symbol": "SHP"
+ },
+ "ZAR": {
+ "name": "Südafrikanischer Rand",
+ "symbol": "ZAR"
+ },
+ "SDG": {
+ "name": "Sudanesisches Pfund",
+ "symbol": "SDG"
+ },
+ "KRW": {
+ "name": "Südkoreanischer Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "Südsudanesisches Pfund",
+ "symbol": "SSP"
+ },
+ "SRD": {
+ "name": "Suriname-Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swasiländischer Lilangeni",
+ "symbol": "SZL"
+ },
+ "SYP": {
+ "name": "Syrisches Pfund",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tadschikistan-Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tansania-Schilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thailändischer Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongaischer Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad und Tobago-Dollar",
+ "symbol": "TTD"
+ },
+ "CZK": {
+ "name": "Tschechische Krone",
+ "symbol": "CZK"
+ },
+ "TND": {
+ "name": "Tunesischer Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Türkische Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistan-Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Uganda-Schilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainische Hrywnja",
+ "symbol": "UAH"
+ },
+ "HUF": {
+ "name": "Ungarischer Forint",
+ "symbol": "HUF"
+ },
+ "UYU": {
+ "name": "Uruguayischer Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US-Dollar",
+ "symbol": "$"
+ },
+ "UZS": {
+ "name": "Usbekistan-Sum",
+ "symbol": "UZS"
+ },
+ "AED": {
+ "name": "VAE-Dirham",
+ "symbol": "AED"
+ },
+ "VUV": {
+ "name": "Vanuatu-Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezolanischer Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamesischer Dong",
+ "symbol": "â‚«"
+ },
+ "BYR": {
+ "name": "Weissrussischer Rubel",
+ "symbol": "BYR"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/de.json b/library/intl/resources/currency/de.json
new file mode 100644
index 000000000..b8b1b90d9
--- /dev/null
+++ b/library/intl/resources/currency/de.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghanischer Afghani",
+ "symbol": "AFN"
+ },
+ "EGP": {
+ "name": "Ägyptisches Pfund",
+ "symbol": "EGP"
+ },
+ "ALL": {
+ "name": "Albanischer Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerischer Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolanischer Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentinischer Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenischer Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruba-Florin",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "Aserbaidschan-Manat",
+ "symbol": "AZN"
+ },
+ "ETB": {
+ "name": "Äthiopischer Birr",
+ "symbol": "ETB"
+ },
+ "AUD": {
+ "name": "Australischer Dollar",
+ "symbol": "AU$"
+ },
+ "BSD": {
+ "name": "Bahamas-Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahrain-Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladesch-Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbados-Dollar",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Belize-Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermuda-Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutan-Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivanischer Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnien und Herzegowina Konvertierbare Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanischer Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brasilianischer Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "Britisches Pfund Sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunei-Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarischer Lew",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundi-Franc",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "CFA-Franc (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA-Franc (BEAC)",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP-Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilenischer Peso",
+ "symbol": "CLP"
+ },
+ "CRC": {
+ "name": "Costa-Rica-Colón",
+ "symbol": "CRC"
+ },
+ "DKK": {
+ "name": "Dänische Krone",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "Dominikanischer Peso",
+ "symbol": "DOP"
+ },
+ "DJF": {
+ "name": "Dschibuti-Franc",
+ "symbol": "DJF"
+ },
+ "SVC": {
+ "name": "El Salvador Colon",
+ "symbol": "SVC"
+ },
+ "ERN": {
+ "name": "Eritreischer Nakfa",
+ "symbol": "ERN"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland-Pfund",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fidschi-Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambia-Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgischer Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaischer Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar-Pfund",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemaltekischer Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinea-Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyana-Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitianische Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduras-Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hongkong-Dollar",
+ "symbol": "HK$"
+ },
+ "INR": {
+ "name": "Indische Rupie",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesische Rupiah",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "Irakischer Dinar",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "Iranischer Rial",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "Isländische Krone",
+ "symbol": "ISK"
+ },
+ "ILS": {
+ "name": "Israelischer Neuer Schekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaika-Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanischer Yen",
+ "symbol": "Â¥"
+ },
+ "YER": {
+ "name": "Jemen-Rial",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "Jordanischer Dinar",
+ "symbol": "JOD"
+ },
+ "KYD": {
+ "name": "Kaiman-Dollar",
+ "symbol": "KYD"
+ },
+ "KHR": {
+ "name": "Kambodschanischer Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Kanadischer Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Kap-Verde-Escudo",
+ "symbol": "CVE"
+ },
+ "KZT": {
+ "name": "Kasachischer Tenge",
+ "symbol": "KZT"
+ },
+ "QAR": {
+ "name": "Katar-Riyal",
+ "symbol": "QAR"
+ },
+ "KES": {
+ "name": "Kenia-Schilling",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "Kirgisischer Som",
+ "symbol": "KGS"
+ },
+ "COP": {
+ "name": "Kolumbianischer Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Komoren-Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Kongo-Franc",
+ "symbol": "CDF"
+ },
+ "HRK": {
+ "name": "Kroatischer Kuna",
+ "symbol": "HRK"
+ },
+ "CUP": {
+ "name": "Kubanischer Peso",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "Kubanischer Peso (konvertibel)",
+ "symbol": "CUC"
+ },
+ "KWD": {
+ "name": "Kuwait-Dinar",
+ "symbol": "KWD"
+ },
+ "ZMW": {
+ "name": "Kwacha",
+ "symbol": "ZMW"
+ },
+ "LAK": {
+ "name": "Laotischer Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Libanesisches Pfund",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "Liberianischer Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyscher Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Litauischer Litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Loti",
+ "symbol": "LSL"
+ },
+ "MOP": {
+ "name": "Macao-Pataca",
+ "symbol": "MOP"
+ },
+ "MGA": {
+ "name": "Madagaskar-Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawi-Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysischer Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Malediven-Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "Marokkanischer Dirham",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "Mauretanischer Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritius-Rupie",
+ "symbol": "MUR"
+ },
+ "MKD": {
+ "name": "Mazedonischer Denar",
+ "symbol": "MKD"
+ },
+ "MXN": {
+ "name": "Mexikanischer Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldau-Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolischer Tögrög",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "Mosambikanischer Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmarischer Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibia-Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalesische Rupie",
+ "symbol": "NPR"
+ },
+ "TWD": {
+ "name": "Neuer Taiwan-Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "Neuseeland-Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaragua-Córdoba",
+ "symbol": "NIO"
+ },
+ "ANG": {
+ "name": "Niederländische-Antillen-Gulden",
+ "symbol": "ANG"
+ },
+ "NGN": {
+ "name": "Nigerianischer Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "Nordkoreanischer Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegische Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omanischer Rial",
+ "symbol": "OMR"
+ },
+ "XCD": {
+ "name": "Ostkaribischer Dollar",
+ "symbol": "EC$"
+ },
+ "PKR": {
+ "name": "Pakistanische Rupie",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamaischer Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua-Neuguineischer Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayischer Guaraní",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruanischer Neuer Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippinischer Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polnischer ZÅ‚oty",
+ "symbol": "PLN"
+ },
+ "CNY": {
+ "name": "Renminbi Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "RWF": {
+ "name": "Ruanda-Franc",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "Rumänischer Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russischer Rubel",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "Salomonen-Dollar",
+ "symbol": "SBD"
+ },
+ "WST": {
+ "name": "Samoanischer Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São-toméischer Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi-Rial",
+ "symbol": "SAR"
+ },
+ "SEK": {
+ "name": "Schwedische Krone",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Schweizer Franken",
+ "symbol": "CHF"
+ },
+ "RSD": {
+ "name": "Serbischer Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellen-Rupie",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra-leonischer Leone",
+ "symbol": "SLL"
+ },
+ "ZWL": {
+ "name": "Simbabwe-Dollar (2009)",
+ "symbol": "ZWL"
+ },
+ "SGD": {
+ "name": "Singapur-Dollar",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "Somalia-Schilling",
+ "symbol": "SOS"
+ },
+ "LKR": {
+ "name": "Sri-Lanka-Rupie",
+ "symbol": "LKR"
+ },
+ "SHP": {
+ "name": "St. Helena-Pfund",
+ "symbol": "SHP"
+ },
+ "ZAR": {
+ "name": "Südafrikanischer Rand",
+ "symbol": "ZAR"
+ },
+ "SDG": {
+ "name": "Sudanesisches Pfund",
+ "symbol": "SDG"
+ },
+ "KRW": {
+ "name": "Südkoreanischer Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "Südsudanesisches Pfund",
+ "symbol": "SSP"
+ },
+ "SRD": {
+ "name": "Suriname-Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swasiländischer Lilangeni",
+ "symbol": "SZL"
+ },
+ "SYP": {
+ "name": "Syrisches Pfund",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tadschikistan-Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tansania-Schilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thailändischer Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongaischer Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad und Tobago-Dollar",
+ "symbol": "TTD"
+ },
+ "CZK": {
+ "name": "Tschechische Krone",
+ "symbol": "CZK"
+ },
+ "TND": {
+ "name": "Tunesischer Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Türkische Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistan-Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Uganda-Schilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainische Hrywnja",
+ "symbol": "UAH"
+ },
+ "HUF": {
+ "name": "Ungarischer Forint",
+ "symbol": "HUF"
+ },
+ "UYU": {
+ "name": "Uruguayischer Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US-Dollar",
+ "symbol": "$"
+ },
+ "UZS": {
+ "name": "Usbekistan-Sum",
+ "symbol": "UZS"
+ },
+ "AED": {
+ "name": "VAE-Dirham",
+ "symbol": "AED"
+ },
+ "VUV": {
+ "name": "Vanuatu-Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezolanischer Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamesischer Dong",
+ "symbol": "â‚«"
+ },
+ "BYR": {
+ "name": "Weißrussischer Rubel",
+ "symbol": "BYR"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/dje.json b/library/intl/resources/currency/dje.json
new file mode 100644
index 000000000..c75824e61
--- /dev/null
+++ b/library/intl/resources/currency/dje.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Alžeeri Dinar",
+ "symbol": "DZD"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "USD": {
+ "name": "Ameriki Dollar",
+ "symbol": "US$"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "Angoola Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BHD": {
+ "name": "Bahareen Dinar",
+ "symbol": "BHD"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BWP": {
+ "name": "Botswaana Pund",
+ "symbol": "BWP"
+ },
+ "GBP": {
+ "name": "Britin Pund",
+ "symbol": "£"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BIF": {
+ "name": "Burundi Fraŋ",
+ "symbol": "BIF"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "XOF": {
+ "name": "CFA Fraŋ (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Fraŋ (BEAC)",
+ "symbol": "FCFA"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "ETB": {
+ "name": "Ecioopi Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Eero",
+ "symbol": "€"
+ },
+ "ERN": {
+ "name": "Eritree Nafka",
+ "symbol": "ERN"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GMD": {
+ "name": "Gambi Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "ZAR": {
+ "name": "Hawasa Afriki Rand",
+ "symbol": "ZAR"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "Indu Rupii",
+ "symbol": "₹"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JPY": {
+ "name": "Jaapoŋ Yen",
+ "symbol": "JPÂ¥"
+ },
+ "DJF": {
+ "name": "Jibuuti Fraŋ",
+ "symbol": "DJF"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "CAD": {
+ "name": "Kanaada Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Kapuver Escudo",
+ "symbol": "CVE"
+ },
+ "KES": {
+ "name": "Keeniya Šiiliŋ",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "Komoor Fraŋ",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Kongo Fraŋ",
+ "symbol": "CDF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "AED": {
+ "name": "Laaraw Immaara Margantey Dirham",
+ "symbol": "AED"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leeon",
+ "symbol": "SLL"
+ },
+ "LSL": {
+ "name": "Leezoto Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberia Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Liibi Dinar",
+ "symbol": "LYD"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MAD": {
+ "name": "Maarok Dirham",
+ "symbol": "MAD"
+ },
+ "MWK": {
+ "name": "Malaawi Kwaca",
+ "symbol": "MWK"
+ },
+ "MGA": {
+ "name": "Malgaaši Fraŋ",
+ "symbol": "MGA"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "EGP": {
+ "name": "Misra Pund",
+ "symbol": "EGP"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MUR": {
+ "name": "Mooris Rupii",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "Mooritaani Ugiya",
+ "symbol": "MRO"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naajiriya Neera",
+ "symbol": "NGN"
+ },
+ "NAD": {
+ "name": "Naamibi Dollar",
+ "symbol": "NAD"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "AUD": {
+ "name": "Ostraali Dollar",
+ "symbol": "A$"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwanda Fraŋ",
+ "symbol": "RWF"
+ },
+ "STD": {
+ "name": "Sao Tome nda Prinsipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudiya Riyal",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "Seešel Rupii",
+ "symbol": "SCR"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SHP": {
+ "name": "Seŋ Helena Fraŋ",
+ "symbol": "SHP"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "CNY": {
+ "name": "Sinwa Yuan Renminbi",
+ "symbol": "CNÂ¥"
+ },
+ "SOS": {
+ "name": "Somaali Šiiliŋ",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SDG": {
+ "name": "Suudaŋ Dinar",
+ "symbol": "SDG"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "CHF": {
+ "name": "Swisu Fraŋ",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "TZS": {
+ "name": "Tanzaani Šiiliŋ",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunizi Dinar",
+ "symbol": "TND"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "Uganda Šiiliŋ",
+ "symbol": "UGX"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambi Kwaca",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/dsb.json b/library/intl/resources/currency/dsb.json
new file mode 100644
index 000000000..4fc931fa3
--- /dev/null
+++ b/library/intl/resources/currency/dsb.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afghaniski afgani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "albański lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "algeriski dinar",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "ameriski dolar",
+ "symbol": "$"
+ },
+ "AOA": {
+ "name": "angolska kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "argentinski peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "armeński dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "aruba-florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "awstralski dolar",
+ "symbol": "AUD"
+ },
+ "AZN": {
+ "name": "azerbajdžaniski manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "bahamaski dolar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "bahrainski dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "bangladešska taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "barbadoski dolar",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "belizeski dolar",
+ "symbol": "BZD"
+ },
+ "BYR": {
+ "name": "běłoruski rubl",
+ "symbol": "BYR"
+ },
+ "BMD": {
+ "name": "bermudaski dolar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "bhutański ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "boliwiski boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "bosniska konwertibelna marka",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "botswaniska pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "brazilski real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "britiski punt",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "bruneiski dolar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "bulgarski lew",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "burundiski frank",
+ "symbol": "BIF"
+ },
+ "CZK": {
+ "name": "Äeska krona",
+ "symbol": "CZK"
+ },
+ "XOF": {
+ "name": "CFA-frank (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA-frank (BEAC)",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP-frank",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "chilski peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "chinski yuan",
+ "symbol": "CNÂ¥"
+ },
+ "HRK": {
+ "name": "chorwatska kuna",
+ "symbol": "HRK"
+ },
+ "DKK": {
+ "name": "dańska krona",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "dominikański peso",
+ "symbol": "DOP"
+ },
+ "DJF": {
+ "name": "dźibutiski frank",
+ "symbol": "DJF"
+ },
+ "EGP": {
+ "name": "egyptojski punt",
+ "symbol": "EGP"
+ },
+ "SVC": {
+ "name": "el-salvadorski colón",
+ "symbol": "SVC"
+ },
+ "ERN": {
+ "name": "eritrejska nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "etiopiski birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "falklandski punt",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "fidźiski dolar",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "filipinski peso",
+ "symbol": "PHP"
+ },
+ "GMD": {
+ "name": "gambiski dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "georgiski lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "ghanaski cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "gibraltiski punt",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "guatemalski quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "guineski frank",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "guyański dolar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "haitiska gourda",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "honduraska lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "hongkongski dolar",
+ "symbol": "HK$"
+ },
+ "INR": {
+ "name": "indiska rupija",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "indoneska rupija",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "irakski dinar",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "irański rial",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "islandska krona",
+ "symbol": "ISK"
+ },
+ "ILS": {
+ "name": "israelski nowy Å¡ekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "jamaiski dolar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "japański yen",
+ "symbol": "Â¥"
+ },
+ "YER": {
+ "name": "jemeński rial",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "jordaniski dinar",
+ "symbol": "JOD"
+ },
+ "KYD": {
+ "name": "kajmaniski dolar",
+ "symbol": "KYD"
+ },
+ "KHR": {
+ "name": "kambodžaski riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "kanadiski dolar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "kapverdski escudo",
+ "symbol": "CVE"
+ },
+ "QAR": {
+ "name": "katarski rial",
+ "symbol": "QAR"
+ },
+ "KZT": {
+ "name": "kazachski tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "keniaski Å¡iling",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "kirgiski som",
+ "symbol": "KGS"
+ },
+ "COP": {
+ "name": "kolumbiski peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "komorski frank",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "kongoski frank",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "kosta-rikański colón",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "kubański konwertibelny peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "kubański peso",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "kuwaitski dinar",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "laoski kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "libanoński punt",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "liberiski dolar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "libyski dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "litawski litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "MOP": {
+ "name": "macaoska pataca",
+ "symbol": "MOP"
+ },
+ "MGA": {
+ "name": "madagaskarski ariary",
+ "symbol": "MGA"
+ },
+ "HUF": {
+ "name": "madźarski forint",
+ "symbol": "HUF"
+ },
+ "MKD": {
+ "name": "makedoński denar",
+ "symbol": "MKD"
+ },
+ "MYR": {
+ "name": "malajziski ringgit",
+ "symbol": "MYR"
+ },
+ "MWK": {
+ "name": "malawiski kwacha",
+ "symbol": "MWK"
+ },
+ "MVR": {
+ "name": "malediwiska rupija",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "marokkoski dirham",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "mauretański ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "mauriciska rupija",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "mexiski peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "moldawiski leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "mongolski tugrik",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "mosambikski metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "myanmarski kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "namibiski dolar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "nepalska rupija",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "nigeriska naira",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "nikaraguaska cordoba",
+ "symbol": "NIO"
+ },
+ "ANG": {
+ "name": "nižozemsko-antilski gulden",
+ "symbol": "ANG"
+ },
+ "NOK": {
+ "name": "norwegska krona",
+ "symbol": "NOK"
+ },
+ "NZD": {
+ "name": "nowoseelandski dolar",
+ "symbol": "NZ$"
+ },
+ "TWD": {
+ "name": "nowy taiwański dolar",
+ "symbol": "NT$"
+ },
+ "OMR": {
+ "name": "omański rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "pakistańska rupija",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "panamaski balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "papua-neuguinejska kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "paraguayski guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "peruski nowy sol",
+ "symbol": "PEN"
+ },
+ "ZAR": {
+ "name": "pódpołdnjowoafriski rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "pódpołdnjowokorejski won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "pódpołdnjowosudański punt",
+ "symbol": "SSP"
+ },
+ "KPW": {
+ "name": "pódpołnocnokorejski won",
+ "symbol": "KPW"
+ },
+ "XCD": {
+ "name": "pódzajtšnokaribiski dolar",
+ "symbol": "EC$"
+ },
+ "PLN": {
+ "name": "pólski złoty",
+ "symbol": "zł"
+ },
+ "RWF": {
+ "name": "ruandiski frank",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "rumuński leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "ruski rubl",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "salomoński dolar",
+ "symbol": "SBD"
+ },
+ "ZMW": {
+ "name": "sambiska kwacha",
+ "symbol": "ZMW"
+ },
+ "WST": {
+ "name": "samoaska tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "são-tomeska dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "saudi-arabiski rial",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "serbiski dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "seychelska rupija",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "sierra-leoneski leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "singapurski dolar",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "somaliski Å¡iling",
+ "symbol": "SOS"
+ },
+ "LKR": {
+ "name": "sri-lankaska rupija",
+ "symbol": "LKR"
+ },
+ "SHP": {
+ "name": "St. Helena punt",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "sudański punt",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "surinamski dolar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "swasiski lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Å¡wedska krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Å¡wicarski frank",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "syriski punt",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "tadźikiski somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "tansaniski Å¡iling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "thaiski baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "tongaski paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "trinidad-tobagoski dolar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "tuneziski dinar",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "turkmeniski manat",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "turkojska lira",
+ "symbol": "TRY"
+ },
+ "UGX": {
+ "name": "ugandaski Å¡iling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "ukrainska griwna",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "uruguayski peso",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "usbekiski sum",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "vanuatski vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "venezuelski bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "vietnamski dong",
+ "symbol": "â‚«"
+ },
+ "AED": {
+ "name": "ZAE dirham",
+ "symbol": "AED"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/dyo.json b/library/intl/resources/currency/dyo.json
new file mode 100644
index 000000000..4b6fd80af
--- /dev/null
+++ b/library/intl/resources/currency/dyo.json
@@ -0,0 +1,634 @@
+{
+ "AED": {
+ "name": "AED",
+ "symbol": "AED"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "MGA": {
+ "name": "ariari yati Madagaskaar",
+ "symbol": "MGA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "birr yati Ecoopi",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CHF": {
+ "name": "CHF",
+ "symbol": "CHF"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "dalasi yati Gambi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinaar yati Alseri",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinaar yati Bahrayn",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "dinaar yati Libia",
+ "symbol": "LYD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "CAD": {
+ "name": "dolaar yati Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "dolaar yati Liberia",
+ "symbol": "LRD"
+ },
+ "AUD": {
+ "name": "dolaar yati Ostraalia",
+ "symbol": "A$"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "eskuudo yati Kap Ver",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "BIF": {
+ "name": "fraaŋ yati Burundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "fraaŋ yati Jibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "fraaŋ yati Komor",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "fraaŋ yati Kongo",
+ "symbol": "CDF"
+ },
+ "GBP": {
+ "name": "GBP",
+ "symbol": "£"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "kwacha yati Malawi",
+ "symbol": "MWK"
+ },
+ "AOA": {
+ "name": "kwanza yati Angola",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "EGP": {
+ "name": "liiverey yati Esípt",
+ "symbol": "EGP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MAD": {
+ "name": "MAD",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "ERN": {
+ "name": "nafka yati Eritree",
+ "symbol": "ERN"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "pula yati Boswana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "rupii yati End",
+ "symbol": "₹"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SAR": {
+ "name": "SAR",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "SDG",
+ "symbol": "SDG"
+ },
+ "XAF": {
+ "name": "seefa BEAC",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "seefa yati BCEAO",
+ "symbol": "CFA"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "KES": {
+ "name": "silliŋ yati Keniya",
+ "symbol": "KES"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SOS",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "TND",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "TZS": {
+ "name": "TZS",
+ "symbol": "TZS"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "ugiiya yati Mooritanii",
+ "symbol": "MRO"
+ },
+ "UGX": {
+ "name": "UGX",
+ "symbol": "UGX"
+ },
+ "USD": {
+ "name": "USD",
+ "symbol": "US$"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "JPY": {
+ "name": "yen yati Sapoŋ",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "yuan yati Siin",
+ "symbol": "CNÂ¥"
+ },
+ "ZAR": {
+ "name": "ZAR",
+ "symbol": "ZAR"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/dz.json b/library/intl/resources/currency/dz.json
new file mode 100644
index 000000000..00a136c7c
--- /dev/null
+++ b/library/intl/resources/currency/dz.json
@@ -0,0 +1,634 @@
+{
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "AOA",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BHD": {
+ "name": "BHD",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "BIF",
+ "symbol": "BIF"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BWP": {
+ "name": "BWP",
+ "symbol": "BWP"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CDF": {
+ "name": "CDF",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CVE": {
+ "name": "CVE",
+ "symbol": "CVE"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DJF": {
+ "name": "DJF",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "ERN": {
+ "name": "ERN",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "ETB",
+ "symbol": "ETB"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GMD": {
+ "name": "GMD",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KMF": {
+ "name": "KMF",
+ "symbol": "KMF"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MGA": {
+ "name": "MGA",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MRO": {
+ "name": "MRO",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MWK": {
+ "name": "MWK",
+ "symbol": "MWK"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SDG": {
+ "name": "SDG",
+ "symbol": "SDG"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SOS",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "TND",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "XAF"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "QAR": {
+ "name": "ཀ་ཊར་གྱི་དངུལ་ རི་ཨཱལ",
+ "symbol": "QAR"
+ },
+ "KZT": {
+ "name": "ཀ་ཛགས་à½à½±à½“་གྱི་དངུལ་ à½à½ºà½„་གེ",
+ "symbol": "KZT"
+ },
+ "CUP": {
+ "name": "ཀིའུ་བྷ་གི་དངུལ་ པེ་སོ",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "ཀུ་à½à½ºà½Šà¼‹à½‚ི་དངུལ་ ཌི་ན",
+ "symbol": "KWD"
+ },
+ "CAD": {
+ "name": "ཀེ་ན་ཌ་གི་དངུལ་ ཌོ་ལར",
+ "symbol": "CA$"
+ },
+ "KES": {
+ "name": "ཀེན་ཡ་གི་དངུལ་ ཤི་ལིང",
+ "symbol": "KES"
+ },
+ "KHR": {
+ "name": "ཀེམ་བྷོ་ཌི་ཡ་གི་དངུལ་ རི་ཨཱལ",
+ "symbol": "KHR"
+ },
+ "COP": {
+ "name": "ཀོ་ལོམ་བྷི་ཡ་གི་དངུལ་ པེ་སོ",
+ "symbol": "COP"
+ },
+ "CLP": {
+ "name": "ཅི་ལི་གི་དངུལ་ པེ་སོ",
+ "symbol": "CLP"
+ },
+ "JPY": {
+ "name": "ཇཱ་པཱན་གྱི་དངུལ་ ཡེན",
+ "symbol": "JPÂ¥"
+ },
+ "JMD": {
+ "name": "ཇཱ་མཻ་ཀ་གི་དངུལ་ ཌོ་ལར",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "ཇོར་ཌན་གྱི་དངུལ་ ཌི་ན",
+ "symbol": "JOD"
+ },
+ "TZS": {
+ "name": "ཊཱན་ཛཱ་ནི་ཡ་གི་དངུལ་ ཤི་ལིང",
+ "symbol": "TZS"
+ },
+ "TWD": {
+ "name": "ཊཱའི་à½à½±à½“་གི་དངུལ ཌོ་ལར",
+ "symbol": "NT$"
+ },
+ "TRY": {
+ "name": "ཊཱར་ཀི་གི་དངུལ་ ལི་ར",
+ "symbol": "TRY"
+ },
+ "DKK": {
+ "name": "ཌེན་མཱཀ་གི་དངུལ་ ཀྲོན",
+ "symbol": "DKK"
+ },
+ "TJS": {
+ "name": "à½à¼‹à½‡à½²à¼‹à½€à½²à½¦à¼‹à½à½±à½“་གྱི་དངུལ་ སོ་མོ་ནི",
+ "symbol": "TJS"
+ },
+ "THB": {
+ "name": "à½à½±à½ à½²à¼‹à½£à½ºà½“ཌ་གི་དངུལ་ བཱà½",
+ "symbol": "TH฿"
+ },
+ "BTN": {
+ "name": "དངུལ་ཀྲམ",
+ "symbol": "Nu."
+ },
+ "NZD": {
+ "name": "ནིའུ་ཛི་ལེནཌ་གི་དངུལ་ ཌོ་ལར",
+ "symbol": "NZ$"
+ },
+ "NOK": {
+ "name": "ནོར་à½à½ºà¼‹à½‚ི་དངུལ་ ཀྲོ་ན",
+ "symbol": "NOK"
+ },
+ "KPW": {
+ "name": "ནོརà½à¼‹ ཀོ་རི་ཡ་གི་དངུལ་ à½à½¼à½“",
+ "symbol": "KPW"
+ },
+ "PKR": {
+ "name": "པ་ཀིས་à½à½±à½“་གྱི་དངུལ་ རུ་པི",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "པ་ན་མ་གི་དངུལ་ བཱལ་བོ་à½",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "པ་རུ་གི་དངུལ་ ནུ་བོ་ སཱོལ",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "པོ་ལེནཌ་ཀྱི་དངུལ ཛ྄ལོ་ཊི",
+ "symbol": "PLN"
+ },
+ "PHP": {
+ "name": "ཕི་ལི་པིནས་གྱི་དངུལ་ པེ་སོ",
+ "symbol": "PHP"
+ },
+ "BMD": {
+ "name": "བར་མུ་ཌ་གི་དངུལ་ ཌོ་ལར",
+ "symbol": "BMD"
+ },
+ "BRL": {
+ "name": "བྲ་ཛིལ་གྱི་དངུལ་ རེ་ཡལ",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "བྲི་ཊིཤ་ པ་འུནཌ་ ཨིས་ཊར་ལིང",
+ "symbol": "£"
+ },
+ "NPR": {
+ "name": "བལ་པོའི་དངུལ་ རུ་པི",
+ "symbol": "NPR"
+ },
+ "BDT": {
+ "name": "བྷང་ལ་དེཤ་གི་དངུལ་ à½à¼‹à½€",
+ "symbol": "BDT"
+ },
+ "VEF": {
+ "name": "བེ་ནི་ཛུ་à½à½ºà¼‹à½£à¼‹à½‚ི་དངུལ་ བོ་ལི་བར",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "བེཊ་ནཱམ་གྱི་དངུལ་ ཌོང",
+ "symbol": "â‚«"
+ },
+ "MYR": {
+ "name": "མ་ལེ་ཤི་ཡ་གི་དངུལ་ རིང་གིཊ",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "མཱལ་དིབས་ཀྱི་དངུལ་ རུ་ཕི་ཡ",
+ "symbol": "MVR"
+ },
+ "MMK": {
+ "name": "མི་ཡཱན་མར་གྱི་དངུལ་ ཅཱà½",
+ "symbol": "MMK"
+ },
+ "MXN": {
+ "name": "མེཀ་སི་ཀོ་གི་དངུལ་ པེ་སོ",
+ "symbol": "MX$"
+ },
+ "MAD": {
+ "name": "མོ་རོ་ཀོ་གི་དངུལ་ ཌིར་ཧཱམ",
+ "symbol": "MAD"
+ },
+ "UGX": {
+ "name": "ཡུ་གྷེན་ཌ་གི་དངུལ་ ཤི་ལིང",
+ "symbol": "UGX"
+ },
+ "AED": {
+ "name": "ཡུ་ནཱའི་ཊེཌ་ ཨ་རབ་ ཨེ་མེ་རེཊས་ཀྱི་དངུལ་ ཌིར་ཧཱམ",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "ཡུ་རུ་གུ་à½à½ à½²à¼‹à½‚ི་དངུལ་ པེ་སོ",
+ "symbol": "UYU"
+ },
+ "EUR": {
+ "name": "ཡུ་རོ༌དངུལ་",
+ "symbol": "€"
+ },
+ "USD": {
+ "name": "ཡུ་ཨེས་ ཌོ་ལར",
+ "symbol": "US$"
+ },
+ "INR": {
+ "name": "རྒྱ་གར་གྱི་དངུལ་ རུ་པི",
+ "symbol": "₹"
+ },
+ "CNY": {
+ "name": "རྒྱ་ནག་གི་དངུལ་ ཡུ་à½à½±à½“",
+ "symbol": "CNÂ¥"
+ },
+ "LAK": {
+ "name": "ལཱ་à½à½¼à½¦à¼‹à½€à¾±à½²à¼‹à½‘ངུལ་ ཀིཔ",
+ "symbol": "LAK"
+ },
+ "LRD": {
+ "name": "ལཱའི་བེ་རི་ཡ་གི་དངུལ་ ཌོ་ལར",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "ལི་བི་ཡ་གི་དངུལ་ ཌི་ན",
+ "symbol": "LYD"
+ },
+ "LBP": {
+ "name": "ལེ་བ་ནོན་གྱི་དངུལ་ པ་འུནཌ",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "ཤྲི་ ལང་ཀ་གི་དངུལ་ རུ་པི",
+ "symbol": "LKR"
+ },
+ "SAR": {
+ "name": "སཱà½à¼‹à½‘ིའི་དངུལ་ རི་ཡཱལ",
+ "symbol": "SAR"
+ },
+ "KRW": {
+ "name": "སཱའུà½à¼‹ ཀོ་རི་ཡ་གི་དངུལ་ à½à½¼à½“",
+ "symbol": "KRâ‚©"
+ },
+ "ZAR": {
+ "name": "སཱའུà½à¼‹ ཨཕ་རི་ཀ་གི་དངུལ་ རཱནད",
+ "symbol": "ZAR"
+ },
+ "SYP": {
+ "name": "སི་རི་ཡ་གི་དངུལ་ པ་འུནཌ",
+ "symbol": "SYP"
+ },
+ "SGD": {
+ "name": "སིང་ག་པོར་གྱི་དངུལ་ ཌོ་ལར",
+ "symbol": "SGD"
+ },
+ "CHF": {
+ "name": "སུ་ཡིས་ཀྱི་དངུལ་ ཕྲངཀ",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "སུའི་ཌེན་གྱི་དངུལ་ ཀྲོ་ན",
+ "symbol": "SEK"
+ },
+ "SCR": {
+ "name": "སེ་ཤཱལས་ཀྱི་དངུལ་ རུ་པི",
+ "symbol": "SCR"
+ },
+ "MNT": {
+ "name": "སོག་པོའི་དངུལ་ à½à½´à¼‹à½‚ྲིཀ",
+ "symbol": "MNT"
+ },
+ "HKD": {
+ "name": "ཧོང་ཀོང་གི་དངུལ་ ཌོ་ལར",
+ "symbol": "HK$"
+ },
+ "AFN": {
+ "name": "ཨཕ་གཱན་གྱི་དངུལ་ ཨཕ་ག་ནི",
+ "symbol": "AFN"
+ },
+ "ISK": {
+ "name": "ཨཱཡིས་ལེནཌ་གི་དངུལ་ ཀྲོ་ན",
+ "symbol": "ISK"
+ },
+ "DZD": {
+ "name": "ཨཱལ་ཇི་རི་ཡ་གི་དངུལ་ ཌའི་ནར",
+ "symbol": "DZD"
+ },
+ "AUD": {
+ "name": "ཨཱོས་ཊྲེ་ལི་ཡ་གི་དངུལ་ ཌོ་ལར",
+ "symbol": "AU$"
+ },
+ "EGP": {
+ "name": "ཨི་ཇིབཊ་གི་དངུལ་ པ་འུནཌ",
+ "symbol": "EGP"
+ },
+ "IQD": {
+ "name": "ཨི་རཱཀ་གི་དངུལ་ ཌི་ན",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "ཨི་རཱན་གྱི་དངུལ་ རི་ཨཱལ",
+ "symbol": "IRR"
+ },
+ "IDR": {
+ "name": "ཨིན་ཌོ་ནེ་ཤི་ཡ་གི་དངུལ་ རུ་པི་ཡ",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ཨིས་རེལ་གྱི་དངུལ་གསརཔ་ ཤེ་ཀེལ",
+ "symbol": "ILS"
+ },
+ "RUB": {
+ "name": "ཨུ་རུ་སུ་གི་དངུལ་ རུ་བཱལ",
+ "symbol": "RUB"
+ },
+ "UZS": {
+ "name": "ཨུས་བེ་ཀིས་à½à½±à½“་གྱི་དངུལ་ སོམ",
+ "symbol": "UZS"
+ },
+ "OMR": {
+ "name": "ཨོ་མཱན་གྱི་དངུལ་ རི་ཨཱལ",
+ "symbol": "OMR"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ebu.json b/library/intl/resources/currency/ebu.json
new file mode 100644
index 000000000..017f934f0
--- /dev/null
+++ b/library/intl/resources/currency/ebu.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "MGA": {
+ "name": "Ariary ya Bukini",
+ "symbol": "MGA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Bir ya Uhabeshi",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi ya Gambia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinari ya Aljeria",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinari ya Bahareni",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinari ya Libya",
+ "symbol": "LYD"
+ },
+ "TND": {
+ "name": "Dinari ya Tunisia",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham ya Falme za Kiarabu",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham ya Moroko",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobra ya Sao Tome na Principe",
+ "symbol": "STD"
+ },
+ "CAD": {
+ "name": "Dola ya Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dola ya Liberia",
+ "symbol": "LRD"
+ },
+ "USD": {
+ "name": "Dola ya Marekani",
+ "symbol": "US$"
+ },
+ "NAD": {
+ "name": "Dola ya Namibia",
+ "symbol": "NAD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "AUD": {
+ "name": "Dora ya Australia",
+ "symbol": "A$"
+ },
+ "CVE": {
+ "name": "Eskudo ya Kepuvede",
+ "symbol": "CVE"
+ },
+ "XOF": {
+ "name": "Faranga CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Faranga CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "BIF": {
+ "name": "Faranga ya Burundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Faranga ya Jibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Faranga ya Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Faranga ya Kongo",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Faranga ya Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Faranga ya Uswisi",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kwacha ya Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha ya Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza ya Angola",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leoni",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti ya Lesoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira ya Nijeria",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa ya Eritrea",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "EGP": {
+ "name": "Pauni ya Misri",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Pauni ya Santahelena",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Pauni ya Sudani",
+ "symbol": "SDG"
+ },
+ "GBP": {
+ "name": "Pauni ya Uingereza",
+ "symbol": "£"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pula ya Botswana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Randi ya Afrika Kusini",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riyal ya Saudia",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupia ya India",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupia ya Morisi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupia ya Shelisheli",
+ "symbol": "SCR"
+ },
+ "JPY": {
+ "name": "Sarafu ya Kijapani",
+ "symbol": "JPÂ¥"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "Shilingi ya Kenya",
+ "symbol": "Ksh"
+ },
+ "SOS": {
+ "name": "Shilingi ya Somalia",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Shilingi ya Tanzania",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Shilingi ya Uganda",
+ "symbol": "UGX"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ugwiya ya Moritania",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yuan Renminbi ya China",
+ "symbol": "CNÂ¥"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ee.json b/library/intl/resources/currency/ee.json
new file mode 100644
index 000000000..4456aba62
--- /dev/null
+++ b/library/intl/resources/currency/ee.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afghanistanga afghani",
+ "symbol": "AFN"
+ },
+ "ISK": {
+ "name": "aiselandga króna",
+ "symbol": "ISK"
+ },
+ "ALL": {
+ "name": "albaniaga lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "aldzeriaga dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "angolaga kwanza",
+ "symbol": "AOA"
+ },
+ "ZAR": {
+ "name": "anyiehe afrikaga rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "anyiehe koreaga won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "anyiehe sudanga pound",
+ "symbol": "SSP"
+ },
+ "ARS": {
+ "name": "argentinaga peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "armeniaga dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "arubaga lorin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "australiaga dollar",
+ "symbol": "AU$"
+ },
+ "AZN": {
+ "name": "azerbaidzanga manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "bahamiaga dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "bahrainga dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "bangladeshga taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "barbadiaga dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "belarusiaga ruble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "belizega dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "bermudaga dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "bhutanga ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "boliviaga boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "bosnia-herzegovinaga convertible mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "botswanaga pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "brazilga real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "britainga pound sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "bruneiga dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "bulgariaga lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "burundiga franc",
+ "symbol": "BIF"
+ },
+ "XPF": {
+ "name": "CFP ga franc",
+ "symbol": "CFPF"
+ },
+ "DKK": {
+ "name": "danemarkga krone",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "dominicaga peso",
+ "symbol": "DOP"
+ },
+ "JMD": {
+ "name": "dzamaikaga dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "dzapanga yen",
+ "symbol": "JPÂ¥"
+ },
+ "DJF": {
+ "name": "dziboutiga franc",
+ "symbol": "DJF"
+ },
+ "KPW": {
+ "name": "dziehe koreaga won",
+ "symbol": "KPW"
+ },
+ "GEL": {
+ "name": "dzɔdziaga lari",
+ "symbol": "GEL"
+ },
+ "EGP": {
+ "name": "egyptega pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "eritreaga nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "ethiopiaga birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "falklanɖ ƒudomekpo dukɔwo ƒe ga pound",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "fidziga dollar",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "filipiniga peso",
+ "symbol": "PHP"
+ },
+ "GMD": {
+ "name": "gambiaga dalasi",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "ghana siÉ–i",
+ "symbol": "GH₵"
+ },
+ "GIP": {
+ "name": "gilbrataga pound",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "giniga franc",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "guatemalaga quetzal",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "guyanaga dollar",
+ "symbol": "GYD"
+ },
+ "XCD": {
+ "name": "É£edzeÆ’e caribbeaga dollar",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "É£etoÉ–ofe afrikaga CFA franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "É£etoÉ–ofe afrikaga CFA franc BEAC",
+ "symbol": "FCFA"
+ },
+ "HTG": {
+ "name": "haitiga gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "honduraga lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "hong kongga dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "hungariaga forint",
+ "symbol": "HUF"
+ },
+ "INR": {
+ "name": "indiaga rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "indinesiaga rupiah",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "irakga dinar",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "iranga rial",
+ "symbol": "IRR"
+ },
+ "ILS": {
+ "name": "israelga yeyetÉ” sheqel",
+ "symbol": "₪"
+ },
+ "KHR": {
+ "name": "kambodiaga riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "kanadaga dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "kape verdega escudo",
+ "symbol": "CVE"
+ },
+ "QAR": {
+ "name": "katarga rial",
+ "symbol": "QAR"
+ },
+ "KYD": {
+ "name": "kayman Æ’udomekpoga dollar",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "kazakhstanga tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "kenyaga shilling",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "kirgistanga som",
+ "symbol": "KGS"
+ },
+ "COP": {
+ "name": "kolombiaga peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "komoroga franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "kongoga franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "kosta rikaga kolón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "kroatiaga kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "kubaga convertible peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "kubaga peso",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "kuwaitga dinar",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "laosga kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "lebanonga pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "lesotoga loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "liberiaga dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "libyaga dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "lithuaniaga litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "makanesega pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "makedoniaga denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "malagasega ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "malawiga kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "malaysiaga ringit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "maldiviaga rufiyaa",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "meksikoga peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "moldovaga leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "mongoliaga tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "morokoga dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "mozambikga metikal",
+ "symbol": "MZN"
+ },
+ "MRO": {
+ "name": "mɔritaniaga ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "mɔritiusga rupee",
+ "symbol": "MUR"
+ },
+ "MMK": {
+ "name": "myanmaga kyat",
+ "symbol": "MMK"
+ },
+ "NGN": {
+ "name": "naidzeriaga naira",
+ "symbol": "NGN"
+ },
+ "NAD": {
+ "name": "namibiaga dollar",
+ "symbol": "NAD"
+ },
+ "ANG": {
+ "name": "nedalands antilleaga guilder",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "nepalga rupee",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "new zealanÉ–ga dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "nikaraguaga córdoba",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "norwayga krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "omanga rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "pakistaniga rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "panamaga balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "papua new guineaga kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "paraguayga guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "peruga nuevo sol",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "polanÉ–ga zloty",
+ "symbol": "PLN"
+ },
+ "RON": {
+ "name": "romaniaga leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "rɔtsiaga ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "rwandaga franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "saint helenaga pound",
+ "symbol": "SHP"
+ },
+ "SVC": {
+ "name": "salvadɔga colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "samaoga tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "são tomé kple príncipega dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "saudiga riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "serbiaga dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "sɛtselsga rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "sierra leonega leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "singapɔga dollar",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "solomon ƒudomekpo dukɔwo ƒe ga dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "somaliaga shilling",
+ "symbol": "SOS"
+ },
+ "LKR": {
+ "name": "sri lankaga rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "sudanga pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "surinamga dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "swaziga lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "swedenga krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "swissga franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "syriaga pound",
+ "symbol": "SYP"
+ },
+ "TWD": {
+ "name": "taiwanga yeye dollar",
+ "symbol": "NT$"
+ },
+ "TJS": {
+ "name": "tajikistanga somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzaniatɔwofɛgadudu",
+ "symbol": "TZS"
+ },
+ "TRY": {
+ "name": "tɛkiiga lira",
+ "symbol": "TRY"
+ },
+ "THB": {
+ "name": "thaiga baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "tonagaga pa’anga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "trinidad kple tobagoga dollar",
+ "symbol": "TTD"
+ },
+ "CNY": {
+ "name": "tsainaga yuan",
+ "symbol": "CNÂ¥"
+ },
+ "CZK": {
+ "name": "tsɛk repɔblikga koruna",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "tsilega peso",
+ "symbol": "CLP"
+ },
+ "TND": {
+ "name": "tunisiaga dinar",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "turkmenistanga manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "ugandaga shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "ukrainega hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "united arab emiratesga dirham",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "uruguayga peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "us ga dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "uzbekistanga som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "vanuatuga vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "venezuelaga bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "vietnamga dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "yemeniga rial",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "yɔdanga dinar",
+ "symbol": "JOD"
+ },
+ "ZMW": {
+ "name": "zambiaga kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "zimbabwega dollar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/el.json b/library/intl/resources/currency/el.json
new file mode 100644
index 000000000..4fd78bddf
--- /dev/null
+++ b/library/intl/resources/currency/el.json
@@ -0,0 +1,634 @@
+{
+ "MGA": {
+ "name": "ΑÏιάÏι ΜαδαγασκάÏης",
+ "symbol": "MGA"
+ },
+ "AFN": {
+ "name": "Αφγάνι Αφγανιστάν",
+ "symbol": "AFN"
+ },
+ "VUV": {
+ "name": "Î’Î±Ï„Î¿Ï Î’Î±Î½Î¿Ï…Î¬Ï„Î¿Ï…",
+ "symbol": "VUV"
+ },
+ "JPY": {
+ "name": "Γιεν Ιαπωνίας",
+ "symbol": "JPÂ¥"
+ },
+ "ANG": {
+ "name": "Γκίλντα Ολλανδικών Αντιλλών",
+ "symbol": "ANG"
+ },
+ "PYG": {
+ "name": "ΓκουαÏανί ΠαÏαγουάης",
+ "symbol": "PYG"
+ },
+ "HTG": {
+ "name": "ΓκουÏντ Αϊτής",
+ "symbol": "HTG"
+ },
+ "CNY": {
+ "name": "Γουάν Κίνας",
+ "symbol": "CNÂ¥"
+ },
+ "KPW": {
+ "name": "Γουόν Î’ÏŒÏειας ΚοÏέας",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "Γουόν Îότιας ΚοÏέας",
+ "symbol": "â‚©"
+ },
+ "UAH": {
+ "name": "ΓÏίβνα ΟυκÏανίας",
+ "symbol": "UAH"
+ },
+ "DZD": {
+ "name": "ΔηνάÏιο ΑλγεÏίας",
+ "symbol": "DZD"
+ },
+ "JOD": {
+ "name": "ΔηνάÏιο ΙοÏδανίας",
+ "symbol": "JOD"
+ },
+ "IQD": {
+ "name": "ΔηνάÏιο ΙÏάκ",
+ "symbol": "IQD"
+ },
+ "KWD": {
+ "name": "ΔηνάÏιο Κουβέιτ",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "ΔηνάÏιο ΛιβÏης",
+ "symbol": "LYD"
+ },
+ "BHD": {
+ "name": "ΔηνάÏιο ΜπαχÏέιν",
+ "symbol": "BHD"
+ },
+ "MKD": {
+ "name": "ΔηνάÏιο Π.Γ.Δ.Îœ.",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "ΔηνάÏιο ΣεÏβίας",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "ΔηνάÏιο Τυνησίας",
+ "symbol": "TND"
+ },
+ "XCD": {
+ "name": "ΔολάÏιο Ανατολικής ΚαÏαϊβικής",
+ "symbol": "EC$"
+ },
+ "AUD": {
+ "name": "ΔολάÏιο ΑυστÏαλίας",
+ "symbol": "A$"
+ },
+ "BMD": {
+ "name": "ΔολάÏιο ΒεÏμοÏδων",
+ "symbol": "BMD"
+ },
+ "GYD": {
+ "name": "ΔολάÏιο Γουιάνας",
+ "symbol": "GYD"
+ },
+ "ZWL": {
+ "name": "ΔολάÏιο Ζιμπάμπουε (2009)",
+ "symbol": "ZWL"
+ },
+ "USD": {
+ "name": "ΔολάÏιο ΗΠΑ",
+ "symbol": "$"
+ },
+ "CAD": {
+ "name": "ΔολάÏιο Καναδά",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "ΔολάÏιο ΛιβεÏίας",
+ "symbol": "LRD"
+ },
+ "BBD": {
+ "name": "ΔολάÏιο ΜπαÏμπάντος",
+ "symbol": "BBD"
+ },
+ "BSD": {
+ "name": "ΔολάÏιο Μπαχάμες",
+ "symbol": "BSD"
+ },
+ "BZD": {
+ "name": "ΔολάÏιο Μπελίζ",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "ΔολάÏιο ΜπÏουνέι",
+ "symbol": "BND"
+ },
+ "NAD": {
+ "name": "ΔολάÏιο Îαμίμπια",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "ΔολάÏιο Îέας Ζηλανδίας",
+ "symbol": "NZ$"
+ },
+ "KYD": {
+ "name": "ΔολάÏιο Îήσων Κάιμαν",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "ΔολάÏιο Îήσων Σολομώντος",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "ΔολάÏιο ΣιγκαποÏÏης",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "ΔολάÏιο ΣουÏινάμ",
+ "symbol": "SRD"
+ },
+ "JMD": {
+ "name": "ΔολάÏιο Τζαμάικας",
+ "symbol": "JMD"
+ },
+ "TTD": {
+ "name": "ΔολάÏιο ΤÏινιντάντ και Τομπάγκο",
+ "symbol": "TTD"
+ },
+ "FJD": {
+ "name": "ΔολάÏιο Φίτζι",
+ "symbol": "FJD"
+ },
+ "HKD": {
+ "name": "ΔολάÏιο Χονγκ Κονγκ",
+ "symbol": "HK$"
+ },
+ "CVE": {
+ "name": "ΕσκοÏδο ΠÏάσινου ΑκÏωτηÏίου",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "ΕυÏÏŽ",
+ "symbol": "€"
+ },
+ "PLN": {
+ "name": "Ζλότι Πολωνίας",
+ "symbol": "PLN"
+ },
+ "PGK": {
+ "name": "Κίνα ΠαποÏα Îέα Γουινέα",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "Κιπ Λάος",
+ "symbol": "LAK"
+ },
+ "SVC": {
+ "name": "Κολόν Ελ ΣαλβαδόÏ",
+ "symbol": "SVC"
+ },
+ "CRC": {
+ "name": "Κολόν Κόστα Ρίκα",
+ "symbol": "CRC"
+ },
+ "DKK": {
+ "name": "ΚοÏόνα Δανίας",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "ΚοÏόνα Ισλανδίας",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "ΚοÏόνα ÎοÏβηγίας",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "ΚοÏόνα Σουηδίας",
+ "symbol": "SEK"
+ },
+ "CZK": {
+ "name": "ΚοÏόνα Τσεχίας",
+ "symbol": "CZK"
+ },
+ "AOA": {
+ "name": "Κουάνζα Ανγκόλας",
+ "symbol": "AOA"
+ },
+ "ZMW": {
+ "name": "Κουάτσα Ζάμπιας",
+ "symbol": "ZMW"
+ },
+ "MWK": {
+ "name": "Κουάτσα Μαλάουι",
+ "symbol": "MWK"
+ },
+ "GTQ": {
+ "name": "Κουετσάλ Γουατεμάλας",
+ "symbol": "GTQ"
+ },
+ "HRK": {
+ "name": "ΚοÏνα ΚÏοατίας",
+ "symbol": "HRK"
+ },
+ "MMK": {
+ "name": "Κυάτ ΜιανμάÏ",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "ΛάÏι ΓεωÏγίας",
+ "symbol": "GEL"
+ },
+ "BGN": {
+ "name": "Λεβ ΒουλγαÏίας",
+ "symbol": "BGN"
+ },
+ "ALL": {
+ "name": "Λεκ Αλβανίας",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "ΛεμπίÏα ΟνδοÏÏας",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "Λεόνε ΣιέÏα Λεόνε",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "Λέου Μολδαβίας",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "Λέου Ρουμανίας",
+ "symbol": "RON"
+ },
+ "SZL": {
+ "name": "Λιλανγκένι Σουαζιλάνδης",
+ "symbol": "SZL"
+ },
+ "SHP": {
+ "name": "ΛίÏα Αγίας Ελένης",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "ΛίÏα ΑιγÏπτου",
+ "symbol": "EGP"
+ },
+ "GIP": {
+ "name": "ΛίÏα ΓιβÏαλτάÏ",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "ΛίÏα Λιβάνου",
+ "symbol": "LBP"
+ },
+ "FKP": {
+ "name": "ΛίÏα Îησιών Φώκλαντ",
+ "symbol": "FKP"
+ },
+ "SSP": {
+ "name": "ΛίÏα Îότιου Σουδάν",
+ "symbol": "SSP"
+ },
+ "SDG": {
+ "name": "ΛίÏα Σουδάν",
+ "symbol": "SDG"
+ },
+ "GBP": {
+ "name": "ΛίÏα ΣτεÏλίνα Î’Ïετανίας",
+ "symbol": "£"
+ },
+ "SYP": {
+ "name": "ΛίÏα ΣυÏίας",
+ "symbol": "SYP"
+ },
+ "LTL": {
+ "name": "Λίτα Λιθουανίας",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Λότι Λεσότο",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "Μανάτ ΑζεÏμπαϊτζάν",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "Μάνατ ΤουÏκμενιστάν",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "ΜετατÏέψιμο ΜάÏκο Βοσνίας-ΕÏζεγοβίνης",
+ "symbol": "BAM"
+ },
+ "CUC": {
+ "name": "ΜετατÏέψιμο πέσο ΚοÏβας",
+ "symbol": "CUC"
+ },
+ "MZN": {
+ "name": "Μετικάλ Μοζαμβίκης",
+ "symbol": "MZN"
+ },
+ "PAB": {
+ "name": "Μπαλμπόα Παναμά",
+ "symbol": "PAB"
+ },
+ "THB": {
+ "name": "Μπατ Ταϊλάνδης",
+ "symbol": "฿"
+ },
+ "ETB": {
+ "name": "ÎœÏ€Î¹Ï Î‘Î¹Î¸Î¹Î¿Ï€Î¯Î±Ï‚",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "ÎœÏ€Î¿Î»Î¹Î²Î¬Ï Î’ÎµÎ½ÎµÎ¶Î¿Ï…Î­Î»Î±Ï‚",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "Μπολιβιάνο Βολιβίας",
+ "symbol": "BOB"
+ },
+ "NGN": {
+ "name": "ÎάιÏα ÎιγηÏίας",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Îάκφα ΕÏυθÏαίας",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "ÎγκοÏλτÏουμ Μπουτάν",
+ "symbol": "BTN"
+ },
+ "TWD": {
+ "name": "Îέο δολάÏιο Ταϊβάν",
+ "symbol": "NT$"
+ },
+ "ILS": {
+ "name": "Îέο Σέκελ ΙσÏαήλ",
+ "symbol": "₪"
+ },
+ "PEN": {
+ "name": "Îέο Σολ ΠεÏοÏ",
+ "symbol": "PEN"
+ },
+ "GMD": {
+ "name": "Îταλάσι Γκάμπιας",
+ "symbol": "GMD"
+ },
+ "AED": {
+ "name": "ÎτιÏάμ Ηνωμένων ΑÏαβικών ΕμιÏάτων",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "ÎτιÏάμ ΜαÏόκου",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "ÎτόμπÏα Σάο Τομέ και ΠÏίνσιπε",
+ "symbol": "STD"
+ },
+ "VND": {
+ "name": "Îτονγκ Βιετνάμ",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "ÎÏ„Ïαμ ΑÏμενίας",
+ "symbol": "AMD"
+ },
+ "MRO": {
+ "name": "Ουγκίγια ΜαυÏιτανίας",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "Παάγκα νήσων Τόγκα",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "Πατάκα Μακάο",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "Πέσο ΑÏγεντινής",
+ "symbol": "ARS"
+ },
+ "DOP": {
+ "name": "Πέσο Δομινικανής ΔημοκÏατίας",
+ "symbol": "DOP"
+ },
+ "COP": {
+ "name": "Πέσο Κολομβίας",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "Πέσο ΚοÏβας",
+ "symbol": "CUP"
+ },
+ "MXN": {
+ "name": "Πέσο ΜεξικοÏ",
+ "symbol": "MX$"
+ },
+ "UYU": {
+ "name": "Πέσο ΟυÏουγουάης",
+ "symbol": "UYU"
+ },
+ "PHP": {
+ "name": "Πέσο Φιλιππίνων",
+ "symbol": "PHP"
+ },
+ "CLP": {
+ "name": "Πέσο Χιλής",
+ "symbol": "CLP"
+ },
+ "BWP": {
+ "name": "ΠοÏλα Μποτσουάνας",
+ "symbol": "BWP"
+ },
+ "ZAR": {
+ "name": "Ραντ Îότιας ΑφÏικής",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "Ρεάλ Î’Ïαζιλίας",
+ "symbol": "R$"
+ },
+ "IRR": {
+ "name": "Ριάλ ΙÏάν",
+ "symbol": "IRR"
+ },
+ "QAR": {
+ "name": "Ριάλ ΚατάÏ",
+ "symbol": "QAR"
+ },
+ "OMR": {
+ "name": "Ριάλ Ομάν",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "Ριάλ Σαουδικής ΑÏαβίας",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "Ριάλ Υεμένης",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "Ρίελ Καμπότζης",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "Ρινγκίτ Μαλαισίας",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "ΡοÏβλι ΛευκοÏωσίας",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "ΡοÏβλι Ρωσίας",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Ρουπία Ινδίας",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Ρουπία Ινδονησίας",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "Ρουπία ΜαυÏικίου",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "Ρουπία Îεπάλ",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "Ρουπία Πακιστάν",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "Ρουπία Σεϋχελλών",
+ "symbol": "SCR"
+ },
+ "LKR": {
+ "name": "Ρουπία ΣÏι Λάνκα",
+ "symbol": "LKR"
+ },
+ "MVR": {
+ "name": "Ρουφίγια Μαλδίβων",
+ "symbol": "MVR"
+ },
+ "KES": {
+ "name": "Σελίνι Κένυας",
+ "symbol": "KES"
+ },
+ "UGX": {
+ "name": "Σελίνι Ουγκάντας",
+ "symbol": "UGX"
+ },
+ "SOS": {
+ "name": "Σελίνι Σομαλίας",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Σελίνι Τανζανίας",
+ "symbol": "TZS"
+ },
+ "GHS": {
+ "name": "Σέντι Γκάνας",
+ "symbol": "GHS"
+ },
+ "KGS": {
+ "name": "Σομ ΚιÏγιζίας",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "Σομ Ουζμπεκιστάν",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "Σομόνι Τατζικιστάν",
+ "symbol": "TJS"
+ },
+ "BDT": {
+ "name": "Τάκα Μπαγκλαντές",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "Τάλα Σαμόα",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "Τένγκε Καζακστάν",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "ΤουγκÏίκ Μογγολίας",
+ "symbol": "MNT"
+ },
+ "TRY": {
+ "name": "ΤουÏκική ΛίÏα",
+ "symbol": "TRY"
+ },
+ "HUF": {
+ "name": "ΦιοÏίνι ΟυγγαÏίας",
+ "symbol": "HUF"
+ },
+ "AWG": {
+ "name": "ΦλοÏίνι ΑÏοÏμπα",
+ "symbol": "AWG"
+ },
+ "XOF": {
+ "name": "ΦÏάγκο CFA Δυτικής ΑφÏικής (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "ΦÏάγκο CFA ΚεντÏικής ΑφÏικής (BEAC)",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "ΦÏάγκο CFP",
+ "symbol": "CFPF"
+ },
+ "GNF": {
+ "name": "ΦÏάγκο Γουινέας",
+ "symbol": "GNF"
+ },
+ "CHF": {
+ "name": "ΦÏάγκο Ελβετίας",
+ "symbol": "CHF"
+ },
+ "KMF": {
+ "name": "ΦÏάγκο ΚομοÏών",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "ΦÏάγκο Κονγκό",
+ "symbol": "CDF"
+ },
+ "BIF": {
+ "name": "ΦÏάγκο ΜπουÏοÏντι",
+ "symbol": "BIF"
+ },
+ "RWF": {
+ "name": "ΦÏάγκο Ρουάντας",
+ "symbol": "RWF"
+ },
+ "DJF": {
+ "name": "ΦÏάγκο Τζιμπουτί",
+ "symbol": "DJF"
+ },
+ "NIO": {
+ "name": "ΧÏυσή ΚόÏδοβα ÎικαÏάγουας",
+ "symbol": "NIO"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/en-AU.json b/library/intl/resources/currency/en-AU.json
new file mode 100644
index 000000000..931c1a515
--- /dev/null
+++ b/library/intl/resources/currency/en-AU.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentine Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australian Dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamian Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadian Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarusian Rouble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Belize Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudan Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "British Pound",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunei Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadian Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Cayman Islands Dollar",
+ "symbol": "KYD"
+ },
+ "XAF": {
+ "name": "Central African CFA Franc",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilean Peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "Colombian Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Cuban Convertible Peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cuban Peso",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Danish Krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominican Peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "East Caribbean Dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Islands Pound",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fijian Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar Pound",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanaese Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong Dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "Israeli New Shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaican Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanese Yen",
+ "symbol": "Â¥"
+ },
+ "JOD": {
+ "name": "Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanese Pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivian Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexican Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "Mozambican Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibian Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "New Taiwan Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "New Zealand Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistani Rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippine Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russian Rouble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Saint Helena Pound",
+ "symbol": "SHP"
+ },
+ "SVC": {
+ "name": "Salvadoran Colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé and Príncipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychelles Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapore Dollar",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Solomon Islands Dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "South Korean Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "South Sudanese Pound",
+ "symbol": "SSP"
+ },
+ "LKR": {
+ "name": "Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamese Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thai Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad and Tobago Dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "Uruguayan Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US Dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "Uzbekistani Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "XOF": {
+ "name": "West African CFA Franc",
+ "symbol": "CFA"
+ },
+ "YER": {
+ "name": "Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwean Dollar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/en-BE.json b/library/intl/resources/currency/en-BE.json
new file mode 100644
index 000000000..2dbdae5ca
--- /dev/null
+++ b/library/intl/resources/currency/en-BE.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentine Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australian Dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamian Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadian Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarusian Ruble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Belize Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudan Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "British Pound Sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunei Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadian Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Cayman Islands Dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilean Peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "Colombian Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Cuban Convertible Peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cuban Peso",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Danish Krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominican Peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "East Caribbean Dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Islands Pound",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fijian Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar Pound",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanaese Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong Dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "Israeli New Shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaican Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanese Yen",
+ "symbol": "Â¥"
+ },
+ "JOD": {
+ "name": "Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanese Pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivian Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexican Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "Mozambican Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibian Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "New Taiwan Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "New Zealand Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistani Rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippine Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russian Ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Saint Helena Pound",
+ "symbol": "SHP"
+ },
+ "SVC": {
+ "name": "Salvadoran Colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé and Príncipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellois Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapore Dollar",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Solomon Islands Dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "South Korean Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "South Sudanese Pound",
+ "symbol": "SSP"
+ },
+ "LKR": {
+ "name": "Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamese Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thai Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad and Tobago Dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "Uruguayan Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US Dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "Uzbekistan Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwean Dollar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/en-DG.json b/library/intl/resources/currency/en-DG.json
new file mode 100644
index 000000000..2dbdae5ca
--- /dev/null
+++ b/library/intl/resources/currency/en-DG.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentine Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australian Dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamian Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadian Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarusian Ruble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Belize Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudan Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "British Pound Sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunei Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadian Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Cayman Islands Dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilean Peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "Colombian Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Cuban Convertible Peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cuban Peso",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Danish Krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominican Peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "East Caribbean Dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Islands Pound",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fijian Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar Pound",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanaese Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong Dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "Israeli New Shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaican Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanese Yen",
+ "symbol": "Â¥"
+ },
+ "JOD": {
+ "name": "Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanese Pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivian Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexican Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "Mozambican Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibian Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "New Taiwan Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "New Zealand Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistani Rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippine Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russian Ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Saint Helena Pound",
+ "symbol": "SHP"
+ },
+ "SVC": {
+ "name": "Salvadoran Colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé and Príncipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellois Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapore Dollar",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Solomon Islands Dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "South Korean Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "South Sudanese Pound",
+ "symbol": "SSP"
+ },
+ "LKR": {
+ "name": "Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamese Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thai Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad and Tobago Dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "Uruguayan Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US Dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "Uzbekistan Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwean Dollar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/en-FK.json b/library/intl/resources/currency/en-FK.json
new file mode 100644
index 000000000..23aeb894e
--- /dev/null
+++ b/library/intl/resources/currency/en-FK.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentine Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australian Dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamian Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadian Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarusian Ruble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Belize Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudan Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "British Pound Sterling",
+ "symbol": "GB£"
+ },
+ "BND": {
+ "name": "Brunei Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadian Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Cayman Islands Dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilean Peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "Colombian Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Cuban Convertible Peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cuban Peso",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Danish Krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominican Peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "East Caribbean Dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Islands Pound",
+ "symbol": "£"
+ },
+ "FJD": {
+ "name": "Fijian Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar Pound",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanaese Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong Dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "Israeli New Shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaican Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanese Yen",
+ "symbol": "Â¥"
+ },
+ "JOD": {
+ "name": "Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanese Pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivian Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexican Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "Mozambican Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibian Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "New Taiwan Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "New Zealand Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistani Rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippine Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russian Ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Saint Helena Pound",
+ "symbol": "SHP"
+ },
+ "SVC": {
+ "name": "Salvadoran Colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé and Príncipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellois Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapore Dollar",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Solomon Islands Dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "South Korean Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "South Sudanese Pound",
+ "symbol": "SSP"
+ },
+ "LKR": {
+ "name": "Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamese Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thai Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad and Tobago Dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "Uruguayan Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US Dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "Uzbekistan Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwean Dollar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/en-GB.json b/library/intl/resources/currency/en-GB.json
new file mode 100644
index 000000000..2dbdae5ca
--- /dev/null
+++ b/library/intl/resources/currency/en-GB.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentine Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australian Dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamian Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadian Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarusian Ruble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Belize Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudan Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "British Pound Sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunei Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadian Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Cayman Islands Dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilean Peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "Colombian Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Cuban Convertible Peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cuban Peso",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Danish Krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominican Peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "East Caribbean Dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Islands Pound",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fijian Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar Pound",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanaese Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong Dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "Israeli New Shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaican Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanese Yen",
+ "symbol": "Â¥"
+ },
+ "JOD": {
+ "name": "Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanese Pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivian Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexican Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "Mozambican Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibian Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "New Taiwan Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "New Zealand Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistani Rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippine Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russian Ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Saint Helena Pound",
+ "symbol": "SHP"
+ },
+ "SVC": {
+ "name": "Salvadoran Colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé and Príncipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellois Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapore Dollar",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Solomon Islands Dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "South Korean Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "South Sudanese Pound",
+ "symbol": "SSP"
+ },
+ "LKR": {
+ "name": "Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamese Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thai Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad and Tobago Dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "Uruguayan Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US Dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "Uzbekistan Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwean Dollar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/en-GG.json b/library/intl/resources/currency/en-GG.json
new file mode 100644
index 000000000..2dbdae5ca
--- /dev/null
+++ b/library/intl/resources/currency/en-GG.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentine Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australian Dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamian Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadian Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarusian Ruble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Belize Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudan Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "British Pound Sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunei Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadian Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Cayman Islands Dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilean Peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "Colombian Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Cuban Convertible Peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cuban Peso",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Danish Krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominican Peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "East Caribbean Dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Islands Pound",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fijian Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar Pound",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanaese Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong Dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "Israeli New Shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaican Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanese Yen",
+ "symbol": "Â¥"
+ },
+ "JOD": {
+ "name": "Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanese Pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivian Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexican Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "Mozambican Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibian Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "New Taiwan Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "New Zealand Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistani Rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippine Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russian Ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Saint Helena Pound",
+ "symbol": "SHP"
+ },
+ "SVC": {
+ "name": "Salvadoran Colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé and Príncipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellois Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapore Dollar",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Solomon Islands Dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "South Korean Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "South Sudanese Pound",
+ "symbol": "SSP"
+ },
+ "LKR": {
+ "name": "Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamese Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thai Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad and Tobago Dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "Uruguayan Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US Dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "Uzbekistan Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwean Dollar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/en-GI.json b/library/intl/resources/currency/en-GI.json
new file mode 100644
index 000000000..f29f8999a
--- /dev/null
+++ b/library/intl/resources/currency/en-GI.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentine Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australian Dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamian Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadian Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarusian Ruble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Belize Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudan Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "British Pound Sterling",
+ "symbol": "GB£"
+ },
+ "BND": {
+ "name": "Brunei Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadian Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Cayman Islands Dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilean Peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "Colombian Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Cuban Convertible Peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cuban Peso",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Danish Krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominican Peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "East Caribbean Dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Islands Pound",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fijian Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar Pound",
+ "symbol": "£"
+ },
+ "GTQ": {
+ "name": "Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanaese Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong Dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "Israeli New Shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaican Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanese Yen",
+ "symbol": "Â¥"
+ },
+ "JOD": {
+ "name": "Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanese Pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivian Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexican Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "Mozambican Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibian Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "New Taiwan Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "New Zealand Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistani Rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippine Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russian Ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Saint Helena Pound",
+ "symbol": "SHP"
+ },
+ "SVC": {
+ "name": "Salvadoran Colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé and Príncipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellois Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapore Dollar",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Solomon Islands Dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "South Korean Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "South Sudanese Pound",
+ "symbol": "SSP"
+ },
+ "LKR": {
+ "name": "Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamese Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thai Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad and Tobago Dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "Uruguayan Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US Dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "Uzbekistan Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwean Dollar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/en-HK.json b/library/intl/resources/currency/en-HK.json
new file mode 100644
index 000000000..2dbdae5ca
--- /dev/null
+++ b/library/intl/resources/currency/en-HK.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentine Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australian Dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamian Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadian Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarusian Ruble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Belize Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudan Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "British Pound Sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunei Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadian Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Cayman Islands Dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilean Peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "Colombian Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Cuban Convertible Peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cuban Peso",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Danish Krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominican Peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "East Caribbean Dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Islands Pound",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fijian Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar Pound",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanaese Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong Dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "Israeli New Shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaican Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanese Yen",
+ "symbol": "Â¥"
+ },
+ "JOD": {
+ "name": "Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanese Pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivian Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexican Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "Mozambican Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibian Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "New Taiwan Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "New Zealand Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistani Rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippine Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russian Ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Saint Helena Pound",
+ "symbol": "SHP"
+ },
+ "SVC": {
+ "name": "Salvadoran Colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé and Príncipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellois Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapore Dollar",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Solomon Islands Dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "South Korean Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "South Sudanese Pound",
+ "symbol": "SSP"
+ },
+ "LKR": {
+ "name": "Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamese Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thai Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad and Tobago Dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "Uruguayan Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US Dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "Uzbekistan Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwean Dollar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/en-IE.json b/library/intl/resources/currency/en-IE.json
new file mode 100644
index 000000000..2dbdae5ca
--- /dev/null
+++ b/library/intl/resources/currency/en-IE.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentine Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australian Dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamian Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadian Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarusian Ruble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Belize Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudan Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "British Pound Sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunei Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadian Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Cayman Islands Dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilean Peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "Colombian Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Cuban Convertible Peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cuban Peso",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Danish Krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominican Peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "East Caribbean Dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Islands Pound",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fijian Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar Pound",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanaese Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong Dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "Israeli New Shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaican Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanese Yen",
+ "symbol": "Â¥"
+ },
+ "JOD": {
+ "name": "Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanese Pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivian Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexican Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "Mozambican Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibian Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "New Taiwan Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "New Zealand Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistani Rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippine Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russian Ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Saint Helena Pound",
+ "symbol": "SHP"
+ },
+ "SVC": {
+ "name": "Salvadoran Colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé and Príncipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellois Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapore Dollar",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Solomon Islands Dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "South Korean Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "South Sudanese Pound",
+ "symbol": "SSP"
+ },
+ "LKR": {
+ "name": "Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamese Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thai Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad and Tobago Dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "Uruguayan Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US Dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "Uzbekistan Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwean Dollar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/en-IM.json b/library/intl/resources/currency/en-IM.json
new file mode 100644
index 000000000..2dbdae5ca
--- /dev/null
+++ b/library/intl/resources/currency/en-IM.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentine Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australian Dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamian Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadian Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarusian Ruble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Belize Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudan Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "British Pound Sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunei Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadian Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Cayman Islands Dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilean Peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "Colombian Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Cuban Convertible Peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cuban Peso",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Danish Krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominican Peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "East Caribbean Dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Islands Pound",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fijian Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar Pound",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanaese Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong Dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "Israeli New Shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaican Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanese Yen",
+ "symbol": "Â¥"
+ },
+ "JOD": {
+ "name": "Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanese Pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivian Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexican Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "Mozambican Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibian Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "New Taiwan Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "New Zealand Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistani Rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippine Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russian Ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Saint Helena Pound",
+ "symbol": "SHP"
+ },
+ "SVC": {
+ "name": "Salvadoran Colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé and Príncipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellois Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapore Dollar",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Solomon Islands Dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "South Korean Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "South Sudanese Pound",
+ "symbol": "SSP"
+ },
+ "LKR": {
+ "name": "Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamese Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thai Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad and Tobago Dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "Uruguayan Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US Dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "Uzbekistan Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwean Dollar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/en-IN.json b/library/intl/resources/currency/en-IN.json
new file mode 100644
index 000000000..2dbdae5ca
--- /dev/null
+++ b/library/intl/resources/currency/en-IN.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentine Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australian Dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamian Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadian Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarusian Ruble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Belize Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudan Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "British Pound Sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunei Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadian Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Cayman Islands Dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilean Peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "Colombian Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Cuban Convertible Peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cuban Peso",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Danish Krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominican Peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "East Caribbean Dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Islands Pound",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fijian Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar Pound",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanaese Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong Dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "Israeli New Shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaican Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanese Yen",
+ "symbol": "Â¥"
+ },
+ "JOD": {
+ "name": "Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanese Pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivian Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexican Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "Mozambican Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibian Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "New Taiwan Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "New Zealand Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistani Rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippine Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russian Ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Saint Helena Pound",
+ "symbol": "SHP"
+ },
+ "SVC": {
+ "name": "Salvadoran Colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé and Príncipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellois Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapore Dollar",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Solomon Islands Dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "South Korean Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "South Sudanese Pound",
+ "symbol": "SSP"
+ },
+ "LKR": {
+ "name": "Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamese Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thai Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad and Tobago Dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "Uruguayan Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US Dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "Uzbekistan Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwean Dollar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/en-IO.json b/library/intl/resources/currency/en-IO.json
new file mode 100644
index 000000000..2dbdae5ca
--- /dev/null
+++ b/library/intl/resources/currency/en-IO.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentine Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australian Dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamian Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadian Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarusian Ruble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Belize Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudan Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "British Pound Sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunei Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadian Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Cayman Islands Dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilean Peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "Colombian Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Cuban Convertible Peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cuban Peso",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Danish Krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominican Peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "East Caribbean Dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Islands Pound",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fijian Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar Pound",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanaese Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong Dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "Israeli New Shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaican Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanese Yen",
+ "symbol": "Â¥"
+ },
+ "JOD": {
+ "name": "Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanese Pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivian Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexican Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "Mozambican Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibian Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "New Taiwan Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "New Zealand Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistani Rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippine Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russian Ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Saint Helena Pound",
+ "symbol": "SHP"
+ },
+ "SVC": {
+ "name": "Salvadoran Colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé and Príncipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellois Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapore Dollar",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Solomon Islands Dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "South Korean Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "South Sudanese Pound",
+ "symbol": "SSP"
+ },
+ "LKR": {
+ "name": "Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamese Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thai Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad and Tobago Dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "Uruguayan Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US Dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "Uzbekistan Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwean Dollar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/en-JE.json b/library/intl/resources/currency/en-JE.json
new file mode 100644
index 000000000..2dbdae5ca
--- /dev/null
+++ b/library/intl/resources/currency/en-JE.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentine Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australian Dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamian Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadian Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarusian Ruble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Belize Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudan Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "British Pound Sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunei Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadian Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Cayman Islands Dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilean Peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "Colombian Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Cuban Convertible Peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cuban Peso",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Danish Krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominican Peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "East Caribbean Dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Islands Pound",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fijian Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar Pound",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanaese Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong Dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "Israeli New Shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaican Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanese Yen",
+ "symbol": "Â¥"
+ },
+ "JOD": {
+ "name": "Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanese Pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivian Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexican Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "Mozambican Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibian Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "New Taiwan Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "New Zealand Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistani Rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippine Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russian Ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Saint Helena Pound",
+ "symbol": "SHP"
+ },
+ "SVC": {
+ "name": "Salvadoran Colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé and Príncipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellois Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapore Dollar",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Solomon Islands Dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "South Korean Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "South Sudanese Pound",
+ "symbol": "SSP"
+ },
+ "LKR": {
+ "name": "Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamese Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thai Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad and Tobago Dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "Uruguayan Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US Dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "Uzbekistan Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwean Dollar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/en-MO.json b/library/intl/resources/currency/en-MO.json
new file mode 100644
index 000000000..70f96d7ad
--- /dev/null
+++ b/library/intl/resources/currency/en-MO.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentine Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australian Dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamian Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadian Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarusian Ruble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Belize Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudan Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "British Pound Sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunei Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadian Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Cayman Islands Dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilean Peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "Colombian Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Cuban Convertible Peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cuban Peso",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Danish Krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominican Peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "East Caribbean Dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Islands Pound",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fijian Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar Pound",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanaese Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong Dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "Israeli New Shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaican Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanese Yen",
+ "symbol": "Â¥"
+ },
+ "JOD": {
+ "name": "Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanese Pataca",
+ "symbol": "MOP$"
+ },
+ "MKD": {
+ "name": "Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivian Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexican Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "Mozambican Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibian Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "New Taiwan Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "New Zealand Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistani Rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippine Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russian Ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Saint Helena Pound",
+ "symbol": "SHP"
+ },
+ "SVC": {
+ "name": "Salvadoran Colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé and Príncipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellois Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapore Dollar",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Solomon Islands Dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "South Korean Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "South Sudanese Pound",
+ "symbol": "SSP"
+ },
+ "LKR": {
+ "name": "Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamese Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thai Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad and Tobago Dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "Uruguayan Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US Dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "Uzbekistan Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwean Dollar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/en-MT.json b/library/intl/resources/currency/en-MT.json
new file mode 100644
index 000000000..b618be685
--- /dev/null
+++ b/library/intl/resources/currency/en-MT.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentine Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australian Dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamian Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadian Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarusian Ruble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Belize Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudan Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "British Pound Sterling",
+ "symbol": "GB£"
+ },
+ "BND": {
+ "name": "Brunei Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadian Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Cayman Islands Dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilean Peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "Colombian Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Cuban Convertible Peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cuban Peso",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Danish Krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominican Peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "East Caribbean Dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Islands Pound",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fijian Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar Pound",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanaese Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong Dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "Israeli New Shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaican Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanese Yen",
+ "symbol": "Â¥"
+ },
+ "JOD": {
+ "name": "Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanese Pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivian Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexican Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "Mozambican Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibian Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "New Taiwan Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "New Zealand Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistani Rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippine Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russian Ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Saint Helena Pound",
+ "symbol": "SHP"
+ },
+ "SVC": {
+ "name": "Salvadoran Colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé and Príncipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellois Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapore Dollar",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Solomon Islands Dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "South Korean Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "South Sudanese Pound",
+ "symbol": "SSP"
+ },
+ "LKR": {
+ "name": "Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamese Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thai Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad and Tobago Dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "Uruguayan Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US Dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "Uzbekistan Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwean Dollar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/en-NZ.json b/library/intl/resources/currency/en-NZ.json
new file mode 100644
index 000000000..00a9ef4f4
--- /dev/null
+++ b/library/intl/resources/currency/en-NZ.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentine Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australian Dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamian Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadian Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarusian Ruble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Belize Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudan Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "British Pound Sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunei Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadian Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Cayman Islands Dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilean Peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "Colombian Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Cuban Convertible Peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cuban Peso",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Danish Krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominican Peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "East Caribbean Dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Islands Pound",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fijian Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar Pound",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanaese Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong Dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "Israeli New Shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaican Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanese Yen",
+ "symbol": "Â¥"
+ },
+ "JOD": {
+ "name": "Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanese Pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivian Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexican Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "Mozambican Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibian Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "New Taiwan Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "New Zealand Dollar",
+ "symbol": "$"
+ },
+ "NIO": {
+ "name": "Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistani Rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippine Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russian Ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Saint Helena Pound",
+ "symbol": "SHP"
+ },
+ "SVC": {
+ "name": "Salvadoran Colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé and Príncipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellois Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapore Dollar",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Solomon Islands Dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "South Korean Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "South Sudanese Pound",
+ "symbol": "SSP"
+ },
+ "LKR": {
+ "name": "Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamese Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thai Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad and Tobago Dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "Uruguayan Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US Dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "Uzbekistan Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwean Dollar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/en-PK.json b/library/intl/resources/currency/en-PK.json
new file mode 100644
index 000000000..0a373668f
--- /dev/null
+++ b/library/intl/resources/currency/en-PK.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentine Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australian Dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamian Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadian Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarusian Ruble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Belize Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudan Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "British Pound Sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunei Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadian Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Cayman Islands Dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilean Peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "Colombian Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Cuban Convertible Peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cuban Peso",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Danish Krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominican Peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "East Caribbean Dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Islands Pound",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fijian Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar Pound",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanaese Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong Dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "Israeli New Shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaican Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanese Yen",
+ "symbol": "Â¥"
+ },
+ "JOD": {
+ "name": "Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanese Pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivian Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexican Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "Mozambican Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibian Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "New Taiwan Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "New Zealand Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistani Rupee",
+ "symbol": "Rs"
+ },
+ "PAB": {
+ "name": "Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippine Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russian Ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Saint Helena Pound",
+ "symbol": "SHP"
+ },
+ "SVC": {
+ "name": "Salvadoran Colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé and Príncipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellois Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapore Dollar",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Solomon Islands Dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "South Korean Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "South Sudanese Pound",
+ "symbol": "SSP"
+ },
+ "LKR": {
+ "name": "Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamese Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thai Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad and Tobago Dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "Uruguayan Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US Dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "Uzbekistan Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwean Dollar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/en-SG.json b/library/intl/resources/currency/en-SG.json
new file mode 100644
index 000000000..9a26f42ce
--- /dev/null
+++ b/library/intl/resources/currency/en-SG.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentine Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australian Dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamian Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadian Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarusian Ruble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Belize Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudan Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "British Pound Sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunei Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadian Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Cayman Islands Dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilean Peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "Colombian Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Cuban Convertible Peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cuban Peso",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Danish Krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominican Peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "East Caribbean Dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Islands Pound",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fijian Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar Pound",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanaese Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong Dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "Israeli New Shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaican Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanese Yen",
+ "symbol": "Â¥"
+ },
+ "JOD": {
+ "name": "Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanese Pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivian Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexican Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "Mozambican Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibian Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "New Taiwan Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "New Zealand Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistani Rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippine Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russian Ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Saint Helena Pound",
+ "symbol": "SHP"
+ },
+ "SVC": {
+ "name": "Salvadoran Colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé and Príncipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellois Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapore Dollar",
+ "symbol": "$"
+ },
+ "SBD": {
+ "name": "Solomon Islands Dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "South Korean Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "South Sudanese Pound",
+ "symbol": "SSP"
+ },
+ "LKR": {
+ "name": "Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamese Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thai Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad and Tobago Dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "Uruguayan Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US Dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "Uzbekistan Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwean Dollar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/en-SH.json b/library/intl/resources/currency/en-SH.json
new file mode 100644
index 000000000..5cee5ff19
--- /dev/null
+++ b/library/intl/resources/currency/en-SH.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentine Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australian Dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamian Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadian Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarusian Ruble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Belize Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudan Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "British Pound Sterling",
+ "symbol": "GB£"
+ },
+ "BND": {
+ "name": "Brunei Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadian Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Cayman Islands Dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilean Peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "Colombian Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Cuban Convertible Peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cuban Peso",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Danish Krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominican Peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "East Caribbean Dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Islands Pound",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fijian Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar Pound",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanaese Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong Dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "Israeli New Shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaican Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanese Yen",
+ "symbol": "Â¥"
+ },
+ "JOD": {
+ "name": "Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanese Pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivian Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexican Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "Mozambican Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibian Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "New Taiwan Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "New Zealand Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistani Rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippine Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russian Ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Saint Helena Pound",
+ "symbol": "£"
+ },
+ "SVC": {
+ "name": "Salvadoran Colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé and Príncipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellois Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapore Dollar",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Solomon Islands Dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "South Korean Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "South Sudanese Pound",
+ "symbol": "SSP"
+ },
+ "LKR": {
+ "name": "Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamese Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thai Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad and Tobago Dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "Uruguayan Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US Dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "Uzbekistan Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwean Dollar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/en-VG.json b/library/intl/resources/currency/en-VG.json
new file mode 100644
index 000000000..2dbdae5ca
--- /dev/null
+++ b/library/intl/resources/currency/en-VG.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentine Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australian Dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamian Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadian Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarusian Ruble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Belize Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudan Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "British Pound Sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunei Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadian Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Cayman Islands Dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilean Peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "Colombian Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Cuban Convertible Peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cuban Peso",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Danish Krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominican Peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "East Caribbean Dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Islands Pound",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fijian Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar Pound",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanaese Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong Dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "Israeli New Shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaican Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanese Yen",
+ "symbol": "Â¥"
+ },
+ "JOD": {
+ "name": "Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanese Pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivian Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexican Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "Mozambican Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibian Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "New Taiwan Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "New Zealand Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistani Rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippine Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russian Ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Saint Helena Pound",
+ "symbol": "SHP"
+ },
+ "SVC": {
+ "name": "Salvadoran Colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé and Príncipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellois Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapore Dollar",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Solomon Islands Dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "South Korean Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "South Sudanese Pound",
+ "symbol": "SSP"
+ },
+ "LKR": {
+ "name": "Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamese Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thai Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad and Tobago Dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "Uruguayan Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US Dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "Uzbekistan Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwean Dollar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/en.json b/library/intl/resources/currency/en.json
new file mode 100644
index 000000000..937c7a750
--- /dev/null
+++ b/library/intl/resources/currency/en.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentine Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australian Dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamian Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadian Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarusian Ruble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Belize Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudan Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "British Pound Sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunei Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadian Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Cayman Islands Dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilean Peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "Colombian Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Cuban Convertible Peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cuban Peso",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Danish Krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominican Peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "East Caribbean Dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Islands Pound",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fijian Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar Pound",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanaese Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong Dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "Israeli New Sheqel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaican Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanese Yen",
+ "symbol": "Â¥"
+ },
+ "JOD": {
+ "name": "Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanese Pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivian Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexican Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "Mozambican Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibian Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "New Taiwan Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "New Zealand Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistani Rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippine Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russian Ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SVC": {
+ "name": "Salvadoran Colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé & Príncipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellois Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapore Dollar",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Solomon Islands Dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "South Korean Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "South Sudanese Pound",
+ "symbol": "SSP"
+ },
+ "LKR": {
+ "name": "Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SHP": {
+ "name": "St. Helena Pound",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamese Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thai Baht",
+ "symbol": "THB"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad & Tobago Dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "UYU": {
+ "name": "Uruguayan Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US Dollar",
+ "symbol": "$"
+ },
+ "UZS": {
+ "name": "Uzbekistan Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwean Dollar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/eo.json b/library/intl/resources/currency/eo.json
new file mode 100644
index 000000000..16a868f49
--- /dev/null
+++ b/library/intl/resources/currency/eo.json
@@ -0,0 +1,634 @@
+{
+ "AED": {
+ "name": "AED",
+ "symbol": "AED"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "AOA",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AUD": {
+ "name": "AÅ­stralia dolaro",
+ "symbol": "AU$"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "INR": {
+ "name": "Barata rupio",
+ "symbol": "₹"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BHD": {
+ "name": "BHD",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "BIF",
+ "symbol": "BIF"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "Brazila realo",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "Brita pundo",
+ "symbol": "£"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BWP": {
+ "name": "BWP",
+ "symbol": "BWP"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CDF": {
+ "name": "CDF",
+ "symbol": "CDF"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CVE": {
+ "name": "CVE",
+ "symbol": "CVE"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "CNY": {
+ "name": "Ĉina juano",
+ "symbol": "CNÂ¥"
+ },
+ "DKK": {
+ "name": "Dana krono",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "DJF",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "DZD": {
+ "name": "DZD",
+ "symbol": "DZD"
+ },
+ "EGP": {
+ "name": "EGP",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "ERN",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "ETB",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "EÅ­ro",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GMD": {
+ "name": "GMD",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Honkonga dolaro",
+ "symbol": "HK$"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IDR": {
+ "name": "Indonezia rupio",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JPY": {
+ "name": "Japana eno",
+ "symbol": "JPÂ¥"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "CAD": {
+ "name": "Kanada dolaro",
+ "symbol": "CA$"
+ },
+ "KES": {
+ "name": "KES",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "KMF",
+ "symbol": "KMF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LRD": {
+ "name": "LRD",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "LYD",
+ "symbol": "LYD"
+ },
+ "MAD": {
+ "name": "MAD",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MXN": {
+ "name": "Meksika peso",
+ "symbol": "MX$"
+ },
+ "MGA": {
+ "name": "MGA",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MRO": {
+ "name": "MRO",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "MWK",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "Norvega krono",
+ "symbol": "NOK"
+ },
+ "TWD": {
+ "name": "Nova tajvana dolaro",
+ "symbol": "NT$"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "Pola zloto",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "Rusa rublo",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SAR": {
+ "name": "Sauda rialo",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "SDG",
+ "symbol": "SDG"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SOS",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "ZAR": {
+ "name": "Sud-afrika rando",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "Sud-korea Å­ono",
+ "symbol": "â‚©"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SEK": {
+ "name": "Sveda krono",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Svisa franko",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "THB": {
+ "name": "Taja bahto",
+ "symbol": "฿"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "TND",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TRY": {
+ "name": "Turka liro",
+ "symbol": "₺"
+ },
+ "TZS": {
+ "name": "TZS",
+ "symbol": "TZS"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "UGX",
+ "symbol": "UGX"
+ },
+ "USD": {
+ "name": "Usona dolaro",
+ "symbol": "US$"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/es-AR.json b/library/intl/resources/currency/es-AR.json
new file mode 100644
index 000000000..66ec77ec7
--- /dev/null
+++ b/library/intl/resources/currency/es-AR.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariari",
+ "symbol": "MGA"
+ },
+ "PAB": {
+ "name": "balboa panameño",
+ "symbol": "PAB"
+ },
+ "THB": {
+ "name": "bat",
+ "symbol": "THB"
+ },
+ "ETB": {
+ "name": "bir",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar venezolano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "chelín keniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "chelín somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "chelín tanzano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "chelín ugandés",
+ "symbol": "UGX"
+ },
+ "CRC": {
+ "name": "colón costarricense",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadoreño",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba nicaragüense",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "corona checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreiní",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquí",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwaití",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "dinar macedonio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "dinar serbio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunecino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dírham de los Emiratos Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dírham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dólar australiano",
+ "symbol": "AUD"
+ },
+ "BSD": {
+ "name": "dólar bahameño",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dólar beliceño",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "dólar bruneano",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "dólar canadiense",
+ "symbol": "CAD"
+ },
+ "BMD": {
+ "name": "dólar de Bermudas",
+ "symbol": "BMD"
+ },
+ "KYD": {
+ "name": "dólar de las Islas Caimán",
+ "symbol": "KYD"
+ },
+ "TTD": {
+ "name": "dólar de Trinidad y Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dólar del Caribe Oriental",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dólar estadounidense",
+ "symbol": "US$"
+ },
+ "FJD": {
+ "name": "dólar fiyiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dólar guyanés",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dólar hongkonés",
+ "symbol": "HKD"
+ },
+ "JMD": {
+ "name": "dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dólar namibio",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dólar neozelandés",
+ "symbol": "NZD"
+ },
+ "SBD": {
+ "name": "dólar salomonense",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "dólar singapurense",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dólar surinamés",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "dólar zimbabuense",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo de Cabo Verde",
+ "symbol": "CVE"
+ },
+ "PLN": {
+ "name": "esloti",
+ "symbol": "PLN"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "EUR"
+ },
+ "AWG": {
+ "name": "florín arubeño",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "florín de las Antillas Neerlandesas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "forinto",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franco burundés",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franco CFA BCEAO",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franco CFA BEAC",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "franco comorense",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franco congoleño",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franco ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franco suizo",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "franco yibutiano",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "gourde haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "grivna",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "guaraní paraguayo",
+ "symbol": "PYG"
+ },
+ "BTN": {
+ "name": "gultrum",
+ "symbol": "BTN"
+ },
+ "MMK": {
+ "name": "kiat",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "kina",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip",
+ "symbol": "LAK"
+ },
+ "MWK": {
+ "name": "kuacha malauí",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kuacha zambiano",
+ "symbol": "ZMK"
+ },
+ "AOA": {
+ "name": "kuanza",
+ "symbol": "AOA"
+ },
+ "HRK": {
+ "name": "kuna",
+ "symbol": "HRK"
+ },
+ "GEL": {
+ "name": "lari",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondureño",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leona",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumano",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "leva",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "libra de las Islas Malvinas",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "libra de Santa Elena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "libra egipcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "libra esterlina",
+ "symbol": "GBP"
+ },
+ "GIP": {
+ "name": "libra gibraltareña",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "libra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "libra sursudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti lesothense",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerí",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turcomano",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marco convertible de Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa",
+ "symbol": "ERN"
+ },
+ "TWD": {
+ "name": "nuevo dólar taiwanés",
+ "symbol": "TWD"
+ },
+ "ILS": {
+ "name": "nuevo sheqel israelí",
+ "symbol": "ILS"
+ },
+ "PEN": {
+ "name": "nuevo sol peruano",
+ "symbol": "PEN"
+ },
+ "TOP": {
+ "name": "paanga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentino",
+ "symbol": "$"
+ },
+ "CLP": {
+ "name": "peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubano convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexicano",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso uruguayo",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalteco",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasileño",
+ "symbol": "BRL"
+ },
+ "QAR": {
+ "name": "rial catarí",
+ "symbol": "QAR"
+ },
+ "IRR": {
+ "name": "rial iraní",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omaní",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saudí",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yemení",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringit",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rublo bielorruso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublo ruso",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiya",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "rupia esrilanquesa",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia india",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "rupia indonesia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalí",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistaní",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "rupia seychellense",
+ "symbol": "SCR"
+ },
+ "KGS": {
+ "name": "som",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tayiko",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazako",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "uguiya",
+ "symbol": "MRO"
+ },
+ "VUV": {
+ "name": "vatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won norcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won surcoreano",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "yuan",
+ "symbol": "CNY"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/es-BO.json b/library/intl/resources/currency/es-BO.json
new file mode 100644
index 000000000..a36de1ec8
--- /dev/null
+++ b/library/intl/resources/currency/es-BO.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariari",
+ "symbol": "MGA"
+ },
+ "PAB": {
+ "name": "balboa panameño",
+ "symbol": "PAB"
+ },
+ "THB": {
+ "name": "bat",
+ "symbol": "THB"
+ },
+ "ETB": {
+ "name": "bir",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar venezolano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "Bs"
+ },
+ "GHS": {
+ "name": "cedi",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "chelín keniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "chelín somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "chelín tanzano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "chelín ugandés",
+ "symbol": "UGX"
+ },
+ "CRC": {
+ "name": "colón costarricense",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadoreño",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba nicaragüense",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "corona checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreiní",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquí",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwaití",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "dinar macedonio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "dinar serbio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunecino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dírham de los Emiratos Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dírham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dólar australiano",
+ "symbol": "AUD"
+ },
+ "BSD": {
+ "name": "dólar bahameño",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dólar beliceño",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "dólar bruneano",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "dólar canadiense",
+ "symbol": "CAD"
+ },
+ "BMD": {
+ "name": "dólar de Bermudas",
+ "symbol": "BMD"
+ },
+ "KYD": {
+ "name": "dólar de las Islas Caimán",
+ "symbol": "KYD"
+ },
+ "TTD": {
+ "name": "dólar de Trinidad y Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dólar del Caribe Oriental",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dólar estadounidense",
+ "symbol": "USD"
+ },
+ "FJD": {
+ "name": "dólar fiyiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dólar guyanés",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dólar hongkonés",
+ "symbol": "HKD"
+ },
+ "JMD": {
+ "name": "dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dólar namibio",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dólar neozelandés",
+ "symbol": "NZD"
+ },
+ "SBD": {
+ "name": "dólar salomonense",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "dólar singapurense",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dólar surinamés",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "dólar zimbabuense",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo de Cabo Verde",
+ "symbol": "CVE"
+ },
+ "PLN": {
+ "name": "esloti",
+ "symbol": "PLN"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "EUR"
+ },
+ "AWG": {
+ "name": "florín arubeño",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "florín de las Antillas Neerlandesas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "forinto",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franco burundés",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franco CFA BCEAO",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franco CFA BEAC",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "franco comorense",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franco congoleño",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franco ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franco suizo",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "franco yibutiano",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "gourde haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "grivna",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "guaraní paraguayo",
+ "symbol": "PYG"
+ },
+ "BTN": {
+ "name": "gultrum",
+ "symbol": "BTN"
+ },
+ "MMK": {
+ "name": "kiat",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "kina",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip",
+ "symbol": "LAK"
+ },
+ "MWK": {
+ "name": "kuacha malauí",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kuacha zambiano",
+ "symbol": "ZMK"
+ },
+ "AOA": {
+ "name": "kuanza",
+ "symbol": "AOA"
+ },
+ "HRK": {
+ "name": "kuna",
+ "symbol": "HRK"
+ },
+ "GEL": {
+ "name": "lari",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondureño",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leona",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumano",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "leva",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "libra de las Islas Malvinas",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "libra de Santa Elena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "libra egipcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "libra esterlina",
+ "symbol": "GBP"
+ },
+ "GIP": {
+ "name": "libra gibraltareña",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "libra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "libra sursudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti lesothense",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerí",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turcomano",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marco convertible de Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa",
+ "symbol": "ERN"
+ },
+ "TWD": {
+ "name": "nuevo dólar taiwanés",
+ "symbol": "TWD"
+ },
+ "ILS": {
+ "name": "nuevo sheqel israelí",
+ "symbol": "ILS"
+ },
+ "PEN": {
+ "name": "nuevo sol peruano",
+ "symbol": "PEN"
+ },
+ "TOP": {
+ "name": "paanga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubano convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexicano",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso uruguayo",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalteco",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasileño",
+ "symbol": "BRL"
+ },
+ "QAR": {
+ "name": "rial catarí",
+ "symbol": "QAR"
+ },
+ "IRR": {
+ "name": "rial iraní",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omaní",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saudí",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yemení",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringit",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rublo bielorruso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublo ruso",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiya",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "rupia esrilanquesa",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia india",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "rupia indonesia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalí",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistaní",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "rupia seychellense",
+ "symbol": "SCR"
+ },
+ "KGS": {
+ "name": "som",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tayiko",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazako",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "uguiya",
+ "symbol": "MRO"
+ },
+ "VUV": {
+ "name": "vatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won norcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won surcoreano",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "yuan",
+ "symbol": "CNY"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/es-CL.json b/library/intl/resources/currency/es-CL.json
new file mode 100644
index 000000000..f4f4136e3
--- /dev/null
+++ b/library/intl/resources/currency/es-CL.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariari",
+ "symbol": "MGA"
+ },
+ "PAB": {
+ "name": "balboa panameño",
+ "symbol": "PAB"
+ },
+ "THB": {
+ "name": "bat",
+ "symbol": "THB"
+ },
+ "ETB": {
+ "name": "bir",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar venezolano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "chelín keniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "chelín somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "chelín tanzano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "chelín ugandés",
+ "symbol": "UGX"
+ },
+ "CRC": {
+ "name": "colón costarricense",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadoreño",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba nicaragüense",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "corona checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreiní",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquí",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwaití",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "dinar macedonio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "dinar serbio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunecino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dírham de los Emiratos Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dírham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dólar australiano",
+ "symbol": "AUD"
+ },
+ "BSD": {
+ "name": "dólar bahameño",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dólar beliceño",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "dólar bruneano",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "dólar canadiense",
+ "symbol": "CAD"
+ },
+ "BMD": {
+ "name": "dólar de Bermudas",
+ "symbol": "BMD"
+ },
+ "KYD": {
+ "name": "dólar de las Islas Caimán",
+ "symbol": "KYD"
+ },
+ "TTD": {
+ "name": "dólar de Trinidad y Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dólar del Caribe Oriental",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dólar estadounidense",
+ "symbol": "US$"
+ },
+ "FJD": {
+ "name": "dólar fiyiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dólar guyanés",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dólar hongkonés",
+ "symbol": "HKD"
+ },
+ "JMD": {
+ "name": "dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dólar namibio",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dólar neozelandés",
+ "symbol": "NZD"
+ },
+ "SBD": {
+ "name": "dólar salomonense",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "dólar singapurense",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dólar surinamés",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "dólar zimbabuense",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo de Cabo Verde",
+ "symbol": "CVE"
+ },
+ "PLN": {
+ "name": "esloti",
+ "symbol": "PLN"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "EUR"
+ },
+ "AWG": {
+ "name": "florín arubeño",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "florín de las Antillas Neerlandesas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "forinto",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franco burundés",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franco CFA BCEAO",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franco CFA BEAC",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "franco comorense",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franco congoleño",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franco ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franco suizo",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "franco yibutiano",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "gourde haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "grivna",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "guaraní paraguayo",
+ "symbol": "PYG"
+ },
+ "BTN": {
+ "name": "gultrum",
+ "symbol": "BTN"
+ },
+ "MMK": {
+ "name": "kiat",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "kina",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip",
+ "symbol": "LAK"
+ },
+ "MWK": {
+ "name": "kuacha malauí",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kuacha zambiano",
+ "symbol": "ZMK"
+ },
+ "AOA": {
+ "name": "kuanza",
+ "symbol": "AOA"
+ },
+ "HRK": {
+ "name": "kuna",
+ "symbol": "HRK"
+ },
+ "GEL": {
+ "name": "lari",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondureño",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leona",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumano",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "leva",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "libra de las Islas Malvinas",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "libra de Santa Elena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "libra egipcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "libra esterlina",
+ "symbol": "GBP"
+ },
+ "GIP": {
+ "name": "libra gibraltareña",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "libra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "libra sursudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti lesothense",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerí",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turcomano",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marco convertible de Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa",
+ "symbol": "ERN"
+ },
+ "TWD": {
+ "name": "nuevo dólar taiwanés",
+ "symbol": "TWD"
+ },
+ "ILS": {
+ "name": "nuevo sheqel israelí",
+ "symbol": "ILS"
+ },
+ "PEN": {
+ "name": "nuevo sol peruano",
+ "symbol": "PEN"
+ },
+ "TOP": {
+ "name": "paanga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chileno",
+ "symbol": "$"
+ },
+ "COP": {
+ "name": "peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubano convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexicano",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso uruguayo",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalteco",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasileño",
+ "symbol": "BRL"
+ },
+ "QAR": {
+ "name": "rial catarí",
+ "symbol": "QAR"
+ },
+ "IRR": {
+ "name": "rial iraní",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omaní",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saudí",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yemení",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringit",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rublo bielorruso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublo ruso",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiya",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "rupia esrilanquesa",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia india",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "rupia indonesia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalí",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistaní",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "rupia seychellense",
+ "symbol": "SCR"
+ },
+ "KGS": {
+ "name": "som",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tayiko",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazako",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "uguiya",
+ "symbol": "MRO"
+ },
+ "VUV": {
+ "name": "vatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won norcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won surcoreano",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "yuan",
+ "symbol": "CNY"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/es-CO.json b/library/intl/resources/currency/es-CO.json
new file mode 100644
index 000000000..f8e90ed93
--- /dev/null
+++ b/library/intl/resources/currency/es-CO.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariari",
+ "symbol": "MGA"
+ },
+ "PAB": {
+ "name": "balboa panameño",
+ "symbol": "PAB"
+ },
+ "THB": {
+ "name": "bat",
+ "symbol": "THB"
+ },
+ "ETB": {
+ "name": "bir",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar venezolano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "chelín keniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "chelín somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "chelín tanzano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "chelín ugandés",
+ "symbol": "UGX"
+ },
+ "CRC": {
+ "name": "colón costarricense",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadoreño",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba nicaragüense",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "corona checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreiní",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquí",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwaití",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "dinar macedonio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "dinar serbio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunecino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dírham de los Emiratos Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dírham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dólar australiano",
+ "symbol": "AUD"
+ },
+ "BSD": {
+ "name": "dólar bahameño",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dólar beliceño",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "dólar bruneano",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "dólar canadiense",
+ "symbol": "CAD"
+ },
+ "BMD": {
+ "name": "dólar de Bermudas",
+ "symbol": "BMD"
+ },
+ "KYD": {
+ "name": "dólar de las Islas Caimán",
+ "symbol": "KYD"
+ },
+ "TTD": {
+ "name": "dólar de Trinidad y Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dólar del Caribe Oriental",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dólar estadounidense",
+ "symbol": "US$"
+ },
+ "FJD": {
+ "name": "dólar fiyiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dólar guyanés",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dólar hongkonés",
+ "symbol": "HKD"
+ },
+ "JMD": {
+ "name": "dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dólar namibio",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dólar neozelandés",
+ "symbol": "NZD"
+ },
+ "SBD": {
+ "name": "dólar salomonense",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "dólar singapurense",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dólar surinamés",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "dólar zimbabuense",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo de Cabo Verde",
+ "symbol": "CVE"
+ },
+ "PLN": {
+ "name": "esloti",
+ "symbol": "PLN"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "EUR"
+ },
+ "AWG": {
+ "name": "florín arubeño",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "florín de las Antillas Neerlandesas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "forinto",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franco burundés",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franco CFA BCEAO",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franco CFA BEAC",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "franco comorense",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franco congoleño",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franco ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franco suizo",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "franco yibutiano",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "gourde haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "grivna",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "guaraní paraguayo",
+ "symbol": "PYG"
+ },
+ "BTN": {
+ "name": "gultrum",
+ "symbol": "BTN"
+ },
+ "MMK": {
+ "name": "kiat",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "kina",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip",
+ "symbol": "LAK"
+ },
+ "MWK": {
+ "name": "kuacha malauí",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kuacha zambiano",
+ "symbol": "ZMK"
+ },
+ "AOA": {
+ "name": "kuanza",
+ "symbol": "AOA"
+ },
+ "HRK": {
+ "name": "kuna",
+ "symbol": "HRK"
+ },
+ "GEL": {
+ "name": "lari",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondureño",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leona",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumano",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "leva",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "libra de las Islas Malvinas",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "libra de Santa Elena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "libra egipcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "libra esterlina",
+ "symbol": "GBP"
+ },
+ "GIP": {
+ "name": "libra gibraltareña",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "libra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "libra sursudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti lesothense",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerí",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turcomano",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marco convertible de Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa",
+ "symbol": "ERN"
+ },
+ "TWD": {
+ "name": "nuevo dólar taiwanés",
+ "symbol": "TWD"
+ },
+ "ILS": {
+ "name": "nuevo sheqel israelí",
+ "symbol": "ILS"
+ },
+ "PEN": {
+ "name": "nuevo sol peruano",
+ "symbol": "PEN"
+ },
+ "TOP": {
+ "name": "paanga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso colombiano",
+ "symbol": "$"
+ },
+ "CUP": {
+ "name": "peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubano convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexicano",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso uruguayo",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalteco",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasileño",
+ "symbol": "BRL"
+ },
+ "QAR": {
+ "name": "rial catarí",
+ "symbol": "QAR"
+ },
+ "IRR": {
+ "name": "rial iraní",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omaní",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saudí",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yemení",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringit",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rublo bielorruso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublo ruso",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiya",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "rupia esrilanquesa",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia india",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "rupia indonesia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalí",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistaní",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "rupia seychellense",
+ "symbol": "SCR"
+ },
+ "KGS": {
+ "name": "som",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tayiko",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazako",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "uguiya",
+ "symbol": "MRO"
+ },
+ "VUV": {
+ "name": "vatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won norcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won surcoreano",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "yuan",
+ "symbol": "CNY"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/es-CR.json b/library/intl/resources/currency/es-CR.json
new file mode 100644
index 000000000..0f49bb020
--- /dev/null
+++ b/library/intl/resources/currency/es-CR.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariari",
+ "symbol": "MGA"
+ },
+ "PAB": {
+ "name": "balboa panameño",
+ "symbol": "PAB"
+ },
+ "THB": {
+ "name": "bat",
+ "symbol": "THB"
+ },
+ "ETB": {
+ "name": "bir",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar venezolano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "chelín keniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "chelín somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "chelín tanzano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "chelín ugandés",
+ "symbol": "UGX"
+ },
+ "CRC": {
+ "name": "colón costarricense",
+ "symbol": "â‚¡"
+ },
+ "SVC": {
+ "name": "colón salvadoreño",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba nicaragüense",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "corona checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreiní",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquí",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwaití",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "dinar macedonio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "dinar serbio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunecino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dírham de los Emiratos Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dírham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dólar australiano",
+ "symbol": "AUD"
+ },
+ "BSD": {
+ "name": "dólar bahameño",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dólar beliceño",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "dólar bruneano",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "dólar canadiense",
+ "symbol": "CAD"
+ },
+ "BMD": {
+ "name": "dólar de Bermudas",
+ "symbol": "BMD"
+ },
+ "KYD": {
+ "name": "dólar de las Islas Caimán",
+ "symbol": "KYD"
+ },
+ "TTD": {
+ "name": "dólar de Trinidad y Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dólar del Caribe Oriental",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dólar estadounidense",
+ "symbol": "USD"
+ },
+ "FJD": {
+ "name": "dólar fiyiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dólar guyanés",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dólar hongkonés",
+ "symbol": "HKD"
+ },
+ "JMD": {
+ "name": "dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dólar namibio",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dólar neozelandés",
+ "symbol": "NZD"
+ },
+ "SBD": {
+ "name": "dólar salomonense",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "dólar singapurense",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dólar surinamés",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "dólar zimbabuense",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo de Cabo Verde",
+ "symbol": "CVE"
+ },
+ "PLN": {
+ "name": "esloti",
+ "symbol": "PLN"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "EUR"
+ },
+ "AWG": {
+ "name": "florín arubeño",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "florín de las Antillas Neerlandesas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "forinto",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franco burundés",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franco CFA BCEAO",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franco CFA BEAC",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "franco comorense",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franco congoleño",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franco ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franco suizo",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "franco yibutiano",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "gourde haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "grivna",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "guaraní paraguayo",
+ "symbol": "PYG"
+ },
+ "BTN": {
+ "name": "gultrum",
+ "symbol": "BTN"
+ },
+ "MMK": {
+ "name": "kiat",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "kina",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip",
+ "symbol": "LAK"
+ },
+ "MWK": {
+ "name": "kuacha malauí",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kuacha zambiano",
+ "symbol": "ZMK"
+ },
+ "AOA": {
+ "name": "kuanza",
+ "symbol": "AOA"
+ },
+ "HRK": {
+ "name": "kuna",
+ "symbol": "HRK"
+ },
+ "GEL": {
+ "name": "lari",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondureño",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leona",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumano",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "leva",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "libra de las Islas Malvinas",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "libra de Santa Elena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "libra egipcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "libra esterlina",
+ "symbol": "GBP"
+ },
+ "GIP": {
+ "name": "libra gibraltareña",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "libra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "libra sursudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti lesothense",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerí",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turcomano",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marco convertible de Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa",
+ "symbol": "ERN"
+ },
+ "TWD": {
+ "name": "nuevo dólar taiwanés",
+ "symbol": "TWD"
+ },
+ "ILS": {
+ "name": "nuevo sheqel israelí",
+ "symbol": "ILS"
+ },
+ "PEN": {
+ "name": "nuevo sol peruano",
+ "symbol": "PEN"
+ },
+ "TOP": {
+ "name": "paanga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubano convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexicano",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso uruguayo",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalteco",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasileño",
+ "symbol": "BRL"
+ },
+ "QAR": {
+ "name": "rial catarí",
+ "symbol": "QAR"
+ },
+ "IRR": {
+ "name": "rial iraní",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omaní",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saudí",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yemení",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringit",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rublo bielorruso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublo ruso",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiya",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "rupia esrilanquesa",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia india",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "rupia indonesia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalí",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistaní",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "rupia seychellense",
+ "symbol": "SCR"
+ },
+ "KGS": {
+ "name": "som",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tayiko",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazako",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "uguiya",
+ "symbol": "MRO"
+ },
+ "VUV": {
+ "name": "vatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won norcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won surcoreano",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "yuan",
+ "symbol": "CNY"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/es-CU.json b/library/intl/resources/currency/es-CU.json
new file mode 100644
index 000000000..e5b0bbe16
--- /dev/null
+++ b/library/intl/resources/currency/es-CU.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariari",
+ "symbol": "MGA"
+ },
+ "PAB": {
+ "name": "balboa panameño",
+ "symbol": "PAB"
+ },
+ "THB": {
+ "name": "bat",
+ "symbol": "THB"
+ },
+ "ETB": {
+ "name": "bir",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar venezolano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "chelín keniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "chelín somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "chelín tanzano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "chelín ugandés",
+ "symbol": "UGX"
+ },
+ "CRC": {
+ "name": "colón costarricense",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadoreño",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba nicaragüense",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "corona checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreiní",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquí",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwaití",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "dinar macedonio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "dinar serbio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunecino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dírham de los Emiratos Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dírham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dólar australiano",
+ "symbol": "AUD"
+ },
+ "BSD": {
+ "name": "dólar bahameño",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dólar beliceño",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "dólar bruneano",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "dólar canadiense",
+ "symbol": "CAD"
+ },
+ "BMD": {
+ "name": "dólar de Bermudas",
+ "symbol": "BMD"
+ },
+ "KYD": {
+ "name": "dólar de las Islas Caimán",
+ "symbol": "KYD"
+ },
+ "TTD": {
+ "name": "dólar de Trinidad y Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dólar del Caribe Oriental",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dólar estadounidense",
+ "symbol": "US$"
+ },
+ "FJD": {
+ "name": "dólar fiyiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dólar guyanés",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dólar hongkonés",
+ "symbol": "HKD"
+ },
+ "JMD": {
+ "name": "dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dólar namibio",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dólar neozelandés",
+ "symbol": "NZD"
+ },
+ "SBD": {
+ "name": "dólar salomonense",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "dólar singapurense",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dólar surinamés",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "dólar zimbabuense",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo de Cabo Verde",
+ "symbol": "CVE"
+ },
+ "PLN": {
+ "name": "esloti",
+ "symbol": "PLN"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "EUR"
+ },
+ "AWG": {
+ "name": "florín arubeño",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "florín de las Antillas Neerlandesas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "forinto",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franco burundés",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franco CFA BCEAO",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franco CFA BEAC",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "franco comorense",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franco congoleño",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franco ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franco suizo",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "franco yibutiano",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "gourde haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "grivna",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "guaraní paraguayo",
+ "symbol": "PYG"
+ },
+ "BTN": {
+ "name": "gultrum",
+ "symbol": "BTN"
+ },
+ "MMK": {
+ "name": "kiat",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "kina",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip",
+ "symbol": "LAK"
+ },
+ "MWK": {
+ "name": "kuacha malauí",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kuacha zambiano",
+ "symbol": "ZMK"
+ },
+ "AOA": {
+ "name": "kuanza",
+ "symbol": "AOA"
+ },
+ "HRK": {
+ "name": "kuna",
+ "symbol": "HRK"
+ },
+ "GEL": {
+ "name": "lari",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondureño",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leona",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumano",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "leva",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "libra de las Islas Malvinas",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "libra de Santa Elena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "libra egipcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "libra esterlina",
+ "symbol": "GBP"
+ },
+ "GIP": {
+ "name": "libra gibraltareña",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "libra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "libra sursudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti lesothense",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerí",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turcomano",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marco convertible de Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa",
+ "symbol": "ERN"
+ },
+ "TWD": {
+ "name": "nuevo dólar taiwanés",
+ "symbol": "TWD"
+ },
+ "ILS": {
+ "name": "nuevo sheqel israelí",
+ "symbol": "ILS"
+ },
+ "PEN": {
+ "name": "nuevo sol peruano",
+ "symbol": "PEN"
+ },
+ "TOP": {
+ "name": "paanga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cubano",
+ "symbol": "$"
+ },
+ "CUC": {
+ "name": "peso cubano convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexicano",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso uruguayo",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalteco",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasileño",
+ "symbol": "BRL"
+ },
+ "QAR": {
+ "name": "rial catarí",
+ "symbol": "QAR"
+ },
+ "IRR": {
+ "name": "rial iraní",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omaní",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saudí",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yemení",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringit",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rublo bielorruso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublo ruso",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiya",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "rupia esrilanquesa",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia india",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "rupia indonesia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalí",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistaní",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "rupia seychellense",
+ "symbol": "SCR"
+ },
+ "KGS": {
+ "name": "som",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tayiko",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazako",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "uguiya",
+ "symbol": "MRO"
+ },
+ "VUV": {
+ "name": "vatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won norcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won surcoreano",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "yuan",
+ "symbol": "CNY"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/es-DO.json b/library/intl/resources/currency/es-DO.json
new file mode 100644
index 000000000..a7dacfdcc
--- /dev/null
+++ b/library/intl/resources/currency/es-DO.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariari",
+ "symbol": "MGA"
+ },
+ "PAB": {
+ "name": "balboa panameño",
+ "symbol": "PAB"
+ },
+ "THB": {
+ "name": "bat",
+ "symbol": "THB"
+ },
+ "ETB": {
+ "name": "bir",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar venezolano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "chelín keniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "chelín somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "chelín tanzano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "chelín ugandés",
+ "symbol": "UGX"
+ },
+ "CRC": {
+ "name": "colón costarricense",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadoreño",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba nicaragüense",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "corona checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreiní",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquí",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwaití",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "dinar macedonio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "dinar serbio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunecino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dírham de los Emiratos Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dírham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dólar australiano",
+ "symbol": "AUD"
+ },
+ "BSD": {
+ "name": "dólar bahameño",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dólar beliceño",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "dólar bruneano",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "dólar canadiense",
+ "symbol": "CAD"
+ },
+ "BMD": {
+ "name": "dólar de Bermudas",
+ "symbol": "BMD"
+ },
+ "KYD": {
+ "name": "dólar de las Islas Caimán",
+ "symbol": "KYD"
+ },
+ "TTD": {
+ "name": "dólar de Trinidad y Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dólar del Caribe Oriental",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dólar estadounidense",
+ "symbol": "US$"
+ },
+ "FJD": {
+ "name": "dólar fiyiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dólar guyanés",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dólar hongkonés",
+ "symbol": "HKD"
+ },
+ "JMD": {
+ "name": "dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dólar namibio",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dólar neozelandés",
+ "symbol": "NZD"
+ },
+ "SBD": {
+ "name": "dólar salomonense",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "dólar singapurense",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dólar surinamés",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "dólar zimbabuense",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo de Cabo Verde",
+ "symbol": "CVE"
+ },
+ "PLN": {
+ "name": "esloti",
+ "symbol": "PLN"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "EUR"
+ },
+ "AWG": {
+ "name": "florín arubeño",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "florín de las Antillas Neerlandesas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "forinto",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franco burundés",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franco CFA BCEAO",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franco CFA BEAC",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "franco comorense",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franco congoleño",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franco ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franco suizo",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "franco yibutiano",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "gourde haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "grivna",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "guaraní paraguayo",
+ "symbol": "PYG"
+ },
+ "BTN": {
+ "name": "gultrum",
+ "symbol": "BTN"
+ },
+ "MMK": {
+ "name": "kiat",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "kina",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip",
+ "symbol": "LAK"
+ },
+ "MWK": {
+ "name": "kuacha malauí",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kuacha zambiano",
+ "symbol": "ZMK"
+ },
+ "AOA": {
+ "name": "kuanza",
+ "symbol": "AOA"
+ },
+ "HRK": {
+ "name": "kuna",
+ "symbol": "HRK"
+ },
+ "GEL": {
+ "name": "lari",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondureño",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leona",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumano",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "leva",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "libra de las Islas Malvinas",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "libra de Santa Elena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "libra egipcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "libra esterlina",
+ "symbol": "GBP"
+ },
+ "GIP": {
+ "name": "libra gibraltareña",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "libra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "libra sursudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti lesothense",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerí",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turcomano",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marco convertible de Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa",
+ "symbol": "ERN"
+ },
+ "TWD": {
+ "name": "nuevo dólar taiwanés",
+ "symbol": "TWD"
+ },
+ "ILS": {
+ "name": "nuevo sheqel israelí",
+ "symbol": "ILS"
+ },
+ "PEN": {
+ "name": "nuevo sol peruano",
+ "symbol": "PEN"
+ },
+ "TOP": {
+ "name": "paanga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubano convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicano",
+ "symbol": "$"
+ },
+ "PHP": {
+ "name": "peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexicano",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso uruguayo",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalteco",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasileño",
+ "symbol": "BRL"
+ },
+ "QAR": {
+ "name": "rial catarí",
+ "symbol": "QAR"
+ },
+ "IRR": {
+ "name": "rial iraní",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omaní",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saudí",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yemení",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringit",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rublo bielorruso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublo ruso",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiya",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "rupia esrilanquesa",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia india",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "rupia indonesia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalí",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistaní",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "rupia seychellense",
+ "symbol": "SCR"
+ },
+ "KGS": {
+ "name": "som",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tayiko",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazako",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "uguiya",
+ "symbol": "MRO"
+ },
+ "VUV": {
+ "name": "vatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won norcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won surcoreano",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "yuan",
+ "symbol": "CNY"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/es-EC.json b/library/intl/resources/currency/es-EC.json
new file mode 100644
index 000000000..a179e61e0
--- /dev/null
+++ b/library/intl/resources/currency/es-EC.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariari",
+ "symbol": "MGA"
+ },
+ "PAB": {
+ "name": "balboa panameño",
+ "symbol": "PAB"
+ },
+ "THB": {
+ "name": "bat",
+ "symbol": "THB"
+ },
+ "ETB": {
+ "name": "bir",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar venezolano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "chelín keniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "chelín somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "chelín tanzano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "chelín ugandés",
+ "symbol": "UGX"
+ },
+ "CRC": {
+ "name": "colón costarricense",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadoreño",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba nicaragüense",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "corona checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreiní",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquí",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwaití",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "dinar macedonio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "dinar serbio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunecino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dírham de los Emiratos Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dírham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dólar australiano",
+ "symbol": "AUD"
+ },
+ "BSD": {
+ "name": "dólar bahameño",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dólar beliceño",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "dólar bruneano",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "dólar canadiense",
+ "symbol": "CAD"
+ },
+ "BMD": {
+ "name": "dólar de Bermudas",
+ "symbol": "BMD"
+ },
+ "KYD": {
+ "name": "dólar de las Islas Caimán",
+ "symbol": "KYD"
+ },
+ "TTD": {
+ "name": "dólar de Trinidad y Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dólar del Caribe Oriental",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dólar estadounidense",
+ "symbol": "$"
+ },
+ "FJD": {
+ "name": "dólar fiyiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dólar guyanés",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dólar hongkonés",
+ "symbol": "HKD"
+ },
+ "JMD": {
+ "name": "dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dólar namibio",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dólar neozelandés",
+ "symbol": "NZD"
+ },
+ "SBD": {
+ "name": "dólar salomonense",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "dólar singapurense",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dólar surinamés",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "dólar zimbabuense",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo de Cabo Verde",
+ "symbol": "CVE"
+ },
+ "PLN": {
+ "name": "esloti",
+ "symbol": "PLN"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "EUR"
+ },
+ "AWG": {
+ "name": "florín arubeño",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "florín de las Antillas Neerlandesas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "forinto",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franco burundés",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franco CFA BCEAO",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franco CFA BEAC",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "franco comorense",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franco congoleño",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franco ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franco suizo",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "franco yibutiano",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "gourde haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "grivna",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "guaraní paraguayo",
+ "symbol": "PYG"
+ },
+ "BTN": {
+ "name": "gultrum",
+ "symbol": "BTN"
+ },
+ "MMK": {
+ "name": "kiat",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "kina",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip",
+ "symbol": "LAK"
+ },
+ "MWK": {
+ "name": "kuacha malauí",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kuacha zambiano",
+ "symbol": "ZMK"
+ },
+ "AOA": {
+ "name": "kuanza",
+ "symbol": "AOA"
+ },
+ "HRK": {
+ "name": "kuna",
+ "symbol": "HRK"
+ },
+ "GEL": {
+ "name": "lari",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondureño",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leona",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumano",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "leva",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "libra de las Islas Malvinas",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "libra de Santa Elena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "libra egipcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "libra esterlina",
+ "symbol": "GBP"
+ },
+ "GIP": {
+ "name": "libra gibraltareña",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "libra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "libra sursudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti lesothense",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerí",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turcomano",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marco convertible de Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa",
+ "symbol": "ERN"
+ },
+ "TWD": {
+ "name": "nuevo dólar taiwanés",
+ "symbol": "TWD"
+ },
+ "ILS": {
+ "name": "nuevo sheqel israelí",
+ "symbol": "ILS"
+ },
+ "PEN": {
+ "name": "nuevo sol peruano",
+ "symbol": "PEN"
+ },
+ "TOP": {
+ "name": "paanga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubano convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexicano",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso uruguayo",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalteco",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasileño",
+ "symbol": "BRL"
+ },
+ "QAR": {
+ "name": "rial catarí",
+ "symbol": "QAR"
+ },
+ "IRR": {
+ "name": "rial iraní",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omaní",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saudí",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yemení",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringit",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rublo bielorruso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublo ruso",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiya",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "rupia esrilanquesa",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia india",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "rupia indonesia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalí",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistaní",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "rupia seychellense",
+ "symbol": "SCR"
+ },
+ "KGS": {
+ "name": "som",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tayiko",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazako",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "uguiya",
+ "symbol": "MRO"
+ },
+ "VUV": {
+ "name": "vatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won norcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won surcoreano",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "yuan",
+ "symbol": "CNY"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/es-GT.json b/library/intl/resources/currency/es-GT.json
new file mode 100644
index 000000000..c7c365d46
--- /dev/null
+++ b/library/intl/resources/currency/es-GT.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariari",
+ "symbol": "MGA"
+ },
+ "PAB": {
+ "name": "balboa panameño",
+ "symbol": "PAB"
+ },
+ "THB": {
+ "name": "bat",
+ "symbol": "THB"
+ },
+ "ETB": {
+ "name": "bir",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar venezolano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "chelín keniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "chelín somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "chelín tanzano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "chelín ugandés",
+ "symbol": "UGX"
+ },
+ "CRC": {
+ "name": "colón costarricense",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadoreño",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba nicaragüense",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "corona checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreiní",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquí",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwaití",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "dinar macedonio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "dinar serbio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunecino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dírham de los Emiratos Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dírham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dólar australiano",
+ "symbol": "AUD"
+ },
+ "BSD": {
+ "name": "dólar bahameño",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dólar beliceño",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "dólar bruneano",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "dólar canadiense",
+ "symbol": "CAD"
+ },
+ "BMD": {
+ "name": "dólar de Bermudas",
+ "symbol": "BMD"
+ },
+ "KYD": {
+ "name": "dólar de las Islas Caimán",
+ "symbol": "KYD"
+ },
+ "TTD": {
+ "name": "dólar de Trinidad y Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dólar del Caribe Oriental",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dólar estadounidense",
+ "symbol": "USD"
+ },
+ "FJD": {
+ "name": "dólar fiyiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dólar guyanés",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dólar hongkonés",
+ "symbol": "HKD"
+ },
+ "JMD": {
+ "name": "dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dólar namibio",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dólar neozelandés",
+ "symbol": "NZD"
+ },
+ "SBD": {
+ "name": "dólar salomonense",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "dólar singapurense",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dólar surinamés",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "dólar zimbabuense",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo de Cabo Verde",
+ "symbol": "CVE"
+ },
+ "PLN": {
+ "name": "esloti",
+ "symbol": "PLN"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "EUR"
+ },
+ "AWG": {
+ "name": "florín arubeño",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "florín de las Antillas Neerlandesas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "forinto",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franco burundés",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franco CFA BCEAO",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franco CFA BEAC",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "franco comorense",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franco congoleño",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franco ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franco suizo",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "franco yibutiano",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "gourde haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "grivna",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "guaraní paraguayo",
+ "symbol": "PYG"
+ },
+ "BTN": {
+ "name": "gultrum",
+ "symbol": "BTN"
+ },
+ "MMK": {
+ "name": "kiat",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "kina",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip",
+ "symbol": "LAK"
+ },
+ "MWK": {
+ "name": "kuacha malauí",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kuacha zambiano",
+ "symbol": "ZMK"
+ },
+ "AOA": {
+ "name": "kuanza",
+ "symbol": "AOA"
+ },
+ "HRK": {
+ "name": "kuna",
+ "symbol": "HRK"
+ },
+ "GEL": {
+ "name": "lari",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondureño",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leona",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumano",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "leva",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "libra de las Islas Malvinas",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "libra de Santa Elena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "libra egipcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "libra esterlina",
+ "symbol": "GBP"
+ },
+ "GIP": {
+ "name": "libra gibraltareña",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "libra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "libra sursudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti lesothense",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerí",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turcomano",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marco convertible de Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa",
+ "symbol": "ERN"
+ },
+ "TWD": {
+ "name": "nuevo dólar taiwanés",
+ "symbol": "TWD"
+ },
+ "ILS": {
+ "name": "nuevo sheqel israelí",
+ "symbol": "ILS"
+ },
+ "PEN": {
+ "name": "nuevo sol peruano",
+ "symbol": "PEN"
+ },
+ "TOP": {
+ "name": "paanga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubano convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexicano",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso uruguayo",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalteco",
+ "symbol": "Q"
+ },
+ "ZAR": {
+ "name": "rand",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasileño",
+ "symbol": "BRL"
+ },
+ "QAR": {
+ "name": "rial catarí",
+ "symbol": "QAR"
+ },
+ "IRR": {
+ "name": "rial iraní",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omaní",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saudí",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yemení",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringit",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rublo bielorruso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublo ruso",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiya",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "rupia esrilanquesa",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia india",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "rupia indonesia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalí",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistaní",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "rupia seychellense",
+ "symbol": "SCR"
+ },
+ "KGS": {
+ "name": "som",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tayiko",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazako",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "uguiya",
+ "symbol": "MRO"
+ },
+ "VUV": {
+ "name": "vatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won norcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won surcoreano",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "yuan",
+ "symbol": "CNY"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/es-HN.json b/library/intl/resources/currency/es-HN.json
new file mode 100644
index 000000000..23b5c1963
--- /dev/null
+++ b/library/intl/resources/currency/es-HN.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariari",
+ "symbol": "MGA"
+ },
+ "PAB": {
+ "name": "balboa panameño",
+ "symbol": "PAB"
+ },
+ "THB": {
+ "name": "bat",
+ "symbol": "THB"
+ },
+ "ETB": {
+ "name": "bir",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar venezolano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "chelín keniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "chelín somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "chelín tanzano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "chelín ugandés",
+ "symbol": "UGX"
+ },
+ "CRC": {
+ "name": "colón costarricense",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadoreño",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba nicaragüense",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "corona checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreiní",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquí",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwaití",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "dinar macedonio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "dinar serbio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunecino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dírham de los Emiratos Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dírham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dólar australiano",
+ "symbol": "AUD"
+ },
+ "BSD": {
+ "name": "dólar bahameño",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dólar beliceño",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "dólar bruneano",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "dólar canadiense",
+ "symbol": "CAD"
+ },
+ "BMD": {
+ "name": "dólar de Bermudas",
+ "symbol": "BMD"
+ },
+ "KYD": {
+ "name": "dólar de las Islas Caimán",
+ "symbol": "KYD"
+ },
+ "TTD": {
+ "name": "dólar de Trinidad y Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dólar del Caribe Oriental",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dólar estadounidense",
+ "symbol": "USD"
+ },
+ "FJD": {
+ "name": "dólar fiyiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dólar guyanés",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dólar hongkonés",
+ "symbol": "HKD"
+ },
+ "JMD": {
+ "name": "dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dólar namibio",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dólar neozelandés",
+ "symbol": "NZD"
+ },
+ "SBD": {
+ "name": "dólar salomonense",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "dólar singapurense",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dólar surinamés",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "dólar zimbabuense",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo de Cabo Verde",
+ "symbol": "CVE"
+ },
+ "PLN": {
+ "name": "esloti",
+ "symbol": "PLN"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "EUR"
+ },
+ "AWG": {
+ "name": "florín arubeño",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "florín de las Antillas Neerlandesas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "forinto",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franco burundés",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franco CFA BCEAO",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franco CFA BEAC",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "franco comorense",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franco congoleño",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franco ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franco suizo",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "franco yibutiano",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "gourde haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "grivna",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "guaraní paraguayo",
+ "symbol": "PYG"
+ },
+ "BTN": {
+ "name": "gultrum",
+ "symbol": "BTN"
+ },
+ "MMK": {
+ "name": "kiat",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "kina",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip",
+ "symbol": "LAK"
+ },
+ "MWK": {
+ "name": "kuacha malauí",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kuacha zambiano",
+ "symbol": "ZMK"
+ },
+ "AOA": {
+ "name": "kuanza",
+ "symbol": "AOA"
+ },
+ "HRK": {
+ "name": "kuna",
+ "symbol": "HRK"
+ },
+ "GEL": {
+ "name": "lari",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondureño",
+ "symbol": "L"
+ },
+ "SLL": {
+ "name": "leona",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumano",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "leva",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "libra de las Islas Malvinas",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "libra de Santa Elena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "libra egipcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "libra esterlina",
+ "symbol": "GBP"
+ },
+ "GIP": {
+ "name": "libra gibraltareña",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "libra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "libra sursudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti lesothense",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerí",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turcomano",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marco convertible de Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa",
+ "symbol": "ERN"
+ },
+ "TWD": {
+ "name": "nuevo dólar taiwanés",
+ "symbol": "TWD"
+ },
+ "ILS": {
+ "name": "nuevo sheqel israelí",
+ "symbol": "ILS"
+ },
+ "PEN": {
+ "name": "nuevo sol peruano",
+ "symbol": "PEN"
+ },
+ "TOP": {
+ "name": "paanga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubano convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexicano",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso uruguayo",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalteco",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasileño",
+ "symbol": "BRL"
+ },
+ "QAR": {
+ "name": "rial catarí",
+ "symbol": "QAR"
+ },
+ "IRR": {
+ "name": "rial iraní",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omaní",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saudí",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yemení",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringit",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rublo bielorruso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublo ruso",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiya",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "rupia esrilanquesa",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia india",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "rupia indonesia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalí",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistaní",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "rupia seychellense",
+ "symbol": "SCR"
+ },
+ "KGS": {
+ "name": "som",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tayiko",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazako",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "uguiya",
+ "symbol": "MRO"
+ },
+ "VUV": {
+ "name": "vatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won norcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won surcoreano",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "yuan",
+ "symbol": "CNY"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/es-MX.json b/library/intl/resources/currency/es-MX.json
new file mode 100644
index 000000000..bccac0880
--- /dev/null
+++ b/library/intl/resources/currency/es-MX.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani afgano",
+ "symbol": "Af"
+ },
+ "MGA": {
+ "name": "ariary malgache",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "baht tailandés",
+ "symbol": "THB"
+ },
+ "PAB": {
+ "name": "balboa panameño",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "birr etíope",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar venezolano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi ghanés",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "chelín keniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "chelín somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "chelín tanzano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "chelín ugandés",
+ "symbol": "UGX"
+ },
+ "CRC": {
+ "name": "colón costarricense",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadoreño",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba nicaragüense",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "corona checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi gambiano",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreiní",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquí",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwaití",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "dinar macedonio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "dinar serbio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunecino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dírham de los Emiratos Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dírham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra de Santo Tomé y Príncipe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dólar australiano",
+ "symbol": "AU$"
+ },
+ "BSD": {
+ "name": "dólar bahameño",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dólar beliceño",
+ "symbol": "BZD"
+ },
+ "CAD": {
+ "name": "dólar canadiense",
+ "symbol": "CAD"
+ },
+ "BMD": {
+ "name": "dólar de Bermudas",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "dólar de Brunéi",
+ "symbol": "BND"
+ },
+ "HKD": {
+ "name": "dólar de Hong Kong",
+ "symbol": "HKD"
+ },
+ "KYD": {
+ "name": "dólar de las Islas Caimán",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "dólar de las Islas Salomón",
+ "symbol": "SBD"
+ },
+ "TTD": {
+ "name": "dólar de Trinidad y Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dólar del Caribe Oriental",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dólar estadounidense",
+ "symbol": "USD"
+ },
+ "FJD": {
+ "name": "dólar fiyiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dólar guyanés",
+ "symbol": "GYD"
+ },
+ "JMD": {
+ "name": "dólar jamaiquino",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dólar namibio",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dólar neozelandés",
+ "symbol": "NZD"
+ },
+ "SGD": {
+ "name": "dólar singapurense",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dólar surinamés",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "dólar zimbabuense",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong vietnamita",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram armenio",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo de Cabo Verde",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "EUR"
+ },
+ "AWG": {
+ "name": "florín arubeño",
+ "symbol": "Afl."
+ },
+ "ANG": {
+ "name": "florín de las Antillas Neerlandesas",
+ "symbol": "Naf"
+ },
+ "HUF": {
+ "name": "florín húngaro",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franco burundés",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franco CFA BCEAO",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franco CFA BEAC",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "franco CFP",
+ "symbol": "XPF"
+ },
+ "KMF": {
+ "name": "franco comorense",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franco congoleño",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franco ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franco suizo",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "franco yibutiano",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "gourde haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "grivna ucraniana",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "guaraní paraguayo",
+ "symbol": "PYG"
+ },
+ "PGK": {
+ "name": "kina de Papúa Nueva Guinea",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip laosiano",
+ "symbol": "LAK"
+ },
+ "HRK": {
+ "name": "kuna croata",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "kwacha malauí",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kwacha zambiano",
+ "symbol": "ZMK"
+ },
+ "AOA": {
+ "name": "kwanza angoleño",
+ "symbol": "Kz"
+ },
+ "MMK": {
+ "name": "kyat de Myanmar",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "lari georgiano",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek albanés",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondureño",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leone de Sierra Leona",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumano",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "lev búlgaro",
+ "symbol": "BGN"
+ },
+ "SHP": {
+ "name": "libra de Santa Elena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "libra egipcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "libra esterlina británica",
+ "symbol": "GBP"
+ },
+ "GIP": {
+ "name": "libra gibraltareña",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "libra libanesa",
+ "symbol": "LBP"
+ },
+ "FKP": {
+ "name": "libra malvinense",
+ "symbol": "FKP"
+ },
+ "SYP": {
+ "name": "libra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "libra sursudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "lilangeni suazi",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litas lituano",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti lesothense",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerí",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turkmeno",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marco convertible de Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical mozambiqueño",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira nigeriano",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa eritreo",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "ngultrum butanés",
+ "symbol": "BTN"
+ },
+ "TWD": {
+ "name": "nuevo dólar taiwanés",
+ "symbol": "TWD"
+ },
+ "ILS": {
+ "name": "nuevo shéquel israelí",
+ "symbol": "ILS"
+ },
+ "PEN": {
+ "name": "nuevo sol peruano",
+ "symbol": "PEN"
+ },
+ "MRO": {
+ "name": "ouguiya mauritano",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "paʻanga tongano",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca de Macao",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentino",
+ "symbol": "$a"
+ },
+ "CLP": {
+ "name": "peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubano convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexicano",
+ "symbol": "$"
+ },
+ "UYU": {
+ "name": "peso uruguayo",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula botsuano",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalteco",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand sudafricano",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasileño",
+ "symbol": "BRL"
+ },
+ "IRR": {
+ "name": "rial iraní",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omaní",
+ "symbol": "OMR"
+ },
+ "YER": {
+ "name": "rial yemení",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel camboyano",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringgit malayo",
+ "symbol": "MYR"
+ },
+ "QAR": {
+ "name": "riyal de Qatar",
+ "symbol": "QAR"
+ },
+ "SAR": {
+ "name": "riyal saudí",
+ "symbol": "SAR"
+ },
+ "BYR": {
+ "name": "rublo bielorruso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublo ruso",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiyaa de Maldivas",
+ "symbol": "MVR"
+ },
+ "SCR": {
+ "name": "rupia de Seychelles",
+ "symbol": "SCR"
+ },
+ "LKR": {
+ "name": "rupia de Sri Lanka",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia india",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "rupia indonesia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalí",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistaní",
+ "symbol": "PKR"
+ },
+ "KGS": {
+ "name": "som kirguís",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "som uzbeko",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "somoni tayiko",
+ "symbol": "TJS"
+ },
+ "BDT": {
+ "name": "taka de Bangladesh",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala samoano",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazajo",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik mongol",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "vatu vanuatuense",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won norcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won surcoreano",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen japonés",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "yuan chino",
+ "symbol": "CNÂ¥"
+ },
+ "PLN": {
+ "name": "zloty polaco",
+ "symbol": "PLN"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/es-NI.json b/library/intl/resources/currency/es-NI.json
new file mode 100644
index 000000000..03f0380c1
--- /dev/null
+++ b/library/intl/resources/currency/es-NI.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariari",
+ "symbol": "MGA"
+ },
+ "PAB": {
+ "name": "balboa panameño",
+ "symbol": "PAB"
+ },
+ "THB": {
+ "name": "bat",
+ "symbol": "THB"
+ },
+ "ETB": {
+ "name": "bir",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar venezolano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "chelín keniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "chelín somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "chelín tanzano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "chelín ugandés",
+ "symbol": "UGX"
+ },
+ "CRC": {
+ "name": "colón costarricense",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadoreño",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba nicaragüense",
+ "symbol": "C$"
+ },
+ "CZK": {
+ "name": "corona checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreiní",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquí",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwaití",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "dinar macedonio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "dinar serbio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunecino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dírham de los Emiratos Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dírham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dólar australiano",
+ "symbol": "AUD"
+ },
+ "BSD": {
+ "name": "dólar bahameño",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dólar beliceño",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "dólar bruneano",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "dólar canadiense",
+ "symbol": "CAD"
+ },
+ "BMD": {
+ "name": "dólar de Bermudas",
+ "symbol": "BMD"
+ },
+ "KYD": {
+ "name": "dólar de las Islas Caimán",
+ "symbol": "KYD"
+ },
+ "TTD": {
+ "name": "dólar de Trinidad y Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dólar del Caribe Oriental",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dólar estadounidense",
+ "symbol": "USD"
+ },
+ "FJD": {
+ "name": "dólar fiyiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dólar guyanés",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dólar hongkonés",
+ "symbol": "HKD"
+ },
+ "JMD": {
+ "name": "dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dólar namibio",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dólar neozelandés",
+ "symbol": "NZD"
+ },
+ "SBD": {
+ "name": "dólar salomonense",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "dólar singapurense",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dólar surinamés",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "dólar zimbabuense",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo de Cabo Verde",
+ "symbol": "CVE"
+ },
+ "PLN": {
+ "name": "esloti",
+ "symbol": "PLN"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "EUR"
+ },
+ "AWG": {
+ "name": "florín arubeño",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "florín de las Antillas Neerlandesas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "forinto",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franco burundés",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franco CFA BCEAO",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franco CFA BEAC",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "franco comorense",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franco congoleño",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franco ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franco suizo",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "franco yibutiano",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "gourde haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "grivna",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "guaraní paraguayo",
+ "symbol": "PYG"
+ },
+ "BTN": {
+ "name": "gultrum",
+ "symbol": "BTN"
+ },
+ "MMK": {
+ "name": "kiat",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "kina",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip",
+ "symbol": "LAK"
+ },
+ "MWK": {
+ "name": "kuacha malauí",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kuacha zambiano",
+ "symbol": "ZMK"
+ },
+ "AOA": {
+ "name": "kuanza",
+ "symbol": "AOA"
+ },
+ "HRK": {
+ "name": "kuna",
+ "symbol": "HRK"
+ },
+ "GEL": {
+ "name": "lari",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondureño",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leona",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumano",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "leva",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "libra de las Islas Malvinas",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "libra de Santa Elena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "libra egipcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "libra esterlina",
+ "symbol": "GBP"
+ },
+ "GIP": {
+ "name": "libra gibraltareña",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "libra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "libra sursudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti lesothense",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerí",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turcomano",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marco convertible de Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa",
+ "symbol": "ERN"
+ },
+ "TWD": {
+ "name": "nuevo dólar taiwanés",
+ "symbol": "TWD"
+ },
+ "ILS": {
+ "name": "nuevo sheqel israelí",
+ "symbol": "ILS"
+ },
+ "PEN": {
+ "name": "nuevo sol peruano",
+ "symbol": "PEN"
+ },
+ "TOP": {
+ "name": "paanga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubano convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexicano",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso uruguayo",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalteco",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasileño",
+ "symbol": "BRL"
+ },
+ "QAR": {
+ "name": "rial catarí",
+ "symbol": "QAR"
+ },
+ "IRR": {
+ "name": "rial iraní",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omaní",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saudí",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yemení",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringit",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rublo bielorruso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublo ruso",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiya",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "rupia esrilanquesa",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia india",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "rupia indonesia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalí",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistaní",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "rupia seychellense",
+ "symbol": "SCR"
+ },
+ "KGS": {
+ "name": "som",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tayiko",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazako",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "uguiya",
+ "symbol": "MRO"
+ },
+ "VUV": {
+ "name": "vatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won norcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won surcoreano",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "yuan",
+ "symbol": "CNY"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/es-PA.json b/library/intl/resources/currency/es-PA.json
new file mode 100644
index 000000000..4722f6a4f
--- /dev/null
+++ b/library/intl/resources/currency/es-PA.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariari",
+ "symbol": "MGA"
+ },
+ "PAB": {
+ "name": "balboa panameño",
+ "symbol": "B\/."
+ },
+ "THB": {
+ "name": "bat",
+ "symbol": "THB"
+ },
+ "ETB": {
+ "name": "bir",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar venezolano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "chelín keniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "chelín somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "chelín tanzano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "chelín ugandés",
+ "symbol": "UGX"
+ },
+ "CRC": {
+ "name": "colón costarricense",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadoreño",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba nicaragüense",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "corona checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreiní",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquí",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwaití",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "dinar macedonio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "dinar serbio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunecino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dírham de los Emiratos Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dírham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dólar australiano",
+ "symbol": "AUD"
+ },
+ "BSD": {
+ "name": "dólar bahameño",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dólar beliceño",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "dólar bruneano",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "dólar canadiense",
+ "symbol": "CAD"
+ },
+ "BMD": {
+ "name": "dólar de Bermudas",
+ "symbol": "BMD"
+ },
+ "KYD": {
+ "name": "dólar de las Islas Caimán",
+ "symbol": "KYD"
+ },
+ "TTD": {
+ "name": "dólar de Trinidad y Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dólar del Caribe Oriental",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dólar estadounidense",
+ "symbol": "USD"
+ },
+ "FJD": {
+ "name": "dólar fiyiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dólar guyanés",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dólar hongkonés",
+ "symbol": "HKD"
+ },
+ "JMD": {
+ "name": "dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dólar namibio",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dólar neozelandés",
+ "symbol": "NZD"
+ },
+ "SBD": {
+ "name": "dólar salomonense",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "dólar singapurense",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dólar surinamés",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "dólar zimbabuense",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo de Cabo Verde",
+ "symbol": "CVE"
+ },
+ "PLN": {
+ "name": "esloti",
+ "symbol": "PLN"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "EUR"
+ },
+ "AWG": {
+ "name": "florín arubeño",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "florín de las Antillas Neerlandesas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "forinto",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franco burundés",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franco CFA BCEAO",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franco CFA BEAC",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "franco comorense",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franco congoleño",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franco ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franco suizo",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "franco yibutiano",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "gourde haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "grivna",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "guaraní paraguayo",
+ "symbol": "PYG"
+ },
+ "BTN": {
+ "name": "gultrum",
+ "symbol": "BTN"
+ },
+ "MMK": {
+ "name": "kiat",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "kina",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip",
+ "symbol": "LAK"
+ },
+ "MWK": {
+ "name": "kuacha malauí",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kuacha zambiano",
+ "symbol": "ZMK"
+ },
+ "AOA": {
+ "name": "kuanza",
+ "symbol": "AOA"
+ },
+ "HRK": {
+ "name": "kuna",
+ "symbol": "HRK"
+ },
+ "GEL": {
+ "name": "lari",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondureño",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leona",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumano",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "leva",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "libra de las Islas Malvinas",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "libra de Santa Elena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "libra egipcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "libra esterlina",
+ "symbol": "GBP"
+ },
+ "GIP": {
+ "name": "libra gibraltareña",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "libra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "libra sursudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti lesothense",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerí",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turcomano",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marco convertible de Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa",
+ "symbol": "ERN"
+ },
+ "TWD": {
+ "name": "nuevo dólar taiwanés",
+ "symbol": "TWD"
+ },
+ "ILS": {
+ "name": "nuevo sheqel israelí",
+ "symbol": "ILS"
+ },
+ "PEN": {
+ "name": "nuevo sol peruano",
+ "symbol": "PEN"
+ },
+ "TOP": {
+ "name": "paanga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubano convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexicano",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso uruguayo",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalteco",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasileño",
+ "symbol": "BRL"
+ },
+ "QAR": {
+ "name": "rial catarí",
+ "symbol": "QAR"
+ },
+ "IRR": {
+ "name": "rial iraní",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omaní",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saudí",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yemení",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringit",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rublo bielorruso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublo ruso",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiya",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "rupia esrilanquesa",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia india",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "rupia indonesia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalí",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistaní",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "rupia seychellense",
+ "symbol": "SCR"
+ },
+ "KGS": {
+ "name": "som",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tayiko",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazako",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "uguiya",
+ "symbol": "MRO"
+ },
+ "VUV": {
+ "name": "vatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won norcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won surcoreano",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "yuan",
+ "symbol": "CNY"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/es-PE.json b/library/intl/resources/currency/es-PE.json
new file mode 100644
index 000000000..649ceafdd
--- /dev/null
+++ b/library/intl/resources/currency/es-PE.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariari",
+ "symbol": "MGA"
+ },
+ "PAB": {
+ "name": "balboa panameño",
+ "symbol": "PAB"
+ },
+ "THB": {
+ "name": "bat",
+ "symbol": "THB"
+ },
+ "ETB": {
+ "name": "bir",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar venezolano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "chelín keniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "chelín somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "chelín tanzano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "chelín ugandés",
+ "symbol": "UGX"
+ },
+ "CRC": {
+ "name": "colón costarricense",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadoreño",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba nicaragüense",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "corona checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreiní",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquí",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwaití",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "dinar macedonio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "dinar serbio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunecino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dírham de los Emiratos Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dírham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dólar australiano",
+ "symbol": "AUD"
+ },
+ "BSD": {
+ "name": "dólar bahameño",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dólar beliceño",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "dólar bruneano",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "dólar canadiense",
+ "symbol": "CAD"
+ },
+ "BMD": {
+ "name": "dólar de Bermudas",
+ "symbol": "BMD"
+ },
+ "KYD": {
+ "name": "dólar de las Islas Caimán",
+ "symbol": "KYD"
+ },
+ "TTD": {
+ "name": "dólar de Trinidad y Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dólar del Caribe Oriental",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dólar estadounidense",
+ "symbol": "USD"
+ },
+ "FJD": {
+ "name": "dólar fiyiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dólar guyanés",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dólar hongkonés",
+ "symbol": "HKD"
+ },
+ "JMD": {
+ "name": "dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dólar namibio",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dólar neozelandés",
+ "symbol": "NZD"
+ },
+ "SBD": {
+ "name": "dólar salomonense",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "dólar singapurense",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dólar surinamés",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "dólar zimbabuense",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo de Cabo Verde",
+ "symbol": "CVE"
+ },
+ "PLN": {
+ "name": "esloti",
+ "symbol": "PLN"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "EUR"
+ },
+ "AWG": {
+ "name": "florín arubeño",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "florín de las Antillas Neerlandesas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "forinto",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franco burundés",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franco CFA BCEAO",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franco CFA BEAC",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "franco comorense",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franco congoleño",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franco ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franco suizo",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "franco yibutiano",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "gourde haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "grivna",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "guaraní paraguayo",
+ "symbol": "PYG"
+ },
+ "BTN": {
+ "name": "gultrum",
+ "symbol": "BTN"
+ },
+ "MMK": {
+ "name": "kiat",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "kina",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip",
+ "symbol": "LAK"
+ },
+ "MWK": {
+ "name": "kuacha malauí",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kuacha zambiano",
+ "symbol": "ZMK"
+ },
+ "AOA": {
+ "name": "kuanza",
+ "symbol": "AOA"
+ },
+ "HRK": {
+ "name": "kuna",
+ "symbol": "HRK"
+ },
+ "GEL": {
+ "name": "lari",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondureño",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leona",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumano",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "leva",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "libra de las Islas Malvinas",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "libra de Santa Elena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "libra egipcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "libra esterlina",
+ "symbol": "GBP"
+ },
+ "GIP": {
+ "name": "libra gibraltareña",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "libra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "libra sursudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti lesothense",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerí",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turcomano",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marco convertible de Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa",
+ "symbol": "ERN"
+ },
+ "TWD": {
+ "name": "nuevo dólar taiwanés",
+ "symbol": "TWD"
+ },
+ "ILS": {
+ "name": "nuevo sheqel israelí",
+ "symbol": "ILS"
+ },
+ "PEN": {
+ "name": "nuevo sol peruano",
+ "symbol": "S\/."
+ },
+ "TOP": {
+ "name": "paanga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubano convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexicano",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso uruguayo",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalteco",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasileño",
+ "symbol": "BRL"
+ },
+ "QAR": {
+ "name": "rial catarí",
+ "symbol": "QAR"
+ },
+ "IRR": {
+ "name": "rial iraní",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omaní",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saudí",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yemení",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringit",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rublo bielorruso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublo ruso",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiya",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "rupia esrilanquesa",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia india",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "rupia indonesia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalí",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistaní",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "rupia seychellense",
+ "symbol": "SCR"
+ },
+ "KGS": {
+ "name": "som",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tayiko",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazako",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "uguiya",
+ "symbol": "MRO"
+ },
+ "VUV": {
+ "name": "vatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won norcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won surcoreano",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "yuan",
+ "symbol": "CNY"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/es-PR.json b/library/intl/resources/currency/es-PR.json
new file mode 100644
index 000000000..a179e61e0
--- /dev/null
+++ b/library/intl/resources/currency/es-PR.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariari",
+ "symbol": "MGA"
+ },
+ "PAB": {
+ "name": "balboa panameño",
+ "symbol": "PAB"
+ },
+ "THB": {
+ "name": "bat",
+ "symbol": "THB"
+ },
+ "ETB": {
+ "name": "bir",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar venezolano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "chelín keniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "chelín somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "chelín tanzano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "chelín ugandés",
+ "symbol": "UGX"
+ },
+ "CRC": {
+ "name": "colón costarricense",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadoreño",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba nicaragüense",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "corona checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreiní",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquí",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwaití",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "dinar macedonio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "dinar serbio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunecino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dírham de los Emiratos Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dírham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dólar australiano",
+ "symbol": "AUD"
+ },
+ "BSD": {
+ "name": "dólar bahameño",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dólar beliceño",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "dólar bruneano",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "dólar canadiense",
+ "symbol": "CAD"
+ },
+ "BMD": {
+ "name": "dólar de Bermudas",
+ "symbol": "BMD"
+ },
+ "KYD": {
+ "name": "dólar de las Islas Caimán",
+ "symbol": "KYD"
+ },
+ "TTD": {
+ "name": "dólar de Trinidad y Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dólar del Caribe Oriental",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dólar estadounidense",
+ "symbol": "$"
+ },
+ "FJD": {
+ "name": "dólar fiyiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dólar guyanés",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dólar hongkonés",
+ "symbol": "HKD"
+ },
+ "JMD": {
+ "name": "dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dólar namibio",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dólar neozelandés",
+ "symbol": "NZD"
+ },
+ "SBD": {
+ "name": "dólar salomonense",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "dólar singapurense",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dólar surinamés",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "dólar zimbabuense",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo de Cabo Verde",
+ "symbol": "CVE"
+ },
+ "PLN": {
+ "name": "esloti",
+ "symbol": "PLN"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "EUR"
+ },
+ "AWG": {
+ "name": "florín arubeño",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "florín de las Antillas Neerlandesas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "forinto",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franco burundés",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franco CFA BCEAO",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franco CFA BEAC",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "franco comorense",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franco congoleño",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franco ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franco suizo",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "franco yibutiano",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "gourde haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "grivna",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "guaraní paraguayo",
+ "symbol": "PYG"
+ },
+ "BTN": {
+ "name": "gultrum",
+ "symbol": "BTN"
+ },
+ "MMK": {
+ "name": "kiat",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "kina",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip",
+ "symbol": "LAK"
+ },
+ "MWK": {
+ "name": "kuacha malauí",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kuacha zambiano",
+ "symbol": "ZMK"
+ },
+ "AOA": {
+ "name": "kuanza",
+ "symbol": "AOA"
+ },
+ "HRK": {
+ "name": "kuna",
+ "symbol": "HRK"
+ },
+ "GEL": {
+ "name": "lari",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondureño",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leona",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumano",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "leva",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "libra de las Islas Malvinas",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "libra de Santa Elena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "libra egipcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "libra esterlina",
+ "symbol": "GBP"
+ },
+ "GIP": {
+ "name": "libra gibraltareña",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "libra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "libra sursudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti lesothense",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerí",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turcomano",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marco convertible de Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa",
+ "symbol": "ERN"
+ },
+ "TWD": {
+ "name": "nuevo dólar taiwanés",
+ "symbol": "TWD"
+ },
+ "ILS": {
+ "name": "nuevo sheqel israelí",
+ "symbol": "ILS"
+ },
+ "PEN": {
+ "name": "nuevo sol peruano",
+ "symbol": "PEN"
+ },
+ "TOP": {
+ "name": "paanga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubano convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexicano",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso uruguayo",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalteco",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasileño",
+ "symbol": "BRL"
+ },
+ "QAR": {
+ "name": "rial catarí",
+ "symbol": "QAR"
+ },
+ "IRR": {
+ "name": "rial iraní",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omaní",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saudí",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yemení",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringit",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rublo bielorruso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublo ruso",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiya",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "rupia esrilanquesa",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia india",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "rupia indonesia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalí",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistaní",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "rupia seychellense",
+ "symbol": "SCR"
+ },
+ "KGS": {
+ "name": "som",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tayiko",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazako",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "uguiya",
+ "symbol": "MRO"
+ },
+ "VUV": {
+ "name": "vatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won norcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won surcoreano",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "yuan",
+ "symbol": "CNY"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/es-PY.json b/library/intl/resources/currency/es-PY.json
new file mode 100644
index 000000000..77d31f30e
--- /dev/null
+++ b/library/intl/resources/currency/es-PY.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariari",
+ "symbol": "MGA"
+ },
+ "PAB": {
+ "name": "balboa panameño",
+ "symbol": "PAB"
+ },
+ "THB": {
+ "name": "bat",
+ "symbol": "THB"
+ },
+ "ETB": {
+ "name": "bir",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar venezolano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "chelín keniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "chelín somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "chelín tanzano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "chelín ugandés",
+ "symbol": "UGX"
+ },
+ "CRC": {
+ "name": "colón costarricense",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadoreño",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba nicaragüense",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "corona checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreiní",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquí",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwaití",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "dinar macedonio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "dinar serbio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunecino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dírham de los Emiratos Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dírham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dólar australiano",
+ "symbol": "AUD"
+ },
+ "BSD": {
+ "name": "dólar bahameño",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dólar beliceño",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "dólar bruneano",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "dólar canadiense",
+ "symbol": "CAD"
+ },
+ "BMD": {
+ "name": "dólar de Bermudas",
+ "symbol": "BMD"
+ },
+ "KYD": {
+ "name": "dólar de las Islas Caimán",
+ "symbol": "KYD"
+ },
+ "TTD": {
+ "name": "dólar de Trinidad y Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dólar del Caribe Oriental",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dólar estadounidense",
+ "symbol": "USD"
+ },
+ "FJD": {
+ "name": "dólar fiyiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dólar guyanés",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dólar hongkonés",
+ "symbol": "HKD"
+ },
+ "JMD": {
+ "name": "dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dólar namibio",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dólar neozelandés",
+ "symbol": "NZD"
+ },
+ "SBD": {
+ "name": "dólar salomonense",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "dólar singapurense",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dólar surinamés",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "dólar zimbabuense",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo de Cabo Verde",
+ "symbol": "CVE"
+ },
+ "PLN": {
+ "name": "esloti",
+ "symbol": "PLN"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "EUR"
+ },
+ "AWG": {
+ "name": "florín arubeño",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "florín de las Antillas Neerlandesas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "forinto",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franco burundés",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franco CFA BCEAO",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franco CFA BEAC",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "franco comorense",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franco congoleño",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franco ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franco suizo",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "franco yibutiano",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "gourde haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "grivna",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "guaraní paraguayo",
+ "symbol": "₲"
+ },
+ "BTN": {
+ "name": "gultrum",
+ "symbol": "BTN"
+ },
+ "MMK": {
+ "name": "kiat",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "kina",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip",
+ "symbol": "LAK"
+ },
+ "MWK": {
+ "name": "kuacha malauí",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kuacha zambiano",
+ "symbol": "ZMK"
+ },
+ "AOA": {
+ "name": "kuanza",
+ "symbol": "AOA"
+ },
+ "HRK": {
+ "name": "kuna",
+ "symbol": "HRK"
+ },
+ "GEL": {
+ "name": "lari",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondureño",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leona",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumano",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "leva",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "libra de las Islas Malvinas",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "libra de Santa Elena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "libra egipcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "libra esterlina",
+ "symbol": "GBP"
+ },
+ "GIP": {
+ "name": "libra gibraltareña",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "libra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "libra sursudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti lesothense",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerí",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turcomano",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marco convertible de Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa",
+ "symbol": "ERN"
+ },
+ "TWD": {
+ "name": "nuevo dólar taiwanés",
+ "symbol": "TWD"
+ },
+ "ILS": {
+ "name": "nuevo sheqel israelí",
+ "symbol": "ILS"
+ },
+ "PEN": {
+ "name": "nuevo sol peruano",
+ "symbol": "PEN"
+ },
+ "TOP": {
+ "name": "paanga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubano convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexicano",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso uruguayo",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalteco",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasileño",
+ "symbol": "BRL"
+ },
+ "QAR": {
+ "name": "rial catarí",
+ "symbol": "QAR"
+ },
+ "IRR": {
+ "name": "rial iraní",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omaní",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saudí",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yemení",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringit",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rublo bielorruso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublo ruso",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiya",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "rupia esrilanquesa",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia india",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "rupia indonesia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalí",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistaní",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "rupia seychellense",
+ "symbol": "SCR"
+ },
+ "KGS": {
+ "name": "som",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tayiko",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazako",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "uguiya",
+ "symbol": "MRO"
+ },
+ "VUV": {
+ "name": "vatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won norcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won surcoreano",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "yuan",
+ "symbol": "CNY"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/es-SV.json b/library/intl/resources/currency/es-SV.json
new file mode 100644
index 000000000..a179e61e0
--- /dev/null
+++ b/library/intl/resources/currency/es-SV.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariari",
+ "symbol": "MGA"
+ },
+ "PAB": {
+ "name": "balboa panameño",
+ "symbol": "PAB"
+ },
+ "THB": {
+ "name": "bat",
+ "symbol": "THB"
+ },
+ "ETB": {
+ "name": "bir",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar venezolano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "chelín keniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "chelín somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "chelín tanzano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "chelín ugandés",
+ "symbol": "UGX"
+ },
+ "CRC": {
+ "name": "colón costarricense",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadoreño",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba nicaragüense",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "corona checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreiní",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquí",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwaití",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "dinar macedonio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "dinar serbio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunecino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dírham de los Emiratos Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dírham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dólar australiano",
+ "symbol": "AUD"
+ },
+ "BSD": {
+ "name": "dólar bahameño",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dólar beliceño",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "dólar bruneano",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "dólar canadiense",
+ "symbol": "CAD"
+ },
+ "BMD": {
+ "name": "dólar de Bermudas",
+ "symbol": "BMD"
+ },
+ "KYD": {
+ "name": "dólar de las Islas Caimán",
+ "symbol": "KYD"
+ },
+ "TTD": {
+ "name": "dólar de Trinidad y Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dólar del Caribe Oriental",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dólar estadounidense",
+ "symbol": "$"
+ },
+ "FJD": {
+ "name": "dólar fiyiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dólar guyanés",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dólar hongkonés",
+ "symbol": "HKD"
+ },
+ "JMD": {
+ "name": "dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dólar namibio",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dólar neozelandés",
+ "symbol": "NZD"
+ },
+ "SBD": {
+ "name": "dólar salomonense",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "dólar singapurense",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dólar surinamés",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "dólar zimbabuense",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo de Cabo Verde",
+ "symbol": "CVE"
+ },
+ "PLN": {
+ "name": "esloti",
+ "symbol": "PLN"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "EUR"
+ },
+ "AWG": {
+ "name": "florín arubeño",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "florín de las Antillas Neerlandesas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "forinto",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franco burundés",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franco CFA BCEAO",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franco CFA BEAC",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "franco comorense",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franco congoleño",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franco ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franco suizo",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "franco yibutiano",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "gourde haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "grivna",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "guaraní paraguayo",
+ "symbol": "PYG"
+ },
+ "BTN": {
+ "name": "gultrum",
+ "symbol": "BTN"
+ },
+ "MMK": {
+ "name": "kiat",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "kina",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip",
+ "symbol": "LAK"
+ },
+ "MWK": {
+ "name": "kuacha malauí",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kuacha zambiano",
+ "symbol": "ZMK"
+ },
+ "AOA": {
+ "name": "kuanza",
+ "symbol": "AOA"
+ },
+ "HRK": {
+ "name": "kuna",
+ "symbol": "HRK"
+ },
+ "GEL": {
+ "name": "lari",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondureño",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leona",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumano",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "leva",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "libra de las Islas Malvinas",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "libra de Santa Elena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "libra egipcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "libra esterlina",
+ "symbol": "GBP"
+ },
+ "GIP": {
+ "name": "libra gibraltareña",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "libra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "libra sursudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti lesothense",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerí",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turcomano",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marco convertible de Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa",
+ "symbol": "ERN"
+ },
+ "TWD": {
+ "name": "nuevo dólar taiwanés",
+ "symbol": "TWD"
+ },
+ "ILS": {
+ "name": "nuevo sheqel israelí",
+ "symbol": "ILS"
+ },
+ "PEN": {
+ "name": "nuevo sol peruano",
+ "symbol": "PEN"
+ },
+ "TOP": {
+ "name": "paanga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubano convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexicano",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso uruguayo",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalteco",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasileño",
+ "symbol": "BRL"
+ },
+ "QAR": {
+ "name": "rial catarí",
+ "symbol": "QAR"
+ },
+ "IRR": {
+ "name": "rial iraní",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omaní",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saudí",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yemení",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringit",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rublo bielorruso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublo ruso",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiya",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "rupia esrilanquesa",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia india",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "rupia indonesia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalí",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistaní",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "rupia seychellense",
+ "symbol": "SCR"
+ },
+ "KGS": {
+ "name": "som",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tayiko",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazako",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "uguiya",
+ "symbol": "MRO"
+ },
+ "VUV": {
+ "name": "vatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won norcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won surcoreano",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "yuan",
+ "symbol": "CNY"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/es-US.json b/library/intl/resources/currency/es-US.json
new file mode 100644
index 000000000..946b66bba
--- /dev/null
+++ b/library/intl/resources/currency/es-US.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariari",
+ "symbol": "MGA"
+ },
+ "PAB": {
+ "name": "balboa panameño",
+ "symbol": "PAB"
+ },
+ "THB": {
+ "name": "bat",
+ "symbol": "THB"
+ },
+ "ETB": {
+ "name": "bir",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar venezolano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "chelín keniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "chelín somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "chelín tanzano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "chelín ugandés",
+ "symbol": "UGX"
+ },
+ "CRC": {
+ "name": "colón costarricense",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadoreño",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba nicaragüense",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "corona checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreiní",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquí",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwaití",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "dinar macedonio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "dinar serbio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunecino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dírham de los Emiratos Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dírham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dólar australiano",
+ "symbol": "AUD"
+ },
+ "BSD": {
+ "name": "dólar bahameño",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dólar beliceño",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "dólar bruneano",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "dólar canadiense",
+ "symbol": "CAD"
+ },
+ "BMD": {
+ "name": "dólar de Bermudas",
+ "symbol": "BMD"
+ },
+ "KYD": {
+ "name": "dólar de las Islas Caimán",
+ "symbol": "KYD"
+ },
+ "TTD": {
+ "name": "dólar de Trinidad y Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dólar del Caribe Oriental",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dólar estadounidense",
+ "symbol": "$"
+ },
+ "FJD": {
+ "name": "dólar fiyiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dólar guyanés",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dólar hongkonés",
+ "symbol": "HKD"
+ },
+ "JMD": {
+ "name": "dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dólar namibio",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dólar neozelandés",
+ "symbol": "NZD"
+ },
+ "SBD": {
+ "name": "dólar salomonense",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "dólar singapurense",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dólar surinamés",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "dólar zimbabuense",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo de Cabo Verde",
+ "symbol": "CVE"
+ },
+ "PLN": {
+ "name": "esloti",
+ "symbol": "PLN"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "EUR"
+ },
+ "AWG": {
+ "name": "florín arubeño",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "florín de las Antillas Neerlandesas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "forinto",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franco burundés",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franco CFA BCEAO",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franco CFA BEAC",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "franco comorense",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franco congoleño",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franco ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franco suizo",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "franco yibutiano",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "gourde haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "grivna",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "guaraní paraguayo",
+ "symbol": "PYG"
+ },
+ "BTN": {
+ "name": "gultrum",
+ "symbol": "BTN"
+ },
+ "MMK": {
+ "name": "kiat",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "kina",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip",
+ "symbol": "LAK"
+ },
+ "MWK": {
+ "name": "kuacha malauí",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kuacha zambiano",
+ "symbol": "ZMK"
+ },
+ "AOA": {
+ "name": "kuanza",
+ "symbol": "AOA"
+ },
+ "HRK": {
+ "name": "kuna",
+ "symbol": "HRK"
+ },
+ "GEL": {
+ "name": "lari",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondureño",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leona",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumano",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "leva",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "libra de las Islas Malvinas",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "libra de Santa Elena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "libra egipcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "libra esterlina",
+ "symbol": "GBP"
+ },
+ "GIP": {
+ "name": "libra gibraltareña",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "libra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "libra sursudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti lesothense",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerí",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turcomano",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marco convertible de Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa",
+ "symbol": "ERN"
+ },
+ "TWD": {
+ "name": "nuevo dólar taiwanés",
+ "symbol": "TWD"
+ },
+ "ILS": {
+ "name": "nuevo sheqel israelí",
+ "symbol": "ILS"
+ },
+ "PEN": {
+ "name": "nuevo sol peruano",
+ "symbol": "PEN"
+ },
+ "TOP": {
+ "name": "paanga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubano convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexicano",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso uruguayo",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalteco",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasileño",
+ "symbol": "BRL"
+ },
+ "QAR": {
+ "name": "rial catarí",
+ "symbol": "QAR"
+ },
+ "IRR": {
+ "name": "rial iraní",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omaní",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saudí",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yemení",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringit",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rublo bielorruso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublo ruso",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiya",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "rupia esrilanquesa",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia india",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "rupia indonesia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalí",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistaní",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "rupia seychellense",
+ "symbol": "SCR"
+ },
+ "KGS": {
+ "name": "som",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tayiko",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazako",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "uguiya",
+ "symbol": "MRO"
+ },
+ "VUV": {
+ "name": "vatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won norcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won surcoreano",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen",
+ "symbol": "Â¥"
+ },
+ "CNY": {
+ "name": "yuan",
+ "symbol": "CNY"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/es-UY.json b/library/intl/resources/currency/es-UY.json
new file mode 100644
index 000000000..848dfdeb0
--- /dev/null
+++ b/library/intl/resources/currency/es-UY.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariari",
+ "symbol": "MGA"
+ },
+ "PAB": {
+ "name": "balboa panameño",
+ "symbol": "PAB"
+ },
+ "THB": {
+ "name": "bat",
+ "symbol": "THB"
+ },
+ "ETB": {
+ "name": "bir",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar venezolano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "chelín keniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "chelín somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "chelín tanzano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "chelín ugandés",
+ "symbol": "UGX"
+ },
+ "CRC": {
+ "name": "colón costarricense",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadoreño",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba nicaragüense",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "corona checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreiní",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquí",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwaití",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "dinar macedonio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "dinar serbio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunecino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dírham de los Emiratos Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dírham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dólar australiano",
+ "symbol": "AUD"
+ },
+ "BSD": {
+ "name": "dólar bahameño",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dólar beliceño",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "dólar bruneano",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "dólar canadiense",
+ "symbol": "CAD"
+ },
+ "BMD": {
+ "name": "dólar de Bermudas",
+ "symbol": "BMD"
+ },
+ "KYD": {
+ "name": "dólar de las Islas Caimán",
+ "symbol": "KYD"
+ },
+ "TTD": {
+ "name": "dólar de Trinidad y Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dólar del Caribe Oriental",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dólar estadounidense",
+ "symbol": "US$"
+ },
+ "FJD": {
+ "name": "dólar fiyiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dólar guyanés",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dólar hongkonés",
+ "symbol": "HKD"
+ },
+ "JMD": {
+ "name": "dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dólar namibio",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dólar neozelandés",
+ "symbol": "NZD"
+ },
+ "SBD": {
+ "name": "dólar salomonense",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "dólar singapurense",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dólar surinamés",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "dólar zimbabuense",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo de Cabo Verde",
+ "symbol": "CVE"
+ },
+ "PLN": {
+ "name": "esloti",
+ "symbol": "PLN"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "EUR"
+ },
+ "AWG": {
+ "name": "florín arubeño",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "florín de las Antillas Neerlandesas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "forinto",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franco burundés",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franco CFA BCEAO",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franco CFA BEAC",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "franco comorense",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franco congoleño",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franco ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franco suizo",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "franco yibutiano",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "gourde haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "grivna",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "guaraní paraguayo",
+ "symbol": "PYG"
+ },
+ "BTN": {
+ "name": "gultrum",
+ "symbol": "BTN"
+ },
+ "MMK": {
+ "name": "kiat",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "kina",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip",
+ "symbol": "LAK"
+ },
+ "MWK": {
+ "name": "kuacha malauí",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kuacha zambiano",
+ "symbol": "ZMK"
+ },
+ "AOA": {
+ "name": "kuanza",
+ "symbol": "AOA"
+ },
+ "HRK": {
+ "name": "kuna",
+ "symbol": "HRK"
+ },
+ "GEL": {
+ "name": "lari",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondureño",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leona",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumano",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "leva",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "libra de las Islas Malvinas",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "libra de Santa Elena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "libra egipcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "libra esterlina",
+ "symbol": "GBP"
+ },
+ "GIP": {
+ "name": "libra gibraltareña",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "libra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "libra sursudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti lesothense",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerí",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turcomano",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marco convertible de Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa",
+ "symbol": "ERN"
+ },
+ "TWD": {
+ "name": "nuevo dólar taiwanés",
+ "symbol": "TWD"
+ },
+ "ILS": {
+ "name": "nuevo sheqel israelí",
+ "symbol": "ILS"
+ },
+ "PEN": {
+ "name": "nuevo sol peruano",
+ "symbol": "PEN"
+ },
+ "TOP": {
+ "name": "paanga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubano convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexicano",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso uruguayo",
+ "symbol": "$"
+ },
+ "BWP": {
+ "name": "pula",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalteco",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasileño",
+ "symbol": "BRL"
+ },
+ "QAR": {
+ "name": "rial catarí",
+ "symbol": "QAR"
+ },
+ "IRR": {
+ "name": "rial iraní",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omaní",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saudí",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yemení",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringit",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rublo bielorruso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublo ruso",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiya",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "rupia esrilanquesa",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia india",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "rupia indonesia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalí",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistaní",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "rupia seychellense",
+ "symbol": "SCR"
+ },
+ "KGS": {
+ "name": "som",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tayiko",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazako",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "uguiya",
+ "symbol": "MRO"
+ },
+ "VUV": {
+ "name": "vatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won norcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won surcoreano",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "yuan",
+ "symbol": "CNY"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/es-VE.json b/library/intl/resources/currency/es-VE.json
new file mode 100644
index 000000000..effb954e4
--- /dev/null
+++ b/library/intl/resources/currency/es-VE.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariari",
+ "symbol": "MGA"
+ },
+ "PAB": {
+ "name": "balboa panameño",
+ "symbol": "PAB"
+ },
+ "THB": {
+ "name": "bat",
+ "symbol": "THB"
+ },
+ "ETB": {
+ "name": "bir",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar venezolano",
+ "symbol": "Bs."
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "chelín keniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "chelín somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "chelín tanzano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "chelín ugandés",
+ "symbol": "UGX"
+ },
+ "CRC": {
+ "name": "colón costarricense",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadoreño",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba nicaragüense",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "corona checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreiní",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquí",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwaití",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "dinar macedonio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "dinar serbio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunecino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dírham de los Emiratos Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dírham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dólar australiano",
+ "symbol": "AUD"
+ },
+ "BSD": {
+ "name": "dólar bahameño",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dólar beliceño",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "dólar bruneano",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "dólar canadiense",
+ "symbol": "CAD"
+ },
+ "BMD": {
+ "name": "dólar de Bermudas",
+ "symbol": "BMD"
+ },
+ "KYD": {
+ "name": "dólar de las Islas Caimán",
+ "symbol": "KYD"
+ },
+ "TTD": {
+ "name": "dólar de Trinidad y Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dólar del Caribe Oriental",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dólar estadounidense",
+ "symbol": "USD"
+ },
+ "FJD": {
+ "name": "dólar fiyiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dólar guyanés",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dólar hongkonés",
+ "symbol": "HKD"
+ },
+ "JMD": {
+ "name": "dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dólar namibio",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dólar neozelandés",
+ "symbol": "NZD"
+ },
+ "SBD": {
+ "name": "dólar salomonense",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "dólar singapurense",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dólar surinamés",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "dólar zimbabuense",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo de Cabo Verde",
+ "symbol": "CVE"
+ },
+ "PLN": {
+ "name": "esloti",
+ "symbol": "PLN"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "EUR"
+ },
+ "AWG": {
+ "name": "florín arubeño",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "florín de las Antillas Neerlandesas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "forinto",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franco burundés",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franco CFA BCEAO",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franco CFA BEAC",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "franco comorense",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franco congoleño",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franco ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franco suizo",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "franco yibutiano",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "gourde haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "grivna",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "guaraní paraguayo",
+ "symbol": "PYG"
+ },
+ "BTN": {
+ "name": "gultrum",
+ "symbol": "BTN"
+ },
+ "MMK": {
+ "name": "kiat",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "kina",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip",
+ "symbol": "LAK"
+ },
+ "MWK": {
+ "name": "kuacha malauí",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kuacha zambiano",
+ "symbol": "ZMK"
+ },
+ "AOA": {
+ "name": "kuanza",
+ "symbol": "AOA"
+ },
+ "HRK": {
+ "name": "kuna",
+ "symbol": "HRK"
+ },
+ "GEL": {
+ "name": "lari",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondureño",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leona",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumano",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "leva",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "libra de las Islas Malvinas",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "libra de Santa Elena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "libra egipcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "libra esterlina",
+ "symbol": "GBP"
+ },
+ "GIP": {
+ "name": "libra gibraltareña",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "libra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "libra sursudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti lesothense",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerí",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turcomano",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marco convertible de Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa",
+ "symbol": "ERN"
+ },
+ "TWD": {
+ "name": "nuevo dólar taiwanés",
+ "symbol": "TWD"
+ },
+ "ILS": {
+ "name": "nuevo sheqel israelí",
+ "symbol": "ILS"
+ },
+ "PEN": {
+ "name": "nuevo sol peruano",
+ "symbol": "PEN"
+ },
+ "TOP": {
+ "name": "paanga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubano convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexicano",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso uruguayo",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalteco",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasileño",
+ "symbol": "BRL"
+ },
+ "QAR": {
+ "name": "rial catarí",
+ "symbol": "QAR"
+ },
+ "IRR": {
+ "name": "rial iraní",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omaní",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saudí",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yemení",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringit",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rublo bielorruso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublo ruso",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiya",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "rupia esrilanquesa",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia india",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "rupia indonesia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalí",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistaní",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "rupia seychellense",
+ "symbol": "SCR"
+ },
+ "KGS": {
+ "name": "som",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tayiko",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazako",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "uguiya",
+ "symbol": "MRO"
+ },
+ "VUV": {
+ "name": "vatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won norcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won surcoreano",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "yuan",
+ "symbol": "CNY"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/es.json b/library/intl/resources/currency/es.json
new file mode 100644
index 000000000..483f13004
--- /dev/null
+++ b/library/intl/resources/currency/es.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariari",
+ "symbol": "MGA"
+ },
+ "PAB": {
+ "name": "balboa panameño",
+ "symbol": "PAB"
+ },
+ "THB": {
+ "name": "bat",
+ "symbol": "฿"
+ },
+ "ETB": {
+ "name": "bir",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolívar venezolano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "chelín keniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "chelín somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "chelín tanzano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "chelín ugandés",
+ "symbol": "UGX"
+ },
+ "CRC": {
+ "name": "colón costarricense",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadoreño",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba nicaragüense",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "corona checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "corona danesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "corona islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "corona noruega",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corona sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreiní",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iraquí",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwaití",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "dinar macedonio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "dinar serbio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunecino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dírham de los Emiratos Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dírham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dólar australiano",
+ "symbol": "AUD"
+ },
+ "BND": {
+ "name": "dólar bruneano",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "dólar canadiense",
+ "symbol": "CA$"
+ },
+ "BBD": {
+ "name": "dólar de Barbados",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dólar de Belice",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "dólar de Bermudas",
+ "symbol": "BMD"
+ },
+ "HKD": {
+ "name": "dólar de Hong Kong",
+ "symbol": "HKD"
+ },
+ "JMD": {
+ "name": "dólar de Jamaica",
+ "symbol": "JMD"
+ },
+ "BSD": {
+ "name": "dólar de las Bahamas",
+ "symbol": "BSD"
+ },
+ "KYD": {
+ "name": "dólar de las Islas Caimán",
+ "symbol": "KYD"
+ },
+ "TTD": {
+ "name": "dólar de Trinidad y Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dólar del Caribe Oriental",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dólar estadounidense",
+ "symbol": "$"
+ },
+ "FJD": {
+ "name": "dólar fiyiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dólar guyanés",
+ "symbol": "GYD"
+ },
+ "LRD": {
+ "name": "dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dólar namibio",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dólar neozelandés",
+ "symbol": "NZD"
+ },
+ "SBD": {
+ "name": "dólar salomonense",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "dólar singapurense",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dólar surinamés",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "dólar zimbabuense",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "dram armenio",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo de Cabo Verde",
+ "symbol": "CVE"
+ },
+ "PLN": {
+ "name": "esloti",
+ "symbol": "PLN"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "AWG": {
+ "name": "florín de Aruba",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "florín de las Antillas Neerlandesas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "forinto",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franco burundés",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franco CFA BCEAO",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franco CFA BEAC",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "franco comorense",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franco congoleño",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franco ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franco suizo",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "franco yibutiano",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "gourde haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "grivna",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "guaraní paraguayo",
+ "symbol": "PYG"
+ },
+ "BTN": {
+ "name": "gultrum",
+ "symbol": "BTN"
+ },
+ "MMK": {
+ "name": "kiat",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "kina",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip",
+ "symbol": "LAK"
+ },
+ "MWK": {
+ "name": "kuacha malauí",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kuacha zambiano",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "kuanza",
+ "symbol": "AOA"
+ },
+ "HRK": {
+ "name": "kuna",
+ "symbol": "HRK"
+ },
+ "GEL": {
+ "name": "lari",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondureño",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leona",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumano",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "leva",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "libra de las Islas Malvinas",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "libra de Santa Elena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "libra egipcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "libra esterlina",
+ "symbol": "GBP"
+ },
+ "GIP": {
+ "name": "libra gibraltareña",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "libra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "libra sursudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti lesothense",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerí",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turcomano",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marco convertible de Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa eritreo",
+ "symbol": "ERN"
+ },
+ "TWD": {
+ "name": "nuevo dólar taiwanés",
+ "symbol": "TWD"
+ },
+ "ILS": {
+ "name": "nuevo séquel israelí",
+ "symbol": "ILS"
+ },
+ "PEN": {
+ "name": "nuevo sol peruano",
+ "symbol": "PEN"
+ },
+ "TOP": {
+ "name": "paanga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca de Macao",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubano convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexicano",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso uruguayo",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalteco",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasileño",
+ "symbol": "BRL"
+ },
+ "QAR": {
+ "name": "rial catarí",
+ "symbol": "QAR"
+ },
+ "IRR": {
+ "name": "rial iraní",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omaní",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saudí",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yemení",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringit",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rublo bielorruso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublo ruso",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiya",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "rupia de Sri Lanka",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupia india",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "rupia indonesia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalí",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistaní",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "rupia seychellense",
+ "symbol": "SCR"
+ },
+ "KGS": {
+ "name": "som",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tayiko",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tengue",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "uguiya",
+ "symbol": "MRO"
+ },
+ "VUV": {
+ "name": "vatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won norcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won surcoreano",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "yuan",
+ "symbol": "CNY"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/et.json b/library/intl/resources/currency/et.json
new file mode 100644
index 000000000..47df30013
--- /dev/null
+++ b/library/intl/resources/currency/et.json
@@ -0,0 +1,634 @@
+{
+ "XOF": {
+ "name": "Aafrika ühisfrank BCEAO",
+ "symbol": "CFA"
+ },
+ "AFN": {
+ "name": "Afganistani afgaani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albaania lekk",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Alžeeria dinaar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angola kvanza",
+ "symbol": "AOA"
+ },
+ "AED": {
+ "name": "Araabia Ãœhendemiraatide dirhem",
+ "symbol": "AED"
+ },
+ "ARS": {
+ "name": "Argentina peeso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armeenia dramm",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruba guilder",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "Aserbaidžaani manat",
+ "symbol": "AZN"
+ },
+ "AUD": {
+ "name": "Austraalia dollar",
+ "symbol": "AU$"
+ },
+ "BSD": {
+ "name": "Bahama dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahreini dinaar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadose dollar",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Belize dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermuda dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutani ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivia boliviaano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Hertsegoviina mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswana pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brasiilia reaal",
+ "symbol": "R$"
+ },
+ "BND": {
+ "name": "Brunei dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgaaria leev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundi frank",
+ "symbol": "BIF"
+ },
+ "KYD": {
+ "name": "Caymani saarte dollar",
+ "symbol": "KYD"
+ },
+ "XAF": {
+ "name": "CFA frank BEAC",
+ "symbol": "FCFA"
+ },
+ "CRC": {
+ "name": "Costa Rica colón",
+ "symbol": "CRC"
+ },
+ "DJF": {
+ "name": "Djibouti frank",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominikaani peeso",
+ "symbol": "DOP"
+ },
+ "EGP": {
+ "name": "Egiptuse nael",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrea nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Etioopia birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falklandi saarte nael",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fidži dollar",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "Filipiinide peeso",
+ "symbol": "PHP"
+ },
+ "GMD": {
+ "name": "Gambia dalasi",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "Ghana cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltari nael",
+ "symbol": "GIP"
+ },
+ "GEL": {
+ "name": "Gruusia lari",
+ "symbol": "GEL"
+ },
+ "GTQ": {
+ "name": "Guatemala ketsal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinea frank",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyana dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haiti gurd",
+ "symbol": "HTG"
+ },
+ "CNY": {
+ "name": "Hiina jüaan",
+ "symbol": "CNÂ¥"
+ },
+ "ANG": {
+ "name": "Hollandi Antillide kulden",
+ "symbol": "ANG"
+ },
+ "HNL": {
+ "name": "Hondurase lempiira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hongkongi dollar",
+ "symbol": "HK$"
+ },
+ "HRK": {
+ "name": "Horvaatia kuna",
+ "symbol": "HRK"
+ },
+ "XCD": {
+ "name": "Ida-Kariibi dollar",
+ "symbol": "EC$"
+ },
+ "ILS": {
+ "name": "Iisraeli uus seekel",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "India ruupia",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indoneesia ruupia",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "Iraagi dinaar",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "Iraani riaal",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "Islandi kroon",
+ "symbol": "ISK"
+ },
+ "JPY": {
+ "name": "Jaapani jeen",
+ "symbol": "Â¥"
+ },
+ "JMD": {
+ "name": "Jamaica dollar",
+ "symbol": "JMD"
+ },
+ "YER": {
+ "name": "Jeemeni riaal",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "Jordaania dinaar",
+ "symbol": "JOD"
+ },
+ "KHR": {
+ "name": "Kambodža riaal",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Kanada dollar",
+ "symbol": "CA$"
+ },
+ "KZT": {
+ "name": "Kasahstani tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenya Å¡illing",
+ "symbol": "KES"
+ },
+ "COP": {
+ "name": "Kolumbia peeso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Komooride frank",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Kongo frank",
+ "symbol": "CDF"
+ },
+ "CUC": {
+ "name": "Kuuba konverteeritav peeso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Kuuba peeso",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "Kuveidi dinaar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kõrgõzstani somm",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laose kiip",
+ "symbol": "LAK"
+ },
+ "LTL": {
+ "name": "Leedu litt",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Lesotho loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Libeeria dollar",
+ "symbol": "LRD"
+ },
+ "LBP": {
+ "name": "Liibanoni nael",
+ "symbol": "LBP"
+ },
+ "LYD": {
+ "name": "Liibüa dinaar",
+ "symbol": "LYD"
+ },
+ "ZAR": {
+ "name": "Lõuna-Aafrika rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "Lõuna-Korea vonn",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "Lõuna-Sudaani nael",
+ "symbol": "SSP"
+ },
+ "WST": {
+ "name": "Lääne-Samoa tala",
+ "symbol": "WST"
+ },
+ "MOP": {
+ "name": "Macao pataka",
+ "symbol": "MOP"
+ },
+ "MGA": {
+ "name": "Madagaskari ariary",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "Makedoonia denaar",
+ "symbol": "MKD"
+ },
+ "MYR": {
+ "name": "Malaisia ringgit",
+ "symbol": "MYR"
+ },
+ "MWK": {
+ "name": "Malawi kvatša",
+ "symbol": "MWK"
+ },
+ "MVR": {
+ "name": "Maldiivide ruupia",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "Maroko dirhem",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "Mauritaania ugia",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritiuse ruupia",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mehhiko peeso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldova leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongoolia tugrik",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "Mosambiigi metikal",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmari kjatt",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namiibia dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepali ruupia",
+ "symbol": "NPR"
+ },
+ "NIO": {
+ "name": "Nicaragua kuldkordoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigeeria naira",
+ "symbol": "NGN"
+ },
+ "NOK": {
+ "name": "Norra kroon",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omaani riaal",
+ "symbol": "OMR"
+ },
+ "PGK": {
+ "name": "Paapua Uus-Guinea kina",
+ "symbol": "PGK"
+ },
+ "PKR": {
+ "name": "Pakistani ruupia",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panama balboa",
+ "symbol": "PAB"
+ },
+ "PYG": {
+ "name": "Paraguai guaranii",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruu uus soll",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "Poola zlott",
+ "symbol": "PLN"
+ },
+ "XPF": {
+ "name": "Prantsuse Vaikse-Ookeani frank",
+ "symbol": "CFPF"
+ },
+ "KPW": {
+ "name": "Põhja-Korea vonn",
+ "symbol": "KPW"
+ },
+ "QAR": {
+ "name": "Quatari riaal",
+ "symbol": "QAR"
+ },
+ "CVE": {
+ "name": "Roheneemesaarte eskuudo",
+ "symbol": "CVE"
+ },
+ "SEK": {
+ "name": "Rootsi kroon",
+ "symbol": "SEK"
+ },
+ "RON": {
+ "name": "Rumeenia lei",
+ "symbol": "RON"
+ },
+ "RWF": {
+ "name": "Rwanda frank",
+ "symbol": "RWF"
+ },
+ "SBD": {
+ "name": "Saalomoni saarte dollar",
+ "symbol": "SBD"
+ },
+ "SHP": {
+ "name": "Saint Helena nael",
+ "symbol": "SHP"
+ },
+ "SVC": {
+ "name": "Salvadori koloon",
+ "symbol": "SVC"
+ },
+ "ZMW": {
+ "name": "Sambia kvatša",
+ "symbol": "ZMW"
+ },
+ "STD": {
+ "name": "São Tomé ja Príncipe dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi-Araabia riaal",
+ "symbol": "SAR"
+ },
+ "SCR": {
+ "name": "Seišelli saarte ruupia",
+ "symbol": "SCR"
+ },
+ "RSD": {
+ "name": "Serbia dinaar",
+ "symbol": "RSD"
+ },
+ "SLL": {
+ "name": "Sierra Leone leoone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapuri dollar",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "Somaalia Å¡illing",
+ "symbol": "SOS"
+ },
+ "LKR": {
+ "name": "Sri Lanka ruupia",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudaani nael",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinami dollar",
+ "symbol": "SRD"
+ },
+ "GBP": {
+ "name": "Suurbritannia naelsterling",
+ "symbol": "£"
+ },
+ "SZL": {
+ "name": "Svaasimaa lilangeni",
+ "symbol": "SZL"
+ },
+ "SYP": {
+ "name": "Süüria nael",
+ "symbol": "SYP"
+ },
+ "CHF": {
+ "name": "Å veitsi frank",
+ "symbol": "CHF"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "DKK": {
+ "name": "Taani kroon",
+ "symbol": "DKK"
+ },
+ "TJS": {
+ "name": "Tadžikistani somoni",
+ "symbol": "TJS"
+ },
+ "THB": {
+ "name": "Tai baat",
+ "symbol": "฿"
+ },
+ "TWD": {
+ "name": "Taiwani dollar",
+ "symbol": "NT$"
+ },
+ "TZS": {
+ "name": "Tansaania Å¡illing",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "Tonga pa’anga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidadi ja Tobago dollar",
+ "symbol": "TTD"
+ },
+ "CZK": {
+ "name": "TÅ¡ehhi kroon",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "TÅ¡iili peeso",
+ "symbol": "CLP"
+ },
+ "TND": {
+ "name": "Tuneesia dinaar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Türgi uus liir",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Türkmenistani manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Uganda Å¡illing",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukraina grivna",
+ "symbol": "UAH"
+ },
+ "HUF": {
+ "name": "Ungari forint",
+ "symbol": "HUF"
+ },
+ "UYU": {
+ "name": "Uruguai peeso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "USA dollar",
+ "symbol": "$"
+ },
+ "UZS": {
+ "name": "Usbekistani somm",
+ "symbol": "UZS"
+ },
+ "NZD": {
+ "name": "Uus-Meremaa dollar",
+ "symbol": "NZ$"
+ },
+ "BYR": {
+ "name": "Valgevene rubla",
+ "symbol": "BYR"
+ },
+ "VUV": {
+ "name": "Vanuatu vatu",
+ "symbol": "VUV"
+ },
+ "RUB": {
+ "name": "Venemaa rubla",
+ "symbol": "RUB"
+ },
+ "VEF": {
+ "name": "Venezuela bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnami dong",
+ "symbol": "â‚«"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/eu.json b/library/intl/resources/currency/eu.json
new file mode 100644
index 000000000..7a4af1c9a
--- /dev/null
+++ b/library/intl/resources/currency/eu.json
@@ -0,0 +1,634 @@
+{
+ "USD": {
+ "name": "AEBetako dolarra",
+ "symbol": "US$"
+ },
+ "AFN": {
+ "name": "Afganistango afghania",
+ "symbol": "AFN"
+ },
+ "XOF": {
+ "name": "Afrika ekialdeko frankoa BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Afrika erdialdeko frankoa BEAC",
+ "symbol": "FCFA"
+ },
+ "ALL": {
+ "name": "Albaniako leka",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algeriako dinarra",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolako kwanza",
+ "symbol": "AOA"
+ },
+ "AED": {
+ "name": "Arabiar Emirerri Batuetako dirhama",
+ "symbol": "AED"
+ },
+ "ARS": {
+ "name": "Argentinako pesoa",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armeniako drama",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Arubeko florina",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australiako dolarra",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "Azerbaijango manata",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahametako dolarra",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahraingo dinarra",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladesheko taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadosetako dolarra",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Belizeko dolarra",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudetako dolarra",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutango ngultruma",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "Bielorrusiako errubloa",
+ "symbol": "BYR"
+ },
+ "BOB": {
+ "name": "Boliviako bolivianoa",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovinako marko trukakorra",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Bosniako pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brasilgo erreala",
+ "symbol": "R$"
+ },
+ "BND": {
+ "name": "Bruneiko dolarra",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgariako leva",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundiko frankoa",
+ "symbol": "BIF"
+ },
+ "CVE": {
+ "name": "Cabo Verdeko ezkutua",
+ "symbol": "CVE"
+ },
+ "XPF": {
+ "name": "CFP frankoa",
+ "symbol": "CFPF"
+ },
+ "CRC": {
+ "name": "Costa Ricako colona",
+ "symbol": "CRC"
+ },
+ "DKK": {
+ "name": "Danimarkako koroa",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djibouteko frankoa",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominikar Errepublikako pesoa",
+ "symbol": "DOP"
+ },
+ "EGP": {
+ "name": "Egiptoko libera",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritreako nakfa",
+ "symbol": "ERN"
+ },
+ "RON": {
+ "name": "Errumaniako leua",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Errusiako errubloa",
+ "symbol": "RUB"
+ },
+ "ETB": {
+ "name": "Etiopiako birra",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euroa",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland uharteetako libera",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fijiko dolarra",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "Filipinetako pesoa",
+ "symbol": "PHP"
+ },
+ "GMD": {
+ "name": "Ganbiako dalasia",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgiako laria",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanako cedia",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltarreko libera",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "Gineako frankoa",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "Guatemalako quetzala",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "Guyanako dolarra",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitiko gourdea",
+ "symbol": "HTG"
+ },
+ "KRW": {
+ "name": "Hego Koreako wona",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "Hego Sudango libera",
+ "symbol": "SSP"
+ },
+ "ZAR": {
+ "name": "Hegoafrikako randa",
+ "symbol": "ZAR"
+ },
+ "ANG": {
+ "name": "Holandarren Antilletako guilderra",
+ "symbol": "ANG"
+ },
+ "HNL": {
+ "name": "Hondurasko lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kongeko dolarra",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "Hungariako florina",
+ "symbol": "HUF"
+ },
+ "INR": {
+ "name": "Indiako errupia",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesiako errupia",
+ "symbol": "IDR"
+ },
+ "KPW": {
+ "name": "Ipar Koreako wona",
+ "symbol": "KPW"
+ },
+ "IQD": {
+ "name": "Irakeko dinarra",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "Irango riala",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "Islandiako koroa",
+ "symbol": "ISK"
+ },
+ "ILS": {
+ "name": "Israeleko sheqel berria",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaikako dolarra",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japoniako yena",
+ "symbol": "JPÂ¥"
+ },
+ "JOD": {
+ "name": "Jordaniako dinarra",
+ "symbol": "JOD"
+ },
+ "KYD": {
+ "name": "Kaiman uharteetako dolarra",
+ "symbol": "KYD"
+ },
+ "CAD": {
+ "name": "Kanadako dolarra",
+ "symbol": "CA$"
+ },
+ "KHR": {
+ "name": "Kanbodiako riela",
+ "symbol": "KHR"
+ },
+ "XCD": {
+ "name": "Karibe ekialdeko dolarra",
+ "symbol": "EC$"
+ },
+ "KZT": {
+ "name": "Kazakhstango tengea",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyako txelina",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "Kirgizistango soma",
+ "symbol": "KGS"
+ },
+ "COP": {
+ "name": "Kolonbiako pesoa",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Komoreetako frankoa",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Kongoko frankoa",
+ "symbol": "CDF"
+ },
+ "HRK": {
+ "name": "Kroaziako kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Kubako peso trukakorra",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Kubako pesoa",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "Kuwaiteko dinarra",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "Laoseko kipa",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "Lesothoko lotia",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "Libanoko libera",
+ "symbol": "LBP"
+ },
+ "GBP": {
+ "name": "Libera esterlina",
+ "symbol": "£"
+ },
+ "LRD": {
+ "name": "Liberiako dolarra",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libiako dinarra",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lituaniako litasa",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanako pataca",
+ "symbol": "MOP"
+ },
+ "MGA": {
+ "name": "Madagaskarreko ariarya",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawiko kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysiako ringgita",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivetako rufiyaa",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "Marokoko dirhama",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "Mauritaniako ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Maurizio uharteetako errupia",
+ "symbol": "MUR"
+ },
+ "MKD": {
+ "name": "Mazedoniako denara",
+ "symbol": "MKD"
+ },
+ "MXN": {
+ "name": "Mexikoko pesoa",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldaviako leua",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongoliako tugrika",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "Mozambikeko metikala",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmarreko kyata",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibiako dolarra",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalgo errupia",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "Nigeriako naira",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "Nikaraguako cordoba",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "Norvegiako koroa",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omango riala",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistango errupia",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamako balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua Ginea Berriko kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguaiko guarania",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruko sol berria",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "Poloniako zlotya",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatarreko riala",
+ "symbol": "QAR"
+ },
+ "RWF": {
+ "name": "Ruandako frankoa",
+ "symbol": "RWF"
+ },
+ "SBD": {
+ "name": "Salomon uharteetako dolarra",
+ "symbol": "SBD"
+ },
+ "WST": {
+ "name": "Samoko tala",
+ "symbol": "WST"
+ },
+ "SHP": {
+ "name": "Santa Helenako libera",
+ "symbol": "SHP"
+ },
+ "STD": {
+ "name": "Sao Tomeko eta Principeko dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudiko riala",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbiako dinarra",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychelleetako errupia",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonako leona",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapurreko dolarra",
+ "symbol": "SGD"
+ },
+ "SYP": {
+ "name": "Siriako libera",
+ "symbol": "SYP"
+ },
+ "SOS": {
+ "name": "Somaliako txelina",
+ "symbol": "SOS"
+ },
+ "LKR": {
+ "name": "Sri Lankako errupia",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudango libera",
+ "symbol": "SDG"
+ },
+ "SEK": {
+ "name": "Suediako koroa",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Suitzako frankoa",
+ "symbol": "CHF"
+ },
+ "SRD": {
+ "name": "Surinameko dolarra",
+ "symbol": "SRD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SZL": {
+ "name": "Swaziko lilangenia",
+ "symbol": "SZL"
+ },
+ "TWD": {
+ "name": "Taiwango dolar berria",
+ "symbol": "NT$"
+ },
+ "TJS": {
+ "name": "Tajikistango somonia",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzaniako txelina",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thailandiako bahta",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongako Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidadeko eta Tobagoko dolarra",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisiako dinarra",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkiako lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistango manata",
+ "symbol": "TMT"
+ },
+ "CZK": {
+ "name": "Txekiar Errepublikako koroa",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "Txileko pesoa",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Txinako yuana",
+ "symbol": "CNÂ¥"
+ },
+ "UGX": {
+ "name": "Ugandako txelina",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainako hryvnia",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "Uruguaiko pesoa",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "Uzbekistango soma",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatuko vatua",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelako bolivarra",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnameko donga",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemengo riala",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambiako kwacha",
+ "symbol": "ZMW"
+ },
+ "NZD": {
+ "name": "Zeelanda Berriko dolarra",
+ "symbol": "NZ$"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ewo.json b/library/intl/resources/currency/ewo.json
new file mode 100644
index 000000000..8095a4ca9
--- /dev/null
+++ b/library/intl/resources/currency/ewo.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "MGA": {
+ "name": "Ariari yá Maləgás",
+ "symbol": "MGA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Bír yá Etsiópia",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasí yá Gámbía",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinár yá Alehérí",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinár yá BahÉ™rÉ›Ìn",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinár yá Libí",
+ "symbol": "LYD"
+ },
+ "TND": {
+ "name": "Dinár yá Tunisí",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirám yá Emirá Aráb Uní",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirám yá Maróg",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "DóbÉ™Ìra yá Saó Tomé ai PÉ™linÉ™sípe",
+ "symbol": "STD"
+ },
+ "USD": {
+ "name": "Dolár yá amÉ›ÌrÉ™kÉ™",
+ "symbol": "US$"
+ },
+ "CAD": {
+ "name": "Dolár yá Kanáda",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dolár yá Libéria",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Dolár yá Namibí",
+ "symbol": "NAD"
+ },
+ "AUD": {
+ "name": "Dolár yá Osətəralí",
+ "symbol": "A$"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "EsÉ™kúdo yá KápÉ™ÌvÉ›ÌrÉ™",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "əró",
+ "symbol": "€"
+ },
+ "XOF": {
+ "name": "Fəláŋ CFA (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Fəláŋ CFA (BEAC)",
+ "symbol": "FCFA"
+ },
+ "BIF": {
+ "name": "Fəláŋ yá Burundí",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Fəláŋ yá dzibutí",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Fəláŋ yá Komória",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Fəláŋ yá Kongo",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Fəláŋ yá Ruwandá",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Fəláŋ yá Suís",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "AOA": {
+ "name": "Kwánəza yá Angolá",
+ "symbol": "AOA"
+ },
+ "MWK": {
+ "name": "Kwatsa yá Malawí",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwatsa yá Zambí",
+ "symbol": "ZMW"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leóne yá Sierá-leónə",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni yá Swazí",
+ "symbol": "SZL"
+ },
+ "GBP": {
+ "name": "LívÉ™ÌlÉ™ SÉ™tÉ™rÉ™líŋ",
+ "symbol": "£"
+ },
+ "EGP": {
+ "name": "LívÉ™ÌlÉ™ yá EhíbÉ™tía",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "LívÉ™lÉ™ yá Ǹfúfúb ElÉ›Ìn",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Lívələ yá Sudán",
+ "symbol": "SDG"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Lotí yá Lesotó",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "ERN": {
+ "name": "Náfəka yá Eritelé",
+ "symbol": "ERN"
+ },
+ "NGN": {
+ "name": "Náíra yá Nihéria",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Púlá yá Botswána",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Ránədə yá Afiríka",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riál yá Arabí Saudí",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupí yá É›Ìndía",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupí yá Morís",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupí yá SÉ›sÉ›Ìl",
+ "symbol": "SCR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "Silíŋ yá Keniá",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Silíŋ yá Somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Silíŋ yá Tanazaní",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Silíŋ yá Ugandá (1966–1987)",
+ "symbol": "UGX"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ugiya yá Moritaní",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "JPY": {
+ "name": "YÉ›Ìn yá HapÉ”Ìn",
+ "symbol": "JPÂ¥"
+ },
+ "CNY": {
+ "name": "Yuán Renəminəbí yá Tsainís",
+ "symbol": "CNÂ¥"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/fa-AF.json b/library/intl/resources/currency/fa-AF.json
new file mode 100644
index 000000000..9cef5c90e
--- /dev/null
+++ b/library/intl/resources/currency/fa-AF.json
@@ -0,0 +1,634 @@
+{
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "MGA": {
+ "name": "آریاری مالاگاسی",
+ "symbol": "MGA"
+ },
+ "CVE": {
+ "name": "اسکودوی کیپ‌ورد",
+ "symbol": "CVE"
+ },
+ "AFN": {
+ "name": "اÙغانی اÙغانستان",
+ "symbol": "Ø‹"
+ },
+ "BTN": {
+ "name": "انگولتروم بوتان",
+ "symbol": "BTN"
+ },
+ "MRO": {
+ "name": "اوگوئیای موریتانی",
+ "symbol": "MRO"
+ },
+ "THB": {
+ "name": "بات تایلند",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "بالبوای پاناما",
+ "symbol": "PAB"
+ },
+ "VEF": {
+ "name": "بولیوار ونزوئلا",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "بولیویانوی بولیوی",
+ "symbol": "BOB"
+ },
+ "ETB": {
+ "name": "بیر اتیوپی",
+ "symbol": "ETB"
+ },
+ "TOP": {
+ "name": "پاآنگای تونگا",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "پاتاکای ماکائو",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "پزوی آرژانتین",
+ "symbol": "ARS"
+ },
+ "UYU": {
+ "name": "پزوی اوروگوئه",
+ "symbol": "UYU"
+ },
+ "CUC": {
+ "name": "پزوی تبدیل‌پذیر کوبا",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "پزوی جمهوری دومینیکن",
+ "symbol": "DOP"
+ },
+ "CLP": {
+ "name": "پزوی شیلی",
+ "symbol": "CLP"
+ },
+ "PHP": {
+ "name": "پزوی Ùیلیپین",
+ "symbol": "PHP"
+ },
+ "COP": {
+ "name": "پزوی کلمبیا",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "پزوی کوبا",
+ "symbol": "CUP"
+ },
+ "MXN": {
+ "name": "پزوی مکسیکو",
+ "symbol": "$MX"
+ },
+ "BWP": {
+ "name": "پولای بوتسوانا",
+ "symbol": "BWP"
+ },
+ "GBP": {
+ "name": "پوند بریتانیا",
+ "symbol": "£"
+ },
+ "GIP": {
+ "name": "پوند جبل‌الطارق",
+ "symbol": "GIP"
+ },
+ "FKP": {
+ "name": "پوند جزایر Ùالکلند",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "پوند سنت هلن",
+ "symbol": "SHP"
+ },
+ "SSP": {
+ "name": "پوند سودان جنوبی",
+ "symbol": "SSP"
+ },
+ "BDT": {
+ "name": "تاکای بنگلادش",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "تالای ساموا",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "تنگهٔ قزاقستان",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "توگریک مغولستان",
+ "symbol": "MNT"
+ },
+ "GMD": {
+ "name": "دالاسی گامبیا",
+ "symbol": "GMD"
+ },
+ "AUD": {
+ "name": "دالر آسترالیا",
+ "symbol": "A$"
+ },
+ "USD": {
+ "name": "دالر امریکا",
+ "symbol": "$"
+ },
+ "BND": {
+ "name": "دالر برونی",
+ "symbol": "BND"
+ },
+ "SGD": {
+ "name": "دالر سینگاپور",
+ "symbol": "SGD"
+ },
+ "CAD": {
+ "name": "دالر کانادا",
+ "symbol": "$CA"
+ },
+ "VND": {
+ "name": "دانگ ویتنام",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "درم ارمنستان",
+ "symbol": "AMD"
+ },
+ "AED": {
+ "name": "درهم امارات متحدهٔ عربی",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "درهم مراکش",
+ "symbol": "MAD"
+ },
+ "BBD": {
+ "name": "دلار باربادوس",
+ "symbol": "BBD"
+ },
+ "BSD": {
+ "name": "دلار باهاما",
+ "symbol": "BSD"
+ },
+ "BMD": {
+ "name": "دلار برمودا",
+ "symbol": "BMD"
+ },
+ "BZD": {
+ "name": "دلار بلیز",
+ "symbol": "BZD"
+ },
+ "TTD": {
+ "name": "دلار ترینیداد و توباگو",
+ "symbol": "TTD"
+ },
+ "JMD": {
+ "name": "دلار جامائیکا",
+ "symbol": "JMD"
+ },
+ "TWD": {
+ "name": "دلار جدید تایوان",
+ "symbol": "NT$"
+ },
+ "SBD": {
+ "name": "دلار جزایر سلیمان",
+ "symbol": "SBD"
+ },
+ "KYD": {
+ "name": "دلار جزایر Ú©Ùیمن",
+ "symbol": "KYD"
+ },
+ "NZD": {
+ "name": "دلار زلاند نو",
+ "symbol": "$NZ"
+ },
+ "ZWL": {
+ "name": "دلار زیمبابوه (۲۰۰۹)",
+ "symbol": "ZWL"
+ },
+ "SRD": {
+ "name": "دلار سورینام",
+ "symbol": "SRD"
+ },
+ "XCD": {
+ "name": "دلار شرق کارائیب",
+ "symbol": "$EC"
+ },
+ "FJD": {
+ "name": "دلار Ùیجی",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "دلار گویان",
+ "symbol": "GYD"
+ },
+ "LRD": {
+ "name": "دلار لیبریا",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "دلار نامیبیا",
+ "symbol": "NAD"
+ },
+ "HKD": {
+ "name": "دلار هنگ‌کنگ",
+ "symbol": "$HK"
+ },
+ "STD": {
+ "name": "دوبرای سائوتومه و پرنسیپ",
+ "symbol": "STD"
+ },
+ "JOD": {
+ "name": "دینار اردن",
+ "symbol": "JOD"
+ },
+ "DZD": {
+ "name": "دینار الجزایر",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "دینار بحرین",
+ "symbol": "BHD"
+ },
+ "TND": {
+ "name": "دینار تونس",
+ "symbol": "TND"
+ },
+ "RSD": {
+ "name": "دینار صربستان",
+ "symbol": "RSD"
+ },
+ "IQD": {
+ "name": "دینار عراق",
+ "symbol": "IQD"
+ },
+ "KWD": {
+ "name": "دینار کویت",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "دینار لیبی",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "دینار مقدونیه",
+ "symbol": "MKD"
+ },
+ "ZAR": {
+ "name": "راند اÙریقای جنوبی",
+ "symbol": "ZAR"
+ },
+ "RUB": {
+ "name": "روبل روسیه",
+ "symbol": "RUB"
+ },
+ "BYR": {
+ "name": "روبل روسیهٔ سÙید",
+ "symbol": "BYR"
+ },
+ "IDR": {
+ "name": "روپیهٔ اندونزی",
+ "symbol": "IDR"
+ },
+ "PKR": {
+ "name": "روپیهٔ پاکستان",
+ "symbol": "PKR"
+ },
+ "LKR": {
+ "name": "روپیهٔ سری‌لانکا",
+ "symbol": "LKR"
+ },
+ "SCR": {
+ "name": "روپیهٔ سیشل",
+ "symbol": "SCR"
+ },
+ "MVR": {
+ "name": "روپیهٔ مالدیو",
+ "symbol": "MVR"
+ },
+ "MUR": {
+ "name": "روپیهٔ موریس",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "روپیهٔ نپال",
+ "symbol": "NPR"
+ },
+ "INR": {
+ "name": "روپیهٔ هند",
+ "symbol": "₹"
+ },
+ "KHR": {
+ "name": "ری‌یل کامبوج",
+ "symbol": "KHR"
+ },
+ "IRR": {
+ "name": "ریال ایران",
+ "symbol": "ریال"
+ },
+ "BRL": {
+ "name": "رئال برزیل",
+ "symbol": "R$"
+ },
+ "SAR": {
+ "name": "ریال سعودی",
+ "symbol": "SAR"
+ },
+ "OMR": {
+ "name": "ریال عمان",
+ "symbol": "OMR"
+ },
+ "QAR": {
+ "name": "ریال قطر",
+ "symbol": "QAR"
+ },
+ "YER": {
+ "name": "ریال یمن",
+ "symbol": "YER"
+ },
+ "MYR": {
+ "name": "رینگیت مالزی",
+ "symbol": "MYR"
+ },
+ "PLN": {
+ "name": "زواتی لهستان",
+ "symbol": "PLN"
+ },
+ "TJS": {
+ "name": "سامانی تاجکستان",
+ "symbol": "TJS"
+ },
+ "GHS": {
+ "name": "سدی غنا",
+ "symbol": "GHS"
+ },
+ "UZS": {
+ "name": "سوم ازبکستان",
+ "symbol": "UZS"
+ },
+ "KGS": {
+ "name": "سوم قرقیزستان",
+ "symbol": "KGS"
+ },
+ "ILS": {
+ "name": "شقل جدید اسرائیل",
+ "symbol": "₪"
+ },
+ "UGX": {
+ "name": "شیلینگ اوگاندا",
+ "symbol": "UGX"
+ },
+ "TZS": {
+ "name": "شیلینگ تانزانیا",
+ "symbol": "TZS"
+ },
+ "SOS": {
+ "name": "شیلینگ سومالی",
+ "symbol": "SOS"
+ },
+ "KES": {
+ "name": "شیلینگ کنیا",
+ "symbol": "KES"
+ },
+ "XOF": {
+ "name": "Ùرانک CFA غرب Ø¢Ùریقا",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Ùرانک CFA مرکز Ø¢Ùریقا",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "Ùرانک CFP",
+ "symbol": "CFPF"
+ },
+ "BIF": {
+ "name": "Ùرانک بوروندی",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Ùرانک جیبوتی",
+ "symbol": "DJF"
+ },
+ "RWF": {
+ "name": "Ùرانک رواندا",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Ùرانک سویس",
+ "symbol": "CHF"
+ },
+ "CDF": {
+ "name": "Ùرانک Ú©Ù†Ú¯Ùˆ",
+ "symbol": "CDF"
+ },
+ "KMF": {
+ "name": "Ùرانک کومورو",
+ "symbol": "KMF"
+ },
+ "GNF": {
+ "name": "Ùرانک گینه",
+ "symbol": "GNF"
+ },
+ "AWG": {
+ "name": "Ùلورین آروبا",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "Ùورینت مجارستان",
+ "symbol": "HUF"
+ },
+ "GTQ": {
+ "name": "کتزال گواتمالا",
+ "symbol": "GTQ"
+ },
+ "DKK": {
+ "name": "کرون دنمارک",
+ "symbol": "DKK"
+ },
+ "SEK": {
+ "name": "کرون سویدن",
+ "symbol": "SEK"
+ },
+ "NOK": {
+ "name": "کرون ناروی",
+ "symbol": "NOK"
+ },
+ "ISK": {
+ "name": "کرونای ایسلند",
+ "symbol": "ISK"
+ },
+ "ZMW": {
+ "name": "کواچای زامبیا",
+ "symbol": "ZMW"
+ },
+ "MWK": {
+ "name": "کواچای مالاوی",
+ "symbol": "MWK"
+ },
+ "AOA": {
+ "name": "کوانزای آنگولا",
+ "symbol": "AOA"
+ },
+ "NIO": {
+ "name": "کوردوبای نیکاراگوئه",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "کورونای جمهوری چک",
+ "symbol": "CZK"
+ },
+ "CRC": {
+ "name": "کولون کاستاریکا",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "کونای کرواسی",
+ "symbol": "HRK"
+ },
+ "MMK": {
+ "name": "کیات میانمار",
+ "symbol": "MMK"
+ },
+ "LAK": {
+ "name": "کیپ لائوس",
+ "symbol": "LAK"
+ },
+ "PGK": {
+ "name": "کینای پاپوا گینهٔ نو",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "گوارانی پاراگوئه",
+ "symbol": "PYG"
+ },
+ "HTG": {
+ "name": "گورد هائیتی",
+ "symbol": "HTG"
+ },
+ "ANG": {
+ "name": "گیلدر آنتیل هلند",
+ "symbol": "ANG"
+ },
+ "GEL": {
+ "name": "لاری گرجستان",
+ "symbol": "GEL"
+ },
+ "BGN": {
+ "name": "ل٠بلغارستان",
+ "symbol": "BGN"
+ },
+ "ALL": {
+ "name": "لک آلبانی",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "لمپیرای هندوراس",
+ "symbol": "HNL"
+ },
+ "LSL": {
+ "name": "لوتی لسوتو",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "لیتاس لیتوانی",
+ "symbol": "LTL"
+ },
+ "TRY": {
+ "name": "لیرهٔ ترکیه",
+ "symbol": "TRY"
+ },
+ "SDG": {
+ "name": "لیرهٔ سودان",
+ "symbol": "SDG"
+ },
+ "SYP": {
+ "name": "لیرهٔ سوریه",
+ "symbol": "SYP"
+ },
+ "LBP": {
+ "name": "لیرهٔ لبنان",
+ "symbol": "LBP"
+ },
+ "EGP": {
+ "name": "لیرهٔ مصر",
+ "symbol": "EGP"
+ },
+ "SZL": {
+ "name": "لیلانگنی سوازیلند",
+ "symbol": "SZL"
+ },
+ "SLL": {
+ "name": "لئون سیرالئون",
+ "symbol": "SLL"
+ },
+ "RON": {
+ "name": "لئوی رومانی",
+ "symbol": "RON"
+ },
+ "MDL": {
+ "name": "لئوی مولداوی",
+ "symbol": "MDL"
+ },
+ "BAM": {
+ "name": "مارک تبدیل‌پذیر بوسنی و هرزگوین",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "متیکال موزامبیک",
+ "symbol": "MZN"
+ },
+ "TMT": {
+ "name": "منات ترکمنستان",
+ "symbol": "TMT"
+ },
+ "AZN": {
+ "name": "منات جمهوری آذربایجان",
+ "symbol": "AZN"
+ },
+ "ERN": {
+ "name": "ناکÙای اریتره",
+ "symbol": "ERN"
+ },
+ "NGN": {
+ "name": "نایرای نیجریه",
+ "symbol": "NGN"
+ },
+ "PEN": {
+ "name": "نوئووسول پرو",
+ "symbol": "PEN"
+ },
+ "UAH": {
+ "name": "هریونیای اوکراین",
+ "symbol": "UAH"
+ },
+ "VUV": {
+ "name": "واتوی وانوواتو",
+ "symbol": "VUV"
+ },
+ "KRW": {
+ "name": "وون کرهٔ جنوبی",
+ "symbol": "â‚©"
+ },
+ "KPW": {
+ "name": "وون کرهٔ شمالی",
+ "symbol": "KPW"
+ },
+ "JPY": {
+ "name": "ین جاپان",
+ "symbol": "Â¥"
+ },
+ "CNY": {
+ "name": "یوآن چین",
+ "symbol": "Â¥CN"
+ },
+ "EUR": {
+ "name": "یورو",
+ "symbol": "€"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/fa.json b/library/intl/resources/currency/fa.json
new file mode 100644
index 000000000..ec4a25fc1
--- /dev/null
+++ b/library/intl/resources/currency/fa.json
@@ -0,0 +1,634 @@
+{
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "MGA": {
+ "name": "آریاری مالاگاسی",
+ "symbol": "MGA"
+ },
+ "CVE": {
+ "name": "اسکودوی کیپ‌ورد",
+ "symbol": "CVE"
+ },
+ "AFN": {
+ "name": "اÙغانی اÙغانستان",
+ "symbol": "Ø‹"
+ },
+ "BTN": {
+ "name": "انگولتروم بوتان",
+ "symbol": "BTN"
+ },
+ "MRO": {
+ "name": "اوگوئیای موریتانی",
+ "symbol": "MRO"
+ },
+ "THB": {
+ "name": "بات تایلند",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "بالبوای پاناما",
+ "symbol": "PAB"
+ },
+ "VEF": {
+ "name": "بولیوار ونزوئلا",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "بولیویانوی بولیوی",
+ "symbol": "BOB"
+ },
+ "ETB": {
+ "name": "بیر اتیوپی",
+ "symbol": "ETB"
+ },
+ "TOP": {
+ "name": "پاآنگای تونگا",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "پاتاکای ماکائو",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "پزوی آرژانتین",
+ "symbol": "ARS"
+ },
+ "UYU": {
+ "name": "پزوی اوروگوئه",
+ "symbol": "UYU"
+ },
+ "CUC": {
+ "name": "پزوی تبدیل‌پذیر کوبا",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "پزوی جمهوری دومینیکن",
+ "symbol": "DOP"
+ },
+ "CLP": {
+ "name": "پزوی شیلی",
+ "symbol": "CLP"
+ },
+ "PHP": {
+ "name": "پزوی Ùیلیپین",
+ "symbol": "PHP"
+ },
+ "COP": {
+ "name": "پزوی کلمبیا",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "پزوی کوبا",
+ "symbol": "CUP"
+ },
+ "MXN": {
+ "name": "پزوی مکزیک",
+ "symbol": "$MX"
+ },
+ "BWP": {
+ "name": "پولای بوتسوانا",
+ "symbol": "BWP"
+ },
+ "GBP": {
+ "name": "پوند بریتانیا",
+ "symbol": "£"
+ },
+ "GIP": {
+ "name": "پوند جبل‌الطارق",
+ "symbol": "GIP"
+ },
+ "FKP": {
+ "name": "پوند جزایر Ùالکلند",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "پوند سنت هلن",
+ "symbol": "SHP"
+ },
+ "SSP": {
+ "name": "پوند سودان جنوبی",
+ "symbol": "SSP"
+ },
+ "BDT": {
+ "name": "تاکای بنگلادش",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "تالای ساموا",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "تنگهٔ قزاقستان",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "توگریک مغولستان",
+ "symbol": "MNT"
+ },
+ "GMD": {
+ "name": "دالاسی گامبیا",
+ "symbol": "GMD"
+ },
+ "VND": {
+ "name": "دانگ ویتنام",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "درم ارمنستان",
+ "symbol": "AMD"
+ },
+ "AED": {
+ "name": "درهم امارات متحدهٔ عربی",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "درهم مراکش",
+ "symbol": "MAD"
+ },
+ "AUD": {
+ "name": "دلار استرالیا",
+ "symbol": "A$"
+ },
+ "USD": {
+ "name": "دلار امریکا",
+ "symbol": "$"
+ },
+ "BBD": {
+ "name": "دلار باربادوس",
+ "symbol": "BBD"
+ },
+ "BSD": {
+ "name": "دلار باهاما",
+ "symbol": "BSD"
+ },
+ "BMD": {
+ "name": "دلار برمودا",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "دلار برونئی",
+ "symbol": "BND"
+ },
+ "BZD": {
+ "name": "دلار بلیز",
+ "symbol": "BZD"
+ },
+ "TTD": {
+ "name": "دلار ترینیداد و توباگو",
+ "symbol": "TTD"
+ },
+ "JMD": {
+ "name": "دلار جامائیکا",
+ "symbol": "JMD"
+ },
+ "TWD": {
+ "name": "دلار جدید تایوان",
+ "symbol": "NT$"
+ },
+ "SBD": {
+ "name": "دلار جزایر سلیمان",
+ "symbol": "SBD"
+ },
+ "KYD": {
+ "name": "دلار جزایر Ú©Ùیمن",
+ "symbol": "KYD"
+ },
+ "NZD": {
+ "name": "دلار زلاند نو",
+ "symbol": "$NZ"
+ },
+ "ZWL": {
+ "name": "دلار زیمبابوه (۲۰۰۹)",
+ "symbol": "ZWL"
+ },
+ "SGD": {
+ "name": "دلار سنگاپور",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "دلار سورینام",
+ "symbol": "SRD"
+ },
+ "XCD": {
+ "name": "دلار شرق کارائیب",
+ "symbol": "$EC"
+ },
+ "FJD": {
+ "name": "دلار Ùیجی",
+ "symbol": "FJD"
+ },
+ "CAD": {
+ "name": "دلار کانادا",
+ "symbol": "$CA"
+ },
+ "GYD": {
+ "name": "دلار گویان",
+ "symbol": "GYD"
+ },
+ "LRD": {
+ "name": "دلار لیبریا",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "دلار نامیبیا",
+ "symbol": "NAD"
+ },
+ "HKD": {
+ "name": "دلار هنگ‌کنگ",
+ "symbol": "$HK"
+ },
+ "STD": {
+ "name": "دوبرای سائوتومه و پرنسیپ",
+ "symbol": "STD"
+ },
+ "JOD": {
+ "name": "دینار اردن",
+ "symbol": "JOD"
+ },
+ "DZD": {
+ "name": "دینار الجزایر",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "دینار بحرین",
+ "symbol": "BHD"
+ },
+ "TND": {
+ "name": "دینار تونس",
+ "symbol": "TND"
+ },
+ "RSD": {
+ "name": "دینار صربستان",
+ "symbol": "RSD"
+ },
+ "IQD": {
+ "name": "دینار عراق",
+ "symbol": "IQD"
+ },
+ "KWD": {
+ "name": "دینار کویت",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "دینار لیبی",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "دینار مقدونیه",
+ "symbol": "MKD"
+ },
+ "ZAR": {
+ "name": "راند اÙریقای جنوبی",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "رئال برزیل",
+ "symbol": "R$"
+ },
+ "BYR": {
+ "name": "روبل بیلوروسی",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "روبل روسیه",
+ "symbol": "RUB"
+ },
+ "IDR": {
+ "name": "روپیهٔ اندونزی",
+ "symbol": "IDR"
+ },
+ "PKR": {
+ "name": "روپیهٔ پاکستان",
+ "symbol": "PKR"
+ },
+ "LKR": {
+ "name": "روپیهٔ سری‌لانکا",
+ "symbol": "LKR"
+ },
+ "SCR": {
+ "name": "روپیهٔ سیشل",
+ "symbol": "SCR"
+ },
+ "MVR": {
+ "name": "روپیهٔ مالدیو",
+ "symbol": "MVR"
+ },
+ "MUR": {
+ "name": "روپیهٔ موریس",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "روپیهٔ نپال",
+ "symbol": "NPR"
+ },
+ "INR": {
+ "name": "روپیهٔ هند",
+ "symbol": "₹"
+ },
+ "IRR": {
+ "name": "ریال ایران",
+ "symbol": "ریال"
+ },
+ "SAR": {
+ "name": "ریال سعودی",
+ "symbol": "SAR"
+ },
+ "OMR": {
+ "name": "ریال عمان",
+ "symbol": "OMR"
+ },
+ "QAR": {
+ "name": "ریال قطر",
+ "symbol": "QAR"
+ },
+ "YER": {
+ "name": "ریال یمن",
+ "symbol": "YER"
+ },
+ "MYR": {
+ "name": "رینگیت مالزی",
+ "symbol": "MYR"
+ },
+ "KHR": {
+ "name": "ری‌یل کامبوج",
+ "symbol": "KHR"
+ },
+ "PLN": {
+ "name": "زواتی لهستان",
+ "symbol": "PLN"
+ },
+ "TJS": {
+ "name": "سامانی تاجیکستان",
+ "symbol": "TJS"
+ },
+ "GHS": {
+ "name": "سدی غنا",
+ "symbol": "GHS"
+ },
+ "UZS": {
+ "name": "سوم ازبکستان",
+ "symbol": "UZS"
+ },
+ "KGS": {
+ "name": "سوم قرقیزستان",
+ "symbol": "KGS"
+ },
+ "ILS": {
+ "name": "شقل جدید اسرائیل",
+ "symbol": "₪"
+ },
+ "UGX": {
+ "name": "شیلینگ اوگاندا",
+ "symbol": "UGX"
+ },
+ "TZS": {
+ "name": "شیلینگ تانزانیا",
+ "symbol": "TZS"
+ },
+ "SOS": {
+ "name": "شیلینگ سومالی",
+ "symbol": "SOS"
+ },
+ "KES": {
+ "name": "شیلینگ کنیا",
+ "symbol": "KES"
+ },
+ "XOF": {
+ "name": "Ùرانک CFA غرب Ø¢Ùریقا",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Ùرانک CFA مرکز Ø¢Ùریقا",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "Ùرانک CFP",
+ "symbol": "CFPF"
+ },
+ "BIF": {
+ "name": "Ùرانک بوروندی",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Ùرانک جیبوتی",
+ "symbol": "DJF"
+ },
+ "RWF": {
+ "name": "Ùرانک رواندا",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Ùرانک سوئیس",
+ "symbol": "CHF"
+ },
+ "CDF": {
+ "name": "Ùرانک Ú©Ù†Ú¯Ùˆ",
+ "symbol": "CDF"
+ },
+ "KMF": {
+ "name": "Ùرانک کومورو",
+ "symbol": "KMF"
+ },
+ "GNF": {
+ "name": "Ùرانک گینه",
+ "symbol": "GNF"
+ },
+ "AWG": {
+ "name": "Ùلورین آروبا",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "Ùورینت مجارستان",
+ "symbol": "HUF"
+ },
+ "GTQ": {
+ "name": "کتزال گواتمالا",
+ "symbol": "GTQ"
+ },
+ "DKK": {
+ "name": "کرون دانمارک",
+ "symbol": "DKK"
+ },
+ "SEK": {
+ "name": "کرون سوئد",
+ "symbol": "SEK"
+ },
+ "NOK": {
+ "name": "کرون نروژ",
+ "symbol": "NOK"
+ },
+ "ISK": {
+ "name": "کرونای ایسلند",
+ "symbol": "ISK"
+ },
+ "ZMW": {
+ "name": "کواچای زامبیا",
+ "symbol": "ZMW"
+ },
+ "MWK": {
+ "name": "کواچای مالاوی",
+ "symbol": "MWK"
+ },
+ "AOA": {
+ "name": "کوانزای آنگولا",
+ "symbol": "AOA"
+ },
+ "NIO": {
+ "name": "کوردوبای نیکاراگوئه",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "کورونای جمهوری چک",
+ "symbol": "CZK"
+ },
+ "CRC": {
+ "name": "کولون کاستاریکا",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "کونای کرواسی",
+ "symbol": "HRK"
+ },
+ "MMK": {
+ "name": "کیات میانمار",
+ "symbol": "MMK"
+ },
+ "LAK": {
+ "name": "کیپ لائوس",
+ "symbol": "LAK"
+ },
+ "PGK": {
+ "name": "کینای پاپوا گینهٔ نو",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "گوارانی پاراگوئه",
+ "symbol": "PYG"
+ },
+ "HTG": {
+ "name": "گورد هائیتی",
+ "symbol": "HTG"
+ },
+ "ANG": {
+ "name": "گیلدر آنتیل هلند",
+ "symbol": "ANG"
+ },
+ "GEL": {
+ "name": "لاری گرجستان",
+ "symbol": "GEL"
+ },
+ "SLL": {
+ "name": "لئون سیرالئون",
+ "symbol": "SLL"
+ },
+ "RON": {
+ "name": "لئوی رومانی",
+ "symbol": "RON"
+ },
+ "MDL": {
+ "name": "لئوی مولداوی",
+ "symbol": "MDL"
+ },
+ "BGN": {
+ "name": "ل٠بلغارستان",
+ "symbol": "BGN"
+ },
+ "ALL": {
+ "name": "لک آلبانی",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "لمپیرای هندوراس",
+ "symbol": "HNL"
+ },
+ "LSL": {
+ "name": "لوتی لسوتو",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "لیتاس لیتوانی",
+ "symbol": "LTL"
+ },
+ "TRY": {
+ "name": "لیرهٔ ترکیه",
+ "symbol": "TRY"
+ },
+ "SDG": {
+ "name": "لیرهٔ سودان",
+ "symbol": "SDG"
+ },
+ "SYP": {
+ "name": "لیرهٔ سوریه",
+ "symbol": "SYP"
+ },
+ "LBP": {
+ "name": "لیرهٔ لبنان",
+ "symbol": "LBP"
+ },
+ "EGP": {
+ "name": "لیرهٔ مصر",
+ "symbol": "EGP"
+ },
+ "SZL": {
+ "name": "لیلانگنی سوازیلند",
+ "symbol": "SZL"
+ },
+ "BAM": {
+ "name": "مارک تبدیل‌پذیر بوسنی و هرزگوین",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "متیکال موزامبیک",
+ "symbol": "MZN"
+ },
+ "TMT": {
+ "name": "منات ترکمنستان",
+ "symbol": "TMT"
+ },
+ "AZN": {
+ "name": "منات جمهوری آذربایجان",
+ "symbol": "AZN"
+ },
+ "ERN": {
+ "name": "ناکÙای اریتره",
+ "symbol": "ERN"
+ },
+ "NGN": {
+ "name": "نایرای نیجریه",
+ "symbol": "NGN"
+ },
+ "PEN": {
+ "name": "نوئووسول پرو",
+ "symbol": "PEN"
+ },
+ "VUV": {
+ "name": "واتوی وانوواتو",
+ "symbol": "VUV"
+ },
+ "KRW": {
+ "name": "وون کرهٔ جنوبی",
+ "symbol": "â‚©"
+ },
+ "KPW": {
+ "name": "وون کرهٔ شمالی",
+ "symbol": "KPW"
+ },
+ "UAH": {
+ "name": "هریونیای اوکراین",
+ "symbol": "UAH"
+ },
+ "JPY": {
+ "name": "ین ژاپن",
+ "symbol": "Â¥"
+ },
+ "CNY": {
+ "name": "یوآن چین",
+ "symbol": "Â¥CN"
+ },
+ "EUR": {
+ "name": "یورو",
+ "symbol": "€"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ff.json b/library/intl/resources/currency/ff.json
new file mode 100644
index 000000000..e3f6bbe17
--- /dev/null
+++ b/library/intl/resources/currency/ff.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "MGA": {
+ "name": "Ariyari Madagaskaar",
+ "symbol": "MGA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Biir Ecoppi",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi Gammbi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinaar Alaseri",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinaar Bahrayn",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinaar Libi",
+ "symbol": "LYD"
+ },
+ "TND": {
+ "name": "Dinaar Tunisii",
+ "symbol": "TND"
+ },
+ "MAD": {
+ "name": "Diraham Maruk",
+ "symbol": "MAD"
+ },
+ "AED": {
+ "name": "Dirham Emiraati Araab DentuÉ—i",
+ "symbol": "AED"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobra Sawo Tome e Prensipe",
+ "symbol": "STD"
+ },
+ "USD": {
+ "name": "Dolaar Dowlaaji DentuÉ—i",
+ "symbol": "US$"
+ },
+ "CAD": {
+ "name": "Dolaar Kandaaa",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dolaar Liberiyaa",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Dolaar Namibii",
+ "symbol": "NAD"
+ },
+ "AUD": {
+ "name": "Dolaar Ostaraalii",
+ "symbol": "A$"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "Eskudoo Kap Weer",
+ "symbol": "CVE"
+ },
+ "DJF": {
+ "name": "Faraa Jibutii",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Faraa Komoor",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Faraa Konngo",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Faraa Ruwanndaa",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Faraa Suwiis",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kuwacca Malaawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kuwacca Sammbi",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwansaa Anngolaa",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Lewoon Seraa Liyon",
+ "symbol": "SLL"
+ },
+ "EGP": {
+ "name": "Liibar Ejipt",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Liibar Sent Helen",
+ "symbol": "SHP"
+ },
+ "GBP": {
+ "name": "Liibar Sterling",
+ "symbol": "£"
+ },
+ "SDG": {
+ "name": "Liibar Sudaan",
+ "symbol": "SDG"
+ },
+ "SZL": {
+ "name": "Lilangeni Swaasilannda",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti Lesotoo",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "XAF": {
+ "name": "MbuuÉ—i Seefaa BEAC",
+ "symbol": "FCFA"
+ },
+ "BIF": {
+ "name": "MbuuÉ—u Burunndi",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "MbuuÉ—u Seefaa BCEAO",
+ "symbol": "CFA"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "ERN": {
+ "name": "Nafka Eriteree",
+ "symbol": "ERN"
+ },
+ "NGN": {
+ "name": "Nayraa Nijeriyaa",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "EUR": {
+ "name": "Oroo",
+ "symbol": "€"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pulaa Botwanaa",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Rannda Afrik BÅ‹ Worgo",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riyaal Arabi Sawdit",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupii Enndo",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupii Moriis",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupii Seysel",
+ "symbol": "SCR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "Siling Keñaa",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Siling Soomali",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Siling Tansanii",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Siling Uganndaa",
+ "symbol": "UGX"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ugiyya Muritani",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "JPY": {
+ "name": "Yen Sapoo",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yuam Siin",
+ "symbol": "CNÂ¥"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/fi.json b/library/intl/resources/currency/fi.json
new file mode 100644
index 000000000..c86cc0d33
--- /dev/null
+++ b/library/intl/resources/currency/fi.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afganistanin afgaani",
+ "symbol": "AFN"
+ },
+ "ANG": {
+ "name": "Alankomaiden Antillien guldeni",
+ "symbol": "ANG"
+ },
+ "ALL": {
+ "name": "Albanian lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian dinaari",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan kwanza",
+ "symbol": "AOA"
+ },
+ "AED": {
+ "name": "Arabiemiirikuntien dirhami",
+ "symbol": "AED"
+ },
+ "ARS": {
+ "name": "Argentiinan peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban floriini",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australian dollari",
+ "symbol": "AUD"
+ },
+ "AZN": {
+ "name": "Azerbaidžanin manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahaman dollari",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahrainin dinaari",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshin taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadosin dollari",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Belizen dollari",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudan dollari",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanin ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Hertsegovinan vaihdettava markka",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brasilian real",
+ "symbol": "BRL"
+ },
+ "BND": {
+ "name": "Brunein dollari",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarian lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundin frangi",
+ "symbol": "BIF"
+ },
+ "KYD": {
+ "name": "Caymansaarten dollari",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA-frangi BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA-frangi BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP-frangi",
+ "symbol": "XPF"
+ },
+ "CLP": {
+ "name": "Chilen peso",
+ "symbol": "CLP"
+ },
+ "CRC": {
+ "name": "Costa Rican colon",
+ "symbol": "CRC"
+ },
+ "DJF": {
+ "name": "Djiboutin frangi",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominikaanisen tasavallan peso",
+ "symbol": "DOP"
+ },
+ "EGP": {
+ "name": "Egyptin punta",
+ "symbol": "EGP"
+ },
+ "SVC": {
+ "name": "El Salvadorin colon",
+ "symbol": "SVC"
+ },
+ "GBP": {
+ "name": "Englannin punta",
+ "symbol": "£"
+ },
+ "ERN": {
+ "name": "Eritrean nakfa",
+ "symbol": "ERN"
+ },
+ "ZAR": {
+ "name": "Etelä-Afrikan randi",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "Etelä-Korean won",
+ "symbol": "KRW"
+ },
+ "SSP": {
+ "name": "Etelä-Sudanin punta",
+ "symbol": "SSP"
+ },
+ "ETB": {
+ "name": "Etiopian birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falklandinsaarten punta",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fidžin dollari",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "Filippiinien peso",
+ "symbol": "PHP"
+ },
+ "GMD": {
+ "name": "Gambian dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanan cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltarin punta",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalan quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean frangi",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyanan dollari",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitin gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Hondurasin lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hongkongin dollari",
+ "symbol": "HKD"
+ },
+ "IDR": {
+ "name": "Indonesian rupia",
+ "symbol": "IDR"
+ },
+ "INR": {
+ "name": "Intian rupia",
+ "symbol": "INR"
+ },
+ "IQD": {
+ "name": "Irakin dinaari",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "Iranin rial",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "Islannin kruunu",
+ "symbol": "ISK"
+ },
+ "ILS": {
+ "name": "Israelin uusi sekeli",
+ "symbol": "ILS"
+ },
+ "XCD": {
+ "name": "Itä-Karibian dollari",
+ "symbol": "XCD"
+ },
+ "JMD": {
+ "name": "Jamaikan dollari",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanin jeni",
+ "symbol": "Â¥"
+ },
+ "YER": {
+ "name": "Jemenin rial",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "Jordanian dinaari",
+ "symbol": "JOD"
+ },
+ "KHR": {
+ "name": "Kambodžan riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Kanadan dollari",
+ "symbol": "CAD"
+ },
+ "CVE": {
+ "name": "Kap Verden escudo",
+ "symbol": "CVE"
+ },
+ "KZT": {
+ "name": "Kazakstanin tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenian Å¡illinki",
+ "symbol": "KES"
+ },
+ "CNY": {
+ "name": "Kiinan yuan",
+ "symbol": "CNY"
+ },
+ "KGS": {
+ "name": "Kirgisian som",
+ "symbol": "KGS"
+ },
+ "COP": {
+ "name": "Kolumbian peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Komorien frangi",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Kongon frangi",
+ "symbol": "CDF"
+ },
+ "HRK": {
+ "name": "Kroatian kuna",
+ "symbol": "HRK"
+ },
+ "CUP": {
+ "name": "Kuuban peso",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "Kuuban vaihdettava peso",
+ "symbol": "CUC"
+ },
+ "KWD": {
+ "name": "Kuwaitin dinaari",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "Laosin kip",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "Lesothon loti",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "Libanonin punta",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "Liberian dollari",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan dinaari",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Liettuan liti",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macaon pataca",
+ "symbol": "MOP"
+ },
+ "MGA": {
+ "name": "Madagaskarin ariary",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "Makedonian denaari",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "Malawin kwacha",
+ "symbol": "MWK"
+ },
+ "MVR": {
+ "name": "Malediivien rufiyaa",
+ "symbol": "MVR"
+ },
+ "MYR": {
+ "name": "Malesian ringgit",
+ "symbol": "MYR"
+ },
+ "MAD": {
+ "name": "Marokon dirhami",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "Mauritanian ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritiuksen rupia",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Meksikon peso",
+ "symbol": "MXN"
+ },
+ "MDL": {
+ "name": "Moldovan leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian tugrik",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "Mosambikin metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmarin kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibian dollari",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalin rupia",
+ "symbol": "NPR"
+ },
+ "NIO": {
+ "name": "Nicaraguan cordoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian naira",
+ "symbol": "NGN"
+ },
+ "NOK": {
+ "name": "Norjan kruunu",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omanin rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistanin rupia",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panaman balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua-Uuden-Guinean kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayn guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Perun uusi sol",
+ "symbol": "PEN"
+ },
+ "KPW": {
+ "name": "Pohjois-Korean won",
+ "symbol": "KPW"
+ },
+ "PLN": {
+ "name": "Puolan zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatarin rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian leu",
+ "symbol": "RON"
+ },
+ "RWF": {
+ "name": "Ruandan frangi",
+ "symbol": "RWF"
+ },
+ "SEK": {
+ "name": "Ruotsin kruunu",
+ "symbol": "SEK"
+ },
+ "SHP": {
+ "name": "Saint Helenan punta",
+ "symbol": "SHP"
+ },
+ "SBD": {
+ "name": "Salomonsaarten dollari",
+ "symbol": "SBD"
+ },
+ "ZMW": {
+ "name": "Sambian kwacha",
+ "symbol": "ZMW"
+ },
+ "WST": {
+ "name": "Samoan tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomén ja Príncipen dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi-Arabian rial",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian dinaari",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellien rupia",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonen leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singaporen dollari",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "Somalian Å¡illinki",
+ "symbol": "SOS"
+ },
+ "LKR": {
+ "name": "Sri Lankan rupia",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudanin punta",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamin dollari",
+ "symbol": "SRD"
+ },
+ "CHF": {
+ "name": "Sveitsin frangi",
+ "symbol": "CHF"
+ },
+ "SZL": {
+ "name": "Swazimaan lilangeni",
+ "symbol": "SZL"
+ },
+ "SYP": {
+ "name": "Syyrian punta",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tadžikistanin somoni",
+ "symbol": "TJS"
+ },
+ "TWD": {
+ "name": "Taiwanin uusi dollari",
+ "symbol": "TWD"
+ },
+ "TZS": {
+ "name": "Tansanian Å¡illinki",
+ "symbol": "TZS"
+ },
+ "DKK": {
+ "name": "Tanskan kruunu",
+ "symbol": "DKK"
+ },
+ "THB": {
+ "name": "Thaimaan baht",
+ "symbol": "THB"
+ },
+ "TOP": {
+ "name": "Tongan pa’anga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidadin ja Tobagon dollari",
+ "symbol": "TTD"
+ },
+ "CZK": {
+ "name": "TÅ¡ekin koruna",
+ "symbol": "CZK"
+ },
+ "TND": {
+ "name": "Tunisian dinaari",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkin liira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistanin manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Å¡illinki",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainan hryvnia",
+ "symbol": "UAH"
+ },
+ "HUF": {
+ "name": "Unkarin forintti",
+ "symbol": "HUF"
+ },
+ "UYU": {
+ "name": "Uruguayn peso",
+ "symbol": "UYU"
+ },
+ "NZD": {
+ "name": "Uuden-Seelannin dollari",
+ "symbol": "NZD"
+ },
+ "UZS": {
+ "name": "Uzbekistanin som",
+ "symbol": "UZS"
+ },
+ "BYR": {
+ "name": "Valko-Venäjän rupla",
+ "symbol": "BYR"
+ },
+ "VUV": {
+ "name": "Vanuatun vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan bolivar",
+ "symbol": "VEF"
+ },
+ "RUB": {
+ "name": "Venäjän rupla",
+ "symbol": "RUB"
+ },
+ "VND": {
+ "name": "Vietnamin dong",
+ "symbol": "VND"
+ },
+ "USD": {
+ "name": "Yhdysvaltain dollari",
+ "symbol": "$"
+ },
+ "ZWL": {
+ "name": "Zimbabwen dollari (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/fil.json b/library/intl/resources/currency/fil.json
new file mode 100644
index 000000000..78101b28e
--- /dev/null
+++ b/library/intl/resources/currency/fil.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentine Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BHD": {
+ "name": "Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BYR": {
+ "name": "Belarusian Ruble",
+ "symbol": "BYR"
+ },
+ "BTN": {
+ "name": "Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanan Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "British Pound Sterling",
+ "symbol": "£"
+ },
+ "BGN": {
+ "name": "Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CVE": {
+ "name": "Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "XOF": {
+ "name": "CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CNY": {
+ "name": "Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CUC": {
+ "name": "Convertible na Piso ng Cuba",
+ "symbol": "CUC"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CZK": {
+ "name": "Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Denmark Krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "AUD": {
+ "name": "Dolyar ng Australya",
+ "symbol": "A$"
+ },
+ "BSD": {
+ "name": "Dolyar ng Bahamas",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "Dolyar ng Barbados",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Dolyar ng Belize",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Dolyar ng Bermuda",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "Dolyar ng Brunei",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "Dolyar ng Canada",
+ "symbol": "CA$"
+ },
+ "KYD": {
+ "name": "Dolyar ng Cayman Islands",
+ "symbol": "KYD"
+ },
+ "FJD": {
+ "name": "Dolyar ng Fiji",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "Dolyar ng Guyanese",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "Dolyar ng Hong Kong",
+ "symbol": "HK$"
+ },
+ "JMD": {
+ "name": "Dolyar ng Jamaica",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "Dolyar ng Liberia",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Dolyar ng Namibia",
+ "symbol": "NAD"
+ },
+ "TWD": {
+ "name": "Dolyar ng New Taiwan",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "Dolyar ng New Zealand",
+ "symbol": "NZ$"
+ },
+ "XCD": {
+ "name": "Dolyar ng Silangang Caribbean",
+ "symbol": "EC$"
+ },
+ "SGD": {
+ "name": "Dolyar ng Singapore",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Dolyar ng Solomon Islands",
+ "symbol": "SBD"
+ },
+ "SRD": {
+ "name": "Dolyar ng Suriname",
+ "symbol": "SRD"
+ },
+ "TTD": {
+ "name": "Dolyar ng Trinidad and Tobago",
+ "symbol": "TTD"
+ },
+ "USD": {
+ "name": "Dolyar ng US",
+ "symbol": "$"
+ },
+ "EGP": {
+ "name": "Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Islands Pound",
+ "symbol": "FKP"
+ },
+ "GMD": {
+ "name": "Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar Pound",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinean Franc",
+ "symbol": "GNF"
+ },
+ "HTG": {
+ "name": "Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HUF": {
+ "name": "Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "Israeli New Sheqel",
+ "symbol": "₪"
+ },
+ "JPY": {
+ "name": "Japanese Yen",
+ "symbol": "Â¥"
+ },
+ "JOD": {
+ "name": "Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macanese Pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldivian Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MDL": {
+ "name": "Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "Mozambican Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyat",
+ "symbol": "MMK"
+ },
+ "NPR": {
+ "name": "Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "NIO": {
+ "name": "Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistani Rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "CLP": {
+ "name": "Piso ng Chile",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "Piso ng Colombia",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "Piso ng Cuba",
+ "symbol": "CUP"
+ },
+ "DOP": {
+ "name": "Piso ng Dominican",
+ "symbol": "DOP"
+ },
+ "MXN": {
+ "name": "Piso ng Mexico",
+ "symbol": "MX$"
+ },
+ "PHP": {
+ "name": "Piso ng Pilipinas",
+ "symbol": "₱"
+ },
+ "UYU": {
+ "name": "Piso ng Uruguay",
+ "symbol": "UYU"
+ },
+ "PLN": {
+ "name": "Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russian Ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Saint Helena Pound",
+ "symbol": "SHP"
+ },
+ "WST": {
+ "name": "Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "Sao Tome and Principe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellois Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "South Korean Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "South Sudanese Pound",
+ "symbol": "SSP"
+ },
+ "LKR": {
+ "name": "Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SZL": {
+ "name": "Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thai Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "UZS": {
+ "name": "Uzbekistan Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/fo.json b/library/intl/resources/currency/fo.json
new file mode 100644
index 000000000..71b2801fb
--- /dev/null
+++ b/library/intl/resources/currency/fo.json
@@ -0,0 +1,634 @@
+{
+ "AED": {
+ "name": "AED",
+ "symbol": "AED"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "AOA",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AUD": {
+ "name": "AUD",
+ "symbol": "A$"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BHD": {
+ "name": "BHD",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "BIF",
+ "symbol": "BIF"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BWP": {
+ "name": "BWP",
+ "symbol": "BWP"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CAD": {
+ "name": "CAD",
+ "symbol": "CA$"
+ },
+ "CDF": {
+ "name": "CDF",
+ "symbol": "CDF"
+ },
+ "CHF": {
+ "name": "CHF",
+ "symbol": "CHF"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "CNY",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CVE": {
+ "name": "CVE",
+ "symbol": "CVE"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DJF": {
+ "name": "DJF",
+ "symbol": "DJF"
+ },
+ "DKK": {
+ "name": "donsk króna",
+ "symbol": "kr"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "DZD": {
+ "name": "DZD",
+ "symbol": "DZD"
+ },
+ "EGP": {
+ "name": "EGP",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "ERN",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "ETB",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GBP": {
+ "name": "GBP",
+ "symbol": "£"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GMD": {
+ "name": "GMD",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "INR",
+ "symbol": "₹"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "íslendsk króna",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "JPY": {
+ "name": "JPY",
+ "symbol": "JPÂ¥"
+ },
+ "KES": {
+ "name": "KES",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "KMF",
+ "symbol": "KMF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LRD": {
+ "name": "LRD",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "LYD",
+ "symbol": "LYD"
+ },
+ "MAD": {
+ "name": "MAD",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MGA": {
+ "name": "MGA",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MRO": {
+ "name": "MRO",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "MWK",
+ "symbol": "MWK"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "norsk króna",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SAR": {
+ "name": "SAR",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "SDG",
+ "symbol": "SDG"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SOS",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SEK": {
+ "name": "svensk króna",
+ "symbol": "SEK"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "TND",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "TZS": {
+ "name": "TZS",
+ "symbol": "TZS"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "UGX",
+ "symbol": "UGX"
+ },
+ "USD": {
+ "name": "USD",
+ "symbol": "US$"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZAR": {
+ "name": "ZAR",
+ "symbol": "ZAR"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/fr-CA.json b/library/intl/resources/currency/fr-CA.json
new file mode 100644
index 000000000..93d2ddc07
--- /dev/null
+++ b/library/intl/resources/currency/fr-CA.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afghani afghan",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariary malgache",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "baht thaïlandais",
+ "symbol": "THB"
+ },
+ "PAB": {
+ "name": "balboa panaméen",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "birr éthiopien",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolivar vénézuélien",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano bolivien",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cédi ghanéen",
+ "symbol": "GHS"
+ },
+ "CRC": {
+ "name": "colón costaricain",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadorien",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba oro nicaraguayen",
+ "symbol": "NIO"
+ },
+ "DKK": {
+ "name": "couronne danoise",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "couronne islandaise",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "couronne norvégienne",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "couronne suédoise",
+ "symbol": "SEK"
+ },
+ "CZK": {
+ "name": "couronne tchèque",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "dalasi gambien",
+ "symbol": "GMD"
+ },
+ "MKD": {
+ "name": "denar macédonien",
+ "symbol": "MKD"
+ },
+ "DZD": {
+ "name": "dinar algérien",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreïni",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar irakien",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordanien",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar koweïtien",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libyen",
+ "symbol": "LYD"
+ },
+ "RSD": {
+ "name": "dinar serbe",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunisien",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dirham des Émirats arabes unis",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dirham marocain",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra santoméen",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dollar australien",
+ "symbol": "$ AU"
+ },
+ "BSD": {
+ "name": "dollar bahaméen",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dollar barbadien",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dollar bélizéen",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "dollar bermudien",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "dollar brunéien",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "dollar canadien",
+ "symbol": "$"
+ },
+ "HKD": {
+ "name": "dollar de Hong Kong",
+ "symbol": "$ HK"
+ },
+ "SGD": {
+ "name": "dollar de Singapour",
+ "symbol": "$ SG"
+ },
+ "TTD": {
+ "name": "dollar de Trinité-et-Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dollar des Caraïbes orientales",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dollar des États-Unis",
+ "symbol": "$ US"
+ },
+ "KYD": {
+ "name": "dollar des îles Caïmans",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "dollar des îles Salomon",
+ "symbol": "SBD"
+ },
+ "GYD": {
+ "name": "dollar du Guyana",
+ "symbol": "GYD"
+ },
+ "SRD": {
+ "name": "dollar du Suriname",
+ "symbol": "SRD"
+ },
+ "FJD": {
+ "name": "dollar fidjien",
+ "symbol": "FJD"
+ },
+ "JMD": {
+ "name": "dollar jamaïcain",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dollar libérien",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dollar namibien",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dollar néo-zélandais",
+ "symbol": "$ NZ"
+ },
+ "ZWL": {
+ "name": "dollar zimbabwéen (2009)",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dông vietnamien",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram arménien",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo du Cap-Vert",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "ANG": {
+ "name": "florin antillais",
+ "symbol": "ANG"
+ },
+ "AWG": {
+ "name": "florin arubais",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "forint hongrois",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franc burundais",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franc CFA (BCEAO)",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "franc CFA (BEAC)",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "franc CFP",
+ "symbol": "XPF"
+ },
+ "KMF": {
+ "name": "franc comorien",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franc congolais",
+ "symbol": "CDF"
+ },
+ "DJF": {
+ "name": "franc djiboutien",
+ "symbol": "DJF"
+ },
+ "GNF": {
+ "name": "franc guinéen",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franc rwandais",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franc suisse",
+ "symbol": "CHF"
+ },
+ "HTG": {
+ "name": "gourde haïtienne",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "guaraní paraguayen",
+ "symbol": "PYG"
+ },
+ "UAH": {
+ "name": "hryvnia ukrainienne",
+ "symbol": "UAH"
+ },
+ "PGK": {
+ "name": "kina papou-néo-guinéen",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip laotien",
+ "symbol": "LAK"
+ },
+ "HRK": {
+ "name": "kuna croate",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "kwacha malawite",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kwacha zambien",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "kwanza angolais",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "kyat myanmarais",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "lari géorgien",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek albanais",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondurien",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leone sierra-léonais",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldave",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu roumain",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "lev bulgare",
+ "symbol": "BGN"
+ },
+ "SZL": {
+ "name": "lilangeni swazi",
+ "symbol": "SZL"
+ },
+ "LTL": {
+ "name": "litas lituanien",
+ "symbol": "LTL"
+ },
+ "GIP": {
+ "name": "livre de Gibraltar",
+ "symbol": "GIP"
+ },
+ "SHP": {
+ "name": "livre de Sainte-Hélène",
+ "symbol": "SHP"
+ },
+ "FKP": {
+ "name": "livre des ÃŽles Malouines",
+ "symbol": "FKP"
+ },
+ "EGP": {
+ "name": "livre égyptienne",
+ "symbol": "EGP"
+ },
+ "LBP": {
+ "name": "livre libanaise",
+ "symbol": "LBP"
+ },
+ "SDG": {
+ "name": "livre soudanaise",
+ "symbol": "SDG"
+ },
+ "GBP": {
+ "name": "livre sterling",
+ "symbol": "£"
+ },
+ "SSP": {
+ "name": "livre sud-soudanaise",
+ "symbol": "SSP"
+ },
+ "SYP": {
+ "name": "livre syrienne",
+ "symbol": "SYP"
+ },
+ "TRY": {
+ "name": "livre turque",
+ "symbol": "TRY"
+ },
+ "LSL": {
+ "name": "loti lesothan",
+ "symbol": "lLS"
+ },
+ "AZN": {
+ "name": "manat azerbaïdjanais",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "mark convertible bosniaque",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical mozambicain",
+ "symbol": "MZN"
+ },
+ "ERN": {
+ "name": "nafka érythréen",
+ "symbol": "ERN"
+ },
+ "NGN": {
+ "name": "naira nigérian",
+ "symbol": "NGN"
+ },
+ "BTN": {
+ "name": "ngultrum bouthanais",
+ "symbol": "BTN"
+ },
+ "TWD": {
+ "name": "nouveau dollar taïwanais",
+ "symbol": "TWD"
+ },
+ "TMT": {
+ "name": "nouveau manat turkmène",
+ "symbol": "TMT"
+ },
+ "ILS": {
+ "name": "nouveau shekel israélien",
+ "symbol": "ILS"
+ },
+ "PEN": {
+ "name": "nouveau sol péruvien",
+ "symbol": "PEN"
+ },
+ "MRO": {
+ "name": "ouguiya mauritanien",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "pa’anga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca macanaise",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentin",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chilien",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso colombien",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cubain",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubain convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicain",
+ "symbol": "DOP"
+ },
+ "MXN": {
+ "name": "peso mexicain",
+ "symbol": "MXN"
+ },
+ "PHP": {
+ "name": "peso philippin",
+ "symbol": "PHP"
+ },
+ "UYU": {
+ "name": "peso uruguayen",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula botswanais",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatémaltèque",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand sud-africain",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "réal brésilien",
+ "symbol": "R$"
+ },
+ "IRR": {
+ "name": "rial iranien",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omanais",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saoudien",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yéménite",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel cambodgien",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringgit malais",
+ "symbol": "MYR"
+ },
+ "QAR": {
+ "name": "riyal du Qatar",
+ "symbol": "QAR"
+ },
+ "BYR": {
+ "name": "rouble biélorusse",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rouble russe",
+ "symbol": "RUB"
+ },
+ "SCR": {
+ "name": "roupie des Seychelles",
+ "symbol": "SCR"
+ },
+ "INR": {
+ "name": "roupie indienne",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "roupie indonésienne",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "roupie mauricienne",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "roupie népalaise",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "roupie pakistanaise",
+ "symbol": "PKR"
+ },
+ "LKR": {
+ "name": "roupie srilankaise",
+ "symbol": "LKR"
+ },
+ "MVR": {
+ "name": "rufiyaa maldivien",
+ "symbol": "MVR"
+ },
+ "KES": {
+ "name": "shilling kényan",
+ "symbol": "KES"
+ },
+ "UGX": {
+ "name": "shilling ougandais",
+ "symbol": "UGX"
+ },
+ "SOS": {
+ "name": "shilling somalien",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "shilling tanzanien",
+ "symbol": "TZS"
+ },
+ "KGS": {
+ "name": "som kirghize",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tadjik",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum ouzbek",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka bangladeshi",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazakh",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik mongol",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "vatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won nord-coréen",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won sud-coréen",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen japonais",
+ "symbol": "Â¥"
+ },
+ "CNY": {
+ "name": "yuan renminbi chinois",
+ "symbol": "CNÂ¥"
+ },
+ "PLN": {
+ "name": "zloty polonais",
+ "symbol": "PLN"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/fr.json b/library/intl/resources/currency/fr.json
new file mode 100644
index 000000000..848251d4c
--- /dev/null
+++ b/library/intl/resources/currency/fr.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afghani afghan",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariary malgache",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "baht thaïlandais",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "balboa panaméen",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "birr éthiopien",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolivar vénézuélien",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano bolivien",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cédi ghanéen",
+ "symbol": "GHS"
+ },
+ "CRC": {
+ "name": "colón costaricain",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colón salvadorien",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "córdoba oro nicaraguayen",
+ "symbol": "NIO"
+ },
+ "DKK": {
+ "name": "couronne danoise",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "couronne islandaise",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "couronne norvégienne",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "couronne suédoise",
+ "symbol": "SEK"
+ },
+ "CZK": {
+ "name": "couronne tchèque",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "dalasi gambien",
+ "symbol": "GMD"
+ },
+ "MKD": {
+ "name": "denar macédonien",
+ "symbol": "MKD"
+ },
+ "DZD": {
+ "name": "dinar algérien",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreïni",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar irakien",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordanien",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar koweïtien",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libyen",
+ "symbol": "LYD"
+ },
+ "RSD": {
+ "name": "dinar serbe",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunisien",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dirham des Émirats arabes unis",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dirham marocain",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra santoméen",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dollar australien",
+ "symbol": "$AU"
+ },
+ "BSD": {
+ "name": "dollar bahaméen",
+ "symbol": "$BS"
+ },
+ "BBD": {
+ "name": "dollar barbadien",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dollar bélizéen",
+ "symbol": "$BZ"
+ },
+ "BMD": {
+ "name": "dollar bermudien",
+ "symbol": "$BM"
+ },
+ "BND": {
+ "name": "dollar brunéien",
+ "symbol": "$BN"
+ },
+ "CAD": {
+ "name": "dollar canadien",
+ "symbol": "$CA"
+ },
+ "HKD": {
+ "name": "dollar de Hong Kong",
+ "symbol": "HKD"
+ },
+ "SGD": {
+ "name": "dollar de Singapour",
+ "symbol": "$SG"
+ },
+ "XCD": {
+ "name": "dollar des Caraïbes orientales",
+ "symbol": "XCD"
+ },
+ "USD": {
+ "name": "dollar des États-Unis",
+ "symbol": "$US"
+ },
+ "KYD": {
+ "name": "dollar des îles Caïmans",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "dollar des îles Salomon",
+ "symbol": "$SB"
+ },
+ "GYD": {
+ "name": "dollar du Guyana",
+ "symbol": "GYD"
+ },
+ "FJD": {
+ "name": "dollar fidjien",
+ "symbol": "$FJ"
+ },
+ "JMD": {
+ "name": "dollar jamaïcain",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dollar libérien",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dollar namibien",
+ "symbol": "$NA"
+ },
+ "NZD": {
+ "name": "dollar néo-zélandais",
+ "symbol": "$NZ"
+ },
+ "SRD": {
+ "name": "dollar surinamais",
+ "symbol": "$SR"
+ },
+ "TTD": {
+ "name": "dollar trinidadien",
+ "symbol": "$TT"
+ },
+ "ZWL": {
+ "name": "dollar zimbabwéen (2009)",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dông vietnamien",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "dram arménien",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo capverdien",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "ANG": {
+ "name": "florin antillais",
+ "symbol": "ANG"
+ },
+ "AWG": {
+ "name": "florin arubais",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "forint hongrois",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franc burundais",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franc CFA (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "franc CFA (BEAC)",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "franc CFP",
+ "symbol": "FCFP"
+ },
+ "KMF": {
+ "name": "franc comorien",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franc congolais",
+ "symbol": "CDF"
+ },
+ "DJF": {
+ "name": "franc djiboutien",
+ "symbol": "DJF"
+ },
+ "GNF": {
+ "name": "franc guinéen",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franc rwandais",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franc suisse",
+ "symbol": "CHF"
+ },
+ "HTG": {
+ "name": "gourde haïtienne",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "guaraní paraguayen",
+ "symbol": "PYG"
+ },
+ "UAH": {
+ "name": "hryvnia ukrainienne",
+ "symbol": "UAH"
+ },
+ "PGK": {
+ "name": "kina papouan-néo-guinéen",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip loatien",
+ "symbol": "LAK"
+ },
+ "HRK": {
+ "name": "kuna croate",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "kwacha malawite",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kwacha zambien",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "kwanza angolais",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "kyat myanmarais",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "lari géorgien",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek albanais",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondurien",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leone sierra-léonais",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldave",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu roumain",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "lev bulgare",
+ "symbol": "BGN"
+ },
+ "SZL": {
+ "name": "lilangeni swazi",
+ "symbol": "SZL"
+ },
+ "LTL": {
+ "name": "litas lituanien",
+ "symbol": "LTL"
+ },
+ "GIP": {
+ "name": "livre de Gibraltar",
+ "symbol": "£GI"
+ },
+ "SHP": {
+ "name": "livre de Sainte-Hélène",
+ "symbol": "SHP"
+ },
+ "FKP": {
+ "name": "livre des Falkland",
+ "symbol": "£FK"
+ },
+ "EGP": {
+ "name": "livre égyptienne",
+ "symbol": "EGP"
+ },
+ "LBP": {
+ "name": "livre libanaise",
+ "symbol": "£LB"
+ },
+ "SDG": {
+ "name": "livre soudanaise",
+ "symbol": "SDG"
+ },
+ "GBP": {
+ "name": "livre sterling",
+ "symbol": "£GB"
+ },
+ "SSP": {
+ "name": "livre sud-soudanaise",
+ "symbol": "SSP"
+ },
+ "SYP": {
+ "name": "livre syrienne",
+ "symbol": "SYP"
+ },
+ "TRY": {
+ "name": "livre turque",
+ "symbol": "TRY"
+ },
+ "LSL": {
+ "name": "loti lesothan",
+ "symbol": "lLS"
+ },
+ "AZN": {
+ "name": "manat azéri",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "mark convertible bosniaque",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical mozambicain",
+ "symbol": "MZN"
+ },
+ "ERN": {
+ "name": "nafka érythréen",
+ "symbol": "ERN"
+ },
+ "NGN": {
+ "name": "naira nigérian",
+ "symbol": "NGN"
+ },
+ "BTN": {
+ "name": "ngultrum bouthanais",
+ "symbol": "BTN"
+ },
+ "TWD": {
+ "name": "nouveau dollar taïwanais",
+ "symbol": "TWD"
+ },
+ "TMT": {
+ "name": "nouveau manat turkmène",
+ "symbol": "TMT"
+ },
+ "ILS": {
+ "name": "nouveau shekel israélien",
+ "symbol": "₪"
+ },
+ "PEN": {
+ "name": "nouveau sol péruvien",
+ "symbol": "PEN"
+ },
+ "MRO": {
+ "name": "ouguiya mauritanien",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "pa’anga tongan",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca macanaise",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentin",
+ "symbol": "$AR"
+ },
+ "CLP": {
+ "name": "peso chilien",
+ "symbol": "$CL"
+ },
+ "COP": {
+ "name": "peso colombien",
+ "symbol": "$CO"
+ },
+ "CUP": {
+ "name": "peso cubain",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubain convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominicain",
+ "symbol": "DOP"
+ },
+ "MXN": {
+ "name": "peso mexicain",
+ "symbol": "$MX"
+ },
+ "PHP": {
+ "name": "peso philippin",
+ "symbol": "PHP"
+ },
+ "UYU": {
+ "name": "peso uruguayen",
+ "symbol": "$UY"
+ },
+ "BWP": {
+ "name": "pula botswanais",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatémaltèque",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand sud-africain",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "réal brésilien",
+ "symbol": "R$"
+ },
+ "IRR": {
+ "name": "rial iranien",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omanais",
+ "symbol": "OMR"
+ },
+ "QAR": {
+ "name": "rial qatari",
+ "symbol": "QAR"
+ },
+ "SAR": {
+ "name": "rial saoudien",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yéménite",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel cambodgien",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringgit malais",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rouble biélorusse",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rouble russe",
+ "symbol": "RUB"
+ },
+ "SCR": {
+ "name": "roupie des Seychelles",
+ "symbol": "SCR"
+ },
+ "INR": {
+ "name": "roupie indienne",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "roupie indonésienne",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "roupie mauricienne",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "roupie népalaise",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "roupie pakistanaise",
+ "symbol": "PKR"
+ },
+ "LKR": {
+ "name": "roupie srilankaise",
+ "symbol": "LKR"
+ },
+ "MVR": {
+ "name": "rufiyaa maldivien",
+ "symbol": "MVR"
+ },
+ "KES": {
+ "name": "shilling kényan",
+ "symbol": "KES"
+ },
+ "UGX": {
+ "name": "shilling ougandais",
+ "symbol": "UGX"
+ },
+ "SOS": {
+ "name": "shilling somalien",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "shilling tanzanien",
+ "symbol": "TZS"
+ },
+ "KGS": {
+ "name": "som kirghize",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tadjik",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum ouzbek",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka bangladeshi",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala samoan",
+ "symbol": "WS$"
+ },
+ "KZT": {
+ "name": "tenge kazakh",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik mongol",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "vatu vanuatuan",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won nord-coréen",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won sud-coréen",
+ "symbol": "â‚©"
+ },
+ "JPY": {
+ "name": "yen japonais",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "yuan renminbi chinois",
+ "symbol": "CNY"
+ },
+ "PLN": {
+ "name": "zloty polonais",
+ "symbol": "PLN"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/fur.json b/library/intl/resources/currency/fur.json
new file mode 100644
index 000000000..70f49a170
--- /dev/null
+++ b/library/intl/resources/currency/fur.json
@@ -0,0 +1,634 @@
+{
+ "AED": {
+ "name": "AED",
+ "symbol": "AED"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "AOA",
+ "symbol": "AOA"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "THB": {
+ "name": "baht tailandês",
+ "symbol": "THB"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BHD": {
+ "name": "BHD",
+ "symbol": "BHD"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BWP": {
+ "name": "BWP",
+ "symbol": "BWP"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CDF": {
+ "name": "CDF",
+ "symbol": "CDF"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "NIO": {
+ "name": "Córdoba oro nicaraguan",
+ "symbol": "NIO"
+ },
+ "DKK": {
+ "name": "corone danese",
+ "symbol": "DKK"
+ },
+ "CZK": {
+ "name": "Corone de Republiche Ceche",
+ "symbol": "CZK"
+ },
+ "NOK": {
+ "name": "corone norvegjese",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "corone svedese",
+ "symbol": "SEK"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CVE": {
+ "name": "CVE",
+ "symbol": "CVE"
+ },
+ "DZD": {
+ "name": "Dinar algerin",
+ "symbol": "DZD"
+ },
+ "RSD": {
+ "name": "Dinar serp",
+ "symbol": "RSD"
+ },
+ "DJF": {
+ "name": "DJF",
+ "symbol": "DJF"
+ },
+ "USD": {
+ "name": "dolar american",
+ "symbol": "US$"
+ },
+ "AUD": {
+ "name": "dolar australian",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "dolar canadês",
+ "symbol": "CA$"
+ },
+ "BND": {
+ "name": "Dolar dal Brunei",
+ "symbol": "BND"
+ },
+ "HKD": {
+ "name": "dolar di Hong Kong",
+ "symbol": "HK$"
+ },
+ "NAD": {
+ "name": "Dolar namibian",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "Dollar neozelandês",
+ "symbol": "NZ$"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "AMD": {
+ "name": "Dram armen",
+ "symbol": "AMD"
+ },
+ "EGP": {
+ "name": "EGP",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "ERN",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "ETB",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "BIF": {
+ "name": "Franc burundês",
+ "symbol": "BIF"
+ },
+ "CHF": {
+ "name": "franc svuizar",
+ "symbol": "CHF"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GMD": {
+ "name": "GMD",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "TWD": {
+ "name": "gnûf dolar taiwanês",
+ "symbol": "NT$"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KES": {
+ "name": "KES",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "KMF",
+ "symbol": "KMF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "HRK": {
+ "name": "Kuna cravuate",
+ "symbol": "HRK"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "TRY": {
+ "name": "lire turche",
+ "symbol": "TRY"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LRD": {
+ "name": "LRD",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "LYD",
+ "symbol": "LYD"
+ },
+ "MAD": {
+ "name": "MAD",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MGA": {
+ "name": "MGA",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MRO": {
+ "name": "MRO",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "MWK",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "ARS": {
+ "name": "Peso argjentin",
+ "symbol": "ARS"
+ },
+ "CUP": {
+ "name": "Peso cuban",
+ "symbol": "CUP"
+ },
+ "MXN": {
+ "name": "peso messican",
+ "symbol": "MX$"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "rand sudafrican",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasilian",
+ "symbol": "R$"
+ },
+ "IRR": {
+ "name": "Rial iranian",
+ "symbol": "IRR"
+ },
+ "SAR": {
+ "name": "riyal de Arabie Saudite",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "BYR": {
+ "name": "Rubli bielorùs",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rubli rus",
+ "symbol": "RUB"
+ },
+ "IDR": {
+ "name": "rupiah indonesiane",
+ "symbol": "IDR"
+ },
+ "INR": {
+ "name": "rupie indiane",
+ "symbol": "₹"
+ },
+ "PKR": {
+ "name": "Rupie pachistane",
+ "symbol": "PKR"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "SDG",
+ "symbol": "SDG"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SOS",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "GBP": {
+ "name": "sterline britaniche",
+ "symbol": "£"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "TND",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TZS": {
+ "name": "TZS",
+ "symbol": "TZS"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "UGX",
+ "symbol": "UGX"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "KRW": {
+ "name": "won de Coree dal Sud",
+ "symbol": "â‚©"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "JPY": {
+ "name": "yen gjaponês",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "yuan cinês",
+ "symbol": "CNÂ¥"
+ },
+ "PLN": {
+ "name": "zloty polac",
+ "symbol": "PLN"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/fy.json b/library/intl/resources/currency/fy.json
new file mode 100644
index 000000000..0c3f71931
--- /dev/null
+++ b/library/intl/resources/currency/fy.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghaanske afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanese lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerynske dinar",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "Amerikaanske dollar",
+ "symbol": "US$"
+ },
+ "AOA": {
+ "name": "Angolese kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentynske peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armeense dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Arubaanske gulden",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australyske dollar",
+ "symbol": "AU$"
+ },
+ "AZN": {
+ "name": "Azerbeidzjaanske manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamaanske dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahreinse dinar",
+ "symbol": "BHD"
+ },
+ "BBD": {
+ "name": "Barbadaanske dollar",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Belizaanske dollar",
+ "symbol": "BZD"
+ },
+ "BDT": {
+ "name": "Bengalese taka",
+ "symbol": "BDT"
+ },
+ "BMD": {
+ "name": "Bermuda-dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutaanske ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Boliviaanske boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnyske convertibele mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswaanske pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Braziliaanske real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "Brits pûn sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Bruneise dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgaarse lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundese frank",
+ "symbol": "BIF"
+ },
+ "CAD": {
+ "name": "Canadese dollar",
+ "symbol": "C$"
+ },
+ "KYD": {
+ "name": "Caymaneilânske dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA-franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA-frank",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP-franc",
+ "symbol": "XPF"
+ },
+ "CDF": {
+ "name": "Congolese frank",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costaricaanske colón",
+ "symbol": "CRC"
+ },
+ "DKK": {
+ "name": "Deenske kroon",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutiaanske frank",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominikaanske peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "East-Karibyske dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "Egyptysk pûn",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrese nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopyske birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falklâneilânske pûn",
+ "symbol": "FKP"
+ },
+ "VEF": {
+ "name": "Fenezolaanske bolivar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Fietnameeske dong",
+ "symbol": "â‚«"
+ },
+ "FJD": {
+ "name": "Fiji-dollar",
+ "symbol": "FJ$"
+ },
+ "PHP": {
+ "name": "Filipynske peso",
+ "symbol": "PHP"
+ },
+ "GMD": {
+ "name": "Gambiaanske dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgyske lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanese cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltarees pûn",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalteekse quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinese franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyaanske dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haïtiaanske gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Hondurese lempira",
+ "symbol": "HNL"
+ },
+ "HUF": {
+ "name": "Hongaarse forint",
+ "symbol": "HUF"
+ },
+ "HKD": {
+ "name": "Hongkongske dollar",
+ "symbol": "HK$"
+ },
+ "INR": {
+ "name": "Indiase roepie",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesyske roepia",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "Iraakse dinar",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "Iraanske rial",
+ "symbol": "IRR"
+ },
+ "ILS": {
+ "name": "Israëlyske nieuwe shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaikaanske dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanse yen",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "Jemenityske rial",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "Jordaanske dinar",
+ "symbol": "JOD"
+ },
+ "CVE": {
+ "name": "Kaapverdyske escudo",
+ "symbol": "CVE"
+ },
+ "KHR": {
+ "name": "Kambodjaanske riel",
+ "symbol": "KHR"
+ },
+ "QAR": {
+ "name": "Katarese rial",
+ "symbol": "QAR"
+ },
+ "KZT": {
+ "name": "Kazachstaanske tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Keniaanske shilling",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "Kirgizyske som",
+ "symbol": "KGS"
+ },
+ "KWD": {
+ "name": "Koeweitse dinar",
+ "symbol": "KWD"
+ },
+ "COP": {
+ "name": "Kolombiaanske peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Komorese frank",
+ "symbol": "KMF"
+ },
+ "HRK": {
+ "name": "Kroatyske kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Kubaanske convertibele peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Kubaanske peso",
+ "symbol": "CUP"
+ },
+ "LAK": {
+ "name": "Laotiaanske kip",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "Lesothaanske loti",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "Libaneeske pûn",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "Liberiaanske dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyske dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Litouwse litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macause pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonyske denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagassyske ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawyske kwacha",
+ "symbol": "MWK"
+ },
+ "MVR": {
+ "name": "Maldivyske rufiyaa",
+ "symbol": "MVR"
+ },
+ "MYR": {
+ "name": "Maleisyske ringgit",
+ "symbol": "MYR"
+ },
+ "MAD": {
+ "name": "Marokkaanske dirham",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "Mauritaanske ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritiaanske roepie",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Meksikaanske peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldavyske leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongoalske tugrik",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "Mozambikaanske metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmarese kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibyske dollar",
+ "symbol": "NAD"
+ },
+ "ANG": {
+ "name": "Nederlânsk-Antilliaanske gûne",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "Nepalese roepie",
+ "symbol": "NPR"
+ },
+ "NIO": {
+ "name": "Nicaraguaanske córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigeriaanske naira",
+ "symbol": "NGN"
+ },
+ "NZD": {
+ "name": "Nij-Seelânske dollar",
+ "symbol": "NZ$"
+ },
+ "TWD": {
+ "name": "Nije Taiwanese dollar",
+ "symbol": "NT$"
+ },
+ "KPW": {
+ "name": "Noard-Koreaanske won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Noarske kroon",
+ "symbol": "NOK"
+ },
+ "UGX": {
+ "name": "Oegandese shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Oekraïense hryvnia",
+ "symbol": "UAH"
+ },
+ "UZS": {
+ "name": "Oezbekistaanske sum",
+ "symbol": "UZS"
+ },
+ "OMR": {
+ "name": "Omaanske rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistaanske roepie",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamese balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papuaanske kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayaanske guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruaanske nieuwe sol",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "Poalske zloty",
+ "symbol": "PLN"
+ },
+ "RON": {
+ "name": "Roemeenske leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russyske roebel",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandese frank",
+ "symbol": "RWF"
+ },
+ "SBD": {
+ "name": "Salomon-dollar",
+ "symbol": "SI$"
+ },
+ "SVC": {
+ "name": "Salvadoraanske colón",
+ "symbol": "SVC"
+ },
+ "ZMW": {
+ "name": "Sambiaanske kwacha",
+ "symbol": "ZMW"
+ },
+ "WST": {
+ "name": "Samoaanske tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "Santomese dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saoedi-Arabyske riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Servyske dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychelse roepie",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierraleoonse leone",
+ "symbol": "SLL"
+ },
+ "CLP": {
+ "name": "Sileenske peso",
+ "symbol": "CLP"
+ },
+ "ZWL": {
+ "name": "Simbabwaanske dollar (2009)",
+ "symbol": "ZWL"
+ },
+ "CNY": {
+ "name": "Sineeske yuan renminbi",
+ "symbol": "CNÂ¥"
+ },
+ "SGD": {
+ "name": "Singaporese dollar",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "Sint-Heleenske pûn",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Soedaneeske pûn",
+ "symbol": "SDG"
+ },
+ "SOS": {
+ "name": "Somalyske shilling",
+ "symbol": "SOS"
+ },
+ "LKR": {
+ "name": "Sri Lankaanske roepie",
+ "symbol": "LKR"
+ },
+ "ZAR": {
+ "name": "Sûd-Afrikaanske rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "Sûd-Koreaanske won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "Sûd-Soedaneeske pûn",
+ "symbol": "SSP"
+ },
+ "SRD": {
+ "name": "Surinaamske dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazyske lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "Sweedske kroon",
+ "symbol": "SEK"
+ },
+ "SYP": {
+ "name": "Syrysk pûn",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tadzjikistaanske somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzaniaanske shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thaise baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongaanske paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad en Tobago-dollar",
+ "symbol": "TTD"
+ },
+ "CZK": {
+ "name": "Tsjechyske kroon",
+ "symbol": "CZK"
+ },
+ "TND": {
+ "name": "Tunesyske dinar",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "Turkmeense manat",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "Turkse lira",
+ "symbol": "TRY"
+ },
+ "UYU": {
+ "name": "Uruguayaanske peso",
+ "symbol": "UYU"
+ },
+ "VUV": {
+ "name": "Vanuatuaanske vatu",
+ "symbol": "VUV"
+ },
+ "AED": {
+ "name": "Verenigde Arabyske Emiraten-dirham",
+ "symbol": "AED"
+ },
+ "BYR": {
+ "name": "Wit-Russyske roebel",
+ "symbol": "BYR"
+ },
+ "ISK": {
+ "name": "Yslânske kroon",
+ "symbol": "ISK"
+ },
+ "CHF": {
+ "name": "Zwitserse frank",
+ "symbol": "CHF"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ga.json b/library/intl/resources/currency/ga.json
new file mode 100644
index 000000000..e0ad08f53
--- /dev/null
+++ b/library/intl/resources/currency/ga.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghani na hAfganastáine",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "Ariary Mhadagascar",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "Baht na Téalainne",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "Balboa Phanama",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "Birr na hAetóipe",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "Bolívar Veiniséala",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "Boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "Cedi Ghána",
+ "symbol": "GHS"
+ },
+ "CRC": {
+ "name": "Colón Chósta Ríce",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "Colón na Salvadóire",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "Córdoba Nicearagua",
+ "symbol": "NIO"
+ },
+ "DKK": {
+ "name": "Coróin na Danmhairge",
+ "symbol": "DKK"
+ },
+ "NOK": {
+ "name": "Coróin na hIorua",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "Coróin na Sualainne",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "Dalasi na Gaimbia",
+ "symbol": "GMD"
+ },
+ "MKD": {
+ "name": "Denar na Macadóine",
+ "symbol": "MKD"
+ },
+ "BHD": {
+ "name": "Dinar Bhairéin",
+ "symbol": "BHD"
+ },
+ "KWD": {
+ "name": "Dinar Chuáit",
+ "symbol": "KWD"
+ },
+ "DZD": {
+ "name": "Dinar na hAilgéire",
+ "symbol": "DZD"
+ },
+ "IQD": {
+ "name": "Dinar na hIaráice",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "Dinar na hIordáine",
+ "symbol": "JOD"
+ },
+ "LYD": {
+ "name": "Dinar na Libia",
+ "symbol": "LYD"
+ },
+ "RSD": {
+ "name": "Dinar na Seirbia",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "Dinar na Túinéise",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham Aontas na nÉimíríochtaí Arabacha",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham Mharacó",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "Dobra São Tomé agus Príncipe",
+ "symbol": "STD"
+ },
+ "BBD": {
+ "name": "Dollar Bharbadós",
+ "symbol": "BBD"
+ },
+ "BMD": {
+ "name": "Dollar Bheirmiúda",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "Dollar Bhrúiné",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "Dollar Cheanada",
+ "symbol": "CA$"
+ },
+ "FJD": {
+ "name": "Dollar Fhidsí",
+ "symbol": "FJD"
+ },
+ "HKD": {
+ "name": "Dollar Hong Cong",
+ "symbol": "HK$"
+ },
+ "BZD": {
+ "name": "Dollar na Beilíse",
+ "symbol": "BZD"
+ },
+ "XCD": {
+ "name": "Dollar na Cairibe Thoir",
+ "symbol": "EC$"
+ },
+ "GYD": {
+ "name": "Dollar na Guáine",
+ "symbol": "GYD"
+ },
+ "AUD": {
+ "name": "Dollar na hAstráile",
+ "symbol": "A$"
+ },
+ "JMD": {
+ "name": "Dollar na hIamáice",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "Dollar na Libéire",
+ "symbol": "LRD"
+ },
+ "BSD": {
+ "name": "Dollar na mBahámaí",
+ "symbol": "BSD"
+ },
+ "NAD": {
+ "name": "Dollar na Namaibe",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "Dollar na Nua-Shéalainne",
+ "symbol": "NZ$"
+ },
+ "TWD": {
+ "name": "Dollar Nua na Téaváine",
+ "symbol": "NT$"
+ },
+ "KYD": {
+ "name": "Dollar Oileáin Cayman",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "Dollar Oileáin Sholomón",
+ "symbol": "SBD"
+ },
+ "TTD": {
+ "name": "Dollar Oileán na Tríonóide agus Tobága",
+ "symbol": "TTD"
+ },
+ "USD": {
+ "name": "Dollar S.A.M.",
+ "symbol": "$"
+ },
+ "SGD": {
+ "name": "Dollar Shingeapór",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "Dollar Shuranam",
+ "symbol": "SRD"
+ },
+ "VND": {
+ "name": "Dong Vítneam",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "Dram na hAirméine",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "Escudo Rinn Verde",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "AWG": {
+ "name": "Flóirín Arúba",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "Forint na hUngáire",
+ "symbol": "HUF"
+ },
+ "CDF": {
+ "name": "Franc an Chongó",
+ "symbol": "CDF"
+ },
+ "XOF": {
+ "name": "Franc CFA Iarthar na hAfraice",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Franc CFA na hAfraice Láir",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "Franc CFP",
+ "symbol": "CFPF"
+ },
+ "DJF": {
+ "name": "Franc Djibouti",
+ "symbol": "DJF"
+ },
+ "BIF": {
+ "name": "Franc na Burúine",
+ "symbol": "BIF"
+ },
+ "GNF": {
+ "name": "Franc na Guine",
+ "symbol": "GNF"
+ },
+ "CHF": {
+ "name": "Franc na hEilvéise",
+ "symbol": "CHF"
+ },
+ "KMF": {
+ "name": "Franc Oileáin Chomóra",
+ "symbol": "KMF"
+ },
+ "RWF": {
+ "name": "Franc Ruanda",
+ "symbol": "RWF"
+ },
+ "ANG": {
+ "name": "Gildear Aintillí na hÃsiltíre",
+ "symbol": "ANG"
+ },
+ "HTG": {
+ "name": "Gourde Háítí",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "Guaraní Pharagua",
+ "symbol": "PYG"
+ },
+ "UAH": {
+ "name": "Hryvnia na hÚcráine",
+ "symbol": "UAH"
+ },
+ "PGK": {
+ "name": "Kina Nua-Ghuine Phapua",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "Kip Laos",
+ "symbol": "LAK"
+ },
+ "CZK": {
+ "name": "Koruna Phoblacht na Seice",
+ "symbol": "CZK"
+ },
+ "ISK": {
+ "name": "Króna na hÃoslainne",
+ "symbol": "ISK"
+ },
+ "HRK": {
+ "name": "Kuna na Cróite",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "Kwacha na Maláive",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha na Saimbia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza Angóla",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "Kyat Mhaenmar",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "Lari na Seoirsia",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "Lek na hAlbáine",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "Lempira Hondúras",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "Leone Shiarra Leon",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "Leu na Moldóive",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "Leu na Rómáine",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "Lev na Bulgáire",
+ "symbol": "BGN"
+ },
+ "SZL": {
+ "name": "Lilangeni na Suasalainne",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "Lira na Tuirce",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "Litas na Liotuáine",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Loti Leosóta",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "Manat na hAsarbaiseáine",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "Manat na Tuircméanastáine",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "Marg Inmhalartaithe na Boisnia-Heirseagaivéine",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "Metical Mhósaimbíc",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira na Nigéire",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa na hEiritré",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "Ngultrum na Bútáine",
+ "symbol": "BTN"
+ },
+ "PEN": {
+ "name": "Nuevo Sol Pheiriú",
+ "symbol": "PEN"
+ },
+ "MRO": {
+ "name": "Ouguiya na Máratáine",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "Paʻanga Thonga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "Pataca Mhacao",
+ "symbol": "MOP"
+ },
+ "CUP": {
+ "name": "Peso Chúba",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "Peso Inmhalartaithe Chúba",
+ "symbol": "CUC"
+ },
+ "MXN": {
+ "name": "Peso Mheicsiceo",
+ "symbol": "MX$"
+ },
+ "COP": {
+ "name": "Peso na Colóime",
+ "symbol": "COP"
+ },
+ "ARS": {
+ "name": "Peso na hAirgintíne",
+ "symbol": "ARS"
+ },
+ "PHP": {
+ "name": "Peso na nOileán Filipíneach",
+ "symbol": "PHP"
+ },
+ "DOP": {
+ "name": "Peso na Poblachta Doiminicí",
+ "symbol": "DOP"
+ },
+ "CLP": {
+ "name": "Peso na Sile",
+ "symbol": "CLP"
+ },
+ "UYU": {
+ "name": "Peso Uragua",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "Pula na Botsuáine",
+ "symbol": "BWP"
+ },
+ "GIP": {
+ "name": "Punt Ghiobráltar",
+ "symbol": "GIP"
+ },
+ "EGP": {
+ "name": "Punt na hÉigipte",
+ "symbol": "EGP"
+ },
+ "LBP": {
+ "name": "Punt na Liobáine",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "Punt na Siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "Punt na Súdáine",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "Punt na Súdáine Theas",
+ "symbol": "SSP"
+ },
+ "FKP": {
+ "name": "Punt Oileáin Fháclainne",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "Punt San Héilin",
+ "symbol": "SHP"
+ },
+ "GBP": {
+ "name": "Punt Steirling",
+ "symbol": "£"
+ },
+ "GTQ": {
+ "name": "Quetzal Ghuatamala",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "Rand na hAfraice Theas",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "Real na Brasaíle",
+ "symbol": "R$"
+ },
+ "YER": {
+ "name": "Rial Éimin",
+ "symbol": "YER"
+ },
+ "IRR": {
+ "name": "Rial na hIaráine",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "Rial Óman",
+ "symbol": "OMR"
+ },
+ "KHR": {
+ "name": "Riel na Cambóide",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "Ringgit na Malaeisia",
+ "symbol": "MYR"
+ },
+ "QAR": {
+ "name": "Riyal Chatar",
+ "symbol": "QAR"
+ },
+ "SAR": {
+ "name": "Riyal na hAraibe Sádaí",
+ "symbol": "SAR"
+ },
+ "BYR": {
+ "name": "Rúbal na Bealarúise",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "Rúbal na Rúise",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "Rufiyaa Oileáin Mhaildíve",
+ "symbol": "MVR"
+ },
+ "INR": {
+ "name": "Rúipí na hIndia",
+ "symbol": "₹"
+ },
+ "PKR": {
+ "name": "Rúipí na Pacastáine",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "Rúipí na Séiséal",
+ "symbol": "SCR"
+ },
+ "NPR": {
+ "name": "Rúipí Neipeal",
+ "symbol": "NPR"
+ },
+ "MUR": {
+ "name": "Rúipí Oileán Mhuirís",
+ "symbol": "MUR"
+ },
+ "LKR": {
+ "name": "Rúipí Shrí Lanca",
+ "symbol": "LKR"
+ },
+ "IDR": {
+ "name": "Rupiah na hIndinéise",
+ "symbol": "IDR"
+ },
+ "KES": {
+ "name": "Scilling na Céinia",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Scilling na Somáile",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Scilling na Tansáine",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Scilling Uganda",
+ "symbol": "UGX"
+ },
+ "ILS": {
+ "name": "Seiceal Nua Iosrael",
+ "symbol": "₪"
+ },
+ "KGS": {
+ "name": "Som na Cirgeastáine",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "Somoni na Táidsíceastáine",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "Sum na hÚisbéiceastáine",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "Taka na Banglaidéise",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "Tala Shamó",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "Tenge na Casacstáine",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "Tugrik na Mongóile",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "Vatu Vanuatú",
+ "symbol": "VUV"
+ },
+ "KRW": {
+ "name": "Won na Cóiré Theas",
+ "symbol": "â‚©"
+ },
+ "KPW": {
+ "name": "Won na Cóiré Thuaidh",
+ "symbol": "KPW"
+ },
+ "JPY": {
+ "name": "Yen na Seapáine",
+ "symbol": "Â¥"
+ },
+ "CNY": {
+ "name": "Yuan na Síne",
+ "symbol": "CNÂ¥"
+ },
+ "PLN": {
+ "name": "Zloty na Polainne",
+ "symbol": "PLN"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/gd.json b/library/intl/resources/currency/gd.json
new file mode 100644
index 000000000..af3986af0
--- /dev/null
+++ b/library/intl/resources/currency/gd.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghani Afghanach",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "Ariary Madagasgarach",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "Baht Tàidheach",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "Balboa Panamach",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "Birr Itiopach",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "Bolívar Bheinisealach",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "Boliviano Boilibhiach",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "Cedi Gànach",
+ "symbol": "GHS"
+ },
+ "CRC": {
+ "name": "Colón Costa Rìceach",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "Colón Salbhadorach",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "Córdoba Niocaragach",
+ "symbol": "NIO"
+ },
+ "GMD": {
+ "name": "Dalasi Gaimbitheach",
+ "symbol": "GMD"
+ },
+ "MKD": {
+ "name": "Denar Masadonach",
+ "symbol": "MKD"
+ },
+ "DZD": {
+ "name": "Dinar Aildireach",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinar Bachraineach",
+ "symbol": "BHD"
+ },
+ "KWD": {
+ "name": "Dinar Cuibhèiteach",
+ "symbol": "KWD"
+ },
+ "IQD": {
+ "name": "Dinar Ioràcach",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "Dinar Iòrdanach",
+ "symbol": "JOD"
+ },
+ "LYD": {
+ "name": "Dinar Libitheach",
+ "symbol": "LYD"
+ },
+ "RSD": {
+ "name": "Dinar Sèirbeach",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "Dinar Tuiniseach",
+ "symbol": "TND"
+ },
+ "MAD": {
+ "name": "Dirham Morocach",
+ "symbol": "MAD"
+ },
+ "AED": {
+ "name": "Dirham nan Iomaratan Arabach Aonaichte",
+ "symbol": "AED"
+ },
+ "STD": {
+ "name": "Dobra São Tomé agus Príncipe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "Dolar Astràilianach",
+ "symbol": "A$"
+ },
+ "BBD": {
+ "name": "Dolar Barbadach",
+ "symbol": "BBD"
+ },
+ "BSD": {
+ "name": "Dolar Bathamach",
+ "symbol": "BSD"
+ },
+ "BMD": {
+ "name": "Dolar Bearmùdach",
+ "symbol": "BMD"
+ },
+ "BZD": {
+ "name": "Dolar Beilìseach",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "Dolar Brùnaigheach",
+ "symbol": "BND"
+ },
+ "KYD": {
+ "name": "Dolar Caimeanach",
+ "symbol": "KYD"
+ },
+ "CAD": {
+ "name": "Dolar Canadach",
+ "symbol": "CA$"
+ },
+ "XCD": {
+ "name": "Dolar Caraibeach earach",
+ "symbol": "EC$"
+ },
+ "JMD": {
+ "name": "Dolar Diameugach",
+ "symbol": "JMD"
+ },
+ "SBD": {
+ "name": "Dolar Eileanan Sholaimh",
+ "symbol": "SBD"
+ },
+ "FJD": {
+ "name": "Dolar Fìditheach",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "Dolar Guidheànach",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "Dolar Hong Kong",
+ "symbol": "HK$"
+ },
+ "LRD": {
+ "name": "Dolar Libèireach",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Dolar Naimibitheach",
+ "symbol": "NAD"
+ },
+ "USD": {
+ "name": "Dolar nan Stàitean Aonaichte",
+ "symbol": "$"
+ },
+ "NZD": {
+ "name": "Dolar Shealainn Nuaidh",
+ "symbol": "NZ$"
+ },
+ "SGD": {
+ "name": "Dolar Singeapòrach",
+ "symbol": "SGD"
+ },
+ "ZWL": {
+ "name": "Dolar Sìombabuthach (2009)",
+ "symbol": "ZWL"
+ },
+ "SRD": {
+ "name": "Dolar Suranamach",
+ "symbol": "SRD"
+ },
+ "TTD": {
+ "name": "Dolar Thrianaid agus Thobago",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "Dolar ùr Taidh-Bhànach",
+ "symbol": "NT$"
+ },
+ "VND": {
+ "name": "Dong Bhiet-Namach",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "Dram Airmeineach",
+ "symbol": "AMD"
+ },
+ "EUR": {
+ "name": "Eòro",
+ "symbol": "€"
+ },
+ "CVE": {
+ "name": "Escudo a’ Chip Uaine",
+ "symbol": "CVE"
+ },
+ "AWG": {
+ "name": "Florin Arùbach",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "Forint Ungaireach",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "Franc Burundaidheach",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Franc CFA Afraga an Iar",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Franc CFA Meadhan-Afragach",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "Franc CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "Franc Comorosach",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Franc Congothach",
+ "symbol": "CDF"
+ },
+ "DJF": {
+ "name": "Franc Diobùtaidheach",
+ "symbol": "DJF"
+ },
+ "CHF": {
+ "name": "Franc Eilbheiseach",
+ "symbol": "CHF"
+ },
+ "GNF": {
+ "name": "Franc Ginitheach",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "Franc Rubhandach",
+ "symbol": "RWF"
+ },
+ "HTG": {
+ "name": "Gourde Haidhteach",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "Guaraní Paraguaidheach",
+ "symbol": "PYG"
+ },
+ "ANG": {
+ "name": "Gulden Eileanan Aintilia nan Tìrean Ìsle",
+ "symbol": "ANG"
+ },
+ "UAH": {
+ "name": "Hryvnia Ucràineach",
+ "symbol": "UAH"
+ },
+ "PGK": {
+ "name": "Kina Ghini Nuaidh Paputhaiche",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "Kip Làthosach",
+ "symbol": "LAK"
+ },
+ "CZK": {
+ "name": "Koruna Seiceach",
+ "symbol": "CZK"
+ },
+ "ISK": {
+ "name": "Króna Innis Tìleach",
+ "symbol": "ISK"
+ },
+ "SEK": {
+ "name": "Krona Suaineach",
+ "symbol": "SEK"
+ },
+ "DKK": {
+ "name": "Krone Danmhairgeach",
+ "symbol": "DKK"
+ },
+ "NOK": {
+ "name": "Krone Nirribheach",
+ "symbol": "NOK"
+ },
+ "HRK": {
+ "name": "Kuna Cròthaiseach",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "Kwacha Malabhaidheach",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha Sàimbitheach",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza Angòlach",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "Kyat Miànmarach",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "Lari Cairtbheileach",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "Lek Albàineach",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "Lempira Hondùrach",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "Leone Siarra Leòmhannach",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "Leu Moldobhach",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "Leu Romàineach",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "Lev Bulgarach",
+ "symbol": "BGN"
+ },
+ "SZL": {
+ "name": "Lilangeni Suasaidheach",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "Lira Turcach",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "Litas Liotuaineach",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Loti Leasotach",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "Manat Asarbaideànach",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "Manat Turcmanach",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "Mark iompachail Bhosna agus Hearsagobhana",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "Metical Mòsaimbiceach",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira Nigèiriach",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa Eartrach",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "Ngultrum Butànach",
+ "symbol": "BTN"
+ },
+ "MRO": {
+ "name": "Ouguiya Moratàineach",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "Paʻanga Tongach",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "Pataca Macàthuach",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "Peso Argantaineach",
+ "symbol": "ARS"
+ },
+ "COP": {
+ "name": "Peso Coloimbeach",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "Peso Cùbach",
+ "symbol": "CUP"
+ },
+ "DOP": {
+ "name": "Peso Doiminiceach",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "Peso Filipineach",
+ "symbol": "PHP"
+ },
+ "CUC": {
+ "name": "Peso iompachail Cùbach",
+ "symbol": "CUC"
+ },
+ "MXN": {
+ "name": "Peso Meagsagach",
+ "symbol": "MX$"
+ },
+ "CLP": {
+ "name": "Peso Sileach",
+ "symbol": "CLP"
+ },
+ "UYU": {
+ "name": "Peso Uruguaidheach",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "Pula Botsuanach",
+ "symbol": "BWP"
+ },
+ "GIP": {
+ "name": "Punnd Diobraltarach",
+ "symbol": "GIP"
+ },
+ "SHP": {
+ "name": "Punnd Eilean Naomh Eilidh",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "Punnd Èipheiteach",
+ "symbol": "EGP"
+ },
+ "FKP": {
+ "name": "Punnd Fàclannach",
+ "symbol": "FKP"
+ },
+ "LBP": {
+ "name": "Punnd Leabanach",
+ "symbol": "LBP"
+ },
+ "GBP": {
+ "name": "Punnd Sasannach",
+ "symbol": "£"
+ },
+ "SYP": {
+ "name": "Punnd Siridheach",
+ "symbol": "SYP"
+ },
+ "SSP": {
+ "name": "Punnd Sudàin a Deas",
+ "symbol": "SSP"
+ },
+ "SDG": {
+ "name": "Punnd Sudànach",
+ "symbol": "SDG"
+ },
+ "GTQ": {
+ "name": "Quetzal Guatamalach",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "Rand Afraga a Deas",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "Real Braisileach",
+ "symbol": "R$"
+ },
+ "QAR": {
+ "name": "Rial Catarach",
+ "symbol": "QAR"
+ },
+ "YER": {
+ "name": "Rial Eamanach",
+ "symbol": "YER"
+ },
+ "IRR": {
+ "name": "Rial Iorànach",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "Rial Omànach",
+ "symbol": "OMR"
+ },
+ "KHR": {
+ "name": "Riel Cambuideach",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "Ringgit Malaidheach",
+ "symbol": "MYR"
+ },
+ "SAR": {
+ "name": "Riyal Sabhdach",
+ "symbol": "SAR"
+ },
+ "BYR": {
+ "name": "Rùbal Bealaruiseach",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "Rùbal Ruiseach",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "Rufiyaa Maladaibheach",
+ "symbol": "MVR"
+ },
+ "INR": {
+ "name": "Rupee Innseanach",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupee Moiriseasach",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "Rupee Neapàlach",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "Rupee Pagastànach",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "Rupee Seiseallach",
+ "symbol": "SCR"
+ },
+ "LKR": {
+ "name": "Rupee Sri Lancach",
+ "symbol": "LKR"
+ },
+ "IDR": {
+ "name": "Rupiah Innd-Innseach",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "Sheqel ùr Iosraeleach",
+ "symbol": "₪"
+ },
+ "KES": {
+ "name": "Shilling Ceineach",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Shilling Somàilitheach",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Shilling Tansanaidheach",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Shilling Ugandach",
+ "symbol": "UGX"
+ },
+ "PEN": {
+ "name": "Sol ùr Pearùthach",
+ "symbol": "PEN"
+ },
+ "KGS": {
+ "name": "Som Cìorgasach",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "Som Usbagach",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "Somoni Taidigeach",
+ "symbol": "TJS"
+ },
+ "BDT": {
+ "name": "Taka Bangladaiseach",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "Tala Samothach",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "Tenge Casachach",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "Tugrik Mongolach",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "Vatu Vanuatuthach",
+ "symbol": "VUV"
+ },
+ "KRW": {
+ "name": "Won Choirèa a Deas",
+ "symbol": "â‚©"
+ },
+ "KPW": {
+ "name": "Won Choirèa a Tuath",
+ "symbol": "KPW"
+ },
+ "JPY": {
+ "name": "Yen Seapanach",
+ "symbol": "JPÂ¥"
+ },
+ "CNY": {
+ "name": "Yuan Sìneach",
+ "symbol": "CNÂ¥"
+ },
+ "PLN": {
+ "name": "Złoty Pòlainneach",
+ "symbol": "PLN"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/gl.json b/library/intl/resources/currency/gl.json
new file mode 100644
index 000000000..dd76c8479
--- /dev/null
+++ b/library/intl/resources/currency/gl.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afgani afgano",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "Ariary malgaxe",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "Baht tailandés",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "Balboa panameño",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "Birr etíope",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "Bolívar venezolano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "Boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "Cedi de Gana",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "Chelín kenyano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Chelín somalí",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Chelín tanzano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Chelín ugandés",
+ "symbol": "UGX"
+ },
+ "CRC": {
+ "name": "Colón costarricense",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "Colón salvadoreño",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "Córdoba de ouro nicaragüense",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "Coroa checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Coroa dinamarquesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "Coroa islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "Coroa norueguesa",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "Coroa sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "Dalasi gambiano",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinar alxeriano",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinar de Baréin",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "Dinar iraquí",
+ "symbol": "IQD"
+ },
+ "KWD": {
+ "name": "Dinar kuwaití",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "Dinar libio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "Dinar macedonio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "Dinar serbio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "Dinar tunesino",
+ "symbol": "TND"
+ },
+ "JOD": {
+ "name": "Dinar xordano",
+ "symbol": "JOD"
+ },
+ "AED": {
+ "name": "Dirham dos Emiratos Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham marroquí",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "Dobra de San Tomé e Príncipe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "Dólar australiano",
+ "symbol": "$A"
+ },
+ "BZD": {
+ "name": "Dólar beliceño",
+ "symbol": "BZD"
+ },
+ "CAD": {
+ "name": "Dólar canadiano",
+ "symbol": "$CA"
+ },
+ "XCD": {
+ "name": "Dólar Caribe-Leste",
+ "symbol": "EC$"
+ },
+ "BSD": {
+ "name": "Dólar das Bahamas",
+ "symbol": "BSD"
+ },
+ "BMD": {
+ "name": "Dólar das Bemudas",
+ "symbol": "BMD"
+ },
+ "KYD": {
+ "name": "Dólar das Illas Caimán",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "Dólar das Illas Salomón",
+ "symbol": "SBD"
+ },
+ "BBD": {
+ "name": "Dólar de Barbados",
+ "symbol": "BBD"
+ },
+ "BND": {
+ "name": "Dólar de Brunei",
+ "symbol": "BND"
+ },
+ "HKD": {
+ "name": "Dólar de Hong Kong",
+ "symbol": "$HK"
+ },
+ "SGD": {
+ "name": "Dólar de Singapur",
+ "symbol": "SGD"
+ },
+ "TTD": {
+ "name": "Dólar de Trinidade e Tobago",
+ "symbol": "TTD"
+ },
+ "USD": {
+ "name": "Dólar estadounidense",
+ "symbol": "$"
+ },
+ "FJD": {
+ "name": "Dólar fixiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "Dólar güianés",
+ "symbol": "GYD"
+ },
+ "LRD": {
+ "name": "Dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Dólar namibio",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "Dólar neozelandés",
+ "symbol": "NZ$"
+ },
+ "SRD": {
+ "name": "Dólar surinamés",
+ "symbol": "SRD"
+ },
+ "JMD": {
+ "name": "Dólar xamaicano",
+ "symbol": "JMD"
+ },
+ "VND": {
+ "name": "Dong vietnamita",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "Dram armenio",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "Escudo caboverdiano",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "AWG": {
+ "name": "Florín arubeño",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "Florín das Antillas Neerlandesas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "Florín húngaro",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "Franco burundés",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Franco CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Franco CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "Franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "Franco comoriano",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Franco congolés",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "Franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "Franco ruandés",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Franco suízo",
+ "symbol": "CHF"
+ },
+ "DJF": {
+ "name": "Franco xibutiano",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "Gourde haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "Grivna ucraína",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "Guaraní paraguaio",
+ "symbol": "PYG"
+ },
+ "JPY": {
+ "name": "Ien xaponés",
+ "symbol": "Â¥JP"
+ },
+ "CNY": {
+ "name": "Iuán chinés",
+ "symbol": "CNÂ¥"
+ },
+ "MMK": {
+ "name": "Kiat birmano",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "Kina de Papúa Nova Guinea",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "Kip laosiano",
+ "symbol": "LAK"
+ },
+ "HRK": {
+ "name": "Kuna croata",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "Kwacha de Malaui",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha zambiano",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza angoleño",
+ "symbol": "AOA"
+ },
+ "GEL": {
+ "name": "Lari xeorxiano",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "Lek albanés",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "Lempira hondureño",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "Leone de Serra Leoa",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "Leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "Leu romanés",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "Lev búlgaro",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "Libra das Malvinas",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "Libra de Santa Helena",
+ "symbol": "SHP"
+ },
+ "GIP": {
+ "name": "Libra de Xibraltar",
+ "symbol": "GIP"
+ },
+ "GBP": {
+ "name": "Libra esterlina",
+ "symbol": "£"
+ },
+ "EGP": {
+ "name": "Libra exipcia",
+ "symbol": "EGP"
+ },
+ "LBP": {
+ "name": "Libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "Libra siria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "Libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "Libra sursudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "Lilanxeni de Suacilandia",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "Lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "Litas lituana",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Loti de Lesoto",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "Manat acerbaixano",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "Manat turcomano",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "Marco convertible de Bosnia e Hercegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "Metical de Mozambique",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira nixeriano",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa eritreo",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "Ngultrum butanés",
+ "symbol": "BTN"
+ },
+ "TWD": {
+ "name": "Novo dólar taiwanés",
+ "symbol": "$NT"
+ },
+ "ILS": {
+ "name": "Novo shequel israelí",
+ "symbol": "₪"
+ },
+ "MRO": {
+ "name": "Ouguiya mauritano",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "Paʻanga de Tonga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "Pataca de Macau",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "Peso arxentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "Peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "Peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "Peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "Peso cubano convertible",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "Peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "Peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "Peso mexicano",
+ "symbol": "$MX"
+ },
+ "UYU": {
+ "name": "Peso uruguaio",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "Pula botsuano",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "Quetzal guatemalteco",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "Rand sudafricano",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "Real brasileiro",
+ "symbol": "$R"
+ },
+ "YER": {
+ "name": "Rial iemení",
+ "symbol": "YER"
+ },
+ "IRR": {
+ "name": "Rial iraniano",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "Rial omaní",
+ "symbol": "OMR"
+ },
+ "QAR": {
+ "name": "Rial qatarí",
+ "symbol": "QAR"
+ },
+ "SAR": {
+ "name": "Rial saudita",
+ "symbol": "SAR"
+ },
+ "KHR": {
+ "name": "Riel camboxano",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "Ringgit malaio",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "Rublo bielorruso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "Rublo ruso",
+ "symbol": "RUB"
+ },
+ "MUR": {
+ "name": "Rupia de Mauricio",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupia de Seixeles",
+ "symbol": "SCR"
+ },
+ "LKR": {
+ "name": "Rupia de Sri Lanka",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "Rupia india",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Rupia indonesia",
+ "symbol": "IDR"
+ },
+ "MVR": {
+ "name": "Rupia maldiva",
+ "symbol": "MVR"
+ },
+ "NPR": {
+ "name": "Rupia nepalesa",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "Rupia paquistaní",
+ "symbol": "PKR"
+ },
+ "PEN": {
+ "name": "Sol novo peruano",
+ "symbol": "PEN"
+ },
+ "KGS": {
+ "name": "Som quirguizo",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "Som usbeco",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "Somoni taxico",
+ "symbol": "TJS"
+ },
+ "BDT": {
+ "name": "Taka de Bangladesh",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "Tala samoano",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "Tenge casaco",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "Tugrik mongol",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "Vatu vanuatense",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "Won norcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "Won surcoreano",
+ "symbol": "â‚©"
+ },
+ "PLN": {
+ "name": "Zloty polaco",
+ "symbol": "PLN"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/gsw.json b/library/intl/resources/currency/gsw.json
new file mode 100644
index 000000000..573c61104
--- /dev/null
+++ b/library/intl/resources/currency/gsw.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghani",
+ "symbol": "AFN"
+ },
+ "EGP": {
+ "name": "Ägüptischs Pfund",
+ "symbol": "EGP"
+ },
+ "DZD": {
+ "name": "Algeerischi Dinar",
+ "symbol": "DZD"
+ },
+ "ARS": {
+ "name": "Argentinische Peso",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "Aruba Florin",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "Aserbeidschanische Manat",
+ "symbol": "AZN"
+ },
+ "ETB": {
+ "name": "Äthiopische Birr",
+ "symbol": "ETB"
+ },
+ "AUD": {
+ "name": "Auschtralische Dollar",
+ "symbol": "A$"
+ },
+ "BSD": {
+ "name": "Bahama-Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahrain-Dinar",
+ "symbol": "BHD"
+ },
+ "THB": {
+ "name": "Baht",
+ "symbol": "THB"
+ },
+ "PAB": {
+ "name": "Balboa",
+ "symbol": "PAB"
+ },
+ "BBD": {
+ "name": "Barbados-Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Belarus Rubel (nöi)",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Belize-Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermuda-Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutanische Ngultrum",
+ "symbol": "BTN"
+ },
+ "VEF": {
+ "name": "Bolivar",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "Boliviano",
+ "symbol": "BOB"
+ },
+ "BWP": {
+ "name": "Botswanische Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brasilianische Real",
+ "symbol": "R$"
+ },
+ "BND": {
+ "name": "Brunei-Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarische Lew",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundi-Franc",
+ "symbol": "BIF"
+ },
+ "XAF": {
+ "name": "CFA-Franc (Äquatoriaal)",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "CFA-Franc (Wescht)",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "CFP-Franc",
+ "symbol": "CFPF"
+ },
+ "CRC": {
+ "name": "Costa Rica Colon",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "MKD": {
+ "name": "Denar",
+ "symbol": "MKD"
+ },
+ "STD": {
+ "name": "Dobra",
+ "symbol": "STD"
+ },
+ "VND": {
+ "name": "Dong",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "Dram",
+ "symbol": "AMD"
+ },
+ "DJF": {
+ "name": "Dschibuti-Franc",
+ "symbol": "DJF"
+ },
+ "SVC": {
+ "name": "El-Salvador-Colon",
+ "symbol": "SVC"
+ },
+ "ERN": {
+ "name": "Eritreische Nakfa",
+ "symbol": "ERN"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland-Pfund",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fidschi Dollar",
+ "symbol": "FJD"
+ },
+ "HUF": {
+ "name": "Forint",
+ "symbol": "HUF"
+ },
+ "GMD": {
+ "name": "Gambische Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgische Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaische Cedi (GHS)",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar-Pfund",
+ "symbol": "GIP"
+ },
+ "HTG": {
+ "name": "Gourde",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "Guarani",
+ "symbol": "PYG"
+ },
+ "GNF": {
+ "name": "Guinea-Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyana-Dollar",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "Hongkong-Dollar",
+ "symbol": "HK$"
+ },
+ "UAH": {
+ "name": "Hryvnia",
+ "symbol": "UAH"
+ },
+ "ISK": {
+ "name": "Iisländischi Chroone",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indischi Rupie",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesischi Rupie",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "Irak-Dinar",
+ "symbol": "IQD"
+ },
+ "JMD": {
+ "name": "Jamaika-Dollar",
+ "symbol": "JMD"
+ },
+ "YER": {
+ "name": "Jeme-Rial",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "Jordaanische Dinar",
+ "symbol": "JOD"
+ },
+ "KYD": {
+ "name": "Kaiman-Dollar",
+ "symbol": "KYD"
+ },
+ "CAD": {
+ "name": "Kanadische Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Kap Verde Escudo",
+ "symbol": "CVE"
+ },
+ "QAR": {
+ "name": "Katar-Riyal",
+ "symbol": "QAR"
+ },
+ "KES": {
+ "name": "Kenia-Schilling",
+ "symbol": "KES"
+ },
+ "PGK": {
+ "name": "Kina",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "Kip",
+ "symbol": "LAK"
+ },
+ "COP": {
+ "name": "Kolumbianische Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Komore-Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Kongolesische Franc",
+ "symbol": "CDF"
+ },
+ "BAM": {
+ "name": "Konvertierbari Mark vo Bosnie und Herzegowina",
+ "symbol": "BAM"
+ },
+ "CUP": {
+ "name": "Kubanische Peso",
+ "symbol": "CUP"
+ },
+ "HRK": {
+ "name": "Kuna",
+ "symbol": "HRK"
+ },
+ "KWD": {
+ "name": "Kuwait-Dinar",
+ "symbol": "KWD"
+ },
+ "ZMW": {
+ "name": "Kwacha",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "Kyat",
+ "symbol": "MMK"
+ },
+ "ALL": {
+ "name": "Lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "Lempira",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "Leone",
+ "symbol": "SLL"
+ },
+ "LBP": {
+ "name": "Libaneesischs Pfund",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "Liberiaanische Dollar",
+ "symbol": "LRD"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LTL": {
+ "name": "Litauische Litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Loti",
+ "symbol": "LSL"
+ },
+ "LYD": {
+ "name": "Lüübische Dinar",
+ "symbol": "LYD"
+ },
+ "MGA": {
+ "name": "Madagaschkar-Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawi-Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malaysische Ringgit",
+ "symbol": "MYR"
+ },
+ "MAD": {
+ "name": "Marokkanische Dirham",
+ "symbol": "MAD"
+ },
+ "MUR": {
+ "name": "Maurizius-Rupie",
+ "symbol": "MUR"
+ },
+ "MZN": {
+ "name": "Metical",
+ "symbol": "MZN"
+ },
+ "MXN": {
+ "name": "Mexikanische Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldau-Löi",
+ "symbol": "MDL"
+ },
+ "NGN": {
+ "name": "Naira",
+ "symbol": "NGN"
+ },
+ "NAD": {
+ "name": "Namibia-Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepaleesischi Rupie",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "Neuseeland-Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "Nicaragua-Córdoba",
+ "symbol": "NIO"
+ },
+ "ANG": {
+ "name": "Niderländischi-Antille-Gulde",
+ "symbol": "ANG"
+ },
+ "PEN": {
+ "name": "Nöie Sol",
+ "symbol": "PEN"
+ },
+ "TWD": {
+ "name": "Nöii Taiwan-Dollar",
+ "symbol": "NT$"
+ },
+ "TRY": {
+ "name": "Nöii Türkischi Liire",
+ "symbol": "TRY"
+ },
+ "KPW": {
+ "name": "Nordkoreanische Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norweegischi Chroone",
+ "symbol": "NOK"
+ },
+ "XCD": {
+ "name": "Oschtkaribische Dollar",
+ "symbol": "EC$"
+ },
+ "MRO": {
+ "name": "Ouguiya",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "Paʻanga",
+ "symbol": "TOP"
+ },
+ "PKR": {
+ "name": "Pakischtanischi Rupie",
+ "symbol": "PKR"
+ },
+ "MOP": {
+ "name": "Pataca",
+ "symbol": "MOP"
+ },
+ "GBP": {
+ "name": "Pfund Schtörling",
+ "symbol": "£"
+ },
+ "PHP": {
+ "name": "Philippiinische Peso",
+ "symbol": "PHP"
+ },
+ "GTQ": {
+ "name": "Quetzal",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "Rand",
+ "symbol": "ZAR"
+ },
+ "CNY": {
+ "name": "Renminbi Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "IRR": {
+ "name": "Rial",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "Rial Omani",
+ "symbol": "OMR"
+ },
+ "KHR": {
+ "name": "Riel",
+ "symbol": "KHR"
+ },
+ "RWF": {
+ "name": "Ruanda-Franc",
+ "symbol": "RWF"
+ },
+ "MVR": {
+ "name": "Rufiyaa",
+ "symbol": "MVR"
+ },
+ "RON": {
+ "name": "Rumäänische Löi",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russische Rubel",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "Salomone-Dollar",
+ "symbol": "SBD"
+ },
+ "SAR": {
+ "name": "Saudi-Riyal",
+ "symbol": "SAR"
+ },
+ "ILS": {
+ "name": "Schekel",
+ "symbol": "₪"
+ },
+ "SEK": {
+ "name": "Schweedischi Chroone",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Schwiizer Franke",
+ "symbol": "CHF"
+ },
+ "RSD": {
+ "name": "Serbische Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seyschelle-Rupie",
+ "symbol": "SCR"
+ },
+ "SGD": {
+ "name": "Singapur-Dollar",
+ "symbol": "SGD"
+ },
+ "KGS": {
+ "name": "Som",
+ "symbol": "KGS"
+ },
+ "SOS": {
+ "name": "Somalia-Schilling",
+ "symbol": "SOS"
+ },
+ "LKR": {
+ "name": "Sri-Lanka-Rupie",
+ "symbol": "LKR"
+ },
+ "SHP": {
+ "name": "St.-Helena-Pfund",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Sudaneesischs Pfund",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamische Dollar",
+ "symbol": "SRD"
+ },
+ "KRW": {
+ "name": "Süüdkoreanische Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "Süüdsudaneesischs Pfund",
+ "symbol": "SSP"
+ },
+ "SYP": {
+ "name": "Süürischs Pfund",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tadschikischtan-Somoni",
+ "symbol": "TJS"
+ },
+ "BDT": {
+ "name": "Taka",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "Tala",
+ "symbol": "WST"
+ },
+ "DKK": {
+ "name": "Tänischi Chroone",
+ "symbol": "DKK"
+ },
+ "TZS": {
+ "name": "Tansania-Schilling",
+ "symbol": "TZS"
+ },
+ "KZT": {
+ "name": "Tenge",
+ "symbol": "KZT"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "DOP": {
+ "name": "Tominikanische Peso",
+ "symbol": "DOP"
+ },
+ "TTD": {
+ "name": "Trinidad-und-Tobago-Dollar",
+ "symbol": "TTD"
+ },
+ "CZK": {
+ "name": "Tschechischi Chroone",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "Tschileenische Peso",
+ "symbol": "CLP"
+ },
+ "MNT": {
+ "name": "Tugrik",
+ "symbol": "MNT"
+ },
+ "TND": {
+ "name": "Tuneesische Dinar",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "UAE Dirham",
+ "symbol": "AED"
+ },
+ "UGX": {
+ "name": "Uganda-Schilling",
+ "symbol": "UGX"
+ },
+ "UYU": {
+ "name": "Uruguayische Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US-Dollar",
+ "symbol": "$"
+ },
+ "UZS": {
+ "name": "Usbeekischtan-Sum",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vatu",
+ "symbol": "VUV"
+ },
+ "JPY": {
+ "name": "Yen",
+ "symbol": "Â¥"
+ },
+ "PLN": {
+ "name": "Zloty",
+ "symbol": "PLN"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/gu.json b/library/intl/resources/currency/gu.json
new file mode 100644
index 000000000..8e795a255
--- /dev/null
+++ b/library/intl/resources/currency/gu.json
@@ -0,0 +1,634 @@
+{
+ "XOF": {
+ "name": "[CFA] ફà«àª°à«‡àª‚ક [BCEAO]",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "[CFA] ફà«àª°à«‡àª‚ક [BEAC]",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "[CFP] ફà«àª°à«‡àª‚ક",
+ "symbol": "CFPF"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "AOA": {
+ "name": "અંગોલિયન કà«àªµàª¾àª¨à«àªàª¾",
+ "symbol": "AOA"
+ },
+ "AZN": {
+ "name": "અàªàª°àª¬à«ˆàªœàª¾àª¨à«€ મનાત",
+ "symbol": "AZN"
+ },
+ "AFN": {
+ "name": "અફà«àª—ાન અફà«àª—ાની",
+ "symbol": "AFN"
+ },
+ "AWG": {
+ "name": "અરà«àª¬àª¨ ફà«àª²à«‹àª°àª¿àª¨",
+ "symbol": "AWG"
+ },
+ "ARS": {
+ "name": "અરà«àªœà«‡àª¨à«àªŸà«€àª¨àª¾ પેસો",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "અરà«àª®à«‡àª¨àª¿àª¯àª¨ ડà«àª°à«‡àª®",
+ "symbol": "AMD"
+ },
+ "DZD": {
+ "name": "અલà«àªœàª¿àª°àª¿àª¯àª¨ દિનાર",
+ "symbol": "DZD"
+ },
+ "ALL": {
+ "name": "અલà«àª¬à«‡àª¨àª¿àª¯àª¨ લેક",
+ "symbol": "ALL"
+ },
+ "ISK": {
+ "name": "આઇસલેનà«àª¡àª¿àª• કà«àª°à«‹àª¨àª¾",
+ "symbol": "ISK"
+ },
+ "EGP": {
+ "name": "ઇજિપà«àª¤àª¿àª¯àª¨ પાઉનà«àª¡",
+ "symbol": "EGP"
+ },
+ "ILS": {
+ "name": "ઇàªàª°àª¾àª¯à«‡àª²à«€ નà«àª¯à« શેકલ",
+ "symbol": "₪"
+ },
+ "ETB": {
+ "name": "ઇથિયોપીયન બિર",
+ "symbol": "ETB"
+ },
+ "IDR": {
+ "name": "ઇનà«àª¡à«‹àª¨à«‡àª¶àª¿àª¯àª¨ રૂપિયા",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "ઇરાકી દિનાર",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "ઇરાનિયન રિયાલ",
+ "symbol": "IRR"
+ },
+ "XCD": {
+ "name": "ઇસà«àªŸ કેરિબિયન ડોલર",
+ "symbol": "EC$"
+ },
+ "UZS": {
+ "name": "ઉàªà«àª¬à«‡àª•àª¿àª¸à«àª¤àª¾àª¨ સોમ",
+ "symbol": "UZS"
+ },
+ "KPW": {
+ "name": "ઉતà«àª¤àª° કોરિયન વન",
+ "symbol": "KPW"
+ },
+ "UYU": {
+ "name": "ઉરà«àª—à«àªµà«‡àª¯àª¨ પેસો",
+ "symbol": "UYU"
+ },
+ "ERN": {
+ "name": "àªàª°àª¿àªŸà«àª°à«‡àª¯àª¨ નકà«àª«àª¾",
+ "symbol": "ERN"
+ },
+ "AUD": {
+ "name": "ઑસà«àªŸà«àª°à«‡àª²àª¿àª¯àª¨ ડૉલર",
+ "symbol": "A$"
+ },
+ "OMR": {
+ "name": "ઓમાની રિયાલ",
+ "symbol": "OMR"
+ },
+ "KZT": {
+ "name": "કàªàª¾àª•àª¿àª¸à«àª¤àª¾àª¨à«€ ટેંગ",
+ "symbol": "KZT"
+ },
+ "QAR": {
+ "name": "કતારી રિયાલ",
+ "symbol": "QAR"
+ },
+ "KGS": {
+ "name": "કિરà«àª—િસà«àª¤àª¾àª¨à«€ સોમ",
+ "symbol": "KGS"
+ },
+ "KWD": {
+ "name": "કà«àªµà«ˆàª¤à«€ દિનાર",
+ "symbol": "KWD"
+ },
+ "CAD": {
+ "name": "કેનેડિયન ડૉલર",
+ "symbol": "CA$"
+ },
+ "KES": {
+ "name": "કેનà«àª¯à«‡àª¨ શિલિંગ",
+ "symbol": "KES"
+ },
+ "CVE": {
+ "name": "કેપ વરà«àª¦àª¿àª¯àª¨ àªàª¸à«àª•à«àª¡à«‹",
+ "symbol": "CVE"
+ },
+ "KHR": {
+ "name": "કેમà«àª¬à«‹àª¡àª¿àª¯àª¨ રીઅલ",
+ "symbol": "KHR"
+ },
+ "KYD": {
+ "name": "કેયમેન આઇલેંડà«àª¸ ડોલર",
+ "symbol": "KYD"
+ },
+ "CDF": {
+ "name": "કોંગોલિઠફà«àª°à«‡àª‚ક",
+ "symbol": "CDF"
+ },
+ "KMF": {
+ "name": "કોમોરિઅન ફà«àª°à«‡àª‚ક",
+ "symbol": "KMF"
+ },
+ "COP": {
+ "name": "કોલમà«àª¬àª¿àª¯àª¨ પેસો",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "કોસà«àªŸàª¾ રિકન કોલોન",
+ "symbol": "CRC"
+ },
+ "CUP": {
+ "name": "કà«àª¯à«àª¬àª¨ પેસો",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "કà«àª¯à«àª¬àª¨ રૂપાંતર યોગà«àª¯ પેસો",
+ "symbol": "CUC"
+ },
+ "HRK": {
+ "name": "કà«àª°à«‹àªàª¶àª¿àª¯àª¨ કà«àª¯à«àª¨àª¾",
+ "symbol": "HRK"
+ },
+ "GYD": {
+ "name": "ગયાનિઠડોલર",
+ "symbol": "GYD"
+ },
+ "GNF": {
+ "name": "ગિનીયન ફà«àª°à«‡àª‚ક",
+ "symbol": "GNF"
+ },
+ "GMD": {
+ "name": "ગેમà«àª¬àª¿àª¯àª¨ દલાસી",
+ "symbol": "GMD"
+ },
+ "GTQ": {
+ "name": "ગà«àªµàª¾àªŸà«‡àª®àª¾àª²àª¾ કà«àª‡àªŸà«àªàª²",
+ "symbol": "GTQ"
+ },
+ "GHS": {
+ "name": "ઘાનાઇયન સેડી",
+ "symbol": "GHS"
+ },
+ "CNY": {
+ "name": "ચાઇનિઠયà«àª†àª¨",
+ "symbol": "CNÂ¥"
+ },
+ "CLP": {
+ "name": "ચિલિઅન પેસો",
+ "symbol": "CLP"
+ },
+ "CZK": {
+ "name": "ચેક રીપબà«àª²àª¿àª• કોરà«àª¨àª¾",
+ "symbol": "CZK"
+ },
+ "JMD": {
+ "name": "જમૈકિયન ડોલર",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "જાપાનીઠયેન",
+ "symbol": "JPÂ¥"
+ },
+ "DJF": {
+ "name": "જિબà«àªŸàª¿àª¯àª¨ ફà«àª°à«‡àª‚ક",
+ "symbol": "DJF"
+ },
+ "GIP": {
+ "name": "જીબà«àª°àª¾àª²à«àªŸàª° પાઉનà«àª¡",
+ "symbol": "GIP"
+ },
+ "JOD": {
+ "name": "જોરà«àª¡àª¨àª¿àª¯àª¨ દિનાર",
+ "symbol": "JOD"
+ },
+ "GEL": {
+ "name": "જà«àª¯à«‹àª°à«àªœàª¿àª…ન લારી",
+ "symbol": "GEL"
+ },
+ "ZMW": {
+ "name": "àªàª¾àª®à«àª¬àª¿àª¯àª¨ કà«àªµàª¾àªšàª¾",
+ "symbol": "ZMW"
+ },
+ "TOP": {
+ "name": "ટોંગન પ’અંગા",
+ "symbol": "TOP"
+ },
+ "TND": {
+ "name": "ટà«àª¯à«àª¨àª¿àª¶àª¿àª¯àª¨ દિનાર",
+ "symbol": "TND"
+ },
+ "DKK": {
+ "name": "ડેનિશ કà«àª°à«‹àª¨",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "ડોમિનિકન પેસો",
+ "symbol": "DOP"
+ },
+ "TJS": {
+ "name": "તાજિકિસà«àª¤àª¾àª¨à«€ સોમોની",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "તાનà«àªàª¾àª¨àª¿àª¯àª¨ શિલિંગ",
+ "symbol": "TZS"
+ },
+ "TMT": {
+ "name": "તà«àª°à«àª•àª®à«‡àª¨àª¿àª¸à«àª¤àª¾àª¨à«€ મનત",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "તà«àª°à«àª•àª¿àª¶ લિરા",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "તà«àª°àª¿àª¨àª¿àª¦àª¾àª¦ અને ટોબેગો ડોલર",
+ "symbol": "TTD"
+ },
+ "THB": {
+ "name": "થાઇ બાહà«àª¤",
+ "symbol": "฿"
+ },
+ "ZAR": {
+ "name": "દકà«àª·àª¿àª£ આફà«àª°àª¿àª•à«€ રેંડ",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "દકà«àª·àª¿àª£ કોરિયન વન",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "દકà«àª·àª¿àª£ સà«àª¦àª¾àª¨àª¿àª પાઉનà«àª¡",
+ "symbol": "SSP"
+ },
+ "NGN": {
+ "name": "નાઇજીરિયન નૈરા",
+ "symbol": "NGN"
+ },
+ "NAD": {
+ "name": "નામિબિયન ડોલર",
+ "symbol": "NAD"
+ },
+ "NIO": {
+ "name": "નિકારાગà«àª…ન કોરà«àª¡à«‹àª¬àª¾",
+ "symbol": "NIO"
+ },
+ "ANG": {
+ "name": "નેધરલેંડ àªàª‚ટિલિન ગિલà«àª¡àª°",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "નેપાલિઠરૂપી",
+ "symbol": "NPR"
+ },
+ "NOK": {
+ "name": "નૉરà«àªµà«‡àªœàª¿àª¯àª¨ કà«àª°à«‹àª¨",
+ "symbol": "NOK"
+ },
+ "TWD": {
+ "name": "નà«àª¯à« તાઇવાન ડૉલર",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "નà«àª¯à«‚àªàª¿àª²à«‡àª‚ડ ડૉલર",
+ "symbol": "NZ$"
+ },
+ "PAB": {
+ "name": "પનામેનિયન બાલà«àª¬à«‹àª†",
+ "symbol": "PAB"
+ },
+ "PYG": {
+ "name": "પરાગà«àªµà«‡àª¯àª¨ ગà«àª†àª°àª¾àª¨à«€",
+ "symbol": "PYG"
+ },
+ "PKR": {
+ "name": "પાકિસà«àª¤àª¾àª¨à«€ રૂપી",
+ "symbol": "PKR"
+ },
+ "PGK": {
+ "name": "પાપà«àª† નà«àª¯à«‚ ગિનીયન કિના",
+ "symbol": "PGK"
+ },
+ "PEN": {
+ "name": "પેરà«àªµàª¿àª¯àª¨ નà«àª¯à«àªµà«‹ સોલ",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "પોલિસ àªà«àª²à«‹àªŸà«€",
+ "symbol": "PLN"
+ },
+ "FJD": {
+ "name": "ફિજિઅન ડોલર",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "ફિલીપાઇન પેસો",
+ "symbol": "PHP"
+ },
+ "FKP": {
+ "name": "ફૉકલેનà«àª¡ આઇલેંડà«àª¸ પાઉનà«àª¡",
+ "symbol": "FKP"
+ },
+ "BMD": {
+ "name": "બરà«àª®à«àª¡àª¨ ડોલર",
+ "symbol": "BMD"
+ },
+ "BGN": {
+ "name": "બલà«àª—ેરીયન લેવ",
+ "symbol": "BGN"
+ },
+ "BSD": {
+ "name": "બહામિયન ડોલર",
+ "symbol": "BSD"
+ },
+ "BDT": {
+ "name": "બાંગલાદેશી ટાકા",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "બારà«àª¬àª¾àª¡àª¿àª¯àª¨ ડોલર",
+ "symbol": "BBD"
+ },
+ "BIF": {
+ "name": "બà«àª°à«àª¨à«àª¡àª¿àª¯àª¨ ફà«àª°à«‡àª‚ક",
+ "symbol": "BIF"
+ },
+ "BYR": {
+ "name": "બેલારà«àª¶àª¿àª¯àª¨ રૂબલ",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "બેલિઠડોલર",
+ "symbol": "BZD"
+ },
+ "BHD": {
+ "name": "બેહરિની દિનાર",
+ "symbol": "BHD"
+ },
+ "BWP": {
+ "name": "બોતà«àª¸àªµàª¾àª¨àª¨ પà«àª²àª¾",
+ "symbol": "BWP"
+ },
+ "BOB": {
+ "name": "બોલિવિયન બોલિવિયાનો",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "બોસà«àª¨àª¿àª¯àª¾ અને હરà«àªà«‡àª—ોવિના રૂપાંતર યોગà«àª¯ મારà«àª•",
+ "symbol": "BAM"
+ },
+ "BRL": {
+ "name": "બà«àª°àª¾àªàª¿àª²à«€àª¯àª¨ રિઆલ",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "બà«àª°àª¿àªŸàª¿àª¶ પાઉનà«àª¡ સà«àªŸàª°à«àª²àª¿àª‚ગ",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "બà«àª°à«àª¨à«‡àª‡ ડોલર",
+ "symbol": "BND"
+ },
+ "INR": {
+ "name": "ભારતીય રૂપિયા",
+ "symbol": "₹"
+ },
+ "BTN": {
+ "name": "ભà«àª¤àª¾àª¨àª¿àª àªàª‚ગà«àª²à«àª¤à«àª°àª®",
+ "symbol": "BTN"
+ },
+ "MYR": {
+ "name": "મલેશિયન રિંગà«àª—ેટ",
+ "symbol": "MYR"
+ },
+ "MOP": {
+ "name": "માકાનિઠપતાકા",
+ "symbol": "MOP"
+ },
+ "MGA": {
+ "name": "માલાગેસી અરીઆરી",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "માલાવિયન કà«àªµàª¾àªšàª¾",
+ "symbol": "MWK"
+ },
+ "MVR": {
+ "name": "માલà«àª¦àª¿àªµàª¿àª¯àª¨ રà«àª«àª¿àª¯àª¾",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "મેકà«àª¸àª¿àª•àª¨ પેસો",
+ "symbol": "MX$"
+ },
+ "MKD": {
+ "name": "મેસેડોનિયન દિનાર",
+ "symbol": "MKD"
+ },
+ "MNT": {
+ "name": "મોંગોલિયન ટગરિક",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "મોàªàª¾àª®à«àª¬àª¿àª•àª¨ મેટિકલ",
+ "symbol": "MZN"
+ },
+ "MRO": {
+ "name": "મોરીશેનિયન ઓગà«àª¯àª¾",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "મોરેશીઅન રૂપી",
+ "symbol": "MUR"
+ },
+ "MAD": {
+ "name": "મોરોકà«àª•àª¨ દિરહામ",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "મોલડોવેન લિયà«",
+ "symbol": "MDL"
+ },
+ "MMK": {
+ "name": "મà«àª¯àª¾àª‚માર કà«àª¯àª¾àª¤",
+ "symbol": "MMK"
+ },
+ "USD": {
+ "name": "યà«àªàª¸ ડોલર",
+ "symbol": "US$"
+ },
+ "UAH": {
+ "name": "યà«àª•à«àª°à«‡àª¨àª¿àª¯àª¨ હà«àª°àª¿àªµàª¿àª¨àª¿àª¯àª¾",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "યà«àª—ાંડન શિલિંગ",
+ "symbol": "UGX"
+ },
+ "AED": {
+ "name": "યà«àª¨àª¾àªˆàªŸà«‡àª¡ આરબ અમિરાત દિરહામ",
+ "symbol": "AED"
+ },
+ "EUR": {
+ "name": "યà«àª°à«‹",
+ "symbol": "€"
+ },
+ "YER": {
+ "name": "યેમેની રિઆલ",
+ "symbol": "YER"
+ },
+ "RWF": {
+ "name": "રવાંડન ફà«àª°à«‡àª‚ક",
+ "symbol": "RWF"
+ },
+ "RUB": {
+ "name": "રશિયન રબલ",
+ "symbol": "RUB"
+ },
+ "RON": {
+ "name": "રોમાનિયન લેઉ",
+ "symbol": "RON"
+ },
+ "LAK": {
+ "name": "લાઓશિયન કિપ",
+ "symbol": "LAK"
+ },
+ "LTL": {
+ "name": "લિથà«àªàª¨àª¿àª¯àª¨ લિતાસ",
+ "symbol": "LTL"
+ },
+ "LRD": {
+ "name": "લિબેરિયન ડોલર",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "લિબà«àª¯àª¨ દિનાર",
+ "symbol": "LYD"
+ },
+ "LBP": {
+ "name": "લેબેનિઠપાઉનà«àª¡",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "લેસોથો લોતી",
+ "symbol": "LSL"
+ },
+ "VUV": {
+ "name": "વનૌતૠવાતà«",
+ "symbol": "VUV"
+ },
+ "VND": {
+ "name": "વિયેતનામીસ ડોંગ",
+ "symbol": "â‚«"
+ },
+ "VEF": {
+ "name": "વેનેàªà«àªàª²àª¨ બોલિવર",
+ "symbol": "VEF"
+ },
+ "LKR": {
+ "name": "શà«àª°à«€ લંકન રૂપી",
+ "symbol": "LKR"
+ },
+ "WST": {
+ "name": "સમોઅન તાલા",
+ "symbol": "WST"
+ },
+ "RSD": {
+ "name": "સરà«àª¬àª¿àª¯àª¨ દિનાર",
+ "symbol": "RSD"
+ },
+ "SYP": {
+ "name": "સાઇરિયન પાઉનà«àª¡",
+ "symbol": "SYP"
+ },
+ "SAR": {
+ "name": "સાઉદી રિયાલ",
+ "symbol": "SAR"
+ },
+ "STD": {
+ "name": "સાઓ ટૉમ àªàª¨à«àª¡ પà«àª°àª¿àª‚સાઇપ ડોબà«àª°àª¾",
+ "symbol": "STD"
+ },
+ "SGD": {
+ "name": "સિંગાપà«àª° ડૉલર",
+ "symbol": "SGD"
+ },
+ "SLL": {
+ "name": "સિàªàª°àª¾ લિઓનિઅન લિઓન",
+ "symbol": "SLL"
+ },
+ "SDG": {
+ "name": "સà«àª¦àª¾àª¨àª¿àª પાઉનà«àª¡",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "સૂરીનામિઠડોલર",
+ "symbol": "SRD"
+ },
+ "SHP": {
+ "name": "સેંટ હેલેના પાઉનà«àª¡",
+ "symbol": "SHP"
+ },
+ "SCR": {
+ "name": "સેશેલોઈ રૂપી",
+ "symbol": "SCR"
+ },
+ "SOS": {
+ "name": "સોમાલી શિલિંગ",
+ "symbol": "SOS"
+ },
+ "SBD": {
+ "name": "સોલોમન આઇલેંડà«àª¸ ડોલર",
+ "symbol": "SBD"
+ },
+ "SZL": {
+ "name": "સà«àªµàª¾àªà«€ લિલાનà«àª—ેની",
+ "symbol": "SZL"
+ },
+ "CHF": {
+ "name": "સà«àªµàª¿àª¸ ફà«àª°à«‡àª‚ક",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "સà«àªµà«€àª¡àª¿àª¶ કà«àª°à«‹àª¨àª¾",
+ "symbol": "SEK"
+ },
+ "HUF": {
+ "name": "હંગેરીયન ફોરિનà«àª¤",
+ "symbol": "HUF"
+ },
+ "HTG": {
+ "name": "હાઇટિઇન ગોરà«àª¡",
+ "symbol": "HTG"
+ },
+ "HKD": {
+ "name": "હોંગ કોંગ ડૉલર",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "હોનà«àª¡à«àª¯à«àª°àª¨ લેમà«àªªàª¿àª°àª¾",
+ "symbol": "HNL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/guz.json b/library/intl/resources/currency/guz.json
new file mode 100644
index 000000000..4401f9af7
--- /dev/null
+++ b/library/intl/resources/currency/guz.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "MGA": {
+ "name": "Ariary ya Bukini",
+ "symbol": "MGA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Bir ya Uhabeshi",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi ya Gambia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinari ya Aljeria",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinari ya Bahareni",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinari ya Libya",
+ "symbol": "LYD"
+ },
+ "TND": {
+ "name": "Dinari ya Tunisia",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham ya Falme za Kiarabu",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham ya Moroko",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobra ya Sao Tome na Principe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "Dola ya Australia",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "Dola ya Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dola ya Liberia",
+ "symbol": "LRD"
+ },
+ "USD": {
+ "name": "Dola ya Marekani",
+ "symbol": "US$"
+ },
+ "NAD": {
+ "name": "Dola ya Namibia",
+ "symbol": "NAD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "Eskudo ya Kepuvede",
+ "symbol": "CVE"
+ },
+ "XOF": {
+ "name": "Faranga CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Faranga CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "BIF": {
+ "name": "Faranga ya Burundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Faranga ya Jibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Faranga ya Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Faranga ya Kongo",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Faranga ya Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Faranga ya Uswisi",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kwacha ya Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha ya Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza ya Angola",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leoni",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti ya Lesoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira ya Nijeria",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa ya Eritrea",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "EGP": {
+ "name": "Pauni ya Misri",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Pauni ya Santahelena",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Pauni ya Sudani",
+ "symbol": "SDG"
+ },
+ "GBP": {
+ "name": "Pauni ya Uingereza",
+ "symbol": "£"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pula ya Botswana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Randi ya Afrika Kusini",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riyal ya Saudia",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupia ya India",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupia ya Morisi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupia ya Shelisheli",
+ "symbol": "SCR"
+ },
+ "JPY": {
+ "name": "Sarafu ya Kijapani",
+ "symbol": "JPÂ¥"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "Shilingi ya Kenya",
+ "symbol": "Ksh"
+ },
+ "SOS": {
+ "name": "Shilingi ya Somalia",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Shilingi ya Tanzania",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Shilingi ya Uganda",
+ "symbol": "UGX"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ugwiya ya Moritania",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yuan Renminbi ya China",
+ "symbol": "CNÂ¥"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ha.json b/library/intl/resources/currency/ha.json
new file mode 100644
index 000000000..dfaa389e5
--- /dev/null
+++ b/library/intl/resources/currency/ha.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "USD": {
+ "name": "Dalar Amurka",
+ "symbol": "US$"
+ },
+ "CAD": {
+ "name": "Dalar Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dalar Laberiya",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Dalar Namibiya",
+ "symbol": "NAD"
+ },
+ "AUD": {
+ "name": "Dalar Ostareliya",
+ "symbol": "A$"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "GBP": {
+ "name": "Fam kin Ingila",
+ "symbol": "£"
+ },
+ "EGP": {
+ "name": "Fam kin Masar",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Fam kin San Helena",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Fam kin Sudan",
+ "symbol": "SDG"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "ZAR": {
+ "name": "KuÉ—in Afirka Ta Kudu",
+ "symbol": "ZAR"
+ },
+ "DZD": {
+ "name": "KuÉ—in Aljeriya",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "KuÉ—in Angola",
+ "symbol": "AOA"
+ },
+ "BHD": {
+ "name": "KuÉ—in Baharan",
+ "symbol": "BHD"
+ },
+ "BWP": {
+ "name": "KuÉ—in Baswana",
+ "symbol": "BWP"
+ },
+ "BIF": {
+ "name": "KuÉ—in Burundi",
+ "symbol": "BIF"
+ },
+ "CNY": {
+ "name": "KuÉ—in Caina\/Sin",
+ "symbol": "CNÂ¥"
+ },
+ "ERN": {
+ "name": "KuÉ—in Eritireya",
+ "symbol": "ERN"
+ },
+ "GMD": {
+ "name": "KuÉ—in Gambiya",
+ "symbol": "GMD"
+ },
+ "ETB": {
+ "name": "KuÉ—in Habasha",
+ "symbol": "ETB"
+ },
+ "AED": {
+ "name": "KuÉ—in HaÉ—aÉ—É—iyar Daular Larabawa",
+ "symbol": "AED"
+ },
+ "INR": {
+ "name": "KuÉ—in Indiya",
+ "symbol": "₹"
+ },
+ "JPY": {
+ "name": "KuÉ—in Japan",
+ "symbol": "JPÂ¥"
+ },
+ "DJF": {
+ "name": "KuÉ—in Jibuti",
+ "symbol": "DJF"
+ },
+ "CDF": {
+ "name": "KuÉ—in Kongo",
+ "symbol": "CDF"
+ },
+ "KMF": {
+ "name": "KuÉ—in Kwamoras",
+ "symbol": "KMF"
+ },
+ "LSL": {
+ "name": "KuÉ—in Lesoto",
+ "symbol": "LSL"
+ },
+ "LYD": {
+ "name": "KuÉ—in Libiya",
+ "symbol": "LYD"
+ },
+ "SZL": {
+ "name": "KuÉ—in Lilangeni",
+ "symbol": "SZL"
+ },
+ "MGA": {
+ "name": "KuÉ—in Madagaskar",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "KuÉ—in Malawi",
+ "symbol": "MWK"
+ },
+ "MAD": {
+ "name": "KuÉ—in Maroko",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "KuÉ—in Moritaniya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "KuÉ—in Moritus",
+ "symbol": "MUR"
+ },
+ "RWF": {
+ "name": "KuÉ—in Ruwanda",
+ "symbol": "RWF"
+ },
+ "SCR": {
+ "name": "KuÉ—in Saishal",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "KuÉ—in Salewo",
+ "symbol": "SLL"
+ },
+ "STD": {
+ "name": "KuÉ—in Sawo Tome da Paransip",
+ "symbol": "STD"
+ },
+ "XAF": {
+ "name": "KuÉ—in Sefa na Afirka Ta Tsakiya",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "KuÉ—in Sefa na Afirka Ta Yamma",
+ "symbol": "CFA"
+ },
+ "CHF": {
+ "name": "KuÉ—in Suwizalan",
+ "symbol": "CHF"
+ },
+ "TND": {
+ "name": "KuÉ—in Tunisiya",
+ "symbol": "TND"
+ },
+ "CVE": {
+ "name": "KuÉ—in Tsibiran Kap Barde",
+ "symbol": "CVE"
+ },
+ "ZMW": {
+ "name": "KuÉ—in Zambiya",
+ "symbol": "ZMW"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira",
+ "symbol": "₦"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "SAR": {
+ "name": "Riyal",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "UGX": {
+ "name": "Sule Yuganda",
+ "symbol": "UGX"
+ },
+ "KES": {
+ "name": "Sulen Kenya",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Sulen Somaliya",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Sulen Tanzaniya",
+ "symbol": "TZS"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/he.json b/library/intl/resources/currency/he.json
new file mode 100644
index 000000000..2b98751c7
--- /dev/null
+++ b/library/intl/resources/currency/he.json
@@ -0,0 +1,634 @@
+{
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "MRO": {
+ "name": "×וגוויה מ×וריטני",
+ "symbol": "MRO"
+ },
+ "EUR": {
+ "name": "×ירו",
+ "symbol": "€"
+ },
+ "CVE": {
+ "name": "×סקודו ×›×£ ורדה",
+ "symbol": "CVE"
+ },
+ "AFN": {
+ "name": "×פגני ×פגני",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "×רי×רי מלגשי",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "בהט ת×ילנדי",
+ "symbol": "฿"
+ },
+ "BOB": {
+ "name": "בוליבי×נו",
+ "symbol": "BOB"
+ },
+ "VEF": {
+ "name": "בוליבר ונצו×לי",
+ "symbol": "VEF"
+ },
+ "ETB": {
+ "name": "ביר ×תיופי",
+ "symbol": "ETB"
+ },
+ "PAB": {
+ "name": "בלבו××” פנמי",
+ "symbol": "PAB"
+ },
+ "PYG": {
+ "name": "גוורני פר×גוו××™",
+ "symbol": "PYG"
+ },
+ "HTG": {
+ "name": "גורד ×”×יטי",
+ "symbol": "HTG"
+ },
+ "ANG": {
+ "name": "גילדר של ×”×× ×˜×™×œ×™× ×”×”×•×œ× ×“×™×™×",
+ "symbol": "ANG"
+ },
+ "UAH": {
+ "name": "גריבנה ×וקר××™× ×™",
+ "symbol": "UAH"
+ },
+ "STD": {
+ "name": "דוברה של סן טומה ופרינסיפה",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "דולר ×וסטרלי",
+ "symbol": "A$"
+ },
+ "SBD": {
+ "name": "דולר ××™×™ שלמה",
+ "symbol": "SBD"
+ },
+ "USD": {
+ "name": "דולר ×מריק××™",
+ "symbol": "$"
+ },
+ "BSD": {
+ "name": "דולר בה×מי",
+ "symbol": "BSD"
+ },
+ "BZD": {
+ "name": "דולר בליזי",
+ "symbol": "BZD"
+ },
+ "BBD": {
+ "name": "דולר ברבדי×× ×™",
+ "symbol": "BBD"
+ },
+ "BND": {
+ "name": "דולר ברוניי",
+ "symbol": "BND"
+ },
+ "BMD": {
+ "name": "דולר ברמודה",
+ "symbol": "BMD"
+ },
+ "JMD": {
+ "name": "דולר ג׳מייקני",
+ "symbol": "JMD"
+ },
+ "GYD": {
+ "name": "דולר ×’×™×× ×™",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "דולר הונג קונגי",
+ "symbol": "HK$"
+ },
+ "TWD": {
+ "name": "דולר טייוו×× ×™ חדש",
+ "symbol": "NT$"
+ },
+ "TTD": {
+ "name": "דולר טרינידדי",
+ "symbol": "TTD"
+ },
+ "LRD": {
+ "name": "דולר ליברי",
+ "symbol": "LRD"
+ },
+ "XCD": {
+ "name": "דולר מזרח קריבי",
+ "symbol": "EC$"
+ },
+ "NZD": {
+ "name": "דולר ניו זילנדי",
+ "symbol": "NZ$"
+ },
+ "NAD": {
+ "name": "דולר נמיבי",
+ "symbol": "NAD"
+ },
+ "SRD": {
+ "name": "דולר סורינ×מי",
+ "symbol": "SRD"
+ },
+ "SGD": {
+ "name": "דולר סינגפורי",
+ "symbol": "SGD"
+ },
+ "FJD": {
+ "name": "דולר פיג׳י",
+ "symbol": "FJD"
+ },
+ "KYD": {
+ "name": "דולר קיימ×× ×™",
+ "symbol": "KYD"
+ },
+ "CAD": {
+ "name": "דולר קנדי",
+ "symbol": "CA$"
+ },
+ "VND": {
+ "name": "דונג וייטנ×מי",
+ "symbol": "â‚«"
+ },
+ "DZD": {
+ "name": "דינר ×לג׳ירי",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "דינר בחרייני",
+ "symbol": "BHD"
+ },
+ "TND": {
+ "name": "דינר טוניס××™",
+ "symbol": "TND"
+ },
+ "JOD": {
+ "name": "דינר ירדני",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "דינר כוויתי",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "דינר לובי",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "דינר מקדוני",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "דינר סרבי",
+ "symbol": "RSD"
+ },
+ "IQD": {
+ "name": "דינר עירקי",
+ "symbol": "IQD"
+ },
+ "MAD": {
+ "name": "×“×™×¨×”× ×ž×¨×•×§××™",
+ "symbol": "MAD"
+ },
+ "AED": {
+ "name": "×“×™×¨×”× ×©×œ ×יחוד הנסיכויות הערביות",
+ "symbol": "AED"
+ },
+ "GMD": {
+ "name": "דל×סי גמבי",
+ "symbol": "GMD"
+ },
+ "AMD": {
+ "name": "דר×× ×רמני",
+ "symbol": "AMD"
+ },
+ "VUV": {
+ "name": "ו×טו של ונו×טו",
+ "symbol": "VUV"
+ },
+ "KRW": {
+ "name": "וון דרו×-קורי×× ×™",
+ "symbol": "â‚©"
+ },
+ "KPW": {
+ "name": "וון צפון-קורי×× ×™",
+ "symbol": "KPW"
+ },
+ "PLN": {
+ "name": "זלוטי פולני",
+ "symbol": "PLN"
+ },
+ "WST": {
+ "name": "ט×לה סמו××™",
+ "symbol": "WST"
+ },
+ "BDT": {
+ "name": "ט×קה בנגלדשי",
+ "symbol": "BDT"
+ },
+ "MNT": {
+ "name": "טוגריק מונגולי",
+ "symbol": "MNT"
+ },
+ "KZT": {
+ "name": "טנגה קזחסטני",
+ "symbol": "KZT"
+ },
+ "CNY": {
+ "name": "יו×ן סיני",
+ "symbol": "CNÂ¥"
+ },
+ "JPY": {
+ "name": "ין יפני",
+ "symbol": "JPÂ¥"
+ },
+ "DKK": {
+ "name": "כתר דני",
+ "symbol": "DKK"
+ },
+ "NOK": {
+ "name": "כתר נורבגי",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "כתר שוודי",
+ "symbol": "SEK"
+ },
+ "RON": {
+ "name": "ל×ו רומני",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "לב בולגרי",
+ "symbol": "BGN"
+ },
+ "LSL": {
+ "name": "לוטי לסותי",
+ "symbol": "LSL"
+ },
+ "MDL": {
+ "name": "לי×ו מולדובני",
+ "symbol": "MDL"
+ },
+ "SLL": {
+ "name": "לי×ון סיירה ל×וני",
+ "symbol": "SLL"
+ },
+ "LTL": {
+ "name": "×œ×™×˜× ×œ×™×˜××™",
+ "symbol": "LTL"
+ },
+ "SZL": {
+ "name": "לילנגני סווזי",
+ "symbol": "SZL"
+ },
+ "SSP": {
+ "name": "לירה דרו×-סודנית",
+ "symbol": "SSP"
+ },
+ "TRY": {
+ "name": "לירה טורקית חדשה",
+ "symbol": "TRY"
+ },
+ "LBP": {
+ "name": "לירה לבנונית",
+ "symbol": "LBP"
+ },
+ "EGP": {
+ "name": "לירה מצרית",
+ "symbol": "EGP"
+ },
+ "SDG": {
+ "name": "לירה סודנית",
+ "symbol": "SDG"
+ },
+ "SYP": {
+ "name": "לירה סורית",
+ "symbol": "SYP"
+ },
+ "GBP": {
+ "name": "לירה שטרלינג",
+ "symbol": "£"
+ },
+ "FKP": {
+ "name": "לירה של ××™×™ פוקלנד",
+ "symbol": "FKP"
+ },
+ "HNL": {
+ "name": "למפירה הונדורי",
+ "symbol": "HNL"
+ },
+ "ALL": {
+ "name": "לק ×לבני",
+ "symbol": "ALL"
+ },
+ "GEL": {
+ "name": "לרי ×’×ורגי",
+ "symbol": "GEL"
+ },
+ "AZN": {
+ "name": "מ×× ×ט ×זרביג׳ני",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "מ×× ×ט טורקמני",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "מ×רק בר המרה של בוסניה־הרצגובינה",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "מטיקל מוזמביני",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "× ×ירה ניגרי",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "× ×קפה ×ריתר××™",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "× ×’×•×œ×˜×¨×•× ×‘×”×•×˜× ×™",
+ "symbol": "BTN"
+ },
+ "GHS": {
+ "name": "סדי ×’×× ×™",
+ "symbol": "GHS"
+ },
+ "PEN": {
+ "name": "סול פרו×× ×™ חדש",
+ "symbol": "PEN"
+ },
+ "UZS": {
+ "name": "×¡×•× ×וזבקי",
+ "symbol": "UZS"
+ },
+ "KGS": {
+ "name": "×¡×•× ×§×™×¨×’×™×–×™",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "סומוני טג׳קיסטני",
+ "symbol": "TJS"
+ },
+ "GIP": {
+ "name": "פ×ונד גיברלטר",
+ "symbol": "GIP"
+ },
+ "SHP": {
+ "name": "פ×ונד סנט הלני",
+ "symbol": "SHP"
+ },
+ "TOP": {
+ "name": "פ×× ×’×” טונגי",
+ "symbol": "TOP"
+ },
+ "BWP": {
+ "name": "פולה בוצוו×× ×™",
+ "symbol": "BWP"
+ },
+ "HUF": {
+ "name": "פורינט הונגרי",
+ "symbol": "HUF"
+ },
+ "DOP": {
+ "name": "פזו דומיניקני",
+ "symbol": "DOP"
+ },
+ "MXN": {
+ "name": "פזו מקסיקני",
+ "symbol": "MX$"
+ },
+ "PHP": {
+ "name": "פזו פיליפיני",
+ "symbol": "PHP"
+ },
+ "CUP": {
+ "name": "פזו קובני",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "פזו קובני להמרה",
+ "symbol": "CUC"
+ },
+ "MOP": {
+ "name": "פטקה של מק×ו",
+ "symbol": "MOP"
+ },
+ "AWG": {
+ "name": "פלורין של ×רובה",
+ "symbol": "AWG"
+ },
+ "UYU": {
+ "name": "פסו ×ורוגוו××™",
+ "symbol": "UYU"
+ },
+ "ARS": {
+ "name": "פסו ×רגנטינ××™",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "פסו צ׳יל×× ×™",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "פסו קולומבי×× ×™",
+ "symbol": "COP"
+ },
+ "XOF": {
+ "name": "פרנק CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "פרנק CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "BIF": {
+ "name": "פרנק בורונדי",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "פרנק ג׳יבוטי",
+ "symbol": "DJF"
+ },
+ "GNF": {
+ "name": "פרנק ×’×™× ××™",
+ "symbol": "GNF"
+ },
+ "XPF": {
+ "name": "פרנק פולינזיה הצרפתית",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "פרנק קומורו××™",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "פרנק קונגולזי",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "פרנק רו×נדי",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "פרנק שוויצרי",
+ "symbol": "CHF"
+ },
+ "AOA": {
+ "name": "קו×× ×–×” ×נגולי",
+ "symbol": "AOA"
+ },
+ "MWK": {
+ "name": "קו×צ׳ה מל×וי",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "קוו×צ׳ה זמבית",
+ "symbol": "ZMW"
+ },
+ "SVC": {
+ "name": "קולון סלבדורי",
+ "symbol": "SVC"
+ },
+ "CRC": {
+ "name": "קולון קוסטה־ריקני",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "קונה קרו×טי",
+ "symbol": "HRK"
+ },
+ "NIO": {
+ "name": "קורדובה ניקר××’×™",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "קורונה צ׳כית",
+ "symbol": "CZK"
+ },
+ "MMK": {
+ "name": "קי×ט מי×נמרי",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "קינה של פפו××” ×’×™× ××” החדשה",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "קיפ ל××™",
+ "symbol": "LAK"
+ },
+ "GTQ": {
+ "name": "קצל גו×טמלי",
+ "symbol": "GTQ"
+ },
+ "ISK": {
+ "name": "קרונה ×יסלנדית",
+ "symbol": "ISK"
+ },
+ "ZAR": {
+ "name": "ר×נד ×“×¨×•× ×פריק××™",
+ "symbol": "ZAR"
+ },
+ "BYR": {
+ "name": "רובל בלרוסי",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "רובל רוסי",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "רופי הודי",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "רופי מ×וריציני",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "רופי נפ×לי",
+ "symbol": "NPR"
+ },
+ "SCR": {
+ "name": "רופי סיישלי",
+ "symbol": "SCR"
+ },
+ "LKR": {
+ "name": "רופי סרי לנקי",
+ "symbol": "LKR"
+ },
+ "PKR": {
+ "name": "רופי פקיסטני",
+ "symbol": "PKR"
+ },
+ "IDR": {
+ "name": "רופיה ×ינדונזית",
+ "symbol": "IDR"
+ },
+ "MVR": {
+ "name": "רופיה מלדיבית",
+ "symbol": "MVR"
+ },
+ "IRR": {
+ "name": "רי×ל ×יר×× ×™",
+ "symbol": "IRR"
+ },
+ "BRL": {
+ "name": "רי×ל ברזיל××™",
+ "symbol": "R$"
+ },
+ "SAR": {
+ "name": "רי×ל סעודי",
+ "symbol": "SAR"
+ },
+ "OMR": {
+ "name": "רי×ל עומ×× ×™",
+ "symbol": "OMR"
+ },
+ "QAR": {
+ "name": "רי×ל קט×רי",
+ "symbol": "QAR"
+ },
+ "YER": {
+ "name": "רי×ל תימני",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "ריל קמבודי",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "רינגיט מלזי",
+ "symbol": "MYR"
+ },
+ "ILS": {
+ "name": "ש״ח",
+ "symbol": "₪"
+ },
+ "UGX": {
+ "name": "שילינג ×וגנדי",
+ "symbol": "UGX"
+ },
+ "TZS": {
+ "name": "שילינג טנזני",
+ "symbol": "TZS"
+ },
+ "SOS": {
+ "name": "שילינג סומ×לי",
+ "symbol": "SOS"
+ },
+ "KES": {
+ "name": "שילינג קניי×תי",
+ "symbol": "KES"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/hi.json b/library/intl/resources/currency/hi.json
new file mode 100644
index 000000000..cda5b772b
--- /dev/null
+++ b/library/intl/resources/currency/hi.json
@@ -0,0 +1,634 @@
+{
+ "XOF": {
+ "name": "[CFA] फ़à¥à¤°à¥ˆà¤‚क [BCEAO]",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "[CFA] फ़à¥à¤°à¥ˆà¤‚क [BEAC]",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "[CFP] फ़à¥à¤°à¥ˆà¤‚क",
+ "symbol": "CFPF"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "AOA": {
+ "name": "अंगोला कà¥à¤µà¤¾à¤‚ज़ा",
+ "symbol": "AOA"
+ },
+ "AZN": {
+ "name": "अज़रबैजानी मैनेट",
+ "symbol": "AZN"
+ },
+ "AFN": {
+ "name": "अफ़गान अफ़गानी",
+ "symbol": "AFN"
+ },
+ "AWG": {
+ "name": "अरूबाई फ़à¥à¤²à¥‹à¤°à¤¿à¤¨",
+ "symbol": "AWG"
+ },
+ "ARS": {
+ "name": "अरà¥à¤œà¥‡à¤‚टीनी पीसो",
+ "symbol": "ARS"
+ },
+ "DZD": {
+ "name": "अलà¥à¤œà¥€à¤°à¤¿à¤¯à¤¾à¤ˆ दिनार",
+ "symbol": "DZD"
+ },
+ "ALL": {
+ "name": "अलà¥à¤¬à¤¾à¤¨à¤¿à¤¯à¤¾à¤ˆ लेक",
+ "symbol": "ALL"
+ },
+ "ISK": {
+ "name": "आइसलैंडिक कà¥à¤°à¥‹à¤¨à¤¾",
+ "symbol": "ISK"
+ },
+ "AMD": {
+ "name": "आरà¥à¤®à¥‡à¤¨à¤¿à¤¯à¤¾à¤ˆ दà¥à¤°à¤¾à¤®",
+ "symbol": "AMD"
+ },
+ "IDR": {
+ "name": "इंडोनेशियाई रà¥à¤ªà¤¿à¤¯à¤¾",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "इज़राइली नà¥à¤¯à¥‚ शेकेल",
+ "symbol": "₪"
+ },
+ "ETB": {
+ "name": "इथियोपियन बिर",
+ "symbol": "ETB"
+ },
+ "IQD": {
+ "name": "इराकी दिनार",
+ "symbol": "IQD"
+ },
+ "ERN": {
+ "name": "इरीटà¥à¤°à¤¿à¤¯à¤¨ नाकà¥à¤«à¤¼à¤¾",
+ "symbol": "ERN"
+ },
+ "IRR": {
+ "name": "ईरानी रियाल",
+ "symbol": "IRR"
+ },
+ "UZS": {
+ "name": "उज़à¥à¤¬à¥‡à¤•à¤¿à¤¸à¥à¤¤à¤¾à¤¨ सोम",
+ "symbol": "UZS"
+ },
+ "KPW": {
+ "name": "उतà¥à¤¤à¤° कोरियाई वॉन",
+ "symbol": "KPW"
+ },
+ "UYU": {
+ "name": "उरà¥à¤—à¥à¤µà¤¿à¤¯à¤¨ पीसो",
+ "symbol": "UYU"
+ },
+ "AUD": {
+ "name": "ऑसà¥à¤Ÿà¥à¤°à¥‡à¤²à¤¿à¤¯à¤¾à¤ˆ डॉलर",
+ "symbol": "A$"
+ },
+ "OMR": {
+ "name": "ओमानी रियाल",
+ "symbol": "OMR"
+ },
+ "KHR": {
+ "name": "कंबोडियाई रियाल",
+ "symbol": "KHR"
+ },
+ "KZT": {
+ "name": "कज़ाखिसà¥à¤¤à¤¾à¤¨à¥€ टेंज़",
+ "symbol": "KZT"
+ },
+ "QAR": {
+ "name": "क़तरी रियाल",
+ "symbol": "QAR"
+ },
+ "CAD": {
+ "name": "कनाडाई डॉलर",
+ "symbol": "CA$"
+ },
+ "KGS": {
+ "name": "किरà¥à¤—िसà¥à¤¤à¤¾à¤¨à¥€ सोम",
+ "symbol": "KGS"
+ },
+ "KWD": {
+ "name": "कà¥à¤µà¥ˆà¤¤à¥€ दिनार",
+ "symbol": "KWD"
+ },
+ "KES": {
+ "name": "केनà¥à¤¯à¤¾à¤ˆ शिलिंग",
+ "symbol": "KES"
+ },
+ "CVE": {
+ "name": "केप वरà¥à¤¡ à¤à¤¸à¥à¤•à¥‚डो",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "कैमेन दà¥à¤µà¥€à¤ªà¤¸à¤®à¥‚ह डॉलर",
+ "symbol": "KYD"
+ },
+ "CDF": {
+ "name": "कोंगोली फ़à¥à¤°à¥ˆà¤‚क",
+ "symbol": "CDF"
+ },
+ "KMF": {
+ "name": "कोमोरियन फ़à¥à¤°à¥ˆà¤‚क",
+ "symbol": "KMF"
+ },
+ "COP": {
+ "name": "कोलंबियाई पीसो",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "कोसà¥à¤Ÿà¤¾ रिका कोलोन",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "कà¥à¤¯à¥‚बाई परिवरà¥à¤¤à¤¨à¥€à¤¯ पीसो",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "कà¥à¤¯à¥‚बाई पीसो",
+ "symbol": "CUP"
+ },
+ "HRK": {
+ "name": "कà¥à¤°à¥‹à¤à¤¶à¤¿à¤¯à¤¾à¤ˆ कà¥à¤¨à¤¾",
+ "symbol": "HRK"
+ },
+ "GYD": {
+ "name": "गयानीज़ डॉलर",
+ "symbol": "GYD"
+ },
+ "GNF": {
+ "name": "गिनीयन फ़à¥à¤°à¥ˆà¤‚क",
+ "symbol": "GNF"
+ },
+ "GMD": {
+ "name": "गैंबियन डलासी",
+ "symbol": "GMD"
+ },
+ "GTQ": {
+ "name": "गà¥à¤µà¤¾à¤Ÿà¥‡à¤®à¤¾à¤²à¤¾ कà¥à¤µà¥‡à¤Ÿà¤œà¤¼à¤²",
+ "symbol": "GTQ"
+ },
+ "GHS": {
+ "name": "घानियन सेडी",
+ "symbol": "GHS"
+ },
+ "CLP": {
+ "name": "चिली पीसो",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "चीनी यà¥à¤†à¤¨",
+ "symbol": "CNÂ¥"
+ },
+ "CZK": {
+ "name": "चेक गणराजà¥à¤¯ कोरà¥à¤¨à¤¾",
+ "symbol": "CZK"
+ },
+ "JMD": {
+ "name": "जमैकन डॉलर",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "जापानी येन",
+ "symbol": "JPÂ¥"
+ },
+ "ZMW": {
+ "name": "ज़ामà¥à¤¬à¤¿à¤¯à¤¨ कà¥à¤µà¤¾à¤šà¤¾",
+ "symbol": "ZMW"
+ },
+ "DJF": {
+ "name": "जिबूती फ़à¥à¤°à¥ˆà¤‚क",
+ "symbol": "DJF"
+ },
+ "GIP": {
+ "name": "जिबà¥à¤°à¤¾à¤²à¥à¤Ÿà¤° पाउंड",
+ "symbol": "GIP"
+ },
+ "GEL": {
+ "name": "जॉरà¥à¤œà¤¿à¤¯à¤¨ लारी",
+ "symbol": "GEL"
+ },
+ "JOD": {
+ "name": "जॉरà¥à¤¡à¤¨à¤¿à¤¯à¤¨ दिनार",
+ "symbol": "JOD"
+ },
+ "TOP": {
+ "name": "टोंगन पांगा",
+ "symbol": "TOP"
+ },
+ "TND": {
+ "name": "टà¥à¤¯à¥‚नीशियाई दिनार",
+ "symbol": "TND"
+ },
+ "DKK": {
+ "name": "डैनिश कà¥à¤°à¥‹à¤¨",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "डोमिनिकन पीसो",
+ "symbol": "DOP"
+ },
+ "TZS": {
+ "name": "तंज़ानियाई शिलिंग",
+ "symbol": "TZS"
+ },
+ "TJS": {
+ "name": "ताजिकिसà¥à¤¤à¤¾à¤¨à¥€ सोमोनी",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "तà¥à¤°à¥à¤•à¤®à¥‡à¤¨à¤¿à¤¸à¥à¤¤à¤¾à¤¨à¥€ मैनत",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "तà¥à¤°à¥à¤•à¥€ लीरा",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "तà¥à¤°à¤¿à¤¨à¤¿à¤¦à¤¾à¤¦ और टोबैगो डॉलर",
+ "symbol": "TTD"
+ },
+ "THB": {
+ "name": "थाई बहत",
+ "symbol": "฿"
+ },
+ "ZAR": {
+ "name": "दकà¥à¤·à¤¿à¤£ अफ़à¥à¤°à¥€à¤•à¥€ रैंड",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "दकà¥à¤·à¤¿à¤£ कोरियाई वॉन",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "दकà¥à¤·à¤¿à¤£ सूडानी पाउंड",
+ "symbol": "SSP"
+ },
+ "TWD": {
+ "name": "नया ताईवानी डॉलर",
+ "symbol": "NT$"
+ },
+ "NGN": {
+ "name": "नाइजीरियाई नाइरा",
+ "symbol": "NGN"
+ },
+ "NAD": {
+ "name": "नामीबियाई डॉलर",
+ "symbol": "NAD"
+ },
+ "NIO": {
+ "name": "निकारागà¥à¤…न कोरडोबा",
+ "symbol": "NIO"
+ },
+ "ANG": {
+ "name": "नीदरलैंड à¤à¤‚टीलियन गिलà¥à¤¡à¤°",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "नेपाली रà¥à¤ªà¤¯à¤¾",
+ "symbol": "NPR"
+ },
+ "NOK": {
+ "name": "नॉरà¥à¤µà¥‡à¤œà¤¿à¤¯à¤¨ कà¥à¤°à¥‹à¤¨",
+ "symbol": "NOK"
+ },
+ "NZD": {
+ "name": "नà¥à¤¯à¥‚ज़ीलैंड डॉलर",
+ "symbol": "NZ$"
+ },
+ "PAB": {
+ "name": "पनामेनियन बैलà¥à¤¬à¥‹à¤†",
+ "symbol": "PAB"
+ },
+ "PKR": {
+ "name": "पाकिसà¥à¤¤à¤¾à¤¨à¥€ रà¥à¤ªà¤¯à¤¾",
+ "symbol": "PKR"
+ },
+ "PGK": {
+ "name": "पापà¥à¤† नà¥à¤¯à¥‚ गिनीयन किना",
+ "symbol": "PGK"
+ },
+ "XCD": {
+ "name": "पूरà¥à¤µà¥€ कैरिबियाई डॉलर",
+ "symbol": "EC$"
+ },
+ "PEN": {
+ "name": "पेरूवियन नà¥à¤à¤µà¥‹ सोल",
+ "symbol": "PEN"
+ },
+ "PYG": {
+ "name": "पैरागà¥à¤µà¤¿à¤¯à¤¨ गà¥à¤†à¤°à¤¾à¤¨à¥€",
+ "symbol": "PYG"
+ },
+ "PLN": {
+ "name": "पोलिश ज़à¥à¤²à¥‰à¤Ÿà¥€",
+ "symbol": "PLN"
+ },
+ "FJD": {
+ "name": "फ़िजी डॉलर",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "फ़िलिपीनी पीसो",
+ "symbol": "PHP"
+ },
+ "FKP": {
+ "name": "फ़ॉकलैंड दà¥à¤µà¥€à¤ªà¤¸à¤®à¥‚ह पाउंड",
+ "symbol": "FKP"
+ },
+ "BMD": {
+ "name": "बरमूडा डॉलर",
+ "symbol": "BMD"
+ },
+ "BHD": {
+ "name": "बहरीनी दिनार",
+ "symbol": "BHD"
+ },
+ "BSD": {
+ "name": "बहामाई डॉलर",
+ "symbol": "BSD"
+ },
+ "BDT": {
+ "name": "बांगà¥à¤²à¤¾à¤¦à¥‡à¤¶à¥€ टका",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "बारà¥à¤¬à¥‡à¤¡à¤¿à¤¯à¤¨ डॉलर",
+ "symbol": "BBD"
+ },
+ "BIF": {
+ "name": "बà¥à¤°à¥‚ंडी फ़à¥à¤°à¥ˆà¤‚क",
+ "symbol": "BIF"
+ },
+ "BGN": {
+ "name": "बà¥à¤²à¥à¤—ारियाई लेव",
+ "symbol": "BGN"
+ },
+ "BYR": {
+ "name": "बेलारूसी रूबल",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "बेलीज़ डॉलर",
+ "symbol": "BZD"
+ },
+ "BWP": {
+ "name": "बोतà¥à¤¸à¤µà¤¾à¤¨à¤¿à¤¯à¤¾à¤ˆ पà¥à¤²à¤¾",
+ "symbol": "BWP"
+ },
+ "BOB": {
+ "name": "बोलिवियाई बोलिवियानो",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "बोसà¥à¤¨à¤¿à¤¯à¤¾ हरà¥à¤œà¤¼à¥‡à¤—ोविना परिवरà¥à¤¤à¤¨à¥€à¤¯ मारà¥à¤•",
+ "symbol": "BAM"
+ },
+ "BRL": {
+ "name": "बà¥à¤°à¤¾à¤œà¤¼à¥€à¤²à¥€ रियाल",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "बà¥à¤°à¤¿à¤Ÿà¤¿à¤¶ पाउंड सà¥à¤Ÿà¤°à¥à¤²à¤¿à¤‚ग",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "बà¥à¤°à¥‚नेई डॉलर",
+ "symbol": "BND"
+ },
+ "INR": {
+ "name": "भारतीय रà¥à¤ªà¤¯à¤¾",
+ "symbol": "₹"
+ },
+ "BTN": {
+ "name": "भूटानी नंगलटà¥à¤°à¤®",
+ "symbol": "BTN"
+ },
+ "MNT": {
+ "name": "मंगोलियाई टगरिक",
+ "symbol": "MNT"
+ },
+ "MYR": {
+ "name": "मलेशियाई रिंगित",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "मालदीवी रà¥à¤«à¤¼à¤¿à¤¯à¤¾",
+ "symbol": "MVR"
+ },
+ "MGA": {
+ "name": "मालागासी आरियरी",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "मालावियन कà¥à¤µà¤¾à¤šà¤¾",
+ "symbol": "MWK"
+ },
+ "EGP": {
+ "name": "मिसà¥à¤° पाउंड",
+ "symbol": "EGP"
+ },
+ "MOP": {
+ "name": "मेकानीज़ पाटाका",
+ "symbol": "MOP"
+ },
+ "MXN": {
+ "name": "मैकà¥à¤¸à¤¿à¤•à¤¨ पीसो",
+ "symbol": "MX$"
+ },
+ "MKD": {
+ "name": "मैसीडोनियन दिनार",
+ "symbol": "MKD"
+ },
+ "MUR": {
+ "name": "मॉरिशियन रà¥à¤ªà¤¯à¤¾",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "मॉरीटेनियन ओगà¥à¤‡à¤¯à¤¾",
+ "symbol": "MRO"
+ },
+ "MZN": {
+ "name": "मोज़ामà¥à¤¬à¤¿à¤•à¤¨ मेटिकल",
+ "symbol": "MZN"
+ },
+ "MAD": {
+ "name": "मोरकà¥à¤•à¥‹ दिरहम",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "मोलà¥à¤¡à¥‹à¤µà¤¨ लियू",
+ "symbol": "MDL"
+ },
+ "MMK": {
+ "name": "मà¥à¤¯à¤¾à¤‚मार कà¥à¤¯à¤¾à¤Ÿ",
+ "symbol": "MMK"
+ },
+ "YER": {
+ "name": "यमनी रियाल",
+ "symbol": "YER"
+ },
+ "UGX": {
+ "name": "यà¥à¤—ांडाई शिलिंग",
+ "symbol": "UGX"
+ },
+ "USD": {
+ "name": "यूà¤à¤¸ डॉलर",
+ "symbol": "$"
+ },
+ "UAH": {
+ "name": "यूकà¥à¤°à¥‡à¤¨à¤¿à¤¯à¤¨ रिवà¥à¤¨à¤¿à¤¯à¤¾",
+ "symbol": "UAH"
+ },
+ "EUR": {
+ "name": "यूरो",
+ "symbol": "€"
+ },
+ "RWF": {
+ "name": "रवांडाई फ़à¥à¤°à¥ˆà¤‚क",
+ "symbol": "RWF"
+ },
+ "RUB": {
+ "name": "रूसी रूबल",
+ "symbol": "RUB"
+ },
+ "RON": {
+ "name": "रोमानियाई लà¥à¤¯à¥‚",
+ "symbol": "RON"
+ },
+ "LRD": {
+ "name": "लाइबेरियाई डॉलर",
+ "symbol": "LRD"
+ },
+ "LAK": {
+ "name": "लाओशियन किप",
+ "symbol": "LAK"
+ },
+ "LTL": {
+ "name": "लिथà¥à¤†à¤¨à¤¿à¤¯à¤¾à¤ˆ लितास",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "लीबियाई दिनार",
+ "symbol": "LYD"
+ },
+ "LBP": {
+ "name": "लेबनानी पाउंड",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "लेसोथो लोटी",
+ "symbol": "LSL"
+ },
+ "VUV": {
+ "name": "वनà¥à¤†à¤¤à¥‚ वातू",
+ "symbol": "VUV"
+ },
+ "VND": {
+ "name": "वियतनामी डोंग",
+ "symbol": "â‚«"
+ },
+ "VEF": {
+ "name": "वेनेज़à¥à¤à¤²à¤¾ बोलिवर",
+ "symbol": "VEF"
+ },
+ "LKR": {
+ "name": "शà¥à¤°à¥€à¤²à¤‚काई रà¥à¤ªà¤¯à¤¾",
+ "symbol": "LKR"
+ },
+ "AED": {
+ "name": "संयà¥à¤•à¥à¤¤ अरब अमीरात दिरहाम",
+ "symbol": "AED"
+ },
+ "SAR": {
+ "name": "सउदी रियाल",
+ "symbol": "SAR"
+ },
+ "WST": {
+ "name": "समोआई ताला",
+ "symbol": "WST"
+ },
+ "RSD": {
+ "name": "सरà¥à¤¬à¤¿à¤¯à¤¨ दिनार",
+ "symbol": "RSD"
+ },
+ "STD": {
+ "name": "साओ तोम और पà¥à¤°à¤¿à¤‚सिपे डोबरा",
+ "symbol": "STD"
+ },
+ "SGD": {
+ "name": "सिंगापà¥à¤° डॉलर",
+ "symbol": "SGD"
+ },
+ "SLL": {
+ "name": "सिà¤à¤°à¤¾ लियोनियन लियोन",
+ "symbol": "SLL"
+ },
+ "SYP": {
+ "name": "सीरियाई पाउंड",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "सूडानी पाउंड",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "सूरीनामी डॉलर",
+ "symbol": "SRD"
+ },
+ "SHP": {
+ "name": "सेंट हेलेना पाउंड",
+ "symbol": "SHP"
+ },
+ "SCR": {
+ "name": "सेशेलà¥à¤¸à¤¿à¤¯à¤¾à¤ˆ रà¥à¤ªà¤¯à¤¾",
+ "symbol": "SCR"
+ },
+ "SOS": {
+ "name": "सोमाली शिलिंग",
+ "symbol": "SOS"
+ },
+ "SBD": {
+ "name": "सोलोमन दà¥à¤µà¥€à¤ªà¤¸à¤®à¥‚ह डॉलर",
+ "symbol": "SBD"
+ },
+ "SZL": {
+ "name": "सà¥à¤µà¤¾à¤œà¤¼à¥€ लिलांजेनी",
+ "symbol": "SZL"
+ },
+ "CHF": {
+ "name": "सà¥à¤µà¤¿à¤¸ फ़à¥à¤°à¥ˆà¤‚क",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "सà¥à¤µà¥€à¤¡à¥€à¤¶ कà¥à¤°à¥‹à¤¨à¤¾",
+ "symbol": "SEK"
+ },
+ "HUF": {
+ "name": "हंगेरियन फ़ोरिंट",
+ "symbol": "HUF"
+ },
+ "HKD": {
+ "name": "हाà¤à¤—काà¤à¤— डॉलर",
+ "symbol": "HK$"
+ },
+ "HTG": {
+ "name": "हैतियाई गरà¥à¤¡",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "होंडà¥à¤°à¤¨ लेमà¥à¤ªà¤¿à¤°à¤¾",
+ "symbol": "HNL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/hr.json b/library/intl/resources/currency/hr.json
new file mode 100644
index 000000000..6c307d952
--- /dev/null
+++ b/library/intl/resources/currency/hr.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afganistanski afgani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "albanski lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "alžirski dinar",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "ameriÄki dolar",
+ "symbol": "USD"
+ },
+ "AOA": {
+ "name": "angolska kvanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "argentinski pezo",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "armenski dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "arupski florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "australski dolar",
+ "symbol": "AUD"
+ },
+ "AZN": {
+ "name": "azerbajdžanski manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "bahamski dolar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "bahreinski dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "bangladeška taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "barbadoski dolar",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "belizeanski dolar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "bermudski dolar",
+ "symbol": "BMD"
+ },
+ "BYR": {
+ "name": "bjeloruska rublja",
+ "symbol": "BYR"
+ },
+ "BWP": {
+ "name": "bocvanska pula",
+ "symbol": "BWP"
+ },
+ "BOB": {
+ "name": "bolivijski bolivijano",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "brazilski real",
+ "symbol": "BRL"
+ },
+ "GBP": {
+ "name": "britanska funta",
+ "symbol": "GBP"
+ },
+ "BND": {
+ "name": "brunejski dolar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "bugarski lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "burundski franak",
+ "symbol": "BIF"
+ },
+ "BTN": {
+ "name": "butanski ngultrum",
+ "symbol": "BTN"
+ },
+ "XOF": {
+ "name": "CFA franak BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA franak BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP franak",
+ "symbol": "XPF"
+ },
+ "CZK": {
+ "name": "ÄeÅ¡ka kruna",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "Äileanski pezo",
+ "symbol": "CLP"
+ },
+ "DKK": {
+ "name": "danska kruna",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "dobra Svetog Tome i Principa",
+ "symbol": "STD"
+ },
+ "DOP": {
+ "name": "dominikanski pezo",
+ "symbol": "DOP"
+ },
+ "DJF": {
+ "name": "džibutski franak",
+ "symbol": "DJF"
+ },
+ "EGP": {
+ "name": "egipatska funta",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "eritrejska nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "etiopski bir",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "EUR"
+ },
+ "FKP": {
+ "name": "falklandska funta",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "fidžijski dolar",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "filipinski pezo",
+ "symbol": "PHP"
+ },
+ "GMD": {
+ "name": "gambijski dalas",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "ganski cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "gibraltarska funta",
+ "symbol": "GIP"
+ },
+ "GEL": {
+ "name": "gruzijski lari",
+ "symbol": "GEL"
+ },
+ "GYD": {
+ "name": "gvajanski dolar",
+ "symbol": "GYD"
+ },
+ "GTQ": {
+ "name": "gvatemalski kvecal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "gvinejski franak",
+ "symbol": "GNF"
+ },
+ "HTG": {
+ "name": "haićanski gourd",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "honduraška lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "hongkonški dolar",
+ "symbol": "HKD"
+ },
+ "HRK": {
+ "name": "hrvatska kuna",
+ "symbol": "HRK"
+ },
+ "INR": {
+ "name": "indijska rupija",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "indonezijska rupija",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "iraÄki dinar",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "iranski rijal",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "islandska kruna",
+ "symbol": "ISK"
+ },
+ "XCD": {
+ "name": "istoÄnokaripski dolar",
+ "symbol": "XCD"
+ },
+ "JMD": {
+ "name": "jamajÄanski dolar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "japanski jen",
+ "symbol": "JPY"
+ },
+ "YER": {
+ "name": "jemenski rial",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "jordanski dinar",
+ "symbol": "JOD"
+ },
+ "ZAR": {
+ "name": "južnoafriÄki rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "južnokorejski won",
+ "symbol": "KRW"
+ },
+ "SSP": {
+ "name": "južnosudanska funta",
+ "symbol": "SSP"
+ },
+ "KYD": {
+ "name": "kajmanski dolar",
+ "symbol": "KYD"
+ },
+ "KHR": {
+ "name": "kambođanski rijal",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "kanadski dolar",
+ "symbol": "CAD"
+ },
+ "QAR": {
+ "name": "katarski rial",
+ "symbol": "QAR"
+ },
+ "KZT": {
+ "name": "kazahstanski tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "kenijski Å¡iling",
+ "symbol": "KES"
+ },
+ "PGK": {
+ "name": "kina Papue Nove Gvineje",
+ "symbol": "PGK"
+ },
+ "CNY": {
+ "name": "kineski yuan",
+ "symbol": "CNY"
+ },
+ "KGS": {
+ "name": "kirgiski som",
+ "symbol": "KGS"
+ },
+ "COP": {
+ "name": "kolumbijski pezo",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "komorski franak",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "kongoanski franak",
+ "symbol": "CDF"
+ },
+ "BAM": {
+ "name": "konvertibilna marka",
+ "symbol": "BAM"
+ },
+ "CRC": {
+ "name": "kostarikanski kolon",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "kubanski konvertibilni pezo",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "kubanski pezo",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "kuvajtski dinar",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "laoski kip",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "lesoto loti",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "libanonska funta",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "liberijski dolar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "libijski dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "litavski litas",
+ "symbol": "LTL"
+ },
+ "MGA": {
+ "name": "madagaskarski ariary",
+ "symbol": "MGA"
+ },
+ "HUF": {
+ "name": "mađarska forinta",
+ "symbol": "HUF"
+ },
+ "MOP": {
+ "name": "makaoška pataka",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "makedonski denar",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "malavijska kvaÄa",
+ "symbol": "MWK"
+ },
+ "MVR": {
+ "name": "maldivijska rufija",
+ "symbol": "MVR"
+ },
+ "MYR": {
+ "name": "malezijski ringit",
+ "symbol": "MYR"
+ },
+ "MAD": {
+ "name": "marokanski dirham",
+ "symbol": "MAD"
+ },
+ "MUR": {
+ "name": "mauricijska rupija",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "mauritanijska ouguja",
+ "symbol": "MRO"
+ },
+ "MXN": {
+ "name": "meksiÄki pezo",
+ "symbol": "MXN"
+ },
+ "MMK": {
+ "name": "mjanmarski kjat",
+ "symbol": "MMK"
+ },
+ "MDL": {
+ "name": "moldavski lej",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "mongolski tugrik",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "mozambiÄki metikal",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "namibijski dolar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "nepalska rupija",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "nigerijska naira",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "nikaragvanska zlatna kordoba",
+ "symbol": "NIO"
+ },
+ "ANG": {
+ "name": "nizozemskoantilski gulden",
+ "symbol": "ANG"
+ },
+ "NOK": {
+ "name": "norveška kruna",
+ "symbol": "NOK"
+ },
+ "ILS": {
+ "name": "novi izraelski Å¡ekel",
+ "symbol": "ILS"
+ },
+ "TWD": {
+ "name": "novotajvanski dolar",
+ "symbol": "TWD"
+ },
+ "NZD": {
+ "name": "novozelandski dolar",
+ "symbol": "NZD"
+ },
+ "OMR": {
+ "name": "omanski rijal",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "pakistanska rupija",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "panamska balboa",
+ "symbol": "PAB"
+ },
+ "PYG": {
+ "name": "paragvajski gvarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "peruanski novi sol",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "poljska zlota",
+ "symbol": "PLN"
+ },
+ "RWF": {
+ "name": "ruandski franak",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "rumunjski lej",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "ruska rublja",
+ "symbol": "RUB"
+ },
+ "SVC": {
+ "name": "salvadorski kolon",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "samoanska tala",
+ "symbol": "WST"
+ },
+ "SAR": {
+ "name": "saudijski rial",
+ "symbol": "SAR"
+ },
+ "SCR": {
+ "name": "sejšelska rupija",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "sijeraleonski leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "singapurski dolar",
+ "symbol": "SGD"
+ },
+ "SYP": {
+ "name": "sirijska funta",
+ "symbol": "SYP"
+ },
+ "KPW": {
+ "name": "sjevernokorejski won",
+ "symbol": "KPW"
+ },
+ "SBD": {
+ "name": "solmonskootoÄni dolar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "somalijski Å¡iling",
+ "symbol": "SOS"
+ },
+ "RSD": {
+ "name": "srpski dinar",
+ "symbol": "RSD"
+ },
+ "SDG": {
+ "name": "sudanska funta",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "surinamski dolar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "svazi lilangeni",
+ "symbol": "SZL"
+ },
+ "SHP": {
+ "name": "svetohelenska funta",
+ "symbol": "SHP"
+ },
+ "LKR": {
+ "name": "Å¡rilankanska rupija",
+ "symbol": "LKR"
+ },
+ "SEK": {
+ "name": "Å¡vedska kruna",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Å¡vicarski franak",
+ "symbol": "CHF"
+ },
+ "TJS": {
+ "name": "tadžikistanski somoni",
+ "symbol": "TJS"
+ },
+ "THB": {
+ "name": "tajlandski baht",
+ "symbol": "THB"
+ },
+ "TZS": {
+ "name": "tanzanijski Å¡iling",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "tongaška pa’anga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "trininadtobaški dolar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "tuniski dinar",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "turkmenistanski manat",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "turska lira",
+ "symbol": "TRY"
+ },
+ "AED": {
+ "name": "UAE dirham",
+ "symbol": "AED"
+ },
+ "UGX": {
+ "name": "ugandski Å¡iling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "ukrajinska hrivnja",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "urugvajski pezo",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "uzbekistanski som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "vanuatuški vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "venezuelanski bolivar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "vijetnamski dong",
+ "symbol": "VND"
+ },
+ "ZMW": {
+ "name": "zambijska kvaÄa",
+ "symbol": "ZMW"
+ },
+ "CVE": {
+ "name": "zelenortski eskudo",
+ "symbol": "CVE"
+ },
+ "ZWL": {
+ "name": "zimbabveanski dolar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/hsb.json b/library/intl/resources/currency/hsb.json
new file mode 100644
index 000000000..fd3873959
--- /dev/null
+++ b/library/intl/resources/currency/hsb.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afghaniski afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "albanski lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "algeriski dinar",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "ameriski dolar",
+ "symbol": "$"
+ },
+ "AOA": {
+ "name": "angolska kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "argentinski peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "armenski dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "aruba-florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "awstralski dolar",
+ "symbol": "AUD"
+ },
+ "AZN": {
+ "name": "azerbajdźanski manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "bahamaski dolar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "bahrainski dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "bangladešska taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "barbadoski dolar",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "belizeski dolar",
+ "symbol": "BZD"
+ },
+ "BYR": {
+ "name": "běłoruski rubl",
+ "symbol": "BYR"
+ },
+ "BMD": {
+ "name": "bermudaski dolar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "bhutanski ngultrum",
+ "symbol": "BTN"
+ },
+ "BGN": {
+ "name": "bołharski lew",
+ "symbol": "BGN"
+ },
+ "BOB": {
+ "name": "boliwiski boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "bosniska konwertibelna hriwna",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "botswanska pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "brazilski real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "britiski punt",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "bruneiski dolar",
+ "symbol": "BND"
+ },
+ "BIF": {
+ "name": "burundiski frank",
+ "symbol": "BIF"
+ },
+ "CZK": {
+ "name": "ÄÄ›ska króna",
+ "symbol": "CZK"
+ },
+ "XOF": {
+ "name": "CFA-frank (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA-frank (BEAC)",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP-frank",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "chilski peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "chinski yuan",
+ "symbol": "CNÂ¥"
+ },
+ "HRK": {
+ "name": "chorwatska kuna",
+ "symbol": "HRK"
+ },
+ "DKK": {
+ "name": "danska króna",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "dominikanski peso",
+ "symbol": "DOP"
+ },
+ "DJF": {
+ "name": "dźibutiski frank",
+ "symbol": "DJF"
+ },
+ "EGP": {
+ "name": "egyptowski punt",
+ "symbol": "EGP"
+ },
+ "SVC": {
+ "name": "el salvadorski colón",
+ "symbol": "SVC"
+ },
+ "ERN": {
+ "name": "eritrejska nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "etiopiski birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "falklandski punt",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "fidźiski dolar",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "filipinski peso",
+ "symbol": "PHP"
+ },
+ "GMD": {
+ "name": "gambiski dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "georgiski lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "ghanaski cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "gibraltarski punt",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "ginejski frank",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "guatemalski quetzal",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "guyanski dolar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "haitiska gourda",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "honduraska lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "hongkongski dolar",
+ "symbol": "HK$"
+ },
+ "INR": {
+ "name": "indiska rupija",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "indoneska rupija",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "irakski dinar",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "iranski rial",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "islandska króna",
+ "symbol": "ISK"
+ },
+ "ILS": {
+ "name": "israelski nowy Å¡ekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "jamaiski dolar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "japanski yen",
+ "symbol": "Â¥"
+ },
+ "YER": {
+ "name": "jemenski rial",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "jordaniski dinar",
+ "symbol": "JOD"
+ },
+ "ZAR": {
+ "name": "južnoafriski rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "južnokorejski won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "južnosudanski punt",
+ "symbol": "SSP"
+ },
+ "KYD": {
+ "name": "kajmanski dolar",
+ "symbol": "KYD"
+ },
+ "KHR": {
+ "name": "kambodźaski riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "kanadiski dolar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "kapverdski escudo",
+ "symbol": "CVE"
+ },
+ "QAR": {
+ "name": "katarski rial",
+ "symbol": "QAR"
+ },
+ "KZT": {
+ "name": "kazachski tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "keniaski Å¡iling",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "kirgiski som",
+ "symbol": "KGS"
+ },
+ "COP": {
+ "name": "kolumbiski peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "komorski frank",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "kongoski frank",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "kosta-rikaski colón",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "kubaski konwertibelny peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "kubaski peso",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "kuwaitski dinar",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "laoski kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "libanonski punt",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "liberiski dolar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "libyski dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "litawski litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "MOP": {
+ "name": "macaoska pataka",
+ "symbol": "MOP"
+ },
+ "MGA": {
+ "name": "madagaskarski ariary",
+ "symbol": "MGA"
+ },
+ "HUF": {
+ "name": "madźarski forint",
+ "symbol": "HUF"
+ },
+ "MKD": {
+ "name": "makedonski denar",
+ "symbol": "MKD"
+ },
+ "MYR": {
+ "name": "malajziski ringgit",
+ "symbol": "MYR"
+ },
+ "MWK": {
+ "name": "malawiski kwacha",
+ "symbol": "MWK"
+ },
+ "MVR": {
+ "name": "malediwiska rupija",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "marokkoski dirham",
+ "symbol": "MAD"
+ },
+ "MUR": {
+ "name": "mauritiuska rupija",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "mawretanska ouguiya",
+ "symbol": "MRO"
+ },
+ "MXN": {
+ "name": "mexiski peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "moldawski leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "mongolski tugrik",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "mosambikski metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "myanmarski kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "namibiski dolar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "nepalska rupija",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "nigeriski naira",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "nikaraguaski cordoba",
+ "symbol": "NIO"
+ },
+ "ANG": {
+ "name": "nižozemsko-antilski gulden",
+ "symbol": "ANG"
+ },
+ "NOK": {
+ "name": "norwegska króna",
+ "symbol": "NOK"
+ },
+ "NZD": {
+ "name": "nowoseelandski dolar",
+ "symbol": "NZ$"
+ },
+ "TWD": {
+ "name": "nowy taiwanski dolar",
+ "symbol": "NT$"
+ },
+ "OMR": {
+ "name": "omanski rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "pakistanska rupija",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "panamaski balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "papua-nowoginejski kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "paraguayski guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "peruski nowy sol",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "pólski złoty",
+ "symbol": "zł"
+ },
+ "RWF": {
+ "name": "ruandiski frank",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "rumunski leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "ruski rubl",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "salomonski dolar",
+ "symbol": "SBD"
+ },
+ "ZMW": {
+ "name": "sambiski kwacha",
+ "symbol": "ZMW"
+ },
+ "WST": {
+ "name": "samoaski tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "são tomeski dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "saudi-arabski rial",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "serbiski dinar",
+ "symbol": "RSD"
+ },
+ "KPW": {
+ "name": "sewjernokorejski won",
+ "symbol": "KPW"
+ },
+ "SCR": {
+ "name": "seychellska rupija",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "sierra-leoneski leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "singapurski dolar",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "somaliski Å¡iling",
+ "symbol": "SOS"
+ },
+ "LKR": {
+ "name": "sri-lankaska rupija",
+ "symbol": "LKR"
+ },
+ "SHP": {
+ "name": "St. Helenski punt",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "sudanski punt",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "surinamski dolar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "swasiski lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "šwedska króna",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Å¡wicarski frank",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "syriski punt",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "tadźikski somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "tansaniski Å¡iling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "thaiski baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "tongaski paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "trinidad-tobagoski dolar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "tuneziski dinar",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "turkmenski manat",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "turkowska lira",
+ "symbol": "TRY"
+ },
+ "UGX": {
+ "name": "ugandaski Å¡iling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "ukrainska hriwna",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "uruguayski peso",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "uzbekski sum",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "vanuatuski vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "venezuelski bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "vietnamski dong",
+ "symbol": "â‚«"
+ },
+ "XCD": {
+ "name": "wuchodnokaribiski dolar",
+ "symbol": "EC$"
+ },
+ "AED": {
+ "name": "ZAE dirham",
+ "symbol": "AED"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/hu.json b/library/intl/resources/currency/hu.json
new file mode 100644
index 000000000..f7413c6af
--- /dev/null
+++ b/library/intl/resources/currency/hu.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgán afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "albán lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "algériai dínár",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "angolai kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "argentin peso",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "arubai florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "ausztrál dollár",
+ "symbol": "AUD"
+ },
+ "AZN": {
+ "name": "azerbajdzsáni manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "bahamai dollár",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "bahreini dinár",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "bangladesi taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "barbadosi dollár",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "belize-i dollár",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "bermudai dollár",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "bhutáni ngultrum",
+ "symbol": "BTN"
+ },
+ "BGN": {
+ "name": "bolgár új leva",
+ "symbol": "BGN"
+ },
+ "BOB": {
+ "name": "bolíviai boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "bosznia-hercegovinai konvertibilis márka",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "botswanai pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "brazil real",
+ "symbol": "BRL"
+ },
+ "GBP": {
+ "name": "brit font sterling",
+ "symbol": "GBP"
+ },
+ "BND": {
+ "name": "brunei dollár",
+ "symbol": "BND"
+ },
+ "BIF": {
+ "name": "burundi frank",
+ "symbol": "BIF"
+ },
+ "CVE": {
+ "name": "Cape Verde-i escudo",
+ "symbol": "CVE"
+ },
+ "XOF": {
+ "name": "CFA frank BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA frank BEAC",
+ "symbol": "FCFA"
+ },
+ "CLP": {
+ "name": "chilei peso",
+ "symbol": "CLP"
+ },
+ "KMF": {
+ "name": "comorei frank",
+ "symbol": "KMF"
+ },
+ "CRC": {
+ "name": "Costa Rica-i colon",
+ "symbol": "CRC"
+ },
+ "CZK": {
+ "name": "cseh korona",
+ "symbol": "CZK"
+ },
+ "XPF": {
+ "name": "csendes-óceáni valutaközösségi frank",
+ "symbol": "CFPF"
+ },
+ "DKK": {
+ "name": "dán korona",
+ "symbol": "DKK"
+ },
+ "ZAR": {
+ "name": "dél-afrikai rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "dél-koreai won",
+ "symbol": "KRW"
+ },
+ "SSP": {
+ "name": "dél-szudáni font",
+ "symbol": "SSP"
+ },
+ "DOP": {
+ "name": "dominikai peso",
+ "symbol": "DOP"
+ },
+ "DJF": {
+ "name": "dzsibuti frank",
+ "symbol": "DJF"
+ },
+ "AED": {
+ "name": "EAE-dirham",
+ "symbol": "AED"
+ },
+ "EGP": {
+ "name": "egyiptomi font",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "eritreai nakfa",
+ "symbol": "ERN"
+ },
+ "KPW": {
+ "name": "észak-koreai won",
+ "symbol": "KPW"
+ },
+ "ETB": {
+ "name": "etiópiai birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "euró",
+ "symbol": "EUR"
+ },
+ "FKP": {
+ "name": "falkland-szigeteki font",
+ "symbol": "FKP"
+ },
+ "BYR": {
+ "name": "fehérorosz rubel",
+ "symbol": "BYR"
+ },
+ "FJD": {
+ "name": "fidzsi dollár",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "fülöp-szigeteki peso",
+ "symbol": "PHP"
+ },
+ "GMD": {
+ "name": "gambiai dalasi",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "ghánai cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "gibraltári font",
+ "symbol": "GIP"
+ },
+ "GEL": {
+ "name": "grúz lari",
+ "symbol": "GEL"
+ },
+ "GTQ": {
+ "name": "guatemalai quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "guineai frank",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "guyanai dollár",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "haiti gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "hodurasi lempira",
+ "symbol": "HNL"
+ },
+ "ANG": {
+ "name": "holland antilláki forint",
+ "symbol": "ANG"
+ },
+ "HKD": {
+ "name": "hongkongi dollár",
+ "symbol": "HKD"
+ },
+ "HRK": {
+ "name": "horvát kuna",
+ "symbol": "HRK"
+ },
+ "INR": {
+ "name": "indiai rúpia",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "indonéz rúpia",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "iraki dínár",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "iráni rial",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "izlandi korona",
+ "symbol": "ISK"
+ },
+ "ILS": {
+ "name": "izraeli új sékel",
+ "symbol": "ILS"
+ },
+ "JMD": {
+ "name": "jamaicai dollár",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "japán jen",
+ "symbol": "Â¥"
+ },
+ "YER": {
+ "name": "jemeni rial",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "jordániai dínár",
+ "symbol": "JOD"
+ },
+ "KYD": {
+ "name": "kajmán-szigeteki dollár",
+ "symbol": "KYD"
+ },
+ "KHR": {
+ "name": "kambodzsai riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "kanadai dollár",
+ "symbol": "CAD"
+ },
+ "QAR": {
+ "name": "katari rial",
+ "symbol": "QAR"
+ },
+ "KZT": {
+ "name": "kazahsztáni tenge",
+ "symbol": "KZT"
+ },
+ "XCD": {
+ "name": "kelet-karibi dollár",
+ "symbol": "XCD"
+ },
+ "KES": {
+ "name": "kenyai shilling",
+ "symbol": "KES"
+ },
+ "CNY": {
+ "name": "kínai jüan",
+ "symbol": "CNY"
+ },
+ "KGS": {
+ "name": "kirgizisztáni szom",
+ "symbol": "KGS"
+ },
+ "COP": {
+ "name": "kolumbiai peso",
+ "symbol": "COP"
+ },
+ "CDF": {
+ "name": "kongói frank",
+ "symbol": "CDF"
+ },
+ "CUC": {
+ "name": "kubai konvertibilis peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "kubai peso",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "kuvaiti dínár",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "laoszi kip",
+ "symbol": "LAK"
+ },
+ "PLN": {
+ "name": "lengyel zloty",
+ "symbol": "PLN"
+ },
+ "LSL": {
+ "name": "Lesothoi loti",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "libanoni font",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "libériai dollár",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "líbiai dínár",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "litvániai litas",
+ "symbol": "LTL"
+ },
+ "MKD": {
+ "name": "macedon dínár",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "madagaszkári ariary",
+ "symbol": "MGA"
+ },
+ "HUF": {
+ "name": "magyar forint",
+ "symbol": "HUF"
+ },
+ "MOP": {
+ "name": "makaói pataca",
+ "symbol": "MOP"
+ },
+ "MYR": {
+ "name": "malajziai ringgit",
+ "symbol": "MYR"
+ },
+ "MWK": {
+ "name": "malawi kwacha",
+ "symbol": "MWK"
+ },
+ "MVR": {
+ "name": "maldív-szigeteki rufiyaa",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "marokkói dirham",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "mauritániai ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "mauritiusi rúpia",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "mexikói peso",
+ "symbol": "MXN"
+ },
+ "MMK": {
+ "name": "mianmari kyat",
+ "symbol": "MMK"
+ },
+ "MDL": {
+ "name": "moldován lei",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "mongóliai tugrik",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "mozambiki metikális",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "namíbiai dollár",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "nepáli rúpia",
+ "symbol": "NPR"
+ },
+ "NIO": {
+ "name": "nicaraguai córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "nigériai naira",
+ "symbol": "NGN"
+ },
+ "NOK": {
+ "name": "norvég korona",
+ "symbol": "NOK"
+ },
+ "WST": {
+ "name": "nyugat-szamoai tala",
+ "symbol": "WST"
+ },
+ "OMR": {
+ "name": "ománi rial",
+ "symbol": "OMR"
+ },
+ "RUB": {
+ "name": "orosz rubel",
+ "symbol": "RUB"
+ },
+ "AMD": {
+ "name": "örmény dram",
+ "symbol": "AMD"
+ },
+ "PKR": {
+ "name": "pakisztáni rúpia",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "panamai balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "pápua új-guineai kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "paraguayi guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "perui sol nuevo",
+ "symbol": "PEN"
+ },
+ "RON": {
+ "name": "román lej",
+ "symbol": "RON"
+ },
+ "RWF": {
+ "name": "ruandai frank",
+ "symbol": "RWF"
+ },
+ "SBD": {
+ "name": "salamon-szigeteki dollár",
+ "symbol": "SBD"
+ },
+ "SVC": {
+ "name": "Salvadori colón",
+ "symbol": "SVC"
+ },
+ "STD": {
+ "name": "São Tomé és Príncipe-i dobra",
+ "symbol": "STD"
+ },
+ "SCR": {
+ "name": "seychelle-szigeteki rúpia",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra Leone-i leone",
+ "symbol": "SLL"
+ },
+ "LKR": {
+ "name": "Srí Lanka-i rúpia",
+ "symbol": "LKR"
+ },
+ "SRD": {
+ "name": "suriname-i dollár",
+ "symbol": "SRD"
+ },
+ "CHF": {
+ "name": "svájci frank",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "svéd korona",
+ "symbol": "SEK"
+ },
+ "SAR": {
+ "name": "szaúdi riyal",
+ "symbol": "SAR"
+ },
+ "SHP": {
+ "name": "Szent Ilona-i font",
+ "symbol": "SHP"
+ },
+ "RSD": {
+ "name": "szerb dínár",
+ "symbol": "RSD"
+ },
+ "SGD": {
+ "name": "szingapúri dollár",
+ "symbol": "SGD"
+ },
+ "SYP": {
+ "name": "szíriai font",
+ "symbol": "SYP"
+ },
+ "SOS": {
+ "name": "szomáli shilling",
+ "symbol": "SOS"
+ },
+ "SDG": {
+ "name": "szudáni font",
+ "symbol": "SDG"
+ },
+ "SZL": {
+ "name": "szváziföldi lilangeni",
+ "symbol": "SZL"
+ },
+ "TJS": {
+ "name": "tádzsikisztáni somoni",
+ "symbol": "TJS"
+ },
+ "TWD": {
+ "name": "tajvani új dollár",
+ "symbol": "TWD"
+ },
+ "TZS": {
+ "name": "tanzániai shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "thai baht",
+ "symbol": "THB"
+ },
+ "TOP": {
+ "name": "tongai paanga",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "török líra",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "Trinidad és Tobago-i dollár",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "tunéziai dínár",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "türkmenisztáni manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "ugandai shilling",
+ "symbol": "UGX"
+ },
+ "NZD": {
+ "name": "új-zélandi dollár",
+ "symbol": "NZD"
+ },
+ "UAH": {
+ "name": "ukrán hrivnya",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "uruguay-i peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "USA-dollár",
+ "symbol": "USD"
+ },
+ "UZS": {
+ "name": "üzbegisztáni szum",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "vanuatui vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "venezuelai bolivar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "vietnami dong",
+ "symbol": "VND"
+ },
+ "ZMW": {
+ "name": "zambiai kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwei dollár (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/hy.json b/library/intl/resources/currency/hy.json
new file mode 100644
index 000000000..46c14a30c
--- /dev/null
+++ b/library/intl/resources/currency/hy.json
@@ -0,0 +1,634 @@
+{
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "AZN": {
+ "name": "Ô±Õ¤Ö€Õ¢Õ¥Õ»Õ¡Õ¶Õ¡Õ¯Õ¡Õ¶ Õ´Õ¡Õ¶Õ¡Õ©",
+ "symbol": "AZN"
+ },
+ "ALL": {
+ "name": "Ô±Õ¬Õ¢Õ¡Õ¶Õ¡Õ¯Õ¡Õ¶ Õ¬Õ¥Õ¯",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Ô±Õ¬ÕªÕ«Ö€Õ¡Õ¯Õ¡Õ¶ Õ¤Õ«Õ¶Õ¡Ö€",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "Ô±Õ„Õ† Õ¤Õ¸Õ¬Õ¡Ö€",
+ "symbol": "$"
+ },
+ "AOA": {
+ "name": "Ô±Õ¶Õ£Õ¸Õ¬Õ¡Õ¯Õ¡Õ¶ Õ¯Õ¾Õ¡Õ¶Õ¦Õ¡",
+ "symbol": "AOA"
+ },
+ "AUD": {
+ "name": "Ô±Õ¾Õ½Õ¿Ö€Õ¡Õ¬Õ¡Õ¯Õ¡Õ¶ Õ¤Õ¸Õ¬Õ¡Ö€",
+ "symbol": "A$"
+ },
+ "AED": {
+ "name": "Ô±Ö€Õ¡Õ¢Õ¡Õ¯Õ¡Õ¶ Õ„Õ«Õ¡ÖÕµÕ¡Õ¬ Ô·Õ´Õ«Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ¤Õ«Ö€Õ°Õ¡Õ´",
+ "symbol": "AED"
+ },
+ "ARS": {
+ "name": "Ô±Ö€Õ£Õ¥Õ¶Õ¿Õ«Õ¶Õ¡Õ¯Õ¡Õ¶ ÕºÕ¥Õ½Õ¸",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "Ô±Ö€Õ¸Ö‚Õ¢Õ¡Õ¯Õ¡Õ¶ Ö†Õ¬Õ¸Ö€Õ«Õ¶",
+ "symbol": "AWG"
+ },
+ "XCD": {
+ "name": "Ô±Ö€Ö‡Õ¥Õ¬Õ¡Õ¯Õ¡Ö€Õ«Õ¢ÕµÕ¡Õ¶ Õ¤Õ¸Õ¬Õ¡Ö€",
+ "symbol": "EC$"
+ },
+ "AFN": {
+ "name": "Ô±Ö†Õ²Õ¡Õ¶Õ¡Õ¯Õ¡Õ¶ Õ¡Ö†Õ²Õ¡Õ¶Õ«",
+ "symbol": "AFN"
+ },
+ "XOF": {
+ "name": "Ô±Ö†Ö€Õ«Õ¯Õ¡Õ¯Õ¡Õ¶ Ö†Õ«Õ¶Õ¡Õ¶Õ½Õ¡Õ¯Õ¡Õ¶ Õ°Õ¡Õ´Õ¡ÕµÕ¶Ö„Õ« Ö†Ö€Õ¡Õ¶Õ¯ BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Ô±Ö†Ö€Õ«Õ¯Õ¡Õ¯Õ¡Õ¶ Ö†Õ«Õ¶Õ¡Õ¶Õ½Õ¡Õ¯Õ¡Õ¶ Õ°Õ¡Õ´Õ¡ÕµÕ¶Ö„Õ« Ö†Ö€Õ¡Õ¶Õ¯ BEAC",
+ "symbol": "FCFA"
+ },
+ "BSD": {
+ "name": "Ô²Õ¡Õ°Õ¡Õ´Õ¡Õ¯Õ¡Õ¶ Õ¤Õ¸Õ¬Õ¡Ö€",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Ô²Õ¡Õ°Ö€Õ¥ÕµÕ¶Õ¡Õ¯Õ¡Õ¶ Õ¤Õ«Õ¶Õ¡Ö€",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Ô²Õ¡Õ¶Õ£Õ¬Õ¡Õ¤Õ¥Õ·Õ« Õ¿Õ¡Õ¯Õ¡",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Ô²Õ¡Ö€Õ¢Õ¡Õ¤Õ¸Õ½ÕµÕ¡Õ¶ Õ¤Õ¸Õ¬Õ¡Ö€",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "Ô²Õ¥Õ¬Õ¡Õ¼Õ¸Ö‚Õ½Õ¡Õ¯Õ¡Õ¶ Õ¼Õ¸Ö‚Õ¢Õ¬Õ«",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Ô²Õ¥Õ¬Õ«Õ¦Õ« Õ¤Õ¸Õ¬Õ¡Ö€",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Ô²Õ¥Ö€Õ´Õ¸Ö‚Õ¤ÕµÕ¡Õ¶ Õ¤Õ¸Õ¬Õ¡Ö€",
+ "symbol": "BMD"
+ },
+ "BWP": {
+ "name": "Ô²Õ¸Õ©Õ½Õ¾Õ¡Õ¶Õ¡Õ¯Õ¡Õ¶ ÕºÕ¸Ö‚Õ¬Õ¡",
+ "symbol": "BWP"
+ },
+ "BOB": {
+ "name": "Ô²Õ¸Õ¬Õ«Õ¾Õ«Õ¡Õ¯Õ¡Õ¶ Õ¢Õ¸Õ¬Õ«Õ¾Õ«Õ¡Õ¶Õ¸",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Ô²Õ¸Õ½Õ¶Õ«Õ¡ Ö‡ Õ€Õ¥Ö€ÖÕ¥Õ£Õ¸Õ¾Õ«Õ¶Õ¡ÕµÕ« ÖƒÕ¸Õ­Õ¡Ö€Õ¯Õ¥Õ¬Õ« Õ´Õ¡Ö€Õ¯Õ¡",
+ "symbol": "BAM"
+ },
+ "BTN": {
+ "name": "Ô²Õ¸Ö‚Õ©Õ¡Õ¶Õ¡Õ¯Õ¡Õ¶ Õ¶Õ£Õ¸Ö‚Õ¬Õ¿Ö€Õ¸Ö‚Õ´",
+ "symbol": "BTN"
+ },
+ "BGN": {
+ "name": "Ô²Õ¸Ö‚Õ¬Õ²Õ¡Ö€Õ¡Õ¯Õ¡Õ¶ Õ¬Ö‡",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Ô²Õ¸Ö‚Ö€Õ¸Ö‚Õ¶Õ¤Õ«Õ« Ö†Ö€Õ¡Õ¶Õ¯",
+ "symbol": "BIF"
+ },
+ "BRL": {
+ "name": "Ô²Ö€Õ¡Õ¦Õ«Õ¬Õ¡Õ¯Õ¡Õ¶ Õ¼Õ¥Õ¡Õ¬",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "Ô²Ö€Õ«Õ¿Õ¡Õ¶Õ¡Õ¯Õ¡Õ¶ Ö†Õ¸Ö‚Õ¶Õ¿ Õ½Õ¿Õ¥Õ¼Õ¬Õ«Õ¶Õ£",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Ô²Ö€Õ¸Ö‚Õ¶Õ¥ÕµÕ¡Õ¯Õ¡Õ¶ Õ¤Õ¸Õ¬Õ¡Ö€",
+ "symbol": "BND"
+ },
+ "GMD": {
+ "name": "Ô³Õ¡Õ´Õ¢Õ«Õ¡Õ¯Õ¡Õ¶ Õ¤Õ¡Õ¬Õ¡Õ½Õ«",
+ "symbol": "GMD"
+ },
+ "GYD": {
+ "name": "Ô³Õ¡ÕµÕ¡Õ¶Õ¡Õ¯Õ¡Õ¶ Õ¤Õ¸Õ¬Õ¡Ö€",
+ "symbol": "GYD"
+ },
+ "GHS": {
+ "name": "Ô³Õ¡Õ¶Õ¡Õ¯Õ¡Õ¶ Õ½Õ¥Õ¤Õ«",
+ "symbol": "GHS"
+ },
+ "GTQ": {
+ "name": "Ô³Õ¾Õ¡Õ¿Õ¥Õ´Õ¡Õ¬Õ¡Õ¯Õ¡Õ¶ Õ¯Õ¥Õ¿Õ½Õ¡Õ¬",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Ô³Õ¾Õ«Õ¶Õ¥Õ¡Õ¯Õ¡Õ¶ Ö†Ö€Õ¡Õ¶Õ¯",
+ "symbol": "GNF"
+ },
+ "DKK": {
+ "name": "Ô´Õ¡Õ¶Õ«Õ¡Õ¯Õ¡Õ¶ Õ¯Ö€Õ¸Õ¶Õ¡",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "Ô´Õ¸Õ´Õ«Õ¶Õ«Õ¯Õ¡Õ¯Õ¡Õ¶ ÕºÕ¥Õ½Õ¸",
+ "symbol": "DOP"
+ },
+ "EGP": {
+ "name": "ÔµÕ£Õ«ÕºÕ¿Õ¡Õ¯Õ¡Õ¶ Ö†Õ¸Ö‚Õ¶Õ¿",
+ "symbol": "EGP"
+ },
+ "ETB": {
+ "name": "ÔµÕ©Õ¸Õ¾ÕºÕ¡Õ¯Õ¡Õ¶ Õ¢Õ«Ö€",
+ "symbol": "ETB"
+ },
+ "YER": {
+ "name": "ÔµÕ´Õ¥Õ¶Õ¡Õ¯Õ¡Õ¶ Õ¼Õ«Õ¡Õ¬",
+ "symbol": "YER"
+ },
+ "EUR": {
+ "name": "ÔµÕ¾Ö€Õ¸",
+ "symbol": "€"
+ },
+ "ZMW": {
+ "name": "Ô¶Õ¡Õ´Õ¢Õ«Õ¡Õ¯Õ¡Õ¶ Õ¯Õ¾Õ¡Õ¹Õ¡",
+ "symbol": "ZMW"
+ },
+ "ERN": {
+ "name": "Ô·Ö€Õ«Õ©Ö€Õ¥Õ¡Õ¯Õ¡Õ¶ Õ¶Õ¡Õ¯Ö†Õ¡",
+ "symbol": "ERN"
+ },
+ "THB": {
+ "name": "Ô¹Õ¡Õ«Õ¬Õ¡Õ¶Õ¤Õ¡Õ¯Õ¡Õ¶ Õ¢Õ¡Õ¿",
+ "symbol": "฿"
+ },
+ "TWD": {
+ "name": "Ô¹Õ¡ÕµÕ¾Õ¡Õ¶Õ¡Õ¯Õ¡Õ¶ Õ¶Õ¸Ö€ Õ¤Õ¸Õ¬Õ¡Ö€",
+ "symbol": "NT$"
+ },
+ "TND": {
+ "name": "Ô¹Õ¸Ö‚Õ¶Õ«Õ½Õ¡Õ¯Õ¡Õ¶ Õ¤Õ«Õ¶Õ¡Ö€",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Ô¹Õ¸Ö‚Ö€Ö„Õ¡Õ¯Õ¡Õ¶ Õ¬Õ«Ö€Õ¡",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "Ô¹Õ¸Ö‚Ö€Ö„Õ´Õ¥Õ¶Õ¡Õ¯Õ¡Õ¶ Õ´Õ¡Õ¶Õ¡Õ©",
+ "symbol": "TMT"
+ },
+ "IDR": {
+ "name": "Ô»Õ¶Õ¤Õ¸Õ¶Õ¥Õ¦Õ¡Õ¯Õ¡Õ¶ Õ¼Õ¸Ö‚ÖƒÕ«",
+ "symbol": "IDR"
+ },
+ "ISK": {
+ "name": "Ô»Õ½Õ¬Õ¡Õ¶Õ¤Õ¡Õ¯Õ¡Õ¶ Õ¯Ö€Õ¸Õ¶Õ¡",
+ "symbol": "ISK"
+ },
+ "ILS": {
+ "name": "Ô»Õ½Ö€Õ¡ÕµÕ¥Õ¬Õ« Õ¶Õ¸Ö€ Õ·Õ¥Õ¯Õ¥Õ¬",
+ "symbol": "₪"
+ },
+ "IRR": {
+ "name": "Ô»Ö€Õ¡Õ¶Õ¡Õ¯Õ¡Õ¶ Õ¼Õ«Õ¡Õ¬",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Ô»Ö€Õ¡Ö„ÕµÕ¡Õ¶ Õ¤Õ«Õ¶Õ¡Ö€",
+ "symbol": "IQD"
+ },
+ "LKR": {
+ "name": "Ô¼Õ¡Õ¶Õ¯Õ«Õ¡Õ¯Õ¡Õ¶ Õ¼Õ¸Ö‚ÖƒÕ«",
+ "symbol": "LKR"
+ },
+ "LAK": {
+ "name": "Ô¼Õ¡Õ¸Õ½Õ¡Õ¯Õ¡Õ¶ Õ¯Õ«Õº",
+ "symbol": "LAK"
+ },
+ "PLN": {
+ "name": "Ô¼Õ¥Õ°Õ¡Õ¯Õ¡Õ¶ Õ¦Õ¬Õ¸Õ¿Õ«",
+ "symbol": "PLN"
+ },
+ "LBP": {
+ "name": "Ô¼Õ«Õ¢Õ¡Õ¶Õ¡Õ¶Õ¡Õ¯Õ¡Õ¶ Ö†Õ¸Ö‚Õ¶Õ¿",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "Ô¼Õ«Õ¢Õ¥Ö€Õ«Õ¡Õ¯Õ¡Õ¶ Õ¤Õ¸Õ¬Õ¡Ö€",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Ô¼Õ«Õ¢Õ«Õ¡Õ¯Õ¡Õ¶ Õ¤Õ«Õ¶Õ¡Ö€",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Ô¼Õ«Õ¿Õ¾Õ¡Õ¯Õ¡Õ¶ Õ¬Õ«Õ¿",
+ "symbol": "LTL"
+ },
+ "HRK": {
+ "name": "Ô½Õ¸Ö€Õ¾Õ¡Õ©Õ¡Õ¯Õ¡Õ¶ Õ¯Õ¸Ö‚Õ¶Õ¡",
+ "symbol": "HRK"
+ },
+ "CVE": {
+ "name": "Ô¿Õ¡Õ¢Õ¸ ÕŽÕ¥Ö€Õ¤Õ¥Õ« Õ§Õ½Õ¯Õ¸Ö‚Õ¤Õ¸",
+ "symbol": "CVE"
+ },
+ "KHR": {
+ "name": "Ô¿Õ¡Õ´Õ¢Õ¸Õ»Õ¡Õ¯Õ¡Õ¶ Õ¼Õ«Õ¥Õ¬",
+ "symbol": "KHR"
+ },
+ "KYD": {
+ "name": "Ô¿Õ¡ÕµÕ´Õ¡Õ¶ÕµÕ¡Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€Õ« Õ¤Õ¸Õ¬Õ¡Ö€",
+ "symbol": "KYD"
+ },
+ "CAD": {
+ "name": "Ô¿Õ¡Õ¶Õ¡Õ¤Õ¡Õ¯Õ¡Õ¶ Õ¤Õ¸Õ¬Õ¡Ö€",
+ "symbol": "CA$"
+ },
+ "KPW": {
+ "name": "Ô¿ÔºÔ´Õ€-Õ« Õ¾Õ¸Õ¶Õ¡",
+ "symbol": "KPW"
+ },
+ "COP": {
+ "name": "Ô¿Õ¸Õ¬Õ¸Ö‚Õ´Õ¢Õ«Õ¡Õ¯Õ¡Õ¶ ÕºÕ¥Õ½Õ¸",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Ô¿Õ¸Õ´Õ¸Ö€ÕµÕ¡Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€Õ« Ö†Ö€Õ¡Õ¶Õ¯",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Ô¿Õ¸Õ¶Õ£Õ¸ÕµÕ« Ö†Ö€Õ¡Õ¶Õ¯",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Կոստա Ռիկայի կոլոն",
+ "symbol": "CRC"
+ },
+ "CUP": {
+ "name": "Ô¿Õ¸Ö‚Õ¢Õ¡Õ¯Õ¡Õ¶ ÕºÕ¥Õ½Õ¸",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "Ô¿Õ¸Ö‚Õ¢Õ¡Õ¯Õ¡Õ¶ ÖƒÕ¸Õ­Õ¡Ö€Õ¯Õ¥Õ¬Õ« ÕºÕ¥Õ½Õ¸",
+ "symbol": "CUC"
+ },
+ "XPF": {
+ "name": "Ô¿ÕŠÕ– Ö†Ö€Õ¡Õ¶Õ¯",
+ "symbol": "CFPF"
+ },
+ "HTG": {
+ "name": "Õ€Õ¡Õ«Õ©ÕµÕ¡Õ¶ Õ£Õ¸Ö‚Ö€Õ¤",
+ "symbol": "HTG"
+ },
+ "AMD": {
+ "name": "Õ€Õ¡ÕµÕ¯Õ¡Õ¯Õ¡Õ¶ Õ¤Ö€Õ¡Õ´",
+ "symbol": "Ö"
+ },
+ "ZAR": {
+ "name": "Õ€Õ¡Ö€Õ¡Õ¾Õ¡Ö†Ö€Õ«Õ¯Õ¡Õ¯Õ¡Õ¶ Õ¼Õ¥Õ¶Õ¤",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "Õ€Õ¡Ö€Õ¡Õ¾Õ¯Õ¸Ö€Õ¥Õ¡Õ¯Õ¡Õ¶ Õ¾Õ¸Õ¶Õ¡",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "Õ€Õ¡Ö€Õ¡Õ¾Õ½Õ¸Ö‚Õ¤Õ¡Õ¶Õ¡Õ¯Õ¡Õ¶ Ö†Õ¸Ö‚Õ¶Õ¿",
+ "symbol": "SSP"
+ },
+ "INR": {
+ "name": "Õ€Õ¶Õ¤Õ¯Õ¡Õ¯Õ¡Õ¶ Õ¼Õ¸Ö‚ÖƒÕ«",
+ "symbol": "₹"
+ },
+ "HNL": {
+ "name": "Õ€Õ¸Õ¶Õ¤Õ¸Ö‚Ö€Õ¡Õ½Õ¡Õ¯Õ¡Õ¶ Õ¬Õ¥Õ´ÕºÖ€Õ«Õ¡",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Õ€Õ¸Õ¶Õ¯Õ¸Õ¶Õ£Õ« Õ¤Õ¸Õ¬Õ¡Ö€",
+ "symbol": "HK$"
+ },
+ "JOD": {
+ "name": "Õ€Õ¸Ö€Õ¤Õ¡Õ¶Õ¡Õ¶Õ¡Õ¯Õ¡Õ¶ Õ¤Õ«Õ¶Õ¡Ö€",
+ "symbol": "JOD"
+ },
+ "HUF": {
+ "name": "Õ€Õ¸Ö‚Õ¶Õ£Õ¡Ö€Õ¡Õ¯Õ¡Õ¶ Ö†Õ¸Ö€Õ«Õ¶Õ¿",
+ "symbol": "HUF"
+ },
+ "KZT": {
+ "name": "Õ‚Õ¡Õ¦Õ¡Õ­Õ¡Õ¯Õ¡Õ¶ Õ¿Õ¥Õ¶Õ£Õ¥",
+ "symbol": "KZT"
+ },
+ "KGS": {
+ "name": "Õ‚Ö€Õ²Õ¦Õ¡Õ¯Õ¡Õ¶ Õ½Õ¸Õ´",
+ "symbol": "KGS"
+ },
+ "JPY": {
+ "name": "ÕƒÕ¡ÕºÕ¸Õ¶Õ¡Õ¯Õ¡Õ¶ Õ«Õ¥Õ¶",
+ "symbol": "JPÂ¥"
+ },
+ "MGA": {
+ "name": "Õ„Õ¡Õ¤Õ¡Õ£Õ¡Õ½Õ¯Õ¡Ö€Õ« Õ¡Ö€Õ«Õ¡Ö€Õ«",
+ "symbol": "MGA"
+ },
+ "MYR": {
+ "name": "Õ„Õ¡Õ¬Õ¡ÕµÕ¦Õ«Õ¡Õ¯Õ¡Õ¶ Õ¼Õ«Õ¶Õ£Õ«Õ¿",
+ "symbol": "MYR"
+ },
+ "MWK": {
+ "name": "Õ„Õ¡Õ¬Õ¡Õ¾Õ«Õ¡Õ¯Õ¡Õ¶ Õ¯Õ¾Õ¡Õ¹Õ¡",
+ "symbol": "MWK"
+ },
+ "MVR": {
+ "name": "Õ„Õ¡Õ¬Õ¤Õ«Õ¾ÕµÕ¡Õ¶ Õ¼Õ¸Ö‚Ö†Õ«Õ¡",
+ "symbol": "MVR"
+ },
+ "MOP": {
+ "name": "Õ„Õ¡Õ¯Õ¡Õ¸ÕµÕ« ÕºÕ¡Õ¿Õ¡Õ¯Õ¡",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Õ„Õ¡Õ¯Õ¥Õ¤Õ¸Õ¶Õ¡Õ¯Õ¡Õ¶ Õ¤Õ¥Õ¶Õ¡Ö€",
+ "symbol": "MKD"
+ },
+ "MUR": {
+ "name": "Õ„Õ¡Õ¾Ö€Õ«Õ¯Õ¡Õ¯Õ¡Õ¶ Õ¼Õ¸Ö‚ÖƒÕ«",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "Õ„Õ¡Õ¾Ö€Õ«Õ¿Õ¡Õ¶Õ¡Õ¯Õ¡Õ¶ Õ¸Ö‚Õ£Õ«ÕµÕ¡",
+ "symbol": "MRO"
+ },
+ "MAD": {
+ "name": "Õ„Õ¡Ö€Õ¸Õ¯Õ¡Õ¯Õ¡Õ¶ Õ¤Õ«Ö€Õ°Õ¡Õ´",
+ "symbol": "MAD"
+ },
+ "MXN": {
+ "name": "Õ„Õ¥Ö„Õ½Õ«Õ¯Õ¡Õ¯Õ¡Õ¶ ÕºÕ¥Õ½Õ¸",
+ "symbol": "MX$"
+ },
+ "MMK": {
+ "name": "Õ„ÕµÕ¡Õ¶Õ´Õ¡Õ¯Õ¡Õ¶ Õ¯ÕµÕ¡Õ¿",
+ "symbol": "MMK"
+ },
+ "MZN": {
+ "name": "Õ„Õ¸Õ¦Õ¡Õ´Õ¢Õ«Õ¯ÕµÕ¡Õ¶ Õ´Õ¥Õ¿Õ«Õ¯Õ¡Õ¬",
+ "symbol": "MZN"
+ },
+ "MDL": {
+ "name": "Õ„Õ¸Õ¬Õ¤Õ¸Õ¾Õ¡Õ¯Õ¡Õ¶ Õ¬Õ¥Õµ",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Õ„Õ¸Õ¶Õ²Õ¸Õ¬Õ¡Õ¯Õ¡Õ¶ Õ¿Õ¸Ö‚Õ£Ö€Õ«Õ¯",
+ "symbol": "MNT"
+ },
+ "NAD": {
+ "name": "Õ†Õ¡Õ´Õ«Õ¢Õ«Õ¡Õ¯Õ¡Õ¶ Õ¤Õ¸Õ¬Õ¡Ö€",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Õ†Õ¥ÕºÕ¡Õ¬Õ¡Õ¯Õ¡Õ¶ Õ¼Õ¸Ö‚ÖƒÕ«",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "Õ†Õ«Õ£Õ¥Ö€Õ«Õ¡Õ¯Õ¡Õ¶ Õ¶Õ¡ÕµÖ€Õ¡",
+ "symbol": "NGN"
+ },
+ "ANG": {
+ "name": "Õ†Õ«Õ¤Õ¥Ö€Õ¬Õ¡Õ¶Õ¤Õ¡Õ¯Õ¡Õ¶ Ô±Õ¶Õ¿Õ«Õ¬Õ¶Õ¥Ö€Õ« Õ£Õ¸Ö‚Õ¬Õ¤Õ¥Õ¶",
+ "symbol": "ANG"
+ },
+ "NIO": {
+ "name": "Õ†Õ«Õ¯Õ¡Ö€Õ¡Õ£Õ¸Ö‚Õ¡Õ¯Õ¡Õ¶ Õ¯Õ¸Ö€Õ¤Õ¸Õ¢Õ¡",
+ "symbol": "NIO"
+ },
+ "NZD": {
+ "name": "Õ†Õ¸Ö€Õ¦Õ¥Õ¬Õ¡Õ¶Õ¤Õ¡Õ¯Õ¡Õ¶ Õ¤Õ¸Õ¬Õ¡Ö€",
+ "symbol": "NZ$"
+ },
+ "NOK": {
+ "name": "Õ†Õ¸Ö€Õ¾Õ¥Õ£Õ¡Õ¯Õ¡Õ¶ Õ¯Ö€Õ¸Õ¶Õ¡",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "Õ‡Õ¾Õ¥Õ¤Õ¡Õ¯Õ¡Õ¶ Õ¯Ö€Õ¸Õ¶Õ¡",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Õ‡Õ¾Õ¥ÕµÖÕ¡Ö€Õ¡Õ¯Õ¡Õ¶ Ö†Ö€Õ¡Õ¶Õ¯",
+ "symbol": "CHF"
+ },
+ "UGX": {
+ "name": "ÕˆÖ‚Õ£Õ¡Õ¶Õ¤Õ¡Õ¯Õ¡Õ¶ Õ·Õ«Õ¬Õ«Õ¶Õ£",
+ "symbol": "UGX"
+ },
+ "UZS": {
+ "name": "ÕˆÖ‚Õ¦Õ¢Õ¥Õ¯Õ¡Õ¯Õ¡Õ¶ Õ½Õ¸Ö‚Õ´",
+ "symbol": "UZS"
+ },
+ "UAH": {
+ "name": "ÕˆÖ‚Õ¯Ö€Õ¡Õ«Õ¶Õ¡Õ¯Õ¡Õ¶ Õ£Ö€Õ«Õ¾Õ¶Õ¡",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "ÕˆÖ‚Ö€Õ¸Ö‚Õ£Õ¾Õ¡ÕµÕ¡Õ¯Õ¡Õ¶ ÕºÕ¥Õ½Õ¸",
+ "symbol": "UYU"
+ },
+ "CZK": {
+ "name": "Õ‰Õ¥Õ­Õ¡Õ¯Õ¡Õ¶ Õ¯Ö€Õ¸Õ¶Õ¡",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "Õ‰Õ«Õ¬Õ«Õ¡Õ¯Õ¡Õ¶ ÕºÕ¥Õ½Õ¸",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Õ‰Õ«Õ¶Õ¡Õ¯Õ¡Õ¶ ÕµÕ¸Ö‚Õ¡Õ¶",
+ "symbol": "CNÂ¥"
+ },
+ "PKR": {
+ "name": "ÕŠÕ¡Õ¯Õ«Õ½Õ¿Õ¡Õ¶Õ¡Õ¯Õ¡Õ¶ Õ¼Õ¸Ö‚ÖƒÕ«",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "ÕŠÕ¡Õ¶Õ¡Õ´Õ¡Õ¯Õ¡Õ¶ Õ¢Õ¡Õ¬Õ¢Õ¸Õ¡",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "ÕŠÕ¡ÕºÕ¸Ö‚Õ¡-Õ†Õ¸Ö€ Ô³Õ¾Õ«Õ¶Õ¥Õ¡ÕµÕ« Õ¯Õ«Õ¶Õ¡",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "ÕŠÕ¡Ö€Õ¡Õ£Õ¾Õ¡ÕµÕ¡Õ¯Õ¡Õ¶ Õ£Õ¸Ö‚Õ¡Ö€Õ¡Õ¶Õ«",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "ÕŠÕ¥Ö€Õ¸Ö‚Õ« Õ¶Õ¸Ö€ Õ½Õ¸Õ¬",
+ "symbol": "PEN"
+ },
+ "JMD": {
+ "name": "Õ‹Õ¡Õ´Õ¡ÕµÕ¯Õ¡Õ¯Õ¡Õ¶ Õ¤Õ¸Õ¬Õ¡Ö€",
+ "symbol": "JMD"
+ },
+ "DJF": {
+ "name": "Õ‹Õ«Õ¢Õ¸Ö‚Õ©Õ«Õ« Ö†Ö€Õ¡Õ¶Õ¯",
+ "symbol": "DJF"
+ },
+ "GIP": {
+ "name": "Õ‹Õ«Õ¢Ö€Õ¡Õ¬Õ©Õ¡Ö€Õ« Ö†Õ¸Ö‚Õ¶Õ¿",
+ "symbol": "GIP"
+ },
+ "RWF": {
+ "name": "Ռուանդական ֆրանկ",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "Ռումինական լեյ",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Ռուսական ռուբլի",
+ "symbol": "RUB"
+ },
+ "WST": {
+ "name": "ÕÕ¡Õ´Õ¸Õ¡Õ¯Õ¡Õ¶ Õ¿Õ¡Õ¬Õ¡",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "ÕÕ¡Õ¶ ÕÕ¸Õ´Õ¥ Ö‡ ÕŠÖ€Õ«Õ¶Õ½Õ«ÕºÕ«Õ« Õ¤Õ¸Õ¢Ö€Õ¡",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "ÕÕ¡Õ¸Ö‚Õ¤ÕµÕ¡Õ¶ Ô±Ö€Õ¡Õ¢Õ«Õ¡ÕµÕ« Õ¼Õ«Õ¡Õ¬",
+ "symbol": "SAR"
+ },
+ "SCR": {
+ "name": "ÕÕ¥ÕµÕ·Õ¥Õ¬ÕµÕ¡Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€Õ« Õ¼Õ¸Ö‚ÖƒÕ«",
+ "symbol": "SCR"
+ },
+ "RSD": {
+ "name": "ÕÕ¥Ö€Õ¢Õ¡Õ¯Õ¡Õ¶ Õ¤Õ«Õ¶Õ¡Ö€",
+ "symbol": "RSD"
+ },
+ "SLL": {
+ "name": "ÕÕ«Õ¥Ö€Õ¡-Ô¼Õ¥Õ¸Õ¶Õ¥Õ« Õ¬Õ¥Õ¸Õ¶Õ¥",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "ÕÕ«Õ¶Õ£Õ¡ÕºÕ¸Ö‚Ö€ÕµÕ¡Õ¶ Õ¤Õ¸Õ¬Õ¡Ö€",
+ "symbol": "SGD"
+ },
+ "SYP": {
+ "name": "ÕÕ«Ö€Õ«Õ¡Õ¯Õ¡Õ¶ Ö†Õ¸Ö‚Õ¶Õ¿",
+ "symbol": "SYP"
+ },
+ "SBD": {
+ "name": "ÕÕ¸Õ²Õ¸Õ´Õ¸Õ¶ÕµÕ¡Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€Õ« Õ¤Õ¸Õ¬Õ¡Ö€",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "ÕÕ¸Õ´Õ¡Õ¬Õ«Õ¡Õ¯Õ¡Õ¶ Õ·Õ«Õ¬Õ«Õ¶Õ£",
+ "symbol": "SOS"
+ },
+ "SDG": {
+ "name": "ÕÕ¸Ö‚Õ¤Õ¡Õ¶Õ¡Õ¯Õ¡Õ¶ Ö†Õ¸Ö‚Õ¶Õ¿",
+ "symbol": "SDG"
+ },
+ "SHP": {
+ "name": "ÕÕ¸Ö‚Ö€Õ¢ Õ€Õ¥Õ²Õ«Õ¶Õ¥Õ« Õ¯Õ²Õ¦Õ¸Ö‚ Ö†Õ¸Ö‚Õ¶Õ¿",
+ "symbol": "SHP"
+ },
+ "SRD": {
+ "name": "ÕÕ¸Ö‚Ö€Õ«Õ¶Õ¡Õ´Õ¡Õ¯Õ¡Õ¶ Õ¤Õ¸Õ¬Õ¡Ö€",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "ÕÕ¾Õ¡Õ¦Õ«Õ¬Õ¥Õ¶Õ¤Õ¡Õ¯Õ¡Õ¶ Õ¬Õ«Õ¬Õ¡Õ¶Õ£Õ¥Õ¶Õ«",
+ "symbol": "SZL"
+ },
+ "VUV": {
+ "name": "ÕŽÕ¡Õ¶Õ¸Ö‚Õ¡Õ¿Õ¸Ö‚Õ« Õ¾Õ¡Õ¿Õ¸Ö‚",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "ÕŽÕ¥Õ¶Õ¥Õ½Õ¸Ö‚Õ¥Õ¬Õ¡Õ¯Õ¡Õ¶ Õ¢Õ¸Õ¬Õ«Õ¾Õ¡Ö€",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "ÕŽÕ«Õ¥Õ¿Õ¶Õ¡Õ´Õ¡Õ¯Õ¡Õ¶ Õ¤Õ¸Õ¶Õ£",
+ "symbol": "â‚«"
+ },
+ "GEL": {
+ "name": "ÕŽÖ€Õ¡ÖÕ¡Õ¯Õ¡Õ¶ Õ¬Õ¡Ö€Õ«",
+ "symbol": "GEL"
+ },
+ "TZS": {
+ "name": "ÕÕ¡Õ¶Õ¦Õ¡Õ¶Õ«Õ¡Õ¯Õ¡Õ¶ Õ·Õ«Õ¬Õ«Õ¶Õ£",
+ "symbol": "TZS"
+ },
+ "TJS": {
+ "name": "ÕÕ¡Õ»Õ«Õ¯Õ¡Õ¯Õ¡Õ¶ Õ½Õ¸Õ´Õ¸Õ¶Õ«",
+ "symbol": "TJS"
+ },
+ "TOP": {
+ "name": "ÕÕ¸Õ¶Õ£Õ¡ÕµÕ« ÕºÕ¡Õ¡Õ¶Õ£Õ¡",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "ÕÖ€Õ«Õ¶Õ«Õ¤Õ¡Õ¤ Ö‡ ÕÕ¸Õ¢Õ¡Õ£Õ¸ÕµÕ« Õ¤Õ¸Õ¬Õ¡Ö€",
+ "symbol": "TTD"
+ },
+ "QAR": {
+ "name": "Õ”Õ¡Õ©Õ¡Ö€Õ¡Õ¯Õ¡Õ¶ Õ¼Õ«Õ¡Õ¬",
+ "symbol": "QAR"
+ },
+ "KES": {
+ "name": "Õ”Õ¥Õ¶Õ«Õ¡Õ¯Õ¡Õ¶ Õ·Õ«Õ¬Õ«Õ¶Õ£",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "Õ”Õ¸Ö‚Õ¾Õ¥ÕµÕ©Õ¡Õ¯Õ¡Õ¶ Õ¤Õ«Õ¶Õ¡Ö€",
+ "symbol": "KWD"
+ },
+ "OMR": {
+ "name": "Õ•Õ´Õ¡Õ¶Õ¡Õ¯Õ¡Õ¶ Õ¼Õ«Õ¡Õ¬",
+ "symbol": "OMR"
+ },
+ "PHP": {
+ "name": "Õ–Õ«Õ¬Õ«ÕºÕ«Õ¶Õ¡Õ¯Õ¡Õ¶ ÕºÕ¥Õ½Õ¸",
+ "symbol": "PHP"
+ },
+ "FJD": {
+ "name": "Õ–Õ«Õ»Õ«Õ¡Õ¯Õ¡Õ¶ Õ¤Õ¸Õ¬Õ¡Ö€",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "Õ–Õ¸Õ¬Õ¯Õ¬Õ¥Õ¶Õ¤ÕµÕ¡Õ¶ Õ¯Õ²Õ¦Õ«Õ¶Õ¥Ö€ Ö†Õ¸Ö‚Õ¶Õ¿",
+ "symbol": "FKP"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/id.json b/library/intl/resources/currency/id.json
new file mode 100644
index 000000000..3e27f70c9
--- /dev/null
+++ b/library/intl/resources/currency/id.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afgani Afganistan",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "Ariary Madagaskar",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "Baht Thailand",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "Balboa Panama",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "Birr Etiopia",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "Bolivar Venezuela",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "Boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "Cedi Ghana",
+ "symbol": "GHS"
+ },
+ "SVC": {
+ "name": "Colon El Savador",
+ "symbol": "SVC"
+ },
+ "CRC": {
+ "name": "Colon Kosta Rika",
+ "symbol": "CRC"
+ },
+ "NIO": {
+ "name": "Cordoba Nikaragua",
+ "symbol": "NIO"
+ },
+ "GMD": {
+ "name": "Dalasi Gambia",
+ "symbol": "GMD"
+ },
+ "MKD": {
+ "name": "Denar Makedonia",
+ "symbol": "MKD"
+ },
+ "DZD": {
+ "name": "Dinar Algeria",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinar Bahrain",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "Dinar Irak",
+ "symbol": "IQD"
+ },
+ "KWD": {
+ "name": "Dinar Kuwait",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "Dinar Libya",
+ "symbol": "LYD"
+ },
+ "RSD": {
+ "name": "Dinar Serbia",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "Dinar Tunisia",
+ "symbol": "TND"
+ },
+ "JOD": {
+ "name": "Dinar Yordania",
+ "symbol": "JOD"
+ },
+ "MAD": {
+ "name": "Dirham Maroko",
+ "symbol": "MAD"
+ },
+ "AED": {
+ "name": "Dirham Uni Emirat Arab",
+ "symbol": "AED"
+ },
+ "STD": {
+ "name": "Dobra Sao Tome dan Principe",
+ "symbol": "STD"
+ },
+ "USD": {
+ "name": "Dolar Amerika Serikat",
+ "symbol": "US$"
+ },
+ "AUD": {
+ "name": "Dolar Australia",
+ "symbol": "AU$"
+ },
+ "BSD": {
+ "name": "Dolar Bahama",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "Dolar Barbados",
+ "symbol": "BBD"
+ },
+ "TWD": {
+ "name": "Dolar Baru Taiwan",
+ "symbol": "NT$"
+ },
+ "BZD": {
+ "name": "Dolar Belize",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Dolar Bermuda",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "Dolar Brunei",
+ "symbol": "BND"
+ },
+ "FJD": {
+ "name": "Dolar Fiji",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "Dolar Guyana",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "Dolar Hong Kong",
+ "symbol": "HK$"
+ },
+ "JMD": {
+ "name": "Dolar Jamaika",
+ "symbol": "JMD"
+ },
+ "CAD": {
+ "name": "Dolar Kanada",
+ "symbol": "CA$"
+ },
+ "XCD": {
+ "name": "Dolar Karibia Timur",
+ "symbol": "EC$"
+ },
+ "KYD": {
+ "name": "Dolar Kepulauan Cayman",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "Dolar Kepulauan Solomon",
+ "symbol": "SBD"
+ },
+ "LRD": {
+ "name": "Dolar Liberia",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Dolar Namibia",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "Dolar Selandia Baru",
+ "symbol": "NZ$"
+ },
+ "SGD": {
+ "name": "Dolar Singapura",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "Dolar Suriname",
+ "symbol": "SRD"
+ },
+ "TTD": {
+ "name": "Dolar Trinidad dan Tobago",
+ "symbol": "TTD"
+ },
+ "ZWL": {
+ "name": "Dolar Zimbabwe (2009)",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "Dong Vietnam",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "Dram Armenia",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "Escudo Tanjung Verde",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "AWG": {
+ "name": "Florin Aruba",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "Forint Hungaria",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "Franc Burundi",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Franc CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Franc CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "Franc CFP",
+ "symbol": "CFPF"
+ },
+ "GNF": {
+ "name": "Franc Guinea",
+ "symbol": "GNF"
+ },
+ "DJF": {
+ "name": "Franc Jibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Franc Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Franc Kongo",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Franc Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Franc Swiss",
+ "symbol": "CHF"
+ },
+ "HTG": {
+ "name": "Gourde Haiti",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "Guarani Paraguay",
+ "symbol": "PYG"
+ },
+ "ANG": {
+ "name": "Guilder Antilla Belanda",
+ "symbol": "ANG"
+ },
+ "UAH": {
+ "name": "Hryvnia Ukraina",
+ "symbol": "UAH"
+ },
+ "PGK": {
+ "name": "Kina Papua Nugini",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "Kip Laos",
+ "symbol": "LAK"
+ },
+ "CZK": {
+ "name": "Koruna Cheska",
+ "symbol": "CZK"
+ },
+ "ISK": {
+ "name": "Krona Islandia",
+ "symbol": "ISK"
+ },
+ "SEK": {
+ "name": "Krona Swedia",
+ "symbol": "SEK"
+ },
+ "DKK": {
+ "name": "Krone Denmark",
+ "symbol": "DKK"
+ },
+ "NOK": {
+ "name": "Krone Norwegia",
+ "symbol": "NOK"
+ },
+ "HRK": {
+ "name": "Kuna Kroasia",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "Kwacha Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza Angola",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "Kyat Myanmar",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "Lari Georgia",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "Lek Albania",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "Lempira Honduras",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "Leone Sierra Leone",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "Leu Moldova",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "Leu Rumania",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "Lev Bulgaria",
+ "symbol": "BGN"
+ },
+ "SZL": {
+ "name": "Lilangeni Swaziland",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "Lira Turki",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "Litas Lituania",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Loti Lesotho",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "Manat Azerbaijan",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "Manat Turkimenistan",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "Mark Konvertibel Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "Metical Mozambik",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira Nigeria",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa Eritrea",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "Ngultrum Bhutan",
+ "symbol": "BTN"
+ },
+ "PEN": {
+ "name": "Nuevo Sol Peru",
+ "symbol": "PEN"
+ },
+ "MRO": {
+ "name": "Ouguiya Mauritania",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "Paʻanga Tonga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "Pataca Makau",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "Peso Argentina",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "Peso Cile",
+ "symbol": "CLP"
+ },
+ "DOP": {
+ "name": "Peso Dominika",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "Peso Filipina",
+ "symbol": "PHP"
+ },
+ "COP": {
+ "name": "Peso Kolombia",
+ "symbol": "COP"
+ },
+ "CUC": {
+ "name": "Peso Konvertibel Kuba",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Peso Kuba",
+ "symbol": "CUP"
+ },
+ "MXN": {
+ "name": "Peso Meksiko",
+ "symbol": "MX$"
+ },
+ "UYU": {
+ "name": "Peso Uruguay",
+ "symbol": "$U"
+ },
+ "PLN": {
+ "name": "Polandia Zloty",
+ "symbol": "PLN"
+ },
+ "GIP": {
+ "name": "Pound Gibraltar",
+ "symbol": "GIP"
+ },
+ "FKP": {
+ "name": "Pound Kepulauan Falkland",
+ "symbol": "FKP"
+ },
+ "LBP": {
+ "name": "Pound Lebanon",
+ "symbol": "LBP"
+ },
+ "EGP": {
+ "name": "Pound Mesir",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Pound Saint Helena",
+ "symbol": "SHP"
+ },
+ "GBP": {
+ "name": "Pound Sterling Inggris",
+ "symbol": "£"
+ },
+ "SDG": {
+ "name": "Pound Sudan",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "Pound Sudan Selatan",
+ "symbol": "SSP"
+ },
+ "SYP": {
+ "name": "Pound Suriah",
+ "symbol": "SYP"
+ },
+ "BWP": {
+ "name": "Pula Botswana",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "Quetzal Guatemala",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "Rand Afrika Selatan",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "Real Brasil",
+ "symbol": "R$"
+ },
+ "IRR": {
+ "name": "Rial Iran",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "Rial Oman",
+ "symbol": "OMR"
+ },
+ "QAR": {
+ "name": "Rial Qatar",
+ "symbol": "QAR"
+ },
+ "YER": {
+ "name": "Rial Yaman",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "Riel Kamboja",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "Ringgit Malaysia",
+ "symbol": "MYR"
+ },
+ "SAR": {
+ "name": "Riyal Arab Saudi",
+ "symbol": "SAR"
+ },
+ "BYR": {
+ "name": "Rubel Belarusia",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "Rubel Rusia",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "Rufiyaa Maladewa",
+ "symbol": "MVR"
+ },
+ "INR": {
+ "name": "Rupee India",
+ "symbol": "Rs"
+ },
+ "MUR": {
+ "name": "Rupee Mauritius",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "Rupee Nepal",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "Rupee Pakistan",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "Rupee Seychelles",
+ "symbol": "SCR"
+ },
+ "LKR": {
+ "name": "Rupee Sri Lanka",
+ "symbol": "LKR"
+ },
+ "IDR": {
+ "name": "Rupiah Indonesia",
+ "symbol": "Rp"
+ },
+ "ILS": {
+ "name": "Shekel Baru Israel",
+ "symbol": "₪"
+ },
+ "KES": {
+ "name": "Shilling Kenya",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Shilling Somalia",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Shilling Tanzania",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Shilling Uganda",
+ "symbol": "UGX"
+ },
+ "KGS": {
+ "name": "Som Kirgistan",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "Som Uzbekistan",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "Somoni Tajikistan",
+ "symbol": "TJS"
+ },
+ "BDT": {
+ "name": "Taka Bangladesh",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "Tala Samoa",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "Tenge Kazakstan",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "Tugrik Mongolia",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "Vatu Vanuatu",
+ "symbol": "VUV"
+ },
+ "KRW": {
+ "name": "Won Korea Selatan",
+ "symbol": "â‚©"
+ },
+ "KPW": {
+ "name": "Won Korea Utara",
+ "symbol": "KPW"
+ },
+ "JPY": {
+ "name": "Yen Jepang",
+ "symbol": "JPÂ¥"
+ },
+ "CNY": {
+ "name": "Yuan China",
+ "symbol": "CNÂ¥"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/is.json b/library/intl/resources/currency/is.json
new file mode 100644
index 000000000..e2d74d04a
--- /dev/null
+++ b/library/intl/resources/currency/is.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afgani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanskt lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Alsírskur denari",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angólsk kvansa",
+ "symbol": "AOA"
+ },
+ "AED": {
+ "name": "Arabískt dírham",
+ "symbol": "AED"
+ },
+ "ARS": {
+ "name": "Argentínskur pesi",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armenskt dramm",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Arúbönsk flórína",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "Aserskt manat",
+ "symbol": "AZN"
+ },
+ "XCD": {
+ "name": "Austurkarabískur dalur",
+ "symbol": "EC$"
+ },
+ "AUD": {
+ "name": "Ãstralskur dalur",
+ "symbol": "AUD"
+ },
+ "BSD": {
+ "name": "Bahamadalur",
+ "symbol": "BSD"
+ },
+ "PAB": {
+ "name": "Balbói",
+ "symbol": "PAB"
+ },
+ "USD": {
+ "name": "Bandaríkjadalur",
+ "symbol": "USD"
+ },
+ "BDT": {
+ "name": "Bangladessk taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadoskur dalur",
+ "symbol": "BBD"
+ },
+ "BHD": {
+ "name": "Bareinskur denari",
+ "symbol": "BHD"
+ },
+ "BZD": {
+ "name": "Belískur dalur",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermúdadalur",
+ "symbol": "BMD"
+ },
+ "BWP": {
+ "name": "Botsvönsk púla",
+ "symbol": "BWP"
+ },
+ "BOB": {
+ "name": "Bólivíani",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "Brasilískt ríal",
+ "symbol": "BRL"
+ },
+ "BND": {
+ "name": "Brúneiskur dalur",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Búlgarskt lef",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Búrúndískur franki",
+ "symbol": "BIF"
+ },
+ "BTN": {
+ "name": "Bútanskt núltrum",
+ "symbol": "BTN"
+ },
+ "KYD": {
+ "name": "Caymaneyskur dalur",
+ "symbol": "KYD"
+ },
+ "DJF": {
+ "name": "Djíbútískur franki",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dóminískur pesi",
+ "symbol": "DOP"
+ },
+ "DKK": {
+ "name": "Dönsk króna",
+ "symbol": "DKK"
+ },
+ "EGP": {
+ "name": "Egypskt pund",
+ "symbol": "EGP"
+ },
+ "SVC": {
+ "name": "El Salvador Colon",
+ "symbol": "SVC"
+ },
+ "ERN": {
+ "name": "Erítresk nakfa",
+ "symbol": "ERN"
+ },
+ "EUR": {
+ "name": "Evra",
+ "symbol": "EUR"
+ },
+ "ETB": {
+ "name": "Eþíópískt birr",
+ "symbol": "ETB"
+ },
+ "FKP": {
+ "name": "Falklenskt pund",
+ "symbol": "FKP"
+ },
+ "PHP": {
+ "name": "Filippseyskur pesi",
+ "symbol": "PHP"
+ },
+ "FJD": {
+ "name": "Fídjeyskur dalur",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambískur dalasi",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "Ganverskur sedi",
+ "symbol": "GHS"
+ },
+ "GEL": {
+ "name": "Georgískur lari",
+ "symbol": "GEL"
+ },
+ "GIP": {
+ "name": "Gíbraltarspund",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "Gíneufranki",
+ "symbol": "GNF"
+ },
+ "CVE": {
+ "name": "Grænhöfðeyskur skúti",
+ "symbol": "CVE"
+ },
+ "GTQ": {
+ "name": "Gvatemalskt kvesal",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "Gvæjanskur dalur",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haítískur gúrdi",
+ "symbol": "HTG"
+ },
+ "SHP": {
+ "name": "Helenskt pund",
+ "symbol": "SHP"
+ },
+ "ANG": {
+ "name": "Hollenskt Antillugyllini",
+ "symbol": "ANG"
+ },
+ "HNL": {
+ "name": "Hondúrsk lempíra",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong-dalur",
+ "symbol": "HK$"
+ },
+ "BYR": {
+ "name": "Hvítrússnesk rúbla",
+ "symbol": "BYR"
+ },
+ "IDR": {
+ "name": "Indónesísk rúpía",
+ "symbol": "IDR"
+ },
+ "INR": {
+ "name": "Indversk rúpía",
+ "symbol": "INR"
+ },
+ "IQD": {
+ "name": "Ãrakskur denari",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "Ãranskt ríal",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "Ãslensk króna",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "Jamaískur dalur",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanskt jen",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "Jemenskt ríal",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "Jórdanskur denari",
+ "symbol": "JOD"
+ },
+ "KHR": {
+ "name": "Kambódískt ríal",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Kanadískur dalur",
+ "symbol": "CAD"
+ },
+ "KZT": {
+ "name": "Kasakst tengi",
+ "symbol": "KZT"
+ },
+ "QAR": {
+ "name": "Katarskt ríal",
+ "symbol": "QAR"
+ },
+ "KES": {
+ "name": "Kenískur skildingur",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "Kirgiskt som",
+ "symbol": "KGS"
+ },
+ "CNY": {
+ "name": "Kínverskt júan",
+ "symbol": "CNÂ¥"
+ },
+ "CDF": {
+ "name": "Kongóskur franki",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Kostarískt kólon",
+ "symbol": "CRC"
+ },
+ "COP": {
+ "name": "Kólumbískur pesi",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Kómoreyskur franki",
+ "symbol": "KMF"
+ },
+ "HRK": {
+ "name": "Króatísk kúna",
+ "symbol": "HRK"
+ },
+ "CUP": {
+ "name": "Kúbverskur pesi",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "Kúbverskur skiptanlegur pesi",
+ "symbol": "CUC"
+ },
+ "KWD": {
+ "name": "Kúveiskur denari",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "Laoskt kip",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "Litháískt lít",
+ "symbol": "LTL"
+ },
+ "LBP": {
+ "name": "Líbanskt pund",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "Líberískur dalur",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Líbískur denari",
+ "symbol": "LYD"
+ },
+ "MGA": {
+ "name": "Madagaskararjari",
+ "symbol": "MGA"
+ },
+ "MOP": {
+ "name": "Makaópataka",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Makedónskur denari",
+ "symbol": "MKD"
+ },
+ "MYR": {
+ "name": "Malasískt ringit",
+ "symbol": "MYR"
+ },
+ "MWK": {
+ "name": "Malavísk kvaka",
+ "symbol": "MWK"
+ },
+ "MVR": {
+ "name": "Maldíveysk rúpía",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "Marokkóskt dírham",
+ "symbol": "MAD"
+ },
+ "MUR": {
+ "name": "Máritísk rúpía",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "Máritönsk úgía",
+ "symbol": "MRO"
+ },
+ "MXN": {
+ "name": "Mexíkóskur pesi",
+ "symbol": "MXN"
+ },
+ "XAF": {
+ "name": "Miðafrískur franki",
+ "symbol": "FCFA"
+ },
+ "MMK": {
+ "name": "Mjanmarskt kjat",
+ "symbol": "MMK"
+ },
+ "MDL": {
+ "name": "Moldavískt lei",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongólskur túríkur",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "Mósambískt metikal",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "Namibískur dalur",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepölsk rúpía",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "Nígerísk næra",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "Níkarögsk kordóva",
+ "symbol": "NIO"
+ },
+ "KPW": {
+ "name": "Norðurkóreskt vonn",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norsk króna",
+ "symbol": "NOK"
+ },
+ "ILS": {
+ "name": "Nýr ísraelskur sikill",
+ "symbol": "₪"
+ },
+ "NZD": {
+ "name": "Nýsjálenskur dalur",
+ "symbol": "NZD"
+ },
+ "OMR": {
+ "name": "Ómanskt ríal",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistönsk rúpía",
+ "symbol": "PKR"
+ },
+ "PGK": {
+ "name": "Papúsk kína",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paragvæskt gvaraní",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Perúskt sól",
+ "symbol": "PEN"
+ },
+ "XPF": {
+ "name": "Pólinesískur franki",
+ "symbol": "CFPF"
+ },
+ "PLN": {
+ "name": "Pólskt slot",
+ "symbol": "PLN"
+ },
+ "RWF": {
+ "name": "Rúandskur franki",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "Rúmenskt lei",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Rússnesk rúbla",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "Salómonseyskur dalur",
+ "symbol": "SBD"
+ },
+ "ZMW": {
+ "name": "Sambísk kvaka",
+ "symbol": "ZMW"
+ },
+ "WST": {
+ "name": "Samóatala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "Saó Tóme og Prinsípe-dóbra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Sádiarabískt ríal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Serbneskur denari",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellesrúpía",
+ "symbol": "SCR"
+ },
+ "SGD": {
+ "name": "Singapúrskur dalur",
+ "symbol": "SGD"
+ },
+ "SLL": {
+ "name": "Síerraleónsk ljóna",
+ "symbol": "SLL"
+ },
+ "CLP": {
+ "name": "Síleskur pesi",
+ "symbol": "CLP"
+ },
+ "BAM": {
+ "name": "Skiptanlegt Bosníu og Hersegóvínu-mark",
+ "symbol": "BAM"
+ },
+ "SOS": {
+ "name": "Sómalískur skildingur",
+ "symbol": "SOS"
+ },
+ "LKR": {
+ "name": "Srílönsk rúpía",
+ "symbol": "LKR"
+ },
+ "GBP": {
+ "name": "Sterlingspund",
+ "symbol": "GBP"
+ },
+ "ZAR": {
+ "name": "Suðurafrískt rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "Suðurkóreskt vonn",
+ "symbol": "KRW"
+ },
+ "SSP": {
+ "name": "Suðursúdanskt pund",
+ "symbol": "SSP"
+ },
+ "SDG": {
+ "name": "Súdanskt pund",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Súrínamdalur",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Svasílenskur lílangeni",
+ "symbol": "SZL"
+ },
+ "CHF": {
+ "name": "Svissneskur franki",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "Sýrlenskt pund",
+ "symbol": "SYP"
+ },
+ "SEK": {
+ "name": "Sænsk króna",
+ "symbol": "SEK"
+ },
+ "TJS": {
+ "name": "Tadsjikskur sómóni",
+ "symbol": "TJS"
+ },
+ "THB": {
+ "name": "Taílenskt bat",
+ "symbol": "THB"
+ },
+ "TWD": {
+ "name": "Taívanskur dalur",
+ "symbol": "TWD"
+ },
+ "TZS": {
+ "name": "Tansanískur skildingur",
+ "symbol": "TZS"
+ },
+ "CZK": {
+ "name": "Tékknesk króna",
+ "symbol": "CZK"
+ },
+ "TOP": {
+ "name": "Tongapanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trínidad og Tóbagó-dalur",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Túniskur denari",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "Túrkmenskt manat",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "Tyrknesk líra",
+ "symbol": "TRY"
+ },
+ "HUF": {
+ "name": "Ungversk fórinta",
+ "symbol": "HUF"
+ },
+ "UGX": {
+ "name": "Úgandskur skildingur",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Úkraínsk hrinja",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "Úrúgvæskur pesi",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "Úsbekskt súm",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanúatúskt vatú",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venesúelskur bólívari",
+ "symbol": "VEF"
+ },
+ "XOF": {
+ "name": "Vesturafrískur franki",
+ "symbol": "CFA"
+ },
+ "VND": {
+ "name": "Víetnamskt dong",
+ "symbol": "VND"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/it.json b/library/intl/resources/currency/it.json
new file mode 100644
index 000000000..7928fc3dc
--- /dev/null
+++ b/library/intl/resources/currency/it.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "Ariary Malgascio",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "Baht thailandese",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "Balboa di Panama",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "Birr Etiopico",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "Bolívar Venezuelano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "Boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "Cedi ghanese",
+ "symbol": "GHS"
+ },
+ "CRC": {
+ "name": "Colón Costaricano",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "Colón Salvadoregno",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "Córdoba Nicaraguense",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "Corona Ceca",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Corona danese",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "Corona islandese",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "Corona norvegese",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "Corona svedese",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "Dalasi del Gambia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinaro Algerino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinaro del Bahrein",
+ "symbol": "BHD"
+ },
+ "JOD": {
+ "name": "Dinaro giordano",
+ "symbol": "JOD"
+ },
+ "IQD": {
+ "name": "Dinaro iracheno",
+ "symbol": "IQD"
+ },
+ "KWD": {
+ "name": "Dinaro kuwaitiano",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "Dinaro Libico",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "Dinaro Macedone",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "Dinaro Serbo",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "Dinaro Tunisino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham degli Emirati Arabi Uniti",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham Marocchino",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "Dobra di Sao Tomé e Principe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "Dollaro Australiano",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "Dollaro Canadese",
+ "symbol": "CA$"
+ },
+ "XCD": {
+ "name": "Dollaro dei Caraibi Orientali",
+ "symbol": "EC$"
+ },
+ "BZD": {
+ "name": "Dollaro del Belize",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "Dollaro del Brunei",
+ "symbol": "BND"
+ },
+ "GYD": {
+ "name": "Dollaro della Guyana",
+ "symbol": "GYD"
+ },
+ "BSD": {
+ "name": "Dollaro delle Bahamas",
+ "symbol": "BSD"
+ },
+ "BMD": {
+ "name": "Dollaro delle Bermuda",
+ "symbol": "BMD"
+ },
+ "FJD": {
+ "name": "Dollaro delle Figi",
+ "symbol": "FJD"
+ },
+ "KYD": {
+ "name": "Dollaro delle Isole Cayman",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "Dollaro delle Isole Solomon",
+ "symbol": "SBD"
+ },
+ "BBD": {
+ "name": "Dollaro di Barbados",
+ "symbol": "BBD"
+ },
+ "HKD": {
+ "name": "Dollaro di Hong Kong",
+ "symbol": "HKD"
+ },
+ "SGD": {
+ "name": "Dollaro di Singapore",
+ "symbol": "SGD"
+ },
+ "TTD": {
+ "name": "Dollaro di Trinidad e Tobago",
+ "symbol": "TTD"
+ },
+ "JMD": {
+ "name": "Dollaro Giamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "Dollaro Liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Dollaro Namibiano",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "Dollaro Neozelandese",
+ "symbol": "NZ$"
+ },
+ "USD": {
+ "name": "Dollaro Statunitense",
+ "symbol": "US$"
+ },
+ "SRD": {
+ "name": "Dollaro Surinamese",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "Dollaro Zimbabwiano (2009)",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "Dong Vietnamita",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "Dram armeno",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "Escudo del Capo Verde",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "ANG": {
+ "name": "Fiorino delle Antille Olandesi",
+ "symbol": "ANG"
+ },
+ "AWG": {
+ "name": "Fiorino di Aruba",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "Fiorino Ungherese",
+ "symbol": "HUF"
+ },
+ "XOF": {
+ "name": "Franco CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Franco CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "Franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "Franco Comoriano",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Franco Congolese",
+ "symbol": "CDF"
+ },
+ "BIF": {
+ "name": "Franco del Burundi",
+ "symbol": "BIF"
+ },
+ "GNF": {
+ "name": "Franco della Guinea",
+ "symbol": "GNF"
+ },
+ "DJF": {
+ "name": "Franco Gibutiano",
+ "symbol": "DJF"
+ },
+ "RWF": {
+ "name": "Franco Ruandese",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Franco svizzero",
+ "symbol": "CHF"
+ },
+ "HTG": {
+ "name": "Gourde Haitiano",
+ "symbol": "HTG"
+ },
+ "UAH": {
+ "name": "Grivnia Ucraina",
+ "symbol": "UAH"
+ },
+ "PYG": {
+ "name": "Guaraní del Paraguay",
+ "symbol": "PYG"
+ },
+ "PGK": {
+ "name": "Kina della Papua Nuova Guinea",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "Kip Laotiano",
+ "symbol": "LAK"
+ },
+ "HRK": {
+ "name": "Kuna Croata",
+ "symbol": "HRK"
+ },
+ "ZMW": {
+ "name": "Kwacha dello Zambia",
+ "symbol": "ZMW"
+ },
+ "MWK": {
+ "name": "Kwacha Malawiano",
+ "symbol": "MWK"
+ },
+ "AOA": {
+ "name": "Kwanza Angolano",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "Kyat di Myanmar",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "Lari georgiano",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "Lek Albanese",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "Lempira Honduregna",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "Leone della Sierra Leone",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "Leu Moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "Leu Rumeno",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "Lev bulgaro",
+ "symbol": "BGN"
+ },
+ "SZL": {
+ "name": "Lilangeni dello Swaziland",
+ "symbol": "SZL"
+ },
+ "LBP": {
+ "name": "Lira libanese",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "Lira siriana",
+ "symbol": "SYP"
+ },
+ "TRY": {
+ "name": "Lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "Litas lituano",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Loti del Lesotho",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "Manat azero",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "Manat Turkmeno",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "Marco Conv. Bosnia-Erzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "Metical mozambicano",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira Nigeriana",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa Eritreo",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "Ngultrum Butanese",
+ "symbol": "BTN"
+ },
+ "TWD": {
+ "name": "Nuovo dollaro taiwanese",
+ "symbol": "TWD"
+ },
+ "ILS": {
+ "name": "Nuovo siclo israeliano",
+ "symbol": "₪"
+ },
+ "MRO": {
+ "name": "Ouguiya della Mauritania",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "Paʻanga di Tonga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "Pataca di Macao",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "Peso Argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "Peso Cileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "Peso Colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "Peso Cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "Peso Cubano Convertibile",
+ "symbol": "CUC"
+ },
+ "PHP": {
+ "name": "Peso delle Filippine",
+ "symbol": "PHP"
+ },
+ "DOP": {
+ "name": "Peso Dominicano",
+ "symbol": "DOP"
+ },
+ "MXN": {
+ "name": "Peso Messicano",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "Peso Uruguaiano",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "Pula del Botswana",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "Quetzal Guatemalteco",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "Rand Sudafricano",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "Real Brasiliano",
+ "symbol": "BRL"
+ },
+ "CNY": {
+ "name": "Renminbi cinese",
+ "symbol": "CNÂ¥"
+ },
+ "QAR": {
+ "name": "Rial del Qatar",
+ "symbol": "QAR"
+ },
+ "OMR": {
+ "name": "Rial dell’Oman",
+ "symbol": "OMR"
+ },
+ "IRR": {
+ "name": "Rial Iraniano",
+ "symbol": "IRR"
+ },
+ "KHR": {
+ "name": "Riel Cambogiano",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "Ringgit della Malesia",
+ "symbol": "MYR"
+ },
+ "SAR": {
+ "name": "Riyal saudita",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "Riyal yemenita",
+ "symbol": "YER"
+ },
+ "BYR": {
+ "name": "Rublo Bielorussia",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "Rublo Russo",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "Rufiyaa delle Maldive",
+ "symbol": "MVR"
+ },
+ "PKR": {
+ "name": "Rupia del Pakistan",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "Rupia delle Seychelles",
+ "symbol": "SCR"
+ },
+ "LKR": {
+ "name": "Rupia di Sri Lanka",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "Rupia Indiana",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Rupia Indonesiana",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "Rupia Mauriziana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "Rupia Nepalese",
+ "symbol": "NPR"
+ },
+ "TZS": {
+ "name": "Scellino della Tanzania",
+ "symbol": "TZS"
+ },
+ "KES": {
+ "name": "Scellino Keniota",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Scellino Somalo",
+ "symbol": "SOS"
+ },
+ "UGX": {
+ "name": "Scellino Ugandese",
+ "symbol": "UGX"
+ },
+ "PEN": {
+ "name": "Sol Nuevo Peruviano",
+ "symbol": "PEN"
+ },
+ "KGS": {
+ "name": "Som Kirghiso",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "Somoni del Tajikistan",
+ "symbol": "TJS"
+ },
+ "FKP": {
+ "name": "Sterlina delle Falkland",
+ "symbol": "FKP"
+ },
+ "GIP": {
+ "name": "Sterlina di Gibilterra",
+ "symbol": "GIP"
+ },
+ "SHP": {
+ "name": "Sterlina di Sant’Elena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "Sterlina Egiziana",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "Sterlina Inglese",
+ "symbol": "£"
+ },
+ "SDG": {
+ "name": "Sterlina Sudanese",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "Sterlina sudsudanese",
+ "symbol": "SSP"
+ },
+ "UZS": {
+ "name": "Sum dell’Uzbekistan",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "Taka Bangladese",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "Tala della Samoa Occidentale",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "Tenge kazako",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "Tugrik mongolo",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "Vatu di Vanuatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "Won Nordcoreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "Won Sudcoreano",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "Yen giapponese",
+ "symbol": "JPY"
+ },
+ "PLN": {
+ "name": "ZÅ‚oty polacco",
+ "symbol": "PLN"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ja.json b/library/intl/resources/currency/ja.json
new file mode 100644
index 000000000..f7457feb9
--- /dev/null
+++ b/library/intl/resources/currency/ja.json
@@ -0,0 +1,634 @@
+{
+ "XOF": {
+ "name": "CFA フラン(BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA フラン(BEAC)",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP フラン",
+ "symbol": "CFPF"
+ },
+ "ISK": {
+ "name": "アイスランド クローナ",
+ "symbol": "ISK"
+ },
+ "AZN": {
+ "name": "アゼルãƒã‚¤ã‚¸ãƒ£ãƒ³ マナト",
+ "symbol": "AZN"
+ },
+ "AFN": {
+ "name": "アフガニー",
+ "symbol": "AFN"
+ },
+ "AED": {
+ "name": "アラブ首長国連邦ディルãƒãƒ ",
+ "symbol": "AED"
+ },
+ "DZD": {
+ "name": "アルジェリア ディナール",
+ "symbol": "DZD"
+ },
+ "ARS": {
+ "name": "アルゼンãƒãƒ³ ペソ",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "アルムギルダー",
+ "symbol": "AWG"
+ },
+ "ALL": {
+ "name": "アルãƒãƒ‹ã‚¢ レク",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "アルメニア ドラム",
+ "symbol": "AMD"
+ },
+ "YER": {
+ "name": "イエメン リアル",
+ "symbol": "YER"
+ },
+ "ILS": {
+ "name": "イスラエル新シェケル",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "イラク ディナール",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "イラン リアル",
+ "symbol": "IRR"
+ },
+ "INR": {
+ "name": "インド ルピー",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "インドãƒã‚·ã‚¢ ルピア",
+ "symbol": "IDR"
+ },
+ "UGX": {
+ "name": "ウガンダ シリング",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "ウクライナ グリブナ",
+ "symbol": "UAH"
+ },
+ "UZS": {
+ "name": "ウズベキスタン スム",
+ "symbol": "UZS"
+ },
+ "UYU": {
+ "name": "ウルグアイ ペソ",
+ "symbol": "UYU"
+ },
+ "EGP": {
+ "name": "エジプト ãƒãƒ³ãƒ‰",
+ "symbol": "EGP"
+ },
+ "ETB": {
+ "name": "エãƒã‚ªãƒ”ã‚¢ ブル",
+ "symbol": "ETB"
+ },
+ "ERN": {
+ "name": "エリトリア ナクファ",
+ "symbol": "ERN"
+ },
+ "SVC": {
+ "name": "エルサルãƒãƒ‰ãƒ« コロン",
+ "symbol": "SVC"
+ },
+ "AUD": {
+ "name": "オーストラリア ドル",
+ "symbol": "AU$"
+ },
+ "OMR": {
+ "name": "オマーン リアル",
+ "symbol": "OMR"
+ },
+ "ANG": {
+ "name": "オランダ領アンティル ギルダー",
+ "symbol": "ANG"
+ },
+ "GHS": {
+ "name": "ガーナ セディ",
+ "symbol": "GHS"
+ },
+ "CVE": {
+ "name": "カーボベルデ エスクード",
+ "symbol": "CVE"
+ },
+ "GYD": {
+ "name": "ガイアナ ドル",
+ "symbol": "GYD"
+ },
+ "KZT": {
+ "name": "カザフスタン テンゲ",
+ "symbol": "KZT"
+ },
+ "QAR": {
+ "name": "カタール リアル",
+ "symbol": "QAR"
+ },
+ "CAD": {
+ "name": "カナダ ドル",
+ "symbol": "CA$"
+ },
+ "GMD": {
+ "name": "ガンビア ダラシ",
+ "symbol": "GMD"
+ },
+ "KHR": {
+ "name": "カンボジア リエル",
+ "symbol": "KHR"
+ },
+ "GNF": {
+ "name": "ギニア フラン",
+ "symbol": "GNF"
+ },
+ "CUP": {
+ "name": "キュームペソ",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "キューム兌æ›ãƒšã‚½",
+ "symbol": "CUC"
+ },
+ "KGS": {
+ "name": "キルギスタン ソム",
+ "symbol": "KGS"
+ },
+ "GTQ": {
+ "name": "グアテマラ ケツァル",
+ "symbol": "GTQ"
+ },
+ "KWD": {
+ "name": "クウェート ディナール",
+ "symbol": "KWD"
+ },
+ "GEL": {
+ "name": "グルジア ラリ",
+ "symbol": "GEL"
+ },
+ "HRK": {
+ "name": "クロアãƒã‚¢ クーナ",
+ "symbol": "HRK"
+ },
+ "AOA": {
+ "name": "クワンザ",
+ "symbol": "AOA"
+ },
+ "KYD": {
+ "name": "ケイマン諸島 ドル",
+ "symbol": "KYD"
+ },
+ "KES": {
+ "name": "ケニア シリング",
+ "symbol": "KES"
+ },
+ "CRC": {
+ "name": "コスタリカ コロン",
+ "symbol": "CRC"
+ },
+ "KMF": {
+ "name": "コモロ フラン",
+ "symbol": "KMF"
+ },
+ "COP": {
+ "name": "コロンビア ペソ",
+ "symbol": "COP"
+ },
+ "CDF": {
+ "name": "コンゴ フラン",
+ "symbol": "CDF"
+ },
+ "SAR": {
+ "name": "サウジ リヤル",
+ "symbol": "SAR"
+ },
+ "WST": {
+ "name": "サモア タラ",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "サントメ・プリンシペ ドブラ",
+ "symbol": "STD"
+ },
+ "ZMW": {
+ "name": "ザンビア クワãƒãƒ£",
+ "symbol": "ZMW"
+ },
+ "SLL": {
+ "name": "シエラレオムレオン",
+ "symbol": "SLL"
+ },
+ "DJF": {
+ "name": "ジブムフラン",
+ "symbol": "DJF"
+ },
+ "GIP": {
+ "name": "ジブラルタル ãƒãƒ³ãƒ‰",
+ "symbol": "GIP"
+ },
+ "JMD": {
+ "name": "ジャマイカ ドル",
+ "symbol": "JMD"
+ },
+ "SYP": {
+ "name": "シリア ãƒãƒ³ãƒ‰",
+ "symbol": "SYP"
+ },
+ "SGD": {
+ "name": "シンガãƒãƒ¼ãƒ« ドル",
+ "symbol": "SGD"
+ },
+ "ZWL": {
+ "name": "ジンãƒãƒ–エ ドル (2009)",
+ "symbol": "ZWL"
+ },
+ "CHF": {
+ "name": "スイス フラン",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "スウェーデン クローナ",
+ "symbol": "SEK"
+ },
+ "SDG": {
+ "name": "スーダン ãƒãƒ³ãƒ‰",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "スリナム ドル",
+ "symbol": "SRD"
+ },
+ "LKR": {
+ "name": "スリランカ ルピー",
+ "symbol": "LKR"
+ },
+ "SZL": {
+ "name": "スワジランド リランゲニ",
+ "symbol": "SZL"
+ },
+ "SCR": {
+ "name": "セーシェル ルピー",
+ "symbol": "SCR"
+ },
+ "SHP": {
+ "name": "セントヘレナ島 ãƒãƒ³ãƒ‰",
+ "symbol": "SHP"
+ },
+ "SOS": {
+ "name": "ソマリア シリング",
+ "symbol": "SOS"
+ },
+ "SBD": {
+ "name": "ソロモン諸島 ドル",
+ "symbol": "SBD"
+ },
+ "THB": {
+ "name": "タイ ãƒãƒ¼ãƒ„",
+ "symbol": "฿"
+ },
+ "TJS": {
+ "name": "タジキスタン ソモニ",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "タンザニア シリング",
+ "symbol": "TZS"
+ },
+ "CZK": {
+ "name": "ãƒã‚§ã‚³ コルナ",
+ "symbol": "CZK"
+ },
+ "TND": {
+ "name": "ãƒãƒ¥ãƒ‹ã‚¸ã‚¢ ディナール",
+ "symbol": "TND"
+ },
+ "CLP": {
+ "name": "ãƒãƒª ペソ",
+ "symbol": "CLP"
+ },
+ "RSD": {
+ "name": "ディナール (セルビア)",
+ "symbol": "RSD"
+ },
+ "DKK": {
+ "name": "デンマーク クローãƒ",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "ドミニカ ペソ",
+ "symbol": "DOP"
+ },
+ "TTD": {
+ "name": "トリニダードトãƒã‚´ ドル",
+ "symbol": "TTD"
+ },
+ "TMT": {
+ "name": "トルクメニスタン マナト",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "トンガ パ・アンガ",
+ "symbol": "TOP"
+ },
+ "NGN": {
+ "name": "ナイジェリア ナイラ",
+ "symbol": "NGN"
+ },
+ "NAD": {
+ "name": "ナミビア ドル",
+ "symbol": "NAD"
+ },
+ "NIO": {
+ "name": "ニカラグア コルドムオロ",
+ "symbol": "NIO"
+ },
+ "NZD": {
+ "name": "ニュージーランド ドル",
+ "symbol": "NZ$"
+ },
+ "NPR": {
+ "name": "ãƒãƒ‘ール ルピー",
+ "symbol": "NPR"
+ },
+ "NOK": {
+ "name": "ノルウェー クローãƒ",
+ "symbol": "NOK"
+ },
+ "BHD": {
+ "name": "ãƒãƒ¼ãƒ¬ãƒ¼ãƒ³ ディナール",
+ "symbol": "BHD"
+ },
+ "HTG": {
+ "name": "ãƒã‚¤ãƒ グールド",
+ "symbol": "HTG"
+ },
+ "PKR": {
+ "name": "パキスタン ルピー",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "パナマ ãƒãƒ«ãƒœã‚¢",
+ "symbol": "PAB"
+ },
+ "VUV": {
+ "name": "ãƒãƒŒã‚¢ãƒ„ ãƒãƒ„",
+ "symbol": "VUV"
+ },
+ "BSD": {
+ "name": "ãƒãƒãƒž ドル",
+ "symbol": "BSD"
+ },
+ "PGK": {
+ "name": "パプアニューギニア キナ",
+ "symbol": "PGK"
+ },
+ "BMD": {
+ "name": "ãƒãƒŸãƒ¥ãƒ¼ãƒ€ ドル",
+ "symbol": "BMD"
+ },
+ "PYG": {
+ "name": "パラグアイ グアラニ",
+ "symbol": "PYG"
+ },
+ "BBD": {
+ "name": "ãƒãƒ«ãƒãƒ‰ã‚¹ ドル",
+ "symbol": "BBD"
+ },
+ "HUF": {
+ "name": "ãƒãƒ³ã‚¬ãƒªãƒ¼ フォリント",
+ "symbol": "HUF"
+ },
+ "BDT": {
+ "name": "ãƒãƒ³ã‚°ãƒ©ãƒ‡ã‚·ãƒ¥ ã‚¿ã‚«",
+ "symbol": "BDT"
+ },
+ "FJD": {
+ "name": "フィジー諸島 ドル",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "フィリピン ペソ",
+ "symbol": "PHP"
+ },
+ "BTN": {
+ "name": "ブータン ニュルタム",
+ "symbol": "BTN"
+ },
+ "FKP": {
+ "name": "フォークランド(マルビナス)諸島 ãƒãƒ³ãƒ‰",
+ "symbol": "FKP"
+ },
+ "BRL": {
+ "name": "ブラジル レアル",
+ "symbol": "R$"
+ },
+ "BGN": {
+ "name": "ブルガリア 新レフ",
+ "symbol": "BGN"
+ },
+ "BND": {
+ "name": "ブルãƒã‚¤ ドル",
+ "symbol": "BND"
+ },
+ "BIF": {
+ "name": "ブルンジ フラン",
+ "symbol": "BIF"
+ },
+ "VND": {
+ "name": "ベトナム ドン",
+ "symbol": "â‚«"
+ },
+ "VEF": {
+ "name": "ベãƒã‚ºã‚¨ãƒ© ボリãƒãƒ«",
+ "symbol": "VEF"
+ },
+ "BYR": {
+ "name": "ベラルーシ ルーブル",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "ベリーズ ドル",
+ "symbol": "BZD"
+ },
+ "PEN": {
+ "name": "ペルー 新ソル",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "ãƒãƒ¼ãƒ©ãƒ³ãƒ‰ ズウォティ",
+ "symbol": "PLN"
+ },
+ "BAM": {
+ "name": "ボスニア マルク (BAM)",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "ボツワナ プラ",
+ "symbol": "BWP"
+ },
+ "BOB": {
+ "name": "ボリビア ボリビアーノ",
+ "symbol": "BOB"
+ },
+ "HNL": {
+ "name": "ホンジュラス レンピラ",
+ "symbol": "HNL"
+ },
+ "MOP": {
+ "name": "マカオ パタカ",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "マケドニア デナル",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "マダガスカル アリアリ",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "マラウィ クワãƒãƒ£",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "マレーシア リンギット",
+ "symbol": "MYR"
+ },
+ "MMK": {
+ "name": "ミャンマー ãƒãƒ£ãƒƒãƒˆ",
+ "symbol": "MMK"
+ },
+ "MXN": {
+ "name": "メキシコ ペソ",
+ "symbol": "MX$"
+ },
+ "MUR": {
+ "name": "モーリシャス ルピー",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "モーリタニア ウギア",
+ "symbol": "MRO"
+ },
+ "MZN": {
+ "name": "モザンビーク メティカル",
+ "symbol": "MZN"
+ },
+ "MVR": {
+ "name": "モルディブ諸島 ルフィア",
+ "symbol": "MVR"
+ },
+ "MDL": {
+ "name": "モルドムレイ",
+ "symbol": "MDL"
+ },
+ "MAD": {
+ "name": "モロッコ ディルãƒãƒ ",
+ "symbol": "MAD"
+ },
+ "MNT": {
+ "name": "モンゴル トグログ",
+ "symbol": "MNT"
+ },
+ "EUR": {
+ "name": "ユーロ",
+ "symbol": "€"
+ },
+ "JOD": {
+ "name": "ヨルダン ディナール",
+ "symbol": "JOD"
+ },
+ "LAK": {
+ "name": "ラオス キープ",
+ "symbol": "LAK"
+ },
+ "LTL": {
+ "name": "リトアニア リタス",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "リビア ディナール",
+ "symbol": "LYD"
+ },
+ "LRD": {
+ "name": "リベリア ドル",
+ "symbol": "LRD"
+ },
+ "RON": {
+ "name": "ルーマニア レイ",
+ "symbol": "RON"
+ },
+ "RWF": {
+ "name": "ルワンダ フラン",
+ "symbol": "RWF"
+ },
+ "LSL": {
+ "name": "レソト ロティ",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "レãƒãƒŽãƒ³ ãƒãƒ³ãƒ‰",
+ "symbol": "LBP"
+ },
+ "RUB": {
+ "name": "ロシア ルーブル",
+ "symbol": "RUB"
+ },
+ "GBP": {
+ "name": "英国ãƒãƒ³ãƒ‰",
+ "symbol": "£"
+ },
+ "KRW": {
+ "name": "韓国 ウォン",
+ "symbol": "₩"
+ },
+ "HKD": {
+ "name": "香港ドル",
+ "symbol": "HK$"
+ },
+ "TRY": {
+ "name": "新トルコリラ",
+ "symbol": "TRY"
+ },
+ "TWD": {
+ "name": "æ–°å°æ¹¾ãƒ‰ãƒ«",
+ "symbol": "NT$"
+ },
+ "CNY": {
+ "name": "中国人民元",
+ "symbol": "å…ƒ"
+ },
+ "XCD": {
+ "name": "æ±ã‚«ãƒªãƒ– ドル",
+ "symbol": "EC$"
+ },
+ "ZAR": {
+ "name": "å—アフリカ ランド",
+ "symbol": "ZAR"
+ },
+ "SSP": {
+ "name": "å—スーダン・ãƒãƒ³ãƒ‰",
+ "symbol": "SSP"
+ },
+ "JPY": {
+ "name": "日本円",
+ "symbol": "ï¿¥"
+ },
+ "USD": {
+ "name": "米ドル",
+ "symbol": "$"
+ },
+ "KPW": {
+ "name": "北æœé®® ウォン",
+ "symbol": "KPW"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/jgo.json b/library/intl/resources/currency/jgo.json
new file mode 100644
index 000000000..6a68ab95c
--- /dev/null
+++ b/library/intl/resources/currency/jgo.json
@@ -0,0 +1,634 @@
+{
+ "AED": {
+ "name": "AED",
+ "symbol": "AED"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "AOA",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AUD": {
+ "name": "AUD",
+ "symbol": "A$"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BHD": {
+ "name": "BHD",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "BIF",
+ "symbol": "BIF"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BWP": {
+ "name": "BWP",
+ "symbol": "BWP"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CDF": {
+ "name": "CDF",
+ "symbol": "CDF"
+ },
+ "CHF": {
+ "name": "CHF",
+ "symbol": "CHF"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "CNY",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CVE": {
+ "name": "CVE",
+ "symbol": "CVE"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DJF": {
+ "name": "DJF",
+ "symbol": "DJF"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "DZD": {
+ "name": "DZD",
+ "symbol": "DZD"
+ },
+ "EGP": {
+ "name": "EGP",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "ERN",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "ETB",
+ "symbol": "ETB"
+ },
+ "XAF": {
+ "name": "Fɛlâŋ",
+ "symbol": "FCFA"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GBP": {
+ "name": "GBP",
+ "symbol": "£"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GMD": {
+ "name": "GMD",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "INR",
+ "symbol": "₹"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "JPY": {
+ "name": "JPY",
+ "symbol": "JPÂ¥"
+ },
+ "KES": {
+ "name": "KES",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "KMF",
+ "symbol": "KMF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LRD": {
+ "name": "LRD",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "LYD",
+ "symbol": "LYD"
+ },
+ "MAD": {
+ "name": "MAD",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MGA": {
+ "name": "MGA",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MRO": {
+ "name": "MRO",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "MWK",
+ "symbol": "MWK"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "USD": {
+ "name": "NdÉ”Ìla-AmÉ›lîk",
+ "symbol": "US$"
+ },
+ "CAD": {
+ "name": "NdÉ”Ìla-Kanandâ",
+ "symbol": "CA$"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SAR": {
+ "name": "SAR",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "SDG",
+ "symbol": "SDG"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SOS",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "TND",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "TZS": {
+ "name": "TZS",
+ "symbol": "TZS"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "UGX",
+ "symbol": "UGX"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "EUR": {
+ "name": "É„ÌlÉ”",
+ "symbol": "€"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZAR": {
+ "name": "ZAR",
+ "symbol": "ZAR"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/jmc.json b/library/intl/resources/currency/jmc.json
new file mode 100644
index 000000000..655670a30
--- /dev/null
+++ b/library/intl/resources/currency/jmc.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Bir ya Uhabeshi",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi ya Gambia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinari ya Aljeria",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinari ya Bahareni",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinari ya Libya",
+ "symbol": "LYD"
+ },
+ "SDG": {
+ "name": "Dinari ya Sudani",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "Dinari ya Tunisia",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham ya Falme za Kiarabu",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham ya Moroko",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobra ya Sao Tome na Principe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "Dola ya Australia",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "Dola ya Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dola ya Liberia",
+ "symbol": "LRD"
+ },
+ "USD": {
+ "name": "Dola ya Marekani",
+ "symbol": "US$"
+ },
+ "NAD": {
+ "name": "Dola ya Namibia",
+ "symbol": "NAD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "Eskudo ya Kepuvede",
+ "symbol": "CVE"
+ },
+ "XOF": {
+ "name": "Faranga CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Faranga CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "MGA": {
+ "name": "Faranga ya Bukini",
+ "symbol": "MGA"
+ },
+ "BIF": {
+ "name": "Faranga ya Burundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Faranga ya Jibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Faranga ya Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Faranga ya Kongo",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Faranga ya Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Faranga ya Uswisi",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kwacha ya Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha ya Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza ya Angola",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leoni",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti ya Lesoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira ya Nijeria",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa ya Eritrea",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "EGP": {
+ "name": "Pauni ya Misri",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Pauni ya Santahelena",
+ "symbol": "SHP"
+ },
+ "GBP": {
+ "name": "Pauni ya Uingereza",
+ "symbol": "£"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pula ya Botswana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Randi ya Afrika Kusini",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riyal ya Saudia",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupia ya India",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupia ya Morisi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupia ya Shelisheli",
+ "symbol": "SCR"
+ },
+ "JPY": {
+ "name": "Sarafu ya Kijapani",
+ "symbol": "JPÂ¥"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "Shilingi ya Kenya",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Shilingi ya Somalia",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Shilingi ya Tanzania",
+ "symbol": "TSh"
+ },
+ "UGX": {
+ "name": "Shilingi ya Uganda",
+ "symbol": "UGX"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ugwiya ya Moritania",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yuan Renminbi ya China",
+ "symbol": "CNÂ¥"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ka.json b/library/intl/resources/currency/ka.json
new file mode 100644
index 000000000..c9e686882
--- /dev/null
+++ b/library/intl/resources/currency/ka.json
@@ -0,0 +1,634 @@
+{
+ "XOF": {
+ "name": "(CFA) ფრáƒáƒœáƒ™áƒ˜ (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA ფრáƒáƒœáƒ™áƒ˜ (BEAC)",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP ფრáƒáƒœáƒ™áƒ˜",
+ "symbol": "CFPF"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "AUD": {
+ "name": "áƒáƒ•áƒ¡áƒ¢áƒ áƒáƒšáƒ˜áƒ£áƒ áƒ˜ დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "AUD"
+ },
+ "AFN": {
+ "name": "áƒáƒ•áƒ¦áƒáƒœáƒ£áƒ áƒ˜ áƒáƒ•áƒ¦áƒáƒœáƒ˜",
+ "symbol": "AFN"
+ },
+ "AZN": {
+ "name": "áƒáƒ–ერბáƒáƒ˜áƒ¯áƒáƒœáƒ£áƒšáƒ˜ მáƒáƒœáƒáƒ—ი",
+ "symbol": "AZN"
+ },
+ "ALL": {
+ "name": "áƒáƒšáƒ‘áƒáƒœáƒ£áƒ áƒ˜ ლეკი",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "áƒáƒšáƒŸáƒ˜áƒ áƒ£áƒšáƒ˜ დინáƒáƒ áƒ˜",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "áƒáƒœáƒ’áƒáƒšáƒ£áƒ áƒ˜ კვáƒáƒœáƒ–áƒ",
+ "symbol": "AOA"
+ },
+ "AED": {
+ "name": "áƒáƒ áƒáƒ‘თრგáƒáƒ”რთიáƒáƒœáƒ”ბული სáƒáƒáƒ›áƒ˜áƒ áƒáƒ”ბის დირჰáƒáƒ›áƒ˜",
+ "symbol": "AED"
+ },
+ "ARS": {
+ "name": "áƒáƒ áƒ’ენტინული პესáƒ",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "áƒáƒ áƒ£áƒ‘áƒáƒœáƒ£áƒšáƒ˜ გულდენი",
+ "symbol": "AWG"
+ },
+ "XCD": {
+ "name": "áƒáƒ¦áƒ›áƒáƒ¡áƒáƒ•áƒšáƒ”თ კáƒáƒ áƒ˜áƒ‘იული დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "EC$"
+ },
+ "USD": {
+ "name": "áƒáƒ¨áƒ¨ დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "US$"
+ },
+ "NZD": {
+ "name": "áƒáƒ®áƒáƒšáƒ˜ ზელáƒáƒœáƒ“იის დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "NZD"
+ },
+ "TRY": {
+ "name": "áƒáƒ®áƒáƒšáƒ˜ თურქული ლირáƒ",
+ "symbol": "TRY"
+ },
+ "BDT": {
+ "name": "ბáƒáƒœáƒ’ლáƒáƒ“ეშური ტáƒáƒ™áƒ",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "ბáƒáƒ áƒ‘áƒáƒ“áƒáƒ¡áƒ£áƒšáƒ˜ დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "BBD"
+ },
+ "BSD": {
+ "name": "ბáƒáƒ°áƒáƒ›áƒ£áƒ áƒ˜ დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "ბáƒáƒ°áƒ áƒ”ინული დინáƒáƒ áƒ˜",
+ "symbol": "BHD"
+ },
+ "BZD": {
+ "name": "ბელიზის დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "BZD"
+ },
+ "BYR": {
+ "name": "ბელáƒáƒ áƒ£áƒ¡áƒ£áƒšáƒ˜ რუბლი",
+ "symbol": "BYR"
+ },
+ "BMD": {
+ "name": "ბერმუდული დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "BMD"
+ },
+ "BOB": {
+ "name": "ბáƒáƒšáƒ˜áƒ•áƒ˜áƒ£áƒ áƒ˜ ბáƒáƒšáƒ˜áƒ•áƒ˜áƒáƒœáƒ",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "ბáƒáƒ¡áƒœáƒ˜áƒ დრჰერცáƒáƒ’áƒáƒ•áƒ˜áƒœáƒáƒ¡ კáƒáƒœáƒ•áƒ”რტირებáƒáƒ“ი მáƒáƒ áƒ™áƒ",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "ბáƒáƒªáƒ•áƒáƒœáƒ£áƒ áƒ˜ პულáƒ",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "ბრáƒáƒ–ილიური რეáƒáƒšáƒ˜",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "ბრიტáƒáƒœáƒ£áƒšáƒ˜ გირვáƒáƒœáƒ¥áƒ სტერლინგი",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "ბრუნეული დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "ბულგáƒáƒ áƒ£áƒšáƒ˜ ლევი",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "ბურუნდიული ფრáƒáƒœáƒ™áƒ˜",
+ "symbol": "BIF"
+ },
+ "BTN": {
+ "name": "ბუტáƒáƒœáƒ£áƒ áƒ˜ ნგულტრუმი",
+ "symbol": "BTN"
+ },
+ "GYD": {
+ "name": "გáƒáƒ˜áƒáƒœáƒ£áƒ áƒ˜ დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "GYD"
+ },
+ "GMD": {
+ "name": "გáƒáƒ›áƒ‘იური დáƒáƒšáƒáƒ¡áƒ˜",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "გáƒáƒœáƒ£áƒ áƒ˜ სედი",
+ "symbol": "GHS"
+ },
+ "GTQ": {
+ "name": "გვáƒáƒ¢áƒ”მáƒáƒšáƒ£áƒ áƒ˜ კეტსáƒáƒšáƒ˜",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "გვინეური ფრáƒáƒœáƒ™áƒ˜",
+ "symbol": "GNF"
+ },
+ "GIP": {
+ "name": "გიბრáƒáƒšáƒ¢áƒáƒ áƒ£áƒšáƒ˜ ფუნტი",
+ "symbol": "GIP"
+ },
+ "DKK": {
+ "name": "დáƒáƒœáƒ˜áƒ£áƒ áƒ˜ კრáƒáƒœáƒ",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "დáƒáƒ›áƒ˜áƒœáƒ˜áƒ™áƒ£áƒ áƒ˜ პესáƒ",
+ "symbol": "DOP"
+ },
+ "EGP": {
+ "name": "ეგვიპტური გირვáƒáƒœáƒ¥áƒ",
+ "symbol": "EGP"
+ },
+ "EUR": {
+ "name": "ევრáƒ",
+ "symbol": "€"
+ },
+ "ETB": {
+ "name": "ეთიáƒáƒžáƒ˜áƒ£áƒ áƒ˜ ბირი",
+ "symbol": "ETB"
+ },
+ "IQD": {
+ "name": "ერáƒáƒ§áƒ£áƒšáƒ˜ დინáƒáƒ áƒ˜",
+ "symbol": "IQD"
+ },
+ "ERN": {
+ "name": "ერიტრეის ნáƒáƒ™áƒ¤áƒ",
+ "symbol": "ERN"
+ },
+ "VUV": {
+ "name": "ვáƒáƒœáƒ£áƒáƒ¢áƒ£áƒ¡ ვáƒáƒ¢áƒ£",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "ვენესუელის ბáƒáƒšáƒ˜áƒ•áƒáƒ áƒ˜",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "ვიეტნáƒáƒ›áƒ£áƒ áƒ˜ დáƒáƒœáƒ’ი",
+ "symbol": "VND"
+ },
+ "ZMW": {
+ "name": "ზáƒáƒ›áƒ‘იური კვáƒáƒ­áƒ",
+ "symbol": "ZMW"
+ },
+ "TMT": {
+ "name": "თურქმენეთის მáƒáƒœáƒáƒ—ი",
+ "symbol": "TMT"
+ },
+ "JMD": {
+ "name": "იáƒáƒ›áƒáƒ˜áƒ™áƒ£áƒ áƒ˜ დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "იáƒáƒžáƒáƒœáƒ£áƒ áƒ˜ იენი",
+ "symbol": "JPY"
+ },
+ "YER": {
+ "name": "იემენის რეáƒáƒšáƒ˜",
+ "symbol": "YER"
+ },
+ "IDR": {
+ "name": "ინდáƒáƒœáƒ”ზიური რუპიáƒ",
+ "symbol": "IDR"
+ },
+ "INR": {
+ "name": "ინდური რუპიáƒ",
+ "symbol": "INR"
+ },
+ "JOD": {
+ "name": "იáƒáƒ áƒ“áƒáƒœáƒ˜áƒ£áƒšáƒ˜ დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "JOD"
+ },
+ "IRR": {
+ "name": "ირáƒáƒœáƒ£áƒšáƒ˜ რიáƒáƒšáƒ˜",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ისლáƒáƒœáƒ“იური კრáƒáƒœáƒ",
+ "symbol": "ISK"
+ },
+ "ILS": {
+ "name": "ისრáƒáƒ”ლის áƒáƒ®áƒáƒšáƒ˜ შეკელი",
+ "symbol": "ILS"
+ },
+ "CVE": {
+ "name": "კáƒáƒ‘áƒ-ვერდეს ესკუდáƒ",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "კáƒáƒ˜áƒ›áƒáƒœáƒ˜áƒ¡ კუნძულების დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "KYD"
+ },
+ "KHR": {
+ "name": "კáƒáƒ›áƒ‘áƒáƒ¯áƒ£áƒ áƒ˜ რიელი",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "კáƒáƒœáƒáƒ“ური დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "CA$"
+ },
+ "QAR": {
+ "name": "კáƒáƒ¢áƒáƒ áƒ˜áƒ¡ რიáƒáƒšáƒ˜",
+ "symbol": "QAR"
+ },
+ "KES": {
+ "name": "კენიური შილინგი",
+ "symbol": "KES"
+ },
+ "COP": {
+ "name": "კáƒáƒšáƒ£áƒ›áƒ‘იური პესáƒ",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "კáƒáƒ›áƒáƒ áƒ£áƒšáƒ˜ ფრáƒáƒœáƒ™áƒ˜",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "კáƒáƒœáƒ’áƒáƒ¡ ფრáƒáƒœáƒ™áƒ˜",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "კáƒáƒ¡áƒ¢áƒ-რიკული კáƒáƒšáƒáƒœáƒ˜",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "კუბური კáƒáƒœáƒ•áƒ”რტირებáƒáƒ“ი პესáƒ",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "კუბური პესáƒ",
+ "symbol": "CUP"
+ },
+ "LAK": {
+ "name": "ლáƒáƒáƒ¡áƒ£áƒ áƒ˜ კიპი",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "ლიბáƒáƒœáƒ£áƒ áƒ˜ ფუნტი",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "ლიბერიული დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "ლიბიური დინáƒáƒ áƒ˜",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "ლიტვური ლიტáƒ",
+ "symbol": "LTL"
+ },
+ "MGA": {
+ "name": "მáƒáƒ“áƒáƒ’áƒáƒ¡áƒ™áƒáƒ áƒ˜áƒ¡ áƒáƒ áƒ˜áƒáƒ áƒ˜",
+ "symbol": "MGA"
+ },
+ "MUR": {
+ "name": "მáƒáƒ•áƒ áƒ˜áƒ¢áƒáƒœáƒ£áƒšáƒ˜ რუპიáƒ",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "მáƒáƒ•áƒ áƒ˜áƒ¢áƒáƒœáƒ£áƒšáƒ˜ უგიáƒ",
+ "symbol": "MRO"
+ },
+ "MOP": {
+ "name": "მáƒáƒ™áƒáƒ£áƒ¡ პáƒáƒ¢áƒáƒ™áƒ",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "მáƒáƒ™áƒ”დáƒáƒœáƒ˜áƒ£áƒ áƒ˜ დინáƒáƒ áƒ˜",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "მáƒáƒšáƒáƒ•áƒ˜áƒ£áƒ áƒ˜ კვáƒáƒ©áƒ",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "მáƒáƒšáƒáƒ˜áƒ–იური რინგიტი",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "მáƒáƒšáƒ“ივური რუფიáƒ",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "მáƒáƒ áƒáƒ™áƒáƒ¡ დირჰáƒáƒ›áƒ˜",
+ "symbol": "MAD"
+ },
+ "MXN": {
+ "name": "მექსიკური პესáƒ",
+ "symbol": "MX$"
+ },
+ "MMK": {
+ "name": "მიáƒáƒœáƒ›áƒáƒ áƒ˜áƒ¡ კიáƒáƒ¢áƒ˜",
+ "symbol": "MMK"
+ },
+ "MZN": {
+ "name": "მáƒáƒ–áƒáƒ›áƒ‘იკური მეტიკáƒáƒšáƒ˜",
+ "symbol": "MZN"
+ },
+ "MDL": {
+ "name": "მáƒáƒšáƒ“áƒáƒ•áƒ£áƒ áƒ˜ ლეუ",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "მáƒáƒœáƒ¦áƒáƒšáƒ£áƒ áƒ˜ ტუგრიკი",
+ "symbol": "MNT"
+ },
+ "NAD": {
+ "name": "ნáƒáƒ›áƒ˜áƒ‘იური დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "ნეპáƒáƒšáƒ£áƒ áƒ˜ რუპიáƒ",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "ნიგერიული ნáƒáƒ˜áƒ áƒ",
+ "symbol": "NGN"
+ },
+ "ANG": {
+ "name": "ნიდერლáƒáƒœáƒ“ების áƒáƒœáƒ¢áƒ˜áƒšáƒ”ბის გულდენი",
+ "symbol": "ANG"
+ },
+ "NIO": {
+ "name": "ნიკáƒáƒ áƒáƒ’უული კáƒáƒ áƒ“áƒáƒ‘áƒ",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "ნáƒáƒ áƒ•áƒ”გიული კრáƒáƒœáƒ",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "áƒáƒ›áƒáƒœáƒ˜áƒ¡ რიáƒáƒšáƒ˜",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "პáƒáƒ™áƒ˜áƒ¡áƒ¢áƒáƒœáƒ£áƒ áƒ˜ რუპიáƒ",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "პáƒáƒœáƒáƒ›áƒ£áƒ áƒ˜ ბáƒáƒšáƒ‘áƒáƒ",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "პáƒáƒžáƒ£áƒ-áƒáƒ®áƒáƒšáƒ˜ გვინეის კინáƒ",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "პáƒáƒ áƒáƒ’ვáƒáƒ£áƒšáƒ˜ გუáƒáƒ áƒáƒœáƒ˜",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "პერუს áƒáƒ®áƒáƒšáƒ˜ სáƒáƒšáƒ˜",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "პáƒáƒšáƒáƒœáƒ£áƒ áƒ˜ ზლáƒáƒ¢áƒ˜",
+ "symbol": "PLN"
+ },
+ "RWF": {
+ "name": "რუáƒáƒœáƒ“ული ფრáƒáƒœáƒ™áƒ˜",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "რუმინული ლეუ",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "რუსული რუბლი",
+ "symbol": "RUB"
+ },
+ "WST": {
+ "name": "სáƒáƒ›áƒáƒ£áƒ áƒ˜ ტáƒáƒšáƒ",
+ "symbol": "WST"
+ },
+ "ZAR": {
+ "name": "სáƒáƒ›áƒ®áƒ áƒ”თ áƒáƒ¤áƒ áƒ˜áƒ™áƒ£áƒšáƒ˜ რáƒáƒœáƒ“ი",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "სáƒáƒ›áƒ®áƒ áƒ”თ კáƒáƒ áƒ”ული ვáƒáƒœáƒ˜",
+ "symbol": "KRW"
+ },
+ "SSP": {
+ "name": "სáƒáƒ›áƒ®áƒ áƒ”თ სუდáƒáƒœáƒ£áƒ áƒ˜ ფუნტი",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "სáƒáƒœ-ტáƒáƒ›áƒ” დრპრინსიპის დáƒáƒ‘რáƒ",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "სáƒáƒ£áƒ“ის áƒáƒ áƒáƒ‘ეთის რიáƒáƒšáƒ˜",
+ "symbol": "SAR"
+ },
+ "SCR": {
+ "name": "სეიშელური რუპიáƒ",
+ "symbol": "SCR"
+ },
+ "RSD": {
+ "name": "სერბული დინáƒáƒ áƒ˜",
+ "symbol": "RSD"
+ },
+ "SZL": {
+ "name": "სვáƒáƒ–ილენდის ლილáƒáƒœáƒ’ენი",
+ "symbol": "SZL"
+ },
+ "SLL": {
+ "name": "სიერáƒ-ლეáƒáƒœáƒ”ს ლეáƒáƒœáƒ”",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "სინგáƒáƒžáƒ£áƒ áƒ˜áƒ¡ დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "SGD"
+ },
+ "SYP": {
+ "name": "სირიული ფუნტი",
+ "symbol": "SYP"
+ },
+ "SBD": {
+ "name": "სáƒáƒšáƒáƒ›áƒáƒœáƒ˜áƒ¡ კუნძულების დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "სáƒáƒ›áƒáƒšáƒ£áƒ áƒ˜ შილინგი",
+ "symbol": "SOS"
+ },
+ "AMD": {
+ "name": "სáƒáƒ›áƒ®áƒ£áƒ áƒ˜ დრáƒáƒ›áƒ˜",
+ "symbol": "AMD"
+ },
+ "SDG": {
+ "name": "სუდáƒáƒœáƒ£áƒ áƒ˜ ფუნტი",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "სურინáƒáƒ›áƒ£áƒšáƒ˜ დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "SRD"
+ },
+ "TWD": {
+ "name": "ტáƒáƒ˜áƒ•áƒáƒœáƒ£áƒ áƒ˜ áƒáƒ®áƒáƒšáƒ˜ დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "NT$"
+ },
+ "THB": {
+ "name": "ტáƒáƒ˜áƒšáƒáƒœáƒ“ური ბáƒáƒ¢áƒ˜",
+ "symbol": "THB"
+ },
+ "TZS": {
+ "name": "ტáƒáƒœáƒ–áƒáƒœáƒ˜áƒ£áƒ áƒ˜ შილინგი",
+ "symbol": "TZS"
+ },
+ "TJS": {
+ "name": "ტáƒáƒ¯áƒ˜áƒ™áƒ£áƒ áƒ˜ სáƒáƒ›áƒáƒœáƒ˜",
+ "symbol": "TJS"
+ },
+ "TOP": {
+ "name": "ტáƒáƒœáƒ’áƒáƒœáƒ£áƒ áƒ˜ პáƒáƒáƒœáƒ’áƒ",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "ტრინიდáƒáƒ“ დრტáƒáƒ‘áƒáƒ’áƒáƒ¡ დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "ტუნისური დინáƒáƒ áƒ˜",
+ "symbol": "TND"
+ },
+ "UGX": {
+ "name": "უგáƒáƒœáƒ“ური შილინგი",
+ "symbol": "UGX"
+ },
+ "UZS": {
+ "name": "უზბეკური სუმი",
+ "symbol": "UZS"
+ },
+ "UAH": {
+ "name": "უკრáƒáƒ˜áƒœáƒ£áƒšáƒ˜ გრივნáƒ",
+ "symbol": "UAH"
+ },
+ "HUF": {
+ "name": "უნგრული ფáƒáƒ áƒ˜áƒœáƒ¢áƒ˜",
+ "symbol": "HUF"
+ },
+ "UYU": {
+ "name": "ურუგვáƒáƒ˜áƒ¡ პესáƒ",
+ "symbol": "UYU"
+ },
+ "PHP": {
+ "name": "ფილიპინური პესáƒ",
+ "symbol": "PHP"
+ },
+ "FJD": {
+ "name": "ფიჯის დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "ფáƒáƒšáƒ™áƒšáƒ”ნდის კუნძულების ფუნტი",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "ქáƒáƒ áƒ—ული ლáƒáƒ áƒ˜",
+ "symbol": "GEL"
+ },
+ "KWD": {
+ "name": "ქუვეითური დინáƒáƒ áƒ˜",
+ "symbol": "KWD"
+ },
+ "KZT": {
+ "name": "ყáƒáƒ–áƒáƒ®áƒ£áƒ áƒ˜ ტენგე",
+ "symbol": "KZT"
+ },
+ "KGS": {
+ "name": "ყირგიზული სáƒáƒ›áƒ˜",
+ "symbol": "KGS"
+ },
+ "SEK": {
+ "name": "შვედური კრáƒáƒœáƒ",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "შვეიცáƒáƒ áƒ˜áƒ£áƒšáƒ˜ ფრáƒáƒœáƒ™áƒ˜",
+ "symbol": "CHF"
+ },
+ "LKR": {
+ "name": "შრი-ლáƒáƒœáƒ™áƒ£áƒ áƒ˜ რუპიáƒ",
+ "symbol": "LKR"
+ },
+ "CZK": {
+ "name": "ჩეხური კრáƒáƒœáƒ",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "ჩილეს პესáƒ",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "ჩინური იუáƒáƒœáƒ˜",
+ "symbol": "CNY"
+ },
+ "KPW": {
+ "name": "ჩრდილáƒáƒ”თ კáƒáƒ áƒ”ული ვáƒáƒœáƒ˜",
+ "symbol": "KPW"
+ },
+ "SHP": {
+ "name": "წმ. ელენეს კუნძულის ფუნტი",
+ "symbol": "SHP"
+ },
+ "HRK": {
+ "name": "ხáƒáƒ áƒ•áƒáƒ¢áƒ£áƒšáƒ˜ კუნáƒ",
+ "symbol": "HRK"
+ },
+ "DJF": {
+ "name": "ჯიბუტის ფრáƒáƒœáƒ™áƒ˜",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "ჰáƒáƒ˜áƒ¢áƒ£áƒ áƒ˜ გურდი",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "ჰáƒáƒœáƒ“ურáƒáƒ¡áƒ£áƒšáƒ˜ ლემპირáƒ",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "ჰáƒáƒœáƒ™áƒáƒœáƒ’ის დáƒáƒšáƒáƒ áƒ˜",
+ "symbol": "HKD"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/kab.json b/library/intl/resources/currency/kab.json
new file mode 100644
index 000000000..5481b7680
--- /dev/null
+++ b/library/intl/resources/currency/kab.json
@@ -0,0 +1,634 @@
+{
+ "ETB": {
+ "name": "Abir Utyupi",
+ "symbol": "ETB"
+ },
+ "KES": {
+ "name": "Aciling Akini",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Aciling Aá¹£umali",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Aciling Aṭanẓani",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Aciling Awgandi",
+ "symbol": "UGX"
+ },
+ "GMD": {
+ "name": "Adalasi Agambi",
+ "symbol": "GMD"
+ },
+ "BHD": {
+ "name": "Adinar Abaḥrini",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Adinar Alibi",
+ "symbol": "LYD"
+ },
+ "TND": {
+ "name": "Adinar Atunsi",
+ "symbol": "TND"
+ },
+ "DZD": {
+ "name": "Adinar Azzayri",
+ "symbol": "DA"
+ },
+ "MAD": {
+ "name": "Adirham Amerruki",
+ "symbol": "MAD"
+ },
+ "AED": {
+ "name": "Adirham n Tgeldunin Taɛrabin Yedduklen",
+ "symbol": "AED"
+ },
+ "CAD": {
+ "name": "Adular Akanadi",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Adular Alibiri",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Adular Anamibi",
+ "symbol": "NAD"
+ },
+ "AUD": {
+ "name": "Adular n Lusá¹­rali",
+ "symbol": "A$"
+ },
+ "USD": {
+ "name": "Adular WD",
+ "symbol": "US$"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "BIF": {
+ "name": "Afrank Aburandi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Afrank Ajibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Afrank Akamiruni",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Afrank Akunguli",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Afrank Aruwandi",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Afrank Aswis",
+ "symbol": "CHF"
+ },
+ "XAF": {
+ "name": "Afrank BCEA CFA",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "Afrank BCEAO CFA",
+ "symbol": "CFA"
+ },
+ "MRO": {
+ "name": "Agiya Amuriá¹­ani",
+ "symbol": "MRO"
+ },
+ "CVE": {
+ "name": "Akabuviradinu Askudi",
+ "symbol": "CVE"
+ },
+ "MWK": {
+ "name": "Akwaca Amalawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Akwaca Azambi",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Akwanza n Ungula",
+ "symbol": "AOA"
+ },
+ "SZL": {
+ "name": "Alilangini",
+ "symbol": "SZL"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "LSL": {
+ "name": "Aluá¹­i Alizuá¹­i",
+ "symbol": "LSL"
+ },
+ "SLL": {
+ "name": "Alyun",
+ "symbol": "SLL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ERN": {
+ "name": "Anakfa Iritiri",
+ "symbol": "ERN"
+ },
+ "NGN": {
+ "name": "Anayra Anijiri",
+ "symbol": "NGN"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "BWP": {
+ "name": "Apula Abusá¹­wanan",
+ "symbol": "BWP"
+ },
+ "EGP": {
+ "name": "Apund Amaá¹£ri",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Apund Asant Ilini",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Apund Asudani",
+ "symbol": "SDG"
+ },
+ "GBP": {
+ "name": "Apund Sterling Aglizi",
+ "symbol": "£"
+ },
+ "ZAR": {
+ "name": "Arand Afriqi n Wadda",
+ "symbol": "ZAR"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "INR": {
+ "name": "Arupi Ahendi",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Arupi Amurisi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Arupi Aseycili",
+ "symbol": "SCR"
+ },
+ "SAR": {
+ "name": "Aryal Asuɛudi",
+ "symbol": "SAR"
+ },
+ "MGA": {
+ "name": "Aryari Amalgac",
+ "symbol": "MGA"
+ },
+ "STD": {
+ "name": "Asw Ṭum d Udubra Amenzay",
+ "symbol": "STD"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "JPY": {
+ "name": "Ayen Ajappuni",
+ "symbol": "JPÂ¥"
+ },
+ "CNY": {
+ "name": "Ayuwan Renminbi Acinwa",
+ "symbol": "CNÂ¥"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "EUR": {
+ "name": "Uru",
+ "symbol": "€"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/kam.json b/library/intl/resources/currency/kam.json
new file mode 100644
index 000000000..b62741d41
--- /dev/null
+++ b/library/intl/resources/currency/kam.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "MGA": {
+ "name": "Ariary ya Bukini",
+ "symbol": "MGA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Bir ya Uhabeshi",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DZD": {
+ "name": "Dinari ya Aljeria",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinari ya Bahareni",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinari ya Libya",
+ "symbol": "LYD"
+ },
+ "AED": {
+ "name": "Dirham ya Falme za Kiarabu",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham ya Moroko",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobra ya Sao Tome na Principe",
+ "symbol": "STD"
+ },
+ "LRD": {
+ "name": "Dola ya Liberia",
+ "symbol": "LRD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "Eskudo ya Kepuvede",
+ "symbol": "CVE"
+ },
+ "XOF": {
+ "name": "Faranga CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Faranga CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "BIF": {
+ "name": "Faranga ya Burundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Faranga ya Jibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Faranga ya Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Faranga ya Kongo",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Faranga ya Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Faranga ya Uswisi",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kwacha ya Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha ya Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza ya Angola",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leoni",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti ya Lesoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira ya Nijeria",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa ya Eritrea",
+ "symbol": "ERN"
+ },
+ "GMD": {
+ "name": "Ndalasi ya Gambia",
+ "symbol": "GMD"
+ },
+ "TND": {
+ "name": "Ndinari ya Tunisia",
+ "symbol": "TND"
+ },
+ "AUD": {
+ "name": "Ndola ya Australia",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "Ndola ya Kanada",
+ "symbol": "CA$"
+ },
+ "USD": {
+ "name": "Ndola ya Marekani",
+ "symbol": "US$"
+ },
+ "NAD": {
+ "name": "Ndola ya Namibia",
+ "symbol": "NAD"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "GBP": {
+ "name": "Pauni ya Uingereza",
+ "symbol": "£"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pula ya Botswana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Randi ya Afrika Kusini",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riyal ya Saudia",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupia ya India",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupia ya Morisi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupia ya Shelisheli",
+ "symbol": "SCR"
+ },
+ "JPY": {
+ "name": "Sarafu ya Kijapani",
+ "symbol": "JPÂ¥"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "Silingi ya Kenya",
+ "symbol": "Ksh"
+ },
+ "SOS": {
+ "name": "Silingi ya Somalia",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Silingi ya Tanzania",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Silingi ya Uganda",
+ "symbol": "UGX"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ugwiya ya Moritania",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "EGP": {
+ "name": "Vaundi ya Misili",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Vaũndi ya Santahelena",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Vaũndi ya Sudani",
+ "symbol": "SDG"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yuan Renminbi ya China",
+ "symbol": "CNÂ¥"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/kde.json b/library/intl/resources/currency/kde.json
new file mode 100644
index 000000000..108576f07
--- /dev/null
+++ b/library/intl/resources/currency/kde.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Bir ya Uhabeshi",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi ya Gambia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinari ya Aljeria",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinari ya Bahareni",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinari ya Libya",
+ "symbol": "LYD"
+ },
+ "SDG": {
+ "name": "Dinari ya Sudani",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "Dinari ya Tunisia",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham ya Falme za Chiarabu",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham ya Moroko",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobra ya Sao Tome na Principe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "Dola ya Australia",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "Dola ya Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dola ya Liberia",
+ "symbol": "LRD"
+ },
+ "USD": {
+ "name": "Dola ya Marekani",
+ "symbol": "US$"
+ },
+ "NAD": {
+ "name": "Dola ya Namibia",
+ "symbol": "NAD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "Eskudo ya Kepuvede",
+ "symbol": "CVE"
+ },
+ "XOF": {
+ "name": "Faranga CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Faranga CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "MGA": {
+ "name": "Faranga ya Bukini",
+ "symbol": "MGA"
+ },
+ "BIF": {
+ "name": "Faranga ya Burundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Faranga ya Jibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Faranga ya Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Faranga ya Kongo",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Faranga ya Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Faranga ya Uswisi",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kwacha ya Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha ya Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza ya Angola",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leoni",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti ya Lesoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira ya Nijeria",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa ya Eritrea",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "EGP": {
+ "name": "Pauni ya Misri",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Pauni ya Santahelena",
+ "symbol": "SHP"
+ },
+ "GBP": {
+ "name": "Pauni ya Uingereza",
+ "symbol": "£"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pula ya Botswana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Randi ya Afrika Kusini",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riyal ya Saudia",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupia ya India",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupia ya Morisi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupia ya Shelisheli",
+ "symbol": "SCR"
+ },
+ "JPY": {
+ "name": "Sarafu ya Chijapani",
+ "symbol": "JPÂ¥"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "Shilingi ya Kenya",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Shilingi ya Somalia",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Shilingi ya Tanzania",
+ "symbol": "TSh"
+ },
+ "UGX": {
+ "name": "Shilingi ya Uganda",
+ "symbol": "UGX"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ugwiya ya Moritania",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yuan Renminbi ya China",
+ "symbol": "CNÂ¥"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/kea.json b/library/intl/resources/currency/kea.json
new file mode 100644
index 000000000..efc07ee0f
--- /dev/null
+++ b/library/intl/resources/currency/kea.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "MGA": {
+ "name": "Ariari di Madagaskar",
+ "symbol": "MGA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "THB": {
+ "name": "Baht tailandes",
+ "symbol": "฿"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Bir etiopi",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinar arjelinu",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinar di Barain",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinar libiu",
+ "symbol": "LYD"
+ },
+ "TND": {
+ "name": "Dinar tunizianu",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Diren di Emiradus Arabi Unidu",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Diren marokinu",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "Dobra di Sãu Tume i Prinsipi",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "Dola australianu",
+ "symbol": "AU$"
+ },
+ "HKD": {
+ "name": "Dola di Ong Kong",
+ "symbol": "HK$"
+ },
+ "CAD": {
+ "name": "Dola kanadianu",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dola liberianu",
+ "symbol": "LRD"
+ },
+ "USD": {
+ "name": "Dola merkanu",
+ "symbol": "US$"
+ },
+ "NAD": {
+ "name": "Dola namibianu",
+ "symbol": "NAD"
+ },
+ "TWD": {
+ "name": "Dola Novu di Taiwan",
+ "symbol": "NT$"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "BIF": {
+ "name": "Franku borundes",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Franku CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Franku CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "DJF": {
+ "name": "Franku di Djibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Franku di Komoris",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Franku kongoles",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Franku ruandes",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Franku suisu",
+ "symbol": "CHF"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "JPY": {
+ "name": "Ieni japones",
+ "symbol": "JPÂ¥"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "CNY": {
+ "name": "Iuan xines",
+ "symbol": "CNÂ¥"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "AOA": {
+ "name": "Kuanza",
+ "symbol": "AOA"
+ },
+ "MWK": {
+ "name": "Kuaxa di Malaui",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kuaxa zambianu",
+ "symbol": "ZMW"
+ },
+ "DKK": {
+ "name": "Kuroa dinamarkeza",
+ "symbol": "DKK"
+ },
+ "NOK": {
+ "name": "Kuroa norueges",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "Kuroa sueku",
+ "symbol": "SEK"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leone di Sera Leoa",
+ "symbol": "SLL"
+ },
+ "SHP": {
+ "name": "Libra di Santa Ilena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "Libra ejipsiu",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "Libra sterlina britaniku",
+ "symbol": "£"
+ },
+ "SDG": {
+ "name": "Libra sudanes",
+ "symbol": "SDG"
+ },
+ "SZL": {
+ "name": "Lilanjeni",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "Lira turku",
+ "symbol": "TRY"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti di Lezotu",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "ERN": {
+ "name": "Nafka di Eritreia",
+ "symbol": "ERN"
+ },
+ "NGN": {
+ "name": "Naira",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "MRO": {
+ "name": "Ougia",
+ "symbol": "MRO"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "MXN": {
+ "name": "Pezu mexikanu",
+ "symbol": "MX$"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "BWP": {
+ "name": "Pula di Botsuana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Rand sulafrikanu",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "Rial brazileru",
+ "symbol": "R$"
+ },
+ "SAR": {
+ "name": "Rial saudita",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "Rublu rusu",
+ "symbol": "RUB"
+ },
+ "MUR": {
+ "name": "Rupia di Maurisias",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupia di Seixelis",
+ "symbol": "SCR"
+ },
+ "INR": {
+ "name": "Rupia indianu",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Rupia indoneziu",
+ "symbol": "IDR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "CVE": {
+ "name": "Skudu Kabuverdianu",
+ "symbol": "​"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "KRW": {
+ "name": "Won sul-koreanu",
+ "symbol": "â‚©"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "TZS": {
+ "name": "Xelin di Tanzania",
+ "symbol": "TZS"
+ },
+ "KES": {
+ "name": "Xelin kenianu",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Xelin somalianu",
+ "symbol": "SOS"
+ },
+ "UGX": {
+ "name": "Xelin ugandensi",
+ "symbol": "UGX"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "PLN": {
+ "name": "Zloty polaku",
+ "symbol": "PLN"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/khq.json b/library/intl/resources/currency/khq.json
new file mode 100644
index 000000000..c75824e61
--- /dev/null
+++ b/library/intl/resources/currency/khq.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Alžeeri Dinar",
+ "symbol": "DZD"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "USD": {
+ "name": "Ameriki Dollar",
+ "symbol": "US$"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "Angoola Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BHD": {
+ "name": "Bahareen Dinar",
+ "symbol": "BHD"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BWP": {
+ "name": "Botswaana Pund",
+ "symbol": "BWP"
+ },
+ "GBP": {
+ "name": "Britin Pund",
+ "symbol": "£"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BIF": {
+ "name": "Burundi Fraŋ",
+ "symbol": "BIF"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "XOF": {
+ "name": "CFA Fraŋ (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Fraŋ (BEAC)",
+ "symbol": "FCFA"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "ETB": {
+ "name": "Ecioopi Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Eero",
+ "symbol": "€"
+ },
+ "ERN": {
+ "name": "Eritree Nafka",
+ "symbol": "ERN"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GMD": {
+ "name": "Gambi Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "ZAR": {
+ "name": "Hawasa Afriki Rand",
+ "symbol": "ZAR"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "Indu Rupii",
+ "symbol": "₹"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JPY": {
+ "name": "Jaapoŋ Yen",
+ "symbol": "JPÂ¥"
+ },
+ "DJF": {
+ "name": "Jibuuti Fraŋ",
+ "symbol": "DJF"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "CAD": {
+ "name": "Kanaada Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Kapuver Escudo",
+ "symbol": "CVE"
+ },
+ "KES": {
+ "name": "Keeniya Šiiliŋ",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "Komoor Fraŋ",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Kongo Fraŋ",
+ "symbol": "CDF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "AED": {
+ "name": "Laaraw Immaara Margantey Dirham",
+ "symbol": "AED"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leeon",
+ "symbol": "SLL"
+ },
+ "LSL": {
+ "name": "Leezoto Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberia Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Liibi Dinar",
+ "symbol": "LYD"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MAD": {
+ "name": "Maarok Dirham",
+ "symbol": "MAD"
+ },
+ "MWK": {
+ "name": "Malaawi Kwaca",
+ "symbol": "MWK"
+ },
+ "MGA": {
+ "name": "Malgaaši Fraŋ",
+ "symbol": "MGA"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "EGP": {
+ "name": "Misra Pund",
+ "symbol": "EGP"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MUR": {
+ "name": "Mooris Rupii",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "Mooritaani Ugiya",
+ "symbol": "MRO"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naajiriya Neera",
+ "symbol": "NGN"
+ },
+ "NAD": {
+ "name": "Naamibi Dollar",
+ "symbol": "NAD"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "AUD": {
+ "name": "Ostraali Dollar",
+ "symbol": "A$"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwanda Fraŋ",
+ "symbol": "RWF"
+ },
+ "STD": {
+ "name": "Sao Tome nda Prinsipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudiya Riyal",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "Seešel Rupii",
+ "symbol": "SCR"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SHP": {
+ "name": "Seŋ Helena Fraŋ",
+ "symbol": "SHP"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "CNY": {
+ "name": "Sinwa Yuan Renminbi",
+ "symbol": "CNÂ¥"
+ },
+ "SOS": {
+ "name": "Somaali Šiiliŋ",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SDG": {
+ "name": "Suudaŋ Dinar",
+ "symbol": "SDG"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "CHF": {
+ "name": "Swisu Fraŋ",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "TZS": {
+ "name": "Tanzaani Šiiliŋ",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunizi Dinar",
+ "symbol": "TND"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "Uganda Šiiliŋ",
+ "symbol": "UGX"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambi Kwaca",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ki.json b/library/intl/resources/currency/ki.json
new file mode 100644
index 000000000..a2b41bced
--- /dev/null
+++ b/library/intl/resources/currency/ki.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "MGA": {
+ "name": "Ariary ya Bukini",
+ "symbol": "MGA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Bir ya Uhabeshi",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "SOS": {
+ "name": "ciringi cia cumarĩ",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "ciringi cia Tanizania",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "ciringi cia Ũganda",
+ "symbol": "UGX"
+ },
+ "KES": {
+ "name": "Ciringi ya Kenya",
+ "symbol": "Ksh"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi ya Gambia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinari ya Aljeria",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinari ya Bahareni",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinari ya Libya",
+ "symbol": "LYD"
+ },
+ "TND": {
+ "name": "Dinari ya Tunisia",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham ya Falme za Kiarabu",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham ya Moroko",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobra ya Sao Tome na Principe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "Dola ya Australia",
+ "symbol": "A$"
+ },
+ "LRD": {
+ "name": "Dola ya Liberia",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Dola ya Namibia",
+ "symbol": "NAD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "Eskudo ya Kepuvede",
+ "symbol": "CVE"
+ },
+ "XOF": {
+ "name": "Faranga CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Faranga CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "BIF": {
+ "name": "Faranga ya Burundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Faranga ya Jibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Faranga ya Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Faranga ya Kongo",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Faranga ya Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Faranga ya Uswisi",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kwacha ya Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha ya Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza ya Angola",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leoni",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti ya Lesoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "GBP": {
+ "name": "Mbauini cia Ngeretha",
+ "symbol": "£"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira ya Nijeria",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa ya Eritrea",
+ "symbol": "ERN"
+ },
+ "USD": {
+ "name": "Ndora cia Amerika",
+ "symbol": "US$"
+ },
+ "CAD": {
+ "name": "Ndora ya Kananda",
+ "symbol": "CA$"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "EGP": {
+ "name": "Pauni ya Misri",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Pauni ya Santahelena",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Pauni ya Sudani",
+ "symbol": "SDG"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pula ya Botswana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Randi ya Afrika Kusini",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riyal ya Saudia",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rubia rwa India",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupia ya Morisi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupia ya Shelisheli",
+ "symbol": "SCR"
+ },
+ "JPY": {
+ "name": "Sarafu ya Kijapani",
+ "symbol": "JPÂ¥"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ugwiya ya Moritania",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yuan Renminbi ya China",
+ "symbol": "CNÂ¥"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/kk.json b/library/intl/resources/currency/kk.json
new file mode 100644
index 000000000..3a2e18c7f
--- /dev/null
+++ b/library/intl/resources/currency/kk.json
@@ -0,0 +1,634 @@
+{
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "AUD": {
+ "name": "ÐвÑÑ‚Ñ€Ð°Ð»Ð¸Ñ Ð´Ð¾Ð»Ð»Ð°Ñ€Ñ‹",
+ "symbol": "A$"
+ },
+ "USD": {
+ "name": "ÐҚШ доллары",
+ "symbol": "$"
+ },
+ "ALL": {
+ "name": "ÐÐ»Ð±Ð°Ð½Ð¸Ñ Ð»ÐµÐºÑ–",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Ðлжир динары",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Ðнгола кванзаÑÑ‹",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Ðргентина пеÑоÑÑ‹",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "ÐÑ€Ð¼ÐµÐ½Ð¸Ñ Ð´Ñ€Ð°Ð¼Ñ‹",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Ðрубан флоринÑÑ‹",
+ "symbol": "AWG"
+ },
+ "AFN": {
+ "name": "ÐуғаныÑтан афганиі",
+ "symbol": "AFN"
+ },
+ "AZN": {
+ "name": "Әзірбайжан манаты",
+ "symbol": "AZN"
+ },
+ "SHP": {
+ "name": "Әулие Елена аралы фунты",
+ "symbol": "SHP"
+ },
+ "BSD": {
+ "name": "Багам доллары",
+ "symbol": "BSD"
+ },
+ "BDT": {
+ "name": "Бангладеш такаÑÑ‹",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Ð‘Ð°Ñ€Ð±Ð°Ð´Ð¾Ñ Ð´Ð¾Ð»Ð»Ð°Ñ€Ñ‹",
+ "symbol": "BBD"
+ },
+ "BHD": {
+ "name": "Бахрейн динары",
+ "symbol": "BHD"
+ },
+ "BYR": {
+ "name": "Ð‘ÐµÐ»Ð°Ñ€ÑƒÑ Ñ€ÑƒÐ±Ð»Ñ–",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Белиз доллары",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Бермуд доллары",
+ "symbol": "БД"
+ },
+ "BGN": {
+ "name": "Болгар леві",
+ "symbol": "BGN"
+ },
+ "BOB": {
+ "name": "Ð‘Ð¾Ð»Ð¸Ð²Ð¸Ñ Ð±Ð¾Ð»Ð¸Ð²Ð¸Ð°Ð½Ð¾ÑÑ‹",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "БоÑÐ½Ð¸Ñ Ð¶Ó™Ð½Ðµ Герцеговина айырбаÑталмалы маркаÑÑ‹",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "БотÑвана пулаÑÑ‹",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Ð‘Ñ€Ð°Ð·Ð¸Ð»Ð¸Ñ Ñ€ÐµÐ°Ð»Ñ‹",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "Ð‘Ñ€Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ñ„ÑƒÐ½Ñ‚Ñ‹",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Бруней доллары",
+ "symbol": "BND"
+ },
+ "BIF": {
+ "name": "Бурунди франкы",
+ "symbol": "BIF"
+ },
+ "BTN": {
+ "name": "Бутан нгултрумы",
+ "symbol": "BTN"
+ },
+ "VUV": {
+ "name": "Вануату ватуы",
+ "symbol": "VUV"
+ },
+ "HUF": {
+ "name": "Венгер форинты",
+ "symbol": "HUF"
+ },
+ "VEF": {
+ "name": "ВенеÑуÑла боливары",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Вьетнам донгы",
+ "symbol": "â‚«"
+ },
+ "HTG": {
+ "name": "Гаити гурды",
+ "symbol": "HTG"
+ },
+ "GYD": {
+ "name": "Гайана доллары",
+ "symbol": "GYD"
+ },
+ "GMD": {
+ "name": "Ð“Ð°Ð¼Ð±Ð¸Ñ Ð´Ð°Ð»Ð°Ñиі",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "Гана Ñедиі",
+ "symbol": "GHS"
+ },
+ "GTQ": {
+ "name": "Гватемала кетÑалі",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Гвиней франкы",
+ "symbol": "GNF"
+ },
+ "GIP": {
+ "name": "Гибралтар фунты",
+ "symbol": "GIP"
+ },
+ "HNL": {
+ "name": "Ð“Ð¾Ð½Ð´ÑƒÑ€Ð°Ñ Ð»ÐµÐ¼Ð¿Ð¸Ñ€Ð°cÑ‹",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Гонконг доллары",
+ "symbol": "HK$"
+ },
+ "GEL": {
+ "name": "Ð“Ñ€ÑƒÐ·Ð¸Ñ Ð»Ð°Ñ€Ð¸Ñ–",
+ "symbol": "GEL"
+ },
+ "DKK": {
+ "name": "Дат кроны",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Джибути франкы",
+ "symbol": "DJF"
+ },
+ "AED": {
+ "name": "Дихрам (БÐЭ)",
+ "symbol": "AED"
+ },
+ "DOP": {
+ "name": "Доминикан пеÑоÑÑ‹",
+ "symbol": "DOP"
+ },
+ "EUR": {
+ "name": "Еуро",
+ "symbol": "€"
+ },
+ "NZD": {
+ "name": "Жаңа Ð—ÐµÐ»Ð°Ð½Ð´Ð¸Ñ Ð´Ð¾Ð»Ð»Ð°Ñ€Ñ‹",
+ "symbol": "NZ$"
+ },
+ "TWD": {
+ "name": "Жаңа Тайван доллары",
+ "symbol": "NT$"
+ },
+ "JPY": {
+ "name": "Жапон иені",
+ "symbol": "JPÂ¥"
+ },
+ "ZMW": {
+ "name": "Ð—Ð°Ð¼Ð±Ð¸Ñ ÐºÐ²Ð°Ñ‡Ð°ÑÑ‹",
+ "symbol": "ZMW"
+ },
+ "ILS": {
+ "name": "Израиль жаңа шекелі",
+ "symbol": "₪"
+ },
+ "IDR": {
+ "name": "Ð˜Ð½Ð´Ð¾Ð½ÐµÐ·Ð¸Ñ Ñ€ÑƒÐ¿Ð¸Ñ–",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "Ирак динары",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "Иран риалы",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ИÑÐ»Ð°Ð½Ð´Ð¸Ñ ÐºÑ€Ð¾Ð½Ð°ÑÑ‹",
+ "symbol": "ISK"
+ },
+ "YER": {
+ "name": "Йемен риалы",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "Ð™Ð¾Ñ€Ð´Ð°Ð½Ð¸Ñ Ð´Ð¸Ð½Ð°Ñ€Ñ‹",
+ "symbol": "JOD"
+ },
+ "CVE": {
+ "name": "Кабо-Верде ÑÑкудоÑÑ‹",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Кайман аралдары доллары",
+ "symbol": "KYD"
+ },
+ "KHR": {
+ "name": "Камбоджа риелі",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Канада доллары",
+ "symbol": "КД$"
+ },
+ "QAR": {
+ "name": "Катар риалы",
+ "symbol": "QAR"
+ },
+ "KES": {
+ "name": "ÐšÐµÐ½Ð¸Ñ ÑˆÐ¸Ð»Ð»Ð¸Ð½Ð³Ñ–",
+ "symbol": "KES"
+ },
+ "COP": {
+ "name": "ÐšÐ¾Ð»ÑƒÐ¼Ð±Ð¸Ñ Ð¿ÐµÑоÑÑ‹",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Комор аралдары франкы",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Конго франкы",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "КоÑта-рика колоны",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "Куба айырбаÑталмалы пеÑоÑÑ‹",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Куба пеÑоÑÑ‹",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "Кувейт динары",
+ "symbol": "KWD"
+ },
+ "XAF": {
+ "name": "КФРВЕÐС франкы",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "КФРВСЕÐО франкы",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "КФП франкы",
+ "symbol": "CFPF"
+ },
+ "KZT": {
+ "name": "ҚазақÑтан теңгеÑÑ–",
+ "symbol": "₸"
+ },
+ "KGS": {
+ "name": "ҚырғызÑтан Ñомы",
+ "symbol": "KGS"
+ },
+ "CNY": {
+ "name": "Қытай юаны",
+ "symbol": "CNÂ¥"
+ },
+ "LAK": {
+ "name": "Ð›Ð°Ð¾Ñ ÐºÐ¸Ð¿Ñ–",
+ "symbol": "LAK"
+ },
+ "LRD": {
+ "name": "Ð›Ð¸Ð±ÐµÑ€Ð¸Ñ Ð´Ð¾Ð»Ð»Ð°Ñ€Ñ‹",
+ "symbol": "LRD"
+ },
+ "LBP": {
+ "name": "Ливан фунты",
+ "symbol": "LBP"
+ },
+ "LYD": {
+ "name": "Ð›Ð¸Ð²Ð¸Ñ Ð´Ð¸Ð½Ð°Ñ€Ñ‹",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Литва литы",
+ "symbol": "LTL"
+ },
+ "MUR": {
+ "name": "Маврикий рупиÑÑÑ‹",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "ÐœÐ°Ð²Ñ€Ð¸Ñ‚Ð°Ð½Ð¸Ñ ÑƒÐ³Ð¸ÑÑÑ‹",
+ "symbol": "MRO"
+ },
+ "MOP": {
+ "name": "Макао патакаÑÑ‹",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "ÐœÐ°ÐºÐµÐ´Ð¾Ð½Ð¸Ñ Ð´Ð¸Ð½Ð°Ñ€Ñ‹",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "Малави квачаÑÑ‹",
+ "symbol": "MWK"
+ },
+ "MGA": {
+ "name": "МалагаÑи ариариы",
+ "symbol": "MGA"
+ },
+ "MYR": {
+ "name": "ÐœÐ°Ð»Ð°Ð¹Ð·Ð¸Ñ Ñ€Ð¸Ð½Ð³Ð³Ð¸Ñ‚Ñ–",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Мальдив руфиÑÑÑ‹",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "Марокко дирхамы",
+ "symbol": "MAD"
+ },
+ "MXN": {
+ "name": "МекÑика пеÑÑоÑÑ‹",
+ "symbol": "MX$"
+ },
+ "MZN": {
+ "name": "Мозамбик метикалы",
+ "symbol": "MZN"
+ },
+ "MDL": {
+ "name": "Молдава лейі",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "ÐœÐ¾Ò£Ò“Ð¾Ð»Ð¸Ñ Ñ‚ÑƒÐ³Ñ€Ð¸ÐºÐ°ÑÑ‹",
+ "symbol": "MNT"
+ },
+ "EGP": {
+ "name": "МыÑÑ‹Ñ€ фунты",
+ "symbol": "EGP"
+ },
+ "MMK": {
+ "name": "МьÑнма кьÑÑ‚Ñ‹",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "ÐÐ°Ð¼Ð¸Ð±Ð¸Ñ Ð´Ð¾Ð»Ð»Ð°Ñ€Ñ‹",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Ðепал рупиі",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "ÐÐ¸Ð³ÐµÑ€Ð¸Ñ Ð½Ð°Ð¹Ñ€Ð°ÑÑ‹",
+ "symbol": "NGN"
+ },
+ "ANG": {
+ "name": "Ðидерланд антиль гульдені",
+ "symbol": "ANG"
+ },
+ "NIO": {
+ "name": "Ðикарагуа кордобаÑÑ‹",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "ÐÐ¾Ñ€Ð²ÐµÐ³Ð¸Ñ ÐºÑ€Ð¾Ð½Ñ‹",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Оман риалы",
+ "symbol": "OMR"
+ },
+ "ZAR": {
+ "name": "ОңтүÑтік Ðфрика Ñ€Ñнді",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "ОңтүÑтік ÐšÐ¾Ñ€ÐµÑ Ð²Ð¾Ð½Ñ‹",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "ОңтүÑтік Судан фунты",
+ "symbol": "SSP"
+ },
+ "UZS": {
+ "name": "ӨзбекÑтан Ñомы",
+ "symbol": "UZS"
+ },
+ "PAB": {
+ "name": "Панама бальбоаÑÑ‹",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Папуа - Жаңа Ð“Ð²Ð¸Ð½ÐµÑ ÐºÐ¸Ð½Ð°ÑÑ‹",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Парагвай гуараниі",
+ "symbol": "PYG"
+ },
+ "PKR": {
+ "name": "ПәкіÑтан рупиі",
+ "symbol": "PKR"
+ },
+ "PEN": {
+ "name": "Перу жаңа Ñолі",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "Польша злотаÑÑ‹",
+ "symbol": "PLN"
+ },
+ "RUB": {
+ "name": "РеÑей рубль",
+ "symbol": "руб."
+ },
+ "RWF": {
+ "name": "Руанда франкы",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "Ð ÑƒÐ¼Ñ‹Ð½Ð¸Ñ Ð»ÐµÐ¹Ñ–",
+ "symbol": "RON"
+ },
+ "WST": {
+ "name": "Самоа талаÑÑ‹",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "Сант-Томе мен ПринÑипи добраÑÑ‹",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Сауд ÐÑ€Ð°Ð±Ð¸Ñ Ñ€Ð¸Ð°Ð»Ñ‹",
+ "symbol": "SAR"
+ },
+ "SZL": {
+ "name": "Свазиленд лилангениі",
+ "symbol": "SZL"
+ },
+ "SCR": {
+ "name": "Сейшель рупиÑÑÑ‹",
+ "symbol": "SCR"
+ },
+ "RSD": {
+ "name": "Ð¡ÐµÑ€Ð±Ð¸Ñ Ð´Ð¸Ð½Ð°Ñ€Ñ‹",
+ "symbol": "RSD"
+ },
+ "SGD": {
+ "name": "Сингапур доллары",
+ "symbol": "SGD"
+ },
+ "SYP": {
+ "name": "Ð¡Ð¸Ñ€Ð¸Ñ Ñ„ÑƒÐ½Ñ‚Ñ‹",
+ "symbol": "SYP"
+ },
+ "SBD": {
+ "name": "Соломон аралдары доллары",
+ "symbol": "SBD"
+ },
+ "KPW": {
+ "name": "СолтүÑтік ÐšÐ¾Ñ€ÐµÑ Ð²Ð¾Ð½Ñ‹",
+ "symbol": "KPW"
+ },
+ "SOS": {
+ "name": "Сомали шиллингі",
+ "symbol": "SOS"
+ },
+ "SDG": {
+ "name": "Судан фунты",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Суринам доллары",
+ "symbol": "SRD"
+ },
+ "SLL": {
+ "name": "Сьерра-Леоне леонеÑÑ‹",
+ "symbol": "SLL"
+ },
+ "THB": {
+ "name": "Тай баты",
+ "symbol": "฿"
+ },
+ "TZS": {
+ "name": "Ð¢Ð°Ð½Ð·Ð°Ð½Ð¸Ñ ÑˆÐ¸Ð»Ð»Ð¸Ð½Ð³Ñ–",
+ "symbol": "TZS"
+ },
+ "TJS": {
+ "name": "ТәжікÑтан Ñомониі",
+ "symbol": "TJS"
+ },
+ "TOP": {
+ "name": "Тонга паангаÑÑ‹",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Тринидад пен Тобаго доллары",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Ð¢ÑƒÐ½Ð¸Ñ Ð´Ð¸Ð½Ð°Ñ€Ñ‹",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Түрік лираÑÑ‹",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "ТүрікменÑтан манаты",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Уганда шиллингі",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Украина гривнаÑÑ‹",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "Уругвай пеÑоÑÑ‹",
+ "symbol": "UYU"
+ },
+ "INR": {
+ "name": "Үнді рупиÑÑÑ‹",
+ "symbol": "₹"
+ },
+ "FJD": {
+ "name": "Фиджи доллары",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "Филиппин пеÑоÑÑ‹",
+ "symbol": "PHP"
+ },
+ "FKP": {
+ "name": "Фолкленд аралдарының фунты",
+ "symbol": "FKP"
+ },
+ "HRK": {
+ "name": "Ð¥Ð¾Ñ€Ð²Ð°Ñ‚Ð¸Ñ ÐºÑƒÐ½Ð°ÑÑ‹",
+ "symbol": "HRK"
+ },
+ "CZK": {
+ "name": "Чех кронаÑÑ‹",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "Чили пеÑоÑÑ‹",
+ "symbol": "CLP"
+ },
+ "SEK": {
+ "name": "Швед кроны",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Ð¨Ð²ÐµÐ¹Ñ†Ð°Ñ€Ð¸Ñ Ñ„Ñ€Ð°Ð½ÐºÑ‹",
+ "symbol": "CHF"
+ },
+ "LKR": {
+ "name": "Шри-Ланка рупиÑÑÑ‹",
+ "symbol": "LKR"
+ },
+ "XCD": {
+ "name": "Ð¨Ñ‹Ò“Ñ‹Ñ ÐšÐ°Ñ€Ð¸Ð± доллары",
+ "symbol": "EC$"
+ },
+ "ERN": {
+ "name": "Эритрей накфаÑÑ‹",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ð­Ñ„Ð¸Ð¾Ð¿Ð¸Ñ Ð±Ñ‹Ñ€Ñ‹",
+ "symbol": "ETB"
+ },
+ "JMD": {
+ "name": "Ямайка доллары",
+ "symbol": "JMD"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/kl.json b/library/intl/resources/currency/kl.json
new file mode 100644
index 000000000..203a4485e
--- /dev/null
+++ b/library/intl/resources/currency/kl.json
@@ -0,0 +1,634 @@
+{
+ "AED": {
+ "name": "AED",
+ "symbol": "AED"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "AOA",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AUD": {
+ "name": "AUD",
+ "symbol": "A$"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BHD": {
+ "name": "BHD",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "BIF",
+ "symbol": "BIF"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BWP": {
+ "name": "BWP",
+ "symbol": "BWP"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CAD": {
+ "name": "CAD",
+ "symbol": "CA$"
+ },
+ "CDF": {
+ "name": "CDF",
+ "symbol": "CDF"
+ },
+ "CHF": {
+ "name": "CHF",
+ "symbol": "CHF"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "CNY",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CVE": {
+ "name": "CVE",
+ "symbol": "CVE"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "danmarkimut koruuni",
+ "symbol": "kr."
+ },
+ "DJF": {
+ "name": "DJF",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "DZD": {
+ "name": "DZD",
+ "symbol": "DZD"
+ },
+ "EGP": {
+ "name": "EGP",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "ERN",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "ETB",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GBP": {
+ "name": "GBP",
+ "symbol": "£"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GMD": {
+ "name": "GMD",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "INR",
+ "symbol": "₹"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "JPY": {
+ "name": "JPY",
+ "symbol": "JPÂ¥"
+ },
+ "KES": {
+ "name": "KES",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "KMF",
+ "symbol": "KMF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LRD": {
+ "name": "LRD",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "LYD",
+ "symbol": "LYD"
+ },
+ "MAD": {
+ "name": "MAD",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MGA": {
+ "name": "MGA",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MRO": {
+ "name": "MRO",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "MWK",
+ "symbol": "MWK"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "norskit koruuni",
+ "symbol": "Nkr"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SAR": {
+ "name": "SAR",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "SDG",
+ "symbol": "SDG"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SOS",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SEK": {
+ "name": "svenskit koruuni",
+ "symbol": "Skr"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "TND",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "TZS": {
+ "name": "TZS",
+ "symbol": "TZS"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "UGX",
+ "symbol": "UGX"
+ },
+ "USD": {
+ "name": "USD",
+ "symbol": "US$"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZAR": {
+ "name": "ZAR",
+ "symbol": "ZAR"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/kln.json b/library/intl/resources/currency/kln.json
new file mode 100644
index 000000000..f9a2db672
--- /dev/null
+++ b/library/intl/resources/currency/kln.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "AUD": {
+ "name": "Dolaitab Australian",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "Dolaitab Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dolaitab Liberia",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Dolaitab Namibia",
+ "symbol": "NAD"
+ },
+ "USD": {
+ "name": "Dolaitab ya Amareka",
+ "symbol": "US$"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "ZMW": {
+ "name": "Kwachaitab Zambia",
+ "symbol": "ZMW"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leonit",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangenit",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "EGP": {
+ "name": "Pauditab Misri",
+ "symbol": "EGP"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "SHP": {
+ "name": "Pouditab helena ne tilil",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Pouditab Sudan",
+ "symbol": "SDG"
+ },
+ "GBP": {
+ "name": "pounditab Uingereza",
+ "symbol": "£"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "DZD": {
+ "name": "Rabisiekab Algerian",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Rabisiekab Angolan",
+ "symbol": "AOA"
+ },
+ "BHD": {
+ "name": "Rabisiekab Bahrain",
+ "symbol": "BHD"
+ },
+ "BWP": {
+ "name": "Rabisiekab Botswana",
+ "symbol": "BWP"
+ },
+ "BIF": {
+ "name": "Rabisiekab Burundi",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Rabisiekab CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Rabisiekab CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "CNY": {
+ "name": "Rabisiekab China",
+ "symbol": "CNÂ¥"
+ },
+ "CDF": {
+ "name": "Rabisiekab Congo",
+ "symbol": "CDF"
+ },
+ "ERN": {
+ "name": "Rabisiekab Eritrea",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Rabisiekab Ethiopia",
+ "symbol": "ETB"
+ },
+ "GMD": {
+ "name": "Rabisiekab Gambia",
+ "symbol": "GMD"
+ },
+ "INR": {
+ "name": "Rabisiekab India",
+ "symbol": "₹"
+ },
+ "JPY": {
+ "name": "Rabisiekab Japan",
+ "symbol": "JPÂ¥"
+ },
+ "DJF": {
+ "name": "Rabisiekab Jibuti",
+ "symbol": "DJF"
+ },
+ "CVE": {
+ "name": "Rabisiekab Kepuvede",
+ "symbol": "CVE"
+ },
+ "AED": {
+ "name": "Rabisiekab Kibagegeitab arabuk",
+ "symbol": "AED"
+ },
+ "KMF": {
+ "name": "Rabisiekab Komoro",
+ "symbol": "KMF"
+ },
+ "LSL": {
+ "name": "Rabisiekab Lesoto",
+ "symbol": "LSL"
+ },
+ "LYD": {
+ "name": "Rabisiekab Libya",
+ "symbol": "LYD"
+ },
+ "MGA": {
+ "name": "Rabisiekab Malagasy",
+ "symbol": "MGA"
+ },
+ "MRO": {
+ "name": "Rabisiekab Mauritania",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Rabisiekab Mauritius",
+ "symbol": "MUR"
+ },
+ "MAD": {
+ "name": "Rabisiekab Moroccan",
+ "symbol": "MAD"
+ },
+ "NGN": {
+ "name": "Rabisiekab Nigeria",
+ "symbol": "NGN"
+ },
+ "RWF": {
+ "name": "Rabisiekab Rwanda",
+ "symbol": "RWF"
+ },
+ "STD": {
+ "name": "Rabisiekab Sao Tome ak Principe",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Rabisiekab Saudia",
+ "symbol": "SAR"
+ },
+ "SCR": {
+ "name": "Rabisiekab Shelisheli",
+ "symbol": "SCR"
+ },
+ "CHF": {
+ "name": "Rabisiekab Swiss",
+ "symbol": "CHF"
+ },
+ "TND": {
+ "name": "RabisiekabTunisia",
+ "symbol": "TND"
+ },
+ "MWK": {
+ "name": "Rabisiekaby Malawi",
+ "symbol": "MWK"
+ },
+ "ZAR": {
+ "name": "Randitab Afrika nebo murot tai",
+ "symbol": "ZAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "siligitab Somalia",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "silingitab Tanzania",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Silingitab Uganda",
+ "symbol": "UGX"
+ },
+ "KES": {
+ "name": "Silingitab ya Kenya",
+ "symbol": "Ksh"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "EUR": {
+ "name": "Yuroit",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/km.json b/library/intl/resources/currency/km.json
new file mode 100644
index 000000000..037654774
--- /dev/null
+++ b/library/intl/resources/currency/km.json
@@ -0,0 +1,634 @@
+{
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "CZK": {
+ "name": "កូរុណា​សាធារណៈ​ឆáŸáž€",
+ "symbol": "CZK"
+ },
+ "CRC": {
+ "name": "កូឡុង​កូស្ážáž¶ážšáž¸áž€áž¶",
+ "symbol": "CRC"
+ },
+ "SEK": {
+ "name": "ក្រូណា​ស៊ុយអែáž",
+ "symbol": "SEK"
+ },
+ "ISK": {
+ "name": "ក្រូណា​អ៊ីស្លង់",
+ "symbol": "ISK"
+ },
+ "DKK": {
+ "name": "ក្រូណáŸâ€‹ážŠáž¶ážŽáž¶áž˜áŸ‰áž¶áž€áŸ‹",
+ "symbol": "DKK"
+ },
+ "NOK": {
+ "name": "ក្រូណáŸâ€‹áž“áŸážšážœáŸ‰áŸ",
+ "symbol": "NOK"
+ },
+ "MWK": {
+ "name": "ក្វាចា​ម៉ាឡាវី",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "ក្វាចា​សំប៊ី",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "ក្វាន់ហ្សា​អង់ហ្គោឡា",
+ "symbol": "AOA"
+ },
+ "NIO": {
+ "name": "ážážŒáž¼áž”ា​នីការ៉ាហ្គា",
+ "symbol": "NIO"
+ },
+ "PGK": {
+ "name": "គីណា​ប៉ាពូនូហ្គីណáŸ",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "គីប​ឡាវ",
+ "symbol": "LAK"
+ },
+ "MMK": {
+ "name": "គីយ៉ាážâ€‹áž—ូមា",
+ "symbol": "MMK"
+ },
+ "HRK": {
+ "name": "គូណា​ក្រូអាáž",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "គោឌី​ហៃទី",
+ "symbol": "HTG"
+ },
+ "BTN": {
+ "name": "ញូលážáŸ’រឹម​ប៊ូážáž„់",
+ "symbol": "BTN"
+ },
+ "PEN": {
+ "name": "ញូវ៉ូសូល​ប៉áŸážšáž¼",
+ "symbol": "PEN"
+ },
+ "GMD": {
+ "name": "ដាឡាស៊ី​ហ្គំប៊ី",
+ "symbol": "GMD"
+ },
+ "VND": {
+ "name": "ដុង​វៀážážŽáž¶áž˜",
+ "symbol": "â‚«"
+ },
+ "CAD": {
+ "name": "ដុល្លារ​កាណាដា",
+ "symbol": "CA$"
+ },
+ "XCD": {
+ "name": "ដុល្លារ​ការ៉ាប៊ីន​ážáž¶áž„​កើáž",
+ "symbol": "EC$"
+ },
+ "KYD": {
+ "name": "ដុល្លារ​កោះ​កៃម៉ែន",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "ដុល្លារ​កោះ​សូឡូម៉ុង",
+ "symbol": "SBD"
+ },
+ "NAD": {
+ "name": "ដុល្លារ​ណាមីប៊ី",
+ "symbol": "NAD"
+ },
+ "TWD": {
+ "name": "ដុល្លារ​ážáŸƒážœáŸ‰áž¶áž“់",
+ "symbol": "NT$"
+ },
+ "TTD": {
+ "name": "ដុល្លារ​ទ្រីនីដាដ áž“áž·áž„ážáž¼áž”ាហ្គោ",
+ "symbol": "TTD"
+ },
+ "NZD": {
+ "name": "ដុល្លារ​នូវែលសáŸáž¡áž„់",
+ "symbol": "NZ$"
+ },
+ "BBD": {
+ "name": "ដុល្លារ​បាបាដុស",
+ "symbol": "BBD"
+ },
+ "BSD": {
+ "name": "ដុល្លារ​បាហាម៉ា",
+ "symbol": "BSD"
+ },
+ "BMD": {
+ "name": "ដុល្លារ​ប៊ឺមុយដា",
+ "symbol": "BMD"
+ },
+ "BZD": {
+ "name": "ដុល្លារ​បáŸáž›áž¸",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "ដុល្លារ​ប្រុយណáŸ",
+ "symbol": "BND"
+ },
+ "LRD": {
+ "name": "ដុល្លារ​លីប៊ី",
+ "symbol": "LRD"
+ },
+ "SGD": {
+ "name": "ដុល្លារ​​សិង្ហបូរី",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "ដុល្លារ​សូរីណាម",
+ "symbol": "SRD"
+ },
+ "HKD": {
+ "name": "ដុល្លារ​ហុងកុង",
+ "symbol": "HK$"
+ },
+ "GYD": {
+ "name": "ដុល្លារ​ហ្គីយ៉ាន",
+ "symbol": "GYD"
+ },
+ "FJD": {
+ "name": "ដុល្លារ​ហ្វីជី",
+ "symbol": "FJD"
+ },
+ "JMD": {
+ "name": "ដុល្លារ​ហ្សាម៉ាអ៊ីក",
+ "symbol": "JMD"
+ },
+ "USD": {
+ "name": "ដុល្លារ​អាមáŸážšáž·áž€",
+ "symbol": "$"
+ },
+ "AUD": {
+ "name": "ដុល្លារ​អូស្ážáŸ’រាលី",
+ "symbol": "A$"
+ },
+ "AMD": {
+ "name": "ដ្រាំ​អាមáŸáž“ី",
+ "symbol": "AMD"
+ },
+ "KWD": {
+ "name": "ឌីណា​គុយវ៉ែáž",
+ "symbol": "KWD"
+ },
+ "TND": {
+ "name": "ឌីណា​ទុយនីស៊ី",
+ "symbol": "TND"
+ },
+ "BHD": {
+ "name": "ឌីណា​បារ៉ែន",
+ "symbol": "BHD"
+ },
+ "MKD": {
+ "name": "ឌីណា​ម៉ាសáŸážŠáŸ’វាន",
+ "symbol": "MKD"
+ },
+ "LYD": {
+ "name": "ឌីណា​លីប៊ី",
+ "symbol": "LYD"
+ },
+ "RSD": {
+ "name": "ឌីណា​សើប",
+ "symbol": "RSD"
+ },
+ "JOD": {
+ "name": "ឌីណា​ហ្ស៊កដានី",
+ "symbol": "JOD"
+ },
+ "DZD": {
+ "name": "ឌីណា​អាល់ស៊áŸážšáž¸",
+ "symbol": "DZD"
+ },
+ "IQD": {
+ "name": "ឌីណា​អ៊ីរ៉ាក់",
+ "symbol": "IQD"
+ },
+ "STD": {
+ "name": "ឌូប្រា​សៅážáž¼áž˜áŸ‰áŸ និងប្រាំងស៊ីប",
+ "symbol": "STD"
+ },
+ "MAD": {
+ "name": "ឌៀរហាំ​ម៉ារ៉ុក",
+ "symbol": "MAD"
+ },
+ "AED": {
+ "name": "ឌៀរហាំ​អáŸáž˜áž¸ážšáŸ‰áž¶ážáž¢áž¶ážšáŸ‰áž¶áž”់រួម",
+ "symbol": "AED"
+ },
+ "ERN": {
+ "name": "ណាក់ហ្វា​អáŸážšáž¸ážáŸ’ážšáŸ",
+ "symbol": "ERN"
+ },
+ "NGN": {
+ "name": "ណៃរ៉ា​នីហ្សáŸážšáž¸áž™áŸ‰áž¶",
+ "symbol": "NGN"
+ },
+ "KZT": {
+ "name": "ážáž„់ហ្គី​កាហ្សាក់ស្ážáž¶áž“",
+ "symbol": "KZT"
+ },
+ "BDT": {
+ "name": "ážáž¶áž€áž¶â€‹áž”ង់ក្លាដែស",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "ážáž¶áž¡áž¶â€‹ážŸáž¶áž˜áŸážš",
+ "symbol": "WST"
+ },
+ "MNT": {
+ "name": "ទូរីក​ម៉ុងហ្គោលី",
+ "symbol": "MNT"
+ },
+ "ETB": {
+ "name": "ប៊áŸážšâ€‹áž¢áŸážáŸ’យូពី",
+ "symbol": "ETB"
+ },
+ "THB": {
+ "name": "បាážâ€‹ážáŸƒ",
+ "symbol": "฿"
+ },
+ "MOP": {
+ "name": "ប៉ាážáž¶áž€áž¶â€‹áž˜áŸ‰áž¶áž€áž¶ážœ",
+ "symbol": "MOP"
+ },
+ "PAB": {
+ "name": "បាល់ប៉ៅ​ប៉ាណាម៉ា",
+ "symbol": "PAB"
+ },
+ "TOP": {
+ "name": "ប៉ាអង់កា​ážáž»áž„ហ្គា",
+ "symbol": "TOP"
+ },
+ "MXN": {
+ "name": "ប៉ីហ្សូ​ម៉ិកស៉ិក",
+ "symbol": "MX$"
+ },
+ "COP": {
+ "name": "ប៉ឺហ្សូ​កូឡុំប៊ី",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "ប៉ឺហ្សូ​គុយបា",
+ "symbol": "CUP"
+ },
+ "DOP": {
+ "name": "ប៉ឺហ្សូ​ដូមីនីក",
+ "symbol": "DOP"
+ },
+ "CLP": {
+ "name": "ប៉ឺហ្សូ​ស៊ីលី",
+ "symbol": "CLP"
+ },
+ "PHP": {
+ "name": "ប៉ឺហ្សូ​ហ្វីលីពីន",
+ "symbol": "PHP"
+ },
+ "CUC": {
+ "name": "ប៉ឺហ្សូ​អាច​បម្លែង​បាន​គុយបា",
+ "symbol": "CUC"
+ },
+ "ARS": {
+ "name": "ប៉ឺហ្សូ​អាហ្សង់ទីន",
+ "symbol": "ARS"
+ },
+ "UYU": {
+ "name": "ប៉ឺហ្សូអ៊ុយរូហ្គាយ",
+ "symbol": "UYU"
+ },
+ "VEF": {
+ "name": "ប៊ូលីវ៉ា​វ៉áŸážŽáŸážŸáŸŠáž»áž™áž¢áŸáž¡áž¶",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "បូលីវីណូ​បូលីវី",
+ "symbol": "BOB"
+ },
+ "FKP": {
+ "name": "ផោន​កោះ​ហ្វក់ឡែន",
+ "symbol": "FKP"
+ },
+ "LBP": {
+ "name": "ផោន​លីបង់",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "ផោន​ស៊ីរី",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "ផោន​ស៊ូដង់",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "ផោន​ស៊ូដង់​ážáž¶áž„​ážáŸ’បូង",
+ "symbol": "SSP"
+ },
+ "SHP": {
+ "name": "ផោន​សាំងហáŸáž¡áŸážŽáž¶",
+ "symbol": "SHP"
+ },
+ "GBP": {
+ "name": "ផោនស្ទែរលិញ​ចក្រភព​អង់គ្លáŸážŸ",
+ "symbol": "£"
+ },
+ "GIP": {
+ "name": "ផោន​ហ្ស៊ីប្រាល់ážáž¶",
+ "symbol": "GIP"
+ },
+ "EGP": {
+ "name": "ផោន​​អáŸáž áŸ’សីប",
+ "symbol": "EGP"
+ },
+ "BWP": {
+ "name": "ពូឡា​បុážážŸáŸ’វាណា",
+ "symbol": "BWP"
+ },
+ "BAM": {
+ "name": "ម៉ាក​អាច​បម្លែង​បាន​បូស្នី",
+ "symbol": "BAM"
+ },
+ "TMT": {
+ "name": "ម៉ាណាážâ€‹ážáž½áž€áž˜áŸ‰áŸáž“ីស្ážáž¶áž“",
+ "symbol": "TMT"
+ },
+ "AZN": {
+ "name": "ម៉ាណាážâ€‹áž¢áž¶ážŸáŸŠáŸ‚បៃហ្សង់",
+ "symbol": "AZN"
+ },
+ "MZN": {
+ "name": "មីទីážáž›â€‹áž˜áŸ‰áž¼ážŸáŸ†áž”៊ិក",
+ "symbol": "MZN"
+ },
+ "CNY": {
+ "name": "យ៉ន់​ចិន",
+ "symbol": "CNÂ¥"
+ },
+ "JPY": {
+ "name": "áž™áŸáž“​ជប៉ុន",
+ "symbol": "JPÂ¥"
+ },
+ "ZAR": {
+ "name": "រ៉ង់​អាព្រិក​ážáž¶áž„​ážáŸ’បូង",
+ "symbol": "ZAR"
+ },
+ "MYR": {
+ "name": "រីងហ្គីážâ€‹áž˜áŸ‰áž¶áž¡áŸážŸáŸŠáž¸",
+ "symbol": "MYR"
+ },
+ "SAR": {
+ "name": "រីយ៉ាល​អារ៉ាប៊ីសាអូឌីáž",
+ "symbol": "SAR"
+ },
+ "BYR": {
+ "name": "រ៉ូបល​បáŸáž¡áž¶ážšáž»ážŸ",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "រ៉ូបល​រុស្ស៊ី",
+ "symbol": "RUB"
+ },
+ "NPR": {
+ "name": "រ៉ូពី​នáŸáž”៉ាល់",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "រ៉ូពី​ប៉ាគីស្ážáž¶áž“",
+ "symbol": "PKR"
+ },
+ "MUR": {
+ "name": "រ៉ូពី​ម៉ូរីážáž¶áž“ី",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "រ៉ូពី​សីស្ហែល",
+ "symbol": "SCR"
+ },
+ "LKR": {
+ "name": "រ៉ូពី​ស្រីលង្ការ",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "រ៉ូពី​ឥណ្ឌា",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "រ៉ូពីឥណ្ឌូណáŸážŸáŸŠáž¸",
+ "symbol": "IDR"
+ },
+ "MVR": {
+ "name": "រ៉ូហ្វីយ៉ា​ម៉ាល់ឌីវ",
+ "symbol": "MVR"
+ },
+ "KHR": {
+ "name": "រៀល​កម្ពុជា",
+ "symbol": "៛"
+ },
+ "QAR": {
+ "name": "រៀល​កាážáž¶",
+ "symbol": "QAR"
+ },
+ "BRL": {
+ "name": "រៀល​ប្រáŸážŸáŸŠáž¸áž›",
+ "symbol": "R$"
+ },
+ "YER": {
+ "name": "រៀល​យáŸáž˜áŸ‰áŸ‚áž“",
+ "symbol": "YER"
+ },
+ "OMR": {
+ "name": "រៀល​រូម៉ានី",
+ "symbol": "OMR"
+ },
+ "IRR": {
+ "name": "រៀល​អ៊ីរ៉ង់",
+ "symbol": "IRR"
+ },
+ "ALL": {
+ "name": "លិក​អាល់បានី",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "លិមពីរ៉ា​ហុងឌូរ៉ាស",
+ "symbol": "HNL"
+ },
+ "LTL": {
+ "name": "លីážáž¶â€‹áž›áž¸áž‘ុយអានី",
+ "symbol": "LTL"
+ },
+ "TRY": {
+ "name": "លីរ៉ា​ទួគី",
+ "symbol": "TRY"
+ },
+ "BGN": {
+ "name": "លីវ​ប៊ុលហ្គារី",
+ "symbol": "BGN"
+ },
+ "SZL": {
+ "name": "លីឡាងហ្គីនី​ស្វាស៊ីឡង់",
+ "symbol": "SZL"
+ },
+ "SLL": {
+ "name": "លីអ៊ុន​សៀរ៉ាឡáŸáž¢áž¼áž“",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "លូ​ម៉ុលដាវី",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "លូ​រូម៉ានី",
+ "symbol": "RON"
+ },
+ "VUV": {
+ "name": "វ៉ាទូ​វ៉ានូទូ",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "វូន​កូរ៉áŸâ€‹ážáž¶áž„​ជើង",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "វូន​កូរ៉áŸâ€‹ážáž¶áž„​ážáŸ’បូង",
+ "symbol": "â‚©"
+ },
+ "GHS": {
+ "name": "ស៊ីឌី​ហ្គាណា",
+ "symbol": "GHS"
+ },
+ "KES": {
+ "name": "ស៊ីលិញ​កáŸáž“យ៉ា",
+ "symbol": "KES"
+ },
+ "TZS": {
+ "name": "ស៊ីលិញ​ážáž„់សានី",
+ "symbol": "TZS"
+ },
+ "SOS": {
+ "name": "ស៊ីលិញ​សូម៉ាលី",
+ "symbol": "SOS"
+ },
+ "UGX": {
+ "name": "ស៊ីលិញ​អ៊ូហ្គង់ដា",
+ "symbol": "UGX"
+ },
+ "KGS": {
+ "name": "សុម​កៀហ្ស៊ីស៊ីស្ážáž¶áž“",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "សុម​អ៊ូសបáŸáž‚ីស្ážáž¶áž“",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "សូមុនី​ážáž¶áž áŸ’ស៊ីគីស្ážáž¶áž“",
+ "symbol": "TJS"
+ },
+ "ILS": {
+ "name": "ស្ស៊ីហ្គែល​អ៊ីស្រាអែល",
+ "symbol": "₪"
+ },
+ "UAH": {
+ "name": "ហ៊ូនីយ៉ា​អ៊ុយក្រែន",
+ "symbol": "UAH"
+ },
+ "ANG": {
+ "name": "ហ្គីឌិន​ហុល្លង់​អង់ទីលៀន",
+ "symbol": "ANG"
+ },
+ "GTQ": {
+ "name": "ហ្គីស្សាល​ក្វាážáŸáž˜áŸ‰áž¶áž¡áž¶",
+ "symbol": "GTQ"
+ },
+ "PYG": {
+ "name": "ហ្គូរីនី​ប៉ារ៉ាហ្គាយ",
+ "symbol": "PYG"
+ },
+ "HUF": {
+ "name": "ហ្វូរីន​ហុងគ្រី",
+ "symbol": "HUF"
+ },
+ "XOF": {
+ "name": "ហ្វ្រង់ BCEAO CFA",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "ហ្វ្រង់ BEAC CFA",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "ហ្វ្រង់ CFP",
+ "symbol": "CFPF"
+ },
+ "CHF": {
+ "name": "ហ្វ្រង់ ស្វីស",
+ "symbol": "CHF"
+ },
+ "CDF": {
+ "name": "ហ្វ្រង់​កុងហ្គោ",
+ "symbol": "CDF"
+ },
+ "KMF": {
+ "name": "ហ្វ្រង់​កូមáŸážš",
+ "symbol": "KMF"
+ },
+ "DJF": {
+ "name": "ហ្វ្រង់​ជីប៊ូទី",
+ "symbol": "DJF"
+ },
+ "BIF": {
+ "name": "ហ្វ្រង់​ប៊ូរុនឌី",
+ "symbol": "BIF"
+ },
+ "RWF": {
+ "name": "ហ្វ្រង់​រវ៉ាន់ដា",
+ "symbol": "RWF"
+ },
+ "GNF": {
+ "name": "ហ្វ្រង់​ហ្គីណáŸ",
+ "symbol": "GNF"
+ },
+ "AWG": {
+ "name": "ហ្វ្រáŸážšážšáž·áž‰â€‹áž¢áž¶ážšáŸ‰áž¼áž”ា",
+ "symbol": "AWG"
+ },
+ "PLN": {
+ "name": "ហ្សូទី​ប៉ូឡូញ",
+ "symbol": "PLN"
+ },
+ "GEL": {
+ "name": "ឡារី​​ហ្សកហ្ស៊ី",
+ "symbol": "GEL"
+ },
+ "MGA": {
+ "name": "អារៀរី​ម៉ាឡាហ្គាស៊ី",
+ "symbol": "MGA"
+ },
+ "AFN": {
+ "name": "អាហ្វហ្គានី​អាហ្វហ្គានីស្ážáž¶áž“",
+ "symbol": "AFN"
+ },
+ "CVE": {
+ "name": "អ៊ីស្កូឌូ​កាប់វែរ",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "អឺរ៉ូ",
+ "symbol": "€"
+ },
+ "MRO": {
+ "name": "អ៊ូហ្គីយ៉ា​ម៉ូរីážáž¶áž“ី",
+ "symbol": "MRO"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/kn.json b/library/intl/resources/currency/kn.json
new file mode 100644
index 000000000..60a4577be
--- /dev/null
+++ b/library/intl/resources/currency/kn.json
@@ -0,0 +1,634 @@
+{
+ "XOF": {
+ "name": "CFA ಫà³à²°à²¾à²‚ಕೠBCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA ಫà³à²°à²¾à²‚ಕೠBEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP ಫà³à²°à²¾à²‚ಕà³",
+ "symbol": "CFPF"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "AOA": {
+ "name": "ಅಂಗೋಲಾದ ಕà³à²µà²¾à²¨à³à²à²¾",
+ "symbol": "AOA"
+ },
+ "AZN": {
+ "name": "ಅà²à²°à³â€Œà²¬à³ˆà²œà²¾à²¨à²¿ ಮನಾತà³",
+ "symbol": "AZN"
+ },
+ "AFN": {
+ "name": "ಅಫà³â€Œà²˜à²¨à³ ಅಫಗಾನಿ",
+ "symbol": "AFN"
+ },
+ "USD": {
+ "name": "ಅಮೆರಿಕದ ಡಾಲರà³â€Œ",
+ "symbol": "$"
+ },
+ "AWG": {
+ "name": "ಅರà³à²¬à²¨à³ ಫà³à²²à³Šà²°à³€à²¨à³â€Œâ€Œ",
+ "symbol": "AWG"
+ },
+ "ARS": {
+ "name": "ಅರà³à²œà³†à²‚ಟಿನಾ ಪೆಸೊ",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "ಅರà³à²®à³†à²¨à²¿à²¯à²¨à³ ಡà³à²°à²¾à²®à³",
+ "symbol": "AMD"
+ },
+ "DZD": {
+ "name": "ಅಲà³à²—ೇರಿಯನೠದಿನಾರà³",
+ "symbol": "DZD"
+ },
+ "ALL": {
+ "name": "ಅಲà³â€Œà²¬à³‡à²¨à²¿à²¯à²¨à³ ಲೆಕà³",
+ "symbol": "ALL"
+ },
+ "AUD": {
+ "name": "ಆಸà³à²Ÿà³à²°à³‡à²²à²¿à²¯à²¨à³ ಡಾಲರà³â€Œ",
+ "symbol": "A$"
+ },
+ "IDR": {
+ "name": "ಇಂಡೊನೇಷà³à²¯à²¾ ರà³à²ªà³ˆ",
+ "symbol": "IDR"
+ },
+ "ETB": {
+ "name": "ಇಥಿಯೋಪಿಯನೠಬಿರà³",
+ "symbol": "ETB"
+ },
+ "IQD": {
+ "name": "ಇರಾಖಿಯನೠದಿನಾರà³",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "ಇರಾನಿಯನೠರಿಯಲà³",
+ "symbol": "IRR"
+ },
+ "ILS": {
+ "name": "ಇಸà³à²°à³‡à²²à²¿ ನà³à²¯à³‚ ಶೇಖಲà³",
+ "symbol": "₪"
+ },
+ "EGP": {
+ "name": "ಈಜಿಪà³à²·à²¿à²¯à²¨à³ ಪೌಂಡà³â€",
+ "symbol": "EGP"
+ },
+ "UAH": {
+ "name": "ಉಕà³à²°à³‡à²¨à²¿à²¯à²¨à³ ಹà³à²°à²¿à²µà³à²¨à³€à²¯",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "ಉಗಾಂಡನೠಶಿಲà³à²²à²¿à²‚ಗà³",
+ "symbol": "UGX"
+ },
+ "UZS": {
+ "name": "ಉಜà³à²¬à³‡à²•à²¿à²¸à³à²¤à²¾à²¨à³ ಸೊಮà³",
+ "symbol": "UZS"
+ },
+ "KPW": {
+ "name": "ಉತà³à²¤à²° ಕೊರಿಯನೠವೋನà³",
+ "symbol": "KPW"
+ },
+ "UYU": {
+ "name": "ಉರà³à²—à³à²µà³†à²¯ ಪೆಸೊ",
+ "symbol": "UYU"
+ },
+ "ERN": {
+ "name": "ಎರಿತà³à²°à²¿à²¯à²¨à³ ನಕà³à²«à²¾",
+ "symbol": "ERN"
+ },
+ "ISK": {
+ "name": "à²à²¸à³â€Œà²²à³à²¯à²¾à²‚ಡಿಕೠಕà³à²°à³‹à²¨à²¾",
+ "symbol": "ISK"
+ },
+ "OMR": {
+ "name": "ಒಮಾನಿ ರಿಯಲà³",
+ "symbol": "OMR"
+ },
+ "KZT": {
+ "name": "ಕಜಾಕಿಸà³à²¤à²¾à²¨à²¿ ತೆಂಗೆ",
+ "symbol": "KZT"
+ },
+ "CDF": {
+ "name": "ಕಾಂಗೋಲೀಸೠಫà³à²°à²¾à²‚ಕà³",
+ "symbol": "CDF"
+ },
+ "KHR": {
+ "name": "ಕಾಂಬೋಡಿಯನೠರಿಯಲà³",
+ "symbol": "KHR"
+ },
+ "KGS": {
+ "name": "ಕಿರà³à²—ಿಸà³à²¤à²¾à²¨à²¿ ಸೋಮà³",
+ "symbol": "KGS"
+ },
+ "KWD": {
+ "name": "ಕà³à²µà³ˆà²¤à³€ ದಿನಾರà³",
+ "symbol": "KWD"
+ },
+ "CAD": {
+ "name": "ಕೆನಡಾದ ಡಾಲರà³",
+ "symbol": "CA$"
+ },
+ "KES": {
+ "name": "ಕೆನà³à²¯à²¨à³ ಶಿಲà³à²²à²¿à²‚ಗà³",
+ "symbol": "KES"
+ },
+ "KYD": {
+ "name": "ಕೆಮà³à²¯à²¾à²¨à³â€Œ à²à²²à³à²¯à²¾à²‚ಡà³â€Œà²¨ ಡಾಲರà³â€Œ",
+ "symbol": "KYD"
+ },
+ "CVE": {
+ "name": "ಕೇಪೠವರà³à²¡à²¿à²¨à³ ಎಸà³â€Œà²•à³‚ಡೊ",
+ "symbol": "CVE"
+ },
+ "KMF": {
+ "name": "ಕೊಮೊರಿಯನೠಫà³à²°à²¾à²‚ಕà³",
+ "symbol": "KMF"
+ },
+ "COP": {
+ "name": "ಕೊಲೊಂಬಿಯೋದ ಪೆಸೊ",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "ಕೋಸà³à²Ÿ ರಿಕನೠಕೊಲನà³",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "ಕà³à²¯à³à²¬à²¾à²¦ ಪರಿವರà³à²¤à²¨à³€à²¯ ಪೆಸೊ",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "ಕà³à²¯à³‚ಬಾದ ಪೆಸೊ",
+ "symbol": "CUP"
+ },
+ "HRK": {
+ "name": "ಕà³à²°à³Šà²¯à³†à²·à³à²¯à²¾à²¦ ಕೂನಾ",
+ "symbol": "HRK"
+ },
+ "QAR": {
+ "name": "ಖತಾರಿ ರಿಯಲà³",
+ "symbol": "QAR"
+ },
+ "GNF": {
+ "name": "ಗಿನಿಯನೠಫà³à²°à²¾à²‚ಕà³",
+ "symbol": "GNF"
+ },
+ "GIP": {
+ "name": "ಗಿಬà³à²°à²¾à²²à³à²Ÿà²°à³ ಪೌಂಡà³",
+ "symbol": "GIP"
+ },
+ "GYD": {
+ "name": "ಗà³à²¯à²¾à²¨à³€à²¸à³â€Œ ಡಾಲರà³â€Œ",
+ "symbol": "GYD"
+ },
+ "GMD": {
+ "name": "ಗà³à²¯à²¾à²‚ಬಿಯಾದ ದಲಾಸಿ",
+ "symbol": "GMD"
+ },
+ "GTQ": {
+ "name": "ಗà³à²µà²¾à²Ÿà³†à²®à²¾à²²à²¾à²¦ ಕà³à²¯à²¿à²Ÿà³à²¸à²²à³â€Œâ€Œ",
+ "symbol": "GTQ"
+ },
+ "GHS": {
+ "name": "ಘಾನಾದ ಸೆದಿ",
+ "symbol": "GHS"
+ },
+ "CLP": {
+ "name": "ಚಿಲಿಯ ಪೆಸೊ",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "ಚೈನೀಸೠಯà³à²µà²¾à²¨à³",
+ "symbol": "CNÂ¥"
+ },
+ "JPY": {
+ "name": "ಜಪಾನೀಸೠಯೆನà³",
+ "symbol": "JPÂ¥"
+ },
+ "JMD": {
+ "name": "ಜಮೈಕನೠಡಾಲರà³",
+ "symbol": "JMD"
+ },
+ "ZMW": {
+ "name": "ಜಾಂಬಿಯಾ ಕà³à²µà²¾à²š",
+ "symbol": "ZMW"
+ },
+ "GEL": {
+ "name": "ಜಾರà³à²œà²¿à²¯à²¾à²¦ ಲಾರಿ",
+ "symbol": "GEL"
+ },
+ "DJF": {
+ "name": "ಜಿಬೊಟಿಯನೠಫà³à²°à²¾à²‚ಕà³",
+ "symbol": "DJF"
+ },
+ "JOD": {
+ "name": "ಜೋರà³à²¡à²¾à²¨à²¿à²¯à²¨à³ ದಿನಾರà³",
+ "symbol": "JOD"
+ },
+ "CZK": {
+ "name": "à²à³†à²•à³ ಗಣರಾಜà³à²¯ ಕೊರೂನ",
+ "symbol": "CZK"
+ },
+ "TRY": {
+ "name": "ಟರà³à²•à²¿à²¶à³ ಲಿರಾ",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "ಟರà³à²•à³â€à²®à³†à²¨à²¿à²¸à³à²¤à²¾à²¨à³ ಮನಾತà³",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "ಟೊಂಗಾ ಪಾಂಗ",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "ಟà³à²°à²¿à²¨à²¿à²¡à²¾à²¡à³ ಮತà³à²¤à³ ಟೊಬಾಗೊ ಡಾಲರà³",
+ "symbol": "TTD"
+ },
+ "DOP": {
+ "name": "ಡೊಮಿನಿಕನೠಪೆಸೊ",
+ "symbol": "DOP"
+ },
+ "DKK": {
+ "name": "ಡà³à²¯à²¾à²¨à²¿à²¶à³ ಕà³à²°à³‹à²¨à³",
+ "symbol": "DKK"
+ },
+ "TJS": {
+ "name": "ತಜಕಿಸà³à²¤à²¾à²¨à²¿ ಸೊಮೋನಿ",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "ತಾನà³â€Œà²œà³‡à²¨à²¿à²¯à²¨à³ ಶಿಲà³à²²à²¿à²‚ಗà³",
+ "symbol": "TZS"
+ },
+ "TND": {
+ "name": "ತà³à²¨à³€à²¸à²¿à²¯à²¨à³ ದಿನಾರà³",
+ "symbol": "TND"
+ },
+ "THB": {
+ "name": "ಥಾಯೠಬಹà³à²¤à³",
+ "symbol": "฿"
+ },
+ "ZAR": {
+ "name": "ದಕà³à²·à²¿à²£ ಆಫà³à²°à²¿à²•à²¨à³ ರಾಂಡà³",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "ದಕà³à²·à²¿à²£ ಕೊರಿಯನೠವೊನà³",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "ದಕà³à²·à²¿à²£ ಸೂಡಾನೀಸೠಪೌಂಡà³â€",
+ "symbol": "SSP"
+ },
+ "NAD": {
+ "name": "ನಮೀಬಿಯನೠಡಾಲರà³",
+ "symbol": "NAD"
+ },
+ "NOK": {
+ "name": "ನಾರà³à²µà³‡à²¯ ಕà³à²°à³‹à²¨à³",
+ "symbol": "NOK"
+ },
+ "NIO": {
+ "name": "ನಿಕಾರಗà³à²µà²¾à²¦ ಕರà³à²¦à³Šà²¬à²¾",
+ "symbol": "NIO"
+ },
+ "ANG": {
+ "name": "ನೆದರà³à²²à³†à²‚ಡà³à²¸à³ ಆಂಟಿಲಿಯನೠಗಿಲà³à²¡à²°à³",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "ನೇಪಾಳದ ರà³à²ªà³€",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "ನೈಜೀರಿಯಾದ ನೇರಾ",
+ "symbol": "NGN"
+ },
+ "TWD": {
+ "name": "ನà³à²¯à³‚ ತೈವಾನೠಡಾಲರà³",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "ನà³à²¯à³‚ಜಿಲà³à²¯à²¾à²‚ಡೠಡಾಲರà³",
+ "symbol": "NZ$"
+ },
+ "PAB": {
+ "name": "ಪನಾಮಾನಿಯನೠಬಲà³à²¬à³‹à²µà²¾",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "ಪಪà³à²µà²¾ ನà³à²¯à³‚ ಗಿನಿಯನೠಕಿನಾ",
+ "symbol": "PGK"
+ },
+ "PKR": {
+ "name": "ಪಾಕಿಸà³à²¤à²¾à²¨à²¦ ರà³à²ªà³€",
+ "symbol": "PKR"
+ },
+ "XCD": {
+ "name": "ಪೂರà³à²µ ಕೆರೀಬಿಯನೠಡಾಲರà³",
+ "symbol": "EC$"
+ },
+ "PYG": {
+ "name": "ಪೆರà³à²—à³à²µà³‡à²¯ ಗà³à²µà²¾à²°à²¨à³€",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "ಪೆರà³à²µà²¿à²¯à²¨à³ ನà³à²¯à³†à²µà³Š ಸೊಲà³",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "ಪೊಲಿಶೠà²à³à²²à³‹à²Ÿà²¿",
+ "symbol": "PLN"
+ },
+ "FKP": {
+ "name": "ಫಾಲà³à²•à³â€Œà²²à³à²¯à²¾à²‚ಡೠದà³à²µà³€à²ªà²—ಳ ಪೌಂಡà³",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "ಫಿಜಿಯನೠಡಾಲರà³",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "ಫಿಲಿಪà³à²ªà³ˆà²¨à³ ಪೆಸೊ",
+ "symbol": "PHP"
+ },
+ "BBD": {
+ "name": "ಬರà³à²¬à²¾à²¡à²¿à²¯à²¨à³ ಡಾಲರà³",
+ "symbol": "BBD"
+ },
+ "BMD": {
+ "name": "ಬರà³à²®à³à²¡à²¨à³ ಡಾಲರà³",
+ "symbol": "BMD"
+ },
+ "BGN": {
+ "name": "ಬಲà³à²—ೇರಿಯನೠಲೆವà³",
+ "symbol": "BGN"
+ },
+ "BSD": {
+ "name": "ಬಹಾಮಿಯನೠಡಾಲರà³",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "ಬಹà³â€Œâ€Œà²°à³ˆà²¨à²¿ ದಿನಾರà³",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "ಬಾಂಗà³à²²à²¾à²¦à³‡à²¶à²¦ ಟಾಕಾ",
+ "symbol": "BDT"
+ },
+ "BIF": {
+ "name": "ಬà³à²°à³à²‚ದಿಯನೠಫà³à²°à²¾à²‚ಕà³",
+ "symbol": "BIF"
+ },
+ "BYR": {
+ "name": "ಬೆಲಾರà³à²¸à²¿à²¯à²¨à³ ರೂಬಲà³",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "ಬೆಲೀಜೠಡಾಲರà³",
+ "symbol": "BZD"
+ },
+ "BOB": {
+ "name": "ಬೊಲಿವಿಯಾದ ಬೊಲಿವಿಯಾನೊ",
+ "symbol": "BOB"
+ },
+ "BWP": {
+ "name": "ಬೋಟà³à²¸à³â€Œà²µà²¾à²¨à²¨à³ ಪà³à²²à²¾",
+ "symbol": "BWP"
+ },
+ "BAM": {
+ "name": "ಬೋಸà³à²¨à²¿à²¯à²¾-ಹರà³à²œà³â€Œà²—ೋವಿನ ಪರಿವರà³à²¤à²¨à³€à²¯ ಗà³à²°à³à²¤à³",
+ "symbol": "BAM"
+ },
+ "GBP": {
+ "name": "ಬà³à²°à²¿à²Ÿà³€à²·à³ ಪೌಂಡೠಸà³à²Ÿà³†à²°à³à²²à²¿à²‚ಗà³",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "ಬà³à²°à³‚ನಿ ಡಾಲರà³",
+ "symbol": "BND"
+ },
+ "BRL": {
+ "name": "ಬà³à²°à³†à²œà²¿à²²à²¿à²¯à²¨à³â€Œ ರಿಯಲà³",
+ "symbol": "R$"
+ },
+ "INR": {
+ "name": "ಭಾರತೀಯ ರà³à²ªà²¾à²¯à²¿",
+ "symbol": "₹"
+ },
+ "BTN": {
+ "name": "ಭೂತಾನೀಸೠನà³à²²à³à²¤à²°à²®à³",
+ "symbol": "BTN"
+ },
+ "MNT": {
+ "name": "ಮಂಗೋಲಿಯಾದ ತà³à²—à³à²°à²¿à²•à³â€Œâ€Œ",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "ಮಕà³à²¯à³‚ದ ಪಟಕಾ",
+ "symbol": "MOP"
+ },
+ "MGA": {
+ "name": "ಮಲಗಾಸಿ ಅರಿಯಾರಿ",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "ಮಲಾವಿಯ ಕà³à²µà²¾à²š",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "ಮಲೇಶಿಯನೠರಿಂಗಿಟà³à²Ÿà³",
+ "symbol": "MYR"
+ },
+ "MDL": {
+ "name": "ಮಲà³à²¦à³‹à²µà²¾à²¦ ಲೆವೂ",
+ "symbol": "MDL"
+ },
+ "MUR": {
+ "name": "ಮಾರಿಷಿಯನೠರà³à²ªà²¿",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "ಮಾಲà³à²¡à³€à²µà²¿à²¯à²¨à³ ರà³à²«à²¿à²¯à²¾",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "ಮೆಕà³à²¸à²¿à²•à³Šà²¦ ಪೆಸೊ",
+ "symbol": "MX$"
+ },
+ "MKD": {
+ "name": "ಮೆಸಡೋನಿಯನೠದಿನಾರà³",
+ "symbol": "MKD"
+ },
+ "MZN": {
+ "name": "ಮೊà²à²¾à²‚ಬಿಕನೠಮೆಟಿಕಲà³",
+ "symbol": "MZN"
+ },
+ "MAD": {
+ "name": "ಮೊರೊಕನೠದಿರà³â€Œà²¹à²®à³",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "ಮೌರೀಶಿಯನಿಯನೠಒಗಿಯ",
+ "symbol": "MRO"
+ },
+ "MMK": {
+ "name": "ಮà³à²¯à²¾à²¨à³à²®à²¾à²°à³ ಕà³à²¯à²¾à²Ÿà³",
+ "symbol": "MMK"
+ },
+ "EUR": {
+ "name": "ಯೂರೊ",
+ "symbol": "€"
+ },
+ "YER": {
+ "name": "ಯೆಮೆನಿ ರಿಯಲà³",
+ "symbol": "YER"
+ },
+ "RUB": {
+ "name": "ರಶಿಯನೠರೂಬಲà³",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "ರà³à²µà²¾à²‚ಡನೠಫà³à²°à²¾à²‚ಕà³",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "ರೊಮೇನಿಯನೠಲೆವà³",
+ "symbol": "RON"
+ },
+ "LTL": {
+ "name": "ಲಿಥà³à²¨à²¿à²¯à²¨à³â€Œ ಲಿತಾಸà³â€Œ",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "ಲಿಬಿಯಾದ ದಿನಾರà³â€Œ",
+ "symbol": "LYD"
+ },
+ "LRD": {
+ "name": "ಲಿಬೇರಿಯನೠಡಾಲರà³",
+ "symbol": "LRD"
+ },
+ "LBP": {
+ "name": "ಲೆಬೆನೀಸೠಪೌಂಡà³",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "ಲೆಸೊತೊ ಲೊತಿ",
+ "symbol": "LSL"
+ },
+ "LAK": {
+ "name": "ಲೋಟಿಯನೠಕಿಪà³",
+ "symbol": "LAK"
+ },
+ "VUV": {
+ "name": "ವನೂತೠವತà³",
+ "symbol": "VUV"
+ },
+ "VND": {
+ "name": "ವಿಯೆಟà³à²¨à²¾à²®à³€à²¸à³ ಡಾಂಗà³",
+ "symbol": "â‚«"
+ },
+ "VEF": {
+ "name": "ವೆನಿಜà³à²²à²¿à²¯à²¨à³ ಬೊಲಿವರà³",
+ "symbol": "VEF"
+ },
+ "LKR": {
+ "name": "ಶà³à²°à³€à²²à²‚ಕಾದ ರà³à²ªà³€",
+ "symbol": "LKR"
+ },
+ "AED": {
+ "name": "ಸಂಯà³à²•à³à²¤ ಅರಬà³â€Œ ಎಮಿರೇಟà³â€Œâ€Œà²—ಳ ದಿರಾಮà³â€Œâ€Œ",
+ "symbol": "AED"
+ },
+ "WST": {
+ "name": "ಸಮೋನೠತಲಾ",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "ಸಾವೊ ಟೋಮೠಮತà³à²¤à³ ಪà³à²°à²¿à²¨à³à²¸à²¿à²ªà³ ದೊಬà³à²°à²¾",
+ "symbol": "STD"
+ },
+ "SGD": {
+ "name": "ಸಿಂಗಾಪà³à²°à³ ಡಾಲರà³â€Œ",
+ "symbol": "SGD"
+ },
+ "SLL": {
+ "name": "ಸಿಯೆರಾ ಲಿಯೋನಿಯನೠಲಿಯೋನà³",
+ "symbol": "SLL"
+ },
+ "SYP": {
+ "name": "ಸಿರಿಯನೠಪೌಂಡà³",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "ಸà³à²¡à²¾à²¨à³€à²¸à³ ಪೌಂಡà³",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "ಸà³à²°à²¿à²¨à²¾à²®à³€à²¸à³ ಡಾಲರà³",
+ "symbol": "SRD"
+ },
+ "SCR": {
+ "name": "ಸೆಚೊಲಿಯೊಸೠರà³à²ªà²¿",
+ "symbol": "SCR"
+ },
+ "RSD": {
+ "name": "ಸೆರà³à²¬à²¿à²¯à²¨à³ ದಿನಾರà³",
+ "symbol": "RSD"
+ },
+ "SHP": {
+ "name": "ಸೇಂಟೠಹೆಲೇನಾ ಪೌಂಡà³",
+ "symbol": "SHP"
+ },
+ "SOS": {
+ "name": "ಸೊಮಾಲಿ ಶಿಲà³à²²à²¿à²‚ಗà³",
+ "symbol": "SOS"
+ },
+ "SBD": {
+ "name": "ಸೊಲೊಮನೠದà³à²µà³€à²ªà²—ಳ ಡಾಲರà³",
+ "symbol": "SBD"
+ },
+ "SAR": {
+ "name": "ಸೌದಿ ರಿಯಾಲà³",
+ "symbol": "SAR"
+ },
+ "SZL": {
+ "name": "ಸà³à²µà²¾à²œà²¿ ಲಿಲಂಗೆನಿ",
+ "symbol": "SZL"
+ },
+ "CHF": {
+ "name": "ಸà³à²µà²¿à²¸à³ ಫà³à²°à²¾à²‚ಕà³",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "ಸà³à²µà³€à²¡à²¿à²·à³ ಕà³à²°à³‹à²¨à²¾",
+ "symbol": "SEK"
+ },
+ "HUF": {
+ "name": "ಹಂಗೇರಿಯನೠಫೋರಿಂಟà³",
+ "symbol": "HUF"
+ },
+ "HKD": {
+ "name": "ಹಾಂಗೠಕಾಂಗೠಡಾಲರà³",
+ "symbol": "HK$"
+ },
+ "HTG": {
+ "name": "ಹೈಟಿಯ ಗೋರà³à²¦à³†",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "ಹೊಂಡà³à²°à²¾à²¨à³â€Œ ಲೆಂಪಿರಾ",
+ "symbol": "HNL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ko.json b/library/intl/resources/currency/ko.json
new file mode 100644
index 000000000..82409da16
--- /dev/null
+++ b/library/intl/resources/currency/ko.json
@@ -0,0 +1,634 @@
+{
+ "XOF": {
+ "name": "CFA 프랑 BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA 프랑 BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP 프랑",
+ "symbol": "CFPF"
+ },
+ "GHS": {
+ "name": "가나 시디",
+ "symbol": "GHS"
+ },
+ "GYD": {
+ "name": "ê°€ì´ì•„나 달러",
+ "symbol": "GYD"
+ },
+ "GMD": {
+ "name": "ê°ë¹„ì•„ 달ë¼ì‹œ",
+ "symbol": "GMD"
+ },
+ "GTQ": {
+ "name": "과테ë§ë¼ 케트살",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "기니 프랑",
+ "symbol": "GNF"
+ },
+ "NAD": {
+ "name": "나미비아 달러",
+ "symbol": "NAD"
+ },
+ "SSP": {
+ "name": "남수단 파운드",
+ "symbol": "SSP"
+ },
+ "ZAR": {
+ "name": "남아프리카 랜드",
+ "symbol": "ZAR"
+ },
+ "ANG": {
+ "name": "네ëœëž€ë“œë ¹ 안틸레스 길ë”",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "네팔 루피",
+ "symbol": "NPR"
+ },
+ "NOK": {
+ "name": "ë…¸ë¥´ì›¨ì´ í¬ë¡œë„¤",
+ "symbol": "NOK"
+ },
+ "NZD": {
+ "name": "뉴질랜드 달러",
+ "symbol": "NZ$"
+ },
+ "NGN": {
+ "name": "니제르 나ì´ë¼",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "니카ë¼ê³¼ 코르ë„ë°” 오로",
+ "symbol": "NIO"
+ },
+ "KRW": {
+ "name": "대한민국 ì›",
+ "symbol": "â‚©"
+ },
+ "DKK": {
+ "name": "ë´ë§ˆí¬ í¬ë¡œë„¤",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "ë„미니카 페소",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "ë™ì¹´ë¦¬ë¸Œ 달러",
+ "symbol": "EC$"
+ },
+ "LAK": {
+ "name": "ë¼ì˜¤ìŠ¤ 키프",
+ "symbol": "LAK"
+ },
+ "LRD": {
+ "name": "ë¼ì´ë² ë¦¬ì•„ 달러",
+ "symbol": "LRD"
+ },
+ "RUB": {
+ "name": "러시아 루블",
+ "symbol": "RUB"
+ },
+ "LBP": {
+ "name": "레바논 파운드",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "레소토 로티",
+ "symbol": "LSL"
+ },
+ "RON": {
+ "name": "루마니아 레우",
+ "symbol": "RON"
+ },
+ "RWF": {
+ "name": "르완다 프랑",
+ "symbol": "RWF"
+ },
+ "LYD": {
+ "name": "리비아 디나르",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "리투아니아 리타",
+ "symbol": "LTL"
+ },
+ "MGA": {
+ "name": "마다가스카르 아리아리",
+ "symbol": "MGA"
+ },
+ "MOP": {
+ "name": "마카오 파타카",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "마케ë„니아 디나르",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "ë§ë¼ìœ„ ì½°ì³",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "ë§ë ˆì´ì‹œì•„ ë§ê¹ƒ",
+ "symbol": "MYR"
+ },
+ "MXN": {
+ "name": "멕시코 페소",
+ "symbol": "MX$"
+ },
+ "MAD": {
+ "name": "모로코 디렘",
+ "symbol": "MAD"
+ },
+ "MUR": {
+ "name": "모리셔스 루피",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "모리타니 우기야",
+ "symbol": "MRO"
+ },
+ "MZN": {
+ "name": "ëª¨ìž ë¹„í¬ ë©”í‹°ì¹¼",
+ "symbol": "MZN"
+ },
+ "MDL": {
+ "name": "몰ë„ë°” ë ˆì´",
+ "symbol": "MDL"
+ },
+ "MVR": {
+ "name": "몰디브 ì œë„ ë£¨í”¼ì•„",
+ "symbol": "MVR"
+ },
+ "MNT": {
+ "name": "몽골 투그릭",
+ "symbol": "MNT"
+ },
+ "USD": {
+ "name": "미국 달러",
+ "symbol": "US$"
+ },
+ "MMK": {
+ "name": "미얀마 키ì–",
+ "symbol": "MMK"
+ },
+ "VUV": {
+ "name": "바누아투 바투",
+ "symbol": "VUV"
+ },
+ "BHD": {
+ "name": "ë°”ë ˆì¸ ë””ë‚˜ë¥´",
+ "symbol": "BHD"
+ },
+ "BBD": {
+ "name": "바베ì´ë„스 달러",
+ "symbol": "BBD"
+ },
+ "BSD": {
+ "name": "바하마 달러",
+ "symbol": "BSD"
+ },
+ "BDT": {
+ "name": "방글ë¼ë°ì‹œ 타카",
+ "symbol": "BDT"
+ },
+ "BMD": {
+ "name": "버뮤다 달러",
+ "symbol": "BMD"
+ },
+ "VEF": {
+ "name": "ë² ë„¤ìˆ˜ì—˜ë¼ ë³¼ë¦¬ë°”ë¥´",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "베트남 ë™",
+ "symbol": "â‚«"
+ },
+ "BYR": {
+ "name": "벨ë¼ë£¨ìŠ¤ 루블",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "벨리즈 달러",
+ "symbol": "BZD"
+ },
+ "BAM": {
+ "name": "보스니아-헤르체고비나 태환 마르í¬",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "보츠와나 í´ë¼",
+ "symbol": "BWP"
+ },
+ "BOB": {
+ "name": "볼리비아노",
+ "symbol": "BOB"
+ },
+ "BND": {
+ "name": "ë¶€ë£¨ë‚˜ì´ ë‹¬ëŸ¬",
+ "symbol": "BND"
+ },
+ "BIF": {
+ "name": "부룬디 프랑",
+ "symbol": "BIF"
+ },
+ "BTN": {
+ "name": "부탄 눌투눔",
+ "symbol": "BTN"
+ },
+ "BGN": {
+ "name": "불가리아 레프",
+ "symbol": "BGN"
+ },
+ "BRL": {
+ "name": "브ë¼ì§ˆ 레알",
+ "symbol": "R$"
+ },
+ "SAR": {
+ "name": "사우디아ë¼ë¹„ì•„ 리얄",
+ "symbol": "SAR"
+ },
+ "STD": {
+ "name": "ìƒíˆ¬ë©” 프린시페 ë„브ë¼",
+ "symbol": "STD"
+ },
+ "WST": {
+ "name": "ì„œ 사모아 탈ë¼",
+ "symbol": "WST"
+ },
+ "RSD": {
+ "name": "세르비아 디나르",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "세ì´ì…¸ 루피",
+ "symbol": "SCR"
+ },
+ "SHP": {
+ "name": "세ì¸íŠ¸í—¬ë ˆë‚˜ 파운드",
+ "symbol": "SHP"
+ },
+ "SOS": {
+ "name": "소ë§ë¦¬ì•„ 실ë§",
+ "symbol": "SOS"
+ },
+ "SBD": {
+ "name": "솔로몬 ì œë„ ë‹¬ëŸ¬",
+ "symbol": "SBD"
+ },
+ "SDG": {
+ "name": "수단 파운드",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "수리남 달러",
+ "symbol": "SRD"
+ },
+ "LKR": {
+ "name": "스리랑카 루피",
+ "symbol": "LKR"
+ },
+ "SZL": {
+ "name": "스와질란드 릴랑게니",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "ìŠ¤ì›¨ë´ í¬ë¡œë‚˜",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "스위스 프랑",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "시리아 파운드",
+ "symbol": "SYP"
+ },
+ "SLL": {
+ "name": "ì‹œì—ë¼ë¦¬ì˜¨ 리온",
+ "symbol": "SLL"
+ },
+ "TWD": {
+ "name": "ì‹  타ì´ì™„ 달러",
+ "symbol": "NT$"
+ },
+ "TRY": {
+ "name": "ì‹  터키 리ë¼",
+ "symbol": "TRY"
+ },
+ "SGD": {
+ "name": "ì‹±ê°€í´ ë‹¬ëŸ¬",
+ "symbol": "SGD"
+ },
+ "AED": {
+ "name": "ì•„ëžì—미리트 디르함",
+ "symbol": "AED"
+ },
+ "AWG": {
+ "name": "아루바 플로린",
+ "symbol": "AWG"
+ },
+ "AMD": {
+ "name": "아르메니아 드람",
+ "symbol": "AMD"
+ },
+ "ARS": {
+ "name": "아르헨티나 페소",
+ "symbol": "ARS"
+ },
+ "ISK": {
+ "name": "ì•„ì´ìŠ¬ëž€ë“œ í¬ë¡œë‚˜",
+ "symbol": "ISK"
+ },
+ "AZN": {
+ "name": "아제르바ì´ìž” 마나트",
+ "symbol": "AZN"
+ },
+ "AFN": {
+ "name": "아프가니스탄 아프가니",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "알바니아 ë ˆí¬",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "알제리 디나르",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "ì•™ê³¨ë¼ ì½´ìž",
+ "symbol": "AOA"
+ },
+ "ERN": {
+ "name": "ì—리트리아 나í¬íŒŒ",
+ "symbol": "ERN"
+ },
+ "SVC": {
+ "name": "엘살바ë„르 콜론",
+ "symbol": "SVC"
+ },
+ "YER": {
+ "name": "예멘 리알",
+ "symbol": "YER"
+ },
+ "OMR": {
+ "name": "오만 리얄",
+ "symbol": "OMR"
+ },
+ "HNL": {
+ "name": "온ë‘ë¼ìŠ¤ 렘피ë¼",
+ "symbol": "HNL"
+ },
+ "JOD": {
+ "name": "요르단 디나르",
+ "symbol": "JOD"
+ },
+ "UGX": {
+ "name": "우간다 실ë§",
+ "symbol": "UGX"
+ },
+ "UYU": {
+ "name": "ìš°ë£¨ê³¼ì´ íŽ˜ì†Œ 우루과요",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "우즈베키스탄 숨",
+ "symbol": "UZS"
+ },
+ "UAH": {
+ "name": "ìš°í¬ë¼ì´ë‚˜ 그리브나",
+ "symbol": "UAH"
+ },
+ "EUR": {
+ "name": "유로",
+ "symbol": "€"
+ },
+ "ETB": {
+ "name": "ì´ë””오피아 비르",
+ "symbol": "ETB"
+ },
+ "IQD": {
+ "name": "ì´ë¼í¬ 디나르",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "ì´ëž€ 리얄",
+ "symbol": "IRR"
+ },
+ "ILS": {
+ "name": "ì´ìŠ¤ë¼ì—˜ 신권 세켈",
+ "symbol": "₪"
+ },
+ "EGP": {
+ "name": "ì´ì§‘트 파운드",
+ "symbol": "EGP"
+ },
+ "INR": {
+ "name": "ì¸ë„ 루피",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "ì¸ë„네시아 루피아",
+ "symbol": "IDR"
+ },
+ "JPY": {
+ "name": "ì¼ë³¸ 엔화",
+ "symbol": "JPÂ¥"
+ },
+ "JMD": {
+ "name": "ìžë©”ì´ì¹´ 달러",
+ "symbol": "JMD"
+ },
+ "ZMW": {
+ "name": "잠비아 ì½°ì³",
+ "symbol": "ZMW"
+ },
+ "KPW": {
+ "name": "ì¡°ì„  ë¯¼ì£¼ì£¼ì˜ ì¸ë¯¼ 공화국 ì›",
+ "symbol": "KPW"
+ },
+ "GEL": {
+ "name": "조지아 ë¼ë¦¬",
+ "symbol": "GEL"
+ },
+ "CNY": {
+ "name": "중국 위안화",
+ "symbol": "CNÂ¥"
+ },
+ "DJF": {
+ "name": "지부티 프랑",
+ "symbol": "DJF"
+ },
+ "GIP": {
+ "name": "지브롤터 파운드",
+ "symbol": "GIP"
+ },
+ "ZWL": {
+ "name": "ì§ë°”브웨 달러 (2009)",
+ "symbol": "ZWL"
+ },
+ "CZK": {
+ "name": "체코 공화국 코루나",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "칠레 페소",
+ "symbol": "CLP"
+ },
+ "CVE": {
+ "name": "ì¹´ë³´ë² ë¥´ë° ì—스쿠ë„",
+ "symbol": "CVE"
+ },
+ "KZT": {
+ "name": "ì¹´ìží스탄 í…게",
+ "symbol": "KZT"
+ },
+ "QAR": {
+ "name": "카타르 리얄",
+ "symbol": "QAR"
+ },
+ "KHR": {
+ "name": "캄보디아 리얄",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "ìºë‚˜ë‹¤ 달러",
+ "symbol": "CA$"
+ },
+ "KES": {
+ "name": "ì¼€ëƒ ì‹¤ë§",
+ "symbol": "KES"
+ },
+ "KYD": {
+ "name": "ì¼€ì´ë§¨ ì œë„ ë‹¬ëŸ¬",
+ "symbol": "KYD"
+ },
+ "KMF": {
+ "name": "코모르 프랑",
+ "symbol": "KMF"
+ },
+ "CRC": {
+ "name": "코스타리카 콜론",
+ "symbol": "CRC"
+ },
+ "COP": {
+ "name": "콜롬비아 페소",
+ "symbol": "COP"
+ },
+ "CDF": {
+ "name": "콩고 프랑 콩골ë¼ìŠ¤",
+ "symbol": "CDF"
+ },
+ "CUC": {
+ "name": "쿠바 태환 페소",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "쿠바 페소",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "쿠웨ì´íŠ¸ 디나르",
+ "symbol": "KWD"
+ },
+ "HRK": {
+ "name": "í¬ë¡œì•„í‹°ì•„ 쿠나",
+ "symbol": "HRK"
+ },
+ "KGS": {
+ "name": "키르기스스탄 솜",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "타지키스탄 소모니",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "탄ìžë‹ˆì•„ 실ë§",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "태국 바트",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "통가 파앙가",
+ "symbol": "TOP"
+ },
+ "TMT": {
+ "name": "투르í¬ë©”니스탄 마나트",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "튀니지 디나르",
+ "symbol": "TND"
+ },
+ "TTD": {
+ "name": "트리니다드 토바고 달러",
+ "symbol": "TTD"
+ },
+ "PAB": {
+ "name": "파나마 발보아",
+ "symbol": "PAB"
+ },
+ "PYG": {
+ "name": "파ë¼ê³¼ì´ ê³¼ë¼ë‹ˆ",
+ "symbol": "PYG"
+ },
+ "GBP": {
+ "name": "파운드",
+ "symbol": "£"
+ },
+ "PKR": {
+ "name": "파키스탄 루피",
+ "symbol": "PKR"
+ },
+ "PGK": {
+ "name": "파푸아뉴기니 키나",
+ "symbol": "PGK"
+ },
+ "PEN": {
+ "name": "페루 누ì—ë³´ 솔",
+ "symbol": "PEN"
+ },
+ "FKP": {
+ "name": "í¬í´ëžœë“œì œë„ 파운드",
+ "symbol": "FKP"
+ },
+ "PLN": {
+ "name": "í´ëž€ë“œ ì¦ë¡œí‹°",
+ "symbol": "PLN"
+ },
+ "FJD": {
+ "name": "피지 달러",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "필리핀 페소",
+ "symbol": "PHP"
+ },
+ "HTG": {
+ "name": "하ì´í‹° 구르드",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "í—가리 í¬ë¦°íŠ¸",
+ "symbol": "HUF"
+ },
+ "AUD": {
+ "name": "호주 달러",
+ "symbol": "AU$"
+ },
+ "HKD": {
+ "name": "í™ì½© 달러",
+ "symbol": "HK$"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ks.json b/library/intl/resources/currency/ks.json
new file mode 100644
index 000000000..0ce1b1582
--- /dev/null
+++ b/library/intl/resources/currency/ks.json
@@ -0,0 +1,634 @@
+{
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CVE": {
+ "name": "CVE",
+ "symbol": "CVE"
+ },
+ "DJF": {
+ "name": "DJF",
+ "symbol": "DJF"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "AZN": {
+ "name": "آزَرباجانی مَنَٹ",
+ "symbol": "AZN"
+ },
+ "AUD": {
+ "name": "آسٹریلÙیَن ڈالَر",
+ "symbol": "A$"
+ },
+ "ARS": {
+ "name": "أرجَنٹیٖن Ù¾Ùسو",
+ "symbol": "ARS"
+ },
+ "ALL": {
+ "name": "اٮ۪لبینÙیَن Ù„ÙÚ©",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "اٮ۪لجیرÙیَن ڈیٖنار",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "اٮ۪نگولَن کوانزا",
+ "symbol": "AOA"
+ },
+ "UZS": {
+ "name": "اÙبیکÙستان سوم",
+ "symbol": "UZS"
+ },
+ "ETB": {
+ "name": "اÙتھوپÙیَن بÙر",
+ "symbol": "ETB"
+ },
+ "EGP": {
+ "name": "اÙجÙپٹÙیَن Ù¾ÙŽÙˆÙÙ†Ú‘",
+ "symbol": "EGP"
+ },
+ "AMD": {
+ "name": "اَرمانٮ۪ن ڈرٛٮ۪م",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "اَروبَن ÙÙلورÙÙ†",
+ "symbol": "AWG"
+ },
+ "UYU": {
+ "name": "اÙروٗگایَن پیٚسو",
+ "symbol": "UYU"
+ },
+ "ILS": {
+ "name": "اÙزرٲیÙÙ„ÛŒ Ù†Ù”ÙˆÛ Ø´Ù®ÛªÙ‚Ù•Ù„",
+ "symbol": "₪"
+ },
+ "AFN": {
+ "name": "اÙغان اÙغٲنی",
+ "symbol": "AFN"
+ },
+ "UGX": {
+ "name": "اÙگاداÛÙÚ© Ø´ÙÙ„ÙÙ†Ù›Ú¯",
+ "symbol": "UGX"
+ },
+ "IDR": {
+ "name": "اÙنڑونیشیاÛÙÚ© رÙÙ¾ÙیاÛ",
+ "symbol": "IDR"
+ },
+ "OMR": {
+ "name": "اومÙÙ†ÛŒ رÙیال",
+ "symbol": "OMR"
+ },
+ "IQD": {
+ "name": "ایٖراقÙÚ© دیٖنار",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "ایٖرانÙÚ© رÙیال",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "اَیسلینٛڑÙÚ© کرٛونا",
+ "symbol": "ISK"
+ },
+ "BBD": {
+ "name": "بابیڑÙیَن ڈالَر",
+ "symbol": "BBD"
+ },
+ "BHD": {
+ "name": "بحریٖنی دیٖنار",
+ "symbol": "BHD"
+ },
+ "BRL": {
+ "name": "برٛازیٖلین رÙیَل",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "برطٲنوی پاونٛڑ سٹٔرلÙÙ†Ù›Ú¯",
+ "symbol": "£"
+ },
+ "BMD": {
+ "name": "بٔرمیوٗڑَن ڈالَر",
+ "symbol": "BMD"
+ },
+ "BIF": {
+ "name": "بÙرÙÙ†Ú‘Ùین Ùرینٛک",
+ "symbol": "BIF"
+ },
+ "BND": {
+ "name": "برٛونی ڈالَر",
+ "symbol": "BND"
+ },
+ "BZD": {
+ "name": "بÙÙ„Ùزی ڈالر",
+ "symbol": "BZD"
+ },
+ "BYR": {
+ "name": "بÙلیروشÙیَن رÙبٕل",
+ "symbol": "BYR"
+ },
+ "BDT": {
+ "name": "بَنگلادیٖشی ٹَکا",
+ "symbol": "BDT"
+ },
+ "BSD": {
+ "name": "بÛامÙیَن ڈالر",
+ "symbol": "BSD"
+ },
+ "BWP": {
+ "name": "بوٹٕسوانَن Ù¾Ùلا",
+ "symbol": "BWP"
+ },
+ "BTN": {
+ "name": "بوٗٹینیٖز Ù†Ú¯Ùلٹرٛم",
+ "symbol": "BTN"
+ },
+ "BAM": {
+ "name": "بوزنÙیاÛَرزÙگووÙنا کَنوٲٹیبٕل مارٕک",
+ "symbol": "BAM"
+ },
+ "BOB": {
+ "name": "بولÙÙˆÙیَن بولوینو",
+ "symbol": "BOB"
+ },
+ "BGN": {
+ "name": "بیلگیرÙیَن Ûاڑ Ù„ÙÙˆ",
+ "symbol": "BGN"
+ },
+ "PKR": {
+ "name": "پاکÙØ³ØªÙ²Ù†Û Ø±Û„Ù¾ÙŽÛ’",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "پانامانÙیَن بالبوز",
+ "symbol": "PAB"
+ },
+ "PYG": {
+ "name": "پٮ۪رٮ۪گیوٗوَیَن Ú¯Ùعارانی",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "پٔریوٗوÙیَن نیوٗاوز سولٕز",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Ù¾Ú¾ÙÙ„ÙپایÙÙ”Ù† پٮ۪سو",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "پولÙØ´ زلوٹی",
+ "symbol": "PLN"
+ },
+ "TJS": {
+ "name": "تاجÙکتانÙÚ© سَمونی",
+ "symbol": "TJS"
+ },
+ "TRY": {
+ "name": "تÙرکیÛÙÚ© لیرا",
+ "symbol": "TRY"
+ },
+ "TZS": {
+ "name": "تَنزانیاÛÙÚ© Ø´ÙÙ„ÙÙ†Ù›Ú¯",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "تھایھک بات",
+ "symbol": "THB"
+ },
+ "TTD": {
+ "name": "ٹرÙÙ†Û٠ڈیڈ تÛÙ• ٹوبیگو ڈالَر",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Ù¹ÙنیشیاÛÙÚ© دیٖنار",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "ٹونگَن پانٛگا",
+ "symbol": "TOP"
+ },
+ "JPY": {
+ "name": "جاپانÙÚ© یَن",
+ "symbol": "JPÂ¥"
+ },
+ "GEL": {
+ "name": "جارجÙیَن لاری",
+ "symbol": "GEL"
+ },
+ "JOD": {
+ "name": "جَرڑینیاÛÙÚ© دیٖنار",
+ "symbol": "JOD"
+ },
+ "JMD": {
+ "name": "جَمَیکاÛÙÚ© ڑالَر",
+ "symbol": "JMD"
+ },
+ "KPW": {
+ "name": "جنوٗبی کورÙیَن ÙˆÙŽÙ†",
+ "symbol": "KPW"
+ },
+ "CLP": {
+ "name": "Ú†ÙÙ„ÙÙ† Ù¾Ùسو",
+ "symbol": "CLP"
+ },
+ "CZK": {
+ "name": "چیک کوریٖنا",
+ "symbol": "CZK"
+ },
+ "CNY": {
+ "name": "چینیٖز یَن رÙنمÙنبی",
+ "symbol": "CNÂ¥"
+ },
+ "HKD": {
+ "name": "حانٛگ کانٛگÙÚ© ڑالَر",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "حَنگیرÙیَن ÙورÙÙ†Ù›Ù¹",
+ "symbol": "HUF"
+ },
+ "HNL": {
+ "name": "حونڑورنÙÚ© لٮ۪مپیٖرا",
+ "symbol": "HNL"
+ },
+ "HTG": {
+ "name": "حیشَنÙÚ© Ú¯ÙˆÚ‘",
+ "symbol": "HTG"
+ },
+ "DKK": {
+ "name": "ÚˆÙ”Ù†ÙØ´ کرٛون",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "ڈومÙÙ†ÙÚ©ÙŽÙ† Ù¾Ùسو",
+ "symbol": "DOP"
+ },
+ "ERN": {
+ "name": "رÙٹریٖن Ù†ÙŽÙکا",
+ "symbol": "ERN"
+ },
+ "RUB": {
+ "name": "رٔشیَن رَبٕل",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "روانٛڑَن Ùرانٛک",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "رومانÙیَن لٮ۪یوٗ",
+ "symbol": "RON"
+ },
+ "ZMW": {
+ "name": "زÙمبابیÙÚ© کواچا",
+ "symbol": "ZMW"
+ },
+ "ZAR": {
+ "name": "ساوÙتھ اÙریٖکاÛÙÚ© رینڈ",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "ساوتھ کورÙیَن ÙˆÙŽÙ†",
+ "symbol": "â‚©"
+ },
+ "RSD": {
+ "name": "سٔربÙیَن دیٖنار",
+ "symbol": "RSD"
+ },
+ "LKR": {
+ "name": "سری لَنکاÛÙ•Ú† رۄپَے",
+ "symbol": "LKR"
+ },
+ "SRD": {
+ "name": "سÙریٖنامÙÚ© ڈالَر",
+ "symbol": "SRD"
+ },
+ "SVC": {
+ "name": "سَلویدَرÙÚ© کولَن",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "سَمون تَلا",
+ "symbol": "WST"
+ },
+ "SGD": {
+ "name": "سÙنگاپورÙÚ© ڈالَر",
+ "symbol": "SGD"
+ },
+ "SZL": {
+ "name": "سوازی Ù„Ùلَنگیٚنی",
+ "symbol": "SZL"
+ },
+ "SAR": {
+ "name": "سودیٖیÙÚ© رÙیال",
+ "symbol": "SAR"
+ },
+ "SDG": {
+ "name": "سوٗڈانÙÚ© پونٛڈ",
+ "symbol": "SDG"
+ },
+ "CHF": {
+ "name": "سÙÙˆÙز Ùریک",
+ "symbol": "CHF"
+ },
+ "SBD": {
+ "name": "سولَمَن جٔزیٖرÙÚ© ڈالَر",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "سومالی Ø´ÙÙ„ÙÙ†Ù›Ú¯",
+ "symbol": "SOS"
+ },
+ "SEK": {
+ "name": "سویٖڈÙØ´ کَرونا",
+ "symbol": "SEK"
+ },
+ "XAF": {
+ "name": "سی ایٚ٠اے Ùرینک بی ایٖ اے سی",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "سی ایٚ٠اے Ùرینک بی سی ایٖ اے او",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "سی ایٚ٠پی Ùرینک",
+ "symbol": "CFPF"
+ },
+ "SYP": {
+ "name": "سیٖریاÛÙÚ© پونٛڈ",
+ "symbol": "SYP"
+ },
+ "SHP": {
+ "name": "سینٹ ÛیلÙنا پونٛڈ",
+ "symbol": "SHP"
+ },
+ "FJD": {
+ "name": "ÙÙجین ڈالر",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "ÙیکلینٛڑÙس آیلینٛڑ پونٛڑ",
+ "symbol": "FKP"
+ },
+ "QAR": {
+ "name": "قطاری رÙیال",
+ "symbol": "QAR"
+ },
+ "KWD": {
+ "name": "Ù‚ÙویتÙÚ© دیٖنار",
+ "symbol": "KWD"
+ },
+ "KES": {
+ "name": "کٮ۪نیَن Ø´ÙÙ„ÙÙ†Ù›Ú¯",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "Ú©ÙرگÙستانÙÚ© سوم",
+ "symbol": "KGS"
+ },
+ "HRK": {
+ "name": "کروایشنÙÚ© کوٗنا",
+ "symbol": "HRK"
+ },
+ "KZT": {
+ "name": "کزاکÙستان ٹینٛج",
+ "symbol": "KZT"
+ },
+ "KHR": {
+ "name": "کَمبوڑÙیاÛÙÚ© رÙیال",
+ "symbol": "KHR"
+ },
+ "CRC": {
+ "name": "کوسٹا رÙÚ©ÙŽÙ† کولَن",
+ "symbol": "CRC"
+ },
+ "COP": {
+ "name": "کولَمبÙین Ù¾Ùسو",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "کومورÙیَن Ùرٛینٛک",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "کونٛگولیٖز Ùرٛیک",
+ "symbol": "CDF"
+ },
+ "KYD": {
+ "name": "کیمین ججیٖرÙÚ© ڑالَر",
+ "symbol": "KYD"
+ },
+ "CAD": {
+ "name": "کینَڑÙیَن ڈالر",
+ "symbol": "CA$"
+ },
+ "CUP": {
+ "name": "کیوٗبَن Ù¾Ùسو",
+ "symbol": "CUP"
+ },
+ "GIP": {
+ "name": "Ú¯Ùبریلٹَر پَاونٛڑ",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "Ú¯ÙÙ†Ùیَن Ùرٛینٛک",
+ "symbol": "GNF"
+ },
+ "GHS": {
+ "name": "گَنیٚیَن سٮ۪ڑی",
+ "symbol": "GHS"
+ },
+ "GTQ": {
+ "name": "گواٹَمالَن قیوٗٹزَل",
+ "symbol": "GTQ"
+ },
+ "GMD": {
+ "name": "گیمبÙیاÛÙÚ© دلاسی",
+ "symbol": "GMD"
+ },
+ "GYD": {
+ "name": "گَیَنیٖزÙÚ© ڑالَر",
+ "symbol": "GYD"
+ },
+ "LYD": {
+ "name": "Ù„Ùبیَن دیٖنار",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Ù„ÙتھوینÙیَن Ù„Ùٹاس",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Ù„Ùسوتھو لوٹی",
+ "symbol": "LSL"
+ },
+ "LAK": {
+ "name": "لَوٹÙیَن Ú©ÙÙ¾",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "لیبنیٖزÙÚ© پاونٛڑ",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "لَیبیرÙیَن ڑالَر",
+ "symbol": "LRD"
+ },
+ "MVR": {
+ "name": "مالدÙیٖوÙیَن رÙÙÙیا",
+ "symbol": "MVR"
+ },
+ "MOP": {
+ "name": "مٮ۪کانیٖز پَٹاکا",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "مٮ۪کَڑونÙیَن دیٖنار",
+ "symbol": "MKD"
+ },
+ "MXN": {
+ "name": "مٮ۪کسÙÚ©ÙŽÙ† پٮ۪سو",
+ "symbol": "MX$"
+ },
+ "MGA": {
+ "name": "مٮ۪لٮ۪گیسی اٮ۪ریَری",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "مٮ۪لیوÙیَن کواچا",
+ "symbol": "MWK"
+ },
+ "AED": {
+ "name": "Ù…ÙØªØ­Ø¯Û Ø¹Ø±Ø¨ اÙمارات دÙرÛÙ…",
+ "symbol": "AED"
+ },
+ "XCD": {
+ "name": "مَشرÙÙ‚ÛŒ کیرÙبÙیَن ڈالَر",
+ "symbol": "EC$"
+ },
+ "MYR": {
+ "name": "مَلیشÙیَن رÙÙ†Ù›Ú¯ÙÙ¹",
+ "symbol": "MYR"
+ },
+ "MUR": {
+ "name": "مورٮ۪شÙیاÛÙ•Ú† رۄپَے",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "مورÙٹینÙیَن عوگیوٗیا",
+ "symbol": "MRO"
+ },
+ "MAD": {
+ "name": "موروکَن دÙرÛÙŽÙ…",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "موزیمبÙÚ©ÙŽÙ† مٮ۪ٹÙÚ©ÙŽÙ„",
+ "symbol": "MZN"
+ },
+ "MDL": {
+ "name": "مولڑووین لیوٗ",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "مۄنگولÙیَن Ù¹ÙگرÙÚ©",
+ "symbol": "MNT"
+ },
+ "MMK": {
+ "name": "Ù…Ùیانما کیاٹ",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "نامÙبÙیَن ڑالَر",
+ "symbol": "NAD"
+ },
+ "ANG": {
+ "name": "نایدَرلینٛڑ اٮ۪نٹٕلیٖیَن Ú¯Ùلڑَر",
+ "symbol": "ANG"
+ },
+ "NIO": {
+ "name": "Ù†Ùکٮ۪راگÙوٮ۪ن کورڑوبا اورو",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "نورویٚیÙÙ†ÙÚ© کرٛون",
+ "symbol": "NOK"
+ },
+ "NZD": {
+ "name": "Ù†ÙوزیٖلینٛڑÙÚ© ڑالَر",
+ "symbol": "NZ$"
+ },
+ "TWD": {
+ "name": "نوٚو تیوانÙÚ© ڈالَر",
+ "symbol": "NT$"
+ },
+ "NPR": {
+ "name": "نیپالٕچ رۄپَے",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "نَیجیرÙیَن ڑالَر",
+ "symbol": "NGN"
+ },
+ "PGK": {
+ "name": "نیوٗ پیپÙعا Ú¯ÙÙ†Ùیَن کیٖنا",
+ "symbol": "PGK"
+ },
+ "INR": {
+ "name": "ÛÙندÙØ³ØªÙ²Ù†Û Ø±Û„Ù¾ÙŽÛ’",
+ "symbol": "₹"
+ },
+ "VUV": {
+ "name": "وَنوٗاَتوٗ وَتوٗ",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "وینٕزوٗلیÙÚ© بولÙوَر",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "ÙˆÙیَنَمÙÚ© ڈانٛگ",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "یَمنÙÚ© رÙیال",
+ "symbol": "YER"
+ },
+ "USD": {
+ "name": "یوٗ ایٚس ڈالَر",
+ "symbol": "US$"
+ },
+ "EUR": {
+ "name": "یوٗرو",
+ "symbol": "€"
+ },
+ "UAH": {
+ "name": "یوٗکرینیاÛÙÚ© ÛرÙÙˆÙنیا",
+ "symbol": "UAH"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ksb.json b/library/intl/resources/currency/ksb.json
new file mode 100644
index 000000000..14978eb04
--- /dev/null
+++ b/library/intl/resources/currency/ksb.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "bil ya Uhabeshi",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "dalasi ya Gambia",
+ "symbol": "GMD"
+ },
+ "AED": {
+ "name": "dilham ya Falme za Kialabu",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dilham ya Moloko",
+ "symbol": "MAD"
+ },
+ "DZD": {
+ "name": "dinali ya Aljelia",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinali ya Bahaleni",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "dinali ya Libya",
+ "symbol": "LYD"
+ },
+ "SDG": {
+ "name": "dinali ya Sudani",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "dinali ya Tunisia",
+ "symbol": "TND"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "dobla ya Sao Tome na Plincipe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dola ya Austlalia",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "dola ya Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "dola ya Libelia",
+ "symbol": "LRD"
+ },
+ "USD": {
+ "name": "dola ya Malekani",
+ "symbol": "US$"
+ },
+ "NAD": {
+ "name": "dola ya Namibia",
+ "symbol": "NAD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "eskudo ya Kepuvede",
+ "symbol": "CVE"
+ },
+ "XOF": {
+ "name": "falanga CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "falanga CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "MGA": {
+ "name": "falanga ya Bukini",
+ "symbol": "MGA"
+ },
+ "BIF": {
+ "name": "falanga ya Bulundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "falanga ya Jibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "falanga ya Komolo",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "falanga ya Kongo",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "falanga ya Lwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "falanga ya Uswisi",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "kwacha ya Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kwacha ya Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "kwanza ya Angola",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "ZAR": {
+ "name": "landi ya Aflika Kusini",
+ "symbol": "ZAR"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "leoni",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "SAR": {
+ "name": "liyal ya Saudia",
+ "symbol": "SAR"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "loti ya Lesoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "INR": {
+ "name": "lupia ya India",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "lupia ya Molisi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "lupia ya Shelisheli",
+ "symbol": "SCR"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naila ya Naijelia",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa ya Elitlea",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "EGP": {
+ "name": "pauni ya Misli",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "pauni ya Santahelena",
+ "symbol": "SHP"
+ },
+ "GBP": {
+ "name": "pauni ya Uingeeza",
+ "symbol": "£"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "pula ya Botswana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "JPY": {
+ "name": "salafu ya Kijapani",
+ "symbol": "JPÂ¥"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "shilingi ya Kenya",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "shilingi ya Somalia",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "shilingi ya Tanzania",
+ "symbol": "TSh"
+ },
+ "UGX": {
+ "name": "shilingi ya Uganda",
+ "symbol": "UGX"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "ugwiya ya Molitania",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "CNY": {
+ "name": "yaun lenminbi ya China",
+ "symbol": "CNÂ¥"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "EUR": {
+ "name": "yulo",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ksf.json b/library/intl/resources/currency/ksf.json
new file mode 100644
index 000000000..4ac12ffae
--- /dev/null
+++ b/library/intl/resources/currency/ksf.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "XAF": {
+ "name": "fráŋ",
+ "symbol": "FCFA"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "ZAR": {
+ "name": "mÉ”ni mÇ Ã¡ afrik anÇ a sud",
+ "symbol": "ZAR"
+ },
+ "XOF": {
+ "name": "mÉ”ni mÇ Ã¡ afríka aná wÉ›s",
+ "symbol": "CFA"
+ },
+ "DZD": {
+ "name": "mÉ”ni mÇ Ã¡ aljÉ›rí",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "mÉ”ni mÇ Ã¡ amÉ›rika",
+ "symbol": "US$"
+ },
+ "AOA": {
+ "name": "mÉ”ni mÇ Ã¡ angóla",
+ "symbol": "AOA"
+ },
+ "SAR": {
+ "name": "mÉ”ni mÇ Ã¡ arabí saodí",
+ "symbol": "SAR"
+ },
+ "BHD": {
+ "name": "mÉ”ni mÇ Ã¡ barÇÌn",
+ "symbol": "BHD"
+ },
+ "AED": {
+ "name": "mÉ”ni mÇ Ã¡ bÇlɔŋ bÇ kaksa bÉ› táatáaÅ‹zÇn",
+ "symbol": "AED"
+ },
+ "BWP": {
+ "name": "mÉ”ni mÇ Ã¡ botswana",
+ "symbol": "BWP"
+ },
+ "BIF": {
+ "name": "mÉ”ni mÇ Ã¡ burundí",
+ "symbol": "BIF"
+ },
+ "CNY": {
+ "name": "mÉ”ni mÇ Ã¡ cín",
+ "symbol": "CNÂ¥"
+ },
+ "DJF": {
+ "name": "mÉ”ni mÇ Ã¡ dyibutí",
+ "symbol": "DJF"
+ },
+ "EGP": {
+ "name": "mÉ”ni mÇ Ã¡ É›jípt",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "mÉ”ni mÇ Ã¡ É›ritrÉ›Ì",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "mÉ”ni mÇ Ã¡ É›tyÉ”pí",
+ "symbol": "ETB"
+ },
+ "GMD": {
+ "name": "mÉ”ni mÇ Ã¡ gambí",
+ "symbol": "GMD"
+ },
+ "INR": {
+ "name": "mÉ”ni mÇ Ã¡ indí",
+ "symbol": "₹"
+ },
+ "GBP": {
+ "name": "mÉ”ni mÇ Ã¡ ingÉ›rís",
+ "symbol": "£"
+ },
+ "JPY": {
+ "name": "mÉ”ni mÇ Ã¡ japÉ”ÌÅ‹",
+ "symbol": "JPÂ¥"
+ },
+ "CAD": {
+ "name": "mÉ”ni mÇ Ã¡ kanada",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "mÉ”ni mÇ Ã¡ kapvÉ›r",
+ "symbol": "CVE"
+ },
+ "KES": {
+ "name": "mÉ”ni mÇ Ã¡ kÉ›nya",
+ "symbol": "KES"
+ },
+ "KMF": {
+ "name": "mÉ”ni mÇ Ã¡ komÉ”r",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "mÉ”ni mÇ Ã¡ kÉ”ngó",
+ "symbol": "CDF"
+ },
+ "LSL": {
+ "name": "mÉ”ni mÇ Ã¡ lÇsóto",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "mÉ”ni mÇ Ã¡ libÉ›rya",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "mÉ”ni mÇ Ã¡ libí",
+ "symbol": "LYD"
+ },
+ "MGA": {
+ "name": "mÉ”ni mÇ Ã¡ madagaska",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "mÉ”ni mÇ Ã¡ malawi",
+ "symbol": "MWK"
+ },
+ "MAD": {
+ "name": "mÉ”ni mÇ Ã¡ marÉ”k",
+ "symbol": "MAD"
+ },
+ "MUR": {
+ "name": "mÉ”ni mÇ Ã¡ mwarís",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "mÉ”ni mÇ Ã¡ mwaritaní",
+ "symbol": "MRO"
+ },
+ "NAD": {
+ "name": "mÉ”ni mÇ Ã¡ namibí",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "mÉ”ni mÇ Ã¡ nijÉ›Ìrya",
+ "symbol": "NGN"
+ },
+ "AUD": {
+ "name": "mÉ”ni mÇ Ã¡ É”stralí",
+ "symbol": "A$"
+ },
+ "EUR": {
+ "name": "mÉ”ni mÇ Ã¡ pÉ›rÉ›sÇÌ",
+ "symbol": "€"
+ },
+ "RWF": {
+ "name": "mÉ”ni mÇ Ã¡ rwanda",
+ "symbol": "RWF"
+ },
+ "STD": {
+ "name": "mÉ”ni mÇ Ã¡ saotomÉ›Ì ri priÅ‹sib",
+ "symbol": "STD"
+ },
+ "SCR": {
+ "name": "mÉ”ni mÇ Ã¡ sÉ›cÉ›l",
+ "symbol": "SCR"
+ },
+ "SHP": {
+ "name": "mÉ”ni mÇ Ã¡ sÉ›ntÉ›Ìlen",
+ "symbol": "SHP"
+ },
+ "SOS": {
+ "name": "mÉ”ni mÇ Ã¡ somalí",
+ "symbol": "SOS"
+ },
+ "SDG": {
+ "name": "mÉ”ni mÇ Ã¡ sudan",
+ "symbol": "SDG"
+ },
+ "SZL": {
+ "name": "mÉ”ni mÇ Ã¡ swazilan",
+ "symbol": "SZL"
+ },
+ "CHF": {
+ "name": "mÉ”ni mÇ Ã¡ swís",
+ "symbol": "CHF"
+ },
+ "SLL": {
+ "name": "mÉ”ni mÇ Ã¡ syÉ›raleon",
+ "symbol": "SLL"
+ },
+ "TZS": {
+ "name": "mÉ”ni mÇ Ã¡ tanzaní",
+ "symbol": "TZS"
+ },
+ "TND": {
+ "name": "mÉ”ni mÇ Ã¡ tunÉ›sí",
+ "symbol": "TND"
+ },
+ "UGX": {
+ "name": "mÉ”ni mÇ Ã¡ uganda",
+ "symbol": "UGX"
+ },
+ "ZMW": {
+ "name": "mÉ”ni mÇ Ã¡ zambí",
+ "symbol": "ZMW"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ksh.json b/library/intl/resources/currency/ksh.json
new file mode 100644
index 000000000..c7441e096
--- /dev/null
+++ b/library/intl/resources/currency/ksh.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afjahni",
+ "symbol": "AFN"
+ },
+ "ARS": {
+ "name": "ajentiinesche Peeso",
+ "symbol": "ARS"
+ },
+ "EGP": {
+ "name": "äjiptesche Pongk",
+ "symbol": "EGP"
+ },
+ "ALL": {
+ "name": "albaanesche Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "aljeresche Denaa",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "ammärrikaanesche Dollaa",
+ "symbol": "US$"
+ },
+ "AOA": {
+ "name": "angjolaanesche Kwansa",
+ "symbol": "AOA"
+ },
+ "AMD": {
+ "name": "armeenesche Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "arubesche Florin",
+ "symbol": "AWG"
+ },
+ "SVC": {
+ "name": "asalvadorejaanesche Cosan",
+ "symbol": "SVC"
+ },
+ "AZN": {
+ "name": "Asserbaidschaani Manat",
+ "symbol": "AZN"
+ },
+ "ETB": {
+ "name": "ätejoopesche Birr",
+ "symbol": "ETB"
+ },
+ "AUD": {
+ "name": "austraalesche Dollaa",
+ "symbol": "A$"
+ },
+ "BHD": {
+ "name": "Bachrainesche Denaa",
+ "symbol": "BHD"
+ },
+ "BSD": {
+ "name": "bahama’sche Dollaa",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "Barbados-Dollaa",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "belizjaanesche Dollaa",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermuuda-Dollaa",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "bhutanesesche Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bollivijano",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "brasilljaanesche Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "brittesche £",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunei-Dollaa",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "buljaaresche Lev",
+ "symbol": "BGN"
+ },
+ "MMK": {
+ "name": "burmeesesche Kyat",
+ "symbol": "MMK"
+ },
+ "BIF": {
+ "name": "burundesche Frang",
+ "symbol": "BIF"
+ },
+ "DKK": {
+ "name": "dänesche Kruhne",
+ "symbol": "DKK"
+ },
+ "AED": {
+ "name": "de vereineschte arraabesche Emiraate ier Dirham",
+ "symbol": "AED"
+ },
+ "STD": {
+ "name": "Dobra vun São Tomé un Príncipe",
+ "symbol": "STD"
+ },
+ "TTD": {
+ "name": "Dollaa uß Trinidad un Tobääjo",
+ "symbol": "TTD"
+ },
+ "DOP": {
+ "name": "dommenikaanesche Peesos",
+ "symbol": "DOP"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "Fidschi-Dollaa",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "fillipiinesche Pesos",
+ "symbol": "PHP"
+ },
+ "XOF": {
+ "name": "Frang uß de Älfebeinköß",
+ "symbol": "CFA"
+ },
+ "DJF": {
+ "name": "Frang uß Dschibuti",
+ "symbol": "DJF"
+ },
+ "HTG": {
+ "name": "haiitesche Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "hondureanesche Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hongkong-Dollaa",
+ "symbol": "HK$"
+ },
+ "INR": {
+ "name": "indesche Ruupije",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "indoneesesche Ruupije",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "iraakesche Denaa",
+ "symbol": "IQD"
+ },
+ "ISK": {
+ "name": "ißländesche Kruhne",
+ "symbol": "ISK"
+ },
+ "ILS": {
+ "name": "ißraeelesche Schekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "jamaikaanesche Dollaa",
+ "symbol": "JMD"
+ },
+ "GMD": {
+ "name": "jambesche Dalasi",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "janaaesche Cedi",
+ "symbol": "GHS"
+ },
+ "JPY": {
+ "name": "japaanesche Jen",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "jemenitesche Rijal",
+ "symbol": "YER"
+ },
+ "GEL": {
+ "name": "jeorjesche Lari",
+ "symbol": "GEL"
+ },
+ "GIP": {
+ "name": "jibraltaa’sche Pongk",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "Jineea-Frang",
+ "symbol": "GNF"
+ },
+ "JOD": {
+ "name": "Jordaanesche Dollaa",
+ "symbol": "JOD"
+ },
+ "GYD": {
+ "name": "Juaana-Dollaa",
+ "symbol": "GYD"
+ },
+ "GTQ": {
+ "name": "juatemalesche Quetzal",
+ "symbol": "GTQ"
+ },
+ "KYD": {
+ "name": "Kaimann-Dollaa",
+ "symbol": "KYD"
+ },
+ "KHR": {
+ "name": "kambodschaanesche Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "kannaadesche Dollaa",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "kapverdesche Eskuudos",
+ "symbol": "CVE"
+ },
+ "KZT": {
+ "name": "kasakesche Tenge",
+ "symbol": "KZT"
+ },
+ "QAR": {
+ "name": "kataaresche Rijal",
+ "symbol": "QAR"
+ },
+ "KES": {
+ "name": "Kenjaanesche Schillinge",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "kirjiisesche Som",
+ "symbol": "KGS"
+ },
+ "XAF": {
+ "name": "Kmmeruhner Frang",
+ "symbol": "FCFA"
+ },
+ "COP": {
+ "name": "kolumbesche Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "kommooresche Frang",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "kongjoleesesche Frang",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "koßtarikaanesche Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "krowaatesche Kuna",
+ "symbol": "HRK"
+ },
+ "CUP": {
+ "name": "kubaanesche Peesos",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "kuwaitesche Denaa",
+ "symbol": "KWD"
+ },
+ "LSL": {
+ "name": "lesoothesche Loti",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "libaneesesche Pongk",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "liberijaanesche Dollaa",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "libesche Denaa",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "littouesche Litas",
+ "symbol": "LTL"
+ },
+ "LAK": {
+ "name": "loaatesche Kip",
+ "symbol": "LAK"
+ },
+ "MGA": {
+ "name": "madajaskesche Ariary",
+ "symbol": "MGA"
+ },
+ "MOP": {
+ "name": "makaneesesche Pataca",
+ "symbol": "MOP"
+ },
+ "MWK": {
+ "name": "malaawesche Kwache",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "malaisesche Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "mallediivesche Rufiyaa",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "marrokaanesche Dirhamm",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "mauretanesche Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "maurizjahnesche Ruupije",
+ "symbol": "MUR"
+ },
+ "MKD": {
+ "name": "mazedoonesche Denaa",
+ "symbol": "MKD"
+ },
+ "MXN": {
+ "name": "mexekaanesche Peeso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "moldaavesche Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "mongjoolesche Tugrik",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "mossambikaanesche Metical",
+ "symbol": "MZN"
+ },
+ "ERN": {
+ "name": "Nafka uß Erritreja",
+ "symbol": "ERN"
+ },
+ "NAD": {
+ "name": "namiibesche Dollaa",
+ "symbol": "NAD"
+ },
+ "ANG": {
+ "name": "neederlängsch antillesche Jullde",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "nepaleesesche Ruupije",
+ "symbol": "NPR"
+ },
+ "TWD": {
+ "name": "neu taiwaneesesche Dollaa",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "neuseeländesche Dollaa",
+ "symbol": "NZ$"
+ },
+ "NGN": {
+ "name": "nijerijaanesche Naira",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "nikarajaanesche Córdoba",
+ "symbol": "NIO"
+ },
+ "KPW": {
+ "name": "noodkorejaansche Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "norrweejesche Kruhne",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "ommaanesche Rijal",
+ "symbol": "OMR"
+ },
+ "CUC": {
+ "name": "ömtuuschbaa kubaanesche Pesos",
+ "symbol": "CUC"
+ },
+ "BAM": {
+ "name": "ömtuuschbaa Mark us Boßnije un dä Hächejovvina",
+ "symbol": "BAM"
+ },
+ "XCD": {
+ "name": "oß-karribbesche Dollaa",
+ "symbol": "EC$"
+ },
+ "PKR": {
+ "name": "pakestaanesche Ruupije",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "pannameesesche Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "papua neujinejaanesche Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "parajuaanesche Juarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "perruaanesche Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "IRR": {
+ "name": "persesche Rial",
+ "symbol": "IRR"
+ },
+ "XPF": {
+ "name": "polineesesche Frang",
+ "symbol": "CFPF"
+ },
+ "PLN": {
+ "name": "polnesche ZÅ‚oty",
+ "symbol": "PLN"
+ },
+ "FKP": {
+ "name": "Pongk vun de Falkland-Enselle",
+ "symbol": "FKP"
+ },
+ "BWP": {
+ "name": "Pula us Bozwaana",
+ "symbol": "BWP"
+ },
+ "RON": {
+ "name": "romäänesche Leu",
+ "symbol": "RON"
+ },
+ "RWF": {
+ "name": "ruandesche Frang",
+ "symbol": "RWF"
+ },
+ "RUB": {
+ "name": "russesche Ruubel",
+ "symbol": "RUB"
+ },
+ "ZMW": {
+ "name": "sambesche Kwacha",
+ "symbol": "ZMW"
+ },
+ "WST": {
+ "name": "samowaanesche Tala",
+ "symbol": "WST"
+ },
+ "RSD": {
+ "name": "särbesche Denaare",
+ "symbol": "RSD"
+ },
+ "SAR": {
+ "name": "saudesche Rijal",
+ "symbol": "SAR"
+ },
+ "CLP": {
+ "name": "schileenesche Peeso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "schineesesche Yuan Renminbi",
+ "symbol": "CNÂ¥"
+ },
+ "LKR": {
+ "name": "schrilankesche Ruupije",
+ "symbol": "LKR"
+ },
+ "SEK": {
+ "name": "schweedesche Kruhne",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "schweijzer Fränkli",
+ "symbol": "CHF"
+ },
+ "SCR": {
+ "name": "seischellesche Ruupije",
+ "symbol": "SCR"
+ },
+ "ZWL": {
+ "name": "simbabwesche Dollaa (2009)",
+ "symbol": "ZWL"
+ },
+ "SGD": {
+ "name": "singjapurejaanesche Dollaa",
+ "symbol": "SGD"
+ },
+ "ZAR": {
+ "name": "södaffrekaanesche Rand",
+ "symbol": "ZAR"
+ },
+ "SSP": {
+ "name": "södsudaneesesche Pongk",
+ "symbol": "SSP"
+ },
+ "SBD": {
+ "name": "solomonesche Dollaa",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "somaalesche Schillenge",
+ "symbol": "SOS"
+ },
+ "KRW": {
+ "name": "söödkorejaansche Won",
+ "symbol": "â‚©"
+ },
+ "SLL": {
+ "name": "ẞjärra-lejoneesesche Leone",
+ "symbol": "SLL"
+ },
+ "SDG": {
+ "name": "sudaneesesche Pongk",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "sürinameesesche Dollaa",
+ "symbol": "SRD"
+ },
+ "SYP": {
+ "name": "süüresche Pund",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "swasiländesche Lilangeni",
+ "symbol": "SZL"
+ },
+ "TJS": {
+ "name": "tadschikißtaanesche Somoni",
+ "symbol": "TJS"
+ },
+ "THB": {
+ "name": "tailändesche Baht",
+ "symbol": "THB"
+ },
+ "BDT": {
+ "name": "Taka us Bangladäsch",
+ "symbol": "BDT"
+ },
+ "TZS": {
+ "name": "tansaanesche Schillenge",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "tongjanes Paʻangache",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "törkesche Liire",
+ "symbol": "TRY"
+ },
+ "CZK": {
+ "name": "tschäschesche Kruhne",
+ "symbol": "CZK"
+ },
+ "TND": {
+ "name": "tuneesesche Denaa",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "turkmeneßtaanesche Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "ujandesche Schillenge",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "ukraijnesche Hryvnia",
+ "symbol": "UAH"
+ },
+ "HUF": {
+ "name": "unjarresche Forint",
+ "symbol": "HUF"
+ },
+ "UYU": {
+ "name": "urrujuwaische Peeso",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "ußbeekesche Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "vanuatesche Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "venezuelaanesche Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "vijätnammeesesche Dong",
+ "symbol": "â‚«"
+ },
+ "BYR": {
+ "name": "wiißrußesche Rubel",
+ "symbol": "BYR"
+ },
+ "SHP": {
+ "name": "Zint-Hellena-Pongk",
+ "symbol": "SHP"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ky.json b/library/intl/resources/currency/ky.json
new file mode 100644
index 000000000..bdab1fa2a
--- /dev/null
+++ b/library/intl/resources/currency/ky.json
@@ -0,0 +1,634 @@
+{
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "AUD": {
+ "name": "ÐвÑÑ‚Ñ€Ð°Ð»Ð¸Ñ Ð´Ð¾Ð»Ð»Ð°Ñ€Ñ‹",
+ "symbol": "AUD"
+ },
+ "AZN": {
+ "name": "Ðзербайжан манаты",
+ "symbol": "AZN"
+ },
+ "USD": {
+ "name": "ÐКШ доллары",
+ "symbol": "USD"
+ },
+ "ALL": {
+ "name": "албан леги",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Ðлжир динары",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Ðнгола кванзаÑÑ‹",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "аргентина пеÑоÑу",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "ÐÑ€Ð¼ÐµÐ½Ð¸Ñ Ð´Ñ€Ð°Ð¼Ñ‹",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "аруба флорини",
+ "symbol": "AWG"
+ },
+ "AFN": {
+ "name": "ÐфганÑтан афганиÑи",
+ "symbol": "AFN"
+ },
+ "BSD": {
+ "name": "багама доллары",
+ "symbol": "BSD"
+ },
+ "BDT": {
+ "name": "Бангладеш такаÑÑ‹",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Ð±Ð°Ñ€Ð±Ð°Ð´Ð¾Ñ Ð´Ð¾Ð»Ð»Ð°Ñ€Ñ‹",
+ "symbol": "BBD"
+ },
+ "BHD": {
+ "name": "Бахрейн динары",
+ "symbol": "BHD"
+ },
+ "BYR": {
+ "name": "беларуÑÑŒ рублу",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "белиз доллары",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "бермуд доллары",
+ "symbol": "BMD"
+ },
+ "AED": {
+ "name": "Бириккен Ðраб Эмираттары дирхамы",
+ "symbol": "AED"
+ },
+ "BGN": {
+ "name": "болгар левиÑи",
+ "symbol": "BGN"
+ },
+ "BOB": {
+ "name": "Ð±Ð¾Ð»Ð¸Ð²Ð¸Ñ Ð±Ð¾Ð»Ð¸Ð²Ð¸Ð°Ð½Ð¾Ñу",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "боÑниÑ-герцоговина жүгүртөлмөлүү маркаÑÑ‹",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "БотÑвана пулаÑÑ‹",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Ð±Ñ€Ð°Ð·Ð¸Ð»Ð¸Ñ Ñ€ÐµÐ°Ð»Ñ‹",
+ "symbol": "BRL"
+ },
+ "GBP": {
+ "name": "Ð±Ñ€Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ñ„ÑƒÐ½Ñ‚ Ñтерлинги",
+ "symbol": "GBP"
+ },
+ "BND": {
+ "name": "Бруней доллары",
+ "symbol": "BND"
+ },
+ "BIF": {
+ "name": "Бурунди франкы",
+ "symbol": "BIF"
+ },
+ "BTN": {
+ "name": "Бутан нгултруму",
+ "symbol": "BTN"
+ },
+ "VUV": {
+ "name": "Вануату ватуÑу",
+ "symbol": "VUV"
+ },
+ "HUF": {
+ "name": "венгр форинти",
+ "symbol": "HUF"
+ },
+ "VEF": {
+ "name": "венеÑуÑла боливары",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Вьетнам доӊу",
+ "symbol": "â‚«"
+ },
+ "HTG": {
+ "name": "гаити гурдуÑу",
+ "symbol": "HTG"
+ },
+ "GMD": {
+ "name": "Ð“Ð°Ð¼Ð±Ð¸Ñ Ð´Ð°Ð»Ð°ÑиÑи",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "Гана ÑедиÑи",
+ "symbol": "GHS"
+ },
+ "GTQ": {
+ "name": "гватемала кетÑалы",
+ "symbol": "GTQ"
+ },
+ "GIP": {
+ "name": "гибралтар фунту",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "Гине франкы",
+ "symbol": "GNF"
+ },
+ "HNL": {
+ "name": "Ð³Ð¾Ð½Ð´ÑƒÑ€Ð°Ñ Ð»ÐµÐ¼Ð¿Ð¸Ñ€Ð°ÑÑ‹",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Гоӊ Коӊ доллары",
+ "symbol": "HKD"
+ },
+ "GEL": {
+ "name": "Ð“Ñ€ÑƒÐ·Ð¸Ñ Ð»Ð°Ñ€Ð¸Ñи",
+ "symbol": "GEL"
+ },
+ "GYD": {
+ "name": "гуйана доллары",
+ "symbol": "GYD"
+ },
+ "DKK": {
+ "name": "Ð´Ð°Ð½Ð¸Ñ ÐºÑ€Ð¾Ð½Ñƒ",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "доминикан пеÑоÑу",
+ "symbol": "DOP"
+ },
+ "EUR": {
+ "name": "Евро",
+ "symbol": "€"
+ },
+ "NZD": {
+ "name": "Жаӊы Ð—ÐµÐ»Ð°Ð½Ð´Ð¸Ñ Ð´Ð¾Ð»Ð»Ð°Ñ€Ñ‹",
+ "symbol": "NZD"
+ },
+ "JPY": {
+ "name": "Жапан йени",
+ "symbol": "JPÂ¥"
+ },
+ "DJF": {
+ "name": "Жибути франкы",
+ "symbol": "DJF"
+ },
+ "ZMW": {
+ "name": "Ð—Ð°Ð¼Ð±Ð¸Ñ ÐºÐ²Ð°Ñ‡Ð°ÑÑ‹",
+ "symbol": "ZMW"
+ },
+ "ILS": {
+ "name": "Израил жаӊы шегели",
+ "symbol": "ILS"
+ },
+ "INR": {
+ "name": "Ð˜Ð½Ð´Ð¸Ñ Ñ€ÑƒÐ¿Ð¸Ñи",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "Ð˜Ð½Ð´Ð¾Ð½ÐµÐ·Ð¸Ñ Ñ€ÑƒÐ¿Ð¸Ð¹Ð°ÑÑ‹",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "Ирак динары",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "Иран риалы",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "иÑÐ»Ð°Ð½Ð´Ð¸Ñ ÐºÑ€Ð¾Ð½Ñƒ",
+ "symbol": "ISK"
+ },
+ "YER": {
+ "name": "Йемен риалы",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "Ð™Ð¾Ñ€Ð´Ð°Ð½Ð¸Ñ Ð´Ð¸Ð½Ð°Ñ€Ñ‹",
+ "symbol": "JOD"
+ },
+ "CVE": {
+ "name": "Кабо-Верде ÑÑкудоÑу",
+ "symbol": "CVE"
+ },
+ "KZT": {
+ "name": "КазакÑтан теӊгеÑи",
+ "symbol": "KZT"
+ },
+ "KYD": {
+ "name": "кайман доллары",
+ "symbol": "KYD"
+ },
+ "KHR": {
+ "name": "Камбожа риели",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "канада доллары",
+ "symbol": "CAD"
+ },
+ "QAR": {
+ "name": "Катар риалы",
+ "symbol": "QAR"
+ },
+ "KES": {
+ "name": "ÐšÐµÐ½Ð¸Ñ ÑˆÐ¸Ð»Ð»Ð¸Ð½Ð³Ð¸",
+ "symbol": "KES"
+ },
+ "COP": {
+ "name": "ÐºÐ¾Ð»ÑƒÐ¼Ð±Ð¸Ñ Ð¿ÐµÑоÑу",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "ÐšÐ¾Ð¼Ð¾Ñ€Ð¾Ñ Ñ„Ñ€Ð°Ð½ÐºÑ‹",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Конго франкы",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "коÑта-рика колону",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "куба жүгүртүлмөлүү пеÑоÑу",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "куба пеÑоÑу",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "Кувейт динары",
+ "symbol": "KWD"
+ },
+ "XAF": {
+ "name": "КФРВЕÐС франкы",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "КФРВСЕÐО франкы",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "КФП франкы",
+ "symbol": "CFPF"
+ },
+ "KGS": {
+ "name": "КыргызÑтан Ñому",
+ "symbol": "Ñом"
+ },
+ "CNY": {
+ "name": "Кытай юаны",
+ "symbol": "CNÂ¥"
+ },
+ "LAK": {
+ "name": "Ð›Ð°Ð¾Ñ ÐºÐ¸Ð±Ð¸",
+ "symbol": "LAK"
+ },
+ "LRD": {
+ "name": "Ð›Ð¸Ð±ÐµÑ€Ð¸Ñ Ð´Ð¾Ð»Ð»Ð°Ñ€Ñ‹",
+ "symbol": "LRD"
+ },
+ "LBP": {
+ "name": "Ливан фунту",
+ "symbol": "LBP"
+ },
+ "LYD": {
+ "name": "Ð›Ð¸Ð²Ð¸Ñ Ð´Ð¸Ð½Ð°Ñ€Ñ‹",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "литва литаÑÑ‹",
+ "symbol": "LTL"
+ },
+ "MUR": {
+ "name": "Мавританий рупиÑи",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "ÐœÐ°Ð²Ñ€Ð¸Ñ‚Ð°Ð½Ð¸Ñ ÑƒÐ³Ð¸ÑÑÑ‹",
+ "symbol": "MRO"
+ },
+ "MGA": {
+ "name": "МадагаÑкар ариариÑи",
+ "symbol": "MGA"
+ },
+ "MOP": {
+ "name": "Макау патакаÑÑ‹",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "македон денары",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "Малави квачаÑÑ‹",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "ÐœÐ°Ð»Ð°Ð¹Ð·Ð¸Ñ Ñ€Ð¸Ð½Ð³Ð³Ð¸Ñ‚Ð¸",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Малдив РуфийаÑÑ‹",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "Марокко дирхамы",
+ "symbol": "MAD"
+ },
+ "MXN": {
+ "name": "мекÑика пеÑоÑу",
+ "symbol": "MXN"
+ },
+ "EGP": {
+ "name": "МиÑир фунту",
+ "symbol": "EGP"
+ },
+ "MMK": {
+ "name": "Мйанмар кйаты",
+ "symbol": "MMK"
+ },
+ "MZN": {
+ "name": "Мозамбик метикалы",
+ "symbol": "MZN"
+ },
+ "MDL": {
+ "name": "молдован лейи",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Монгол тугриги",
+ "symbol": "MNT"
+ },
+ "NAD": {
+ "name": "ÐÐ°Ð¼Ð¸Ð±Ð¸Ñ Ð´Ð¾Ð»Ð»Ð°Ñ€Ñ‹",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Ðепал рупиÑи",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "ÐÐ¸Ð³ÐµÑ€Ð¸Ñ Ð½Ð°Ð¹Ñ€Ð°ÑÑ‹",
+ "symbol": "NGN"
+ },
+ "ANG": {
+ "name": "нидерланд-антил гулдени",
+ "symbol": "ANG"
+ },
+ "NIO": {
+ "name": "никарагуа кордобаÑÑ‹",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "Ð½Ð¾Ñ€Ð²ÐµÐ³Ð¸Ñ ÐºÑ€Ð¾Ð½Ñƒ",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Оман риалы",
+ "symbol": "OMR"
+ },
+ "RUB": {
+ "name": "Ð¾Ñ€ÑƒÑ Ñ€ÑƒÐ±Ð»Ñƒ",
+ "symbol": "RUB"
+ },
+ "UZS": {
+ "name": "ӨзбекÑтан Ñому",
+ "symbol": "UZS"
+ },
+ "PKR": {
+ "name": "ПакиÑтан рупиÑи",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "панама балбоаÑÑ‹",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Папуа Жаӊы Гине кинаÑÑ‹",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "парагвай гуараниÑи",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "перу нуÑво Ñолу",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "польша злотыйы",
+ "symbol": "PLN"
+ },
+ "RWF": {
+ "name": "Руанда франкы",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "румын лейи",
+ "symbol": "RON"
+ },
+ "WST": {
+ "name": "Самоа талаÑÑ‹",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "Сао Томе жана ПринÑипе добраÑÑ‹",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Сауд риалы",
+ "symbol": "SAR"
+ },
+ "SZL": {
+ "name": "Свази лилангени",
+ "symbol": "SZL"
+ },
+ "SCR": {
+ "name": "Сейшел рупиÑи",
+ "symbol": "SCR"
+ },
+ "RSD": {
+ "name": "Ñерб динары",
+ "symbol": "RSD"
+ },
+ "SLL": {
+ "name": "Сиерра-Леоне леонеÑи",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Сингапур доллары",
+ "symbol": "SGD"
+ },
+ "SYP": {
+ "name": "Ð¡Ð¸Ñ€Ð¸Ñ Ñ„ÑƒÐ½Ñ‚Ñƒ",
+ "symbol": "SYP"
+ },
+ "SBD": {
+ "name": "Соломон доллары",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Сомали шиллинги",
+ "symbol": "SOS"
+ },
+ "SDG": {
+ "name": "Судан фунту",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Ñуринам доллары",
+ "symbol": "SRD"
+ },
+ "TJS": {
+ "name": "ТажикÑтан ÑомониÑи",
+ "symbol": "TJS"
+ },
+ "THB": {
+ "name": "Тай баты",
+ "symbol": "฿"
+ },
+ "TWD": {
+ "name": "Тайвань жаӊы доллары",
+ "symbol": "TWD"
+ },
+ "TZS": {
+ "name": "Ð¢Ð°Ð½Ð·Ð°Ð½Ð¸Ñ ÑˆÐ¸Ð»Ð»Ð¸Ð½Ð³Ð¸",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "Тонга паангаÑÑ‹",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "тринидад жана тобаго доллары",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Ð¢ÑƒÐ½Ð¸Ñ Ð´Ð¸Ð½Ð°Ñ€Ñ‹",
+ "symbol": "TND"
+ },
+ "KPW": {
+ "name": "Түндүк ÐšÐ¾Ñ€ÐµÑ ÑƒÐ¾Ð½Ñƒ",
+ "symbol": "KPW"
+ },
+ "TRY": {
+ "name": "Ð¢Ò¯Ñ€ÐºÐ¸Ñ Ð»Ð¸Ñ€Ð°ÑÑ‹",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "ТүркмөнÑтан манаты",
+ "symbol": "TMT"
+ },
+ "ZAR": {
+ "name": "Түштүк Ðфрика ранды",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "Түштүк ÐšÐ¾Ñ€ÐµÑ ÑƒÐ¾Ð½Ñƒ",
+ "symbol": "KRW"
+ },
+ "SSP": {
+ "name": "Түштүк Судан фунту",
+ "symbol": "SSP"
+ },
+ "UGX": {
+ "name": "Уганда шиллинги",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "украин гривени",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "уругвай пеÑоÑу",
+ "symbol": "UYU"
+ },
+ "FJD": {
+ "name": "Фижи доллары",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "Филиппин пеÑоÑу",
+ "symbol": "PHP"
+ },
+ "FKP": {
+ "name": "фолкленд аралдарынын фунту",
+ "symbol": "FKP"
+ },
+ "HRK": {
+ "name": "хорват кунаÑÑ‹",
+ "symbol": "HRK"
+ },
+ "CZK": {
+ "name": "чех кронаÑÑ‹",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "чили пеÑоÑу",
+ "symbol": "CLP"
+ },
+ "XCD": {
+ "name": "чыгыш кариб доллары",
+ "symbol": "XCD"
+ },
+ "CHF": {
+ "name": "ÑˆÐ²ÐµÐ¹Ñ†Ð°Ñ€Ð¸Ñ Ñ„Ñ€Ð°Ð½ÐºÑ‹",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "ÑˆÐ²ÐµÑ†Ð¸Ñ ÐºÑ€Ð¾Ð½Ñƒ",
+ "symbol": "SEK"
+ },
+ "LKR": {
+ "name": "Шри Ланка рупиÑи",
+ "symbol": "LKR"
+ },
+ "SHP": {
+ "name": "Ыйык Елена фунту",
+ "symbol": "SHP"
+ },
+ "ERN": {
+ "name": "Эритреа накфаÑÑ‹",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ð­Ñ„Ð¸Ð¾Ð¿Ð¸Ñ Ð±Ð¸Ñ€Ñ€Ð¸",
+ "symbol": "ETB"
+ },
+ "JMD": {
+ "name": "Ñмайка доллары",
+ "symbol": "JMD"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/lag.json b/library/intl/resources/currency/lag.json
new file mode 100644
index 000000000..ddfa28c20
--- /dev/null
+++ b/library/intl/resources/currency/lag.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Bíiri ya Ʉhabéeshi",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Daláasi ya Gámbia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dináairi ya Alijéria",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dináari ya Baharéeni",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dináari ya Líbia",
+ "symbol": "LYD"
+ },
+ "TND": {
+ "name": "Dináari ya Tunísia",
+ "symbol": "TND"
+ },
+ "MAD": {
+ "name": "Diriháamu ya Moróoko",
+ "symbol": "MAD"
+ },
+ "AED": {
+ "name": "Diriháamu ya Ʉtemi wa Kɨaráabu",
+ "symbol": "AED"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dóbura ya SaoTóome na Pirínsipe",
+ "symbol": "STD"
+ },
+ "USD": {
+ "name": "Dóola ya AmerɨÌka",
+ "symbol": "US$"
+ },
+ "AUD": {
+ "name": "Dóola ya Ausitereelía",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "Dóola ya Kánada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dóola ya Libéria",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Dóola ya Namíbia",
+ "symbol": "NAD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "Esikúudo ya Kepuvéede",
+ "symbol": "CVE"
+ },
+ "CHF": {
+ "name": "Faráaka ya Uswíisi",
+ "symbol": "CHF"
+ },
+ "BIF": {
+ "name": "Faráanga ya Burúundi",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Faráanga ya CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Faráanga ya CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "DJF": {
+ "name": "Faráanga ya Jibóuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Faráanga ya Komóoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Faráanga ya Kóongo",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Faráanga ya Rwáanda",
+ "symbol": "RWF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kwáacha ya Maláawi",
+ "symbol": "MWK"
+ },
+ "AOA": {
+ "name": "Kwáanza ya Angóola",
+ "symbol": "AOA"
+ },
+ "ZMW": {
+ "name": "Kwácha ya Sámbia",
+ "symbol": "ZMW"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leóoni",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilengéeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Lóoti ya Lesóoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MGA": {
+ "name": "Mpía ya bukini",
+ "symbol": "MGA"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naíira ya Niijéria",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nákɨfa ya Eriterea",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "EGP": {
+ "name": "Páundi ya Mísiri",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Páundi ya Mʉtakatíifu Heléena",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Páundi ya Sudáani",
+ "symbol": "SDG"
+ },
+ "GBP": {
+ "name": "Páundi ya Ʉɨngɨréesa",
+ "symbol": "£"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Púula ya Botiswáana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Ráandi ya Afɨrɨka ya Saame",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riyáali ya Saudía",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupía ya Ãndia",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupía ya Moríisi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupía ya Shelishéeli",
+ "symbol": "SCR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "Shilíingi ya Kéenya",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Shilíingi ya Somália",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Shilíingi ya Taansanía",
+ "symbol": "TSh"
+ },
+ "UGX": {
+ "name": "Shilíingi ya Ugáanda",
+ "symbol": "UGX"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ungwíiya ya Moritánia",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "JPY": {
+ "name": "Yéeni ya Japáani",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yúani Renimínibi ya Chíina",
+ "symbol": "CNÂ¥"
+ },
+ "EUR": {
+ "name": "Yúuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/lb.json b/library/intl/resources/currency/lb.json
new file mode 100644
index 000000000..ea1cf873c
--- /dev/null
+++ b/library/intl/resources/currency/lb.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghanesch Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanesche Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algereschen Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolanesche Kwanza",
+ "symbol": "AOA"
+ },
+ "ANG": {
+ "name": "Antillen-Gulden",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "Argentinesche Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armeneschen Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Aruba-Florin",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "Aserbaidschan-Manat",
+ "symbol": "AZN"
+ },
+ "AUD": {
+ "name": "Australeschen Dollar",
+ "symbol": "AU$"
+ },
+ "BSD": {
+ "name": "Bahama-Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahrain-Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladesch-Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbados-Dollar",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Belize-Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermuda-Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutan-Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Bolivianesche Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnien an Herzegowina Konvertéierbar Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswanesch Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brasilianesche Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "Britescht Pond Sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunei-Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgaresch Lew",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundi-Frang",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "CFA-Frang (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA-Frang (BEAC)",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP-Frang",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "Chilenesche Peso",
+ "symbol": "CLP"
+ },
+ "CRC": {
+ "name": "Costa-Rica-Colón",
+ "symbol": "CRC"
+ },
+ "DKK": {
+ "name": "Dänesch Kroun",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "Dominikanesche Peso",
+ "symbol": "DOP"
+ },
+ "DJF": {
+ "name": "Dschibuti-Frang",
+ "symbol": "DJF"
+ },
+ "EGP": {
+ "name": "Egyptescht Pond",
+ "symbol": "EGP"
+ },
+ "SVC": {
+ "name": "El-Salvador-Colón",
+ "symbol": "SVC"
+ },
+ "ERN": {
+ "name": "Eritréieschen Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopescht Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland-Pond",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fidschi-Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "Gambia-Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgesche Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanaeschen Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar-Pond",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemaltekesche Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinea-Frang",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyana-Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haitianesch Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Honduras-Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong-Kong-Dollar",
+ "symbol": "HK$"
+ },
+ "INR": {
+ "name": "Indesch Rupie",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesesch Rupiah",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "Irakeschen Dinar",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "Iranesch Rial",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "Islännesch Kroun",
+ "symbol": "ISK"
+ },
+ "ILS": {
+ "name": "Israeleschen Neie Schekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaika-Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanesche Yen",
+ "symbol": "Â¥"
+ },
+ "YER": {
+ "name": "Jemen-Rial",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "Jordaneschen Dinar",
+ "symbol": "JOD"
+ },
+ "KYD": {
+ "name": "Kaiman-Dollar",
+ "symbol": "KYD"
+ },
+ "KHR": {
+ "name": "Kambodschanesche Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Kanadeschen Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Kap-Verde-Escudo",
+ "symbol": "CVE"
+ },
+ "KZT": {
+ "name": "Kasacheschen Tenge",
+ "symbol": "KZT"
+ },
+ "QAR": {
+ "name": "Katar-Riyal",
+ "symbol": "QAR"
+ },
+ "KES": {
+ "name": "Kenia-Schilling",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "Kirgisesche Som",
+ "symbol": "KGS"
+ },
+ "COP": {
+ "name": "Kolumbianesche Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Komore-Frang",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Kongo-Frang",
+ "symbol": "CDF"
+ },
+ "HRK": {
+ "name": "Kroatesche Kuna",
+ "symbol": "HRK"
+ },
+ "CUP": {
+ "name": "Kubanesche Peso",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "Kubanesche Peso (konvertibel)",
+ "symbol": "CUC"
+ },
+ "KWD": {
+ "name": "Kuwait-Dinar",
+ "symbol": "KWD"
+ },
+ "ZMW": {
+ "name": "Kwacha",
+ "symbol": "ZMW"
+ },
+ "LAK": {
+ "name": "Laoteschen Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "Libanesescht Pond",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "Liberianeschen Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libeschen Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Litauesche Litas",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Loti",
+ "symbol": "LSL"
+ },
+ "MOP": {
+ "name": "Macau-Pataca",
+ "symbol": "MOP"
+ },
+ "MGA": {
+ "name": "Madagaskar-Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawi-Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "Malayseschen Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "Maldiven-Rupie",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "Marokkaneschen Dirham",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "Mauretaneschen Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritius-Rupie",
+ "symbol": "MUR"
+ },
+ "MKD": {
+ "name": "Mazedoneschen Denar",
+ "symbol": "MKD"
+ },
+ "MXN": {
+ "name": "Mexikanesche Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldawesche Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongoleschen Tögrög",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "Mosambikanesche Metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmaresche Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibia-Dollar",
+ "symbol": "NAD"
+ },
+ "TWD": {
+ "name": "Neien Taiwan-Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "Neiséiland-Dollar",
+ "symbol": "NZ$"
+ },
+ "NPR": {
+ "name": "Nepalesesch Rupie",
+ "symbol": "NPR"
+ },
+ "NIO": {
+ "name": "Nicaraguanesche Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "Nigerianeschen Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "Nordkoreanesche Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Norwegesch Kroun",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "Omanesche Rial",
+ "symbol": "OMR"
+ },
+ "XCD": {
+ "name": "Ostkaribeschen Dollar",
+ "symbol": "EC$"
+ },
+ "PKR": {
+ "name": "Pakistanesch Rupie",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamaesche Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua-Neiguinéiesche Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayeschen Guaraní",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruaneschen Neie Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "Philippinnesche Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "Polneschen Zloty",
+ "symbol": "PLN"
+ },
+ "CNY": {
+ "name": "Renminbi Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "RWF": {
+ "name": "Ruanda-Frang",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "Rumänesche Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russesche Rubel",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "Salomonen-Dollar",
+ "symbol": "SBD"
+ },
+ "WST": {
+ "name": "Samoaneschen Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São-toméeschen Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi-Rial",
+ "symbol": "SAR"
+ },
+ "CHF": {
+ "name": "Schwäizer Frang",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "Schwedesch Kroun",
+ "symbol": "SEK"
+ },
+ "RSD": {
+ "name": "Serbeschen Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychellen-Rupie",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierra-leonesche Leone",
+ "symbol": "SLL"
+ },
+ "ZWL": {
+ "name": "Simbabwe-Dollar (2009)",
+ "symbol": "ZWL"
+ },
+ "SGD": {
+ "name": "Singapur-Dollar",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "Somalia-Schilling",
+ "symbol": "SOS"
+ },
+ "LKR": {
+ "name": "Sri-Lanka-Rupie",
+ "symbol": "LKR"
+ },
+ "SHP": {
+ "name": "St. Helena-Pond",
+ "symbol": "SHP"
+ },
+ "ZAR": {
+ "name": "Südafrikanesche Rand",
+ "symbol": "ZAR"
+ },
+ "SDG": {
+ "name": "Sudanesescht Pond",
+ "symbol": "SDG"
+ },
+ "KRW": {
+ "name": "Südkoreanesche Won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "Südsudanesescht Pond",
+ "symbol": "SSP"
+ },
+ "SRD": {
+ "name": "Surinameschen Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swasilännesche Lilangeni",
+ "symbol": "SZL"
+ },
+ "SYP": {
+ "name": "Syrescht Pond",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tadschikistan-Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tansania-Schilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thailännesche Baht",
+ "symbol": "฿"
+ },
+ "TRY": {
+ "name": "Tierkesch Lira",
+ "symbol": "TRY"
+ },
+ "TOP": {
+ "name": "Tongaeschen Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad-an-Tobago-Dollar",
+ "symbol": "TTD"
+ },
+ "CZK": {
+ "name": "Tschechesch Kroun",
+ "symbol": "CZK"
+ },
+ "TND": {
+ "name": "Tuneseschen Dinar",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "Turkmenistan-Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Uganda-Schilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukraineschen Hrywnja",
+ "symbol": "UAH"
+ },
+ "HUF": {
+ "name": "Ungaresche Forint",
+ "symbol": "HUF"
+ },
+ "UYU": {
+ "name": "Uruguayesche Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US-Dollar",
+ "symbol": "$"
+ },
+ "UZS": {
+ "name": "Usbekistan-Sum",
+ "symbol": "UZS"
+ },
+ "AED": {
+ "name": "VAE-Dirham",
+ "symbol": "AED"
+ },
+ "VUV": {
+ "name": "Vanuatu-Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezolanesche Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnameseschen Dong",
+ "symbol": "â‚«"
+ },
+ "BYR": {
+ "name": "Wäissrussesche Rubel",
+ "symbol": "BYR"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/lg.json b/library/intl/resources/currency/lg.json
new file mode 100644
index 000000000..c5d3ebfa3
--- /dev/null
+++ b/library/intl/resources/currency/lg.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Biiru ey’Esyopya",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi ey’eGambya",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinaali ey’Aligerya",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinaali ey’eBaareeni",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinaali ey’eLibya",
+ "symbol": "LYD"
+ },
+ "SDG": {
+ "name": "Dinaali ey’eSudaani",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "Dinaali ey’eTunizya",
+ "symbol": "TND"
+ },
+ "MAD": {
+ "name": "Diraamu ey’eMoroko",
+ "symbol": "MAD"
+ },
+ "AED": {
+ "name": "Diraamu eya Emireeti",
+ "symbol": "AED"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobura ey’eSantome ne Purincipe",
+ "symbol": "STD"
+ },
+ "USD": {
+ "name": "Doola ey’Amerika",
+ "symbol": "US$"
+ },
+ "AUD": {
+ "name": "Doola ey’Awusiturelya",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "Doola ey’eKanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Doola ey’eLiberya",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Doola ey’eNamibiya",
+ "symbol": "NAD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "Esikudo ey’Keepu Veredi",
+ "symbol": "CVE"
+ },
+ "BIF": {
+ "name": "Faranga ey’eburundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Faranga ey’eJjibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Faranga ey’eKomoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Faranga ey’eKongo",
+ "symbol": "CDF"
+ },
+ "MGA": {
+ "name": "Faranga ey’eMalagase",
+ "symbol": "MGA"
+ },
+ "RWF": {
+ "name": "Faranga ey’eRwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Faranga ey’eSwitizirandi",
+ "symbol": "CHF"
+ },
+ "XOF": {
+ "name": "Faranga ey’omu Afirika ey’ebugwanjuba",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Faranga ey’omu Afirika eya wakati",
+ "symbol": "FCFA"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kwaca ey’eMalawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwaca ey’eZambya",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza ey’Angola",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Lewone",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti ey’eLesoso",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "ERN": {
+ "name": "Nakifa ey’Eritureya",
+ "symbol": "ERN"
+ },
+ "NGN": {
+ "name": "Nayira ey’eNayijerya",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "GBP": {
+ "name": "Pawundi ey’eBungereza",
+ "symbol": "£"
+ },
+ "EGP": {
+ "name": "Pawundi ey’eMisiri",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Pawundi ey’eSenti Herena",
+ "symbol": "SHP"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pula ey’eBotiswana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Randi ey’eSawusafirika",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riyaali ey’eBuwarabu",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupiya ey’eBuyindi",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupiya ey’eMawurisyasi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupiya ey’eSesere",
+ "symbol": "SCR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "Silingi ey’eKenya",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Silingi ey’eSomaliya",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Silingi ey’eTanzaniya",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Silingi eya Yuganda",
+ "symbol": "USh"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "MRO": {
+ "name": "Wugwiya ey’eMawritenya",
+ "symbol": "MRO"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "JPY": {
+ "name": "Yeni ey’eJapani",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "CNY": {
+ "name": "Yuwani Reniminibi ey’eCayina",
+ "symbol": "CNÂ¥"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ln.json b/library/intl/resources/currency/ln.json
new file mode 100644
index 000000000..6bb60052f
--- /dev/null
+++ b/library/intl/resources/currency/ln.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "PAB": {
+ "name": "Balboa",
+ "symbol": "PAB"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Birɛ ya Etsiópi",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "Boliviano",
+ "symbol": "BOB"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "GHS": {
+ "name": "Cedi",
+ "symbol": "GHS"
+ },
+ "CRC": {
+ "name": "Colon ya Kosta Rika",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "GMD": {
+ "name": "Dalasi ya Gambi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "DinarÉ› ya Alizeri",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinarɛ ya Bahrɛnɛ",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinarɛ ya Libí",
+ "symbol": "LYD"
+ },
+ "SDG": {
+ "name": "Dinarɛ ya Sudá",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "DinarÉ› ya Tinizi",
+ "symbol": "TND"
+ },
+ "MAD": {
+ "name": "Dirihame ya MarokÉ›",
+ "symbol": "MAD"
+ },
+ "AED": {
+ "name": "Dirihamɛ ya Lémila alabo",
+ "symbol": "AED"
+ },
+ "STD": {
+ "name": "Dobra ya Sao Tomé mpé Presipe",
+ "symbol": "STD"
+ },
+ "USD": {
+ "name": "DolarÉ› ya Ameriki",
+ "symbol": "US$"
+ },
+ "CAD": {
+ "name": "Dolarɛ ya Kanadá",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "DolarÉ› ya Liberya",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "DolarÉ› ya Namibi",
+ "symbol": "NAD"
+ },
+ "AUD": {
+ "name": "DolarÉ› ya Ositali",
+ "symbol": "A$"
+ },
+ "CVE": {
+ "name": "Esikudo ya Kapevɛrɛ",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "ÆlÉ”Ì",
+ "symbol": "€"
+ },
+ "XOF": {
+ "name": "Falánga CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Falánga CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "BIF": {
+ "name": "Falánga ya Burundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Falánga ya Dzibuti",
+ "symbol": "DJF"
+ },
+ "GNF": {
+ "name": "Falánga ya Gine",
+ "symbol": "GNF"
+ },
+ "KMF": {
+ "name": "Falánga ya Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Falánga ya Kongó",
+ "symbol": "FC"
+ },
+ "MGA": {
+ "name": "Falánga ya Madagasikarɛ",
+ "symbol": "MGA"
+ },
+ "RWF": {
+ "name": "Falánga ya Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Falánga ya Swisɛ",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "PYG": {
+ "name": "Guarani",
+ "symbol": "PYG"
+ },
+ "HTG": {
+ "name": "Gurde",
+ "symbol": "HTG"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "AOA": {
+ "name": "Kwanza ya Angóla",
+ "symbol": "AOA"
+ },
+ "MWK": {
+ "name": "Kwasha ya Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwasha ya Zambi",
+ "symbol": "ZMW"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "LeonÉ›",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LTL": {
+ "name": "Litas ya Litwani",
+ "symbol": "LTL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti ya Lesóto",
+ "symbol": "LSL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "CZK": {
+ "name": "Motolé Sheki",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Motolé ya Danemark",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "Motolé ya Islandi",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "Motolé ya Norvej",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "Motolé ya Swédi",
+ "symbol": "SEK"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira ya Nizerya",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa ya ElitlÉ›",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "GBP": {
+ "name": "PaunÉ› ya AngÉ›lÉ›tÉ›ÌlÉ›",
+ "symbol": "£"
+ },
+ "EGP": {
+ "name": "Paunɛ ya Ezípitɛ",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Paunɛ ya Sántu elena",
+ "symbol": "SHP"
+ },
+ "DOP": {
+ "name": "Peso Dominikani",
+ "symbol": "DOP"
+ },
+ "ARS": {
+ "name": "Peso y’Argentina",
+ "symbol": "ARS"
+ },
+ "COP": {
+ "name": "Peso ya Kolombi",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "Peso ya Kuba",
+ "symbol": "CUP"
+ },
+ "MXN": {
+ "name": "Peso ya Mexiko",
+ "symbol": "MX$"
+ },
+ "CLP": {
+ "name": "Peso ya Shili",
+ "symbol": "CLP"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pula ya Botswana",
+ "symbol": "BWP"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Randɛ ya Afríka Súdi",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "Real ya Brazil",
+ "symbol": "R$"
+ },
+ "SAR": {
+ "name": "RiyalÉ› ya Alabi SawuditÉ›",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupi ya ÃndÉ›",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupi ya Morisi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupi ya Sɛshɛlɛ",
+ "symbol": "SCR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "ShilingÉ› ya Kenya",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "ShilingÉ› ya Somali",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "ShilingÉ› ya Tanzani",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "ShilingÉ› ya Uganda",
+ "symbol": "UGX"
+ },
+ "PEN": {
+ "name": "Sol Sika",
+ "symbol": "PEN"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ugwiya ya Moritani",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "JPY": {
+ "name": "Yeni ya ZapÉ”",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "YuanÉ› Renminbi ya SinÉ›",
+ "symbol": "CNÂ¥"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/lo.json b/library/intl/resources/currency/lo.json
new file mode 100644
index 000000000..7ce15ae01
--- /dev/null
+++ b/library/intl/resources/currency/lo.json
@@ -0,0 +1,634 @@
+{
+ "PYG": {
+ "name": "àºàº§àº²àº£àº²àº™àºµ ປາຣາàºàº§àº²àº",
+ "symbol": "PYG"
+ },
+ "GYD": {
+ "name": "àºàº²àºâ€‹àº¢àº²â€‹àº™àºµâ€‹àºª ໂດ​ລ່າ",
+ "symbol": "GYD"
+ },
+ "KHR": {
+ "name": "àºàº³â€‹àº›àº¹â€‹à»€àºˆàº ຣຽວ",
+ "symbol": "KHR"
+ },
+ "GNF": {
+ "name": "àºàº´â€‹àº™àº½àº™ ຟຣັງ",
+ "symbol": "GNF"
+ },
+ "GIP": {
+ "name": "àºàº´àºšâ€‹àº£àº²â€‹àº—າ ພາ​ວດ໌",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "àºàº»àº§à»€àº•àº¡àº²àº¥àº²àº™ ເຄັດຊອນ",
+ "symbol": "GTQ"
+ },
+ "KRW": {
+ "name": "ເàºàº»àº²â€‹àº«àº¥àºµà»ƒàº•à»‰ ວອນ",
+ "symbol": "â‚©"
+ },
+ "KPW": {
+ "name": "ເàºàº»àº²â€‹àº«àº¥àºµâ€‹à»€à»œàº·àº­ ວອນ",
+ "symbol": "KPW"
+ },
+ "GMD": {
+ "name": "​à»àºàº¡â€‹àºšàº½àº™ ດາ​ລາ​ຊິ",
+ "symbol": "GMD"
+ },
+ "SVC": {
+ "name": "ໂàºàº¥àº­àº‡ ເອàºàº²àº§àº²àº”à»",
+ "symbol": "SVC"
+ },
+ "KGS": {
+ "name": "ຄ​ຣີ​àºàº´àºªâ€‹â€‹àº–າ​ນິ ໂຊມ",
+ "symbol": "KGS"
+ },
+ "CDF": {
+ "name": "ຄອງ​ໂàºâ€‹àº¥àºµàºª ຟຣັງ",
+ "symbol": "CDF"
+ },
+ "KZT": {
+ "name": "ຄາ​ຊັàºâ€‹àºªàº°â€‹àº–າ​ນິ ເຕັງ​ເຈ",
+ "symbol": "KZT"
+ },
+ "QAR": {
+ "name": "ຄາ​ຕາ​ຣິ ຣຽວ",
+ "symbol": "QAR"
+ },
+ "CUC": {
+ "name": "ຄິວà»àºšàº™ ຄອນເວີດຕິໂບ ເປໂຊ",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "ຄິວà»àºšàº™ ເປໂຊ",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "ຄູ​ເວ​ຕິ ດິ​ນາ",
+ "symbol": "KWD"
+ },
+ "KES": {
+ "name": "ເຄນ​ຢັນ ຊິວ​ລິງ",
+ "symbol": "KES"
+ },
+ "CVE": {
+ "name": "ເຄບ ເວີດ​ດີນ ເອ​ສ​ຄູ​ໂດ",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "ເຄ​à»àº¡àº™ ໄອ​à»àº¥àº™ ໂດ​ລ່າ",
+ "symbol": "KYD"
+ },
+ "CRC": {
+ "name": "ໂຄສຕາ ຣິàºàº±àº™ ໂຄລອນ",
+ "symbol": "CRC"
+ },
+ "KMF": {
+ "name": "ໂຄ​ໂມ​ຣຽນ ຟຣັງ",
+ "symbol": "KMF"
+ },
+ "HRK": {
+ "name": "ໂຄຣ​ເອ​ທຽນ ຄູ​ນາ",
+ "symbol": "HRK"
+ },
+ "CZK": {
+ "name": "ໂຄ​ຣູ​ນາ ເຊàº",
+ "symbol": "CZK"
+ },
+ "COP": {
+ "name": "ໂຄ​ລົມ​ບຽນ ເປ​ໂຊ",
+ "symbol": "COP"
+ },
+ "GEL": {
+ "name": "ຈà»â€‹àºˆàº½àº™ ລາ​ຣິ",
+ "symbol": "GEL"
+ },
+ "JOD": {
+ "name": "ຈà»â€‹à»àº”​ນຽນ ດິ​ນາ",
+ "symbol": "JOD"
+ },
+ "JMD": {
+ "name": "​ຈາ​ໄມ​àºàº±àº™ ໂດ​ລ່າ",
+ "symbol": "JMD"
+ },
+ "CNY": {
+ "name": "ຈີນ ຢວນ",
+ "symbol": "CNÂ¥"
+ },
+ "SZL": {
+ "name": "ສະ​ວາ​ຊິ ລິ​ລັນ​àºàº´â€‹àº™àºµ",
+ "symbol": "SZL"
+ },
+ "CHF": {
+ "name": "ສະ​ວິ​ສ ຟ​ຣັງ",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "ສະ​ວີ​ດິ​ຊ ໂຄຣ​ນາ",
+ "symbol": "SEK"
+ },
+ "AED": {
+ "name": "ສະ​ຫະ​ລັດ​ອາ​ຣັບ​ອາ​ມິ​ເຣດ ເດີ​à»àº®àº¡",
+ "symbol": "AED"
+ },
+ "SGD": {
+ "name": "ສິງ​àºàº°â€‹à»‚ປ ໂດ​ລ່າ",
+ "symbol": "SGD"
+ },
+ "LKR": {
+ "name": "ສີ​ລັງ​àºàº² ຣູ​ປີ",
+ "symbol": "LKR"
+ },
+ "WST": {
+ "name": "ຊາ​ໂມນ ທາ​ລາ",
+ "symbol": "WST"
+ },
+ "SAR": {
+ "name": "ຊາ​ອູ​ດິ ຣິ​ຢອນ",
+ "symbol": "SAR"
+ },
+ "CLP": {
+ "name": "ຊິ​ລຽນ ເປ​ໂຊ",
+ "symbol": "CLP"
+ },
+ "SYP": {
+ "name": "ຊີ​ຣຽນ ພາວດ໌",
+ "symbol": "SYP"
+ },
+ "XPF": {
+ "name": "ຊີ​ເອັບ​ພີ ຟຣັງ",
+ "symbol": "CFPF"
+ },
+ "SDG": {
+ "name": "ຊູ​ດານ​ນີ​ສ ພາວດ໌",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "ຊູ​ຣິ​ນາ​ມີ​ສ ໂດ​ລ່າ",
+ "symbol": "SRD"
+ },
+ "SCR": {
+ "name": "ເຊ​ເຊວ​ລອàºâ€‹àºªà»Œ ຣູ​ປີ",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "ເຊàºâ€‹àº™àº² ​ເລໂອ​ນຽນ ເລ​ໂອນ",
+ "symbol": "SLL"
+ },
+ "GHS": {
+ "name": "ເຊ​ດິ àºàº²â€‹àº™àº²â€‹àº­àº½àº™",
+ "symbol": "GHS"
+ },
+ "SHP": {
+ "name": "ເຊນ ເຮ​ເລ​ນາ ພາວດ໌",
+ "symbol": "SHP"
+ },
+ "RSD": {
+ "name": "ເຊີ​ບຽນ ດິ​ນາ",
+ "symbol": "RSD"
+ },
+ "STD": {
+ "name": "ເຊົາ ໂທ​ເມ à»àº­àº™ ພ​ຣິນ​ຊິ​ປີ ໂດບຣາ",
+ "symbol": "STD"
+ },
+ "SSP": {
+ "name": "ເຊົາ​ທ໌ ຊູ​ດານ​ນີ​ສ ພາວດ໌",
+ "symbol": "SSP"
+ },
+ "ZAR": {
+ "name": "ເຊົາທ໌ ອາ​ຟຣິ​àºàº±àº™ à»àº£àº™àº”໌",
+ "symbol": "ZAR"
+ },
+ "ZMW": {
+ "name": "à»àºŠàº¡â€‹àºšàº½àº™ ຄວາ​ຊາ",
+ "symbol": "ZMW"
+ },
+ "SOS": {
+ "name": "ໂຊ​ມາ​ລິ ຊິວ​ລິງ",
+ "symbol": "SOS"
+ },
+ "SBD": {
+ "name": "ໂຊ​ໂລມອນ ໄອ​à»àº¥àº™ ໂດ​ລ່າ",
+ "symbol": "SBD"
+ },
+ "JPY": {
+ "name": "àºàºµà»ˆâ€‹àº›àº¸à»ˆàº™ ເຢນ",
+ "symbol": "JPÂ¥"
+ },
+ "ZWL": {
+ "name": "ດອນລາ ຊິມບັບເວ (2009)",
+ "symbol": "ZWL"
+ },
+ "DJF": {
+ "name": "​ດິ​ບູ​ຈຽນ ຟຣັງ",
+ "symbol": "DJF"
+ },
+ "DKK": {
+ "name": "à»àº”ນ​ນິ​ຊ ໂຄຣນ",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "ໂດ​ມິ​ນິ​àºàº±àº™ ເປ​ໂຊ",
+ "symbol": "DOP"
+ },
+ "BBD": {
+ "name": "ໂດລ່າ ບາບາດຽນ",
+ "symbol": "BBD"
+ },
+ "BSD": {
+ "name": "ໂດລ່າ ບາຮາມຽນ",
+ "symbol": "BSD"
+ },
+ "CAD": {
+ "name": "ໂດລ່າຄານາດາ",
+ "symbol": "CA$"
+ },
+ "USD": {
+ "name": "​ໂດ​ລ່າ​ສະ​ຫະ​ລັດຯ",
+ "symbol": "US$"
+ },
+ "BZD": {
+ "name": "ໂດ​ລ່າ​ເບ​ລິ​ຊ",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "ໂດ​ລ່າ​ເບີ​ມິວ​ດາ",
+ "symbol": "BMD"
+ },
+ "TOP": {
+ "name": "ຕອງ​àºàº±àº™ ປາ​ອັງ​àºàº²",
+ "symbol": "TOP"
+ },
+ "TND": {
+ "name": "ຕູ​ນິ​ຊຽນ ດິ​ນາ",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "ເຕີàºâ€‹à»€àº¡â€‹àº™àº´â€‹àºªâ€‹àº–າ​ນິ ມາ​ນັດ",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "ເຕີ​àºàº´â€‹àºŠ ລິ​ຣາ",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "ທ​ຣິ​ນິ​à»àº”ດ à»àº­àº™ ໂທ​ບາ​ໂຠໂດ​ລ່າ",
+ "symbol": "TTD"
+ },
+ "TJS": {
+ "name": "ທາ​ຈິ​àºàº´â€‹â€‹àº–າ​ນິ ໂຊ​ໂມ​ນິ",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "ທານ​ຊາ​ນຽນ ຊິວ​ລິງ",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "ໄທ ບາດ",
+ "symbol": "฿"
+ },
+ "NOK": {
+ "name": "ນà»â€‹à»€àº§â€‹àºàº½àº™ ​ໂຄຣນ",
+ "symbol": "NOK"
+ },
+ "NAD": {
+ "name": "ນາ​ມິ​ບຽນ ໂດ​ລ່າ",
+ "symbol": "NAD"
+ },
+ "NIO": {
+ "name": "ນິàºàº²àº£àº²àºàº§àº™ ໂຄໂດບາ",
+ "symbol": "NIO"
+ },
+ "TWD": {
+ "name": "ນິວ ໄຕ້​ຫວັນ ໂດ​ລ່າ",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "ນິວ​ຊີ​à»àº¥àº™ ໂດ​ລ່າ",
+ "symbol": "NZ$"
+ },
+ "ANG": {
+ "name": "ເນ​ເທີ​à»àº¥àº™ à»àº­àº™â€‹àº•àº´â€‹àº¥àº½àº™ àºàº´àº§â€‹à»€àº”ີ",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "ເນ​ປານ ຣູ​ປີ",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "ໄນ​ຣາ ​ໄນເຈີ​ຣຽນ",
+ "symbol": "NGN"
+ },
+ "BRL": {
+ "name": "ບຣາ​ຊິ​ລຽນ ຣຽວ",
+ "symbol": "R$"
+ },
+ "BND": {
+ "name": "ບຣູ​ໄນ ໂດ​ລ່າ",
+ "symbol": "BND"
+ },
+ "BAM": {
+ "name": "ບອ​ສ​ເນàº-ເຮີ​ເຊ​ໂàºàº§àº´â€‹àº™àº² ຄອນ​ເວີດ​ຕິ​ໂບ ມາàº",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "ບອດ​ສະ​ວາ​ນານ ພູ​ລາ",
+ "symbol": "BWP"
+ },
+ "BGN": {
+ "name": "ບັງ​àºàº²â€‹àº£àº½àº™ ເລບ",
+ "symbol": "BGN"
+ },
+ "BDT": {
+ "name": "ບັງ​ຄລາ​ເທດ ຕາ​àºàº²",
+ "symbol": "BDT"
+ },
+ "BHD": {
+ "name": "ບາ​ໄຣ​ນິ ດິ​ນາ",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "ບຸ​ຣັນ​ດຽນ ຟຣັງ",
+ "symbol": "BIF"
+ },
+ "BYR": {
+ "name": "ເບ​ລາ​ຣຸ​ສ​ຊຽນ ຣູ​ເບິນ",
+ "symbol": "BYR"
+ },
+ "BOB": {
+ "name": "ໂບ​ລິ​ວຽນ ໂບ​ລິ​ເວàºâ€‹à»‚ນ",
+ "symbol": "BOB"
+ },
+ "PKR": {
+ "name": "ປາ​àºàº´â€‹àºªàº–ານ ຣູ​ປີ",
+ "symbol": "PKR"
+ },
+ "PGK": {
+ "name": "ປາ​ປົວ ນິວ àºàº´â€‹àº™àº½àº™ àºàº´â€‹àº™àº²",
+ "symbol": "PGK"
+ },
+ "PEN": {
+ "name": "ເປ​ຣູ​ວຽນ ນູ​ໂວ ໂຊ​ລ໌",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "ໂປ​ລິ​ຊ ຊະ​ລà»â€‹àº•àºµ",
+ "symbol": "PLN"
+ },
+ "PAB": {
+ "name": "ພານາມານຽນ ບອນບົວ",
+ "symbol": "PAB"
+ },
+ "GBP": {
+ "name": "ພາວ​ດ໌ ສະ​ເຕີ​ຣິງ (ອັງ​àºàº´àº”)",
+ "symbol": "£"
+ },
+ "BTN": {
+ "name": "ພູ​ຖານ ງຸນດຣັມ",
+ "symbol": "BTN"
+ },
+ "XAF": {
+ "name": "ຟຣັງ ເຊຟານ ທະນາຄານລັດອາຟຣິàºàº²àºàº²àº‡",
+ "symbol": "FCFA"
+ },
+ "FKP": {
+ "name": "ຟອ​ລ໌àºâ€‹à»àº¥àº™ ໄອ​à»àº¥àº™â€‹àºªà»Œ ພາວ​ດ໌",
+ "symbol": "FKP"
+ },
+ "XOF": {
+ "name": "ຟັງເຊຟານ ອາຟຣິàºàº²àº•àº²à»€àº§àº±àº™àº•àº»àº",
+ "symbol": "CFA"
+ },
+ "FJD": {
+ "name": "ຟິ​ຈຽນ ໂດ​ລ່າ",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "ຟິ​ລິບ​ປິນ ເປ​ໂຊ",
+ "symbol": "PHP"
+ },
+ "MAD": {
+ "name": "ມà»â€‹àº£àº±àº­àºâ€‹à»àº„ນ​ ເດີ​à»àº®àº¡",
+ "symbol": "MAD"
+ },
+ "MNT": {
+ "name": "ມອງ​ໂàºâ€‹àº¥àº½àº™ ຕູàºàº£àº´àº",
+ "symbol": "MNT"
+ },
+ "MDL": {
+ "name": "ມອນ​ໂດ​à»àº§àº™ ເລ​ອູ",
+ "symbol": "MDL"
+ },
+ "MVR": {
+ "name": "ມັ​ລ​ດິ​ວຽນ ຣູ​ຟິ​ຢາ",
+ "symbol": "MVR"
+ },
+ "MOP": {
+ "name": "ມາ​ເàºàº»à»‰àº² ປາ​​ຕາ​àºàº²",
+ "symbol": "MOP"
+ },
+ "MGA": {
+ "name": "ມາ​ລາ​àºàº²â€‹àºŠàºµ ອາ​ເຣàºâ€‹àº£àºµ",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "ມາ​ລາ​ວຽນ ຄວາ​ຊາ",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "ມາ​ເລ​ເຊຠຣິງ​àºàº´àº”",
+ "symbol": "MYR"
+ },
+ "MRO": {
+ "name": "ມົວ​ຣິ​ທາ​ນຽນ ອູ​àºàº´àº§â€‹àº¢àº²",
+ "symbol": "MRO"
+ },
+ "MMK": {
+ "name": "ມຽນ​ມາ ຈ໊າດ",
+ "symbol": "MMK"
+ },
+ "MXN": {
+ "name": "ເມັàºàºŠàº´àºàº±àº™ ເປໂຊ",
+ "symbol": "MX$"
+ },
+ "MUR": {
+ "name": "ເມົາ​ຣິ​ທຽນ ຣູ​ປີ",
+ "symbol": "MUR"
+ },
+ "MKD": {
+ "name": "à»àº¡àº±àºâ€‹à»€àºŠâ€‹à»‚ດ​ນຽນ ເດ​ນາ",
+ "symbol": "MKD"
+ },
+ "MZN": {
+ "name": "ໂມ​à»àºŠàº¡â€‹àºšàº´â€‹àºàº±àº™ ເມ​ທິ​ຄອນ",
+ "symbol": "MZN"
+ },
+ "UAH": {
+ "name": "ຢູ​ເຄຣ​ນຽນ ຮະ​ຣີບ​ເນàº",
+ "symbol": "UAH"
+ },
+ "EUR": {
+ "name": "ຢູ​ໂຣ",
+ "symbol": "€"
+ },
+ "YER": {
+ "name": "ເຢ​ເມ​ນິ ຣຽວ",
+ "symbol": "YER"
+ },
+ "RWF": {
+ "name": "ຣະ​ວັນ​ດັນ ຟຣັງ",
+ "symbol": "RWF"
+ },
+ "RUB": {
+ "name": "ຣັສ​ຊຽນ ຣູ​ເບິນ",
+ "symbol": "RUB"
+ },
+ "RON": {
+ "name": "ໂຣ​ມາ​ນຽນ ເລ​ອູ",
+ "symbol": "RON"
+ },
+ "LAK": {
+ "name": "ລາວ àºàºµàºš",
+ "symbol": "â‚­"
+ },
+ "LTL": {
+ "name": "ລິ​ທົວ​ນຽນ ລິ​ທັ​ສ",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "ລິບ​ບຽນ ດິ​ນາ",
+ "symbol": "LYD"
+ },
+ "LRD": {
+ "name": "ລິ​ເບີ​ຣຽນ ໂດ​ລ່າ",
+ "symbol": "LRD"
+ },
+ "LBP": {
+ "name": "ເລ​ບາ​ນີ​ສ ພາວດ໌",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "ໂລຕິ ເລໂຊໂຕ",
+ "symbol": "LSL"
+ },
+ "VUV": {
+ "name": "​ວາ​ນົວ​ຕູ ວາ​ຕູ",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "ເວ​ເນ​ຊູ​ເອ​ລັນ ໂບ​ລິ​ວາ",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "ຫວຽດ​ນາມ ດົງ",
+ "symbol": "â‚«"
+ },
+ "AUD": {
+ "name": "ອອສ​ເຕຣ​ລຽນ ໂດ​ລ່າ",
+ "symbol": "A$"
+ },
+ "AWG": {
+ "name": "ອະຣູà»àºšàº™ ຟລà»àº£àº´àº™",
+ "symbol": "AWG"
+ },
+ "AFN": {
+ "name": "ອັຟ​àºàº±àº™ ອັຟ​àºàº²â€‹àº™àº´",
+ "symbol": "AFN"
+ },
+ "DZD": {
+ "name": "ອັລ​ເຈີ​ຣຽນ ດິ​ນາ",
+ "symbol": "DZD"
+ },
+ "ALL": {
+ "name": "ອັລ​ບາ​ນຽນ ເລàº",
+ "symbol": "ALL"
+ },
+ "ARS": {
+ "name": "ອາ​ເຈນ​ທິ​ນາ ເປ​ໂຊ",
+ "symbol": "ARS"
+ },
+ "AZN": {
+ "name": "ອາ​ເຊີ​ໄບ​ຈາ​ນິ ມາ​ນັດ",
+ "symbol": "AZN"
+ },
+ "AMD": {
+ "name": "ອາ​ເມ​ນຽນ à»àº”ຣມ",
+ "symbol": "AMD"
+ },
+ "ILS": {
+ "name": "ອິສ​ຣາ​ເອວ​ລິ ນິວ ເຊ​ເàºàº§",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "ອິນ​ເດຠຣູ​ປີ",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "ອິນ​ໂດ​ເນ​ຊຽນ ໂດ​ລ່າ",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "ອິ​ຣັàºâ€‹àºàº´ ດິ​ນາ",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "ອິ​ຣາ​ນິ ຣຽວ",
+ "symbol": "IRR"
+ },
+ "ERN": {
+ "name": "ອິ​ຣິ​ທຣຽນ à»àº™àºâ€‹àºŸâ€‹àº²",
+ "symbol": "ERN"
+ },
+ "XCD": {
+ "name": "ອີ​ສ ຄາ​ຣິ​ບຽນ ໂດ​ລ່າ",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "ອີ​ຢິບ​ທຽນ ພາວດ໌",
+ "symbol": "EGP"
+ },
+ "UZS": {
+ "name": "ອຸສ​ເບ​àºàº´â€‹àºªâ€‹àº–ານ ໂຊມ",
+ "symbol": "UZS"
+ },
+ "UGX": {
+ "name": "ອູ​àºàº±àº™â€‹àº”ັນ ຊິວ​ລິງ",
+ "symbol": "UGX"
+ },
+ "UYU": {
+ "name": "ອູ​ຣຸ​àºàº»àº§â€‹àº¢àº²àº™ ເປ​ໂຊ",
+ "symbol": "UYU"
+ },
+ "ETB": {
+ "name": "ເອ​ທິ​ໂອ​ປຽນ ເບີ​ຣ໌",
+ "symbol": "ETB"
+ },
+ "AOA": {
+ "name": "à»àº­àº‡â€‹à»‚àºâ€‹àº¥àº±àº™ ຄວນ​ຊາ",
+ "symbol": "AOA"
+ },
+ "OMR": {
+ "name": "ໂອ​ມາ​ນິ ຣຽວ",
+ "symbol": "OMR"
+ },
+ "ISK": {
+ "name": "ໄອ​ສ໌​à»àº¥àº™â€‹àº”ິຠໂຄຣ​ນາ",
+ "symbol": "ISK"
+ },
+ "HKD": {
+ "name": "ຮອງ​àºàº»àº‡ ໂດ​ລ່າ",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "ຮອນດູà»àº£àº™ ເລມພິຣາ",
+ "symbol": "HNL"
+ },
+ "HUF": {
+ "name": "ຮັງ​àºàº²â€‹àº£àº½àº™ ຟà»â€‹àº£àº´àº™",
+ "symbol": "HUF"
+ },
+ "HTG": {
+ "name": "ໄຮ​ຕຽນ àºàº»àº§â€‹à»€àº”",
+ "symbol": "HTG"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/lt.json b/library/intl/resources/currency/lt.json
new file mode 100644
index 000000000..3035cdf12
--- /dev/null
+++ b/library/intl/resources/currency/lt.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afganistano afganis",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanijos lekas",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Alžyro dinaras",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolos kvanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentinos pesas",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "ArmÄ—nijos dramas",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Arubos guldenas",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australijos doleris",
+ "symbol": "AUD"
+ },
+ "AZN": {
+ "name": "Azerbaidžano manatas",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamų doleris",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahreino dinaras",
+ "symbol": "BHD"
+ },
+ "BYR": {
+ "name": "Baltarusijos rublis",
+ "symbol": "BYR"
+ },
+ "BDT": {
+ "name": "Bangladešo taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadoso doleris",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Belizo doleris",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudos doleris",
+ "symbol": "BMD"
+ },
+ "BOB": {
+ "name": "Bolivijos bolivijanas",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnijos ir Hercegovinos konvertuojamoji markÄ—",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botsvanos pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brazilijos realas",
+ "symbol": "BRL"
+ },
+ "BND": {
+ "name": "BrunÄ—jaus doleris",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgarijos levas",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundžio frankas",
+ "symbol": "BIF"
+ },
+ "BTN": {
+ "name": "Butano ngultrumas",
+ "symbol": "BTN"
+ },
+ "XOF": {
+ "name": "CFA BCEAO frankas",
+ "symbol": "XOF"
+ },
+ "XAF": {
+ "name": "CFA BEAC frankas",
+ "symbol": "XAF"
+ },
+ "XPF": {
+ "name": "CFP frankas",
+ "symbol": "XPF"
+ },
+ "CZK": {
+ "name": "ÄŒekijos krona",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "ÄŒilÄ—s pesas",
+ "symbol": "CLP"
+ },
+ "DKK": {
+ "name": "Danijos krona",
+ "symbol": "DKK"
+ },
+ "GBP": {
+ "name": "Didžiosios Britanijos svaras sterlingų",
+ "symbol": "GBP"
+ },
+ "DOP": {
+ "name": "Dominikos pesas",
+ "symbol": "DOP"
+ },
+ "DJF": {
+ "name": "DžibuÄio frankas",
+ "symbol": "DJF"
+ },
+ "EGP": {
+ "name": "Egipto svaras",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "EritrÄ—jos nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Etiopijos biras",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euras",
+ "symbol": "EUR"
+ },
+ "FKP": {
+ "name": "Falklando salų svaras",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fidžio doleris",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "Filipinų pesas",
+ "symbol": "PHP"
+ },
+ "GYD": {
+ "name": "Gajanos doleris",
+ "symbol": "GYD"
+ },
+ "GMD": {
+ "name": "Gambijos dalasis",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "Ganos sedis",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltaro svaras",
+ "symbol": "GIP"
+ },
+ "GEL": {
+ "name": "Gruzijos laris",
+ "symbol": "GEL"
+ },
+ "GTQ": {
+ "name": "Gvatemalos ketcalis",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "GvinÄ—jos frankas",
+ "symbol": "GNF"
+ },
+ "HTG": {
+ "name": "HaiÄio gurdas",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Hondūro lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Honkongo doleris",
+ "symbol": "HKD"
+ },
+ "INR": {
+ "name": "Indijos rupija",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "Indonezijos rupija",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "Irako dinaras",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "Irano rialas",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "Islandijos krona",
+ "symbol": "ISK"
+ },
+ "ILS": {
+ "name": "Izraelio naujasis Å¡ekelis",
+ "symbol": "ILS"
+ },
+ "JMD": {
+ "name": "Jamaikos doleris",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japonijos jena",
+ "symbol": "JPY"
+ },
+ "USD": {
+ "name": "JAV doleris",
+ "symbol": "USD"
+ },
+ "YER": {
+ "name": "Jemeno rialas",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "Jordanijos dinaras",
+ "symbol": "JOD"
+ },
+ "AED": {
+ "name": "Jungtinių Arabų Emyratų dirhamas",
+ "symbol": "AED"
+ },
+ "KYD": {
+ "name": "Kaimanų salų doleris",
+ "symbol": "KYD"
+ },
+ "KHR": {
+ "name": "Kambodžos rielis",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Kanados doleris",
+ "symbol": "CAD"
+ },
+ "QAR": {
+ "name": "Kataro rialas",
+ "symbol": "QAR"
+ },
+ "KZT": {
+ "name": "Kazachstano tengÄ—",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenijos Å¡ilingas",
+ "symbol": "KES"
+ },
+ "CNY": {
+ "name": "Kinijos ženminbi juanis",
+ "symbol": "CNY"
+ },
+ "KGS": {
+ "name": "Kirgizijos somas",
+ "symbol": "KGS"
+ },
+ "COP": {
+ "name": "Kolumbijos pesas",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Komoro frankas",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Kongo frankas",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Kosta Rikos kolonas",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "Kroatijos kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "Kubos konvertuojamasis pesas",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Kubos pesas",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "Kuveito dinaras",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "Laoso kipas",
+ "symbol": "LAK"
+ },
+ "PLN": {
+ "name": "Lenkijos zlotas",
+ "symbol": "PLN"
+ },
+ "LSL": {
+ "name": "Lesoto lotis",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "Libano svaras",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "Liberijos doleris",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libijos dinaras",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Lietuvos litas",
+ "symbol": "LTL"
+ },
+ "MGA": {
+ "name": "Madagaskaro ariaris",
+ "symbol": "MGA"
+ },
+ "MOP": {
+ "name": "Makao pataka",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Makedonijos denaras",
+ "symbol": "MKD"
+ },
+ "MYR": {
+ "name": "Malaizijos ringitas",
+ "symbol": "MYR"
+ },
+ "MWK": {
+ "name": "Malavio kvaÄa",
+ "symbol": "MWK"
+ },
+ "MVR": {
+ "name": "Maldyvų rufija",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "Maroko dirhamas",
+ "symbol": "MAD"
+ },
+ "MUR": {
+ "name": "Mauricijaus rupija",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "Mauritanijos ugija",
+ "symbol": "MRO"
+ },
+ "MXN": {
+ "name": "Meksikos pesas",
+ "symbol": "MXN"
+ },
+ "MMK": {
+ "name": "Mianmaro kijatas",
+ "symbol": "MMK"
+ },
+ "MDL": {
+ "name": "Moldovos lÄ—ja",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolijos tugrikas",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "Mozambiko metikalis",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "Namibijos doleris",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "Naujosios Zelandijos doleris",
+ "symbol": "NZD"
+ },
+ "NPR": {
+ "name": "Nepalo rupija",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "Nigerijos naira",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "Nikaragvos kordoba",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "Norvegijos krona",
+ "symbol": "NOK"
+ },
+ "ANG": {
+ "name": "Olandijos Antilų guldenas",
+ "symbol": "ANG"
+ },
+ "OMR": {
+ "name": "Omano rialas",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistano rupija",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamos balboja",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua Naujosios GvinÄ—jos kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paragvajaus guaranis",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peru naujasis solis",
+ "symbol": "PEN"
+ },
+ "ZAR": {
+ "name": "Pietų Afrikos Respublikos randas",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "Pietų Korėjos vonas",
+ "symbol": "KRW"
+ },
+ "SSP": {
+ "name": "Pietų Sudano svaras",
+ "symbol": "SSP"
+ },
+ "XCD": {
+ "name": "Rytų Karibų doleris",
+ "symbol": "XCD"
+ },
+ "RWF": {
+ "name": "Ruandos frankas",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "Rumunijos lÄ—ja",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Rusijos rublis",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "Saliamono salų doleris",
+ "symbol": "SBD"
+ },
+ "SVC": {
+ "name": "Salvadoro kolonas",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoa tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "San TomÄ—s ir PrincipÄ—s dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudo Arabijos rijalas",
+ "symbol": "SAR"
+ },
+ "SCR": {
+ "name": "Seišelių rupija",
+ "symbol": "SCR"
+ },
+ "RSD": {
+ "name": "Serbijos dinaras",
+ "symbol": "RSD"
+ },
+ "SLL": {
+ "name": "Siera LeonÄ—s leonÄ—",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapūro doleris",
+ "symbol": "SGD"
+ },
+ "SYP": {
+ "name": "Sirijos svaras",
+ "symbol": "SYP"
+ },
+ "SOS": {
+ "name": "Somalio Å¡ilingas",
+ "symbol": "SOS"
+ },
+ "SDG": {
+ "name": "Sudano svaras",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surimano doleris",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Svazilando lilangenis",
+ "symbol": "SZL"
+ },
+ "KPW": {
+ "name": "Å iaurÄ—s KorÄ—jos vonas",
+ "symbol": "KPW"
+ },
+ "LKR": {
+ "name": "Å ri Lankos rupija",
+ "symbol": "LKR"
+ },
+ "SHP": {
+ "name": "Šv. Elenos salų svaras",
+ "symbol": "SHP"
+ },
+ "SEK": {
+ "name": "Å vedijos krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Å veicarijos frankas",
+ "symbol": "CHF"
+ },
+ "TJS": {
+ "name": "Tadžikistano somonis",
+ "symbol": "TJS"
+ },
+ "THB": {
+ "name": "Tailando batas",
+ "symbol": "THB"
+ },
+ "TWD": {
+ "name": "Taivano naujasis doleris",
+ "symbol": "TWD"
+ },
+ "TZS": {
+ "name": "Tanzanijos Å¡ilingas",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "Tongo paanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidado ir Tobago doleris",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tuniso dinaras",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turkijos lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "TurkmÄ—nistano manatas",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandos Å¡ilingas",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainos grivina",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "Urugvajaus pesas",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "Uzbekistano sumas",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu vatas",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venesuelos bolivaras",
+ "symbol": "VEF"
+ },
+ "HUF": {
+ "name": "Vengrijos forintas",
+ "symbol": "HUF"
+ },
+ "VND": {
+ "name": "Vietnamo dongas",
+ "symbol": "VND"
+ },
+ "ZMW": {
+ "name": "Zambijos kvaÄa",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZimbabvÄ—s doleris (2009)",
+ "symbol": "ZWL"
+ },
+ "CVE": {
+ "name": "Žaliojo Kyšulio eskudas",
+ "symbol": "CVE"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/lu.json b/library/intl/resources/currency/lu.json
new file mode 100644
index 000000000..a82c98852
--- /dev/null
+++ b/library/intl/resources/currency/lu.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Bira wa Etshiopi",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobra wa Sao Tome ne Presipe",
+ "symbol": "STD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "Esikuludo wa Kapevere",
+ "symbol": "CVE"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "EUR": {
+ "name": "Iro",
+ "symbol": "€"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "AOA": {
+ "name": "Kwanza wa Angola",
+ "symbol": "AOA"
+ },
+ "MWK": {
+ "name": "Kwasha wa Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwasha wa Zambi",
+ "symbol": "ZMW"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leone",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti wa Lesoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira wa Nizerya",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa wa Elitle",
+ "symbol": "ERN"
+ },
+ "GMD": {
+ "name": "Ndalasi wa Ngambi",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Ndina wa Alijeri",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Ndina wa Bahrene",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Ndina wa Libi",
+ "symbol": "LYD"
+ },
+ "SDG": {
+ "name": "Ndina wa Suda",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "Ndina wa Tinizi",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Ndiriha wa Lemila alabu",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Ndiriha wa Maroke",
+ "symbol": "MAD"
+ },
+ "USD": {
+ "name": "Ndola wa Ameriki",
+ "symbol": "US$"
+ },
+ "CAD": {
+ "name": "Ndola wa Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Ndola wa Liberya",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Ndola wa Namibi",
+ "symbol": "NAD"
+ },
+ "AUD": {
+ "name": "Ndola wa Ositali",
+ "symbol": "A$"
+ },
+ "XOF": {
+ "name": "Nfalanga CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Nfalanga CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "BIF": {
+ "name": "Nfalanga wa Bulundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Nfalanga wa Dzibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Nfalanga wa Komoru",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Nfalanga wa Kongu",
+ "symbol": "FC"
+ },
+ "MGA": {
+ "name": "Nfalanga wa Madagasikare",
+ "symbol": "MGA"
+ },
+ "RWF": {
+ "name": "Nfalanga wa Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Nfalanga wa Swise",
+ "symbol": "CHF"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "KES": {
+ "name": "Nshili wa Kenya",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Nshili wa Somali",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Nshili wa Tanzani",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Nshili wa Uganda",
+ "symbol": "UGX"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "GBP": {
+ "name": "Pauni wa Angeletele",
+ "symbol": "£"
+ },
+ "EGP": {
+ "name": "Pauni wa Mushidi",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Pauni wa Santu Elena",
+ "symbol": "SHP"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pula wa Botswana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Rande wa Afrika wa Mwinshi",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riyale wa Alabu Nsawu",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupi wa Inde",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupia wa Morisi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupya wa Seshele",
+ "symbol": "SCR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ugwiya wa Moritani",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "JPY": {
+ "name": "Yeni wa ZapÉ”",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yuani Renminbi wa Shine",
+ "symbol": "CNÂ¥"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/luo.json b/library/intl/resources/currency/luo.json
new file mode 100644
index 000000000..82027831e
--- /dev/null
+++ b/library/intl/resources/currency/luo.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "MGA": {
+ "name": "Ariary ya Bukini",
+ "symbol": "MGA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Birr mar Ethiopia",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi ya Gambia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinari ya Aljeria",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinari ya Bahareni",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinari ya Libya",
+ "symbol": "LYD"
+ },
+ "TND": {
+ "name": "Dinari ya Tunisia",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham ya Falme za Kiarabu",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham ya Moroko",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobra ya Sao Tome na Principe",
+ "symbol": "STD"
+ },
+ "USD": {
+ "name": "Dola",
+ "symbol": "US$"
+ },
+ "CAD": {
+ "name": "Dola mar Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dola mar Liberia",
+ "symbol": "LRD"
+ },
+ "AUD": {
+ "name": "Dola ya Australia",
+ "symbol": "A$"
+ },
+ "NAD": {
+ "name": "Dola ya Namibia",
+ "symbol": "NAD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "Eskudo ya Kepuvede",
+ "symbol": "CVE"
+ },
+ "XOF": {
+ "name": "Faranga CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Faranga CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "BIF": {
+ "name": "Faranga ya Burundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Faranga ya Jibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Faranga ya Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Faranga ya Kongo",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Faranga ya Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Faranga ya Uswisi",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kwacha ya Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha ya Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza ya Angola",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leoni",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti ya Lesoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira ya Nijeria",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa ya Eritrea",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "EGP": {
+ "name": "Paund mar Misri",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "Pauni mar Uingereza",
+ "symbol": "£"
+ },
+ "SHP": {
+ "name": "Pauni ya Santahelena",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Pauni ya Sudani",
+ "symbol": "SDG"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pula mar Botswana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Randi ya Afrika Kusini",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riyal ya Saudia",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupia ya India",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupia ya Morisi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupia ya Shelisheli",
+ "symbol": "SCR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "Shilingi ya Somalia",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Shilingi ya Tanzania",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Shilingi ya Uganda",
+ "symbol": "UGX"
+ },
+ "KES": {
+ "name": "Siling mar Kenya",
+ "symbol": "Ksh"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ugwiya ya Moritania",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "JPY": {
+ "name": "Yen mar Japan",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yuan Renminbi ya China",
+ "symbol": "CNÂ¥"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/luy.json b/library/intl/resources/currency/luy.json
new file mode 100644
index 000000000..b92aaa572
--- /dev/null
+++ b/library/intl/resources/currency/luy.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "MGA": {
+ "name": "Ariary ya Bukini",
+ "symbol": "MGA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Bir ya Uhabeshi",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi ya Gambia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinari ya Aljeria",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinari ya Bahareni",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinari ya Libya",
+ "symbol": "LYD"
+ },
+ "TND": {
+ "name": "Dinari ya Tunisia",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham ya Falme za Kiarabu",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham ya Moroko",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobra ya Sao Tome na Principe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "Dola ya Australia",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "Dola ya Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dola ya Liberia",
+ "symbol": "LRD"
+ },
+ "USD": {
+ "name": "Dola ya Marekani",
+ "symbol": "US$"
+ },
+ "NAD": {
+ "name": "Dola ya Namibia",
+ "symbol": "NAD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "Eskudo ya Kepuvede",
+ "symbol": "CVE"
+ },
+ "XOF": {
+ "name": "Faranga CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Faranga CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "BIF": {
+ "name": "Faranga ya Burundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Faranga ya Jibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Faranga ya Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Faranga ya Kongo",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Faranga ya Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Faranga ya Uswisi",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kwacha ya Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha ya Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza ya Angola",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leoni",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti ya Lesoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira ya Nijeria",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa ya Eritrea",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "EGP": {
+ "name": "Pauni ya Misri",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Pauni ya Santahelena",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Pauni ya Sudani",
+ "symbol": "SDG"
+ },
+ "GBP": {
+ "name": "Pauni ya Uingereza",
+ "symbol": "£"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pula ya Botswana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Randi ya Afrika Kusini",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riyal ya Saudia",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupia ya India",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupia ya Morisi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupia ya Shelisheli",
+ "symbol": "SCR"
+ },
+ "JPY": {
+ "name": "Sarafu ya Kijapani",
+ "symbol": "JPÂ¥"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "Shilingi ya Somalia",
+ "symbol": "SOS"
+ },
+ "KES": {
+ "name": "Sirinji ya Kenya",
+ "symbol": "Ksh"
+ },
+ "TZS": {
+ "name": "Sirinji ya Tanzania",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Sirinji ya Uganda",
+ "symbol": "UGX"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ugwiya ya Moritania",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yuan Renminbi ya China",
+ "symbol": "CNÂ¥"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/lv.json b/library/intl/resources/currency/lv.json
new file mode 100644
index 000000000..72837602a
--- /dev/null
+++ b/library/intl/resources/currency/lv.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AfganistÄnas afgÄns",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "AlbÄnijas leks",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Alžīrijas dinÄrs",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Angolas kvanza",
+ "symbol": "AOA"
+ },
+ "AED": {
+ "name": "Apvienoto ArÄbu EmirÄtu dirhÄ“ms",
+ "symbol": "AED"
+ },
+ "ARS": {
+ "name": "Argentīnas peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armēnijas drams",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Arubas guldenis",
+ "symbol": "AWG"
+ },
+ "USD": {
+ "name": "ASV dolÄrs",
+ "symbol": "$"
+ },
+ "AUD": {
+ "name": "AustrÄlijas dolÄrs",
+ "symbol": "AU$"
+ },
+ "XCD": {
+ "name": "AustrumkarÄ«bu dolÄrs",
+ "symbol": "EC$"
+ },
+ "AZN": {
+ "name": "AzerbaidžÄnas manats",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamu dolÄrs",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahreinas dinÄrs",
+ "symbol": "BHD"
+ },
+ "BYR": {
+ "name": "Baltkrievijas rubelis",
+ "symbol": "BYR"
+ },
+ "BDT": {
+ "name": "Bangladešas taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadosas dolÄrs",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Belizas dolÄrs",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermudu dolÄrs",
+ "symbol": "BMD"
+ },
+ "BOB": {
+ "name": "Bolīvijas boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnijas un Hercogovinas marka",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botsvanas pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "BrazÄ«lijas reÄls",
+ "symbol": "R$"
+ },
+ "BND": {
+ "name": "Brunejas dolÄrs",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "BulgÄrijas leva",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundi franks",
+ "symbol": "BIF"
+ },
+ "BTN": {
+ "name": "ButÄnas ngultrums",
+ "symbol": "BTN"
+ },
+ "XAF": {
+ "name": "CentrÄlÄfrikas CFA franks",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP franks",
+ "symbol": "CFPF"
+ },
+ "CZK": {
+ "name": "ÄŒehijas krona",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "Čīles peso",
+ "symbol": "CLP"
+ },
+ "DKK": {
+ "name": "DÄnijas krona",
+ "symbol": "DKK"
+ },
+ "ZAR": {
+ "name": "DienvidÄfrikas rends",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "Dienvidkorejas vona",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "DienvidsudÄnas mÄrciņa",
+ "symbol": "SSP"
+ },
+ "DOP": {
+ "name": "DominikÄnas peso",
+ "symbol": "DOP"
+ },
+ "DJF": {
+ "name": "Džibutijas franks",
+ "symbol": "DJF"
+ },
+ "EGP": {
+ "name": "Ä’Ä£iptes mÄrciņa",
+ "symbol": "EGP"
+ },
+ "EUR": {
+ "name": "eiro",
+ "symbol": "€"
+ },
+ "ERN": {
+ "name": "Eritrejas nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Etiopijas birs",
+ "symbol": "ETB"
+ },
+ "FJD": {
+ "name": "Fidži dolÄrs",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "Filipīnu peso",
+ "symbol": "PHP"
+ },
+ "FKP": {
+ "name": "Folklenda Salu mÄrciņa",
+ "symbol": "FKP"
+ },
+ "GYD": {
+ "name": "GajÄnas dolÄrs",
+ "symbol": "GYD"
+ },
+ "GMD": {
+ "name": "Gambijas dalasi",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "Ganas sedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GibraltÄra mÄrciņa",
+ "symbol": "GIP"
+ },
+ "GEL": {
+ "name": "Gruzijas lari",
+ "symbol": "GEL"
+ },
+ "GTQ": {
+ "name": "Gvatemalas ketsals",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Gvinejas franks",
+ "symbol": "GNF"
+ },
+ "HTG": {
+ "name": "Haiti gurds",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Hondurasas lempīra",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Honkongas dolÄrs",
+ "symbol": "HK$"
+ },
+ "HRK": {
+ "name": "HorvÄtijas kuna",
+ "symbol": "HRK"
+ },
+ "INR": {
+ "name": "Indijas rūpija",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonēzijas rūpija",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "IrÄkas dinÄrs",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IrÄnas riÄls",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "Īslandes krona",
+ "symbol": "ISK"
+ },
+ "ILS": {
+ "name": "Izraēlas šekelis",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaikas dolÄrs",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "JapÄnas jena",
+ "symbol": "Â¥"
+ },
+ "NZD": {
+ "name": "JaunzÄ“landes dolÄrs",
+ "symbol": "NZ$"
+ },
+ "YER": {
+ "name": "Jemenas riÄls",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "JordÄnas dinÄrs",
+ "symbol": "JOD"
+ },
+ "CVE": {
+ "name": "Kaboverdes eskudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Kaimanu salu dolÄrs",
+ "symbol": "KYD"
+ },
+ "KHR": {
+ "name": "Kambodžas riels",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "KanÄdas dolÄrs",
+ "symbol": "CA$"
+ },
+ "QAR": {
+ "name": "Kataras riÄls",
+ "symbol": "QAR"
+ },
+ "KZT": {
+ "name": "KazahstÄnas tenge",
+ "symbol": "KZT"
+ },
+ "CDF": {
+ "name": "KDR franks",
+ "symbol": "CDF"
+ },
+ "KES": {
+ "name": "Kenijas šiliņš",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KirgizstÄnas soms",
+ "symbol": "KGS"
+ },
+ "COP": {
+ "name": "Kolumbijas peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Komoru franks",
+ "symbol": "KMF"
+ },
+ "CRC": {
+ "name": "Kostarikas kolons",
+ "symbol": "CRC"
+ },
+ "RUB": {
+ "name": "Krievijas rublis",
+ "symbol": "RUB"
+ },
+ "CUC": {
+ "name": "Kubas konvertējamais peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Kubas peso",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "Kuveitas dinÄrs",
+ "symbol": "KWD"
+ },
+ "CNY": {
+ "name": "Ķīnas juaņs",
+ "symbol": "CNÂ¥"
+ },
+ "LAK": {
+ "name": "Laosas kips",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "Lesoto loti",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "LibÄnas mÄrciņa",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "LibÄ“rijas dolÄrs",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "LÄ«bijas dinÄrs",
+ "symbol": "LYD"
+ },
+ "GBP": {
+ "name": "LielbritÄnijas sterliņu mÄrciņa",
+ "symbol": "£"
+ },
+ "LTL": {
+ "name": "Lietuvas lits",
+ "symbol": "LTL"
+ },
+ "MGA": {
+ "name": "Madagaskaras ariari",
+ "symbol": "MGA"
+ },
+ "MOP": {
+ "name": "Makao pataka",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "MaÄ·edonijas denÄrs",
+ "symbol": "MKD"
+ },
+ "MYR": {
+ "name": "Malaizijas ringits",
+ "symbol": "MYR"
+ },
+ "MWK": {
+ "name": "MalÄvijas kvaÄa",
+ "symbol": "MWK"
+ },
+ "MVR": {
+ "name": "Maldīvijas rūfija",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "Marokas dirhēms",
+ "symbol": "MAD"
+ },
+ "MUR": {
+ "name": "Maurīcijas rūpija",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "MauritÄnijas ugija",
+ "symbol": "MRO"
+ },
+ "MXN": {
+ "name": "Meksikas peso",
+ "symbol": "MX$"
+ },
+ "MMK": {
+ "name": "Mjanmas kjats",
+ "symbol": "MMK"
+ },
+ "MDL": {
+ "name": "Moldovas leja",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolijas tugriks",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "Mozambikas metikals",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NamÄ«bijas dolÄrs",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "NepÄlas rÅ«pija",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "Nīderlandes Antiļu guldenis",
+ "symbol": "ANG"
+ },
+ "NGN": {
+ "name": "Nigērijas naira",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "Nikaragvas kordoba",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "Norvēģijas krona",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "OmÄnas riÄls",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "PakistÄnas rÅ«pija",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamas balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua-Jaungvinejas kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paragvajas guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peru jaunais sols",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "Polijas zlots",
+ "symbol": "PLN"
+ },
+ "XOF": {
+ "name": "RietumÄfrikas CFA franks",
+ "symbol": "CFA"
+ },
+ "RWF": {
+ "name": "Ruandas franks",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "RumÄnijas leja",
+ "symbol": "RON"
+ },
+ "SVC": {
+ "name": "Salvadoras kolons",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoa tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "Santome un Prinsipi dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "SaÅ«da riÄls",
+ "symbol": "SAR"
+ },
+ "SCR": {
+ "name": "Seišelu salu rūpija",
+ "symbol": "SCR"
+ },
+ "RSD": {
+ "name": "Serbijas dinÄrs",
+ "symbol": "RSD"
+ },
+ "SGD": {
+ "name": "SingapÅ«ras dolÄrs",
+ "symbol": "SGD"
+ },
+ "SYP": {
+ "name": "SÄ«rijas mÄrciņa",
+ "symbol": "SYP"
+ },
+ "SLL": {
+ "name": "Sjerraleones leone",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SomÄlijas Å¡iliņš",
+ "symbol": "SOS"
+ },
+ "SDG": {
+ "name": "SudÄnas mÄrciņa",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamas dolÄrs",
+ "symbol": "SRD"
+ },
+ "SHP": {
+ "name": "Sv.HelÄ“nas salas mÄrciņa",
+ "symbol": "SHP"
+ },
+ "SZL": {
+ "name": "Svazilendas lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "Šrilankas rūpija",
+ "symbol": "LKR"
+ },
+ "CHF": {
+ "name": "Å veices franks",
+ "symbol": "CHF"
+ },
+ "TJS": {
+ "name": "TadžikistÄnas somons",
+ "symbol": "TJS"
+ },
+ "TWD": {
+ "name": "TaivÄnas jaunais dolÄrs",
+ "symbol": "NT$"
+ },
+ "THB": {
+ "name": "Taizemes bÄts",
+ "symbol": "฿"
+ },
+ "TZS": {
+ "name": "TanzÄnijas Å¡iliņš",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "Tongas paanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "TrinidÄdas un TobÄgo dolÄrs",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisijas dinÄrs",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turcijas lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "TurkmenistÄnas manats",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Ugandas šiliņš",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrainas grivna",
+ "symbol": "UAH"
+ },
+ "HUF": {
+ "name": "UngÄrijas forints",
+ "symbol": "HUF"
+ },
+ "UYU": {
+ "name": "Urugvajas peso",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UzbekistÄnas sums",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatu vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "VenecuÄ“las bolivÄrs",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vjetnamas dongi",
+ "symbol": "â‚«"
+ },
+ "SBD": {
+ "name": "ZÄlamana Salu dolÄrs",
+ "symbol": "SBD"
+ },
+ "ZMW": {
+ "name": "Zambijas kvaÄa",
+ "symbol": "ZMW"
+ },
+ "KPW": {
+ "name": "Ziemeļkorejas vona",
+ "symbol": "KPW"
+ },
+ "ZWL": {
+ "name": "Zimbabves dolÄrs (2009)",
+ "symbol": "ZWL"
+ },
+ "SEK": {
+ "name": "Zviedrijas krona",
+ "symbol": "SEK"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/mas.json b/library/intl/resources/currency/mas.json
new file mode 100644
index 000000000..150439fe3
--- /dev/null
+++ b/library/intl/resources/currency/mas.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "ZAR": {
+ "name": "Iropiyianí e Afrika Kusini",
+ "symbol": "ZAR"
+ },
+ "DZD": {
+ "name": "Iropiyianí e Algeria",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Iropiyianí e Angola",
+ "symbol": "AOA"
+ },
+ "AUD": {
+ "name": "Iropiyianí e Austria",
+ "symbol": "A$"
+ },
+ "BHD": {
+ "name": "Iropiyianí e Bahareini",
+ "symbol": "BHD"
+ },
+ "BWP": {
+ "name": "Iropiyianí e Botswana",
+ "symbol": "BWP"
+ },
+ "MGA": {
+ "name": "Iropiyianí e Bukini",
+ "symbol": "MGA"
+ },
+ "BIF": {
+ "name": "Iropiyianí e Burundi",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Iropiyianí e CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Iropiyianí e CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "CNY": {
+ "name": "Iropiyianí e China",
+ "symbol": "CNÂ¥"
+ },
+ "ERN": {
+ "name": "Iropiyianí e Eritrea",
+ "symbol": "ERN"
+ },
+ "GMD": {
+ "name": "Iropiyianí e Gambia",
+ "symbol": "GMD"
+ },
+ "INR": {
+ "name": "Iropiyianí e India",
+ "symbol": "₹"
+ },
+ "JPY": {
+ "name": "Iropiyianí e Japani",
+ "symbol": "JPÂ¥"
+ },
+ "DJF": {
+ "name": "Iropiyianí e Jibuti",
+ "symbol": "DJF"
+ },
+ "CAD": {
+ "name": "Iropiyianí e Kanada",
+ "symbol": "CA$"
+ },
+ "KES": {
+ "name": "Iropiyianí e Kenya",
+ "symbol": "Ksh"
+ },
+ "CVE": {
+ "name": "Iropiyianí e Kepuvede",
+ "symbol": "CVE"
+ },
+ "KMF": {
+ "name": "Iropiyianí e Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Iropiyianí e Kongo",
+ "symbol": "CDF"
+ },
+ "SLL": {
+ "name": "Iropiyianí e leoni",
+ "symbol": "SLL"
+ },
+ "LSL": {
+ "name": "Iropiyianí e Lesoto",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Iropiyianí e Liberia",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Iropiyianí e Libya",
+ "symbol": "LYD"
+ },
+ "SZL": {
+ "name": "Iropiyianí e lilangeni",
+ "symbol": "SZL"
+ },
+ "MWK": {
+ "name": "Iropiyianí e Malawi",
+ "symbol": "MWK"
+ },
+ "EGP": {
+ "name": "Iropiyianí e Misri",
+ "symbol": "EGP"
+ },
+ "MUR": {
+ "name": "Iropiyianí e Morisi",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "Iropiyianí e Moritania",
+ "symbol": "MRO"
+ },
+ "MAD": {
+ "name": "Iropiyianí e Moroko",
+ "symbol": "MAD"
+ },
+ "NAD": {
+ "name": "Iropiyianí e Namibia",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "Iropiyianí e Nijeria",
+ "symbol": "NGN"
+ },
+ "GBP": {
+ "name": "Iropiyianí e NkɨÌresa",
+ "symbol": "£"
+ },
+ "RWF": {
+ "name": "Iropiyianí e Rwanda",
+ "symbol": "RWF"
+ },
+ "ZMW": {
+ "name": "Iropiyianí e Sambia",
+ "symbol": "ZMW"
+ },
+ "SHP": {
+ "name": "Iropiyianí e Santahelena",
+ "symbol": "SHP"
+ },
+ "STD": {
+ "name": "Iropiyianí e Saotome",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Iropiyianí e Saudi",
+ "symbol": "SAR"
+ },
+ "SCR": {
+ "name": "Iropiyianí e Shelisheli",
+ "symbol": "SCR"
+ },
+ "SOS": {
+ "name": "Iropiyianí e Somalia",
+ "symbol": "SOS"
+ },
+ "SDG": {
+ "name": "Iropiyianí e Sudani",
+ "symbol": "SDG"
+ },
+ "TZS": {
+ "name": "Iropiyianí e Tanzania",
+ "symbol": "TZS"
+ },
+ "TND": {
+ "name": "Iropiyianí e Tunisia",
+ "symbol": "TND"
+ },
+ "UGX": {
+ "name": "Iropiyianí e Uganda",
+ "symbol": "UGX"
+ },
+ "ETB": {
+ "name": "Iropiyianí e Uhabeshi",
+ "symbol": "ETB"
+ },
+ "CHF": {
+ "name": "Iropiyianí e Uswisi",
+ "symbol": "CHF"
+ },
+ "EUR": {
+ "name": "Iropiyianí e yuro",
+ "symbol": "€"
+ },
+ "USD": {
+ "name": "Iropiyianí É”Ìɔ̄ lamarekani",
+ "symbol": "US$"
+ },
+ "AED": {
+ "name": "Iropiyianí É”Ìɔ̄ lmarabu",
+ "symbol": "AED"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/mer.json b/library/intl/resources/currency/mer.json
new file mode 100644
index 000000000..ca2586a0c
--- /dev/null
+++ b/library/intl/resources/currency/mer.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "MGA": {
+ "name": "Ariarĩ ya Bukini",
+ "symbol": "MGA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Bĩrũ ya Ithiopia",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi ya Gambia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinari ya Anjĩria",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinari ya Baharini",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinari ya Libya",
+ "symbol": "LYD"
+ },
+ "TND": {
+ "name": "Dinari ya Tunisia",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham ya Falme cia Kiarabu",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham ya Moroko",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobra ya Sao Tome na Principe",
+ "symbol": "STD"
+ },
+ "USD": {
+ "name": "Dola ya Amerika",
+ "symbol": "US$"
+ },
+ "AUD": {
+ "name": "Dola ya Austrĩlia",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "Dola ya Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dola ya Liberia",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Dola ya Namibia",
+ "symbol": "NAD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "Eskudo ya Kepuvede",
+ "symbol": "CVE"
+ },
+ "XOF": {
+ "name": "Faranga CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Faranga CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "BIF": {
+ "name": "Faranga ya Burundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Faranga ya Jibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Faranga ya Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Faranga ya Kongo",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Faranga ya Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Faranga ya Swisilandi",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kwacha ya Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha ya Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza ya Angola",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leoni",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti ya Lesoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira ya Nijeria",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa ya Eritrea",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "EGP": {
+ "name": "Paũndi ya Misri",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "Paũndi ya Ngeretha",
+ "symbol": "£"
+ },
+ "SHP": {
+ "name": "Paũndi ya Santahelena",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Paũndi ya Sudani",
+ "symbol": "SDG"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pula ya Botswana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Randi ya Afrika ya Sauthi",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riyal ya Saudi Arĩbia",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupia ya India",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupia ya Maurĩtiasi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupia ya Shelisheli",
+ "symbol": "SCR"
+ },
+ "JPY": {
+ "name": "Sarafu ya japani",
+ "symbol": "JPÂ¥"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "Shilingi ya Kenya",
+ "symbol": "Ksh"
+ },
+ "SOS": {
+ "name": "Shilingi ya Somalia",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Shilingi ya Tanzania",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Shilingi ya Uganda",
+ "symbol": "UGX"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ugwiya ya Mauritania",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yuan Renminbi ya China",
+ "symbol": "CNÂ¥"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/mfe.json b/library/intl/resources/currency/mfe.json
new file mode 100644
index 000000000..9bde9c3cf
--- /dev/null
+++ b/library/intl/resources/currency/mfe.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "birr etiopien",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "dalasi gambien",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar alzerien",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahreïn",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "dinar libien",
+ "symbol": "LYD"
+ },
+ "SDG": {
+ "name": "dinar soudane",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "dinar tinizien",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dirham Emira arab ini",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dirham marokin",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "dobra santomeen",
+ "symbol": "STD"
+ },
+ "USD": {
+ "name": "dolar amerikin",
+ "symbol": "US$"
+ },
+ "CAD": {
+ "name": "dolar kanadien",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "dolar liberien",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dolar namibien",
+ "symbol": "NAD"
+ },
+ "AUD": {
+ "name": "dolar ostralien",
+ "symbol": "A$"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "eskudo kapverdien",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "BIF": {
+ "name": "fran burunde",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "fran CFA (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "fran CFA (BEAC)",
+ "symbol": "FCFA"
+ },
+ "DJF": {
+ "name": "fran djiboutien",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "fran komorien",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "fran kongole",
+ "symbol": "CDF"
+ },
+ "MGA": {
+ "name": "fran malgas",
+ "symbol": "MGA"
+ },
+ "RWF": {
+ "name": "fran rwande",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "fran swis",
+ "symbol": "CHF"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "kwacha malawit",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kwacha zanbien",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "kwanza angole",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "leonn Sierra-Leone",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "lilangeni swazi",
+ "symbol": "SZL"
+ },
+ "EGP": {
+ "name": "liv ezipsien",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "liv Sainte-Hélène",
+ "symbol": "SHP"
+ },
+ "GBP": {
+ "name": "liv sterlin",
+ "symbol": "£"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "loti lezoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "ERN": {
+ "name": "nafka erythreen",
+ "symbol": "ERN"
+ },
+ "NGN": {
+ "name": "naira nizerian",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "MRO": {
+ "name": "ouguiya moritanien",
+ "symbol": "MRO"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "pula ya botswane",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "rand sid-afrikin",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "rial saoudien",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "INR": {
+ "name": "roupi",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "roupi morisien",
+ "symbol": "Rs"
+ },
+ "SCR": {
+ "name": "roupi seselwa",
+ "symbol": "SCR"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "shiling kenyan",
+ "symbol": "KES"
+ },
+ "UGX": {
+ "name": "shiling ougande",
+ "symbol": "UGX"
+ },
+ "TZS": {
+ "name": "shiling tanzanien",
+ "symbol": "TZS"
+ },
+ "SOS": {
+ "name": "shilingi somalien",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "JPY": {
+ "name": "yen zapone",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "yuan renminbi sinwa",
+ "symbol": "CNÂ¥"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/mg.json b/library/intl/resources/currency/mg.json
new file mode 100644
index 000000000..d652606bb
--- /dev/null
+++ b/library/intl/resources/currency/mg.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "MGA": {
+ "name": "Ariary",
+ "symbol": "Ar"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Bir etiopianina",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi gambianina",
+ "symbol": "GMD"
+ },
+ "BHD": {
+ "name": "dinar bahreïni",
+ "symbol": "BHD"
+ },
+ "TND": {
+ "name": "Dinar tonizianina",
+ "symbol": "TND"
+ },
+ "DZD": {
+ "name": "Dinara alzerianina",
+ "symbol": "DZD"
+ },
+ "LYD": {
+ "name": "Dinara Libyanina",
+ "symbol": "LYD"
+ },
+ "SDG": {
+ "name": "Dinara Sodaney",
+ "symbol": "SDG"
+ },
+ "AED": {
+ "name": "Dirham",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham marokianina",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobra",
+ "symbol": "STD"
+ },
+ "USD": {
+ "name": "Dolara amerikanina",
+ "symbol": "US$"
+ },
+ "AUD": {
+ "name": "Dolara aostralianina",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "Dôlara Kanadianina",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dôlara Liberianina",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Dolara namibianina",
+ "symbol": "NAD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "EUR": {
+ "name": "Eoro",
+ "symbol": "€"
+ },
+ "CVE": {
+ "name": "Escudo",
+ "symbol": "CVE"
+ },
+ "BIF": {
+ "name": "Farantsa Borondi",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Farantsa CFA (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Farantsa CFA (BEAC)",
+ "symbol": "FCFA"
+ },
+ "DJF": {
+ "name": "Farantsa Djibotianina",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Farantsa Komorianina",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Farantsa kôngôley",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Farantsa Roande",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Farantsa soisa",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "kwacha malawite",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha zambianina",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "kwanza angoley",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leone",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "SHP": {
+ "name": "livre de Sainte-Hélène",
+ "symbol": "SHP"
+ },
+ "GBP": {
+ "name": "livre sterling",
+ "symbol": "£"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira nigerianina",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfà Eritreanina",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "MRO": {
+ "name": "Ouguiya moritanianina",
+ "symbol": "MRO"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pola botsoaney",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Rand afrikanina tatsimo",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Rial saodianina",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "INR": {
+ "name": "Ropia Indianina",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Ropia maorisianina",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Ropia Seysheloà",
+ "symbol": "SCR"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "Shilling kenianina",
+ "symbol": "KES"
+ },
+ "UGX": {
+ "name": "Shilling ogandianina",
+ "symbol": "UGX"
+ },
+ "SOS": {
+ "name": "Shilling somalianina",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Shilling tanzanianina",
+ "symbol": "TZS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "EGP": {
+ "name": "vola venty ejipsiana",
+ "symbol": "EGP"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "JPY": {
+ "name": "Yen Japoney",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yoan sinoa Renminbi",
+ "symbol": "CNÂ¥"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/mgh.json b/library/intl/resources/currency/mgh.json
new file mode 100644
index 000000000..787e5005c
--- /dev/null
+++ b/library/intl/resources/currency/mgh.json
@@ -0,0 +1,634 @@
+{
+ "AED": {
+ "name": "AED",
+ "symbol": "AED"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "AOA",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AUD": {
+ "name": "AUD",
+ "symbol": "A$"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BHD": {
+ "name": "BHD",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "BIF",
+ "symbol": "BIF"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BWP": {
+ "name": "BWP",
+ "symbol": "BWP"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CAD": {
+ "name": "CAD",
+ "symbol": "CA$"
+ },
+ "CDF": {
+ "name": "CDF",
+ "symbol": "CDF"
+ },
+ "CHF": {
+ "name": "CHF",
+ "symbol": "CHF"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "CNY",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CVE": {
+ "name": "CVE",
+ "symbol": "CVE"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DJF": {
+ "name": "DJF",
+ "symbol": "DJF"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "DZD": {
+ "name": "DZD",
+ "symbol": "DZD"
+ },
+ "EGP": {
+ "name": "EGP",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "ERN",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "ETB",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "EUR",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GBP": {
+ "name": "GBP",
+ "symbol": "£"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GMD": {
+ "name": "GMD",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "INR",
+ "symbol": "₹"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "JPY": {
+ "name": "JPY",
+ "symbol": "JPÂ¥"
+ },
+ "KES": {
+ "name": "KES",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "KMF",
+ "symbol": "KMF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LRD": {
+ "name": "LRD",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "LYD",
+ "symbol": "LYD"
+ },
+ "MAD": {
+ "name": "MAD",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MGA": {
+ "name": "MGA",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MRO": {
+ "name": "MRO",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "MWK",
+ "symbol": "MWK"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MTn"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SAR": {
+ "name": "SAR",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "SDG",
+ "symbol": "SDG"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SOS",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "TND",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "TZS": {
+ "name": "TZS",
+ "symbol": "TZS"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "UGX",
+ "symbol": "UGX"
+ },
+ "USD": {
+ "name": "USD",
+ "symbol": "US$"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZAR": {
+ "name": "ZAR",
+ "symbol": "ZAR"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/mk.json b/library/intl/resources/currency/mk.json
new file mode 100644
index 000000000..743e02a19
--- /dev/null
+++ b/library/intl/resources/currency/mk.json
@@ -0,0 +1,634 @@
+{
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "AFN": {
+ "name": "ÐвганиÑтанÑки авгани",
+ "symbol": "AFN"
+ },
+ "AUD": {
+ "name": "ÐвÑтралиÑки долар",
+ "symbol": "AUD"
+ },
+ "AZN": {
+ "name": "ÐзербејџанÑки манат",
+ "symbol": "AZN"
+ },
+ "ALL": {
+ "name": "ÐлбанÑки Лек",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "ÐлжирÑки Динар",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "ÐмериканÑки долар",
+ "symbol": "US$"
+ },
+ "AOA": {
+ "name": "ÐнголÑка Кванза",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ÐргентинÑки ПезоÑ",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "ÐрубиÑки флорин",
+ "symbol": "AWG"
+ },
+ "BDT": {
+ "name": "Бангладешка така",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "БарбадоÑки долар",
+ "symbol": "BBD"
+ },
+ "BSD": {
+ "name": "БахамÑки долар",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "БахреинÑки Динар",
+ "symbol": "BHD"
+ },
+ "BZD": {
+ "name": "БелизиÑки Долар",
+ "symbol": "BZD"
+ },
+ "BYR": {
+ "name": "БелоруÑка рубља",
+ "symbol": "BYR"
+ },
+ "BMD": {
+ "name": "БермудÑки долар",
+ "symbol": "BMD"
+ },
+ "BOB": {
+ "name": "БоливиÑки боливиано",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "БоÑанÑко-ХерцеговÑка конвертибилна марка",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "БоцванÑка Пула",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "БразилÑки реал",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "БританÑка Фунта",
+ "symbol": "GBP"
+ },
+ "BND": {
+ "name": "БрунејÑки долар",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "БугарÑки лев",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "БурундиÑки Франк",
+ "symbol": "BIF"
+ },
+ "BTN": {
+ "name": "БутанÑки нгултрум",
+ "symbol": "BTN"
+ },
+ "VUV": {
+ "name": "ВанатÑки вату",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "ВенецуелÑки боливар",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "ВиетнамÑки донг",
+ "symbol": "VND"
+ },
+ "GMD": {
+ "name": "ГамбиÑки далаÑи",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "ГанÑки Ñеди",
+ "symbol": "GHS"
+ },
+ "GTQ": {
+ "name": "ГватемалÑки кветцал",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "ГвијанÑки Долар",
+ "symbol": "GYD"
+ },
+ "GNF": {
+ "name": "ГвинејÑки франк",
+ "symbol": "GNF"
+ },
+ "GIP": {
+ "name": "ГибралтарÑка фунта",
+ "symbol": "GIP"
+ },
+ "GEL": {
+ "name": "ГрузиÑки лари",
+ "symbol": "GEL"
+ },
+ "DKK": {
+ "name": "ДанÑка круна",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Добра на Сао Томе и ПринÑипе",
+ "symbol": "STD"
+ },
+ "KYD": {
+ "name": "Долар на кајманÑки оÑтрови",
+ "symbol": "KYD"
+ },
+ "TTD": {
+ "name": "Долар на Тринидад и Тобаго",
+ "symbol": "TTD"
+ },
+ "DOP": {
+ "name": "ДоминиканÑки ПезоÑ",
+ "symbol": "DOP"
+ },
+ "EUR": {
+ "name": "Евро",
+ "symbol": "€"
+ },
+ "EGP": {
+ "name": "ЕгипетÑка Фунта",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "ЕритрејÑка Ðакфа",
+ "symbol": "ERN"
+ },
+ "AMD": {
+ "name": "ЕрмениÑки Драм",
+ "symbol": "AMD"
+ },
+ "ETB": {
+ "name": "ЕтиопиÑки Бир",
+ "symbol": "ETB"
+ },
+ "ZMW": {
+ "name": "ЗамбијÑка квача",
+ "symbol": "ZMW"
+ },
+ "CVE": {
+ "name": "Зелено’ртÑки еÑкудо",
+ "symbol": "CVE"
+ },
+ "ILS": {
+ "name": "ИзраелÑки нов шекел",
+ "symbol": "ILS"
+ },
+ "INR": {
+ "name": "ИндијÑка рупија",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "ИндонезиÑка рупија",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "ИранÑки риал",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Ирачки динар",
+ "symbol": "IQD"
+ },
+ "ISK": {
+ "name": "ИÑландÑка крона",
+ "symbol": "ISK"
+ },
+ "XCD": {
+ "name": "ИÑточно карибиÑки долар",
+ "symbol": "EC$"
+ },
+ "JMD": {
+ "name": "ЈамајканÑки долар",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "ЈапонÑки јен",
+ "symbol": "JPY"
+ },
+ "YER": {
+ "name": "ЈеменÑки риал",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "ЈорданÑки динар",
+ "symbol": "JOD"
+ },
+ "ZAR": {
+ "name": "Јужно афрички ранд",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "Јужно корејÑки вон",
+ "symbol": "KRW"
+ },
+ "SSP": {
+ "name": "ЈужноÑуданÑка фунта",
+ "symbol": "SSP"
+ },
+ "KZT": {
+ "name": "КазахÑтанÑка тенга",
+ "symbol": "KZT"
+ },
+ "KHR": {
+ "name": "КамбоџиÑки рел",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "КанадÑки долар",
+ "symbol": "CA$"
+ },
+ "QAR": {
+ "name": "КатарÑки риал",
+ "symbol": "QAR"
+ },
+ "KES": {
+ "name": "КениÑки шилинг",
+ "symbol": "KES"
+ },
+ "CNY": {
+ "name": "КинеÑки јуан",
+ "symbol": "CNY"
+ },
+ "KGS": {
+ "name": "КиргиÑтанÑки Ñом",
+ "symbol": "KGS"
+ },
+ "COP": {
+ "name": "КолумбиÑки ПезоÑ",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "КоморÑки долар",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "КонголÑки франк",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "КоÑтариканÑки колон",
+ "symbol": "CRC"
+ },
+ "CUP": {
+ "name": "КубанÑки пезоÑ",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "КубанÑки Ð¿ÐµÐ·Ð¾Ñ (конвертибилен)",
+ "symbol": "CUC"
+ },
+ "KWD": {
+ "name": "КувајтÑки динар",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "ЛаоÑки кип",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "ЛеÑотÑко лоти",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "ЛибанÑка фунта",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "ЛибериÑки долар",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "ЛибијÑки динар",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "ЛитваниÑка лита",
+ "symbol": "LTL"
+ },
+ "MUR": {
+ "name": "МавританÑка рупија",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "МавританÑка угија",
+ "symbol": "MRO"
+ },
+ "MOP": {
+ "name": "Макао патака",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "МакедонÑки денар",
+ "symbol": "ден"
+ },
+ "MWK": {
+ "name": "МалавиÑка квача",
+ "symbol": "MWK"
+ },
+ "MGA": {
+ "name": "МалагаÑиÑки ариари",
+ "symbol": "MGA"
+ },
+ "MYR": {
+ "name": "МалазиÑки рингит",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "МалдивиÑка руфија",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "МароканÑки Дирхам",
+ "symbol": "MAD"
+ },
+ "MXN": {
+ "name": "МекÑиканÑки пезоÑ",
+ "symbol": "MX$"
+ },
+ "MMK": {
+ "name": "МјанмарÑки киат",
+ "symbol": "MMK"
+ },
+ "MZN": {
+ "name": "МозамбиÑки метикал",
+ "symbol": "MZN"
+ },
+ "MDL": {
+ "name": "МолдавÑки леу",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "МонголиÑки тугрик",
+ "symbol": "MNT"
+ },
+ "NAD": {
+ "name": "ÐамибиÑки долар",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "ÐепалÑка рупија",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "ÐигериÑка наира",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "ÐикарагванÑка кордоба",
+ "symbol": "NIO"
+ },
+ "NZD": {
+ "name": "ÐовозеландÑки долар",
+ "symbol": "NZD"
+ },
+ "NOK": {
+ "name": "Ðорвешка круна",
+ "symbol": "NOK"
+ },
+ "AED": {
+ "name": "Обединети ÐрапÑки Емирати Дирхам",
+ "symbol": "AED"
+ },
+ "OMR": {
+ "name": "ОманÑки риал",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "ПакиÑтанÑка рупија",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "ПанамÑка балбоа",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Папуа новогвинејÑка кина",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "ПарагвајÑка гуарана",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "ПеруанÑки нов Ñол",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "ПолÑка злота",
+ "symbol": "PLN"
+ },
+ "RON": {
+ "name": "РоманÑка леи",
+ "symbol": "RON"
+ },
+ "RWF": {
+ "name": "РуандÑки франк",
+ "symbol": "RWF"
+ },
+ "RUB": {
+ "name": "РуÑка рубља",
+ "symbol": "RUB"
+ },
+ "SVC": {
+ "name": "СалвадорÑки колон",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "СамоанÑка тала",
+ "symbol": "WST"
+ },
+ "SAR": {
+ "name": "СаудиÑки ријал",
+ "symbol": "SAR"
+ },
+ "SZL": {
+ "name": "СвазилендÑки лиланген",
+ "symbol": "SZL"
+ },
+ "KPW": {
+ "name": "Северно корејÑки вон",
+ "symbol": "KPW"
+ },
+ "SCR": {
+ "name": "СејшелÑка рупија",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "СиералеонÑко леоне",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "СингапурÑки долар",
+ "symbol": "SGD"
+ },
+ "SYP": {
+ "name": "СиријÑка фунта",
+ "symbol": "SYP"
+ },
+ "SBD": {
+ "name": "СоломонÑки долар",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "СомалијÑки шилинг",
+ "symbol": "SOS"
+ },
+ "RSD": {
+ "name": "СрпÑки динар",
+ "symbol": "RSD"
+ },
+ "SDG": {
+ "name": "СуданÑка фунта",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "СуринамÑки долар",
+ "symbol": "SRD"
+ },
+ "THB": {
+ "name": "Таи бат",
+ "symbol": "THB"
+ },
+ "TWD": {
+ "name": "ТајванÑки нов долар",
+ "symbol": "TWD"
+ },
+ "TZS": {
+ "name": "ТанзаниÑки шилинг",
+ "symbol": "TZS"
+ },
+ "TJS": {
+ "name": "ТаџикиÑтанÑки Ñомони",
+ "symbol": "TJS"
+ },
+ "TOP": {
+ "name": "ТонганÑка панга",
+ "symbol": "TOP"
+ },
+ "TND": {
+ "name": "ТунизиÑки динар",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "ТуркмениÑÑ‚. манат",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "ТурÑка лира",
+ "symbol": "TRY"
+ },
+ "UGX": {
+ "name": "УгандиÑки шилинг",
+ "symbol": "UGX"
+ },
+ "UZS": {
+ "name": "УзбекиÑтанÑки Ñом",
+ "symbol": "UZS"
+ },
+ "UAH": {
+ "name": "УкраинÑка хривнија",
+ "symbol": "UAH"
+ },
+ "HUF": {
+ "name": "УнгарÑка форинта",
+ "symbol": "HUF"
+ },
+ "UYU": {
+ "name": "УругвајÑки пезоÑ",
+ "symbol": "UYU"
+ },
+ "PHP": {
+ "name": "ФилипинÑки пезоÑ",
+ "symbol": "PHP"
+ },
+ "FJD": {
+ "name": "ФиџиÑки долар",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "ФолкландÑка фунта",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "Фунта на Света Елена",
+ "symbol": "SHP"
+ },
+ "HTG": {
+ "name": "ХаитÑки гурд",
+ "symbol": "HTG"
+ },
+ "ANG": {
+ "name": "ХоландÑки антилÑки гилдер",
+ "symbol": "ANG"
+ },
+ "HKD": {
+ "name": "Хонгконшки долар",
+ "symbol": "HKD"
+ },
+ "HNL": {
+ "name": "ХондурÑка лемпира",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "ХрватÑка Куна",
+ "symbol": "HRK"
+ },
+ "XPF": {
+ "name": "ЦФП франк",
+ "symbol": "CFPF"
+ },
+ "CZK": {
+ "name": "Чешка корона",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "ЧилеанÑки пезоÑ",
+ "symbol": "CLP"
+ },
+ "DJF": {
+ "name": "Ðибути франк",
+ "symbol": "DJF"
+ },
+ "CHF": {
+ "name": "ШвајцарÑки Франк",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "ШведÑка круна",
+ "symbol": "SEK"
+ },
+ "LKR": {
+ "name": "ШриланканÑка рупија",
+ "symbol": "LKR"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ml.json b/library/intl/resources/currency/ml.json
new file mode 100644
index 000000000..ec7c58867
--- /dev/null
+++ b/library/intl/resources/currency/ml.json
@@ -0,0 +1,634 @@
+{
+ "XOF": {
+ "name": "CFA à´«àµà´°à´¾à´™àµà´•àµ BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA à´«àµà´°à´¾à´™àµà´•àµ BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP à´«àµà´°à´¾à´™àµà´•àµ",
+ "symbol": "CFPF"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "AFN": {
+ "name": "à´…à´«àµâ€Œà´—ാൻ à´…à´«àµâ€Œâ€Œà´—ാനി",
+ "symbol": "AFN"
+ },
+ "AOA": {
+ "name": "അംഗോളൻ â€à´•àµà´µà´¾àµ»à´¸",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "അർജൻറീൻ പെസോ",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "അർമേനിയൻ à´¡àµà´°à´¾à´‚",
+ "symbol": "AMD"
+ },
+ "ALL": {
+ "name": "അൽബേനിയൻ ലെകàµ",
+ "symbol": "ALL"
+ },
+ "AZN": {
+ "name": "അസർബൈജാനി മനതàµ",
+ "symbol": "AZN"
+ },
+ "DZD": {
+ "name": "അൾജീരിയൻ ദിനാർ",
+ "symbol": "DZD"
+ },
+ "AWG": {
+ "name": "അറൂബൻ à´«àµà´²àµ‹à´±à´¿àµ»",
+ "symbol": "AWG"
+ },
+ "IDR": {
+ "name": "ഇനàµà´¤àµ‹à´¨àµ‡à´·àµà´¯àµ» à´±àµà´ªà´¿à´¯",
+ "symbol": "IDR"
+ },
+ "INR": {
+ "name": "ഇനàµà´¤àµà´¯àµ» രൂപ",
+ "symbol": "₹"
+ },
+ "ILS": {
+ "name": "ഇസàµà´°à´¾à´¯àµ‡à´²à´¿ à´¨àµà´¯àµ‚ ഷെകàµà´•àµ†àµ½",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "ഇറാഖി ദിനാർ",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "ഇറാനിയൻ റിയാൽ",
+ "symbol": "IRR"
+ },
+ "EGP": {
+ "name": "ഈജിപàµâ€Œà´·àµà´¯àµ» പൗണàµà´Ÿàµ",
+ "symbol": "EGP"
+ },
+ "UAH": {
+ "name": "ഉകàµà´°àµ‡à´¨à´¿à´¯àµ» à´¹àµà´°à´¿à´µàµâ€Œà´¨à´¿à´¯",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "ഉഗാണàµà´Ÿàµ» à´·à´¿à´²àµà´²à´¿à´‚à´—àµ",
+ "symbol": "UGX"
+ },
+ "KPW": {
+ "name": "ഉതàµà´¤à´° കൊറിയൻ വോൺ",
+ "symbol": "KPW"
+ },
+ "UZS": {
+ "name": "ഉസàµâ€Œà´¬àµ†à´•àµà´•à´¿à´¸àµà´¥à´¾àµ» സോം",
+ "symbol": "UZS"
+ },
+ "UYU": {
+ "name": "ഉറàµà´—àµà´µàµ‡à´¯àµ» പെസോ",
+ "symbol": "UYU"
+ },
+ "ETB": {
+ "name": "à´Žà´¤àµà´¯àµ‹à´ªàµà´¯àµ» ബിർ",
+ "symbol": "ETB"
+ },
+ "SVC": {
+ "name": "എൽ സാൽവഡോർ കോളൻ",
+ "symbol": "SVC"
+ },
+ "ERN": {
+ "name": "എറിതàµà´°à´¿à´¯àµ» നകàµà´«",
+ "symbol": "ERN"
+ },
+ "ISK": {
+ "name": "à´à´¸àµâ€Œà´²à´¾àµ»à´¡à´¿à´•àµ à´•àµà´°àµ‹à´£",
+ "symbol": "ISK"
+ },
+ "OMR": {
+ "name": "ഒമാനി റിയാൽ",
+ "symbol": "OMR"
+ },
+ "AUD": {
+ "name": "à´“à´¸àµà´Ÿàµà´°àµ‡à´²à´¿à´¯àµ» ഡോളർ",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "കനേഡിയൻ ഡോളർ",
+ "symbol": "CA$"
+ },
+ "KHR": {
+ "name": "കംബോഡിയൻ റീൽ",
+ "symbol": "KHR"
+ },
+ "KZT": {
+ "name": "കസാകàµà´•à´¿à´¸àµà´¥à´¾àµ» ടെംഗെ",
+ "symbol": "KZT"
+ },
+ "KGS": {
+ "name": "കിർഗിസàµà´¥à´¾à´¨à´¿ സോം",
+ "symbol": "KGS"
+ },
+ "XCD": {
+ "name": "à´•à´¿à´´à´•àµà´•àµ» കരീബിയൻ ഡോളർ",
+ "symbol": "EC$"
+ },
+ "KWD": {
+ "name": "à´•àµà´µàµˆà´±àµà´±à´¿ ദിനാർ",
+ "symbol": "KWD"
+ },
+ "KES": {
+ "name": "കെനിയൻ à´·à´¿à´²àµà´²à´¿à´‚à´—àµ",
+ "symbol": "KES"
+ },
+ "CVE": {
+ "name": "കേപൠവെർദിയൻ à´Žà´¸àµâ€Œà´•àµà´¯àµà´¡àµ‹",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "കേമാൻ à´à´²àµ»à´¡àµâ€Œà´¸àµ ഡോളർ",
+ "symbol": "KYD"
+ },
+ "KMF": {
+ "name": "കൊമോറിയൻ à´«àµà´°à´¾à´™àµà´•àµ",
+ "symbol": "KMF"
+ },
+ "COP": {
+ "name": "കൊളംബിയൻ പെസോ",
+ "symbol": "COP"
+ },
+ "CDF": {
+ "name": "കോങàµà´•à´³àµ€à´¸àµ à´«àµà´°à´¾à´™àµà´•àµ",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "കോസàµà´±àµà´±à´¾ റികàµà´•àµ» കോളൻ",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "à´•àµà´¯àµ‚ബൻ കൺവേർടàµà´Ÿà´¬à´¿àµ¾ പെസോ",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "à´•àµà´¯àµ‚ബൻ പെസോ",
+ "symbol": "CUP"
+ },
+ "HRK": {
+ "name": "à´•àµà´°àµŠà´¯àµ‡à´·àµ» à´•àµà´¯àµà´¨",
+ "symbol": "HRK"
+ },
+ "QAR": {
+ "name": "à´–à´¤àµà´¤àµ¼ റിയാൽ",
+ "symbol": "QAR"
+ },
+ "GYD": {
+ "name": "ഗയാനീസൠഡോളർ",
+ "symbol": "GYD"
+ },
+ "GMD": {
+ "name": "ഗാംബിയൻ ദലാസി",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "ഗിനിയൻ à´«àµà´°à´¾à´™àµà´•àµ",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "à´—àµà´µà´¾à´Ÿàµà´Ÿà´¿à´®à´¾à´²àµ» à´•àµà´µàµ†à´±àµà´±àµâ€Œà´¸àµ½",
+ "symbol": "GTQ"
+ },
+ "GHS": {
+ "name": "ഘാനയൻ കെഡി",
+ "symbol": "GHS"
+ },
+ "CLP": {
+ "name": "ചിലിയൻ പെസോ",
+ "symbol": "CLP"
+ },
+ "CZK": {
+ "name": "ചെകàµà´•àµ റിപàµà´ªà´¬àµà´²à´¿à´•àµ കൊരàµà´£",
+ "symbol": "CZK"
+ },
+ "CNY": {
+ "name": "ചൈനീസൠയàµà´µà´¾àµ»",
+ "symbol": "CNÂ¥"
+ },
+ "JPY": {
+ "name": "ജപàµà´ªà´¾à´¨àµ€à´¸àµ യെൻ",
+ "symbol": "Â¥"
+ },
+ "JMD": {
+ "name": "ജമൈകàµà´•àµ» ഡോളർ",
+ "symbol": "JMD"
+ },
+ "GIP": {
+ "name": "ജിബàµà´°à´¾àµ¾à´Ÿàµà´Ÿàµ¼ പൗണàµà´Ÿàµ",
+ "symbol": "GIP"
+ },
+ "GEL": {
+ "name": "ജോർജàµà´œà´¿à´¯àµ» ലാറി",
+ "symbol": "GEL"
+ },
+ "JOD": {
+ "name": "ജോർദàµà´¦à´¾à´¨à´¿à´¯àµ» ദിനാർ",
+ "symbol": "JOD"
+ },
+ "TRY": {
+ "name": "ടർകàµà´•à´¿à´·àµ ലിറ",
+ "symbol": "TRY"
+ },
+ "TZS": {
+ "name": "ടാൻസാനിയൻ à´·à´¿à´²àµà´²à´¿à´‚à´—àµ",
+ "symbol": "TZS"
+ },
+ "TND": {
+ "name": "à´Ÿàµà´£àµ€à´·àµà´¯àµ» ദിനാർ",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "ടോംഗൻ പാംഗ",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "à´Ÿàµà´°à´¿à´¨à´¿à´¡à´¾à´¡àµ à´…à´¨àµà´±àµ à´Ÿàµà´¬à´¾à´—ോ ഡോളർ",
+ "symbol": "TTD"
+ },
+ "DKK": {
+ "name": "ഡാനിഷൠകàµà´°àµ‹à´£àµ†",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "ഡൊമിനികàµà´•àµ» പെസോ",
+ "symbol": "DOP"
+ },
+ "TJS": {
+ "name": "താജികàµà´•à´¿à´¸àµà´¥à´¾à´¨à´¿ സൊമോനി",
+ "symbol": "TJS"
+ },
+ "THB": {
+ "name": "തായൠബടàµà´Ÿàµ",
+ "symbol": "฿"
+ },
+ "TMT": {
+ "name": "à´¤àµàµ¼à´•àµà´•àµâ€Œà´®àµ†à´¨à´¿à´¸àµà´¥à´¾à´¨à´¿ മനതàµ",
+ "symbol": "TMT"
+ },
+ "KRW": {
+ "name": "ദകàµà´·à´¿à´£ കൊറിയൻ വോൺ",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "ദകàµà´·à´¿à´£ à´¸àµà´¡à´¾à´¨àµ€à´¸àµ പൗണàµà´Ÿàµ",
+ "symbol": "SSP"
+ },
+ "ZAR": {
+ "name": "ദകàµà´·à´¿à´£à´¾à´«àµà´°à´¿à´•àµà´•àµ» റാൻഡàµ",
+ "symbol": "ZAR"
+ },
+ "DJF": {
+ "name": "ദിജിബൗടàµà´Ÿà´¿à´¯àµ» à´«àµà´°à´¾à´™àµà´•àµ",
+ "symbol": "DJF"
+ },
+ "NAD": {
+ "name": "നമീബിയൻ ഡോളർ",
+ "symbol": "NAD"
+ },
+ "NIO": {
+ "name": "നികàµà´•à´°à´¾à´—àµà´µàµ» കോർഡോബ",
+ "symbol": "NIO"
+ },
+ "ANG": {
+ "name": "നെതർലാൻഡàµâ€Œà´¸àµ ആനàµà´±à´¿à´²àµ» ഗിൽഡർ",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "നേപàµà´ªà´¾à´³àµ€à´¸àµ à´±àµà´ªàµà´ªàµ€",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "നൈജീരിയൻ നൈറ",
+ "symbol": "NGN"
+ },
+ "NOK": {
+ "name": "നോർവീജിയൻ à´•àµà´°àµ‹à´£àµ†",
+ "symbol": "NOK"
+ },
+ "TWD": {
+ "name": "à´¨àµà´¯àµ‚ തായàµâ€Œà´µà´¾àµ» ഡോളർ",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "à´¨àµà´¯àµ‚സിലാനàµà´±àµ ഡോളർ",
+ "symbol": "NZ$"
+ },
+ "PAB": {
+ "name": "പനാമനിയൻ ബാൽബോവ",
+ "symbol": "PAB"
+ },
+ "PYG": {
+ "name": "പരാഗàµà´µàµ‡à´¯àµ» à´—àµà´µà´°à´¨àµ€",
+ "symbol": "PYG"
+ },
+ "PKR": {
+ "name": "പാകàµà´•à´¿à´¸àµà´¥à´¾à´¨à´¿ à´±àµà´ªàµà´ªàµ€",
+ "symbol": "PKR"
+ },
+ "PGK": {
+ "name": "പാപàµà´ªàµà´µ à´¨àµà´¯àµ‚ ഗിനിയൻ à´•à´¿à´¨",
+ "symbol": "PGK"
+ },
+ "PEN": {
+ "name": "പെറàµà´µà´¿à´¯àµ» à´¨àµà´¯àµ‚വോ സോൾ",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "പോളിഷൠസàµà´²àµ‹à´Ÿàµà´Ÿà´¿",
+ "symbol": "PLN"
+ },
+ "FKP": {
+ "name": "ഫാകàµà´•àµâ€Œà´²à´¾à´¨àµà´±àµ à´¦àµà´µàµ€à´ªàµà´•à´³àµà´Ÿàµ† പൗണàµà´Ÿàµ",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "ഫിജിയൻ ഡോളർ",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "ഫിലിപàµà´ªàµ€à´¨à´¿ പെസോ",
+ "symbol": "PHP"
+ },
+ "BDT": {
+ "name": "ബംഗàµà´²à´¾à´¦àµ‡à´¶à´¿ ടാകàµà´•",
+ "symbol": "BDT"
+ },
+ "BSD": {
+ "name": "ബഹാമിയൻ ഡോളർ",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "ബഹàµà´±àµˆà´¨à´¿ ദിനാർ",
+ "symbol": "BHD"
+ },
+ "BGN": {
+ "name": "ബൾഗേറിയൻ ലെവàµ",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "ബറàµà´£àµà´Ÿà´¿à´¯àµ» à´«àµà´°à´¾à´™àµà´•àµ",
+ "symbol": "BIF"
+ },
+ "BBD": {
+ "name": "ബാർബഡോസൠഡോളർ",
+ "symbol": "BBD"
+ },
+ "BMD": {
+ "name": "ബെർമàµà´¡àµ» ഡോളർ",
+ "symbol": "BMD"
+ },
+ "BYR": {
+ "name": "ബെലാറàµà´·àµà´¯àµ» റൂബിൾ",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "ബെലീസൠഡോളർ",
+ "symbol": "BZD"
+ },
+ "BOB": {
+ "name": "ബൊളീവിയൻ ബൊളിവിയാനോ",
+ "symbol": "BOB"
+ },
+ "BWP": {
+ "name": "ബോടàµâ€Œà´¸àµà´µà´¾à´¨àµ» à´ªàµà´¯àµà´²",
+ "symbol": "BWP"
+ },
+ "BAM": {
+ "name": "ബോസàµâ€Œà´¨à´¿à´¯-ഹെർസഗോവിന കൺവേർടàµà´Ÿà´¬à´¿àµ¾ മാർകàµà´•àµ",
+ "symbol": "BAM"
+ },
+ "BRL": {
+ "name": "à´¬àµà´°à´¸àµ€à´²à´¿à´¯àµ» റിയാൽ",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "à´¬àµà´°à´¿à´Ÿàµà´Ÿàµ€à´·àµ പൗണàµà´Ÿàµ à´¸àµâ€Œà´±àµà´±àµ†àµ¼à´²à´¿à´‚à´—àµ",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "à´¬àµà´°àµ‚ണൈ ഡോളർ",
+ "symbol": "BND"
+ },
+ "BTN": {
+ "name": "ഭൂടàµà´Ÿà´¾à´¨àµ€à´¸àµ ഗൾടàµà´°à´‚",
+ "symbol": "BTN"
+ },
+ "MOP": {
+ "name": "മകാനീസൠപതാകàµà´•",
+ "symbol": "MOP"
+ },
+ "MGA": {
+ "name": "മഡഗാസി à´à´°à´¿à´¯à´±à´¿",
+ "symbol": "MGA"
+ },
+ "MNT": {
+ "name": "മംഗോളിയൻ à´¤àµà´—àµà´°à´¿à´•àµ",
+ "symbol": "MNT"
+ },
+ "MWK": {
+ "name": "മലാവിയൻ à´•àµà´µà´šàµà´šà´¾",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "മലേഷàµà´¯àµ» റിംഗിറàµà´±àµ",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "മാൽദീവിയൻ à´±àµà´«à´¿à´¯",
+ "symbol": "MVR"
+ },
+ "MKD": {
+ "name": "മാസിഡോണിയൻ ദിനാർ",
+ "symbol": "MKD"
+ },
+ "MXN": {
+ "name": "മെകàµà´¸à´¿à´•àµà´•àµ» പെസോ",
+ "symbol": "MX$"
+ },
+ "MZN": {
+ "name": "മൊസാംബികàµà´•àµ» മെറàµà´±à´¿à´•àµà´•àµ½",
+ "symbol": "MZN"
+ },
+ "MDL": {
+ "name": "മൊൾഡോവൻ ലിയàµ",
+ "symbol": "MDL"
+ },
+ "MAD": {
+ "name": "മൊറോകàµà´•àµ» ദിർഹം",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "മൗറിറàµà´±àµ‡à´¨à´¿à´¯àµ» ഔഗിയ",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "മൗറീഷàµà´¯àµ» à´±àµà´ªàµà´ªàµ€",
+ "symbol": "MUR"
+ },
+ "MMK": {
+ "name": "à´®àµà´¯à´¾àµ»à´®à´¾àµ¼ à´•àµà´¯à´¾à´Ÿàµ",
+ "symbol": "MMK"
+ },
+ "USD": {
+ "name": "à´¯àµ.à´Žà´¸àµ. ഡോളർ",
+ "symbol": "$"
+ },
+ "AED": {
+ "name": "à´¯àµà´£àµˆà´±àµà´±à´¡àµ അറബൠഎമിറേറàµà´±àµà´¸àµ ദിർഹം",
+ "symbol": "AED"
+ },
+ "EUR": {
+ "name": "യൂറോ",
+ "symbol": "€"
+ },
+ "YER": {
+ "name": "യെമനി റിയാൽ",
+ "symbol": "YER"
+ },
+ "LAK": {
+ "name": "ലാവോഷിയൻ à´•à´¿à´ªàµ",
+ "symbol": "LAK"
+ },
+ "LTL": {
+ "name": "ലിതàµà´µà´¾à´¨à´¿à´¯àµ» ലിറàµà´±à´¾à´¸àµ",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "ലിബിയൻ ദിനാർ",
+ "symbol": "LYD"
+ },
+ "LBP": {
+ "name": "ലെബനീസൠപൗണàµà´Ÿàµ",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "ലെസോതോ ലോതàµà´¤à´¿",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "ലൈബീരിയൻ ഡോളർ",
+ "symbol": "LRD"
+ },
+ "VUV": {
+ "name": "വനàµà´µà´¾à´¤àµ വാതàµ",
+ "symbol": "VUV"
+ },
+ "VND": {
+ "name": "വിയറàµà´±àµà´¨à´¾à´®àµ€à´¸àµ ഡോങàµ",
+ "symbol": "â‚«"
+ },
+ "VEF": {
+ "name": "വെനിസàµà´µàµ‡à´²àµ» ബൊളീവർ",
+ "symbol": "VEF"
+ },
+ "LKR": {
+ "name": "à´¶àµà´°àµ€à´²à´™àµà´•àµ» à´±àµà´ªàµà´ªàµ€",
+ "symbol": "LKR"
+ },
+ "WST": {
+ "name": "സമോവൻ താല",
+ "symbol": "WST"
+ },
+ "ZMW": {
+ "name": "സാംബിയൻ à´•àµà´µà´¾à´šàµà´š",
+ "symbol": "ZMW"
+ },
+ "STD": {
+ "name": "സാവോ ടോമി ആൻഡൠപàµà´°à´¿àµ»à´¸à´¿à´ªàµ† ഡോബàµà´°",
+ "symbol": "STD"
+ },
+ "SGD": {
+ "name": "സിംഗപàµà´ªàµ‚ർ ഡോളർ",
+ "symbol": "SGD"
+ },
+ "SLL": {
+ "name": "സിയെറ ലിയോണിയൻ ലിയോൺ",
+ "symbol": "SLL"
+ },
+ "SYP": {
+ "name": "സിറിയൻ പൗണàµà´Ÿàµ",
+ "symbol": "SYP"
+ },
+ "SCR": {
+ "name": "സീഷെലോയിസൠറàµà´ªàµà´ªàµ€",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "à´¸àµà´¡à´¾à´¨àµ€à´¸àµ പൗണàµà´Ÿàµ",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "à´¸àµà´°à´¿à´¨àµ†à´¯à´¿à´®à´¿à´¸àµ ഡോളർ",
+ "symbol": "SRD"
+ },
+ "SHP": {
+ "name": "സെനàµà´±àµ ഹെലീന പൗണàµà´Ÿàµ",
+ "symbol": "SHP"
+ },
+ "RSD": {
+ "name": "സെർബിയൻ ദിനാർ",
+ "symbol": "RSD"
+ },
+ "SOS": {
+ "name": "സോമാലി à´·à´¿à´²àµà´²à´¿à´‚à´—àµ",
+ "symbol": "SOS"
+ },
+ "SBD": {
+ "name": "സോളമൻ à´¦àµà´µàµ€à´ªàµà´•à´³àµà´Ÿàµ† ഡോളർ",
+ "symbol": "SBD"
+ },
+ "SAR": {
+ "name": "സൗദി റിയാൽ",
+ "symbol": "SAR"
+ },
+ "SZL": {
+ "name": "à´¸àµà´µà´¾à´¸à´¿ ലിലാംഗനി",
+ "symbol": "SZL"
+ },
+ "CHF": {
+ "name": "à´¸àµà´µà´¿à´¸àµ à´«àµà´°à´¾à´™àµà´•àµ",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "à´¸àµà´µàµ€à´¡à´¿à´·àµ à´•àµà´°àµ‹à´£",
+ "symbol": "SEK"
+ },
+ "HUF": {
+ "name": "ഹംഗേറിയൻ ഫോറിനàµà´±àµ",
+ "symbol": "HUF"
+ },
+ "HTG": {
+ "name": "ഹെയàµâ€Œà´¤à´¿à´¯àµ» ഗൂർഡàµ",
+ "symbol": "HTG"
+ },
+ "HKD": {
+ "name": "ഹോങàµà´•àµ‹à´™àµà´™àµ ഡോളർ",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "ഹോണàµà´Ÿàµà´±àµ» ലെംപിറ",
+ "symbol": "HNL"
+ },
+ "RUB": {
+ "name": "റഷàµà´¯àµ» റൂബിൾ",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "à´±àµà´µà´¾à´£àµà´Ÿàµ» à´«àµà´°à´¾à´™àµà´•àµ",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "റൊമാനിയൻ ലെയàµ",
+ "symbol": "RON"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/mn.json b/library/intl/resources/currency/mn.json
new file mode 100644
index 000000000..f0f2c73e2
--- /dev/null
+++ b/library/intl/resources/currency/mn.json
@@ -0,0 +1,634 @@
+{
+ "XPF": {
+ "name": "CFP франк",
+ "symbol": "CFPF"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "AUD": {
+ "name": "авÑтрали доллар",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "азербайжаны манат",
+ "symbol": "AZN"
+ },
+ "ALL": {
+ "name": "албанийн лек",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "алжир доллар",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "америк доллар",
+ "symbol": "$"
+ },
+ "AOA": {
+ "name": "Ðнгол кванза",
+ "symbol": "AOA"
+ },
+ "AED": {
+ "name": "арабын нÑгдÑÑн Ñмиратын дирхам",
+ "symbol": "AED"
+ },
+ "ARS": {
+ "name": "аргентин пеÑо",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "арменийн драм",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "арубын флорин",
+ "symbol": "AWG"
+ },
+ "AFN": {
+ "name": "афганиÑтаний афгани",
+ "symbol": "AFN"
+ },
+ "BSD": {
+ "name": "багам доллар",
+ "symbol": "BSD"
+ },
+ "NPR": {
+ "name": "балба рупи",
+ "symbol": "NPR"
+ },
+ "BDT": {
+ "name": "бангладешийн така",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Ð±Ð°Ñ€Ð±Ð°Ð´Ð¾Ñ Ð´Ð¾Ð»Ð»Ð°Ñ€",
+ "symbol": "BBD"
+ },
+ "BHD": {
+ "name": "бахрейн динар",
+ "symbol": "BHD"
+ },
+ "BYR": {
+ "name": "Ð±ÐµÐ»Ð°Ñ€ÑƒÑ Ñ€ÑƒÐ±Ð»ÑŒ",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "белиз доллар",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "бермуд доллар",
+ "symbol": "BMD"
+ },
+ "BGN": {
+ "name": "болгарийн лев",
+ "symbol": "BGN"
+ },
+ "BOB": {
+ "name": "боливи боливиано",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "боÑни-герцеговин хөрвөгч марк",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "БотÑвани пула",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "бразилийн рил",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "британийн фунт Ñтерлинг",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "бруней доллар",
+ "symbol": "BND"
+ },
+ "BIF": {
+ "name": "Бурунд франк",
+ "symbol": "BIF"
+ },
+ "BTN": {
+ "name": "бутаны нгултрум",
+ "symbol": "BTN"
+ },
+ "VUV": {
+ "name": "вануатугийн вату",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "венеÑуÑлийн боливар",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "вьетнамын донг",
+ "symbol": "â‚«"
+ },
+ "GYD": {
+ "name": "гайана доллар",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "гайтийн гоурд",
+ "symbol": "HTG"
+ },
+ "GMD": {
+ "name": "Гамби далаÑи",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "Гана Ñеди",
+ "symbol": "GHS"
+ },
+ "GTQ": {
+ "name": "гватемалийн кецал",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Гвиней франк",
+ "symbol": "GNF"
+ },
+ "GIP": {
+ "name": "гибралтар паунд",
+ "symbol": "GIP"
+ },
+ "HNL": {
+ "name": "гондураÑын лемпира",
+ "symbol": "HNL"
+ },
+ "GEL": {
+ "name": "гүржийн лари",
+ "symbol": "GEL"
+ },
+ "DKK": {
+ "name": "данийн крон",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "доминикын пеÑо",
+ "symbol": "DOP"
+ },
+ "EUR": {
+ "name": "евро",
+ "symbol": "€"
+ },
+ "EGP": {
+ "name": "египет паунд",
+ "symbol": "EGP"
+ },
+ "DJF": {
+ "name": "Жибоути франк",
+ "symbol": "DJF"
+ },
+ "ZMW": {
+ "name": "Замби квача",
+ "symbol": "ZMW"
+ },
+ "XCD": {
+ "name": "зүүн карибийн доллар",
+ "symbol": "EC$"
+ },
+ "ILS": {
+ "name": "израйлийн ÑˆÐ¸Ð½Ñ ÑˆÐµÐºÐµÐ»",
+ "symbol": "₪"
+ },
+ "IDR": {
+ "name": "индонези рупи",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "ирак динар",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "иран риал",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "иÑландийн крон",
+ "symbol": "ISK"
+ },
+ "YER": {
+ "name": "йемен риал",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "йордан динар",
+ "symbol": "JOD"
+ },
+ "CVE": {
+ "name": "Кабо-Верде ÑÑкудо",
+ "symbol": "CVE"
+ },
+ "KZT": {
+ "name": "казахын Ñ‚ÑнгÑ",
+ "symbol": "KZT"
+ },
+ "KYD": {
+ "name": "кайман арлын доллар",
+ "symbol": "KYD"
+ },
+ "KHR": {
+ "name": "камбож риел",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "канад доллар",
+ "symbol": "CA$"
+ },
+ "QAR": {
+ "name": "катар риал",
+ "symbol": "QAR"
+ },
+ "KES": {
+ "name": "Кени шиллинг",
+ "symbol": "KES"
+ },
+ "COP": {
+ "name": "колумбын пеÑо",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Комор франк",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Конго франк",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "коÑта рикагийн колон",
+ "symbol": "CRC"
+ },
+ "CUP": {
+ "name": "кубийн пеÑо",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "кубийн хөрвөгч пеÑо",
+ "symbol": "CUC"
+ },
+ "KWD": {
+ "name": "кувейт динар",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "кыргызын Ñом",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "лаоÑын кип",
+ "symbol": "LAK"
+ },
+ "LRD": {
+ "name": "Либери доллар",
+ "symbol": "LRD"
+ },
+ "LBP": {
+ "name": "ливан паунд",
+ "symbol": "LBP"
+ },
+ "LYD": {
+ "name": "ливи доллар",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "литвийн литаÑ",
+ "symbol": "LTL"
+ },
+ "MRO": {
+ "name": "Мавритан угиÑ",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Мавритын рупи",
+ "symbol": "MUR"
+ },
+ "MOP": {
+ "name": "макаогийн патака",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "македони динар",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "Малави квача",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "малайзын рингит",
+ "symbol": "MYR"
+ },
+ "MGA": {
+ "name": "Малайн ариари",
+ "symbol": "MGA"
+ },
+ "MVR": {
+ "name": "мальдив руфиÑ",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "мароккогийн дирхам",
+ "symbol": "MAD"
+ },
+ "MXN": {
+ "name": "мекÑикийн пеÑо",
+ "symbol": "MX$"
+ },
+ "MZN": {
+ "name": "Мозамбик метикал",
+ "symbol": "MZN"
+ },
+ "MDL": {
+ "name": "молдавийн леу",
+ "symbol": "MDL"
+ },
+ "MMK": {
+ "name": "мьÑнмарын киат",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Ðамиби доллар",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "Ðигери найра",
+ "symbol": "NGN"
+ },
+ "ANG": {
+ "name": "нидерландын Ð°Ð½Ñ‚Ð¸Ð»Ð»ÑŠÑ Ð³ÑƒÐ»Ð´ÐµÑ€",
+ "symbol": "ANG"
+ },
+ "NIO": {
+ "name": "никарагуагийн кордоба",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "норвегийн крон",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "омани риал",
+ "symbol": "OMR"
+ },
+ "RUB": {
+ "name": "Ð¾Ñ€Ð¾Ñ Ñ€ÑƒÐ±Ð»ÑŒ",
+ "symbol": "RUB"
+ },
+ "ZAR": {
+ "name": "Өмнөд Ðфрикийн ранд",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "өмнөд ÑÐ¾Ð»Ð¾Ð½Ð³Ð¾Ñ Ð²Ð¾Ð½",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "өмнөд Ñудан паунд",
+ "symbol": "SSP"
+ },
+ "PKR": {
+ "name": "пакиÑтан рупи",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "панамын бальбоа",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "папуа-ÑˆÐ¸Ð½Ñ Ð³Ð²Ð¸Ð½ÐµÐ¹Ð½ кина",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "парагвайн гуарани",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "перугийн невоÑоль",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "польшийн злот",
+ "symbol": "PLN"
+ },
+ "RWF": {
+ "name": "Руанд франк",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "румыны леу",
+ "symbol": "RON"
+ },
+ "WST": {
+ "name": "Ñамоагийн тала",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "Сан-Томе ба ПринÑипи добра",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Ñауди риал",
+ "symbol": "SAR"
+ },
+ "SZL": {
+ "name": "Свазиланд лилангени",
+ "symbol": "SZL"
+ },
+ "SCR": {
+ "name": "Сейшел рупи",
+ "symbol": "SCR"
+ },
+ "SHP": {
+ "name": "Сент Хелена паунд",
+ "symbol": "SHP"
+ },
+ "RSD": {
+ "name": "Ñерб динар",
+ "symbol": "RSD"
+ },
+ "SGD": {
+ "name": "Ñингапур доллар",
+ "symbol": "SGD"
+ },
+ "SYP": {
+ "name": "Ñири паунд",
+ "symbol": "SYP"
+ },
+ "SBD": {
+ "name": "Ñоломон арлын доллар",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Сомали шиллинг",
+ "symbol": "SOS"
+ },
+ "SDG": {
+ "name": "Ñудан паунд",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Ñуринам доллар",
+ "symbol": "SRD"
+ },
+ "SLL": {
+ "name": "Сьерра Леоне леоне",
+ "symbol": "SLL"
+ },
+ "TJS": {
+ "name": "тажикийн Ñомон",
+ "symbol": "TJS"
+ },
+ "THB": {
+ "name": "тайландын бат",
+ "symbol": "฿"
+ },
+ "TZS": {
+ "name": "Танзани шиллинг",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "тонгагийн панга",
+ "symbol": "TOP"
+ },
+ "MNT": {
+ "name": "төгрөг",
+ "symbol": "â‚®"
+ },
+ "TTD": {
+ "name": "тринидад ба тобаго доллар",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Ñ‚ÑƒÐ½Ð¸Ñ Ð´Ð¾Ð»Ð»Ð°Ñ€",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "туркийн лира",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "туркмен манат",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Уганд шиллинг",
+ "symbol": "UGX"
+ },
+ "UZS": {
+ "name": "узбекын Ñом",
+ "symbol": "UZS"
+ },
+ "UAH": {
+ "name": "украйны гривнÑ",
+ "symbol": "UAH"
+ },
+ "HUF": {
+ "name": "унгарийн форинт",
+ "symbol": "HUF"
+ },
+ "UYU": {
+ "name": "уругвайн пеÑо",
+ "symbol": "UYU"
+ },
+ "FJD": {
+ "name": "фижи доллар",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "филиппин пеÑо",
+ "symbol": "PHP"
+ },
+ "FKP": {
+ "name": "фолклÑнд арлын паунд",
+ "symbol": "FKP"
+ },
+ "XOF": {
+ "name": "Франк КФРBCЕÐО",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Франк КФРBEAC",
+ "symbol": "FCFA"
+ },
+ "KPW": {
+ "name": "хойд ÑÐ¾Ð»Ð¾Ð½Ð³Ð¾Ñ Ð²Ð¾Ð½",
+ "symbol": "KPW"
+ },
+ "HKD": {
+ "name": "хонгконг доллар",
+ "symbol": "HK$"
+ },
+ "HRK": {
+ "name": "хорватын куна",
+ "symbol": "HRK"
+ },
+ "CNY": {
+ "name": "Ñ…Ñтад юань",
+ "symbol": "CNÂ¥"
+ },
+ "CZK": {
+ "name": "чехийн коруна",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "чилийн пеÑо",
+ "symbol": "CLP"
+ },
+ "SEK": {
+ "name": "шведийн крон",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "швейцарь франк",
+ "symbol": "CHF"
+ },
+ "NZD": {
+ "name": "ÑˆÐ¸Ð½Ñ Ð·ÐµÐ»Ð°Ð½Ð´ доллар",
+ "symbol": "NZ$"
+ },
+ "TWD": {
+ "name": "ÑˆÐ¸Ð½Ñ Ñ‚Ð°Ð¹Ð²Ð°Ð½ доллар",
+ "symbol": "NT$"
+ },
+ "LKR": {
+ "name": "шри-ланк рупи",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "ÑнÑÑ‚Ñ…Ñг рупи",
+ "symbol": "₹"
+ },
+ "ERN": {
+ "name": "Эритрей накфа",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Этиоп бирр",
+ "symbol": "ETB"
+ },
+ "JMD": {
+ "name": "Ñмайк доллар",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Ñпон иен",
+ "symbol": "JPÂ¥"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/mr.json b/library/intl/resources/currency/mr.json
new file mode 100644
index 000000000..df2614e5b
--- /dev/null
+++ b/library/intl/resources/currency/mr.json
@@ -0,0 +1,634 @@
+{
+ "XOF": {
+ "name": "[CFA] फà¥à¤°à¤à¤• [BCEAO]",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "[CFA] फà¥à¤°à¤à¤• [BEAC]",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "[CFP] फà¥à¤°à¤à¤•",
+ "symbol": "CFPF"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "AOA": {
+ "name": "अà¤à¤—ोलन कà¥à¤µà¥…नà¥à¤à¤¾",
+ "symbol": "AOA"
+ },
+ "AZN": {
+ "name": "अà¤à¤°à¤¬à¥ˆà¤à¤¾à¤¨à¥€ मानाट",
+ "symbol": "AZN"
+ },
+ "AFN": {
+ "name": "अफगाण अफगाणी",
+ "symbol": "AFN"
+ },
+ "AWG": {
+ "name": "अरà¥à¤¬à¤¾ फà¥à¤²à¥‹à¤°à¤¿à¤¨",
+ "symbol": "AWG"
+ },
+ "ARS": {
+ "name": "अरà¥à¤œà¥‡à¤‚टाइन पेसो",
+ "symbol": "ARS"
+ },
+ "DZD": {
+ "name": "अलà¥à¤œà¥‡à¤°à¤¿à¤¯à¤¨ दिनार",
+ "symbol": "DZD"
+ },
+ "ALL": {
+ "name": "अलà¥à¤¬à¤¾à¤¨à¤¿à¤¯à¤¨ लेक",
+ "symbol": "ALL"
+ },
+ "ISK": {
+ "name": "आइसलà¤à¤¡à¤¿à¤• कà¥à¤°à¥‹à¤¨à¤¾",
+ "symbol": "ISK"
+ },
+ "AMD": {
+ "name": "आरà¥à¤®à¥‡à¤¨à¤¿à¤¯à¤¨ दà¥à¤°à¥…म",
+ "symbol": "AMD"
+ },
+ "IDR": {
+ "name": "इंडोनेशियन रà¥à¤ªà¥ˆà¤¯à¤¾à¤¹",
+ "symbol": "IDR"
+ },
+ "EGP": {
+ "name": "इजिपà¥à¤¶à¤¿à¤¯à¤¨ पाउंड",
+ "symbol": "EGP"
+ },
+ "ETB": {
+ "name": "इथिओपियन बिर",
+ "symbol": "ETB"
+ },
+ "IQD": {
+ "name": "इराकी दिनार",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "इराणी रियाल",
+ "symbol": "IRR"
+ },
+ "ERN": {
+ "name": "इरिटà¥à¤°à¤¿à¤¯à¤¨ नाफà¥à¤•à¤¾",
+ "symbol": "ERN"
+ },
+ "ILS": {
+ "name": "ईसà¥à¤¤à¥à¤°à¤¾à¤¯à¤²à¥€ नà¥à¤¯à¥‚ शेकेल",
+ "symbol": "₪"
+ },
+ "UZS": {
+ "name": "उà¤à¤¬à¥‡à¤•à¤¿à¤¸à¥à¤¤à¤¾à¤¨ सॉम",
+ "symbol": "UZS"
+ },
+ "KPW": {
+ "name": "उतà¥à¤¤à¤° कोरियन वॉन",
+ "symbol": "KPW"
+ },
+ "UYU": {
+ "name": "उरà¥à¤—à¥à¤µà¥‡à¤šà¤¾ पेसो",
+ "symbol": "UYU"
+ },
+ "AUD": {
+ "name": "ऑसà¥à¤Ÿà¥à¤°à¥‡à¤²à¤¿à¤¯à¤¨ डॉलर",
+ "symbol": "A$"
+ },
+ "OMR": {
+ "name": "ओमानी रियाल",
+ "symbol": "OMR"
+ },
+ "KHR": {
+ "name": "कंबोडियन रियेल",
+ "symbol": "KHR"
+ },
+ "KZT": {
+ "name": "कà¤à¤¾à¤•à¤¿à¤¸à¥à¤¤à¤¾à¤¨à¥€ तेंगे",
+ "symbol": "KZT"
+ },
+ "QAR": {
+ "name": "कतारी रियाल",
+ "symbol": "QAR"
+ },
+ "CDF": {
+ "name": "काà¤à¤—ोलीज फà¥à¤°à¤à¤•",
+ "symbol": "CDF"
+ },
+ "KGS": {
+ "name": "किरगिसà¥à¤¤à¤¾à¤¨à¥€ सॉम",
+ "symbol": "KGS"
+ },
+ "KWD": {
+ "name": "कà¥à¤µà¥ˆà¤¤à¥€ दिनार",
+ "symbol": "KWD"
+ },
+ "CAD": {
+ "name": "कॅनडियन डॉलर",
+ "symbol": "CA$"
+ },
+ "KES": {
+ "name": "केनियन शिलिंग",
+ "symbol": "KES"
+ },
+ "CVE": {
+ "name": "केप वà¥à¤¹à¤°à¥à¤¡à¥‡à¤¯à¤¨ à¤à¤¸à¥à¤•à¥à¤¡à¥‹",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "केमेन आयलॅंड डॉलर",
+ "symbol": "KYD"
+ },
+ "COP": {
+ "name": "कोलंबियन पेसो",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "कोलोरियन फà¥à¤°à¤à¤•",
+ "symbol": "KMF"
+ },
+ "CRC": {
+ "name": "कोसà¥à¤Ÿà¤¾ रिका कोलोन",
+ "symbol": "CRC"
+ },
+ "CUP": {
+ "name": "कà¥à¤¯à¥‚बन पेसो",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "कà¥à¤¯à¥‚बन विनिमय पेसो",
+ "symbol": "CUC"
+ },
+ "HRK": {
+ "name": "कà¥à¤°à¥‹à¤à¤¶à¤¿à¤¯à¤¨ कूना",
+ "symbol": "HRK"
+ },
+ "GYD": {
+ "name": "गयाना डॉलर",
+ "symbol": "GYD"
+ },
+ "GMD": {
+ "name": "गामà¥à¤¬à¤¿à¤¯à¤¨ डालासी",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "गिनी फà¥à¤°à¤à¤•",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "गà¥à¤µà¤¾à¤Ÿà¥‡à¤®à¤¾à¤²à¤¾à¤šà¥‡ कà¥à¤µà¥‡à¤¤à¥à¤à¤¾à¤²",
+ "symbol": "GTQ"
+ },
+ "GHS": {
+ "name": "घानीयन सेडी",
+ "symbol": "GHS"
+ },
+ "CLP": {
+ "name": "चिली पेसो",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "चीनी यà¥à¤†à¤¨",
+ "symbol": "CNÂ¥"
+ },
+ "JPY": {
+ "name": "जपानी येन",
+ "symbol": "JPÂ¥"
+ },
+ "JMD": {
+ "name": "जमैकन डॉलर",
+ "symbol": "JMD"
+ },
+ "DJF": {
+ "name": "जिबौटियन फà¥à¤°à¤à¤•",
+ "symbol": "DJF"
+ },
+ "GIP": {
+ "name": "जिबà¥à¤°à¤¾à¤²à¥à¤Ÿà¤° पाउंड",
+ "symbol": "GIP"
+ },
+ "GEL": {
+ "name": "जॉरà¥à¤œà¤¿à¤¯à¤¨ लारी",
+ "symbol": "GEL"
+ },
+ "JOD": {
+ "name": "जॉरà¥à¤¡à¤¨à¤¿à¤¯à¤¨ दिनार",
+ "symbol": "JOD"
+ },
+ "ZMW": {
+ "name": "à¤à¤¾à¤‚बियन कà¥à¤µà¤¾à¤šà¤¾",
+ "symbol": "ZMW"
+ },
+ "CZK": {
+ "name": "à¤à¥‡à¤• पà¥à¤°à¤œà¤¾à¤¸à¤¤à¥à¤¤à¤¾à¤• कोरà¥à¤¨à¤¾",
+ "symbol": "CZK"
+ },
+ "TZS": {
+ "name": "टांà¤à¤¾à¤¨à¤¿à¤¯à¤¨ शिलिंग",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "टोंगा पाआंगा",
+ "symbol": "TOP"
+ },
+ "TND": {
+ "name": "टà¥à¤¯à¥‚निशियन दिनार",
+ "symbol": "TND"
+ },
+ "DKK": {
+ "name": "डॅनिश कà¥à¤°à¥‹à¤¨",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "डोमिनिकन पेसो",
+ "symbol": "DOP"
+ },
+ "TJS": {
+ "name": "ताजकीसà¥à¤¤à¤¾à¤¨à¥€ सोमोनी",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "तà¥à¤°à¥à¤•à¤®à¥‡à¤¨à¤¿à¤¸à¥à¤¤à¤¾à¤¨à¥€ मानाट",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "तà¥à¤°à¥à¤•à¥€ लिरा",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "तà¥à¤°à¤¿à¤¨à¤¿à¤¦à¤¾à¤¦ आणि टोबॅगो डॉलर",
+ "symbol": "TTD"
+ },
+ "THB": {
+ "name": "थाई बाहत",
+ "symbol": "฿"
+ },
+ "ZAR": {
+ "name": "दकà¥à¤·à¤¿à¤£ आफà¥à¤°à¤¿à¤•à¥€ रà¤à¤¡",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "दकà¥à¤·à¤¿à¤£ कोरियन वॉन",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "दकà¥à¤·à¤¿à¤£ सà¥à¤¦à¤¾à¤¨à¥€ पाउंड",
+ "symbol": "SSP"
+ },
+ "NAD": {
+ "name": "नमिबियन डॉलर",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "नायजेरियन नायरा",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "निकारागà¥à¤µà¥‡à¤šà¤¾ कोरà¥à¤¡à¥‹à¤¬à¤¾",
+ "symbol": "NIO"
+ },
+ "ANG": {
+ "name": "नेदरलà¤à¤¡à¤šà¤¾ अà¤à¤Ÿà¤¿à¤²à¥€à¤¨ गिलà¥à¤¡à¤°",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "नेपाळी रà¥à¤ªà¤¯à¤¾",
+ "symbol": "NPR"
+ },
+ "NOK": {
+ "name": "नॉरà¥à¤µà¥‡à¤œà¤¿à¤¯à¤¨ कà¥à¤°à¥‹à¤¨",
+ "symbol": "NOK"
+ },
+ "TWD": {
+ "name": "नà¥à¤¯à¥‚ तैवान डॉलर",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "नà¥à¤¯à¥‚à¤à¥€à¤²à¤à¤¡ डॉलर",
+ "symbol": "NZ$"
+ },
+ "PAB": {
+ "name": "पनामा बालà¥à¤¬à¥‹à¤†",
+ "symbol": "PAB"
+ },
+ "PYG": {
+ "name": "परागà¥à¤µà¥‡ गà¥à¤µà¤¾à¤°à¤¾à¤¨à¥€",
+ "symbol": "PYG"
+ },
+ "PKR": {
+ "name": "पाकिसà¥à¤¤à¤¾à¤¨à¥€ रà¥à¤ªà¤¯à¤¾",
+ "symbol": "PKR"
+ },
+ "PGK": {
+ "name": "पापà¥à¤† नà¥à¤¯à¥‚ गिनीयन किना",
+ "symbol": "PGK"
+ },
+ "XCD": {
+ "name": "पूरà¥à¤µ कॅरीबियन डॉलर",
+ "symbol": "EC$"
+ },
+ "PEN": {
+ "name": "पेरà¥à¤µà¤¿à¤¯à¤¨ नà¥à¤‡à¤µà¥à¤¹à¥‹ सोल",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "पोलिश à¤à¥à¤²à¥‰à¤Ÿà¥€",
+ "symbol": "PLN"
+ },
+ "FJD": {
+ "name": "फिजियन डॉलर",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "फिलिपिनी पेसो",
+ "symbol": "PHP"
+ },
+ "FKP": {
+ "name": "फॉकलंड आयलंड पाउंड",
+ "symbol": "FKP"
+ },
+ "BMD": {
+ "name": "बरà¥à¤®à¥à¤¡à¤¾ डॉलर",
+ "symbol": "BMD"
+ },
+ "BGN": {
+ "name": "बलà¥à¤—ेरियन लेव",
+ "symbol": "BGN"
+ },
+ "BSD": {
+ "name": "बहामी डॉलर",
+ "symbol": "BSD"
+ },
+ "BDT": {
+ "name": "बांगलादेशी टका",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "बारà¥à¤¬à¤¾à¤¡à¤¿à¤¯à¤¨ डॉलर",
+ "symbol": "BBD"
+ },
+ "BHD": {
+ "name": "बाहरिनी दिनार",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "बà¥à¤°à¥à¤¡à¤¿à¤¯à¤¨ फà¥à¤°à¤à¤•",
+ "symbol": "BIF"
+ },
+ "BYR": {
+ "name": "बेलारà¥à¤¶à¤¿à¤¯à¤¨ रà¥à¤¬à¤²",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "बेलीठडॉलर",
+ "symbol": "BZD"
+ },
+ "BWP": {
+ "name": "बोटà¥à¤¸à¤µà¤¾à¤¨à¤¾ पà¥à¤²à¤¾",
+ "symbol": "BWP"
+ },
+ "BOB": {
+ "name": "बोलिवà¥à¤¹à¤¿à¤¯à¤¨ बोलिवà¥à¤¹à¤¿à¤¯à¤¾à¤¨à¥‹",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "बोसà¥à¤¨à¤¿à¤¯à¤¾-हरà¥à¤œà¥‡à¤—ोविना विनिमय मारà¥à¤•",
+ "symbol": "BAM"
+ },
+ "BRL": {
+ "name": "बà¥à¤°à¤¾à¤à¤¿à¤²à¤¿à¤¯à¤¨ रियाल",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "बà¥à¤°à¤¿à¤Ÿà¤¿à¤¶ पाऊंड सà¥à¤Ÿà¤°à¥à¤²à¤¿à¤‚ग",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "बà¥à¤°à¥à¤¨à¥‡à¤ˆ डॉलर",
+ "symbol": "BND"
+ },
+ "INR": {
+ "name": "भारतीय रà¥à¤ªà¤¯à¤¾",
+ "symbol": "₹"
+ },
+ "BTN": {
+ "name": "भूतानी à¤à¤‚गलà¥à¤Ÿà¥à¤°à¤®",
+ "symbol": "BTN"
+ },
+ "MNT": {
+ "name": "मंगोलियन टà¥à¤—à¥à¤°à¤¿à¤•",
+ "symbol": "MNT"
+ },
+ "MYR": {
+ "name": "मलेशियन रिंगिट",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "मालदीवियन रà¥à¤«à¤¿à¤¯à¤¾",
+ "symbol": "MVR"
+ },
+ "MGA": {
+ "name": "मालागासी à¤à¤°à¤¿à¤¯à¤¾à¤°à¥€",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "मालावियन कà¥à¤µà¤¾à¤šà¤¾",
+ "symbol": "MWK"
+ },
+ "MOP": {
+ "name": "मॅकॅनीजॠपटाका",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "मॅसेडोनियन देनार",
+ "symbol": "MKD"
+ },
+ "MXN": {
+ "name": "मेकà¥à¤¸à¤¿à¤•à¥‹ पेसो",
+ "symbol": "MX$"
+ },
+ "MRO": {
+ "name": "मॉरिटानियन ओगिया",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "मॉरिशियन रà¥à¤ªà¥€",
+ "symbol": "MUR"
+ },
+ "MZN": {
+ "name": "मोà¤à¤¾à¤‚बिकन मेटिकल",
+ "symbol": "MZN"
+ },
+ "MAD": {
+ "name": "मोरोकà¥à¤•à¥‹ दिरहॅम",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "मोलà¥à¤¡à¥‹à¤µà¤¨ लेउ",
+ "symbol": "MDL"
+ },
+ "MMK": {
+ "name": "मà¥à¤¯à¤¾à¤¨à¤®à¤¾à¤° कà¥à¤¯à¤¾à¤Ÿ",
+ "symbol": "MMK"
+ },
+ "UAH": {
+ "name": "यà¥à¤•à¥à¤°à¥‡à¤¨à¤¿à¤¯à¤¨ रिवनिया",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "यà¥à¤—ांडा शिलिंग",
+ "symbol": "UGX"
+ },
+ "EUR": {
+ "name": "यà¥à¤°à¥‹",
+ "symbol": "€"
+ },
+ "USD": {
+ "name": "यूà¤à¤¸ डॉलर",
+ "symbol": "$"
+ },
+ "YER": {
+ "name": "येमेनी रियाल",
+ "symbol": "YER"
+ },
+ "RWF": {
+ "name": "रवांडा फà¥à¤°à¤à¤•",
+ "symbol": "RWF"
+ },
+ "RUB": {
+ "name": "रशियन रà¥à¤¬à¤²",
+ "symbol": "RUB"
+ },
+ "RON": {
+ "name": "रोमानियन लेऊ",
+ "symbol": "RON"
+ },
+ "LRD": {
+ "name": "लाइबेरियन डॉलर",
+ "symbol": "LRD"
+ },
+ "LTL": {
+ "name": "लिथà¥à¤†à¤¨à¤¿à¤¯à¤¨ लिटास",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "लिबियाचा दिनार",
+ "symbol": "LYD"
+ },
+ "LAK": {
+ "name": "लेओशियन किप",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "लेबनीज पाउंड",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "लेसोटो लोटी",
+ "symbol": "LSL"
+ },
+ "VUV": {
+ "name": "वानाटॠवाटà¥",
+ "symbol": "VUV"
+ },
+ "VND": {
+ "name": "वà¥à¤¹à¤¿à¤à¤¤à¤¨à¤¾à¤®à¥€ डोंग",
+ "symbol": "â‚«"
+ },
+ "VEF": {
+ "name": "वà¥à¤¹à¥‡à¤¨à¥‡à¤à¥à¤à¤²à¤¾ बोलिवà¥à¤¹à¤¾à¤°",
+ "symbol": "VEF"
+ },
+ "LKR": {
+ "name": "शà¥à¤°à¥€à¤²à¤‚कन रà¥à¤ªà¥€",
+ "symbol": "LKR"
+ },
+ "AED": {
+ "name": "संयà¥à¤•à¥à¤¤ अरब अमीरात दिरहॅम",
+ "symbol": "AED"
+ },
+ "RSD": {
+ "name": "सरà¥à¤¬à¤¿à¤¯à¤¨ दिनार",
+ "symbol": "RSD"
+ },
+ "STD": {
+ "name": "साओ टोम आणि पà¥à¤°à¤¿à¤¨à¥à¤¸à¤¿à¤ªà¥‡ डोबरा",
+ "symbol": "STD"
+ },
+ "WST": {
+ "name": "सामोअन टाला",
+ "symbol": "WST"
+ },
+ "SGD": {
+ "name": "सिंगापूर डॉलर",
+ "symbol": "SGD"
+ },
+ "SLL": {
+ "name": "सिà¤à¤°à¤¾ लिऑनचा लिऑन",
+ "symbol": "SLL"
+ },
+ "SYP": {
+ "name": "सीरियन पाउंड",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "सà¥à¤¦à¤¾à¤¨à¥€ पाउंड",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "सà¥à¤°à¤¿à¤¨à¤¾à¤®à¥€ डॉलर",
+ "symbol": "SRD"
+ },
+ "SHP": {
+ "name": "सेंट हेलेना पाउंड",
+ "symbol": "SHP"
+ },
+ "SCR": {
+ "name": "सेशेलोईस रà¥à¤ªà¥€",
+ "symbol": "SCR"
+ },
+ "SOS": {
+ "name": "सोमाली शिलिंग",
+ "symbol": "SOS"
+ },
+ "SBD": {
+ "name": "सोलोमन आयलà¤à¤¡à¥à¤¸ डॉलर",
+ "symbol": "SBD"
+ },
+ "SAR": {
+ "name": "सौदी रियाल",
+ "symbol": "SAR"
+ },
+ "SZL": {
+ "name": "सà¥à¤µà¤¾à¤à¥€ लीलांगेनी",
+ "symbol": "SZL"
+ },
+ "CHF": {
+ "name": "सà¥à¤µà¤¿à¤¸ फà¥à¤°à¤à¤•",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "सà¥à¤µà¥€à¤¡à¤¿à¤¶ कà¥à¤°à¥‹à¤¨à¤¾",
+ "symbol": "SEK"
+ },
+ "HUF": {
+ "name": "हंगेरियन फॉरिनà¥à¤Ÿ",
+ "symbol": "HUF"
+ },
+ "HKD": {
+ "name": "हाà¤à¤—काà¤à¤— डॉलर",
+ "symbol": "HK$"
+ },
+ "HTG": {
+ "name": "हैती गोअरà¥à¤¡",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "होंडà¥à¤°à¤¾ लेमà¥à¤ªà¤¿à¤¯à¤°à¤¾",
+ "symbol": "HNL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ms.json b/library/intl/resources/currency/ms.json
new file mode 100644
index 000000000..cbecbb720
--- /dev/null
+++ b/library/intl/resources/currency/ms.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghani Afghanistan",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "Ariary Malagasy",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "Baht Thai",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "Balboa Panama",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "Birr Ethiopia",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "Bolivar Venezuela",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "Boliviano Bolivia",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "Cedi Ghana",
+ "symbol": "GHS"
+ },
+ "CRC": {
+ "name": "Colon Costa Rica",
+ "symbol": "CRC"
+ },
+ "NIO": {
+ "name": "Cordoba Nicaragua",
+ "symbol": "NIO"
+ },
+ "GMD": {
+ "name": "Dalasi Gambia",
+ "symbol": "GMD"
+ },
+ "MKD": {
+ "name": "Denar Macedonia",
+ "symbol": "MKD"
+ },
+ "DZD": {
+ "name": "Dinar Algeria",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinar Bahrain",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "Dinar Iraq",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "Dinar Jordan",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "Dinar Kuwait",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "Dinar Libya",
+ "symbol": "LYD"
+ },
+ "RSD": {
+ "name": "Dinar Serbia",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "Dinar Tunisia",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham Emiriah Arab Bersatu",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham Maghribi",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "Dobra Sao Tome dan Principe",
+ "symbol": "STD"
+ },
+ "USD": {
+ "name": "Dolar AS",
+ "symbol": "USD"
+ },
+ "AUD": {
+ "name": "Dolar Australia",
+ "symbol": "A$"
+ },
+ "BSD": {
+ "name": "Dolar Bahamas",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "Dolar Barbados",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Dolar Belize",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Dolar Bermuda",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "Dolar Brunei",
+ "symbol": "BND"
+ },
+ "XCD": {
+ "name": "Dolar Caribbean Timur",
+ "symbol": "EC$"
+ },
+ "FJD": {
+ "name": "Dolar Fiji",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "Dolar Guyana",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "Dolar Hong Kong",
+ "symbol": "HK$"
+ },
+ "JMD": {
+ "name": "Dolar Jamaica",
+ "symbol": "JMD"
+ },
+ "CAD": {
+ "name": "Dolar Kanada",
+ "symbol": "CAD"
+ },
+ "KYD": {
+ "name": "Dolar Kepulauan Cayman",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "Dolar Kepulauan Solomon",
+ "symbol": "SBD"
+ },
+ "LRD": {
+ "name": "Dolar Liberia",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Dolar Namibia",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "Dolar New Zealand",
+ "symbol": "NZ$"
+ },
+ "SGD": {
+ "name": "Dolar Singapura",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "Dolar Surinam",
+ "symbol": "SRD"
+ },
+ "TWD": {
+ "name": "Dolar Taiwan Baru",
+ "symbol": "NT$"
+ },
+ "TTD": {
+ "name": "Dolar Trinidad dan Tobago",
+ "symbol": "TTD"
+ },
+ "VND": {
+ "name": "Dong Vietnam",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "Dram Armenia",
+ "symbol": "AMD"
+ },
+ "ERN": {
+ "name": "ERN",
+ "symbol": "ERN"
+ },
+ "CVE": {
+ "name": "Escudo Tanjung Verde",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "AWG": {
+ "name": "Florin Aruba",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "Forint Hungary",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "Franc Burundia",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Franc CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Franc CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "Franc CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "Franc Comoria",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Franc Congo",
+ "symbol": "CDF"
+ },
+ "DJF": {
+ "name": "Franc Djibouti",
+ "symbol": "DJF"
+ },
+ "GNF": {
+ "name": "Franc Guinea",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "Franc Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Franc Switzerland",
+ "symbol": "CHF"
+ },
+ "HTG": {
+ "name": "Gourde Haiti",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "Guarani Paraguay",
+ "symbol": "PYG"
+ },
+ "ANG": {
+ "name": "Guilder Antillean Netherland",
+ "symbol": "ANG"
+ },
+ "UAH": {
+ "name": "Hryvnia Ukraine",
+ "symbol": "UAH"
+ },
+ "PGK": {
+ "name": "Kina Papua New Guinea",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "Kip Laos",
+ "symbol": "LAK"
+ },
+ "CZK": {
+ "name": "Koruna Republik Czech",
+ "symbol": "CZK"
+ },
+ "ISK": {
+ "name": "Krona Iceland",
+ "symbol": "ISK"
+ },
+ "SEK": {
+ "name": "Krona Sweden",
+ "symbol": "SEK"
+ },
+ "DKK": {
+ "name": "Krone Denmark",
+ "symbol": "DKK"
+ },
+ "NOK": {
+ "name": "Krone Norway",
+ "symbol": "NOK"
+ },
+ "HRK": {
+ "name": "Kuna Croatia",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "Kwacha Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza Angola",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "Kyat Myanma",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "Lari Georgia",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "Lek Albania",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "Lempira Honduras",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "Leone Sierra Leone",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "Leu Moldova",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "Leu Romania",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "Lev Bulgaria",
+ "symbol": "BGN"
+ },
+ "SZL": {
+ "name": "Lilangeni Swazi",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "Lira Turki",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "Litas Lithuania",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Loti Lesotho",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "Manat Azerbaijan",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "Manat Turkmenistan",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "Mark Boleh Tukar Bosnia-Herzegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "Metikal Mozambique",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira Nigeria",
+ "symbol": "NGN"
+ },
+ "BTN": {
+ "name": "Ngultrum Bhutan",
+ "symbol": "BTN"
+ },
+ "PEN": {
+ "name": "Nuevo Sol Peru",
+ "symbol": "PEN"
+ },
+ "MRO": {
+ "name": "Ouguiya Mauritania",
+ "symbol": "MRO"
+ },
+ "MOP": {
+ "name": "Pataca Macau",
+ "symbol": "MOP"
+ },
+ "GIP": {
+ "name": "Paun Gibraltar",
+ "symbol": "GIP"
+ },
+ "FKP": {
+ "name": "Paun Kepulauan Falkland",
+ "symbol": "FKP"
+ },
+ "LBP": {
+ "name": "Paun Lubnan",
+ "symbol": "LBP"
+ },
+ "EGP": {
+ "name": "Paun Mesir",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Paun Saint Helena",
+ "symbol": "SHP"
+ },
+ "GBP": {
+ "name": "Paun Sterling British",
+ "symbol": "£"
+ },
+ "SDG": {
+ "name": "Paun Sudan",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "Paun Sudan selatan",
+ "symbol": "SSP"
+ },
+ "SYP": {
+ "name": "Paun Syria",
+ "symbol": "SYP"
+ },
+ "ARS": {
+ "name": "Peso Argentina",
+ "symbol": "ARS"
+ },
+ "CUC": {
+ "name": "Peso Boleh Tukar Cuba",
+ "symbol": "CUC"
+ },
+ "CLP": {
+ "name": "Peso Chile",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "Peso Colombia",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "Peso Cuba",
+ "symbol": "CUP"
+ },
+ "DOP": {
+ "name": "Peso Dominican",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "Peso Filipina",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "Peso Mexico",
+ "symbol": "MXN"
+ },
+ "BWP": {
+ "name": "Pula Botswana",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "Quetzal Guatemala",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "Rand Afrika Selatan",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "Real Brazil",
+ "symbol": "R$"
+ },
+ "IRR": {
+ "name": "Rial Iran",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "Rial Oman",
+ "symbol": "OMR"
+ },
+ "QAR": {
+ "name": "Rial Qatar",
+ "symbol": "QAR"
+ },
+ "YER": {
+ "name": "Rial Yaman",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "Riel Kemboja",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "Ringgit Malaysia",
+ "symbol": "RM"
+ },
+ "SAR": {
+ "name": "Riyal Saudi",
+ "symbol": "SAR"
+ },
+ "BYR": {
+ "name": "Ruble Belarus",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "Ruble Rusia",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "Rufiyaa Maldives",
+ "symbol": "MVR"
+ },
+ "INR": {
+ "name": "Rupee India",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupee Mauritia",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "Rupee Nepal",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "Rupee Pakistan",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "Rupee Seychelles",
+ "symbol": "SCR"
+ },
+ "LKR": {
+ "name": "Rupee Sri Lanka",
+ "symbol": "LKR"
+ },
+ "IDR": {
+ "name": "Rupiah Indonesia",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "Sheqel Baru Israel",
+ "symbol": "₪"
+ },
+ "KGS": {
+ "name": "Som Kyrgystani",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "Som Uzbekistan",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "Somoni Tajikistan",
+ "symbol": "TJS"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "KES": {
+ "name": "Syiling Kenya",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Syiling Somali",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Syiling Tanzania",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Syiling Uganda",
+ "symbol": "UGX"
+ },
+ "BDT": {
+ "name": "Taka Bangladesh",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "Tala Samoa",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "Tenge Kazakhstan",
+ "symbol": "KZT"
+ },
+ "TOP": {
+ "name": "Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "MNT": {
+ "name": "Tugrik Mongolia",
+ "symbol": "MNT"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "VUV": {
+ "name": "Vatu Vanuatu",
+ "symbol": "VUV"
+ },
+ "KRW": {
+ "name": "Won Korea Selatan",
+ "symbol": "â‚©"
+ },
+ "KPW": {
+ "name": "Won Korea Utara",
+ "symbol": "KPW"
+ },
+ "JPY": {
+ "name": "Yen Jepun",
+ "symbol": "JPÂ¥"
+ },
+ "CNY": {
+ "name": "Yuan Cina",
+ "symbol": "CNÂ¥"
+ },
+ "PLN": {
+ "name": "Zloty Poland",
+ "symbol": "PLN"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/mt.json b/library/intl/resources/currency/mt.json
new file mode 100644
index 000000000..18f1b4991
--- /dev/null
+++ b/library/intl/resources/currency/mt.json
@@ -0,0 +1,634 @@
+{
+ "AED": {
+ "name": "AED",
+ "symbol": "AED"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "AOA",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AUD": {
+ "name": "AUD",
+ "symbol": "A$"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BHD": {
+ "name": "BHD",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "BIF",
+ "symbol": "BIF"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BWP": {
+ "name": "BWP",
+ "symbol": "BWP"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CAD": {
+ "name": "CAD",
+ "symbol": "CA$"
+ },
+ "CDF": {
+ "name": "CDF",
+ "symbol": "CDF"
+ },
+ "CHF": {
+ "name": "CHF",
+ "symbol": "CHF"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "CNY",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CVE": {
+ "name": "CVE",
+ "symbol": "CVE"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DJF": {
+ "name": "DJF",
+ "symbol": "DJF"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "DZD": {
+ "name": "DZD",
+ "symbol": "DZD"
+ },
+ "EGP": {
+ "name": "EGP",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "ERN",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "ETB",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "ewro",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GBP": {
+ "name": "GBP",
+ "symbol": "£"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GMD": {
+ "name": "GMD",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "INR",
+ "symbol": "₹"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "JPY": {
+ "name": "JPY",
+ "symbol": "JPÂ¥"
+ },
+ "KES": {
+ "name": "KES",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "KMF",
+ "symbol": "KMF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LRD": {
+ "name": "LRD",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "LYD",
+ "symbol": "LYD"
+ },
+ "MAD": {
+ "name": "MAD",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MGA": {
+ "name": "MGA",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MRO": {
+ "name": "MRO",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "MWK",
+ "symbol": "MWK"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SAR": {
+ "name": "SAR",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "SDG",
+ "symbol": "SDG"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SOS",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "TND",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "TZS": {
+ "name": "TZS",
+ "symbol": "TZS"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "UGX",
+ "symbol": "UGX"
+ },
+ "USD": {
+ "name": "USD",
+ "symbol": "US$"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZAR": {
+ "name": "ZAR",
+ "symbol": "ZAR"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/mua.json b/library/intl/resources/currency/mua.json
new file mode 100644
index 000000000..135efb022
--- /dev/null
+++ b/library/intl/resources/currency/mua.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "ZAR": {
+ "name": "Solai Africa nekÇsÇÅ‹",
+ "symbol": "ZAR"
+ },
+ "DZD": {
+ "name": "solai Algerya",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "Solai Amerika",
+ "symbol": "US$"
+ },
+ "AOA": {
+ "name": "solai Angola",
+ "symbol": "AOA"
+ },
+ "AED": {
+ "name": "Solai Arabiya",
+ "symbol": "AED"
+ },
+ "AUD": {
+ "name": "solai Australya",
+ "symbol": "A$"
+ },
+ "BHD": {
+ "name": "solai Barenya",
+ "symbol": "BHD"
+ },
+ "XOF": {
+ "name": "solai BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "solai BEAC",
+ "symbol": "FCFA"
+ },
+ "BWP": {
+ "name": "solai Botswana",
+ "symbol": "BWP"
+ },
+ "GBP": {
+ "name": "solai Britaniya",
+ "symbol": "£"
+ },
+ "BIF": {
+ "name": "solai Burundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "solai Djibouti",
+ "symbol": "DJF"
+ },
+ "EGP": {
+ "name": "solai Egypt",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "solai Eritre",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "solai Etiopia",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "solai Euro",
+ "symbol": "€"
+ },
+ "GMD": {
+ "name": "solai Gambiya",
+ "symbol": "GMD"
+ },
+ "SHP": {
+ "name": "Solai Helena",
+ "symbol": "SHP"
+ },
+ "INR": {
+ "name": "solai India",
+ "symbol": "₹"
+ },
+ "JPY": {
+ "name": "solai Japoŋ",
+ "symbol": "JPÂ¥"
+ },
+ "CAD": {
+ "name": "solai Kanada",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "solai Kapverdiya",
+ "symbol": "CVE"
+ },
+ "KES": {
+ "name": "solai Kenia",
+ "symbol": "KES"
+ },
+ "KMF": {
+ "name": "solai Komorya",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "solai Kongo",
+ "symbol": "CDF"
+ },
+ "LSL": {
+ "name": "solai Lesotho",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "solai Liberiya",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "solai Libya",
+ "symbol": "LYD"
+ },
+ "MGA": {
+ "name": "Solai Malagasya",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Solai Malawi",
+ "symbol": "MWK"
+ },
+ "MAD": {
+ "name": "Solai Marok",
+ "symbol": "MAD"
+ },
+ "MUR": {
+ "name": "Solai MauricÇ",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "Solai Mauritaniya",
+ "symbol": "MRO"
+ },
+ "NAD": {
+ "name": "Solai Namibiya",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "Solai Nigeriya",
+ "symbol": "NGN"
+ },
+ "RWF": {
+ "name": "Solai Rwanda",
+ "symbol": "RWF"
+ },
+ "SCR": {
+ "name": "Solai Saichel",
+ "symbol": "SCR"
+ },
+ "STD": {
+ "name": "Solai Sao Tome",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Solai Saudiya",
+ "symbol": "SAR"
+ },
+ "SLL": {
+ "name": "solai Sierra leonÇ",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "Solai Somaliya",
+ "symbol": "SOS"
+ },
+ "SDG": {
+ "name": "Solai Sudaŋ ma dii ne dinar",
+ "symbol": "SDG"
+ },
+ "SZL": {
+ "name": "solai Swaziland",
+ "symbol": "SZL"
+ },
+ "CHF": {
+ "name": "Solai Swiss",
+ "symbol": "CHF"
+ },
+ "CNY": {
+ "name": "solai Syiŋ",
+ "symbol": "CNÂ¥"
+ },
+ "TZS": {
+ "name": "Solai Tanzaniya",
+ "symbol": "TZS"
+ },
+ "TND": {
+ "name": "Solai Tunisiya",
+ "symbol": "TND"
+ },
+ "UGX": {
+ "name": "Solai Uganda",
+ "symbol": "UGX"
+ },
+ "ZMW": {
+ "name": "Solai Zambiya",
+ "symbol": "ZMW"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/my.json b/library/intl/resources/currency/my.json
new file mode 100644
index 000000000..0b184fdbe
--- /dev/null
+++ b/library/intl/resources/currency/my.json
@@ -0,0 +1,634 @@
+{
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "XPF": {
+ "name": "XPFဖရန့်",
+ "symbol": "CFPF"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "CAD": {
+ "name": "ကနေဒါ ဒေါ်လာ",
+ "symbol": "CA$"
+ },
+ "QAR": {
+ "name": "ကာá€á€¬á€›á€®á€¡á€±á€¬á€ºá€œá€º",
+ "symbol": "QAR"
+ },
+ "KWD": {
+ "name": "ကူá€á€­á€á€ºá€’ီနာ",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "ကေမန် ကျွန်းစု ဒေါ်လာ",
+ "symbol": "KYD"
+ },
+ "CRC": {
+ "name": "ကော့စ်á€á€¬á€›á€®á€€á€¬ á€á€­á€¯á€œá€¯á€¶á€¸",
+ "symbol": "CRC"
+ },
+ "KMF": {
+ "name": "ကိုမိုရိုစ် ဖရန့်",
+ "symbol": "KMF"
+ },
+ "COP": {
+ "name": "ကိုလံဘီယာ ပီဆို",
+ "symbol": "COP"
+ },
+ "KES": {
+ "name": "ကင်ညာသျှီလင်",
+ "symbol": "KES"
+ },
+ "XAF": {
+ "name": "ကင်မရွန်းဖရန့်",
+ "symbol": "FCFA"
+ },
+ "KHR": {
+ "name": "ကမ္ဘောဒီးယား ရီးယဲ",
+ "symbol": "KHR"
+ },
+ "CUP": {
+ "name": "ကျူးဘား ပီဆို",
+ "symbol": "CUP"
+ },
+ "CDF": {
+ "name": "ကွန်ဂို ဖရန့်",
+ "symbol": "CDF"
+ },
+ "KGS": {
+ "name": "á€á€›á€°á€‚စ်စá€á€”်ဆော်မ်",
+ "symbol": "KGS"
+ },
+ "KZT": {
+ "name": "á€á€›á€°á€‚စ်စá€á€”်ထိန်ဂျီ",
+ "symbol": "KZT"
+ },
+ "HRK": {
+ "name": "á€á€›á€­á€¯á€¡á€±á€¸á€›á€¾á€¬á€¸á€á€°á€¸á€”ာ",
+ "symbol": "HRK"
+ },
+ "CVE": {
+ "name": "á€á€±á€·á€•á€ºá€—ာဒူ အက်စ်á€á€°á€’ို",
+ "symbol": "CVE"
+ },
+ "CLP": {
+ "name": "á€á€»á€®á€œá€® ပီဆို",
+ "symbol": "CLP"
+ },
+ "CZK": {
+ "name": "á€á€»á€€á€ºá€á€­á€¯á€›á€­á€¯á€”ာ",
+ "symbol": "CZK"
+ },
+ "GHS": {
+ "name": "ဂါနာ ဆဲဒီ",
+ "symbol": "GHS"
+ },
+ "GNF": {
+ "name": "ဂီးနီ ဖရန့်",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "ဂူရာနာ ဒေါ်လာ",
+ "symbol": "GYD"
+ },
+ "GMD": {
+ "name": "ဂန်ဘီယာ ဒါလာစီ",
+ "symbol": "GMD"
+ },
+ "JPY": {
+ "name": "ဂျပန်ယန်း",
+ "symbol": "JPÂ¥"
+ },
+ "JMD": {
+ "name": "ဂျမေကာ ဒေါ်လာ",
+ "symbol": "JMD"
+ },
+ "GIP": {
+ "name": "ဂျီဘရော်လ်á€á€¬ ပေါင်",
+ "symbol": "GIP"
+ },
+ "DJF": {
+ "name": "ဂျီဘူá€á€® ဖရန့်",
+ "symbol": "DJF"
+ },
+ "GEL": {
+ "name": "ဂျော်ဂျီယာလားရီ",
+ "symbol": "GEL"
+ },
+ "JOD": {
+ "name": "ဂျော်ဒန်ဒီနား",
+ "symbol": "JOD"
+ },
+ "GTQ": {
+ "name": "ဂွာá€á€®á€™á€¬á€œá€¬ á€á€€á€ºá€‡á€±á€¬á€ºá€œá€º",
+ "symbol": "GTQ"
+ },
+ "WST": {
+ "name": "စမိုအထားလာ",
+ "symbol": "WST"
+ },
+ "SGD": {
+ "name": "စင်္ကာပူ ဒေါ်လာ",
+ "symbol": "SGD"
+ },
+ "STD": {
+ "name": "စိန့်á€á€­á€¯á€™á€®á€”ှင့်ပရင်စီပ့် ဒိုဘရာ",
+ "symbol": "STD"
+ },
+ "SHP": {
+ "name": "စိန့်ဟဲလီနာ ပေါင်",
+ "symbol": "SHP"
+ },
+ "SZL": {
+ "name": "စွာဇီလန်လီလန်းဂီနီ",
+ "symbol": "SZL"
+ },
+ "RSD": {
+ "name": "ဆားဘီးယားဒယ်နား",
+ "symbol": "RSD"
+ },
+ "SLL": {
+ "name": "ဆီအဲရာ လီအိုနီယန် လီအိုနီ",
+ "symbol": "SLL"
+ },
+ "SYP": {
+ "name": "ဆီးရီးယား ပေါင်",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "ဆူဒန် ပေါင်",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "ဆူရီနိမ်း ဒေါ်လာ",
+ "symbol": "SRD"
+ },
+ "SCR": {
+ "name": "ဆေးရှလ်ရူးပီး",
+ "symbol": "SCR"
+ },
+ "SAR": {
+ "name": "ဆော်ဒီအာရေးဗီးယားရီယော်လ်",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "ဆော်လမွန်ကျွန်းစု ဒေါ်လာ",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "ဆိုမာလီသျှီလင်",
+ "symbol": "SOS"
+ },
+ "SEK": {
+ "name": "ဆွီဒင် á€á€›á€­á€¯á€á€¬",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "ဆွစ် ဖရန့်",
+ "symbol": "CHF"
+ },
+ "ZMW": {
+ "name": "ဇင်ဘာဘွေá€á€½á€«á€¸á€á€»á€¬",
+ "symbol": "ZMW"
+ },
+ "CNY": {
+ "name": "á€á€›á€¯á€á€º ယွမ်",
+ "symbol": "CNÂ¥"
+ },
+ "TJS": {
+ "name": "á€á€¬á€‚ျီကစ္စá€á€”်ဆိုမိုနီ",
+ "symbol": "TJS"
+ },
+ "TND": {
+ "name": "á€á€°á€”ီရှားဒီနာ",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "á€á€°á€›á€€á€® လိုင်ရာ",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "á€á€¬á€á€ºá€™á€®á€”့စ်á€á€”်မာနá€á€º",
+ "symbol": "TMT"
+ },
+ "KRW": {
+ "name": "á€á€±á€¬á€„်ကိုးရီးယား á€á€™á€º",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "á€á€±á€¬á€„်ဆူဒန်ပေါင်",
+ "symbol": "SSP"
+ },
+ "ZAR": {
+ "name": "á€á€±á€¬á€„်အဖရိက ရန်း",
+ "symbol": "ZAR"
+ },
+ "TZS": {
+ "name": "á€á€”်ဇန်းနီးယားသျှီလင်",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "á€á€½á€”်ဂါဗန်ဂါ",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "ထရိုင်နီဒá€á€ºá€”ှင့်á€á€­á€¯á€˜á€¬á€‚ိုဒေါ်လာ",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "ထိုင်á€á€™á€º ဒေါ်လာအသစ်",
+ "symbol": "NT$"
+ },
+ "THB": {
+ "name": "ထိုင်းဘá€á€º",
+ "symbol": "฿"
+ },
+ "DOP": {
+ "name": "ဒိုမီနီကန် ပီဆို",
+ "symbol": "DOP"
+ },
+ "DKK": {
+ "name": "ဒိန်းမá€á€ºá€á€›á€­á€¯á€á€¬",
+ "symbol": "DKK"
+ },
+ "NZD": {
+ "name": "နယူးဇီလန် ဒေါ်လာ",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "နီကာရာဂွာ á€á€­á€¯á€¸á€’ိုဘာ",
+ "symbol": "NIO"
+ },
+ "NPR": {
+ "name": "နီပေါ ရူပီး",
+ "symbol": "NPR"
+ },
+ "NOK": {
+ "name": "နော်á€á€± á€á€›á€­á€¯á€á€¬",
+ "symbol": "NOK"
+ },
+ "NGN": {
+ "name": "နိုင်ဂျီးရီးယားနိုင်းရာ",
+ "symbol": "NGN"
+ },
+ "CUC": {
+ "name": "နိုင်ငံá€á€¼á€¬á€¸á€„ွေလဲလှယ်နိုင်သော ကျူးဘားပီဆိုငွေ",
+ "symbol": "CUC"
+ },
+ "NAD": {
+ "name": "နမ်မီးဘီးယား ဒေါ်လာ",
+ "symbol": "NAD"
+ },
+ "ANG": {
+ "name": "နယ်သာလန် အန်á€á€®á€œá€”် ဂင်းဒါး",
+ "symbol": "ANG"
+ },
+ "PAB": {
+ "name": "ပနားမား ဘလ်ဘိုးအာ",
+ "symbol": "PAB"
+ },
+ "PKR": {
+ "name": "ပါကစ္စá€á€”် ရူပီး",
+ "symbol": "PKR"
+ },
+ "PGK": {
+ "name": "ပါပူရာနယူးဂီနီá€á€®á€¸á€”ာ",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "ပါရာဂွေးဂွါးအ်နီး",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "ပီရူး နူအီဗိုဆိုးလ်",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "ပိုလန် ဇ‌လော့á€á€®",
+ "symbol": "PLN"
+ },
+ "PHP": {
+ "name": "ဖိလစ်ပိုင် ပီဆို",
+ "symbol": "PHP"
+ },
+ "FJD": {
+ "name": "ဖီဂျီ ဒေါ်လာ",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "ဖောက်ကလန် ကျွန်းစု ပေါင်",
+ "symbol": "FKP"
+ },
+ "VUV": {
+ "name": "ဗာနုအာá€á€°á€—ားထူ",
+ "symbol": "VUV"
+ },
+ "VND": {
+ "name": "ဗီယက်နမ် ဒေါင်",
+ "symbol": "â‚«"
+ },
+ "VEF": {
+ "name": "ဗင်နီဇွဲလား ဘိုလီဗာ",
+ "symbol": "VEF"
+ },
+ "GBP": {
+ "name": "ဗြိá€á€­á€žá€»á€¾ ပေါင်",
+ "symbol": "£"
+ },
+ "BRL": {
+ "name": "ဘရာဇီး ရီးယဲ",
+ "symbol": "R$"
+ },
+ "BND": {
+ "name": "ဘရူနိုင်း ဒေါ်လာ",
+ "symbol": "BND"
+ },
+ "BSD": {
+ "name": "ဘဟားမား ဒေါ်လာ",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "ဘာဘဒီယံဒေါ်လာ",
+ "symbol": "BBD"
+ },
+ "BMD": {
+ "name": "ဘာမူဒါ ဒေါ်လာ",
+ "symbol": "BMD"
+ },
+ "BHD": {
+ "name": "ဘာရိန်းဒီနား",
+ "symbol": "BHD"
+ },
+ "BYR": {
+ "name": "ဘီလာရုစ် ရူဘယ်",
+ "symbol": "BYR"
+ },
+ "BGN": {
+ "name": "ဘူဂေးရီးယားလက်ဖ်",
+ "symbol": "BGN"
+ },
+ "BTN": {
+ "name": "ဘူá€á€”်အံဂါလ်ထရန်",
+ "symbol": "BTN"
+ },
+ "BIF": {
+ "name": "ဘူရွန်ဒီ ဖရန့်",
+ "symbol": "BIF"
+ },
+ "BZD": {
+ "name": "ဘေလီဇ် ဒေါ်လာ",
+ "symbol": "BZD"
+ },
+ "BAM": {
+ "name": "ဘော့စနီးယား နှင့် ဟာဇီဂိုဘီးနားမá€á€ºá€€á€º",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "ဘော့စ်á€á€«á€”ာ ပုလ",
+ "symbol": "BWP"
+ },
+ "BOB": {
+ "name": "ဘိုလီဘီယံ ဘိုလီဘီအားနို",
+ "symbol": "BOB"
+ },
+ "BDT": {
+ "name": "ဘင်္ဂလားဒေ့ရှ် á€á€¬á€€á€¬",
+ "symbol": "BDT"
+ },
+ "MOP": {
+ "name": "မကာအိုပါá€á€¬á€¸á€€á€¬á€¸",
+ "symbol": "MOP"
+ },
+ "MGA": {
+ "name": "မလာဂစ်စီ အရီရရီ ငွေကြေး",
+ "symbol": "MGA"
+ },
+ "MYR": {
+ "name": "မလေးရှား ရင်းဂစ်",
+ "symbol": "MYR"
+ },
+ "MKD": {
+ "name": "မာစီဒိုးနီးယားဒီနာ",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "မာလာá€á€®á€á€½á€«á€¸á€á€»á€¬",
+ "symbol": "MWK"
+ },
+ "MRO": {
+ "name": "မောရီá€á€¬á€”ီအာအူဂီးယာ",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "မော်ရေရှားစ် ရူပီ",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "မော်လ်ဒိုက်ရူးဖီရာ",
+ "symbol": "MVR"
+ },
+ "MZN": {
+ "name": "မိုဇန်ဘစ်မက်á€á€®á€á€šá€ºá€œá€º",
+ "symbol": "MZN"
+ },
+ "MAD": {
+ "name": "မိုရိုကို ဒရမ်",
+ "symbol": "MAD"
+ },
+ "MXN": {
+ "name": "မက္ကဆီကို ပီဆို",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "မောလ်ဒိုဗာလယ်အို",
+ "symbol": "MDL"
+ },
+ "KPW": {
+ "name": "မြောက်ကိုးရီးယား á€á€™á€º",
+ "symbol": "KPW"
+ },
+ "MMK": {
+ "name": "မြန်မာကျပ်",
+ "symbol": "K"
+ },
+ "MNT": {
+ "name": "မွန်ဂိုးလီးယားထူးဂရá€á€º",
+ "symbol": "MNT"
+ },
+ "YER": {
+ "name": "ယီမင်ရီအော်လ်",
+ "symbol": "YER"
+ },
+ "UAH": {
+ "name": "ယူကရိန်း",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "ယူဂန္ဓာသျှီလင်",
+ "symbol": "UGX"
+ },
+ "EUR": {
+ "name": "ယူရို",
+ "symbol": "€"
+ },
+ "RWF": {
+ "name": "ရá€á€”်ဒါ ဖရန့်",
+ "symbol": "RWF"
+ },
+ "RUB": {
+ "name": "ရုရှ ရူဘယ်",
+ "symbol": "RUB"
+ },
+ "RON": {
+ "name": "ရိုမေးနီယားလယ်အို",
+ "symbol": "RON"
+ },
+ "LAK": {
+ "name": "လာအိုá€á€­á€•á€º",
+ "symbol": "LAK"
+ },
+ "LYD": {
+ "name": "လီဗျာ ဒီနာ",
+ "symbol": "LYD"
+ },
+ "LBP": {
+ "name": "လက်ဘနွန် ပေါင်",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "လိုင်ဘေးရီးယား ဒေါ်လာ",
+ "symbol": "LRD"
+ },
+ "LTL": {
+ "name": "လစ်သူယေးနီးယားလီá€á€¬á€¸á€…်",
+ "symbol": "LTL"
+ },
+ "LKR": {
+ "name": "သီရိလင်္ကာ ရူပီး",
+ "symbol": "LKR"
+ },
+ "HTG": {
+ "name": "ဟေá€á€®á€‚ူးအော်ဒ်",
+ "symbol": "HTG"
+ },
+ "HKD": {
+ "name": "ဟောင်ကောင် ဒေါ်လာ",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "ဟန်ဂေရီယံဖော်ရင့်á€á€º",
+ "symbol": "HUF"
+ },
+ "HNL": {
+ "name": "ဟွန်ဒူးရပ်စ် လန်းပီးရာ",
+ "symbol": "HNL"
+ },
+ "AZN": {
+ "name": "အဇာဘိုင်ဂျန်မာနá€á€º",
+ "symbol": "AZN"
+ },
+ "USD": {
+ "name": "အမေရိကန် ဒေါ်လာ",
+ "symbol": "US$"
+ },
+ "AWG": {
+ "name": "အရူဘန် ဂင်းဒါး",
+ "symbol": "AWG"
+ },
+ "XCD": {
+ "name": "အရှေ့ကာရီဘီယံဒေါ်လာ",
+ "symbol": "EC$"
+ },
+ "ARS": {
+ "name": "အာဂျင်á€á€®á€¸á€”ား ပီဆို",
+ "symbol": "ARS"
+ },
+ "AFN": {
+ "name": "အာဖဂန်အာဖဂါနီ",
+ "symbol": "AFN"
+ },
+ "AMD": {
+ "name": "အာမေးနီးယားဒရမ်း",
+ "symbol": "AMD"
+ },
+ "AED": {
+ "name": "အာရပ်ဒူဟမ်း",
+ "symbol": "AED"
+ },
+ "EGP": {
+ "name": "အီဂျစ် ပေါင်",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "အီရီá€á€›á€®á€¡á€¬á€”ာ့á€á€ºá€–ာ",
+ "symbol": "ERN"
+ },
+ "IRR": {
+ "name": "အီရန်ရီအော်လ်",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "အီရပ်ဒီနား",
+ "symbol": "IQD"
+ },
+ "ETB": {
+ "name": "အီသီယိုးပီးယားဘီးယာ",
+ "symbol": "ETB"
+ },
+ "UZS": {
+ "name": "ဥဘက်ကစ္စá€á€”်ဆော်မ်",
+ "symbol": "UZS"
+ },
+ "UYU": {
+ "name": "ဥရုဂွေးပီဆို",
+ "symbol": "UYU"
+ },
+ "DZD": {
+ "name": "အဲလ်ဂျီရီယန် ဒီနာ",
+ "symbol": "DZD"
+ },
+ "AUD": {
+ "name": "ဩစá€á€¼á€±á€¸á€œá€» ဒေါ်လာ",
+ "symbol": "A$"
+ },
+ "OMR": {
+ "name": "အိုမန်ရီအော်လ်",
+ "symbol": "OMR"
+ },
+ "ISK": {
+ "name": "အိုက်စလန် á€á€›á€­á€¯á€á€¬",
+ "symbol": "ISK"
+ },
+ "AOA": {
+ "name": "အင်ဂိုလာ ကန်ဇာ",
+ "symbol": "AOA"
+ },
+ "IDR": {
+ "name": "အင်ဒိုနီးရှား ရူပီးယား",
+ "symbol": "IDR"
+ },
+ "XOF": {
+ "name": "အိုင်ဗရီးကိုးစ်ဖရန့်",
+ "symbol": "CFA"
+ },
+ "ILS": {
+ "name": "အစ္စရေးရှဲကလ်အသစ်",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "အိန္ဒိယ ရူပီး",
+ "symbol": "₹"
+ },
+ "ALL": {
+ "name": "အယ်လ်ဘီးနီးယားလီá€á€º",
+ "symbol": "ALL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/naq.json b/library/intl/resources/currency/naq.json
new file mode 100644
index 000000000..c6d0c0180
--- /dev/null
+++ b/library/intl/resources/currency/naq.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "DZD": {
+ "name": "Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "Angolan Kwanzab",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AUD": {
+ "name": "Australian Dollari",
+ "symbol": "A$"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BHD": {
+ "name": "Bahrain Dinar",
+ "symbol": "BHD"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BWP": {
+ "name": "Botswanan Pulab",
+ "symbol": "BWP"
+ },
+ "GBP": {
+ "name": "British Ponds",
+ "symbol": "£"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BIF": {
+ "name": "Burundi Franc",
+ "symbol": "BIF"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CAD": {
+ "name": "Canadian Dollari",
+ "symbol": "CA$"
+ },
+ "XOF": {
+ "name": "CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "CNY": {
+ "name": "Chinese Yuan Renminbi",
+ "symbol": "CNÂ¥"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "KMF": {
+ "name": "Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese Franc",
+ "symbol": "CDF"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DJF": {
+ "name": "Djibouti Franc",
+ "symbol": "DJF"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "EGP": {
+ "name": "Egytian Ponds",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritreian Nakfa",
+ "symbol": "ERN"
+ },
+ "CVE": {
+ "name": "Escudo Caboverdiano",
+ "symbol": "CVE"
+ },
+ "ETB": {
+ "name": "Ethiopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Eurob",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GMD": {
+ "name": "Gambia Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "Indian Rupee",
+ "symbol": "₹"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JPY": {
+ "name": "Japanese Yenni",
+ "symbol": "JPÂ¥"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KES": {
+ "name": "Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leone",
+ "symbol": "SLL"
+ },
+ "LSL": {
+ "name": "Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MGA": {
+ "name": "Malagasy Franc",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawian Kwachab",
+ "symbol": "MWK"
+ },
+ "MRO": {
+ "name": "Mauritania Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritius Rupeeb",
+ "symbol": "MUR"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MAD": {
+ "name": "Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "Namibia Dollari",
+ "symbol": "$"
+ },
+ "NGN": {
+ "name": "Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwanda Franci",
+ "symbol": "RWF"
+ },
+ "STD": {
+ "name": "Sao Tome and Principe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SCR": {
+ "name": "Seychelles Rupee",
+ "symbol": "SCR"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "Somali Shillings",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "South African Randi",
+ "symbol": "ZAR"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SHP": {
+ "name": "St Helena Ponds",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Sudanese Dinar",
+ "symbol": "SDG"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "CHF": {
+ "name": "Swiss Franci",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "TZS": {
+ "name": "Tanzanian Shillings",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "Ugandan Shillings",
+ "symbol": "UGX"
+ },
+ "AED": {
+ "name": "United Arab Emirates Dirham",
+ "symbol": "AED"
+ },
+ "USD": {
+ "name": "US Dollari",
+ "symbol": "US$"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambian Kwachab",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/nb.json b/library/intl/resources/currency/nb.json
new file mode 100644
index 000000000..4c47f844d
--- /dev/null
+++ b/library/intl/resources/currency/nb.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afghansk afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "albanske lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "algeriske dinarer",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "amerikanske dollar",
+ "symbol": "USD"
+ },
+ "AOA": {
+ "name": "angolanske kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "argentinske pesos",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "armenske dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "arubiske floriner",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "aserbajdsjanske manat",
+ "symbol": "AZN"
+ },
+ "AUD": {
+ "name": "australske dollar",
+ "symbol": "AUD"
+ },
+ "BSD": {
+ "name": "bahamanske dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "bahrainske dinarer",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "bangladeshiske taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "barbadiske dollar",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "beliziske dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "bermudiske dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "bhutanske ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "bolivianske boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "bosnisk-hercegovinske konvertible mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "botswanske pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "brasilianske real",
+ "symbol": "BRL"
+ },
+ "GBP": {
+ "name": "britiske pund sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "bruneiske dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "bulgarske lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "burundiske franc",
+ "symbol": "BIF"
+ },
+ "KYD": {
+ "name": "caymanske dollar",
+ "symbol": "KYD"
+ },
+ "XPF": {
+ "name": "CFP-franc",
+ "symbol": "XPF"
+ },
+ "CLP": {
+ "name": "chilenske pesos",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "colombianske pesos",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "costaricanske colón",
+ "symbol": "CRC"
+ },
+ "DKK": {
+ "name": "danske kroner",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "djiboutiske franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "dominikanske pesos",
+ "symbol": "DOP"
+ },
+ "EGP": {
+ "name": "egyptiske pund",
+ "symbol": "EGP"
+ },
+ "AED": {
+ "name": "emiratarabiske dirham",
+ "symbol": "AED"
+ },
+ "ERN": {
+ "name": "eritreiske nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "etiopiske birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "falklandspund",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "fijianske dollar",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "filippinske pesos",
+ "symbol": "PHP"
+ },
+ "GMD": {
+ "name": "gambiske dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "georgiske lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "ghanesiske cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "gibraltarske pund",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "guatemalanske quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "guineanske franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "guyanske dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "haitiske gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "honduranske lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hongkong-dollar",
+ "symbol": "HKD"
+ },
+ "BYR": {
+ "name": "hviterussiske rubler",
+ "symbol": "BYR"
+ },
+ "INR": {
+ "name": "indiske rupier",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "indonesiske rupier",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "irakske dinarer",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "iranske rialer",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "islandske kroner",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "jamaikanske dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "japanske yen",
+ "symbol": "JPY"
+ },
+ "YER": {
+ "name": "jemenittiske rialer",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "jordanske dinarer",
+ "symbol": "JOD"
+ },
+ "KHR": {
+ "name": "kambodsjanske riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "kanadiske dollar",
+ "symbol": "CAD"
+ },
+ "CVE": {
+ "name": "kappverdiske escudos",
+ "symbol": "CVE"
+ },
+ "KZT": {
+ "name": "kasakhstanske tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "kenyanske shilling",
+ "symbol": "KES"
+ },
+ "CNY": {
+ "name": "kinesiske yuan",
+ "symbol": "CNY"
+ },
+ "KGS": {
+ "name": "kirgisiske som",
+ "symbol": "KGS"
+ },
+ "KMF": {
+ "name": "komoriske franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "kongolesiske franc",
+ "symbol": "CDF"
+ },
+ "HRK": {
+ "name": "kroatiske kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "kubanske konvertible pesos",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "kubanske pesos",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "kuwaitiske dinarer",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "laotiske kip",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "lesothiske loti",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "libanesiske pund",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "liberiske dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "libyske dinarer",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "litauiske lita",
+ "symbol": "LTL"
+ },
+ "MGA": {
+ "name": "madagassiske ariary",
+ "symbol": "MGA"
+ },
+ "MOP": {
+ "name": "makaoiske pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "makedonske denarer",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "malawiske kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "malaysiske ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "maldiviske rufiyaa",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "marokkanske dirham",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "mauritanske ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "mauritiske rupier",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "meksikanske pesos",
+ "symbol": "MXN"
+ },
+ "MDL": {
+ "name": "moldovske leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "mongolske tugrik",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "mosambikiske metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "myanmarske kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "namibiske dollar",
+ "symbol": "NAD"
+ },
+ "ANG": {
+ "name": "nederlandske antillegylden",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "nepalske rupier",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "newzealandske dollar",
+ "symbol": "NZD"
+ },
+ "NIO": {
+ "name": "nicaraguanske córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "nigerianske naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "nordkoreanske won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "norske kroner",
+ "symbol": "kr"
+ },
+ "ILS": {
+ "name": "nye israelske shekler",
+ "symbol": "ILS"
+ },
+ "TWD": {
+ "name": "nye taiwanske dollar",
+ "symbol": "TWD"
+ },
+ "OMR": {
+ "name": "omanske rialer",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "pakistanske rupier",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "panamanske balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "papuanske kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "paraguayanske guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "peruanske nuevo sol",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "polske zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "qatarske rialer",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "rumenske leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "russiske rubler",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "rwandiske franc",
+ "symbol": "RWF"
+ },
+ "SBD": {
+ "name": "salomonske dollar",
+ "symbol": "SBD"
+ },
+ "SVC": {
+ "name": "salvadoranske colon",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "samoanske tala",
+ "symbol": "WST"
+ },
+ "SHP": {
+ "name": "sankthelenske pund",
+ "symbol": "SHP"
+ },
+ "STD": {
+ "name": "São Tomé og Príncipe-dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "saudiarabiske riyaler",
+ "symbol": "SAR"
+ },
+ "XAF": {
+ "name": "sentralafrikanske CFA-franc",
+ "symbol": "XAF"
+ },
+ "RSD": {
+ "name": "serbiske dinarer",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "seychelliske rupier",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "sierraleonske leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "singaporske dollar",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "somaliske shilling",
+ "symbol": "SOS"
+ },
+ "LKR": {
+ "name": "srilankiske rupier",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "sudanske pund",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "surinamske dollar",
+ "symbol": "SRD"
+ },
+ "CHF": {
+ "name": "sveitsiske franc",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "svenske kroner",
+ "symbol": "SEK"
+ },
+ "SZL": {
+ "name": "swazilandske lilangeni",
+ "symbol": "SZL"
+ },
+ "SYP": {
+ "name": "syriske pund",
+ "symbol": "SYP"
+ },
+ "ZAR": {
+ "name": "sørafrikanske rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "sørkoreanske won",
+ "symbol": "KRW"
+ },
+ "SSP": {
+ "name": "sørsudanske pund",
+ "symbol": "SSP"
+ },
+ "TJS": {
+ "name": "tadsjikiske somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "tanzanianske shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "thailandske baht",
+ "symbol": "THB"
+ },
+ "TOP": {
+ "name": "tonganske paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "trinidadiske dollar",
+ "symbol": "TTD"
+ },
+ "CZK": {
+ "name": "tsjekkiske koruna",
+ "symbol": "CZK"
+ },
+ "TND": {
+ "name": "tunisiske dinarer",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "turkmenske manat",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "tyrkiske lire",
+ "symbol": "TRY"
+ },
+ "UGX": {
+ "name": "ugandiske shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "ukrainske hryvnia",
+ "symbol": "UAH"
+ },
+ "HUF": {
+ "name": "ungarske forinter",
+ "symbol": "HUF"
+ },
+ "UYU": {
+ "name": "uruguayanske pesos",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "usbekiske som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "vanuatiske vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "venezuelanske bolivar",
+ "symbol": "VEF"
+ },
+ "XOF": {
+ "name": "vestafrikanske CFA-franc",
+ "symbol": "CFA"
+ },
+ "VND": {
+ "name": "vietnamesiske dong",
+ "symbol": "VND"
+ },
+ "ZMW": {
+ "name": "zambiske kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "zimbabwisk dollar (2009)",
+ "symbol": "ZWL"
+ },
+ "XCD": {
+ "name": "østkaribiske dollar",
+ "symbol": "XCD"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/nd.json b/library/intl/resources/currency/nd.json
new file mode 100644
index 000000000..21a9284a1
--- /dev/null
+++ b/library/intl/resources/currency/nd.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi yase Gambia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinali yase Aljeriya",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinari yase Bhahareni",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinari yase Libya",
+ "symbol": "LYD"
+ },
+ "SDG": {
+ "name": "Dinari yase Sudani",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "Dinari yase Tunisiya",
+ "symbol": "TND"
+ },
+ "MAD": {
+ "name": "Dirham yase Morokho",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobra yase Sao Tome lo Principe",
+ "symbol": "STD"
+ },
+ "AED": {
+ "name": "Dola laseArab",
+ "symbol": "AED"
+ },
+ "ETB": {
+ "name": "Dola laseEthiopia",
+ "symbol": "ETB"
+ },
+ "USD": {
+ "name": "Dola yase Amelika",
+ "symbol": "US$"
+ },
+ "AUD": {
+ "name": "Dola yase Australia",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "Dola yase Khanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dola yase Libheriya",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Dola yase Namibiya",
+ "symbol": "NAD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "Escudo Caboverdiano",
+ "symbol": "CVE"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "XOF": {
+ "name": "Fulenki CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Fulenki CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "BIF": {
+ "name": "Fulenki yase Bhurundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Fulenki yase Jibhuthi",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Fulenki yase Khomoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Fulenki yase Khongo",
+ "symbol": "CDF"
+ },
+ "MGA": {
+ "name": "Fulenki yase Malagasi",
+ "symbol": "MGA"
+ },
+ "RWF": {
+ "name": "Fulenki yase Ruwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Fulenki yase Swisi",
+ "symbol": "CHF"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kwacha yase Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha yase Zambiya",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza yase Angola",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leyoni",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Lothi yase Lesotho",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "ERN": {
+ "name": "Nakfa yase Eritrea",
+ "symbol": "ERN"
+ },
+ "NGN": {
+ "name": "Nayira yase Nijeriya",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "EGP": {
+ "name": "Phawundi laseGibhide",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "Phawundi yase Ngilandi",
+ "symbol": "£"
+ },
+ "SHP": {
+ "name": "Phawundindi laseSt Helena",
+ "symbol": "SHP"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "BWP": {
+ "name": "Phula yase Botswana",
+ "symbol": "BWP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Randi yase Afrika ye Zanzi",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riyal yase Saudi",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupi yase Indiya",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupi yase Morishasi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupi yase Seyisheli",
+ "symbol": "SCR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "Shilingi yase Kenya",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Shilingi yase Somaliya",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Shilingi yase Tanzaniya",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Shilingi yase Uganda",
+ "symbol": "UGX"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ugwiya yase Moritaniya",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "JPY": {
+ "name": "Yeni yase Japhani",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yuan Renminbi yase China",
+ "symbol": "CNÂ¥"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ne-IN.json b/library/intl/resources/currency/ne-IN.json
new file mode 100644
index 000000000..a4703e899
--- /dev/null
+++ b/library/intl/resources/currency/ne-IN.json
@@ -0,0 +1,634 @@
+{
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "AZN": {
+ "name": "अजरबैजानी मानात",
+ "symbol": "AZN"
+ },
+ "AFN": {
+ "name": "अफà¥à¤—ान अफà¥à¤—ानी",
+ "symbol": "AFN"
+ },
+ "USD": {
+ "name": "अमेरिकी डलर",
+ "symbol": "US$"
+ },
+ "ARS": {
+ "name": "अरà¥à¤œà¥‡à¤¨à¥à¤Ÿà¤¿à¤¨à¥€ पेसो",
+ "symbol": "ARS"
+ },
+ "DZD": {
+ "name": "अलà¥à¤œà¥‡à¤°à¤¿à¤¯à¤¾à¤²à¥€ डिनार",
+ "symbol": "DZD"
+ },
+ "ALL": {
+ "name": "अलà¥à¤¬à¤¾à¤¨à¤¿à¤¯à¤¨ लेक",
+ "symbol": "ALL"
+ },
+ "AUD": {
+ "name": "अषà¥à¤Ÿà¥à¤°à¥‡à¤²à¤¿à¤¯à¤¨ डलर",
+ "symbol": "A$"
+ },
+ "ISK": {
+ "name": "आइसलà¥à¤¯à¤¾à¤£à¥à¤¡à¤¿à¤• कà¥à¤°à¥‹à¤¨à¤¾",
+ "symbol": "ISK"
+ },
+ "AWG": {
+ "name": "आरूबन फà¥à¤²à¥‹à¤°à¤¿à¤¨",
+ "symbol": "AWG"
+ },
+ "AMD": {
+ "name": "आरà¥à¤®à¥‡à¤¨à¤¿à¤¯à¤¾à¤²à¥€ डà¥à¤°à¤¾à¤®",
+ "symbol": "AMD"
+ },
+ "ILS": {
+ "name": "इजरायली नयाठशेकेल",
+ "symbol": "₪"
+ },
+ "EGP": {
+ "name": "इजिपà¥à¤¸à¤¿à¤¯à¤¨ पाउनà¥à¤¡",
+ "symbol": "EGP"
+ },
+ "IDR": {
+ "name": "इणà¥à¤¡à¥‹à¤¨à¥‡à¤¶à¤¿à¤¯à¤¾à¤²à¥€ रूपियाà¤",
+ "symbol": "IDR"
+ },
+ "ETB": {
+ "name": "इथियोपियाली बिर",
+ "symbol": "ETB"
+ },
+ "IQD": {
+ "name": "इराकी डिनार",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "इरानियाली रियाल",
+ "symbol": "IRR"
+ },
+ "UZS": {
+ "name": "उजà¥à¤¬à¥‡à¤•à¤¿à¤¸à¥à¤¤à¤¾à¤¨ सोम",
+ "symbol": "UZS"
+ },
+ "KPW": {
+ "name": "उतà¥à¤¤à¤° कोरियाली वन",
+ "symbol": "KPW"
+ },
+ "UYU": {
+ "name": "उरूगà¥à¤µà¤¾à¤¯à¤¾à¤²à¥€ पेसो",
+ "symbol": "UYU"
+ },
+ "AOA": {
+ "name": "à¤à¤™à¥à¤—ोलान कà¥à¤µà¤¾à¤¨à¥à¤œà¤¾",
+ "symbol": "AOA"
+ },
+ "ERN": {
+ "name": "à¤à¤°à¤¿à¤Ÿà¥à¤°à¤¿à¤¯à¤¨ नाकà¥à¤«à¤¾",
+ "symbol": "ERN"
+ },
+ "OMR": {
+ "name": "ओमनी रियल",
+ "symbol": "OMR"
+ },
+ "CDF": {
+ "name": "कङà¥à¤—ोली फà¥à¤°à¤¾à¤¨à¥à¤•",
+ "symbol": "CDF"
+ },
+ "QAR": {
+ "name": "कतारी रियल",
+ "symbol": "QAR"
+ },
+ "KHR": {
+ "name": "कमà¥à¤¬à¥‹à¤¡à¤¿à¤¨à¥‡à¤¯à¤¾à¤²à¥€ रियल",
+ "symbol": "KHR"
+ },
+ "KZT": {
+ "name": "काजाखसà¥à¤¤à¤¾à¤¨à¥€ टेनà¥à¤œ",
+ "symbol": "KZT"
+ },
+ "KGS": {
+ "name": "किरà¥à¤—िसà¥à¤¤à¤¾à¤¨à¥€ सोम",
+ "symbol": "KGS"
+ },
+ "KWD": {
+ "name": "कà¥à¤µà¥‡à¤¤à¥€ डिनार",
+ "symbol": "KWD"
+ },
+ "KES": {
+ "name": "केनà¥à¤¯à¤¾à¤²à¥€ शिलिङ",
+ "symbol": "KES"
+ },
+ "CVE": {
+ "name": "केप भरà¥à¤¡à¤¿à¤¯à¤¨ à¤à¤¸à¥à¤•à¥à¤¡à¥‹",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "केमà¥à¤¯à¤¾à¤¨ टापà¥à¤¹à¤°à¥‚का डलर",
+ "symbol": "KYD"
+ },
+ "KMF": {
+ "name": "कोमोरियन फà¥à¤°à¤¾à¤¨à¥à¤•",
+ "symbol": "KMF"
+ },
+ "COP": {
+ "name": "कोलमà¥à¤µà¤¿à¤¯à¤¨ पेसो",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "कोषà¥à¤Ÿà¤¾à¤°à¤¿à¤•à¤¨ कोलोन",
+ "symbol": "CRC"
+ },
+ "CAD": {
+ "name": "कà¥à¤¯à¤¾à¤¨à¤¾à¤¡à¤¿à¤¯à¤¾à¤²à¥€ डलर",
+ "symbol": "CA$"
+ },
+ "CUP": {
+ "name": "कà¥à¤¯à¥‚वाली पेसो",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "कà¥à¤¯à¥‚वाली रूपानà¥à¤¤à¤°à¤£à¤¯à¥‹à¤—à¥à¤¯ पेसो",
+ "symbol": "CUC"
+ },
+ "HRK": {
+ "name": "कà¥à¤°à¥‹à¤à¤¶à¤¿à¤¯à¤¾à¤²à¥€ कà¥à¤¨à¤¾",
+ "symbol": "HRK"
+ },
+ "GYD": {
+ "name": "गाइनिज डलर",
+ "symbol": "GYD"
+ },
+ "GMD": {
+ "name": "गामà¥à¤µà¤¿à¤¯à¤¾à¤²à¥€ डालासी",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "गिनियाली फà¥à¤°à¤¾à¤¨à¥à¤•",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "गà¥à¤µà¤¾à¤Ÿà¥‡à¤®à¤¾à¤²à¤¾ कà¥à¤µà¥‡à¤Ÿà¥à¤œà¤¾à¤²",
+ "symbol": "GTQ"
+ },
+ "GHS": {
+ "name": "घानाली सेडी",
+ "symbol": "GHS"
+ },
+ "CNY": {
+ "name": "चिनिà¤à¤¯à¤¾ यà¥à¤†à¤¨",
+ "symbol": "CNÂ¥"
+ },
+ "CLP": {
+ "name": "चिलियन पेसो",
+ "symbol": "CLP"
+ },
+ "CZK": {
+ "name": "चेख गणतञà¥à¤¤à¥à¤° कोरूना",
+ "symbol": "CZK"
+ },
+ "JMD": {
+ "name": "जमाइकाली डलर",
+ "symbol": "JMD"
+ },
+ "GEL": {
+ "name": "जरà¥à¤œà¤¿à¤¯à¤¾à¤²à¥€ लारी",
+ "symbol": "GEL"
+ },
+ "JPY": {
+ "name": "जापानी येन",
+ "symbol": "JPÂ¥"
+ },
+ "ZMW": {
+ "name": "जामà¥à¤¬à¤¿à¤¯à¤¾à¤²à¥€ कà¥à¤µà¤¾à¤šà¤¾",
+ "symbol": "ZMW"
+ },
+ "DJF": {
+ "name": "जिबौंटियाली फà¥à¤°à¤¾à¤¨à¥à¤•",
+ "symbol": "DJF"
+ },
+ "GIP": {
+ "name": "जिबà¥à¤°à¤¾à¤²à¥à¤Ÿà¤° पाउणà¥à¤¡",
+ "symbol": "GIP"
+ },
+ "JOD": {
+ "name": "जोरà¥à¤¡à¤¾à¤¨à¤¿à¤¯à¤¾à¤²à¥€ डलर",
+ "symbol": "JOD"
+ },
+ "TOP": {
+ "name": "टङà¥à¤—न पाङà¥à¤—ा",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "टरà¥à¤•à¤¿à¤¶ लिरा",
+ "symbol": "TRY"
+ },
+ "TND": {
+ "name": "टà¥à¤¨à¤¿à¤¸à¤¿à¤¯à¤¾à¤²à¥€ डिनार",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "टà¥à¤°à¥à¤•à¥à¤®à¥‡à¤¨à¤¿à¤¸à¥à¤¤à¤¾à¤¨à¥€ मानात",
+ "symbol": "TMT"
+ },
+ "DOP": {
+ "name": "डोमिनिकन पेसो",
+ "symbol": "DOP"
+ },
+ "DKK": {
+ "name": "डà¥à¤¯à¤¾à¤¨à¤¿à¤¶ कà¥à¤°à¥‹à¤¨",
+ "symbol": "DKK"
+ },
+ "TJS": {
+ "name": "ताजिकà¥à¤¸à¥à¤¤à¤¾à¤¨à¥€ सोमोनी",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "ताञà¥à¤œà¤¾à¤¨à¤¿à¤¯à¤¾à¤²à¥€ शिलिङ",
+ "symbol": "TZS"
+ },
+ "TTD": {
+ "name": "तà¥à¤°à¤¿à¤¨à¤¿à¤¡à¤¾à¤¡ र टोबागो डलर",
+ "symbol": "TTD"
+ },
+ "THB": {
+ "name": "थाई भाट",
+ "symbol": "฿"
+ },
+ "ZAR": {
+ "name": "दकà¥à¤·à¤¿à¤£ अफà¥à¤°à¤¿à¤•à¥€ रà¥â€à¤¯à¤¾à¤¨à¥à¤¡",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "दकà¥à¤·à¤¿à¤£ कोरियाली वन",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "दकà¥à¤·à¤¿à¤£ सà¥à¤¡à¤¾à¤¨à¥€ पाउनà¥à¤¡",
+ "symbol": "SSP"
+ },
+ "TWD": {
+ "name": "नयाठताइवान डलर",
+ "symbol": "NT$"
+ },
+ "NOK": {
+ "name": "नरà¥à¤µà¥‡à¤œà¤¿à¤¯à¤¾à¤²à¥€ कà¥à¤°à¥‹à¤¨",
+ "symbol": "NOK"
+ },
+ "NGN": {
+ "name": "नाइजेरियन नाइरा",
+ "symbol": "NGN"
+ },
+ "NAD": {
+ "name": "नामिबियन डलर",
+ "symbol": "NAD"
+ },
+ "NIO": {
+ "name": "निकारागà¥à¤µà¤¾à¤¨ कोरà¥à¤¡à¥‹à¤µà¤¾",
+ "symbol": "NIO"
+ },
+ "ANG": {
+ "name": "नेदरलà¥à¤¯à¤¾à¤£à¥à¤¡à¥à¤¸ à¤à¤¨à¥à¤Ÿà¤¿à¤²à¤¿à¤¯à¤¨ गिलà¥à¤¡à¤°",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "नेपाली रूपैयाà¤",
+ "symbol": "नेरू"
+ },
+ "NZD": {
+ "name": "नà¥à¤¯à¥‚जिलà¥à¤¯à¤¾à¤£à¥à¤¡ डलर",
+ "symbol": "NZ$"
+ },
+ "PGK": {
+ "name": "पपà¥à¤† नà¥à¤¯à¥‚ गिनियाली किना",
+ "symbol": "PGK"
+ },
+ "PKR": {
+ "name": "पाकिसà¥à¤¤à¤¾à¤¨à¥€ रूपियाà¤",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "पानामानियाली बालà¥à¤¬à¥‹à¤†",
+ "symbol": "PAB"
+ },
+ "PYG": {
+ "name": "पारागà¥à¤¯à¤¾à¤²à¥€ गà¥à¤°à¤¾à¤¨à¥€",
+ "symbol": "PYG"
+ },
+ "XCD": {
+ "name": "पूरà¥à¤µà¥€ कà¥à¤¯à¤¾à¤°à¤¿à¤¬à¤¿à¤¯à¤¨ डलर",
+ "symbol": "EC$"
+ },
+ "PEN": {
+ "name": "पेरूभियाली नà¥à¤¯à¥‚भो सोल",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "पोलिश जà¥à¤²à¥‹à¤Ÿà¤¾à¤ˆ",
+ "symbol": "PLN"
+ },
+ "FKP": {
+ "name": "फकà¥â€Œà¤²à¥à¤¯à¤¾à¤£à¥à¤¡ टापà¥à¤¹à¤°à¥‚का पाउनà¥à¤¡",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "फिजीयाली डलर",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "फिलिपिनी पेसो",
+ "symbol": "PHP"
+ },
+ "BDT": {
+ "name": "बङà¥à¤—लादेशी टाका",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "बरà¥à¤¬à¤¾à¤¡à¤¿à¤¯à¤¨ डलर",
+ "symbol": "BBD"
+ },
+ "BMD": {
+ "name": "बरà¥à¤®à¥à¤¡à¤¨ डलर",
+ "symbol": "BMD"
+ },
+ "BSD": {
+ "name": "बहामियाली डलर",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "बाहारैनी डिनार",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "बà¥à¤°à¥‚णà¥à¤¡à¤¿à¤¯à¤¾à¤²à¥€ फà¥à¤°à¤¾à¤¨à¥à¤•",
+ "symbol": "BIF"
+ },
+ "BGN": {
+ "name": "बà¥à¤²à¥à¤—ारियाली लेभ",
+ "symbol": "BGN"
+ },
+ "GBP": {
+ "name": "बेलायती पाउणà¥à¤¡ सà¥à¤Ÿà¤°à¥à¤²à¤¿à¤™",
+ "symbol": "£"
+ },
+ "BYR": {
+ "name": "बेलारूसी रूबल",
+ "symbol": "BYR"
+ },
+ "BWP": {
+ "name": "बोटà¥à¤¸à¤µà¤¾à¤¨à¤¾à¤¨ पà¥à¤²à¤¾",
+ "symbol": "BWP"
+ },
+ "BOB": {
+ "name": "बोलिभियन बोलिभियानो",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "बोसà¥à¤¨à¤¿à¤¯à¤¾-हरà¥à¤œà¤—ोभिनिया रूपानà¥à¤¤à¤°à¤¯à¥‹à¤—à¥à¤¯ मारà¥à¤•",
+ "symbol": "BAM"
+ },
+ "BRL": {
+ "name": "बà¥à¤°à¤¾à¤œà¤¿à¤²à¤¿à¤¯à¤¨ रियल",
+ "symbol": "R$"
+ },
+ "BND": {
+ "name": "बà¥à¤°à¥à¤¨à¤¾à¤ˆ डलर",
+ "symbol": "BND"
+ },
+ "VUV": {
+ "name": "भानà¥à¤†à¤¤à¥‚ भातà¥",
+ "symbol": "VUV"
+ },
+ "INR": {
+ "name": "भारतीय रूपिà¤à¤¯à¤¾",
+ "symbol": "₹"
+ },
+ "VND": {
+ "name": "भियतनामी डङà¥",
+ "symbol": "â‚«"
+ },
+ "BTN": {
+ "name": "भà¥à¤Ÿà¤¾à¤¨à¥€ à¤à¤¨à¥â€Œà¤—à¥à¤²à¥à¤Ÿà¥à¤°à¥à¤®",
+ "symbol": "BTN"
+ },
+ "VEF": {
+ "name": "भेनेजà¥à¤à¤²à¤¨ बोलिभर",
+ "symbol": "VEF"
+ },
+ "MNT": {
+ "name": "मङà¥à¤—ोलियाली टà¥à¤—à¥à¤°à¤¿à¤•",
+ "symbol": "MNT"
+ },
+ "MWK": {
+ "name": "मलाविअन कà¥à¤µà¤¾à¤šà¤¾",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "मलेशियाली रिङà¥à¤—ेट",
+ "symbol": "MYR"
+ },
+ "MRO": {
+ "name": "माउरिटानियानली औगà¥à¤‡à¤¯à¤¾",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "माउरिटियन रूपी",
+ "symbol": "MUR"
+ },
+ "MOP": {
+ "name": "माकानिज पटाका",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "मालडिभियाली रूफियाà¤",
+ "symbol": "MVR"
+ },
+ "MGA": {
+ "name": "मालागासी à¤à¤°à¤¿à¤†à¤°à¥€",
+ "symbol": "MGA"
+ },
+ "MDL": {
+ "name": "मालà¥à¤¡à¥‹à¤­à¤¨ लेउ",
+ "symbol": "MDL"
+ },
+ "MXN": {
+ "name": "मेकà¥à¤¸à¤¿à¤•à¤¨ पेसो",
+ "symbol": "MX$"
+ },
+ "MZN": {
+ "name": "मोजामà¥à¤µà¤¿à¤•à¤¨ मेटिकल",
+ "symbol": "MZN"
+ },
+ "MAD": {
+ "name": "मोरोकà¥à¤•à¤¾à¤²à¥€ डिरà¥â€Œà¤¹à¤¾à¤®",
+ "symbol": "MAD"
+ },
+ "MMK": {
+ "name": "मà¥à¤¯à¤¾à¤¨à¥à¤®à¤¾ कà¥à¤¯à¤¾à¤Ÿ",
+ "symbol": "MMK"
+ },
+ "MKD": {
+ "name": "मà¥à¤¯à¤¾à¤¸à¥‡à¤¡à¥‹à¤¨à¤¿à¤¯à¤¾à¤²à¥€ डेनार",
+ "symbol": "MKD"
+ },
+ "UAH": {
+ "name": "यà¥à¤•à¥à¤°à¥‡à¤¨à¥€ हिरà¥à¤­à¤¿à¤¨à¤¿à¤¯à¤¾",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "यà¥à¤—ाणà¥à¤¡à¤¾à¤²à¥€ शिलिङ",
+ "symbol": "UGX"
+ },
+ "EUR": {
+ "name": "यà¥à¤°à¥‹",
+ "symbol": "€"
+ },
+ "YER": {
+ "name": "येमेनी रियाल",
+ "symbol": "YER"
+ },
+ "RUB": {
+ "name": "रूसी रूबल",
+ "symbol": "RUB"
+ },
+ "RON": {
+ "name": "रोमानियाली लेऊ",
+ "symbol": "RON"
+ },
+ "RWF": {
+ "name": "रà¥â€Œà¤µà¤¾à¤£à¥à¤¡à¤¾à¤²à¥€ फà¥à¤°à¤¾à¤¨à¥à¤•",
+ "symbol": "RWF"
+ },
+ "LAK": {
+ "name": "लाओशियन किप",
+ "symbol": "LAK"
+ },
+ "LTL": {
+ "name": "लिथà¥à¤¨à¤¿à¤¯à¤¾à¤²à¥€ लिटास",
+ "symbol": "LTL"
+ },
+ "LRD": {
+ "name": "लिबेरियाली डलर",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "लिवियाली डिनार",
+ "symbol": "LYD"
+ },
+ "LBP": {
+ "name": "लेबनाली पाउनà¥à¤¡",
+ "symbol": "LBP"
+ },
+ "BZD": {
+ "name": "वेलिज डलर",
+ "symbol": "BZD"
+ },
+ "LKR": {
+ "name": "शà¥à¤°à¥€à¤²à¤™à¥à¤•à¤¾à¤²à¥€ रूपिया",
+ "symbol": "LKR"
+ },
+ "AED": {
+ "name": "संयà¥à¤•à¥à¤¤ अरब à¤à¤®à¤¿à¤°à¤¾à¤Ÿà¥à¤¸ डिरà¥à¤¹à¤¾à¤®",
+ "symbol": "AED"
+ },
+ "RSD": {
+ "name": "सरà¥à¤¬à¤¿à¤¯à¤¾à¤²à¥€ डिनार",
+ "symbol": "RSD"
+ },
+ "SAR": {
+ "name": "साउदी रियालहरू",
+ "symbol": "SAR"
+ },
+ "STD": {
+ "name": "साओ टोम र पà¥à¤°à¤¿à¤¨à¥à¤¸à¤¿à¤ª डोबà¥à¤°à¤¾",
+ "symbol": "STD"
+ },
+ "WST": {
+ "name": "सामोआन ताला",
+ "symbol": "WST"
+ },
+ "SGD": {
+ "name": "सिङà¥à¤—ापà¥à¤° डलर",
+ "symbol": "SGD"
+ },
+ "SLL": {
+ "name": "सियरा लियोनेन लियोन",
+ "symbol": "SLL"
+ },
+ "SYP": {
+ "name": "सिरियाली पाउनà¥à¤¡",
+ "symbol": "SYP"
+ },
+ "XAF": {
+ "name": "सीà¤à¤«à¥â€Œà¤ फà¥à¤°à¤¾à¤¨à¥à¤• बीइà¤à¤¸à¥€",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "सीà¤à¤«à¥â€Œà¤ फà¥à¤°à¤¾à¤¨à¥à¤• बीसीइà¤à¤“",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "सीà¤à¤«à¥â€Œà¤ªà¥€ फà¥à¤°à¤¾à¤¨à¥à¤•",
+ "symbol": "CFPF"
+ },
+ "SDG": {
+ "name": "सà¥à¤¡à¤¾à¤¨à¥€ पाउनà¥à¤¡",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "सà¥à¤°à¤¿à¤¨à¤¾à¤®à¤¿à¤œ डलर",
+ "symbol": "SRD"
+ },
+ "SCR": {
+ "name": "सेचेलोइस रूपी",
+ "symbol": "SCR"
+ },
+ "SHP": {
+ "name": "सेनà¥à¤Ÿ हेलेना पाउनà¥à¤¡",
+ "symbol": "SHP"
+ },
+ "SOS": {
+ "name": "सोमाली शिलिङ",
+ "symbol": "SOS"
+ },
+ "SBD": {
+ "name": "सोलोमन टापà¥à¤¹à¤°à¥‚का डलर",
+ "symbol": "SBD"
+ },
+ "SZL": {
+ "name": "सà¥à¤µà¤¾à¤œà¥€ लिलानà¥à¤—ेनी",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "सà¥à¤µà¤¿à¤¡à¤¿à¤¶ कà¥à¤°à¥‹à¤¨à¤¾",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "सà¥à¤µà¤¿à¤¸à¥ फà¥à¤°à¥ˆà¤™à¥à¤•",
+ "symbol": "CHF"
+ },
+ "HKD": {
+ "name": "हङकङ डलर",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "हङà¥à¤—ेरियन फोरिनà¥à¤Ÿ",
+ "symbol": "HUF"
+ },
+ "HTG": {
+ "name": "हैटियाली गà¥à¤°à¥à¤¡",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "होनà¥à¤¡à¥à¤°à¤¾à¤¨ लेमà¥à¤ªà¤¿à¤°à¤¾",
+ "symbol": "HNL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ne.json b/library/intl/resources/currency/ne.json
new file mode 100644
index 000000000..2cebfcca8
--- /dev/null
+++ b/library/intl/resources/currency/ne.json
@@ -0,0 +1,634 @@
+{
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "AZN": {
+ "name": "अजरबैजानी मानात",
+ "symbol": "AZN"
+ },
+ "AFN": {
+ "name": "अफà¥à¤—ान अफà¥à¤—ानी",
+ "symbol": "AFN"
+ },
+ "USD": {
+ "name": "अमेरिकी डलर",
+ "symbol": "US$"
+ },
+ "ARS": {
+ "name": "अरà¥à¤œà¥‡à¤¨à¥à¤Ÿà¤¿à¤¨à¥€ पेसो",
+ "symbol": "ARS"
+ },
+ "DZD": {
+ "name": "अलà¥à¤œà¥‡à¤°à¤¿à¤¯à¤¾à¤²à¥€ डिनार",
+ "symbol": "DZD"
+ },
+ "ALL": {
+ "name": "अलà¥à¤¬à¤¾à¤¨à¤¿à¤¯à¤¨ लेक",
+ "symbol": "ALL"
+ },
+ "AUD": {
+ "name": "अषà¥à¤Ÿà¥à¤°à¥‡à¤²à¤¿à¤¯à¤¨ डलर",
+ "symbol": "A$"
+ },
+ "ISK": {
+ "name": "आइसलà¥à¤¯à¤¾à¤£à¥à¤¡à¤¿à¤• कà¥à¤°à¥‹à¤¨à¤¾",
+ "symbol": "ISK"
+ },
+ "AWG": {
+ "name": "आरूबन फà¥à¤²à¥‹à¤°à¤¿à¤¨",
+ "symbol": "AWG"
+ },
+ "AMD": {
+ "name": "आरà¥à¤®à¥‡à¤¨à¤¿à¤¯à¤¾à¤²à¥€ डà¥à¤°à¤¾à¤®",
+ "symbol": "AMD"
+ },
+ "ILS": {
+ "name": "इजरायली नयाठशेकेल",
+ "symbol": "₪"
+ },
+ "EGP": {
+ "name": "इजिपà¥à¤¸à¤¿à¤¯à¤¨ पाउनà¥à¤¡",
+ "symbol": "EGP"
+ },
+ "IDR": {
+ "name": "इणà¥à¤¡à¥‹à¤¨à¥‡à¤¶à¤¿à¤¯à¤¾à¤²à¥€ रूपियाà¤",
+ "symbol": "IDR"
+ },
+ "ETB": {
+ "name": "इथियोपियाली बिर",
+ "symbol": "ETB"
+ },
+ "IQD": {
+ "name": "इराकी डिनार",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "इरानियाली रियाल",
+ "symbol": "IRR"
+ },
+ "UZS": {
+ "name": "उजà¥à¤¬à¥‡à¤•à¤¿à¤¸à¥à¤¤à¤¾à¤¨ सोम",
+ "symbol": "UZS"
+ },
+ "KPW": {
+ "name": "उतà¥à¤¤à¤° कोरियाली वन",
+ "symbol": "KPW"
+ },
+ "UYU": {
+ "name": "उरूगà¥à¤µà¤¾à¤¯à¤¾à¤²à¥€ पेसो",
+ "symbol": "UYU"
+ },
+ "AOA": {
+ "name": "à¤à¤™à¥à¤—ोलान कà¥à¤µà¤¾à¤¨à¥à¤œà¤¾",
+ "symbol": "AOA"
+ },
+ "ERN": {
+ "name": "à¤à¤°à¤¿à¤Ÿà¥à¤°à¤¿à¤¯à¤¨ नाकà¥à¤«à¤¾",
+ "symbol": "ERN"
+ },
+ "OMR": {
+ "name": "ओमनी रियल",
+ "symbol": "OMR"
+ },
+ "CDF": {
+ "name": "कङà¥à¤—ोली फà¥à¤°à¤¾à¤¨à¥à¤•",
+ "symbol": "CDF"
+ },
+ "QAR": {
+ "name": "कतारी रियल",
+ "symbol": "QAR"
+ },
+ "KHR": {
+ "name": "कमà¥à¤¬à¥‹à¤¡à¤¿à¤¨à¥‡à¤¯à¤¾à¤²à¥€ रियल",
+ "symbol": "KHR"
+ },
+ "KZT": {
+ "name": "काजाखसà¥à¤¤à¤¾à¤¨à¥€ टेनà¥à¤œ",
+ "symbol": "KZT"
+ },
+ "KGS": {
+ "name": "किरà¥à¤—िसà¥à¤¤à¤¾à¤¨à¥€ सोम",
+ "symbol": "KGS"
+ },
+ "KWD": {
+ "name": "कà¥à¤µà¥‡à¤¤à¥€ डिनार",
+ "symbol": "KWD"
+ },
+ "KES": {
+ "name": "केनà¥à¤¯à¤¾à¤²à¥€ शिलिङ",
+ "symbol": "KES"
+ },
+ "CVE": {
+ "name": "केप भरà¥à¤¡à¤¿à¤¯à¤¨ à¤à¤¸à¥à¤•à¥à¤¡à¥‹",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "केमà¥à¤¯à¤¾à¤¨ टापà¥à¤¹à¤°à¥‚का डलर",
+ "symbol": "KYD"
+ },
+ "KMF": {
+ "name": "कोमोरियन फà¥à¤°à¤¾à¤¨à¥à¤•",
+ "symbol": "KMF"
+ },
+ "COP": {
+ "name": "कोलमà¥à¤µà¤¿à¤¯à¤¨ पेसो",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "कोषà¥à¤Ÿà¤¾à¤°à¤¿à¤•à¤¨ कोलोन",
+ "symbol": "CRC"
+ },
+ "CAD": {
+ "name": "कà¥à¤¯à¤¾à¤¨à¤¾à¤¡à¤¿à¤¯à¤¾à¤²à¥€ डलर",
+ "symbol": "CA$"
+ },
+ "CUP": {
+ "name": "कà¥à¤¯à¥‚वाली पेसो",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "कà¥à¤¯à¥‚वाली रूपानà¥à¤¤à¤°à¤£à¤¯à¥‹à¤—à¥à¤¯ पेसो",
+ "symbol": "CUC"
+ },
+ "HRK": {
+ "name": "कà¥à¤°à¥‹à¤à¤¶à¤¿à¤¯à¤¾à¤²à¥€ कà¥à¤¨à¤¾",
+ "symbol": "HRK"
+ },
+ "GYD": {
+ "name": "गाइनिज डलर",
+ "symbol": "GYD"
+ },
+ "GMD": {
+ "name": "गामà¥à¤µà¤¿à¤¯à¤¾à¤²à¥€ डालासी",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "गिनियाली फà¥à¤°à¤¾à¤¨à¥à¤•",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "गà¥à¤µà¤¾à¤Ÿà¥‡à¤®à¤¾à¤²à¤¾ कà¥à¤µà¥‡à¤Ÿà¥à¤œà¤¾à¤²",
+ "symbol": "GTQ"
+ },
+ "GHS": {
+ "name": "घानाली सेडी",
+ "symbol": "GHS"
+ },
+ "CNY": {
+ "name": "चिनिà¤à¤¯à¤¾ यà¥à¤†à¤¨",
+ "symbol": "CNÂ¥"
+ },
+ "CLP": {
+ "name": "चिलियन पेसो",
+ "symbol": "CLP"
+ },
+ "CZK": {
+ "name": "चेख गणतञà¥à¤¤à¥à¤° कोरूना",
+ "symbol": "CZK"
+ },
+ "JMD": {
+ "name": "जमाइकाली डलर",
+ "symbol": "JMD"
+ },
+ "GEL": {
+ "name": "जरà¥à¤œà¤¿à¤¯à¤¾à¤²à¥€ लारी",
+ "symbol": "GEL"
+ },
+ "JPY": {
+ "name": "जापानी येन",
+ "symbol": "JPÂ¥"
+ },
+ "ZMW": {
+ "name": "जामà¥à¤¬à¤¿à¤¯à¤¾à¤²à¥€ कà¥à¤µà¤¾à¤šà¤¾",
+ "symbol": "ZMW"
+ },
+ "DJF": {
+ "name": "जिबौंटियाली फà¥à¤°à¤¾à¤¨à¥à¤•",
+ "symbol": "DJF"
+ },
+ "GIP": {
+ "name": "जिबà¥à¤°à¤¾à¤²à¥à¤Ÿà¤° पाउणà¥à¤¡",
+ "symbol": "GIP"
+ },
+ "JOD": {
+ "name": "जोरà¥à¤¡à¤¾à¤¨à¤¿à¤¯à¤¾à¤²à¥€ डलर",
+ "symbol": "JOD"
+ },
+ "TOP": {
+ "name": "टङà¥à¤—न पाङà¥à¤—ा",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "टरà¥à¤•à¤¿à¤¶ लिरा",
+ "symbol": "TRY"
+ },
+ "TND": {
+ "name": "टà¥à¤¨à¤¿à¤¸à¤¿à¤¯à¤¾à¤²à¥€ डिनार",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "टà¥à¤°à¥à¤•à¥à¤®à¥‡à¤¨à¤¿à¤¸à¥à¤¤à¤¾à¤¨à¥€ मानात",
+ "symbol": "TMT"
+ },
+ "DOP": {
+ "name": "डोमिनिकन पेसो",
+ "symbol": "DOP"
+ },
+ "DKK": {
+ "name": "डà¥à¤¯à¤¾à¤¨à¤¿à¤¶ कà¥à¤°à¥‹à¤¨",
+ "symbol": "DKK"
+ },
+ "TJS": {
+ "name": "ताजिकà¥à¤¸à¥à¤¤à¤¾à¤¨à¥€ सोमोनी",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "ताञà¥à¤œà¤¾à¤¨à¤¿à¤¯à¤¾à¤²à¥€ शिलिङ",
+ "symbol": "TZS"
+ },
+ "TTD": {
+ "name": "तà¥à¤°à¤¿à¤¨à¤¿à¤¡à¤¾à¤¡ र टोबागो डलर",
+ "symbol": "TTD"
+ },
+ "THB": {
+ "name": "थाई भाट",
+ "symbol": "฿"
+ },
+ "ZAR": {
+ "name": "दकà¥à¤·à¤¿à¤£ अफà¥à¤°à¤¿à¤•à¥€ रà¥â€à¤¯à¤¾à¤¨à¥à¤¡",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "दकà¥à¤·à¤¿à¤£ कोरियाली वन",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "दकà¥à¤·à¤¿à¤£ सà¥à¤¡à¤¾à¤¨à¥€ पाउनà¥à¤¡",
+ "symbol": "SSP"
+ },
+ "TWD": {
+ "name": "नयाठताइवान डलर",
+ "symbol": "NT$"
+ },
+ "NOK": {
+ "name": "नरà¥à¤µà¥‡à¤œà¤¿à¤¯à¤¾à¤²à¥€ कà¥à¤°à¥‹à¤¨",
+ "symbol": "NOK"
+ },
+ "NGN": {
+ "name": "नाइजेरियन नाइरा",
+ "symbol": "NGN"
+ },
+ "NAD": {
+ "name": "नामिबियन डलर",
+ "symbol": "NAD"
+ },
+ "NIO": {
+ "name": "निकारागà¥à¤µà¤¾à¤¨ कोरà¥à¤¡à¥‹à¤µà¤¾",
+ "symbol": "NIO"
+ },
+ "ANG": {
+ "name": "नेदरलà¥à¤¯à¤¾à¤£à¥à¤¡à¥à¤¸ à¤à¤¨à¥à¤Ÿà¤¿à¤²à¤¿à¤¯à¤¨ गिलà¥à¤¡à¤°",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "नेपाली रूपैयाà¤",
+ "symbol": "नेरू"
+ },
+ "NZD": {
+ "name": "नà¥à¤¯à¥‚जिलà¥à¤¯à¤¾à¤£à¥à¤¡ डलर",
+ "symbol": "NZ$"
+ },
+ "PGK": {
+ "name": "पपà¥à¤† नà¥à¤¯à¥‚ गिनियाली किना",
+ "symbol": "PGK"
+ },
+ "PKR": {
+ "name": "पाकिसà¥à¤¤à¤¾à¤¨à¥€ रूपियाà¤",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "पानामानियाली बालà¥à¤¬à¥‹à¤†",
+ "symbol": "PAB"
+ },
+ "PYG": {
+ "name": "पारागà¥à¤¯à¤¾à¤²à¥€ गà¥à¤°à¤¾à¤¨à¥€",
+ "symbol": "PYG"
+ },
+ "XCD": {
+ "name": "पूरà¥à¤µà¥€ कà¥à¤¯à¤¾à¤°à¤¿à¤¬à¤¿à¤¯à¤¨ डलर",
+ "symbol": "EC$"
+ },
+ "PEN": {
+ "name": "पेरूभियाली नà¥à¤¯à¥‚भो सोल",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "पोलिश जà¥à¤²à¥‹à¤Ÿà¤¾à¤ˆ",
+ "symbol": "PLN"
+ },
+ "FKP": {
+ "name": "फकà¥â€Œà¤²à¥à¤¯à¤¾à¤£à¥à¤¡ टापà¥à¤¹à¤°à¥‚का पाउनà¥à¤¡",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "फिजीयाली डलर",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "फिलिपिनी पेसो",
+ "symbol": "PHP"
+ },
+ "BDT": {
+ "name": "बङà¥à¤—लादेशी टाका",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "बरà¥à¤¬à¤¾à¤¡à¤¿à¤¯à¤¨ डलर",
+ "symbol": "BBD"
+ },
+ "BMD": {
+ "name": "बरà¥à¤®à¥à¤¡à¤¨ डलर",
+ "symbol": "BMD"
+ },
+ "BSD": {
+ "name": "बहामियाली डलर",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "बाहारैनी डिनार",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "बà¥à¤°à¥‚णà¥à¤¡à¤¿à¤¯à¤¾à¤²à¥€ फà¥à¤°à¤¾à¤¨à¥à¤•",
+ "symbol": "BIF"
+ },
+ "BGN": {
+ "name": "बà¥à¤²à¥à¤—ारियाली लेभ",
+ "symbol": "BGN"
+ },
+ "GBP": {
+ "name": "बेलायती पाउणà¥à¤¡ सà¥à¤Ÿà¤°à¥à¤²à¤¿à¤™",
+ "symbol": "£"
+ },
+ "BYR": {
+ "name": "बेलारूसी रूबल",
+ "symbol": "BYR"
+ },
+ "BWP": {
+ "name": "बोटà¥à¤¸à¤µà¤¾à¤¨à¤¾à¤¨ पà¥à¤²à¤¾",
+ "symbol": "BWP"
+ },
+ "BOB": {
+ "name": "बोलिभियन बोलिभियानो",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "बोसà¥à¤¨à¤¿à¤¯à¤¾-हरà¥à¤œà¤—ोभिनिया रूपानà¥à¤¤à¤°à¤¯à¥‹à¤—à¥à¤¯ मारà¥à¤•",
+ "symbol": "BAM"
+ },
+ "BRL": {
+ "name": "बà¥à¤°à¤¾à¤œà¤¿à¤²à¤¿à¤¯à¤¨ रियल",
+ "symbol": "R$"
+ },
+ "BND": {
+ "name": "बà¥à¤°à¥à¤¨à¤¾à¤ˆ डलर",
+ "symbol": "BND"
+ },
+ "VUV": {
+ "name": "भानà¥à¤†à¤¤à¥‚ भातà¥",
+ "symbol": "VUV"
+ },
+ "INR": {
+ "name": "भारती रूपिà¤à¤¯à¤¾",
+ "symbol": "₹"
+ },
+ "VND": {
+ "name": "भियतनामी डङà¥",
+ "symbol": "â‚«"
+ },
+ "BTN": {
+ "name": "भà¥à¤Ÿà¤¾à¤¨à¥€ à¤à¤¨à¥â€Œà¤—à¥à¤²à¥à¤Ÿà¥à¤°à¥à¤®",
+ "symbol": "BTN"
+ },
+ "VEF": {
+ "name": "भेनेजà¥à¤à¤²à¤¨ बोलिभर",
+ "symbol": "VEF"
+ },
+ "MNT": {
+ "name": "मङà¥à¤—ोलियाली टà¥à¤—à¥à¤°à¤¿à¤•",
+ "symbol": "MNT"
+ },
+ "MWK": {
+ "name": "मलाविअन कà¥à¤µà¤¾à¤šà¤¾",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "मलेशियाली रिङà¥à¤—ेट",
+ "symbol": "MYR"
+ },
+ "MRO": {
+ "name": "माउरिटानियानली औगà¥à¤‡à¤¯à¤¾",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "माउरिटियन रूपी",
+ "symbol": "MUR"
+ },
+ "MOP": {
+ "name": "माकानिज पटाका",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "मालडिभियाली रूफियाà¤",
+ "symbol": "MVR"
+ },
+ "MGA": {
+ "name": "मालागासी à¤à¤°à¤¿à¤†à¤°à¥€",
+ "symbol": "MGA"
+ },
+ "MDL": {
+ "name": "मालà¥à¤¡à¥‹à¤­à¤¨ लेउ",
+ "symbol": "MDL"
+ },
+ "MXN": {
+ "name": "मेकà¥à¤¸à¤¿à¤•à¤¨ पेसो",
+ "symbol": "MX$"
+ },
+ "MZN": {
+ "name": "मोजामà¥à¤µà¤¿à¤•à¤¨ मेटिकल",
+ "symbol": "MZN"
+ },
+ "MAD": {
+ "name": "मोरोकà¥à¤•à¤¾à¤²à¥€ डिरà¥â€Œà¤¹à¤¾à¤®",
+ "symbol": "MAD"
+ },
+ "MMK": {
+ "name": "मà¥à¤¯à¤¾à¤¨à¥à¤®à¤¾ कà¥à¤¯à¤¾à¤Ÿ",
+ "symbol": "MMK"
+ },
+ "MKD": {
+ "name": "मà¥à¤¯à¤¾à¤¸à¥‡à¤¡à¥‹à¤¨à¤¿à¤¯à¤¾à¤²à¥€ डेनार",
+ "symbol": "MKD"
+ },
+ "UAH": {
+ "name": "यà¥à¤•à¥à¤°à¥‡à¤¨à¥€ हिरà¥à¤­à¤¿à¤¨à¤¿à¤¯à¤¾",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "यà¥à¤—ाणà¥à¤¡à¤¾à¤²à¥€ शिलिङ",
+ "symbol": "UGX"
+ },
+ "EUR": {
+ "name": "यà¥à¤°à¥‹",
+ "symbol": "€"
+ },
+ "YER": {
+ "name": "येमेनी रियाल",
+ "symbol": "YER"
+ },
+ "RUB": {
+ "name": "रूसी रूबल",
+ "symbol": "RUB"
+ },
+ "RON": {
+ "name": "रोमानियाली लेऊ",
+ "symbol": "RON"
+ },
+ "RWF": {
+ "name": "रà¥â€Œà¤µà¤¾à¤£à¥à¤¡à¤¾à¤²à¥€ फà¥à¤°à¤¾à¤¨à¥à¤•",
+ "symbol": "RWF"
+ },
+ "LAK": {
+ "name": "लाओशियन किप",
+ "symbol": "LAK"
+ },
+ "LTL": {
+ "name": "लिथà¥à¤¨à¤¿à¤¯à¤¾à¤²à¥€ लिटास",
+ "symbol": "LTL"
+ },
+ "LRD": {
+ "name": "लिबेरियाली डलर",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "लिवियाली डिनार",
+ "symbol": "LYD"
+ },
+ "LBP": {
+ "name": "लेबनाली पाउनà¥à¤¡",
+ "symbol": "LBP"
+ },
+ "BZD": {
+ "name": "वेलिज डलर",
+ "symbol": "BZD"
+ },
+ "LKR": {
+ "name": "शà¥à¤°à¥€à¤²à¤™à¥à¤•à¤¾à¤²à¥€ रूपिया",
+ "symbol": "LKR"
+ },
+ "AED": {
+ "name": "संयà¥à¤•à¥à¤¤ अरब à¤à¤®à¤¿à¤°à¤¾à¤Ÿà¥à¤¸ डिरà¥à¤¹à¤¾à¤®",
+ "symbol": "AED"
+ },
+ "RSD": {
+ "name": "सरà¥à¤¬à¤¿à¤¯à¤¾à¤²à¥€ डिनार",
+ "symbol": "RSD"
+ },
+ "SAR": {
+ "name": "साउदी रियालहरू",
+ "symbol": "SAR"
+ },
+ "STD": {
+ "name": "साओ टोम र पà¥à¤°à¤¿à¤¨à¥à¤¸à¤¿à¤ª डोबà¥à¤°à¤¾",
+ "symbol": "STD"
+ },
+ "WST": {
+ "name": "सामोआन ताला",
+ "symbol": "WST"
+ },
+ "SGD": {
+ "name": "सिङà¥à¤—ापà¥à¤° डलर",
+ "symbol": "SGD"
+ },
+ "SLL": {
+ "name": "सियरा लियोनेन लियोन",
+ "symbol": "SLL"
+ },
+ "SYP": {
+ "name": "सिरियाली पाउनà¥à¤¡",
+ "symbol": "SYP"
+ },
+ "XAF": {
+ "name": "सीà¤à¤«à¥â€Œà¤ फà¥à¤°à¤¾à¤¨à¥à¤• बीइà¤à¤¸à¥€",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "सीà¤à¤«à¥â€Œà¤ फà¥à¤°à¤¾à¤¨à¥à¤• बीसीइà¤à¤“",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "सीà¤à¤«à¥â€Œà¤ªà¥€ फà¥à¤°à¤¾à¤¨à¥à¤•",
+ "symbol": "CFPF"
+ },
+ "SDG": {
+ "name": "सà¥à¤¡à¤¾à¤¨à¥€ पाउनà¥à¤¡",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "सà¥à¤°à¤¿à¤¨à¤¾à¤®à¤¿à¤œ डलर",
+ "symbol": "SRD"
+ },
+ "SCR": {
+ "name": "सेचेलोइस रूपी",
+ "symbol": "SCR"
+ },
+ "SHP": {
+ "name": "सेनà¥à¤Ÿ हेलेना पाउनà¥à¤¡",
+ "symbol": "SHP"
+ },
+ "SOS": {
+ "name": "सोमाली शिलिङ",
+ "symbol": "SOS"
+ },
+ "SBD": {
+ "name": "सोलोमन टापà¥à¤¹à¤°à¥‚का डलर",
+ "symbol": "SBD"
+ },
+ "SZL": {
+ "name": "सà¥à¤µà¤¾à¤œà¥€ लिलानà¥à¤—ेनी",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "सà¥à¤µà¤¿à¤¡à¤¿à¤¶ कà¥à¤°à¥‹à¤¨à¤¾",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "सà¥à¤µà¤¿à¤¸à¥ फà¥à¤°à¥ˆà¤™à¥à¤•",
+ "symbol": "CHF"
+ },
+ "HKD": {
+ "name": "हङकङ डलर",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "हङà¥à¤—ेरियन फोरिनà¥à¤Ÿ",
+ "symbol": "HUF"
+ },
+ "HTG": {
+ "name": "हैटियाली गà¥à¤°à¥à¤¡",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "होनà¥à¤¡à¥à¤°à¤¾à¤¨ लेमà¥à¤ªà¤¿à¤°à¤¾",
+ "symbol": "HNL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/nl.json b/library/intl/resources/currency/nl.json
new file mode 100644
index 000000000..5b8db07bd
--- /dev/null
+++ b/library/intl/resources/currency/nl.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghaanse afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Albanese lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Algerijnse dinar",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "Amerikaanse dollar",
+ "symbol": "US$"
+ },
+ "AOA": {
+ "name": "Angolese kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentijnse peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "Armeense dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "Arubaanse gulden",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australische dollar",
+ "symbol": "AU$"
+ },
+ "AZN": {
+ "name": "Azerbeidzjaanse manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamaanse dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahreinse dinar",
+ "symbol": "BHD"
+ },
+ "BBD": {
+ "name": "Barbadaanse dollar",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Belizaanse dollar",
+ "symbol": "BZD"
+ },
+ "BDT": {
+ "name": "Bengalese taka",
+ "symbol": "BDT"
+ },
+ "BMD": {
+ "name": "Bermuda-dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "Bhutaanse ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "Boliviaanse boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosnische convertibele mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "Botswaanse pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Braziliaanse real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "Brits pond sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Bruneise dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgaarse lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundese frank",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "Cambodjaanse riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Canadese dollar",
+ "symbol": "C$"
+ },
+ "KYD": {
+ "name": "Caymaneilandse dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA-franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA-frank",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP-franc",
+ "symbol": "XPF"
+ },
+ "CLP": {
+ "name": "Chileense peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Chinese yuan renminbi",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "Colombiaanse peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Comorese frank",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Congolese frank",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Costa Ricaanse colon",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "Cubaanse convertibele peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Cubaanse peso",
+ "symbol": "CUP"
+ },
+ "DKK": {
+ "name": "Deense kroon",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "Djiboutiaanse frank",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominicaanse peso",
+ "symbol": "DOP"
+ },
+ "EGP": {
+ "name": "Egyptisch pond",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrese nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Ethiopische birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falklandeilands pond",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fiji-dollar",
+ "symbol": "FJ$"
+ },
+ "PHP": {
+ "name": "Filipijnse peso",
+ "symbol": "PHP"
+ },
+ "GMD": {
+ "name": "Gambiaanse dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "Georgische lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "Ghanese cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltarees pond",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "Guatemalteekse quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Guinese franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "Guyaanse dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "Haïtiaanse gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "Hondurese lempira",
+ "symbol": "HNL"
+ },
+ "HUF": {
+ "name": "Hongaarse forint",
+ "symbol": "HUF"
+ },
+ "HKD": {
+ "name": "Hongkongse dollar",
+ "symbol": "HK$"
+ },
+ "ISK": {
+ "name": "IJslandse kroon",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "Indiase roepie",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonesische roepia",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "Iraakse dinar",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "Iraanse rial",
+ "symbol": "IRR"
+ },
+ "ILS": {
+ "name": "Israëlische nieuwe shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaicaanse dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanse yen",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "Jemenitische rial",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "Jordaanse dinar",
+ "symbol": "JOD"
+ },
+ "CVE": {
+ "name": "Kaapverdische escudo",
+ "symbol": "CVE"
+ },
+ "KZT": {
+ "name": "Kazachse tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Keniaanse shilling",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "Kirgizische som",
+ "symbol": "KGS"
+ },
+ "KWD": {
+ "name": "Koeweitse dinar",
+ "symbol": "KWD"
+ },
+ "HRK": {
+ "name": "Kroatische kuna",
+ "symbol": "HRK"
+ },
+ "LAK": {
+ "name": "Laotiaanse kip",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "Lesothaanse loti",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "Libanees pond",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "Liberiaanse dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libische dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Litouwse litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "Macause pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Macedonische denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagassische ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawische kwacha",
+ "symbol": "MWK"
+ },
+ "MVR": {
+ "name": "Maldivische rufiyaa",
+ "symbol": "MVR"
+ },
+ "MYR": {
+ "name": "Maleisische ringgit",
+ "symbol": "MYR"
+ },
+ "MAD": {
+ "name": "Marokkaanse dirham",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "Mauritaanse ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "Mauritiaanse roepie",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Mexicaanse peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "Moldavische leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongoolse tugrik",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "Mozambikaanse metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmarese kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibische dollar",
+ "symbol": "NAD"
+ },
+ "ANG": {
+ "name": "Nederlands-Antilliaanse gulden",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "Nepalese roepie",
+ "symbol": "NPR"
+ },
+ "NIO": {
+ "name": "Nicaraguaanse córdoba",
+ "symbol": "NIO"
+ },
+ "NZD": {
+ "name": "Nieuw-Zeelandse dollar",
+ "symbol": "NZ$"
+ },
+ "TWD": {
+ "name": "Nieuwe Taiwanese dollar",
+ "symbol": "NT$"
+ },
+ "NGN": {
+ "name": "Nigeriaanse naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "Noord-Koreaanse won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "Noorse kroon",
+ "symbol": "NOK"
+ },
+ "UGX": {
+ "name": "Oegandese shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Oekraïense hryvnia",
+ "symbol": "UAH"
+ },
+ "UZS": {
+ "name": "Oezbeekse sum",
+ "symbol": "UZS"
+ },
+ "OMR": {
+ "name": "Omaanse rial",
+ "symbol": "OMR"
+ },
+ "XCD": {
+ "name": "Oost-Caribische dollar",
+ "symbol": "EC$"
+ },
+ "PKR": {
+ "name": "Pakistaanse roepie",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamese balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papoea-Nieuw-Guinese kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguayaanse guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruaanse nieuwe sol",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "Poolse zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "Qatarese rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Roemeense leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Russische roebel",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwandese frank",
+ "symbol": "RWF"
+ },
+ "SBD": {
+ "name": "Salomon-dollar",
+ "symbol": "SI$"
+ },
+ "SVC": {
+ "name": "Salvadoraanse colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoaanse tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "Santomese dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saoedi-Arabische riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "Servische dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "Seychelse roepie",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Sierraleoonse leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singaporese dollar",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "Sint-Heleens pond",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Soedanees pond",
+ "symbol": "SDG"
+ },
+ "SOS": {
+ "name": "Somalische shilling",
+ "symbol": "SOS"
+ },
+ "LKR": {
+ "name": "Sri Lankaanse roepie",
+ "symbol": "LKR"
+ },
+ "SRD": {
+ "name": "Surinaamse dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "Swazische lilangeni",
+ "symbol": "SZL"
+ },
+ "SYP": {
+ "name": "Syrisch pond",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "Tadzjiekse somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzaniaanse shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Thaise baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tongaanse paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad en Tobago-dollar",
+ "symbol": "TTD"
+ },
+ "CZK": {
+ "name": "Tsjechische kroon",
+ "symbol": "CZK"
+ },
+ "TND": {
+ "name": "Tunesische dinar",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "Turkmeense manat",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "Turkse lira",
+ "symbol": "TRY"
+ },
+ "UYU": {
+ "name": "Uruguayaanse peso",
+ "symbol": "UYU"
+ },
+ "VUV": {
+ "name": "Vanuatuaanse vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezolaanse bolivar",
+ "symbol": "VEF"
+ },
+ "AED": {
+ "name": "Verenigde Arabische Emiraten-dirham",
+ "symbol": "AED"
+ },
+ "VND": {
+ "name": "Vietnamese dong",
+ "symbol": "â‚«"
+ },
+ "BYR": {
+ "name": "Wit-Russische roebel",
+ "symbol": "BYR"
+ },
+ "ZMW": {
+ "name": "Zambiaanse kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwaanse dollar (2009)",
+ "symbol": "ZWL"
+ },
+ "ZAR": {
+ "name": "Zuid-Afrikaanse rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "Zuid-Koreaanse won",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "Zuid-Soedanees pond",
+ "symbol": "SSP"
+ },
+ "SEK": {
+ "name": "Zweedse kroon",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Zwitserse frank",
+ "symbol": "CHF"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/nmg.json b/library/intl/resources/currency/nmg.json
new file mode 100644
index 000000000..06722f742
--- /dev/null
+++ b/library/intl/resources/currency/nmg.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "USD": {
+ "name": "DÉ”ÌllÉ” Amɛŕka",
+ "symbol": "US$"
+ },
+ "CAD": {
+ "name": "DÉ”ÌllÉ” Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "DÉ”ÌllÉ” Liberia",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "DÉ”ÌllÉ” Namibia",
+ "symbol": "NAD"
+ },
+ "AUD": {
+ "name": "DÉ”ÌllÉ” Ɔstralia",
+ "symbol": "A$"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "CDF": {
+ "name": "Fraŋ bó Kongolɛ̌",
+ "symbol": "CDF"
+ },
+ "KMF": {
+ "name": "Fraŋ bó Kɔmɔr",
+ "symbol": "KMF"
+ },
+ "BIF": {
+ "name": "Fraŋ Burundi",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Fraŋ CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Fraŋ CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "DJF": {
+ "name": "Fraŋ Jibuti",
+ "symbol": "DJF"
+ },
+ "RWF": {
+ "name": "Fraŋ Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Fraŋ Suisse",
+ "symbol": "CHF"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "ZAR": {
+ "name": "Mɔn Afrik yí sí",
+ "symbol": "ZAR"
+ },
+ "EGP": {
+ "name": "Mɔn Ägyptɛn",
+ "symbol": "EGP"
+ },
+ "DZD": {
+ "name": "Mɔn Algeria",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Mɔn Angola",
+ "symbol": "AOA"
+ },
+ "AED": {
+ "name": "Mɔn B ´Arabe",
+ "symbol": "AED"
+ },
+ "BHD": {
+ "name": "Mɔn Bahrein",
+ "symbol": "BHD"
+ },
+ "CNY": {
+ "name": "Mɔn bó Chinois",
+ "symbol": "CNÂ¥"
+ },
+ "BWP": {
+ "name": "Mɔn Botswana",
+ "symbol": "BWP"
+ },
+ "ERN": {
+ "name": "Mɔn Erytré",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Mɔn Ethiopia",
+ "symbol": "ETB"
+ },
+ "GMD": {
+ "name": "Mɔn Gambia",
+ "symbol": "GMD"
+ },
+ "INR": {
+ "name": "Mɔn India",
+ "symbol": "₹"
+ },
+ "JPY": {
+ "name": "Mɔn Japɔn",
+ "symbol": "JPÂ¥"
+ },
+ "CVE": {
+ "name": "Mɔn Kapvɛrt",
+ "symbol": "CVE"
+ },
+ "KES": {
+ "name": "Mɔn Kɛnya",
+ "symbol": "KES"
+ },
+ "SLL": {
+ "name": "Mɔn Leɔne",
+ "symbol": "SLL"
+ },
+ "LSL": {
+ "name": "Mɔn Lesoto",
+ "symbol": "LSL"
+ },
+ "LYD": {
+ "name": "Mɔn Libya",
+ "symbol": "LYD"
+ },
+ "SZL": {
+ "name": "Mɔn Ligangeni",
+ "symbol": "SZL"
+ },
+ "SHP": {
+ "name": "Mɔn má Saint Lina",
+ "symbol": "SHP"
+ },
+ "MGA": {
+ "name": "Mɔn Madagaskar",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Mɔn Malawi",
+ "symbol": "MWK"
+ },
+ "MAD": {
+ "name": "Mɔn Marɔk",
+ "symbol": "MAD"
+ },
+ "MUR": {
+ "name": "Mɔn Moriss",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "Mɔn Moritania",
+ "symbol": "MRO"
+ },
+ "GBP": {
+ "name": "Mɔn Ngɛ̄lɛ̄n",
+ "symbol": "£"
+ },
+ "STD": {
+ "name": "Mɔn Sao tomé na prinship",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Mɔn Saudi Arabia",
+ "symbol": "SAR"
+ },
+ "SCR": {
+ "name": "Mɔn Seychɛlle",
+ "symbol": "SCR"
+ },
+ "SOS": {
+ "name": "Mɔn Somalía",
+ "symbol": "SOS"
+ },
+ "SDG": {
+ "name": "Mɔn Sudan",
+ "symbol": "SDG"
+ },
+ "TZS": {
+ "name": "Mɔn Tanzania",
+ "symbol": "TZS"
+ },
+ "TND": {
+ "name": "Mɔn Tunisia",
+ "symbol": "TND"
+ },
+ "UGX": {
+ "name": "Mɔn Uganda",
+ "symbol": "UGX"
+ },
+ "ZMW": {
+ "name": "Mɔn Zambia",
+ "symbol": "ZMW"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naïra Nigeria",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/nn.json b/library/intl/resources/currency/nn.json
new file mode 100644
index 000000000..cc9301092
--- /dev/null
+++ b/library/intl/resources/currency/nn.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "albansk lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "algerisk dinar",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "amerikansk dollar",
+ "symbol": "US$"
+ },
+ "AOA": {
+ "name": "angolsk kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "argentinsk peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "armensk dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "arubisk gylden",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "aserbajdsjansk manat",
+ "symbol": "AZN"
+ },
+ "XCD": {
+ "name": "austkaribisk dollar",
+ "symbol": "EC$"
+ },
+ "AUD": {
+ "name": "australsk dollar",
+ "symbol": "A$"
+ },
+ "BSD": {
+ "name": "bahamisk dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "bahrainsk dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "bangladeshisk taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "barbadisk dollar",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "belizisk dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "bermudisk dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "bhutansk ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "bosnisk-hercegovinsk mark (konvertibel)",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "botswansk pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "brasiliansk real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "britisk pund sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "bruneisk dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "bulgarsk ny lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "burundisk franc",
+ "symbol": "BIF"
+ },
+ "KYD": {
+ "name": "caymansk dollar",
+ "symbol": "KYD"
+ },
+ "XOF": {
+ "name": "CFA franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA franc BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "chilensk peso",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "colombiansk peso",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "costaricansk colon",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "DKK": {
+ "name": "dansk krone",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "djiboutisk franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "dominikansk peso",
+ "symbol": "DOP"
+ },
+ "EGP": {
+ "name": "egyptisk pund",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "eritreisk nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "etiopisk birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland-pund",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "fijiansk dollar",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "filippinsk peso",
+ "symbol": "PHP"
+ },
+ "GMD": {
+ "name": "gambisk dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "georgisk lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "ghanesisk cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "gibraltarsk pund",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "guatemalansk quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "guineansk franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "guyansk dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "haitisk gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "honduransk lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hongkong-dollar",
+ "symbol": "HK$"
+ },
+ "INR": {
+ "name": "indisk rupi",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "indonesisk rupi",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "iraksk dinar",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "iransk rial",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "islandsk krone",
+ "symbol": "ISK"
+ },
+ "ILS": {
+ "name": "israelsk ny shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "jamaikansk dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "japansk yen",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "jemenittisk rial",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "jordansk dinar",
+ "symbol": "JOD"
+ },
+ "KHR": {
+ "name": "kambodsjansk riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "kanadisk dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "kappverdisk escudo",
+ "symbol": "CVE"
+ },
+ "KZT": {
+ "name": "kasakhstansk tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "kenyansk shilling",
+ "symbol": "KES"
+ },
+ "CNY": {
+ "name": "kinesisk yuan renminbi",
+ "symbol": "CNÂ¥"
+ },
+ "KGS": {
+ "name": "kirgisisk som",
+ "symbol": "KGS"
+ },
+ "KMF": {
+ "name": "komorisk franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "kongolesisk franc",
+ "symbol": "CDF"
+ },
+ "HRK": {
+ "name": "kroatisk kuna",
+ "symbol": "HRK"
+ },
+ "CUP": {
+ "name": "kubansk peso",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "kuwaitisk dinar",
+ "symbol": "KWD"
+ },
+ "BYR": {
+ "name": "kviterussisk rubel",
+ "symbol": "BYR"
+ },
+ "LAK": {
+ "name": "laotisk kip",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "lesothisk loti",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "libanesisk pund",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "liberisk dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "libysk dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "litauisk lita",
+ "symbol": "LTL"
+ },
+ "MGA": {
+ "name": "madagassisk ariary",
+ "symbol": "MGA"
+ },
+ "MOP": {
+ "name": "makaosk pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "makedonsk denar",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "malawisk kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "malaysisk ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "maldivisk rufiyaa",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "marokkansk dirham",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "mauritansk ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "mauritansk rupi",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "meksikansk peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "moldovsk leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "mongolsk tugrik",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "mosambikisk metical",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "myanmarsk kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "namibisk dollar",
+ "symbol": "NAD"
+ },
+ "ANG": {
+ "name": "nederlansk antillegylden",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "nepalsk rupi",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "new zealandsk dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "nicaraguansk cordoba oro",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "nigeriansk naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "nordkoreansk won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "norsk krone",
+ "symbol": "kr"
+ },
+ "OMR": {
+ "name": "omansk rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "pakistansk rupi",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "panamansk balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "papuansk kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "paraguayansk guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "peruansk nuevo sol",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "polsk zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "qatarsk rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "rumensk leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "russisk rubel",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "rwandisk franc",
+ "symbol": "RWF"
+ },
+ "SBD": {
+ "name": "salomonsk dollar",
+ "symbol": "SBD"
+ },
+ "SVC": {
+ "name": "salvadoransk colon",
+ "symbol": "SVC"
+ },
+ "SHP": {
+ "name": "sankthelensk pund",
+ "symbol": "SHP"
+ },
+ "STD": {
+ "name": "Sao Tome og Principe-dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "saudiarabisk rial",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "serbisk dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "seychellisk rupi",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "sierraleonsk leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "singaporsk dollar",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "somalisk shilling",
+ "symbol": "SOS"
+ },
+ "LKR": {
+ "name": "srilankisk rupi",
+ "symbol": "LKR"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SDG": {
+ "name": "sudansk pund",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "surinamsk dollar",
+ "symbol": "SRD"
+ },
+ "CHF": {
+ "name": "sveitsisk franc",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "svensk krone",
+ "symbol": "SEK"
+ },
+ "SZL": {
+ "name": "swazilandsk lilangeni",
+ "symbol": "SZL"
+ },
+ "SYP": {
+ "name": "syrisk pund",
+ "symbol": "SYP"
+ },
+ "ZAR": {
+ "name": "sørafrikansk rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "sørkoreansk won",
+ "symbol": "â‚©"
+ },
+ "TJS": {
+ "name": "tadsjikisk somoni",
+ "symbol": "TJS"
+ },
+ "TWD": {
+ "name": "taiwansk ny dollar",
+ "symbol": "NT$"
+ },
+ "TZS": {
+ "name": "tanzaniansk shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "thailandsk baht",
+ "symbol": "THB"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "tongansk paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "trinidadisk dollar",
+ "symbol": "TTD"
+ },
+ "CZK": {
+ "name": "tsjekkisk koruna",
+ "symbol": "CZK"
+ },
+ "TND": {
+ "name": "tunisisk dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "tyrkisk lire",
+ "symbol": "TRY"
+ },
+ "AED": {
+ "name": "UAE dirham",
+ "symbol": "AED"
+ },
+ "UGX": {
+ "name": "ugandisk shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "ukrainsk hryvnia",
+ "symbol": "UAH"
+ },
+ "HUF": {
+ "name": "ungarsk forint",
+ "symbol": "HUF"
+ },
+ "UYU": {
+ "name": "uruguayansk peso",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "usbekisk sum",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "vanuatuisk vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "venezuelansk bolivar",
+ "symbol": "VEF"
+ },
+ "WST": {
+ "name": "vestsamoisk tala",
+ "symbol": "WST"
+ },
+ "VND": {
+ "name": "vietnamesisk dong",
+ "symbol": "â‚«"
+ },
+ "ZMW": {
+ "name": "zambisk kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/nus.json b/library/intl/resources/currency/nus.json
new file mode 100644
index 000000000..d7e43ee93
--- /dev/null
+++ b/library/intl/resources/currency/nus.json
@@ -0,0 +1,634 @@
+{
+ "AED": {
+ "name": "AED",
+ "symbol": "AED"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "AOA",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AUD": {
+ "name": "AUD",
+ "symbol": "A$"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BHD": {
+ "name": "BHD",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "BIF",
+ "symbol": "BIF"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BWP": {
+ "name": "BWP",
+ "symbol": "BWP"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CAD": {
+ "name": "CAD",
+ "symbol": "CA$"
+ },
+ "CDF": {
+ "name": "CDF",
+ "symbol": "CDF"
+ },
+ "CHF": {
+ "name": "CHF",
+ "symbol": "CHF"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "CNY",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CVE": {
+ "name": "CVE",
+ "symbol": "CVE"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DJF": {
+ "name": "DJF",
+ "symbol": "DJF"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "DZD": {
+ "name": "DZD",
+ "symbol": "DZD"
+ },
+ "EGP": {
+ "name": "EGP",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "ERN",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "ETB",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "EUR",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GBP": {
+ "name": "GBP",
+ "symbol": "£"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GMD": {
+ "name": "GMD",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "INR",
+ "symbol": "₹"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "JPY": {
+ "name": "JPY",
+ "symbol": "JPÂ¥"
+ },
+ "KES": {
+ "name": "KES",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "KMF",
+ "symbol": "KMF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LRD": {
+ "name": "LRD",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "LYD",
+ "symbol": "LYD"
+ },
+ "MAD": {
+ "name": "MAD",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MGA": {
+ "name": "MGA",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MRO": {
+ "name": "MRO",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "MWK",
+ "symbol": "MWK"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SAR": {
+ "name": "SAR",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "SDG",
+ "symbol": "SDG"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SOS",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "TND",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "TZS": {
+ "name": "TZS",
+ "symbol": "TZS"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "UGX",
+ "symbol": "UGX"
+ },
+ "USD": {
+ "name": "USD",
+ "symbol": "US$"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZAR": {
+ "name": "ZAR",
+ "symbol": "ZAR"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/nyn.json b/library/intl/resources/currency/nyn.json
new file mode 100644
index 000000000..38f4d562b
--- /dev/null
+++ b/library/intl/resources/currency/nyn.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "MGA": {
+ "name": "Ariari ya Maragariita",
+ "symbol": "MGA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Birr ya Ethiopiya",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi ya Gambia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinari ya Arigyeriya",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinari ya Bahareni",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinari ya Libya",
+ "symbol": "LYD"
+ },
+ "SDG": {
+ "name": "Dinari ya Sudani",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "Dinari ya Tunisia",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham za Buharabu",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirram ya Moroko",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobra ya Sao Tome na Purinsipo",
+ "symbol": "STD"
+ },
+ "USD": {
+ "name": "Doora ya America",
+ "symbol": "US$"
+ },
+ "AUD": {
+ "name": "Doora ya Austureeriya",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "Doora ya Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Doora ya Liberia",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Doora ya Namibiya",
+ "symbol": "NAD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "SOS": {
+ "name": "Eshiringi ya Somalia",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Eshiringi ya Tanzania",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Eshiringi ya Uganda",
+ "symbol": "USh"
+ },
+ "CVE": {
+ "name": "Eskudo ya Kepuvede",
+ "symbol": "CVE"
+ },
+ "BIF": {
+ "name": "Faranga ya Burundi",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Faranga ya CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Faranga ya CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "DJF": {
+ "name": "Faranga ya Gyibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Faranga ya Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Faranga ya Kongo",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Faranga ya Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Faranga ya Swisi",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kwaca ya Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha ya Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza ya Angora",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leone",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti ya Lesoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira ya Naigyeriya",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa ya Eritireya",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "MRO": {
+ "name": "Ougwiya ya Mouriteeniya",
+ "symbol": "MRO"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "GBP": {
+ "name": "Paundi ya Bungyereza",
+ "symbol": "£"
+ },
+ "EGP": {
+ "name": "Paundi ya Misiri",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Paundi ya Senti Herena",
+ "symbol": "SHP"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pura ya Botswana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Randi ya Sausi Afirika",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riya ya Saudi",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "MUR": {
+ "name": "Rupiiha ya Mauritiasi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupiiha ya Sherisheri",
+ "symbol": "SCR"
+ },
+ "INR": {
+ "name": "Rupiya ya India",
+ "symbol": "₹"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "Shiringi ya Kenya",
+ "symbol": "KES"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "JPY": {
+ "name": "Yeni ya Japaani",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yuan Renminbi ya China",
+ "symbol": "CNÂ¥"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/or.json b/library/intl/resources/currency/or.json
new file mode 100644
index 000000000..3366914d6
--- /dev/null
+++ b/library/intl/resources/currency/or.json
@@ -0,0 +1,634 @@
+{
+ "AED": {
+ "name": "AED",
+ "symbol": "AED"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "AOA",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AUD": {
+ "name": "AUD",
+ "symbol": "A$"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BHD": {
+ "name": "BHD",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "BIF",
+ "symbol": "BIF"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BWP": {
+ "name": "BWP",
+ "symbol": "BWP"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CAD": {
+ "name": "CAD",
+ "symbol": "CA$"
+ },
+ "CDF": {
+ "name": "CDF",
+ "symbol": "CDF"
+ },
+ "CHF": {
+ "name": "CHF",
+ "symbol": "CHF"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "CNY",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CVE": {
+ "name": "CVE",
+ "symbol": "CVE"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DJF": {
+ "name": "DJF",
+ "symbol": "DJF"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "DZD": {
+ "name": "DZD",
+ "symbol": "DZD"
+ },
+ "EGP": {
+ "name": "EGP",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "ERN",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "ETB",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "EUR",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GBP": {
+ "name": "GBP",
+ "symbol": "£"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GMD": {
+ "name": "GMD",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "JPY": {
+ "name": "JPY",
+ "symbol": "JPÂ¥"
+ },
+ "KES": {
+ "name": "KES",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "KMF",
+ "symbol": "KMF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LRD": {
+ "name": "LRD",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "LYD",
+ "symbol": "LYD"
+ },
+ "MAD": {
+ "name": "MAD",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MGA": {
+ "name": "MGA",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MRO": {
+ "name": "MRO",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "MWK",
+ "symbol": "MWK"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SAR": {
+ "name": "SAR",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "SDG",
+ "symbol": "SDG"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SOS",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "TND",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "TZS": {
+ "name": "TZS",
+ "symbol": "TZS"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "UGX",
+ "symbol": "UGX"
+ },
+ "USD": {
+ "name": "USD",
+ "symbol": "US$"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZAR": {
+ "name": "ZAR",
+ "symbol": "ZAR"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "INR": {
+ "name": "ଟଙକା",
+ "symbol": "₹"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/pa.json b/library/intl/resources/currency/pa.json
new file mode 100644
index 000000000..9c0bf94be
--- /dev/null
+++ b/library/intl/resources/currency/pa.json
@@ -0,0 +1,634 @@
+{
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "UZS": {
+ "name": "ਉਜ਼ਬੇਕਿਸਤਾਨ ਸੋਮ",
+ "symbol": "UZS"
+ },
+ "KPW": {
+ "name": "ਉੱਤਰੀ ਕੋਰੀਆਈ ਵੋਨ",
+ "symbol": "KPW"
+ },
+ "UYU": {
+ "name": "ਉਰੂਗà©à¨µà¨¾à¨‡à¨¨ ਪੇਸੋ",
+ "symbol": "UYU"
+ },
+ "OMR": {
+ "name": "ਓਮਾਨੀ ਰਿਆਲ",
+ "symbol": "OMR"
+ },
+ "AOA": {
+ "name": "ਅੰਗੋਲਾ ਕਵਾਂਜਾ",
+ "symbol": "AOA"
+ },
+ "AZN": {
+ "name": "ਅਜ਼ਰਬਾਈਜਾਨ ਮਾਨਤ",
+ "symbol": "AZN"
+ },
+ "AFN": {
+ "name": "ਅਫ਼ਗਾਨ ਅਫ਼ਗਾਨੀ",
+ "symbol": "AFN"
+ },
+ "ARS": {
+ "name": "ਅਰਜਨਟੀਨੀ ਪੇਸੋ",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "ਅਰਮੀਨੀਆਈ ਦਰਮ",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "ਅਰੂਬਨ ਫਲੋਰਿਨ",
+ "symbol": "AWG"
+ },
+ "DZD": {
+ "name": "ਅਲਜੀਰਿਆਈ ਦਿਨਾਰ",
+ "symbol": "DZD"
+ },
+ "ALL": {
+ "name": "ਅਲਬਾਨੀਆਈ ਲੇਕ",
+ "symbol": "ALL"
+ },
+ "ISK": {
+ "name": "ਆਈਸਲੈਂਡਿਕ ਕਰੌਨ",
+ "symbol": "ISK"
+ },
+ "AUD": {
+ "name": "ਆਸਟà©à¨°à©‡à¨²à©€à¨†à¨ˆ ਡਾਲਰ",
+ "symbol": "A$"
+ },
+ "ILS": {
+ "name": "ਇਜ਼ਰਾਈਲੀ ਨਵੀਂ ਸ਼ੇਕੇਲ",
+ "symbol": "₪"
+ },
+ "IDR": {
+ "name": "ਇੰਡੋਨੇਸ਼ੀਆਈ ਰà©à¨ªà¨¿à¨†à¨¹",
+ "symbol": "IDR"
+ },
+ "ETB": {
+ "name": "ਇਥੋਪੀਆਈ ਬਿਰ",
+ "symbol": "ETB"
+ },
+ "IQD": {
+ "name": "ਇਰਾਕੀ ਦਿਨਾਰ",
+ "symbol": "IQD"
+ },
+ "ERN": {
+ "name": "ਇਰੀਟà©à¨°à¨¿à¨†à¨ˆ ਨਾਫ਼ਾ",
+ "symbol": "ERN"
+ },
+ "IRR": {
+ "name": "ਈਰਾਨੀ ਰਿਆਲ",
+ "symbol": "IRR"
+ },
+ "AED": {
+ "name": "ਸੰਯà©à¨•à¨¤ ਅਰਬ ਅਮੀਰਾਤ ਦਿਰਹਾਮ",
+ "symbol": "AED"
+ },
+ "RSD": {
+ "name": "ਸਰਬੀਆਈ ਦਿਨਾਰ",
+ "symbol": "RSD"
+ },
+ "SZL": {
+ "name": "ਸਵਾਜ਼ੀ ਲਾਇਲੈਂਗਨੀ",
+ "symbol": "SZL"
+ },
+ "CHF": {
+ "name": "ਸਵਿਸ ਫà©à¨°à©ˆà¨‚ਕ",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "ਸਵੀਡਿਸ਼ ਕਰੋਨਾ",
+ "symbol": "SEK"
+ },
+ "LKR": {
+ "name": "ਸà©à¨°à©€à¨²à©°à¨•à¨¾à¨ˆ ਰà©à¨ªà¨‡à¨†",
+ "symbol": "LKR"
+ },
+ "STD": {
+ "name": "ਸਾਉ ਟੋਮੀ à¨à¨‚ਡ ਪà©à¨°à¨¿à©°à¨¸à¨ªà©€ ਡੋਬਰਾ",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "ਸਾਊਦੀ ਰਿਆਲ",
+ "symbol": "SAR"
+ },
+ "WST": {
+ "name": "ਸਾਮੋਆਈ ਤਾਲਾ",
+ "symbol": "WST"
+ },
+ "SLL": {
+ "name": "ਸਿà¨à¨°à¨¾ ਲਿਓਨੀਅਨ ਲਿਓਨ",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "ਸਿੰਗਾਪà©à¨° ਡਾਲਰ",
+ "symbol": "SGD"
+ },
+ "SYP": {
+ "name": "ਸੀਰੀਆਈ ਪੌਂਡ",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "ਸੂਡਾਨੀ ਪੌਂਡ",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "ਸੂਰੀਨਾਮੀ ਡਾਲਰ",
+ "symbol": "SRD"
+ },
+ "SCR": {
+ "name": "ਸੇਸ਼ਲਸ ਰà©à¨ªà¨‡à¨†",
+ "symbol": "SCR"
+ },
+ "SHP": {
+ "name": "ਸੇਂਟ ਹੇਲੇਨਾ ਪੌਂਡ",
+ "symbol": "SHP"
+ },
+ "SOS": {
+ "name": "ਸੋਮਾਲੀ ਸ਼ਿਲਿੰਗ",
+ "symbol": "SOS"
+ },
+ "SBD": {
+ "name": "ਸੋਲੋਮਨ ਆਈਲੈਂਡਸ ਡਾਲਰ",
+ "symbol": "SBD"
+ },
+ "HUF": {
+ "name": "ਹੰਗਰੀ ਫੋਰਿੰਟ",
+ "symbol": "HUF"
+ },
+ "HKD": {
+ "name": "ਹਾਂਗ ਕਾਂਗ ਡਾਲਰ",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "ਹਾਨਡੂਰਨ ਲੇਮਪਿਰਾ",
+ "symbol": "HNL"
+ },
+ "HTG": {
+ "name": "ਹੈਤੀ ਗੌਰਡੇ",
+ "symbol": "HTG"
+ },
+ "KZT": {
+ "name": "ਕਜ਼ਾਖਸਤਾਨੀ ਤੇਂਗੇ",
+ "symbol": "KZT"
+ },
+ "QAR": {
+ "name": "ਕਤਰੀ ਰਿਆਲ",
+ "symbol": "QAR"
+ },
+ "KHR": {
+ "name": "ਕੰਬੋਡੀਆਈ ਰੀਅਲ",
+ "symbol": "KHR"
+ },
+ "HRK": {
+ "name": "ਕਰੋà¨à¨¸à¨¼à©€à¨†à¨ˆ ਕà©à¨¨à¨¾",
+ "symbol": "HRK"
+ },
+ "CDF": {
+ "name": "ਕਾਂਗੋਲੀਜ਼ ਫà©à¨°à©ˆà¨‚ਕ",
+ "symbol": "CDF"
+ },
+ "CUP": {
+ "name": "ਕਿਊਬਨ ਪੇਸੋ",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "ਕਿਊਬਨ ਬਦਲਣਯੋਗ ਪੇਸੋ",
+ "symbol": "CUC"
+ },
+ "KGS": {
+ "name": "ਕਿਰਗਿਸਤਾਨੀ ਸੋਮ",
+ "symbol": "KGS"
+ },
+ "KES": {
+ "name": "ਕੀਨੀਆਈ ਸ਼ਿਲਿੰਗ",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "ਕà©à¨µà©ˆà¨¤à©€ ਦਿਨਾਰ",
+ "symbol": "KWD"
+ },
+ "CAD": {
+ "name": "ਕੇਨੇਡਿਆਈ ਡਾਲਰ",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "ਕੇਪ ਵਰਡੀਅਨ ਸਕੂਡੋ",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "ਕੇਮੈਨ ਆਈਲੈਂਡਸ ਡਾਲਰ",
+ "symbol": "KYD"
+ },
+ "CRC": {
+ "name": "ਕੋਸਟਾ ਰੀਕਨ ਕੋਲਨ",
+ "symbol": "CRC"
+ },
+ "KMF": {
+ "name": "ਕੋਮੋਰੀਅਨ ਫà©à¨°à©ˆà¨‚ਕ",
+ "symbol": "KMF"
+ },
+ "COP": {
+ "name": "ਕੋਲੰਬਿਆਈ ਪੇਸੋ",
+ "symbol": "COP"
+ },
+ "GNF": {
+ "name": "ਗਿਨੀ ਫà©à¨°à©ˆà¨‚ਕ",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "ਗà©à¨†à¨Ÿà©‡à¨®à¨¾à¨²à¨¾ ਕà©à¨à¨Ÿà¨œà¨¼à¨²",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "ਗà©à¨†à¨¨à¨¾à¨†à¨ˆ ਡਾਲਰ",
+ "symbol": "GYD"
+ },
+ "GMD": {
+ "name": "ਗੈਂਬੀਆਈ ਦਲਾਸੀ",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "ਘਾਨਾਈ ਸੇਡੀ",
+ "symbol": "GHS"
+ },
+ "CLP": {
+ "name": "ਚਿਲੀ ਪੇਸੋ",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "ਚੀਨੀ ਯà©à¨†à¨¨",
+ "symbol": "CNÂ¥"
+ },
+ "CZK": {
+ "name": "ਚੈਕ ਗਣਰਾਜ ਕੋਰà©à¨¨à¨¾",
+ "symbol": "CZK"
+ },
+ "JPY": {
+ "name": "ਜਪਾਨੀ ਯੇਨ",
+ "symbol": "JPÂ¥"
+ },
+ "JMD": {
+ "name": "ਜਮਾਇਕਨ ਡਾਲਰ",
+ "symbol": "JMD"
+ },
+ "ZMW": {
+ "name": "ਜ਼ਾਮਬੀਆਈ ਕਵਾਚਾ",
+ "symbol": "ZMW"
+ },
+ "GEL": {
+ "name": "ਜਾਰਜੀਆਈ ਲਾਰੀ",
+ "symbol": "GEL"
+ },
+ "JOD": {
+ "name": "ਜਾਰਡਨ ਦਿਨਾਰ",
+ "symbol": "JOD"
+ },
+ "GIP": {
+ "name": "ਜਿਬਰਾਲਟਰ ਪੌਂਡ",
+ "symbol": "GIP"
+ },
+ "DJF": {
+ "name": "ਜ਼ੀਬੂਤੀਅਨ ਫà©à¨°à©ˆà¨‚ਕ",
+ "symbol": "DJF"
+ },
+ "TTD": {
+ "name": "ਟà©à¨°à¨¿à¨¨à©€à¨¡à¨¾à¨¡ ਅਤੇ ਟੋਬਾਗੋ ਡਾਲਰ",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "ਟਿਉਨੀਸ਼ੀਆਈ ਦਿਨਾਰ",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "ਟੌਂਗਨ ਪੈਂਗਾ",
+ "symbol": "TOP"
+ },
+ "DKK": {
+ "name": "ਡੈਨਿਸ਼ ਕਰੌਨ",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "ਡੌਮਿਨਿਕਨ ਪੇਸੋ",
+ "symbol": "DOP"
+ },
+ "TZS": {
+ "name": "ਤਨਜ਼ਾਨੀਆਈ ਸ਼ਿਲਿੰਗ",
+ "symbol": "TZS"
+ },
+ "TJS": {
+ "name": "ਤਾਜਿਕਿਸਤਾਨੀ ਸੋਮੋਨੀ",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "ਤà©à¨°à¨•à¨®à©‡à¨¨à¨¿à¨¸à¨¤à¨¾à¨¨à©€ ਮਾਨਤ",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "ਤà©à¨°à¨•à©€ ਲੀਰਾ",
+ "symbol": "TRY"
+ },
+ "THB": {
+ "name": "ਥਾਈ ਬਾਹਤ",
+ "symbol": "฿"
+ },
+ "ZAR": {
+ "name": "ਦੱਖਣੀ ਅਫਰੀਕੀ ਰੈਂਡ",
+ "symbol": "ZAR"
+ },
+ "SSP": {
+ "name": "ਦੱਖਣੀ ਸੂਡਾਨੀ ਪੌਂਡ",
+ "symbol": "SSP"
+ },
+ "KRW": {
+ "name": "ਦੱਖਣੀ ਕੋਰੀਆਈ ਵੋਨ",
+ "symbol": "â‚©"
+ },
+ "TWD": {
+ "name": "ਨਵਾਂ ਤਾਇਵਾਨ ਡਾਲਰ",
+ "symbol": "NT$"
+ },
+ "NGN": {
+ "name": "ਨਾਇਜੀਰੀਆਈ ਨਾਇਰਾ",
+ "symbol": "NGN"
+ },
+ "NAD": {
+ "name": "ਨਾਮੀਬੀਆਈ ਡਾਲਰ",
+ "symbol": "NAD"
+ },
+ "NOK": {
+ "name": "ਨਾਰਵੇਜੀਆਈ ਕਰੌਨ",
+ "symbol": "NOK"
+ },
+ "NZD": {
+ "name": "ਨਿਊਜ਼ੀਲੈਂਡ ਡਾਲਰ",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "ਨਿਕਾਰਾਗà©à¨†à¨ˆ ਕੋਰਡੋਬਾ",
+ "symbol": "NIO"
+ },
+ "ANG": {
+ "name": "ਨੀਦਰਲੈਂਡਸ à¨à¨‚ਟੀਲੀਅਨ ਗਿਲਡਰ",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "ਨੇਪਾਲੀ ਰà©à¨ªà¨‡à¨†",
+ "symbol": "NPR"
+ },
+ "PAB": {
+ "name": "ਪਨਾਮੇਨੀਅਨ ਬਾਲਬੋਆ",
+ "symbol": "PAB"
+ },
+ "PKR": {
+ "name": "ਪਾਕਿਸਤਾਨੀ ਰà©à¨ªà¨‡à¨†",
+ "symbol": "PKR"
+ },
+ "PGK": {
+ "name": "ਪਾਪੂਆ ਨਿਊ ਗਿਨੀਆਈ ਕੀਨਾ",
+ "symbol": "PGK"
+ },
+ "XCD": {
+ "name": "ਪੂਰਬੀ ਕੈਰੇਬੀਅਨ ਡਾਲਰ",
+ "symbol": "EC$"
+ },
+ "PEN": {
+ "name": "ਪੇਰੂਵੀਅਨ ਨਿਊਵੋ ਸੋਲ",
+ "symbol": "PEN"
+ },
+ "PYG": {
+ "name": "ਪੈਰਾਗà©à¨µà¨¾à¨‡à¨¨ ਗà©à¨†à¨°à¨¾à¨¨à©€",
+ "symbol": "PYG"
+ },
+ "PLN": {
+ "name": "ਪੋਲੈਂਡੀ ਜ਼ਲੌਟੀ",
+ "symbol": "PLN"
+ },
+ "XOF": {
+ "name": "ਫà©à¨°à©ˆà¨‚ਕ (CFA BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "ਫà©à¨°à©ˆà¨‚ਕ (CFA BEAC)",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "ਫà©à¨°à©ˆà¨‚ਕ (CFP)",
+ "symbol": "CFPF"
+ },
+ "FKP": {
+ "name": "ਫ਼ਾਕਲੈਂਡ ਆਈਲੈਂਡਸ ਪੌਂਡ",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "ਫ਼ਿਜ਼ੀ ਡਾਲਰ",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "ਫਿਲਿਪੀਨੀ ਪੇਸੋ",
+ "symbol": "PHP"
+ },
+ "BHD": {
+ "name": "ਬਹਿਰੀਨੀ ਦਿਨਾਰ",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "ਬੰਗਲਾਦੇਸ਼ੀ ਟਕਾ",
+ "symbol": "BDT"
+ },
+ "BMD": {
+ "name": "ਬਰਮੂਡਾ ਡਾਲਰ",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "ਬਰੂਨੇਈ ਡਾਲਰ",
+ "symbol": "BND"
+ },
+ "BRL": {
+ "name": "ਬà©à¨°à¨¾à¨œà¨¼à©€à¨²à©€à¨†à¨ˆ ਰੀਅਲ",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "ਬà©à¨°à¨¿à¨Ÿà¨¿à¨¸à¨¼ ਪੌਂਡ ਸਟਰਲਿੰਗ",
+ "symbol": "£"
+ },
+ "BSD": {
+ "name": "ਬਾਹਾਮੀਅਨ ਡਾਲਰ",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "ਬਾਰਬਾਡੀਅਨ ਡਾਲਰ",
+ "symbol": "BBD"
+ },
+ "BIF": {
+ "name": "ਬà©à¨°à©à©°à¨¡à©€à¨†à¨ˆ ਫà©à¨°à©ˆà¨‚ਕ",
+ "symbol": "BIF"
+ },
+ "BGN": {
+ "name": "ਬà©à¨²à¨—ਾਰੀਆਈ ਲੇਵ",
+ "symbol": "BGN"
+ },
+ "BYR": {
+ "name": "ਬੇਲਾਰੂਸੀ ਰੂਬਲ",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "ਬੇਲੀਜ਼ ਡਾਲਰ",
+ "symbol": "BZD"
+ },
+ "BAM": {
+ "name": "ਬੋਸਨੀਆ-ਹਰਜ਼ੇਗੋਵੀਨਾ ਬਦਲਣਯੋਗ ਮਾਰਕ",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "ਬੋਟਸਵਾਨਾ ਪà©à¨²à¨¾",
+ "symbol": "BWP"
+ },
+ "BOB": {
+ "name": "ਬੋਲੀਵੀਅਨ ਬੋਲੀਵੀਅਨੋ",
+ "symbol": "BOB"
+ },
+ "INR": {
+ "name": "ਭਾਰਤੀ ਰà©à¨ªà¨‡à¨†",
+ "symbol": "₹"
+ },
+ "BTN": {
+ "name": "ਭੂਟਾਨੀ à¨à¨‚ਗਲਟà©à¨°à¨®",
+ "symbol": "BTN"
+ },
+ "MNT": {
+ "name": "ਮੰਗੋਲੀਆਈ ਤà©à¨—ਰਿਕ",
+ "symbol": "MNT"
+ },
+ "MYR": {
+ "name": "ਮਲੇਸ਼ੀਆਈ ਰਿੰਗਿਟ",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "ਮਾਲਦੀਵੀ ਰà©à¨«à©€à¨†",
+ "symbol": "MVR"
+ },
+ "MGA": {
+ "name": "ਮਾਲਾਗਾਸੀ ਅਰਾਇਰੀ",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "ਮਾਲਾਵੀਆਈ ਕਵਾਚਾ",
+ "symbol": "MWK"
+ },
+ "MMK": {
+ "name": "ਮਿਆਂਮਾਰ ਕਿਆਤ",
+ "symbol": "MMK"
+ },
+ "EGP": {
+ "name": "ਮਿਸਰੀ ਪੌਂਡ",
+ "symbol": "EGP"
+ },
+ "MOP": {
+ "name": "ਮੇਕਾਨੀ ਪਟਾਕਾ",
+ "symbol": "MOP"
+ },
+ "MXN": {
+ "name": "ਮੈਕਸੀਕਨ ਪੇਸੋ",
+ "symbol": "MX$"
+ },
+ "MKD": {
+ "name": "ਮੈਕਡੋਨੀਆਈ ਡੇਨਾਰ",
+ "symbol": "MKD"
+ },
+ "MZN": {
+ "name": "ਮੋਜ਼ਾਮਬੀਕਨ ਮੈਟੀਕਲ",
+ "symbol": "MZN"
+ },
+ "MAD": {
+ "name": "ਮੋਰੱਕਨ ਦਿਰਹਾਮ",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "ਮੋਰਿਟਾਨੀਆਈ ਊਗੀਆ",
+ "symbol": "MRO"
+ },
+ "MDL": {
+ "name": "ਮੋਲਡੋਵਨ ਲੇਉ",
+ "symbol": "MDL"
+ },
+ "MUR": {
+ "name": "ਮੌਰਿਸ਼ੀਆਈ ਰà©à¨ªà¨‡à¨†",
+ "symbol": "MUR"
+ },
+ "YER": {
+ "name": "ਯਮਨੀ ਰਿਆਲ",
+ "symbol": "YER"
+ },
+ "USD": {
+ "name": "ਯੂ.à¨à¨¸. ਡਾਲਰ",
+ "symbol": "US$"
+ },
+ "UAH": {
+ "name": "ਯੂਕਰੇਨੀਆਈ ਰਿਵਨਿਆ",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "ਯੂਗਾਂਡੀਆਈ ਸ਼ਿਲਿੰਗ",
+ "symbol": "UGX"
+ },
+ "EUR": {
+ "name": "ਯੂਰੋ",
+ "symbol": "€"
+ },
+ "RWF": {
+ "name": "ਰਵਾਂਡਨ ਫà©à¨°à©ˆà¨‚ਕ",
+ "symbol": "RWF"
+ },
+ "RUB": {
+ "name": "ਰੂਸੀ ਰੂਬਲ",
+ "symbol": "RUB"
+ },
+ "RON": {
+ "name": "ਰੋਮਾਨੀਆਈ ਲੇਉ",
+ "symbol": "RON"
+ },
+ "LAK": {
+ "name": "ਲਾਓਟਿਆਈ ਕਿਪ",
+ "symbol": "LAK"
+ },
+ "LRD": {
+ "name": "ਲਾਈਬੀਰੀਆਈ ਡਾਲਰ",
+ "symbol": "LRD"
+ },
+ "LTL": {
+ "name": "ਲਿਥà©à¨†à¨¨à©€à¨†à¨ˆ ਲਿਤਾਸ",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "ਲੀਬੀਅਨ ਦਿਨਾਰ",
+ "symbol": "LYD"
+ },
+ "LBP": {
+ "name": "ਲੈਬਨਾਨੀ ਪੌਂਡ",
+ "symbol": "LBP"
+ },
+ "VUV": {
+ "name": "ਵਾਨੂਆਟੂ ਵਾਟੂ",
+ "symbol": "VUV"
+ },
+ "VND": {
+ "name": "ਵੀਅਤਨਾਮੀ ਡੋਂਗ",
+ "symbol": "â‚«"
+ },
+ "VEF": {
+ "name": "ਵੇਨੇਜ਼ੂà¨à¨²à¨¨ ਬੋਲੀਵਰ",
+ "symbol": "VEF"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/pl.json b/library/intl/resources/currency/pl.json
new file mode 100644
index 000000000..a83973d7a
--- /dev/null
+++ b/library/intl/resources/currency/pl.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariary malgaski",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "baht tajski",
+ "symbol": "THB"
+ },
+ "PAB": {
+ "name": "balboa panamski",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "birr etiopski",
+ "symbol": "ETB"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "VEF": {
+ "name": "boliwar wenezuelski",
+ "symbol": "VEF"
+ },
+ "GHS": {
+ "name": "cedi ghański",
+ "symbol": "GHS"
+ },
+ "CRC": {
+ "name": "colon kostarykański",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colon salwadorski",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "cordoba nikaraguańska",
+ "symbol": "NIO"
+ },
+ "GMD": {
+ "name": "dalasi gambijskie",
+ "symbol": "GMD"
+ },
+ "MKD": {
+ "name": "denar macedoński",
+ "symbol": "MKD"
+ },
+ "DZD": {
+ "name": "dinar algierski",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar bahrański",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "dinar iracki",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordański",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "dinar kuwejcki",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libijski",
+ "symbol": "LYD"
+ },
+ "RSD": {
+ "name": "dinar serbski",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunezyjski",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dirham arabski",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dirham marokański",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra Wysp Świętego Tomasza i Książęcej",
+ "symbol": "STD"
+ },
+ "USD": {
+ "name": "dolar amerykański",
+ "symbol": "USD"
+ },
+ "AUD": {
+ "name": "dolar australijski",
+ "symbol": "AUD"
+ },
+ "BSD": {
+ "name": "dolar bahamski",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "dolar Barbadosu",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "dolar belizeński",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "dolar bermudzki",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "dolar brunejski",
+ "symbol": "BND"
+ },
+ "FJD": {
+ "name": "dolar fidżi",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dolar gujański",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "dolar hongkoński",
+ "symbol": "HKD"
+ },
+ "JMD": {
+ "name": "dolar jamajski",
+ "symbol": "JMD"
+ },
+ "KYD": {
+ "name": "dolar kajmański",
+ "symbol": "KYD"
+ },
+ "CAD": {
+ "name": "dolar kanadyjski",
+ "symbol": "CAD"
+ },
+ "LRD": {
+ "name": "dolar liberyjski",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dolar namibijski",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dolar nowozelandzki",
+ "symbol": "NZD"
+ },
+ "SGD": {
+ "name": "dolar singapurski",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dolar surinamski",
+ "symbol": "SRD"
+ },
+ "TTD": {
+ "name": "dolar Trynidadu i Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "dolar wschodniokaraibski",
+ "symbol": "EC$"
+ },
+ "SBD": {
+ "name": "dolar Wysp Salomona",
+ "symbol": "SBD"
+ },
+ "ZWL": {
+ "name": "dolar Zimbabwe (2009)",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong wietnamski",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram armeński",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo zielonoprzylÄ…dkowe",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "AWG": {
+ "name": "florin arubański",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "forint węgierski",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "frank burundyjski",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "frank CFA",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "frank CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "frank CFP",
+ "symbol": "CFPF"
+ },
+ "DJF": {
+ "name": "frank dżibutyjski",
+ "symbol": "DJF"
+ },
+ "GNF": {
+ "name": "frank gwinejski",
+ "symbol": "GNF"
+ },
+ "KMF": {
+ "name": "frank komoryjski",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "frank kongijski",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "frank ruandyjski",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "frank szwajcarski",
+ "symbol": "CHF"
+ },
+ "EGP": {
+ "name": "funt egipski",
+ "symbol": "EGP"
+ },
+ "FKP": {
+ "name": "funt falklandzki",
+ "symbol": "FKP"
+ },
+ "GIP": {
+ "name": "funt gibraltarski",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "funt libański",
+ "symbol": "LBP"
+ },
+ "SSP": {
+ "name": "funt południowosudański",
+ "symbol": "SSP"
+ },
+ "SDG": {
+ "name": "funt sudański",
+ "symbol": "SDG"
+ },
+ "SYP": {
+ "name": "funt syryjski",
+ "symbol": "SYP"
+ },
+ "GBP": {
+ "name": "funt szterling",
+ "symbol": "GBP"
+ },
+ "SHP": {
+ "name": "funt Wyspy Świętej Heleny",
+ "symbol": "SHP"
+ },
+ "HTG": {
+ "name": "gourde haitańskie",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "guarani paragwajskie",
+ "symbol": "PYG"
+ },
+ "ANG": {
+ "name": "gulden antylski",
+ "symbol": "ANG"
+ },
+ "UAH": {
+ "name": "hrywna ukraińska",
+ "symbol": "UAH"
+ },
+ "JPY": {
+ "name": "jen japoński",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "juan chiński",
+ "symbol": "CNY"
+ },
+ "MMK": {
+ "name": "kiat birmański",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "kina Papua Nowa Gwinea",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip laotański",
+ "symbol": "LAK"
+ },
+ "CZK": {
+ "name": "korona czeska",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "korona duńska",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "korona islandzka",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "korona norweska",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "korona szwedzka",
+ "symbol": "SEK"
+ },
+ "HRK": {
+ "name": "kuna chorwacka",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "kwacha malawska",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kwacha zambijska",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "kwanza angolańska",
+ "symbol": "AOA"
+ },
+ "GEL": {
+ "name": "lari gruzińskie",
+ "symbol": "GEL"
+ },
+ "MDL": {
+ "name": "lej mołdawski",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "lej rumuński",
+ "symbol": "RON"
+ },
+ "ALL": {
+ "name": "lek albański",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira honduraska",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leone sierraleoński",
+ "symbol": "SLL"
+ },
+ "BGN": {
+ "name": "lew bułgarski",
+ "symbol": "BGN"
+ },
+ "SZL": {
+ "name": "lilangeni Suazi",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "lira turecka",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "lit litewski",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti Lesoto",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azerski",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turkmeński",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marka zamienna Bośni i Hercegowiny",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical mozambicki",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira nigeryjska",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa erytrejska",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "ngultrum bhutański",
+ "symbol": "BTN"
+ },
+ "TWD": {
+ "name": "nowy dolar tajwański",
+ "symbol": "TWD"
+ },
+ "PEN": {
+ "name": "nowy sol peruwiański",
+ "symbol": "PEN"
+ },
+ "ILS": {
+ "name": "nowy szekel izraelski",
+ "symbol": "ILS"
+ },
+ "MRO": {
+ "name": "ouguiya mauretańska",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "pa’anga tongijska",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca Makau",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentyńskie",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chilijskie",
+ "symbol": "CLP"
+ },
+ "DOP": {
+ "name": "peso dominikańskie",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipińskie",
+ "symbol": "PHP"
+ },
+ "COP": {
+ "name": "peso kolumbijskie",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso kubańskie",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso kubańskie wymienialne",
+ "symbol": "CUC"
+ },
+ "MXN": {
+ "name": "peso meksykańskie",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso urugwajskie",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula botswańska",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal gwatemalski",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand południowoafrykański",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brazylijski",
+ "symbol": "R$"
+ },
+ "IRR": {
+ "name": "rial irański",
+ "symbol": "IRR"
+ },
+ "YER": {
+ "name": "rial jemeński",
+ "symbol": "YER"
+ },
+ "QAR": {
+ "name": "rial katarski",
+ "symbol": "QAR"
+ },
+ "OMR": {
+ "name": "rial omański",
+ "symbol": "OMR"
+ },
+ "SAR": {
+ "name": "rial saudyjski",
+ "symbol": "SAR"
+ },
+ "KHR": {
+ "name": "riel kambodżański",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringgit malezyjski",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rubel białoruski",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rubel rosyjski",
+ "symbol": "RUB"
+ },
+ "IDR": {
+ "name": "rupia indonezyjska",
+ "symbol": "IDR"
+ },
+ "INR": {
+ "name": "rupia indyjska",
+ "symbol": "INR"
+ },
+ "LKR": {
+ "name": "rupia lankijska",
+ "symbol": "LKR"
+ },
+ "MVR": {
+ "name": "rupia malediwska",
+ "symbol": "MVR"
+ },
+ "MUR": {
+ "name": "rupia maurytyjska",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupia nepalska",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistańska",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "rupia seszelska",
+ "symbol": "SCR"
+ },
+ "KGS": {
+ "name": "som kirgiski",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "som uzbecki",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "somoni tadżyckie",
+ "symbol": "TJS"
+ },
+ "KES": {
+ "name": "szyling kenijski",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "szyling somalijski",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "szyling tanzański",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "szyling ugandyjski",
+ "symbol": "UGX"
+ },
+ "BDT": {
+ "name": "taka bengalska",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala samoańska",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazachskie",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik mongolski",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "vatu Vanuatu",
+ "symbol": "VUV"
+ },
+ "KRW": {
+ "name": "won południowokoreański",
+ "symbol": "KRW"
+ },
+ "KPW": {
+ "name": "won północnokoreański",
+ "symbol": "KPW"
+ },
+ "PLN": {
+ "name": "złoty polski",
+ "symbol": "zł"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ps.json b/library/intl/resources/currency/ps.json
new file mode 100644
index 000000000..7b16abf01
--- /dev/null
+++ b/library/intl/resources/currency/ps.json
@@ -0,0 +1,634 @@
+{
+ "AED": {
+ "name": "AED",
+ "symbol": "AED"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "AOA",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AUD": {
+ "name": "AUD",
+ "symbol": "A$"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BHD": {
+ "name": "BHD",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "BIF",
+ "symbol": "BIF"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BWP": {
+ "name": "BWP",
+ "symbol": "BWP"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CAD": {
+ "name": "CAD",
+ "symbol": "CA$"
+ },
+ "CDF": {
+ "name": "CDF",
+ "symbol": "CDF"
+ },
+ "CHF": {
+ "name": "CHF",
+ "symbol": "CHF"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "CNY",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CVE": {
+ "name": "CVE",
+ "symbol": "CVE"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DJF": {
+ "name": "DJF",
+ "symbol": "DJF"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "DZD": {
+ "name": "DZD",
+ "symbol": "DZD"
+ },
+ "EGP": {
+ "name": "EGP",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "ERN",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "ETB",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "EUR",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GBP": {
+ "name": "GBP",
+ "symbol": "£"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GMD": {
+ "name": "GMD",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "INR",
+ "symbol": "₹"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "JPY": {
+ "name": "JPY",
+ "symbol": "JPÂ¥"
+ },
+ "KES": {
+ "name": "KES",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "KMF",
+ "symbol": "KMF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LRD": {
+ "name": "LRD",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "LYD",
+ "symbol": "LYD"
+ },
+ "MAD": {
+ "name": "MAD",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MGA": {
+ "name": "MGA",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MRO": {
+ "name": "MRO",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "MWK",
+ "symbol": "MWK"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SAR": {
+ "name": "SAR",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "SDG",
+ "symbol": "SDG"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SOS",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "TND",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "TZS": {
+ "name": "TZS",
+ "symbol": "TZS"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "UGX",
+ "symbol": "UGX"
+ },
+ "USD": {
+ "name": "USD",
+ "symbol": "US$"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZAR": {
+ "name": "ZAR",
+ "symbol": "ZAR"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "AFN": {
+ "name": "اÙغانÛ",
+ "symbol": "Ø‹"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/pt-AO.json b/library/intl/resources/currency/pt-AO.json
new file mode 100644
index 000000000..844336fb4
--- /dev/null
+++ b/library/intl/resources/currency/pt-AO.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afegani do Afeganistão",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "Ariari de Madagáscar",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "Baht da Tailândia",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "Balboa do Panamá",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "Birr etíope",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "Bolívar venezuelano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "Boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "Cedi de Gana",
+ "symbol": "GHS"
+ },
+ "SVC": {
+ "name": "Colom salvadorenho",
+ "symbol": "SVC"
+ },
+ "CRC": {
+ "name": "Colon costa-riquenho",
+ "symbol": "CRC"
+ },
+ "NIO": {
+ "name": "Córdoba de ouro da Nicarágua",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "Coroa checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Coroa dinamarquesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "Coroa islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "Coroa norueguesa",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "Coroa sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "Dalasi da Gâmbia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinar baremita",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "Dinar iraquiano",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "Dinar jordaniano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "Dinar kuwaitiano",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "Dinar líbio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "Dinar macedónio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "Dinar sérvio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "Dinar tunisino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham dos Emirados Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham marroquino",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "Dobra de São Tomé e Príncipe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "Dólar australiano",
+ "symbol": "AU$"
+ },
+ "BBD": {
+ "name": "Dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Dólar belizense",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Dólar bermudense",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "Dólar bruneíno",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "Dólar canadiano",
+ "symbol": "CA$"
+ },
+ "GYD": {
+ "name": "Dólar da Guiana",
+ "symbol": "GYD"
+ },
+ "NAD": {
+ "name": "Dólar da Namíbia",
+ "symbol": "NAD"
+ },
+ "BSD": {
+ "name": "Dólar das Bahamas",
+ "symbol": "BSD"
+ },
+ "XCD": {
+ "name": "Dólar das Caraíbas Orientais",
+ "symbol": "EC$"
+ },
+ "KYD": {
+ "name": "Dólar das Ilhas Caimão",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "Dólar das Ilhas Salomão",
+ "symbol": "SBD"
+ },
+ "FJD": {
+ "name": "Dólar de Fiji",
+ "symbol": "FJD"
+ },
+ "HKD": {
+ "name": "Dólar de Hong Kong",
+ "symbol": "HK$"
+ },
+ "SGD": {
+ "name": "Dólar de Singapura",
+ "symbol": "SGD"
+ },
+ "TTD": {
+ "name": "Dólar de Trindade e Tobago",
+ "symbol": "TTD"
+ },
+ "SRD": {
+ "name": "Dólar do Suriname",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "Dólar do Zimbábue (2009)",
+ "symbol": "ZWL"
+ },
+ "USD": {
+ "name": "Dólar dos Estados Unidos",
+ "symbol": "US$"
+ },
+ "JMD": {
+ "name": "Dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "Dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NZD": {
+ "name": "Dólar neozelandês",
+ "symbol": "NZ$"
+ },
+ "VND": {
+ "name": "Dong vietnamita",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "Dram arménio",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "Escudo cabo-verdiano",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "ANG": {
+ "name": "Florim das Antilhas Holandesas",
+ "symbol": "ANG"
+ },
+ "AWG": {
+ "name": "Florim de Aruba",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "Forint húngaro",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "Franco burundiano",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Franco CFA (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Franco CFA (BEAC)",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "Franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "Franco comoriano",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Franco congolês",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "Franco guineense",
+ "symbol": "GNF"
+ },
+ "DJF": {
+ "name": "Franco jibutiano",
+ "symbol": "DJF"
+ },
+ "RWF": {
+ "name": "Franco ruandês",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Franco suíço",
+ "symbol": "CHF"
+ },
+ "HTG": {
+ "name": "Gourde haitiano",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "Guarani paraguaio",
+ "symbol": "PYG"
+ },
+ "UAH": {
+ "name": "Hryvnia da Ucrânia",
+ "symbol": "UAH"
+ },
+ "JPY": {
+ "name": "Iene japonês",
+ "symbol": "JPÂ¥"
+ },
+ "PGK": {
+ "name": "Kina da Papua-Nova Guiné",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "Kip de Laos",
+ "symbol": "LAK"
+ },
+ "HRK": {
+ "name": "Kuna croata",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "Kwacha do Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha zambiano",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza angolano",
+ "symbol": "Kz"
+ },
+ "MMK": {
+ "name": "Kyat de Mianmar",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "Lari georgiano",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "Lek albanês",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "Lempira das Honduras",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "Leone de Serra Leoa",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "Leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "Leu romeno",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "Lev búlgaro",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "Libra das Ilhas Falkland",
+ "symbol": "FKP"
+ },
+ "GIP": {
+ "name": "Libra de Gibraltar",
+ "symbol": "GIP"
+ },
+ "SHP": {
+ "name": "Libra de Santa Helena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "Libra egípcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "Libra esterlina britânica",
+ "symbol": "£"
+ },
+ "LBP": {
+ "name": "Libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "Libra síria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "Libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "Libra sul-sudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "Lilangeni da Suazilândia",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "Lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "Litas da Lituânia",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Loti do Lesoto",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "Manat do Azerbaijão",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "Manat do Turquemenistão",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "Marco bósnio-herzegóvino conversível",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "Metical de Moçambique",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira nigeriana",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa da Eritreia",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "Ngultrum do Butão",
+ "symbol": "BTN"
+ },
+ "TWD": {
+ "name": "Novo dólar taiwanês",
+ "symbol": "NT$"
+ },
+ "PEN": {
+ "name": "Novo sol peruano",
+ "symbol": "PEN"
+ },
+ "MRO": {
+ "name": "Ouguiya da Mauritânia",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "Paʻanga de Tonga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "Pataca de Macau",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "Peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "Peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "Peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "Peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "Peso cubano conversível",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "Peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "Peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "Peso mexicano",
+ "symbol": "MX$"
+ },
+ "UYU": {
+ "name": "Peso uruguaio",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "Pula de Botswana",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "Quetzal da Guatemala",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "Rand sul-africano",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "Real brasileiro",
+ "symbol": "R$"
+ },
+ "OMR": {
+ "name": "Rial de Omã",
+ "symbol": "OMR"
+ },
+ "QAR": {
+ "name": "Rial do Catar",
+ "symbol": "QAR"
+ },
+ "YER": {
+ "name": "Rial iemenita",
+ "symbol": "YER"
+ },
+ "IRR": {
+ "name": "Rial iraniano",
+ "symbol": "IRR"
+ },
+ "SAR": {
+ "name": "Rial saudita",
+ "symbol": "SAR"
+ },
+ "KHR": {
+ "name": "Riel cambojano",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "Ringgit malaio",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "Rublo bielorrusso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "Rublo russo",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "Rupia das Ilhas Maldivas",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "Rupia do Sri Lanka",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "Rupia indiana",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Rupia indonésia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "Rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "Rupia nepalesa",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "Rupia paquistanesa",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "Rupia seichelense",
+ "symbol": "SCR"
+ },
+ "ILS": {
+ "name": "Sheqel novo israelita",
+ "symbol": "₪"
+ },
+ "KGS": {
+ "name": "Som do Quirguistão",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "Som do Uzbequistão",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "Somoni do Tajaquistão",
+ "symbol": "TJS"
+ },
+ "BDT": {
+ "name": "Taka de Bangladesh",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "Tala samoano",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "Tenge do Cazaquistão",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "Tugrik da Mongólia",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "Vatu de Vanuatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "Won norte-coreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "Won sul-coreano",
+ "symbol": "â‚©"
+ },
+ "KES": {
+ "name": "Xelim queniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Xelim somali",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Xelim tanzaniano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Xelim ugandense",
+ "symbol": "UGX"
+ },
+ "CNY": {
+ "name": "Yuan chinês",
+ "symbol": "CNÂ¥"
+ },
+ "PLN": {
+ "name": "Zloti polaco",
+ "symbol": "PLN"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/pt-CV.json b/library/intl/resources/currency/pt-CV.json
new file mode 100644
index 000000000..b9dd815a0
--- /dev/null
+++ b/library/intl/resources/currency/pt-CV.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afegani do Afeganistão",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "Ariari de Madagáscar",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "Baht da Tailândia",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "Balboa do Panamá",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "Birr etíope",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "Bolívar venezuelano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "Boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "Cedi de Gana",
+ "symbol": "GHS"
+ },
+ "SVC": {
+ "name": "Colom salvadorenho",
+ "symbol": "SVC"
+ },
+ "CRC": {
+ "name": "Colon costa-riquenho",
+ "symbol": "CRC"
+ },
+ "NIO": {
+ "name": "Córdoba de ouro da Nicarágua",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "Coroa checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Coroa dinamarquesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "Coroa islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "Coroa norueguesa",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "Coroa sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "Dalasi da Gâmbia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinar baremita",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "Dinar iraquiano",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "Dinar jordaniano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "Dinar kuwaitiano",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "Dinar líbio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "Dinar macedónio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "Dinar sérvio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "Dinar tunisino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham dos Emirados Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham marroquino",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "Dobra de São Tomé e Príncipe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "Dólar australiano",
+ "symbol": "AU$"
+ },
+ "BBD": {
+ "name": "Dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Dólar belizense",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Dólar bermudense",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "Dólar bruneíno",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "Dólar canadiano",
+ "symbol": "CA$"
+ },
+ "GYD": {
+ "name": "Dólar da Guiana",
+ "symbol": "GYD"
+ },
+ "NAD": {
+ "name": "Dólar da Namíbia",
+ "symbol": "NAD"
+ },
+ "BSD": {
+ "name": "Dólar das Bahamas",
+ "symbol": "BSD"
+ },
+ "XCD": {
+ "name": "Dólar das Caraíbas Orientais",
+ "symbol": "EC$"
+ },
+ "KYD": {
+ "name": "Dólar das Ilhas Caimão",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "Dólar das Ilhas Salomão",
+ "symbol": "SBD"
+ },
+ "FJD": {
+ "name": "Dólar de Fiji",
+ "symbol": "FJD"
+ },
+ "HKD": {
+ "name": "Dólar de Hong Kong",
+ "symbol": "HK$"
+ },
+ "SGD": {
+ "name": "Dólar de Singapura",
+ "symbol": "SGD"
+ },
+ "TTD": {
+ "name": "Dólar de Trindade e Tobago",
+ "symbol": "TTD"
+ },
+ "SRD": {
+ "name": "Dólar do Suriname",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "Dólar do Zimbábue (2009)",
+ "symbol": "ZWL"
+ },
+ "USD": {
+ "name": "Dólar dos Estados Unidos",
+ "symbol": "US$"
+ },
+ "JMD": {
+ "name": "Dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "Dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NZD": {
+ "name": "Dólar neozelandês",
+ "symbol": "NZ$"
+ },
+ "VND": {
+ "name": "Dong vietnamita",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "Dram arménio",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "Escudo cabo-verdiano",
+ "symbol": "​"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "ANG": {
+ "name": "Florim das Antilhas Holandesas",
+ "symbol": "ANG"
+ },
+ "AWG": {
+ "name": "Florim de Aruba",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "Forint húngaro",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "Franco burundiano",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Franco CFA (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Franco CFA (BEAC)",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "Franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "Franco comoriano",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Franco congolês",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "Franco guineense",
+ "symbol": "GNF"
+ },
+ "DJF": {
+ "name": "Franco jibutiano",
+ "symbol": "DJF"
+ },
+ "RWF": {
+ "name": "Franco ruandês",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Franco suíço",
+ "symbol": "CHF"
+ },
+ "HTG": {
+ "name": "Gourde haitiano",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "Guarani paraguaio",
+ "symbol": "PYG"
+ },
+ "UAH": {
+ "name": "Hryvnia da Ucrânia",
+ "symbol": "UAH"
+ },
+ "JPY": {
+ "name": "Iene japonês",
+ "symbol": "JPÂ¥"
+ },
+ "PGK": {
+ "name": "Kina da Papua-Nova Guiné",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "Kip de Laos",
+ "symbol": "LAK"
+ },
+ "HRK": {
+ "name": "Kuna croata",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "Kwacha do Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha zambiano",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza angolano",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "Kyat de Mianmar",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "Lari georgiano",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "Lek albanês",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "Lempira das Honduras",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "Leone de Serra Leoa",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "Leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "Leu romeno",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "Lev búlgaro",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "Libra das Ilhas Falkland",
+ "symbol": "FKP"
+ },
+ "GIP": {
+ "name": "Libra de Gibraltar",
+ "symbol": "GIP"
+ },
+ "SHP": {
+ "name": "Libra de Santa Helena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "Libra egípcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "Libra esterlina britânica",
+ "symbol": "£"
+ },
+ "LBP": {
+ "name": "Libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "Libra síria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "Libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "Libra sul-sudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "Lilangeni da Suazilândia",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "Lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "Litas da Lituânia",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Loti do Lesoto",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "Manat do Azerbaijão",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "Manat do Turquemenistão",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "Marco bósnio-herzegóvino conversível",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "Metical de Moçambique",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira nigeriana",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa da Eritreia",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "Ngultrum do Butão",
+ "symbol": "BTN"
+ },
+ "TWD": {
+ "name": "Novo dólar taiwanês",
+ "symbol": "NT$"
+ },
+ "PEN": {
+ "name": "Novo sol peruano",
+ "symbol": "PEN"
+ },
+ "MRO": {
+ "name": "Ouguiya da Mauritânia",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "Paʻanga de Tonga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "Pataca de Macau",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "Peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "Peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "Peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "Peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "Peso cubano conversível",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "Peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "Peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "Peso mexicano",
+ "symbol": "MX$"
+ },
+ "UYU": {
+ "name": "Peso uruguaio",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "Pula de Botswana",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "Quetzal da Guatemala",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "Rand sul-africano",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "Real brasileiro",
+ "symbol": "R$"
+ },
+ "OMR": {
+ "name": "Rial de Omã",
+ "symbol": "OMR"
+ },
+ "QAR": {
+ "name": "Rial do Catar",
+ "symbol": "QAR"
+ },
+ "YER": {
+ "name": "Rial iemenita",
+ "symbol": "YER"
+ },
+ "IRR": {
+ "name": "Rial iraniano",
+ "symbol": "IRR"
+ },
+ "SAR": {
+ "name": "Rial saudita",
+ "symbol": "SAR"
+ },
+ "KHR": {
+ "name": "Riel cambojano",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "Ringgit malaio",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "Rublo bielorrusso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "Rublo russo",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "Rupia das Ilhas Maldivas",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "Rupia do Sri Lanka",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "Rupia indiana",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Rupia indonésia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "Rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "Rupia nepalesa",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "Rupia paquistanesa",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "Rupia seichelense",
+ "symbol": "SCR"
+ },
+ "ILS": {
+ "name": "Sheqel novo israelita",
+ "symbol": "₪"
+ },
+ "KGS": {
+ "name": "Som do Quirguistão",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "Som do Uzbequistão",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "Somoni do Tajaquistão",
+ "symbol": "TJS"
+ },
+ "BDT": {
+ "name": "Taka de Bangladesh",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "Tala samoano",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "Tenge do Cazaquistão",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "Tugrik da Mongólia",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "Vatu de Vanuatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "Won norte-coreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "Won sul-coreano",
+ "symbol": "â‚©"
+ },
+ "KES": {
+ "name": "Xelim queniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Xelim somali",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Xelim tanzaniano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Xelim ugandense",
+ "symbol": "UGX"
+ },
+ "CNY": {
+ "name": "Yuan chinês",
+ "symbol": "CNÂ¥"
+ },
+ "PLN": {
+ "name": "Zloti polaco",
+ "symbol": "PLN"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/pt-GW.json b/library/intl/resources/currency/pt-GW.json
new file mode 100644
index 000000000..55534de6d
--- /dev/null
+++ b/library/intl/resources/currency/pt-GW.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afegani do Afeganistão",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "Ariari de Madagáscar",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "Baht da Tailândia",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "Balboa do Panamá",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "Birr etíope",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "Bolívar venezuelano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "Boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "Cedi de Gana",
+ "symbol": "GHS"
+ },
+ "SVC": {
+ "name": "Colom salvadorenho",
+ "symbol": "SVC"
+ },
+ "CRC": {
+ "name": "Colon costa-riquenho",
+ "symbol": "CRC"
+ },
+ "NIO": {
+ "name": "Córdoba de ouro da Nicarágua",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "Coroa checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Coroa dinamarquesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "Coroa islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "Coroa norueguesa",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "Coroa sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "Dalasi da Gâmbia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinar baremita",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "Dinar iraquiano",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "Dinar jordaniano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "Dinar kuwaitiano",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "Dinar líbio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "Dinar macedónio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "Dinar sérvio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "Dinar tunisino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham dos Emirados Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham marroquino",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "Dobra de São Tomé e Príncipe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "Dólar australiano",
+ "symbol": "AU$"
+ },
+ "BBD": {
+ "name": "Dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Dólar belizense",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Dólar bermudense",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "Dólar bruneíno",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "Dólar canadiano",
+ "symbol": "CA$"
+ },
+ "GYD": {
+ "name": "Dólar da Guiana",
+ "symbol": "GYD"
+ },
+ "NAD": {
+ "name": "Dólar da Namíbia",
+ "symbol": "NAD"
+ },
+ "BSD": {
+ "name": "Dólar das Bahamas",
+ "symbol": "BSD"
+ },
+ "XCD": {
+ "name": "Dólar das Caraíbas Orientais",
+ "symbol": "EC$"
+ },
+ "KYD": {
+ "name": "Dólar das Ilhas Caimão",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "Dólar das Ilhas Salomão",
+ "symbol": "SBD"
+ },
+ "FJD": {
+ "name": "Dólar de Fiji",
+ "symbol": "FJD"
+ },
+ "HKD": {
+ "name": "Dólar de Hong Kong",
+ "symbol": "HK$"
+ },
+ "SGD": {
+ "name": "Dólar de Singapura",
+ "symbol": "SGD"
+ },
+ "TTD": {
+ "name": "Dólar de Trindade e Tobago",
+ "symbol": "TTD"
+ },
+ "SRD": {
+ "name": "Dólar do Suriname",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "Dólar do Zimbábue (2009)",
+ "symbol": "ZWL"
+ },
+ "USD": {
+ "name": "Dólar dos Estados Unidos",
+ "symbol": "US$"
+ },
+ "JMD": {
+ "name": "Dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "Dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NZD": {
+ "name": "Dólar neozelandês",
+ "symbol": "NZ$"
+ },
+ "VND": {
+ "name": "Dong vietnamita",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "Dram arménio",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "Escudo cabo-verdiano",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "ANG": {
+ "name": "Florim das Antilhas Holandesas",
+ "symbol": "ANG"
+ },
+ "AWG": {
+ "name": "Florim de Aruba",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "Forint húngaro",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "Franco burundiano",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Franco CFA (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Franco CFA (BEAC)",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "Franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "Franco comoriano",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Franco congolês",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "Franco guineense",
+ "symbol": "GNF"
+ },
+ "DJF": {
+ "name": "Franco jibutiano",
+ "symbol": "DJF"
+ },
+ "RWF": {
+ "name": "Franco ruandês",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Franco suíço",
+ "symbol": "CHF"
+ },
+ "HTG": {
+ "name": "Gourde haitiano",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "Guarani paraguaio",
+ "symbol": "PYG"
+ },
+ "UAH": {
+ "name": "Hryvnia da Ucrânia",
+ "symbol": "UAH"
+ },
+ "JPY": {
+ "name": "Iene japonês",
+ "symbol": "JPÂ¥"
+ },
+ "PGK": {
+ "name": "Kina da Papua-Nova Guiné",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "Kip de Laos",
+ "symbol": "LAK"
+ },
+ "HRK": {
+ "name": "Kuna croata",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "Kwacha do Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha zambiano",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza angolano",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "Kyat de Mianmar",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "Lari georgiano",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "Lek albanês",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "Lempira das Honduras",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "Leone de Serra Leoa",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "Leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "Leu romeno",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "Lev búlgaro",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "Libra das Ilhas Falkland",
+ "symbol": "FKP"
+ },
+ "GIP": {
+ "name": "Libra de Gibraltar",
+ "symbol": "GIP"
+ },
+ "SHP": {
+ "name": "Libra de Santa Helena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "Libra egípcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "Libra esterlina britânica",
+ "symbol": "£"
+ },
+ "LBP": {
+ "name": "Libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "Libra síria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "Libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "Libra sul-sudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "Lilangeni da Suazilândia",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "Lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "Litas da Lituânia",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Loti do Lesoto",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "Manat do Azerbaijão",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "Manat do Turquemenistão",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "Marco bósnio-herzegóvino conversível",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "Metical de Moçambique",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira nigeriana",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa da Eritreia",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "Ngultrum do Butão",
+ "symbol": "BTN"
+ },
+ "TWD": {
+ "name": "Novo dólar taiwanês",
+ "symbol": "NT$"
+ },
+ "PEN": {
+ "name": "Novo sol peruano",
+ "symbol": "PEN"
+ },
+ "MRO": {
+ "name": "Ouguiya da Mauritânia",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "Paʻanga de Tonga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "Pataca de Macau",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "Peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "Peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "Peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "Peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "Peso cubano conversível",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "Peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "Peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "Peso mexicano",
+ "symbol": "MX$"
+ },
+ "UYU": {
+ "name": "Peso uruguaio",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "Pula de Botswana",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "Quetzal da Guatemala",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "Rand sul-africano",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "Real brasileiro",
+ "symbol": "R$"
+ },
+ "OMR": {
+ "name": "Rial de Omã",
+ "symbol": "OMR"
+ },
+ "QAR": {
+ "name": "Rial do Catar",
+ "symbol": "QAR"
+ },
+ "YER": {
+ "name": "Rial iemenita",
+ "symbol": "YER"
+ },
+ "IRR": {
+ "name": "Rial iraniano",
+ "symbol": "IRR"
+ },
+ "SAR": {
+ "name": "Rial saudita",
+ "symbol": "SAR"
+ },
+ "KHR": {
+ "name": "Riel cambojano",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "Ringgit malaio",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "Rublo bielorrusso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "Rublo russo",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "Rupia das Ilhas Maldivas",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "Rupia do Sri Lanka",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "Rupia indiana",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Rupia indonésia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "Rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "Rupia nepalesa",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "Rupia paquistanesa",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "Rupia seichelense",
+ "symbol": "SCR"
+ },
+ "ILS": {
+ "name": "Sheqel novo israelita",
+ "symbol": "₪"
+ },
+ "KGS": {
+ "name": "Som do Quirguistão",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "Som do Uzbequistão",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "Somoni do Tajaquistão",
+ "symbol": "TJS"
+ },
+ "BDT": {
+ "name": "Taka de Bangladesh",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "Tala samoano",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "Tenge do Cazaquistão",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "Tugrik da Mongólia",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "Vatu de Vanuatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "Won norte-coreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "Won sul-coreano",
+ "symbol": "â‚©"
+ },
+ "KES": {
+ "name": "Xelim queniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Xelim somali",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Xelim tanzaniano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Xelim ugandense",
+ "symbol": "UGX"
+ },
+ "CNY": {
+ "name": "Yuan chinês",
+ "symbol": "CNÂ¥"
+ },
+ "PLN": {
+ "name": "Zloti polaco",
+ "symbol": "PLN"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/pt-MO.json b/library/intl/resources/currency/pt-MO.json
new file mode 100644
index 000000000..0847a2776
--- /dev/null
+++ b/library/intl/resources/currency/pt-MO.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afegani do Afeganistão",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "Ariari de Madagáscar",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "Baht da Tailândia",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "Balboa do Panamá",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "Birr etíope",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "Bolívar venezuelano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "Boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "Cedi de Gana",
+ "symbol": "GHS"
+ },
+ "SVC": {
+ "name": "Colom salvadorenho",
+ "symbol": "SVC"
+ },
+ "CRC": {
+ "name": "Colon costa-riquenho",
+ "symbol": "CRC"
+ },
+ "NIO": {
+ "name": "Córdoba de ouro da Nicarágua",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "Coroa checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Coroa dinamarquesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "Coroa islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "Coroa norueguesa",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "Coroa sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "Dalasi da Gâmbia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinar baremita",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "Dinar iraquiano",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "Dinar jordaniano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "Dinar kuwaitiano",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "Dinar líbio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "Dinar macedónio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "Dinar sérvio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "Dinar tunisino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham dos Emirados Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham marroquino",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "Dobra de São Tomé e Príncipe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "Dólar australiano",
+ "symbol": "AU$"
+ },
+ "BBD": {
+ "name": "Dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Dólar belizense",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Dólar bermudense",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "Dólar bruneíno",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "Dólar canadiano",
+ "symbol": "CA$"
+ },
+ "GYD": {
+ "name": "Dólar da Guiana",
+ "symbol": "GYD"
+ },
+ "NAD": {
+ "name": "Dólar da Namíbia",
+ "symbol": "NAD"
+ },
+ "BSD": {
+ "name": "Dólar das Bahamas",
+ "symbol": "BSD"
+ },
+ "XCD": {
+ "name": "Dólar das Caraíbas Orientais",
+ "symbol": "EC$"
+ },
+ "KYD": {
+ "name": "Dólar das Ilhas Caimão",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "Dólar das Ilhas Salomão",
+ "symbol": "SBD"
+ },
+ "FJD": {
+ "name": "Dólar de Fiji",
+ "symbol": "FJD"
+ },
+ "HKD": {
+ "name": "Dólar de Hong Kong",
+ "symbol": "HK$"
+ },
+ "SGD": {
+ "name": "Dólar de Singapura",
+ "symbol": "SGD"
+ },
+ "TTD": {
+ "name": "Dólar de Trindade e Tobago",
+ "symbol": "TTD"
+ },
+ "SRD": {
+ "name": "Dólar do Suriname",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "Dólar do Zimbábue (2009)",
+ "symbol": "ZWL"
+ },
+ "USD": {
+ "name": "Dólar dos Estados Unidos",
+ "symbol": "US$"
+ },
+ "JMD": {
+ "name": "Dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "Dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NZD": {
+ "name": "Dólar neozelandês",
+ "symbol": "NZ$"
+ },
+ "VND": {
+ "name": "Dong vietnamita",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "Dram arménio",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "Escudo cabo-verdiano",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "ANG": {
+ "name": "Florim das Antilhas Holandesas",
+ "symbol": "ANG"
+ },
+ "AWG": {
+ "name": "Florim de Aruba",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "Forint húngaro",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "Franco burundiano",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Franco CFA (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Franco CFA (BEAC)",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "Franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "Franco comoriano",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Franco congolês",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "Franco guineense",
+ "symbol": "GNF"
+ },
+ "DJF": {
+ "name": "Franco jibutiano",
+ "symbol": "DJF"
+ },
+ "RWF": {
+ "name": "Franco ruandês",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Franco suíço",
+ "symbol": "CHF"
+ },
+ "HTG": {
+ "name": "Gourde haitiano",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "Guarani paraguaio",
+ "symbol": "PYG"
+ },
+ "UAH": {
+ "name": "Hryvnia da Ucrânia",
+ "symbol": "UAH"
+ },
+ "JPY": {
+ "name": "Iene japonês",
+ "symbol": "JPÂ¥"
+ },
+ "PGK": {
+ "name": "Kina da Papua-Nova Guiné",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "Kip de Laos",
+ "symbol": "LAK"
+ },
+ "HRK": {
+ "name": "Kuna croata",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "Kwacha do Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha zambiano",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza angolano",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "Kyat de Mianmar",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "Lari georgiano",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "Lek albanês",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "Lempira das Honduras",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "Leone de Serra Leoa",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "Leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "Leu romeno",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "Lev búlgaro",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "Libra das Ilhas Falkland",
+ "symbol": "FKP"
+ },
+ "GIP": {
+ "name": "Libra de Gibraltar",
+ "symbol": "GIP"
+ },
+ "SHP": {
+ "name": "Libra de Santa Helena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "Libra egípcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "Libra esterlina britânica",
+ "symbol": "£"
+ },
+ "LBP": {
+ "name": "Libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "Libra síria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "Libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "Libra sul-sudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "Lilangeni da Suazilândia",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "Lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "Litas da Lituânia",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Loti do Lesoto",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "Manat do Azerbaijão",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "Manat do Turquemenistão",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "Marco bósnio-herzegóvino conversível",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "Metical de Moçambique",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira nigeriana",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa da Eritreia",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "Ngultrum do Butão",
+ "symbol": "BTN"
+ },
+ "TWD": {
+ "name": "Novo dólar taiwanês",
+ "symbol": "NT$"
+ },
+ "PEN": {
+ "name": "Novo sol peruano",
+ "symbol": "PEN"
+ },
+ "MRO": {
+ "name": "Ouguiya da Mauritânia",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "Paʻanga de Tonga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "Pataca de Macau",
+ "symbol": "MOP$"
+ },
+ "ARS": {
+ "name": "Peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "Peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "Peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "Peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "Peso cubano conversível",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "Peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "Peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "Peso mexicano",
+ "symbol": "MX$"
+ },
+ "UYU": {
+ "name": "Peso uruguaio",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "Pula de Botswana",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "Quetzal da Guatemala",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "Rand sul-africano",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "Real brasileiro",
+ "symbol": "R$"
+ },
+ "OMR": {
+ "name": "Rial de Omã",
+ "symbol": "OMR"
+ },
+ "QAR": {
+ "name": "Rial do Catar",
+ "symbol": "QAR"
+ },
+ "YER": {
+ "name": "Rial iemenita",
+ "symbol": "YER"
+ },
+ "IRR": {
+ "name": "Rial iraniano",
+ "symbol": "IRR"
+ },
+ "SAR": {
+ "name": "Rial saudita",
+ "symbol": "SAR"
+ },
+ "KHR": {
+ "name": "Riel cambojano",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "Ringgit malaio",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "Rublo bielorrusso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "Rublo russo",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "Rupia das Ilhas Maldivas",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "Rupia do Sri Lanka",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "Rupia indiana",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Rupia indonésia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "Rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "Rupia nepalesa",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "Rupia paquistanesa",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "Rupia seichelense",
+ "symbol": "SCR"
+ },
+ "ILS": {
+ "name": "Sheqel novo israelita",
+ "symbol": "₪"
+ },
+ "KGS": {
+ "name": "Som do Quirguistão",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "Som do Uzbequistão",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "Somoni do Tajaquistão",
+ "symbol": "TJS"
+ },
+ "BDT": {
+ "name": "Taka de Bangladesh",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "Tala samoano",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "Tenge do Cazaquistão",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "Tugrik da Mongólia",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "Vatu de Vanuatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "Won norte-coreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "Won sul-coreano",
+ "symbol": "â‚©"
+ },
+ "KES": {
+ "name": "Xelim queniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Xelim somali",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Xelim tanzaniano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Xelim ugandense",
+ "symbol": "UGX"
+ },
+ "CNY": {
+ "name": "Yuan chinês",
+ "symbol": "CNÂ¥"
+ },
+ "PLN": {
+ "name": "Zloti polaco",
+ "symbol": "PLN"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/pt-MZ.json b/library/intl/resources/currency/pt-MZ.json
new file mode 100644
index 000000000..ddc75ff04
--- /dev/null
+++ b/library/intl/resources/currency/pt-MZ.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afegani do Afeganistão",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "Ariari de Madagáscar",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "Baht da Tailândia",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "Balboa do Panamá",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "Birr etíope",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "Bolívar venezuelano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "Boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "Cedi de Gana",
+ "symbol": "GHS"
+ },
+ "SVC": {
+ "name": "Colom salvadorenho",
+ "symbol": "SVC"
+ },
+ "CRC": {
+ "name": "Colon costa-riquenho",
+ "symbol": "CRC"
+ },
+ "NIO": {
+ "name": "Córdoba de ouro da Nicarágua",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "Coroa checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Coroa dinamarquesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "Coroa islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "Coroa norueguesa",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "Coroa sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "Dalasi da Gâmbia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinar baremita",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "Dinar iraquiano",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "Dinar jordaniano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "Dinar kuwaitiano",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "Dinar líbio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "Dinar macedónio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "Dinar sérvio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "Dinar tunisino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham dos Emirados Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham marroquino",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "Dobra de São Tomé e Príncipe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "Dólar australiano",
+ "symbol": "AU$"
+ },
+ "BBD": {
+ "name": "Dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Dólar belizense",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Dólar bermudense",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "Dólar bruneíno",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "Dólar canadiano",
+ "symbol": "CA$"
+ },
+ "GYD": {
+ "name": "Dólar da Guiana",
+ "symbol": "GYD"
+ },
+ "NAD": {
+ "name": "Dólar da Namíbia",
+ "symbol": "NAD"
+ },
+ "BSD": {
+ "name": "Dólar das Bahamas",
+ "symbol": "BSD"
+ },
+ "XCD": {
+ "name": "Dólar das Caraíbas Orientais",
+ "symbol": "EC$"
+ },
+ "KYD": {
+ "name": "Dólar das Ilhas Caimão",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "Dólar das Ilhas Salomão",
+ "symbol": "SBD"
+ },
+ "FJD": {
+ "name": "Dólar de Fiji",
+ "symbol": "FJD"
+ },
+ "HKD": {
+ "name": "Dólar de Hong Kong",
+ "symbol": "HK$"
+ },
+ "SGD": {
+ "name": "Dólar de Singapura",
+ "symbol": "SGD"
+ },
+ "TTD": {
+ "name": "Dólar de Trindade e Tobago",
+ "symbol": "TTD"
+ },
+ "SRD": {
+ "name": "Dólar do Suriname",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "Dólar do Zimbábue (2009)",
+ "symbol": "ZWL"
+ },
+ "USD": {
+ "name": "Dólar dos Estados Unidos",
+ "symbol": "US$"
+ },
+ "JMD": {
+ "name": "Dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "Dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NZD": {
+ "name": "Dólar neozelandês",
+ "symbol": "NZ$"
+ },
+ "VND": {
+ "name": "Dong vietnamita",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "Dram arménio",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "Escudo cabo-verdiano",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "ANG": {
+ "name": "Florim das Antilhas Holandesas",
+ "symbol": "ANG"
+ },
+ "AWG": {
+ "name": "Florim de Aruba",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "Forint húngaro",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "Franco burundiano",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Franco CFA (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Franco CFA (BEAC)",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "Franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "Franco comoriano",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Franco congolês",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "Franco guineense",
+ "symbol": "GNF"
+ },
+ "DJF": {
+ "name": "Franco jibutiano",
+ "symbol": "DJF"
+ },
+ "RWF": {
+ "name": "Franco ruandês",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Franco suíço",
+ "symbol": "CHF"
+ },
+ "HTG": {
+ "name": "Gourde haitiano",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "Guarani paraguaio",
+ "symbol": "PYG"
+ },
+ "UAH": {
+ "name": "Hryvnia da Ucrânia",
+ "symbol": "UAH"
+ },
+ "JPY": {
+ "name": "Iene japonês",
+ "symbol": "JPÂ¥"
+ },
+ "PGK": {
+ "name": "Kina da Papua-Nova Guiné",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "Kip de Laos",
+ "symbol": "LAK"
+ },
+ "HRK": {
+ "name": "Kuna croata",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "Kwacha do Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha zambiano",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza angolano",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "Kyat de Mianmar",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "Lari georgiano",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "Lek albanês",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "Lempira das Honduras",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "Leone de Serra Leoa",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "Leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "Leu romeno",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "Lev búlgaro",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "Libra das Ilhas Falkland",
+ "symbol": "FKP"
+ },
+ "GIP": {
+ "name": "Libra de Gibraltar",
+ "symbol": "GIP"
+ },
+ "SHP": {
+ "name": "Libra de Santa Helena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "Libra egípcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "Libra esterlina britânica",
+ "symbol": "£"
+ },
+ "LBP": {
+ "name": "Libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "Libra síria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "Libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "Libra sul-sudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "Lilangeni da Suazilândia",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "Lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "Litas da Lituânia",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Loti do Lesoto",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "Manat do Azerbaijão",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "Manat do Turquemenistão",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "Marco bósnio-herzegóvino conversível",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "Metical de Moçambique",
+ "symbol": "MTn"
+ },
+ "NGN": {
+ "name": "Naira nigeriana",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa da Eritreia",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "Ngultrum do Butão",
+ "symbol": "BTN"
+ },
+ "TWD": {
+ "name": "Novo dólar taiwanês",
+ "symbol": "NT$"
+ },
+ "PEN": {
+ "name": "Novo sol peruano",
+ "symbol": "PEN"
+ },
+ "MRO": {
+ "name": "Ouguiya da Mauritânia",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "Paʻanga de Tonga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "Pataca de Macau",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "Peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "Peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "Peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "Peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "Peso cubano conversível",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "Peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "Peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "Peso mexicano",
+ "symbol": "MX$"
+ },
+ "UYU": {
+ "name": "Peso uruguaio",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "Pula de Botswana",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "Quetzal da Guatemala",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "Rand sul-africano",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "Real brasileiro",
+ "symbol": "R$"
+ },
+ "OMR": {
+ "name": "Rial de Omã",
+ "symbol": "OMR"
+ },
+ "QAR": {
+ "name": "Rial do Catar",
+ "symbol": "QAR"
+ },
+ "YER": {
+ "name": "Rial iemenita",
+ "symbol": "YER"
+ },
+ "IRR": {
+ "name": "Rial iraniano",
+ "symbol": "IRR"
+ },
+ "SAR": {
+ "name": "Rial saudita",
+ "symbol": "SAR"
+ },
+ "KHR": {
+ "name": "Riel cambojano",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "Ringgit malaio",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "Rublo bielorrusso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "Rublo russo",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "Rupia das Ilhas Maldivas",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "Rupia do Sri Lanka",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "Rupia indiana",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Rupia indonésia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "Rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "Rupia nepalesa",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "Rupia paquistanesa",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "Rupia seichelense",
+ "symbol": "SCR"
+ },
+ "ILS": {
+ "name": "Sheqel novo israelita",
+ "symbol": "₪"
+ },
+ "KGS": {
+ "name": "Som do Quirguistão",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "Som do Uzbequistão",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "Somoni do Tajaquistão",
+ "symbol": "TJS"
+ },
+ "BDT": {
+ "name": "Taka de Bangladesh",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "Tala samoano",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "Tenge do Cazaquistão",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "Tugrik da Mongólia",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "Vatu de Vanuatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "Won norte-coreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "Won sul-coreano",
+ "symbol": "â‚©"
+ },
+ "KES": {
+ "name": "Xelim queniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Xelim somali",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Xelim tanzaniano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Xelim ugandense",
+ "symbol": "UGX"
+ },
+ "CNY": {
+ "name": "Yuan chinês",
+ "symbol": "CNÂ¥"
+ },
+ "PLN": {
+ "name": "Zloti polaco",
+ "symbol": "PLN"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/pt-PT.json b/library/intl/resources/currency/pt-PT.json
new file mode 100644
index 000000000..55534de6d
--- /dev/null
+++ b/library/intl/resources/currency/pt-PT.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afegani do Afeganistão",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "Ariari de Madagáscar",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "Baht da Tailândia",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "Balboa do Panamá",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "Birr etíope",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "Bolívar venezuelano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "Boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "Cedi de Gana",
+ "symbol": "GHS"
+ },
+ "SVC": {
+ "name": "Colom salvadorenho",
+ "symbol": "SVC"
+ },
+ "CRC": {
+ "name": "Colon costa-riquenho",
+ "symbol": "CRC"
+ },
+ "NIO": {
+ "name": "Córdoba de ouro da Nicarágua",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "Coroa checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Coroa dinamarquesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "Coroa islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "Coroa norueguesa",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "Coroa sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "Dalasi da Gâmbia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinar baremita",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "Dinar iraquiano",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "Dinar jordaniano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "Dinar kuwaitiano",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "Dinar líbio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "Dinar macedónio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "Dinar sérvio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "Dinar tunisino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham dos Emirados Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham marroquino",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "Dobra de São Tomé e Príncipe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "Dólar australiano",
+ "symbol": "AU$"
+ },
+ "BBD": {
+ "name": "Dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Dólar belizense",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Dólar bermudense",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "Dólar bruneíno",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "Dólar canadiano",
+ "symbol": "CA$"
+ },
+ "GYD": {
+ "name": "Dólar da Guiana",
+ "symbol": "GYD"
+ },
+ "NAD": {
+ "name": "Dólar da Namíbia",
+ "symbol": "NAD"
+ },
+ "BSD": {
+ "name": "Dólar das Bahamas",
+ "symbol": "BSD"
+ },
+ "XCD": {
+ "name": "Dólar das Caraíbas Orientais",
+ "symbol": "EC$"
+ },
+ "KYD": {
+ "name": "Dólar das Ilhas Caimão",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "Dólar das Ilhas Salomão",
+ "symbol": "SBD"
+ },
+ "FJD": {
+ "name": "Dólar de Fiji",
+ "symbol": "FJD"
+ },
+ "HKD": {
+ "name": "Dólar de Hong Kong",
+ "symbol": "HK$"
+ },
+ "SGD": {
+ "name": "Dólar de Singapura",
+ "symbol": "SGD"
+ },
+ "TTD": {
+ "name": "Dólar de Trindade e Tobago",
+ "symbol": "TTD"
+ },
+ "SRD": {
+ "name": "Dólar do Suriname",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "Dólar do Zimbábue (2009)",
+ "symbol": "ZWL"
+ },
+ "USD": {
+ "name": "Dólar dos Estados Unidos",
+ "symbol": "US$"
+ },
+ "JMD": {
+ "name": "Dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "Dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NZD": {
+ "name": "Dólar neozelandês",
+ "symbol": "NZ$"
+ },
+ "VND": {
+ "name": "Dong vietnamita",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "Dram arménio",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "Escudo cabo-verdiano",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "ANG": {
+ "name": "Florim das Antilhas Holandesas",
+ "symbol": "ANG"
+ },
+ "AWG": {
+ "name": "Florim de Aruba",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "Forint húngaro",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "Franco burundiano",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Franco CFA (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Franco CFA (BEAC)",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "Franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "Franco comoriano",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Franco congolês",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "Franco guineense",
+ "symbol": "GNF"
+ },
+ "DJF": {
+ "name": "Franco jibutiano",
+ "symbol": "DJF"
+ },
+ "RWF": {
+ "name": "Franco ruandês",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Franco suíço",
+ "symbol": "CHF"
+ },
+ "HTG": {
+ "name": "Gourde haitiano",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "Guarani paraguaio",
+ "symbol": "PYG"
+ },
+ "UAH": {
+ "name": "Hryvnia da Ucrânia",
+ "symbol": "UAH"
+ },
+ "JPY": {
+ "name": "Iene japonês",
+ "symbol": "JPÂ¥"
+ },
+ "PGK": {
+ "name": "Kina da Papua-Nova Guiné",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "Kip de Laos",
+ "symbol": "LAK"
+ },
+ "HRK": {
+ "name": "Kuna croata",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "Kwacha do Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha zambiano",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza angolano",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "Kyat de Mianmar",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "Lari georgiano",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "Lek albanês",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "Lempira das Honduras",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "Leone de Serra Leoa",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "Leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "Leu romeno",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "Lev búlgaro",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "Libra das Ilhas Falkland",
+ "symbol": "FKP"
+ },
+ "GIP": {
+ "name": "Libra de Gibraltar",
+ "symbol": "GIP"
+ },
+ "SHP": {
+ "name": "Libra de Santa Helena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "Libra egípcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "Libra esterlina britânica",
+ "symbol": "£"
+ },
+ "LBP": {
+ "name": "Libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "Libra síria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "Libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "Libra sul-sudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "Lilangeni da Suazilândia",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "Lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "Litas da Lituânia",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Loti do Lesoto",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "Manat do Azerbaijão",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "Manat do Turquemenistão",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "Marco bósnio-herzegóvino conversível",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "Metical de Moçambique",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira nigeriana",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa da Eritreia",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "Ngultrum do Butão",
+ "symbol": "BTN"
+ },
+ "TWD": {
+ "name": "Novo dólar taiwanês",
+ "symbol": "NT$"
+ },
+ "PEN": {
+ "name": "Novo sol peruano",
+ "symbol": "PEN"
+ },
+ "MRO": {
+ "name": "Ouguiya da Mauritânia",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "Paʻanga de Tonga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "Pataca de Macau",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "Peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "Peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "Peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "Peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "Peso cubano conversível",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "Peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "Peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "Peso mexicano",
+ "symbol": "MX$"
+ },
+ "UYU": {
+ "name": "Peso uruguaio",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "Pula de Botswana",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "Quetzal da Guatemala",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "Rand sul-africano",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "Real brasileiro",
+ "symbol": "R$"
+ },
+ "OMR": {
+ "name": "Rial de Omã",
+ "symbol": "OMR"
+ },
+ "QAR": {
+ "name": "Rial do Catar",
+ "symbol": "QAR"
+ },
+ "YER": {
+ "name": "Rial iemenita",
+ "symbol": "YER"
+ },
+ "IRR": {
+ "name": "Rial iraniano",
+ "symbol": "IRR"
+ },
+ "SAR": {
+ "name": "Rial saudita",
+ "symbol": "SAR"
+ },
+ "KHR": {
+ "name": "Riel cambojano",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "Ringgit malaio",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "Rublo bielorrusso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "Rublo russo",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "Rupia das Ilhas Maldivas",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "Rupia do Sri Lanka",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "Rupia indiana",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Rupia indonésia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "Rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "Rupia nepalesa",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "Rupia paquistanesa",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "Rupia seichelense",
+ "symbol": "SCR"
+ },
+ "ILS": {
+ "name": "Sheqel novo israelita",
+ "symbol": "₪"
+ },
+ "KGS": {
+ "name": "Som do Quirguistão",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "Som do Uzbequistão",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "Somoni do Tajaquistão",
+ "symbol": "TJS"
+ },
+ "BDT": {
+ "name": "Taka de Bangladesh",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "Tala samoano",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "Tenge do Cazaquistão",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "Tugrik da Mongólia",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "Vatu de Vanuatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "Won norte-coreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "Won sul-coreano",
+ "symbol": "â‚©"
+ },
+ "KES": {
+ "name": "Xelim queniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Xelim somali",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Xelim tanzaniano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Xelim ugandense",
+ "symbol": "UGX"
+ },
+ "CNY": {
+ "name": "Yuan chinês",
+ "symbol": "CNÂ¥"
+ },
+ "PLN": {
+ "name": "Zloti polaco",
+ "symbol": "PLN"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/pt-ST.json b/library/intl/resources/currency/pt-ST.json
new file mode 100644
index 000000000..b43b0f85a
--- /dev/null
+++ b/library/intl/resources/currency/pt-ST.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afegani do Afeganistão",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "Ariari de Madagáscar",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "Baht da Tailândia",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "Balboa do Panamá",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "Birr etíope",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "Bolívar venezuelano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "Boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "Cedi de Gana",
+ "symbol": "GHS"
+ },
+ "SVC": {
+ "name": "Colom salvadorenho",
+ "symbol": "SVC"
+ },
+ "CRC": {
+ "name": "Colon costa-riquenho",
+ "symbol": "CRC"
+ },
+ "NIO": {
+ "name": "Córdoba de ouro da Nicarágua",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "Coroa checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Coroa dinamarquesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "Coroa islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "Coroa norueguesa",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "Coroa sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "Dalasi da Gâmbia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinar baremita",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "Dinar iraquiano",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "Dinar jordaniano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "Dinar kuwaitiano",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "Dinar líbio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "Dinar macedónio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "Dinar sérvio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "Dinar tunisino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham dos Emirados Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham marroquino",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "Dobra de São Tomé e Príncipe",
+ "symbol": "Db"
+ },
+ "AUD": {
+ "name": "Dólar australiano",
+ "symbol": "AU$"
+ },
+ "BBD": {
+ "name": "Dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Dólar belizense",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Dólar bermudense",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "Dólar bruneíno",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "Dólar canadiano",
+ "symbol": "CA$"
+ },
+ "GYD": {
+ "name": "Dólar da Guiana",
+ "symbol": "GYD"
+ },
+ "NAD": {
+ "name": "Dólar da Namíbia",
+ "symbol": "NAD"
+ },
+ "BSD": {
+ "name": "Dólar das Bahamas",
+ "symbol": "BSD"
+ },
+ "XCD": {
+ "name": "Dólar das Caraíbas Orientais",
+ "symbol": "EC$"
+ },
+ "KYD": {
+ "name": "Dólar das Ilhas Caimão",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "Dólar das Ilhas Salomão",
+ "symbol": "SBD"
+ },
+ "FJD": {
+ "name": "Dólar de Fiji",
+ "symbol": "FJD"
+ },
+ "HKD": {
+ "name": "Dólar de Hong Kong",
+ "symbol": "HK$"
+ },
+ "SGD": {
+ "name": "Dólar de Singapura",
+ "symbol": "SGD"
+ },
+ "TTD": {
+ "name": "Dólar de Trindade e Tobago",
+ "symbol": "TTD"
+ },
+ "SRD": {
+ "name": "Dólar do Suriname",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "Dólar do Zimbábue (2009)",
+ "symbol": "ZWL"
+ },
+ "USD": {
+ "name": "Dólar dos Estados Unidos",
+ "symbol": "US$"
+ },
+ "JMD": {
+ "name": "Dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "Dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NZD": {
+ "name": "Dólar neozelandês",
+ "symbol": "NZ$"
+ },
+ "VND": {
+ "name": "Dong vietnamita",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "Dram arménio",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "Escudo cabo-verdiano",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "ANG": {
+ "name": "Florim das Antilhas Holandesas",
+ "symbol": "ANG"
+ },
+ "AWG": {
+ "name": "Florim de Aruba",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "Forint húngaro",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "Franco burundiano",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Franco CFA (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Franco CFA (BEAC)",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "Franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "Franco comoriano",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Franco congolês",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "Franco guineense",
+ "symbol": "GNF"
+ },
+ "DJF": {
+ "name": "Franco jibutiano",
+ "symbol": "DJF"
+ },
+ "RWF": {
+ "name": "Franco ruandês",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Franco suíço",
+ "symbol": "CHF"
+ },
+ "HTG": {
+ "name": "Gourde haitiano",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "Guarani paraguaio",
+ "symbol": "PYG"
+ },
+ "UAH": {
+ "name": "Hryvnia da Ucrânia",
+ "symbol": "UAH"
+ },
+ "JPY": {
+ "name": "Iene japonês",
+ "symbol": "JPÂ¥"
+ },
+ "PGK": {
+ "name": "Kina da Papua-Nova Guiné",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "Kip de Laos",
+ "symbol": "LAK"
+ },
+ "HRK": {
+ "name": "Kuna croata",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "Kwacha do Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha zambiano",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza angolano",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "Kyat de Mianmar",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "Lari georgiano",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "Lek albanês",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "Lempira das Honduras",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "Leone de Serra Leoa",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "Leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "Leu romeno",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "Lev búlgaro",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "Libra das Ilhas Falkland",
+ "symbol": "FKP"
+ },
+ "GIP": {
+ "name": "Libra de Gibraltar",
+ "symbol": "GIP"
+ },
+ "SHP": {
+ "name": "Libra de Santa Helena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "Libra egípcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "Libra esterlina britânica",
+ "symbol": "£"
+ },
+ "LBP": {
+ "name": "Libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "Libra síria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "Libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "Libra sul-sudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "Lilangeni da Suazilândia",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "Lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "Litas da Lituânia",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Loti do Lesoto",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "Manat do Azerbaijão",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "Manat do Turquemenistão",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "Marco bósnio-herzegóvino conversível",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "Metical de Moçambique",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira nigeriana",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa da Eritreia",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "Ngultrum do Butão",
+ "symbol": "BTN"
+ },
+ "TWD": {
+ "name": "Novo dólar taiwanês",
+ "symbol": "NT$"
+ },
+ "PEN": {
+ "name": "Novo sol peruano",
+ "symbol": "PEN"
+ },
+ "MRO": {
+ "name": "Ouguiya da Mauritânia",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "Paʻanga de Tonga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "Pataca de Macau",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "Peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "Peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "Peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "Peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "Peso cubano conversível",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "Peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "Peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "Peso mexicano",
+ "symbol": "MX$"
+ },
+ "UYU": {
+ "name": "Peso uruguaio",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "Pula de Botswana",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "Quetzal da Guatemala",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "Rand sul-africano",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "Real brasileiro",
+ "symbol": "R$"
+ },
+ "OMR": {
+ "name": "Rial de Omã",
+ "symbol": "OMR"
+ },
+ "QAR": {
+ "name": "Rial do Catar",
+ "symbol": "QAR"
+ },
+ "YER": {
+ "name": "Rial iemenita",
+ "symbol": "YER"
+ },
+ "IRR": {
+ "name": "Rial iraniano",
+ "symbol": "IRR"
+ },
+ "SAR": {
+ "name": "Rial saudita",
+ "symbol": "SAR"
+ },
+ "KHR": {
+ "name": "Riel cambojano",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "Ringgit malaio",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "Rublo bielorrusso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "Rublo russo",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "Rupia das Ilhas Maldivas",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "Rupia do Sri Lanka",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "Rupia indiana",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Rupia indonésia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "Rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "Rupia nepalesa",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "Rupia paquistanesa",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "Rupia seichelense",
+ "symbol": "SCR"
+ },
+ "ILS": {
+ "name": "Sheqel novo israelita",
+ "symbol": "₪"
+ },
+ "KGS": {
+ "name": "Som do Quirguistão",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "Som do Uzbequistão",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "Somoni do Tajaquistão",
+ "symbol": "TJS"
+ },
+ "BDT": {
+ "name": "Taka de Bangladesh",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "Tala samoano",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "Tenge do Cazaquistão",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "Tugrik da Mongólia",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "Vatu de Vanuatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "Won norte-coreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "Won sul-coreano",
+ "symbol": "â‚©"
+ },
+ "KES": {
+ "name": "Xelim queniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Xelim somali",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Xelim tanzaniano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Xelim ugandense",
+ "symbol": "UGX"
+ },
+ "CNY": {
+ "name": "Yuan chinês",
+ "symbol": "CNÂ¥"
+ },
+ "PLN": {
+ "name": "Zloti polaco",
+ "symbol": "PLN"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/pt-TL.json b/library/intl/resources/currency/pt-TL.json
new file mode 100644
index 000000000..55534de6d
--- /dev/null
+++ b/library/intl/resources/currency/pt-TL.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afegani do Afeganistão",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "Ariari de Madagáscar",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "Baht da Tailândia",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "Balboa do Panamá",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "Birr etíope",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "Bolívar venezuelano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "Boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "Cedi de Gana",
+ "symbol": "GHS"
+ },
+ "SVC": {
+ "name": "Colom salvadorenho",
+ "symbol": "SVC"
+ },
+ "CRC": {
+ "name": "Colon costa-riquenho",
+ "symbol": "CRC"
+ },
+ "NIO": {
+ "name": "Córdoba de ouro da Nicarágua",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "Coroa checa",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "Coroa dinamarquesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "Coroa islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "Coroa norueguesa",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "Coroa sueca",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "Dalasi da Gâmbia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinar baremita",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "Dinar iraquiano",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "Dinar jordaniano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "Dinar kuwaitiano",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "Dinar líbio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "Dinar macedónio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "Dinar sérvio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "Dinar tunisino",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham dos Emirados Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham marroquino",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "Dobra de São Tomé e Príncipe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "Dólar australiano",
+ "symbol": "AU$"
+ },
+ "BBD": {
+ "name": "Dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Dólar belizense",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Dólar bermudense",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "Dólar bruneíno",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "Dólar canadiano",
+ "symbol": "CA$"
+ },
+ "GYD": {
+ "name": "Dólar da Guiana",
+ "symbol": "GYD"
+ },
+ "NAD": {
+ "name": "Dólar da Namíbia",
+ "symbol": "NAD"
+ },
+ "BSD": {
+ "name": "Dólar das Bahamas",
+ "symbol": "BSD"
+ },
+ "XCD": {
+ "name": "Dólar das Caraíbas Orientais",
+ "symbol": "EC$"
+ },
+ "KYD": {
+ "name": "Dólar das Ilhas Caimão",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "Dólar das Ilhas Salomão",
+ "symbol": "SBD"
+ },
+ "FJD": {
+ "name": "Dólar de Fiji",
+ "symbol": "FJD"
+ },
+ "HKD": {
+ "name": "Dólar de Hong Kong",
+ "symbol": "HK$"
+ },
+ "SGD": {
+ "name": "Dólar de Singapura",
+ "symbol": "SGD"
+ },
+ "TTD": {
+ "name": "Dólar de Trindade e Tobago",
+ "symbol": "TTD"
+ },
+ "SRD": {
+ "name": "Dólar do Suriname",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "Dólar do Zimbábue (2009)",
+ "symbol": "ZWL"
+ },
+ "USD": {
+ "name": "Dólar dos Estados Unidos",
+ "symbol": "US$"
+ },
+ "JMD": {
+ "name": "Dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "Dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NZD": {
+ "name": "Dólar neozelandês",
+ "symbol": "NZ$"
+ },
+ "VND": {
+ "name": "Dong vietnamita",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "Dram arménio",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "Escudo cabo-verdiano",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "ANG": {
+ "name": "Florim das Antilhas Holandesas",
+ "symbol": "ANG"
+ },
+ "AWG": {
+ "name": "Florim de Aruba",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "Forint húngaro",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "Franco burundiano",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Franco CFA (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Franco CFA (BEAC)",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "Franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "Franco comoriano",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Franco congolês",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "Franco guineense",
+ "symbol": "GNF"
+ },
+ "DJF": {
+ "name": "Franco jibutiano",
+ "symbol": "DJF"
+ },
+ "RWF": {
+ "name": "Franco ruandês",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Franco suíço",
+ "symbol": "CHF"
+ },
+ "HTG": {
+ "name": "Gourde haitiano",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "Guarani paraguaio",
+ "symbol": "PYG"
+ },
+ "UAH": {
+ "name": "Hryvnia da Ucrânia",
+ "symbol": "UAH"
+ },
+ "JPY": {
+ "name": "Iene japonês",
+ "symbol": "JPÂ¥"
+ },
+ "PGK": {
+ "name": "Kina da Papua-Nova Guiné",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "Kip de Laos",
+ "symbol": "LAK"
+ },
+ "HRK": {
+ "name": "Kuna croata",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "Kwacha do Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha zambiano",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza angolano",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "Kyat de Mianmar",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "Lari georgiano",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "Lek albanês",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "Lempira das Honduras",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "Leone de Serra Leoa",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "Leu moldavo",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "Leu romeno",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "Lev búlgaro",
+ "symbol": "BGN"
+ },
+ "FKP": {
+ "name": "Libra das Ilhas Falkland",
+ "symbol": "FKP"
+ },
+ "GIP": {
+ "name": "Libra de Gibraltar",
+ "symbol": "GIP"
+ },
+ "SHP": {
+ "name": "Libra de Santa Helena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "Libra egípcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "Libra esterlina britânica",
+ "symbol": "£"
+ },
+ "LBP": {
+ "name": "Libra libanesa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "Libra síria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "Libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "Libra sul-sudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "Lilangeni da Suazilândia",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "Lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "Litas da Lituânia",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Loti do Lesoto",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "Manat do Azerbaijão",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "Manat do Turquemenistão",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "Marco bósnio-herzegóvino conversível",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "Metical de Moçambique",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira nigeriana",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa da Eritreia",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "Ngultrum do Butão",
+ "symbol": "BTN"
+ },
+ "TWD": {
+ "name": "Novo dólar taiwanês",
+ "symbol": "NT$"
+ },
+ "PEN": {
+ "name": "Novo sol peruano",
+ "symbol": "PEN"
+ },
+ "MRO": {
+ "name": "Ouguiya da Mauritânia",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "Paʻanga de Tonga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "Pataca de Macau",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "Peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "Peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "Peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "Peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "Peso cubano conversível",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "Peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "Peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "Peso mexicano",
+ "symbol": "MX$"
+ },
+ "UYU": {
+ "name": "Peso uruguaio",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "Pula de Botswana",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "Quetzal da Guatemala",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "Rand sul-africano",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "Real brasileiro",
+ "symbol": "R$"
+ },
+ "OMR": {
+ "name": "Rial de Omã",
+ "symbol": "OMR"
+ },
+ "QAR": {
+ "name": "Rial do Catar",
+ "symbol": "QAR"
+ },
+ "YER": {
+ "name": "Rial iemenita",
+ "symbol": "YER"
+ },
+ "IRR": {
+ "name": "Rial iraniano",
+ "symbol": "IRR"
+ },
+ "SAR": {
+ "name": "Rial saudita",
+ "symbol": "SAR"
+ },
+ "KHR": {
+ "name": "Riel cambojano",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "Ringgit malaio",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "Rublo bielorrusso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "Rublo russo",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "Rupia das Ilhas Maldivas",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "Rupia do Sri Lanka",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "Rupia indiana",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Rupia indonésia",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "Rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "Rupia nepalesa",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "Rupia paquistanesa",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "Rupia seichelense",
+ "symbol": "SCR"
+ },
+ "ILS": {
+ "name": "Sheqel novo israelita",
+ "symbol": "₪"
+ },
+ "KGS": {
+ "name": "Som do Quirguistão",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "Som do Uzbequistão",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "Somoni do Tajaquistão",
+ "symbol": "TJS"
+ },
+ "BDT": {
+ "name": "Taka de Bangladesh",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "Tala samoano",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "Tenge do Cazaquistão",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "Tugrik da Mongólia",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "Vatu de Vanuatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "Won norte-coreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "Won sul-coreano",
+ "symbol": "â‚©"
+ },
+ "KES": {
+ "name": "Xelim queniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Xelim somali",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Xelim tanzaniano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Xelim ugandense",
+ "symbol": "UGX"
+ },
+ "CNY": {
+ "name": "Yuan chinês",
+ "symbol": "CNÂ¥"
+ },
+ "PLN": {
+ "name": "Zloti polaco",
+ "symbol": "PLN"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/pt.json b/library/intl/resources/currency/pt.json
new file mode 100644
index 000000000..a884a1b21
--- /dev/null
+++ b/library/intl/resources/currency/pt.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afegane afegão",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "Ariary malgaxe",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "Baht tailandês",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "Balboa panamenha",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "Birr etíope",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "Bolívar venezuelano",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "Boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "Cedi ganês",
+ "symbol": "GHS"
+ },
+ "SVC": {
+ "name": "Colom salvadorenho",
+ "symbol": "SVC"
+ },
+ "CRC": {
+ "name": "Colón costarriquenho",
+ "symbol": "CRC"
+ },
+ "NIO": {
+ "name": "Córdoba nicaraguense",
+ "symbol": "NIO"
+ },
+ "DKK": {
+ "name": "Coroa dinamarquesa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "Coroa islandesa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "Coroa norueguesa",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "Coroa sueca",
+ "symbol": "SEK"
+ },
+ "CZK": {
+ "name": "Coroa tcheca",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi gambiano",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinar bareinita",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "Dinar iraquiano",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "Dinar jordaniano",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "Dinar kuwaitiano",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "Dinar líbio",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "Dinar macedônio",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "Dinar sérvio",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "Dinar tunisiano",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirrã dos Emirados Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirrã marroquino",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "Dobra de São Tomé e Príncipe",
+ "symbol": "STD"
+ },
+ "USD": {
+ "name": "Dólar americano",
+ "symbol": "US$"
+ },
+ "AUD": {
+ "name": "Dólar australiano",
+ "symbol": "AU$"
+ },
+ "BSD": {
+ "name": "Dólar bahamense",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "Dólar barbadense",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Dólar belizenho",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Dólar bermudense",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "Dólar bruneano",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "Dólar canadense",
+ "symbol": "CA$"
+ },
+ "KYD": {
+ "name": "Dólar das Ilhas Caiman",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "Dólar das Ilhas Salomão",
+ "symbol": "SBD"
+ },
+ "HKD": {
+ "name": "Dólar de Hong Kong",
+ "symbol": "HK$"
+ },
+ "TTD": {
+ "name": "Dólar de Trinidad e Tobago",
+ "symbol": "TTD"
+ },
+ "XCD": {
+ "name": "Dólar do Caribe Oriental",
+ "symbol": "EC$"
+ },
+ "ZWL": {
+ "name": "Dólar do Zimbábue (2009)",
+ "symbol": "ZWL"
+ },
+ "FJD": {
+ "name": "Dólar fijiano",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "Dólar guianense",
+ "symbol": "GYD"
+ },
+ "JMD": {
+ "name": "Dólar jamaicano",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "Dólar liberiano",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Dólar namibiano",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "Dólar neozelandês",
+ "symbol": "NZ$"
+ },
+ "SGD": {
+ "name": "Dólar singapuriano",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "Dólar surinamês",
+ "symbol": "SRD"
+ },
+ "VND": {
+ "name": "Dong vietnamita",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "Dram armênio",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "Escudo cabo-verdiano",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "AWG": {
+ "name": "Florim arubano",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "Florim das Antilhas Holandesas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "Forint húngaro",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "Franco burundiano",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Franco CFA de BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Franco CFA de BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "Franco CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "Franco comorense",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Franco congolês",
+ "symbol": "CDF"
+ },
+ "DJF": {
+ "name": "Franco djibutiense",
+ "symbol": "DJF"
+ },
+ "GNF": {
+ "name": "Franco guineano",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "Franco ruandês",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Franco suíço",
+ "symbol": "CHF"
+ },
+ "HTG": {
+ "name": "Gourde haitiano",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "Guarani paraguaio",
+ "symbol": "PYG"
+ },
+ "UAH": {
+ "name": "Hryvnia ucraniano",
+ "symbol": "UAH"
+ },
+ "JPY": {
+ "name": "Iene japonês",
+ "symbol": "JPÂ¥"
+ },
+ "PGK": {
+ "name": "Kina papuásia",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "Kip laosiano",
+ "symbol": "LAK"
+ },
+ "HRK": {
+ "name": "Kuna croata",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "Kwacha malawiana",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha zambiano",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza angolano",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "Kyat mianmarense",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "Lari georgiano",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "Lek albanês",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "Lempira hondurenha",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "Leone de Serra Leoa",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "Leu moldávio",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "Leu romeno",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "Lev búlgaro",
+ "symbol": "BGN"
+ },
+ "GIP": {
+ "name": "Libra de Gibraltar",
+ "symbol": "GIP"
+ },
+ "SHP": {
+ "name": "Libra de Santa Helena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "Libra egípcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "Libra esterlina britânica",
+ "symbol": "£"
+ },
+ "LBP": {
+ "name": "Libra libanesa",
+ "symbol": "LBP"
+ },
+ "FKP": {
+ "name": "Libra malvinense",
+ "symbol": "FKP"
+ },
+ "SYP": {
+ "name": "Libra síria",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "Libra sudanesa",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "Libra sul-sudanesa",
+ "symbol": "SSP"
+ },
+ "SZL": {
+ "name": "Lilangeni suazi",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "Lira turca",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "Litas lituano",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Loti do Lesoto",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "Manat azeri",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "Manat turcomeno",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "Marco bósnio-herzegovino conversível",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "Metical moçambicano",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira nigeriana",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa da Eritreia",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "Ngultrum butanês",
+ "symbol": "BTN"
+ },
+ "TWD": {
+ "name": "Novo dólar taiwanês",
+ "symbol": "NT$"
+ },
+ "PEN": {
+ "name": "Novo sol peruano",
+ "symbol": "PEN"
+ },
+ "MRO": {
+ "name": "Ouguiya mauritana",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "Paʻanga tonganesa",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "Pataca macaense",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "Peso argentino",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "Peso chileno",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "Peso colombiano",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "Peso cubano",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "Peso cubano conversível",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "Peso dominicano",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "Peso filipino",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "Peso mexicano",
+ "symbol": "MX$"
+ },
+ "UYU": {
+ "name": "Peso uruguaio",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "Pula botsuanesa",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "Quetzal guatemalense",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "Rand sul-africano",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "Real brasileiro",
+ "symbol": "R$"
+ },
+ "QAR": {
+ "name": "Rial catariano",
+ "symbol": "QAR"
+ },
+ "YER": {
+ "name": "Rial iemenita",
+ "symbol": "YER"
+ },
+ "IRR": {
+ "name": "Rial iraniano",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "Rial omanense",
+ "symbol": "OMR"
+ },
+ "KHR": {
+ "name": "Riel cambojano",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "Ringgit malaio",
+ "symbol": "MYR"
+ },
+ "SAR": {
+ "name": "Riyal saudita",
+ "symbol": "SAR"
+ },
+ "BYR": {
+ "name": "Rublo bielorrusso",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "Rublo russo",
+ "symbol": "RUB"
+ },
+ "LKR": {
+ "name": "Rupia ceilandesa",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "Rupia indiana",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Rupia indonésia",
+ "symbol": "IDR"
+ },
+ "MVR": {
+ "name": "Rupia maldiva",
+ "symbol": "MVR"
+ },
+ "MUR": {
+ "name": "Rupia mauriciana",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "Rupia nepalesa",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "Rupia paquistanesa",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "Rupia seichelense",
+ "symbol": "SCR"
+ },
+ "ILS": {
+ "name": "Sheqel novo israelita",
+ "symbol": "₪"
+ },
+ "KGS": {
+ "name": "Som quirguiz",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "Som uzbeque",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "Somoni tadjique",
+ "symbol": "TJS"
+ },
+ "BDT": {
+ "name": "Taka bengalesa",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "Tala samoano",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "Tenge cazaque",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "Tugrik mongol",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "Vatu vanuatuense",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "Won norte-coreano",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "Won sul-coreano",
+ "symbol": "â‚©"
+ },
+ "KES": {
+ "name": "Xelim queniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Xelim somaliano",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Xelim tanzaniano",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Xelim ugandense",
+ "symbol": "UGX"
+ },
+ "CNY": {
+ "name": "Yuan chinês",
+ "symbol": "CNÂ¥"
+ },
+ "PLN": {
+ "name": "Zloti polonês",
+ "symbol": "PLN"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/rm.json b/library/intl/resources/currency/rm.json
new file mode 100644
index 000000000..8efa15337
--- /dev/null
+++ b/library/intl/resources/currency/rm.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afghani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariary madagasc",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "baht tailandais",
+ "symbol": "THB"
+ },
+ "PAB": {
+ "name": "balboa dal Panama",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "birr etiopic",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolivar venezuelan",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi ghanais",
+ "symbol": "GHS"
+ },
+ "SVC": {
+ "name": "colon da l’El Salvador",
+ "symbol": "SVC"
+ },
+ "CRC": {
+ "name": "colon da la Costa Rica",
+ "symbol": "CRC"
+ },
+ "NIO": {
+ "name": "cordoba oro nicaraguan",
+ "symbol": "NIO"
+ },
+ "DKK": {
+ "name": "cruna danaisa",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "cruna islandaisa",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "cruna norvegiaisa",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "cruna svedaisa",
+ "symbol": "SEK"
+ },
+ "CZK": {
+ "name": "cruna tscheca",
+ "symbol": "CZK"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "GMD": {
+ "name": "dalasi gambic",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar algerian",
+ "symbol": "DZD"
+ },
+ "MKD": {
+ "name": "dinar da la Macedonia",
+ "symbol": "MKD"
+ },
+ "BHD": {
+ "name": "dinar dal Bahrain",
+ "symbol": "BHD"
+ },
+ "KWD": {
+ "name": "dinar dal Kuwait",
+ "symbol": "KWD"
+ },
+ "IQD": {
+ "name": "dinar iracais",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "dinar jordanic",
+ "symbol": "JOD"
+ },
+ "LYD": {
+ "name": "dinar libic",
+ "symbol": "LYD"
+ },
+ "RSD": {
+ "name": "dinar serb",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunesian",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dirham dals Emirats Arabs Unids",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dirham marocan",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra da São Tomé e Principe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dollar australian",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "dollar canadais",
+ "symbol": "CA$"
+ },
+ "BBD": {
+ "name": "dollar da Barbados",
+ "symbol": "BBD"
+ },
+ "HKD": {
+ "name": "dollar da Hongkong",
+ "symbol": "HK$"
+ },
+ "XCD": {
+ "name": "dollar da la Caribica Orientala",
+ "symbol": "EC$"
+ },
+ "GYD": {
+ "name": "dollar da la Guyana",
+ "symbol": "GYD"
+ },
+ "NZD": {
+ "name": "dollar da la Nova Zelanda",
+ "symbol": "NZ$"
+ },
+ "BSD": {
+ "name": "dollar da las Bahamas",
+ "symbol": "BSD"
+ },
+ "BMD": {
+ "name": "dollar da las Bermudas",
+ "symbol": "BMD"
+ },
+ "KYD": {
+ "name": "dollar da las Inslas Cayman",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "dollar da las Salomonas",
+ "symbol": "SBD"
+ },
+ "TTD": {
+ "name": "dollar da Trinidad e Tobago",
+ "symbol": "TTD"
+ },
+ "BZD": {
+ "name": "dollar dal Belize",
+ "symbol": "BZD"
+ },
+ "BND": {
+ "name": "dollar dal Brunei",
+ "symbol": "BND"
+ },
+ "FJD": {
+ "name": "dollar dal Fidschi",
+ "symbol": "FJD"
+ },
+ "SGD": {
+ "name": "dollar dal Singapur",
+ "symbol": "SGD"
+ },
+ "USD": {
+ "name": "dollar dals Stadis Unids da l’America",
+ "symbol": "$"
+ },
+ "JMD": {
+ "name": "dollar giamaican",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dollar liberian",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dollar namibian",
+ "symbol": "NAD"
+ },
+ "SRD": {
+ "name": "dollar surinam",
+ "symbol": "SRD"
+ },
+ "VND": {
+ "name": "dong vietnamais",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "dram armen",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo dal Cap Verd",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "AWG": {
+ "name": "flurin da l’Aruba",
+ "symbol": "AWG"
+ },
+ "ANG": {
+ "name": "flurin da las Antillas Olandaisas",
+ "symbol": "ANG"
+ },
+ "HUF": {
+ "name": "forint ungarais",
+ "symbol": "HUF"
+ },
+ "XOF": {
+ "name": "franc CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "franc CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "franc CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "franc comorian",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franc congolais",
+ "symbol": "CDF"
+ },
+ "GNF": {
+ "name": "franc da la Guinea",
+ "symbol": "GNF"
+ },
+ "BIF": {
+ "name": "franc dal Burundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "franc dal Dschibuti",
+ "symbol": "DJF"
+ },
+ "RWF": {
+ "name": "franc ruandais",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "franc svizzer",
+ "symbol": "CHF"
+ },
+ "GIP": {
+ "name": "glivra da Gibraltar",
+ "symbol": "GIP"
+ },
+ "SHP": {
+ "name": "glivra da Sontg’Elena",
+ "symbol": "SHP"
+ },
+ "FKP": {
+ "name": "glivra dal Falkland",
+ "symbol": "FKP"
+ },
+ "EGP": {
+ "name": "glivra egipziana",
+ "symbol": "EGP"
+ },
+ "LBP": {
+ "name": "glivra libanaisa",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "glivra siriana",
+ "symbol": "SYP"
+ },
+ "GBP": {
+ "name": "glivra sterlina",
+ "symbol": "£"
+ },
+ "SDG": {
+ "name": "glivra sudanaisa",
+ "symbol": "SDG"
+ },
+ "HTG": {
+ "name": "gourde haitian",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "guarani paraguaian",
+ "symbol": "PYG"
+ },
+ "UAH": {
+ "name": "hryvnia ucranais",
+ "symbol": "UAH"
+ },
+ "PGK": {
+ "name": "kina da la Papua Nova Guinea",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip laot",
+ "symbol": "LAK"
+ },
+ "HRK": {
+ "name": "kuna croata",
+ "symbol": "HRK"
+ },
+ "ZMW": {
+ "name": "kwacha da la sambia",
+ "symbol": "ZMW"
+ },
+ "MWK": {
+ "name": "kwacha dal Malawi",
+ "symbol": "MWK"
+ },
+ "AOA": {
+ "name": "kwanza angolan",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "Kyat dal Myanmar",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "lari georgian",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "lek",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira hondurian",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leone da la Sierra Leone",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldav",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu rumen",
+ "symbol": "RON"
+ },
+ "SZL": {
+ "name": "lilangeni dal Swaziland",
+ "symbol": "SZL"
+ },
+ "LTL": {
+ "name": "litas lituan",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti dal Lesotho",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat aserbaidschanic",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "marc convertibel bosniac",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical dal mozambican",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira nigeriana",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa eritreic",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "ngultrum butanais",
+ "symbol": "BTN"
+ },
+ "TWD": {
+ "name": "nov dollar taiwanais",
+ "symbol": "NT$"
+ },
+ "BGN": {
+ "name": "nov lev bulgar",
+ "symbol": "BGN"
+ },
+ "PEN": {
+ "name": "nov sol peruan",
+ "symbol": "PEN"
+ },
+ "TRY": {
+ "name": "nova lira tirca",
+ "symbol": "TRY"
+ },
+ "MRO": {
+ "name": "ouguiya da la Mauretania",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "pa’anga da Tonga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca dal Macao",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentin",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chilen",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso columbian",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cuban",
+ "symbol": "CUP"
+ },
+ "UYU": {
+ "name": "peso da l’Uruguay",
+ "symbol": "UYU"
+ },
+ "DOP": {
+ "name": "peso dominican",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filippin",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexican",
+ "symbol": "MX$"
+ },
+ "BWP": {
+ "name": "pula da la Botswana",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal da la Guatemala",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand sidafrican",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brasilian",
+ "symbol": "R$"
+ },
+ "OMR": {
+ "name": "rial da l’Oman",
+ "symbol": "OMR"
+ },
+ "YER": {
+ "name": "rial dal Jemen",
+ "symbol": "YER"
+ },
+ "IRR": {
+ "name": "rial iranais",
+ "symbol": "IRR"
+ },
+ "KHR": {
+ "name": "riel cambodschan",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringgit da la Malaisia",
+ "symbol": "MYR"
+ },
+ "QAR": {
+ "name": "riyal da Katar",
+ "symbol": "QAR"
+ },
+ "SAR": {
+ "name": "riyal saudit",
+ "symbol": "SAR"
+ },
+ "BYR": {
+ "name": "rubel bieloruss",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rubel russ (nov)",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiyaa da las Maledivas",
+ "symbol": "MVR"
+ },
+ "LKR": {
+ "name": "rupia da la Sri Lanka",
+ "symbol": "LKR"
+ },
+ "SCR": {
+ "name": "rupia da las Seychellas",
+ "symbol": "SCR"
+ },
+ "MUR": {
+ "name": "rupia dal Mauritius",
+ "symbol": "MUR"
+ },
+ "INR": {
+ "name": "rupia indica",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "rupia indonaisa",
+ "symbol": "IDR"
+ },
+ "NPR": {
+ "name": "rupia nepalaisa",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupia pakistana",
+ "symbol": "PKR"
+ },
+ "KES": {
+ "name": "schilling kenian",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "schilling somalian",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "schilling tansanian",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "schilling ugandais",
+ "symbol": "UGX"
+ },
+ "ILS": {
+ "name": "sheqel",
+ "symbol": "₪"
+ },
+ "KGS": {
+ "name": "som kirghis",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni dal Tadschikistan",
+ "symbol": "TJS"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "UZS": {
+ "name": "sum usbec",
+ "symbol": "UZS"
+ },
+ "BDT": {
+ "name": "taka bangladais",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala da la Samoa",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge casac",
+ "symbol": "KZT"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "MNT": {
+ "name": "tugrik mongolic",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "vatu dal Vanuatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won da la Corea dal Nord",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won da la Corea dal Sid",
+ "symbol": "â‚©"
+ },
+ "JPY": {
+ "name": "yen giapunais",
+ "symbol": "JPÂ¥"
+ },
+ "CNY": {
+ "name": "yuan renminbi chinais",
+ "symbol": "CNÂ¥"
+ },
+ "PLN": {
+ "name": "zloty polac",
+ "symbol": "PLN"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/rn.json b/library/intl/resources/currency/rn.json
new file mode 100644
index 000000000..907437e53
--- /dev/null
+++ b/library/intl/resources/currency/rn.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "ETB": {
+ "name": "Ibiri ryo muri Etiyopiya",
+ "symbol": "ETB"
+ },
+ "GMD": {
+ "name": "Idalasi ryo muri Gambiya",
+ "symbol": "GMD"
+ },
+ "BHD": {
+ "name": "Idinari ry’iribahireyini",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Idinari rya Libiya",
+ "symbol": "LYD"
+ },
+ "DZD": {
+ "name": "Idinari ryo muri Alijeriya",
+ "symbol": "DZD"
+ },
+ "TND": {
+ "name": "Idinari ryo muri Tuniziya",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Idiramu ryo muri Leta Zunze Ubumwe z’Abarabu",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Idiramu ryo muri Maroke",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "Idobura ryo muri Sawotome na Perensipe",
+ "symbol": "STD"
+ },
+ "USD": {
+ "name": "Idolari ry’abanyamerika",
+ "symbol": "US$"
+ },
+ "CAD": {
+ "name": "Idolari rya Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Idolari rya Liberiya",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Idolari rya Namibiya",
+ "symbol": "NAD"
+ },
+ "AUD": {
+ "name": "Idolari ryo muri Ositaraliya",
+ "symbol": "A$"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "RWF": {
+ "name": "Ifaranga ry’u Rwanda",
+ "symbol": "RWF"
+ },
+ "BIF": {
+ "name": "Ifaranga ry’Uburundi",
+ "symbol": "FBu"
+ },
+ "CHF": {
+ "name": "Ifaranga ry’Ubusuwisi",
+ "symbol": "CHF"
+ },
+ "KMF": {
+ "name": "Ifaranga rya Komore",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Ifaranga rya Kongo",
+ "symbol": "CDF"
+ },
+ "DJF": {
+ "name": "Ifaranga ryo muri Jibuti",
+ "symbol": "DJF"
+ },
+ "MWK": {
+ "name": "Ikwaca ryo muri Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Ikwaca ryo muri Zambiya",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Ikwanza ryo muri Angola",
+ "symbol": "AOA"
+ },
+ "SLL": {
+ "name": "Ilewone",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Ililangeni",
+ "symbol": "SZL"
+ },
+ "LSL": {
+ "name": "Iloti ryo muro Lesoto",
+ "symbol": "LSL"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "NGN": {
+ "name": "Inayira ryo muri Nijeriya",
+ "symbol": "NGN"
+ },
+ "EGP": {
+ "name": "Ipawundi rya Misiri",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Ipawundi rya Sente Helena",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Ipawundi rya Sudani",
+ "symbol": "SDG"
+ },
+ "GBP": {
+ "name": "Ipawundi ryo mu Bwongereza",
+ "symbol": "£"
+ },
+ "BWP": {
+ "name": "Ipula ryo muri Botswana",
+ "symbol": "BWP"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "ZAR": {
+ "name": "Irandi ryo muri Afurika y’Epfo",
+ "symbol": "ZAR"
+ },
+ "CVE": {
+ "name": "Irikaboveridiyano ryo muri Esikudo",
+ "symbol": "CVE"
+ },
+ "ERN": {
+ "name": "Irinakufa ryo muri Eritereya",
+ "symbol": "ERN"
+ },
+ "SAR": {
+ "name": "Iriyari ryo muri Arabiya Sawudite",
+ "symbol": "SAR"
+ },
+ "MGA": {
+ "name": "Iriyari ryo muri Madagasikari",
+ "symbol": "MGA"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "MUR": {
+ "name": "Irupiya ryo mu birwa bya Morise",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Irupiya ryo mu birwa bya Sayisheli",
+ "symbol": "SCR"
+ },
+ "INR": {
+ "name": "Irupiya ryo mu Buhindi",
+ "symbol": "₹"
+ },
+ "UGX": {
+ "name": "Ishilingi ry’Ubugande",
+ "symbol": "UGX"
+ },
+ "KES": {
+ "name": "Ishilingi rya Kenya",
+ "symbol": "KES"
+ },
+ "TZS": {
+ "name": "Ishilingi rya Tanzaniya",
+ "symbol": "TZS"
+ },
+ "SOS": {
+ "name": "Ishilingi ryo muri Somaliya",
+ "symbol": "SOS"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JPY": {
+ "name": "Iyeni ry’Ubuyapani",
+ "symbol": "JPÂ¥"
+ },
+ "EUR": {
+ "name": "Iyero",
+ "symbol": "€"
+ },
+ "CNY": {
+ "name": "Iyuwani ryo mu Bushinwa",
+ "symbol": "CNÂ¥"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ugwiya ryo muri Moritaniya",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ro.json b/library/intl/resources/currency/ro.json
new file mode 100644
index 000000000..e509ea215
--- /dev/null
+++ b/library/intl/resources/currency/ro.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani afgan",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "ariary malgaÈ™",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "baht thailandez",
+ "symbol": "THB"
+ },
+ "PAB": {
+ "name": "balboa panameză",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "birr etiopian",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "bolivar venezuelean",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "boliviano bolivian",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "cedi ghanez",
+ "symbol": "GHS"
+ },
+ "CRC": {
+ "name": "colon costarican",
+ "symbol": "CRC"
+ },
+ "SVC": {
+ "name": "colon El Salvador",
+ "symbol": "SVC"
+ },
+ "NIO": {
+ "name": "cordoba nicaraguană",
+ "symbol": "NIO"
+ },
+ "CZK": {
+ "name": "coroană cehă",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "coroană daneză",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "coroană islandeză",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "coroană norvegiană",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "coroană suedeză",
+ "symbol": "SEK"
+ },
+ "GMD": {
+ "name": "dalasi din Gambia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "dinar algerian",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinar din Bahrain",
+ "symbol": "BHD"
+ },
+ "JOD": {
+ "name": "dinar iordanian",
+ "symbol": "JOD"
+ },
+ "IQD": {
+ "name": "dinar irakian",
+ "symbol": "IQD"
+ },
+ "KWD": {
+ "name": "dinar kuweitian",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinar libian",
+ "symbol": "LYD"
+ },
+ "MKD": {
+ "name": "dinar macedonean",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "dinar sârbesc",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "dinar tunisian",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "dirham din Emiratele Arabe Unite",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dirham marocan",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra Sao Tome și Principe",
+ "symbol": "STD"
+ },
+ "USD": {
+ "name": "dolar american",
+ "symbol": "USD"
+ },
+ "AUD": {
+ "name": "dolar australian",
+ "symbol": "AUD"
+ },
+ "BBD": {
+ "name": "dolar Barbados",
+ "symbol": "BBD"
+ },
+ "CAD": {
+ "name": "dolar canadian",
+ "symbol": "CAD"
+ },
+ "BSD": {
+ "name": "dolar din Bahamas",
+ "symbol": "BSD"
+ },
+ "BZD": {
+ "name": "dolar din Belize",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "dolar din Bermuda",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "dolar din Brunei",
+ "symbol": "BND"
+ },
+ "XCD": {
+ "name": "dolar din Caraibele de Est",
+ "symbol": "XCD"
+ },
+ "HKD": {
+ "name": "dolar din Hong Kong",
+ "symbol": "HKD"
+ },
+ "KYD": {
+ "name": "dolar din Insulele Cayman",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "dolar din Insulele Solomon",
+ "symbol": "SBD"
+ },
+ "TTD": {
+ "name": "dolar din Trinidad-Tobago",
+ "symbol": "TTD"
+ },
+ "FJD": {
+ "name": "dolar fijian",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "dolar guyanez",
+ "symbol": "GYD"
+ },
+ "JMD": {
+ "name": "dolar jamaican",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "dolar liberian",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dolar namibian",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "dolar neozeelandez",
+ "symbol": "NZD"
+ },
+ "TWD": {
+ "name": "dolar nou din Taiwan",
+ "symbol": "TWD"
+ },
+ "SGD": {
+ "name": "dolar Singapore",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "dolar surinamez",
+ "symbol": "SRD"
+ },
+ "ZWL": {
+ "name": "dolar Zimbabwe (2009)",
+ "symbol": "ZWL"
+ },
+ "VND": {
+ "name": "dong vietnamez",
+ "symbol": "VND"
+ },
+ "AMD": {
+ "name": "dram armenesc",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "escudo din Capul Verde",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "EUR"
+ },
+ "AWG": {
+ "name": "florin aruban",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "forint maghiar",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "franc burundez",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "franc CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "franc CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "franc CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "franc comorian",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "franc congolez",
+ "symbol": "CDF"
+ },
+ "DJF": {
+ "name": "franc djiboutian",
+ "symbol": "DJF"
+ },
+ "CHF": {
+ "name": "franc elvețian",
+ "symbol": "CHF"
+ },
+ "GNF": {
+ "name": "franc guineean",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "franc rwandez",
+ "symbol": "RWF"
+ },
+ "HTG": {
+ "name": "gourde din Haiti",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "guarani paraguayan",
+ "symbol": "PYG"
+ },
+ "ANG": {
+ "name": "gulden din Antilele Olandeze",
+ "symbol": "ANG"
+ },
+ "UAH": {
+ "name": "hryvna ucraineană",
+ "symbol": "UAH"
+ },
+ "PGK": {
+ "name": "kina din Papua-Noua Guinee",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "kip laoțian",
+ "symbol": "LAK"
+ },
+ "HRK": {
+ "name": "kuna croată",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "kwacha malawiană",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kwacha zambian",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "kwanza angoleză",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "kyat din Myanmar",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "lari georgian",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "leka albaneză",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "lempira honduriană",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leone din Sierra Leone",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "leu moldovenesc",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "leu românesc",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "leva bulgărească",
+ "symbol": "BGN"
+ },
+ "SZL": {
+ "name": "lilangeni din Swaziland",
+ "symbol": "SZL"
+ },
+ "GIP": {
+ "name": "liră din Gibraltar",
+ "symbol": "GIP"
+ },
+ "FKP": {
+ "name": "liră din Insulele Falkland",
+ "symbol": "FKP"
+ },
+ "EGP": {
+ "name": "liră egipteană",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "liră Insula Sf. Elena",
+ "symbol": "SHP"
+ },
+ "LBP": {
+ "name": "liră libaneză",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "liră siriană",
+ "symbol": "SYP"
+ },
+ "GBP": {
+ "name": "liră sterlină",
+ "symbol": "GBP"
+ },
+ "SSP": {
+ "name": "liră sud-sudaneză",
+ "symbol": "SSP"
+ },
+ "SDG": {
+ "name": "liră sudaneză",
+ "symbol": "SDG"
+ },
+ "TRY": {
+ "name": "liră turcească",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "litu lituanian",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti lesothian",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "manat azer",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "manat turkmen",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "marcă convertibilă din Bosnia și Herțegovina",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "metical mozambican",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira nigeriană",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa eritreeană",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "ngultrum din Bhutan",
+ "symbol": "BTN"
+ },
+ "MRO": {
+ "name": "ouguiya mauritană",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "pa’anga tongană",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "pataca din Macao",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "peso argentinian",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "peso chilian",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "peso columbian",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "peso cubanez",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "peso cubanez convertibil",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "peso dominican",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "peso filipinez",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "peso mexican",
+ "symbol": "MXN"
+ },
+ "UYU": {
+ "name": "peso uruguayan",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula Botswana",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "quetzal guatemalez",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "rand sud-african",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "real brazilian",
+ "symbol": "BRL"
+ },
+ "IRR": {
+ "name": "rial iranian",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "rial omanez",
+ "symbol": "OMR"
+ },
+ "QAR": {
+ "name": "rial qatarian",
+ "symbol": "QAR"
+ },
+ "SAR": {
+ "name": "rial saudit",
+ "symbol": "SAR"
+ },
+ "YER": {
+ "name": "rial yemenit",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "riel cambodgian",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "ringgit malaiezian",
+ "symbol": "MYR"
+ },
+ "BYR": {
+ "name": "rublă belarusă",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "rublă rusească",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "rufiyaa maldiviană",
+ "symbol": "MVR"
+ },
+ "SCR": {
+ "name": "rupie din Seychelles",
+ "symbol": "SCR"
+ },
+ "LKR": {
+ "name": "rupie din Sri Lanka",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "rupie indiană",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "rupie indoneziană",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "rupie mauritiană",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "rupie nepaleză",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "rupie pakistaneză",
+ "symbol": "PKR"
+ },
+ "PEN": {
+ "name": "sol nou peruvian",
+ "symbol": "PEN"
+ },
+ "KGS": {
+ "name": "som kârgâz",
+ "symbol": "KGS"
+ },
+ "TJS": {
+ "name": "somoni tadjic",
+ "symbol": "TJS"
+ },
+ "UZS": {
+ "name": "sum Uzbekistan",
+ "symbol": "UZS"
+ },
+ "ILS": {
+ "name": "șechel israelian nou",
+ "symbol": "ILS"
+ },
+ "KES": {
+ "name": "șiling kenyan",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "șiling somalez",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "șiling tanzanian",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "șiling ugandez",
+ "symbol": "UGX"
+ },
+ "BDT": {
+ "name": "taka din Bangladesh",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "tala samoană",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "tenge kazahă",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "tugrik mongol",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "vatu din Vanuatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "won nord-coreean",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "won sud-coreean",
+ "symbol": "KRW"
+ },
+ "JPY": {
+ "name": "yen japonez",
+ "symbol": "JPY"
+ },
+ "CNY": {
+ "name": "yuan chinezesc",
+ "symbol": "CNY"
+ },
+ "PLN": {
+ "name": "zlot polonez",
+ "symbol": "PLN"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/rof.json b/library/intl/resources/currency/rof.json
new file mode 100644
index 000000000..154a48d65
--- /dev/null
+++ b/library/intl/resources/currency/rof.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "ZAR": {
+ "name": "heleri sa Afrika Kusini",
+ "symbol": "ZAR"
+ },
+ "DZD": {
+ "name": "heleri sa Aljeria",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "heleri sa Angola",
+ "symbol": "AOA"
+ },
+ "AUD": {
+ "name": "heleri sa Australia",
+ "symbol": "A$"
+ },
+ "BHD": {
+ "name": "heleri sa Bahareni",
+ "symbol": "BHD"
+ },
+ "BWP": {
+ "name": "heleri sa Botswana",
+ "symbol": "BWP"
+ },
+ "MGA": {
+ "name": "heleri sa Bukini",
+ "symbol": "MGA"
+ },
+ "BIF": {
+ "name": "heleri sa Burundi",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "heleri sa CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "heleri sa CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "CNY": {
+ "name": "heleri sa China",
+ "symbol": "CNÂ¥"
+ },
+ "ERN": {
+ "name": "heleri sa Eritrea",
+ "symbol": "ERN"
+ },
+ "AED": {
+ "name": "heleri sa Falme za Kiarabu",
+ "symbol": "AED"
+ },
+ "GMD": {
+ "name": "heleri sa Gambia",
+ "symbol": "GMD"
+ },
+ "INR": {
+ "name": "heleri sa India",
+ "symbol": "₹"
+ },
+ "JPY": {
+ "name": "heleri sa Japani",
+ "symbol": "JPÂ¥"
+ },
+ "DJF": {
+ "name": "heleri sa Jibuti",
+ "symbol": "DJF"
+ },
+ "CAD": {
+ "name": "heleri sa Kanada",
+ "symbol": "CA$"
+ },
+ "KES": {
+ "name": "heleri sa Kenya",
+ "symbol": "KES"
+ },
+ "CVE": {
+ "name": "heleri sa Kepuvede",
+ "symbol": "CVE"
+ },
+ "KMF": {
+ "name": "heleri sa Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "heleri sa Kongo",
+ "symbol": "CDF"
+ },
+ "LSL": {
+ "name": "heleri sa Lesoto",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "heleri sa Liberia",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "heleri sa Libya",
+ "symbol": "LYD"
+ },
+ "MWK": {
+ "name": "heleri sa Malawi",
+ "symbol": "MWK"
+ },
+ "USD": {
+ "name": "heleri sa Marekani",
+ "symbol": "US$"
+ },
+ "EGP": {
+ "name": "heleri sa Misri",
+ "symbol": "EGP"
+ },
+ "MUR": {
+ "name": "heleri sa Morisi",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "heleri sa Moritania",
+ "symbol": "MRO"
+ },
+ "MAD": {
+ "name": "heleri sa Moroko",
+ "symbol": "MAD"
+ },
+ "NAD": {
+ "name": "heleri sa Namibia",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "heleri sa Nijeria",
+ "symbol": "NGN"
+ },
+ "RWF": {
+ "name": "heleri sa Rwanda",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "heleri sa Santahelena",
+ "symbol": "SHP"
+ },
+ "STD": {
+ "name": "heleri sa Sao Tome na Principe",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "heleri sa Saudia",
+ "symbol": "SAR"
+ },
+ "SCR": {
+ "name": "heleri sa Shelisheli",
+ "symbol": "SCR"
+ },
+ "SOS": {
+ "name": "heleri sa Somalia",
+ "symbol": "SOS"
+ },
+ "SDG": {
+ "name": "heleri sa Sudani",
+ "symbol": "SDG"
+ },
+ "TZS": {
+ "name": "heleri sa Tanzania",
+ "symbol": "TSh"
+ },
+ "TND": {
+ "name": "heleri sa Tunisia",
+ "symbol": "TND"
+ },
+ "UGX": {
+ "name": "heleri sa Uganda",
+ "symbol": "UGX"
+ },
+ "ETB": {
+ "name": "heleri sa Uhabeshi",
+ "symbol": "ETB"
+ },
+ "GBP": {
+ "name": "heleri sa Uingereza",
+ "symbol": "£"
+ },
+ "CHF": {
+ "name": "heleri sa Uswisi",
+ "symbol": "CHF"
+ },
+ "ZMW": {
+ "name": "heleri sa Zambia",
+ "symbol": "ZMW"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "leoni",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "EUR": {
+ "name": "yuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ru.json b/library/intl/resources/currency/ru.json
new file mode 100644
index 000000000..71520f89b
--- /dev/null
+++ b/library/intl/resources/currency/ru.json
@@ -0,0 +1,634 @@
+{
+ "AUD": {
+ "name": "ÐвÑтралийÑкий доллар",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "ÐзербайджанÑкий манат",
+ "symbol": "AZN"
+ },
+ "ALL": {
+ "name": "ÐлбанÑкий лек",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "ÐлжирÑкий динар",
+ "symbol": "DZD"
+ },
+ "GBP": {
+ "name": "ÐнглийÑкий фунт Ñтерлингов",
+ "symbol": "£"
+ },
+ "AOA": {
+ "name": "ÐнгольÑÐºÐ°Ñ ÐºÐ²Ð°Ð½Ð·Ð°",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ÐргентинÑкое пеÑо",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "ÐрмÑнÑкий драм",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "ÐрубанÑкий флорин",
+ "symbol": "AWG"
+ },
+ "AFN": {
+ "name": "ÐфганÑкий афгани",
+ "symbol": "AFN"
+ },
+ "BSD": {
+ "name": "БагамÑкий доллар",
+ "symbol": "BSD"
+ },
+ "BDT": {
+ "name": "БангладешÑÐºÐ°Ñ Ñ‚Ð°ÐºÐ°",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "БарбадоÑÑкий доллар",
+ "symbol": "BBD"
+ },
+ "BHD": {
+ "name": "БахрейнÑкий динар",
+ "symbol": "BHD"
+ },
+ "BZD": {
+ "name": "БелизÑкий доллар",
+ "symbol": "BZD"
+ },
+ "BYR": {
+ "name": "БелоруÑÑкий рубль",
+ "symbol": "BYR"
+ },
+ "BMD": {
+ "name": "БермудÑкий доллар",
+ "symbol": "BMD"
+ },
+ "BGN": {
+ "name": "БолгарÑкий лев",
+ "symbol": "BGN"
+ },
+ "BOB": {
+ "name": "БоливийÑкий боливиано",
+ "symbol": "BOB"
+ },
+ "BWP": {
+ "name": "БотÑванÑÐºÐ°Ñ Ð¿ÑƒÐ»Ð°",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "БразильÑкий реал",
+ "symbol": "R$"
+ },
+ "BND": {
+ "name": "БрунейÑкий доллар",
+ "symbol": "BND"
+ },
+ "BIF": {
+ "name": "БурундийÑкий франк",
+ "symbol": "BIF"
+ },
+ "BTN": {
+ "name": "БутанÑкий нгултрум",
+ "symbol": "BTN"
+ },
+ "VUV": {
+ "name": "Вату Вануату",
+ "symbol": "VUV"
+ },
+ "HUF": {
+ "name": "ВенгерÑкий форинт",
+ "symbol": "HUF"
+ },
+ "VEF": {
+ "name": "ВенеÑуÑльÑкий боливар",
+ "symbol": "VEF"
+ },
+ "XCD": {
+ "name": "ВоÑточно-карибÑкий доллар",
+ "symbol": "EC$"
+ },
+ "VND": {
+ "name": "ВьетнамÑкий донг",
+ "symbol": "â‚«"
+ },
+ "HTG": {
+ "name": "ГаитÑнÑкий гурд",
+ "symbol": "HTG"
+ },
+ "GYD": {
+ "name": "ГайанÑкий доллар",
+ "symbol": "GYD"
+ },
+ "GMD": {
+ "name": "ГамбийÑкий далаÑи",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "ГанÑкий Ñеди",
+ "symbol": "GHS"
+ },
+ "GTQ": {
+ "name": "ГватемальÑкий кетÑаль",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "ГвинейÑкий франк",
+ "symbol": "GNF"
+ },
+ "GIP": {
+ "name": "ГибралтарÑкий фунт",
+ "symbol": "GIP"
+ },
+ "HNL": {
+ "name": "ГондураÑÑÐºÐ°Ñ Ð»ÐµÐ¼Ð¿Ð¸Ñ€Ð°",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "ГонконгÑкий доллар",
+ "symbol": "HK$"
+ },
+ "GEL": {
+ "name": "ГрузинÑкий лари",
+ "symbol": "GEL"
+ },
+ "DKK": {
+ "name": "ДатÑÐºÐ°Ñ ÐºÑ€Ð¾Ð½Ð°",
+ "symbol": "DKK"
+ },
+ "AED": {
+ "name": "Дирхам ОÐЭ",
+ "symbol": "AED"
+ },
+ "STD": {
+ "name": "Добра Сант-Томе и ПринÑипи",
+ "symbol": "STD"
+ },
+ "ZWL": {
+ "name": "Доллар Зимбабве (2009)",
+ "symbol": "ZWL"
+ },
+ "KYD": {
+ "name": "Доллар Каймановых оÑтровов",
+ "symbol": "KYD"
+ },
+ "NAD": {
+ "name": "Доллар Ðамибии",
+ "symbol": "NAD"
+ },
+ "SBD": {
+ "name": "Доллар Соломоновых оÑтровов",
+ "symbol": "SBD"
+ },
+ "USD": {
+ "name": "Доллар СШÐ",
+ "symbol": "$"
+ },
+ "TTD": {
+ "name": "Доллар Тринидада и Тобаго",
+ "symbol": "TTD"
+ },
+ "FJD": {
+ "name": "Доллар Фиджи",
+ "symbol": "FJD"
+ },
+ "DOP": {
+ "name": "ДоминиканÑкое пеÑо",
+ "symbol": "DOP"
+ },
+ "EUR": {
+ "name": "Евро",
+ "symbol": "€"
+ },
+ "EGP": {
+ "name": "ЕгипетÑкий фунт",
+ "symbol": "EGP"
+ },
+ "ZMW": {
+ "name": "ЗамбийÑÐºÐ°Ñ ÐºÐ²Ð°Ñ‡Ð°",
+ "symbol": "ZMW"
+ },
+ "INR": {
+ "name": "ИндийÑÐºÐ°Ñ Ñ€ÑƒÐ¿Ð¸Ñ",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "ИндонезийÑÐºÐ°Ñ Ñ€ÑƒÐ¿Ð¸Ñ",
+ "symbol": "IDR"
+ },
+ "JOD": {
+ "name": "ИорданÑкий динар",
+ "symbol": "JOD"
+ },
+ "IQD": {
+ "name": "ИракÑкий динар",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "ИранÑкий риал",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ИÑландÑÐºÐ°Ñ ÐºÑ€Ð¾Ð½Ð°",
+ "symbol": "ISK"
+ },
+ "YER": {
+ "name": "ЙеменÑкий риал",
+ "symbol": "YER"
+ },
+ "KZT": {
+ "name": "КазахÑкий тенге",
+ "symbol": "KZT"
+ },
+ "KHR": {
+ "name": "КамбоджийÑкий риель",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "КанадÑкий доллар",
+ "symbol": "CA$"
+ },
+ "QAR": {
+ "name": "КатарÑкий риал",
+ "symbol": "QAR"
+ },
+ "KES": {
+ "name": "КенийÑкий шиллинг",
+ "symbol": "KES"
+ },
+ "PGK": {
+ "name": "Кина Папуа — Ðовой Гвинеи",
+ "symbol": "PGK"
+ },
+ "KGS": {
+ "name": "КиргизÑкий Ñом",
+ "symbol": "KGS"
+ },
+ "CNY": {
+ "name": "КитайÑкий юань",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "КолумбийÑкое пеÑо",
+ "symbol": "COP"
+ },
+ "BAM": {
+ "name": "ÐšÐ¾Ð½Ð²ÐµÑ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ð°Ñ Ð¼Ð°Ñ€ÐºÐ° БоÑнии и Герцеговины",
+ "symbol": "BAM"
+ },
+ "CDF": {
+ "name": "КонголезÑкий франк",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "КоÑтариканÑкий колон",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "КубинÑкое конвертируемое пеÑо",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "КубинÑкое пеÑо",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "КувейтÑкий динар",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "ЛаоÑÑкий кип",
+ "symbol": "LAK"
+ },
+ "SLL": {
+ "name": "Леоне",
+ "symbol": "SLL"
+ },
+ "LRD": {
+ "name": "ЛиберийÑкий доллар",
+ "symbol": "LRD"
+ },
+ "LBP": {
+ "name": "ЛиванÑкий фунт",
+ "symbol": "LBP"
+ },
+ "LYD": {
+ "name": "ЛивийÑкий динар",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "ЛитовÑкий лит",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Лоти",
+ "symbol": "LSL"
+ },
+ "MUR": {
+ "name": "МаврикийÑÐºÐ°Ñ Ñ€ÑƒÐ¿Ð¸Ñ",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "МавританÑÐºÐ°Ñ ÑƒÐ³Ð¸Ñ",
+ "symbol": "MRO"
+ },
+ "MKD": {
+ "name": "МакедонÑкий динар",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "МалавийÑÐºÐ°Ñ ÐºÐ²Ð°Ñ‡Ð°",
+ "symbol": "MWK"
+ },
+ "MGA": {
+ "name": "МалагаÑийÑкий ариари",
+ "symbol": "MGA"
+ },
+ "MYR": {
+ "name": "МалайзийÑкий ринггит",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "МальдивÑÐºÐ°Ñ Ñ€ÑƒÑ„Ð¸Ñ",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "МарокканÑкий дирхам",
+ "symbol": "MAD"
+ },
+ "MXN": {
+ "name": "МекÑиканÑкое пеÑо",
+ "symbol": "MX$"
+ },
+ "MZN": {
+ "name": "МозамбикÑкий метикал",
+ "symbol": "MZN"
+ },
+ "MDL": {
+ "name": "МолдавÑкий лей",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "МонгольÑкий тугрик",
+ "symbol": "MNT"
+ },
+ "MMK": {
+ "name": "МьÑнманÑкий кьÑÑ‚",
+ "symbol": "MMK"
+ },
+ "ERN": {
+ "name": "Ðакфа",
+ "symbol": "ERN"
+ },
+ "NPR": {
+ "name": "ÐепальÑÐºÐ°Ñ Ñ€ÑƒÐ¿Ð¸Ñ",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "ÐигерийÑÐºÐ°Ñ Ð½Ð°Ð¹Ñ€Ð°",
+ "symbol": "NGN"
+ },
+ "ANG": {
+ "name": "ÐидерландÑкий антильÑкий гульден",
+ "symbol": "ANG"
+ },
+ "NIO": {
+ "name": "ÐикарагуанÑÐºÐ°Ñ ÐºÐ¾Ñ€Ð´Ð¾Ð±Ð°",
+ "symbol": "NIO"
+ },
+ "NZD": {
+ "name": "ÐовозеландÑкий доллар",
+ "symbol": "NZ$"
+ },
+ "ILS": {
+ "name": "Ðовый израильÑкий шекель",
+ "symbol": "₪"
+ },
+ "TWD": {
+ "name": "Ðовый тайваньÑкий доллар",
+ "symbol": "NT$"
+ },
+ "NOK": {
+ "name": "ÐорвежÑÐºÐ°Ñ ÐºÑ€Ð¾Ð½Ð°",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "ОманÑкий риал",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "ПакиÑтанÑÐºÐ°Ñ Ñ€ÑƒÐ¿Ð¸Ñ",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "ПанамÑкое бальбоа",
+ "symbol": "PAB"
+ },
+ "PYG": {
+ "name": "ПарагвайÑкий гуарани",
+ "symbol": "PYG"
+ },
+ "MOP": {
+ "name": "Патака Макао",
+ "symbol": "MOP"
+ },
+ "PEN": {
+ "name": "ПеруанÑкий новый Ñоль",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "ПольÑкий злотый",
+ "symbol": "PLN"
+ },
+ "RUB": {
+ "name": "РоÑÑийÑкий рубль",
+ "symbol": "руб."
+ },
+ "RON": {
+ "name": "РумынÑкий лей",
+ "symbol": "RON"
+ },
+ "SVC": {
+ "name": "СальвадорÑкий колон",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "СамоанÑÐºÐ°Ñ Ñ‚Ð°Ð»Ð°",
+ "symbol": "WST"
+ },
+ "SAR": {
+ "name": "СаудовÑкий риал",
+ "symbol": "SAR"
+ },
+ "SZL": {
+ "name": "СвазилендÑкий лилангени",
+ "symbol": "SZL"
+ },
+ "KPW": {
+ "name": "СеверокорейÑÐºÐ°Ñ Ð²Ð¾Ð½Ð°",
+ "symbol": "KPW"
+ },
+ "SCR": {
+ "name": "СейшельÑÐºÐ°Ñ Ñ€ÑƒÐ¿Ð¸Ñ",
+ "symbol": "SCR"
+ },
+ "RSD": {
+ "name": "СербÑкий динар",
+ "symbol": "RSD"
+ },
+ "SGD": {
+ "name": "СингапурÑкий доллар",
+ "symbol": "SGD"
+ },
+ "SYP": {
+ "name": "СирийÑкий фунт",
+ "symbol": "SYP"
+ },
+ "SOS": {
+ "name": "СомалийÑкий шиллинг",
+ "symbol": "SOS"
+ },
+ "SDG": {
+ "name": "СуданÑкий фунт",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "СуринамÑкий доллар",
+ "symbol": "SRD"
+ },
+ "TJS": {
+ "name": "ТаджикÑкий Ñомони",
+ "symbol": "TJS"
+ },
+ "THB": {
+ "name": "ТаиландÑкий бат",
+ "symbol": "฿"
+ },
+ "TZS": {
+ "name": "ТанзанийÑкий шиллинг",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "ТонганÑÐºÐ°Ñ Ð¿Ð°Ð°Ð½Ð³Ð°",
+ "symbol": "TOP"
+ },
+ "TND": {
+ "name": "ТуниÑÑкий динар",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Ð¢ÑƒÑ€ÐµÑ†ÐºÐ°Ñ Ð»Ð¸Ñ€Ð°",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "ТуркменÑкий новый манат",
+ "symbol": "ТМТ"
+ },
+ "UGX": {
+ "name": "УгандийÑкий шиллинг",
+ "symbol": "UGX"
+ },
+ "UZS": {
+ "name": "УзбекÑкий Ñум",
+ "symbol": "UZS"
+ },
+ "UAH": {
+ "name": "УкраинÑÐºÐ°Ñ Ð³Ñ€Ð¸Ð²Ð½Ð°",
+ "symbol": "â‚´"
+ },
+ "UYU": {
+ "name": "УругвайÑкое пеÑо",
+ "symbol": "UYU"
+ },
+ "PHP": {
+ "name": "ФилиппинÑкое пеÑо",
+ "symbol": "PHP"
+ },
+ "DJF": {
+ "name": "Франк Джибути",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Франк КоморÑких оÑтровов",
+ "symbol": "KMF"
+ },
+ "XAF": {
+ "name": "Франк КФРВЕÐС",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "Франк КФРВСЕÐО",
+ "symbol": "CFA"
+ },
+ "RWF": {
+ "name": "Франк Руанды",
+ "symbol": "RWF"
+ },
+ "XPF": {
+ "name": "ФранцузÑкий тихоокеанÑкий франк",
+ "symbol": "CFPF"
+ },
+ "SHP": {
+ "name": "Фунт оÑтрова СвÑтой Елены",
+ "symbol": "SHP"
+ },
+ "FKP": {
+ "name": "Фунт ФолклендÑких оÑтровов",
+ "symbol": "FKP"
+ },
+ "HRK": {
+ "name": "ХорватÑÐºÐ°Ñ ÐºÑƒÐ½Ð°",
+ "symbol": "HRK"
+ },
+ "CZK": {
+ "name": "ЧешÑÐºÐ°Ñ ÐºÑ€Ð¾Ð½Ð°",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "ЧилийÑкое пеÑо",
+ "symbol": "CLP"
+ },
+ "SEK": {
+ "name": "ШведÑÐºÐ°Ñ ÐºÑ€Ð¾Ð½Ð°",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "ШвейцарÑкий франк",
+ "symbol": "CHF"
+ },
+ "LKR": {
+ "name": "Шри-ЛанкийÑÐºÐ°Ñ Ñ€ÑƒÐ¿Ð¸Ñ",
+ "symbol": "LKR"
+ },
+ "CVE": {
+ "name": "ЭÑкудо Кабо-Верде",
+ "symbol": "CVE"
+ },
+ "ETB": {
+ "name": "ЭфиопÑкий быр",
+ "symbol": "ETB"
+ },
+ "ZAR": {
+ "name": "ЮжноафриканÑкий Ñ€Ñнд",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "ЮжнокорейÑÐºÐ°Ñ Ð²Ð¾Ð½Ð°",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "ЮжноÑуданÑкий фунт",
+ "symbol": "SSP"
+ },
+ "JMD": {
+ "name": "ЯмайÑкий доллар",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "ЯпонÑÐºÐ°Ñ Ð¸ÐµÐ½Ð°",
+ "symbol": "Â¥"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/rwk.json b/library/intl/resources/currency/rwk.json
new file mode 100644
index 000000000..655670a30
--- /dev/null
+++ b/library/intl/resources/currency/rwk.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Bir ya Uhabeshi",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi ya Gambia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinari ya Aljeria",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinari ya Bahareni",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinari ya Libya",
+ "symbol": "LYD"
+ },
+ "SDG": {
+ "name": "Dinari ya Sudani",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "Dinari ya Tunisia",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham ya Falme za Kiarabu",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham ya Moroko",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobra ya Sao Tome na Principe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "Dola ya Australia",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "Dola ya Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dola ya Liberia",
+ "symbol": "LRD"
+ },
+ "USD": {
+ "name": "Dola ya Marekani",
+ "symbol": "US$"
+ },
+ "NAD": {
+ "name": "Dola ya Namibia",
+ "symbol": "NAD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "Eskudo ya Kepuvede",
+ "symbol": "CVE"
+ },
+ "XOF": {
+ "name": "Faranga CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Faranga CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "MGA": {
+ "name": "Faranga ya Bukini",
+ "symbol": "MGA"
+ },
+ "BIF": {
+ "name": "Faranga ya Burundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Faranga ya Jibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Faranga ya Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Faranga ya Kongo",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Faranga ya Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Faranga ya Uswisi",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kwacha ya Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha ya Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza ya Angola",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leoni",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti ya Lesoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira ya Nijeria",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa ya Eritrea",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "EGP": {
+ "name": "Pauni ya Misri",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Pauni ya Santahelena",
+ "symbol": "SHP"
+ },
+ "GBP": {
+ "name": "Pauni ya Uingereza",
+ "symbol": "£"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pula ya Botswana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Randi ya Afrika Kusini",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riyal ya Saudia",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupia ya India",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupia ya Morisi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupia ya Shelisheli",
+ "symbol": "SCR"
+ },
+ "JPY": {
+ "name": "Sarafu ya Kijapani",
+ "symbol": "JPÂ¥"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "Shilingi ya Kenya",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Shilingi ya Somalia",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Shilingi ya Tanzania",
+ "symbol": "TSh"
+ },
+ "UGX": {
+ "name": "Shilingi ya Uganda",
+ "symbol": "UGX"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ugwiya ya Moritania",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yuan Renminbi ya China",
+ "symbol": "CNÂ¥"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/saq.json b/library/intl/resources/currency/saq.json
new file mode 100644
index 000000000..4202a5ffb
--- /dev/null
+++ b/library/intl/resources/currency/saq.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "LRD": {
+ "name": "Dola eel Liberia",
+ "symbol": "LRD"
+ },
+ "USD": {
+ "name": "Dola eel Marekani",
+ "symbol": "US$"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leoni",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "ZAR": {
+ "name": "Njilingi eel Afrika Kusini",
+ "symbol": "ZAR"
+ },
+ "DZD": {
+ "name": "Njilingi eel Aljeria",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Njilingi eel Angola",
+ "symbol": "AOA"
+ },
+ "AUD": {
+ "name": "Njilingi eel Australia",
+ "symbol": "A$"
+ },
+ "BHD": {
+ "name": "Njilingi eel Bahareni",
+ "symbol": "BHD"
+ },
+ "BWP": {
+ "name": "Njilingi eel Botswana",
+ "symbol": "BWP"
+ },
+ "MGA": {
+ "name": "Njilingi eel Bukini",
+ "symbol": "MGA"
+ },
+ "BIF": {
+ "name": "Njilingi eel Burundi",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Njilingi eel CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Njilingi eel CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "CNY": {
+ "name": "Njilingi eel China",
+ "symbol": "CNÂ¥"
+ },
+ "ERN": {
+ "name": "Njilingi eel Eritrea",
+ "symbol": "ERN"
+ },
+ "AED": {
+ "name": "Njilingi eel Falme za Kiarabu",
+ "symbol": "AED"
+ },
+ "GMD": {
+ "name": "Njilingi eel Gambia",
+ "symbol": "GMD"
+ },
+ "INR": {
+ "name": "Njilingi eel India",
+ "symbol": "₹"
+ },
+ "DJF": {
+ "name": "Njilingi eel Jibuti",
+ "symbol": "DJF"
+ },
+ "CAD": {
+ "name": "Njilingi eel Kanada",
+ "symbol": "CA$"
+ },
+ "KES": {
+ "name": "Njilingi eel Kenya",
+ "symbol": "Ksh"
+ },
+ "CVE": {
+ "name": "Njilingi eel Kepuvede",
+ "symbol": "CVE"
+ },
+ "JPY": {
+ "name": "Njilingi eel Kijapani",
+ "symbol": "JPÂ¥"
+ },
+ "KMF": {
+ "name": "Njilingi eel Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Njilingi eel Kongo",
+ "symbol": "CDF"
+ },
+ "LSL": {
+ "name": "Njilingi eel Lesoto",
+ "symbol": "LSL"
+ },
+ "LYD": {
+ "name": "Njilingi eel Libya",
+ "symbol": "LYD"
+ },
+ "MWK": {
+ "name": "Njilingi eel Malawi",
+ "symbol": "MWK"
+ },
+ "EGP": {
+ "name": "Njilingi eel Misri",
+ "symbol": "EGP"
+ },
+ "MUR": {
+ "name": "Njilingi eel Morisi",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "Njilingi eel Moritania",
+ "symbol": "MRO"
+ },
+ "MAD": {
+ "name": "Njilingi eel Moroko",
+ "symbol": "MAD"
+ },
+ "NAD": {
+ "name": "Njilingi eel Namibia",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "Njilingi eel Nijeria",
+ "symbol": "NGN"
+ },
+ "RWF": {
+ "name": "Njilingi eel Rwanda",
+ "symbol": "RWF"
+ },
+ "STD": {
+ "name": "Njilingi eel Sao Tome na Principe",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Njilingi eel Saudia",
+ "symbol": "SAR"
+ },
+ "SCR": {
+ "name": "Njilingi eel Shelisheli",
+ "symbol": "SCR"
+ },
+ "SOS": {
+ "name": "Njilingi eel Somalia",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Njilingi eel Tanzania",
+ "symbol": "TZS"
+ },
+ "TND": {
+ "name": "Njilingi eel Tunisia",
+ "symbol": "TND"
+ },
+ "UGX": {
+ "name": "Njilingi eel Uganda",
+ "symbol": "UGX"
+ },
+ "ETB": {
+ "name": "Njilingi eel Uhabeshi",
+ "symbol": "ETB"
+ },
+ "GBP": {
+ "name": "Njilingi eel Uingereza",
+ "symbol": "£"
+ },
+ "CHF": {
+ "name": "Njilingi eel Uswisi",
+ "symbol": "CHF"
+ },
+ "ZMW": {
+ "name": "Njilingi eel Zambia",
+ "symbol": "ZMW"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "SHP": {
+ "name": "Paunt eel Santahelena",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Paunt eel Sudani",
+ "symbol": "SDG"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/sbp.json b/library/intl/resources/currency/sbp.json
new file mode 100644
index 000000000..d3cde118e
--- /dev/null
+++ b/library/intl/resources/currency/sbp.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ZAR": {
+ "name": "Ihela ya Afilika Kusini",
+ "symbol": "ZAR"
+ },
+ "DZD": {
+ "name": "Ihela ya Alijeliya",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Ihela ya Angola",
+ "symbol": "AOA"
+ },
+ "AUD": {
+ "name": "Ihela ya Awusitilaliya",
+ "symbol": "A$"
+ },
+ "BHD": {
+ "name": "Ihela ya Bahaleni",
+ "symbol": "BHD"
+ },
+ "BWP": {
+ "name": "Ihela ya Botiswana",
+ "symbol": "BWP"
+ },
+ "MGA": {
+ "name": "Ihela ya Bukini",
+ "symbol": "MGA"
+ },
+ "BIF": {
+ "name": "Ihela ya Bulundi",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Ihela ya CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Ihela ya CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "ERN": {
+ "name": "Ihela ya Elitileya",
+ "symbol": "ERN"
+ },
+ "GMD": {
+ "name": "Ihela ya Gambiya",
+ "symbol": "GMD"
+ },
+ "INR": {
+ "name": "Ihela ya Indiya",
+ "symbol": "₹"
+ },
+ "JPY": {
+ "name": "Ihela ya Japani",
+ "symbol": "JPÂ¥"
+ },
+ "DJF": {
+ "name": "Ihela ya Jibuti",
+ "symbol": "DJF"
+ },
+ "CAD": {
+ "name": "Ihela ya Kanada",
+ "symbol": "CA$"
+ },
+ "KES": {
+ "name": "Ihela ya Kenya",
+ "symbol": "KES"
+ },
+ "CVE": {
+ "name": "Ihela ya Kepuvede",
+ "symbol": "CVE"
+ },
+ "KMF": {
+ "name": "Ihela ya Komolo",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Ihela ya Kongo",
+ "symbol": "CDF"
+ },
+ "LSL": {
+ "name": "Ihela ya Lesoto",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Ihela ya Libeliya",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Ihela ya Libiya",
+ "symbol": "LYD"
+ },
+ "RWF": {
+ "name": "Ihela ya Lwanda",
+ "symbol": "RWF"
+ },
+ "MWK": {
+ "name": "Ihela ya Malawi",
+ "symbol": "MWK"
+ },
+ "USD": {
+ "name": "Ihela ya Malekani",
+ "symbol": "US$"
+ },
+ "EGP": {
+ "name": "Ihela ya Misili",
+ "symbol": "EGP"
+ },
+ "MUR": {
+ "name": "Ihela ya Molisi",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "Ihela ya Molitaniya",
+ "symbol": "MRO"
+ },
+ "MAD": {
+ "name": "Ihela ya Moloko",
+ "symbol": "MAD"
+ },
+ "NAD": {
+ "name": "Ihela ya Namibiya",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "Ihela ya Nijeliya",
+ "symbol": "NGN"
+ },
+ "ZMW": {
+ "name": "Ihela ya Sambiya",
+ "symbol": "ZMW"
+ },
+ "SHP": {
+ "name": "Ihela ya Santahelena",
+ "symbol": "SHP"
+ },
+ "STD": {
+ "name": "Ihela ya Sao Tome ni Pilinsipe",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Ihela ya Sawudiya",
+ "symbol": "SAR"
+ },
+ "SCR": {
+ "name": "Ihela ya Shelisheli",
+ "symbol": "SCR"
+ },
+ "CNY": {
+ "name": "Ihela ya Shina",
+ "symbol": "CNÂ¥"
+ },
+ "AED": {
+ "name": "Ihela ya Shitwa sha Shiyalabu",
+ "symbol": "AED"
+ },
+ "SLL": {
+ "name": "Ihela ya Siela Liyoni",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "Ihela ya Somaliya",
+ "symbol": "SOS"
+ },
+ "SDG": {
+ "name": "Ihela ya Sudani",
+ "symbol": "SDG"
+ },
+ "TZS": {
+ "name": "Ihela ya Tansaniya",
+ "symbol": "TSh"
+ },
+ "TND": {
+ "name": "Ihela ya Tunisiya",
+ "symbol": "TND"
+ },
+ "UGX": {
+ "name": "Ihela ya Uganda",
+ "symbol": "UGX"
+ },
+ "ETB": {
+ "name": "Ihela ya Uhabeshi",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Ihela ya Ulaya",
+ "symbol": "€"
+ },
+ "SZL": {
+ "name": "Ihela ya Uswasi",
+ "symbol": "SZL"
+ },
+ "CHF": {
+ "name": "Ihela ya Uswisi",
+ "symbol": "CHF"
+ },
+ "GBP": {
+ "name": "Ihela ya Uwingelesa",
+ "symbol": "£"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/se.json b/library/intl/resources/currency/se.json
new file mode 100644
index 000000000..20cc838e3
--- /dev/null
+++ b/library/intl/resources/currency/se.json
@@ -0,0 +1,634 @@
+{
+ "AED": {
+ "name": "AED",
+ "symbol": "AED"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "AOA",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AUD": {
+ "name": "AUD",
+ "symbol": "A$"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BHD": {
+ "name": "BHD",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "BIF",
+ "symbol": "BIF"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BWP": {
+ "name": "BWP",
+ "symbol": "BWP"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CAD": {
+ "name": "CAD",
+ "symbol": "CA$"
+ },
+ "CDF": {
+ "name": "CDF",
+ "symbol": "CDF"
+ },
+ "CHF": {
+ "name": "CHF",
+ "symbol": "CHF"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "CNY",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CVE": {
+ "name": "CVE",
+ "symbol": "CVE"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DJF": {
+ "name": "DJF",
+ "symbol": "DJF"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "Dkr"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "DZD": {
+ "name": "DZD",
+ "symbol": "DZD"
+ },
+ "EGP": {
+ "name": "EGP",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "ERN",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "ETB",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GBP": {
+ "name": "GBP",
+ "symbol": "£"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GMD": {
+ "name": "GMD",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "INR",
+ "symbol": "₹"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "JPY": {
+ "name": "JPY",
+ "symbol": "JPÂ¥"
+ },
+ "KES": {
+ "name": "KES",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "KMF",
+ "symbol": "KMF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LRD": {
+ "name": "LRD",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "LYD",
+ "symbol": "LYD"
+ },
+ "MAD": {
+ "name": "MAD",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MGA": {
+ "name": "MGA",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MRO": {
+ "name": "MRO",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "MWK",
+ "symbol": "MWK"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "norgga kruvdno",
+ "symbol": "kr"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "SEK": {
+ "name": "ruoŧŧa kruvdno",
+ "symbol": "Skr"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SAR": {
+ "name": "SAR",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "SDG",
+ "symbol": "SDG"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SOS",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "฿"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "TND",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "TZS": {
+ "name": "TZS",
+ "symbol": "TZS"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "UGX",
+ "symbol": "UGX"
+ },
+ "USD": {
+ "name": "USD",
+ "symbol": "US$"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZAR": {
+ "name": "ZAR",
+ "symbol": "ZAR"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/seh.json b/library/intl/resources/currency/seh.json
new file mode 100644
index 000000000..119049148
--- /dev/null
+++ b/library/intl/resources/currency/seh.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Birr etíope",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "MWK": {
+ "name": "Cuacha do Maláui",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Cuacha zambiano",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Cuanza angolano",
+ "symbol": "AOA"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi de Gâmbia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinar argelino",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinar bareinita",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinar líbio",
+ "symbol": "LYD"
+ },
+ "SDG": {
+ "name": "Dinar sudanês",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "Dinar tunisiano",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirém dos Emirados Ãrabes Unidos",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirém marroquino",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobra de São Tomé e Príncipe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "Dólar australiano",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "Dólar canadense",
+ "symbol": "CA$"
+ },
+ "NAD": {
+ "name": "Dólar da Namíbia",
+ "symbol": "NAD"
+ },
+ "LRD": {
+ "name": "Dólar liberiano",
+ "symbol": "LRD"
+ },
+ "USD": {
+ "name": "Dólar norte-americano",
+ "symbol": "US$"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "Escudo cabo-verdiano",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "XOF": {
+ "name": "Franco CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Franco CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "CDF": {
+ "name": "Franco congolês",
+ "symbol": "CDF"
+ },
+ "KMF": {
+ "name": "Franco de Comores",
+ "symbol": "KMF"
+ },
+ "MGA": {
+ "name": "Franco de Madagascar",
+ "symbol": "MGA"
+ },
+ "BIF": {
+ "name": "Franco do Burundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Franco do Djibuti",
+ "symbol": "DJF"
+ },
+ "RWF": {
+ "name": "Franco ruandês",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Franco suíço",
+ "symbol": "CHF"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "JPY": {
+ "name": "Iene japonês",
+ "symbol": "JPÂ¥"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leone de Serra Leoa",
+ "symbol": "SLL"
+ },
+ "SHP": {
+ "name": "Libra de Santa Helena",
+ "symbol": "SHP"
+ },
+ "EGP": {
+ "name": "Libra egípcia",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "Libra esterlina britânica",
+ "symbol": "£"
+ },
+ "SZL": {
+ "name": "Lilangeni da Suazilândia",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti do Lesoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MZN": {
+ "name": "Metical de Moçambique",
+ "symbol": "MTn"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "NGN": {
+ "name": "Naira nigeriana",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa da Eritréia",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "MRO": {
+ "name": "Ouguiya da Mauritânia",
+ "symbol": "MRO"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pula botsuanesa",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Rand sul-africano",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Rial saudita",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "SCR": {
+ "name": "Rupia das Seychelles",
+ "symbol": "SCR"
+ },
+ "MUR": {
+ "name": "Rupia de Maurício",
+ "symbol": "MUR"
+ },
+ "INR": {
+ "name": "Rúpia indiana",
+ "symbol": "₹"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "TZS": {
+ "name": "Xelim da Tanzânia",
+ "symbol": "TZS"
+ },
+ "KES": {
+ "name": "Xelim queniano",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Xelim somali",
+ "symbol": "SOS"
+ },
+ "UGX": {
+ "name": "Xelim ugandense (1966–1987)",
+ "symbol": "UGX"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yuan Renminbi chinês",
+ "symbol": "CNÂ¥"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ses.json b/library/intl/resources/currency/ses.json
new file mode 100644
index 000000000..c75824e61
--- /dev/null
+++ b/library/intl/resources/currency/ses.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Alžeeri Dinar",
+ "symbol": "DZD"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "USD": {
+ "name": "Ameriki Dollar",
+ "symbol": "US$"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "Angoola Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BHD": {
+ "name": "Bahareen Dinar",
+ "symbol": "BHD"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BWP": {
+ "name": "Botswaana Pund",
+ "symbol": "BWP"
+ },
+ "GBP": {
+ "name": "Britin Pund",
+ "symbol": "£"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BIF": {
+ "name": "Burundi Fraŋ",
+ "symbol": "BIF"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "XOF": {
+ "name": "CFA Fraŋ (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Fraŋ (BEAC)",
+ "symbol": "FCFA"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "ETB": {
+ "name": "Ecioopi Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Eero",
+ "symbol": "€"
+ },
+ "ERN": {
+ "name": "Eritree Nafka",
+ "symbol": "ERN"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GMD": {
+ "name": "Gambi Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "ZAR": {
+ "name": "Hawasa Afriki Rand",
+ "symbol": "ZAR"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "Indu Rupii",
+ "symbol": "₹"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JPY": {
+ "name": "Jaapoŋ Yen",
+ "symbol": "JPÂ¥"
+ },
+ "DJF": {
+ "name": "Jibuuti Fraŋ",
+ "symbol": "DJF"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "CAD": {
+ "name": "Kanaada Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Kapuver Escudo",
+ "symbol": "CVE"
+ },
+ "KES": {
+ "name": "Keeniya Šiiliŋ",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "Komoor Fraŋ",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Kongo Fraŋ",
+ "symbol": "CDF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "AED": {
+ "name": "Laaraw Immaara Margantey Dirham",
+ "symbol": "AED"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leeon",
+ "symbol": "SLL"
+ },
+ "LSL": {
+ "name": "Leezoto Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberia Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Liibi Dinar",
+ "symbol": "LYD"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MAD": {
+ "name": "Maarok Dirham",
+ "symbol": "MAD"
+ },
+ "MWK": {
+ "name": "Malaawi Kwaca",
+ "symbol": "MWK"
+ },
+ "MGA": {
+ "name": "Malgaaši Fraŋ",
+ "symbol": "MGA"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "EGP": {
+ "name": "Misra Pund",
+ "symbol": "EGP"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MUR": {
+ "name": "Mooris Rupii",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "Mooritaani Ugiya",
+ "symbol": "MRO"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naajiriya Neera",
+ "symbol": "NGN"
+ },
+ "NAD": {
+ "name": "Naamibi Dollar",
+ "symbol": "NAD"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "AUD": {
+ "name": "Ostraali Dollar",
+ "symbol": "A$"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwanda Fraŋ",
+ "symbol": "RWF"
+ },
+ "STD": {
+ "name": "Sao Tome nda Prinsipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudiya Riyal",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "Seešel Rupii",
+ "symbol": "SCR"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SHP": {
+ "name": "Seŋ Helena Fraŋ",
+ "symbol": "SHP"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "CNY": {
+ "name": "Sinwa Yuan Renminbi",
+ "symbol": "CNÂ¥"
+ },
+ "SOS": {
+ "name": "Somaali Šiiliŋ",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SDG": {
+ "name": "Suudaŋ Dinar",
+ "symbol": "SDG"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "CHF": {
+ "name": "Swisu Fraŋ",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "TZS": {
+ "name": "Tanzaani Šiiliŋ",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunizi Dinar",
+ "symbol": "TND"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "Uganda Šiiliŋ",
+ "symbol": "UGX"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambi Kwaca",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/sg.json b/library/intl/resources/currency/sg.json
new file mode 100644
index 000000000..051bbdb34
--- /dev/null
+++ b/library/intl/resources/currency/sg.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "MGA": {
+ "name": "ariâri tî Madagasikära",
+ "symbol": "MGA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "bir tî Etiopïi",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "dalasi tî gambïi",
+ "symbol": "GMD"
+ },
+ "LYD": {
+ "name": "dinäar tî Libïi",
+ "symbol": "LYD"
+ },
+ "TND": {
+ "name": "dinära tî Tunizïi",
+ "symbol": "TND"
+ },
+ "DZD": {
+ "name": "dinäri tî Alzerïi",
+ "symbol": "DZD"
+ },
+ "AED": {
+ "name": "dirâm tî âEmirâti tî Arâbo Ôko",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dirâm tî Marôko",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "dôbra tî Sâô Tomë na Prinsîpe",
+ "symbol": "STD"
+ },
+ "USD": {
+ "name": "dol$ara ttî äLetäa-Ôko tî Amerîka",
+ "symbol": "US$"
+ },
+ "CAD": {
+ "name": "dolära tî kanadäa",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "dolära tî Liberïa",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "dolära tî Namibïi",
+ "symbol": "NAD"
+ },
+ "AUD": {
+ "name": "dolära tî Ostralïi",
+ "symbol": "A$"
+ },
+ "BHD": {
+ "name": "dolùara tî Bahrâina",
+ "symbol": "BHD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "eskûêdo tî Kâpo-Vêre",
+ "symbol": "CVE"
+ },
+ "XOF": {
+ "name": "farânga CFA (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "farânga CFA (BEAC)",
+ "symbol": "FCFA"
+ },
+ "BIF": {
+ "name": "farânga tî Burundïi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "farânga tî Dibutïi",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "farânga tî Kömôro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "farânga tî Kongöo",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "farânga tî Ruandäa",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "farânga tî Sûîsi",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "AOA": {
+ "name": "kwânza tî Angoläa",
+ "symbol": "AOA"
+ },
+ "MWK": {
+ "name": "kwâtia tî Malawïi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kwâtia tî Zambïi",
+ "symbol": "ZMW"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "leône tî Sierâ-Leône",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "lilangùeni tî Swazïlânde",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "loti tî Lesôtho",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "nâîra tî Nizerïa",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakafa tî Eritrëe",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "GBP": {
+ "name": "pôndo tî Anglëe",
+ "symbol": "£"
+ },
+ "EGP": {
+ "name": "pôndo tî Kâmitâ",
+ "symbol": "EGP"
+ },
+ "SDG": {
+ "name": "pôndo tî Sudäan",
+ "symbol": "SDG"
+ },
+ "SHP": {
+ "name": "pôndo tî Zûâ Sênt-Helêna",
+ "symbol": "SHP"
+ },
+ "BWP": {
+ "name": "pûla tî Botswana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "rânde tî Mbongo-Afrîka",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "riâli tî Saûdi Arabïi",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "rupïi tî Ênnde",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "rupïi tî Mörîsi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "rupïi tî Sëyshêle",
+ "symbol": "SCR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "shilîngi tî Kenyäa",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "shilîngi tî Somalïi",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "shilîngi tî Tanzanïi",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "shilîngi tî Ugandäa",
+ "symbol": "UGX"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "ugîya tî Moritanïi",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "JPY": {
+ "name": "yêni tî Zapön",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "yuan renminbi tî Shîni",
+ "symbol": "CNÂ¥"
+ },
+ "EUR": {
+ "name": "zoröo",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/shi-Latn.json b/library/intl/resources/currency/shi-Latn.json
new file mode 100644
index 000000000..5eb2b53d7
--- /dev/null
+++ b/library/intl/resources/currency/shi-Latn.json
@@ -0,0 +1,634 @@
+{
+ "BWP": {
+ "name": "abula n butswana",
+ "symbol": "BWP"
+ },
+ "KES": {
+ "name": "acilin n kinya",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "acilin n ṣṣumal",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "acilin n ṭanẓanya",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "acilin n uɣanda",
+ "symbol": "UGX"
+ },
+ "BHD": {
+ "name": "adinar n bḥrayn",
+ "symbol": "BHD"
+ },
+ "DZD": {
+ "name": "adinar n dzayr",
+ "symbol": "DZD"
+ },
+ "LYD": {
+ "name": "adinar n libya",
+ "symbol": "LYD"
+ },
+ "SDG": {
+ "name": "adinar n ssudan",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "adinar n tuns",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "adrim n limarat",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "adrim n lmɣrib",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "adubra n saná¹­umi",
+ "symbol": "STD"
+ },
+ "USD": {
+ "name": "adular n iwunak imunn",
+ "symbol": "US$"
+ },
+ "CAD": {
+ "name": "adular n kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "adular n libirya",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "adular n namibya",
+ "symbol": "NAD"
+ },
+ "AUD": {
+ "name": "adular n ustralya",
+ "symbol": "A$"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "RWF": {
+ "name": "afrank n rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "afrank n swisra",
+ "symbol": "CHF"
+ },
+ "GBP": {
+ "name": "ajnih astrlini n nngliz",
+ "symbol": "£"
+ },
+ "EGP": {
+ "name": "ajnih n miṣṛ",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "ajnih n santilin",
+ "symbol": "SHP"
+ },
+ "ZMW": {
+ "name": "akwaca n zambya",
+ "symbol": "ZMW"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ZAR": {
+ "name": "arand n afriqya n iffus",
+ "symbol": "ZAR"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "INR": {
+ "name": "arubi n lhind",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "arubi n muris",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "arubi n ssicil",
+ "symbol": "SCR"
+ },
+ "SAR": {
+ "name": "aryal n ssaɛudiya",
+ "symbol": "SAR"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "CNY": {
+ "name": "ayan n ccinwa",
+ "symbol": "CNÂ¥"
+ },
+ "JPY": {
+ "name": "ayan n lyaban",
+ "symbol": "JPÂ¥"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "bir n ityubya",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "dalasi n gambya",
+ "symbol": "GMD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "BIF": {
+ "name": "frank n burundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "frank n djibuti",
+ "symbol": "DJF"
+ },
+ "CDF": {
+ "name": "frank n kungu",
+ "symbol": "CDF"
+ },
+ "MGA": {
+ "name": "frank n madaɣacqar",
+ "symbol": "MGA"
+ },
+ "KMF": {
+ "name": "frank n qumuá¹›",
+ "symbol": "KMF"
+ },
+ "XAF": {
+ "name": "frank á¹£ifa",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "frank á¹£ifa bisaw",
+ "symbol": "CFA"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "CVE": {
+ "name": "iskudu n kabbirdi",
+ "symbol": "CVE"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "kwaca n malawi",
+ "symbol": "MWK"
+ },
+ "AOA": {
+ "name": "kwanza n angula",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SZL": {
+ "name": "lilanjini",
+ "symbol": "SZL"
+ },
+ "SLL": {
+ "name": "liyun",
+ "symbol": "SLL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "luti n liá¹£uá¹­u",
+ "symbol": "LSL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "ERN": {
+ "name": "nafka n iritirya",
+ "symbol": "ERN"
+ },
+ "NGN": {
+ "name": "nayra n nijirya",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "uqiyya n muá¹›iá¹­anya",
+ "symbol": "MRO"
+ },
+ "EUR": {
+ "name": "uru",
+ "symbol": "€"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/shi.json b/library/intl/resources/currency/shi.json
new file mode 100644
index 000000000..51578e02c
--- /dev/null
+++ b/library/intl/resources/currency/shi.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "BWP": {
+ "name": "ⴰⴱⵓâµâ´° ⵠⴱⵓⵜⵙⵡⴰâµâ´°",
+ "symbol": "BWP"
+ },
+ "BHD": {
+ "name": "ⴰⴷⵉâµâ´°âµ” ⵠⴱⵃⵔⴰⵢâµ",
+ "symbol": "BHD"
+ },
+ "DZD": {
+ "name": "ⴰⴷⵉâµâ´°âµ” ⵠⴷⵣⴰⵢⵔ",
+ "symbol": "DZD"
+ },
+ "LYD": {
+ "name": "ⴰⴷⵉâµâ´°âµ” âµ âµâµ‰â´±âµ¢â´°",
+ "symbol": "LYD"
+ },
+ "SDG": {
+ "name": "ⴰⴷⵉâµâ´°âµ” ⵠⵙⵙⵓⴷⴰâµ",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "ⴰⴷⵉâµâ´°âµ” ⵠⵜⵓâµâµ™",
+ "symbol": "TND"
+ },
+ "STD": {
+ "name": "ⴰⴷⵓⴱⵔⴰ ⵠⵙⴰâµâµŸâµ“ⵎⵉ",
+ "symbol": "STD"
+ },
+ "CAD": {
+ "name": "ⴰⴷⵓâµâ´°âµ” ⵠⴽⴰâµâ´°â´·â´°",
+ "symbol": "CA$"
+ },
+ "USD": {
+ "name": "ⴰⴷⵓâµâ´°âµ” ⵠⵉⵡⵓâµâ´°â´½ ⵉⵎⵓâµâµ",
+ "symbol": "US$"
+ },
+ "LRD": {
+ "name": "ⴰⴷⵓâµâ´°âµ” âµ âµâµ‰â´±âµ‰âµ”ⵢⴰ",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "ⴰⴷⵓâµâ´°âµ” âµ âµâ´°âµŽâµ‰â´±âµ¢â´°",
+ "symbol": "NAD"
+ },
+ "AUD": {
+ "name": "ⴰⴷⵓâµâ´°âµ” ⵠⵓⵙⵜⵔⴰâµâµ¢â´°",
+ "symbol": "A$"
+ },
+ "AED": {
+ "name": "ⴰⴷⵔⵉⵎ âµ âµâµ‰âµŽâ´°âµ”ⴰⵜ",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "ⴰⴷⵔⵉⵎ âµ âµâµŽâµ–ⵔⵉⴱ",
+ "symbol": "MAD"
+ },
+ "RWF": {
+ "name": "ⴰⴼⵔⴰâµâ´½ ⵠⵔⵡⴰâµâ´·â´°",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "ⴰⴼⵔⴰâµâ´½ ⵠⵙⵡⵉⵙⵔⴰ",
+ "symbol": "CHF"
+ },
+ "ZMW": {
+ "name": "ⴰⴽⵡⴰⵛⴰ ⵠⵣⴰⵎⴱⵢⴰ",
+ "symbol": "ZMW"
+ },
+ "GBP": {
+ "name": "ⴰⵊâµâµ‰âµ€ ⴰⵙⵜⵔâµâµ‰âµâµ‰ âµ âµâµâ´³âµâµ‰âµ£",
+ "symbol": "£"
+ },
+ "EGP": {
+ "name": "ⴰⵊâµâµ‰âµ€ ⵠⵎⵉⵚⵕ",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "ⴰⵊâµâµ‰âµ€ ⵠⵙⴰâµâµœâµ‰âµâµ‰âµ",
+ "symbol": "SHP"
+ },
+ "ZAR": {
+ "name": "ⴰⵔⴰâµâ´· ⵠⴰⴼⵔⵉⵇⵢⴰ ⵠⵉⴼⴼⵓⵙ",
+ "symbol": "ZAR"
+ },
+ "INR": {
+ "name": "ⴰⵔⵓⴱⵉ âµ âµâµ€âµ‰âµâ´·",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "ⴰⵔⵓⴱⵉ ⵠⵎⵓⵔⵉⵙ",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "ⴰⵔⵓⴱⵉ ⵠⵙⵙⵉⵛⵉâµ",
+ "symbol": "SCR"
+ },
+ "SAR": {
+ "name": "ⴰⵔⵢⴰⵠⵠⵙⵙⴰⵄⵓⴷⵉⵢⴰ",
+ "symbol": "SAR"
+ },
+ "KES": {
+ "name": "ⴰⵛⵉâµâµ‰âµ ⵠⴽⵉâµâµ¢â´°",
+ "symbol": "KES"
+ },
+ "UGX": {
+ "name": "ⴰⵛⵉâµâµ‰âµ ⵠⵓⵖⴰâµâ´·â´°",
+ "symbol": "UGX"
+ },
+ "SOS": {
+ "name": "ⴰⵛⵉâµâµ‰âµ ⵠⵚⵚⵓⵎⴰâµ",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "ⴰⵛⵉâµâµ‰âµ ⵠⵟⴰâµâµ¥â´°âµâµ¢â´°",
+ "symbol": "TZS"
+ },
+ "JPY": {
+ "name": "ⴰⵢⴰⵠⵠâµâµ¢â´°â´±â´°âµ",
+ "symbol": "JPÂ¥"
+ },
+ "CNY": {
+ "name": "ⴰⵢⴰⵠⵠⵛⵛⵉâµâµ¡â´°",
+ "symbol": "CNÂ¥"
+ },
+ "ETB": {
+ "name": "ⴱⵉⵔ ⵠⵉⵜⵢⵓⴱⵢⴰ",
+ "symbol": "ETB"
+ },
+ "GMD": {
+ "name": "â´·â´°âµâ´°âµ™âµ‰ ⵠⴳⴰⵎⴱⵢⴰ",
+ "symbol": "GMD"
+ },
+ "BIF": {
+ "name": "ⴼⵔⴰâµâ´½ ⵠⴱⵓⵔⵓâµâ´·âµ‰",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "ⴼⵔⴰâµâ´½ ⵠⴷⵊⵉⴱⵓⵜⵉ",
+ "symbol": "DJF"
+ },
+ "CDF": {
+ "name": "ⴼⵔⴰâµâ´½ ⵠⴽⵓâµâ´³âµ“",
+ "symbol": "CDF"
+ },
+ "KMF": {
+ "name": "ⴼⵔⴰâµâ´½ ⵠⵇⵓⵎⵓⵕ",
+ "symbol": "KMF"
+ },
+ "MGA": {
+ "name": "ⴼⵔⴰâµâ´½ ⵠⵎⴰⴷⴰⵖⴰⵛⵇⴰⵔ",
+ "symbol": "MGA"
+ },
+ "XAF": {
+ "name": "ⴼⵔⴰâµâ´½ ⵚⵉⴼⴰ",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "ⴼⵔⴰâµâ´½ ⵚⵉⴼⴰ ⴱⵉⵙⴰⵡ",
+ "symbol": "CFA"
+ },
+ "AOA": {
+ "name": "ⴽⵡⴰâµâµ£â´° âµ â´°âµâ´³âµ“âµâ´°",
+ "symbol": "AOA"
+ },
+ "MWK": {
+ "name": "ⴽⵡⴰⵛⴰ ⵠⵎⴰâµâ´°âµ¡âµ‰",
+ "symbol": "MWK"
+ },
+ "CVE": {
+ "name": "ⵉⵙⴽⵓⴷⵓ ⵠⴽⴰⴱⴱⵉⵔⴷⵉ",
+ "symbol": "CVE"
+ },
+ "SZL": {
+ "name": "âµâµ‰âµâ´°âµâµŠâµ‰âµâµ‰",
+ "symbol": "SZL"
+ },
+ "SLL": {
+ "name": "âµâµ‰âµ¢âµ“âµ",
+ "symbol": "SLL"
+ },
+ "LSL": {
+ "name": "âµâµ“ⵜⵉ âµ âµâµ‰âµšâµ“ⵟⵓ",
+ "symbol": "LSL"
+ },
+ "ERN": {
+ "name": "âµâ´°â´¼â´½â´° ⵠⵉⵔⵉⵜⵉⵔⵢⴰ",
+ "symbol": "ERN"
+ },
+ "NGN": {
+ "name": "âµâ´°âµ¢âµ”â´° âµ âµâµ‰âµŠâµ‰âµ”ⵢⴰ",
+ "symbol": "NGN"
+ },
+ "MRO": {
+ "name": "ⵓⵇⵉⵢⵢⴰ ⵠⵎⵓⵕⵉⵟⴰâµâµ¢â´°",
+ "symbol": "MRO"
+ },
+ "EUR": {
+ "name": "ⵓⵔⵓ",
+ "symbol": "€"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/si.json b/library/intl/resources/currency/si.json
new file mode 100644
index 000000000..49143a06d
--- /dev/null
+++ b/library/intl/resources/currency/si.json
@@ -0,0 +1,634 @@
+{
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "ISK": {
+ "name": "අයිස්ලන්තික ක්â€à¶»à·à¶±à·",
+ "symbol": "ISK"
+ },
+ "AWG": {
+ "name": "අරූබà·à¶±à·” ෆ්ලà·à¶»à·’න්",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "අසර්බයිජà·à¶±à·” මනà·à¶§à·Š",
+ "symbol": "AZN"
+ },
+ "ARS": {
+ "name": "ආර්ජන්ටින෠පෙසà·",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "ආර්මේනියà·à¶±à·” ඩ්â€à¶»à·‘ම්",
+ "symbol": "AMD"
+ },
+ "AOA": {
+ "name": "ඇන්ගà·à¶½à·à¶±à·” ක්වන්සà·",
+ "symbol": "AOA"
+ },
+ "USD": {
+ "name": "ඇමරිකà·à¶±à·” ඩොලර්",
+ "symbol": "US$"
+ },
+ "DZD": {
+ "name": "ඇල්ගේරියà·à¶±à·” ඩිනà·à¶»à·Š",
+ "symbol": "DZD"
+ },
+ "ALL": {
+ "name": "ඇල්බේනියà·à¶±à·” ලෙක්",
+ "symbol": "ALL"
+ },
+ "AFN": {
+ "name": "ඇෆ්ගනිථà·à¶± ඇෆ්ගනි",
+ "symbol": "AFN"
+ },
+ "ETB": {
+ "name": "ඉතියà·à¶´à·’යà·à¶±à·” බීර්",
+ "symbol": "ETB"
+ },
+ "INR": {
+ "name": "ඉන්දියà·à¶±à·” රුපියල්",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "ඉන්දුනීසියà·à¶±à·” රුපියà·",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "ඉරà·à¶š ඩිනà·à¶»à·Š",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "ඉරà·à¶± රියà·à¶½à·Š",
+ "symbol": "IRR"
+ },
+ "EGP": {
+ "name": "ඊජිප්තු පවුම්",
+ "symbol": "EGP"
+ },
+ "ILS": {
+ "name": "ඊà·à·Šâ€à¶»à·à¶ºà¶½ නව à·à·™à¶šà¶½à·Š",
+ "symbol": "₪"
+ },
+ "UGX": {
+ "name": "උගන්ඩ෠à·à·’ලිං",
+ "symbol": "UGX"
+ },
+ "KPW": {
+ "name": "උතුරු කොරියà·à¶±à·” වොන්",
+ "symbol": "KPW"
+ },
+ "UYU": {
+ "name": "උරුගුවේ පෙසà·",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "උස්බෙකිස්ථà·à¶± සම්",
+ "symbol": "UZS"
+ },
+ "AED": {
+ "name": "එක්සත් අරà·à¶¶à·’ එමිරේට්ස් ඩිරà·à¶¸à·Š",
+ "symbol": "AED"
+ },
+ "ERN": {
+ "name": "එරිත්â€à¶»à·’යà·à¶±à·” නà·à¶šà·Šà·†à·",
+ "symbol": "ERN"
+ },
+ "AUD": {
+ "name": "ඔස්ට්â€à¶»à·šà¶½à·’යà·à¶±à·” ඩොලර්",
+ "symbol": "A$"
+ },
+ "OMR": {
+ "name": "ඕමà·à¶±à·Š රියà·à¶½à·Š",
+ "symbol": "OMR"
+ },
+ "QAR": {
+ "name": "කටà·à¶»à·Š රියà·à¶½à·Š",
+ "symbol": "QAR"
+ },
+ "KZT": {
+ "name": "කසකස්ථà·à¶± ටෙන්ග",
+ "symbol": "KZT"
+ },
+ "KHR": {
+ "name": "කà·à¶¸à·Šà¶¶à·à¶¢ රියේල්",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "කà·à¶±à·šà¶©à·’යà·à¶±à·” ඩොලර්",
+ "symbol": "CA$"
+ },
+ "CUP": {
+ "name": "කියුබà·à¶±à·” පà·à·ƒà·",
+ "symbol": "CUP"
+ },
+ "KGS": {
+ "name": "කිරිගිස්ථà·à¶± සම්",
+ "symbol": "KGS"
+ },
+ "KWD": {
+ "name": "කුවේට් ඩිනà·à¶»à·Š",
+ "symbol": "KWD"
+ },
+ "KES": {
+ "name": "කෙන්යà·à¶±à·” à·à·’ලිං",
+ "symbol": "KES"
+ },
+ "CVE": {
+ "name": "කේප් වර්ඩ් එස්කියුඩà·",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "කේමන් දූපත් ඩොලර්",
+ "symbol": "KYD"
+ },
+ "CDF": {
+ "name": "කොංග෠ෆ්â€à¶»à·‘න්ක්",
+ "symbol": "CDF"
+ },
+ "KMF": {
+ "name": "කොමොරියà·à¶±à·” ෆ්â€à¶»à·‘න්ක්",
+ "symbol": "KMF"
+ },
+ "COP": {
+ "name": "කොලොම්බියà·à¶±à·” පෙසà·",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "කොස්ට රික෠කොලà·à¶±à·Š",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "ක්â€à¶»à·œà¶’ෂියà·à¶±à·” කූනà·",
+ "symbol": "HRK"
+ },
+ "GYD": {
+ "name": "ගයන෠ඩොලර්",
+ "symbol": "GYD"
+ },
+ "GMD": {
+ "name": "ගà·à¶¸à·Šà¶¶à·’යà·à¶±à·” දලà·à·ƒà·’",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "ගිනියà·à¶±à·” ෆ්රෑන්ක්",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "ගà·à¶­à¶¸à·à¶½à·à¶±à·” ක්වෙට්සල්",
+ "symbol": "GTQ"
+ },
+ "GHS": {
+ "name": "à¶à·à¶±à· සෙඩි",
+ "symbol": "GHS"
+ },
+ "CLP": {
+ "name": "චිලි පà·à·ƒà·",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "චීන යුආන්",
+ "symbol": "CNÂ¥"
+ },
+ "CZK": {
+ "name": "චෙක් රිපබ්ලික් කොරූනà·",
+ "symbol": "CZK"
+ },
+ "JPY": {
+ "name": "ජපන් යෙන්",
+ "symbol": "JPÂ¥"
+ },
+ "JMD": {
+ "name": "ජà·à¶¸à·™à¶ºà·’කà·à¶±à·” ඩොලර්",
+ "symbol": "JMD"
+ },
+ "DJF": {
+ "name": "ජිබූති ෆ්â€à¶»à·‘න්ක්",
+ "symbol": "DJF"
+ },
+ "GIP": {
+ "name": "ජිබ්â€à¶»à·à¶½à·Šà¶§à· පවුම්",
+ "symbol": "GIP"
+ },
+ "GEL": {
+ "name": "ජà·à¶¢à·’යà·à¶±à·” ලà·à¶»à·“",
+ "symbol": "GEL"
+ },
+ "JOD": {
+ "name": "ජà·à¶»à·Šà¶¯à·à¶±à·Š ඩිනà·à¶»à·Š",
+ "symbol": "JOD"
+ },
+ "TZS": {
+ "name": "ටà·à¶±à·Šà·ƒà·à¶±à·’යà·à¶±à·” à·à·’ලිං",
+ "symbol": "TZS"
+ },
+ "TND": {
+ "name": "ටියුනීසියà·à¶±à·” ඩිනà·à¶»à·Š",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "ටොංගà·à¶±à·” පà·à¶±à·Šà¶œà·",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "ට්â€à¶»à·’නිඩෑඩ් සහ ටොබෑග෠ඩොලර්",
+ "symbol": "TTD"
+ },
+ "DKK": {
+ "name": "ඩà·à¶±à·’à·‚à·Š ක්â€à¶»à·à¶±à·Š",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "ඩොමිනිකà·à¶±à·” පෙසà·",
+ "symbol": "DOP"
+ },
+ "TMT": {
+ "name": "තක්මෙනිස්ථà·à¶± මනà·à¶§à·Š",
+ "symbol": "TMT"
+ },
+ "TJS": {
+ "name": "තජිකිස්ථà·à¶± සමොනි",
+ "symbol": "TJS"
+ },
+ "THB": {
+ "name": "තà·à¶ºà·’ බà·à¶­à·Š",
+ "symbol": "฿"
+ },
+ "TRY": {
+ "name": "තුර්කි ලිරà·",
+ "symbol": "TRY"
+ },
+ "ZAR": {
+ "name": "දකුණු අප්â€à¶»à·’කà·à¶±à·” රà·à¶±à·Šà¶©à·Š",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "දකුණු කොරියà·à¶±à·” වොන්",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "දකුණු සුඩà·à¶± පවුම්",
+ "symbol": "SSP"
+ },
+ "NGN": {
+ "name": "නයිජීරියà·à¶±à·” නයිරà·",
+ "symbol": "NGN"
+ },
+ "TWD": {
+ "name": "නව තà·à¶ºà·’à·€à·à¶± ඩොලර්",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "නවසීලන්ත ඩොලර්",
+ "symbol": "NZ$"
+ },
+ "XCD": {
+ "name": "නà·à¶œà·™à¶±à·„ිර කà·à¶»à·’බියà·à¶±à·” ඩොලර්",
+ "symbol": "EC$"
+ },
+ "NAD": {
+ "name": "නà·à¶¸à·“බියà·à¶±à·” ඩොලර්",
+ "symbol": "NAD"
+ },
+ "NIO": {
+ "name": "නිකරගුවà·à¶±à·” කොඩà·à¶¶à·",
+ "symbol": "NIO"
+ },
+ "ANG": {
+ "name": "නෙදර්ලන්ත ඇන්ටිලියන් ගිල්ඩර්",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "නේපà·à¶½ රුපියල්",
+ "symbol": "NPR"
+ },
+ "NOK": {
+ "name": "නොර්වීජියන් ක්â€à¶»à·à¶±à·Š",
+ "symbol": "NOK"
+ },
+ "PKR": {
+ "name": "පà·à¶šà·’ස්ථà·à¶± රුපියල්",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "පà·à¶±à¶¸à· බà·à¶½à·Šà¶¶à·",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "පà·à¶´à·”ව෠නිව් ගිනියà·à¶±à·” කිනà·",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "පà·à¶»à¶œà·”වේ ගුවරà·à¶±à·’",
+ "symbol": "PYG"
+ },
+ "PHP": {
+ "name": "පිලිපීන පෙසà·",
+ "symbol": "PHP"
+ },
+ "PEN": {
+ "name": "පේරු නියුව෠සොල්",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "පොලිෂ් ස්ලොටි",
+ "symbol": "PLN"
+ },
+ "XPF": {
+ "name": "ප්â€à¶»à¶‚෠පොලිනීසියà·à¶±à·” ෆ්â€à¶»à·‘න්ක්",
+ "symbol": "CFPF"
+ },
+ "BDT": {
+ "name": "බංග්ලà·à¶¯à·šà·à·Š ටකà·",
+ "symbol": "BDT"
+ },
+ "BMD": {
+ "name": "බර්මියුඩà·à¶±à·” ඩොලර්",
+ "symbol": "BMD"
+ },
+ "BGN": {
+ "name": "බල්ගේරියà·à¶±à·” ලිව්",
+ "symbol": "BGN"
+ },
+ "BSD": {
+ "name": "බහමà·à¶±à·” ඩොලර්",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "බහරේන් ඩිනà·à¶»à·Š",
+ "symbol": "BHD"
+ },
+ "BBD": {
+ "name": "බà·à¶¶à·šà¶©à·’යà·à¶±à·” ඩොලර්",
+ "symbol": "BBD"
+ },
+ "BIF": {
+ "name": "බුරුන්දි ෆ්â€à¶»à·‘න්ක්",
+ "symbol": "BIF"
+ },
+ "MMK": {
+ "name": "බුරුම ක්යà·à¶§à·Š",
+ "symbol": "MMK"
+ },
+ "BND": {
+ "name": "බෘනà·à¶ºà·’ ඩොලර්",
+ "symbol": "BND"
+ },
+ "BYR": {
+ "name": "බෙලරූස් රූබල්",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "බෙලීස් ඩොලර්",
+ "symbol": "BZD"
+ },
+ "BWP": {
+ "name": "බොට්ස්වà·à¶±à· පුලà·",
+ "symbol": "BWP"
+ },
+ "BOB": {
+ "name": "බොලිවියà·à¶±à·” බොලිවියà·à¶±à·",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "බොස්නිය෠හර්සගොවීන෠පරිවර්ත්â€à¶º මà·à¶»à·Šà¶šà·Š",
+ "symbol": "BAM"
+ },
+ "BRL": {
+ "name": "බ්â€à¶»à·ƒà·“ල රියල්",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "බ්â€à¶»à·’තà·à¶±à·Šâ€à¶º ස්ටර්ලින් පවුම්",
+ "symbol": "£"
+ },
+ "BTN": {
+ "name": "භූතà·à¶± නගුල්ට්â€à¶»à¶¸à·Š",
+ "symbol": "BTN"
+ },
+ "MGA": {
+ "name": "මලගà·à·ƒà·’ අරියà·à¶»à·’",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "මලà·à·€à·’ ක්වà·à¶ à·",
+ "symbol": "MWK"
+ },
+ "CUC": {
+ "name": "මà·à¶»à·”කළ à·„à·à¶šà·’ කියුබà·à¶±à·” පà·à·ƒà·",
+ "symbol": "CUC"
+ },
+ "MVR": {
+ "name": "මà·à¶½à¶¯à·’වයින් රුෆියà·",
+ "symbol": "MVR"
+ },
+ "MOP": {
+ "name": "මà·à¶šà¶±à·“ස් පටකà·",
+ "symbol": "MOP"
+ },
+ "MYR": {
+ "name": "මà·à¶½à·šà·ƒà·’යà·à¶±à·” රින්ගිට්",
+ "symbol": "MYR"
+ },
+ "MKD": {
+ "name": "මà·à·ƒà¶©à·à¶±à·’යà·à¶±à·” ඩිනà·à¶»à·Š",
+ "symbol": "MKD"
+ },
+ "MUR": {
+ "name": "මුරිසියà·à¶±à·” රුපියල්",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "මුරුසි ඔයිගුයියà·",
+ "symbol": "MRO"
+ },
+ "MXN": {
+ "name": "මෙක්සිකà·à¶±à·” ඩොලර්",
+ "symbol": "MX$"
+ },
+ "MNT": {
+ "name": "මොන්ගà·à¶½à·’යà·à¶±à·” ටග්â€à¶»à·’ක්",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "මොරොක්ක෠ඩිර්හà·à¶¸à·Š",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "මොසà·à¶¸à·Šà¶¶à·’කන් මෙටිකල්",
+ "symbol": "MZN"
+ },
+ "MDL": {
+ "name": "මà·à¶½à·Šà¶©à·à·€à·à¶±à·” ලෙව්",
+ "symbol": "MDL"
+ },
+ "UAH": {
+ "name": "යුක්රේන à·„à·Šâ€à¶»à·’ව්නියà·",
+ "symbol": "UAH"
+ },
+ "EUR": {
+ "name": "යුරà·",
+ "symbol": "€"
+ },
+ "YER": {
+ "name": "යේමන රියà·à¶½à·Š",
+ "symbol": "YER"
+ },
+ "RWF": {
+ "name": "රුවන්ඩ෠ෆ්â€à¶»à·‘න්ක්",
+ "symbol": "RWF"
+ },
+ "RUB": {
+ "name": "රුසියන් රූබල්",
+ "symbol": "RUB"
+ },
+ "RON": {
+ "name": "රොමේනියà·à¶±à·” ලෙව්",
+ "symbol": "RON"
+ },
+ "LRD": {
+ "name": "ලයිබේරියà·à¶±à·” ඩොලර්",
+ "symbol": "LRD"
+ },
+ "LAK": {
+ "name": "ලà·à¶•à·ƒà·Š කිප්",
+ "symbol": "LAK"
+ },
+ "LTL": {
+ "name": "ලිතුවේනියà·à¶±à·”",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "ලිබියà·à¶±à·” ඩිනà·à¶»à·Š",
+ "symbol": "LYD"
+ },
+ "LBP": {
+ "name": "ලෙබනන පවුම්",
+ "symbol": "LBP"
+ },
+ "VUV": {
+ "name": "වනුවà·à¶§à·” à·€à·à¶§à·”",
+ "symbol": "VUV"
+ },
+ "VND": {
+ "name": "වියට්නà·à¶¸ ඩොන්",
+ "symbol": "â‚«"
+ },
+ "VEF": {
+ "name": "වෙනිසියුලà·à¶±à·” බොලිවර්",
+ "symbol": "VEF"
+ },
+ "SHP": {
+ "name": "à·à·à¶±à·Šà¶­ හෙලේන෠පවුම්",
+ "symbol": "SHP"
+ },
+ "LKR": {
+ "name": "à·à·Šâ€à¶»à·“ ලංක෠රුපියල",
+ "symbol": "රු."
+ },
+ "RSD": {
+ "name": "සර්බියà·à¶±à·” ඩිනà·à¶»à·Š",
+ "symbol": "RSD"
+ },
+ "SAR": {
+ "name": "සවුදි රියà·à¶½à·Š",
+ "symbol": "SAR"
+ },
+ "STD": {
+ "name": "à·ƒà·à¶• තà·à¶¸à·Š සහ ප්â€à¶»à·’න්සිප් දොබ්â€à¶»à·",
+ "symbol": "STD"
+ },
+ "WST": {
+ "name": "à·ƒà·à¶¸à·à·€à· ටà·à¶½à·",
+ "symbol": "WST"
+ },
+ "ZMW": {
+ "name": "à·ƒà·à¶¸à·Šà¶¶à·’යà·à¶±à·” ක්වà·à¶ à·",
+ "symbol": "ZMW"
+ },
+ "SGD": {
+ "name": "සිංගප්පූරු ඩොලර්",
+ "symbol": "SGD"
+ },
+ "SLL": {
+ "name": "සියර෠ලියොන් ලියොන්",
+ "symbol": "SLL"
+ },
+ "SYP": {
+ "name": "සිරියà·à¶±à·” පවුම්",
+ "symbol": "SYP"
+ },
+ "XAF": {
+ "name": "සිෆ්එ ෆ්රෑන්ක් බිඊඑසි",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "සිෆ්එ ෆ්රෑන්ක් බිසීඊඑඔ",
+ "symbol": "සිෆ්එ"
+ },
+ "SCR": {
+ "name": "සීෂෙලියà·à¶±à·” රුපියල",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "සුඩà·à¶± පවුම්",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "සුරිනà·à¶¸à·Š ඩොලර්",
+ "symbol": "SRD"
+ },
+ "SBD": {
+ "name": "සොලමන් දූපත් ඩොලර්",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "à·ƒà·à¶¸à·à¶½à·’යà·à¶±à·” à·à·’ලිං",
+ "symbol": "SOS"
+ },
+ "SZL": {
+ "name": "ස්වà·à·ƒà·’ ලිලන්ජනි",
+ "symbol": "SZL"
+ },
+ "CHF": {
+ "name": "ස්විස් ෆ්â€à¶»à·‘න්ක්",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "ස්වෙඩිෂ් ක්â€à¶»à·à¶±à·",
+ "symbol": "SEK"
+ },
+ "HUF": {
+ "name": "හංගේරියà·à¶±à·” ෆරින්ට්",
+ "symbol": "HUF"
+ },
+ "HTG": {
+ "name": "හයිටි ගà·à¶»à·Šà¶©à·Š",
+ "symbol": "HTG"
+ },
+ "HKD": {
+ "name": "හොංකොං ඩොලර්",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "හොන්ඩුරà·à¶±à·” ලෙම්පිරà·",
+ "symbol": "HNL"
+ },
+ "FJD": {
+ "name": "ෆිජියන් ඩොලර්",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "à·†à·à¶šà·Šà¶½à¶±à·Šà¶©à·Š දූපත් පවුම්",
+ "symbol": "FKP"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/sk.json b/library/intl/resources/currency/sk.json
new file mode 100644
index 000000000..18ee29641
--- /dev/null
+++ b/library/intl/resources/currency/sk.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afganský afgání",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "albánsky lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "alžírsky dinár",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "americký dolár",
+ "symbol": "USD"
+ },
+ "AOA": {
+ "name": "angolská kwanza",
+ "symbol": "AOA"
+ },
+ "ANG": {
+ "name": "antilský gulden",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "argentínske peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "arménsky dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "arubský gulden",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "austrálsky dolár",
+ "symbol": "AUD"
+ },
+ "AZN": {
+ "name": "azerbajdžanský manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "bahamský dolár",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "bahrajnský dinár",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "bangladéšska taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "barbadoský dolár",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "belizský dolár",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "bermudský dolár",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "bhutánsky ngultrum",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "bieloruský rubeľ",
+ "symbol": "BYR"
+ },
+ "BOB": {
+ "name": "bolívijské boliviano",
+ "symbol": "BOB"
+ },
+ "BWP": {
+ "name": "botswanská pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "brazílsky real",
+ "symbol": "BRL"
+ },
+ "GBP": {
+ "name": "britská libra",
+ "symbol": "GBP"
+ },
+ "BND": {
+ "name": "brunejský dolár",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "bulharský lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "burundský frank",
+ "symbol": "BIF"
+ },
+ "XPF": {
+ "name": "CFP frank",
+ "symbol": "CFPF"
+ },
+ "CZK": {
+ "name": "Äeská koruna",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "Äilské peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "Äínsky jüan",
+ "symbol": "CNY"
+ },
+ "DKK": {
+ "name": "dánska koruna",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "dominikánske peso",
+ "symbol": "DOP"
+ },
+ "DJF": {
+ "name": "džibutský frank",
+ "symbol": "DJF"
+ },
+ "EGP": {
+ "name": "egyptská libra",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "eritrejská nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "etiópsky birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "falklandská libra",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "fidžijský dolár",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "filipínske peso",
+ "symbol": "PHP"
+ },
+ "GMD": {
+ "name": "gambijské dalasi",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "ghanské cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "gibraltárska libra",
+ "symbol": "GIP"
+ },
+ "GEL": {
+ "name": "gruzínske lari",
+ "symbol": "GEL"
+ },
+ "GTQ": {
+ "name": "guatemalský quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "guinejský frank",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "guyanský dolár",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "haitské gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "honduraská lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "hongkonský dolár",
+ "symbol": "HKD"
+ },
+ "HRK": {
+ "name": "chorvátska kuna",
+ "symbol": "HRK"
+ },
+ "INR": {
+ "name": "indická rupia",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "indonézska rupia",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "iracký dinár",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "iránsky rial",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "islandská koruna",
+ "symbol": "ISK"
+ },
+ "ILS": {
+ "name": "izraelský šekel",
+ "symbol": "NIS"
+ },
+ "JMD": {
+ "name": "jamajský dolár",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "japonský jen",
+ "symbol": "JPY"
+ },
+ "YER": {
+ "name": "jemenský rial",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "jordánsky dinár",
+ "symbol": "JOD"
+ },
+ "ZAR": {
+ "name": "juhoafrický rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "juhokórejský won",
+ "symbol": "KRW"
+ },
+ "SSP": {
+ "name": "juhosudánska libra",
+ "symbol": "SSP"
+ },
+ "KYD": {
+ "name": "kajmanský dolár",
+ "symbol": "KYD"
+ },
+ "KHR": {
+ "name": "kambodžský riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "kanadský dolár",
+ "symbol": "CAD"
+ },
+ "CVE": {
+ "name": "kapverdské escudo",
+ "symbol": "CVE"
+ },
+ "QAR": {
+ "name": "katarský rial",
+ "symbol": "QAR"
+ },
+ "KZT": {
+ "name": "kazašské tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "kenský šiling",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "kirgizský som",
+ "symbol": "KGS"
+ },
+ "COP": {
+ "name": "kolumbijské peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "komorský frank",
+ "symbol": "KMF"
+ },
+ "BAM": {
+ "name": "konvertibilná marka",
+ "symbol": "BAM"
+ },
+ "CDF": {
+ "name": "konžský frank",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "kostarický colón",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "kubánske konvertibilné peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "kubánske peso",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "kuvajtský dinár",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "laoský kip",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "Lesothský loti",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "libanonská libra",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "libérijský dolár",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "líbyjský dinár",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "litovský litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "macajská pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "macedónsky denár",
+ "symbol": "MKD"
+ },
+ "HUF": {
+ "name": "maÄarský forint",
+ "symbol": "HUF"
+ },
+ "MYR": {
+ "name": "malajzijský ringgit",
+ "symbol": "MYR"
+ },
+ "MWK": {
+ "name": "malawijská kwacha",
+ "symbol": "MWK"
+ },
+ "MVR": {
+ "name": "maldivská rupia",
+ "symbol": "MVR"
+ },
+ "MGA": {
+ "name": "malgašský ariary",
+ "symbol": "MGA"
+ },
+ "MAD": {
+ "name": "marocký dirham",
+ "symbol": "MAD"
+ },
+ "MUR": {
+ "name": "maurícijská rupia",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "mauritánska ukija",
+ "symbol": "MRO"
+ },
+ "MXN": {
+ "name": "mexické peso",
+ "symbol": "MX$"
+ },
+ "MMK": {
+ "name": "mjanmarský kyat",
+ "symbol": "MMK"
+ },
+ "MDL": {
+ "name": "moldavský lei",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "mongolský tugrik",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "mozambický metical",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "namíbijský dolár",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "nepálska rupia",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "nigérijská naira",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "nikaragujská córdoba",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "nórska koruna",
+ "symbol": "NOK"
+ },
+ "NZD": {
+ "name": "novozélandský dolár",
+ "symbol": "NZD"
+ },
+ "TWD": {
+ "name": "nový taiwanský dolár",
+ "symbol": "TWD"
+ },
+ "OMR": {
+ "name": "ománsky rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "pakistanská rupia",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "panamská balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "papuánska kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "paraguajské guaraní",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "peruánsky nový sol",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "poľský zlotý",
+ "symbol": "PLN"
+ },
+ "RON": {
+ "name": "rumunský lei",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "ruský rubeľ",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "rwandský frank",
+ "symbol": "RWF"
+ },
+ "AED": {
+ "name": "SAE dirham",
+ "symbol": "AED"
+ },
+ "SVC": {
+ "name": "Salvádorský colón",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "samojská tala",
+ "symbol": "WST"
+ },
+ "SAR": {
+ "name": "saudskoarabský rial",
+ "symbol": "SAR"
+ },
+ "KPW": {
+ "name": "severokórejský won",
+ "symbol": "KPW"
+ },
+ "SCR": {
+ "name": "seychelská rupia",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "sierraleonský leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "singapurský dolár",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "somálsky šiling",
+ "symbol": "SOS"
+ },
+ "RSD": {
+ "name": "srbský dinár",
+ "symbol": "RSD"
+ },
+ "LKR": {
+ "name": "srílanská rupia",
+ "symbol": "LKR"
+ },
+ "XAF": {
+ "name": "stredoafrický frank",
+ "symbol": "FCFA"
+ },
+ "SDG": {
+ "name": "sudánska libra",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "surinamský dolár",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "svazijské lilangeni",
+ "symbol": "SZL"
+ },
+ "SHP": {
+ "name": "svätohelenská libra",
+ "symbol": "SHP"
+ },
+ "STD": {
+ "name": "svätotomášska dobra",
+ "symbol": "STD"
+ },
+ "SYP": {
+ "name": "sýrska libra",
+ "symbol": "SYP"
+ },
+ "SBD": {
+ "name": "šalamúnsky dolár",
+ "symbol": "SBD"
+ },
+ "CHF": {
+ "name": "Å¡vajÄiarsky frank",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "švédska koruna",
+ "symbol": "SEK"
+ },
+ "TJS": {
+ "name": "tadžické somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "tanzánsky šiling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "thajský baht",
+ "symbol": "THB"
+ },
+ "TOP": {
+ "name": "tongská paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "trinidadsko-tobažský dolár",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "tuniský dinár",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "turecká líra",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "turkménsky manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "ugandský šiling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "ukrajinská hrivna",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "uruguajské peso",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "uzbecký sum",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "vanuatské vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "venezuelský bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "vietnamský dong",
+ "symbol": "VND"
+ },
+ "XCD": {
+ "name": "východokaribský dolár",
+ "symbol": "EC$"
+ },
+ "ZMW": {
+ "name": "zambijská kwacha",
+ "symbol": "ZMW"
+ },
+ "XOF": {
+ "name": "západoafrický frank",
+ "symbol": "CFA"
+ },
+ "ZWL": {
+ "name": "Zimbabwiansky dolár (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/sl.json b/library/intl/resources/currency/sl.json
new file mode 100644
index 000000000..3da025916
--- /dev/null
+++ b/library/intl/resources/currency/sl.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afgani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "albanski lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "alžirski dinar",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "ameriški dolar",
+ "symbol": "$"
+ },
+ "AOA": {
+ "name": "angolska kvanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "argentinski peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "armenski dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "arubski florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "avstralski dolar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "azerbajdžanski manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "bahamski dolar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "bahranski dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "bangladeška taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "barbadoški dolar",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "belizejski dolar",
+ "symbol": "BZD"
+ },
+ "BYR": {
+ "name": "beloruski rubelj",
+ "symbol": "BYR"
+ },
+ "BMD": {
+ "name": "bermudski dolar",
+ "symbol": "BMD"
+ },
+ "BWP": {
+ "name": "bocvanska pula",
+ "symbol": "BWP"
+ },
+ "BGN": {
+ "name": "bolgarski lev",
+ "symbol": "BGN"
+ },
+ "BOB": {
+ "name": "bolivijski boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "bosansko-hercegovska konvertibilna marka",
+ "symbol": "BAM"
+ },
+ "BRL": {
+ "name": "brazilski real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "britanski funt",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "brunejski dolar",
+ "symbol": "BND"
+ },
+ "BIF": {
+ "name": "burundski frank",
+ "symbol": "BIF"
+ },
+ "BTN": {
+ "name": "butanski ngultrum",
+ "symbol": "BTN"
+ },
+ "XOF": {
+ "name": "CFA frank BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA frank BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP frank",
+ "symbol": "CFPF"
+ },
+ "CZK": {
+ "name": "ÄeÅ¡ka krona",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "Äilski peso",
+ "symbol": "CLP"
+ },
+ "DKK": {
+ "name": "danska krona",
+ "symbol": "DKK"
+ },
+ "AED": {
+ "name": "dirham Združenih arabskih emiratov",
+ "symbol": "AED"
+ },
+ "TTD": {
+ "name": "dolar Trinidada in Tobaga",
+ "symbol": "TTD"
+ },
+ "DOP": {
+ "name": "dominikanski peso",
+ "symbol": "DOP"
+ },
+ "DJF": {
+ "name": "džibutski frank",
+ "symbol": "DJF"
+ },
+ "EGP": {
+ "name": "egiptovski funt",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "eritrejska nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "etiopski bir",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "evro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "falklandski funt",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "fidžijski dolar",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "filipinski peso",
+ "symbol": "PHP"
+ },
+ "SHP": {
+ "name": "funt Sv. Helene",
+ "symbol": "SHP"
+ },
+ "GMD": {
+ "name": "gambijski dalasi",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "ganski cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "gibraltarski funt",
+ "symbol": "GIP"
+ },
+ "GEL": {
+ "name": "gruzijski lari",
+ "symbol": "GEL"
+ },
+ "GYD": {
+ "name": "gvajanski dolar",
+ "symbol": "GYD"
+ },
+ "GTQ": {
+ "name": "gvatemalski kecal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "gvinejski frank",
+ "symbol": "GNF"
+ },
+ "HTG": {
+ "name": "haitski gurd",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "honduraška lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "hongkonški dolar",
+ "symbol": "HK$"
+ },
+ "HRK": {
+ "name": "hrvaška kuna",
+ "symbol": "HRK"
+ },
+ "INR": {
+ "name": "indijska rupija",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "indonezijska rupija",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "iranski rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "iraški dinar",
+ "symbol": "IQD"
+ },
+ "ISK": {
+ "name": "islandska krona",
+ "symbol": "ISK"
+ },
+ "ILS": {
+ "name": "izraelski Å¡ekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "jamajški dolar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "japonski jen",
+ "symbol": "Â¥"
+ },
+ "YER": {
+ "name": "jemenski rial",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "jordanski dinar",
+ "symbol": "JOD"
+ },
+ "ZAR": {
+ "name": "južnoafriški rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "južnokorejski von",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "južnosudanski funt",
+ "symbol": "SSP"
+ },
+ "KYD": {
+ "name": "kajmanski dolar",
+ "symbol": "KYD"
+ },
+ "KHR": {
+ "name": "kamboški riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "kanadski dolar",
+ "symbol": "CAD"
+ },
+ "QAR": {
+ "name": "katarski rial",
+ "symbol": "QAR"
+ },
+ "KZT": {
+ "name": "kazahstanski tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "kenijski Å¡iling",
+ "symbol": "KES"
+ },
+ "PGK": {
+ "name": "kina Papue Nove Gvineje",
+ "symbol": "PGK"
+ },
+ "KGS": {
+ "name": "kirgiški som",
+ "symbol": "KGS"
+ },
+ "CNY": {
+ "name": "kitajski juan renminbi",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "kolumbijski peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "komorski frank",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "kongoški frank",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "kostariški kolon",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "kubanski konvertibilni peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "kubanski peso",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "kuvajtski dinar",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "laoški kip",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "lesoški loti",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "libanonski funt",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "liberijski dolar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "libijski dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "litovski litas",
+ "symbol": "LTL"
+ },
+ "HUF": {
+ "name": "madžarski forint",
+ "symbol": "HUF"
+ },
+ "MOP": {
+ "name": "makavska pataka",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "makedonski denar",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "malavijska kvaÄa",
+ "symbol": "MWK"
+ },
+ "MVR": {
+ "name": "maldivska rufija",
+ "symbol": "MVR"
+ },
+ "MYR": {
+ "name": "malezijski ringit",
+ "symbol": "MYR"
+ },
+ "MGA": {
+ "name": "malgaški ariarij",
+ "symbol": "MGA"
+ },
+ "MAD": {
+ "name": "maroški dirham",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "mavretanska uguija",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "mavricijska rupija",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "mehiški peso",
+ "symbol": "MX$"
+ },
+ "MMK": {
+ "name": "mjanmarski kjat",
+ "symbol": "MMK"
+ },
+ "MDL": {
+ "name": "moldavijski leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "mongolski tugrik",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "mozambiški metikal",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "namibijski dolar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "nepalska rupija",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "nigerijska naira",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "nikaraška zlata kordova",
+ "symbol": "NIO"
+ },
+ "ANG": {
+ "name": "nizozemsko-antilski gulden",
+ "symbol": "ANG"
+ },
+ "NOK": {
+ "name": "norveška krona",
+ "symbol": "NOK"
+ },
+ "TRY": {
+ "name": "nova turška lira",
+ "symbol": "TRY"
+ },
+ "TWD": {
+ "name": "novi tajvanski dolar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "novozelandski dolar",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "omanski rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "pakistanska rupija",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "panamska balboa",
+ "symbol": "PAB"
+ },
+ "PYG": {
+ "name": "paragvajski gvarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "perujski novi sol",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "poljski novi zlot",
+ "symbol": "PLN"
+ },
+ "RON": {
+ "name": "romunski leu",
+ "symbol": "RON"
+ },
+ "RWF": {
+ "name": "ruandski frank",
+ "symbol": "RWF"
+ },
+ "RUB": {
+ "name": "ruski rubelj",
+ "symbol": "RUB"
+ },
+ "SVC": {
+ "name": "salvadorski kolon",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "samoanska tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "saotomejska dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "saudski rial",
+ "symbol": "SAR"
+ },
+ "SCR": {
+ "name": "sejšelska rupija",
+ "symbol": "SCR"
+ },
+ "KPW": {
+ "name": "severnokorejski von",
+ "symbol": "KPW"
+ },
+ "SLL": {
+ "name": "sieraleonski leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "singapurski dolar",
+ "symbol": "SGD"
+ },
+ "SYP": {
+ "name": "sirijski funt",
+ "symbol": "SYP"
+ },
+ "SBD": {
+ "name": "solomonski dolar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "somalski Å¡iling",
+ "symbol": "SOS"
+ },
+ "RSD": {
+ "name": "srbski dinar",
+ "symbol": "RSD"
+ },
+ "SDG": {
+ "name": "sudanski funt",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "surinamski dolar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "svazijski lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "šrilanška rupija",
+ "symbol": "LKR"
+ },
+ "SEK": {
+ "name": "Å¡vedska krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "Å¡vicarski frank",
+ "symbol": "CHF"
+ },
+ "TJS": {
+ "name": "tadžikistanski somoni",
+ "symbol": "TJS"
+ },
+ "THB": {
+ "name": "tajski baht",
+ "symbol": "฿"
+ },
+ "TZS": {
+ "name": "tanzanijski Å¡iling",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "tongovska paanga",
+ "symbol": "TOP"
+ },
+ "TND": {
+ "name": "tunizijski dinar",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "turkmenistanski novi manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "ugandski Å¡iling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "ukrajinska grivna",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "urugvajski peso",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "uzbeški sum",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "vanuatujski vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "venezuelski bolivar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "vientnamski dong",
+ "symbol": "â‚«"
+ },
+ "XCD": {
+ "name": "vzhodnokaribski dolar",
+ "symbol": "EC$"
+ },
+ "ZMW": {
+ "name": "zambijska kvaÄa",
+ "symbol": "ZMW"
+ },
+ "CVE": {
+ "name": "zelenortski eskudo",
+ "symbol": "CVE"
+ },
+ "ZWL": {
+ "name": "zimbabvejski dolar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/sn.json b/library/intl/resources/currency/sn.json
new file mode 100644
index 000000000..56f9d154f
--- /dev/null
+++ b/library/intl/resources/currency/sn.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi ye Gambia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dhinari re Aljeria",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dhinari re Bhahareni",
+ "symbol": "BHD"
+ },
+ "CVE": {
+ "name": "Dhora re Escudo",
+ "symbol": "CVE"
+ },
+ "ETB": {
+ "name": "Dhora re Etiopia",
+ "symbol": "ETB"
+ },
+ "LYD": {
+ "name": "Dinari re Libya",
+ "symbol": "LYD"
+ },
+ "SDG": {
+ "name": "Dinari re Sudani",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "Dinari re Tunisia",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Diramu re United Arab Emirates",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham ye Moroko",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobra re Sao Tome ne Principe",
+ "symbol": "STD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "USD": {
+ "name": "Dora re Amerika",
+ "symbol": "US$"
+ },
+ "AUD": {
+ "name": "Dora re Australia",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "Dora re Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dora re Liberia",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Dora re Namibia",
+ "symbol": "NAD"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "XOF": {
+ "name": "Furenki CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Furenki CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "BIF": {
+ "name": "Furenki re Bhurundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Furenki re Jibhuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Furenki re Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Furenki re Kongo",
+ "symbol": "CDF"
+ },
+ "MGA": {
+ "name": "Furenki re Malagasi",
+ "symbol": "MGA"
+ },
+ "RWF": {
+ "name": "Furenki re Ruwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Furenki re Swisi",
+ "symbol": "CHF"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kwacha ye Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha ye Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza ye Angola",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leoni",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti ye Lesoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira ye Nijeria",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa re Eritrea",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "EGP": {
+ "name": "Paundi re Ijipita",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Paundi re Senti Helena",
+ "symbol": "SHP"
+ },
+ "GBP": {
+ "name": "Paundi ye Bhiriteni",
+ "symbol": "£"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pura re Botswana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Randi",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riyali re Saudi",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupe re India",
+ "symbol": "₹"
+ },
+ "SCR": {
+ "name": "Rupi re Seyisheri",
+ "symbol": "SCR"
+ },
+ "MUR": {
+ "name": "Rupi ye Morishasi",
+ "symbol": "MUR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "Shiringi re Somalia",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Shiringi re Tanzania",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Shiringi re Uganda",
+ "symbol": "UGX"
+ },
+ "KES": {
+ "name": "Shiringi ye Kenya",
+ "symbol": "KES"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ugwiya ye Moritania",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "JPY": {
+ "name": "Yeni ye Japani",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yuan Renminbi ye China",
+ "symbol": "CNÂ¥"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/so.json b/library/intl/resources/currency/so.json
new file mode 100644
index 000000000..95d95398c
--- /dev/null
+++ b/library/intl/resources/currency/so.json
@@ -0,0 +1,634 @@
+{
+ "AED": {
+ "name": "AED",
+ "symbol": "AED"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "AOA",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AUD": {
+ "name": "AUD",
+ "symbol": "A$"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BHD": {
+ "name": "BHD",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "BIF",
+ "symbol": "BIF"
+ },
+ "ETB": {
+ "name": "Birta Itoobbiya",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BWP": {
+ "name": "BWP",
+ "symbol": "BWP"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CAD": {
+ "name": "CAD",
+ "symbol": "CA$"
+ },
+ "CDF": {
+ "name": "CDF",
+ "symbol": "CDF"
+ },
+ "CHF": {
+ "name": "CHF",
+ "symbol": "CHF"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "CNY",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CVE": {
+ "name": "CVE",
+ "symbol": "CVE"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "USD": {
+ "name": "Doollar maraykan",
+ "symbol": "US$"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "DZD": {
+ "name": "DZD",
+ "symbol": "DZD"
+ },
+ "EGP": {
+ "name": "EGP",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "ERN",
+ "symbol": "ERN"
+ },
+ "DJF": {
+ "name": "Faran Jabbuuti",
+ "symbol": "DJF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GBP": {
+ "name": "GBP",
+ "symbol": "£"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GMD": {
+ "name": "GMD",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "INR",
+ "symbol": "₹"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "JPY": {
+ "name": "JPY",
+ "symbol": "JPÂ¥"
+ },
+ "KES": {
+ "name": "KES",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "KMF",
+ "symbol": "KMF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LRD": {
+ "name": "LRD",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "LYD",
+ "symbol": "LYD"
+ },
+ "MAD": {
+ "name": "MAD",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MGA": {
+ "name": "MGA",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MRO": {
+ "name": "MRO",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "MWK",
+ "symbol": "MWK"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "SAR": {
+ "name": "Riyaalka Sacuudiga",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "SDG",
+ "symbol": "SDG"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "Shilin soomaali",
+ "symbol": "S"
+ },
+ "TZS": {
+ "name": "Shilin Tansaani",
+ "symbol": "TZS"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "TND",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "UGX",
+ "symbol": "UGX"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "EUR": {
+ "name": "Yuuroo",
+ "symbol": "€"
+ },
+ "ZAR": {
+ "name": "ZAR",
+ "symbol": "ZAR"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/sq.json b/library/intl/resources/currency/sq.json
new file mode 100644
index 000000000..89f842436
--- /dev/null
+++ b/library/intl/resources/currency/sq.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afgani afgan",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "Arieri malagez",
+ "symbol": "MGA"
+ },
+ "PAB": {
+ "name": "Balboa panameze",
+ "symbol": "PAB"
+ },
+ "THB": {
+ "name": "Bata tajlandeze",
+ "symbol": "฿"
+ },
+ "ETB": {
+ "name": "Bira etiopiane",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "Bolivari venezuelian",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "Boliviani i Bolivisë",
+ "symbol": "BOB"
+ },
+ "GMD": {
+ "name": "Dalasi gambian",
+ "symbol": "GMD"
+ },
+ "MKD": {
+ "name": "Denari maqedonas",
+ "symbol": "MKD"
+ },
+ "DZD": {
+ "name": "Dinari algjerian",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinari i Bahreinit",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "Dinari irakian",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "Dinari jordanez",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "Dinari kuvajtian",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "Dinari libian",
+ "symbol": "LYD"
+ },
+ "RSD": {
+ "name": "Dinari serb",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "Dinari tunizian",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirhami i Emirateve të Bashkuara Arabe",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirhami maroken",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "Dobra e Sao Tomes dhe Prinsipes",
+ "symbol": "STD"
+ },
+ "USD": {
+ "name": "Dollari amerikan",
+ "symbol": "US$"
+ },
+ "AUD": {
+ "name": "Dollari australian",
+ "symbol": "A$"
+ },
+ "BBD": {
+ "name": "Dollari barbadian",
+ "symbol": "BBD"
+ },
+ "BMD": {
+ "name": "Dollari e Bermudeve",
+ "symbol": "BMD"
+ },
+ "GYD": {
+ "name": "Dollari guajanez",
+ "symbol": "GYD"
+ },
+ "BSD": {
+ "name": "Dollari i Bahamasit",
+ "symbol": "BSD"
+ },
+ "BND": {
+ "name": "Dollari i Bruneit",
+ "symbol": "BND"
+ },
+ "FJD": {
+ "name": "Dollari i Fixhit",
+ "symbol": "FJD"
+ },
+ "HKD": {
+ "name": "Dollari i Hong Kongut",
+ "symbol": "HK$"
+ },
+ "BZD": {
+ "name": "Dollari i Ishujve Belize",
+ "symbol": "BZD"
+ },
+ "KYD": {
+ "name": "Dollari i Ishujve Kajman",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "Dollari i Ishujve Solomon",
+ "symbol": "SBD"
+ },
+ "XCD": {
+ "name": "Dollari i Karaibeve Lindore",
+ "symbol": "EC$"
+ },
+ "NAD": {
+ "name": "Dollari i Namibisë",
+ "symbol": "NAD"
+ },
+ "SGD": {
+ "name": "Dollari i Singaporit",
+ "symbol": "SGD"
+ },
+ "TTD": {
+ "name": "Dollari i Trinidadit dhe Tobagos",
+ "symbol": "TTD"
+ },
+ "NZD": {
+ "name": "Dollari i Zelandës së Re",
+ "symbol": "NZ$"
+ },
+ "CAD": {
+ "name": "Dollari kanadez",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dollari liberian",
+ "symbol": "LRD"
+ },
+ "SRD": {
+ "name": "Dollari surinamez",
+ "symbol": "SRD"
+ },
+ "TWD": {
+ "name": "Dollari tajvanez",
+ "symbol": "NT$"
+ },
+ "JMD": {
+ "name": "Dollari xhamajkan",
+ "symbol": "JMD"
+ },
+ "VND": {
+ "name": "Donga vietnameze",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "Dramia armene",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "Eskudoja e Kepit të Gjelbër",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "Euroja",
+ "symbol": "€"
+ },
+ "AWG": {
+ "name": "Florini aruban",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "Forinta hungareze",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "Franga burundiane",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Franga e Bregut të Fildishtë",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "Franga franceze e Polinezisë",
+ "symbol": "CFPF"
+ },
+ "GNF": {
+ "name": "Franga guinease",
+ "symbol": "GNF"
+ },
+ "XAF": {
+ "name": "Franga kamerunase",
+ "symbol": "FCFA"
+ },
+ "KMF": {
+ "name": "Franga komore",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Franga kongole",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Franga ruandeze",
+ "symbol": "RWF"
+ },
+ "DJF": {
+ "name": "Franga xhibutiane",
+ "symbol": "DJF"
+ },
+ "CHF": {
+ "name": "Franga zvicerane",
+ "symbol": "CHF"
+ },
+ "ANG": {
+ "name": "Gilderi antilian holandez",
+ "symbol": "ANG"
+ },
+ "PYG": {
+ "name": "Guarani paraguaian",
+ "symbol": "PYG"
+ },
+ "HTG": {
+ "name": "Gurdi haitian",
+ "symbol": "HTG"
+ },
+ "JPY": {
+ "name": "Jeni japonez",
+ "symbol": "JPÂ¥"
+ },
+ "CNY": {
+ "name": "Juani kinez",
+ "symbol": "CNÂ¥"
+ },
+ "MMK": {
+ "name": "Kiata e Mianmarit",
+ "symbol": "MMK"
+ },
+ "PGK": {
+ "name": "Kina e Papua-Guineas së Re",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "Kipa e Laosit",
+ "symbol": "LAK"
+ },
+ "CRC": {
+ "name": "Koloni kostarikan",
+ "symbol": "CRC"
+ },
+ "NIO": {
+ "name": "Kordoba nikaraguane",
+ "symbol": "NIO"
+ },
+ "DKK": {
+ "name": "Korona daneze",
+ "symbol": "DKK"
+ },
+ "ISK": {
+ "name": "Korona islandeze",
+ "symbol": "ISK"
+ },
+ "NOK": {
+ "name": "Korona norvegjeze",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "Korona suedeze",
+ "symbol": "SEK"
+ },
+ "CZK": {
+ "name": "Koruna e Republikës Çeke",
+ "symbol": "CZK"
+ },
+ "ZMW": {
+ "name": "Kuaça e Zambikut",
+ "symbol": "ZMW"
+ },
+ "MWK": {
+ "name": "Kuaça malaviane",
+ "symbol": "MWK"
+ },
+ "AOA": {
+ "name": "Kuanza e Angolës",
+ "symbol": "AOA"
+ },
+ "GTQ": {
+ "name": "Kuecali i Guatemalës",
+ "symbol": "GTQ"
+ },
+ "HRK": {
+ "name": "Kuna kroate",
+ "symbol": "HRK"
+ },
+ "GEL": {
+ "name": "Laria gjeorgjiane",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "Leku shqiptar",
+ "symbol": "Lekë"
+ },
+ "HNL": {
+ "name": "Lempira hondurase",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "Leoni i Sierra Leones",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "Leu moldav",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "Leu rumun",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "Leva bullgare",
+ "symbol": "BGN"
+ },
+ "SZL": {
+ "name": "Lilangeni i Svazilandit",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "Lira turke",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "Lita lituaneze",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "Manata e Azerbajxhanit",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "Manata turkmene",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "Marka e Bosnjë-Hercegovinës [e shkëmbyeshme]",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "Metikali i Mozambikut",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira nigeriane",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa e Eritresë",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "Ngultrumi butanez",
+ "symbol": "BTN"
+ },
+ "TOP": {
+ "name": "Panga tongane",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "Pataka e Makaos",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "Pezoja argjentinase",
+ "symbol": "ARS"
+ },
+ "DOP": {
+ "name": "Pezoja dominikane",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "Pezoja filipinase",
+ "symbol": "PHP"
+ },
+ "CLP": {
+ "name": "Pezoja kiliane",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "Pezoja kolumbiane",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "Pezoja kubane",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "Pezoja kubane e shkëmbyeshme",
+ "symbol": "CUC"
+ },
+ "MXN": {
+ "name": "Pezoja meksikane",
+ "symbol": "MX$"
+ },
+ "UYU": {
+ "name": "Pezoja uruguaiane",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "Pula botsvane",
+ "symbol": "BWP"
+ },
+ "ZAR": {
+ "name": "Randa afrikano-jugore",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "Reali brazilian",
+ "symbol": "R$"
+ },
+ "YER": {
+ "name": "Riali i Jemenit",
+ "symbol": "YER"
+ },
+ "QAR": {
+ "name": "Riali i Katarit",
+ "symbol": "QAR"
+ },
+ "OMR": {
+ "name": "Riali i Omanit",
+ "symbol": "OMR"
+ },
+ "IRR": {
+ "name": "Riali iranian",
+ "symbol": "IRR"
+ },
+ "KHR": {
+ "name": "Riali kamboxhian",
+ "symbol": "KHR"
+ },
+ "SAR": {
+ "name": "Riali saudit",
+ "symbol": "SAR"
+ },
+ "MYR": {
+ "name": "Ringiti malajzian",
+ "symbol": "MYR"
+ },
+ "UAH": {
+ "name": "Rivnia ukrainase",
+ "symbol": "UAH"
+ },
+ "BYR": {
+ "name": "Rubla bjelloruse",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "Rubla ruse",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "Rufiu i Maldivit",
+ "symbol": "MVR"
+ },
+ "SCR": {
+ "name": "Rupia e Ishujve Sejçelë",
+ "symbol": "SCR"
+ },
+ "LKR": {
+ "name": "Rupia e Sri Lankës",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "Rupia indiane",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Rupia indoneziane",
+ "symbol": "IDR"
+ },
+ "MUR": {
+ "name": "Rupia mauritiane",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "Rupia nepaleze",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "Rupia pakistaneze",
+ "symbol": "PKR"
+ },
+ "GHS": {
+ "name": "Sejda ganeze",
+ "symbol": "GHS"
+ },
+ "PEN": {
+ "name": "Sola nuevo-peruane",
+ "symbol": "PEN"
+ },
+ "KGS": {
+ "name": "Soma kirgize",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "Soma uzbeke",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "Somona taxhike",
+ "symbol": "TJS"
+ },
+ "GBP": {
+ "name": "Sterlina britanike",
+ "symbol": "£"
+ },
+ "GIP": {
+ "name": "Sterlina e Gjibraltarit",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "Sterlina libaneze",
+ "symbol": "LBP"
+ },
+ "SYP": {
+ "name": "Sterlina siriane",
+ "symbol": "SYP"
+ },
+ "FKP": {
+ "name": "Stërlina e Ishujve Folkland",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "Stërlina e Ishullit të Shën Helenës",
+ "symbol": "SHP"
+ },
+ "SSP": {
+ "name": "Stërlina e Sudanit të Jugut",
+ "symbol": "SSP"
+ },
+ "EGP": {
+ "name": "Stërlina egjiptiane",
+ "symbol": "EGP"
+ },
+ "SDG": {
+ "name": "Stërlina sudaneze",
+ "symbol": "SDG"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "ILS": {
+ "name": "Shekeli izrealit",
+ "symbol": "₪"
+ },
+ "TZS": {
+ "name": "Shilinga e Tanzanisë",
+ "symbol": "TZS"
+ },
+ "KES": {
+ "name": "Shilinga keniane",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Shilinga somaleze",
+ "symbol": "SOS"
+ },
+ "UGX": {
+ "name": "Shilinga ugandeze",
+ "symbol": "UGX"
+ },
+ "BDT": {
+ "name": "Taka e Bangladeshit",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "Tala samoane",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "Tenga kazake",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "Tugrika mongole",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "Ugija mauritane",
+ "symbol": "MRO"
+ },
+ "KRW": {
+ "name": "Uoni koreano-jugor",
+ "symbol": "â‚©"
+ },
+ "KPW": {
+ "name": "Uoni koreano-verior",
+ "symbol": "KPW"
+ },
+ "VUV": {
+ "name": "Vatuja e Vanuatusë",
+ "symbol": "VUV"
+ },
+ "PLN": {
+ "name": "Zllota polake",
+ "symbol": "PLN"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/sr-Cyrl-BA.json b/library/intl/resources/currency/sr-Cyrl-BA.json
new file mode 100644
index 000000000..1bc85c78b
--- /dev/null
+++ b/library/intl/resources/currency/sr-Cyrl-BA.json
@@ -0,0 +1,634 @@
+{
+ "XAF": {
+ "name": "CFA франак BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP франак",
+ "symbol": "CFPF"
+ },
+ "ERN": {
+ "name": "EритрејÑка накфa",
+ "symbol": "ERN"
+ },
+ "KHR": {
+ "name": "KамбоџанÑки ријел",
+ "symbol": "KHR"
+ },
+ "TJS": {
+ "name": "TаџихиÑтанÑки Ñомон",
+ "symbol": "TJS"
+ },
+ "AFN": {
+ "name": "ÐвганиÑтанÑки авгани",
+ "symbol": "AFN"
+ },
+ "AZN": {
+ "name": "ÐзербејџанÑки манат",
+ "symbol": "AZN"
+ },
+ "ALL": {
+ "name": "ÐлбанÑки лек",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "ÐлжирÑки динар",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "Ðмерички долар",
+ "symbol": "US$"
+ },
+ "AOA": {
+ "name": "ÐнголÑка кванза",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ÐргентинÑки пезоÑ",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "ÐрубанÑки флорин",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "ÐуÑтралијÑки долар",
+ "symbol": "AUD"
+ },
+ "BDT": {
+ "name": "Бангладешка така",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Барбадошки долар",
+ "symbol": "BBD"
+ },
+ "BSD": {
+ "name": "БахамÑки долар",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "БахреинÑки динар",
+ "symbol": "BHD"
+ },
+ "BZD": {
+ "name": "БелиÑки долар",
+ "symbol": "BZD"
+ },
+ "BYR": {
+ "name": "БелоруÑка рубља",
+ "symbol": "[BYR]"
+ },
+ "BMD": {
+ "name": "БермудÑки долар",
+ "symbol": "BMD"
+ },
+ "BOB": {
+ "name": "БоливијÑки Боливиано",
+ "symbol": "BOB"
+ },
+ "BWP": {
+ "name": "БоцванÑка пула",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "БразилÑки реал",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "БританÑка фунта Ñтерлинга",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "БрунејÑки долар",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "БугарÑки лев",
+ "symbol": "[BGN]"
+ },
+ "BIF": {
+ "name": "БурундÑки франак",
+ "symbol": "BIF"
+ },
+ "BTN": {
+ "name": "БутанÑки нгултрум",
+ "symbol": "BTN"
+ },
+ "VUV": {
+ "name": "ВануатÑки вату",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "ВенецуеланÑки боливар",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "ВијетнамÑки донг",
+ "symbol": "VND"
+ },
+ "GMD": {
+ "name": "ГамбијÑки далаÑи",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "ГанÑки Ñеди",
+ "symbol": "GHS"
+ },
+ "GYD": {
+ "name": "ГвајанÑки долар",
+ "symbol": "GYD"
+ },
+ "GTQ": {
+ "name": "ГватемалÑки кецал",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "ГвинејÑки франак",
+ "symbol": "GNF"
+ },
+ "GIP": {
+ "name": "ГибралтарÑка фунта",
+ "symbol": "GIP"
+ },
+ "GEL": {
+ "name": "ГрузијÑки лари",
+ "symbol": "GEL"
+ },
+ "DKK": {
+ "name": "ДанÑка круна",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "ДоминиканÑки пезоÑ",
+ "symbol": "DOP"
+ },
+ "EUR": {
+ "name": "Евро",
+ "symbol": "€"
+ },
+ "EGP": {
+ "name": "ЕгипатÑка фунта",
+ "symbol": "EGP"
+ },
+ "ETB": {
+ "name": "ЕтиопијÑки бир",
+ "symbol": "ETB"
+ },
+ "ZMW": {
+ "name": "ЗамбијÑка квача",
+ "symbol": "ZMW"
+ },
+ "CVE": {
+ "name": "ЗеленортÑки еÑкудо",
+ "symbol": "CVE"
+ },
+ "ZWL": {
+ "name": "ЗимбабвеанÑки долар (2009)",
+ "symbol": "ZWL"
+ },
+ "ILS": {
+ "name": "ИзраелÑки нови шекел",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "ИндијÑка рупија",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "ИндонежанÑка рупија",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "ИранÑки риjал",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Ирачки динар",
+ "symbol": "IQD"
+ },
+ "ISK": {
+ "name": "ИÑландÑка круна",
+ "symbol": "ISK"
+ },
+ "XCD": {
+ "name": "ИÑточнокарипÑки долар",
+ "symbol": "EC$"
+ },
+ "JMD": {
+ "name": "ЈамајчанÑки долар",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "ЈапанÑки јен",
+ "symbol": "Â¥"
+ },
+ "YER": {
+ "name": "ЈеменÑки риjал",
+ "symbol": "YER"
+ },
+ "AMD": {
+ "name": "ЈерменÑки драм",
+ "symbol": "AMD"
+ },
+ "JOD": {
+ "name": "ЈорданÑки динар",
+ "symbol": "JOD"
+ },
+ "ZAR": {
+ "name": "Јужно-афрички ранд",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "ЈужнокорејÑки Вон",
+ "symbol": "KRW"
+ },
+ "SSP": {
+ "name": "ЈужноÑуданÑка фунта",
+ "symbol": "SSP"
+ },
+ "KZT": {
+ "name": "КазахÑтанÑки тенге",
+ "symbol": "KZT"
+ },
+ "KYD": {
+ "name": "КајманÑки долар",
+ "symbol": "KYD"
+ },
+ "CAD": {
+ "name": "КанадÑки долар",
+ "symbol": "CA$"
+ },
+ "QAR": {
+ "name": "КатарÑки ријал",
+ "symbol": "QAR"
+ },
+ "KES": {
+ "name": "КенијÑки шилинг",
+ "symbol": "KES"
+ },
+ "CNY": {
+ "name": "КинеÑки јуан",
+ "symbol": "CNÂ¥"
+ },
+ "KGS": {
+ "name": "КиргиÑтанÑки Ñом",
+ "symbol": "KGS"
+ },
+ "COP": {
+ "name": "КолумбијÑки пезоÑ",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "КоморÑки франак",
+ "symbol": "KMF"
+ },
+ "BAM": {
+ "name": "Конвертибилна Марка",
+ "symbol": "КМ"
+ },
+ "CDF": {
+ "name": "КонгоанÑки франак",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "КоÑтариканÑки колон",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "КубанÑки конвертибилни пезоÑ",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "КубанÑки пезоÑ",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "КувајтÑки динар",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "Лаошки кип",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "ЛеÑото лоти",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "ЛибанÑка фунта",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "ЛиберијÑки долар",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "ЛибијÑки динар",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "ЛитванÑки литаÑ",
+ "symbol": "LTL"
+ },
+ "HUF": {
+ "name": "МађарÑка форинта",
+ "symbol": "HUF"
+ },
+ "MOP": {
+ "name": "Маканишка патака",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "МакедонÑки денар",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "МалавијÑка квача",
+ "symbol": "MWK"
+ },
+ "MGA": {
+ "name": "МалагаÑијÑки ариари",
+ "symbol": "MGA"
+ },
+ "MVR": {
+ "name": "МалдивÑка руфија",
+ "symbol": "MVR"
+ },
+ "MYR": {
+ "name": "МалезијÑки ринггит",
+ "symbol": "MYR"
+ },
+ "MAD": {
+ "name": "МароканÑки дирхам",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "МауританијÑка oгија",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "МаурицијÑка рупија",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "МекÑички пезоÑ",
+ "symbol": "MX$"
+ },
+ "MMK": {
+ "name": "МјанмарÑки кјат",
+ "symbol": "MMK"
+ },
+ "MZN": {
+ "name": "МозамбијÑки метикал",
+ "symbol": "MZN"
+ },
+ "MDL": {
+ "name": "МолдавÑки леј",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "МонголÑки тугрик",
+ "symbol": "MNT"
+ },
+ "NAD": {
+ "name": "ÐамибијÑки долар",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "ÐепалÑкa рупиja",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "ÐигеријÑка наира",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "ÐикарагванÑка златна кордоба",
+ "symbol": "NIO"
+ },
+ "TWD": {
+ "name": "Ðови тајванÑки долар",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "ÐовозеландÑки долар",
+ "symbol": "NZD"
+ },
+ "NOK": {
+ "name": "Ðорвешка круна",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "ОманÑки ријал",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "ПакиÑтанÑкa рупиja",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "ПанамÑка балбоа",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "ПапуанÑка кина",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "ПарагвајÑки гварани",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "ПеруанÑки нуево Ñол",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "ПољÑки злот",
+ "symbol": "PLN"
+ },
+ "RWF": {
+ "name": "РуандÑки франак",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "РумунÑки леј (1952–2006)",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "РуÑка рубља",
+ "symbol": "RUB"
+ },
+ "SVC": {
+ "name": "СалвадорÑки колон",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "СамоанÑка тала",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "Сао Томе и Принципе добра",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "СаудијÑки ријал",
+ "symbol": "SAR"
+ },
+ "SHP": {
+ "name": "Св. јеленÑка фунта",
+ "symbol": "SHP"
+ },
+ "SZL": {
+ "name": "Свази лилангени",
+ "symbol": "SZL"
+ },
+ "KPW": {
+ "name": "СевернокорејÑки вон",
+ "symbol": "KPW"
+ },
+ "SCR": {
+ "name": "СејшелÑка рупија",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Сијера-леоншки леоне",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "СингапурÑки долар",
+ "symbol": "SGD"
+ },
+ "SYP": {
+ "name": "СиријÑка фунта",
+ "symbol": "SYP"
+ },
+ "SBD": {
+ "name": "СоломонÑки долар",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "СомалијÑки шилинг",
+ "symbol": "SOS"
+ },
+ "RSD": {
+ "name": "СрпÑки динар",
+ "symbol": "RSD"
+ },
+ "SDG": {
+ "name": "СуданÑка фунта",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "СуринамÑки долар",
+ "symbol": "SRD"
+ },
+ "THB": {
+ "name": "ТајландÑки бат",
+ "symbol": "THB"
+ },
+ "TZS": {
+ "name": "ТанзанијÑки шилинг",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "Тонгоншка Панга",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Тринидад-тобагошки долар",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "ТуниÑки динар",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "ТуркмениÑтанÑки манат",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "ТурÑка лира",
+ "symbol": "TRY"
+ },
+ "AED": {
+ "name": "УÐЕ дирхам",
+ "symbol": "AED"
+ },
+ "UGX": {
+ "name": "УгандÑки шилинг",
+ "symbol": "UGX"
+ },
+ "UZS": {
+ "name": "УзбекиÑтанÑки Ñом",
+ "symbol": "UZS"
+ },
+ "UAH": {
+ "name": "УкрајинÑка гривна",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "УругвајÑки пезоÑ",
+ "symbol": "UYU"
+ },
+ "PHP": {
+ "name": "ФилипинÑки пезоÑ",
+ "symbol": "PHP"
+ },
+ "FJD": {
+ "name": "ФиџијÑки долар",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "ФокландÑка фунта",
+ "symbol": "FKP"
+ },
+ "HTG": {
+ "name": "ХаићанÑки гурд",
+ "symbol": "HTG"
+ },
+ "ANG": {
+ "name": "ХоландÑкоантилÑки гулден",
+ "symbol": "ANG"
+ },
+ "HKD": {
+ "name": "Хонгконшки долар",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "Хондурашка лемпира",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "ХрватÑка куна",
+ "symbol": "HRK"
+ },
+ "XOF": {
+ "name": "ЦФРфранак БЦЕÐО",
+ "symbol": "CFA"
+ },
+ "CZK": {
+ "name": "Чешка круна",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "ЧилеанÑки пезоÑ",
+ "symbol": "CLP"
+ },
+ "DJF": {
+ "name": "ÐибутанÑки франак",
+ "symbol": "DJF"
+ },
+ "CHF": {
+ "name": "ШвајцарÑки франак",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "ШведÑка круна",
+ "symbol": "SEK"
+ },
+ "LKR": {
+ "name": "ШриланканÑкa рупиja",
+ "symbol": "LKR"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/sr-Latn-BA.json b/library/intl/resources/currency/sr-Latn-BA.json
new file mode 100644
index 000000000..fe30ad268
--- /dev/null
+++ b/library/intl/resources/currency/sr-Latn-BA.json
@@ -0,0 +1,634 @@
+{
+ "ALL": {
+ "name": "Albanski lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Alžirski dinar",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "AmeriÄki dolar",
+ "symbol": "US$"
+ },
+ "AOA": {
+ "name": "Angolska kvanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentinski pezos",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "Arubanski florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australijski dolar",
+ "symbol": "AUD"
+ },
+ "AFN": {
+ "name": "Avganistanski avgani",
+ "symbol": "AFN"
+ },
+ "AZN": {
+ "name": "Azerbejdžanski manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamski dolar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahreinski dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeška taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadoški dolar",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Beliski dolar",
+ "symbol": "BZD"
+ },
+ "BYR": {
+ "name": "Beloruska rublja",
+ "symbol": "[BYR]"
+ },
+ "BMD": {
+ "name": "Bermudski dolar",
+ "symbol": "BMD"
+ },
+ "BWP": {
+ "name": "Bocvanska pula",
+ "symbol": "BWP"
+ },
+ "BOB": {
+ "name": "Bolivijski Boliviano",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "Brazilski real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "Britanska funta sterlinga",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunejski dolar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bugarski lev",
+ "symbol": "[BGN]"
+ },
+ "BIF": {
+ "name": "Burundski franak",
+ "symbol": "BIF"
+ },
+ "BTN": {
+ "name": "Butanski ngultrum",
+ "symbol": "BTN"
+ },
+ "XOF": {
+ "name": "CFA franak BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA franak BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP franak",
+ "symbol": "CFPF"
+ },
+ "CZK": {
+ "name": "Češka kruna",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "ÄŒileanski pezos",
+ "symbol": "CLP"
+ },
+ "DKK": {
+ "name": "Danska kruna",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "Dominikanski pezos",
+ "symbol": "DOP"
+ },
+ "DJF": {
+ "name": "Džibutanski franak",
+ "symbol": "DJF"
+ },
+ "EGP": {
+ "name": "Egipatska funta",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrejska nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Etiopijski bir",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Evro",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "Fidžijski dolar",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "Filipinski pezos",
+ "symbol": "PHP"
+ },
+ "FKP": {
+ "name": "Foklandska funta",
+ "symbol": "FKP"
+ },
+ "GMD": {
+ "name": "Gambijski dalasi",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "Ganski sedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltarska funta",
+ "symbol": "GIP"
+ },
+ "GEL": {
+ "name": "Gruzijski lari",
+ "symbol": "GEL"
+ },
+ "GYD": {
+ "name": "Gvajanski dolar",
+ "symbol": "GYD"
+ },
+ "GTQ": {
+ "name": "Gvatemalski kecal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Gvinejski franak",
+ "symbol": "GNF"
+ },
+ "HTG": {
+ "name": "Haićanski gurd",
+ "symbol": "HTG"
+ },
+ "ANG": {
+ "name": "Holandskoantilski gulden",
+ "symbol": "ANG"
+ },
+ "HNL": {
+ "name": "Honduraška lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hongkonški dolar",
+ "symbol": "HK$"
+ },
+ "HRK": {
+ "name": "Hrvatska kuna",
+ "symbol": "HRK"
+ },
+ "INR": {
+ "name": "Indijska rupija",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonežanska rupija",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "IraÄki dinar",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "Iranski rijal",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "Islandska kruna",
+ "symbol": "ISK"
+ },
+ "XCD": {
+ "name": "IstoÄnokaripski dolar",
+ "symbol": "EC$"
+ },
+ "ILS": {
+ "name": "Izraelski novi Å¡ekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "JamajÄanski dolar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanski jen",
+ "symbol": "Â¥"
+ },
+ "YER": {
+ "name": "Jemenski rijal",
+ "symbol": "YER"
+ },
+ "AMD": {
+ "name": "Jermenski dram",
+ "symbol": "AMD"
+ },
+ "JOD": {
+ "name": "Jordanski dinar",
+ "symbol": "JOD"
+ },
+ "ZAR": {
+ "name": "Južno-afriÄki rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "Južnokorejski Von",
+ "symbol": "KRW"
+ },
+ "SSP": {
+ "name": "Južnosudanska funta",
+ "symbol": "SSP"
+ },
+ "KYD": {
+ "name": "Kajmanski dolar",
+ "symbol": "KYD"
+ },
+ "KHR": {
+ "name": "Kambodžanski rijel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Kanadski dolar",
+ "symbol": "CA$"
+ },
+ "QAR": {
+ "name": "Katarski rijal",
+ "symbol": "QAR"
+ },
+ "KZT": {
+ "name": "Kazahstanski tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenijski Å¡iling",
+ "symbol": "KES"
+ },
+ "CNY": {
+ "name": "Kineski juan",
+ "symbol": "CNÂ¥"
+ },
+ "KGS": {
+ "name": "Kirgistanski som",
+ "symbol": "KGS"
+ },
+ "COP": {
+ "name": "Kolumbijski pezos",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Komorski franak",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Kongoanski franak",
+ "symbol": "CDF"
+ },
+ "BAM": {
+ "name": "Konvertibilna Marka",
+ "symbol": "KM"
+ },
+ "CRC": {
+ "name": "Kostarikanski kolon",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "Kubanski konvertibilni pezos",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Kubanski pezos",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "Kuvajtski dinar",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "Laoški kip",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "Lesoto loti",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "Libanska funta",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "Liberijski dolar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libijski dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Litvanski litas",
+ "symbol": "LTL"
+ },
+ "HUF": {
+ "name": "Mađarska forinta",
+ "symbol": "HUF"
+ },
+ "MOP": {
+ "name": "Makaniška pataka",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Makedonski denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasijski ariari",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malavijska kvaÄa",
+ "symbol": "MWK"
+ },
+ "MVR": {
+ "name": "Maldivska rufija",
+ "symbol": "MVR"
+ },
+ "MYR": {
+ "name": "Malezijski ringgit",
+ "symbol": "MYR"
+ },
+ "MAD": {
+ "name": "Marokanski dirham",
+ "symbol": "MAD"
+ },
+ "MUR": {
+ "name": "Mauricijska rupija",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "Mauritanijska ogija",
+ "symbol": "MRO"
+ },
+ "MXN": {
+ "name": "MeksiÄki pezos",
+ "symbol": "MX$"
+ },
+ "MMK": {
+ "name": "Mjanmarski kjat",
+ "symbol": "MMK"
+ },
+ "MDL": {
+ "name": "Moldavski lej",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolski tugrik",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "Mozambijski metikal",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "Namibijski dolar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalska rupija",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "Nigerijska naira",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "Nikaragvanska zlatna kordoba",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "Norveška kruna",
+ "symbol": "NOK"
+ },
+ "TWD": {
+ "name": "Novi tajvanski dolar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "Novozelandski dolar",
+ "symbol": "NZD"
+ },
+ "OMR": {
+ "name": "Omanski rijal",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistanska rupija",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamska balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papuanska kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paragvajski gvarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruanski nuevo sol",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "Poljski zlot",
+ "symbol": "PLN"
+ },
+ "RWF": {
+ "name": "Ruandski franak",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "Rumunski lej (1952–2006)",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Ruska rublja",
+ "symbol": "RUB"
+ },
+ "SVC": {
+ "name": "Salvadorski kolon",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoanska tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "Sao Tome i Principe dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudijski rijal",
+ "symbol": "SAR"
+ },
+ "SCR": {
+ "name": "Sejšelska rupija",
+ "symbol": "SCR"
+ },
+ "KPW": {
+ "name": "Severnokorejski von",
+ "symbol": "KPW"
+ },
+ "SLL": {
+ "name": "Sijera-leonški leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapurski dolar",
+ "symbol": "SGD"
+ },
+ "SYP": {
+ "name": "Sirijska funta",
+ "symbol": "SYP"
+ },
+ "SBD": {
+ "name": "Solomonski dolar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somalijski Å¡iling",
+ "symbol": "SOS"
+ },
+ "RSD": {
+ "name": "Srpski dinar",
+ "symbol": "RSD"
+ },
+ "SDG": {
+ "name": "Sudanska funta",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamski dolar",
+ "symbol": "SRD"
+ },
+ "SHP": {
+ "name": "Sv. jelenska funta",
+ "symbol": "SHP"
+ },
+ "SZL": {
+ "name": "Svazi lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "Å rilankanska rupija",
+ "symbol": "LKR"
+ },
+ "CHF": {
+ "name": "Å vajcarski franak",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "Å vedska kruna",
+ "symbol": "SEK"
+ },
+ "TJS": {
+ "name": "Tadžihistanski somon",
+ "symbol": "TJS"
+ },
+ "THB": {
+ "name": "Tajlandski bat",
+ "symbol": "THB"
+ },
+ "TZS": {
+ "name": "Tanzanijski Å¡iling",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "Tongonška Panga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad-tobagoški dolar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tuniski dinar",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "Turkmenistanski manat",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "Turska lira",
+ "symbol": "TRY"
+ },
+ "AED": {
+ "name": "UAE dirham",
+ "symbol": "AED"
+ },
+ "UGX": {
+ "name": "Ugandski Å¡iling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrajinska grivna",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "Urugvajski pezos",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "Uzbekistanski som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatski vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venecuelanski bolivar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vijetnamski dong",
+ "symbol": "VND"
+ },
+ "ZMW": {
+ "name": "Zambijska kvaÄa",
+ "symbol": "ZMW"
+ },
+ "CVE": {
+ "name": "Zelenortski eskudo",
+ "symbol": "CVE"
+ },
+ "ZWL": {
+ "name": "Zimbabveanski dolar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/sr-Latn.json b/library/intl/resources/currency/sr-Latn.json
new file mode 100644
index 000000000..b62497a07
--- /dev/null
+++ b/library/intl/resources/currency/sr-Latn.json
@@ -0,0 +1,634 @@
+{
+ "ALL": {
+ "name": "Albanski lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Alžirski dinar",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "AmeriÄki dolar",
+ "symbol": "US$"
+ },
+ "AOA": {
+ "name": "Angolska kvanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Argentinski pezos",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "Arubanski florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Australijski dolar",
+ "symbol": "AUD"
+ },
+ "AFN": {
+ "name": "Avganistanski avgani",
+ "symbol": "AFN"
+ },
+ "AZN": {
+ "name": "Azerbejdžanski manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahamski dolar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahreinski dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeška taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbadoški dolar",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Beliski dolar",
+ "symbol": "BZD"
+ },
+ "BYR": {
+ "name": "Beloruska rublja",
+ "symbol": "[BYR]"
+ },
+ "BMD": {
+ "name": "Bermudski dolar",
+ "symbol": "BMD"
+ },
+ "BWP": {
+ "name": "Bocvanska pula",
+ "symbol": "BWP"
+ },
+ "BOB": {
+ "name": "Bolivijski Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosansko-hercegovaÄka konvertibilna marka",
+ "symbol": "KM"
+ },
+ "BRL": {
+ "name": "Brazilski real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "Britanska funta sterlinga",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "Brunejski dolar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bugarski lev",
+ "symbol": "[BGN]"
+ },
+ "BIF": {
+ "name": "Burundski franak",
+ "symbol": "BIF"
+ },
+ "BTN": {
+ "name": "Butanski ngultrum",
+ "symbol": "BTN"
+ },
+ "XOF": {
+ "name": "CFA franak BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA franak BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP franak",
+ "symbol": "CFPF"
+ },
+ "CZK": {
+ "name": "Češka kruna",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "ÄŒileanski pezos",
+ "symbol": "CLP"
+ },
+ "DKK": {
+ "name": "Danska kruna",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "Dominikanski pezos",
+ "symbol": "DOP"
+ },
+ "DJF": {
+ "name": "Džibutanski franak",
+ "symbol": "DJF"
+ },
+ "EGP": {
+ "name": "Egipatska funta",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "Eritrejska nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "Etiopijski bir",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Evro",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "Fidžijski dolar",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "Filipinski pezos",
+ "symbol": "PHP"
+ },
+ "FKP": {
+ "name": "Foklandska funta",
+ "symbol": "FKP"
+ },
+ "GMD": {
+ "name": "Gambijski dalasi",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "Ganski sedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltarska funta",
+ "symbol": "GIP"
+ },
+ "GEL": {
+ "name": "Gruzijski lari",
+ "symbol": "GEL"
+ },
+ "GYD": {
+ "name": "Gvajanski dolar",
+ "symbol": "GYD"
+ },
+ "GTQ": {
+ "name": "Gvatemalski kecal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "Gvinejski franak",
+ "symbol": "GNF"
+ },
+ "HTG": {
+ "name": "Haićanski gurd",
+ "symbol": "HTG"
+ },
+ "ANG": {
+ "name": "Holandskoantilski gulden",
+ "symbol": "ANG"
+ },
+ "HNL": {
+ "name": "Honduraška lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hongkonški dolar",
+ "symbol": "HK$"
+ },
+ "HRK": {
+ "name": "Hrvatska kuna",
+ "symbol": "HRK"
+ },
+ "INR": {
+ "name": "Indijska rupija",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "Indonežanska rupija",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "IraÄki dinar",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "Iranski rijal",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "Islandska kruna",
+ "symbol": "ISK"
+ },
+ "XCD": {
+ "name": "IstoÄnokaripski dolar",
+ "symbol": "EC$"
+ },
+ "ILS": {
+ "name": "Izraelski novi Å¡ekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "JamajÄanski dolar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japanski jen",
+ "symbol": "Â¥"
+ },
+ "YER": {
+ "name": "Jemenski rijal",
+ "symbol": "YER"
+ },
+ "AMD": {
+ "name": "Jermenski dram",
+ "symbol": "AMD"
+ },
+ "JOD": {
+ "name": "Jordanski dinar",
+ "symbol": "JOD"
+ },
+ "ZAR": {
+ "name": "Južno-afriÄki rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "Južnokorejski Von",
+ "symbol": "KRW"
+ },
+ "SSP": {
+ "name": "Južnosudanska funta",
+ "symbol": "SSP"
+ },
+ "KYD": {
+ "name": "Kajmanski dolar",
+ "symbol": "KYD"
+ },
+ "KHR": {
+ "name": "Kambodžanski rijel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Kanadski dolar",
+ "symbol": "CA$"
+ },
+ "QAR": {
+ "name": "Katarski rijal",
+ "symbol": "QAR"
+ },
+ "KZT": {
+ "name": "Kazahstanski tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenijski Å¡iling",
+ "symbol": "KES"
+ },
+ "CNY": {
+ "name": "Kineski juan",
+ "symbol": "CNÂ¥"
+ },
+ "KGS": {
+ "name": "Kirgistanski som",
+ "symbol": "KGS"
+ },
+ "COP": {
+ "name": "Kolumbijski pezos",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Komorski franak",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Kongoanski franak",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "Kostarikanski kolon",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "Kubanski konvertibilni pezos",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Kubanski pezos",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "Kuvajtski dinar",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "Laoški kip",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "Lesoto loti",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "Libanska funta",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "Liberijski dolar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libijski dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Litvanski litas",
+ "symbol": "LTL"
+ },
+ "HUF": {
+ "name": "Mađarska forinta",
+ "symbol": "HUF"
+ },
+ "MOP": {
+ "name": "Makaniška pataka",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Makedonski denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "Malagasijski ariari",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malavijska kvaÄa",
+ "symbol": "MWK"
+ },
+ "MVR": {
+ "name": "Maldivska rufija",
+ "symbol": "MVR"
+ },
+ "MYR": {
+ "name": "Malezijski ringgit",
+ "symbol": "MYR"
+ },
+ "MAD": {
+ "name": "Marokanski dirham",
+ "symbol": "MAD"
+ },
+ "MUR": {
+ "name": "Mauricijska rupija",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "Mauritanijska ogija",
+ "symbol": "MRO"
+ },
+ "MXN": {
+ "name": "MeksiÄki pezos",
+ "symbol": "MX$"
+ },
+ "MMK": {
+ "name": "Mjanmarski kjat",
+ "symbol": "MMK"
+ },
+ "MDL": {
+ "name": "Moldavski lej",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "Mongolski tugrik",
+ "symbol": "MNT"
+ },
+ "MZN": {
+ "name": "Mozambijski metikal",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "Namibijski dolar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepalska rupija",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "Nigerijska naira",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "Nikaragvanska zlatna kordoba",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "Norveška kruna",
+ "symbol": "NOK"
+ },
+ "TWD": {
+ "name": "Novi tajvanski dolar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "Novozelandski dolar",
+ "symbol": "NZD"
+ },
+ "OMR": {
+ "name": "Omanski rijal",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "Pakistanska rupija",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panamska balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papuanska kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paragvajski gvarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peruanski nuevo sol",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "Poljski zlot",
+ "symbol": "PLN"
+ },
+ "RWF": {
+ "name": "Ruandski franak",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "Rumunski lej (1952–2006)",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Ruska rublja",
+ "symbol": "RUB"
+ },
+ "SVC": {
+ "name": "Salvadorski kolon",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "Samoanska tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "Sao Tome i Principe dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudijski rijal",
+ "symbol": "SAR"
+ },
+ "SCR": {
+ "name": "Sejšelska rupija",
+ "symbol": "SCR"
+ },
+ "KPW": {
+ "name": "Severnokorejski von",
+ "symbol": "KPW"
+ },
+ "SLL": {
+ "name": "Sijera-leonški leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapurski dolar",
+ "symbol": "SGD"
+ },
+ "SYP": {
+ "name": "Sirijska funta",
+ "symbol": "SYP"
+ },
+ "SBD": {
+ "name": "Solomonski dolar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somalijski Å¡iling",
+ "symbol": "SOS"
+ },
+ "RSD": {
+ "name": "Srpski dinar",
+ "symbol": "RSD"
+ },
+ "SDG": {
+ "name": "Sudanska funta",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinamski dolar",
+ "symbol": "SRD"
+ },
+ "SHP": {
+ "name": "Sv. jelenska funta",
+ "symbol": "SHP"
+ },
+ "SZL": {
+ "name": "Svazi lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "Å rilankanska rupija",
+ "symbol": "LKR"
+ },
+ "CHF": {
+ "name": "Å vajcarski franak",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "Å vedska kruna",
+ "symbol": "SEK"
+ },
+ "TJS": {
+ "name": "Tadžihistanski somon",
+ "symbol": "TJS"
+ },
+ "THB": {
+ "name": "Tajlandski bat",
+ "symbol": "THB"
+ },
+ "TZS": {
+ "name": "Tanzanijski Å¡iling",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "Tongonška Panga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad-tobagoški dolar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tuniski dinar",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "Turkmenistanski manat",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "Turska lira",
+ "symbol": "TRY"
+ },
+ "AED": {
+ "name": "UAE dirham",
+ "symbol": "AED"
+ },
+ "UGX": {
+ "name": "Ugandski Å¡iling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrajinska grivna",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "Urugvajski pezos",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "Uzbekistanski som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "Vanuatski vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venecuelanski bolivar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vijetnamski dong",
+ "symbol": "VND"
+ },
+ "ZMW": {
+ "name": "Zambijska kvaÄa",
+ "symbol": "ZMW"
+ },
+ "CVE": {
+ "name": "Zelenortski eskudo",
+ "symbol": "CVE"
+ },
+ "ZWL": {
+ "name": "Zimbabveanski dolar (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/sr.json b/library/intl/resources/currency/sr.json
new file mode 100644
index 000000000..c7f741abc
--- /dev/null
+++ b/library/intl/resources/currency/sr.json
@@ -0,0 +1,634 @@
+{
+ "XAF": {
+ "name": "CFA франак BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP франак",
+ "symbol": "CFPF"
+ },
+ "ERN": {
+ "name": "EритрејÑка накфa",
+ "symbol": "ERN"
+ },
+ "KHR": {
+ "name": "KамбоџанÑки ријел",
+ "symbol": "KHR"
+ },
+ "TJS": {
+ "name": "TаџихиÑтанÑки Ñомон",
+ "symbol": "TJS"
+ },
+ "AFN": {
+ "name": "ÐвганиÑтанÑки авгани",
+ "symbol": "AFN"
+ },
+ "AZN": {
+ "name": "ÐзербејџанÑки манат",
+ "symbol": "AZN"
+ },
+ "ALL": {
+ "name": "ÐлбанÑки лек",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "ÐлжирÑки динар",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "Ðмерички долар",
+ "symbol": "US$"
+ },
+ "AOA": {
+ "name": "ÐнголÑка кванза",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ÐргентинÑки пезоÑ",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "ÐрубанÑки флорин",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "ÐуÑтралијÑки долар",
+ "symbol": "AUD"
+ },
+ "BDT": {
+ "name": "Бангладешка така",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Барбадошки долар",
+ "symbol": "BBD"
+ },
+ "BSD": {
+ "name": "БахамÑки долар",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "БахреинÑки динар",
+ "symbol": "BHD"
+ },
+ "BZD": {
+ "name": "БелиÑки долар",
+ "symbol": "BZD"
+ },
+ "BYR": {
+ "name": "БелоруÑка рубља",
+ "symbol": "[BYR]"
+ },
+ "BMD": {
+ "name": "БермудÑки долар",
+ "symbol": "BMD"
+ },
+ "BOB": {
+ "name": "БоливијÑки Боливиано",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "БоÑанÑко-херцеговачка конвертибилна марка",
+ "symbol": "КМ"
+ },
+ "BWP": {
+ "name": "БоцванÑка пула",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "БразилÑки реал",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "БританÑка фунта Ñтерлинга",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "БрунејÑки долар",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "БугарÑки лев",
+ "symbol": "[BGN]"
+ },
+ "BIF": {
+ "name": "БурундÑки франак",
+ "symbol": "BIF"
+ },
+ "BTN": {
+ "name": "БутанÑки нгултрум",
+ "symbol": "BTN"
+ },
+ "VUV": {
+ "name": "ВануатÑки вату",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "ВенецуеланÑки боливар",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "ВијетнамÑки донг",
+ "symbol": "VND"
+ },
+ "GMD": {
+ "name": "ГамбијÑки далаÑи",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "ГанÑки Ñеди",
+ "symbol": "GHS"
+ },
+ "GYD": {
+ "name": "ГвајанÑки долар",
+ "symbol": "GYD"
+ },
+ "GTQ": {
+ "name": "ГватемалÑки кецал",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "ГвинејÑки франак",
+ "symbol": "GNF"
+ },
+ "GIP": {
+ "name": "ГибралтарÑка фунта",
+ "symbol": "GIP"
+ },
+ "GEL": {
+ "name": "ГрузијÑки лари",
+ "symbol": "GEL"
+ },
+ "DKK": {
+ "name": "ДанÑка круна",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "ДоминиканÑки пезоÑ",
+ "symbol": "DOP"
+ },
+ "EUR": {
+ "name": "Евро",
+ "symbol": "€"
+ },
+ "EGP": {
+ "name": "ЕгипатÑка фунта",
+ "symbol": "EGP"
+ },
+ "ETB": {
+ "name": "ЕтиопијÑки бир",
+ "symbol": "ETB"
+ },
+ "ZMW": {
+ "name": "ЗамбијÑка квача",
+ "symbol": "ZMW"
+ },
+ "CVE": {
+ "name": "ЗеленортÑки еÑкудо",
+ "symbol": "CVE"
+ },
+ "ZWL": {
+ "name": "ЗимбабвеанÑки долар (2009)",
+ "symbol": "ZWL"
+ },
+ "ILS": {
+ "name": "ИзраелÑки нови шекел",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "ИндијÑка рупија",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "ИндонежанÑка рупија",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "ИранÑки риjал",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "Ирачки динар",
+ "symbol": "IQD"
+ },
+ "ISK": {
+ "name": "ИÑландÑка круна",
+ "symbol": "ISK"
+ },
+ "XCD": {
+ "name": "ИÑточнокарипÑки долар",
+ "symbol": "EC$"
+ },
+ "JMD": {
+ "name": "ЈамајчанÑки долар",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "ЈапанÑки јен",
+ "symbol": "Â¥"
+ },
+ "YER": {
+ "name": "ЈеменÑки риjал",
+ "symbol": "YER"
+ },
+ "AMD": {
+ "name": "ЈерменÑки драм",
+ "symbol": "AMD"
+ },
+ "JOD": {
+ "name": "ЈорданÑки динар",
+ "symbol": "JOD"
+ },
+ "ZAR": {
+ "name": "Јужно-афрички ранд",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "ЈужнокорејÑки Вон",
+ "symbol": "KRW"
+ },
+ "SSP": {
+ "name": "ЈужноÑуданÑка фунта",
+ "symbol": "SSP"
+ },
+ "KZT": {
+ "name": "КазахÑтанÑки тенге",
+ "symbol": "KZT"
+ },
+ "KYD": {
+ "name": "КајманÑки долар",
+ "symbol": "KYD"
+ },
+ "CAD": {
+ "name": "КанадÑки долар",
+ "symbol": "CA$"
+ },
+ "QAR": {
+ "name": "КатарÑки ријал",
+ "symbol": "QAR"
+ },
+ "KES": {
+ "name": "КенијÑки шилинг",
+ "symbol": "KES"
+ },
+ "CNY": {
+ "name": "КинеÑки јуан",
+ "symbol": "CNÂ¥"
+ },
+ "KGS": {
+ "name": "КиргиÑтанÑки Ñом",
+ "symbol": "KGS"
+ },
+ "COP": {
+ "name": "КолумбијÑки пезоÑ",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "КоморÑки франак",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "КонгоанÑки франак",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "КоÑтариканÑки колон",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "КубанÑки конвертибилни пезоÑ",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "КубанÑки пезоÑ",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "КувајтÑки динар",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "Лаошки кип",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "ЛеÑото лоти",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "ЛибанÑка фунта",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "ЛиберијÑки долар",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "ЛибијÑки динар",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "ЛитванÑки литаÑ",
+ "symbol": "LTL"
+ },
+ "HUF": {
+ "name": "МађарÑка форинта",
+ "symbol": "HUF"
+ },
+ "MOP": {
+ "name": "Маканишка патака",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "МакедонÑки денар",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "МалавијÑка квача",
+ "symbol": "MWK"
+ },
+ "MGA": {
+ "name": "МалагаÑијÑки ариари",
+ "symbol": "MGA"
+ },
+ "MVR": {
+ "name": "МалдивÑка руфија",
+ "symbol": "MVR"
+ },
+ "MYR": {
+ "name": "МалезијÑки ринггит",
+ "symbol": "MYR"
+ },
+ "MAD": {
+ "name": "МароканÑки дирхам",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "МауританијÑка oгија",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "МаурицијÑка рупија",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "МекÑички пезоÑ",
+ "symbol": "MX$"
+ },
+ "MMK": {
+ "name": "МјанмарÑки кјат",
+ "symbol": "MMK"
+ },
+ "MZN": {
+ "name": "МозамбијÑки метикал",
+ "symbol": "MZN"
+ },
+ "MDL": {
+ "name": "МолдавÑки леј",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "МонголÑки тугрик",
+ "symbol": "MNT"
+ },
+ "NAD": {
+ "name": "ÐамибијÑки долар",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "ÐепалÑкa рупиja",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "ÐигеријÑка наира",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "ÐикарагванÑка златна кордоба",
+ "symbol": "NIO"
+ },
+ "TWD": {
+ "name": "Ðови тајванÑки долар",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "ÐовозеландÑки долар",
+ "symbol": "NZD"
+ },
+ "NOK": {
+ "name": "Ðорвешка круна",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "ОманÑки ријал",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "ПакиÑтанÑкa рупиja",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "ПанамÑка балбоа",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "ПапуанÑка кина",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "ПарагвајÑки гварани",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "ПеруанÑки нуево Ñол",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "ПољÑки злот",
+ "symbol": "PLN"
+ },
+ "RWF": {
+ "name": "РуандÑки франак",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "РумунÑки леј (1952–2006)",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "РуÑка рубља",
+ "symbol": "RUB"
+ },
+ "SVC": {
+ "name": "СалвадорÑки колон",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "СамоанÑка тала",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "Сао Томе и Принципе добра",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "СаудијÑки ријал",
+ "symbol": "SAR"
+ },
+ "SHP": {
+ "name": "Св. јеленÑка фунта",
+ "symbol": "SHP"
+ },
+ "SZL": {
+ "name": "Свази лилангени",
+ "symbol": "SZL"
+ },
+ "KPW": {
+ "name": "СевернокорејÑки вон",
+ "symbol": "KPW"
+ },
+ "SCR": {
+ "name": "СејшелÑка рупија",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "Сијера-леоншки леоне",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "СингапурÑки долар",
+ "symbol": "SGD"
+ },
+ "SYP": {
+ "name": "СиријÑка фунта",
+ "symbol": "SYP"
+ },
+ "SBD": {
+ "name": "СоломонÑки долар",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "СомалијÑки шилинг",
+ "symbol": "SOS"
+ },
+ "RSD": {
+ "name": "СрпÑки динар",
+ "symbol": "RSD"
+ },
+ "SDG": {
+ "name": "СуданÑка фунта",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "СуринамÑки долар",
+ "symbol": "SRD"
+ },
+ "THB": {
+ "name": "ТајландÑки бат",
+ "symbol": "THB"
+ },
+ "TZS": {
+ "name": "ТанзанијÑки шилинг",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "Тонгоншка Панга",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Тринидад-тобагошки долар",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "ТуниÑки динар",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "ТуркмениÑтанÑки манат",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "ТурÑка лира",
+ "symbol": "TRY"
+ },
+ "AED": {
+ "name": "УÐЕ дирхам",
+ "symbol": "AED"
+ },
+ "UGX": {
+ "name": "УгандÑки шилинг",
+ "symbol": "UGX"
+ },
+ "UZS": {
+ "name": "УзбекиÑтанÑки Ñом",
+ "symbol": "UZS"
+ },
+ "UAH": {
+ "name": "УкрајинÑка гривна",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "УругвајÑки пезоÑ",
+ "symbol": "UYU"
+ },
+ "PHP": {
+ "name": "ФилипинÑки пезоÑ",
+ "symbol": "PHP"
+ },
+ "FJD": {
+ "name": "ФиџијÑки долар",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "ФокландÑка фунта",
+ "symbol": "FKP"
+ },
+ "HTG": {
+ "name": "ХаићанÑки гурд",
+ "symbol": "HTG"
+ },
+ "ANG": {
+ "name": "ХоландÑкоантилÑки гулден",
+ "symbol": "ANG"
+ },
+ "HKD": {
+ "name": "Хонгконшки долар",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "Хондурашка лемпира",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "ХрватÑка куна",
+ "symbol": "HRK"
+ },
+ "XOF": {
+ "name": "ЦФРфранак БЦЕÐО",
+ "symbol": "CFA"
+ },
+ "CZK": {
+ "name": "Чешка круна",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "ЧилеанÑки пезоÑ",
+ "symbol": "CLP"
+ },
+ "DJF": {
+ "name": "ÐибутанÑки франак",
+ "symbol": "DJF"
+ },
+ "CHF": {
+ "name": "ШвајцарÑки франак",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "ШведÑка круна",
+ "symbol": "SEK"
+ },
+ "LKR": {
+ "name": "ШриланканÑкa рупиja",
+ "symbol": "LKR"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/sv.json b/library/intl/resources/currency/sv.json
new file mode 100644
index 000000000..08dd8008a
--- /dev/null
+++ b/library/intl/resources/currency/sv.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "afghansk afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "albansk lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "algerisk dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "angolansk kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "argentinsk peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "armenisk dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "arubansk florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "australisk dollar",
+ "symbol": "AUD"
+ },
+ "AZN": {
+ "name": "azerbajdzjansk manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "bahamansk dollar",
+ "symbol": "BS$"
+ },
+ "BHD": {
+ "name": "bahrainsk dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "bangladeshisk taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbados-dollar",
+ "symbol": "Bds$"
+ },
+ "BZD": {
+ "name": "belizisk dollar",
+ "symbol": "BZ$"
+ },
+ "BMD": {
+ "name": "Bermuda-dollar",
+ "symbol": "BM$"
+ },
+ "BTN": {
+ "name": "bhutanesisk ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "boliviansk boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "bosnisk-hercegovinsk mark (konvertibel)",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "botswansk pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "brasiliansk real",
+ "symbol": "BR$"
+ },
+ "GBP": {
+ "name": "brittiskt pund",
+ "symbol": "GBP"
+ },
+ "BND": {
+ "name": "bruneisk dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "bulgarisk lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "burundisk franc",
+ "symbol": "BIF"
+ },
+ "KYD": {
+ "name": "Cayman-dollar",
+ "symbol": "KYD"
+ },
+ "XAF": {
+ "name": "centralafrikansk franc",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP-franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "chilensk peso",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "colombiansk peso",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "costarikansk colón",
+ "symbol": "CRC"
+ },
+ "DKK": {
+ "name": "dansk krona",
+ "symbol": "Dkr"
+ },
+ "DJF": {
+ "name": "djiboutisk franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "dominikansk peso",
+ "symbol": "RD$"
+ },
+ "EGP": {
+ "name": "egyptiskt pund",
+ "symbol": "EG£"
+ },
+ "ERN": {
+ "name": "eritreansk nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "etiopisk birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falklandspund",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Fijidollar",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "filippinsk peso",
+ "symbol": "PHP"
+ },
+ "AED": {
+ "name": "Förenade Arabemiratens dirham",
+ "symbol": "AED"
+ },
+ "GMD": {
+ "name": "gambisk dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "georgisk lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "ghanansk cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "gibraltiskt pund",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "guatemalansk quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "guineansk franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "guyanansk dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "haitisk gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "honduransk lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hongkongdollar",
+ "symbol": "HKD"
+ },
+ "INR": {
+ "name": "indisk rupie",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "indonesisk rupiah",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "irakisk dinar",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "iransk rial",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "isländsk krona",
+ "symbol": "Ikr"
+ },
+ "ILS": {
+ "name": "israelisk ny shekel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "Jamaica-dollar",
+ "symbol": "JM$"
+ },
+ "JPY": {
+ "name": "japansk yen",
+ "symbol": "JPY"
+ },
+ "YER": {
+ "name": "jemenitisk rial",
+ "symbol": "YER"
+ },
+ "JOD": {
+ "name": "jordansk dinar",
+ "symbol": "JOD"
+ },
+ "KHR": {
+ "name": "kambodjansk riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "kanadensisk dollar",
+ "symbol": "CAN$"
+ },
+ "CVE": {
+ "name": "kapverdisk escudo",
+ "symbol": "CVE"
+ },
+ "KZT": {
+ "name": "kazakisk tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "kenyansk shilling",
+ "symbol": "KES"
+ },
+ "CNY": {
+ "name": "kinesisk yuan",
+ "symbol": "CNY"
+ },
+ "KGS": {
+ "name": "kirgizisk som",
+ "symbol": "KGS"
+ },
+ "KMF": {
+ "name": "komorisk franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "kongolesisk franc",
+ "symbol": "CDF"
+ },
+ "HRK": {
+ "name": "kroatisk kuna",
+ "symbol": "HRK"
+ },
+ "CUP": {
+ "name": "kubansk peso",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "kubansk peso (konvertibel)",
+ "symbol": "CUC"
+ },
+ "KWD": {
+ "name": "kuwaitisk dinar",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "laotisk kip",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "lesothisk loti",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "libanesiskt pund",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "liberiansk dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "libysk dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "litauisk litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "macaosk pataca",
+ "symbol": "MOP"
+ },
+ "MGA": {
+ "name": "madagaskisk ariary",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "makedonisk denar",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "malawisk kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "malaysisk ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "maldivisk rufiyaa",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "marockansk dirham",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "mauretansk ouquiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "mauritisk rupie",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "mexikansk peso",
+ "symbol": "MX$"
+ },
+ "MZN": {
+ "name": "moçambikisk metical",
+ "symbol": "MZN"
+ },
+ "MDL": {
+ "name": "moldavisk leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "mongolisk tögrög",
+ "symbol": "MNT"
+ },
+ "MMK": {
+ "name": "myanmarisk kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "namibisk dollar",
+ "symbol": "NAD"
+ },
+ "ANG": {
+ "name": "Nederländska Antillernas gulden",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "nepalesisk rupie",
+ "symbol": "NPR"
+ },
+ "NIO": {
+ "name": "nicaraguansk córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "nigeriansk naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "nordkoreansk won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "norsk krona",
+ "symbol": "Nkr"
+ },
+ "NZD": {
+ "name": "nyzeeländsk dollar",
+ "symbol": "NZD"
+ },
+ "OMR": {
+ "name": "omansk rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "pakistansk rupie",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "panamansk balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "papuansk kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "paraguayansk guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "peruansk nuevo sol",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "polsk zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "qatarisk rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "rumänsk leu",
+ "symbol": "RON"
+ },
+ "RWF": {
+ "name": "rwandisk franc",
+ "symbol": "RWF"
+ },
+ "RUB": {
+ "name": "rysk rubel",
+ "symbol": "RUB"
+ },
+ "SHP": {
+ "name": "S:t Helena-pund",
+ "symbol": "SHP"
+ },
+ "SBD": {
+ "name": "Salomondollar",
+ "symbol": "SBD"
+ },
+ "SVC": {
+ "name": "salvadoransk colón",
+ "symbol": "SVC"
+ },
+ "STD": {
+ "name": "saotomeansk dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "saudisk riyal",
+ "symbol": "SAR"
+ },
+ "CHF": {
+ "name": "schweizisk franc",
+ "symbol": "CHF"
+ },
+ "RSD": {
+ "name": "serbisk dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "seychellisk rupie",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "sierraleonsk leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "singaporiansk dollar",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "somalisk shilling",
+ "symbol": "SOS"
+ },
+ "LKR": {
+ "name": "srilankesisk rupie",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "sudanesiskt pund",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "surinamesisk dollar",
+ "symbol": "SRD"
+ },
+ "SEK": {
+ "name": "svensk krona",
+ "symbol": "kr"
+ },
+ "SZL": {
+ "name": "swaziländsk lilangeni",
+ "symbol": "SZL"
+ },
+ "ZAR": {
+ "name": "sydafrikansk rand",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "sydkoreansk won",
+ "symbol": "KRW"
+ },
+ "SSP": {
+ "name": "sydsudanesiskt pund",
+ "symbol": "SSP"
+ },
+ "SYP": {
+ "name": "syriskt pund",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "tadzjikisk somoni",
+ "symbol": "TJS"
+ },
+ "TWD": {
+ "name": "Taiwandollar",
+ "symbol": "TWD"
+ },
+ "TZS": {
+ "name": "tanzanisk shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "thailändsk baht",
+ "symbol": "THB"
+ },
+ "CZK": {
+ "name": "tjeckisk koruna",
+ "symbol": "CZK"
+ },
+ "TOP": {
+ "name": "tongansk paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad och Tobago-dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "tunisisk dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "turkisk lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "turkmenistansk manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "ugandisk shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "ukrainsk hryvnia",
+ "symbol": "UAH"
+ },
+ "HUF": {
+ "name": "ungersk forint",
+ "symbol": "HUF"
+ },
+ "UYU": {
+ "name": "uruguayansk peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "US-dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "uzbekisk sum",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "vanuatisk vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "venezuelansk bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "vietnamesisk dong",
+ "symbol": "VND"
+ },
+ "BYR": {
+ "name": "vitrysk rubel",
+ "symbol": "BYR"
+ },
+ "XOF": {
+ "name": "västafrikansk franc",
+ "symbol": "CFA"
+ },
+ "WST": {
+ "name": "västsamoansk tala",
+ "symbol": "WST"
+ },
+ "ZMW": {
+ "name": "zambisk kwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabwe-dollar (2009)",
+ "symbol": "ZWL"
+ },
+ "XCD": {
+ "name": "östkaribisk dollar",
+ "symbol": "EC$"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/sw.json b/library/intl/resources/currency/sw.json
new file mode 100644
index 000000000..5ae8d2a46
--- /dev/null
+++ b/library/intl/resources/currency/sw.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghani ya Afuganistani",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "Ariari ya Madagaska",
+ "symbol": "MGA"
+ },
+ "THB": {
+ "name": "Baht ya Tailandi",
+ "symbol": "฿"
+ },
+ "PAB": {
+ "name": "Balboa ya Panama",
+ "symbol": "PAB"
+ },
+ "ETB": {
+ "name": "birr ya Uhabeshi",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "Bolivar ya Venezuela",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "Boliviano ya Bolivia",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "Cedi ya Ghana",
+ "symbol": "GHS"
+ },
+ "XAF": {
+ "name": "CFA faranga ya BEAC",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "CFA faranga za BCEAO",
+ "symbol": "CFA"
+ },
+ "CRC": {
+ "name": "Colon ya Kostarika",
+ "symbol": "CRC"
+ },
+ "BAM": {
+ "name": "Convertible Mark ya Bosnia na Hezegovina",
+ "symbol": "BAM"
+ },
+ "NIO": {
+ "name": "Cordoba ya Nikaragua",
+ "symbol": "NIO"
+ },
+ "GMD": {
+ "name": "dalasi ya Gambia",
+ "symbol": "GMD"
+ },
+ "MKD": {
+ "name": "Denar ya Masedonia",
+ "symbol": "MKD"
+ },
+ "RSD": {
+ "name": "Dinar ya Serbia",
+ "symbol": "RSD"
+ },
+ "DZD": {
+ "name": "dinari ya Aljeria",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "dinari ya Bahareni",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "Dinari ya Iraki",
+ "symbol": "IQD"
+ },
+ "KWD": {
+ "name": "Dinari ya Kuwaiti",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "dinari ya Libya",
+ "symbol": "LYD"
+ },
+ "TND": {
+ "name": "dinari ya Tunisia",
+ "symbol": "TND"
+ },
+ "JOD": {
+ "name": "Dinari ya Yordani",
+ "symbol": "JOD"
+ },
+ "AED": {
+ "name": "dirham ya Falme za Kiarabu",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "dirham ya Moroko",
+ "symbol": "MAD"
+ },
+ "STD": {
+ "name": "dobra ya Sao Tome na Principe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "dola ya Australia",
+ "symbol": "A$"
+ },
+ "BSD": {
+ "name": "Dola ya Bahamas",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "Dola ya Barbados",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Dola ya Belize",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Dola ya Bermuda",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "Dola ya Brunei",
+ "symbol": "BND"
+ },
+ "FJD": {
+ "name": "Dola ya Fiji",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "Dola ya Guyana",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "Dola ya Hong Kong",
+ "symbol": "HK$"
+ },
+ "JMD": {
+ "name": "Dola ya Jamaica",
+ "symbol": "JMD"
+ },
+ "CAD": {
+ "name": "dola ya Kanada",
+ "symbol": "CA$"
+ },
+ "XCD": {
+ "name": "Dola ya Karibea ya Mashariki",
+ "symbol": "EC$"
+ },
+ "LRD": {
+ "name": "dola ya Liberia",
+ "symbol": "LRD"
+ },
+ "USD": {
+ "name": "dola ya Marekani",
+ "symbol": "US$"
+ },
+ "NAD": {
+ "name": "dola ya Namibia",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "Dola ya Nyuzilandi",
+ "symbol": "NZ$"
+ },
+ "SGD": {
+ "name": "Dola ya Singapore",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "Dola ya Suriname",
+ "symbol": "SRD"
+ },
+ "TWD": {
+ "name": "Dola ya Taiwan",
+ "symbol": "NT$"
+ },
+ "TTD": {
+ "name": "Dola ya Trinidad na Tobago",
+ "symbol": "TTD"
+ },
+ "KYD": {
+ "name": "Dola ya Visiwa vya Cayman",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "Dola ya Visiwa vya Solomon",
+ "symbol": "SBD"
+ },
+ "VND": {
+ "name": "Dong ya Vietinamu",
+ "symbol": "â‚«"
+ },
+ "AMD": {
+ "name": "Dram ya Armenia",
+ "symbol": "AMD"
+ },
+ "CVE": {
+ "name": "eskudo ya Kepuvede",
+ "symbol": "CVE"
+ },
+ "BIF": {
+ "name": "faranga ya Burundi",
+ "symbol": "BIF"
+ },
+ "XPF": {
+ "name": "Faranga ya CFP",
+ "symbol": "CFPF"
+ },
+ "GNF": {
+ "name": "faranga ya Guinea",
+ "symbol": "GNF"
+ },
+ "DJF": {
+ "name": "faranga ya Jibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "faranga ya Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "faranga ya Kongo",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "faranga ya Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "faranga ya Uswisi",
+ "symbol": "CHF"
+ },
+ "AWG": {
+ "name": "Florin ya Aruba",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "Forint ya Hungaria",
+ "symbol": "HUF"
+ },
+ "HTG": {
+ "name": "Gourde ya Haiti",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "Guarani ya Paragwai",
+ "symbol": "PYG"
+ },
+ "ANG": {
+ "name": "Guilder ya Antili za Kiholanzi",
+ "symbol": "ANG"
+ },
+ "UAH": {
+ "name": "Hryvnia ya Ukrania",
+ "symbol": "UAH"
+ },
+ "PGK": {
+ "name": "Kina ya Papua New Guinea",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "Kip ya Laosi",
+ "symbol": "LAK"
+ },
+ "CZK": {
+ "name": "Koruna ya Jamhuri ya Cheki",
+ "symbol": "CZK"
+ },
+ "ISK": {
+ "name": "Krona ya Isilandi",
+ "symbol": "ISK"
+ },
+ "SEK": {
+ "name": "Krona ya Uswidi",
+ "symbol": "SEK"
+ },
+ "DKK": {
+ "name": "Krone ya Denmaki",
+ "symbol": "DKK"
+ },
+ "NOK": {
+ "name": "Krone ya Norwe",
+ "symbol": "NOK"
+ },
+ "HRK": {
+ "name": "Kuna ya Kroeshia",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "kwacha ya Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "kwacha ya Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "kwanza ya Angola",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "Kyat ya Myama",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "Lari ya Georgia",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "Lek ya Albania",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "Lempira ya Hondurasi",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "leoni",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "Leu ya Moldova",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "Leu ya Romania",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "Lev ya Bulgaria",
+ "symbol": "BGN"
+ },
+ "SZL": {
+ "name": "lilangeni",
+ "symbol": "SZL"
+ },
+ "TRY": {
+ "name": "Lira ya Uturuki",
+ "symbol": "TRY"
+ },
+ "LTL": {
+ "name": "Litas ya Lithuania",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "loti ya Lesoto",
+ "symbol": "LSL"
+ },
+ "AZN": {
+ "name": "Manat ya Azebaijani",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "Manat ya Turukimenistani",
+ "symbol": "TMT"
+ },
+ "MZN": {
+ "name": "Metikali ya Msumbiji",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "naira ya Nijeria",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "nakfa ya Eritrea",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "Ngultrum ya Bhutan",
+ "symbol": "BTN"
+ },
+ "PEN": {
+ "name": "Nuevo Sol ya Peru",
+ "symbol": "PEN"
+ },
+ "MRO": {
+ "name": "Ouguiya ya Moritania",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "Paʻanga ya Tonga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "Pataca ya Macau",
+ "symbol": "MOP"
+ },
+ "GIP": {
+ "name": "Pauni ya Gibraltar",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "Pauni ya Lebanon",
+ "symbol": "LBP"
+ },
+ "EGP": {
+ "name": "pauni ya Misri",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "pauni ya Santahelena",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "pauni ya Sudani",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "pauni ya Sudani Kusini",
+ "symbol": "SSP"
+ },
+ "SYP": {
+ "name": "Pauni ya Syria",
+ "symbol": "SYP"
+ },
+ "GBP": {
+ "name": "pauni ya Uingereza",
+ "symbol": "£"
+ },
+ "FKP": {
+ "name": "Pauni ya Visiwa vya Falkland",
+ "symbol": "FKP"
+ },
+ "ARS": {
+ "name": "Peso ya Ajentina",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "Peso ya Chile",
+ "symbol": "CLP"
+ },
+ "CUP": {
+ "name": "Peso ya Cuba",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "Peso ya Cuba Inayoweza Kubadilishwa",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "Peso ya Dominika",
+ "symbol": "DOP"
+ },
+ "COP": {
+ "name": "Peso ya Kolombia",
+ "symbol": "COP"
+ },
+ "MXN": {
+ "name": "Peso ya Meksiko",
+ "symbol": "MX$"
+ },
+ "PHP": {
+ "name": "Peso ya Ufilipino",
+ "symbol": "PHP"
+ },
+ "UYU": {
+ "name": "Peso ya Urugwai",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "pula ya Botswana",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "Quetzal ya Guatemala",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "randi ya Afrika Kusini",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "Real ya Brazil",
+ "symbol": "R$"
+ },
+ "IRR": {
+ "name": "Rial ya Iran",
+ "symbol": "IRR"
+ },
+ "QAR": {
+ "name": "Rial ya Katari",
+ "symbol": "QAR"
+ },
+ "OMR": {
+ "name": "Rial ya Omani",
+ "symbol": "OMR"
+ },
+ "YER": {
+ "name": "Rial ya Yemeni",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "Riel ya Kambodia",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "Ringgit ya Malaysia",
+ "symbol": "MYR"
+ },
+ "SAR": {
+ "name": "riyal ya Saudia",
+ "symbol": "SAR"
+ },
+ "BYR": {
+ "name": "Ruble ya Belarusi",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "Ruble ya Urusi",
+ "symbol": "RUB"
+ },
+ "MVR": {
+ "name": "Rufiyaa ya Maldivi",
+ "symbol": "MVR"
+ },
+ "INR": {
+ "name": "rupia ya India",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "rupia ya Morisi",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "Rupia ya Nepali",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "Rupia ya Pakistani",
+ "symbol": "PKR"
+ },
+ "LKR": {
+ "name": "Rupia ya Sirilanka",
+ "symbol": "LKR"
+ },
+ "SCR": {
+ "name": "rupia ya Ushelisheli",
+ "symbol": "SCR"
+ },
+ "IDR": {
+ "name": "Rupiah ya Indonesia",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "Sheqel Mpya ya Israeli",
+ "symbol": "₪"
+ },
+ "KES": {
+ "name": "shilingi ya Kenya",
+ "symbol": "Ksh"
+ },
+ "SOS": {
+ "name": "shilingi ya Somalia",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "shilingi ya Tanzania",
+ "symbol": "TSh"
+ },
+ "UGX": {
+ "name": "shilingi ya Uganda",
+ "symbol": "UGX"
+ },
+ "KGS": {
+ "name": "Som ya Kirigistani",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "Som ya Uzibekistani",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "Somoni ya Tajikistani",
+ "symbol": "TJS"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "BDT": {
+ "name": "Taka ya Bangladeshi",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "Tala ya Samoa",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "Tenge ya Kazakistani",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "Tugrik ya Mongolia",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "Vatu ya Vanuatu",
+ "symbol": "VUV"
+ },
+ "KPW": {
+ "name": "Won ya Korea Kaskazini",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "Won ya Korea Kusini",
+ "symbol": "â‚©"
+ },
+ "JPY": {
+ "name": "Yen ya Japani",
+ "symbol": "JPÂ¥"
+ },
+ "CNY": {
+ "name": "yuan ya Uchina",
+ "symbol": "CNÂ¥"
+ },
+ "EUR": {
+ "name": "yuro",
+ "symbol": "€"
+ },
+ "PLN": {
+ "name": "Zloty ya Polandi",
+ "symbol": "PLN"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/swc.json b/library/intl/resources/currency/swc.json
new file mode 100644
index 000000000..5c1e38f95
--- /dev/null
+++ b/library/intl/resources/currency/swc.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "MGA": {
+ "name": "Ariary ya Bukini",
+ "symbol": "MGA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Bir ya Uhabeshi",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi ya Gambia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinari ya Aljeria",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinari ya Bahareni",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinari ya Libya",
+ "symbol": "LYD"
+ },
+ "TND": {
+ "name": "Dinari ya Tunisia",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham ya Falme za Kiarabu",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham ya Moroko",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobra ya Sao Tome na Principe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "Dola ya Australia",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "Dola ya Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dola ya Liberia",
+ "symbol": "LRD"
+ },
+ "USD": {
+ "name": "Dola ya Marekani",
+ "symbol": "US$"
+ },
+ "NAD": {
+ "name": "Dola ya Namibia",
+ "symbol": "NAD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "Eskudo ya Kepuvede",
+ "symbol": "CVE"
+ },
+ "XOF": {
+ "name": "Faranga CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Faranga CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "BIF": {
+ "name": "Faranga ya Burundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Faranga ya Jibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Faranga ya Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Faranga ya Kongo",
+ "symbol": "FC"
+ },
+ "RWF": {
+ "name": "Faranga ya Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Faranga ya Uswisi",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kwacha ya Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha ya Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza ya Angola",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leoni",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti ya Lesoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira ya Nijeria",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa ya Eritrea",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "EGP": {
+ "name": "Pauni ya Misri",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Pauni ya Santahelena",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Pauni ya Sudani",
+ "symbol": "SDG"
+ },
+ "GBP": {
+ "name": "Pauni ya Uingereza",
+ "symbol": "£"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pula ya Botswana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Randi ya Afrika Kusini",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riyal ya Saudia",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupia ya India",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupia ya Morisi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupia ya Shelisheli",
+ "symbol": "SCR"
+ },
+ "JPY": {
+ "name": "Sarafu ya Kijapani",
+ "symbol": "JPÂ¥"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "Shilingi ya Kenya",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Shilingi ya Somalia",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Shilingi ya Tanzania",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Shilingi ya Uganda",
+ "symbol": "UGX"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ugwiya ya Moritania",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yuan Renminbi ya China",
+ "symbol": "CNÂ¥"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ta-MY.json b/library/intl/resources/currency/ta-MY.json
new file mode 100644
index 000000000..d563b0f7a
--- /dev/null
+++ b/library/intl/resources/currency/ta-MY.json
@@ -0,0 +1,634 @@
+{
+ "XOF": {
+ "name": "CFA ஃபà¯à®°à®¾à®™à¯à®•à¯ BCEAO",
+ "symbol": "CFA"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "AOA": {
+ "name": "à®…à®™à¯à®•à¯‹à®²à®©à¯ கà¯à®µà®¾à®©à¯à®¸à®¾",
+ "symbol": "AOA"
+ },
+ "AZN": {
+ "name": "அசரà¯à®ªà¯ˆà®œà®¾à®©à®¿ மனதà¯",
+ "symbol": "AZN"
+ },
+ "USD": {
+ "name": "அமெரிகà¯à®• டாலரà¯",
+ "symbol": "$"
+ },
+ "ARS": {
+ "name": "à®…à®°à¯à®œà¯†à®©à¯à®Ÿà®¿à®©à®¾ பேசோ",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "à®…à®°à¯à®ªà®©à¯ ஃபà¯à®³à¯‹à®°à®¿à®©à¯",
+ "symbol": "AWG"
+ },
+ "ALL": {
+ "name": "அலà¯à®ªà¯‡à®©à®¿à®¯à®©à¯ லெகà¯",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "அலà¯à®œà¯€à®°à®¿à®¯à®©à¯ தினாரà¯",
+ "symbol": "DZD"
+ },
+ "AFN": {
+ "name": "ஆஃபà¯à®•à®¾à®©à¯ ஆஃபà¯à®•à®¾à®©à®¿",
+ "symbol": "AFN"
+ },
+ "AMD": {
+ "name": "ஆரà¯à®®à¯‡à®©à®¿à®¯à®©à¯ டà¯à®°à®¾à®®à¯",
+ "symbol": "AMD"
+ },
+ "AUD": {
+ "name": "ஆஸà¯à®¤à®¿à®°à¯‡à®²à®¿à®¯ டாலரà¯",
+ "symbol": "A$"
+ },
+ "INR": {
+ "name": "இநà¯à®¤à®¿à®¯ ரூபாயà¯",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "இநà¯à®¤à¯‹à®©à¯‡à®·à®¿à®¯à®©à¯ à®°à¯à®ªà®¿à®¯à®¾",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "இரானியன௠ரியாலà¯",
+ "symbol": "IRR"
+ },
+ "ERN": {
+ "name": "இரிடிரியன௠நகà¯à®ƒà®ªà®¾",
+ "symbol": "ERN"
+ },
+ "LKR": {
+ "name": "இலஙà¯à®•à¯ˆ ரூபாயà¯",
+ "symbol": "LKR"
+ },
+ "ILS": {
+ "name": "இஸà¯à®°à¯‡à®²à®¿ நியூ ஷிகேலà¯",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "ஈராகà¯à®•à®¿ தினாரà¯",
+ "symbol": "IQD"
+ },
+ "UAH": {
+ "name": "உகà¯à®°à¯ˆà®©à®¿à®¯à®©à¯ ஹிரைவà¯à®©à®¿à®¯à®¾",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "உகாணà¯à®Ÿà®©à¯ ஷிலà¯à®²à®¿à®™à¯",
+ "symbol": "UGX"
+ },
+ "UYU": {
+ "name": "உரà¯à®•à¯à®µà¯‡à®¯à®©à¯ பேசோ",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "உஸà¯à®ªà¯†à®•à¯à®•à®¿à®¸à¯à®¤à®¾à®©à¯ சோமà¯",
+ "symbol": "UZS"
+ },
+ "EGP": {
+ "name": "எகிபà¯à®¤à®¿à®¯ பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "EGP"
+ },
+ "ETB": {
+ "name": "எதà¯à®¤à®¿à®¯à¯‹à®ªà¯à®ªà®¿à®¯à®©à¯ பிரà¯",
+ "symbol": "ETB"
+ },
+ "YER": {
+ "name": "à®à®®à®©à®¿ ரியாலà¯",
+ "symbol": "YER"
+ },
+ "AED": {
+ "name": "à®à®•à¯à®•à®¿à®¯ அரப௠எமிரேடà¯à®¸à¯ திரà¯à®¹à®®à¯",
+ "symbol": "AED"
+ },
+ "ISK": {
+ "name": "à®à®¸à¯à®²à®¾à®£à¯à®Ÿà®¿à®•à¯ கà¯à®°à¯‹à®©à®¾",
+ "symbol": "ISK"
+ },
+ "OMR": {
+ "name": "ஓமானி ரியாலà¯",
+ "symbol": "OMR"
+ },
+ "XAF": {
+ "name": "ஃபà¯à®°à®¾à®™à¯à®•à¯ (CFA BEAC)",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "ஃபà¯à®°à®¾à®™à¯à®•à¯ (CFP)",
+ "symbol": "CFPF"
+ },
+ "FKP": {
+ "name": "ஃபாகà¯à®²à®¾à®¨à¯à®¤à¯ தீவà¯à®•à®³à¯ பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "ஃபிஜியன௠டாலரà¯",
+ "symbol": "FJD"
+ },
+ "QAR": {
+ "name": "கதà¯à®¤à®¾à®°à®¿ ரியாலà¯",
+ "symbol": "QAR"
+ },
+ "KHR": {
+ "name": "கமà¯à®ªà¯‹à®Ÿà®¿à®¯à®©à¯ ரியெலà¯",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "கமோரியன௠ஃபà¯à®°à®¾à®™à¯à®•à¯",
+ "symbol": "KMF"
+ },
+ "GYD": {
+ "name": "கயானீஸ௠டாலரà¯",
+ "symbol": "GYD"
+ },
+ "CAD": {
+ "name": "கனடியன௠டாலரà¯",
+ "symbol": "CA$"
+ },
+ "KZT": {
+ "name": "கஸகஸà¯à®¤à®¾à®©à®¿ டெனà¯à®•à¯‡",
+ "symbol": "KZT"
+ },
+ "CDF": {
+ "name": "காஙà¯à®•à¯‹à®²à¯€à®¸à¯ ஃபà¯à®°à®¾à®™à¯à®•à¯",
+ "symbol": "CDF"
+ },
+ "GHS": {
+ "name": "கானயன௠சேடி",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "கிபà¯à®°à®¾à®²à¯à®Ÿà®°à¯ பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "GIP"
+ },
+ "CUC": {
+ "name": "கியூபன௠கனà¯à®µà¯†à®°à¯à®Ÿà®¿à®ªà®¿à®²à¯ பேசோ",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "கியூபன௠பெசோ",
+ "symbol": "CUP"
+ },
+ "KGS": {
+ "name": "கிரà¯à®•à®¿à®¸à¯à®¤à®¾à®©à®¿ சோமà¯",
+ "symbol": "KGS"
+ },
+ "XCD": {
+ "name": "கிழகà¯à®•à¯ கரீபியன௠டாலரà¯",
+ "symbol": "EC$"
+ },
+ "GNF": {
+ "name": "கினியன௠ஃபà¯à®°à®¾à®™à¯à®•à¯",
+ "symbol": "GNF"
+ },
+ "HRK": {
+ "name": "கà¯à®°à¯‹à®·à®¿à®¯à®©à¯ கà¯à®©à®¾",
+ "symbol": "HRK"
+ },
+ "GTQ": {
+ "name": "கà¯à®µà®¾à®Ÿà¯†à®®à¯†à®²à®©à¯ கà¯à®¯à¯‚டà¯à®¸à®²à¯",
+ "symbol": "GTQ"
+ },
+ "KWD": {
+ "name": "கà¯à®µà¯ˆà®¤à¯à®¤à®¿ தினாரà¯",
+ "symbol": "KWD"
+ },
+ "KES": {
+ "name": "கெனà¯à®¯à®©à¯ ஷிலà¯à®²à®¿à®™à¯",
+ "symbol": "KES"
+ },
+ "CVE": {
+ "name": "கேப௠வெரà¯à®Ÿà®¿à®¯à®©à¯ எஸà¯à®•à¯à®Ÿà¯‹",
+ "symbol": "CVE"
+ },
+ "GMD": {
+ "name": "கேமà¯à®ªà®¿à®¯à®©à¯ தலாசி",
+ "symbol": "GMD"
+ },
+ "KYD": {
+ "name": "கேமன௠தீவà¯à®•à®³à¯ டாலரà¯",
+ "symbol": "KYD"
+ },
+ "COP": {
+ "name": "கொலமà¯à®ªà®¿à®¯à®©à¯ பெசோ",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "கோஸà¯à®Ÿà®¾ ரிகன௠கொலோனà¯",
+ "symbol": "CRC"
+ },
+ "WST": {
+ "name": "சமோவான௠தாலா",
+ "symbol": "WST"
+ },
+ "SAR": {
+ "name": "சவà¯à®¤à®¿ ரியாலà¯",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "சாலமன௠தீவà¯à®•à®³à¯ டாலரà¯",
+ "symbol": "SBD"
+ },
+ "STD": {
+ "name": "சாவ௠டோமி மறà¯à®±à¯à®®à¯ பிரினà¯à®¸à¯à®ªà®¿ டோபà¯à®°à®¾",
+ "symbol": "STD"
+ },
+ "SGD": {
+ "name": "சிஙà¯à®•à®ªà¯à®ªà¯‚ர௠டாலரà¯",
+ "symbol": "S$"
+ },
+ "SCR": {
+ "name": "சிசீலோயிஸ௠ரà¯à®ªà¯€",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "சியாரா லியோனியன௠லியோனà¯",
+ "symbol": "SLL"
+ },
+ "SYP": {
+ "name": "சிரியன௠பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "SYP"
+ },
+ "CLP": {
+ "name": "சிலியன௠பெசோ",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "சீன யà¯à®µà®¾à®©à¯",
+ "symbol": "CNÂ¥"
+ },
+ "SRD": {
+ "name": "சà¯à®°à®¿à®©à®¾à®®à¯€à®¸à¯ டாலரà¯",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "சà¯à®µà®¾à®¸à®¿ லிலாஙà¯à®•à®©à®¿",
+ "symbol": "SZL"
+ },
+ "CHF": {
+ "name": "சà¯à®µà®¿à®¸à¯ ஃபà¯à®°à®¾à®™à¯à®•à¯",
+ "symbol": "CHF"
+ },
+ "SDG": {
+ "name": "சூடானீஸ௠பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "SDG"
+ },
+ "CZK": {
+ "name": "செக௠கà¯à®Ÿà®¿à®¯à®°à®šà¯ கொரà¯à®©à®¾",
+ "symbol": "CZK"
+ },
+ "SHP": {
+ "name": "செயினà¯à®Ÿà¯ ஹெலேனா பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "SHP"
+ },
+ "RSD": {
+ "name": "செரà¯à®ªà®¿à®¯à®©à¯ தினாரà¯",
+ "symbol": "RSD"
+ },
+ "SOS": {
+ "name": "சோமாலி ஷிலà¯à®²à®¿à®™à¯",
+ "symbol": "SOS"
+ },
+ "DKK": {
+ "name": "டானிஷ௠கà¯à®°à¯‹à®©à¯",
+ "symbol": "DKK"
+ },
+ "TTD": {
+ "name": "டிரினாட௠மறà¯à®±à¯à®®à¯ டோபாகோ டாலரà¯",
+ "symbol": "TTD"
+ },
+ "DOP": {
+ "name": "டொமினிகà¯à®•à®©à¯ பேசோ",
+ "symbol": "DOP"
+ },
+ "TZS": {
+ "name": "தனà¯à®¸à®¾à®©à®¿à®¯à®©à¯ ஷிலà¯à®²à®¿à®™à¯",
+ "symbol": "TZS"
+ },
+ "TJS": {
+ "name": "தஜிகிஸà¯à®¤à®¾à®©à®¿ சோமோனி",
+ "symbol": "TJS"
+ },
+ "THB": {
+ "name": "தாய௠பாடà¯",
+ "symbol": "฿"
+ },
+ "TMT": {
+ "name": "தà¯à®°à¯à®•à¯à®®à¯‡à®©à®¿à®¸à¯à®¤à®¾à®©à®¿ மனதà¯",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "தà¯à®°à¯à®•à¯à®•à®¿à®·à¯ லீரா",
+ "symbol": "TRY"
+ },
+ "TND": {
+ "name": "தà¯à®©à®¿à®·à®¿à®¯à®©à¯ தினாரà¯",
+ "symbol": "TND"
+ },
+ "SSP": {
+ "name": "தெறà¯à®•à¯ சூடானீஸ௠பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "SSP"
+ },
+ "ZAR": {
+ "name": "தென௠ஆபà¯à®°à®¿à®•à¯à®• ராணà¯à®Ÿà¯",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "தென௠கொரிய வானà¯",
+ "symbol": "â‚©"
+ },
+ "TOP": {
+ "name": "தொஙà¯à®•à®¾à®©à¯ பஙà¯à®•à®¾",
+ "symbol": "TOP"
+ },
+ "NAD": {
+ "name": "நமீபியன௠டாலரà¯",
+ "symbol": "NAD"
+ },
+ "NOK": {
+ "name": "நாரà¯à®µà¯‡à®œà®¿à®¯à®©à¯ கà¯à®°à¯‹à®©à¯",
+ "symbol": "NOK"
+ },
+ "NIO": {
+ "name": "நிகாராகà¯à®µà®¾à®©à¯ கோரà¯à®Ÿà¯‹à®ªà®¾",
+ "symbol": "NIO"
+ },
+ "NZD": {
+ "name": "நியூசிலாநà¯à®¤à¯ டாலரà¯",
+ "symbol": "NZ$"
+ },
+ "ANG": {
+ "name": "நெதரà¯à®²à¯‡à®£à¯à®Ÿà¯à®¸à¯ அனà¯à®Ÿà®¿à®²à®¿à®¯à®©à¯ கிலà¯à®Ÿà®°à¯",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "நேபாளீஸ௠ரூபாயà¯",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "நைஜீரியன௠நைரா",
+ "symbol": "NGN"
+ },
+ "BDT": {
+ "name": "பஙà¯à®•à®³à®¾à®¤à¯‡à®·à®¿ டாகா",
+ "symbol": "BDT"
+ },
+ "PGK": {
+ "name": "பபà¯à®µà®¾ நியூ கினியன௠கினா",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "பராகà¯à®µà®©à¯ கà¯à®µà®¾à®°à®¾à®©à®¿",
+ "symbol": "PYG"
+ },
+ "PAB": {
+ "name": "பனாமானியன௠பாலà¯à®ªà¯‹à®ªà®¾",
+ "symbol": "PAB"
+ },
+ "BHD": {
+ "name": "பஹà¯à®°à¯ˆà®©à®¿ தினாரà¯",
+ "symbol": "BHD"
+ },
+ "BSD": {
+ "name": "பஹாமியன௠டாலரà¯",
+ "symbol": "BSD"
+ },
+ "PKR": {
+ "name": "பாகிஸà¯à®¤à®¾à®©à®¿ ரூபாயà¯",
+ "symbol": "PKR"
+ },
+ "BBD": {
+ "name": "பாரà¯à®ªà¯‡à®Ÿà®¿à®¯à®©à¯ டாலரà¯",
+ "symbol": "BBD"
+ },
+ "GBP": {
+ "name": "பிரிடà¯à®Ÿà®¿à®·à¯ பவà¯à®£à¯à®Ÿà¯ ஸà¯à®Ÿà¯†à®°à¯à®²à®¿à®™à¯",
+ "symbol": "£"
+ },
+ "BRL": {
+ "name": "பிரேசிலியன௠ரியாலà¯",
+ "symbol": "R$"
+ },
+ "PHP": {
+ "name": "பிலிபà¯à®ªà¯ˆà®©à¯ பெசோ",
+ "symbol": "PHP"
+ },
+ "TWD": {
+ "name": "பà¯à®¤à®¿à®¯ தைவான௠டாலரà¯",
+ "symbol": "NT$"
+ },
+ "BIF": {
+ "name": "பà¯à®°à¯à®£à¯à®Ÿà®¿à®¯à®©à¯ ஃபà¯à®°à®¾à®™à¯à®•à¯",
+ "symbol": "BIF"
+ },
+ "BND": {
+ "name": "பà¯à®°à¯‚னே டாலரà¯",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "பà¯à®²à¯à®•à¯‡à®°à®¿à®¯à®©à¯ லெவà¯",
+ "symbol": "BGN"
+ },
+ "BTN": {
+ "name": "பூடà¯à®Ÿà®¾à®©à®¿à®·à¯ நிகà¯à®²à¯à®Ÿà¯à®°à®®à¯",
+ "symbol": "BTN"
+ },
+ "BMD": {
+ "name": "பெரà¯à®®à¯à®Ÿà®©à¯ டாலரà¯",
+ "symbol": "BMD"
+ },
+ "PEN": {
+ "name": "பெரà¯à®µà®¿à®¯à®©à¯ நியூவோ சோலà¯",
+ "symbol": "PEN"
+ },
+ "BYR": {
+ "name": "பெலரà¯à®šà®¿à®¯à®©à¯ ரூபிலà¯",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "பெலீஷ௠டாலரà¯",
+ "symbol": "BZD"
+ },
+ "BOB": {
+ "name": "பொலிவியன௠பொலிவியானோ",
+ "symbol": "BOB"
+ },
+ "BWP": {
+ "name": "போடà¯à®¸à¯à®µà®¾à®©à®¾ பà¯à®²à®¾",
+ "symbol": "BWP"
+ },
+ "PLN": {
+ "name": "போலிஷ௠ஸà¯à®²à®¾à®Ÿà¯à®Ÿà®¿",
+ "symbol": "PLN"
+ },
+ "BAM": {
+ "name": "போஸà¯à®©à®¿à®¯à®¾-ஹெரà¯à®¸à¯‡à®•à¯‹à®µà®¿à®©à®¾ கனà¯à®µà¯†à®°à¯à®Ÿà®¿à®ªà®¿à®²à¯ மாரà¯à®•à¯",
+ "symbol": "BAM"
+ },
+ "MNT": {
+ "name": "மஙà¯à®•à¯‹à®²à®¿à®¯à®©à¯ டà¯à®•à¯à®°à®¿à®•à¯",
+ "symbol": "MNT"
+ },
+ "MGA": {
+ "name": "மலகாசி à®à®°à®¿à®¯à®°à®¿",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "மலாவியன௠கà¯à®µà®¾à®šà¯à®šà®¾",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "மலேசிய ரிஙà¯à®•à®¿à®Ÿà¯",
+ "symbol": "RM"
+ },
+ "MDL": {
+ "name": "மாலà¯à®Ÿà¯‹à®µà®©à¯ லியூ",
+ "symbol": "MDL"
+ },
+ "MVR": {
+ "name": "மாலதà¯à®¤à¯€à®µà¯ à®°à¯à®ƒà®ªà®¿à®¯à®¾",
+ "symbol": "MVR"
+ },
+ "MMK": {
+ "name": "மியானà¯à®®à®°à¯ கியாதà¯",
+ "symbol": "MMK"
+ },
+ "MXN": {
+ "name": "மெகà¯à®¸à®¿à®•à®©à¯ பெசோ",
+ "symbol": "MX$"
+ },
+ "MOP": {
+ "name": "மெகனீஸ௠படாகா",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "மெசிடோனியன௠தினாரà¯",
+ "symbol": "MKD"
+ },
+ "MZN": {
+ "name": "மொசாமà¯à®ªà®¿à®•à¯‡à®©à¯ மெடிகலà¯",
+ "symbol": "MZN"
+ },
+ "MAD": {
+ "name": "மொராகà¯à®•à¯‹ திரà¯à®¹à®¾à®®à¯",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "மொரிஷியனியன௠ஒகà¯à®¯à¯à®¯à®¾",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "மொரீஷியன௠ரà¯à®ªà¯€",
+ "symbol": "MUR"
+ },
+ "EUR": {
+ "name": "யூரோ",
+ "symbol": "€"
+ },
+ "RUB": {
+ "name": "ரஷியன௠ரூபிளà¯",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "à®°à¯à®µà®¾à®£à¯à®Ÿà®¾ ஃபà¯à®°à®¾à®™à¯à®•à¯",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "ரோமானியன௠லியூ",
+ "symbol": "RON"
+ },
+ "LAK": {
+ "name": "லவà¯à®Ÿà¯à®Ÿà®¿à®¯à®©à¯ கிபà¯",
+ "symbol": "LAK"
+ },
+ "LTL": {
+ "name": "லிதà¯à®µà¯‡à®©à®¿à®¯à®©à¯ லிடஸà¯",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "லிபியன௠தினாரà¯",
+ "symbol": "LYD"
+ },
+ "LSL": {
+ "name": "லெசோதோ லோடà¯à®Ÿà®¿",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "லெபனீஸ௠பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "லைபீரியன௠டாலரà¯",
+ "symbol": "LRD"
+ },
+ "KPW": {
+ "name": "வட கொரிய வானà¯",
+ "symbol": "KPW"
+ },
+ "VUV": {
+ "name": "வனà¯à®µà®¾à®Ÿà¯à®Ÿà¯ வாடà¯à®Ÿà¯",
+ "symbol": "VUV"
+ },
+ "VND": {
+ "name": "வியடà¯à®¨à®¾à®®à¯€à®¸à¯ டாஙà¯",
+ "symbol": "â‚«"
+ },
+ "VEF": {
+ "name": "வெனிசà¯à®²à®¿à®¯à®©à¯ போலிவரà¯",
+ "symbol": "VEF"
+ },
+ "JPY": {
+ "name": "ஜபà¯à®ªà®¾à®©à®¿à®¯ யெனà¯",
+ "symbol": "Â¥"
+ },
+ "JMD": {
+ "name": "ஜமைகà¯à®•à®¾à®©à¯ டாலரà¯",
+ "symbol": "JMD"
+ },
+ "DJF": {
+ "name": "ஜிபவà¯à®Ÿà®¿à®¯à¯†à®©à¯ ஃபà¯à®°à®¾à®™à¯à®•à¯",
+ "symbol": "DJF"
+ },
+ "GEL": {
+ "name": "ஜியாரà¯à®œà®¿à®¯à®©à¯ லாரி",
+ "symbol": "GEL"
+ },
+ "JOD": {
+ "name": "ஜோரà¯à®Ÿà®¾à®©à®¿à®¯à®©à¯ டைனரà¯",
+ "symbol": "JOD"
+ },
+ "SEK": {
+ "name": "ஸà¯à®µà¯‡à®¤à®¿à®·à¯ கà¯à®°à¯‹à®©à®¾",
+ "symbol": "SEK"
+ },
+ "ZMW": {
+ "name": "ஸாமà¯à®ªà®¿à®¯à®©à¯ கà¯à®µà®¾à®šà®¾",
+ "symbol": "ZMW"
+ },
+ "HUF": {
+ "name": "ஹஙà¯à®•à¯‡à®°à®¿à®¯à®©à¯ ஃபோரினà¯à®Ÿà¯",
+ "symbol": "HUF"
+ },
+ "HTG": {
+ "name": "ஹயேதà¯à®¤à®¿à®¯à®©à¯ கோரà¯à®Ÿà¯‡",
+ "symbol": "HTG"
+ },
+ "HKD": {
+ "name": "ஹாஙà¯à®•à®¾à®™à¯ டாலரà¯",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "ஹோனà¯à®Ÿà¯‚ரன௠லெமà¯à®ªà¯€à®°à®¾",
+ "symbol": "HNL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ta-SG.json b/library/intl/resources/currency/ta-SG.json
new file mode 100644
index 000000000..be3db0c1d
--- /dev/null
+++ b/library/intl/resources/currency/ta-SG.json
@@ -0,0 +1,634 @@
+{
+ "XOF": {
+ "name": "CFA ஃபà¯à®°à®¾à®™à¯à®•à¯ BCEAO",
+ "symbol": "CFA"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "AOA": {
+ "name": "à®…à®™à¯à®•à¯‹à®²à®©à¯ கà¯à®µà®¾à®©à¯à®¸à®¾",
+ "symbol": "AOA"
+ },
+ "AZN": {
+ "name": "அசரà¯à®ªà¯ˆà®œà®¾à®©à®¿ மனதà¯",
+ "symbol": "AZN"
+ },
+ "USD": {
+ "name": "அமெரிகà¯à®• டாலரà¯",
+ "symbol": "US$"
+ },
+ "ARS": {
+ "name": "à®…à®°à¯à®œà¯†à®©à¯à®Ÿà®¿à®©à®¾ பேசோ",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "à®…à®°à¯à®ªà®©à¯ ஃபà¯à®³à¯‹à®°à®¿à®©à¯",
+ "symbol": "AWG"
+ },
+ "ALL": {
+ "name": "அலà¯à®ªà¯‡à®©à®¿à®¯à®©à¯ லெகà¯",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "அலà¯à®œà¯€à®°à®¿à®¯à®©à¯ தினாரà¯",
+ "symbol": "DZD"
+ },
+ "AFN": {
+ "name": "ஆஃபà¯à®•à®¾à®©à¯ ஆஃபà¯à®•à®¾à®©à®¿",
+ "symbol": "AFN"
+ },
+ "AMD": {
+ "name": "ஆரà¯à®®à¯‡à®©à®¿à®¯à®©à¯ டà¯à®°à®¾à®®à¯",
+ "symbol": "AMD"
+ },
+ "AUD": {
+ "name": "ஆஸà¯à®¤à®¿à®°à¯‡à®²à®¿à®¯ டாலரà¯",
+ "symbol": "A$"
+ },
+ "INR": {
+ "name": "இநà¯à®¤à®¿à®¯ ரூபாயà¯",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "இநà¯à®¤à¯‹à®©à¯‡à®·à®¿à®¯à®©à¯ à®°à¯à®ªà®¿à®¯à®¾",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "இரானியன௠ரியாலà¯",
+ "symbol": "IRR"
+ },
+ "ERN": {
+ "name": "இரிடிரியன௠நகà¯à®ƒà®ªà®¾",
+ "symbol": "ERN"
+ },
+ "LKR": {
+ "name": "இலஙà¯à®•à¯ˆ ரூபாயà¯",
+ "symbol": "LKR"
+ },
+ "ILS": {
+ "name": "இஸà¯à®°à¯‡à®²à®¿ நியூ ஷிகேலà¯",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "ஈராகà¯à®•à®¿ தினாரà¯",
+ "symbol": "IQD"
+ },
+ "UAH": {
+ "name": "உகà¯à®°à¯ˆà®©à®¿à®¯à®©à¯ ஹிரைவà¯à®©à®¿à®¯à®¾",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "உகாணà¯à®Ÿà®©à¯ ஷிலà¯à®²à®¿à®™à¯",
+ "symbol": "UGX"
+ },
+ "UYU": {
+ "name": "உரà¯à®•à¯à®µà¯‡à®¯à®©à¯ பேசோ",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "உஸà¯à®ªà¯†à®•à¯à®•à®¿à®¸à¯à®¤à®¾à®©à¯ சோமà¯",
+ "symbol": "UZS"
+ },
+ "EGP": {
+ "name": "எகிபà¯à®¤à®¿à®¯ பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "EGP"
+ },
+ "ETB": {
+ "name": "எதà¯à®¤à®¿à®¯à¯‹à®ªà¯à®ªà®¿à®¯à®©à¯ பிரà¯",
+ "symbol": "ETB"
+ },
+ "YER": {
+ "name": "à®à®®à®©à®¿ ரியாலà¯",
+ "symbol": "YER"
+ },
+ "AED": {
+ "name": "à®à®•à¯à®•à®¿à®¯ அரப௠எமிரேடà¯à®¸à¯ திரà¯à®¹à®®à¯",
+ "symbol": "AED"
+ },
+ "ISK": {
+ "name": "à®à®¸à¯à®²à®¾à®£à¯à®Ÿà®¿à®•à¯ கà¯à®°à¯‹à®©à®¾",
+ "symbol": "ISK"
+ },
+ "OMR": {
+ "name": "ஓமானி ரியாலà¯",
+ "symbol": "OMR"
+ },
+ "XAF": {
+ "name": "ஃபà¯à®°à®¾à®™à¯à®•à¯ (CFA BEAC)",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "ஃபà¯à®°à®¾à®™à¯à®•à¯ (CFP)",
+ "symbol": "CFPF"
+ },
+ "FKP": {
+ "name": "ஃபாகà¯à®²à®¾à®¨à¯à®¤à¯ தீவà¯à®•à®³à¯ பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "ஃபிஜியன௠டாலரà¯",
+ "symbol": "FJD"
+ },
+ "QAR": {
+ "name": "கதà¯à®¤à®¾à®°à®¿ ரியாலà¯",
+ "symbol": "QAR"
+ },
+ "KHR": {
+ "name": "கமà¯à®ªà¯‹à®Ÿà®¿à®¯à®©à¯ ரியெலà¯",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "கமோரியன௠ஃபà¯à®°à®¾à®™à¯à®•à¯",
+ "symbol": "KMF"
+ },
+ "GYD": {
+ "name": "கயானீஸ௠டாலரà¯",
+ "symbol": "GYD"
+ },
+ "CAD": {
+ "name": "கனடியன௠டாலரà¯",
+ "symbol": "CA$"
+ },
+ "KZT": {
+ "name": "கஸகஸà¯à®¤à®¾à®©à®¿ டெனà¯à®•à¯‡",
+ "symbol": "KZT"
+ },
+ "CDF": {
+ "name": "காஙà¯à®•à¯‹à®²à¯€à®¸à¯ ஃபà¯à®°à®¾à®™à¯à®•à¯",
+ "symbol": "CDF"
+ },
+ "GHS": {
+ "name": "கானயன௠சேடி",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "கிபà¯à®°à®¾à®²à¯à®Ÿà®°à¯ பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "GIP"
+ },
+ "CUC": {
+ "name": "கியூபன௠கனà¯à®µà¯†à®°à¯à®Ÿà®¿à®ªà®¿à®²à¯ பேசோ",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "கியூபன௠பெசோ",
+ "symbol": "CUP"
+ },
+ "KGS": {
+ "name": "கிரà¯à®•à®¿à®¸à¯à®¤à®¾à®©à®¿ சோமà¯",
+ "symbol": "KGS"
+ },
+ "XCD": {
+ "name": "கிழகà¯à®•à¯ கரீபியன௠டாலரà¯",
+ "symbol": "EC$"
+ },
+ "GNF": {
+ "name": "கினியன௠ஃபà¯à®°à®¾à®™à¯à®•à¯",
+ "symbol": "GNF"
+ },
+ "HRK": {
+ "name": "கà¯à®°à¯‹à®·à®¿à®¯à®©à¯ கà¯à®©à®¾",
+ "symbol": "HRK"
+ },
+ "GTQ": {
+ "name": "கà¯à®µà®¾à®Ÿà¯†à®®à¯†à®²à®©à¯ கà¯à®¯à¯‚டà¯à®¸à®²à¯",
+ "symbol": "GTQ"
+ },
+ "KWD": {
+ "name": "கà¯à®µà¯ˆà®¤à¯à®¤à®¿ தினாரà¯",
+ "symbol": "KWD"
+ },
+ "KES": {
+ "name": "கெனà¯à®¯à®©à¯ ஷிலà¯à®²à®¿à®™à¯",
+ "symbol": "KES"
+ },
+ "CVE": {
+ "name": "கேப௠வெரà¯à®Ÿà®¿à®¯à®©à¯ எஸà¯à®•à¯à®Ÿà¯‹",
+ "symbol": "CVE"
+ },
+ "GMD": {
+ "name": "கேமà¯à®ªà®¿à®¯à®©à¯ தலாசி",
+ "symbol": "GMD"
+ },
+ "KYD": {
+ "name": "கேமன௠தீவà¯à®•à®³à¯ டாலரà¯",
+ "symbol": "KYD"
+ },
+ "COP": {
+ "name": "கொலமà¯à®ªà®¿à®¯à®©à¯ பெசோ",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "கோஸà¯à®Ÿà®¾ ரிகன௠கொலோனà¯",
+ "symbol": "CRC"
+ },
+ "WST": {
+ "name": "சமோவான௠தாலா",
+ "symbol": "WST"
+ },
+ "SAR": {
+ "name": "சவà¯à®¤à®¿ ரியாலà¯",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "சாலமன௠தீவà¯à®•à®³à¯ டாலரà¯",
+ "symbol": "SBD"
+ },
+ "STD": {
+ "name": "சாவ௠டோமி மறà¯à®±à¯à®®à¯ பிரினà¯à®¸à¯à®ªà®¿ டோபà¯à®°à®¾",
+ "symbol": "STD"
+ },
+ "SGD": {
+ "name": "சிஙà¯à®•à®ªà¯à®ªà¯‚ர௠டாலரà¯",
+ "symbol": "$"
+ },
+ "SCR": {
+ "name": "சிசீலோயிஸ௠ரà¯à®ªà¯€",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "சியாரா லியோனியன௠லியோனà¯",
+ "symbol": "SLL"
+ },
+ "SYP": {
+ "name": "சிரியன௠பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "SYP"
+ },
+ "CLP": {
+ "name": "சிலியன௠பெசோ",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "சீன யà¯à®µà®¾à®©à¯",
+ "symbol": "CNÂ¥"
+ },
+ "SRD": {
+ "name": "சà¯à®°à®¿à®©à®¾à®®à¯€à®¸à¯ டாலரà¯",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "சà¯à®µà®¾à®¸à®¿ லிலாஙà¯à®•à®©à®¿",
+ "symbol": "SZL"
+ },
+ "CHF": {
+ "name": "சà¯à®µà®¿à®¸à¯ ஃபà¯à®°à®¾à®™à¯à®•à¯",
+ "symbol": "CHF"
+ },
+ "SDG": {
+ "name": "சூடானீஸ௠பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "SDG"
+ },
+ "CZK": {
+ "name": "செக௠கà¯à®Ÿà®¿à®¯à®°à®šà¯ கொரà¯à®©à®¾",
+ "symbol": "CZK"
+ },
+ "SHP": {
+ "name": "செயினà¯à®Ÿà¯ ஹெலேனா பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "SHP"
+ },
+ "RSD": {
+ "name": "செரà¯à®ªà®¿à®¯à®©à¯ தினாரà¯",
+ "symbol": "RSD"
+ },
+ "SOS": {
+ "name": "சோமாலி ஷிலà¯à®²à®¿à®™à¯",
+ "symbol": "SOS"
+ },
+ "DKK": {
+ "name": "டானிஷ௠கà¯à®°à¯‹à®©à¯",
+ "symbol": "DKK"
+ },
+ "TTD": {
+ "name": "டிரினாட௠மறà¯à®±à¯à®®à¯ டோபாகோ டாலரà¯",
+ "symbol": "TTD"
+ },
+ "DOP": {
+ "name": "டொமினிகà¯à®•à®©à¯ பேசோ",
+ "symbol": "DOP"
+ },
+ "TZS": {
+ "name": "தனà¯à®¸à®¾à®©à®¿à®¯à®©à¯ ஷிலà¯à®²à®¿à®™à¯",
+ "symbol": "TZS"
+ },
+ "TJS": {
+ "name": "தஜிகிஸà¯à®¤à®¾à®©à®¿ சோமோனி",
+ "symbol": "TJS"
+ },
+ "THB": {
+ "name": "தாய௠பாடà¯",
+ "symbol": "฿"
+ },
+ "TMT": {
+ "name": "தà¯à®°à¯à®•à¯à®®à¯‡à®©à®¿à®¸à¯à®¤à®¾à®©à®¿ மனதà¯",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "தà¯à®°à¯à®•à¯à®•à®¿à®·à¯ லீரா",
+ "symbol": "TRY"
+ },
+ "TND": {
+ "name": "தà¯à®©à®¿à®·à®¿à®¯à®©à¯ தினாரà¯",
+ "symbol": "TND"
+ },
+ "SSP": {
+ "name": "தெறà¯à®•à¯ சூடானீஸ௠பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "SSP"
+ },
+ "ZAR": {
+ "name": "தென௠ஆபà¯à®°à®¿à®•à¯à®• ராணà¯à®Ÿà¯",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "தென௠கொரிய வானà¯",
+ "symbol": "â‚©"
+ },
+ "TOP": {
+ "name": "தொஙà¯à®•à®¾à®©à¯ பஙà¯à®•à®¾",
+ "symbol": "TOP"
+ },
+ "NAD": {
+ "name": "நமீபியன௠டாலரà¯",
+ "symbol": "NAD"
+ },
+ "NOK": {
+ "name": "நாரà¯à®µà¯‡à®œà®¿à®¯à®©à¯ கà¯à®°à¯‹à®©à¯",
+ "symbol": "NOK"
+ },
+ "NIO": {
+ "name": "நிகாராகà¯à®µà®¾à®©à¯ கோரà¯à®Ÿà¯‹à®ªà®¾",
+ "symbol": "NIO"
+ },
+ "NZD": {
+ "name": "நியூசிலாநà¯à®¤à¯ டாலரà¯",
+ "symbol": "NZ$"
+ },
+ "ANG": {
+ "name": "நெதரà¯à®²à¯‡à®£à¯à®Ÿà¯à®¸à¯ அனà¯à®Ÿà®¿à®²à®¿à®¯à®©à¯ கிலà¯à®Ÿà®°à¯",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "நேபாளீஸ௠ரூபாயà¯",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "நைஜீரியன௠நைரா",
+ "symbol": "NGN"
+ },
+ "BDT": {
+ "name": "பஙà¯à®•à®³à®¾à®¤à¯‡à®·à®¿ டாகா",
+ "symbol": "BDT"
+ },
+ "PGK": {
+ "name": "பபà¯à®µà®¾ நியூ கினியன௠கினா",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "பராகà¯à®µà®©à¯ கà¯à®µà®¾à®°à®¾à®©à®¿",
+ "symbol": "PYG"
+ },
+ "PAB": {
+ "name": "பனாமானியன௠பாலà¯à®ªà¯‹à®ªà®¾",
+ "symbol": "PAB"
+ },
+ "BHD": {
+ "name": "பஹà¯à®°à¯ˆà®©à®¿ தினாரà¯",
+ "symbol": "BHD"
+ },
+ "BSD": {
+ "name": "பஹாமியன௠டாலரà¯",
+ "symbol": "BSD"
+ },
+ "PKR": {
+ "name": "பாகிஸà¯à®¤à®¾à®©à®¿ ரூபாயà¯",
+ "symbol": "PKR"
+ },
+ "BBD": {
+ "name": "பாரà¯à®ªà¯‡à®Ÿà®¿à®¯à®©à¯ டாலரà¯",
+ "symbol": "BBD"
+ },
+ "GBP": {
+ "name": "பிரிடà¯à®Ÿà®¿à®·à¯ பவà¯à®£à¯à®Ÿà¯ ஸà¯à®Ÿà¯†à®°à¯à®²à®¿à®™à¯",
+ "symbol": "£"
+ },
+ "BRL": {
+ "name": "பிரேசிலியன௠ரியாலà¯",
+ "symbol": "R$"
+ },
+ "PHP": {
+ "name": "பிலிபà¯à®ªà¯ˆà®©à¯ பெசோ",
+ "symbol": "PHP"
+ },
+ "TWD": {
+ "name": "பà¯à®¤à®¿à®¯ தைவான௠டாலரà¯",
+ "symbol": "NT$"
+ },
+ "BIF": {
+ "name": "பà¯à®°à¯à®£à¯à®Ÿà®¿à®¯à®©à¯ ஃபà¯à®°à®¾à®™à¯à®•à¯",
+ "symbol": "BIF"
+ },
+ "BND": {
+ "name": "பà¯à®°à¯‚னே டாலரà¯",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "பà¯à®²à¯à®•à¯‡à®°à®¿à®¯à®©à¯ லெவà¯",
+ "symbol": "BGN"
+ },
+ "BTN": {
+ "name": "பூடà¯à®Ÿà®¾à®©à®¿à®·à¯ நிகà¯à®²à¯à®Ÿà¯à®°à®®à¯",
+ "symbol": "BTN"
+ },
+ "BMD": {
+ "name": "பெரà¯à®®à¯à®Ÿà®©à¯ டாலரà¯",
+ "symbol": "BMD"
+ },
+ "PEN": {
+ "name": "பெரà¯à®µà®¿à®¯à®©à¯ நியூவோ சோலà¯",
+ "symbol": "PEN"
+ },
+ "BYR": {
+ "name": "பெலரà¯à®šà®¿à®¯à®©à¯ ரூபிலà¯",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "பெலீஷ௠டாலரà¯",
+ "symbol": "BZD"
+ },
+ "BOB": {
+ "name": "பொலிவியன௠பொலிவியானோ",
+ "symbol": "BOB"
+ },
+ "BWP": {
+ "name": "போடà¯à®¸à¯à®µà®¾à®©à®¾ பà¯à®²à®¾",
+ "symbol": "BWP"
+ },
+ "PLN": {
+ "name": "போலிஷ௠ஸà¯à®²à®¾à®Ÿà¯à®Ÿà®¿",
+ "symbol": "PLN"
+ },
+ "BAM": {
+ "name": "போஸà¯à®©à®¿à®¯à®¾-ஹெரà¯à®¸à¯‡à®•à¯‹à®µà®¿à®©à®¾ கனà¯à®µà¯†à®°à¯à®Ÿà®¿à®ªà®¿à®²à¯ மாரà¯à®•à¯",
+ "symbol": "BAM"
+ },
+ "MNT": {
+ "name": "மஙà¯à®•à¯‹à®²à®¿à®¯à®©à¯ டà¯à®•à¯à®°à®¿à®•à¯",
+ "symbol": "MNT"
+ },
+ "MGA": {
+ "name": "மலகாசி à®à®°à®¿à®¯à®°à®¿",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "மலாவியன௠கà¯à®µà®¾à®šà¯à®šà®¾",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "மலேசிய ரிஙà¯à®•à®¿à®Ÿà¯",
+ "symbol": "RM"
+ },
+ "MDL": {
+ "name": "மாலà¯à®Ÿà¯‹à®µà®©à¯ லியூ",
+ "symbol": "MDL"
+ },
+ "MVR": {
+ "name": "மாலதà¯à®¤à¯€à®µà¯ à®°à¯à®ƒà®ªà®¿à®¯à®¾",
+ "symbol": "MVR"
+ },
+ "MMK": {
+ "name": "மியானà¯à®®à®°à¯ கியாதà¯",
+ "symbol": "MMK"
+ },
+ "MXN": {
+ "name": "மெகà¯à®¸à®¿à®•à®©à¯ பெசோ",
+ "symbol": "MX$"
+ },
+ "MOP": {
+ "name": "மெகனீஸ௠படாகா",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "மெசிடோனியன௠தினாரà¯",
+ "symbol": "MKD"
+ },
+ "MZN": {
+ "name": "மொசாமà¯à®ªà®¿à®•à¯‡à®©à¯ மெடிகலà¯",
+ "symbol": "MZN"
+ },
+ "MAD": {
+ "name": "மொராகà¯à®•à¯‹ திரà¯à®¹à®¾à®®à¯",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "மொரிஷியனியன௠ஒகà¯à®¯à¯à®¯à®¾",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "மொரீஷியன௠ரà¯à®ªà¯€",
+ "symbol": "MUR"
+ },
+ "EUR": {
+ "name": "யூரோ",
+ "symbol": "€"
+ },
+ "RUB": {
+ "name": "ரஷியன௠ரூபிளà¯",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "à®°à¯à®µà®¾à®£à¯à®Ÿà®¾ ஃபà¯à®°à®¾à®™à¯à®•à¯",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "ரோமானியன௠லியூ",
+ "symbol": "RON"
+ },
+ "LAK": {
+ "name": "லவà¯à®Ÿà¯à®Ÿà®¿à®¯à®©à¯ கிபà¯",
+ "symbol": "LAK"
+ },
+ "LTL": {
+ "name": "லிதà¯à®µà¯‡à®©à®¿à®¯à®©à¯ லிடஸà¯",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "லிபியன௠தினாரà¯",
+ "symbol": "LYD"
+ },
+ "LSL": {
+ "name": "லெசோதோ லோடà¯à®Ÿà®¿",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "லெபனீஸ௠பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "லைபீரியன௠டாலரà¯",
+ "symbol": "LRD"
+ },
+ "KPW": {
+ "name": "வட கொரிய வானà¯",
+ "symbol": "KPW"
+ },
+ "VUV": {
+ "name": "வனà¯à®µà®¾à®Ÿà¯à®Ÿà¯ வாடà¯à®Ÿà¯",
+ "symbol": "VUV"
+ },
+ "VND": {
+ "name": "வியடà¯à®¨à®¾à®®à¯€à®¸à¯ டாஙà¯",
+ "symbol": "â‚«"
+ },
+ "VEF": {
+ "name": "வெனிசà¯à®²à®¿à®¯à®©à¯ போலிவரà¯",
+ "symbol": "VEF"
+ },
+ "JPY": {
+ "name": "ஜபà¯à®ªà®¾à®©à®¿à®¯ யெனà¯",
+ "symbol": "Â¥"
+ },
+ "JMD": {
+ "name": "ஜமைகà¯à®•à®¾à®©à¯ டாலரà¯",
+ "symbol": "JMD"
+ },
+ "DJF": {
+ "name": "ஜிபவà¯à®Ÿà®¿à®¯à¯†à®©à¯ ஃபà¯à®°à®¾à®™à¯à®•à¯",
+ "symbol": "DJF"
+ },
+ "GEL": {
+ "name": "ஜியாரà¯à®œà®¿à®¯à®©à¯ லாரி",
+ "symbol": "GEL"
+ },
+ "JOD": {
+ "name": "ஜோரà¯à®Ÿà®¾à®©à®¿à®¯à®©à¯ டைனரà¯",
+ "symbol": "JOD"
+ },
+ "SEK": {
+ "name": "ஸà¯à®µà¯‡à®¤à®¿à®·à¯ கà¯à®°à¯‹à®©à®¾",
+ "symbol": "SEK"
+ },
+ "ZMW": {
+ "name": "ஸாமà¯à®ªà®¿à®¯à®©à¯ கà¯à®µà®¾à®šà®¾",
+ "symbol": "ZMW"
+ },
+ "HUF": {
+ "name": "ஹஙà¯à®•à¯‡à®°à®¿à®¯à®©à¯ ஃபோரினà¯à®Ÿà¯",
+ "symbol": "HUF"
+ },
+ "HTG": {
+ "name": "ஹயேதà¯à®¤à®¿à®¯à®©à¯ கோரà¯à®Ÿà¯‡",
+ "symbol": "HTG"
+ },
+ "HKD": {
+ "name": "ஹாஙà¯à®•à®¾à®™à¯ டாலரà¯",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "ஹோனà¯à®Ÿà¯‚ரன௠லெமà¯à®ªà¯€à®°à®¾",
+ "symbol": "HNL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ta.json b/library/intl/resources/currency/ta.json
new file mode 100644
index 000000000..5af042dda
--- /dev/null
+++ b/library/intl/resources/currency/ta.json
@@ -0,0 +1,634 @@
+{
+ "XOF": {
+ "name": "CFA ஃபà¯à®°à®¾à®™à¯à®•à¯ BCEAO",
+ "symbol": "CFA"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "AOA": {
+ "name": "à®…à®™à¯à®•à¯‹à®²à®©à¯ கà¯à®µà®¾à®©à¯à®¸à®¾",
+ "symbol": "AOA"
+ },
+ "AZN": {
+ "name": "அசரà¯à®ªà¯ˆà®œà®¾à®©à®¿ மனதà¯",
+ "symbol": "AZN"
+ },
+ "USD": {
+ "name": "அமெரிகà¯à®• டாலரà¯",
+ "symbol": "$"
+ },
+ "ARS": {
+ "name": "à®…à®°à¯à®œà¯†à®©à¯à®Ÿà®¿à®©à®¾ பேசோ",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "à®…à®°à¯à®ªà®©à¯ ஃபà¯à®³à¯‹à®°à®¿à®©à¯",
+ "symbol": "AWG"
+ },
+ "ALL": {
+ "name": "அலà¯à®ªà¯‡à®©à®¿à®¯à®©à¯ லெகà¯",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "அலà¯à®œà¯€à®°à®¿à®¯à®©à¯ தினாரà¯",
+ "symbol": "DZD"
+ },
+ "AFN": {
+ "name": "ஆஃபà¯à®•à®¾à®©à¯ ஆஃபà¯à®•à®¾à®©à®¿",
+ "symbol": "AFN"
+ },
+ "AMD": {
+ "name": "ஆரà¯à®®à¯‡à®©à®¿à®¯à®©à¯ டà¯à®°à®¾à®®à¯",
+ "symbol": "AMD"
+ },
+ "AUD": {
+ "name": "ஆஸà¯à®¤à®¿à®°à¯‡à®²à®¿à®¯ டாலரà¯",
+ "symbol": "A$"
+ },
+ "INR": {
+ "name": "இநà¯à®¤à®¿à®¯ ரூபாயà¯",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "இநà¯à®¤à¯‹à®©à¯‡à®·à®¿à®¯à®©à¯ à®°à¯à®ªà®¿à®¯à®¾",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "இரானியன௠ரியாலà¯",
+ "symbol": "IRR"
+ },
+ "ERN": {
+ "name": "இரிடிரியன௠நகà¯à®ƒà®ªà®¾",
+ "symbol": "ERN"
+ },
+ "LKR": {
+ "name": "இலஙà¯à®•à¯ˆ ரூபாயà¯",
+ "symbol": "LKR"
+ },
+ "ILS": {
+ "name": "இஸà¯à®°à¯‡à®²à®¿ நியூ ஷிகேலà¯",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "ஈராகà¯à®•à®¿ தினாரà¯",
+ "symbol": "IQD"
+ },
+ "UAH": {
+ "name": "உகà¯à®°à¯ˆà®©à®¿à®¯à®©à¯ ஹிரைவà¯à®©à®¿à®¯à®¾",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "உகாணà¯à®Ÿà®©à¯ ஷிலà¯à®²à®¿à®™à¯",
+ "symbol": "UGX"
+ },
+ "UYU": {
+ "name": "உரà¯à®•à¯à®µà¯‡à®¯à®©à¯ பேசோ",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "உஸà¯à®ªà¯†à®•à¯à®•à®¿à®¸à¯à®¤à®¾à®©à¯ சோமà¯",
+ "symbol": "UZS"
+ },
+ "EGP": {
+ "name": "எகிபà¯à®¤à®¿à®¯ பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "EGP"
+ },
+ "ETB": {
+ "name": "எதà¯à®¤à®¿à®¯à¯‹à®ªà¯à®ªà®¿à®¯à®©à¯ பிரà¯",
+ "symbol": "ETB"
+ },
+ "YER": {
+ "name": "à®à®®à®©à®¿ ரியாலà¯",
+ "symbol": "YER"
+ },
+ "AED": {
+ "name": "à®à®•à¯à®•à®¿à®¯ அரப௠எமிரேடà¯à®¸à¯ திரà¯à®¹à®®à¯",
+ "symbol": "AED"
+ },
+ "ISK": {
+ "name": "à®à®¸à¯à®²à®¾à®£à¯à®Ÿà®¿à®•à¯ கà¯à®°à¯‹à®©à®¾",
+ "symbol": "ISK"
+ },
+ "OMR": {
+ "name": "ஓமானி ரியாலà¯",
+ "symbol": "OMR"
+ },
+ "XAF": {
+ "name": "ஃபà¯à®°à®¾à®™à¯à®•à¯ (CFA BEAC)",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "ஃபà¯à®°à®¾à®™à¯à®•à¯ (CFP)",
+ "symbol": "CFPF"
+ },
+ "FKP": {
+ "name": "ஃபாகà¯à®²à®¾à®¨à¯à®¤à¯ தீவà¯à®•à®³à¯ பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "ஃபிஜியன௠டாலரà¯",
+ "symbol": "FJD"
+ },
+ "QAR": {
+ "name": "கதà¯à®¤à®¾à®°à®¿ ரியாலà¯",
+ "symbol": "QAR"
+ },
+ "KHR": {
+ "name": "கமà¯à®ªà¯‹à®Ÿà®¿à®¯à®©à¯ ரியெலà¯",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "கமோரியன௠ஃபà¯à®°à®¾à®™à¯à®•à¯",
+ "symbol": "KMF"
+ },
+ "GYD": {
+ "name": "கயானீஸ௠டாலரà¯",
+ "symbol": "GYD"
+ },
+ "CAD": {
+ "name": "கனடியன௠டாலரà¯",
+ "symbol": "CA$"
+ },
+ "KZT": {
+ "name": "கஸகஸà¯à®¤à®¾à®©à®¿ டெனà¯à®•à¯‡",
+ "symbol": "KZT"
+ },
+ "CDF": {
+ "name": "காஙà¯à®•à¯‹à®²à¯€à®¸à¯ ஃபà¯à®°à®¾à®™à¯à®•à¯",
+ "symbol": "CDF"
+ },
+ "GHS": {
+ "name": "கானயன௠சேடி",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "கிபà¯à®°à®¾à®²à¯à®Ÿà®°à¯ பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "GIP"
+ },
+ "CUC": {
+ "name": "கியூபன௠கனà¯à®µà¯†à®°à¯à®Ÿà®¿à®ªà®¿à®²à¯ பேசோ",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "கியூபன௠பெசோ",
+ "symbol": "CUP"
+ },
+ "KGS": {
+ "name": "கிரà¯à®•à®¿à®¸à¯à®¤à®¾à®©à®¿ சோமà¯",
+ "symbol": "KGS"
+ },
+ "XCD": {
+ "name": "கிழகà¯à®•à¯ கரீபியன௠டாலரà¯",
+ "symbol": "EC$"
+ },
+ "GNF": {
+ "name": "கினியன௠ஃபà¯à®°à®¾à®™à¯à®•à¯",
+ "symbol": "GNF"
+ },
+ "HRK": {
+ "name": "கà¯à®°à¯‹à®·à®¿à®¯à®©à¯ கà¯à®©à®¾",
+ "symbol": "HRK"
+ },
+ "GTQ": {
+ "name": "கà¯à®µà®¾à®Ÿà¯†à®®à¯†à®²à®©à¯ கà¯à®¯à¯‚டà¯à®¸à®²à¯",
+ "symbol": "GTQ"
+ },
+ "KWD": {
+ "name": "கà¯à®µà¯ˆà®¤à¯à®¤à®¿ தினாரà¯",
+ "symbol": "KWD"
+ },
+ "KES": {
+ "name": "கெனà¯à®¯à®©à¯ ஷிலà¯à®²à®¿à®™à¯",
+ "symbol": "KES"
+ },
+ "CVE": {
+ "name": "கேப௠வெரà¯à®Ÿà®¿à®¯à®©à¯ எஸà¯à®•à¯à®Ÿà¯‹",
+ "symbol": "CVE"
+ },
+ "GMD": {
+ "name": "கேமà¯à®ªà®¿à®¯à®©à¯ தலாசி",
+ "symbol": "GMD"
+ },
+ "KYD": {
+ "name": "கேமன௠தீவà¯à®•à®³à¯ டாலரà¯",
+ "symbol": "KYD"
+ },
+ "COP": {
+ "name": "கொலமà¯à®ªà®¿à®¯à®©à¯ பெசோ",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "கோஸà¯à®Ÿà®¾ ரிகன௠கொலோனà¯",
+ "symbol": "CRC"
+ },
+ "WST": {
+ "name": "சமோவான௠தாலா",
+ "symbol": "WST"
+ },
+ "SAR": {
+ "name": "சவà¯à®¤à®¿ ரியாலà¯",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "சாலமன௠தீவà¯à®•à®³à¯ டாலரà¯",
+ "symbol": "SBD"
+ },
+ "STD": {
+ "name": "சாவ௠டோமி மறà¯à®±à¯à®®à¯ பிரினà¯à®¸à¯à®ªà®¿ டோபà¯à®°à®¾",
+ "symbol": "STD"
+ },
+ "SGD": {
+ "name": "சிஙà¯à®•à®ªà¯à®ªà¯‚ர௠டாலரà¯",
+ "symbol": "SGD"
+ },
+ "SCR": {
+ "name": "சிசீலோயிஸ௠ரà¯à®ªà¯€",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "சியாரா லியோனியன௠லியோனà¯",
+ "symbol": "SLL"
+ },
+ "SYP": {
+ "name": "சிரியன௠பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "SYP"
+ },
+ "CLP": {
+ "name": "சிலியன௠பெசோ",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "சீன யà¯à®µà®¾à®©à¯",
+ "symbol": "CNÂ¥"
+ },
+ "SRD": {
+ "name": "சà¯à®°à®¿à®©à®¾à®®à¯€à®¸à¯ டாலரà¯",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "சà¯à®µà®¾à®¸à®¿ லிலாஙà¯à®•à®©à®¿",
+ "symbol": "SZL"
+ },
+ "CHF": {
+ "name": "சà¯à®µà®¿à®¸à¯ ஃபà¯à®°à®¾à®™à¯à®•à¯",
+ "symbol": "CHF"
+ },
+ "SDG": {
+ "name": "சூடானீஸ௠பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "SDG"
+ },
+ "CZK": {
+ "name": "செக௠கà¯à®Ÿà®¿à®¯à®°à®šà¯ கொரà¯à®©à®¾",
+ "symbol": "CZK"
+ },
+ "SHP": {
+ "name": "செயினà¯à®Ÿà¯ ஹெலேனா பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "SHP"
+ },
+ "RSD": {
+ "name": "செரà¯à®ªà®¿à®¯à®©à¯ தினாரà¯",
+ "symbol": "RSD"
+ },
+ "SOS": {
+ "name": "சோமாலி ஷிலà¯à®²à®¿à®™à¯",
+ "symbol": "SOS"
+ },
+ "DKK": {
+ "name": "டானிஷ௠கà¯à®°à¯‹à®©à¯",
+ "symbol": "DKK"
+ },
+ "TTD": {
+ "name": "டிரினாட௠மறà¯à®±à¯à®®à¯ டோபாகோ டாலரà¯",
+ "symbol": "TTD"
+ },
+ "DOP": {
+ "name": "டொமினிகà¯à®•à®©à¯ பேசோ",
+ "symbol": "DOP"
+ },
+ "TZS": {
+ "name": "தனà¯à®¸à®¾à®©à®¿à®¯à®©à¯ ஷிலà¯à®²à®¿à®™à¯",
+ "symbol": "TZS"
+ },
+ "TJS": {
+ "name": "தஜிகிஸà¯à®¤à®¾à®©à®¿ சோமோனி",
+ "symbol": "TJS"
+ },
+ "THB": {
+ "name": "தாய௠பாடà¯",
+ "symbol": "฿"
+ },
+ "TMT": {
+ "name": "தà¯à®°à¯à®•à¯à®®à¯‡à®©à®¿à®¸à¯à®¤à®¾à®©à®¿ மனதà¯",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "தà¯à®°à¯à®•à¯à®•à®¿à®·à¯ லீரா",
+ "symbol": "TRY"
+ },
+ "TND": {
+ "name": "தà¯à®©à®¿à®·à®¿à®¯à®©à¯ தினாரà¯",
+ "symbol": "TND"
+ },
+ "SSP": {
+ "name": "தெறà¯à®•à¯ சூடானீஸ௠பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "SSP"
+ },
+ "ZAR": {
+ "name": "தென௠ஆபà¯à®°à®¿à®•à¯à®• ராணà¯à®Ÿà¯",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "தென௠கொரிய வானà¯",
+ "symbol": "â‚©"
+ },
+ "TOP": {
+ "name": "தொஙà¯à®•à®¾à®©à¯ பஙà¯à®•à®¾",
+ "symbol": "TOP"
+ },
+ "NAD": {
+ "name": "நமீபியன௠டாலரà¯",
+ "symbol": "NAD"
+ },
+ "NOK": {
+ "name": "நாரà¯à®µà¯‡à®œà®¿à®¯à®©à¯ கà¯à®°à¯‹à®©à¯",
+ "symbol": "NOK"
+ },
+ "NIO": {
+ "name": "நிகாராகà¯à®µà®¾à®©à¯ கோரà¯à®Ÿà¯‹à®ªà®¾",
+ "symbol": "NIO"
+ },
+ "NZD": {
+ "name": "நியூசிலாநà¯à®¤à¯ டாலரà¯",
+ "symbol": "NZ$"
+ },
+ "ANG": {
+ "name": "நெதரà¯à®²à¯‡à®£à¯à®Ÿà¯à®¸à¯ அனà¯à®Ÿà®¿à®²à®¿à®¯à®©à¯ கிலà¯à®Ÿà®°à¯",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "நேபாளீஸ௠ரூபாயà¯",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "நைஜீரியன௠நைரா",
+ "symbol": "NGN"
+ },
+ "BDT": {
+ "name": "பஙà¯à®•à®³à®¾à®¤à¯‡à®·à®¿ டாகா",
+ "symbol": "BDT"
+ },
+ "PGK": {
+ "name": "பபà¯à®µà®¾ நியூ கினியன௠கினா",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "பராகà¯à®µà®©à¯ கà¯à®µà®¾à®°à®¾à®©à®¿",
+ "symbol": "PYG"
+ },
+ "PAB": {
+ "name": "பனாமானியன௠பாலà¯à®ªà¯‹à®ªà®¾",
+ "symbol": "PAB"
+ },
+ "BHD": {
+ "name": "பஹà¯à®°à¯ˆà®©à®¿ தினாரà¯",
+ "symbol": "BHD"
+ },
+ "BSD": {
+ "name": "பஹாமியன௠டாலரà¯",
+ "symbol": "BSD"
+ },
+ "PKR": {
+ "name": "பாகிஸà¯à®¤à®¾à®©à®¿ ரூபாயà¯",
+ "symbol": "PKR"
+ },
+ "BBD": {
+ "name": "பாரà¯à®ªà¯‡à®Ÿà®¿à®¯à®©à¯ டாலரà¯",
+ "symbol": "BBD"
+ },
+ "GBP": {
+ "name": "பிரிடà¯à®Ÿà®¿à®·à¯ பவà¯à®£à¯à®Ÿà¯ ஸà¯à®Ÿà¯†à®°à¯à®²à®¿à®™à¯",
+ "symbol": "£"
+ },
+ "BRL": {
+ "name": "பிரேசிலியன௠ரியாலà¯",
+ "symbol": "R$"
+ },
+ "PHP": {
+ "name": "பிலிபà¯à®ªà¯ˆà®©à¯ பெசோ",
+ "symbol": "PHP"
+ },
+ "TWD": {
+ "name": "பà¯à®¤à®¿à®¯ தைவான௠டாலரà¯",
+ "symbol": "NT$"
+ },
+ "BIF": {
+ "name": "பà¯à®°à¯à®£à¯à®Ÿà®¿à®¯à®©à¯ ஃபà¯à®°à®¾à®™à¯à®•à¯",
+ "symbol": "BIF"
+ },
+ "BND": {
+ "name": "பà¯à®°à¯‚னே டாலரà¯",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "பà¯à®²à¯à®•à¯‡à®°à®¿à®¯à®©à¯ லெவà¯",
+ "symbol": "BGN"
+ },
+ "BTN": {
+ "name": "பூடà¯à®Ÿà®¾à®©à®¿à®·à¯ நிகà¯à®²à¯à®Ÿà¯à®°à®®à¯",
+ "symbol": "BTN"
+ },
+ "BMD": {
+ "name": "பெரà¯à®®à¯à®Ÿà®©à¯ டாலரà¯",
+ "symbol": "BMD"
+ },
+ "PEN": {
+ "name": "பெரà¯à®µà®¿à®¯à®©à¯ நியூவோ சோலà¯",
+ "symbol": "PEN"
+ },
+ "BYR": {
+ "name": "பெலரà¯à®šà®¿à®¯à®©à¯ ரூபிலà¯",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "பெலீஷ௠டாலரà¯",
+ "symbol": "BZD"
+ },
+ "BOB": {
+ "name": "பொலிவியன௠பொலிவியானோ",
+ "symbol": "BOB"
+ },
+ "BWP": {
+ "name": "போடà¯à®¸à¯à®µà®¾à®©à®¾ பà¯à®²à®¾",
+ "symbol": "BWP"
+ },
+ "PLN": {
+ "name": "போலிஷ௠ஸà¯à®²à®¾à®Ÿà¯à®Ÿà®¿",
+ "symbol": "PLN"
+ },
+ "BAM": {
+ "name": "போஸà¯à®©à®¿à®¯à®¾-ஹெரà¯à®¸à¯‡à®•à¯‹à®µà®¿à®©à®¾ கனà¯à®µà¯†à®°à¯à®Ÿà®¿à®ªà®¿à®²à¯ மாரà¯à®•à¯",
+ "symbol": "BAM"
+ },
+ "MNT": {
+ "name": "மஙà¯à®•à¯‹à®²à®¿à®¯à®©à¯ டà¯à®•à¯à®°à®¿à®•à¯",
+ "symbol": "MNT"
+ },
+ "MGA": {
+ "name": "மலகாசி à®à®°à®¿à®¯à®°à®¿",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "மலாவியன௠கà¯à®µà®¾à®šà¯à®šà®¾",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "மலேஷியன௠ரிஙà¯à®•à®¿à®¤à¯",
+ "symbol": "MYR"
+ },
+ "MDL": {
+ "name": "மாலà¯à®Ÿà¯‹à®µà®©à¯ லியூ",
+ "symbol": "MDL"
+ },
+ "MVR": {
+ "name": "மாலதà¯à®¤à¯€à®µà¯ à®°à¯à®ƒà®ªà®¿à®¯à®¾",
+ "symbol": "MVR"
+ },
+ "MMK": {
+ "name": "மியானà¯à®®à®°à¯ கியாதà¯",
+ "symbol": "MMK"
+ },
+ "MXN": {
+ "name": "மெகà¯à®¸à®¿à®•à®©à¯ பெசோ",
+ "symbol": "MX$"
+ },
+ "MOP": {
+ "name": "மெகனீஸ௠படாகா",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "மெசிடோனியன௠தினாரà¯",
+ "symbol": "MKD"
+ },
+ "MZN": {
+ "name": "மொசாமà¯à®ªà®¿à®•à¯‡à®©à¯ மெடிகலà¯",
+ "symbol": "MZN"
+ },
+ "MAD": {
+ "name": "மொராகà¯à®•à¯‹ திரà¯à®¹à®¾à®®à¯",
+ "symbol": "MAD"
+ },
+ "MRO": {
+ "name": "மொரிஷியனியன௠ஒகà¯à®¯à¯à®¯à®¾",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "மொரீஷியன௠ரà¯à®ªà¯€",
+ "symbol": "MUR"
+ },
+ "EUR": {
+ "name": "யூரோ",
+ "symbol": "€"
+ },
+ "RUB": {
+ "name": "ரஷியன௠ரூபிளà¯",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "à®°à¯à®µà®¾à®£à¯à®Ÿà®¾ ஃபà¯à®°à®¾à®™à¯à®•à¯",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "ரோமானியன௠லியூ",
+ "symbol": "RON"
+ },
+ "LAK": {
+ "name": "லவà¯à®Ÿà¯à®Ÿà®¿à®¯à®©à¯ கிபà¯",
+ "symbol": "LAK"
+ },
+ "LTL": {
+ "name": "லிதà¯à®µà¯‡à®©à®¿à®¯à®©à¯ லிடஸà¯",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "லிபியன௠தினாரà¯",
+ "symbol": "LYD"
+ },
+ "LSL": {
+ "name": "லெசோதோ லோடà¯à®Ÿà®¿",
+ "symbol": "LSL"
+ },
+ "LBP": {
+ "name": "லெபனீஸ௠பவà¯à®£à¯à®Ÿà¯",
+ "symbol": "LBP"
+ },
+ "LRD": {
+ "name": "லைபீரியன௠டாலரà¯",
+ "symbol": "LRD"
+ },
+ "KPW": {
+ "name": "வட கொரிய வானà¯",
+ "symbol": "KPW"
+ },
+ "VUV": {
+ "name": "வனà¯à®µà®¾à®Ÿà¯à®Ÿà¯ வாடà¯à®Ÿà¯",
+ "symbol": "VUV"
+ },
+ "VND": {
+ "name": "வியடà¯à®¨à®¾à®®à¯€à®¸à¯ டாஙà¯",
+ "symbol": "â‚«"
+ },
+ "VEF": {
+ "name": "வெனிசà¯à®²à®¿à®¯à®©à¯ போலிவரà¯",
+ "symbol": "VEF"
+ },
+ "JPY": {
+ "name": "ஜபà¯à®ªà®¾à®©à®¿à®¯ யெனà¯",
+ "symbol": "Â¥"
+ },
+ "JMD": {
+ "name": "ஜமைகà¯à®•à®¾à®©à¯ டாலரà¯",
+ "symbol": "JMD"
+ },
+ "DJF": {
+ "name": "ஜிபவà¯à®Ÿà®¿à®¯à¯†à®©à¯ ஃபà¯à®°à®¾à®™à¯à®•à¯",
+ "symbol": "DJF"
+ },
+ "GEL": {
+ "name": "ஜியாரà¯à®œà®¿à®¯à®©à¯ லாரி",
+ "symbol": "GEL"
+ },
+ "JOD": {
+ "name": "ஜோரà¯à®Ÿà®¾à®©à®¿à®¯à®©à¯ டைனரà¯",
+ "symbol": "JOD"
+ },
+ "SEK": {
+ "name": "ஸà¯à®µà¯‡à®¤à®¿à®·à¯ கà¯à®°à¯‹à®©à®¾",
+ "symbol": "SEK"
+ },
+ "ZMW": {
+ "name": "ஸாமà¯à®ªà®¿à®¯à®©à¯ கà¯à®µà®¾à®šà®¾",
+ "symbol": "ZMW"
+ },
+ "HUF": {
+ "name": "ஹஙà¯à®•à¯‡à®°à®¿à®¯à®©à¯ ஃபோரினà¯à®Ÿà¯",
+ "symbol": "HUF"
+ },
+ "HTG": {
+ "name": "ஹயேதà¯à®¤à®¿à®¯à®©à¯ கோரà¯à®Ÿà¯‡",
+ "symbol": "HTG"
+ },
+ "HKD": {
+ "name": "ஹாஙà¯à®•à®¾à®™à¯ டாலரà¯",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "ஹோனà¯à®Ÿà¯‚ரன௠லெமà¯à®ªà¯€à®°à®¾",
+ "symbol": "HNL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/te.json b/library/intl/resources/currency/te.json
new file mode 100644
index 000000000..1b7457159
--- /dev/null
+++ b/library/intl/resources/currency/te.json
@@ -0,0 +1,634 @@
+{
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "AOA": {
+ "name": "అంగోలానౠకà±à°µà°¾à°¨à±â€Œà°œà°¾",
+ "symbol": "AOA"
+ },
+ "AZN": {
+ "name": "అజరà±à°¬à±ˆà°œà°¾à°¨à± మానటà±",
+ "symbol": "AZN"
+ },
+ "AMD": {
+ "name": "అమెరికనౠడà±à°°à°¾à°®à±",
+ "symbol": "AMD"
+ },
+ "USD": {
+ "name": "అమెరికా డాలరà±",
+ "symbol": "$"
+ },
+ "AWG": {
+ "name": "à°…à°°à±à°¬à°¨à± à°«à±à°²à±‹à°°à°¿à°¨à±",
+ "symbol": "AWG"
+ },
+ "ARS": {
+ "name": "à°…à°°à±à°œà±†à°‚టీనా పెసో",
+ "symbol": "ARS"
+ },
+ "DZD": {
+ "name": "à°…à°²à±à°œà±€à°°à°¿à°¯à°¨à± దీనారà±",
+ "symbol": "DZD"
+ },
+ "AFN": {
+ "name": "ఆఫà±à°˜à°¾à°¨à± ఆఫà±à°˜à°¾à°¨à°¿",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ఆలà±à°¬à±‡à°¨à°¿à°¯à°¨à± లేకà±",
+ "symbol": "ALL"
+ },
+ "AUD": {
+ "name": "ఆసà±à°Ÿà±à°°à±‡à°²à°¿à°¯à°¨à± డాలరà±",
+ "symbol": "A$"
+ },
+ "IDR": {
+ "name": "ఇండోనేషియా రూపాయి",
+ "symbol": "IDR"
+ },
+ "ETB": {
+ "name": "ఇథియోపియనౠబరà±",
+ "symbol": "ETB"
+ },
+ "IQD": {
+ "name": "ఇరాకీ దీనారà±",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "ఇరానియనౠరీయలà±",
+ "symbol": "IRR"
+ },
+ "EGP": {
+ "name": "ఈజిపà±à°·à°¿à°¯à°¨à± పౌండà±",
+ "symbol": "EGP"
+ },
+ "UAH": {
+ "name": "ఉకà±à°°à°¯à°¿à°¨à°¿à°¯à°¨à± à°¹à±à°°à°¿à°µà±â€Œà°¨à°¿à°¯à°¾",
+ "symbol": "UAH"
+ },
+ "UZS": {
+ "name": "ఉజà±â€Œà°¬à±†à°•à°¿à°¸à±à°¤à°¾à°¨à± సౌమà±",
+ "symbol": "UZS"
+ },
+ "KPW": {
+ "name": "ఉతà±à°¤à°° కొరియా వోనà±",
+ "symbol": "KPW"
+ },
+ "UYU": {
+ "name": "ఉరà±à°—à±à°µà±†à°¯à°¨à± పెసో",
+ "symbol": "UYU"
+ },
+ "YER": {
+ "name": "à°Žà°®à±à°¨à±€ రీయలà±",
+ "symbol": "YER"
+ },
+ "ERN": {
+ "name": "à°Žà°°à°¿à°Ÿà±à°°à±€à°¨à± నకà±à°«à°¾",
+ "symbol": "ERN"
+ },
+ "ILS": {
+ "name": "à°à°°à°¾à°¯à°¿à°²à°¿ à°¨à±à°¯à±‚ షెకà±à°¯à±†à°²à±",
+ "symbol": "₪"
+ },
+ "ISK": {
+ "name": "à°à°¸à±à°²à°¾à°‚à°¡à°¿à°•à± à°•à±à°°à±‹à°¨à°¾",
+ "symbol": "ISK"
+ },
+ "OMR": {
+ "name": "ఒమాని రీయలà±",
+ "symbol": "OMR"
+ },
+ "KHR": {
+ "name": "కాంబోడియనౠరీలà±",
+ "symbol": "KHR"
+ },
+ "KGS": {
+ "name": "à°•à°¿à°°à±à°—à°¿à°¸à±à°¥à°¾à°¨à°¿ సౌమà±",
+ "symbol": "KGS"
+ },
+ "KWD": {
+ "name": "à°•à±à°µà±ˆà°Ÿà± దీనారà±",
+ "symbol": "KWD"
+ },
+ "CAD": {
+ "name": "కెనడియనౠడాలరà±",
+ "symbol": "CA$"
+ },
+ "KES": {
+ "name": "కెనà±à°¯à°¾à°¨à± à°·à°¿à°²à±à°²à°¿à°‚à°—à±",
+ "symbol": "KES"
+ },
+ "CVE": {
+ "name": "కేపౠవెరà±à°¡à°¿à°¯à°¨à± à°Žà°¸à±à°•à±à°¡à±‹",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "కేమానౠదీవà±à°² డాలరà±",
+ "symbol": "KYD"
+ },
+ "CDF": {
+ "name": "కొంగోలిసౠఫà±à°°à°¾à°‚à°•à±",
+ "symbol": "CDF"
+ },
+ "KMF": {
+ "name": "కొమోరియనౠఫà±à°°à°¾à°‚à°•à±",
+ "symbol": "KMF"
+ },
+ "COP": {
+ "name": "కొలంబియనౠపెసో",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "కోసà±à°Ÿà°¾ రికనౠకోలోనà±",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "à°•à±à°¯à±‚బనౠకనà±à°µà°°à±à°Ÿà°¬à±à°²à± పెసో",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "à°•à±à°¯à±‚బనౠపెసో",
+ "symbol": "CUP"
+ },
+ "TWD": {
+ "name": "à°•à±à°°à±Šà°¤à±à°¤ తైవానౠడాలరà±",
+ "symbol": "NT$"
+ },
+ "HRK": {
+ "name": "à°•à±à°°à±Šà°¯à±‡à°·à°¿à°¯à°¨à± à°•à±à°¯à±‚à°¨",
+ "symbol": "HRK"
+ },
+ "QAR": {
+ "name": "à°•à±à°µà°¾à°Ÿà°°à°¿ రీయలà±",
+ "symbol": "QAR"
+ },
+ "KZT": {
+ "name": "ఖజికిసà±à°¥à°¾à°¨à± టెంగే",
+ "symbol": "KZT"
+ },
+ "GMD": {
+ "name": "గాంబియనౠదలాసి",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "గానెయనౠసెడి",
+ "symbol": "GHS"
+ },
+ "GYD": {
+ "name": "à°—à±à°¯à°¨à°¿à°¯à°¾à°¸à± డాలరà±",
+ "symbol": "GYD"
+ },
+ "GTQ": {
+ "name": "à°—à±à°¯à±à°Ÿà±†à°®à°¾à°²à°¨à± à°•à±à°µà±†à°Ÿà±â€Œà°œà°²à±",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "à°—à±à°µà°¿à°¨à°¿à°¯à°¨à± à°«à±à°°à°¾à°‚à°•à±",
+ "symbol": "GNF"
+ },
+ "CLP": {
+ "name": "చిలియనౠపెసో",
+ "symbol": "CLP"
+ },
+ "CZK": {
+ "name": "చెకౠరిపబà±à°²à°¿à°•à± కోరà±à°¨à°¾",
+ "symbol": "CZK"
+ },
+ "CNY": {
+ "name": "చైనా దేశ à°¯à±à°µà°¾à°¨à±",
+ "symbol": "CNÂ¥"
+ },
+ "JPY": {
+ "name": "జపానౠదేశ యెసà±",
+ "symbol": "JPÂ¥"
+ },
+ "JMD": {
+ "name": "జమైకనౠడాలరà±",
+ "symbol": "JMD"
+ },
+ "ZMW": {
+ "name": "జాంబియనౠకà±à°µà°¾à°šà°¾",
+ "symbol": "ZMW"
+ },
+ "GEL": {
+ "name": "జారà±à°œà°¿à°¯à°¨à± లారి",
+ "symbol": "GEL"
+ },
+ "DJF": {
+ "name": "జిబోటియనౠఫà±à°°à°¾à°‚à°•à±",
+ "symbol": "DJF"
+ },
+ "GIP": {
+ "name": "జిబà±à°°à°²à±â€Œà°Ÿà±‚రౠపౌండà±",
+ "symbol": "GIP"
+ },
+ "JOD": {
+ "name": "జోరà±â€Œà°¡à°¾à°¨à°¿à°¯à°¨à± దీనారà±",
+ "symbol": "JOD"
+ },
+ "TZS": {
+ "name": "టాంజానియనౠషిలà±à°²à°¿à°‚à°—à±",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "టోంగానౠపాంʻగా",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "à°Ÿà±à°°à°¿à°¨à°¿à°¡à°¾à°¡à± మరియౠటొబాగో డాలరà±",
+ "symbol": "TTD"
+ },
+ "DKK": {
+ "name": "డానిషౠకà±à°°à±‹à°¨à±",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "డోమినికనౠపెసో",
+ "symbol": "DOP"
+ },
+ "TJS": {
+ "name": "తజికిసà±à°¥à°¾à°¨à± సమోని",
+ "symbol": "TJS"
+ },
+ "TND": {
+ "name": "à°¤à±à°¨à±€à°·à°¿à°¯à°¨à± దీనారà±",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "à°¤à±à°°à±à°•à°¿à°·à± లిరా",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "à°¤à±à°°à±à°•à±â€Œà°®à±†à°¨à°¿à°¸à±à°¥à°¾à°¨à°¿ మనాటà±",
+ "symbol": "TMT"
+ },
+ "XCD": {
+ "name": "తూరà±à°ªà± కరీబియనౠడాలరà±",
+ "symbol": "EC$"
+ },
+ "THB": {
+ "name": "థాయౠబాటà±",
+ "symbol": "฿"
+ },
+ "ZAR": {
+ "name": "దకà±à°·à°¿à°£ ఆఫà±à°°à°¿à°•à°¾ à°°à±à°¯à°¾à°‚à°¡à±",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "దకà±à°·à°¿à°£ కొరియా వోనà±",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "దకà±à°·à°¿à°£ à°¸à±à°¡à°¾à°¨à±€à°¸à± పౌండà±",
+ "symbol": "SSP"
+ },
+ "NAD": {
+ "name": "నమిబియనౠడాలరà±",
+ "symbol": "NAD"
+ },
+ "NOK": {
+ "name": "నారà±à°µà±‡à°œà±€à°¯à°¨à± à°•à±à°°à±‹à°¨à±",
+ "symbol": "NOK"
+ },
+ "NIO": {
+ "name": "నికరగà±à°¯à±à°¯à°¨à± కొరà±â€Œà°¡à±à°¬à±",
+ "symbol": "NIO"
+ },
+ "ANG": {
+ "name": "నెదరà±à°²à°¾à°‚à°¡à±à°¸à± యాంటిలà±à°²à°¿à°¯à°¨à± à°—à°¿à°²à±â€Œà°¡à°°à±",
+ "symbol": "ANG"
+ },
+ "NPR": {
+ "name": "నేపాలీయà±à°² రూపాయి",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "నైజీరియనౠనైరా",
+ "symbol": "NGN"
+ },
+ "NZD": {
+ "name": "à°¨à±à°¯à±‚జిలాండౠడాలరà±",
+ "symbol": "NZ$"
+ },
+ "PAB": {
+ "name": "పనామనియనౠబలà±à°¬à±‹à°µ",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "పపà±à°¯à±‚ à°¨à±à°¯à±‚ à°—à±à°¯à°¿à°¨à°¿à°¯à°¨à± కినా",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "పరగà±à°µà°¾à°¯à°¨à± à°—à±à°µà°¾à°°à°¨à°¿",
+ "symbol": "PYG"
+ },
+ "PKR": {
+ "name": "పాకిసà±à°¥à°¾à°¨à± రూపాయి",
+ "symbol": "PKR"
+ },
+ "PEN": {
+ "name": "పెరà±à°µà°¿à°¯à°¨à± à°¨à±à°¯à±‚వో సోలà±",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "పోలిషౠజà±à°²à±‹à°Ÿà±€",
+ "symbol": "PLN"
+ },
+ "FKP": {
+ "name": "ఫాకà±â€Œà°²à±à°¯à°¾à°‚డౠదీవà±à°²à± పౌండà±",
+ "symbol": "FKP"
+ },
+ "PHP": {
+ "name": "ఫిలిపà±à°ªà°¿à°¨à± పెసో",
+ "symbol": "PHP"
+ },
+ "FJD": {
+ "name": "ఫీజియనౠడాలరà±",
+ "symbol": "FJD"
+ },
+ "BBD": {
+ "name": "బరà±à°¬à°¾à°¡à°¿à°¯à°¨à± డాలరà±",
+ "symbol": "BBD"
+ },
+ "BGN": {
+ "name": "బలà±à°—ేరియనౠలేవà±",
+ "symbol": "BGN"
+ },
+ "BSD": {
+ "name": "బహామియనౠడాలరà±",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "బహà±à°°à±ˆà°¨à°¿ దీనారà±",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "బాంగà±à°²à°¾à°¦à±‡à°¶à± టాకా",
+ "symbol": "BDT"
+ },
+ "BIF": {
+ "name": "à°¬à±à°°à°¿à°‚డియనౠఫà±à°°à°¾à°‚à°•à±",
+ "symbol": "BIF"
+ },
+ "BMD": {
+ "name": "బెరà±à°®à±à°¡à°¨à± డాలరà±",
+ "symbol": "BMD"
+ },
+ "BYR": {
+ "name": "బెలరూసియనౠరూబలà±",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "బెలీజౠడాలరà±",
+ "symbol": "BZD"
+ },
+ "BOB": {
+ "name": "బొలీవియనౠబొలీవియానో",
+ "symbol": "BOB"
+ },
+ "BWP": {
+ "name": "బోటà±à°¸à±â€Œà°µà°¾à°¨à°¾ à°ªà±à°²à°¾",
+ "symbol": "BWP"
+ },
+ "BAM": {
+ "name": "బోసà±à°¨à°¿à°¯à°¾-హెరà±à°œà°—ోవినా మారà±à°ªà°¿à°¡à°¿ చెయà±à°¯à°—లిగే మారà±à°•à±",
+ "symbol": "BAM"
+ },
+ "GBP": {
+ "name": "à°¬à±à°°à°¿à°Ÿà°¿à°·à± పౌండౠసà±à°Ÿà±†à°°à±à°²à°¿à°‚à°—à±",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "à°¬à±à°°à±‚నై డాలరà±",
+ "symbol": "BND"
+ },
+ "BRL": {
+ "name": "à°¬à±à°°à±†à°œà°¿à°²à°¿à°¯à°¨à± రియలà±",
+ "symbol": "R$"
+ },
+ "BTN": {
+ "name": "భూటానీయà±à°² à°—à±à°²à±â€Œà°Ÿà±à°°à±à°®à±",
+ "symbol": "BTN"
+ },
+ "MNT": {
+ "name": "మంగోలియనౠటà±à°—à±à°°à°¿à°•à±",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "మకనీసౠపటాక",
+ "symbol": "MOP"
+ },
+ "MMK": {
+ "name": "మయనà±à°®à°¾à°°à± à°•à±à°¯à°¾à°Ÿà±",
+ "symbol": "MMK"
+ },
+ "MGA": {
+ "name": "మలగసీ అరియరీ",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "మలావియనౠకà±à°µà°¾à°šà°¾",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "మలేషియా à°°à°¿à°‚à°—à±à°—à°¿à°Ÿà±",
+ "symbol": "MYR"
+ },
+ "MUR": {
+ "name": "మారిషనౠరూపాయి",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "మాలà±à°¦à±€à°µà°¿à°¯à°¨à± à°°à±à°«à°¿à°¯à°¾",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "మెకà±à°¸à°¿à°•à°¨à± పెసో",
+ "symbol": "MX$"
+ },
+ "MKD": {
+ "name": "మెసిడోనియనౠదినారà±",
+ "symbol": "MKD"
+ },
+ "MZN": {
+ "name": "మొజాంబికనౠమెటికలà±",
+ "symbol": "MZN"
+ },
+ "MAD": {
+ "name": "మోరోకనౠదిరà±à°¹à±à°®à±",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "మోలà±â€Œà°¡à±‹à°µà°¨à± à°²à±à°¯à±‚",
+ "symbol": "MDL"
+ },
+ "MRO": {
+ "name": "మౌరిటానియనౠఒగà±à°¯à°¿à°¯à°¾",
+ "symbol": "MRO"
+ },
+ "UGX": {
+ "name": "à°¯à±à°—ండనౠషిలà±à°²à°¿à°‚à°—à±",
+ "symbol": "UGX"
+ },
+ "AED": {
+ "name": "à°¯à±à°¨à±ˆà°Ÿà±†à°¡à± ఆరబౠఎమిరేటà±à°¸à± దిరామà±",
+ "symbol": "AED"
+ },
+ "EUR": {
+ "name": "à°¯à±à°°à±Š",
+ "symbol": "€"
+ },
+ "RUB": {
+ "name": "à°°à°·à±à°¯à°¨à± రూబలà±",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "రూపాయి",
+ "symbol": "₹"
+ },
+ "RON": {
+ "name": "రోమానియానౠలెయà±",
+ "symbol": "RON"
+ },
+ "RWF": {
+ "name": "à°°à±à°µà°¾à°¨à°¡à°¾à°¨à± à°«à±à°°à°¾à°‚à°•à±",
+ "symbol": "RWF"
+ },
+ "LAK": {
+ "name": "లాటియనౠకిపà±",
+ "symbol": "LAK"
+ },
+ "LTL": {
+ "name": "లిథోనియనౠలీటాసà±",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "లిబియనౠదీనారà±",
+ "symbol": "LYD"
+ },
+ "LRD": {
+ "name": "లిబేరియనౠడాలరà±",
+ "symbol": "LRD"
+ },
+ "LBP": {
+ "name": "లెబనీసౠపౌండà±",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "లెసోధో లోటి",
+ "symbol": "LSL"
+ },
+ "VUV": {
+ "name": "వనాటౠవటà±",
+ "symbol": "VUV"
+ },
+ "VND": {
+ "name": "వియతà±à°¨à°¾à°®à±€à°¯à±à°² డాంగà±",
+ "symbol": "â‚«"
+ },
+ "VEF": {
+ "name": "వెనà±à°œà±à°²à°¾ బోలివరà±",
+ "symbol": "VEF"
+ },
+ "LKR": {
+ "name": "à°¶à±à°°à±€à°²à°‚à°• రూపాయి",
+ "symbol": "LKR"
+ },
+ "WST": {
+ "name": "సమోయనౠతాలా",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "సావో టోమౠమరియౠపà±à°°à°¿à°¨à±à°¸à°¿à°ªà°¿ డోబà±à°°à°¾",
+ "symbol": "STD"
+ },
+ "XAF": {
+ "name": "సిఎఫà±â€Œà°Ž à°«à±à°°à°¾à°‚కౠబిఇà°à°¸à°¿",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "సిఎఫà±â€Œà°Ž à°«à±à°°à°¾à°‚కౠబిసిఈà°à°“",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "సిఎఫà±â€Œà°ªà°¿ à°«à±à°°à°¾à°‚à°•à±",
+ "symbol": "CFPF"
+ },
+ "SGD": {
+ "name": "సింగపూరౠడాలరà±",
+ "symbol": "SGD"
+ },
+ "SYP": {
+ "name": "సిరీయనౠపౌండà±",
+ "symbol": "SYP"
+ },
+ "SLL": {
+ "name": "సీయిరౠలియోనియనౠలీయోనà±",
+ "symbol": "SLL"
+ },
+ "SDG": {
+ "name": "à°¸à±à°¡à°¾à°¨à±€à°¸à± పౌండà±",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "à°¸à±à°°à°¿à°¨à°¾à°®à±€à°¯à±à°² డాలరà±",
+ "symbol": "SRD"
+ },
+ "SHP": {
+ "name": "సెయింటౠహెలెనా పౌండà±",
+ "symbol": "SHP"
+ },
+ "SCR": {
+ "name": "సెయిచెలà±à°²à±‹à°¯à°¿à°¸à± రూపాయి",
+ "symbol": "SCR"
+ },
+ "RSD": {
+ "name": "సెరà±à°¬à°¿à°¯à°¨à± దీనారà±",
+ "symbol": "RSD"
+ },
+ "SOS": {
+ "name": "సొమాలి à°·à°¿à°²à±à°²à°¿à°‚à°—à±",
+ "symbol": "SOS"
+ },
+ "SBD": {
+ "name": "సోలోమనౠదీవà±à°² డాలరà±",
+ "symbol": "SBD"
+ },
+ "SAR": {
+ "name": "సౌది రియలà±",
+ "symbol": "SAR"
+ },
+ "SZL": {
+ "name": "à°¸à±à°µà°¾à°œà°¿ లిలానà±à°—ేని",
+ "symbol": "SZL"
+ },
+ "CHF": {
+ "name": "à°¸à±à°µà°¿à°¸à± à°«à±à°°à°¾à°‚à°•à±",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "à°¸à±à°µà±€à°¡à°¿à°·à± à°•à±à°°à±‹à°¨à°¾",
+ "symbol": "SEK"
+ },
+ "HUF": {
+ "name": "హంగేరియనౠఫోరినà±à°Ÿà±",
+ "symbol": "HUF"
+ },
+ "HKD": {
+ "name": "హాంకాంగౠడాలరà±",
+ "symbol": "HK$"
+ },
+ "HTG": {
+ "name": "హైటియనౠగà±à°µà±‹à°°à±à°¡à±‡",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "హోండà±à°°à°¨à± లెమిపిరా",
+ "symbol": "HNL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/teo.json b/library/intl/resources/currency/teo.json
new file mode 100644
index 000000000..f80416729
--- /dev/null
+++ b/library/intl/resources/currency/teo.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ZAR": {
+ "name": "Ango’otol lok’ Afrika Kusini",
+ "symbol": "ZAR"
+ },
+ "DZD": {
+ "name": "Ango’otol lok’ Aljeria",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "Ango’otol lok’ Angola",
+ "symbol": "AOA"
+ },
+ "AUD": {
+ "name": "Ango’otol lok’ Australia",
+ "symbol": "A$"
+ },
+ "BHD": {
+ "name": "Ango’otol lok’ Bahareni",
+ "symbol": "BHD"
+ },
+ "BWP": {
+ "name": "Ango’otol lok’ Botswana",
+ "symbol": "BWP"
+ },
+ "MGA": {
+ "name": "Ango’otol lok’ Bukini",
+ "symbol": "MGA"
+ },
+ "BIF": {
+ "name": "Ango’otol lok’ Burundi",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Ango’otol lok’ CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Ango’otol lok’ CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "CNY": {
+ "name": "Ango’otol lok’ China",
+ "symbol": "CNÂ¥"
+ },
+ "ERN": {
+ "name": "Ango’otol lok’ Eritrea",
+ "symbol": "ERN"
+ },
+ "AED": {
+ "name": "Ango’otol lok’ Falme za Kiarabu",
+ "symbol": "AED"
+ },
+ "INR": {
+ "name": "Ango’otol lok’ India",
+ "symbol": "₹"
+ },
+ "DJF": {
+ "name": "Ango’otol lok’ Jibuti",
+ "symbol": "DJF"
+ },
+ "KES": {
+ "name": "Ango’otol lok’ Kenya",
+ "symbol": "KES"
+ },
+ "CVE": {
+ "name": "Ango’otol lok’ Kepuvede",
+ "symbol": "CVE"
+ },
+ "JPY": {
+ "name": "Ango’otol lok’ Kijapani",
+ "symbol": "JPÂ¥"
+ },
+ "KMF": {
+ "name": "Ango’otol lok’ Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Ango’otol lok’ Kongo",
+ "symbol": "CDF"
+ },
+ "LSL": {
+ "name": "Ango’otol lok’ Lesoto",
+ "symbol": "LSL"
+ },
+ "LYD": {
+ "name": "Ango’otol lok’ Libya",
+ "symbol": "LYD"
+ },
+ "MWK": {
+ "name": "Ango’otol lok’ Malawi",
+ "symbol": "MWK"
+ },
+ "MUR": {
+ "name": "Ango’otol lok’ Morisi",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "Ango’otol lok’ Moritania",
+ "symbol": "MRO"
+ },
+ "MAD": {
+ "name": "Ango’otol lok’ Moroko",
+ "symbol": "MAD"
+ },
+ "NAD": {
+ "name": "Ango’otol lok’ Namibia",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "Ango’otol lok’ Nijeria",
+ "symbol": "NGN"
+ },
+ "RWF": {
+ "name": "Ango’otol lok’ Rwanda",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "Ango’otol lok’ Santahelena",
+ "symbol": "SHP"
+ },
+ "STD": {
+ "name": "Ango’otol lok’ Sao Tome na Principe",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Ango’otol lok’ Saudia",
+ "symbol": "SAR"
+ },
+ "SCR": {
+ "name": "Ango’otol lok’ Shelisheli",
+ "symbol": "SCR"
+ },
+ "SOS": {
+ "name": "Ango’otol lok’ Somalia",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Ango’otol lok’ Tanzania",
+ "symbol": "TZS"
+ },
+ "TND": {
+ "name": "Ango’otol lok’ Tunisia",
+ "symbol": "TND"
+ },
+ "UGX": {
+ "name": "Ango’otol lok’ Uganda",
+ "symbol": "USh"
+ },
+ "ETB": {
+ "name": "Ango’otol lok’ Uhabeshi",
+ "symbol": "ETB"
+ },
+ "CHF": {
+ "name": "Ango’otol lok’ Uswisi",
+ "symbol": "CHF"
+ },
+ "ZMW": {
+ "name": "Ango’otol lok’ Zambia",
+ "symbol": "ZMW"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi ya Gambia",
+ "symbol": "GMD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "USD": {
+ "name": "edola lok’ Amareka",
+ "symbol": "US$"
+ },
+ "LRD": {
+ "name": "edola lok’ Liberia",
+ "symbol": "LRD"
+ },
+ "CAD": {
+ "name": "Edola lok’Kanada",
+ "symbol": "CA$"
+ },
+ "EGP": {
+ "name": "Epaunt lok’ Misri",
+ "symbol": "EGP"
+ },
+ "SDG": {
+ "name": "Epaunt Lok’ Sudan",
+ "symbol": "SDG"
+ },
+ "GBP": {
+ "name": "Epaunt lok’ Uingereza",
+ "symbol": "£"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leoni",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/th.json b/library/intl/resources/currency/th.json
new file mode 100644
index 000000000..b011356a8
--- /dev/null
+++ b/library/intl/resources/currency/th.json
@@ -0,0 +1,634 @@
+{
+ "AOA": {
+ "name": "à¸à¸§à¸²à¸™à¸‹à¸²à¹à¸­à¸‡à¹‚à¸à¸¥à¸²",
+ "symbol": "AOA"
+ },
+ "PYG": {
+ "name": "à¸à¸§à¸²à¸£à¸²à¸™à¸µà¸›à¸²à¸£à¸²à¸à¸§à¸±à¸¢",
+ "symbol": "PYG"
+ },
+ "NIO": {
+ "name": "à¸à¸­à¸£à¹Œà¹‚ดบานิà¸à¸²à¸£à¸²à¸à¸±à¸§",
+ "symbol": "NIO"
+ },
+ "ANG": {
+ "name": "à¸à¸´à¸¥à¹€à¸”อร์เนเธอร์à¹à¸¥à¸™à¸”์à¹à¸­à¸™à¸—ิลลิส",
+ "symbol": "ANG"
+ },
+ "PGK": {
+ "name": "à¸à¸µà¸™à¸²à¸›à¸²à¸›à¸±à¸§à¸™à¸´à¸§à¸à¸´à¸™à¸µ",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "à¸à¸µà¸šà¸¥à¸²à¸§",
+ "symbol": "LAK"
+ },
+ "HTG": {
+ "name": "à¸à¸¹à¸£à¹Œà¸”เฮติ",
+ "symbol": "HTG"
+ },
+ "CRC": {
+ "name": "โà¸à¸¥à¸­à¸‡à¸„อสตาริà¸à¸²",
+ "symbol": "CRC"
+ },
+ "ZMW": {
+ "name": "ควาชาà¹à¸‹à¸¡à¹€à¸šà¸µà¸¢",
+ "symbol": "ZMW"
+ },
+ "MWK": {
+ "name": "ควาชามาลาวี",
+ "symbol": "MWK"
+ },
+ "HRK": {
+ "name": "คูนาโครเอเชีย",
+ "symbol": "HRK"
+ },
+ "GTQ": {
+ "name": "เควตซัลà¸à¸±à¸§à¹€à¸•à¸¡à¸²à¸¥à¸²",
+ "symbol": "GTQ"
+ },
+ "DKK": {
+ "name": "โครนเดนมาร์à¸",
+ "symbol": "DKK"
+ },
+ "NOK": {
+ "name": "โครนนอร์เวย์",
+ "symbol": "NOK"
+ },
+ "SEK": {
+ "name": "โครนาสวีเดน",
+ "symbol": "SEK"
+ },
+ "ISK": {
+ "name": "โครนาไอซ์à¹à¸¥à¸™à¸”์",
+ "symbol": "ISK"
+ },
+ "CZK": {
+ "name": "โครูนาสาธารณรัà¸à¹€à¸Šà¹‡à¸",
+ "symbol": "CZK"
+ },
+ "SVC": {
+ "name": "โคลอนเอลซัลวาดอร์",
+ "symbol": "SVC"
+ },
+ "MMK": {
+ "name": "จ๊าตพม่า",
+ "symbol": "MMK"
+ },
+ "KES": {
+ "name": "ชิลลิ่งเคนยา",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "ชิลลิงโซมาเลีย",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "ชิลลิงà¹à¸—นซาเนีย",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "ชิลลิงยูà¸à¸±à¸™à¸”า",
+ "symbol": "UGX"
+ },
+ "PLN": {
+ "name": "ซลอตีโปà¹à¸¥à¸™à¸”์",
+ "symbol": "PLN"
+ },
+ "KGS": {
+ "name": "ซอมคีร์à¸à¸µà¸‹à¸ªà¸–าน",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "ซอมอุซเบà¸à¸´à¸ªà¸–าน",
+ "symbol": "UZS"
+ },
+ "GHS": {
+ "name": "เซดีà¸à¸²à¸™à¸²",
+ "symbol": "GHS"
+ },
+ "TJS": {
+ "name": "โซโมนิทาจิà¸à¸´à¸ªà¸–าน",
+ "symbol": "TJS"
+ },
+ "VND": {
+ "name": "ดองเวียดนาม",
+ "symbol": "â‚«"
+ },
+ "STD": {
+ "name": "ดอบราเซาตูเมà¹à¸¥à¸°à¸›à¸£à¸´à¸™à¸‹à¸´à¸›à¸µ",
+ "symbol": "STD"
+ },
+ "GYD": {
+ "name": "ดอลลาร์à¸à¸²à¸¢à¸­à¸²à¸™à¸²",
+ "symbol": "GYD"
+ },
+ "CAD": {
+ "name": "ดอลลาร์à¹à¸„นาดา",
+ "symbol": "CA$"
+ },
+ "XCD": {
+ "name": "ดอลลาร์à¹à¸„ริบเบียนตะวันออà¸",
+ "symbol": "EC$"
+ },
+ "JMD": {
+ "name": "ดอลลาร์จาเมà¸à¸²",
+ "symbol": "JMD"
+ },
+ "ZWL": {
+ "name": "ดอลลาร์ซิมบับเว (2009)",
+ "symbol": "ZWL"
+ },
+ "SRD": {
+ "name": "ดอลลาร์ซูรินาเม",
+ "symbol": "SRD"
+ },
+ "TTD": {
+ "name": "ดอลลาร์ตรินิà¹à¸”ดà¹à¸¥à¸°à¹‚ตเบโà¸",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "ดอลลาร์ไต้หวันใหม่",
+ "symbol": "NT$"
+ },
+ "NAD": {
+ "name": "ดอลลาร์นามิเบีย",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "ดอลลาร์นิวซีà¹à¸¥à¸™à¸”์",
+ "symbol": "NZ$"
+ },
+ "BND": {
+ "name": "ดอลลาร์บรูไน",
+ "symbol": "BND"
+ },
+ "BBD": {
+ "name": "ดอลลาร์บาร์เบโดส",
+ "symbol": "BBD"
+ },
+ "BSD": {
+ "name": "ดอลลาร์บาฮามาส",
+ "symbol": "BSD"
+ },
+ "BZD": {
+ "name": "ดอลลาร์เบลีซ",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "ดอลลาร์เบอร์มิวดา",
+ "symbol": "BMD"
+ },
+ "FJD": {
+ "name": "ดอลลาร์ฟิจิ",
+ "symbol": "FJD"
+ },
+ "LRD": {
+ "name": "ดอลลาร์ไลบีเรีย",
+ "symbol": "LRD"
+ },
+ "USD": {
+ "name": "ดอลลาร์สหรัà¸",
+ "symbol": "US$"
+ },
+ "SGD": {
+ "name": "ดอลลาร์สิงคโปร์",
+ "symbol": "SGD"
+ },
+ "KYD": {
+ "name": "ดอลลาร์หมู่เà¸à¸²à¸°à¹€à¸„ย์à¹à¸¡à¸™",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "ดอลลาร์หมู่เà¸à¸²à¸°à¹‚ซโลมอน",
+ "symbol": "SBD"
+ },
+ "AUD": {
+ "name": "ดอลลาร์ออสเตรเลีย",
+ "symbol": "AU$"
+ },
+ "HKD": {
+ "name": "ดอลลาร์ฮ่องà¸à¸‡",
+ "symbol": "HK$"
+ },
+ "GMD": {
+ "name": "ดาลาซีà¹à¸à¸¡à¹€à¸šà¸µà¸¢",
+ "symbol": "GMD"
+ },
+ "KWD": {
+ "name": "ดีนาร์คูเวต",
+ "symbol": "KWD"
+ },
+ "JOD": {
+ "name": "ดีนาร์จอร์à¹à¸”น",
+ "symbol": "JOD"
+ },
+ "RSD": {
+ "name": "ดีนาร์เซอร์เบีย",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "ดีนาร์ตูนิเซีย",
+ "symbol": "TND"
+ },
+ "BHD": {
+ "name": "ดีนาร์บาห์เรน",
+ "symbol": "BHD"
+ },
+ "MKD": {
+ "name": "ดีนาร์มาซิโดเนีย",
+ "symbol": "MKD"
+ },
+ "LYD": {
+ "name": "ดีนาร์ลิเบีย",
+ "symbol": "LYD"
+ },
+ "IQD": {
+ "name": "ดีนาร์อิรัà¸",
+ "symbol": "IQD"
+ },
+ "DZD": {
+ "name": "ดีนาร์à¹à¸­à¸¥à¸ˆà¸µà¹€à¸£à¸µà¸¢",
+ "symbol": "DZD"
+ },
+ "MAD": {
+ "name": "ดีà¹à¸£à¸«à¹Œà¸¡à¹‚มร็อà¸à¹‚à¸",
+ "symbol": "MAD"
+ },
+ "AED": {
+ "name": "เดอร์à¹à¸®à¸¡à¸ªà¸«à¸£à¸±à¸à¸­à¸²à¸«à¸£à¸±à¸šà¹€à¸­à¸¡à¸´à¹€à¸£à¸•à¸ªà¹Œ",
+ "symbol": "AED"
+ },
+ "AMD": {
+ "name": "à¹à¸”รมอาร์เมเนีย",
+ "symbol": "AMD"
+ },
+ "BDT": {
+ "name": "ตาà¸à¸²à¸šà¸±à¸‡à¸à¸¥à¸²à¹€à¸—ศ",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "ทาลาซามัว",
+ "symbol": "WST"
+ },
+ "MNT": {
+ "name": "ทูà¸à¸£à¸´à¸à¸¡à¸­à¸‡à¹‚à¸à¹€à¸¥à¸µà¸¢",
+ "symbol": "MNT"
+ },
+ "KZT": {
+ "name": "เทงเจคาซัคสถาน",
+ "symbol": "KZT"
+ },
+ "ILS": {
+ "name": "นิวเชเà¸à¸¥à¸­à¸´à¸ªà¸£à¸²à¹€à¸­à¸¥",
+ "symbol": "₪"
+ },
+ "PEN": {
+ "name": "นูโวซอลเปรู",
+ "symbol": "PEN"
+ },
+ "ERN": {
+ "name": "à¹à¸™à¸à¸Ÿà¸²à¹€à¸­à¸£à¸´à¹€à¸—รีย",
+ "symbol": "ERN"
+ },
+ "NGN": {
+ "name": "ไนราไนจีเรีย",
+ "symbol": "NGN"
+ },
+ "PAB": {
+ "name": "บัลบัวปานามา",
+ "symbol": "PAB"
+ },
+ "THB": {
+ "name": "บาทไทย",
+ "symbol": "THB"
+ },
+ "ETB": {
+ "name": "เบอรร์เอธิโอเปีย",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "โบลิวาร์เวเนซุเอลา",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "โบลิเวียโนโบลิเวีย",
+ "symbol": "BOB"
+ },
+ "SYP": {
+ "name": "ปอนด์ซีเรีย",
+ "symbol": "SYP"
+ },
+ "SDG": {
+ "name": "ปอนด์ซูดาน",
+ "symbol": "SDG"
+ },
+ "SSP": {
+ "name": "ปอนด์ซูดานใต้",
+ "symbol": "SSP"
+ },
+ "SHP": {
+ "name": "ปอนด์เซนต์เฮเลนา",
+ "symbol": "SHP"
+ },
+ "GIP": {
+ "name": "ปอนด์ยิบรอลตาร์",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "ปอนด์เลบานอน",
+ "symbol": "LBP"
+ },
+ "GBP": {
+ "name": "ปอนด์สเตอร์ลิง (สหราชอาณาจัà¸à¸£)",
+ "symbol": "£"
+ },
+ "FKP": {
+ "name": "ปอนด์หมู่เà¸à¸²à¸°à¸Ÿà¸­à¸¥à¹Œà¸à¹à¸¥à¸™à¸”์",
+ "symbol": "FKP"
+ },
+ "EGP": {
+ "name": "ปอนด์อียิปต์",
+ "symbol": "EGP"
+ },
+ "MOP": {
+ "name": "ปาตาà¸à¸²à¸¡à¸²à¹€à¸à¹Šà¸²",
+ "symbol": "MOP"
+ },
+ "BWP": {
+ "name": "ปูลาบอตสวานา",
+ "symbol": "BWP"
+ },
+ "CUP": {
+ "name": "เปโซคิวบา",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "เปโซคิวบา (à¹à¸›à¸¥à¸‡à¸ªà¸ à¸²à¸ž)",
+ "symbol": "CUC"
+ },
+ "COP": {
+ "name": "เปโซโคลอมเบีย",
+ "symbol": "COP"
+ },
+ "CLP": {
+ "name": "เปโซชิลี",
+ "symbol": "CLP"
+ },
+ "DOP": {
+ "name": "เปโซโดมินิà¸à¸±à¸™",
+ "symbol": "DOP"
+ },
+ "PHP": {
+ "name": "เปโซฟิลิปปินส์",
+ "symbol": "PHP"
+ },
+ "MXN": {
+ "name": "เปโซเม็à¸à¸‹à¸´à¹‚à¸",
+ "symbol": "MX$"
+ },
+ "ARS": {
+ "name": "เปโซอาร์เจนตินา",
+ "symbol": "ARS"
+ },
+ "UYU": {
+ "name": "เปโซอุรุà¸à¸§à¸±à¸¢",
+ "symbol": "UYU"
+ },
+ "TOP": {
+ "name": "พาà¹à¸­à¸‡à¸à¸²à¸•à¸­à¸‡à¸à¸²",
+ "symbol": "TOP"
+ },
+ "GNF": {
+ "name": "ฟรังà¸à¹Œà¸à¸´à¸™à¸µ",
+ "symbol": "GNF"
+ },
+ "CDF": {
+ "name": "ฟรังà¸à¹Œà¸„องโà¸",
+ "symbol": "CDF"
+ },
+ "KMF": {
+ "name": "ฟรังà¸à¹Œà¸„อโมโรส",
+ "symbol": "KMF"
+ },
+ "DJF": {
+ "name": "ฟรังà¸à¹Œà¸ˆà¸´à¸šà¸¹à¸•à¸µ",
+ "symbol": "DJF"
+ },
+ "XPF": {
+ "name": "ฟรังà¸à¹Œà¸‹à¸µà¹€à¸­à¸Ÿà¸žà¸µ",
+ "symbol": "CFPF"
+ },
+ "XOF": {
+ "name": "ฟรังà¸à¹Œà¹€à¸‹à¸Ÿà¸²à¸˜à¸™à¸²à¸„ารà¸à¸¥à¸²à¸‡à¸£à¸±à¸à¹à¸­à¸Ÿà¸£à¸´à¸à¸²à¸•à¸°à¸§à¸±à¸™à¸•à¸",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "ฟรังà¸à¹Œà¹€à¸‹à¸Ÿà¸²à¸˜à¸™à¸²à¸„ารรัà¸à¹à¸­à¸Ÿà¸£à¸´à¸à¸²à¸à¸¥à¸²à¸‡",
+ "symbol": "FCFA"
+ },
+ "BIF": {
+ "name": "ฟรังà¸à¹Œà¸šà¸¸à¸£à¸¸à¸™à¸”ี",
+ "symbol": "BIF"
+ },
+ "RWF": {
+ "name": "ฟรังà¸à¹Œà¸£à¸§à¸±à¸™à¸”า",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "ฟรังà¸à¹Œà¸ªà¸§à¸´à¸ª",
+ "symbol": "CHF"
+ },
+ "AWG": {
+ "name": "ฟลอรินอารูบา",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "ฟอรินต์ฮังà¸à¸²à¸£à¸µ",
+ "symbol": "HUF"
+ },
+ "TMT": {
+ "name": "มานัตเติร์à¸à¹€à¸¡à¸™à¸´à¸ªà¸–าน",
+ "symbol": "TMT"
+ },
+ "AZN": {
+ "name": "มานัตอาเซอร์ไบจาน",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "มาร์à¸à¸šà¸­à¸ªà¹€à¸™à¸µà¸¢-เฮอร์เซโà¸à¸§à¸µà¸™à¸²",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "เมติคัลโมซัมบิà¸",
+ "symbol": "MZN"
+ },
+ "EUR": {
+ "name": "ยูโร",
+ "symbol": "€"
+ },
+ "JPY": {
+ "name": "เยนà¸à¸µà¹ˆà¸›à¸¸à¹ˆà¸™",
+ "symbol": "Â¥"
+ },
+ "MYR": {
+ "name": "ริงà¸à¸´à¸•à¸¡à¸²à¹€à¸¥à¹€à¸‹à¸µà¸¢",
+ "symbol": "MYR"
+ },
+ "SAR": {
+ "name": "ริยัลซาอุดีอาระเบีย",
+ "symbol": "SAR"
+ },
+ "BYR": {
+ "name": "รูเบิลเบลารุส",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "รูเบิลรัสเซีย",
+ "symbol": "RUB"
+ },
+ "SCR": {
+ "name": "รูปีเซเชลส์",
+ "symbol": "SCR"
+ },
+ "NPR": {
+ "name": "รูปีเนปาล",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "รูปีปาà¸à¸µà¸ªà¸–าน",
+ "symbol": "PKR"
+ },
+ "MUR": {
+ "name": "รูปีมอริเชียส",
+ "symbol": "MUR"
+ },
+ "LKR": {
+ "name": "รูปีศรีลังà¸à¸²",
+ "symbol": "LKR"
+ },
+ "INR": {
+ "name": "รูปีอินเดีย",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "รูเปียห์อินโดนีเซีย",
+ "symbol": "IDR"
+ },
+ "MVR": {
+ "name": "รูฟิยามัลดีฟส์",
+ "symbol": "MVR"
+ },
+ "KHR": {
+ "name": "เรียลà¸à¸±à¸¡à¸žà¸¹à¸Šà¸²",
+ "symbol": "KHR"
+ },
+ "QAR": {
+ "name": "เรียลà¸à¸²à¸•à¸²à¸£à¹Œ",
+ "symbol": "QAR"
+ },
+ "BRL": {
+ "name": "เรียลบราซิล",
+ "symbol": "R$"
+ },
+ "YER": {
+ "name": "เรียลเยเมน",
+ "symbol": "YER"
+ },
+ "IRR": {
+ "name": "เรียลอิหร่าน",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "เรียลโอมาน",
+ "symbol": "OMR"
+ },
+ "ZAR": {
+ "name": "à¹à¸£à¸™à¸”์à¹à¸­à¸Ÿà¸£à¸´à¸à¸²à¹ƒà¸•à¹‰",
+ "symbol": "ZAR"
+ },
+ "GEL": {
+ "name": "ลารีจอร์เจีย",
+ "symbol": "GEL"
+ },
+ "SZL": {
+ "name": "ลิลันเจนีสวาซิ",
+ "symbol": "SZL"
+ },
+ "MDL": {
+ "name": "ลิวมอลโดวา",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "ลิวโรมาเนีย",
+ "symbol": "RON"
+ },
+ "LTL": {
+ "name": "ลีตัสลิทัวเนีย",
+ "symbol": "LTL"
+ },
+ "TRY": {
+ "name": "ลีราตุรà¸à¸µ",
+ "symbol": "TRY"
+ },
+ "SLL": {
+ "name": "ลีโอนเซียร์ราลีโอน",
+ "symbol": "SLL"
+ },
+ "ALL": {
+ "name": "เลà¸à¹à¸­à¸¥à¹€à¸šà¹€à¸™à¸µà¸¢",
+ "symbol": "ALL"
+ },
+ "BGN": {
+ "name": "เลฟบัลà¹à¸à¹€à¸£à¸µà¸¢",
+ "symbol": "BGN"
+ },
+ "HNL": {
+ "name": "เลมปิราฮอนดูรัส",
+ "symbol": "HNL"
+ },
+ "LSL": {
+ "name": "โลตีเลโซโท",
+ "symbol": "LSL"
+ },
+ "KRW": {
+ "name": "วอนเà¸à¸²à¸«à¸¥à¸µà¹ƒà¸•à¹‰",
+ "symbol": "â‚©"
+ },
+ "KPW": {
+ "name": "วอนเà¸à¸²à¸«à¸¥à¸µà¹€à¸«à¸™à¸·à¸­",
+ "symbol": "KPW"
+ },
+ "VUV": {
+ "name": "วาตูวานูอาตู",
+ "symbol": "VUV"
+ },
+ "CNY": {
+ "name": "หยวนจีน",
+ "symbol": "CNÂ¥"
+ },
+ "AFN": {
+ "name": "อัฟà¸à¸²à¸™à¸´à¸­à¸±à¸Ÿà¸à¸²à¸™à¸´à¸ªà¸–าน",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "อาเรียรีมาลาà¸à¸²à¸‹à¸µ",
+ "symbol": "MGA"
+ },
+ "MRO": {
+ "name": "อูà¸à¸µà¸¢à¸²à¸¡à¸­à¸£à¸´à¹€à¸•à¹€à¸™à¸µà¸¢",
+ "symbol": "MRO"
+ },
+ "BTN": {
+ "name": "เอ็งà¸à¸¸à¸¥à¸•à¸£à¸±à¸¡à¸ à¸¹à¸à¸²à¸™",
+ "symbol": "BTN"
+ },
+ "CVE": {
+ "name": "เอสคูโดเคปเวิร์ด",
+ "symbol": "CVE"
+ },
+ "UAH": {
+ "name": "ฮรีฟเนียยูเครน",
+ "symbol": "UAH"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ti.json b/library/intl/resources/currency/ti.json
new file mode 100644
index 000000000..2713a98f5
--- /dev/null
+++ b/library/intl/resources/currency/ti.json
@@ -0,0 +1,634 @@
+{
+ "AED": {
+ "name": "AED",
+ "symbol": "AED"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "AOA",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AUD": {
+ "name": "AUD",
+ "symbol": "A$"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BHD": {
+ "name": "BHD",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "BIF",
+ "symbol": "BIF"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BWP": {
+ "name": "BWP",
+ "symbol": "BWP"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CAD": {
+ "name": "CAD",
+ "symbol": "CA$"
+ },
+ "CDF": {
+ "name": "CDF",
+ "symbol": "CDF"
+ },
+ "CHF": {
+ "name": "CHF",
+ "symbol": "CHF"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CVE": {
+ "name": "CVE",
+ "symbol": "CVE"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DJF": {
+ "name": "DJF",
+ "symbol": "DJF"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "DZD": {
+ "name": "DZD",
+ "symbol": "DZD"
+ },
+ "EGP": {
+ "name": "EGP",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "ERN",
+ "symbol": "ERN"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GMD": {
+ "name": "GMD",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KES": {
+ "name": "KES",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "KMF",
+ "symbol": "KMF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LRD": {
+ "name": "LRD",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "LYD",
+ "symbol": "LYD"
+ },
+ "MAD": {
+ "name": "MAD",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MGA": {
+ "name": "MGA",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MRO": {
+ "name": "MRO",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "MWK",
+ "symbol": "MWK"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SAR": {
+ "name": "SAR",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "SDG",
+ "symbol": "SDG"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SOS",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "TND",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "TZS": {
+ "name": "TZS",
+ "symbol": "TZS"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "UGX",
+ "symbol": "UGX"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZAR": {
+ "name": "ZAR",
+ "symbol": "ZAR"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "EUR": {
+ "name": "አá‹áˆ®",
+ "symbol": "€"
+ },
+ "INR": {
+ "name": "የሕንድ ሩá’",
+ "symbol": "₹"
+ },
+ "RUB": {
+ "name": "የራሻ ሩብáˆ",
+ "symbol": "RUB"
+ },
+ "BRL": {
+ "name": "የብራዚሠሪáˆ",
+ "symbol": "R$"
+ },
+ "CNY": {
+ "name": "የቻይና ዩአን ረንሚንቢ",
+ "symbol": "CNÂ¥"
+ },
+ "USD": {
+ "name": "የአሜሪካን ዶላር",
+ "symbol": "US$"
+ },
+ "ETB": {
+ "name": "የኢትዮጵያ ብር",
+ "symbol": "Br"
+ },
+ "GBP": {
+ "name": "የእንáŒáˆŠá‹ á“á‹áŠ•á‹µ ስተርሊንáŒ",
+ "symbol": "£"
+ },
+ "JPY": {
+ "name": "የጃá“ን የን",
+ "symbol": "JPÂ¥"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/to.json b/library/intl/resources/currency/to.json
new file mode 100644
index 000000000..b77641714
--- /dev/null
+++ b/library/intl/resources/currency/to.json
@@ -0,0 +1,634 @@
+{
+ "AED": {
+ "name": "AED",
+ "symbol": "AED"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "AOA",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AUD": {
+ "name": "AUD",
+ "symbol": "AUD$"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BHD": {
+ "name": "BHD",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "BIF",
+ "symbol": "BIF"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BWP": {
+ "name": "BWP",
+ "symbol": "BWP"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CAD": {
+ "name": "CAD",
+ "symbol": "CA$"
+ },
+ "CDF": {
+ "name": "CDF",
+ "symbol": "CDF"
+ },
+ "CHF": {
+ "name": "CHF",
+ "symbol": "CHF"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "CNY",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CVE": {
+ "name": "CVE",
+ "symbol": "CVE"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DJF": {
+ "name": "DJF",
+ "symbol": "DJF"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "DZD": {
+ "name": "DZD",
+ "symbol": "DZD"
+ },
+ "EGP": {
+ "name": "EGP",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "ERN",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "ETB",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "EUR",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GBP": {
+ "name": "GBP",
+ "symbol": "£"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GMD": {
+ "name": "GMD",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "INR",
+ "symbol": "₹"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "JPY": {
+ "name": "JPY",
+ "symbol": "JPÂ¥"
+ },
+ "KES": {
+ "name": "KES",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "KMF",
+ "symbol": "KMF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LRD": {
+ "name": "LRD",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "LYD",
+ "symbol": "LYD"
+ },
+ "MAD": {
+ "name": "MAD",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MGA": {
+ "name": "MGA",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MRO": {
+ "name": "MRO",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "MWK",
+ "symbol": "MWK"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZD$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "TOP": {
+ "name": "Paʻanga fakatonga",
+ "symbol": "T$"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SAR": {
+ "name": "SAR",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "SDG",
+ "symbol": "SDG"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SOS",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "WST": {
+ "name": "Tala fakahaʻamoa",
+ "symbol": "WST"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "TND",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "TZS": {
+ "name": "TZS",
+ "symbol": "TZS"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "UGX",
+ "symbol": "UGX"
+ },
+ "USD": {
+ "name": "USD",
+ "symbol": "US$"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZAR": {
+ "name": "ZAR",
+ "symbol": "ZAR"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/tr.json b/library/intl/resources/currency/tr.json
new file mode 100644
index 000000000..5e90ba0ba
--- /dev/null
+++ b/library/intl/resources/currency/tr.json
@@ -0,0 +1,634 @@
+{
+ "USD": {
+ "name": "ABD Doları",
+ "symbol": "$"
+ },
+ "AFN": {
+ "name": "Afganistan Afganisi",
+ "symbol": "AFN"
+ },
+ "AOA": {
+ "name": "Angola Kvanzası",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "Arjantin Pesosu",
+ "symbol": "ARS"
+ },
+ "ALL": {
+ "name": "Arnavutluk Leki",
+ "symbol": "ALL"
+ },
+ "AWG": {
+ "name": "Aruba Florini",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Avustralya Doları",
+ "symbol": "AU$"
+ },
+ "AZN": {
+ "name": "Azerbaycan Manatı",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bahama Doları",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "Bahreyn Dinarı",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "Bangladeş Takası",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "Barbados Doları",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Belize Doları",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermuda Doları",
+ "symbol": "BMD"
+ },
+ "BYR": {
+ "name": "Beyaz Rusya Rublesi",
+ "symbol": "BYR"
+ },
+ "BTN": {
+ "name": "Bhutan Ngultrumu",
+ "symbol": "BTN"
+ },
+ "AED": {
+ "name": "BirleÅŸik Arap Emirlikleri Dirhemi",
+ "symbol": "AED"
+ },
+ "BOB": {
+ "name": "Bolivya Bolivyanosu",
+ "symbol": "BOB"
+ },
+ "BWP": {
+ "name": "Botsvana Pulası",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "Brezilya Reali",
+ "symbol": "R$"
+ },
+ "BND": {
+ "name": "Brunei Doları",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bulgar Levası",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "Burundi Frangı",
+ "symbol": "BIF"
+ },
+ "CVE": {
+ "name": "Cape Verde Esküdosu",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "Cayman Adaları Doları",
+ "symbol": "KYD"
+ },
+ "GIP": {
+ "name": "Cebelitarık Lirası",
+ "symbol": "GIP"
+ },
+ "DZD": {
+ "name": "Cezayir Dinarı",
+ "symbol": "DZD"
+ },
+ "XOF": {
+ "name": "CFA Frangı BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Frangı BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Frangı",
+ "symbol": "CFPF"
+ },
+ "DJF": {
+ "name": "Cibuti Frangı",
+ "symbol": "DJF"
+ },
+ "CZK": {
+ "name": "Çek Cumhuriyeti Korunası",
+ "symbol": "CZK"
+ },
+ "CNY": {
+ "name": "Çin Yuanı",
+ "symbol": "CNÂ¥"
+ },
+ "DKK": {
+ "name": "Danimarka Kronu",
+ "symbol": "DKK"
+ },
+ "XCD": {
+ "name": "Doğu Karayip Doları",
+ "symbol": "EC$"
+ },
+ "DOP": {
+ "name": "Dominik Pesosu",
+ "symbol": "DOP"
+ },
+ "SVC": {
+ "name": "El Salvador Kolonu",
+ "symbol": "SVC"
+ },
+ "IDR": {
+ "name": "Endonezya Rupiahı",
+ "symbol": "IDR"
+ },
+ "ERN": {
+ "name": "Eritre Nakfası",
+ "symbol": "ERN"
+ },
+ "AMD": {
+ "name": "Ermenistan Dramı",
+ "symbol": "AMD"
+ },
+ "ETB": {
+ "name": "Etiyopya Birri",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "Falkland Adaları Lirası",
+ "symbol": "FKP"
+ },
+ "MAD": {
+ "name": "Fas Dirhemi",
+ "symbol": "MAD"
+ },
+ "FJD": {
+ "name": "Fiji Doları",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "Filipinler Pesosu",
+ "symbol": "PHP"
+ },
+ "GMD": {
+ "name": "Gambiya Dalasisi",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "Gana Sedisi",
+ "symbol": "GHS"
+ },
+ "GNF": {
+ "name": "Gine Frangı",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "Guatemala Quetzalı",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "Guyana Doları",
+ "symbol": "GYD"
+ },
+ "ZAR": {
+ "name": "Güney Afrika Randı",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "Güney Kore Wonu",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "Güney Sudan Lirası",
+ "symbol": "SSP"
+ },
+ "GEL": {
+ "name": "Gürcistan Larisi",
+ "symbol": "GEL"
+ },
+ "HTG": {
+ "name": "Haiti Gurdu",
+ "symbol": "HTG"
+ },
+ "HRK": {
+ "name": "Hırvatistan Kunası",
+ "symbol": "HRK"
+ },
+ "INR": {
+ "name": "Hindistan Rupisi",
+ "symbol": "₹"
+ },
+ "ANG": {
+ "name": "Hollanda Antilleri Guldeni",
+ "symbol": "ANG"
+ },
+ "HNL": {
+ "name": "Honduras Lempirası",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Hong Kong Doları",
+ "symbol": "HK$"
+ },
+ "IQD": {
+ "name": "Irak Dinarı",
+ "symbol": "IQD"
+ },
+ "GBP": {
+ "name": "Ä°ngiliz Sterlini",
+ "symbol": "£"
+ },
+ "IRR": {
+ "name": "Ä°ran Riyali",
+ "symbol": "IRR"
+ },
+ "SEK": {
+ "name": "İsveç Kronu",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "İsviçre Frangı",
+ "symbol": "CHF"
+ },
+ "ISK": {
+ "name": "Ä°zlanda Kronu",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "Jamaika Doları",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Japon Yeni",
+ "symbol": "Â¥"
+ },
+ "KHR": {
+ "name": "Kamboçya Rieli",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "Kanada Doları",
+ "symbol": "CA$"
+ },
+ "QAR": {
+ "name": "Katar Riyali",
+ "symbol": "QAR"
+ },
+ "KZT": {
+ "name": "Kazakistan Tengesi",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "Kenya Åžilini",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "Kırgızistan Somu",
+ "symbol": "KGS"
+ },
+ "COP": {
+ "name": "Kolombiya Pesosu",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "Komorlar Frangı",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Kongo Frangı",
+ "symbol": "CDF"
+ },
+ "BAM": {
+ "name": "Konvertibl Bosna Hersek Markı",
+ "symbol": "BAM"
+ },
+ "CUC": {
+ "name": "Konvertibl Küba Pesosu",
+ "symbol": "CUC"
+ },
+ "CRC": {
+ "name": "Kosta Rika Kolonu",
+ "symbol": "CRC"
+ },
+ "KWD": {
+ "name": "Kuveyt Dinarı",
+ "symbol": "KWD"
+ },
+ "KPW": {
+ "name": "Kuzey Kore Wonu",
+ "symbol": "KPW"
+ },
+ "CUP": {
+ "name": "Küba Pesosu",
+ "symbol": "CUP"
+ },
+ "LAK": {
+ "name": "Laos Kipi",
+ "symbol": "LAK"
+ },
+ "LSL": {
+ "name": "Lesotho Lotisi",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberya Doları",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Libya Dinarı",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "Litvanya Litası",
+ "symbol": "LTL"
+ },
+ "LBP": {
+ "name": "Lübnan Lirası",
+ "symbol": "LBP"
+ },
+ "HUF": {
+ "name": "Macar Forinti",
+ "symbol": "HUF"
+ },
+ "MGA": {
+ "name": "Madagaskar Ariarisi",
+ "symbol": "MGA"
+ },
+ "MOP": {
+ "name": "Makao Patakası",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "Makedonya Dinarı",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "Malavi Kvaçası",
+ "symbol": "MWK"
+ },
+ "MVR": {
+ "name": "Maldiv Rufiyaası",
+ "symbol": "MVR"
+ },
+ "MYR": {
+ "name": "Malezya Ringgiti",
+ "symbol": "MYR"
+ },
+ "MUR": {
+ "name": "Mauritius Rupisi",
+ "symbol": "MUR"
+ },
+ "MXN": {
+ "name": "Meksika Pesosu",
+ "symbol": "MX$"
+ },
+ "EGP": {
+ "name": "Mısır Lirası",
+ "symbol": "EGP"
+ },
+ "MNT": {
+ "name": "MoÄŸolistan Tugriki",
+ "symbol": "MNT"
+ },
+ "MDL": {
+ "name": "Moldova Leyi",
+ "symbol": "MDL"
+ },
+ "MRO": {
+ "name": "Moritanya Ouguiyası",
+ "symbol": "MRO"
+ },
+ "MZN": {
+ "name": "Mozambik Metikali",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "Myanmar Kyatı",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "Namibya Doları",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "Nepal Rupisi",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "Nijerya Nairası",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "Nikaragua Kordobası",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "Norveç Kronu",
+ "symbol": "NOK"
+ },
+ "UZS": {
+ "name": "Özbekistan Somu",
+ "symbol": "UZS"
+ },
+ "PKR": {
+ "name": "Pakistan Rupisi",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Panama Balboası",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "Papua Yeni Gine Kinası",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "Paraguay Guaranisi",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peru Nuevo Solü",
+ "symbol": "PEN"
+ },
+ "PLN": {
+ "name": "Polonya Zlotisi",
+ "symbol": "PLN"
+ },
+ "RON": {
+ "name": "Romen Leyi",
+ "symbol": "RON"
+ },
+ "RWF": {
+ "name": "Ruanda Frangı",
+ "symbol": "RWF"
+ },
+ "RUB": {
+ "name": "Rus Rublesi",
+ "symbol": "RUB"
+ },
+ "SHP": {
+ "name": "Saint Helena Lirası",
+ "symbol": "SHP"
+ },
+ "WST": {
+ "name": "Samoa Talası",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "São Tomé ve Príncipe Dobrası",
+ "symbol": "STD"
+ },
+ "SCR": {
+ "name": "SeyÅŸeller Rupisi",
+ "symbol": "SCR"
+ },
+ "RSD": {
+ "name": "Sırp Dinarı",
+ "symbol": "RSD"
+ },
+ "SLL": {
+ "name": "Sierra Leone Leonesi",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "Singapur Doları",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "Solomon Adaları Doları",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "Somali Åžilini",
+ "symbol": "SOS"
+ },
+ "LKR": {
+ "name": "Sri Lanka Rupisi",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "Sudan Lirası",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinam Doları",
+ "symbol": "SRD"
+ },
+ "SYP": {
+ "name": "Suriye Lirası",
+ "symbol": "SYP"
+ },
+ "SAR": {
+ "name": "Suudi Arabistan Riyali",
+ "symbol": "SAR"
+ },
+ "SZL": {
+ "name": "Svaziland Lilangenisi",
+ "symbol": "SZL"
+ },
+ "CLP": {
+ "name": "Åžili Pesosu",
+ "symbol": "CLP"
+ },
+ "TJS": {
+ "name": "Tacikistan Somonisi",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "Tanzanya Åžilini",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "Tayland Bahtı",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "Tonga Paʻangası",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad ve Tobago Doları",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunus Dinarı",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Türk Lirası",
+ "symbol": "₺"
+ },
+ "TMT": {
+ "name": "Türkmenistan Manatı",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "Uganda Åžilini",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrayna Grivnası",
+ "symbol": "UAH"
+ },
+ "OMR": {
+ "name": "Umman Riyali",
+ "symbol": "OMR"
+ },
+ "UYU": {
+ "name": "Uruguay Pesosu",
+ "symbol": "UYU"
+ },
+ "JOD": {
+ "name": "Ürdün Dinarı",
+ "symbol": "JOD"
+ },
+ "VUV": {
+ "name": "Vanuatu Vatusu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "Venezuela Bolivarı",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "Vietnam Dongu",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "Yemen Riyali",
+ "symbol": "YER"
+ },
+ "ILS": {
+ "name": "Yeni Ä°srail Åžekeli",
+ "symbol": "₪"
+ },
+ "TWD": {
+ "name": "Yeni Tayvan Doları",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "Yeni Zelanda Doları",
+ "symbol": "NZ$"
+ },
+ "ZMW": {
+ "name": "Zambiya Kvaçası",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Zimbabve Doları (2009)",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/twq.json b/library/intl/resources/currency/twq.json
new file mode 100644
index 000000000..c75824e61
--- /dev/null
+++ b/library/intl/resources/currency/twq.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "Alžeeri Dinar",
+ "symbol": "DZD"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "USD": {
+ "name": "Ameriki Dollar",
+ "symbol": "US$"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "Angoola Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BHD": {
+ "name": "Bahareen Dinar",
+ "symbol": "BHD"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BWP": {
+ "name": "Botswaana Pund",
+ "symbol": "BWP"
+ },
+ "GBP": {
+ "name": "Britin Pund",
+ "symbol": "£"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BIF": {
+ "name": "Burundi Fraŋ",
+ "symbol": "BIF"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "XOF": {
+ "name": "CFA Fraŋ (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Fraŋ (BEAC)",
+ "symbol": "FCFA"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "ETB": {
+ "name": "Ecioopi Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Eero",
+ "symbol": "€"
+ },
+ "ERN": {
+ "name": "Eritree Nafka",
+ "symbol": "ERN"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GMD": {
+ "name": "Gambi Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "ZAR": {
+ "name": "Hawasa Afriki Rand",
+ "symbol": "ZAR"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "Indu Rupii",
+ "symbol": "₹"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JPY": {
+ "name": "Jaapoŋ Yen",
+ "symbol": "JPÂ¥"
+ },
+ "DJF": {
+ "name": "Jibuuti Fraŋ",
+ "symbol": "DJF"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "CAD": {
+ "name": "Kanaada Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "Kapuver Escudo",
+ "symbol": "CVE"
+ },
+ "KES": {
+ "name": "Keeniya Šiiliŋ",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "Komoor Fraŋ",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Kongo Fraŋ",
+ "symbol": "CDF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "AED": {
+ "name": "Laaraw Immaara Margantey Dirham",
+ "symbol": "AED"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leeon",
+ "symbol": "SLL"
+ },
+ "LSL": {
+ "name": "Leezoto Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "Liberia Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "Liibi Dinar",
+ "symbol": "LYD"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MAD": {
+ "name": "Maarok Dirham",
+ "symbol": "MAD"
+ },
+ "MWK": {
+ "name": "Malaawi Kwaca",
+ "symbol": "MWK"
+ },
+ "MGA": {
+ "name": "Malgaaši Fraŋ",
+ "symbol": "MGA"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "EGP": {
+ "name": "Misra Pund",
+ "symbol": "EGP"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MUR": {
+ "name": "Mooris Rupii",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "Mooritaani Ugiya",
+ "symbol": "MRO"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naajiriya Neera",
+ "symbol": "NGN"
+ },
+ "NAD": {
+ "name": "Naamibi Dollar",
+ "symbol": "NAD"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "AUD": {
+ "name": "Ostraali Dollar",
+ "symbol": "A$"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "Rwanda Fraŋ",
+ "symbol": "RWF"
+ },
+ "STD": {
+ "name": "Sao Tome nda Prinsipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "Saudiya Riyal",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "Seešel Rupii",
+ "symbol": "SCR"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SHP": {
+ "name": "Seŋ Helena Fraŋ",
+ "symbol": "SHP"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "CNY": {
+ "name": "Sinwa Yuan Renminbi",
+ "symbol": "CNÂ¥"
+ },
+ "SOS": {
+ "name": "Somaali Šiiliŋ",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SDG": {
+ "name": "Suudaŋ Dinar",
+ "symbol": "SDG"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "CHF": {
+ "name": "Swisu Fraŋ",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "TZS": {
+ "name": "Tanzaani Šiiliŋ",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunizi Dinar",
+ "symbol": "TND"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "Uganda Šiiliŋ",
+ "symbol": "UGX"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "Zambi Kwaca",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/tzm.json b/library/intl/resources/currency/tzm.json
new file mode 100644
index 000000000..88a03cc01
--- /dev/null
+++ b/library/intl/resources/currency/tzm.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "MGA": {
+ "name": "Aryari Umalɣaci",
+ "symbol": "MGA"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Birr Uyityuppi",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "UGX": {
+ "name": "Cilin Uɣandi (1966–1987)",
+ "symbol": "UGX"
+ },
+ "SOS": {
+ "name": "Cilin Uá¹£umali",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Cilin Uá¹­anzani",
+ "symbol": "TZS"
+ },
+ "KES": {
+ "name": "Cillin Ukini",
+ "symbol": "KES"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi Agambi",
+ "symbol": "GMD"
+ },
+ "MAD": {
+ "name": "Derhem Umeṛṛuki",
+ "symbol": "MAD"
+ },
+ "AED": {
+ "name": "Derhem Uymarati",
+ "symbol": "AED"
+ },
+ "BHD": {
+ "name": "Ḍinar Ubaḥrayni",
+ "symbol": "BHD"
+ },
+ "DZD": {
+ "name": "Ḍinar Udzayri",
+ "symbol": "DZD"
+ },
+ "LYD": {
+ "name": "Ḍinar Ulibi",
+ "symbol": "LYD"
+ },
+ "TND": {
+ "name": "Ḍinar Utunsi",
+ "symbol": "TND"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "STD": {
+ "name": "Dubra Usawá¹­umi",
+ "symbol": "STD"
+ },
+ "CAD": {
+ "name": "Ḍular Ukanadi",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Ḍular Ulibiri",
+ "symbol": "LRD"
+ },
+ "USD": {
+ "name": "Ḍular Umirikani",
+ "symbol": "US$"
+ },
+ "NAD": {
+ "name": "Ḍular Unamibi",
+ "symbol": "NAD"
+ },
+ "AUD": {
+ "name": "Ḍular Usṭrali",
+ "symbol": "A$"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "XOF": {
+ "name": "Frank CFA (BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Frank CFA (BEAC)",
+ "symbol": "FCFA"
+ },
+ "BIF": {
+ "name": "Frank Uburundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Frank UÄŸibuti",
+ "symbol": "DJF"
+ },
+ "CDF": {
+ "name": "Frank Ukunguli",
+ "symbol": "CDF"
+ },
+ "KMF": {
+ "name": "Frank Uqumuri",
+ "symbol": "KMF"
+ },
+ "RWF": {
+ "name": "Frank Urwandi",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Frank Uswisri",
+ "symbol": "CHF"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "CVE": {
+ "name": "Iskudu Ukabuvirdyani",
+ "symbol": "CVE"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "EGP": {
+ "name": "Junih Umiṣṛi",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Junih Usantehilini",
+ "symbol": "SHP"
+ },
+ "GBP": {
+ "name": "Junih Usterlini Ubriá¹­ani",
+ "symbol": "£"
+ },
+ "SDG": {
+ "name": "Junih Usudani",
+ "symbol": "SDG"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "KwaÄa Umalawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "KwaÄa Uzambi",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza Unguli",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SZL": {
+ "name": "Lilanjini Uswazi",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "Luti Ulusuá¹­i",
+ "symbol": "LSL"
+ },
+ "SLL": {
+ "name": "Lyun Usirralyuni",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "ERN": {
+ "name": "Nakfa Uyritri",
+ "symbol": "ERN"
+ },
+ "NGN": {
+ "name": "Nayra Unijiri",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pula Ubutswani",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Rand Ufriki Unzul",
+ "symbol": "ZAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupi Uḥindi",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupi Umurisi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupi Usicili",
+ "symbol": "SCR"
+ },
+ "SAR": {
+ "name": "Ryal Usaεudi",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Uqiyya Umuritani",
+ "symbol": "MRO"
+ },
+ "EUR": {
+ "name": "Uá¹›u",
+ "symbol": "€"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "JPY": {
+ "name": "Yann Ujappuni",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Ywan Renminbi Ucinwi",
+ "symbol": "CNÂ¥"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ug.json b/library/intl/resources/currency/ug.json
new file mode 100644
index 000000000..cace9bd23
--- /dev/null
+++ b/library/intl/resources/currency/ug.json
@@ -0,0 +1,634 @@
+{
+ "ARS": {
+ "name": "ئارگÛنتىنا Ù¾Ûسوسى",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "ئارۇبان Ùىلورۇنى",
+ "symbol": "AWG"
+ },
+ "XAF": {
+ "name": "ئاÙرىقا قىتئەسى Ù¾Û‡Ù„-مۇئامىلە ئىتتىپاقى Ùرانكى",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "ئاÙرىقا قىتئەسى Ù¾Û‡Ù„-مۇئامىلە ئىتتىپاقى Ùرانكى (BCEAO)",
+ "symbol": "CFA"
+ },
+ "AFN": {
+ "name": "ئاÙغان ئاÙغانى",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ئالبانىيە Ù„Ûكى",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "ئالجىرىيە دىنارى",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "ئامÛرىكا دوللىرى",
+ "symbol": "$"
+ },
+ "AOA": {
+ "name": "ئانگولا كۇۋانزاسى",
+ "symbol": "AOA"
+ },
+ "AUD": {
+ "name": "ئاۋسترالىيە دوللىرى",
+ "symbol": "A$"
+ },
+ "MOP": {
+ "name": "ئاۋمÛÙ† پاتاكاسى",
+ "symbol": "MOP"
+ },
+ "AMD": {
+ "name": "ئەرمÛنىيە دىرامى",
+ "symbol": "AMD"
+ },
+ "AED": {
+ "name": "ئەرەب بىرلەشمە خەلىپىلىكى دەرھەمى",
+ "symbol": "AED"
+ },
+ "AZN": {
+ "name": "ئەزەربەيجان ماناتى",
+ "symbol": "AZN"
+ },
+ "GBP": {
+ "name": "ئەنگلىيە Ùوند سىتÛرلىڭى",
+ "symbol": "£"
+ },
+ "OMR": {
+ "name": "ئومان رىيالى",
+ "symbol": "OMR"
+ },
+ "UZS": {
+ "name": "ئۆزبÛكىستان سومى",
+ "symbol": "UZS"
+ },
+ "UYU": {
+ "name": "ئۇرۇگۋاي Ù¾Ûسوسى",
+ "symbol": "UYU"
+ },
+ "UAH": {
+ "name": "ئۇكرائىنا خرىۋناسى",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "ئۇگاندا شىللىڭى",
+ "symbol": "UGX"
+ },
+ "IQD": {
+ "name": "ئىراق دىنارى",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "ئىران رىيالى",
+ "symbol": "IRR"
+ },
+ "ILS": {
+ "name": "ئىسرائىل ÙŠÛÚ­Ù‰ Ø´ÛÙƒÛلى",
+ "symbol": "₪"
+ },
+ "ISK": {
+ "name": "ئىسلاندىيە كروناسى",
+ "symbol": "ISK"
+ },
+ "JOD": {
+ "name": "ئىيوردانىيە دىنارى",
+ "symbol": "JOD"
+ },
+ "ERN": {
+ "name": "ئÛرىترÛÙŠÛ• ناكÙاسى",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "ئÛÙىيوپىيە بىررى",
+ "symbol": "ETB"
+ },
+ "BBD": {
+ "name": "باربادوس دوللىرى",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "باڭلادىش تاكاسى",
+ "symbol": "BDT"
+ },
+ "BSD": {
+ "name": "باھاما دوللىرى",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "بەھرەين دىنارى",
+ "symbol": "BHD"
+ },
+ "BWP": {
+ "name": "بوتسۋانا پۇلاسى",
+ "symbol": "BWP"
+ },
+ "BAM": {
+ "name": "بوسنىيە-Ø®ÛرتسÛگوۋىنا ئالماشتۇرۇشچان ماركى",
+ "symbol": "BAM"
+ },
+ "BOB": {
+ "name": "بولىۋىيە بولىۋىيانوسى",
+ "symbol": "BOB"
+ },
+ "BTN": {
+ "name": "بۇتان نگۇلترۇمى",
+ "symbol": "BTN"
+ },
+ "BIF": {
+ "name": "بۇرۇندى Ùرانكى",
+ "symbol": "BIF"
+ },
+ "BGN": {
+ "name": "بۇلغارىيە Ù„Ûۋاسى",
+ "symbol": "BGN"
+ },
+ "BRL": {
+ "name": "بىرازىلىيە رىيالى",
+ "symbol": "R$"
+ },
+ "BND": {
+ "name": "بىرۇنÛÙŠ دوللىرى",
+ "symbol": "BND"
+ },
+ "BMD": {
+ "name": "بÛرمۇدا دوللىرى",
+ "symbol": "BMD"
+ },
+ "BYR": {
+ "name": "بÛلارۇسىيە رۇبلىسى",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "بÛلىز دوللىرى",
+ "symbol": "BZD"
+ },
+ "PGK": {
+ "name": "پاپۇئا ÙŠÛÚ­Ù‰ گىۋىنÛÙŠÛ• كىناسى",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "پاراگۋاي گۇئارانىسى",
+ "symbol": "PYG"
+ },
+ "PKR": {
+ "name": "پاكىستان رۇپىسى",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "پاناما بالبوئاسى",
+ "symbol": "PAB"
+ },
+ "PLN": {
+ "name": "پولشا زىلوتى",
+ "symbol": "PLN"
+ },
+ "PEN": {
+ "name": "Ù¾Ûرۇ ÙŠÛÚ­Ù‰ سولى",
+ "symbol": "PEN"
+ },
+ "TJS": {
+ "name": "تاجىكىستان سومونىسى",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "تانزانىيە شىللىڭى",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "تايلاند باختى",
+ "symbol": "THB"
+ },
+ "TOP": {
+ "name": "تونگا پائانگاسى",
+ "symbol": "TOP"
+ },
+ "TND": {
+ "name": "تۇنىس دىنارى",
+ "symbol": "TND"
+ },
+ "TMT": {
+ "name": "تۈركمەنىستان ماناتى",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "تۈركىيە لىراسى",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "تىرىنىداد ۋە توباگو دوللىرى",
+ "symbol": "TTD"
+ },
+ "XPF": {
+ "name": "تىنچ ئوكيان Ù¾Û‡Ù„-مۇئامىلە ئورتاق گەۋدىسى Ùرانكى",
+ "symbol": "CFPF"
+ },
+ "GIP": {
+ "name": "جەبىلتارىق Ùوند سىتÛرلىڭى",
+ "symbol": "GIP"
+ },
+ "ZAR": {
+ "name": "جەنۇبىي ئاÙرىقا راندى",
+ "symbol": "ZAR"
+ },
+ "SSP": {
+ "name": "جەنۇبىي سۇدان ÙوندستÛرلىڭى",
+ "symbol": "SSP"
+ },
+ "KRW": {
+ "name": "جەنۇبىي كورÛÙŠÛ• ۋونى",
+ "symbol": "â‚©"
+ },
+ "CNY": {
+ "name": "جۇڭگو يۈەنى",
+ "symbol": "ï¿¥"
+ },
+ "DJF": {
+ "name": "جىبۇتى Ùرانكى",
+ "symbol": "DJF"
+ },
+ "CLP": {
+ "name": "چىلى Ù¾Ûسوسى",
+ "symbol": "CLP"
+ },
+ "CZK": {
+ "name": "Ú†ÛØ® جۇمھۇرىيىتى كورۇناسى",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "دانىيە كرونى",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "دومىنىكا Ù¾Ûسوسى",
+ "symbol": "DOP"
+ },
+ "RUB": {
+ "name": "رۇسىيە رۇبلىسى",
+ "symbol": "RUB"
+ },
+ "RON": {
+ "name": "رۇمىنىيە Ù„Ûيى",
+ "symbol": "RON"
+ },
+ "RWF": {
+ "name": "رۋاندا Ùرانكى",
+ "symbol": "RWF"
+ },
+ "ZMW": {
+ "name": "زامبىيە كۋاچاسى",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "Ø²Ù‰Ù…Ø¨Ø§Ø¨Û‹Û Ø¯ÙˆÙ„Ù„Ù‰Ø±Ù‰ (2009)",
+ "symbol": "ZWL"
+ },
+ "SVC": {
+ "name": "سالۋادور كولونى",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "ساموئا تالاسى",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "سان-ØªÙˆÙ…Û Û‹Û• پىرىنسىپى دوبراسى",
+ "symbol": "STD"
+ },
+ "SHP": {
+ "name": "ساينىت-Ú¾ÛÙ„Ûنا ÙوندستÛرلىڭى",
+ "symbol": "SHP"
+ },
+ "SAR": {
+ "name": "سەئۇدى رىيالى",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "سولومون ئاراللىرى دوللىرى",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "سومالى شىللىڭى",
+ "symbol": "SOS"
+ },
+ "SDG": {
+ "name": "سۇدان ÙوندستÛرلىڭى",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "سۇرىنام دوللىرى",
+ "symbol": "SRD"
+ },
+ "SYP": {
+ "name": "سۈرىيە ÙوندستÛرلىڭى",
+ "symbol": "SYP"
+ },
+ "LKR": {
+ "name": "سىرىلانكا رۇپىسى",
+ "symbol": "LKR"
+ },
+ "SGD": {
+ "name": "سىنگاپور دوللىرى",
+ "symbol": "SGD"
+ },
+ "SZL": {
+ "name": "سىۋÛزىلاند لىلانگÛنى",
+ "symbol": "SZL"
+ },
+ "RSD": {
+ "name": "سÛربىيە دىنارى",
+ "symbol": "RSD"
+ },
+ "SLL": {
+ "name": "سÛررالÛئون Ù„ÛئونÛسى",
+ "symbol": "SLL"
+ },
+ "SCR": {
+ "name": "سÛيشÛÙ„ رۇپىسى",
+ "symbol": "SCR"
+ },
+ "XCD": {
+ "name": "شەرقىي كارىب دوللىرى",
+ "symbol": "EC$"
+ },
+ "KPW": {
+ "name": "شىمالىي كورÛÙŠÛ• ۋونى",
+ "symbol": "KPW"
+ },
+ "CHF": {
+ "name": "شىۋÛتسىيە Ùرانكى",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "شىۋÛتسىيە كروناسى",
+ "symbol": "SEK"
+ },
+ "HKD": {
+ "name": "شياڭگاڭ دوللىرى",
+ "symbol": "HK$"
+ },
+ "FKP": {
+ "name": "Ùالكلاند ئاراللىرى Ùوند سىتÛرلىڭى",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Ùىجى دوللىرى",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "Ùىلىپپىن Ù¾Ûسوسى",
+ "symbol": "PHP"
+ },
+ "QAR": {
+ "name": "قاتار رىيالى",
+ "symbol": "QAR"
+ },
+ "KZT": {
+ "name": "قازاقىستان تەڭگىسى",
+ "symbol": "KZT"
+ },
+ "KGS": {
+ "name": "قىرغىزىستان سومى",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "كامبودژا رىئÛلى",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "كانادا دوللىرى",
+ "symbol": "CA$"
+ },
+ "KYD": {
+ "name": "كايمان ئاراللىرى دوللىرى",
+ "symbol": "KYD"
+ },
+ "CRC": {
+ "name": "كوستارىكا كولونى",
+ "symbol": "CRC"
+ },
+ "COP": {
+ "name": "كولومبىيە Ù¾Ûسوسى",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "كومورو Ùرانكى",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "كونگو Ùرانكى",
+ "symbol": "CDF"
+ },
+ "CUC": {
+ "name": "كۇبا ئالماشتۇرۇشچان Ù¾Ûسوسى",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "كۇبا Ù¾Ûسوسى",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "كۇۋەيت دىنارى",
+ "symbol": "KWD"
+ },
+ "HRK": {
+ "name": "كىرودىيە كۇناسى",
+ "symbol": "HRK"
+ },
+ "KES": {
+ "name": "ÙƒÛنىيە شىللىڭى",
+ "symbol": "KES"
+ },
+ "GMD": {
+ "name": "گامبىيە دالاسى",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "گانا سÛدىسى",
+ "symbol": "GHS"
+ },
+ "ANG": {
+ "name": "گوللاندىيەگە قاراشلىق ئانتىللÛÙ† گۇلدÛنى",
+ "symbol": "ANG"
+ },
+ "GEL": {
+ "name": "گىرۇزىيە لارىسى",
+ "symbol": "GEL"
+ },
+ "GTQ": {
+ "name": "گىۋاتÛمالا ÙƒÛ‡Û‹Ûتزالى",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "گىۋىئانا دوللىرى",
+ "symbol": "GYD"
+ },
+ "GNF": {
+ "name": "گىۋىنÛÙŠÛ• Ùرانكى",
+ "symbol": "GNF"
+ },
+ "LAK": {
+ "name": "لائوس كىپى",
+ "symbol": "LAK"
+ },
+ "LRD": {
+ "name": "لىبÛرىيە دوللىرى",
+ "symbol": "LRD"
+ },
+ "LTL": {
+ "name": "لىتۋا لىتاسى",
+ "symbol": "LTL"
+ },
+ "LBP": {
+ "name": "لىۋان Ùوند سىتÛرلىڭى",
+ "symbol": "LBP"
+ },
+ "LYD": {
+ "name": "لىۋىيە دىنارى",
+ "symbol": "LYD"
+ },
+ "LSL": {
+ "name": "Ù„Ûسوتو لوتىسى",
+ "symbol": "LSL"
+ },
+ "MGA": {
+ "name": "ماداغاسقار ئارىئارىسى",
+ "symbol": "MGA"
+ },
+ "MAD": {
+ "name": "ماراكەش دىرھەمى",
+ "symbol": "MAD"
+ },
+ "MKD": {
+ "name": "ماكÛدونىيە دىنارى",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "مالاۋى كۋاچاسى",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "مالايشىيا رىڭگىتى",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "مالدىۋى رۇÙىياسى",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "ماۋرىتانىيە ئۇگىيەسى",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "ماۋرىتىئۇس رۇپىسى",
+ "symbol": "MUR"
+ },
+ "MZN": {
+ "name": "موزامبىك Ù…Ûتىكالى",
+ "symbol": "MZN"
+ },
+ "MNT": {
+ "name": "موڭغۇلىيە تۈگرىكى",
+ "symbol": "MNT"
+ },
+ "MDL": {
+ "name": "مولدوۋا Ù„ÛÛ‹Ù‰",
+ "symbol": "MDL"
+ },
+ "EGP": {
+ "name": "مىسىر Ùوند سىتÛرلىڭى",
+ "symbol": "EGP"
+ },
+ "MMK": {
+ "name": "مىيانمار كىياتى",
+ "symbol": "MMK"
+ },
+ "MXN": {
+ "name": "Ù…Ûكسىكا Ù¾Ûسوسى",
+ "symbol": "MX$"
+ },
+ "NAD": {
+ "name": "نامىبىيە دوللىرى",
+ "symbol": "NAD"
+ },
+ "NOK": {
+ "name": "نورۋÛگىيە كرونى",
+ "symbol": "NOK"
+ },
+ "NIO": {
+ "name": "نىگÛرىيە كوردوباسى",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "نىگÛرىيە نايراسى",
+ "symbol": "NGN"
+ },
+ "NPR": {
+ "name": "Ù†Ûپال رۇپىسى",
+ "symbol": "NPR"
+ },
+ "HTG": {
+ "name": "ھايتى گۇردÛسى",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "ھوندۇراس Ù„Ûمپىراسى",
+ "symbol": "HNL"
+ },
+ "IDR": {
+ "name": "ھىندونÛزىيە رۇپىيەسى",
+ "symbol": "IDR"
+ },
+ "INR": {
+ "name": "ھىندىستان رۇپىسى",
+ "symbol": "₹"
+ },
+ "VUV": {
+ "name": "ۋانۇئاتۇ ۋاتۇسى",
+ "symbol": "VUV"
+ },
+ "VND": {
+ "name": "ۋىيÛتنام دوڭى",
+ "symbol": "â‚«"
+ },
+ "HUF": {
+ "name": "Û‹Ûنگىرىيە ÙورÛنتى",
+ "symbol": "HUF"
+ },
+ "VEF": {
+ "name": "Û‹ÛÙ†ÛزۇئÛلا بولىۋارى",
+ "symbol": "VEF"
+ },
+ "JPY": {
+ "name": "ياپونىيە ÙŠÛنى",
+ "symbol": "JPÂ¥"
+ },
+ "JMD": {
+ "name": "يامايكا دوللىرى",
+ "symbol": "JMD"
+ },
+ "EUR": {
+ "name": "ياۋرو",
+ "symbol": "€"
+ },
+ "YER": {
+ "name": "يەمەن رىيالى",
+ "symbol": "YER"
+ },
+ "CVE": {
+ "name": "ÙŠÛشىل تۇمشۇق ئÛسكۇدوسى",
+ "symbol": "CVE"
+ },
+ "TWD": {
+ "name": "ÙŠÛÚ­Ù‰ تەيۋەن دوللىرى",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "ÙŠÛÚ­Ù‰ زÛلاندىيە دوللىرى",
+ "symbol": "NZ$"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/uk.json b/library/intl/resources/currency/uk.json
new file mode 100644
index 000000000..3ce9fb1cd
--- /dev/null
+++ b/library/intl/resources/currency/uk.json
@@ -0,0 +1,634 @@
+{
+ "AUD": {
+ "name": "авÑтралійÑький долар",
+ "symbol": "AUD"
+ },
+ "AZN": {
+ "name": "азербайджанÑький манат",
+ "symbol": "AZN"
+ },
+ "ALL": {
+ "name": "албанÑький лек",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "алжирÑький динар",
+ "symbol": "DZD"
+ },
+ "GBP": {
+ "name": "англійÑький фунт Ñтерлінгів",
+ "symbol": "GBP"
+ },
+ "AOA": {
+ "name": "ангольÑька кванза",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "аргентинÑький пеÑо",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "арубÑький флорин",
+ "symbol": "AWG"
+ },
+ "AFN": {
+ "name": "афганÑький афгані",
+ "symbol": "AFN"
+ },
+ "BSD": {
+ "name": "багамÑький долар",
+ "symbol": "BSD"
+ },
+ "BDT": {
+ "name": "бангладеÑька така",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "барбадоÑький долар",
+ "symbol": "BBD"
+ },
+ "BHD": {
+ "name": "бахрейнÑький динар",
+ "symbol": "BHD"
+ },
+ "BZD": {
+ "name": "белізький долар",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "бермудÑький долар",
+ "symbol": "BMD"
+ },
+ "BYR": {
+ "name": "білоруÑький рубль",
+ "symbol": "BYR"
+ },
+ "BGN": {
+ "name": "болгарÑький лев",
+ "symbol": "BGN"
+ },
+ "BOB": {
+ "name": "болівійÑький болівіано",
+ "symbol": "BOB"
+ },
+ "BWP": {
+ "name": "ботÑванÑька пула",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "бразильÑький реал",
+ "symbol": "BRL"
+ },
+ "BND": {
+ "name": "брунейÑький долар",
+ "symbol": "BND"
+ },
+ "BIF": {
+ "name": "бурундійÑький франк",
+ "symbol": "BIF"
+ },
+ "BTN": {
+ "name": "бутанÑький нгултрум",
+ "symbol": "BTN"
+ },
+ "VND": {
+ "name": "вʼєтнамÑький донг",
+ "symbol": "VND"
+ },
+ "VUV": {
+ "name": "вануатÑький вату",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "венеÑуельÑький болівар",
+ "symbol": "VEF"
+ },
+ "AMD": {
+ "name": "вірменÑький драм",
+ "symbol": "AMD"
+ },
+ "HTG": {
+ "name": "гаїтÑнÑький гурд",
+ "symbol": "HTG"
+ },
+ "GMD": {
+ "name": "гамбійÑький далаÑÑ–",
+ "symbol": "GMD"
+ },
+ "GHS": {
+ "name": "ганÑький Ñеді",
+ "symbol": "GHS"
+ },
+ "GYD": {
+ "name": "гаÑнÑький долар",
+ "symbol": "GYD"
+ },
+ "GTQ": {
+ "name": "гватемальÑький кетÑаль",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "гвінейÑький франк",
+ "symbol": "GNF"
+ },
+ "GIP": {
+ "name": "гібралтарÑький фунт",
+ "symbol": "GIP"
+ },
+ "HNL": {
+ "name": "гондураÑька лемпіра",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "гонконгÑький долар",
+ "symbol": "HKD"
+ },
+ "GEL": {
+ "name": "грузинÑький ларі",
+ "symbol": "GEL"
+ },
+ "DKK": {
+ "name": "данÑька крона",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "джибутійÑький франк",
+ "symbol": "DJF"
+ },
+ "AED": {
+ "name": "дирхам ОÐЕ",
+ "symbol": "AED"
+ },
+ "STD": {
+ "name": "добра Сан-Томе Ñ– ПринÑіпі",
+ "symbol": "STD"
+ },
+ "KYD": {
+ "name": "долар Кайманових оÑтровів",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "долар Соломонових ОÑтровів",
+ "symbol": "SBD"
+ },
+ "USD": {
+ "name": "долар СШÐ",
+ "symbol": "USD"
+ },
+ "TTD": {
+ "name": "долар Тринідаду і Тобаго",
+ "symbol": "TTD"
+ },
+ "DOP": {
+ "name": "домініканÑький пеÑо",
+ "symbol": "DOP"
+ },
+ "ERN": {
+ "name": "еритрейÑька накфа",
+ "symbol": "ERN"
+ },
+ "CVE": {
+ "name": "еÑкудо Кабо-Верде",
+ "symbol": "CVE"
+ },
+ "ETB": {
+ "name": "ефіопÑький бир",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "євро",
+ "symbol": "EUR"
+ },
+ "EGP": {
+ "name": "єгипетÑький фунт",
+ "symbol": "EGP"
+ },
+ "YER": {
+ "name": "єменÑький ріал",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "замбійÑька квача",
+ "symbol": "ZMW"
+ },
+ "XOF": {
+ "name": "західноафриканÑький франк BCEAO",
+ "symbol": "CFA"
+ },
+ "ZWL": {
+ "name": "зімбабвійÑький долар (2009)",
+ "symbol": "ZWL"
+ },
+ "ILS": {
+ "name": "ізраїльÑький новий шекель",
+ "symbol": "ILS"
+ },
+ "INR": {
+ "name": "індійÑька рупіÑ",
+ "symbol": "INR"
+ },
+ "IDR": {
+ "name": "індонезійÑька рупіÑ",
+ "symbol": "IDR"
+ },
+ "IQD": {
+ "name": "іракÑький динар",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "іранÑький ріал",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "Ñ–ÑландÑька крона",
+ "symbol": "ISK"
+ },
+ "JOD": {
+ "name": "йорданÑький динар",
+ "symbol": "JOD"
+ },
+ "MMK": {
+ "name": "кʼÑÑ‚ МʼÑнми",
+ "symbol": "MMK"
+ },
+ "KZT": {
+ "name": "казахÑтанÑький тенге",
+ "symbol": "KZT"
+ },
+ "KHR": {
+ "name": "камбоджійÑький рієль",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "канадÑький долар",
+ "symbol": "CAD"
+ },
+ "QAR": {
+ "name": "катарÑький ріал",
+ "symbol": "QAR"
+ },
+ "KES": {
+ "name": "кенійÑький шилінг",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "киргизький Ñом",
+ "symbol": "KGS"
+ },
+ "CNY": {
+ "name": "китайÑький юань",
+ "symbol": "CNY"
+ },
+ "PGK": {
+ "name": "кіна Папуа Ðової Гвінеї",
+ "symbol": "PGK"
+ },
+ "COP": {
+ "name": "колумбійÑький пеÑо",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "коморÑький франк",
+ "symbol": "KMF"
+ },
+ "BAM": {
+ "name": "конвертована марка БоÑнії Ñ– Герцеговини",
+ "symbol": "BAM"
+ },
+ "CDF": {
+ "name": "конголезький франк",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "коÑтариканÑький колон",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "кубинÑький конвертований пеÑо",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "кубинÑький пеÑо",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "кувейтÑький динар",
+ "symbol": "KWD"
+ },
+ "LAK": {
+ "name": "лаоÑький кіп",
+ "symbol": "LAK"
+ },
+ "SLL": {
+ "name": "леоне Сьєрра-Леоне",
+ "symbol": "SLL"
+ },
+ "LSL": {
+ "name": "леÑотÑький лоті",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "литовÑький літ",
+ "symbol": "LTL"
+ },
+ "LRD": {
+ "name": "ліберійÑький долар",
+ "symbol": "LRD"
+ },
+ "LBP": {
+ "name": "ліванÑький фунт",
+ "symbol": "LBP"
+ },
+ "LYD": {
+ "name": "лівійÑький динар",
+ "symbol": "LYD"
+ },
+ "MUR": {
+ "name": "маврикійÑька рупіÑ",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "мавританÑька угіÑ",
+ "symbol": "MRO"
+ },
+ "MKD": {
+ "name": "македонÑький денар",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "малавійÑька квача",
+ "symbol": "MWK"
+ },
+ "MGA": {
+ "name": "малагаÑійÑький аріарі",
+ "symbol": "MGA"
+ },
+ "MYR": {
+ "name": "малайзійÑький рингіт",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "мальдівÑька руфіÑ",
+ "symbol": "MVR"
+ },
+ "MAD": {
+ "name": "марокканÑький дирхам",
+ "symbol": "MAD"
+ },
+ "MXN": {
+ "name": "мекÑиканÑький пеÑо",
+ "symbol": "MXN"
+ },
+ "MZN": {
+ "name": "мозамбіцький метикал",
+ "symbol": "MZN"
+ },
+ "MDL": {
+ "name": "молдовÑький лей",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "монгольÑький тугрик",
+ "symbol": "MNT"
+ },
+ "NAD": {
+ "name": "намібійÑький долар",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "непальÑька рупіÑ",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "нігерійÑька найра",
+ "symbol": "NGN"
+ },
+ "ANG": {
+ "name": "нідерландÑький антильÑький гульден",
+ "symbol": "ANG"
+ },
+ "NIO": {
+ "name": "нікарагуанÑька кордоба оро",
+ "symbol": "NIO"
+ },
+ "TWD": {
+ "name": "новий тайванÑький долар",
+ "symbol": "TWD"
+ },
+ "NZD": {
+ "name": "новозеландÑький долар",
+ "symbol": "NZD"
+ },
+ "NOK": {
+ "name": "норвезька крона",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "оманÑький ріал",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "пакиÑтанÑька рупіÑ",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "панамÑька бальбоа",
+ "symbol": "PAB"
+ },
+ "PYG": {
+ "name": "парагвайÑький гуарані",
+ "symbol": "PYG"
+ },
+ "MOP": {
+ "name": "патака Макао",
+ "symbol": "MOP"
+ },
+ "PEN": {
+ "name": "перуанÑький новий Ñол",
+ "symbol": "PEN"
+ },
+ "ZAR": {
+ "name": "південноафриканÑький ранд",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "південнокорейÑький вон",
+ "symbol": "KRW"
+ },
+ "SSP": {
+ "name": "південноÑуданÑький фунт",
+ "symbol": "SSP"
+ },
+ "KPW": {
+ "name": "північнокорейÑький вон",
+ "symbol": "KPW"
+ },
+ "PLN": {
+ "name": "польÑький злотий",
+ "symbol": "PLN"
+ },
+ "RUB": {
+ "name": "роÑійÑький рубль",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "руандійÑький франк",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "румунÑький лей",
+ "symbol": "RON"
+ },
+ "SVC": {
+ "name": "ÑальвадорÑький колон",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "ÑамоанÑька тала",
+ "symbol": "WST"
+ },
+ "SAR": {
+ "name": "ÑаудівÑький ріал",
+ "symbol": "SAR"
+ },
+ "SZL": {
+ "name": "ÑвазілендÑький лілангені",
+ "symbol": "SZL"
+ },
+ "SCR": {
+ "name": "ÑейшельÑька рупіÑ",
+ "symbol": "SCR"
+ },
+ "RSD": {
+ "name": "ÑербÑький динар",
+ "symbol": "RSD"
+ },
+ "SYP": {
+ "name": "ÑирійÑький фунт",
+ "symbol": "SYP"
+ },
+ "SGD": {
+ "name": "ÑінгапурÑький долар",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "ÑомалійÑький шилінг",
+ "symbol": "SOS"
+ },
+ "SDG": {
+ "name": "ÑуданÑький фунт",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "ÑуринамÑький долар",
+ "symbol": "SRD"
+ },
+ "XCD": {
+ "name": "ÑхіднокарибÑький долар",
+ "symbol": "XCD"
+ },
+ "TJS": {
+ "name": "таджицький Ñомоні",
+ "symbol": "TJS"
+ },
+ "THB": {
+ "name": "таїландÑький бат",
+ "symbol": "THB"
+ },
+ "TZS": {
+ "name": "танзанійÑький шилінг",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "тонганÑька паанга",
+ "symbol": "TOP"
+ },
+ "TND": {
+ "name": "туніÑький динар",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "турецька ліра",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "туркменÑький манат",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "угандійÑький шилінг",
+ "symbol": "UGX"
+ },
+ "HUF": {
+ "name": "угорÑький форинт",
+ "symbol": "HUF"
+ },
+ "UZS": {
+ "name": "узбецький Ñум",
+ "symbol": "UZS"
+ },
+ "UAH": {
+ "name": "українÑька гривнÑ",
+ "symbol": "â‚´"
+ },
+ "UYU": {
+ "name": "уругвайÑький пеÑо",
+ "symbol": "UYU"
+ },
+ "FJD": {
+ "name": "фіджійÑький долар",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "філіппінÑький пеÑо",
+ "symbol": "PHP"
+ },
+ "XPF": {
+ "name": "французький тихоокеанÑький франк",
+ "symbol": "CFPF"
+ },
+ "SHP": {
+ "name": "фунт оÑтрова СвÑтої Єлени",
+ "symbol": "SHP"
+ },
+ "FKP": {
+ "name": "фунт ФолклендÑьких оÑтровів",
+ "symbol": "FKP"
+ },
+ "HRK": {
+ "name": "хорватÑька куна",
+ "symbol": "HRK"
+ },
+ "XAF": {
+ "name": "центральноафриканÑький франк",
+ "symbol": "FCFA"
+ },
+ "CZK": {
+ "name": "чеÑька крона",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "чилійÑький пеÑо",
+ "symbol": "CLP"
+ },
+ "SEK": {
+ "name": "шведÑька крона",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "швейцарÑький франк",
+ "symbol": "CHF"
+ },
+ "LKR": {
+ "name": "шрі-ланкійÑька рупіÑ",
+ "symbol": "LKR"
+ },
+ "JMD": {
+ "name": "ÑмайÑький долар",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "ÑпонÑька єна",
+ "symbol": "Â¥"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ur-IN.json b/library/intl/resources/currency/ur-IN.json
new file mode 100644
index 000000000..cdc23da80
--- /dev/null
+++ b/library/intl/resources/currency/ur-IN.json
@@ -0,0 +1,634 @@
+{
+ "XOF": {
+ "name": "CFA Ùرانک BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Ùرانک BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Ùرانک",
+ "symbol": "CFPF"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "ARS": {
+ "name": "ارجنٹائن پیسÛ",
+ "symbol": "ARS"
+ },
+ "JOD": {
+ "name": "اردنی دینار",
+ "symbol": "JOD"
+ },
+ "AWG": {
+ "name": "اروبن ÙلورÙÙ†",
+ "symbol": "AWG"
+ },
+ "ERN": {
+ "name": "اریٹیریائی ناکÙا",
+ "symbol": "ERN"
+ },
+ "UZS": {
+ "name": "ازبکستان سوم",
+ "symbol": "UZS"
+ },
+ "ILS": {
+ "name": "اسرائیلی نیا شیکل",
+ "symbol": "₪"
+ },
+ "AFN": {
+ "name": "اÙغان اÙغانی",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "البانیا کا لیک",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "الجیریائی دینار",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "امریکی ڈالر",
+ "symbol": "$"
+ },
+ "IDR": {
+ "name": "انڈونیشین روپیÛ",
+ "symbol": "IDR"
+ },
+ "AOA": {
+ "name": "انگولا کا کوانزا",
+ "symbol": "AOA"
+ },
+ "ETB": {
+ "name": "ایتھوپیائی بÙرّ",
+ "symbol": "ETB"
+ },
+ "IRR": {
+ "name": "ایرانی ریال",
+ "symbol": "IRR"
+ },
+ "AZN": {
+ "name": "آذربائجانی منات",
+ "symbol": "AZN"
+ },
+ "AMD": {
+ "name": "آرمینیائی ڈرم",
+ "symbol": "AMD"
+ },
+ "AUD": {
+ "name": "آسٹریلین ڈالر",
+ "symbol": "A$"
+ },
+ "ISK": {
+ "name": "آئس لينڈی کرونا",
+ "symbol": "ISK"
+ },
+ "BBD": {
+ "name": "باربیڈین ڈالر",
+ "symbol": "BBD"
+ },
+ "BHD": {
+ "name": "بحرینی دینار",
+ "symbol": "BHD"
+ },
+ "BRL": {
+ "name": "برازیلی ریئل",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "برطانوی پاونڈ سٹرلنگ",
+ "symbol": "£"
+ },
+ "BMD": {
+ "name": "برموڈا ڈالر",
+ "symbol": "BMD"
+ },
+ "BIF": {
+ "name": "برونڈیئن Ùرانک",
+ "symbol": "BIF"
+ },
+ "BND": {
+ "name": "برونئی ڈالر",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "بلغارین لیو",
+ "symbol": "BGN"
+ },
+ "BDT": {
+ "name": "Ø¨Ù†Ú¯Ù„Û Ø¯ÛŒØ´ÛŒ ٹکا",
+ "symbol": "BDT"
+ },
+ "BWP": {
+ "name": "بوتسوانا کا پولا",
+ "symbol": "BWP"
+ },
+ "BAM": {
+ "name": "بوسنیا Ûرزیگووینا کا قابل منتقلی نشان",
+ "symbol": "BAM"
+ },
+ "BOB": {
+ "name": "بولیوین بولیویانو",
+ "symbol": "BOB"
+ },
+ "BSD": {
+ "name": "بÛامانی ڈالر",
+ "symbol": "BSD"
+ },
+ "BYR": {
+ "name": "بیلاروسی روبل",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "بیلائز ڈالر",
+ "symbol": "BZD"
+ },
+ "INR": {
+ "name": "بھارتی روپیÛ",
+ "symbol": "₹"
+ },
+ "BTN": {
+ "name": "بھوٹانی Ú¯Ùلٹرم",
+ "symbol": "BTN"
+ },
+ "PGK": {
+ "name": "پاپوآ نیو گنی کا کینا",
+ "symbol": "PGK"
+ },
+ "PKR": {
+ "name": "پاکستانی روپیÛ",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "Ù¾Ù†Ø§Ù…Û Ú©Ø§ بالبوآ",
+ "symbol": "PAB"
+ },
+ "PLN": {
+ "name": "پولش زلوٹی",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "پیراگوئے کا گوآرنی",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "پیروین نیووسول",
+ "symbol": "PEN"
+ },
+ "TJS": {
+ "name": "تاجکستانی سومونی",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "ترکمانستانی منات",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "ترکی لیرا",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "ترینیداد اور ٹوباگو کا ڈالر",
+ "symbol": "TTD"
+ },
+ "TZS": {
+ "name": "تنزانیائی شلنگ",
+ "symbol": "TZS"
+ },
+ "TND": {
+ "name": "تیونیسیائی دینار",
+ "symbol": "TND"
+ },
+ "THB": {
+ "name": "تھائی باÛت",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "ٹونگن پانگا",
+ "symbol": "TOP"
+ },
+ "JPY": {
+ "name": "جاپانی ین",
+ "symbol": "JPÂ¥"
+ },
+ "GEL": {
+ "name": "جارجیائی لاری",
+ "symbol": "GEL"
+ },
+ "GIP": {
+ "name": "جبل الطارق پونڈ",
+ "symbol": "GIP"
+ },
+ "DJF": {
+ "name": "جبوتی Ùرانک",
+ "symbol": "DJF"
+ },
+ "JMD": {
+ "name": "جمائیکن ڈالر",
+ "symbol": "JMD"
+ },
+ "CZK": {
+ "name": "جمÛÙˆØ±ÛŒÛ Ú†ÛŒÚ© کرونا",
+ "symbol": "CZK"
+ },
+ "ZAR": {
+ "name": "جنوبی اÙریقی رانڈ",
+ "symbol": "ZAR"
+ },
+ "SSP": {
+ "name": "جنوبی سوڈانی پاؤنڈ",
+ "symbol": "SSP"
+ },
+ "KRW": {
+ "name": "جنوبی کوریائی وون",
+ "symbol": "â‚©"
+ },
+ "CLP": {
+ "name": "چلّین پیسÛ",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "چینی یوآن",
+ "symbol": "CNÂ¥"
+ },
+ "DKK": {
+ "name": "ڈنمارک کرون",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "ڈومنیکن پیسو",
+ "symbol": "DOP"
+ },
+ "RWF": {
+ "name": "روانڈا کا Ùرانک",
+ "symbol": "RWF"
+ },
+ "RUB": {
+ "name": "روسی روبل",
+ "symbol": "RUB"
+ },
+ "RON": {
+ "name": "رومانیائی لیو",
+ "symbol": "RON"
+ },
+ "ZMW": {
+ "name": "زامبیائی کواچا",
+ "symbol": "ZMW"
+ },
+ "WST": {
+ "name": "ساموآئی ٹالا",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "ساؤ ٹوم اور پرنسپے ڈوبرا",
+ "symbol": "STD"
+ },
+ "RSD": {
+ "name": "سربین دینار",
+ "symbol": "RSD"
+ },
+ "LKR": {
+ "name": "سری لنکائی روپیÛ",
+ "symbol": "LKR"
+ },
+ "SCR": {
+ "name": "سشلی کا روپیÛ",
+ "symbol": "SCR"
+ },
+ "SAR": {
+ "name": "سعودی ریال",
+ "symbol": "SAR"
+ },
+ "SGD": {
+ "name": "سنگا پور ڈالر",
+ "symbol": "SGD"
+ },
+ "SZL": {
+ "name": "سوازی لیلانجینی",
+ "symbol": "SZL"
+ },
+ "SDG": {
+ "name": "سوڈانی پاؤنڈ",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "سورینامی ڈالر",
+ "symbol": "SRD"
+ },
+ "SBD": {
+ "name": "سولومن آئلینڈز ڈالر",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "سویڈن کرونا",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "سوئس Ùرانکس",
+ "symbol": "CHF"
+ },
+ "SHP": {
+ "name": "سینٹ Ûیلینا پاؤنڈ",
+ "symbol": "SHP"
+ },
+ "SLL": {
+ "name": "سیئرا لیون لیون",
+ "symbol": "SLL"
+ },
+ "SYP": {
+ "name": "شامی پونڈ",
+ "symbol": "SYP"
+ },
+ "KPW": {
+ "name": "شمالی کوریائی وون",
+ "symbol": "KPW"
+ },
+ "SOS": {
+ "name": "صومالی شلنگ",
+ "symbol": "SOS"
+ },
+ "IQD": {
+ "name": "عراقی دینار",
+ "symbol": "IQD"
+ },
+ "OMR": {
+ "name": "عمانی ریال",
+ "symbol": "OMR"
+ },
+ "FKP": {
+ "name": "Ùاکلینڈ آئلینڈز پونڈ",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Ùجی کا ڈالر",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "Ùلپائینی پیسÛ",
+ "symbol": "PHP"
+ },
+ "CUC": {
+ "name": "قابل منتقلی کیوبائی پیسو",
+ "symbol": "CUC"
+ },
+ "KZT": {
+ "name": "قزاخستانی ٹینگ",
+ "symbol": "KZT"
+ },
+ "QAR": {
+ "name": "قطری ریال",
+ "symbol": "QAR"
+ },
+ "CDF": {
+ "name": "کانگولیز Ùرانک",
+ "symbol": "CDF"
+ },
+ "KGS": {
+ "name": "کرغستانی سوم",
+ "symbol": "KGS"
+ },
+ "HRK": {
+ "name": "کروشین کونا",
+ "symbol": "HRK"
+ },
+ "KHR": {
+ "name": "کمبوڈیائی ریئل",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "کنیڈین ڈالر",
+ "symbol": "CA$"
+ },
+ "CRC": {
+ "name": "کوسٹا ریکا کولون",
+ "symbol": "CRC"
+ },
+ "COP": {
+ "name": "کولمبین پیسÛ",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "کوموریئن Ùرانک",
+ "symbol": "KMF"
+ },
+ "KWD": {
+ "name": "کویتی دینار",
+ "symbol": "KWD"
+ },
+ "CVE": {
+ "name": "کیپ ورڈی اسکیوڈو",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "کیمین آئلینڈز ڈالر",
+ "symbol": "KYD"
+ },
+ "KES": {
+ "name": "کینیائی شلنگ",
+ "symbol": "KES"
+ },
+ "CUP": {
+ "name": "کیوبائی پیسو",
+ "symbol": "CUP"
+ },
+ "GMD": {
+ "name": "گامبیا کا ڈلاسی",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "Ú¯Ù†ÛŒ Ùرانک",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "گواٹے مالا کا کوئٹزل",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "گویانیز ڈالر",
+ "symbol": "GYD"
+ },
+ "GHS": {
+ "name": "گھانی سیڈی",
+ "symbol": "GHS"
+ },
+ "LAK": {
+ "name": "لاؤشیائی Ú©ÙÙ¾",
+ "symbol": "LAK"
+ },
+ "LRD": {
+ "name": "لائبریائی ڈالر",
+ "symbol": "LRD"
+ },
+ "LBP": {
+ "name": "لبنانی پونڈ",
+ "symbol": "LBP"
+ },
+ "LYD": {
+ "name": "لیبیائی دینار",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "لیتھوینیائی لیٹاس",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "لیسوتھو لوٹی",
+ "symbol": "LSL"
+ },
+ "MUR": {
+ "name": "ماریشس کا روپیÛ",
+ "symbol": "MUR"
+ },
+ "MDL": {
+ "name": "مالدووی لیو",
+ "symbol": "MDL"
+ },
+ "MVR": {
+ "name": "مالدیپ کا روÙÛŒÛ",
+ "symbol": "MVR"
+ },
+ "AED": {
+ "name": "Ù…ØªØ­Ø¯Û Ø¹Ø±Ø¨ اماراتی درÛÙ…",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "مراکشی درÛÙ…",
+ "symbol": "MAD"
+ },
+ "XCD": {
+ "name": "مشرقی کریبیا کا ڈالر",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "مصری پاؤنڈ",
+ "symbol": "EGP"
+ },
+ "MKD": {
+ "name": "مقدونیائی دینار",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "ملاگاسی اریاری",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "ملاوی کواچا",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "ملیشیائی رنگÙÙ¹",
+ "symbol": "MYR"
+ },
+ "MNT": {
+ "name": "منگولیائی ٹگرÙ",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "موریطانیائی اوگوئیا",
+ "symbol": "MRO"
+ },
+ "MZN": {
+ "name": "موزامبیقی میٹیکل",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "میانما کیاٹ",
+ "symbol": "MMK"
+ },
+ "MOP": {
+ "name": "میکانیز پٹاکا",
+ "symbol": "MOP"
+ },
+ "MXN": {
+ "name": "میکسیکی پیسÛ",
+ "symbol": "MX$"
+ },
+ "NOK": {
+ "name": "ناروے کرون",
+ "symbol": "NOK"
+ },
+ "NAD": {
+ "name": "نامیبیائی ڈالر",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "نائیجیریائی نائرا",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "نکارا گوا کا کورڈوبا",
+ "symbol": "NIO"
+ },
+ "NPR": {
+ "name": "نیپالی روپیÛ",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "نیدر لینڈز انٹیلیئن گلڈر",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "نیو تائیوان ڈالر",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "نیوزی لینڈ ڈالر",
+ "symbol": "NZ$"
+ },
+ "VND": {
+ "name": "ویتنامی ڈانگ",
+ "symbol": "â‚«"
+ },
+ "VEF": {
+ "name": "وینزویلا بولیور",
+ "symbol": "VEF"
+ },
+ "VUV": {
+ "name": "وینوواتو واتو",
+ "symbol": "VUV"
+ },
+ "HUF": {
+ "name": "Ûنگرین Ùورنٹ",
+ "symbol": "HUF"
+ },
+ "HNL": {
+ "name": "Ûونڈوران لیمپیرا",
+ "symbol": "HNL"
+ },
+ "HTG": {
+ "name": "Ûیتی کا گؤرڈی",
+ "symbol": "HTG"
+ },
+ "HKD": {
+ "name": "ھانگ کانگ ڈالر",
+ "symbol": "HK$"
+ },
+ "YER": {
+ "name": "یمنی ریال",
+ "symbol": "YER"
+ },
+ "EUR": {
+ "name": "یورو",
+ "symbol": "€"
+ },
+ "UYU": {
+ "name": "یوروگویان پیسو",
+ "symbol": "UYU"
+ },
+ "UAH": {
+ "name": "یوکرینیائی Ûریونیا",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "یوگانڈا شلنگ",
+ "symbol": "UGX"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/ur.json b/library/intl/resources/currency/ur.json
new file mode 100644
index 000000000..7bc0b1a40
--- /dev/null
+++ b/library/intl/resources/currency/ur.json
@@ -0,0 +1,634 @@
+{
+ "XOF": {
+ "name": "CFA Ùرانک BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "CFA Ùرانک BEAC",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "CFP Ùرانک",
+ "symbol": "CFPF"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "ARS": {
+ "name": "ارجنٹائن پیسÛ",
+ "symbol": "ARS"
+ },
+ "JOD": {
+ "name": "اردنی دینار",
+ "symbol": "JOD"
+ },
+ "AWG": {
+ "name": "اروبن ÙلورÙÙ†",
+ "symbol": "AWG"
+ },
+ "ERN": {
+ "name": "اریٹیریا کا ناÙکا",
+ "symbol": "ERN"
+ },
+ "UZS": {
+ "name": "ازبکستان سوم",
+ "symbol": "UZS"
+ },
+ "ILS": {
+ "name": "اسرائیلی نیا شیکل",
+ "symbol": "₪"
+ },
+ "AFN": {
+ "name": "اÙغان اÙغانی",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "البانیا کا لیک",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "الجیریائی دینار",
+ "symbol": "DZD"
+ },
+ "USD": {
+ "name": "امریکی ڈالر",
+ "symbol": "$"
+ },
+ "IDR": {
+ "name": "انڈونیشین روپیÛ",
+ "symbol": "IDR"
+ },
+ "GBP": {
+ "name": "انگلستانی پاونڈ سٹرلنگ",
+ "symbol": "£"
+ },
+ "AOA": {
+ "name": "انگولا کا کوانزا",
+ "symbol": "AOA"
+ },
+ "ETB": {
+ "name": "ایتھوپیائی بÙرّ",
+ "symbol": "ETB"
+ },
+ "IRR": {
+ "name": "ایرانی ریال",
+ "symbol": "IRR"
+ },
+ "AZN": {
+ "name": "آذربائجانی منات",
+ "symbol": "AZN"
+ },
+ "AMD": {
+ "name": "آرمینیائی ڈرم",
+ "symbol": "AMD"
+ },
+ "AUD": {
+ "name": "آسٹریلین ڈالر",
+ "symbol": "A$"
+ },
+ "ISK": {
+ "name": "آئس لينڈی کرونا",
+ "symbol": "ISK"
+ },
+ "BBD": {
+ "name": "باربیڈین ڈالر",
+ "symbol": "BBD"
+ },
+ "BHD": {
+ "name": "بحرینی دینار",
+ "symbol": "BHD"
+ },
+ "BRL": {
+ "name": "برازیلی ریئل",
+ "symbol": "R$"
+ },
+ "BMD": {
+ "name": "برموڈا ڈالر",
+ "symbol": "BMD"
+ },
+ "BIF": {
+ "name": "برونڈیئن Ùرانک",
+ "symbol": "BIF"
+ },
+ "BND": {
+ "name": "برونئی ڈالر",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "بلغارین لیو",
+ "symbol": "BGN"
+ },
+ "BDT": {
+ "name": "Ø¨Ù†Ú¯Ù„Û Ø¯ÛŒØ´ÛŒ ٹکا",
+ "symbol": "BDT"
+ },
+ "BWP": {
+ "name": "بوتسوانا کا پولا",
+ "symbol": "BWP"
+ },
+ "BAM": {
+ "name": "بوسنیا Ûرزیگووینا کا قابل منتقلی نشان",
+ "symbol": "BAM"
+ },
+ "BOB": {
+ "name": "بولیوین بولیویانو",
+ "symbol": "BOB"
+ },
+ "BSD": {
+ "name": "بÛامانی ڈالر",
+ "symbol": "BSD"
+ },
+ "BYR": {
+ "name": "بیلاروسی روبل",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "بیلائز ڈالر",
+ "symbol": "BZD"
+ },
+ "INR": {
+ "name": "بھارتی روپیÛ",
+ "symbol": "₹"
+ },
+ "BTN": {
+ "name": "بھوٹانی Ú¯Ùلٹرم",
+ "symbol": "BTN"
+ },
+ "PGK": {
+ "name": "پاپوآ نیو گنی کا کینا",
+ "symbol": "PGK"
+ },
+ "PKR": {
+ "name": "پاکستانی روپیÛ",
+ "symbol": "Rs"
+ },
+ "PAB": {
+ "name": "Ù¾Ù†Ø§Ù…Û Ú©Ø§ بالبوآ",
+ "symbol": "PAB"
+ },
+ "PLN": {
+ "name": "پولش زلوٹی",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "پیراگوئے کا گوآرنی",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "پیروین نیووسول",
+ "symbol": "PEN"
+ },
+ "TJS": {
+ "name": "تاجکستانی سومونی",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "ترکمانستانی منات",
+ "symbol": "TMT"
+ },
+ "TRY": {
+ "name": "ترکی لیرا",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "ترینیداد اور ٹوباگو کا ڈالر",
+ "symbol": "TTD"
+ },
+ "TZS": {
+ "name": "تنزانیائی شلنگ",
+ "symbol": "TZS"
+ },
+ "TND": {
+ "name": "تیونیسیائی دینار",
+ "symbol": "TND"
+ },
+ "THB": {
+ "name": "تھائی باÛت",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "ٹونگن پانگا",
+ "symbol": "TOP"
+ },
+ "JPY": {
+ "name": "جاپانی ین",
+ "symbol": "JPÂ¥"
+ },
+ "GEL": {
+ "name": "جارجیائی لاری",
+ "symbol": "GEL"
+ },
+ "GIP": {
+ "name": "جبل الطارق پونڈ",
+ "symbol": "GIP"
+ },
+ "DJF": {
+ "name": "جبوتی Ùرانک",
+ "symbol": "DJF"
+ },
+ "JMD": {
+ "name": "جمائیکن ڈالر",
+ "symbol": "JMD"
+ },
+ "CZK": {
+ "name": "جمÛÙˆØ±ÛŒÛ Ú†ÛŒÚ© کرونا",
+ "symbol": "CZK"
+ },
+ "ZAR": {
+ "name": "جنوبی اÙریقی رانڈ",
+ "symbol": "ZAR"
+ },
+ "SSP": {
+ "name": "جنوبی سوڈانی پاؤنڈ",
+ "symbol": "SSP"
+ },
+ "KRW": {
+ "name": "جنوبی کوریائی وون",
+ "symbol": "â‚©"
+ },
+ "CLP": {
+ "name": "چلّین پیسÛ",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "چینی یوآن",
+ "symbol": "CNÂ¥"
+ },
+ "DKK": {
+ "name": "ڈنمارک کرونر",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "ڈومنیکن پیسو",
+ "symbol": "DOP"
+ },
+ "RWF": {
+ "name": "روانڈا کا Ùرانک",
+ "symbol": "RWF"
+ },
+ "RUB": {
+ "name": "روسی روبل",
+ "symbol": "RUB"
+ },
+ "RON": {
+ "name": "رومانیائی لیو",
+ "symbol": "RON"
+ },
+ "ZMW": {
+ "name": "زامبیائی کواچا",
+ "symbol": "ZMW"
+ },
+ "WST": {
+ "name": "ساموآ کا ٹالا",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "ساؤ ٹوم اور پرنسپے ڈوبرا",
+ "symbol": "STD"
+ },
+ "RSD": {
+ "name": "سربین دینار",
+ "symbol": "RSD"
+ },
+ "LKR": {
+ "name": "سری لنکائی روپیÛ",
+ "symbol": "LKR"
+ },
+ "SCR": {
+ "name": "سشلی کا روپیÛ",
+ "symbol": "SCR"
+ },
+ "SAR": {
+ "name": "سعودی ریال",
+ "symbol": "SAR"
+ },
+ "SGD": {
+ "name": "سنگا پور ڈالر",
+ "symbol": "SGD"
+ },
+ "SZL": {
+ "name": "سوازی لیلانجینی",
+ "symbol": "SZL"
+ },
+ "SDG": {
+ "name": "سوڈانی پاؤنڈ",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "سورینامی ڈالر",
+ "symbol": "SRD"
+ },
+ "SBD": {
+ "name": "سولومن آئلینڈز ڈالر",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "سویڈن کرونا",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "سوئس Ùرانکس",
+ "symbol": "CHF"
+ },
+ "SHP": {
+ "name": "سینٹ Ûیلینا پاؤنڈ",
+ "symbol": "SHP"
+ },
+ "SLL": {
+ "name": "سیئرا لیون لیون",
+ "symbol": "SLL"
+ },
+ "SYP": {
+ "name": "شامی پونڈ",
+ "symbol": "SYP"
+ },
+ "KPW": {
+ "name": "شمالی کوریائی وون",
+ "symbol": "KPW"
+ },
+ "SOS": {
+ "name": "صومالی شلنگ",
+ "symbol": "SOS"
+ },
+ "IQD": {
+ "name": "عراقی دینار",
+ "symbol": "IQD"
+ },
+ "OMR": {
+ "name": "عمانی ریال",
+ "symbol": "OMR"
+ },
+ "FKP": {
+ "name": "Ùاکلینڈ آئلینڈز پونڈ",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "Ùجی کا ڈالر",
+ "symbol": "FJD"
+ },
+ "PHP": {
+ "name": "Ùلپائینی پیسÛ",
+ "symbol": "PHP"
+ },
+ "KZT": {
+ "name": "قزاخستانی ٹینگ",
+ "symbol": "KZT"
+ },
+ "QAR": {
+ "name": "قطری ریال",
+ "symbol": "QAR"
+ },
+ "CDF": {
+ "name": "کانگولیز Ùرانک",
+ "symbol": "CDF"
+ },
+ "KGS": {
+ "name": "کرغستانی سوم",
+ "symbol": "KGS"
+ },
+ "HRK": {
+ "name": "کروشین کونا",
+ "symbol": "HRK"
+ },
+ "KHR": {
+ "name": "کمبوڈیائی ریئل",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "کنیڈین ڈالر",
+ "symbol": "CA$"
+ },
+ "CRC": {
+ "name": "کوسٹا ریکا کا کولن",
+ "symbol": "CRC"
+ },
+ "COP": {
+ "name": "کولمبین پیسÛ",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "کوموریئن Ùرانک",
+ "symbol": "KMF"
+ },
+ "KWD": {
+ "name": "کویتی دینار",
+ "symbol": "KWD"
+ },
+ "CVE": {
+ "name": "کیپ ورڈی کا اسکیوڈو",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "کیمین آئلینڈز ڈالر",
+ "symbol": "KYD"
+ },
+ "KES": {
+ "name": "کینیائی شلنگ",
+ "symbol": "KES"
+ },
+ "CUP": {
+ "name": "کیوبا کا پیسو",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "کیوبا کا قابل منتقلی پیسو",
+ "symbol": "CUC"
+ },
+ "GMD": {
+ "name": "گامبیا کا ڈلاسی",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "Ú¯Ù†ÛŒ Ùرانک",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "گواٹے مالا کا کوئٹزل",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "گویانیز ڈالر",
+ "symbol": "GYD"
+ },
+ "GHS": {
+ "name": "گھانا کا سیڈی",
+ "symbol": "GHS"
+ },
+ "LAK": {
+ "name": "لاؤشیائی Ú©ÙÙ¾",
+ "symbol": "LAK"
+ },
+ "LRD": {
+ "name": "لائبریائی ڈالر",
+ "symbol": "LRD"
+ },
+ "LBP": {
+ "name": "لبنانی پونڈ",
+ "symbol": "LBP"
+ },
+ "LYD": {
+ "name": "لیبیائی دینار",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "لیتھوینیائی لیٹاس",
+ "symbol": "LTL"
+ },
+ "LSL": {
+ "name": "لیسوتھو لوٹی",
+ "symbol": "LSL"
+ },
+ "MUR": {
+ "name": "ماریشس کا روپیÛ",
+ "symbol": "MUR"
+ },
+ "MDL": {
+ "name": "مالدووی لیو",
+ "symbol": "MDL"
+ },
+ "MVR": {
+ "name": "مالدیپ کا روÙÛŒÛ",
+ "symbol": "MVR"
+ },
+ "AED": {
+ "name": "Ù…ØªØ­Ø¯Û Ø¹Ø±Ø¨ اماراتی درÛÙ…",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "مراکشی درÛÙ…",
+ "symbol": "MAD"
+ },
+ "XCD": {
+ "name": "مشرقی کریبیا کا ڈالر",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "مصری پاؤنڈ",
+ "symbol": "EGP"
+ },
+ "MKD": {
+ "name": "مقدونیائی دینار",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "ملاگاسی اریاری",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "ملاوی کواچا",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "ملیشیائی رنگÙÙ¹",
+ "symbol": "MYR"
+ },
+ "MNT": {
+ "name": "منگولیائی ٹگرÙ",
+ "symbol": "MNT"
+ },
+ "MRO": {
+ "name": "موریطانیائی اوگوئیا",
+ "symbol": "MRO"
+ },
+ "MZN": {
+ "name": "موزامبیقی میٹیکل",
+ "symbol": "MZN"
+ },
+ "MMK": {
+ "name": "میانما کیاٹ",
+ "symbol": "MMK"
+ },
+ "MOP": {
+ "name": "میکانیز پٹاکا",
+ "symbol": "MOP"
+ },
+ "MXN": {
+ "name": "میکسیکی پیسÛ",
+ "symbol": "MX$"
+ },
+ "NOK": {
+ "name": "ناروے کرونر",
+ "symbol": "NOK"
+ },
+ "NAD": {
+ "name": "نامیبیائی ڈالر",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "نائیجیریائی نائرا",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "نکارا گوا کا کورڈوبا",
+ "symbol": "NIO"
+ },
+ "NPR": {
+ "name": "نیپالی روپیÛ",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "نیدر لینڈز انٹیلیئن گلڈر",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "نیو تائیوان ڈالر",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "نیوزی لینڈ ڈالر",
+ "symbol": "NZ$"
+ },
+ "VND": {
+ "name": "ویتنامی ڈانگ",
+ "symbol": "â‚«"
+ },
+ "VEF": {
+ "name": "وینزویلا بولیور",
+ "symbol": "VEF"
+ },
+ "VUV": {
+ "name": "وینوواتو واتو",
+ "symbol": "VUV"
+ },
+ "HUF": {
+ "name": "Ûنگرین Ùورنٹ",
+ "symbol": "HUF"
+ },
+ "HNL": {
+ "name": "Ûونڈوران لیمپیرا",
+ "symbol": "HNL"
+ },
+ "HTG": {
+ "name": "Ûیتی کا گؤرڈی",
+ "symbol": "HTG"
+ },
+ "HKD": {
+ "name": "ھانگ کانگ ڈالر",
+ "symbol": "HK$"
+ },
+ "YER": {
+ "name": "یمنی ریال",
+ "symbol": "YER"
+ },
+ "EUR": {
+ "name": "یورو",
+ "symbol": "€"
+ },
+ "UYU": {
+ "name": "یوروگویان پیسو",
+ "symbol": "UYU"
+ },
+ "UAH": {
+ "name": "یوکرینیائی Ûریونیا",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "یوگانڈا شلنگ",
+ "symbol": "UGX"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/uz-Cyrl.json b/library/intl/resources/currency/uz-Cyrl.json
new file mode 100644
index 000000000..b5396c691
--- /dev/null
+++ b/library/intl/resources/currency/uz-Cyrl.json
@@ -0,0 +1,634 @@
+{
+ "AED": {
+ "name": "AED",
+ "symbol": "AED"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "AOA": {
+ "name": "AOA",
+ "symbol": "AOA"
+ },
+ "AUD": {
+ "name": "AUD",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BHD": {
+ "name": "BHD",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "BIF",
+ "symbol": "BIF"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BWP": {
+ "name": "BWP",
+ "symbol": "BWP"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "CDF": {
+ "name": "CDF",
+ "symbol": "CDF"
+ },
+ "CHF": {
+ "name": "CHF",
+ "symbol": "CHF"
+ },
+ "CVE": {
+ "name": "CVE",
+ "symbol": "CVE"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DJF": {
+ "name": "DJF",
+ "symbol": "DJF"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "ERN": {
+ "name": "ERN",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "ETB",
+ "symbol": "ETB"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GMD": {
+ "name": "GMD",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KES": {
+ "name": "KES",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "KMF",
+ "symbol": "KMF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LRD": {
+ "name": "LRD",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MGA": {
+ "name": "MGA",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MRO": {
+ "name": "MRO",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "MWK",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SAR": {
+ "name": "SAR",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "SDG",
+ "symbol": "SDG"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SOS",
+ "symbol": "SOS"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "฿"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "TND",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "TZS": {
+ "name": "TZS",
+ "symbol": "TZS"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "UGX",
+ "symbol": "UGX"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZAR": {
+ "name": "ZAR",
+ "symbol": "ZAR"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "USD": {
+ "name": "ÐҚШ доллари",
+ "symbol": "US$"
+ },
+ "ARS": {
+ "name": "Ðргентина пеÑоÑи",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "Ðруба флорини",
+ "symbol": "AWG"
+ },
+ "BSD": {
+ "name": "Багама доллари",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "Ð‘Ð°Ñ€Ð±Ð°Ð´Ð¾Ñ Ð´Ð¾Ð»Ð»Ð°Ñ€Ð¸",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Белиз доллари",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Бермуда доллари",
+ "symbol": "BMD"
+ },
+ "BOB": {
+ "name": "Ð‘Ð¾Ð»Ð¸Ð²Ð¸Ñ Ð±Ð¾Ð»Ð²Ð¸Ð°Ð½Ð¸",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "Бразил реали",
+ "symbol": "R$"
+ },
+ "VEF": {
+ "name": "ВенеÑуÑла боливари",
+ "symbol": "VEF"
+ },
+ "HTG": {
+ "name": "Гаити гурдаÑи",
+ "symbol": "HTG"
+ },
+ "GYD": {
+ "name": "ГаÑна доллари",
+ "symbol": "GYD"
+ },
+ "GTQ": {
+ "name": "Гватемала кветзали",
+ "symbol": "GTQ"
+ },
+ "ANG": {
+ "name": "Голланд Ðнтил гульдени",
+ "symbol": "ANG"
+ },
+ "HNL": {
+ "name": "Ð“Ð¾Ð½Ð´ÑƒÑ€Ð°Ñ Ð»ÐµÐ¼Ð¿Ð¸Ñ€Ð°Ñи",
+ "symbol": "HNL"
+ },
+ "DOP": {
+ "name": "Доминикан пеÑоÑи",
+ "symbol": "DOP"
+ },
+ "EUR": {
+ "name": "Евро",
+ "symbol": "€"
+ },
+ "DZD": {
+ "name": "Жазоир динори",
+ "symbol": "DZD"
+ },
+ "GBP": {
+ "name": "Инглиз фунт Ñтерлинги",
+ "symbol": "£"
+ },
+ "KYD": {
+ "name": "Кайман ороли Доллари",
+ "symbol": "KYD"
+ },
+ "CAD": {
+ "name": "Канада доллари",
+ "symbol": "CA$"
+ },
+ "COP": {
+ "name": "ÐšÐ¾Ð»ÑƒÐ¼Ð±Ð¸Ñ Ð¿ÐµÑоÑи",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "КоÑта-Рика колони",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "Куба Ðйирбошлаш пеÑоÑи",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Куба пеÑоÑи",
+ "symbol": "CUP"
+ },
+ "LYD": {
+ "name": "Ð›Ð¸Ð²Ð¸Ñ Ð´Ð¸Ð½Ð¾Ñ€Ð¸",
+ "symbol": "LYD"
+ },
+ "MAD": {
+ "name": "Марокаш дирҳами",
+ "symbol": "MAD"
+ },
+ "MXN": {
+ "name": "МекÑика пеÑоÑи",
+ "symbol": "MX$"
+ },
+ "EGP": {
+ "name": "МиÑÑ€ фунти",
+ "symbol": "EGP"
+ },
+ "NIO": {
+ "name": "Ðикарагуа кордобаÑи",
+ "symbol": "NIO"
+ },
+ "PAB": {
+ "name": "Панама бальбоаÑи",
+ "symbol": "PAB"
+ },
+ "PYG": {
+ "name": "Парагвай гуарани",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Перу нуево Ñол",
+ "symbol": "PEN"
+ },
+ "RUB": {
+ "name": "Ð ÑƒÑ Ñ€ÑƒÐ±Ð»Ð¸",
+ "symbol": "RUB"
+ },
+ "SRD": {
+ "name": "Суринам доллари",
+ "symbol": "SRD"
+ },
+ "TTD": {
+ "name": "Тринидад ва Тобаго доллари",
+ "symbol": "TTD"
+ },
+ "UYU": {
+ "name": "Уругвай пеÑоÑи",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "ЎзбекиÑтон Ñўм",
+ "symbol": "Ñўм"
+ },
+ "FKP": {
+ "name": "Фолькленд ороли фунти",
+ "symbol": "FKP"
+ },
+ "CNY": {
+ "name": "Хитой юани",
+ "symbol": "CNÂ¥"
+ },
+ "INR": {
+ "name": "Ҳинд рупиÑÑи",
+ "symbol": "₹"
+ },
+ "CLP": {
+ "name": "Чили пеÑоÑи",
+ "symbol": "CLP"
+ },
+ "XCD": {
+ "name": "Шарқий Кариб доллари",
+ "symbol": "EC$"
+ },
+ "JMD": {
+ "name": "Ямайка доллари",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "Япон йенаÑи",
+ "symbol": "JPÂ¥"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/uz.json b/library/intl/resources/currency/uz.json
new file mode 100644
index 000000000..e9d858c75
--- /dev/null
+++ b/library/intl/resources/currency/uz.json
@@ -0,0 +1,634 @@
+{
+ "AED": {
+ "name": "AED",
+ "symbol": "AED"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "Alban leki",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "AOA": {
+ "name": "AOA",
+ "symbol": "AOA"
+ },
+ "USD": {
+ "name": "AQSH dollari",
+ "symbol": "US$"
+ },
+ "ARS": {
+ "name": "Argentina pesosi",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "Aruba florini",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "Avstraliya dollari",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "Bagama dollari",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "Barbados dollari",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BYR": {
+ "name": "Belarus rubli",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "Beliz dollari",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Bermuda dollari",
+ "symbol": "BMD"
+ },
+ "BHD": {
+ "name": "BHD",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "BIF",
+ "symbol": "BIF"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "Bolgariya levi",
+ "symbol": "BGN"
+ },
+ "BOB": {
+ "name": "Boliviya bolivyani",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "Bosniya va Gertsogovina ayriboshlash markasi",
+ "symbol": "BAM"
+ },
+ "BRL": {
+ "name": "Brazil reali",
+ "symbol": "R$"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BWP": {
+ "name": "BWP",
+ "symbol": "BWP"
+ },
+ "CDF": {
+ "name": "CDF",
+ "symbol": "CDF"
+ },
+ "CZK": {
+ "name": "Chex kronasi",
+ "symbol": "CZK"
+ },
+ "CLP": {
+ "name": "Chili pesosi",
+ "symbol": "CLP"
+ },
+ "CVE": {
+ "name": "CVE",
+ "symbol": "CVE"
+ },
+ "DKK": {
+ "name": "Daniya kronasi",
+ "symbol": "DKK"
+ },
+ "DJF": {
+ "name": "DJF",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "Dominikan pesosi",
+ "symbol": "DOP"
+ },
+ "ERN": {
+ "name": "ERN",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "ETB",
+ "symbol": "ETB"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "Folklend oroli funti",
+ "symbol": "FKP"
+ },
+ "HTG": {
+ "name": "Gaiti gurdasi",
+ "symbol": "HTG"
+ },
+ "GYD": {
+ "name": "Gayana dollari",
+ "symbol": "GYD"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "Gibraltar funti",
+ "symbol": "GIP"
+ },
+ "GMD": {
+ "name": "GMD",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "ANG": {
+ "name": "Golland Antil guldeni",
+ "symbol": "ANG"
+ },
+ "HNL": {
+ "name": "Gonduras lempirasi",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "Gonkong dollari",
+ "symbol": "HK$"
+ },
+ "GTQ": {
+ "name": "Gvatemala kvetzali",
+ "symbol": "GTQ"
+ },
+ "INR": {
+ "name": "Hind rupiyasi",
+ "symbol": "₹"
+ },
+ "HRK": {
+ "name": "Horvat kunasi",
+ "symbol": "HRK"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IDR": {
+ "name": "Indoneziya rupiyasi",
+ "symbol": "IDR"
+ },
+ "GBP": {
+ "name": "Ingliz funt sterlingi",
+ "symbol": "£"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "Islandiya kronasi",
+ "symbol": "ISK"
+ },
+ "ZAR": {
+ "name": "Janubiy Afrika randi",
+ "symbol": "ZAR"
+ },
+ "KRW": {
+ "name": "Janubiy Koreya voni",
+ "symbol": "â‚©"
+ },
+ "SSP": {
+ "name": "Janubiy Sudan funti",
+ "symbol": "SSP"
+ },
+ "DZD": {
+ "name": "Jazoir dinori",
+ "symbol": "DZD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "CAD": {
+ "name": "Kanada dollari",
+ "symbol": "CA$"
+ },
+ "KYD": {
+ "name": "Kayman Orollari Dollari",
+ "symbol": "KYD"
+ },
+ "KES": {
+ "name": "KES",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "KMF",
+ "symbol": "KMF"
+ },
+ "COP": {
+ "name": "Kolumbiya pesosi",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "Kosta-Rika koloni",
+ "symbol": "CRC"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "CUC": {
+ "name": "Kuba Ayirboshlash pesosi",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "Kuba pesosi",
+ "symbol": "CUP"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LTL": {
+ "name": "Litva liti",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "Liviya dinori",
+ "symbol": "LYD"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LRD": {
+ "name": "LRD",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "MKD": {
+ "name": "Makedoniya dinori",
+ "symbol": "MKD"
+ },
+ "MAD": {
+ "name": "Marokash dirhami",
+ "symbol": "MAD"
+ },
+ "MXN": {
+ "name": "Meksika pesosi",
+ "symbol": "MX$"
+ },
+ "MGA": {
+ "name": "MGA",
+ "symbol": "MGA"
+ },
+ "EGP": {
+ "name": "Misr funti",
+ "symbol": "EGP"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MDL": {
+ "name": "Moldova leusi",
+ "symbol": "MDL"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MRO": {
+ "name": "MRO",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "MWK",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "Nikaragua kordobasi",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "Norvegiya kronasi",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "UZS": {
+ "name": "Oʻzbekiston soʻm",
+ "symbol": "soʻm"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "Panama balboasi",
+ "symbol": "PAB"
+ },
+ "PYG": {
+ "name": "Paragvay guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "Peru noyvo soli",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "Polsha zlotiyi",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "Rumin leusi",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "Rus rubli",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SAR": {
+ "name": "Saudiya Arabistoni riyoli",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "RSD": {
+ "name": "Serbiya dinori",
+ "symbol": "RSD"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "XCD": {
+ "name": "Sharqiy Karib dollari",
+ "symbol": "EC$"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "CHF": {
+ "name": "Shvetsariya franki",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "Shvetsiya kronasi",
+ "symbol": "SEK"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SOS",
+ "symbol": "SOS"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "SDG": {
+ "name": "Sudan funti",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "Surinam dollari",
+ "symbol": "SRD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "THB": {
+ "name": "Tayland bahti",
+ "symbol": "฿"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "Trinidad va Tobago dollari",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunis dinori",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "Turk lirasi",
+ "symbol": "TRY"
+ },
+ "TZS": {
+ "name": "TZS",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "UGX",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "Ukrain grivnasi",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "Urugvay pesosi",
+ "symbol": "UYU"
+ },
+ "VEF": {
+ "name": "Venesuela bolivari",
+ "symbol": "VEF"
+ },
+ "HUF": {
+ "name": "Vengriya forinti",
+ "symbol": "HUF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "CNY": {
+ "name": "Xitoy yuani",
+ "symbol": "CNÂ¥"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "JMD": {
+ "name": "Yamayka dollari",
+ "symbol": "JMD"
+ },
+ "TWD": {
+ "name": "Yangi Tayvan dollari",
+ "symbol": "NT$"
+ },
+ "JPY": {
+ "name": "Yapon yenasi",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "EUR": {
+ "name": "Yevro",
+ "symbol": "€"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/vai-Latn.json b/library/intl/resources/currency/vai-Latn.json
new file mode 100644
index 000000000..cfdd565b8
--- /dev/null
+++ b/library/intl/resources/currency/vai-Latn.json
@@ -0,0 +1,634 @@
+{
+ "ZAR": {
+ "name": "Afirika Kɔi Leŋŋɛ lɔ Randi",
+ "symbol": "ZAR"
+ },
+ "XOF": {
+ "name": "Ãfíríka Tele Jíí Sifa",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Ãfíríka TÉ› Sifa",
+ "symbol": "FCFA"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "DZD": {
+ "name": "Agiriya Dina",
+ "symbol": "DZD"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "Angola Kuwaŋza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BHD": {
+ "name": "Bharɛŋ Dina",
+ "symbol": "BHD"
+ },
+ "BWP": {
+ "name": "Bhosuwana Pula",
+ "symbol": "BWP"
+ },
+ "BIF": {
+ "name": "Bhurundi Furaŋki",
+ "symbol": "BIF"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CNY": {
+ "name": "Chaníĩ Yuwaŋ Rɛŋmimbi",
+ "symbol": "CNÂ¥"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "ERN": {
+ "name": "Æritera Nakifa",
+ "symbol": "ERN"
+ },
+ "CVE": {
+ "name": "Æsikudo CabovÉ›diyano",
+ "symbol": "CVE"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GMD": {
+ "name": "Gambiya Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "Ãndiya Rupi",
+ "symbol": "₹"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "ETB": {
+ "name": "Ãtiyopiya Bhii",
+ "symbol": "ETB"
+ },
+ "JPY": {
+ "name": "Japaniĩ Yɛŋ",
+ "symbol": "JPÂ¥"
+ },
+ "GBP": {
+ "name": "Jengési Pɔɔ̃ SitÉ›ÌliÅ‹",
+ "symbol": "£"
+ },
+ "DJF": {
+ "name": "Jibhuti Furaŋki",
+ "symbol": "DJF"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "CAD": {
+ "name": "Kanada Dala",
+ "symbol": "CA$"
+ },
+ "KES": {
+ "name": "Kénya Siyeŋ",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "Komoro Furaŋki",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Kóngo Furaŋki",
+ "symbol": "CDF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "SAR": {
+ "name": "Lahabu Sawodi Riya",
+ "symbol": "SAR"
+ },
+ "LRD": {
+ "name": "Laibhiya Dala",
+ "symbol": "$"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LYD": {
+ "name": "Libhiya Dina",
+ "symbol": "LYD"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LSL": {
+ "name": "Lisóto Loti",
+ "symbol": "LSL"
+ },
+ "SLL": {
+ "name": "Liyɔɔ̀",
+ "symbol": "SLL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MGA": {
+ "name": "Malagasi Ariyari",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "Malawi Kuwacha",
+ "symbol": "MWK"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "EGP": {
+ "name": "Míséla Pɔɔ̃",
+ "symbol": "EGP"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MUR": {
+ "name": "Mɔreshɔ Rupi",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "Mɔretani Yugiya",
+ "symbol": "MRO"
+ },
+ "MAD": {
+ "name": "Mɔroko Dihami",
+ "symbol": "MAD"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naĩjiriya Naĩra",
+ "symbol": "NGN"
+ },
+ "NAD": {
+ "name": "Namibiya Dala",
+ "symbol": "NAD"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "AUD": {
+ "name": "ƆÌsituwa Dala",
+ "symbol": "A$"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "USD": {
+ "name": "Poo Dala",
+ "symbol": "US$"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RWF": {
+ "name": "Rawunda Furaŋki",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "STD": {
+ "name": "Sawo Tombe É“É› a Gbawo Dobura",
+ "symbol": "STD"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "Siŋ Hɛlina Pɔɔ̃",
+ "symbol": "SHP"
+ },
+ "SOS": {
+ "name": "Somaliya Siyeŋ",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SDG": {
+ "name": "Sudaniĩ Pɔɔ̃",
+ "symbol": "SDG"
+ },
+ "CHF": {
+ "name": "Suwesi Furaŋki",
+ "symbol": "CHF"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "TZS": {
+ "name": "Taŋzaniya Siyeŋ",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "Tunisiya Dina",
+ "symbol": "TND"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "UGX": {
+ "name": "Yuganda Siyeŋ",
+ "symbol": "UGX"
+ },
+ "AED": {
+ "name": "YunaitÉ› Arabhi Æmire Dihami",
+ "symbol": "AED"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "ZMW": {
+ "name": "Zambiya Kuwacha",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/vai.json b/library/intl/resources/currency/vai.json
new file mode 100644
index 000000000..b9da1beaa
--- /dev/null
+++ b/library/intl/resources/currency/vai.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ },
+ "ERN": {
+ "name": "ꔀꔸꔳꕟ ê—ꖻꘋ",
+ "symbol": "ERN"
+ },
+ "SCR": {
+ "name": "ꔖꗼꔷ ꖩꔪ",
+ "symbol": "SCR"
+ },
+ "GBP": {
+ "name": "ꔛꔟꔻ ê—ꖻꘋ ꔻꗳꔷꘋ",
+ "symbol": "£"
+ },
+ "KES": {
+ "name": "ꔞꕰ ê”»ê”ꘋ",
+ "symbol": "KES"
+ },
+ "INR": {
+ "name": "ꔤꔺꕩ ꖩꔪ",
+ "symbol": "₹"
+ },
+ "ETB": {
+ "name": "ꔤꕿꖎꔪꕩ ꔫꔤ",
+ "symbol": "ETB"
+ },
+ "LYD": {
+ "name": "ꔷꔫꕩ ꔵꕯ",
+ "symbol": "LYD"
+ },
+ "SZL": {
+ "name": "ꔷꕞꔟꕇ",
+ "symbol": "SZL"
+ },
+ "LSL": {
+ "name": "ꔷꖇꕿ ꖃꔳ",
+ "symbol": "LSL"
+ },
+ "SLL": {
+ "name": "ꔷꗚꘋ",
+ "symbol": "SLL"
+ },
+ "SHP": {
+ "name": "ꔻꘋ ꗥꔷꕯ ê—ꖻꘋ",
+ "symbol": "SHP"
+ },
+ "DJF": {
+ "name": "ꕀꖜꔳ ꖢꕟꘋꕃ",
+ "symbol": "DJF"
+ },
+ "EGP": {
+ "name": "ꕆꔻꕞ ê—ꖻꘋ",
+ "symbol": "EGP"
+ },
+ "ZAR": {
+ "name": "ꕉꔱꔸꕪ ꗛꔤ ꔒꘋꗣ ê— ê•Ÿê˜‹ê”µ",
+ "symbol": "ZAR"
+ },
+ "DZD": {
+ "name": "ꕉꔷꕀꔸꕩ ꔵꕯ",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "ꕉê–ê•ž ꖴꕎꘋꕤ",
+ "symbol": "AOA"
+ },
+ "BHD": {
+ "name": "ꕑꗸꘋ",
+ "symbol": "BHD"
+ },
+ "TZS": {
+ "name": "ꕚꘋꕤꕇꕰ ê”»ê”ꘋ",
+ "symbol": "TZS"
+ },
+ "LRD": {
+ "name": "ꕞꔤꔫꕩ ꕜꕞꕌ",
+ "symbol": "$"
+ },
+ "RWF": {
+ "name": "ꕟꖙꕡ ꖢꕟꘋꕃ",
+ "symbol": "RWF"
+ },
+ "STD": {
+ "name": "ꕢꕴ ꕿꔈ ê—ª ꕉ ê•—ê•´ ê–ꖜꕟ",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "ꕢꖙꔵ ꔸꕩꔷ",
+ "symbol": "SAR"
+ },
+ "ZMW": {
+ "name": "ꕤꔭꕩ ꖴꕎꕦ",
+ "symbol": "ZMW"
+ },
+ "CNY": {
+ "name": "ꕦꕇꔧ ꖳꕎꘋ ꔓꕆꘋꔬ",
+ "symbol": "CNÂ¥"
+ },
+ "JPY": {
+ "name": "ꕧê•ê•‡ê”§ ꘂꘋ",
+ "symbol": "JPÂ¥"
+ },
+ "CAD": {
+ "name": "ꕪꕯꕜ ꕜꕞꕌ",
+ "symbol": "CA$"
+ },
+ "GMD": {
+ "name": "ꕭꔭꕩ ꕜꕞꔻ",
+ "symbol": "GMD"
+ },
+ "MWK": {
+ "name": "ꕮꕞꕌꔨ ꖴꕎꕦ",
+ "symbol": "MWK"
+ },
+ "MGA": {
+ "name": "ꕮꕞꕭꕌꔻ ꕉꔸꕩꔸ",
+ "symbol": "MGA"
+ },
+ "NGN": {
+ "name": "ꕯꔤꕀꔸꕩ ꕯꔤꕟ",
+ "symbol": "NGN"
+ },
+ "NAD": {
+ "name": "ꕯꕆꔫꕩ ꕜꕞꕌ",
+ "symbol": "NAD"
+ },
+ "USD": {
+ "name": "ꕶꕱ ꕜꕞ",
+ "symbol": "US$"
+ },
+ "BWP": {
+ "name": "ꕷꖬꕎꕯ ꖛꕞ",
+ "symbol": "BWP"
+ },
+ "SOS": {
+ "name": "ꖇꕮꔷ ê”»ê”ꘋ",
+ "symbol": "SOS"
+ },
+ "CDF": {
+ "name": "ê–ê–ꕱ ꖢꕟꘋꕃ",
+ "symbol": "CDF"
+ },
+ "KMF": {
+ "name": "ê–ê–’ê–„ ꖢꕟꘋꕃ",
+ "symbol": "KMF"
+ },
+ "BIF": {
+ "name": "ꖜꖩꔺ ꖢꕟꘋꕃ",
+ "symbol": "BIF"
+ },
+ "TND": {
+ "name": "ꖤꕇꔻꕩ ꔵꕯ",
+ "symbol": "TND"
+ },
+ "CHF": {
+ "name": "ꖬꔃꕤ ꖨꕮꕊ ꖢꕟꘋꕃ",
+ "symbol": "CHF"
+ },
+ "SDG": {
+ "name": "ꖬꗵꘋ ê—ꖻꘋ",
+ "symbol": "SDG"
+ },
+ "UGX": {
+ "name": "ꖳꕭꕡ ê”»ê”ꘋ",
+ "symbol": "UGX"
+ },
+ "AED": {
+ "name": "ꖳꕯꔤꗳ ꕉꕟꔬ ꗡꕆꔓꔻ ꔵꕌꕆ",
+ "symbol": "AED"
+ },
+ "EUR": {
+ "name": "ꖳꖄ",
+ "symbol": "€"
+ },
+ "AUD": {
+ "name": "ꖺꔻꖤꔃꔷꕩ ꕜꕞꕌ",
+ "symbol": "A$"
+ },
+ "MUR": {
+ "name": "ꗞꔓꗔ ꖩꔪ",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "ꗞꔸꕚꕇꕰ ꖳꕅꕩ",
+ "symbol": "MRO"
+ },
+ "MAD": {
+ "name": "ê—žê•Ÿê– ê”µê•Œê•†",
+ "symbol": "MAD"
+ },
+ "CVE": {
+ "name": "ê—¡ê”»ê–´ê– ê•ªê•·ê—²ê—¡ê”µê•©ê–†",
+ "symbol": "CVE"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/vi.json b/library/intl/resources/currency/vi.json
new file mode 100644
index 000000000..0fb29e1e1
--- /dev/null
+++ b/library/intl/resources/currency/vi.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "Afghani Afghanistan",
+ "symbol": "AFN"
+ },
+ "MGA": {
+ "name": "Ariary Malagasy",
+ "symbol": "MGA"
+ },
+ "PAB": {
+ "name": "Balboa Panama",
+ "symbol": "PAB"
+ },
+ "EGP": {
+ "name": "Bảng Ai Cập",
+ "symbol": "EGP"
+ },
+ "GBP": {
+ "name": "Bảng Anh",
+ "symbol": "£"
+ },
+ "GIP": {
+ "name": "Bảng Gibraltar",
+ "symbol": "GIP"
+ },
+ "LBP": {
+ "name": "Bảng Li-băng",
+ "symbol": "LBP"
+ },
+ "SSP": {
+ "name": "Bảng Nam Sudan",
+ "symbol": "SSP"
+ },
+ "FKP": {
+ "name": "Bảng Quần đảo Falkland",
+ "symbol": "FKP"
+ },
+ "SHP": {
+ "name": "Bảng Saint Helena",
+ "symbol": "SHP"
+ },
+ "SDG": {
+ "name": "Bảng Sudan",
+ "symbol": "SDG"
+ },
+ "SYP": {
+ "name": "Bảng Syria",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "Bạt Thái Lan",
+ "symbol": "฿"
+ },
+ "ETB": {
+ "name": "Birr Ethiopia",
+ "symbol": "ETB"
+ },
+ "VEF": {
+ "name": "Bolívar Venezuela",
+ "symbol": "VEF"
+ },
+ "BOB": {
+ "name": "Boliviano Bolivia",
+ "symbol": "BOB"
+ },
+ "GHS": {
+ "name": "Cedi Ghana",
+ "symbol": "GHS"
+ },
+ "XAF": {
+ "name": "CFA Franc BEAC",
+ "symbol": "FCFA"
+ },
+ "CRC": {
+ "name": "Colón Costa Rica",
+ "symbol": "CRC"
+ },
+ "NIO": {
+ "name": "Córdoba Nicaragua",
+ "symbol": "NIO"
+ },
+ "GMD": {
+ "name": "Dalasi Gambia",
+ "symbol": "GMD"
+ },
+ "MKD": {
+ "name": "Denar Macedonia",
+ "symbol": "MKD"
+ },
+ "DZD": {
+ "name": "Dinar Algeria",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinar Bahrain",
+ "symbol": "BHD"
+ },
+ "IQD": {
+ "name": "Dinar I-rắc",
+ "symbol": "IQD"
+ },
+ "JOD": {
+ "name": "Dinar Jordan",
+ "symbol": "JOD"
+ },
+ "KWD": {
+ "name": "Dinar Kuwait",
+ "symbol": "KWD"
+ },
+ "LYD": {
+ "name": "Dinar Libi",
+ "symbol": "LYD"
+ },
+ "RSD": {
+ "name": "Dinar Serbia",
+ "symbol": "RSD"
+ },
+ "TND": {
+ "name": "Dinar Tunisia",
+ "symbol": "TND"
+ },
+ "MAD": {
+ "name": "Dirham Ma-rốc",
+ "symbol": "MAD"
+ },
+ "AED": {
+ "name": "Dirham UAE",
+ "symbol": "AED"
+ },
+ "STD": {
+ "name": "Dobra São Tomé và Príncipe",
+ "symbol": "STD"
+ },
+ "AMD": {
+ "name": "Dram Armenia",
+ "symbol": "AMD"
+ },
+ "AUD": {
+ "name": "Äô la Australia",
+ "symbol": "AU$"
+ },
+ "BSD": {
+ "name": "Äô la Bahamas",
+ "symbol": "BSD"
+ },
+ "BBD": {
+ "name": "Äô la Barbados",
+ "symbol": "BBD"
+ },
+ "BZD": {
+ "name": "Äô la Belize",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "Äô la Bermuda",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "Äô la Brunei",
+ "symbol": "BND"
+ },
+ "CAD": {
+ "name": "Äô la Canada",
+ "symbol": "CA$"
+ },
+ "TWD": {
+ "name": "Äô la Äài Loan má»›i",
+ "symbol": "NT$"
+ },
+ "XCD": {
+ "name": "Äô la Äông Caribê",
+ "symbol": "EC$"
+ },
+ "FJD": {
+ "name": "Äô la Fiji",
+ "symbol": "FJD"
+ },
+ "GYD": {
+ "name": "Äô la Guyana",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "Äô la Hồng Kông",
+ "symbol": "HK$"
+ },
+ "JMD": {
+ "name": "Äô la Jamaica",
+ "symbol": "JMD"
+ },
+ "LRD": {
+ "name": "Äô la Liberia",
+ "symbol": "LRD"
+ },
+ "USD": {
+ "name": "Äô la Mỹ",
+ "symbol": "US$"
+ },
+ "NAD": {
+ "name": "Äô la Namibia",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "Äô la New Zealand",
+ "symbol": "NZ$"
+ },
+ "KYD": {
+ "name": "Äô la Quần đảo Cayman",
+ "symbol": "KYD"
+ },
+ "SBD": {
+ "name": "Äô la quần đảo Solomon",
+ "symbol": "SBD"
+ },
+ "SGD": {
+ "name": "Äô la Singapore",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "Äô la Suriname",
+ "symbol": "SRD"
+ },
+ "TTD": {
+ "name": "Äô la Trinidad và Tobago",
+ "symbol": "TTD"
+ },
+ "SVC": {
+ "name": "Äồng Colón Salvador",
+ "symbol": "SVC"
+ },
+ "ZWL": {
+ "name": "Äồng Äô la Zimbabwe (2009)",
+ "symbol": "ZWL"
+ },
+ "LSL": {
+ "name": "Äồng loti của Lesotho",
+ "symbol": "LSL"
+ },
+ "VND": {
+ "name": "Äồng Việt Nam",
+ "symbol": "â‚«"
+ },
+ "CVE": {
+ "name": "Escudo Cape Verde",
+ "symbol": "CVE"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "AWG": {
+ "name": "Florin Aruba",
+ "symbol": "AWG"
+ },
+ "HUF": {
+ "name": "Forint Hungaria",
+ "symbol": "HUF"
+ },
+ "BIF": {
+ "name": "Franc Burundi",
+ "symbol": "BIF"
+ },
+ "XOF": {
+ "name": "Franc CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "Franc CFP",
+ "symbol": "CFPF"
+ },
+ "KMF": {
+ "name": "Franc Comoros",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Franc Congo",
+ "symbol": "CDF"
+ },
+ "DJF": {
+ "name": "Franc Djibouti",
+ "symbol": "DJF"
+ },
+ "GNF": {
+ "name": "Franc Guinea",
+ "symbol": "GNF"
+ },
+ "RWF": {
+ "name": "Franc Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Franc Thụy sĩ",
+ "symbol": "CHF"
+ },
+ "HTG": {
+ "name": "Gourde Haiti",
+ "symbol": "HTG"
+ },
+ "PYG": {
+ "name": "Guarani Paraguay",
+ "symbol": "PYG"
+ },
+ "ANG": {
+ "name": "Guilder Tây Ấn Hà Lan",
+ "symbol": "ANG"
+ },
+ "UAH": {
+ "name": "Hryvnia Ucraina",
+ "symbol": "UAH"
+ },
+ "PGK": {
+ "name": "Kina Papua New Guinean",
+ "symbol": "PGK"
+ },
+ "LAK": {
+ "name": "Kip Lào",
+ "symbol": "LAK"
+ },
+ "CZK": {
+ "name": "Koruna Cộng hòa Séc",
+ "symbol": "CZK"
+ },
+ "ISK": {
+ "name": "Króna Iceland",
+ "symbol": "ISK"
+ },
+ "SEK": {
+ "name": "Krona Thụy Äiển",
+ "symbol": "SEK"
+ },
+ "DKK": {
+ "name": "Krone Äan Mạch",
+ "symbol": "DKK"
+ },
+ "NOK": {
+ "name": "Krone Na Uy",
+ "symbol": "NOK"
+ },
+ "HRK": {
+ "name": "Kuna Croatia",
+ "symbol": "HRK"
+ },
+ "MWK": {
+ "name": "Kwacha Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza Angola",
+ "symbol": "AOA"
+ },
+ "MMK": {
+ "name": "Kyat Myanma",
+ "symbol": "MMK"
+ },
+ "GEL": {
+ "name": "Lari Gruzia",
+ "symbol": "GEL"
+ },
+ "ALL": {
+ "name": "Lek Albania",
+ "symbol": "ALL"
+ },
+ "HNL": {
+ "name": "Lempira Honduras",
+ "symbol": "HNL"
+ },
+ "SLL": {
+ "name": "Leone Sierra Leone",
+ "symbol": "SLL"
+ },
+ "MDL": {
+ "name": "Leu Moldova",
+ "symbol": "MDL"
+ },
+ "RON": {
+ "name": "Leu Romania",
+ "symbol": "RON"
+ },
+ "BGN": {
+ "name": "Lev Bulgaria",
+ "symbol": "BGN"
+ },
+ "TRY": {
+ "name": "Lia Thổ Nhĩ Kỳ",
+ "symbol": "TRY"
+ },
+ "SZL": {
+ "name": "Lilangeni Swaziland",
+ "symbol": "SZL"
+ },
+ "LTL": {
+ "name": "Litas Lít-va",
+ "symbol": "LTL"
+ },
+ "AZN": {
+ "name": "Manat Azerbaijan",
+ "symbol": "AZN"
+ },
+ "TMT": {
+ "name": "Manat Turkmenistan",
+ "symbol": "TMT"
+ },
+ "BAM": {
+ "name": "Mark Bosnia-Herzegovina có thể chuyển đổi",
+ "symbol": "BAM"
+ },
+ "MZN": {
+ "name": "Metical Mozambique",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira Nigeria",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa Eritrea",
+ "symbol": "ERN"
+ },
+ "BTN": {
+ "name": "Ngultrum Bhutan",
+ "symbol": "BTN"
+ },
+ "CNY": {
+ "name": "Nhân dân tệ",
+ "symbol": "CNÂ¥"
+ },
+ "PEN": {
+ "name": "Nuevo Sol Peru",
+ "symbol": "PEN"
+ },
+ "MRO": {
+ "name": "Ouguiya Mauritania",
+ "symbol": "MRO"
+ },
+ "TOP": {
+ "name": "Paʻanga Tonga",
+ "symbol": "TOP"
+ },
+ "MOP": {
+ "name": "Pataca Ma Cao",
+ "symbol": "MOP"
+ },
+ "ARS": {
+ "name": "Peso Argentina",
+ "symbol": "ARS"
+ },
+ "CLP": {
+ "name": "Peso Chile",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "Peso Colombia",
+ "symbol": "COP"
+ },
+ "CUP": {
+ "name": "Peso Cuba",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "Peso Cuba có thể chuyển đổi",
+ "symbol": "CUC"
+ },
+ "DOP": {
+ "name": "Peso Dominica",
+ "symbol": "DOP"
+ },
+ "MXN": {
+ "name": "Peso Mexico",
+ "symbol": "MX$"
+ },
+ "PHP": {
+ "name": "Peso Philipin",
+ "symbol": "PHP"
+ },
+ "UYU": {
+ "name": "Peso Uruguay",
+ "symbol": "UYU"
+ },
+ "BWP": {
+ "name": "Pula Botswana",
+ "symbol": "BWP"
+ },
+ "GTQ": {
+ "name": "Quetzal Guatemala",
+ "symbol": "GTQ"
+ },
+ "ZAR": {
+ "name": "Rand Nam Phi",
+ "symbol": "ZAR"
+ },
+ "BRL": {
+ "name": "Real Braxin",
+ "symbol": "R$"
+ },
+ "IRR": {
+ "name": "Rial Iran",
+ "symbol": "IRR"
+ },
+ "OMR": {
+ "name": "Rial Oman",
+ "symbol": "OMR"
+ },
+ "QAR": {
+ "name": "Rial Qatar",
+ "symbol": "QAR"
+ },
+ "YER": {
+ "name": "Rial Yemen",
+ "symbol": "YER"
+ },
+ "KHR": {
+ "name": "Riel Campuchia",
+ "symbol": "KHR"
+ },
+ "MYR": {
+ "name": "Ringgit Malaysia",
+ "symbol": "MYR"
+ },
+ "SAR": {
+ "name": "Riyal Ả Rập Xê-út",
+ "symbol": "SAR"
+ },
+ "MVR": {
+ "name": "Rufiyaa Maldives",
+ "symbol": "MVR"
+ },
+ "BYR": {
+ "name": "Rúp Belarus",
+ "symbol": "BYR"
+ },
+ "RUB": {
+ "name": "Rúp Nga",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupee Ấn Äá»™",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupee Mauritius",
+ "symbol": "MUR"
+ },
+ "NPR": {
+ "name": "Rupee Nepal",
+ "symbol": "NPR"
+ },
+ "PKR": {
+ "name": "Rupee Pakistan",
+ "symbol": "PKR"
+ },
+ "SCR": {
+ "name": "Rupee Seychelles",
+ "symbol": "SCR"
+ },
+ "LKR": {
+ "name": "Rupee Sri Lanka",
+ "symbol": "LKR"
+ },
+ "IDR": {
+ "name": "Rupiah Indonesia",
+ "symbol": "IDR"
+ },
+ "SOS": {
+ "name": "Schilling Somali",
+ "symbol": "SOS"
+ },
+ "ILS": {
+ "name": "Sheqel Israel má»›i",
+ "symbol": "₪"
+ },
+ "KES": {
+ "name": "Shilling Kenya",
+ "symbol": "KES"
+ },
+ "TZS": {
+ "name": "Shilling Tanzania",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Shilling Uganda",
+ "symbol": "UGX"
+ },
+ "KGS": {
+ "name": "Som Kyrgyzstan",
+ "symbol": "KGS"
+ },
+ "UZS": {
+ "name": "Som Uzbekistan",
+ "symbol": "UZS"
+ },
+ "TJS": {
+ "name": "Somoni Tajikistan",
+ "symbol": "TJS"
+ },
+ "BDT": {
+ "name": "Taka Bangladesh",
+ "symbol": "BDT"
+ },
+ "WST": {
+ "name": "Tala Samoa",
+ "symbol": "WST"
+ },
+ "KZT": {
+ "name": "Tenge Kazakhstan",
+ "symbol": "KZT"
+ },
+ "MNT": {
+ "name": "Tugrik Mông Cổ",
+ "symbol": "MNT"
+ },
+ "VUV": {
+ "name": "Vatu Vanuatu",
+ "symbol": "VUV"
+ },
+ "KRW": {
+ "name": "Won Hàn Quốc",
+ "symbol": "â‚©"
+ },
+ "KPW": {
+ "name": "Won Triá»u Tiên",
+ "symbol": "KPW"
+ },
+ "JPY": {
+ "name": "Yên Nhật",
+ "symbol": "JPÂ¥"
+ },
+ "PLN": {
+ "name": "Zloty Ba Lan",
+ "symbol": "PLN"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/vun.json b/library/intl/resources/currency/vun.json
new file mode 100644
index 000000000..655670a30
--- /dev/null
+++ b/library/intl/resources/currency/vun.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Bir ya Uhabeshi",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi ya Gambia",
+ "symbol": "GMD"
+ },
+ "DZD": {
+ "name": "Dinari ya Aljeria",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinari ya Bahareni",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinari ya Libya",
+ "symbol": "LYD"
+ },
+ "SDG": {
+ "name": "Dinari ya Sudani",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "Dinari ya Tunisia",
+ "symbol": "TND"
+ },
+ "AED": {
+ "name": "Dirham ya Falme za Kiarabu",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "Dirham ya Moroko",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobra ya Sao Tome na Principe",
+ "symbol": "STD"
+ },
+ "AUD": {
+ "name": "Dola ya Australia",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "Dola ya Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dola ya Liberia",
+ "symbol": "LRD"
+ },
+ "USD": {
+ "name": "Dola ya Marekani",
+ "symbol": "US$"
+ },
+ "NAD": {
+ "name": "Dola ya Namibia",
+ "symbol": "NAD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "Eskudo ya Kepuvede",
+ "symbol": "CVE"
+ },
+ "XOF": {
+ "name": "Faranga CFA BCEAO",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Faranga CFA BEAC",
+ "symbol": "FCFA"
+ },
+ "MGA": {
+ "name": "Faranga ya Bukini",
+ "symbol": "MGA"
+ },
+ "BIF": {
+ "name": "Faranga ya Burundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Faranga ya Jibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Faranga ya Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Faranga ya Kongo",
+ "symbol": "CDF"
+ },
+ "RWF": {
+ "name": "Faranga ya Rwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Faranga ya Uswisi",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kwacha ya Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwacha ya Zambia",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza ya Angola",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Leoni",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti ya Lesoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira ya Nijeria",
+ "symbol": "NGN"
+ },
+ "ERN": {
+ "name": "Nakfa ya Eritrea",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "EGP": {
+ "name": "Pauni ya Misri",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Pauni ya Santahelena",
+ "symbol": "SHP"
+ },
+ "GBP": {
+ "name": "Pauni ya Uingereza",
+ "symbol": "£"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pula ya Botswana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Randi ya Afrika Kusini",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riyal ya Saudia",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupia ya India",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupia ya Morisi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupia ya Shelisheli",
+ "symbol": "SCR"
+ },
+ "JPY": {
+ "name": "Sarafu ya Kijapani",
+ "symbol": "JPÂ¥"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "Shilingi ya Kenya",
+ "symbol": "KES"
+ },
+ "SOS": {
+ "name": "Shilingi ya Somalia",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Shilingi ya Tanzania",
+ "symbol": "TSh"
+ },
+ "UGX": {
+ "name": "Shilingi ya Uganda",
+ "symbol": "UGX"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "MRO": {
+ "name": "Ugwiya ya Moritania",
+ "symbol": "MRO"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "CNY": {
+ "name": "Yuan Renminbi ya China",
+ "symbol": "CNÂ¥"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/wae.json b/library/intl/resources/currency/wae.json
new file mode 100644
index 000000000..9e0dcaa55
--- /dev/null
+++ b/library/intl/resources/currency/wae.json
@@ -0,0 +1,634 @@
+{
+ "AED": {
+ "name": "AED",
+ "symbol": "AED"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "AOA": {
+ "name": "AOA",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AUD": {
+ "name": "AUD",
+ "symbol": "A$"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BHD": {
+ "name": "BHD",
+ "symbol": "BHD"
+ },
+ "BIF": {
+ "name": "BIF",
+ "symbol": "BIF"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "Brasilianiši Real",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BWP": {
+ "name": "BWP",
+ "symbol": "BWP"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CAD": {
+ "name": "CAD",
+ "symbol": "CA$"
+ },
+ "CDF": {
+ "name": "CDF",
+ "symbol": "CDF"
+ },
+ "CHF": {
+ "name": "CHF",
+ "symbol": "CHF"
+ },
+ "CNY": {
+ "name": "Chinesiši Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CVE": {
+ "name": "CVE",
+ "symbol": "CVE"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DJF": {
+ "name": "DJF",
+ "symbol": "DJF"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "USD": {
+ "name": "Dollar",
+ "symbol": "$"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "DZD": {
+ "name": "DZD",
+ "symbol": "DZD"
+ },
+ "EGP": {
+ "name": "EGP",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "ERN",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "ETB",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "Euro",
+ "symbol": "€"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GMD": {
+ "name": "GMD",
+ "symbol": "GMD"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "Indiši Rupie",
+ "symbol": "₹"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KES": {
+ "name": "KES",
+ "symbol": "KES"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KMF": {
+ "name": "KMF",
+ "symbol": "KMF"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LRD": {
+ "name": "LRD",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "LYD",
+ "symbol": "LYD"
+ },
+ "MAD": {
+ "name": "MAD",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MGA": {
+ "name": "MGA",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MRO": {
+ "name": "MRO",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "MWK",
+ "symbol": "MWK"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "GBP": {
+ "name": "Pfund",
+ "symbol": "£"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "Rubel",
+ "symbol": "руб"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SAR": {
+ "name": "SAR",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "SDG",
+ "symbol": "SDG"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SOS",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "TND",
+ "symbol": "TND"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "TZS": {
+ "name": "TZS",
+ "symbol": "TZS"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "UGX",
+ "symbol": "UGX"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "JPY": {
+ "name": "Yen",
+ "symbol": "Â¥"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZAR": {
+ "name": "ZAR",
+ "symbol": "ZAR"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/xog.json b/library/intl/resources/currency/xog.json
new file mode 100644
index 000000000..efca32231
--- /dev/null
+++ b/library/intl/resources/currency/xog.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Biiru ya Esyopya",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi ya Gambya",
+ "symbol": "GMD"
+ },
+ "SDG": {
+ "name": "Dinaali ey’eSudaani",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "Dinaali ey’eTunizya",
+ "symbol": "TND"
+ },
+ "DZD": {
+ "name": "Dinaali y’Aligerya",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dinaali ya Baareeni",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dinaali ya Libya",
+ "symbol": "LYD"
+ },
+ "MAD": {
+ "name": "Diraamu ey’eMoroko",
+ "symbol": "MAD"
+ },
+ "AED": {
+ "name": "Diraamu eya Emireeti",
+ "symbol": "AED"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobura ey’eSantome ne Purincipe",
+ "symbol": "STD"
+ },
+ "USD": {
+ "name": "Doola ey’Amerika",
+ "symbol": "US$"
+ },
+ "AUD": {
+ "name": "Doola y’Awusiturelya",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "Doola ya Kanada",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Doola ya Liberya",
+ "symbol": "LRD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "Esikudo ya Keepu Veredi",
+ "symbol": "CVE"
+ },
+ "MGA": {
+ "name": "Faranga ey’eMalagase",
+ "symbol": "MGA"
+ },
+ "RWF": {
+ "name": "Faranga ey’eRwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Faranga ey’eSwitizirandi",
+ "symbol": "CHF"
+ },
+ "BIF": {
+ "name": "Faranga ya burundi",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Faranga ya Jjibuti",
+ "symbol": "DJF"
+ },
+ "KMF": {
+ "name": "Faranga ya Komoro",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "Faranga ya Kongo",
+ "symbol": "CDF"
+ },
+ "XOF": {
+ "name": "Faranga yamu Afirika ya bugwanjuba",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "Faranga yamu Afirika ya wakati",
+ "symbol": "FCFA"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "MWK": {
+ "name": "Kwaca ey’eMalawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kwaca ey’eZambya",
+ "symbol": "ZMW"
+ },
+ "AOA": {
+ "name": "Kwanza y’Angola",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SLL": {
+ "name": "Lewone",
+ "symbol": "SLL"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti ya Lesoso",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "ERN": {
+ "name": "Nakifa ya Eritureya",
+ "symbol": "ERN"
+ },
+ "NGN": {
+ "name": "Nayira ey’eNayijerya",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "SHP": {
+ "name": "Pawunda ey’eSenti Herena",
+ "symbol": "SHP"
+ },
+ "GBP": {
+ "name": "Pawunda ya Bungereza",
+ "symbol": "£"
+ },
+ "EGP": {
+ "name": "Pawunda ya Misiri",
+ "symbol": "EGP"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "Pula ya Botiswana",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Randi ey’eSawusafirika",
+ "symbol": "ZAR"
+ },
+ "SAR": {
+ "name": "Riyaali ey’eBuwarabu",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "MUR": {
+ "name": "Rupiya ey’eMawurisyasi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupiya ey’eSesere",
+ "symbol": "SCR"
+ },
+ "INR": {
+ "name": "Rupiya ya Buyindi",
+ "symbol": "₹"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SOS": {
+ "name": "Silingi ey’eSomaliya",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Silingi ey’eTanzaniya",
+ "symbol": "TZS"
+ },
+ "UGX": {
+ "name": "Silingi eya Yuganda",
+ "symbol": "USh"
+ },
+ "KES": {
+ "name": "Silingi ya Kenya",
+ "symbol": "KES"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "MRO": {
+ "name": "Wugwiya ey’eMawritenya",
+ "symbol": "MRO"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "JPY": {
+ "name": "Yeni ya Japani",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "EUR": {
+ "name": "Yuro",
+ "symbol": "€"
+ },
+ "CNY": {
+ "name": "Yuwani Reniminibi ya Cayina",
+ "symbol": "CNÂ¥"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/yav.json b/library/intl/resources/currency/yav.json
new file mode 100644
index 000000000..369e6d3c8
--- /dev/null
+++ b/library/intl/resources/currency/yav.json
@@ -0,0 +1,634 @@
+{
+ "AED": {
+ "name": "AED",
+ "symbol": "AED"
+ },
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CHF": {
+ "name": "CHF",
+ "symbol": "CHF"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "CVE": {
+ "name": "É›skúdo u kápfÉ›ÌÉ›l",
+ "symbol": "CVE"
+ },
+ "CDF": {
+ "name": "Ìfaláŋɛ u kongó",
+ "symbol": "CDF"
+ },
+ "KMF": {
+ "name": "Ìfaláŋɛ u kÉ”mÉ”ÌÉ”l",
+ "symbol": "KMF"
+ },
+ "BIF": {
+ "name": "faláŋɛ u pulundí",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Ìfaláŋɛ u síputí",
+ "symbol": "DJF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "AOA": {
+ "name": "kuansa wu angolá",
+ "symbol": "AOA"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "GBP": {
+ "name": "lífilɛ sitelelíiŋ",
+ "symbol": "£"
+ },
+ "EGP": {
+ "name": "lífilɛ wu isípit",
+ "symbol": "EGP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LRD": {
+ "name": "LRD",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "LSL",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "LYD": {
+ "name": "LYD",
+ "symbol": "LYD"
+ },
+ "MAD": {
+ "name": "MAD",
+ "symbol": "MAD"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MGA": {
+ "name": "MGA",
+ "symbol": "MGA"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MRO": {
+ "name": "MRO",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "MUR",
+ "symbol": "MUR"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "MWK",
+ "symbol": "MWK"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NAD": {
+ "name": "NAD",
+ "symbol": "NAD"
+ },
+ "ERN": {
+ "name": "náfka wu elitilée",
+ "symbol": "ERN"
+ },
+ "NGN": {
+ "name": "NGN",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "EUR": {
+ "name": "olóo",
+ "symbol": "€"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "ETB": {
+ "name": "píil wu etiopí",
+ "symbol": "ETB"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "BWP": {
+ "name": "pula pu posuána",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "RWF",
+ "symbol": "RWF"
+ },
+ "SAR": {
+ "name": "SAR",
+ "symbol": "SAR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SCR": {
+ "name": "SCR",
+ "symbol": "SCR"
+ },
+ "SDG": {
+ "name": "SDG",
+ "symbol": "SDG"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SHP": {
+ "name": "SHP",
+ "symbol": "SHP"
+ },
+ "KES": {
+ "name": "síliŋ u kénia",
+ "symbol": "KES"
+ },
+ "SLL": {
+ "name": "SLL",
+ "symbol": "SLL"
+ },
+ "SOS": {
+ "name": "SOS",
+ "symbol": "SOS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "STD": {
+ "name": "STD",
+ "symbol": "STD"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "SZL": {
+ "name": "SZL",
+ "symbol": "SZL"
+ },
+ "GMD": {
+ "name": "talasí u kaambí",
+ "symbol": "GMD"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "DZD": {
+ "name": "tináal wu alselí",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "tináal wu paaléen",
+ "symbol": "BHD"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TND": {
+ "name": "TND",
+ "symbol": "TND"
+ },
+ "CAD": {
+ "name": "toláal u kanáta",
+ "symbol": "CA$"
+ },
+ "AUD": {
+ "name": "toláal wu ostalalí",
+ "symbol": "A$"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "TZS": {
+ "name": "TZS",
+ "symbol": "TZS"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UGX": {
+ "name": "UGX",
+ "symbol": "UGX"
+ },
+ "INR": {
+ "name": "ulupí",
+ "symbol": "₹"
+ },
+ "USD": {
+ "name": "USD",
+ "symbol": "US$"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XAF": {
+ "name": "XAF",
+ "symbol": "FCFA"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XOF": {
+ "name": "XOF",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "JPY": {
+ "name": "yÉ›ÌÉ›n u sapÉ”Ìɔŋ",
+ "symbol": "JPÂ¥"
+ },
+ "CNY": {
+ "name": "yuan ɛlɛnmimbí",
+ "symbol": "CNÂ¥"
+ },
+ "ZAR": {
+ "name": "ZAR",
+ "symbol": "ZAR"
+ },
+ "ZMW": {
+ "name": "ZMW",
+ "symbol": "ZMW"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/yo-BJ.json b/library/intl/resources/currency/yo-BJ.json
new file mode 100644
index 000000000..8aee86ea1
--- /dev/null
+++ b/library/intl/resources/currency/yo-BJ.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Biri ti OrílÉ›Ìède Eutopia",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi ti OrílÉ›Ìède Gamibia",
+ "symbol": "GMD"
+ },
+ "AED": {
+ "name": "Diami ti Awon OrílÉ›Ìède Arabu",
+ "symbol": "AED"
+ },
+ "DZD": {
+ "name": "Dina ti OrílÉ›Ìède Àlùgèríánì",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dina ti OrílÉ›Ìède Báránì",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dina ti OrílÉ›Ìède Libiya",
+ "symbol": "LYD"
+ },
+ "SDG": {
+ "name": "Dina ti OrílÉ›Ìède Sudani",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "Dina ti OrílÉ›Ìède Tunisia",
+ "symbol": "TND"
+ },
+ "MAD": {
+ "name": "Dirami ti OrílÉ›Ìède Moroko",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobira ti OrílÉ›Ìède Sao tome Ati Pirisipe",
+ "symbol": "STD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "USD": {
+ "name": "DÉ”la ti OrílÉ›Ìède Amerika",
+ "symbol": "US$"
+ },
+ "AUD": {
+ "name": "DÉ”la ti OrílÉ›Ìède Ãstràlìá",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "DÉ”la ti OrílÉ›Ìède Kánádà",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "DÉ”la ti OrílÉ›Ìède Liberia",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "DÉ”la ti OrílÉ›Ìède Namibia",
+ "symbol": "NAD"
+ },
+ "XAF": {
+ "name": "Faransi ti OrílÉ›Ìède BEKA",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "Faransi ti OrílÉ›Ìède BIKEAO",
+ "symbol": "CFA"
+ },
+ "BIF": {
+ "name": "Faransi ti OrílÉ›Ìède Bùùrúndì",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Faransi ti OrílÉ›Ìède Dibouti",
+ "symbol": "DJF"
+ },
+ "CDF": {
+ "name": "Faransi ti OrílÉ›Ìède Kóngò",
+ "symbol": "CDF"
+ },
+ "MGA": {
+ "name": "Faransi ti OrílÉ›Ìède Malagasi",
+ "symbol": "MGA"
+ },
+ "RWF": {
+ "name": "Faransi ti OrílÉ›Ìède Ruwanda",
+ "symbol": "RWF"
+ },
+ "KMF": {
+ "name": "Faransi ti OrílÉ›Ìède shomoriani",
+ "symbol": "KMF"
+ },
+ "CHF": {
+ "name": "Faransi ti OrílÉ›Ìède Siwisi",
+ "symbol": "CHF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "CVE": {
+ "name": "Kabofediano ti OrílÉ›Ìède Esuodo",
+ "symbol": "CVE"
+ },
+ "MWK": {
+ "name": "Kasha ti OrílÉ›Ìède Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kawasha ti OrílÉ›Ìède Saabia",
+ "symbol": "ZMW"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "SLL": {
+ "name": "Lioni",
+ "symbol": "SLL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti ti OrílÉ›Ìède Lesoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira ti OrílÉ›Ìède Nàìjíríà",
+ "symbol": "₦"
+ },
+ "ERN": {
+ "name": "Nakifa ti OrílÉ›Ìède Eriteriani",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "MRO": {
+ "name": "Ouguiya ti OrílÉ›Ìède Maritania",
+ "symbol": "MRO"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "GBP": {
+ "name": "Pɔɔn ti OrílÉ›Ìède Bírítísì",
+ "symbol": "£"
+ },
+ "EGP": {
+ "name": "pɔɔn ti OrílÉ›Ìède Egipiti",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Pɔɔun ti OrílÉ›Ìède Ì£Elena",
+ "symbol": "SHP"
+ },
+ "BWP": {
+ "name": "Pula ti OrílÉ›Ìède Bɔ̀tìsúwánà",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Randi ti OrílÉ›Ìède Ariwa Afirika",
+ "symbol": "ZAR"
+ },
+ "CNY": {
+ "name": "Reminibi ti OrílÉ›Ìède sháínà",
+ "symbol": "CNÂ¥"
+ },
+ "SAR": {
+ "name": "Riya ti OrílÉ›Ìède Saudi",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupi ti OrílÉ›Ìède Indina",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupi ti OrílÉ›Ìède Maritiusi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupi ti OrílÉ›Ìède Sayiselesi",
+ "symbol": "SCR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "KES": {
+ "name": "shiili ti OrílÉ›Ìède Kenya",
+ "symbol": "KES"
+ },
+ "UGX": {
+ "name": "Siile ti OrílÉ›Ìède Uganda",
+ "symbol": "UGX"
+ },
+ "SOS": {
+ "name": "Sile ti OrílÉ›Ìède Somali",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Sile ti OrílÉ›Ìède Tansania",
+ "symbol": "TZS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "EUR": {
+ "name": "Uro",
+ "symbol": "€"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "AOA": {
+ "name": "Wansa ti OrílÉ›Ìède Àngólà",
+ "symbol": "AOA"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "JPY": {
+ "name": "Yeni ti OrílÉ›Ìède Japani",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/yo.json b/library/intl/resources/currency/yo.json
new file mode 100644
index 000000000..80e5daf46
--- /dev/null
+++ b/library/intl/resources/currency/yo.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "ETB": {
+ "name": "Biri ti OrílẹÌède Eutopia",
+ "symbol": "ETB"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "GMD": {
+ "name": "Dalasi ti OrílẹÌède Gamibia",
+ "symbol": "GMD"
+ },
+ "AED": {
+ "name": "Diami ti Awon OrílẹÌède Arabu",
+ "symbol": "AED"
+ },
+ "DZD": {
+ "name": "Dina ti OrílẹÌède Àlùgèríánì",
+ "symbol": "DZD"
+ },
+ "BHD": {
+ "name": "Dina ti OrílẹÌède Báránì",
+ "symbol": "BHD"
+ },
+ "LYD": {
+ "name": "Dina ti OrílẹÌède Libiya",
+ "symbol": "LYD"
+ },
+ "SDG": {
+ "name": "Dina ti OrílẹÌède Sudani",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "Dina ti OrílẹÌède Tunisia",
+ "symbol": "TND"
+ },
+ "MAD": {
+ "name": "Dirami ti OrílẹÌède Moroko",
+ "symbol": "MAD"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "STD": {
+ "name": "Dobira ti OrílẹÌède Sao tome Ati Pirisipe",
+ "symbol": "STD"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "USD": {
+ "name": "Dá»la ti OrílẹÌède Amerika",
+ "symbol": "US$"
+ },
+ "AUD": {
+ "name": "Dá»la ti OrílẹÌède Ãstràlìá",
+ "symbol": "A$"
+ },
+ "CAD": {
+ "name": "Dá»la ti OrílẹÌède Kánádà",
+ "symbol": "CA$"
+ },
+ "LRD": {
+ "name": "Dá»la ti OrílẹÌède Liberia",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "Dá»la ti OrílẹÌède Namibia",
+ "symbol": "NAD"
+ },
+ "XAF": {
+ "name": "Faransi ti OrílẹÌède BEKA",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "Faransi ti OrílẹÌède BIKEAO",
+ "symbol": "CFA"
+ },
+ "BIF": {
+ "name": "Faransi ti OrílẹÌède Bùùrúndì",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "Faransi ti OrílẹÌède Dibouti",
+ "symbol": "DJF"
+ },
+ "CDF": {
+ "name": "Faransi ti OrílẹÌède Kóngò",
+ "symbol": "CDF"
+ },
+ "MGA": {
+ "name": "Faransi ti OrílẹÌède Malagasi",
+ "symbol": "MGA"
+ },
+ "RWF": {
+ "name": "Faransi ti OrílẹÌède Ruwanda",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "Faransi ti OrílẹÌède Siwisi",
+ "symbol": "CHF"
+ },
+ "KMF": {
+ "name": "Faransi ti OrílẹÌède á¹£omoriani",
+ "symbol": "KMF"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "GHS",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "CVE": {
+ "name": "Kabofediano ti OrílẹÌède Esuodo",
+ "symbol": "CVE"
+ },
+ "MWK": {
+ "name": "Kaá¹£a ti OrílẹÌède Malawi",
+ "symbol": "MWK"
+ },
+ "ZMW": {
+ "name": "Kawaá¹£a ti OrílẹÌède Saabia",
+ "symbol": "ZMW"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "SZL": {
+ "name": "Lilangeni",
+ "symbol": "SZL"
+ },
+ "SLL": {
+ "name": "Lioni",
+ "symbol": "SLL"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LSL": {
+ "name": "Loti ti OrílẹÌède Lesoto",
+ "symbol": "LSL"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "MZN": {
+ "name": "MZN",
+ "symbol": "MZN"
+ },
+ "NGN": {
+ "name": "Naira ti OrílẹÌède Nàìjíríà",
+ "symbol": "₦"
+ },
+ "ERN": {
+ "name": "Nakifa ti OrílẹÌède Eriteriani",
+ "symbol": "ERN"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "MRO": {
+ "name": "Ouguiya ti OrílẹÌède Maritania",
+ "symbol": "MRO"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "GBP": {
+ "name": "Pá»á»n ti OrílẹÌède Bírítísì",
+ "symbol": "£"
+ },
+ "EGP": {
+ "name": "pá»á»n ti OrílẹÌède Egipiti",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "Pá»á»un ti OrílẹÌède Ì£Elena",
+ "symbol": "SHP"
+ },
+ "BWP": {
+ "name": "Pula ti OrílẹÌède Bá»Ì€tìsúwánà",
+ "symbol": "BWP"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "ZAR": {
+ "name": "Randi ti OrílẹÌède Ariwa Afirika",
+ "symbol": "ZAR"
+ },
+ "CNY": {
+ "name": "Reminibi ti OrílẹÌède ṣáínà",
+ "symbol": "CNÂ¥"
+ },
+ "SAR": {
+ "name": "Riya ti OrílẹÌède Saudi",
+ "symbol": "SAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "INR": {
+ "name": "Rupi ti OrílẹÌède Indina",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "Rupi ti OrílẹÌède Maritiusi",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "Rupi ti OrílẹÌède Sayiselesi",
+ "symbol": "SCR"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "UGX": {
+ "name": "Siile ti OrílẹÌède Uganda",
+ "symbol": "UGX"
+ },
+ "SOS": {
+ "name": "Sile ti OrílẹÌède Somali",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "Sile ti OrílẹÌède Tansania",
+ "symbol": "TZS"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "KES": {
+ "name": "á¹£iili ti OrílẹÌède Kenya",
+ "symbol": "KES"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "EUR": {
+ "name": "Uro",
+ "symbol": "€"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "AOA": {
+ "name": "Wansa ti OrílẹÌède Àngólà",
+ "symbol": "AOA"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "JPY": {
+ "name": "Yeni ti OrílẹÌède Japani",
+ "symbol": "JPÂ¥"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/zgh.json b/library/intl/resources/currency/zgh.json
new file mode 100644
index 000000000..e742e8906
--- /dev/null
+++ b/library/intl/resources/currency/zgh.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "AFN",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "ALL",
+ "symbol": "ALL"
+ },
+ "AMD": {
+ "name": "AMD",
+ "symbol": "AMD"
+ },
+ "ANG": {
+ "name": "ANG",
+ "symbol": "ANG"
+ },
+ "ARS": {
+ "name": "ARS",
+ "symbol": "ARS"
+ },
+ "AWG": {
+ "name": "AWG",
+ "symbol": "AWG"
+ },
+ "AZN": {
+ "name": "AZN",
+ "symbol": "AZN"
+ },
+ "BAM": {
+ "name": "BAM",
+ "symbol": "BAM"
+ },
+ "BBD": {
+ "name": "BBD",
+ "symbol": "BBD"
+ },
+ "BDT": {
+ "name": "BDT",
+ "symbol": "BDT"
+ },
+ "BGN": {
+ "name": "BGN",
+ "symbol": "BGN"
+ },
+ "BMD": {
+ "name": "BMD",
+ "symbol": "BMD"
+ },
+ "BND": {
+ "name": "BND",
+ "symbol": "BND"
+ },
+ "BOB": {
+ "name": "BOB",
+ "symbol": "BOB"
+ },
+ "BRL": {
+ "name": "BRL",
+ "symbol": "R$"
+ },
+ "BSD": {
+ "name": "BSD",
+ "symbol": "BSD"
+ },
+ "BTN": {
+ "name": "BTN",
+ "symbol": "BTN"
+ },
+ "BYR": {
+ "name": "BYR",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "BZD",
+ "symbol": "BZD"
+ },
+ "CLP": {
+ "name": "CLP",
+ "symbol": "CLP"
+ },
+ "COP": {
+ "name": "COP",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "CRC",
+ "symbol": "CRC"
+ },
+ "CUC": {
+ "name": "CUC",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "CUP",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "CZK",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "DKK",
+ "symbol": "DKK"
+ },
+ "DOP": {
+ "name": "DOP",
+ "symbol": "DOP"
+ },
+ "FJD": {
+ "name": "FJD",
+ "symbol": "FJD"
+ },
+ "FKP": {
+ "name": "FKP",
+ "symbol": "FKP"
+ },
+ "GEL": {
+ "name": "GEL",
+ "symbol": "GEL"
+ },
+ "GIP": {
+ "name": "GIP",
+ "symbol": "GIP"
+ },
+ "GNF": {
+ "name": "GNF",
+ "symbol": "GNF"
+ },
+ "GTQ": {
+ "name": "GTQ",
+ "symbol": "GTQ"
+ },
+ "GYD": {
+ "name": "GYD",
+ "symbol": "GYD"
+ },
+ "HKD": {
+ "name": "HKD",
+ "symbol": "HK$"
+ },
+ "HNL": {
+ "name": "HNL",
+ "symbol": "HNL"
+ },
+ "HRK": {
+ "name": "HRK",
+ "symbol": "HRK"
+ },
+ "HTG": {
+ "name": "HTG",
+ "symbol": "HTG"
+ },
+ "HUF": {
+ "name": "HUF",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "IDR",
+ "symbol": "IDR"
+ },
+ "ILS": {
+ "name": "ILS",
+ "symbol": "₪"
+ },
+ "IQD": {
+ "name": "IQD",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "IRR",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "ISK",
+ "symbol": "ISK"
+ },
+ "JMD": {
+ "name": "JMD",
+ "symbol": "JMD"
+ },
+ "JOD": {
+ "name": "JOD",
+ "symbol": "JOD"
+ },
+ "KGS": {
+ "name": "KGS",
+ "symbol": "KGS"
+ },
+ "KHR": {
+ "name": "KHR",
+ "symbol": "KHR"
+ },
+ "KPW": {
+ "name": "KPW",
+ "symbol": "KPW"
+ },
+ "KRW": {
+ "name": "KRW",
+ "symbol": "â‚©"
+ },
+ "KWD": {
+ "name": "KWD",
+ "symbol": "KWD"
+ },
+ "KYD": {
+ "name": "KYD",
+ "symbol": "KYD"
+ },
+ "KZT": {
+ "name": "KZT",
+ "symbol": "KZT"
+ },
+ "LAK": {
+ "name": "LAK",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "LBP",
+ "symbol": "LBP"
+ },
+ "LKR": {
+ "name": "LKR",
+ "symbol": "LKR"
+ },
+ "LTL": {
+ "name": "LTL",
+ "symbol": "LTL"
+ },
+ "MDL": {
+ "name": "MDL",
+ "symbol": "MDL"
+ },
+ "MKD": {
+ "name": "MKD",
+ "symbol": "MKD"
+ },
+ "MMK": {
+ "name": "MMK",
+ "symbol": "MMK"
+ },
+ "MNT": {
+ "name": "MNT",
+ "symbol": "MNT"
+ },
+ "MOP": {
+ "name": "MOP",
+ "symbol": "MOP"
+ },
+ "MVR": {
+ "name": "MVR",
+ "symbol": "MVR"
+ },
+ "MXN": {
+ "name": "MXN",
+ "symbol": "MX$"
+ },
+ "MYR": {
+ "name": "MYR",
+ "symbol": "MYR"
+ },
+ "NIO": {
+ "name": "NIO",
+ "symbol": "NIO"
+ },
+ "NOK": {
+ "name": "NOK",
+ "symbol": "NOK"
+ },
+ "NPR": {
+ "name": "NPR",
+ "symbol": "NPR"
+ },
+ "NZD": {
+ "name": "NZD",
+ "symbol": "NZ$"
+ },
+ "OMR": {
+ "name": "OMR",
+ "symbol": "OMR"
+ },
+ "PAB": {
+ "name": "PAB",
+ "symbol": "PAB"
+ },
+ "PEN": {
+ "name": "PEN",
+ "symbol": "PEN"
+ },
+ "PGK": {
+ "name": "PGK",
+ "symbol": "PGK"
+ },
+ "PHP": {
+ "name": "PHP",
+ "symbol": "PHP"
+ },
+ "PKR": {
+ "name": "PKR",
+ "symbol": "PKR"
+ },
+ "PLN": {
+ "name": "PLN",
+ "symbol": "PLN"
+ },
+ "PYG": {
+ "name": "PYG",
+ "symbol": "PYG"
+ },
+ "QAR": {
+ "name": "QAR",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "RON",
+ "symbol": "RON"
+ },
+ "RSD": {
+ "name": "RSD",
+ "symbol": "RSD"
+ },
+ "RUB": {
+ "name": "RUB",
+ "symbol": "RUB"
+ },
+ "SBD": {
+ "name": "SBD",
+ "symbol": "SBD"
+ },
+ "SEK": {
+ "name": "SEK",
+ "symbol": "SEK"
+ },
+ "SGD": {
+ "name": "SGD",
+ "symbol": "SGD"
+ },
+ "SRD": {
+ "name": "SRD",
+ "symbol": "SRD"
+ },
+ "SSP": {
+ "name": "SSP",
+ "symbol": "SSP"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SYP": {
+ "name": "SYP",
+ "symbol": "SYP"
+ },
+ "THB": {
+ "name": "THB",
+ "symbol": "THB"
+ },
+ "TJS": {
+ "name": "TJS",
+ "symbol": "TJS"
+ },
+ "TMT": {
+ "name": "TMT",
+ "symbol": "TMT"
+ },
+ "TOP": {
+ "name": "TOP",
+ "symbol": "TOP"
+ },
+ "TRY": {
+ "name": "TRY",
+ "symbol": "TRY"
+ },
+ "TTD": {
+ "name": "TTD",
+ "symbol": "TTD"
+ },
+ "TWD": {
+ "name": "TWD",
+ "symbol": "NT$"
+ },
+ "UAH": {
+ "name": "UAH",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "UYU",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "UZS",
+ "symbol": "UZS"
+ },
+ "VEF": {
+ "name": "VEF",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "VND",
+ "symbol": "â‚«"
+ },
+ "VUV": {
+ "name": "VUV",
+ "symbol": "VUV"
+ },
+ "WST": {
+ "name": "WST",
+ "symbol": "WST"
+ },
+ "XCD": {
+ "name": "XCD",
+ "symbol": "EC$"
+ },
+ "XPF": {
+ "name": "XPF",
+ "symbol": "CFPF"
+ },
+ "YER": {
+ "name": "YER",
+ "symbol": "YER"
+ },
+ "BWP": {
+ "name": "ⴰⴱⵓâµâ´° ⵠⴱⵓⵜⵙⵡⴰâµâ´°",
+ "symbol": "BWP"
+ },
+ "BHD": {
+ "name": "ⴰⴷⵉâµâ´°âµ” ⵠⴱⵃⵔⴰⵢâµ",
+ "symbol": "BHD"
+ },
+ "DZD": {
+ "name": "ⴰⴷⵉâµâ´°âµ” ⵠⴷⵣⴰⵢⵔ",
+ "symbol": "DZD"
+ },
+ "LYD": {
+ "name": "ⴰⴷⵉâµâ´°âµ” âµ âµâµ‰â´±âµ¢â´°",
+ "symbol": "LYD"
+ },
+ "SDG": {
+ "name": "ⴰⴷⵉâµâ´°âµ” ⵠⵙⵙⵓⴷⴰâµ",
+ "symbol": "SDG"
+ },
+ "TND": {
+ "name": "ⴰⴷⵉâµâ´°âµ” ⵠⵜⵓâµâµ™",
+ "symbol": "TND"
+ },
+ "STD": {
+ "name": "ⴰⴷⵓⴱⵔⴰ ⵠⵙⴰâµâµŸâµ“ⵎⵉ",
+ "symbol": "STD"
+ },
+ "CAD": {
+ "name": "ⴰⴷⵓâµâ´°âµ” ⵠⴽⴰâµâ´°â´·â´°",
+ "symbol": "CA$"
+ },
+ "USD": {
+ "name": "ⴰⴷⵓâµâ´°âµ” ⵠⵉⵡⵓâµâ´°â´½ ⵉⵎⵓâµâµ",
+ "symbol": "US$"
+ },
+ "LRD": {
+ "name": "ⴰⴷⵓâµâ´°âµ” âµ âµâµ‰â´±âµ‰âµ”ⵢⴰ",
+ "symbol": "LRD"
+ },
+ "NAD": {
+ "name": "ⴰⴷⵓâµâ´°âµ” âµ âµâ´°âµŽâµ‰â´±âµ¢â´°",
+ "symbol": "NAD"
+ },
+ "AUD": {
+ "name": "ⴰⴷⵓâµâ´°âµ” ⵠⵓⵙⵜⵔⴰâµâµ¢â´°",
+ "symbol": "A$"
+ },
+ "ZWL": {
+ "name": "ⴰⴷⵓâµâ´°âµ” ⵠⵣⵉⵎⴱⴰⴱⵡⵉ (2009)",
+ "symbol": "ZWL"
+ },
+ "AED": {
+ "name": "ⴰⴷⵔⵉⵎ âµ âµâµ‰âµŽâ´°âµ”ⴰⵜ",
+ "symbol": "AED"
+ },
+ "MAD": {
+ "name": "ⴰⴷⵔⵉⵎ âµ âµâµŽâµ–ⵔⵉⴱ",
+ "symbol": "MAD"
+ },
+ "RWF": {
+ "name": "ⴰⴼⵔⴰâµâ´½ ⵠⵔⵡⴰâµâ´·â´°",
+ "symbol": "RWF"
+ },
+ "CHF": {
+ "name": "ⴰⴼⵔⴰâµâ´½ ⵠⵙⵡⵉⵙⵔⴰ",
+ "symbol": "CHF"
+ },
+ "ZMW": {
+ "name": "ⴰⴽⵡⴰⵛⴰ ⵠⵣⴰⵎⴱⵢⴰ",
+ "symbol": "ZMW"
+ },
+ "GBP": {
+ "name": "ⴰⵊâµâµ‰âµ€ ⴰⵙⵜⵔâµâµ‰âµâµ‰ âµ âµâµâ´³âµâµ‰âµ£",
+ "symbol": "£"
+ },
+ "EGP": {
+ "name": "ⴰⵊâµâµ‰âµ€ ⵠⵎⵉⵚⵕ",
+ "symbol": "EGP"
+ },
+ "SHP": {
+ "name": "ⴰⵊâµâµ‰âµ€ ⵠⵙⴰâµâµœâµ‰âµâµ‰âµ",
+ "symbol": "SHP"
+ },
+ "MZN": {
+ "name": "ⴰⵎⵉⵜⵉⴽⵠⵠⵎⵓⵣâµâ´±âµ‰âµ‡",
+ "symbol": "MZN"
+ },
+ "ZAR": {
+ "name": "ⴰⵔⴰâµâ´· ⵠⴰⴼⵔⵉⵇⵢⴰ ⵠⵉⴼⴼⵓⵙ",
+ "symbol": "ZAR"
+ },
+ "INR": {
+ "name": "ⴰⵔⵓⴱⵉ âµ âµâµ€âµ‰âµâ´·",
+ "symbol": "₹"
+ },
+ "MUR": {
+ "name": "ⴰⵔⵓⴱⵉ ⵠⵎⵓⵔⵉⵙ",
+ "symbol": "MUR"
+ },
+ "SCR": {
+ "name": "ⴰⵔⵓⴱⵉ ⵠⵙⵙⵉⵛⵉâµ",
+ "symbol": "SCR"
+ },
+ "SAR": {
+ "name": "ⴰⵔⵢⴰⵠⵠⵙⵙⴰⵄⵓⴷⵉⵢⴰ",
+ "symbol": "SAR"
+ },
+ "KES": {
+ "name": "ⴰⵛⵉâµâµ‰âµ ⵠⴽⵉâµâµ¢â´°",
+ "symbol": "KES"
+ },
+ "UGX": {
+ "name": "ⴰⵛⵉâµâµ‰âµ ⵠⵓⵖⴰâµâ´·â´°",
+ "symbol": "UGX"
+ },
+ "SOS": {
+ "name": "ⴰⵛⵉâµâµ‰âµ ⵠⵚⵚⵓⵎⴰâµ",
+ "symbol": "SOS"
+ },
+ "TZS": {
+ "name": "ⴰⵛⵉâµâµ‰âµ ⵠⵟⴰâµâµ¥â´°âµâµ¢â´°",
+ "symbol": "TZS"
+ },
+ "JPY": {
+ "name": "ⴰⵢⴰⵠⵠâµâµ¢â´°â´±â´°âµ",
+ "symbol": "JPÂ¥"
+ },
+ "CNY": {
+ "name": "ⴰⵢⴰⵠⵠⵛⵛⵉâµâµ¡â´°",
+ "symbol": "CNÂ¥"
+ },
+ "ETB": {
+ "name": "ⴱⵉⵔ ⵠⵉⵜⵢⵓⴱⵢⴰ",
+ "symbol": "ETB"
+ },
+ "GMD": {
+ "name": "â´·â´°âµâ´°âµ™âµ‰ ⵠⴳⴰⵎⴱⵢⴰ",
+ "symbol": "GMD"
+ },
+ "BIF": {
+ "name": "ⴼⵔⴰâµâ´½ ⵠⴱⵓⵔⵓâµâ´·âµ‰",
+ "symbol": "BIF"
+ },
+ "DJF": {
+ "name": "ⴼⵔⴰâµâ´½ ⵠⴷⵊⵉⴱⵓⵜⵉ",
+ "symbol": "DJF"
+ },
+ "CDF": {
+ "name": "ⴼⵔⴰâµâ´½ ⵠⴽⵓâµâ´³âµ“",
+ "symbol": "CDF"
+ },
+ "KMF": {
+ "name": "ⴼⵔⴰâµâ´½ ⵠⵇⵓⵎⵓⵕ",
+ "symbol": "KMF"
+ },
+ "MGA": {
+ "name": "ⴼⵔⴰâµâ´½ ⵠⵎⴰⴷⴰⵖⴰⵛⵇⴰⵔ",
+ "symbol": "MGA"
+ },
+ "XAF": {
+ "name": "ⴼⵔⴰâµâ´½ ⵚⵉⴼⴰ",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "ⴼⵔⴰâµâ´½ ⵚⵉⴼⴰ ⴱⵉⵙⴰⵡ",
+ "symbol": "CFA"
+ },
+ "AOA": {
+ "name": "ⴽⵡⴰâµâµ£â´° âµ â´°âµâ´³âµ“âµâ´°",
+ "symbol": "AOA"
+ },
+ "MWK": {
+ "name": "ⴽⵡⴰⵛⴰ ⵠⵎⴰâµâ´°âµ¡âµ‰",
+ "symbol": "MWK"
+ },
+ "CVE": {
+ "name": "ⵉⵙⴽⵓⴷⵓ ⵠⴽⴰⴱⴱⵉⵔⴷⵉ",
+ "symbol": "CVE"
+ },
+ "SZL": {
+ "name": "âµâµ‰âµâ´°âµâµŠâµ‰âµâµ‰",
+ "symbol": "SZL"
+ },
+ "SLL": {
+ "name": "âµâµ‰âµ¢âµ“âµ",
+ "symbol": "SLL"
+ },
+ "LSL": {
+ "name": "âµâµ“ⵜⵉ âµ âµâµ‰âµšâµ“ⵟⵓ",
+ "symbol": "LSL"
+ },
+ "ERN": {
+ "name": "âµâ´°â´¼â´½â´° ⵠⵉⵔⵉⵜⵉⵔⵢⴰ",
+ "symbol": "ERN"
+ },
+ "NGN": {
+ "name": "âµâ´°âµ¢âµ”â´° âµ âµâµ‰âµŠâµ‰âµ”ⵢⴰ",
+ "symbol": "NGN"
+ },
+ "MRO": {
+ "name": "ⵓⵇⵉⵢⵢⴰ ⵠⵎⵓⵕⵉⵟⴰâµâµ¢â´°",
+ "symbol": "MRO"
+ },
+ "EUR": {
+ "name": "ⵓⵔⵓ",
+ "symbol": "€"
+ },
+ "GHS": {
+ "name": "ⵙⵉⴷⵉ âµ âµ–â´°âµâ´°",
+ "symbol": "GHS"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/zh-Hans-HK.json b/library/intl/resources/currency/zh-Hans-HK.json
new file mode 100644
index 000000000..6f1285083
--- /dev/null
+++ b/library/intl/resources/currency/zh-Hans-HK.json
@@ -0,0 +1,634 @@
+{
+ "ALL": {
+ "name": "阿尔巴尼亚列克",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "阿尔åŠåˆ©äºšç¬¬çº³å°”",
+ "symbol": "DZD"
+ },
+ "AFN": {
+ "name": "阿富汗尼",
+ "symbol": "AFN"
+ },
+ "ARS": {
+ "name": "阿根廷比索",
+ "symbol": "ARS"
+ },
+ "AED": {
+ "name": "阿è”酋迪拉姆",
+ "symbol": "AED"
+ },
+ "AWG": {
+ "name": "阿é²å·´å¼—ç½—æž—",
+ "symbol": "AWG"
+ },
+ "OMR": {
+ "name": "阿曼里亚尔",
+ "symbol": "OMR"
+ },
+ "AZN": {
+ "name": "阿塞拜疆马纳特",
+ "symbol": "AZN"
+ },
+ "EGP": {
+ "name": "埃åŠé•‘",
+ "symbol": "EGP"
+ },
+ "ETB": {
+ "name": "埃塞俄比亚比尔",
+ "symbol": "ETB"
+ },
+ "AOA": {
+ "name": "安哥拉宽扎",
+ "symbol": "AOA"
+ },
+ "AUD": {
+ "name": "澳大利亚元",
+ "symbol": "AU$"
+ },
+ "MOP": {
+ "name": "澳门元",
+ "symbol": "MOP"
+ },
+ "BBD": {
+ "name": "巴巴多斯元",
+ "symbol": "BBD"
+ },
+ "PGK": {
+ "name": "巴布亚新几内亚基那",
+ "symbol": "PGK"
+ },
+ "BSD": {
+ "name": "巴哈马元",
+ "symbol": "BSD"
+ },
+ "PKR": {
+ "name": "巴基斯å¦å¢æ¯”",
+ "symbol": "PKR"
+ },
+ "PYG": {
+ "name": "巴拉圭瓜拉尼",
+ "symbol": "PYG"
+ },
+ "BHD": {
+ "name": "巴林第纳尔",
+ "symbol": "BHD"
+ },
+ "PAB": {
+ "name": "巴拿马巴波亚",
+ "symbol": "PAB"
+ },
+ "BRL": {
+ "name": "巴西雷亚尔",
+ "symbol": "R$"
+ },
+ "BYR": {
+ "name": "白俄罗斯å¢å¸ƒ",
+ "symbol": "BYR"
+ },
+ "BMD": {
+ "name": "百慕大元",
+ "symbol": "BMD"
+ },
+ "BGN": {
+ "name": "ä¿åŠ åˆ©äºšæ–°åˆ—å¼—",
+ "symbol": "BGN"
+ },
+ "ISK": {
+ "name": "冰岛克朗",
+ "symbol": "ISK"
+ },
+ "PLN": {
+ "name": "波兰兹罗æ",
+ "symbol": "PLN"
+ },
+ "BAM": {
+ "name": "波斯尼亚-黑塞哥维那å¯å…‘æ¢é©¬å…‹",
+ "symbol": "BAM"
+ },
+ "BOB": {
+ "name": "玻利维亚诺",
+ "symbol": "BOB"
+ },
+ "BZD": {
+ "name": "伯利兹元",
+ "symbol": "BZD"
+ },
+ "BWP": {
+ "name": "åšèŒ¨ç“¦çº³æ™®æ‹‰",
+ "symbol": "BWP"
+ },
+ "BTN": {
+ "name": "ä¸ä¸¹åŠªå°”特é²å§†",
+ "symbol": "BTN"
+ },
+ "BIF": {
+ "name": "布隆迪法郎",
+ "symbol": "BIF"
+ },
+ "KPW": {
+ "name": "æœé²œå…ƒ",
+ "symbol": "KPW"
+ },
+ "DKK": {
+ "name": "丹麦克朗",
+ "symbol": "DKK"
+ },
+ "XCD": {
+ "name": "东加勒比元",
+ "symbol": "EC$"
+ },
+ "DOP": {
+ "name": "多米尼加比索",
+ "symbol": "DOP"
+ },
+ "RUB": {
+ "name": "ä¿„ç½—æ–¯å¢å¸ƒ",
+ "symbol": "RUB"
+ },
+ "ERN": {
+ "name": "厄立特里亚纳克法",
+ "symbol": "ERN"
+ },
+ "XOF": {
+ "name": "éžæ´²é‡‘èžå…±åŒä½“法郎",
+ "symbol": "CFA"
+ },
+ "PHP": {
+ "name": "è²å¾‹å®¾æ¯”ç´¢",
+ "symbol": "PHP"
+ },
+ "FJD": {
+ "name": "æ–济元",
+ "symbol": "FJD"
+ },
+ "CVE": {
+ "name": "佛得角埃斯库多",
+ "symbol": "CVE"
+ },
+ "FKP": {
+ "name": "ç¦å…‹å…°ç¾¤å²›é•‘",
+ "symbol": "FKP"
+ },
+ "GMD": {
+ "name": "冈比亚达拉西",
+ "symbol": "GMD"
+ },
+ "CDF": {
+ "name": "刚果法郎",
+ "symbol": "CDF"
+ },
+ "HKD": {
+ "name": "港元",
+ "symbol": "HK$"
+ },
+ "COP": {
+ "name": "哥伦比亚比索",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "哥斯达黎加科朗",
+ "symbol": "CRC"
+ },
+ "GEL": {
+ "name": "æ ¼é²å‰äºšæ‹‰é‡Œ",
+ "symbol": "GEL"
+ },
+ "CUP": {
+ "name": "å¤å·´æ¯”ç´¢",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "å¤å·´å¯å…‘æ¢æ¯”ç´¢",
+ "symbol": "CUC"
+ },
+ "GYD": {
+ "name": "圭亚那元",
+ "symbol": "GYD"
+ },
+ "KZT": {
+ "name": "哈è¨å…‹æ–¯å¦è…¾æ ¼",
+ "symbol": "KZT"
+ },
+ "HTG": {
+ "name": "海地å¤å¾·",
+ "symbol": "HTG"
+ },
+ "KRW": {
+ "name": "韩元",
+ "symbol": "₩"
+ },
+ "ANG": {
+ "name": "è·å±žå®‰çš„列斯盾",
+ "symbol": "ANG"
+ },
+ "HNL": {
+ "name": "洪都拉斯拉伦皮拉",
+ "symbol": "HNL"
+ },
+ "DJF": {
+ "name": "å‰å¸ƒæ法郎",
+ "symbol": "DJF"
+ },
+ "KGS": {
+ "name": "å‰å°”å‰æ–¯æ–¯å¦ç´¢å§†",
+ "symbol": "KGS"
+ },
+ "GNF": {
+ "name": "几内亚法郎",
+ "symbol": "GNF"
+ },
+ "CAD": {
+ "name": "加拿大元",
+ "symbol": "CA$"
+ },
+ "GHS": {
+ "name": "加纳塞地",
+ "symbol": "GHS"
+ },
+ "KHR": {
+ "name": "柬埔寨瑞尔",
+ "symbol": "KHR"
+ },
+ "CZK": {
+ "name": "æ·å…‹å…‹éƒŽ",
+ "symbol": "CZK"
+ },
+ "ZWL": {
+ "name": "津巴布韦元 (2009)",
+ "symbol": "ZWL"
+ },
+ "QAR": {
+ "name": "å¡å¡”尔里亚尔",
+ "symbol": "QAR"
+ },
+ "KYD": {
+ "name": "开曼群岛元",
+ "symbol": "KYD"
+ },
+ "KMF": {
+ "name": "科摩罗法郎",
+ "symbol": "KMF"
+ },
+ "KWD": {
+ "name": "科å¨ç‰¹ç¬¬çº³å°”",
+ "symbol": "KWD"
+ },
+ "HRK": {
+ "name": "克罗地亚库纳",
+ "symbol": "HRK"
+ },
+ "KES": {
+ "name": "肯尼亚先令",
+ "symbol": "KES"
+ },
+ "LSL": {
+ "name": "莱索托洛蒂",
+ "symbol": "LSL"
+ },
+ "LAK": {
+ "name": "è€æŒåŸºæ™®",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "黎巴嫩镑",
+ "symbol": "LBP"
+ },
+ "LTL": {
+ "name": "立陶宛立特",
+ "symbol": "LTL"
+ },
+ "LRD": {
+ "name": "利比里亚元",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "利比亚第纳尔",
+ "symbol": "LYD"
+ },
+ "RWF": {
+ "name": "å¢æ—ºè¾¾æ³•éƒŽ",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "罗马尼亚列伊",
+ "symbol": "RON"
+ },
+ "MGA": {
+ "name": "马达加斯加阿里亚里",
+ "symbol": "MGA"
+ },
+ "MVR": {
+ "name": "马尔代夫å¢è²äºš",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "马拉维克瓦查",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "马æ¥è¥¿äºšæž—å‰ç‰¹",
+ "symbol": "MYR"
+ },
+ "MKD": {
+ "name": "马其顿第纳尔",
+ "symbol": "MKD"
+ },
+ "MUR": {
+ "name": "毛里求斯å¢æ¯”",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "毛里塔尼亚乌å‰äºš",
+ "symbol": "MRO"
+ },
+ "USD": {
+ "name": "美元",
+ "symbol": "US$"
+ },
+ "MNT": {
+ "name": "è’™å¤å›¾æ ¼é‡Œå…‹",
+ "symbol": "MNT"
+ },
+ "BDT": {
+ "name": "孟加拉塔å¡",
+ "symbol": "BDT"
+ },
+ "PEN": {
+ "name": "秘é²æ–°ç´¢å°”",
+ "symbol": "PEN"
+ },
+ "MMK": {
+ "name": "缅甸元",
+ "symbol": "MMK"
+ },
+ "MDL": {
+ "name": "摩尔多瓦列伊",
+ "symbol": "MDL"
+ },
+ "MAD": {
+ "name": "摩洛哥迪拉姆",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "莫桑比克美æå¡",
+ "symbol": "MZN"
+ },
+ "MXN": {
+ "name": "墨西哥比索",
+ "symbol": "MX$"
+ },
+ "NAD": {
+ "name": "纳米比亚元",
+ "symbol": "NAD"
+ },
+ "ZAR": {
+ "name": "å—éžå…°ç‰¹",
+ "symbol": "ZAR"
+ },
+ "SSP": {
+ "name": "å—è‹ä¸¹é•‘",
+ "symbol": "SSP"
+ },
+ "NIO": {
+ "name": "尼加拉瓜科多巴",
+ "symbol": "NIO"
+ },
+ "NPR": {
+ "name": "尼泊尔å¢æ¯”",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "尼日利亚奈拉",
+ "symbol": "NGN"
+ },
+ "NOK": {
+ "name": "挪å¨å…‹æœ—",
+ "symbol": "NOK"
+ },
+ "EUR": {
+ "name": "欧元",
+ "symbol": "€"
+ },
+ "CNY": {
+ "name": "人民å¸",
+ "symbol": "CNÂ¥"
+ },
+ "JPY": {
+ "name": "日元",
+ "symbol": "JPÂ¥"
+ },
+ "SEK": {
+ "name": "瑞典克朗",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "瑞士法郎",
+ "symbol": "CHF"
+ },
+ "SVC": {
+ "name": "è¨å°”瓦多科朗",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "è¨æ‘©äºšå¡”拉",
+ "symbol": "WST"
+ },
+ "RSD": {
+ "name": "塞尔维亚第纳尔",
+ "symbol": "RSD"
+ },
+ "SLL": {
+ "name": "塞拉利昂利昂",
+ "symbol": "SLL"
+ },
+ "SCR": {
+ "name": "塞舌尔å¢æ¯”",
+ "symbol": "SCR"
+ },
+ "SAR": {
+ "name": "沙特里亚尔",
+ "symbol": "SAR"
+ },
+ "STD": {
+ "name": "圣多美和普林西比多布拉",
+ "symbol": "STD"
+ },
+ "SHP": {
+ "name": "圣赫勒拿群岛磅",
+ "symbol": "SHP"
+ },
+ "LKR": {
+ "name": "斯里兰å¡å¢æ¯”",
+ "symbol": "LKR"
+ },
+ "SZL": {
+ "name": "æ–¯å¨å£«å…°é‡Œå…°å‰å°¼",
+ "symbol": "SZL"
+ },
+ "SDG": {
+ "name": "è‹ä¸¹é•‘",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "è‹é‡Œå—å…ƒ",
+ "symbol": "SRD"
+ },
+ "SBD": {
+ "name": "所罗门群岛元",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "索马里先令",
+ "symbol": "SOS"
+ },
+ "TJS": {
+ "name": "å¡”å‰å…‹æ–¯å¦ç´¢èŽ«å°¼",
+ "symbol": "TJS"
+ },
+ "XPF": {
+ "name": "太平洋法郎",
+ "symbol": "CFPF"
+ },
+ "THB": {
+ "name": "æ³°é“¢",
+ "symbol": "฿"
+ },
+ "TZS": {
+ "name": "å¦æ¡‘尼亚先令",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "汤加潘加",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "特立尼达和多巴哥元",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "çªå°¼æ–¯ç¬¬çº³å°”",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "土耳其里拉",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "土库曼斯å¦é©¬çº³ç‰¹",
+ "symbol": "TMT"
+ },
+ "VUV": {
+ "name": "瓦努阿图瓦图",
+ "symbol": "VUV"
+ },
+ "GTQ": {
+ "name": "å±åœ°é©¬æ‹‰æ ¼æŸ¥å°”",
+ "symbol": "GTQ"
+ },
+ "VEF": {
+ "name": "委内瑞拉玻利瓦尔",
+ "symbol": "VEF"
+ },
+ "BND": {
+ "name": "文莱元",
+ "symbol": "BND"
+ },
+ "UGX": {
+ "name": "乌干达先令",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "乌克兰赫夫纳",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "乌拉圭比索",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "乌兹别克斯å¦è‹å§†",
+ "symbol": "UZS"
+ },
+ "SGD": {
+ "name": "新加å¡å…ƒ",
+ "symbol": "SGD"
+ },
+ "TWD": {
+ "name": "æ–°å°å¸",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "新西兰元",
+ "symbol": "NZ$"
+ },
+ "HUF": {
+ "name": "匈牙利ç¦æž—",
+ "symbol": "HUF"
+ },
+ "SYP": {
+ "name": "å™åˆ©äºšé•‘",
+ "symbol": "SYP"
+ },
+ "JMD": {
+ "name": "牙买加元",
+ "symbol": "JMD"
+ },
+ "AMD": {
+ "name": "亚美尼亚德拉姆",
+ "symbol": "AMD"
+ },
+ "YER": {
+ "name": "也门里亚尔",
+ "symbol": "YER"
+ },
+ "IQD": {
+ "name": "伊拉克第纳尔",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "伊朗里亚尔",
+ "symbol": "IRR"
+ },
+ "ILS": {
+ "name": "以色列新谢克尔",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "å°åº¦å¢æ¯”",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "å°åº¦å°¼è¥¿äºšç›¾",
+ "symbol": "IDR"
+ },
+ "GBP": {
+ "name": "英镑",
+ "symbol": "£"
+ },
+ "JOD": {
+ "name": "约旦第纳尔",
+ "symbol": "JOD"
+ },
+ "VND": {
+ "name": "越å—盾",
+ "symbol": "â‚«"
+ },
+ "ZMW": {
+ "name": "赞比亚克瓦查",
+ "symbol": "ZMW"
+ },
+ "GIP": {
+ "name": "直布罗陀镑",
+ "symbol": "GIP"
+ },
+ "CLP": {
+ "name": "智利比索",
+ "symbol": "CLP"
+ },
+ "XAF": {
+ "name": "中éžé‡‘èžåˆä½œæ³•éƒŽ",
+ "symbol": "FCFA"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/zh-Hans-MO.json b/library/intl/resources/currency/zh-Hans-MO.json
new file mode 100644
index 000000000..a2acb7cc9
--- /dev/null
+++ b/library/intl/resources/currency/zh-Hans-MO.json
@@ -0,0 +1,634 @@
+{
+ "ALL": {
+ "name": "阿尔巴尼亚列克",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "阿尔åŠåˆ©äºšç¬¬çº³å°”",
+ "symbol": "DZD"
+ },
+ "AFN": {
+ "name": "阿富汗尼",
+ "symbol": "AFN"
+ },
+ "ARS": {
+ "name": "阿根廷比索",
+ "symbol": "ARS"
+ },
+ "AED": {
+ "name": "阿è”酋迪拉姆",
+ "symbol": "AED"
+ },
+ "AWG": {
+ "name": "阿é²å·´å¼—ç½—æž—",
+ "symbol": "AWG"
+ },
+ "OMR": {
+ "name": "阿曼里亚尔",
+ "symbol": "OMR"
+ },
+ "AZN": {
+ "name": "阿塞拜疆马纳特",
+ "symbol": "AZN"
+ },
+ "EGP": {
+ "name": "埃åŠé•‘",
+ "symbol": "EGP"
+ },
+ "ETB": {
+ "name": "埃塞俄比亚比尔",
+ "symbol": "ETB"
+ },
+ "AOA": {
+ "name": "安哥拉宽扎",
+ "symbol": "AOA"
+ },
+ "AUD": {
+ "name": "澳大利亚元",
+ "symbol": "AU$"
+ },
+ "MOP": {
+ "name": "澳门元",
+ "symbol": "MOP$"
+ },
+ "BBD": {
+ "name": "巴巴多斯元",
+ "symbol": "BBD"
+ },
+ "PGK": {
+ "name": "巴布亚新几内亚基那",
+ "symbol": "PGK"
+ },
+ "BSD": {
+ "name": "巴哈马元",
+ "symbol": "BSD"
+ },
+ "PKR": {
+ "name": "巴基斯å¦å¢æ¯”",
+ "symbol": "PKR"
+ },
+ "PYG": {
+ "name": "巴拉圭瓜拉尼",
+ "symbol": "PYG"
+ },
+ "BHD": {
+ "name": "巴林第纳尔",
+ "symbol": "BHD"
+ },
+ "PAB": {
+ "name": "巴拿马巴波亚",
+ "symbol": "PAB"
+ },
+ "BRL": {
+ "name": "巴西雷亚尔",
+ "symbol": "R$"
+ },
+ "BYR": {
+ "name": "白俄罗斯å¢å¸ƒ",
+ "symbol": "BYR"
+ },
+ "BMD": {
+ "name": "百慕大元",
+ "symbol": "BMD"
+ },
+ "BGN": {
+ "name": "ä¿åŠ åˆ©äºšæ–°åˆ—å¼—",
+ "symbol": "BGN"
+ },
+ "ISK": {
+ "name": "冰岛克朗",
+ "symbol": "ISK"
+ },
+ "PLN": {
+ "name": "波兰兹罗æ",
+ "symbol": "PLN"
+ },
+ "BAM": {
+ "name": "波斯尼亚-黑塞哥维那å¯å…‘æ¢é©¬å…‹",
+ "symbol": "BAM"
+ },
+ "BOB": {
+ "name": "玻利维亚诺",
+ "symbol": "BOB"
+ },
+ "BZD": {
+ "name": "伯利兹元",
+ "symbol": "BZD"
+ },
+ "BWP": {
+ "name": "åšèŒ¨ç“¦çº³æ™®æ‹‰",
+ "symbol": "BWP"
+ },
+ "BTN": {
+ "name": "ä¸ä¸¹åŠªå°”特é²å§†",
+ "symbol": "BTN"
+ },
+ "BIF": {
+ "name": "布隆迪法郎",
+ "symbol": "BIF"
+ },
+ "KPW": {
+ "name": "æœé²œå…ƒ",
+ "symbol": "KPW"
+ },
+ "DKK": {
+ "name": "丹麦克朗",
+ "symbol": "DKK"
+ },
+ "XCD": {
+ "name": "东加勒比元",
+ "symbol": "EC$"
+ },
+ "DOP": {
+ "name": "多米尼加比索",
+ "symbol": "DOP"
+ },
+ "RUB": {
+ "name": "ä¿„ç½—æ–¯å¢å¸ƒ",
+ "symbol": "RUB"
+ },
+ "ERN": {
+ "name": "厄立特里亚纳克法",
+ "symbol": "ERN"
+ },
+ "XOF": {
+ "name": "éžæ´²é‡‘èžå…±åŒä½“法郎",
+ "symbol": "CFA"
+ },
+ "PHP": {
+ "name": "è²å¾‹å®¾æ¯”ç´¢",
+ "symbol": "PHP"
+ },
+ "FJD": {
+ "name": "æ–济元",
+ "symbol": "FJD"
+ },
+ "CVE": {
+ "name": "佛得角埃斯库多",
+ "symbol": "CVE"
+ },
+ "FKP": {
+ "name": "ç¦å…‹å…°ç¾¤å²›é•‘",
+ "symbol": "FKP"
+ },
+ "GMD": {
+ "name": "冈比亚达拉西",
+ "symbol": "GMD"
+ },
+ "CDF": {
+ "name": "刚果法郎",
+ "symbol": "CDF"
+ },
+ "HKD": {
+ "name": "港元",
+ "symbol": "HK$"
+ },
+ "COP": {
+ "name": "哥伦比亚比索",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "哥斯达黎加科朗",
+ "symbol": "CRC"
+ },
+ "GEL": {
+ "name": "æ ¼é²å‰äºšæ‹‰é‡Œ",
+ "symbol": "GEL"
+ },
+ "CUP": {
+ "name": "å¤å·´æ¯”ç´¢",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "å¤å·´å¯å…‘æ¢æ¯”ç´¢",
+ "symbol": "CUC"
+ },
+ "GYD": {
+ "name": "圭亚那元",
+ "symbol": "GYD"
+ },
+ "KZT": {
+ "name": "哈è¨å…‹æ–¯å¦è…¾æ ¼",
+ "symbol": "KZT"
+ },
+ "HTG": {
+ "name": "海地å¤å¾·",
+ "symbol": "HTG"
+ },
+ "KRW": {
+ "name": "韩元",
+ "symbol": "₩"
+ },
+ "ANG": {
+ "name": "è·å±žå®‰çš„列斯盾",
+ "symbol": "ANG"
+ },
+ "HNL": {
+ "name": "洪都拉斯伦皮拉",
+ "symbol": "HNL"
+ },
+ "DJF": {
+ "name": "å‰å¸ƒæ法郎",
+ "symbol": "DJF"
+ },
+ "KGS": {
+ "name": "å‰å°”å‰æ–¯æ–¯å¦ç´¢å§†",
+ "symbol": "KGS"
+ },
+ "GNF": {
+ "name": "几内亚法郎",
+ "symbol": "GNF"
+ },
+ "CAD": {
+ "name": "加拿大元",
+ "symbol": "CA$"
+ },
+ "GHS": {
+ "name": "加纳塞地",
+ "symbol": "GHS"
+ },
+ "KHR": {
+ "name": "柬埔寨瑞尔",
+ "symbol": "KHR"
+ },
+ "CZK": {
+ "name": "æ·å…‹å…‹éƒŽ",
+ "symbol": "CZK"
+ },
+ "ZWL": {
+ "name": "津巴布韦元 (2009)",
+ "symbol": "ZWL"
+ },
+ "QAR": {
+ "name": "å¡å¡”尔里亚尔",
+ "symbol": "QAR"
+ },
+ "KYD": {
+ "name": "开曼元",
+ "symbol": "KYD"
+ },
+ "KMF": {
+ "name": "科摩罗法郎",
+ "symbol": "KMF"
+ },
+ "KWD": {
+ "name": "科å¨ç‰¹ç¬¬çº³å°”",
+ "symbol": "KWD"
+ },
+ "HRK": {
+ "name": "克罗地亚库纳",
+ "symbol": "HRK"
+ },
+ "KES": {
+ "name": "肯尼亚先令",
+ "symbol": "KES"
+ },
+ "LSL": {
+ "name": "莱索托洛蒂",
+ "symbol": "LSL"
+ },
+ "LAK": {
+ "name": "è€æŒåŸºæ™®",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "黎巴嫩镑",
+ "symbol": "LBP"
+ },
+ "LTL": {
+ "name": "立陶宛立特",
+ "symbol": "LTL"
+ },
+ "LRD": {
+ "name": "利比里亚元",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "利比亚第纳尔",
+ "symbol": "LYD"
+ },
+ "RWF": {
+ "name": "å¢æ—ºè¾¾æ³•éƒŽ",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "罗马尼亚列伊",
+ "symbol": "RON"
+ },
+ "MGA": {
+ "name": "马达加斯加阿里亚里",
+ "symbol": "MGA"
+ },
+ "MVR": {
+ "name": "马尔代夫å¢è²äºš",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "马拉维克瓦查",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "马æ¥è¥¿äºšæž—å‰ç‰¹",
+ "symbol": "MYR"
+ },
+ "MKD": {
+ "name": "马其顿第纳尔",
+ "symbol": "MKD"
+ },
+ "MUR": {
+ "name": "毛里求斯å¢æ¯”",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "毛里塔尼亚乌å‰äºš",
+ "symbol": "MRO"
+ },
+ "USD": {
+ "name": "美元",
+ "symbol": "US$"
+ },
+ "MNT": {
+ "name": "è’™å¤å›¾æ ¼é‡Œå…‹",
+ "symbol": "MNT"
+ },
+ "BDT": {
+ "name": "孟加拉塔å¡",
+ "symbol": "BDT"
+ },
+ "PEN": {
+ "name": "秘é²æ–°ç´¢å°”",
+ "symbol": "PEN"
+ },
+ "MMK": {
+ "name": "缅甸元",
+ "symbol": "MMK"
+ },
+ "MDL": {
+ "name": "摩尔多瓦列伊",
+ "symbol": "MDL"
+ },
+ "MAD": {
+ "name": "摩洛哥迪拉姆",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "莫桑比克美æå¡",
+ "symbol": "MZN"
+ },
+ "MXN": {
+ "name": "墨西哥比索",
+ "symbol": "MX$"
+ },
+ "NAD": {
+ "name": "纳米比亚元",
+ "symbol": "NAD"
+ },
+ "ZAR": {
+ "name": "å—éžå…°ç‰¹",
+ "symbol": "ZAR"
+ },
+ "SSP": {
+ "name": "å—è‹ä¸¹é•‘",
+ "symbol": "SSP"
+ },
+ "NIO": {
+ "name": "尼加拉瓜科多巴",
+ "symbol": "NIO"
+ },
+ "NPR": {
+ "name": "尼泊尔å¢æ¯”",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "尼日利亚奈拉",
+ "symbol": "NGN"
+ },
+ "NOK": {
+ "name": "挪å¨å…‹æœ—",
+ "symbol": "NOK"
+ },
+ "EUR": {
+ "name": "欧元",
+ "symbol": "€"
+ },
+ "CNY": {
+ "name": "人民å¸",
+ "symbol": "CNÂ¥"
+ },
+ "JPY": {
+ "name": "日元",
+ "symbol": "JPÂ¥"
+ },
+ "SEK": {
+ "name": "瑞典克朗",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "瑞士法郎",
+ "symbol": "CHF"
+ },
+ "SVC": {
+ "name": "è¨å°”瓦多科朗",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "è¨æ‘©äºšå¡”拉",
+ "symbol": "WST"
+ },
+ "RSD": {
+ "name": "塞尔维亚第纳尔",
+ "symbol": "RSD"
+ },
+ "SLL": {
+ "name": "塞拉利昂利昂",
+ "symbol": "SLL"
+ },
+ "SCR": {
+ "name": "塞舌尔å¢æ¯”",
+ "symbol": "SCR"
+ },
+ "SAR": {
+ "name": "沙特里亚尔",
+ "symbol": "SAR"
+ },
+ "STD": {
+ "name": "圣多美和普林西比多布拉",
+ "symbol": "STD"
+ },
+ "SHP": {
+ "name": "圣赫勒拿群岛磅",
+ "symbol": "SHP"
+ },
+ "LKR": {
+ "name": "斯里兰å¡å¢æ¯”",
+ "symbol": "LKR"
+ },
+ "SZL": {
+ "name": "æ–¯å¨å£«å…°é‡Œå…°å‰å°¼",
+ "symbol": "SZL"
+ },
+ "SDG": {
+ "name": "è‹ä¸¹é•‘",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "è‹é‡Œå—å…ƒ",
+ "symbol": "SRD"
+ },
+ "SBD": {
+ "name": "所罗门群岛元",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "索马里先令",
+ "symbol": "SOS"
+ },
+ "TJS": {
+ "name": "å¡”å‰å…‹æ–¯å¦ç´¢èŽ«å°¼",
+ "symbol": "TJS"
+ },
+ "XPF": {
+ "name": "太平洋法郎",
+ "symbol": "CFPF"
+ },
+ "THB": {
+ "name": "æ³°é“¢",
+ "symbol": "฿"
+ },
+ "TZS": {
+ "name": "å¦æ¡‘尼亚先令",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "汤加潘加",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "特立尼达和多巴哥元",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "çªå°¼æ–¯ç¬¬çº³å°”",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "土耳其里拉",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "土库曼斯å¦é©¬çº³ç‰¹",
+ "symbol": "TMT"
+ },
+ "VUV": {
+ "name": "瓦努阿图瓦图",
+ "symbol": "VUV"
+ },
+ "GTQ": {
+ "name": "å±åœ°é©¬æ‹‰æ ¼æŸ¥å°”",
+ "symbol": "GTQ"
+ },
+ "VEF": {
+ "name": "委内瑞拉玻利瓦尔",
+ "symbol": "VEF"
+ },
+ "BND": {
+ "name": "文莱元",
+ "symbol": "BND"
+ },
+ "UGX": {
+ "name": "乌干达先令",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "乌克兰格里夫纳",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "乌拉圭比索",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "乌兹别克斯å¦è‹å§†",
+ "symbol": "UZS"
+ },
+ "SGD": {
+ "name": "新加å¡å…ƒ",
+ "symbol": "SGD"
+ },
+ "TWD": {
+ "name": "æ–°å°å¸",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "新西兰元",
+ "symbol": "NZ$"
+ },
+ "HUF": {
+ "name": "匈牙利ç¦æž—",
+ "symbol": "HUF"
+ },
+ "SYP": {
+ "name": "å™åˆ©äºšé•‘",
+ "symbol": "SYP"
+ },
+ "JMD": {
+ "name": "牙买加元",
+ "symbol": "JMD"
+ },
+ "AMD": {
+ "name": "亚美尼亚德拉姆",
+ "symbol": "AMD"
+ },
+ "YER": {
+ "name": "也门里亚尔",
+ "symbol": "YER"
+ },
+ "IQD": {
+ "name": "伊拉克第纳尔",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "伊朗里亚尔",
+ "symbol": "IRR"
+ },
+ "ILS": {
+ "name": "以色列新谢克尔",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "å°åº¦å¢æ¯”",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "å°åº¦å°¼è¥¿äºšç›¾",
+ "symbol": "IDR"
+ },
+ "GBP": {
+ "name": "英镑",
+ "symbol": "£"
+ },
+ "JOD": {
+ "name": "约旦第纳尔",
+ "symbol": "JOD"
+ },
+ "VND": {
+ "name": "越å—盾",
+ "symbol": "â‚«"
+ },
+ "ZMW": {
+ "name": "赞比亚克瓦查",
+ "symbol": "ZMW"
+ },
+ "GIP": {
+ "name": "直布罗陀镑",
+ "symbol": "GIP"
+ },
+ "CLP": {
+ "name": "智利比索",
+ "symbol": "CLP"
+ },
+ "XAF": {
+ "name": "中éžé‡‘èžåˆä½œæ³•éƒŽ",
+ "symbol": "FCFA"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/zh-Hans-SG.json b/library/intl/resources/currency/zh-Hans-SG.json
new file mode 100644
index 000000000..f092694fa
--- /dev/null
+++ b/library/intl/resources/currency/zh-Hans-SG.json
@@ -0,0 +1,634 @@
+{
+ "ALL": {
+ "name": "阿尔巴尼亚列克",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "阿尔åŠåˆ©äºšç¬¬çº³å°”",
+ "symbol": "DZD"
+ },
+ "AFN": {
+ "name": "阿富汗尼",
+ "symbol": "AFN"
+ },
+ "ARS": {
+ "name": "阿根廷比索",
+ "symbol": "ARS"
+ },
+ "AED": {
+ "name": "阿è”酋迪拉姆",
+ "symbol": "AED"
+ },
+ "AWG": {
+ "name": "阿é²å·´å¼—ç½—æž—",
+ "symbol": "AWG"
+ },
+ "OMR": {
+ "name": "阿曼里亚尔",
+ "symbol": "OMR"
+ },
+ "AZN": {
+ "name": "阿塞拜疆马纳特",
+ "symbol": "AZN"
+ },
+ "EGP": {
+ "name": "埃åŠé•‘",
+ "symbol": "EGP"
+ },
+ "ETB": {
+ "name": "埃塞俄比亚比尔",
+ "symbol": "ETB"
+ },
+ "AOA": {
+ "name": "安哥拉宽扎",
+ "symbol": "AOA"
+ },
+ "AUD": {
+ "name": "澳大利亚元",
+ "symbol": "AU$"
+ },
+ "MOP": {
+ "name": "澳门元",
+ "symbol": "MOP"
+ },
+ "BBD": {
+ "name": "巴巴多斯元",
+ "symbol": "BBD"
+ },
+ "PGK": {
+ "name": "巴布亚新几内亚基那",
+ "symbol": "PGK"
+ },
+ "BSD": {
+ "name": "巴哈马元",
+ "symbol": "BSD"
+ },
+ "PKR": {
+ "name": "巴基斯å¦å¢æ¯”",
+ "symbol": "PKR"
+ },
+ "PYG": {
+ "name": "巴拉圭瓜拉尼",
+ "symbol": "PYG"
+ },
+ "BHD": {
+ "name": "巴林第纳尔",
+ "symbol": "BHD"
+ },
+ "PAB": {
+ "name": "巴拿马巴波亚",
+ "symbol": "PAB"
+ },
+ "BRL": {
+ "name": "巴西雷亚尔",
+ "symbol": "R$"
+ },
+ "BYR": {
+ "name": "白俄罗斯å¢å¸ƒ",
+ "symbol": "BYR"
+ },
+ "BMD": {
+ "name": "百慕大元",
+ "symbol": "BMD"
+ },
+ "BGN": {
+ "name": "ä¿åŠ åˆ©äºšæ–°åˆ—å¼—",
+ "symbol": "BGN"
+ },
+ "ISK": {
+ "name": "冰岛克朗",
+ "symbol": "ISK"
+ },
+ "PLN": {
+ "name": "波兰兹罗æ",
+ "symbol": "PLN"
+ },
+ "BAM": {
+ "name": "波斯尼亚-黑塞哥维那å¯å…‘æ¢é©¬å…‹",
+ "symbol": "BAM"
+ },
+ "BOB": {
+ "name": "玻利维亚诺",
+ "symbol": "BOB"
+ },
+ "BZD": {
+ "name": "伯利兹元",
+ "symbol": "BZD"
+ },
+ "BWP": {
+ "name": "åšèŒ¨ç“¦çº³æ™®æ‹‰",
+ "symbol": "BWP"
+ },
+ "BTN": {
+ "name": "ä¸ä¸¹åŠªå°”特é²å§†",
+ "symbol": "BTN"
+ },
+ "BIF": {
+ "name": "布隆迪法郎",
+ "symbol": "BIF"
+ },
+ "KPW": {
+ "name": "æœé²œå…ƒ",
+ "symbol": "KPW"
+ },
+ "DKK": {
+ "name": "丹麦克朗",
+ "symbol": "DKK"
+ },
+ "XCD": {
+ "name": "东加勒比元",
+ "symbol": "EC$"
+ },
+ "DOP": {
+ "name": "多米尼加比索",
+ "symbol": "DOP"
+ },
+ "RUB": {
+ "name": "ä¿„ç½—æ–¯å¢å¸ƒ",
+ "symbol": "RUB"
+ },
+ "ERN": {
+ "name": "厄立特里亚纳克法",
+ "symbol": "ERN"
+ },
+ "XOF": {
+ "name": "éžæ´²é‡‘èžå…±åŒä½“法郎",
+ "symbol": "CFA"
+ },
+ "PHP": {
+ "name": "è²å¾‹å®¾æ¯”ç´¢",
+ "symbol": "PHP"
+ },
+ "FJD": {
+ "name": "æ–济元",
+ "symbol": "FJD"
+ },
+ "CVE": {
+ "name": "佛得角埃斯库多",
+ "symbol": "CVE"
+ },
+ "FKP": {
+ "name": "ç¦å…‹å…°ç¾¤å²›é•‘",
+ "symbol": "FKP"
+ },
+ "GMD": {
+ "name": "冈比亚达拉西",
+ "symbol": "GMD"
+ },
+ "CDF": {
+ "name": "刚果法郎",
+ "symbol": "CDF"
+ },
+ "HKD": {
+ "name": "港元",
+ "symbol": "HK$"
+ },
+ "COP": {
+ "name": "哥伦比亚比索",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "哥斯达黎加科朗",
+ "symbol": "CRC"
+ },
+ "GEL": {
+ "name": "æ ¼é²å‰äºšæ‹‰é‡Œ",
+ "symbol": "GEL"
+ },
+ "CUP": {
+ "name": "å¤å·´æ¯”ç´¢",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "å¤å·´å¯å…‘æ¢æ¯”ç´¢",
+ "symbol": "CUC"
+ },
+ "GYD": {
+ "name": "圭亚那元",
+ "symbol": "GYD"
+ },
+ "KZT": {
+ "name": "哈è¨å…‹æ–¯å¦è…¾æ ¼",
+ "symbol": "KZT"
+ },
+ "HTG": {
+ "name": "海地å¤å¾·",
+ "symbol": "HTG"
+ },
+ "KRW": {
+ "name": "韩元",
+ "symbol": "₩"
+ },
+ "ANG": {
+ "name": "è·å±žå®‰çš„列斯盾",
+ "symbol": "ANG"
+ },
+ "HNL": {
+ "name": "洪都拉斯伦皮拉",
+ "symbol": "HNL"
+ },
+ "DJF": {
+ "name": "å‰å¸ƒæ法郎",
+ "symbol": "DJF"
+ },
+ "KGS": {
+ "name": "å‰å°”å‰æ–¯æ–¯å¦ç´¢å§†",
+ "symbol": "KGS"
+ },
+ "GNF": {
+ "name": "几内亚法郎",
+ "symbol": "GNF"
+ },
+ "CAD": {
+ "name": "加拿大元",
+ "symbol": "CA$"
+ },
+ "GHS": {
+ "name": "加纳塞地",
+ "symbol": "GHS"
+ },
+ "KHR": {
+ "name": "柬埔寨瑞尔",
+ "symbol": "KHR"
+ },
+ "CZK": {
+ "name": "æ·å…‹å…‹éƒŽ",
+ "symbol": "CZK"
+ },
+ "ZWL": {
+ "name": "津巴布韦元 (2009)",
+ "symbol": "ZWL"
+ },
+ "QAR": {
+ "name": "å¡å¡”尔里亚尔",
+ "symbol": "QAR"
+ },
+ "KYD": {
+ "name": "开曼元",
+ "symbol": "KYD"
+ },
+ "KMF": {
+ "name": "科摩罗法郎",
+ "symbol": "KMF"
+ },
+ "KWD": {
+ "name": "科å¨ç‰¹ç¬¬çº³å°”",
+ "symbol": "KWD"
+ },
+ "HRK": {
+ "name": "克罗地亚库纳",
+ "symbol": "HRK"
+ },
+ "KES": {
+ "name": "肯尼亚先令",
+ "symbol": "KES"
+ },
+ "LSL": {
+ "name": "莱索托洛蒂",
+ "symbol": "LSL"
+ },
+ "LAK": {
+ "name": "è€æŒåŸºæ™®",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "黎巴嫩镑",
+ "symbol": "LBP"
+ },
+ "LTL": {
+ "name": "立陶宛立特",
+ "symbol": "LTL"
+ },
+ "LRD": {
+ "name": "利比里亚元",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "利比亚第纳尔",
+ "symbol": "LYD"
+ },
+ "RWF": {
+ "name": "å¢æ—ºè¾¾æ³•éƒŽ",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "罗马尼亚列伊",
+ "symbol": "RON"
+ },
+ "MGA": {
+ "name": "马达加斯加阿里亚里",
+ "symbol": "MGA"
+ },
+ "MVR": {
+ "name": "马尔代夫å¢è²äºš",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "马拉维克瓦查",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "马æ¥è¥¿äºšæž—å‰ç‰¹",
+ "symbol": "MYR"
+ },
+ "MKD": {
+ "name": "马其顿第纳尔",
+ "symbol": "MKD"
+ },
+ "MUR": {
+ "name": "毛里求斯å¢æ¯”",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "毛里塔尼亚乌å‰äºš",
+ "symbol": "MRO"
+ },
+ "USD": {
+ "name": "美元",
+ "symbol": "US$"
+ },
+ "MNT": {
+ "name": "è’™å¤å›¾æ ¼é‡Œå…‹",
+ "symbol": "MNT"
+ },
+ "BDT": {
+ "name": "孟加拉塔å¡",
+ "symbol": "BDT"
+ },
+ "PEN": {
+ "name": "秘é²æ–°ç´¢å°”",
+ "symbol": "PEN"
+ },
+ "MMK": {
+ "name": "缅甸元",
+ "symbol": "MMK"
+ },
+ "MDL": {
+ "name": "摩尔多瓦列伊",
+ "symbol": "MDL"
+ },
+ "MAD": {
+ "name": "摩洛哥迪拉姆",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "莫桑比克美æå¡",
+ "symbol": "MZN"
+ },
+ "MXN": {
+ "name": "墨西哥比索",
+ "symbol": "MX$"
+ },
+ "NAD": {
+ "name": "纳米比亚元",
+ "symbol": "NAD"
+ },
+ "ZAR": {
+ "name": "å—éžå…°ç‰¹",
+ "symbol": "ZAR"
+ },
+ "SSP": {
+ "name": "å—è‹ä¸¹é•‘",
+ "symbol": "SSP"
+ },
+ "NIO": {
+ "name": "尼加拉瓜科多巴",
+ "symbol": "NIO"
+ },
+ "NPR": {
+ "name": "尼泊尔å¢æ¯”",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "尼日利亚奈拉",
+ "symbol": "NGN"
+ },
+ "NOK": {
+ "name": "挪å¨å…‹æœ—",
+ "symbol": "NOK"
+ },
+ "EUR": {
+ "name": "欧元",
+ "symbol": "€"
+ },
+ "CNY": {
+ "name": "人民å¸",
+ "symbol": "CNÂ¥"
+ },
+ "JPY": {
+ "name": "日元",
+ "symbol": "JPÂ¥"
+ },
+ "SEK": {
+ "name": "瑞典克朗",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "瑞士法郎",
+ "symbol": "CHF"
+ },
+ "SVC": {
+ "name": "è¨å°”瓦多科朗",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "è¨æ‘©äºšå¡”拉",
+ "symbol": "WST"
+ },
+ "RSD": {
+ "name": "塞尔维亚第纳尔",
+ "symbol": "RSD"
+ },
+ "SLL": {
+ "name": "塞拉利昂利昂",
+ "symbol": "SLL"
+ },
+ "SCR": {
+ "name": "塞舌尔å¢æ¯”",
+ "symbol": "SCR"
+ },
+ "SAR": {
+ "name": "沙特里亚尔",
+ "symbol": "SAR"
+ },
+ "STD": {
+ "name": "圣多美和普林西比多布拉",
+ "symbol": "STD"
+ },
+ "SHP": {
+ "name": "圣赫勒拿群岛磅",
+ "symbol": "SHP"
+ },
+ "LKR": {
+ "name": "斯里兰å¡å¢æ¯”",
+ "symbol": "LKR"
+ },
+ "SZL": {
+ "name": "æ–¯å¨å£«å…°é‡Œå…°å‰å°¼",
+ "symbol": "SZL"
+ },
+ "SDG": {
+ "name": "è‹ä¸¹é•‘",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "è‹é‡Œå—å…ƒ",
+ "symbol": "SRD"
+ },
+ "SBD": {
+ "name": "所罗门群岛元",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "索马里先令",
+ "symbol": "SOS"
+ },
+ "TJS": {
+ "name": "å¡”å‰å…‹æ–¯å¦ç´¢èŽ«å°¼",
+ "symbol": "TJS"
+ },
+ "XPF": {
+ "name": "太平洋法郎",
+ "symbol": "CFPF"
+ },
+ "THB": {
+ "name": "æ³°é“¢",
+ "symbol": "฿"
+ },
+ "TZS": {
+ "name": "å¦æ¡‘尼亚先令",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "汤加潘加",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "特立尼达和多巴哥元",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "çªå°¼æ–¯ç¬¬çº³å°”",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "土耳其里拉",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "土库曼斯å¦é©¬çº³ç‰¹",
+ "symbol": "TMT"
+ },
+ "VUV": {
+ "name": "瓦努阿图瓦图",
+ "symbol": "VUV"
+ },
+ "GTQ": {
+ "name": "å±åœ°é©¬æ‹‰æ ¼æŸ¥å°”",
+ "symbol": "GTQ"
+ },
+ "VEF": {
+ "name": "委内瑞拉玻利瓦尔",
+ "symbol": "VEF"
+ },
+ "BND": {
+ "name": "文莱元",
+ "symbol": "BND"
+ },
+ "UGX": {
+ "name": "乌干达先令",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "乌克兰格里夫纳",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "乌拉圭比索",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "乌兹别克斯å¦è‹å§†",
+ "symbol": "UZS"
+ },
+ "SGD": {
+ "name": "新加å¡å…ƒ",
+ "symbol": "$"
+ },
+ "TWD": {
+ "name": "æ–°å°å¸",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "新西兰元",
+ "symbol": "NZ$"
+ },
+ "HUF": {
+ "name": "匈牙利ç¦æž—",
+ "symbol": "HUF"
+ },
+ "SYP": {
+ "name": "å™åˆ©äºšé•‘",
+ "symbol": "SYP"
+ },
+ "JMD": {
+ "name": "牙买加元",
+ "symbol": "JMD"
+ },
+ "AMD": {
+ "name": "亚美尼亚德拉姆",
+ "symbol": "AMD"
+ },
+ "YER": {
+ "name": "也门里亚尔",
+ "symbol": "YER"
+ },
+ "IQD": {
+ "name": "伊拉克第纳尔",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "伊朗里亚尔",
+ "symbol": "IRR"
+ },
+ "ILS": {
+ "name": "以色列新谢克尔",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "å°åº¦å¢æ¯”",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "å°åº¦å°¼è¥¿äºšç›¾",
+ "symbol": "IDR"
+ },
+ "GBP": {
+ "name": "英镑",
+ "symbol": "£"
+ },
+ "JOD": {
+ "name": "约旦第纳尔",
+ "symbol": "JOD"
+ },
+ "VND": {
+ "name": "越å—盾",
+ "symbol": "â‚«"
+ },
+ "ZMW": {
+ "name": "赞比亚克瓦查",
+ "symbol": "ZMW"
+ },
+ "GIP": {
+ "name": "直布罗陀镑",
+ "symbol": "GIP"
+ },
+ "CLP": {
+ "name": "智利比索",
+ "symbol": "CLP"
+ },
+ "XAF": {
+ "name": "中éžé‡‘èžåˆä½œæ³•éƒŽ",
+ "symbol": "FCFA"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/zh-Hant-HK.json b/library/intl/resources/currency/zh-Hant-HK.json
new file mode 100644
index 000000000..26ee4ec91
--- /dev/null
+++ b/library/intl/resources/currency/zh-Hant-HK.json
@@ -0,0 +1,634 @@
+{
+ "CNY": {
+ "name": "人民幣",
+ "symbol": "CNÂ¥"
+ },
+ "YER": {
+ "name": "也門里雅",
+ "symbol": "YER"
+ },
+ "TTD": {
+ "name": "åƒé‡Œé”åŠæ‰˜å·´å“¥å…ƒ",
+ "symbol": "TTD"
+ },
+ "TMT": {
+ "name": "土庫曼馬ç´ç‰¹",
+ "symbol": "TMT"
+ },
+ "BTN": {
+ "name": "ä¸ä¸¹é‚£ç‰¹å€«",
+ "symbol": "BTN"
+ },
+ "XAF": {
+ "name": "中éžæ³•éƒŽ",
+ "symbol": "FCFA"
+ },
+ "DKK": {
+ "name": "丹麥克朗",
+ "symbol": "DKK"
+ },
+ "ERN": {
+ "name": "厄立特里亞ç´å…‹æ³•",
+ "symbol": "ERN"
+ },
+ "XPF": {
+ "name": "太平洋法郎",
+ "symbol": "CFPF"
+ },
+ "BBD": {
+ "name": "巴巴多斯元",
+ "symbol": "BBD"
+ },
+ "PGK": {
+ "name": "巴布亞新畿內亞基那",
+ "symbol": "PGK"
+ },
+ "BRL": {
+ "name": "巴西里拉",
+ "symbol": "R$"
+ },
+ "PYG": {
+ "name": "巴拉圭瓜拉尼",
+ "symbol": "PYG"
+ },
+ "BHD": {
+ "name": "巴林第ç´çˆ¾",
+ "symbol": "BHD"
+ },
+ "BSD": {
+ "name": "巴哈馬元",
+ "symbol": "BSD"
+ },
+ "PAB": {
+ "name": "巴拿馬巴波亞",
+ "symbol": "PAB"
+ },
+ "PKR": {
+ "name": "巴基斯å¦ç›§æ¯”",
+ "symbol": "PKR"
+ },
+ "JPY": {
+ "name": "日圓",
+ "symbol": "Â¥"
+ },
+ "MUR": {
+ "name": "毛里求斯盧布",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "毛里塔尼亞çƒå‰äºž",
+ "symbol": "MRO"
+ },
+ "JMD": {
+ "name": "牙買加元",
+ "symbol": "JMD"
+ },
+ "ILS": {
+ "name": "以色列新è¬å…‹çˆ¾",
+ "symbol": "₪"
+ },
+ "CAD": {
+ "name": "加元",
+ "symbol": "CA$"
+ },
+ "GHS": {
+ "name": "加ç´å¡žåœ°",
+ "symbol": "GHS"
+ },
+ "KPW": {
+ "name": "北韓圓",
+ "symbol": "KPW"
+ },
+ "KZT": {
+ "name": "å¡æ‰Žå…‹æ–¯å¦å¦å‰",
+ "symbol": "KZT"
+ },
+ "QAR": {
+ "name": "å¡å¡”爾里亞爾",
+ "symbol": "QAR"
+ },
+ "CUC": {
+ "name": "å¤å·´å¯è½‰æ›æŠ«ç´¢",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "å¤å·´æŠ«ç´¢",
+ "symbol": "CUP"
+ },
+ "SZL": {
+ "name": "å²ç“¦æ¿Ÿè˜­é‡Œæœ—å‰å°¼",
+ "symbol": "SZL"
+ },
+ "NGN": {
+ "name": "尼日利亞奈拉",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "尼加拉瓜金科多巴",
+ "symbol": "NIO"
+ },
+ "NPR": {
+ "name": "尼泊爾盧比",
+ "symbol": "NPR"
+ },
+ "BIF": {
+ "name": "布隆迪法郎",
+ "symbol": "BIF"
+ },
+ "VUV": {
+ "name": "瓦努阿圖瓦圖",
+ "symbol": "VUV"
+ },
+ "BYR": {
+ "name": "白俄羅斯盧布",
+ "symbol": "BYR"
+ },
+ "LTL": {
+ "name": "立陶宛立特",
+ "symbol": "LTL"
+ },
+ "IQD": {
+ "name": "伊拉克第ç´çˆ¾",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "伊朗里亞爾",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "冰島克朗",
+ "symbol": "ISK"
+ },
+ "HUF": {
+ "name": "匈牙利ç¦æž—",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "å°å°¼ç›¾",
+ "symbol": "IDR"
+ },
+ "INR": {
+ "name": "å°åº¦ç›§æ¯”",
+ "symbol": "₹"
+ },
+ "GTQ": {
+ "name": "å±åœ°é¦¬æ‹‰æ ¼æŸ¥çˆ¾",
+ "symbol": "GTQ"
+ },
+ "DJF": {
+ "name": "å‰å¸ƒåœ°æ³•éƒŽ",
+ "symbol": "DJF"
+ },
+ "KGS": {
+ "name": "å‰çˆ¾å‰æ–¯ç´¢å§†",
+ "symbol": "KGS"
+ },
+ "GYD": {
+ "name": "圭亞那元",
+ "symbol": "GYD"
+ },
+ "DOP": {
+ "name": "多明尼加披索",
+ "symbol": "DOP"
+ },
+ "XOF": {
+ "name": "多哥éžæ´²å…±åŒé«”法郎",
+ "symbol": "CFA"
+ },
+ "AOA": {
+ "name": "安哥拉寬扎",
+ "symbol": "AOA"
+ },
+ "BMD": {
+ "name": "百慕é”å¹£",
+ "symbol": "BMD"
+ },
+ "WST": {
+ "name": "西薩摩亞塔拉",
+ "symbol": "WST"
+ },
+ "BZD": {
+ "name": "伯利茲元",
+ "symbol": "BZD"
+ },
+ "CVE": {
+ "name": "佛得角埃斯庫多",
+ "symbol": "CVE"
+ },
+ "HRK": {
+ "name": "克羅地亞庫ç´",
+ "symbol": "HRK"
+ },
+ "LRD": {
+ "name": "利比利亞元",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "利比亞第ç´çˆ¾",
+ "symbol": "LYD"
+ },
+ "BND": {
+ "name": "汶èŠå…ƒ",
+ "symbol": "BND"
+ },
+ "SAR": {
+ "name": "沙特阿拉伯里亞爾",
+ "symbol": "SAR"
+ },
+ "ZWL": {
+ "name": "辛巴å¨å…ƒ (2009)",
+ "symbol": "ZWL"
+ },
+ "AMD": {
+ "name": "亞美尼亞德拉姆",
+ "symbol": "AMD"
+ },
+ "AZN": {
+ "name": "亞塞拜疆馬ç´ç‰¹",
+ "symbol": "AZN"
+ },
+ "TZS": {
+ "name": "å¦å°šå°¼äºžå…ˆä»¤",
+ "symbol": "TZS"
+ },
+ "VEF": {
+ "name": "委內瑞拉玻利瓦",
+ "symbol": "VEF"
+ },
+ "BDT": {
+ "name": "孟加拉塔å¡",
+ "symbol": "BDT"
+ },
+ "ZMW": {
+ "name": "尚比亞克瓦查",
+ "symbol": "ZMW"
+ },
+ "GMD": {
+ "name": "岡比亞é”拉西",
+ "symbol": "GMD"
+ },
+ "SBD": {
+ "name": "所羅門群島元",
+ "symbol": "SBD"
+ },
+ "XCD": {
+ "name": "æ±åŠ å‹’比元",
+ "symbol": "EC$"
+ },
+ "TOP": {
+ "name": "æ±åŠ æ½˜åŠ ",
+ "symbol": "TOP"
+ },
+ "BAM": {
+ "name": "波士尼亞與赫塞哥維ç´å¯è½‰æ›é¦¬å…‹",
+ "symbol": "BAM"
+ },
+ "PLN": {
+ "name": "波蘭茲羅æ",
+ "symbol": "PLN"
+ },
+ "GIP": {
+ "name": "直布羅陀鎊",
+ "symbol": "GIP"
+ },
+ "KES": {
+ "name": "肯尼亞先令",
+ "symbol": "KES"
+ },
+ "AED": {
+ "name": "阿拉伯è¯åˆé…‹é•·åœ‹è¿ªçˆ¾æ±—",
+ "symbol": "AED"
+ },
+ "ARS": {
+ "name": "阿根廷披索",
+ "symbol": "ARS"
+ },
+ "OMR": {
+ "name": "阿曼里奧",
+ "symbol": "OMR"
+ },
+ "AFN": {
+ "name": "阿富汗尼",
+ "symbol": "AFN"
+ },
+ "DZD": {
+ "name": "阿爾åŠåˆ©äºžç¬¬ç´çˆ¾",
+ "symbol": "DZD"
+ },
+ "ALL": {
+ "name": "阿爾巴尼亞列克",
+ "symbol": "ALL"
+ },
+ "AWG": {
+ "name": "阿魯巴盾",
+ "symbol": "AWG"
+ },
+ "RUB": {
+ "name": "俄羅斯盧布",
+ "symbol": "RUB"
+ },
+ "BGN": {
+ "name": "ä¿åŠ åˆ©äºžæ–°åˆ—å¼—",
+ "symbol": "BGN"
+ },
+ "ZAR": {
+ "name": "å—éžè˜­ç‰¹",
+ "symbol": "ZAR"
+ },
+ "SSP": {
+ "name": "å—蘇丹鎊",
+ "symbol": "SSP"
+ },
+ "KHR": {
+ "name": "柬埔寨瑞爾",
+ "symbol": "KHR"
+ },
+ "HNL": {
+ "name": "洪都拉斯倫皮拉",
+ "symbol": "HNL"
+ },
+ "BOB": {
+ "name": "玻利維亞諾",
+ "symbol": "BOB"
+ },
+ "KWD": {
+ "name": "科å¨ç‰¹ç¬¬ç´çˆ¾",
+ "symbol": "KWD"
+ },
+ "KMF": {
+ "name": "科摩羅法郎",
+ "symbol": "KMF"
+ },
+ "TND": {
+ "name": "çªå°¼è¥¿äºžç¬¬ç´çˆ¾",
+ "symbol": "TND"
+ },
+ "JOD": {
+ "name": "約旦第ç´çˆ¾",
+ "symbol": "JOD"
+ },
+ "USD": {
+ "name": "美元",
+ "symbol": "US$"
+ },
+ "GBP": {
+ "name": "英鎊",
+ "symbol": "£"
+ },
+ "CDF": {
+ "name": "剛果法郎",
+ "symbol": "CDF"
+ },
+ "COP": {
+ "name": "哥倫比亞披索",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "哥斯é”黎加科郎",
+ "symbol": "CRC"
+ },
+ "EGP": {
+ "name": "埃åŠéŽŠ",
+ "symbol": "EGP"
+ },
+ "ETB": {
+ "name": "埃塞俄比亞比爾",
+ "symbol": "ETB"
+ },
+ "NOK": {
+ "name": "挪å¨å…‹æœ—",
+ "symbol": "NOK"
+ },
+ "GEL": {
+ "name": "格魯å‰äºžæ‹‰é‡Œ",
+ "symbol": "GEL"
+ },
+ "THB": {
+ "name": "泰銖",
+ "symbol": "฿"
+ },
+ "HTG": {
+ "name": "海地å¤å¾·",
+ "symbol": "HTG"
+ },
+ "UGX": {
+ "name": "çƒå¹²é”先令",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "çƒå…‹è˜­æ ¼é‡Œå¤«ç´",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "çƒæ‹‰åœ­æŠ«ç´¢",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "çƒèŒ²åˆ¥å…‹ç´¢å§†",
+ "symbol": "UZS"
+ },
+ "PEN": {
+ "name": "秘魯新太陽幣",
+ "symbol": "PEN"
+ },
+ "NAD": {
+ "name": "ç´ç±³æ¯”亞元",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "ç´è¥¿è˜­å…ƒ",
+ "symbol": "NZ$"
+ },
+ "SOS": {
+ "name": "索馬利亞先令",
+ "symbol": "SOS"
+ },
+ "MYR": {
+ "name": "馬來西亞令å‰",
+ "symbol": "MYR"
+ },
+ "MKD": {
+ "name": "馬其頓第ç´çˆ¾",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "馬拉維克瓦查",
+ "symbol": "MWK"
+ },
+ "MGA": {
+ "name": "馬é”加斯加艾瑞爾",
+ "symbol": "MGA"
+ },
+ "MVR": {
+ "name": "馬爾代夫盧éžäºž",
+ "symbol": "MVR"
+ },
+ "CZK": {
+ "name": "æ·å…‹å…‹æœ—",
+ "symbol": "CZK"
+ },
+ "SYP": {
+ "name": "敘利亞鎊",
+ "symbol": "SYP"
+ },
+ "ANG": {
+ "name": "è·å±¬å®‰åœ°åˆ—斯盾",
+ "symbol": "ANG"
+ },
+ "MZN": {
+ "name": "莫桑比克美æå¡",
+ "symbol": "MZN"
+ },
+ "BWP": {
+ "name": "åšèŒ¨ç“¦ç´æ™®æ‹‰",
+ "symbol": "BWP"
+ },
+ "GNF": {
+ "name": "幾內亞法郎",
+ "symbol": "GNF"
+ },
+ "FJD": {
+ "name": "æ–æ¿Ÿå…ƒ",
+ "symbol": "FJD"
+ },
+ "LKR": {
+ "name": "斯里蘭å¡ç›§æ¯”",
+ "symbol": "LKR"
+ },
+ "CLP": {
+ "name": "智利披索",
+ "symbol": "CLP"
+ },
+ "HKD": {
+ "name": "港元",
+ "symbol": "HK$"
+ },
+ "PHP": {
+ "name": "è²å¾‹è³“披索",
+ "symbol": "PHP"
+ },
+ "VND": {
+ "name": "越å—盾",
+ "symbol": "â‚«"
+ },
+ "KYD": {
+ "name": "開曼群島元",
+ "symbol": "KYD"
+ },
+ "TJS": {
+ "name": "å¡”å‰å…‹ç´¢èŽ«å°¼",
+ "symbol": "TJS"
+ },
+ "SLL": {
+ "name": "塞拉利昂利昂",
+ "symbol": "SLL"
+ },
+ "SCR": {
+ "name": "塞席爾盧比",
+ "symbol": "SCR"
+ },
+ "RSD": {
+ "name": "塞爾維亞第ç´çˆ¾",
+ "symbol": "RSD"
+ },
+ "TRY": {
+ "name": "新土耳其里拉",
+ "symbol": "TRY"
+ },
+ "SGD": {
+ "name": "新加å¡å…ƒ",
+ "symbol": "SGD"
+ },
+ "TWD": {
+ "name": "æ–°å°å¹£",
+ "symbol": "NT$"
+ },
+ "CHF": {
+ "name": "瑞士法郎",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "瑞典克朗",
+ "symbol": "SEK"
+ },
+ "STD": {
+ "name": "è–多美和普林西比多布拉",
+ "symbol": "STD"
+ },
+ "SHP": {
+ "name": "è–赫勒拿鎊",
+ "symbol": "SHP"
+ },
+ "FKP": {
+ "name": "ç¦å…‹è˜­ç¾¤å³¶éŽŠ",
+ "symbol": "FKP"
+ },
+ "MNT": {
+ "name": "è’™å¤åœ–格里克",
+ "symbol": "MNT"
+ },
+ "LAK": {
+ "name": "寮國基普",
+ "symbol": "LAK"
+ },
+ "MDL": {
+ "name": "æ‘©æœé›²åˆ—伊",
+ "symbol": "MDL"
+ },
+ "MAD": {
+ "name": "摩洛哥迪拉姆",
+ "symbol": "MAD"
+ },
+ "EUR": {
+ "name": "æ­å…ƒ",
+ "symbol": "€"
+ },
+ "MMK": {
+ "name": "緬甸元",
+ "symbol": "MMK"
+ },
+ "LBP": {
+ "name": "黎巴嫩鎊",
+ "symbol": "LBP"
+ },
+ "MXN": {
+ "name": "墨西哥披索",
+ "symbol": "MX$"
+ },
+ "AUD": {
+ "name": "澳元",
+ "symbol": "AU$"
+ },
+ "MOP": {
+ "name": "澳門元",
+ "symbol": "MOP"
+ },
+ "RWF": {
+ "name": "盧旺é”法郎",
+ "symbol": "RWF"
+ },
+ "LSL": {
+ "name": "賴索托洛蒂",
+ "symbol": "LSL"
+ },
+ "KRW": {
+ "name": "韓圓",
+ "symbol": "â‚©"
+ },
+ "SVC": {
+ "name": "薩爾瓦多科郎",
+ "symbol": "SVC"
+ },
+ "RON": {
+ "name": "羅馬尼亞列伊",
+ "symbol": "RON"
+ },
+ "SDG": {
+ "name": "蘇丹鎊",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "蘇利å—å…ƒ",
+ "symbol": "SRD"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/zh-Hant-MO.json b/library/intl/resources/currency/zh-Hant-MO.json
new file mode 100644
index 000000000..f8bf02f41
--- /dev/null
+++ b/library/intl/resources/currency/zh-Hant-MO.json
@@ -0,0 +1,634 @@
+{
+ "CNY": {
+ "name": "人民幣",
+ "symbol": "CNÂ¥"
+ },
+ "YER": {
+ "name": "也門里雅",
+ "symbol": "YER"
+ },
+ "TTD": {
+ "name": "åƒé‡Œé”åŠæ‰˜å·´å“¥å…ƒ",
+ "symbol": "TTD"
+ },
+ "TMT": {
+ "name": "土庫曼馬ç´ç‰¹",
+ "symbol": "TMT"
+ },
+ "BTN": {
+ "name": "ä¸ä¸¹é‚£ç‰¹å€«",
+ "symbol": "BTN"
+ },
+ "XAF": {
+ "name": "中éžæ³•éƒŽ",
+ "symbol": "FCFA"
+ },
+ "DKK": {
+ "name": "丹麥克朗",
+ "symbol": "DKK"
+ },
+ "ERN": {
+ "name": "厄立特里亞ç´å…‹æ³•",
+ "symbol": "ERN"
+ },
+ "XPF": {
+ "name": "太平洋法郎",
+ "symbol": "CFPF"
+ },
+ "BBD": {
+ "name": "巴巴多斯元",
+ "symbol": "BBD"
+ },
+ "PGK": {
+ "name": "巴布亞新畿內亞基那",
+ "symbol": "PGK"
+ },
+ "BRL": {
+ "name": "巴西里拉",
+ "symbol": "R$"
+ },
+ "PYG": {
+ "name": "巴拉圭瓜拉尼",
+ "symbol": "PYG"
+ },
+ "BHD": {
+ "name": "巴林第ç´çˆ¾",
+ "symbol": "BHD"
+ },
+ "BSD": {
+ "name": "巴哈馬元",
+ "symbol": "BSD"
+ },
+ "PAB": {
+ "name": "巴拿馬巴波亞",
+ "symbol": "PAB"
+ },
+ "PKR": {
+ "name": "巴基斯å¦ç›§æ¯”",
+ "symbol": "PKR"
+ },
+ "JPY": {
+ "name": "日圓",
+ "symbol": "Â¥"
+ },
+ "MUR": {
+ "name": "毛里求斯盧布",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "毛里塔尼亞çƒå‰äºž",
+ "symbol": "MRO"
+ },
+ "JMD": {
+ "name": "牙買加元",
+ "symbol": "JMD"
+ },
+ "ILS": {
+ "name": "以色列新è¬å…‹çˆ¾",
+ "symbol": "₪"
+ },
+ "CAD": {
+ "name": "加元",
+ "symbol": "CA$"
+ },
+ "GHS": {
+ "name": "加ç´å¡žåœ°",
+ "symbol": "GHS"
+ },
+ "KPW": {
+ "name": "北韓圓",
+ "symbol": "KPW"
+ },
+ "KZT": {
+ "name": "å¡æ‰Žå…‹æ–¯å¦å¦å‰",
+ "symbol": "KZT"
+ },
+ "QAR": {
+ "name": "å¡å¡”爾里亞爾",
+ "symbol": "QAR"
+ },
+ "CUC": {
+ "name": "å¤å·´å¯è½‰æ›æŠ«ç´¢",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "å¤å·´æŠ«ç´¢",
+ "symbol": "CUP"
+ },
+ "SZL": {
+ "name": "å²ç“¦æ¿Ÿè˜­é‡Œæœ—å‰å°¼",
+ "symbol": "SZL"
+ },
+ "NGN": {
+ "name": "尼日利亞奈拉",
+ "symbol": "NGN"
+ },
+ "NIO": {
+ "name": "尼加拉瓜金科多巴",
+ "symbol": "NIO"
+ },
+ "NPR": {
+ "name": "尼泊爾盧比",
+ "symbol": "NPR"
+ },
+ "BIF": {
+ "name": "布隆迪法郎",
+ "symbol": "BIF"
+ },
+ "VUV": {
+ "name": "瓦努阿圖瓦圖",
+ "symbol": "VUV"
+ },
+ "BYR": {
+ "name": "白俄羅斯盧布",
+ "symbol": "BYR"
+ },
+ "LTL": {
+ "name": "立陶宛立特",
+ "symbol": "LTL"
+ },
+ "IQD": {
+ "name": "伊拉克第ç´çˆ¾",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "伊朗里亞爾",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "冰島克朗",
+ "symbol": "ISK"
+ },
+ "HUF": {
+ "name": "匈牙利ç¦æž—",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "å°å°¼ç›¾",
+ "symbol": "IDR"
+ },
+ "INR": {
+ "name": "å°åº¦ç›§æ¯”",
+ "symbol": "₹"
+ },
+ "GTQ": {
+ "name": "å±åœ°é¦¬æ‹‰æ ¼æŸ¥çˆ¾",
+ "symbol": "GTQ"
+ },
+ "DJF": {
+ "name": "å‰å¸ƒåœ°æ³•éƒŽ",
+ "symbol": "DJF"
+ },
+ "KGS": {
+ "name": "å‰çˆ¾å‰æ–¯ç´¢å§†",
+ "symbol": "KGS"
+ },
+ "GYD": {
+ "name": "圭亞那元",
+ "symbol": "GYD"
+ },
+ "DOP": {
+ "name": "多明尼加披索",
+ "symbol": "DOP"
+ },
+ "XOF": {
+ "name": "多哥éžæ´²å…±åŒé«”法郎",
+ "symbol": "CFA"
+ },
+ "AOA": {
+ "name": "安哥拉寬扎",
+ "symbol": "AOA"
+ },
+ "BMD": {
+ "name": "百慕é”å¹£",
+ "symbol": "BMD"
+ },
+ "WST": {
+ "name": "西薩摩亞塔拉",
+ "symbol": "WST"
+ },
+ "BZD": {
+ "name": "伯利茲元",
+ "symbol": "BZD"
+ },
+ "CVE": {
+ "name": "佛得角埃斯庫多",
+ "symbol": "CVE"
+ },
+ "HRK": {
+ "name": "克羅地亞庫ç´",
+ "symbol": "HRK"
+ },
+ "LRD": {
+ "name": "利比利亞元",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "利比亞第ç´çˆ¾",
+ "symbol": "LYD"
+ },
+ "BND": {
+ "name": "汶èŠå…ƒ",
+ "symbol": "BND"
+ },
+ "SAR": {
+ "name": "沙特阿拉伯里亞爾",
+ "symbol": "SAR"
+ },
+ "ZWL": {
+ "name": "辛巴å¨å…ƒ (2009)",
+ "symbol": "ZWL"
+ },
+ "AMD": {
+ "name": "亞美尼亞德拉姆",
+ "symbol": "AMD"
+ },
+ "AZN": {
+ "name": "亞塞拜疆馬ç´ç‰¹",
+ "symbol": "AZN"
+ },
+ "TZS": {
+ "name": "å¦å°šå°¼äºžå…ˆä»¤",
+ "symbol": "TZS"
+ },
+ "VEF": {
+ "name": "委內瑞拉玻利瓦",
+ "symbol": "VEF"
+ },
+ "BDT": {
+ "name": "孟加拉塔å¡",
+ "symbol": "BDT"
+ },
+ "ZMW": {
+ "name": "尚比亞克瓦查",
+ "symbol": "ZMW"
+ },
+ "GMD": {
+ "name": "岡比亞é”拉西",
+ "symbol": "GMD"
+ },
+ "SBD": {
+ "name": "所羅門群島元",
+ "symbol": "SBD"
+ },
+ "XCD": {
+ "name": "æ±åŠ å‹’比元",
+ "symbol": "EC$"
+ },
+ "TOP": {
+ "name": "æ±åŠ æ½˜åŠ ",
+ "symbol": "TOP"
+ },
+ "BAM": {
+ "name": "波士尼亞與赫塞哥維ç´å¯è½‰æ›é¦¬å…‹",
+ "symbol": "BAM"
+ },
+ "PLN": {
+ "name": "波蘭茲羅æ",
+ "symbol": "PLN"
+ },
+ "GIP": {
+ "name": "直布羅陀鎊",
+ "symbol": "GIP"
+ },
+ "KES": {
+ "name": "肯尼亞先令",
+ "symbol": "KES"
+ },
+ "AED": {
+ "name": "阿拉伯è¯åˆé…‹é•·åœ‹è¿ªçˆ¾æ±—",
+ "symbol": "AED"
+ },
+ "ARS": {
+ "name": "阿根廷披索",
+ "symbol": "ARS"
+ },
+ "OMR": {
+ "name": "阿曼里奧",
+ "symbol": "OMR"
+ },
+ "AFN": {
+ "name": "阿富汗尼",
+ "symbol": "AFN"
+ },
+ "DZD": {
+ "name": "阿爾åŠåˆ©äºžç¬¬ç´çˆ¾",
+ "symbol": "DZD"
+ },
+ "ALL": {
+ "name": "阿爾巴尼亞列克",
+ "symbol": "ALL"
+ },
+ "AWG": {
+ "name": "阿魯巴盾",
+ "symbol": "AWG"
+ },
+ "RUB": {
+ "name": "俄羅斯盧布",
+ "symbol": "RUB"
+ },
+ "BGN": {
+ "name": "ä¿åŠ åˆ©äºžæ–°åˆ—å¼—",
+ "symbol": "BGN"
+ },
+ "ZAR": {
+ "name": "å—éžè˜­ç‰¹",
+ "symbol": "ZAR"
+ },
+ "SSP": {
+ "name": "å—蘇丹鎊",
+ "symbol": "SSP"
+ },
+ "KHR": {
+ "name": "柬埔寨瑞爾",
+ "symbol": "KHR"
+ },
+ "HNL": {
+ "name": "洪都拉斯倫皮拉",
+ "symbol": "HNL"
+ },
+ "BOB": {
+ "name": "玻利維亞諾",
+ "symbol": "BOB"
+ },
+ "KWD": {
+ "name": "科å¨ç‰¹ç¬¬ç´çˆ¾",
+ "symbol": "KWD"
+ },
+ "KMF": {
+ "name": "科摩羅法郎",
+ "symbol": "KMF"
+ },
+ "TND": {
+ "name": "çªå°¼è¥¿äºžç¬¬ç´çˆ¾",
+ "symbol": "TND"
+ },
+ "JOD": {
+ "name": "約旦第ç´çˆ¾",
+ "symbol": "JOD"
+ },
+ "USD": {
+ "name": "美元",
+ "symbol": "US$"
+ },
+ "GBP": {
+ "name": "英鎊",
+ "symbol": "£"
+ },
+ "CDF": {
+ "name": "剛果法郎",
+ "symbol": "CDF"
+ },
+ "COP": {
+ "name": "哥倫比亞披索",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "哥斯é”黎加科郎",
+ "symbol": "CRC"
+ },
+ "EGP": {
+ "name": "埃åŠéŽŠ",
+ "symbol": "EGP"
+ },
+ "ETB": {
+ "name": "埃塞俄比亞比爾",
+ "symbol": "ETB"
+ },
+ "NOK": {
+ "name": "挪å¨å…‹æœ—",
+ "symbol": "NOK"
+ },
+ "GEL": {
+ "name": "格魯å‰äºžæ‹‰é‡Œ",
+ "symbol": "GEL"
+ },
+ "THB": {
+ "name": "泰銖",
+ "symbol": "฿"
+ },
+ "HTG": {
+ "name": "海地å¤å¾·",
+ "symbol": "HTG"
+ },
+ "UGX": {
+ "name": "çƒå¹²é”先令",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "çƒå…‹è˜­æ ¼é‡Œå¤«ç´",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "çƒæ‹‰åœ­æŠ«ç´¢",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "çƒèŒ²åˆ¥å…‹ç´¢å§†",
+ "symbol": "UZS"
+ },
+ "PEN": {
+ "name": "秘魯新太陽幣",
+ "symbol": "PEN"
+ },
+ "NAD": {
+ "name": "ç´ç±³æ¯”亞元",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "ç´è¥¿è˜­å…ƒ",
+ "symbol": "NZ$"
+ },
+ "SOS": {
+ "name": "索馬利亞先令",
+ "symbol": "SOS"
+ },
+ "MYR": {
+ "name": "馬來西亞令å‰",
+ "symbol": "MYR"
+ },
+ "MKD": {
+ "name": "馬其頓第ç´çˆ¾",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "馬拉維克瓦查",
+ "symbol": "MWK"
+ },
+ "MGA": {
+ "name": "馬é”加斯加艾瑞爾",
+ "symbol": "MGA"
+ },
+ "MVR": {
+ "name": "馬爾代夫盧éžäºž",
+ "symbol": "MVR"
+ },
+ "CZK": {
+ "name": "æ·å…‹å…‹æœ—",
+ "symbol": "CZK"
+ },
+ "SYP": {
+ "name": "敘利亞鎊",
+ "symbol": "SYP"
+ },
+ "ANG": {
+ "name": "è·å±¬å®‰åœ°åˆ—斯盾",
+ "symbol": "ANG"
+ },
+ "MZN": {
+ "name": "莫桑比克美æå¡",
+ "symbol": "MZN"
+ },
+ "BWP": {
+ "name": "åšèŒ¨ç“¦ç´æ™®æ‹‰",
+ "symbol": "BWP"
+ },
+ "GNF": {
+ "name": "幾內亞法郎",
+ "symbol": "GNF"
+ },
+ "FJD": {
+ "name": "æ–æ¿Ÿå…ƒ",
+ "symbol": "FJD"
+ },
+ "LKR": {
+ "name": "斯里蘭å¡ç›§æ¯”",
+ "symbol": "LKR"
+ },
+ "CLP": {
+ "name": "智利披索",
+ "symbol": "CLP"
+ },
+ "HKD": {
+ "name": "港元",
+ "symbol": "HK$"
+ },
+ "PHP": {
+ "name": "è²å¾‹è³“披索",
+ "symbol": "PHP"
+ },
+ "VND": {
+ "name": "越å—盾",
+ "symbol": "â‚«"
+ },
+ "KYD": {
+ "name": "開曼群島元",
+ "symbol": "KYD"
+ },
+ "TJS": {
+ "name": "å¡”å‰å…‹ç´¢èŽ«å°¼",
+ "symbol": "TJS"
+ },
+ "SLL": {
+ "name": "塞拉利昂利昂",
+ "symbol": "SLL"
+ },
+ "SCR": {
+ "name": "塞席爾盧比",
+ "symbol": "SCR"
+ },
+ "RSD": {
+ "name": "塞爾維亞第ç´çˆ¾",
+ "symbol": "RSD"
+ },
+ "TRY": {
+ "name": "新土耳其里拉",
+ "symbol": "TRY"
+ },
+ "SGD": {
+ "name": "新加å¡å…ƒ",
+ "symbol": "SGD"
+ },
+ "TWD": {
+ "name": "æ–°å°å¹£",
+ "symbol": "NT$"
+ },
+ "CHF": {
+ "name": "瑞士法郎",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "瑞典克朗",
+ "symbol": "SEK"
+ },
+ "STD": {
+ "name": "è–多美和普林西比多布拉",
+ "symbol": "STD"
+ },
+ "SHP": {
+ "name": "è–赫勒拿鎊",
+ "symbol": "SHP"
+ },
+ "FKP": {
+ "name": "ç¦å…‹è˜­ç¾¤å³¶éŽŠ",
+ "symbol": "FKP"
+ },
+ "MNT": {
+ "name": "è’™å¤åœ–格里克",
+ "symbol": "MNT"
+ },
+ "LAK": {
+ "name": "寮國基普",
+ "symbol": "LAK"
+ },
+ "MDL": {
+ "name": "æ‘©æœé›²åˆ—伊",
+ "symbol": "MDL"
+ },
+ "MAD": {
+ "name": "摩洛哥迪拉姆",
+ "symbol": "MAD"
+ },
+ "EUR": {
+ "name": "æ­å…ƒ",
+ "symbol": "€"
+ },
+ "MMK": {
+ "name": "緬甸元",
+ "symbol": "MMK"
+ },
+ "LBP": {
+ "name": "黎巴嫩鎊",
+ "symbol": "LBP"
+ },
+ "MXN": {
+ "name": "墨西哥披索",
+ "symbol": "MX$"
+ },
+ "AUD": {
+ "name": "澳元",
+ "symbol": "AU$"
+ },
+ "MOP": {
+ "name": "澳門元",
+ "symbol": "MOP$"
+ },
+ "RWF": {
+ "name": "盧旺é”法郎",
+ "symbol": "RWF"
+ },
+ "LSL": {
+ "name": "賴索托洛蒂",
+ "symbol": "LSL"
+ },
+ "KRW": {
+ "name": "韓圓",
+ "symbol": "â‚©"
+ },
+ "SVC": {
+ "name": "薩爾瓦多科郎",
+ "symbol": "SVC"
+ },
+ "RON": {
+ "name": "羅馬尼亞列伊",
+ "symbol": "RON"
+ },
+ "SDG": {
+ "name": "蘇丹鎊",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "蘇利å—å…ƒ",
+ "symbol": "SRD"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/zh-Hant.json b/library/intl/resources/currency/zh-Hant.json
new file mode 100644
index 000000000..7d5eb5cbc
--- /dev/null
+++ b/library/intl/resources/currency/zh-Hant.json
@@ -0,0 +1,634 @@
+{
+ "CNY": {
+ "name": "人民幣",
+ "symbol": "CNÂ¥"
+ },
+ "TTD": {
+ "name": "åƒé‡Œé”åŠæ‰˜å·´å“¥å…ƒ",
+ "symbol": "TTD"
+ },
+ "TMT": {
+ "name": "土庫曼馬ç´ç‰¹",
+ "symbol": "TMT"
+ },
+ "BTN": {
+ "name": "ä¸ä¸¹é‚£ç‰¹å€«",
+ "symbol": "BTN"
+ },
+ "DKK": {
+ "name": "丹麥克朗",
+ "symbol": "DKK"
+ },
+ "ERN": {
+ "name": "厄立特里亞ç´å…‹æ³•",
+ "symbol": "ERN"
+ },
+ "PGK": {
+ "name": "巴布亞ç´å¹¾å…§äºžåŸºé‚£",
+ "symbol": "PGK"
+ },
+ "BRL": {
+ "name": "巴西里拉",
+ "symbol": "R$"
+ },
+ "BBD": {
+ "name": "å·´è²å¤šå…ƒ",
+ "symbol": "BBD"
+ },
+ "PYG": {
+ "name": "巴拉圭瓜拉尼",
+ "symbol": "PYG"
+ },
+ "BHD": {
+ "name": "巴林第ç´çˆ¾",
+ "symbol": "BHD"
+ },
+ "BSD": {
+ "name": "巴哈馬元",
+ "symbol": "BSD"
+ },
+ "PAB": {
+ "name": "巴拿馬巴波亞",
+ "symbol": "PAB"
+ },
+ "PKR": {
+ "name": "巴基斯å¦ç›§æ¯”",
+ "symbol": "PKR"
+ },
+ "JPY": {
+ "name": "日圓",
+ "symbol": "Â¥"
+ },
+ "JMD": {
+ "name": "牙買加元",
+ "symbol": "JMD"
+ },
+ "ILS": {
+ "name": "以色列新è¬å…‹çˆ¾",
+ "symbol": "₪"
+ },
+ "CAD": {
+ "name": "加幣",
+ "symbol": "CA$"
+ },
+ "KPW": {
+ "name": "北韓圓",
+ "symbol": "KPW"
+ },
+ "KZT": {
+ "name": "å¡æ‰Žå…‹æ–¯å¦å¦å‰",
+ "symbol": "KZT"
+ },
+ "QAR": {
+ "name": "å¡é”爾里亞爾",
+ "symbol": "QAR"
+ },
+ "CUC": {
+ "name": "å¤å·´å¯è½‰æ›æŠ«ç´¢",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "å¤å·´æŠ«ç´¢",
+ "symbol": "CUP"
+ },
+ "SZL": {
+ "name": "å²ç“¦æ¿Ÿè˜­é‡Œæœ—å‰å°¼",
+ "symbol": "SZL"
+ },
+ "NIO": {
+ "name": "尼加拉瓜金科多巴",
+ "symbol": "NIO"
+ },
+ "NPR": {
+ "name": "尼泊爾盧比",
+ "symbol": "NPR"
+ },
+ "GTQ": {
+ "name": "瓜地馬拉格查爾",
+ "symbol": "GTQ"
+ },
+ "GMD": {
+ "name": "甘比亞é”拉西",
+ "symbol": "GMD"
+ },
+ "BYR": {
+ "name": "白俄羅斯盧布",
+ "symbol": "BYR"
+ },
+ "LTL": {
+ "name": "立陶宛立特",
+ "symbol": "LTL"
+ },
+ "IQD": {
+ "name": "伊拉克第ç´çˆ¾",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "伊朗里亞爾",
+ "symbol": "IRR"
+ },
+ "ISK": {
+ "name": "冰島克朗",
+ "symbol": "ISK"
+ },
+ "HUF": {
+ "name": "匈牙利ç¦æž—",
+ "symbol": "HUF"
+ },
+ "IDR": {
+ "name": "å°å°¼ç›¾",
+ "symbol": "IDR"
+ },
+ "INR": {
+ "name": "å°åº¦ç›§æ¯”",
+ "symbol": "₹"
+ },
+ "DJF": {
+ "name": "å‰å¸ƒåœ°æ³•éƒŽ",
+ "symbol": "DJF"
+ },
+ "KGS": {
+ "name": "å‰çˆ¾å‰æ–¯ç´¢å§†",
+ "symbol": "KGS"
+ },
+ "GYD": {
+ "name": "圭亞那元",
+ "symbol": "GYD"
+ },
+ "DOP": {
+ "name": "多明尼加披索",
+ "symbol": "DOP"
+ },
+ "AOA": {
+ "name": "安哥拉寬扎",
+ "symbol": "AOA"
+ },
+ "BMD": {
+ "name": "百慕é”å¹£",
+ "symbol": "BMD"
+ },
+ "ETB": {
+ "name": "衣索比亞比爾",
+ "symbol": "ETB"
+ },
+ "WST": {
+ "name": "西薩摩亞塔拉",
+ "symbol": "WST"
+ },
+ "HRK": {
+ "name": "克羅埃西亞庫ç´",
+ "symbol": "HRK"
+ },
+ "LYD": {
+ "name": "利比亞第ç´çˆ¾",
+ "symbol": "LYD"
+ },
+ "BND": {
+ "name": "汶èŠå…ƒ",
+ "symbol": "BND"
+ },
+ "SAR": {
+ "name": "æ²™çƒåœ°é‡Œé›…",
+ "symbol": "SAR"
+ },
+ "BZD": {
+ "name": "è²é‡Œæ–¯å…ƒ",
+ "symbol": "BZD"
+ },
+ "ZWL": {
+ "name": "辛巴å¨å…ƒ (2009)",
+ "symbol": "ZWL"
+ },
+ "AMD": {
+ "name": "亞美尼亞德拉姆",
+ "symbol": "AMD"
+ },
+ "AZN": {
+ "name": "亞塞拜然馬ç´ç‰¹",
+ "symbol": "AZN"
+ },
+ "TZS": {
+ "name": "å¦å°šå°¼äºžå…ˆä»¤",
+ "symbol": "TZS"
+ },
+ "NGN": {
+ "name": "奈åŠåˆ©äºžå¥ˆæ‹‰",
+ "symbol": "NGN"
+ },
+ "VEF": {
+ "name": "委內瑞拉玻利瓦",
+ "symbol": "VEF"
+ },
+ "BDT": {
+ "name": "孟加拉塔å¡",
+ "symbol": "BDT"
+ },
+ "ZMW": {
+ "name": "尚比亞克瓦查",
+ "symbol": "ZMW"
+ },
+ "TOP": {
+ "name": "æ±åŠ æ½˜åŠ ",
+ "symbol": "TOP"
+ },
+ "XOF": {
+ "name": "法郎 (CFA–BCEAO)",
+ "symbol": "CFA"
+ },
+ "XAF": {
+ "name": "法郎 (CFA–BEAC)",
+ "symbol": "FCFA"
+ },
+ "XPF": {
+ "name": "法郎 (CFP)",
+ "symbol": "CFPF"
+ },
+ "BAM": {
+ "name": "波士尼亞-赫塞哥維ç´å¯è½‰æ›é¦¬å…‹",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "波札那普拉",
+ "symbol": "BWP"
+ },
+ "PLN": {
+ "name": "波蘭茲羅æ",
+ "symbol": "PLN"
+ },
+ "GIP": {
+ "name": "直布羅陀鎊",
+ "symbol": "GIP"
+ },
+ "KES": {
+ "name": "肯尼亞先令",
+ "symbol": "KES"
+ },
+ "AED": {
+ "name": "阿拉伯è¯åˆå¤§å…¬åœ‹è¿ªçˆ¾æ±—",
+ "symbol": "AED"
+ },
+ "ARS": {
+ "name": "阿根廷披索",
+ "symbol": "ARS"
+ },
+ "OMR": {
+ "name": "阿曼里奧",
+ "symbol": "OMR"
+ },
+ "AFN": {
+ "name": "阿富汗尼",
+ "symbol": "AFN"
+ },
+ "AWG": {
+ "name": "阿路巴盾",
+ "symbol": "AWG"
+ },
+ "DZD": {
+ "name": "阿爾åŠåˆ©äºžç¬¬ç´çˆ¾",
+ "symbol": "DZD"
+ },
+ "ALL": {
+ "name": "阿爾巴尼亞列克",
+ "symbol": "ALL"
+ },
+ "RUB": {
+ "name": "俄羅斯盧布",
+ "symbol": "RUB"
+ },
+ "BGN": {
+ "name": "ä¿åŠ åˆ©äºžæ–°åˆ—å¼—",
+ "symbol": "BGN"
+ },
+ "ZAR": {
+ "name": "å—éžè˜­ç‰¹",
+ "symbol": "ZAR"
+ },
+ "SSP": {
+ "name": "å—蘇丹鎊",
+ "symbol": "SSP"
+ },
+ "KHR": {
+ "name": "柬埔寨瑞爾",
+ "symbol": "KHR"
+ },
+ "HNL": {
+ "name": "洪都拉斯倫皮拉",
+ "symbol": "HNL"
+ },
+ "BOB": {
+ "name": "玻利維亞諾",
+ "symbol": "BOB"
+ },
+ "KWD": {
+ "name": "科å¨ç‰¹ç¬¬ç´çˆ¾",
+ "symbol": "KWD"
+ },
+ "KMF": {
+ "name": "科摩羅法郎",
+ "symbol": "KMF"
+ },
+ "TND": {
+ "name": "çªå°¼è¥¿äºžç¬¬ç´çˆ¾",
+ "symbol": "TND"
+ },
+ "JOD": {
+ "name": "約旦第ç´çˆ¾",
+ "symbol": "JOD"
+ },
+ "USD": {
+ "name": "美元",
+ "symbol": "$"
+ },
+ "GBP": {
+ "name": "英鎊",
+ "symbol": "£"
+ },
+ "MRO": {
+ "name": "茅利塔尼亞çƒå‰äºž",
+ "symbol": "MRO"
+ },
+ "GHS": {
+ "name": "迦ç´å¡žåœ°",
+ "symbol": "GHS"
+ },
+ "CDF": {
+ "name": "剛果法郎",
+ "symbol": "CDF"
+ },
+ "COP": {
+ "name": "哥倫比亞披索",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "哥斯大黎加科朗",
+ "symbol": "CRC"
+ },
+ "EGP": {
+ "name": "埃åŠéŽŠ",
+ "symbol": "EGP"
+ },
+ "NOK": {
+ "name": "挪å¨å…‹æœ—",
+ "symbol": "NOK"
+ },
+ "XCD": {
+ "name": "格瑞那é”å…ƒ",
+ "symbol": "EC$"
+ },
+ "THB": {
+ "name": "泰銖",
+ "symbol": "฿"
+ },
+ "HTG": {
+ "name": "海地å¤å¾·",
+ "symbol": "HTG"
+ },
+ "UGX": {
+ "name": "çƒå¹²é”先令",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "çƒå…‹è˜­æ ¼é‡Œå¤«ç´",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "çƒæ‹‰åœ­æŠ«ç´¢",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "çƒèŒ²åˆ¥å…‹ç´¢å§†",
+ "symbol": "UZS"
+ },
+ "PEN": {
+ "name": "秘魯新太陽幣",
+ "symbol": "PEN"
+ },
+ "NAD": {
+ "name": "ç´ç±³æ¯”亞元",
+ "symbol": "NAD"
+ },
+ "NZD": {
+ "name": "ç´è¥¿è˜­å¹£",
+ "symbol": "NZ$"
+ },
+ "SOS": {
+ "name": "索馬利亞先令",
+ "symbol": "SOS"
+ },
+ "SBD": {
+ "name": "索羅門群島元",
+ "symbol": "SBD"
+ },
+ "MYR": {
+ "name": "馬來西亞令å‰",
+ "symbol": "MYR"
+ },
+ "MKD": {
+ "name": "馬其頓第ç´çˆ¾",
+ "symbol": "MKD"
+ },
+ "MWK": {
+ "name": "馬拉維克瓦查",
+ "symbol": "MWK"
+ },
+ "MGA": {
+ "name": "馬é”加斯加阿里亞里",
+ "symbol": "MGA"
+ },
+ "MVR": {
+ "name": "馬爾地夫盧éžäºž",
+ "symbol": "MVR"
+ },
+ "CZK": {
+ "name": "æ·å…‹å…‹æœ—",
+ "symbol": "CZK"
+ },
+ "SYP": {
+ "name": "敘利亞鎊",
+ "symbol": "SYP"
+ },
+ "ANG": {
+ "name": "è·å±¬å®‰åœ°åˆ—斯盾",
+ "symbol": "ANG"
+ },
+ "MZN": {
+ "name": "莫三比克梅蒂å¡çˆ¾",
+ "symbol": "MZN"
+ },
+ "GEL": {
+ "name": "喬治亞拉里",
+ "symbol": "GEL"
+ },
+ "GNF": {
+ "name": "幾內亞法郎",
+ "symbol": "GNF"
+ },
+ "FJD": {
+ "name": "æ–æ¿Ÿå…ƒ",
+ "symbol": "FJD"
+ },
+ "LKR": {
+ "name": "斯里蘭å¡ç›§æ¯”",
+ "symbol": "LKR"
+ },
+ "CLP": {
+ "name": "智利披索",
+ "symbol": "CLP"
+ },
+ "HKD": {
+ "name": "港幣",
+ "symbol": "HK$"
+ },
+ "PHP": {
+ "name": "è²å¾‹è³“披索",
+ "symbol": "PHP"
+ },
+ "VND": {
+ "name": "越å—盾",
+ "symbol": "â‚«"
+ },
+ "KYD": {
+ "name": "開曼群島元",
+ "symbol": "KYD"
+ },
+ "TJS": {
+ "name": "å¡”å‰å…‹ç´¢èŽ«å°¼",
+ "symbol": "TJS"
+ },
+ "SCR": {
+ "name": "塞席爾盧比",
+ "symbol": "SCR"
+ },
+ "RSD": {
+ "name": "塞爾維亞戴ç´",
+ "symbol": "RSD"
+ },
+ "TRY": {
+ "name": "新土耳其里拉",
+ "symbol": "TRY"
+ },
+ "SGD": {
+ "name": "新加å¡å¹£",
+ "symbol": "SGD"
+ },
+ "TWD": {
+ "name": "新臺幣",
+ "symbol": "NT$"
+ },
+ "SLL": {
+ "name": "ç…å­å±±åˆ©æ˜‚",
+ "symbol": "SLL"
+ },
+ "CHF": {
+ "name": "瑞士法郎",
+ "symbol": "CHF"
+ },
+ "SEK": {
+ "name": "瑞典克朗",
+ "symbol": "SEK"
+ },
+ "VUV": {
+ "name": "è¬é‚£æœç“¦åœ–",
+ "symbol": "VUV"
+ },
+ "STD": {
+ "name": "è–多美島和普林西比島多布拉",
+ "symbol": "STD"
+ },
+ "SHP": {
+ "name": "è–赫勒拿鎊",
+ "symbol": "SHP"
+ },
+ "YER": {
+ "name": "葉門里雅",
+ "symbol": "YER"
+ },
+ "FKP": {
+ "name": "ç¦å…‹è˜­ç¾¤å³¶éŽŠ",
+ "symbol": "FKP"
+ },
+ "CVE": {
+ "name": "維德角埃斯庫多",
+ "symbol": "CVE"
+ },
+ "MNT": {
+ "name": "è’™å¤åœ–格里克",
+ "symbol": "MNT"
+ },
+ "BIF": {
+ "name": "蒲隆地法郎",
+ "symbol": "BIF"
+ },
+ "LAK": {
+ "name": "寮國基普",
+ "symbol": "LAK"
+ },
+ "MDL": {
+ "name": "æ‘©æœé›²åˆ—伊",
+ "symbol": "MDL"
+ },
+ "MAD": {
+ "name": "摩洛哥迪拉姆",
+ "symbol": "MAD"
+ },
+ "MUR": {
+ "name": "模里西斯盧布",
+ "symbol": "MUR"
+ },
+ "EUR": {
+ "name": "æ­å…ƒ",
+ "symbol": "€"
+ },
+ "MMK": {
+ "name": "緬甸元",
+ "symbol": "MMK"
+ },
+ "LBP": {
+ "name": "黎巴嫩鎊",
+ "symbol": "LBP"
+ },
+ "MXN": {
+ "name": "墨西哥披索",
+ "symbol": "MX$"
+ },
+ "MOP": {
+ "name": "澳門元",
+ "symbol": "MOP"
+ },
+ "AUD": {
+ "name": "澳幣",
+ "symbol": "AU$"
+ },
+ "RWF": {
+ "name": "盧安é”法郎",
+ "symbol": "RWF"
+ },
+ "LRD": {
+ "name": "賴比瑞亞元",
+ "symbol": "LRD"
+ },
+ "LSL": {
+ "name": "賴索托洛蒂",
+ "symbol": "LSL"
+ },
+ "KRW": {
+ "name": "韓圓",
+ "symbol": "₩"
+ },
+ "SVC": {
+ "name": "薩爾瓦多科郎",
+ "symbol": "SVC"
+ },
+ "RON": {
+ "name": "羅馬尼亞列伊",
+ "symbol": "RON"
+ },
+ "SDG": {
+ "name": "蘇丹鎊",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "蘇利å—å…ƒ",
+ "symbol": "SRD"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/zh.json b/library/intl/resources/currency/zh.json
new file mode 100644
index 000000000..ad5b0336f
--- /dev/null
+++ b/library/intl/resources/currency/zh.json
@@ -0,0 +1,634 @@
+{
+ "ALL": {
+ "name": "阿尔巴尼亚列克",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "阿尔åŠåˆ©äºšç¬¬çº³å°”",
+ "symbol": "DZD"
+ },
+ "AFN": {
+ "name": "阿富汗尼",
+ "symbol": "AFN"
+ },
+ "ARS": {
+ "name": "阿根廷比索",
+ "symbol": "ARS"
+ },
+ "AED": {
+ "name": "阿è”酋迪拉姆",
+ "symbol": "AED"
+ },
+ "AWG": {
+ "name": "阿é²å·´åŸºå°”å¾·å…ƒ",
+ "symbol": "AWG"
+ },
+ "OMR": {
+ "name": "阿曼里亚尔",
+ "symbol": "OMR"
+ },
+ "AZN": {
+ "name": "阿塞拜疆马纳特",
+ "symbol": "AZN"
+ },
+ "EGP": {
+ "name": "埃åŠé•‘",
+ "symbol": "EGP"
+ },
+ "ETB": {
+ "name": "埃塞俄比亚比尔",
+ "symbol": "ETB"
+ },
+ "AOA": {
+ "name": "安哥拉宽扎",
+ "symbol": "AOA"
+ },
+ "AUD": {
+ "name": "澳大利亚元",
+ "symbol": "AU$"
+ },
+ "MOP": {
+ "name": "澳门元",
+ "symbol": "MOP"
+ },
+ "BBD": {
+ "name": "巴巴多斯元",
+ "symbol": "BBD"
+ },
+ "PGK": {
+ "name": "巴布亚新几内亚基那",
+ "symbol": "PGK"
+ },
+ "BSD": {
+ "name": "巴哈马元",
+ "symbol": "BSD"
+ },
+ "PKR": {
+ "name": "巴基斯å¦å¢æ¯”",
+ "symbol": "PKR"
+ },
+ "PYG": {
+ "name": "巴拉圭瓜拉尼",
+ "symbol": "PYG"
+ },
+ "BHD": {
+ "name": "巴林第纳尔",
+ "symbol": "BHD"
+ },
+ "PAB": {
+ "name": "巴拿马巴波亚",
+ "symbol": "PAB"
+ },
+ "BRL": {
+ "name": "巴西雷亚尔",
+ "symbol": "R$"
+ },
+ "BYR": {
+ "name": "白俄罗斯å¢å¸ƒ",
+ "symbol": "BYR"
+ },
+ "BMD": {
+ "name": "百慕大元",
+ "symbol": "BMD"
+ },
+ "BGN": {
+ "name": "ä¿åŠ åˆ©äºšæ–°åˆ—å¼—",
+ "symbol": "BGN"
+ },
+ "ISK": {
+ "name": "冰岛克朗",
+ "symbol": "ISK"
+ },
+ "PLN": {
+ "name": "波兰兹罗æ",
+ "symbol": "PLN"
+ },
+ "BAM": {
+ "name": "波斯尼亚-黑塞哥维那å¯å…‘æ¢é©¬å…‹",
+ "symbol": "BAM"
+ },
+ "BOB": {
+ "name": "玻利维亚诺",
+ "symbol": "BOB"
+ },
+ "BZD": {
+ "name": "伯利兹元",
+ "symbol": "BZD"
+ },
+ "BWP": {
+ "name": "åšèŒ¨ç“¦çº³æ™®æ‹‰",
+ "symbol": "BWP"
+ },
+ "BTN": {
+ "name": "ä¸ä¸¹åŠªå°”特é²å§†",
+ "symbol": "BTN"
+ },
+ "BIF": {
+ "name": "布隆迪法郎",
+ "symbol": "BIF"
+ },
+ "KPW": {
+ "name": "æœé²œå…ƒ",
+ "symbol": "KPW"
+ },
+ "DKK": {
+ "name": "丹麦克朗",
+ "symbol": "DKK"
+ },
+ "XCD": {
+ "name": "东加勒比元",
+ "symbol": "EC$"
+ },
+ "DOP": {
+ "name": "多米尼加比索",
+ "symbol": "DOP"
+ },
+ "RUB": {
+ "name": "ä¿„ç½—æ–¯å¢å¸ƒ",
+ "symbol": "RUB"
+ },
+ "ERN": {
+ "name": "厄立特里亚纳克法",
+ "symbol": "ERN"
+ },
+ "XOF": {
+ "name": "éžæ´²é‡‘èžå…±åŒä½“法郎",
+ "symbol": "CFA"
+ },
+ "PHP": {
+ "name": "è²å¾‹å®¾æ¯”ç´¢",
+ "symbol": "PHP"
+ },
+ "FJD": {
+ "name": "æ–济元",
+ "symbol": "FJD"
+ },
+ "CVE": {
+ "name": "佛得角埃斯库多",
+ "symbol": "CVE"
+ },
+ "FKP": {
+ "name": "ç¦å…‹å…°ç¾¤å²›é•‘",
+ "symbol": "FKP"
+ },
+ "GMD": {
+ "name": "冈比亚达拉西",
+ "symbol": "GMD"
+ },
+ "CDF": {
+ "name": "刚果法郎",
+ "symbol": "CDF"
+ },
+ "HKD": {
+ "name": "港元",
+ "symbol": "HK$"
+ },
+ "COP": {
+ "name": "哥伦比亚比索",
+ "symbol": "COP"
+ },
+ "CRC": {
+ "name": "哥斯达黎加科朗",
+ "symbol": "CRC"
+ },
+ "GEL": {
+ "name": "æ ¼é²å‰äºšæ‹‰é‡Œ",
+ "symbol": "GEL"
+ },
+ "CUP": {
+ "name": "å¤å·´æ¯”ç´¢",
+ "symbol": "CUP"
+ },
+ "CUC": {
+ "name": "å¤å·´å¯å…‘æ¢æ¯”ç´¢",
+ "symbol": "CUC"
+ },
+ "GYD": {
+ "name": "圭亚那元",
+ "symbol": "GYD"
+ },
+ "KZT": {
+ "name": "哈è¨å…‹æ–¯å¦åšæˆˆ",
+ "symbol": "KZT"
+ },
+ "HTG": {
+ "name": "海地å¤å¾·",
+ "symbol": "HTG"
+ },
+ "KRW": {
+ "name": "韩元",
+ "symbol": "₩"
+ },
+ "ANG": {
+ "name": "è·å±žå®‰çš„列斯盾",
+ "symbol": "ANG"
+ },
+ "HNL": {
+ "name": "洪都拉斯伦皮拉",
+ "symbol": "HNL"
+ },
+ "DJF": {
+ "name": "å‰å¸ƒæ法郎",
+ "symbol": "DJF"
+ },
+ "KGS": {
+ "name": "å‰å°”å‰æ–¯æ–¯å¦ç´¢å§†",
+ "symbol": "KGS"
+ },
+ "GNF": {
+ "name": "几内亚法郎",
+ "symbol": "GNF"
+ },
+ "CAD": {
+ "name": "加拿大元",
+ "symbol": "CA$"
+ },
+ "GHS": {
+ "name": "加纳塞地",
+ "symbol": "GHS"
+ },
+ "KHR": {
+ "name": "柬埔寨瑞尔",
+ "symbol": "KHR"
+ },
+ "CZK": {
+ "name": "æ·å…‹å…‹éƒŽ",
+ "symbol": "CZK"
+ },
+ "ZWL": {
+ "name": "津巴布韦元 (2009)",
+ "symbol": "ZWL"
+ },
+ "QAR": {
+ "name": "å¡å¡”尔里亚尔",
+ "symbol": "QAR"
+ },
+ "KYD": {
+ "name": "开曼元",
+ "symbol": "KYD"
+ },
+ "KMF": {
+ "name": "科摩罗法郎",
+ "symbol": "KMF"
+ },
+ "KWD": {
+ "name": "科å¨ç‰¹ç¬¬çº³å°”",
+ "symbol": "KWD"
+ },
+ "HRK": {
+ "name": "克罗地亚库纳",
+ "symbol": "HRK"
+ },
+ "KES": {
+ "name": "肯尼亚先令",
+ "symbol": "KES"
+ },
+ "LSL": {
+ "name": "莱索托洛蒂",
+ "symbol": "LSL"
+ },
+ "LAK": {
+ "name": "è€æŒåŸºæ™®",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "黎巴嫩镑",
+ "symbol": "LBP"
+ },
+ "LTL": {
+ "name": "立陶宛立特",
+ "symbol": "LTL"
+ },
+ "LRD": {
+ "name": "利比里亚元",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "利比亚第纳尔",
+ "symbol": "LYD"
+ },
+ "RWF": {
+ "name": "å¢æ—ºè¾¾æ³•éƒŽ",
+ "symbol": "RWF"
+ },
+ "RON": {
+ "name": "罗马尼亚列伊",
+ "symbol": "RON"
+ },
+ "MGA": {
+ "name": "马达加斯加阿里亚里",
+ "symbol": "MGA"
+ },
+ "MVR": {
+ "name": "马尔代夫å¢è²äºš",
+ "symbol": "MVR"
+ },
+ "MWK": {
+ "name": "马拉维克瓦查",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "马æ¥è¥¿äºšæž—å‰ç‰¹",
+ "symbol": "MYR"
+ },
+ "MKD": {
+ "name": "马其顿第纳尔",
+ "symbol": "MKD"
+ },
+ "MUR": {
+ "name": "毛里求斯å¢æ¯”",
+ "symbol": "MUR"
+ },
+ "MRO": {
+ "name": "毛里塔尼亚乌å‰äºš",
+ "symbol": "MRO"
+ },
+ "USD": {
+ "name": "美元",
+ "symbol": "US$"
+ },
+ "MNT": {
+ "name": "è’™å¤å›¾æ ¼é‡Œå…‹",
+ "symbol": "MNT"
+ },
+ "BDT": {
+ "name": "孟加拉塔å¡",
+ "symbol": "BDT"
+ },
+ "PEN": {
+ "name": "秘é²æ–°ç´¢å°”",
+ "symbol": "PEN"
+ },
+ "MMK": {
+ "name": "缅甸元",
+ "symbol": "MMK"
+ },
+ "MDL": {
+ "name": "摩尔多瓦列伊",
+ "symbol": "MDL"
+ },
+ "MAD": {
+ "name": "摩洛哥迪拉姆",
+ "symbol": "MAD"
+ },
+ "MZN": {
+ "name": "莫桑比克美æå¡",
+ "symbol": "MZN"
+ },
+ "MXN": {
+ "name": "墨西哥比索",
+ "symbol": "MX$"
+ },
+ "NAD": {
+ "name": "纳米比亚元",
+ "symbol": "NAD"
+ },
+ "ZAR": {
+ "name": "å—éžå…°ç‰¹",
+ "symbol": "ZAR"
+ },
+ "SSP": {
+ "name": "å—è‹ä¸¹é•‘",
+ "symbol": "SSP"
+ },
+ "NIO": {
+ "name": "尼加拉瓜金科多巴",
+ "symbol": "NIO"
+ },
+ "NPR": {
+ "name": "尼泊尔å¢æ¯”",
+ "symbol": "NPR"
+ },
+ "NGN": {
+ "name": "尼日利亚奈拉",
+ "symbol": "NGN"
+ },
+ "NOK": {
+ "name": "挪å¨å…‹æœ—",
+ "symbol": "NOK"
+ },
+ "EUR": {
+ "name": "欧元",
+ "symbol": "€"
+ },
+ "CNY": {
+ "name": "人民å¸",
+ "symbol": "ï¿¥"
+ },
+ "JPY": {
+ "name": "日元",
+ "symbol": "JPÂ¥"
+ },
+ "SEK": {
+ "name": "瑞典克朗",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "瑞士法郎",
+ "symbol": "CHF"
+ },
+ "SVC": {
+ "name": "è¨å°”瓦多科朗",
+ "symbol": "SVC"
+ },
+ "WST": {
+ "name": "è¨æ‘©äºšå¡”拉",
+ "symbol": "WST"
+ },
+ "RSD": {
+ "name": "塞尔维亚第纳尔",
+ "symbol": "RSD"
+ },
+ "SLL": {
+ "name": "塞拉利昂利昂",
+ "symbol": "SLL"
+ },
+ "SCR": {
+ "name": "塞舌尔å¢æ¯”",
+ "symbol": "SCR"
+ },
+ "SAR": {
+ "name": "沙特里亚尔",
+ "symbol": "SAR"
+ },
+ "STD": {
+ "name": "圣多美和普林西比多布拉",
+ "symbol": "STD"
+ },
+ "SHP": {
+ "name": "圣赫勒拿群岛磅",
+ "symbol": "SHP"
+ },
+ "LKR": {
+ "name": "斯里兰å¡å¢æ¯”",
+ "symbol": "LKR"
+ },
+ "SZL": {
+ "name": "æ–¯å¨å£«å…°é‡Œå…°å‰å°¼",
+ "symbol": "SZL"
+ },
+ "SDG": {
+ "name": "è‹ä¸¹é•‘",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "è‹é‡Œå—å…ƒ",
+ "symbol": "SRD"
+ },
+ "SBD": {
+ "name": "所罗门群岛元",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "索马里先令",
+ "symbol": "SOS"
+ },
+ "TJS": {
+ "name": "å¡”å‰å…‹æ–¯å¦ç´¢èŽ«å°¼",
+ "symbol": "TJS"
+ },
+ "XPF": {
+ "name": "太平洋法郎",
+ "symbol": "CFPF"
+ },
+ "THB": {
+ "name": "æ³°é“¢",
+ "symbol": "฿"
+ },
+ "TZS": {
+ "name": "å¦æ¡‘尼亚先令",
+ "symbol": "TZS"
+ },
+ "TOP": {
+ "name": "汤加潘加",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "特立尼达和多巴哥元",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "çªå°¼æ–¯ç¬¬çº³å°”",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "土耳其里拉",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "土库曼斯å¦é©¬çº³ç‰¹",
+ "symbol": "TMT"
+ },
+ "VUV": {
+ "name": "瓦努阿图瓦图",
+ "symbol": "VUV"
+ },
+ "GTQ": {
+ "name": "å±åœ°é©¬æ‹‰æ ¼æŸ¥å°”",
+ "symbol": "GTQ"
+ },
+ "VEF": {
+ "name": "委内瑞拉玻利瓦尔",
+ "symbol": "VEF"
+ },
+ "BND": {
+ "name": "文莱元",
+ "symbol": "BND"
+ },
+ "UGX": {
+ "name": "乌干达先令",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "乌克兰格里夫纳",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "乌拉圭比索",
+ "symbol": "UYU"
+ },
+ "UZS": {
+ "name": "乌兹别克斯å¦è‹å§†",
+ "symbol": "UZS"
+ },
+ "SGD": {
+ "name": "新加å¡å…ƒ",
+ "symbol": "SGD"
+ },
+ "TWD": {
+ "name": "æ–°å°å¸",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "新西兰元",
+ "symbol": "NZ$"
+ },
+ "HUF": {
+ "name": "匈牙利ç¦æž—",
+ "symbol": "HUF"
+ },
+ "SYP": {
+ "name": "å™åˆ©äºšé•‘",
+ "symbol": "SYP"
+ },
+ "JMD": {
+ "name": "牙买加元",
+ "symbol": "JMD"
+ },
+ "AMD": {
+ "name": "亚美尼亚德拉姆",
+ "symbol": "AMD"
+ },
+ "YER": {
+ "name": "也门里亚尔",
+ "symbol": "YER"
+ },
+ "IQD": {
+ "name": "伊拉克第纳尔",
+ "symbol": "IQD"
+ },
+ "IRR": {
+ "name": "伊朗里亚尔",
+ "symbol": "IRR"
+ },
+ "ILS": {
+ "name": "以色列新谢克尔",
+ "symbol": "₪"
+ },
+ "INR": {
+ "name": "å°åº¦å¢æ¯”",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "å°åº¦å°¼è¥¿äºšç›¾",
+ "symbol": "IDR"
+ },
+ "GBP": {
+ "name": "英镑",
+ "symbol": "£"
+ },
+ "JOD": {
+ "name": "约旦第纳尔",
+ "symbol": "JOD"
+ },
+ "VND": {
+ "name": "越å—盾",
+ "symbol": "â‚«"
+ },
+ "ZMW": {
+ "name": "赞比亚克瓦查",
+ "symbol": "ZMW"
+ },
+ "GIP": {
+ "name": "直布罗陀镑",
+ "symbol": "GIP"
+ },
+ "CLP": {
+ "name": "智利比索",
+ "symbol": "CLP"
+ },
+ "XAF": {
+ "name": "中éžé‡‘èžåˆä½œæ³•éƒŽ",
+ "symbol": "FCFA"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/currency/zu.json b/library/intl/resources/currency/zu.json
new file mode 100644
index 000000000..59d82092a
--- /dev/null
+++ b/library/intl/resources/currency/zu.json
@@ -0,0 +1,634 @@
+{
+ "AFN": {
+ "name": "i-Afghan Afghani",
+ "symbol": "AFN"
+ },
+ "ALL": {
+ "name": "i-Albanian Lek",
+ "symbol": "ALL"
+ },
+ "DZD": {
+ "name": "i-Algerian Dinar",
+ "symbol": "DZD"
+ },
+ "AOA": {
+ "name": "i-Angolan Kwanza",
+ "symbol": "AOA"
+ },
+ "ARS": {
+ "name": "i-Argentina Peso",
+ "symbol": "ARS"
+ },
+ "AMD": {
+ "name": "i-Armenian Dram",
+ "symbol": "AMD"
+ },
+ "AWG": {
+ "name": "i-Aruban Florin",
+ "symbol": "AWG"
+ },
+ "AUD": {
+ "name": "i-Austrilian Dollar",
+ "symbol": "A$"
+ },
+ "AZN": {
+ "name": "i-Azerbaijani Manat",
+ "symbol": "AZN"
+ },
+ "BSD": {
+ "name": "i-Bahamian Dollar",
+ "symbol": "BSD"
+ },
+ "BHD": {
+ "name": "i-Bahraini Dinar",
+ "symbol": "BHD"
+ },
+ "BDT": {
+ "name": "i-Bangladeshi Taka",
+ "symbol": "BDT"
+ },
+ "BBD": {
+ "name": "i-Barbadian Dollar",
+ "symbol": "BBD"
+ },
+ "BYR": {
+ "name": "i-Belarusian Ruble",
+ "symbol": "BYR"
+ },
+ "BZD": {
+ "name": "i-Belize Dollar",
+ "symbol": "BZD"
+ },
+ "BMD": {
+ "name": "i-Bermudan Dollar",
+ "symbol": "BMD"
+ },
+ "BTN": {
+ "name": "i-Bhutanese Ngultrum",
+ "symbol": "BTN"
+ },
+ "BOB": {
+ "name": "i-Bolivian Boliviano",
+ "symbol": "BOB"
+ },
+ "BAM": {
+ "name": "i-Bosnia-Herzegovina Convertible Mark",
+ "symbol": "BAM"
+ },
+ "BWP": {
+ "name": "i-Botswana Pula",
+ "symbol": "BWP"
+ },
+ "BRL": {
+ "name": "i-Brazilian Real",
+ "symbol": "R$"
+ },
+ "GBP": {
+ "name": "i-British Pound Sterling",
+ "symbol": "£"
+ },
+ "BND": {
+ "name": "i-Brunei Dollar",
+ "symbol": "BND"
+ },
+ "BGN": {
+ "name": "i-Bulgarian Lev",
+ "symbol": "BGN"
+ },
+ "BIF": {
+ "name": "i-Burundian Franc",
+ "symbol": "BIF"
+ },
+ "KHR": {
+ "name": "i-Cambodian Riel",
+ "symbol": "KHR"
+ },
+ "CAD": {
+ "name": "i-Candian Dollar",
+ "symbol": "CA$"
+ },
+ "CVE": {
+ "name": "i-Cape Verdean Escudo",
+ "symbol": "CVE"
+ },
+ "KYD": {
+ "name": "i-Cayman Islands Dollar",
+ "symbol": "KYD"
+ },
+ "XAF": {
+ "name": "i-CFA Franc BCEA",
+ "symbol": "FCFA"
+ },
+ "XOF": {
+ "name": "i-CFA Franc BCEAO",
+ "symbol": "CFA"
+ },
+ "XPF": {
+ "name": "i-CFP Franc",
+ "symbol": "CFPF"
+ },
+ "CLP": {
+ "name": "i-Chilean Peso",
+ "symbol": "CLP"
+ },
+ "CNY": {
+ "name": "i-Chinese Yuan",
+ "symbol": "CNÂ¥"
+ },
+ "COP": {
+ "name": "i-Colombian Peso",
+ "symbol": "COP"
+ },
+ "KMF": {
+ "name": "i-Comorian Franc",
+ "symbol": "KMF"
+ },
+ "CDF": {
+ "name": "i-Congolese Franc",
+ "symbol": "CDF"
+ },
+ "CRC": {
+ "name": "i-Costa Rican Colón",
+ "symbol": "CRC"
+ },
+ "HRK": {
+ "name": "i-Croatian Kuna",
+ "symbol": "HRK"
+ },
+ "CUC": {
+ "name": "i-Cuban Convertable Peso",
+ "symbol": "CUC"
+ },
+ "CUP": {
+ "name": "I-Cuban Peso",
+ "symbol": "CUP"
+ },
+ "CZK": {
+ "name": "i-Czech Republic Koruna",
+ "symbol": "CZK"
+ },
+ "DKK": {
+ "name": "i-Danish Krone",
+ "symbol": "DKK"
+ },
+ "AED": {
+ "name": "i-Dirham yase-United Arab Emirates",
+ "symbol": "AED"
+ },
+ "DJF": {
+ "name": "i-Djiboutian Franc",
+ "symbol": "DJF"
+ },
+ "DOP": {
+ "name": "i-Dominican Peso",
+ "symbol": "DOP"
+ },
+ "XCD": {
+ "name": "i-East Caribbean Dollar",
+ "symbol": "EC$"
+ },
+ "EGP": {
+ "name": "i-Egyptian Pound",
+ "symbol": "EGP"
+ },
+ "ERN": {
+ "name": "i-Eritrean Nakfa",
+ "symbol": "ERN"
+ },
+ "ETB": {
+ "name": "i-Ethopian Birr",
+ "symbol": "ETB"
+ },
+ "EUR": {
+ "name": "i-Euro",
+ "symbol": "€"
+ },
+ "FKP": {
+ "name": "i-Falkland Islands Pound",
+ "symbol": "FKP"
+ },
+ "FJD": {
+ "name": "i-Fijian Dollar",
+ "symbol": "FJD"
+ },
+ "GMD": {
+ "name": "i-Gambian Dalasi",
+ "symbol": "GMD"
+ },
+ "GEL": {
+ "name": "i-Georgian Lari",
+ "symbol": "GEL"
+ },
+ "GHS": {
+ "name": "i-Ghanaian Cedi",
+ "symbol": "GHS"
+ },
+ "GIP": {
+ "name": "i-Gibraltar Pound",
+ "symbol": "GIP"
+ },
+ "GTQ": {
+ "name": "i-Guatemalan Quetzal",
+ "symbol": "GTQ"
+ },
+ "GNF": {
+ "name": "i-Gunean Franc",
+ "symbol": "GNF"
+ },
+ "GYD": {
+ "name": "i-Guyanaese Dollar",
+ "symbol": "GYD"
+ },
+ "HTG": {
+ "name": "i-Haitian Gourde",
+ "symbol": "HTG"
+ },
+ "HNL": {
+ "name": "i-Honduran Lempira",
+ "symbol": "HNL"
+ },
+ "HKD": {
+ "name": "i-Hong Kong Dollar",
+ "symbol": "HK$"
+ },
+ "HUF": {
+ "name": "i-Hungarian Forint",
+ "symbol": "HUF"
+ },
+ "ISK": {
+ "name": "i-Icelandic Króna",
+ "symbol": "ISK"
+ },
+ "INR": {
+ "name": "i-Indian Rupee",
+ "symbol": "₹"
+ },
+ "IDR": {
+ "name": "i-Indonesian Rupiah",
+ "symbol": "IDR"
+ },
+ "IRR": {
+ "name": "i-Iranian Rial",
+ "symbol": "IRR"
+ },
+ "IQD": {
+ "name": "i-Iraqi Dinar",
+ "symbol": "IQD"
+ },
+ "ILS": {
+ "name": "i-Israeli New Sheqel",
+ "symbol": "₪"
+ },
+ "JMD": {
+ "name": "i-Jamaican Dollar",
+ "symbol": "JMD"
+ },
+ "JPY": {
+ "name": "i-Japanese Yen",
+ "symbol": "JPÂ¥"
+ },
+ "JOD": {
+ "name": "i-Jordanian Dinar",
+ "symbol": "JOD"
+ },
+ "KZT": {
+ "name": "i-Kazakhstani Tenge",
+ "symbol": "KZT"
+ },
+ "KES": {
+ "name": "i-Kenyan Shilling",
+ "symbol": "KES"
+ },
+ "KWD": {
+ "name": "i-Kuwaiti Dinar",
+ "symbol": "KWD"
+ },
+ "KGS": {
+ "name": "i-Kyrgystani Som",
+ "symbol": "KGS"
+ },
+ "LAK": {
+ "name": "i-Laotian Kip",
+ "symbol": "LAK"
+ },
+ "LBP": {
+ "name": "i-Lebanese Pound",
+ "symbol": "LBP"
+ },
+ "LSL": {
+ "name": "i-Lesotho Loti",
+ "symbol": "LSL"
+ },
+ "LRD": {
+ "name": "i-Liberian Dollar",
+ "symbol": "LRD"
+ },
+ "LYD": {
+ "name": "i-Libyan Dinar",
+ "symbol": "LYD"
+ },
+ "LTL": {
+ "name": "i-Lithuanian Litas",
+ "symbol": "LTL"
+ },
+ "MOP": {
+ "name": "i-Macanese Pataca",
+ "symbol": "MOP"
+ },
+ "MKD": {
+ "name": "i-Macedonian Denar",
+ "symbol": "MKD"
+ },
+ "MGA": {
+ "name": "i-Malagasy Ariary",
+ "symbol": "MGA"
+ },
+ "MWK": {
+ "name": "i-Malawian Kwacha",
+ "symbol": "MWK"
+ },
+ "MYR": {
+ "name": "i-Malaysian Ringgit",
+ "symbol": "MYR"
+ },
+ "MVR": {
+ "name": "i-Maldivian Rufiyana",
+ "symbol": "MVR"
+ },
+ "MRO": {
+ "name": "i-Mauritanian Ouguiya",
+ "symbol": "MRO"
+ },
+ "MUR": {
+ "name": "i-Mauritian Rupee",
+ "symbol": "MUR"
+ },
+ "MZN": {
+ "name": "I-Metical yase-Mozambicque",
+ "symbol": "MZN"
+ },
+ "MXN": {
+ "name": "i-Mexican Peso",
+ "symbol": "MX$"
+ },
+ "MDL": {
+ "name": "i-Moldovan Leu",
+ "symbol": "MDL"
+ },
+ "MNT": {
+ "name": "i-Mongolian Tugrik",
+ "symbol": "MNT"
+ },
+ "MAD": {
+ "name": "i-Moroccan Dirham",
+ "symbol": "MAD"
+ },
+ "MMK": {
+ "name": "i-Myanma Kyat",
+ "symbol": "MMK"
+ },
+ "NAD": {
+ "name": "i-Namibian Dollar",
+ "symbol": "NAD"
+ },
+ "NPR": {
+ "name": "i-Nepalese Rupee",
+ "symbol": "NPR"
+ },
+ "ANG": {
+ "name": "i-Netherlands Antillean Guilder",
+ "symbol": "ANG"
+ },
+ "TWD": {
+ "name": "i-New Taiwan Dollar",
+ "symbol": "NT$"
+ },
+ "NZD": {
+ "name": "i-New Zealand Dollar",
+ "symbol": "NZ$"
+ },
+ "NIO": {
+ "name": "i-Nicaraguan Córdoba",
+ "symbol": "NIO"
+ },
+ "NGN": {
+ "name": "i-Nigerian Naira",
+ "symbol": "NGN"
+ },
+ "KPW": {
+ "name": "i-North Korean Won",
+ "symbol": "KPW"
+ },
+ "NOK": {
+ "name": "i-Norwegian Krone",
+ "symbol": "NOK"
+ },
+ "OMR": {
+ "name": "i-Omani Rial",
+ "symbol": "OMR"
+ },
+ "PKR": {
+ "name": "i-Pakistani Rupee",
+ "symbol": "PKR"
+ },
+ "PAB": {
+ "name": "i-Panamanian Balboa",
+ "symbol": "PAB"
+ },
+ "PGK": {
+ "name": "i-Papua New Guinean Kina",
+ "symbol": "PGK"
+ },
+ "PYG": {
+ "name": "i-Paraguayan Guarani",
+ "symbol": "PYG"
+ },
+ "PEN": {
+ "name": "i-Peruvian Nuevo Sol",
+ "symbol": "PEN"
+ },
+ "PHP": {
+ "name": "i-Philippine Peso",
+ "symbol": "PHP"
+ },
+ "PLN": {
+ "name": "i-Polish Zloty",
+ "symbol": "PLN"
+ },
+ "QAR": {
+ "name": "i-Qatari Rial",
+ "symbol": "QAR"
+ },
+ "RON": {
+ "name": "I-Romanian Leu",
+ "symbol": "RON"
+ },
+ "RUB": {
+ "name": "i-Russian Ruble",
+ "symbol": "RUB"
+ },
+ "RWF": {
+ "name": "i-Rwandan Franc",
+ "symbol": "RWF"
+ },
+ "SHP": {
+ "name": "i-Saint Helena Pound",
+ "symbol": "SHP"
+ },
+ "WST": {
+ "name": "i-Samoan Tala",
+ "symbol": "WST"
+ },
+ "STD": {
+ "name": "i-São Tomé kanye ne-Príncipe Dobra",
+ "symbol": "STD"
+ },
+ "SAR": {
+ "name": "i-Saudi Riyal",
+ "symbol": "SAR"
+ },
+ "RSD": {
+ "name": "i-Serbian Dinar",
+ "symbol": "RSD"
+ },
+ "SCR": {
+ "name": "i-Seychellois Rupee",
+ "symbol": "SCR"
+ },
+ "SLL": {
+ "name": "i-Sierra Leonean Leone",
+ "symbol": "SLL"
+ },
+ "SGD": {
+ "name": "i-Singapore Dollar",
+ "symbol": "SGD"
+ },
+ "SBD": {
+ "name": "i-Solomon Islands Dollar",
+ "symbol": "SBD"
+ },
+ "SOS": {
+ "name": "i-Somali Shilling",
+ "symbol": "SOS"
+ },
+ "ZAR": {
+ "name": "i-South African Rand",
+ "symbol": "R"
+ },
+ "KRW": {
+ "name": "i-South Korean Won",
+ "symbol": "â‚©"
+ },
+ "LKR": {
+ "name": "i-Sri Lankan Rupee",
+ "symbol": "LKR"
+ },
+ "SDG": {
+ "name": "i-Sudanese Pound",
+ "symbol": "SDG"
+ },
+ "SRD": {
+ "name": "i-Surinamese Dollar",
+ "symbol": "SRD"
+ },
+ "SZL": {
+ "name": "i-Swazi Lilangeni",
+ "symbol": "SZL"
+ },
+ "SEK": {
+ "name": "i-Swedish Krona",
+ "symbol": "SEK"
+ },
+ "CHF": {
+ "name": "i-Swiss Franc",
+ "symbol": "CHF"
+ },
+ "SYP": {
+ "name": "i-Syrian Pound",
+ "symbol": "SYP"
+ },
+ "TJS": {
+ "name": "i-Tajikistani Somoni",
+ "symbol": "TJS"
+ },
+ "TZS": {
+ "name": "i-Tanzanian Shilling",
+ "symbol": "TZS"
+ },
+ "THB": {
+ "name": "i-Thai Baht",
+ "symbol": "฿"
+ },
+ "TOP": {
+ "name": "i-Tongan Paʻanga",
+ "symbol": "TOP"
+ },
+ "TTD": {
+ "name": "i-Trinidad and Tobago Dollar",
+ "symbol": "TTD"
+ },
+ "TND": {
+ "name": "i-Tunisian Dinar",
+ "symbol": "TND"
+ },
+ "TRY": {
+ "name": "i-Turkish Lira",
+ "symbol": "TRY"
+ },
+ "TMT": {
+ "name": "i-Turkmenistani Manat",
+ "symbol": "TMT"
+ },
+ "UGX": {
+ "name": "i-Ugandan Shilling",
+ "symbol": "UGX"
+ },
+ "UAH": {
+ "name": "i-Ukrainian Hryvnia",
+ "symbol": "UAH"
+ },
+ "UYU": {
+ "name": "i-Uruguayan Peso",
+ "symbol": "UYU"
+ },
+ "USD": {
+ "name": "i-US Dollar",
+ "symbol": "US$"
+ },
+ "UZS": {
+ "name": "i-Uzbekistan Som",
+ "symbol": "UZS"
+ },
+ "VUV": {
+ "name": "i-Vanuatu Vatu",
+ "symbol": "VUV"
+ },
+ "VEF": {
+ "name": "i-Venezuelan Bolívar",
+ "symbol": "VEF"
+ },
+ "VND": {
+ "name": "i-Vietnamese Dong",
+ "symbol": "â‚«"
+ },
+ "YER": {
+ "name": "i-Yemeni Rial",
+ "symbol": "YER"
+ },
+ "ZMW": {
+ "name": "i-Zambian Kwacha",
+ "symbol": "ZMW"
+ },
+ "SVC": {
+ "name": "SVC",
+ "symbol": "SVC"
+ },
+ "SSP": {
+ "name": "Upondo waseNingizimu Sudan",
+ "symbol": "SSP"
+ },
+ "ZWL": {
+ "name": "ZWL",
+ "symbol": "ZWL"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/af.json b/library/intl/resources/language/af.json
new file mode 100644
index 000000000..1b704362f
--- /dev/null
+++ b/library/intl/resources/language/af.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanees"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amharies"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arabies"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armeens"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbeidjans"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Baskies"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengaals"
+ },
+ "my": {
+ "code": "my",
+ "name": "Birmaans"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnies"
+ },
+ "br": {
+ "code": "br",
+ "name": "Bretons"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgaars"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokees"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "da": {
+ "code": "da",
+ "name": "Deens"
+ },
+ "de": {
+ "code": "de",
+ "name": "Duits"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "en": {
+ "code": "en",
+ "name": "Engels"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estnies"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroees"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filippyns"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Fins"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Frans"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galisies"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgies"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Goedjarati"
+ },
+ "el": {
+ "code": "el",
+ "name": "Grieks"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebreeus"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hongaars"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Hoog-Sorbies"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Iers"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indonesies"
+ },
+ "it": {
+ "code": "it",
+ "name": "Italiaans"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japannees"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kasjmirs"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Katalaans"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazaks"
+ },
+ "km": {
+ "code": "km",
+ "name": "Khmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kirgisies"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Koreaans"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Kroaties"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lae Sorbies"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Letties"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingaals"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Litaus"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxemburgs"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malabaars"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Maleis"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malgassies"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltees"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Masedonies"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "Moderne Standaard Arabies"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "Moldawies"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongools"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisjen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Nederlands"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepalees"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Noord-Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Noordelike Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Noorse Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Noorweegse Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Oekraïens"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Oerdoe"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Oezbeeks"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Pandjabi"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pasjto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Persies"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Pools"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portugees"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Reto-Romaans"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Roemeens"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Russies"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Sentraal Atlas Tamazight"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serwies"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Sjiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Sjinees"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Skotse Gallies"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slowaaks"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Sloweens"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somalies"
+ },
+ "es": {
+ "code": "es",
+ "name": "Spaans"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standaard Marokkaanse Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Swahili (Kongo)"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Sweeds"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Switserse Duits"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Switserse hoog-Duits"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "Thai"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibettaans"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongaans"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Tsjeggies"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Turks"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uighur"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Viëtnamees"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Vlaams"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Wallies"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Wes-Fries"
+ },
+ "be": {
+ "code": "be",
+ "name": "Wit-Russies"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "is": {
+ "code": "is",
+ "name": "Yslands"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zoeloe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/agq.json b/library/intl/resources/language/agq.json
new file mode 100644
index 000000000..fcd1c1c03
--- /dev/null
+++ b/library/intl/resources/language/agq.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Àlabì"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "am": {
+ "code": "am",
+ "name": "Àmalì"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "be": {
+ "code": "be",
+ "name": "Bɛ̀làlusàn"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bɨ̀ŋgalì"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bùugɨlìa"
+ },
+ "my": {
+ "code": "my",
+ "name": "Bùumɛsɛ̀"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Chàenê"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Chɛ̂"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Dɔ̂s"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Dzàkpànê"
+ },
+ "de": {
+ "code": "de",
+ "name": "Dzamɛ̀"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Endì"
+ },
+ "id": {
+ "code": "id",
+ "name": "Èndònɛshìa"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "it": {
+ "code": "it",
+ "name": "Ètalìa"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "el": {
+ "code": "el",
+ "name": "Gɨ̀lêʔ"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hɔŋgalìa"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Kɨ̀fàlàŋsi"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kɨmɛ̀"
+ },
+ "en": {
+ "code": "en",
+ "name": "Kɨŋgele"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Kɨtsɔŋkaŋ"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Kpɛɛshìa"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Kpotùwgîi"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Kpɔlìs"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Kpuwndzabì"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "kùulîa"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Lùmanyìa"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Lushìa"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Màlae"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nɛ̀kpalì"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "es": {
+ "code": "es",
+ "name": "Sɨ̀kpanìs"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Sòmalì"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Suedìs"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "Tàe"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamì"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Tʉʉkìs"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ùkɛlɛnìa"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Uudùw"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vìyɛtnàmê"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yulùba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulù"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ak.json b/library/intl/resources/language/ak.json
new file mode 100644
index 000000000..8cdc120a1
--- /dev/null
+++ b/library/intl/resources/language/ak.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amarik"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arabik"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "be": {
+ "code": "be",
+ "name": "Belarus kasa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengali kasa"
+ },
+ "my": {
+ "code": "my",
+ "name": "Bɛɛmis kasa"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "en": {
+ "code": "en",
+ "name": "Borɔfo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bɔlgeria kasa"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Dɛɛkye"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Frɛnkye"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "el": {
+ "code": "el",
+ "name": "Greek kasa"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "de": {
+ "code": "de",
+ "name": "Gyaaman"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Gyapan kasa"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hangri kasa"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hindi"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indonihyia kasa"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "it": {
+ "code": "it",
+ "name": "Italy kasa"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kambodia kasa"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Korea kasa"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Kyaena kasa"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Kyɛk kasa"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Malay kasa"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nɛpal kasa"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Pɛɛhyia kasa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Pɔland kasa"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Pɔɔtugal kasa"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Pungyabi kasa"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Rahyia kasa"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Romenia kasa"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somalia kasa"
+ },
+ "es": {
+ "code": "es",
+ "name": "Spain kasa"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Sweden kasa"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "Taeland kasa"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamil kasa"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Tɛɛki kasa"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukren kasa"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu kasa"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Viɛtnam kasa"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/am.json b/library/intl/resources/language/am.json
new file mode 100644
index 000000000..5c46a5c45
--- /dev/null
+++ b/library/intl/resources/language/am.json
@@ -0,0 +1,738 @@
+{
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ሀንጋሪኛ"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "ሃá‹áˆ³áŠ›"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "ሉባ ካታንጋ"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "ሉቴንያንኛ"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "ሉኦ"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "ሉክዘáˆá‰ áˆ­áŒˆáˆ­áŠ›"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "ሉዪያ"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "ሊንጋላኛ"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "ላትቪያን"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "ላንጊ"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "ላá‹áˆµáŠ›"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "áˆá‰¤áŠ’ኛ"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "ሒንዱኛ"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "መካከለኛ አትላስ ታማዚáŒá‰µ"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "መደበኛ የሞሮኮ ታማዚáŒá‰µ"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "ሙንዳንáŒ"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "ማላያላáˆáŠ›"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "ማላይኛ"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "ማላጋስኛ"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "ማáˆá‰²áˆµáŠ›"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "ማራቲኛ"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "ማሳይ"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "ማሴዶንኛ"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "ማቻሜኛ"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "ማኩዋ ሜቶ"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "ማኮንዴ"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "ሜሩ"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ሞáˆá‹³á‰«á‹ŠáŠ“"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "ሞሪሲየኛ"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "ሞንጎላዊኛ"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "ሩንዲኛ"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ራሽኛ"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "ርዋ"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "ሮማኒያን"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "ሮማንሽ"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "ሮáˆá‰¦"
+ },
+ "se": {
+ "code": "se",
+ "name": "ሰሜናዊ ሳሚ"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ሰሜን ንዴብሌ"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "ሰርቢኛ"
+ },
+ "so": {
+ "code": "so",
+ "name": "ሱማáˆáŠ›"
+ },
+ "si": {
+ "code": "si",
+ "name": "ሲንሃáˆáŠ›"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "ሳáˆá‰¡áˆ©"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "ሳንጉ"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "ሳንጎኛ"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "ሴና"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "ስሎቪኛ"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "ስሎቫክኛ"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "ስዊድንኛ"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "ስዋሂሊኛ"
+ },
+ "es": {
+ "code": "es",
+ "name": "ስá“ኒሽ"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "ሶጋ"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "ሻáˆá‰£áˆ‹"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "ሾናኛ"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "ቀለሠያለ ቻይንኛ"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ቡáˆáŒ‹áˆªáŠ›"
+ },
+ "my": {
+ "code": "my",
+ "name": "ቡርማኛ"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "ባህላዊ ቻይንኛ"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "ባáˆá‰£áˆ­áŠ›"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "ባስክኛ"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "ባáŠá‹«"
+ },
+ "be": {
+ "code": "be",
+ "name": "ቤላራሻኛ"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "ቤና"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "ቤንጋሊኛ"
+ },
+ "br": {
+ "code": "br",
+ "name": "ብሬቶንኛ"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "ቦስኒያንኛ"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "ቦዶ"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "ቩንጆ"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ቪትናáˆáŠ›"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "ቫይ"
+ },
+ "te": {
+ "code": "te",
+ "name": "ተሉጉኛ"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "ቱርክኛ"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "ቲቤታንኛ"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "ታሚáˆáŠ›"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "ታሳዋቅ"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "ታቼáˆáˆ‚ት"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "ታይታኛ"
+ },
+ "th": {
+ "code": "th",
+ "name": "ታይኛ"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "ቴሶ"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "ትáŒáˆ­áŠ›"
+ },
+ "to": {
+ "code": "to",
+ "name": "ቶንጋኛ"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "ቺጋኛ"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "ቻይንኛ"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "ቼሮኬኛ"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ቼክኛ"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "ኑዌር"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "ኒያንኮáˆáŠ›"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "ናማ"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "ኔá“ሊኛ"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ንጎባኛ"
+ },
+ "am": {
+ "code": "am",
+ "name": "አማርኛ"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "አርመናዊ"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "አሱ"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "አካንኛ"
+ },
+ "az": {
+ "code": "az",
+ "name": "አዘርባጃንኛ"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "አይሪሽ"
+ },
+ "is": {
+ "code": "is",
+ "name": "አይስላንድኛ"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "አገáˆ"
+ },
+ "af": {
+ "code": "af",
+ "name": "አáሪካንኛ"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ኡርዱኛ"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ኡዊáŒáˆáˆ­áŠ›"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "ኡá‹á‰¤áŠ­áŠ›"
+ },
+ "et": {
+ "code": "et",
+ "name": "ኢስቶኒያንኛ"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "ኢቦኛ"
+ },
+ "id": {
+ "code": "id",
+ "name": "ኢንዶኔዥኛ"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ኢዊ"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "ኤስáራንቶ"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "እስኮትስ ጌáˆáŠ­áŠ›"
+ },
+ "en": {
+ "code": "en",
+ "name": "እንáŒáˆŠá‹áŠ›"
+ },
+ "or": {
+ "code": "or",
+ "name": "ኦሪያኛ"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "ኪርጊá‹áŠ›"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "ኪኩዩ"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "ካለንጂን"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "ካላሊሱትኛ"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "ካáˆá‰£"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "ካሽሚርኛ"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "ካቡቨርዲያኑ"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "ካብይáˆ"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "ካታላንኛ"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "ካናዳኛ"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "ካዛክኛ"
+ },
+ "km": {
+ "code": "km",
+ "name": "ክመርኛ ማእከላዊ"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "ክሮሽያንኛ"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "ክዋሲዮ"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "ኮሪያኛ"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "ኮንጎ ስዋሂሊ"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "ኮይራ ቺኒ"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "ኮይራቦሮ ሴኒ"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "ወáˆáˆ½"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "ዓረብኛ"
+ },
+ "he": {
+ "code": "he",
+ "name": "ዕብራስጥ"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ዘመናዊ መደበኛ ዓረብኛ"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "ዙሉኛ"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "ዛርማኛ"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "የላይኛዠሶርቢያንኛ"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "የáˆá‹•áˆ«á‰¥ áሪስኛ"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "የስዊዠከáተኛ ጀርመንኛ"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "የስዊዠጀርመን"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "የስዊዠáˆáˆ¨áŠ•áˆ³á‹­áŠ›"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "የብሪቲሽ እንáŒáˆŠá‹áŠ›"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "የብራዚሠá–ርቹጋáˆáŠ›"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "የታችኛዠሶርቢያንኛ"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "የኖርዌይ ቦክማáˆ"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "የኖርዌይ ናይኖርስክ"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "የአሜሪካ እንáŒáˆŠá‹áŠ›"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "የአá‹áˆ®á“ እስá“ንኛ"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "የአá‹áˆ®á“ á–ርቹጋáˆáŠ›"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "የአá‹áˆµá‰µáˆ«áˆŠá‹« እንáŒáˆŠá‹áŠ›"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "የኦስትሪያ ጀርመን"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "የካናዳ እንáŒáˆŠá‹áŠ›"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "የካናዳ áˆáˆ¨áŠ•áˆ³á‹­áŠ›"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ዩክሬንኛ"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ዮሩባዊኛ"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ደች"
+ },
+ "da": {
+ "code": "da",
+ "name": "ዴኒሽ"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "ድዞንáŒáŠ»áŠ›"
+ },
+ "de": {
+ "code": "de",
+ "name": "ጀርመን"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ጃá“ንኛ"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "ጆላ áŽáŠ•á‹«áŠ›"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "ጆርጂያን"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "ጉስሊኛ"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "ጉጃርቲኛ"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "ጋሊሺያ"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ጋንዳኛ"
+ },
+ "el": {
+ "code": "el",
+ "name": "áŒáˆªáŠ­áŠ›"
+ },
+ "it": {
+ "code": "it",
+ "name": "ጣሊያንኛ"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "áˆáˆ¨áŠ•áˆ³á‹­áŠ›"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "áŠáˆŠá’ንኛ"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "áŠáŠ’ሽ"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "á‹áˆ®áŠ›"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "áሌሚሽ"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "áርሺያኛ"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "á‘ንጃብኛ"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "á“ሽቶኛ"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "á–ሊሽኛ"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "á–ርቹጋáˆáŠ›"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ar-AE.json b/library/intl/resources/language/ar-AE.json
new file mode 100644
index 000000000..654a748e6
--- /dev/null
+++ b/library/intl/resources/language/ar-AE.json
@@ -0,0 +1,738 @@
+{
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "آسو"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "إمبو"
+ },
+ "az": {
+ "code": "az",
+ "name": "الأذربيجانية"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "الأردية"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "الأرمينية"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "الأسترية"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "الأغم"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "الأغورية"
+ },
+ "af": {
+ "code": "af",
+ "name": "الأÙريقانية"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "الأكانية"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "الألبانية"
+ },
+ "de": {
+ "code": "de",
+ "name": "الألمانية"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "الألمانية السويسرية"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "الألمانية العليا السويسرية"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "الألمانية النمساوية"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "الأمازيغية وسط الأطلس"
+ },
+ "am": {
+ "code": "am",
+ "name": "الأمهرية"
+ },
+ "or": {
+ "code": "or",
+ "name": "الأورييا"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "الأوزباكية"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "الأوكرانية"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "الأيرلندية"
+ },
+ "is": {
+ "code": "is",
+ "name": "الأيسلاندية"
+ },
+ "es": {
+ "code": "es",
+ "name": "الإسبانية"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "الإسبانية الأوروبية"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "الإسبرانتو"
+ },
+ "et": {
+ "code": "et",
+ "name": "الإستونية"
+ },
+ "en": {
+ "code": "en",
+ "name": "الإنجليزية"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "الإنجليزية الأسترالية"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "الإنجليزية البريطانية"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "الإنجليزية الكندية"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "الإنجليزية الولايات المتحدة"
+ },
+ "id": {
+ "code": "id",
+ "name": "الإندونيسية"
+ },
+ "it": {
+ "code": "it",
+ "name": "الإيطالية"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "الإيوندو"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "الإيوي"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "الباسا"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "البامبارا"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "البرتغالية"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "البرتغالية الأوروبية"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "البرتغالية البرازيلية"
+ },
+ "br": {
+ "code": "br",
+ "name": "البريتونية"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "البشتونية"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "البلغارية"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "البنجابية"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "البنغالية"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "البودو"
+ },
+ "my": {
+ "code": "my",
+ "name": "البورمية"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "البوسنية"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "البوكمالية النرويجية"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "البولندية"
+ },
+ "be": {
+ "code": "be",
+ "name": "البيلوروسية"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "التاميلية"
+ },
+ "th": {
+ "code": "th",
+ "name": "التايلاندية"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "التبتية"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "التركية"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "التشيكية"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "التمازيغية المغربية القياسية"
+ },
+ "to": {
+ "code": "to",
+ "name": "التونغية"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "التيجرينيا"
+ },
+ "te": {
+ "code": "te",
+ "name": "التيلجو"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "الجاليكية"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "الجاندا"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "الجورجية"
+ },
+ "km": {
+ "code": "km",
+ "name": "الخميرية"
+ },
+ "da": {
+ "code": "da",
+ "name": "الدانماركية"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "الرندي"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "الروسية"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "الرومانشية"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "الرومانية"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "الزارمية"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "الزولو"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "الزونخاية"
+ },
+ "se": {
+ "code": "se",
+ "name": "السامي الشمالي"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "السانجو"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "السلوÙاكية"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "السلوÙانية"
+ },
+ "si": {
+ "code": "si",
+ "name": "السنهالية"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "السواحلية"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "السويدية"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "الشونا"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "الشيروكي"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "الصربية"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "الصربية السÙلى"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "الصربية العليا"
+ },
+ "so": {
+ "code": "so",
+ "name": "الصومالية"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "الصينية"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "الصينية التقليدية"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "الصينية المبسطة"
+ },
+ "he": {
+ "code": "he",
+ "name": "العبرية"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "العربية"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "العربية الرسمية الحديثة"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "الغوجاراتية"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "الغيزية"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "الغيلية الأسكتلندية"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "الÙارسية"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "الÙارويز"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "الÙاي"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "الÙرنسية"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "الÙرنسية السويسرية"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "الÙرنسية الكندية"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "الÙريزيان"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "الÙريلايان"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "الÙلبينية"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "الÙلة"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "الÙلمنك"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "الÙنلندية"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "الÙيتنامية"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "القبيلية"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "القرغيزية"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "الكازاخستانية"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "الكالاليست"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "الكامبا"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "الكانادا"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "الكتالانية"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "الكرواتية"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "الكشميرية"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "الكورية"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "الكونغو السواحلية"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "الكيكيو"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "اللاتÙية"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "اللاوية"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "اللبا-كاتانجا"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "اللتوانية"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "اللو"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "اللوكسمبرجية"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "اللينجالا"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "الماراثي"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "الماساي"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "المالاجاشية"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "المالطية"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "الماليالام"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "المقدونية"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "المنغولية"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "المورسيانية"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "المولدوÙية"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "النديبيل الشمالي"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "النوير"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "النيانكول"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "النيبالية"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "النينورسك النرويجي"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "الهندية"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "الهنغارية"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "الهوسا"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "الهولندية"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "الولزية"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "اليابانية"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "اليوروبية"
+ },
+ "el": {
+ "code": "el",
+ "name": "اليونانية"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "باÙيا"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "بينا"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "تاساواق"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "تشيغا"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "تكلحيت"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "تيتا"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "تيسو"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "جولا Ùونيا"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "روا"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "رومبو"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "سامبورو"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "سانغو"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "سوجا"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "سينا"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "شامبالا"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Ùونجو"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "كابوÙيرديانو"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "كالينجين"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "كواسيو"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "كويرا تشيني"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "كويرابورو سيني"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "لانجي"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "لغة الباسك"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "لغة الملايو"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "لويا"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "ماتشيم"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "ماخاوا-ميتو"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "ماكونده"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "مندنج"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "ميرو"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "ناما"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "نغومبا"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "يانجبن"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ar-EG.json b/library/intl/resources/language/ar-EG.json
new file mode 100644
index 000000000..030eee4c6
--- /dev/null
+++ b/library/intl/resources/language/ar-EG.json
@@ -0,0 +1,738 @@
+{
+ "ebu": {
+ "code": "ebu",
+ "name": "إمبو"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "الآسو"
+ },
+ "az": {
+ "code": "az",
+ "name": "الأذربيجانية"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "الأردية"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "الأرمينية"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "الأسترية"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "الأغيمية"
+ },
+ "af": {
+ "code": "af",
+ "name": "الأÙريقانية"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "الأكانية"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "الألبانية"
+ },
+ "de": {
+ "code": "de",
+ "name": "الألمانية"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "الألمانية السويسرية"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "الألمانية العليا السويسرية"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "الألمانية النمساوية"
+ },
+ "am": {
+ "code": "am",
+ "name": "الأمهرية"
+ },
+ "or": {
+ "code": "or",
+ "name": "الأورييا"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "الأوزبكية"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "الأوكرانية"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "الأويغورية"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "الأيرلندية"
+ },
+ "is": {
+ "code": "is",
+ "name": "الأيسلاندية"
+ },
+ "es": {
+ "code": "es",
+ "name": "الإسبانية"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "الإسبانية الأوروبية"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "الإسبانية المكسيكية"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "الإسبرانتو"
+ },
+ "et": {
+ "code": "et",
+ "name": "الإستونية"
+ },
+ "en": {
+ "code": "en",
+ "name": "الإنجليزية"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "الإنجليزية الأسترالية"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "الإنجليزية البريطانية"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "الإنجليزية الكندية"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "الإنجليزية الولايات المتحدة"
+ },
+ "id": {
+ "code": "id",
+ "name": "الإندونيسية"
+ },
+ "it": {
+ "code": "it",
+ "name": "الإيطالية"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "الإيوندو"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "الإيوي"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "الباسا"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "البامبارا"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "البرتغالية"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "البرتغالية الأوروبية"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "البرتغالية البرازيلية"
+ },
+ "br": {
+ "code": "br",
+ "name": "البريتونية"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "البشتونية"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "البلغارية"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "البنجابية"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "البنغالية"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "البودو"
+ },
+ "my": {
+ "code": "my",
+ "name": "البورمية"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "البوسنية"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "البوكمالية النرويجية"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "البولندية"
+ },
+ "be": {
+ "code": "be",
+ "name": "البيلاروسية"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "التاشلحيت"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "التاميلية"
+ },
+ "th": {
+ "code": "th",
+ "name": "التايلاندية"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "التبتية"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "التركية"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "التشيكية"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "التمازيغية الأوسط أطلسية"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "التمازيغية المغربية القياسية"
+ },
+ "to": {
+ "code": "to",
+ "name": "التونغية"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "التيزو"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "التيغرينية"
+ },
+ "te": {
+ "code": "te",
+ "name": "التيلجو"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "الجاليكية"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "الجاندا"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "الجورجية"
+ },
+ "km": {
+ "code": "km",
+ "name": "الخميرية"
+ },
+ "da": {
+ "code": "da",
+ "name": "الدنماركية"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "الرندي"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "الروا"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "الروسية"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "الرومانشية"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "الرومانية"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "الرومبو"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "الزارمية"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "الزولو"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "الزونخاية"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "السامبورو"
+ },
+ "se": {
+ "code": "se",
+ "name": "السامي الشمالي"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "السانجو"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "السانغو"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "السلوÙاكية"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "السلوÙانية"
+ },
+ "si": {
+ "code": "si",
+ "name": "السنهالية"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "السواحلية"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "السوغا"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "السويدية"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "السينا"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "الشمبالاية"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "الشونا"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "الشيروكية"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "الصربية"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "الصربية السÙلى"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "الصربية العليا"
+ },
+ "so": {
+ "code": "so",
+ "name": "الصومالية"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "الصينية"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "الصينية التقليدية"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "الصينية المبسطة"
+ },
+ "he": {
+ "code": "he",
+ "name": "العبرية"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "العربية"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "العربية الرسمية الحديثة"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "الغوجاراتية"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "الغيزية"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "الغيلية الأسكتلندية"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "الÙارسية"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "الÙارويز"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "الÙاي"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "الÙرنسية"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "الÙرنسية السويسرية"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "الÙرنسية الكندية"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "الÙريزيان"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "الÙريلايان"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "الÙلبينية"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "الÙلة"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "الÙلمنكية"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "الÙنلندية"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "الÙونجو"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "الÙيتنامية"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "القبيلية"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "الكابوÙيرديانيوية"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "الكازاخستانية"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "الكالاليست"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "الكالينجينية"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "الكامبا"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "الكانادية"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "الكتالانية"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "الكرواتية"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "الكشميرية"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "الكورية"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "الكورية التشينية"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "الكيرغزستانية"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "الكيكيو"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "اللاتÙية"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "اللانغية"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "اللاوية"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "اللبا-كاتانجا"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "اللتوانية"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "اللو"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "اللوكسمبرجية"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "اللينجالا"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "الماتشامية"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "الماراثية"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "الماساي"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "الماكوندية"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "المالاجاشية"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "المالطية"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "الماليالام"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "المقدونية"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "المنغولية"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "المورسيانية"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "المولدوÙية"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "الميرو"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "النديبيل الشمالي"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "النوير"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "النيانكول"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "النيبالية"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "النينورسك النرويجي"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "الهندية"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "الهنغارية"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "الهوسا"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "الهولندية"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "الوالسر"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "الولشية"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "اليابانية"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "اليانغبين"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "اليوروبية"
+ },
+ "el": {
+ "code": "el",
+ "name": "اليونانية"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "بينا"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "تشيغا"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "تيتا"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "جولا Ùونيا"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "لغة الباسك"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "لغة الباÙيا"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "لغة التاساواك"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "لغة الكواسيو"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "لغة الكوري ابروسيني"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "لغة الكولونيان"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "لغة الكونغو السواحلية"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "لغة اللويا"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "لغة الملايو"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "لغة الناما"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "لغة ماكوا ميتو"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "مندنج"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "نغومبا"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ar.json b/library/intl/resources/language/ar.json
new file mode 100644
index 000000000..a1beaba5f
--- /dev/null
+++ b/library/intl/resources/language/ar.json
@@ -0,0 +1,738 @@
+{
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "آسو"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "إمبو"
+ },
+ "az": {
+ "code": "az",
+ "name": "الأذربيجانية"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "الأردية"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "الأرمينية"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "الأسترية"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "الأغم"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "الأغورية"
+ },
+ "af": {
+ "code": "af",
+ "name": "الأÙريقانية"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "الأكانية"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "الألبانية"
+ },
+ "de": {
+ "code": "de",
+ "name": "الألمانية"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "الألمانية السويسرية"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "الألمانية العليا السويسرية"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "الألمانية النمساوية"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "الأمازيغية وسط الأطلس"
+ },
+ "am": {
+ "code": "am",
+ "name": "الأمهرية"
+ },
+ "or": {
+ "code": "or",
+ "name": "الأورييا"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "الأوزباكية"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "الأوكرانية"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "الأيرلندية"
+ },
+ "is": {
+ "code": "is",
+ "name": "الأيسلاندية"
+ },
+ "es": {
+ "code": "es",
+ "name": "الإسبانية"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "الإسبانية الأوروبية"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "الإسبرانتو"
+ },
+ "et": {
+ "code": "et",
+ "name": "الإستونية"
+ },
+ "en": {
+ "code": "en",
+ "name": "الإنجليزية"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "الإنجليزية الأسترالية"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "الإنجليزية البريطانية"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "الإنجليزية الكندية"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "الإنجليزية الولايات المتحدة"
+ },
+ "id": {
+ "code": "id",
+ "name": "الإندونيسية"
+ },
+ "it": {
+ "code": "it",
+ "name": "الإيطالية"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "الإيوندو"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "الإيوي"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "الباسا"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "البامبارا"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "البرتغالية"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "البرتغالية الأوروبية"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "البرتغالية البرازيلية"
+ },
+ "br": {
+ "code": "br",
+ "name": "البريتونية"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "البشتونية"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "البلغارية"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "البنجابية"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "البنغالية"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "البودو"
+ },
+ "my": {
+ "code": "my",
+ "name": "البورمية"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "البوسنية"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "البوكمالية النرويجية"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "البولندية"
+ },
+ "be": {
+ "code": "be",
+ "name": "البيلوروسية"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "التاميلية"
+ },
+ "th": {
+ "code": "th",
+ "name": "التايلاندية"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "التبتية"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "التركية"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "التشيكية"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "التمازيغية المغربية القياسية"
+ },
+ "to": {
+ "code": "to",
+ "name": "التونغية"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "التيجرينيا"
+ },
+ "te": {
+ "code": "te",
+ "name": "التيلجو"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "الجاليكية"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "الجاندا"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "الجورجية"
+ },
+ "km": {
+ "code": "km",
+ "name": "الخميرية"
+ },
+ "da": {
+ "code": "da",
+ "name": "الدانماركية"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "الرندي"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "الروسية"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "الرومانشية"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "الرومانية"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "الزارمية"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "الزولو"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "الزونخاية"
+ },
+ "se": {
+ "code": "se",
+ "name": "السامي الشمالي"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "السانجو"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "السلوÙاكية"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "السلوÙانية"
+ },
+ "si": {
+ "code": "si",
+ "name": "السنهالية"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "السواحلية"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "السويدية"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "الشونا"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "الشيروكي"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "الصربية"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "الصربية السÙلى"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "الصربية العليا"
+ },
+ "so": {
+ "code": "so",
+ "name": "الصومالية"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "الصينية"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "الصينية التقليدية"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "الصينية المبسطة"
+ },
+ "he": {
+ "code": "he",
+ "name": "العبرية"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "العربية"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "العربية الرسمية الحديثة"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "الغوجاراتية"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "الغيزية"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "الغيلية الأسكتلندية"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "الÙارسية"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "الÙارويز"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "الÙاي"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "الÙرنسية"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "الÙرنسية السويسرية"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "الÙرنسية الكندية"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "الÙريزيان"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "الÙريلايان"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "الÙلبينية"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "الÙلة"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "الÙلمنك"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "الÙنلندية"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "الÙيتنامية"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "القبيلية"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "القرغيزية"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "الكازاخستانية"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "الكالاليست"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "الكامبا"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "الكانادا"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "الكتالانية"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "الكرواتية"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "الكشميرية"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "الكورية"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "الكونغو السواحلية"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "الكيكيو"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "اللاتÙية"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "اللاوية"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "اللبا-كاتانجا"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "اللتوانية"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "اللو"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "اللوكسمبرجية"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "اللينجالا"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "الماراثي"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "الماساي"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "المالاجاشية"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "المالطية"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "الماليالام"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "المقدونية"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "المنغولية"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "المورسيانية"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "المولدوÙية"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "النديبيل الشمالي"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "النوير"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "النيانكول"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "النيبالية"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "النينورسك النرويجي"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "الهندية"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "الهنغارية"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "الهوسا"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "الهولندية"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "الولزية"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "اليابانية"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "اليوروبية"
+ },
+ "el": {
+ "code": "el",
+ "name": "اليونانية"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "باÙيا"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "بينا"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "تاساواق"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "تشلحيت"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "تشيغا"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "تيتا"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "تيسو"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "جولا Ùونيا"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "روا"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "رومبو"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "سامبورو"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "سانغو"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "سوجا"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "سينا"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "شامبالا"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Ùونجو"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "كابوÙيرديانو"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "كالينجين"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "كواسيو"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "كويرا تشيني"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "كويرابورو سيني"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "لانجي"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "لغة الباسك"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "لغة الملايو"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "لويا"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "ماتشيم"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "ماخاوا-ميتو"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "ماكونده"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "مندنج"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "ميرو"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "ناما"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "نغومبا"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "يانجبن"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/asa.json b/library/intl/resources/language/asa.json
new file mode 100644
index 000000000..6a49e8f55
--- /dev/null
+++ b/library/intl/resources/language/asa.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Kiajemi"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Kiakan"
+ },
+ "am": {
+ "code": "am",
+ "name": "Kiamhari"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Kiarabu"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Kibangla"
+ },
+ "be": {
+ "code": "be",
+ "name": "Kibelarusi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Kibulgaria"
+ },
+ "my": {
+ "code": "my",
+ "name": "Kiburma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Kicheki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Kichina"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Kidhulu"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Kifarantha"
+ },
+ "el": {
+ "code": "el",
+ "name": "Kigiriki"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Kihautha"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Kihindi"
+ },
+ "es": {
+ "code": "es",
+ "name": "Kihithpania"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Kiholandhi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Kihungari"
+ },
+ "id": {
+ "code": "id",
+ "name": "Kiindonethia"
+ },
+ "en": {
+ "code": "en",
+ "name": "Kiingeredha"
+ },
+ "it": {
+ "code": "it",
+ "name": "Kiitaliaano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Kijapani"
+ },
+ "de": {
+ "code": "de",
+ "name": "Kijerumani"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kikambodia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Kikorea"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Kimalesia"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Kinepali"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Kipare"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Kipolandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Kipunjabi"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Kireno"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Kiromania"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Kiruthi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Kitailandi"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Kitamil"
+ },
+ "so": {
+ "code": "so",
+ "name": "Kithomali"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Kithwidi"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Kituruki"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Kiukrania"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Kiurdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Kivietinamu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Kiyoruba"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ast.json b/library/intl/resources/language/ast.json
new file mode 100644
index 000000000..eac761f74
--- /dev/null
+++ b/library/intl/resources/language/ast.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanu"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán de Suiza"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "altu sorbiu"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "altualemán de Suiza"
+ },
+ "am": {
+ "code": "am",
+ "name": "amharicu"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar modernu"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armeniu"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturianu"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaixanu"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basaa"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "baxu sorbiu"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalín"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorrusu"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmanu"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosniu"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaru"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "cabuverdianu"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemirés"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarés"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checu"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroqui"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chinu"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chinu simplificáu"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chinu tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "colonianu"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreanu"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "danés"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embú"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovacu"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "eslovenu"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estoniu"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipín"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finlandés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamencu"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés de Canadá"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés de Suiza"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón occidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulianu"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fulah"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélicu escocés"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallegu"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "el": {
+ "code": "el",
+ "name": "griegu"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "guyaratí"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "ḥausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebréu"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaru"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesiu"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés americanu"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés de Canadá"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés de Gran Bretaña"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italianu"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabileñu"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazaquistanín"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguistanín"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosianu"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituanu"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedoniu"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayu"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgaxe"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavu"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele del norte"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandés"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalés"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "noruegu Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "noruegu Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pashtu"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polacu"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués del Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punyabí"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romanche"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumanu"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "rusu"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami del norte"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbiu"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalín"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "suaḥili"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "suecu"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili del Congo"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight del Atlas central"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight estándar de Marruecos"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetanu"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonganu"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turcu"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraín"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbequistanín"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "vascu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamín"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "xaponés"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "xeorxanu"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/az.json b/library/intl/resources/language/az.json
new file mode 100644
index 000000000..b0af15ae4
--- /dev/null
+++ b/library/intl/resources/language/az.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaans"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akanca"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aqhem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "alban"
+ },
+ "de": {
+ "code": "de",
+ "name": "alman"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "Amerika ingiliscəsi"
+ },
+ "am": {
+ "code": "am",
+ "name": "amhar"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturicÉ™"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "aşağı sorb"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Avstraliya ingiliscəsi"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "Avstriya almancası"
+ },
+ "az": {
+ "code": "az",
+ "name": "azərbaycan"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa dili"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "bask"
+ },
+ "be": {
+ "code": "be",
+ "name": "belarus"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "benqal"
+ },
+ "my": {
+ "code": "my",
+ "name": "birma"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmal norveç"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bolqar"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosniak"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Braziliya portuqalcası"
+ },
+ "br": {
+ "code": "br",
+ "name": "Bretonca"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Britaniya ingiliscəsi"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "çex"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "çiqa"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "çin"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "çiroki"
+ },
+ "da": {
+ "code": "da",
+ "name": "danimarka"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "diola"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzonqa"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "erməni"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "eston"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "eve"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "evondo dili"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "ənənəvi çin"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "ərəb"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "farer"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "fars"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filippin"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "fin"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamand"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "fransız"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friul dili"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula dili"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "gürcü"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "holland"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "xorvat"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonez"
+ },
+ "en": {
+ "code": "en",
+ "name": "ingilis"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irland"
+ },
+ "is": {
+ "code": "is",
+ "name": "island"
+ },
+ "es": {
+ "code": "es",
+ "name": "ispan"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "isveç"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "İsveçrə almancası"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "İsveçrə fransızcası"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "İsveçrə yüksək almancası"
+ },
+ "it": {
+ "code": "it",
+ "name": "italyan"
+ },
+ "he": {
+ "code": "he",
+ "name": "ivrit"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabile"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "kabuverdian"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalencin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Kanada fransızcası"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "Kanada ingiliscəsi"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannada"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Kastiliya ispancası"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kaÅŸmir"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalan"
+ },
+ "km": {
+ "code": "km",
+ "name": "kxmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Konqo suahilicəsi"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "koreya"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra çiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kvasio"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "qalisian"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "qanda"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "qazax"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "qərbi friz"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "qırğız"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "qucarat"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "qusi"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laos"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "latış"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "linqala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "litva"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanqa"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "lüksemburq"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "macar"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "maçam"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "maxuva-meetto"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedon"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makond"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malaqas"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malay"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "malta"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marati"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masay"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Meksika ispancası"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Mərkəzi Atlas tamazicəsi"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "Modern Standart ÆrÉ™bcÉ™"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldav"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "monqol"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "morisien"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundanq"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepal"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "nqomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nünorsk norveç"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankol"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "özbək"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "pəncab"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polyak"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portuqal"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Portuqaliya portuqalcası"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "puÅŸtu"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retoroman"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rua"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumın"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "rus"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "sadələşmiş çin"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sanqo"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sanqu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serb"
+ },
+ "si": {
+ "code": "si",
+ "name": "sinhal"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "skot gaelik dili"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "sloven"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soqa"
+ },
+ "so": {
+ "code": "so",
+ "name": "somali"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "suahili"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "ÅŸambala"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ÅŸimali ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "ÅŸimali sami"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "ÅŸona"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "taçelit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazi"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasavaq"
+ },
+ "th": {
+ "code": "th",
+ "name": "tay"
+ },
+ "te": {
+ "code": "te",
+ "name": "teluqu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibet"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tiqrin"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonqa"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "türk"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "uels"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrayna"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uyÄŸur"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunyo"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vyetnam"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "yapon"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "yuxarı sorb"
+ },
+ "el": {
+ "code": "el",
+ "name": "yunan"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/bas.json b/library/intl/resources/language/bas.json
new file mode 100644
index 000000000..fac49c2c7
--- /dev/null
+++ b/library/intl/resources/language/bas.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Æàsàa"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Hɔp u akan"
+ },
+ "am": {
+ "code": "am",
+ "name": "HÉ”p u amhÄrìk"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Hɔp u arâb"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Hɔp u bɛŋgàli"
+ },
+ "be": {
+ "code": "be",
+ "name": "Hɔp u bièlòrûs"
+ },
+ "my": {
+ "code": "my",
+ "name": "Hɔp u birmàn"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Hɔp u bûlgâr"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hɔp u ɓausa"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Hɔp u cɛ̂k"
+ },
+ "el": {
+ "code": "el",
+ "name": "Hɔp u gri ᷇kyà"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hɔp u hindì"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hɔp u hɔŋgrìi"
+ },
+ "id": {
+ "code": "id",
+ "name": "Hɔp u indònesìà"
+ },
+ "it": {
+ "code": "it",
+ "name": "Hɔp u italìà"
+ },
+ "de": {
+ "code": "de",
+ "name": "Hɔp u jamân"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Hɔp u kinà"
+ },
+ "km": {
+ "code": "km",
+ "name": "Hɔp u kmɛ̂r"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Hɔp u kɔrēà"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Hɔp u makɛ᷆"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Hɔp u nepa᷆l"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Hɔp u nlɛ̀ndi"
+ },
+ "en": {
+ "code": "en",
+ "name": "Hɔp u ŋgisì"
+ },
+ "es": {
+ "code": "es",
+ "name": "HÉ”p u panyÄ"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Hɔp u pɛnjàbi"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Hɔp u pɛrsìà"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Hɔp u pɔlɔ̄nà"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Hɔp u pɔtɔ̄kì"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Hɔp u pulàsi"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Hɔp u rùmanìà"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Hɔp u ruslànd"
+ },
+ "so": {
+ "code": "so",
+ "name": "Hɔp u somàlî"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Hɔp u suɛ᷆d"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Hɔp u tamu᷆l"
+ },
+ "th": {
+ "code": "th",
+ "name": "Hɔp u tây"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Hɔp u tûrk"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Hɔp u ukrǎnìà"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Hɔp u urdù"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Hɔp u vyɛ̄dnàm"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Hɔp u yapàn"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Hɔp u yorūbà"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Hɔp u zulù"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/be.json b/library/intl/resources/language/be.json
new file mode 100644
index 000000000..3a53bd0d8
--- /dev/null
+++ b/library/intl/resources/language/be.json
@@ -0,0 +1,738 @@
+{
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burmese"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "km": {
+ "code": "km",
+ "name": "Khmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "az": {
+ "code": "az",
+ "name": "азербайджанÑкаÑ"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "албанÑкаÑ"
+ },
+ "am": {
+ "code": "am",
+ "name": "амхарÑкаÑ"
+ },
+ "en": {
+ "code": "en",
+ "name": "англійÑкаÑ"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "англійÑÐºÐ°Ñ (аўÑтрал.)"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "англійÑÐºÐ°Ñ (ЗШÐ)"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "англійÑÐºÐ°Ñ (канад.)"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "арабÑкаÑ"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "армÑнÑкаÑ"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "аÑтурыйÑкаÑ"
+ },
+ "af": {
+ "code": "af",
+ "name": "афрыкаанÑ"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "балгарÑкаÑ"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "баÑкÑкаÑ"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "баÑнійÑкаÑ"
+ },
+ "be": {
+ "code": "be",
+ "name": "беларуÑкаÑ"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "бенгальÑкаÑ"
+ },
+ "br": {
+ "code": "br",
+ "name": "брÑтонÑкаÑ"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "в’етнамÑкаÑ"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "валійÑкаÑ"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "венгерÑкаÑ"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "галандÑкаÑ"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "галіÑійÑкаÑ"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "грузінÑкаÑ"
+ },
+ "el": {
+ "code": "el",
+ "name": "грÑцкаÑ"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "гуÑраці"
+ },
+ "da": {
+ "code": "da",
+ "name": "дацкаÑ"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "зулу"
+ },
+ "id": {
+ "code": "id",
+ "name": "інданезійÑкаÑ"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "ірландÑкаÑ"
+ },
+ "is": {
+ "code": "is",
+ "name": "Ñ–ÑландÑкаÑ"
+ },
+ "es": {
+ "code": "es",
+ "name": "Ñ–ÑпанÑкаÑ"
+ },
+ "it": {
+ "code": "it",
+ "name": "італьÑнÑкаÑ"
+ },
+ "he": {
+ "code": "he",
+ "name": "іўрыт"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "казахÑкаÑ"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "каннада"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "карÑйÑкаÑ"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "каталонÑкаÑ"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "кітайÑкаÑ"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "лаоÑкаÑ"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "латышÑкаÑ"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "лінгала"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "літоўÑкаÑ"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "луо"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "македонÑкаÑ"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "малайÑкаÑ"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "малаÑламÑкаÑ"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "малдаўÑкаÑ"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "мальгашÑкаÑ"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "мальтыйÑкаÑ"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "мангольÑкаÑ"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "маратхі"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "маÑаі"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "нарвежÑÐºÐ°Ñ (нюнорÑк)"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "нарвÑÑÐºÐ°Ñ Ð±ÑƒÐºÐ¼Ð°Ð»"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "непальÑкаÑ"
+ },
+ "de": {
+ "code": "de",
+ "name": "нÑмецкаÑ"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "нÑÐ¼ÐµÑ†ÐºÐ°Ñ (аўÑÑ‚Ñ€.)"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "нÑÐ¼ÐµÑ†ÐºÐ°Ñ (швейц.)"
+ },
+ "or": {
+ "code": "or",
+ "name": "орыÑ"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "панджабі"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "партугальÑкаÑ"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "партугальÑÐºÐ°Ñ (бразіл.)"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "польÑкаÑ"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "пушту"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "румынÑкаÑ"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "руÑкаÑ"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Ñ€Ñта-раманÑкаÑ"
+ },
+ "so": {
+ "code": "so",
+ "name": "ÑамалійÑкаÑ"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "ÑербÑкаÑ"
+ },
+ "si": {
+ "code": "si",
+ "name": "ÑінгальÑкаÑ"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "ÑлавацкаÑ"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "ÑлавенÑкаÑ"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "ÑÐ¿Ñ€Ð¾ÑˆÑ‡Ð°Ð½Ð°Ñ ÐºÑ–Ñ‚Ð°Ð¹ÑкаÑ"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Ñуахілі"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "тагальÑкаÑ"
+ },
+ "th": {
+ "code": "th",
+ "name": "тайÑкаÑ"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "тамільÑкаÑ"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "Ñ‚Ñ€Ð°Ð´Ñ‹Ñ†Ñ‹Ð¹Ð½Ð°Ñ ÐºÑ–Ñ‚Ð°Ð¹ÑкаÑ"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "турÑцкаÑ"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "тыгрыньÑ"
+ },
+ "te": {
+ "code": "te",
+ "name": "Ñ‚Ñлугу"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "узбекÑкаÑ"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "уйгурÑкаÑ"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "украінÑкаÑ"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "урду"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "фарÑÑ–"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "фарÑÑ€ÑкаÑ"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "фінÑкаÑ"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "фламандÑкаÑ"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "французÑкаÑ"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "французÑÐºÐ°Ñ (канад.)"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "французÑÐºÐ°Ñ (швейц.)"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "фрызÑкаÑ"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "харвацкаÑ"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "хіндзі"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "чÑшÑкаÑ"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "шатландÑÐºÐ°Ñ Ð³ÑльÑкаÑ"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "шведÑкаÑ"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "ÑÑперанта"
+ },
+ "et": {
+ "code": "et",
+ "name": "ÑÑтонÑкаÑ"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ÑпонÑкаÑ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/bez.json b/library/intl/resources/language/bez.json
new file mode 100644
index 000000000..c6876e490
--- /dev/null
+++ b/library/intl/resources/language/bez.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Hiajemi"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Hiakan"
+ },
+ "am": {
+ "code": "am",
+ "name": "Hiamhari"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Hibangla"
+ },
+ "be": {
+ "code": "be",
+ "name": "Hibelarusi"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Hibena"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Hibulgaria"
+ },
+ "my": {
+ "code": "my",
+ "name": "Hiburma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Hicheki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Hichina"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Hifaransa"
+ },
+ "el": {
+ "code": "el",
+ "name": "Higiriki"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Hiharabu"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hihausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hihindi"
+ },
+ "es": {
+ "code": "es",
+ "name": "Hihispania"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Hiholanzi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hihungari"
+ },
+ "id": {
+ "code": "id",
+ "name": "Hiindonesia"
+ },
+ "en": {
+ "code": "en",
+ "name": "Hiingereza"
+ },
+ "it": {
+ "code": "it",
+ "name": "Hiitaliano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Hijapani"
+ },
+ "de": {
+ "code": "de",
+ "name": "Hijerumani"
+ },
+ "km": {
+ "code": "km",
+ "name": "Hikambodia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Hikorea"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Hileno"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Hilomania"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Hilusi"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Himalesia"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Hinepali"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Hipolandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Hipunjabi"
+ },
+ "so": {
+ "code": "so",
+ "name": "Hisomali"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Hiswidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Hitailand"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Hitamil"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Hituluki"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Hiukrania"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Hiurdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Hivietinamu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Hiyoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Hizulu"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/bg.json b/library/intl/resources/language/bg.json
new file mode 100644
index 000000000..bda37f052
--- /dev/null
+++ b/library/intl/resources/language/bg.json
@@ -0,0 +1,738 @@
+{
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "авÑтралийÑки английÑки"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "авÑтрийÑки немÑки"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "агем"
+ },
+ "az": {
+ "code": "az",
+ "name": "азербайджанÑки"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "акан"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "албанÑки"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "американÑки английÑки"
+ },
+ "am": {
+ "code": "am",
+ "name": "амхарÑки"
+ },
+ "en": {
+ "code": "en",
+ "name": "английÑки"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "арабÑки"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "арменÑки"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "аÑтурÑки"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "аÑу"
+ },
+ "af": {
+ "code": "af",
+ "name": "африканÑ"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "бамбара"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "баÑа"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "баÑки"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "бафиÑ"
+ },
+ "be": {
+ "code": "be",
+ "name": "беларуÑки"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "бена"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "бенгалÑки"
+ },
+ "my": {
+ "code": "my",
+ "name": "бирманÑки"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "бодо"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "боÑненÑки"
+ },
+ "br": {
+ "code": "br",
+ "name": "бретонÑки"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "британÑки английÑки"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "българÑки"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "ваи"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "виетнамÑки"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "вунджо"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "галиÑийÑки"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ганда"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "горнолужишки"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "гренландÑки"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "грузинÑки"
+ },
+ "el": {
+ "code": "el",
+ "name": "гръцки"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "гуджарати"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "гуÑии"
+ },
+ "da": {
+ "code": "da",
+ "name": "датÑки"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "джерма"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "дзонха"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "диола"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "долнолужишки"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "еве"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "евондо"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "ембу"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "еÑперанто"
+ },
+ "et": {
+ "code": "et",
+ "name": "еÑтонÑки"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "зулуÑки"
+ },
+ "he": {
+ "code": "he",
+ "name": "иврит"
+ },
+ "id": {
+ "code": "id",
+ "name": "индонезийÑки"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "ирландÑки"
+ },
+ "is": {
+ "code": "is",
+ "name": "иÑландÑки"
+ },
+ "es": {
+ "code": "es",
+ "name": "иÑпанÑки"
+ },
+ "it": {
+ "code": "it",
+ "name": "италианÑки"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "йоруба"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "кабилÑки"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "кабовердианÑки"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "казахÑки"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "календжин"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "камба"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "канадÑки английÑки"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "канадÑки френÑки"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "каннада"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "каталонÑки"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "кашмирÑки"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "кваÑио"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "кикую"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "киргизки"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "китайÑки"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "койра чиини"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "койраборо Ñени"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "конгоанÑки Ñуахили"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "корейÑки"
+ },
+ "km": {
+ "code": "km",
+ "name": "кхмерÑки"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "ланги"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "лаоÑки"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "латвийÑки"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "лингала"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "литовÑки"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "луба катанга"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "луо"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "луÑ"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "люкÑембургÑки"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "македонÑки"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "маконде"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "макуа мето"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "малайÑки"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "малаÑлам"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "малгашки"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "малтийÑки"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "марати"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "маÑайÑки"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "мачаме"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "мекÑиканÑки иÑпанÑки"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "меру"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "молдовÑки"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "монголÑки"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "мориÑиен"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "мунданг"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "нама"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "нгомба"
+ },
+ "de": {
+ "code": "de",
+ "name": "немÑки"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "непалÑки"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "нианколе"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "нидерландÑки"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "норвежки букмол"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "норвежки нюношк"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "нуер"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "опроÑтен китайÑки"
+ },
+ "or": {
+ "code": "or",
+ "name": "ориÑ"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "пенджабÑки"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "перÑийÑки"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "полÑки"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "португалÑки"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "пущу"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "рва"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "ретороманÑки"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "ромбо"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "румънÑки"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "рунди"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "руÑки"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Ñамбуру"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Ñанго"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Ñангу"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Ñеверен ндебеле"
+ },
+ "se": {
+ "code": "se",
+ "name": "ÑеверноÑаамÑки"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Ñена"
+ },
+ "si": {
+ "code": "si",
+ "name": "ÑинхалÑки"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Ñловашки"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "ÑловенÑки"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Ñога"
+ },
+ "so": {
+ "code": "so",
+ "name": "ÑомалийÑки"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "ÑръбÑки"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Ñтандартен мароканÑки тамазигт"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Ñуахили"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "Ñъвременен Ñтандартен арабÑки"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "таита"
+ },
+ "th": {
+ "code": "th",
+ "name": "тайÑки"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "тамилÑки"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "таÑавак"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "ташелхит"
+ },
+ "te": {
+ "code": "te",
+ "name": "телугу"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "теÑо"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "тибетÑки"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "тигринÑ"
+ },
+ "to": {
+ "code": "to",
+ "name": "тонга"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "традиционен китайÑки"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "турÑки"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "уелÑки"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "узбекÑки"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "уйгурÑки"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "украинÑки"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "унгарÑки"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "урду"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "фарьорÑки"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "филипинÑки"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "финÑки"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "фламандÑки"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "френÑки"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "фризийÑки"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "фриулианÑки"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "фула"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "хауза"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "хинди"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "хърватÑки"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "централноатлаÑки тамазигт"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "чероки"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "чешки"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "чига"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "шамбала"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "шведÑки"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "швейцарÑки горногерманÑки"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "швейцарÑки немÑки"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "швейцарÑки френÑки"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "шона"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "шотландÑки галÑки"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ÑпонÑки"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/bm.json b/library/intl/resources/language/bm.json
new file mode 100644
index 000000000..6eb659c6f
--- /dev/null
+++ b/library/intl/resources/language/bm.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akankan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "de": {
+ "code": "de",
+ "name": "alimaɲikan"
+ },
+ "am": {
+ "code": "am",
+ "name": "amarikikan"
+ },
+ "en": {
+ "code": "en",
+ "name": "angilɛkan"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "awusakan"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bamanakan"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bɛngalikan"
+ },
+ "my": {
+ "code": "my",
+ "name": "birimanikan"
+ },
+ "be": {
+ "code": "be",
+ "name": "biyelorisikan"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "buligarikan"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "cɛkikan"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "es": {
+ "code": "es",
+ "name": "esipaɲolkan"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "id": {
+ "code": "id",
+ "name": "Ændonezikan"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "el": {
+ "code": "el",
+ "name": "gɛrɛsikan"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "inidikan"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "irisikan"
+ },
+ "it": {
+ "code": "it",
+ "name": "italikan"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "km": {
+ "code": "km",
+ "name": "kambojikan"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "korekan"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "larabukan"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malɛzikan"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalekan"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "olandekan"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "oŋirikan"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "perisanikan"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "pɛnijabikan"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polonekan"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "pɔritigalikan"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumanikan"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "siniwakan"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalikan"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "suwɛdikan"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamulikan"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "th": {
+ "code": "th",
+ "name": "tayikan"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "tubabukan"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turikikan"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukɛrɛnikan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urudukan"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "wiyɛtinamukan"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yorubakan"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "zapɔnekan"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulukan"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/bn-IN.json b/library/intl/resources/language/bn-IN.json
new file mode 100644
index 000000000..f62fc52f4
--- /dev/null
+++ b/library/intl/resources/language/bn-IN.json
@@ -0,0 +1,738 @@
+{
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "অসà§à¦Ÿà§à¦°à¦¿à¦¯à¦¼à¦¾à¦¨ জারমান"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "অসà§à¦Ÿà§à¦°à§‡à¦²à§€à¦¯à¦¼ ইংরেজি"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "আইরিশ"
+ },
+ "is": {
+ "code": "is",
+ "name": "আইসলà§à¦¯à¦¾à¦¨à§à¦¡à§€à¦¯à¦¼"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "আকান"
+ },
+ "az": {
+ "code": "az",
+ "name": "আজারবাইজানী"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "আদরà§à¦¶ মরকà§à¦•à§‹à¦¨ তামাজিগাত"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "আধà§à¦¨à¦¿à¦• আদরà§à¦¶ আরবী"
+ },
+ "af": {
+ "code": "af",
+ "name": "আফà§à¦°à¦¿à¦•à¦¾à¦¨à§à¦¸"
+ },
+ "am": {
+ "code": "am",
+ "name": "আমহারিক"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "আমেরিকার ইংরেজি"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "আরবী"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "আরà§à¦®à§‡à¦¨à¦¿à¦¯à¦¼"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "আলবেনীয়"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "আসà§"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "আসà§à¦¤à§à¦°à¦¿à¦¯à¦¼"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ইউকà§à¦°à§‡à¦¨à§€à¦¯à¦¼"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "ইউরোপীয় সà§à¦ªà§à¦¯à¦¾à¦¨à¦¿à¦¶"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "ইউরোপের পরà§à¦¤à§à¦—ীজ"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ইওনà§à¦¡à§‹"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ইওরà§à¦¬à¦¾"
+ },
+ "en": {
+ "code": "en",
+ "name": "ইংরেজি"
+ },
+ "it": {
+ "code": "it",
+ "name": "ইতালীয়"
+ },
+ "id": {
+ "code": "id",
+ "name": "ইনà§à¦¦à§‹à¦¨à§‡à¦¶à§€à¦¯à¦¼"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "উইঘà§à¦°"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "উচà§à¦š সোরà§à¦¬à¦¿à¦¯à¦¼à¦¾à¦¨"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "উজবেকীয়"
+ },
+ "or": {
+ "code": "or",
+ "name": "উড়িয়া"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "উতà§à¦¤à¦° à¦à¦¨à§à¦¦à§‡à¦¬à¦¿à¦²à¦¿"
+ },
+ "se": {
+ "code": "se",
+ "name": "উতà§à¦¤à¦°à¦¾à¦žà§à¦šà¦²à§€à¦¯à¦¼ সামি"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "উরà§à¦¦à§"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "à¦à¦˜à§‡à¦®"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "à¦à¦®à§à¦¬à§"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "à¦à¦¯à¦¼à§‡"
+ },
+ "et": {
+ "code": "et",
+ "name": "à¦à¦¸à§à¦¤à§‹à¦¨à§€à¦¯à¦¼"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "à¦à¦¸à§à¦ªà§‡à¦°à¦¾à¦¨à§à¦¤à§‹"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "à¦à¦¤à¦¿à¦¹à§à¦¯à¦¬à¦¾à¦¹à¦¿ চীনা"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "ওয়েলশ"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "কঙà§à¦—ো সোয়াহিলি"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "কাজাখ"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "কাতালান"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "কানাডীয় ইংরেজি"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "কানà§à¦¨à¦¾à¦¡à¦¼à§€"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "কাবাইলে"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "কাবà§à¦­à¦¾à¦°à¦¦à¦¿à¦¯à¦¼à¦¾à¦¨à§"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "কামà§à¦¬à¦¾"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "কালেনজিন"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "কাশà§à¦®à§€à¦°à§€"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "কিকà§à§à¦‡à¦¯à¦¼à§"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "কিরà§à¦—িজ"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "কোয়রা চীনি"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "কোয়রাবেনো সেনà§à¦¨à§€"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "কোয়াসিও"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "কোরিয়ান"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "কà§à¦¯à¦¾à¦¨à¦¾à¦¡à¦¿à¦¯à¦¼à¦¾à¦¨ ফরাসী"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "কà§à¦¯à¦¾à¦²à¦¾à¦²à§à¦²à¦¿à¦¸à§à¦Ÿ"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "কà§à¦°à§‹à¦¯à¦¼à§‡à¦¶à§€à¦¯à¦¼"
+ },
+ "km": {
+ "code": "km",
+ "name": "খমের"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "গানà§à¦¡à¦¾"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "গà§à¦œà¦°à¦¾à¦Ÿà¦¿"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "গà§à¦¸à§€"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "গোমà§à¦¬à¦¾"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "গà§à¦¯à¦¾à¦²à¦¿à¦¶à¦¿à¦¯à¦¼"
+ },
+ "el": {
+ "code": "el",
+ "name": "গà§à¦°à¦¿à¦•"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "চিগা"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "চীনা"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "চেক"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "চেরোকী"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "জরà§à¦œà¦¿à¦¯à¦¼à¦¾à¦¨"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "জলা-ফনী"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "জাপানি"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "জারà§à¦®à¦¾"
+ },
+ "de": {
+ "code": "de",
+ "name": "জারà§à¦®à¦¾à¦¨"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "জà§à¦²à§"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "জোঙà§à¦—া"
+ },
+ "to": {
+ "code": "to",
+ "name": "টোঙà§à¦—ান"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ডাচ"
+ },
+ "da": {
+ "code": "da",
+ "name": "ডেনিশ"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "তাইতা"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "তাচেলহিত"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "তামিল"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "তাসাওয়াক"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "তিগরিনিয়া"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "তিবà§à¦¬à¦¤à¦¿"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "তà§à¦°à§à¦•à§€"
+ },
+ "te": {
+ "code": "te",
+ "name": "তেলেগà§"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "তেসো"
+ },
+ "th": {
+ "code": "th",
+ "name": "থাই"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "নরওয়েজিয়ান বোকমাল"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "নরওয়েজীয়ান নিনরà§à¦¸à§à¦•"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "নামা"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "নিমà§à¦¨à¦¤à¦° সোরà§à¦¬à¦¿à¦¯à¦¼à¦¾à¦¨"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "নà§à¦¯à¦¼à¦¾à¦°"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "নেপালী"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "নà§à¦¯à¦¾à¦¯à¦¼à¦¾à¦™à§à¦•à§‹à¦²à§‡"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "পরà§à¦¤à§à¦—ীজ"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "পশà§à¦šà¦¿à¦® ফà§à¦°à¦¿à¦¸à¦¿à¦¯à¦¼"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "পাঞà§à¦œà¦¾à¦¬à§€"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "পাশà§à¦¤à§"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "পোলিশ"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "ফরাসি"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "ফারà§à¦¸à¦¿"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "ফিনিশ"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "ফিলিপিনো"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "ফà§à¦²à¦¾à¦¹à§"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "ফেরাউনি"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "ফà§à¦°à¦¿à¦‰à¦²à¦¿à¦¯à¦¼à¦¾à¦¨"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "ফà§à¦²à§‡à¦®à¦¿à¦¶"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "বড়ো"
+ },
+ "my": {
+ "code": "my",
+ "name": "বরà§à¦®à¦¿"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "বসনীয়ান"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "বাংলা"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "বাফিয়া"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "বামবারা"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "বাসা"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "বাসà§à¦•"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "বà§à¦²à¦—েরিয়"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "বেনা"
+ },
+ "be": {
+ "code": "be",
+ "name": "বেলারà§à¦¶à¦¿à¦¯à¦¼"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "বà§à¦°à¦¾à¦œà¦¿à¦²à§‡à¦° পরà§à¦¤à§à¦—ীজ"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "বà§à¦°à¦¿à¦Ÿà¦¿à¦¶ ইংরেজি"
+ },
+ "br": {
+ "code": "br",
+ "name": "বà§à¦°à§‡à¦Ÿà¦¨"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "ভাই"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ভিয়েতনামী"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "ভà§à¦žà§à¦œà§‹"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "মঙà§à¦—োলিয়"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "মরিসিয়ান"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "মলদাভিয়"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "মলà§à¦Ÿà¦¿à¦¯à¦¼"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "মাকামে"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "মাকোনà§à¦¦à§‡"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "মাখà§à¦¯à¦¼à¦¾-মেতà§à¦¤à§‹"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "মারাঠি"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "মালয়"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "মালাগাসি"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "মালায়ালাম"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "মাসাই"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "মà§à¦¦à¦¾à¦™à§à¦—"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "মেরà§"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "মà§à¦¯à¦¾à¦•à§à¦¸à¦¿à¦•à¦¾à¦¨ সà§à¦ªà§à¦¯à¦¾à¦¨à¦¿à¦¶"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "মà§à¦¯à¦¾à¦¸à¦¿à¦¡à§‹à¦¨à§€à¦¯à¦¼"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "রমà§à¦¬à§‹"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "রাওয়া"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "রà§à¦¨à§à¦¦à¦¿"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "রà§à¦¶"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "রোমানীয়"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "রোমানà§à¦¸"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "লাও"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "লাঙà§à¦—ি"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "লাতà§â€Œà¦­à§€à¦¯à¦¼"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "লিঙà§à¦—ালা"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "লিথà§à¦¯à¦¼à§‡à¦¨à§€à¦¯à¦¼"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "লà§à¦‡à¦¯à¦¼à¦¾"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "লà§à¦•à§à¦¸à§‡à¦®à¦¬à¦¾à¦°à§à¦—ীয়"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "লà§à¦¬à¦¾-কাটাঙà§à¦—া"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "লà§à¦¯à¦¼à§‹"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "শামà§à¦¬à¦¾à¦²à¦¾"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "শোনা"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "সরলীকৃত চীনা"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "সাঙà§à¦—à§"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "সাঙà§à¦—ো"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "সামবà§à¦°à§"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "সারà§à¦¬à§€à¦¯à¦¼"
+ },
+ "si": {
+ "code": "si",
+ "name": "সিংহলী"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "সà§à¦‡à¦¡à¦¿à¦¶"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "সà§à¦‡à¦¸ উচà§à¦š জারà§à¦®à¦¾à¦¨à¦¿"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "সà§à¦‡à¦¸ জারà§à¦®à¦¾à¦¨"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "সà§à¦‡à¦¸ ফরাসি"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "সেনা"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "সেনà§à¦Ÿà§à¦°à¦¾à¦² আটলাস তামাজিগাত"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "সোগা"
+ },
+ "so": {
+ "code": "so",
+ "name": "সোমালী"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "সোয়াহিলি"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "সà§à¦•à¦Ÿà¦¸-গà§à¦¯à§‡à¦²à¦¿à¦•"
+ },
+ "es": {
+ "code": "es",
+ "name": "সà§à¦ªà§à¦¯à¦¾à¦¨à¦¿à¦¶"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "সà§à¦²à§‹à¦­à¦¾à¦•"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "সà§à¦²à§‹à¦­à§‡à¦¨à§€à¦¯à¦¼"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "হাউসা"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "হাঙà§à¦—েরীয়"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "হিনà§à¦¦à¦¿"
+ },
+ "he": {
+ "code": "he",
+ "name": "হিবà§à¦°à§"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/bn.json b/library/intl/resources/language/bn.json
new file mode 100644
index 000000000..d37c446c3
--- /dev/null
+++ b/library/intl/resources/language/bn.json
@@ -0,0 +1,738 @@
+{
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "অসà§à¦Ÿà§à¦°à¦¿à¦¯à¦¼à¦¾à¦¨ জারà§à¦®à¦¾à¦¨à¦¿"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "অসà§à¦Ÿà§à¦°à§‡à¦²à§€à¦¯à¦¼ ইংরেজি"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "আইরিশ"
+ },
+ "is": {
+ "code": "is",
+ "name": "আইসলà§à¦¯à¦¾à¦¨à§à¦¡à§€à¦¯à¦¼"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "আকান"
+ },
+ "az": {
+ "code": "az",
+ "name": "আজারবাইজানী"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "আদরà§à¦¶ মরকà§à¦•à§‹à¦¨ তামাজিগাত"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "আধà§à¦¨à¦¿à¦• আদরà§à¦¶ আরবী"
+ },
+ "af": {
+ "code": "af",
+ "name": "আফà§à¦°à¦¿à¦•à¦¾à¦¨à§à¦¸"
+ },
+ "am": {
+ "code": "am",
+ "name": "আমহারিক"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "আমেরিকার ইংরেজি"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "আরবী"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "আরà§à¦®à§‡à¦¨à¦¿à¦¯à¦¼"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "আলবেনীয়"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "আসà§"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "আসà§à¦¤à§à¦°à¦¿à¦¯à¦¼"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ইউকà§à¦°à§‡à¦¨à§€à¦¯à¦¼"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "ইউরোপীয় সà§à¦ªà§à¦¯à¦¾à¦¨à¦¿à¦¶"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "ইউরোপের পরà§à¦¤à§à¦—ীজ"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ইওনà§à¦¡à§‹"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ইওরà§à¦¬à¦¾"
+ },
+ "en": {
+ "code": "en",
+ "name": "ইংরেজি"
+ },
+ "it": {
+ "code": "it",
+ "name": "ইতালীয়"
+ },
+ "id": {
+ "code": "id",
+ "name": "ইনà§à¦¦à§‹à¦¨à§‡à¦¶à§€à¦¯à¦¼"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "উইঘà§à¦°"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "উচà§à¦š সোরà§à¦¬à¦¿à¦¯à¦¼à¦¾à¦¨"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "উজবেকীয়"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "উতà§à¦¤à¦° à¦à¦¨à§à¦¦à§‡à¦¬à¦¿à¦²à¦¿"
+ },
+ "se": {
+ "code": "se",
+ "name": "উতà§à¦¤à¦°à¦¾à¦žà§à¦šà¦²à§€à¦¯à¦¼ সামি"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "উরà§à¦¦à§"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "à¦à¦˜à§‡à¦®"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "à¦à¦®à§à¦¬à§"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "à¦à¦¯à¦¼à§‡"
+ },
+ "et": {
+ "code": "et",
+ "name": "à¦à¦¸à§à¦¤à§‹à¦¨à§€à¦¯à¦¼"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "à¦à¦¸à§à¦ªà§‡à¦°à¦¾à¦¨à§à¦¤à§‹"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "à¦à¦¤à¦¿à¦¹à§à¦¯à¦¬à¦¾à¦¹à¦¿ চীনা"
+ },
+ "or": {
+ "code": "or",
+ "name": "ওড়িয়া"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "ওয়েলশ"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "কঙà§à¦—ো সোয়াহিলি"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "কাজাখ"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "কাতালান"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "কানাডীয় ইংরেজি"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "কানাডীয় ফরাসি"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "কানà§à¦¨à¦¾à¦¡à¦¼à§€"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "কাবাইলে"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "কাবà§à¦­à¦¾à¦°à¦¦à¦¿à¦¯à¦¼à¦¾à¦¨à§"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "কামà§à¦¬à¦¾"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "কালেনজিন"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "কাশà§à¦®à§€à¦°à§€"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "কিকà§à§à¦‡à¦¯à¦¼à§"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "কিরà§à¦—িজ"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "কোয়রা চীনি"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "কোয়রাবেনো সেনà§à¦¨à§€"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "কোয়াসিও"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "কোরিয়ান"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "কà§à¦¯à¦¾à¦²à¦¾à¦²à§à¦²à¦¿à¦¸à§à¦Ÿ"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "কà§à¦°à§‹à¦¯à¦¼à§‡à¦¶à§€à¦¯à¦¼"
+ },
+ "km": {
+ "code": "km",
+ "name": "খমের"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "গানà§à¦¡à¦¾"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "গà§à¦œà¦°à¦¾à¦Ÿà¦¿"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "গà§à¦¸à§€"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "গোমà§à¦¬à¦¾"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "গà§à¦¯à¦¾à¦²à¦¿à¦¶à¦¿à¦¯à¦¼"
+ },
+ "el": {
+ "code": "el",
+ "name": "গà§à¦°à¦¿à¦•"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "চিগা"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "চীনা"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "চেক"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "চেরোকী"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "জরà§à¦œà¦¿à¦¯à¦¼à¦¾à¦¨"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "জলা-ফনী"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "জাপানি"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "জারà§à¦®à¦¾"
+ },
+ "de": {
+ "code": "de",
+ "name": "জারà§à¦®à¦¾à¦¨"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "জà§à¦²à§"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "জোঙà§à¦—া"
+ },
+ "to": {
+ "code": "to",
+ "name": "টোঙà§à¦—ান"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ডাচ"
+ },
+ "da": {
+ "code": "da",
+ "name": "ডেনিশ"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "তাইতা"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "তাচেলহিত"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "তামিল"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "তাসাওয়াক"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "তিগরিনিয়া"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "তিবà§à¦¬à¦¤à¦¿"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "তà§à¦°à§à¦•à§€"
+ },
+ "te": {
+ "code": "te",
+ "name": "তেলেগà§"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "তেসো"
+ },
+ "th": {
+ "code": "th",
+ "name": "থাই"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "নরওয়েজিয়ান বোকমাল"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "নরওয়েজীয়ান নিনরà§à¦¸à§à¦•"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "নামা"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "নিমà§à¦¨à¦¤à¦° সোরà§à¦¬à¦¿à¦¯à¦¼à¦¾à¦¨"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "নà§à¦¯à¦¼à¦¾à¦°"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "নেপালী"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "নà§à¦¯à¦¾à¦¯à¦¼à¦¾à¦™à§à¦•à§‹à¦²à§‡"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "পরà§à¦¤à§à¦—ীজ"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "পশà§à¦šà¦¿à¦® ফà§à¦°à¦¿à¦¸à¦¿à¦¯à¦¼"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "পাঞà§à¦œà¦¾à¦¬à§€"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "পাশà§à¦¤à§"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "পোলিশ"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "ফরাসি"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "ফারà§à¦¸à¦¿"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "ফিনিশ"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "ফিলিপিনো"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "ফà§à¦²à¦¾à¦¹à§"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "ফেরাউনি"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "ফà§à¦°à¦¿à¦‰à¦²à¦¿à¦¯à¦¼à¦¾à¦¨"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "ফà§à¦²à§‡à¦®à¦¿à¦¶"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "বড়ো"
+ },
+ "my": {
+ "code": "my",
+ "name": "বরà§à¦®à¦¿"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "বসনীয়ান"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "বাংলা"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "বাফিয়া"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "বামবারা"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "বাসা"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "বাসà§à¦•"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "বà§à¦²à¦—েরিয়"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "বেনা"
+ },
+ "be": {
+ "code": "be",
+ "name": "বেলারà§à¦¶à¦¿à¦¯à¦¼"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "বà§à¦°à¦¾à¦œà¦¿à¦²à§‡à¦° পরà§à¦¤à§à¦—ীজ"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "বà§à¦°à¦¿à¦Ÿà¦¿à¦¶ ইংরেজি"
+ },
+ "br": {
+ "code": "br",
+ "name": "বà§à¦°à§‡à¦Ÿà¦¨"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "ভাই"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ভিয়েতনামী"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "ভà§à¦žà§à¦œà§‹"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "মঙà§à¦—োলিয়"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "মরিসিয়ান"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "মলদাভিয়"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "মলà§à¦Ÿà¦¿à¦¯à¦¼"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "মাকামে"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "মাকোনà§à¦¦à§‡"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "মাখà§à¦¯à¦¼à¦¾-মেতà§à¦¤à§‹"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "মারাঠি"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "মালয়"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "মালাগাসি"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "মালায়ালাম"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "মাসাই"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "মà§à¦¦à¦¾à¦™à§à¦—"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "মেরà§"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "মà§à¦¯à¦¾à¦•à§à¦¸à¦¿à¦•à¦¾à¦¨ সà§à¦ªà§à¦¯à¦¾à¦¨à¦¿à¦¶"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "মà§à¦¯à¦¾à¦¸à¦¿à¦¡à§‹à¦¨à§€à¦¯à¦¼"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "রমà§à¦¬à§‹"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "রাওয়া"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "রà§à¦¨à§à¦¦à¦¿"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "রà§à¦¶"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "রোমানীয়"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "রোমানà§à¦¸"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "লাও"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "লাঙà§à¦—ি"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "লাতà§â€Œà¦­à§€à¦¯à¦¼"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "লিঙà§à¦—ালা"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "লিথà§à¦¯à¦¼à§‡à¦¨à§€à¦¯à¦¼"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "লà§à¦‡à¦¯à¦¼à¦¾"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "লà§à¦•à§à¦¸à§‡à¦®à¦¬à¦¾à¦°à§à¦—ীয়"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "লà§à¦¬à¦¾-কাটাঙà§à¦—া"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "লà§à¦¯à¦¼à§‹"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "শামà§à¦¬à¦¾à¦²à¦¾"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "শোনা"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "সরলীকৃত চীনা"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "সাঙà§à¦—à§"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "সাঙà§à¦—ো"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "সামবà§à¦°à§"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "সারà§à¦¬à§€à¦¯à¦¼"
+ },
+ "si": {
+ "code": "si",
+ "name": "সিংহলী"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "সà§à¦‡à¦¡à¦¿à¦¶"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "সà§à¦‡à¦¸ উচà§à¦š জারà§à¦®à¦¾à¦¨à¦¿"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "সà§à¦‡à¦¸ জারà§à¦®à¦¾à¦¨"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "সà§à¦‡à¦¸ ফরাসি"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "সেনা"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "সেনà§à¦Ÿà§à¦°à¦¾à¦² আটলাস তামাজিগাত"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "সোগা"
+ },
+ "so": {
+ "code": "so",
+ "name": "সোমালী"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "সোয়াহিলি"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "সà§à¦•à¦Ÿà¦¸-গà§à¦¯à§‡à¦²à¦¿à¦•"
+ },
+ "es": {
+ "code": "es",
+ "name": "সà§à¦ªà§à¦¯à¦¾à¦¨à¦¿à¦¶"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "সà§à¦²à§‹à¦­à¦¾à¦•"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "সà§à¦²à§‹à¦­à§‡à¦¨à§€à¦¯à¦¼"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "হাউসা"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "হাঙà§à¦—েরীয়"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "হিনà§à¦¦à¦¿"
+ },
+ "he": {
+ "code": "he",
+ "name": "হিবà§à¦°à§"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/bo.json b/library/intl/resources/language/bo.json
new file mode 100644
index 000000000..fe95eca3e
--- /dev/null
+++ b/library/intl/resources/language/bo.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amharic"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arabic"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "be": {
+ "code": "be",
+ "name": "Belarusian"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgarian"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Czech"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "el": {
+ "code": "el",
+ "name": "Greek"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hungarian"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "km": {
+ "code": "km",
+ "name": "Khmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Persian"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Punjabi"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Romanian"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somali"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "ཀནྣ་ཌ་སà¾à½‘à¼"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "à½à½¼à¼‹à½¢à½ºà¼‹à½¡à½ à½²à¼‹à½¦à¾à½‘à¼"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "གུཇ་རཱà½à½²à¼‹à½¦à¾à½‘à¼"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "à½à½±à¼‹à½˜à½²à½£à¼‹à½¦à¾à½‘à¼"
+ },
+ "te": {
+ "code": "te",
+ "name": "à½à½ºà¼‹à½£à½´à¼‹à½‚ུ་སà¾à½‘à¼"
+ },
+ "da": {
+ "code": "da",
+ "name": "à½à½ºà½“་མག་གི་སà¾à½‘à¼"
+ },
+ "th": {
+ "code": "th",
+ "name": "à½à½ à½ à½²à¼‹à½¡à½´à½£à¼‹à½¦à¾à½‘à¼"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "à½à½´à½¢à¼‹à½à½ºà½ à½²à¼‹à½¦à¾à½‘à¼"
+ },
+ "it": {
+ "code": "it",
+ "name": "དབྱི་à½à¼‹à¼‹à½£à½ à½²à¼‹à½˜à½²à¼"
+ },
+ "en": {
+ "code": "en",
+ "name": "དབིན་ཇིའི་སà¾à½‘à¼"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "དབིན་ཇིའི་སà¾à½‘༠(à½à½ºà¼‹à½“་ཌ་)"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "དབིན་ཇིའི་སà¾à½‘༠(དབིན་ཇིའི་རྒྱལ་à½à½–་)"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "དབིན་ཇིའི་སà¾à½‘༠(ཨ་རི་)"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "ནེ་པ་ལི"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "ནོ་à½à½ºà¼‹à½¦à¾à½‘à¼"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "པ་ཞའི་མི༠ཕི་à½à½¼à¼‹à½¡à½ à½²à¼‹à½˜à½²à¼"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "པོ་ལན་སà¾à½‘à¼"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "ཕི་à½à½¼à¼‹à½¡à½ à½²à¼"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "བྷང་ག་ལའི་སà¾à½‘à¼"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "བོད་སà¾à½‘་"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "མ་ར་à½à½²à¼‹à½¦à¾à½‘à¼"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "མ་ལ་ཡ་སà¾à½‘à¼"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "à½à½´à½ à½´à¼‹à½à½´à½ à½´à¼‹à½¦à¾à½‘à¼"
+ },
+ "es": {
+ "code": "es",
+ "name": "ཞི་པན་ཡའིà¼"
+ },
+ "si": {
+ "code": "si",
+ "name": "ཞི་ལན་སà¾à½‘à¼"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "ཟུ་ལུ་སà¾à½‘à¼"
+ },
+ "de": {
+ "code": "de",
+ "name": "འཇར་མན་གྱིà¼"
+ },
+ "my": {
+ "code": "my",
+ "name": "འབར་མའི་སà¾à½‘à¼"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ཡུ་ཀྲ་ནི་སà¾à½‘à¼"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ཡུ་གུར་སà¾à½‘à¼"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ཡོ་ནན་སà¾à½‘à¼"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "རྒྱ་སà¾à½‘་"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "རྫོང་à½"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "རི་པིན་སà¾à½‘་"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "སྟབས་བརྡའི༠ཀྲུང་གོའིà¼"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "སྲོལ་རྒྱུན་གྱིà¼"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "སོག་སà¾à½‘à¼"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "ཧྥ་རན་སིའི་à¼"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ཧའོ་ལན་སà¾à½‘à¼"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "ཧྲུའི་à½à½“་སà¾à½‘à¼"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "ཧིན་དི"
+ },
+ "id": {
+ "code": "id",
+ "name": "ཨིན་དོ་ནི་སི་སà¾à½‘à¼"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ཨུ་རུ་སུ་སà¾à½‘་"
+ },
+ "or": {
+ "code": "or",
+ "name": "ཨཽ་རི་ཡ་སà¾à½‘à¼"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/br.json b/library/intl/resources/language/br.json
new file mode 100644
index 000000000..56cb8c8b9
--- /dev/null
+++ b/library/intl/resources/language/br.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "de": {
+ "code": "de",
+ "name": "alamaneg"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alamaneg Aostria"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alamaneg Suis"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alamaneg uhel Suis"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albaneg"
+ },
+ "am": {
+ "code": "am",
+ "name": "amhareg"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabeg"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "arabeg modern"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenianeg"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azeri"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basaa"
+ },
+ "be": {
+ "code": "be",
+ "name": "belaruseg"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmaneg"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosneg"
+ },
+ "br": {
+ "code": "br",
+ "name": "brezhoneg"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgareg"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "da": {
+ "code": "da",
+ "name": "daneg"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanteg"
+ },
+ "et": {
+ "code": "et",
+ "name": "estoneg"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "euskareg"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "faeroeg"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipineg"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finneg"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flandrezeg"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "frioulaneg"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frizeg ar Cʼhornôg"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galizeg"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "galleg"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "galleg Kanada"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "galleg Suis"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "el": {
+ "code": "el",
+ "name": "gresianeg"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "haousa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebraeg"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "hungareg"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonezeg"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandeg"
+ },
+ "it": {
+ "code": "it",
+ "name": "italianeg"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "iwerzhoneg"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "izelsorabeg"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japaneg"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "jorjianeg"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabileg"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "kabuverdianu"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kanareg"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kashmiri"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalaneg"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazak"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "kembraeg"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgiz"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "koreaneg"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "kroateg"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laoseg"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "latvieg"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituaneg"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luksembourgeg"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedoneg"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayseg"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgacheg"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "malteg"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldoveg"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongoleg"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "moriseg"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele an Norzh"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "nederlandeg"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepaleg"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norvegeg bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norvegeg nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ouigoureg"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ourdou"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "ouzbekeg"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pachto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "perseg"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "poloneg"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugaleg"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugaleg Brazil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugaleg Europa"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabi"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romañcheg"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "roumaneg"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "rusianeg"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sámi an Norzh"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "en": {
+ "code": "en",
+ "name": "saozneg"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "saozneg Amerika"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "saozneg Aostralia"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "saozneg Breizh-Veur"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "saozneg Kanada"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbeg"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "sinaeg"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "sinaeg eeunaet"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "sinaeg hengounel"
+ },
+ "si": {
+ "code": "si",
+ "name": "singhaleg"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "skoseg"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovakeg"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "sloveneg"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somali"
+ },
+ "es": {
+ "code": "es",
+ "name": "spagnoleg"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "spagnoleg Europa"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "spagnoleg Mecʼhiko"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "svedeg"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamacheg Maroko standart"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamileg"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "tchekeg"
+ },
+ "te": {
+ "code": "te",
+ "name": "telougou"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "thai"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetaneg"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrigna"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonga"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turkeg"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "uhelsorabeg"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukraineg"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnameg"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yorouba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zouloueg"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/brx.json b/library/intl/resources/language/brx.json
new file mode 100644
index 000000000..34d707a33
--- /dev/null
+++ b/library/intl/resources/language/brx.json
@@ -0,0 +1,738 @@
+{
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "अकन"
+ },
+ "en": {
+ "code": "en",
+ "name": "अंगà¥à¤°à¥‡à¤œà¤¼à¥€"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "अंगà¥à¤°à¥‡à¤œà¤¼à¥€ (अमरिकी)"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "अंगà¥à¤°à¥‡à¤œà¤¼à¥€ (ऑसà¥à¤Ÿà¥à¤°à¥‡à¤²à¤¿à¤¯à¤¾ का)"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "अंगà¥à¤°à¥‡à¤œà¤¼à¥€ (कनाडाई)"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "अंगà¥à¤°à¥‡à¤œà¥€ (बà¥à¤°à¤¿à¤Ÿà¤¿à¤¶)"
+ },
+ "az": {
+ "code": "az",
+ "name": "अज़रबैजानी"
+ },
+ "af": {
+ "code": "af",
+ "name": "अफà¥à¤°à¥€à¤•à¥€"
+ },
+ "am": {
+ "code": "am",
+ "name": "अमà¥à¤¹à¤¾à¤°à¤¿à¤•à¥"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "अरबी"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "अरमेनियनà¥"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "आईरिश"
+ },
+ "is": {
+ "code": "is",
+ "name": "आईसà¥à¤²à¥ˆà¤‚डिकà¥"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "आलà¥à¤¬à¥‡à¤¨à¤¿à¤¯à¤¨à¥"
+ },
+ "id": {
+ "code": "id",
+ "name": "इनà¥à¤¡à¥‹à¤¨à¥‡à¤¶à¤¿à¤¯à¤¨à¥"
+ },
+ "it": {
+ "code": "it",
+ "name": "ईटालियनà¥"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "ईवेरियाई सà¥à¤ªà¥ˆà¤¨à¤¿à¤¶"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "उईग़à¥à¤°"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "उचà¥à¤š सà¥à¤¤à¤°à¤¿à¤¯ सà¥à¤µà¥€à¤¸ जरà¥à¤®à¤¨"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "उज़बेकà¥"
+ },
+ "or": {
+ "code": "or",
+ "name": "उड़िया"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "उतà¥à¤¤à¤° नà¥à¤¦à¤¬à¥‡à¤²à¥‡"
+ },
+ "se": {
+ "code": "se",
+ "name": "उतà¥à¤¤à¤°à¥€ सामी"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "ऊपरी सौरà¥à¤¬à¤¿à¤¯à¤¨"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ऊरà¥à¤¦à¥"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "à¤à¤µà¥‡"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "à¤à¤µà¥Œà¤‚डो"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "à¤à¤¸à¥à¤ªà¥‡à¤°à¤¾à¤¨à¥à¤¤à¥‹"
+ },
+ "et": {
+ "code": "et",
+ "name": "à¤à¤¸à¥à¤Ÿà¥‹à¤¨à¤¿à¤¯à¤¨à¥"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "क़ज़ाख़à¥"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "कनà¥à¤¨à¤¡à¥"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "कंबा"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "कलालीसà¥à¤¤"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "कशà¥à¤®à¤¿à¤°à¥€"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "कातालानà¥"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "काबीलà¥"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "किकà¥à¤¯à¥"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "किरग़ीज़à¥"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "किरूनà¥à¤¦à¥€"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "कोरीयनà¥"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "कà¥à¤°à¥‹à¤à¤¶à¤¨à¥"
+ },
+ "km": {
+ "code": "km",
+ "name": "खà¥à¤®à¥‡à¤°"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "गांडा"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "गà¥à¤œà¤°à¤¾à¤¤à¥€"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "गैलिशियनà¥"
+ },
+ "el": {
+ "code": "el",
+ "name": "गà¥à¤°à¥€à¤•"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "चीनी"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "चीनी (पारमà¥à¤ªà¤°à¤¿à¤•)"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "चीनी (सरलीकृत)"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "चीरोकी"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "चेकà¥"
+ },
+ "de": {
+ "code": "de",
+ "name": "ज़रà¥à¤®à¤¨"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "जरà¥à¤®à¤¨ (ऑसà¥à¤Ÿà¥à¤°à¤¿à¤¯à¤¾)"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "जापानी"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "ज़à¥à¤²à¥‚"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "जॉरà¥à¤œà¤¿à¤¯à¤¨à¥"
+ },
+ "to": {
+ "code": "to",
+ "name": "टॉंगा"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "डचà¥"
+ },
+ "da": {
+ "code": "da",
+ "name": "डैनीशà¥"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "तमिळ"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "तिगà¥à¤°à¥€à¤¨à¥à¤¯à¤¾"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "तिबà¥à¤¬à¤¤à¥€"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "तà¥à¤°à¥à¤•à¥€"
+ },
+ "te": {
+ "code": "te",
+ "name": "तेलà¥à¤—à¥"
+ },
+ "th": {
+ "code": "th",
+ "name": "थाई"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "नेपाली"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "नॉरà¥à¤µà¥‡à¤œà¤¿à¤¯à¤¨à¥ नीनॉरà¥à¤¸à¥à¤•à¥"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "नोरà¥à¤µà¥‡à¤—ी बोकमाल"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "नà¥à¤¯à¤¾à¤¨à¤•à¥‹à¤²à¥‡"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "पख़à¥à¤¤à¥"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "पंजाबी"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "पशà¥à¤šà¥€à¤®à¥€ फà¥à¤°à¥€à¤œà¤¼à¤¿à¤¯à¤¨à¥"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "पà¥à¤°à¥à¤¤à¤—ाली"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "पोलिश"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "फारà¥à¤¸à¥€"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "फिनिशà¥"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "फिरोज़ी"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "फिलिपिनो"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "फà¥à¤²à¤¾à¤¹à¥"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "फà¥à¤°à¤¾à¤‚सीसी"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "फà¥à¤°à¤¾à¤‚सीसी (कनाडाई)"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "फà¥à¤°à¤¾à¤‚सीसी (सà¥à¤µà¥€à¤¸)"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "फà¥à¤°à¥€à¤‰à¤²à¥€à¤…नà¥"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "फà¥à¤²à¥‡à¤®à¥€"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "बंगला"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "बड़ो"
+ },
+ "my": {
+ "code": "my",
+ "name": "बरà¥à¤®à¥€"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "बलà¥à¤—ैरियनà¥"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "बांबारा"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "बासà¥à¤•à¥"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "बासà¥à¤•à¤¼à¥"
+ },
+ "be": {
+ "code": "be",
+ "name": "बैलोरूसियनà¥"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "बोसà¥à¤¨à¤¿à¤¯à¤¾à¤ˆ"
+ },
+ "br": {
+ "code": "br",
+ "name": "बà¥à¤°à¤Ÿà¥‹à¤‚"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "भà¥à¤Ÿà¤¾à¤¨à¥€"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "मराठी"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "मलयालम"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "मलाय"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "मसाई"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "मालटीज़à¥"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "मालागासी"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "मैसेडोनियनà¥"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "मोंगोलियन"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "मोलà¥à¤¡à¥‡à¤µà¤¿à¤¯à¤¨à¥"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "यूकà¥à¤°à¥‡à¤¨à¤¿à¤¯à¤¨à¥"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "योरूबा"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "रà¥à¤¸à¥€"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "रूमानीयनà¥"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "रेहà¥à¤Ÿà¥‹-रोमानà¥à¤¸"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "लाओसीयनà¥"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "लाटवियनॠ(लैटà¥à¤Ÿà¥€à¤¶)"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "लिंगाला"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "लिथà¥à¤†à¤¨à¤¿à¤¯à¤¨à¥"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "लà¥à¤“"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "लà¥à¤•à¥à¤¸à¤®à¤¬à¥à¤°à¥à¤—ी"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "लà¥à¤¬à¤¾ कटांगा"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "वाई"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "वियेतनामी"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "वैलà¥à¤¶à¥"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "शोना"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "सरà¥à¤¬à¤¿à¤¯à¤¨à¥"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "सांगà¥à¤°à¥‹"
+ },
+ "si": {
+ "code": "si",
+ "name": "सींहाला"
+ },
+ "so": {
+ "code": "so",
+ "name": "सोमाली"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "सोरà¥à¤¬à¤¿à¤¯à¤¨à¥"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "सà¥à¤•à¥‰à¤Ÿà¥à¤¸à¥ गैलिकà¥"
+ },
+ "es": {
+ "code": "es",
+ "name": "सà¥à¤ªà¥ˆà¤¨à¤¿à¤¶"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "सà¥à¤²à¥‹à¤µà¤¾à¤•à¥"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "सà¥à¤²à¥‹à¤µà¥‡à¤¨à¤¿à¤¯à¤¨à¥"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "सà¥à¤µà¤¾à¤¹à¤¿à¤²à¥€"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "सà¥à¤µà¥€à¤¡à¤¿à¤¶"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "सà¥à¤µà¥€à¤¸ जरà¥à¤®à¤¨"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "हउसा"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "हंगैरीयनà¥"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "हिंदी"
+ },
+ "he": {
+ "code": "he",
+ "name": "हिबà¥à¤°à¥"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/bs-Cyrl.json b/library/intl/resources/language/bs-Cyrl.json
new file mode 100644
index 000000000..2d82ca21a
--- /dev/null
+++ b/library/intl/resources/language/bs-Cyrl.json
@@ -0,0 +1,738 @@
+{
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "az": {
+ "code": "az",
+ "name": "азербејџанÑки"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "акан"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "албанÑки"
+ },
+ "am": {
+ "code": "am",
+ "name": "амхарÑки"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "арапÑки"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "аÑтуријÑки"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "ÐуÑтралијÑки енглеÑки"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "ÐуÑтријÑки немачки"
+ },
+ "af": {
+ "code": "af",
+ "name": "африканерÑки"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "бамбара"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "баÑа"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "баÑкијÑки"
+ },
+ "be": {
+ "code": "be",
+ "name": "белоруÑки"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "бенглаÑки"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "боÑанÑки"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "БразилÑки португалÑки"
+ },
+ "br": {
+ "code": "br",
+ "name": "бретонÑки"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "БританÑки енглеÑки"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "бугарÑки"
+ },
+ "my": {
+ "code": "my",
+ "name": "бурманÑки"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "ваи"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "велшки"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "вијетнамÑки"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "галÑки"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ганда"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "горњи ÑорбијÑки"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "грузијÑки"
+ },
+ "el": {
+ "code": "el",
+ "name": "грчки"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "гуџарати"
+ },
+ "da": {
+ "code": "da",
+ "name": "данÑки"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "еве"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "евондо"
+ },
+ "en": {
+ "code": "en",
+ "name": "енглеÑки"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "еÑперанто"
+ },
+ "et": {
+ "code": "et",
+ "name": "еÑтонÑки"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "зулу"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "ИберијÑки португалÑки"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "ИберијÑки шпанÑки"
+ },
+ "id": {
+ "code": "id",
+ "name": "индонежанÑки"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "ирÑки"
+ },
+ "is": {
+ "code": "is",
+ "name": "иÑландÑки"
+ },
+ "it": {
+ "code": "it",
+ "name": "италијанÑки"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "јапанÑки"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "јерменÑки"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "јоруба"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "кабиле"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "калалиÑут"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "камба"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "канада"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "КанадÑки енглеÑки"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "КанадÑки француÑки"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "каталонÑки"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "кашмирÑки"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "кикују"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "кинеÑки"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "кинеÑки (поједноÑтављен)"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "кинеÑки (традиционални)"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "киргиÑки"
+ },
+ "km": {
+ "code": "km",
+ "name": "кмерÑки"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "козачки"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "корејÑки"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "лаоÑки"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "летонÑки"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "лингала"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "литванÑки"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "луба-катанга"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "лукÑембуршки"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "луо"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "мађарÑки"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "македонÑки"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "малагаÑијÑки"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "малајалам"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "малајÑки"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "марати"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "маÑаи"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "мелтешки"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "молдавÑки"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "монголÑки"
+ },
+ "de": {
+ "code": "de",
+ "name": "немачки"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "непалÑки"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "ниÑки ÑорбијанÑки"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "норвешки бокмал"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "норвешки њорÑк"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "њанколе"
+ },
+ "or": {
+ "code": "or",
+ "name": "оријÑки"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "панџабÑки"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "паштунÑки"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "перÑијÑки"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "пољÑки"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "португалÑки"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "рето-романÑки"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "румунÑки"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "рунди"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "руÑки"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "СÐД енглеÑки"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Ñанго"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Ñвахили"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Ñеверни ндебеле"
+ },
+ "se": {
+ "code": "se",
+ "name": "Ñеверни Ñами"
+ },
+ "si": {
+ "code": "si",
+ "name": "ÑингалеÑки"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Ñловачки"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Ñловеначки"
+ },
+ "so": {
+ "code": "so",
+ "name": "ÑомалÑки"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "ÑрпÑки"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "тагалог"
+ },
+ "th": {
+ "code": "th",
+ "name": "тајландÑки"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "тамилÑки"
+ },
+ "te": {
+ "code": "te",
+ "name": "телугу"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "тибетанÑки"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "тигриња"
+ },
+ "to": {
+ "code": "to",
+ "name": "тонга"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "турÑки"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "узбечки"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ујгурÑки"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "украјинÑки"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "урду"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "фарÑки"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "финÑки"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "фламанÑки"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "француÑки"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "фризијÑки"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "фриулијÑки"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "фулах"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "хауÑа"
+ },
+ "he": {
+ "code": "he",
+ "name": "хебрејÑки"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "хинди"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "холандÑки"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "хрватÑки"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "чероки"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "чешки"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "џонга"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "ШвајцарÑки виÑоки немачки"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "швајцарÑки немачки"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "ШвајцарÑки француÑки"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "шведÑки"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "шкотÑки галÑки"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "шона"
+ },
+ "es": {
+ "code": "es",
+ "name": "шпанÑки"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/bs.json b/library/intl/resources/language/bs.json
new file mode 100644
index 000000000..ae98240ad
--- /dev/null
+++ b/library/intl/resources/language/bs.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikanerski"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanski"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "ameriÄki engleski"
+ },
+ "am": {
+ "code": "am",
+ "name": "amharski"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arapski"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturijski"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "australski engleski"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "austrijski njemaÄki"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbejdžanski"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "baskijski"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalski"
+ },
+ "be": {
+ "code": "be",
+ "name": "bjeloruski"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosanski"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretonski"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "britanski engleski"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bugarski"
+ },
+ "my": {
+ "code": "my",
+ "name": "burmanski"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ÄeÅ¡ki"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Äiga"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Äiroki"
+ },
+ "da": {
+ "code": "da",
+ "name": "danski"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "donjolužiÄkosrpski"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "džonga"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "en": {
+ "code": "en",
+ "name": "engleski"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonski"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "eve"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "evondo"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "evropski Å¡panski"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "farski"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipinski"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finski"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamanski"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francuski"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulijski"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frizijski"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galski"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "gornjolužiÄkosrpski"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "gornjonjemaÄki (Å¡vicarski)"
+ },
+ "el": {
+ "code": "el",
+ "name": "grÄki"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "gruzijski"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gudžarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebrejski"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "holandski"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "hrvatski"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonezijski"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irski"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandski"
+ },
+ "it": {
+ "code": "it",
+ "name": "italijanski"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japanski"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "jermenski"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "jorubanski"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabile"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "kalalisutski"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kanada"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "kanadski engleski"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "kanadski francuski"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kašmiri"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalonski"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazaÄki"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kelnski"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuju"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "kineski"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "kineski (pojednostavljeni)"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "kineski (tradicionalni)"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgiski"
+ },
+ "km": {
+ "code": "km",
+ "name": "kmerski"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "kojraboro seni"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "kongoanski swahili"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "korejski"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laoški"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letonski"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "litvanski"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luksemburški"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "mađarski"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedonski"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malagazijski"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malajalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malajski"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "malteški"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marati"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "marokanski tamazigt"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masai"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "mauricijski kreolski"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "meksiÄki Å¡panski"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "moderni standardni arapski"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavski"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongolski"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalski"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norveški bokmal"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norveški njorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "njankole"
+ },
+ "de": {
+ "code": "de",
+ "name": "njemaÄki"
+ },
+ "or": {
+ "code": "or",
+ "name": "orijski"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "pandžabski"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "paštunski"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "perzijski"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "poljski"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugalski"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "reto-romanski"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rua"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumunski"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruski"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "si": {
+ "code": "si",
+ "name": "singaleski"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "sjeverni ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "sjeverni sami"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovaÄki"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "slovenaÄki"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalski"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "srpski"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "standardni marokanski tamazigt"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "svahili"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Å¡kotski galski"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Å¡ona"
+ },
+ "es": {
+ "code": "es",
+ "name": "Å¡panski"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Å¡vajcarski francuski"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Å¡vajcarski njemaÄki"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Å¡vedski"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tahelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "th": {
+ "code": "th",
+ "name": "tajlandski"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamilski"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasavak"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetanski"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinja"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonga"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turski"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ujgurski"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrajinski"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeÄki"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vijetnamski"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "zelenortski"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ca.json b/library/intl/resources/language/ca.json
new file mode 100644
index 000000000..c6d582ad9
--- /dev/null
+++ b/library/intl/resources/language/ca.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "àkan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanès"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemany"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemany austríac"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemany suís"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alt alemany suís"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "alt sòrab"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "amazic del Marroc central"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "amazic estàndard marroquí"
+ },
+ "am": {
+ "code": "am",
+ "name": "amhàric"
+ },
+ "en": {
+ "code": "en",
+ "name": "anglès"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "anglès americà"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "anglès australià"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "anglès britànic"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "anglès canadenc"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "àrab"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "àrab estàndard modern"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armeni"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturià"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaidjanès"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "baix sòrab"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "basc"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorús"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmà"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "bissio"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnià"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretó"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgar"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabilenc"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "caixmiri"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "català"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "colognian"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreà"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "crioll capverdià"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croat"
+ },
+ "da": {
+ "code": "da",
+ "name": "danès"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "diola"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongka"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovac"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "eslovè"
+ },
+ "es": {
+ "code": "es",
+ "name": "espanyol"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "espanyol de Mèxic"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "espanyol europeu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonià"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroès"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipí"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finès"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenc"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francès"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francès canadenc"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francès suís"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisó oriental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friülà"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "ful"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaèlic escocès"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallec"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "gal·lès"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgià"
+ },
+ "el": {
+ "code": "el",
+ "name": "grec"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "grenlandès"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusí"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "haussa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreu"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "hongarès"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesi"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ioruba"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandès"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandès"
+ },
+ "it": {
+ "code": "it",
+ "name": "italià"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonès"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannada"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazakh"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuiu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguís"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosià"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letó"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituà"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburguès"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedoni"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-metto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malai"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malaiàlam"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgaix"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltès"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "massai"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "mauricià"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldau"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele septentrional"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandès"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalès"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "noruec bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "noruec nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "paixtu"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "panjabi"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "pare"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polonès"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portuguès"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portuguès de Portugal"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portuguès del Brasil"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retoromànic"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "romanès"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "rus"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwo"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami septentrional"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbi"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "singalès"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somali"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "songhai oriental"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "suahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "suahili del Congo"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "suec"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandès"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "taixelhit"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tàmil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetà"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongalès"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turc"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "txec"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraïnès"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdú"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "xinès"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "xinès simplificat"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "xinès tradicional"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/cgg.json b/library/intl/resources/language/cgg.json
new file mode 100644
index 000000000..8d03b2c4a
--- /dev/null
+++ b/library/intl/resources/language/cgg.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Oru-Urudu"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Orubengari"
+ },
+ "be": {
+ "code": "be",
+ "name": "Oruberarusi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Oruburugariya"
+ },
+ "my": {
+ "code": "my",
+ "name": "Oruburuma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Oruceeki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Oruchaina"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Orudaaki"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Orufaransa"
+ },
+ "de": {
+ "code": "de",
+ "name": "Orugirimaani"
+ },
+ "el": {
+ "code": "el",
+ "name": "Oruguriiki"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Oruhangare"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Oruharabu"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Oruhausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Oruhindi"
+ },
+ "id": {
+ "code": "id",
+ "name": "Oruindonezia"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Orujapaani"
+ },
+ "km": {
+ "code": "km",
+ "name": "Orukambodiya"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Orukani"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Orukoreya"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Orukuraini"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Orukuruki"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Orumalesiya"
+ },
+ "am": {
+ "code": "am",
+ "name": "Orumariki"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Orunepali"
+ },
+ "en": {
+ "code": "en",
+ "name": "Orungyereza"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Orupaasiya"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Orupocugo"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Orupoori"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Orupungyabi"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Oruromania"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Orurrasha"
+ },
+ "so": {
+ "code": "so",
+ "name": "Orusomaari"
+ },
+ "es": {
+ "code": "es",
+ "name": "Orusupaani"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Oruswidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Orutailandi"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Orutamiri"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Oruviyetinaamu"
+ },
+ "it": {
+ "code": "it",
+ "name": "Oruyitare"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Oruyoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Oruzuru"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Rukiga"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/chr.json b/library/intl/resources/language/chr.json
new file mode 100644
index 000000000..909afb89c
--- /dev/null
+++ b/library/intl/resources/language/chr.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amharic"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arabic"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "be": {
+ "code": "be",
+ "name": "Belarusian"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengali"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgarian"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burmese"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Czech"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Dutch"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "el": {
+ "code": "el",
+ "name": "Greek"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hungarian"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indonesian"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "km": {
+ "code": "km",
+ "name": "Khmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Korean"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Malay"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepali"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Persian"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Polish"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Punjabi"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Romanian"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somali"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Swedish"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "Thai"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Turkish"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukrainian"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vietnamese"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu"
+ },
+ "de": {
+ "code": "de",
+ "name": "Ꭰá‚á“á¥"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "ᎦᎸá¥"
+ },
+ "en": {
+ "code": "en",
+ "name": "ᎩᎵá"
+ },
+ "it": {
+ "code": "it",
+ "name": "Ꭼá©áŽµá²á¥áŽ¢"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "á‰á§áŽ¦áŽµ"
+ },
+ "es": {
+ "code": "es",
+ "name": "áá†á‚"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "á“Ꮆá‚Ꭸ"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "á£áŽ³áŽ©"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "á£á©á‚á"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "á²á‚Ꭲ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/cs.json b/library/intl/resources/language/cs.json
new file mode 100644
index 000000000..b650d8452
--- /dev/null
+++ b/library/intl/resources/language/cs.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikánština"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akanština"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albánština"
+ },
+ "am": {
+ "code": "am",
+ "name": "amharština"
+ },
+ "en": {
+ "code": "en",
+ "name": "angliÄtina"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "angliÄtina (USA)"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabština"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "arabština (moderní standardní)"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "arménština"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturština"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "ázerbájdžánština"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambarština"
+ },
+ "my": {
+ "code": "my",
+ "name": "barmština"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "baskiÄtina"
+ },
+ "be": {
+ "code": "be",
+ "name": "běloruština"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengálština"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodoština"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosenština"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretonština"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulharština"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "ÄerokézÅ¡tina"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ÄeÅ¡tina"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "ÄínÅ¡tina"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "ÄínÅ¡tina (zjednoduÅ¡ená)"
+ },
+ "da": {
+ "code": "da",
+ "name": "dánština"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "dolnolužická srbština"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkä"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonština"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "eweština"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "faerština"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipínština"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finština"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francouzština"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "fríština"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fulbština"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "furlanština"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galicijština"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "gandština"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "grónština"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "gruzínština"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gudžarátština"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hauština"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebrejština"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindština"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "hornolužická srbština"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "chorvatština"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonéština"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irština"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandština"
+ },
+ "it": {
+ "code": "it",
+ "name": "italština"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "jangbenština"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonština"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "jorubština"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabylština"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalendžin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kambština"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannadština"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "kapverdština"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kašmírština"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalánština"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazaština"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmérština"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "kiga"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikujština"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kirundština"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kolínština"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "korejština"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kyrgyzština"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laoština"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingalština"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "litevština"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "lotyština"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "lubu-katanžština"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "lucemburština"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luhja"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "luoština"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "maÄarÅ¡tina"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedonština"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malajálamština"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malajština"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgaština"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltština"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maráthština"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masajština"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "mašame"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "mauricijská kreolština"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavština"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongolština"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "namaština"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "ňankolština"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele (Zimbabwe)"
+ },
+ "de": {
+ "code": "de",
+ "name": "nÄ›mÄina"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "nÄ›mÄina (Å výcarsko)"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "nÄ›mÄina (walser)"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "nÄ›mÄina standardní (Å výcarsko)"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepálština"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "nizozemština"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norština (bokmål)"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norština (nynorsk)"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuerština"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "paňdžábština"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "paštština"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "perština"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polština"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugalština"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugalština (Evropa)"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "rétorománština"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumunština"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruština"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "el": {
+ "code": "el",
+ "name": "Å™eÄtina"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sámština (severní)"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangoština"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sangština"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "si": {
+ "code": "si",
+ "name": "sinhálština"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "skotská gaelština"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovenština"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "slovinština"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "sogština"
+ },
+ "so": {
+ "code": "so",
+ "name": "somálština"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "srbština"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "svahilština"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "svahilština (Kongo)"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Å¡ambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "šonština"
+ },
+ "es": {
+ "code": "es",
+ "name": "španělština"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "španělština (Evropa)"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "švédština"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight (standardní marocký)"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight (střední Maroko)"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamilština"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugština"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "thajština"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetština"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinijština"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongánština"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "tureÄtina"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ujgurština"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrajinština"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdština"
+ },
+ "or": {
+ "code": "or",
+ "name": "urijština"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeÄtina"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "velština"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamština"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "vlámština"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarmština"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zuluština"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/cy.json b/library/intl/resources/language/cy.json
new file mode 100644
index 000000000..fe8df481f
--- /dev/null
+++ b/library/intl/resources/language/cy.json
@@ -0,0 +1,738 @@
+{
+ "ak": {
+ "code": "ak",
+ "name": "Acaneg"
+ },
+ "af": {
+ "code": "af",
+ "name": "Affricâneg"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghemeg"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albaneg"
+ },
+ "de": {
+ "code": "de",
+ "name": "Almaeneg"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "Almaeneg Awstria"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Almaeneg Safonol y Swistir"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Almaeneg y Swistir"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amhareg"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arabeg"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "Arabeg Modern Safonol"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armeneg"
+ },
+ "az": {
+ "code": "az",
+ "name": "Aserbaijaneg"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Baffia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambareg"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basâeg"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basgeg"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengaleg"
+ },
+ "be": {
+ "code": "be",
+ "name": "Belarwseg"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnieg"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bwlgareg"
+ },
+ "my": {
+ "code": "my",
+ "name": "Byrmaneg"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Cabileg"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Caboferdianeg"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Camba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Casacheg"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Cashmireg"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalaneg"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Cirgiseg"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Coreeg"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croateg"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Cwleneg"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Cymraeg"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "km": {
+ "code": "km",
+ "name": "Chmereg"
+ },
+ "da": {
+ "code": "da",
+ "name": "Daneg"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "it": {
+ "code": "it",
+ "name": "Eidaleg"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embw"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estoneg"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Faieg"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Fietnameg"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Ffaröeg"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Ffilipineg"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Ffinneg"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Fflemeg"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Ffrangeg"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Ffrangeg Canada"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Ffrangeg y Swistir"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Ffriseg y Gorllewin"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Ffriwleg"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Ffwla"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Gaeleg yr Alban"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galisieg"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgeg"
+ },
+ "el": {
+ "code": "el",
+ "name": "Groeg"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gwjarati"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Gwyddeleg"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hawsa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebraeg"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hwngareg"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indoneseg"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Iorwba"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Iseldireg"
+ },
+ "is": {
+ "code": "is",
+ "name": "Islandeg"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japaneeg"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Laoeg"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latfieg"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithwaneg"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Lwcsembwrgeg"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Lŵo"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Lwyia"
+ },
+ "br": {
+ "code": "br",
+ "name": "Llydaweg"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedoneg"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Macondeg"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagaseg"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Maleieg"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Malteg"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mas"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Matsiame"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Mêrw"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongoleg"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "Moldofeg"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Ndebele Gogleddol"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepaleg"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Niancole"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwyeg Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwyeg Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nŵereg"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Perseg"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portiwgeeg"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Portiwgeeg Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Portiwgeeg Ewrop"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Pwnjabeg"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Pwyleg"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romaunsch"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Rwmaneg"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rwndi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Rwseg"
+ },
+ "en": {
+ "code": "en",
+ "name": "Saesneg"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "Saesneg America"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Saesneg Awstralia"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "Saesneg Canada"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Saesneg Prydain"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangw"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Sambŵrw"
+ },
+ "se": {
+ "code": "se",
+ "name": "Sami Gogleddol"
+ },
+ "es": {
+ "code": "es",
+ "name": "Sbaeneg"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Sbaeneg Ewrop"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Sbaeneg Mecsico"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbeg"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhaleg"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slofaceg"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slofeneg"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somaleg"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Sorbeg Isaf"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Sorbeg Uchaf"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Swahili’r Congo"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Swedeg"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Swlw"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Tamazight Safonol Moroco"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamileg"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibeteg"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongeg"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Tsieceg"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Tsieineeg"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "Tsieineeg Symledig"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "Tsieineeg Traddodiadol"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Tsierocî"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Tyrceg"
+ },
+ "th": {
+ "code": "th",
+ "name": "Thai"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uighur"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Wcreineg"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Wrdw"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Wsbeceg"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarmaeg"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/da.json b/library/intl/resources/language/da.json
new file mode 100644
index 000000000..444b19ecd
--- /dev/null
+++ b/library/intl/resources/language/da.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albansk"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "amerikansk engelsk"
+ },
+ "am": {
+ "code": "am",
+ "name": "amharisk"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabisk"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armensk"
+ },
+ "az": {
+ "code": "az",
+ "name": "aserbajdsjansk"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturisk"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "australsk engelsk"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "baskisk"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnisk"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "brasiliansk portugisisk"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretonsk"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "britisk engelsk"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgarsk"
+ },
+ "my": {
+ "code": "my",
+ "name": "burmesisk"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "canadisk engelsk"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "canadisk fransk"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalansk"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "centralmarokkansk tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "congolesisk swahili"
+ },
+ "da": {
+ "code": "da",
+ "name": "dansk"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "en": {
+ "code": "en",
+ "name": "engelsk"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estisk"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "europæisk portugisisk"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "europæisk spansk"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filippinsk"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finsk"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamsk"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "forenklet kinesisk"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "fransk"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisisk"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fulah"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "færøsk"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galicisk"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgisk"
+ },
+ "el": {
+ "code": "el",
+ "name": "græsk"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "grønlandsk"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebraisk"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "hollandsk"
+ },
+ "be": {
+ "code": "be",
+ "name": "hviderussisk"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesisk"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irsk"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandsk"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiensk"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japansk"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabylisk"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannada"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "kapverdisk"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kasakhisk"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kashmiri"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmer"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "kiembu"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "kinesisk"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgisisk"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "koreansk"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra-chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "kroatisk"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "lettisk"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "litauisk"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxembourgsk"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyana"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedonsk"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malagassisk"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malay"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltesisk"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathisk"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "mexicansk spansk"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "moderne standardarabisk"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldovisk"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongolsk"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "nedersorbisk"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalesisk"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "nordndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "nordsamisk"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norsk bokmål"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persisk"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polsk"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugisisk"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabi"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumænsk"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "russisk"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "rætoromansk"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "schweizerhøjtysk"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "schweizertysk"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "schweizisk fransk"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbisk"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "singalesisk"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "skotsk gælisk"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovakisk"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "slovensk"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalisk"
+ },
+ "es": {
+ "code": "es",
+ "name": "spansk"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "svensk"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamilsk"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "thailandsk"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetansk"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinya"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "tjekkisk"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongansk"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "traditionelt kinesisk"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "tyrkisk"
+ },
+ "de": {
+ "code": "de",
+ "name": "tysk"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrainsk"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ungarsk"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "usbekisk"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uygurisk"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamesisk"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "walisisk"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walsertysk"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "østrigsk tysk"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "øvresorbisk"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/dav.json b/library/intl/resources/language/dav.json
new file mode 100644
index 000000000..46ce96046
--- /dev/null
+++ b/library/intl/resources/language/dav.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Kiajemi"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Kiakan"
+ },
+ "am": {
+ "code": "am",
+ "name": "Kiamhari"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Kiarabu"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Kibangla"
+ },
+ "be": {
+ "code": "be",
+ "name": "Kibelarusi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Kibulgaria"
+ },
+ "my": {
+ "code": "my",
+ "name": "Kiburma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Kichecki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Kichina"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Kifaransa"
+ },
+ "el": {
+ "code": "el",
+ "name": "Kigiriki"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Kihausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Kihindi"
+ },
+ "es": {
+ "code": "es",
+ "name": "Kihispania"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Kiholanzi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Kihungari"
+ },
+ "id": {
+ "code": "id",
+ "name": "Kiindonesia"
+ },
+ "it": {
+ "code": "it",
+ "name": "Kiitaliano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Kijapani"
+ },
+ "de": {
+ "code": "de",
+ "name": "Kijerumani"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kikambodia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Kikorea"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Kimalesia"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Kinepali"
+ },
+ "en": {
+ "code": "en",
+ "name": "Kingereza"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Kipolandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Kipunjabi"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Kireno"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Kiromania"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Kirusi"
+ },
+ "so": {
+ "code": "so",
+ "name": "Kisomali"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Kiswidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Kitailandi"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Kitaita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Kitamil"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Kituruki"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Kiukrania"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Kiurdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Kivietinamu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Kiyoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Kizulu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/de-CH.json b/library/intl/resources/language/de-CH.json
new file mode 100644
index 000000000..d4711f0d2
--- /dev/null
+++ b/library/intl/resources/language/de-CH.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanisch"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "Amerikanisches Englisch"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amharisch"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arabisch"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenisch"
+ },
+ "az": {
+ "code": "az",
+ "name": "Aserbaidschanisch"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturianisch"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Australisches Englisch"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara-Sprache"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa-Sprache"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Baskisch"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengalisch"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Bhutanisch"
+ },
+ "my": {
+ "code": "my",
+ "name": "Birmanisch"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnisch"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Brasilianisches Portugiesisch"
+ },
+ "br": {
+ "code": "br",
+ "name": "Bretonisch"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Britisches Englisch"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgarisch"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Chinesisch"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "Chinesisch (traditionell)"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "Chinesisch (vereinfacht)"
+ },
+ "da": {
+ "code": "da",
+ "name": "Dänisch"
+ },
+ "de": {
+ "code": "de",
+ "name": "Deutsch"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Diola"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en": {
+ "code": "en",
+ "name": "Englisch"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estnisch"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Europäisches Portugiesisch"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Europäisches Spanisch"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Färöisch"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnisch"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Flämisch"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Französisch"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulisch"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Ful"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galizisch"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgisch"
+ },
+ "el": {
+ "code": "el",
+ "name": "Griechisch"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Grönländisch"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebräisch"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hindi"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indonesisch"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irisch"
+ },
+ "is": {
+ "code": "is",
+ "name": "Isländisch"
+ },
+ "it": {
+ "code": "it",
+ "name": "Italienisch"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japanisch"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabylisch"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kambodschanisch"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "Kanadisches Englisch"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Kanadisches Französisch"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kasachisch"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kaschmirisch"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Katalanisch"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kirgisisch"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Kölsch"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Kongo-Suaheli"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Koreanisch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyra Senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Kroatisch"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Laotisch"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Lettisch"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Litauisch"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luhya"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo-Sprache"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxemburgisch"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Madagassisch"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Malaiisch"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltesisch"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Massai-Sprache"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Mazedonisch"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Mexikanisches Spanisch"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "Modernes Hocharabisch"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "Moldauisch"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolisch"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepalesisch"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Niederländisch"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Niedersorbisch"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Nord-Ndebele-Sprache"
+ },
+ "se": {
+ "code": "se",
+ "name": "Nord-Samisch"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegisch Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegisch Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Obersorbisch"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "Österreichisches Deutsch"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Panjabi"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Pare"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Paschtu"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Persisch"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Polnisch"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portugiesisch"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Rätoromanisch"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Rukiga"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Rumänisch"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi-Sprache"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Russisch"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Schottisches Gälisch"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Schwedisch"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Schweizer Französisch"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Schweizer Hochdeutsch"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Schweizerdeutsch"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbisch"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Singhalesisch"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slowakisch"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slowenisch"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somali"
+ },
+ "es": {
+ "code": "es",
+ "name": "Spanisch"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Suaheli"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Tamazight"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamilisch"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Taschelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "Thailändisch"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetisch"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinja"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongaisch"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Tschechisch"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Türkisch"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uigurisch"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukrainisch"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Ungarisch"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Usbekisch"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vietnamesisch"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Walisisch"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser-Dialekte"
+ },
+ "be": {
+ "code": "be",
+ "name": "Weissrussisch"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Westfriesisch"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Zentralatlas-Tamazight"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/de.json b/library/intl/resources/language/de.json
new file mode 100644
index 000000000..f0d5bd340
--- /dev/null
+++ b/library/intl/resources/language/de.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanisch"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "Amerikanisches Englisch"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amharisch"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arabisch"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenisch"
+ },
+ "az": {
+ "code": "az",
+ "name": "Aserbaidschanisch"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturianisch"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Australisches Englisch"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara-Sprache"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa-Sprache"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Baskisch"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengalisch"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Bhutanisch"
+ },
+ "my": {
+ "code": "my",
+ "name": "Birmanisch"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnisch"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Brasilianisches Portugiesisch"
+ },
+ "br": {
+ "code": "br",
+ "name": "Bretonisch"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Britisches Englisch"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgarisch"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Chinesisch"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "Chinesisch (traditionell)"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "Chinesisch (vereinfacht)"
+ },
+ "da": {
+ "code": "da",
+ "name": "Dänisch"
+ },
+ "de": {
+ "code": "de",
+ "name": "Deutsch"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Diola"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en": {
+ "code": "en",
+ "name": "Englisch"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estnisch"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Europäisches Portugiesisch"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Europäisches Spanisch"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Färöisch"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnisch"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Flämisch"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Französisch"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulisch"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Ful"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galizisch"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgisch"
+ },
+ "el": {
+ "code": "el",
+ "name": "Griechisch"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Grönländisch"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebräisch"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hindi"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indonesisch"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irisch"
+ },
+ "is": {
+ "code": "is",
+ "name": "Isländisch"
+ },
+ "it": {
+ "code": "it",
+ "name": "Italienisch"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japanisch"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabylisch"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kambodschanisch"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "Kanadisches Englisch"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Kanadisches Französisch"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kasachisch"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kaschmirisch"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Katalanisch"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kirgisisch"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Kölsch"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Kongo-Suaheli"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Koreanisch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyra Senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Kroatisch"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Laotisch"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Lettisch"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Litauisch"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luhya"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo-Sprache"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxemburgisch"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Madagassisch"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Malaiisch"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltesisch"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Massai-Sprache"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Mazedonisch"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Mexikanisches Spanisch"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "Modernes Hocharabisch"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "Moldauisch"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolisch"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepalesisch"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Niederländisch"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Niedersorbisch"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Nord-Ndebele-Sprache"
+ },
+ "se": {
+ "code": "se",
+ "name": "Nord-Samisch"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegisch Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegisch Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Obersorbisch"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "Österreichisches Deutsch"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Panjabi"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Pare"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Paschtu"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Persisch"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Polnisch"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portugiesisch"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Rätoromanisch"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Rukiga"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Rumänisch"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi-Sprache"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Russisch"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Schottisches Gälisch"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Schwedisch"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Schweizer Französisch"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Schweizer Hochdeutsch"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Schweizerdeutsch"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbisch"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Singhalesisch"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slowakisch"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slowenisch"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somali"
+ },
+ "es": {
+ "code": "es",
+ "name": "Spanisch"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Suaheli"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Tamazight"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamilisch"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Taschelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "Thailändisch"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetisch"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinja"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongaisch"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Tschechisch"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Türkisch"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uigurisch"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukrainisch"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Ungarisch"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Usbekisch"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vietnamesisch"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Walisisch"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser-Dialekte"
+ },
+ "be": {
+ "code": "be",
+ "name": "Weißrussisch"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Westfriesisch"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Zentralatlas-Tamazight"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/dje.json b/library/intl/resources/language/dje.json
new file mode 100644
index 000000000..a7b9f7bb1
--- /dev/null
+++ b/library/intl/resources/language/dje.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan senni"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "de": {
+ "code": "de",
+ "name": "Almaŋ senni"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amhaarik senni"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "be": {
+ "code": "be",
+ "name": "Belaruus senni"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengali senni"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulagaari senni"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burme senni"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Cek senni"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "es": {
+ "code": "es",
+ "name": "Espaaɲe senni"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Farsi senni"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Fransee senni"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "el": {
+ "code": "el",
+ "name": "Grek senni"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hawsance senni"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Holandee senni"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hungaari senni"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indoneesi senni"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Induu senni"
+ },
+ "en": {
+ "code": "en",
+ "name": "Inglisi senni"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "it": {
+ "code": "it",
+ "name": "Itaali senni"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japonee senni"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kmeer senni"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Koree senni"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Laaraw senni"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Maleezi senni"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Neepal senni"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Polonee senni"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portugee senni"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Punjaabi sennii"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Rumaani senni"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Ruusi senni"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Sinuwa senni"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somaali senni"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Suweede senni"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "th": {
+ "code": "th",
+ "name": "Taailandu senni"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamil senni"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Turku senni"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukreen senni"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu senni"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vietnaam senni"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yorbance senni"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarmaciine"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu senni"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/dsb.json b/library/intl/resources/language/dsb.json
new file mode 100644
index 000000000..d7d926ed1
--- /dev/null
+++ b/library/intl/resources/language/dsb.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akanšćina"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanšćina"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "ameriska engelšćina"
+ },
+ "am": {
+ "code": "am",
+ "name": "amharšćina"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabšćina"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armeńšćina"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturšćina"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "awstralska engelšćina"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbajdžanšćina"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "baskišćina"
+ },
+ "be": {
+ "code": "be",
+ "name": "běłorušćina"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalšćina"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnišćina"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "brazilska portugalšćina"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretonšćina"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "britiska engelšćina"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgaršćina"
+ },
+ "my": {
+ "code": "my",
+ "name": "burmašćina"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "centralnoatlaski tamazight"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Äešćina"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chinšćina"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chinšćina (tradicionalna)"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chinšćina (zjadnorjona)"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "chorwatšćina"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "da": {
+ "code": "da",
+ "name": "danšćina"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "dolnoserbšćina"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "en": {
+ "code": "en",
+ "name": "engelšćina"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estišćina"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "europejska portugalšćina"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "europejska špańšćina"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "ferejšćina"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipinšćina"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finšćina"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamšćina"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francojšćina"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frizišćina"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galicišćina"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "gandšćina"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgišćina"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "górnoserbšćina"
+ },
+ "el": {
+ "code": "el",
+ "name": "grichišćina"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "grönlandšćina"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gudžaratšćina"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebrejšćina"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindišćina"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "hungoršćina"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonešćina"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "iršćina"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandšćina"
+ },
+ "it": {
+ "code": "it",
+ "name": "italšćina"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japańšćina"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "jorubšćina"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabylšćina"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "km": {
+ "code": "km",
+ "name": "kambodžanšćina"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "kanadiska engelšćina"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "kanadiska francojšćina"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannadšćina"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "kapverdšćina"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kašmiršćina"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katanlanšćina"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazachšćina"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgišćina"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kirundišćina"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "kongojska swahilišćina"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "korejańšćina"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyra senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laošćina"
+ },
+ "se": {
+ "code": "se",
+ "name": "lapšćina"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letišćina"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "litawšćina"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luhya"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgšćina"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedońšćina"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malajamšćina"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malajšćina"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgašćina"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltašćina"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratišćina"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masaišćina"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "mauriciska kreolšćina"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "mexikańska špańšćina"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "moderna wusokoarabšćina"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldawišćina"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongolšćina"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalšćina"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "de": {
+ "code": "de",
+ "name": "nimšćina"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "nižozemšćina"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norwegske bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norwegske nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "orojišćina"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "pandžabšćina"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "pare"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "paštunšćina"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persišćina"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "pódpołnocne ndebele"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "pólšćina"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugalšćina"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retoromańšćina"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumunšćina"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "rušćina"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Å¡ambala"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbišćina"
+ },
+ "si": {
+ "code": "si",
+ "name": "singalšćina"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "słowakšćina"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "słowjeńšćina"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somališćina"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "šonšćina"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "šotišćina"
+ },
+ "es": {
+ "code": "es",
+ "name": "špańšćina"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "standardny marokkański tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahilišćina"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "šwedšćina"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "šwicarska francojšćina"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "šwicarska nimšćina"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamilšćina"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tašelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugšćina"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "thailandšćina"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetšćina"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinja"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonganšćina"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turkojšćina"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ujguršćina"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrainšćina"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdušćina"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "usbekšćina"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamšćina"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "walizišćina"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/dyo.json b/library/intl/resources/language/dyo.json
new file mode 100644
index 000000000..34a7a81d6
--- /dev/null
+++ b/library/intl/resources/language/dyo.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "de": {
+ "code": "de",
+ "name": "alman"
+ },
+ "am": {
+ "code": "am",
+ "name": "amharik"
+ },
+ "en": {
+ "code": "en",
+ "name": "angle"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arab"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "be": {
+ "code": "be",
+ "name": "belarus"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmani"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgaari"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "endu"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "franse"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "el": {
+ "code": "el",
+ "name": "greek"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "id": {
+ "code": "id",
+ "name": "indoneesi"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "it": {
+ "code": "it",
+ "name": "italien"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "joola"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "km": {
+ "code": "km",
+ "name": "kmeer"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "koree"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "maleesi"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlande"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalees"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ongrua"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "penjabi"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persan"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polonees"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugees"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumeen"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "rus"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "saponee"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "sek"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "sinua"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somali"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "suedi"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "sulu"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "th": {
+ "code": "th",
+ "name": "tay"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turki"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrain"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnam"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/dz.json b/library/intl/resources/language/dz.json
new file mode 100644
index 000000000..f3f2ca654
--- /dev/null
+++ b/library/intl/resources/language/dz.json
@@ -0,0 +1,738 @@
+{
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "ཀ་ན་ཌ་à½"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "ཀ་ཛགས་à½"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "ཀྲོ་ཨེ་ཤི་ཡཱན་à½"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "ཀཱཤ་མི་རི་à½"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "ཀིར་གིས་à½"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "ཀེ་ཊ་ལཱན་à½"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "ཀེ་ན་ཌི་ཡཱན་ཕྲནཅ་à½"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "ཀེ་ན་ཌི་ཡཱན་ཨིང་ལིཤ་à½"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "ཀོ་རི་ཡཱན་à½"
+ },
+ "km": {
+ "code": "km",
+ "name": "à½à½ºà¼‹à½˜à½ºà½¢à¼‹à½"
+ },
+ "el": {
+ "code": "el",
+ "name": "གྲིཀ་à½"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "གལ་ཨིས་ཨི་ཡན་à½"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "གུ་ཇ་ར་à½à½²à¼‹à½"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ཅེཀ་à½"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ཇཱ་པཱ་ནིས་à½"
+ },
+ "de": {
+ "code": "de",
+ "name": "ཇཱར་མཱན་à½"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "ཇཽ་ཇི་ཡཱན་à½"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "ཊཱར་ཀིཤ་à½"
+ },
+ "to": {
+ "code": "to",
+ "name": "ཊོང་གྷན་à½"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ཌཆ་à½"
+ },
+ "da": {
+ "code": "da",
+ "name": "ཌེ་ནིཤ་à½"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "à½à¼‹à½˜à½²à½£à¼‹à½"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "à½à½²à½‚་རི་ཉ་à½"
+ },
+ "te": {
+ "code": "te",
+ "name": "à½à½ºà¼‹à½£à½´à¼‹à½‚ུ་à½"
+ },
+ "th": {
+ "code": "th",
+ "name": "à½à½±à½ à½²à¼‹à½"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "ནུབ་ཕྼི་སི་ཡན་à½"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "ནེ་པཱལི་à½"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "ནོར་à½à½ºà¼‹à½‡à½²à¼‹à½¡à½±à½“་ནོརསཀ་à½"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "ནོར་à½à½ºà¼‹à½‡à½²à¼‹à½¡à½±à½“་བོཀ་མཱལ་à½"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "པར་ཤི་ཡཱན་à½"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "པཱན་ཇ་བི་à½"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "པཱཤ་à½à½¼à¼‹à½"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "པོ་ལིཤ་à½"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "པོར་ཅུ་གིས་à½"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "ཕྲནཅ་à½"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "ཕྷེལེ་མིཤ་à½"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "ཕཱ་རོ་ཨིས་à½"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "ཕི་ནིཤ་à½"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "ཕི་ལི་པི་ནོ་à½"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "བངྒ་ལ་à½"
+ },
+ "my": {
+ "code": "my",
+ "name": "བར་མིས་à½"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "བྲ་ཛི་ལི་ཡཱན་པོར་ཅུ་གིས་à½"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "བྲི་ཊིཤ་ཨིང་ལིཤ་à½"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "བྷོས་ནི་ཡཱན་à½"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "བཱལ་གེ་རི་ཡཱན་à½"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "བཱསཀ་à½"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "བེཊ་ནཱ་མིས་à½"
+ },
+ "be": {
+ "code": "be",
+ "name": "བེལ་ཨ་རུས་à½"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "བོད་à½"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "མ་ར་à½à½²à¼‹à½"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "མ་ལ་ག་སི་à½"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "མ་ལ་ཡ་ལམ་à½"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "མ་ལེ་à½"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "མ་སེ་ཌོ་ནི་ཡཱན་à½"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "མཱལ་ཊ་à½"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "à½à½²à¼‹à½‚ུར་à½"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "à½à½ºà½£à½¤à¼‹à½"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "ཟུ་ལུ་à½"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ཡུ་ཀེ་རེ་ནི་ཡཱན་à½"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "ཡུ་རོབ་ཀྱི་ཨིས་པེ་ནིཤ་à½"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "ཡུ་ཨེས་ཨིང་ལིཤ་à½"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ཡོ་རུ་བ་à½"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "རྒྱ་མི་à½"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "རྒྱ་མི་à½à¼‹à½ à½‡à½˜à¼‹à½¦à½„མ"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "རྫོང་à½"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "རོ་མེ་ནི་ཡཱན་à½"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "རོ་མེ་ནིཤ་à½"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "ལག་ཛམ་བོརྒ་à½"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "ལཊ་བི་ཡཱན་à½"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "ལཱ་à½à½¼à½¦à¼‹à½"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "ལི་à½à½´à¼‹à½à½ºà¼‹à½“ི་ཡཱན་à½"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "སྔ་དུས་ཀྱི་རྒྱ་མི་à½"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "སྭཱ་ཧི་ལི་à½"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "སཱར་བྷི་ཡཱན་à½"
+ },
+ "si": {
+ "code": "si",
+ "name": "སིང་ཧ་ལ་à½"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "སུ་ཡིས་གི་མà½à½¼à¼‹à½¦à½ à½²à¼‹à½‡à½±à½¢à¼‹à½˜à½±à½“་à½"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "སུ་ཡིས་ཇཱར་མཱན་à½"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "སུ་ཡིས་ཕྲནཅ་à½"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "སུ་ལོ་བཱཀ་à½"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "སུ་ལོ་བི་ནི་ཡཱན་à½"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "སུའི་ཌིཤ་à½"
+ },
+ "so": {
+ "code": "so",
+ "name": "སོ་མ་ལི་à½"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "སོག་པོའི་à½"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "ཧà½à¼‹à½¦à¼‹à½"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ཧཱང་གྷ་རི་ཡཱན་à½"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "ཧིན་དི་à½"
+ },
+ "he": {
+ "code": "he",
+ "name": "ཧེ་བྲུ་à½"
+ },
+ "az": {
+ "code": "az",
+ "name": "ཨ་ཛར་བྷའི་ཇཱན་à½"
+ },
+ "is": {
+ "code": "is",
+ "name": "ཨ་ཡིས་ལེན་ཌིཀ་à½"
+ },
+ "af": {
+ "code": "af",
+ "name": "ཨཕ་རི་ཀཱནས་à½"
+ },
+ "am": {
+ "code": "am",
+ "name": "ཨམ་ཧ་རིཀ་à½"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "ཨར་མི་ནི་ཡཱན་à½"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "ཨཱའི་རིཤ་à½"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "ཨཱལ་བེ་ནི་ཡཱན་à½"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "ཨཱོས་ཊྲི་ཡཱན་ཇཱར་མཱན་à½"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "ཨཱོས་ཊྲེ་ལི་ཡཱན་ཨིང་ལིཤ་à½"
+ },
+ "it": {
+ "code": "it",
+ "name": "ཨི་ཊ་ལི་ཡཱན་à½"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "ཨི་བེ་རི་ཡཱན་པོར་ཅུ་གིས་à½"
+ },
+ "en": {
+ "code": "en",
+ "name": "ཨིང་ལིཤ་à½"
+ },
+ "id": {
+ "code": "id",
+ "name": "ཨིན་ཌོ་ནེ་ཤི་ཡཱན་à½"
+ },
+ "es": {
+ "code": "es",
+ "name": "ཨིས་པེ་ནིཤ་à½"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ཨུ་རུ་སུའི་à½"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ཨུར་དུ་à½"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "ཨུས་བེཀ་à½"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "ཨེ་ར་བིཀ་à½"
+ },
+ "et": {
+ "code": "et",
+ "name": "ཨེས་ཊོ་ནི་ཡཱན་à½"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "ཨེས་པ་རཱན་à½à½¼à¼‹à½"
+ },
+ "or": {
+ "code": "or",
+ "name": "ཨོ་རི་ཡ་à½"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ebu.json b/library/intl/resources/language/ebu.json
new file mode 100644
index 000000000..bd8d663c7
--- /dev/null
+++ b/library/intl/resources/language/ebu.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "KÄ©akan"
+ },
+ "am": {
+ "code": "am",
+ "name": "KÄ©amhari"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "KÄ©anjemi"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "KÄ©arabu"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "KÄ©bangla"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "KÄ©bulgaria"
+ },
+ "my": {
+ "code": "my",
+ "name": "KÄ©burma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "KÄ©cheki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "KÄ©china"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "KÄ©embu"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "KÄ©faransa"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "KÄ©hausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Kĩhindĩ"
+ },
+ "es": {
+ "code": "es",
+ "name": "KÄ©hispania"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "KÄ©holanzi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "KÄ©hungari"
+ },
+ "id": {
+ "code": "id",
+ "name": "KÄ©indonesia"
+ },
+ "it": {
+ "code": "it",
+ "name": "KÄ©italiano"
+ },
+ "km": {
+ "code": "km",
+ "name": "KÄ©kambodia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "KÄ©korea"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "KÄ©malesia"
+ },
+ "be": {
+ "code": "be",
+ "name": "KÄ©mbelarusi"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "KÄ©nepali"
+ },
+ "el": {
+ "code": "el",
+ "name": "KÄ©ngriki"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "KÄ©njapani"
+ },
+ "de": {
+ "code": "de",
+ "name": "KÄ©njeremani"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "KÄ©polandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "KÄ©punjabi"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "KÄ©reno"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "KÄ©romania"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "KÄ©rusi"
+ },
+ "so": {
+ "code": "so",
+ "name": "KÄ©somali"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "KÄ©swidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "KÄ©tailandi"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "KÄ©tamil"
+ },
+ "en": {
+ "code": "en",
+ "name": "KÄ©thungu"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "KÄ©turuki"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "KÄ©ukrania"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "KÄ©urdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "KÄ©vietinamu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "KÄ©yoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "KÄ©zulu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ee.json b/library/intl/resources/language/ee.json
new file mode 100644
index 000000000..05fcc120b
--- /dev/null
+++ b/library/intl/resources/language/ee.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaangbe"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghemgbe"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albaniagbe"
+ },
+ "am": {
+ "code": "am",
+ "name": "amhariagbe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabiagbe"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armeniagbe"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asagbe"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiagbe"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "australiatɔwo ƒe yevugbe"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "austriatɔwo ƒe germaniagbe"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaijangbe"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafiagbe"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambaragbe"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basaagbe"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "basqugbe"
+ },
+ "be": {
+ "code": "be",
+ "name": "belarusiagbe"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "benagbe"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalgbe"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "blema tsainagbe"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "blugbe"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodogbe"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosniagbe"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "braziltɔwo ƒe portugalgbe"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretongbe"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "britaintɔwo ƒe yevugbe"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgariagbe"
+ },
+ "my": {
+ "code": "my",
+ "name": "burmagbe"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "cape verdegbe"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "da": {
+ "code": "da",
+ "name": "denmarkgbe"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "dzapangbe"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "dziehe ndebelegbe"
+ },
+ "se": {
+ "code": "se",
+ "name": "dziehe samigbe"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "dzola-fonyigbe"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkhagbe"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embugbe"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperantogbe"
+ },
+ "et": {
+ "code": "et",
+ "name": "estoniagbe"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "eʋegbe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondogbe"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "faroegbe"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipingbe"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finlanÉ–gbe"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flemiagbe"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "fransegbe"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fulagbe"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galatagbe"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "de": {
+ "code": "de",
+ "name": "germaniagbe"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "gɔgiagbe"
+ },
+ "el": {
+ "code": "el",
+ "name": "grisigbe"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "É£etoÉ–oÆ’e frisiagbe"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausagbe"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebrigbe"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindigbe"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "hɔlandgbe"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "hungarigbe"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "iberiatɔwo ƒe portugalgbe"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "iberiatɔwo ƒe spaniagbe"
+ },
+ "is": {
+ "code": "is",
+ "name": "icelanÉ–gbe"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesiagbe"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irelanÉ–gbe"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiagbe"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "kalaalisugbe"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "kanadatɔwo ƒe fransegbe"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "kanadatɔwo ƒe yevugbe"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannadagbe"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kashmirgbe"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalagbe"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazakhstangbe"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmergbe"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "kinagbe"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirghistangbe"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "koreagbe"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "kroatiagbe"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasiogbe"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "laksembɔggbe"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laogbe"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "latviagbe"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lithuaniagbe"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katangagbe"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyiagbe"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedoniagbe"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makuwa-mitogbe"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malagasegbe"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayagbe"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malaygbe"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltagbe"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathiagbe"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongoliagbe"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundangbe"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalgbe"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "nɔweigbe bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nɔweigbe ninɔsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuergbe"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriyagbe"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pashtogbe"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persiagbe"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polandgbe"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "pɔtugalgbe"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "pundzabgbe"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "romaniagbe"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romanshgbe"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombogbe"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "rɔtsiagbe"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundigbe"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwagbe"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sangogbe"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangugbe"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbiagbe"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shonagbe"
+ },
+ "si": {
+ "code": "si",
+ "name": "sinhalgbe"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "skɔtlanɖ gaeliagbe"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovakiagbe"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "sloveniagbe"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somaliagbe"
+ },
+ "es": {
+ "code": "es",
+ "name": "spaniagbe"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "swedengbe"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "swizerlanɖ germaniagbe kɔkɔtɔ"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "swizerlanɖtɔwo ƒe fransegbe"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "swizerlanɖtɔwo ƒe germaniagbe"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandgbe"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamilgbe"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawakgbe"
+ },
+ "te": {
+ "code": "te",
+ "name": "telegugbe"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "tɛkigbe"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetagbe"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinyagbe"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongagbe"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "tsainagbe"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "tsɛkgbe"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "u.s.dukɔmetɔwo ƒe yevugbe"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uighurgbe"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukraingbe"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdugbe"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbekistangbe"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "vaigbe"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamgbe"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "walesgbe"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walsegbe"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangbengbe"
+ },
+ "en": {
+ "code": "en",
+ "name": "yevugbe"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yorubagbe"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zamagbe"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulugbe"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/el.json b/library/intl/resources/language/el.json
new file mode 100644
index 000000000..da61f48e4
--- /dev/null
+++ b/library/intl/resources/language/el.json
@@ -0,0 +1,738 @@
+{
+ "en": {
+ "code": "en",
+ "name": "Αγγλικά"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "Αγγλικά ΑμεÏικής"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Αγγλικά ΑυστÏαλίας"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Αγγλικά Ηνωμένου Βασιλείου"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "Αγγλικά Καναδά"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Αγκέμ"
+ },
+ "az": {
+ "code": "az",
+ "name": "ΑζεÏμπαϊτζανικά"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Ακάν"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Αλβανικά"
+ },
+ "am": {
+ "code": "am",
+ "name": "ΑμαÏικά"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "Απλοποιημένα Κινεζικά"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "ΑÏαβικά"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "ΑÏμενικά"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Άσου"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "ΑστουÏιανά"
+ },
+ "af": {
+ "code": "af",
+ "name": "ΑφÏικάανς"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Βάι"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "ΒάλσεÏ"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Βασκικά"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Βιετναμικά"
+ },
+ "my": {
+ "code": "my",
+ "name": "ΒιÏμανικά"
+ },
+ "se": {
+ "code": "se",
+ "name": "Î’ÏŒÏεια Σάμι"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Βοσνιακά"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ΒουλγαÏικά"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "ΒοÏντζο"
+ },
+ "br": {
+ "code": "br",
+ "name": "Î’Ïετονικά"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Γαλικιανά"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Γαλλικά"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Γαλλικά Ελβετίας"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Γαλλικά Καναδά"
+ },
+ "de": {
+ "code": "de",
+ "name": "ΓεÏμανικά"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "ΓεÏμανικά ΑυστÏίας"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "ΓεÏμανικά Ελβετίας"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "ΓεωÏγιανά"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Γι"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Γιανγκμπέν"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ΓιοÏοÏμπα"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Γκάντα"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "ΓκουγιαÏάτι"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "ΓκοÏσι"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Γλώσσα Άνω Λουσατίας"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Γλώσσα Κάτω Λουσατίας"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Γλώσσα του ΠÏάσινου ΑκÏωτηÏίου"
+ },
+ "da": {
+ "code": "da",
+ "name": "Δανικά"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Δυτικά ΦÏιζιανά"
+ },
+ "he": {
+ "code": "he",
+ "name": "ΕβÏαϊκά"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Εγουόντο"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Ελβετικά ΓεÏμανικά"
+ },
+ "el": {
+ "code": "el",
+ "name": "Ελληνικά"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Έμπου"
+ },
+ "et": {
+ "code": "et",
+ "name": "Εσθονικά"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "ΕσπεÏάντο"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "ΖάÏμα"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "ΖουλοÏ"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Θιβετιανά"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Ιαπωνικά"
+ },
+ "id": {
+ "code": "id",
+ "name": "Ινδονησιακά"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "ΙÏλανδικά"
+ },
+ "is": {
+ "code": "is",
+ "name": "Ισλανδικά"
+ },
+ "es": {
+ "code": "es",
+ "name": "Ισπανικά"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Ισπανικά ΕυÏώπης"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Ισπανικά ΜεξικοÏ"
+ },
+ "it": {
+ "code": "it",
+ "name": "Ιταλικά"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Καζακικά"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Καλαάλισουτ"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Καλεντζίν"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Κάμπα"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Καμπίλε"
+ },
+ "km": {
+ "code": "km",
+ "name": "Καμποτζιανά"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Κανάντα"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "ΚασμίÏι"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Καταλανικά"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Κβάσιο"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "ΚικοÏγιου"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Κινεζικά"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "ΚόιÏα Τσίνι"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "ΚοϊÏαμπόÏο Σένι"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Κολωνικά"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Κονγκό Σουαχίλι"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "ΚοÏεατικά"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "ΚÏοατικά"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "ΚυÏγιζικά"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Λάνγκι"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Λαοθιανά"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Λετονικά"
+ },
+ "be": {
+ "code": "be",
+ "name": "ΛευκοÏωσικά"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Λιθουανικά"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Λινγκάλα"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "ΛοÏμπα-Κατάνγκα"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "ΛουξεμβουÏγιανά"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "ΛοÏο"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Λουχία"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Μακόντε"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "ΜακοÏβα-Μέτο"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Μαλαγάσι"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Μαλαγιαλάμ"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Μαλάι"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Μαλτεζικά"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "ΜαÏάθι"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Μασάι"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Μάχαμε"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "ΜεÏοÏ"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Μογγολικά"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "Μολδαβικά"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "ΜοÏίσιεν"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Μουντάνγκ"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "ΜπαμπάÏα"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Μπάσα"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Μπάφια"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Μπένα"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Μπενγκάλι"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Μπόντο"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Îάμα"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Îγκόμπα"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Îεπάλι"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Îιανκόλε"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "ÎοÏβηγικά Μποκμάλ"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "ÎοÏβηγικά ÎινόÏσκ"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "ÎουέÏ"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Îτεμπέλε ΒοÏÏά"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Îτζόνγκχα"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Ολλανδικά"
+ },
+ "or": {
+ "code": "or",
+ "name": "ΟÏίγια"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Ουαλικά"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ΟυγγÏικά"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Ουζμπεκικά"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ΟυιγουÏικά"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ΟυκÏανικά"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ΟυÏντοÏ"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Παντζαπικά"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "ΠαÏαδοσιακά Κινεζικά"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Πάστο"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "ΠεÏσικά"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Πολωνικά"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "ΠοÏτογαλικά"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "ΠοÏτογαλικά Î’Ïαζιλίας"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "ΠοÏτογαλικά ΕυÏώπης"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Ρομανικά"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Ρόμπο"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Ρουά"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Ρουμανικά"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "ΡοÏντι"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Ρωσικά"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Σάμπαλα"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "ΣαμποÏÏου"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Σάνγκο"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Σάνγκου"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Σένα"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "ΣεÏβικά"
+ },
+ "si": {
+ "code": "si",
+ "name": "Σινχαλεζικά"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Σκωτικά Κελτικά"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Σλαβομακεδονικά"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Σλοβακικά"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Σλοβενικά"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Σόγκα"
+ },
+ "so": {
+ "code": "so",
+ "name": "Σομάλι"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Σουαχίλι"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Σουηδικά"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ΣÏγχÏονα Τυπικά ΑÏαβικά"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Σχόνα"
+ },
+ "th": {
+ "code": "th",
+ "name": "Ταϊλανδικά"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Τάιτα"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Ταμαζίτ ΚεντÏÎ¹ÎºÎ¿Ï ÎœÎ±Ïόκο"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Ταμίλ"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Τασαβάκ"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Τασελχίτ"
+ },
+ "te": {
+ "code": "te",
+ "name": "ΤελοÏγκου"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Τέσο"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Τζόλα-Φόνι"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "ΤιγκÏίνυα"
+ },
+ "to": {
+ "code": "to",
+ "name": "Τονγκανικά"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "ΤουÏκικά"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "ΤσεÏόκι"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Τσεχικά"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Τσίγκα"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Τυπικά Ταμαζίγκτ ΜαÏόκου"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "ΦαÏόε"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Φιλιππινεζικά"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Φινλανδικά"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Φλαμανδικά"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Φουλάχ"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "ΦÏιοÏλιαν"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Χάουσα"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Χίντι"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/en-AU.json b/library/intl/resources/language/en-AU.json
new file mode 100644
index 000000000..e8870d47c
--- /dev/null
+++ b/library/intl/resources/language/en-AU.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amharic"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arabic"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Australian English"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "Austrian German"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "be": {
+ "code": "be",
+ "name": "Belarusian"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengali"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Brazilian Portuguese"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "British English"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgarian"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burmese"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "Canadian English"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Canadian French"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Chinese"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Czech"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Dutch"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en": {
+ "code": "en",
+ "name": "English"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "European Portuguese"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "European Spanish"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Flemish"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "French"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "de": {
+ "code": "de",
+ "name": "German"
+ },
+ "el": {
+ "code": "el",
+ "name": "Greek"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hungarian"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indonesian"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "it": {
+ "code": "it",
+ "name": "Italian"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japanese"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "km": {
+ "code": "km",
+ "name": "Khmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Korean"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Malay"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Mexican Spanish"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "Modern Standard Arabic"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "Moldavian"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepali"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Persian"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Polish"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portuguese"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Punjabi"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Romanian"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Russian"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "Simplified Chinese"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somali"
+ },
+ "es": {
+ "code": "es",
+ "name": "Spanish"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Swedish"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Swiss French"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Swiss High German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "Thai"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "Traditional Chinese"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Turkish"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukrainian"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "United States English"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vietnamese"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/en.json b/library/intl/resources/language/en.json
new file mode 100644
index 000000000..499a392e7
--- /dev/null
+++ b/library/intl/resources/language/en.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "American English"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amharic"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arabic"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Australian English"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "Austrian German"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "be": {
+ "code": "be",
+ "name": "Belarusian"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengali"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Brazilian Portuguese"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "British English"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgarian"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burmese"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "Canadian English"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Canadian French"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Chinese"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Czech"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Dutch"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en": {
+ "code": "en",
+ "name": "English"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "European Portuguese"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "European Spanish"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Flemish"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "French"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "de": {
+ "code": "de",
+ "name": "German"
+ },
+ "el": {
+ "code": "el",
+ "name": "Greek"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hungarian"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indonesian"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "it": {
+ "code": "it",
+ "name": "Italian"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japanese"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "km": {
+ "code": "km",
+ "name": "Khmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Korean"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Malay"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Mexican Spanish"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "Modern Standard Arabic"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "Moldavian"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepali"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Persian"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Polish"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portuguese"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Punjabi"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Romanian"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Russian"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "Simplified Chinese"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somali"
+ },
+ "es": {
+ "code": "es",
+ "name": "Spanish"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Swedish"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Swiss French"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Swiss High German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "Thai"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "Traditional Chinese"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Turkish"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukrainian"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vietnamese"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/eo.json b/library/intl/resources/language/eo.json
new file mode 100644
index 000000000..a86628b28
--- /dev/null
+++ b/library/intl/resources/language/eo.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikansa"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akana"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albana"
+ },
+ "am": {
+ "code": "am",
+ "name": "amhara"
+ },
+ "en": {
+ "code": "en",
+ "name": "angla"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "araba"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armena"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "aÅ­stra germana"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "aÅ­stralia angla"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbajÄana"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "be": {
+ "code": "be",
+ "name": "belorusa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengala"
+ },
+ "my": {
+ "code": "my",
+ "name": "birma"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodoa"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnia"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "brazilportugala"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretona"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "brita angla"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgara"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "burunda"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ĉeĥa"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "ĉeroka"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "ĉina"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "ĉina simpligita"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "ĉina tradicia"
+ },
+ "da": {
+ "code": "da",
+ "name": "dana"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "dannorvega"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzonko"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estona"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "eÅ­ropa hispana"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "eÅ­ropportugala"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "eÅ­ska"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroa"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipina"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finna"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flandra"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "franca"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisa"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaela"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galega"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "de": {
+ "code": "de",
+ "name": "germana"
+ },
+ "el": {
+ "code": "el",
+ "name": "greka"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "gronlanda"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "guÄarata"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "haÅ­sa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebrea"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hinda"
+ },
+ "es": {
+ "code": "es",
+ "name": "hispana"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "hungara"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonezia"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlanda"
+ },
+ "is": {
+ "code": "is",
+ "name": "islanda"
+ },
+ "it": {
+ "code": "it",
+ "name": "itala"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japana"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "joruba"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "kanada angla"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "kanada franca"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kanara"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "kartvela"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kaÅmira"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "kataluna"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazaĥa"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "kimra"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgiza"
+ },
+ "km": {
+ "code": "km",
+ "name": "kmera"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "korea"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "kroata"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "latva"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laÅ­a"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "litova"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luksemburga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedona"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malagasa"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malaja"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malajalama"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "malsuprasoraba"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "malta"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marata"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "meksika hispana"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "moderna norma araba"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongola"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "nederlanda"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepala"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "novnorvega"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "orijo"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "panÄaba"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "paÅtoa"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "pola"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugala"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romanĉa"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumana"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "rusa"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sangoa"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serba"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "si": {
+ "code": "si",
+ "name": "sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovaka"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "slovena"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somala"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "svahila"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sveda"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "svisa franca"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "svisa germana"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Åona"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "th": {
+ "code": "th",
+ "name": "taja"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamila"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugua"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibeta"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigraja"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongaa"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turka"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ujgura"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukraina"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urduo"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "usona angla"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeka"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vjetnama"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulua"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/es-AR.json b/library/intl/resources/language/es-AR.json
new file mode 100644
index 000000000..afeb6b6b4
--- /dev/null
+++ b/library/intl/resources/language/es-AR.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikáans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanés"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán (Suiza)"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemán austríaco"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemán de Suiza"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaiyano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorruso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmal noruego"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabila"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemiro"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarés"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroqui"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chino"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chino simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chino tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "criollo caboverdiano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "criollo mauriciano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "danés"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "español de España"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenco"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés canadiense"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés suizo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón occidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocés"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallego"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "griego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandés"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreo"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglés australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés británico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés canadiense"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés estadounidense"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonés"
+ },
+ "km": {
+ "code": "km",
+ "name": "jemer"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazajo"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguís"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kiroundi"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "kivunjo"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedonio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayo"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratí"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masái"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavo"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele septentrional"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandés"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalí"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk noruego"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastún"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués de Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugués de Portugal"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabí"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retorrománico"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumano"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruso"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami septentrional"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalí"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sorbio inferior"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorbio superior"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili del Congo"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight del Marruecos Central"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriña"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongano"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeko"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "vasco"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/es-BO.json b/library/intl/resources/language/es-BO.json
new file mode 100644
index 000000000..afeb6b6b4
--- /dev/null
+++ b/library/intl/resources/language/es-BO.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikáans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanés"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán (Suiza)"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemán austríaco"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemán de Suiza"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaiyano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorruso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmal noruego"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabila"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemiro"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarés"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroqui"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chino"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chino simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chino tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "criollo caboverdiano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "criollo mauriciano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "danés"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "español de España"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenco"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés canadiense"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés suizo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón occidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocés"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallego"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "griego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandés"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreo"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglés australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés británico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés canadiense"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés estadounidense"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonés"
+ },
+ "km": {
+ "code": "km",
+ "name": "jemer"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazajo"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguís"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kiroundi"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "kivunjo"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedonio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayo"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratí"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masái"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavo"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele septentrional"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandés"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalí"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk noruego"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastún"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués de Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugués de Portugal"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabí"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retorrománico"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumano"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruso"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami septentrional"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalí"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sorbio inferior"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorbio superior"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili del Congo"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight del Marruecos Central"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriña"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongano"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeko"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "vasco"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/es-CL.json b/library/intl/resources/language/es-CL.json
new file mode 100644
index 000000000..afeb6b6b4
--- /dev/null
+++ b/library/intl/resources/language/es-CL.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikáans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanés"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán (Suiza)"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemán austríaco"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemán de Suiza"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaiyano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorruso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmal noruego"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabila"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemiro"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarés"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroqui"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chino"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chino simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chino tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "criollo caboverdiano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "criollo mauriciano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "danés"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "español de España"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenco"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés canadiense"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés suizo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón occidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocés"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallego"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "griego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandés"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreo"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglés australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés británico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés canadiense"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés estadounidense"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonés"
+ },
+ "km": {
+ "code": "km",
+ "name": "jemer"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazajo"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguís"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kiroundi"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "kivunjo"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedonio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayo"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratí"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masái"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavo"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele septentrional"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandés"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalí"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk noruego"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastún"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués de Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugués de Portugal"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabí"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retorrománico"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumano"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruso"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami septentrional"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalí"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sorbio inferior"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorbio superior"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili del Congo"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight del Marruecos Central"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriña"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongano"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeko"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "vasco"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/es-CO.json b/library/intl/resources/language/es-CO.json
new file mode 100644
index 000000000..afeb6b6b4
--- /dev/null
+++ b/library/intl/resources/language/es-CO.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikáans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanés"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán (Suiza)"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemán austríaco"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemán de Suiza"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaiyano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorruso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmal noruego"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabila"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemiro"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarés"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroqui"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chino"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chino simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chino tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "criollo caboverdiano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "criollo mauriciano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "danés"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "español de España"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenco"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés canadiense"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés suizo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón occidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocés"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallego"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "griego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandés"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreo"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglés australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés británico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés canadiense"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés estadounidense"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonés"
+ },
+ "km": {
+ "code": "km",
+ "name": "jemer"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazajo"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguís"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kiroundi"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "kivunjo"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedonio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayo"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratí"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masái"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavo"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele septentrional"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandés"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalí"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk noruego"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastún"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués de Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugués de Portugal"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabí"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retorrománico"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumano"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruso"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami septentrional"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalí"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sorbio inferior"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorbio superior"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili del Congo"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight del Marruecos Central"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriña"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongano"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeko"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "vasco"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/es-CR.json b/library/intl/resources/language/es-CR.json
new file mode 100644
index 000000000..afeb6b6b4
--- /dev/null
+++ b/library/intl/resources/language/es-CR.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikáans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanés"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán (Suiza)"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemán austríaco"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemán de Suiza"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaiyano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorruso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmal noruego"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabila"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemiro"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarés"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroqui"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chino"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chino simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chino tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "criollo caboverdiano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "criollo mauriciano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "danés"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "español de España"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenco"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés canadiense"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés suizo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón occidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocés"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallego"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "griego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandés"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreo"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglés australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés británico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés canadiense"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés estadounidense"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonés"
+ },
+ "km": {
+ "code": "km",
+ "name": "jemer"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazajo"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguís"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kiroundi"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "kivunjo"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedonio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayo"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratí"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masái"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavo"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele septentrional"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandés"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalí"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk noruego"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastún"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués de Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugués de Portugal"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabí"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retorrománico"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumano"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruso"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami septentrional"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalí"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sorbio inferior"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorbio superior"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili del Congo"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight del Marruecos Central"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriña"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongano"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeko"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "vasco"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/es-CU.json b/library/intl/resources/language/es-CU.json
new file mode 100644
index 000000000..afeb6b6b4
--- /dev/null
+++ b/library/intl/resources/language/es-CU.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikáans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanés"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán (Suiza)"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemán austríaco"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemán de Suiza"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaiyano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorruso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmal noruego"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabila"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemiro"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarés"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroqui"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chino"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chino simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chino tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "criollo caboverdiano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "criollo mauriciano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "danés"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "español de España"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenco"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés canadiense"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés suizo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón occidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocés"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallego"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "griego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandés"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreo"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglés australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés británico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés canadiense"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés estadounidense"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonés"
+ },
+ "km": {
+ "code": "km",
+ "name": "jemer"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazajo"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguís"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kiroundi"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "kivunjo"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedonio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayo"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratí"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masái"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavo"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele septentrional"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandés"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalí"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk noruego"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastún"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués de Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugués de Portugal"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabí"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retorrománico"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumano"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruso"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami septentrional"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalí"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sorbio inferior"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorbio superior"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili del Congo"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight del Marruecos Central"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriña"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongano"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeko"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "vasco"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/es-DO.json b/library/intl/resources/language/es-DO.json
new file mode 100644
index 000000000..afeb6b6b4
--- /dev/null
+++ b/library/intl/resources/language/es-DO.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikáans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanés"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán (Suiza)"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemán austríaco"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemán de Suiza"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaiyano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorruso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmal noruego"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabila"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemiro"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarés"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroqui"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chino"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chino simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chino tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "criollo caboverdiano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "criollo mauriciano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "danés"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "español de España"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenco"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés canadiense"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés suizo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón occidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocés"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallego"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "griego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandés"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreo"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglés australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés británico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés canadiense"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés estadounidense"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonés"
+ },
+ "km": {
+ "code": "km",
+ "name": "jemer"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazajo"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguís"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kiroundi"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "kivunjo"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedonio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayo"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratí"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masái"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavo"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele septentrional"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandés"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalí"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk noruego"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastún"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués de Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugués de Portugal"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabí"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retorrománico"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumano"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruso"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami septentrional"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalí"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sorbio inferior"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorbio superior"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili del Congo"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight del Marruecos Central"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriña"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongano"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeko"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "vasco"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/es-EC.json b/library/intl/resources/language/es-EC.json
new file mode 100644
index 000000000..afeb6b6b4
--- /dev/null
+++ b/library/intl/resources/language/es-EC.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikáans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanés"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán (Suiza)"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemán austríaco"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemán de Suiza"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaiyano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorruso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmal noruego"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabila"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemiro"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarés"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroqui"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chino"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chino simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chino tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "criollo caboverdiano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "criollo mauriciano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "danés"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "español de España"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenco"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés canadiense"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés suizo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón occidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocés"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallego"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "griego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandés"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreo"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglés australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés británico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés canadiense"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés estadounidense"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonés"
+ },
+ "km": {
+ "code": "km",
+ "name": "jemer"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazajo"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguís"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kiroundi"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "kivunjo"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedonio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayo"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratí"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masái"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavo"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele septentrional"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandés"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalí"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk noruego"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastún"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués de Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugués de Portugal"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabí"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retorrománico"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumano"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruso"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami septentrional"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalí"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sorbio inferior"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorbio superior"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili del Congo"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight del Marruecos Central"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriña"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongano"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeko"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "vasco"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/es-GT.json b/library/intl/resources/language/es-GT.json
new file mode 100644
index 000000000..afeb6b6b4
--- /dev/null
+++ b/library/intl/resources/language/es-GT.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikáans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanés"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán (Suiza)"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemán austríaco"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemán de Suiza"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaiyano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorruso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmal noruego"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabila"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemiro"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarés"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroqui"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chino"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chino simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chino tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "criollo caboverdiano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "criollo mauriciano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "danés"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "español de España"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenco"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés canadiense"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés suizo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón occidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocés"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallego"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "griego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandés"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreo"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglés australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés británico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés canadiense"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés estadounidense"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonés"
+ },
+ "km": {
+ "code": "km",
+ "name": "jemer"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazajo"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguís"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kiroundi"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "kivunjo"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedonio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayo"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratí"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masái"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavo"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele septentrional"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandés"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalí"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk noruego"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastún"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués de Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugués de Portugal"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabí"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retorrománico"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumano"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruso"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami septentrional"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalí"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sorbio inferior"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorbio superior"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili del Congo"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight del Marruecos Central"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriña"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongano"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeko"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "vasco"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/es-HN.json b/library/intl/resources/language/es-HN.json
new file mode 100644
index 000000000..afeb6b6b4
--- /dev/null
+++ b/library/intl/resources/language/es-HN.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikáans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanés"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán (Suiza)"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemán austríaco"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemán de Suiza"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaiyano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorruso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmal noruego"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabila"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemiro"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarés"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroqui"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chino"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chino simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chino tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "criollo caboverdiano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "criollo mauriciano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "danés"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "español de España"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenco"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés canadiense"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés suizo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón occidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocés"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallego"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "griego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandés"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreo"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglés australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés británico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés canadiense"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés estadounidense"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonés"
+ },
+ "km": {
+ "code": "km",
+ "name": "jemer"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazajo"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguís"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kiroundi"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "kivunjo"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedonio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayo"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratí"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masái"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavo"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele septentrional"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandés"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalí"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk noruego"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastún"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués de Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugués de Portugal"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabí"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retorrománico"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumano"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruso"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami septentrional"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalí"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sorbio inferior"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorbio superior"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili del Congo"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight del Marruecos Central"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriña"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongano"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeko"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "vasco"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/es-MX.json b/library/intl/resources/language/es-MX.json
new file mode 100644
index 000000000..5f07c32ac
--- /dev/null
+++ b/library/intl/resources/language/es-MX.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikáans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanés"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemán austríaco"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán suizo"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemán suizo"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "alto sorbio"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaiyano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "bajo sorbio"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorruso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmal noruego"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabilio"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemiro"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarés"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroki"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chino"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chino simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chino tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "criollo caboverdiano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "criollo mauriciano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "danés"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "español de España"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenco"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés canadiense"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés suizo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón occidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocés"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallego"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "griego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandés"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "halenjin"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreo"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglés australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés británico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés canadiense"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés estadounidense"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonés"
+ },
+ "km": {
+ "code": "km",
+ "name": "jemer"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazajo"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguís"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedonio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayo"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratí"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masái"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavo"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandés"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalí"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk noruego"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "panyabí"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastún"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués de Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugués de Portugal"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romanche"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumano"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruso"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami septentrional"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "sindebele"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalí"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili del Congo"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight del Marruecos Central"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight estándar marroquí"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriña"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongano"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeko"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "vasco"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/es-NI.json b/library/intl/resources/language/es-NI.json
new file mode 100644
index 000000000..afeb6b6b4
--- /dev/null
+++ b/library/intl/resources/language/es-NI.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikáans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanés"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán (Suiza)"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemán austríaco"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemán de Suiza"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaiyano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorruso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmal noruego"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabila"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemiro"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarés"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroqui"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chino"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chino simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chino tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "criollo caboverdiano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "criollo mauriciano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "danés"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "español de España"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenco"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés canadiense"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés suizo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón occidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocés"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallego"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "griego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandés"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreo"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglés australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés británico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés canadiense"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés estadounidense"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonés"
+ },
+ "km": {
+ "code": "km",
+ "name": "jemer"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazajo"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguís"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kiroundi"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "kivunjo"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedonio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayo"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratí"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masái"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavo"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele septentrional"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandés"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalí"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk noruego"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastún"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués de Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugués de Portugal"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabí"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retorrománico"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumano"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruso"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami septentrional"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalí"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sorbio inferior"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorbio superior"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili del Congo"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight del Marruecos Central"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriña"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongano"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeko"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "vasco"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/es-PA.json b/library/intl/resources/language/es-PA.json
new file mode 100644
index 000000000..afeb6b6b4
--- /dev/null
+++ b/library/intl/resources/language/es-PA.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikáans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanés"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán (Suiza)"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemán austríaco"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemán de Suiza"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaiyano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorruso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmal noruego"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabila"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemiro"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarés"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroqui"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chino"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chino simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chino tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "criollo caboverdiano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "criollo mauriciano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "danés"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "español de España"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenco"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés canadiense"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés suizo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón occidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocés"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallego"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "griego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandés"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreo"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglés australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés británico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés canadiense"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés estadounidense"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonés"
+ },
+ "km": {
+ "code": "km",
+ "name": "jemer"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazajo"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguís"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kiroundi"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "kivunjo"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedonio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayo"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratí"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masái"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavo"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele septentrional"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandés"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalí"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk noruego"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastún"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués de Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugués de Portugal"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabí"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retorrománico"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumano"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruso"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami septentrional"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalí"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sorbio inferior"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorbio superior"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili del Congo"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight del Marruecos Central"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriña"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongano"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeko"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "vasco"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/es-PE.json b/library/intl/resources/language/es-PE.json
new file mode 100644
index 000000000..afeb6b6b4
--- /dev/null
+++ b/library/intl/resources/language/es-PE.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikáans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanés"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán (Suiza)"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemán austríaco"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemán de Suiza"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaiyano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorruso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmal noruego"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabila"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemiro"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarés"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroqui"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chino"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chino simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chino tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "criollo caboverdiano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "criollo mauriciano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "danés"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "español de España"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenco"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés canadiense"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés suizo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón occidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocés"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallego"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "griego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandés"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreo"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglés australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés británico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés canadiense"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés estadounidense"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonés"
+ },
+ "km": {
+ "code": "km",
+ "name": "jemer"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazajo"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguís"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kiroundi"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "kivunjo"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedonio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayo"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratí"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masái"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavo"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele septentrional"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandés"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalí"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk noruego"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastún"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués de Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugués de Portugal"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabí"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retorrománico"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumano"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruso"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami septentrional"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalí"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sorbio inferior"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorbio superior"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili del Congo"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight del Marruecos Central"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriña"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongano"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeko"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "vasco"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/es-PR.json b/library/intl/resources/language/es-PR.json
new file mode 100644
index 000000000..afeb6b6b4
--- /dev/null
+++ b/library/intl/resources/language/es-PR.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikáans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanés"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán (Suiza)"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemán austríaco"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemán de Suiza"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaiyano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorruso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmal noruego"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabila"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemiro"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarés"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroqui"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chino"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chino simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chino tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "criollo caboverdiano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "criollo mauriciano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "danés"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "español de España"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenco"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés canadiense"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés suizo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón occidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocés"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallego"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "griego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandés"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreo"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglés australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés británico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés canadiense"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés estadounidense"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonés"
+ },
+ "km": {
+ "code": "km",
+ "name": "jemer"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazajo"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguís"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kiroundi"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "kivunjo"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedonio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayo"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratí"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masái"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavo"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele septentrional"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandés"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalí"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk noruego"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastún"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués de Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugués de Portugal"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabí"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retorrománico"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumano"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruso"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami septentrional"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalí"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sorbio inferior"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorbio superior"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili del Congo"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight del Marruecos Central"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriña"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongano"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeko"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "vasco"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/es-PY.json b/library/intl/resources/language/es-PY.json
new file mode 100644
index 000000000..afeb6b6b4
--- /dev/null
+++ b/library/intl/resources/language/es-PY.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikáans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanés"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán (Suiza)"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemán austríaco"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemán de Suiza"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaiyano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorruso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmal noruego"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabila"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemiro"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarés"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroqui"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chino"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chino simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chino tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "criollo caboverdiano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "criollo mauriciano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "danés"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "español de España"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenco"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés canadiense"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés suizo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón occidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocés"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallego"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "griego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandés"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreo"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglés australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés británico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés canadiense"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés estadounidense"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonés"
+ },
+ "km": {
+ "code": "km",
+ "name": "jemer"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazajo"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguís"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kiroundi"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "kivunjo"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedonio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayo"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratí"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masái"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavo"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele septentrional"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandés"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalí"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk noruego"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastún"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués de Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugués de Portugal"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabí"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retorrománico"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumano"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruso"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami septentrional"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalí"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sorbio inferior"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorbio superior"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili del Congo"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight del Marruecos Central"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriña"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongano"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeko"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "vasco"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/es-SV.json b/library/intl/resources/language/es-SV.json
new file mode 100644
index 000000000..afeb6b6b4
--- /dev/null
+++ b/library/intl/resources/language/es-SV.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikáans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanés"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán (Suiza)"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemán austríaco"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemán de Suiza"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaiyano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorruso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmal noruego"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabila"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemiro"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarés"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroqui"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chino"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chino simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chino tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "criollo caboverdiano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "criollo mauriciano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "danés"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "español de España"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenco"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés canadiense"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés suizo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón occidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocés"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallego"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "griego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandés"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreo"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglés australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés británico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés canadiense"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés estadounidense"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonés"
+ },
+ "km": {
+ "code": "km",
+ "name": "jemer"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazajo"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguís"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kiroundi"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "kivunjo"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedonio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayo"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratí"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masái"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavo"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele septentrional"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandés"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalí"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk noruego"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastún"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués de Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugués de Portugal"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabí"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retorrománico"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumano"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruso"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami septentrional"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalí"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sorbio inferior"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorbio superior"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili del Congo"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight del Marruecos Central"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriña"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongano"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeko"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "vasco"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/es-US.json b/library/intl/resources/language/es-US.json
new file mode 100644
index 000000000..afeb6b6b4
--- /dev/null
+++ b/library/intl/resources/language/es-US.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikáans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanés"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán (Suiza)"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemán austríaco"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemán de Suiza"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaiyano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorruso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmal noruego"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabila"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemiro"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarés"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroqui"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chino"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chino simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chino tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "criollo caboverdiano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "criollo mauriciano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "danés"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "español de España"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenco"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés canadiense"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés suizo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón occidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocés"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallego"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "griego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandés"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreo"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglés australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés británico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés canadiense"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés estadounidense"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonés"
+ },
+ "km": {
+ "code": "km",
+ "name": "jemer"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazajo"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguís"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kiroundi"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "kivunjo"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedonio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayo"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratí"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masái"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavo"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele septentrional"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandés"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalí"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk noruego"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastún"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués de Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugués de Portugal"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabí"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retorrománico"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumano"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruso"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami septentrional"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalí"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sorbio inferior"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorbio superior"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili del Congo"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight del Marruecos Central"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriña"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongano"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeko"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "vasco"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/es-UY.json b/library/intl/resources/language/es-UY.json
new file mode 100644
index 000000000..afeb6b6b4
--- /dev/null
+++ b/library/intl/resources/language/es-UY.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikáans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanés"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán (Suiza)"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemán austríaco"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemán de Suiza"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaiyano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorruso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmal noruego"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabila"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemiro"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarés"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroqui"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chino"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chino simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chino tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "criollo caboverdiano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "criollo mauriciano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "danés"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "español de España"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenco"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés canadiense"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés suizo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón occidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocés"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallego"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "griego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandés"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreo"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglés australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés británico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés canadiense"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés estadounidense"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonés"
+ },
+ "km": {
+ "code": "km",
+ "name": "jemer"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazajo"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguís"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kiroundi"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "kivunjo"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedonio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayo"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratí"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masái"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavo"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele septentrional"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandés"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalí"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk noruego"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastún"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués de Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugués de Portugal"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabí"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retorrománico"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumano"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruso"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami septentrional"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalí"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sorbio inferior"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorbio superior"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili del Congo"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight del Marruecos Central"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriña"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongano"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeko"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "vasco"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/es-VE.json b/library/intl/resources/language/es-VE.json
new file mode 100644
index 000000000..afeb6b6b4
--- /dev/null
+++ b/library/intl/resources/language/es-VE.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikáans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanés"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán (Suiza)"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemán austríaco"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemán de Suiza"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaiyano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorruso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmal noruego"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabila"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemiro"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarés"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroqui"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chino"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chino simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chino tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "criollo caboverdiano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "criollo mauriciano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "danés"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "español de España"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenco"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés canadiense"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés suizo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón occidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocés"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallego"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "griego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandés"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreo"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglés australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés británico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés canadiense"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés estadounidense"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonés"
+ },
+ "km": {
+ "code": "km",
+ "name": "jemer"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazajo"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguís"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kiroundi"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "kivunjo"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedonio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayo"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratí"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masái"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavo"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele septentrional"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandés"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalí"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk noruego"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastún"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués de Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugués de Portugal"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabí"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retorrománico"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumano"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruso"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami septentrional"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalí"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sorbio inferior"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorbio superior"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili del Congo"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight del Marruecos Central"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriña"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongano"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeko"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "vasco"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/es.json b/library/intl/resources/language/es.json
new file mode 100644
index 000000000..74e16ddb2
--- /dev/null
+++ b/library/intl/resources/language/es.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikáans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanés"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemán austríaco"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán suizo"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemán de Suiza"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerí"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorruso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmal noruego"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabila"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemiro"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarés"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroqui"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chino"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chino simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chino tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "criollo caboverdiano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "criollo mauriciano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "danés"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "español de España"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonio"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "euskera"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenco"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés canadiense"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés suizo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón occidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocés"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "gallego"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "griego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandés"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreo"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglés australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés británico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés canadiense"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés estadounidense"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonés"
+ },
+ "km": {
+ "code": "km",
+ "name": "jemer"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazajo"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirguís"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kiroundi"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "kivunjo"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedonio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayo"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masái"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavo"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele septentrional"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "neerlandés"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalí"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk noruego"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastún"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués de Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugués de Portugal"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabí"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retorrománico"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumano"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruso"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami septentrional"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalí"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sorbio inferior"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorbio superior"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili del Congo"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight del Marruecos Central"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriña"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongano"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeko"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/et.json b/library/intl/resources/language/et.json
new file mode 100644
index 000000000..67b00258f
--- /dev/null
+++ b/library/intl/resources/language/et.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaani"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghemi"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akani"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "alamsorbi"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albaania"
+ },
+ "am": {
+ "code": "am",
+ "name": "amhari"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "araabia"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "araabia (tänapäevane)"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armeenia"
+ },
+ "az": {
+ "code": "az",
+ "name": "aserbaidžaani"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "astuuria"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "baski"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "my": {
+ "code": "my",
+ "name": "birma"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnia"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretooni"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgaaria"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "cologniani"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "et": {
+ "code": "et",
+ "name": "eesti"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "eve"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "evondo"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flaami"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friuuli"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fulbe"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "fääri"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaeli"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galeegi"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "gruusia"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "grööni"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gudžarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "heebrea"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "hiina"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "hiina (lihtsustatud)"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "hiina (traditsiooniline)"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "es": {
+ "code": "es",
+ "name": "hispaania"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "hispaania (Euroopa)"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "hollandi"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "horvaadi"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "iiri"
+ },
+ "id": {
+ "code": "id",
+ "name": "indoneesia"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglise"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglise (Briti)"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglise (USA)"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandi"
+ },
+ "it": {
+ "code": "it",
+ "name": "itaalia"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "jaapani"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "joruba"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabiili"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "kabuverdianu"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kaljenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannada"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kasahhi"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kašmiiri"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalaani"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Kesk-Maroko tamazighti"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmeeri"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuju"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgiisi"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Kongo suahiili"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "korea"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "el": {
+ "code": "el",
+ "name": "kreeka"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "kõmri"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "lao"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "leedu"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "letseburgi"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "läti"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "läänefriisi"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedoonia"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malagassi"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malai"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malajalami"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "malta"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masai"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Mauritiuse kreoolkeel"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldova"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongoli"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundangi"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepali"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nkole"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norra bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norra nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nueri"
+ },
+ "or": {
+ "code": "or",
+ "name": "oria"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "pandžabi"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "poola"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugali"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugali (Euroopa)"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "prantsuse"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "puštu"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "põhjandebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "põhjasaami"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "pärsia"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retoromaani"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "rootsi"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumeenia"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "de": {
+ "code": "de",
+ "name": "saksa"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "saksa (kõrgsaksa)"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbia"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "si": {
+ "code": "si",
+ "name": "singali"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovaki"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "sloveeni"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somaali"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "soome"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "suahiili"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "suulu"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Å¡ona"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Å¡veitsisaksa"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "da": {
+ "code": "da",
+ "name": "taani"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhiti"
+ },
+ "th": {
+ "code": "th",
+ "name": "tai"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamasikti (Maroko)"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamili"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "taswaqi"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinja"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tiibeti"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonga"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "tšehhi"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "tšerokii"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "türgi"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uiguuri"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukraina"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ungari"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "usbeki"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "be": {
+ "code": "be",
+ "name": "valgevene"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walseri"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "vene"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnami"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "ülemsorbi"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangbeni"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/eu.json b/library/intl/resources/language/eu.json
new file mode 100644
index 000000000..e980e5461
--- /dev/null
+++ b/library/intl/resources/language/eu.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaansa"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghemera"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akanera"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albaniera"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "aleman garaia (Suitza)"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemana"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemana (Suitza)"
+ },
+ "am": {
+ "code": "am",
+ "name": "amharera"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "ankolera"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabiera"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "arabiera moderno estandarra"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armeniera"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asua"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaijanera"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafiera"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambarera"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "behe-sorabiera"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "benera"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalera"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorrusiera"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodoera"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmala (Norvegia)"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosniera"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretoiera"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgariera"
+ },
+ "my": {
+ "code": "my",
+ "name": "burmatarra"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Cabo Verdeko kreola"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chigera"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "da": {
+ "code": "da",
+ "name": "daniera"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embua"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "erromantxera"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "errumaniera"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "errusiera"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "eskoziako gaelikoa"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovakiera"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveniera"
+ },
+ "es": {
+ "code": "es",
+ "name": "espainiera"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "espainiera (Europa)"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperantoa"
+ },
+ "et": {
+ "code": "et",
+ "name": "estoniera"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "euskara"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "eweera"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "faroera"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finlandiera"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flandriera"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "fonyi jolera"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "frantsesa"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisiera"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "gaelikoa"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galesera"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galiziera"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "gandera"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiera"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "goi-sorabiera"
+ },
+ "el": {
+ "code": "el",
+ "name": "greziera"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujaratera"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusiiera"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreera"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindia"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "hungariera"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesiera"
+ },
+ "en": {
+ "code": "en",
+ "name": "ingelesa"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "ingelesa (AEB)"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "iparraldeko ndebeleera"
+ },
+ "se": {
+ "code": "se",
+ "name": "iparraldeko samiera"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandiera"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiera"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japoniera"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabilera"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "kalaallisutera"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjinera"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kambera"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannadera"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kashmirera"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalana"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazakhera"
+ },
+ "km": {
+ "code": "km",
+ "name": "khemerera"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyuera"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgizera"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Kongoko swahilia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "koreera"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiiniera"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro sennia"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "kroaziera"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasiera"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langiera"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosera"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letoniera"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituaniera"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katangera"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luhyera"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "luoera"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxenburgera"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machamera"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meettoera"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makondera"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malagasyera"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalamera"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malaysiera"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltera"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathera"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Maroko erdialdeko tamazighta"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masaiera"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Mauritaniako kreolera"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "mazedoniera"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meruera"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongoliera"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mudangera"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "namera"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "nederlandera"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalera"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuerera"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk norvegiera"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriyera"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "paxtuera"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persiera"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "poloniera"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugesa"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugesa (Europa)"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabera"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "romboera"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundiera"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwaera"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburuera"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sangoera"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sanguera"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "senera"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbiera"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambalera"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shonera"
+ },
+ "si": {
+ "code": "si",
+ "name": "sinhala"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "sogera"
+ },
+ "so": {
+ "code": "so",
+ "name": "somaliera"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "suediera"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhita"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "tagaloga"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taitera"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight estandarra"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamilera"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaqa"
+ },
+ "te": {
+ "code": "te",
+ "name": "teluguera"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "tesoera"
+ },
+ "th": {
+ "code": "th",
+ "name": "thailandiera"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetera"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriñera"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongera"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turkiera"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "txekiera"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "txerokiera"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "txinera"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "txinera soildua"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "txinera tradizionala"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigurrera"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrainera"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdua"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbekera"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "vaiera"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamera"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjoa"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yorubera"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarmera"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zuluera"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ewo.json b/library/intl/resources/language/ewo.json
new file mode 100644
index 000000000..fc4ca1131
--- /dev/null
+++ b/library/intl/resources/language/ewo.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "ǸkÉ”ÌbÉ” akán"
+ },
+ "am": {
+ "code": "am",
+ "name": "ǸkÉ”ÌbÉ” amária"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "ǸkÉ”ÌbÉ” arábia"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "ǸkÉ”ÌbÉ” aúsá"
+ },
+ "be": {
+ "code": "be",
+ "name": "ǸkÉ”ÌbÉ” belarúsian"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "ǸkÉ”ÌbÉ” bÉ›ngalí"
+ },
+ "my": {
+ "code": "my",
+ "name": "ǸkÉ”ÌbÉ” birÉ™mán"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ǸkÉ”ÌbÉ” bulÉ™gárian"
+ },
+ "en": {
+ "code": "en",
+ "name": "ǸkÉ”ÌbÉ” éngÉ™lís"
+ },
+ "it": {
+ "code": "it",
+ "name": "ǸkÉ”ÌbÉ” etáliÉ›n"
+ },
+ "id": {
+ "code": "id",
+ "name": "ǸkÉ”ÌbÉ” É›ndonésian"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "ǹkÉ”ÌbÉ” fÉ›ÌrÉ™sian"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "ǹkÉ”ÌbÉ” fólis"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "ǹkÉ”ÌbÉ” fÉ”tugÉ›Ìs"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "ǸkÉ”ÌbÉ” fulÉ›nsí"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "ǹkÉ”ÌbÉ” funÉ™hábia"
+ },
+ "el": {
+ "code": "el",
+ "name": "ǸkÉ”ÌbÉ” gÉ™lÉ›Ìg"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ǸkÉ”ÌbÉ” hapÉ”Ìn"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ǹkÉ”ÌbÉ” hiÉ›dÉ™nám"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "ǸkÉ”ÌbÉ” hindí"
+ },
+ "km": {
+ "code": "km",
+ "name": "ǸkÉ”ÌbÉ” kÉ™mÉ›Ìr"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "ǸkÉ”ÌbÉ” koréan"
+ },
+ "es": {
+ "code": "es",
+ "name": "ǹkÉ”ÌbÉ” kpÉ™nyá"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "ǸkÉ”ÌbÉ” malÉ›Ìsian"
+ },
+ "de": {
+ "code": "de",
+ "name": "ǸkÉ”ÌbÉ” ndzáman"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "ǹkÉ”ÌbÉ” nefálian"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ǸkÉ”ÌbÉ” nÉ›rÉ™lándía"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Å„kÉ”ÌbÉ” románía"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ǹkÉ”ÌbÉ” rúsian"
+ },
+ "so": {
+ "code": "so",
+ "name": "ǹkÉ”ÌbÉ” somália"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "ǹkÉ”ÌbÉ” suwÉ›Ìd"
+ },
+ "th": {
+ "code": "th",
+ "name": "ǹkÉ”ÌbÉ” táilan"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "ǹkÉ”ÌbÉ” tamíl"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "ǸkÉ”ÌbÉ” tsainís"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ǸkÉ”ÌbÉ” tsÉ›Ìg"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "ǹkÉ”ÌbÉ” túrÉ™ki"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ǹkÉ”ÌbÉ” ukelénia"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ǸkÉ”ÌbÉ” ungárían"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ǹkÉ”ÌbÉ” urudú"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ǹkÉ”ÌbÉ” yorúba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "ǹkÉ”ÌbÉ” zulú"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/fa-AF.json b/library/intl/resources/language/fa-AF.json
new file mode 100644
index 000000000..1327eea2f
--- /dev/null
+++ b/library/intl/resources/language/fa-AF.json
@@ -0,0 +1,738 @@
+{
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "آستوری"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "آسو"
+ },
+ "af": {
+ "code": "af",
+ "name": "Ø¢Ùریکانس"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "آکان"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "آگیم"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "آلبانیایی"
+ },
+ "de": {
+ "code": "de",
+ "name": "آلمانی"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "آلمانی اتریش"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "آلمانی سوئیسی"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "آلمانی علیای سوئیس"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "آمازیغی اطلس مرکزی"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "آمازیغی معیار مراکش"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "آیرلندی"
+ },
+ "is": {
+ "code": "is",
+ "name": "آیسلندی"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "اردو"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "ارمنی"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "ازبکی"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "اسپانیایی اروپا"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "اسپانیایی مکزیک"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "اسپرانتو"
+ },
+ "et": {
+ "code": "et",
+ "name": "استونیایی"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "اسلواکی"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "اسلووینیایی"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "امبو"
+ },
+ "am": {
+ "code": "am",
+ "name": "امهری"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "انده‌بله‌ای شمالی"
+ },
+ "id": {
+ "code": "id",
+ "name": "اندونیزیایی"
+ },
+ "en": {
+ "code": "en",
+ "name": "انگلیسی"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "انگلیسی استرالیا"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "انگلیسی امریکا"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "انگلیسی بریتانیا"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "انگلیسی کانادا"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "اواندو"
+ },
+ "or": {
+ "code": "or",
+ "name": "اوریه‌ای"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "اوکراینی"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "اوه‌ای"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "اویغوری"
+ },
+ "it": {
+ "code": "it",
+ "name": "ایتالوی"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "باسایی"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "باسکی"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "باÙیایی"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "بامبارایی"
+ },
+ "br": {
+ "code": "br",
+ "name": "برتانیایی"
+ },
+ "my": {
+ "code": "my",
+ "name": "برمه‌ای"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "بلغاری"
+ },
+ "be": {
+ "code": "be",
+ "name": "بلوروسی"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "بنایی"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "بنگالی"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "بودویی"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "بوسنیایی"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "بوکسمال نروژی"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "پرتغالی اروپا"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "پرتغالی برزیل"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "پرتگالی"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "پشتو"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "پنجابی"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "پولندی"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "تاچل‌هیت"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "تامیلی"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "تایتا"
+ },
+ "th": {
+ "code": "th",
+ "name": "تایلندی"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "تبتی"
+ },
+ "az": {
+ "code": "az",
+ "name": "ترکی آذربایجانی"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "ترکی استانبولی"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "تسواکی"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "تسویی"
+ },
+ "te": {
+ "code": "te",
+ "name": "تلوگویی"
+ },
+ "to": {
+ "code": "to",
+ "name": "تونگایی"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "تیگرینیایی"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "جاپانی"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "جونخایی"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "چروکیایی"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "چکی"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "چیگا"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "چینی"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "چینی ساده‌شده"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "چینی سنتی"
+ },
+ "km": {
+ "code": "km",
+ "name": "خمری"
+ },
+ "da": {
+ "code": "da",
+ "name": "دانمارکی"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "دری"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "دیولا Ùونی"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "روایی"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "روسی"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "رومانش"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "رومانیایی"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "رومبویی"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "روندیایی"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "زرما"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "زولویی"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "سامبورو"
+ },
+ "se": {
+ "code": "se",
+ "name": "سامی شمالی"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "سانگو"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "سانگویی"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "سنا"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "سواحلی"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "سواحلی کنگویی"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "سوگایی"
+ },
+ "so": {
+ "code": "so",
+ "name": "سومالیایی"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "سویدنی"
+ },
+ "si": {
+ "code": "si",
+ "name": "سینهالی"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "شامبالا"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "شونایی"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "صربی"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "صÙربی سÙÙ„ÛŒ"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "صÙربی علیا"
+ },
+ "he": {
+ "code": "he",
+ "name": "عبری"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "عربی"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "عربی رسمی"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Ùارویی"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Ùرانسوی"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Ùرانسوی سوئیس"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Ùرانسوی کانادا"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Ùریزی غربی"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Ùریولیایی"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Ùلمنگی"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Ùنلندی"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Ùولایی"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Ùیلیپینی"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "قبایلی"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "قرغزی"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "قزاقی"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "کابووردیانو"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "کاتالان"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "کالنجین"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "کامبایی"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "کاناده‌ای"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "کروشیایی"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "کشمیری"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "کوازیو"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "کوجراچینی"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "کوریایی"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "کویرابورا سنی"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "کیکویویی"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "گالیسیایی"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "گاندایی"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "گجراتی"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "گرجی"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "گرینلندی"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "گوسی"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "گیلی اسکاتلندی"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "لانگی"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "لائوسی"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "لتونیایی"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "لوباییâ€Ú©Ø§ØªØ§Ù†Ú¯Ø§"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "لوگزامبورگی"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "لویا"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "لوئویی"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "لیتوانیایی"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "لینگالا"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "ماچامه‌ای"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "ماسایی"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "ماکوا متو"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "ماکونده"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "مالاگاسیایی"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "مالایالامی"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "مالایی"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "مالتی"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "ماندانگی"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "مجاری"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "مراتی"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "مرویی"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "مغلی"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "مقدونی"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "موریسین"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "مولداویایی"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "نامایی"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "نرس جدید نروژی"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "نگومبا"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "نویر"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "نیانکوله‌ای"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "نیپالی"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "هالندی"
+ },
+ "es": {
+ "code": "es",
+ "name": "هسپانوی"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "هندی"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "هوسیایی"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "ونجو"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "ویایی"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ویتنامی"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "ویلزی"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "یوروبایی"
+ },
+ "el": {
+ "code": "el",
+ "name": "یونانی"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/fa.json b/library/intl/resources/language/fa.json
new file mode 100644
index 000000000..a09658ef2
--- /dev/null
+++ b/library/intl/resources/language/fa.json
@@ -0,0 +1,738 @@
+{
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "آستوری"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "آسو"
+ },
+ "af": {
+ "code": "af",
+ "name": "Ø¢Ùریکانس"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "آکان"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "آگیم"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "آلبانیایی"
+ },
+ "de": {
+ "code": "de",
+ "name": "آلمانی"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "آلمانی اتریش"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "آلمانی سوئیسی"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "آلمانی علیای سوئیس"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "آمازیغی اطلس مرکزی"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "آمازیغی معیار مراکش"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "اردو"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "ارمنی"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "ازبکی"
+ },
+ "es": {
+ "code": "es",
+ "name": "اسپانیایی"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "اسپانیایی اروپا"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "اسپانیایی مکزیک"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "اسپرانتو"
+ },
+ "et": {
+ "code": "et",
+ "name": "استونیایی"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "اسلواکی"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "اسلووینیایی"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "امبو"
+ },
+ "am": {
+ "code": "am",
+ "name": "امهری"
+ },
+ "id": {
+ "code": "id",
+ "name": "اندونزیایی"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "انده‌بله‌ای شمالی"
+ },
+ "en": {
+ "code": "en",
+ "name": "انگلیسی"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "انگلیسی استرالیا"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "انگلیسی امریکا"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "انگلیسی بریتانیا"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "انگلیسی کانادا"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "اواندو"
+ },
+ "or": {
+ "code": "or",
+ "name": "اوریه‌ای"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "اوکراینی"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "اوه‌ای"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "اویغوری"
+ },
+ "it": {
+ "code": "it",
+ "name": "ایتالیایی"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "ایرلندی"
+ },
+ "is": {
+ "code": "is",
+ "name": "ایسلندی"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "باسایی"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "باسکی"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "باÙیایی"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "بامبارایی"
+ },
+ "br": {
+ "code": "br",
+ "name": "برتانیایی"
+ },
+ "my": {
+ "code": "my",
+ "name": "برمه‌ای"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "بلغاری"
+ },
+ "be": {
+ "code": "be",
+ "name": "بلوروسی"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "بنایی"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "بنگالی"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "بودویی"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "بوسنیایی"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "بوکسمال نروژی"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "پرتغالی"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "پرتغالی اروپا"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "پرتغالی برزیل"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "پشتو"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "پنجابی"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "تاچل‌هیت"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "تامیلی"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "تایتا"
+ },
+ "th": {
+ "code": "th",
+ "name": "تایلندی"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "تبتی"
+ },
+ "az": {
+ "code": "az",
+ "name": "ترکی آذربایجانی"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "ترکی استانبولی"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "تسواکی"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "تسویی"
+ },
+ "te": {
+ "code": "te",
+ "name": "تلوگویی"
+ },
+ "to": {
+ "code": "to",
+ "name": "تونگایی"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "تیگرینیایی"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "جونخایی"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "چروکیایی"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "چکی"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "چیگا"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "چینی"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "چینی ساده‌شده"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "چینی سنتی"
+ },
+ "km": {
+ "code": "km",
+ "name": "خمری"
+ },
+ "da": {
+ "code": "da",
+ "name": "دانمارکی"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "دیولا Ùونی"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "روایی"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "روسی"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "رومانش"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "رومانیایی"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "رومبویی"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "روندیایی"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "زرما"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "زولویی"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ژاپنی"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "سامبورو"
+ },
+ "se": {
+ "code": "se",
+ "name": "سامی شمالی"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "سانگو"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "سانگویی"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "سنا"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "سواحلی"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "سواحلی کنگویی"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "سوئدی"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "سوگایی"
+ },
+ "so": {
+ "code": "so",
+ "name": "سومالیایی"
+ },
+ "si": {
+ "code": "si",
+ "name": "سینهالی"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "شامبالا"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "شونایی"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "صربی"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "صÙربی سÙÙ„ÛŒ"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "صÙربی علیا"
+ },
+ "he": {
+ "code": "he",
+ "name": "عبری"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "عربی"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "عربی رسمی"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Ùارسی"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Ùارویی"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Ùرانسوی"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Ùرانسوی سوئیس"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Ùرانسوی کانادا"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Ùریزی غربی"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Ùریولیایی"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Ùلمنگی"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Ùنلاندی"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Ùولایی"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Ùیلیپینی"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "قبایلی"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "قرقیزی"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "قزاقی"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "کابووردیانو"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "کاتالان"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "کالنجین"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "کامبایی"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "کاناده‌ای"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "کروات"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "کره‌ای"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "کشمیری"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "کوازیو"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "کوجراچینی"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "کویرابورا سنی"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "کیکویویی"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "گالیسیایی"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "گاندایی"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "گجراتی"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "گرجی"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "گرینلندی"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "گوسی"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "گیلی اسکاتلندی"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "لائوسی"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "لانگی"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "لتونیایی"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "لوئویی"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "لوباییâ€Ú©Ø§ØªØ§Ù†Ú¯Ø§"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "لوگزامبورگی"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "لویا"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "لهستانی"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "لیتوانیایی"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "لینگالا"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "ماچامه‌ای"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "ماسایی"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "ماکوا متو"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "ماکونده"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "مالاگاسیایی"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "مالایالامی"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "مالایی"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "مالتی"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "ماندانگی"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "مجاری"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "مراتی"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "مرویی"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "مغولی"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "مقدونی"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "موریسین"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "مولداویایی"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "نامایی"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "نپالی"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "نرس جدید نروژی"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "نگومبا"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "نویر"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "نیانکوله‌ای"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "ونجو"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "ویایی"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ویتنامی"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "ویلزی"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "هلندی"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "هندی"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "هوسیایی"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "یوروبایی"
+ },
+ "el": {
+ "code": "el",
+ "name": "یونانی"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ff.json b/library/intl/resources/language/ff.json
new file mode 100644
index 000000000..bf5e4df7f
--- /dev/null
+++ b/library/intl/resources/language/ff.json
@@ -0,0 +1,738 @@
+{
+ "ar": {
+ "code": "ar",
+ "name": "Aarabeere"
+ },
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akaan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amarik"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "be": {
+ "code": "be",
+ "name": "Belaruuse"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengali"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgariire"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burmeese"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Cekkere"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Dacceere"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "de": {
+ "code": "de",
+ "name": "Docceere"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "id": {
+ "code": "id",
+ "name": "Endonesiire"
+ },
+ "en": {
+ "code": "en",
+ "name": "Engeleere"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "es": {
+ "code": "es",
+ "name": "Español"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Farayseere"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "el": {
+ "code": "el",
+ "name": "Gerke"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hawsaŋkoore"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hinndi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hongariire"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "it": {
+ "code": "it",
+ "name": "Italiyeere"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kemeere"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Koreere"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Malayeere"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepaaleere"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Perseere"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Poloneere"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Pulaar"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Punjabeere"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Purtugeere"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Riis"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Romaneere"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Saponeere"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Sinuwaare"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somalii"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Suluŋkoore"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Sweedeere"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "th": {
+ "code": "th",
+ "name": "Taay"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Turkeere"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukereneere"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Wiyetnameere"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yorrubaa"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/fi.json b/library/intl/resources/language/fi.json
new file mode 100644
index 000000000..44434b238
--- /dev/null
+++ b/library/intl/resources/language/fi.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "alasorbi"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albania"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "amerikanenglanti"
+ },
+ "am": {
+ "code": "am",
+ "name": "amhara"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabia"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenia"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturia"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "australianenglanti"
+ },
+ "az": {
+ "code": "az",
+ "name": "azeri"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "baski"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnia"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "brasilianportugali"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretoni"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "britannianenglanti"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgaria"
+ },
+ "my": {
+ "code": "my",
+ "name": "burma"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokee"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "djerma"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "en": {
+ "code": "en",
+ "name": "englanti"
+ },
+ "es": {
+ "code": "es",
+ "name": "espanja"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "espanjanespanja"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "farsi"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flaami"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friuli"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fulani"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "fääri"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaeli"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galicia"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgia"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gudžarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "heprea"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "hollanti"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "iiri"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesia"
+ },
+ "is": {
+ "code": "is",
+ "name": "islanti"
+ },
+ "it": {
+ "code": "it",
+ "name": "italia"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "itävallansaksa"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japani"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "joruba"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabyyli"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "kanadanenglanti"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "kanadanranska"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannada"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "kapverdenkreoli"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kašmiri"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalaani"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "katanganluba"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazakki"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "keskiatlaksentamazight"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmer"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "kiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "kiina"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuju"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "kingwana"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgiisi"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "korea"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "el": {
+ "code": "el",
+ "name": "kreikka"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "kroatia"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "kymri"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "lango"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "latvia"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "liettua"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luhya"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburg"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "länsifriisi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "maasai"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedonia"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makua-meetto"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malagassi"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malaiji"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malajalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "malta"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathi"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "meksikonespanja"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldova"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongoli"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepali"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norjan bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norjan nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "orija"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "pandžabi"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "paštu"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "perinteinen kiina"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "pohjois-ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "pohjoissaame"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugali"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugalinportugali"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "puola"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "ranska"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retoromaani"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "romania"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "ruotsi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "de": {
+ "code": "de",
+ "name": "saksa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbia"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "si": {
+ "code": "si",
+ "name": "sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovakki"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "sloveeni"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somali"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Å¡ona"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "suomi"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "sveitsinranska"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "sveitsinsaksa"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "sveitsinyläsaksa"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamili"
+ },
+ "da": {
+ "code": "da",
+ "name": "tanska"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tašelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "thai"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinja"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tiibet"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonga"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "tšekki"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turkki"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uiguuri"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukraina"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "unkari"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbekki"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "vakioitu tamazight"
+ },
+ "be": {
+ "code": "be",
+ "name": "valkovenäjä"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "venäjä"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnam"
+ },
+ "et": {
+ "code": "et",
+ "name": "viro"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "yksinkertaistettu kiina"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "yleisarabia"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "yläsorbi"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/fil.json b/library/intl/resources/language/fil.json
new file mode 100644
index 000000000..494145b3e
--- /dev/null
+++ b/library/intl/resources/language/fil.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amharic"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arabe"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "be": {
+ "code": "be",
+ "name": "Belarusian"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengali"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Brazilian Portuguese"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgarian"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burmese"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Canadian French"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Chinese"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Czech"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Dutch"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "European Portuguese"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "European Spanish"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Flemish"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "French"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "de": {
+ "code": "de",
+ "name": "German"
+ },
+ "el": {
+ "code": "el",
+ "name": "Greek"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hungarian"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indonesian"
+ },
+ "en": {
+ "code": "en",
+ "name": "Ingles"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Ingles (UK)"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "Ingles (US)"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Ingles ng Australya"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "Ingles sa Canada"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "it": {
+ "code": "it",
+ "name": "Italian"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japanese"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "km": {
+ "code": "km",
+ "name": "Khmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kirghiz"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Korean"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Malay"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Mexican Spanish"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "Modernong Karaniwang Arabe"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "Moldavian"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepali"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmal"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Persian"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Polish"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portuges"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Punjabi"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Romanian"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Russian"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scots Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "Simplified Chinese"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somali"
+ },
+ "es": {
+ "code": "es",
+ "name": "Spanish"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Swahili (Congo)"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Swedish"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Swiss French"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Tamazight ng Gitnang Atlas"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "Thai"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Turkish"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukranian"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vietnamese"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/fo.json b/library/intl/resources/language/fo.json
new file mode 100644
index 000000000..c9a158e2a
--- /dev/null
+++ b/library/intl/resources/language/fo.json
@@ -0,0 +1,738 @@
+{
+ "ps": {
+ "code": "ps",
+ "name": "afghanskt"
+ },
+ "af": {
+ "code": "af",
+ "name": "afríska"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanskt"
+ },
+ "am": {
+ "code": "am",
+ "name": "amhariskt"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabiskt"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenskt"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu (Tanzania)"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaijaniskt"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "baskiskt"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena (Tanzania)"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengaliskt"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosniskt"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretonskt"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgarskt"
+ },
+ "my": {
+ "code": "my",
+ "name": "burmesiskt"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "da": {
+ "code": "da",
+ "name": "danskt"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "en": {
+ "code": "en",
+ "name": "enskt"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estlendskt"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipiniskt"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finskt"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "franskt"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "føroyskt"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galisiskt"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiskt"
+ },
+ "el": {
+ "code": "el",
+ "name": "grikiskt"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujariti"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "haussa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebraiskt"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "hollendskt"
+ },
+ "be": {
+ "code": "be",
+ "name": "hvitarussiskt"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesiskt"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "írskt"
+ },
+ "is": {
+ "code": "is",
+ "name": "íslendskt"
+ },
+ "it": {
+ "code": "it",
+ "name": "italskt"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japanskt"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "km": {
+ "code": "km",
+ "name": "kambodjanskt"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannada"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "kapverdiskt"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kashmiriskt"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalanskt"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazakiskt"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "kekkiskt"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "kiembu"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "kinesiskt"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgisikt"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "koreanskt"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "kroatiskt"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laotiskt"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "latviskt"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "litavskt"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgiskt"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedonskt"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malagasiskt"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malajiskt"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltesiskt"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathiskt"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongoliskt"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalskt"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norskt bokmál"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nýnorskt"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "olulujia"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persiskt"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polskt"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugisiskt"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabiskt"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romansh"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "romanskt"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "russiskt"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbiskt"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "sinhalesiskt"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "skotskt gæliskt"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovakiskt"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "slovenskt"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somaliskt"
+ },
+ "es": {
+ "code": "es",
+ "name": "spanskt"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "sulu"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "svenskt"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamilskt"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugiskt"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "thailendskt"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetanskt"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonganskt"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turkiskt"
+ },
+ "de": {
+ "code": "de",
+ "name": "týskt"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uighur"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrainskt"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ungarskt"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbekiskt"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "valisiskt"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "vestfrisikt"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamesiskt"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/fr-CA.json b/library/intl/resources/language/fr-CA.json
new file mode 100644
index 000000000..7dbc873a3
--- /dev/null
+++ b/library/intl/resources/language/fr-CA.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanais"
+ },
+ "de": {
+ "code": "de",
+ "name": "allemand"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "allemand autrichien"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "allemand suisse"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "amazighe standard marocain"
+ },
+ "am": {
+ "code": "am",
+ "name": "amharique"
+ },
+ "en": {
+ "code": "en",
+ "name": "anglais"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "anglais américain"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "anglais australien"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "anglais britannique"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "anglais canadien"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "arabe standard moderne"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "arménien"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "assou"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturien"
+ },
+ "az": {
+ "code": "az",
+ "name": "azéri"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "bas-sorabe"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "basque"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "bassa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "béna"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "be": {
+ "code": "be",
+ "name": "biélorusse"
+ },
+ "my": {
+ "code": "my",
+ "name": "birman"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosniaque"
+ },
+ "br": {
+ "code": "br",
+ "name": "breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgare"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "capverdien"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalan"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "chambala"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokee"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chinois"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chinois simplifié"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chinois traditionnel"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "chleuh"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalais"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coréen"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "créole mauricien"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croate"
+ },
+ "da": {
+ "code": "da",
+ "name": "danois"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "diola-fogny"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embou"
+ },
+ "es": {
+ "code": "es",
+ "name": "espagnol"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "espagnol ibérique"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "espagnol mexicain"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "espéranto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonien"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "éwé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "éwondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "féroïen"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finnois"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamand"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "français"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "français canadien"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "français suisse"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "francique ripuaire"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "frioulan"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frison"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélique écossais"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galicien"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "gallois"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "géorgien"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "goudjarâtî"
+ },
+ "el": {
+ "code": "el",
+ "name": "grec"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandais"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "haoussa"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "haut-sorabe"
+ },
+ "he": {
+ "code": "he",
+ "name": "hébreu"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "hongrois"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonésien"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandais"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandais"
+ },
+ "it": {
+ "code": "it",
+ "name": "italien"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonais"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabyle"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazakh"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmer"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "kiga"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirghize"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letton"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituanien"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxembourgeois"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macédonien"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malais"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltais"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathe"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "merou"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldave"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndébélé du Nord"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "néerlandais"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "népalais"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norvégien bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norvégien nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankolé"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "oluluyia"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ouïgour"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ourdou"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "ouzbek"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pachto"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "pendjabi"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persan"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "peul"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polonais"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugais"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugais brésilien"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugais ibérique"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romanche"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "roumain"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "roundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "russe"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami du Nord"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sangho"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbe"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovaque"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "slovène"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somali"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "suédois"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "suisse allemand"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili du Congo"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamoul"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "tchèque"
+ },
+ "te": {
+ "code": "te",
+ "name": "télougou"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "thaï"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibétain"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrigna"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongan"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turc"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrainien"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "vaï"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamien"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zoulou"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/fr.json b/library/intl/resources/language/fr.json
new file mode 100644
index 000000000..2459e9df9
--- /dev/null
+++ b/library/intl/resources/language/fr.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanais"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alémanique"
+ },
+ "de": {
+ "code": "de",
+ "name": "allemand"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "allemand autrichien"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "allemand suisse"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "amazighe standard marocain"
+ },
+ "am": {
+ "code": "am",
+ "name": "amharique"
+ },
+ "en": {
+ "code": "en",
+ "name": "anglais"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "anglais américain"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "anglais australien"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "anglais britannique"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "anglais canadien"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "arabe standard moderne"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "arménien"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "assou"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturien"
+ },
+ "az": {
+ "code": "az",
+ "name": "azéri"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "bas-sorabe"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "basque"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "bassa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "béna"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "be": {
+ "code": "be",
+ "name": "biélorusse"
+ },
+ "my": {
+ "code": "my",
+ "name": "birman"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosniaque"
+ },
+ "br": {
+ "code": "br",
+ "name": "breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgare"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "capverdien"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalan"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "chambala"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokee"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chinois"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chinois simplifié"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chinois traditionnel"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "chleuh"
+ },
+ "si": {
+ "code": "si",
+ "name": "cinghalais"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coréen"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "créole mauricien"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croate"
+ },
+ "da": {
+ "code": "da",
+ "name": "danois"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "diola-fogny"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embou"
+ },
+ "es": {
+ "code": "es",
+ "name": "espagnol"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "espagnol d’Europe"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "espagnol mexicain"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "espéranto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonien"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "éwé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "éwondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "féroïen"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finnois"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamand"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "français"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "français canadien"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "français suisse"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "francique ripuaire"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "frioulan"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frison occidental"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélique écossais"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galicien"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "gallois"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "géorgien"
+ },
+ "el": {
+ "code": "el",
+ "name": "grec"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandais"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "haoussa"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "haut-sorabe"
+ },
+ "he": {
+ "code": "he",
+ "name": "hébreu"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "hongrois"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonésien"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandais"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandais"
+ },
+ "it": {
+ "code": "it",
+ "name": "italien"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonais"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabyle"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazakh"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmer"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "kiga"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirghize"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letton"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituanien"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxembourgeois"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macédonien"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malais"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgache"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltais"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathe"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "merou"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldave"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndébélé du Nord"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "néerlandais"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "népalais"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norvégien bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norvégien nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankolé"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "oluluyia"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ouïghour"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ourdou"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "ouzbek"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pachto"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "pendjabi"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persan"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "peul"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polonais"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugais"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugais brésilien"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugais d’Europe"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romanche"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "roumain"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "roundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "russe"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami du Nord"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sangho"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbe"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovaque"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "slovène"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somali"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "suédois"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili du Congo"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamoul"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "tchèque"
+ },
+ "te": {
+ "code": "te",
+ "name": "télougou"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "thaï"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibétain"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrigna"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonguien"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turc"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrainien"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "vaï"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamien"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zoulou"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/fur.json b/library/intl/resources/language/fur.json
new file mode 100644
index 000000000..16c262dc3
--- /dev/null
+++ b/library/intl/resources/language/fur.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanês"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alt todesc de Svuizare"
+ },
+ "am": {
+ "code": "am",
+ "name": "amaric"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arap"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armen"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "basc"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalês"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorùs"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosniac"
+ },
+ "br": {
+ "code": "br",
+ "name": "breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgar"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burmese"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalan"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "cec"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "cinês"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "cinês semplificât"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "cinês tradizionâl"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "corean"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "cravuat"
+ },
+ "da": {
+ "code": "da",
+ "name": "danês"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "he": {
+ "code": "he",
+ "name": "ebraic"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "eston"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "faroês"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipin"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finlandês"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamant"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francês"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francês dal Canade"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francês de Svuizare"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fulah"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "furlan"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "gaelic irlandês"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaelic scozês"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galês"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galizian"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "gjaponês"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "gjeorgjian"
+ },
+ "el": {
+ "code": "el",
+ "name": "grêc"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesian"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglês"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglês australian"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglês britanic"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglês canadês"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "ingles merecan"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandês"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazac"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "leton"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituan"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "lussemburghês"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedon"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malês"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltês"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldâf"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongul"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele setentrionâl"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalês"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norvegjês bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norvegjês nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "olandês"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ongjarês"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persian"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polac"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portughês"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portughês brasilian"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portughês iberic"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabi"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "romen"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "rumanç"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "rus"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami setentrionâl"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serp"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "sinalês"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovac"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "sloven"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somal"
+ },
+ "es": {
+ "code": "es",
+ "name": "spagnûl"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "spagnûl iberic"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "svedês"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "it": {
+ "code": "it",
+ "name": "talian"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telegu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "thai"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "de": {
+ "code": "de",
+ "name": "todesc"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "todesc de Austrie"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turc"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucrain"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbec"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamite"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/fy.json b/library/intl/resources/language/fy.json
new file mode 100644
index 000000000..ccf6d7156
--- /dev/null
+++ b/library/intl/resources/language/fy.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaansk"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albaneesk"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "Amerikaansk Ingelsk"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amhaarsk"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arabysk"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armeensk"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturysk"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Australysk Ingelsk"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbeidzjaansk"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Baskysk"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengaalsk"
+ },
+ "my": {
+ "code": "my",
+ "name": "Birmees"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnysk"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Brazyljaansk Portugees"
+ },
+ "br": {
+ "code": "br",
+ "name": "Bretonsk"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Britsk Ingelsk"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgaarsk"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "da": {
+ "code": "da",
+ "name": "Deensk"
+ },
+ "de": {
+ "code": "de",
+ "name": "Dútsk"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "Eastenryks Dútsk"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estlânsk"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Europees Portugees"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Europeesk Spaansk"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faeröersk"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "Ferienfâldich Sineesk"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipynsk"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finsk"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Frânsk"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulysk"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galisysk"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgysk"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Grienlâns"
+ },
+ "el": {
+ "code": "el",
+ "name": "Gryks"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebreeuwsk"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hongaarsk"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Iersk"
+ },
+ "en": {
+ "code": "en",
+ "name": "Ingelsk"
+ },
+ "it": {
+ "code": "it",
+ "name": "Italiaansk"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japans"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kaapverdysk Creools"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Kanadeesk Frânsk"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "Kanadeesk Ingelsk"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kasjmiri"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Katalaansk"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazachs"
+ },
+ "km": {
+ "code": "km",
+ "name": "Khmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kirgizysk"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Kirundi"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Kölsch"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Koreaansk"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Kroatysk"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Laotiaansk"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Letlâns"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Litouws"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxemburgs"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonysk"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasysk"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Maleis"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltees"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Meksikaansk Spaansk"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "Modern standert Arabysk"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "Moldavysk"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongools"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Nederlânsk"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Nedersorbysk"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepalees"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Ngumba"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Noard-Ndbele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Noard-Samysk"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Noors - Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Noors - Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Odia"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Oeigoers"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Oekraïens"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Oezbeeks"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Oppersorbysk"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pasjtoe"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Perzysk"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Poalsk"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portugeesk"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Punjabi"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Reto-Romaansk"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Roemeensk"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Russysk"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Schotsk Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Servysk"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Sineesk"
+ },
+ "si": {
+ "code": "si",
+ "name": "Singalees"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Sloveensk"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slowaaks"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somalysk"
+ },
+ "es": {
+ "code": "es",
+ "name": "Spaansk"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standert Marokkaanske Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Switsers Dútsk"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Switserse Frânsk"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Switsersk Heechdútsk"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Tamazight (Sintraal-Marokko)"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tashelhiyt"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "Thais"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetaansk"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongaansk"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "Tradisjoneel Sineesk"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Tsjechysk"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Turks"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vietnamees"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Vlaams"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsk"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "West-Frysk"
+ },
+ "be": {
+ "code": "be",
+ "name": "Wyt-Russysk"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "id": {
+ "code": "id",
+ "name": "Yndonezysk"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "is": {
+ "code": "is",
+ "name": "Yslâns"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Zweeds"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ga.json b/library/intl/resources/language/ga.json
new file mode 100644
index 000000000..9133573f5
--- /dev/null
+++ b/library/intl/resources/language/ga.json
@@ -0,0 +1,738 @@
+{
+ "ak": {
+ "code": "ak",
+ "name": "Acáinis"
+ },
+ "af": {
+ "code": "af",
+ "name": "Afracáinis"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Airméinis"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albáinis"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amáiris"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Araibis"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "Araibis Chaighdeánach"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Ard-Ghearmáinis Eilvéiseach"
+ },
+ "az": {
+ "code": "az",
+ "name": "Asarbaiseáinis"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Astúiris"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Bascais"
+ },
+ "be": {
+ "code": "be",
+ "name": "Bealarúisis"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Beangáilis"
+ },
+ "en": {
+ "code": "en",
+ "name": "Béarla"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Béarla Astrálach"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Béarla Briotanach"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "Béarla Ceanadach"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "Béarla Meiriceánach"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Boisnis"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Breatnais"
+ },
+ "br": {
+ "code": "br",
+ "name": "Briotáinis"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgáiris"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burmais"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Caismíris"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Cannadais"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Casaicis"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalóinis"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "km": {
+ "code": "km",
+ "name": "Ciméiris"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Ciocúis"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Cirgisis"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Cóiréis"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Cróitis"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danmhairgis"
+ },
+ "he": {
+ "code": "he",
+ "name": "Eabhrais"
+ },
+ "et": {
+ "code": "et",
+ "name": "Eastóinis"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faróis"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipínis"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Fionlainnis"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Fraincis"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Fraincis Cheanadach"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Fraincis Eilvéiseach"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Freaslainnis Iartharach"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friúilis"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fuláinis"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Gaeilge"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Gaeilge na hAlban"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Gailísis"
+ },
+ "de": {
+ "code": "de",
+ "name": "Gearmáinis"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Gearmáinis Eilvéiseach"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "Gearmáinis Ostarach"
+ },
+ "el": {
+ "code": "el",
+ "name": "Gréigis"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gúisearáitis"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hásais"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hiondúis"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Iarúibis"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indinéisis"
+ },
+ "it": {
+ "code": "it",
+ "name": "Iodáilis"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Ioruais Bokmål"
+ },
+ "is": {
+ "code": "is",
+ "name": "Ãoslainnis"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Laitvis"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Laoisis"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Liongáilis"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Liotuáinis"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Lúba-Cataingis"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Lucsambuirgis"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Lugandais"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macadóinis"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Mailéalaimis"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Malaeis"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagáisis"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Máltais"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Maraitis"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "Moldáivis"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongóilis"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Ndeibéilis an Tuaiscirt"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Neipeailis"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Nua-Ioruais"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oirísis"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Ollainnis"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Paistis"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Peirsis"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Pléimeannais"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Polainnis"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portaingéilis"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Portaingéilis Ibéarach"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Portaingéilis na Brasaíle"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Puinseáibis"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Rómainis"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Rómáinis"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rúindis"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Rúisis"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "se": {
+ "code": "se",
+ "name": "Sáimis Thuaidh"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sangóis"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Seapáinis"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Seicis"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Seirbis"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Seiricis"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Seoinicis"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Seoinis"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Seoirsis"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Sínis"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "Sínis Shimplithe"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "Sínis Thraidisiúnta"
+ },
+ "si": {
+ "code": "si",
+ "name": "Siolóinis"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slóivéinis"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slóvaicis"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somáilis"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Sorbais Ãochtarach"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Sorbais Uachtarach"
+ },
+ "es": {
+ "code": "es",
+ "name": "Spáinnis"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Spáinnis Eorpach"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Spáinnis Mheicsiceach"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Sualainnis"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Súlúis"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Svahaílis"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Svahaílis an Chongó"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamailis"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "th": {
+ "code": "th",
+ "name": "Téalainnis"
+ },
+ "te": {
+ "code": "te",
+ "name": "Teileagúis"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibéidis"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinis"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongais"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Tuircis"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Úcráinis"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uigiúiris"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Úisbéiceastáinis"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Ungáiris"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdúis"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vítneaimis"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarmais"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/gd.json b/library/intl/resources/language/gd.json
new file mode 100644
index 000000000..e774f2691
--- /dev/null
+++ b/library/intl/resources/language/gd.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afraganais"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Airmeinis"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albàinis"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amtharais"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arabais"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Àrd-Ghearmailtis na h-Eilbheise"
+ },
+ "az": {
+ "code": "az",
+ "name": "Asarbaideànais"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Astùrais"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basgais"
+ },
+ "be": {
+ "code": "be",
+ "name": "Bealaruisis"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Beangailis"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "en": {
+ "code": "en",
+ "name": "Beurla"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Beurla Astràilia"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Beurla Bhreatainn"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "Beurla Chanada"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "Beurla na h-Aimeireaga"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Bhiet-Namais"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Bokmål na Nirribhidh"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnais"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breatnais"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgarais"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burmais"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Cairtbheilis"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Caismiris"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Casachais"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalanais"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Cìorgasais"
+ },
+ "km": {
+ "code": "km",
+ "name": "Cmèar"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Coirèanais"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Cròthaisis"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Cuimris"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danmhairgis"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Duitsis"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "he": {
+ "code": "he",
+ "name": "Eabhra"
+ },
+ "it": {
+ "code": "it",
+ "name": "Eadailtis"
+ },
+ "et": {
+ "code": "et",
+ "name": "Eastoinis"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Fàrothais"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Farsaidh"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipinis"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Fionnlannais"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Flannrais"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Fraingis"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Fraingis Chanada"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Fraingis Eilbheiseach"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Frìoslannais Siarach"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friùilis"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Gaeilge"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Gàidhlig"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Gailìsis"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "de": {
+ "code": "de",
+ "name": "Gearmailtis"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Gearmailtis Eilbheiseach"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "Gearmailtis na h-Ostaire"
+ },
+ "el": {
+ "code": "el",
+ "name": "Greugais"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hindis"
+ },
+ "id": {
+ "code": "id",
+ "name": "Innd-Innsis"
+ },
+ "is": {
+ "code": "is",
+ "name": "Innis Tìlis"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Ioruba"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Kirundi"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Kiswahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Kiswahili na Congo"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Laitbheis"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Làtho"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Liotuainis"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Lugsamburgais"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Maasai"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasais"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Malaidhis"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltais"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Masadonais"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "Moldobhais"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolais"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Ndebele Thuathach"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Neapàilis"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "Nuadh-Arabais Stannardach"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Nynorsk na Nirribhidh"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pachtu"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Panjabi"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Pòlainnis"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portagailis"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Portagailis Bhraisileach"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Portagailis Eòrpach"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Romàinis"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Ruisis"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Rumains"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "se": {
+ "code": "se",
+ "name": "Sàmais Thuathach"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Seacais"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Seapanais"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Sèirbis"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Sìnis"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "Sìnis Shimplichte"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "Sìnis Thradaiseanta"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slòbhacais"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slòbhainis"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somàilis"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Sòrbais Ìochdarach"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Sòrbais Uachdarach"
+ },
+ "es": {
+ "code": "es",
+ "name": "Spàinntis"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Spàinntis Eòrpach"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Spàinntis Mheagsagach"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Suainis"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "Tàidh"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Taimilis"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Tamazight Meadhan na h-Atlas"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Tamazight Stannardach Moroco"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibeitis"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongais"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Turcais"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ucràinis"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Ùigiurais"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Ungairis"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Ùrdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Usbagais"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/gl.json b/library/intl/resources/language/gl.json
new file mode 100644
index 000000000..53405511a
--- /dev/null
+++ b/library/intl/resources/language/gl.json
@@ -0,0 +1,738 @@
+{
+ "az": {
+ "code": "az",
+ "name": "acerbaixano"
+ },
+ "af": {
+ "code": "af",
+ "name": "afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akán"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanés"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemán"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemán de austria"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemán suízo"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemán suízo"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "alto sorabio"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe estándar moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "baixo sorabio"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalí"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorruso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretón"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "caboverdiano"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cachemir"
+ },
+ "km": {
+ "code": "km",
+ "name": "cambodiano"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "casaco"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "castelán"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalán"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cheroqui"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chinés"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chinés simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chinés tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalés"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "crioulo mauritano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "dinamarqués"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "español"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "español de México"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estoniano"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "éuscaro"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewé"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "faroés"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finés"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamenco"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francés"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francés canadiano"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francés suízo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisón"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocés"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galego"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galés"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "el": {
+ "code": "el",
+ "name": "grego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandés"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "guxaratiano"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreo"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "holandés"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglés"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglés australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglés británico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglés canadiano"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglés dos Estados Unidos"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ioruba"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandés"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandés"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabile"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannada"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "kiga"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laotiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letón"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgués"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedonio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malabar"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malaio"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgaxe"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltés"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele do norte"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalí"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "noruegués bokmal"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "noruegués nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "paxtún"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugués"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugués brasileiro"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugués europeo"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabi"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "quirguiz"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romanche"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "romanés"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "romanés moldavo"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruso"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami do norte"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalí"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "suahili congolés"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandés"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight de Marrocos estándar"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight marroquí central"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriña"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonganés"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraíno"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdú"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeco"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "xaponés"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "xeorxiano"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulú"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/gsw.json b/library/intl/resources/language/gsw.json
new file mode 100644
index 000000000..07374ed4c
--- /dev/null
+++ b/library/intl/resources/language/gsw.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanisch"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "Amerikanischs Änglisch"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amharisch"
+ },
+ "en": {
+ "code": "en",
+ "name": "Änglisch"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arabisch"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenisch"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Aschturianisch"
+ },
+ "az": {
+ "code": "az",
+ "name": "Aserbaidschanisch"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu (Tanzania)"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Auschtralischs Änglisch"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Baskisch"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena (Tanzania)"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengalisch"
+ },
+ "my": {
+ "code": "my",
+ "name": "Birmanisch"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnisch"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Brasilianischs Portugiisisch"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Britischs Änglisch"
+ },
+ "br": {
+ "code": "br",
+ "name": "Brötoonisch"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgaarisch"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Chineesisch"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dschongkha"
+ },
+ "et": {
+ "code": "et",
+ "name": "Eestnisch"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Eschperanto"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Färöisch"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnisch"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Fläämisch"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Französisch"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Friesisch"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulisch"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Ful"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galizisch"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda-Schpraach"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgisch"
+ },
+ "el": {
+ "code": "el",
+ "name": "Griechisch"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Gröönländisch"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Haussa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebräisch"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hindi"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Ibeerischs Schpanisch"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Iberischs Portugiisisch"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Iirisch"
+ },
+ "is": {
+ "code": "is",
+ "name": "Iisländisch"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indonesisch"
+ },
+ "it": {
+ "code": "it",
+ "name": "Italiänisch"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japanisch"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabylisch"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kambodschanisch"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "Kanadischs Änglisch"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Kanadischs Französisch"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kasachisch"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kaschmirisch"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Katalaanisch"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu-Schpraach"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kirgiisisch"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Koreaanisch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Kroazisch"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Laozisch"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Lettisch"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Litauisch"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo-Schpraach"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxemburgisch"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Madagassisch"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Malaiisch"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltesisch"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Massai-Schpraach"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Mazedonisch"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "Moldawisch"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolisch"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepalesisch"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Niderländisch"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Nidersorbisch"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Nord-Ndebele-Schpraach"
+ },
+ "se": {
+ "code": "se",
+ "name": "Nord-Samisch"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegisch Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegisch Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Obersorbisch"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Olulujia"
+ },
+ "or": {
+ "code": "or",
+ "name": "Orija"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "Öschtriichischs Tüütsch"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Pandschabisch"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Paschtu"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Persisch"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Polnisch"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portugiisisch"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Rätoromanisch"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Rumänisch"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi-Schpraach"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Russisch"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Schhona"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Schottisch-Gäälisch"
+ },
+ "es": {
+ "code": "es",
+ "name": "Schpanisch"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Schwedisch"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Schwiizer Französisch"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Schwiizer Hochtüütsch"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Schwiizertüütsch"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbisch"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "si": {
+ "code": "si",
+ "name": "Singhalesisch"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slowakisch"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slowenisch"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somali"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Suaheli"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamilisch"
+ },
+ "da": {
+ "code": "da",
+ "name": "Tänisch"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "Thailändisch"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibeetisch"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinja"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongaisch"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "Tradizionells Chineesisch"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Tschechisch"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Türkisch"
+ },
+ "de": {
+ "code": "de",
+ "name": "Tüütsch"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uigurisch"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukrainisch"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Ungarisch"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Usbekisch"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai-Schpraach"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "Veräifachts Chineesisch"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vietnamesisch"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Walisisch"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "be": {
+ "code": "be",
+ "name": "Wiissrussisch"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/gu.json b/library/intl/resources/language/gu.json
new file mode 100644
index 000000000..073c814ef
--- /dev/null
+++ b/library/intl/resources/language/gu.json
@@ -0,0 +1,738 @@
+{
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "en": {
+ "code": "en",
+ "name": "અંગà«àª°à«‡àªœà«€"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "અકાન"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "અઘેમ"
+ },
+ "az": {
+ "code": "az",
+ "name": "અàªàª°àª¬à«ˆàªœàª¾àª¨à«€"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "અપà«àªªàª° સોરà«àª¬àª¿àª¯àª¨"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "અમેરિકન અંગà«àª°à«‡àªœà«€"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "અરબી"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "અલà«àª¬à«‡àª¨àª¿àª¯àª¨"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "અસà«"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "અસà«àª¤à«àª°àª¿àª¯àª¨"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "આઇરિશ"
+ },
+ "is": {
+ "code": "is",
+ "name": "આઇસલેનà«àª¡àª¿àª•"
+ },
+ "af": {
+ "code": "af",
+ "name": "આફà«àª°àª¿àª•àª¨à«àª¸"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "આરà«àª®à«‡àª¨àª¿àª¯àª¨"
+ },
+ "it": {
+ "code": "it",
+ "name": "ઇટાલિયન"
+ },
+ "id": {
+ "code": "id",
+ "name": "ઇનà«àª¡à«‹àª¨à«‡àª¶àª¿àª¯àª¨"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ઇવોનà«àª¡à«‹"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ઈવ"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ઉઇગà«àª°"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "ઉàªà«àª¬à«‡àª•"
+ },
+ "or": {
+ "code": "or",
+ "name": "ઉડિયા"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ઉતર દેબેલ"
+ },
+ "se": {
+ "code": "se",
+ "name": "ઉતà«àª¤àª°à«€àª¯ સામી"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ઉરà«àª¦à«‚"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "àªàª®à«àª¬à«"
+ },
+ "am": {
+ "code": "am",
+ "name": "àªàª®à«àª¹àª¾àª°àª¿àª•"
+ },
+ "et": {
+ "code": "et",
+ "name": "àªàª¸à«àªŸà«‹àª¨àª¿àª¯àª¨"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "àªàª¸à«àªªà«‡àª°àª¾àª¨à«àªŸà«‹"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "ઓસà«àªŸà«àª°àª¿àª…ન જરà«àª®àª¨"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "ઓસà«àªŸà«àª°à«‡àª²àª¿àª¯àª¨ અંગà«àª°à«‡àªœà«€"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "કàªàª¾àª–"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "કતલાન"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "કનà«àª¨àª¡"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "કબાઇલ"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "કમà«àª¬àª¾"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "કલાલà«àª²àª¿àª¸à«àª¤"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "કલેજિન"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "કાબà«àªµàª°à«àª¡àª¿àª†àª¨à«"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "કાશà«àª®à«€àª°à«€"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "કિકà«àª¯à«‚"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "કિરà«àª—à«€àª"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "કેનેડિયન અંગà«àª°à«‡àªœà«€"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "કેનેડિયન ફà«àª°à«‡àª‚ચ"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "કોંગો સà«àªµàª¾àª¹àª¿àª²à«€"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "કોયરા ચિનિ"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "કોયરાબોરો સેનà«àª¨à«€"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "કોરિયન"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "કà«àª°à«‹àªàª¶àª¿àª¯àª¨"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "કà«àªµàª¾àª¸àª¿àª“"
+ },
+ "km": {
+ "code": "km",
+ "name": "ખà«àª®à«‡àª°"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ગાંડા"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "ગà«àªœàª°àª¾àª¤à«€"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "ગà«àª¸à«€"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "ગેલિશિયન"
+ },
+ "el": {
+ "code": "el",
+ "name": "ગà«àª°à«€àª•"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "ચાઇનીàª"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "ચિગા"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ચેક"
+ },
+ "de": {
+ "code": "de",
+ "name": "જરà«àª®àª¨"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "જાપાનીàª"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "જોલા-ફોનà«àª¯à«€"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "જà«àª¯à«‹àª°à«àªœàª¿àª…ન"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "àªàª°à«àª®àª¾"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "àªà«àª²à«"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "ટરà«àª•à«€àª¶"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "ટાઇગà«àª°àª¿àª¨àª¿àª¯àª¾"
+ },
+ "to": {
+ "code": "to",
+ "name": "ટોંગાન"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ડચ"
+ },
+ "da": {
+ "code": "da",
+ "name": "ડેનિશ"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "ડà«àªà«‹àª‚ગà«àª–ા"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "તમિલ"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "તસાવાક"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "તિબેટીયન"
+ },
+ "te": {
+ "code": "te",
+ "name": "તેલà«àª—à«"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "તેશીલહિટ"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "તેસો"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "તૈતા"
+ },
+ "th": {
+ "code": "th",
+ "name": "થાઈ"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "નગોમà«àª¬àª¾"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "નમા"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "નિમà«àª¨ સોરà«àª¬àª¿àª¯àª¨"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "નà«àªàª°"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "નેપાળી"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "નૉરà«àªµà«‡àªœà«€àª¯àª¨ નાયનૉરà«àª¸à«àª•"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "નોરà«àªµà«‡àªœà«€àª¯àª¨ બોકમાલ"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "નà«àª¯àª¾àª¨àª•à«‹àª²"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "પંજાબી"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "પશà«àªšàª¿àª®à«€ ફà«àª°àª¿àª¶àª¿àª¯àª¨"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "પશà«àª¤à«‹"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "પારંપરિક ચાઇનીàª"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "પોરà«àªŸà«àª—à«€àª"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "પોલીશ"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "પà«àª°àª®àª¾àª£àª­à«‚ત મોરોકà«àª•àª¨ ટમાàªàª¿àªŸ"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "ફારસી"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "ફિનિશ"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "ફિલિપિનો"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "ફà«àª²àª¾àª¹"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "ફોરિસà«àª¤"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "ફà«àª°àª¿àª¯à«àª²àª¿àª¯àª¾àª¨"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "ફà«àª°à«‡àª¨à«àªš"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "ફà«àª²à«‡àª®àª¿àª¶"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "બંગાળી"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "બફિયા"
+ },
+ "my": {
+ "code": "my",
+ "name": "બરà«àª®à«€àª"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "બલà«àª—ેરિયન"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "બસા"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "બામà«àª¬àª¾àª°àª¾"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "બાસà«àª•"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "બેના"
+ },
+ "be": {
+ "code": "be",
+ "name": "બેલારà«àª¶àª¿àª¯àª¨"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "બોડો"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "બોસà«àª¨àª¿àª¯àª¨"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "બà«àª°àª¾àªàª¿àª²à«€àª¯àª¨ પોરà«àªŸà«àª—à«€àª"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "બà«àª°àª¿àªŸàª¿àª¶ અંગà«àª°à«‡àªœà«€"
+ },
+ "br": {
+ "code": "br",
+ "name": "બà«àª°à«‡àªŸà«‹àª¨"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "મકામે"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "મકોનà«àª¡à«‡"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "મરાઠી"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "મલય"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "મલયાલમ"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "મલાગસી"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "મસાઇ"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "માખà«àªµàª¾-મીટà«àªŸà«"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "માલà«àªŸàª¿àª"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "મà«àª¨àª¡àª¾àª¨à«àª—"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "મેકà«àª¸àª¿àª•àª¨ સà«àªªà«‡àª¨àª¿àª¶"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "મેરà«"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "મેસેડોનિયન"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "મોંગોલિયન"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "મોડરà«àª¨ સà«àªŸàª¾àª¨à«àª¡àª°à«àª¡ અરબી"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "મોરીસà«àª¯à«‡àª¨"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "મોલડાવિયન"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "યà«àª•à«àª°à«‡àª¨àª¿àª¯àª¨"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "યà«àª°à«‹àªªàª¿àª¯àª¨ પોરà«àªŸà«àª—à«€àª"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "યà«àª°à«‹àªªàª¿àª¯àª¨ સà«àªªà«‡àª¨àª¿àª¶"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "યોરૂબા"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "રવા"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "રશિયન"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "રૂનà«àª¦à«€"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "રોમાનિયન"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "રોમાનà«àª¶"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "રોમà«àª¬à«‹"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "લંગી"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "લકà«àªà«‡àª®àª¬àª°à«àª—િશ"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "લાઓથિયન"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "લાતવિયન"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "લિંગાલા"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "લિથà«àª¨àª¿àª¯àª¨"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "લà«àªˆàª¯àª¾"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "લà«àª¯à«àª“"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "લà«àª¯à«‚બા કટાંગા"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "વાઇ"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "વિયેતનામીસ"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "વà«àª¨à«àªœà«‹"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "વેલà«àª¶"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "શમà«àª¬àª¾àª²àª¾"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "શેરોકી"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "શોના"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "સમà«àª¬à«àª°à«"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "સરળીકૃત ચાઇનીàª"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "સરà«àª¬àª¿àª¯àª¨"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "સાંગà«"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "સાંગો"
+ },
+ "si": {
+ "code": "si",
+ "name": "સિંહાલી"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "સેના"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "સેનà«àªŸà«àª°àª² àªàªŸà«àª²àª¸ તામાàªàª¿àª—à«àªŸ"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "સોગા"
+ },
+ "so": {
+ "code": "so",
+ "name": "સોમાલી"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "સà«àª•à«‹àªŸà«àª¸ ગેલિક"
+ },
+ "es": {
+ "code": "es",
+ "name": "સà«àªªà«‡àª¨àª¿àª¶"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "સà«àª²à«‹àªµà«…ક"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "સà«àª²à«‹àªµà«‡àª¨àª¿àª¯àª¨"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "સà«àªµàª¾àª¹àª¿àª²à«€"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "સà«àªµàª¿àª¸ જરà«àª®àª¨"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "સà«àªµàª¿àª¸ ફà«àª°à«‡àª‚ચ"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "સà«àªµàª¿àª¸ હાય જરà«àª®àª¨"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "સà«àªµà«€àª¡àª¿àª¶"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "હંગેરિયન"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "હિનà«àª¦à«€"
+ },
+ "he": {
+ "code": "he",
+ "name": "હીબà«àª°à«"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "હૌસા"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/guz.json b/library/intl/resources/language/guz.json
new file mode 100644
index 000000000..ad2a4f072
--- /dev/null
+++ b/library/intl/resources/language/guz.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Ekegusii"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Kiajemi"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Kiakan"
+ },
+ "am": {
+ "code": "am",
+ "name": "Kiamhari"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Kiarabu"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Kibangla"
+ },
+ "be": {
+ "code": "be",
+ "name": "Kibelarusi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Kibulgaria"
+ },
+ "my": {
+ "code": "my",
+ "name": "Kiburma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Kichecki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Kichina"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Kifaransa"
+ },
+ "el": {
+ "code": "el",
+ "name": "Kigiriki"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Kihausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Kihindi"
+ },
+ "es": {
+ "code": "es",
+ "name": "Kihispania"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Kiholanzi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Kihungari"
+ },
+ "id": {
+ "code": "id",
+ "name": "Kiindonesia"
+ },
+ "it": {
+ "code": "it",
+ "name": "Kiitaliano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Kijapani"
+ },
+ "de": {
+ "code": "de",
+ "name": "Kijerumani"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kikambodia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Kikorea"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Kimalesia"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Kinepali"
+ },
+ "en": {
+ "code": "en",
+ "name": "Kingereza"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Kipolandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Kipunjabi"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Kireno"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Kiromania"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Kirusi"
+ },
+ "so": {
+ "code": "so",
+ "name": "Kisomali"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Kiswidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Kitailandi"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Kitamil"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Kituruki"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Kiukrania"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Kiurdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Kivietinamu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Kiyoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Kizulu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ha.json b/library/intl/resources/language/ha.json
new file mode 100644
index 000000000..3d16f3254
--- /dev/null
+++ b/library/intl/resources/language/ha.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afirkanci"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amharik"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armeniyanci"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijanci"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Bagalike"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Basulabe"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Basulake"
+ },
+ "be": {
+ "code": "be",
+ "name": "Belarusanci"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengali"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosniyanci"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgaranci"
+ },
+ "br": {
+ "code": "br",
+ "name": "Buretananci"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burmanci"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Dan Ailan"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Dan Filifin"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Dan Masedoniya"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Dan\/ʼYar Kabilar Bas"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Dan\/ʼYar Kabilar Kannada"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Dʼan\/ʼYar Kabilar Albaniya"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Dʼan\/ʼYar Kabilar Andalus"
+ },
+ "te": {
+ "code": "te",
+ "name": "Dʼan\/ʼYar Kabilar Telug"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Faransanci"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Fotigis (Burazil)"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "el": {
+ "code": "el",
+ "name": "Girkanci"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Harshen Biyetinam"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Harshen Cak"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Harshen Hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Harshen Hungari"
+ },
+ "id": {
+ "code": "id",
+ "name": "Harshen Indunusiya"
+ },
+ "km": {
+ "code": "km",
+ "name": "Harshen Kimar"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Harshen Koreya"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Harshen Malai"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Harshen Maltis"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Harshen Polan"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Harshen Portugal"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Harshen Sin"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Harshen Suwahili"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Harshen Suwedan"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Harshen Turkiyya"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Harshen Urdu"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Harshen Yukuren"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Harshen Zulu"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Holanci"
+ },
+ "es": {
+ "code": "es",
+ "name": "Ispaniyanci"
+ },
+ "et": {
+ "code": "et",
+ "name": "Istoniyanci"
+ },
+ "it": {
+ "code": "it",
+ "name": "Italiyanci"
+ },
+ "de": {
+ "code": "de",
+ "name": "Jamusanci"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japananci"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Jojiyanci"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Kabilar Maleyalam"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Kabilar Welsh"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Kataloniyanci"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kirgizanci"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Kuroshiyan"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Kʼabilan Firsi"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Kʼabilan Marathi"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Kʼabilan Scots Gaelic"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Laothian"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Larabci"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latbiyanci"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lituweniyanci"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepali"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriyanci"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Parisanci"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashtanci"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Punjabi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Rashanci"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Romaniyanci"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Sabiyan"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhalanci"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somali"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "Thai"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigriyanci"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "en": {
+ "code": "en",
+ "name": "Turanci"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Ugiranci"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "he": {
+ "code": "he",
+ "name": "Yahudanci"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yarbanci"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Yaren Kasar Norway"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Yaren Kasar Portugal"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Yaren mutanen Finland"
+ },
+ "is": {
+ "code": "is",
+ "name": "Yaren mutanen Iceland"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/he.json b/library/intl/resources/language/he.json
new file mode 100644
index 000000000..c6769757f
--- /dev/null
+++ b/library/intl/resources/language/he.json
@@ -0,0 +1,738 @@
+{
+ "agq": {
+ "code": "agq",
+ "name": "××”×™×™×"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "×ווה"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "×וונדו"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "×וזבקית"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "×ויגהור"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "×וקר×ינית"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "×ורדו"
+ },
+ "or": {
+ "code": "or",
+ "name": "×וריה"
+ },
+ "az": {
+ "code": "az",
+ "name": "×זרית"
+ },
+ "it": {
+ "code": "it",
+ "name": "×יטלקית"
+ },
+ "id": {
+ "code": "id",
+ "name": "×ינדונזית"
+ },
+ "is": {
+ "code": "is",
+ "name": "×יסלנדית"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "×ירית"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "×לבנית"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "×מבו"
+ },
+ "am": {
+ "code": "am",
+ "name": "×מהרית"
+ },
+ "en": {
+ "code": "en",
+ "name": "×נגלית"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "×נגלית ×וסטרלית"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "×נגלית ×מריק×ית"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "×נגלית בריטית"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "×נגלית קנדית"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "×סו"
+ },
+ "et": {
+ "code": "et",
+ "name": "×סטונית"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "×סטורית"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "×ספרנטו"
+ },
+ "af": {
+ "code": "af",
+ "name": "×פריק×נס"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "×ק×ן"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "×רמנית"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "ב×פיה"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "בודו"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "בולגרית"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "בוסנית"
+ },
+ "my": {
+ "code": "my",
+ "name": "בורמזית"
+ },
+ "be": {
+ "code": "be",
+ "name": "בל×רוסית"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "במב×רה"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "בנגלית"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "בנה"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "בס××"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "בסקית"
+ },
+ "br": {
+ "code": "br",
+ "name": "ברטונית"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "×’×ורגית"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "×’×לית סקוטית"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "×’×נדה"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "גוג׳ר×טית"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "גוסי"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "גליצי×נית"
+ },
+ "de": {
+ "code": "de",
+ "name": "גרמנית"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "גרמנית ×וסטרית"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "גרמנית שוויצרית"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "גרמנית שוויצרית (גבוהה)"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "דזונקה"
+ },
+ "da": {
+ "code": "da",
+ "name": "דנית"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "×”×וסה"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "הולה-פוניי"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "הולנדית"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "הונגרית"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "הינדי"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "ו××™"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "וו×לסר"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "וונג׳ו"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "וי×טנמית"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "ולשית"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "×–×רמה"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "זולו"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "ט×יטה"
+ },
+ "to": {
+ "code": "to",
+ "name": "טונגן"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "טורקית"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "טיבטית"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "טיגרינ×ית"
+ },
+ "te": {
+ "code": "te",
+ "name": "טלוגו"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "טמזייט של מרכז מרוקו"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "טמילית"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "טסו"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "טסוו×ק"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "טצ׳להיט"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "×™×נגבן"
+ },
+ "el": {
+ "code": "el",
+ "name": "יוונית"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "יורובה"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "יפנית"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "ל×ית"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "ל×× ×’×™"
+ },
+ "se": {
+ "code": "se",
+ "name": "ל×פית צפונית"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "לו×ו"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "לובה-קטנגה"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "לויה"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "לוקסמבורגית"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "לטבית"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "ליט×ית"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "לינגלה"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "מ×ס×ית"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "מולדבית"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "מונגולית"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "מונד×× ×’"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "מוריסיין"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "מל××™×ל×"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "מל×ית"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "מלגשית"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "מלטית"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "מצ׳×מה"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "מקדונית"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "מקו××”-מיטו"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "מקונדה"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "מרו"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "מרטהי"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "× ×מה"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "נגומה"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "נו×ר"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "נורבגית חדשה"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "â€× ×•×¨×‘גית ספרותית"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "× ×™×נקולה"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "נפ×לית"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "ס×נגו"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "סוגה"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "סווהילי קונגולטזית"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "סווהילית"
+ },
+ "so": {
+ "code": "so",
+ "name": "סומלית"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "סורבית גבוהה"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "סורבית נמוכה"
+ },
+ "si": {
+ "code": "si",
+ "name": "סינהלה"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "סינית"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "סינית מסורתית"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "סינית מפושטת"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "סלובנית"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "סלובקית"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "סמבורו"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "סנגו"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "סנה"
+ },
+ "es": {
+ "code": "es",
+ "name": "ספרדית"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "ספרדית ×ירופ×ית"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "ספרדית מקסיקנית"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "סרבית"
+ },
+ "he": {
+ "code": "he",
+ "name": "עברית"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "ערבית"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ערבית ספרותית"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "פ×רו×זית"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "פ×שטו"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "פולה"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "פולנית"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "פורטוגלית"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "פורטוגלית ×ירופ×ית"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "פורטוגלית ברזיל×ית"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "פיליפינית"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "פינית"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "פלמית"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "פנג׳×בית"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "פריולית"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "פריזית"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "פרסית"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "צ׳יגה"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "צ׳כית"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "צ׳רוקי"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "צפון נדבלה"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "צרפתית"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "צרפתית קנדית"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "צרפתית שוויצרית"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "ק×בוורדי×נו"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "ק×ל×ליסוטית"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "ק×לנג׳ין"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "קבילה"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "קוו×סיו"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "קויר×בורו סני"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "קוירה צ׳יני"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "קולוני×ן"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "קורי×נית"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "קזחית"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "קטל×נית"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "קיקויו"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "קירגיזית"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "קירונדי"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "קמבה"
+ },
+ "km": {
+ "code": "km",
+ "name": "קמרית"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "קנ×דה"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "קרו×טית"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "קשמירית"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "רוו×"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "רומ×נש"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "רומבו"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "רומנית"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "רוסית"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "שוודית"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "שונה"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "שמב×לה"
+ },
+ "th": {
+ "code": "th",
+ "name": "ת×ית"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "תמזיע׳ת מרוק×ית תקנית"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/hi.json b/library/intl/resources/language/hi.json
new file mode 100644
index 000000000..9145e2dff
--- /dev/null
+++ b/library/intl/resources/language/hi.json
@@ -0,0 +1,738 @@
+{
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "en": {
+ "code": "en",
+ "name": "अंगà¥à¤°à¥‡à¤œà¤¼à¥€"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "अकन"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "अगà¥à¤¹à¥‡à¤®"
+ },
+ "az": {
+ "code": "az",
+ "name": "अज़रबैजानी"
+ },
+ "af": {
+ "code": "af",
+ "name": "अफ़à¥à¤°à¥€à¤•à¥€"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "अमेरिकी अंगà¥à¤°à¥‡à¤œà¤¼à¥€"
+ },
+ "am": {
+ "code": "am",
+ "name": "अमà¥à¤¹à¥‡à¤°à¥€"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "अरबी"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "अलà¥à¤¬à¤¾à¤¨à¤¿à¤¯à¤¾à¤ˆ"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "असà¥"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "असà¥à¤¤à¥à¤°à¤¿à¤¯à¤¨"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "आइरिश"
+ },
+ "is": {
+ "code": "is",
+ "name": "आइसलैंडी"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "आधà¥à¤¨à¤¿à¤• मानक अरबी"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "आरà¥à¤®à¥‡à¤¨à¤¿à¤¯à¤¾à¤ˆ"
+ },
+ "id": {
+ "code": "id",
+ "name": "इंडोनेशियाई"
+ },
+ "it": {
+ "code": "it",
+ "name": "इतालवी"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "इवोनà¥à¤¡à¥‹"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ईवे"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "उज़à¥à¤¬à¥‡à¤•"
+ },
+ "or": {
+ "code": "or",
+ "name": "उड़िया"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "उतà¥à¤¤à¤°à¥€ देबेल"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "उरà¥à¤¦à¥‚"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "ऊपरी सॉरà¥à¤¬à¤¿à¤¯à¤¨"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "à¤à¤®à¥à¤¬à¥"
+ },
+ "et": {
+ "code": "et",
+ "name": "à¤à¤¸à¥à¤Ÿà¥‹à¤¨à¤¿à¤¯à¤¾à¤ˆ"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "à¤à¤¸à¥à¤ªà¥‡à¤°à¥‡à¤‚तो"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "ऑसà¥à¤Ÿà¥à¤°à¤¿à¤¯à¤¾à¤ˆ जरà¥à¤®à¤¨"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "ऑसà¥à¤Ÿà¥à¤°à¥‡à¤²à¤¿à¤¯à¤¾à¤ˆ अंगà¥à¤°à¥‡à¤œà¤¼à¥€"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "कज़ाख़"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "कनाडाई अंगà¥à¤°à¥‡à¤œà¤¼à¥€"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "कनाडाई फ़à¥à¤°à¥‡à¤‚च"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "कनà¥à¤¨à¤¡à¤¼"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "कबाइल"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "कमà¥à¤¬à¤¾"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "कलेंजिन"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "कशà¥à¤®à¥€à¤°à¥€"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "कांगो सà¥à¤µà¤¾à¤¹à¤¿à¤²à¥€"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "कातालान"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "काबà¥à¤µà¥‡à¤°à¥à¤¦à¤¿à¤¯à¤¾à¤¨à¥"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "किकà¥à¤¯à¥‚"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "किरà¥à¤—ीज़"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "कोयरा चीनी"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "कोयराबोरो सेनà¥à¤¨à¥€"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "कोरियाई"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "कà¥à¤°à¥‹à¤à¤¶à¤¿à¤¯à¤¾à¤ˆ"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "कà¥à¤µà¤¾à¤¸à¤¿à¤“"
+ },
+ "km": {
+ "code": "km",
+ "name": "खमेर"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "गांडा"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "गà¥à¤œà¤°à¤¾à¤¤à¥€"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "गà¥à¤¸à¥€"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "गैलिशियन"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "गà¥à¤°à¥€à¤¨à¤²à¥ˆà¤‚डिक"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "चीनी"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "चेक"
+ },
+ "de": {
+ "code": "de",
+ "name": "जरà¥à¤®à¤¨"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "जापानी"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "ज़à¥à¤²à¥‚"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "जॉरà¥à¤œà¤¿à¤¯à¤¾à¤ˆ"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "ज़ोनà¥à¤—खा"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "जोला-फोंई"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "à¤à¤¾à¤°à¥à¤®à¤¾"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "टासवाक"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "टेसो"
+ },
+ "to": {
+ "code": "to",
+ "name": "टोंगन"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "डच"
+ },
+ "da": {
+ "code": "da",
+ "name": "डेनिश"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "तमिल"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "तिगà¥à¤°à¥€à¤¨à¥à¤¯à¤¾"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "तिबà¥à¤¬à¤¤à¥€"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "तà¥à¤°à¥à¤•à¥€"
+ },
+ "te": {
+ "code": "te",
+ "name": "तेलà¥à¤—ू"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "तैचेलà¥à¤¹à¤¿à¤¤"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "तैता"
+ },
+ "th": {
+ "code": "th",
+ "name": "थाई"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "नगोंबा"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "नामा"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "निचला सॉरà¥à¤¬à¤¿à¤¯à¤¨"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "नà¥à¤à¤°"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "नेपाली"
+ },
+ "se": {
+ "code": "se",
+ "name": "नॉरà¥à¤¦à¤¨ सामी"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "नॉरà¥à¤µà¥‡à¤œà¤¿à¤¯à¤¾à¤ˆ नॉयनॉरà¥à¤¸à¥à¤•"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "नॉरà¥à¤µà¥‡à¤œà¤¿à¤¯à¤¾à¤ˆ बोकमाल"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "नà¥à¤¯à¤¾à¤¨à¤•à¥‹à¤²"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "पंजाबी"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "पशà¥à¤šà¤¿à¤®à¥€ फ़à¥à¤°à¤¿à¤¸à¤¿à¤¯à¤¾à¤ˆ"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "पशà¥à¤¤à¥‹"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "पारंपरिक चीनी"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "पà¥à¤°à¥à¤¤à¤—ाली"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "पोलिश"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "फ़ारसी"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "फ़िनिश"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "फ़िलिपीनो"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "फà¥à¤²à¤¾à¤¹"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "फ़ैरोइज़"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "फà¥à¤°à¥€à¤¯à¥à¤²à¥€à¤¯à¤¾à¤¨"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "फ़à¥à¤°à¥‡à¤‚च"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "फ़à¥à¤²à¥‡à¤®à¤¿à¤¶"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "बंगाली"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "बफिआ"
+ },
+ "my": {
+ "code": "my",
+ "name": "बरà¥à¤®à¥€à¤œà¤¼"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "बसा"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "बामà¥à¤¬à¤¾à¤°à¤¾"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "बासà¥à¤•"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "बà¥à¤²à¥à¤—ारियाई"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "बेना"
+ },
+ "be": {
+ "code": "be",
+ "name": "बेलारूसी"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "बोडो"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "बोसà¥à¤¨à¤¿à¤¯à¤¾à¤ˆ"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "बà¥à¤°à¤¾à¤œà¤¼à¥€à¤²à¥€ पà¥à¤°à¥à¤¤à¤—ाली"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "बà¥à¤°à¤¿à¤Ÿà¤¿à¤¶ अंगà¥à¤°à¥‡à¤œà¤¼à¥€"
+ },
+ "br": {
+ "code": "br",
+ "name": "बà¥à¤°à¥‡à¤Ÿà¤¨"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "मंगोलीयाई"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "मधà¥à¤¯ à¤à¤Ÿà¤²à¤¸ तमाज़ित"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "मराठी"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "मलय"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "मलयालम"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "मसाई"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "मानक मोरकà¥à¤•à¤¨ तामाज़ाइट"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "मालागासी"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "मालà¥à¤Ÿà¥€à¤œà¤¼"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "मà¥à¤‚डैंग"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "मेरà¥"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "मैकहैमे"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "मैकोंड"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "मैकà¥à¤¸à¤¿à¤•à¤¨ सà¥à¤ªà¥‡à¤¨à¤¿à¤¶"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "मैखà¥à¤µà¤¾-मीटà¥à¤Ÿà¥‹"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "मैसिडोनियाई"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "मोरीसà¥à¤¯à¥‡à¤¨"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "मोलडावियन"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "यूकà¥à¤°à¥‡à¤¨à¤¿à¤¯à¤¾à¤ˆ"
+ },
+ "el": {
+ "code": "el",
+ "name": "यूनानी"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "यूरोपीय पà¥à¤°à¥à¤¤à¤—ाली"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "यूरोपीय सà¥à¤ªà¥‡à¤¨à¥€"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "योरूबा"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "रवा"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "रà¥à¤¨à¥à¤¦à¥€"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "रूसी"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "रोमानियाई"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "रोमानà¥à¤¶"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "रोमà¥à¤¬à¥‹"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "लगà¥à¤œà¤¼à¤®à¤¬à¤°à¥à¤—ी"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "लांगि"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "लाओ"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "लातवियाई"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "लिंगाला"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "लिथà¥à¤†à¤¨à¤¿à¤¯à¤¾à¤ˆ"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "लà¥à¤¯à¥à¤ˆà¤†"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "लà¥à¤¯à¥à¤“"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "लà¥à¤¯à¥‚बा-कटांगा"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "वाई"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "विघà¥à¤°"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "वियतनामी"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "वà¥à¤‚जो"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "वेलà¥à¤¶"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "शमà¥à¤¬à¤¾à¤²à¤¾"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "शिगा"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "शेरोकी"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "शोणा"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "सरलीकृत चीनी"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "सरà¥à¤¬à¤¿à¤¯à¤¾à¤ˆ"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "सांगो"
+ },
+ "si": {
+ "code": "si",
+ "name": "सिंहली"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "सेना"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "सैंगà¥"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "सैमà¥à¤¬à¥à¤°à¥"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "सोगा"
+ },
+ "so": {
+ "code": "so",
+ "name": "सोमाली"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "सà¥à¤•à¤¾à¤Ÿà¥à¤¸à¥ गायेलिकà¥"
+ },
+ "es": {
+ "code": "es",
+ "name": "सà¥à¤ªà¥‡à¤¨à¥€"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "सà¥à¤²à¥‹à¤µà¤¾à¤•"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "सà¥à¤²à¥‹à¤µà¥‡à¤¨à¤¿à¤¯à¤¾à¤ˆ"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "सà¥à¤µà¤¾à¤¹à¤¿à¤²à¥€"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "सà¥à¤µà¤¿à¤¸ उचà¥à¤š जरà¥à¤®à¤¨"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "सà¥à¤µà¤¿à¤¸ जरà¥à¤®à¤¨"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "सà¥à¤µà¤¿à¤¸ फ़à¥à¤°à¥‡à¤‚च"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "सà¥à¤µà¥€à¤¡à¤¿à¤¶"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "हंगेरियाई"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "हिंदी"
+ },
+ "he": {
+ "code": "he",
+ "name": "हिबà¥à¤°à¥‚"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "हौसा"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/hr.json b/library/intl/resources/language/hr.json
new file mode 100644
index 000000000..cf62df56d
--- /dev/null
+++ b/library/intl/resources/language/hr.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akanski"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanski"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "ameriÄki engleski"
+ },
+ "am": {
+ "code": "am",
+ "name": "amharski"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arapski"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenski"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturijski"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "australski engleski"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "austrijski njemaÄki"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbajdžanski"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "baskijski"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalski"
+ },
+ "be": {
+ "code": "be",
+ "name": "bjeloruski"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosanski"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "brazilski portugalski"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretonski"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "britanski engleski"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bugarski"
+ },
+ "my": {
+ "code": "my",
+ "name": "burmanski"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Äeroki"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ÄeÅ¡ki"
+ },
+ "da": {
+ "code": "da",
+ "name": "danski"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "en": {
+ "code": "en",
+ "name": "engleski"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonski"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "europski portugalski"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "europski Å¡panjolski"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "ferojski"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finski"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamanski"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francuski"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulski"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galicijski"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "gornjolužiÄki"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "gornjonjemaÄki (Å¡vicarski)"
+ },
+ "el": {
+ "code": "el",
+ "name": "grÄki"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "gruzijski"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gudžaratski"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebrejski"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindski"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "hrvatski"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonezijski"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irski"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandski"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japanski"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "joruba"
+ },
+ "se": {
+ "code": "se",
+ "name": "južni sami"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabilski"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "kanadski engleski"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "kanadski francuski"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannadski"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kašmirski"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalonski"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazaški"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kelnski"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "kineski"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "kineski (pojednostavljeni)"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "kineski (tradicionalni)"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgiški"
+ },
+ "km": {
+ "code": "km",
+ "name": "kmerski"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "književni norveški"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "kongoanski swahili"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "korejski"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laoski"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "latvijski"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "litavski"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luksemburški"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "lužiÄkosrpski"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "mađarski"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedonski"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malajalamski"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malajski"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgaški"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "malteški"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathski"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "marokanski tamazight"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masajski"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "mauricijski kreolski"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "meksiÄki Å¡panjolski"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "moderni standardni arapski"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavski"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongolski"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalski"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "nizozemski"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "novonorveški"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "de": {
+ "code": "de",
+ "name": "njemaÄki"
+ },
+ "or": {
+ "code": "or",
+ "name": "orijski"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "pandžapski"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "paštu"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "perzijski"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "poljski"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugalski"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romanš"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumunjski"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruski"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "sinhaleški"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "sjeverni ndebele"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovaÄki"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "slovenski"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalski"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "srpski"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "standardni marokanski tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "svahili"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Å¡kotski-galski"
+ },
+ "es": {
+ "code": "es",
+ "name": "Å¡panjolski"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Å¡vedski"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Å¡vicarski francuski"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Å¡vicarski njemaÄki"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "th": {
+ "code": "th",
+ "name": "tajlandski"
+ },
+ "it": {
+ "code": "it",
+ "name": "talijanski"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamilski"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetanski"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinja"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonganski"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turski"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ujgurski"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrajinski"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdski"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeÄki"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "velški"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vijetnamski"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "zapadnofrizijski"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "zelenortski"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/hsb.json b/library/intl/resources/language/hsb.json
new file mode 100644
index 000000000..79753bc2f
--- /dev/null
+++ b/library/intl/resources/language/hsb.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaanšćina"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghemšćina"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akanšćina"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanšćina"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "ameriska jendźelšćina"
+ },
+ "am": {
+ "code": "am",
+ "name": "amharšćina"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabšćina"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenšćina"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturšćina"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "awstralska jendźelšćina"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "awstriska nÄ›mÄina"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbajdźanšćina"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "baskišćina"
+ },
+ "be": {
+ "code": "be",
+ "name": "běłorušćina"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalšćina"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bołharšćina"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnišćina"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "brazilska portugalšćina"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretonšćina"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "britiska jendźelšćina"
+ },
+ "my": {
+ "code": "my",
+ "name": "burmašćina"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Äěšćina"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chinšćina"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chinšćina (tradicionalna)"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chinšćina (zjednorjena)"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "chorwatšćina"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "da": {
+ "code": "da",
+ "name": "danšćina"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "delnjoserbšćina"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estišćina"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "europska portugalšćina"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "europska španišćina"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "färöšćina"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipinšćina"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finšćina"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamšćina"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francošćina"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frizišćina"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galicišćina"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "gandšćina"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgišćina"
+ },
+ "el": {
+ "code": "el",
+ "name": "grjekšćina"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "gröndlandšćina"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebrejšćina"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindišćina"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "hornjoserbšćina"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonešćina"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "iršćina"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandšćina"
+ },
+ "it": {
+ "code": "it",
+ "name": "italšćina"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japanšćina"
+ },
+ "en": {
+ "code": "en",
+ "name": "jendźelšćina"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "jorubašćina"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabylšćina"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "kanadiska francošćina"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "kanadiska jendźelšćina"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannadšćina"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "kapverdšćina"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kašmiršćina"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalanšćina"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazachšćina"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmeršćina"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgišćina"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kirundišćina"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "kongoska suahelšćina"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "korejšćina"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyra senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laošćina"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letišćina"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "litawšćina"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luhya"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgšćina"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "madźaršćina"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedonšćina"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malagassišćina"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malajamšćina"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malajšćina"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltašćina"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratišćina"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masaišćina"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "mauriciska kreolšćina"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "mexiska španišćina"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "moderna wysokoarabšćina"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldawšćina"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongolšćina"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "de": {
+ "code": "de",
+ "name": "nÄ›mÄina"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalšćina"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "nižozemšćina"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norwegšćina (bokmål)"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norwegšćina (nynorsk)"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "orijšćina"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "pandźabšćina"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "pare"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "paštunšćina"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persišćina"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "pólšćina"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugalšćina"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retoromanšćina"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumunšćina"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "rušćina"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Å¡ambala"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbišćina"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "sewjero-ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "sewjerosamišćina"
+ },
+ "si": {
+ "code": "si",
+ "name": "singhalšćina"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "słowakšćina"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "słowjenšćina"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somališćina"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "šonašćina"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "šotiska gelšćina"
+ },
+ "es": {
+ "code": "es",
+ "name": "španišćina"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "suahelšćina"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "šwedšćina"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "šwicarska francošćina"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Å¡wicarska nÄ›mÄina"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight (srjedźny Marokko)"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamilšćina"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tašelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "thailandšćina"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetšćina"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinšćina"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongašćina"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turkowšćina"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ujguršćina"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrainšćina"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdušćina"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbekšćina"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamšćina"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "walizišćina"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulušćina\""
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/hu.json b/library/intl/resources/language/hu.json
new file mode 100644
index 000000000..440e370fc
--- /dev/null
+++ b/library/intl/resources/language/hu.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "agem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albán"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "alsó szorb"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "amerikai angol"
+ },
+ "am": {
+ "code": "am",
+ "name": "amhara"
+ },
+ "en": {
+ "code": "en",
+ "name": "angol"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arab"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asztúr"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "ausztrál angol"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbajdzsáni"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basza"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "baszk"
+ },
+ "be": {
+ "code": "be",
+ "name": "belorusz"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengáli"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bolgár"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnyák"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "brazíliai portugál"
+ },
+ "br": {
+ "code": "br",
+ "name": "breton"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "brit angol"
+ },
+ "my": {
+ "code": "my",
+ "name": "burmai"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "butáni"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "cseh"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cseroki"
+ },
+ "da": {
+ "code": "da",
+ "name": "dán"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "egyszerűsített kínai"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "északi ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "északi számi"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "eszperantó"
+ },
+ "et": {
+ "code": "et",
+ "name": "észt"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "európai portugál"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "európai spanyol"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "eve"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "evondo"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "felső szorb"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feröeri"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filippínó"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finn"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamand"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francia"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friuli"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "fríz"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fulani"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galíciai"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "el": {
+ "code": "el",
+ "name": "görög"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "grönlandi"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "grúz"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gudzsarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "guszii"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "hagyományos kínai"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausza"
+ },
+ "he": {
+ "code": "he",
+ "name": "héber"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "holland"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "horvát"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonéz"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "ír"
+ },
+ "is": {
+ "code": "is",
+ "name": "izlandi"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "jangben"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japán"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "joruba"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabije"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "kabuverdianu"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalendzsin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "km": {
+ "code": "km",
+ "name": "kambodzsai"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "kanadai angol"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "kanadai francia"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kásmíri"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalán"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazah"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "kiga"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuju"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "kínai"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgiz"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kirundi"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "kojra-csíni"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "kojra-szenni"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "kongói szuahéli"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "koreai"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "közép-marokkói tamazigt"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laoszi"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "lengyel"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "lett"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "litván"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "lujia"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgi"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedón"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "magyar"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makua-metó"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "maláj"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malajálam"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "málgas"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "máltai"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathi"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "marokkói tamazight"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masai"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "mauritiusi kreol"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "modern szabányos arab"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldvai"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "de": {
+ "code": "de",
+ "name": "német"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepáli"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "ngumba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norvég bokmal"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norvég nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "it": {
+ "code": "it",
+ "name": "olasz"
+ },
+ "or": {
+ "code": "or",
+ "name": "orija"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "orosz"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "osztrák német"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "örmény"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "pandzsábi"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastu"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "perzsa"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugál"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "réto-román"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "román"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwo"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "sambala"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "skót gael"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "sona"
+ },
+ "es": {
+ "code": "es",
+ "name": "spanyol"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "spanyol (mexikói)"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "svájci felnémet"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "svájci francia"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "svájci német"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "svéd"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "szamburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "szangó"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "szangu"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "szavák"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "szena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "szerb"
+ },
+ "si": {
+ "code": "si",
+ "name": "szingaléz"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "szlovák"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "szlovén"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "szoga"
+ },
+ "so": {
+ "code": "so",
+ "name": "szomáliai"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "szuahéli"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teszó"
+ },
+ "th": {
+ "code": "th",
+ "name": "thai"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibeti"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinja"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonga"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "török"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ujgur"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrán"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "üzbég"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnami"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "walesi"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/hy.json b/library/intl/resources/language/hy.json
new file mode 100644
index 000000000..df2c2721b
--- /dev/null
+++ b/library/intl/resources/language/hy.json
@@ -0,0 +1,738 @@
+{
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "az": {
+ "code": "az",
+ "name": "Õ¡Õ¤Ö€Õ¢Õ¥Õ»Õ¡Õ¶Õ¥Ö€Õ¥Õ¶"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Õ¡Õ¬Õ¢Õ¡Õ¶Õ¥Ö€Õ¥Õ¶"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Õ¡Õ²Õ¥Õ´"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "Õ¡Õ´Õ¥Ö€Õ«Õ¯ÕµÕ¡Õ¶ Õ¡Õ¶Õ£Õ¬Õ¥Ö€Õ¥Õ¶"
+ },
+ "am": {
+ "code": "am",
+ "name": "Õ¡Õ´Õ°Õ¡Ö€Õ¥Ö€Õ¥Õ¶"
+ },
+ "en": {
+ "code": "en",
+ "name": "Õ¡Õ¶Õ£Õ¬Õ¥Ö€Õ¥Õ¶"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Õ¡Õ½Õ¸Ö‚"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "Õ¡Õ¾Õ¡Õ¶Õ¤Õ¡Õ¯Õ¡Õ¶ Õ¹Õ«Õ¶Õ¡Ö€Õ¥Õ¶"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Õ¡Õ¾Õ½Õ¿Ö€Õ¡Õ¬Õ¡Õ¯Õ¡Õ¶ Õ¡Õ¶Õ£Õ¬Õ¥Ö€Õ¥Õ¶"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "Õ¡Õ¾Õ½Õ¿Ö€Õ«Õ¡Õ¯Õ¡Õ¶ Õ£Õ¥Ö€Õ´Õ¡Õ¶Õ¥Ö€Õ¥Õ¶"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Õ¡Ö€Õ¡Õ¢Õ¥Ö€Õ¥Õ¶"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Õ¡Ö€Ö‡Õ´Õ¿ÕµÕ¡Õ¶ Ö†Ö€Õ«Õ¦Õ¥Ö€Õ¥Õ¶"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Õ¡Ö„Õ¡Õ¶Õ¥Ö€Õ¥Õ¶"
+ },
+ "af": {
+ "code": "af",
+ "name": "Õ¡Ö†Ö€Õ«Õ¯Õ¡Õ¡Õ¶Õ½"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Õ¢Õ¡Õ´Õ¢Õ¡Ö€Õ¡"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Õ¢Õ¡Õ½Õ¯Õ¥Ö€Õ¥Õ¶"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Õ¢Õ¡Ö†Õ«Õ¡"
+ },
+ "be": {
+ "code": "be",
+ "name": "Õ¢Õ¥Õ¬Õ¡Õ¼Õ¸Ö‚Õ½Õ¥Ö€Õ¥Õ¶"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Õ¢Õ¥Õ¶Õ¡"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Õ¢Õ¥Õ¶Õ£Õ¡Õ¬Õ¥Ö€Õ¥Õ¶"
+ },
+ "my": {
+ "code": "my",
+ "name": "Õ¢Õ«Ö€Õ´Õ¡ÕµÕ¥Ö€Õ¥Õ¶"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Õ¢Õ¸Õ¤Õ¸"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Õ¢Õ¸Õ½Õ¶Õ«Õ¥Ö€Õ¥Õ¶"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Õ¢Õ¸Ö‚Õ¬Õ²Õ¡Ö€Õ¥Ö€Õ¥Õ¶"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Õ¢Ö€Õ¡Õ¦Õ«Õ¬Õ¡Õ¯Õ¡Õ¶ ÕºÕ¸Ö€Õ¿Õ¸Ö‚Õ£Õ¡Õ¬Õ¥Ö€Õ¥Õ¶"
+ },
+ "br": {
+ "code": "br",
+ "name": "Õ¢Ö€Õ¥Õ¿Õ¸Õ¶Õ¥Ö€Õ¥Õ¶"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Õ¢Ö€Õ«Õ¿Õ¡Õ¶Õ¡Õ¯Õ¡Õ¶ Õ¡Õ¶Õ£Õ¬Õ¥Ö€Õ¥Õ¶"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Ô³Õ¡Õ¥Õ¬ÕµÕ¡Õ¶ Õ‡Õ¸Õ¿Õ¬Õ¡Õ¶Õ¤Õ¥Ö€Õ¥Õ¶"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Õ£Õ¡Õ¬Õ«Õ½Õ¥Ö€Õ¥Õ¶"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Õ£Õ¡Õ¶Õ¤Õ¡"
+ },
+ "de": {
+ "code": "de",
+ "name": "Õ£Õ¥Ö€Õ´Õ¡Õ¶Õ¥Ö€Õ¥Õ¶"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Õ£Õ¸Ö‚Õ»Õ¡Ö€Õ¡Õ©Õ«"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Õ£Õ¸Ö‚Õ½Õ«"
+ },
+ "da": {
+ "code": "da",
+ "name": "Õ¤Õ¡Õ¶Õ«Õ¥Ö€Õ¥Õ¶"
+ },
+ "he": {
+ "code": "he",
+ "name": "Õ¥Õ¢Ö€Õ¡ÕµÕ¥Ö€Õ¥Õ¶"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Õ¥Õ¾Ö€Õ¸ÕºÕ¡Õ¯Õ¡Õ¶ Õ«Õ½ÕºÕ¡Õ¶Õ¥Ö€Õ¥Õ¶"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Õ¥Õ¾Ö€Õ¸ÕºÕ¡Õ¯Õ¡Õ¶ ÕºÕ¸Ö€Õ¿Õ¸Ö‚Õ£Õ¡Õ¬Õ¥Ö€Õ¥Õ¶"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Õ¦Õ¡Ö€Õ´Õ¡"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Õ¦Õ¸Ö‚Õ¬Õ¸Ö‚Õ½Õ¥Ö€Õ¥Õ¶"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Õ§Õ´Õ¢Õ¸Ö‚"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Õ§Õ½ÕºÕ¥Ö€Õ¡Õ¶Õ¿Õ¸"
+ },
+ "et": {
+ "code": "et",
+ "name": "Õ§Õ½Õ¿Õ¸Õ¶Õ¥Ö€Õ¥Õ¶"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Õ§Õ¾Õ¥"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Õ©Õ¡Õ«Õ©Õ¡"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Õ©Õ¡Õ´Õ«Õ¬Õ¥Ö€Õ¥Õ¶"
+ },
+ "th": {
+ "code": "th",
+ "name": "Õ©Õ¡ÕµÕ¥Ö€Õ¥Õ¶"
+ },
+ "te": {
+ "code": "te",
+ "name": "Õ©Õ¥Õ¬Õ¸Ö‚Õ£Õ¸Ö‚"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Õ©Õ«Õ£Ö€Õ«Õ¶Õ«Õ¡"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Õ©Õ¸Ö‚Ö€Ö„Õ¥Ö€Õ¥Õ¶"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ÕªÕ¡Õ´Õ¡Õ¶Õ¡Õ¯Õ¡Õ¯Õ«Ö Õ½Õ¿Õ¡Õ¶Õ¤Õ¡Ö€Õ¿ Õ¡Ö€Õ¡Õ¢Õ¥Ö€Õ¥Õ¶"
+ },
+ "id": {
+ "code": "id",
+ "name": "Õ«Õ¶Õ¤Õ¸Õ¶Õ¥Õ¦Õ¥Ö€Õ¥Õ¶"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Õ«Õ¼Õ¬Õ¡Õ¶Õ¤Õ¥Ö€Õ¥Õ¶"
+ },
+ "is": {
+ "code": "is",
+ "name": "Õ«Õ½Õ¬Õ¡Õ¶Õ¤Õ¥Ö€Õ¥Õ¶"
+ },
+ "es": {
+ "code": "es",
+ "name": "Õ«Õ½ÕºÕ¡Õ¶Õ¥Ö€Õ¥Õ¶"
+ },
+ "it": {
+ "code": "it",
+ "name": "Õ«Õ¿Õ¡Õ¬Õ¥Ö€Õ¥Õ¶"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Õ¬Õ¡Õ¶Õ£Õ«"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Õ¬Õ¡Õ¸Õ½Õ¥Ö€Õ¥Õ¶"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Õ¬Õ¡Õ¿Õ¾Õ«Õ¥Ö€Õ¥Õ¶"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Õ¬Õ¥Õ°Õ¥Ö€Õ¥Õ¶"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Õ¬Õ«Õ¶Õ£Õ¡Õ¬Õ¡"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Õ¬Õ«Õ¿Õ¾Õ¥Ö€Õ¥Õ¶"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Õ¬ÕµÕ¸Ö‚Ö„Õ½Õ¥Õ´Õ¢Õ¸Ö‚Ö€Õ£Õ¥Ö€Õ¥Õ¶"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Õ¬Õ¸Ö‚Õ¢Õ¡-Õ¯Õ¡Õ¿Õ¡Õ¶Õ£Õ¡"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Õ¬Õ¸Ö‚ÕµÕ¡"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Õ¬Õ¸Ö‚Õ¸"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Õ­Õ¸Ö€Õ¾Õ¡Õ©Õ¥Ö€Õ¥Õ¶"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Õ¯Õ¡Õ¢Õ«Õ¬Õ¥Ö€Õ¥Õ¶"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Õ¯Õ¡Õ¬Õ¡Õ¡Õ¬Õ«Õ½Õ¸Ö‚Õ¿"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Õ¯Õ¡Õ¬Õ¥Õ¶Õ»Õ«Õ¶"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Õ¯Õ¡Õ´Õ¢Õ¡"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "Õ¯Õ¡Õ¶Õ¡Õ¤Õ¡Õ¯Õ¡Õ¶ Õ¡Õ¶Õ£Õ¬Õ¥Ö€Õ¥Õ¶"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Õ¯Õ¡Õ¶Õ¡Õ¤Õ¡Õ¯Õ¡Õ¶ Ö†Ö€Õ¡Õ¶Õ½Õ¥Ö€Õ¥Õ¶"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Õ¯Õ¡Õ¶Õ¶Õ¡Õ¤Õ¡"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Õ¯Õ¡Õ¿Õ¡Õ¬Õ¡Õ¶Õ¥Ö€Õ¥Õ¶"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Õ¯Õ¥Õ¶Õ¿Ö€Õ¸Õ¶Õ¡Õ¿Õ¬Õ¡Õ½ÕµÕ¡Õ¶ Õ©Õ¡Õ´Õ¡Õ¦Õ«Õ­Õ¿"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Õ¯Õ«Õ¯Õ¸Ö‚ÕµÕ¸Ö‚"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Õ¯Õ¸ÕµÖ€Õ¡ Õ¹Õ«Õ¶Õ«"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Õ¯Õ¸ÕµÖ€Õ¡Õ¢Õ¸Ö€Õ¸ Õ½Õ¥Õ¶Õ¶Õ«"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Õ¯Õ¸Õ¶Õ£Õ¸ÕµÕ« Õ½Õ¸Ö‚Õ¡Õ°Õ«Õ¬Õ«"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Õ¯Õ¸Ö€Õ¥Õ¥Ö€Õ¥Õ¶"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Õ¯Õ¸Ö‚Õ¢Õ¡Õ¾Õ¥Ö€Õ¤Õ«Õ¡Õ¶Õ¸Ö‚"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Õ¯Õ¾Õ¡Õ½Õ«Õ¸"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Õ°Õ¡ÕµÕ¥Ö€Õ¥Õ¶"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Õ°Õ¡Õ¸Ö‚Õ½Õ¡"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Õ°Õ«Õ¶Õ¤Õ«"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Õ°ÕµÕ¸Ö‚Õ½Õ«Õ½Õ¡ÕµÕ«Õ¶ Õ¶Õ¤Õ¥Õ¢Õ¥Õ¬Õ¥"
+ },
+ "se": {
+ "code": "se",
+ "name": "Õ°ÕµÕ¸Ö‚Õ½Õ«Õ½Õ¡ÕµÕ«Õ¶ Õ½Õ¡Õ´Õ«"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Õ°Õ¸Õ¬Õ¡Õ¶Õ¤Õ¥Ö€Õ¥Õ¶"
+ },
+ "el": {
+ "code": "el",
+ "name": "Õ°Õ¸Ö‚Õ¶Õ¡Ö€Õ¥Õ¶"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Õ°Õ¸Ö‚Õ¶Õ£Õ¡Ö€Õ¥Ö€Õ¥Õ¶"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Õ²Õ¡Õ¦Õ¡Õ­Õ¥Ö€Õ¥Õ¶"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Õ²Ö€Õ²Õ¦Õ¥Ö€Õ¥Õ¶"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Õ³Õ¡ÕºÕ¸Õ¶Õ¥Ö€Õ¥Õ¶"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Õ´Õ¡Õ¬Õ¡Õ£Õ¡Õ½Õ¥Ö€Õ¥Õ¶"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Õ´Õ¡Õ¬Õ¡ÕµÕ¡Õ¬Õ¡Õ´"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Õ´Õ¡Õ¬Õ¡ÕµÕ¥Ö€Õ¥Õ¶"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Õ´Õ¡Õ¬Õ©Õ¥Ö€Õ¥Õ¶"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Õ´Õ¡Õ¯Õ¥Õ¤Õ¸Õ¶Õ¥Ö€Õ¥Õ¶"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Õ´Õ¡Õ¯Õ¸Õ¶Õ¤Õ¥"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Õ´Õ¡Õ·Õ¡Õ´Õ¥"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Õ´Õ¡Õ½Õ¡Õ«"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Õ´Õ¡Ö€Õ¡Õ©Õ«"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Õ´Õ¡Ö„Õ¸Ö‚Õ¡-Õ´Õ¥Õ¿Õ¿Õ¸"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Õ´Õ¥Ö€Õ¸Ö‚"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Õ´Õ¥Ö„Õ½Õ«Õ¯Õ¡Õ¯Õ¡Õ¶ Õ«Õ½ÕºÕ¡Õ¶Õ¥Ö€Õ¥Õ¶"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "Õ´Õ¸Õ¬Õ¤Õ¸Õ¾Õ¥Ö€Õ¥Õ¶"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Õ´Õ¸Õ¶Õ²Õ¸Õ¬Õ¥Ö€Õ¥Õ¶"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Õ´Õ¸Ö€Õ«Õ½ÕµÕ¥Õ¶"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Õ´Õ¸Ö‚Õ¶Õ¤Õ¡Õ¶Õ£"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ÕµÕ¸Ö€Õ¸Ö‚Õ¢Õ¡"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Õ¶Õ¡Õ´Õ¡"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Õ¶Õ£Õ¸Õ´Õ¢Õ¡"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Õ¶Õ¥ÕºÕ¡Õ¬Õ¥Ö€Õ¥Õ¶"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Õ¶ÕµÕ¡Õ¶Õ¯Õ¸Õ¬Õ¥"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Õ¶Õ¸Ö€Õ¾Õ¥Õ£Õ¥Ö€Õ¥Õ¶ Õ¢Õ¸Ö‚Õ¯Õ´Õ¸Õ¬"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Õ¶Õ¸Ö€Õ¾Õ¥Õ£Õ¥Ö€Õ¥Õ¶ Õ¶ÕµÕ¸Ö‚Õ¶Õ¸Ö€Õ½Õ¯"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Õ¶Õ¸Ö‚Õ¥Ö€"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Õ·Õ¡Õ´Õ¢Õ¡Õ¬Õ¡"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Õ·Õ¥Ö€Õ¸Õ¯Õ«"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Õ·Õ¸Õ¶Õ¡"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Õ·Õ¾Õ¥Õ¤Õ¥Ö€Õ¥Õ¶"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Õ·Õ¾Õ¥ÕµÖÕ¡Ö€Õ¡Õ¯Õ¡Õ¶ Õ¢Õ¡Ö€Õ±Ö€ Õ£Õ¥Ö€Õ´Õ¡Õ¶Õ¥Ö€Õ¥Õ¶"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Õ·Õ¾Õ¥ÕµÖÕ¡Ö€Õ¡Õ¯Õ¡Õ¶ Õ£Õ¥Ö€Õ´Õ¡Õ¶Õ¥Ö€Õ¥Õ¶"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Õ·Õ¾Õ¥ÕµÖÕ¡Ö€Õ¡Õ¯Õ¡Õ¶ Ö†Ö€Õ¡Õ¶Õ½Õ¥Ö€Õ¥Õ¶"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Õ¸Ö‚Õ¥Õ¬Õ½Õ¥Ö€Õ¥Õ¶"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Õ¸Ö‚Õ¦Õ¢Õ¥Õ¯Õ¥Ö€Õ¥Õ¶"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Õ¸Ö‚Õ¯Ö€Õ¡Õ«Õ¶Õ¥Ö€Õ¥Õ¶"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Õ¸Ö‚ÕµÕ²Õ¸Ö‚Ö€Õ¥Ö€Õ¥Õ¶"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Õ¸Ö‚Ö€Õ¤Õ¸Ö‚"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Õ¹Õ¥Õ­Õ¥Ö€Õ¥Õ¶"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Õ¹Õ«Õ£Õ¡"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Õ¹Õ«Õ¶Õ¡Ö€Õ¥Õ¶"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "ÕºÕ¡Ö€Õ¦Õ¥ÖÕ¾Õ¡Õ® Õ¹Õ«Õ¶Õ¡Ö€Õ¥Õ¶"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "ÕºÕ¡Ö€Õ½Õ¯Õ¥Ö€Õ¥Õ¶"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "ÕºÕ¸Ö€Õ¿Õ¸Ö‚Õ£Õ¡Õ¬Õ¥Ö€Õ¥Õ¶"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Õ»Õ¸Õ¬Õ¡-Ö†Õ¸Õ¶ÕµÕ«"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Õ»Õ¸Õ¶Õ£Ö„Õ°Õ¡"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Õ¼Õ¸Õ´Õ¡Õ¶Õ·Õ¥Ö€Õ¥Õ¶"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Õ¼Õ¸Õ´Õ¢Õ¸"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Õ¼Õ¸Ö‚Õ´Õ«Õ¶Õ¥Ö€Õ¥Õ¶"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Õ¼Õ¸Ö‚Õ¶Õ¤Õ«"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Õ¼Õ¸Ö‚Õ½Õ¥Ö€Õ¥Õ¶"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Õ¼Õ¾Õ¡"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Õ½Õ¡Õ´Õ¢Õ¸Ö‚Ö€Õ¸Ö‚"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Õ½Õ¡Õ¶Õ£Õ¸"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Õ½Õ¡Õ¶Õ£Õ¸Ö‚"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Õ½Õ¥Õ¶Õ¡"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Õ½Õ¥Ö€Õ¢Õ¥Ö€Õ¥Õ¶"
+ },
+ "si": {
+ "code": "si",
+ "name": "Õ½Õ«Õ¶Õ°Õ¡Õ¬Õ¥Ö€Õ¥Õ¶"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Õ½Õ¬Õ¸Õ¾Õ¡Õ¯Õ¥Ö€Õ¥Õ¶"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Õ½Õ¬Õ¸Õ¾Õ¥Õ¶Õ¥Ö€Õ¥Õ¶"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Õ½Õ¸Õ£Õ¡"
+ },
+ "so": {
+ "code": "so",
+ "name": "Õ½Õ¸Õ´Õ¡Õ¬Õ«Õ¥Ö€Õ¥Õ¶"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Õ½Õ¸Ö‚Õ¡Õ°Õ«Õ¬Õ«"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Õ½Õ¿Õ¡Õ¶Õ¤Õ¡Ö€Õ¿ Õ´Õ¡Ö€Õ¸Õ¯Õ¡Õ¯Õ¡Õ¶ Õ©Õ¡Õ´Õ¡Õ¦Õ«Õ²Õ¿"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Õ½Õ¿Õ¸Ö€Õ«Õ¶ Õ½Õ¸Ö€Õ¢Õ«Õ¥Ö€Õ¥Õ¶"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Õ¾Õ¡Õ«"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Õ¾Õ¥Ö€Õ«Õ¶ Õ½Õ¸Ö€Õ¢Õ«Õ¥Ö€Õ¥Õ¶"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Õ¾Õ«Õ¥Õ¿Õ¶Õ¡Õ´Õ¥Ö€Õ¥Õ¶"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Õ¾Õ¸Ö‚Õ¶Õ»Õ¸"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Õ¾Ö€Õ¡ÖÕ¥Ö€Õ¥Õ¶"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Õ¿Õ¡Õ·Õ¥Õ¬Õ°Õ«Õ©"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Õ¿Õ¡Õ½Õ¡Õ¾Õ¡Ö„"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Õ¿Õ¥Õ½Õ¸"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Õ¿Õ«Õ¢Õ¥Õ©Õ¥Ö€Õ¥Õ¶"
+ },
+ "to": {
+ "code": "to",
+ "name": "Õ¿Õ¸Õ¶Õ£Õ¡"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "ÖƒÕ¥Õ¶Õ»Õ¡Õ¢Õ¥Ö€Õ¥Õ¶"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "ÖƒÕ¸Ö‚Õ·Õ©Õ¸Ö‚"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Ö„Õ¡Õ·Õ´Õ«Ö€Õ¥Ö€Õ¥Õ¶"
+ },
+ "km": {
+ "code": "km",
+ "name": "Ö„Õ´Õ¥Ö€Õ¥Ö€Õ¥Õ¶"
+ },
+ "or": {
+ "code": "or",
+ "name": "Ö…Ö€Õ«ÕµÕ¡"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Ö†Õ¡Ö€ÕµÕ¸Ö€Õ¥Ö€Õ¥Õ¶"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Ö†Õ«Õ¬Õ«ÕºÕ«Õ¶Õ¥Ö€Õ¥Õ¶"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Ö†Õ«Õ¶Õ¶Õ¥Ö€Õ¥Õ¶"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Ö†Õ¬Õ¡Õ´Õ¡Õ¶Õ¤Õ¥Ö€Õ¥Õ¶"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Ö†Ö€Õ¡Õ¶Õ½Õ¥Ö€Õ¥Õ¶"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/id.json b/library/intl/resources/language/id.json
new file mode 100644
index 000000000..7611d98ca
--- /dev/null
+++ b/library/intl/resources/language/id.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albania"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amharik"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arab"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "Arab Standar Modern"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenia"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Astur"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijan"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "id": {
+ "code": "id",
+ "name": "Bahasa Indonesia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Bask"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Belanda"
+ },
+ "be": {
+ "code": "be",
+ "name": "Belarusia"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengali"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Bokmål Norwegia"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnia"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgar"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burma"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Cheska"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "China"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "China (Aksara Sederhana)"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "China (Aksara Tradisional)"
+ },
+ "da": {
+ "code": "da",
+ "name": "Dansk"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Dialek Kolsch"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Esti"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faro"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Flemish"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Frisia Barat"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friuli"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Gaelik Skotlandia"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galisia"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgia"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hungaria"
+ },
+ "he": {
+ "code": "he",
+ "name": "Ibrani"
+ },
+ "en": {
+ "code": "en",
+ "name": "Inggris"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "Inggris Amerika"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Inggris Australia"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Inggris Inggris"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "Inggris Kanada"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irlandia"
+ },
+ "is": {
+ "code": "is",
+ "name": "Islandia"
+ },
+ "it": {
+ "code": "it",
+ "name": "Italia"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Jepang"
+ },
+ "de": {
+ "code": "de",
+ "name": "Jerman"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "Jerman Austria"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Jerman Swiss"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Jerman Tinggi Swiss"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmir"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Katalan"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "km": {
+ "code": "km",
+ "name": "Khmer"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Kiga"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kirgiz"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Kongo Swahili"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Korea"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Kroasia"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvi"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lituavi"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luksemburg"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Makedonia"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasi"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Malta"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Melayu"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "Moldavia"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolia"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisien"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Ndebele Utara"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepali"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Nynorsk Norwegia"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Persia"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Polski"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portugis"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Portugis Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Portugis Eropa"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Prancis"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Prancis Kanada"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Prancis Swiss"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Punjabi"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Reto-Roman"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Rumania"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Rusia"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "Sami Utara"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serb"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Sloven"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somali"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Sorbia Atas"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Sorbia Rendah"
+ },
+ "es": {
+ "code": "es",
+ "name": "Spanyol"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Spanyol Eropa"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Spanyol Meksiko"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Suomi"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Swedia"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Tamazight Maroko Standar"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Tamazight Maroko Tengah"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "Thai"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibet"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tonga"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Turki"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukraina"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vietnam"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "el": {
+ "code": "el",
+ "name": "Yunani"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/is.json b/library/intl/resources/language/is.json
new file mode 100644
index 000000000..4269cc639
--- /dev/null
+++ b/library/intl/resources/language/is.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afríkanska"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanska"
+ },
+ "am": {
+ "code": "am",
+ "name": "amharíska"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabíska"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenska"
+ },
+ "az": {
+ "code": "az",
+ "name": "aserska"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "astúríska"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "austurrísk þýska"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "áströlsk enska"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafía"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "bandarísk enska"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "baskneska"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalska"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosníska"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bódó"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "brasílísk portúgalska"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "bresk enska"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretónska"
+ },
+ "my": {
+ "code": "my",
+ "name": "burmneska"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgarska"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee-mál"
+ },
+ "da": {
+ "code": "da",
+ "name": "danska"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dsongka"
+ },
+ "et": {
+ "code": "et",
+ "name": "eistneska"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "en": {
+ "code": "en",
+ "name": "enska"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperantó"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "evondó"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "evrópsk portúgalska"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "evrópsk spænska"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filippseyska"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finnska"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flæmska"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "franska"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "fríúlska"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fúla"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "færeyska"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galíanska"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgíska"
+ },
+ "el": {
+ "code": "el",
+ "name": "gríska"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "grænhöfðeyska"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "grænlenska"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gújaratí"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hása"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "hásorbneska"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreska"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindí"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "hollenska"
+ },
+ "be": {
+ "code": "be",
+ "name": "hvítrússneska"
+ },
+ "id": {
+ "code": "id",
+ "name": "indónesíska"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "írska"
+ },
+ "is": {
+ "code": "is",
+ "name": "íslenska"
+ },
+ "it": {
+ "code": "it",
+ "name": "ítalska"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japanska"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "jórúba"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabíle"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "kanadísk enska"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "kanadísk franska"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannada"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kasakska"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kasmírska"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalónska"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgiska"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "kíga"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kíkújú"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "kínverska"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "kínverska (einfölduð)"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "kínverska (hefðbundin)"
+ },
+ "km": {
+ "code": "km",
+ "name": "kmer"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koíraboró-senní"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Kongó-svahílí"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "kóreska"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "króatíska"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölníska"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langí"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laó"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "lágsorbneska"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "lettneska"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "litháíska"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "lúbakatanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "lúó"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "lúxemborgíska"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedónska"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malagasíska"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malaíska"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malajalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltneska"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratí"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masaí"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "masjáme"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "máritíska"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "merú"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "mexíkósk spænska"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldóvska"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongólska"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalska"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "norður-ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "norðursamíska"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norskt bókmál"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "núer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nýnorska"
+ },
+ "or": {
+ "code": "or",
+ "name": "óría"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastú"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persneska"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portúgalska"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "pólska"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "púnjabí"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombó"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "rómanska"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rúa"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rúmenska"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rúndí"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "rússneska"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "sambúrú"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sangó"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangú"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbneska"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "singalíska"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "sjambala"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "skosk gelíska"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slóvakíska"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "slóvenska"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "sóga"
+ },
+ "so": {
+ "code": "so",
+ "name": "sómalska"
+ },
+ "es": {
+ "code": "es",
+ "name": "spænska"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "staðlað marokkóskt tamazight"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "stöðluð nútímaarabíska"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "súlú"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "svahílí"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "svissnesk franska"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "svissnesk háþýska"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "svissnesk þýska"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sænska"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "taílenska"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taíta"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamílska"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telúgú"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "tesó"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "tékkneska"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tíbeska"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tígrinja"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongverska"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "tyrkneska"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ungverska"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "úígúr"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "úkraínska"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "úrdú"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "úsbekska"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "vaí"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "velska"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "vesturfrísneska"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "víetnamska"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjó"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "de": {
+ "code": "de",
+ "name": "þýska"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/it.json b/library/intl/resources/language/it.json
new file mode 100644
index 000000000..eb7c57555
--- /dev/null
+++ b/library/intl/resources/language/it.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanese"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "alto sorabo"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto tedesco svizzero"
+ },
+ "am": {
+ "code": "am",
+ "name": "amarico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabo"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "arabo moderno standard"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armeno"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaigiano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "basco"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "basso sorabo"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalese"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorusso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmano"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosniaco"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretone"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgaro"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "cabilo"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "capoverdiano"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalano"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ceco"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "chirghiso"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "cinese"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "cinese semplificato"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "cinese tradizionale"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "coloniese"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "congo swahili"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "creolo mauriziano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croato"
+ },
+ "da": {
+ "code": "da",
+ "name": "danese"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "he": {
+ "code": "he",
+ "name": "ebraico"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estone"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "faroese"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "fiammingo"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filippino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finlandese"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francese"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francese canadese"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francese svizzero"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisone occidentale"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fulah"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaelico scozzese"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galiziano"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "gallese"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "giapponese"
+ },
+ "el": {
+ "code": "el",
+ "name": "greco"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesiano"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglese"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglese americano"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglese australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglese britannico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglese canadese"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandese"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandese"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fony"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazako"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "lettone"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "lussemburghese"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedone"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malese"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgascio"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavo"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongolo"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele del nord"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalese"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngamambo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norvegese bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norvegese nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "olandese"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persiano"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polacco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portoghese"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portoghese brasiliano"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portoghese europeo"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabi"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romancio"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumeno"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "russo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami del nord"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbo"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "singalese"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovacco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "sloveno"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalo"
+ },
+ "es": {
+ "code": "es",
+ "name": "spagnolo"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "spagnolo europeo"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "spagnolo messicano"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "svedese"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight del Marocco standard"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhit"
+ },
+ "de": {
+ "code": "de",
+ "name": "tedesco"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "tedesco austriaco"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "tedesco svizzero"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "thai"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrino"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongano"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraino"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uiguro"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ungherese"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "usbeco"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ja.json b/library/intl/resources/language/ja.json
new file mode 100644
index 000000000..65ecee180
--- /dev/null
+++ b/library/intl/resources/language/ja.json
@@ -0,0 +1,738 @@
+{
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "is": {
+ "code": "is",
+ "name": "アイスランド語"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "アイルランド語"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "アカン語"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "アゲム語"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "アストゥリアス語"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "アス語"
+ },
+ "az": {
+ "code": "az",
+ "name": "アゼルãƒã‚¤ã‚¸ãƒ£ãƒ³èªž"
+ },
+ "af": {
+ "code": "af",
+ "name": "アフリカーンス語"
+ },
+ "am": {
+ "code": "am",
+ "name": "アムãƒãƒ©èªž"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "アメリカ英語"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "アラビア語"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "アルãƒãƒ‹ã‚¢èªž"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "アルメニア語"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "イギリス英語"
+ },
+ "it": {
+ "code": "it",
+ "name": "イタリア語"
+ },
+ "id": {
+ "code": "id",
+ "name": "インドãƒã‚·ã‚¢èªž"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "ヴァイ語"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "ヴァリス語"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ウイグル語"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "ウェールズ語"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ウクライナ語"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "ウズベク語"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ウルドゥー語"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "ヴンジョ語"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "エウェ語"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "エウォンド語"
+ },
+ "et": {
+ "code": "et",
+ "name": "エストニア語"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "エスペラント語"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "エンブ語"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "オーストラリア英語"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "オランダ語"
+ },
+ "or": {
+ "code": "or",
+ "name": "オリヤー語"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "カーボベルデ・クレオール語"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "カザフ語"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "カシミール語"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "カタロニア語"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "カナダ英語"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "カビル語"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "ガリシア語"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "カレンジン語"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ガンダ語"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "カンナダ語"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "カンãƒèªž"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "キクユ語"
+ },
+ "el": {
+ "code": "el",
+ "name": "ギリシャ語"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "キルギス語"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "グシイ語"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "グジャラート語"
+ },
+ "km": {
+ "code": "km",
+ "name": "クメール語"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "グリーンランド語"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "グルジア語"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "クロアãƒã‚¢èªž"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "クワシオ語"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "ケルン語"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "コイラ・ãƒãƒ¼ãƒ‹èªž"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "コイラボロ・センニ語"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "コンゴ・スワヒリ語"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "ザルマ語"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "サング語"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "サンゴ語"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "サンãƒãƒ¼èªž"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "サンブル語"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "ショナ語"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "ジョラï¼ãƒ•ã‚©ãƒ‹ã‚£èªž"
+ },
+ "si": {
+ "code": "si",
+ "name": "シンãƒãƒ©èªž"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "スイスドイツ語"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "スウェーデン語"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "ズールー語"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "スコットランド・ゲール語"
+ },
+ "es": {
+ "code": "es",
+ "name": "スペイン語"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "スペイン語(イベリアåŠå³¶)"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "スロãƒã‚­ã‚¢èªž"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "スロベニア語"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "スワヒリ語"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "セナ語"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "セルビア語"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "ソガ語"
+ },
+ "so": {
+ "code": "so",
+ "name": "ソマリ語"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "ゾンカ語"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "タイタ語"
+ },
+ "th": {
+ "code": "th",
+ "name": "タイ語"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "タサワク語"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "タシルãƒã‚¤ãƒˆèªž"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "タマージク語(モロッコ公用語)"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "タミル語"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ãƒã‚§ã‚³èªž"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "ãƒã‚§ãƒ­ã‚­ãƒ¼èªž"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "ãƒã‚¬èªž"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "ãƒãƒ™ãƒƒãƒˆèªž"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "ティグリニア語"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "テソ語"
+ },
+ "te": {
+ "code": "te",
+ "name": "テルグ語"
+ },
+ "da": {
+ "code": "da",
+ "name": "デンマーク語"
+ },
+ "de": {
+ "code": "de",
+ "name": "ドイツ語"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "トルコ語"
+ },
+ "to": {
+ "code": "to",
+ "name": "トンガ語"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "ナマ語"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "ニャンコレ語"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "ヌエル語"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "ãƒãƒ‘ール語"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "ノルウェー語(ニーノシュク)"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "ノルウェー語(ブークモール)"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "ãƒã‚¦ã‚µèªž"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "ãƒã‚µèªž"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "パシュトゥー語"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "ãƒã‚¹ã‚¯èªž"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "ãƒãƒ•ã‚£ã‚¢èªž"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ãƒãƒ³ã‚¬ãƒªãƒ¼èªž"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "パンジャブ語"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "ãƒãƒ³ãƒãƒ©èªž"
+ },
+ "my": {
+ "code": "my",
+ "name": "ビルマ語"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "ヒンディー語"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "フィリピノ語"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "フィンランド語"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "フェロー語"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "フラニ語"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "フランス語"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "フリウリ語"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ブルガリア語"
+ },
+ "br": {
+ "code": "br",
+ "name": "ブルトン語"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "フレミッシュ語"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ベトナム語"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "ベナ語"
+ },
+ "he": {
+ "code": "he",
+ "name": "ヘブライ語"
+ },
+ "be": {
+ "code": "be",
+ "name": "ベラルーシ語"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "ペルシア語"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "ベンガル語"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "ãƒãƒ¼ãƒ©ãƒ³ãƒ‰èªž"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "ボスニア語"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "ボド語"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "ãƒãƒ«ãƒˆã‚¬ãƒ«èªž"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "ãƒãƒ«ãƒˆã‚¬ãƒ«èªž(イベリアåŠå³¶)"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "マクア・ミート語"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "マケドニア語"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "マコンデ語"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "マサイ語"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "マダガスカル語"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "マãƒãƒ£ãƒ¡èªž"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "マラーティー語"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "マラヤーラム語"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "マルタ語"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "マレー語"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "ムンダン語"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "メル語"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "モーリシャス・クレオール語"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "モルダビア語"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "モンゴル語"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "ヤンベン語"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ヨルãƒèªž"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "ラオ語"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "ラトビア語"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "ランギ語"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "リトアニア語"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "リンガラ語"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "ルーマニア語"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "ルオ語"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "ルクセンブルク語"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "ルãƒãƒ»ã‚«ã‚¿ãƒ³ã‚¬èªž"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "ルヒヤ語"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "ルワ語"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "ルンディ語"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ロシア語"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "ロマンシュ語"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "ロンボ語"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ンゴンãƒèªž"
+ },
+ "en": {
+ "code": "en",
+ "name": "英語"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "簡体中国語"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "韓国語"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ç¾ä»£æ¨™æº–アラビア語"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "上ソルビア語"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "西フリジア語"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "中央アトラス・タマジクト語"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "中国語"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "低ソルビア語"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "日本語"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "ç¹ä½“中国語"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "標準ドイツ語(スイス)"
+ },
+ "se": {
+ "code": "se",
+ "name": "北サーミ語"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "北ンデベレ語"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/jgo.json b/library/intl/resources/language/jgo.json
new file mode 100644
index 000000000..3e8302ae7
--- /dev/null
+++ b/library/intl/resources/language/jgo.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Alâbɛ"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amharic"
+ },
+ "en": {
+ "code": "en",
+ "name": "Aŋgɛlúshi"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "be": {
+ "code": "be",
+ "name": "Belarusian"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengali"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgarian"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burmese"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Czech"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Dutch"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Fɛlánci"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hungarian"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indonesian"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "it": {
+ "code": "it",
+ "name": "Italian"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japanese"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "km": {
+ "code": "km",
+ "name": "Khmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Korean"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Malay"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ndaꞌa"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepali"
+ },
+ "de": {
+ "code": "de",
+ "name": "Njáman"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "el": {
+ "code": "el",
+ "name": "Ŋgɛlɛ̂k"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Persian"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Polish"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portuguese"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Punjabi"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Romanian"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Russian"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Shinwâ"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somali"
+ },
+ "es": {
+ "code": "es",
+ "name": "Spanish"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Swedish"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "Thai"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Turkish"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukrainian"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vietnamese"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/jmc.json b/library/intl/resources/language/jmc.json
new file mode 100644
index 000000000..328450431
--- /dev/null
+++ b/library/intl/resources/language/jmc.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Kiakanyi"
+ },
+ "am": {
+ "code": "am",
+ "name": "Kiamharyi"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Kimachame"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Kyiajemi"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Kyiarabu"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Kyibangla"
+ },
+ "be": {
+ "code": "be",
+ "name": "Kyibelarusi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Kyibulgaryia"
+ },
+ "my": {
+ "code": "my",
+ "name": "Kyiburma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Kyichecki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Kyichina"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Kyifaransa"
+ },
+ "el": {
+ "code": "el",
+ "name": "Kyigiriki"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Kyihausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Kyihindi"
+ },
+ "es": {
+ "code": "es",
+ "name": "Kyihispania"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Kyiholanzi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Kyihungari"
+ },
+ "id": {
+ "code": "id",
+ "name": "Kyiindonesia"
+ },
+ "it": {
+ "code": "it",
+ "name": "Kyiitaliano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Kyijapani"
+ },
+ "de": {
+ "code": "de",
+ "name": "Kyijerumani"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kyikambodia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Kyikorea"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Kyimalesia"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Kyinepali"
+ },
+ "en": {
+ "code": "en",
+ "name": "Kyingereza"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Kyipolandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Kyipunjabi"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Kyireno"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Kyiromania"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Kyirusi"
+ },
+ "so": {
+ "code": "so",
+ "name": "Kyisomalyi"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Kyiswidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Kyitailandi"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Kyitamil"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Kyiturukyi"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Kyiukrania"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Kyiurdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Kyivietinamu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Kyiyoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Kyizulu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ka.json b/library/intl/resources/language/ka.json
new file mode 100644
index 000000000..e651e5028
--- /dev/null
+++ b/library/intl/resources/language/ka.json
@@ -0,0 +1,738 @@
+{
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "áƒáƒ•áƒ¡áƒ¢áƒ áƒáƒšáƒ˜áƒ£áƒ áƒ˜ ინგლისური"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "áƒáƒ•áƒ¡áƒ¢áƒ áƒ˜áƒ£áƒšáƒ˜ გერმáƒáƒœáƒ£áƒšáƒ˜"
+ },
+ "az": {
+ "code": "az",
+ "name": "áƒáƒ–ერბáƒáƒ˜áƒ¯áƒáƒœáƒ£áƒšáƒ˜"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "áƒáƒ™áƒáƒœáƒ˜"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "áƒáƒšáƒ‘áƒáƒœáƒ£áƒ áƒ˜"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "áƒáƒ›áƒ”რიკული ინგლისური"
+ },
+ "am": {
+ "code": "am",
+ "name": "áƒáƒ›áƒ°áƒáƒ áƒ£áƒšáƒ˜"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "áƒáƒ áƒáƒ‘ული"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "áƒáƒ¡áƒ¢áƒ£áƒ áƒ˜áƒ£áƒšáƒ˜"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "áƒáƒ¡áƒ£"
+ },
+ "af": {
+ "code": "af",
+ "name": "áƒáƒ¤áƒ áƒ˜áƒ™áƒáƒáƒœáƒ¡áƒ˜"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "áƒáƒ¦áƒ”მი"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "ბáƒáƒ›áƒ‘áƒáƒ áƒ"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "ბáƒáƒ¡áƒ"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "ბáƒáƒ¡áƒ™áƒ£áƒ áƒ˜"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "ბáƒáƒ¤áƒ˜áƒ"
+ },
+ "be": {
+ "code": "be",
+ "name": "ბელáƒáƒ áƒ£áƒ¡áƒ£áƒšáƒ˜"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "ბენáƒ"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "ბენგáƒáƒšáƒ£áƒ áƒ˜"
+ },
+ "el": {
+ "code": "el",
+ "name": "ბერძნული"
+ },
+ "my": {
+ "code": "my",
+ "name": "ბირმული"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "ბáƒáƒ“áƒ"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "ბáƒáƒ¡áƒœáƒ˜áƒ£áƒ áƒ˜"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "ბრáƒáƒ–ილიური პáƒáƒ áƒ¢áƒ£áƒ’áƒáƒšáƒ˜áƒ£áƒ áƒ˜"
+ },
+ "br": {
+ "code": "br",
+ "name": "ბრეტáƒáƒœáƒ£áƒšáƒ˜"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "ბრიტáƒáƒœáƒ£áƒšáƒ˜ ინგლისური"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ბულგáƒáƒ áƒ£áƒšáƒ˜"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "გáƒáƒšáƒ˜áƒ¡áƒ˜áƒ£áƒ áƒ˜"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "გáƒáƒ›áƒáƒ áƒ¢áƒ˜áƒ•áƒ”ბული ჩინური"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "გáƒáƒœáƒ“áƒ"
+ },
+ "de": {
+ "code": "de",
+ "name": "გერმáƒáƒœáƒ£áƒšáƒ˜"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "გუსიი"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "გუჯáƒáƒ áƒáƒ—ი"
+ },
+ "da": {
+ "code": "da",
+ "name": "დáƒáƒœáƒ˜áƒ£áƒ áƒ˜"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "დáƒáƒ¡áƒáƒ•áƒšáƒ”თ გრენლáƒáƒœáƒ“იური"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "დáƒáƒ¡áƒáƒ•áƒšáƒ”თფრიზიული"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "დიáƒáƒšáƒ"
+ },
+ "he": {
+ "code": "he",
+ "name": "ებრáƒáƒ£áƒšáƒ˜"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ევე"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ევáƒáƒœáƒ“áƒ"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "ევრáƒáƒžáƒ£áƒšáƒ˜ ესპáƒáƒœáƒ£áƒ áƒ˜"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "ევრáƒáƒžáƒ£áƒšáƒ˜ პáƒáƒ áƒ¢áƒ£áƒ’áƒáƒšáƒ˜áƒ£áƒ áƒ˜"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "ემბუ"
+ },
+ "es": {
+ "code": "es",
+ "name": "ესპáƒáƒœáƒ£áƒ áƒ˜"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "ესპერáƒáƒœáƒ¢áƒ"
+ },
+ "et": {
+ "code": "et",
+ "name": "ესტáƒáƒœáƒ£áƒ áƒ˜"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "ვáƒáƒ˜"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ვიეტნáƒáƒ›áƒ£áƒ áƒ˜"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "ვუნჯáƒ"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "ზáƒáƒ áƒ›áƒ"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "ზემáƒáƒ¡áƒáƒ áƒ‘ული"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "ზულუ"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "თáƒáƒœáƒáƒ›áƒ”დრáƒáƒ•áƒ” სტáƒáƒœáƒ“áƒáƒ áƒ¢áƒ£áƒšáƒ˜ áƒáƒ áƒáƒ‘ული"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "თიგრინიáƒ"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "თურქული"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "იáƒáƒžáƒáƒœáƒ£áƒ áƒ˜"
+ },
+ "en": {
+ "code": "en",
+ "name": "ინგლისური"
+ },
+ "id": {
+ "code": "id",
+ "name": "ინდáƒáƒœáƒ”ზიური"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "იáƒáƒ áƒ£áƒ‘áƒ"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "ირლáƒáƒœáƒ“იური"
+ },
+ "is": {
+ "code": "is",
+ "name": "ისლáƒáƒœáƒ“იური"
+ },
+ "it": {
+ "code": "it",
+ "name": "იტáƒáƒšáƒ˜áƒ£áƒ áƒ˜"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "კáƒáƒ‘ილური"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "კáƒáƒ‘უვერდიáƒáƒœáƒ£"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "კáƒáƒšáƒ”ნჯინი"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "კáƒáƒ›áƒ‘áƒ"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "კáƒáƒœáƒáƒ“áƒ"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "კáƒáƒœáƒáƒ“ური ინგლისური"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "კáƒáƒœáƒáƒ“ური ფრáƒáƒœáƒ’ული"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "კáƒáƒ¢áƒáƒšáƒáƒœáƒ£áƒ áƒ˜"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "კვáƒáƒ¡áƒ˜áƒ"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "კიკუიუ"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "კიმáƒáƒ¨áƒáƒ›áƒ˜"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "კáƒáƒ˜áƒ áƒ-ჩიინი"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "კáƒáƒ˜áƒ áƒáƒ‘áƒáƒ áƒ-სენი"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "კáƒáƒœáƒ’áƒáƒ¡ სუáƒáƒ°áƒ˜áƒšáƒ˜"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "კáƒáƒ áƒ”ული"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "ლáƒáƒœáƒ’ი"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "ლáƒáƒáƒ¡áƒ£áƒ áƒ˜"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "ლáƒáƒ¢áƒ•áƒ˜áƒ£áƒ áƒ˜"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "ლინგáƒáƒšáƒ"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "ლიტვური"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "ლუბáƒ-კáƒáƒ¢áƒáƒœáƒ’áƒ"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "ლუáƒ"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "ლუქსემბურგული"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "ლუჰიáƒ"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "მáƒáƒ™áƒ”დáƒáƒœáƒ£áƒ áƒ˜"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "მáƒáƒ™áƒáƒœáƒ“ე"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "მáƒáƒšáƒáƒ’áƒáƒ¡áƒ˜áƒ£áƒ áƒ˜"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "მáƒáƒšáƒáƒ˜áƒáƒšáƒáƒ›áƒ£áƒ áƒ˜"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "მáƒáƒšáƒáƒ˜áƒ£áƒ áƒ˜"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "მáƒáƒšáƒ¢áƒ£áƒ áƒ˜"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "მáƒáƒ áƒáƒ—ჰი"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "მáƒáƒ¡áƒáƒ˜"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "მáƒáƒ¥áƒ£áƒ•áƒ-მეეტáƒ"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "მერუ"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "მექსიკური ესპáƒáƒœáƒ£áƒ áƒ˜"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "მáƒáƒšáƒ“áƒáƒ•áƒ£áƒ áƒ˜"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "მáƒáƒœáƒ¦áƒáƒšáƒ£áƒ áƒ˜"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "მáƒáƒ áƒ˜áƒ¡áƒ˜áƒ”ნი"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "მუნდáƒáƒœáƒ’ი"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "ნáƒáƒ›áƒ"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ნგáƒáƒ›áƒ‘áƒ"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "ნეპáƒáƒšáƒ£áƒ áƒ˜"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "ნიáƒáƒœáƒ™áƒáƒšáƒ”"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ნიდერლáƒáƒœáƒ“ური"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "ნáƒáƒ áƒ•áƒ”გიული ბუკმáƒáƒšáƒ˜"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "ნáƒáƒ áƒ•áƒ”გიული ნიუნáƒáƒ áƒ¡áƒ™áƒ˜"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "ნუერი"
+ },
+ "or": {
+ "code": "or",
+ "name": "áƒáƒ áƒ˜áƒ"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "პენჯáƒáƒ‘ური"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "პáƒáƒšáƒáƒœáƒ£áƒ áƒ˜"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "პáƒáƒ áƒ¢áƒ£áƒ’áƒáƒšáƒ˜áƒ£áƒ áƒ˜"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "პუშტუ"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "რეტáƒáƒ áƒáƒ›áƒáƒœáƒ£áƒšáƒ˜"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "რáƒáƒ›áƒ‘áƒ"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "რუáƒ"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "რუმინული"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "რუნდი"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "რუსული"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "სáƒáƒ›áƒ‘ურუ"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "სáƒáƒœáƒ’áƒ"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "სáƒáƒœáƒ’უ"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "სენáƒ"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "სერბული"
+ },
+ "si": {
+ "code": "si",
+ "name": "სინჰáƒáƒšáƒ£áƒ áƒ˜"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "სლáƒáƒ•áƒáƒ™áƒ£áƒ áƒ˜"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "სლáƒáƒ•áƒ”ნური"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "სáƒáƒ’áƒ"
+ },
+ "so": {
+ "code": "so",
+ "name": "სáƒáƒ›áƒáƒšáƒ˜áƒ£áƒ áƒ˜"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "სáƒáƒ›áƒ®áƒ£áƒ áƒ˜"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "სპáƒáƒ áƒ¡áƒ£áƒšáƒ˜"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "სტáƒáƒœáƒ“áƒáƒ áƒ¢áƒ£áƒšáƒ˜ მáƒáƒ áƒáƒ™áƒáƒ£áƒšáƒ˜ ტáƒáƒ›áƒáƒ–იგხტი"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "სუáƒáƒ°áƒ˜áƒšáƒ˜"
+ },
+ "th": {
+ "code": "th",
+ "name": "ტáƒáƒ˜"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "ტáƒáƒ˜áƒ¢áƒ"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "ტáƒáƒ›áƒ˜áƒšáƒ£áƒ áƒ˜"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "ტáƒáƒ¡áƒáƒ•áƒáƒ¥áƒ˜"
+ },
+ "te": {
+ "code": "te",
+ "name": "ტელუგუ"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "ტესáƒ"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "ტიბეტური"
+ },
+ "to": {
+ "code": "to",
+ "name": "ტáƒáƒœáƒ’áƒáƒœáƒ£áƒ áƒ˜"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "ტრáƒáƒ“იციული ჩინური"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "უელსური"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "უზბეკური"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "უიღურული"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "უკრáƒáƒ˜áƒœáƒ£áƒšáƒ˜"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "უნგრული"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ურდუ"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "ფáƒáƒ áƒ”რული"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "ფილიპინური"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "ფინური"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "ფლáƒáƒ›áƒáƒœáƒ“იური"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "ფრáƒáƒœáƒ’ული"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "ფრიულური"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "ქáƒáƒ áƒ—ული"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "ქáƒáƒ¨áƒ›áƒ˜áƒ áƒ£áƒšáƒ˜"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "ქვემáƒáƒ¡áƒáƒ áƒ‘ული"
+ },
+ "km": {
+ "code": "km",
+ "name": "ქმერული"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "ყáƒáƒ–áƒáƒ®áƒ£áƒ áƒ˜"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "ყირგიზული"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "შáƒáƒ›áƒ‘áƒáƒšáƒ"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "შვედური"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "შვეიცáƒáƒ áƒ˜áƒ£áƒšáƒ˜ გერმáƒáƒœáƒ£áƒšáƒ˜"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "შვეიცáƒáƒ áƒ˜áƒ£áƒšáƒ˜ ზემáƒáƒ’ერმáƒáƒœáƒ£áƒšáƒ˜"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "შვეიცáƒáƒ áƒ˜áƒ£áƒšáƒ˜ ფრáƒáƒœáƒ’ული"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "შილჰáƒ"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "შáƒáƒœáƒ"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "შáƒáƒ¢áƒšáƒáƒœáƒ“იური გელური"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "ჩერáƒáƒ™áƒ˜"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ჩეხური"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "ჩიგáƒ"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "ჩინური"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ჩრდილáƒáƒ”თ ნდებელე"
+ },
+ "se": {
+ "code": "se",
+ "name": "ჩრდილáƒáƒ”თ სáƒáƒáƒ›áƒ£áƒ áƒ˜"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "ცენტრáƒáƒšáƒ£áƒ áƒ˜ მáƒáƒ áƒáƒ™áƒáƒ¡ ტáƒáƒ›áƒáƒ–იგხტი"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "ძáƒáƒœáƒ’კხáƒ"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "ხáƒáƒ áƒ•áƒáƒ¢áƒ£áƒšáƒ˜"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "ჰáƒáƒ£áƒ¡áƒ"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "ჰინდი"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/kab.json b/library/intl/resources/language/kab.json
new file mode 100644
index 000000000..755d88b1a
--- /dev/null
+++ b/library/intl/resources/language/kab.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Tabengalit"
+ },
+ "be": {
+ "code": "be",
+ "name": "Tabilarusit"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Tabulgarit"
+ },
+ "my": {
+ "code": "my",
+ "name": "Taburmisit"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Tabyiá¹­namit"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "TaÄikit"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Tacinwat, Tamundarint"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "TaduÄit"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Taɛrabt"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Tafarisit"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Tafransist"
+ },
+ "en": {
+ "code": "en",
+ "name": "Taglizit"
+ },
+ "el": {
+ "code": "el",
+ "name": "Tagrikit"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Tahendit"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Tahungarit"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Tahwasit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Tajapunit"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Takanit"
+ },
+ "km": {
+ "code": "km",
+ "name": "Takemrit"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Takurit"
+ },
+ "de": {
+ "code": "de",
+ "name": "Talmant"
+ },
+ "am": {
+ "code": "am",
+ "name": "Tamahrict"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Tamalawit"
+ },
+ "id": {
+ "code": "id",
+ "name": "Tandunisit"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Tanipalit"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Tapulunit"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Tapunjabit"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Tapurtugalit"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Taqbaylit"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Tarumanit"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Tarusit"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "es": {
+ "code": "es",
+ "name": "Taspenyulit"
+ },
+ "so": {
+ "code": "so",
+ "name": "Taá¹£umalit"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Taswidit"
+ },
+ "it": {
+ "code": "it",
+ "name": "Taá¹­alyanit"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Taá¹­amulit"
+ },
+ "th": {
+ "code": "th",
+ "name": "Taá¹­aylundit"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Taá¹­urkit"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Tayurubit"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Tazulut"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Tukranit"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Turdut"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/kam.json b/library/intl/resources/language/kam.json
new file mode 100644
index 000000000..430da602b
--- /dev/null
+++ b/library/intl/resources/language/kam.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Kiajemi"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Kiakan"
+ },
+ "am": {
+ "code": "am",
+ "name": "Kiamhari"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Kiarabu"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Kibangla"
+ },
+ "be": {
+ "code": "be",
+ "name": "Kibelarusi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Kibulgaria"
+ },
+ "my": {
+ "code": "my",
+ "name": "Kiburma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Kichecki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Kichina"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Kifaransa"
+ },
+ "el": {
+ "code": "el",
+ "name": "Kigiriki"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Kihausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Kihindi"
+ },
+ "es": {
+ "code": "es",
+ "name": "Kihispania"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Kiholanzi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Kihungari"
+ },
+ "id": {
+ "code": "id",
+ "name": "Kiindonesia"
+ },
+ "it": {
+ "code": "it",
+ "name": "Kiitaliano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Kijapani"
+ },
+ "de": {
+ "code": "de",
+ "name": "Kijerumani"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kikamba"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kikambodia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Kikorea"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Kimalesia"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Kinepali"
+ },
+ "en": {
+ "code": "en",
+ "name": "Kingereza"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Kipolandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Kipunjabi"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Kireno"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Kiromania"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Kirusi"
+ },
+ "so": {
+ "code": "so",
+ "name": "Kisomali"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Kiswidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Kitailandi"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Kitamil"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Kituruki"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Kiukrania"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Kiurdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Kivietinamu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Kiyoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Kizulu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/kde.json b/library/intl/resources/language/kde.json
new file mode 100644
index 000000000..e41132377
--- /dev/null
+++ b/library/intl/resources/language/kde.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Chakan"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Chalabu"
+ },
+ "am": {
+ "code": "am",
+ "name": "Chamhali"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Chiajemi"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Chibangla"
+ },
+ "be": {
+ "code": "be",
+ "name": "Chibelalusi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Chibulgalia"
+ },
+ "my": {
+ "code": "my",
+ "name": "Chibulma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Chichechi"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Chichina"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Chidyapani"
+ },
+ "de": {
+ "code": "de",
+ "name": "Chidyelumani"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Chifalansa"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "el": {
+ "code": "el",
+ "name": "Chigilichi"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Chihausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Chihindi"
+ },
+ "es": {
+ "code": "es",
+ "name": "Chihispania"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Chiholanzi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Chihungali"
+ },
+ "en": {
+ "code": "en",
+ "name": "Chiingeleza"
+ },
+ "id": {
+ "code": "id",
+ "name": "Chiiongonesia"
+ },
+ "it": {
+ "code": "it",
+ "name": "Chiitaliano"
+ },
+ "km": {
+ "code": "km",
+ "name": "Chikambodia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Chikolea"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Chileno"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Chilomania"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Chilusi"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Chimakonde"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Chimalesia"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Chinepali"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Chipolandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Chipunjabi"
+ },
+ "so": {
+ "code": "so",
+ "name": "Chisomali"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Chiswidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Chitailandi"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Chitamil"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Chituluchi"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Chiuklania"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Chiuldu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Chivietinamu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Chiyoluba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Chizulu"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/kea.json b/library/intl/resources/language/kea.json
new file mode 100644
index 000000000..a5a2671c5
--- /dev/null
+++ b/library/intl/resources/language/kea.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaner"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanes"
+ },
+ "de": {
+ "code": "de",
+ "name": "alimãu"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alimãu austriaku"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alimãu di Suisa"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "altu alimãu suisu"
+ },
+ "am": {
+ "code": "am",
+ "name": "amariku"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabi"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "arabi mudernu"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "arméniu"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "auza"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaijanu"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "basku"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorusu"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmanes"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosniu"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretãu"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgaru"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "da": {
+ "code": "da",
+ "name": "dinamarkes"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzonka"
+ },
+ "he": {
+ "code": "he",
+ "name": "ebraiku"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "eve"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "faroes"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipinu"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finlandes"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamengu"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "franses"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "franses kanadianu"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "franses suisu"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frisiu osidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galegu"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "gales"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "el": {
+ "code": "el",
+ "name": "gregu"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "indi"
+ },
+ "id": {
+ "code": "id",
+ "name": "indoneziu"
+ },
+ "en": {
+ "code": "en",
+ "name": "ingles"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "ingles australianu"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "ingles britanuku"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "ingles kanadianu"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "ingles merkanu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ioruba"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandes"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandes"
+ },
+ "it": {
+ "code": "it",
+ "name": "italianu"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japones"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "jorjianu"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kanares"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalãu"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kaxmira"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazak"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgiz"
+ },
+ "km": {
+ "code": "km",
+ "name": "kmer"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "kroata"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "kureanu"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "lausianu"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letãu"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituanes"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburges"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malaialam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malaiu"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgaxi"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltes"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marati"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "masedoniu"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "matxame"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepales"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ñomba"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norueges bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norueges nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "olandes"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "pandjabi"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "paxto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "pulaku"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "purtuges"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "purtuges brazileru"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "purtuges europeu"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romanxi"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumenu"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "rusu"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "sérviu"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "singales"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovaku"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "sloveniu"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somali"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sórbiu altu"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sórbiu baxu"
+ },
+ "es": {
+ "code": "es",
+ "name": "spanhol"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "spanhol europeu"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "spanhol mexikanu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "sperantu"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "et": {
+ "code": "et",
+ "name": "stonianu"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "suaíli"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "suaíli di Kongu"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueku"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandes"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetanu"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinia"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonganes"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turku"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "txeku"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukranianu"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "úngaru"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeki"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "xeroki"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "xiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "xines"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "xines simplifikadu"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "xines tradisional"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/khq.json b/library/intl/resources/language/khq.json
new file mode 100644
index 000000000..f38afa86d
--- /dev/null
+++ b/library/intl/resources/language/khq.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan senni"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "de": {
+ "code": "de",
+ "name": "Almaŋ senni"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amhaarik senni"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "be": {
+ "code": "be",
+ "name": "Belaruus senni"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengali senni"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulagaari senni"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burme senni"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Cek senni"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "es": {
+ "code": "es",
+ "name": "Espaaɲe senni"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Farsi senni"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Fransee senni"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "el": {
+ "code": "el",
+ "name": "Grek senni"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hawsance senni"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Holandee senni"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hungaari senni"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indoneesi senni"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Induu senni"
+ },
+ "en": {
+ "code": "en",
+ "name": "Inglisi senni"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "it": {
+ "code": "it",
+ "name": "Itaali senni"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japonee senni"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Julu senni"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kmeer senni, Game here"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Koree senni"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra ciini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Laaraw senni"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Maleezi senni"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Neepal senni"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Polonee senni"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portugee senni"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Punjaabi sennii"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Rumaani senni"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Ruusi senni"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Sinuwa senni, Mandareŋ"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somaali senni"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Suweede senni"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "th": {
+ "code": "th",
+ "name": "Taailandu senni"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamil senni"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Turku senni"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukreen senni"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu senni"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vietnaam senni"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yorbance senni"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ki.json b/library/intl/resources/language/ki.json
new file mode 100644
index 000000000..6466bcf24
--- /dev/null
+++ b/library/intl/resources/language/ki.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Gikuyu"
+ },
+ "en": {
+ "code": "en",
+ "name": "Gĩthungũ"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Kiajemi"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Kiakan"
+ },
+ "am": {
+ "code": "am",
+ "name": "Kiamhari"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "KÄ©arabu"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Kibangla"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "KÄ©baranja"
+ },
+ "be": {
+ "code": "be",
+ "name": "Kibelarusi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Kibulgaria"
+ },
+ "my": {
+ "code": "my",
+ "name": "Kiburma"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "KÄ©caina"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Kichecki"
+ },
+ "so": {
+ "code": "so",
+ "name": "Kĩcumarĩ"
+ },
+ "el": {
+ "code": "el",
+ "name": "Kigiriki"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Kihausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Kĩhĩndĩ"
+ },
+ "es": {
+ "code": "es",
+ "name": "Kihispania"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Kiholanzi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Kihungari"
+ },
+ "id": {
+ "code": "id",
+ "name": "Kiindonesia"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kikambodia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Kikorea"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Kimalesia"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Kinepali"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "KÄ©njabani"
+ },
+ "de": {
+ "code": "de",
+ "name": "KÄ©njeremani"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Kipolandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Kipunjabi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "KÄ©racia"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Kireno"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Kiromania"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Kiswidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Kitailandi"
+ },
+ "it": {
+ "code": "it",
+ "name": "KÄ©taliano"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Kitamil"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Kituruki"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Kiukrania"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Kiurdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Kivietinamu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Kiyoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Kizulu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/kk.json b/library/intl/resources/language/kk.json
new file mode 100644
index 000000000..ea44442f7
--- /dev/null
+++ b/library/intl/resources/language/kk.json
@@ -0,0 +1,738 @@
+{
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "авÑтралиÑлық ағылшын тілі"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "авÑтриÑлық Ð½ÐµÐ¼Ñ–Ñ Ñ‚Ñ–Ð»Ñ–"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "агхем"
+ },
+ "en": {
+ "code": "en",
+ "name": "ағылшын тілі"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "акан"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "албан"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "американдық ағылшын тілі"
+ },
+ "am": {
+ "code": "am",
+ "name": "амхар"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "араб тілі"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "армÑн тілі"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "аÑу"
+ },
+ "af": {
+ "code": "af",
+ "name": "африкаанÑ"
+ },
+ "az": {
+ "code": "az",
+ "name": "әзірбайжан тілі"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "бамбара"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "баÑк"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Ð±Ð°Ñ‚Ñ‹Ñ Ñ„Ñ€Ð¸Ð·"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "бафиа"
+ },
+ "be": {
+ "code": "be",
+ "name": "Ð±ÐµÐ»Ð°Ñ€ÑƒÑ Ñ‚Ñ–Ð»Ñ–"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "бена"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "бенгал тілі"
+ },
+ "my": {
+ "code": "my",
+ "name": "бирман"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "бодо тілі"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "болгар тілі"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "боÑÐ½Ð¸Ñ Ñ‚Ñ–Ð»Ñ–"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "бразилиÑлық португал тілі"
+ },
+ "br": {
+ "code": "br",
+ "name": "бретон тілі"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "британиÑлық ағылшын тілі"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "вай"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "валлий"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "венгер"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "вунджо"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "вьетнам"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "гали"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ганда"
+ },
+ "el": {
+ "code": "el",
+ "name": "грек тілі"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "грузин тілі"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "гуджарати"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "гуÑии"
+ },
+ "da": {
+ "code": "da",
+ "name": "дат"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "дәÑтүрлі қытай тілі"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "дзонг-кÑ"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "диола"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "ембу"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "еуропалық португал тілі"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "жапон тілі"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "жеңілдетілген қытай тілі"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "жоғарғы лужица"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "зарма"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "зулу"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "ибериÑлық иÑпан тілі"
+ },
+ "he": {
+ "code": "he",
+ "name": "иврит"
+ },
+ "id": {
+ "code": "id",
+ "name": "индонез тілі"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "ирланд тілі"
+ },
+ "is": {
+ "code": "is",
+ "name": "иÑланд"
+ },
+ "es": {
+ "code": "es",
+ "name": "иÑпан тілі"
+ },
+ "it": {
+ "code": "it",
+ "name": "итальÑн тілі"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "йоруба"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "кабил"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "кабувердиана"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "калаалиÑут"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "каленжин"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "камба"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "канадалық ағылшын тілі"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "канадалық француз тілі"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "каннада"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "каталан"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "кашмир тілі"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "ÐºÓ™Ñ€Ñ–Ñ Ñ‚Ñ–Ð»Ñ–"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "кваÑио"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "кига"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "кикуйю"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "койра чини"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "койраборо Ñенни"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "конго Ñуахили тілі"
+ },
+ "km": {
+ "code": "km",
+ "name": "кхмер"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "қазақ тілі"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "қазіргі Ñтандартты араб тілі"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "қырғыз тілі"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "қытай тілі"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "ланги тілі"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Ð»Ð°Ð¾Ñ Ñ‚Ñ–Ð»Ñ–"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "латыш тілі"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "лингала"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "литва тілі"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "луба-катанга"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "луо"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "лухиа"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "люкÑембург"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "македон тілі"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "маконде"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "макуа-меетто"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "малагаÑи"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "малай"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "малайÑлам"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "мальта"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "маратхи"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "марокколық Ñтандартты тамазигхт"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "маÑай"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "мачаме"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "мекÑикалық иÑпан тілі"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "меру"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "молдован тілі"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "моңғол тілі"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "мориÑиен"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "мунданг"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "нама"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "нгомба"
+ },
+ "de": {
+ "code": "de",
+ "name": "Ð½ÐµÐ¼Ñ–Ñ Ñ‚Ñ–Ð»Ñ–"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Ð½ÐµÐ¼Ñ–Ñ Ñ‚Ñ–Ð»Ñ–Ð½Ñ–Ò£ швейцариÑлық диалекті"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "непал"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "нианколе"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "нидерланд тілі"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "норвегиÑлық букмол"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "норвегиÑлық нинорÑк"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "нуер"
+ },
+ "or": {
+ "code": "or",
+ "name": "ориÑ"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "орталық Ð°Ñ‚Ð»Ð°Ñ Ñ‚Ð°Ð¼Ð°Ñагихт тілі"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Ð¾Ñ€Ñ‹Ñ Ñ‚Ñ–Ð»Ñ–"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "өзбек"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "парÑÑ‹ тілі"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "пенджаб"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "полÑк тілі"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "португал тілі"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "пушту"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "романш"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "ромбо"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "руа"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "румын"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "рунди"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Ñамбуру"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Ñанго"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Ñангу"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Ñена"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Ñерб тілі"
+ },
+ "si": {
+ "code": "si",
+ "name": "Ñингал"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Ñловак"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Ñловен"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Ñога"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ÑолтүÑтік ндебел"
+ },
+ "se": {
+ "code": "se",
+ "name": "ÑолтүÑтік Ñами"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "СолтүÑтік ШотландиÑ"
+ },
+ "so": {
+ "code": "so",
+ "name": "Ñомали"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Ñуахили"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "таита"
+ },
+ "th": {
+ "code": "th",
+ "name": "тай"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "тамил"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "таÑавак"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "ташелхит"
+ },
+ "te": {
+ "code": "te",
+ "name": "телугу"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "теÑо"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "тибет тілі"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "тигриньÑ"
+ },
+ "to": {
+ "code": "to",
+ "name": "тонган"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "төменгі лужица тілі"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "түрік"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "украин тілі"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "урду"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ұйғыр тілі"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "фарер"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "филиппин"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "фин"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "фламанд тілі"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "француз тілі"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "хауÑа"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "хинди"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "хорват"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "чероки тілі"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "чех тілі"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "шамбала"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "швед"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "швейцариÑлық Ð½ÐµÐ¼Ñ–Ñ Ñ‚Ñ–Ð»Ñ–"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "швейцариÑлық француз тілі"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "шона"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ñве"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "ÑÑперанто"
+ },
+ "et": {
+ "code": "et",
+ "name": "ÑÑтон тілі"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/kl.json b/library/intl/resources/language/kl.json
new file mode 100644
index 000000000..ceacc33f0
--- /dev/null
+++ b/library/intl/resources/language/kl.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amharic"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabiamiusut"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "az": {
+ "code": "az",
+ "name": "aserbajdsjaniskisut"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "be": {
+ "code": "be",
+ "name": "Belarusian"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalimiutut"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgarian"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burmese"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estlandimiutut"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finlandimiutut"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "franskisut"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "el": {
+ "code": "el",
+ "name": "Greek"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebraimiutut"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindimiutut"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "hollandimiutut"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hungarian"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesiamiutut"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandimiutut"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandimiusut"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiamiutut"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japanimiusut"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "km": {
+ "code": "km",
+ "name": "Khmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "kineserisut"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "koreamiusut"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letlandimiutut"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "litauenimiutut"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malagassiskisut"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Malay"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepali"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pashtomiutut"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persiskisut"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polenimiutut"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugalimiutut"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Punjabi"
+ },
+ "da": {
+ "code": "da",
+ "name": "qallunaatut"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumænimiutut"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "russisut"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "savalimmiutut"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovakimiusut"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somali"
+ },
+ "es": {
+ "code": "es",
+ "name": "spanskisut"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "svenskisut"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahilimiutut"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "thailandimiutut"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "tjekkiamut"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "en": {
+ "code": "en",
+ "name": "tuluttut"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "tyrkiskisut"
+ },
+ "de": {
+ "code": "de",
+ "name": "tyskisut"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrainimiusut"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdumiutut"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamimiusut"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/kln.json b/library/intl/resources/language/kln.json
new file mode 100644
index 000000000..d0b5a0cda
--- /dev/null
+++ b/library/intl/resources/language/kln.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "kutitab Aka"
+ },
+ "am": {
+ "code": "am",
+ "name": "kutitab Amariek"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "kutitab Arabuk"
+ },
+ "be": {
+ "code": "be",
+ "name": "kutitab Belarusa"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "kutitab Bengali"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "kutitab Boa"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "kutitab Bulgaria"
+ },
+ "my": {
+ "code": "my",
+ "name": "kutitab Burma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "kutitab Chek"
+ },
+ "de": {
+ "code": "de",
+ "name": "kutitab Chermani"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "kutitab China"
+ },
+ "es": {
+ "code": "es",
+ "name": "kutitab Espianik"
+ },
+ "el": {
+ "code": "el",
+ "name": "kutitab Greece"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "kutitab Hangari"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "kutitab Hausa"
+ },
+ "id": {
+ "code": "id",
+ "name": "kutitab Indonesia"
+ },
+ "km": {
+ "code": "km",
+ "name": "kutitab Kher nebo Kwen"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "kutitab Kifaransa"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "kutitab Korea"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "kutitab Maindiik"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "kutitab Malay"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "kutitab Nepali"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "kutitab Persia"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "kutitab Portugal"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "kutitab Punjab"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "kutitab Romaniek"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "kutitab Russia"
+ },
+ "so": {
+ "code": "so",
+ "name": "kutitab Somaliek"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "kutitab Sweden"
+ },
+ "it": {
+ "code": "it",
+ "name": "kutitab Talianek"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "kutitab Tamil"
+ },
+ "th": {
+ "code": "th",
+ "name": "kutitab Thailand"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "kutitab Turkey"
+ },
+ "en": {
+ "code": "en",
+ "name": "kutitab Uingeresa"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "kutitab Ukraine"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "kutitab Urdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "kutitab Vietnam"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "kutitab Yoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "kutitab Zulu"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "kutitap Japan"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "kutitap Poland"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/km.json b/library/intl/resources/language/km.json
new file mode 100644
index 000000000..a3c64b503
--- /dev/null
+++ b/library/intl/resources/language/km.json
@@ -0,0 +1,738 @@
+{
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Atlas Tamazight កណ្ដាល"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "Sami ភាគ​ážáž¶áž„​ជើង"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "កន្នដ"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "កាážáž¶áž¡áž¶áž“"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "កាស្មៀរ"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "កាហ្សាក់ស្ážáž„់់"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "កូរ៉áŸ"
+ },
+ "el": {
+ "code": "el",
+ "name": "ក្រិច"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "ក្រូអាáž"
+ },
+ "km": {
+ "code": "km",
+ "name": "ážáŸ’មែរ"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "គៀរហ្គីស្ážáž„់"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "áž…áž·áž“"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "ចិន​អក្សរ​កាážáŸ‹"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "ចិន​អក្សរ​ពáŸáž‰"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ឆáŸáž€"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "ឆáŸážšáž¼áž‚ី"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ជប៉ុន"
+ },
+ "da": {
+ "code": "da",
+ "name": "ដាណឺម៉ាក"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "ážáž¶áž˜áž¸áž›"
+ },
+ "to": {
+ "code": "to",
+ "name": "ážáž»áž„ហ្គោ"
+ },
+ "te": {
+ "code": "te",
+ "name": "ážáŸáž›áž»áž‚áž»"
+ },
+ "th": {
+ "code": "th",
+ "name": "ážáŸƒ"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "ទីបáŸ"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "ទីរិនយា"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "ទួរគី"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "áž“áŸážšážœáŸ‚ស នីនូស"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "áž“áŸážšážœáŸ‚ស បុកម៉ាល់"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "áž“áŸáž”៉ាល់"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "បង់ក្លាដែស"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "បាម្បារា"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "បារាំង"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "បាស្កáŸ"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "បាស្ážáž¼"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "បឹនជាពិ"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ប៊ុលហ្ការី"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "បូស្នី"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "ប៉ូឡូញ"
+ },
+ "be": {
+ "code": "be",
+ "name": "áž”áŸáž¡áž¶ážšáž»ážŸáŸ’ស"
+ },
+ "br": {
+ "code": "br",
+ "name": "ប្រីស្ážáž»áž“"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "ផ្លាមីស"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "áž–áŸážšáž‘ុយហ្កាល់"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "áž–áŸážšáž‘ុយហ្គាល់ ប្រáŸážŸáŸŠáž¸áž›"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "áž–áŸážšáž‘ុយហ្គាល់ អឺរ៉ុប"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "ភាសាប៊ូážáž¶áž“"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ភាសាម៉ុលដាវី"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "ភាសាហ្កែលិគ (gd)"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "ភឺសៀន"
+ },
+ "my": {
+ "code": "my",
+ "name": "ភូមា"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "មរាធិ"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "មលយាលáŸáž˜"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "ម៉ារ៉ុក"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "ម៉ាល់ážáž¶"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "ម៉ាសáŸážŠáž¼áž“ី"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "ម៉ាឡាហ្គាស៊ី"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "ម៉ាឡáŸážŸáŸŠáž¸"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "ម៉ុងហ្គោលី"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "យរូបា"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "រុស្ស៊ី"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "រូន្ឌី"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "រ៉ូម៉ង់"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "រូម៉ានី"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "លីទុយអានី"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "លីនកាឡា"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "លុចហ្សំបួរ"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "វៀážážŽáž¶áž˜"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "ážœáŸáž›"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "ស៊ុយអែដ"
+ },
+ "so": {
+ "code": "so",
+ "name": "សូម៉ាលី"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "សូលូ"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "សើប"
+ },
+ "si": {
+ "code": "si",
+ "name": "ស្រីលង្កា"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "ស្លូវ៉ាគី"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "ស្លូវ៉ានី"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "ស្វាហ៊ីលី"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "ហិណ្ឌូ"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ហុងគ្រី"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ហុល្លង់"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "ហូសា"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "ហ្កុយ៉ារាទី"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "ហ្គាលីស្យាន"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "ហ្វារូស"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "ហ្វីលីពីន"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "ហ្វាំងឡង់"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "ហ្វ្រីស៊ានážáž¶áž„លិច"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "ហ្សក​ហ្ស៊ី"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "ឡាážážœáž¸áž™áŸ‰áž¶"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "ឡាវ"
+ },
+ "en": {
+ "code": "en",
+ "name": "អង់គ្លáŸážŸ"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "អង់គ្លáŸážŸ កាណាដា"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "អង់គ្លáŸážŸ ចក្រភព​អង់គ្លáŸážŸ"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "អង់គ្លáŸážŸ អាមáŸážšáž·áž€"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "អង់គ្លáŸážŸ អូស្ážáŸ’រាលី"
+ },
+ "am": {
+ "code": "am",
+ "name": "អាមហារីច"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "អារមáŸáž“ី"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "អារ៉ាប់"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "អារ៉ាប់​ស្ážáž„់ដារ​ទំនើប"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "អាល់បានី"
+ },
+ "de": {
+ "code": "de",
+ "name": "អាល្លឺម៉ង់"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "អាល្លឺម៉ង ស្វីស"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "អាល្លឺម៉ង់ ស្វីស"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "អាល្លឺម៉ង់ អូទ្រីស"
+ },
+ "af": {
+ "code": "af",
+ "name": "អាហ្វ្រីកាអាន"
+ },
+ "az": {
+ "code": "az",
+ "name": "អាហ៊្សែរបែហ្សង់"
+ },
+ "id": {
+ "code": "id",
+ "name": "ឥណ្ឌូណáŸážŸáŸŠáž¸"
+ },
+ "it": {
+ "code": "it",
+ "name": "អ៊ីážáž¶áž›áž¸"
+ },
+ "he": {
+ "code": "he",
+ "name": "អ៊ីស្រាអែល"
+ },
+ "is": {
+ "code": "is",
+ "name": "អ៊ីស្លង់"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "អ៊ុយក្រែន"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "អ៊ុយហ្គឺរ"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "អ៊ូរឌូ"
+ },
+ "or": {
+ "code": "or",
+ "name": "អូរីយ៉ា"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "អ៊ូហ្សបáŸáž‚ីស្ážáž„់"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "អៀរឡង់"
+ },
+ "et": {
+ "code": "et",
+ "name": "អáŸážŸáŸ’ážáž¼áž“ី"
+ },
+ "es": {
+ "code": "es",
+ "name": "អáŸážŸáŸ’ប៉ាញ"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "អáŸážŸáŸ’ប៉ាញ អឺរ៉ុប"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "អáŸážŸáŸ’áž–áŸážšáŸ‰áž¶áž“់ážáž¼"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/kn.json b/library/intl/resources/language/kn.json
new file mode 100644
index 000000000..d7f52da4e
--- /dev/null
+++ b/library/intl/resources/language/kn.json
@@ -0,0 +1,738 @@
+{
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "am": {
+ "code": "am",
+ "name": "ಅಂಹರಿಕà³"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "ಅಕಾನà³"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "ಅಘೆಮà³"
+ },
+ "az": {
+ "code": "az",
+ "name": "ಅಜೆರà³à²¬à³ˆà²œà²¾à²¨à²¿"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "ಅಪà³à²ªà²°à³ ಸರà³à²¬à²¿à²¯à²¨à³"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "ಅಮೆರಿಕನೠಇಂಗà³à²²à³€à²·à³"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "ಅರೇಬಿಕà³"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "ಅರà³à²®à³‡à²¨à²¿à²¯à²¨à³"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "ಅಲà³à²¬à³‡à²¨à²¿à²¯à²¨à³"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "ಅಸà³"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ಆಧà³à²¨à²¿à²• ಪà³à²°à²®à²¾à²£à²¿à²¤ ಅರೇಬಿಕà³"
+ },
+ "af": {
+ "code": "af",
+ "name": "ಆಫà³à²°à²¿à²•à²¾à²¨à³à²¸à³"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "ಆಸà³à²Ÿà³à²°à²¿à²¯à²¨à³"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "ಆಸà³à²Ÿà³à²°à²¿à²¯à²¨à³ ಜರà³à²®à²¨à³"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "ಆಸà³à²Ÿà³à²°à³‡à²²à²¿à²¯à²¨à³ ಇಂಗà³à²²à³€à²·à³"
+ },
+ "en": {
+ "code": "en",
+ "name": "ಇಂಗà³à²²à³€à²·à³"
+ },
+ "id": {
+ "code": "id",
+ "name": "ಇಂಡೋನೇಶಿಯನà³"
+ },
+ "it": {
+ "code": "it",
+ "name": "ಇಟಾಲಿಯನà³"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ಇವಾಂಡೋ"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ಈವà³"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ಉಕà³à²°à³ˆà²¨à²¿à²¯à²¨à³"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "ಉಜà³à²¬à³‡à²•à³"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ಉತà³à²¤à²° ದೆಬೆಲೆ"
+ },
+ "se": {
+ "code": "se",
+ "name": "ಉತà³à²¤à²° ಸಾಮಿ"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ಉಯಿಘರà³"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ಉರà³à²¦à³"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "ಎಂಬà³"
+ },
+ "et": {
+ "code": "et",
+ "name": "ಎಸà³à²Ÿà³Šà²¨à²¿à²¯à²¨à³"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "ಎಸà³à²ªà³†à²°à²¾à²‚ಟೊ"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "à²à²°à²¿à²·à³"
+ },
+ "is": {
+ "code": "is",
+ "name": "à²à²¸à³à²²à²¾à²‚ಡಿಕà³"
+ },
+ "or": {
+ "code": "or",
+ "name": "ಒರಿಯಾ"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "ಕಂಬಾ"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "ಕà²à²•à³"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "ಕನà³à²¨à²¡"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "ಕಬà³à²µà³†à²°à³à²¡à²¿à²¯à²¨à³"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "ಕಬೈಲà³"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "ಕಲಾಲà³à²²à²¿à²¸à³à²Ÿà³"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "ಕಲೆಂಜಿನà³"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "ಕಾಂಗೊ ಸà³à²µà²¹à²¿à²²à²¿"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "ಕಾಶà³à²®à³€à²°à²¿"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "ಕಿಕà³à²¯à³"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "ಕಿರà³à²—ಿಜà³"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "ಕೆಟಲಾನà³"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "ಕೆನೆಡಿಯನೠಇಂಗà³à²²à³€à²·à³"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "ಕೆನೆಡಿಯನೠಫà³à²°à³†à²‚ಚà³"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "ಕೊಯà³à²° ಚೀನಿ"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "ಕೊಯà³à²°à²¬à³Šà²°à³Š ಸೆನà³à²¨à²¿"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "ಕೊರಿಯನà³"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "ಕà³à²°à³Šà²¯à³‡à²¶à²¿à²¯à²¨à³"
+ },
+ "km": {
+ "code": "km",
+ "name": "ಖಮೇರà³"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "ಖà³à²µà²¾à²¸à²¿à²¯à³Š"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ಗಾಂಡಾ"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "ಗà³à²œà²°à²¾à²¤à²¿"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "ಗà³à²¸à²¿"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "ಗà³à²¯à²¾à²²à²¿à²¶à²¿à²¯à²¨à³"
+ },
+ "el": {
+ "code": "el",
+ "name": "ಗà³à²°à³€à²•à³"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "ಚಿಗಾ"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "ಚೆರೋಕೀ"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "ಚೈನೀಸà³"
+ },
+ "de": {
+ "code": "de",
+ "name": "ಜರà³à²®à²¨à³"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "ಜರà³à²®à²¾"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ಜಾಪನೀಸà³"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "ಜಾರà³à²œà²¿à²¯à²¨à³"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "ಜà³à²²à³"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ಜೆಕà³"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "ಜೊಲ-ಫೊನà³à²¯à²¿"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "ಜೋಂಗà³â€Œà²–ಾ"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "ಟರà³à²•à²¿à²¶à³"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "ಟಷೆಲà³â€à²¹à²¿à²Ÿà³"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "ಟಸವಕà³"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "ಟಿಗà³à²°à²¿à²¨à³à²¯à²¾"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "ಟಿಬೇಟಿಯನà³"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "ಟೆಸೊ"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "ಟೈಟ"
+ },
+ "to": {
+ "code": "to",
+ "name": "ಟೋಂಗನà³"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ಡಚà³"
+ },
+ "da": {
+ "code": "da",
+ "name": "ಡà³à²¯à²¾à²¨à²¿à²¶à³"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "ತಮಿಳà³"
+ },
+ "te": {
+ "code": "te",
+ "name": "ತೆಲà³à²—à³"
+ },
+ "th": {
+ "code": "th",
+ "name": "ಥಾಯà³"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "ನಮ"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "ನಾರà³à²µà³†à²œà²¿à²¯à²¨à³ ನೈನೊಸà³à²•à³"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "ನಾರà³à²µà³†à²œà²¿à²¯à²¨à³ ಬೊಕà³à²®à²²à³"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "ನೂಯರà³"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "ನೇಪಾಳಿ"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ನೊಂಬಾ"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "ನà³à²¯à²¾à²¨à³â€Œà²•à³‹à²²à³†"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "ಪಂಜಾಬಿ"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "ಪರà³à²¶à²¿à²¯à²¨à³"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "ಪಶà³à²šà²¿à²® ಫà³à²°à²¿à²¸à²¿à²¯à²¨à³"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "ಪಾಷà³à²Ÿà³‹"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "ಪೋರà³à²šà³à²—ೀಸà³"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "ಪೋಲಿಶà³"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "ಫರೋಸಿ"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "ಫಿನà³à²¨à²¿à²¶à³"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "ಫಿಲಿಪಿನೊ"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "ಫà³à²²à²¾à²¹à³"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "ಫà³à²°à²¿à²¯à³à²²à²¿à²¯à²¨à³"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "ಫà³à²°à³†à²‚ಚà³"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "ಫà³à²²à³†à²®à²¿à²·à³"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "ಬಂಬಾರಾ"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "ಬಫಿಯ"
+ },
+ "my": {
+ "code": "my",
+ "name": "ಬರà³à²®à³€à²¸à³"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ಬಲà³à²—ೇರಿಯನà³"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "ಬಸಾ"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "ಬಾಸà³à²•à³"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "ಬೆಂಗಾಲಿ"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "ಬೆನ"
+ },
+ "be": {
+ "code": "be",
+ "name": "ಬೆಲರೂಸಿಯನà³"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "ಬೋಡೊ"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "ಬೋಸà³à²¨à²¿à²¯à²¨à³"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "ಬà³à²°à²¿à²Ÿà²¿à²·à³ ಇಂಗà³à²²à³€à²·à³"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "ಬà³à²°à³†à²œà²¿à²²à²¿à²¯à²¨à³ ಪೋರà³à²šà³à²—ೀಸà³"
+ },
+ "br": {
+ "code": "br",
+ "name": "ಬà³à²°à³†à²Ÿà²¨à³"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "ಮಂಗೋಲಿಯನà³"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "ಮಧà³à²¯ ಅಟà³à²²à²¾à²¸à³ ಟಮಜೈಟà³"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "ಮರಾಠಿ"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "ಮಲಗಾಸಿ"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "ಮಲಯಾಳಂ"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "ಮಲಯà³"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "ಮಸಾಯà³"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "ಮಾಲà³à²Ÿà³€à²¸à³"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "ಮà³à²‚ಡಂಗà³"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "ಮೆಕà³à²¸à²¿à²•à²¨à³ ಸà³à²ªà³à²¯à²¾à²¨à²¿à²·à³"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "ಮೆರà³"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "ಮೆಸಿಡೋನಿಯನà³"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "ಮೊರಿಸನà³"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ಮೊಲà³à²¡à³†à²µà²¿à²¯à²¨à³"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "ಮà³à²¯à²•à²®à³†"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "ಮà³à²¯à²–à³à²µà²¾- ಮೀಟà³à²Ÿà³Š"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "ಮà³à²¯à²¾à²•à³Šà²‚ಡà³"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "ಯà³à²°à³‹à²ªà²¿à²¯à²¨à³ ಸà³à²ªà³à²¯à²¾à²¨à²¿à²·à³"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "ಯೂರೋಪಿಯನೠಪೋರà³à²šà³à²—ೀಸà³"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ಯೊರà³à²¬à²¾"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ರಷà³à²¯à²¨à³"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "ರà³à²‚ಡಿ"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "ರà³à²µ"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "ರೊಂಬೊ"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "ರೊಮಾನà³à²·à³"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "ರೊಮೇನಿಯನà³"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "ಲಕà³à²¸à²‚ಬರà³à²—à³"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "ಲಟà³à²µà²¿à²¯à²¨à³"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "ಲಾಂಗಿ"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "ಲಾವೋ"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "ಲಿಂಗಾಲ"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "ಲಿಥà³à²µà³‡à²¨à²¿à²¯à²¨à³"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "ಲà³à²¯à²¿à²¯"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "ಲà³à²µà³‹"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "ಲೂಬಾ-ಕಟಾಂಗಾ"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "ಲೋವರೠಸೋರà³à²¬à²¿à²¯à²¨à³"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "ವಾಯಿ"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ವಿಯೇಟà³à²¨à²¾à²®à³€à²¸à³"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "ವà³à²‚ಜೊ"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "ವೆಲà³à²¶à³"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "ಶಂಬಲ"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "ಶೋನಾ"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "ಸಂಗà³"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "ಸಂಬà³à²°à³"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "ಸರಳೀಕೃತ ಚೈನೀಸà³"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "ಸರà³à²¬à²¿à²¯à²¨à³"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "ಸಾಂಗೋ"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "ಸಾಂಪà³à²°à²¦à²¾à²¯à²¿à²• ಚೈನೀಸà³"
+ },
+ "si": {
+ "code": "si",
+ "name": "ಸಿಂಹಳ"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "ಸೆನ"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "ಸೊಗ"
+ },
+ "so": {
+ "code": "so",
+ "name": "ಸೊಮಾಲಿ"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "ಸà³à²•à²¾à²Ÿà²¿à²¶à³ ಗà³à²¯à²¾à²²à²¿à²•à³"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "ಸà³à²Ÿà³à²¯à²¾à²‚ಡರà³à²¡à³ ಮೊರೊಕà³à²•à²¨à³ ಟಮಜೈಟà³"
+ },
+ "es": {
+ "code": "es",
+ "name": "ಸà³à²ªà³à²¯à²¾à²¨à²¿à²·à³"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "ಸà³à²²à³‹à²µà²¾à²•à³"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "ಸà³à²²à³‹à²µà³‡à²¨à²¿à²¯à²¨à³"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "ಸà³à²µà²¹à²¿à²²à²¿"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "ಸà³à²µà²¿à²¸à³ ಜರà³à²®à²¨à³"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "ಸà³à²µà²¿à²¸à³ ಫà³à²°à³†à²‚ಚà³"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "ಸà³à²µà²¿à²¸à³ ಹೈ ಜರà³à²®à²¨à³"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "ಸà³à²µà³€à²¡à²¿à²·à³"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ಹಂಗೇರಿಯನà³"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "ಹಿಂದಿ"
+ },
+ "he": {
+ "code": "he",
+ "name": "ಹೀಬà³à²°à³à²¯à³‚"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "ಹೌಸಾ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ko.json b/library/intl/resources/language/ko.json
new file mode 100644
index 000000000..7539064c1
--- /dev/null
+++ b/library/intl/resources/language/ko.json
@@ -0,0 +1,738 @@
+{
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "간다어"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "갈리시아어"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "고지 ë…ì¼ì–´ (스위스)"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "고지 소르비아어"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "구시어"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "구ìžë¼íŠ¸ì–´"
+ },
+ "el": {
+ "code": "el",
+ "name": "그리스어"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "그린란드어"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "나마어"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "네ëœëž€ë“œì–´"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "네팔어"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "노르웨ì´ì–´(니노르스í¬)"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "노르웨ì´ì–´(ë³´í¬ë§)"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "누ì—르어"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "니안콜어"
+ },
+ "da": {
+ "code": "da",
+ "name": "ë´ë§ˆí¬ì–´"
+ },
+ "de": {
+ "code": "de",
+ "name": "ë…ì¼ì–´"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "ë…ì¼ì–´(스위스)"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "ë¼ì˜¤ì–´"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "ë¼íŠ¸ë¹„ì•„ì–´"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "랑기어"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "러시아어"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "레토로만어"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "롬보어"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "루마니아어"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "루바-카탄가어"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "루야어"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "루오어"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "룩셈부르í¬ì–´"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "룬디어"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "르와어"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "리투아니아어"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "ë§ê°ˆë¼ì–´"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "마ë¼í‹°ì–´"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "마사ì´ì–´"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "마차메어"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "마케ë„니아어"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "마콘ë°ì–´"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "마í¬í›„와-메토어"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "ë§ë¼ê°€ì‹œì–´"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "ë§ë¼ì–„람어"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "ë§ë ˆì´ì–´"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "메루어"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "모리스얀어"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "몰ë„바어"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "몰타어"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "몽고어"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "문당어"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "바사어"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "바스í¬ì–´"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "ë°”ì´ì–´"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "바피아어"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "밤바ë¼ì–´"
+ },
+ "my": {
+ "code": "my",
+ "name": "버마어"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "베나어"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "베트남어"
+ },
+ "be": {
+ "code": "be",
+ "name": "벨ë¼ë£¨ìŠ¤ì–´"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "벵골어"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "ë³´ë„ì–´"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "보스니아어"
+ },
+ "se": {
+ "code": "se",
+ "name": "ë¶ë¶€ 사미어"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ë¶ë¶€ ì€ë°ë²¨ë ˆì–´"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "분조어"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "불가리아어"
+ },
+ "br": {
+ "code": "br",
+ "name": "브르타뉴어"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "ì‚°ê³ ì–´"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "삼부루어"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "ìƒêµ¬ì–´"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "샴발ë¼ì–´"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "세나어"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "세르비아어"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "소가어"
+ },
+ "so": {
+ "code": "so",
+ "name": "소ë§ë¦¬ì•„ì–´"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "쇼나어"
+ },
+ "si": {
+ "code": "si",
+ "name": "스리랑카어"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "스와ížë¦¬ì–´"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "스웨ë´ì–´"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "스코틀랜드 게ì¼ì–´"
+ },
+ "es": {
+ "code": "es",
+ "name": "스페ì¸ì–´"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "슬로바키아어"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "슬로베니아어"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "아그햄어"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "ì•„ëžì–´"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "아르메니아어"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "아수어"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "아스투리아어"
+ },
+ "is": {
+ "code": "is",
+ "name": "ì•„ì´ìŠ¬ëž€ë“œì–´"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "ì•„ì¼ëžœë“œì–´"
+ },
+ "az": {
+ "code": "az",
+ "name": "아제르바ì´ìž”ì–´"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "아칸어"
+ },
+ "af": {
+ "code": "af",
+ "name": "아프리칸스어"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "알바니아어"
+ },
+ "am": {
+ "code": "am",
+ "name": "암하ë¼ì–´"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "양본어"
+ },
+ "et": {
+ "code": "et",
+ "name": "ì—스토니아어"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "ì—스페란토어"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ì—웨어"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "엠부어"
+ },
+ "en": {
+ "code": "en",
+ "name": "ì˜ì–´"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "ì˜ì–´ (ì˜êµ­ì‹)"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "ì˜ì–´ (ìºë‚˜ë‹¤)"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "ì˜ì–´(호주)"
+ },
+ "or": {
+ "code": "or",
+ "name": "오리야어"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "요루바어"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "우르ë‘ì–´"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "우즈베í¬ì–´"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ìš°í¬ë¼ì´ë‚˜ì–´"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "월저어"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "웨ì¼ìŠ¤ì–´"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "위구르어"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "ìœ ëŸ½ì‹ ìŠ¤íŽ˜ì¸ì–´"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "ìœ ëŸ½ì‹ í¬ë¥´íˆ¬ê°ˆì–´"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ì‘곰바어"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ì´ì›ë„ì–´"
+ },
+ "it": {
+ "code": "it",
+ "name": "ì´íƒˆë¦¬ì•„ì–´"
+ },
+ "id": {
+ "code": "id",
+ "name": "ì¸ë„네시아어"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ì¼ë³¸ì–´"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "ìžë¥´ë§ˆì–´"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "저지 소르비아어"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "조지아어"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "ì¡¸ë¼ í¬ë‹ˆì–´"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "종카어"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "줄루어"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "중국어"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "중국어(간체)"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "중국어(번체)"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "중앙모로코 타마지트어"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "체로키어"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "체코어"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "치가어"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "카슈미르어"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "ì¹´ìžíì–´"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "카탈로니아어"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "칸나다어"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "칼렌진어"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "캄바어"
+ },
+ "km": {
+ "code": "km",
+ "name": "캄보디아어"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "커바ì¼ì–´"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "ì½”ì´ë¼ 친니어"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "ì½”ì´ì•¼ë³´ë¡œ 세니어"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "콜로그니안어"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "콩고 스와ížë¦¬ì–´"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "í¬ë¡œì•„í‹°ì•„ì–´"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "í¬ë¦¬ì˜¬ì–´"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "í¬ì™€ì‹œì˜¤ì–´"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "키르기스어"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "키쿠유어"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "타밀어"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "타사와í¬ì–´"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "타셸히트어"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "타ì´íƒ€ì–´"
+ },
+ "th": {
+ "code": "th",
+ "name": "태국어"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "터키어"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "테조어"
+ },
+ "te": {
+ "code": "te",
+ "name": "텔루구어"
+ },
+ "to": {
+ "code": "to",
+ "name": "통가어"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "티그리ëƒì–´"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "티베트어"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "파슈토어"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "펀잡어"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "페로어"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "페르시아어"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "í¬ë¥´íˆ¬ê°ˆì–´"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "í¬ë¥´íˆ¬ê°ˆì–´ (브ë¼ì§ˆ)"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "í´ëž€ë“œì–´"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "표준 모로코 타마제í¬ì–´"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "í’€ë¼ì–´"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "프랑스어"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "프랑스어 (스위스)"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "프랑스어 (ìºë‚˜ë‹¤)"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "프리우리안어"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "프리지아어"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "플ë¼ë§ì–´"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "핀란드어"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "필리핀어"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "하우사어"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "한국어"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "í—가리어"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "현대 표준 ì•„ëžì–´"
+ },
+ "he": {
+ "code": "he",
+ "name": "히브리어"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "힌디어"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ks.json b/library/intl/resources/language/ks.json
new file mode 100644
index 000000000..fc8052cc2
--- /dev/null
+++ b/library/intl/resources/language/ks.json
@@ -0,0 +1,738 @@
+{
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "آسٹریلیَن اَنٛگریٖزÛ"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "آسٹرÙیَن جٔرمَن"
+ },
+ "is": {
+ "code": "is",
+ "name": "Ø¢ÛŒÙسلینڈÙÚ©"
+ },
+ "it": {
+ "code": "it",
+ "name": "اÙٹیلیَن"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "اÙردوٗ"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "اَرمینیَن"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "اÙزبیک"
+ },
+ "az": {
+ "code": "az",
+ "name": "اَزَربیجانی"
+ },
+ "af": {
+ "code": "af",
+ "name": "اَÙریٖکانٛز"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "اَکان"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "البانÙیَن"
+ },
+ "am": {
+ "code": "am",
+ "name": "اَمÛاری"
+ },
+ "id": {
+ "code": "id",
+ "name": "اÙنڈونیشیا"
+ },
+ "en": {
+ "code": "en",
+ "name": "اَنٛگیٖزÛ"
+ },
+ "or": {
+ "code": "or",
+ "name": "اوٚرÙیا"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "اَیرÙØ´"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "ایٚسپَرینٹو"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "ایسٹوٗریَن"
+ },
+ "et": {
+ "code": "et",
+ "name": "ایٚسٹونیَن"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ایٖو"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ایٚوونڈو"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "باسا"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "باسک"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "برازیٖلی Ù¾Ùتَگیٖز"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "بَرطانوی اَنٛگریٖزÛ"
+ },
+ "br": {
+ "code": "br",
+ "name": "بریٹَن"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "بَمبارا"
+ },
+ "my": {
+ "code": "my",
+ "name": "بٔمیٖز"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "بَنٛگٲلÛ"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "بوسنÙیَن"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "بوٚنÙÙ… ساربÙیَن"
+ },
+ "be": {
+ "code": "be",
+ "name": "بیلَروٗشیَن"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "بینا"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "پالÙØ´"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Ù¾Ùرتَگیٖز"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "پَشتوٗ"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "پَنجٲبÛ"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "تÙبتی"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "تÙرکÙØ´"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "تَمÙÙ„"
+ },
+ "th": {
+ "code": "th",
+ "name": "تھاے"
+ },
+ "te": {
+ "code": "te",
+ "name": "تیلگوٗ"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Ù¹ÙگرÙنیا"
+ },
+ "to": {
+ "code": "to",
+ "name": "ٹونٛگا"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "جاپٲنÛ"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "جارجÙیَن"
+ },
+ "de": {
+ "code": "de",
+ "name": "جٔرمَن"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "چیٚروکی"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "چیٚک"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "چیٖنی"
+ },
+ "km": {
+ "code": "km",
+ "name": "خَمیر"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ÚˆÙŽÚ†"
+ },
+ "da": {
+ "code": "da",
+ "name": "ڈینÙØ´"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "رÙندی"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "رÙوٲجی چیٖنی"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "روٗسی"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "رومٲنی"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "رومانش"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "زÙلوٗ"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "زونٛگکھا"
+ },
+ "es": {
+ "code": "es",
+ "name": "سپینÙØ´"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "سٔربÙیَن"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "سکوٹÙØ´ گیےلÙÚ©"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "سلووَک"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "سلووینیَن"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "سَنگو"
+ },
+ "si": {
+ "code": "si",
+ "name": "سÙÙ†Ûالا"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "سواÛÙÙ„ÛŒ"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "سٕوÙس جٔرمَن"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "سٕوٕس Ùریٚنچ"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "سٕوÙس Ûاےجٔرمَن"
+ },
+ "so": {
+ "code": "so",
+ "name": "سومٲلی"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "سویٖڈÙØ´"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "سیٚود چیٖنی"
+ },
+ "se": {
+ "code": "se",
+ "name": "Ø´Ùمٲلی سَمی"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Ø´Ùمال ڈَبیل"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "شونا"
+ },
+ "he": {
+ "code": "he",
+ "name": "عبرٲنÛ"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "عربی"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Ùارسی"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Ùَروس"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "ÙروٗلÙیَن"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Ùریٚنچ"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "ÙÙلاÛ"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "ÙÙÙ„Ùپیٖنو"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "ÙلیٚمÙØ´"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "ÙÙÙ†ÙØ´"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "کٲشÙر"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "کازَخ"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "کامبا"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "کَبایÙÙ„"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "کَتلان"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Ú©ÙرگÙز"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "کروشÙیَن"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Ú©ÙÚ©Ùیوٗ"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "کَلالÙسÙت"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Ú©ÙŽÙ†ÙŽÚ‘"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "کَنیڈیَن Ùریٚنچ"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "کوریَن"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "کینَڈÙیٲیی اَنٛگریٖزÛ"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "گاندا"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Ú¯Ùجرٲتی"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "گیلÙØ´Ùیَن"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "لاو"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Ù„Ùبیریَن Ù¾Ùرتَگیٖز"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Ù„Ùبیریَن سپینÙØ´"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Ù„ÙتھوانÙیَن"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "لَتوÙیَن"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Ù„ÙکھزیمبورگÙØ´"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Ù„Ùنگالا"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "لوÙبا کَتَنٛگا"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Ù„Ùوو"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "مَرٲٹھÛ"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "مَساے"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "مغربی ÙرÙشیَن"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "مَلاگَسی"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "مَلتیٖس"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "مٔلیالَم"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Ù…ÙŽÙ„ÙŽÛ’"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "مَنٛگولی"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "مولداوÙیَن"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "میکَڈونیَن"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "ناروییَن بوکمال"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "ناروییَن نَے نورسک"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "نیٚپٲلÛ"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Ù†Ùیَنکول"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Ûاوسا"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "ÛÙندی"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Ûَنٛگیریَن"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "ÛیٚرÙÙ… ساربÙیَن"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "واے"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ÙˆÙیَتنَمیٖز"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "ویٚلش"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "یوٗ ایٚس اَنٛگریٖزÛ"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "یورÙبا"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "یوٗکرینیٲیی"
+ },
+ "el": {
+ "code": "el",
+ "name": "یوٗنٲنی"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ksb.json b/library/intl/resources/language/ksb.json
new file mode 100644
index 000000000..a9e0fcae3
--- /dev/null
+++ b/library/intl/resources/language/ksb.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Kiajemi"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Kiakan"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Kialabu"
+ },
+ "am": {
+ "code": "am",
+ "name": "Kiamhali"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Kibangla"
+ },
+ "be": {
+ "code": "be",
+ "name": "Kibelaausi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Kibulgalia"
+ },
+ "my": {
+ "code": "my",
+ "name": "Kibulma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Kichecki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Kichina"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Kifalansa"
+ },
+ "el": {
+ "code": "el",
+ "name": "Kigiiki"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Kihausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Kihindi"
+ },
+ "es": {
+ "code": "es",
+ "name": "Kihispania"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Kiholanzi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Kihungai"
+ },
+ "id": {
+ "code": "id",
+ "name": "Kiindonesia"
+ },
+ "en": {
+ "code": "en",
+ "name": "Kiingeeza"
+ },
+ "it": {
+ "code": "it",
+ "name": "Kiitaliano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Kijapani"
+ },
+ "de": {
+ "code": "de",
+ "name": "Kijeumani"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kikambodia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Kikolea"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Kileno"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Kilusi"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Kimalesia"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Kinepali"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Kiomania"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Kipolandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Kipunjabi"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Kishambaa"
+ },
+ "so": {
+ "code": "so",
+ "name": "Kisomali"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Kiswidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Kitailandi"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Kitamil"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Kituuki"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Kiuklania"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Kiuldu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Kivietinamu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Kiyoluba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Kizulu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ksf.json b/library/intl/resources/language/ksf.json
new file mode 100644
index 000000000..ba988f0f7
--- /dev/null
+++ b/library/intl/resources/language/ksf.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "riakan"
+ },
+ "am": {
+ "code": "am",
+ "name": "riamarik"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "riarab"
+ },
+ "be": {
+ "code": "be",
+ "name": "ribɛlɔrís"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "ribɛngáli"
+ },
+ "my": {
+ "code": "my",
+ "name": "ribirmán"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ribulgarí"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ricÉ›Ìk"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "ricinɔá"
+ },
+ "de": {
+ "code": "de",
+ "name": "ridjɛrman"
+ },
+ "el": {
+ "code": "el",
+ "name": "rigrÉ›Ìk"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "riíndí"
+ },
+ "id": {
+ "code": "id",
+ "name": "riindonɛsí"
+ },
+ "en": {
+ "code": "en",
+ "name": "riingɛrís"
+ },
+ "it": {
+ "code": "it",
+ "name": "riitalyÉ›Ìn"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "rijapÉ”ÌÅ‹"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "rikaksa"
+ },
+ "km": {
+ "code": "km",
+ "name": "rikmɛr"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "rikÉ”rɛɛÌ"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "rikpa"
+ },
+ "es": {
+ "code": "es",
+ "name": "rikpanyá"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "rimalaí"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "rinepalÉ›Ì"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "riÉ”lándÉ›Ì"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "riɔngrɔá"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "ripɛnjabí"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "ripÉ›rÉ›sÇÌ"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "ripɛrsán"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "ripÉ”lÉ”Ìn"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "ripÉ”rtugÉ›Ì"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "rirís"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rirɔmán"
+ },
+ "so": {
+ "code": "so",
+ "name": "risomalí"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "riswÉ›ÌdÇ"
+ },
+ "th": {
+ "code": "th",
+ "name": "ritaí"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "ritamúl"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "riturk"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "riukrÉ›Ìn"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "riurdú"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "riwyɛtnám"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "riyúuba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "rizúlu"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ksh.json b/library/intl/resources/language/ksh.json
new file mode 100644
index 000000000..fa10ab9a9
--- /dev/null
+++ b/library/intl/resources/language/ksh.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akahnesch"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albaanesch"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "Amärrekaanesch Änglesch"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amhahresch"
+ },
+ "en": {
+ "code": "en",
+ "name": "Änglesch"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Änglesch uß Außtraalije"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Änglesch uß Jruußbrettannije"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "Änglesch uß Kanada"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arahbesch"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armeenesch"
+ },
+ "az": {
+ "code": "az",
+ "name": "Asserbaidschahnesch"
+ },
+ "et": {
+ "code": "et",
+ "name": "Äßnesch"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Astuhrejahnesch"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bängjaalesch"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Baskesch"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "br": {
+ "code": "br",
+ "name": "Bettohnesch"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Boddo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Boßnesch"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Brasilljaanesch Pochtojesesch"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulljaaresch"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burmessesch"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Butahnesch"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "da": {
+ "code": "da",
+ "name": "Dähnesch"
+ },
+ "de": {
+ "code": "de",
+ "name": "Deutsch"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Deutsch uß de Schweijz"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "Deutsch uß Ößterich"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "it": {
+ "code": "it",
+ "name": "Etalljänesch"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Färröeresch"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnesch"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Flämesch"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Franzüüsesch"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Franzüüsesch uß de Schweijz"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Franzüüsesch uß Kanada"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gutscharatesch"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Haußa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebräjesch"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Holländesch"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Ieresch"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indoneesesch"
+ },
+ "is": {
+ "code": "is",
+ "name": "Ißländesch"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Jalliizesch"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japaanesch"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Je’orjesch"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Joruuba"
+ },
+ "el": {
+ "code": "el",
+ "name": "Jrihschesch"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "K-Rundesch"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kapvärdesch"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kaschmieresch"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kassakesch"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Kattalahnesch"
+ },
+ "km": {
+ "code": "km",
+ "name": "Khmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kirjihsesch"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Kirombo"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Kölsch"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Korrejaanesch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Krowatesch"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lahootesch"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Lättesch"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingjalla"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Littouesch"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxemborjesch"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyjanesch"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Madajaßkesch"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Mallaijesch"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Mallajalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Malteesesch"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marraatesch"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Mazedoonesch"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongjolesch"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepallessesch"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Neu-Norrweejesch"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Niddersorbesch"
+ },
+ "se": {
+ "code": "se",
+ "name": "Nood-Lappländesch"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Nood-Ndebele"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norrweejesch Bokmål"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriija"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Panschaabesch"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Pare"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Pärsesch"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Paschtuunesch"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Pochtojesesch"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Pochtojesesch uß Pochtojall"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Pollnesch"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Rätoromaanesch"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Rumänesch"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Rußßesch"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sangjo"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Särbesch"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Schi-Schona"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Schineesesch"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "Schineesesch en de eijfacher Schreff"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "Schineesesch en de tradizjonälle Schreff"
+ },
+ "es": {
+ "code": "es",
+ "name": "Schpahnesch"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Schpahnesch en Mäxikoh"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Schpahnesch en Schpahneje"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "Schtandatt Arahbesch"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Schweedesch"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Schwitzerdütsch"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "si": {
+ "code": "si",
+ "name": "Singjaleesesch"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somaalesch"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "ẞlovakesch"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "ẞloveenesch"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Suaheelesch"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Suulu"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "Tailändesch"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamiilesch"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telluuju"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibehtesch"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tijrenejaanesch"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongjaanesch"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Törkesch"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Tschäschesch"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uj’juuersch"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukrainesch"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Unjarresch"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu\/Hindi"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Ußbeekesch"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vijätnammeesesch"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Wallihsesch"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walserdütsch"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Wäßfriisesch"
+ },
+ "be": {
+ "code": "be",
+ "name": "Wiißrußesch"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ky.json b/library/intl/resources/language/ky.json
new file mode 100644
index 000000000..6a22c40cf
--- /dev/null
+++ b/library/intl/resources/language/ky.json
@@ -0,0 +1,738 @@
+{
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "агемче"
+ },
+ "az": {
+ "code": "az",
+ "name": "азербайжанча"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "азыркы адабий араб тилинде"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "аканча"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "албанча"
+ },
+ "am": {
+ "code": "am",
+ "name": "амхарча"
+ },
+ "en": {
+ "code": "en",
+ "name": "англиÑче"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "арабча"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "армÑнча"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "аÑуча"
+ },
+ "af": {
+ "code": "af",
+ "name": "африкаанча"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "бамбарада"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "бангладешче"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "баÑкча"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "батыш фризче"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "бафиÑча"
+ },
+ "be": {
+ "code": "be",
+ "name": "беларуÑча"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "бенача"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "бододо"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "болгарча"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "борбордук ÐÑ‚Ð»Ð°Ñ Ñ‚Ð°Ð¼Ð°Ð·Ð¸Ñ‚Ñ‡Ðµ"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "боÑнийче"
+ },
+ "br": {
+ "code": "br",
+ "name": "бретончо"
+ },
+ "my": {
+ "code": "my",
+ "name": "бурмача"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "вайиче"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "вунжочо"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "вьетнамча"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "галиÑиÑча"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "гандача"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "голландча"
+ },
+ "el": {
+ "code": "el",
+ "name": "грекче"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "грузинче"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "гужаратча"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "гуÑиче"
+ },
+ "da": {
+ "code": "da",
+ "name": "датча"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "жогорку немиÑче (ШвейцариÑ)"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "жогорку Ñорбианча"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "жола-фониче"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "жонгуча"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "замрача"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "зулуча"
+ },
+ "he": {
+ "code": "he",
+ "name": "ивритте"
+ },
+ "id": {
+ "code": "id",
+ "name": "индонезче"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "ирландча"
+ },
+ "is": {
+ "code": "is",
+ "name": "иÑландча"
+ },
+ "es": {
+ "code": "es",
+ "name": "иÑпанча"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "иÑпанча (Европа)"
+ },
+ "it": {
+ "code": "it",
+ "name": "италиÑнча"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "йорубача"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "кабувердиче"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "кабылча"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "казакча"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "калаалиÑутча"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "каленжиче"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "камбача"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "каннадача"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "каталанча"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "кашмирче"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "кваÑиочо"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "кикуйиче"
+ },
+ "km": {
+ "code": "km",
+ "name": "кмерче"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "койра чиниче"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "койраборо Ñенниче"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "конго Ñуахаличе"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "корейче"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "кыргызча"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "кытайча"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "кытайча (жөнөкөйлөштүрүлгөн)"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "кытайча (Ñалттуу)"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "лангиче"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "лаочо"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "латышча"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "лингалача"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "литовчо"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "луба-катангача"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "луочо"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "лухиÑча"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "люкÑембургча"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "мажарча"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "македончо"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "макондече"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "макуача"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "малагаÑча"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "малайаламча"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "малайча"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "малтизче"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "маратиче"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "марокко тамазигт адабий тилинде"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "маÑайча"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "мачамече"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "меруча"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "молдованча"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "моңголчо"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "мориÑианча"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "мундангча"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "намача"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "нгомбача"
+ },
+ "de": {
+ "code": "de",
+ "name": "немиÑче"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "немиÑче (ШвейцариÑ)"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "непалча"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "норвежче (Букмал)"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "норвежче (ÐинорÑк)"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "нуерче"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "ныйанколчо"
+ },
+ "or": {
+ "code": "or",
+ "name": "ориÑча"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "оруÑча"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "өзбекче"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "пашточо"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "полÑкча"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "португалча"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "португалча (Европа)"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "пунжабиче"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "романшча"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "ромбочо"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "руача"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "румынча"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "рундиче"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Ñамбуруча"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Ñангочо"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Ñангуча"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Ñенача"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Ñербче"
+ },
+ "si": {
+ "code": "si",
+ "name": "Ñингалача"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Ñловакча"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Ñловенче"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Ñогача"
+ },
+ "so": {
+ "code": "so",
+ "name": "Ñомаличе"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Ñуахиличе"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "таитача"
+ },
+ "th": {
+ "code": "th",
+ "name": "тайча"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "тамилче"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "таÑабакча"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "ташелитче"
+ },
+ "te": {
+ "code": "te",
+ "name": "телугуча"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "теÑочо"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "тибетче"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "тигриниача"
+ },
+ "to": {
+ "code": "to",
+ "name": "тонгача"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "төмөнкү Ñорбианча"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "түндүк ндыбелче"
+ },
+ "se": {
+ "code": "se",
+ "name": "түндүк Ñамиче"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "түркчө"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "уелшче"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "уйгурча"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "украинче"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "урдуча"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "фароÑче"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "фарÑыча"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "филипино"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "финче"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "фламандча"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "французча"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "хауÑача"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "хиндиче"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "хорватча"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "черокиче"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "чехче"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "чигача"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "шамабалача"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "шведче"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "шонача"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ñбече"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Ñмбуча"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "ÑÑперанто"
+ },
+ "et": {
+ "code": "et",
+ "name": "ÑÑтончо"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Ñпончо"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/lag.json b/library/intl/resources/language/lag.json
new file mode 100644
index 000000000..f2a85327c
--- /dev/null
+++ b/library/intl/resources/language/lag.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Kɨajéemi"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Kɨakáani"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Kɨaráabu"
+ },
+ "my": {
+ "code": "my",
+ "name": "Kɨbáama"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Kɨbangála"
+ },
+ "be": {
+ "code": "be",
+ "name": "Kɨberalúusi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Kɨbulugária"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Kɨchéeki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Kɨchíina"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Kɨfaráansa"
+ },
+ "el": {
+ "code": "el",
+ "name": "Kɨgiríki"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Kɨhaúusa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Kɨhíindi"
+ },
+ "es": {
+ "code": "es",
+ "name": "Kɨhispánia"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Kɨholáanzi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Kɨhungári"
+ },
+ "id": {
+ "code": "id",
+ "name": "Kɨɨndonésia"
+ },
+ "en": {
+ "code": "en",
+ "name": "Kɨɨngeréesa"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Kɨjapáani"
+ },
+ "de": {
+ "code": "de",
+ "name": "Kɨjerʉmáani"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kɨkambódia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Kɨkoréa"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Kɨlaangi"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Kɨmelésia"
+ },
+ "am": {
+ "code": "am",
+ "name": "Kɨmʉháari"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Kɨnepáali"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Kɨpólandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Kɨpúnjabi"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Kɨréeno"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Kɨromanía"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Kɨrúusi"
+ },
+ "so": {
+ "code": "so",
+ "name": "Kɨsómáali"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Kɨswíidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Kɨtáilandi"
+ },
+ "it": {
+ "code": "it",
+ "name": "Kɨtaliáano"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Kɨtamíili"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Kɨturúuki"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Kɨukɨranía"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Kɨúrdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Kɨvietináamu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Kɨyorúuba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Kɨzúulu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/lb.json b/library/intl/resources/language/lb.json
new file mode 100644
index 000000000..9a77664ca
--- /dev/null
+++ b/library/intl/resources/language/lb.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanesch"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "Amerikanescht Englesch"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amharesch"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arabesch"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenesch"
+ },
+ "az": {
+ "code": "az",
+ "name": "Aserbaidschanesch"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturianesch"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu (Tanzania)"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Australescht Englesch"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara-Sprooch"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa-Sprooch"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Baskesch"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengalesch"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Bhutanesch"
+ },
+ "my": {
+ "code": "my",
+ "name": "Birmanesch"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnesch"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Brasilianescht Portugisesch"
+ },
+ "br": {
+ "code": "br",
+ "name": "Bretonesch"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Britescht Englesch"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgaresch"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Chinesesch"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "Chinesesch (traditionell)"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "Chinesesch (vereinfacht)"
+ },
+ "de": {
+ "code": "de",
+ "name": "Däitsch"
+ },
+ "da": {
+ "code": "da",
+ "name": "Dänesch"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "Éisträichescht Däitsch"
+ },
+ "en": {
+ "code": "en",
+ "name": "Englesch"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estnesch"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Europäescht Portugisesch"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Europäescht Spuenesch"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe-Sprooch"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Färöesch"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnesch"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Flämesch"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Franséisch"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulesch"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Ful"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galizesch"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda-Sprooch"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgesch"
+ },
+ "el": {
+ "code": "el",
+ "name": "Griichesch"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Grönlännesch"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii-Sprooch"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebräesch"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Hollännesch"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indonesesch"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Iresch"
+ },
+ "is": {
+ "code": "is",
+ "name": "Islännesch"
+ },
+ "it": {
+ "code": "it",
+ "name": "Italienesch"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japanesch"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabylesch"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kambodschanesch"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "Kanadescht Englesch"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Kanadescht Franséisch"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kasachesch"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kaschmiresch"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Katalanesch"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Kiembu"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Kiga"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu-Sprooch"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kirgisesch"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Kölsch"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Kongo-Swahili"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Koreanesch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyra Senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Kroatesch"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Laotesch"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Lettesch"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Lëtzebuergesch"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Litauesch"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo-Sprooch"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagassi-Sprooch"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Malaiesch"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltesesch"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Marokkanescht Standard-Tamazight"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Massai-Sprooch"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Mazedonesch"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru-Sprooch"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Mëttlert-Atlas-Tamazight"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Mexikanescht Spuenesch"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "Modernt Héicharabesch"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "Moldawesch"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolesch"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepalesesch"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Niddersorbesch"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Nord-Ndebele-Sprooch"
+ },
+ "se": {
+ "code": "se",
+ "name": "Nordsamesch"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegesch Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegesch Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Olulujia"
+ },
+ "or": {
+ "code": "or",
+ "name": "Orija"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Pandschabesch"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Paschtu"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Persesch"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Polnesch"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portugisesch"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Rätoromanesch"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Rumänesch"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi-Sprooch"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Russesch"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Schottescht Gällesch"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Schwäizer Franséisch"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Schwäizer Héichdäitsch"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Schwäizerdäitsch"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Schwedesch"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbesch"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Singhalesesch"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slowakesch"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slowenesch"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somali"
+ },
+ "es": {
+ "code": "es",
+ "name": "Spuenesch"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Suaheli"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamilesch"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Taschelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "Thailännesch"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetesch"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Tierkesch"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinja"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongaesch"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Tschechesch"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Uewersorbesch"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uiguresch"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukrainesch"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Ungaresch"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Usbekesch"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai-Sprooch"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vietnamesesch"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "be": {
+ "code": "be",
+ "name": "Wäissrussesch"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Walisesch"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walliserdäitsch"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Westfriesesch"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/lg.json b/library/intl/resources/language/lg.json
new file mode 100644
index 000000000..3c5189d76
--- /dev/null
+++ b/library/intl/resources/language/lg.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Lu-akaani"
+ },
+ "am": {
+ "code": "am",
+ "name": "Lu-amhariki"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Lu-urudu"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "my": {
+ "code": "my",
+ "name": "Lubbama"
+ },
+ "be": {
+ "code": "be",
+ "name": "Lubelarusi"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Lubengali"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Lubulugariya"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Lucayina"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Luceeke"
+ },
+ "de": {
+ "code": "de",
+ "name": "Ludaaki"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Lufalansa"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Luganda"
+ },
+ "el": {
+ "code": "el",
+ "name": "Lugereeki\/Luyonaani"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Luhangare"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Luhawuza"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Luhindu"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Luholandi"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Lujapani"
+ },
+ "km": {
+ "code": "km",
+ "name": "Lukme"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Lukoreya"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Lulasa"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Lulomaniya"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Lumalayi"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Lunepali"
+ },
+ "en": {
+ "code": "en",
+ "name": "Lungereza"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Luperusi"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Lupolandi"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Lupotugiizi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Lupunjabi"
+ },
+ "es": {
+ "code": "es",
+ "name": "Lusipanya"
+ },
+ "so": {
+ "code": "so",
+ "name": "Lusomaliya"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Luswideni"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Lutake"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Lutamiiru"
+ },
+ "th": {
+ "code": "th",
+ "name": "Luttaayi"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Luvyetinaamu"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Luwarabu"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "id": {
+ "code": "id",
+ "name": "Luyindonezya"
+ },
+ "it": {
+ "code": "it",
+ "name": "Luyitale"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Luyoruba"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Luyukurayine"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Luzzulu"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ln.json b/library/intl/resources/language/ln.json
new file mode 100644
index 000000000..78f1646e3
--- /dev/null
+++ b/library/intl/resources/language/ln.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikansi"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "kiluba"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "kiswahíli"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "lialabo"
+ },
+ "de": {
+ "code": "de",
+ "name": "lialemá"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "lialémani ya Otrish"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "lialémani ya Swisi"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "lialemaniki"
+ },
+ "am": {
+ "code": "am",
+ "name": "liamariki"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "libengali"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "libiligali"
+ },
+ "my": {
+ "code": "my",
+ "name": "libilimá"
+ },
+ "be": {
+ "code": "be",
+ "name": "libyelorisí"
+ },
+ "he": {
+ "code": "he",
+ "name": "liébeleo"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "lifalamá"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "lifalansÉ›Ì"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "lifalansÉ›Ì ya Kanadá"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "lifalansÉ›Ì ya Swisi"
+ },
+ "el": {
+ "code": "el",
+ "name": "ligeleki"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "lihindi"
+ },
+ "km": {
+ "code": "km",
+ "name": "likambodza"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "likoreya"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "likrɛni"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "limalezi"
+ },
+ "id": {
+ "code": "id",
+ "name": "lindonezi"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "linepalÉ›"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingála"
+ },
+ "en": {
+ "code": "en",
+ "name": "lingÉ›lÉ›Ìsa"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "lingÉ›lÉ›Ìsa ya IngÉ›lÉ›ÌtÉ›lÉ›"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "lingÉ›lÉ›Ìsa ya Kanadá"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "liongili"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "lipelésanɛ"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "lipendzabi"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "lipolonÉ›"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "lipulutugÉ›Ìsi"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "lipulutugÉ›Ìsi ya Brazil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "lipulutugÉ›Ìsi ya Erópa"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "lirisí"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "liromani"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "liromansh"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "lisinwa"
+ },
+ "es": {
+ "code": "es",
+ "name": "lisipanye"
+ },
+ "so": {
+ "code": "so",
+ "name": "lisomali"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "lispanyoli ya Erópa"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "lisuwedÉ›"
+ },
+ "it": {
+ "code": "it",
+ "name": "litaliano"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "litamuli"
+ },
+ "th": {
+ "code": "th",
+ "name": "litaye"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "litiliki"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "litshekÉ›"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "liurdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "liviyetinámi"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "lizapÉ”"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/lo.json b/library/intl/resources/language/lo.json
new file mode 100644
index 000000000..3c4b395e1
--- /dev/null
+++ b/library/intl/resources/language/lo.json
@@ -0,0 +1,738 @@
+{
+ "el": {
+ "code": "el",
+ "name": "àºàº£àºµàº"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "àºàº£àºµàº™à»àº¥àº™àº¥àº´àº”"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "àºàº§àº²àºŠàºµà»‚ອ"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "àºàº²à»„ບລ໌"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "àºàº²àº¡àºšàº²"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "àºàº²àº¥àº´àºŠàº½àº™"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "àºàº¹àºˆàº²àº£àº²àº•àº´"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "àºàº¹àºŠàº´"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "ເàºàºàºàºµàºª"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "ເàºàº»àº²àº«àº¥àºµ"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "à»àºàº™àº”າ"
+ },
+ "km": {
+ "code": "km",
+ "name": "ຂະເà»àº™"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "ຄອງໂຠຊວາຮີລິ"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "ຄອàºàº£àº² ຊິນີ"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "ຄັດຊະມີຣີ"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "ຄັນນາດາ"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "ຄາຊັàº"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "ຄາຕາລານ"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "ຄາເລັນຈິນ"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "ຄາເວີເດàºàº™àº¹"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "ຄິຄູຢຸ"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "ເຄເນດຽນ àºàº£àº±à»ˆàº‡"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "ໂຄàºàº£àº²à»‚ບໂຣ ເຊນນິ"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "ໂຄຣເອທຽນ"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "ໂຄລອàºàº™àº½àº™"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ງອມບາ"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "ຈà»àºˆàº½àº™"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "ຈີນ"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "ຈີນà»àºšàºšàº”ັ້ງເດີມ"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "ຈີນà»àºšàºšàº®àº½àºšàº‡à»ˆàº²àº"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "ໂຈລາ-ຟອນຢີ"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "ສະàºàº±àº­àº”ເàºàº¥àº´àº"
+ },
+ "es": {
+ "code": "es",
+ "name": "ສະà»àº›àº™àº™àº´àºŠ"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "ສະໂລເວນຽນ"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "ສະໂລà»àº§àº±àº"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "ສະວິສ ເຈີà»àº¡àº™"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "ສະວິສ àºàº£àº±à»ˆàº‡"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "ສະວິສ ໄຮ ເຈີà»àº¡àº™"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "ສະວີດິຊ"
+ },
+ "si": {
+ "code": "si",
+ "name": "ສິນຫາລາ"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "ຊà»àºšàº½àº™àº•à»à»ˆàºàº§à»ˆàº²"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "ຊວາຮີລິ"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "ຊານàºàº¹"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "ຊາມາ"
+ },
+ "se": {
+ "code": "se",
+ "name": "ຊາມິເໜືອ"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "ຊຳບາລ້າ"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "ຊຳບູຣູ"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "ຊີàºàº²"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "ຊີນາ"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "ຊີໂຣàºàºµ"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "ຊຸບເປີຊà»àºšàº½àº™"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "ຊູລູ"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ເຊàº"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "ເຊີບຽນ"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "à»àºŠàº‡à»‚àº"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "ໂຊàºàº²"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "ໂຊນາ"
+ },
+ "so": {
+ "code": "so",
+ "name": "ໂຊມາລີ"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "àºàºµà»ˆàº›àº¸à»ˆàº™"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "à»àºàº‡à»€àºšàº™"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ດັຊ"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "ດີຊອງຄາ"
+ },
+ "da": {
+ "code": "da",
+ "name": "à»àº”ນິຊ"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "ຕາຊາວັàº"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "ຕິàºàº£àº´àº™àº¢àº²"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "ເຕໂຊ"
+ },
+ "te": {
+ "code": "te",
+ "name": "ເຕລູàºàº¹"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "ໄຕຕາ"
+ },
+ "to": {
+ "code": "to",
+ "name": "ທອງàºàº²àº™"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "ທາເຊວຫິດ"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "ທາມິລ"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "ທິເບທັນ"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "ເທີຄິຊ"
+ },
+ "th": {
+ "code": "th",
+ "name": "ໄທ"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "ນà»à»€àº§àºˆàº½àº™ ນີນອàº"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "ນà»à»€àº§àºˆàº½àº™ ບັອàºàº¡àº­àº¥"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "ນານຄອນ"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "ນາມາ"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "ເນປາລີ"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "ເນີ"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "ບຣາຊິລຽນ ປà»àº•àº¹àºàºµàºª"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "ບອສນຽນ"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ບັງàºàº²àº£àº½àº™"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "ບັສàºàºµ"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "ບາຊາ"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "ບາເຟàº"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "ບາມບາຣາ"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "ບີນາ"
+ },
+ "br": {
+ "code": "br",
+ "name": "ເບຣຕັນ"
+ },
+ "be": {
+ "code": "be",
+ "name": "ເບລາຣັສຊຽນ"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "ເບັງàºàº²àº¥àºµ"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "ໂບດູ"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "ປà»àº•àº¹àºàºµàºª"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "ປັນຈາບີ"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "ປາສໂຕ"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "ເປີຊຽນ"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "ໂປລິຊ"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "àºàº£àº±à»ˆàº‡"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "ຟຣີລຽນ"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "ຟລີມິຊ"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "ຟາໂຣສ"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "ຟິນນິຊ"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "ຟີລິປີໂນ"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "ຟູລາ"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "ມà»àº£àº´àºªà»€àº¢àº™"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "ມອງໂàºà»€àº¥àº"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "ມອລທີສ"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "ມັນດັງ"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "ມາຄອນເດ"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "ມາຄູວາ-ມີດໂຕ"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "ມາà»àºŠàº¡"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "ມາໄຊ"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "ມາຣາທີ"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "ມາລາàºàº²àºªàºŠàºµ"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "ມາເລ"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "ມາເລອາລຳ"
+ },
+ "my": {
+ "code": "my",
+ "name": "ມຽນມາ"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "ເມຣູ"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "ເມັàºàºŠàº´àºàº±àº™ ສະà»àº›àº™àº™àº´àºŠ"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "à»àº¡àº±àºà»€àºŠà»‚ດນຽນ"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ໂມດາວຽນ"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "ໂມຣັອàºà»àº„ນ ທາມາຊີຠມາດຕະຖານ"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ຢູເຄຣນຽນ"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "ຢູໂຣປຽນ ສະà»àº›àº™àº™àº´àºŠ"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "ຢູໂຣປຽນ ປà»àº•àº¹àºàºµàºª"
+ },
+ "de": {
+ "code": "de",
+ "name": "ເຢàºàº¥àº°àº¡àº±àº™"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ໂຢຣູບາ"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ຣັດຊຽນ"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "ຣຸນດິ"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "ຣົມໂບ"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "ໂຣà»àº¡àº™"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "ໂຣà»àº¡àº™àº½àº™"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "ລັàºà»€àºŠàº¡àºšàº§àºàºàº´àºŠ"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "ລັດວຽນ"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "ລາວ"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "ລິງàºàº²àº¥àº²"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "ລິທົວນຽນ"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "ລູໄàº"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "ລູບາ-ຄາຕັງàºàº²"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "ລົວ"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "à»àº¥àº™àºàº´"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "ວັນໂຈ"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "ວາເຊີ"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "ເວສເທີນ ຟຣິຊຽນ"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "ເວວ"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "ໄວ"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ຫວຽດນາມ"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "ອອສຕຣຽນ ເຈີà»àº¡àº™"
+ },
+ "en": {
+ "code": "en",
+ "name": "ອັງàºàº´àº”"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "ອັງàºàº´àº” (ເຄເນດຽນ)"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "ອັງàºàº´àº” (ບຣິດທິຊ)"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "ອັງàºàº´àº” (ອອສເຕຣລຽນ)"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "ອັງàºàº´àº” (ອາເມລິàºàº±àº™)"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "ອັສຕູຮຽນ"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "ອັດລາສ ທາມາຊີຠàºàº²àº‡"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "ອາàºàº²àº™"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "ອາຊູ"
+ },
+ "az": {
+ "code": "az",
+ "name": "ອາເຊີໄບຈານິ"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "ອານບານຽນ"
+ },
+ "af": {
+ "code": "af",
+ "name": "ອາຟຣິàºàº²àº™"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "ອາເມນຽນ"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "ອາຣວາ"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "ອາຣັບ"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ອາຣາບິàºàº¡àº²àº”ຕະຖານສະໄà»à»ƒà»à»ˆ"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "ອາເຮັມ"
+ },
+ "am": {
+ "code": "am",
+ "name": "ອຳຮາຣິàº"
+ },
+ "it": {
+ "code": "it",
+ "name": "ອິຕາລຽນ"
+ },
+ "id": {
+ "code": "id",
+ "name": "ອິນໂດເນຊຽນ"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ອິວາ"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ອີວອນດູ"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "ອຸສເບàº"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ອຸàºà»€àº„ີ"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ອູຣະດູ"
+ },
+ "et": {
+ "code": "et",
+ "name": "ເອສໂຕນຽນ"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "ເອສເປີຣັນໂຕ"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ເອັນເດເບເລເໜືອ"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "ເອັມບູ"
+ },
+ "or": {
+ "code": "or",
+ "name": "ໂອຣິຢາ"
+ },
+ "is": {
+ "code": "is",
+ "name": "ໄອສà»àº¥àº™àº”ິàº"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "ໄອຣິສ"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ຮັງàºàº²àº£àº½àº™"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "ຮິນດິ"
+ },
+ "he": {
+ "code": "he",
+ "name": "ຮີບຣິວ"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "ເຮົາຊາ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/lt.json b/library/intl/resources/language/lt.json
new file mode 100644
index 000000000..3cc9d41d1
--- /dev/null
+++ b/library/intl/resources/language/lt.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikanų"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghemų"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "airių"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akanų"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanų"
+ },
+ "am": {
+ "code": "am",
+ "name": "amharų"
+ },
+ "en": {
+ "code": "en",
+ "name": "anglų"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabų"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armėnų"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturianų"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "aukštutinių sorbų"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Australijos anglų"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "Austrijos vokieÄių"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaidžanieÄių"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafų"
+ },
+ "be": {
+ "code": "be",
+ "name": "baltarusių"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambarų"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "baskų"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basų"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalų"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "benų"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmieÄių"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnių"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "botijų"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Brazilijos portugalų"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretonų"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgarų"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Centrinio Maroko tamazitų"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Äekų"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Äerokių"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Äigų"
+ },
+ "da": {
+ "code": "da",
+ "name": "danų"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Didžiosios Britanijos anglų"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "džiola-foni"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estų"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Europos ispanų"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Europos portugalų"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "evių"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "evondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "farerų"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipinieÄių"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamandų"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "frulan"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fulahų"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galisų"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "el": {
+ "code": "el",
+ "name": "graikų"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "gruzinų"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gudžaratų"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusi"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausų"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebrajų"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonezieÄių"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandų"
+ },
+ "es": {
+ "code": "es",
+ "name": "ispanų"
+ },
+ "it": {
+ "code": "it",
+ "name": "italų"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "jangbenų"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonų"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "jorubų"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "Jungtinių Valstijų anglų"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "kalalisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjinų"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "Kanados anglų"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Kanados prancūzų"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kanadų"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kašmyrų"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalonų"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazachų"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kebailų"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kembų"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmerų"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikujų"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "kinų"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgizų"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "kojra Äini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "kojraboro seni"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kolognų"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Kongo suahilių"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "korÄ—jieÄių"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "kroatų"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kvasių"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosieÄių"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "latvių"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "lenkų"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lietuvių"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "liuksemburgieÄių"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba katanga"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luja"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "maÄamų"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedonų"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makondų"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makua-maeto"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malagasų"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malajalių"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malajieÄių"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltieÄių"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratų"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masajų"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Meksikos ispanų"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "merų"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavų"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongolų"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "morisijų"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundangų"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "naujoji norvegų"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalieÄių"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "ngalų"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngombų"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "niankolų"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norvegijos rašytinė – būkmolų"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuerų"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "olandų"
+ },
+ "or": {
+ "code": "or",
+ "name": "orijų"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "pendžabų"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persų"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugalų"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "prancūzų"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "puštūnų"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retoromanų"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rua"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumunų"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "rusų"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "sambūrų"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangų"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "senų"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbų"
+ },
+ "si": {
+ "code": "si",
+ "name": "sinhalų"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovakų"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "slovėnų"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "sogų"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalieÄių"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "standartinė Maroko tamazigtų"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "suahilių"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "suomių"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "supaprastintoji kinų"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "šambalų"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "šiaurės ndebelų"
+ },
+ "se": {
+ "code": "se",
+ "name": "šiaurės samių"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "šiuolaikinė standartinė arabų"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "škotų (gėlų)"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "šonų"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "švedų"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Å veicarijos aukÅ¡tutinÄ— vokieÄių"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Šveicarijos prancūzų"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Å veicarijos vokieÄių"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhitų"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taitų"
+ },
+ "th": {
+ "code": "th",
+ "name": "tajų"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamilų"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasavakų"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugų"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetieÄių"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrajų"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonganų"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "tradicinė kinų"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turkų"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigūrų"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrainieÄių"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdų"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbekų"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "vakarų fryzų"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "valserų"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "valų"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "vengrų"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamieÄių"
+ },
+ "de": {
+ "code": "de",
+ "name": "vokieÄių"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarmų"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulų"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Žaliojo Kyšulio kreolų"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "žemutinių sorbų"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/lu.json b/library/intl/resources/language/lu.json
new file mode 100644
index 000000000..6f1aca5d3
--- /dev/null
+++ b/library/intl/resources/language/lu.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arabi"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "be": {
+ "code": "be",
+ "name": "Belarusi"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengali"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulegari"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burmese"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "el": {
+ "code": "el",
+ "name": "Giliki"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hongili"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "km": {
+ "code": "km",
+ "name": "Khmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Liakan"
+ },
+ "am": {
+ "code": "am",
+ "name": "Liamhariki"
+ },
+ "es": {
+ "code": "es",
+ "name": "Lihispania"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Likoreya"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Limalezia"
+ },
+ "id": {
+ "code": "id",
+ "name": "Lindonezia"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "en": {
+ "code": "en",
+ "name": "Lingelesa"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Lipunjabi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Lirisi"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Liromani"
+ },
+ "so": {
+ "code": "so",
+ "name": "Lisomali"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Lisuwidi"
+ },
+ "it": {
+ "code": "it",
+ "name": "Litali"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Liviyetinamu"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Liyapani"
+ },
+ "de": {
+ "code": "de",
+ "name": "Lizelumani"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Mfwàlànsa"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Mpepajemi"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Mpoloni"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Mputulugɛsi"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Mtamuili"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepali"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Nkrani"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "th": {
+ "code": "th",
+ "name": "Ntailandi"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Ntuluki"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Nyoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Nzulu"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "olandi"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "shinÉ›"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Tsheki"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Tshiluba"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/luo.json b/library/intl/resources/language/luo.json
new file mode 100644
index 000000000..e4536c824
--- /dev/null
+++ b/library/intl/resources/language/luo.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Dholuo"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Kiajemi"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Kiakan"
+ },
+ "am": {
+ "code": "am",
+ "name": "Kiamhari"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Kiarabu"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Kibangla"
+ },
+ "be": {
+ "code": "be",
+ "name": "Kibelarusi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Kibulgaria"
+ },
+ "my": {
+ "code": "my",
+ "name": "Kiburma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Kichecki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Kichina"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Kifaransa"
+ },
+ "el": {
+ "code": "el",
+ "name": "Kigiriki"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Kihausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Kihindi"
+ },
+ "es": {
+ "code": "es",
+ "name": "Kihispania"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Kiholanzi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Kihungari"
+ },
+ "id": {
+ "code": "id",
+ "name": "Kiindonesia"
+ },
+ "it": {
+ "code": "it",
+ "name": "Kiitaliano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Kijapani"
+ },
+ "de": {
+ "code": "de",
+ "name": "Kijerumani"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kikambodia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Kikorea"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Kimalesia"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Kinepali"
+ },
+ "en": {
+ "code": "en",
+ "name": "Kingereza"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Kipolandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Kipunjabi"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Kireno"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Kiromania"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Kirusi"
+ },
+ "so": {
+ "code": "so",
+ "name": "Kisomali"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Kiswidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Kitailandi"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Kitamil"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Kituruki"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Kiukrania"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Kiurdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Kivietinamu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Kiyoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Kizulu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/luy.json b/library/intl/resources/language/luy.json
new file mode 100644
index 000000000..576f6dedc
--- /dev/null
+++ b/library/intl/resources/language/luy.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Kiajemi"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Kiakan"
+ },
+ "am": {
+ "code": "am",
+ "name": "Kiamhari"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Kiarabu"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Kibangla"
+ },
+ "be": {
+ "code": "be",
+ "name": "Kibelarusi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Kibulgaria"
+ },
+ "my": {
+ "code": "my",
+ "name": "Kiburma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Kichecki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Kichina"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Kifaransa"
+ },
+ "el": {
+ "code": "el",
+ "name": "Kigiriki"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Kihausa"
+ },
+ "es": {
+ "code": "es",
+ "name": "Kihispania"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Kiholanzi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Kihungari"
+ },
+ "id": {
+ "code": "id",
+ "name": "Kiindonesia"
+ },
+ "it": {
+ "code": "it",
+ "name": "Kiitaliano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Kijapani"
+ },
+ "de": {
+ "code": "de",
+ "name": "Kijerumani"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kikambodia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Kikorea"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Kimalesia"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Kinepali"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Kipolandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Kipunjabi"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Kireno"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Kiromania"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Kirusi"
+ },
+ "so": {
+ "code": "so",
+ "name": "Kisomali"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Kiswidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Kitailandi"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Kitamil"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Kituruki"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Kiukrania"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Kiurdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Kivietinamu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Kiyoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Kizulu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Luhindi"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luluhia"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "en": {
+ "code": "en",
+ "name": "Lusungu"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/lv.json b/library/intl/resources/language/lv.json
new file mode 100644
index 000000000..4f1b40829
--- /dev/null
+++ b/library/intl/resources/language/lv.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikandu"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghemu"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akanu"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albÄņu"
+ },
+ "am": {
+ "code": "am",
+ "name": "amharu"
+ },
+ "en": {
+ "code": "en",
+ "name": "angļu"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arÄbu"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armēņu"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "astūriešu"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "ASV angļu"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "augšsorbu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "AustrÄlijas angļu"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "Austrijas vÄcu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaidžÄņu"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafiju"
+ },
+ "be": {
+ "code": "be",
+ "name": "baltkrievu"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambaru"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "basku"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basu"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengÄļu"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmiešu"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosniešu"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "BrazÄ«lijas portugÄļu"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretoņu"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgÄru"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "CentrÄlmarokas tamazÄ«ts"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Äehu"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Äiroku"
+ },
+ "da": {
+ "code": "da",
+ "name": "dÄņu"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "diola-fonjī"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongke"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Eiropas portugÄļu"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Eiropas spÄņu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "evondu"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "evu"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "fēru"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipīniešu"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flÄmu"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "franÄu"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friūlu"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fulu"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galisiešu"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "gandu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gēlu"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "grenlandiešu"
+ },
+ "el": {
+ "code": "el",
+ "name": "grieÄ·u"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "gruzīnu"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gudžaratu"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausu"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "holandiešu"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "horvÄtu"
+ },
+ "et": {
+ "code": "et",
+ "name": "igauņu"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonēziešu"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Ä«ru"
+ },
+ "is": {
+ "code": "is",
+ "name": "īslandiešu"
+ },
+ "it": {
+ "code": "it",
+ "name": "itÄļu"
+ },
+ "he": {
+ "code": "he",
+ "name": "ivrits"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "janbaņu"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japÄņu"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "jaunnorvēģu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "jorubu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabilu"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "kaboverdiešu"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalendžīnu"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kambu"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "KanÄdas angļu"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "KanÄdas franÄu"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannadu"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kašmiriešu"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalÄņu"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazahu"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmeru"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "kiga"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuju"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgīzu"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "kjembu"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koiraboro senni"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koiraÄiinÄ«"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Kongo svahili"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "korejiešu"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "krievu"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kvasio"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Ķelnes vÄcu"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "ķīniešu"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "Ä·Ä«nieÅ¡u tradicionÄlÄ"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "Ä·Ä«nieÅ¡u vienkÄrÅ¡otÄ"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiešu"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "latviešu"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "lejassorbu"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "LielbritÄnijas angļu"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lietuviešu"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "lubakatanga"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luhju"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luksemburgiešu"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "maÄamu"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makua-meetto"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "maķedoniešu"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malagasu"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malajalu"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malajiešu"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltiešu"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratu"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masaju"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Maurīcijas kreolu"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Meksikas spÄņu"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldÄvu"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongoļu"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundangu"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "mÅ«sdienu standarta arÄbu"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepÄlieÅ¡u"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norvēģu bukmols"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nueru"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "ņankolu"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriju"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "pandžabu"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persiešu"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "poļu"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugÄļu"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "puštu"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retoromÄņu"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "rietumfrīzu"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "ruanda"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumÄņu"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundu"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "senu"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbu"
+ },
+ "si": {
+ "code": "si",
+ "name": "singÄļu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovÄku"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "slovēņu"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "sogu"
+ },
+ "so": {
+ "code": "so",
+ "name": "somÄļu"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "somu"
+ },
+ "es": {
+ "code": "es",
+ "name": "spÄņu"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "standarta marokÄņu berberu"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "svahili"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Å¡ambalu"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Å¡ilhu"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Å¡onu"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Å veices augÅ¡vÄcu"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Å veices franÄu"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Å veices vÄcu"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taitu"
+ },
+ "th": {
+ "code": "th",
+ "name": "taju"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamilu"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasavaku"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetiešu"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinja"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongiešu"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turku"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uiguru"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukraiņu"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ungÄru"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeku"
+ },
+ "de": {
+ "code": "de",
+ "name": "vÄcu"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "vaju"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Vallisas vÄcu"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "velsiešu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vjetnamiešu"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vundžo"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarmu"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ziemeļndebelu"
+ },
+ "se": {
+ "code": "se",
+ "name": "ziemeļsÄmu"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "zviedru"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/mas.json b/library/intl/resources/language/mas.json
new file mode 100644
index 000000000..af04d4ecc
--- /dev/null
+++ b/library/intl/resources/language/mas.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "lnkʉtʉÌk É”Ìɔ̄ lBengali"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Maa"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "nkʉtʉÌk É”Ìɔ̄ faransa"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "nkʉtʉÌk É”Ìɔ̄ hausa"
+ },
+ "id": {
+ "code": "id",
+ "name": "nkʉtʉÌk É”Ìɔ̄ Indonesia"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "nkʉtʉÌk É”Ìɔ̄ japani"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lAkan"
+ },
+ "am": {
+ "code": "am",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lAmhari"
+ },
+ "be": {
+ "code": "be",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lBelarusi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lBulgaria"
+ },
+ "my": {
+ "code": "my",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lBurma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lcheki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lchina"
+ },
+ "so": {
+ "code": "so",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lchumari"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lduchi"
+ },
+ "el": {
+ "code": "el",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lgiriki"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lhungari"
+ },
+ "de": {
+ "code": "de",
+ "name": "nkʉtʉÌk É”Ìɔ̄ ljerumani"
+ },
+ "km": {
+ "code": "km",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lkambodia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lkorea"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lkrania"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lmarabu"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lmoindi"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lnepali"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lpersia"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lpoland"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lportuguese"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lpunjabi"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lromania"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lrusi"
+ },
+ "es": {
+ "code": "es",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lspania"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lswidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "nkʉtʉÌk É”Ìɔ̄ ltai"
+ },
+ "it": {
+ "code": "it",
+ "name": "nkʉtʉÌk É”Ìɔ̄ ltalian"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "nkʉtʉÌk É”Ìɔ̄ ltamil"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lturuki"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lurdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lvietinamu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lyoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "nkʉtʉÌk É”Ìɔ̄ lzulu"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "nkʉtʉÌk É”Ìɔ̄ malay"
+ },
+ "en": {
+ "code": "en",
+ "name": "nkʉtʉÌk É”Ìɔ̄ nkɨÌresa"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/mer.json b/library/intl/resources/language/mer.json
new file mode 100644
index 000000000..0898bba6c
--- /dev/null
+++ b/library/intl/resources/language/mer.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "KÄ©akani"
+ },
+ "am": {
+ "code": "am",
+ "name": "Kĩamarĩki"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "KÄ©arabu"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "KÄ©bangira"
+ },
+ "be": {
+ "code": "be",
+ "name": "KÄ©belarusi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Kĩbulugĩria"
+ },
+ "my": {
+ "code": "my",
+ "name": "KÄ©burma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "KÄ©cheki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "KÄ©china"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "KÄ©furansi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Kĩhangarĩ"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "KÄ©hausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Kĩhĩndi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "KÄ©holandi"
+ },
+ "id": {
+ "code": "id",
+ "name": "KÄ©indonesia"
+ },
+ "it": {
+ "code": "it",
+ "name": "Kĩitalĩ"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "KÄ©japani"
+ },
+ "km": {
+ "code": "km",
+ "name": "KÄ©kambodia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "KÄ©korea"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "KÄ©malesia"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Kĩmĩrũ"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "KÄ©nepali"
+ },
+ "en": {
+ "code": "en",
+ "name": "KÄ©ngeretha"
+ },
+ "el": {
+ "code": "el",
+ "name": "KÄ©ngiriki"
+ },
+ "de": {
+ "code": "de",
+ "name": "Kĩnjamanĩ"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "KÄ©pasia"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "KÄ©pochogo"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "KÄ©polandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "KÄ©punjabu"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "KÄ©rashia"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "KÄ©romania"
+ },
+ "so": {
+ "code": "so",
+ "name": "KÄ©somali"
+ },
+ "es": {
+ "code": "es",
+ "name": "Kĩspĩni"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "KÄ©swideni"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Kĩtakĩ"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "KÄ©tamilu"
+ },
+ "th": {
+ "code": "th",
+ "name": "KÄ©thailandi"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Kĩukirĩni"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "KÄ©urdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "KÄ©vietinamu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "KÄ©yoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "KÄ©zulu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/mfe.json b/library/intl/resources/language/mfe.json
new file mode 100644
index 000000000..511131998
--- /dev/null
+++ b/library/intl/resources/language/mfe.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "de": {
+ "code": "de",
+ "name": "alman"
+ },
+ "am": {
+ "code": "am",
+ "name": "amarik"
+ },
+ "en": {
+ "code": "en",
+ "name": "angle"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arab"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "be": {
+ "code": "be",
+ "name": "bieloris"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bilgar"
+ },
+ "my": {
+ "code": "my",
+ "name": "birman"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "es": {
+ "code": "es",
+ "name": "espagnol"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "franse"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "el": {
+ "code": "el",
+ "name": "grek"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "haoussa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "hongrwa"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ikrenien"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonezien"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "it": {
+ "code": "it",
+ "name": "italien"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmer, santral"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "koreen"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "kreol morisien"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "male"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepale"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "olande"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ourdou"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "penjabi"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persan"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polone"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portige"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ris"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "roumin"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "sinwa, mandarin"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somali"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "swedwa"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamoul"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "tchek"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "thaï"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "tirk"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamien"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "zapone"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zoulou"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/mg.json b/library/intl/resources/language/mg.json
new file mode 100644
index 000000000..7714fd25a
--- /dev/null
+++ b/library/intl/resources/language/mg.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "de": {
+ "code": "de",
+ "name": "Alemanina"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amharika"
+ },
+ "en": {
+ "code": "en",
+ "name": "Anglisy"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arabo"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengali"
+ },
+ "be": {
+ "code": "be",
+ "name": "Bielorosy"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Biolgara"
+ },
+ "my": {
+ "code": "my",
+ "name": "Birmana"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "es": {
+ "code": "es",
+ "name": "Espaniola"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Frantsay"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "el": {
+ "code": "el",
+ "name": "Grika"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "haoussa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Holandey"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "hongroà"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indonezianina"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "it": {
+ "code": "it",
+ "name": "Italianina"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japoney"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Koreanina"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Malay"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepale"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Okrainianina"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Ordò"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Penjabi"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Poloney"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portiogey"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Romanianina"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Rosianina"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Sinoa, Mandarin"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Soisa"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somalianina"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "Taioaney"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamoila"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Tiorka"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Tseky"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vietnamianina"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yôrobà"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zolò"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/mgh.json b/library/intl/resources/language/mgh.json
new file mode 100644
index 000000000..3d1c146b0
--- /dev/null
+++ b/library/intl/resources/language/mgh.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Iajemi"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Iarabu"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Ibangla"
+ },
+ "be": {
+ "code": "be",
+ "name": "Ibelausi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Ibulgaria"
+ },
+ "my": {
+ "code": "my",
+ "name": "Iburma"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Icheki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Ichina"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Ifaransa"
+ },
+ "el": {
+ "code": "el",
+ "name": "Igiriki"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Ihausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Ihindi"
+ },
+ "es": {
+ "code": "es",
+ "name": "Ihispaniola"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Iholanzi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Ihungari"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Ihurdu"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Ijapani"
+ },
+ "de": {
+ "code": "de",
+ "name": "Ijerimani"
+ },
+ "km": {
+ "code": "km",
+ "name": "Ikambodia"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Ikan"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Ikorea"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Imalesia"
+ },
+ "am": {
+ "code": "am",
+ "name": "Imhari"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indonesian"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Inepali"
+ },
+ "en": {
+ "code": "en",
+ "name": "Ingilishi"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Ipolandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Ipunjabi"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Irisi"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Iromania"
+ },
+ "so": {
+ "code": "so",
+ "name": "Isomali"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Iswidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Itailandi"
+ },
+ "it": {
+ "code": "it",
+ "name": "Italiano"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Itamil"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Ituruki"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Iukran"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Ivyetinamu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Iyoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Izulu"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makua"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Nreno"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/mk.json b/library/intl/resources/language/mk.json
new file mode 100644
index 000000000..9a4dc6f42
--- /dev/null
+++ b/library/intl/resources/language/mk.json
@@ -0,0 +1,738 @@
+{
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "агемÑки"
+ },
+ "az": {
+ "code": "az",
+ "name": "азербејџанÑки"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "аканÑки"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "албанÑки"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "американÑки англиÑки"
+ },
+ "am": {
+ "code": "am",
+ "name": "амхарÑки"
+ },
+ "en": {
+ "code": "en",
+ "name": "англиÑки"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "арапÑки"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "аÑтурÑки"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "аÑу"
+ },
+ "af": {
+ "code": "af",
+ "name": "африканÑ"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "бамбара"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "баÑа"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "баÑкиÑки"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "бафија"
+ },
+ "be": {
+ "code": "be",
+ "name": "белоруÑки"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "бена"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "бенгалÑки"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "бодо"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "боÑанÑки"
+ },
+ "br": {
+ "code": "br",
+ "name": "бретонÑки"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "британÑки англиÑки"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "бугарÑки"
+ },
+ "my": {
+ "code": "my",
+ "name": "бурманÑки"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "вај"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "валÑер"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "велшки"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "виетнамÑки"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "вунџо"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "галициÑки"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ганда"
+ },
+ "de": {
+ "code": "de",
+ "name": "германÑки"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "горнолужички"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "грузиÑки"
+ },
+ "el": {
+ "code": "el",
+ "name": "грчки"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "гуÑи"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "гуџарати"
+ },
+ "da": {
+ "code": "da",
+ "name": "данÑки"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "долнолужички"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "еве"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "евондо"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "ембу"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "ерменÑки"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "еÑперанто"
+ },
+ "et": {
+ "code": "et",
+ "name": "еÑтонÑки"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "западнофризиÑки"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "зарма"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "зулу"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "ѕонгка"
+ },
+ "id": {
+ "code": "id",
+ "name": "индонезиÑки"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "ирÑки"
+ },
+ "is": {
+ "code": "is",
+ "name": "иÑландÑки"
+ },
+ "it": {
+ "code": "it",
+ "name": "италијанÑки"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "јапонÑки"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "јенгбен"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "јола-фоњи"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "јорупÑки"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "кабилÑки"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "кабувердиану"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "казакÑтанÑки"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "калалиÑут"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "каленџин"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "камба"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "каннада"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "каталонÑки"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "кашмирÑки"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "квазио"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "кикују"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "кинеÑки"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "киргиÑки"
+ },
+ "km": {
+ "code": "km",
+ "name": "кмерÑки"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "којра чиини"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "којраборо Ñени"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "колоњÑки"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "конгоанÑки Ñвахили"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "корејÑки"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "ланги"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "лаошки"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "латвиÑки"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "лингала"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "литванÑки"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "литературен арапÑки"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "луба-катанга"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "луја"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "лукÑембуршки"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "луо"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "македонÑки"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "маконде"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "макува-мито"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "малајалам"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "малајÑки"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "малгашки"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "малтешки"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "марати"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "маÑајÑки"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "мачаме"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "меру"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "молдавÑки"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "монголÑки"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "мориÑјен"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "мунданг"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "нама"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "нгомба"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "непалÑки"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "норвешки букмол"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "норвешки нинорÑк"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "нуер"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "њанколе"
+ },
+ "or": {
+ "code": "or",
+ "name": "орија"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "паштунÑки"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "пенџапÑки"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "перÑиÑки"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "поедноÑтавен кинеÑки"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "полÑки"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "португалÑки"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "португалÑки (во Европа)"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "ретороманÑки"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "романÑки"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "ромбо"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "руа"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "рунди"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "руÑки"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Ñамбуру"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Ñанго"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Ñангу"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Ñвахили"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Ñеверен ндебеле"
+ },
+ "se": {
+ "code": "se",
+ "name": "ÑевернолапонÑки"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Ñена"
+ },
+ "si": {
+ "code": "si",
+ "name": "ÑинхалÑки"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Ñловачки"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Ñловенечки"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Ñога"
+ },
+ "so": {
+ "code": "so",
+ "name": "ÑомалиÑки"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "ÑрпÑки"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Ñтандарден мароканÑки тамазигтÑки"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "тазавак"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "таита"
+ },
+ "th": {
+ "code": "th",
+ "name": "тајландÑки"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "тамилÑки"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "тачелхит"
+ },
+ "te": {
+ "code": "te",
+ "name": "телугу"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "теÑо"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "тибетÑки"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "тигриња"
+ },
+ "to": {
+ "code": "to",
+ "name": "тонганÑки"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "традиционален кинеÑки"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "турÑки"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "узбекиÑтанÑки"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ујгурÑки"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "украинÑки"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "унгарÑки"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "урду"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "фарÑки"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "филипинÑки"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "финÑки"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "француÑки"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "француÑки (во Канада)"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "фула"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "фурланÑки"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "хауÑа"
+ },
+ "he": {
+ "code": "he",
+ "name": "хебрејÑки"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "хинди"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "холандÑки"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "хрватÑки"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "централно мароканÑки тамазитÑки"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "черокиÑки"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "чешки"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "чига"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "шамбала"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "швајцарÑки германÑки"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "шведÑки"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "шкотÑки гелÑки"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "шона"
+ },
+ "es": {
+ "code": "es",
+ "name": "шпанÑки"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "шпанÑки (во Европа)"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ml.json b/library/intl/resources/language/ml.json
new file mode 100644
index 000000000..536d628ad
--- /dev/null
+++ b/library/intl/resources/language/ml.json
@@ -0,0 +1,738 @@
+{
+ "ak": {
+ "code": "ak",
+ "name": "അകാൻ‌"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "à´…à´ªàµà´ªàµ¼ സോർബിയൻ"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "അമേരികàµà´•àµ» ഇംഗàµà´²àµ€à´·àµ"
+ },
+ "am": {
+ "code": "am",
+ "name": "അംഹാരികàµ"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "അർമേനിയൻ"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "അൽബേനിയൻ"
+ },
+ "az": {
+ "code": "az",
+ "name": "അസർബൈജാനി"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "അറബികàµ"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "ആഘേം"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ആധàµà´¨à´¿à´• à´¸àµà´±àµà´±à´¾àµ»à´¡àµ‡àµ¼à´¡àµ അറബികàµ"
+ },
+ "af": {
+ "code": "af",
+ "name": "ആഫàµà´°à´¿à´•àµà´•à´¾àµ»à´¸àµ"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "ആസàµ"
+ },
+ "id": {
+ "code": "id",
+ "name": "ഇൻഡോനേഷàµà´¯àµ»"
+ },
+ "en": {
+ "code": "en",
+ "name": "ഇംഗàµà´²àµ€à´·àµ"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ഇവàµ"
+ },
+ "it": {
+ "code": "it",
+ "name": "ഇറàµà´±à´¾à´²à´¿à´¯àµ»"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ഉകàµà´°àµ‡à´¨à´¿à´¯àµ»"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ഉയàµà´˜àµàµ¼"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "ഉസàµâ€Œà´¬àµ†à´•àµà´•àµ"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ഉറàµà´¦àµ"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "à´Žà´‚à´¬àµ"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "എവോൻഡോ"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "à´Žà´¸àµâ€Œà´ªà´°à´¾à´¨àµà´±àµ‹"
+ },
+ "et": {
+ "code": "et",
+ "name": "à´Žà´¸àµà´±àµà´±àµ‹à´£à´¿à´¯àµ»"
+ },
+ "is": {
+ "code": "is",
+ "name": "à´à´¸àµâ€Œà´²à´¾àµ»à´¡à´¿à´•àµ"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "à´à´±à´¿à´·àµ"
+ },
+ "or": {
+ "code": "or",
+ "name": "à´’à´¡à´¿à´¯"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "à´“à´¸àµâ€Œà´Ÿàµà´°à´¿à´¯àµ»"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "à´“à´¸àµâ€Œà´Ÿàµà´°à´¿à´¯àµ» ജർമൻ"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "à´“à´¸àµâ€Œà´Ÿàµà´°àµ‡à´²à´¿à´¯àµ» ഇംഗàµà´²àµ€à´·àµ"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "കനേഡിയൻ ഇംഗàµà´²àµ€à´·àµ"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "കനേഡിയൻ à´«àµà´°à´žàµà´šàµ"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "à´•à´¨àµà´¨à´¡"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "à´•à´¬àµà´µàµ†àµ¼à´¦à´¿à´¯à´¾à´¨àµ"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "കബൈൽ"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "à´•à´‚à´¬"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "കലാലàµà´²à´¿à´¸à´Ÿàµà´Ÿàµ"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "കലെഞàµà´žà´¿àµ»"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "കസാഖàµ"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "à´•à´±àµà´±à´¾à´²à´¾àµ»"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "കാശàµâ€Œà´®àµ€à´°à´¿"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "കികൂയàµ"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "കിർഗിസàµ"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "കൊയàµà´± ചീനി"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "കൊയàµà´±à´¾à´¬àµŠà´±àµ‹ സെനàµà´¨à´¿"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "കൊളോഞàµà´žà´¿à´¯àµ»"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "കൊറിയൻ"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "കോംഗോ à´¸àµà´µà´¾à´¹à´¿à´²à´¿"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "à´•àµà´°àµŠà´¯àµ‡à´·àµà´¯àµ»"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "à´•àµà´µà´¾à´¸à´¿à´¯àµ‹"
+ },
+ "km": {
+ "code": "km",
+ "name": "ഖമെർ"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "ഗലീഷàµà´¯àµ»"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ഗാണàµà´Ÿ"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "à´—àµà´œà´±à´¾à´¤àµà´¤à´¿"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "à´—àµà´¸àµ€"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ഗോമàµà´ª"
+ },
+ "el": {
+ "code": "el",
+ "name": "à´—àµà´°àµ€à´•àµà´•àµ"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "à´šà´¿à´—"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "ചീനഭാഷ-പരമàµà´ªà´°à´¾à´—തലിപി"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "ചീനഭാഷ-ലളിതലിപി"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ചെകàµà´•àµ"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "ചൈനീസàµ"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ജപàµà´ªà´¾à´¨àµ€à´¸àµ"
+ },
+ "de": {
+ "code": "de",
+ "name": "ജർമàµà´®àµ»"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "ജോർജിയൻ"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "ടർകàµà´•à´¿à´·àµ"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "ടസവാകàµà´•àµ"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "ടിബറàµà´±àµ»"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "ടെസോ"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "ടൈഗàµà´°à´¿à´¨àµà´¯"
+ },
+ "to": {
+ "code": "to",
+ "name": "ടോംഗൻ"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "à´¡à´šàµà´šàµ"
+ },
+ "da": {
+ "code": "da",
+ "name": "ഡാനിഷàµ"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "തമിഴàµ"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "താചàµà´šà´²à´¿à´±àµà´±àµ"
+ },
+ "th": {
+ "code": "th",
+ "name": "തായàµ"
+ },
+ "te": {
+ "code": "te",
+ "name": "തെലàµà´™àµà´•àµ"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "തൈത"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "നാമ"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "à´¨àµà´µàµ‡àµ¼"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "നേപàµà´ªà´¾à´³à´¿"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "നോർതàµà´¤àµ ഡെബിൾ"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "നോർവീജിയൻ നൈനോർകàµâ€Œà´¸àµ"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "നോർവീജിയൻ à´¬àµà´•àµâ€Œà´®àµ½"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "à´¨àµà´¯à´¾àµ»à´•àµ‹àµ¾"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "പഞàµà´šà´¾à´¬à´¿"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "പശàµà´šà´¿à´® à´«àµà´°à´¿à´·à´¿à´¯àµ»"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "പഷàµà´¤àµ"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "പേർഷàµà´¯àµ»"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "പോർചàµà´šàµà´—ീസàµ"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "പോളിഷàµ"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "ഫാറോസàµ"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "à´«à´¿à´¨àµà´¨à´¿à´·àµ"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "ഫിലിപàµà´ªà´¿à´¨àµ‹"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "à´«àµà´²"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "à´«àµà´°à´žàµà´šàµ"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "à´«àµà´°à´¿à´¯àµà´²à´¿à´¯à´¾àµ»"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "à´«àµà´²à´®à´¿à´·àµ"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "ബംഗാളി"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "ബംബാറ"
+ },
+ "my": {
+ "code": "my",
+ "name": "ബർമീസàµ"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "ബസ"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ബൾഗേറിയൻ"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "ബാസàµâ€Œà´•àµ"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "ബെനാ"
+ },
+ "be": {
+ "code": "be",
+ "name": "ബെലാറàµà´·àµà´¯àµ»"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "ബോഡോ"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "ബോസàµà´¨à´¿à´¯àµ»"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "à´¬àµà´°à´¸àµ€à´²à´¿à´¯àµ» പോർചàµà´šàµà´—ീസàµ"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "à´¬àµà´°à´¿à´Ÿàµà´Ÿàµ€à´·àµ ഇംഗàµà´²àµ€à´·àµ"
+ },
+ "br": {
+ "code": "br",
+ "name": "à´¬àµà´°àµ†à´Ÿàµà´Ÿàµº"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "ഭാഫിയ"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "മകàµà´•àµ‹à´£àµà´Ÿàµ†"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "മചേം"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "മധàµà´¯ à´…à´±àµà´±àµâ€Œà´²à´¸àµ ടമാസൈറàµà´±àµ"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "മംഗോളിയൻ"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "മലഗാസി"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "മലയാളം"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "മലെയàµ"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "മസായàµ"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "മറാതàµà´¤à´¿"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "മാഖàµà´µà´¾-മീതàµà´¤àµ‹"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "മാസിഡോണിയൻ"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "മാൾടàµà´Ÿàµ€à´¸àµ"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "à´®àµà´¨àµà´¦à´¾à´‚à´—àµ"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "മെകàµà´¸à´¿à´•àµà´•àµ» à´¸àµà´ªà´¾à´¨à´¿à´·àµ"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "മേരàµ"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "മൊറിസിൻ"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "മൊറോകàµà´•àµ» സാധാരണ താമസൈറàµà´±àµ"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "മോൾഡാവിയൻ"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "യാംഗàµà´¬àµ†àµ»"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "യൂറോപàµà´¯àµ» പോർചàµà´šàµà´—ീസàµ"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "യൂറോപàµà´¯àµ» à´¸àµâ€Œà´ªà´¾à´¨à´¿à´·àµ"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "യൊറൂബാ"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "യോല-ഫോനàµà´¯à´¿"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "ലകàµâ€Œà´¸à´‚ബർഗിഷàµ"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "ലാംഗി"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "ലാവോ"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "ലാറàµà´±àµà´µà´¿à´¯àµ»"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "ലിതàµà´µà´¾à´¨à´¿à´¯àµ»"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "ലിംഗാല"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "à´²àµà´¬-à´•à´±àµà´±à´‚à´—"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "à´²àµà´¯à´¿à´¯"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "à´²àµà´µàµ‹"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "ലോവർ സോർബിയൻ"
+ },
+ "se": {
+ "code": "se",
+ "name": "വടകàµà´•àµ» സമി"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "വാൾസർ"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "വിയറàµà´±àµà´¨à´¾à´®àµ€à´¸àµ"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "à´µàµà´žàµà´œàµ‹"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "വെൽഷàµ"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "വൈ"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "ഷംഭാള"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "ഷെരോകàµà´•à´¿"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "ഷോണ"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "സംഗàµ"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "സംബàµà´°àµ"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "സാംഗോ"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "സാർമàµà´®"
+ },
+ "si": {
+ "code": "si",
+ "name": "സിംഹള"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "à´¸àµà´²àµ"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "സെർബിയൻ"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "സേന"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "സോഗോ"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "സോങàµà´•"
+ },
+ "so": {
+ "code": "so",
+ "name": "സോമാലി"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "à´¸àµà´•àµ‹à´Ÿàµà´Ÿà´¿à´·àµ ഗൈലികàµ"
+ },
+ "es": {
+ "code": "es",
+ "name": "à´¸àµâ€Œà´ªà´¾à´¨à´¿à´·àµ"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "à´¸àµà´²àµ‹à´µà´¾à´•àµ"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "à´¸àµà´²àµ‹à´µàµ‡à´¨à´¿à´¯àµ»"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "à´¸àµà´µà´¾à´¹à´¿à´²à´¿"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "à´¸àµà´µà´¿à´¸àµ ജർമàµà´®àµ»"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "à´¸àµà´µà´¿à´¸àµ à´«àµà´°à´žàµà´šàµ"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "à´¸àµà´µà´¿à´¸àµ ഹൈ ജർമൻ"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "à´¸àµà´µàµ€à´¡à´¿à´·àµ"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ഹംഗേറിയൻ"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "ഹിനàµà´¦à´¿"
+ },
+ "he": {
+ "code": "he",
+ "name": "ഹീബàµà´°àµ"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "ഹൗസ"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "റഷàµà´¯àµ»"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "à´±àµà´£àµà´Ÿà´¿"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "à´±àµà´µà´¾"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "റൊമാഞàµà´šàµ"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "റൊമാനിയൻ"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "റോംബോ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/mn.json b/library/intl/resources/language/mn.json
new file mode 100644
index 000000000..2b2598c00
--- /dev/null
+++ b/library/intl/resources/language/mn.json
@@ -0,0 +1,738 @@
+{
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "авÑтрали англи"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "авÑтри герман"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "агем"
+ },
+ "az": {
+ "code": "az",
+ "name": "азербайжан"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "акан"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "албани"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "америкийн англи"
+ },
+ "am": {
+ "code": "am",
+ "name": "амхар"
+ },
+ "en": {
+ "code": "en",
+ "name": "англи"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "араб"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "армен"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "аÑу"
+ },
+ "af": {
+ "code": "af",
+ "name": "африк"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "балба"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "бамбара"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "баруун фризын"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "баÑк"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "бафиа"
+ },
+ "be": {
+ "code": "be",
+ "name": "беларуÑÑŒ"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "бена"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "бенгал"
+ },
+ "my": {
+ "code": "my",
+ "name": "бирм"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "бодо"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "болгар"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "боÑни"
+ },
+ "br": {
+ "code": "br",
+ "name": "бретон"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "британийн англи"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "вай"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "вунжо"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "вьетнам"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "галик"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ганда"
+ },
+ "de": {
+ "code": "de",
+ "name": "герман"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "голланд"
+ },
+ "el": {
+ "code": "el",
+ "name": "грек"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "гужарати"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "гузы"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "гүрж"
+ },
+ "da": {
+ "code": "da",
+ "name": "дани"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "дÑÑд Ñорби"
+ },
+ "he": {
+ "code": "he",
+ "name": "еврей"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "европын иÑпани"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "европын португал"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ёруба"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "жола-фони"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "жонха"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "зарма"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "зулу"
+ },
+ "id": {
+ "code": "id",
+ "name": "индонези"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "ирланд"
+ },
+ "is": {
+ "code": "is",
+ "name": "иÑланд"
+ },
+ "es": {
+ "code": "es",
+ "name": "иÑпани"
+ },
+ "it": {
+ "code": "it",
+ "name": "итали"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "кабиле"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "кабүвердиану"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "калалиÑут"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "каленжин"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "камба"
+ },
+ "km": {
+ "code": "km",
+ "name": "камбож"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "канад англи"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "канад франц"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "каннада"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "каталан"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "кашмир"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "квазио"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "кёраборо Ñени"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "кикуюү"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "киргиз"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "койра чини"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "конго Ñвахили"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "ланги"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "лаоÑ"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "латви"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "лингала"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "литва"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "ловер-Ñорби"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "луба-катанга"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "луо"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "луÑа"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "люкÑембург"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "македон"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "маконде"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "макува-мито"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "малагаÑи"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "малай"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "малайлам"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "малти"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "марати"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "маÑай"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "мачамÑ"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "мекÑикийн иÑпани"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "меру"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "молдав"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "монгол"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "мориÑен"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "мунданг"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "нама"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "нгомба"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "норвегийн букмол"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "норвегийн нинорÑк"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "нуер"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "нÑнколе"
+ },
+ "or": {
+ "code": "or",
+ "name": "ориÑ"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ороÑ"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "панжаб"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "пашто"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "перÑ"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "польш"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "португал"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "португал (бразил)"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "рва"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "романш"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "ромбо"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "румын"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "рунди"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Ñамбүрү"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Ñанго"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Ñангү"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Ñвахили"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Ñена"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Ñерб"
+ },
+ "si": {
+ "code": "si",
+ "name": "Ñинхала"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Ñловак"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Ñловен"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Ñога"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "ÑолонгоÑ"
+ },
+ "so": {
+ "code": "so",
+ "name": "Ñомали"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "Ñтандарт араб"
+ },
+ "th": {
+ "code": "th",
+ "name": "тай"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "тайта"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "тамазит"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "тамил"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "таÑавак"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "тачелхит"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "тигрина"
+ },
+ "to": {
+ "code": "to",
+ "name": "тонга"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "төв атлаÑын тамазайт"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "төвд"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "турк"
+ },
+ "te": {
+ "code": "te",
+ "name": "Ñ‚Ñлүгү"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Ñ‚ÑÑо"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "узбек"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "уйгар"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "украйн"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "уламжлалт Ñ…Ñтад"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "унгар"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "урду"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "уÑлÑ"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "фарер"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "филиппин"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "финлÑнд"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "фламанд"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "франц"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "хаÑаг"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "хауÑа"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "хинди"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "хойд ндебеле"
+ },
+ "se": {
+ "code": "se",
+ "name": "хойд Ñами"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "хорват"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "Ñ…ÑлбаршуулÑан Ñ…Ñтад"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Ñ…Ñтад"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "чех"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "чига"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "чироки"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "шамбала"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "швед"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "швейцари герман"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "швейцари дÑÑÑ€ герман"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "швейцари франц"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "шона"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "шотланд келт"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ÑвÑ"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Ñмбу"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "ÑÑперанто"
+ },
+ "et": {
+ "code": "et",
+ "name": "ÑÑтони"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Ñпон"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/mr.json b/library/intl/resources/language/mr.json
new file mode 100644
index 000000000..aaa3f3189
--- /dev/null
+++ b/library/intl/resources/language/mr.json
@@ -0,0 +1,738 @@
+{
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "अकान"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "अघेम"
+ },
+ "az": {
+ "code": "az",
+ "name": "अà¤à¤°à¤¬à¥ˆà¤œà¤¾à¤¨à¥€"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "अपà¥à¤ªà¤° सॉरà¥à¤¬à¤¿à¤¯à¤¨"
+ },
+ "af": {
+ "code": "af",
+ "name": "अफà¥à¤°à¤¿à¤•à¤¾à¤¨à¥à¤¸"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "अमेरिकन इंगà¥à¤°à¤œà¥€"
+ },
+ "am": {
+ "code": "am",
+ "name": "अमà¥à¤¹à¤¾à¤°à¤¿à¤•"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "अरबी"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "अलà¥à¤¬à¤¾à¤¨à¤¿à¤¯à¤¨"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "असà¥"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "असà¥à¤¤à¥à¤°à¤¿à¤¯à¤¨"
+ },
+ "is": {
+ "code": "is",
+ "name": "आईसलà¤à¤¡à¤¿à¤•"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "आधà¥à¤¨à¤¿à¤• पà¥à¤°à¤®à¤¾à¤£à¤¿à¤¤ अरबी"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "आयरिश"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "आरà¥à¤®à¥‡à¤¨à¤¿à¤¯à¤¨"
+ },
+ "en": {
+ "code": "en",
+ "name": "इंगà¥à¤°à¤œà¥€"
+ },
+ "id": {
+ "code": "id",
+ "name": "इंडोनेशियन"
+ },
+ "it": {
+ "code": "it",
+ "name": "इटालियन"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "इवोनà¥à¤¡à¥‹"
+ },
+ "et": {
+ "code": "et",
+ "name": "इसà¥à¤Ÿà¥‹à¤¨à¤¿à¤¯à¤¨"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "उइगà¥à¤°"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "उà¤à¥à¤¬à¥‡à¤•"
+ },
+ "or": {
+ "code": "or",
+ "name": "उडिया"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "उतà¥à¤¤à¤° देबेली"
+ },
+ "se": {
+ "code": "se",
+ "name": "उतà¥à¤¤à¤°à¥€ सामी"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "उरà¥à¤¦à¥‚"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "à¤à¤®à¥à¤¬à¥‚"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "à¤à¤µà¥‡"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "à¤à¤¸à¥à¤ªà¤°à¤¾à¤¨à¥à¤Ÿà¥‹"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "ऑसà¥à¤Ÿà¥à¤°à¤¿à¤¯à¤¨ जरà¥à¤®à¤¨"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "ऑसà¥à¤Ÿà¥à¤°à¥‡à¤²à¤¿à¤¯à¤¨ इंगà¥à¤°à¤œà¥€"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "कà¤à¤¾à¤•"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "कनà¥à¤¨à¤¡"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "कबाइल"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "कलालà¥à¤²à¤¿à¤¸à¤¤"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "काà¤à¤—ो सà¥à¤µà¤¾à¤¹à¤¿à¤²à¥€"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "कातालान"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "काबवरà¥à¤¦à¤¿à¤¯à¤¾à¤¨à¥"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "कामà¥à¤¬à¤¾"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "कालेंजीन"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "काशà¥à¤®à¥€à¤°à¥€"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "किकà¥à¤¯à¥‚"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "किगा"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "किरगीà¤"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "कॅनडियन इंगà¥à¤°à¤œà¥€"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "कॅनडियन फà¥à¤°à¥‡à¤‚च"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "कोयरा चीनी"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "कोयराबोरो सेनà¥à¤¨à¥€"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "कोरियन"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "कà¥à¤°à¥‹à¤à¤¶à¤¿à¤¯à¤¨"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "कà¥à¤µà¤¾à¤¸à¤¿à¤“"
+ },
+ "km": {
+ "code": "km",
+ "name": "खà¥à¤®à¥‡à¤°"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "गसी"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "गांडा"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "गà¥à¤œà¤°à¤¾à¤¤à¥€"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "गॅलिशियन"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "गोमà¥à¤¬à¤¾"
+ },
+ "el": {
+ "code": "el",
+ "name": "गà¥à¤°à¥€à¤•"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "चीनी"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "चेरोकी"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "जपानी"
+ },
+ "de": {
+ "code": "de",
+ "name": "जरà¥à¤®à¤¨"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "जॉरà¥à¤œà¤¿à¤¯à¤¨"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "जोला-फोंयी"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "à¤à¤¾à¤°à¥à¤®à¤¾"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "à¤à¥à¤²à¥‚"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "à¤à¥‡à¤•"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "à¤à¥‹à¤‚गखा"
+ },
+ "to": {
+ "code": "to",
+ "name": "टोंगन"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "डच"
+ },
+ "da": {
+ "code": "da",
+ "name": "डॅनिश"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "तामिळ"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "तायता"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "ताशेलà¥à¤¹à¤¿à¤Ÿ"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "तासावà¥à¤¹à¤¾à¤•"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "तिगà¥à¤°à¤¿à¤¨à¥à¤¯à¤¾"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "तिबेटी"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "तà¥à¤°à¥à¤•à¥€"
+ },
+ "te": {
+ "code": "te",
+ "name": "तेलगू"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "तेसो"
+ },
+ "th": {
+ "code": "th",
+ "name": "थाई"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "नामा"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "नà¥à¤à¤°"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "नेपाळी"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "नॉरà¥à¤µà¥‡à¤œà¤¿à¤¯à¤¨ नà¥à¤¯à¥‹à¤°à¥à¤¸à¥à¤•"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "नॉरà¥à¤µà¥‡à¤œà¤¿à¤¯à¤¨ बोकमाल"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "नà¥à¤¯à¤¾à¤¨à¤•à¥‹à¤²"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "पंजाबी"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "पशà¥à¤šà¤¿à¤®à¥€ फà¥à¤°à¤¿à¤¶à¤¿à¤¯à¤¨"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "पशà¥à¤¤à¥‹"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "पारंपारिक चीनी"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "पोरà¥à¤¤à¥à¤—ीज"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "पोलिश"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "पà¥à¤°à¤®à¤¾à¤£ मोरोकà¥à¤•à¤¨ तॅमॅà¤à¤¾à¤¯à¤Ÿ"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "फरोइज"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "फारसी"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "फिनà¥à¤¨à¤¿à¤¶"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "फिलिपिनो"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "फà¥à¤²à¤¾à¤¹"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "फà¥à¤°à¤¿à¤¯à¥à¤²à¤¿à¤¯à¤¾à¤¨"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "फà¥à¤°à¥‡à¤‚च"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "फà¥à¤²à¥‡à¤®à¤¿à¤¶"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "बंगाली"
+ },
+ "my": {
+ "code": "my",
+ "name": "बरà¥à¤®à¥€"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "बलà¥à¤—ेरियन"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "बसा"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "बाफिया"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "बामà¥à¤¬à¤¾à¤°à¤¾"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "बासà¥à¤•"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "बेना"
+ },
+ "be": {
+ "code": "be",
+ "name": "बेलारà¥à¤¶à¤¿à¤¯à¤¨"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "बोडो"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "बोसà¥à¤¨à¤¿à¤¯à¤¨"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "बà¥à¤°à¤¾à¤à¤¿à¤²à¤¿à¤¯à¤¨ पोरà¥à¤¤à¥à¤—ीज"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "बà¥à¤°à¤¿à¤Ÿà¤¿à¤¶ इंगà¥à¤°à¤œà¥€"
+ },
+ "br": {
+ "code": "br",
+ "name": "बà¥à¤°à¥‡à¤¤à¥‰à¤¨"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "मंगोलियन"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "मधà¥à¤¯ à¤à¤Ÿà¤²à¤¾à¤¸ तॅमॅà¤à¤¾à¤¯à¤Ÿ"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "मराठी"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "मलय"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "मलागसी"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "मलà¥à¤¯à¤¾à¤³à¤®"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "मशामे"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "मसाई"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "माकोनà¥à¤¦à¥‡"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "माखà¥à¤µà¥à¤¹à¤¾-मीटà¥à¤Ÿà¥‹"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "मालà¥à¤Ÿà¤¿à¤œà¥"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "मà¥à¤‚डांग"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "मॅसेडोनियन"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "मेकà¥à¤¸à¤¿à¤•à¤¨ सà¥à¤ªà¥…निश"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "मेरू"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "मोरिसà¥à¤¯à¥‡à¤¨"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "मोलà¥à¤¡à¤¾à¤µà¥à¤¹à¤¿à¤¯à¤¨"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "यà¥à¤•à¥à¤°à¥‡à¤¨à¤¿à¤¯à¤¨"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "यà¥à¤°à¥‹à¤ªà¤¿à¤¯à¤¨ पोरà¥à¤¤à¥à¤—ीज"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "यà¥à¤°à¥‹à¤ªà¤¿à¤¯à¤¨ सà¥à¤ªà¥…निश"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "योरà¥à¤¬à¤¾"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "रवà¥à¤¹à¤¾"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "रशियन"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "रà¥à¤¨à¥à¤¦à¥€"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "रोमानियन"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "रोमानà¥à¤¶"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "रोमà¥à¤¬à¥‹"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "लकà¥à¤à¥‡à¤‚बरà¥à¤—िश"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "लांगी"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "लाओ"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "लातà¥à¤µà¥à¤¹à¤¿à¤¯à¤¨"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "लिंगाला"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "लिथà¥à¤†à¤¨à¤¿à¤¯à¤¨"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "लोअर सोरà¥à¤¬à¤¿à¤¯à¤¨"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "लà¥à¤¯à¥à¤‡à¤¯à¤¾"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "लà¥à¤¯à¥à¤“"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "लà¥à¤¯à¥‚बा-कटांगा"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "वाई"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "वà¥à¤‚जो"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "वेलà¥à¤¶"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "वà¥à¤¹à¤¿à¤à¤¤à¤¨à¤¾à¤®à¥€"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "शांबाला"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "शोना"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "सरलीकृत चीनी"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "सरà¥à¤¬à¤¿à¤¯à¤¨"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "सांगà¥"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "सांगो"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "सांबà¥à¤°à¥‚"
+ },
+ "si": {
+ "code": "si",
+ "name": "सिंहला"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "सेना"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "सोगा"
+ },
+ "so": {
+ "code": "so",
+ "name": "सोमाली"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "सà¥à¤•à¥‰à¤Ÿà¥à¤¸ गेलिक"
+ },
+ "es": {
+ "code": "es",
+ "name": "सà¥à¤ªà¥…निश"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "सà¥à¤²à¥‹à¤µà¥à¤¹à¤¾à¤•"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "सà¥à¤²à¥‹à¤µà¥à¤¹à¥‡à¤¨à¤¿à¤¯à¤¨"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "सà¥à¤µà¤¾à¤¹à¤¿à¤²à¥€"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "सà¥à¤µà¤¿à¤¸ जरà¥à¤®à¤¨"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "सà¥à¤µà¤¿à¤¸ फà¥à¤°à¥‡à¤‚च"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "सà¥à¤µà¤¿à¤¸ हाय जरà¥à¤®à¤¨"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "सà¥à¤µà¥€à¤¡à¤¿à¤¶"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "हंगेरियन"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "हिंदी"
+ },
+ "he": {
+ "code": "he",
+ "name": "हिबà¥à¤°à¥‚"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "हौसा"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ms.json b/library/intl/resources/language/ms.json
new file mode 100644
index 000000000..40e671ae1
--- /dev/null
+++ b/library/intl/resources/language/ms.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albania"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amharic"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arab"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "Arab Standard Moden"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenia"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijan"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Bahasa Melayu"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Belanda"
+ },
+ "be": {
+ "code": "be",
+ "name": "Belarus"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Benggala"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Bokmål Norway"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnia"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgaria"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burma"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalonia"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Cina"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "Cina Ringkas"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "Cina Tradisional"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croat"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Czech"
+ },
+ "da": {
+ "code": "da",
+ "name": "Denmark"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonia"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroe"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipina"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finland"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Flemish"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Frisian"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galicia"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgia"
+ },
+ "el": {
+ "code": "el",
+ "name": "Greek"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujerat"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hungary"
+ },
+ "he": {
+ "code": "he",
+ "name": "Ibrani"
+ },
+ "is": {
+ "code": "is",
+ "name": "Iceland"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indonesia"
+ },
+ "en": {
+ "code": "en",
+ "name": "Inggeris"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "Inggeris AS"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Inggeris Australia"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Inggeris British"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "Inggeris Kanada"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Ireland"
+ },
+ "it": {
+ "code": "it",
+ "name": "Itali"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Jepun"
+ },
+ "de": {
+ "code": "de",
+ "name": "Jerman"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "Jerman Austria"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Jerman Halus Switzerland"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Jerman Switzerland"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmir"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakhstan"
+ },
+ "km": {
+ "code": "km",
+ "name": "Khmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuya"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kirghiz"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Korea"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Laos"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvia"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuania"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourg"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Malta"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "Moldavia"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolia"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Ndebele Utara"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepal"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Nynorsk Norway"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Parsi"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Perancis"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Perancis Kanada"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Perancis Switzerland"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Poland"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portugis"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Portugis Brazil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Portugis Eropah"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Punjabi"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Romania"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Rusia"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "Sami Utara"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scots Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "es": {
+ "code": "es",
+ "name": "Sepanyol"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Sepanyol Eropah"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Sepanyol Mexico"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbia"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenia"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somali"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Sweden"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Tamazight Atlas Tengah"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Tamazight Maghribi Standard"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "Thai"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibet"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tonga"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Turki"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukraine"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbekistan"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vietnam"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Wales"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/mt.json b/library/intl/resources/language/mt.json
new file mode 100644
index 000000000..112c079d0
--- /dev/null
+++ b/library/intl/resources/language/mt.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albaniż"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amħariku"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenjan"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Ażerbajġani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Bask"
+ },
+ "be": {
+ "code": "be",
+ "name": "Belarussu"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengali"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Bokmahal Norveġiż"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnijan"
+ },
+ "br": {
+ "code": "br",
+ "name": "Brenton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgaru"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burmiż"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ÄŠek"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "ÄŠerokij"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Ċiniż"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "Ċiniż Simplifikat"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "da": {
+ "code": "da",
+ "name": "Daniż"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dżongka"
+ },
+ "he": {
+ "code": "he",
+ "name": "Ebrajk"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonjan"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Fawriż"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filippino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finlandiż"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Franċiż"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Franċiż Kanadiż"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Franċiż Żvizzeru"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Frijuljan"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Friżjan"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulaħ"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Ġappuniż"
+ },
+ "de": {
+ "code": "de",
+ "name": "Ġermaniż"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Ġorġjan"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Gallegjan"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Galliku Skoċċiż"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "el": {
+ "code": "el",
+ "name": "Grieg"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Guġarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Għarbi"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "Għarbi Standard Modern"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Ħawsa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Ħindi"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indoneżjan"
+ },
+ "en": {
+ "code": "en",
+ "name": "Ingliż"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "Ingliż Amerikan"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Ingliż Awstraljan"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Ingliż Brittaniku"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irlandiż"
+ },
+ "is": {
+ "code": "is",
+ "name": "Iżlandiż"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Joruba"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabuljan"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Katalan"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kaxmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Każak"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuju"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kirgiż"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kmer"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Korejan"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Kroat"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvjan"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Letżburgiż"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingaljan"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Litwanjan"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luwa"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Maċedonjan"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagażi"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malajalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Malajan"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Malti"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marati"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masaj"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "Moldavjan"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongoljan"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Ndebele, ta’ Fuq"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepaliż"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Ninorsk Norveġiż"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Olandiż"
+ },
+ "or": {
+ "code": "or",
+ "name": "Orija"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Paxtun"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Persjan"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Pollakk"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portugiż"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Punġabi"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Reto-Romanz"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Rumen"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Russu"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "Sami ta’ Fuq"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serb"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinħaliż"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovakk"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Sloven"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somali"
+ },
+ "es": {
+ "code": "es",
+ "name": "Spanjol"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Svediż"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swaħili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "th": {
+ "code": "th",
+ "name": "Tajlandiż"
+ },
+ "it": {
+ "code": "it",
+ "name": "Taljan"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetjan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinja"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Tork"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukranjan"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Ungeriż"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Użbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vjetnamiż"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welx"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Wigur"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Xona"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Żulu"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/mua.json b/library/intl/resources/language/mua.json
new file mode 100644
index 000000000..ac78db429
--- /dev/null
+++ b/library/intl/resources/language/mua.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akaŋ"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "am": {
+ "code": "am",
+ "name": "amharik"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabiya"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "be": {
+ "code": "be",
+ "name": "belarussiya"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalia"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmania"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgaria"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "es": {
+ "code": "es",
+ "name": "Espaniya"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "de": {
+ "code": "de",
+ "name": "germaŋ"
+ },
+ "el": {
+ "code": "el",
+ "name": "grek"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "haussa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "hungariya"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesiya"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiya"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "km": {
+ "code": "km",
+ "name": "kmer"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "korea"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malasiya"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "MUNDAÅŠ"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepaliya"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Persia"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "PÇnjabi"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Poloniya"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Romaniya"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Russiya"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somaliya"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Swedia"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "syekya"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamul"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "Thai"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Turk"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukrainia"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vietnamiya"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "en": {
+ "code": "en",
+ "name": "zah Anglofoŋ"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "zah sÇr FranssÇ"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "zah sÇr JapoÅ‹"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "zah sÇr ma kasÇÅ‹"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Zah sÇr Portugal"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "zah Syiŋ"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/my.json b/library/intl/resources/language/my.json
new file mode 100644
index 000000000..72622da2b
--- /dev/null
+++ b/library/intl/resources/language/my.json
@@ -0,0 +1,738 @@
+{
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "ကနေဒါ ပြင်သစ်"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "ကနေဒါ အင်္ဂလိပ်"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "ကာá€á€¬á€œá€”်"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "ကိုးရီးယား"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "ကက်ရှ်မီရီ"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "ကန္နာဒါ"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "á€á€˜á€°á€—ာဒီအာနူ"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "á€á€˜á€­á€¯á€„်လ်"
+ },
+ "km": {
+ "code": "km",
+ "name": "á€á€™á€¬"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "á€á€›á€°á€‚စ်"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "á€á€›á€­á€¯á€¡á€±á€›á€¾á€”်"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "á€á€œá€¬á€¡á€ºá€œá€®á€†á€•á€º"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "á€á€«á€‡á€«á€á€º"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "á€á€«á€œá€­á€™á€ºá€‚ျင်"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "á€á€®á€á€°á€šá€°"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "á€á€­á€¯á€›á€¬ á€á€»á€®á€¡á€®á€”ီ"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "á€á€­á€¯á€›á€¬á€˜á€­á€¯á€›á€­á€¯ ဆမ်နီ"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "á€á€™á€ºá€˜á€¬"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "á€á€»á€¬á€›á€­á€¯á€€á€®"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "á€á€»á€®á€‚ါ"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "á€á€»á€€á€º"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "á€á€½á€”်ဂို စွာဟီလီ"
+ },
+ "el": {
+ "code": "el",
+ "name": "ဂရိ"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "ဂါလာစီယံ"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "ဂူဂျာရသီ"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "ဂူစီး"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ဂန်ဒီ"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ဂျပန်"
+ },
+ "de": {
+ "code": "de",
+ "name": "ဂျာမန်"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "ဂျော်ဂျီယန်"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "ဂျိုလာ-ဖွန်ရီ"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ဂွမ်ဘာ"
+ },
+ "es": {
+ "code": "es",
+ "name": "စပိန်"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "စပိန်(ဥရောပ)"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "စလိုဗေးနီးယမ်း"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "စလိုဗက်"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "စီနာ"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "ဆားဗီးယန်း"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "ဆိုဂါ"
+ },
+ "so": {
+ "code": "so",
+ "name": "ဆိုမာလီ"
+ },
+ "si": {
+ "code": "si",
+ "name": "ဆင်ဟာလ"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "ဆန်ဂု"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "ဆန်ဘူရု"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "ဆမ်ဂို"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "ဆြာဟီလီ"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "ဆွီဒင်"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "ဆွစ် ဂျာမန်"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "ဆွစ် ပြင်သစ်"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "ဆွစ် အမြင့် ဂျာမန်"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "ဇာမာ"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "ဇူလူ"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "á€á€™á€®á€¸á€œá€º"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "á€á€›á€¯á€á€º"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "á€á€¬á€€á€…်"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "á€á€¬á€á€»á€šá€ºá€œá€ºá€Ÿá€…်"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "á€á€¬á€†á€¬á€á€«á€á€º"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "á€á€­á€˜á€€á€º"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "á€á€®á€†á€­á€¯"
+ },
+ "te": {
+ "code": "te",
+ "name": "á€á€®á€œá€®á€‚ု"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "á€á€®á€‚်ရင်ရာ"
+ },
+ "se": {
+ "code": "se",
+ "name": "á€á€±á€¬á€„်ဆာမိ"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "á€á€±á€¬á€„်ဒီဘီလီ"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "á€á€­á€¯á€„်á€á€¬"
+ },
+ "to": {
+ "code": "to",
+ "name": "á€á€½á€”်ဂါ"
+ },
+ "th": {
+ "code": "th",
+ "name": "ထိုင်း"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ဒá€á€ºá€á€»á€º"
+ },
+ "da": {
+ "code": "da",
+ "name": "ဒိန်းမá€á€º"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "ဒွန်ကာ"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "နာမာ"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "နီပါလီ"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "နူအာ"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "နော်á€á€±á€¸ နီးနော်စ်á€á€º"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "ပါရှန်"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "ပါရှ်á€á€­á€¯"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "ပေါ်á€á€°á€‚ီ"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "ပိုလန်"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "ပန်á€á€»á€¬á€•á€®"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "ပြင်သစ်"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "ဖလီမစ်ရှ်"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "ဖာရိုအိစ်"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "ဖိလစ်ပီနို"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "ဖင်နစ်ရှ်"
+ },
+ "my": {
+ "code": "my",
+ "name": "ဗမာ"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ဗီယက်နမ်"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "ဗိုဒို"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "ဗိုင်"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "ဗန်ဂျို"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "ဗြိá€á€­á€žá€»á€¾ အင်္ဂလိပ်"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "ဘရာဇီး ပေါ်á€á€°á€‚ီ"
+ },
+ "br": {
+ "code": "br",
+ "name": "ဘရီá€á€½á€”်"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "ဘာဆာ"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "ဘာဖီအာ"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "ဘီနာ"
+ },
+ "be": {
+ "code": "be",
+ "name": "ဘီလာရု"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ဘူဂေးရီးယား"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "ဘော့စ်နီးယား"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "ဘင်္ဂါလီ"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "ဘစ်က္ကီ"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "ဘန်ဘာရာ"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "ဘွá€á€ºá€™á€±á€¬á€ºá€œá€º"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "မá€á€»á€¬á€™á€®"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "မလေး"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "မလေးရာလမ်"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "မာá€á€°á€á€«-မီအီá€á€­á€¯"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "မာá€á€½á€”်ဒီ"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "မာစီဒိုနီယံ"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "မာဆိုင်"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "မာရသီ"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "မီရု"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "မိုရိုကန် á€á€½á€™á€ºá€™á€‡á€­á€¯á€á€º စံ"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "မိုရှီစ်ယန်း"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "မန်ဒန်း"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "မောလ္á€á€®á€…်"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "မွန်ဂိုလီးယန်း"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ယူကရိန်း"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "ယန်ကိုလီ"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ရုရှ"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "ရောမ"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "ရိုမေနီယား"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ရိုရုဘာ"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "ရိုးရှင်းသော á€á€›á€¯á€á€º"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "ရွန်ဒီ"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "ရွမ်ဘို"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "ရှိနာ"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "ရှေးရိုးစဉ်လာ á€á€›á€¯á€á€º"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "ရှန်ဘာလာ"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "လာအို"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "လူဇင်ဘá€á€ºá€€á€º"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "လူဘာ-á€á€«á€á€”်ဂါ"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "လူရီအာ"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "လူအို"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "လက္ဘီအံ"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "လင်ဂါလာ"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "လစ္သူအာနီယံ"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "လန်ဂီ"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "á€á€«"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "á€á€«á€†á€®á€¡á€­á€¯"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "á€á€®"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "á€á€®á€‚ါ"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "á€á€±á€œ"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "ဟာဥစာ"
+ },
+ "he": {
+ "code": "he",
+ "name": "ဟီးဘရူး"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ဟန်ဂေရီ"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "ဟိန္ဒီ"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "အနောက်ပိုင်း ဖရီစီရန်"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "အပေါ်ဆိုဘီအမ်"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "အမေရိကန် အင်္ဂလိပ်"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "အရေဗီ(ပုံမှန်)"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "အလယ်အက်á€á€ºá€œá€€á€ºá€…် á€á€¬á€™á€¬á€‡á€­á€¯á€€á€º"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "အာကိန်"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "အာစု"
+ },
+ "af": {
+ "code": "af",
+ "name": "အာဖရိကန်းစ်"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "အာမေနီအန်"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "အာရေဗီ"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "အာလာဂါစီ"
+ },
+ "it": {
+ "code": "it",
+ "name": "အီá€á€œá€®"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "ဥရောပ ပေါ်á€á€°á€‚ီ"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "ဦးဇ်ဘက်"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "ဩစá€á€¼á€®á€¸á€š ဂျာမန်"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "ဩစá€á€¼á€±á€¸á€œá€»á€¾ အင်္ဂလိပ်"
+ },
+ "az": {
+ "code": "az",
+ "name": "အော်ဇောဘိုင်ဂျောနီ"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "အော်ဒူ"
+ },
+ "or": {
+ "code": "or",
+ "name": "အိုရီရာ"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "အက္စပရန္á€á€­á€¯"
+ },
+ "et": {
+ "code": "et",
+ "name": "အက်စ်á€á€­á€¯á€¸á€”ီးရန်း"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "အောက်ဆိုဘီအမ်"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "အာဂ်ဟိန်း"
+ },
+ "en": {
+ "code": "en",
+ "name": "အင်္ဂလိပ်"
+ },
+ "id": {
+ "code": "id",
+ "name": "အင်ဒိုနီးရှား"
+ },
+ "is": {
+ "code": "is",
+ "name": "အိုင်စ်လန္ဒီ"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "အိုင်းရစ်"
+ },
+ "am": {
+ "code": "am",
+ "name": "အန်ဟာရစျá€á€»"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "အမ်ဘူ"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "အယ်လ်ဘေးနီးယန်း"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/naq.json b/library/intl/resources/language/naq.json
new file mode 100644
index 000000000..32c77cf2e
--- /dev/null
+++ b/library/intl/resources/language/naq.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akangowab"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amharicgowab"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "ArabiÇî gowab"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "be": {
+ "code": "be",
+ "name": "BelarusanÇî gowab"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "BengaliÇî gowab"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "BulgariaÇî gowab"
+ },
+ "my": {
+ "code": "my",
+ "name": "BurmesÇî gowab"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "ChineesÇî gowab, Mandarinni"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "CzechÇî gowab"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "de": {
+ "code": "de",
+ "name": "Duits"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "en": {
+ "code": "en",
+ "name": "Engels"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Frans"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausagowab"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hindigowab"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Hollands"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "HungariaÇî gowab"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "id": {
+ "code": "id",
+ "name": "IndonesiaÇî gowab"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "it": {
+ "code": "it",
+ "name": "Italians"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japanees"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "km": {
+ "code": "km",
+ "name": "KhmerÇî gowab, Central"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Khoekhoegowab"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "KoreaÇî gowab"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "MalayÇî gowab"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "NepalÇî gowab"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "PersiaÇî gowab"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "PoleÇî gowab"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portugees"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Punjabigowab"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "RomaniaÇî gowab"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "RussiaÇî gowab"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "SomaliÇî gowab"
+ },
+ "es": {
+ "code": "es",
+ "name": "Spaans"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "SwedeÇî gowab"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "TamilÇî gowab"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "ThaiÇî gowab"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "TurkeÇî gowab"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "UkrainiaÇî gowab"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "UrduÇî gowab"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "VietnamÇî gowab"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "el": {
+ "code": "el",
+ "name": "Xriks"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yorubab"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulub"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/nb.json b/library/intl/resources/language/nb.json
new file mode 100644
index 000000000..6aae6016a
--- /dev/null
+++ b/library/intl/resources/language/nb.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albansk"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "amerikansk engelsk"
+ },
+ "am": {
+ "code": "am",
+ "name": "amharisk"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabisk"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armensk"
+ },
+ "az": {
+ "code": "az",
+ "name": "aserbajdsjansk"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturisk"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "australsk engelsk"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "baskisk"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnisk"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "brasiliansk portugisisk"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretonsk"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "britisk engelsk"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgarsk"
+ },
+ "my": {
+ "code": "my",
+ "name": "burmesisk"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "canadisk engelsk"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "canadisk fransk"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokesisk"
+ },
+ "da": {
+ "code": "da",
+ "name": "dansk"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "en": {
+ "code": "en",
+ "name": "engelsk"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estisk"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "europeisk portugisisk"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "europeisk spansk"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filippinsk"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finsk"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamsk"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "forenklet kinesisk"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "fransk"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friuliansk"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fulani"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "færøysk"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galisisk"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgisk"
+ },
+ "el": {
+ "code": "el",
+ "name": "gresk"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "grønlandsk"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebraisk"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "be": {
+ "code": "be",
+ "name": "hviterussisk"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "høysorbisk"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesisk"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irsk"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandsk"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiensk"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japansk"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "joruba"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabylsk"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannada"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "kappverdisk"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kasakhisk"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kasjmiri"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalansk"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmer"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "kiembu"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "kiga"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "kinesisk"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgisisk"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "kongolesisk swahili"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "koreansk"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "kroatisk"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kølnsk"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laotisk"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "latvisk"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "lavsorbisk"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "litauisk"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luhya"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgsk"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "madagassisk"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedonsk"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayisk"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltesisk"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masai"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "mauritisk-kreolsk"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "meksikansk spansk"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "moderne standard arabisk"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldovsk"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongolsk"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "nederlandsk"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepali"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "nord-ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "nordsamisk"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norsk bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norsk nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persisk"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polsk"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugisisk"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabi"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retoromansk"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumensk"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "russisk"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "sentralmarokkansk tamazight"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbisk"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "singalesisk"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "skotsk gælisk"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovakisk"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "slovensk"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somali"
+ },
+ "es": {
+ "code": "es",
+ "name": "spansk"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "standard marrokansk tamazight"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "sveitsertysk"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "sveitsisk fransk"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "sveitsisk høytysk"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "svensk"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamilsk"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "thai"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetansk"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinja"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongansk"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "tradisjonell kinesisk"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "tsjekkisk"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "tyrkisk"
+ },
+ "de": {
+ "code": "de",
+ "name": "tysk"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigurisk"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrainsk"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ungarsk"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "usbekisk"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "vestfrisisk"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamesisk"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "walisisk"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "østerriksk tysk"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/nd.json b/library/intl/resources/language/nd.json
new file mode 100644
index 000000000..47ba48cab
--- /dev/null
+++ b/library/intl/resources/language/nd.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "isi-Akhani"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "isi-Alabhu"
+ },
+ "am": {
+ "code": "am",
+ "name": "isi-Amaharikhi"
+ },
+ "be": {
+ "code": "be",
+ "name": "isi-Bhelarashiyani"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "isi-Bhengali"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "isi-Bulgaria"
+ },
+ "my": {
+ "code": "my",
+ "name": "isi-Burma"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "isi-China"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "isi-Czech"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "isi-Dutch"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "isi-Fulentshi"
+ },
+ "el": {
+ "code": "el",
+ "name": "isi-Giliki"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "isi-Hangari"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "isi-Hausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "isi-Hindi"
+ },
+ "id": {
+ "code": "id",
+ "name": "isi-Indonesia"
+ },
+ "it": {
+ "code": "it",
+ "name": "isi-Italiano"
+ },
+ "de": {
+ "code": "de",
+ "name": "isi-Jalimani"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "isi-Japhani"
+ },
+ "km": {
+ "code": "km",
+ "name": "isi-Khambodiya"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "isi-Koriya"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "isi-Malayi"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "isi-Nepali"
+ },
+ "en": {
+ "code": "en",
+ "name": "isi-Ngisi"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "isi-Pheshiyani"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "isi-Pholoshi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "isi-Phunjabi"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "isi-Potukezi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "isi-Rashiya"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "isi-Romani"
+ },
+ "es": {
+ "code": "es",
+ "name": "isi-Sipeyini"
+ },
+ "so": {
+ "code": "so",
+ "name": "isi-Somali"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "isi-Swidishi"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "isi-Thamil"
+ },
+ "th": {
+ "code": "th",
+ "name": "isi-Thayi"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "isi-Thekishi"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "isi-Udu"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "isi-Ukrain"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "isi-Vietnamese"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "isi-Yorubha"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "isi-Zulu"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "isiNdebele"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ne-IN.json b/library/intl/resources/language/ne-IN.json
new file mode 100644
index 000000000..fec54a95f
--- /dev/null
+++ b/library/intl/resources/language/ne-IN.json
@@ -0,0 +1,738 @@
+{
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "en": {
+ "code": "en",
+ "name": "अंगà¥à¤°à¥‡à¤œà¥€"
+ },
+ "az": {
+ "code": "az",
+ "name": "अजरबैजानी"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "अधà¥à¤¨à¤¿à¤• पà¥à¤°à¤®à¤¾à¤£à¤¿à¤• अरबी"
+ },
+ "af": {
+ "code": "af",
+ "name": "अफà¥à¤°à¤¿à¤•à¤¾à¤¨à¥à¤¸"
+ },
+ "am": {
+ "code": "am",
+ "name": "अमà¥à¤¹à¤¾à¤°à¤¿à¤•"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "अरबी"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "अलà¥à¤¬à¥‡à¤¨à¤¿à¤¯à¤¨"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "अषà¥à¤Ÿà¥à¤°à¤¿à¤¯à¤¨ जरà¥à¤®à¤¨"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "आइरिश"
+ },
+ "is": {
+ "code": "is",
+ "name": "आइसलà¥à¤¯à¤¾à¤¨à¥à¤¡à¤¿à¤•"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "आकान"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "आघेम"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "आरà¥à¤®à¥‡à¤¨à¤¿à¤¯à¤¾à¤²à¥€"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "आसà¥"
+ },
+ "it": {
+ "code": "it",
+ "name": "इटालियन"
+ },
+ "id": {
+ "code": "id",
+ "name": "इनà¥à¤¡à¥‹à¤¨à¥‡à¤¸à¤¿à¤¯à¤¾à¤²à¥€"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "इवि"
+ },
+ "et": {
+ "code": "et",
+ "name": "इसà¥à¤Ÿà¥‹à¤¨à¤¿à¤¯à¤¾à¤²à¥€"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "उइघà¥à¤°"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "उजà¥à¤¬à¥‡à¤•à¥€"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "उतà¥à¤¤à¤° नेडेबेले"
+ },
+ "se": {
+ "code": "se",
+ "name": "उतà¥à¤¤à¤°à¥€ सामी"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "उरà¥à¤¦à¥"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "à¤à¤®à¥à¤¬à¥"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "à¤à¤¸à¥à¤ªà¥‡à¤°à¤¾à¤¨à¥à¤¤à¥‹"
+ },
+ "or": {
+ "code": "or",
+ "name": "ओरिया"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "कनà¥à¤¨à¤¾à¤¡à¤¾"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "काजाख"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "काबिल"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "काबà¥à¤­à¥‡à¤°à¥à¤¡à¤¿à¤¯à¤¾à¤¨à¥"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "कामà¥à¤¬à¤¾"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "कालालिसà¥à¤Ÿ"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "कालेनà¥à¤œà¤¿à¤¨"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "काशà¥à¤®à¥€à¤°à¥€"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "किकà¥à¤¯à¥"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "किरà¥à¤—िज"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "केनà¥à¤¦à¥à¤°à¥€à¤¯ à¤à¤Ÿà¥à¤²à¤¾à¤¸ टामाजिघट"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "कोङà¥à¤—ो सà¥à¤µà¤¾à¤¹à¤¿à¤²à¥€"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "कोयरा चिनी"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "कोयराबोरो सेनà¥à¤¨à¥€"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "कोरियाली"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "कà¥à¤¯à¤¾à¤Ÿà¤¾à¤²à¤¨"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "कà¥à¤°à¥‹à¤à¤¶à¤¿à¤¯à¤¾à¤²à¥€"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "कà¥à¤µà¤¾à¤¸à¤¿à¤¯à¥‹"
+ },
+ "km": {
+ "code": "km",
+ "name": "खमेर"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "गलिसियाली"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "गानà¥à¤¡à¤¾"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "गà¥à¤œà¤°à¤¾à¤¤à¥€"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "गà¥à¤¸à¥€"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "गोमà¥à¤¬à¤¾"
+ },
+ "el": {
+ "code": "el",
+ "name": "गà¥à¤°à¥€à¤•"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "चिगा"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "चिनियाà¤"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "चेक"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "चेरोकी"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "जरà¥à¤œà¤¿à¤¯à¤¾à¤²à¥€"
+ },
+ "de": {
+ "code": "de",
+ "name": "जरà¥à¤®à¤¨"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "जरà¥à¤®à¤¾"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "जापानी"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "जà¥à¤²à¥"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "जोङà¥à¤–ा"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "जोला-फोनिल"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "टरà¥à¤•à¤¿à¤¶"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "टाचेलà¥à¤¹à¤¿à¤Ÿ"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "टेसो"
+ },
+ "to": {
+ "code": "to",
+ "name": "टोङà¥à¤—न"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "डच"
+ },
+ "da": {
+ "code": "da",
+ "name": "डेनिश"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "तलà¥à¤²à¥‹ सोरà¥à¤¬à¤¿à¤¯à¤¨"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "ताइता"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "तामिल"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "तासावाक"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "तिगà¥à¤°à¥€à¤¨à¥à¤¯à¤¾"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "तिबà¥à¤¬à¤¤à¥€"
+ },
+ "te": {
+ "code": "te",
+ "name": "तेलà¥à¤—à¥"
+ },
+ "th": {
+ "code": "th",
+ "name": "थाई"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "नरà¥à¤µà¥‡à¤²à¥€ नाइनोरà¥à¤¸à¥à¤•"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "नरà¥à¤µà¥‡à¤²à¥€ बोकमाल"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "नामा"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "नà¥à¤à¤°"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "नेपाली"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "नà¥à¤¯à¤¾à¤¨à¥à¤•à¥‹à¤²"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "पंजाबी"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "परमà¥à¤ªà¤°à¤¾à¤—त चिनियाà¤"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "पाशà¥à¤¤à¥‹"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "पोरà¥à¤¤à¥à¤—ी"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "पोरà¥à¤¤à¥à¤—ी (यà¥à¤°à¥‹à¤ª)"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "पोलिश"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "फारसी"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "फारोज"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "फिनिश"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "फिलिपिनी"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "फà¥à¤°à¤¾à¤¨à¥à¤¸à¥‡à¤²à¥€"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "फà¥à¤°à¤¿à¤œà¥€à¤¯à¤¨"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "फà¥à¤²à¥‡à¤®à¤¿à¤¶"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "बंगाली"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "बाफिया"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "बामà¥à¤¬à¤¾à¤°à¤¾"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "बासà¥à¤•"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "बà¥à¤²à¥à¤—ेरियाली"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "बेना"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "बोडो"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "बोसà¥à¤¨à¤¿à¤¯à¤¾à¤²à¥€"
+ },
+ "br": {
+ "code": "br",
+ "name": "बà¥à¤°à¥‡à¤Ÿà¤¨"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "भाइ"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "भियतनामी"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "भà¥à¤¨à¥à¤œà¥‹"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "मंगोल"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "मराठी"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "मलयालम"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "मलागासी"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "मलाया"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "माकोनà¥à¤¡à¥‡"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "माखà¥à¤µà¤¾-मिटà¥à¤Ÿà¥‹"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "माचामे"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "माथिलà¥à¤²à¥‹ सोरà¥à¤¬à¤¿à¤¯à¤¨"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "मानक मोरोकà¥à¤•à¥‹à¤¨ तामाजिघट"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "मालà¥à¤Ÿà¤¿à¤œ"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "मालà¥à¤¡à¤¾à¤­à¤¿à¤¯à¤¨"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "मासाल"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "मà¥à¤¨à¥à¤¡à¤¾à¤™"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "मेरू"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "मोरिसेन"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "मà¥à¤¯à¤¾à¤•à¥‡à¤¡à¥‹à¤¨à¤¿à¤¯à¤¨"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "यà¥à¤•à¥à¤°à¥‡à¤¨à¥€"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "यà¥à¤°à¥‹à¤ªà¥‡à¤²à¥€ सà¥à¤ªà¥‡à¤¨à¤¿à¤¸"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "योरूवा"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "रूणà¥à¤¡à¥€"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "रूसी"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "रोमानियाली"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "रोमानिश"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "रोमà¥à¤¬à¥‹"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "रà¥â€Œà¤µà¤¾"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "लकà¥à¤œà¥‡à¤®à¥à¤¬à¤°à¥à¤—िस"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "लाओ"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "लाङà¥à¤—ी"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "लातà¥à¤­à¤¿à¤¯à¤¾à¤²à¥€"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "लिंगाला"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "लिथà¥à¤†à¤¨à¤¿à¤¯à¤¾à¤²à¥€"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "लà¥à¤‡à¤¯à¤¾"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "लà¥à¤“"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "लà¥à¤¬à¤¾-काताङà¥à¤—ा"
+ },
+ "my": {
+ "code": "my",
+ "name": "वरà¥à¤®à¥‡à¤²à¥€"
+ },
+ "be": {
+ "code": "be",
+ "name": "वेलारूसी"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "वेलà¥à¤¶"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "शामà¥à¤¬à¤¾à¤²à¤¾"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "शोना"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "सरलिकृत चिनियाà¤"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "सरà¥à¤¬à¤¿à¤¯à¤¾à¤²à¥€"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "साङà¥à¤—à¥"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "साङà¥à¤—ो"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "सामà¥à¤¬à¥à¤°à¥‚"
+ },
+ "si": {
+ "code": "si",
+ "name": "सिनà¥à¤¹à¤¾à¤²à¤¾"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "सेना"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "सोगा"
+ },
+ "so": {
+ "code": "so",
+ "name": "सोमाली"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "सà¥à¤•à¤Ÿà¥à¤¸ गाà¤à¤²à¤¿à¤•"
+ },
+ "es": {
+ "code": "es",
+ "name": "सà¥à¤ªà¥‡à¤¨à¤¿à¤¸"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "सà¥à¤²à¥‹à¤­à¤¾à¤•à¤¿à¤¯à¤¾à¤²à¥€"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "सà¥à¤²à¥‹à¤­à¥‡à¤¨à¤¿à¤¯à¤¾à¤²à¥€"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "सà¥à¤µà¤¾à¤¹à¤¿à¤²à¥€"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "सà¥à¤µà¤¿à¤¡à¤¿à¤¶"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "सà¥à¤µà¥€à¤¸ जरà¥à¤®à¤¨"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "सà¥à¤µà¥€à¤¸ हाई जरà¥à¤®à¤¨"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "हंगà¥à¤°à¥€à¤¯à¤¾à¤²à¥€"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "हाउसा"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "हिनà¥à¤¦à¥€"
+ },
+ "he": {
+ "code": "he",
+ "name": "हिबà¥à¤°à¥"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ne.json b/library/intl/resources/language/ne.json
new file mode 100644
index 000000000..41f8c3a62
--- /dev/null
+++ b/library/intl/resources/language/ne.json
@@ -0,0 +1,738 @@
+{
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "en": {
+ "code": "en",
+ "name": "अंगà¥à¤°à¥‡à¤œà¥€"
+ },
+ "az": {
+ "code": "az",
+ "name": "अजरबैजानी"
+ },
+ "af": {
+ "code": "af",
+ "name": "अफà¥à¤°à¤¿à¤•à¤¾à¤¨à¥à¤¸"
+ },
+ "am": {
+ "code": "am",
+ "name": "अमà¥à¤¹à¤¾à¤°à¤¿à¤•"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "अरबी"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "अलà¥à¤¬à¥‡à¤¨à¤¿à¤¯à¤¨"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "अषà¥à¤Ÿà¥à¤°à¤¿à¤¯à¤¨ जरà¥à¤®à¤¨"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "आइरिश"
+ },
+ "is": {
+ "code": "is",
+ "name": "आइसलà¥à¤¯à¤¾à¤¨à¥à¤¡à¤¿à¤•"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "आकान"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "आघेम"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "आधà¥à¤¨à¤¿à¤• मानक अरबी"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "आरà¥à¤®à¥‡à¤¨à¤¿à¤¯à¤¾à¤²à¥€"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "आसà¥"
+ },
+ "it": {
+ "code": "it",
+ "name": "इटालियन"
+ },
+ "id": {
+ "code": "id",
+ "name": "इनà¥à¤¡à¥‹à¤¨à¥‡à¤¸à¤¿à¤¯à¤¾à¤²à¥€"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "इवि"
+ },
+ "et": {
+ "code": "et",
+ "name": "इसà¥à¤Ÿà¥‹à¤¨à¤¿à¤¯à¤¾à¤²à¥€"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "उइघà¥à¤°"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "उजà¥à¤¬à¥‡à¤•à¥€"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "उतà¥à¤¤à¤° नेडेबेले"
+ },
+ "se": {
+ "code": "se",
+ "name": "उतà¥à¤¤à¤°à¥€ सामी"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "उरà¥à¤¦à¥"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "à¤à¤®à¥à¤¬à¥"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "à¤à¤¸à¥à¤ªà¥‡à¤°à¤¾à¤¨à¥à¤¤à¥‹"
+ },
+ "or": {
+ "code": "or",
+ "name": "ओरिया"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "कनà¥à¤¨à¤¾à¤¡à¤¾"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "काजाख"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "काबिल"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "काबà¥à¤­à¥‡à¤°à¥à¤¡à¤¿à¤¯à¤¾à¤¨à¥"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "कामà¥à¤¬à¤¾"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "कालालिसà¥à¤Ÿ"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "कालेनà¥à¤œà¤¿à¤¨"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "काशà¥à¤®à¥€à¤°à¥€"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "किकà¥à¤¯à¥"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "किरà¥à¤—िज"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "केनà¥à¤¦à¥à¤°à¥€à¤¯ à¤à¤Ÿà¥à¤²à¤¾à¤¸ टामाजिघट"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "कोङà¥à¤—ो सà¥à¤µà¤¾à¤¹à¤¿à¤²à¥€"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "कोयरा चिनी"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "कोयराबोरो सेनà¥à¤¨à¥€"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "कोरियाली"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "कà¥à¤¯à¤¾à¤Ÿà¤¾à¤²à¤¨"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "कà¥à¤°à¥‹à¤à¤¶à¤¿à¤¯à¤¾à¤²à¥€"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "कà¥à¤µà¤¾à¤¸à¤¿à¤¯à¥‹"
+ },
+ "km": {
+ "code": "km",
+ "name": "खमेर"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "गलिसियाली"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "गानà¥à¤¡à¤¾"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "गà¥à¤œà¤°à¤¾à¤¤à¥€"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "गà¥à¤¸à¥€"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "गोमà¥à¤¬à¤¾"
+ },
+ "el": {
+ "code": "el",
+ "name": "गà¥à¤°à¥€à¤•"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "चिगा"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "चिनियाà¤"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "चेक"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "चेरोकी"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "जरà¥à¤œà¤¿à¤¯à¤¾à¤²à¥€"
+ },
+ "de": {
+ "code": "de",
+ "name": "जरà¥à¤®à¤¨"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "जरà¥à¤®à¤¾"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "जापानी"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "जà¥à¤²à¥"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "जोङà¥à¤–ा"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "जोला-फोनिल"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "टरà¥à¤•à¤¿à¤¶"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "टाचेलà¥à¤¹à¤¿à¤Ÿ"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "टेसो"
+ },
+ "to": {
+ "code": "to",
+ "name": "टोङà¥à¤—न"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "डच"
+ },
+ "da": {
+ "code": "da",
+ "name": "डेनिश"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "तलà¥à¤²à¥‹ सोरà¥à¤¬à¤¿à¤¯à¤¨"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "ताइता"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "तामिल"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "तासावाक"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "तिगà¥à¤°à¥€à¤¨à¥à¤¯à¤¾"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "तिबà¥à¤¬à¤¤à¥€"
+ },
+ "te": {
+ "code": "te",
+ "name": "तेलà¥à¤—à¥"
+ },
+ "th": {
+ "code": "th",
+ "name": "थाई"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "नरà¥à¤µà¥‡à¤²à¥€ नाइनोरà¥à¤¸à¥à¤•"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "नरà¥à¤µà¥‡à¤²à¥€ बोकमाल"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "नामा"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "नà¥à¤à¤°"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "नेपाली"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "नà¥à¤¯à¤¾à¤¨à¥à¤•à¥‹à¤²"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "पंजाबी"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "परमà¥à¤ªà¤°à¤¾à¤—त चिनियाà¤"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "पाशà¥à¤¤à¥‹"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "पोरà¥à¤¤à¥à¤—ी"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "पोरà¥à¤¤à¥à¤—ी (यà¥à¤°à¥‹à¤ª)"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "पोलिश"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "फारसी"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "फारोज"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "फिनिश"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "फिलिपिनी"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "फà¥à¤°à¤¾à¤¨à¥à¤¸à¥‡à¤²à¥€"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "फà¥à¤°à¤¿à¤œà¥€à¤¯à¤¨"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "फà¥à¤²à¥‡à¤®à¤¿à¤¶"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "बंगाली"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "बाफिया"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "बामà¥à¤¬à¤¾à¤°à¤¾"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "बासà¥à¤•"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "बà¥à¤²à¥à¤—ेरियाली"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "बेना"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "बोडो"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "बोसà¥à¤¨à¤¿à¤¯à¤¾à¤²à¥€"
+ },
+ "br": {
+ "code": "br",
+ "name": "बà¥à¤°à¥‡à¤Ÿà¤¨"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "भाइ"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "भियतनामी"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "भà¥à¤¨à¥à¤œà¥‹"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "मंगोल"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "मराठी"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "मलयालम"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "मलागासी"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "मलाया"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "माकोनà¥à¤¡à¥‡"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "माखà¥à¤µà¤¾-मिटà¥à¤Ÿà¥‹"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "माचामे"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "माथिलà¥à¤²à¥‹ सोरà¥à¤¬à¤¿à¤¯à¤¨"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "मानक मोरोकà¥à¤•à¥‹à¤¨ तामाजिघट"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "मालà¥à¤Ÿà¤¿à¤œ"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "मालà¥à¤¡à¤¾à¤­à¤¿à¤¯à¤¨"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "मासाल"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "मà¥à¤¨à¥à¤¡à¤¾à¤™"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "मेरू"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "मोरिसेन"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "मà¥à¤¯à¤¾à¤•à¥‡à¤¡à¥‹à¤¨à¤¿à¤¯à¤¨"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "यà¥à¤•à¥à¤°à¥‡à¤¨à¥€"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "यà¥à¤°à¥‹à¤ªà¥‡à¤²à¥€ सà¥à¤ªà¥‡à¤¨à¤¿à¤¸"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "योरूवा"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "रूणà¥à¤¡à¥€"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "रूसी"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "रोमानियाली"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "रोमानिश"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "रोमà¥à¤¬à¥‹"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "रà¥â€Œà¤µà¤¾"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "लकà¥à¤œà¥‡à¤®à¥à¤¬à¤°à¥à¤—िस"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "लाओ"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "लाङà¥à¤—ी"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "लातà¥à¤­à¤¿à¤¯à¤¾à¤²à¥€"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "लिंगाला"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "लिथà¥à¤†à¤¨à¤¿à¤¯à¤¾à¤²à¥€"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "लà¥à¤‡à¤¯à¤¾"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "लà¥à¤“"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "लà¥à¤¬à¤¾-काताङà¥à¤—ा"
+ },
+ "my": {
+ "code": "my",
+ "name": "वरà¥à¤®à¥‡à¤²à¥€"
+ },
+ "be": {
+ "code": "be",
+ "name": "वेलारूसी"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "वेलà¥à¤¶"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "शामà¥à¤¬à¤¾à¤²à¤¾"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "शोना"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "सरलिकृत चिनियाà¤"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "सरà¥à¤¬à¤¿à¤¯à¤¾à¤²à¥€"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "साङà¥à¤—à¥"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "साङà¥à¤—ो"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "सामà¥à¤¬à¥à¤°à¥‚"
+ },
+ "si": {
+ "code": "si",
+ "name": "सिनà¥à¤¹à¤¾à¤²à¤¾"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "सेना"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "सोगा"
+ },
+ "so": {
+ "code": "so",
+ "name": "सोमाली"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "सà¥à¤•à¤Ÿà¥à¤¸ गाà¤à¤²à¤¿à¤•"
+ },
+ "es": {
+ "code": "es",
+ "name": "सà¥à¤ªà¥‡à¤¨à¤¿à¤¸"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "सà¥à¤²à¥‹à¤­à¤¾à¤•à¤¿à¤¯à¤¾à¤²à¥€"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "सà¥à¤²à¥‹à¤­à¥‡à¤¨à¤¿à¤¯à¤¾à¤²à¥€"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "सà¥à¤µà¤¾à¤¹à¤¿à¤²à¥€"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "सà¥à¤µà¤¿à¤¡à¤¿à¤¶"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "सà¥à¤µà¥€à¤¸ जरà¥à¤®à¤¨"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "सà¥à¤µà¥€à¤¸ हाई जरà¥à¤®à¤¨"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "हंगà¥à¤°à¥€à¤¯à¤¾à¤²à¥€"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "हाउसा"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "हिनà¥à¤¦à¥€"
+ },
+ "he": {
+ "code": "he",
+ "name": "हिबà¥à¤°à¥"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/nl.json b/library/intl/resources/language/nl.json
new file mode 100644
index 000000000..4edb00b29
--- /dev/null
+++ b/library/intl/resources/language/nl.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanees"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "Amerikaans Engels"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amhaars"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arabisch"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armeens"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturisch"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Australisch Engels"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbeidzjaans"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Baskisch"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengaals"
+ },
+ "my": {
+ "code": "my",
+ "name": "Birmaans"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnisch"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Braziliaans Portugees"
+ },
+ "br": {
+ "code": "br",
+ "name": "Bretons"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Brits Engels"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgaars"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "Canadees Engels"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Canadees Frans"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalaans"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Chinees"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "da": {
+ "code": "da",
+ "name": "Deens"
+ },
+ "de": {
+ "code": "de",
+ "name": "Duits"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en": {
+ "code": "en",
+ "name": "Engels"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estisch"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Europees Portugees"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Europees Spaans"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faeröers"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipijns"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Fins"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Frans"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Fries"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulisch"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galicisch"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgisch"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Gikuyu"
+ },
+ "el": {
+ "code": "el",
+ "name": "Grieks"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Groenlands"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebreeuws"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hongaars"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Iers"
+ },
+ "is": {
+ "code": "is",
+ "name": "IJslands"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indonesisch"
+ },
+ "it": {
+ "code": "it",
+ "name": "Italiaans"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japans"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kaapverdisch Creools"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabylisch"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kasjmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazachs"
+ },
+ "km": {
+ "code": "km",
+ "name": "Khmer"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kirgizisch"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Kirundi"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Kölsch"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Koreaans"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Kroatisch"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Laotiaans"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Lets"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Litouws"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Luganda"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxemburgs"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Maa"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonisch"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagassisch"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Maleis"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltees"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Mexicaans Spaans"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "modern standaard Arabisch"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongools"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Nederlands"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Nedersorbisch"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepalees"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Ngumba"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Noord-Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Noord-Samisch"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Noors - Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Noors - Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Odia"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Oeigoers"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Oekraïens"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Oezbeeks"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "Oostenrijks Duits"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Oppersorbisch"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pasjtoe"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Perzisch"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Pools"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portugees"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Punjabi"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Reto-Romaans"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Roemeens"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Russisch"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Schots-Gaelisch"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Servisch"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Singalees"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Sloveens"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slowaaks"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somalisch"
+ },
+ "es": {
+ "code": "es",
+ "name": "Spaans"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standaard Marokkaanse Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Tamazight (Centraal-Marokko)"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tashelhiyt"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "Thais"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetaans"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongaans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "traditioneel Chinees"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Tsjechisch"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Turks"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "vereenvoudigd Chinees"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vietnamees"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Vlaams"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "be": {
+ "code": "be",
+ "name": "Wit-Russisch"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zoeloe"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Zweeds"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Zwitserduits"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Zwitsers Frans"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Zwitsers Hoogduits"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/nmg.json b/library/intl/resources/language/nmg.json
new file mode 100644
index 000000000..25d4d1776
--- /dev/null
+++ b/library/intl/resources/language/nmg.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Fala"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "de": {
+ "code": "de",
+ "name": "Jáman"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Kiɛl akan"
+ },
+ "am": {
+ "code": "am",
+ "name": "Kiɛl amaria"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Kiɛl b’árabe"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Kiɛl b’indien"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "KiÉ›l b’ɔÌngrois"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Kiɛl b’ukrɛ̄nien"
+ },
+ "be": {
+ "code": "be",
+ "name": "Kiɛl belarussie"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Kiɛl bengalia"
+ },
+ "my": {
+ "code": "my",
+ "name": "Kiɛl birmania"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Kiɛl bó chinois"
+ },
+ "el": {
+ "code": "el",
+ "name": "Kiɛl bó grɛk"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Kiɛl bó japonɛ̌"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kiɛl bó mɛr"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Kiɛl bó pɔ̄rtugɛ̂"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Kiɛl bó rumɛ̂n"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Kiɛl bó suedois"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Kiɛl bó tchɛk"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Kiɛl bó turk"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Kiɛl bóllandais"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Kiɛl bulgaria"
+ },
+ "id": {
+ "code": "id",
+ "name": "Kiɛl indonesie"
+ },
+ "it": {
+ "code": "it",
+ "name": "Kiɛl italia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Kiɛl koré"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "KiÉ›l Malɛ̌siÄ"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Kiɛl máwúsá"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Kiɛl nepal"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Kiɛl pɛndjabi"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Kiɛl pɛrsia"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Kiɛl pɔlɔŋe"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Kiɛl russia"
+ },
+ "so": {
+ "code": "so",
+ "name": "KiÉ›l somaliÄ"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Kiɛl tamul"
+ },
+ "th": {
+ "code": "th",
+ "name": "Kiɛl thaï"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Kiɛl úrdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Kiɛl viɛtnam"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "en": {
+ "code": "en",
+ "name": "Ngɛ̄lɛ̄n"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "es": {
+ "code": "es",
+ "name": "Paŋá"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yorúbâ"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/nn.json b/library/intl/resources/language/nn.json
new file mode 100644
index 000000000..f4f34a101
--- /dev/null
+++ b/library/intl/resources/language/nn.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albansk"
+ },
+ "am": {
+ "code": "am",
+ "name": "amharisk"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabisk"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armensk"
+ },
+ "az": {
+ "code": "az",
+ "name": "aserbajdsjansk"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturisk"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu (Tanzania)"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "austerriksk tysk"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "australisk engelsk"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "baskisk"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena (Tanzania)"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmål"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosnisk"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "brasiliansk portugisisk"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretonsk"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "britisk engelsk"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgarsk"
+ },
+ "my": {
+ "code": "my",
+ "name": "burmesisk"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "da": {
+ "code": "da",
+ "name": "dansk"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "en": {
+ "code": "en",
+ "name": "engelsk"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "engelsk (amerikansk)"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estisk"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "europeisk portugisisk"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filippinsk"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finsk"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamsk"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "forenkla kinesisk"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "fransk"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friuliansk"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fulani"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "færøysk"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galicisk"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgisk"
+ },
+ "el": {
+ "code": "el",
+ "name": "gresk"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebraisk"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "høgsorbisk"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "iberisk spansk"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesisk"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irsk"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandsk"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiensk"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japansk"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "joruba"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabylsk"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "kalaallisut; grønlandsk"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "kanadisk engelsk"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "kanadisk fransk"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannada"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "kapverdisk"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kasakhisk"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kasjmiri"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalansk"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmer"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "kiembu"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "kinesisk"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgisisk"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "koreansk"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "kroatisk"
+ },
+ "be": {
+ "code": "be",
+ "name": "kviterussisk"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laotisk"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "latvisk"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "litauisk"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgsk"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "lågsorbisk"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "madagassisk"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedonsk"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malayisk"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltesisk"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavisk"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongolsk"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "nederlandsk"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalsk"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "nord-ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "nordsamisk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "olulujia"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "panjabi"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persisk"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polsk"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugisisk"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retoromansk"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumensk"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "russisk"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbisk"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "singalesisk"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "skotsk-gælisk"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovakisk"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "slovensk"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somali"
+ },
+ "es": {
+ "code": "es",
+ "name": "spansk"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "sveitsertysk"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "sveitsisk fransk"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "sveitsisk høgtysk"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "svensk"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "thai"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetansk"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinja"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonga (Tonga-øyane)"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "tradisjonell kinesisk"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "tsjekkisk"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "tyrkisk"
+ },
+ "de": {
+ "code": "de",
+ "name": "tysk"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigurisk"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrainsk"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ungarsk"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "usbekisk"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "vestfrisisk"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamesisk"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "walisisk"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/nus.json b/library/intl/resources/language/nus.json
new file mode 100644
index 000000000..00feca205
--- /dev/null
+++ b/library/intl/resources/language/nus.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Thok aka̱ni"
+ },
+ "be": {
+ "code": "be",
+ "name": "Thok bälärutha"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Thok bälga̱a̱riani"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Thok bängali"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Thok betnaamni"
+ },
+ "my": {
+ "code": "my",
+ "name": "Thok bormi̱thni"
+ },
+ "am": {
+ "code": "am",
+ "name": "Thok bunyni"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Thok cayna"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Thok cik"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Thok da̱c"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Thok dhuluni"
+ },
+ "el": {
+ "code": "el",
+ "name": "Thok girikni"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Thok ɣändini"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Thok ɣänga̱a̱riɛni"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Thok ɣowthani"
+ },
+ "id": {
+ "code": "id",
+ "name": "Thok indunithiani"
+ },
+ "it": {
+ "code": "it",
+ "name": "Thok i̱taliani"
+ },
+ "es": {
+ "code": "es",
+ "name": "Thok i̱thpaaniani"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Thok i̱thwidicni"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Thok Jalabni"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Thok japanni"
+ },
+ "de": {
+ "code": "de",
+ "name": "Thok jarmani"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Thok ji̱ röm"
+ },
+ "km": {
+ "code": "km",
+ "name": "Thok kameeri"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Thok kuriani"
+ },
+ "en": {
+ "code": "en",
+ "name": "Thok liŋli̱thni"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Thok mayɛyni"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Thok napalni"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Thok Nath"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Thok perthiani"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Thok pölicni"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Thok pɔrɔthani"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Thok puɔnjabani"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Thok puɔtigali"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Thok ra̱ciaani"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Thok tamilni"
+ },
+ "th": {
+ "code": "th",
+ "name": "Thok tayni"
+ },
+ "so": {
+ "code": "so",
+ "name": "Thok thomaaliani"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Thok turkicni"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Thok udoni"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Thok ukeraanini"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Thok yurubani"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/nyn.json b/library/intl/resources/language/nyn.json
new file mode 100644
index 000000000..71c4a66c7
--- /dev/null
+++ b/library/intl/resources/language/nyn.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Oru-Urudu"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Orubengari"
+ },
+ "be": {
+ "code": "be",
+ "name": "Oruberarusi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Oruburugariya"
+ },
+ "my": {
+ "code": "my",
+ "name": "Oruburuma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Oruceeki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Oruchaina"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Orudaaki"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Orufaransa"
+ },
+ "de": {
+ "code": "de",
+ "name": "Orugirimaani"
+ },
+ "el": {
+ "code": "el",
+ "name": "Oruguriiki"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Oruhangare"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Oruharabu"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Oruhausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Oruhindi"
+ },
+ "id": {
+ "code": "id",
+ "name": "Oruindonezia"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Orujapaani"
+ },
+ "km": {
+ "code": "km",
+ "name": "Orukambodiya"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Orukani"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Orukoreya"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Orukuraini"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Orukuruki"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Orumalesiya"
+ },
+ "am": {
+ "code": "am",
+ "name": "Orumariki"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Orunepali"
+ },
+ "en": {
+ "code": "en",
+ "name": "Orungyereza"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Orupaasiya"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Orupocugo"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Orupoori"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Orupungyabi"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Oruromania"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Orurrasha"
+ },
+ "so": {
+ "code": "so",
+ "name": "Orusomaari"
+ },
+ "es": {
+ "code": "es",
+ "name": "Orusupaani"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Oruswidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Orutailandi"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Orutamiri"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Oruviyetinaamu"
+ },
+ "it": {
+ "code": "it",
+ "name": "Oruyitare"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Oruyoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Oruzuru"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Runyankore"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/or.json b/library/intl/resources/language/or.json
new file mode 100644
index 000000000..7dbd79499
--- /dev/null
+++ b/library/intl/resources/language/or.json
@@ -0,0 +1,738 @@
+{
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "ଅକନà­"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "ଅଷà­à¬Ÿà­à¬°à¬¿à¬†à¬¨à­ ଜରà­à¬®à¬¾à¬¨"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "ଅଷà­à¬Ÿà­à¬°à­‡à¬²à¬¿à¬†à¬¨à­ ଇà¬à¬°à¬¾à¬œà­€"
+ },
+ "is": {
+ "code": "is",
+ "name": "ଆଇସଲାଣà­à¬¡à¬¿à¬•à­"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "ଆଘେମ"
+ },
+ "az": {
+ "code": "az",
+ "name": "ଆଜେରବାଇଜାନି"
+ },
+ "af": {
+ "code": "af",
+ "name": "ଆଫà­à¬°à¬¿à¬•à¬¾à¬¨à¬¸à­"
+ },
+ "am": {
+ "code": "am",
+ "name": "ଆମହାରକି"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "ଆରବିକà­"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "ଆରà­à¬®à­‡à¬¨à¬¿à¬†à¬¨à­"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "ଆଲବାନିଆନà­"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "ଆଷà­à¬Ÿà­à¬°à¬¿à¬†à¬¨à­"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "ଆସà­"
+ },
+ "en": {
+ "code": "en",
+ "name": "ଇଂରାଜୀ"
+ },
+ "it": {
+ "code": "it",
+ "name": "ଇଟାଲିଆନà­"
+ },
+ "id": {
+ "code": "id",
+ "name": "ଇଣà­à¬¡à­‹à¬¨à­‡à¬¸à¬¿à¬†à¬¨à­"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "ଇରିସà­"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ଇୱେ"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ଇୱୋଣà­à¬¡à­‹"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "ଉଜବେକà­"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ଉତà­à¬¤à¬° ନେଡବେଲେ"
+ },
+ "se": {
+ "code": "se",
+ "name": "ଉତà­à¬¤à¬° ସାମି"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "ଉପର ସରà­à¬¬à¬¿à¬†à¬¨à­"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ଉରà­à¬¦à­à¬¦à­"
+ },
+ "et": {
+ "code": "et",
+ "name": "à¬à¬¸à­à¬¤à­‹à¬¨à¬¿à¬†à¬¨à­"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "à¬à¬¸à­à¬ªà¬¾à¬°à­‡à¬£à­à¬Ÿà­‹"
+ },
+ "or": {
+ "code": "or",
+ "name": "ଓଡ଼ିଆ"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "କନà­à¬¨à¬¡"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "କବାଇଲà­"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "କମà­à¬¬à¬¾"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "କାଜାକà­"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "କାଟଲାନà­"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "କାଟାଲାନà­"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "କାନାଡିଆନୠଇà¬à¬°à¬¾à¬œà­€"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "କାନାଡିଆନୠଫà­à¬°à­‡à¬žà­à¬š"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "କାଶà­à¬®à¬¿à¬°à­€"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "କିରଗିଜà­"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "କୀକà­à­Ÿà­"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "କୋରିଆନà­"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "କà­à¬°à­‹à¬†à¬Ÿà¬¿à¬†à¬¨à­"
+ },
+ "km": {
+ "code": "km",
+ "name": "ଖà­à¬®à­‡à¬°à­"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ଗନà­à¬¦à¬¾"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "ଗାଲସିଆନà­"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "ଗà­à¬œà­à¬°à¬¾à¬Ÿà­€"
+ },
+ "el": {
+ "code": "el",
+ "name": "ଗà­à¬°à­€à¬•à­"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "ଗà­à¬°à­€à¬¨à¬²à¬¾à¬£à­à¬¡à¬¿à¬•à­"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "ଚାଇନୀଜà­"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ଚେକà­"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "ଚେରୋକୀ"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "ଜରà­à¬œà¬¿à¬†à¬¨à­"
+ },
+ "de": {
+ "code": "de",
+ "name": "ଜରà­à¬®à¬¾à¬¨à­"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ଜାପାନୀଜà­"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "ଜà­à¬²à­"
+ },
+ "to": {
+ "code": "to",
+ "name": "ଟୋଙà­à¬—ା"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "ଟà­à¬°à¬¿à¬—ିନିଆ"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ଡଚà­"
+ },
+ "da": {
+ "code": "da",
+ "name": "ଡାନà­à¬¨à¬¿à¬¸à­"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "ତାମିଲà­"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "ତିବେତାନà­"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "ତà­à¬°à­à¬•à¬¿à¬¸à­"
+ },
+ "te": {
+ "code": "te",
+ "name": "ତେଲà­à¬—à­"
+ },
+ "th": {
+ "code": "th",
+ "name": "ଥାଇ"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "ନରୱେଜିଆନୠନିୟୋରà­à¬¸à­à¬•"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "ନରୱେଜିଆନୠବୋକମଲà­"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "ନିଚଳା ସରà­à¬¬à¬¿à¬†à¬¨à­"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "ନେପାଳୀ"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "ନà­à­Ÿà¬¾à¬¨à¬•à­‹à¬²à­"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "ପଞà­à¬œà¬¾à¬¬à­€"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "ପରà­à¬¤à­à¬¤à­à¬—à­à¬°à­€à¬œà­"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "ପରà­à¬¸à¬¿à¬†à¬¨à­"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "ପଶà­à¬šà¬¿à¬® ଫà­à¬°à¬¿à¬¸à¬¿à­Ÿà¬¨à­"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "ପାରମà­à¬ªà¬°à¬¿à¬• ଚାଇନୀଜà­"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "ପାସà­à¬¤à­‹"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "ପୋଲିଶà­"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "ଫାରୋà¬à¬¸à­‡"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "ଫିନà­à¬¨à¬¿à¬¸à­"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "ଫିଲିପିନୋ"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "ଫà­à¬²à¬¾à¬¹"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "ଫà­à¬°à¬¿à­Ÿà­à¬²à­€à­Ÿà¬¾à¬¨à­"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "ଫà­à¬°à­‡à¬žà­à¬š"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "ଫà­à¬²à­‡à¬®à¬¿à¬¶à­"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "ବଙà­à¬—ାଳୀ"
+ },
+ "my": {
+ "code": "my",
+ "name": "ବରà­à¬®à­€à¬œà­"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "ବାମà­à¬¬à¬¾à¬°à¬¾"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "ବାସା"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "ବାସà­à¬•à­à­±à¬¿"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ବà­à¬²à¬—େରିଆନà­"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "ବେନା"
+ },
+ "be": {
+ "code": "be",
+ "name": "ବେଲାରà­à¬·à¬¿à¬†à¬¨à­"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "ବà­à¬°à¬¾à¬œà¬¿à¬²à¬¿à¬†à¬¨à­ ପରà­à¬¤à­à¬¤à­à¬—ୀଜà­"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "ବà­à¬°à¬¿à¬Ÿà¬¿à¬¶à­ ଇà¬à¬°à¬¾à¬œà­€"
+ },
+ "br": {
+ "code": "br",
+ "name": "ବà­à¬°à­‡à¬Ÿà¬¨à­"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "ଭାଇ"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ଭିà¬à¬¤à¬¨à¬¾à¬®à¬¿à¬œà­"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "ଭୂଟାନୀ"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "ମଙà­à¬—ୋଲିଆନà­"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "ମରାଠୀ"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "ମାକଡୋନିଆନà­"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ମାନକ ଆରବିକ"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "ମାଲଟୀଜà­"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "ମାଲୟ"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "ମାଲାଗାସୀ"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "ମାଲାୟଲମà­"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "ମାସାଇ"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ମୋଲଡୋଭିଆନà­"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "à­Ÿà­.à¬à¬¸à­. ଇà¬à¬°à¬¾à¬œà­€"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "à­Ÿà­à¬•à­à¬°à¬¾à¬¨à¬¿à¬†à¬¨à­"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "à­Ÿà­à¬˜à­à¬°à­"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ୟୋରà­à¬¬à¬¾"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ରଷିଆନà­"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "ରà­à¬£à­à¬¡à¬¿"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "ରେହେଟୋ-ରୋମାନà­à¬¸"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "ରୋମାନିଆନà­"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "ରୋମà­à¬¬à­‹"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "ଲକà­à¬¸à­‡à¬®à¬¬à¬°à­à¬—ିସà­"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "ଲାଓ"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "ଲାଟଭିଆନà­"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "ଲିଙà­à¬—ାଲା"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "ଲିଥà­à¬†à¬¨à¬¿à¬†à¬¨à­"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "ଲà­à¬“"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "ଲେବେରିଆନୠପରà­à¬¤à­à¬¤à­à¬—ୀଜà­"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "ଲେବେରିଆନୠସà­à¬ªà¬¾à¬¨à¬¿à¬¶à­"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "ଲà­à­Ÿà­à¬¬à¬¾-କାଟାଙà­à¬—ା"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "ୱେଲà­à¬¸"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "ଶୋନା"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "ସରଳିକରଣ ଚାଇନୀଜà­"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "ସରà­à¬¬à¬¿à¬†à¬¨à­"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "ସାଙà­à¬—à­‹"
+ },
+ "si": {
+ "code": "si",
+ "name": "ସିଂହଳ"
+ },
+ "so": {
+ "code": "so",
+ "name": "ସୋମାଲିଆ"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "ସà­à¬•à¬Ÿà¬¿à¬¸à­ ଗାà¬à¬²à¬¿à¬•à­"
+ },
+ "es": {
+ "code": "es",
+ "name": "ସà­à¬ªà¬¾à¬¨à¬¿à¬¸à­"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "ସà­à¬¬à¬¿à¬¸à­ ଜରà­à¬®à¬¾à¬¨à­"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "ସà­à¬¬à¬¿à¬¸à­ ଫà­à¬°à­‡à¬žà­à¬šà­"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "ସà­à¬¬à¬¿à¬¸à­ ହାଇ ଜରà­à¬®à¬¾à¬¨à­"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "ସà­à¬²à­‹à¬­à¬¾à¬•à­"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "ସà­à¬²à­‹à¬­à­‡à¬¨à¬¿à¬†à¬¨à­"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "ସà­à­±à¬¾à¬¹à¬¿à¬²à­"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "ସà­à­±à­‡à¬¡à¬¿à¬¸à­"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ହଙà­à¬—େରିଆନà­"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "ହିନà­à¬¦à­€"
+ },
+ "he": {
+ "code": "he",
+ "name": "ହେବà­à¬°à­à­Ÿà­"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "ହୌସା"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/pa.json b/library/intl/resources/language/pa.json
new file mode 100644
index 000000000..3ac1234ed
--- /dev/null
+++ b/library/intl/resources/language/pa.json
@@ -0,0 +1,738 @@
+{
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ਉਇਗà©à¨°"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "ਉਜ਼ਬੇਕ"
+ },
+ "se": {
+ "code": "se",
+ "name": "ਉੱਤਰੀ ਸਾਮੀ"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ਉੱਤਰੀ ਨਡੇਬੇਲੇ"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ਉਰਦੂ"
+ },
+ "or": {
+ "code": "or",
+ "name": "ਉੜੀਆ"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "ਅਸੂ"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "ਅਕਾਨ"
+ },
+ "en": {
+ "code": "en",
+ "name": "ਅੰਗਰੇਜ਼ੀ"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "ਅਗੇਮ"
+ },
+ "az": {
+ "code": "az",
+ "name": "ਅਜ਼ਰਬਾਈਜਾਨੀ"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "ਅੱਪਰ ਸੋਰਬੀਅਨ"
+ },
+ "af": {
+ "code": "af",
+ "name": "ਅਫ਼ਰੀਕੀ"
+ },
+ "am": {
+ "code": "am",
+ "name": "ਅਮਹਾਰਿਕ"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "ਅਮਰੀਕੀ ਅੰਗਰੇਜ਼ੀ"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "ਅਰਬੀ"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "ਅਰਮੀਨੀਆਈ"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "ਅਲਬਾਨੀਆਈ"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "ਆਇਰੀ"
+ },
+ "is": {
+ "code": "is",
+ "name": "ਆਈਸਲੈਂਡਿਕ"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "ਆਸਟਰੀਆਈ ਜਰਮਨ"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "ਆਸਟà©à¨°à©‡à¨²à©€à¨†à¨ˆ ਅੰਗਰੇਜ਼ੀ"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ਆਧà©à¨¨à¨¿à¨• ਮਿਆਰੀ ਅਰਬੀ"
+ },
+ "et": {
+ "code": "et",
+ "name": "ਇਸਟੋਨੀਆਈ"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "ਇਸਪੇਰਾਂਟੋ"
+ },
+ "id": {
+ "code": "id",
+ "name": "ਇੰਡੋਨੇਸ਼ੀਆਈ"
+ },
+ "it": {
+ "code": "it",
+ "name": "ਇਤਾਲਵੀ"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "ਇੰਬੂ"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ਈਵਈ"
+ },
+ "es": {
+ "code": "es",
+ "name": "ਸਪੇਨੀ"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "ਸ਼ੰਬਾਲਾ"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "ਸਮਬà©à¨°à©‚"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "ਸਰਬੀਆਈ"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "ਸਰਲ ਚੀਨੀ"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "ਸਲੋਵਾਕ"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "ਸਲੋਵੇਨੀਆਈ"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "ਸਵਾਹਿਲੀ"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "ਸਵਿਸ ਹਾਈ ਜਰਮਨ"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "ਸਵਿਸ ਜਰਮਨ"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "ਸਵਿਸ ਫਰਾਂਸੀਸੀ"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "ਸਵੀਡਿਸ਼"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "ਸਾਂਗੋ"
+ },
+ "si": {
+ "code": "si",
+ "name": "ਸਿੰਹਾਲਾ"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "ਸੇਂਗੋ"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "ਸੇਨਾ"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "ਸੋਗਾ"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "ਸ਼ੋਨਾ"
+ },
+ "so": {
+ "code": "so",
+ "name": "ਸੋਮਾਲੀ"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ਹੰਗਰੀਆਈ"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "ਹਿੰਦੀ"
+ },
+ "he": {
+ "code": "he",
+ "name": "ਹਿਬਰੂ"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "ਹੌਸਾ"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "ਕਸ਼ਮੀਰੀ"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "ਕਜ਼ਾਖ਼"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "ਕੰਨੜ"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "ਕੰਬਾ"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "ਕਬਾਇਲ"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "ਕਲਾਅੱਲੀਸà©à¨Ÿ"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "ਕਲੇਜਿਨ"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "ਕਵਾਸਿਓ"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "ਕà©à¨°à©‹à¨à¨¸à¨¼à¨¿à¨†à¨ˆ"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "ਕਾਂਗੋ ਸਵਾਹਿਲੀ"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "ਕਾਬà©à¨µà©‡à¨°à¨¦à¨¿à¨†à¨¨à©‚"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "ਕਿਕੂਯੂ"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "ਕਿਰਗੀਜ਼"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "ਕੈਟਾਲਾਨ"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "ਕੈਨੇਡੀਅਨ ਅੰਗਰੇਜ਼ੀ"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "ਕੈਨੇਡੀਅਨ ਫਰਾਂਸੀਸੀ"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "ਕੋਇਰਾਬੋਰੋ ਸੇਂਨੀ"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "ਕੋਯਰਾ ਚੀਨੀ"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "ਕੋਰੀਆਈ"
+ },
+ "km": {
+ "code": "km",
+ "name": "ਖਮੇਰ"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ਗਾਂਡਾ"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "ਗà©à¨¸à©€"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "ਗà©à¨œà¨°à¨¾à¨¤à©€"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "ਗੈਲਿਸ਼ਿਅਨ"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "ਚੀਗਾ"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "ਚੀਨੀ"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "ਚੇਰੋਕੀ"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ਚੈਕ"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ਜਪਾਨੀ"
+ },
+ "de": {
+ "code": "de",
+ "name": "ਜਰਮਨ"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "ਜਾਰਜੀਆਈ"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "ਜ਼ਾਰਮਾ"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "ਜ਼à©à¨²à©‚"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "ਜ਼ੋਂਗਖਾ"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "ਜੋਲਾ-ਫੋਇਨੀ"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "ਟਚੇਲਹਿਟ"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "ਟੇਸੋ"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "ਟੇਟਾ"
+ },
+ "to": {
+ "code": "to",
+ "name": "ਟੌਂਗਨ"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ਡੱਚ"
+ },
+ "da": {
+ "code": "da",
+ "name": "ਡੈਨਿਸ਼"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "ਤਮਿਲ"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "ਤਾਸਾਵਿਕ"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "ਤਿਗà©à¨°à©€à¨¨à¨¿à¨†"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "ਤਿੱਬਤੀ"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "ਤà©à¨°à¨•à©€"
+ },
+ "te": {
+ "code": "te",
+ "name": "ਤੇਲਗੂ"
+ },
+ "th": {
+ "code": "th",
+ "name": "ਥਾਈ"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ਨਗੋਂਬਾ"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "ਨਾਮਾ"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "ਨਾਰਵੇਜਿਆਈ ਨਿਓਨੌਰਸਕ"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "ਨਾਰਵੇਜਿਆਈ ਬੋਕਮਲ"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "ਨਿਆਂਕੋਲੇ"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "ਨà©à¨à¨°"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "ਨੇਪਾਲੀ"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "ਪਸ਼ਤੋ"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "ਪੱਛਮੀ ਫà©à¨°à¨¿à¨¸à©€à¨…ਨ"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "ਪੰਜਾਬੀ"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "ਪà©à¨°à¨¤à¨—ਾਲੀ"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "ਪੋਲੈਂਡੀ"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "ਫਰਾਂਸੀਸੀ"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "ਫਲੈਮਿਸ਼"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "ਫ਼ਾਰਸੀ"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "ਫਿਨਿਸ਼"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "ਫਿਲੀਪਿਨੋ"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "ਫ਼ੇਰੋਸੇ"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "ਬੰਗਾਲੀ"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "ਬਫ਼ੀਆ"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "ਬੰਬਾਰਾ"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "ਬਰਤਾਨਵੀ ਅੰਗਰੇਜ਼ੀ"
+ },
+ "my": {
+ "code": "my",
+ "name": "ਬਰਮੀ"
+ },
+ "br": {
+ "code": "br",
+ "name": "ਬਰੇਟਨ"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "ਬà©à¨°à¨¾à¨œà¨¼à©€à¨²à©€à¨†à¨ˆ ਪà©à¨°à¨¤à¨—ਾਲੀ"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "ਬਾਸਕ"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ਬà©à¨²à¨—ਾਰੀਆਈ"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "ਬੇਨਾ"
+ },
+ "be": {
+ "code": "be",
+ "name": "ਬੇਲਾਰੂਸੀ"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "ਬੋਸਨੀਆਈ"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "ਬੋਡੋ"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "ਮਸਾਈ"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "ਮਕੋਂਡ"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "ਮਖੋਵਾ-ਮਿੱਟੋ"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "ਮੰਗੋਲੀਅਨ"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "ਮਚਾਮੇ"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "ਮੱਧ à¨à¨Ÿà¨²à¨¸ ਤਮਾਜ਼ਿਤ"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "ਮਰਾਠੀ"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "ਮਲਯ"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "ਮਲਿਆਲਮ"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "ਮਾਲਟੀਜ਼"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "ਮਿਆਰੀ ਮੋਰੋਕੇਨ ਟਾਮਾਜ਼ਿਕ"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "ਮà©à©°à¨¡à©‡à¨‚ਗ"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "ਮੇਰੂ"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "ਮੇਲੇਗਸੀ"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "ਮੈਕਸੀਕਨ ਸਪੈਨਿਸ਼"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "ਮੈਕਡੋਨੀਆਈ"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "ਮੋਰੀਸਿਅਨ"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ਮੋਲਡਾਵੀਆਈ"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ਯੂਕਰੇਨੀਆਈ"
+ },
+ "el": {
+ "code": "el",
+ "name": "ਯੂਨਾਨੀ"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "ਯੂਰਪੀ ਸਪੇਨੀ"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "ਯੂਰਪੀ ਪà©à¨°à¨¤à¨—ਾਲੀ"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ਯੋਰੂਬਾ"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "ਰਵਾ"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "ਰਵਾਇਤੀ ਚੀਨੀ"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "ਰà©à©°à¨¡à©€"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ਰੂਸੀ"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "ਰੋਮਬੋ"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "ਰੋਮਾਂਸ਼"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "ਰੋਮਾਨੀਆਈ"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "ਲਕਜ਼ਮਬਰਗਿਸ਼"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "ਲੰਗਾਈ"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "ਲਾਓ"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "ਲਾਟਵਿਅਨ"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "ਲਿੰਗਾਲਾ"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "ਲਿਥà©à¨†à¨¨à©€à¨…ਨ"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "ਲੂਓ"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "ਲੂਈਆ"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "ਲੂਬਾ-ਕਾਟਾਂਗਾ"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "ਲੋਅਰ ਸੋਰਬੀਅਨ"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "ਵਾਈ"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ਵੀਅਤਨਾਮੀ"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "ਵੂੰਜੋ"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "ਵੈਲਜ਼"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/pl.json b/library/intl/resources/language/pl.json
new file mode 100644
index 000000000..c6e69a00f
--- /dev/null
+++ b/library/intl/resources/language/pl.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albański"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "amerykański angielski"
+ },
+ "am": {
+ "code": "am",
+ "name": "amharski"
+ },
+ "en": {
+ "code": "en",
+ "name": "angielski"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabski"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturyjski"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "ateso"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "australijski angielski"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "austriacki niemiecki"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerski"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "baskijski"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalski"
+ },
+ "be": {
+ "code": "be",
+ "name": "białoruski"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmański"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bośniacki"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "brazylijski portugalski"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretoński"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "brytyjski angielski"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bułgarski"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "centralnomarokański tamazight"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chiński"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chiński (tradycyjny)"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chiński (uproszczony)"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "chorwacki"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "czeski"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "czirokeski"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "diola"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "dolnołużycki"
+ },
+ "da": {
+ "code": "da",
+ "name": "duński"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "dżerma"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estoński"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "europejski hiszpański"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "europejski portugalski"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "farerski"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "fiński"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamandzki (Belgia)"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francuski"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulijski"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fulani"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galicyjski"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "górnołużycki"
+ },
+ "el": {
+ "code": "el",
+ "name": "grecki"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "grenlandzki"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "gruziński"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gudźaracki"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "gwara kolońska"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebrajski"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "es": {
+ "code": "es",
+ "name": "hiszpański"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonezyjski"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandzki"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandzki"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japoński"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "joruba"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabylski"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "kanadyjski angielski"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "kanadyjski francuski"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kaszmirski"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "kataloński"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazachski"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmerski"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuju"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgiski"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "kongijski suahili"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "koreański"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "kreolski Mauritiusa"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "kreolski Wysp Zielonego PrzylÄ…dka"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laotański"
+ },
+ "se": {
+ "code": "se",
+ "name": "lapoński północny"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "litewski"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luhya"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luksemburski"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Å‚otewski"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedoński"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makua"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malajalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malajski"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgaski"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltański"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masajski"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "meksykański hiszpański"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "mołdawski"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongolski"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele północny"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalski"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngombe"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "ngumba"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "niderlandzki"
+ },
+ "de": {
+ "code": "de",
+ "name": "niemiecki"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norweski (bokmål)"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norweski (nynorsk)"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "orija"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "ormiański"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "paszto"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "pendżabski"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "perski"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polski"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugalski"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retoromański"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "rosyjski"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumuński"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "sambala"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbski"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "słowacki"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "słoweński"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalijski"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "suahili"
+ },
+ "si": {
+ "code": "si",
+ "name": "syngaleski"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "szkocki gaelicki"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "szona"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "szwajcarski francuski"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "szwajcarski niemiecki"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "szwedzki"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "th": {
+ "code": "th",
+ "name": "tajski"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamilski"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tashelhiyt"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinia"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonga"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turecki"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tybetański"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ujgurski"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukraiński"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbecki"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "wai"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "walijski"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "węgierski"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "wietnamski"
+ },
+ "it": {
+ "code": "it",
+ "name": "włoski"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "współczesny arabski"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "wysokoniemiecki (Szwajcaria)"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "zachodniofryzyjski"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ps.json b/library/intl/resources/language/ps.json
new file mode 100644
index 000000000..1b5b5804d
--- /dev/null
+++ b/library/intl/resources/language/ps.json
@@ -0,0 +1,738 @@
+{
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burmese"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "az": {
+ "code": "az",
+ "name": "أذربائجاني"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "اردو"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "ارمني"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "ازبکي"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "اسپرانتو"
+ },
+ "af": {
+ "code": "af",
+ "name": "اÙريکاني"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "الباني"
+ },
+ "de": {
+ "code": "de",
+ "name": "الماني"
+ },
+ "am": {
+ "code": "am",
+ "name": "امهاري"
+ },
+ "id": {
+ "code": "id",
+ "name": "انډونÛشيايي"
+ },
+ "en": {
+ "code": "en",
+ "name": "انګلیسي"
+ },
+ "or": {
+ "code": "or",
+ "name": "اوريا"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "اوکرانايي"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "اويگور"
+ },
+ "it": {
+ "code": "it",
+ "name": "ایټالوي"
+ },
+ "is": {
+ "code": "is",
+ "name": "أيسلÛÙ†Ú‰ÙŠ"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "ائيرلÛÙ†Ú‰ÙŠ"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "باسکي"
+ },
+ "br": {
+ "code": "br",
+ "name": "برÛتون"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "بلغاري"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "بنګالي"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "بوسني"
+ },
+ "be": {
+ "code": "be",
+ "name": "بÛلاروسي"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "پرتگال (برازيل)"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "پرتګالي (پرتګال)"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "پښتو"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "پنجابي"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "پورتګالي"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "پولنډي"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "تامل"
+ },
+ "th": {
+ "code": "th",
+ "name": "تايلÛÙ†Ú‰ÙŠ"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "ترکي"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "تګالوګ"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "تيګريني"
+ },
+ "te": {
+ "code": "te",
+ "name": "تÛليګو"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "جاپانی"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "جورجيائي"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Ú†ÛÚ©"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "چیني"
+ },
+ "et": {
+ "code": "et",
+ "name": "حبشي"
+ },
+ "da": {
+ "code": "da",
+ "name": "Ú‰Ûنش"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "روسي"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "روماني"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "زولو"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "سربيائي"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "سکاټلÛÙ†Ú‰ÙŠ Ú«ÛÙ„Ú©"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "سلوواکي"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "سلوواني"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "سواهÛلي"
+ },
+ "so": {
+ "code": "so",
+ "name": "سومالي"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "سویډنی"
+ },
+ "si": {
+ "code": "si",
+ "name": "سينهالي"
+ },
+ "he": {
+ "code": "he",
+ "name": "عبري"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "عربي"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Ùارسي"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "ÙاروئÛ"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Ùرانسوي"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Ùريزي"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Ùینلنډي"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "کټلاني"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "کرګيز"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "کروواتي"
+ },
+ "km": {
+ "code": "km",
+ "name": "Ú©Ù…Ø¨ÙˆÚ‰ÙŠØ§ÙŠÛ ÙŠØ§ د کمبوډيا"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "کنأډه"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "کوريائي"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "ګجراتي"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Ú«Ù„Ûشيايي"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "لويتين"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "ليتواني"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Ù„Ûټواني"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "مالايالم"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "مالټايي"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "مراټهي"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "مغولي"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "مقدوني"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "ملایا"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "ملغاسي"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "ناروÛئي (نائنورسک)"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Ù†Ûپالي"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "هالÛÙ†Ú‰ÙŠ"
+ },
+ "es": {
+ "code": "es",
+ "name": "هسپانوي"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "هندي"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "هنګري"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ÙˆÛتنامي"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "ويلشي"
+ },
+ "el": {
+ "code": "el",
+ "name": "یوناني"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/pt-AO.json b/library/intl/resources/language/pt-AO.json
new file mode 100644
index 000000000..44021eb46
--- /dev/null
+++ b/library/intl/resources/language/pt-AO.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "africânder"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanês"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemão"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemão austríaco"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemão suíço"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemão suíço"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "alto sórabio"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe moderno padrão"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "arménio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaijano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "baixo sórabio"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "basco"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorrusso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmanês"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bósnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretão"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "cabo-verdiano"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarim"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalão"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "caxemira"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "cazaque"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chinês"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chinês simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chinês tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalês"
+ },
+ "km": {
+ "code": "km",
+ "name": "cmer"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "dinamarquês"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzonga"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "espanhol"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "espanhol do México"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "espanhol europeu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estónio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroês"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finlandês"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamengo"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francês"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francês canadiano"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francês suíço"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frísico ocidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocês"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galego"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galês"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "grego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandês"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "guzerate"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "haúça"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebraico"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "holandês"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonésio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglês"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglês americano"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglês australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglês britânico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglês canadiano"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ioruba"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandês"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandês"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonês"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabyle"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letão"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-catanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburguês"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedónio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "maconde"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "macua"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malaiala"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malaio"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgaxe"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltês"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marata"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "massai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldávio"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele do norte"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepali"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "nguemba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norueguês bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norueguês nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "panjabi"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastó"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "português"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "português do Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "português europeu"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "quicuio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "quirguiz"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romanche"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "romeno"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "russo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami do norte"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "sérvio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somali"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "suaíli"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "suaíli do Congo"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandês"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight do Atlas Central"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight padrão de Marrocos"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tâmil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrínia"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonga"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "usbeque"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/pt-CV.json b/library/intl/resources/language/pt-CV.json
new file mode 100644
index 000000000..44021eb46
--- /dev/null
+++ b/library/intl/resources/language/pt-CV.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "africânder"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanês"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemão"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemão austríaco"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemão suíço"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemão suíço"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "alto sórabio"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe moderno padrão"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "arménio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaijano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "baixo sórabio"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "basco"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorrusso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmanês"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bósnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretão"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "cabo-verdiano"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarim"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalão"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "caxemira"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "cazaque"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chinês"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chinês simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chinês tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalês"
+ },
+ "km": {
+ "code": "km",
+ "name": "cmer"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "dinamarquês"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzonga"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "espanhol"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "espanhol do México"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "espanhol europeu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estónio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroês"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finlandês"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamengo"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francês"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francês canadiano"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francês suíço"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frísico ocidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocês"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galego"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galês"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "grego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandês"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "guzerate"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "haúça"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebraico"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "holandês"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonésio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglês"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglês americano"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglês australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglês britânico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglês canadiano"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ioruba"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandês"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandês"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonês"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabyle"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letão"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-catanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburguês"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedónio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "maconde"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "macua"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malaiala"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malaio"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgaxe"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltês"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marata"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "massai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldávio"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele do norte"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepali"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "nguemba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norueguês bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norueguês nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "panjabi"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastó"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "português"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "português do Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "português europeu"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "quicuio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "quirguiz"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romanche"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "romeno"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "russo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami do norte"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "sérvio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somali"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "suaíli"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "suaíli do Congo"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandês"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight do Atlas Central"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight padrão de Marrocos"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tâmil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrínia"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonga"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "usbeque"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/pt-GW.json b/library/intl/resources/language/pt-GW.json
new file mode 100644
index 000000000..44021eb46
--- /dev/null
+++ b/library/intl/resources/language/pt-GW.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "africânder"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanês"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemão"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemão austríaco"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemão suíço"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemão suíço"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "alto sórabio"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe moderno padrão"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "arménio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaijano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "baixo sórabio"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "basco"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorrusso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmanês"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bósnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretão"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "cabo-verdiano"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarim"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalão"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "caxemira"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "cazaque"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chinês"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chinês simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chinês tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalês"
+ },
+ "km": {
+ "code": "km",
+ "name": "cmer"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "dinamarquês"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzonga"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "espanhol"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "espanhol do México"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "espanhol europeu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estónio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroês"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finlandês"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamengo"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francês"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francês canadiano"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francês suíço"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frísico ocidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocês"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galego"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galês"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "grego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandês"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "guzerate"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "haúça"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebraico"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "holandês"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonésio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglês"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglês americano"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglês australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglês britânico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglês canadiano"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ioruba"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandês"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandês"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonês"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabyle"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letão"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-catanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburguês"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedónio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "maconde"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "macua"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malaiala"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malaio"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgaxe"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltês"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marata"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "massai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldávio"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele do norte"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepali"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "nguemba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norueguês bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norueguês nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "panjabi"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastó"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "português"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "português do Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "português europeu"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "quicuio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "quirguiz"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romanche"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "romeno"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "russo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami do norte"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "sérvio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somali"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "suaíli"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "suaíli do Congo"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandês"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight do Atlas Central"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight padrão de Marrocos"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tâmil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrínia"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonga"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "usbeque"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/pt-MO.json b/library/intl/resources/language/pt-MO.json
new file mode 100644
index 000000000..44021eb46
--- /dev/null
+++ b/library/intl/resources/language/pt-MO.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "africânder"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanês"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemão"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemão austríaco"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemão suíço"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemão suíço"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "alto sórabio"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe moderno padrão"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "arménio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaijano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "baixo sórabio"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "basco"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorrusso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmanês"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bósnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretão"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "cabo-verdiano"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarim"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalão"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "caxemira"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "cazaque"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chinês"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chinês simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chinês tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalês"
+ },
+ "km": {
+ "code": "km",
+ "name": "cmer"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "dinamarquês"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzonga"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "espanhol"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "espanhol do México"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "espanhol europeu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estónio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroês"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finlandês"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamengo"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francês"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francês canadiano"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francês suíço"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frísico ocidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocês"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galego"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galês"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "grego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandês"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "guzerate"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "haúça"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebraico"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "holandês"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonésio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglês"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglês americano"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglês australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglês britânico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglês canadiano"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ioruba"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandês"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandês"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonês"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabyle"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letão"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-catanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburguês"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedónio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "maconde"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "macua"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malaiala"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malaio"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgaxe"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltês"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marata"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "massai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldávio"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele do norte"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepali"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "nguemba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norueguês bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norueguês nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "panjabi"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastó"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "português"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "português do Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "português europeu"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "quicuio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "quirguiz"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romanche"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "romeno"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "russo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami do norte"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "sérvio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somali"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "suaíli"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "suaíli do Congo"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandês"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight do Atlas Central"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight padrão de Marrocos"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tâmil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrínia"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonga"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "usbeque"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/pt-MZ.json b/library/intl/resources/language/pt-MZ.json
new file mode 100644
index 000000000..44021eb46
--- /dev/null
+++ b/library/intl/resources/language/pt-MZ.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "africânder"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanês"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemão"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemão austríaco"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemão suíço"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemão suíço"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "alto sórabio"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe moderno padrão"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "arménio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaijano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "baixo sórabio"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "basco"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorrusso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmanês"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bósnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretão"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "cabo-verdiano"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarim"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalão"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "caxemira"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "cazaque"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chinês"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chinês simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chinês tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalês"
+ },
+ "km": {
+ "code": "km",
+ "name": "cmer"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "dinamarquês"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzonga"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "espanhol"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "espanhol do México"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "espanhol europeu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estónio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroês"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finlandês"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamengo"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francês"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francês canadiano"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francês suíço"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frísico ocidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocês"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galego"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galês"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "grego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandês"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "guzerate"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "haúça"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebraico"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "holandês"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonésio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglês"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglês americano"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglês australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglês britânico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglês canadiano"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ioruba"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandês"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandês"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonês"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabyle"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letão"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-catanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburguês"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedónio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "maconde"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "macua"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malaiala"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malaio"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgaxe"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltês"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marata"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "massai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldávio"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele do norte"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepali"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "nguemba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norueguês bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norueguês nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "panjabi"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastó"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "português"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "português do Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "português europeu"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "quicuio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "quirguiz"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romanche"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "romeno"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "russo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami do norte"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "sérvio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somali"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "suaíli"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "suaíli do Congo"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandês"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight do Atlas Central"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight padrão de Marrocos"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tâmil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrínia"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonga"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "usbeque"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/pt-PT.json b/library/intl/resources/language/pt-PT.json
new file mode 100644
index 000000000..44021eb46
--- /dev/null
+++ b/library/intl/resources/language/pt-PT.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "africânder"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanês"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemão"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemão austríaco"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemão suíço"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemão suíço"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "alto sórabio"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe moderno padrão"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "arménio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaijano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "baixo sórabio"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "basco"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorrusso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmanês"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bósnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretão"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "cabo-verdiano"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarim"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalão"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "caxemira"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "cazaque"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chinês"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chinês simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chinês tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalês"
+ },
+ "km": {
+ "code": "km",
+ "name": "cmer"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "dinamarquês"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzonga"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "espanhol"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "espanhol do México"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "espanhol europeu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estónio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroês"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finlandês"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamengo"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francês"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francês canadiano"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francês suíço"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frísico ocidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocês"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galego"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galês"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "grego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandês"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "guzerate"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "haúça"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebraico"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "holandês"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonésio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglês"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglês americano"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglês australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglês britânico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglês canadiano"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ioruba"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandês"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandês"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonês"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabyle"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letão"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-catanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburguês"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedónio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "maconde"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "macua"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malaiala"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malaio"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgaxe"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltês"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marata"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "massai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldávio"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele do norte"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepali"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "nguemba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norueguês bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norueguês nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "panjabi"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastó"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "português"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "português do Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "português europeu"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "quicuio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "quirguiz"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romanche"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "romeno"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "russo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami do norte"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "sérvio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somali"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "suaíli"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "suaíli do Congo"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandês"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight do Atlas Central"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight padrão de Marrocos"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tâmil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrínia"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonga"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "usbeque"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/pt-ST.json b/library/intl/resources/language/pt-ST.json
new file mode 100644
index 000000000..44021eb46
--- /dev/null
+++ b/library/intl/resources/language/pt-ST.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "africânder"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanês"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemão"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemão austríaco"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemão suíço"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemão suíço"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "alto sórabio"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe moderno padrão"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "arménio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaijano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "baixo sórabio"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "basco"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorrusso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmanês"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bósnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretão"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "cabo-verdiano"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarim"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalão"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "caxemira"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "cazaque"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chinês"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chinês simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chinês tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalês"
+ },
+ "km": {
+ "code": "km",
+ "name": "cmer"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "dinamarquês"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzonga"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "espanhol"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "espanhol do México"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "espanhol europeu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estónio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroês"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finlandês"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamengo"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francês"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francês canadiano"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francês suíço"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frísico ocidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocês"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galego"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galês"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "grego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandês"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "guzerate"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "haúça"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebraico"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "holandês"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonésio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglês"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglês americano"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglês australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglês britânico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglês canadiano"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ioruba"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandês"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandês"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonês"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabyle"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letão"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-catanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburguês"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedónio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "maconde"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "macua"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malaiala"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malaio"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgaxe"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltês"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marata"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "massai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldávio"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele do norte"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepali"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "nguemba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norueguês bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norueguês nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "panjabi"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastó"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "português"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "português do Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "português europeu"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "quicuio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "quirguiz"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romanche"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "romeno"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "russo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami do norte"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "sérvio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somali"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "suaíli"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "suaíli do Congo"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandês"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight do Atlas Central"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight padrão de Marrocos"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tâmil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrínia"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonga"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "usbeque"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/pt-TL.json b/library/intl/resources/language/pt-TL.json
new file mode 100644
index 000000000..44021eb46
--- /dev/null
+++ b/library/intl/resources/language/pt-TL.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "africânder"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanês"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemão"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemão austríaco"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemão suíço"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemão suíço"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "alto sórabio"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe moderno padrão"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "arménio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaijano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "baixo sórabio"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "basco"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorrusso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmanês"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bósnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretão"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "cabo-verdiano"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarim"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalão"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "caxemira"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "cazaque"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "checo"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chinês"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chinês simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chinês tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalês"
+ },
+ "km": {
+ "code": "km",
+ "name": "cmer"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "dinamarquês"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzonga"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "espanhol"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "espanhol do México"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "espanhol europeu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estónio"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroês"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finlandês"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamengo"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francês"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francês canadiano"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francês suíço"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frísico ocidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocês"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galego"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galês"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "grego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandês"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "guzerate"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "haúça"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebraico"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "holandês"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonésio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglês"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglês americano"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglês australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglês britânico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglês canadiano"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ioruba"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandês"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandês"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonês"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabyle"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letão"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-catanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburguês"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedónio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "maconde"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "macua"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malaiala"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malaio"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgaxe"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltês"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marata"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "massai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldávio"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele do norte"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepali"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "nguemba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norueguês bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norueguês nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "panjabi"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pastó"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polaco"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "português"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "português do Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "português europeu"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "quicuio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "quirguiz"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romanche"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "romeno"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "russo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami do norte"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "sérvio"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somali"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "suaíli"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "suaíli do Congo"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandês"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight do Atlas Central"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight padrão de Marrocos"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tâmil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrínia"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonga"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "usbeque"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/pt.json b/library/intl/resources/language/pt.json
new file mode 100644
index 000000000..b8bfcaf8f
--- /dev/null
+++ b/library/intl/resources/language/pt.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "africâner"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanês"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemão"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "alemão austríaco"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "alemão suíço"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "alto alemão suíço"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "árabe moderno"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armênio"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiano"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbaijano"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "basco"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorrusso"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmanês"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmål norueguês"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bósnio"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretão"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "canarês"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalão"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "caxemira"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "cazaque"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chinês"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chinês simplificado"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chinês tradicional"
+ },
+ "si": {
+ "code": "si",
+ "name": "cingalês"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croata"
+ },
+ "da": {
+ "code": "da",
+ "name": "dinamarquês"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzonga"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "eslovaco"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "esloveno"
+ },
+ "es": {
+ "code": "es",
+ "name": "espanhol"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "espanhol europeu"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "espanhol mexicano"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estoniano"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "eve"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "feroês"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finlandês"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamengo"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francês"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francês canadense"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francês suíço"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frísio ocidental"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulano"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fula"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaélico escocês"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galego"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galês"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiano"
+ },
+ "el": {
+ "code": "el",
+ "name": "grego"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "groenlandês"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "guzerate"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hauçá"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebraico"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "híndi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "holandês"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonésio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglês"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "inglês americano"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "inglês australiano"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "inglês britânico"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "inglês canadense"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ioruba"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandês"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandês"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonês"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabyle"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmer"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosiano"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letão"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituano"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-catanga"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "luganda"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "lusoga"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburguês"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedônio"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "maconde"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "macua"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malaiala"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malaio"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgaxe"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltês"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marata"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "massai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldávio"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongol"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele do norte"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepali"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "nguemba"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorsk norueguês"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "panjabi"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polonês"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "português"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "português do Brasil"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "português europeu"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "quicuio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "quirguiz"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romanche"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "romeno"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "russo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami do norte"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "sérvio"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sérvio baixo"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "so": {
+ "code": "so",
+ "name": "somali"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorábio superior"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "suaíli"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "suaíli do Congo"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandês"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight marroquino padrão"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tâmil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "tcheco"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetano"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrínia"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonganês"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigur"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "usbeque"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/rm.json b/library/intl/resources/language/rm.json
new file mode 100644
index 000000000..6053a5abd
--- /dev/null
+++ b/library/intl/resources/language/rm.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanais"
+ },
+ "am": {
+ "code": "am",
+ "name": "amaric"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arab"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armen"
+ },
+ "az": {
+ "code": "az",
+ "name": "aserbeidschanic"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "aut sorb"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "basc"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "bass sorb"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengal"
+ },
+ "be": {
+ "code": "be",
+ "name": "bieloruss"
+ },
+ "my": {
+ "code": "my",
+ "name": "birman"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosniac"
+ },
+ "br": {
+ "code": "br",
+ "name": "breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgar"
+ },
+ "km": {
+ "code": "km",
+ "name": "cambodschan"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "casac"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chinais"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chinais simplifitgà"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chinais tradiziunal"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "corean"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croat"
+ },
+ "da": {
+ "code": "da",
+ "name": "danais"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "he": {
+ "code": "he",
+ "name": "ebraic"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en": {
+ "code": "en",
+ "name": "englais"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "englais american"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "englais australian"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "englais britannic"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "englais canadais"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "eston"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "ferrais"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filippino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finlandais"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flam"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "franzos"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "franzos canadais"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "franzos svizzer"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "fris"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulan"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fulah"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaelic scot"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgian"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "giapunais"
+ },
+ "el": {
+ "code": "el",
+ "name": "grec"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "grönlandais"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "haussa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonais"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandais"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandais"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabyle"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kashmiri"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "kimric"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirghis"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laot"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letton"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituan"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgais"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedon"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malagassi"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malaic"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltais"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldav"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongolic"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele dal nord"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalais"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norvegais bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norvegiais nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ollandais"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "paschto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persian"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polac"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugais"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugais brasilian"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugais iberian"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabi"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "rumantsch"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumen"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "russ"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami dal nord"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serb"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "singalais"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovac"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "sloven"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somali"
+ },
+ "es": {
+ "code": "es",
+ "name": "spagnol"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "spagnol iberic"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "spagnol mexican"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "suahili"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "svedais"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandais"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "it": {
+ "code": "it",
+ "name": "talian"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinya"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "tirc"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonga"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "tschec"
+ },
+ "de": {
+ "code": "de",
+ "name": "tudestg"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "tudestg austriac"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "tudestg svizzer"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucranais"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uiguric"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ungarais"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "usbec"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamais"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/rn.json b/library/intl/resources/language/rn.json
new file mode 100644
index 000000000..02fde6fc1
--- /dev/null
+++ b/library/intl/resources/language/rn.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Icarabu"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "es": {
+ "code": "es",
+ "name": "Icesipanyolo"
+ },
+ "en": {
+ "code": "en",
+ "name": "Icongereza"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Igiceke"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Igifaransa"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Igihawusa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Igihindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Igiholandi"
+ },
+ "km": {
+ "code": "km",
+ "name": "Igikambodiya"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Igikani"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Igiperisi"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Igiporutugari"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Igipunjabi"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Igishinwa"
+ },
+ "so": {
+ "code": "so",
+ "name": "Igisomali"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Igisuweduwa"
+ },
+ "it": {
+ "code": "it",
+ "name": "Igitaliyani"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Igitamili"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Igiturukiya"
+ },
+ "be": {
+ "code": "be",
+ "name": "Ikibelarusiya"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Ikibengali"
+ },
+ "de": {
+ "code": "de",
+ "name": "Ikidage"
+ },
+ "el": {
+ "code": "el",
+ "name": "Ikigereki"
+ },
+ "am": {
+ "code": "am",
+ "name": "Ikimuhariki"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Ikinepali"
+ },
+ "my": {
+ "code": "my",
+ "name": "Ikinyabirimaniya"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Ikinyabuligariya"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Ikinyahongiriya"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Ikinyakoreya"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Ikinyamaleziya"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Ikinyapolonye"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Ikinyarumaniya"
+ },
+ "th": {
+ "code": "th",
+ "name": "Ikinyatayilandi"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Ikinyaviyetinamu"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ikinyayukereni"
+ },
+ "id": {
+ "code": "id",
+ "name": "Ikinyendoziya"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Ikirundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Ikirusiya"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Ikiyapani"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Ikiyoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Ikizulu"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Inyeyurudu"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ro.json b/library/intl/resources/language/ro.json
new file mode 100644
index 000000000..32fde8f18
--- /dev/null
+++ b/library/intl/resources/language/ro.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albaneză"
+ },
+ "am": {
+ "code": "am",
+ "name": "amharică"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabă"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "arabă standard modernă"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armeană"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiană"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azeră"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "bască"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengaleză"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielorusă"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmaneză"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosniacă"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretonă"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgară"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "cașmiră"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "catalană"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "cehă"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chineză"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "chineză simplificată"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "chineză tradițională"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreeană"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "croată"
+ },
+ "da": {
+ "code": "da",
+ "name": "daneză"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkha"
+ },
+ "he": {
+ "code": "he",
+ "name": "ebraică"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "en": {
+ "code": "en",
+ "name": "engleză"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "engleză americană"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "engleză australiană"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "engleză britanică"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "engleză canadiană"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estoniană"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "faroeză"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipineză"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finlandeză"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamandă"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "franceză"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "franceză canadiană"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "franceză elvețiană"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulană"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frizonă occidentală"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fulah"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "gaelică scoțiană"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "galeză"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galiciană"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiană"
+ },
+ "de": {
+ "code": "de",
+ "name": "germană"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "germană austriacă"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "germană elvețiană"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "germană standard elvețiană"
+ },
+ "el": {
+ "code": "el",
+ "name": "greacă"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "id": {
+ "code": "id",
+ "name": "indoneziană"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandeză"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandeză"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiană"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japoneză"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannada"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazahă"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kârgâză"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmeră"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kirundi"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölsch"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laoțiană"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letonă"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituaniană"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgheză"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedoneană"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machame"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "maghiară"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malaeză"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgașă"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "malteză"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldovenească"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongolă"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebele de nord"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepaleză"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norvegiană bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norvegiană nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "olandeză"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "paștună"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persană"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "poloneză"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugheză"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugheză braziliană"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugheză europeană"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabi"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romanșă"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "română"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "rusă"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "sami de nord"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "sârbă"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "singhaleză"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovacă"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "slovenă"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somaleză"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sorabă de jos"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorabă de sus"
+ },
+ "es": {
+ "code": "es",
+ "name": "spaniolă"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "spaniolă europeană"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "spaniolă mexicană"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "suedeză"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "swahili Congo"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamazight central marocană"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazight standard marocană"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamilă"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "thailandeză"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetană"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrină"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonga"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turcă"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraineană"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uigură"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbecă"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnameză"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/rof.json b/library/intl/resources/language/rof.json
new file mode 100644
index 000000000..3243b9f57
--- /dev/null
+++ b/library/intl/resources/language/rof.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Kiajemi"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Kiakani"
+ },
+ "am": {
+ "code": "am",
+ "name": "Kiamhari"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Kiarabu"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Kibangla"
+ },
+ "be": {
+ "code": "be",
+ "name": "Kibelarusi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Kibulgaria"
+ },
+ "my": {
+ "code": "my",
+ "name": "Kiburma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Kichecki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Kichina"
+ },
+ "el": {
+ "code": "el",
+ "name": "Kigiriki"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Kihausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Kihindi"
+ },
+ "es": {
+ "code": "es",
+ "name": "Kihispania"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Kiholanzi"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Kihorombo"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Kihungari"
+ },
+ "id": {
+ "code": "id",
+ "name": "Kiindonesia"
+ },
+ "en": {
+ "code": "en",
+ "name": "Kiingereza"
+ },
+ "it": {
+ "code": "it",
+ "name": "Kiitaliano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Kijapani"
+ },
+ "de": {
+ "code": "de",
+ "name": "Kijerumani"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kikambodia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Kikorea"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Kimalesia"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Kinepali"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Kipolandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Kipunjabi"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Kireno"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Kiromania"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Kirusi"
+ },
+ "so": {
+ "code": "so",
+ "name": "Kisomali"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Kiswidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Kitailandi"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Kitamil"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Kituruki"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Kiukrania"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Kiurdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Kivietinamu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Kiyoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Kizulu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Kyifaransa"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ru.json b/library/intl/resources/language/ru.json
new file mode 100644
index 000000000..e13e3a027
--- /dev/null
+++ b/library/intl/resources/language/ru.json
@@ -0,0 +1,738 @@
+{
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "авÑтралийÑкий английÑкий"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "авÑтрийÑкий немецкий"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "агхем"
+ },
+ "az": {
+ "code": "az",
+ "name": "азербайджанÑкий"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "акан"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "албанÑкий"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "американÑкий английÑкий"
+ },
+ "am": {
+ "code": "am",
+ "name": "амхарÑкий"
+ },
+ "en": {
+ "code": "en",
+ "name": "английÑкий"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "арабÑкий"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "арабÑкий литературный"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "армÑнÑкий"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "аÑа"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "аÑтурийÑкий"
+ },
+ "af": {
+ "code": "af",
+ "name": "африкаанÑ"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "бамбарийÑкий"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "баÑа"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "баÑкÑкий"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "бафиÑ"
+ },
+ "be": {
+ "code": "be",
+ "name": "белоруÑÑкий"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "бена"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "бенгальÑкий"
+ },
+ "my": {
+ "code": "my",
+ "name": "бирманÑкий"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "бодо"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "болгарÑкий"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "боÑнийÑкий"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "бразильÑкий португальÑкий"
+ },
+ "br": {
+ "code": "br",
+ "name": "бретонÑкий"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "британÑкий английÑкий"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "ваи"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "валиÑÑкий"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "валлийÑкий"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "венгерÑкий"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "верхнелужицкий"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "вунджо"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "вьетнамÑкий"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "галиÑийÑкий"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ганда"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "голландÑкий"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "гренландÑкий"
+ },
+ "el": {
+ "code": "el",
+ "name": "гречеÑкий"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "грузинÑкий"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "гуджарати"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "гуÑии"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "гÑльÑкий"
+ },
+ "da": {
+ "code": "da",
+ "name": "датÑкий"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "дзонг-кÑ"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "дьола-фоньи"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "европейÑкий иÑпанÑкий"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "европейÑкий португальÑкий"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "западно-фризÑкий"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "зарма"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "зулу"
+ },
+ "he": {
+ "code": "he",
+ "name": "иврит"
+ },
+ "id": {
+ "code": "id",
+ "name": "индонезийÑкий"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "ирландÑкий"
+ },
+ "is": {
+ "code": "is",
+ "name": "иÑландÑкий"
+ },
+ "es": {
+ "code": "es",
+ "name": "иÑпанÑкий"
+ },
+ "it": {
+ "code": "it",
+ "name": "итальÑнÑкий"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "йоруба"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "кабильÑкий"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "кабувердьÑну"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "казахÑкий"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "календжин"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "камба"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "канадÑкий английÑкий"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "канадÑкий французÑкий"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "каннада"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "каталанÑкий"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "кашмири"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "кваÑио"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "кёльш"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "кикуйю"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "киргизÑкий"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "китайÑкий"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "койра чиини"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "койраборо Ñенни"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "конголезÑкий Ñуахили"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "корейÑкий"
+ },
+ "km": {
+ "code": "km",
+ "name": "кхмерÑкий"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "ланги"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "лаоÑÑкий"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "латышÑкий"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "лингала"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "литовÑкий"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "луба-катанга"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "луо (ÐšÐµÐ½Ð¸Ñ Ð¸ ТанзаниÑ)"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "лухьÑ"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "люкÑембургÑкий"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "маврикийÑкий креольÑкий"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "македонÑкий"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "маконде"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "макуа-меетто"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "малагаÑийÑкий"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "малайÑкий"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "малаÑлам"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "мальтийÑкий"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "маратхи"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "маÑаи"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "мачаме"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "меру"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "молдавÑкий"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "монгольÑкий"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "мунданг"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "нама"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "нгомба"
+ },
+ "de": {
+ "code": "de",
+ "name": "немецкий"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "непальÑкий"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "нижнелужицкий"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "норвежÑкий букмол"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "норвежÑкий нюнорÑк"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "нуÑÑ€"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "ньÑнколе"
+ },
+ "or": {
+ "code": "or",
+ "name": "ориÑ"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "панджаби"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "перÑидÑкий"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "польÑкий"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "португальÑкий"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "пушту"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "романшÑкий"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "ромбо"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "руанда"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "румынÑкий"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "рунди"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "руÑÑкий"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Ñамбуру"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Ñанго"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Ñангу"
+ },
+ "se": {
+ "code": "se",
+ "name": "ÑеверноÑаамÑкий"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Ñеверный ндебели"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Ñена"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "ÑербÑкий"
+ },
+ "si": {
+ "code": "si",
+ "name": "ÑингальÑкий"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Ñловацкий"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "ÑловенÑкий"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Ñога"
+ },
+ "so": {
+ "code": "so",
+ "name": "Ñомали"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "ÑреднеатлаÑÑкий тамазигхтÑкий"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Ñуахили"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "таита"
+ },
+ "th": {
+ "code": "th",
+ "name": "тайÑкий"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "тамазигхтÑкий"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "тамильÑкий"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "таÑавак"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "тахелхит"
+ },
+ "te": {
+ "code": "te",
+ "name": "телугу"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "теÑо"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "тибетÑкий"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "тигриньÑ"
+ },
+ "to": {
+ "code": "to",
+ "name": "тонганÑкий"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "традиционный китайÑкий"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "турецкий"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "узбекÑкий"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "уйгурÑкий"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "украинÑкий"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "упрощенный китайÑкий"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "урду"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "фарерÑкий"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "филиппинÑкий"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "финÑкий"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "фламандÑкий"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "французÑкий"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "фриульÑкий"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "фулах"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "хауÑа"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "хинди"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "хорватÑкий"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "чероки"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "чешÑкий"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "чига"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "шамбала"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "шведÑкий"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "швейцарÑкий верхненемецкий"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "швейцарÑкий немецкий"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "швейцарÑкий французÑкий"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "шона"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ñве"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ñвондо"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Ñмбу"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "ÑÑперанто"
+ },
+ "et": {
+ "code": "et",
+ "name": "ÑÑтонÑкий"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Ñнбан"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ÑпонÑкий"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/rwk.json b/library/intl/resources/language/rwk.json
new file mode 100644
index 000000000..446b55ff9
--- /dev/null
+++ b/library/intl/resources/language/rwk.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Kiakanyi"
+ },
+ "am": {
+ "code": "am",
+ "name": "Kiamharyi"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Kiruwa"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Kyiajemi"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Kyiarabu"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Kyibangla"
+ },
+ "be": {
+ "code": "be",
+ "name": "Kyibelarusi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Kyibulgaryia"
+ },
+ "my": {
+ "code": "my",
+ "name": "Kyiburma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Kyichecki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Kyichina"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Kyifaransa"
+ },
+ "el": {
+ "code": "el",
+ "name": "Kyigiriki"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Kyihausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Kyihindi"
+ },
+ "es": {
+ "code": "es",
+ "name": "Kyihispania"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Kyiholanzi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Kyihungari"
+ },
+ "id": {
+ "code": "id",
+ "name": "Kyiindonesia"
+ },
+ "it": {
+ "code": "it",
+ "name": "Kyiitaliano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Kyijapani"
+ },
+ "de": {
+ "code": "de",
+ "name": "Kyijerumani"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kyikambodia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Kyikorea"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Kyimalesia"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Kyinepali"
+ },
+ "en": {
+ "code": "en",
+ "name": "Kyingereza"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Kyipolandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Kyipunjabi"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Kyireno"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Kyiromania"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Kyirusi"
+ },
+ "so": {
+ "code": "so",
+ "name": "Kyisomalyi"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Kyiswidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Kyitailandi"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Kyitamil"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Kyiturukyi"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Kyiukrania"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Kyiurdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Kyivietinamu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Kyiyoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Kyizulu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/saq.json b/library/intl/resources/language/saq.json
new file mode 100644
index 000000000..aadbac26d
--- /dev/null
+++ b/library/intl/resources/language/saq.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Kiajemi"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Kiakan"
+ },
+ "am": {
+ "code": "am",
+ "name": "Kiamhari"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Kiarabu"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Kibangla"
+ },
+ "be": {
+ "code": "be",
+ "name": "Kibelarusi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Kibulgaria"
+ },
+ "my": {
+ "code": "my",
+ "name": "Kiburma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Kichecki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Kichina"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Kifaransa"
+ },
+ "el": {
+ "code": "el",
+ "name": "Kigiriki"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Kihausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Kihindi"
+ },
+ "es": {
+ "code": "es",
+ "name": "Kihispania"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Kiholanzi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Kihungari"
+ },
+ "id": {
+ "code": "id",
+ "name": "Kiindonesia"
+ },
+ "it": {
+ "code": "it",
+ "name": "Kiitaliano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Kijapani"
+ },
+ "de": {
+ "code": "de",
+ "name": "Kijerumani"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kikambodia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Kikorea"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Kimalesia"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Kinepali"
+ },
+ "en": {
+ "code": "en",
+ "name": "Kingereza"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Kipolandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Kipunjabi"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Kireno"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Kiromania"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Kirusi"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Kisampur"
+ },
+ "so": {
+ "code": "so",
+ "name": "Kisomali"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Kiswidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Kitailandi"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Kitamil"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Kituruki"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Kiukrania"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Kiurdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Kivietinamu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Kiyoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Kizulu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/sbp.json b/library/intl/resources/language/sbp.json
new file mode 100644
index 000000000..2ad554ffd
--- /dev/null
+++ b/library/intl/resources/language/sbp.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Ishiajemi"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Ishibangila"
+ },
+ "be": {
+ "code": "be",
+ "name": "Ishibelalusi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Ishibulugalia"
+ },
+ "my": {
+ "code": "my",
+ "name": "Ishibuluma"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Ishifalansa"
+ },
+ "el": {
+ "code": "el",
+ "name": "Ishigiliki"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Ishihawusa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Ishihindi"
+ },
+ "id": {
+ "code": "id",
+ "name": "Ishihindonesia"
+ },
+ "es": {
+ "code": "es",
+ "name": "Ishihisipaniya"
+ },
+ "it": {
+ "code": "it",
+ "name": "Ishihitaliyano"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Ishiholansi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Ishihungali"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Ishijapani"
+ },
+ "de": {
+ "code": "de",
+ "name": "Ishijelumani"
+ },
+ "km": {
+ "code": "km",
+ "name": "Ishikambodia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Ishikoleya"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Ishileno"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Ishilomaniya"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Ishilusi"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Ishimalesiya"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Ishinepali"
+ },
+ "en": {
+ "code": "en",
+ "name": "Ishingelesa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Ishipolandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Ishipunjabi"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Ishisangu"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Ishisheki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Ishishina"
+ },
+ "so": {
+ "code": "so",
+ "name": "Ishisomali"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Ishisulu"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Ishiswidi"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Ishitamili"
+ },
+ "th": {
+ "code": "th",
+ "name": "Ishitayilandi"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Ishituluki"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Ishivietinamu"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Ishiwuludi"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Ishiyakani"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Ishiyalabu"
+ },
+ "am": {
+ "code": "am",
+ "name": "Ishiyamuhali"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Ishiyoluba"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ishiyukilaniya"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/se-FI.json b/library/intl/resources/language/se-FI.json
new file mode 100644
index 000000000..365f39185
--- /dev/null
+++ b/library/intl/resources/language/se-FI.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikánsagiella"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albánagiella"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "álkes kiinnágiella"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "amerihkálaš eaŋgalsgiella"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amharic"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arábagiella"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "árbevirolaš kiinnágiella"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenagiella"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiagiella"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "austrálialaš eaŋgalsgiella"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "belgialaš hollánddagiella"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalagiella"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosniagiella"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "brasilialaš portugálagiella"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretonagiella"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "brihttalaš eaŋgalsgiella"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgáriagiella"
+ },
+ "my": {
+ "code": "my",
+ "name": "burmagiella"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Äeahkagiella"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "da": {
+ "code": "da",
+ "name": "dánskkagiella"
+ },
+ "se": {
+ "code": "se",
+ "name": "davvisámegiella"
+ },
+ "de": {
+ "code": "de",
+ "name": "duiskkagiella"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "durkagiella"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkhagiella"
+ },
+ "en": {
+ "code": "en",
+ "name": "eaŋgalsgiella"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "espánjalaš spánskkagiella"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "esttegiella"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "fearagiella"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filippiinnagiella"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "fránskkagiella"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiagiella"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "girjedárogiella"
+ },
+ "el": {
+ "code": "el",
+ "name": "greikkagiella"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujaratagiella"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "haussagiella"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindigiella"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "hollánddagiella"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "iirragiella"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesiagiella"
+ },
+ "is": {
+ "code": "is",
+ "name": "islánddagiella"
+ },
+ "it": {
+ "code": "it",
+ "name": "itáliagiella"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japánagiella"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "km": {
+ "code": "km",
+ "name": "kambožagiella"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "kanádalaš eaŋgalsgiella"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "kanádalaš fránskkagiella"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalánagiella"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazakhgiella"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "kiinnágiella"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "koreagiella"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "kroátiagiella"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "kymragiella"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laogiella"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "látviagiella"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "liettuvagiella"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburggagiella"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedoniagiella"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Malay"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltagiella"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "meksikolaš spánskkagiella"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldávialaš romániagiella"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongoliagiella"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalagiella"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "nuortariikkalaš duiskkagiella"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "oarjifriisagiella"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "ođđadárogiella"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "panjabagiella"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persijagiella"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polskkagiella"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugálagiella"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugálalaš portugálagiella"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "romániagiella"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romanšgiella"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruoššagiella"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "ruoŧagiella"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbiagiella"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovákiagiella"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "slovenagiella"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somali"
+ },
+ "es": {
+ "code": "es",
+ "name": "spánskkagiella"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "standárda arábagiella"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "suomagiella"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "šveicalaš duiskkagiella"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "šveicalaš fránskkagiella"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "thaigiella"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetagiella"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrainagiella"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ungárgiella"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdugiella"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamagiella"
+ },
+ "be": {
+ "code": "be",
+ "name": "vilgesruoššagiella"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/se.json b/library/intl/resources/language/se.json
new file mode 100644
index 000000000..f12ea34fc
--- /dev/null
+++ b/library/intl/resources/language/se.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikánsagiella"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albánagiella"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "álki kiinágiella"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amharic"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arábagiella"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "árbevirolaš kiinnágiella"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armeenagiella"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiagiella"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalgiella"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosniagiella"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretonagiella"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgáriagiella"
+ },
+ "my": {
+ "code": "my",
+ "name": "burmagiella"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Äeahkagiella"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "da": {
+ "code": "da",
+ "name": "dánskkagiella"
+ },
+ "se": {
+ "code": "se",
+ "name": "davvisámegiella"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "de": {
+ "code": "de",
+ "name": "duiskkagiella"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "durkagiella"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkhagiella"
+ },
+ "en": {
+ "code": "en",
+ "name": "eaŋgalsgiella"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "esttegiella"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "fearagiella"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filippiinnagiella"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "fránskkagiella"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiagiella"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "girjedárogiella"
+ },
+ "el": {
+ "code": "el",
+ "name": "greikkagiella"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujaratagiella"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "haussagiella"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindigiella"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "hollánddagiella"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "iirragiella"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesiagiella"
+ },
+ "is": {
+ "code": "is",
+ "name": "islánddagiella"
+ },
+ "it": {
+ "code": "it",
+ "name": "itáliagiella"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japánagiella"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "km": {
+ "code": "km",
+ "name": "kambodiagiella"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalánagiella"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazakgiella"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "kiinnágiella"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "koreagiella"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "kroátiagiella"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "kymragiella"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laogiella"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "látviagiella"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "liettuvagiella"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburggagiella"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedoniagiella"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Malay"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltagiella"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongoliagiella"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepaligiella"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "oarjifriisagiella"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "ođđadárogiella"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "panjabigiella"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persijagiella"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polskkagiella"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugálagiella"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "romániagiella"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romanšgiella"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruoššagiella"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "ruoŧagiella"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbiagiella"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovákiagiella"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "slovenagiella"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somali"
+ },
+ "es": {
+ "code": "es",
+ "name": "spánskkagiella"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "suomagiella"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetagiella"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "th": {
+ "code": "th",
+ "name": "ŧaigiella"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrainagiella"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ungárgiella"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdugiella"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamgiella"
+ },
+ "be": {
+ "code": "be",
+ "name": "vilges-ruoššagiella"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/seh.json b/library/intl/resources/language/seh.json
new file mode 100644
index 000000000..1f6f598ed
--- /dev/null
+++ b/library/intl/resources/language/seh.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "de": {
+ "code": "de",
+ "name": "alemão"
+ },
+ "am": {
+ "code": "am",
+ "name": "amárico"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "árabe"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "be": {
+ "code": "be",
+ "name": "bielo-russo"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmanês"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "búlgaro"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chinês"
+ },
+ "km": {
+ "code": "km",
+ "name": "cmer"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "coreano"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "es": {
+ "code": "es",
+ "name": "espanhol"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francês"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "el": {
+ "code": "el",
+ "name": "grego"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "holandês"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "húngaro"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonésio"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglês"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "iorubá"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "it": {
+ "code": "it",
+ "name": "italiano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonês"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malaio"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalês"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "panjabi"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persa"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polonês"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "português"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "romeno"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "russo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somali"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "sueco"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "tailandês"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tâmil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "tcheco"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turco"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ucraniano"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamita"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ses.json b/library/intl/resources/language/ses.json
new file mode 100644
index 000000000..ba4758f12
--- /dev/null
+++ b/library/intl/resources/language/ses.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan senni"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "de": {
+ "code": "de",
+ "name": "Almaŋ senni"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amhaarik senni"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "be": {
+ "code": "be",
+ "name": "Belaruus senni"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengali senni"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulagaari senni"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burme senni"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Cek senni"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "es": {
+ "code": "es",
+ "name": "Espaaɲe senni"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Farsi senni"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Fransee senni"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "el": {
+ "code": "el",
+ "name": "Grek senni"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hawsance senni"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Holandee senni"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hungaari senni"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indoneesi senni"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Induu senni"
+ },
+ "en": {
+ "code": "en",
+ "name": "Inglisi senni"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "it": {
+ "code": "it",
+ "name": "Itaali senni"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japonee senni"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kmeer senni"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Koree senni"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Laaraw senni"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Maleezi senni"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Neepal senni"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Polonee senni"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portugee senni"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Punjaabi sennii"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Rumaani senni"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Ruusi senni"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Sinuwa senni, Mandareŋ"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somaali senni"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Suweede senni"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "th": {
+ "code": "th",
+ "name": "Taailandu senni"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamil senni"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Turku senni"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukreen senni"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu senni"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vietnaam senni"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yorbance senni"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu senni"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/sg.json b/library/intl/resources/language/sg.json
new file mode 100644
index 000000000..03350d6f4
--- /dev/null
+++ b/library/intl/resources/language/sg.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akâan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amarîki"
+ },
+ "en": {
+ "code": "en",
+ "name": "Anglëe"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arâbo"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengäli"
+ },
+ "be": {
+ "code": "be",
+ "name": "Bielörûsi"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulugäri"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "it": {
+ "code": "it",
+ "name": "Ênnde"
+ },
+ "id": {
+ "code": "id",
+ "name": "Enndonezïi"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "es": {
+ "code": "es",
+ "name": "Espanyöl"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Farânzi"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Farsî"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "el": {
+ "code": "el",
+ "name": "Gerêki"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Haüsä"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hîndi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Holandëe"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hongruäa"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kmêre"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Koreyëen"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Malëe"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "my": {
+ "code": "my",
+ "name": "Miamära, Birimäni"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepalëe"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Penzäbï"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Polonëe"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portugëe, Pûra"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Rumëen"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Rûsi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sängö"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Shinuäa"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somalïi"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Sueduäa"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tämûli"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "Thâi"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Tûrûku"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Tyêki"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukrêni"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Ûrdu"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vietnäm"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "de": {
+ "code": "de",
+ "name": "Zâmani"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Zaponëe"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zûlu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/shi-Latn.json b/library/intl/resources/language/shi-Latn.json
new file mode 100644
index 000000000..c2f2295af
--- /dev/null
+++ b/library/intl/resources/language/shi-Latn.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "be": {
+ "code": "be",
+ "name": "tabilarust"
+ },
+ "my": {
+ "code": "my",
+ "name": "tabirmanit"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "tablɣarit"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "tabnɣalit"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "tabnjabit"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "tabṛṭqizt"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "tabulunit"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "tacinwit"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "taɛrabt"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "tafitnamit"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "tafransist"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "tafursit"
+ },
+ "el": {
+ "code": "el",
+ "name": "tagrigit"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "tahawsat"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "tahindit"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "tahnɣarit"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "tahulandit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "tajabbunit"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "takant"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "takurit"
+ },
+ "de": {
+ "code": "de",
+ "name": "talimant"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "tamalawit"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tamazight"
+ },
+ "am": {
+ "code": "am",
+ "name": "tamharit"
+ },
+ "id": {
+ "code": "id",
+ "name": "tandunisit"
+ },
+ "en": {
+ "code": "en",
+ "name": "tanglizt"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "tanibalit"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "tarumanit"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "tarusit"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "es": {
+ "code": "es",
+ "name": "tasbnyulit"
+ },
+ "so": {
+ "code": "so",
+ "name": "tasumalit"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "taswidit"
+ },
+ "it": {
+ "code": "it",
+ "name": "taá¹­alyant"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tatamilt"
+ },
+ "th": {
+ "code": "th",
+ "name": "tataylandit"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "tatcikit"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "taturkit"
+ },
+ "km": {
+ "code": "km",
+ "name": "taxmirt"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "tayrubat"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "tazulut"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "tukranit"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "turdut"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/shi.json b/library/intl/resources/language/shi.json
new file mode 100644
index 000000000..a20ffce0c
--- /dev/null
+++ b/library/intl/resources/language/shi.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "be": {
+ "code": "be",
+ "name": "ⵜⴰⴱⵉâµâ´°âµ”ⵓⵙⵜ"
+ },
+ "my": {
+ "code": "my",
+ "name": "ⵜⴰⴱⵉⵔⵎⴰâµâµ‰âµœ"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ⵜⴰⴱâµâµ–ⴰⵔⵉⵜ"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "ⵜⴰⴱâµâµŠâ´°â´±âµ‰âµœ"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "ⵜⴰⴱâµâµ–â´°âµâµ‰âµœ"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "ⵜⴰⴱⵓâµâµ“âµâµ‰âµœ"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "ⵜⴰⴱⵕⵟⵇⵉⵣⵜ"
+ },
+ "el": {
+ "code": "el",
+ "name": "ⵜⴰⴳⵔⵉⴳⵉⵜ"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ⵜⴰⴼⵉⵜâµâ´°âµŽâµ‰âµœ"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "ⵜⴰⴼⵓⵔⵙⵉⵜ"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "ⵜⴰⴼⵔⴰâµâµ™âµ‰âµ™âµœ"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "ⵜⴰⴽⴰâµâµœ"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "ⵜⴰⴽⵓⵔⵉⵜ"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "ⵜⴰⵀⴰⵡⵙⴰⵜ"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "ⵜⴰⵀⵉâµâ´·âµ‰âµœ"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ⵜⴰⵀâµâµ–ⴰⵔⵉⵜ"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ⵜⴰⵀⵓâµâ´°âµâ´·âµ‰âµœ"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "ⵜⴰⵄⵔⴰⴱⵜ"
+ },
+ "km": {
+ "code": "km",
+ "name": "ⵜⴰⵅⵎⵉⵔⵜ"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ⵜⴰⵊⴰⴱⴱⵓâµâµ‰âµœ"
+ },
+ "de": {
+ "code": "de",
+ "name": "ⵜⴰâµâµ‰âµŽâ´°âµâµœ"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "ⵜⴰⵎⴰâµâ´°âµ¡âµ‰âµœ"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "ⵜⴰⵎⴰⵣⵉⵖⵜ"
+ },
+ "am": {
+ "code": "am",
+ "name": "ⵜⴰⵎⵀⴰⵔⵉⵜ"
+ },
+ "en": {
+ "code": "en",
+ "name": "ⵜⴰâµâ´³âµâµ‰âµ£âµœ"
+ },
+ "id": {
+ "code": "id",
+ "name": "ⵜⴰâµâ´·âµ“âµâµ‰âµ™âµ‰âµœ"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "ⵜⴰâµâµ‰â´±â´°âµâµ‰âµœ"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "ⵜⴰⵔⵓⵎⴰâµâµ‰âµœ"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ⵜⴰⵔⵓⵙⵉⵜ"
+ },
+ "es": {
+ "code": "es",
+ "name": "ⵜⴰⵙⴱâµâµ¢âµ“âµâµ‰âµœ"
+ },
+ "so": {
+ "code": "so",
+ "name": "ⵜⴰⵙⵓⵎⴰâµâµ‰âµœ"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "ⵜⴰⵙⵡⵉⴷⵉⵜ"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "ⵜⴰⵛⵉâµâµ¡âµ‰âµœ"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "ⵜⴰⵜⴰⵎⵉâµâµœ"
+ },
+ "th": {
+ "code": "th",
+ "name": "ⵜⴰⵜⴰⵢâµâ´°âµâ´·âµ‰âµœ"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "ⵜⴰⵜⵓⵔⴽⵉⵜ"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ⵜⴰⵜⵛⵉⴽⵉⵜ"
+ },
+ "it": {
+ "code": "it",
+ "name": "ⵜⴰⵟⴰâµâµ¢â´°âµâµœ"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ⵜⴰⵢⵔⵓⴱⴰⵜ"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "ⵜⴰⵣⵓâµâµ“ⵜ"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ⵜⵓⴽⵔⴰâµâµ‰âµœ"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ⵜⵓⵔⴷⵓⵜ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/si.json b/library/intl/resources/language/si.json
new file mode 100644
index 000000000..c0967dadd
--- /dev/null
+++ b/library/intl/resources/language/si.json
@@ -0,0 +1,738 @@
+{
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "අකà·à¶±à·Š"
+ },
+ "af": {
+ "code": "af",
+ "name": "අප්â€à¶»à·’කà·à¶±à·”"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "අයර්ලන්ත"
+ },
+ "is": {
+ "code": "is",
+ "name": "අයිස්ලන්ත"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "අරà·à¶¶à·’"
+ },
+ "az": {
+ "code": "az",
+ "name": "අසර්බයිජà·à¶±à·Š"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "අසු"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "ආර්මේනියà·à¶±à·”"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "ඇගම්"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "ඇමෙරිකà·à¶±à·” ඉංග්â€à¶»à·“සි"
+ },
+ "am": {
+ "code": "am",
+ "name": "ඇම්හà·à¶»à·’ක්"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "ඇල්බේනියà·à¶±à·”"
+ },
+ "en": {
+ "code": "en",
+ "name": "ඉංග්â€à¶»à·“සි"
+ },
+ "it": {
+ "code": "it",
+ "name": "ඉතà·à¶½à·’"
+ },
+ "id": {
+ "code": "id",
+ "name": "ඉන්දුනීසියà·à¶±à·”"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ඉව්"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "ඉහළ à·ƒà·à¶¶à·’යà·à¶±à·”"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "උතුරු එන්ඩිබෙලෙ"
+ },
+ "se": {
+ "code": "se",
+ "name": "උතුරු à·ƒà·à¶¸à·’"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "උයිගර්"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "උර්දු"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "උස්බෙක්"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "එම්බු"
+ },
+ "et": {
+ "code": "et",
+ "name": "එස්තà·à¶±à·’යà·à¶±à·”"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "එස්පà·à¶»à¶±à·Šà¶§à·"
+ },
+ "or": {
+ "code": "or",
+ "name": "ඔරියà·"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "ඔස්ට්â€à¶»à·’යà·à¶±à·” ජර්මන්"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "ඕස්ට්â€à¶»à·šà¶½à·’යà·à¶±à·” ඉංග්â€à¶»à·“සි"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "කණ්ණඩ"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "කබුවෙර්ඩියà·à¶±à·"
+ },
+ "km": {
+ "code": "km",
+ "name": "කමර්"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "කලà·à¶½à·’සට්"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "කලෙන්ජන්"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "කසà·à¶›à·Š"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "කà·à·‚්මීර්"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "කà·à¶§à¶½à¶±à·Š"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "කà·à¶±à·šà¶©à·’යà·à¶±à·” ඉංග්â€à¶»à·“සි"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "කà·à¶±à·šà¶©à·’යà·à¶±à·” ප්â€à¶»à¶‚à·"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "කà·à¶¶à¶½à·"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "කà·à¶¸à·Šà¶¶à·"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "කිකුයු"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "කිර්ගිස්"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "කුවà·à·ƒà·’ඔ"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "කොන්ග෠ස්වà·à·„ිලි"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "කොයිර෠චිනි"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "කොරියà·à¶±à·”"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "කà·à¶ºà·’රà·à¶¶à·œà¶»à·œ සෙන්නි"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "ක්â€à¶»à·à¶ºà·šà·à·’යà·à¶±à·”"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ගන්ඩà·"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "ගà·à¶½à·“සියà·à¶±à·”"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "ගුජරà·à¶§à·’"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "ගුසී"
+ },
+ "el": {
+ "code": "el",
+ "name": "ග්â€à¶»à·“ක"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "චිගà·"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "චීන"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "චෙත්"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "චෙරොකී"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "ජන්ජà·à¶¶à·’"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ජපන්"
+ },
+ "de": {
+ "code": "de",
+ "name": "ජර්මන්"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "ජොල-à·†à·à¶±à·’යි"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "ජà·à¶»à·Šà¶¢à·’යà·à¶±à·”"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "ටචේල්හිට්"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "ටයිටà·"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "ටසවà·à¶šà·Š"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "ටිග්â€à¶»à·’න්යà·"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "ටිබෙට්"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "ටෙසà·"
+ },
+ "to": {
+ "code": "to",
+ "name": "ටොංගà·"
+ },
+ "da": {
+ "code": "da",
+ "name": "ඩà·à¶±à·’à·à·Š"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "ඩිසොන්කà·"
+ },
+ "th": {
+ "code": "th",
+ "name": "තà·à¶ºà·’"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "තුර්කි"
+ },
+ "te": {
+ "code": "te",
+ "name": "තෙළිඟු"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "දෙමළ"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "නයන්කොළේ"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "නවීන සම්මත අරà·à¶¶à·’"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "නà·à¶¸à·"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "නේපà·à¶½"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "නොම්බà·"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "නොයර්"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "නොවේර්ජියà·à¶±à·” නයිනà·à¶»à·Šà·ƒà·Šà¶šà·Š"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "නà·à·€à·šà¶¢à·’යà·à¶±à·” බොක්මà·à¶½à·Š"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "පර්සියà·à¶±à·”"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "පෂ්ටො"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "පහළ à·ƒà·à¶¶à·’යà·à¶±à·”"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "පිලිපීන"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "පෘතුගීසි"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "පà·à¶½à¶±à·Šà¶­"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "ප්â€à¶»à¶‚à·"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "බටහිර ෆ්â€à¶»à·’සියà·à¶±à·”"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "බම්බරà·"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "බල්ගේරියà·à¶±à·”"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "බà·à·†à·’යà·"
+ },
+ "my": {
+ "code": "my",
+ "name": "බුරුම"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "බෙංගà·à¶½à·’"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "බෙනà·"
+ },
+ "be": {
+ "code": "be",
+ "name": "බෙලරුසියà·à¶±à·”"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "බොඩො"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "බොස්කà·"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "බොස්නියà·à¶±à·”"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "බ්â€à¶»à·ƒà·“ල පෘතුගීසි"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "බ්â€à¶»à·’තà·à¶±à·Šâ€à¶º ඉංග්â€à¶»à·“සි"
+ },
+ "br": {
+ "code": "br",
+ "name": "බ්â€à¶»à·šà¶§à·œà¶±à·Š"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "මඛුවà·-මීටà·"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "මධ්â€à¶ºà¶¸ ඇට්ලස් ටමසිට්"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "මරà·à¶­à·’"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "මලගà·à·ƒà·’"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "මලයà·à¶½à¶¸à·Š"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "මසà·à¶ºà·’"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "මà·à¶šà·à¶¸à·“"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "මà·à¶šà·œà¶±à·Šà¶©à·Š"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "මà·à¶½à·š"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "මà·à·ƒà·’ඩà·à¶±à·’යà·à¶±à·”"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "මුන්ඩන්"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "මෙක්සිකà·à¶±à·” ස්පà·à¶¤à·Šà¶¤"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "මෙරු"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "මොංගà·à¶½à·’යà·à¶±à·”"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "මොරිස්යෙම්"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "මොල්ටිස්"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "යුක්රේනියà·à¶±à·”"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "යුරà·à¶´à·“ය පෘතුගීසි"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "යුරà·à¶´à·“ය ස්පà·à¶¤à·Šà¶¤"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "යොරූබà·"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "රුන්ඩි"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "රුසියà·à¶±à·”"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "රොමෑන්à·à·Š"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "රොමේනියà·à¶±à·”"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "රà·à¶¸à·Šà¶¶à·"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "ර්වà·"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "ලංගි"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "ලක්සà·à¶¸à·Šà¶¶à¶»à·Šà¶œà·Š"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ලන්දේසි"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "ලà·à¶•"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "ලà·à¶§à·Šà·€à·’යà·à¶±à·”"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "ලිතුවේනියà·à¶±à·”"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "ලින්ගලà·"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "ලු"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "ලුඔ"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "ලුයියà·"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "වයි"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "වියට්නà·à¶¸à·Š"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "වුන්ජà·"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "වේල්ස්"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "à·à·à¶¸à·Šà¶¶à¶½à·"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "à·à·à¶±à·"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "සංගු"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "සන්ග්â€à¶»à·"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "සම්බුරු"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "සම්මත මොරොක්ක෠ටමසිග්ත්"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "සර්බියà·à¶±à·”"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "à·ƒà·à¶¸à·Šà¶´à·Šâ€à¶»à¶¯à·à¶ºà·’ක චීන"
+ },
+ "si": {
+ "code": "si",
+ "name": "සිංහල"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "සුලු"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "සුළුකළ චීන"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "සෙනà·"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "සොගà·"
+ },
+ "so": {
+ "code": "so",
+ "name": "à·ƒà·à¶¸à·à¶½à·’"
+ },
+ "es": {
+ "code": "es",
+ "name": "ස්පà·à¶¤à·Šà¶¤"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "ස්ලà·à·€à·à¶šà·Š"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "ස්ලà·à·€à·šà¶±à·’යà·à¶±à·”"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "ස්වà·à·„ිලි"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "ස්විස් උසස් ජර්මන්"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "ස්විස් ජර්මනි"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "ස්විස් ප්â€à¶»à¶‚à·"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "ස්වීඩන්"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "හන්ගේරියà·à¶±à·”"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "හින්දි"
+ },
+ "he": {
+ "code": "he",
+ "name": "හීබෲ"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "à·„à·à·ƒà·"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "ෆර්මà·"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "à·†à·à¶»à·à·ƒà·Š"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "ෆින්ලන්ත"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "ෆ්ලෙමිà·à·Š"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/sk.json b/library/intl/resources/language/sk.json
new file mode 100644
index 000000000..a984c3e31
--- /dev/null
+++ b/library/intl/resources/language/sk.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikánÄina"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akanÄina"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albánÄina"
+ },
+ "am": {
+ "code": "am",
+ "name": "amharÄina"
+ },
+ "en": {
+ "code": "en",
+ "name": "angliÄtina"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "angliÄtina (americká)"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "angliÄtina (austrálska)"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "angliÄtina (britská)"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "angliÄtina (kanadská)"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabÄina"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "arabÄina (moderná Å¡tandardná)"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "arménÄina"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "astúrÄina"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbajdžanÄina"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambarÄina"
+ },
+ "my": {
+ "code": "my",
+ "name": "barmÄina"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "baskiÄtina"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengálÄina"
+ },
+ "be": {
+ "code": "be",
+ "name": "bieloruština"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosniaÄtina"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretónÄina"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulharÄina"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Äerokí"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ÄeÅ¡tina"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "ÄínÅ¡tina"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "ÄínÅ¡tina (tradiÄná)"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "ÄínÅ¡tina (zjednoduÅ¡ená)"
+ },
+ "da": {
+ "code": "da",
+ "name": "dánÄina"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "dolnolužická srbÄina"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzongkä"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estónÄina"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "faerÄina"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipínÄina"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "fínÄina"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flámÄina"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francúzština"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "francúzština (kanadská)"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "francúzÅ¡tina (Å¡vajÄiarska)"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulÄina"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fulbÄina"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galícijÄina"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "gandÄina"
+ },
+ "el": {
+ "code": "el",
+ "name": "gréÄtina"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "grónÄina"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "gruzínÄina"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gudžarátÄina"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hauština"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebrejÄina"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindÄina"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "holandÄina"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "hornolužická srbÄina"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "chorvátÄina"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonézština"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "írÄina"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandÄina"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "jangben"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonÄina"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "jorubÄina"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabylÄina"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalendžin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannadÄina"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "kapverdÄina"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kaÅ¡mírÄina"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalánÄina"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazaština"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmérÄina"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "kiga"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikujÄina"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgizština"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "kirundÄina"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kolínÄina"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "kórejÄina"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laoština"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingalÄina"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "litovÄina"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "lotyština"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luhja"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburÄina"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "macedónÄina"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "maÄarÄina"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makua-meetto"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malajálamÄina"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malajÄina"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgaština"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltÄina"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maráthÄina"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masajÄina"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "mašame"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "maurícijská kreolÄina"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavÄina"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongolÄina"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "ňankole"
+ },
+ "de": {
+ "code": "de",
+ "name": "nemÄina"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "nemÄina (rakúska)"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "nemÄina (Å¡vajÄiarska spisovná)"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "nemÄina (Å¡vajÄiarska)"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepálÄina"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "nórsky bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nórsky nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "pandžábÄina"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "paÅ¡tÄina"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "perzština"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "poľština"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugalÄina"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugalÄina (brazílska)"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugalÄina (európska)"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "rétorománÄina"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumunÄina"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruština"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "severné ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "severné sami"
+ },
+ "si": {
+ "code": "si",
+ "name": "sinhalÄina"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovenÄina"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "slovinÄina"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somálÄina"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "srbÄina"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "svahilÄina"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "svahilÄina (konžská)"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Å¡ambala"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Å¡kótska gaelÄina"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Å¡onÄina"
+ },
+ "es": {
+ "code": "es",
+ "name": "Å¡panielÄina"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Å¡panielÄina (európska)"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Å¡panielÄina (mexická)"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Å¡védÄina"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "it": {
+ "code": "it",
+ "name": "talianÄina"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamašek (stredomarocký)"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamašek (štandardný marocký)"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamilÄina"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugÄina"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "thajÄina"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetÄina"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigriňa"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongÄina"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "tureÄtina"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ujgurÄina"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrajinÄina"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdÄina"
+ },
+ "or": {
+ "code": "or",
+ "name": "uríjÄina"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeÄtina"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamÄina"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "waleština"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walserÄina"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "západná frízština"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "západná songhajÄina"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zuluština"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/sl.json b/library/intl/resources/language/sl.json
new file mode 100644
index 000000000..b76fd92a0
--- /dev/null
+++ b/library/intl/resources/language/sl.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikanÅ¡Äina"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghemÅ¡Äina"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akanÅ¡Äina"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanÅ¡Äina"
+ },
+ "am": {
+ "code": "am",
+ "name": "amharÅ¡Äina"
+ },
+ "en": {
+ "code": "en",
+ "name": "angleÅ¡Äina"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "angleÅ¡Äina (VB)"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "angleÅ¡Äina (ZDA)"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabÅ¡Äina"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenÅ¡Äina"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturijÅ¡Äina"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asujÅ¡Äina"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "avstralska angleÅ¡Äina"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "avstrijska nemÅ¡Äina"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbajdžanÅ¡Äina"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambarÅ¡Äina"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "baskovÅ¡Äina"
+ },
+ "be": {
+ "code": "be",
+ "name": "beloruÅ¡Äina"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "benajÅ¡Äina"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalÅ¡Äina"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodojÅ¡Äina"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bolgarÅ¡Äina"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosanÅ¡Äina"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "brazilska portugalÅ¡Äina"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretonÅ¡Äina"
+ },
+ "my": {
+ "code": "my",
+ "name": "burmanÅ¡Äina"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "ÄerokeÅ¡Äina"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ÄeÅ¡Äina"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "ÄigajÅ¡Äina"
+ },
+ "da": {
+ "code": "da",
+ "name": "danÅ¡Äina"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "dolnja lužiÅ¡ka srbÅ¡Äina"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "dzonka"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embujÅ¡Äina"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonÅ¡Äina"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "evenÅ¡Äina"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "evondovÅ¡Äina"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "ferÅ¡Äina"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipinÅ¡Äina"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finÅ¡Äina"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamÅ¡Äina"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francoÅ¡Äina"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frizijÅ¡Äina"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fulÅ¡Äina"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "furlanÅ¡Äina"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galicijÅ¡Äina"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "gornja lužiÅ¡ka srbÅ¡Äina"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "grenlandÅ¡Äina"
+ },
+ "el": {
+ "code": "el",
+ "name": "grÅ¡Äina"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "gruzinÅ¡Äina"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gudžaratÅ¡Äina"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusijÅ¡Äina"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "havÅ¡Äina"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebrejÅ¡Äina"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindujÅ¡Äina"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "hrvaÅ¡Äina"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "iberska portugalÅ¡Äina"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "iberska Å¡panÅ¡Äina"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonezijÅ¡Äina"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irÅ¡Äina"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandÅ¡Äina"
+ },
+ "it": {
+ "code": "it",
+ "name": "italijanÅ¡Äina"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonÅ¡Äina"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonjiÅ¡Äina"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "jorubÅ¡Äina"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabilÅ¡Äina"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjinÅ¡Äina"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kambaÅ¡Äina"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kanada"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "kanadska angleÅ¡Äina"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "kanadska francoÅ¡Äina"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kaÅ¡mirÅ¡Äina"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalonÅ¡Äina"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazaÅ¡Äina"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "khoekhoe"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikujÅ¡Äina"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgiÅ¡Äina"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "kitajÅ¡Äina"
+ },
+ "km": {
+ "code": "km",
+ "name": "kmerÅ¡Äina"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "knjižna norveÅ¡Äina"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "korejÅ¡Äina"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "koyra chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koyraboro senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langijÅ¡Äina"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laoÅ¡Äina"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "latvijÅ¡Äina"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "litovÅ¡Äina"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luhijÅ¡Äina"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luksemburÅ¡Äina"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "maÄamejÅ¡Äina"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "madžarÅ¡Äina"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedonÅ¡Äina"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makondÅ¡Äina"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makuva-meto"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malagaÅ¡Äina"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malajalamÅ¡Äina"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malajÅ¡Äina"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "malteÅ¡Äina"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratÅ¡Äina"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masajÅ¡Äina"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavÅ¡Äina"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongolÅ¡Äina"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "morisjenÅ¡Äina"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "de": {
+ "code": "de",
+ "name": "nemÅ¡Äina"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "nemÅ¡Äina (Å vica)"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalÅ¡Äina"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "nizozemÅ¡Äina"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "njankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "novonorveÅ¡Äina"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuerÅ¡Äina"
+ },
+ "or": {
+ "code": "or",
+ "name": "orijÅ¡Äina"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "pandžabÅ¡Äina"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "paÅ¡tunÅ¡Äina"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "perzijÅ¡Äina"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "poenostavljena kitajÅ¡Äina"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "poljÅ¡Äina"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugalÅ¡Äina"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "retoromanÅ¡Äina"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "romunÅ¡Äina"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundÅ¡Äina"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruÅ¡Äina"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburÅ¡Äina"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangujÅ¡Äina"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "severna ndebelÅ¡Äina"
+ },
+ "se": {
+ "code": "se",
+ "name": "severna samijÅ¡Äina"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambala"
+ },
+ "si": {
+ "code": "si",
+ "name": "singalÅ¡Äina"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovaÅ¡Äina"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "slovenÅ¡Äina"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "sodobna standardna arabÅ¡Äina"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "sogÅ¡Äina"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalÅ¡Äina"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "srbÅ¡Äina"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "standardni maroški tamazig"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "svahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "svahili (Kongo)"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Å¡kotska gelÅ¡Äina"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Å¡onÅ¡Äina"
+ },
+ "es": {
+ "code": "es",
+ "name": "Å¡panÅ¡Äina"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Å¡vedÅ¡Äina"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Å¡vicarska francoÅ¡Äina"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tahelitska berberÅ¡Äina"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taitajÅ¡Äina"
+ },
+ "th": {
+ "code": "th",
+ "name": "tajÅ¡Äina"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamašek (srednji atlas)"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamilÅ¡Äina"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugijÅ¡Äina"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetanÅ¡Äina"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrajÅ¡Äina"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongÅ¡Äina"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "tradicionalna kitajÅ¡Äina"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turÅ¡Äina"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ujgurÅ¡Äina"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrajinÅ¡Äina"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdujÅ¡Äina"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeÅ¡Äina"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "vajÅ¡Äina"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "valižanÅ¡Äina"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamÅ¡Äina"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "visoka nemÅ¡Äina (Å vica)"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarmajÅ¡Äina"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "zelenortskootoÅ¡ka kreolÅ¡Äina"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulujÅ¡Äina"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/sn.json b/library/intl/resources/language/sn.json
new file mode 100644
index 000000000..253341e8b
--- /dev/null
+++ b/library/intl/resources/language/sn.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "chiAkani"
+ },
+ "am": {
+ "code": "am",
+ "name": "chiAmaric"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "chiArabu"
+ },
+ "be": {
+ "code": "be",
+ "name": "chiBelarusi"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "chiBengali"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "chiBulgarian"
+ },
+ "my": {
+ "code": "my",
+ "name": "chiBurma"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "chiChinese"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "chiCzech"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "chiDutch"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "chiFurenchi"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "el": {
+ "code": "el",
+ "name": "chiGreek"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "chiHausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "chiHindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "chiHungari"
+ },
+ "id": {
+ "code": "id",
+ "name": "chiIndonesia"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "chiJapani"
+ },
+ "de": {
+ "code": "de",
+ "name": "chiJerimani"
+ },
+ "km": {
+ "code": "km",
+ "name": "chiKhema"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "chiKoria"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "chiMalay"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "chiNepali"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "chiPeshiya"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "chiPolish"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "chiPunjabi"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "chiPutukezi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "chiRashiya"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "chiRomanian"
+ },
+ "en": {
+ "code": "en",
+ "name": "Chirungu"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "chiShona"
+ },
+ "so": {
+ "code": "so",
+ "name": "chiSomali"
+ },
+ "es": {
+ "code": "es",
+ "name": "chiSpanish"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "chiSwedish"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "chiTamil"
+ },
+ "it": {
+ "code": "it",
+ "name": "chiTariana"
+ },
+ "th": {
+ "code": "th",
+ "name": "chiThai"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "chiTurkish"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "chiUkrenia"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "chiUrdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "chiVietnam"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "chiYoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "chiZulu"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/so.json b/library/intl/resources/language/so.json
new file mode 100644
index 000000000..a62759c15
--- /dev/null
+++ b/library/intl/resources/language/so.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaanays"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albaaniyaan"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armeeniyaan"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "am": {
+ "code": "am",
+ "name": "Axmaari"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Ayrish"
+ },
+ "is": {
+ "code": "is",
+ "name": "Ayslandays"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijan"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bangaali"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Bashtuu"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basquu"
+ },
+ "be": {
+ "code": "be",
+ "name": "Beleruusiyaan"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "br": {
+ "code": "br",
+ "name": "Bereton"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Boolish"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Boortaqiis"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Boortaqiis (Boortuqaal)"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Boortaqiiska Baraasiil"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Boosniya"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgeeriyaan"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Bunjaabi"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burmese"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Carabi"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "he": {
+ "code": "he",
+ "name": "Cibri"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danmarkays"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Faarisi"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Faransiis"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Faransiis (Iswiiserlaand)"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Farowsi"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Fiinlaandees"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Fiitnaamays"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Firiisiyan Galbeed"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galiisiyaan"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "el": {
+ "code": "el",
+ "name": "Giriik"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujaraati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hangariyaan"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hawsa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Holandays"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indunuusiyaan"
+ },
+ "en": {
+ "code": "en",
+ "name": "Ingiriisi"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Ingiriisi (Boqortooyada Midowday)"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "Ingiriisi (Maraykan)"
+ },
+ "es": {
+ "code": "es",
+ "name": "Isbaanish"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Isbaanish (Isbayn)"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Isberento"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Iskot Giilik"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Islofeeniyaan"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Isloofaak"
+ },
+ "et": {
+ "code": "et",
+ "name": "Istooniyaan"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Jabbaaniis"
+ },
+ "de": {
+ "code": "de",
+ "name": "Jarmal"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Jarmal (Iswiiserlaand)"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Jayniis"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Jeeg"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Joorijiyaan"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kamboodhian"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannadays"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Katalaan"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kirgiis"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Koro’eeshiyaan"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Kuuriyaan"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Laatfiyaan"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Laothian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lituwaanays"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Maarati"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Malaay"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltiis"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mangooli"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Masadooniyaan"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nebaali"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Nowrwejiyan (naynoroski)"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Romanka"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Ruush"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Sawaaxili"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Seerbiyaan"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhaleys"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Soomaali"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Swiidhis"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "th": {
+ "code": "th",
+ "name": "Taaylandays"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Tagalog"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "it": {
+ "code": "it",
+ "name": "Talyaani"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamiil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Teluugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Turkish"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "UIGHUR"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urduu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Usbakis"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruuba"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Yukreeniyaan"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zuulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/sq.json b/library/intl/resources/language/sq.json
new file mode 100644
index 000000000..802db1180
--- /dev/null
+++ b/library/intl/resources/language/sq.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikanisht"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "agemisht"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akanisht"
+ },
+ "am": {
+ "code": "am",
+ "name": "amarike"
+ },
+ "en": {
+ "code": "en",
+ "name": "anglisht"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "anglishte amerikane"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "anglishte australiane"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "anglishte britanike"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "anglishte kanadeze"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabisht"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "arabishte standarde moderne"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armenisht"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asuisht"
+ },
+ "az": {
+ "code": "az",
+ "name": "azere"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafianisht"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "baskisht"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalisht"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmanisht"
+ },
+ "be": {
+ "code": "be",
+ "name": "bjellorusisht"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmalishte norvegjeze"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "boshnjakisht"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretone"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bullgarisht"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "çekisht"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "çeroki"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "çigisht"
+ },
+ "da": {
+ "code": "da",
+ "name": "danisht"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embuisht"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonisht"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "faroisht"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipinase"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finlandisht"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamande"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "frëngjisht"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "frëngjishte kanadeze"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "frëngjishte zvicerane"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "frizianisht"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galike"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Galisht"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "gandisht"
+ },
+ "el": {
+ "code": "el",
+ "name": "greqisht"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusisht"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "guxharatisht"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "gjeorgjisht"
+ },
+ "de": {
+ "code": "de",
+ "name": "gjermanisht"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "gjermanishte austriake"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "gjermanishte zvicerane"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "gjermanishte zvicerane (dialekti i Alpeve)"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausisht"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebraisht"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "holandisht"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "hungarisht"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "indishte"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonezisht"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandezçe"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandisht"
+ },
+ "it": {
+ "code": "it",
+ "name": "italisht"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japonisht"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "jorubisht"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "juisht"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabilisht"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "kabuverdianisht"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "kalalisute"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjinisht"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kambishte"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kanade"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kashmire"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalonisht"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazakisht"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikujuisht"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "kinezisht"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "kinezishte e thjeshtuar"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "kinezishte tradicionale"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgizisht"
+ },
+ "km": {
+ "code": "km",
+ "name": "kmere"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "kojraçinisht"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "koreanisht"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "kroatisht"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kuasisht"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langisht"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laosisht"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letonisht"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingalisht"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lituanisht"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Lubakatange"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "lujaisht"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luksemburgase"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "luoisht"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "maçamisht"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makondisht"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makuamito"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malageze"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malajalame"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malajisht"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltisht"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "maqedonisht"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratisht"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masaisht"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meruisht"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavishte"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongolisht"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundagishte"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "namaishte"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ndebelishte veriore"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalisht"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngombisht"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "niankolisht"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "ninorske norvegjeze"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "norisjene"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuerisht"
+ },
+ "or": {
+ "code": "or",
+ "name": "orije"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "panxhabe"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persisht"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polonisht"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugalisht"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "portugalishte braziliane"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "portugalishte evropiane"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "romboishte"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "rome"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "ruaisht"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumanisht"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundisht"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "rusisht"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburisht"
+ },
+ "se": {
+ "code": "se",
+ "name": "samishte veriore"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sangoisht"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sanguisht"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "senaishte"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "senishte kojrabore"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbisht"
+ },
+ "si": {
+ "code": "si",
+ "name": "sinhale"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "sllovakisht"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "sllovenisht"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "sogisht"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalisht"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "sorbiane e sipërme"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "sorbishte e poshtme"
+ },
+ "es": {
+ "code": "es",
+ "name": "spanjisht"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "spanjishte evropiane"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "spanjishte meksikane"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "suahilisht"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "suahilishte kongoje"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "suedisht"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambalisht"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shonisht"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "shqip"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "taçelit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taitisht"
+ },
+ "th": {
+ "code": "th",
+ "name": "tajlandisht"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "tamaziatishte atlase qendrore"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "tamazishte standarde marokene"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamile"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasaukisht"
+ },
+ "te": {
+ "code": "te",
+ "name": "teluge"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "tezoisht"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetisht"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinje"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonganisht"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turqisht"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "uellsisht"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ujgure"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrainisht"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeke"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "vaisht"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamisht"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjisht"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "xongka"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "xhula-fonji"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarmisht"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/sr-Latn.json b/library/intl/resources/language/sr-Latn.json
new file mode 100644
index 000000000..6f9dfb15a
--- /dev/null
+++ b/library/intl/resources/language/sr-Latn.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "agem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanski"
+ },
+ "am": {
+ "code": "am",
+ "name": "amharski"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arapski"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturijski"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbejdžanski"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafija"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "baskijski"
+ },
+ "be": {
+ "code": "be",
+ "name": "beloruski"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalski"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosanski"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Brazilski portugalski"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretonski"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bugarski"
+ },
+ "my": {
+ "code": "my",
+ "name": "burmanski"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "centralnoatlaski tamazigt"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Äeroki"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ÄeÅ¡ki"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Äiga"
+ },
+ "da": {
+ "code": "da",
+ "name": "danski"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "donji lužiÄkosrpski"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "džola fonji"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "džonga"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "en": {
+ "code": "en",
+ "name": "engleski"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estonski"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "eve"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Evondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "farski"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipinski"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finski"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamanski"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "francuski"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulijski"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galicijski"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ganda"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "gornji lužiÄkosrpski"
+ },
+ "el": {
+ "code": "el",
+ "name": "grÄki"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "gruzijski"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gudžarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusi"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebrejski"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "holandski"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "hrvatski"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Iberijski portugalski"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonežanski"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irski"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandski"
+ },
+ "it": {
+ "code": "it",
+ "name": "italijanski"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japanski"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "jermenski"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "joruba"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabile"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "kalalisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalendžin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kanada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kašmirski"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalonski"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazaški"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuju"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "kineski"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgiski"
+ },
+ "km": {
+ "code": "km",
+ "name": "kmerski"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "kojra Äiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "kojraboro seni"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "kongo svahili"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "korejski"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kvasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laoški"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "letonski"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "litvanski"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "lujia"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luksemburški"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "maÄame"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "mađarski"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedonski"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makuva-meeto"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malajalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malajski"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malgaški"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "malteški"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marati"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "moderan standardni arapski"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldavski"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongolski"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "morisjen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "de": {
+ "code": "de",
+ "name": "nemaÄki"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalski"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norveški bokmal"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norveški ninorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "njankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "orija"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "pandžabi"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "paštunski"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persijski"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "poljski"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugalski"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "reto-romanski"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rua"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumunski"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruski"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "severni ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "severni sami"
+ },
+ "si": {
+ "code": "si",
+ "name": "sinhalski"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovaÄki"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "slovenaÄki"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalski"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "srpski"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "standardni marokanski tamazigt"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "svahili"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Å¡ambala"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Å kotski Galski"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Å¡ona"
+ },
+ "es": {
+ "code": "es",
+ "name": "Å¡panski"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Å vajcarski nemaÄki"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Å¡vajcarski visoki nemaÄki"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Å¡vedski"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "th": {
+ "code": "th",
+ "name": "tajlandski"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamilski"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasavak"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tašelhit"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetanski"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinja"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonga"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turski"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ujgurski"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrajinski"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbeÄki"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "velški"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vijetnamski"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vundžo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "zapadni frizijski"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "zelenortski kreolski"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/sr.json b/library/intl/resources/language/sr.json
new file mode 100644
index 000000000..37771d26d
--- /dev/null
+++ b/library/intl/resources/language/sr.json
@@ -0,0 +1,738 @@
+{
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "агем"
+ },
+ "az": {
+ "code": "az",
+ "name": "азербејџанÑки"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "акан"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "албанÑки"
+ },
+ "am": {
+ "code": "am",
+ "name": "амхарÑки"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "арапÑки"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "ÐÑтуријÑки"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "аÑу"
+ },
+ "af": {
+ "code": "af",
+ "name": "африканÑ"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "бамбара"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "БаÑа"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "баÑкијÑки"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "бафија"
+ },
+ "be": {
+ "code": "be",
+ "name": "белоруÑки"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "бена"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "бенгалÑки"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "бодо"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "боÑанÑки"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "БразилÑки португалÑки"
+ },
+ "br": {
+ "code": "br",
+ "name": "бретонÑки"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "бугарÑки"
+ },
+ "my": {
+ "code": "my",
+ "name": "бурманÑки"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "ваи"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "велшки"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "вијетнамÑки"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "вунџо"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "галицијÑки"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ганда"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "горњи лужичкоÑрпÑки"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "грузијÑки"
+ },
+ "el": {
+ "code": "el",
+ "name": "грчки"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "гуÑи"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "гуџарати"
+ },
+ "da": {
+ "code": "da",
+ "name": "данÑки"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "доњи лужичкоÑрпÑки"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "еве"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Евондо"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "ембу"
+ },
+ "en": {
+ "code": "en",
+ "name": "енглеÑки"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "еÑперанто"
+ },
+ "et": {
+ "code": "et",
+ "name": "еÑтонÑки"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "западни фризијÑки"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "зарма"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "зеленортÑки креолÑки"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "зулу"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "ИберијÑки португалÑки"
+ },
+ "id": {
+ "code": "id",
+ "name": "индонежанÑки"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "ирÑки"
+ },
+ "is": {
+ "code": "is",
+ "name": "иÑландÑки"
+ },
+ "it": {
+ "code": "it",
+ "name": "италијанÑки"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "јапанÑки"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "јерменÑки"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "јоруба"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "кабиле"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "казашки"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "калалиÑут"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "каленџин"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "камба"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "канада"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "каталонÑки"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "кашмирÑки"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "кваÑио"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "кикују"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "кинеÑки"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "киргиÑки"
+ },
+ "km": {
+ "code": "km",
+ "name": "кмерÑки"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "којра чиини"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "којраборо Ñени"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "конго Ñвахили"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "корејÑки"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "ланги"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "лаошки"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "летонÑки"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "лингала"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "литванÑки"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "луба-катанга"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "лујиа"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "лукÑембуршки"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "луо"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "мађарÑки"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "македонÑки"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "маконде"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "макува-меето"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "малајалам"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "малајÑки"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "малгашки"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "малтешки"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "марати"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "маÑаи"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "мачаме"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "меру"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "модеран Ñтандардни арапÑки"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "молдавÑки"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "монголÑки"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "мориÑјен"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "мунданг"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "нама"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "нгомба"
+ },
+ "de": {
+ "code": "de",
+ "name": "немачки"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "непалÑки"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "нјанколе"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "норвешки бокмал"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "норвешки нинорÑк"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "нуер"
+ },
+ "or": {
+ "code": "or",
+ "name": "орија"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "панџаби"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "паштунÑки"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "перÑијÑки"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "пољÑки"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "португалÑки"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "рето-романÑки"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "ромбо"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "руа"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "румунÑки"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "рунди"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "руÑки"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Ñамбуру"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Ñанго"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Ñангу"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Ñвахили"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Ñеверни ндебеле"
+ },
+ "se": {
+ "code": "se",
+ "name": "Ñеверни Ñами"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Ñена"
+ },
+ "si": {
+ "code": "si",
+ "name": "ÑинхалÑки"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Ñловачки"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Ñловеначки"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Ñога"
+ },
+ "so": {
+ "code": "so",
+ "name": "ÑомалÑки"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "ÑрпÑки"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Ñтандардни мароканÑки тамазигт"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "таита"
+ },
+ "th": {
+ "code": "th",
+ "name": "тајландÑки"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "тамилÑки"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "таÑавак"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "ташелхит"
+ },
+ "te": {
+ "code": "te",
+ "name": "телугу"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "теÑо"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "тибетанÑки"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "тигриња"
+ },
+ "to": {
+ "code": "to",
+ "name": "тонга"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "турÑки"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "узбечки"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ујгурÑки"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "украјинÑки"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "урду"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "фарÑки"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "филипинÑки"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "финÑки"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "фламанÑки"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "француÑки"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "ФриулијÑки"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Фулах"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "хауÑа"
+ },
+ "he": {
+ "code": "he",
+ "name": "хебрејÑки"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "хинди"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "холандÑки"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "хрватÑки"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "централноатлаÑки тамазигт"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "чероки"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "чешки"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "чига"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "џола фоњи"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "џонга"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "шамбала"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "швајцарÑки виÑоки немачки"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "ШвајцарÑки немачки"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "шведÑки"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "ШкотÑки ГалÑки"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "шона"
+ },
+ "es": {
+ "code": "es",
+ "name": "шпанÑки"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/sv-FI.json b/library/intl/resources/language/sv-FI.json
new file mode 100644
index 000000000..c5f4fe34f
--- /dev/null
+++ b/library/intl/resources/language/sv-FI.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanska"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "amerikansk engelska"
+ },
+ "am": {
+ "code": "am",
+ "name": "amhariska"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabiska"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armeniska"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiska"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "australisk engelska"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbajdzjanska"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "baskiska"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "bhutanesiska"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "bokmål"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosniska"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "brasiliansk portugisiska"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretonska"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "brittisk engelska"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgariska"
+ },
+ "my": {
+ "code": "my",
+ "name": "burmesiska"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "centralmarockansk tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokesiska"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "da": {
+ "code": "da",
+ "name": "danska"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "en": {
+ "code": "en",
+ "name": "engelska"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estniska"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "europeisk portugisiska"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "europeisk spanska"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filippinska"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finska"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamländska"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "franska"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulianska"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fulani"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "färöiska"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "förenklad kinesiska"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galiciska"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Gao-songhay"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiska"
+ },
+ "el": {
+ "code": "el",
+ "name": "grekiska"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "grönländska"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreiska"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "höglandsskotska"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "högsorbiska"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesiska"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "iriska"
+ },
+ "is": {
+ "code": "is",
+ "name": "isländska"
+ },
+ "it": {
+ "code": "it",
+ "name": "italienska"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japanska"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabyliska"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "kanadensisk engelska"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "kanadensisk franska"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannada"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "kapverdiska"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kashmiri"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalanska"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazakiska"
+ },
+ "km": {
+ "code": "km",
+ "name": "khmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "kimashami"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "kinesiska"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgiziska"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "kisambaa"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Kongo-swahili"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "koreanska"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "kroatiska"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölniska"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "lettiska"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "litauiska"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "luganda"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luhya"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "lusoga"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgiska"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "lågsorbiska"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedonska"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malagassiska"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malajiska"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltesiska"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathi"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "marockansk standard-tamazight"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "massajiska"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "mauritansk kreol"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "mexikansk spanska"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "modern standardarabiska"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldaviska"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongoliska"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "nederländska"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalesiska"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "nordndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "nordsamiska"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorska"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "panjabi"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persiska"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polska"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugisiska"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumänska"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ryska"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "rätoromanska"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "schweizertyska"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "schweizisk franska"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "schweizisk högtyska"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbiska"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "singalesiska"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovakiska"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "slovenska"
+ },
+ "so": {
+ "code": "so",
+ "name": "somaliska"
+ },
+ "es": {
+ "code": "es",
+ "name": "spanska"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "svenska"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "thai"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetanska"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinska"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Timbuktu-songhoy"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "tjeckiska"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonganska"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "traditionell kinesiska"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turkiska"
+ },
+ "de": {
+ "code": "de",
+ "name": "tyska"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uiguriska"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrainska"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ungerska"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbekiska"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "vaj"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamesiska"
+ },
+ "be": {
+ "code": "be",
+ "name": "vitryska"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "västfrisiska"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "walesiska"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walsertyska"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "österrikisk tyska"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/sv.json b/library/intl/resources/language/sv.json
new file mode 100644
index 000000000..8935f966b
--- /dev/null
+++ b/library/intl/resources/language/sv.json
@@ -0,0 +1,738 @@
+{
+ "ps": {
+ "code": "ps",
+ "name": "afghanska"
+ },
+ "af": {
+ "code": "af",
+ "name": "afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albanska"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "amerikansk engelska"
+ },
+ "am": {
+ "code": "am",
+ "name": "amhariska"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabiska"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armeniska"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "asturiska"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "australisk engelska"
+ },
+ "az": {
+ "code": "az",
+ "name": "azerbajdzjanska"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "basa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "baskiska"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengali"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "bhutanesiska"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosniska"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "brasiliansk portugisiska"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretonska"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "brittisk engelska"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgariska"
+ },
+ "my": {
+ "code": "my",
+ "name": "burmesiska"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "centralmarockansk tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokesiska"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chiga"
+ },
+ "da": {
+ "code": "da",
+ "name": "danska"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embu"
+ },
+ "en": {
+ "code": "en",
+ "name": "engelska"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "estniska"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "europeisk portugisiska"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "europeisk spanska"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ewondo"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filippinska"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "finska"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamländska"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "franska"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "friulianska"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "fulani"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "färöiska"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "förenklad kinesiska"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galiciska"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Gao-songhay"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "georgiska"
+ },
+ "el": {
+ "code": "el",
+ "name": "grekiska"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "grönländska"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "hebreiska"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindi"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "höglandsskotska"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "högsorbiska"
+ },
+ "id": {
+ "code": "id",
+ "name": "indonesiska"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "iriska"
+ },
+ "is": {
+ "code": "is",
+ "name": "isländska"
+ },
+ "it": {
+ "code": "it",
+ "name": "italienska"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "japanska"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "jola-fonyi"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "kabyliska"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kamba"
+ },
+ "km": {
+ "code": "km",
+ "name": "kambodjanska"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "kanadensisk engelska"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "kanadensisk franska"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannada"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "kapverdiska"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kashmiriska"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalanska"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "kazakiska"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuyu"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "kimashami"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "kinesiska"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "kirgisiska"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "kisambaa"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Kongo-swahili"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "koreanska"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "kroatiska"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kwasio"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "kölniska"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laotiska"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "lettiska"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "litauiska"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katanga"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "luganda"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luhya"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "lusoga"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "luxemburgiska"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "lågsorbiska"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedonska"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makhuwa-meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malagassiska"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malajiska"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltesiska"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "marathi"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "marockansk standard-tamazight"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "massajiska"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "mauritansk kreol"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "meru"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "mexikansk spanska"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "modern standardarabiska"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldaviska"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mongoliska"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "nama"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "nederländska"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalesiska"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngomba"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "nordndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "nordsamiska"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norskt bokmål"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankole"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "nynorska"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriya"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "persiska"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polska"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugisiska"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "punjabi"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumänska"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "rwa"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ryska"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "rätoromanska"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sangu"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "schweizertyska"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "schweizisk franska"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "schweizisk högtyska"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbiska"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "singalesiska"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovakiska"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "slovenska"
+ },
+ "so": {
+ "code": "so",
+ "name": "somaliska"
+ },
+ "es": {
+ "code": "es",
+ "name": "spanska"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "svenska"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "swahili"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugiska"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "thailändska"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetanska"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrinja"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Timbuktu-songhoy"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "tjeckiska"
+ },
+ "to": {
+ "code": "to",
+ "name": "tonganska"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "traditionell kinesiska"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turkiska"
+ },
+ "de": {
+ "code": "de",
+ "name": "tyska"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uiguriska"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukrainska"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ungerska"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "uzbekiska"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "vaj"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vietnamesiska"
+ },
+ "be": {
+ "code": "be",
+ "name": "vitryska"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjo"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "västfrisiska"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "walesiska"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "walsertyska"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zulu"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "österrikisk tyska"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/sw.json b/library/intl/resources/language/sw.json
new file mode 100644
index 000000000..db42e1e9e
--- /dev/null
+++ b/library/intl/resources/language/sw.json
@@ -0,0 +1,738 @@
+{
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "af": {
+ "code": "af",
+ "name": "Kiafrikana"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Kiaghem"
+ },
+ "is": {
+ "code": "is",
+ "name": "Kiaisilandi"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Kiajemi"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Kiakani"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Kialbania"
+ },
+ "am": {
+ "code": "am",
+ "name": "Kiamhari"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Kiarabu"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "Kiarabu Sanifu cha Kisasa"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Kiarmenia"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Kiasu"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Kiayalandi"
+ },
+ "az": {
+ "code": "az",
+ "name": "Kiazabajani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Kibafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Kibambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Kibasaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Kibasque"
+ },
+ "be": {
+ "code": "be",
+ "name": "Kibelarusi"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Kibena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Kibengali"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Kibokmal cha Norwe"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Kibosnia"
+ },
+ "br": {
+ "code": "br",
+ "name": "Kibretoni"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Kibulgaria"
+ },
+ "my": {
+ "code": "my",
+ "name": "Kiburma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Kicheki"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Kicherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Kichiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Kichina"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "Kichina cha Jadi"
+ },
+ "da": {
+ "code": "da",
+ "name": "Kidenmaki"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Kidolnoserbski"
+ },
+ "he": {
+ "code": "he",
+ "name": "Kiebrania"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Kiembu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Kiesperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Kiestonia"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Kiewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Kiewondo"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Kifaransa"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Kifaroe"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Kifilipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Kifinlandi"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Kifrisia cha Magharibi"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Kifulfulde"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Kigaeli cha Uskoti"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Kigalisi"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Kiganda"
+ },
+ "el": {
+ "code": "el",
+ "name": "Kigiriki"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Kigujarati"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Kihausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Kihindi"
+ },
+ "es": {
+ "code": "es",
+ "name": "Kihispania"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Kihispania cha Ulaya"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Kiholanzi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Kihungari"
+ },
+ "id": {
+ "code": "id",
+ "name": "Kiindonesia"
+ },
+ "en": {
+ "code": "en",
+ "name": "Kiingereza"
+ },
+ "it": {
+ "code": "it",
+ "name": "Kiitaliano"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Kijaluo"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Kijapani"
+ },
+ "de": {
+ "code": "de",
+ "name": "Kijerumani"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Kijerumani cha Uswisi"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Kijojia"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Kijola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kikabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kikabylia"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kikalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kikalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kikamba"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kikambodia"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kikannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kikashmiri"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Kikatalani"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kikazaki"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kikirigizi"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Kikisii"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Kikorea"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Kikoyra Chiini"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kikwasio"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Kilaosi"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Kilasembagi"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Kilatvia"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Kilingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Kilithuania"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Kiluba-Katanga"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Kiluhya"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Kimaasai"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Kimachame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Kimakhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Kimakonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Kimalayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Kimalesia"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Kimalta"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Kimarathi"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Kimasedonia"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Kimeru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Kimongolia"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Kimoriseni"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Kimundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Kinama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Kindebele cha Kaskazini"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Kinepali"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Kingomba"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Kingwana"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Kinorwe Kipya"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Kinuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Kinyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Kioriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Kipashto"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Kipolandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Kipunjabi"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Kirangi"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Kireno"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Kiromania"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Kiromanshi"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Kirombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Kirundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Kirusi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Kirwo"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Kisambaa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Kisamburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "Kisami cha Kaskazini"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Kisango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Kisangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Kisena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Kiserbia"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Kishona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Kisinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Kislovakia"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Kislovenia"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Kisoga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Kisomali"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Kiswahili"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Kiswidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Kitailandi"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Kitaita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Kitamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Kitasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Kitelugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Kiteso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Kitibeti"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Kitigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Kitonga"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Kituruki"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Kiuiguri"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Kiukrania"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Kiurdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Kiuzbeki"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Kivai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Kivietinamu"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Kivunjo"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Kiwelisi"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Kiyoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Kizarma"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Kizongkha"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Kizulu"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Kroeshia"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasi"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Tamaziti Msingi ya Kimoroko"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/swc.json b/library/intl/resources/language/swc.json
new file mode 100644
index 000000000..f10d6289b
--- /dev/null
+++ b/library/intl/resources/language/swc.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Kiajemi"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Kiakan"
+ },
+ "am": {
+ "code": "am",
+ "name": "Kiamhari"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Kiarabu"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Kibangla"
+ },
+ "be": {
+ "code": "be",
+ "name": "Kibelarusi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Kibulgaria"
+ },
+ "my": {
+ "code": "my",
+ "name": "Kiburma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Kichecki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Kichina"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Kifaransa"
+ },
+ "el": {
+ "code": "el",
+ "name": "Kigiriki"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Kihausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Kihindi"
+ },
+ "es": {
+ "code": "es",
+ "name": "Kihispania"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Kiholanzi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Kihungari"
+ },
+ "id": {
+ "code": "id",
+ "name": "Kiindonesia"
+ },
+ "it": {
+ "code": "it",
+ "name": "Kiitaliano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Kijapani"
+ },
+ "de": {
+ "code": "de",
+ "name": "Kijerumani"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kikambodia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Kikorea"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Kimalesia"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Kinepali"
+ },
+ "en": {
+ "code": "en",
+ "name": "Kingereza"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Kipolandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Kipunjabi"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Kireno"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Kiromania"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Kirusi"
+ },
+ "so": {
+ "code": "so",
+ "name": "Kisomali"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Kiswahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Kiswahili ya Kongo"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Kiswidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Kitailandi"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Kitamil"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Kituruki"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Kiukrania"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Kiurdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Kivietinamu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Kiyoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Kizulu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ta.json b/library/intl/resources/language/ta.json
new file mode 100644
index 000000000..b0c0f8ef9
--- /dev/null
+++ b/library/intl/resources/language/ta.json
@@ -0,0 +1,738 @@
+{
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "அகானà¯"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "அகெமà¯"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "அசà¯"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "அபà¯à®ªà®°à¯ சோரà¯à®ªà®¿à®¯à®¾à®©à¯"
+ },
+ "am": {
+ "code": "am",
+ "name": "à®…à®®à¯à®¹à®¾à®°à®¿à®•à¯"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "அமெரிகà¯à®• ஆஙà¯à®•à®¿à®²à®®à¯"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "அரபிகà¯"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "அலà¯à®ªà¯‡à®©à®¿à®¯à®©à¯"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "அஸà¯à®¤à¯à®°à®¿à®¯à®©à¯"
+ },
+ "az": {
+ "code": "az",
+ "name": "அஸரà¯à®ªà¯ˆà®œà®¾à®©à®¿"
+ },
+ "af": {
+ "code": "af",
+ "name": "ஆஃபà¯à®°à®¿à®•à®¾à®©à¯à®¸à¯"
+ },
+ "en": {
+ "code": "en",
+ "name": "ஆஙà¯à®•à®¿à®²à®®à¯"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "ஆரà¯à®®à¯‡à®©à®¿à®¯à®©à¯"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "ஆஸà¯à®¤à®¿à®°à®¿à®¯ ஜெரà¯à®®à®©à¯"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "ஆஸà¯à®¤à®¿à®°à¯‡à®²à®¿à®¯à®©à¯ ஆஙà¯à®•à®¿à®²à®®à¯"
+ },
+ "it": {
+ "code": "it",
+ "name": "இதà¯à®¤à®¾à®²à®¿à®¯à®©à¯"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "இநà¯à®¤à®¿"
+ },
+ "id": {
+ "code": "id",
+ "name": "இநà¯à®¤à¯‹à®©à¯‡à®·à®¿à®¯à®©à¯"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ஈவà¯"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "உகà¯à®°à¯ˆà®©à®¿à®¯à®©à¯"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "உயà¯à®•à¯à®°à¯"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "உரà¯à®¤à¯"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "உஸà¯à®ªà¯†à®•à¯"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "எமà¯à®ªà¯"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "எவோனà¯à®Ÿà¯‹"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "எளிதாகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ சீனமà¯"
+ },
+ "et": {
+ "code": "et",
+ "name": "எஸà¯à®Ÿà¯‹à®©à®¿à®¯à®©à¯"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "எஸà¯à®ªà®°à¯‡à®©à¯à®Ÿà¯‹"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "à®à®°à®¿à®·à¯"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "à®à®°à¯‹à®ªà¯à®ªà®¿à®¯ போரà¯à®šà¯à®šà¯à®•à¯€à®¸à¯"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "à®à®°à¯‹à®ªà¯à®ªà®¿à®¯ ஸà¯à®ªà®¾à®©à®¿à®·à¯"
+ },
+ "is": {
+ "code": "is",
+ "name": "à®à®¸à¯à®²à¯†à®©à¯à®Ÿà®¿à®•à¯"
+ },
+ "or": {
+ "code": "or",
+ "name": "ஒரியா"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "ஃபà¯à®°à®¿à®¯à¯‚லியனà¯"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "ஃபரோயிஸà¯"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "ஃபிலிபினோ"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "ஃபினà¯à®©à®¿à®·à¯"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "ஃபà¯à®²à®¾"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "கà¯à®µà®¾à®šà®¿à®¯à¯‹"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "கசாகà¯"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "கபாயà¯à®²à¯"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "கபà¯à®µà¯†à®°à¯à®¤à®¿à®¯à®¾à®©à¯"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "கமà¯à®ªà®¾"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "கலாலிசூடà¯"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "கலினà¯à®œà®¿à®©à¯"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "கனà¯à®©à®Ÿà®®à¯"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "கனடிய பிரெஞà¯à®šà¯"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "கனடியன௠ஆஙà¯à®•à®¿à®²à®®à¯"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "காஙà¯à®•à¯‹ சà¯à®µà®¾à®¹à®¿à®²à®¿"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "காலிஸியனà¯"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "கானà¯à®Ÿà®¾"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "காஷà¯à®®à®¿à®°à®¿"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "கிகà¯à®¯à¯‚"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "கிரà¯à®•à®¿à®¸à¯"
+ },
+ "el": {
+ "code": "el",
+ "name": "கிரேகà¯à®•à®®à¯"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "கà¯à®°à¯‹à®·à®¿à®¯à®©à¯"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "கà¯à®œà®°à®¾à®¤à¯à®¤à®¿"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "கà¯à®¸à®¿"
+ },
+ "km": {
+ "code": "km",
+ "name": "கெமெரà¯"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "கேடà¯à®Ÿà®²à®¾à®©à¯"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "கொயà¯à®°à®¾ சீனீ"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "கொயà¯à®°à®¾à®ªà¯‹à®°à¯‹ செனà¯à®©à®¿"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "கொரியனà¯"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "சஙà¯à®•à¯"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "சமà¯à®ªà¯à®°à¯"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "சாஙà¯à®•à¯‹"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "சாரà¯à®®à®¾"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "சிகா"
+ },
+ "si": {
+ "code": "si",
+ "name": "சிஙà¯à®•à®³à®®à¯"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "சீனமà¯"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "சà¯à®µà®¾à®¹à®¿à®²à®¿"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "செகà¯"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "செரà¯à®ªà®¿à®¯à®©à¯"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "செரொகி"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "செனா"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "சோகா"
+ },
+ "so": {
+ "code": "so",
+ "name": "சோமாலி"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "டசà¯à®šà¯"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "டசவாகà¯"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "டரà¯à®•à®¿à®·à¯"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "டிகà¯à®°à®¿à®©à¯à®¯à®¾"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "டெசோ"
+ },
+ "da": {
+ "code": "da",
+ "name": "டேனிஷà¯"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "டைடா"
+ },
+ "to": {
+ "code": "to",
+ "name": "டோஙà¯à®•à®¾à®©à¯"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "தசேஹிதà¯"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "தமிழà¯"
+ },
+ "th": {
+ "code": "th",
+ "name": "தாயà¯"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "திபெதà¯à®¤à®¿à®¯à®©à¯"
+ },
+ "te": {
+ "code": "te",
+ "name": "தெலà¯à®™à¯à®•à¯"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "நகொமà¯à®ªà®¾"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "நாமா"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "நாரà¯à®µà¯‡à®œà®¿à®¯à®©à¯ நியூநாரà¯à®¸à¯à®•à¯"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "நாரà¯à®µà¯‡à®œà®¿à®¯à®©à¯ பொகà¯à®®à®¾à®²à¯"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "நியானà¯à®•à¯‹à®²à¯‡"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "நியூரà¯"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "நேபாளி"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "பஞà¯à®šà®¾à®ªà®¿"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "பமà¯à®ªà®¾à®°à®¾"
+ },
+ "my": {
+ "code": "my",
+ "name": "பரà¯à®®à®¿à®¸à¯"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "பலà¯à®•à¯‡à®°à®¿à®¯à®©à¯"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "பஷà¯à®¤à¯‹"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "பஸà¯à®•à¯"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "பாஃபியா"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "பாரமà¯à®ªà®°à®¿à®¯ சீனமà¯"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "பாஸா"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "பிரிடà¯à®Ÿà®¿à®·à¯ ஆஙà¯à®•à®¿à®²à®®à¯"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "பிரெஞà¯à®šà¯"
+ },
+ "br": {
+ "code": "br",
+ "name": "பிரெடà¯à®Ÿà®©à¯"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "பிலெமிஷà¯"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "பூடானி"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "பெரà¯à®·à®¿à®¯à®©à¯"
+ },
+ "be": {
+ "code": "be",
+ "name": "பெலாரà¯à®·à®¿à®¯à®©à¯"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "பெனா"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "போடோ"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "போரà¯à®šà¯à®šà¯à®•à¯à®•à¯€à®¸à¯"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "போரà¯à®šà¯à®šà¯à®•à¯€à®¸à¯ (பிரேசிலà¯)"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "போலிஷà¯"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "போஸà¯à®©à®¿à®¯à®©à¯"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "மகà¯à®µà®¾-மீடà¯à®Ÿà¯‹"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "மகொணà¯à®Ÿà¯‡"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "மஙà¯à®•à¯‹à®²à®¿à®¯à®©à¯"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "மதà¯à®¤à®¿à®¯ அடà¯à®²à®¸à¯ தமசைடà¯"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "மராதà¯à®¤à®¿"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "மலகாஸி"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "மலாயà¯"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "மலையாளமà¯"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "மாசாயà¯"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "மாசெமà¯"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "மாடரà¯à®©à¯ ஸà¯à®Ÿà®¾à®£à¯à®Ÿà®°à¯à®Ÿà¯ அரபிகà¯"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "மாலà¯à®Ÿà®¿à®¸à¯"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "மாஸிடோனியனà¯"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "à®®à¯à®©à¯à®Ÿà®¾à®™à¯"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "மெகà¯à®šà®¿à®•à®©à¯ ஸà¯à®ªà®¾à®©à®¿à®·à¯"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "மெரà¯"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "மேறà¯à®•à®¤à¯à®¤à®¿à®¯ ஃபà¯à®°à®¿à®·à®¿à®¯à®©à¯"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "மொரிசியனà¯"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "மோலà¯à®Ÿà®¾à®µà®¿à®¯à®©à¯"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "யோரà¯à®ªà®¾"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ரஷியனà¯"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "à®°à¯à®£à¯à®Ÿà®¿"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "à®°à¯à®µà®¾"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "ரோமà¯à®ªà¯‹"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "ரோமானà¯à®·à¯"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "ரோமேனியனà¯"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "லகà¯à®¸à®®à¯à®ªà¯‹à®°à¯à®•à®¿à®·à¯"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "லஙà¯à®•à®¿"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "லாடà¯à®µà®¿à®¯à®©à¯"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "லாவோ"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "லிஙà¯à®•à®¾à®²à®¾"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "லிதà¯à®µà¯‡à®©à®¿à®¯à®©à¯"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "லà¯à®ªà®¾-கடாஙà¯à®•à®¾"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "லà¯à®¯à®¿à®¯à®¾"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "லà¯à®¯à¯‹"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "லோயர௠சோரà¯à®ªà®¿à®¯à®©à¯"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "வஙà¯à®•à®¾à®³à®®à¯"
+ },
+ "se": {
+ "code": "se",
+ "name": "வடகà¯à®•à¯ சமி"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "வடகà¯à®•à¯ தெபெலே"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "வியடà¯à®¨à®¾à®®à®¿à®¸à¯"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "வà¯à®©à¯à®œà¯‹"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "வெலà¯à®·à¯"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "வை"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ஜபà¯à®ªà®¾à®©à®¿à®¯à®®à¯"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "ஜாரà¯à®œà®¿à®¯à®©à¯"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "ஜà¯à®²à¯"
+ },
+ "de": {
+ "code": "de",
+ "name": "ஜெரà¯à®®à®©à¯"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "ஜோலா-ஃபோனà¯à®¯à®¿"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "à®·à®®à¯à®ªà®¾à®²à®¾"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "ஷோனா"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "ஸà¯à®•à®¾à®Ÿà¯à®¸à¯ கேலிகà¯"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "ஸà¯à®Ÿà®¾à®£à¯à®Ÿà®°à¯à®Ÿà¯ மொராகà¯à®•à®©à¯ தமாசைடà¯"
+ },
+ "es": {
+ "code": "es",
+ "name": "ஸà¯à®ªà®¾à®©à®¿à®·à¯"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "ஸà¯à®²à¯‹à®µà®¾à®•à¯"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "ஸà¯à®²à¯‹à®µà¯‡à®©à®¿à®¯à®©à¯"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "ஸà¯à®µà®¿à®¸à¯ பிரஞà¯à®šà¯"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "ஸà¯à®µà®¿à®¸à¯ ஜெரà¯à®®à®©à¯"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "ஸà¯à®µà®¿à®¸à¯ ஹை ஜெரà¯à®®à®©à¯"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "ஸà¯à®µà¯€à®Ÿà®¿à®·à¯"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ஹஙà¯à®•à¯‡à®°à®¿à®¯à®©à¯"
+ },
+ "he": {
+ "code": "he",
+ "name": "ஹீபà¯à®°à¯‚"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "ஹௌஸா"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/te.json b/library/intl/resources/language/te.json
new file mode 100644
index 000000000..9a00f8ae9
--- /dev/null
+++ b/library/intl/resources/language/te.json
@@ -0,0 +1,738 @@
+{
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "అకానà±"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "అగేమà±"
+ },
+ "az": {
+ "code": "az",
+ "name": "అజరà±à°¬à±ˆà°œà°¾à°¨à°¿"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "à°…à°ªà±à°ªà°°à± సోరà±à°¬à°¿à°¯à°¨à±"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "అమెరికనౠఇంగà±à°²à±€à°·à±"
+ },
+ "am": {
+ "code": "am",
+ "name": "à°…à°®à±à°¹à°¾à°°à°¿à°•à±"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "అరబికà±"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "à°…à°²à±à°¬à±‡à°¨à°¿à°¯à°¨à±"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "à°…à°¸à±"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "à°…à°¸à±à°Ÿà±à°°à°¿à°¯à°¾à°¨à±"
+ },
+ "en": {
+ "code": "en",
+ "name": "ఆంగà±à°²à°‚"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ఆధà±à°¨à°¿à°• à°ªà±à°°à°¾à°®à°¾à°£à°¿à°• అరబికà±"
+ },
+ "af": {
+ "code": "af",
+ "name": "ఆఫà±à°°à°¿à°•à°¾à°¨à±à°¸à±"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "ఆరà±à°®à±‡à°¨à°¿à°¯à°¨à±"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "ఆసà±à°Ÿà±à°°à±‡à°²à°¿à°¯à°¨à± ఇంగà±à°²à±€à°·à±"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "ఆసà±à°Ÿà±à°°à±‡à°²à°¿à°¯à°¨à± జరà±à°®à°¨à±"
+ },
+ "id": {
+ "code": "id",
+ "name": "ఇండోనేషియనà±"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "ఇంబà±"
+ },
+ "it": {
+ "code": "it",
+ "name": "ఇటాలియనà±"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ఈవీ"
+ },
+ "et": {
+ "code": "et",
+ "name": "ఈసà±à°Ÿà±Šà°¨à°¿à°¯à°¨à±"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ఉకà±à°°à±‡à°¨à°¿à°¯à°¨à±"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "ఉజà±à°¬à±†à°•à±"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ఉతà±à°¤à°° దెబెలె"
+ },
+ "se": {
+ "code": "se",
+ "name": "ఉతà±à°¤à°° సామి"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ఉయà±â€Œà°˜à°°à±"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ఉరà±à°¦à±‚"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ఎవోండొ"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "à°Žà°¸à±à°ªà°°à±†à°¨à±à°Ÿà±Š"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "à°à°°à°¿à°·à±"
+ },
+ "is": {
+ "code": "is",
+ "name": "à°à°¸à±à°²à°¾à°‚à°¡à°¿à°•à±"
+ },
+ "or": {
+ "code": "or",
+ "name": "ఒరియా"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "కంబా"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "కజఖà±"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "à°•à°¨à±à°¨à°¡"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "కలాలà±à°²à°¿à°¸à±‚à°Ÿà±"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "కలెంజినà±"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "కాంగో à°¸à±à°µà°¾à°¹à°¿à°²à°¿"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "కాబిలà±"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "కాబà±à°µà±‡à°°à±à°¦à°¿à°¯à°¨à±"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "కాశà±à°®à±€à°°à°¿"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "à°•à°¿à°•à±à°¯à±"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "à°•à°¿à°°à±à°—à°¿à°œà±"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "కెటలానà±"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "కెనడియనౠఇంగà±à°²à±€à°·à±"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "కెనడియెనౠఫà±à°°à±†à°‚à°šà±"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "కొయరా చీనà±à°¨à±€"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "కొరియనà±"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "కోయోరాబోరో సెనà±à°¨à±€"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "à°•à±à°°à±Šà°¯à±†à°·à°¿à°¯à°¨à±"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "à°•à±à°µà°¾à°¸à°¿à°¯à±†"
+ },
+ "km": {
+ "code": "km",
+ "name": "à°–à±à°®à±‡à°°à±"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "గాండా"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "à°—à±à°œà°°à°¾à°¤à°¿"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "à°—à±à°¸à±à°¸à±€"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "గెలిషియనà±"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "గోంబా"
+ },
+ "el": {
+ "code": "el",
+ "name": "à°—à±à°°à±€à°•à±"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "చెకà±"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "చెరోకీ"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "చైనీసà±"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "ఛిగా"
+ },
+ "de": {
+ "code": "de",
+ "name": "జరà±à°®à°¨à±"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "జాపనీసà±"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "జారà±à°œà°¿à°¯à°¨à±"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "జారà±à°®à°¾"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "జూలూ"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "జొనà±à°–à°¾"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "జోలా-ఫోనయి"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "à°Ÿà°°à±à°•à°¿à°·à±"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "టసావాఖà±"
+ },
+ "to": {
+ "code": "to",
+ "name": "టాంగానà±"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "టాచెలà±â€Œà°¹à°¿à°Ÿà±"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "టిబెటనà±"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "టెసో"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "టైటా"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "à°¡à°šà±"
+ },
+ "da": {
+ "code": "da",
+ "name": "డేనిషà±"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "తమిళమà±"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "తిగà±à°°à°¿à°¨à±à°¯à°¾"
+ },
+ "te": {
+ "code": "te",
+ "name": "తెలà±à°—à±"
+ },
+ "th": {
+ "code": "th",
+ "name": "థాయà±"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "నమ"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "నారà±à°µà°¿à°œà°¿à°¯à°¾à°¨à± à°¨à±à°¯à±‹à°°à±à°¸à±à°•à±"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "నారà±à°µà±€à°œà°¿à°¯à°¨à± బొకà±à°®à°¾à°²à±"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "నేపాలి"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "à°¨à±à°¯à°¾à°¨à±à°•à±‹à°²à±†"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "à°¨à±à°¯à±à°°à±"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "పంజాబీ"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "పరà±à°·à°¿à°¯à°¨à±"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "పశà±à°šà°¿à°® à°«à±à°°à°¿à°¸à°¿à°¯à°¨à±"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "పాషà±à°Ÿà±‹"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "పోరà±à°šà±à°—ీసà±"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "పోలిషà±"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "à°ªà±à°°à°¾à°®à°¾à°£à°¿à°• మొరొకనౠతమజియటà±"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "ఫారోయీజà±"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "à°«à°¿à°¨à±à°¨à°¿à°·à±"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "ఫిలిపినో"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "à°«à±à°¯à±à°²"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "à°«à±à°°à°¿à°¯à±à°²à°¿à°¯à°¨à±"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "à°«à±à°°à±†à°‚à°šà±"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "à°«à±à°²à±†à°®à°¿à°·à±"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "బంబారా"
+ },
+ "my": {
+ "code": "my",
+ "name": "బరà±à°®à±€à°¸à±"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "బలà±à°—ేరియనà±"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "బసా"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "బాఫియ"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "బాసà±à°•à±"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "బీనా"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "బెంగాలీ"
+ },
+ "be": {
+ "code": "be",
+ "name": "బెలరà±à°¶à°¿à°¯à°¨à±"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "బోడో"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "బోసà±à°¨à°¿à°¯à°¨à±"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "à°¬à±à°°à°¿à°Ÿà°¿à°·à± ఇంగà±à°²à±€à°·à±"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "à°¬à±à°°à±†à°œà±€à°²à°¿à°¯à°¨à± పోరà±à°šà±à°—ీసà±"
+ },
+ "br": {
+ "code": "br",
+ "name": "à°¬à±à°°à±†à°Ÿà°¨à±"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "మంగోలియనà±"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "మకొండే"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "మకొమà±"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "మకà±à°µà°¾-మిటà±à°Ÿà±‹"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "మరాఠీ"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "మలయాళం"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "మలేయà±"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "మసడోనియనà±"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "మాలాగసి"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "మాలà±à°Ÿà±€à°¸à±"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "మాసాయి"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "à°®à±à°¦à°¾à°‚à°—à±"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "మెకà±à°¸à°¿à°•à°¨à± à°¸à±à°ªà°¾à°¨à°¿à°·à±"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "మెరà±"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "మొరిసà±à°¯à±‡à°¨à±"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "మొలà±à°¡à°¾à°µà°¿à°¯à°¨à±"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "యూరోపియనౠపోరà±à°šà±à°—ీసà±"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "యూరోపియనౠసà±à°ªà°¾à°¨à°¿à°·à±"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "యోరà±à°¬à°¾"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "à°°à°‚à°¡à°¿"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "à°°à°·à±à°¯à°¨à±"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "రోంబో"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "రోమనà±à°·à±"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "రోమానియనà±"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "à°°à±à°µà°¾"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "లాంగీ"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "లాటà±à°µà°¿à°¯à°¨à±"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "లావో"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "లింగాల"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "లిథà±à°¯à±‡à°¨à°¿à°¯à°¨à±"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "à°²à±à°•à±à°¸à°‚బరà±à°—à°¿à°·à±"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "à°²à±à°¯à°¿à°¯"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "à°²à±à°µà±‹"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "లూబ-కటాంగ"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "లోవరౠసోరà±à°¬à°¿à°¯à°¨à±"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "వాయి"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "వియతà±à°¨à°¾à°®à±€à°¸à±"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "à°µà±à°‚జొ"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "వెలà±à°·à±"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "శంబాలా"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "షోన"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "సంబà±à°°à±"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "సరళీకృత చైనీసà±"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "సాంగà±"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "సాంగో"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "సాంపà±à°°à°¦à°¾à°¯à°• చైనీసà±"
+ },
+ "si": {
+ "code": "si",
+ "name": "సింహళం"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "సెంటà±à°°à°²à± à°…à°Ÿà±à°²à°¾à°¸à± టామాజైటà±"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "సెనా"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "సెరà±à°¬à°¿à°¯à°¨à±"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "సొగా"
+ },
+ "so": {
+ "code": "so",
+ "name": "సోమాలి"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "à°¸à±à°•à°¾à°Ÿà°¿à°·à± గేలికà±"
+ },
+ "es": {
+ "code": "es",
+ "name": "à°¸à±à°ªà°¾à°¨à°¿à°·à±"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "à°¸à±à°²à±‹à°µà°¾à°•à±"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "à°¸à±à°²à±‹à°µà±‡à°¨à°¿à°¯à°¾à°¨à±"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "à°¸à±à°µà°¾à°¹à°¿à°²à°¿"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "à°¸à±à°µà°¿à°¸à± జరà±à°®à°¨à±"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "à°¸à±à°µà°¿à°¸à± à°«à±à°°à±†à°‚à°šà±"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "à°¸à±à°µà°¿à°¸à± హై జరà±à°®à°¨à±"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "à°¸à±à°µà±€à°¡à°¿à°·à±"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "హనà±à°—ేరియనà±"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "హిందీ"
+ },
+ "he": {
+ "code": "he",
+ "name": "హీబà±à°°à±"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "హౌసా"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/teo.json b/library/intl/resources/language/teo.json
new file mode 100644
index 000000000..59f0372dc
--- /dev/null
+++ b/library/intl/resources/language/teo.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Kiajemi"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Kiakan"
+ },
+ "am": {
+ "code": "am",
+ "name": "Kiamhari"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Kiarabu"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Kibangla"
+ },
+ "be": {
+ "code": "be",
+ "name": "Kibelarusi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Kibulgaria"
+ },
+ "my": {
+ "code": "my",
+ "name": "Kiburma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Kichecki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Kichina"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Kifaransa"
+ },
+ "el": {
+ "code": "el",
+ "name": "Kigiriki"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Kihausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Kihindi"
+ },
+ "es": {
+ "code": "es",
+ "name": "Kihispania"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Kiholanzi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Kihungari"
+ },
+ "id": {
+ "code": "id",
+ "name": "Kiindonesia"
+ },
+ "it": {
+ "code": "it",
+ "name": "Kiitaliano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Kijapani"
+ },
+ "de": {
+ "code": "de",
+ "name": "Kijerumani"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kikambodia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Kikorea"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Kimalesia"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Kinepali"
+ },
+ "en": {
+ "code": "en",
+ "name": "Kingereza"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Kipolandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Kipunjabi"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Kireno"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Kiromania"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Kirusi"
+ },
+ "so": {
+ "code": "so",
+ "name": "Kisomali"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Kiswidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Kitailandi"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Kitamil"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Kiteso"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Kituruki"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Kiukrania"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Kiurdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Kivietinamu"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Kiyoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Kizulu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/th.json b/library/intl/resources/language/th.json
new file mode 100644
index 000000000..f747a2392
--- /dev/null
+++ b/library/intl/resources/language/th.json
@@ -0,0 +1,738 @@
+{
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "el": {
+ "code": "el",
+ "name": "à¸à¸£à¸µà¸"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "à¸à¸£à¸µà¸™à¹à¸¥à¸™à¸”์"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "à¸à¸§à¸²à¸‹à¸´à¹‚อ"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "à¸à¸±à¸™à¸™à¸²à¸”า"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "à¸à¸±à¸¨à¸¡à¸µà¸£à¹Œ"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "à¸à¸²à¸•à¸²à¸¥à¸±à¸‡"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "à¸à¸²à¹„บล"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "à¸à¸²à¸¥à¸´à¹€à¸‹à¸µà¸¢"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "à¸à¸µà¸à¸¹à¸¢à¸¹"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "à¸à¸¸à¸‹à¸‹à¸µ"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "เà¸à¸²à¸«à¸¥à¸µ"
+ },
+ "km": {
+ "code": "km",
+ "name": "เขมร"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "คัมบา"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "คาซัค"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "คาบูเวอร์เดียนู"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "คาเลนจิน"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "คีà¸à¸²"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "คีร์à¸à¸µà¸‹"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "คุชราต"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "โคย์ราชีนี"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "โคย์ราโบโรเซนนี"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "โครเอเชีย"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "โคโลà¸"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "จอร์เจีย"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "จีน"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "จีนตัวเต็ม"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "จีนตัวย่อ"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "โจลา-ฟอนยี"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "ชัมบาลา"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "เช็à¸"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "เชอโรà¸à¸µ"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "โชนา"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "ซองคา"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "ซอร์บส์ตอนบน"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "ซอร์บส์ตอนล่าง"
+ },
+ "se": {
+ "code": "se",
+ "name": "ซามิเหนือ"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "ซาร์มา"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "ซูลู"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "เซนา"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "เซอร์เบีย"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "à¹à¸‹à¸‡à¸à¸¹"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "à¹à¸‹à¸‡à¹‚à¸"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "à¹à¸‹à¸¡à¸šà¸¹à¸£à¸¹"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "โซà¸à¸²"
+ },
+ "so": {
+ "code": "so",
+ "name": "โซมาลี"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "à¸à¸µà¹ˆà¸›à¸¸à¹ˆà¸™"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ดัตช์"
+ },
+ "da": {
+ "code": "da",
+ "name": "เดนมาร์à¸"
+ },
+ "to": {
+ "code": "to",
+ "name": "ตองà¸à¸²"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "ตัสซาวัค"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "ติà¸à¸£à¸´à¸à¸à¸²"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "ตุรà¸à¸µ"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "เตโซ"
+ },
+ "te": {
+ "code": "te",
+ "name": "เตลูà¸à¸¹"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "ทมิฬ"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "ทาเชลีห์ท"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "ทามาไซต์โมร็อà¸à¹‚à¸à¸¡à¸²à¸•à¸£à¸à¸²à¸™"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "ทามาไซต์à¹à¸­à¸•à¸¥à¸²à¸ªà¸à¸¥à¸²à¸‡"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "ทิเบต"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "ไททา"
+ },
+ "th": {
+ "code": "th",
+ "name": "ไทย"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "นอร์เวย์นีนอสà¸à¹Œ"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "นอร์เวย์บุคมอล"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "นามา"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "เนปาล"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "เนียนโà¸à¹€à¸¥"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "เนือร์"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "บอสเนีย"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "บัมบารา"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "บัลà¹à¸à¹€à¸£à¸µà¸¢"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "บัสเà¸"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "บาเฟีย"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "บาสา"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "บุรุนดี"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "เบงà¸à¸²à¸¥à¸µ"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "เบนา"
+ },
+ "br": {
+ "code": "br",
+ "name": "เบรตัน"
+ },
+ "be": {
+ "code": "be",
+ "name": "เบลารุส"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "ปัà¸à¸ˆà¸²à¸š"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "เปอร์เซีย"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "โปรตุเà¸à¸ª"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "โปรตุเà¸à¸ª - บราซิล"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "โปรตุเà¸à¸ª - ยุโรป"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "โปà¹à¸¥à¸™à¸”์"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "à¸à¸£à¸±à¹ˆà¸‡à¹€à¸¨à¸ª"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "à¸à¸£à¸±à¹ˆà¸‡à¹€à¸¨à¸ª (สวิส)"
+ },
+ "my": {
+ "code": "my",
+ "name": "พม่า"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "พาชตู"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "โพโฑ"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "ฟริเซียนตะวันตà¸"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "ฟรูลี"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "ฟินà¹à¸¥à¸™à¸”์"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "ฟิลิปปินส์"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "ฟูลาฮ์"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "เฟลมิช"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "à¹à¸Ÿà¹‚ร"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "มราà¸à¸µ"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "มองโà¸à¹€à¸¥à¸µà¸¢"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "มอริสเยน"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "มอลโดวา"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "มอลตา"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "มันดัง"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "มาà¸à¸±à¸§à¸§à¸²-มีทโท"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "มาคอนเด"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "มาชาเม"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "มาซิโดเนีย"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "มาไซ"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "มาลาà¸à¸²à¸‹à¸µ"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "มาลายาลัม"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "มาเลย์"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "เมรู"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ยูà¸à¸±à¸™à¸”า"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ยูเครน"
+ },
+ "de": {
+ "code": "de",
+ "name": "เยอรมัน"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "เยอรมัน - ออสเตรีย"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "เยอรมันสวิส"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "เยอรมันสูง (สวิส)"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "à¹à¸¢à¸‡à¹€à¸šà¸™"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "โยรูบา"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "รวา"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "รอมโบ"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "รัสเซีย"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "โรมาเนีย"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "โรà¹à¸¡à¸™à¸‹à¹Œ"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "ลัà¸à¹€à¸‹à¸¡à¹€à¸šà¸´à¸£à¹Œà¸"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "ลัตเวีย"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "ลัว"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "ลาว"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "ลิงà¸à¸²à¸¥à¸²"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "ลิทัวเนีย"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "ลูบา-à¸à¸²à¸•à¸­à¸‡à¸à¸²"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "ลูเยีย"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "à¹à¸¥à¸™à¸ˆà¸µ"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "วัลเซอร์"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "วุนจู"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "เวลส์"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "เวียดนาม"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "ไว"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "สà¸à¸­à¸•à¸ªà¹Œà¸à¸²à¸¥à¸´à¸"
+ },
+ "es": {
+ "code": "es",
+ "name": "สเปน"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "สเปน (ยุโรป)"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "สโลวัà¸"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "สโลวีเนีย"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "สวาฮีลี"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "สวาฮีลี-คองโà¸"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "สวีเดน"
+ },
+ "si": {
+ "code": "si",
+ "name": "สิงหล"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "อัà¸à¹€à¸®à¸¡"
+ },
+ "en": {
+ "code": "en",
+ "name": "อังà¸à¸¤à¸©"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "อังà¸à¸¤à¸© - à¹à¸„นาดา"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "อังà¸à¸¤à¸© - สหราชอาณาจัà¸à¸£"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "อังà¸à¸¤à¸© - อเมริà¸à¸±à¸™"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "อังà¸à¸¤à¸© - ออสเตรเลีย"
+ },
+ "am": {
+ "code": "am",
+ "name": "อัมฮารา"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "อัสตูเรียส"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "อาคัน"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "อาซู"
+ },
+ "az": {
+ "code": "az",
+ "name": "อาเซอร์ไบจาน"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "อาร์เมเนีย"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "อาหรับ"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "อาหรับมาตรà¸à¸²à¸™à¸ªà¸¡à¸±à¸¢à¹ƒà¸«à¸¡à¹ˆ"
+ },
+ "it": {
+ "code": "it",
+ "name": "อิตาลี"
+ },
+ "id": {
+ "code": "id",
+ "name": "อินโดนีเชีย"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "อีวันโด"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "อึนà¸à¸­à¸¡à¸šà¸²"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "อุซเบà¸"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "อุยà¸à¸±à¸§"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "อูรดู"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "เอ็นเดเบเลเหนือ"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "เอ็มบู"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "เอเว"
+ },
+ "et": {
+ "code": "et",
+ "name": "เอสโตเนีย"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "เอสเปอรันโต"
+ },
+ "af": {
+ "code": "af",
+ "name": "à¹à¸­à¸Ÿà¸£à¸´à¸à¸²à¸™à¸ªà¹Œ"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "à¹à¸­à¸¥à¹€à¸šà¹€à¸™à¸µà¸¢"
+ },
+ "or": {
+ "code": "or",
+ "name": "โอริยา"
+ },
+ "is": {
+ "code": "is",
+ "name": "ไอซ์à¹à¸¥à¸™à¸”์"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "ไอริช"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ฮังà¸à¸²à¸£à¸µ"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "ฮินดี"
+ },
+ "he": {
+ "code": "he",
+ "name": "ฮิบรู"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "เฮาชา"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ti.json b/library/intl/resources/language/ti.json
new file mode 100644
index 000000000..70af1ec92
--- /dev/null
+++ b/library/intl/resources/language/ti.json
@@ -0,0 +1,738 @@
+{
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burmese"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Chinese"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "km": {
+ "code": "km",
+ "name": "Khmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somali"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ሀንጋሪኛ"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "ሊቱአኒየን"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "ላቲቪያን"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "ሕንደኛ"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "ማላያላáˆáŠ›"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "ማላይኛ"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "ማáˆá‰²áˆµáŠ›"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "ማራቲኛ"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "ማክዶኒኛ"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ራሽኛ"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "ሮማኒያን"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "ሰርቢኛ"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "ሰዋሂሊኛ"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "ስሎቨክኛ"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "ስá‰á‰ªáŠ›"
+ },
+ "si": {
+ "code": "si",
+ "name": "ስንሃáˆáŠ›"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "ስዊድንኛ"
+ },
+ "es": {
+ "code": "es",
+ "name": "ስá“ኒሽ"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "በንጋሊኛ"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ቡáˆáŒ‹áˆªáŠ›"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "ባስክኛ"
+ },
+ "be": {
+ "code": "be",
+ "name": "ቤላራሻኛ"
+ },
+ "br": {
+ "code": "br",
+ "name": "ብሬቶን"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "ቦስኒያን"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ቪትናáˆáŠ›"
+ },
+ "te": {
+ "code": "te",
+ "name": "ተሉጉኛ"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "ቱርከኛ"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "ታሚáˆáŠ›"
+ },
+ "th": {
+ "code": "th",
+ "name": "ታይኛ"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "ታጋሎገኛ"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "ትáŒáˆ­áŠ›"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ቼክኛ"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "ኔá–ሊኛ"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "ኖርዌይኛ (ናይ áŠáŠ–ርስክ)"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "አáˆá‰¤áŠ’ኛ"
+ },
+ "am": {
+ "code": "am",
+ "name": "አáˆáˆáˆ¨áŠ›"
+ },
+ "az": {
+ "code": "az",
+ "name": "አዜርባይጃንኛ"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "አይሪሽ"
+ },
+ "is": {
+ "code": "is",
+ "name": "አይስላንደኛ"
+ },
+ "af": {
+ "code": "af",
+ "name": "አáሪቃንሰኛ"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ኡርዱኛ"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "ኡá‹á‰ áŠ­áŠ›"
+ },
+ "et": {
+ "code": "et",
+ "name": "ኤስቶኒአን"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "ኤስáራንቶ"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "እስኮትስ ጌáˆáŠ­áŠ›"
+ },
+ "id": {
+ "code": "id",
+ "name": "እንዶኑሲኛ"
+ },
+ "en": {
+ "code": "en",
+ "name": "እንáŒáˆŠá‹áŠ›"
+ },
+ "or": {
+ "code": "or",
+ "name": "ኦሪያ"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "ኪሩጋዚ"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "ካማደኛ"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "ካታላን"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "ክሮሽያንኛ"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "ኮሪያኛ"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "ወáˆáˆ½"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "ዓረበኛ"
+ },
+ "he": {
+ "code": "he",
+ "name": "ዕብራስጥ"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "ዙሉኛ"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ዩክረኒኛ"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ደች"
+ },
+ "da": {
+ "code": "da",
+ "name": "ዴኒሽ"
+ },
+ "de": {
+ "code": "de",
+ "name": "ጀርመን"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ጃá“ንኛ"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "ጉጃራቲኛ"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "ጊዮርጊያኛ"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "ጋለቪኛ"
+ },
+ "el": {
+ "code": "el",
+ "name": "áŒáˆªáŠ¨áŠ›"
+ },
+ "it": {
+ "code": "it",
+ "name": "ጣሊያንኛ"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "áˆáˆ¨áŠ•áˆ³á‹­áŠ›"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "áŠáŠ’ሽ"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "á‹áˆ®áŠ›"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "áሪሰኛ"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "áርሲያኛ"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "á‘ንጃቢኛ"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "á“ሽቶ"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "á–ሊሽ"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "á–ርቱጋሊኛ"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "á–ርቱጋáˆáŠ› (ናይ ብራዚáˆ)"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "á–ርቱጋáˆáŠ› (ናይ á–ርቱጋáˆ)"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/to.json b/library/intl/resources/language/to.json
new file mode 100644
index 000000000..d7a685c78
--- /dev/null
+++ b/library/intl/resources/language/to.json
@@ -0,0 +1,738 @@
+{
+ "fr": {
+ "code": "fr",
+ "name": "lea fakafalanisē"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "lea fakafalanisÄ“-kÄnata"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "lea fakafalanisē-suisilani"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "lea fakafaloe"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "lea fakafilipaini"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "lea fakafilisia-hihifo"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "lea fakafinilani"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "lea fakafulÄ"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "lea fakafulilÄni"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "lea fakahausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "lea fakahepelū"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "lea fakahinitī"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "lea fakahÅlani"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "lea fakahÅlani-pelesiume"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "lea fakahungakalia"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "lea fakaʻaelani"
+ },
+ "af": {
+ "code": "af",
+ "name": "lea fakaʻafilikana"
+ },
+ "is": {
+ "code": "is",
+ "name": "lea fakaʻaisilani"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "lea fakaʻakani"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "lea fakaʻakihemi"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "lea fakaʻalapēnia"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "lea fakaʻalepea"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "lea fakaÊ»alepea (mÄmani)"
+ },
+ "am": {
+ "code": "am",
+ "name": "lea fakaʻameliki"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "lea fakaÊ»Ämenia"
+ },
+ "az": {
+ "code": "az",
+ "name": "lea fakaʻasapaisani"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "lea fakaʻasitūlia"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "lea fakaʻasu"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "lea fakaʻemipū"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "lea fakaʻesipulanito"
+ },
+ "et": {
+ "code": "et",
+ "name": "lea fakaÊ»esitÅnia"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "lea fakaʻeue"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "lea fakaÊ»euÅnito"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "lea fakaʻiangipeni"
+ },
+ "or": {
+ "code": "or",
+ "name": "lea fakaÊ»initia-Ê»olÄea"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "lea fakaÊ»initia-malÄialami"
+ },
+ "te": {
+ "code": "te",
+ "name": "lea fakaʻinitia-teluku"
+ },
+ "id": {
+ "code": "id",
+ "name": "lea fakaÊ»initÅnesia"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "lea fakaÊ»iÅlupa"
+ },
+ "it": {
+ "code": "it",
+ "name": "lea fakaʻītali"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "lea fakaʻualiseli"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "lea fakaʻuikūli"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "lea fakaʻūkalaʻine"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "lea fakaʻusipeki"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "lea fakaʻūtū"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "lea fakaiola-fonī"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "lea fakakaeliki"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "lea fakakalaʻalisuti"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "lea fakakalenisini"
+ },
+ "el": {
+ "code": "el",
+ "name": "lea fakakalisi"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "lea fakakalisia"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "lea fakakamipa"
+ },
+ "km": {
+ "code": "km",
+ "name": "lea fakakamipÅtia"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "lea fakakanata"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "lea fakakanita"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "lea fakakapile"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "lea fakakapuvelitianu"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "lea fakakasaki"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "lea fakakÄsimila"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "lea fakakatalani"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "lea fakakika"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "lea fakakikuiu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "lea fakakīsisi"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "lea fakakoila-sīni"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "lea fakakoilapolo-seni"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "lea fakakÅlea"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "lea fakakolongia"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "lea fakakuasio"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "lea fakakuloisia"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "lea fakakusī"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "lea fakakutalati"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "lea fakalaito-lomēnia"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "lea fakalakisimipeki"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "lea fakalangi"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "lea fakalativia"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "lea fakalau"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "lea fakalituania"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "lea fakalÅmenia"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "lea fakalomipÅ"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "lea fakaluÄ"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "lea fakaluaniti"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "lea fakaluīa"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "lea fakaluo"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "lea fakalupa-katanga"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "lea fakalūsia"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "lea fakamakÅnite"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "lea fakamakūa-meʻeto"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "lea fakamalakasi"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "lea fakamalati"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "lea fakamalei"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "lea fakamasai"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "lea fakamasame"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "lea fakamasitÅnia"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "lea fakamelu"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "lea fakamolisieni"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "lea fakamolitÄvia"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "lea fakamolota"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "lea fakamongokÅlia"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "lea fakamunitangi"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "lea fakanama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "lea fakanepali"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "lea fakanetepele-tokelau"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "lea fakanianikole"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "lea fakanikÅmipa"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "lea fakanoauē-ninosiki"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "lea fakanouaē-pokimali"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "lea fakanueli"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "lea fakapafia"
+ },
+ "en": {
+ "code": "en",
+ "name": "lea fakapÄlangi"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "lea fakapÄlangi-Ê»amelika"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "lea fakapÄlangi-Ê»aositelÄ“lia"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "lea fakapÄlangi-kÄnata"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "lea fakapamipala"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "lea fakapasaʻa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "lea fakapÄsiki"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "lea fakapasitÅ"
+ },
+ "be": {
+ "code": "be",
+ "name": "lea fakapelalusi"
+ },
+ "br": {
+ "code": "br",
+ "name": "lea fakapeletoni"
+ },
+ "my": {
+ "code": "my",
+ "name": "lea fakapema"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "lea fakapena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "lea fakapengikali"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "lea fakapēsia"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "lea fakapilitÄnia"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "lea fakapÅlani"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "lea fakaposinia"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "lea fakapÅto"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "lea fakapotukali"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "lea fakapotukali-ʻiulope"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "lea fakapotukali-palÄsili"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "lea fakapulukalia"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "lea fakapūnusapi"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "lea fakaputeni"
+ },
+ "se": {
+ "code": "se",
+ "name": "lea fakasami-tokelau"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "lea fakasamipulu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "lea fakasangikÅ"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "lea fakasangu"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "lea fakaseki"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "lea fakaselokī"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "lea fakasena"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "lea fakaseÅsia"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "lea fakasēpia"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "lea fakasiaina"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "lea fakasiaina-fakafaingofua"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "lea fakasiaina-tukufakaholo"
+ },
+ "de": {
+ "code": "de",
+ "name": "lea fakasiamane"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "lea fakasiamane-hake-suisilani"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "lea fakasiamane-ʻaositulia"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "lea fakasiamane-suisilani"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "lea fakasiamipala"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "lea fakasiapani"
+ },
+ "si": {
+ "code": "si",
+ "name": "lea fakasingihala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "lea fakasiona"
+ },
+ "es": {
+ "code": "es",
+ "name": "lea fakasipēnisi"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "lea fakasipēnisi-‘iulope"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "lea fakasipēnisi-mekisikou"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "lea fakasoka"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "lea fakasolÄvaki"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "lea fakasolovenia"
+ },
+ "so": {
+ "code": "so",
+ "name": "lea fakasomali"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "lea fakasÅpia-hake"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "lea fakasÅpia-hifo"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "lea fakasuahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "lea fakasuahili-kongikÅ"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "lea fakasuēteni"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "lea fakasulu"
+ },
+ "th": {
+ "code": "th",
+ "name": "lea fakatailani"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "lea fakataita"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "lea fakatamasaiti-ʻatilasi-loloto"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "lea fakatamasaiti-moloko"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "lea fakatamili"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "lea fakatasauaki"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "lea fakataselihiti"
+ },
+ "da": {
+ "code": "da",
+ "name": "lea fakatenimaʻake"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "lea fakateso"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "lea fakatikilinia"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "lea fakatipeti"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "lea fakatisÄma"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "lea fakatoake"
+ },
+ "to": {
+ "code": "to",
+ "name": "lea fakatonga"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "lea fakauēlesi"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "lea fakavai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "lea fakavietinami"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "lea fakavūniso"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lea lingikala"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/tr.json b/library/intl/resources/language/tr.json
new file mode 100644
index 000000000..525091b88
--- /dev/null
+++ b/library/intl/resources/language/tr.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaanca"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "de": {
+ "code": "de",
+ "name": "Almanca"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "Amerikan Ä°ngilizcesi"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amharca"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arapça"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Arnavutça"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturyasca"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Aşağı Sorbça"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Avrupa İspanyolcası"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Avrupa Portekizcesi"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Avustralya Ä°ngilizcesi"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "Avusturya Almancası"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerice"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basa Dili"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "Basitleştirilmiş Çince"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Baskça"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Batı Frizcesi"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengalce"
+ },
+ "be": {
+ "code": "be",
+ "name": "Beyaz Rusça"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Boşnakça"
+ },
+ "br": {
+ "code": "br",
+ "name": "Bretonca"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Brezilya Portekizcesi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgarca"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burmaca"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Butan Dili"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Çekçe"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Çerokice"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Çince"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danca"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "id": {
+ "code": "id",
+ "name": "Endonezce"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Ermenice"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonca"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroe Dili"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Farsça"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipince"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Fince"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Flamanca"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Fransızca"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Galce"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galiçyaca"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "Geleneksel Çince"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Grönland Dili"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Güceratça"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Gürcüce"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Hırvatça"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hintçe"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Hollandaca"
+ },
+ "he": {
+ "code": "he",
+ "name": "Ä°branice"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Ä°ngiliz Ä°ngilizcesi"
+ },
+ "en": {
+ "code": "en",
+ "name": "Ä°ngilizce"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Ä°rlandaca"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "İskoç Gal Dili"
+ },
+ "es": {
+ "code": "es",
+ "name": "Ä°spanyolca"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "İsveççe"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "İsviçre Almancası"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "İsviçre Fransızcası"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "İsviçre Yüksek Almancası"
+ },
+ "it": {
+ "code": "it",
+ "name": "Ä°talyanca"
+ },
+ "is": {
+ "code": "is",
+ "name": "Ä°zlandaca"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japonca"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabiliyece"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Kanada Fransızcası"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "Kanada Ä°ngilizcesi"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Katalanca"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakça"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "KeÅŸmirce"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kırgızca"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Kigaca"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Kirundi"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kmerce"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Kongo Svahili"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Korece"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Köln Diyalekti"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Kuzey Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Kuzey Sami"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Laoca"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Lehçe"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Letonca"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Litvanyaca"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Lüksemburgca"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Macarca"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Makedonca"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Malayca"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malgaşça"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltaca"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Meksika İspanyolcası"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "Modern Standart Arapça"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "MoÄŸolca"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "Moldovaca"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepalce"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norveççe Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norveççe Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya Dili"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Orta Fas Tamazigti"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Özbekçe"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Pencapça"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "PeÅŸtuca"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portekizce"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romanşça"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Romence"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Rusça"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "si": {
+ "code": "si",
+ "name": "Seylanca"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Sırpça"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovakça"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovence"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somalice"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standart Berberi Dili Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Svahili"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamilce"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "TaÅŸelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "Tayca"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu Dili"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetçe"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongaca"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Türkçe"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukraynaca"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urduca"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uygurca"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vietnamca"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yorubaca"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Yukarı Sorbça"
+ },
+ "el": {
+ "code": "el",
+ "name": "Yunanca"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zuluca"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/twq.json b/library/intl/resources/language/twq.json
new file mode 100644
index 000000000..ce102f744
--- /dev/null
+++ b/library/intl/resources/language/twq.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan senni"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "de": {
+ "code": "de",
+ "name": "Almaŋ senni"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amhaarik senni"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "be": {
+ "code": "be",
+ "name": "Belaruus senni"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengali senni"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulagaari senni"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burme senni"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Cek senni"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "es": {
+ "code": "es",
+ "name": "Espaaɲe senni"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Farsi senni"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Fransee senni"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "el": {
+ "code": "el",
+ "name": "Grek senni"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hawsance senni"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Holandee senni"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hungaari senni"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indoneesi senni"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Induu senni"
+ },
+ "en": {
+ "code": "en",
+ "name": "Inglisi senni"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "it": {
+ "code": "it",
+ "name": "Itaali senni"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japonee senni"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kmeer senni, Game here"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Koree senni"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Laaraw senni"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Maleezi senni"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Neepal senni"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Polonee senni"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portugee senni"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Punjaabi sennii"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Rumaani senni"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Ruusi senni"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Sinuwa senni, Mandareŋ"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somaali senni"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Suweede senni"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "th": {
+ "code": "th",
+ "name": "Taailandu senni"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamil senni"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq senni"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Turku senni"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukreen senni"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu senni"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vietnaam senni"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yorbance senni"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu senni"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/tzm.json b/library/intl/resources/language/tzm.json
new file mode 100644
index 000000000..edb862bb6
--- /dev/null
+++ b/library/intl/resources/language/tzm.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Tabelɣarit"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Tabenjabit"
+ },
+ "be": {
+ "code": "be",
+ "name": "Tabilarusit"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Tabinɣalit"
+ },
+ "my": {
+ "code": "my",
+ "name": "Taburmanit"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Taburtuɣalit"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "TaÄikt"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Tacinwit,Mandarin"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Tafarisit"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Tafá¹›ansist"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Tahawsat"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Tahenɣarit"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Tahindit"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Tahulaná¸it"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Tajappunit"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Takanit"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Takurit"
+ },
+ "de": {
+ "code": "de",
+ "name": "Talmanit"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Tamalizit"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Tamaziɣt"
+ },
+ "am": {
+ "code": "am",
+ "name": "Tamharit"
+ },
+ "en": {
+ "code": "en",
+ "name": "Tanglizt"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Tanippalit"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Tappulunit"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Taá¹›umanit"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Tarusit"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "es": {
+ "code": "es",
+ "name": "tasbelyunit"
+ },
+ "so": {
+ "code": "so",
+ "name": "Taá¹£umalit"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Taswidit"
+ },
+ "it": {
+ "code": "it",
+ "name": "Taá¹­alyant"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tatamilt"
+ },
+ "th": {
+ "code": "th",
+ "name": "Taá¹­ayt"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Taturkit"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Taviá¹­namit"
+ },
+ "km": {
+ "code": "km",
+ "name": "Taxmert ,Talammast"
+ },
+ "el": {
+ "code": "el",
+ "name": "Tayunanit"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Tayurubat"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "tazulut"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Taεrabt"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "id": {
+ "code": "id",
+ "name": "Tindunisit"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Tukranit"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Turdut"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ug.json b/library/intl/resources/language/ug.json
new file mode 100644
index 000000000..e6b20c302
--- /dev/null
+++ b/library/intl/resources/language/ug.json
@@ -0,0 +1,738 @@
+{
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "ئاددىي خەنچە"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "ئاستۇرىيەچە"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "ئاسۇچە"
+ },
+ "af": {
+ "code": "af",
+ "name": "ئاÙرىكانچە"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "ئاكانچە"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "ئاگەمچە"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "ئالبانچە"
+ },
+ "am": {
+ "code": "am",
+ "name": "ئامخاراچە"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "ئامÛرىكا ئىنگلىزچە"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "ئاۋسترالىيە ئىنگلىزچە"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "ئاۋستىرىيە Ú¯Ûرمانچە"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "ئەرمەنچە"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "ئەرەبچە"
+ },
+ "az": {
+ "code": "az",
+ "name": "ئەزەرىچە"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "ئەنگلىيە ئىنگلىزچە"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ئوردوچە"
+ },
+ "or": {
+ "code": "or",
+ "name": "ئورىياچە"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "ئۆزبÛÙƒÚ†Û•"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "ئۆلچەملىك ماراكەش تامازىتچە"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ئۇكرائىنچە"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ئۇيغۇرچە"
+ },
+ "he": {
+ "code": "he",
+ "name": "ئىبرانىچە"
+ },
+ "it": {
+ "code": "it",
+ "name": "ئىتاليانچە"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "ئىرÛلاندچە"
+ },
+ "es": {
+ "code": "es",
+ "name": "ئىسپانچە"
+ },
+ "is": {
+ "code": "is",
+ "name": "ئىسلاندچە"
+ },
+ "en": {
+ "code": "en",
+ "name": "ئىنگلىزچە"
+ },
+ "et": {
+ "code": "et",
+ "name": "ئÛستونچە"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "ئÛمبۇچە"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ئÛۋوندوچە"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ئÛÛ‹ÛÚ†Û•"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "باساچە"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "باسكىچە"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "باÙىياچە"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "بامباراچە"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "بودوچە"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "بوسنىيەچە"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "بۇتانچە"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "بۇلغارچە"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "بىرازىلىيە پورتۇگالچە"
+ },
+ "my": {
+ "code": "my",
+ "name": "بىرماچە"
+ },
+ "br": {
+ "code": "br",
+ "name": "بىرÛتونچە"
+ },
+ "be": {
+ "code": "be",
+ "name": "بÛلارۇسچە"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "بÛناچە"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "بÛنگالچە"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "پارسچە"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "پەنجابچە"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "پورتۇگالچە"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "پولەكچە"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "پۇشتۇچە"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "تامىلچە"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "تايتاچە"
+ },
+ "th": {
+ "code": "th",
+ "name": "تايلاندچە"
+ },
+ "to": {
+ "code": "to",
+ "name": "توڭانچە"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "توۋەن سÛربچە"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "تۈركچە"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "تىبەتچە"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "تىگرىنياچە"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "تÛسوچە"
+ },
+ "te": {
+ "code": "te",
+ "name": "تÛÙ„Û‡Ú¯Û‡Ú†Û•"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "جولاچە"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "چىگاچە"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Ú†Ûخچە"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Ú†Ûروكىچە"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "خائۇساچە"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "خەنچە"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "خورۋاتچە"
+ },
+ "da": {
+ "code": "da",
+ "name": "دانىشچە"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "دۇنيا تىلى"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "رومانىشچە"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "رومبوچە"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "رۇسچە"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "رۇمىنىيەچە"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "رۇندىچە"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "رىۋاچە"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "زارماچە"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "زۇلۇچە"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "سامبۇرۇچە"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "سانگوچە"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "سانگۇچە"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "سكوتچە"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "سوگاچە"
+ },
+ "so": {
+ "code": "so",
+ "name": "سومالىچە"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "سىلوۋاكچە"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "سىلوۋÛنىيەچە"
+ },
+ "si": {
+ "code": "si",
+ "name": "سىنگالچە"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "سىۋالىچە"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "سÛربچە"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "سÛناچە"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "شامبالاچە"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "شەرقىي سوڭخايچە"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "شوناچە"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Ø´Û‹Ûدچە"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "شىلخاچە"
+ },
+ "se": {
+ "code": "se",
+ "name": "شىمالى سامىچە"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "شىمالى ندەبەلەچە"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "شىمالىي سوڭخايچە"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "شىۋىتسارىيە ئÛگىزلىك Ú¯Ûرمانچە"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "شىۋىتسارىيە Ùىرانسۇزچە"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "غەربى Ùىرىزيەچە"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "ÙائÛروچە"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Ùۇلاچە"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Ùىرانسۇزچە"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Ùىرىئۇلىچە"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Ùىلىپپىنچە"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Ùىنچە"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "قازاقچە"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "قىرغىزچە"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "كابۇۋÛردىيانچە"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "كابىلÛÚ†Û•"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "كاتالانچە"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "كالÛنجىنچە"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "كامباچە"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "كانادا ئىنگلىزچە"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "كانادا Ùىرانسۇزچە"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "كانناداچە"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "كەشمىرچە"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "كورÛÙŠÛ•Ú†Û•"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "كولىشچە"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "كونگو سىۋالىچە"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "كويرا چىنىچە"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "كۋاسىيوچە"
+ },
+ "km": {
+ "code": "km",
+ "name": "كىخمÛرچە"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "كىكۇيۇچە"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "گالىتسىيانچە"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "گانداچە"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "گوللاندىيەچە"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "گۇجاراتچە"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "گۇسىچە"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "گىرۇزىنچە"
+ },
+ "el": {
+ "code": "el",
+ "name": "گىرÛÙƒÚ†Û•"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "گىرÛنلاندچە"
+ },
+ "de": {
+ "code": "de",
+ "name": "Ú¯Ûرمانچە"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Ú¯Ûرمانچە شىۋىتسارىيە"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "لائوسچە"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "لاتۋىيەچە"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "لانگىچە"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "لۇئوچە"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "لۇبا-كاتانگاچە"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "لۇياچە"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "لىتۋاچە"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "لىنگالاچە"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "لىيۇكسÛمبۇرگچە"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ماجارچە"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "ماچامچە"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "ماداغاسقارچە"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "ماراتچە"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "ماسايچە"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "ماكوندÛÚ†Û•"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "ماكۇۋاچە"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "ماكÛدونچە"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "مالايامچە"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "مالايچە"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "مالتاچە"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "مەركىزى ئاتلاس تاماچاگىت"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "مورىسيÛÙ†Ú†Û•"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "موڭغۇلچە"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "مۇئÛرچە"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "مۇرەككەپ خەنچە"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "مۇنداڭچە"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Ù…Ûرۇچە"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Ù…Ûكسىكا ئىسپانچە"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "ناماچە"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "نگومباچە"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "نورۋىگىيە بوكمالچە"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "نىيانكولÛÚ†Û•"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Ù†Ûپالچە"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ھازىرقى زامان ئۆلچەملىك ئەرەبچە"
+ },
+ "id": {
+ "code": "id",
+ "name": "ھىندونÛزىيەچە"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "ھىندىچە"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "ۋالسÛرچە"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "ۋايچە"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "ۋۇنجوچە"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ۋىيÛتنامچە"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Û‹Ûلشچە"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ياپونچە"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "ياڭبەنچە"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "ياۋروپا ئىسپانچە"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "ياۋروپا پورتۇگالچە"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "يورۇباچە"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "يۇقىرىقى سÛربچە"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "ÙŠÛÚ­Ù‰ نورۋÛÚ¯Ú†Û•"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/uk.json b/library/intl/resources/language/uk.json
new file mode 100644
index 000000000..50d152d7e
--- /dev/null
+++ b/library/intl/resources/language/uk.json
@@ -0,0 +1,738 @@
+{
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "агем"
+ },
+ "az": {
+ "code": "az",
+ "name": "азербайджанÑька"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "акан"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "албанÑька"
+ },
+ "am": {
+ "code": "am",
+ "name": "амхарÑька"
+ },
+ "en": {
+ "code": "en",
+ "name": "англійÑька"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "англійÑька британÑька"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "арабÑька"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "аÑтурÑька"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "аÑу"
+ },
+ "af": {
+ "code": "af",
+ "name": "африкаанÑ"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "бамбара"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "баÑа"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "баÑкÑька"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "бафіа"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "бена"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "бенгальÑька"
+ },
+ "be": {
+ "code": "be",
+ "name": "білоруÑька"
+ },
+ "my": {
+ "code": "my",
+ "name": "бірманÑька"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "бодо"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "болгарÑька"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "боÑнійÑька"
+ },
+ "br": {
+ "code": "br",
+ "name": "бретонÑька"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "букмол (ÐорвегіÑ)"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "вʼєтнамÑька"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "ваї"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "ВалзерÑька"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "валлійÑька"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "верхньолужицька"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "верхньонімецька (ШвейцаріÑ)"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "вірменÑька"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "вуньо"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "гаельÑька"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "галіÑійÑька"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "ганда"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "гінді"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "голландÑька"
+ },
+ "el": {
+ "code": "el",
+ "name": "грецька"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "грузинÑька"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "гуджараті"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "гуÑÑ–Ñ—"
+ },
+ "da": {
+ "code": "da",
+ "name": "данÑька"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "джерма"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "дзонг-ке"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "дьола-фоні"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "еве"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "евондо"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "ембу"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "еÑперанто"
+ },
+ "et": {
+ "code": "et",
+ "name": "еÑтонÑька"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "західно-фризька"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "зулуÑька"
+ },
+ "he": {
+ "code": "he",
+ "name": "іврит"
+ },
+ "id": {
+ "code": "id",
+ "name": "індонезійÑька"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "ірландÑька"
+ },
+ "is": {
+ "code": "is",
+ "name": "Ñ–ÑландÑька"
+ },
+ "es": {
+ "code": "es",
+ "name": "Ñ–ÑпанÑька"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Ñ–ÑпанÑька (Європа)"
+ },
+ "it": {
+ "code": "it",
+ "name": "італійÑька"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "йоруба"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "кабільÑька"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "кабувердіану"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "казахÑька"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "калаалліÑут"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "календжин"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "камба"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "каннада"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "каталонÑька"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "кашмірÑька"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "квазіо"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "киргизька"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "китайÑька"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "кіга"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "кікуйю"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "койра чіїні"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "койраборо Ñені"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "колоніан"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "конгійÑьке Ñуахілі"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "корейÑька"
+ },
+ "km": {
+ "code": "km",
+ "name": "кхмерÑька"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "лангі"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "лаоÑька"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "латвійÑька"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "литовÑька"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "лінгала"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "луба-катанга"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "луйÑ"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "луо"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "люкÑембурзька"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "маврикійÑька креольÑька"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "македонÑька"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "маконде"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "макува-меето"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "малагаÑійÑька"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "малайÑька"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "малаÑлам"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "мальтійÑька"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "маратхі"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "маÑаї"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "мачаме"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "меру"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "молдавÑька"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "монгольÑька"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "мунданг"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "нама"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "нгомба"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "ндебелє північна"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "непальÑька"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "нижньолужицька"
+ },
+ "de": {
+ "code": "de",
+ "name": "німецька"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "німецька швейцарÑька"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "нуер"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "нюношк (ÐорвегіÑ)"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "ньÑнколе"
+ },
+ "or": {
+ "code": "or",
+ "name": "оріÑ"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "панджабі"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "перÑька"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "польÑька"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "португальÑька"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "португальÑька (Європа)"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "пушту"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Рва"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "ретороманÑька"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "ромбо"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "роÑійÑька"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "румунÑька"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "рунді"
+ },
+ "se": {
+ "code": "se",
+ "name": "ÑаамÑька північна"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Ñамбуру"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Ñанго"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Ñангу"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Ñена"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "ÑербÑька"
+ },
+ "si": {
+ "code": "si",
+ "name": "ÑингальÑька"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Ñловацька"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "ÑловенÑька"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Ñога"
+ },
+ "so": {
+ "code": "so",
+ "name": "Ñомалі"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Ñтандартна марокканÑька берберÑька"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Ñуахілі"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ÑучаÑна Ñтандартна арабÑька"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "таіта"
+ },
+ "th": {
+ "code": "th",
+ "name": "тайÑька"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "тамільÑька"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "таÑавак"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "тачеліт"
+ },
+ "te": {
+ "code": "te",
+ "name": "телугу"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "теÑо"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "тибетÑька"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "тигриньÑ"
+ },
+ "to": {
+ "code": "to",
+ "name": "тонганÑька"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "турецька"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "угорÑька"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "узбецька"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "уйгурÑька"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "українÑька"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "урду"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "фарерÑька"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "філіппінÑька"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "фінÑька"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "фламандÑька"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "французька"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "фріульÑька"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "фула"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "хауÑа"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "хорватÑька"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "центральномароканÑька тамазіт"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "черокі"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "чеÑька"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "шамбала"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "шведÑька"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "шона"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Ñнгбен"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ÑпонÑька"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ur-IN.json b/library/intl/resources/language/ur-IN.json
new file mode 100644
index 000000000..e544eb36e
--- /dev/null
+++ b/library/intl/resources/language/ur-IN.json
@@ -0,0 +1,738 @@
+{
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "اردو"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "ارمینی"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "ازبیک"
+ },
+ "et": {
+ "code": "et",
+ "name": "اسٹونی"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "اسٹینڈرڈ مراقشی تمازیقی"
+ },
+ "it": {
+ "code": "it",
+ "name": "اطالوی"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "اغم"
+ },
+ "af": {
+ "code": "af",
+ "name": "اÙریقی"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "اکان"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "البانی"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "امبو"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "امریکی انگریزی"
+ },
+ "am": {
+ "code": "am",
+ "name": "امÛاری"
+ },
+ "id": {
+ "code": "id",
+ "name": "انڈونیثیائی"
+ },
+ "en": {
+ "code": "en",
+ "name": "انگریزی"
+ },
+ "or": {
+ "code": "or",
+ "name": "اورÙیا"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "ایسپرانٹو"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ایو"
+ },
+ "az": {
+ "code": "az",
+ "name": "آزربائیجانی"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "آسان چینی"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "آسٹریائی جرمن"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "آسٹریلیائی انگریزی"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "آسو"
+ },
+ "is": {
+ "code": "is",
+ "name": "آئس لینڈک"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "آئغور"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "آئیرÙØ´"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "باسکی"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "باÙيا"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "بالائی صوربی"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "بامبرا"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "برازیلی پرتگالی"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "برطانوی انگریزی"
+ },
+ "my": {
+ "code": "my",
+ "name": "برمی"
+ },
+ "br": {
+ "code": "br",
+ "name": "بریٹن"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "بلغاری"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "بنگالی"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "بوڈو"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "بوسنی"
+ },
+ "be": {
+ "code": "be",
+ "name": "بیلاروسی"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "بینا"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Ù¾Ùرتگالی"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "پشتو"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "پنجابی"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "پولستانی"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "تاساواق"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "تبتی"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "ترکی"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "تشلحيت"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "تمل"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "تیتا"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "تیسو"
+ },
+ "te": {
+ "code": "te",
+ "name": "تیلگو"
+ },
+ "th": {
+ "code": "th",
+ "name": "تھائی"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "ٹگرینیا"
+ },
+ "to": {
+ "code": "to",
+ "name": "ٹونگن"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "جاپانی"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "جارجی"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "جدید معیاری عربی"
+ },
+ "de": {
+ "code": "de",
+ "name": "جرمن"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "جولا Ùونيا"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "چیروکی"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "چیک"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "چینی"
+ },
+ "km": {
+ "code": "km",
+ "name": "خمیر"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ÚˆÚ†"
+ },
+ "da": {
+ "code": "da",
+ "name": "ڈینش"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "روا"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "روایتی چینی"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "روسی"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "رومانش"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "رومانوی"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "رومبو"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "رونڈی"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "زرمÛ"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "زولو"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "ژونگکھا"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "سامبورو"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "سانجو"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "سانگو"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "سکاٹ گیلÙÚ©"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "سلوواک"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "سلووینیائی"
+ },
+ "si": {
+ "code": "si",
+ "name": "سنÛالا"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "سواحلی"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "سوگا"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "سویڈش"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "سوئس جرمن"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "سوئس Ùرینچ"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "سوئس Ûائی جرمن"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "سینا"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "شامبالا"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "شمالی دبیل"
+ },
+ "se": {
+ "code": "se",
+ "name": "شمالی سامی"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "شونا"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "شیغا"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "صربی"
+ },
+ "so": {
+ "code": "so",
+ "name": "صومالی"
+ },
+ "he": {
+ "code": "he",
+ "name": "عبرانی"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "عربی"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Ùارسی"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Ùارويز"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Ùرانسیسی"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Ùلیپینو"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Ùیلنڈری"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Ùینیش"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "قبائلی"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "قزاخ"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "کامبا"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "کانگو سواحلی"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "کتالان"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "کراتی"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "کرغیزی"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "کشمیری"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Ú©Ù†Ú‘"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "کوریائی"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "کیکویو"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "کینیڈین انگریزی"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "کینیڈین Ùرانسیسی"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "گالیشیائی"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "گجراتی"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "گسی"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "گینڈا"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "لانگی"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "لاؤ"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "لبا-كاتانجا"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "لتھÙواینین"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "لٹويای"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "لکسمبرگی"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Ù„Ùنگَلا"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "لو"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "لویا"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "لوئر صوربی"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "ماخاوا-ميتو"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "ماسای"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "ماشیم"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "مالایالم"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "مالائی"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "مالٹی"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "مالدووا"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "ماكونده"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "مڈدانگ"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "مراٹهی"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "مغربی Ùریسیائی"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "مقدونیائی"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "ملاگاسی"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "منگؤلی"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "موریسیین"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "میرو"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "میکسیکن Ûسپانوی"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "نارویجین بوکمل"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "ناما"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "نگومبا"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "نورویجینی نینورسک"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "نویر"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "نیپالی"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "نینکول"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "وائی"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "وسطی اٹلس تمازغت"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "ونجو"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ویتنامی"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "ویلش"
+ },
+ "es": {
+ "code": "es",
+ "name": "Ûسپانوی"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Ûندی"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Ûنگیرین"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Ûؤسا"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "یورپی پرتگالی"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "یورپی Ûسپانوی"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "یوروبا"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "یوکرینیائی"
+ },
+ "el": {
+ "code": "el",
+ "name": "یونانی"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "كابويرديانو"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "كالاليست"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "كالينجين"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "كوايسو"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "كويرا شيني"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "كويرابورو سينی"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/ur.json b/library/intl/resources/language/ur.json
new file mode 100644
index 000000000..4011f8c57
--- /dev/null
+++ b/library/intl/resources/language/ur.json
@@ -0,0 +1,738 @@
+{
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "اپر سربیائی"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "اردو"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "ارمینی"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "ازبیک"
+ },
+ "et": {
+ "code": "et",
+ "name": "اسٹونین"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "اسٹینڈرڈ مغربی امازیقی"
+ },
+ "it": {
+ "code": "it",
+ "name": "اطالوی"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "اغم"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "اکان"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "البانی"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "امبو"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "امریکی انگریزی"
+ },
+ "am": {
+ "code": "am",
+ "name": "امÛاری"
+ },
+ "id": {
+ "code": "id",
+ "name": "انڈونیثیائی"
+ },
+ "en": {
+ "code": "en",
+ "name": "انگریزی"
+ },
+ "or": {
+ "code": "or",
+ "name": "اورÙیا"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "اونجو"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "ایسپرانٹو"
+ },
+ "af": {
+ "code": "af",
+ "name": "ایÙریکانز"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ایو"
+ },
+ "az": {
+ "code": "az",
+ "name": "آزربائیجانی"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "آسٹریائی جرمن"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "آسٹریلیائی انگریزی"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "آسو"
+ },
+ "is": {
+ "code": "is",
+ "name": "آئس لینڈک"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "آئیرÙØ´"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "باسکی"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "باÙيا"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "برازیلی پرتگالی"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "برطانوی انگریزی"
+ },
+ "my": {
+ "code": "my",
+ "name": "برمی"
+ },
+ "br": {
+ "code": "br",
+ "name": "بریٹن"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "بلغاری"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "بمبارا"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "بنگالی"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "بوڈو"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "بوسنی"
+ },
+ "be": {
+ "code": "be",
+ "name": "بیلاروسی"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "بینا"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Ù¾Ùرتگالی"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "پشتو"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "پنجابی"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "پولستانی"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "تاساواق"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "تائتا"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "تبتی"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "ترکی"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "تشلحيت"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "تمل"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "تیسو"
+ },
+ "te": {
+ "code": "te",
+ "name": "تیلگو"
+ },
+ "th": {
+ "code": "th",
+ "name": "تھائی"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "ٹگرینیا"
+ },
+ "to": {
+ "code": "to",
+ "name": "ٹونگن"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "جاپانی"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "جارجی"
+ },
+ "de": {
+ "code": "de",
+ "name": "جرمن"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "جولا Ùونيا"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "چیروکی"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "چیک"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "چیگا"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "چینی"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "چینی (آسان کردÛ)"
+ },
+ "km": {
+ "code": "km",
+ "name": "خمیر"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ÚˆÚ†"
+ },
+ "da": {
+ "code": "da",
+ "name": "ڈینش"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "ذیلی سربیائی"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "روایتی چینی"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "روسی"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "رومانش"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "رومبو"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "رومنی"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "رونڈی"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "زرما"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "زولو"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "ژونگکھا"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "سامبورو"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "سانغو"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "سانگو"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "سکاٹ گیلÙÚ©"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "سلوواک"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "سلووینیائی"
+ },
+ "si": {
+ "code": "si",
+ "name": "سنÛالا"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "سواحلی"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "سوگا"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "سویڈش"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "سوئس جرمن"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "سوئس Ùرینچ"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "سوئس Ûائی جرمن"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "سینا"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "سینٹرل ایٹلس ٹمازائٹ"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "شامبالا"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "شمالی دبیل"
+ },
+ "se": {
+ "code": "se",
+ "name": "شمالی سامی"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "شونا"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "صربی"
+ },
+ "so": {
+ "code": "so",
+ "name": "صومالی"
+ },
+ "he": {
+ "code": "he",
+ "name": "عبرانی"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "عربی"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Ùارسی"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Ùرانسیسی"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Ùلیپینو"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "ÙلیمÙØ´"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Ùیروئیز"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Ùینیش"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "قبائلی"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "قزاخ"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "کاٹالانین"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "کامبا"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "کانگو سواحلی"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "کراتی"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "کرغیزی"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "کشمیری"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "کنّاڈا"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "کوریائی"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "کیکو"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "کینیڈین انگریزی"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "کینیڈین Ùرانسیسی"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "گالیشیائی"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "گجراتی"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "گسی"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "گومبا"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "گینڈا"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "لانگی"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "لاؤ"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "لبا-كاتانجا"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "لتھÙواینین"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "لگژمبرگ کا باشندÛ"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Ù„Ùنگَلا"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "لو"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "لویا"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "لیٹوین"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "ماخاوا-ميتو"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ماڈرن اسٹینڈرڈ عربی"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "ماسای"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "ماشیم"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "مالایالم"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "مالائی"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "مالٹی"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "مالدووا"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "ماكونده"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "مراٹهی"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "مغربی Ùریسیئن"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "مقدونیائی"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "ملاگاسی"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "منڈانگ"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "منگؤلی"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "موریسیین"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "میرو"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "میکسیکن Ûسپانوی"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "نارویجین بوکمل"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "ناما"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "نورویجینی نینورسک"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "نویر"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "نیپالی"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "نینکول"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "وائی"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ویتنامی"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "ویلش"
+ },
+ "es": {
+ "code": "es",
+ "name": "Ûسپانوی"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Ûندی"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Ûنگیرین"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Ûؤسا"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "یورپی پرتگالی"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "یورپی Ûسپانوی"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "یوروبا"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "یوکرینیائی"
+ },
+ "el": {
+ "code": "el",
+ "name": "یونانی"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "یوئگÛر"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "كابويرديانو"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "كالاليست"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "كالينجين"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "كوايسو"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "كويرا شيني"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "كويرابورو سينی"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/uz-Cyrl.json b/library/intl/resources/language/uz-Cyrl.json
new file mode 100644
index 000000000..28f35748d
--- /dev/null
+++ b/library/intl/resources/language/uz-Cyrl.json
@@ -0,0 +1,738 @@
+{
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Ðлбанча"
+ },
+ "am": {
+ "code": "am",
+ "name": "Ðмхарча"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Ðрабча"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Ðрманча"
+ },
+ "af": {
+ "code": "af",
+ "name": "Ðфриканча"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "БаÑкча"
+ },
+ "be": {
+ "code": "be",
+ "name": "БеларуÑча"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Бенгалча"
+ },
+ "my": {
+ "code": "my",
+ "name": "Бирманча"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Болгарча"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "БоÑниÑча"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Венгрча"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Вьетнамча"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Галицийча"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Голландча"
+ },
+ "el": {
+ "code": "el",
+ "name": "Грекча"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Грузинча"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Гужарати"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Ғарбий фризианча"
+ },
+ "da": {
+ "code": "da",
+ "name": "ДаниÑча"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Зулу"
+ },
+ "he": {
+ "code": "he",
+ "name": "Иброний"
+ },
+ "en": {
+ "code": "en",
+ "name": "Инглизча"
+ },
+ "id": {
+ "code": "id",
+ "name": "ИндонезиÑча"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Ирландча"
+ },
+ "is": {
+ "code": "is",
+ "name": "ИÑландча"
+ },
+ "es": {
+ "code": "es",
+ "name": "ИÑпанча"
+ },
+ "it": {
+ "code": "it",
+ "name": "ИталÑнча"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Йоруба"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Каннада"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Каталанча"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Кашмирча"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "КорейÑча"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Қирғизча"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Қозоқча"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Лао"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Латишча"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Литвача"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "ЛюкÑембургча"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Македонча"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "МалагаÑи"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Малайалам"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Малайча"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Мальтача"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Марати"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Ðепалча"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Ðорвегча Бокмал"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Ðорвегча ÐинорÑк"
+ },
+ "az": {
+ "code": "az",
+ "name": "Озарбайжонча"
+ },
+ "de": {
+ "code": "de",
+ "name": "Олмонча"
+ },
+ "or": {
+ "code": "or",
+ "name": "ОриÑ"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Панжобча"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "ПолÑкча"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Португалча"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Пушту"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Романча"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Руминча"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "РуÑча"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Сербча"
+ },
+ "si": {
+ "code": "si",
+ "name": "Синхала"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Словакча"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Словенча"
+ },
+ "so": {
+ "code": "so",
+ "name": "Сомалича"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Стандарт Марокаш Тамазит"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Суахили"
+ },
+ "th": {
+ "code": "th",
+ "name": "Тайча"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Тамилча"
+ },
+ "te": {
+ "code": "te",
+ "name": "Телугу"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Тибетча"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "ТигриньÑ"
+ },
+ "to": {
+ "code": "to",
+ "name": "Тонгоча"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Туркча"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Уйғурча"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Украинча"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Урду"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "УÑлÑча"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Ўзбек"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "ФарÑрча"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Филипино"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Финча"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Фламандча"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "ФорÑча"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Французча"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "ХауÑа"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Хитойча"
+ },
+ "km": {
+ "code": "km",
+ "name": "Хмерча"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Хорватча"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Ҳиндча"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Чехча"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Шведча"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Ð¨Ð²ÐµÐ¹Ñ†Ð°Ñ€Ð¸Ñ Ð½ÐµÐ¼Ð¸ÑчаÑи"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "ЭÑперанто"
+ },
+ "et": {
+ "code": "et",
+ "name": "ЭÑтонча"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Японча"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/uz.json b/library/intl/resources/language/uz.json
new file mode 100644
index 000000000..12114dc68
--- /dev/null
+++ b/library/intl/resources/language/uz.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "afrikancha"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "ag‘emcha"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akancha"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "albancha"
+ },
+ "am": {
+ "code": "am",
+ "name": "amxarcha"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "anʼanaviy xitoycha"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "arabcha"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "armancha"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "asucha"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Avstraliya inglizchasi"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "Avstriya olmonchasi"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "bafiycha"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "bambarcha"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "baskcha"
+ },
+ "be": {
+ "code": "be",
+ "name": "belaruscha"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "benacha"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "bengalcha"
+ },
+ "my": {
+ "code": "my",
+ "name": "birmancha"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "bodocha"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bolgarcha"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "bosniycha"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Braziliya portugalchasi"
+ },
+ "br": {
+ "code": "br",
+ "name": "bretoncha"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Britaniya inglizchasi"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "cherokcha"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "chexcha"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "chigcha"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "da": {
+ "code": "da",
+ "name": "datcha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "embucha"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "esperantocha"
+ },
+ "et": {
+ "code": "et",
+ "name": "estoncha"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "farercha"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "filipincha"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "fincha"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "flamandcha"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "forscha"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "fransuzcha"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "galitsiycha"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "gandcha"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "gʻarbiy friziancha"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "gollandcha"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "gruzincha"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "gujoratcha"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "guzcha"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "hindcha"
+ },
+ "he": {
+ "code": "he",
+ "name": "ibroniy"
+ },
+ "id": {
+ "code": "id",
+ "name": "indoneyzcha"
+ },
+ "en": {
+ "code": "en",
+ "name": "inglizcha"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "irlandcha"
+ },
+ "is": {
+ "code": "is",
+ "name": "islandcha"
+ },
+ "es": {
+ "code": "es",
+ "name": "ispancha"
+ },
+ "it": {
+ "code": "it",
+ "name": "italyancha"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "ivicha"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "kabuverdiancha"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "kalallisutcha"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "kalenjincha"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "kambcha"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Kanada fransuzchasi"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "Kanada inglizchasi"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "kannadcha"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "kashmircha"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "katalancha"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "kikuycha"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "kongo svahiliycha"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "koreyscha"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "koryaboro senniycha"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "kvaziycha"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "langcha"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "laoscha"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "latishcha"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "lingalcha"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "litovcha"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "luba-katangcha"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "luocha"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "luycha"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "lyuksemburgcha"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "machamcha"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "makedoncha"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "makuva-mittocha"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "malagasiycha"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "malayamcha"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "malaycha"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "maltacha"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "maqondiy"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "maratcha"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "markaziy atlas vaqt zonasi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "masaycha"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "Meksika ispanchasi"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "merucha"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "mo‘g‘ulcha"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "moldovan rumincha"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "morisyencha"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "mundangcha"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "namacha"
+ },
+ "de": {
+ "code": "de",
+ "name": "nemischa"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nepalcha"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "ngombcha"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "norvegcha bokmal"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "norvegcha ninorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "noyrcha"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "nyankolcha"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "oʻzbekcha"
+ },
+ "or": {
+ "code": "or",
+ "name": "oriycha"
+ },
+ "az": {
+ "code": "az",
+ "name": "ozarbayjoncha"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "panjobcha"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "polyakcha"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "portugalcha"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "pushtu tili"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "qirgʻizcha"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "qobilcha"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "qoyra-chincha"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "qozoqcha"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "quyi sorbcha"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "romancha"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "rombacha"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "ruandcha"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "rumincha"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "rundcha"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ruscha"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "samburcha"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "sangoancha"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "sanguancha"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "seniycha"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "serbcha"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "shambalacha"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "shimoliy ndebelcha"
+ },
+ "se": {
+ "code": "se",
+ "name": "shimoliy semiycha"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "shoniycha"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "shvedcha"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Shvesariya fransuzchasi"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Shvesariya olmonchasi"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "shveysariya nemischasi"
+ },
+ "si": {
+ "code": "si",
+ "name": "sinholcha"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "slovakcha"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "slovencha"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "soddalashtirilgan xitoycha"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "sogancha"
+ },
+ "so": {
+ "code": "so",
+ "name": "somalicha"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "standart marokash tamazit"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "svahilcha"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "tachilgitcha"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "taitcha"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "tamilcha"
+ },
+ "th": {
+ "code": "th",
+ "name": "taycha"
+ },
+ "te": {
+ "code": "te",
+ "name": "telugvancha"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "tesoancha"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "tibetcha"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "tigrincha"
+ },
+ "to": {
+ "code": "to",
+ "name": "tongocha"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "tosovoqcha"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "turkcha"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "uelscha"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ukraincha"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "urducha"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "uygʻurcha"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "vayancha"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "vengrcha"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "vunjoancha"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "vyetnamcha"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "xauscha"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "xitoycha"
+ },
+ "km": {
+ "code": "km",
+ "name": "xmercha"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "xorvatcha"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "yaponcha"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Yevropa ispanchasi"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Yevropa portugalchasi"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "yola-fonyicha"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "yorubcha"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "yovoncha"
+ },
+ "el": {
+ "code": "el",
+ "name": "yunoncha"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "yuqori sorbcha"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "zamonavij standart arabcha"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "zarmacha"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "zuluancha"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/vai-Latn.json b/library/intl/resources/language/vai-Latn.json
new file mode 100644
index 000000000..520e4bae2
--- /dev/null
+++ b/library/intl/resources/language/vai-Latn.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akaŋ"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amihári"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "be": {
+ "code": "be",
+ "name": "Bhelarusaŋ"
+ },
+ "my": {
+ "code": "my",
+ "name": "Bhɛmísi"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bhɛŋgáli"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bhɔgerɛŋ"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Chaniĩ"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ChÉ›"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Dɔchi"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Fɛŋsi"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hawusa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "el": {
+ "code": "el",
+ "name": "Hɛlɛŋ"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Híiŋdi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Hɔŋgérɛŋ"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "id": {
+ "code": "id",
+ "name": "Ãndonisiyɛŋ"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "it": {
+ "code": "it",
+ "name": "Itáliyɛŋ"
+ },
+ "de": {
+ "code": "de",
+ "name": "Jamáĩ"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japaníĩ"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kimɛɛ̃ tɛ"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Koríyɛŋ"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Lahabu"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Maléee"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nipali"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Ɔdu"
+ },
+ "es": {
+ "code": "es",
+ "name": "Panyɛĩ"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Pɛɛsiyɛŋ"
+ },
+ "en": {
+ "code": "en",
+ "name": "Poo"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Potokíi"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "PÉ”Ìlési"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Puŋjabhi"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Romíniyɛŋ"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Rɔshiyɛŋ"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somáli"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Súwídɛŋ"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "th": {
+ "code": "th",
+ "name": "Tái"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamíli"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "TÉ”Ìki"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Viyamíĩ"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yóróbha"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Yukureniyɛŋ"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zúlu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/vai.json b/library/intl/resources/language/vai.json
new file mode 100644
index 000000000..27017be31
--- /dev/null
+++ b/library/intl/resources/language/vai.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "be": {
+ "code": "be",
+ "name": "ꔆꕞꖩꔻ"
+ },
+ "it": {
+ "code": "it",
+ "name": "ꔤꕚꔷꘂꘋ"
+ },
+ "id": {
+ "code": "id",
+ "name": "ꔤꖆꕇꔻꘂꘋ"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "ꔦꔺ"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ꔲꕩꕯꕆꔧ"
+ },
+ "km": {
+ "code": "km",
+ "name": "ꕃꘈꗢ"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "ꕇê•ê”·"
+ },
+ "am": {
+ "code": "am",
+ "name": "ꕉꕆꕌꔸ"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "ꕉꕪꘋ"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "ꕌꖙꕢ"
+ },
+ "es": {
+ "code": "es",
+ "name": "ê•ê˜Šê”§"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "ꕙꔤ"
+ },
+ "th": {
+ "code": "th",
+ "name": "ꕚꔤ"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "ꕚꕆꔷ"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "ê•žê•Œê–"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "ꕦꕇꔧ"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ꕧê•ê•‡ê”§"
+ },
+ "de": {
+ "code": "de",
+ "name": "ꕧꕮꔧ"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "ꕮꔒꔀ"
+ },
+ "en": {
+ "code": "en",
+ "name": "ꕶꕱ"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "ꕶꕿꕃꔤ"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "ꖄꕆꕇꘂꘋ"
+ },
+ "so": {
+ "code": "so",
+ "name": "ꖇꕮꔷ"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ê–Žê–„ê•‘"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "ê–ꔸꘂꘋ"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "ꖛꕨꔬ"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "ꖬꔨꗵꘋ"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "ꖮꖨ"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ꖳꖴꔓꕇꘂꘋ"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ꖺꖦ"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ꖽꔟꗸꘋ"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "ê—ê”’ê”»"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ꗂꔠꗸꘋ"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "ꗋꕃ"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ê—ꔿ"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ê—ꖺꔻꘂꘋ"
+ },
+ "el": {
+ "code": "el",
+ "name": "ꗥꗷꘋ"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "ꗨꗡꔻꘂꘋ"
+ },
+ "my": {
+ "code": "my",
+ "name": "ꗩꕆꔻ"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "ê—©ê•­ê”·"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "ꗱꘋꔻ"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ê—¿ê—¡"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/vi.json b/library/intl/resources/language/vi.json
new file mode 100644
index 000000000..9601780eb
--- /dev/null
+++ b/library/intl/resources/language/vi.json
@@ -0,0 +1,738 @@
+{
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Tiếng Ả Rập"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "Tiếng Ả Rập Hiện đại"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Tiếng Aghem"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Tiếng Ai-len"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Tiếng Akan"
+ },
+ "am": {
+ "code": "am",
+ "name": "Tiếng Amharic"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Tiếng An-ba-ni"
+ },
+ "en": {
+ "code": "en",
+ "name": "Tiếng Anh"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Tiếng Anh (Anh)"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "Tiếng Anh (Mỹ)"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Tiếng Armenia"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Tiếng Asturias"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Tiếng Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Tiếng Azerbaijan"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Tiếng Ba Lan"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Tiếng Ba Tư"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Tiếng Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Tiếng Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Tiếng Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Tiếng Basque"
+ },
+ "be": {
+ "code": "be",
+ "name": "Tiếng Belarus"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Tiếng Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Tiếng Bengali"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Tiếng Bodo"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Tiếng Bồ Äào Nha"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Tiếng Bồ Äào Nha (Braxin)"
+ },
+ "br": {
+ "code": "br",
+ "name": "Tiếng Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Tiếng Bulgaria"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Tiếng Catalan"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Tiếng Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Tiếng Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Tiếng Cologne"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Tiếng Croatia"
+ },
+ "he": {
+ "code": "he",
+ "name": "Tiếng Do Thái"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Tiếng Dzongkha"
+ },
+ "da": {
+ "code": "da",
+ "name": "Tiếng Äan Mạch"
+ },
+ "de": {
+ "code": "de",
+ "name": "Tiếng Äức"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Tiếng Äức (Thụy SÄ©)"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Tiếng Embu"
+ },
+ "et": {
+ "code": "et",
+ "name": "Tiếng Estonia"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Tiếng Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Tiếng Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Tiếng Faore"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Tiếng Flemish"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Tiếng Frisia"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Tiếng Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Tiếng Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Tiếng Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Tiếng Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Tiếng Gruzia"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Tiếng Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Tiếng Gusii"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Tiếng Hà Lan"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Tiếng Hạ Sorbia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Tiếng Hàn"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Tiếng Hausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Tiếng Hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Tiếng Hungary"
+ },
+ "el": {
+ "code": "el",
+ "name": "Tiếng Hy Lạp"
+ },
+ "is": {
+ "code": "is",
+ "name": "Tiếng Iceland"
+ },
+ "id": {
+ "code": "id",
+ "name": "Tiếng Indonesia"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Tiếng Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Tiếng Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Tiếng Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Tiếng Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Tiếng Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Tiếng Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Tiếng Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Tiếng Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Tiếng Kazakh"
+ },
+ "km": {
+ "code": "km",
+ "name": "Tiếng Khơ-me"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Tiếng Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Tiếng Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Tiếng Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Tiếng Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Tiếng Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Tiếng Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Tiếng Lào"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Tiếng Latvia"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Tiếng Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Tiếng Lít-va"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Tiếng Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Tiếng Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Tiếng Luxembourg"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Tiếng Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Tiếng Macedonia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Tiếng Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Tiếng Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Tiếng Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Tiếng Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Tiếng Malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Tiếng Malaysia"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Tiếng Malt"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Tiếng Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Tiếng Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Tiếng Meru"
+ },
+ "my": {
+ "code": "my",
+ "name": "Tiếng Miến Äiện"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "Tiếng Moldova"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Tiếng Morisyen"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Tiếng Mông Cổ"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Tiếng Mundang"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Tiếng Na Uy (Bokmål)"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Tiếng Na Uy (Nynorsk)"
+ },
+ "af": {
+ "code": "af",
+ "name": "Tiếng Nam Phi"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Tiếng Nam Tư"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Tiếng Nama"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Tiếng Ndebele Miá»n Bắc"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Tiếng Nepal"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Tiếng Nga"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Tiếng Ngomba"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Tiếng Nhật"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Tiếng Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Tiếng Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Tiếng Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Tiếng Pashto"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Tiếng Pháp"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Tiếng Phần Lan"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Tiếng Philipin"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Tiếng Punjab"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Tiếng Quốc Tế Ngữ"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Tiếng Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Tiếng Rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Tiếng Rumani"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Tiếng Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Tiếng Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Tiếng Samburu"
+ },
+ "se": {
+ "code": "se",
+ "name": "Tiếng Sami Miá»n Bắc"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Tiếng Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Tiếng Sangu"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Tiếng Séc"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Tiếng Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Tiếng Serbia"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Tiếng Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Tiếng Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Tiếng Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Tiếng Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Tiếng Slovenia"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Tiếng Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Tiếng Somali"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Tiếng Swahili"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Tiếng Swahili Congo"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tiếng Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Tiếng Taita"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Tiếng Tamazight Chuẩn của Ma-rốc"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Tiếng Tamazight Miá»n Trung Ma-rốc"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tiếng Tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tiếng Tasawaq"
+ },
+ "es": {
+ "code": "es",
+ "name": "Tiếng Tây Ban Nha"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tiếng Tây Tạng"
+ },
+ "te": {
+ "code": "te",
+ "name": "Tiếng Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Tiếng Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "Tiếng Thái"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Tiếng Thổ Nhĩ Kỳ"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Tiếng Thụy Äiển"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Tiếng Thượng Giéc-man (Thụy Sĩ)"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Tiếng Thượng Sorbia"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tiếng Tigrigya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tiếng Tonga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Tiếng Trung"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Tiếng Ucraina"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Tiếng Uđu"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Tiếng Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Tiếng Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Tiếng Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Tiếng Việt"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Tiếng Vunjo"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Tiếng Wales"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Tiếng Walser"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Tiếng Xentơ (Xcốt len)"
+ },
+ "it": {
+ "code": "it",
+ "name": "Tiếng Ã"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Tiếng Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Tiếng Yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Tiếng Zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Tiếng Zulu"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/vun.json b/library/intl/resources/language/vun.json
new file mode 100644
index 000000000..f8f0b4735
--- /dev/null
+++ b/library/intl/resources/language/vun.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Kiakanyi"
+ },
+ "am": {
+ "code": "am",
+ "name": "Kiamharyi"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Kyiajemi"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Kyiarabu"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Kyibangla"
+ },
+ "be": {
+ "code": "be",
+ "name": "Kyibelarusi"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Kyibulgaryia"
+ },
+ "my": {
+ "code": "my",
+ "name": "Kyiburma"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Kyichecki"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Kyichina"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Kyifaransa"
+ },
+ "el": {
+ "code": "el",
+ "name": "Kyigiriki"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Kyihausa"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Kyihindi"
+ },
+ "es": {
+ "code": "es",
+ "name": "Kyihispania"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Kyiholanzi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Kyihungari"
+ },
+ "id": {
+ "code": "id",
+ "name": "Kyiindonesia"
+ },
+ "it": {
+ "code": "it",
+ "name": "Kyiitaliano"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Kyijapani"
+ },
+ "de": {
+ "code": "de",
+ "name": "Kyijerumani"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kyikambodia"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Kyikorea"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Kyimalesia"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Kyinepali"
+ },
+ "en": {
+ "code": "en",
+ "name": "Kyingereza"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Kyipolandi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Kyipunjabi"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Kyireno"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Kyiromania"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Kyirusi"
+ },
+ "so": {
+ "code": "so",
+ "name": "Kyisomalyi"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Kyiswidi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Kyitailandi"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Kyitamil"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Kyiturukyi"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Kyiukrania"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Kyiurdu"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Kyivietinamu"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Kyivunjo"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Kyiyoruba"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Kyizulu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/wae.json b/library/intl/resources/language/wae.json
new file mode 100644
index 000000000..69098e0c8
--- /dev/null
+++ b/library/intl/resources/language/wae.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikáns"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albaniš"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "Amerikanišes Engliš"
+ },
+ "am": {
+ "code": "am",
+ "name": "Amhariš"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Arabiš"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armeniš"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "Auštrališes Engliš"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Baskiš"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Bengališ"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosniš"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "Brasilianišes Portugisiš"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "Britišes Engliš"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Bulgariš"
+ },
+ "my": {
+ "code": "my",
+ "name": "Burmesiš"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Butaniš"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Chinesiš"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "da": {
+ "code": "da",
+ "name": "Däniš"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en": {
+ "code": "en",
+ "name": "Engliš"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estniš"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipiniš"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finiš"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "Flämiš"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galiziš"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgiš"
+ },
+ "el": {
+ "code": "el",
+ "name": "GriÄiÅ¡"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebräiš"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Hindi"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Holändiš"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "Iberišes Portugisiš"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "Iberišes Schpaniš"
+ },
+ "is": {
+ "code": "is",
+ "name": "Iisländiš"
+ },
+ "id": {
+ "code": "id",
+ "name": "Indonesiš"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Iriš"
+ },
+ "it": {
+ "code": "it",
+ "name": "Italieniš"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Japaniš"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "km": {
+ "code": "km",
+ "name": "Kambodšaniš"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "Kanadišes Engliš"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "Kanadišes Wälš"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kašmiriš"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Katalaniš"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "KazaÄiÅ¡"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kirgisiš"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Koreaniš"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Kroatiš"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Laotiš"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Lettiš"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Litauiš"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxemburgiš"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagási"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Malaíš"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltesiš"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Mazedoniš"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongoliš"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Nepalesiš"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "Nordndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Nordsamiš"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegiš Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegiš Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "ÖštriÄiÅ¡es TitÅ¡"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Pandšabiš"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Paštu"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Persiš"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Polniš"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Portugisiš"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Rätromaniš"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Rumäniš"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Rusiš"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "es": {
+ "code": "es",
+ "name": "Schpaniš"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Schwediš"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "Schwizer HoÄtitÅ¡"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "Schwizer Wälš"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "az": {
+ "code": "az",
+ "name": "Serbaidšaniš"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbiš"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Singalesiš"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slowakiš"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Sloweniš"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Somališ"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Suaheliš"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Tamiliš"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "Thailändiš"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetiš"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinja"
+ },
+ "de": {
+ "code": "de",
+ "name": "Titš"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tonga"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "Traditionells Chinesiš"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "TÅ¡eÄiÅ¡"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Türkiš"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uiguriš"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Ukrainiš"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Ungariš"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Usbekiš"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "VereifaÄts ChinesiÅ¡"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Vietnamesiš"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Walisiš"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Wälš"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "be": {
+ "code": "be",
+ "name": "Wísrussiš"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Zulu"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/xog.json b/library/intl/resources/language/xog.json
new file mode 100644
index 000000000..41ce6cd02
--- /dev/null
+++ b/library/intl/resources/language/xog.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Olu-urudu"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Oluakaani"
+ },
+ "am": {
+ "code": "am",
+ "name": "Oluamhariki"
+ },
+ "my": {
+ "code": "my",
+ "name": "Olubbama"
+ },
+ "be": {
+ "code": "be",
+ "name": "Olubelarusi"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Olubengali"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Olubulugariya"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Olucayina"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Oluceeke"
+ },
+ "de": {
+ "code": "de",
+ "name": "Oludaaki"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Olufalansa"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Oluhangare"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Oluhawuza"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Oluhindu"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Oluholandi"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Olujapani"
+ },
+ "km": {
+ "code": "km",
+ "name": "Olukme"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Olukoreya"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Olulasa"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Olulomaniya"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Olumalayi"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Olunepali"
+ },
+ "en": {
+ "code": "en",
+ "name": "Olungereza"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Oluperusi"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Olupolandi"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Olupotugiizi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Olupunjabi"
+ },
+ "es": {
+ "code": "es",
+ "name": "Olusipanya"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Olusoga"
+ },
+ "so": {
+ "code": "so",
+ "name": "Olusomaliya"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Oluswideni"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Olutake"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Olutamiiru"
+ },
+ "th": {
+ "code": "th",
+ "name": "Oluttaayi"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Oluvyetinaamu"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Oluwarabu"
+ },
+ "id": {
+ "code": "id",
+ "name": "Oluyindonezya"
+ },
+ "it": {
+ "code": "it",
+ "name": "Oluyitale"
+ },
+ "el": {
+ "code": "el",
+ "name": "Oluyonaani"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Oluyoruba"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Oluyukurayine"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Oluzzulu"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/yav.json b/library/intl/resources/language/yav.json
new file mode 100644
index 000000000..ab34736d3
--- /dev/null
+++ b/library/intl/resources/language/yav.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "akánɛ"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "am": {
+ "code": "am",
+ "name": "amalíke"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "my": {
+ "code": "my",
+ "name": "bímanɛ"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "bulgálɛ"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "cÉ›ÌkÉ›ÌÉ›"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "feleŋsí"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "índí"
+ },
+ "id": {
+ "code": "id",
+ "name": "índonísiɛ"
+ },
+ "en": {
+ "code": "en",
+ "name": "íŋgilísé"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "it": {
+ "code": "it",
+ "name": "itáliɛ"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "km": {
+ "code": "km",
+ "name": "kímɛɛ"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "kolíe"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "máliɛ"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ndiáman"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "nilándɛ"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "nuasue"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "es": {
+ "code": "es",
+ "name": "nuÉ›spanyÉ”ÌlÉ›"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "nufiɛtnamíɛŋ"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "nukeleniÉ›ÌÅ‹É›"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "nulumÉ›ÌÅ‹É›"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "nulúse"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "nulutú"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "nunipálɛ"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "nupÉ›ÌlisÉ›"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "nupolonÉ›ÌÉ›"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "nupÉ”litukÉ›ÌÉ›"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "nupunsapíɛÌ"
+ },
+ "so": {
+ "code": "so",
+ "name": "nusomalíɛ"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "nusuetua"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "nusulú"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "nutámule"
+ },
+ "th": {
+ "code": "th",
+ "name": "nutáyɛ"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "nutúluke"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "nuyolúpa"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "de": {
+ "code": "de",
+ "name": "ŋndiáman"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "É”ÌÅ‹gÉ›"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "pakas"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Ìpakas"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "pengálÉ›ÌÉ›"
+ },
+ "be": {
+ "code": "be",
+ "name": "pielúse"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "sinúɛ"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "el": {
+ "code": "el",
+ "name": "yavánɛ"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/yo-BJ.json b/library/intl/resources/language/yo-BJ.json
new file mode 100644
index 000000000..5ebc90216
--- /dev/null
+++ b/library/intl/resources/language/yo-BJ.json
@@ -0,0 +1,738 @@
+{
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "af": {
+ "code": "af",
+ "name": "Èdè Afrikani"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Èdè Akani"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Èdè Albania"
+ },
+ "am": {
+ "code": "am",
+ "name": "Èdè Amariki"
+ },
+ "so": {
+ "code": "so",
+ "name": "Èdè ara Somalia"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Èdè Arabiki"
+ },
+ "az": {
+ "code": "az",
+ "name": "Èdè Azerbaijani"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Èdè Baski"
+ },
+ "be": {
+ "code": "be",
+ "name": "Èdè Belarusi"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Èdè Bengali"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Èdè Bosnia"
+ },
+ "br": {
+ "code": "br",
+ "name": "Èdè Bretoni"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Èdè Bugaria"
+ },
+ "my": {
+ "code": "my",
+ "name": "Èdè Bumiisi"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Èdè Catala"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Èdè Duki"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Èdè Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Èdè Estonia"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Èdè Faransé"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Èdè Faroesi"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Èdè Finisi"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Èdè Frisia"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Èdè Gaelik ti Ilu Scotland"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Èdè Galicia"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Èdè Georgia"
+ },
+ "en": {
+ "code": "en",
+ "name": "Èdè Gɛ̀ɛÌsì"
+ },
+ "el": {
+ "code": "el",
+ "name": "Èdè Giriki"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Èdè Gujarati"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Èdè Hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Èdè Heberu"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Èdè Hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Èdè Hungaria"
+ },
+ "is": {
+ "code": "is",
+ "name": "Èdè Icelandic"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Èdè Ile Armenia"
+ },
+ "da": {
+ "code": "da",
+ "name": "Èdè Ilɛ̀ Denmark"
+ },
+ "de": {
+ "code": "de",
+ "name": "Èdè Ilɛ̀ Gemani"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Èdè Ilɛ̀ Polandi"
+ },
+ "id": {
+ "code": "id",
+ "name": "Èdè Indonasia"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Èdè Ireland"
+ },
+ "it": {
+ "code": "it",
+ "name": "Èdè Italiani"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Èdè Japanisi"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Èdè Jetinamu"
+ },
+ "km": {
+ "code": "km",
+ "name": "Èdè kameri"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Èdè Kannada"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Èdè Koria"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Èdè Kroatia"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Èdè Latvianu"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Èdè Lithuania"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Èdè Macedonia"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Èdè Malaya"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Èdè Malta"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Èdè Mandari"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Èdè marathi"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Èdè Nepali"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Èdè Pasia"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Èdè Pɔtugi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Èdè Punjabi"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Èdè Romania"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Èdè ̣Rɔɔsia"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Èdè seeki"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Èdè Serbia"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Èdè Shulu"
+ },
+ "si": {
+ "code": "si",
+ "name": "Èdè Sinhalese"
+ },
+ "es": {
+ "code": "es",
+ "name": "Èdè Sipanisi"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Èdè Slovaki"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Èdè Slovenia"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Èdè Suwidiisi"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Èdè Swahili"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Èdè Tagalogi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Èdè Tai"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Èdè Tamili"
+ },
+ "te": {
+ "code": "te",
+ "name": "Èdè Telugu"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Èdè Tigrinya"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Èdè Tɔɔkisi"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Èdè Udu"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Èdè Ukania"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Èdè Uzbek"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Èdè Welshi"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Èdè Yorùbá"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/yo.json b/library/intl/resources/language/yo.json
new file mode 100644
index 000000000..968fb13be
--- /dev/null
+++ b/library/intl/resources/language/yo.json
@@ -0,0 +1,738 @@
+{
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "af": {
+ "code": "af",
+ "name": "Èdè Afrikani"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "Èdè Akani"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Èdè Albania"
+ },
+ "am": {
+ "code": "am",
+ "name": "Èdè Amariki"
+ },
+ "so": {
+ "code": "so",
+ "name": "Èdè ara Somalia"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "Èdè Arabiki"
+ },
+ "az": {
+ "code": "az",
+ "name": "Èdè Azerbaijani"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Èdè Baski"
+ },
+ "be": {
+ "code": "be",
+ "name": "Èdè Belarusi"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "Èdè Bengali"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Èdè Bosnia"
+ },
+ "br": {
+ "code": "br",
+ "name": "Èdè Bretoni"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "Èdè Bugaria"
+ },
+ "my": {
+ "code": "my",
+ "name": "Èdè Bumiisi"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Èdè Catala"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "Èdè Duki"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Èdè Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Èdè Estonia"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "Èdè Faransé"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Èdè Faroesi"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Èdè Finisi"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Èdè Frisia"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Èdè Gaelik ti Ilu Scotland"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Èdè Galicia"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Èdè Georgia"
+ },
+ "en": {
+ "code": "en",
+ "name": "Èdè Gẹ̀ẹÌsì"
+ },
+ "el": {
+ "code": "el",
+ "name": "Èdè Giriki"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Èdè Gujarati"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "Èdè Hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "Èdè Heberu"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "Èdè Hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "Èdè Hungaria"
+ },
+ "is": {
+ "code": "is",
+ "name": "Èdè Icelandic"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Èdè Ile Armenia"
+ },
+ "da": {
+ "code": "da",
+ "name": "Èdè Ilẹ̀ Denmark"
+ },
+ "de": {
+ "code": "de",
+ "name": "Èdè Ilẹ̀ Gemani"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "Èdè Ilẹ̀ Polandi"
+ },
+ "id": {
+ "code": "id",
+ "name": "Èdè Indonasia"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Èdè Ireland"
+ },
+ "it": {
+ "code": "it",
+ "name": "Èdè Italiani"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "Èdè Japanisi"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "Èdè Jetinamu"
+ },
+ "km": {
+ "code": "km",
+ "name": "Èdè kameri"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Èdè Kannada"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "Èdè Koria"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Èdè Kroatia"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Èdè Latvianu"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Èdè Lithuania"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Èdè Macedonia"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "Èdè Malaya"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Èdè Malta"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "Èdè Mandari"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Èdè marathi"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "Èdè Nepali"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "Èdè Pasia"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "Èdè Pá»tugi"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "Èdè Punjabi"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "Èdè Romania"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "Èdè Ì£Rá»á»sia"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "Èdè seeki"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Èdè Serbia"
+ },
+ "si": {
+ "code": "si",
+ "name": "Èdè Sinhalese"
+ },
+ "es": {
+ "code": "es",
+ "name": "Èdè Sipanisi"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Èdè Slovaki"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Èdè Slovenia"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "Èdè Suwidiisi"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Èdè Swahili"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "Èdè Ṣulu"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Èdè Tagalogi"
+ },
+ "th": {
+ "code": "th",
+ "name": "Èdè Tai"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "Èdè Tamili"
+ },
+ "te": {
+ "code": "te",
+ "name": "Èdè Telugu"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Èdè Tigrinya"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "Èdè Tá»á»kisi"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "Èdè Udu"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "Èdè Ukania"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Èdè Uzbek"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Èdè Welshi"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "Èdè Yorùbá"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "Standard Moroccan Tamazight"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/zgh.json b/library/intl/resources/language/zgh.json
new file mode 100644
index 000000000..6b6d9172f
--- /dev/null
+++ b/library/intl/resources/language/zgh.json
@@ -0,0 +1,738 @@
+{
+ "af": {
+ "code": "af",
+ "name": "Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "Aghem"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "Albanian"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ar_001"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "Armenian"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "az": {
+ "code": "az",
+ "name": "Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "Bambara"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "Basque"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "Bena"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "Bosnian"
+ },
+ "br": {
+ "code": "br",
+ "name": "Breton"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "Chiga"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "Croatian"
+ },
+ "da": {
+ "code": "da",
+ "name": "Danish"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "de_CH"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "Embu"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "Estonian"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Ewe"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "Finnish"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "Galician"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "Georgian"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "Gusii"
+ },
+ "he": {
+ "code": "he",
+ "name": "Hebrew"
+ },
+ "is": {
+ "code": "is",
+ "name": "Icelandic"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "Irish"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "Jola-Fonyi"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "Kazakh"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "Kikuyu"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "Langi"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "Lao"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "Malagasy"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "Meru"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "Nama"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "Ngomba"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "nl_BE"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "Norwegian Bokmål"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "Norwegian Nynorsk"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "Pashto"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "pt_PT"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "ro_MD"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "Rundi"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "Sangu"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "Scottish Gaelic"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "Shona"
+ },
+ "si": {
+ "code": "si",
+ "name": "Sinhala"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "Soga"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "Swahili"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "Swiss German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "Taita"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "Teso"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Tongan"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "Upper Sorbian"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "Uyghur"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "Vai"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "Vunjo"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "Western Frisian"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "Zarma"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "zh_Hans"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "zh_Hant"
+ },
+ "be": {
+ "code": "be",
+ "name": "ⵜⴰⴱⵉâµâ´°âµ”ⵓⵙⵜ"
+ },
+ "my": {
+ "code": "my",
+ "name": "ⵜⴰⴱⵉⵔⵎⴰâµâµ‰âµœ"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "ⵜⴰⴱⵉⵜâµâ´°âµŽâµ‰âµœ"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ⵜⴰⴱâµâµ–ⴰⵔⵉⵜ"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "ⵜⴰⴱâµâµŠâ´°â´±âµ‰âµœ"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "ⵜⴰⴱâµâµ–â´°âµâµ‰âµœ"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "ⵜⴰⴱⵓâµâµ“âµâµ‰âµœ"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "ⵜⴰⴱⵕⵟⵇⵉⵣⵜ"
+ },
+ "el": {
+ "code": "el",
+ "name": "ⵜⴰⴳⵔⵉⴳⵉⵜ"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "ⵜⴰⴼⵓⵔⵙⵉⵜ"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "ⵜⴰⴼⵔⴰâµâµ™âµ‰âµ™âµœ"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "ⵜⴰⴽⴰâµâµœ"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "ⵜⴰⴽⵓⵔⵉⵜ"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "ⵜⴰⵀⴰⵡⵙⴰⵜ"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "ⵜⴰⵀⵉâµâ´·âµ‰âµœ"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "ⵜⴰⵀâµâµ–ⴰⵔⵉⵜ"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "ⵜⴰⵀⵓâµâ´°âµâ´·âµ‰âµœ"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "ⵜⴰⵄⵔⴰⴱⵜ"
+ },
+ "km": {
+ "code": "km",
+ "name": "ⵜⴰⵅⵎⵉⵔⵜ"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "ⵜⴰⵊⴰⴱⴱⵓâµâµ‰âµœ"
+ },
+ "de": {
+ "code": "de",
+ "name": "ⵜⴰâµâµ‰âµŽâ´°âµâµœ"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "ⵜⴰⵎⴰâµâ´°âµ¡âµ‰âµœ"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "ⵜⴰⵎⴰⵣⵉⵖⵜ"
+ },
+ "am": {
+ "code": "am",
+ "name": "ⵜⴰⵎⵀⴰⵔⵉⵜ"
+ },
+ "en": {
+ "code": "en",
+ "name": "ⵜⴰâµâ´³âµâµ‰âµ£âµœ"
+ },
+ "id": {
+ "code": "id",
+ "name": "ⵜⴰâµâ´·âµ“âµâµ‰âµ™âµ‰âµœ"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "ⵜⴰâµâµ‰â´±â´°âµâµ‰âµœ"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "ⵜⴰⵔⵓⵎⴰâµâµ‰âµœ"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ⵜⴰⵔⵓⵙⵉⵜ"
+ },
+ "es": {
+ "code": "es",
+ "name": "ⵜⴰⵙⴱâµâµ¢âµ“âµâµ‰âµœ"
+ },
+ "so": {
+ "code": "so",
+ "name": "ⵜⴰⵙⵓⵎⴰâµâµ‰âµœ"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "ⵜⴰⵙⵡⵉⴷⵉⵜ"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "ⵜⴰⵛⵉâµâµ¡âµ‰âµœ"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "ⵜⴰⵜⴰⵎⵉâµâµœ"
+ },
+ "th": {
+ "code": "th",
+ "name": "ⵜⴰⵜⴰⵢâµâ´°âµâ´·âµ‰âµœ"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "ⵜⴰⵜⵓⵔⴽⵉⵜ"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "ⵜⴰⵜⵛⵉⴽⵉⵜ"
+ },
+ "it": {
+ "code": "it",
+ "name": "ⵜⴰⵟⴰâµâµ¢â´°âµâµœ"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "ⵜⴰⵢⵔⵓⴱⴰⵜ"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "ⵜⴰⵣⵓâµâµ“ⵜ"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "ⵜⵓⴽⵔⴰâµâµ‰âµœ"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "ⵜⵓⵔⴷⵓⵜ"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/zh-Hans-HK.json b/library/intl/resources/language/zh-Hans-HK.json
new file mode 100644
index 000000000..6c5f166f3
--- /dev/null
+++ b/library/intl/resources/language/zh-Hans-HK.json
@@ -0,0 +1,738 @@
+{
+ "sq": {
+ "code": "sq",
+ "name": "阿尔巴尼亚文"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "阿肯文"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "阿拉伯文"
+ },
+ "am": {
+ "code": "am",
+ "name": "阿姆哈拉文"
+ },
+ "az": {
+ "code": "az",
+ "name": "阿塞拜疆文"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "阿斯图里亚æ€æ–‡"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "阿è‹æ–‡"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "埃维文"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "爱尔兰文"
+ },
+ "et": {
+ "code": "et",
+ "name": "爱沙尼亚文"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "奥地利德文"
+ },
+ "or": {
+ "code": "or",
+ "name": "奥里亚文"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "澳大利亚英文"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "å·´è²äºšæ–‡"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "å·´è¨æ–‡"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "巴斯克文"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "巴西葡è„牙文"
+ },
+ "be": {
+ "code": "be",
+ "name": "白俄罗斯文"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "ç­å·´æ‹‰æ–‡"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ä¿åŠ åˆ©äºšæ–‡"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "北æ©å¾·è´å‹’æ–‡"
+ },
+ "se": {
+ "code": "se",
+ "name": "北è¨ç±³æ–‡"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "北桑海文"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "è´çº³æ–‡"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "标准摩洛哥塔马塞特文"
+ },
+ "is": {
+ "code": "is",
+ "name": "冰岛文"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "波兰文"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "波斯尼亚文"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "波斯文"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "åšå¤šæ–‡"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "ä¸ä¸¹æ–‡"
+ },
+ "br": {
+ "code": "br",
+ "name": "布里多尼文"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "è—æ–‡"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "彻罗基文"
+ },
+ "da": {
+ "code": "da",
+ "name": "丹麦文"
+ },
+ "de": {
+ "code": "de",
+ "name": "å¾·æ–‡"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "东桑海文"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ä¿„æ–‡"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "æ©å¸ƒæ–‡"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "æ©è‰®å·´"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "法罗文"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "法文"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "ç¹ä½“中文"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "è²å¾‹å®¾æ–‡"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "芬兰文"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "弗留利文"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "佛兰芒文"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "夫拉文"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "刚果斯瓦希里文"
+ },
+ "km": {
+ "code": "km",
+ "name": "高棉文"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "格陵兰文"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "æ ¼é²å‰äºšæ–‡"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "å¤å‰æ‹‰ç‰¹æ–‡"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "å¤è¥¿æ–‡"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "哈è¨å…‹æ–‡"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "韩文"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "豪è¨æ–‡"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "è·å…°æ–‡"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "基隆迪文"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "å‰å°”å‰æ–¯æ–‡"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "å‰åº“尤文"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "加利西亚文"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "加拿大法文"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "加拿大英文"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "加泰罗尼亚文"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "简体中文"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "æ·å…‹æ–‡"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "å¡æ¯”尔文"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "å¡å¸ƒä½›å¾—é²æ–‡"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "å¡ä¼¦é‡‘æ–‡"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "å¡å§†å·´æ–‡"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "å¡çº³è¾¾æ–‡"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "科隆文"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "克罗地亚文"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "克什米尔文"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "夸西奥文"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "拉脱维亚文"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "å…°åšæ–‡"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "朗å‰æ–‡"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "è€æŒæ–‡"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "立陶宛文"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "林加拉文"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "å¢å¥¥æ–‡"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "å¢å¹²è¾¾æ–‡"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "å¢æ£®å ¡æ–‡"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "å¢é›…æ–‡"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "é²å·´åŠ ä¸¹åŠ æ–‡"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "罗马尼亚文"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "罗曼什文"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "罗瓦文"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "马尔加什文"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "马耳他文"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "马孔德文"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "马夸文"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "马拉地文"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "马拉雅拉姆文"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "马æ¥æ–‡"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "马其顿文"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "马切姆文"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "毛里求斯克里奥尔文"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "梅é²æ–‡"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "美å¼è‹±æ–‡"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "蒙当文"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "è’™å¤æ–‡"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "孟加拉文"
+ },
+ "my": {
+ "code": "my",
+ "name": "缅甸文"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "摩尔多瓦文"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "墨西哥西ç­ç‰™æ–‡"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "纳马文"
+ },
+ "af": {
+ "code": "af",
+ "name": "å—éžè·å…°æ–‡"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "尼昂科勒文"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "尼泊尔文"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "努埃尔文"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "挪å¨åšå…‹é©¬å°”æ–‡"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "挪å¨å°¼è¯ºæ–¯å…‹æ–‡"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "æ—é®æ™®æ–‡"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "è‘¡è„牙文"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "普什图文"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "奇加文"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "日文"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "瑞典文"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "瑞士德文"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "瑞士法文"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "瑞士高地德文"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "è¨ä¼Šæ–‡"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "塞尔维亚文"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "塞纳文"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "桑布é²æ–‡"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "桑戈文"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "æ¡‘å¤æ–‡"
+ },
+ "si": {
+ "code": "si",
+ "name": "僧伽罗文"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "上索布文"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "ç»çº³æ–‡"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "世界文"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "斯洛ä¼å…‹æ–‡"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "斯洛文尼亚文"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "斯瓦希里文"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "è‹æ ¼å…°ç›–尔文"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "索加文"
+ },
+ "so": {
+ "code": "so",
+ "name": "索马里文"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "塔马é½æ ¼ç‰¹æ–‡"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "å°å¡”æ–‡"
+ },
+ "te": {
+ "code": "te",
+ "name": "æ³°å¢å›ºæ–‡"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "泰米尔文"
+ },
+ "th": {
+ "code": "th",
+ "name": "æ³°æ–‡"
+ },
+ "to": {
+ "code": "to",
+ "name": "汤加文"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "特索文"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "æ格里尼亚文"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "土耳其文"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "瓦尔瑟文"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "瓦伊文"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "æ—ºæœæ–‡"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "å¨å°”士文"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ç»´å¾å°”æ–‡"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "温旧文"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "乌尔都文"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "乌克兰文"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "乌兹别克文"
+ },
+ "he": {
+ "code": "he",
+ "name": "希伯æ¥æ–‡"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "希尔哈文"
+ },
+ "el": {
+ "code": "el",
+ "name": "希腊文"
+ },
+ "es": {
+ "code": "es",
+ "name": "西ç­ç‰™æ–‡"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "西弗里西亚文"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "西桑海文"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "下索布文"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "现代标准阿拉伯文"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "香巴拉文"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "匈牙利文"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "亚罕文"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "亚美尼亚文"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "æ´‹åžæ–‡"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "伊比利亚葡è„牙文"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "伊比利亚西ç­ç‰™æ–‡"
+ },
+ "it": {
+ "code": "it",
+ "name": "æ„大利文"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "å°åœ°æ–‡"
+ },
+ "id": {
+ "code": "id",
+ "name": "å°åº¦å°¼è¥¿äºšæ–‡"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "英å¼è‹±æ–‡"
+ },
+ "en": {
+ "code": "en",
+ "name": "英文"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "约é²å·´æ–‡"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "越å—æ–‡"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "哲尔马文"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "中文"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "朱拉文"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "祖é²æ–‡"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/zh-Hans-MO.json b/library/intl/resources/language/zh-Hans-MO.json
new file mode 100644
index 000000000..6c5f166f3
--- /dev/null
+++ b/library/intl/resources/language/zh-Hans-MO.json
@@ -0,0 +1,738 @@
+{
+ "sq": {
+ "code": "sq",
+ "name": "阿尔巴尼亚文"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "阿肯文"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "阿拉伯文"
+ },
+ "am": {
+ "code": "am",
+ "name": "阿姆哈拉文"
+ },
+ "az": {
+ "code": "az",
+ "name": "阿塞拜疆文"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "阿斯图里亚æ€æ–‡"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "阿è‹æ–‡"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "埃维文"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "爱尔兰文"
+ },
+ "et": {
+ "code": "et",
+ "name": "爱沙尼亚文"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "奥地利德文"
+ },
+ "or": {
+ "code": "or",
+ "name": "奥里亚文"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "澳大利亚英文"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "å·´è²äºšæ–‡"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "å·´è¨æ–‡"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "巴斯克文"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "巴西葡è„牙文"
+ },
+ "be": {
+ "code": "be",
+ "name": "白俄罗斯文"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "ç­å·´æ‹‰æ–‡"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ä¿åŠ åˆ©äºšæ–‡"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "北æ©å¾·è´å‹’æ–‡"
+ },
+ "se": {
+ "code": "se",
+ "name": "北è¨ç±³æ–‡"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "北桑海文"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "è´çº³æ–‡"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "标准摩洛哥塔马塞特文"
+ },
+ "is": {
+ "code": "is",
+ "name": "冰岛文"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "波兰文"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "波斯尼亚文"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "波斯文"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "åšå¤šæ–‡"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "ä¸ä¸¹æ–‡"
+ },
+ "br": {
+ "code": "br",
+ "name": "布里多尼文"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "è—æ–‡"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "彻罗基文"
+ },
+ "da": {
+ "code": "da",
+ "name": "丹麦文"
+ },
+ "de": {
+ "code": "de",
+ "name": "å¾·æ–‡"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "东桑海文"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ä¿„æ–‡"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "æ©å¸ƒæ–‡"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "æ©è‰®å·´"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "法罗文"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "法文"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "ç¹ä½“中文"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "è²å¾‹å®¾æ–‡"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "芬兰文"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "弗留利文"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "佛兰芒文"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "夫拉文"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "刚果斯瓦希里文"
+ },
+ "km": {
+ "code": "km",
+ "name": "高棉文"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "格陵兰文"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "æ ¼é²å‰äºšæ–‡"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "å¤å‰æ‹‰ç‰¹æ–‡"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "å¤è¥¿æ–‡"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "哈è¨å…‹æ–‡"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "韩文"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "豪è¨æ–‡"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "è·å…°æ–‡"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "基隆迪文"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "å‰å°”å‰æ–¯æ–‡"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "å‰åº“尤文"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "加利西亚文"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "加拿大法文"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "加拿大英文"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "加泰罗尼亚文"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "简体中文"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "æ·å…‹æ–‡"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "å¡æ¯”尔文"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "å¡å¸ƒä½›å¾—é²æ–‡"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "å¡ä¼¦é‡‘æ–‡"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "å¡å§†å·´æ–‡"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "å¡çº³è¾¾æ–‡"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "科隆文"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "克罗地亚文"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "克什米尔文"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "夸西奥文"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "拉脱维亚文"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "å…°åšæ–‡"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "朗å‰æ–‡"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "è€æŒæ–‡"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "立陶宛文"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "林加拉文"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "å¢å¥¥æ–‡"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "å¢å¹²è¾¾æ–‡"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "å¢æ£®å ¡æ–‡"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "å¢é›…æ–‡"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "é²å·´åŠ ä¸¹åŠ æ–‡"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "罗马尼亚文"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "罗曼什文"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "罗瓦文"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "马尔加什文"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "马耳他文"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "马孔德文"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "马夸文"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "马拉地文"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "马拉雅拉姆文"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "马æ¥æ–‡"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "马其顿文"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "马切姆文"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "毛里求斯克里奥尔文"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "梅é²æ–‡"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "美å¼è‹±æ–‡"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "蒙当文"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "è’™å¤æ–‡"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "孟加拉文"
+ },
+ "my": {
+ "code": "my",
+ "name": "缅甸文"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "摩尔多瓦文"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "墨西哥西ç­ç‰™æ–‡"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "纳马文"
+ },
+ "af": {
+ "code": "af",
+ "name": "å—éžè·å…°æ–‡"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "尼昂科勒文"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "尼泊尔文"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "努埃尔文"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "挪å¨åšå…‹é©¬å°”æ–‡"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "挪å¨å°¼è¯ºæ–¯å…‹æ–‡"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "æ—é®æ™®æ–‡"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "è‘¡è„牙文"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "普什图文"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "奇加文"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "日文"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "瑞典文"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "瑞士德文"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "瑞士法文"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "瑞士高地德文"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "è¨ä¼Šæ–‡"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "塞尔维亚文"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "塞纳文"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "桑布é²æ–‡"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "桑戈文"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "æ¡‘å¤æ–‡"
+ },
+ "si": {
+ "code": "si",
+ "name": "僧伽罗文"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "上索布文"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "ç»çº³æ–‡"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "世界文"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "斯洛ä¼å…‹æ–‡"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "斯洛文尼亚文"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "斯瓦希里文"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "è‹æ ¼å…°ç›–尔文"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "索加文"
+ },
+ "so": {
+ "code": "so",
+ "name": "索马里文"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "塔马é½æ ¼ç‰¹æ–‡"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "å°å¡”æ–‡"
+ },
+ "te": {
+ "code": "te",
+ "name": "æ³°å¢å›ºæ–‡"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "泰米尔文"
+ },
+ "th": {
+ "code": "th",
+ "name": "æ³°æ–‡"
+ },
+ "to": {
+ "code": "to",
+ "name": "汤加文"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "特索文"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "æ格里尼亚文"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "土耳其文"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "瓦尔瑟文"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "瓦伊文"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "æ—ºæœæ–‡"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "å¨å°”士文"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ç»´å¾å°”æ–‡"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "温旧文"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "乌尔都文"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "乌克兰文"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "乌兹别克文"
+ },
+ "he": {
+ "code": "he",
+ "name": "希伯æ¥æ–‡"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "希尔哈文"
+ },
+ "el": {
+ "code": "el",
+ "name": "希腊文"
+ },
+ "es": {
+ "code": "es",
+ "name": "西ç­ç‰™æ–‡"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "西弗里西亚文"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "西桑海文"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "下索布文"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "现代标准阿拉伯文"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "香巴拉文"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "匈牙利文"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "亚罕文"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "亚美尼亚文"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "æ´‹åžæ–‡"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "伊比利亚葡è„牙文"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "伊比利亚西ç­ç‰™æ–‡"
+ },
+ "it": {
+ "code": "it",
+ "name": "æ„大利文"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "å°åœ°æ–‡"
+ },
+ "id": {
+ "code": "id",
+ "name": "å°åº¦å°¼è¥¿äºšæ–‡"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "英å¼è‹±æ–‡"
+ },
+ "en": {
+ "code": "en",
+ "name": "英文"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "约é²å·´æ–‡"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "越å—æ–‡"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "哲尔马文"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "中文"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "朱拉文"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "祖é²æ–‡"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/zh-Hans-SG.json b/library/intl/resources/language/zh-Hans-SG.json
new file mode 100644
index 000000000..c5327f054
--- /dev/null
+++ b/library/intl/resources/language/zh-Hans-SG.json
@@ -0,0 +1,738 @@
+{
+ "sq": {
+ "code": "sq",
+ "name": "阿尔巴尼亚文"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "阿肯文"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "阿拉伯文"
+ },
+ "am": {
+ "code": "am",
+ "name": "阿姆哈拉文"
+ },
+ "az": {
+ "code": "az",
+ "name": "阿塞拜疆文"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "阿斯图里亚æ€ç‰¹æ–‡"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "阿è‹æ–‡"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "埃维文"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "爱尔兰文"
+ },
+ "et": {
+ "code": "et",
+ "name": "爱沙尼亚文"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "奥地利德文"
+ },
+ "or": {
+ "code": "or",
+ "name": "奥里亚文"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "澳大利亚英文"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "å·´è²äºšæ–‡"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "å·´è¨æ–‡"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "巴斯克文"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "巴西葡è„牙文"
+ },
+ "be": {
+ "code": "be",
+ "name": "白俄罗斯文"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "ç­å·´æ‹‰æ–‡"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ä¿åŠ åˆ©äºšæ–‡"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "北æ©å¾·è´å‹’æ–‡"
+ },
+ "se": {
+ "code": "se",
+ "name": "北è¨ç±³æ–‡"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "北桑海文"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "è´çº³æ–‡"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "标准摩洛哥塔马塞特文"
+ },
+ "is": {
+ "code": "is",
+ "name": "冰岛文"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "波兰文"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "波斯尼亚文"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "波斯文"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "åšå¤šæ–‡"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "ä¸ä¸¹æ–‡"
+ },
+ "br": {
+ "code": "br",
+ "name": "布里多尼文"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "è—æ–‡"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "彻罗基文"
+ },
+ "da": {
+ "code": "da",
+ "name": "丹麦文"
+ },
+ "de": {
+ "code": "de",
+ "name": "å¾·æ–‡"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "东桑海文"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ä¿„æ–‡"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "æ©å¸ƒæ–‡"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "æ©è‰®å·´"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "法罗文"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "法文"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "ç¹ä½“中文"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "è²å¾‹å®¾æ–‡"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "芬兰文"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "弗留利文"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "佛兰芒文"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "夫拉文"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "刚果斯瓦希里文"
+ },
+ "km": {
+ "code": "km",
+ "name": "高棉文"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "格陵兰文"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "æ ¼é²å‰äºšæ–‡"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "å¤å‰æ‹‰ç‰¹æ–‡"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "å¤è¥¿æ–‡"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "哈è¨å…‹æ–‡"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "韩文"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "豪è¨æ–‡"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "è·å…°æ–‡"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "基隆迪文"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "å‰å°”å‰æ–¯æ–‡"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "å‰åº“尤文"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "加利西亚文"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "加拿大法文"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "加拿大英文"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "加泰罗尼亚文"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "简体中文"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "æ·å…‹æ–‡"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "å¡æ¯”尔文"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "å¡å¸ƒä½›å¾—é²æ–‡"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "å¡ä¼¦é‡‘æ–‡"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "å¡å§†å·´æ–‡"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "å¡çº³è¾¾æ–‡"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "科隆文"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "克罗地亚文"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "克什米尔文"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "夸西奥文"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "拉脱维亚文"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "å…°åšæ–‡"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "朗å‰æ–‡"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "è€æŒæ–‡"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "立陶宛文"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "林加拉文"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "å¢å¥¥æ–‡"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "å¢å¹²è¾¾æ–‡"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "å¢æ£®å ¡æ–‡"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "å¢é›…æ–‡"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "é²å·´åŠ ä¸¹åŠ æ–‡"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "罗马尼亚文"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "罗曼什文"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "罗瓦文"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "马尔加什文"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "马耳他文"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "马孔德文"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "马夸文"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "马拉地文"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "马拉雅拉姆文"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "马æ¥æ–‡"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "马其顿文"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "马切姆文"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "毛里求斯克里奥尔文"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "梅é²æ–‡"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "美国英文"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "蒙当文"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "è’™å¤æ–‡"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "孟加拉文"
+ },
+ "my": {
+ "code": "my",
+ "name": "缅甸文"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "摩尔多瓦文"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "墨西哥西ç­ç‰™æ–‡"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "纳马文"
+ },
+ "af": {
+ "code": "af",
+ "name": "å—éžè·å…°æ–‡"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "尼昂科勒文"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "尼泊尔文"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "努埃尔文"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "挪å¨åšå…‹é©¬å°”æ–‡"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "挪å¨å°¼è¯ºæ–¯å…‹æ–‡"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "æ—é®æ™®æ–‡"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "è‘¡è„牙文"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "普什图文"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "奇加文"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "日文"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "瑞典文"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "瑞士德文"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "瑞士法文"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "瑞士高地德文"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "è¨ä¼Šæ–‡"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "塞尔维亚文"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "塞纳文"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "桑布é²æ–‡"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "桑戈文"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "æ¡‘å¤æ–‡"
+ },
+ "si": {
+ "code": "si",
+ "name": "僧伽罗文"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "上索布文"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "ç»çº³æ–‡"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "世界文"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "斯洛ä¼å…‹æ–‡"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "斯洛文尼亚文"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "斯瓦希里文"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "è‹æ ¼å…°ç›–尔文"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "索加文"
+ },
+ "so": {
+ "code": "so",
+ "name": "索马里文"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "塔马é½æ ¼ç‰¹æ–‡"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "å°å¡”æ–‡"
+ },
+ "te": {
+ "code": "te",
+ "name": "æ³°å¢å›ºæ–‡"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "泰米尔文"
+ },
+ "th": {
+ "code": "th",
+ "name": "æ³°æ–‡"
+ },
+ "to": {
+ "code": "to",
+ "name": "汤加文"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "特索文"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "æ格里尼亚文"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "土耳其文"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "瓦尔瑟文"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "瓦伊文"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "æ—ºæœæ–‡"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "å¨å°”士文"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ç»´å¾å°”æ–‡"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "温旧文"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "乌尔都文"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "乌克兰文"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "乌兹别克文"
+ },
+ "he": {
+ "code": "he",
+ "name": "希伯æ¥æ–‡"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "希尔哈文"
+ },
+ "el": {
+ "code": "el",
+ "name": "希腊文"
+ },
+ "es": {
+ "code": "es",
+ "name": "西ç­ç‰™æ–‡"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "西弗里西亚文"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "西桑海文"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "下索布文"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "现代标准阿拉伯文"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "香巴拉文"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "匈牙利文"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "亚罕文"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "亚美尼亚文"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "æ´‹åžæ–‡"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "伊比利亚葡è„牙文"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "伊比利亚西ç­ç‰™æ–‡"
+ },
+ "it": {
+ "code": "it",
+ "name": "æ„大利文"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "å°åœ°æ–‡"
+ },
+ "id": {
+ "code": "id",
+ "name": "å°åº¦å°¼è¥¿äºšæ–‡"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "英国英文"
+ },
+ "en": {
+ "code": "en",
+ "name": "英文"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "约é²å·´æ–‡"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "越å—æ–‡"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "哲尔马文"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "中文"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "朱拉文"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "祖é²æ–‡"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/zh-Hant-HK.json b/library/intl/resources/language/zh-Hant-HK.json
new file mode 100644
index 000000000..177cca849
--- /dev/null
+++ b/library/intl/resources/language/zh-Hant-HK.json
@@ -0,0 +1,738 @@
+{
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "上索布文"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "下索布文"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "土耳其文"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "å¹²é”æ–‡"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "中文"
+ },
+ "da": {
+ "code": "da",
+ "name": "丹麥文"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "巴西葡è„牙語"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "巴克摩挪å¨æ–‡"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "巴斯克文"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "å·´è²äºžæ–‡"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "å·´è–©æ–‡"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "扎爾馬文"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "日文"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "世界語"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "加里西亞文"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "加拿大英文"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "加泰羅尼亞文"
+ },
+ "se": {
+ "code": "se",
+ "name": "北方薩米文"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "北å°åº¦æ–‡"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "北地畢列文"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "北桑海文"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "å¡æ¯”爾文"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "å¡å¸ƒå¨çˆ¾ç¬¬æ–‡"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "å¡å§†å·´æ–‡"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "å¡å€«é‡‘æ–‡"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "å¤å‰æ‹‰ç‰¹æ–‡"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "å¤è¥¿æ–‡"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "å°å¡”æ–‡"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "å²ç“¦å¸Œé‡Œæ–‡"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "尼泊爾文"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "å°¼æšç§‘èŠæ–‡"
+ },
+ "br": {
+ "code": "br",
+ "name": "布里多尼文"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "弗留利文"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "瓦伊文"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "瓦瑟文"
+ },
+ "be": {
+ "code": "be",
+ "name": "白俄羅斯文"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "立陶宛文"
+ },
+ "is": {
+ "code": "is",
+ "name": "冰島文"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "匈牙利文"
+ },
+ "id": {
+ "code": "id",
+ "name": "å°å°¼æ–‡"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "å‰åº«å°¤æ–‡"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "å‰çˆ¾å‰æ–¯æ–‡"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "夸西奧文"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "朱拉文"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "西弗里西亞文"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "西桑海文"
+ },
+ "es": {
+ "code": "es",
+ "name": "西ç­ç‰™æ–‡"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "佛蘭芒文"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "克里奧文(模里西斯)"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "克羅地亞文"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "努埃爾文"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "åŽç´é”æ–‡"
+ },
+ "he": {
+ "code": "he",
+ "name": "希伯來文"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "希爾哈文"
+ },
+ "el": {
+ "code": "el",
+ "name": "希臘文"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "è²ç´æ–‡"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "亞罕文"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "亞美尼亞文"
+ },
+ "az": {
+ "code": "az",
+ "name": "亞塞拜然文"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ä¾æ±ªéƒ½æ–‡"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "å¦ç±³çˆ¾æ–‡"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "奇加文"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "孟加拉文"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "å®—å¡æ–‡"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "尚巴拉文"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "拉脫維亞文"
+ },
+ "to": {
+ "code": "to",
+ "name": "æ±åŠ æ–‡"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "æ±æ¡‘æµ·æ–‡"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "林加拉文"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "法文"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "法羅文"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "波士尼亞文"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "波斯文"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "波蘭文"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "芬蘭文"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "阿åŽæ–‡"
+ },
+ "am": {
+ "code": "am",
+ "name": "阿姆哈拉文"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "阿拉伯文"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "阿斯圖里亞文"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "阿爾巴尼亞文"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "阿蘇文"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ä¿„æ–‡"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ä¿åŠ åˆ©äºžæ–‡"
+ },
+ "af": {
+ "code": "af",
+ "name": "å—éžè·è˜­æ–‡"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "哈薩克文"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "å¨çˆ¾æ–¯æ–‡"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "æ´‹åžæ–‡"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "科隆文"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "約魯巴文"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "美國英文"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "è€è«¾æ–¯å…‹æŒªå¨æ–‡"
+ },
+ "en": {
+ "code": "en",
+ "name": "英文"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "英國英文"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "ä¿®ç´æ–‡"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "剛果å²ç“¦å¸Œé‡Œæ–‡"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "埃維文"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "æ©å¸ƒæ–‡"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "æ©æ ¼å§†å·´æ–‡"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "æ—é®æ™®æ–‡"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "朗å‰æ–‡"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "柴羅基文"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "格陵蘭文"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "桑戈文"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "æ¡‘å¤æ–‡"
+ },
+ "th": {
+ "code": "th",
+ "name": "æ³°æ–‡"
+ },
+ "te": {
+ "code": "te",
+ "name": "泰盧固文"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "çƒå…‹è˜­æ–‡"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "çƒèŒ²åˆ¥å…‹æ–‡"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "çƒçˆ¾éƒ½æ–‡"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "特索文"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "ç­å·´æ‹‰æ–‡"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "祖魯文"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "ç´é¦¬æ–‡"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "索加文"
+ },
+ "so": {
+ "code": "so",
+ "name": "索馬利文"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "馬孔德文"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "馬夸文"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "馬來文"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "馬來亞拉姆文"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "馬其頓文"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "馬拉加斯文"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "馬拉地文"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "馬æ°ç¾Žæ–‡"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "馬爾他文"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "馬賽文"
+ },
+ "km": {
+ "code": "km",
+ "name": "高棉文"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "æ·å…‹æ–‡"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "梅魯文"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ç¾ä»£æ¨™æº–阿拉伯文"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "è·è˜­æ–‡"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "åšå¤šæ–‡"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "喀什米爾文"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "喬治亞文"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "富拉文"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "æ格利尼亞文"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "斯洛文尼亞文"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "斯洛ä¼å…‹æ–‡"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "普什圖文"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "è²å¾‹è³“æ–‡"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "越å—æ–‡"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "隆迪文"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "塔馬齊格特文"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "塞爾維亞文"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "奧地利德文"
+ },
+ "or": {
+ "code": "or",
+ "name": "奧里雅文"
+ },
+ "it": {
+ "code": "it",
+ "name": "æ„大利文"
+ },
+ "et": {
+ "code": "et",
+ "name": "愛沙尼亞文"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "愛爾蘭文"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "溫舊文"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "瑞士德語"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "瑞典文"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "è‘¡è„牙文"
+ },
+ "si": {
+ "code": "si",
+ "name": "僧伽羅文"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "維å¾çˆ¾æ–‡"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "è’™å¤æ–‡"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "蒙當文"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "豪撒文"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "寮文"
+ },
+ "de": {
+ "code": "de",
+ "name": "å¾·æ–‡"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "德文(瑞士)"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "摩洛哥標準塔馬齊格特文"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "摩爾多瓦羅馬尼亞文"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "æ­æ´²è¥¿ç­ç‰™æ–‡"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "æ­æ´²è‘¡è„牙文"
+ },
+ "my": {
+ "code": "my",
+ "name": "緬甸文"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "魯巴加丹加文"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "墨西哥西ç­ç‰™æ–‡"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "澳洲英文"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "盧森堡文"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "盧雅文"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "盧奧文"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "ç¹é«”中文"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "è³½ç´æ–‡"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "韓文"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "簡體中文"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "薩布魯文"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "è—æ–‡"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "羅瓦文"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "羅馬尼亞文"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "羅曼斯文"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "蘇格蘭蓋爾文"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "蘭åšæ–‡"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/zh-Hant-MO.json b/library/intl/resources/language/zh-Hant-MO.json
new file mode 100644
index 000000000..177cca849
--- /dev/null
+++ b/library/intl/resources/language/zh-Hant-MO.json
@@ -0,0 +1,738 @@
+{
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "上索布文"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "下索布文"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "土耳其文"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "å¹²é”æ–‡"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "中文"
+ },
+ "da": {
+ "code": "da",
+ "name": "丹麥文"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "巴西葡è„牙語"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "巴克摩挪å¨æ–‡"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "巴斯克文"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "å·´è²äºžæ–‡"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "å·´è–©æ–‡"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "扎爾馬文"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "日文"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "世界語"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "加里西亞文"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "加拿大英文"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "加泰羅尼亞文"
+ },
+ "se": {
+ "code": "se",
+ "name": "北方薩米文"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "北å°åº¦æ–‡"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "北地畢列文"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "北桑海文"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "å¡æ¯”爾文"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "å¡å¸ƒå¨çˆ¾ç¬¬æ–‡"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "å¡å§†å·´æ–‡"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "å¡å€«é‡‘æ–‡"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "å¤å‰æ‹‰ç‰¹æ–‡"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "å¤è¥¿æ–‡"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "å°å¡”æ–‡"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "å²ç“¦å¸Œé‡Œæ–‡"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "尼泊爾文"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "å°¼æšç§‘èŠæ–‡"
+ },
+ "br": {
+ "code": "br",
+ "name": "布里多尼文"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "弗留利文"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "瓦伊文"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "瓦瑟文"
+ },
+ "be": {
+ "code": "be",
+ "name": "白俄羅斯文"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "立陶宛文"
+ },
+ "is": {
+ "code": "is",
+ "name": "冰島文"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "匈牙利文"
+ },
+ "id": {
+ "code": "id",
+ "name": "å°å°¼æ–‡"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "å‰åº«å°¤æ–‡"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "å‰çˆ¾å‰æ–¯æ–‡"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "夸西奧文"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "朱拉文"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "西弗里西亞文"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "西桑海文"
+ },
+ "es": {
+ "code": "es",
+ "name": "西ç­ç‰™æ–‡"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "佛蘭芒文"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "克里奧文(模里西斯)"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "克羅地亞文"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "努埃爾文"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "åŽç´é”æ–‡"
+ },
+ "he": {
+ "code": "he",
+ "name": "希伯來文"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "希爾哈文"
+ },
+ "el": {
+ "code": "el",
+ "name": "希臘文"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "è²ç´æ–‡"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "亞罕文"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "亞美尼亞文"
+ },
+ "az": {
+ "code": "az",
+ "name": "亞塞拜然文"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ä¾æ±ªéƒ½æ–‡"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "å¦ç±³çˆ¾æ–‡"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "奇加文"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "孟加拉文"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "å®—å¡æ–‡"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "尚巴拉文"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "拉脫維亞文"
+ },
+ "to": {
+ "code": "to",
+ "name": "æ±åŠ æ–‡"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "æ±æ¡‘æµ·æ–‡"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "林加拉文"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "法文"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "法羅文"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "波士尼亞文"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "波斯文"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "波蘭文"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "芬蘭文"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "阿åŽæ–‡"
+ },
+ "am": {
+ "code": "am",
+ "name": "阿姆哈拉文"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "阿拉伯文"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "阿斯圖里亞文"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "阿爾巴尼亞文"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "阿蘇文"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ä¿„æ–‡"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ä¿åŠ åˆ©äºžæ–‡"
+ },
+ "af": {
+ "code": "af",
+ "name": "å—éžè·è˜­æ–‡"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "哈薩克文"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "å¨çˆ¾æ–¯æ–‡"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "æ´‹åžæ–‡"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "科隆文"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "約魯巴文"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "美國英文"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "è€è«¾æ–¯å…‹æŒªå¨æ–‡"
+ },
+ "en": {
+ "code": "en",
+ "name": "英文"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "英國英文"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "ä¿®ç´æ–‡"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "剛果å²ç“¦å¸Œé‡Œæ–‡"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "埃維文"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "æ©å¸ƒæ–‡"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "æ©æ ¼å§†å·´æ–‡"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "æ—é®æ™®æ–‡"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "朗å‰æ–‡"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "柴羅基文"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "格陵蘭文"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "桑戈文"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "æ¡‘å¤æ–‡"
+ },
+ "th": {
+ "code": "th",
+ "name": "æ³°æ–‡"
+ },
+ "te": {
+ "code": "te",
+ "name": "泰盧固文"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "çƒå…‹è˜­æ–‡"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "çƒèŒ²åˆ¥å…‹æ–‡"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "çƒçˆ¾éƒ½æ–‡"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "特索文"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "ç­å·´æ‹‰æ–‡"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "祖魯文"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "ç´é¦¬æ–‡"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "索加文"
+ },
+ "so": {
+ "code": "so",
+ "name": "索馬利文"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "馬孔德文"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "馬夸文"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "馬來文"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "馬來亞拉姆文"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "馬其頓文"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "馬拉加斯文"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "馬拉地文"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "馬æ°ç¾Žæ–‡"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "馬爾他文"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "馬賽文"
+ },
+ "km": {
+ "code": "km",
+ "name": "高棉文"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "æ·å…‹æ–‡"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "梅魯文"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ç¾ä»£æ¨™æº–阿拉伯文"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "è·è˜­æ–‡"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "åšå¤šæ–‡"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "喀什米爾文"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "喬治亞文"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "富拉文"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "æ格利尼亞文"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "斯洛文尼亞文"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "斯洛ä¼å…‹æ–‡"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "普什圖文"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "è²å¾‹è³“æ–‡"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "越å—æ–‡"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "隆迪文"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "塔馬齊格特文"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "塞爾維亞文"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "奧地利德文"
+ },
+ "or": {
+ "code": "or",
+ "name": "奧里雅文"
+ },
+ "it": {
+ "code": "it",
+ "name": "æ„大利文"
+ },
+ "et": {
+ "code": "et",
+ "name": "愛沙尼亞文"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "愛爾蘭文"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "溫舊文"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "瑞士德語"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "瑞典文"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "è‘¡è„牙文"
+ },
+ "si": {
+ "code": "si",
+ "name": "僧伽羅文"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "維å¾çˆ¾æ–‡"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "è’™å¤æ–‡"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "蒙當文"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "豪撒文"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "寮文"
+ },
+ "de": {
+ "code": "de",
+ "name": "å¾·æ–‡"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "德文(瑞士)"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "摩洛哥標準塔馬齊格特文"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "摩爾多瓦羅馬尼亞文"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "æ­æ´²è¥¿ç­ç‰™æ–‡"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "æ­æ´²è‘¡è„牙文"
+ },
+ "my": {
+ "code": "my",
+ "name": "緬甸文"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "魯巴加丹加文"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "墨西哥西ç­ç‰™æ–‡"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "澳洲英文"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "盧森堡文"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "盧雅文"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "盧奧文"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "ç¹é«”中文"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "è³½ç´æ–‡"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "韓文"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "簡體中文"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "薩布魯文"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "è—æ–‡"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "羅瓦文"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "羅馬尼亞文"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "羅曼斯文"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "蘇格蘭蓋爾文"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "蘭åšæ–‡"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/zh-Hant.json b/library/intl/resources/language/zh-Hant.json
new file mode 100644
index 000000000..4d7dcb999
--- /dev/null
+++ b/library/intl/resources/language/zh-Hant.json
@@ -0,0 +1,738 @@
+{
+ "de-AT": {
+ "code": "de-AT",
+ "name": "de_AT"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "en_AU"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "en_CA"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "en_GB"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "en_US"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "es_MX"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "fr_CA"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "fr_CH"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "pt_BR"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "上索布文"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "下索布文"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "土耳其文"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "å¹²é”æ–‡"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "中文"
+ },
+ "da": {
+ "code": "da",
+ "name": "丹麥文"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "巴克摩挪å¨æ–‡"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "巴斯克文"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "å·´è²äºžæ–‡"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "å·´è–©æ–‡"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "扎爾馬文"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "日文"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "世界文"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "加利西亞文"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "加泰羅尼亞文"
+ },
+ "se": {
+ "code": "se",
+ "name": "北方薩米文"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "北å°åº¦æ–‡"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "北地畢列文"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "北桑海文"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "å¡æ¯”爾文"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "å¡å¸ƒå¨çˆ¾ç¬¬æ–‡"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "å¡å§†å·´æ–‡"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "å¡å€«é‡‘æ–‡"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "å¤å‰æ‹‰ç‰¹æ–‡"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "å¤è¥¿æ–‡"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "å°å¡”æ–‡"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "å²ç“¦å¸Œé‡Œæ–‡"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "å²ç“¦å¸Œé‡Œæ–‡ï¼ˆå‰›æžœï¼‰"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "尼泊爾文"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "å°¼æšç§‘èŠæ–‡"
+ },
+ "br": {
+ "code": "br",
+ "name": "布列塔尼文"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "弗留利文"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "瓦伊文"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "瓦瑟文"
+ },
+ "be": {
+ "code": "be",
+ "name": "白俄羅斯文"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "立陶宛文"
+ },
+ "is": {
+ "code": "is",
+ "name": "冰島文"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "匈牙利文"
+ },
+ "id": {
+ "code": "id",
+ "name": "å°å°¼æ–‡"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "å‰åº«å°¤æ–‡"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "å‰çˆ¾å‰æ–¯æ–‡"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "夸西奧文"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "朱拉文"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "西弗里西亞文"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "西桑海文"
+ },
+ "es": {
+ "code": "es",
+ "name": "西ç­ç‰™æ–‡"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "西ç­ç‰™æ–‡ï¼ˆæ­æ´²ï¼‰"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "佛蘭芒文"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "克里奧文(模里西斯)"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "克羅埃西亞文"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "努埃爾文"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "åŽé‚£é”æ–‡"
+ },
+ "he": {
+ "code": "he",
+ "name": "希伯來文"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "希爾哈文"
+ },
+ "el": {
+ "code": "el",
+ "name": "希臘文"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "è²ç´æ–‡"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "亞罕文"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "亞美尼亞文"
+ },
+ "az": {
+ "code": "az",
+ "name": "亞塞拜然文"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "ä¾æ±ªéƒ½æ–‡"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "å¦ç±³çˆ¾æ–‡"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "奇加文"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "孟加拉文"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "å®—å¡æ–‡"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "尚巴拉文"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "拉脫維亞文"
+ },
+ "to": {
+ "code": "to",
+ "name": "æ±åŠ æ–‡"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "æ±æ¡‘æµ·æ–‡"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "林加拉文"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "法文"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "法羅文"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "波士尼亞文"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "波斯文"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "波蘭文"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "芬蘭文"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "阿åŽæ–‡"
+ },
+ "am": {
+ "code": "am",
+ "name": "阿姆哈拉文"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "阿拉伯文"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "阿斯圖里亞文"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "阿爾巴尼亞文"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "阿蘇文"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ä¿„æ–‡"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ä¿åŠ åˆ©äºžæ–‡"
+ },
+ "af": {
+ "code": "af",
+ "name": "å—éžè·è˜­æ–‡"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "哈薩克文"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "å¨çˆ¾æ–¯æ–‡"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "æ´‹åžæ–‡"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "科隆文"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "約魯巴文"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "è€è«¾æ–¯å…‹æŒªå¨æ–‡"
+ },
+ "en": {
+ "code": "en",
+ "name": "英文"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "埃維文"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "æ©å¸ƒæ–‡"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "æ©æ ¼å§†å·´æ–‡"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "æ—é®æ™®æ–‡"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "朗å‰æ–‡"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "柴羅基文"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "格陵蘭文"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "桑戈文"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "æ¡‘å¤æ–‡"
+ },
+ "th": {
+ "code": "th",
+ "name": "æ³°æ–‡"
+ },
+ "te": {
+ "code": "te",
+ "name": "泰盧固文"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "çƒå…‹è˜­æ–‡"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "çƒèŒ²åˆ¥å…‹æ–‡"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "çƒéƒ½æ–‡"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "特索文"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "ç­å·´æ‹‰æ–‡"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "祖魯文"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "ç´é¦¬æ–‡"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "索加文"
+ },
+ "so": {
+ "code": "so",
+ "name": "索馬利文"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "馬孔德文"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "馬夸文"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "馬來文"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "馬來亞拉姆文"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "馬其頓文"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "馬拉加什文"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "馬拉地文"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "馬æ°ç¾Žæ–‡"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "馬爾他文"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "馬賽文"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "高地德文(瑞士)"
+ },
+ "km": {
+ "code": "km",
+ "name": "高棉文"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "æ·å…‹æ–‡"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "梅魯文"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "ç¾ä»£æ¨™æº–阿拉伯文"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "è·è˜­æ–‡"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "åšå¤šæ–‡"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "喀什米爾文"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "喬治亞文"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "富拉文"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "æ格利尼亞文"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "斯洛ä¼å…‹æ–‡"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "斯洛維尼亞文"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "普什圖文"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "è²å¾‹è³“æ–‡"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "越å—æ–‡"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "隆迪文"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "塔馬齊格特文"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "塞內加爾文"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "塞爾維亞文"
+ },
+ "et": {
+ "code": "et",
+ "name": "愛沙尼亞文"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "愛爾蘭文"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "溫舊文"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "瑞典文"
+ },
+ "it": {
+ "code": "it",
+ "name": "義大利文"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "è‘¡è„牙文"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "è‘¡è„牙文(æ­æ´²ï¼‰"
+ },
+ "si": {
+ "code": "si",
+ "name": "僧伽羅文"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "維å¾çˆ¾æ–‡"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "è’™å¤æ–‡"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "蒙當文"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "豪撒文"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "寮文"
+ },
+ "de": {
+ "code": "de",
+ "name": "å¾·æ–‡"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "德文(瑞士)"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "摩爾多瓦文"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "標準摩洛哥塔馬塞特文"
+ },
+ "or": {
+ "code": "or",
+ "name": "æ­åˆ©äºžæ–‡"
+ },
+ "my": {
+ "code": "my",
+ "name": "緬甸文"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "魯巴加丹加文"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "盧森堡文"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "盧雅文"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "盧奧文"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "ç¹é«”中文"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "è³½ç´æ–‡"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "韓文"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "簡體中文"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "薩布魯文"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "è—æ–‡"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "羅瓦文"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "羅馬尼亞文"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "羅曼斯文"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "蘇格蘭蓋爾文"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "蘭åšæ–‡"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/zh.json b/library/intl/resources/language/zh.json
new file mode 100644
index 000000000..85169c37b
--- /dev/null
+++ b/library/intl/resources/language/zh.json
@@ -0,0 +1,738 @@
+{
+ "sq": {
+ "code": "sq",
+ "name": "阿尔巴尼亚文"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "阿肯文"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "阿拉伯文"
+ },
+ "am": {
+ "code": "am",
+ "name": "阿姆哈拉文"
+ },
+ "az": {
+ "code": "az",
+ "name": "阿塞拜疆文"
+ },
+ "ast": {
+ "code": "ast",
+ "name": "阿斯图里亚æ€ç‰¹æ–‡"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "阿è‹æ–‡"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "埃维文"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "爱尔兰文"
+ },
+ "et": {
+ "code": "et",
+ "name": "爱沙尼亚文"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "奥地利德文"
+ },
+ "or": {
+ "code": "or",
+ "name": "奥里亚文"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "澳大利亚英文"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "å·´è²äºšæ–‡"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "å·´è¨æ–‡"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "巴斯克文"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "巴西葡è„牙文"
+ },
+ "be": {
+ "code": "be",
+ "name": "白俄罗斯文"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "ç­å·´æ‹‰æ–‡"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "ä¿åŠ åˆ©äºšæ–‡"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "北æ©å¾·è´å‹’æ–‡"
+ },
+ "se": {
+ "code": "se",
+ "name": "北è¨ç±³æ–‡"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "北桑海文"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "è´çº³æ–‡"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "标准摩洛哥塔马塞特文"
+ },
+ "is": {
+ "code": "is",
+ "name": "冰岛文"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "波兰文"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "波斯尼亚文"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "波斯文"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "åšå¤šæ–‡"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "ä¸ä¸¹æ–‡"
+ },
+ "br": {
+ "code": "br",
+ "name": "布里多尼文"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "è—æ–‡"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "彻罗基文"
+ },
+ "da": {
+ "code": "da",
+ "name": "丹麦文"
+ },
+ "de": {
+ "code": "de",
+ "name": "å¾·æ–‡"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "东桑海文"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "ä¿„æ–‡"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "æ©å¸ƒæ–‡"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "æ©è‰®å·´"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "法罗文"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "法文"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "ç¹ä½“中文"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "è²å¾‹å®¾æ–‡"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "芬兰文"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "弗留利文"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "佛兰芒文"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "夫拉文"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "刚果斯瓦希里文"
+ },
+ "km": {
+ "code": "km",
+ "name": "高棉文"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "格陵兰文"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "æ ¼é²å‰äºšæ–‡"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "å¤å‰æ‹‰ç‰¹æ–‡"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "å¤è¥¿æ–‡"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "哈è¨å…‹æ–‡"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "韩文"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "豪è¨æ–‡"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "è·å…°æ–‡"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "基隆迪文"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "å‰å°”å‰æ–¯æ–‡"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "å‰åº“尤文"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "加利西亚文"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "加拿大法文"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "加拿大英文"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "加泰罗尼亚文"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "简体中文"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "æ·å…‹æ–‡"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "å¡æ¯”尔文"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "å¡å¸ƒä½›å¾—é²æ–‡"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "å¡ä¼¦é‡‘æ–‡"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "å¡å§†å·´æ–‡"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "å¡çº³è¾¾æ–‡"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "科隆文"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "克罗地亚文"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "克什米尔文"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "夸西奥文"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "拉脱维亚文"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "å…°åšæ–‡"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "朗å‰æ–‡"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "è€æŒæ–‡"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "立陶宛文"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "林加拉文"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "å¢å¥¥æ–‡"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "å¢å¹²è¾¾æ–‡"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "å¢æ£®å ¡æ–‡"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "å¢é›…æ–‡"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "é²å·´åŠ ä¸¹åŠ æ–‡"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "罗马尼亚文"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "罗曼什文"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "罗瓦文"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "马尔加什文"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "马耳他文"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "马孔德文"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "马夸文"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "马拉地文"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "马拉雅拉姆文"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "马æ¥æ–‡"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "马其顿文"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "马切姆文"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "毛里求斯克里奥尔文"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "梅é²æ–‡"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "美å¼è‹±æ–‡"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "蒙当文"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "è’™å¤æ–‡"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "孟加拉文"
+ },
+ "my": {
+ "code": "my",
+ "name": "缅甸文"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "摩尔多瓦文"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "墨西哥西ç­ç‰™æ–‡"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "纳马文"
+ },
+ "af": {
+ "code": "af",
+ "name": "å—éžè·å…°æ–‡"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "尼昂科勒文"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "尼泊尔文"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "努埃尔文"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "挪å¨åšå…‹é©¬å°”æ–‡"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "挪å¨å°¼è¯ºæ–¯å…‹æ–‡"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "欧洲葡è„牙文"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "欧洲西ç­ç‰™æ–‡"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "æ—é®æ™®æ–‡"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "è‘¡è„牙文"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "普什图文"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "奇加文"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "日文"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "瑞典文"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "瑞士德文"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "瑞士法文"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "瑞士高地德文"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "è¨ä¼Šæ–‡"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "塞尔维亚文"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "塞纳文"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "桑布é²æ–‡"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "桑戈文"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "æ¡‘å¤æ–‡"
+ },
+ "si": {
+ "code": "si",
+ "name": "僧伽罗文"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "上索布文"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "ç»çº³æ–‡"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "世界文"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "斯洛ä¼å…‹æ–‡"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "斯洛文尼亚文"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "斯瓦希里文"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "è‹æ ¼å…°ç›–尔文"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "索加文"
+ },
+ "so": {
+ "code": "so",
+ "name": "索马里文"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "塔马é½æ ¼ç‰¹æ–‡"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "å°å¡”æ–‡"
+ },
+ "te": {
+ "code": "te",
+ "name": "æ³°å¢å›ºæ–‡"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "泰米尔文"
+ },
+ "th": {
+ "code": "th",
+ "name": "æ³°æ–‡"
+ },
+ "to": {
+ "code": "to",
+ "name": "汤加文"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "特索文"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "æ格里尼亚文"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "土耳其文"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "瓦尔瑟文"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "瓦伊文"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "æ—ºæœæ–‡"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "å¨å°”士文"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "ç»´å¾å°”æ–‡"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "温旧文"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "乌尔都文"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "乌克兰文"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "乌兹别克文"
+ },
+ "he": {
+ "code": "he",
+ "name": "希伯æ¥æ–‡"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "希尔哈文"
+ },
+ "el": {
+ "code": "el",
+ "name": "希腊文"
+ },
+ "es": {
+ "code": "es",
+ "name": "西ç­ç‰™æ–‡"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "西弗里西亚文"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "西桑海文"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "下索布文"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "现代标准阿拉伯文"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "香巴拉文"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "匈牙利文"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "亚罕文"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "亚美尼亚文"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "æ´‹åžæ–‡"
+ },
+ "it": {
+ "code": "it",
+ "name": "æ„大利文"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "å°åœ°æ–‡"
+ },
+ "id": {
+ "code": "id",
+ "name": "å°åº¦å°¼è¥¿äºšæ–‡"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "英å¼è‹±æ–‡"
+ },
+ "en": {
+ "code": "en",
+ "name": "英文"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "约é²å·´æ–‡"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "越å—æ–‡"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "哲尔马文"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "中文"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "朱拉文"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "祖é²æ–‡"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/language/zu.json b/library/intl/resources/language/zu.json
new file mode 100644
index 000000000..cffe0347a
--- /dev/null
+++ b/library/intl/resources/language/zu.json
@@ -0,0 +1,738 @@
+{
+ "ast": {
+ "code": "ast",
+ "name": "Asturian"
+ },
+ "asa": {
+ "code": "asa",
+ "name": "Asu"
+ },
+ "bas": {
+ "code": "bas",
+ "name": "Basaa"
+ },
+ "ksh": {
+ "code": "ksh",
+ "name": "Colognian"
+ },
+ "es-ES": {
+ "code": "es-ES",
+ "name": "es_ES"
+ },
+ "ewo": {
+ "code": "ewo",
+ "name": "Ewondo"
+ },
+ "fur": {
+ "code": "fur",
+ "name": "Friulian"
+ },
+ "ff": {
+ "code": "ff",
+ "name": "Fulah"
+ },
+ "en-US": {
+ "code": "en-US",
+ "name": "i-American English"
+ },
+ "en-GB": {
+ "code": "en-GB",
+ "name": "i-British English"
+ },
+ "en-CA": {
+ "code": "en-CA",
+ "name": "i-Canadian English"
+ },
+ "en": {
+ "code": "en",
+ "name": "i-English"
+ },
+ "lo": {
+ "code": "lo",
+ "name": "i-Lao"
+ },
+ "nn": {
+ "code": "nn",
+ "name": "i-Norwegian Nynorsk"
+ },
+ "gd": {
+ "code": "gd",
+ "name": "i-Scottish Gaelic"
+ },
+ "si": {
+ "code": "si",
+ "name": "i-Sinhala"
+ },
+ "af": {
+ "code": "af",
+ "name": "isi-Afrikaans"
+ },
+ "agq": {
+ "code": "agq",
+ "name": "isi-Aghem"
+ },
+ "ak": {
+ "code": "ak",
+ "name": "isi-Akan"
+ },
+ "sq": {
+ "code": "sq",
+ "name": "isi-Albania"
+ },
+ "am": {
+ "code": "am",
+ "name": "isi-Amharic"
+ },
+ "ar": {
+ "code": "ar",
+ "name": "isi-Arabic"
+ },
+ "ar-001": {
+ "code": "ar-001",
+ "name": "Isi-Arabic Esijwayelekile Samanje"
+ },
+ "hy": {
+ "code": "hy",
+ "name": "isi-Armenia"
+ },
+ "de-AT": {
+ "code": "de-AT",
+ "name": "isi-Austrian German"
+ },
+ "en-AU": {
+ "code": "en-AU",
+ "name": "isi-Austrillian English"
+ },
+ "az": {
+ "code": "az",
+ "name": "isi-Azerbaijani"
+ },
+ "ksf": {
+ "code": "ksf",
+ "name": "isi-Bafia"
+ },
+ "bm": {
+ "code": "bm",
+ "name": "isi-Bambara"
+ },
+ "eu": {
+ "code": "eu",
+ "name": "isi-Basque"
+ },
+ "be": {
+ "code": "be",
+ "name": "isi-Belarusian"
+ },
+ "bez": {
+ "code": "bez",
+ "name": "isi-Bena"
+ },
+ "bn": {
+ "code": "bn",
+ "name": "isi-Bengali"
+ },
+ "brx": {
+ "code": "brx",
+ "name": "isi-Bodo"
+ },
+ "bs": {
+ "code": "bs",
+ "name": "isi-Bosnian"
+ },
+ "pt-BR": {
+ "code": "pt-BR",
+ "name": "isi-Brazillian Portuguese"
+ },
+ "br": {
+ "code": "br",
+ "name": "Isi-Breton"
+ },
+ "bg": {
+ "code": "bg",
+ "name": "isi-Bulgari"
+ },
+ "my": {
+ "code": "my",
+ "name": "isi-Burmese"
+ },
+ "fr-CA": {
+ "code": "fr-CA",
+ "name": "isi-Canadian French"
+ },
+ "ca": {
+ "code": "ca",
+ "name": "isi-Catalan"
+ },
+ "tzm": {
+ "code": "tzm",
+ "name": "isi-Central Atlas Tamazight"
+ },
+ "chr": {
+ "code": "chr",
+ "name": "Isi-Cherokee"
+ },
+ "cgg": {
+ "code": "cgg",
+ "name": "isi-Chiga"
+ },
+ "zh": {
+ "code": "zh",
+ "name": "isi-Chinese"
+ },
+ "swc": {
+ "code": "swc",
+ "name": "isi-Congo Swahili"
+ },
+ "hr": {
+ "code": "hr",
+ "name": "isi-Croatian"
+ },
+ "cs": {
+ "code": "cs",
+ "name": "isi-Czech"
+ },
+ "da": {
+ "code": "da",
+ "name": "isi-Danish"
+ },
+ "nl": {
+ "code": "nl",
+ "name": "isi-Dutch"
+ },
+ "dz": {
+ "code": "dz",
+ "name": "isi-Dzongkha"
+ },
+ "ebu": {
+ "code": "ebu",
+ "name": "isi-Embu"
+ },
+ "eo": {
+ "code": "eo",
+ "name": "isi-Esperanto"
+ },
+ "et": {
+ "code": "et",
+ "name": "isi-Estonia"
+ },
+ "pt-PT": {
+ "code": "pt-PT",
+ "name": "isi-European Portuguese"
+ },
+ "ee": {
+ "code": "ee",
+ "name": "Isi-Ewe"
+ },
+ "fo": {
+ "code": "fo",
+ "name": "isi-Faroese"
+ },
+ "fil": {
+ "code": "fil",
+ "name": "isi-Filipino"
+ },
+ "fi": {
+ "code": "fi",
+ "name": "isi-Finnish"
+ },
+ "nl-BE": {
+ "code": "nl-BE",
+ "name": "isi-Flemish"
+ },
+ "fr": {
+ "code": "fr",
+ "name": "isi-French"
+ },
+ "gl": {
+ "code": "gl",
+ "name": "isi-Galicia"
+ },
+ "lg": {
+ "code": "lg",
+ "name": "Isi-Ganda"
+ },
+ "ka": {
+ "code": "ka",
+ "name": "isi-Georgian"
+ },
+ "de": {
+ "code": "de",
+ "name": "isi-German"
+ },
+ "el": {
+ "code": "el",
+ "name": "isi-Greek"
+ },
+ "gu": {
+ "code": "gu",
+ "name": "isi-Gujarati"
+ },
+ "guz": {
+ "code": "guz",
+ "name": "isi-Gusli"
+ },
+ "ha": {
+ "code": "ha",
+ "name": "isi-Hausa"
+ },
+ "he": {
+ "code": "he",
+ "name": "isi-Hebrew"
+ },
+ "hi": {
+ "code": "hi",
+ "name": "isi-Hindi"
+ },
+ "hu": {
+ "code": "hu",
+ "name": "isi-Hungarian"
+ },
+ "is": {
+ "code": "is",
+ "name": "isi-Icelandic"
+ },
+ "id": {
+ "code": "id",
+ "name": "isi-Indonesian"
+ },
+ "ga": {
+ "code": "ga",
+ "name": "isi-Irish"
+ },
+ "it": {
+ "code": "it",
+ "name": "isi-Italian"
+ },
+ "ja": {
+ "code": "ja",
+ "name": "isi-Japanese"
+ },
+ "dyo": {
+ "code": "dyo",
+ "name": "isi-Jola-Fonyl"
+ },
+ "kea": {
+ "code": "kea",
+ "name": "isi-Kabuverdianu"
+ },
+ "kab": {
+ "code": "kab",
+ "name": "isi-Kabyle"
+ },
+ "kl": {
+ "code": "kl",
+ "name": "isi-Kalaallisut"
+ },
+ "kln": {
+ "code": "kln",
+ "name": "isi-Kalenjin"
+ },
+ "kam": {
+ "code": "kam",
+ "name": "isi-Kamba"
+ },
+ "kn": {
+ "code": "kn",
+ "name": "isi-Kannada"
+ },
+ "ks": {
+ "code": "ks",
+ "name": "isi-Kashmiri"
+ },
+ "kk": {
+ "code": "kk",
+ "name": "isi-Kazakh"
+ },
+ "km": {
+ "code": "km",
+ "name": "isi-Khmer"
+ },
+ "ki": {
+ "code": "ki",
+ "name": "isi-Kikuyu"
+ },
+ "ko": {
+ "code": "ko",
+ "name": "isi-Korean"
+ },
+ "khq": {
+ "code": "khq",
+ "name": "isi-Koyra Chiini"
+ },
+ "ses": {
+ "code": "ses",
+ "name": "isi-Koyraboro Senni"
+ },
+ "nmg": {
+ "code": "nmg",
+ "name": "isi-Kwasio"
+ },
+ "ky": {
+ "code": "ky",
+ "name": "isi-Kyrgyz"
+ },
+ "lag": {
+ "code": "lag",
+ "name": "isi-Langi"
+ },
+ "lv": {
+ "code": "lv",
+ "name": "isi-Latvian"
+ },
+ "ln": {
+ "code": "ln",
+ "name": "isi-Lingala"
+ },
+ "lt": {
+ "code": "lt",
+ "name": "isi-Lithuanian"
+ },
+ "dsb": {
+ "code": "dsb",
+ "name": "isi-Lower Sorbian"
+ },
+ "lu": {
+ "code": "lu",
+ "name": "isi-Luba-Katanga"
+ },
+ "luo": {
+ "code": "luo",
+ "name": "isi-Luo"
+ },
+ "lb": {
+ "code": "lb",
+ "name": "isi-Luxembourgish"
+ },
+ "luy": {
+ "code": "luy",
+ "name": "isi-Luyia"
+ },
+ "mk": {
+ "code": "mk",
+ "name": "isi-Macedonian"
+ },
+ "jmc": {
+ "code": "jmc",
+ "name": "isi-Machame"
+ },
+ "mgh": {
+ "code": "mgh",
+ "name": "isi-Makhuwa-Meetto"
+ },
+ "kde": {
+ "code": "kde",
+ "name": "isi-Makonde"
+ },
+ "mg": {
+ "code": "mg",
+ "name": "isi-Malagasy"
+ },
+ "ms": {
+ "code": "ms",
+ "name": "isi-Malay"
+ },
+ "ml": {
+ "code": "ml",
+ "name": "isi-Malayalam"
+ },
+ "mt": {
+ "code": "mt",
+ "name": "isi-Maltese"
+ },
+ "mr": {
+ "code": "mr",
+ "name": "isi-Marathi"
+ },
+ "mas": {
+ "code": "mas",
+ "name": "isi-Masai"
+ },
+ "mer": {
+ "code": "mer",
+ "name": "isi-Meru"
+ },
+ "es-MX": {
+ "code": "es-MX",
+ "name": "isi-Mexican Spanish"
+ },
+ "ro-MD": {
+ "code": "ro-MD",
+ "name": "isi-Moldavian"
+ },
+ "mn": {
+ "code": "mn",
+ "name": "isi-Mongolian"
+ },
+ "mfe": {
+ "code": "mfe",
+ "name": "Isi-Morisyen"
+ },
+ "mua": {
+ "code": "mua",
+ "name": "isi-Mundang"
+ },
+ "naq": {
+ "code": "naq",
+ "name": "isi-Nama"
+ },
+ "ne": {
+ "code": "ne",
+ "name": "isi-Nepali"
+ },
+ "jgo": {
+ "code": "jgo",
+ "name": "isi-Ngomba"
+ },
+ "nd": {
+ "code": "nd",
+ "name": "isi-North Ndebele"
+ },
+ "se": {
+ "code": "se",
+ "name": "isi-Northern Sami"
+ },
+ "nb": {
+ "code": "nb",
+ "name": "isi-Norwegian Bokmål"
+ },
+ "nus": {
+ "code": "nus",
+ "name": "isi-Nuer"
+ },
+ "nyn": {
+ "code": "nyn",
+ "name": "Isi-Nyankole"
+ },
+ "or": {
+ "code": "or",
+ "name": "isi-Oriya"
+ },
+ "ps": {
+ "code": "ps",
+ "name": "isi-Pashto"
+ },
+ "fa": {
+ "code": "fa",
+ "name": "isi-Persian"
+ },
+ "pl": {
+ "code": "pl",
+ "name": "isi-Polish"
+ },
+ "pt": {
+ "code": "pt",
+ "name": "isi-Portuguese"
+ },
+ "pa": {
+ "code": "pa",
+ "name": "isi-Punjabi"
+ },
+ "ro": {
+ "code": "ro",
+ "name": "isi-Romanian"
+ },
+ "rm": {
+ "code": "rm",
+ "name": "isi-Romansh"
+ },
+ "rof": {
+ "code": "rof",
+ "name": "isi-Rombo"
+ },
+ "rn": {
+ "code": "rn",
+ "name": "isi-Rundi"
+ },
+ "ru": {
+ "code": "ru",
+ "name": "isi-Russian"
+ },
+ "rwk": {
+ "code": "rwk",
+ "name": "isi-Rwa"
+ },
+ "saq": {
+ "code": "saq",
+ "name": "isi-Samburu"
+ },
+ "sg": {
+ "code": "sg",
+ "name": "isi-Sango"
+ },
+ "sbp": {
+ "code": "sbp",
+ "name": "isi-Sangu"
+ },
+ "seh": {
+ "code": "seh",
+ "name": "isi-Sena"
+ },
+ "sr": {
+ "code": "sr",
+ "name": "isi-Serbian"
+ },
+ "ksb": {
+ "code": "ksb",
+ "name": "isi-Shambala"
+ },
+ "sn": {
+ "code": "sn",
+ "name": "isi-Shona"
+ },
+ "zh-Hans": {
+ "code": "zh-Hans",
+ "name": "isi-Sipmlified Chinese"
+ },
+ "sk": {
+ "code": "sk",
+ "name": "isi-Slovak"
+ },
+ "sl": {
+ "code": "sl",
+ "name": "isi-Slovenian"
+ },
+ "xog": {
+ "code": "xog",
+ "name": "isi-Soga"
+ },
+ "so": {
+ "code": "so",
+ "name": "isi-Somali"
+ },
+ "es": {
+ "code": "es",
+ "name": "isi-Spanish"
+ },
+ "zgh": {
+ "code": "zgh",
+ "name": "isi-Standard Moroccan Tamazight"
+ },
+ "sw": {
+ "code": "sw",
+ "name": "isi-Swahili"
+ },
+ "sv": {
+ "code": "sv",
+ "name": "isi-Swedish"
+ },
+ "fr-CH": {
+ "code": "fr-CH",
+ "name": "isi-Swiss French"
+ },
+ "gsw": {
+ "code": "gsw",
+ "name": "isi-Swiss German"
+ },
+ "de-CH": {
+ "code": "de-CH",
+ "name": "isi-Swiss High German"
+ },
+ "shi": {
+ "code": "shi",
+ "name": "isi-Tachelhit"
+ },
+ "dav": {
+ "code": "dav",
+ "name": "isi-Taita"
+ },
+ "ta": {
+ "code": "ta",
+ "name": "isi-Tamil"
+ },
+ "twq": {
+ "code": "twq",
+ "name": "isi-Tasawaq"
+ },
+ "te": {
+ "code": "te",
+ "name": "isi-Telugu"
+ },
+ "teo": {
+ "code": "teo",
+ "name": "isi-Teso"
+ },
+ "th": {
+ "code": "th",
+ "name": "isi-Thai"
+ },
+ "bo": {
+ "code": "bo",
+ "name": "isi-Tibetan"
+ },
+ "ti": {
+ "code": "ti",
+ "name": "isi-Tigrinya"
+ },
+ "to": {
+ "code": "to",
+ "name": "Isi-Tongan"
+ },
+ "zh-Hant": {
+ "code": "zh-Hant",
+ "name": "isi-Traditional Chinese"
+ },
+ "tr": {
+ "code": "tr",
+ "name": "isi-Turkish"
+ },
+ "ug": {
+ "code": "ug",
+ "name": "isi-Uighur"
+ },
+ "uk": {
+ "code": "uk",
+ "name": "isi-Ukrainian"
+ },
+ "hsb": {
+ "code": "hsb",
+ "name": "isi-Upper Sorbian"
+ },
+ "ur": {
+ "code": "ur",
+ "name": "isi-Urdu"
+ },
+ "uz": {
+ "code": "uz",
+ "name": "isi-Uzbek"
+ },
+ "vai": {
+ "code": "vai",
+ "name": "isi-Vai"
+ },
+ "vi": {
+ "code": "vi",
+ "name": "isi-Vietnamese"
+ },
+ "vun": {
+ "code": "vun",
+ "name": "isi-Vunjo"
+ },
+ "cy": {
+ "code": "cy",
+ "name": "isi-Welsh"
+ },
+ "fy": {
+ "code": "fy",
+ "name": "isi-Western Frisian"
+ },
+ "yo": {
+ "code": "yo",
+ "name": "isi-Yoruba"
+ },
+ "dje": {
+ "code": "dje",
+ "name": "isi-Zarma"
+ },
+ "zu": {
+ "code": "zu",
+ "name": "isiZulu"
+ },
+ "wae": {
+ "code": "wae",
+ "name": "Walser"
+ },
+ "yav": {
+ "code": "yav",
+ "name": "Yangben"
+ }
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/aa.json b/library/intl/resources/number_format/aa.json
new file mode 100644
index 000000000..a3f7208e2
--- /dev/null
+++ b/library/intl/resources/number_format/aa.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/af-NA.json b/library/intl/resources/number_format/af-NA.json
new file mode 100644
index 000000000..7ce8a94ca
--- /dev/null
+++ b/library/intl/resources/number_format/af-NA.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/af.json b/library/intl/resources/number_format/af.json
new file mode 100644
index 000000000..198b1e963
--- /dev/null
+++ b/library/intl/resources/number_format/af.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/agq.json b/library/intl/resources/number_format/agq.json
new file mode 100644
index 000000000..f86dca5c9
--- /dev/null
+++ b/library/intl/resources/number_format/agq.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00¤",
+ "accounting_currency_pattern": "#,##0.00¤",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ak.json b/library/intl/resources/number_format/ak.json
new file mode 100644
index 000000000..a3f7208e2
--- /dev/null
+++ b/library/intl/resources/number_format/ak.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/am.json b/library/intl/resources/number_format/am.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/am.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ar-DZ.json b/library/intl/resources/number_format/ar-DZ.json
new file mode 100644
index 000000000..f0f45f730
--- /dev/null
+++ b/library/intl/resources/number_format/ar-DZ.json
@@ -0,0 +1,11 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)",
+ "decimal_separator": ",",
+ "grouping_separator": ".",
+ "plus_sign": "‎+",
+ "minus_sign": "‎-"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ar-EH.json b/library/intl/resources/number_format/ar-EH.json
new file mode 100644
index 000000000..474e484f4
--- /dev/null
+++ b/library/intl/resources/number_format/ar-EH.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)",
+ "plus_sign": "‎+",
+ "minus_sign": "‎-"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ar-LY.json b/library/intl/resources/number_format/ar-LY.json
new file mode 100644
index 000000000..f0f45f730
--- /dev/null
+++ b/library/intl/resources/number_format/ar-LY.json
@@ -0,0 +1,11 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)",
+ "decimal_separator": ",",
+ "grouping_separator": ".",
+ "plus_sign": "‎+",
+ "minus_sign": "‎-"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ar-MA.json b/library/intl/resources/number_format/ar-MA.json
new file mode 100644
index 000000000..f0f45f730
--- /dev/null
+++ b/library/intl/resources/number_format/ar-MA.json
@@ -0,0 +1,11 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)",
+ "decimal_separator": ",",
+ "grouping_separator": ".",
+ "plus_sign": "‎+",
+ "minus_sign": "‎-"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ar-TN.json b/library/intl/resources/number_format/ar-TN.json
new file mode 100644
index 000000000..3d40ecdee
--- /dev/null
+++ b/library/intl/resources/number_format/ar-TN.json
@@ -0,0 +1,11 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)",
+ "decimal_separator": ",",
+ "grouping_separator": ".",
+ "plus_sign": "‎+",
+ "minus_sign": "‎-"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ar.json b/library/intl/resources/number_format/ar.json
new file mode 100644
index 000000000..a027ffa1f
--- /dev/null
+++ b/library/intl/resources/number_format/ar.json
@@ -0,0 +1,12 @@
+{
+ "numbering_system": "arab",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)",
+ "decimal_separator": "Ù«",
+ "grouping_separator": "Ù¬",
+ "plus_sign": "â€+",
+ "minus_sign": "â€-",
+ "percent_sign": "Ùª"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/as.json b/library/intl/resources/number_format/as.json
new file mode 100644
index 000000000..ef4b5e798
--- /dev/null
+++ b/library/intl/resources/number_format/as.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "beng",
+ "decimal_pattern": "#,##,##0.###",
+ "percent_pattern": "#,##,##0%",
+ "currency_pattern": "¤ #,##,##0.00",
+ "accounting_currency_pattern": "¤ #,##,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/asa.json b/library/intl/resources/number_format/asa.json
new file mode 100644
index 000000000..5ca4d4e1c
--- /dev/null
+++ b/library/intl/resources/number_format/asa.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ast.json b/library/intl/resources/number_format/ast.json
new file mode 100644
index 000000000..639e6c938
--- /dev/null
+++ b/library/intl/resources/number_format/ast.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/az.json b/library/intl/resources/number_format/az.json
new file mode 100644
index 000000000..f6e200db5
--- /dev/null
+++ b/library/intl/resources/number_format/az.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/bas.json b/library/intl/resources/number_format/bas.json
new file mode 100644
index 000000000..e7aecc094
--- /dev/null
+++ b/library/intl/resources/number_format/bas.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/be.json b/library/intl/resources/number_format/be.json
new file mode 100644
index 000000000..a17a8c14d
--- /dev/null
+++ b/library/intl/resources/number_format/be.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/bem.json b/library/intl/resources/number_format/bem.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/bem.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/bez.json b/library/intl/resources/number_format/bez.json
new file mode 100644
index 000000000..c00aa2b2f
--- /dev/null
+++ b/library/intl/resources/number_format/bez.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00¤",
+ "accounting_currency_pattern": "#,##0.00¤"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/bg.json b/library/intl/resources/number_format/bg.json
new file mode 100644
index 000000000..d72bc1232
--- /dev/null
+++ b/library/intl/resources/number_format/bg.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/bm.json b/library/intl/resources/number_format/bm.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/bm.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/bn.json b/library/intl/resources/number_format/bn.json
new file mode 100644
index 000000000..af72c4966
--- /dev/null
+++ b/library/intl/resources/number_format/bn.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "beng",
+ "decimal_pattern": "#,##,##0.###",
+ "percent_pattern": "#,##,##0%",
+ "currency_pattern": "#,##,##0.00¤",
+ "accounting_currency_pattern": "#,##,##0.00¤;(#,##,##0.00¤)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/bo.json b/library/intl/resources/number_format/bo.json
new file mode 100644
index 000000000..76f3ddcb5
--- /dev/null
+++ b/library/intl/resources/number_format/bo.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/br.json b/library/intl/resources/number_format/br.json
new file mode 100644
index 000000000..e7aecc094
--- /dev/null
+++ b/library/intl/resources/number_format/br.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/brx.json b/library/intl/resources/number_format/brx.json
new file mode 100644
index 000000000..2007f4fb6
--- /dev/null
+++ b/library/intl/resources/number_format/brx.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##,##0.###",
+ "percent_pattern": "#,##,##0%",
+ "currency_pattern": "¤ #,##,##0.00",
+ "accounting_currency_pattern": "¤ #,##,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/bs.json b/library/intl/resources/number_format/bs.json
new file mode 100644
index 000000000..639e6c938
--- /dev/null
+++ b/library/intl/resources/number_format/bs.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ca.json b/library/intl/resources/number_format/ca.json
new file mode 100644
index 000000000..d79067fe7
--- /dev/null
+++ b/library/intl/resources/number_format/ca.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/cgg.json b/library/intl/resources/number_format/cgg.json
new file mode 100644
index 000000000..a3f7208e2
--- /dev/null
+++ b/library/intl/resources/number_format/cgg.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/chr.json b/library/intl/resources/number_format/chr.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/chr.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/cs.json b/library/intl/resources/number_format/cs.json
new file mode 100644
index 000000000..e7aecc094
--- /dev/null
+++ b/library/intl/resources/number_format/cs.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/cy.json b/library/intl/resources/number_format/cy.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/cy.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/da.json b/library/intl/resources/number_format/da.json
new file mode 100644
index 000000000..59241b7e7
--- /dev/null
+++ b/library/intl/resources/number_format/da.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/dav.json b/library/intl/resources/number_format/dav.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/dav.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/de-AT.json b/library/intl/resources/number_format/de-AT.json
new file mode 100644
index 000000000..9e2fdafca
--- /dev/null
+++ b/library/intl/resources/number_format/de-AT.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/de-CH.json b/library/intl/resources/number_format/de-CH.json
new file mode 100644
index 000000000..0cdba3d23
--- /dev/null
+++ b/library/intl/resources/number_format/de-CH.json
@@ -0,0 +1,8 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤ #,##0.00;¤-#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "grouping_separator": "'"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/de-LI.json b/library/intl/resources/number_format/de-LI.json
new file mode 100644
index 000000000..b353ac425
--- /dev/null
+++ b/library/intl/resources/number_format/de-LI.json
@@ -0,0 +1,8 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "grouping_separator": "'"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/de.json b/library/intl/resources/number_format/de.json
new file mode 100644
index 000000000..59241b7e7
--- /dev/null
+++ b/library/intl/resources/number_format/de.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/dje.json b/library/intl/resources/number_format/dje.json
new file mode 100644
index 000000000..23ba53115
--- /dev/null
+++ b/library/intl/resources/number_format/dje.json
@@ -0,0 +1,8 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00¤",
+ "accounting_currency_pattern": "#,##0.00¤",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/dsb.json b/library/intl/resources/number_format/dsb.json
new file mode 100644
index 000000000..59241b7e7
--- /dev/null
+++ b/library/intl/resources/number_format/dsb.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/dua.json b/library/intl/resources/number_format/dua.json
new file mode 100644
index 000000000..e7aecc094
--- /dev/null
+++ b/library/intl/resources/number_format/dua.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/dyo.json b/library/intl/resources/number_format/dyo.json
new file mode 100644
index 000000000..dde2cfe27
--- /dev/null
+++ b/library/intl/resources/number_format/dyo.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/dz.json b/library/intl/resources/number_format/dz.json
new file mode 100644
index 000000000..4e78d7725
--- /dev/null
+++ b/library/intl/resources/number_format/dz.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##,##0.###",
+ "percent_pattern": "#,##,##0 %",
+ "currency_pattern": "¤#,##,##0.00",
+ "accounting_currency_pattern": "¤#,##,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ebu.json b/library/intl/resources/number_format/ebu.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/ebu.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ee.json b/library/intl/resources/number_format/ee.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/ee.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/el-CY.json b/library/intl/resources/number_format/el-CY.json
new file mode 100644
index 000000000..e87fb64f0
--- /dev/null
+++ b/library/intl/resources/number_format/el-CY.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/el.json b/library/intl/resources/number_format/el.json
new file mode 100644
index 000000000..a951f7d15
--- /dev/null
+++ b/library/intl/resources/number_format/el.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/en-BE.json b/library/intl/resources/number_format/en-BE.json
new file mode 100644
index 000000000..a951f7d15
--- /dev/null
+++ b/library/intl/resources/number_format/en-BE.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/en-IN.json b/library/intl/resources/number_format/en-IN.json
new file mode 100644
index 000000000..816eff469
--- /dev/null
+++ b/library/intl/resources/number_format/en-IN.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##,##0.###",
+ "percent_pattern": "#,##,##0%",
+ "currency_pattern": "¤ #,##,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/en-PK.json b/library/intl/resources/number_format/en-PK.json
new file mode 100644
index 000000000..816eff469
--- /dev/null
+++ b/library/intl/resources/number_format/en-PK.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##,##0.###",
+ "percent_pattern": "#,##,##0%",
+ "currency_pattern": "¤ #,##,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/en-ZA.json b/library/intl/resources/number_format/en-ZA.json
new file mode 100644
index 000000000..198b1e963
--- /dev/null
+++ b/library/intl/resources/number_format/en-ZA.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/en.json b/library/intl/resources/number_format/en.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/en.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/eo.json b/library/intl/resources/number_format/eo.json
new file mode 100644
index 000000000..011b800c1
--- /dev/null
+++ b/library/intl/resources/number_format/eo.json
@@ -0,0 +1,10 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": " ",
+ "minus_sign": "−"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/es-AR.json b/library/intl/resources/number_format/es-AR.json
new file mode 100644
index 000000000..43bdea5e3
--- /dev/null
+++ b/library/intl/resources/number_format/es-AR.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/es-BO.json b/library/intl/resources/number_format/es-BO.json
new file mode 100644
index 000000000..43bdea5e3
--- /dev/null
+++ b/library/intl/resources/number_format/es-BO.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/es-CL.json b/library/intl/resources/number_format/es-CL.json
new file mode 100644
index 000000000..69b541b5c
--- /dev/null
+++ b/library/intl/resources/number_format/es-CL.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤#,##0.00;¤-#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/es-CO.json b/library/intl/resources/number_format/es-CO.json
new file mode 100644
index 000000000..43bdea5e3
--- /dev/null
+++ b/library/intl/resources/number_format/es-CO.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/es-CR.json b/library/intl/resources/number_format/es-CR.json
new file mode 100644
index 000000000..43bdea5e3
--- /dev/null
+++ b/library/intl/resources/number_format/es-CR.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/es-CU.json b/library/intl/resources/number_format/es-CU.json
new file mode 100644
index 000000000..73f8db055
--- /dev/null
+++ b/library/intl/resources/number_format/es-CU.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/es-DO.json b/library/intl/resources/number_format/es-DO.json
new file mode 100644
index 000000000..73f8db055
--- /dev/null
+++ b/library/intl/resources/number_format/es-DO.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/es-EC.json b/library/intl/resources/number_format/es-EC.json
new file mode 100644
index 000000000..69b541b5c
--- /dev/null
+++ b/library/intl/resources/number_format/es-EC.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤#,##0.00;¤-#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/es-GQ.json b/library/intl/resources/number_format/es-GQ.json
new file mode 100644
index 000000000..43bdea5e3
--- /dev/null
+++ b/library/intl/resources/number_format/es-GQ.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/es-GT.json b/library/intl/resources/number_format/es-GT.json
new file mode 100644
index 000000000..73f8db055
--- /dev/null
+++ b/library/intl/resources/number_format/es-GT.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/es-HN.json b/library/intl/resources/number_format/es-HN.json
new file mode 100644
index 000000000..73f8db055
--- /dev/null
+++ b/library/intl/resources/number_format/es-HN.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/es-MX.json b/library/intl/resources/number_format/es-MX.json
new file mode 100644
index 000000000..ed01495e9
--- /dev/null
+++ b/library/intl/resources/number_format/es-MX.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/es-NI.json b/library/intl/resources/number_format/es-NI.json
new file mode 100644
index 000000000..73f8db055
--- /dev/null
+++ b/library/intl/resources/number_format/es-NI.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/es-PA.json b/library/intl/resources/number_format/es-PA.json
new file mode 100644
index 000000000..73f8db055
--- /dev/null
+++ b/library/intl/resources/number_format/es-PA.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/es-PE.json b/library/intl/resources/number_format/es-PE.json
new file mode 100644
index 000000000..73f8db055
--- /dev/null
+++ b/library/intl/resources/number_format/es-PE.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/es-PR.json b/library/intl/resources/number_format/es-PR.json
new file mode 100644
index 000000000..73f8db055
--- /dev/null
+++ b/library/intl/resources/number_format/es-PR.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/es-PY.json b/library/intl/resources/number_format/es-PY.json
new file mode 100644
index 000000000..ed88c9cf4
--- /dev/null
+++ b/library/intl/resources/number_format/es-PY.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤ #,##0.00;¤ -#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/es-SV.json b/library/intl/resources/number_format/es-SV.json
new file mode 100644
index 000000000..73f8db055
--- /dev/null
+++ b/library/intl/resources/number_format/es-SV.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/es-US.json b/library/intl/resources/number_format/es-US.json
new file mode 100644
index 000000000..73f8db055
--- /dev/null
+++ b/library/intl/resources/number_format/es-US.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/es-UY.json b/library/intl/resources/number_format/es-UY.json
new file mode 100644
index 000000000..d7fbe51cd
--- /dev/null
+++ b/library/intl/resources/number_format/es-UY.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00;(¤ #,##0.00)",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/es-VE.json b/library/intl/resources/number_format/es-VE.json
new file mode 100644
index 000000000..69b541b5c
--- /dev/null
+++ b/library/intl/resources/number_format/es-VE.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤#,##0.00;¤-#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/es.json b/library/intl/resources/number_format/es.json
new file mode 100644
index 000000000..59241b7e7
--- /dev/null
+++ b/library/intl/resources/number_format/es.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/et.json b/library/intl/resources/number_format/et.json
new file mode 100644
index 000000000..d72bc1232
--- /dev/null
+++ b/library/intl/resources/number_format/et.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/eu.json b/library/intl/resources/number_format/eu.json
new file mode 100644
index 000000000..d633ea283
--- /dev/null
+++ b/library/intl/resources/number_format/eu.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "% #,##0",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ewo.json b/library/intl/resources/number_format/ewo.json
new file mode 100644
index 000000000..dde2cfe27
--- /dev/null
+++ b/library/intl/resources/number_format/ewo.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/fa.json b/library/intl/resources/number_format/fa.json
new file mode 100644
index 000000000..26a1017a3
--- /dev/null
+++ b/library/intl/resources/number_format/fa.json
@@ -0,0 +1,12 @@
+{
+ "numbering_system": "arabext",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "‎¤#,##0.00",
+ "accounting_currency_pattern": "‎¤#,##0.00;‎(¤#,##0.00)",
+ "decimal_separator": "Ù«",
+ "grouping_separator": "Ù¬",
+ "plus_sign": "‎+‎",
+ "minus_sign": "‎−",
+ "percent_sign": "Ùª"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ff.json b/library/intl/resources/number_format/ff.json
new file mode 100644
index 000000000..dde2cfe27
--- /dev/null
+++ b/library/intl/resources/number_format/ff.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/fi.json b/library/intl/resources/number_format/fi.json
new file mode 100644
index 000000000..4c5b82818
--- /dev/null
+++ b/library/intl/resources/number_format/fi.json
@@ -0,0 +1,10 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": " ",
+ "minus_sign": "−"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/fil.json b/library/intl/resources/number_format/fil.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/fil.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/fo.json b/library/intl/resources/number_format/fo.json
new file mode 100644
index 000000000..c1e16e6dc
--- /dev/null
+++ b/library/intl/resources/number_format/fo.json
@@ -0,0 +1,10 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤#,##0.00;¤-#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;¤-#,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": ".",
+ "minus_sign": "−"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/fr-BE.json b/library/intl/resources/number_format/fr-BE.json
new file mode 100644
index 000000000..f4d872e5d
--- /dev/null
+++ b/library/intl/resources/number_format/fr-BE.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/fr-CH.json b/library/intl/resources/number_format/fr-CH.json
new file mode 100644
index 000000000..5dc15aabe
--- /dev/null
+++ b/library/intl/resources/number_format/fr-CH.json
@@ -0,0 +1,8 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤ #,##0.00;¤-#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/fr-LU.json b/library/intl/resources/number_format/fr-LU.json
new file mode 100644
index 000000000..f4d872e5d
--- /dev/null
+++ b/library/intl/resources/number_format/fr-LU.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/fr.json b/library/intl/resources/number_format/fr.json
new file mode 100644
index 000000000..5458fba77
--- /dev/null
+++ b/library/intl/resources/number_format/fr.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/fur.json b/library/intl/resources/number_format/fur.json
new file mode 100644
index 000000000..f6e200db5
--- /dev/null
+++ b/library/intl/resources/number_format/fur.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/fy.json b/library/intl/resources/number_format/fy.json
new file mode 100644
index 000000000..ff49eddc5
--- /dev/null
+++ b/library/intl/resources/number_format/fy.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00;¤ #,##0.00-",
+ "accounting_currency_pattern": "¤ #,##0.00;(¤ #,##0.00)",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ga.json b/library/intl/resources/number_format/ga.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/ga.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/gd.json b/library/intl/resources/number_format/gd.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/gd.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/gl.json b/library/intl/resources/number_format/gl.json
new file mode 100644
index 000000000..e87fb64f0
--- /dev/null
+++ b/library/intl/resources/number_format/gl.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/gsw.json b/library/intl/resources/number_format/gsw.json
new file mode 100644
index 000000000..f7a23e7ff
--- /dev/null
+++ b/library/intl/resources/number_format/gsw.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "grouping_separator": "’",
+ "minus_sign": "−"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/gu.json b/library/intl/resources/number_format/gu.json
new file mode 100644
index 000000000..c3395e8a0
--- /dev/null
+++ b/library/intl/resources/number_format/gu.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##,##0.###",
+ "percent_pattern": "#,##,##0%",
+ "currency_pattern": "¤#,##,##0.00",
+ "accounting_currency_pattern": "¤#,##,##0.00;(¤#,##,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/guz.json b/library/intl/resources/number_format/guz.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/guz.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/gv.json b/library/intl/resources/number_format/gv.json
new file mode 100644
index 000000000..a3f7208e2
--- /dev/null
+++ b/library/intl/resources/number_format/gv.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ha.json b/library/intl/resources/number_format/ha.json
new file mode 100644
index 000000000..76f3ddcb5
--- /dev/null
+++ b/library/intl/resources/number_format/ha.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/haw.json b/library/intl/resources/number_format/haw.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/haw.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/he.json b/library/intl/resources/number_format/he.json
new file mode 100644
index 000000000..b469e01a7
--- /dev/null
+++ b/library/intl/resources/number_format/he.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "plus_sign": "‎+",
+ "minus_sign": "‎-"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/hi.json b/library/intl/resources/number_format/hi.json
new file mode 100644
index 000000000..c888438cb
--- /dev/null
+++ b/library/intl/resources/number_format/hi.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##,##0.###",
+ "percent_pattern": "#,##,##0%",
+ "currency_pattern": "¤#,##,##0.00",
+ "accounting_currency_pattern": "¤#,##,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/hr.json b/library/intl/resources/number_format/hr.json
new file mode 100644
index 000000000..639e6c938
--- /dev/null
+++ b/library/intl/resources/number_format/hr.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/hsb.json b/library/intl/resources/number_format/hsb.json
new file mode 100644
index 000000000..59241b7e7
--- /dev/null
+++ b/library/intl/resources/number_format/hsb.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/hu.json b/library/intl/resources/number_format/hu.json
new file mode 100644
index 000000000..dde2cfe27
--- /dev/null
+++ b/library/intl/resources/number_format/hu.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/hy.json b/library/intl/resources/number_format/hy.json
new file mode 100644
index 000000000..8fd18e83c
--- /dev/null
+++ b/library/intl/resources/number_format/hy.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#0.###",
+ "percent_pattern": "#0%",
+ "currency_pattern": "#0.00 ¤",
+ "accounting_currency_pattern": "#0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/id.json b/library/intl/resources/number_format/id.json
new file mode 100644
index 000000000..2d0b0fad1
--- /dev/null
+++ b/library/intl/resources/number_format/id.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ig.json b/library/intl/resources/number_format/ig.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/ig.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ii.json b/library/intl/resources/number_format/ii.json
new file mode 100644
index 000000000..76f3ddcb5
--- /dev/null
+++ b/library/intl/resources/number_format/ii.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/is.json b/library/intl/resources/number_format/is.json
new file mode 100644
index 000000000..639e6c938
--- /dev/null
+++ b/library/intl/resources/number_format/is.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/it-CH.json b/library/intl/resources/number_format/it-CH.json
new file mode 100644
index 000000000..4d5d16160
--- /dev/null
+++ b/library/intl/resources/number_format/it-CH.json
@@ -0,0 +1,8 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00;¤-#,##0.00",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "grouping_separator": "'"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/it.json b/library/intl/resources/number_format/it.json
new file mode 100644
index 000000000..639e6c938
--- /dev/null
+++ b/library/intl/resources/number_format/it.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ja.json b/library/intl/resources/number_format/ja.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/ja.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/jgo.json b/library/intl/resources/number_format/jgo.json
new file mode 100644
index 000000000..f6e200db5
--- /dev/null
+++ b/library/intl/resources/number_format/jgo.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/jmc.json b/library/intl/resources/number_format/jmc.json
new file mode 100644
index 000000000..a3f7208e2
--- /dev/null
+++ b/library/intl/resources/number_format/jmc.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ka.json b/library/intl/resources/number_format/ka.json
new file mode 100644
index 000000000..e7aecc094
--- /dev/null
+++ b/library/intl/resources/number_format/ka.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/kab.json b/library/intl/resources/number_format/kab.json
new file mode 100644
index 000000000..f86dca5c9
--- /dev/null
+++ b/library/intl/resources/number_format/kab.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00¤",
+ "accounting_currency_pattern": "#,##0.00¤",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/kam.json b/library/intl/resources/number_format/kam.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/kam.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/kde.json b/library/intl/resources/number_format/kde.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/kde.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/kea.json b/library/intl/resources/number_format/kea.json
new file mode 100644
index 000000000..d72bc1232
--- /dev/null
+++ b/library/intl/resources/number_format/kea.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/khq.json b/library/intl/resources/number_format/khq.json
new file mode 100644
index 000000000..23ba53115
--- /dev/null
+++ b/library/intl/resources/number_format/khq.json
@@ -0,0 +1,8 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00¤",
+ "accounting_currency_pattern": "#,##0.00¤",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ki.json b/library/intl/resources/number_format/ki.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/ki.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/kk.json b/library/intl/resources/number_format/kk.json
new file mode 100644
index 000000000..dde2cfe27
--- /dev/null
+++ b/library/intl/resources/number_format/kk.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/kkj.json b/library/intl/resources/number_format/kkj.json
new file mode 100644
index 000000000..f6e200db5
--- /dev/null
+++ b/library/intl/resources/number_format/kkj.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/kl.json b/library/intl/resources/number_format/kl.json
new file mode 100644
index 000000000..c1e16e6dc
--- /dev/null
+++ b/library/intl/resources/number_format/kl.json
@@ -0,0 +1,10 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤#,##0.00;¤-#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;¤-#,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": ".",
+ "minus_sign": "−"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/kln.json b/library/intl/resources/number_format/kln.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/kln.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/km.json b/library/intl/resources/number_format/km.json
new file mode 100644
index 000000000..e87fb64f0
--- /dev/null
+++ b/library/intl/resources/number_format/km.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/kn.json b/library/intl/resources/number_format/kn.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/kn.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ko.json b/library/intl/resources/number_format/ko.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/ko.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/kok.json b/library/intl/resources/number_format/kok.json
new file mode 100644
index 000000000..2007f4fb6
--- /dev/null
+++ b/library/intl/resources/number_format/kok.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##,##0.###",
+ "percent_pattern": "#,##,##0%",
+ "currency_pattern": "¤ #,##,##0.00",
+ "accounting_currency_pattern": "¤ #,##,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ks.json b/library/intl/resources/number_format/ks.json
new file mode 100644
index 000000000..e3bf6449c
--- /dev/null
+++ b/library/intl/resources/number_format/ks.json
@@ -0,0 +1,12 @@
+{
+ "numbering_system": "arabext",
+ "decimal_pattern": "#,##,##0.###",
+ "percent_pattern": "#,##,##0%",
+ "currency_pattern": "¤ #,##,##0.00",
+ "accounting_currency_pattern": "¤ #,##,##0.00",
+ "decimal_separator": "Ù«",
+ "grouping_separator": "Ù¬",
+ "plus_sign": "‎+‎",
+ "minus_sign": "‎-‎",
+ "percent_sign": "Ùª"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ksb.json b/library/intl/resources/number_format/ksb.json
new file mode 100644
index 000000000..c00aa2b2f
--- /dev/null
+++ b/library/intl/resources/number_format/ksb.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00¤",
+ "accounting_currency_pattern": "#,##0.00¤"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ksf.json b/library/intl/resources/number_format/ksf.json
new file mode 100644
index 000000000..dde2cfe27
--- /dev/null
+++ b/library/intl/resources/number_format/ksf.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ksh.json b/library/intl/resources/number_format/ksh.json
new file mode 100644
index 000000000..4c5b82818
--- /dev/null
+++ b/library/intl/resources/number_format/ksh.json
@@ -0,0 +1,10 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": " ",
+ "minus_sign": "−"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/kw.json b/library/intl/resources/number_format/kw.json
new file mode 100644
index 000000000..a3f7208e2
--- /dev/null
+++ b/library/intl/resources/number_format/kw.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ky.json b/library/intl/resources/number_format/ky.json
new file mode 100644
index 000000000..dde2cfe27
--- /dev/null
+++ b/library/intl/resources/number_format/ky.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/lag.json b/library/intl/resources/number_format/lag.json
new file mode 100644
index 000000000..76f3ddcb5
--- /dev/null
+++ b/library/intl/resources/number_format/lag.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/lb.json b/library/intl/resources/number_format/lb.json
new file mode 100644
index 000000000..59241b7e7
--- /dev/null
+++ b/library/intl/resources/number_format/lb.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/lg.json b/library/intl/resources/number_format/lg.json
new file mode 100644
index 000000000..c00aa2b2f
--- /dev/null
+++ b/library/intl/resources/number_format/lg.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00¤",
+ "accounting_currency_pattern": "#,##0.00¤"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/lkt.json b/library/intl/resources/number_format/lkt.json
new file mode 100644
index 000000000..76f3ddcb5
--- /dev/null
+++ b/library/intl/resources/number_format/lkt.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ln.json b/library/intl/resources/number_format/ln.json
new file mode 100644
index 000000000..639e6c938
--- /dev/null
+++ b/library/intl/resources/number_format/ln.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/lo.json b/library/intl/resources/number_format/lo.json
new file mode 100644
index 000000000..ce91051ad
--- /dev/null
+++ b/library/intl/resources/number_format/lo.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00;¤-#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;¤-#,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/lt.json b/library/intl/resources/number_format/lt.json
new file mode 100644
index 000000000..4c5b82818
--- /dev/null
+++ b/library/intl/resources/number_format/lt.json
@@ -0,0 +1,10 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": " ",
+ "minus_sign": "−"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/lu.json b/library/intl/resources/number_format/lu.json
new file mode 100644
index 000000000..d4ecf4607
--- /dev/null
+++ b/library/intl/resources/number_format/lu.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00¤",
+ "accounting_currency_pattern": "#,##0.00¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/luo.json b/library/intl/resources/number_format/luo.json
new file mode 100644
index 000000000..c00aa2b2f
--- /dev/null
+++ b/library/intl/resources/number_format/luo.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00¤",
+ "accounting_currency_pattern": "#,##0.00¤"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/luy.json b/library/intl/resources/number_format/luy.json
new file mode 100644
index 000000000..a2c910b56
--- /dev/null
+++ b/library/intl/resources/number_format/luy.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00;¤- #,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;¤- #,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/lv.json b/library/intl/resources/number_format/lv.json
new file mode 100644
index 000000000..5a38d2acb
--- /dev/null
+++ b/library/intl/resources/number_format/lv.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#0.00",
+ "accounting_currency_pattern": "¤#0.00",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/mas.json b/library/intl/resources/number_format/mas.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/mas.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/mer.json b/library/intl/resources/number_format/mer.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/mer.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/mfe.json b/library/intl/resources/number_format/mfe.json
new file mode 100644
index 000000000..5576f9438
--- /dev/null
+++ b/library/intl/resources/number_format/mfe.json
@@ -0,0 +1,8 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/mg.json b/library/intl/resources/number_format/mg.json
new file mode 100644
index 000000000..a3f7208e2
--- /dev/null
+++ b/library/intl/resources/number_format/mg.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/mgh.json b/library/intl/resources/number_format/mgh.json
new file mode 100644
index 000000000..f6e200db5
--- /dev/null
+++ b/library/intl/resources/number_format/mgh.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/mgo.json b/library/intl/resources/number_format/mgo.json
new file mode 100644
index 000000000..76f3ddcb5
--- /dev/null
+++ b/library/intl/resources/number_format/mgo.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/mk.json b/library/intl/resources/number_format/mk.json
new file mode 100644
index 000000000..f6e200db5
--- /dev/null
+++ b/library/intl/resources/number_format/mk.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ml.json b/library/intl/resources/number_format/ml.json
new file mode 100644
index 000000000..7a1f3b487
--- /dev/null
+++ b/library/intl/resources/number_format/ml.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/mn.json b/library/intl/resources/number_format/mn.json
new file mode 100644
index 000000000..76f3ddcb5
--- /dev/null
+++ b/library/intl/resources/number_format/mn.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/mr.json b/library/intl/resources/number_format/mr.json
new file mode 100644
index 000000000..6f71dcc1f
--- /dev/null
+++ b/library/intl/resources/number_format/mr.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "deva",
+ "decimal_pattern": "#,##,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ms-Latn-BN.json b/library/intl/resources/number_format/ms-Latn-BN.json
new file mode 100644
index 000000000..bb9eb8d94
--- /dev/null
+++ b/library/intl/resources/number_format/ms-Latn-BN.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ms.json b/library/intl/resources/number_format/ms.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/ms.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/mt.json b/library/intl/resources/number_format/mt.json
new file mode 100644
index 000000000..a3f7208e2
--- /dev/null
+++ b/library/intl/resources/number_format/mt.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/mua.json b/library/intl/resources/number_format/mua.json
new file mode 100644
index 000000000..e87fb64f0
--- /dev/null
+++ b/library/intl/resources/number_format/mua.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/my.json b/library/intl/resources/number_format/my.json
new file mode 100644
index 000000000..76f3ddcb5
--- /dev/null
+++ b/library/intl/resources/number_format/my.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/naq.json b/library/intl/resources/number_format/naq.json
new file mode 100644
index 000000000..a3f7208e2
--- /dev/null
+++ b/library/intl/resources/number_format/naq.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/nb.json b/library/intl/resources/number_format/nb.json
new file mode 100644
index 000000000..d22e8d0b7
--- /dev/null
+++ b/library/intl/resources/number_format/nb.json
@@ -0,0 +1,10 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": " ",
+ "minus_sign": "−"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/nd.json b/library/intl/resources/number_format/nd.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/nd.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ne.json b/library/intl/resources/number_format/ne.json
new file mode 100644
index 000000000..e1149da96
--- /dev/null
+++ b/library/intl/resources/number_format/ne.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "deva",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/nl-BE.json b/library/intl/resources/number_format/nl-BE.json
new file mode 100644
index 000000000..23256bff0
--- /dev/null
+++ b/library/intl/resources/number_format/nl-BE.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "¤ #,##0.00;(¤ #,##0.00)",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/nl.json b/library/intl/resources/number_format/nl.json
new file mode 100644
index 000000000..ff49eddc5
--- /dev/null
+++ b/library/intl/resources/number_format/nl.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00;¤ #,##0.00-",
+ "accounting_currency_pattern": "¤ #,##0.00;(¤ #,##0.00)",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/nmg.json b/library/intl/resources/number_format/nmg.json
new file mode 100644
index 000000000..dde2cfe27
--- /dev/null
+++ b/library/intl/resources/number_format/nmg.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/nn.json b/library/intl/resources/number_format/nn.json
new file mode 100644
index 000000000..4c5b82818
--- /dev/null
+++ b/library/intl/resources/number_format/nn.json
@@ -0,0 +1,10 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": " ",
+ "minus_sign": "−"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/nnh.json b/library/intl/resources/number_format/nnh.json
new file mode 100644
index 000000000..f6e200db5
--- /dev/null
+++ b/library/intl/resources/number_format/nnh.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/nr.json b/library/intl/resources/number_format/nr.json
new file mode 100644
index 000000000..a17a8c14d
--- /dev/null
+++ b/library/intl/resources/number_format/nr.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/nso.json b/library/intl/resources/number_format/nso.json
new file mode 100644
index 000000000..bfdcf22d4
--- /dev/null
+++ b/library/intl/resources/number_format/nso.json
@@ -0,0 +1,8 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/nus.json b/library/intl/resources/number_format/nus.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/nus.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/nyn.json b/library/intl/resources/number_format/nyn.json
new file mode 100644
index 000000000..a3f7208e2
--- /dev/null
+++ b/library/intl/resources/number_format/nyn.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/om.json b/library/intl/resources/number_format/om.json
new file mode 100644
index 000000000..a3f7208e2
--- /dev/null
+++ b/library/intl/resources/number_format/om.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/or.json b/library/intl/resources/number_format/or.json
new file mode 100644
index 000000000..2007f4fb6
--- /dev/null
+++ b/library/intl/resources/number_format/or.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##,##0.###",
+ "percent_pattern": "#,##,##0%",
+ "currency_pattern": "¤ #,##,##0.00",
+ "accounting_currency_pattern": "¤ #,##,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/os.json b/library/intl/resources/number_format/os.json
new file mode 100644
index 000000000..c97d61fb2
--- /dev/null
+++ b/library/intl/resources/number_format/os.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/pa-Arab.json b/library/intl/resources/number_format/pa-Arab.json
new file mode 100644
index 000000000..2b2e9fdbb
--- /dev/null
+++ b/library/intl/resources/number_format/pa-Arab.json
@@ -0,0 +1,12 @@
+{
+ "numbering_system": "arabext",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00",
+ "decimal_separator": "Ù«",
+ "grouping_separator": "Ù¬",
+ "plus_sign": "‎+‎",
+ "minus_sign": "‎-‎",
+ "percent_sign": "Ùª"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/pa.json b/library/intl/resources/number_format/pa.json
new file mode 100644
index 000000000..1ea49ce5f
--- /dev/null
+++ b/library/intl/resources/number_format/pa.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##,##0.###",
+ "percent_pattern": "#,##,##0%",
+ "currency_pattern": "¤ #,##,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/pl.json b/library/intl/resources/number_format/pl.json
new file mode 100644
index 000000000..d72bc1232
--- /dev/null
+++ b/library/intl/resources/number_format/pl.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ps.json b/library/intl/resources/number_format/ps.json
new file mode 100644
index 000000000..4c162b17d
--- /dev/null
+++ b/library/intl/resources/number_format/ps.json
@@ -0,0 +1,12 @@
+{
+ "numbering_system": "arabext",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": "Ù«",
+ "grouping_separator": "Ù¬",
+ "plus_sign": "‎+‎",
+ "minus_sign": "‎-‎",
+ "percent_sign": "Ùª"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/pt-AO.json b/library/intl/resources/number_format/pt-AO.json
new file mode 100644
index 000000000..d72bc1232
--- /dev/null
+++ b/library/intl/resources/number_format/pt-AO.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/pt-CV.json b/library/intl/resources/number_format/pt-CV.json
new file mode 100644
index 000000000..d72bc1232
--- /dev/null
+++ b/library/intl/resources/number_format/pt-CV.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/pt-GW.json b/library/intl/resources/number_format/pt-GW.json
new file mode 100644
index 000000000..d72bc1232
--- /dev/null
+++ b/library/intl/resources/number_format/pt-GW.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/pt-MO.json b/library/intl/resources/number_format/pt-MO.json
new file mode 100644
index 000000000..d72bc1232
--- /dev/null
+++ b/library/intl/resources/number_format/pt-MO.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/pt-MZ.json b/library/intl/resources/number_format/pt-MZ.json
new file mode 100644
index 000000000..d72bc1232
--- /dev/null
+++ b/library/intl/resources/number_format/pt-MZ.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/pt-PT.json b/library/intl/resources/number_format/pt-PT.json
new file mode 100644
index 000000000..d72bc1232
--- /dev/null
+++ b/library/intl/resources/number_format/pt-PT.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/pt-ST.json b/library/intl/resources/number_format/pt-ST.json
new file mode 100644
index 000000000..d72bc1232
--- /dev/null
+++ b/library/intl/resources/number_format/pt-ST.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/pt-TL.json b/library/intl/resources/number_format/pt-TL.json
new file mode 100644
index 000000000..d72bc1232
--- /dev/null
+++ b/library/intl/resources/number_format/pt-TL.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/pt.json b/library/intl/resources/number_format/pt.json
new file mode 100644
index 000000000..e87fb64f0
--- /dev/null
+++ b/library/intl/resources/number_format/pt.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/qu-BO.json b/library/intl/resources/number_format/qu-BO.json
new file mode 100644
index 000000000..407be1332
--- /dev/null
+++ b/library/intl/resources/number_format/qu-BO.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/qu.json b/library/intl/resources/number_format/qu.json
new file mode 100644
index 000000000..3534c1277
--- /dev/null
+++ b/library/intl/resources/number_format/qu.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/rm.json b/library/intl/resources/number_format/rm.json
new file mode 100644
index 000000000..f7a23e7ff
--- /dev/null
+++ b/library/intl/resources/number_format/rm.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "grouping_separator": "’",
+ "minus_sign": "−"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/rn.json b/library/intl/resources/number_format/rn.json
new file mode 100644
index 000000000..01fceee09
--- /dev/null
+++ b/library/intl/resources/number_format/rn.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00¤",
+ "accounting_currency_pattern": "#,##0.00¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ro.json b/library/intl/resources/number_format/ro.json
new file mode 100644
index 000000000..f4d872e5d
--- /dev/null
+++ b/library/intl/resources/number_format/ro.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/rof.json b/library/intl/resources/number_format/rof.json
new file mode 100644
index 000000000..a3f7208e2
--- /dev/null
+++ b/library/intl/resources/number_format/rof.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ru.json b/library/intl/resources/number_format/ru.json
new file mode 100644
index 000000000..e7aecc094
--- /dev/null
+++ b/library/intl/resources/number_format/ru.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/rw.json b/library/intl/resources/number_format/rw.json
new file mode 100644
index 000000000..f6e200db5
--- /dev/null
+++ b/library/intl/resources/number_format/rw.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/rwk.json b/library/intl/resources/number_format/rwk.json
new file mode 100644
index 000000000..c00aa2b2f
--- /dev/null
+++ b/library/intl/resources/number_format/rwk.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00¤",
+ "accounting_currency_pattern": "#,##0.00¤"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/sah.json b/library/intl/resources/number_format/sah.json
new file mode 100644
index 000000000..76f3ddcb5
--- /dev/null
+++ b/library/intl/resources/number_format/sah.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/saq.json b/library/intl/resources/number_format/saq.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/saq.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/sbp.json b/library/intl/resources/number_format/sbp.json
new file mode 100644
index 000000000..c00aa2b2f
--- /dev/null
+++ b/library/intl/resources/number_format/sbp.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00¤",
+ "accounting_currency_pattern": "#,##0.00¤"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/se.json b/library/intl/resources/number_format/se.json
new file mode 100644
index 000000000..4c5b82818
--- /dev/null
+++ b/library/intl/resources/number_format/se.json
@@ -0,0 +1,10 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": " ",
+ "minus_sign": "−"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/seh.json b/library/intl/resources/number_format/seh.json
new file mode 100644
index 000000000..d4ecf4607
--- /dev/null
+++ b/library/intl/resources/number_format/seh.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00¤",
+ "accounting_currency_pattern": "#,##0.00¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ses.json b/library/intl/resources/number_format/ses.json
new file mode 100644
index 000000000..23ba53115
--- /dev/null
+++ b/library/intl/resources/number_format/ses.json
@@ -0,0 +1,8 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00¤",
+ "accounting_currency_pattern": "#,##0.00¤",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/sg.json b/library/intl/resources/number_format/sg.json
new file mode 100644
index 000000000..ce91051ad
--- /dev/null
+++ b/library/intl/resources/number_format/sg.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00;¤-#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;¤-#,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/shi.json b/library/intl/resources/number_format/shi.json
new file mode 100644
index 000000000..f86dca5c9
--- /dev/null
+++ b/library/intl/resources/number_format/shi.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00¤",
+ "accounting_currency_pattern": "#,##0.00¤",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/si.json b/library/intl/resources/number_format/si.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/si.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/sk.json b/library/intl/resources/number_format/sk.json
new file mode 100644
index 000000000..5458fba77
--- /dev/null
+++ b/library/intl/resources/number_format/sk.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/sl.json b/library/intl/resources/number_format/sl.json
new file mode 100644
index 000000000..d79067fe7
--- /dev/null
+++ b/library/intl/resources/number_format/sl.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/smn.json b/library/intl/resources/number_format/smn.json
new file mode 100644
index 000000000..76f3ddcb5
--- /dev/null
+++ b/library/intl/resources/number_format/smn.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/sn.json b/library/intl/resources/number_format/sn.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/sn.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/so.json b/library/intl/resources/number_format/so.json
new file mode 100644
index 000000000..a3f7208e2
--- /dev/null
+++ b/library/intl/resources/number_format/so.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/sq.json b/library/intl/resources/number_format/sq.json
new file mode 100644
index 000000000..d72bc1232
--- /dev/null
+++ b/library/intl/resources/number_format/sq.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/sr.json b/library/intl/resources/number_format/sr.json
new file mode 100644
index 000000000..d79067fe7
--- /dev/null
+++ b/library/intl/resources/number_format/sr.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ss.json b/library/intl/resources/number_format/ss.json
new file mode 100644
index 000000000..a17a8c14d
--- /dev/null
+++ b/library/intl/resources/number_format/ss.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ssy.json b/library/intl/resources/number_format/ssy.json
new file mode 100644
index 000000000..a3f7208e2
--- /dev/null
+++ b/library/intl/resources/number_format/ssy.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/sv.json b/library/intl/resources/number_format/sv.json
new file mode 100644
index 000000000..4c5b82818
--- /dev/null
+++ b/library/intl/resources/number_format/sv.json
@@ -0,0 +1,10 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": " ",
+ "minus_sign": "−"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/sw.json b/library/intl/resources/number_format/sw.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/sw.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/swc.json b/library/intl/resources/number_format/swc.json
new file mode 100644
index 000000000..2d0b0fad1
--- /dev/null
+++ b/library/intl/resources/number_format/swc.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ta-MY.json b/library/intl/resources/number_format/ta-MY.json
new file mode 100644
index 000000000..131e11ee5
--- /dev/null
+++ b/library/intl/resources/number_format/ta-MY.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ta-SG.json b/library/intl/resources/number_format/ta-SG.json
new file mode 100644
index 000000000..131e11ee5
--- /dev/null
+++ b/library/intl/resources/number_format/ta-SG.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ta.json b/library/intl/resources/number_format/ta.json
new file mode 100644
index 000000000..816eff469
--- /dev/null
+++ b/library/intl/resources/number_format/ta.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##,##0.###",
+ "percent_pattern": "#,##,##0%",
+ "currency_pattern": "¤ #,##,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/te.json b/library/intl/resources/number_format/te.json
new file mode 100644
index 000000000..bb26b152a
--- /dev/null
+++ b/library/intl/resources/number_format/te.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##,##0.00",
+ "accounting_currency_pattern": "¤#,##,##0.00;(¤#,##,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/teo.json b/library/intl/resources/number_format/teo.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/teo.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/th.json b/library/intl/resources/number_format/th.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/th.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ti.json b/library/intl/resources/number_format/ti.json
new file mode 100644
index 000000000..a3f7208e2
--- /dev/null
+++ b/library/intl/resources/number_format/ti.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/tn.json b/library/intl/resources/number_format/tn.json
new file mode 100644
index 000000000..bfdcf22d4
--- /dev/null
+++ b/library/intl/resources/number_format/tn.json
@@ -0,0 +1,8 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/to.json b/library/intl/resources/number_format/to.json
new file mode 100644
index 000000000..76f3ddcb5
--- /dev/null
+++ b/library/intl/resources/number_format/to.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/tr.json b/library/intl/resources/number_format/tr.json
new file mode 100644
index 000000000..2950f361c
--- /dev/null
+++ b/library/intl/resources/number_format/tr.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "%#,##0",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ts.json b/library/intl/resources/number_format/ts.json
new file mode 100644
index 000000000..a17a8c14d
--- /dev/null
+++ b/library/intl/resources/number_format/ts.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/twq.json b/library/intl/resources/number_format/twq.json
new file mode 100644
index 000000000..23ba53115
--- /dev/null
+++ b/library/intl/resources/number_format/twq.json
@@ -0,0 +1,8 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00¤",
+ "accounting_currency_pattern": "#,##0.00¤",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/tzm.json b/library/intl/resources/number_format/tzm.json
new file mode 100644
index 000000000..dde2cfe27
--- /dev/null
+++ b/library/intl/resources/number_format/tzm.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ug.json b/library/intl/resources/number_format/ug.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/ug.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/uk.json b/library/intl/resources/number_format/uk.json
new file mode 100644
index 000000000..7aa3ad369
--- /dev/null
+++ b/library/intl/resources/number_format/uk.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00¤;(#,##0.00¤)",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ur-IN.json b/library/intl/resources/number_format/ur-IN.json
new file mode 100644
index 000000000..972fb3c39
--- /dev/null
+++ b/library/intl/resources/number_format/ur-IN.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "arabext",
+ "decimal_pattern": "#,##,##0.###",
+ "percent_pattern": "#,##,##0%",
+ "currency_pattern": "¤ #,##,##0.00",
+ "accounting_currency_pattern": "¤ #,##,##0.00",
+ "plus_sign": "‎+‎",
+ "minus_sign": "‎-‎"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ur.json b/library/intl/resources/number_format/ur.json
new file mode 100644
index 000000000..b1a9ac268
--- /dev/null
+++ b/library/intl/resources/number_format/ur.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##,##0%",
+ "currency_pattern": "¤ #,##,##0.00",
+ "accounting_currency_pattern": "¤ #,##,##0.00",
+ "plus_sign": "‎+",
+ "minus_sign": "‎-"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/uz-Arab.json b/library/intl/resources/number_format/uz-Arab.json
new file mode 100644
index 000000000..4c162b17d
--- /dev/null
+++ b/library/intl/resources/number_format/uz-Arab.json
@@ -0,0 +1,12 @@
+{
+ "numbering_system": "arabext",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": "Ù«",
+ "grouping_separator": "Ù¬",
+ "plus_sign": "‎+‎",
+ "minus_sign": "‎-‎",
+ "percent_sign": "Ùª"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/uz.json b/library/intl/resources/number_format/uz.json
new file mode 100644
index 000000000..c97d61fb2
--- /dev/null
+++ b/library/intl/resources/number_format/uz.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/vai.json b/library/intl/resources/number_format/vai.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/vai.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/ve.json b/library/intl/resources/number_format/ve.json
new file mode 100644
index 000000000..a17a8c14d
--- /dev/null
+++ b/library/intl/resources/number_format/ve.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/vi.json b/library/intl/resources/number_format/vi.json
new file mode 100644
index 000000000..639e6c938
--- /dev/null
+++ b/library/intl/resources/number_format/vi.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤",
+ "decimal_separator": ",",
+ "grouping_separator": "."
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/vo.json b/library/intl/resources/number_format/vo.json
new file mode 100644
index 000000000..76f3ddcb5
--- /dev/null
+++ b/library/intl/resources/number_format/vo.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/vun.json b/library/intl/resources/number_format/vun.json
new file mode 100644
index 000000000..a3f7208e2
--- /dev/null
+++ b/library/intl/resources/number_format/vun.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/wae.json b/library/intl/resources/number_format/wae.json
new file mode 100644
index 000000000..4f32aa8e3
--- /dev/null
+++ b/library/intl/resources/number_format/wae.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00",
+ "decimal_separator": ",",
+ "grouping_separator": "’"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/xog.json b/library/intl/resources/number_format/xog.json
new file mode 100644
index 000000000..5ca4d4e1c
--- /dev/null
+++ b/library/intl/resources/number_format/xog.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/yav.json b/library/intl/resources/number_format/yav.json
new file mode 100644
index 000000000..d72bc1232
--- /dev/null
+++ b/library/intl/resources/number_format/yav.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "#,##0.00 ¤",
+ "accounting_currency_pattern": "#,##0.00 ¤;(#,##0.00 ¤)",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/yi.json b/library/intl/resources/number_format/yi.json
new file mode 100644
index 000000000..76f3ddcb5
--- /dev/null
+++ b/library/intl/resources/number_format/yi.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤ #,##0.00"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/yo.json b/library/intl/resources/number_format/yo.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/yo.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/zgh.json b/library/intl/resources/number_format/zgh.json
new file mode 100644
index 000000000..8ecea403c
--- /dev/null
+++ b/library/intl/resources/number_format/zgh.json
@@ -0,0 +1,9 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0 %",
+ "currency_pattern": "#,##0.00¤",
+ "accounting_currency_pattern": "#,##0.00¤",
+ "decimal_separator": ",",
+ "grouping_separator": " "
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/zh-Hans-HK.json b/library/intl/resources/number_format/zh-Hans-HK.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/zh-Hans-HK.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/zh-Hans-MO.json b/library/intl/resources/number_format/zh-Hans-MO.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/zh-Hans-MO.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/zh-Hans-SG.json b/library/intl/resources/number_format/zh-Hans-SG.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/zh-Hans-SG.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/zh-Hant.json b/library/intl/resources/number_format/zh-Hant.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/zh-Hant.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/zh.json b/library/intl/resources/number_format/zh.json
new file mode 100644
index 000000000..131e11ee5
--- /dev/null
+++ b/library/intl/resources/number_format/zh.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤ #,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/resources/number_format/zu.json b/library/intl/resources/number_format/zu.json
new file mode 100644
index 000000000..ff3ecbde6
--- /dev/null
+++ b/library/intl/resources/number_format/zu.json
@@ -0,0 +1,7 @@
+{
+ "numbering_system": "latn",
+ "decimal_pattern": "#,##0.###",
+ "percent_pattern": "#,##0%",
+ "currency_pattern": "¤#,##0.00",
+ "accounting_currency_pattern": "¤#,##0.00;(¤#,##0.00)"
+} \ No newline at end of file
diff --git a/library/intl/scripts/country/generate.php b/library/intl/scripts/country/generate.php
new file mode 100644
index 000000000..879dc0a25
--- /dev/null
+++ b/library/intl/scripts/country/generate.php
@@ -0,0 +1,162 @@
+<?php
+
+/**
+ * Generates the json files stored in resources/country.
+ */
+
+set_time_limit(0);
+
+// Downloaded from http://unicode.org/Public/cldr/26/json-full.zip
+$enCountries = '../json-full/main/en/territories.json';
+$codeMappings = '../json-full/supplemental/codeMappings.json';
+$telephoneCodeData = '../json-full/supplemental/telephoneCodeData.json';
+if (!file_exists($enCountries)) {
+ die("The $enCountries file was not found");
+}
+if (!file_exists($codeMappings)) {
+ die("The $codeMappings file was not found");
+}
+if (!file_exists($telephoneCodeData)) {
+ die("The $telephoneCodeData file was not found");
+}
+if (!function_exists('collator_create')) {
+ // Reimplementing intl's collator would be a huge undertaking, so we
+ // use it instead to presort the generated locale specific data.
+ die('The intl extension was not found.');
+}
+
+$ignoredCountries = array(
+ 'AN', // Netherlands Antilles, no longer exists.
+ 'BV', 'HM', 'CP', // Uninhabited islands.
+ 'EU', 'QO', // European Union, Outlying Oceania. Not countries.
+ 'ZZ', // Unknown region
+);
+
+// Locales listed without a "-" match all variants.
+// Locales listed with a "-" match only those exact ones.
+$ignoredLocales = array(
+ // Interlingua is a made up language.
+ 'ia',
+ // Valencian differs from its parent only by a single character (è/é).
+ 'ca-ES-VALENCIA',
+ // Those locales are 90% untranslated.
+ 'aa', 'as', 'az-Cyrl', 'az-Cyrl-AZ', 'bem', 'dua', 'gv', 'haw', 'ig', 'ii',
+ 'kkj', 'kok', 'kw', 'lkt', 'mgo', 'nnh', 'nr', 'nso', 'om', 'os', 'pa-Arab',
+ 'pa-Arab-PK', 'qu', 'rw', 'sah', 'smn', 'ss', 'ssy', 'st', 'tg', 'tn', 'ts',
+ 'uz-Arab', 'uz-Arab-AF', 've', 'vo', 'xh', 'yi',
+ // Special "grouping" locales.
+ 'root', 'en-US-POSIX', 'en-001', 'en-150', 'es-419',
+);
+
+// Assemble the base data. Use the "en" data to get a list of countries.
+$telephoneCodeData = json_decode(file_get_contents($telephoneCodeData), true);
+$telephoneCodeData = $telephoneCodeData['supplemental']['telephoneCodeData'];
+$codeMappings = json_decode(file_get_contents($codeMappings), true);
+$codeMappings = $codeMappings['supplemental']['codeMappings'];
+$countryData = json_decode(file_get_contents($enCountries), true);
+$countryData = $countryData['main']['en']['localeDisplayNames']['territories'];
+$baseData = array();
+foreach ($countryData as $countryCode => $countryName) {
+ if (is_numeric($countryCode) || in_array($countryCode, $ignoredCountries)) {
+ // Ignore continents, regions, uninhabited islands.
+ continue;
+ }
+ if (strpos($countryCode, '-alt-') !== FALSE) {
+ // Ignore alternative names.
+ continue;
+ }
+
+ $baseData[$countryCode]['code'] = $countryCode;
+ // Countries are not guaranteed to have an alpha3 and/or numeric code.
+ if (isset($codeMappings[$countryCode]['_alpha3'])) {
+ $baseData[$countryCode]['three_letter_code'] = $codeMappings[$countryCode]['_alpha3'];
+ }
+ if (isset($codeMappings[$countryCode]['_numeric'])) {
+ $baseData[$countryCode]['numeric_code'] = $codeMappings[$countryCode]['_numeric'];
+ }
+
+ // Determine the telephone code for this country.
+ if (in_array($countryCode, array('IC', 'EA'))) {
+ // "Canary Islands" and "Ceuta and Melilla" use Spain's.
+ $baseData[$countryCode]['telephone_code'] = $telephoneCodeData['ES'][0]['telephoneCountryCode'];
+ } elseif ($countryCode == 'XK') {
+ // Kosovo uses three telephone codes. Use Serbia's until that gets resolved.
+ $baseData[$countryCode]['telephone_code'] = $telephoneCodeData['RS'][0]['telephoneCountryCode'];
+ } elseif (isset($telephoneCodeData[$countryCode])) {
+ $baseData[$countryCode]['telephone_code'] = $telephoneCodeData[$countryCode][0]['telephoneCountryCode'];
+ }
+}
+
+// Write out base.json.
+ksort($baseData);
+$json = json_encode($baseData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
+file_put_contents('base.json', $json);
+
+// Gather available locales.
+$locales = array();
+if ($handle = opendir('../json-full/main')) {
+ while (false !== ($entry = readdir($handle))) {
+ if (substr($entry, 0, 1) != '.') {
+ $entryParts = explode('-', $entry);
+ if (!in_array($entry, $ignoredLocales) && !in_array($entryParts[0], $ignoredLocales)) {
+ $locales[] = $entry;
+ }
+ }
+ }
+ closedir($handle);
+}
+
+// Create the localizations.
+$countries = array();
+foreach ($locales as $locale) {
+ $data = json_decode(file_get_contents('../json-full/main/' . $locale . '/territories.json'), true);
+ $data = $data['main'][$locale]['localeDisplayNames']['territories'];
+ foreach ($data as $countryCode => $countryName) {
+ if (isset($baseData[$countryCode])) {
+ // This country name is untranslated, use the english version.
+ if ($countryCode == $countryName) {
+ $countryName = $countryData[$countryCode];
+ }
+
+ $countries[$locale][$countryCode] = array(
+ 'name' => $countryName,
+ );
+ }
+ }
+}
+
+// Identify localizations that are the same as the ones for the parent locale.
+// For example, "fr-FR" if "fr" has the same data.
+$duplicates = array();
+foreach ($countries as $locale => $localizedCountries) {
+ if (strpos($locale, '-') !== FALSE) {
+ $localeParts = explode('-', $locale);
+ array_pop($localeParts);
+ $parentLocale = implode('-', $localeParts);
+ $diff = array_udiff($localizedCountries, $countries[$parentLocale], function ($first, $second) {
+ return ($first['name'] == $second['name']) ? 0 : 1;
+ });
+
+ if (empty($diff)) {
+ // The duplicates are not removed right away because they might
+ // still be needed for other duplicate checks (for example,
+ // when there are locales like bs-Latn-BA, bs-Latn, bs).
+ $duplicates[] = $locale;
+ }
+ }
+}
+// Remove the duplicates.
+foreach ($duplicates as $locale) {
+ unset($countries[$locale]);
+}
+
+// Write out the localizations.
+foreach ($countries as $locale => $localizedCountries) {
+ $collator = collator_create($locale);
+ uasort($localizedCountries, function($a, $b) use ($collator) {
+ return collator_compare($collator, $a['name'], $b['name']);
+ });
+
+ $json = json_encode($localizedCountries, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
+ file_put_contents($locale . '.json', $json);
+}
diff --git a/library/intl/scripts/currency/generate.php b/library/intl/scripts/currency/generate.php
new file mode 100644
index 000000000..723906f7a
--- /dev/null
+++ b/library/intl/scripts/currency/generate.php
@@ -0,0 +1,153 @@
+<?php
+
+/**
+ * Generates the json files stored in resources/currency.
+ *
+ * The ISO currency list is used as a base, since it doesn't contain
+ * deprecated currencies, unlike CLDR (v25 has 139 deprecated entries).
+ */
+
+set_time_limit(0);
+
+// Downloaded from http://www.currency-iso.org/en/home/tables/table-a1.html
+$isoCurrencies = '../c2.xml';
+// Downloaded from http://unicode.org/Public/cldr/26/json-full.zip
+$cldrCurrencies = '../json-full/main/en-US/currencies.json';
+$currencyData = '../json-full/supplemental/currencyData.json';
+if (!file_exists($isoCurrencies)) {
+ die("The $isoCurrencies file was not found");
+}
+if (!file_exists($cldrCurrencies)) {
+ die("The $cldrCurrencies file was not found");
+}
+if (!file_exists($currencyData)) {
+ die("The $currencyData file was not found");
+}
+if (!function_exists('collator_create')) {
+ // Reimplementing intl's collator would be a huge undertaking, so we
+ // use it instead to presort the generated locale specific data.
+ die('The intl extension was not found.');
+}
+
+// Locales listed without a "-" match all variants.
+// Locales listed with a "-" match only those exact ones.
+$ignoredLocales = array(
+ // Interlingua is a made up language.
+ 'ia',
+ // Valencian differs from its parent only by a single character (è/é).
+ 'ca-ES-VALENCIA',
+ // Those locales are 90% untranslated.
+ 'aa', 'as', 'az-Cyrl', 'az-Cyrl-AZ', 'bem', 'dua', 'gv', 'haw', 'ig', 'ii',
+ 'kkj', 'kok', 'kw', 'lkt', 'mgo', 'nnh', 'nr', 'nso', 'om', 'os', 'pa-Arab',
+ 'pa-Arab-PK', 'qu', 'rw', 'sah', 'smn', 'ss', 'ssy', 'st', 'tg', 'tn', 'ts',
+ 'uz-Arab', 'uz-Arab-AF', 've', 'vo', 'xh', 'yi',
+ // Special "grouping" locales.
+ 'root', 'en-US-POSIX', 'en-001', 'en-150', 'es-419',
+);
+
+// Assemble the base data.
+$baseData = array();
+$currencyData = json_decode(file_get_contents($currencyData), true);
+$currencyData = $currencyData['supplemental']['currencyData']['fractions'];
+$isoData = simplexml_load_file($isoCurrencies);
+foreach ($isoData->CcyTbl->CcyNtry as $currency) {
+ $attributes = (array) $currency->CcyNm->attributes();
+ if (!empty($attributes) && !empty($attributes['@attributes']['IsFund'])) {
+ // Ignore funds.
+ continue;
+ }
+ $currency = (array) $currency;
+ if (empty($currency['Ccy'])) {
+ // Ignore placeholders like "Antarctica".
+ continue;
+ }
+ if (substr($currency['CtryNm'], 0, 2) == 'ZZ' || in_array($currency['Ccy'], array('XUA', 'XSU', 'XDR'))) {
+ // Ignore special currencies.
+ continue;
+ }
+
+ $currencyCode = $currency['Ccy'];
+ $baseData[$currencyCode] = array(
+ 'code' => $currencyCode,
+ 'numeric_code' => $currency['CcyNbr'],
+ );
+ // Take the fraction digits from CLDR, not ISO, because it reflects real
+ // life usage more closely. If the digits aren't set, that means that the
+ // default value (2) should be used.
+ if (isset($currencyData[$currencyCode]['_digits'])) {
+ $fractionDigits = $currencyData[$currencyCode]['_digits'];
+ if ($fractionDigits != 2) {
+ $baseData[$currencyCode]['fraction_digits'] = $fractionDigits;
+ }
+ }
+}
+
+// Write out base.json.
+ksort($baseData);
+$json = json_encode($baseData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
+file_put_contents('base.json', $json);
+
+// Gather available locales.
+$locales = array();
+if ($handle = opendir('../json-full/main')) {
+ while (false !== ($entry = readdir($handle))) {
+ if (substr($entry, 0, 1) != '.') {
+ $entryParts = explode('-', $entry);
+ if (!in_array($entry, $ignoredLocales) && !in_array($entryParts[0], $ignoredLocales)) {
+ $locales[] = $entry;
+ }
+ }
+ }
+ closedir($handle);
+}
+
+// Create the localizations.
+$currencies = array();
+foreach ($locales as $locale) {
+ $data = json_decode(file_get_contents('../json-full/main/' . $locale . '/currencies.json'), true);
+ $data = $data['main'][$locale]['numbers']['currencies'];
+ foreach ($data as $currencyCode => $currency) {
+ if (isset($baseData[$currencyCode])) {
+ $currencies[$locale][$currencyCode] = array(
+ 'name' => $currency['displayName'],
+ 'symbol' => $currency['symbol'],
+ );
+ }
+ }
+}
+
+// Identify localizations that are the same as the ones for the parent locale.
+// For example, "fr-FR" if "fr" has the same data.
+$duplicates = array();
+foreach ($currencies as $locale => $localizedCurrencies) {
+ if (strpos($locale, '-') !== FALSE) {
+ $localeParts = explode('-', $locale);
+ array_pop($localeParts);
+ $parentLocale = implode('-', $localeParts);
+ $diff = array_udiff($localizedCurrencies, $currencies[$parentLocale], function ($first, $second) {
+ return ($first['name'] == $second['name']) ? 0 : 1;
+ });
+
+ if (empty($diff)) {
+ // The duplicates are not removed right away because they might
+ // still be needed for other duplicate checks (for example,
+ // when there are locales like bs-Latn-BA, bs-Latn, bs).
+ $duplicates[] = $locale;
+ }
+ }
+}
+// Remove the duplicates.
+foreach ($duplicates as $locale) {
+ unset($currencies[$locale]);
+}
+
+// Write out the localizations.
+foreach ($currencies as $locale => $localizedCurrencies) {
+ $collator = collator_create($locale);
+ uasort($localizedCurrencies, function($a, $b) use ($collator) {
+ return collator_compare($collator, $a['name'], $b['name']);
+ });
+
+ $json = json_encode($localizedCurrencies, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
+ file_put_contents($locale . '.json', $json);
+}
diff --git a/library/intl/scripts/language/generate.php b/library/intl/scripts/language/generate.php
new file mode 100644
index 000000000..e11c8df49
--- /dev/null
+++ b/library/intl/scripts/language/generate.php
@@ -0,0 +1,129 @@
+<?php
+
+/**
+ * Generates the json files stored in resources/language.
+ *
+ * CLDR lists about 515 languages, many of them dead (like Latin or Old English).
+ * In order to decrease the list to a reasonable size, only the languages
+ * for which CLDR itself has translations are listed.
+ */
+
+set_time_limit(0);
+
+// Downloaded from http://unicode.org/Public/cldr/26/json-full.zip
+$enLanguages = '../json-full/main/en/languages.json';
+if (!file_exists($enLanguages)) {
+ die("The $enLanguages file was not found");
+}
+if (!function_exists('collator_create')) {
+ // Reimplementing intl's collator would be a huge undertaking, so we
+ // use it instead to presort the generated locale specific data.
+ die('The intl extension was not found.');
+}
+
+// Locales listed without a "-" match all variants.
+// Locales listed with a "-" match only those exact ones.
+$ignoredLocales = array(
+ // Interlingua is a made up language.
+ 'ia',
+ // Valencian differs from its parent only by a single character (è/é).
+ 'ca-ES-VALENCIA',
+ // Those locales are 90% untranslated.
+ 'aa', 'as', 'az-Cyrl', 'az-Cyrl-AZ', 'bem', 'dua', 'gv', 'haw', 'ig', 'ii',
+ 'kkj', 'kok', 'kw', 'lkt', 'mgo', 'nnh', 'nr', 'nso', 'om', 'os', 'pa-Arab',
+ 'pa-Arab-PK', 'qu', 'rw', 'sah', 'smn', 'ss', 'ssy', 'st', 'tg', 'tn', 'ts',
+ 'uz-Arab', 'uz-Arab-AF', 've', 'vo', 'xh', 'yi',
+ // Special "grouping" locales.
+ 'root', 'en-US-POSIX', 'en-001', 'en-150', 'es-419',
+);
+
+$languages = array();
+// Load the "en" data first so that it can be used as a fallback for
+// untranslated language names in other locales.
+$languageData = json_decode(file_get_contents($enLanguages), true);
+$languageData = $languageData['main']['en']['localeDisplayNames']['languages'];
+foreach ($languageData as $languageCode => $languageName) {
+ if (strpos($languageCode, '-alt-') === FALSE) {
+ $languages['en'][$languageCode] = array(
+ 'code' => $languageCode,
+ 'name' => $languageName,
+ );
+ }
+}
+
+// Gather available locales.
+$locales = array();
+if ($handle = opendir('../json-full/main')) {
+ while (false !== ($entry = readdir($handle))) {
+ if (substr($entry, 0, 1) != '.') {
+ $entryParts = explode('-', $entry);
+ if (!in_array($entry, $ignoredLocales) && !in_array($entryParts[0], $ignoredLocales)) {
+ $locales[] = $entry;
+ }
+ }
+ }
+ closedir($handle);
+}
+
+// Remove all languages that aren't an available locale at the same time.
+// This reduces the language list from about 515 to about 185 languages.
+foreach ($languages['en'] as $languageCode => $languageData) {
+ if (!in_array($languageCode, $locales)) {
+ unset($languages['en'][$languageCode]);
+ }
+}
+
+// Load the localizations.
+foreach ($locales as $locale) {
+ $data = json_decode(file_get_contents('../json-full/main/' . $locale . '/languages.json'), true);
+ $data = $data['main'][$locale]['localeDisplayNames']['languages'];
+ foreach ($data as $languageCode => $languageName) {
+ if (isset($languages['en'][$languageCode])) {
+ // This language name is untranslated, use to the english version.
+ if ($languageCode == $languageName) {
+ $languageName = $languages['en'][$languageCode]['name'];
+ }
+
+ $languages[$locale][$languageCode] = array(
+ 'code' => $languageCode,
+ 'name' => $languageName,
+ );
+ }
+ }
+}
+
+// Identify localizations that are the same as the ones for the parent locale.
+// For example, "fr-FR" if "fr" has the same data.
+$duplicates = array();
+foreach ($languages as $locale => $localizedLanguages) {
+ if (strpos($locale, '-') !== FALSE) {
+ $localeParts = explode('-', $locale);
+ array_pop($localeParts);
+ $parentLocale = implode('-', $localeParts);
+ $diff = array_udiff($localizedLanguages, $languages[$parentLocale], function ($first, $second) {
+ return ($first['name'] == $second['name']) ? 0 : 1;
+ });
+
+ if (empty($diff)) {
+ // The duplicates are not removed right away because they might
+ // still be needed for other duplicate checks (for example,
+ // when there are locales like bs-Latn-BA, bs-Latn, bs).
+ $duplicates[] = $locale;
+ }
+ }
+}
+// Remove the duplicates.
+foreach ($duplicates as $locale) {
+ unset($languages[$locale]);
+}
+
+// Write out the localizations.
+foreach ($languages as $locale => $localizedLanguages) {
+ $collator = collator_create($locale);
+ uasort($localizedLanguages, function($a, $b) use ($collator) {
+ return collator_compare($collator, $a['name'], $b['name']);
+ });
+
+ $json = json_encode($localizedLanguages, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
+ file_put_contents($locale . '.json', $json);
+}
diff --git a/library/intl/scripts/number_format/generate.php b/library/intl/scripts/number_format/generate.php
new file mode 100644
index 000000000..4308b4dc7
--- /dev/null
+++ b/library/intl/scripts/number_format/generate.php
@@ -0,0 +1,107 @@
+<?php
+
+/**
+ * Generates the json files stored in resources/number_format.
+ */
+
+set_time_limit(0);
+
+// Downloaded from http://unicode.org/Public/cldr/26/json-full.zip
+if (!is_dir('../json-full/main')) {
+ die("The '../json-full/main' directory was not found");
+}
+
+// Locales listed without a "-" match all variants.
+// Locales listed with a "-" match only those exact ones.
+$ignoredLocales = array(
+ // Interlingua is a made up language.
+ 'ia',
+ // Special "grouping" locales.
+ 'root', 'en-US-POSIX', 'en-001', 'en-150', 'es-419',
+);
+
+// Gather available locales.
+$locales = array();
+if ($handle = opendir('../json-full/main')) {
+ while (false !== ($entry = readdir($handle))) {
+ if (substr($entry, 0, 1) != '.') {
+ $entryParts = explode('-', $entry);
+ if (!in_array($entry, $ignoredLocales) && !in_array($entryParts[0], $ignoredLocales)) {
+ $locales[] = $entry;
+ }
+ }
+ }
+ closedir($handle);
+}
+
+// Load the data.
+$numberFormats = array();
+foreach ($locales as $locale) {
+ $data = json_decode(file_get_contents('../json-full/main/' . $locale . '/numbers.json'), true);
+ $data = $data['main'][$locale]['numbers'];
+ // Use the default numbering system, if it's supported.
+ if (in_array($data['defaultNumberingSystem'], array('arab', 'arabext', 'beng', 'deva', 'latn'))) {
+ $numberingSystem = $data['defaultNumberingSystem'];
+ } else {
+ $numberingSystem = 'latn';
+ }
+
+ $numberFormats[$locale] = array(
+ 'numbering_system' => $numberingSystem,
+ 'decimal_pattern' => $data['decimalFormats-numberSystem-' . $numberingSystem]['standard'],
+ 'percent_pattern' => $data['percentFormats-numberSystem-' . $numberingSystem]['standard'],
+ 'currency_pattern' => $data['currencyFormats-numberSystem-' . $numberingSystem]['standard'],
+ 'accounting_currency_pattern' => $data['currencyFormats-numberSystem-' . $numberingSystem]['accounting'],
+ );
+
+ // Add the symbols only if they're different from the default data.
+ $decimalSeparator = $data['symbols-numberSystem-' . $numberingSystem]['decimal'];
+ $groupingSeparator = $data['symbols-numberSystem-' . $numberingSystem]['group'];
+ $plusSign = $data['symbols-numberSystem-' . $numberingSystem]['plusSign'];
+ $minusSign = $data['symbols-numberSystem-' . $numberingSystem]['minusSign'];
+ $percentSign = $data['symbols-numberSystem-' . $numberingSystem]['percentSign'];
+ if ($decimalSeparator != '.') {
+ $numberFormats[$locale]['decimal_separator'] = $decimalSeparator;
+ }
+ if ($groupingSeparator != ',') {
+ $numberFormats[$locale]['grouping_separator'] = $groupingSeparator;
+ }
+ if ($plusSign != '+') {
+ $numberFormats[$locale]['plus_sign'] = $plusSign;
+ }
+ if ($minusSign != '-') {
+ $numberFormats[$locale]['minus_sign'] = $minusSign;
+ }
+ if ($percentSign != '%') {
+ $numberFormats[$locale]['percent_sign'] = $percentSign;
+ }
+}
+
+// Identify localizations that are the same as the ones for the parent locale.
+// For example, "fr-FR" if "fr" has the same data.
+$duplicates = array();
+foreach ($numberFormats as $locale => $formatData) {
+ if (strpos($locale, '-') !== FALSE) {
+ $localeParts = explode('-', $locale);
+ array_pop($localeParts);
+ $parentLocale = implode('-', $localeParts);
+ $diff = array_diff_assoc($formatData, $numberFormats[$parentLocale]);
+
+ if (empty($diff)) {
+ // The duplicates are not removed right away because they might
+ // still be needed for other duplicate checks (for example,
+ // when there are locales like bs-Latn-BA, bs-Latn, bs).
+ $duplicates[] = $locale;
+ }
+ }
+}
+// Remove the duplicates.
+foreach ($duplicates as $locale) {
+ unset($numberFormats[$locale]);
+}
+
+// Write out the data.
+foreach ($numberFormats as $locale => $numberFormat) {
+ $json = json_encode($numberFormat, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
+ file_put_contents($locale . '.json', $json);
+}
diff --git a/library/intl/src/Country/Country.php b/library/intl/src/Country/Country.php
new file mode 100644
index 000000000..5ac65fd0d
--- /dev/null
+++ b/library/intl/src/Country/Country.php
@@ -0,0 +1,168 @@
+<?php
+
+namespace CommerceGuys\Intl\Country;
+
+class Country implements CountryInterface
+{
+ /**
+ * The two-letter country code.
+ *
+ * @var string
+ */
+ protected $countryCode;
+
+ /**
+ * The country name.
+ *
+ * @var string
+ */
+ protected $name;
+
+ /**
+ * The three-letter country code.
+ *
+ * @var string
+ */
+ protected $threeLetterCode;
+
+ /**
+ * The numeric country code.
+ *
+ * @var string
+ */
+ protected $numericCode;
+
+ /**
+ * The country telephone code.
+ *
+ * @var string
+ */
+ protected $telephoneCode;
+
+ /**
+ * The country locale (i.e. "en_US").
+ *
+ * The country name is locale specific.
+ *
+ * @var string
+ */
+ protected $locale;
+
+ /**
+ * Returns the string representation of the Country.
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->getCountryCode();
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getCountryCode()
+ {
+ return $this->countryCode;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setCountryCode($countryCode)
+ {
+ $this->countryCode = $countryCode;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setName($name)
+ {
+ $this->name = $name;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getThreeLetterCode()
+ {
+ return $this->threeLetterCode;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setThreeLetterCode($threeLetterCode)
+ {
+ $this->threeLetterCode = $threeLetterCode;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getNumericCode()
+ {
+ return $this->numericCode;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setNumericCode($numericCode)
+ {
+ $this->numericCode = $numericCode;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getTelephoneCode()
+ {
+ return $this->telephoneCode;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setTelephoneCode($telephoneCode)
+ {
+ $this->telephoneCode = $telephoneCode;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getLocale()
+ {
+ return $this->locale;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setLocale($locale)
+ {
+ $this->locale = $locale;
+
+ return $this;
+ }
+}
diff --git a/library/intl/src/Country/CountryInterface.php b/library/intl/src/Country/CountryInterface.php
new file mode 100644
index 000000000..245a49be9
--- /dev/null
+++ b/library/intl/src/Country/CountryInterface.php
@@ -0,0 +1,99 @@
+<?php
+
+namespace CommerceGuys\Intl\Country;
+
+interface CountryInterface
+{
+ /**
+ * Gets the two-letter country code.
+ *
+ * @return string
+ */
+ public function getCountryCode();
+
+ /**
+ * Sets the two-letter country code.
+ *
+ * @param string $countryCode The two-letter country code.
+ */
+ public function setCountryCode($countryCode);
+
+ /**
+ * Gets the country name.
+ *
+ * Note that certain locales have incomplete translations, in which
+ * case the english version of the country name is used instead.
+ *
+ * @return string
+ */
+ public function getName();
+
+ /**
+ * Sets the country name.
+ *
+ * @param string $name The country name.
+ */
+ public function setName($name);
+
+ /**
+ * Gets the three-letter country code.
+ *
+ * Note that not every country has a three-letter code.
+ * CLDR lists "Canary Islands" (IC) and "Ceuta and Melilla" (EA)
+ * as separate countries, even though they are formally a part of Spain
+ * and have no three-letter or numeric ISO codes.
+ *
+ * @return string|null
+ */
+ public function getThreeLetterCode();
+
+ /**
+ * Sets the three-letter country code.
+ *
+ * @param string $threeLetterCode The three-letter country code.
+ */
+ public function setThreeLetterCode($threeLetterCode);
+
+ /**
+ * Gets the numeric country code.
+ *
+ * The numeric code has three digits, and the first one can be a zero,
+ * hence the need to pass it around as a string.
+ *
+ * Note that not every country has a numeric code.
+ * CLDR lists "Canary Islands" (IC) and "Ceuta and Melilla" (EA)
+ * as separate countries, even though they are formally a part of Spain
+ * and have no three-letter or numeric ISO codes.
+ * "Ascension Island" (AE) also has no numeric code, even though it has a
+ * three-letter code.
+ *
+ * @return string|null
+ */
+ public function getNumericCode();
+
+ /**
+ * Sets the numeric country code.
+ *
+ * @param string $numericCode The numeric country code.
+ */
+ public function setNumericCode($numericCode);
+
+ /**
+ * Gets the country telephone code.
+ *
+ * Also known as the calling code.
+ *
+ * Note that not every country has a telephone code.
+ * Right now Tristan da Cunha (TI) is the only such example.
+ *
+ * @return string|null
+ */
+ public function getTelephoneCode();
+
+ /**
+ * Sets the country telephone code.
+ *
+ * @param string $telephoneCode The telephone code.
+ */
+ public function setTelephoneCode($telephoneCode);
+}
diff --git a/library/intl/src/Country/CountryRepository.php b/library/intl/src/Country/CountryRepository.php
new file mode 100644
index 000000000..b1fea803d
--- /dev/null
+++ b/library/intl/src/Country/CountryRepository.php
@@ -0,0 +1,124 @@
+<?php
+
+namespace CommerceGuys\Intl\Country;
+
+use CommerceGuys\Intl\LocaleResolverTrait;
+use CommerceGuys\Intl\Exception\UnknownCountryException;
+
+/**
+ * Manages countries based on JSON definitions.
+ */
+class CountryRepository implements CountryRepositoryInterface
+{
+ use LocaleResolverTrait;
+
+ /**
+ * Base country definitions.
+ *
+ * Contains data common to all locales, such as the country numeric,
+ * three-letter, telephone codes.
+ *
+ * @var array
+ */
+ protected $baseDefinitions = array();
+
+ /**
+ * Per-locale country definitions.
+ *
+ * @var array
+ */
+ protected $definitions = array();
+
+ /**
+ * Creates a CountryRepository instance.
+ *
+ * @param string $definitionPath The path to the country definitions.
+ * Defaults to 'resources/country'.
+ */
+ public function __construct($definitionPath = null)
+ {
+ $this->definitionPath = $definitionPath ? $definitionPath : __DIR__ . '/../../resources/country/';
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function get($countryCode, $locale = null, $fallbackLocale = null)
+ {
+ $locale = $this->resolveLocale($locale, $fallbackLocale);
+ $definitions = $this->loadDefinitions($locale);
+ if (!isset($definitions[$countryCode])) {
+ throw new UnknownCountryException($countryCode);
+ }
+
+ return $this->createCountryFromDefinition($definitions[$countryCode], $locale);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getAll($locale = null, $fallbackLocale = null)
+ {
+ $locale = $this->resolveLocale($locale, $fallbackLocale);
+ $definitions = $this->loadDefinitions($locale);
+ $countries = array();
+ foreach ($definitions as $countryCode => $definition) {
+ $countries[$countryCode] = $this->createCountryFromDefinition($definition, $locale);
+ }
+
+ return $countries;
+ }
+
+ /**
+ * Loads the country definitions for the provided locale.
+ *
+ * @param string $locale The desired locale.
+ *
+ * @return array
+ */
+ protected function loadDefinitions($locale)
+ {
+ if (!isset($this->definitions[$locale])) {
+ $filename = $this->definitionPath . $locale . '.json';
+ $this->definitions[$locale] = json_decode(file_get_contents($filename), true);
+
+ // Make sure the base definitions have been loaded.
+ if (empty($this->baseDefinitions)) {
+ $this->baseDefinitions = json_decode(file_get_contents($this->definitionPath . 'base.json'), true);
+ }
+ // Merge-in base definitions.
+ foreach ($this->definitions[$locale] as $countryCode => $definition) {
+ $this->definitions[$locale][$countryCode] += $this->baseDefinitions[$countryCode];
+ }
+ }
+
+ return $this->definitions[$locale];
+ }
+
+ /**
+ * Creates a country object from the provided definition.
+ *
+ * @param array $definition The country definition.
+ * @param string $locale The locale of the country definition.
+ *
+ * @return Country
+ */
+ protected function createCountryFromDefinition(array $definition, $locale)
+ {
+ $country = new Country();
+ $country->setCountryCode($definition['code']);
+ $country->setName($definition['name']);
+ $country->setLocale($locale);
+ if (isset($definition['three_letter_code'])) {
+ $country->setThreeLetterCode($definition['three_letter_code']);
+ }
+ if (isset($definition['numeric_code'])) {
+ $country->setNumericCode($definition['numeric_code']);
+ }
+ if (isset($definition['telephone_code'])) {
+ $country->setTelephoneCode($definition['telephone_code']);
+ }
+
+ return $country;
+ }
+}
diff --git a/library/intl/src/Country/CountryRepositoryInterface.php b/library/intl/src/Country/CountryRepositoryInterface.php
new file mode 100644
index 000000000..ae1cbd0c9
--- /dev/null
+++ b/library/intl/src/Country/CountryRepositoryInterface.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace CommerceGuys\Intl\Country;
+
+/**
+ * Country repository interface.
+ */
+interface CountryRepositoryInterface
+{
+ /**
+ * Returns a country instance matching the provided country code.
+ *
+ * @param string $countryCode The country code.
+ * @param string $locale The locale (i.e. fr-FR).
+ * @param string $fallbackLocale A fallback locale (i.e "en").
+ *
+ * @return CountryInterface
+ */
+ public function get($countryCode, $locale = null, $fallbackLocale = null);
+
+ /**
+ * Returns all available country instances.
+ *
+ * @param string $locale The locale (i.e. fr-FR).
+ * @param string $fallbackLocale A fallback locale (i.e "en").
+ *
+ * @return array An array of countries implementing the CountryInterface,
+ * keyed by country code.
+ */
+ public function getAll($locale = null, $fallbackLocale = null);
+}
diff --git a/library/intl/src/Currency/Currency.php b/library/intl/src/Currency/Currency.php
new file mode 100644
index 000000000..6138210b5
--- /dev/null
+++ b/library/intl/src/Currency/Currency.php
@@ -0,0 +1,168 @@
+<?php
+
+namespace CommerceGuys\Intl\Currency;
+
+class Currency implements CurrencyInterface
+{
+ /**
+ * The alphanumeric currency code.
+ *
+ * @var string
+ */
+ protected $currencyCode;
+
+ /**
+ * The currency name.
+ *
+ * @var string
+ */
+ protected $name;
+
+ /**
+ * The numeric currency code.
+ *
+ * @var string
+ */
+ protected $numericCode;
+
+ /**
+ * The currency symbol.
+ *
+ * @var string
+ */
+ protected $symbol;
+
+ /**
+ * The number of fraction digits.
+ *
+ * @var int
+ */
+ protected $fractionDigits;
+
+ /**
+ * The currency locale (i.e. "en_US").
+ *
+ * The currency name and symbol are locale specific.
+ *
+ * @var string
+ */
+ protected $locale;
+
+ /**
+ * Returns the string representation of the currency.
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->getCurrencyCode();
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getCurrencyCode()
+ {
+ return $this->currencyCode;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setCurrencyCode($currencyCode)
+ {
+ $this->currencyCode = $currencyCode;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setName($name)
+ {
+ $this->name = $name;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getNumericCode()
+ {
+ return $this->numericCode;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setNumericCode($numericCode)
+ {
+ $this->numericCode = $numericCode;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getSymbol()
+ {
+ return $this->symbol;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setSymbol($symbol)
+ {
+ $this->symbol = $symbol;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getFractionDigits()
+ {
+ return $this->fractionDigits;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setFractionDigits($fractionDigits)
+ {
+ $this->fractionDigits = $fractionDigits;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getLocale()
+ {
+ return $this->locale;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setLocale($locale)
+ {
+ $this->locale = $locale;
+
+ return $this;
+ }
+}
diff --git a/library/intl/src/Currency/CurrencyInterface.php b/library/intl/src/Currency/CurrencyInterface.php
new file mode 100644
index 000000000..ccd03c7e0
--- /dev/null
+++ b/library/intl/src/Currency/CurrencyInterface.php
@@ -0,0 +1,82 @@
+<?php
+
+namespace CommerceGuys\Intl\Currency;
+
+interface CurrencyInterface
+{
+ /**
+ * Gets the alphabetic currency code.
+ *
+ * @return string
+ */
+ public function getCurrencyCode();
+
+ /**
+ * Sets the alphabetic currency code.
+ *
+ * @param string $currencyCode The alphabetic currency code.
+ */
+ public function setCurrencyCode($currencyCode);
+
+ /**
+ * Gets the currency name.
+ *
+ * @return string
+ */
+ public function getName();
+
+ /**
+ * Sets the currency name.
+ *
+ * @param string $name The currency name.
+ */
+ public function setName($name);
+
+ /**
+ * Gets the numeric currency code.
+ *
+ * The numeric code has three digits, and the first one can be a zero,
+ * hence the need to pass it around as a string.
+ *
+ * @return string
+ */
+ public function getNumericCode();
+
+ /**
+ * Sets the numeric currency code.
+ *
+ * @param string $numericCode The numeric currency code.
+ */
+ public function setNumericCode($numericCode);
+
+ /**
+ * Gets the currency symbol.
+ *
+ * @return string
+ */
+ public function getSymbol();
+
+ /**
+ * Sets the currency symbol.
+ *
+ * @param string $symbol The currency symbol.
+ */
+ public function setSymbol($symbol);
+
+ /**
+ * Gets the number of fraction digits.
+ *
+ * Used when rounding or formatting an amount for display.
+ * Actual storage precision can be greater.
+ *
+ * @return int
+ */
+ public function getFractionDigits();
+
+ /**
+ * Sets the number of fraction digits.
+ *
+ * @param int $fractionDigits The number of fraction digits.
+ */
+ public function setFractionDigits($fractionDigits);
+}
diff --git a/library/intl/src/Currency/CurrencyRepository.php b/library/intl/src/Currency/CurrencyRepository.php
new file mode 100644
index 000000000..84d0d4522
--- /dev/null
+++ b/library/intl/src/Currency/CurrencyRepository.php
@@ -0,0 +1,122 @@
+<?php
+
+namespace CommerceGuys\Intl\Currency;
+
+use CommerceGuys\Intl\LocaleResolverTrait;
+use CommerceGuys\Intl\Exception\UnknownCurrencyException;
+
+/**
+ * Manages currencies based on JSON definitions.
+ */
+class CurrencyRepository implements CurrencyRepositoryInterface
+{
+ use LocaleResolverTrait;
+
+ /**
+ * Base currency definitions.
+ *
+ * Contains data common to all locales, such as the currency numeric
+ * code, number of fraction digits.
+ *
+ * @var array
+ */
+ protected $baseDefinitions = array();
+
+ /**
+ * Per-locale currency definitions.
+ *
+ * @var array
+ */
+ protected $definitions = array();
+
+ /**
+ * Creates a CurrencyRepository instance.
+ *
+ * @param string $definitionPath The path to the currency definitions.
+ * Defaults to 'resources/currency'.
+ */
+ public function __construct($definitionPath = null)
+ {
+ $this->definitionPath = $definitionPath ? $definitionPath : __DIR__ . '/../../resources/currency/';
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function get($currencyCode, $locale = null, $fallbackLocale = null)
+ {
+ $locale = $this->resolveLocale($locale, $fallbackLocale);
+ $definitions = $this->loadDefinitions($locale);
+ if (!isset($definitions[$currencyCode])) {
+ throw new UnknownCurrencyException($currencyCode);
+ }
+
+ return $this->createCurrencyFromDefinition($definitions[$currencyCode], $locale);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getAll($locale = null, $fallbackLocale = null)
+ {
+ $locale = $this->resolveLocale($locale, $fallbackLocale);
+ $definitions = $this->loadDefinitions($locale);
+ $currencies = array();
+ foreach ($definitions as $currencyCode => $definition) {
+ $currencies[$currencyCode] = $this->createCurrencyFromDefinition($definition, $locale);
+ }
+
+ return $currencies;
+ }
+
+ /**
+ * Loads the currency definitions for the provided locale.
+ *
+ * @param string $locale The desired locale.
+ *
+ * @return array
+ */
+ protected function loadDefinitions($locale)
+ {
+ if (!isset($this->definitions[$locale])) {
+ $filename = $this->definitionPath . $locale . '.json';
+ $this->definitions[$locale] = json_decode(file_get_contents($filename), true);
+
+ // Make sure the base definitions have been loaded.
+ if (empty($this->baseDefinitions)) {
+ $this->baseDefinitions = json_decode(file_get_contents($this->definitionPath . 'base.json'), true);
+ }
+ // Merge-in base definitions.
+ foreach ($this->definitions[$locale] as $currencyCode => $definition) {
+ $this->definitions[$locale][$currencyCode] += $this->baseDefinitions[$currencyCode];
+ }
+ }
+
+ return $this->definitions[$locale];
+ }
+
+ /**
+ * Creates a currency object from the provided definition.
+ *
+ * @param array $definition The currency definition.
+ * @param string $locale The locale of the currency definition.
+ *
+ * @return Currency
+ */
+ protected function createCurrencyFromDefinition(array $definition, $locale)
+ {
+ if (!isset($definition['fraction_digits'])) {
+ $definition['fraction_digits'] = 2;
+ }
+
+ $currency = new Currency();
+ $currency->setCurrencyCode($definition['code']);
+ $currency->setName($definition['name']);
+ $currency->setNumericCode($definition['numeric_code']);
+ $currency->setFractionDigits($definition['fraction_digits']);
+ $currency->setSymbol($definition['symbol']);
+ $currency->setLocale($locale);
+
+ return $currency;
+ }
+}
diff --git a/library/intl/src/Currency/CurrencyRepositoryInterface.php b/library/intl/src/Currency/CurrencyRepositoryInterface.php
new file mode 100644
index 000000000..d72fcf137
--- /dev/null
+++ b/library/intl/src/Currency/CurrencyRepositoryInterface.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace CommerceGuys\Intl\Currency;
+
+/**
+ * Currency repository interface.
+ */
+interface CurrencyRepositoryInterface
+{
+ /**
+ * Returns a currency instance matching the provided currency code.
+ *
+ * @param string $currencyCode The currency code.
+ * @param string $locale The locale (i.e. fr-FR).
+ * @param string $fallbackLocale A fallback locale (i.e "en").
+ *
+ * @return CurrencyInterface
+ */
+ public function get($currencyCode, $locale = null, $fallbackLocale = null);
+
+ /**
+ * Returns all available currency instances.
+ *
+ * @param string $locale The locale (i.e. fr-FR).
+ * @param string $fallbackLocale A fallback locale (i.e "en").
+ *
+ * @return array An array of currencies implementing the CurrencyInterface,
+ * keyed by currency code.
+ */
+ public function getAll($locale = null, $fallbackLocale = null);
+}
diff --git a/library/intl/src/Exception/ExceptionInterface.php b/library/intl/src/Exception/ExceptionInterface.php
new file mode 100644
index 000000000..a7d17f9ab
--- /dev/null
+++ b/library/intl/src/Exception/ExceptionInterface.php
@@ -0,0 +1,7 @@
+<?php
+
+namespace CommerceGuys\Intl\Exception;
+
+interface ExceptionInterface
+{
+}
diff --git a/library/intl/src/Exception/InvalidArgumentException.php b/library/intl/src/Exception/InvalidArgumentException.php
new file mode 100644
index 000000000..afbe114a4
--- /dev/null
+++ b/library/intl/src/Exception/InvalidArgumentException.php
@@ -0,0 +1,11 @@
+<?php
+
+namespace CommerceGuys\Intl\Exception;
+
+/**
+ * This exception is thrown when an invalid argument is passed to a method.
+ * For example, a float amount instead of the expected string amount.
+ */
+class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
+{
+}
diff --git a/library/intl/src/Exception/UnknownCountryException.php b/library/intl/src/Exception/UnknownCountryException.php
new file mode 100644
index 000000000..c89845b23
--- /dev/null
+++ b/library/intl/src/Exception/UnknownCountryException.php
@@ -0,0 +1,11 @@
+<?php
+
+namespace CommerceGuys\Intl\Exception;
+
+/**
+ * This exception is thrown when an unknown country code is passed to the
+ * CountryRepository.
+ */
+class UnknownCountryException extends InvalidArgumentException implements ExceptionInterface
+{
+}
diff --git a/library/intl/src/Exception/UnknownCurrencyException.php b/library/intl/src/Exception/UnknownCurrencyException.php
new file mode 100644
index 000000000..f94c93d8a
--- /dev/null
+++ b/library/intl/src/Exception/UnknownCurrencyException.php
@@ -0,0 +1,11 @@
+<?php
+
+namespace CommerceGuys\Intl\Exception;
+
+/**
+ * This exception is thrown when an unknown currency code is passed to the
+ * CurrencyRepository.
+ */
+class UnknownCurrencyException extends InvalidArgumentException implements ExceptionInterface
+{
+}
diff --git a/library/intl/src/Exception/UnknownLanguageException.php b/library/intl/src/Exception/UnknownLanguageException.php
new file mode 100644
index 000000000..922b42185
--- /dev/null
+++ b/library/intl/src/Exception/UnknownLanguageException.php
@@ -0,0 +1,11 @@
+<?php
+
+namespace CommerceGuys\Intl\Exception;
+
+/**
+ * This exception is thrown when an unknown language code is passed to the
+ * LanguageRepository.
+ */
+class UnknownLanguageException extends InvalidArgumentException implements ExceptionInterface
+{
+}
diff --git a/library/intl/src/Exception/UnknownLocaleException.php b/library/intl/src/Exception/UnknownLocaleException.php
new file mode 100644
index 000000000..0deca13e8
--- /dev/null
+++ b/library/intl/src/Exception/UnknownLocaleException.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace CommerceGuys\Intl\Exception;
+
+/**
+ * This exception is thrown when an unknown locale is passed to a repository.
+ */
+class UnknownLocaleException extends InvalidArgumentException implements ExceptionInterface
+{
+}
diff --git a/library/intl/src/Formatter/NumberFormatter.php b/library/intl/src/Formatter/NumberFormatter.php
new file mode 100644
index 000000000..0b8e2ae59
--- /dev/null
+++ b/library/intl/src/Formatter/NumberFormatter.php
@@ -0,0 +1,406 @@
+<?php
+
+namespace CommerceGuys\Intl\Formatter;
+
+use CommerceGuys\Intl\Currency\CurrencyInterface;
+use CommerceGuys\Intl\Exception\InvalidArgumentException;
+use CommerceGuys\Intl\NumberFormat\NumberFormatInterface;
+
+/**
+ * Formats numbers using locale-specific patterns.
+ */
+class NumberFormatter implements NumberFormatterInterface
+{
+ /**
+ * The number format.
+ *
+ * @var NumberFormatInterface
+ */
+ protected $numberFormat;
+
+ /**
+ * The number pattern used to format positive numbers.
+ *
+ * @var string
+ */
+ protected $positivePattern;
+
+ /**
+ * The number pattern used to format negative numbers.
+ *
+ * @var string
+ */
+ protected $negativePattern;
+
+ /**
+ * Whether grouping is used.
+ *
+ * @var bool
+ */
+ protected $groupingUsed;
+
+ /**
+ * The size of the group of digits closest to the decimal point.
+ *
+ * @var int
+ */
+ protected $primaryGroupSize;
+
+ /**
+ * The size of every group of digits after the primary group.
+ *
+ * @var int
+ */
+ protected $secondaryGroupSize;
+
+ /**
+ * The minimum number of fraction digits to show.
+ *
+ * @var int
+ */
+ protected $minimumFractionDigits;
+
+ /**
+ * The maximum number of fraction digits to show.
+ *
+ * @var int
+ */
+ protected $maximumFractionDigits;
+
+ /**
+ * The currency display style.
+ *
+ * @var int
+ */
+ protected $currencyDisplay;
+
+ /**
+ * Localized digits.
+ *
+ * @var array
+ */
+ protected $digits = array(
+ NumberFormatInterface::NUMBERING_SYSTEM_ARABIC => array(
+ 0 => 'Ù ', 1 => 'Ù¡', 2 => 'Ù¢', 3 => 'Ù£', 4 => 'Ù¤',
+ 5 => 'Ù¥', 6 => 'Ù¦', 7 => 'Ù§', 8 => 'Ù¨', 9 => 'Ù©',
+ ),
+ NumberFormatInterface::NUMBERING_SYSTEM_ARABIC_EXTENDED => array(
+ 0 => 'Û°', 1 => 'Û±', 2 => 'Û²', 3 => 'Û³', 4 => 'Û´',
+ 5 => 'Ûµ', 6 => 'Û¶', 7 => 'Û·', 8 => 'Û¸', 9 => 'Û¹',
+ ),
+ NumberFormatInterface::NUMBERING_SYSTEM_BENGALI => array(
+ 0 => '০', 1 => '১', 2 => '২', 3 => '৩', 4 => '৪',
+ 5 => '৫', 6 => '৬', 7 => '৭', 8 => '৮', 9 => '৯',
+ ),
+ NumberFormatInterface::NUMBERING_SYSTEM_DEVANAGARI => array(
+ 0 => '०', 1 => '१', 2 => '२', 3 => '३', 4 => '४',
+ 5 => '५', 6 => '६', 7 => '७', 8 => '८', 9 => '९',
+ ),
+ );
+
+ /**
+ * Creaes a NumberFormatter instance.
+ *
+ * @param NumberFormatInterface $numberFormat The number format.
+ * @param int $style The formatting style.
+ *
+ * @throws InvalidArgumentException
+ */
+ public function __construct(NumberFormatInterface $numberFormat, $style = self::DECIMAL)
+ {
+ $availablePatterns = array(
+ self::DECIMAL => $numberFormat->getDecimalPattern(),
+ self::PERCENT => $numberFormat->getPercentPattern(),
+ self::CURRENCY => $numberFormat->getCurrencyPattern(),
+ self::CURRENCY_ACCOUNTING => $numberFormat->getAccountingCurrencyPattern(),
+ );
+ if (!array_key_exists($style, $availablePatterns)) {
+ // Unknown type.
+ throw new InvalidArgumentException('Unknown format style provided to NumberFormatter::__construct().');
+ }
+
+ // Split the selected pattern into positive and negative patterns.
+ $patterns = explode(';', $availablePatterns[$style]);
+ if (!isset($patterns[1])) {
+ // No explicit negative pattern was provided, construct it.
+ $patterns[1] = '-' . $patterns[0];
+ }
+
+ $this->numberFormat = $numberFormat;
+ $this->positivePattern = $patterns[0];
+ $this->negativePattern = $patterns[1];
+ $this->groupingUsed = (strpos($this->positivePattern, ',') !== false);
+ // This pattern has number groups, parse them.
+ if ($this->groupingUsed) {
+ preg_match('/#+0/', $this->positivePattern, $primaryGroupMatches);
+ $this->primaryGroupSize = $this->secondaryGroupSize = strlen($primaryGroupMatches[0]);
+ $numberGroups = explode(',', $this->positivePattern);
+ if (count($numberGroups) > 2) {
+ // This pattern has a distinct secondary group size.
+ $this->secondaryGroupSize = strlen($numberGroups[1]);
+ }
+ }
+
+ // Initialize the fraction digit settings for decimal and percent
+ // styles only. The currency ones will default to the currency values.
+ if (in_array($style, array(self::DECIMAL, self::PERCENT))) {
+ $this->minimumFractionDigits = 0;
+ $this->maximumFractionDigits = 3;
+ }
+ $this->currencyDisplay = self::CURRENCY_DISPLAY_SYMBOL;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function format($value)
+ {
+ if (!is_numeric($value)) {
+ $message = sprintf('The provided value "%s" must be a valid number or numeric string.', $value);
+ throw new InvalidArgumentException($message);
+ }
+
+ // Ensure that the value is positive and has the right number of digits.
+ $negative = (bccomp('0', $value, 12) == 1);
+ $signMultiplier = $negative ? '-1' : '1';
+ $value = bcdiv($value, $signMultiplier, $this->maximumFractionDigits);
+ // Split the number into major and minor digits.
+ $valueParts = explode('.', $value);
+ $majorDigits = $valueParts[0];
+ // Account for maximumFractionDigits = 0, where the number won't
+ // have a decimal point, and $valueParts[1] won't be set.
+ $minorDigits = isset($valueParts[1]) ? $valueParts[1] : '';
+
+ if ($this->groupingUsed) {
+ // Reverse the major digits, since they are grouped from the right.
+ $majorDigits = array_reverse(str_split($majorDigits));
+ // Group the major digits.
+ $groups = array();
+ $groups[] = array_splice($majorDigits, 0, $this->primaryGroupSize);
+ while (!empty($majorDigits)) {
+ $groups[] = array_splice($majorDigits, 0, $this->secondaryGroupSize);
+ }
+ // Reverse the groups and the digits inside of them.
+ $groups = array_reverse($groups);
+ foreach ($groups as &$group) {
+ $group = implode(array_reverse($group));
+ }
+ // Reconstruct the major digits.
+ $majorDigits = implode(',', $groups);
+ }
+
+ if ($this->minimumFractionDigits < $this->maximumFractionDigits) {
+ // Strip any trailing zeroes.
+ $minorDigits = rtrim($minorDigits, '0');
+ if (strlen($minorDigits) < $this->minimumFractionDigits) {
+ // Now there are too few digits, re-add trailing zeroes
+ // until the desired length is reached.
+ $neededZeroes = $this->minimumFractionDigits - strlen($minorDigits);
+ $minorDigits .= str_repeat('0', $neededZeroes);
+ }
+ }
+
+ // Assemble the final number and insert it into the pattern.
+ $value = $minorDigits ? $majorDigits . '.' . $minorDigits : $majorDigits;
+ $pattern = $negative ? $this->negativePattern : $this->positivePattern;
+ $value = preg_replace('/#(?:[\.,]#+)*0(?:[,\.][0#]+)*/', $value, $pattern);
+
+ // Localize the number.
+ $value = $this->replaceDigits($value);
+ $value = $this->replaceSymbols($value);
+
+ return $value;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function formatCurrency($value, CurrencyInterface $currency)
+ {
+ // Use the currency defaults if the values weren't set by the caller.
+ $resetMinimumFractionDigits = $resetMaximumFractionDigits = false;
+ if (!isset($this->minimumFractionDigits)) {
+ $this->minimumFractionDigits = $currency->getFractionDigits();
+ $resetMinimumFractionDigits = true;
+ }
+ if (!isset($this->maximumFractionDigits)) {
+ $this->maximumFractionDigits = $currency->getFractionDigits();
+ $resetMaximumFractionDigits = true;
+ }
+
+ // Format the decimal part of the value first.
+ $value = $this->format($value);
+
+ // Reset the fraction digit settings, so that they don't affect
+ // future formattings with different currencies.
+ if ($resetMinimumFractionDigits) {
+ $this->minimumFractionDigits = null;
+ }
+ if ($resetMaximumFractionDigits) {
+ $this->maximumFractionDigits = null;
+ }
+
+ // Determine whether to show the currency symbol or the currency code.
+ if ($this->currencyDisplay == self::CURRENCY_DISPLAY_SYMBOL) {
+ $symbol = $currency->getSymbol();
+ } else {
+ $symbol = $currency->getCurrencyCode();
+ }
+
+ return str_replace('¤', $symbol, $value);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function parseCurrency($value, CurrencyInterface $currency)
+ {
+ $replacements = array(
+ // Convert the localized symbols back to their original form.
+ $this->numberFormat->getDecimalSeparator() => '.',
+ $this->numberFormat->getPlusSign() => '+',
+ $this->numberFormat->getMinusSign() => '-',
+
+ // Strip any grouping separators, the currency code or symbol.
+ $this->numberFormat->getGroupingSeparator() => '',
+ $currency->getCurrencyCode() => '',
+ $currency->getSymbol() => '',
+
+ // Strip whitespace (spaces and non-breaking spaces).
+ ' ' => '',
+ chr(0xC2) . chr(0xA0) => '',
+ );
+ $numberingSystem = $this->numberFormat->getNumberingSystem();
+ if (isset($this->digits[$numberingSystem])) {
+ // Convert the localized digits back to latin.
+ $replacements += array_flip($this->digits[$numberingSystem]);
+ }
+
+ $value = strtr($value, $replacements);
+ if (substr($value, 0, 1) == '(' && substr($value, -1, 1) == ')') {
+ // This is an accounting formatted negative number.
+ $value = '-' . str_replace(array('(', ')'), '', $value);
+ }
+
+ return is_numeric($value) ? $value : false;
+ }
+
+ /**
+ * Replaces digits with their localized equivalents.
+ *
+ * @param string $value The value being formatted.
+ *
+ * @return string
+ */
+ protected function replaceDigits($value)
+ {
+ $numberingSystem = $this->numberFormat->getNumberingSystem();
+ if (isset($this->digits[$numberingSystem])) {
+ $value = strtr($value, $this->digits[$numberingSystem]);
+ }
+
+ return $value;
+ }
+
+ /**
+ * Replaces number symbols with their localized equivalents.
+ *
+ * @param string $value The value being formatted.
+ *
+ * @return string
+ *
+ * @see http://cldr.unicode.org/translation/number-symbols
+ */
+ protected function replaceSymbols($value)
+ {
+ $replacements = array(
+ '.' => $this->numberFormat->getDecimalSeparator(),
+ ',' => $this->numberFormat->getGroupingSeparator(),
+ '+' => $this->numberFormat->getPlusSign(),
+ '-' => $this->numberFormat->getMinusSign(),
+ '%' => $this->numberFormat->getPercentSign(),
+ );
+
+ return strtr($value, $replacements);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getNumberFormat()
+ {
+ return $this->numberFormat;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getMinimumFractionDigits()
+ {
+ return $this->minimumFractionDigits;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setMinimumFractionDigits($minimumFractionDigits)
+ {
+ $this->minimumFractionDigits = $minimumFractionDigits;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getMaximumFractionDigits()
+ {
+ return $this->maximumFractionDigits;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setMaximumFractionDigits($maximumFractionDigits)
+ {
+ $this->maximumFractionDigits = $maximumFractionDigits;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function isGroupingUsed()
+ {
+ return $this->groupingUsed;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setGroupingUsed($groupingUsed)
+ {
+ $this->groupingUsed = $groupingUsed;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getCurrencyDisplay()
+ {
+ return $this->currencyDisplay;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setCurrencyDisplay($currencyDisplay)
+ {
+ $this->currencyDisplay = $currencyDisplay;
+
+ return $this;
+ }
+}
diff --git a/library/intl/src/Formatter/NumberFormatterInterface.php b/library/intl/src/Formatter/NumberFormatterInterface.php
new file mode 100644
index 000000000..721107555
--- /dev/null
+++ b/library/intl/src/Formatter/NumberFormatterInterface.php
@@ -0,0 +1,134 @@
+<?php
+
+namespace CommerceGuys\Intl\Formatter;
+
+use CommerceGuys\Intl\Currency\CurrencyInterface;
+use CommerceGuys\Intl\NumberFormat\NumberFormatInterface;
+
+interface NumberFormatterInterface
+{
+ /* Format style constants */
+ const DECIMAL = 1;
+ const PERCENT = 2;
+ const CURRENCY = 3;
+ const CURRENCY_ACCOUNTING = 4;
+
+ /* Currency display style constants */
+ const CURRENCY_DISPLAY_SYMBOL = 1;
+ const CURRENCY_DISPLAY_CODE = 2;
+
+ /**
+ * Formats a number.
+ *
+ * Please note that the provided value should already be rounded.
+ * This formatter doesn't do any rounding of its own, and will simply
+ * truncate extra digits.
+ *
+ * @param string $value The value to format.
+ *
+ * @return string
+ */
+ public function format($value);
+
+ /**
+ * Formats a currency value.
+ *
+ * Please note that the provided value should already be rounded.
+ * This formatter doesn't do any rounding of its own, and will simply
+ * truncate extra digits.
+ *
+ * @param string $value The value to format.
+ * @param CurrencyInterface $currency The currency.
+ *
+ * @return string
+ */
+ public function formatCurrency($value, CurrencyInterface $currency);
+
+ /**
+ * Parses a formatted currency value.
+ *
+ * Commonly used in price input widgets where the end-user might
+ * input a value using digits and symbols common to their locale.
+ *
+ * @param string $value The value to parse.
+ * @param CurrencyInterface $currency The currency.
+ *
+ * @return string|false The parsed numeric value or FALSE on error.
+ */
+ public function parseCurrency($value, CurrencyInterface $currency);
+
+ /**
+ * Gets the number format.
+ *
+ * @return NumberFormatInterface
+ */
+ public function getNumberFormat();
+
+ /**
+ * Gets the minimum number of fraction digits.
+ *
+ * Defaults to 0 for decimal and percentage styles.
+ * Defaults to null for currency styles, since the currency number of
+ * fraction digits is used as the default in that case.
+ *
+ * @return int
+ */
+ public function getMinimumFractionDigits();
+
+ /**
+ * Sets the minimum number of fraction digits.
+ *
+ * @param int $minimumFractionDigits
+ */
+ public function setMinimumFractionDigits($minimumFractionDigits);
+
+ /**
+ * Gets the maximum number of fraction digits.
+ *
+ * Defaults to 3 for decimal and percentage styles.
+ * Defaults to null for currency styles, since the currency number of
+ * fraction digits is used as the default in that case.
+ *
+ * @return int
+ */
+ public function getMaximumFractionDigits();
+
+ /**
+ * Sets the maximum number of fraction digits.
+ *
+ * @param int $maximumFractionDigits
+ */
+ public function setMaximumFractionDigits($maximumFractionDigits);
+
+ /**
+ * Returns whether the major digits will be grouped.
+ *
+ * @return bool
+ */
+ public function isGroupingUsed();
+
+ /**
+ * Sets whether or not major digits should be grouped
+ *
+ * @param bool $groupingUsed
+ */
+ public function setGroupingUsed($groupingUsed);
+
+ /**
+ * Gets the currency display style.
+ *
+ * Controls whether a currency amount will be shown with the
+ * currency symbol (CURRENCY_DISPLAY_SYMBOL) or the
+ * currency code (CURRENCY_DISPLAY_CODE).
+ *
+ * @return int
+ */
+ public function getCurrencyDisplay();
+
+ /**
+ * Sets the currency display style.
+ *
+ * @param int $currencyDisplay One of the CURRENCY_DISPLAY_ constants.
+ */
+ public function setCurrencyDisplay($currencyDisplay);
+}
diff --git a/library/intl/src/Language/Language.php b/library/intl/src/Language/Language.php
new file mode 100644
index 000000000..259b57249
--- /dev/null
+++ b/library/intl/src/Language/Language.php
@@ -0,0 +1,91 @@
+<?php
+
+namespace CommerceGuys\Intl\Language;
+
+class Language implements LanguageInterface
+{
+ /**
+ * The two-letter language code.
+ *
+ * @var string
+ */
+ protected $languageCode;
+
+ /**
+ * The language name.
+ *
+ * @var string
+ */
+ protected $name;
+
+ /**
+ * The language locale (i.e. "en-US").
+ *
+ * @var string
+ */
+ protected $locale;
+
+ /**
+ * Returns the string representation of the Language.
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->getLanguageCode();
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getLanguageCode()
+ {
+ return $this->languageCode;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setLanguageCode($languageCode)
+ {
+ $this->languageCode = $languageCode;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setName($name)
+ {
+ $this->name = $name;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getLocale()
+ {
+ return $this->locale;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setLocale($locale)
+ {
+ $this->locale = $locale;
+
+ return $this;
+ }
+}
diff --git a/library/intl/src/Language/LanguageInterface.php b/library/intl/src/Language/LanguageInterface.php
new file mode 100644
index 000000000..612389142
--- /dev/null
+++ b/library/intl/src/Language/LanguageInterface.php
@@ -0,0 +1,37 @@
+<?php
+
+namespace CommerceGuys\Intl\Language;
+
+interface LanguageInterface
+{
+ /**
+ * Gets the two-letter language code.
+ *
+ * @return string
+ */
+ public function getLanguageCode();
+
+ /**
+ * Sets the two-letter language code.
+ *
+ * @param string $languageCode The two-letter language code.
+ */
+ public function setLanguageCode($languageCode);
+
+ /**
+ * Gets the language name.
+ *
+ * Note that certain locales have incomplete translations, in which
+ * case the english version of the language name is used instead.
+ *
+ * @return string
+ */
+ public function getName();
+
+ /**
+ * Sets the language name.
+ *
+ * @param string $name The language name.
+ */
+ public function setName($name);
+}
diff --git a/library/intl/src/Language/LanguageRepository.php b/library/intl/src/Language/LanguageRepository.php
new file mode 100644
index 000000000..50335cdc0
--- /dev/null
+++ b/library/intl/src/Language/LanguageRepository.php
@@ -0,0 +1,96 @@
+<?php
+
+namespace CommerceGuys\Intl\Language;
+
+use CommerceGuys\Intl\LocaleResolverTrait;
+use CommerceGuys\Intl\Exception\UnknownLanguageException;
+
+/**
+ * Manages languages based on JSON definitions.
+ */
+class LanguageRepository implements LanguageRepositoryInterface
+{
+ use LocaleResolverTrait;
+
+ /**
+ * Per-locale language definitions.
+ *
+ * @var array
+ */
+ protected $definitions = array();
+
+ /**
+ * Creates a LanguageRepository instance.
+ *
+ * @param string $definitionPath The path to the currency definitions.
+ * Defaults to 'resources/language'.
+ */
+ public function __construct($definitionPath = null)
+ {
+ $this->definitionPath = $definitionPath ? $definitionPath : __DIR__ . '/../../resources/language/';
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function get($languageCode, $locale = null, $fallbackLocale = null)
+ {
+ $locale = $this->resolveLocale($locale, $fallbackLocale);
+ $definitions = $this->loadDefinitions($locale);
+ if (!isset($definitions[$languageCode])) {
+ throw new UnknownLanguageException($languageCode);
+ }
+
+ return $this->createLanguageFromDefinition($definitions[$languageCode], $locale);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getAll($locale = null, $fallbackLocale = null)
+ {
+ $locale = $this->resolveLocale($locale, $fallbackLocale);
+ $definitions = $this->loadDefinitions($locale);
+ $languages = array();
+ foreach ($definitions as $languageCode => $definition) {
+ $languages[$languageCode] = $this->createLanguageFromDefinition($definition, $locale);
+ }
+
+ return $languages;
+ }
+
+ /**
+ * Loads the language definitions for the provided locale.
+ *
+ * @param string $locale The desired locale.
+ *
+ * @return array
+ */
+ protected function loadDefinitions($locale)
+ {
+ if (!isset($this->definitions[$locale])) {
+ $filename = $this->definitionPath . $locale . '.json';
+ $this->definitions[$locale] = json_decode(file_get_contents($filename), true);
+ }
+
+ return $this->definitions[$locale];
+ }
+
+ /**
+ * Creates a language object from the provided definition.
+ *
+ * @param array $definition The language definition.
+ * @param string $locale The locale of the language definition.
+ *
+ * @return Language
+ */
+ protected function createLanguageFromDefinition(array $definition, $locale)
+ {
+ $language = new Language();
+ $language->setLanguageCode($definition['code']);
+ $language->setName($definition['name']);
+ $language->setLocale($locale);
+
+ return $language;
+ }
+}
diff --git a/library/intl/src/Language/LanguageRepositoryInterface.php b/library/intl/src/Language/LanguageRepositoryInterface.php
new file mode 100644
index 000000000..ebdc0200a
--- /dev/null
+++ b/library/intl/src/Language/LanguageRepositoryInterface.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace CommerceGuys\Intl\Language;
+
+/**
+ * Language repository interface.
+ */
+interface LanguageRepositoryInterface
+{
+ /**
+ * Returns a language instance matching the provided language code.
+ *
+ * @param string $languageCode The language code.
+ * @param string $locale The locale (i.e. fr-FR).
+ * @param string $fallbackLocale A fallback locale (i.e "en").
+ *
+ * @return LanguageInterface
+ */
+ public function get($languageCode, $locale = null, $fallbackLocale = null);
+
+ /**
+ * Returns all available language instances.
+ *
+ * @param string $locale The locale (i.e. fr-FR).
+ * @param string $fallbackLocale A fallback locale (i.e "en").
+ *
+ * @return array An array of language implementing the LanguageInterface,
+ * keyed by language code.
+ */
+ public function getAll($locale = null, $fallbackLocale = null);
+}
diff --git a/library/intl/src/LocaleResolverTrait.php b/library/intl/src/LocaleResolverTrait.php
new file mode 100644
index 000000000..21c463c7e
--- /dev/null
+++ b/library/intl/src/LocaleResolverTrait.php
@@ -0,0 +1,89 @@
+<?php
+
+namespace CommerceGuys\Intl;
+
+use CommerceGuys\Intl\Exception\UnknownLocaleException;
+
+trait LocaleResolverTrait
+{
+ /**
+ * The path where per-locale definitions are stored.
+ */
+ protected $definitionPath;
+
+ /**
+ * Determines which locale should be used for loading definitions.
+ *
+ * If the "bs-Cyrl-BA" locale is requested, with an "en" fallback,
+ * the system will try to find the definitions for:
+ * 1) bs-Cyrl-BA
+ * 2) bs-Cyrl
+ * 3) bs
+ * 4) en
+ * The first locale for which a definition file is found, wins.
+ * Otherwise, an exception is thrown.
+ *
+ * @param string $locale The desired locale (i.e. fr-FR).
+ * @param string $fallbackLocale A fallback locale (i.e "en").
+ *
+ * @return string
+ *
+ * @throws UnknownLocaleException
+ */
+ protected function resolveLocale($locale = null, $fallbackLocale = null)
+ {
+ if (is_null($locale)) {
+ // Use the default locale if none was provided.
+ // @todo Provide a way to override this.
+ $locale = 'en';
+ }
+ // Normalize the locale. Allows en_US to work the same as en-US, etc.
+ $locale = str_replace('_', '-', $locale);
+ // List all possible variants (i.e. en-US gives "en-US" and "en").
+ $localeVariants = $this->getLocaleVariants($locale);
+ // A fallback locale was provided, add it to the end of the chain.
+ if (isset($fallbackLocale)) {
+ $localeVariants[] = $fallbackLocale;
+ }
+
+ // Try to resolve a locale by finding a matching definition file.
+ $resolvedLocale = null;
+ foreach ($localeVariants as $localeVariant) {
+ $path = $this->definitionPath . $localeVariant . '.json';
+ if (file_exists($path)) {
+ $resolvedLocale = $localeVariant;
+ break;
+ }
+ }
+ // No locale could be resolved, stop here.
+ if (!$resolvedLocale) {
+ throw new UnknownLocaleException($locale);
+ }
+
+ return $resolvedLocale;
+ }
+
+ /**
+ * Returns all variants of a locale.
+ *
+ * For example, "bs-Cyrl-BA" has the following variants:
+ * 1) bs-Cyrl-BA
+ * 2) bs-Cyrl
+ * 3) bs
+ *
+ * @param string $locale The locale (i.e. fr-FR).
+ *
+ * @return array An array of all variants of a locale.
+ */
+ protected function getLocaleVariants($locale)
+ {
+ $localeVariants = array();
+ $localeParts = explode('-', $locale);
+ while (!empty($localeParts)) {
+ $localeVariants[] = implode('-', $localeParts);
+ array_pop($localeParts);
+ }
+
+ return $localeVariants;
+ }
+}
diff --git a/library/intl/src/NumberFormat/NumberFormat.php b/library/intl/src/NumberFormat/NumberFormat.php
new file mode 100644
index 000000000..0c512b7ab
--- /dev/null
+++ b/library/intl/src/NumberFormat/NumberFormat.php
@@ -0,0 +1,269 @@
+<?php
+
+namespace CommerceGuys\Intl\NumberFormat;
+
+class NumberFormat implements NumberFormatInterface
+{
+ /**
+ * The locale (i.e. "en_US").
+ *
+ * @var string
+ */
+ protected $locale;
+
+ /**
+ * The numbering system.
+ *
+ * @var string
+ */
+ protected $numberingSystem = array();
+
+ /**
+ * The decimal separator.
+ *
+ * @var string
+ */
+ protected $decimalSeparator = array();
+
+ /**
+ * The grouping separator.
+ *
+ * @var string
+ */
+ protected $groupingSeparator = array();
+
+ /**
+ * The plus sign.
+ *
+ * @var string
+ */
+ protected $plusSign = array();
+
+ /**
+ * The number symbols.
+ *
+ * @var string
+ */
+ protected $minusSign = array();
+
+ /**
+ * The percent sign.
+ *
+ * @var string
+ */
+ protected $percentSign = array();
+
+ /**
+ * The number pattern used to format decimal numbers.
+ *
+ * @var string
+ */
+ protected $decimalPattern;
+
+ /**
+ * The number pattern used to format percentages.
+ *
+ * @var string
+ */
+ protected $percentPattern;
+
+ /**
+ * The number pattern used to format currency amounts.
+ *
+ * @var string
+ */
+ protected $currencyPattern;
+
+ /**
+ * The number pattern used to format accounting currency amounts.
+ *
+ * @var string
+ */
+ protected $accountingCurrencyPattern;
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getLocale()
+ {
+ return $this->locale;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setLocale($locale)
+ {
+ $this->locale = $locale;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getNumberingSystem()
+ {
+ return $this->numberingSystem;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setNumberingSystem($numberingSystem)
+ {
+ $this->numberingSystem = $numberingSystem;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getDecimalSeparator()
+ {
+ return $this->decimalSeparator;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setDecimalSeparator($decimalSeparator)
+ {
+ $this->decimalSeparator = $decimalSeparator;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getGroupingSeparator()
+ {
+ return $this->groupingSeparator;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setGroupingSeparator($groupingSeparator)
+ {
+ $this->groupingSeparator = $groupingSeparator;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getPlusSign()
+ {
+ return $this->plusSign;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setPlusSign($plusSign)
+ {
+ $this->plusSign = $plusSign;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getMinusSign()
+ {
+ return $this->minusSign;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setMinusSign($minusSign)
+ {
+ $this->minusSign = $minusSign;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getPercentSign()
+ {
+ return $this->percentSign;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setPercentSign($percentSign)
+ {
+ $this->percentSign = $percentSign;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getDecimalPattern()
+ {
+ return $this->decimalPattern;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setDecimalPattern($decimalPattern)
+ {
+ $this->decimalPattern = $decimalPattern;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getPercentPattern()
+ {
+ return $this->percentPattern;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setPercentPattern($percentPattern)
+ {
+ $this->percentPattern = $percentPattern;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getCurrencyPattern()
+ {
+ return $this->currencyPattern;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setCurrencyPattern($currencyPattern)
+ {
+ $this->currencyPattern = $currencyPattern;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getAccountingCurrencyPattern()
+ {
+ return $this->accountingCurrencyPattern;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setAccountingCurrencyPattern($accountingCurrencyPattern)
+ {
+ $this->accountingCurrencyPattern = $accountingCurrencyPattern;
+
+ return $this;
+ }
+}
diff --git a/library/intl/src/NumberFormat/NumberFormatInterface.php b/library/intl/src/NumberFormat/NumberFormatInterface.php
new file mode 100644
index 000000000..fa382df70
--- /dev/null
+++ b/library/intl/src/NumberFormat/NumberFormatInterface.php
@@ -0,0 +1,185 @@
+<?php
+
+namespace CommerceGuys\Intl\NumberFormat;
+
+interface NumberFormatInterface
+{
+ // Arabic-Indic digits.
+ const NUMBERING_SYSTEM_ARABIC = 'arab';
+ // Extended Arabic-Indic digits.
+ const NUMBERING_SYSTEM_ARABIC_EXTENDED = 'arabext';
+ // Bengali digits.
+ const NUMBERING_SYSTEM_BENGALI = 'beng';
+ // Devanagari digits.
+ const NUMBERING_SYSTEM_DEVANAGARI = 'deva';
+ // Latin digits
+ const NUMBERING_SYSTEM_LATIN = 'latn';
+
+ /**
+ * Gets the locale.
+ *
+ * @return string
+ */
+ public function getLocale();
+
+ /**
+ * Sets the locale.
+ *
+ * @param string $locale The locale (i.e. "en_US").
+ */
+ public function setLocale($locale);
+
+ /**
+ * Gets the numbering system.
+ *
+ * The value is one of the NUMBERING_SYSTEM_ constants.
+ *
+ * @return string
+ */
+ public function getNumberingSystem();
+
+ /**
+ * Sets the numbering system.
+ *
+ * @param string $numberingSystem One of the NUMBERING_SYSTEM_ constants.
+ */
+ public function setNumberingSystem($numberingSystem);
+
+ /**
+ * Gets the decimal separator.
+ *
+ * @return string
+ */
+ public function getDecimalSeparator();
+
+ /**
+ * Sets the decimal separator.
+ *
+ * @var string $decimalSeparator
+ */
+ public function setDecimalSeparator($decimalSeparator);
+
+ /**
+ * Gets the grouping separator.
+ *
+ * @return string
+ */
+ public function getGroupingSeparator();
+
+ /**
+ * Sets the grouping separator.
+ *
+ * @var string $groupingSeparator
+ */
+ public function setGroupingSeparator($groupingSeparator);
+
+ /**
+ * Gets the plus sign.
+ *
+ * @return string
+ */
+ public function getPlusSign();
+
+ /**
+ * Sets the plus sign.
+ *
+ * @var string $plusSign
+ */
+ public function setPlusSign($plusSign);
+
+ /**
+ * Gets the minus sign.
+ *
+ * @return string
+ */
+ public function getMinusSign();
+
+ /**
+ * Sets the minus sign.
+ *
+ * @var string $minusSign
+ */
+ public function setMinusSign($minusSign);
+
+ /**
+ * Gets the percent sign.
+ *
+ * @return string
+ */
+ public function getPercentSign();
+
+ /**
+ * Sets the percent sign.
+ *
+ * @var string $percentSign
+ */
+ public function setPercentSign($percentSign);
+
+ /**
+ * Gets the number pattern used to format decimal numbers.
+ *
+ * @return string
+ *
+ * @see http://cldr.unicode.org/translation/number-patterns
+ */
+ public function getDecimalPattern();
+
+ /**
+ * Sets the number pattern used to format decimal numbers.
+ *
+ * @param string $decimalPattern The decimal pattern.
+ */
+ public function setDecimalPattern($decimalPattern);
+
+ /**
+ * Gets the number pattern used to format percentages.
+ *
+ * @return string
+ *
+ * @see http://cldr.unicode.org/translation/number-patterns
+ */
+ public function getPercentPattern();
+
+ /**
+ * Sets the number pattern used to format percentages.
+ *
+ * @param string $percentPattern The percent pattern.
+ */
+ public function setPercentPattern($percentPattern);
+
+ /**
+ * Gets the number pattern used to format currency amounts.
+ *
+ * @return string
+ *
+ * @see http://cldr.unicode.org/translation/number-patterns
+ */
+ public function getCurrencyPattern();
+
+ /**
+ * Sets the number pattern used to format currency amounts.
+ *
+ * @param string $currencyPattern The currency pattern.
+ */
+ public function setCurrencyPattern($currencyPattern);
+
+ /**
+ * Gets the number pattern used to format accounting currency amounts.
+ *
+ * Most commonly used when formatting amounts on invoices.
+ *
+ * @return string
+ *
+ * @see http://cldr.unicode.org/translation/number-patterns
+ */
+ public function getAccountingCurrencyPattern();
+
+ /**
+ * Sets the number pattern used to format accounting currency amounts.
+ *
+ * Most commonly used when formatting amounts on invoices.
+ *
+ * @param string $accountingCurrencyPattern The accounting currency pattern.
+ */
+ public function setAccountingCurrencyPattern($accountingCurrencyPattern);
+}
diff --git a/library/intl/src/NumberFormat/NumberFormatRepository.php b/library/intl/src/NumberFormat/NumberFormatRepository.php
new file mode 100644
index 000000000..29a597906
--- /dev/null
+++ b/library/intl/src/NumberFormat/NumberFormatRepository.php
@@ -0,0 +1,87 @@
+<?php
+
+namespace CommerceGuys\Intl\NumberFormat;
+
+use CommerceGuys\Intl\LocaleResolverTrait;
+
+/**
+ * Repository for number formats based on JSON definitions.
+ */
+class NumberFormatRepository implements NumberFormatRepositoryInterface
+{
+ use LocaleResolverTrait;
+
+ /**
+ * Number format definitions.
+ *
+ * @var array
+ */
+ protected $definitions = array();
+
+ /**
+ * Creates a NumberFormatRepository instance.
+ *
+ * @param string $definitionPath The path to the number format definitions.
+ * Defaults to 'resources/number_format'.
+ */
+ public function __construct($definitionPath = null)
+ {
+ $this->definitionPath = $definitionPath ? $definitionPath : __DIR__ . '/../../resources/number_format/';
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function get($locale, $fallbackLocale = null)
+ {
+ $locale = $this->resolveLocale($locale, $fallbackLocale);
+ if (!isset($this->definitions[$locale])) {
+ $filename = $this->definitionPath . $locale . '.json';
+ $this->definitions[$locale] = json_decode(file_get_contents($filename), true);
+ }
+
+ return $this->createNumberFormatFromDefinition($this->definitions[$locale], $locale);
+ }
+
+ /**
+ * Creates a number format object from the provided definition.
+ *
+ * @param array $definition The number format definition.
+ * @param string $locale The locale of the number format definition.
+ *
+ * @return NumberFormat
+ */
+ protected function createNumberFormatFromDefinition(array $definition, $locale)
+ {
+ if (!isset($definition['decimal_separator'])) {
+ $definition['decimal_separator'] = '.';
+ }
+ if (!isset($definition['grouping_separator'])) {
+ $definition['grouping_separator'] = ',';
+ }
+ if (!isset($definition['plus_sign'])) {
+ $definition['plus_sign'] = '+';
+ }
+ if (!isset($definition['minus_sign'])) {
+ $definition['minus_sign'] = '-';
+ }
+ if (!isset($definition['percent_sign'])) {
+ $definition['percent_sign'] = '%';
+ }
+
+ $numberFormat = new NumberFormat();
+ $numberFormat->setLocale($locale);
+ $numberFormat->setNumberingSystem($definition['numbering_system']);
+ $numberFormat->setDecimalSeparator($definition['decimal_separator']);
+ $numberFormat->setGroupingSeparator($definition['grouping_separator']);
+ $numberFormat->setPlusSign($definition['plus_sign']);
+ $numberFormat->setMinusSign($definition['minus_sign']);
+ $numberFormat->setPercentSign($definition['percent_sign']);
+ $numberFormat->setDecimalPattern($definition['decimal_pattern']);
+ $numberFormat->setPercentPattern($definition['percent_pattern']);
+ $numberFormat->setCurrencyPattern($definition['currency_pattern']);
+ $numberFormat->setAccountingCurrencyPattern($definition['accounting_currency_pattern']);
+
+ return $numberFormat;
+ }
+}
diff --git a/library/intl/src/NumberFormat/NumberFormatRepositoryInterface.php b/library/intl/src/NumberFormat/NumberFormatRepositoryInterface.php
new file mode 100644
index 000000000..ff162b522
--- /dev/null
+++ b/library/intl/src/NumberFormat/NumberFormatRepositoryInterface.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace CommerceGuys\Intl\NumberFormat;
+
+/**
+ * Number format repository interface.
+ */
+interface NumberFormatRepositoryInterface
+{
+ /**
+ * Returns a number format instance for the provided locale.
+ *
+ * @param string $locale The locale (i.e. fr-FR).
+ * @param string $fallbackLocale A fallback locale (i.e "en").
+ *
+ * @return NumberFormatInterface
+ */
+ public function get($locale, $fallbackLocale = null);
+}
diff --git a/library/intl/tests/Country/CountryRepositoryTest.php b/library/intl/tests/Country/CountryRepositoryTest.php
new file mode 100644
index 000000000..23e1509d8
--- /dev/null
+++ b/library/intl/tests/Country/CountryRepositoryTest.php
@@ -0,0 +1,114 @@
+<?php
+
+namespace CommerceGuys\Intl\Tests\Country;
+
+use CommerceGuys\Intl\Country\CountryRepository;
+use org\bovigo\vfs\vfsStream;
+
+/**
+ * @coversDefaultClass \CommerceGuys\Intl\Country\CountryRepository
+ */
+class CountryRepositoryTest extends \PHPUnit_Framework_TestCase
+{
+ /**
+ * Base country definitions.
+ *
+ * @var array
+ */
+ protected $baseDefinitions = array(
+ 'FR' => array(
+ 'code' => 'FR',
+ 'three_letter_code' => 'FRA',
+ 'numeric_code' => '250',
+ 'telephone_code' => '33',
+ ),
+ 'US' => array(
+ 'code' => 'US',
+ 'three_letter_code' => 'USA',
+ 'numeric_code' => '840',
+ 'telephone_code' => '1',
+ ),
+ );
+
+ /**
+ * English country definitions.
+ *
+ * @var array
+ */
+ protected $englishDefinitions = array(
+ 'FR' => array(
+ 'name' => 'France',
+ ),
+ 'US' => array(
+ 'name' => 'United States',
+ ),
+ );
+
+ /**
+ * @covers ::__construct
+ */
+ public function testConstructor()
+ {
+ // Mock the existence of JSON definitions on the filesystem.
+ $root = vfsStream::setup('resources');
+ vfsStream::newFile('country/base.json')->at($root)->setContent(json_encode($this->baseDefinitions));
+ vfsStream::newFile('country/en.json')->at($root)->setContent(json_encode($this->englishDefinitions));
+
+ // Instantiate the country repository and confirm that the definition path
+ // was properly set.
+ $countryRepository = new CountryRepository('vfs://resources/country/');
+ $definitionPath = $this->getObjectAttribute($countryRepository, 'definitionPath');
+ $this->assertEquals('vfs://resources/country/', $definitionPath);
+
+ return $countryRepository;
+ }
+
+ /**
+ * @covers ::get
+ * @covers ::loadDefinitions
+ * @covers ::createCountryFromDefinition
+ * @uses \CommerceGuys\Intl\Country\Country
+ * @uses \CommerceGuys\Intl\LocaleResolverTrait
+ * @depends testConstructor
+ */
+ public function testGet($countryRepository)
+ {
+ $country = $countryRepository->get('FR');
+ $this->assertInstanceOf('CommerceGuys\\Intl\\Country\\Country', $country);
+ $this->assertEquals('FR', $country->getCountryCode());
+ $this->assertEquals('France', $country->getName());
+ $this->assertEquals('FRA', $country->getThreeLetterCode());
+ $this->assertEquals('250', $country->getNumericCode());
+ $this->assertEquals('33', $country->getTelephoneCode());
+ $this->assertEquals('en', $country->getLocale());
+ }
+
+ /**
+ * @covers ::get
+ * @covers ::loadDefinitions
+ * @uses \CommerceGuys\Intl\LocaleResolverTrait
+ * @expectedException \CommerceGuys\Intl\Exception\UnknownCountryException
+ * @depends testConstructor
+ */
+ public function testGetInvalidCountry($countryRepository)
+ {
+ $countryRepository->get('DE');
+ }
+
+ /**
+ * @covers ::getAll
+ * @covers ::loadDefinitions
+ * @covers ::createCountryFromDefinition
+ * @uses \CommerceGuys\Intl\Country\Country
+ * @uses \CommerceGuys\Intl\LocaleResolverTrait
+ * @depends testConstructor
+ */
+ public function testGetAll($countryRepository)
+ {
+ $countries = $countryRepository->getAll();
+ $this->assertArrayHasKey('FR', $countries);
+ $this->assertArrayHasKey('US', $countries);
+ $this->assertEquals('FR', $countries['FR']->getCountryCode());
+ $this->assertEquals('US', $countries['US']->getCountryCode());
+ }
+}
diff --git a/library/intl/tests/Country/CountryTest.php b/library/intl/tests/Country/CountryTest.php
new file mode 100644
index 000000000..a0b2dc116
--- /dev/null
+++ b/library/intl/tests/Country/CountryTest.php
@@ -0,0 +1,83 @@
+<?php
+
+namespace CommerceGuys\Intl\Tests\Country;
+
+use CommerceGuys\Intl\Country\Country;
+
+/**
+ * @coversDefaultClass \CommerceGuys\Intl\Country\Country
+ */
+class CountryTest extends \PHPUnit_Framework_TestCase
+{
+ /**
+ * @var Country
+ */
+ protected $country;
+
+ public function setUp()
+ {
+ $this->country = new Country();
+ }
+
+ /**
+ * @covers ::getCountryCode
+ * @covers ::setCountryCode
+ * @covers ::__toString
+ */
+ public function testCountryCode()
+ {
+ $this->country->setCountryCode('US');
+ $this->assertEquals('US', $this->country->getCountryCode());
+ $this->assertEquals('US', (string) $this->country);
+ }
+
+ /**
+ * @covers ::getName
+ * @covers ::setName
+ */
+ public function testName()
+ {
+ $this->country->setName('United States');
+ $this->assertEquals('United States', $this->country->getName());
+ }
+
+ /**
+ * @covers ::getThreeLetterCode
+ * @covers ::setThreeLetterCode
+ */
+ public function testThreeLetterCode()
+ {
+ $this->country->setThreeLetterCode('USA');
+ $this->assertEquals('USA', $this->country->getThreeLetterCode());
+ }
+
+ /**
+ * @covers ::getNumericCode
+ * @covers ::setNumericCode
+ */
+ public function testNumericCode()
+ {
+ $this->country->setNumericCode('840');
+ $this->assertEquals('840', $this->country->getNumericCode());
+ }
+
+ /**
+ * @covers ::getTelephoneCode
+ * @covers ::setTelephoneCode
+ */
+ public function testTelephoneCode()
+ {
+ $this->country->setTelephoneCode('1');
+ $this->assertEquals('1', $this->country->getTelephoneCode());
+ }
+
+ /**
+ * @covers ::getLocale
+ * @covers ::setLocale
+ */
+ public function testLocale()
+ {
+ $this->country->setLocale('en');
+ $this->assertEquals('en', $this->country->getLocale());
+ }
+}
diff --git a/library/intl/tests/Currency/CurrencyRepositoryTest.php b/library/intl/tests/Currency/CurrencyRepositoryTest.php
new file mode 100644
index 000000000..4270dc70f
--- /dev/null
+++ b/library/intl/tests/Currency/CurrencyRepositoryTest.php
@@ -0,0 +1,113 @@
+<?php
+
+namespace CommerceGuys\Intl\Tests\Currency;
+
+use CommerceGuys\Intl\Currency\CurrencyRepository;
+use org\bovigo\vfs\vfsStream;
+
+/**
+ * @coversDefaultClass \CommerceGuys\Intl\Currency\CurrencyRepository
+ */
+class CurrencyRepositoryTest extends \PHPUnit_Framework_TestCase
+{
+ /**
+ * Base currency definitions.
+ *
+ * @var array
+ */
+ protected $baseDefinitions = array(
+ 'USD' => array(
+ 'code' => 'USD',
+ 'numeric_code' => '840',
+ ),
+ 'EUR' => array(
+ 'code' => 'EUR',
+ 'numeric_code' => '840',
+ 'fraction_digits' => '2',
+ ),
+ );
+
+ /**
+ * English currency definitions.
+ *
+ * @var array
+ */
+ protected $englishDefinitions = array(
+ 'USD' => array(
+ 'name' => 'US Dollar',
+ 'symbol' => '$',
+ ),
+ 'EUR' => array(
+ 'name' => 'Euro',
+ 'symbol' => '€',
+ ),
+ );
+
+ /**
+ * @covers ::__construct
+ */
+ public function testConstructor()
+ {
+ // Mock the existence of JSON definitions on the filesystem.
+ $root = vfsStream::setup('resources');
+ vfsStream::newFile('currency/base.json')->at($root)->setContent(json_encode($this->baseDefinitions));
+ vfsStream::newFile('currency/en.json')->at($root)->setContent(json_encode($this->englishDefinitions));
+
+ // Instantiate the currency repository and confirm that the definition path
+ // was properly set.
+ $currencyRepository = new CurrencyRepository('vfs://resources/currency/');
+ $definitionPath = $this->getObjectAttribute($currencyRepository, 'definitionPath');
+ $this->assertEquals('vfs://resources/currency/', $definitionPath);
+
+ return $currencyRepository;
+ }
+
+ /**
+ * @covers ::get
+ * @covers ::loadDefinitions
+ * @covers ::createCurrencyFromDefinition
+ * @uses \CommerceGuys\Intl\Currency\Currency
+ * @uses \CommerceGuys\Intl\LocaleResolverTrait
+ * @depends testConstructor
+ */
+ public function testGet($currencyRepository)
+ {
+ $currency = $currencyRepository->get('USD');
+ $this->assertInstanceOf('CommerceGuys\\Intl\\Currency\\Currency', $currency);
+ $this->assertEquals('USD', $currency->getCurrencyCode());
+ $this->assertEquals('US Dollar', $currency->getName());
+ $this->assertEquals('840', $currency->getNumericCode());
+ $this->assertEquals('2', $currency->getFractionDigits());
+ $this->assertEquals('$', $currency->getSymbol());
+ $this->assertEquals('en', $currency->getLocale());
+ }
+
+ /**
+ * @covers ::get
+ * @covers ::loadDefinitions
+ * @uses \CommerceGuys\Intl\LocaleResolverTrait
+ * @expectedException \CommerceGuys\Intl\Exception\UnknownCurrencyException
+ * @depends testConstructor
+ */
+ public function testGetInvalidCurrency($currencyRepository)
+ {
+ $currencyRepository->get('RSD');
+ }
+
+ /**
+ * @covers ::getAll
+ * @covers ::loadDefinitions
+ * @covers ::createCurrencyFromDefinition
+ * @uses \CommerceGuys\Intl\Currency\Currency
+ * @uses \CommerceGuys\Intl\LocaleResolverTrait
+ * @depends testConstructor
+ */
+ public function testGetAll($currencyRepository)
+ {
+ $currencies = $currencyRepository->getAll();
+ $this->assertArrayHasKey('USD', $currencies);
+ $this->assertArrayHasKey('EUR', $currencies);
+ $this->assertEquals('USD', $currencies['USD']->getCurrencyCode());
+ $this->assertEquals('EUR', $currencies['EUR']->getCurrencyCode());
+ }
+}
diff --git a/library/intl/tests/Currency/CurrencyTest.php b/library/intl/tests/Currency/CurrencyTest.php
new file mode 100644
index 000000000..837e4d07a
--- /dev/null
+++ b/library/intl/tests/Currency/CurrencyTest.php
@@ -0,0 +1,83 @@
+<?php
+
+namespace CommerceGuys\Intl\Tests\Currency;
+
+use CommerceGuys\Intl\Currency\Currency;
+
+/**
+ * @coversDefaultClass \CommerceGuys\Intl\Currency\Currency
+ */
+class CurrencyTest extends \PHPUnit_Framework_TestCase
+{
+ /**
+ * @var Currency
+ */
+ protected $currency;
+
+ public function setUp()
+ {
+ $this->currency = new Currency();
+ }
+
+ /**
+ * @covers ::getCurrencyCode
+ * @covers ::setCurrencyCode
+ * @covers ::__toString
+ */
+ public function testCurrencyCode()
+ {
+ $this->currency->setCurrencyCode('USD');
+ $this->assertEquals('USD', $this->currency->getCurrencyCode());
+ $this->assertEquals('USD', (string) $this->currency);
+ }
+
+ /**
+ * @covers ::getName
+ * @covers ::setName
+ */
+ public function testName()
+ {
+ $this->currency->setName('US Dollar');
+ $this->assertEquals('US Dollar', $this->currency->getName());
+ }
+
+ /**
+ * @covers ::getNumericCode
+ * @covers ::setNumericCode
+ */
+ public function testNumericCode()
+ {
+ $this->currency->setNumericCode('840');
+ $this->assertEquals('840', $this->currency->getNumericCode());
+ }
+
+ /**
+ * @covers ::getFractionDigits
+ * @covers ::setFractionDigits
+ */
+ public function testFractionDigits()
+ {
+ $this->currency->setFractionDigits('2');
+ $this->assertEquals('2', $this->currency->getFractionDigits());
+ }
+
+ /**
+ * @covers ::getSymbol
+ * @covers ::setSymbol
+ */
+ public function testSymbol()
+ {
+ $this->currency->setSymbol('$');
+ $this->assertEquals('$', $this->currency->getSymbol());
+ }
+
+ /**
+ * @covers ::getLocale
+ * @covers ::setLocale
+ */
+ public function testLocale()
+ {
+ $this->currency->setLocale('en');
+ $this->assertEquals('en', $this->currency->getLocale());
+ }
+}
diff --git a/library/intl/tests/DummyRepository.php b/library/intl/tests/DummyRepository.php
new file mode 100644
index 000000000..0d9ca760b
--- /dev/null
+++ b/library/intl/tests/DummyRepository.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace CommerceGuys\Intl\Tests;
+
+use CommerceGuys\Intl\LocaleResolverTrait;
+
+/**
+ * Dummy repository used for testing the LocaleResolverTrait.
+ */
+class DummyRepository
+{
+ use LocaleResolverTrait;
+
+ public function __construct()
+ {
+ $this->definitionPath = 'vfs://resources/dummy/';
+ }
+
+ public function runResolveLocale($locale, $fallbackLocale = null)
+ {
+ return $this->resolveLocale($locale, $fallbackLocale);
+ }
+}
diff --git a/library/intl/tests/Formatter/NumberFormatterTest.php b/library/intl/tests/Formatter/NumberFormatterTest.php
new file mode 100644
index 000000000..83574873b
--- /dev/null
+++ b/library/intl/tests/Formatter/NumberFormatterTest.php
@@ -0,0 +1,378 @@
+<?php
+
+namespace CommerceGuys\Intl\Tests\Formatter;
+
+use CommerceGuys\Intl\Currency\Currency;
+use CommerceGuys\Intl\Formatter\NumberFormatter;
+use CommerceGuys\Intl\NumberFormat\NumberFormat;
+
+/**
+ * @coversDefaultClass \CommerceGuys\Intl\Formatter\NumberFormatter
+ */
+class NumberFormatterTest extends \PHPUnit_Framework_TestCase
+{
+ /**
+ * Prepare two number formats.
+ */
+ protected $numberFormats = array(
+ 'latn' => array(
+ 'numbering_system' => 'latn',
+ 'decimal_pattern' => '#,##0.###',
+ 'percent_pattern' => '#,##0%',
+ 'currency_pattern' => '¤#,##0.00',
+ 'accounting_currency_pattern' => '¤#,##0.00;(¤#,##0.00)',
+ ),
+ 'beng' => array(
+ 'numbering_system' => 'beng',
+ 'decimal_pattern' => '#,##,##0.###',
+ 'percent_pattern' => '#,##,##0%',
+ 'currency_pattern' => '#,##,##0.00¤',
+ 'accounting_currency_pattern' => '#,##,##0.00¤;(#,##,##0.00¤)',
+ ),
+ );
+
+ /**
+ * Prepare two currency formats.
+ */
+ protected $currencies = array(
+ 'USD' => array(
+ 'code' => 'USD',
+ 'name' => 'US Dollar',
+ 'numeric_code' => '840',
+ 'symbol' => '$',
+ ),
+ 'BND' => array(
+ 'code' => 'BND',
+ 'name' => 'dollar Brunei',
+ 'numeric_code' => '096',
+ 'symbol' => 'BND',
+ ),
+ );
+
+ /**
+ * @covers ::__construct
+ * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::getNumberFormat
+ * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
+ */
+ public function testConstructor()
+ {
+ $numberFormat = new NumberFormat();
+ $formatter = new NumberFormatter($numberFormat, NumberFormatter::DECIMAL);
+ $this->assertSame($numberFormat, $formatter->getNumberFormat());
+ }
+
+ /**
+ * @covers ::__construct
+ * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
+ *
+ * @expectedException \CommerceGuys\Intl\Exception\InvalidArgumentException
+ * @expectedExceptionMessage Unknown format style provided to NumberFormatter::__construct().
+ */
+ public function testConstructorWithInvalidStyle()
+ {
+ $numberFormat = new NumberFormat();
+ new NumberFormatter($numberFormat, 'foo');
+ }
+
+ /**
+ * @covers ::format
+ * @covers ::replaceDigits
+ * @covers ::replaceSymbols
+ * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::__construct
+ * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
+ *
+ * @dataProvider numberValueProvider
+ */
+ public function testFormat($number_format, $style, $value, $expected_value)
+ {
+ $formatter = new NumberFormatter($number_format, $style);
+
+ $formattedNumber = $formatter->format($value);
+ $this->assertSame($expected_value, $formattedNumber);
+ }
+
+ /**
+ * @covers ::SetMinimumFractionDigits
+ * @covers ::SetMaximumFractionDigits
+ * @covers ::format
+ * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::__construct
+ * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::replaceDigits
+ * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::replaceSymbols
+ * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
+ */
+ public function testFormatFractionDigits()
+ {
+ $numberFormat = $this->createNumberFormat($this->numberFormats['latn']);
+
+ $formatter = new NumberFormatter($numberFormat);
+ $formatter->setMinimumFractionDigits(2);
+ $formattedNumber = $formatter->format('12.5');
+ $this->assertSame('12.50', $formattedNumber);
+
+ $formatter = new NumberFormatter($numberFormat);
+ $formatter->setMaximumFractionDigits(1);
+ $formattedNumber = $formatter->format('12.50');
+ $this->assertSame('12.5', $formattedNumber);
+
+ $formatter = new NumberFormatter($numberFormat);
+ $formatter->setMinimumFractionDigits(4);
+ $formatter->setMaximumFractionDigits(5);
+ $formattedNumber = $formatter->format('12.50000');
+ $this->assertSame('12.5000', $formattedNumber);
+ }
+
+ /**
+ * @covers ::format
+ * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::__construct
+ * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::format
+ * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
+ *
+ * @expectedException \CommerceGuys\Intl\Exception\InvalidArgumentException
+ */
+ public function testFormatOnlyAllowsNumbers()
+ {
+ $numberFormat = $this->createNumberFormat($this->numberFormats['latn']);
+ $formatter = new NumberFormatter($numberFormat);
+ $formatter->format('a12.34');
+ }
+
+ /**
+ * @covers ::formatCurrency
+ * @covers ::replaceSymbols
+ * @uses \CommerceGuys\Intl\Currency\Currency
+ * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::__construct
+ * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::format
+ * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::replaceDigits
+ * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
+ *
+ * @dataProvider currencyValueProvider
+ */
+ public function testFormatCurrency($number_format, $currency, $style, $value, $expected_value)
+ {
+ $formatter = new NumberFormatter($number_format, $style);
+
+ $formattedNumber = $formatter->formatCurrency($value, $currency);
+ $this->assertSame($expected_value, $formattedNumber);
+ }
+
+ /**
+ * @covers ::parseCurrency
+ * @uses \CommerceGuys\Intl\Currency\Currency
+ * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::__construct
+ * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
+ *
+ * @dataProvider formattedCurrencyProvider
+ */
+ public function testParseCurrency($number_format, $currency, $style, $value, $expected_value)
+ {
+ $formatter = new NumberFormatter($number_format, $style);
+
+ $parsedNumber = $formatter->parseCurrency($value, $currency);
+ $this->assertSame($expected_value, $parsedNumber);
+ }
+
+ /**
+ * @covers ::getNumberFormat
+ * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::__construct
+ * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
+ */
+ public function testGetNumberFormat()
+ {
+ $numberFormat = $this->createNumberFormat($this->numberFormats['latn']);
+ $formatter = new NumberFormatter($numberFormat, NumberFormatter::DECIMAL);
+ $this->assertSame($numberFormat, $formatter->getNumberFormat());
+ }
+
+ /**
+ * @covers ::getMinimumFractionDigits
+ * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::__construct
+ * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
+ */
+ public function testMinimumFractionDigits()
+ {
+ $numberFormat = $this->createNumberFormat($this->numberFormats['latn']);
+
+ // Defaults to 0 for decimal and percentage formats.
+ $formatter = new NumberFormatter($numberFormat, NumberFormatter::DECIMAL);
+ $this->assertEquals(0, $formatter->getMinimumFractionDigits());
+ $formatter = new NumberFormatter($numberFormat, NumberFormatter::PERCENT);
+ $this->assertEquals(0, $formatter->getMinimumFractionDigits());
+
+ // Should default to null for currency formats.
+ $formatter = new NumberFormatter($numberFormat, NumberFormatter::CURRENCY);
+ $this->assertNull($formatter->getMinimumFractionDigits());
+ $formatter = new NumberFormatter($numberFormat, NumberFormatter::CURRENCY_ACCOUNTING);
+ $this->assertNull($formatter->getMinimumFractionDigits());
+ }
+
+ /**
+ * @covers ::getMaximumFractionDigits
+ * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::__construct
+ * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
+ */
+ public function testMaximumFractionDigits()
+ {
+ $numberFormat = $this->createNumberFormat($this->numberFormats['latn']);
+
+ // Defaults to 3 for decimal and percentage formats.
+ $formatter = new NumberFormatter($numberFormat, NumberFormatter::DECIMAL);
+ $this->assertEquals(3, $formatter->getMaximumFractionDigits());
+ $formatter = new NumberFormatter($numberFormat, NumberFormatter::PERCENT);
+ $this->assertEquals(3, $formatter->getMaximumFractionDigits());
+
+ // Should default to null for currency formats.
+ $formatter = new NumberFormatter($numberFormat, NumberFormatter::CURRENCY);
+ $this->assertNull($formatter->getMaximumFractionDigits());
+ $formatter = new NumberFormatter($numberFormat, NumberFormatter::CURRENCY_ACCOUNTING);
+ $this->assertNull($formatter->getMaximumFractionDigits());
+ }
+
+ /**
+ * @covers ::isGroupingUsed
+ * @covers ::setGroupingUsed
+ * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::__construct
+ * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::format
+ * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::replaceDigits
+ * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::replaceSymbols
+ * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
+ */
+ public function testGroupingUsed()
+ {
+ $numberFormat = $this->createNumberFormat($this->numberFormats['latn']);
+
+ // The formatter groups correctly.
+ $formatter = new NumberFormatter($numberFormat, NumberFormatter::DECIMAL);
+ $this->assertTrue($formatter->isGroupingUsed());
+ $this->assertSame('10,000.9', $formatter->format('10000.90'));
+
+ // The formatter respects grouping turned off.
+ $formatter = new NumberFormatter($numberFormat, NumberFormatter::DECIMAL);
+ $formatter->setGroupingUsed(false);
+ $this->assertFalse($formatter->isGroupingUsed());
+ $this->assertSame('10000.9', $formatter->format('10000.90'));
+ }
+
+ /**
+ * @covers ::getCurrencyDisplay
+ * @covers ::setCurrencyDisplay
+ * @covers ::formatCurrency
+ * @uses \CommerceGuys\Intl\Currency\Currency
+ * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::__construct
+ * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::format
+ * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::replaceDigits
+ * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::replaceSymbols
+ * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
+ */
+ public function testCurrencyDisplay()
+ {
+ $numberFormat = $this->createNumberFormat($this->numberFormats['latn']);
+ $currency = $this->createCurrency($this->currencies['USD']);
+
+ // Currency display defaults to symbol.
+ $formatter = new NumberFormatter($numberFormat, NumberFormatter::CURRENCY);
+ $this->assertSame(NumberFormatter::CURRENCY_DISPLAY_SYMBOL, $formatter->getCurrencyDisplay());
+ $formattedNumber = $formatter->formatCurrency('100', $currency);
+ $this->assertSame('$100.00', $formattedNumber);
+
+ // Currency display respects setting the value to currency code.
+ $formatter = new NumberFormatter($numberFormat, NumberFormatter::CURRENCY);
+ $formatter->setCurrencyDisplay(NumberFormatter::CURRENCY_DISPLAY_CODE);
+ $this->assertSame(NumberFormatter::CURRENCY_DISPLAY_CODE, $formatter->getCurrencyDisplay());
+ $formattedNumber = $formatter->formatCurrency('100', $currency);
+ $this->assertSame('USD100.00', $formattedNumber);
+ }
+
+ /**
+ * Provides the number format, number style, value and expected formatted value.
+ */
+ public function numberValueProvider()
+ {
+ return array(
+ array($this->createNumberFormat($this->numberFormats['latn']), NumberFormatter::DECIMAL, '-50.5', '-50.5'),
+ array($this->createNumberFormat($this->numberFormats['latn']), NumberFormatter::PERCENT, '50.5', '50.5%'),
+ array($this->createNumberFormat($this->numberFormats['latn']), NumberFormatter::DECIMAL, '5000000.5', '5,000,000.5'),
+ array($this->createNumberFormat($this->numberFormats['beng'], 'bn'), NumberFormatter::DECIMAL, '-50.5', '-৫০.৫'),
+ array($this->createNumberFormat($this->numberFormats['beng'], 'bn'), NumberFormatter::PERCENT, '50.5', '৫০.৫%'),
+ array($this->createNumberFormat($this->numberFormats['beng'], 'bn'), NumberFormatter::DECIMAL, '5000000.5', '৫০,০০,০০০.৫')
+ );
+ }
+
+ /**
+ * Provides the number format, currency format, number style, value and expected formatted value.
+ */
+ public function currencyValueProvider()
+ {
+ return array(
+ array($this->createNumberFormat($this->numberFormats['latn']), $this->createCurrency($this->currencies['USD']), NumberFormatter::CURRENCY, '-5.05', '-$5.05'),
+ array($this->createNumberFormat($this->numberFormats['latn']), $this->createCurrency($this->currencies['USD']), NumberFormatter::CURRENCY_ACCOUNTING, '-5.05', '($5.05)'),
+ array($this->createNumberFormat($this->numberFormats['latn']), $this->createCurrency($this->currencies['USD']), NumberFormatter::CURRENCY, '500100.05', '$500,100.05'),
+ array($this->createNumberFormat($this->numberFormats['beng'], 'bn'), $this->createCurrency($this->currencies['BND'], 'bn'), NumberFormatter::CURRENCY, '-50.5', '-৫০.৫০BND'),
+ array($this->createNumberFormat($this->numberFormats['beng'], 'bn'), $this->createCurrency($this->currencies['BND'], 'bn'), NumberFormatter::CURRENCY_ACCOUNTING, '-50.5', '(৫০.৫০BND)'),
+ array($this->createNumberFormat($this->numberFormats['beng'], 'bn'), $this->createCurrency($this->currencies['BND'], 'bn'), NumberFormatter::CURRENCY, '500100.05', '৫,০০,১০০.০৫BND'),
+ );
+ }
+
+ /**
+ * Provides values for the formatted currency parser.
+ */
+ public function formattedCurrencyProvider()
+ {
+ return array(
+ array($this->createNumberFormat($this->numberFormats['latn']), $this->createCurrency($this->currencies['USD']), NumberFormatter::CURRENCY, '$500,100.05', '500100.05'),
+ array($this->createNumberFormat($this->numberFormats['latn']), $this->createCurrency($this->currencies['USD']), NumberFormatter::CURRENCY, '-$1,059.59', '-1059.59'),
+ array($this->createNumberFormat($this->numberFormats['latn']), $this->createCurrency($this->currencies['USD']), NumberFormatter::CURRENCY_ACCOUNTING, '($1,059.59)', '-1059.59'),
+ array($this->createNumberFormat($this->numberFormats['beng'], 'bn'), $this->createCurrency($this->currencies['BND'], 'bn'), NumberFormatter::CURRENCY, '৫,০০,১০০.০৫BND', '500100.05'),
+ );
+ }
+
+ /**
+ * Helper for initiating a new NumberFormat object.
+ */
+ protected function createNumberFormat(array $definition, $locale = 'en')
+ {
+ $default = array(
+ 'decimal_separator' => '.',
+ 'grouping_separator' => ',',
+ 'plus_sign' => '+',
+ 'minus_sign' => '-',
+ 'percent_sign' => '%'
+ );
+ $format = array_merge($default, $definition);
+
+ $numberFormat = new NumberFormat();
+ $numberFormat->setLocale($locale);
+ $numberFormat->setNumberingSystem($format['numbering_system']);
+ $numberFormat->setDecimalSeparator($format['decimal_separator']);
+ $numberFormat->setGroupingSeparator($format['grouping_separator']);
+ $numberFormat->setPlusSign($format['plus_sign']);
+ $numberFormat->setMinusSign($format['minus_sign']);
+ $numberFormat->setPercentSign($format['percent_sign']);
+ $numberFormat->setDecimalPattern($format['decimal_pattern']);
+ $numberFormat->setPercentPattern($format['percent_pattern']);
+ $numberFormat->setCurrencyPattern($format['currency_pattern']);
+ $numberFormat->setAccountingCurrencyPattern($format['accounting_currency_pattern']);
+
+ return $numberFormat;
+ }
+
+ /**
+ * Helper for initiating a new Currency object.
+ */
+ protected function createCurrency(array $definition, $locale = 'en')
+ {
+ $default = array(
+ 'fraction_digits' => 2
+ );
+ $format = array_merge($default, $definition);
+
+ $currency = new Currency();
+ $currency->setCurrencyCode($format['code']);
+ $currency->setName($format['name']);
+ $currency->setNumericCode($format['numeric_code']);
+ $currency->setFractionDigits($format['fraction_digits']);
+ $currency->setSymbol($format['symbol']);
+ $currency->setLocale($locale);
+
+ return $currency;
+ }
+}
diff --git a/library/intl/tests/Language/LanguageRepositoryTest.php b/library/intl/tests/Language/LanguageRepositoryTest.php
new file mode 100644
index 000000000..ea52cbf4c
--- /dev/null
+++ b/library/intl/tests/Language/LanguageRepositoryTest.php
@@ -0,0 +1,92 @@
+<?php
+
+namespace CommerceGuys\Intl\Tests\Language;
+
+use CommerceGuys\Intl\Language\LanguageRepository;
+use org\bovigo\vfs\vfsStream;
+
+/**
+ * @coversDefaultClass \CommerceGuys\Intl\Language\LanguageRepository
+ */
+class LanguageRepositoryTest extends \PHPUnit_Framework_TestCase
+{
+ /**
+ * English language definitions.
+ *
+ * @var array
+ */
+ protected $englishDefinitions = array(
+ 'en' => array(
+ 'code' => 'en',
+ 'name' => 'English',
+ ),
+ 'fr' => array(
+ 'code' => 'fr',
+ 'name' => 'French',
+ ),
+ );
+
+ /**
+ * @covers ::__construct
+ */
+ public function testConstructor()
+ {
+ // Mock the existence of JSON definitions on the filesystem.
+ $root = vfsStream::setup('resources');
+ vfsStream::newFile('language/en.json')->at($root)->setContent(json_encode($this->englishDefinitions));
+
+ // Instantiate the language repository and confirm that the definition path
+ // was properly set.
+ $languageRepository = new LanguageRepository('vfs://resources/language/');
+ $definitionPath = $this->getObjectAttribute($languageRepository, 'definitionPath');
+ $this->assertEquals('vfs://resources/language/', $definitionPath);
+
+ return $languageRepository;
+ }
+
+ /**
+ * @covers ::get
+ * @covers ::loadDefinitions
+ * @covers ::createLanguageFromDefinition
+ * @uses \CommerceGuys\Intl\Language\Language
+ * @uses \CommerceGuys\Intl\LocaleResolverTrait
+ * @depends testConstructor
+ */
+ public function testGet($languageRepository)
+ {
+ $language = $languageRepository->get('en');
+ $this->assertInstanceOf('CommerceGuys\\Intl\\Language\\Language', $language);
+ $this->assertEquals('en', $language->getLanguageCode());
+ $this->assertEquals('English', $language->getName());
+ $this->assertEquals('en', $language->getLocale());
+ }
+
+ /**
+ * @covers ::get
+ * @covers ::loadDefinitions
+ * @uses \CommerceGuys\Intl\LocaleResolverTrait
+ * @expectedException \CommerceGuys\Intl\Exception\UnknownLanguageException
+ * @depends testConstructor
+ */
+ public function testGetInvalidLanguage($languageRepository)
+ {
+ $languageRepository->get('de');
+ }
+
+ /**
+ * @covers ::getAll
+ * @covers ::loadDefinitions
+ * @covers ::createLanguageFromDefinition
+ * @uses \CommerceGuys\Intl\Language\Language
+ * @uses \CommerceGuys\Intl\LocaleResolverTrait
+ * @depends testConstructor
+ */
+ public function testGetAll($languageRepository)
+ {
+ $languages = $languageRepository->getAll();
+ $this->assertArrayHasKey('en', $languages);
+ $this->assertArrayHasKey('fr', $languages);
+ $this->assertEquals('en', $languages['en']->getLanguageCode());
+ $this->assertEquals('fr', $languages['fr']->getLanguageCode());
+ }
+}
diff --git a/library/intl/tests/Language/LanguageTest.php b/library/intl/tests/Language/LanguageTest.php
new file mode 100644
index 000000000..037483c88
--- /dev/null
+++ b/library/intl/tests/Language/LanguageTest.php
@@ -0,0 +1,53 @@
+<?php
+
+namespace CommerceGuys\Intl\Tests\Language;
+
+use CommerceGuys\Intl\Language\Language;
+
+/**
+ * @coversDefaultClass \CommerceGuys\Intl\Language\Language
+ */
+class LanguageTest extends \PHPUnit_Framework_TestCase
+{
+ /**
+ * @var Language
+ */
+ protected $language;
+
+ public function setUp()
+ {
+ $this->language = new Language();
+ }
+
+ /**
+ * @covers ::getLanguageCode
+ * @covers ::setLanguageCode
+ * @covers ::__toString
+ */
+ public function testLanguageCode()
+ {
+ $this->language->setLanguageCode('en');
+ $this->assertEquals('en', $this->language->getLanguageCode());
+ $this->assertEquals('en', (string) $this->language);
+ }
+
+ /**
+ * @covers ::getName
+ * @covers ::setName
+ */
+ public function testName()
+ {
+ $this->language->setName('English');
+ $this->assertEquals('English', $this->language->getName());
+ }
+
+ /**
+ * @covers ::getLocale
+ * @covers ::setLocale
+ */
+ public function testLocale()
+ {
+ $this->language->setLocale('en');
+ $this->assertEquals('en', $this->language->getLocale());
+ }
+}
diff --git a/library/intl/tests/LocaleResolverTest.php b/library/intl/tests/LocaleResolverTest.php
new file mode 100644
index 000000000..a52dea353
--- /dev/null
+++ b/library/intl/tests/LocaleResolverTest.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace CommerceGuys\Intl\Tests;
+
+use org\bovigo\vfs\vfsStream;
+
+/**
+ * @coversDefaultClass \CommerceGuys\Intl\LocaleResolverTrait
+ */
+class LocaleResolverTest extends \PHPUnit_Framework_TestCase
+{
+ /**
+ * @var DummyRepository
+ */
+ protected $repository;
+
+ public function setUp()
+ {
+ // Simulate the presence of various definitions.
+ $root = vfsStream::setup('resources');
+ vfsStream::newFile('dummy/bs-Cyrl.json')->at($root)->setContent('');
+ vfsStream::newFile('dummy/bs.json')->at($root)->setContent('');
+ vfsStream::newFile('dummy/en.json')->at($root)->setContent('');
+
+ $this->repository = new DummyRepository();
+ }
+
+ /**
+ * @covers ::resolveLocale
+ * @covers ::getLocaleVariants
+ */
+ public function testLocaleFallback()
+ {
+ $locale = $this->repository->runResolveLocale('bs-Cyrl-BA');
+ $this->assertEquals('bs-Cyrl', $locale);
+ $locale = $this->repository->runResolveLocale('bs-Latn-BA');
+ $this->assertEquals('bs', $locale);
+ $locale = $this->repository->runResolveLocale('de', 'en');
+ $this->assertEquals('en', $locale);
+ }
+
+ /**
+ * @covers ::resolveLocale
+ * @covers ::getLocaleVariants
+ * @expectedException \CommerceGuys\Intl\Exception\UnknownLocaleException
+ */
+ public function testInvalidLocale()
+ {
+ $locale = $this->repository->runResolveLocale('de');
+ }
+}
diff --git a/library/intl/tests/NumberFormat/NumberFormatRepositoryTest.php b/library/intl/tests/NumberFormat/NumberFormatRepositoryTest.php
new file mode 100644
index 000000000..41e45805d
--- /dev/null
+++ b/library/intl/tests/NumberFormat/NumberFormatRepositoryTest.php
@@ -0,0 +1,69 @@
+<?php
+
+namespace CommerceGuys\Intl\Tests\NumberFormat;
+
+use CommerceGuys\Intl\NumberFormat\NumberFormatRepository;
+use org\bovigo\vfs\vfsStream;
+
+/**
+ * @coversDefaultClass \CommerceGuys\Intl\NumberFormat\NumberFormatRepository
+ */
+class NumberFormatRepositoryTest extends \PHPUnit_Framework_TestCase
+{
+ /**
+ * English number format definition.
+ *
+ * @var array
+ */
+ protected $englishDefinition = array(
+ 'numbering_system' => 'latn',
+ 'decimal_pattern' => '#,##0.###',
+ 'percent_pattern' => '#,##0%',
+ 'currency_pattern' => '¤#,##0.00',
+ 'accounting_currency_pattern' => '¤#,##0.00;(¤#,##0.00)',
+ );
+
+ /**
+ * @covers ::__construct
+ */
+ public function testConstructor()
+ {
+ // Mock the existence of JSON definitions on the filesystem.
+ $root = vfsStream::setup('resources');
+ vfsStream::newFile('number_format/en.json')->at($root)->setContent(json_encode($this->englishDefinition));
+
+ // Instantiate the number format repository and confirm that the definition
+ // path was properly set.
+ $numberFormatRepository = new NumberFormatRepository('vfs://resources/number_format/');
+ $definitionPath = $this->getObjectAttribute($numberFormatRepository, 'definitionPath');
+ $this->assertEquals('vfs://resources/number_format/', $definitionPath);
+
+ return $numberFormatRepository;
+ }
+
+ /**
+ * @covers ::get
+ * @covers ::createNumberFormatFromDefinition
+ * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
+ * @uses \CommerceGuys\Intl\LocaleResolverTrait
+ * @depends testConstructor
+ */
+ public function testGet($numberFormatRepository)
+ {
+ $numberFormat = $numberFormatRepository->get('en');
+ $this->assertInstanceOf('CommerceGuys\\Intl\\NumberFormat\\NumberFormat', $numberFormat);
+ $this->assertEquals('en', $numberFormat->getLocale());
+ $this->assertEquals('latn', $numberFormat->getNumberingSystem());
+ $this->assertEquals('.', $numberFormat->getDecimalSeparator());
+ $this->assertEquals(',', $numberFormat->getGroupingSeparator());
+ $this->assertEquals('+', $numberFormat->getPlusSign());
+ $this->assertEquals('-', $numberFormat->getMinusSign());
+ $this->assertEquals('%', $numberFormat->getPercentSign());
+ $this->assertEquals('#,##0.###', $numberFormat->getDecimalPattern());
+ $this->assertEquals('#,##0%', $numberFormat->getPercentPattern());
+ $this->assertEquals('¤#,##0.00', $numberFormat->getCurrencyPattern());
+ $this->assertEquals('¤#,##0.00;(¤#,##0.00)', $numberFormat->getAccountingCurrencyPattern());
+
+ return $numberFormat;
+ }
+}
diff --git a/library/intl/tests/NumberFormat/NumberFormatTest.php b/library/intl/tests/NumberFormat/NumberFormatTest.php
new file mode 100644
index 000000000..299dc41cb
--- /dev/null
+++ b/library/intl/tests/NumberFormat/NumberFormatTest.php
@@ -0,0 +1,131 @@
+<?php
+
+namespace CommerceGuys\Intl\Tests\NumberFormat;
+
+use CommerceGuys\Intl\NumberFormat\NumberFormat;
+
+/**
+ * @coversDefaultClass CommerceGuys\Intl\NumberFormat\NumberFormat
+ */
+class NumberFormatTest extends \PHPUnit_Framework_TestCase
+{
+ /**
+ * @var NumberFormat
+ */
+ protected $numberFormat;
+
+ public function setUp()
+ {
+ $this->numberFormat = new NumberFormat();
+ }
+
+ /**
+ * @covers ::getLocale
+ * @covers ::setLocale
+ */
+ public function testLocale()
+ {
+ $this->numberFormat->setLocale('en');
+ $this->assertEquals('en', $this->numberFormat->getLocale());
+ }
+
+ /**
+ * @covers ::getNumberingSystem
+ * @covers ::setNumberingSystem
+ */
+ public function testNumberingSystem()
+ {
+ $this->numberFormat->setNumberingSystem('latn');
+ $this->assertEquals('latn', $this->numberFormat->getNumberingSystem());
+ }
+
+ /**
+ * @covers ::getDecimalSeparator
+ * @covers ::setDecimalSeparator
+ */
+ public function testDecimalSeparator()
+ {
+ $this->numberFormat->setDecimalSeparator('.');
+ $this->assertEquals('.', $this->numberFormat->getDecimalSeparator());
+ }
+
+ /**
+ * @covers ::getGroupingSeparator
+ * @covers ::setGroupingSeparator
+ */
+ public function testGroupingSeparator()
+ {
+ $this->numberFormat->setGroupingSeparator(',');
+ $this->assertEquals(',', $this->numberFormat->getGroupingSeparator());
+ }
+
+ /**
+ * @covers ::getPlusSign
+ * @covers ::setPlusSign
+ */
+ public function testPlusSign()
+ {
+ $this->numberFormat->setPlusSign('+');
+ $this->assertEquals('+', $this->numberFormat->getPlusSign());
+ }
+
+ /**
+ * @covers ::getMinusSign
+ * @covers ::setMinusSign
+ */
+ public function testMinusSign()
+ {
+ $this->numberFormat->setMinusSign('-');
+ $this->assertEquals('-', $this->numberFormat->getMinusSign());
+ }
+
+ /**
+ * @covers ::getPercentSign
+ * @covers ::setPercentSign
+ */
+ public function testPercentSign()
+ {
+ $this->numberFormat->setPercentSign('%');
+ $this->assertEquals('%', $this->numberFormat->getPercentSign());
+ }
+
+ /**
+ * @covers ::getDecimalPattern
+ * @covers ::setDecimalPattern
+ */
+ public function testDecimalPattern()
+ {
+ $this->numberFormat->setDecimalPattern('#,##0.###');
+ $this->assertEquals('#,##0.###', $this->numberFormat->getDecimalPattern());
+ }
+
+ /**
+ * @covers ::getPercentPattern
+ * @covers ::setPercentPattern
+ */
+ public function testPercentPattern()
+ {
+ $this->numberFormat->setPercentPattern('#,##0%');
+ $this->assertEquals('#,##0%', $this->numberFormat->getPercentPattern());
+ }
+
+ /**
+ * @covers ::getCurrencyPattern
+ * @covers ::setCurrencyPattern
+ */
+ public function testCurrencyPattern()
+ {
+ $this->numberFormat->setCurrencyPattern('¤#,##0.00');
+ $this->assertEquals('¤#,##0.00', $this->numberFormat->getCurrencyPattern());
+ }
+
+ /**
+ * @covers ::getAccountingCurrencyPattern
+ * @covers ::setAccountingCurrencyPattern
+ */
+ public function testAccountingCurrencyPattern()
+ {
+ $this->numberFormat->setAccountingCurrencyPattern('¤#,##0.00;(¤#,##0.00)');
+ $this->assertEquals('¤#,##0.00;(¤#,##0.00)', $this->numberFormat->getAccountingCurrencyPattern());
+ }
+}
diff --git a/library/intl/vendor/autoload.php b/library/intl/vendor/autoload.php
new file mode 100644
index 000000000..a46461eae
--- /dev/null
+++ b/library/intl/vendor/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer' . '/autoload_real.php';
+
+return ComposerAutoloaderInitdf7950dd7e2ab03f0683ccb1c2da0307::getLoader();
diff --git a/library/intl/vendor/composer/ClassLoader.php b/library/intl/vendor/composer/ClassLoader.php
new file mode 100644
index 000000000..70d78bc3f
--- /dev/null
+++ b/library/intl/vendor/composer/ClassLoader.php
@@ -0,0 +1,387 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0 class loader
+ *
+ * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-0 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
+ if ('\\' == $class[0]) {
+ $class = substr($class, 1);
+ }
+
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if ($file === null && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if ($file === null) {
+ // Remember that this class does not exist.
+ return $this->classMap[$class] = false;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/library/intl/vendor/composer/autoload_classmap.php b/library/intl/vendor/composer/autoload_classmap.php
new file mode 100644
index 000000000..7a91153b0
--- /dev/null
+++ b/library/intl/vendor/composer/autoload_classmap.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+);
diff --git a/library/intl/vendor/composer/autoload_namespaces.php b/library/intl/vendor/composer/autoload_namespaces.php
new file mode 100644
index 000000000..b7fc0125d
--- /dev/null
+++ b/library/intl/vendor/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+);
diff --git a/library/intl/vendor/composer/autoload_psr4.php b/library/intl/vendor/composer/autoload_psr4.php
new file mode 100644
index 000000000..a5a08e6c5
--- /dev/null
+++ b/library/intl/vendor/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+ 'CommerceGuys\\Intl\\' => array($baseDir . '/src'),
+);
diff --git a/library/intl/vendor/composer/autoload_real.php b/library/intl/vendor/composer/autoload_real.php
new file mode 100644
index 000000000..059a57bb5
--- /dev/null
+++ b/library/intl/vendor/composer/autoload_real.php
@@ -0,0 +1,50 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitdf7950dd7e2ab03f0683ccb1c2da0307
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitdf7950dd7e2ab03f0683ccb1c2da0307', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitdf7950dd7e2ab03f0683ccb1c2da0307', 'loadClassLoader'));
+
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
+
+function composerRequiredf7950dd7e2ab03f0683ccb1c2da0307($file)
+{
+ require $file;
+}
diff --git a/library/jRange/.gitignore b/library/jRange/.gitignore
new file mode 100644
index 000000000..089ae868a
--- /dev/null
+++ b/library/jRange/.gitignore
@@ -0,0 +1,2 @@
+
+*.codekit
diff --git a/library/jslider/MIT-LICENSE.txt b/library/jRange/LICENSE
index b193a88a9..8f47b9a63 100644
--- a/library/jslider/MIT-LICENSE.txt
+++ b/library/jRange/LICENSE
@@ -1,5 +1,6 @@
The MIT License (MIT)
-Copyright (c) 2012 Egor Khmelev
+
+Copyright (c) 2014 Nitin Hayaran
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/library/jRange/README.md b/library/jRange/README.md
new file mode 100644
index 000000000..5cbfe6aa8
--- /dev/null
+++ b/library/jRange/README.md
@@ -0,0 +1,5 @@
+## jQuery plugin to create Range Selector
+
+![jRange Preview](http://i.imgur.com/da8uZwx.png)
+
+[Demo and Documentation](http://nitinhayaran.github.io/jRange/demo/) \ No newline at end of file
diff --git a/library/jRange/demo/index.html b/library/jRange/demo/index.html
new file mode 100644
index 000000000..ac443f11f
--- /dev/null
+++ b/library/jRange/demo/index.html
@@ -0,0 +1,245 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <title>jRange : jQuery Range Selector</title>
+ <link rel="stylesheet" href="normalize.css">
+ <link rel="stylesheet" href="main.css">
+ <link rel="stylesheet" href="prism/prism.css">
+ <link rel="stylesheet" href="../jquery.range.css">
+ <link href='http://fonts.googleapis.com/css?family=Raleway:100,300' rel='stylesheet' type='text/css'>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
+</head>
+<body>
+ <section class="pane header">
+ <div class="header">
+ <h1>jRange</h1>
+ <h2>jQuery Plugin to create Range Selector</h2>
+ </div>
+ <footer>
+ <div class="left">
+ <a href="http://twitter.com/share" class="twitter-share-button" data-url="https://github.com/nitinhayaran/jRange" data-text="jRange - jQuery plugin for Range Selector" data-count="none" data-via="nitinhayaran">Tweet</a>
+ <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
+ <iframe src="http://ghbtns.com/github-btn.html?user=nitinhayaran&amp;repo=jRange&amp;type=watch&amp;count=false&amp;size=small"
+ allowtransparency="true" frameborder="0" scrolling="0" width="62" height="20"></iframe>
+ </div>
+ <div class="right">
+ <a href="https://twitter.com/nitinhayaran" class="twitter-follow-button" data-show-count="false">Follow @nitinhayaran</a>
+ <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
+ <iframe src="http://ghbtns.com/github-btn.html?user=nitinhayaran&amp;type=follow&amp;count=true" allowtransparency="true" frameborder="0" scrolling="0" width="153" height="20"></iframe>
+ </div>
+ </footer>
+ </section>
+ <section class="body demo">
+ <div class="container">
+ <h2>See it in Action</h2>
+ <h3>Play around with the demo</h3>
+ <div class="demo-container clearfix">
+ <div class="demo-section">
+ <div class="demo-code">
+ <pre><code class="language-javascript">$('.single-slider').jRange({
+ from: 0,
+ to: 100,
+ step: 1,
+ scale: [0,50,100],
+ format: '%s',
+ width: 300,
+ showLabels: true
+});</code></pre>
+ </div>
+ <div class="demo-output">
+ <input class="single-slider" type="hidden" value="25"/>
+ </div>
+ </div>
+ <div class="demo-section">
+ <div class="demo-code">
+ <pre><code class="language-javascript">$('.range-slider').jRange({
+ from: 0,
+ to: 100,
+ step: 1,
+ scale: [0,25,50,75,100],
+ format: '%s',
+ width: 300,
+ showLabels: true,
+ isRange : true
+});</code></pre>
+ </div>
+ <div class="demo-output">
+ <input class="range-slider" type="hidden" value="25,75"/>
+ </div>
+ </div>
+
+
+ </div>
+ <div class="text-container">
+ <h2>How to Use</h2>
+ <h3>Lets see some code</h3>
+ <p>To get started you'll have to include <code>jquery.range.js</code> and <code>jquery.range.css</code> files in your html file.</p>
+ <pre><code class="language-css">&lt;link rel="stylesheet" href="jquery.range.css"&gt;
+&lt;script src="jquery.range.js"&gt;&lt;/script&gt;</code></pre>
+ <p>Later just add an hidden input, where ever you want this slider to be shown.</p>
+ <pre><code class="language-css">&lt;input type="hidden" class="slider-input" value="23" /&gt;</code></pre>
+ <p>After this you'll have to intialize this plugin for that input, as shown in the example above</p>
+
+ <h2>Options</h2>
+ <h3>See configuration options</h3>
+ <p>Options can also be set programatically, by passing an options hash to the jRange method.
+ <table class="plugin-options" width='900'>
+ <tr>
+ <th>Option</th>
+ <th width="200">Override</th>
+ <th>Type</th>
+ <th>Details</th>
+ </tr>
+ <tr>
+ <td>from</td>
+ <td>Mandatory</td>
+ <td>Integer</td>
+ <td>Lower bound of slider</td>
+ </tr>
+ <tr>
+ <td>to</td>
+ <td>Mandatory</td>
+ <td>Integer</td>
+ <td>Upper bound of slider</td>
+ </tr>
+ <tr>
+ <td>step</td>
+ <td>Optional</td>
+ <td>Integer</td>
+ <td>
+ <code>Default : 1</code>
+ <p>amount of increment on each step</p>
+ </td>
+ </tr>
+ <tr>
+ <td>scale</td>
+ <td>Optional</td>
+ <td>Array</td>
+ <td>
+ <p>Array containing label which are shown below the slider. By default its [from, to].</p>
+ </td>
+ </tr>
+ <tr>
+ <td>showLabels</td>
+ <td>Optional</td>
+ <td>Boolean</td>
+ <td>
+ <p>False, if you'd like to hide label which are shown on top of slider.</p>
+ <code>Default : true</code>
+ </td>
+ </tr>
+ <tr>
+ <td>showScale</td>
+ <td>Optional</td>
+ <td>Boolean</td>
+ <td>
+ <p>False, if you'd like to hide scale which are shown below the slider.</p>
+ <code>Default : true</code>
+ </td>
+ </tr>
+ <tr>
+ <td>format</td>
+ <td>Optional</td>
+ <td>String / Function</td>
+ <td>
+ <p>this is used to show label on the pointer</p>
+ <code>Default : "%s"</code>
+ <p><code>String</code> : %s is replaced by its value, e.g., "%s days", "%s goats"</p>
+ <p>
+ <code>Function</code> : format(value, pointer)
+ <br>
+ <code>return</code> : string label for a given value and pointer. <br>
+ <code>pointer</code> could be 'low'/'high' if <code>isRange</code> is true, else undefined
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>width</td>
+ <td>Optional</td>
+ <td>Integer</td>
+ <td>
+ <code>Default : 300</code>
+ </td>
+ </tr>
+ <tr>
+ <td>theme</td>
+ <td>Optional</td>
+ <td>String</td>
+ <td>
+ <code>Default : "theme-green"</code>
+ <p>This is the css class name added to the container. Available themes are "theme-blue", "theme-green". You can also add more themes, just like in <code>jquery.range.less</code></p>
+ </td>
+ </tr>
+ <tr>
+ <td>isRange</td>
+ <td>Optional</td>
+ <td>Boolean</td>
+ <td>
+ <code>Default : false</code>
+ <p>True if this is a range selector. If its a range the value of hidden input will be set comma-seperated, e.g., "25,75"</p>
+ </td>
+ </tr>
+ <tr>
+ <td>onstatechange</td>
+ <td>Optional</td>
+ <td>Function</td>
+ <td>
+ <p>This function is called whenever the value is changed by user. This same value is also automatically set for the provided Hidden Input.</p>
+ <p>For single slider value is without comma, however for a range selector value is comma-seperated.</p>
+ </td>
+ </tr>
+ </table>
+
+ <div class="footer">
+ <a href="https://github.com/nitinhayaran/jRange" class="large-github">Get it from Github</a>
+ </div>
+ </div>
+ </div>
+ </section>
+ <section class="footer">
+ <div class="text-container clearfix">
+ <div class="left">
+ <p>
+ <a href="https://twitter.com/nitinhayaran" class="twitter-follow-button" data-show-count="false">Follow @nitinhayaran</a>
+ <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
+ </p>
+ <p><iframe src="http://ghbtns.com/github-btn.html?user=nitinhayaran&amp;type=follow&amp;count=true" allowtransparency="true" frameborder="0" scrolling="0" width="153" height="20"></iframe></p>
+ </div>
+ <div class="right">
+ <p><a href="https://github.com/nitinhayaran/jRange">jRange</a> is authored and maintained by <a href="https://github.com/nitinhayaran/">@nitinhayaran</a></p>
+ <p>
+ Released under the <a href="http://www.opensource.org/licenses/mit-license.php">MIT
+ License</a>
+ </p>
+ </div>
+ </div>
+ </section>
+ <script src="prism/prism.js"></script>
+
+ <script src="../jquery.range.js"></script>
+ <script type="text/javascript">
+ $(document).ready(function(){
+ $('.single-slider').jRange({
+ from: 0,
+ to: 100,
+ step: 1,
+ scale: [0,25,50,75,100],
+ format: '%s',
+ width: 300,
+ showLabels: true
+ });
+ $('.range-slider').jRange({
+ from: 0,
+ to: 100,
+ step: 1,
+ scale: [0,25,50,75,100],
+ format: '%s',
+ width: 300,
+ showLabels: true,
+ isRange : true
+ });
+ });
+ </script>
+</body>
+</html> \ No newline at end of file
diff --git a/library/jRange/demo/main.css b/library/jRange/demo/main.css
new file mode 100644
index 000000000..1e29a98af
--- /dev/null
+++ b/library/jRange/demo/main.css
@@ -0,0 +1,289 @@
+html,
+body {
+ height: 100%;
+ width: 100%;
+}
+body {
+ font-family: Helvetica Neue, Helvetica, Arial sans-serif;
+ font-size: 16px;
+ line-height: 1.6;
+ color: #434343;
+}
+a {
+ text-decoration: none;
+}
+pre code {
+ line-height: 1.5;
+}
+.container {
+ width: 1130px;
+ padding: 0 20px;
+ margin: 0px auto;
+}
+.text-container {
+ width: 900px;
+ position: relative;
+ margin: 0px auto;
+}
+.clearfix:after {
+ content: " ";
+ /* Older browser do not support empty content */
+ visibility: hidden;
+ display: block;
+ height: 0;
+ clear: both;
+}
+.pane {
+ position: relative;
+ width: 100%;
+ height: 50%;
+ min-height: 450px;
+}
+.body {
+ position: relative;
+}
+section.header {
+ background-color: #606c88;
+ background: -webkit-linear-gradient(90deg, #606c88 10%, #3f4c6b 90%);
+ /* Chrome 10+, Saf5.1+ */
+ background: -moz-linear-gradient(90deg, #606c88 10%, #3f4c6b 90%);
+ /* FF3.6+ */
+ background: -ms-linear-gradient(90deg, #606c88 10%, #3f4c6b 90%);
+ /* IE10 */
+ background: -o-linear-gradient(90deg, #606c88 10%, #3f4c6b 90%);
+ /* Opera 11.10+ */
+ background: linear-gradient(90deg, #606c88 10%, #3f4c6b 90%);
+ /* W3C */
+}
+section.header footer {
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ padding: 10px 30px;
+ box-sizing: border-box;
+}
+.left {
+ float: left;
+ text-align: left;
+}
+.right {
+ float: right;
+ text-align: right;
+}
+div.header {
+ color: #fff;
+ width: 600px;
+ text-align: center;
+ position: absolute;
+ top: 40%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ border-radius: 5px;
+}
+div.header h1,
+div.header h2 {
+ font-family: 'Raleway' sans-serif;
+ font-weight: 100;
+ line-height: 1;
+ margin: 0;
+}
+div.header h1 {
+ font-size: 72px;
+ margin-bottom: 25px;
+}
+section.demo h2,
+section.demo h3 {
+ font-family: 'Raleway' sans-serif;
+ font-weight: 300;
+ line-height: 1;
+ margin: 0;
+ text-align: center;
+}
+section.demo h2 {
+ font-size: 48px;
+ margin-top: 1em;
+}
+section.demo h3 {
+ font-size: 28px;
+ margin: 0.8em 0 1em;
+}
+section.demo .demo-container {
+ margin: 40px 0 80px;
+}
+section.demo .demo-section {
+ margin: 20px 0;
+ clear: both;
+}
+section.demo .demo-section .demo-code {
+ width: 50%;
+ float: left;
+}
+section.demo .demo-section .demo-output {
+ margin-left: 50%;
+ padding: 50px 0;
+}
+section.demo .demo-section .slider-container {
+ margin: 0 auto;
+}
+section.demo .text-container h2 {
+ margin-top: 3em;
+}
+section.demo .form-vertical {
+ width: 200px;
+ float: left;
+}
+section.demo .image-container {
+ margin-left: 200px;
+ padding: 1px;
+ border: 1px solid #eee;
+}
+section.demo .form-group {
+ margin-bottom: 20px;
+}
+section.demo label {
+ color: #999;
+ font-size: 13px;
+ display: block;
+}
+section.demo input {
+ width: 150px;
+ margin-top: 3px;
+ border: 1px solid #999;
+ border-width: 0 0 1px 0;
+ padding: 3px 0 3px;
+ transition: 0.3s all;
+}
+section.demo input:focus,
+section.demo input:active {
+ outline: none;
+ border-color: #2fc7ff;
+ box-shadow: 0 1px 3px -3px #2fc7ff;
+ color: #000;
+}
+section.demo button {
+ position: relative;
+ overflow: visible;
+ display: inline-block;
+ padding: 0.3em 1em;
+ border: 1px solid #d4d4d4;
+ margin: 0;
+ text-decoration: none;
+ text-align: center;
+ text-shadow: 1px 1px 0 #fff;
+ font-size: 12px;
+ color: #333;
+ white-space: nowrap;
+ cursor: pointer;
+ outline: none;
+ background-color: #ececec;
+ background-image: linear-gradient(#f4f4f4, #ececec);
+ background-clip: padding-box;
+ border-radius: 0.2em;
+ zoom: 1;
+ transition: background-image 0.3s;
+}
+section.demo button:hover,
+section.demo button:active {
+ border-color: #3072b3;
+ border-bottom-color: #2a65a0;
+ text-decoration: none;
+ text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3);
+ color: #fff;
+ background-color: #3c8dde;
+ background-image: linear-gradient(#599bdc, #3072b3);
+}
+section.demo p {
+ font-family: 'Raleway' sans-serif;
+ margin: 1em auto;
+}
+section.demo .footer {
+ margin-top: 80px;
+ text-align: center;
+}
+section.demo .large-github {
+ display: inline-block;
+ border: 1px solid #21b0ff;
+ font-weight: 400;
+ font-family: 'Raleway' sans-serif;
+ text-shadow: none;
+ background-color: #fff;
+ background-image: none;
+ padding: 8px 25px;
+ color: #21b0ff;
+ font-size: 18px;
+ border-radius: 25px;
+}
+section.demo .large-github:hover,
+section.demo .large-github:active {
+ background-color: #21b0ff;
+ color: #fff;
+ background-image: none;
+ text-shadow: none;
+}
+.two-coloumn em {
+ font-weight: normal;
+ text-decoration: none;
+ font-style: normal;
+ display: inline-block;
+ width: 85px;
+}
+.plugin-options {
+ font-size: 14px;
+ margin-bottom: 40px;
+ width: 900px;
+ font-weight: 200;
+}
+.plugin-options td,
+.plugin-options th {
+ padding: 8px ;
+ text-align: left;
+ vertical-align: top;
+}
+.plugin-options td:first-child,
+.plugin-options th:first-child {
+ font-weight: bold;
+}
+.plugin-options td:nth-child(2),
+.plugin-options td:nth-child(3) {
+ font-size: 13px;
+ color: #999;
+}
+.plugin-options td p {
+ font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
+ margin: 4px 0;
+}
+.plugin-options td p:first-child {
+ margin-top: 0;
+}
+.plugin-options th {
+ background-color: #358ccb;
+ color: #fff;
+}
+.plugin-options tr:nth-child(2n + 1) td {
+ background-color: #f5f5f5;
+}
+.plugin-options small {
+ display: block;
+}
+.plugin-options ul {
+ list-style: none;
+ padding: 0;
+}
+.plugin-options ul ul {
+ list-style: circle inside;
+}
+section.footer {
+ margin-top: 80px;
+ padding: 30px;
+ text-align: center;
+ background-color: #333;
+ color: #999;
+ font-weight: 300;
+ font-size: 13px;
+}
+section.footer p {
+ margin: 5px 0;
+}
+section.footer a {
+ color: #fff;
+}
diff --git a/library/jRange/demo/main.less b/library/jRange/demo/main.less
new file mode 100644
index 000000000..e9ee232a1
--- /dev/null
+++ b/library/jRange/demo/main.less
@@ -0,0 +1,296 @@
+@font-family: 'Raleway' sans-serif;
+html, body{
+ height: 100%;
+ width: 100%;
+}
+body{
+ font-family: Helvetica Neue, Helvetica, Arial sans-serif;
+ font-size: 16px;
+ line-height: 1.6;
+ color: #434343;
+}
+a{
+ text-decoration: none;
+}
+pre code{
+ line-height: 1.5;
+}
+.container{
+ width: 1130px;
+ padding: 0 20px;
+ margin: 0px auto;
+}
+.text-container{
+ width: 900px;
+ position: relative;
+ margin: 0px auto;
+}
+.clearfix:after {
+ content: " "; /* Older browser do not support empty content */
+ visibility: hidden;
+ display: block;
+ height: 0;
+ clear: both;
+}
+.pane{
+ position: relative;
+ width: 100%;
+ height: 50%;
+ min-height: 450px;
+}
+.body{
+ position: relative;
+}
+section.header{
+ background-color: #606c88;
+
+ background: -webkit-linear-gradient(90deg, #606c88 10%, #3f4c6b 90%); /* Chrome 10+, Saf5.1+ */
+ background: -moz-linear-gradient(90deg, #606c88 10%, #3f4c6b 90%); /* FF3.6+ */
+ background: -ms-linear-gradient(90deg, #606c88 10%, #3f4c6b 90%); /* IE10 */
+ background: -o-linear-gradient(90deg, #606c88 10%, #3f4c6b 90%); /* Opera 11.10+ */
+ background: linear-gradient(90deg, #606c88 10%, #3f4c6b 90%); /* W3C */
+
+ // background-image: radial-gradient(50% 102%, #3cb3db 48%, #2e6c9a 100%);
+ footer{
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ padding: 10px 30px;
+ box-sizing: border-box;
+ }
+}
+.left{
+ float: left;
+ text-align: left;
+}
+.right{
+ float: right;
+ text-align: right;
+}
+div.header{
+ color: #fff;
+ width: 600px;
+ text-align: center;
+ position: absolute;
+ top: 40%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ // background-color: #333;
+ border-radius: 5px;
+ h1, h2{
+ font-family: @font-family;
+ font-weight: 100;
+ line-height: 1;
+ margin: 0;
+ }
+ h1{
+ font-size: 72px;
+ margin-bottom: 25px;
+ }
+}
+section.demo{
+ h2, h3{
+ font-family: @font-family;
+ font-weight: 300;
+ line-height: 1;
+ margin: 0;
+ text-align: center;
+ }
+ h2{
+ font-size: 48px;
+ margin-top: 1em;
+ }
+ h3{
+ font-size: 28px;
+ margin: 0.8em 0 1em;
+ }
+ .demo-container{
+ margin: 40px 0 80px;
+ }
+ .demo-section{
+ margin: 20px 0;
+ clear: both;
+ .demo-code{
+ width: 50%;
+ float: left;
+ }
+ .demo-output{
+ margin-left: 50%;
+ padding: 50px 0;
+ }
+ .slider-container{
+ margin: 0 auto;
+ }
+ }
+ .text-container{
+ h2{
+ margin-top: 3em;
+ }
+ }
+ .form-vertical{
+ width: 200px;
+ float: left;
+ }
+ .image-container{
+ margin-left: 200px;
+ padding: 1px;
+ border: 1px solid #eee;
+ // background-color: #333;
+ }
+ .form-group{
+ margin-bottom: 20px;
+ }
+ label{
+ color: #999;
+ font-size: 13px;
+ display: block;
+ }
+ input{
+ width: 150px;
+ margin-top: 3px;
+ // border-radius: 2px;
+ border: 1px solid #999;
+ border-width: 0 0 1px 0;
+ padding: 3px 0 3px;
+ transition: 0.3s all;
+ // color: #999;
+ &:focus, &:active{
+ outline: none;
+ border-color: #2fc7ff;
+ box-shadow: 0 1px 3px -3px #2fc7ff;
+ color: #000;
+ }
+ }
+ button{
+ position: relative;
+ overflow: visible;
+ display: inline-block;
+ padding: 0.3em 1em;
+ border: 1px solid #d4d4d4;
+ margin: 0;
+ text-decoration: none;
+ text-align: center;
+ text-shadow: 1px 1px 0 #fff;
+ font-size: 12px;
+ color: #333;
+ white-space: nowrap;
+ cursor: pointer;
+ outline: none;
+ background-color: #ececec;
+ background-image: linear-gradient(#f4f4f4, #ececec);
+ background-clip: padding-box;
+ border-radius: 0.2em;
+ zoom: 1;
+ transition: background-image 0.3s;
+ &:hover, &:active{
+ border-color: #3072b3;
+ border-bottom-color: #2a65a0;
+ text-decoration: none;
+ text-shadow: -1px -1px 0 rgba(0,0,0,0.3);
+ color: #fff;
+ background-color: #3c8dde;
+ background-image: linear-gradient(#599bdc, #3072b3);
+ }
+ }
+ p{
+ font-family: @font-family;
+ margin: 1em auto;
+ }
+ .footer{
+ margin-top: 80px;
+ text-align: center;
+ }
+ .large-github{
+ display: inline-block;
+ border: 1px solid #21b0ff;
+ font-weight: 400;
+ font-family: @font-family;
+ text-shadow: none;
+ background-color: #fff;
+ background-image: none;
+ padding: 8px 25px;
+ color: #21b0ff;
+ font-size: 18px;
+ border-radius: 25px;
+ &:hover, &:active{
+ background-color: #21b0ff;
+ color: #fff;
+ background-image: none;
+ text-shadow: none;
+ }
+ }
+}
+.two-coloumn{
+ em{
+ font-weight: normal;
+ text-decoration: none;
+ font-style: normal;
+ display: inline-block;
+ width: 85px;
+ }
+}
+.plugin-options{
+ font-size: 14px;
+ margin-bottom: 40px;
+ width: 900px;
+ font-weight: 200;
+ td, th{
+ padding: 8px ;
+ text-align: left;
+ vertical-align: top;
+ &:first-child{
+ font-weight: bold;
+ }
+ }
+ td{
+ &:nth-child(2), &:nth-child(3){
+ font-size: 13px;
+ color: #999;
+ }
+ p{
+ font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
+ margin: 4px 0;
+ &:first-child{
+ margin-top: 0;
+ }
+ }
+ }
+ th{
+ background-color: #358ccb;
+ color: #fff;
+ }
+ tr{
+ &:nth-child(2n + 1){
+ td{
+ background-color: #f5f5f5;
+ }
+ }
+ }
+ small{
+ display: block;
+ // white-space: nowrap;
+ }
+ ul{
+ list-style: none;
+ padding: 0;
+ ul{
+ list-style: circle inside;
+ // padding-left: 25px;
+ }
+ }
+}
+section.footer{
+ margin-top: 80px;
+ padding: 30px;
+ text-align: center;
+ background-color: #333;
+ color: #999;
+ font-weight: 300;
+ font-size: 13px;
+ p{
+ margin: 5px 0;
+ }
+ a{
+ color: #fff;
+ }
+} \ No newline at end of file
diff --git a/library/jRange/demo/normalize.css b/library/jRange/demo/normalize.css
new file mode 100644
index 000000000..08f895079
--- /dev/null
+++ b/library/jRange/demo/normalize.css
@@ -0,0 +1,425 @@
+/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
+
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
+ * user zoom.
+ */
+
+html {
+ font-family: sans-serif; /* 1 */
+ -ms-text-size-adjust: 100%; /* 2 */
+ -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/**
+ * Remove default margin.
+ */
+
+body {
+ margin: 0;
+}
+
+/* HTML5 display definitions
+ ========================================================================== */
+
+/**
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.
+ * Correct `block` display not defined for `main` in IE 11.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+ display: block;
+}
+
+/**
+ * 1. Correct `inline-block` display not defined in IE 8/9.
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ */
+
+audio,
+canvas,
+progress,
+video {
+ display: inline-block; /* 1 */
+ vertical-align: baseline; /* 2 */
+}
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9/10.
+ * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
+ */
+
+[hidden],
+template {
+ display: none;
+}
+
+/* Links
+ ========================================================================== */
+
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+
+a {
+ background: transparent;
+}
+
+/**
+ * Improve readability when focused and also mouse hovered in all browsers.
+ */
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+/* Text-level semantics
+ ========================================================================== */
+
+/**
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ */
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ */
+
+b,
+strong {
+ font-weight: bold;
+}
+
+/**
+ * Address styling not present in Safari and Chrome.
+ */
+
+dfn {
+ font-style: italic;
+}
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari, and Chrome.
+ */
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+
+mark {
+ background: #ff0;
+ color: #000;
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+
+small {
+ font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+/* Embedded content
+ ========================================================================== */
+
+/**
+ * Remove border when inside `a` element in IE 8/9/10.
+ */
+
+img {
+ border: 0;
+}
+
+/**
+ * Correct overflow not hidden in IE 9/10/11.
+ */
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+/* Grouping content
+ ========================================================================== */
+
+/**
+ * Address margin not present in IE 8/9 and Safari.
+ */
+
+figure {
+ margin: 1em 40px;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+
+hr {
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ height: 0;
+}
+
+/**
+ * Contain overflow in all browsers.
+ */
+
+pre {
+ overflow: auto;
+}
+
+/**
+ * Address odd `em`-unit font size rendering in all browsers.
+ */
+
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+
+/* Forms
+ ========================================================================== */
+
+/**
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
+ * styling of `select`, unless a `border` property is set.
+ */
+
+/**
+ * 1. Correct color not being inherited.
+ * Known issue: affects color of disabled elements.
+ * 2. Correct font properties not being inherited.
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ color: inherit; /* 1 */
+ font: inherit; /* 2 */
+ margin: 0; /* 3 */
+}
+
+/**
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
+ */
+
+button {
+ overflow: visible;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+ * Correct `select` style inheritance in Firefox.
+ */
+
+button,
+select {
+ text-transform: none;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ * and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ * `input` and others.
+ */
+
+button,
+html input[type="button"], /* 1 */
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button; /* 2 */
+ cursor: pointer; /* 3 */
+}
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+
+/**
+ * Remove inner padding and border in Firefox 4+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+/**
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+
+input {
+ line-height: normal;
+}
+
+/**
+ * It's recommended that you don't attempt to style these elements.
+ * Firefox's implementation doesn't respect box-sizing, padding, or width.
+ *
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
+ * 2. Remove excess padding in IE 8/9/10.
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Fix the cursor style for Chrome's increment/decrement buttons. For certain
+ * `font-size` values of the `input`, it causes the cursor style of the
+ * decrement button to change from `default` to `text`.
+ */
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
+ * (include `-moz` to future-proof).
+ */
+
+input[type="search"] {
+ -webkit-appearance: textfield; /* 1 */
+ -moz-box-sizing: content-box;
+ -webkit-box-sizing: content-box; /* 2 */
+ box-sizing: content-box;
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
+ * Safari (but not Chrome) clips the cancel button when the search input has
+ * padding (and `textfield` appearance).
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+
+legend {
+ border: 0; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Remove default vertical scrollbar in IE 8/9/10/11.
+ */
+
+textarea {
+ overflow: auto;
+}
+
+/**
+ * Don't inherit the `font-weight` (applied by a rule above).
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+ */
+
+optgroup {
+ font-weight: bold;
+}
+
+/* Tables
+ ========================================================================== */
+
+/**
+ * Remove most spacing between table cells.
+ */
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+td,
+th {
+ padding: 0;
+}
diff --git a/library/jRange/demo/prism/prism.css b/library/jRange/demo/prism/prism.css
new file mode 100644
index 000000000..afc94b354
--- /dev/null
+++ b/library/jRange/demo/prism/prism.css
@@ -0,0 +1,193 @@
+/* http://prismjs.com/download.html?themes=prism-coy&languages=markup+css+css-extras+clike+javascript */
+/**
+ * prism.js Coy theme for JavaScript, CoffeeScript, CSS and HTML
+ * Based on https://github.com/tshedor/workshop-wp-theme (Example: http://workshop.kansan.com/category/sessions/basics or http://workshop.timshedor.com/category/sessions/basics);
+ * @author Tim Shedor
+ */
+
+code[class*="language-"],
+pre[class*="language-"] {
+ color: black;
+ font-family: Consolas, Monaco, 'Andale Mono', monospace;
+ direction: ltr;
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+
+ -webkit-hyphens: none;
+ -moz-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+ position:relative;
+ padding: 1em;
+ margin: .5em 0;
+ -webkit-box-shadow: -1px 0px 0px 0px #358ccb, 0px 0px 0px 1px #dfdfdf;
+ -moz-box-shadow: -1px 0px 0px 0px #358ccb, 0px 0px 0px 1px #dfdfdf;
+ box-shadow: -1px 0px 0px 0px #358ccb, 0px 0px 0px 1px #dfdfdf;
+ border-left: 10px solid #358ccb;
+ background-color: #fdfdfd;
+ background-image: -webkit-linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%);
+ background-image: -moz-linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%);
+ background-image: -ms-linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%);
+ background-image: -o-linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%);
+ background-image: linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%);
+ background-size: 3em 3em;
+ background-origin:content-box;
+ overflow:visible;
+ max-height:30em;
+}
+
+code[class*="language"] {
+ max-height:29em;
+ display:block;
+ overflow:scroll;
+}
+
+/* Margin bottom to accomodate shadow */
+:not(pre) > code[class*="language-"],
+pre[class*="language-"] {
+ background-color:#fdfdfd;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ margin-bottom: 1em;
+}
+
+/* Inline code */
+:not(pre) > code[class*="language-"] {
+ position:relative;
+ padding: .2em;
+ -webkit-border-radius: 0.3em;
+ -moz-border-radius: 0.3em;
+ -ms-border-radius: 0.3em;
+ -o-border-radius: 0.3em;
+ border-radius: 0.3em;
+ color: #c92c2c;
+ border: 1px solid rgba(0, 0, 0, 0.1);
+}
+
+pre[class*="language-"]:before,
+pre[class*="language-"]:after {
+ content: '';
+ z-index: -2;
+ display:block;
+ position: absolute;
+ bottom: 0.75em;
+ left: 0.18em;
+ width: 40%;
+ height: 20%;
+ -webkit-box-shadow: 0px 13px 8px #979797;
+ -moz-box-shadow: 0px 13px 8px #979797;
+ box-shadow: 0px 13px 8px #979797;
+ -webkit-transform: rotate(-2deg);
+ -moz-transform: rotate(-2deg);
+ -ms-transform: rotate(-2deg);
+ -o-transform: rotate(-2deg);
+ transform: rotate(-2deg);
+}
+
+:not(pre) > code[class*="language-"]:after,
+pre[class*="language-"]:after {
+ right: 0.75em;
+ left: auto;
+ -webkit-transform: rotate(2deg);
+ -moz-transform: rotate(2deg);
+ -ms-transform: rotate(2deg);
+ -o-transform: rotate(2deg);
+ transform: rotate(2deg);
+}
+
+.token.comment,
+.token.block-comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+ color: #7D8B99;
+}
+
+.token.punctuation {
+ color: #5F6364;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.function-name,
+.token.constant,
+.token.symbol {
+ color: #c92c2c;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.function,
+.token.builtin {
+ color: #2f9c0a;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.token.variable {
+ color: #a67f59;
+ background: rgba(255, 255, 255, 0.5);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword,
+.token.class-name {
+ color: #1990b8;
+}
+
+.token.regex,
+.token.important {
+ color: #e90;
+}
+.language-css .token.string,
+.style .token.string {
+ color: #a67f59;
+ background: rgba(255, 255, 255, 0.5);
+}
+
+.token.important {
+ font-weight: normal;
+}
+
+.token.entity {
+ cursor: help;
+}
+
+.namespace {
+ opacity: .7;
+}
+
+@media screen and (max-width:767px){
+ pre[class*="language-"]:before,
+ pre[class*="language-"]:after {
+ bottom:14px;
+ -webkit-box-shadow:none;
+ -moz-box-shadow:none;
+ box-shadow:none;
+ }
+
+}
+
+/* Plugin styles */
+.token.tab:not(:empty):before,
+.token.cr:before,
+.token.lf:before {
+ color: #e0d7d1;
+}
+
diff --git a/library/jRange/demo/prism/prism.js b/library/jRange/demo/prism/prism.js
new file mode 100644
index 000000000..dace66766
--- /dev/null
+++ b/library/jRange/demo/prism/prism.js
@@ -0,0 +1,8 @@
+/* http://prismjs.com/download.html?themes=prism-coy&languages=markup+css+css-extras+clike+javascript */
+var self=typeof window!="undefined"?window:{},Prism=function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=self.Prism={util:{encode:function(e){return e instanceof n?new n(e.type,t.util.encode(e.content)):t.util.type(e)==="Array"?e.map(t.util.encode):e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},clone:function(e){var n=t.util.type(e);switch(n){case"Object":var r={};for(var i in e)e.hasOwnProperty(i)&&(r[i]=t.util.clone(e[i]));return r;case"Array":return e.slice()}return e}},languages:{extend:function(e,n){var r=t.util.clone(t.languages[e]);for(var i in n)r[i]=n[i];return r},insertBefore:function(e,n,r,i){i=i||t.languages;var s=i[e],o={};for(var u in s)if(s.hasOwnProperty(u)){if(u==n)for(var a in r)r.hasOwnProperty(a)&&(o[a]=r[a]);o[u]=s[u]}return i[e]=o},DFS:function(e,n){for(var r in e){n.call(e,r,e[r]);t.util.type(e)==="Object"&&t.languages.DFS(e[r],n)}}},highlightAll:function(e,n){var r=document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code');for(var i=0,s;s=r[i++];)t.highlightElement(s,e===!0,n)},highlightElement:function(r,i,s){var o,u,a=r;while(a&&!e.test(a.className))a=a.parentNode;if(a){o=(a.className.match(e)||[,""])[1];u=t.languages[o]}if(!u)return;r.className=r.className.replace(e,"").replace(/\s+/g," ")+" language-"+o;a=r.parentNode;/pre/i.test(a.nodeName)&&(a.className=a.className.replace(e,"").replace(/\s+/g," ")+" language-"+o);var f=r.textContent;if(!f)return;var l={element:r,language:o,grammar:u,code:f};t.hooks.run("before-highlight",l);if(i&&self.Worker){var c=new Worker(t.filename);c.onmessage=function(e){l.highlightedCode=n.stringify(JSON.parse(e.data),o);t.hooks.run("before-insert",l);l.element.innerHTML=l.highlightedCode;s&&s.call(l.element);t.hooks.run("after-highlight",l)};c.postMessage(JSON.stringify({language:l.language,code:l.code}))}else{l.highlightedCode=t.highlight(l.code,l.grammar,l.language);t.hooks.run("before-insert",l);l.element.innerHTML=l.highlightedCode;s&&s.call(r);t.hooks.run("after-highlight",l)}},highlight:function(e,r,i){var s=t.tokenize(e,r);return n.stringify(t.util.encode(s),i)},tokenize:function(e,n,r){var i=t.Token,s=[e],o=n.rest;if(o){for(var u in o)n[u]=o[u];delete n.rest}e:for(var u in n){if(!n.hasOwnProperty(u)||!n[u])continue;var a=n[u],f=a.inside,l=!!a.lookbehind,c=0;a=a.pattern||a;for(var h=0;h<s.length;h++){var p=s[h];if(s.length>e.length)break e;if(p instanceof i)continue;a.lastIndex=0;var d=a.exec(p);if(d){l&&(c=d[1].length);var v=d.index-1+c,d=d[0].slice(c),m=d.length,g=v+m,y=p.slice(0,v+1),b=p.slice(g+1),w=[h,1];y&&w.push(y);var E=new i(u,f?t.tokenize(d,f):d);w.push(E);b&&w.push(b);Array.prototype.splice.apply(s,w)}}}return s},hooks:{all:{},add:function(e,n){var r=t.hooks.all;r[e]=r[e]||[];r[e].push(n)},run:function(e,n){var r=t.hooks.all[e];if(!r||!r.length)return;for(var i=0,s;s=r[i++];)s(n)}}},n=t.Token=function(e,t){this.type=e;this.content=t};n.stringify=function(e,r,i){if(typeof e=="string")return e;if(Object.prototype.toString.call(e)=="[object Array]")return e.map(function(t){return n.stringify(t,r,e)}).join("");var s={type:e.type,content:n.stringify(e.content,r,i),tag:"span",classes:["token",e.type],attributes:{},language:r,parent:i};s.type=="comment"&&(s.attributes.spellcheck="true");t.hooks.run("wrap",s);var o="";for(var u in s.attributes)o+=u+'="'+(s.attributes[u]||"")+'"';return"<"+s.tag+' class="'+s.classes.join(" ")+'" '+o+">"+s.content+"</"+s.tag+">"};if(!self.document){if(!self.addEventListener)return self.Prism;self.addEventListener("message",function(e){var n=JSON.parse(e.data),r=n.language,i=n.code;self.postMessage(JSON.stringify(t.tokenize(i,t.languages[r])));self.close()},!1);return self.Prism}var r=document.getElementsByTagName("script");r=r[r.length-1];if(r){t.filename=r.src;document.addEventListener&&!r.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)}return self.Prism}();typeof module!="undefined"&&module.exports&&(module.exports=Prism);;
+Prism.languages.markup={comment:/<!--[\w\W]*?-->/g,prolog:/<\?.+?\?>/,doctype:/<!DOCTYPE.+?>/,cdata:/<!\[CDATA\[[\w\W]*?]]>/i,tag:{pattern:/<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|[^\s'">=]+))?\s*)*\/?>/gi,inside:{tag:{pattern:/^<\/?[\w:-]+/i,inside:{punctuation:/^<\/?/,namespace:/^[\w-]+?:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/gi,inside:{punctuation:/=|>|"/g}},punctuation:/\/?>/g,"attr-name":{pattern:/[\w:-]+/g,inside:{namespace:/^[\w-]+?:/}}}},entity:/\&#?[\da-z]{1,8};/gi};Prism.hooks.add("wrap",function(e){e.type==="entity"&&(e.attributes.title=e.content.replace(/&amp;/,"&"))});;
+Prism.languages.css={comment:/\/\*[\w\W]*?\*\//g,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*{))/gi,inside:{punctuation:/[;:]/g}},url:/url\((["']?).*?\1\)/gi,selector:/[^\{\}\s][^\{\};]*(?=\s*\{)/g,property:/(\b|\B)[\w-]+(?=\s*:)/ig,string:/("|')(\\?.)*?\1/g,important:/\B!important\b/gi,punctuation:/[\{\};:]/g,"function":/[-a-z0-9]+(?=\()/ig};Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{style:{pattern:/<style[\w\W]*?>[\w\W]*?<\/style>/ig,inside:{tag:{pattern:/<style[\w\W]*?>|<\/style>/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.css}}});;
+Prism.languages.css.selector={pattern:/[^\{\}\s][^\{\}]*(?=\s*\{)/g,inside:{"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/g,"pseudo-class":/:[-\w]+(?:\(.*\))?/g,"class":/\.[-:\.\w]+/g,id:/#[-:\.\w]+/g}};Prism.languages.insertBefore("css","ignore",{hexcode:/#[\da-f]{3,6}/gi,entity:/\\[\da-f]{1,8}/gi,number:/[\d%\.]+/g});;
+Prism.languages.clike={comment:{pattern:/(^|[^\\])(\/\*[\w\W]*?\*\/|(^|[^:])\/\/.*?(\r?\n|$))/g,lookbehind:!0},string:/("|')(\\?.)*?\1/g,"class-name":{pattern:/((?:(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/ig,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/g,"boolean":/\b(true|false)\b/g,"function":{pattern:/[a-z0-9_]+\(/ig,inside:{punctuation:/\(/}},number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g,operator:/[-+]{1,2}|!|<=?|>=?|={1,3}|&{1,2}|\|?\||\?|\*|\/|\~|\^|\%/g,ignore:/&(lt|gt|amp);/gi,punctuation:/[{}[\];(),.:]/g};;
+Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|function|get|if|implements|import|in|instanceof|interface|let|new|null|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/g,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?|NaN|-?Infinity)\b/g});Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/g,lookbehind:!0}});Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/<script[\w\W]*?>[\w\W]*?<\/script>/ig,inside:{tag:{pattern:/<script[\w\W]*?>|<\/script>/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.javascript}}});
+;
diff --git a/library/jRange/jquery.range-min.js b/library/jRange/jquery.range-min.js
new file mode 100644
index 000000000..8aa6e7ecb
--- /dev/null
+++ b/library/jRange/jquery.range-min.js
@@ -0,0 +1 @@
+!function($,t,i,s){"use strict";var o=function(){return this.init.apply(this,arguments)};o.prototype={defaults:{onstatechange:function(){},isRange:!1,showLabels:!0,showScale:!0,step:1,format:"%s",theme:"theme-green",width:300},template:'<div class="slider-container"> <div class="back-bar"> <div class="selected-bar"></div> <div class="pointer low"></div><div class="pointer-label">123456</div> <div class="pointer high"></div><div class="pointer-label">456789</div> <div class="clickable-dummy"></div> </div> <div class="scale"></div> </div>',init:function(t,i){this.options=$.extend({},this.defaults,i),this.inputNode=$(t),this.options.value=this.inputNode.val()||(this.options.isRange?this.options.from+","+this.options.from:this.options.from),this.domNode=$(this.template),this.domNode.addClass(this.options.theme),this.inputNode.after(this.domNode),this.domNode.on("change",this.onChange),this.pointers=$(".pointer",this.domNode),this.lowPointer=this.pointers.first(),this.highPointer=this.pointers.last(),this.labels=$(".pointer-label",this.domNode),this.lowLabel=this.labels.first(),this.highLabel=this.labels.last(),this.scale=$(".scale",this.domNode),this.bar=$(".selected-bar",this.domNode),this.clickableBar=this.domNode.find(".clickable-dummy"),this.interval=this.options.to-this.options.from,this.render()},render:function(){return 0!==this.inputNode.width()||this.options.width?(this.domNode.width(this.options.width||this.inputNode.width()),this.inputNode.hide(),this.isSingle()&&(this.lowPointer.hide(),this.lowLabel.hide()),this.options.showLabels||this.labels.hide(),this.attachEvents(),this.options.showScale&&this.renderScale(),void this.setValue(this.options.value)):void console.log("jRange : no width found, returning")},isSingle:function(){return"number"==typeof this.options.value?!0:-1!==this.options.value.indexOf(",")||this.options.isRange?!1:!0},attachEvents:function(){this.clickableBar.click($.proxy(this.barClicked,this)),this.pointers.mousedown($.proxy(this.onDragStart,this)),this.pointers.bind("dragstart",function(t){t.preventDefault()})},onDragStart:function(t){if(1===t.which){t.stopPropagation(),t.preventDefault();var s=$(t.target);s.addClass("focused"),this[(s.hasClass("low")?"low":"high")+"Label"].addClass("focused"),$(i).on("mousemove.slider",$.proxy(this.onDrag,this,s)),$(i).on("mouseup.slider",$.proxy(this.onDragEnd,this))}},onDrag:function(t,i){i.stopPropagation(),i.preventDefault();var s=i.clientX-this.domNode.offset().left;this.domNode.trigger("change",[this,t,s])},onDragEnd:function(){this.pointers.removeClass("focused"),this.labels.removeClass("focused"),$(i).off(".slider"),$(i).off(".slider")},barClicked:function(t){var i=t.pageX-this.clickableBar.offset().left;if(this.isSingle())this.setPosition(this.pointers.last(),i,!0,!0);else{var s=Math.abs(parseInt(this.pointers.first().css("left"),10)-i+this.pointers.first().width()/2)<Math.abs(parseInt(this.pointers.last().css("left"),10)-i+this.pointers.first().width()/2)?this.pointers.first():this.pointers.last();this.setPosition(s,i,!0,!0)}},onChange:function(t,i,s,o){var e,n;i.isSingle()?(e=0,n=i.domNode.width()):(e=s.hasClass("high")?i.lowPointer.position().left+i.lowPointer.width()/2:0,n=s.hasClass("low")?i.highPointer.position().left+i.highPointer.width()/2:i.domNode.width());var h=Math.min(Math.max(o,e),n);i.setPosition(s,h,!0)},setPosition:function(t,i,s,o){var e,n=this.lowPointer.position().left,h=this.highPointer.position().left,a=this.highPointer.width()/2;s||(i=this.prcToPx(i)),t[0]===this.highPointer[0]?h=Math.round(i-a):n=Math.round(i-a),t[o?"animate":"css"]({left:Math.round(i-a)}),e=this.isSingle()?0:n+a,this.bar[o?"animate":"css"]({width:Math.round(h+a-e),left:e}),this.showPointerValue(t,i,o)},setValue:function(t){var i=t.toString().split(",");this.options.value=t;var s=this.valuesToPrc(2===i.length?i:[0,i[0]]);this.isSingle()?this.setPosition(this.highPointer,s[1]):(this.setPosition(this.lowPointer,s[0]),this.setPosition(this.highPointer,s[1]))},renderScale:function(){for(var t=this.options.scale||[this.options.from,this.options.to],i=Math.round(100/(t.length-1)*10)/10,s="",o=0;o<t.length;o++)s+='<span style="left: '+o*i+'%">'+("|"!=t[o]?"<ins>"+t[o]+"</ins>":"")+"</span>";this.scale.html(s),$("ins",this.scale).each(function(){$(this).css({marginLeft:-$(this).outerWidth()/2})})},getBarWidth:function(){var t=this.options.value.split(",");return t.length>1?parseInt(t[1],10)-parseInt(t[0],10):parseInt(t[0],10)},showPointerValue:function(t,i,o){var e=$(".pointer-label",this.domNode)[t.hasClass("low")?"first":"last"](),n,h=this.positionToValue(i);if($.isFunction(this.options.format)){var a=this.isSingle()?s:t.hasClass("low")?"low":"high";n=this.options.format(h,a)}else n=this.options.format.replace("%s",h);var r=e.html(n).width(),l=i-r/2;l=Math.min(Math.max(l,0),this.options.width-r),e[o?"animate":"css"]({left:l}),this.setInputValue(t,h)},valuesToPrc:function(t){var i=100*(t[0]-this.options.from)/this.interval,s=100*(t[1]-this.options.from)/this.interval;return[i,s]},prcToPx:function(t){return this.domNode.width()*t/100},positionToValue:function(t){var i=t/this.domNode.width()*this.interval;return i+=this.options.from,Math.round(i/this.options.step)*this.options.step},setInputValue:function(t,i){if(this.isSingle())this.options.value=i.toString();else{var s=this.options.value.split(",");this.options.value=t.hasClass("low")?i+","+s[1]:s[0]+","+i}this.inputNode.val()!==this.options.value&&(this.inputNode.val(this.options.value),this.options.onstatechange.call(this,this.options.value))},getValue:function(){return this.options.value}};var e="jRange";$.fn[e]=function(t){var i=arguments,s;return this.each(function(){var n=$(this),h=$.data(this,"plugin_"+e),a="object"==typeof t&&t;h||n.data("plugin_"+e,h=new o(this,a)),"string"==typeof t&&(s=h[t].apply(h,Array.prototype.slice.call(i,1)))}),s||this}}(jQuery,window,document); \ No newline at end of file
diff --git a/library/jRange/jquery.range.css b/library/jRange/jquery.range.css
new file mode 100644
index 000000000..27375c846
--- /dev/null
+++ b/library/jRange/jquery.range.css
@@ -0,0 +1,168 @@
+.slider-container {
+ width: 300px;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+}
+.slider-container .back-bar {
+ height: 10px;
+ position: relative;
+}
+.slider-container .back-bar .selected-bar {
+ position: absolute;
+ height: 100%;
+}
+.slider-container .back-bar .pointer {
+ position: absolute;
+ width: 10px;
+ height: 10px;
+ background-color: red;
+ cursor: move;
+ opacity: 1;
+ z-index: 2;
+}
+.slider-container .back-bar .pointer-label {
+ position: absolute;
+ top: -17px;
+ font-size: 8px;
+ background: white;
+ white-space: nowrap;
+ line-height: 1;
+}
+.slider-container .back-bar .focused {
+ z-index: 10;
+}
+.slider-container .clickable-dummy {
+ cursor: pointer;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ z-index: 1;
+}
+.slider-container .scale {
+ top: 2px;
+ position: relative;
+}
+.slider-container .scale span {
+ position: absolute;
+ height: 5px;
+ border-left: 1px solid #999;
+ font-size: 0;
+}
+.slider-container .scale ins {
+ font-size: 9px;
+ text-decoration: none;
+ position: absolute;
+ left: 0;
+ top: 5px;
+ color: #999;
+ line-height: 1;
+}
+.theme-green .back-bar {
+ height: 5px;
+ border-radius: 2px;
+ background-color: #eeeeee;
+ background-color: #e7e7e7;
+ background-image: -moz-linear-gradient(top, #eeeeee, #dddddd);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#eeeeee), to(#dddddd));
+ background-image: -webkit-linear-gradient(top, #eeeeee, #dddddd);
+ background-image: -o-linear-gradient(top, #eeeeee, #dddddd);
+ background-image: linear-gradient(to bottom, #eeeeee, #dddddd);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeeeeee', endColorstr='#ffdddddd', GradientType=0);
+}
+.theme-green .back-bar .selected-bar {
+ border-radius: 2px;
+ background-color: #a1fad0;
+ background-image: -moz-linear-gradient(top, #bdfade, #76fabc);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#bdfade), to(#76fabc));
+ background-image: -webkit-linear-gradient(top, #bdfade, #76fabc);
+ background-image: -o-linear-gradient(top, #bdfade, #76fabc);
+ background-image: linear-gradient(to bottom, #bdfade, #76fabc);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffbdfade', endColorstr='#ff76fabc', GradientType=0);
+}
+.theme-green .back-bar .pointer {
+ width: 14px;
+ height: 14px;
+ top: -5px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border-radius: 10px;
+ border: 1px solid #AAA;
+ background-color: #e7e7e7;
+ background-image: -moz-linear-gradient(top, #eeeeee, #dddddd);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#eeeeee), to(#dddddd));
+ background-image: -webkit-linear-gradient(top, #eeeeee, #dddddd);
+ background-image: -o-linear-gradient(top, #eeeeee, #dddddd);
+ background-image: linear-gradient(to bottom, #eeeeee, #dddddd);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeeeeee', endColorstr='#ffdddddd', GradientType=0);
+ cursor: col-resize;
+}
+.theme-green .back-bar .pointer-label {
+ color: #999;
+}
+.theme-green .back-bar .focused {
+ color: #333;
+}
+.theme-green .scale span {
+ border-left: 1px solid #e5e5e5;
+}
+.theme-green .scale ins {
+ color: #999;
+}
+.theme-blue .back-bar {
+ height: 5px;
+ border-radius: 2px;
+ background-color: #eeeeee;
+ background-color: #e7e7e7;
+ background-image: -moz-linear-gradient(top, #eeeeee, #dddddd);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#eeeeee), to(#dddddd));
+ background-image: -webkit-linear-gradient(top, #eeeeee, #dddddd);
+ background-image: -o-linear-gradient(top, #eeeeee, #dddddd);
+ background-image: linear-gradient(to bottom, #eeeeee, #dddddd);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeeeeee', endColorstr='#ffdddddd', GradientType=0);
+}
+.theme-blue .back-bar .selected-bar {
+ border-radius: 2px;
+ background-color: #92c1f9;
+ background-image: -moz-linear-gradient(top, #b1d1f9, #64a8f9);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b1d1f9), to(#64a8f9));
+ background-image: -webkit-linear-gradient(top, #b1d1f9, #64a8f9);
+ background-image: -o-linear-gradient(top, #b1d1f9, #64a8f9);
+ background-image: linear-gradient(to bottom, #b1d1f9, #64a8f9);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffb1d1f9', endColorstr='#ff64a8f9', GradientType=0);
+}
+.theme-blue .back-bar .pointer {
+ width: 14px;
+ height: 14px;
+ top: -5px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border-radius: 10px;
+ border: 1px solid #AAA;
+ background-color: #e7e7e7;
+ background-image: -moz-linear-gradient(top, #eeeeee, #dddddd);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#eeeeee), to(#dddddd));
+ background-image: -webkit-linear-gradient(top, #eeeeee, #dddddd);
+ background-image: -o-linear-gradient(top, #eeeeee, #dddddd);
+ background-image: linear-gradient(to bottom, #eeeeee, #dddddd);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeeeeee', endColorstr='#ffdddddd', GradientType=0);
+ cursor: col-resize;
+}
+.theme-blue .back-bar .pointer-label {
+ color: #999;
+}
+.theme-blue .back-bar .focused {
+ color: #333;
+}
+.theme-blue .scale span {
+ border-left: 1px solid #e5e5e5;
+}
+.theme-blue .scale ins {
+ color: #999;
+}
diff --git a/library/jRange/jquery.range.js b/library/jRange/jquery.range.js
new file mode 100644
index 000000000..978b3e7ba
--- /dev/null
+++ b/library/jRange/jquery.range.js
@@ -0,0 +1,297 @@
+/*jshint multistr:true, curly: false */
+/*global jQuery:false, define: false */
+/**
+ * jRange - Awesome range control
+ *
+ * Written by
+ * ----------
+ * Nitin Hayaran (nitinhayaran@gmail.com)
+ *
+ * Licensed under the MIT (MIT-LICENSE.txt).
+ *
+ * @author Nitin Hayaran
+ * @version 0.1-RELEASE
+ *
+ * Dependencies
+ * ------------
+ * jQuery (http://jquery.com)
+ *
+ **/
+ ;
+ (function($, window, document, undefined) {
+ 'use strict';
+
+ var jRange = function(){
+ return this.init.apply(this, arguments);
+ };
+ jRange.prototype = {
+ defaults : {
+ onstatechange : function(){},
+ isRange : false,
+ showLabels : true,
+ showScale : true,
+ step : 1,
+ format: '%s',
+ theme : 'theme-green',
+ width : 300
+ },
+ template : '<div class="slider-container">\
+ <div class="back-bar">\
+ <div class="selected-bar"></div>\
+ <div class="pointer low"></div><div class="pointer-label">123456</div>\
+ <div class="pointer high"></div><div class="pointer-label">456789</div>\
+ <div class="clickable-dummy"></div>\
+ </div>\
+ <div class="scale"></div>\
+ </div>',
+ init : function(node, options){
+ this.options = $.extend({}, this.defaults, options);
+ this.inputNode = $(node);
+ this.options.value = this.inputNode.val() || (this.options.isRange ? this.options.from+','+this.options.from : this.options.from);
+ this.domNode = $(this.template);
+ this.domNode.addClass(this.options.theme);
+ this.inputNode.after(this.domNode);
+ this.domNode.on('change', this.onChange);
+ this.pointers = $('.pointer', this.domNode);
+ this.lowPointer = this.pointers.first();
+ this.highPointer = this.pointers.last();
+ this.labels = $('.pointer-label', this.domNode);
+ this.lowLabel = this.labels.first();
+ this.highLabel = this.labels.last();
+ this.scale = $('.scale', this.domNode);
+ this.bar = $('.selected-bar', this.domNode);
+ this.clickableBar = this.domNode.find('.clickable-dummy');
+ this.interval = this.options.to - this.options.from;
+ this.render();
+ },
+ render: function(){
+ // Check if inputNode is visible, and have some width, so that we can set slider width accordingly.
+ if( this.inputNode.width() === 0 && !this.options.width ){
+ console.log('jRange : no width found, returning');
+ return;
+ }else{
+ this.domNode.width( this.options.width || this.inputNode.width() );
+ this.inputNode.hide();
+ }
+
+ if(this.isSingle()){
+ this.lowPointer.hide();
+ this.lowLabel.hide();
+ }
+ if(!this.options.showLabels){
+ this.labels.hide();
+ }
+ this.attachEvents();
+ if(this.options.showScale){
+ this.renderScale();
+ }
+ this.setValue(this.options.value);
+ },
+ isSingle: function(){
+ if(typeof(this.options.value) === 'number'){
+ return true;
+ }
+ return (this.options.value.indexOf(',') !== -1 || this.options.isRange) ?
+ false : true;
+ },
+ attachEvents: function(){
+ this.clickableBar.click($.proxy(this.barClicked, this));
+ this.pointers.mousedown($.proxy(this.onDragStart, this));
+ this.pointers.bind('dragstart', function(event) { event.preventDefault(); });
+ },
+ onDragStart: function(e){
+ if(e.which !== 1){return;}
+ e.stopPropagation(); e.preventDefault();
+ var pointer = $(e.target);
+ pointer.addClass('focused');
+ this[(pointer.hasClass('low')?'low':'high') + 'Label'].addClass('focused');
+ $(document).on('mousemove.slider', $.proxy(this.onDrag, this, pointer));
+ $(document).on('mouseup.slider', $.proxy(this.onDragEnd, this));
+ },
+ onDrag: function(pointer, e){
+ e.stopPropagation(); e.preventDefault();
+ var position = e.clientX - this.domNode.offset().left;
+ this.domNode.trigger('change', [this, pointer, position]);
+ },
+ onDragEnd: function(){
+ this.pointers.removeClass('focused');
+ this.labels.removeClass('focused');
+ $(document).off('.slider');
+ $(document).off('.slider');
+ },
+ barClicked: function(e){
+ var x = e.pageX - this.clickableBar.offset().left;
+ if(this.isSingle())
+ this.setPosition(this.pointers.last(), x, true, true);
+ else{
+ var pointer = Math.abs(parseInt(this.pointers.first().css('left'), 10) - x + this.pointers.first().width() / 2) < Math.abs(parseInt(this.pointers.last().css('left'), 10) - x + this.pointers.first().width() / 2) ?
+ this.pointers.first() : this.pointers.last();
+ this.setPosition(pointer, x, true, true);
+ }
+ },
+ onChange: function(e, self, pointer, position){
+ var min, max;
+ if(self.isSingle()){
+ min = 0;
+ max = self.domNode.width();
+ }else{
+ min = pointer.hasClass('high')? self.lowPointer.position().left + self.lowPointer.width() / 2 : 0;
+ max = pointer.hasClass('low') ? self.highPointer.position().left + self.highPointer.width() / 2 : self.domNode.width();
+ }
+ var value = Math.min(Math.max(position, min), max);
+ self.setPosition(pointer, value, true);
+ },
+ setPosition: function(pointer, position, isPx, animate){
+ var leftPos,
+ lowPos = this.lowPointer.position().left,
+ highPos = this.highPointer.position().left,
+ circleWidth = this.highPointer.width() / 2;
+ if(!isPx){
+ position = this.prcToPx(position);
+ }
+ if(pointer[0] === this.highPointer[0]){
+ highPos = Math.round(position - circleWidth);
+ }else{
+ lowPos = Math.round(position - circleWidth);
+ }
+ pointer[animate?'animate':'css']({'left': Math.round(position - circleWidth)});
+ if(this.isSingle()){
+ leftPos = 0;
+ }else{
+ leftPos = lowPos + circleWidth;
+ }
+ this.bar[animate?'animate':'css']({
+ 'width' : Math.round(highPos + circleWidth - leftPos),
+ 'left' : leftPos
+ });
+ this.showPointerValue(pointer, position, animate);
+ },
+ // will be called from outside
+ setValue: function(value){
+ var values = value.toString().split(',');
+ this.options.value = value;
+ var prc = this.valuesToPrc( values.length === 2 ? values : [0, values[0]] );
+ if(this.isSingle()){
+ this.setPosition(this.highPointer, prc[1]);
+ }else{
+ this.setPosition(this.lowPointer, prc[0]);
+ this.setPosition(this.highPointer, prc[1]);
+ }
+ },
+ renderScale: function(){
+ var s = this.options.scale || [this.options.from, this.options.to];
+ var prc = Math.round((100 / (s.length - 1)) * 10) / 10;
+ var str = '';
+ for(var i = 0; i < s.length ; i++ ){
+ str += '<span style="left: ' + i * prc + '%">' + (s[i] != '|' ? '<ins>' + s[i] + '</ins>' : '') + '</span>';
+ }
+ this.scale.html(str);
+
+ $('ins', this.scale).each(function () {
+ $(this).css({
+ marginLeft: -$(this).outerWidth() / 2
+ });
+ });
+ },
+ getBarWidth: function(){
+ var values = this.options.value.split(',');
+ if(values.length > 1){
+ return parseInt(values[1], 10) - parseInt(values[0], 10);
+ }else{
+ return parseInt(values[0], 10);
+ }
+ },
+ showPointerValue: function(pointer, position, animate){
+ var label = $('.pointer-label', this.domNode)[pointer.hasClass('low')?'first':'last']();
+ var text;
+ var value = this.positionToValue(position);
+ if($.isFunction(this.options.format)){
+ var type = this.isSingle() ? undefined : (pointer.hasClass('low') ? 'low':'high');
+ text = this.options.format(value, type);
+ }else{
+ text = this.options.format.replace('%s', value);
+ }
+
+ var width = label.html(text).width(),
+ left = position - width / 2;
+ left = Math.min(Math.max(left, 0), this.options.width - width);
+ label[animate?'animate':'css']({left: left});
+ this.setInputValue(pointer, value);
+ },
+ valuesToPrc: function(values){
+ var lowPrc = ( ( values[0] - this.options.from ) * 100 / this.interval ),
+ highPrc = ( ( values[1] - this.options.from ) * 100 / this.interval );
+ return [lowPrc, highPrc];
+ },
+ prcToPx: function(prc){
+ return (this.domNode.width() * prc) / 100;
+ },
+ positionToValue: function(pos){
+ var value = (pos / this.domNode.width()) * this.interval;
+ value = value + this.options.from;
+ return Math.round(value / this.options.step) * this.options.step;
+ },
+ setInputValue: function(pointer, v){
+ // if(!isChanged) return;
+ if(this.isSingle()){
+ this.options.value = v.toString();
+ }else{
+ var values = this.options.value.split(',');
+ if(pointer.hasClass('low')){
+ this.options.value = v + ',' + values[1];
+ }else{
+ this.options.value = values[0] + ',' + v;
+ }
+ }
+ if( this.inputNode.val() !== this.options.value ){
+ this.inputNode.val(this.options.value);
+ this.options.onstatechange.call(this, this.options.value);
+ }
+ },
+ getValue: function(){
+ return this.options.value;
+ }
+ };
+
+ /*$.jRange = function (node, options) {
+ var jNode = $(node);
+ if(!jNode.data('jrange')){
+ jNode.data('jrange', new jRange(node, options));
+ }
+ return jNode.data('jrange');
+ };
+
+ $.fn.jRange = function (options) {
+ return this.each(function(){
+ $.jRange(this, options);
+ });
+ };*/
+
+ var pluginName = 'jRange';
+ // A really lightweight plugin wrapper around the constructor,
+ // preventing against multiple instantiations
+ $.fn[pluginName] = function(option) {
+ var args = arguments,
+ result;
+
+ this.each(function() {
+ var $this = $(this),
+ data = $.data(this, 'plugin_' + pluginName),
+ options = typeof option === 'object' && option;
+ if (!data) {
+ $this.data('plugin_' + pluginName, (data = new jRange(this, options)));
+ }
+ // if first argument is a string, call silimarly named function
+ // this gives flexibility to call functions of the plugin e.g.
+ // - $('.dial').plugin('destroy');
+ // - $('.dial').plugin('render', $('.new-child'));
+ if (typeof option === 'string') {
+ result = data[option].apply(data, Array.prototype.slice.call(args, 1));
+ }
+ });
+
+ // To enable plugin returns values
+ return result || this;
+ };
+
+})(jQuery, window, document); \ No newline at end of file
diff --git a/library/jRange/jquery.range.less b/library/jRange/jquery.range.less
new file mode 100644
index 000000000..979ed2e1a
--- /dev/null
+++ b/library/jRange/jquery.range.less
@@ -0,0 +1,192 @@
+#gradient {
+ .horizontal(@startColor: #555, @endColor: #333) {
+ background-color: @endColor;
+ background-image: -moz-linear-gradient(left, @startColor, @endColor); // FF 3.6+
+ background-image: -webkit-gradient(linear, 0 0, 100% 0, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+
+ background-image: -webkit-linear-gradient(left, @startColor, @endColor); // Safari 5.1+, Chrome 10+
+ background-image: -o-linear-gradient(left, @startColor, @endColor); // Opera 11.10
+ background-image: linear-gradient(to right, @startColor, @endColor); // Standard, IE10
+ background-repeat: repeat-x;
+ filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@startColor),argb(@endColor))); // IE9 and down
+ }
+ .vertical(@startColor: #555, @endColor: #333) {
+ background-color: mix(@startColor, @endColor, 60%);
+ background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+
+ background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+
+ background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10
+ background-image: linear-gradient(to bottom, @startColor, @endColor); // Standard, IE10
+ background-repeat: repeat-x;
+ filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down
+ }
+ .directional(@startColor: #555, @endColor: #333, @deg: 45deg) {
+ background-color: @endColor;
+ background-repeat: repeat-x;
+ background-image: -moz-linear-gradient(@deg, @startColor, @endColor); // FF 3.6+
+ background-image: -webkit-linear-gradient(@deg, @startColor, @endColor); // Safari 5.1+, Chrome 10+
+ background-image: -o-linear-gradient(@deg, @startColor, @endColor); // Opera 11.10
+ background-image: linear-gradient(@deg, @startColor, @endColor); // Standard, IE10
+ }
+ .vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) {
+ background-color: mix(@midColor, @endColor, 80%);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor));
+ background-image: -webkit-linear-gradient(@startColor, @midColor @colorStop, @endColor);
+ background-image: -moz-linear-gradient(top, @startColor, @midColor @colorStop, @endColor);
+ background-image: -o-linear-gradient(@startColor, @midColor @colorStop, @endColor);
+ background-image: linear-gradient(@startColor, @midColor @colorStop, @endColor);
+ background-repeat: no-repeat;
+ filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down, gets no color-stop at all for proper fallback
+ }
+ .radial(@innerColor: #555, @outerColor: #333) {
+ background-color: @outerColor;
+ background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(@innerColor), to(@outerColor));
+ background-image: -webkit-radial-gradient(circle, @innerColor, @outerColor);
+ background-image: -moz-radial-gradient(circle, @innerColor, @outerColor);
+ background-image: -o-radial-gradient(circle, @innerColor, @outerColor);
+ background-repeat: no-repeat;
+ }
+ .striped(@color: #555, @angle: 45deg) {
+ background-color: @color;
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,.15)), color-stop(.75, rgba(255,255,255,.15)), color-stop(.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
+ }
+}
+
+.slider-container {
+ width: 300px;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ .back-bar {
+ height: 10px;
+ position: relative;
+ .selected-bar {
+ position: absolute;
+ height: 100%;
+ }
+ .pointer {
+ position: absolute;
+ width: 10px;
+ height: 10px;
+ background-color: red;
+ cursor: move;
+ opacity: 1;
+ z-index: 2;
+ }
+ .pointer-label {
+ position: absolute;
+ top: -17px;
+ font-size: 8px;
+ background: white;
+ white-space: nowrap;
+ line-height: 1;
+ }
+ .focused {
+ z-index: 10;
+ }
+ }
+ .clickable-dummy {
+ cursor: pointer;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ z-index: 1;
+ }
+ .scale {
+ top: 2px;
+ position: relative;
+ span {
+ position: absolute;
+ height: 5px;
+ border-left: 1px solid #999;
+ font-size: 0;
+ }
+ ins {
+ font-size: 9px;
+ text-decoration: none;
+ position: absolute;
+ left: 0;
+ top: 5px;
+ color: #999;
+ line-height: 1;
+ }
+ }
+}
+.theme-green {
+ .back-bar {
+ height: 5px;
+ border-radius: 2px;
+ background-color: #eeeeee;
+ #gradient > .vertical(#eeeeee, #dddddd);
+ .selected-bar {
+ border-radius: 2px;
+ #gradient > .vertical(#bdfade, #76fabc);
+ }
+ .pointer {
+ width: 14px;
+ height: 14px;
+ top: -5px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border-radius: 10px;
+ border: 1px solid #AAA;
+ #gradient > .vertical(#eeeeee, #dddddd);
+ cursor: col-resize;
+ }
+ .pointer-label {
+ color: #999;
+ }
+ .focused {
+ color: #333;
+ }
+ }
+ .scale {
+ span {
+ border-left: 1px solid #e5e5e5;
+ }
+ ins {
+ color: #999;
+ }
+ }
+}
+
+.theme-blue {
+ .back-bar {
+ height: 5px;
+ border-radius: 2px;
+ background-color: #eeeeee;
+ #gradient > .vertical(#eeeeee, #dddddd);
+ .selected-bar {
+ border-radius: 2px;
+ #gradient > .vertical(#b1d1f9, #64a8f9);
+ }
+ .pointer {
+ width: 14px;
+ height: 14px;
+ top: -5px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border-radius: 10px;
+ border: 1px solid #AAA;
+ #gradient > .vertical(#eeeeee, #dddddd);
+ cursor: col-resize;
+ }
+ .pointer-label {
+ color: #999;
+ }
+ .focused {
+ color: #333;
+ }
+ }
+ .scale {
+ span {
+ border-left: 1px solid #e5e5e5;
+ }
+ ins {
+ color: #999;
+ }
+ }
+}
diff --git a/library/jgrowl/README b/library/jgrowl/README
index 3c94f7508..d0f1a62ad 100644
--- a/library/jgrowl/README
+++ b/library/jgrowl/README
@@ -1,3 +1,3 @@
-http://stanlemon.net/projects/jgrowl.html
+https://github.com/stanlemon/jGrowl
jGrowl is free and open source, it's distributed under the MIT and GPL licenses
diff --git a/library/jgrowl/jquery.jgrowl.css b/library/jgrowl/jquery.jgrowl.css
index b4deb978c..ea3948415 100644
--- a/library/jgrowl/jquery.jgrowl.css
+++ b/library/jgrowl/jquery.jgrowl.css
@@ -1,136 +1 @@
-
-div.jGrowl {
- z-index: 9999;
- color: #fff;
- font-size: 12px;
-}
-
-/** Special IE6 Style Positioning **/
-div.ie6 {
- position: absolute;
-}
-
-div.ie6.top-right {
- right: auto;
- bottom: auto;
- left: expression( ( 0 - jGrowl.offsetWidth + ( document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth ) + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );
- top: expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );
-}
-
-div.ie6.top-left {
- left: expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );
- top: expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );
-}
-
-div.ie6.bottom-right {
- left: expression( ( 0 - jGrowl.offsetWidth + ( document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth ) + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );
- top: expression( ( 0 - jGrowl.offsetHeight + ( document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );
-}
-
-div.ie6.bottom-left {
- left: expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );
- top: expression( ( 0 - jGrowl.offsetHeight + ( document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );
-}
-
-div.ie6.center {
- left: expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );
- top: expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );
- width: 100%;
-}
-
-/** Normal Style Positions **/
-div.jGrowl {
- position: absolute;
-}
-
-body > div.jGrowl {
- position: fixed;
-}
-
-div.jGrowl.top-left {
- left: 0px;
- top: 0px;
-}
-
-div.jGrowl.top-right {
- right: 0px;
- top: 0px;
-}
-
-div.jGrowl.bottom-left {
- left: 0px;
- bottom: 0px;
-}
-
-div.jGrowl.bottom-right {
- right: 0px;
- bottom: 0px;
-}
-
-div.jGrowl.center {
- top: 0px;
- width: 50%;
- left: 25%;
-}
-
-/** Cross Browser Styling **/
-div.center div.jGrowl-notification, div.center div.jGrowl-closer {
- margin-left: auto;
- margin-right: auto;
-}
-
-div.jGrowl div.jGrowl-notification, div.jGrowl div.jGrowl-closer {
- background-color: #000;
- opacity: .85;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=85)";
- filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=85);
- zoom: 1;
- width: 235px;
- padding: 10px;
- margin-top: 5px;
- margin-bottom: 5px;
- font-family: Tahoma, Arial, Helvetica, sans-serif;
- font-size: 1em;
- text-align: left;
- display: none;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
-}
-
-div.jGrowl div.jGrowl-notification {
- min-height: 40px;
-}
-
-div.jGrowl div.jGrowl-notification,
-div.jGrowl div.jGrowl-closer {
- margin: 10px;
-}
-
-div.jGrowl div.jGrowl-notification div.jGrowl-header {
- font-weight: bold;
- font-size: .85em;
-}
-
-div.jGrowl div.jGrowl-notification div.jGrowl-close {
- z-index: 99;
- float: right;
- font-weight: bold;
- font-size: 1em;
- cursor: pointer;
-}
-
-div.jGrowl div.jGrowl-closer {
- padding-top: 4px;
- padding-bottom: 4px;
- cursor: pointer;
- font-size: .9em;
- font-weight: bold;
- text-align: center;
-}
-
-/** Hide jGrowl when printing **/
-@media print {
- div.jGrowl {
- display: none;
- }
-}
+.jGrowl{z-index:9999;color:#fff;font-size:12px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;position:fixed}.jGrowl.top-left{left:0;top:0}.jGrowl.top-right{right:0;top:0}.jGrowl.bottom-left{left:0;bottom:0}.jGrowl.bottom-right{right:0;bottom:0}.jGrowl.center{top:0;width:50%;left:25%}.jGrowl.center .jGrowl-closer,.jGrowl.center .jGrowl-notification{margin-left:auto;margin-right:auto}.jGrowl-notification{background-color:#000;opacity:.9;-ms-filter:alpha(90);filter:alpha(90);zoom:1;width:250px;padding:10px;margin:10px;text-align:left;display:none;border-radius:5px;min-height:40px}.jGrowl-notification .ui-state-highlight,.jGrowl-notification .ui-widget-content .ui-state-highlight,.jGrowl-notification .ui-widget-header .ui-state-highlight{border:1px solid #000;background:#000;color:#fff}.jGrowl-notification .jGrowl-header{font-weight:700;font-size:.85em}.jGrowl-notification .jGrowl-close{background-color:transparent;color:inherit;border:none;z-index:99;float:right;font-weight:700;font-size:1em;cursor:pointer}.jGrowl-closer{background-color:#000;opacity:.9;-ms-filter:alpha(90);filter:alpha(90);zoom:1;width:250px;padding:10px;margin:10px;display:none;border-radius:5px;padding-top:4px;padding-bottom:4px;cursor:pointer;font-size:.9em;font-weight:700;text-align:center}.jGrowl-closer .ui-state-highlight,.jGrowl-closer .ui-widget-content .ui-state-highlight,.jGrowl-closer .ui-widget-header .ui-state-highlight{border:1px solid #000;background:#000;color:#fff}@media print{.jGrowl{display:none}} \ No newline at end of file
diff --git a/library/jgrowl/jquery.jgrowl_minimized.js b/library/jgrowl/jquery.jgrowl_minimized.js
index 782898098..7e8b6fb35 100644
--- a/library/jgrowl/jquery.jgrowl_minimized.js
+++ b/library/jgrowl/jquery.jgrowl_minimized.js
@@ -1,11 +1,2 @@
-(function($){$.jGrowl=function(m,o){if($('#jGrowl').size()==0)
-$('<div id="jGrowl"></div>').addClass((o&&o.position)?o.position:$.jGrowl.defaults.position).appendTo('body');$('#jGrowl').jGrowl(m,o);};$.fn.jGrowl=function(m,o){if($.isFunction(this.each)){var args=arguments;return this.each(function(){var self=this;if($(this).data('jGrowl.instance')==undefined){$(this).data('jGrowl.instance',$.extend(new $.fn.jGrowl(),{notifications:[],element:null,interval:null}));$(this).data('jGrowl.instance').startup(this);}
-if($.isFunction($(this).data('jGrowl.instance')[m])){$(this).data('jGrowl.instance')[m].apply($(this).data('jGrowl.instance'),$.makeArray(args).slice(1));}else{$(this).data('jGrowl.instance').create(m,o);}});};};$.extend($.fn.jGrowl.prototype,{defaults:{pool:0,header:'',group:'',sticky:false,position:'top-right',glue:'after',theme:'default',themeState:'highlight',corners:'10px',check:250,life:3000,closeDuration:'normal',openDuration:'normal',easing:'swing',closer:true,closeTemplate:'&times;',closerTemplate:'<div>[ close all ]</div>',log:function(e,m,o){},beforeOpen:function(e,m,o){},afterOpen:function(e,m,o){},open:function(e,m,o){},beforeClose:function(e,m,o){},close:function(e,m,o){},animateOpen:{opacity:'show'},animateClose:{opacity:'hide'}},notifications:[],element:null,interval:null,create:function(message,o){var o=$.extend({},this.defaults,o);if(typeof o.speed!=='undefined'){o.openDuration=o.speed;o.closeDuration=o.speed;}
-this.notifications.push({message:message,options:o});o.log.apply(this.element,[this.element,message,o]);},render:function(notification){var self=this;var message=notification.message;var o=notification.options;var notification=$('<div class="jGrowl-notification '+o.themeState+' ui-corner-all'+
-((o.group!=undefined&&o.group!='')?' '+o.group:'')+'">'+'<div class="jGrowl-close">'+o.closeTemplate+'</div>'+'<div class="jGrowl-header">'+o.header+'</div>'+'<div class="jGrowl-message">'+message+'</div></div>').data("jGrowl",o).addClass(o.theme).children('div.jGrowl-close').bind("click.jGrowl",function(){$(this).parent().trigger('jGrowl.close');}).parent();$(notification).bind("mouseover.jGrowl",function(){$('div.jGrowl-notification',self.element).data("jGrowl.pause",true);}).bind("mouseout.jGrowl",function(){$('div.jGrowl-notification',self.element).data("jGrowl.pause",false);}).bind('jGrowl.beforeOpen',function(){if(o.beforeOpen.apply(notification,[notification,message,o,self.element])!=false){$(this).trigger('jGrowl.open');}}).bind('jGrowl.open',function(){if(o.open.apply(notification,[notification,message,o,self.element])!=false){if(o.glue=='after'){$('div.jGrowl-notification:last',self.element).after(notification);}else{$('div.jGrowl-notification:first',self.element).before(notification);}
-$(this).animate(o.animateOpen,o.openDuration,o.easing,function(){if($.browser.msie&&(parseInt($(this).css('opacity'),10)===1||parseInt($(this).css('opacity'),10)===0))
-this.style.removeAttribute('filter');if($(this).data("jGrowl")!=null)
-$(this).data("jGrowl").created=new Date();$(this).trigger('jGrowl.afterOpen');});}}).bind('jGrowl.afterOpen',function(){o.afterOpen.apply(notification,[notification,message,o,self.element]);}).bind('jGrowl.beforeClose',function(){if(o.beforeClose.apply(notification,[notification,message,o,self.element])!=false)
-$(this).trigger('jGrowl.close');}).bind('jGrowl.close',function(){$(this).data('jGrowl.pause',true);$(this).animate(o.animateClose,o.closeDuration,o.easing,function(){if($.isFunction(o.close)){if(o.close.apply(notification,[notification,message,o,self.element])!==false)
-$(this).remove();}else{$(this).remove();}});}).trigger('jGrowl.beforeOpen');if(o.corners!=''&&$.fn.corner!=undefined)$(notification).corner(o.corners);if($('div.jGrowl-notification:parent',self.element).size()>1&&$('div.jGrowl-closer',self.element).size()==0&&this.defaults.closer!=false){$(this.defaults.closerTemplate).addClass('jGrowl-closer ui-state-highlight ui-corner-all').addClass(this.defaults.theme).appendTo(self.element).animate(this.defaults.animateOpen,this.defaults.speed,this.defaults.easing).bind("click.jGrowl",function(){$(this).siblings().trigger("jGrowl.beforeClose");if($.isFunction(self.defaults.closer)){self.defaults.closer.apply($(this).parent()[0],[$(this).parent()[0]]);}});};},update:function(){$(this.element).find('div.jGrowl-notification:parent').each(function(){if($(this).data("jGrowl")!=undefined&&$(this).data("jGrowl").created!=undefined&&($(this).data("jGrowl").created.getTime()+parseInt($(this).data("jGrowl").life))<(new Date()).getTime()&&$(this).data("jGrowl").sticky!=true&&($(this).data("jGrowl.pause")==undefined||$(this).data("jGrowl.pause")!=true)){$(this).trigger('jGrowl.beforeClose');}});if(this.notifications.length>0&&(this.defaults.pool==0||$(this.element).find('div.jGrowl-notification:parent').size()<this.defaults.pool))
-this.render(this.notifications.shift());if($(this.element).find('div.jGrowl-notification:parent').size()<2){$(this.element).find('div.jGrowl-closer').animate(this.defaults.animateClose,this.defaults.speed,this.defaults.easing,function(){$(this).remove();});}},startup:function(e){this.element=$(e).addClass('jGrowl').append('<div class="jGrowl-notification"></div>');this.interval=setInterval(function(){$(e).data('jGrowl.instance').update();},parseInt(this.defaults.check));if($.browser.msie&&parseInt($.browser.version)<7&&!window["XMLHttpRequest"]){$(this.element).addClass('ie6');}},shutdown:function(){$(this.element).removeClass('jGrowl').find('div.jGrowl-notification').remove();clearInterval(this.interval);},close:function(){$(this.element).find('div.jGrowl-notification').each(function(){$(this).trigger('jGrowl.beforeClose');});}});$.jGrowl.defaults=$.fn.jGrowl.prototype.defaults;})(jQuery); \ No newline at end of file
+!function(a){a.jGrowl=function(b,c){0===a("#jGrowl").length&&a('<div id="jGrowl"></div>').addClass(c&&c.position?c.position:a.jGrowl.defaults.position).appendTo(c&&c.appendTo?c.appendTo:a.jGrowl.defaults.appendTo),a("#jGrowl").jGrowl(b,c)},a.fn.jGrowl=function(b,c){if(void 0===c&&a.isPlainObject(b)&&(c=b,b=c.message),a.isFunction(this.each)){var d=arguments;return this.each(function(){void 0===a(this).data("jGrowl.instance")&&(a(this).data("jGrowl.instance",a.extend(new a.fn.jGrowl,{notifications:[],element:null,interval:null})),a(this).data("jGrowl.instance").startup(this)),a.isFunction(a(this).data("jGrowl.instance")[b])?a(this).data("jGrowl.instance")[b].apply(a(this).data("jGrowl.instance"),a.makeArray(d).slice(1)):a(this).data("jGrowl.instance").create(b,c)})}},a.extend(a.fn.jGrowl.prototype,{defaults:{pool:0,header:"",group:"",sticky:!1,position:"top-right",appendTo:"body",glue:"after",theme:"default",themeState:"highlight",corners:"10px",check:250,life:3e3,closeDuration:"normal",openDuration:"normal",easing:"swing",closer:!0,closeTemplate:"&times;",closerTemplate:"<div>[ close all ]</div>",log:function(){},beforeOpen:function(){},afterOpen:function(){},open:function(){},beforeClose:function(){},close:function(){},click:function(){},animateOpen:{opacity:"show"},animateClose:{opacity:"hide"}},notifications:[],element:null,interval:null,create:function(b,c){var d=a.extend({},this.defaults,c);"undefined"!=typeof d.speed&&(d.openDuration=d.speed,d.closeDuration=d.speed),this.notifications.push({message:b,options:d}),d.log.apply(this.element,[this.element,b,d])},render:function(b){var c=this,d=b.message,e=b.options;e.themeState=""===e.themeState?"":"ui-state-"+e.themeState;var f=a("<div/>").addClass("jGrowl-notification alert "+e.themeState+" ui-corner-all"+(void 0!==e.group&&""!==e.group?" "+e.group:"")).append(a("<button/>").addClass("jGrowl-close").html(e.closeTemplate)).append(a("<div/>").addClass("jGrowl-header").html(e.header)).append(a("<div/>").addClass("jGrowl-message").html(d)).data("jGrowl",e).addClass(e.theme).children(".jGrowl-close").bind("click.jGrowl",function(){return a(this).parent().trigger("jGrowl.beforeClose"),!1}).parent();a(f).bind("mouseover.jGrowl",function(){a(".jGrowl-notification",c.element).data("jGrowl.pause",!0)}).bind("mouseout.jGrowl",function(){a(".jGrowl-notification",c.element).data("jGrowl.pause",!1)}).bind("jGrowl.beforeOpen",function(){e.beforeOpen.apply(f,[f,d,e,c.element])!==!1&&a(this).trigger("jGrowl.open")}).bind("jGrowl.open",function(){e.open.apply(f,[f,d,e,c.element])!==!1&&("after"==e.glue?a(".jGrowl-notification:last",c.element).after(f):a(".jGrowl-notification:first",c.element).before(f),a(this).animate(e.animateOpen,e.openDuration,e.easing,function(){a.support.opacity===!1&&this.style.removeAttribute("filter"),null!==a(this).data("jGrowl")&&"undefined"!=typeof a(this).data("jGrowl")&&(a(this).data("jGrowl").created=new Date),a(this).trigger("jGrowl.afterOpen")}))}).bind("jGrowl.afterOpen",function(){e.afterOpen.apply(f,[f,d,e,c.element])}).bind("click",function(){e.click.apply(f,[f.message,e,c.element])}).bind("jGrowl.beforeClose",function(){e.beforeClose.apply(f,[f,d,e,c.element])!==!1&&a(this).trigger("jGrowl.close")}).bind("jGrowl.close",function(){a(this).data("jGrowl.pause",!0),a(this).animate(e.animateClose,e.closeDuration,e.easing,function(){a.isFunction(e.close)?e.close.apply(f,[f,d,e,c.element])!==!1&&a(this).remove():a(this).remove()})}).trigger("jGrowl.beforeOpen"),""!==e.corners&&void 0!==a.fn.corner&&a(f).corner(e.corners),a(".jGrowl-notification:parent",c.element).length>1&&0===a(".jGrowl-closer",c.element).length&&this.defaults.closer!==!1&&a(this.defaults.closerTemplate).addClass("jGrowl-closer "+this.defaults.themeState+" ui-corner-all").addClass(this.defaults.theme).appendTo(c.element).animate(this.defaults.animateOpen,this.defaults.speed,this.defaults.easing).bind("click.jGrowl",function(){a(this).siblings().trigger("jGrowl.beforeClose"),a.isFunction(c.defaults.closer)&&c.defaults.closer.apply(a(this).parent()[0],[a(this).parent()[0]])})},update:function(){a(this.element).find(".jGrowl-notification:parent").each(function(){void 0!==a(this).data("jGrowl")&&void 0!==a(this).data("jGrowl").created&&a(this).data("jGrowl").created.getTime()+parseInt(a(this).data("jGrowl").life,10)<(new Date).getTime()&&a(this).data("jGrowl").sticky!==!0&&(void 0===a(this).data("jGrowl.pause")||a(this).data("jGrowl.pause")!==!0)&&a(this).trigger("jGrowl.beforeClose")}),this.notifications.length>0&&(0===this.defaults.pool||a(this.element).find(".jGrowl-notification:parent").length<this.defaults.pool)&&this.render(this.notifications.shift()),a(this.element).find(".jGrowl-notification:parent").length<2&&a(this.element).find(".jGrowl-closer").animate(this.defaults.animateClose,this.defaults.speed,this.defaults.easing,function(){a(this).remove()})},startup:function(b){this.element=a(b).addClass("jGrowl").append('<div class="jGrowl-notification"></div>'),this.interval=setInterval(function(){a(b).data("jGrowl.instance").update()},parseInt(this.defaults.check,10))},shutdown:function(){a(this.element).removeClass("jGrowl").find(".jGrowl-notification").trigger("jGrowl.close").parent().empty(),clearInterval(this.interval)},close:function(){a(this.element).find(".jGrowl-notification").each(function(){a(this).trigger("jGrowl.beforeClose")})}}),a.jGrowl.defaults=a.fn.jGrowl.prototype.defaults}(jQuery);
+//# sourceMappingURL=jquery.jgrowl.map \ No newline at end of file
diff --git a/library/jquery-textcomplete/LICENSE b/library/jquery-textcomplete/LICENSE
new file mode 100644
index 000000000..4848bd637
--- /dev/null
+++ b/library/jquery-textcomplete/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2013-2014 Yuku Takahashi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/library/jquery-textcomplete/jquery.textcomplete.js b/library/jquery-textcomplete/jquery.textcomplete.js
new file mode 100644
index 000000000..1e61683ea
--- /dev/null
+++ b/library/jquery-textcomplete/jquery.textcomplete.js
@@ -0,0 +1,1088 @@
+/*!
+ * jQuery.textcomplete
+ *
+ * Repository: https://github.com/yuku-t/jquery-textcomplete
+ * License: MIT (https://github.com/yuku-t/jquery-textcomplete/blob/master/LICENSE)
+ * Author: Yuku Takahashi
+ */
+
+if (typeof jQuery === 'undefined') {
+ throw new Error('jQuery.textcomplete requires jQuery');
+}
+
++function ($) {
+ 'use strict';
+
+ var warn = function (message) {
+ if (console.warn) { console.warn(message); }
+ };
+
+ $.fn.textcomplete = function (strategies, option) {
+ var args = Array.prototype.slice.call(arguments);
+ return this.each(function () {
+ var $this = $(this);
+ var completer = $this.data('textComplete');
+ if (!completer) {
+ completer = new $.fn.textcomplete.Completer(this, option || {});
+ $this.data('textComplete', completer);
+ }
+ if (typeof strategies === 'string') {
+ if (!completer) return;
+ args.shift()
+ completer[strategies].apply(completer, args);
+ if (strategies === 'destroy') {
+ $this.removeData('textComplete');
+ }
+ } else {
+ // For backward compatibility.
+ // TODO: Remove at v0.4
+ $.each(strategies, function (obj) {
+ $.each(['header', 'footer', 'placement', 'maxCount'], function (name) {
+ if (obj[name]) {
+ completer.option[name] = obj[name];
+ warn(name + 'as a strategy param is deprecated. Use option.');
+ delete obj[name];
+ }
+ });
+ });
+ completer.register($.fn.textcomplete.Strategy.parse(strategies));
+ }
+ });
+ };
+
+}(jQuery);
+
++function ($) {
+ 'use strict';
+
+ // Exclusive execution control utility.
+ //
+ // func - The function to be locked. It is executed with a function named
+ // `free` as the first argument. Once it is called, additional
+ // execution are ignored until the free is invoked. Then the last
+ // ignored execution will be replayed immediately.
+ //
+ // Examples
+ //
+ // var lockedFunc = lock(function (free) {
+ // setTimeout(function { free(); }, 1000); // It will be free in 1 sec.
+ // console.log('Hello, world');
+ // });
+ // lockedFunc(); // => 'Hello, world'
+ // lockedFunc(); // none
+ // lockedFunc(); // none
+ // // 1 sec past then
+ // // => 'Hello, world'
+ // lockedFunc(); // => 'Hello, world'
+ // lockedFunc(); // none
+ //
+ // Returns a wrapped function.
+ var lock = function (func) {
+ var locked, queuedArgsToReplay;
+
+ return function () {
+ // Convert arguments into a real array.
+ var args = Array.prototype.slice.call(arguments);
+ if (locked) {
+ // Keep a copy of this argument list to replay later.
+ // OK to overwrite a previous value because we only replay
+ // the last one.
+ queuedArgsToReplay = args;
+ return;
+ }
+ locked = true;
+ var self = this;
+ args.unshift(function replayOrFree() {
+ if (queuedArgsToReplay) {
+ // Other request(s) arrived while we were locked.
+ // Now that the lock is becoming available, replay
+ // the latest such request, then call back here to
+ // unlock (or replay another request that arrived
+ // while this one was in flight).
+ var replayArgs = queuedArgsToReplay;
+ queuedArgsToReplay = undefined;
+ replayArgs.unshift(replayOrFree);
+ func.apply(self, replayArgs);
+ } else {
+ locked = false;
+ }
+ });
+ func.apply(this, args);
+ };
+ };
+
+ var isString = function (obj) {
+ return Object.prototype.toString.call(obj) === '[object String]';
+ };
+
+ var uniqueId = 0;
+
+ function Completer(element, option) {
+ this.$el = $(element);
+ this.id = 'textcomplete' + uniqueId++;
+ this.strategies = [];
+ this.views = [];
+ this.option = $.extend({}, Completer._getDefaults(), option);
+
+ if (!this.$el.is('textarea') && !element.isContentEditable && element.contentEditable != 'true') {
+ throw new Error('textcomplete must be called on a Textarea or a ContentEditable.');
+ }
+
+ if (element === document.activeElement) {
+ // element has already been focused. Initialize view objects immediately.
+ this.initialize()
+ } else {
+ // Initialize view objects lazily.
+ var self = this;
+ this.$el.one('focus.' + this.id, function () { self.initialize(); });
+ }
+ }
+
+ Completer._getDefaults = function () {
+ if (!Completer.DEFAULTS) {
+ Completer.DEFAULTS = {
+ appendTo: $('body'),
+ zIndex: '100'
+ };
+ }
+
+ return Completer.DEFAULTS;
+ }
+
+ $.extend(Completer.prototype, {
+ // Public properties
+ // -----------------
+
+ id: null,
+ option: null,
+ strategies: null,
+ adapter: null,
+ dropdown: null,
+ $el: null,
+
+ // Public methods
+ // --------------
+
+ initialize: function () {
+ var element = this.$el.get(0);
+ // Initialize view objects.
+ this.dropdown = new $.fn.textcomplete.Dropdown(element, this, this.option);
+ var Adapter, viewName;
+ if (this.option.adapter) {
+ Adapter = this.option.adapter;
+ } else {
+ if (this.$el.is('textarea')) {
+ viewName = typeof element.selectionEnd === 'number' ? 'Textarea' : 'IETextarea';
+ } else {
+ viewName = 'ContentEditable';
+ }
+ Adapter = $.fn.textcomplete[viewName];
+ }
+ this.adapter = new Adapter(element, this, this.option);
+ },
+
+ destroy: function () {
+ this.$el.off('.' + this.id);
+ if (this.adapter) {
+ this.adapter.destroy();
+ }
+ if (this.dropdown) {
+ this.dropdown.destroy();
+ }
+ this.$el = this.adapter = this.dropdown = null;
+ },
+
+ // Invoke textcomplete.
+ trigger: function (text, skipUnchangedTerm) {
+ if (!this.dropdown) { this.initialize(); }
+ text != null || (text = this.adapter.getTextFromHeadToCaret());
+ var searchQuery = this._extractSearchQuery(text);
+ if (searchQuery.length) {
+ var term = searchQuery[1];
+ // Ignore shift-key, ctrl-key and so on.
+ if (skipUnchangedTerm && this._term === term) { return; }
+ this._term = term;
+ this._search.apply(this, searchQuery);
+ } else {
+ this._term = null;
+ this.dropdown.deactivate();
+ }
+ },
+
+ fire: function (eventName) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ this.$el.trigger(eventName, args);
+ return this;
+ },
+
+ register: function (strategies) {
+ Array.prototype.push.apply(this.strategies, strategies);
+ },
+
+ // Insert the value into adapter view. It is called when the dropdown is clicked
+ // or selected.
+ //
+ // value - The selected element of the array callbacked from search func.
+ // strategy - The Strategy object.
+ select: function (value, strategy) {
+ this.adapter.select(value, strategy);
+ this.fire('change').fire('textComplete:select', value, strategy);
+ this.adapter.focus();
+ },
+
+ // Private properties
+ // ------------------
+
+ _clearAtNext: true,
+ _term: null,
+
+ // Private methods
+ // ---------------
+
+ // Parse the given text and extract the first matching strategy.
+ //
+ // Returns an array including the strategy, the query term and the match
+ // object if the text matches an strategy; otherwise returns an empty array.
+ _extractSearchQuery: function (text) {
+ for (var i = 0; i < this.strategies.length; i++) {
+ var strategy = this.strategies[i];
+ var context = strategy.context(text);
+ if (context || context === '') {
+ if (isString(context)) { text = context; }
+ var match = text.match(strategy.match);
+ if (match) { return [strategy, match[strategy.index], match]; }
+ }
+ }
+ return []
+ },
+
+ // Call the search method of selected strategy..
+ _search: lock(function (free, strategy, term, match) {
+ var self = this;
+ strategy.search(term, function (data, stillSearching) {
+ if (!self.dropdown.shown) {
+ self.dropdown.activate();
+ self.dropdown.setPosition(self.adapter.getCaretPosition());
+ }
+ if (self._clearAtNext) {
+ // The first callback in the current lock.
+ self.dropdown.clear();
+ self._clearAtNext = false;
+ }
+ self.dropdown.render(self._zip(data, strategy));
+ if (!stillSearching) {
+ // The last callback in the current lock.
+ free();
+ self._clearAtNext = true; // Call dropdown.clear at the next time.
+ }
+ }, match);
+ }),
+
+ // Build a parameter for Dropdown#render.
+ //
+ // Examples
+ //
+ // this._zip(['a', 'b'], 's');
+ // //=> [{ value: 'a', strategy: 's' }, { value: 'b', strategy: 's' }]
+ _zip: function (data, strategy) {
+ return $.map(data, function (value) {
+ return { value: value, strategy: strategy };
+ });
+ }
+ });
+
+ $.fn.textcomplete.Completer = Completer;
+}(jQuery);
+
++function ($) {
+ 'use strict';
+
+ var include = function (zippedData, datum) {
+ var i, elem;
+ var idProperty = datum.strategy.idProperty
+ for (i = 0; i < zippedData.length; i++) {
+ elem = zippedData[i];
+ if (elem.strategy !== datum.strategy) continue;
+ if (idProperty) {
+ if (elem.value[idProperty] === datum.value[idProperty]) return true;
+ } else {
+ if (elem.value === datum.value) return true;
+ }
+ }
+ return false;
+ };
+
+ var dropdownViews = {};
+ $(document).on('click', function (e) {
+ var id = e.originalEvent && e.originalEvent.keepTextCompleteDropdown;
+ $.each(dropdownViews, function (key, view) {
+ if (key !== id) { view.deactivate(); }
+ });
+ });
+
+ // Dropdown view
+ // =============
+
+ // Construct Dropdown object.
+ //
+ // element - Textarea or contenteditable element.
+ function Dropdown(element, completer, option) {
+ this.$el = Dropdown.findOrCreateElement(option);
+ this.completer = completer;
+ this.id = completer.id + 'dropdown';
+ this._data = []; // zipped data.
+ this.$inputEl = $(element);
+ this.option = option;
+
+ // Override setPosition method.
+ if (option.listPosition) { this.setPosition = option.listPosition; }
+ if (option.height) { this.$el.height(option.height); }
+ var self = this;
+ $.each(['maxCount', 'placement', 'footer', 'header', 'className'], function (_i, name) {
+ if (option[name] != null) { self[name] = option[name]; }
+ });
+ this._bindEvents(element);
+ dropdownViews[this.id] = this;
+ }
+
+ $.extend(Dropdown, {
+ // Class methods
+ // -------------
+
+ findOrCreateElement: function (option) {
+ var $parent = option.appendTo;
+ if (!($parent instanceof $)) { $parent = $($parent); }
+ var $el = $parent.children('.dropdown-menu')
+ if (!$el.length) {
+ $el = $('<ul class="dropdown-menu"></ul>').css({
+ display: 'none',
+ left: 0,
+ position: 'absolute',
+ zIndex: option.zIndex
+ }).appendTo($parent);
+ }
+ return $el;
+ }
+ });
+
+ $.extend(Dropdown.prototype, {
+ // Public properties
+ // -----------------
+
+ $el: null, // jQuery object of ul.dropdown-menu element.
+ $inputEl: null, // jQuery object of target textarea.
+ completer: null,
+ footer: null,
+ header: null,
+ id: null,
+ maxCount: 10,
+ placement: '',
+ shown: false,
+ data: [], // Shown zipped data.
+ className: '',
+
+ // Public methods
+ // --------------
+
+ destroy: function () {
+ // Don't remove $el because it may be shared by several textcompletes.
+ this.deactivate();
+
+ this.$el.off('.' + this.id);
+ this.$inputEl.off('.' + this.id);
+ this.clear();
+ this.$el = this.$inputEl = this.completer = null;
+ delete dropdownViews[this.id]
+ },
+
+ render: function (zippedData) {
+ var contentsHtml = this._buildContents(zippedData);
+ var unzippedData = $.map(this.data, function (d) { return d.value; });
+ if (this.data.length) {
+ this._renderHeader(unzippedData);
+ this._renderFooter(unzippedData);
+ if (contentsHtml) {
+ this._renderContents(contentsHtml);
+ this._activateIndexedItem();
+ }
+ this._setScroll();
+ } else if (this.shown) {
+ this.deactivate();
+ }
+ },
+
+ setPosition: function (position) {
+ this.$el.css(this._applyPlacement(position));
+ return this;
+ },
+
+ clear: function () {
+ this.$el.html('');
+ this.data = [];
+ this._index = 0;
+ this._$header = this._$footer = null;
+ },
+
+ activate: function () {
+ if (!this.shown) {
+ this.clear();
+ this.$el.show();
+ if (this.className) { this.$el.addClass(this.className); }
+ this.completer.fire('textComplete:show');
+ this.shown = true;
+ }
+ return this;
+ },
+
+ deactivate: function () {
+ if (this.shown) {
+ this.$el.hide();
+ if (this.className) { this.$el.removeClass(this.className); }
+ this.completer.fire('textComplete:hide');
+ this.shown = false;
+ }
+ return this;
+ },
+
+ isUp: function (e) {
+ return e.keyCode === 38 || (e.ctrlKey && e.keyCode === 80); // UP, Ctrl-P
+ },
+
+ isDown: function (e) {
+ return e.keyCode === 40 || (e.ctrlKey && e.keyCode === 78); // DOWN, Ctrl-N
+ },
+
+ isEnter: function (e) {
+ var modifiers = e.ctrlKey || e.altKey || e.metaKey || e.shiftKey;
+ return !modifiers && (e.keyCode === 13 || e.keyCode === 9 || (this.option.completeOnSpace === true && e.keyCode === 32)) // ENTER, TAB
+ },
+
+ isPageup: function (e) {
+ return e.keyCode === 33; // PAGEUP
+ },
+
+ isPagedown: function (e) {
+ return e.keyCode === 34; // PAGEDOWN
+ },
+
+ // Private properties
+ // ------------------
+
+ _data: null, // Currently shown zipped data.
+ _index: null,
+ _$header: null,
+ _$footer: null,
+
+ // Private methods
+ // ---------------
+
+ _bindEvents: function () {
+ this.$el.on('mousedown.' + this.id, '.textcomplete-item', $.proxy(this._onClick, this))
+ this.$el.on('mouseover.' + this.id, '.textcomplete-item', $.proxy(this._onMouseover, this));
+ this.$inputEl.on('keydown.' + this.id, $.proxy(this._onKeydown, this));
+ },
+
+ _onClick: function (e) {
+ var $el = $(e.target);
+ e.preventDefault();
+ e.originalEvent.keepTextCompleteDropdown = this.id;
+ if (!$el.hasClass('textcomplete-item')) {
+ $el = $el.closest('.textcomplete-item');
+ }
+ var datum = this.data[parseInt($el.data('index'), 10)];
+ this.completer.select(datum.value, datum.strategy);
+ var self = this;
+ // Deactive at next tick to allow other event handlers to know whether
+ // the dropdown has been shown or not.
+ setTimeout(function () { self.deactivate(); }, 0);
+ },
+
+ // Activate hovered item.
+ _onMouseover: function (e) {
+ var $el = $(e.target);
+ e.preventDefault();
+ if (!$el.hasClass('textcomplete-item')) {
+ $el = $el.closest('.textcomplete-item');
+ }
+ this._index = parseInt($el.data('index'), 10);
+ this._activateIndexedItem();
+ },
+
+ _onKeydown: function (e) {
+ if (!this.shown) { return; }
+ if (this.isUp(e)) {
+ e.preventDefault();
+ this._up();
+ } else if (this.isDown(e)) {
+ e.preventDefault();
+ this._down();
+ } else if (this.isEnter(e)) {
+ e.preventDefault();
+ this._enter();
+ } else if (this.isPageup(e)) {
+ e.preventDefault();
+ this._pageup();
+ } else if (this.isPagedown(e)) {
+ e.preventDefault();
+ this._pagedown();
+ }
+ },
+
+ _up: function () {
+ if (this._index === 0) {
+ this._index = this.data.length - 1;
+ } else {
+ this._index -= 1;
+ }
+ this._activateIndexedItem();
+ this._setScroll();
+ },
+
+ _down: function () {
+ if (this._index === this.data.length - 1) {
+ this._index = 0;
+ } else {
+ this._index += 1;
+ }
+ this._activateIndexedItem();
+ this._setScroll();
+ },
+
+ _enter: function () {
+ var datum = this.data[parseInt(this._getActiveElement().data('index'), 10)];
+ this.completer.select(datum.value, datum.strategy);
+ this._setScroll();
+ },
+
+ _pageup: function () {
+ var target = 0;
+ var threshold = this._getActiveElement().position().top - this.$el.innerHeight();
+ this.$el.children().each(function (i) {
+ if ($(this).position().top + $(this).outerHeight() > threshold) {
+ target = i;
+ return false;
+ }
+ });
+ this._index = target;
+ this._activateIndexedItem();
+ this._setScroll();
+ },
+
+ _pagedown: function () {
+ var target = this.data.length - 1;
+ var threshold = this._getActiveElement().position().top + this.$el.innerHeight();
+ this.$el.children().each(function (i) {
+ if ($(this).position().top > threshold) {
+ target = i;
+ return false
+ }
+ });
+ this._index = target;
+ this._activateIndexedItem();
+ this._setScroll();
+ },
+
+ _activateIndexedItem: function () {
+ this.$el.find('.textcomplete-item.active').removeClass('active');
+ this._getActiveElement().addClass('active');
+ },
+
+ _getActiveElement: function () {
+ return this.$el.children('.textcomplete-item:nth(' + this._index + ')');
+ },
+
+ _setScroll: function () {
+ var $activeEl = this._getActiveElement();
+ var itemTop = $activeEl.position().top;
+ var itemHeight = $activeEl.outerHeight();
+ var visibleHeight = this.$el.innerHeight();
+ var visibleTop = this.$el.scrollTop();
+ if (this._index === 0 || this._index == this.data.length - 1 || itemTop < 0) {
+ this.$el.scrollTop(itemTop + visibleTop);
+ } else if (itemTop + itemHeight > visibleHeight) {
+ this.$el.scrollTop(itemTop + itemHeight + visibleTop - visibleHeight);
+ }
+ },
+
+ _buildContents: function (zippedData) {
+ var datum, i, index;
+ var html = '';
+ for (i = 0; i < zippedData.length; i++) {
+ if (this.data.length === this.maxCount) break;
+ datum = zippedData[i];
+ if (include(this.data, datum)) { continue; }
+ index = this.data.length;
+ this.data.push(datum);
+ html += '<li class="textcomplete-item" data-index="' + index + '"><a>';
+ html += datum.strategy.template(datum.value);
+ html += '</a></li>';
+ }
+ return html;
+ },
+
+ _renderHeader: function (unzippedData) {
+ if (this.header) {
+ if (!this._$header) {
+ this._$header = $('<li class="textcomplete-header"></li>').prependTo(this.$el);
+ }
+ var html = $.isFunction(this.header) ? this.header(unzippedData) : this.header;
+ this._$header.html(html);
+ }
+ },
+
+ _renderFooter: function (unzippedData) {
+ if (this.footer) {
+ if (!this._$footer) {
+ this._$footer = $('<li class="textcomplete-footer"></li>').appendTo(this.$el);
+ }
+ var html = $.isFunction(this.footer) ? this.footer(unzippedData) : this.footer;
+ this._$footer.html(html);
+ }
+ },
+
+ _renderContents: function (html) {
+ if (this._$footer) {
+ this._$footer.before(html);
+ } else {
+ this.$el.append(html);
+ }
+ },
+
+ _applyPlacement: function (position) {
+ // If the 'placement' option set to 'top', move the position above the element.
+ if (this.placement.indexOf('top') !== -1) {
+ // Overwrite the position object to set the 'bottom' property instead of the top.
+ position = {
+ top: 'auto',
+ bottom: this.$el.parent().height() - position.top + position.lineHeight,
+ left: position.left
+ };
+ } else {
+ position.bottom = 'auto';
+ delete position.lineHeight;
+ }
+ if (this.placement.indexOf('absleft') !== -1) {
+ position.left = 0;
+ } else if (this.placement.indexOf('absright') !== -1) {
+ position.right = 0;
+ position.left = 'auto';
+ }
+ return position;
+ }
+ });
+
+ $.fn.textcomplete.Dropdown = Dropdown;
+}(jQuery);
+
++function ($) {
+ 'use strict';
+
+ // Memoize a search function.
+ var memoize = function (func) {
+ var memo = {};
+ return function (term, callback) {
+ if (memo[term]) {
+ callback(memo[term]);
+ } else {
+ func.call(this, term, function (data) {
+ memo[term] = (memo[term] || []).concat(data);
+ callback.apply(null, arguments);
+ });
+ }
+ };
+ };
+
+ function Strategy(options) {
+ $.extend(this, options);
+ if (this.cache) { this.search = memoize(this.search); }
+ }
+
+ Strategy.parse = function (optionsArray) {
+ return $.map(optionsArray, function (options) {
+ return new Strategy(options);
+ });
+ };
+
+ $.extend(Strategy.prototype, {
+ // Public properties
+ // -----------------
+
+ // Required
+ match: null,
+ replace: null,
+ search: null,
+
+ // Optional
+ cache: false,
+ context: function () { return true; },
+ index: 2,
+ template: function (obj) { return obj; },
+ idProperty: null
+ });
+
+ $.fn.textcomplete.Strategy = Strategy;
+
+}(jQuery);
+
++function ($) {
+ 'use strict';
+
+ var now = Date.now || function () { return new Date().getTime(); };
+
+ // Returns a function, that, as long as it continues to be invoked, will not
+ // be triggered. The function will be called after it stops being called for
+ // `wait` msec.
+ //
+ // This utility function was originally implemented at Underscore.js.
+ var debounce = function (func, wait) {
+ var timeout, args, context, timestamp, result;
+ var later = function () {
+ var last = now() - timestamp;
+ if (last < wait) {
+ timeout = setTimeout(later, wait - last);
+ } else {
+ timeout = null;
+ result = func.apply(context, args);
+ context = args = null;
+ }
+ };
+
+ return function () {
+ context = this;
+ args = arguments;
+ timestamp = now();
+ if (!timeout) {
+ timeout = setTimeout(later, wait);
+ }
+ return result;
+ };
+ };
+
+ function Adapter () {}
+
+ $.extend(Adapter.prototype, {
+ // Public properties
+ // -----------------
+
+ id: null, // Identity.
+ completer: null, // Completer object which creates it.
+ el: null, // Textarea element.
+ $el: null, // jQuery object of the textarea.
+ option: null,
+
+ // Public methods
+ // --------------
+
+ initialize: function (element, completer, option) {
+ this.el = element;
+ this.$el = $(element);
+ this.id = completer.id + this.constructor.name;
+ this.completer = completer;
+ this.option = option;
+
+ if (this.option.debounce) {
+ this._onKeyup = debounce(this._onKeyup, this.option.debounce);
+ }
+
+ this._bindEvents();
+ },
+
+ destroy: function () {
+ this.$el.off('.' + this.id); // Remove all event handlers.
+ this.$el = this.el = this.completer = null;
+ },
+
+ // Update the element with the given value and strategy.
+ //
+ // value - The selected object. It is one of the item of the array
+ // which was callbacked from the search function.
+ // strategy - The Strategy associated with the selected value.
+ select: function (/* value, strategy */) {
+ throw new Error('Not implemented');
+ },
+
+ // Returns the caret's relative coordinates from body's left top corner.
+ //
+ // FIXME: Calculate the left top corner of `this.option.appendTo` element.
+ getCaretPosition: function () {
+ var position = this._getCaretRelativePosition();
+ var offset = this.$el.offset();
+ position.top += offset.top;
+ position.left += offset.left;
+ return position;
+ },
+
+ // Focus on the element.
+ focus: function () {
+ this.$el.focus();
+ },
+
+ // Private methods
+ // ---------------
+
+ _bindEvents: function () {
+ this.$el.on('keyup.' + this.id, $.proxy(this._onKeyup, this));
+ },
+
+ _onKeyup: function (e) {
+ if (this._skipSearch(e)) { return; }
+ this.completer.trigger(this.getTextFromHeadToCaret(), true);
+ },
+
+ // Suppress searching if it returns true.
+ _skipSearch: function (clickEvent) {
+ switch (clickEvent.keyCode) {
+ case 40: // DOWN
+ case 38: // UP
+ return true;
+ }
+ if (clickEvent.ctrlKey) switch (clickEvent.keyCode) {
+ case 78: // Ctrl-N
+ case 80: // Ctrl-P
+ return true;
+ }
+ }
+ });
+
+ $.fn.textcomplete.Adapter = Adapter;
+}(jQuery);
+
++function ($) {
+ 'use strict';
+
+ // Textarea adapter
+ // ================
+ //
+ // Managing a textarea. It doesn't know a Dropdown.
+ function Textarea(element, completer, option) {
+ this.initialize(element, completer, option);
+ }
+
+ Textarea.DIV_PROPERTIES = {
+ left: -9999,
+ position: 'absolute',
+ top: 0,
+ whiteSpace: 'pre-wrap'
+ }
+
+ Textarea.COPY_PROPERTIES = [
+ 'border-width', 'font-family', 'font-size', 'font-style', 'font-variant',
+ 'font-weight', 'height', 'letter-spacing', 'word-spacing', 'line-height',
+ 'text-decoration', 'text-align', 'width', 'padding-top', 'padding-right',
+ 'padding-bottom', 'padding-left', 'margin-top', 'margin-right',
+ 'margin-bottom', 'margin-left', 'border-style', 'box-sizing', 'tab-size'
+ ];
+
+ $.extend(Textarea.prototype, $.fn.textcomplete.Adapter.prototype, {
+ // Public methods
+ // --------------
+
+ // Update the textarea with the given value and strategy.
+ select: function (value, strategy) {
+ var pre = this.getTextFromHeadToCaret();
+ var post = this.el.value.substring(this.el.selectionEnd);
+ var newSubstr = strategy.replace(value);
+ if ($.isArray(newSubstr)) {
+ post = newSubstr[1] + post;
+ newSubstr = newSubstr[0];
+ }
+ pre = pre.replace(strategy.match, newSubstr);
+ this.$el.val(pre + post);
+ this.el.selectionStart = this.el.selectionEnd = pre.length;
+ },
+
+ // Private methods
+ // ---------------
+
+ // Returns the caret's relative coordinates from textarea's left top corner.
+ //
+ // Browser native API does not provide the way to know the position of
+ // caret in pixels, so that here we use a kind of hack to accomplish
+ // the aim. First of all it puts a dummy div element and completely copies
+ // the textarea's style to the element, then it inserts the text and a
+ // span element into the textarea.
+ // Consequently, the span element's position is the thing what we want.
+ _getCaretRelativePosition: function () {
+ var dummyDiv = $('<div></div>').css(this._copyCss())
+ .text(this.getTextFromHeadToCaret());
+ var span = $('<span></span>').text('.').appendTo(dummyDiv);
+ this.$el.before(dummyDiv);
+ var position = span.position();
+ position.top += span.height() - this.$el.scrollTop();
+ position.lineHeight = span.height();
+ dummyDiv.remove();
+ return position;
+ },
+
+ _copyCss: function () {
+ return $.extend({
+ // Set 'scroll' if a scrollbar is being shown; otherwise 'auto'.
+ overflow: this.el.scrollHeight > this.el.offsetHeight ? 'scroll' : 'auto'
+ }, Textarea.DIV_PROPERTIES, this._getStyles());
+ },
+
+ _getStyles: (function ($) {
+ var color = $('<div></div>').css(['color']).color;
+ if (typeof color !== 'undefined') {
+ return function () {
+ return this.$el.css(Textarea.COPY_PROPERTIES);
+ };
+ } else { // jQuery < 1.8
+ return function () {
+ var $el = this.$el;
+ var styles = {};
+ $.each(Textarea.COPY_PROPERTIES, function (i, property) {
+ styles[property] = $el.css(property);
+ });
+ return styles;
+ };
+ }
+ })($),
+
+ getTextFromHeadToCaret: function () {
+ return this.el.value.substring(0, this.el.selectionEnd);
+ }
+ });
+
+ $.fn.textcomplete.Textarea = Textarea;
+}(jQuery);
+
++function ($) {
+ 'use strict';
+
+ var sentinelChar = 'å¶';
+
+ function IETextarea(element, completer, option) {
+ this.initialize(element, completer, option);
+ $('<span>' + sentinelChar + '</span>').css({
+ position: 'absolute',
+ top: -9999,
+ left: -9999
+ }).insertBefore(element);
+ }
+
+ $.extend(IETextarea.prototype, $.fn.textcomplete.Textarea.prototype, {
+ // Public methods
+ // --------------
+
+ select: function (value, strategy) {
+ var pre = this.getTextFromHeadToCaret();
+ var post = this.el.value.substring(pre.length);
+ var newSubstr = strategy.replace(value);
+ if ($.isArray(newSubstr)) {
+ post = newSubstr[1] + post;
+ newSubstr = newSubstr[0];
+ }
+ pre = pre.replace(strategy.match, newSubstr);
+ this.$el.val(pre + post);
+ this.el.focus();
+ var range = this.el.createTextRange();
+ range.collapse(true);
+ range.moveEnd('character', pre.length);
+ range.moveStart('character', pre.length);
+ range.select();
+ },
+
+ getTextFromHeadToCaret: function () {
+ this.el.focus();
+ var range = document.selection.createRange();
+ range.moveStart('character', -this.el.value.length);
+ var arr = range.text.split(sentinelChar)
+ return arr.length === 1 ? arr[0] : arr[1];
+ }
+ });
+
+ $.fn.textcomplete.IETextarea = IETextarea;
+}(jQuery);
+
+// NOTE: TextComplete plugin has contenteditable support but it does not work
+// fine especially on old IEs.
+// Any pull requests are REALLY welcome.
+
++function ($) {
+ 'use strict';
+
+ // ContentEditable adapter
+ // =======================
+ //
+ // Adapter for contenteditable elements.
+ function ContentEditable (element, completer, option) {
+ this.initialize(element, completer, option);
+ }
+
+ $.extend(ContentEditable.prototype, $.fn.textcomplete.Adapter.prototype, {
+ // Public methods
+ // --------------
+
+ // Update the content with the given value and strategy.
+ // When an dropdown item is selected, it is executed.
+ select: function (value, strategy) {
+ var pre = this.getTextFromHeadToCaret();
+ var sel = window.getSelection()
+ var range = sel.getRangeAt(0);
+ var selection = range.cloneRange();
+ selection.selectNodeContents(range.startContainer);
+ var content = selection.toString();
+ var post = content.substring(range.startOffset);
+ var newSubstr = strategy.replace(value);
+ if ($.isArray(newSubstr)) {
+ post = newSubstr[1] + post;
+ newSubstr = newSubstr[0];
+ }
+ pre = pre.replace(strategy.match, newSubstr);
+ range.selectNodeContents(range.startContainer);
+ range.deleteContents();
+ var node = document.createTextNode(pre + post);
+ range.insertNode(node);
+ range.setStart(node, pre.length);
+ range.collapse(true);
+ sel.removeAllRanges();
+ sel.addRange(range);
+ },
+
+ // Private methods
+ // ---------------
+
+ // Returns the caret's relative position from the contenteditable's
+ // left top corner.
+ //
+ // Examples
+ //
+ // this._getCaretRelativePosition()
+ // //=> { top: 18, left: 200, lineHeight: 16 }
+ //
+ // Dropdown's position will be decided using the result.
+ _getCaretRelativePosition: function () {
+ var range = window.getSelection().getRangeAt(0).cloneRange();
+ var node = document.createElement('span');
+ range.insertNode(node);
+ range.selectNodeContents(node);
+ range.deleteContents();
+ var $node = $(node);
+ var position = $node.offset();
+ position.left -= this.$el.offset().left;
+ position.top += $node.height() - this.$el.offset().top;
+ position.lineHeight = $node.height();
+ var dir = this.$el.attr('dir') || this.$el.css('direction');
+ if (dir === 'rtl') { position.left -= this.listView.$el.width(); }
+ return position;
+ },
+
+ // Returns the string between the first character and the caret.
+ // Completer will be triggered with the result for start autocompleting.
+ //
+ // Example
+ //
+ // // Suppose the html is '<b>hello</b> wor|ld' and | is the caret.
+ // this.getTextFromHeadToCaret()
+ // // => ' wor' // not '<b>hello</b> wor'
+ getTextFromHeadToCaret: function () {
+ var range = window.getSelection().getRangeAt(0);
+ var selection = range.cloneRange();
+ selection.selectNodeContents(range.startContainer);
+ return selection.toString().substring(0, range.startOffset);
+ }
+ });
+
+ $.fn.textcomplete.ContentEditable = ContentEditable;
+}(jQuery);
diff --git a/library/jquery.AreYouSure/.gitignore b/library/jquery.AreYouSure/.gitignore
new file mode 100644
index 000000000..345f0dbeb
--- /dev/null
+++ b/library/jquery.AreYouSure/.gitignore
@@ -0,0 +1,166 @@
+#################
+## Eclipse
+#################
+
+*.pydevproject
+.project
+.metadata
+bin/
+tmp/
+*.tmp
+*.bak
+*.swp
+*~.nib
+local.properties
+.classpath
+.settings/
+.loadpath
+
+# External tool builders
+.externalToolBuilders/
+
+# Locally stored "Eclipse launch configurations"
+*.launch
+
+# CDT-specific
+.cproject
+
+# PDT-specific
+.buildpath
+
+
+#################
+## Visual Studio
+#################
+
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+
+# User-specific files
+*.suo
+*.user
+*.sln.docstates
+
+# Build results
+[Dd]ebug/
+[Rr]elease/
+*_i.c
+*_p.c
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.vspscc
+.builds
+*.dotCover
+
+## TODO: If you have NuGet Package Restore enabled, uncomment this
+#packages/
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opensdf
+*.sdf
+
+# Visual Studio profiler
+*.psess
+*.vsp
+
+# ReSharper is a .NET coding add-in
+_ReSharper*
+
+# Installshield output folder
+[Ee]xpress
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish
+
+# Others
+[Bb]in
+[Oo]bj
+sql
+TestResults
+*.Cache
+ClientBin
+stylecop.*
+~$*
+*.dbmdl
+Generated_Code #added for RIA/Silverlight projects
+
+# Backup & report files from converting an old project file to a newer
+# Visual Studio version. Backup files are not needed, because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+
+
+
+############
+## Windows
+############
+
+# Windows image file caches
+Thumbs.db
+
+# Folder config file
+Desktop.ini
+
+
+#############
+## Python
+#############
+
+*.py[co]
+
+# Packages
+*.egg
+*.egg-info
+dist
+build
+eggs
+parts
+bin
+var
+sdist
+develop-eggs
+.installed.cfg
+
+# Installer logs
+pip-log.txt
+
+# Unit test / coverage reports
+.coverage
+.tox
+
+#Translations
+*.mo
+
+#Mr Developer
+.mr.developer.cfg
+
+# Mac crap
+.DS_Store
+
+bower_components/
+node_modules/
diff --git a/library/jquery.AreYouSure/Gruntfile.js b/library/jquery.AreYouSure/Gruntfile.js
new file mode 100644
index 000000000..efca34c0a
--- /dev/null
+++ b/library/jquery.AreYouSure/Gruntfile.js
@@ -0,0 +1,26 @@
+module.exports = function(grunt) {
+ grunt.config.init({
+ karma: {
+ options: {
+ browsers: [ 'Chrome', 'Firefox', 'Safari', 'IE' ],
+ frameworks: [ 'jasmine' ],
+ reportSlowerThan: 500,
+ singleRun: true
+ },
+ unit: {
+ files: [
+ { pattern: 'bower_components/jquery/dist/jquery.min.js' },
+ { pattern: 'bower_components/jasmine-jquery/lib/jasmine-jquery.js' },
+ { pattern: 'jquery.are-you-sure.js' },
+ { pattern: 'spec/javascripts/*.js' },
+ { pattern: 'spec/javascripts/fixtures/**/*.html', included: false }
+ ]
+ }
+ }
+ });
+
+ grunt.registerTask('test', 'Run tests.', [ 'karma' ]);
+ grunt.registerTask('default', [ 'test' ]);
+
+ grunt.loadNpmTasks('grunt-karma');
+};
diff --git a/library/jquery.AreYouSure/README.md b/library/jquery.AreYouSure/README.md
new file mode 100644
index 000000000..6a538648a
--- /dev/null
+++ b/library/jquery.AreYouSure/README.md
@@ -0,0 +1,297 @@
+Are You Sure? - A light "dirty forms" JQuery Plugin
+======
+**Version:** 1.9
+
+*Are-you-sure* (```jquery.are-you-sure.js```) is simple light-weight "dirty
+form" JQuery Plugin for modern browsers. It helps prevent users from losing
+unsaved HTML Form changes by promoting the user to save/submit.
+
+It's simple to use. Just add the following line to your page's ready
+function:
+
+```javascript
+$('form').areYouSure();
+```
+
+*Are-you-sure* is a minimal plugin for modern browsers. There are plenty of
+"dirty forms" implementations out there, however they all seemed very
+heavyweight and over-engineered...! Most were written some time back and
+contain many 'hacks' to support legacy browsers, and/or rely on other fat
+dependencies such as FaceBox or jQueryUI. *Are-you-sure* solves this by
+doing this simple task in the simplest possible way.
+
+*Are-you-sure* is as simple as it gets:
+
+ * 100% JS with zero dependencies and no external CSS.
+ * Leverages `onBeforeUnload` to detect all page/browser exit events.
+ * Works on forms of any size.
+ * Correct state management - if a user edits then restores a value, the form
+ is not considered dirty.
+ * Easy to understand - less than a "terminal screen" of code!
+ * Graceful degradation on legacy browsers (i.e. if you're running an old
+ browser... remember to save :-)
+
+###Basic Usage
+
+```javascript
+
+$(function() {
+
+ // Enable on all forms
+ $('form').areYouSure();
+
+ // Enable on selected forms
+ $('form.dirty-check').areYouSure();
+
+ // With a custom message
+ $('form').areYouSure( {'message':'Your profile details are not saved!'} );
+
+}
+```
+To ignore selected fields from the dirtyness check:
+
+```html
+ <form id="myForm" name="myform" action="/post" method="post">
+
+ Field 1: (checked) <input type="text" name="field1"> <br />
+ Field 2: (ignored): <input type="text" name="field2" data-ays-ignore="true"> <br />
+ Field 3: (ignored): <input type="text" name="field3" class="ays-ignore"> <br />
+
+ <input type="submit" value="Submit">
+
+ </form>
+```
+
+###Advanced Usage
+
+```javascript
+
+$(function() {
+
+ /*
+ * Make Are-You-Sure "silent" by disabling the warning message
+ * (tracking/monitoring only mode). This option is useful when you wish to
+ * use the dirty/save events and/or use the dirtyness tracking in your own
+ * beforeunload handler.
+ */
+ $('form').areYouSure( {'silent':true} );
+
+ /*
+ * Dirtyness Change Events
+ * Are-You-Sure fires off "dirty" and "clean" events when the form's state
+ * changes. You can bind() or on(), these events to implement your own form
+ * state logic. A good example is enabling/disabling a Save button.
+ *
+ * "this" refers to the form that fired the event.
+ */
+ $('form').on('dirty.areYouSure', function() {
+ // Enable save button only as the form is dirty.
+ $(this).find('input[type="submit"]').removeAttr('disabled');
+ });
+ $('form').on('clean.areYouSure', function() {
+ // Form is clean so nothing to save - disable the save button.
+ $(this).find('input[type="submit"]').attr('disabled', 'disabled');
+ });
+
+ /*
+ * It's easy to test if a form is dirty in your own code - just check
+ * to see if it has a "dirty" CSS class.
+ */
+ if ($('#my-form').hasClass('dirty')) {
+ // Do something
+ }
+
+ /*
+ * If you're dynamically adding new fields/inputs, and would like to track
+ * their state, trigger Are-You-Sure to rescan the form like this:
+ */
+ $('#my-form').trigger('rescan.areYouSure');
+
+ /*
+ * If you'd like to reset/reinitialize the form's state as clean and
+ * start tracking again from this new point onwards, trigger the
+ * reinitalize as follows. This is handy if say you've managing your
+ * own form save/submit via asyc AJAX.
+ */
+ $('#my-form').trigger('reinitialize.areYouSure');
+
+ /*
+ * In some situations it may be desirable to look for other form
+ * changes such as adding/removing fields. This is useful for forms that
+ * can change their field count, such as address/phone contact forms.
+ * Form example, you might remove a phone number from a contact form
+ * but update nothing else. This should mark the form as dirty.
+ */
+ $('form').areYouSure( {'addRemoveFieldsMarksDirty':true} );
+
+ /*
+ * Sometimes you may have advanced forms that change their state via
+ * custom JavaScript or 3rd-party component JavaScript. Are-You-Sure may
+ * not automatically detect these state changes. Examples include:
+ * - Updating a hidden input field via background JS.
+ * - Using a [rich WYSIWYG edit control](https://github.com/codedance/jquery.AreYouSure/issues/17).
+ * One solution is to manually trigger a form check as follows:
+ */
+ $('#my-form').trigger('checkform.areYouSure');
+
+ /*
+ * As an alternative to using events, you can pass in a custom change
+ * function.
+ */
+ $('#my-adv-form').areYouSure({
+ change: function() {
+ // Enable save button only if the form is dirty. i.e. something to save.
+ if ($(this).hasClass('dirty')) {
+ $(this).find('input[type="submit"]').removeAttr('disabled');
+ } else {
+ $(this).find('input[type="submit"]').attr('disabled', 'disabled');
+ }
+ }
+ });
+
+ /*
+ * Mixing in your own logic into the warning.
+ */
+ $('#my-form').areYouSure( {'silent':true} );
+ $(window).on('beforeunload', function() {
+ isSunday = (0 == (new Date()).getDay());
+ if ($('#my-form').hasClass('dirty') && isSunday) {
+ return "Because it's Sunday, I'll be nice and let you know you forgot to save!";
+ }
+ }
+
+}
+```
+The [demo page](http://www.papercut.com/products/free_software/are-you-sure/demo/are-you-sure-demo.html)
+shows the advanced usage options in more detail.
+
+
+###Install
+Are-You-Sure is a light-weight jQuery plugin - it's a single standalone
+JavaScript file. You can download the
+[jquery.are-you-sure.js](https://raw.github.com/codedance/jquery.AreYouSure/master/jquery.are-you-sure.js)
+file and include it in your page. Because it's so simple it seems a shame
+to add an extra browser round trip. It's recommended that you consider
+concatenating it with other common JS lib files, and/or even cut-n-pasting
+the code (and license header) into one of your existing JS files.
+
+For experimental Mobile Safari support, also include ```ays-beforeunload-shim.js```
+(see Known Issues below).
+
+*Are-you-sure* may also be installed with [Bower](http://twitter.github.com/bower/):
+
+```bash
+$ bower install jquery.are-you-sure
+```
+
+If you're using, or like, *Are-you-sure* make sure you **star/watch** this project
+so you can stay up-to-date with updates.
+
+###Demo
+This [demo page](http://www.papercut.com/products/free_software/are-you-sure/demo/are-you-sure-demo.html)
+hosts a number of example forms.
+
+###Supported Browsers
+*Are-you-sure* has been tested on and fully supports the following browsers:
+
+* IE 9 through 11
+* Google Chrome (versions since 2012)
+* Firefox (versions since 2012)
+* Safari (versions since 2012)
+
+Experimental support is available on iOS and Opera via the *beforeunload* shim (see below).
+
+###Known Issues & Limitations
+
+####Mobile Safari and Opera
+The ```windows.beforeunload``` event is not supported on iOS (iPhone, iPad, and iPod). An
+experimental shim offering partial *beforeunload* emulation is provided to help plug this gap.
+It works by scanning the page for anchor links and augments the default behaviour to first
+check with *Are-you-sure* before navigating away. To use, simply include
+```ays-beforeunload-shim.js``` in your page.
+
+####Firefox
+The custom message option may not work on Firefox ([Firefox bug 588292](https://bugzilla.mozilla.org/show_bug.cgi?id=588292)).
+
+###Development
+The aim is to keep *Are-you-sure* simple and light. If you think you have
+a good idea which is aligned with this objective, please voice your thoughts
+in the issues list.
+
+####Pull Requests
+If possible, please submit your pull request against the most recent ```dev-*``` branch rather than master. This will make it easier to merge your code into the next planned release.
+
+####Running tests
+```bash
+$ npm install
+$ npm test
+```
+
+###Release History
+
+**2014-08-13** (1.9) - This is a minor bugfix release:
+
+* Addressed issue [#45](https://github.com/codedance/jquery.AreYouSure/issues/55) seen with empty select fields.
+* Thanks [valgen](https://github.com/valgen) and [tus124](https://github.com/tus124) for the contribution.
+
+**2014-06-22** (1.8) - This is a minor bugfix release:
+
+* Fixed NPE that may occur when using a 'multiple' option field.
+* Minor timing tweak to help mitigate bypass issue raised in [#45](https://github.com/codedance/jquery.AreYouSure/issues/45)
+* Thanks [apassant](https://github.com/apassant) and [amatenkov](https://github.com/amatenkov) for the contribution.
+
+**2014-05-28** (1.7)
+
+* Fixed multiple warning dialogs that may appear on IE and recent versions of Chrome
+* Experimental support for iOS Mobile Safari (via a *beforeunload* shim)
+* Various minor fixes (e.g. support input fields with no type=)
+* Minor performance improvements on pages with multiple forms
+* Improved documentation and examples
+* Thanks to [lfjeff](https://github.com/lfjeff) and [aqlong](https://github.com/aqlong) for the contribution and ideas!
+
+**2014-02-07** (1.6)
+
+* Add field count tracking (```addRemoveFieldsMarksDirty```) (contrib *jonegerton*)
+* Added event to manually trigger a form check/recheck (contrib *jonegerton*)
+* Thanks to [jonegerton](https://github.com/jonegerton) for the contribution!
+
+**2013-11-15** (1.5)
+
+* Added support for HTML5 input field types. (contrib *albinsunnanbo*)
+* New option to reinitialize/reset the dirty state. This is handy if you're managing your own async submit/save using AJAX. (contrib *albinsunnanbo*)
+* Thanks to [albinsunnanbo](https://github.com/albinsunnanbo) for the contribution!
+
+**2013-10-2** (1.4)
+
+* Added dirty and clean "events"
+* Added an option to disable the message (dirty tracking only)
+* Added an option to rescan a form to look/detect any new fields
+
+**2013-07-24** - Minor fix - don't fail if form elements have no "name" attribute.
+
+**2013-05-14** - Added support for form reset buttons (contributed by codev).
+
+**2013-05-01** - Added support for hidden and disabled form fields.
+
+**2013-02-03** - Add demo page.
+
+**2013-01-28** - Add ```change``` event support and a demo page.
+
+**2012-10-26** - Use dashes in class names rather than camel case.
+
+**2012-10-24** - Initial public release.
+
+
+###Prerequisites
+jQuery version 1.4.2 or higher. 2.0+ or 1.10+ recommended.
+
+
+###License
+The same as JQuery...
+
+ jQuery Plugin: Are-You-Sure (Dirty Form Detection)
+ https://github.com/codedance/jquery.AreYouSure/
+
+ Copyright (c) 2012-2014, Chris Dance - PaperCut Software http://www.papercut.com/
+ Dual licensed under the MIT or GPL Version 2 licenses.
+ http://jquery.org/license
diff --git a/library/jquery.AreYouSure/are-you-sure.jquery.json b/library/jquery.AreYouSure/are-you-sure.jquery.json
new file mode 100644
index 000000000..9c699b72b
--- /dev/null
+++ b/library/jquery.AreYouSure/are-you-sure.jquery.json
@@ -0,0 +1,39 @@
+{
+ "name": "are-you-sure",
+ "title": "Are You Sure? - a dirty forms check plugin",
+ "description": "Are-you-sure is simple light-weight dirty forms JQuery Plugin for modern browsers. It helps prevent users from loosing unsaved form changes by prompting the user to save/submit. It's dependency free and designed for modern browsers... just the features you need and nothing more! See the project page and demo for usage and examples.",
+ "keywords": [
+ "form",
+ "dirty",
+ "field",
+ "change",
+ "save",
+ "save-check",
+ "save-warning"
+ ],
+ "version": "1.9.0",
+ "author": {
+ "name": "Chris Dance (codedance) at PaperCut Software",
+ "url": "https://github.com/codedance"
+ },
+ "maintainers": [
+ {
+ "name": "Chris Dance",
+ "email": "chris.dance@papercut.com",
+ "url": "http://www.papercut.com/"
+ }
+ ],
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "https://github.com/codedance/jquery.AreYouSure/blob/master/README.md"
+ }
+ ],
+ "bugs": "https://github.com/codedance/jquery.AreYouSure/issues",
+ "homepage": "https://github.com/codedance/jquery.AreYouSure",
+ "docs": "https://github.com/codedance/jquery.AreYouSure",
+ "demo": "http://www.papercut.com/products/free_software/are-you-sure/demo/are-you-sure-demo.html",
+ "dependencies": {
+ "jquery": ">=1.4.2"
+ }
+}
diff --git a/library/jquery.AreYouSure/ays-beforeunload-shim.js b/library/jquery.AreYouSure/ays-beforeunload-shim.js
new file mode 100644
index 000000000..cb864cdeb
--- /dev/null
+++ b/library/jquery.AreYouSure/ays-beforeunload-shim.js
@@ -0,0 +1,31 @@
+/*!
+ * An experimental shim to partially emulate onBeforeUnload on iOS.
+ * Part of https://github.com/codedance/jquery.AreYouSure/
+ *
+ * Copyright (c) 2012-2014, Chris Dance and PaperCut Software http://www.papercut.com/
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Author: chris.dance@papercut.com
+ * Date: 19th May 2014
+ */
+$(function() {
+ if (!navigator.userAgent.toLowerCase().match(/iphone|ipad|ipod|opera/)) {
+ return;
+ }
+ $('a').bind('click', function(evt) {
+ var href = $(evt.target).closest('a').attr('href');
+ if (href !== undefined && !(href.match(/^#/) || href.trim() == '')) {
+ var response = $(window).triggerHandler('beforeunload', response);
+ if (response && response != "") {
+ var msg = response + "\n\n"
+ + "Press OK to leave this page or Cancel to stay.";
+ if (!confirm(msg)) {
+ return false;
+ }
+ }
+ window.location.href = href;
+ return false;
+ }
+ });
+});
diff --git a/library/jquery.AreYouSure/bower.json b/library/jquery.AreYouSure/bower.json
new file mode 100644
index 000000000..8591dc0d0
--- /dev/null
+++ b/library/jquery.AreYouSure/bower.json
@@ -0,0 +1,30 @@
+{
+ "name": "jquery.are-you-sure",
+ "version": "1.9.0",
+ "homepage": "https://github.com/codedance/jquery.AreYouSure",
+ "authors": [
+ "CodeDance <chris.dance@papercut.com>"
+ ],
+ "description": "A light-weight jQuery 'dirty forms' Plugin - it monitors html forms and alerts users to unsaved changes if they attempt to close the browser or navigate away from the page. (Are you sure?)",
+ "main": "jquery.are-you-sure.js",
+ "keywords": [
+ "form",
+ "dirty",
+ "field",
+ "change",
+ "save-check",
+ "are-you-sure",
+ "save-warning"
+ ],
+ "license": "MIT/GPLv2",
+ "ignore": [
+ "**/.*",
+ "demo"
+ ],
+ "dependencies": {
+ "jquery": ">=1.4.2"
+ },
+ "devDependencies": {
+ "jasmine-jquery": "~2.0.3"
+ }
+}
diff --git a/library/jquery.AreYouSure/demo/are-you-sure-demo.html b/library/jquery.AreYouSure/demo/are-you-sure-demo.html
new file mode 100644
index 000000000..3f0327b2e
--- /dev/null
+++ b/library/jquery.AreYouSure/demo/are-you-sure-demo.html
@@ -0,0 +1,576 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>Demo: Are You Sure? - a dirty forms jQuery Plugin</title>
+
+ <!--
+
+ We'll use an old version of jQuery to show we're backwards compatible. In
+ production we recommend using a later version. e.g.
+
+ <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
+ <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
+
+ -->
+
+ <script src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
+ <script src="../jquery.are-you-sure.js"></script>
+ <script src="../ays-beforeunload-shim.js"></script>
+ <script>
+
+ $(function() {
+
+ // Example 1 - ... in one line of code
+ $('#example-1-form').areYouSure();
+
+
+ // Example 2 - ignore a dynamic field
+ $('#example-2-form').areYouSure();
+
+ var defaultPickup15min = new Date((new Date()).getTime() + 15 * 60000);
+ $('#pickup').val(defaultPickup15min.getHours()
+ + ':' + defaultPickup15min.getMinutes());
+
+
+ // Example 3 - custom message and hooking the dirty change events
+ $('#example-3-form').areYouSure(
+ {
+ message: "Did you forget to save your standard coffee order?"
+ }
+ );
+ // Enable save button only if the form is dirty - using events.
+ $('#example-3-form').bind('dirty.areYouSure', function() {
+ $(this).find('input[type="submit"]').removeAttr('disabled');
+ });
+ $('#example-3-form').bind('clean.areYouSure', function() {
+ $(this).find('input[type="submit"]').attr('disabled', 'disabled');
+ });
+
+
+ // Example 4 - dynamically change and add form fields.
+ $('#example-4-form').areYouSure(
+ {
+ message: "Did you forget to submit your coffee order?"
+ }
+ );
+
+ $('#example-4-lastorder').click(function() {
+ // ... set our saved coffee type.
+ $('#example-4-coffee').val('espresso');
+ // Because we've made a change from our own JavaScript, we need to fire
+ // off manual 'form check'.
+ $('#example-4-form').trigger('checkform.areYouSure');
+ });
+
+ // If it's warm enough, offer an iced coffee special.
+ $.getJSON("http://api.openweathermap.org/data/2.5/weather?q=Melbourne,AU&mode=json&units=metric&callback=?",
+ function(data) {
+ var temp = data.main.temp;
+ if (temp > 5) {
+ $('#example-4-special').append('<p>It\'s currently '
+ + temp + 'C in Melbourne. Ice it up!</p>');
+ $('#example-4-special').append('<input type="checkbox" name="make-it-iced" value="true" />'
+ + ' Make it an iced coffee<br />');
+
+ // Trigger rescan event on the form so we start tracking the new field.
+ $('#example-4-form').trigger('rescan.areYouSure');
+ }
+ }
+ );
+
+
+ /*
+ * Example 5
+ * - extra shots button to enable/disable shots options
+ * - like/unlike button (changing hidden form field value)
+ * - hook dirty change event to enable/disable submit (using method),
+ * to more easily demonstrate when the form is dirty
+ */
+ $('#example-5-extra-shots').click(function() {
+ // we trigger a change event on the fields so that the AreYouSure event handler is called
+ $('#example-5-form input[name=shots]').removeAttr('disabled').change();
+ $('#example-5-extra-shots').hide();
+ $('#example-5-shots-options').show();
+ return false;
+ });
+ $('#example-5-like-button').click(function() {
+ var currentLike = $('#example-5-like').val() == 'true';
+ var newLike = !currentLike;
+ // we trigger a change event on the fields so that the areYouSure event handler is called
+ $('#example-5-like').val(newLike).change();
+ $('#example-5-like-button').text(newLike ? 'Unlike' : 'Like');
+ return false;
+ });
+ $('#example-5-form').areYouSure({
+ change: function() {
+ // Enable save button only if the form is dirty.
+ if ($(this).hasClass('dirty')) {
+ $(this).find('input[type="submit"]').removeAttr('disabled');
+ } else {
+ $(this).find('input[type="submit"]').attr('disabled', 'disabled');
+ }
+ }
+ });
+
+ // Example 6 - HTML5 input types
+ $('#example-6-form').areYouSure();
+
+ // Example 7 - ... in one line of code for the form and some more optional to toggle disabled state of the save button
+ $('#example-7-form').areYouSure();
+ $('#example-7-save-button').click(function () {
+ $('#example-7-form').trigger('reinitialize.areYouSure');
+ });
+ // code below is optional to handle disabled state of the save button
+ $('#example-7-form').bind('dirty.areYouSure', function () {
+ // Enable save button only as the form is dirty.
+ $('#example-7-save-button').attr({ 'disabled': false });
+ });
+ $('#example-7-form').bind('clean.areYouSure', function () {
+ // Form is clean so nothing to save - disable the save button.
+ $('#example-7-save-button').attr({ 'disabled': true });
+ });
+ });
+
+ </script>
+
+ <style type="text/css">
+ body {
+ font-family: myriad-pro-1, myriad-pro-2, 'Lucida Grande', 'Arial', sans-serif;
+ margin: 25px;
+ }
+
+ form {
+ width: 350px;
+ border: 1px solid #AA5303;
+ padding: 10px 20px;
+ background-image: -webkit-linear-gradient(top, rgba(170,83,3, 0.1), rgba(170,83,3, 0.5));
+ background-image: -moz-linear-gradient(top, rgba(170,83,3, 0.1), rgba(170,83,3, 0.5));
+ background-image: -ms-linear-gradient(top, rgba(170,83,3, 0.1), rgba(170,83,3, 0.5));
+ background-image: -o-linear-gradient(top, rgba(170,83,3, 0.1), rgba(170,83,3, 0.5));
+ background-image: linear-gradient(top, rgba(170,83,3, 0.1), rgba(170,83,3, 0.5));
+ border-radius: 5px;
+ }
+
+ /* A bit of custom styling on example 3 */
+ #example-3-form.dirty, #example-4-form.dirty {
+ box-shadow: 0 0 8px rgba(255, 0, 0, 1);
+ -webkit-box-shadow: 0 0 8px rgba(255, 0, 0, 1);
+ -moz-box-shadow: 0 0 8px rgba(255, 0, 0, 1);
+ border:1px solid rgba(255,0,0, 0.8);
+ }
+
+ form h2 {
+ font-size: 22px;
+ }
+
+ form > div {
+ padding: 8px;
+ font-size: 12px;
+ }
+ form > div input[type="text"],
+ form > div input[type="color"],
+ form > div input[type="date"],
+ form > div input[type="datetime"],
+ form > div input[type="datetime-local"],
+ form > div input[type="email"],
+ form > div input[type="month"],
+ form > div input[type="number"],
+ form > div input[type="range"],
+ form > div input[type="search"],
+ form > div input[type="tel"],
+ form > div input[type="time"],
+ form > div input[type="url"],
+ form > div input[type="week"],
+ form > div input:not([type]),
+ form > div textarea,
+ form > div select,
+ form > div button {
+ float: right;
+ width: 200px;
+ }
+
+ form > div input[type="radio"],
+ form > div input[type="checkbox"] {
+ display: inline-block;
+ margin-left: 130px;
+ }
+
+ form > div input[type="submit"] {
+ float: right;
+ }
+ form > div.buttons {
+ clear: both;
+ padding-bottom: 20px;
+ }
+ </style>
+ </head>
+
+ <body>
+ <h1>jQuery Plugin Demo: Are You Sure?</h1>
+ <p>
+ This page hosts a demo of the <a href="https://github.com/codedance/jquery.AreYouSure">jQuery Are-You-Sure</a> plugin (<code>jquery.are-you-sure.js</code>).
+ </p>
+ <p>
+ <i>Are-you-sure</i> is simple light-weight "dirty forms" JQuery Plugin for modern browsers. It helps prevent users from loosing unsaved form changes.
+ </p>
+ <p>
+ <strong>Features:</strong>
+ <ul>
+ <li>Light weight - only the features you need!</li>
+ <li>Dependency free.</li>
+ <li>Correct state management - if a user edits then restores a value, the form is not considered dirty.</li>
+ <li>Easy to understand - less than a "terminal screen" of code!</li>
+ <li>... and <a href="https://github.com/codedance/jquery.AreYouSure">more</a>.</li>
+ </ul>
+ </p>
+
+ <h2>Example 1: It's simple!</h2>
+ <p>
+ This example shows how easy it is to add a dirty check to your form(s) with one line
+ of code. (View the page's source)
+ </p>
+
+ <form id="example-1-form" name="coffeeOrder1" method="post">
+ <h2>Enter Your Coffee Order</h2>
+ <div>
+ <label for="example-1-coffee">Coffee</label>
+ <select name="coffee" id="example-1-coffee">
+ <option value="espresso">Espresso</option>
+ <option value="dbl-espresso">Caffe Doppio</option>
+ <option value="latte">Caffe Latte</option>
+ <option value="macciato">Machhiato</option>
+ <option value="cappuccino">Cappuccino</option>
+ </select>
+ </div>
+ <div>
+ <label>Shots</label><br />
+ <input type="radio" name="shots" value="1" checked /> 1 Shot - Standard<br />
+ <input type="radio" name="shots" value="2" /> 2 Shots - Morning wakeup!<br />
+ <input type="radio" name="shots" value="3" /> 3 Shots - Overdrive!<br />
+ </div>
+ <div>
+ <label for="example-1-sugar">Sugar</label> <input type="text" name="sugar" value="0" id="example-1-sugar" />
+ </div>
+ <div>
+ <label for="example-1-instructions">Special Instructions</label>
+ <textarea name="instructions" rows="5" id="example-1-instructions"></textarea>
+ </div>
+
+ <div class="buttons">
+ <input type="checkbox" name="remember" value="true" /> Remember my order<br />
+ <input type="submit" value="Submit">
+ <input type="reset" value="Reset">
+ </div>
+ <div>
+ <p>... or visit <a href="http://www.google.com/">Google</a> or close the window without saving!</p>
+ </div>
+ </form>
+
+ <h2>Example 2: Ignore the unimportant!</h2>
+ <p>
+ This example highlights how to disregard a field from the dirty check. In this form
+ the first field is dynamically populated and hence a change on this field should <em>not</em>
+ mark the form as dirty.
+ </p>
+ <form id="example-2-form" name="coffeeOrder2" method="post">
+ <h2>Enter Your Coffee Order</h2>
+ <div>
+ <!-- The ays-ignore class means a change on this field is not considered "dirty" -->
+ <label for="pickup">Pickup Time</label>
+ <input class="ays-ignore" type="text" name="pickup" id="pickup" />
+ <!-- or you can use a data attribute like this:
+ <label for="pickup">Pickup Time</label> <input data-ays-ignore="true" type="text" name="pickup" id="pickup" />
+ -->
+ </div>
+ <div>
+ <label for="example-2-coffee">Coffee</label>
+ <select name="coffee" id="example-2-coffee">
+ <option value="espresso">Espresso</option>
+ <option value="dbl-espresso">Caffe Doppio</option>
+ <option value="latte">Caffe Latte</option>
+ <option value="macciato">Machhiato</option>
+ <option value="cappuccino">Cappuccino</option>
+ </select>
+ </div>
+ <div>
+ <label>Shots</label><br />
+ <input type="radio" name="shots" value="1" checked /> 1 Shot - Standard<br />
+ <input type="radio" name="shots" value="2" /> 2 Shots - Morning wakeup!<br />
+ <input type="radio" name="shots" value="3" /> 3 Shots - Overdrive!<br />
+ </div>
+ <div>
+ <label for="example-2-sugar">Sugar</label> <input type="text" name="sugar" value="0" id="example-2-sugar" />
+ </div>
+ <div>
+ <label for="example-2-instructions">Special Instructions</label>
+ <textarea name="instructions" rows="5" id="example-2-instructions"></textarea>
+ </div>
+
+ <div class="buttons">
+ <input type="checkbox" name="remember" value="true" /> Remember my order<br />
+ <input type="submit" value="Submit">
+ </div>
+ <div>
+ <p>... or visit <a href="http://www.google.com/">Google</a> or close the window without saving!</p>
+ </div>
+ </form>
+
+
+ <h2>Example 3: Lets be intelligent!</h2>
+ <p>
+ This is a more advanced example. The <code>dirty</code> and <code>clean</code> change events are
+ intercepted so the save button is only enabled if the form is dirty (i.e. something to save).
+ It also demonstrates how to customize the warning message and change the style of a dirty
+ form (CSS styling using the <code>.dirty</code> class).
+ </p>
+ <form id="example-3-form" name="coffeeOrder3" method="post">
+ <h2>Update My Standard Order</h2>
+ <div>
+ <label for="example-3-coffee">Coffee</label>
+ <select name="coffee" id="example-3-coffee">
+ <option value=""></option>
+ <option value="cappuccino">Cappuccino</option>
+ <option value="espresso">Espresso</option>
+ <option value="dbl-espresso">Caffe Doppio</option>
+ <option value="latte">Caffe Latte</option>
+ <option value="macciato">Machhiato</option>
+ </select>
+ </div>
+ <div>
+ <label>Shots</label><br />
+ <input type="radio" name="shots" value="1" /> 1 Shot - Standard<br />
+ <input type="radio" name="shots" value="2" checked /> 2 Shots - Morning wakeup!<br />
+ <input type="radio" name="shots" value="3" /> 3 Shots - Overdrive!<br />
+ </div>
+ <div>
+ <label for="example-3-sugar">Sugar</label>
+ <input type="text" name="sugar" value="1" id="example-3-sugar" />
+ </div>
+ <div>
+ <label for="example-3-instructions">Special Instructions</label>
+ <textarea name="instructions" rows="5" id="example-3-instructions">No chocolate please</textarea>
+ </div>
+
+ <div class="buttons">
+ <input type="submit" value="Save" disabled="disabled">
+ </div>
+ <div>
+ <p>... or visit <a href="http://www.google.com/">Google</a> or close the window without saving!</p>
+ </div>
+ </form>
+
+ <h2>Example 4: Lets be dynamic!</h2>
+ <p>
+ In this example we'll dymaically add a field and fire off the <code>rescan</code> event. After
+ the rescan, Are-You-Sure will start looking for changes on the new fields as well.
+ </p>
+ <form id="example-4-form" name="coffeeOrder4" method="post">
+ <h2>Order Coffee For Pickup Now</h2>
+ <div>
+ <a id="example-4-lastorder" href="javascript:void(0);">Set my preferences from my last order</a><br />
+ </div>
+ <div>
+ <label for="example-4-coffee">Coffee</label>
+ <select name="coffee" id="example-4-coffee">
+ <option value="cappuccino">Cappuccino</option>
+ <option value="espresso">Espresso</option>
+ <option value="dbl-espresso">Caffe Doppio</option>
+ <option value="latte">Caffe Latte</option>
+ </select>
+ </div>
+ <div id="example-4-special"></div>
+ <div class="buttons">
+ <input type="submit" value="Place Order">
+ </div>
+ <div>
+ <p>... or visit <a href="http://www.google.com/">Google</a> or close the window without saving!</p>
+ </div>
+ </form>
+
+ <h2>Example 5: Edge cases</h2>
+ <p>
+ This example demonstrates tracking of hidden and disabled form elements that are changed by non-input elements.
+ E.g.:
+ </p>
+ <ul>
+ <li>clicking a link or non-input button that changes the value of a hidden form field, or</li>
+ <li>
+ clicking a link or non-input button that enables or disables some form fields (which has an effect on whether
+ or not those fields will be submitted with the form, despite the values not changing).
+ </li>
+ </ul>
+ <form id="example-5-form" name="coffeeOrder5" method="post">
+ <h2>Update My Standard Order</h2>
+ <div>
+ <label for="example-5-coffee">Coffee</label>
+ <select name="coffee" id="example-3-coffee">
+ <option value="cappuccino">Cappuccino</option>
+ <option value="espresso">Espresso</option>
+ <option value="dbl-espresso">Caffe Doppio</option>
+ <option value="latte">Caffe Latte</option>
+ <option value="macciato">Machhiato</option>
+ </select>
+ </div>
+ <div>
+ <label>Shots</label>
+ <!--
+ The visually hidden "shots" radio buttons are disabled and would not normally be submitted with the form.
+ Clicking the following button will visually show and enable these buttons, resulting in a form state change
+ (and hence the form is considered dirty) without the values having changed.
+ -->
+ <button id="example-5-extra-shots">I want extra shots</button>
+ <div id="example-5-shots-options" style="display: none;">
+ <input type="radio" name="shots" value="1" disabled /> 1 Shot - Standard<br />
+ <input type="radio" name="shots" value="2" disabled /> 2 Shots - Morning wakeup!<br />
+ <input type="radio" name="shots" value="3" disabled /> 3 Shots - Overdrive!<br />
+ </div>
+ </div>
+ <div>
+ <label>Do you like us?</label>
+ <input type="hidden" name="like" value="false" id="example-5-like" />
+ <button id="example-5-like-button">Like</button>
+ </div>
+ <div class="buttons">
+ <input type="submit" value="Save" disabled="disabled">
+ </div>
+ <div>
+ <p>... or visit <a href="http://www.google.com/">Google</a> or close the window without saving!</p>
+ </div>
+ </form>
+
+ <h2>Example 6: HTML5 inputs!</h2>
+ <p>
+ This example shows support for HTML5 input types. It's not a coffee order form,
+ but you need coffee if you're working with HTML5 :-)
+ </p>
+
+ <form id="example-6-form" name="coffeeOrder6" method="post">
+ <h2>Doing HTML5? You'll need coffee!</h2>
+ <div>
+ <label for="example-6-color">color</label>
+ <input type="color" name="example-6-color" />
+ </div>
+ <div>
+ <label for="example-6-date">date</label>
+ <input type="date" name="example-6-date" />
+ </div>
+ <div>
+ <label for="example-6-datetime">datetime</label>
+ <input type="datetime" name="example-6-datetime" />
+ </div>
+ <div>
+ <label for="example-6-datetime-local">datetime-local</label>
+ <input type="datetime-local" name="example-6-datetime-local" />
+ </div>
+ <div>
+ <label for="example-6-email">email</label>
+ <input type="email" name="example-6-email" />
+ </div>
+ <div>
+ <label for="example-6-month">month</label>
+ <input type="month" name="example-6-month" />
+ </div>
+ <div>
+ <label for="example-6-number">number</label>
+ <input type="number" name="example-6-number" />
+ </div>
+ <div>
+ <label for="example-6-range">range</label>
+ <input type="range" name="example-6-range" />
+ </div>
+ <div>
+ <label for="example-6-search">search</label>
+ <input type="search" name="example-6-search" />
+ </div>
+ <div>
+ <label for="example-6-tel">tel</label>
+ <input type="tel" name="example-6-tel" />
+ </div>
+ <div>
+ <label for="example-6-time">time</label>
+ <input type="time" name="example-6-time" />
+ </div>
+ <div>
+ <label for="example-6-url">url</label>
+ <input type="url" name="example-6-url" />
+ </div>
+ <div>
+ <label for="example-6-week">week</label>
+ <input type="week" name="example-6-week" />
+ </div>
+ <div>
+ <label for="example-6-select">select/optgroup</label>
+ <select>
+ <optgroup label="Beans">
+ <option value="india">India</option>
+ <option value="indonesia" selected="selected">Indonesia</option>
+ <option value="brazil">Brazil</option>
+ </optgroup>
+ <optgroup label="Roast">
+ <option value="l">Light</option>
+ <option value="m">Medium</option>
+ <option value="h">Heavy</option>
+ </optgroup>
+ </select>
+ </div>
+ <div>
+ <label for="example-6-mselect">multi select</label>
+ <select multiple>
+ <option value="arabica">Arabica</option>
+ <option value="arabica">Peaberry</option>
+ <option value="malabar " selected="selected">Malabar</option>
+ <option value="robusta ">Robusta</option>
+ </select>
+ </div>
+ <div style="clear:both;"></div>
+ <div>
+ <label for="example-6-plain">plain old field</label>
+ <input name="example-6-plain" />
+ </div>
+
+ <div class="buttons">
+ <input type="submit" value="Submit">
+ <input type="reset" value="Reset">
+ </div>
+ <div>
+ <p>... or visit <a href="http://www.google.com/">Google</a> or close the window without saving!</p>
+ </div>
+ </form>
+ <h2>Example 7: Mark current state as not dirty!</h2>
+ <p>
+ This example shows how you can mark the current state as not dirty. Handy for AJAX forms
+ we're you're managing your own submits.
+ </p>
+
+ <form id="example-7-form" name="coffeeOrder7" method="post">
+ <h2>Tell us your default coffee</h2>
+ <div>
+ <label for="example-7-coffee">Default coffee</label>
+ <select name="coffee" id="example-7-coffee">
+ <option value="espresso">Espresso</option>
+ <option value="dbl-espresso">Caffe Doppio</option>
+ <option value="latte">Caffe Latte</option>
+ <option value="macciato">Machhiato</option>
+ <option value="cappuccino">Cappuccino</option>
+ </select>
+ </div>
+ <div>
+ <button id="example-7-save-button" disabled="disabled">Save without submit</button>
+ </div>
+ <div class="buttons">
+ <input type="submit" value="Submit">
+ </div>
+ <div>
+ <p>... or visit <a href="http://www.google.com/">Google</a> or close the window without saving!</p>
+ </div>
+ </form>
+
+ <p>
+ This jQuery plugin is developed by <a href="https://github.com/codedance">Chris Dance</a>
+ at <a href="http://www.papercut.com/">PaperCut Software</a> - Are-You-Sure is used in
+ PaperCut's printing management software and it has been open sourced with help of
+ Tom, Jack and Matt from PaperCut's dev team.
+ </p>
+
+ </body>
+</html>
diff --git a/library/jquery.AreYouSure/jquery.are-you-sure.js b/library/jquery.AreYouSure/jquery.are-you-sure.js
new file mode 100644
index 000000000..3c41e2fcc
--- /dev/null
+++ b/library/jquery.AreYouSure/jquery.are-you-sure.js
@@ -0,0 +1,192 @@
+/*!
+ * jQuery Plugin: Are-You-Sure (Dirty Form Detection)
+ * https://github.com/codedance/jquery.AreYouSure/
+ *
+ * Copyright (c) 2012-2014, Chris Dance and PaperCut Software http://www.papercut.com/
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Author: chris.dance@papercut.com
+ * Version: 1.9.0
+ * Date: 13th August 2014
+ */
+(function($) {
+
+ $.fn.areYouSure = function(options) {
+
+ var settings = $.extend(
+ {
+ 'message' : 'You have unsaved changes!',
+ 'dirtyClass' : 'dirty',
+ 'change' : null,
+ 'silent' : false,
+ 'addRemoveFieldsMarksDirty' : false,
+ 'fieldEvents' : 'change keyup propertychange input',
+ 'fieldSelector': ":input:not(input[type=submit]):not(input[type=button])"
+ }, options);
+
+ var getValue = function($field) {
+ if ($field.hasClass('ays-ignore')
+ || $field.hasClass('aysIgnore')
+ || $field.attr('data-ays-ignore')
+ || $field.attr('name') === undefined) {
+ return null;
+ }
+
+ if ($field.is(':disabled')) {
+ return 'ays-disabled';
+ }
+
+ var val;
+ var type = $field.attr('type');
+ if ($field.is('select')) {
+ type = 'select';
+ }
+
+ switch (type) {
+ case 'checkbox':
+ case 'radio':
+ val = $field.is(':checked');
+ break;
+ case 'select':
+ val = '';
+ $field.find('option').each(function(o) {
+ var $option = $(this);
+ if ($option.is(':selected')) {
+ val += $option.val();
+ }
+ });
+ break;
+ default:
+ val = $field.val();
+ }
+
+ return val;
+ };
+
+ var storeOrigValue = function($field) {
+ $field.data('ays-orig', getValue($field));
+ };
+
+ var checkForm = function(evt) {
+
+ var isFieldDirty = function($field) {
+ var origValue = $field.data('ays-orig');
+ if (undefined === origValue) {
+ return false;
+ }
+ return (getValue($field) != origValue);
+ };
+
+ var $form = ($(this).is('form'))
+ ? $(this)
+ : $(this).parents('form');
+
+ // Test on the target first as it's the most likely to be dirty
+ if (isFieldDirty($(evt.target))) {
+ setDirtyStatus($form, true);
+ return;
+ }
+
+ $fields = $form.find(settings.fieldSelector);
+
+ if (settings.addRemoveFieldsMarksDirty) {
+ // Check if field count has changed
+ var origCount = $form.data("ays-orig-field-count");
+ if (origCount != $fields.length) {
+ setDirtyStatus($form, true);
+ return;
+ }
+ }
+
+ // Brute force - check each field
+ var isDirty = false;
+ $fields.each(function() {
+ $field = $(this);
+ if (isFieldDirty($field)) {
+ isDirty = true;
+ return false; // break
+ }
+ });
+
+ setDirtyStatus($form, isDirty);
+ };
+
+ var initForm = function($form) {
+ var fields = $form.find(settings.fieldSelector);
+ $(fields).each(function() { storeOrigValue($(this)); });
+ $(fields).unbind(settings.fieldEvents, checkForm);
+ $(fields).bind(settings.fieldEvents, checkForm);
+ $form.data("ays-orig-field-count", $(fields).length);
+ setDirtyStatus($form, false);
+ };
+
+ var setDirtyStatus = function($form, isDirty) {
+ var changed = isDirty != $form.hasClass(settings.dirtyClass);
+ $form.toggleClass(settings.dirtyClass, isDirty);
+
+ // Fire change event if required
+ if (changed) {
+ if (settings.change) settings.change.call($form, $form);
+
+ if (isDirty) $form.trigger('dirty.areYouSure', [$form]);
+ if (!isDirty) $form.trigger('clean.areYouSure', [$form]);
+ $form.trigger('change.areYouSure', [$form]);
+ }
+ };
+
+ var rescan = function() {
+ var $form = $(this);
+ var fields = $form.find(settings.fieldSelector);
+ $(fields).each(function() {
+ var $field = $(this);
+ if (!$field.data('ays-orig')) {
+ storeOrigValue($field);
+ $field.bind(settings.fieldEvents, checkForm);
+ }
+ });
+ // Check for changes while we're here
+ $form.trigger('checkform.areYouSure');
+ };
+
+ var reinitialize = function() {
+ initForm($(this));
+ }
+
+ if (!settings.silent && !window.aysUnloadSet) {
+ window.aysUnloadSet = true;
+ $(window).bind('beforeunload', function() {
+ $dirtyForms = $("form").filter('.' + settings.dirtyClass);
+ if ($dirtyForms.length == 0) {
+ return;
+ }
+ // Prevent multiple prompts - seen on Chrome and IE
+ if (navigator.userAgent.toLowerCase().match(/msie|chrome/)) {
+ if (window.aysHasPrompted) {
+ return;
+ }
+ window.aysHasPrompted = true;
+ window.setTimeout(function() {window.aysHasPrompted = false;}, 900);
+ }
+ return settings.message;
+ });
+ }
+
+ return this.each(function(elem) {
+ if (!$(this).is('form')) {
+ return;
+ }
+ var $form = $(this);
+
+ $form.submit(function() {
+ $form.removeClass(settings.dirtyClass);
+ });
+ $form.bind('reset', function() { setDirtyStatus($form, false); });
+ // Add a custom events
+ $form.bind('rescan.areYouSure', rescan);
+ $form.bind('reinitialize.areYouSure', reinitialize);
+ $form.bind('checkform.areYouSure', checkForm);
+ initForm($form);
+ });
+ };
+})(jQuery);
diff --git a/library/jquery.AreYouSure/package.json b/library/jquery.AreYouSure/package.json
new file mode 100644
index 000000000..0b4c38dde
--- /dev/null
+++ b/library/jquery.AreYouSure/package.json
@@ -0,0 +1,45 @@
+{
+ "name": "jquery.AreYouSure",
+ "description": "A light-weight jQuery \"dirty forms\" Plugin - it monitors HTML forms and alerts users to unsaved changes if they attempt to close the browser or navigate away from the page. (Are you sure?)",
+ "homepage": "https://github.com/codedance/jquery.AreYouSure",
+ "author": "Chris Dance <chris.dance@papercut.com> (https://github.com/codedance)",
+ "contributors": [
+ "Tom Clift <tom.clift@papercut.com> (https://github.com/tclift)",
+ "Jon Egerton <jon@ja2.co.uk> (http://www.jonegerton.com/)",
+ "Scadoodles (https://github.com/Scadoodles)",
+ "Albin Sunnanbo (https://github.com/albinsunnanbo)",
+ "Marc Sutton <ashre@iname.com> (http://www.codev.co.uk)"
+ ],
+ "version": "1.9.0",
+ "license": "MIT/GPLv2",
+ "keywords": [ "dirty", "form", "onbeforeunload", "save", "check" ],
+ "main": "jquery.are-you-sure.js",
+ "engines": {
+ "node": ">=0.8.0"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/codedance/jquery.AreYouSure"
+ },
+ "bugs": {
+ "url": "https://github.com/codedance/jquery.AreYouSure/issues"
+ },
+ "dependencies": {
+ "jquery": ">=1.4.2"
+ },
+ "devDependencies": {
+ "bower": "^1.3.1",
+ "grunt": "^0.4.5",
+ "grunt-cli": "^0.1.13",
+ "grunt-karma": "^0.8.3",
+ "karma-chrome-launcher": "^0.1.4",
+ "karma-jasmine": "^0.2.2",
+ "karma-ie-launcher": "^0.1.5",
+ "karma-firefox-launcher": "^0.1.3",
+ "karma-safari-launcher": "^0.1.1"
+ },
+ "scripts": {
+ "postinstall": "node_modules/.bin/bower install",
+ "test": "node_modules/.bin/grunt test"
+ }
+}
diff --git a/library/jquery.AreYouSure/spec/javascripts/fixtures/input-text.html b/library/jquery.AreYouSure/spec/javascripts/fixtures/input-text.html
new file mode 100644
index 000000000..1b2850759
--- /dev/null
+++ b/library/jquery.AreYouSure/spec/javascripts/fixtures/input-text.html
@@ -0,0 +1,4 @@
+<form>
+ <input type="text" name="a">
+ <input type="submit">
+</form>
diff --git a/library/jquery.AreYouSure/spec/javascripts/jquery.are-you-sure_spec.js b/library/jquery.AreYouSure/spec/javascripts/jquery.are-you-sure_spec.js
new file mode 100644
index 000000000..5e02f7cb0
--- /dev/null
+++ b/library/jquery.AreYouSure/spec/javascripts/jquery.are-you-sure_spec.js
@@ -0,0 +1,28 @@
+'use strict';
+
+// Karma adds 'base/' to the default path
+jasmine.getFixtures().fixturesPath = 'base/spec/javascripts/fixtures';
+
+describe("A form's", function() {
+ var $form = undefined;
+
+ describe('text input', function() {
+ var $textInput = undefined;
+
+ beforeEach(function() {
+ loadFixtures('input-text.html');
+ $form = $('form');
+ $textInput = $('input[type=text]');
+ $form.areYouSure();
+ });
+
+ it('should cause dirtyness after its value changes', function(done) {
+ expect($form.hasClass('dirty')).toBe(false);
+ $textInput.val('new').change();
+ setTimeout(function() {
+ expect($form.hasClass('dirty')).toBe(true);
+ done();
+ }, 0);
+ });
+ });
+});
diff --git a/library/jquery.divgrow/divGrow-1.3.1.zip b/library/jquery.divgrow/divGrow-1.3.1.zip
deleted file mode 100644
index 8f1deacf1..000000000
--- a/library/jquery.divgrow/divGrow-1.3.1.zip
+++ /dev/null
Binary files differ
diff --git a/library/jquery.divgrow/howto b/library/jquery.divgrow/howto
deleted file mode 100644
index c2fdd66f9..000000000
--- a/library/jquery.divgrow/howto
+++ /dev/null
@@ -1,46 +0,0 @@
-1) Inlcude the JS file into your page (after jQuery):
-
-<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
-
-<script src="JS/jquery.divgrow.js" type="text/javascript"></script>
-
-
-2) Call the divgrow function to any div element you want to grow. initialHeight sets the height of the containers before they are expanded.
-
-<script type="text/javascript">
- $().ready(function() {
- $('div.more-block').divgrow({ initialHeight: 147 });
- });
-
-
-3) Create you container and give it a reference, i.e. by classname "more-block"
-
- <div class="more-block">
- <h2>Corns and Callus (Hyperkeratosis)</h2>
- <p>
- These occur in areas of the foot that are experiencing excess pressure and/or friction. The body seeks to defend itself by producing extra layers of skin as a form of protection. However as the process continues the accumulation of extra skin exceeds that which is lost naturally so the skin in these vulnerable areas builds up and becomes compacted as the original cause of the process continues. The protective mechanism becomes the problem if left untreated and the cause not addressed.<br />
- Callus denotes a general area of hard dead skin and a corn is a much more concentrated collection which often goes deep rather than wide. Corns can produce pain completely out of proportion to their size often because of impingement upon nerves or sometimes infection.<br />
- Treatment of the symptoms is the first step to stopping the pain and discomfort and this is usually addressed without much discomfort by a foot health professional. Treating the cause can be as simple as discarding an ill fitting pair of shoes or may entail a more detailed assessment of individual foot function.<br />
- Callus is not always caused by mechanical factors but can be a symptom of a systemic disease such as Psoriasis.<br />
- There are some useful devices to assist in protecting vulnerable areas from corns and callus ? see our recommended <a href="Products.aspx">products page</a>.
- </p>
- </div>
-
-
-
------------------------------------------------------
-
-Thats it.
-
-Optional arguments:
-
-initialHeight: 100 - (default)
-moreText: "+ Show More" - (default)
-lessText: "- Show Less" - (default)
-showBrackets: true - (default)
-
-e.g.
-
-$('div.more-block').divgrow({ initialHeight: 147, moreText: "give me more", lessText: "thats enough", showBrackets: false });
-
-
diff --git a/library/jquery.divgrow/jquery.divgrow-1.3.1.js b/library/jquery.divgrow/jquery.divgrow-1.3.1.js
deleted file mode 100644
index 49788f802..000000000
--- a/library/jquery.divgrow/jquery.divgrow-1.3.1.js
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
-* Copyright (c) 2010 Simon Hibbard
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-* OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-/*
-* Version: V1.3.1
-* Release: 22-12-2010
-* Based on jQuery 1.4.2
-*/
-
-(function ($) {
- var divgrowid = 0;
- $.fn.divgrow = function (options) {
- var options = $.extend({}, { initialHeight: 100, moreText: "+ Show More", lessText: "- Show Less", speed: 400, showBrackets: true }, options);
-
- return this.each(function () {
- divgrowid++;
-
- obj = $(this);
-
- var fullHeight = obj.height() + 10;
-
- obj.css('height', options.initialHeight).css('overflow', 'hidden');
- if (options.showBrackets) {
- obj.after('<p class="divgrow-brackets">[&hellip;]</p><div href="#" class="divgrow-showmore' + " divgrow-obj-" + divgrowid + '"' + '></div>');
- }
- else {
- obj.after('<div class="divgrow-showmore' + " divgrow-obj-" + divgrowid + '"' + '></div>');
- }
- $("div.divgrow-showmore").html(options.moreText);
-
- $("." + "divgrow-obj-" + divgrowid).toggle(function () {
- //alert(obj.attr('class'));
- // Set the height from the elements rel value
- //var height = $(this).prevAll("div:first").attr('rel');
-
- $(this).prevAll("div:first").animate({ height: fullHeight + "px" }, options.speed, function () { // Animation complete.
-
- // Hide the overlay text when expanded, change the link text
- if (options.showBrackets) {
- $(this).nextAll("p.divgrow-brackets:first").fadeOut();
- }
- $(this).nextAll("div.divgrow-showmore:first").html(options.lessText);
-
- });
-
-
- }, function () {
-
- $(this).prevAll("div:first").stop(true, false).animate({ height: options.initialHeight }, options.speed, function () { // Animation complete.
-
- // show the overlay text while closed, change the link text
- if (options.showBrackets) {
- $(this).nextAll("p.divgrow-brackets:first").stop(true, false).fadeIn();
- }
- $(this).nextAll("div.divgrow-showmore:first").stop(true, false).html(options.moreText);
-
- });
- });
-
- });
- };
-})(jQuery);
-
-
-
-
-
diff --git a/library/jquery.divgrow/jquery.divgrow-1.3.1.min.js b/library/jquery.divgrow/jquery.divgrow-1.3.1.min.js
deleted file mode 100644
index fd08f7fa8..000000000
--- a/library/jquery.divgrow/jquery.divgrow-1.3.1.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function ($) { var divgrowid = 0; $.fn.divgrow = function (options) { var options = $.extend({}, { initialHeight: 100, moreText: "+ Show More", lessText: "- Show Less", speed: 1000, showBrackets: true }, options); return this.each(function () { divgrowid++; obj = $(this); var fullHeight = obj.height() + 10; obj.css('height', options.initialHeight).css('overflow', 'hidden'); if (options.showBrackets) { obj.after('<p class="divgrow-brackets">[&hellip;]</p><a href="#" class="divgrow-showmore' + " divgrow-obj-" + divgrowid + '"' + '></a>') } else { obj.after('<a href="#" class="divgrow-showmore' + " divgrow-obj-" + divgrowid + '"' + '></a>') } $("a.divgrow-showmore").html(options.moreText); $("." + "divgrow-obj-" + divgrowid).toggle(function () { $(this).prevAll("div:first").animate({ height: fullHeight + "px" }, options.speed, function () { if (options.showBrackets) { $(this).nextAll("p.divgrow-brackets:first").fadeOut() } $(this).nextAll("a.divgrow-showmore:first").html(options.lessText) }) }, function () { $(this).prevAll("div:first").stop(true, false).animate({ height: options.initialHeight }, options.speed, function () { if (options.showBrackets) { $(this).nextAll("p.divgrow-brackets:first").stop(true, false).fadeIn() } $(this).nextAll("a.divgrow-showmore:first").stop(true, false).html(options.moreText) }) }) }) } })(jQuery); \ No newline at end of file
diff --git a/library/jslider/.gitignore b/library/jslider/.gitignore
deleted file mode 100644
index 1e0fc5a99..000000000
--- a/library/jslider/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*/.DS_Store
-.DS_Store
diff --git a/library/jslider/Makefile b/library/jslider/Makefile
deleted file mode 100644
index 0559b48e5..000000000
--- a/library/jslider/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-
-css_compiler: js_compiler
- mkdir -p bin
- cat css/jslider.css css/jslider.blue.css css/jslider.plastic.css css/jslider.round.css css/jslider.round.plastic.css > bin/jquery.slider.all.css
- java -jar tools/yuicompressor-2.4.7.jar --type=css bin/jquery.slider.all.css > bin/jquery.slider.min.css
- rm -f bin/jquery.slider.all.css
-
-js_compiler:
- mkdir -p bin
- rm -f bin/jquery.slider.all.js bin/jquery.slider.min.js
- cat js/jshashtable-2.1_src.js js/jquery.numberformatter-1.2.3.js js/tmpl.js js/jquery.dependClass-0.1.js js/draggable-0.1.js js/jquery.slider.js > bin/jquery.slider.all.js
- uglifyjs -nc bin/jquery.slider.all.js > bin/jquery.slider.min.js
- rm -f bin/jquery.slider.all.js
-
-
diff --git a/library/jslider/README.md b/library/jslider/README.md
deleted file mode 100644
index 0d4c61347..000000000
--- a/library/jslider/README.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# jQuery Slider plugin
-
-jQuery Slider is easy to use and multifunctional jQuery plugin.
-
-[Check out demos and documentations here](http://egorkhmelev.github.com/jslider/)
-
-## License
-
-(MIT License) — Copyright &copy; 2012 Egor Khmelev \ No newline at end of file
diff --git a/library/jslider/bin/jquery.slider.min.css b/library/jslider/bin/jquery.slider.min.css
deleted file mode 100644
index 14b3f2210..000000000
--- a/library/jslider/bin/jquery.slider.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.jslider .jslider-bg i,.jslider .jslider-pointer{background:url(../img/jslider.png) no-repeat 0 0}.jslider{display:block;width:100%;height:1em;position:relative;top:.6em;font-family:Arial,sans-serif}.jslider table{width:100%;border-collapse:collapse;border:0}.jslider td,.jslider th{padding:0;vertical-align:top;text-align:left;border:0}.jslider table,.jslider table tr,.jslider table tr td{width:100%;vertical-align:top}.jslider .jslider-bg{position:relative}.jslider .jslider-bg i{height:5px;position:absolute;font-size:0;top:0}.jslider .jslider-bg .l{width:50%;background-position:0 0;left:0}.jslider .jslider-bg .r{width:50%;left:50%;background-position:right 0}.jslider .jslider-bg .v{position:absolute;width:60%;left:20%;top:0;height:5px;background-position:0 -20px}.jslider .jslider-pointer{width:13px;height:15px;background-position:0 -40px;position:absolute;left:20%;top:-4px;margin-left:-6px;cursor:pointer;cursor:hand}.jslider .jslider-pointer-hover{background-position:-20px -40px}.jslider .jslider-pointer-to{left:80%}.jslider .jslider-label{font-size:9px;line-height:12px;color:black;opacity:.4;white-space:nowrap;padding:0 2px;position:absolute;top:-18px;left:0}.jslider .jslider-label-to{left:auto;right:0}.jslider .jslider-value{font-size:9px;white-space:nowrap;padding:1px 2px 0;position:absolute;top:-19px;left:20%;background:white;line-height:12px;-moz-border-radius:2px;-webkit-border-radius:2px;-o-border-radius:2px;border-radius:2px}.jslider .jslider-value-to{left:80%}.jslider .jslider-label small,.jslider .jslider-value small{position:relative;top:-0.4em}.jslider .jslider-scale{position:relative;top:9px}.jslider .jslider-scale span{position:absolute;height:5px;border-left:1px solid #999;font-size:0}.jslider .jslider-scale ins{font-size:9px;text-decoration:none;position:absolute;left:0;top:5px;color:#999}.jslider-single .jslider-pointer-to,.jslider-single .jslider-value-to,.jslider-single .jslider-bg .v,.jslider-limitless .jslider-label{display:none}.jslider_blue .jslider-bg i,.jslider_blue .jslider-pointer{background-image:url(../img/jslider.blue.png)}.jslider_plastic .jslider-bg i,.jslider_plastic .jslider-pointer{background-image:url(../img/jslider.plastic.png)}.jslider_round .jslider-bg i,.jslider_round .jslider-pointer{background-image:url(../img/jslider.round.png)}.jslider_round .jslider-pointer{width:17px;height:17px;top:-6px;margin-left:-8px}.jslider_round_plastic .jslider-bg i,.jslider_round_plastic .jslider-pointer{background-image:url(../img/jslider.round.plastic.png)}.jslider_round_plastic .jslider-pointer{width:18px;height:18px;top:-7px;margin-left:-8px} \ No newline at end of file
diff --git a/library/jslider/bin/jquery.slider.min.js b/library/jslider/bin/jquery.slider.min.js
deleted file mode 100644
index 562c5af80..000000000
--- a/library/jslider/bin/jquery.slider.min.js
+++ /dev/null
@@ -1 +0,0 @@
-var Hashtable=function(){function c(b){var d;if(typeof b=="string")return b;if(typeof b.hashCode==a)return d=b.hashCode(),typeof d=="string"?d:c(d);if(typeof b.toString==a)return b.toString();try{return String(b)}catch(e){return Object.prototype.toString.call(b)}}function d(a,b){return a.equals(b)}function e(b,c){return typeof c.equals==a?c.equals(b):b===c}function f(a){return function(b){if(b===null)throw new Error("null is not a valid "+a);if(typeof b=="undefined")throw new Error(a+" must not be undefined")}}function i(a,b,c,d){this[0]=a,this.entries=[],this.addEntry(b,c),d!==null&&(this.getEqualityFunction=function(){return d})}function m(a){return function(b){var c=this.entries.length,d,e=this.getEqualityFunction(b);while(c--){d=this.entries[c];if(e(b,d[0]))switch(a){case j:return!0;case k:return d;case l:return[c,d[1]]}}return!1}}function n(a){return function(b){var c=b.length;for(var d=0,e=this.entries.length;d<e;++d)b[c+d]=this.entries[d][a]}}function o(a,b){var c=a.length,d;while(c--){d=a[c];if(b===d[0])return c}return null}function p(a,b){var c=a[b];return c&&c instanceof i?c:null}function q(d,e){var f=this,j=[],k={},l=typeof d==a?d:c,m=typeof e==a?e:null;this.put=function(a,b){g(a),h(b);var c=l(a),d,e,f=null;return d=p(k,c),d?(e=d.getEntryForKey(a),e?(f=e[1],e[1]=b):d.addEntry(a,b)):(d=new i(c,a,b,m),j[j.length]=d,k[c]=d),f},this.get=function(a){g(a);var b=l(a),c=p(k,b);if(c){var d=c.getEntryForKey(a);if(d)return d[1]}return null},this.containsKey=function(a){g(a);var b=l(a),c=p(k,b);return c?c.containsKey(a):!1},this.containsValue=function(a){h(a);var b=j.length;while(b--)if(j[b].containsValue(a))return!0;return!1},this.clear=function(){j.length=0,k={}},this.isEmpty=function(){return!j.length};var n=function(a){return function(){var b=[],c=j.length;while(c--)j[c][a](b);return b}};this.keys=n("keys"),this.values=n("values"),this.entries=n("getEntries"),this.remove=function(a){g(a);var c=l(a),d,e=null,f=p(k,c);return f&&(e=f.removeEntryForKey(a),e!==null&&(f.entries.length||(d=o(j,c),b(j,d),delete k[c]))),e},this.size=function(){var a=0,b=j.length;while(b--)a+=j[b].entries.length;return a},this.each=function(a){var b=f.entries(),c=b.length,d;while(c--)d=b[c],a(d[0],d[1])},this.putAll=function(b,c){var d=b.entries(),e,g,h,i,j=d.length,k=typeof c==a;while(j--)e=d[j],g=e[0],h=e[1],k&&(i=f.get(g))&&(h=c(g,i,h)),f.put(g,h)},this.clone=function(){var a=new q(d,e);return a.putAll(f),a}}var a="function",b=typeof Array.prototype.splice==a?function(a,b){a.splice(b,1)}:function(a,b){var c,d,e;if(b===a.length-1)a.length=b;else{c=a.slice(b+1),a.length=b;for(d=0,e=c.length;d<e;++d)a[b+d]=c[d]}},g=f("key"),h=f("value"),j=0,k=1,l=2;return i.prototype={getEqualityFunction:function(b){return typeof b.equals==a?d:e},getEntryForKey:m(k),getEntryAndIndexForKey:m(l),removeEntryForKey:function(a){var c=this.getEntryAndIndexForKey(a);return c?(b(this.entries,c[0]),c[1]):null},addEntry:function(a,b){this.entries[this.entries.length]=[a,b]},keys:n(0),values:n(1),getEntries:function(a){var b=a.length;for(var c=0,d=this.entries.length;c<d;++c)a[b+c]=this.entries[c].slice(0)},containsKey:m(j),containsValue:function(a){var b=this.entries.length;while(b--)if(a===this.entries[b][1])return!0;return!1}},q}();(function(a){function i(a,b,c){this.dec=a,this.group=b,this.neg=c}function j(){for(var a=0;a<h.length;a++){localeGroup=h[a];for(var c=0;c<localeGroup.length;c++)b.put(localeGroup[c],a)}}function k(a,c){b.size()==0&&j();var d=".",e=",",f="-";c==0&&(a.indexOf("_")!=-1?a=a.split("_")[1].toLowerCase():a.indexOf("-")!=-1&&(a=a.split("-")[1].toLowerCase()));var h=b.get(a);if(h){var k=g[h];k&&(d=k[0],e=k[1])}return new i(d,e,f)}var b=new Hashtable,c=["ae","au","ca","cn","eg","gb","hk","il","in","jp","sk","th","tw","us"],d=["at","br","de","dk","es","gr","it","nl","pt","tr","vn"],e=["cz","fi","fr","ru","se","pl"],f=["ch"],g=[[".",","],[",","."],[","," "],[".","'"]],h=[c,d,e,f];a.fn.formatNumber=function(b,c,d){return this.each(function(){c==null&&(c=!0),d==null&&(d=!0);var e;a(this).is(":input")?e=new String(a(this).val()):e=new String(a(this).text());var f=a.formatNumber(e,b);c&&(a(this).is(":input")?a(this).val(f):a(this).text(f));if(d)return f})},a.formatNumber=function(b,c){var c=a.extend({},a.fn.formatNumber.defaults,c),d=k(c.locale.toLowerCase(),c.isFullLocale),e=d.dec,f=d.group,g=d.neg,h="0#-,.",i="",j=!1;for(var l=0;l<c.format.length;l++){if(h.indexOf(c.format.charAt(l))!=-1){if(l==0&&c.format.charAt(l)=="-"){j=!0;continue}break}i+=c.format.charAt(l)}var m="";for(var l=c.format.length-1;l>=0;l--){if(h.indexOf(c.format.charAt(l))!=-1)break;m=c.format.charAt(l)+m}c.format=c.format.substring(i.length),c.format=c.format.substring(0,c.format.length-m.length);var n=new Number(b);return a._formatNumber(n,c,m,i,j)},a._formatNumber=function(b,c,d,e,f){var c=a.extend({},a.fn.formatNumber.defaults,c),g=k(c.locale.toLowerCase(),c.isFullLocale),h=g.dec,i=g.group,j=g.neg,l=!1;if(isNaN(b)){if(c.nanForceZero!=1)return null;b=0,l=!0}d=="%"&&(b*=100);var m="";if(c.format.indexOf(".")>-1){var n=h,o=c.format.substring(c.format.lastIndexOf(".")+1);if(c.round==1)b=new Number(b.toFixed(o.length));else{var p=b.toString();p=p.substring(0,p.lastIndexOf(".")+o.length+1),b=new Number(p)}var q=b%1,r=new String(q.toFixed(o.length));r=r.substring(r.lastIndexOf(".")+1);for(var s=0;s<o.length;s++){if(o.charAt(s)=="#"&&r.charAt(s)!="0"){n+=r.charAt(s);continue}if(o.charAt(s)=="#"&&r.charAt(s)=="0"){var t=r.substring(s);if(t.match("[1-9]")){n+=r.charAt(s);continue}break}o.charAt(s)=="0"&&(n+=r.charAt(s))}m+=n}else b=Math.round(b);var u=Math.floor(b);b<0&&(u=Math.ceil(b));var v="";c.format.indexOf(".")==-1?v=c.format:v=c.format.substring(0,c.format.indexOf("."));var w="";if(u!=0||v.substr(v.length-1)!="#"||l){var x=new String(Math.abs(u)),y=9999;v.lastIndexOf(",")!=-1&&(y=v.length-v.lastIndexOf(",")-1);var z=0;for(var s=x.length-1;s>-1;s--)w=x.charAt(s)+w,z++,z==y&&s!=0&&(w=i+w,z=0);if(v.length>w.length){var A=v.indexOf("0");if(A!=-1){var B=v.length-A,C=v.length-w.length-1;while(w.length<B){var D=v.charAt(C);D==","&&(D=i),w=D+w,C--}}}}return!w&&v.indexOf("0",v.length-1)!==-1&&(w="0"),m=w+m,b<0&&f&&e.length>0?e=j+e:b<0&&(m=j+m),c.decimalSeparatorAlwaysShown||m.lastIndexOf(h)==m.length-1&&(m=m.substring(0,m.length-1)),m=e+m+d,m},a.fn.parseNumber=function(b,c,d){c==null&&(c=!0),d==null&&(d=!0);var e;a(this).is(":input")?e=new String(a(this).val()):e=new String(a(this).text());var f=a.parseNumber(e,b);if(f){c&&(a(this).is(":input")?a(this).val(f.toString()):a(this).text(f.toString()));if(d)return f}},a.parseNumber=function(b,c){var c=a.extend({},a.fn.parseNumber.defaults,c),d=k(c.locale.toLowerCase(),c.isFullLocale),e=d.dec,f=d.group,g=d.neg,h="1234567890.-";while(b.indexOf(f)>-1)b=b.replace(f,"");b=b.replace(e,".").replace(g,"-");var i="",j=!1;if(b.charAt(b.length-1)=="%"||c.isPercentage==1)j=!0;for(var l=0;l<b.length;l++)h.indexOf(b.charAt(l))>-1&&(i+=b.charAt(l));var m=new Number(i);if(j){m/=100;var n=i.indexOf(".");if(n!=-1){var o=i.length-n-1;m=m.toFixed(o+2)}else m=m.toFixed(i.length-1)}return m},a.fn.parseNumber.defaults={locale:"us",decimalSeparatorAlwaysShown:!1,isPercentage:!1,isFullLocale:!1},a.fn.formatNumber.defaults={format:"#,###.00",locale:"us",decimalSeparatorAlwaysShown:!1,nanForceZero:!0,round:!0,isFullLocale:!1},Number.prototype.toFixed=function(b){return a._roundNumber(this,b)},a._roundNumber=function(a,b){var c=Math.pow(10,b||0),d=String(Math.round(a*c)/c);if(b>0){var e=d.indexOf(".");e==-1?(d+=".",e=0):e=d.length-(e+1);while(e<b)d+="0",e++}return d}})(jQuery),function(){var a={};this.tmpl=function b(c,d){var e=/\W/.test(c)?new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+c.replace(/[\r\t\n]/g," ").split("<%").join("\t").replace(/((^|%>)[^\t]*)'/g,"$1\r").replace(/\t=(.*?)%>/g,"',$1,'").split("\t").join("');").split("%>").join("p.push('").split("\r").join("\\'")+"');}return p.join('');"):a[c]=a[c]||b(document.getElementById(c).innerHTML);return d?e(d):e}}(),function(a){a.baseClass=function(b){return b=a(b),b.get(0).className.match(/([^ ]+)/)[1]},a.fn.addDependClass=function(b,c){var d={delimiter:c?c:"-"};return this.each(function(){var c=a.baseClass(this);c&&a(this).addClass(c+d.delimiter+b)})},a.fn.removeDependClass=function(b,c){var d={delimiter:c?c:"-"};return this.each(function(){var c=a.baseClass(this);c&&a(this).removeClass(c+d.delimiter+b)})},a.fn.toggleDependClass=function(b,c){var d={delimiter:c?c:"-"};return this.each(function(){var c=a.baseClass(this);c&&(a(this).is("."+c+d.delimiter+b)?a(this).removeClass(c+d.delimiter+b):a(this).addClass(c+d.delimiter+b))})}}(jQuery),function(a){function b(){this._init.apply(this,arguments)}b.prototype.oninit=function(){},b.prototype.events=function(){},b.prototype.onmousedown=function(){this.ptr.css({position:"absolute"})},b.prototype.onmousemove=function(a,b,c){this.ptr.css({left:b,top:c})},b.prototype.onmouseup=function(){},b.prototype.isDefault={drag:!1,clicked:!1,toclick:!0,mouseup:!1},b.prototype._init=function(){if(arguments.length>0){this.ptr=a(arguments[0]),this.outer=a(".draggable-outer"),this.is={},a.extend(this.is,this.isDefault);var b=this.ptr.offset();this.d={left:b.left,top:b.top,width:this.ptr.width(),height:this.ptr.height()},this.oninit.apply(this,arguments),this._events()}},b.prototype._getPageCoords=function(a){return a.targetTouches&&a.targetTouches[0]?{x:a.targetTouches[0].pageX,y:a.targetTouches[0].pageY}:{x:a.pageX,y:a.pageY}},b.prototype._bindEvent=function(a,b,c){var d=this;this.supportTouches_?a.get(0).addEventListener(this.events_[b],c,!1):a.bind(this.events_[b],c)},b.prototype._events=function(){var b=this;this.supportTouches_=a.browser.webkit&&navigator.userAgent.indexOf("Mobile")!=-1,this.events_={click:this.supportTouches_?"touchstart":"click",down:this.supportTouches_?"touchstart":"mousedown",move:this.supportTouches_?"touchmove":"mousemove",up:this.supportTouches_?"touchend":"mouseup"},this._bindEvent(a(document),"move",function(a){b.is.drag&&(a.stopPropagation(),a.preventDefault(),b._mousemove(a))}),this._bindEvent(a(document),"down",function(a){b.is.drag&&(a.stopPropagation(),a.preventDefault())}),this._bindEvent(a(document),"up",function(a){b._mouseup(a)}),this._bindEvent(this.ptr,"down",function(a){return b._mousedown(a),!1}),this._bindEvent(this.ptr,"up",function(a){b._mouseup(a)}),this.ptr.find("a").click(function(){b.is.clicked=!0;if(!b.is.toclick)return b.is.toclick=!0,!1}).mousedown(function(a){return b._mousedown(a),!1}),this.events()},b.prototype._mousedown=function(b){this.is.drag=!0,this.is.clicked=!1,this.is.mouseup=!1;var c=this.ptr.offset(),d=this._getPageCoords(b);this.cx=d.x-c.left,this.cy=d.y-c.top,a.extend(this.d,{left:c.left,top:c.top,width:this.ptr.width(),height:this.ptr.height()}),this.outer&&this.outer.get(0)&&this.outer.css({height:Math.max(this.outer.height(),a(document.body).height()),overflow:"hidden"}),this.onmousedown(b)},b.prototype._mousemove=function(a){this.is.toclick=!1;var b=this._getPageCoords(a);this.onmousemove(a,b.x-this.cx,b.y-this.cy)},b.prototype._mouseup=function(b){var c=this;this.is.drag&&(this.is.drag=!1,this.outer&&this.outer.get(0)&&(a.browser.mozilla?this.outer.css({overflow:"hidden"}):this.outer.css({overflow:"visible"}),a.browser.msie&&a.browser.version=="6.0"?this.outer.css({height:"100%"}):this.outer.css({height:"auto"})),this.onmouseup(b))},window.Draggable=b}(jQuery),function(a){function b(a){return typeof a=="undefined"?!1:a instanceof Array||!(a instanceof Object)&&Object.prototype.toString.call(a)=="[object Array]"||typeof a.length=="number"&&typeof a.splice!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("splice")?!0:!1}function d(){return this.init.apply(this,arguments)}function e(){Draggable.apply(this,arguments)}a.slider=function(b,c){var e=a(b);return e.data("jslider")||e.data("jslider",new d(b,c)),e.data("jslider")},a.fn.slider=function(c,d){function g(a){return a!==undefined}function h(a){return a!=null}var e,f=arguments;return this.each(function(){var i=a.slider(this,c);if(typeof c=="string")switch(c){case"value":if(g(f[1])&&g(f[2])){var j=i.getPointers();h(j[0])&&h(f[1])&&(j[0].set(f[1]),j[0].setIndexOver()),h(j[1])&&h(f[2])&&(j[1].set(f[2]),j[1].setIndexOver())}else if(g(f[1])){var j=i.getPointers();h(j[0])&&h(f[1])&&(j[0].set(f[1]),j[0].setIndexOver())}else e=i.getValue();break;case"prc":if(g(f[1])&&g(f[2])){var j=i.getPointers();h(j[0])&&h(f[1])&&(j[0]._set(f[1]),j[0].setIndexOver()),h(j[1])&&h(f[2])&&(j[1]._set(f[2]),j[1].setIndexOver())}else if(g(f[1])){var j=i.getPointers();h(j[0])&&h(f[1])&&(j[0]._set(f[1]),j[0].setIndexOver())}else e=i.getPrcValue();break;case"calculatedValue":var k=i.getValue().split(";");e="";for(var l=0;l<k.length;l++)e+=(l>0?";":"")+i.nice(k[l]);break;case"skin":i.setSkin(f[1])}else!c&&!d&&(b(e)||(e=[]),e.push(i))}),b(e)&&e.length==1&&(e=e[0]),e||this};var c={settings:{from:1,to:10,step:1,smooth:!0,limits:!0,round:0,format:{format:"#,##0.##"},value:"5;7",dimension:""},className:"jslider",selector:".jslider-",template:tmpl('<span class="<%=className%>"><table><tr><td><div class="<%=className%>-bg"><i class="l"></i><i class="r"></i><i class="v"></i></div><div class="<%=className%>-pointer"></div><div class="<%=className%>-pointer <%=className%>-pointer-to"></div><div class="<%=className%>-label"><span><%=settings.from%></span></div><div class="<%=className%>-label <%=className%>-label-to"><span><%=settings.to%></span><%=settings.dimension%></div><div class="<%=className%>-value"><span></span><%=settings.dimension%></div><div class="<%=className%>-value <%=className%>-value-to"><span></span><%=settings.dimension%></div><div class="<%=className%>-scale"><%=scale%></div></td></tr></table></span>')};d.prototype.init=function(b,d){this.settings=a.extend(!0,{},c.settings,d?d:{}),this.inputNode=a(b).hide(),this.settings.interval=this.settings.to-this.settings.from,this.settings.value=this.inputNode.attr("value"),this.settings.calculate&&a.isFunction(this.settings.calculate)&&(this.nice=this.settings.calculate),this.settings.onstatechange&&a.isFunction(this.settings.onstatechange)&&(this.onstatechange=this.settings.onstatechange),this.is={init:!1},this.o={},this.create()},d.prototype.onstatechange=function(){},d.prototype.create=function(){var b=this;this.domNode=a(c.template({className:c.className,settings:{from:this.nice(this.settings.from),to:this.nice(this.settings.to),dimension:this.settings.dimension},scale:this.generateScale()})),this.inputNode.after(this.domNode),this.drawScale(),this.settings.skin&&this.settings.skin.length>0&&this.setSkin(this.settings.skin),this.sizes={domWidth:this.domNode.width(),domOffset:this.domNode.offset()},a.extend(this.o,{pointers:{},labels:{0:{o:this.domNode.find(c.selector+"value").not(c.selector+"value-to")},1:{o:this.domNode.find(c.selector+"value").filter(c.selector+"value-to")}},limits:{0:this.domNode.find(c.selector+"label").not(c.selector+"label-to"),1:this.domNode.find(c.selector+"label").filter(c.selector+"label-to")}}),a.extend(this.o.labels[0],{value:this.o.labels[0].o.find("span")}),a.extend(this.o.labels[1],{value:this.o.labels[1].o.find("span")}),b.settings.value.split(";")[1]||(this.settings.single=!0,this.domNode.addDependClass("single")),b.settings.limits||this.domNode.addDependClass("limitless"),this.domNode.find(c.selector+"pointer").each(function(a){var c=b.settings.value.split(";")[a];if(c){b.o.pointers[a]=new e(this,a,b);var d=b.settings.value.split(";")[a-1];d&&new Number(c)<new Number(d)&&(c=d),c=c<b.settings.from?b.settings.from:c,c=c>b.settings.to?b.settings.to:c,b.o.pointers[a].set(c,!0)}}),this.o.value=this.domNode.find(".v"),this.is.init=!0,a.each(this.o.pointers,function(a){b.redraw(this)}),function(b){a(window).resize(function(){b.onresize()})}(this)},d.prototype.setSkin=function(a){this.skin_&&this.domNode.removeDependClass(this.skin_,"_"),this.domNode.addDependClass(this.skin_=a,"_")},d.prototype.setPointersIndex=function(b){a.each(this.getPointers(),function(a){this.index(a)})},d.prototype.getPointers=function(){return this.o.pointers},d.prototype.generateScale=function(){if(this.settings.scale&&this.settings.scale.length>0){var a="",b=this.settings.scale,c=Math.round(100/(b.length-1)*10)/10;for(var d=0;d<b.length;d++)a+='<span style="left: '+d*c+'%">'+(b[d]!="|"?"<ins>"+b[d]+"</ins>":"")+"</span>";return a}return""},d.prototype.drawScale=function(){this.domNode.find(c.selector+"scale span ins").each(function(){a(this).css({marginLeft:-a(this).outerWidth()/2})})},d.prototype.onresize=function(){var b=this;this.sizes={domWidth:this.domNode.width(),domOffset:this.domNode.offset()},a.each(this.o.pointers,function(a){b.redraw(this)})},d.prototype.update=function(){this.onresize(),this.drawScale()},d.prototype.limits=function(a,b){if(!this.settings.smooth){var c=this.settings.step*100/this.settings.interval;a=Math.round(a/c)*c}var d=this.o.pointers[1-b.uid];return d&&b.uid&&a<d.value.prc&&(a=d.value.prc),d&&!b.uid&&a>d.value.prc&&(a=d.value.prc),a<0&&(a=0),a>100&&(a=100),Math.round(a*10)/10},d.prototype.redraw=function(a){if(!this.is.init)return!1;this.setValue(),this.o.pointers[0]&&this.o.pointers[1]&&this.o.value.css({left:this.o.pointers[0].value.prc+"%",width:this.o.pointers[1].value.prc-this.o.pointers[0].value.prc+"%"}),this.o.labels[a.uid].value.html(this.nice(a.value.origin)),this.redrawLabels(a)},d.prototype.redrawLabels=function(a){function b(a,b,d){return b.margin=-b.label/2,label_left=b.border+b.margin,label_left<0&&(b.margin-=label_left),b.border+b.label/2>c.sizes.domWidth?(b.margin=0,b.right=!0):b.right=!1,a.o.css({left:d+"%",marginLeft:b.margin,right:"auto"}),b.right&&a.o.css({left:"auto",right:0}),b}var c=this,d=this.o.labels[a.uid],e=a.value.prc,f={label:d.o.outerWidth(),right:!1,border:e*this.sizes.domWidth/100};if(!this.settings.single){var g=this.o.pointers[1-a.uid],h=this.o.labels[g.uid];switch(a.uid){case 0:f.border+f.label/2>h.o.offset().left-this.sizes.domOffset.left?(h.o.css({visibility:"hidden"}),h.value.html(this.nice(g.value.origin)),d.o.css({visibility:"visible"}),e=(g.value.prc-e)/2+e,g.value.prc!=a.value.prc&&(d.value.html(this.nice(a.value.origin)+"&nbsp;&ndash;&nbsp;"+this.nice(g.value.origin)),f.label=d.o.outerWidth(),f.border=e*this.sizes.domWidth/100)):h.o.css({visibility:"visible"});break;case 1:f.border-f.label/2<h.o.offset().left-this.sizes.domOffset.left+h.o.outerWidth()?(h.o.css({visibility:"hidden"}),h.value.html(this.nice(g.value.origin)),d.o.css({visibility:"visible"}),e=(e-g.value.prc)/2+g.value.prc,g.value.prc!=a.value.prc&&(d.value.html(this.nice(g.value.origin)+"&nbsp;&ndash;&nbsp;"+this.nice(a.value.origin)),f.label=d.o.outerWidth(),f.border=e*this.sizes.domWidth/100)):h.o.css({visibility:"visible"})}}f=b(d,f,e);if(h){var f={label:h.o.outerWidth(),right:!1,border:g.value.prc*this.sizes.domWidth/100};f=b(h,f,g.value.prc)}this.redrawLimits()},d.prototype.redrawLimits=function(){if(this.settings.limits){var a=[!0,!0];for(key in this.o.pointers)if(!this.settings.single||key==0){var b=this.o.pointers[key],c=this.o.labels[b.uid],d=c.o.offset().left-this.sizes.domOffset.left,e=this.o.limits[0];d<e.outerWidth()&&(a[0]=!1);var e=this.o.limits[1];d+c.o.outerWidth()>this.sizes.domWidth-e.outerWidth()&&(a[1]=!1)}for(var f=0;f<a.length;f++)a[f]?this.o.limits[f].fadeIn("fast"):this.o.limits[f].fadeOut("fast")}},d.prototype.setValue=function(){var a=this.getValue();this.inputNode.attr("value",a),this.onstatechange.call(this,a)},d.prototype.getValue=function(){if(!this.is.init)return!1;var b=this,c="";return a.each(this.o.pointers,function(a){this.value.prc!=undefined&&!isNaN(this.value.prc)&&(c+=(a>0?";":"")+b.prcToValue(this.value.prc))}),c},d.prototype.getPrcValue=function(){if(!this.is.init)return!1;var b=this,c="";return a.each(this.o.pointers,function(a){this.value.prc!=undefined&&!isNaN(this.value.prc)&&(c+=(a>0?";":"")+this.value.prc)}),c},d.prototype.prcToValue=function(a){if(this.settings.heterogeneity&&this.settings.heterogeneity.length>0){var b=this.settings.heterogeneity,c=0,d=this.settings.from;for(var e=0;e<=b.length;e++){if(b[e])var f=b[e].split("/");else var f=[100,this.settings.to];f[0]=new Number(f[0]),f[1]=new Number(f[1]);if(a>=c&&a<=f[0])var g=d+(a-c)*(f[1]-d)/(f[0]-c);c=f[0],d=f[1]}}else var g=this.settings.from+a*this.settings.interval/100;return this.round(g)},d.prototype.valueToPrc=function(a,b){if(this.settings.heterogeneity&&this.settings.heterogeneity.length>0){var c=this.settings.heterogeneity,d=0,e=this.settings.from;for(var f=0;f<=c.length;f++){if(c[f])var g=c[f].split("/");else var g=[100,this.settings.to];g[0]=new Number(g[0]),g[1]=new Number(g[1]);if(a>=e&&a<=g[1])var h=b.limits(d+(a-e)*(g[0]-d)/(g[1]-e));d=g[0],e=g[1]}}else var h=b.limits((a-this.settings.from)*100/this.settings.interval);return h},d.prototype.round=function(a){return a=Math.round(a/this.settings.step)*this.settings.step,this.settings.round?a=Math.round(a*Math.pow(10,this.settings.round))/Math.pow(10,this.settings.round):a=Math.round(a),a},d.prototype.nice=function(b){return b=b.toString().replace(/,/gi,".").replace(/ /gi,""),a.formatNumber?a.formatNumber(new Number(b),this.settings.format||{}).replace(/-/gi,"&minus;"):new Number(b)},e.prototype=new Draggable,e.prototype.oninit=function(a,b,c){this.uid=b,this.parent=c,this.value={},this.settings=this.parent.settings},e.prototype.onmousedown=function(a){this._parent={offset:this.parent.domNode.offset(),width:this.parent.domNode.width()},this.ptr.addDependClass("hover"),this.setIndexOver()},e.prototype.onmousemove=function(a,b){var c=this._getPageCoords(a);this._set(this.calc(c.x))},e.prototype.onmouseup=function(b){this.parent.settings.callback&&a.isFunction(this.parent.settings.callback)&&this.parent.settings.callback.call(this.parent,this.parent.getValue()),this.ptr.removeDependClass("hover")},e.prototype.setIndexOver=function(){this.parent.setPointersIndex(1),this.index(2)},e.prototype.index=function(a){this.ptr.css({zIndex:a})},e.prototype.limits=function(a){return this.parent.limits(a,this)},e.prototype.calc=function(a){var b=this.limits((a-this._parent.offset.left)*100/this._parent.width);return b},e.prototype.set=function(a,b){this.value.origin=this.parent.round(a),this._set(this.parent.valueToPrc(a,this),b)},e.prototype._set=function(a,b){b||(this.value.origin=this.parent.prcToValue(a)),this.value.prc=a,this.ptr.css({left:a+"%"}),this.parent.redraw(this)}}(jQuery); \ No newline at end of file
diff --git a/library/jslider/css/jslider.blue.css b/library/jslider/css/jslider.blue.css
deleted file mode 100644
index ae378433c..000000000
--- a/library/jslider/css/jslider.blue.css
+++ /dev/null
@@ -1,4 +0,0 @@
-
- .jslider_blue .jslider-bg i,
- .jslider_blue .jslider-pointer { background-image: url(../img/jslider.blue.png); }
- \ No newline at end of file
diff --git a/library/jslider/css/jslider.css b/library/jslider/css/jslider.css
deleted file mode 100644
index fe943dc0a..000000000
--- a/library/jslider/css/jslider.css
+++ /dev/null
@@ -1,39 +0,0 @@
-
- .jslider .jslider-bg i,
- .jslider .jslider-pointer { background: url(../img/jslider.png) no-repeat 0 0; }
-
- .jslider { display: block; width: 100%; height: 1em; position: relative; top: 0.6em; font-family: Arial, sans-serif; }
- .jslider table { width: 100%; border-collapse: collapse; border: 0; }
- .jslider td, .jslider th { padding: 0; vertical-align: top; text-align: left; border: 0; }
-
- .jslider table,
- .jslider table tr,
- .jslider table tr td { width: 100%; vertical-align: top; }
-
- .jslider .jslider-bg { position: relative; }
- .jslider .jslider-bg i { height: 5px; position: absolute; font-size: 0; top: 0; }
- .jslider .jslider-bg .l { width: 50%; background-position: 0 0; left: 0; background: #888; }
- .jslider .jslider-bg .r { width: 50%; left: 50%; background-position: right 0; background: #888;}
- .jslider .jslider-bg .v { position: absolute; background: url(../img/jslider.png) repeat-x 0 0; width: 60%; left: 20%; top: 0; height: 5px; background-position: 0 -20px; }
-
- .jslider .jslider-pointer { width: 13px; height: 15px; background-position: 0 -40px; position: absolute; left: 20%; top: -4px; margin-left: -6px; cursor: pointer; cursor: hand; }
- .jslider .jslider-pointer-hover { background-position: -20px -40px; }
- .jslider .jslider-pointer-to { left: 80%; }
-
- .jslider .jslider-label { font-size: 9px; line-height: 12px; color: black; opacity: 0.4; white-space: nowrap; padding: 0px 2px; position: absolute; top: -18px; left: 0px; }
- .jslider .jslider-label-to { left: auto; right: 0; }
-
- .jslider .jslider-value { font-size: 9px; white-space: nowrap; padding: 1px 2px 0; position: absolute; top: -19px; left: 20%; line-height: 12px; }
- .jslider .jslider-value-to { left: 80%; }
-
- .jslider .jslider-label small,
- .jslider .jslider-value small { position: relative; top: -0.4em; }
-
- .jslider .jslider-scale { position: relative; top: 9px; }
- .jslider .jslider-scale span { position: absolute; height: 5px; border-left: 1px solid #999; font-size: 0; }
- .jslider .jslider-scale ins { font-size: 9px; text-decoration: none; position: absolute; left: 0px; top: 5px; color: #999; }
-
- .jslider-single .jslider-pointer-to,
- .jslider-single .jslider-value-to,
- .jslider-single .jslider-bg .v,
- .jslider-limitless .jslider-label { display: none; }
diff --git a/library/jslider/css/jslider.plastic.css b/library/jslider/css/jslider.plastic.css
deleted file mode 100644
index 32b54676b..000000000
--- a/library/jslider/css/jslider.plastic.css
+++ /dev/null
@@ -1,3 +0,0 @@
-
- .jslider_plastic .jslider-bg i,
- .jslider_plastic .jslider-pointer { background-image: url(../img/jslider.plastic.png); }
diff --git a/library/jslider/css/jslider.round.css b/library/jslider/css/jslider.round.css
deleted file mode 100644
index 00ad952e6..000000000
--- a/library/jslider/css/jslider.round.css
+++ /dev/null
@@ -1,5 +0,0 @@
-
- .jslider_round .jslider-bg i,
- .jslider_round .jslider-pointer { background-image: url(../img/jslider.round.png); }
-
- .jslider_round .jslider-pointer { width: 17px; height: 17px; top: -6px; margin-left: -8px; }
diff --git a/library/jslider/css/jslider.round.plastic.css b/library/jslider/css/jslider.round.plastic.css
deleted file mode 100644
index 4272e1fb0..000000000
--- a/library/jslider/css/jslider.round.plastic.css
+++ /dev/null
@@ -1,5 +0,0 @@
-
- .jslider_round_plastic .jslider-bg i,
- .jslider_round_plastic .jslider-pointer { background-image: url(../img/jslider.round.plastic.png); }
-
- .jslider_round_plastic .jslider-pointer { width: 18px; height: 18px; top: -7px; margin-left: -8px; }
diff --git a/library/jslider/img/jslider.blue.png b/library/jslider/img/jslider.blue.png
deleted file mode 100644
index e3d573c12..000000000
--- a/library/jslider/img/jslider.blue.png
+++ /dev/null
Binary files differ
diff --git a/library/jslider/img/jslider.plastic.png b/library/jslider/img/jslider.plastic.png
deleted file mode 100644
index 39c6d6527..000000000
--- a/library/jslider/img/jslider.plastic.png
+++ /dev/null
Binary files differ
diff --git a/library/jslider/img/jslider.png b/library/jslider/img/jslider.png
deleted file mode 100644
index 280eb7188..000000000
--- a/library/jslider/img/jslider.png
+++ /dev/null
Binary files differ
diff --git a/library/jslider/img/jslider.round.plastic.png b/library/jslider/img/jslider.round.plastic.png
deleted file mode 100644
index 3604d76bd..000000000
--- a/library/jslider/img/jslider.round.plastic.png
+++ /dev/null
Binary files differ
diff --git a/library/jslider/img/jslider.round.png b/library/jslider/img/jslider.round.png
deleted file mode 100644
index 24153eaa3..000000000
--- a/library/jslider/img/jslider.round.png
+++ /dev/null
Binary files differ
diff --git a/library/jslider/index.html b/library/jslider/index.html
deleted file mode 100644
index 994b0783f..000000000
--- a/library/jslider/index.html
+++ /dev/null
@@ -1,152 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
- <title>jSlider</title>
-
- <!-- bin/jquery.slider.min.css -->
- <link rel="stylesheet" href="css/jslider.css" type="text/css">
- <link rel="stylesheet" href="css/jslider.blue.css" type="text/css">
- <link rel="stylesheet" href="css/jslider.plastic.css" type="text/css">
- <link rel="stylesheet" href="css/jslider.round.css" type="text/css">
- <link rel="stylesheet" href="css/jslider.round.plastic.css" type="text/css">
- <!-- end -->
-
- <script type="text/javascript" src="js/jquery-1.7.1.js"></script>
-
- <!-- bin/jquery.slider.min.js -->
- <script type="text/javascript" src="js/jshashtable-2.1_src.js"></script>
- <script type="text/javascript" src="js/jquery.numberformatter-1.2.3.js"></script>
- <script type="text/javascript" src="js/tmpl.js"></script>
- <script type="text/javascript" src="js/jquery.dependClass-0.1.js"></script>
- <script type="text/javascript" src="js/draggable-0.1.js"></script>
- <script type="text/javascript" src="js/jquery.slider.js"></script>
- <!-- end -->
-
- <style type="text/css" media="screen">
- body { background: #EEF0F7; }
- .layout { padding: 50px; font-family: Georgia, serif; }
- .layout-slider { margin-bottom: 60px; width: 50%; }
- .layout-slider-settings { font-size: 12px; padding-bottom: 10px; }
- .layout-slider-settings pre { font-family: Courier; }
- </style>
-
-</head>
-<body>
-
- <div class="layout">
-
- <div class="layout-slider" style="width: 100%">
- Slider <span style="display: inline-block; width: 400px; padding: 0 5px;"><input id="Slider1" type="slider" name="price" value="30000.5;60000" /></span> in string
- </div>
- <script type="text/javascript" charset="utf-8">
- jQuery("#Slider1").slider({ from: 1000, to: 100000, step: 500, smooth: true, round: 0, dimension: "&nbsp;$", skin: "plastic" });
- </script>
-
- <div class="layout-slider-settings">
-<pre>{
- from: 5,
- to: 50,
- step: 2.5,
- round: 1,
- format: { format: '##.0', locale: 'de' },
- dimension: '&amp;nbsp;€'
-}</pre>
- </div>
- <div class="layout-slider">
- <input id="SliderSingle" type="slider" name="price" value="20" />
- </div>
- <script type="text/javascript" charset="utf-8">
- jQuery("#SliderSingle").slider({ from: 5, to: 50, step: 2.5, round: 1, format: { format: '##.0', locale: 'de' }, dimension: '&nbsp;€', skin: "round" });
- </script>
-
- <div class="layout-slider-settings">
-<pre>{
- from: 5000,
- to: 150000,
- heterogeneity: ['50/50000'],
- step: 1000,
- dimension: '&amp;nbsp;$'
-}</pre>
- </div>
- <div class="layout-slider">
- <input id="Slider2" type="slider" name="price" value="5000;50000" />
- </div>
- <script type="text/javascript" charset="utf-8">
- jQuery("#Slider2").slider({ from: 5000, to: 150000, heterogeneity: ['50/50000'], step: 1000, dimension: '&nbsp;$' });
- </script>
-
- <div class="layout-slider-settings">
-<pre>{
- from: 0,
- to: 500,
- heterogeneity: ['50/100', '75/250'],
- scale: [0, '|', 50, '|' , '100', '|', 250, '|', 500],
- limits: false,
- step: 1,
- dimension: '&amp;nbsp;m&lt;small&gt;2&lt;/small&gt;'
-}</pre>
- </div>
- <div class="layout-slider">
- <input id="Slider3" type="slider" name="area" value="25;75" />
- </div>
- <script type="text/javascript" charset="utf-8">
- jQuery("#Slider3").slider({ from: 0, to: 500, heterogeneity: ['50/100', '75/250'], scale: [0, '|', 50, '|', '100', '|', 250, '|', 500], limits: false, step: 1, dimension: '&nbsp;m<small>2</small>', skin: "round_plastic" });
- </script>
-
- <div class="layout-slider-settings">
-<pre>{
- from: 1,
- to: 30,
- heterogeneity: ['50/5', '75/15'],
- scale: [1, '|', 3, '|', '5', '|', 15, '|', 30],
- limits: false,
- step: 1,
- dimension: '',
- skin: "blue"
-}</pre>
- </div>
- <div class="layout-slider">
- <input id="Slider4" type="slider" name="area" value="2;10" />
- </div>
- <script type="text/javascript" charset="utf-8">
- jQuery("#Slider4").slider({ from: 1, to: 30, heterogeneity: ['50/5', '75/15'], scale: [1, '|', 3, '|', '5', '|', 15, '|', 30], limits: false, step: 1, dimension: '', skin: "blue", callback: function( value ){ console.dir( this ); } });
- </script>
-
-
- <div class="layout-slider-settings">
-<pre>{
- from: 480,
- to: 1020,
- step: 15,
- dimension: '',
- scale: ['8:00', '9:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00'],
- limits: false,
- calculate: function( value ){
- var hours = Math.floor( value / 60 );
- var mins = ( value - hours*60 );
- return (hours &lt; 10 ? "0"+hours : hours) + ":" + ( mins == 0 ? "00" : mins );
- },
- onstatechange: function( value ){
- console.dir( this );
- }
-}</pre>
- </div>
- <div class="layout-slider">
- <input id="Slider5" type="slider" name="area" value="600;720" />
- </div>
- <script type="text/javascript" charset="utf-8">
-
- jQuery("#Slider5").slider({ from: 480, to: 1020, step: 15, dimension: '', scale: ['8:00', '9:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00'], limits: false, calculate: function( value ){
- var hours = Math.floor( value / 60 );
- var mins = ( value - hours*60 );
- return (hours < 10 ? "0"+hours : hours) + ":" + ( mins == 0 ? "00" : mins );
- }})
-
- </script>
-
- </div>
-
-
-</body>
-</html> \ No newline at end of file
diff --git a/library/jslider/js/draggable-0.1.js b/library/jslider/js/draggable-0.1.js
deleted file mode 100644
index dd2688da5..000000000
--- a/library/jslider/js/draggable-0.1.js
+++ /dev/null
@@ -1,196 +0,0 @@
-/**
- * draggable - Class allows to make any element draggable
- *
- * Written by
- * Egor Khmelev (hmelyoff@gmail.com)
- *
- * Licensed under the MIT (MIT-LICENSE.txt).
- *
- * @author Egor Khmelev
- * @version 0.1.0-BETA ($Id$)
- *
- **/
-
-(function( $ ){
-
- function Draggable(){
- this._init.apply( this, arguments );
- };
-
- Draggable.prototype.oninit = function(){
-
- };
-
- Draggable.prototype.events = function(){
-
- };
-
- Draggable.prototype.onmousedown = function(){
- this.ptr.css({ position: "absolute" });
- };
-
- Draggable.prototype.onmousemove = function( evt, x, y ){
- this.ptr.css({ left: x, top: y });
- };
-
- Draggable.prototype.onmouseup = function(){
-
- };
-
- Draggable.prototype.isDefault = {
- drag: false,
- clicked: false,
- toclick: true,
- mouseup: false
- };
-
- Draggable.prototype._init = function(){
- if( arguments.length > 0 ){
- this.ptr = $(arguments[0]);
- this.outer = $(".draggable-outer");
-
- this.is = {};
- $.extend( this.is, this.isDefault );
-
- var _offset = this.ptr.offset();
- this.d = {
- left: _offset.left,
- top: _offset.top,
- width: this.ptr.width(),
- height: this.ptr.height()
- };
-
- this.oninit.apply( this, arguments );
-
- this._events();
- }
- };
-
- Draggable.prototype._getPageCoords = function( event ){
- if( event.targetTouches && event.targetTouches[0] ){
- return { x: event.targetTouches[0].pageX, y: event.targetTouches[0].pageY };
- } else
- return { x: event.pageX, y: event.pageY };
- };
-
- Draggable.prototype._bindEvent = function( ptr, eventType, handler ){
- var self = this;
-
- if( this.supportTouches_ )
- ptr.get(0).addEventListener( this.events_[ eventType ], handler, false );
-
- else
- ptr.bind( this.events_[ eventType ], handler );
- };
-
- Draggable.prototype._events = function(){
- var self = this;
-
- this.supportTouches_ = ( $.browser.webkit && navigator.userAgent.indexOf("Mobile") != -1 );
- this.events_ = {
- "click": this.supportTouches_ ? "touchstart" : "click",
- "down": this.supportTouches_ ? "touchstart" : "mousedown",
- "move": this.supportTouches_ ? "touchmove" : "mousemove",
- "up" : this.supportTouches_ ? "touchend" : "mouseup"
- };
-
- this._bindEvent( $( document ), "move", function( event ){
- if( self.is.drag ){
- event.stopPropagation();
- event.preventDefault();
- self._mousemove( event );
- }
- });
- this._bindEvent( $( document ), "down", function( event ){
- if( self.is.drag ){
- event.stopPropagation();
- event.preventDefault();
- }
- });
- this._bindEvent( $( document ), "up", function( event ){
- self._mouseup( event );
- });
-
- this._bindEvent( this.ptr, "down", function( event ){
- self._mousedown( event );
- return false;
- });
- this._bindEvent( this.ptr, "up", function( event ){
- self._mouseup( event );
- });
-
- this.ptr.find("a")
- .click(function(){
- self.is.clicked = true;
-
- if( !self.is.toclick ){
- self.is.toclick = true;
- return false;
- }
- })
- .mousedown(function( event ){
- self._mousedown( event );
- return false;
- });
-
- this.events();
- };
-
- Draggable.prototype._mousedown = function( evt ){
- this.is.drag = true;
- this.is.clicked = false;
- this.is.mouseup = false;
-
- var _offset = this.ptr.offset();
- var coords = this._getPageCoords( evt );
- this.cx = coords.x - _offset.left;
- this.cy = coords.y - _offset.top;
-
- $.extend(this.d, {
- left: _offset.left,
- top: _offset.top,
- width: this.ptr.width(),
- height: this.ptr.height()
- });
-
- if( this.outer && this.outer.get(0) ){
- this.outer.css({ height: Math.max(this.outer.height(), $(document.body).height()), overflow: "hidden" });
- }
-
- this.onmousedown( evt );
- };
-
- Draggable.prototype._mousemove = function( evt ){
- this.is.toclick = false;
- var coords = this._getPageCoords( evt );
- this.onmousemove( evt, coords.x - this.cx, coords.y - this.cy );
- };
-
- Draggable.prototype._mouseup = function( evt ){
- var oThis = this;
-
- if( this.is.drag ){
- this.is.drag = false;
-
- if( this.outer && this.outer.get(0) ){
-
- if( $.browser.mozilla ){
- this.outer.css({ overflow: "hidden" });
- } else {
- this.outer.css({ overflow: "visible" });
- }
-
- if( $.browser.msie && $.browser.version == '6.0' ){
- this.outer.css({ height: "100%" });
- } else {
- this.outer.css({ height: "auto" });
- }
- }
-
- this.onmouseup( evt );
- }
- };
-
- window.Draggable = Draggable;
-
-})( jQuery );
diff --git a/library/jslider/js/jquery-1.7.1.js b/library/jslider/js/jquery-1.7.1.js
deleted file mode 100644
index 8ccd0ea78..000000000
--- a/library/jslider/js/jquery-1.7.1.js
+++ /dev/null
@@ -1,9266 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.7.1
- * http://jquery.com/
- *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Mon Nov 21 21:11:03 2011 -0500
- */
-(function( window, undefined ) {
-
-// Use the correct document accordingly with window argument (sandbox)
-var document = window.document,
- navigator = window.navigator,
- location = window.location;
-var jQuery = (function() {
-
-// Define a local copy of jQuery
-var jQuery = function( selector, context ) {
- // The jQuery object is actually just the init constructor 'enhanced'
- return new jQuery.fn.init( selector, context, rootjQuery );
- },
-
- // Map over jQuery in case of overwrite
- _jQuery = window.jQuery,
-
- // Map over the $ in case of overwrite
- _$ = window.$,
-
- // A central reference to the root jQuery(document)
- rootjQuery,
-
- // A simple way to check for HTML strings or ID strings
- // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
- quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
-
- // Check if a string has a non-whitespace character in it
- rnotwhite = /\S/,
-
- // Used for trimming whitespace
- trimLeft = /^\s+/,
- trimRight = /\s+$/,
-
- // Match a standalone tag
- rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
-
- // JSON RegExp
- rvalidchars = /^[\],:{}\s]*$/,
- rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
- rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
- rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
-
- // Useragent RegExp
- rwebkit = /(webkit)[ \/]([\w.]+)/,
- ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
- rmsie = /(msie) ([\w.]+)/,
- rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
-
- // Matches dashed string for camelizing
- rdashAlpha = /-([a-z]|[0-9])/ig,
- rmsPrefix = /^-ms-/,
-
- // Used by jQuery.camelCase as callback to replace()
- fcamelCase = function( all, letter ) {
- return ( letter + "" ).toUpperCase();
- },
-
- // Keep a UserAgent string for use with jQuery.browser
- userAgent = navigator.userAgent,
-
- // For matching the engine and version of the browser
- browserMatch,
-
- // The deferred used on DOM ready
- readyList,
-
- // The ready event handler
- DOMContentLoaded,
-
- // Save a reference to some core methods
- toString = Object.prototype.toString,
- hasOwn = Object.prototype.hasOwnProperty,
- push = Array.prototype.push,
- slice = Array.prototype.slice,
- trim = String.prototype.trim,
- indexOf = Array.prototype.indexOf,
-
- // [[Class]] -> type pairs
- class2type = {};
-
-jQuery.fn = jQuery.prototype = {
- constructor: jQuery,
- init: function( selector, context, rootjQuery ) {
- var match, elem, ret, doc;
-
- // Handle $(""), $(null), or $(undefined)
- if ( !selector ) {
- return this;
- }
-
- // Handle $(DOMElement)
- if ( selector.nodeType ) {
- this.context = this[0] = selector;
- this.length = 1;
- return this;
- }
-
- // The body element only exists once, optimize finding it
- if ( selector === "body" && !context && document.body ) {
- this.context = document;
- this[0] = document.body;
- this.selector = selector;
- this.length = 1;
- return this;
- }
-
- // Handle HTML strings
- if ( typeof selector === "string" ) {
- // Are we dealing with HTML string or an ID?
- if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
- // Assume that strings that start and end with <> are HTML and skip the regex check
- match = [ null, selector, null ];
-
- } else {
- match = quickExpr.exec( selector );
- }
-
- // Verify a match, and that no context was specified for #id
- if ( match && (match[1] || !context) ) {
-
- // HANDLE: $(html) -> $(array)
- if ( match[1] ) {
- context = context instanceof jQuery ? context[0] : context;
- doc = ( context ? context.ownerDocument || context : document );
-
- // If a single string is passed in and it's a single tag
- // just do a createElement and skip the rest
- ret = rsingleTag.exec( selector );
-
- if ( ret ) {
- if ( jQuery.isPlainObject( context ) ) {
- selector = [ document.createElement( ret[1] ) ];
- jQuery.fn.attr.call( selector, context, true );
-
- } else {
- selector = [ doc.createElement( ret[1] ) ];
- }
-
- } else {
- ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
- selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes;
- }
-
- return jQuery.merge( this, selector );
-
- // HANDLE: $("#id")
- } else {
- elem = document.getElementById( match[2] );
-
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem.id !== match[2] ) {
- return rootjQuery.find( selector );
- }
-
- // Otherwise, we inject the element directly into the jQuery object
- this.length = 1;
- this[0] = elem;
- }
-
- this.context = document;
- this.selector = selector;
- return this;
- }
-
- // HANDLE: $(expr, $(...))
- } else if ( !context || context.jquery ) {
- return ( context || rootjQuery ).find( selector );
-
- // HANDLE: $(expr, context)
- // (which is just equivalent to: $(context).find(expr)
- } else {
- return this.constructor( context ).find( selector );
- }
-
- // HANDLE: $(function)
- // Shortcut for document ready
- } else if ( jQuery.isFunction( selector ) ) {
- return rootjQuery.ready( selector );
- }
-
- if ( selector.selector !== undefined ) {
- this.selector = selector.selector;
- this.context = selector.context;
- }
-
- return jQuery.makeArray( selector, this );
- },
-
- // Start with an empty selector
- selector: "",
-
- // The current version of jQuery being used
- jquery: "1.7.1",
-
- // The default length of a jQuery object is 0
- length: 0,
-
- // The number of elements contained in the matched element set
- size: function() {
- return this.length;
- },
-
- toArray: function() {
- return slice.call( this, 0 );
- },
-
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function( num ) {
- return num == null ?
-
- // Return a 'clean' array
- this.toArray() :
-
- // Return just the object
- ( num < 0 ? this[ this.length + num ] : this[ num ] );
- },
-
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function( elems, name, selector ) {
- // Build a new jQuery matched element set
- var ret = this.constructor();
-
- if ( jQuery.isArray( elems ) ) {
- push.apply( ret, elems );
-
- } else {
- jQuery.merge( ret, elems );
- }
-
- // Add the old object onto the stack (as a reference)
- ret.prevObject = this;
-
- ret.context = this.context;
-
- if ( name === "find" ) {
- ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
- } else if ( name ) {
- ret.selector = this.selector + "." + name + "(" + selector + ")";
- }
-
- // Return the newly-formed element set
- return ret;
- },
-
- // Execute a callback for every element in the matched set.
- // (You can seed the arguments with an array of args, but this is
- // only used internally.)
- each: function( callback, args ) {
- return jQuery.each( this, callback, args );
- },
-
- ready: function( fn ) {
- // Attach the listeners
- jQuery.bindReady();
-
- // Add the callback
- readyList.add( fn );
-
- return this;
- },
-
- eq: function( i ) {
- i = +i;
- return i === -1 ?
- this.slice( i ) :
- this.slice( i, i + 1 );
- },
-
- first: function() {
- return this.eq( 0 );
- },
-
- last: function() {
- return this.eq( -1 );
- },
-
- slice: function() {
- return this.pushStack( slice.apply( this, arguments ),
- "slice", slice.call(arguments).join(",") );
- },
-
- map: function( callback ) {
- return this.pushStack( jQuery.map(this, function( elem, i ) {
- return callback.call( elem, i, elem );
- }));
- },
-
- end: function() {
- return this.prevObject || this.constructor(null);
- },
-
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: push,
- sort: [].sort,
- splice: [].splice
-};
-
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-jQuery.extend = jQuery.fn.extend = function() {
- var options, name, src, copy, copyIsArray, clone,
- target = arguments[0] || {},
- i = 1,
- length = arguments.length,
- deep = false;
-
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
- target = arguments[1] || {};
- // skip the boolean and the target
- i = 2;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
- target = {};
- }
-
- // extend jQuery itself if only one argument is passed
- if ( length === i ) {
- target = this;
- --i;
- }
-
- for ( ; i < length; i++ ) {
- // Only deal with non-null/undefined values
- if ( (options = arguments[ i ]) != null ) {
- // Extend the base object
- for ( name in options ) {
- src = target[ name ];
- copy = options[ name ];
-
- // Prevent never-ending loop
- if ( target === copy ) {
- continue;
- }
-
- // Recurse if we're merging plain objects or arrays
- if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
- if ( copyIsArray ) {
- copyIsArray = false;
- clone = src && jQuery.isArray(src) ? src : [];
-
- } else {
- clone = src && jQuery.isPlainObject(src) ? src : {};
- }
-
- // Never move original objects, clone them
- target[ name ] = jQuery.extend( deep, clone, copy );
-
- // Don't bring in undefined values
- } else if ( copy !== undefined ) {
- target[ name ] = copy;
- }
- }
- }
- }
-
- // Return the modified object
- return target;
-};
-
-jQuery.extend({
- noConflict: function( deep ) {
- if ( window.$ === jQuery ) {
- window.$ = _$;
- }
-
- if ( deep && window.jQuery === jQuery ) {
- window.jQuery = _jQuery;
- }
-
- return jQuery;
- },
-
- // Is the DOM ready to be used? Set to true once it occurs.
- isReady: false,
-
- // A counter to track how many items to wait for before
- // the ready event fires. See #6781
- readyWait: 1,
-
- // Hold (or release) the ready event
- holdReady: function( hold ) {
- if ( hold ) {
- jQuery.readyWait++;
- } else {
- jQuery.ready( true );
- }
- },
-
- // Handle when the DOM is ready
- ready: function( wait ) {
- // Either a released hold or an DOMready/load event and not yet ready
- if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( !document.body ) {
- return setTimeout( jQuery.ready, 1 );
- }
-
- // Remember that the DOM is ready
- jQuery.isReady = true;
-
- // If a normal DOM Ready event fired, decrement, and wait if need be
- if ( wait !== true && --jQuery.readyWait > 0 ) {
- return;
- }
-
- // If there are functions bound, to execute
- readyList.fireWith( document, [ jQuery ] );
-
- // Trigger any bound ready events
- if ( jQuery.fn.trigger ) {
- jQuery( document ).trigger( "ready" ).off( "ready" );
- }
- }
- },
-
- bindReady: function() {
- if ( readyList ) {
- return;
- }
-
- readyList = jQuery.Callbacks( "once memory" );
-
- // Catch cases where $(document).ready() is called after the
- // browser event has already occurred.
- if ( document.readyState === "complete" ) {
- // Handle it asynchronously to allow scripts the opportunity to delay ready
- return setTimeout( jQuery.ready, 1 );
- }
-
- // Mozilla, Opera and webkit nightlies currently support this event
- if ( document.addEventListener ) {
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-
- // A fallback to window.onload, that will always work
- window.addEventListener( "load", jQuery.ready, false );
-
- // If IE event model is used
- } else if ( document.attachEvent ) {
- // ensure firing before onload,
- // maybe late but safe also for iframes
- document.attachEvent( "onreadystatechange", DOMContentLoaded );
-
- // A fallback to window.onload, that will always work
- window.attachEvent( "onload", jQuery.ready );
-
- // If IE and not a frame
- // continually check to see if the document is ready
- var toplevel = false;
-
- try {
- toplevel = window.frameElement == null;
- } catch(e) {}
-
- if ( document.documentElement.doScroll && toplevel ) {
- doScrollCheck();
- }
- }
- },
-
- // See test/unit/core.js for details concerning isFunction.
- // Since version 1.3, DOM methods and functions like alert
- // aren't supported. They return false on IE (#2968).
- isFunction: function( obj ) {
- return jQuery.type(obj) === "function";
- },
-
- isArray: Array.isArray || function( obj ) {
- return jQuery.type(obj) === "array";
- },
-
- // A crude way of determining if an object is a window
- isWindow: function( obj ) {
- return obj && typeof obj === "object" && "setInterval" in obj;
- },
-
- isNumeric: function( obj ) {
- return !isNaN( parseFloat(obj) ) && isFinite( obj );
- },
-
- type: function( obj ) {
- return obj == null ?
- String( obj ) :
- class2type[ toString.call(obj) ] || "object";
- },
-
- isPlainObject: function( obj ) {
- // Must be an Object.
- // Because of IE, we also have to check the presence of the constructor property.
- // Make sure that DOM nodes and window objects don't pass through, as well
- if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- try {
- // Not own constructor property must be Object
- if ( obj.constructor &&
- !hasOwn.call(obj, "constructor") &&
- !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
- return false;
- }
- } catch ( e ) {
- // IE8,9 Will throw exceptions on certain host objects #9897
- return false;
- }
-
- // Own properties are enumerated firstly, so to speed up,
- // if last one is own, then all properties are own.
-
- var key;
- for ( key in obj ) {}
-
- return key === undefined || hasOwn.call( obj, key );
- },
-
- isEmptyObject: function( obj ) {
- for ( var name in obj ) {
- return false;
- }
- return true;
- },
-
- error: function( msg ) {
- throw new Error( msg );
- },
-
- parseJSON: function( data ) {
- if ( typeof data !== "string" || !data ) {
- return null;
- }
-
- // Make sure leading/trailing whitespace is removed (IE can't handle it)
- data = jQuery.trim( data );
-
- // Attempt to parse using the native JSON parser first
- if ( window.JSON && window.JSON.parse ) {
- return window.JSON.parse( data );
- }
-
- // Make sure the incoming data is actual JSON
- // Logic borrowed from http://json.org/json2.js
- if ( rvalidchars.test( data.replace( rvalidescape, "@" )
- .replace( rvalidtokens, "]" )
- .replace( rvalidbraces, "")) ) {
-
- return ( new Function( "return " + data ) )();
-
- }
- jQuery.error( "Invalid JSON: " + data );
- },
-
- // Cross-browser xml parsing
- parseXML: function( data ) {
- var xml, tmp;
- try {
- if ( window.DOMParser ) { // Standard
- tmp = new DOMParser();
- xml = tmp.parseFromString( data , "text/xml" );
- } else { // IE
- xml = new ActiveXObject( "Microsoft.XMLDOM" );
- xml.async = "false";
- xml.loadXML( data );
- }
- } catch( e ) {
- xml = undefined;
- }
- if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
- jQuery.error( "Invalid XML: " + data );
- }
- return xml;
- },
-
- noop: function() {},
-
- // Evaluates a script in a global context
- // Workarounds based on findings by Jim Driscoll
- // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
- globalEval: function( data ) {
- if ( data && rnotwhite.test( data ) ) {
- // We use execScript on Internet Explorer
- // We use an anonymous function so that context is window
- // rather than jQuery in Firefox
- ( window.execScript || function( data ) {
- window[ "eval" ].call( window, data );
- } )( data );
- }
- },
-
- // Convert dashed to camelCase; used by the css and data modules
- // Microsoft forgot to hump their vendor prefix (#9572)
- camelCase: function( string ) {
- return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
- },
-
- nodeName: function( elem, name ) {
- return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
- },
-
- // args is for internal usage only
- each: function( object, callback, args ) {
- var name, i = 0,
- length = object.length,
- isObj = length === undefined || jQuery.isFunction( object );
-
- if ( args ) {
- if ( isObj ) {
- for ( name in object ) {
- if ( callback.apply( object[ name ], args ) === false ) {
- break;
- }
- }
- } else {
- for ( ; i < length; ) {
- if ( callback.apply( object[ i++ ], args ) === false ) {
- break;
- }
- }
- }
-
- // A special, fast, case for the most common use of each
- } else {
- if ( isObj ) {
- for ( name in object ) {
- if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
- break;
- }
- }
- } else {
- for ( ; i < length; ) {
- if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
- break;
- }
- }
- }
- }
-
- return object;
- },
-
- // Use native String.trim function wherever possible
- trim: trim ?
- function( text ) {
- return text == null ?
- "" :
- trim.call( text );
- } :
-
- // Otherwise use our own trimming functionality
- function( text ) {
- return text == null ?
- "" :
- text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
- },
-
- // results is for internal usage only
- makeArray: function( array, results ) {
- var ret = results || [];
-
- if ( array != null ) {
- // The window, strings (and functions) also have 'length'
- // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
- var type = jQuery.type( array );
-
- if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
- push.call( ret, array );
- } else {
- jQuery.merge( ret, array );
- }
- }
-
- return ret;
- },
-
- inArray: function( elem, array, i ) {
- var len;
-
- if ( array ) {
- if ( indexOf ) {
- return indexOf.call( array, elem, i );
- }
-
- len = array.length;
- i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
-
- for ( ; i < len; i++ ) {
- // Skip accessing in sparse arrays
- if ( i in array && array[ i ] === elem ) {
- return i;
- }
- }
- }
-
- return -1;
- },
-
- merge: function( first, second ) {
- var i = first.length,
- j = 0;
-
- if ( typeof second.length === "number" ) {
- for ( var l = second.length; j < l; j++ ) {
- first[ i++ ] = second[ j ];
- }
-
- } else {
- while ( second[j] !== undefined ) {
- first[ i++ ] = second[ j++ ];
- }
- }
-
- first.length = i;
-
- return first;
- },
-
- grep: function( elems, callback, inv ) {
- var ret = [], retVal;
- inv = !!inv;
-
- // Go through the array, only saving the items
- // that pass the validator function
- for ( var i = 0, length = elems.length; i < length; i++ ) {
- retVal = !!callback( elems[ i ], i );
- if ( inv !== retVal ) {
- ret.push( elems[ i ] );
- }
- }
-
- return ret;
- },
-
- // arg is for internal usage only
- map: function( elems, callback, arg ) {
- var value, key, ret = [],
- i = 0,
- length = elems.length,
- // jquery objects are treated as arrays
- isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
-
- // Go through the array, translating each of the items to their
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret[ ret.length ] = value;
- }
- }
-
- // Go through every key on the object,
- } else {
- for ( key in elems ) {
- value = callback( elems[ key ], key, arg );
-
- if ( value != null ) {
- ret[ ret.length ] = value;
- }
- }
- }
-
- // Flatten any nested arrays
- return ret.concat.apply( [], ret );
- },
-
- // A global GUID counter for objects
- guid: 1,
-
- // Bind a function to a context, optionally partially applying any
- // arguments.
- proxy: function( fn, context ) {
- if ( typeof context === "string" ) {
- var tmp = fn[ context ];
- context = fn;
- fn = tmp;
- }
-
- // Quick check to determine if target is callable, in the spec
- // this throws a TypeError, but we will just return undefined.
- if ( !jQuery.isFunction( fn ) ) {
- return undefined;
- }
-
- // Simulated bind
- var args = slice.call( arguments, 2 ),
- proxy = function() {
- return fn.apply( context, args.concat( slice.call( arguments ) ) );
- };
-
- // Set the guid of unique handler to the same of original handler, so it can be removed
- proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
-
- return proxy;
- },
-
- // Mutifunctional method to get and set values to a collection
- // The value/s can optionally be executed if it's a function
- access: function( elems, key, value, exec, fn, pass ) {
- var length = elems.length;
-
- // Setting many attributes
- if ( typeof key === "object" ) {
- for ( var k in key ) {
- jQuery.access( elems, k, key[k], exec, fn, value );
- }
- return elems;
- }
-
- // Setting one attribute
- if ( value !== undefined ) {
- // Optionally, function values get executed if exec is true
- exec = !pass && exec && jQuery.isFunction(value);
-
- for ( var i = 0; i < length; i++ ) {
- fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
- }
-
- return elems;
- }
-
- // Getting an attribute
- return length ? fn( elems[0], key ) : undefined;
- },
-
- now: function() {
- return ( new Date() ).getTime();
- },
-
- // Use of jQuery.browser is frowned upon.
- // More details: http://docs.jquery.com/Utilities/jQuery.browser
- uaMatch: function( ua ) {
- ua = ua.toLowerCase();
-
- var match = rwebkit.exec( ua ) ||
- ropera.exec( ua ) ||
- rmsie.exec( ua ) ||
- ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
- [];
-
- return { browser: match[1] || "", version: match[2] || "0" };
- },
-
- sub: function() {
- function jQuerySub( selector, context ) {
- return new jQuerySub.fn.init( selector, context );
- }
- jQuery.extend( true, jQuerySub, this );
- jQuerySub.superclass = this;
- jQuerySub.fn = jQuerySub.prototype = this();
- jQuerySub.fn.constructor = jQuerySub;
- jQuerySub.sub = this.sub;
- jQuerySub.fn.init = function init( selector, context ) {
- if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
- context = jQuerySub( context );
- }
-
- return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
- };
- jQuerySub.fn.init.prototype = jQuerySub.fn;
- var rootjQuerySub = jQuerySub(document);
- return jQuerySub;
- },
-
- browser: {}
-});
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
- class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-browserMatch = jQuery.uaMatch( userAgent );
-if ( browserMatch.browser ) {
- jQuery.browser[ browserMatch.browser ] = true;
- jQuery.browser.version = browserMatch.version;
-}
-
-// Deprecated, use jQuery.browser.webkit instead
-if ( jQuery.browser.webkit ) {
- jQuery.browser.safari = true;
-}
-
-// IE doesn't match non-breaking spaces with \s
-if ( rnotwhite.test( "\xA0" ) ) {
- trimLeft = /^[\s\xA0]+/;
- trimRight = /[\s\xA0]+$/;
-}
-
-// All jQuery objects should point back to these
-rootjQuery = jQuery(document);
-
-// Cleanup functions for the document ready method
-if ( document.addEventListener ) {
- DOMContentLoaded = function() {
- document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
- jQuery.ready();
- };
-
-} else if ( document.attachEvent ) {
- DOMContentLoaded = function() {
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( document.readyState === "complete" ) {
- document.detachEvent( "onreadystatechange", DOMContentLoaded );
- jQuery.ready();
- }
- };
-}
-
-// The DOM ready check for Internet Explorer
-function doScrollCheck() {
- if ( jQuery.isReady ) {
- return;
- }
-
- try {
- // If IE is used, use the trick by Diego Perini
- // http://javascript.nwbox.com/IEContentLoaded/
- document.documentElement.doScroll("left");
- } catch(e) {
- setTimeout( doScrollCheck, 1 );
- return;
- }
-
- // and execute any waiting functions
- jQuery.ready();
-}
-
-return jQuery;
-
-})();
-
-
-// String to Object flags format cache
-var flagsCache = {};
-
-// Convert String-formatted flags into Object-formatted ones and store in cache
-function createFlags( flags ) {
- var object = flagsCache[ flags ] = {},
- i, length;
- flags = flags.split( /\s+/ );
- for ( i = 0, length = flags.length; i < length; i++ ) {
- object[ flags[i] ] = true;
- }
- return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- * flags: an optional list of space-separated flags that will change how
- * the callback list behaves
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible flags:
- *
- * once: will ensure the callback list can only be fired once (like a Deferred)
- *
- * memory: will keep track of previous values and will call any callback added
- * after the list has been fired right away with the latest "memorized"
- * values (like a Deferred)
- *
- * unique: will ensure a callback can only be added once (no duplicate in the list)
- *
- * stopOnFalse: interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( flags ) {
-
- // Convert flags from String-formatted to Object-formatted
- // (we check in cache first)
- flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {};
-
- var // Actual callback list
- list = [],
- // Stack of fire calls for repeatable lists
- stack = [],
- // Last fire value (for non-forgettable lists)
- memory,
- // Flag to know if list is currently firing
- firing,
- // First callback to fire (used internally by add and fireWith)
- firingStart,
- // End of the loop when firing
- firingLength,
- // Index of currently firing callback (modified by remove if needed)
- firingIndex,
- // Add one or several callbacks to the list
- add = function( args ) {
- var i,
- length,
- elem,
- type,
- actual;
- for ( i = 0, length = args.length; i < length; i++ ) {
- elem = args[ i ];
- type = jQuery.type( elem );
- if ( type === "array" ) {
- // Inspect recursively
- add( elem );
- } else if ( type === "function" ) {
- // Add if not in unique mode and callback is not in
- if ( !flags.unique || !self.has( elem ) ) {
- list.push( elem );
- }
- }
- }
- },
- // Fire callbacks
- fire = function( context, args ) {
- args = args || [];
- memory = !flags.memory || [ context, args ];
- firing = true;
- firingIndex = firingStart || 0;
- firingStart = 0;
- firingLength = list.length;
- for ( ; list && firingIndex < firingLength; firingIndex++ ) {
- if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
- memory = true; // Mark as halted
- break;
- }
- }
- firing = false;
- if ( list ) {
- if ( !flags.once ) {
- if ( stack && stack.length ) {
- memory = stack.shift();
- self.fireWith( memory[ 0 ], memory[ 1 ] );
- }
- } else if ( memory === true ) {
- self.disable();
- } else {
- list = [];
- }
- }
- },
- // Actual Callbacks object
- self = {
- // Add a callback or a collection of callbacks to the list
- add: function() {
- if ( list ) {
- var length = list.length;
- add( arguments );
- // Do we need to add the callbacks to the
- // current firing batch?
- if ( firing ) {
- firingLength = list.length;
- // With memory, if we're not firing then
- // we should call right away, unless previous
- // firing was halted (stopOnFalse)
- } else if ( memory && memory !== true ) {
- firingStart = length;
- fire( memory[ 0 ], memory[ 1 ] );
- }
- }
- return this;
- },
- // Remove a callback from the list
- remove: function() {
- if ( list ) {
- var args = arguments,
- argIndex = 0,
- argLength = args.length;
- for ( ; argIndex < argLength ; argIndex++ ) {
- for ( var i = 0; i < list.length; i++ ) {
- if ( args[ argIndex ] === list[ i ] ) {
- // Handle firingIndex and firingLength
- if ( firing ) {
- if ( i <= firingLength ) {
- firingLength--;
- if ( i <= firingIndex ) {
- firingIndex--;
- }
- }
- }
- // Remove the element
- list.splice( i--, 1 );
- // If we have some unicity property then
- // we only need to do this once
- if ( flags.unique ) {
- break;
- }
- }
- }
- }
- }
- return this;
- },
- // Control if a given callback is in the list
- has: function( fn ) {
- if ( list ) {
- var i = 0,
- length = list.length;
- for ( ; i < length; i++ ) {
- if ( fn === list[ i ] ) {
- return true;
- }
- }
- }
- return false;
- },
- // Remove all callbacks from the list
- empty: function() {
- list = [];
- return this;
- },
- // Have the list do nothing anymore
- disable: function() {
- list = stack = memory = undefined;
- return this;
- },
- // Is it disabled?
- disabled: function() {
- return !list;
- },
- // Lock the list in its current state
- lock: function() {
- stack = undefined;
- if ( !memory || memory === true ) {
- self.disable();
- }
- return this;
- },
- // Is it locked?
- locked: function() {
- return !stack;
- },
- // Call all callbacks with the given context and arguments
- fireWith: function( context, args ) {
- if ( stack ) {
- if ( firing ) {
- if ( !flags.once ) {
- stack.push( [ context, args ] );
- }
- } else if ( !( flags.once && memory ) ) {
- fire( context, args );
- }
- }
- return this;
- },
- // Call all the callbacks with the given arguments
- fire: function() {
- self.fireWith( this, arguments );
- return this;
- },
- // To know if the callbacks have already been called at least once
- fired: function() {
- return !!memory;
- }
- };
-
- return self;
-};
-
-
-
-
-var // Static reference to slice
- sliceDeferred = [].slice;
-
-jQuery.extend({
-
- Deferred: function( func ) {
- var doneList = jQuery.Callbacks( "once memory" ),
- failList = jQuery.Callbacks( "once memory" ),
- progressList = jQuery.Callbacks( "memory" ),
- state = "pending",
- lists = {
- resolve: doneList,
- reject: failList,
- notify: progressList
- },
- promise = {
- done: doneList.add,
- fail: failList.add,
- progress: progressList.add,
-
- state: function() {
- return state;
- },
-
- // Deprecated
- isResolved: doneList.fired,
- isRejected: failList.fired,
-
- then: function( doneCallbacks, failCallbacks, progressCallbacks ) {
- deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );
- return this;
- },
- always: function() {
- deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
- return this;
- },
- pipe: function( fnDone, fnFail, fnProgress ) {
- return jQuery.Deferred(function( newDefer ) {
- jQuery.each( {
- done: [ fnDone, "resolve" ],
- fail: [ fnFail, "reject" ],
- progress: [ fnProgress, "notify" ]
- }, function( handler, data ) {
- var fn = data[ 0 ],
- action = data[ 1 ],
- returned;
- if ( jQuery.isFunction( fn ) ) {
- deferred[ handler ](function() {
- returned = fn.apply( this, arguments );
- if ( returned && jQuery.isFunction( returned.promise ) ) {
- returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify );
- } else {
- newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
- }
- });
- } else {
- deferred[ handler ]( newDefer[ action ] );
- }
- });
- }).promise();
- },
- // Get a promise for this deferred
- // If obj is provided, the promise aspect is added to the object
- promise: function( obj ) {
- if ( obj == null ) {
- obj = promise;
- } else {
- for ( var key in promise ) {
- obj[ key ] = promise[ key ];
- }
- }
- return obj;
- }
- },
- deferred = promise.promise({}),
- key;
-
- for ( key in lists ) {
- deferred[ key ] = lists[ key ].fire;
- deferred[ key + "With" ] = lists[ key ].fireWith;
- }
-
- // Handle state
- deferred.done( function() {
- state = "resolved";
- }, failList.disable, progressList.lock ).fail( function() {
- state = "rejected";
- }, doneList.disable, progressList.lock );
-
- // Call given func if any
- if ( func ) {
- func.call( deferred, deferred );
- }
-
- // All done!
- return deferred;
- },
-
- // Deferred helper
- when: function( firstParam ) {
- var args = sliceDeferred.call( arguments, 0 ),
- i = 0,
- length = args.length,
- pValues = new Array( length ),
- count = length,
- pCount = length,
- deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
- firstParam :
- jQuery.Deferred(),
- promise = deferred.promise();
- function resolveFunc( i ) {
- return function( value ) {
- args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
- if ( !( --count ) ) {
- deferred.resolveWith( deferred, args );
- }
- };
- }
- function progressFunc( i ) {
- return function( value ) {
- pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
- deferred.notifyWith( promise, pValues );
- };
- }
- if ( length > 1 ) {
- for ( ; i < length; i++ ) {
- if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) {
- args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) );
- } else {
- --count;
- }
- }
- if ( !count ) {
- deferred.resolveWith( deferred, args );
- }
- } else if ( deferred !== firstParam ) {
- deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
- }
- return promise;
- }
-});
-
-
-
-
-jQuery.support = (function() {
-
- var support,
- all,
- a,
- select,
- opt,
- input,
- marginDiv,
- fragment,
- tds,
- events,
- eventName,
- i,
- isSupported,
- div = document.createElement( "div" ),
- documentElement = document.documentElement;
-
- // Preliminary tests
- div.setAttribute("className", "t");
- div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-
- all = div.getElementsByTagName( "*" );
- a = div.getElementsByTagName( "a" )[ 0 ];
-
- // Can't get basic test support
- if ( !all || !all.length || !a ) {
- return {};
- }
-
- // First batch of supports tests
- select = document.createElement( "select" );
- opt = select.appendChild( document.createElement("option") );
- input = div.getElementsByTagName( "input" )[ 0 ];
-
- support = {
- // IE strips leading whitespace when .innerHTML is used
- leadingWhitespace: ( div.firstChild.nodeType === 3 ),
-
- // Make sure that tbody elements aren't automatically inserted
- // IE will insert them into empty tables
- tbody: !div.getElementsByTagName("tbody").length,
-
- // Make sure that link elements get serialized correctly by innerHTML
- // This requires a wrapper element in IE
- htmlSerialize: !!div.getElementsByTagName("link").length,
-
- // Get the style information from getAttribute
- // (IE uses .cssText instead)
- style: /top/.test( a.getAttribute("style") ),
-
- // Make sure that URLs aren't manipulated
- // (IE normalizes it by default)
- hrefNormalized: ( a.getAttribute("href") === "/a" ),
-
- // Make sure that element opacity exists
- // (IE uses filter instead)
- // Use a regex to work around a WebKit issue. See #5145
- opacity: /^0.55/.test( a.style.opacity ),
-
- // Verify style float existence
- // (IE uses styleFloat instead of cssFloat)
- cssFloat: !!a.style.cssFloat,
-
- // Make sure that if no value is specified for a checkbox
- // that it defaults to "on".
- // (WebKit defaults to "" instead)
- checkOn: ( input.value === "on" ),
-
- // Make sure that a selected-by-default option has a working selected property.
- // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
- optSelected: opt.selected,
-
- // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
- getSetAttribute: div.className !== "t",
-
- // Tests for enctype support on a form(#6743)
- enctype: !!document.createElement("form").enctype,
-
- // Makes sure cloning an html5 element does not cause problems
- // Where outerHTML is undefined, this still works
- html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
-
- // Will be defined later
- submitBubbles: true,
- changeBubbles: true,
- focusinBubbles: false,
- deleteExpando: true,
- noCloneEvent: true,
- inlineBlockNeedsLayout: false,
- shrinkWrapBlocks: false,
- reliableMarginRight: true
- };
-
- // Make sure checked status is properly cloned
- input.checked = true;
- support.noCloneChecked = input.cloneNode( true ).checked;
-
- // Make sure that the options inside disabled selects aren't marked as disabled
- // (WebKit marks them as disabled)
- select.disabled = true;
- support.optDisabled = !opt.disabled;
-
- // Test to see if it's possible to delete an expando from an element
- // Fails in Internet Explorer
- try {
- delete div.test;
- } catch( e ) {
- support.deleteExpando = false;
- }
-
- if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
- div.attachEvent( "onclick", function() {
- // Cloning a node shouldn't copy over any
- // bound event handlers (IE does this)
- support.noCloneEvent = false;
- });
- div.cloneNode( true ).fireEvent( "onclick" );
- }
-
- // Check if a radio maintains its value
- // after being appended to the DOM
- input = document.createElement("input");
- input.value = "t";
- input.setAttribute("type", "radio");
- support.radioValue = input.value === "t";
-
- input.setAttribute("checked", "checked");
- div.appendChild( input );
- fragment = document.createDocumentFragment();
- fragment.appendChild( div.lastChild );
-
- // WebKit doesn't clone checked state correctly in fragments
- support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
- // Check if a disconnected checkbox will retain its checked
- // value of true after appended to the DOM (IE6/7)
- support.appendChecked = input.checked;
-
- fragment.removeChild( input );
- fragment.appendChild( div );
-
- div.innerHTML = "";
-
- // Check if div with explicit width and no margin-right incorrectly
- // gets computed margin-right based on width of container. For more
- // info see bug #3333
- // Fails in WebKit before Feb 2011 nightlies
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- if ( window.getComputedStyle ) {
- marginDiv = document.createElement( "div" );
- marginDiv.style.width = "0";
- marginDiv.style.marginRight = "0";
- div.style.width = "2px";
- div.appendChild( marginDiv );
- support.reliableMarginRight =
- ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
- }
-
- // Technique from Juriy Zaytsev
- // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
- // We only care about the case where non-standard event systems
- // are used, namely in IE. Short-circuiting here helps us to
- // avoid an eval call (in setAttribute) which can cause CSP
- // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
- if ( div.attachEvent ) {
- for( i in {
- submit: 1,
- change: 1,
- focusin: 1
- }) {
- eventName = "on" + i;
- isSupported = ( eventName in div );
- if ( !isSupported ) {
- div.setAttribute( eventName, "return;" );
- isSupported = ( typeof div[ eventName ] === "function" );
- }
- support[ i + "Bubbles" ] = isSupported;
- }
- }
-
- fragment.removeChild( div );
-
- // Null elements to avoid leaks in IE
- fragment = select = opt = marginDiv = div = input = null;
-
- // Run tests that need a body at doc ready
- jQuery(function() {
- var container, outer, inner, table, td, offsetSupport,
- conMarginTop, ptlm, vb, style, html,
- body = document.getElementsByTagName("body")[0];
-
- if ( !body ) {
- // Return for frameset docs that don't have a body
- return;
- }
-
- conMarginTop = 1;
- ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";
- vb = "visibility:hidden;border:0;";
- style = "style='" + ptlm + "border:5px solid #000;padding:0;'";
- html = "<div " + style + "><div></div></div>" +
- "<table " + style + " cellpadding='0' cellspacing='0'>" +
- "<tr><td></td></tr></table>";
-
- container = document.createElement("div");
- container.style.cssText = vb + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
- body.insertBefore( container, body.firstChild );
-
- // Construct the test element
- div = document.createElement("div");
- container.appendChild( div );
-
- // Check if table cells still have offsetWidth/Height when they are set
- // to display:none and there are still other visible table cells in a
- // table row; if so, offsetWidth/Height are not reliable for use when
- // determining if an element has been hidden directly using
- // display:none (it is still safe to use offsets if a parent element is
- // hidden; don safety goggles and see bug #4512 for more information).
- // (only IE 8 fails this test)
- div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
- tds = div.getElementsByTagName( "td" );
- isSupported = ( tds[ 0 ].offsetHeight === 0 );
-
- tds[ 0 ].style.display = "";
- tds[ 1 ].style.display = "none";
-
- // Check if empty table cells still have offsetWidth/Height
- // (IE <= 8 fail this test)
- support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
-
- // Figure out if the W3C box model works as expected
- div.innerHTML = "";
- div.style.width = div.style.paddingLeft = "1px";
- jQuery.boxModel = support.boxModel = div.offsetWidth === 2;
-
- if ( typeof div.style.zoom !== "undefined" ) {
- // Check if natively block-level elements act like inline-block
- // elements when setting their display to 'inline' and giving
- // them layout
- // (IE < 8 does this)
- div.style.display = "inline";
- div.style.zoom = 1;
- support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
-
- // Check if elements with layout shrink-wrap their children
- // (IE 6 does this)
- div.style.display = "";
- div.innerHTML = "<div style='width:4px;'></div>";
- support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
- }
-
- div.style.cssText = ptlm + vb;
- div.innerHTML = html;
-
- outer = div.firstChild;
- inner = outer.firstChild;
- td = outer.nextSibling.firstChild.firstChild;
-
- offsetSupport = {
- doesNotAddBorder: ( inner.offsetTop !== 5 ),
- doesAddBorderForTableAndCells: ( td.offsetTop === 5 )
- };
-
- inner.style.position = "fixed";
- inner.style.top = "20px";
-
- // safari subtracts parent border width here which is 5px
- offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 );
- inner.style.position = inner.style.top = "";
-
- outer.style.overflow = "hidden";
- outer.style.position = "relative";
-
- offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 );
- offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop );
-
- body.removeChild( container );
- div = container = null;
-
- jQuery.extend( support, offsetSupport );
- });
-
- return support;
-})();
-
-
-
-
-var rbrace = /^(?:\{.*\}|\[.*\])$/,
- rmultiDash = /([A-Z])/g;
-
-jQuery.extend({
- cache: {},
-
- // Please use with caution
- uuid: 0,
-
- // Unique for each copy of jQuery on the page
- // Non-digits removed to match rinlinejQuery
- expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
-
- // The following elements throw uncatchable exceptions if you
- // attempt to add expando properties to them.
- noData: {
- "embed": true,
- // Ban all objects except for Flash (which handle expandos)
- "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
- "applet": true
- },
-
- hasData: function( elem ) {
- elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
- return !!elem && !isEmptyDataObject( elem );
- },
-
- data: function( elem, name, data, pvt /* Internal Use Only */ ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var privateCache, thisCache, ret,
- internalKey = jQuery.expando,
- getByName = typeof name === "string",
-
- // We have to handle DOM nodes and JS objects differently because IE6-7
- // can't GC object references properly across the DOM-JS boundary
- isNode = elem.nodeType,
-
- // Only DOM nodes need the global jQuery cache; JS object data is
- // attached directly to the object so GC can occur automatically
- cache = isNode ? jQuery.cache : elem,
-
- // Only defining an ID for JS objects if its cache already exists allows
- // the code to shortcut on the same path as a DOM node with no cache
- id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey,
- isEvents = name === "events";
-
- // Avoid doing any more work than we need to when trying to get data on an
- // object that has no data at all
- if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) {
- return;
- }
-
- if ( !id ) {
- // Only DOM nodes need a new unique ID for each element since their data
- // ends up in the global cache
- if ( isNode ) {
- elem[ internalKey ] = id = ++jQuery.uuid;
- } else {
- id = internalKey;
- }
- }
-
- if ( !cache[ id ] ) {
- cache[ id ] = {};
-
- // Avoids exposing jQuery metadata on plain JS objects when the object
- // is serialized using JSON.stringify
- if ( !isNode ) {
- cache[ id ].toJSON = jQuery.noop;
- }
- }
-
- // An object can be passed to jQuery.data instead of a key/value pair; this gets
- // shallow copied over onto the existing cache
- if ( typeof name === "object" || typeof name === "function" ) {
- if ( pvt ) {
- cache[ id ] = jQuery.extend( cache[ id ], name );
- } else {
- cache[ id ].data = jQuery.extend( cache[ id ].data, name );
- }
- }
-
- privateCache = thisCache = cache[ id ];
-
- // jQuery data() is stored in a separate object inside the object's internal data
- // cache in order to avoid key collisions between internal data and user-defined
- // data.
- if ( !pvt ) {
- if ( !thisCache.data ) {
- thisCache.data = {};
- }
-
- thisCache = thisCache.data;
- }
-
- if ( data !== undefined ) {
- thisCache[ jQuery.camelCase( name ) ] = data;
- }
-
- // Users should not attempt to inspect the internal events object using jQuery.data,
- // it is undocumented and subject to change. But does anyone listen? No.
- if ( isEvents && !thisCache[ name ] ) {
- return privateCache.events;
- }
-
- // Check for both converted-to-camel and non-converted data property names
- // If a data property was specified
- if ( getByName ) {
-
- // First Try to find as-is property data
- ret = thisCache[ name ];
-
- // Test for null|undefined property data
- if ( ret == null ) {
-
- // Try to find the camelCased property
- ret = thisCache[ jQuery.camelCase( name ) ];
- }
- } else {
- ret = thisCache;
- }
-
- return ret;
- },
-
- removeData: function( elem, name, pvt /* Internal Use Only */ ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var thisCache, i, l,
-
- // Reference to internal data cache key
- internalKey = jQuery.expando,
-
- isNode = elem.nodeType,
-
- // See jQuery.data for more information
- cache = isNode ? jQuery.cache : elem,
-
- // See jQuery.data for more information
- id = isNode ? elem[ internalKey ] : internalKey;
-
- // If there is already no cache entry for this object, there is no
- // purpose in continuing
- if ( !cache[ id ] ) {
- return;
- }
-
- if ( name ) {
-
- thisCache = pvt ? cache[ id ] : cache[ id ].data;
-
- if ( thisCache ) {
-
- // Support array or space separated string names for data keys
- if ( !jQuery.isArray( name ) ) {
-
- // try the string as a key before any manipulation
- if ( name in thisCache ) {
- name = [ name ];
- } else {
-
- // split the camel cased version by spaces unless a key with the spaces exists
- name = jQuery.camelCase( name );
- if ( name in thisCache ) {
- name = [ name ];
- } else {
- name = name.split( " " );
- }
- }
- }
-
- for ( i = 0, l = name.length; i < l; i++ ) {
- delete thisCache[ name[i] ];
- }
-
- // If there is no data left in the cache, we want to continue
- // and let the cache object itself get destroyed
- if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
- return;
- }
- }
- }
-
- // See jQuery.data for more information
- if ( !pvt ) {
- delete cache[ id ].data;
-
- // Don't destroy the parent cache unless the internal data object
- // had been the only thing left in it
- if ( !isEmptyDataObject(cache[ id ]) ) {
- return;
- }
- }
-
- // Browsers that fail expando deletion also refuse to delete expandos on
- // the window, but it will allow it on all other JS objects; other browsers
- // don't care
- // Ensure that `cache` is not a window object #10080
- if ( jQuery.support.deleteExpando || !cache.setInterval ) {
- delete cache[ id ];
- } else {
- cache[ id ] = null;
- }
-
- // We destroyed the cache and need to eliminate the expando on the node to avoid
- // false lookups in the cache for entries that no longer exist
- if ( isNode ) {
- // IE does not allow us to delete expando properties from nodes,
- // nor does it have a removeAttribute function on Document nodes;
- // we must handle all of these cases
- if ( jQuery.support.deleteExpando ) {
- delete elem[ internalKey ];
- } else if ( elem.removeAttribute ) {
- elem.removeAttribute( internalKey );
- } else {
- elem[ internalKey ] = null;
- }
- }
- },
-
- // For internal use only.
- _data: function( elem, name, data ) {
- return jQuery.data( elem, name, data, true );
- },
-
- // A method for determining if a DOM node can handle the data expando
- acceptData: function( elem ) {
- if ( elem.nodeName ) {
- var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
-
- if ( match ) {
- return !(match === true || elem.getAttribute("classid") !== match);
- }
- }
-
- return true;
- }
-});
-
-jQuery.fn.extend({
- data: function( key, value ) {
- var parts, attr, name,
- data = null;
-
- if ( typeof key === "undefined" ) {
- if ( this.length ) {
- data = jQuery.data( this[0] );
-
- if ( this[0].nodeType === 1 && !jQuery._data( this[0], "parsedAttrs" ) ) {
- attr = this[0].attributes;
- for ( var i = 0, l = attr.length; i < l; i++ ) {
- name = attr[i].name;
-
- if ( name.indexOf( "data-" ) === 0 ) {
- name = jQuery.camelCase( name.substring(5) );
-
- dataAttr( this[0], name, data[ name ] );
- }
- }
- jQuery._data( this[0], "parsedAttrs", true );
- }
- }
-
- return data;
-
- } else if ( typeof key === "object" ) {
- return this.each(function() {
- jQuery.data( this, key );
- });
- }
-
- parts = key.split(".");
- parts[1] = parts[1] ? "." + parts[1] : "";
-
- if ( value === undefined ) {
- data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
-
- // Try to fetch any internally stored data first
- if ( data === undefined && this.length ) {
- data = jQuery.data( this[0], key );
- data = dataAttr( this[0], key, data );
- }
-
- return data === undefined && parts[1] ?
- this.data( parts[0] ) :
- data;
-
- } else {
- return this.each(function() {
- var self = jQuery( this ),
- args = [ parts[0], value ];
-
- self.triggerHandler( "setData" + parts[1] + "!", args );
- jQuery.data( this, key, value );
- self.triggerHandler( "changeData" + parts[1] + "!", args );
- });
- }
- },
-
- removeData: function( key ) {
- return this.each(function() {
- jQuery.removeData( this, key );
- });
- }
-});
-
-function dataAttr( elem, key, data ) {
- // If nothing was found internally, try to fetch any
- // data from the HTML5 data-* attribute
- if ( data === undefined && elem.nodeType === 1 ) {
-
- var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
- data = elem.getAttribute( name );
-
- if ( typeof data === "string" ) {
- try {
- data = data === "true" ? true :
- data === "false" ? false :
- data === "null" ? null :
- jQuery.isNumeric( data ) ? parseFloat( data ) :
- rbrace.test( data ) ? jQuery.parseJSON( data ) :
- data;
- } catch( e ) {}
-
- // Make sure we set the data so it isn't changed later
- jQuery.data( elem, key, data );
-
- } else {
- data = undefined;
- }
- }
-
- return data;
-}
-
-// checks a cache object for emptiness
-function isEmptyDataObject( obj ) {
- for ( var name in obj ) {
-
- // if the public data object is empty, the private is still empty
- if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
- continue;
- }
- if ( name !== "toJSON" ) {
- return false;
- }
- }
-
- return true;
-}
-
-
-
-
-function handleQueueMarkDefer( elem, type, src ) {
- var deferDataKey = type + "defer",
- queueDataKey = type + "queue",
- markDataKey = type + "mark",
- defer = jQuery._data( elem, deferDataKey );
- if ( defer &&
- ( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
- ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
- // Give room for hard-coded callbacks to fire first
- // and eventually mark/queue something else on the element
- setTimeout( function() {
- if ( !jQuery._data( elem, queueDataKey ) &&
- !jQuery._data( elem, markDataKey ) ) {
- jQuery.removeData( elem, deferDataKey, true );
- defer.fire();
- }
- }, 0 );
- }
-}
-
-jQuery.extend({
-
- _mark: function( elem, type ) {
- if ( elem ) {
- type = ( type || "fx" ) + "mark";
- jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );
- }
- },
-
- _unmark: function( force, elem, type ) {
- if ( force !== true ) {
- type = elem;
- elem = force;
- force = false;
- }
- if ( elem ) {
- type = type || "fx";
- var key = type + "mark",
- count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );
- if ( count ) {
- jQuery._data( elem, key, count );
- } else {
- jQuery.removeData( elem, key, true );
- handleQueueMarkDefer( elem, type, "mark" );
- }
- }
- },
-
- queue: function( elem, type, data ) {
- var q;
- if ( elem ) {
- type = ( type || "fx" ) + "queue";
- q = jQuery._data( elem, type );
-
- // Speed up dequeue by getting out quickly if this is just a lookup
- if ( data ) {
- if ( !q || jQuery.isArray(data) ) {
- q = jQuery._data( elem, type, jQuery.makeArray(data) );
- } else {
- q.push( data );
- }
- }
- return q || [];
- }
- },
-
- dequeue: function( elem, type ) {
- type = type || "fx";
-
- var queue = jQuery.queue( elem, type ),
- fn = queue.shift(),
- hooks = {};
-
- // If the fx queue is dequeued, always remove the progress sentinel
- if ( fn === "inprogress" ) {
- fn = queue.shift();
- }
-
- if ( fn ) {
- // Add a progress sentinel to prevent the fx queue from being
- // automatically dequeued
- if ( type === "fx" ) {
- queue.unshift( "inprogress" );
- }
-
- jQuery._data( elem, type + ".run", hooks );
- fn.call( elem, function() {
- jQuery.dequeue( elem, type );
- }, hooks );
- }
-
- if ( !queue.length ) {
- jQuery.removeData( elem, type + "queue " + type + ".run", true );
- handleQueueMarkDefer( elem, type, "queue" );
- }
- }
-});
-
-jQuery.fn.extend({
- queue: function( type, data ) {
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- }
-
- if ( data === undefined ) {
- return jQuery.queue( this[0], type );
- }
- return this.each(function() {
- var queue = jQuery.queue( this, type, data );
-
- if ( type === "fx" && queue[0] !== "inprogress" ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- dequeue: function( type ) {
- return this.each(function() {
- jQuery.dequeue( this, type );
- });
- },
- // Based off of the plugin by Clint Helfers, with permission.
- // http://blindsignals.com/index.php/2009/07/jquery-delay/
- delay: function( time, type ) {
- time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
- type = type || "fx";
-
- return this.queue( type, function( next, hooks ) {
- var timeout = setTimeout( next, time );
- hooks.stop = function() {
- clearTimeout( timeout );
- };
- });
- },
- clearQueue: function( type ) {
- return this.queue( type || "fx", [] );
- },
- // Get a promise resolved when queues of a certain type
- // are emptied (fx is the type by default)
- promise: function( type, object ) {
- if ( typeof type !== "string" ) {
- object = type;
- type = undefined;
- }
- type = type || "fx";
- var defer = jQuery.Deferred(),
- elements = this,
- i = elements.length,
- count = 1,
- deferDataKey = type + "defer",
- queueDataKey = type + "queue",
- markDataKey = type + "mark",
- tmp;
- function resolve() {
- if ( !( --count ) ) {
- defer.resolveWith( elements, [ elements ] );
- }
- }
- while( i-- ) {
- if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
- ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
- jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
- jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) {
- count++;
- tmp.add( resolve );
- }
- }
- resolve();
- return defer.promise();
- }
-});
-
-
-
-
-var rclass = /[\n\t\r]/g,
- rspace = /\s+/,
- rreturn = /\r/g,
- rtype = /^(?:button|input)$/i,
- rfocusable = /^(?:button|input|object|select|textarea)$/i,
- rclickable = /^a(?:rea)?$/i,
- rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
- getSetAttribute = jQuery.support.getSetAttribute,
- nodeHook, boolHook, fixSpecified;
-
-jQuery.fn.extend({
- attr: function( name, value ) {
- return jQuery.access( this, name, value, true, jQuery.attr );
- },
-
- removeAttr: function( name ) {
- return this.each(function() {
- jQuery.removeAttr( this, name );
- });
- },
-
- prop: function( name, value ) {
- return jQuery.access( this, name, value, true, jQuery.prop );
- },
-
- removeProp: function( name ) {
- name = jQuery.propFix[ name ] || name;
- return this.each(function() {
- // try/catch handles cases where IE balks (such as removing a property on window)
- try {
- this[ name ] = undefined;
- delete this[ name ];
- } catch( e ) {}
- });
- },
-
- addClass: function( value ) {
- var classNames, i, l, elem,
- setClass, c, cl;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).addClass( value.call(this, j, this.className) );
- });
- }
-
- if ( value && typeof value === "string" ) {
- classNames = value.split( rspace );
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- elem = this[ i ];
-
- if ( elem.nodeType === 1 ) {
- if ( !elem.className && classNames.length === 1 ) {
- elem.className = value;
-
- } else {
- setClass = " " + elem.className + " ";
-
- for ( c = 0, cl = classNames.length; c < cl; c++ ) {
- if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
- setClass += classNames[ c ] + " ";
- }
- }
- elem.className = jQuery.trim( setClass );
- }
- }
- }
- }
-
- return this;
- },
-
- removeClass: function( value ) {
- var classNames, i, l, elem, className, c, cl;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).removeClass( value.call(this, j, this.className) );
- });
- }
-
- if ( (value && typeof value === "string") || value === undefined ) {
- classNames = ( value || "" ).split( rspace );
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- elem = this[ i ];
-
- if ( elem.nodeType === 1 && elem.className ) {
- if ( value ) {
- className = (" " + elem.className + " ").replace( rclass, " " );
- for ( c = 0, cl = classNames.length; c < cl; c++ ) {
- className = className.replace(" " + classNames[ c ] + " ", " ");
- }
- elem.className = jQuery.trim( className );
-
- } else {
- elem.className = "";
- }
- }
- }
- }
-
- return this;
- },
-
- toggleClass: function( value, stateVal ) {
- var type = typeof value,
- isBool = typeof stateVal === "boolean";
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( i ) {
- jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
- });
- }
-
- return this.each(function() {
- if ( type === "string" ) {
- // toggle individual class names
- var className,
- i = 0,
- self = jQuery( this ),
- state = stateVal,
- classNames = value.split( rspace );
-
- while ( (className = classNames[ i++ ]) ) {
- // check each className given, space seperated list
- state = isBool ? state : !self.hasClass( className );
- self[ state ? "addClass" : "removeClass" ]( className );
- }
-
- } else if ( type === "undefined" || type === "boolean" ) {
- if ( this.className ) {
- // store className if set
- jQuery._data( this, "__className__", this.className );
- }
-
- // toggle whole className
- this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
- }
- });
- },
-
- hasClass: function( selector ) {
- var className = " " + selector + " ",
- i = 0,
- l = this.length;
- for ( ; i < l; i++ ) {
- if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
- return true;
- }
- }
-
- return false;
- },
-
- val: function( value ) {
- var hooks, ret, isFunction,
- elem = this[0];
-
- if ( !arguments.length ) {
- if ( elem ) {
- hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
-
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
- return ret;
- }
-
- ret = elem.value;
-
- return typeof ret === "string" ?
- // handle most common string cases
- ret.replace(rreturn, "") :
- // handle cases where value is null/undef or number
- ret == null ? "" : ret;
- }
-
- return;
- }
-
- isFunction = jQuery.isFunction( value );
-
- return this.each(function( i ) {
- var self = jQuery(this), val;
-
- if ( this.nodeType !== 1 ) {
- return;
- }
-
- if ( isFunction ) {
- val = value.call( this, i, self.val() );
- } else {
- val = value;
- }
-
- // Treat null/undefined as ""; convert numbers to string
- if ( val == null ) {
- val = "";
- } else if ( typeof val === "number" ) {
- val += "";
- } else if ( jQuery.isArray( val ) ) {
- val = jQuery.map(val, function ( value ) {
- return value == null ? "" : value + "";
- });
- }
-
- hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
-
- // If set returns undefined, fall back to normal setting
- if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
- this.value = val;
- }
- });
- }
-});
-
-jQuery.extend({
- valHooks: {
- option: {
- get: function( elem ) {
- // attributes.value is undefined in Blackberry 4.7 but
- // uses .value. See #6932
- var val = elem.attributes.value;
- return !val || val.specified ? elem.value : elem.text;
- }
- },
- select: {
- get: function( elem ) {
- var value, i, max, option,
- index = elem.selectedIndex,
- values = [],
- options = elem.options,
- one = elem.type === "select-one";
-
- // Nothing was selected
- if ( index < 0 ) {
- return null;
- }
-
- // Loop through all the selected options
- i = one ? index : 0;
- max = one ? index + 1 : options.length;
- for ( ; i < max; i++ ) {
- option = options[ i ];
-
- // Don't return options that are disabled or in a disabled optgroup
- if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
- (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
-
- // Get the specific value for the option
- value = jQuery( option ).val();
-
- // We don't need an array for one selects
- if ( one ) {
- return value;
- }
-
- // Multi-Selects return an array
- values.push( value );
- }
- }
-
- // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
- if ( one && !values.length && options.length ) {
- return jQuery( options[ index ] ).val();
- }
-
- return values;
- },
-
- set: function( elem, value ) {
- var values = jQuery.makeArray( value );
-
- jQuery(elem).find("option").each(function() {
- this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
- });
-
- if ( !values.length ) {
- elem.selectedIndex = -1;
- }
- return values;
- }
- }
- },
-
- attrFn: {
- val: true,
- css: true,
- html: true,
- text: true,
- data: true,
- width: true,
- height: true,
- offset: true
- },
-
- attr: function( elem, name, value, pass ) {
- var ret, hooks, notxml,
- nType = elem.nodeType;
-
- // don't get/set attributes on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- if ( pass && name in jQuery.attrFn ) {
- return jQuery( elem )[ name ]( value );
- }
-
- // Fallback to prop when attributes are not supported
- if ( typeof elem.getAttribute === "undefined" ) {
- return jQuery.prop( elem, name, value );
- }
-
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
- // All attributes are lowercase
- // Grab necessary hook if one is defined
- if ( notxml ) {
- name = name.toLowerCase();
- hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
- }
-
- if ( value !== undefined ) {
-
- if ( value === null ) {
- jQuery.removeAttr( elem, name );
- return;
-
- } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
- return ret;
-
- } else {
- elem.setAttribute( name, "" + value );
- return value;
- }
-
- } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
- return ret;
-
- } else {
-
- ret = elem.getAttribute( name );
-
- // Non-existent attributes return null, we normalize to undefined
- return ret === null ?
- undefined :
- ret;
- }
- },
-
- removeAttr: function( elem, value ) {
- var propName, attrNames, name, l,
- i = 0;
-
- if ( value && elem.nodeType === 1 ) {
- attrNames = value.toLowerCase().split( rspace );
- l = attrNames.length;
-
- for ( ; i < l; i++ ) {
- name = attrNames[ i ];
-
- if ( name ) {
- propName = jQuery.propFix[ name ] || name;
-
- // See #9699 for explanation of this approach (setting first, then removal)
- jQuery.attr( elem, name, "" );
- elem.removeAttribute( getSetAttribute ? name : propName );
-
- // Set corresponding property to false for boolean attributes
- if ( rboolean.test( name ) && propName in elem ) {
- elem[ propName ] = false;
- }
- }
- }
- }
- },
-
- attrHooks: {
- type: {
- set: function( elem, value ) {
- // We can't allow the type property to be changed (since it causes problems in IE)
- if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
- jQuery.error( "type property can't be changed" );
- } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
- // Setting the type on a radio button after the value resets the value in IE6-9
- // Reset value to it's default in case type is set after value
- // This is for element creation
- var val = elem.value;
- elem.setAttribute( "type", value );
- if ( val ) {
- elem.value = val;
- }
- return value;
- }
- }
- },
- // Use the value property for back compat
- // Use the nodeHook for button elements in IE6/7 (#1954)
- value: {
- get: function( elem, name ) {
- if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
- return nodeHook.get( elem, name );
- }
- return name in elem ?
- elem.value :
- null;
- },
- set: function( elem, value, name ) {
- if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
- return nodeHook.set( elem, value, name );
- }
- // Does not return so that setAttribute is also used
- elem.value = value;
- }
- }
- },
-
- propFix: {
- tabindex: "tabIndex",
- readonly: "readOnly",
- "for": "htmlFor",
- "class": "className",
- maxlength: "maxLength",
- cellspacing: "cellSpacing",
- cellpadding: "cellPadding",
- rowspan: "rowSpan",
- colspan: "colSpan",
- usemap: "useMap",
- frameborder: "frameBorder",
- contenteditable: "contentEditable"
- },
-
- prop: function( elem, name, value ) {
- var ret, hooks, notxml,
- nType = elem.nodeType;
-
- // don't get/set properties on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
- if ( notxml ) {
- // Fix name and attach hooks
- name = jQuery.propFix[ name ] || name;
- hooks = jQuery.propHooks[ name ];
- }
-
- if ( value !== undefined ) {
- if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
- return ret;
-
- } else {
- return ( elem[ name ] = value );
- }
-
- } else {
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
- return ret;
-
- } else {
- return elem[ name ];
- }
- }
- },
-
- propHooks: {
- tabIndex: {
- get: function( elem ) {
- // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
- // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
- var attributeNode = elem.getAttributeNode("tabindex");
-
- return attributeNode && attributeNode.specified ?
- parseInt( attributeNode.value, 10 ) :
- rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
- 0 :
- undefined;
- }
- }
- }
-});
-
-// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional)
-jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex;
-
-// Hook for boolean attributes
-boolHook = {
- get: function( elem, name ) {
- // Align boolean attributes with corresponding properties
- // Fall back to attribute presence where some booleans are not supported
- var attrNode,
- property = jQuery.prop( elem, name );
- return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
- name.toLowerCase() :
- undefined;
- },
- set: function( elem, value, name ) {
- var propName;
- if ( value === false ) {
- // Remove boolean attributes when set to false
- jQuery.removeAttr( elem, name );
- } else {
- // value is true since we know at this point it's type boolean and not false
- // Set boolean attributes to the same name and set the DOM property
- propName = jQuery.propFix[ name ] || name;
- if ( propName in elem ) {
- // Only set the IDL specifically if it already exists on the element
- elem[ propName ] = true;
- }
-
- elem.setAttribute( name, name.toLowerCase() );
- }
- return name;
- }
-};
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !getSetAttribute ) {
-
- fixSpecified = {
- name: true,
- id: true
- };
-
- // Use this for any attribute in IE6/7
- // This fixes almost every IE6/7 issue
- nodeHook = jQuery.valHooks.button = {
- get: function( elem, name ) {
- var ret;
- ret = elem.getAttributeNode( name );
- return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ?
- ret.nodeValue :
- undefined;
- },
- set: function( elem, value, name ) {
- // Set the existing or create a new attribute node
- var ret = elem.getAttributeNode( name );
- if ( !ret ) {
- ret = document.createAttribute( name );
- elem.setAttributeNode( ret );
- }
- return ( ret.nodeValue = value + "" );
- }
- };
-
- // Apply the nodeHook to tabindex
- jQuery.attrHooks.tabindex.set = nodeHook.set;
-
- // Set width and height to auto instead of 0 on empty string( Bug #8150 )
- // This is for removals
- jQuery.each([ "width", "height" ], function( i, name ) {
- jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
- set: function( elem, value ) {
- if ( value === "" ) {
- elem.setAttribute( name, "auto" );
- return value;
- }
- }
- });
- });
-
- // Set contenteditable to false on removals(#10429)
- // Setting to empty string throws an error as an invalid value
- jQuery.attrHooks.contenteditable = {
- get: nodeHook.get,
- set: function( elem, value, name ) {
- if ( value === "" ) {
- value = "false";
- }
- nodeHook.set( elem, value, name );
- }
- };
-}
-
-
-// Some attributes require a special call on IE
-if ( !jQuery.support.hrefNormalized ) {
- jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
- jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
- get: function( elem ) {
- var ret = elem.getAttribute( name, 2 );
- return ret === null ? undefined : ret;
- }
- });
- });
-}
-
-if ( !jQuery.support.style ) {
- jQuery.attrHooks.style = {
- get: function( elem ) {
- // Return undefined in the case of empty string
- // Normalize to lowercase since IE uppercases css property names
- return elem.style.cssText.toLowerCase() || undefined;
- },
- set: function( elem, value ) {
- return ( elem.style.cssText = "" + value );
- }
- };
-}
-
-// Safari mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !jQuery.support.optSelected ) {
- jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
- get: function( elem ) {
- var parent = elem.parentNode;
-
- if ( parent ) {
- parent.selectedIndex;
-
- // Make sure that it also works with optgroups, see #5701
- if ( parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- }
- return null;
- }
- });
-}
-
-// IE6/7 call enctype encoding
-if ( !jQuery.support.enctype ) {
- jQuery.propFix.enctype = "encoding";
-}
-
-// Radios and checkboxes getter/setter
-if ( !jQuery.support.checkOn ) {
- jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = {
- get: function( elem ) {
- // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
- return elem.getAttribute("value") === null ? "on" : elem.value;
- }
- };
- });
-}
-jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
- set: function( elem, value ) {
- if ( jQuery.isArray( value ) ) {
- return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
- }
- }
- });
-});
-
-
-
-
-var rformElems = /^(?:textarea|input|select)$/i,
- rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/,
- rhoverHack = /\bhover(\.\S+)?\b/,
- rkeyEvent = /^key/,
- rmouseEvent = /^(?:mouse|contextmenu)|click/,
- rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
- rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
- quickParse = function( selector ) {
- var quick = rquickIs.exec( selector );
- if ( quick ) {
- // 0 1 2 3
- // [ _, tag, id, class ]
- quick[1] = ( quick[1] || "" ).toLowerCase();
- quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" );
- }
- return quick;
- },
- quickIs = function( elem, m ) {
- var attrs = elem.attributes || {};
- return (
- (!m[1] || elem.nodeName.toLowerCase() === m[1]) &&
- (!m[2] || (attrs.id || {}).value === m[2]) &&
- (!m[3] || m[3].test( (attrs[ "class" ] || {}).value ))
- );
- },
- hoverHack = function( events ) {
- return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
- };
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
- add: function( elem, types, handler, data, selector ) {
-
- var elemData, eventHandle, events,
- t, tns, type, namespaces, handleObj,
- handleObjIn, quick, handlers, special;
-
- // Don't attach events to noData or text/comment nodes (allow plain objects tho)
- if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
- return;
- }
-
- // Caller can pass in an object of custom data in lieu of the handler
- if ( handler.handler ) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- }
-
- // Make sure that the handler has a unique ID, used to find/remove it later
- if ( !handler.guid ) {
- handler.guid = jQuery.guid++;
- }
-
- // Init the element's event structure and main handler, if this is the first
- events = elemData.events;
- if ( !events ) {
- elemData.events = events = {};
- }
- eventHandle = elemData.handle;
- if ( !eventHandle ) {
- elemData.handle = eventHandle = function( e ) {
- // Discard the second event of a jQuery.event.trigger() and
- // when an event is called after a page has unloaded
- return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
- jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
- undefined;
- };
- // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
- eventHandle.elem = elem;
- }
-
- // Handle multiple events separated by a space
- // jQuery(...).bind("mouseover mouseout", fn);
- types = jQuery.trim( hoverHack(types) ).split( " " );
- for ( t = 0; t < types.length; t++ ) {
-
- tns = rtypenamespace.exec( types[t] ) || [];
- type = tns[1];
- namespaces = ( tns[2] || "" ).split( "." ).sort();
-
- // If event changes its type, use the special event handlers for the changed type
- special = jQuery.event.special[ type ] || {};
-
- // If selector defined, determine special event api type, otherwise given type
- type = ( selector ? special.delegateType : special.bindType ) || type;
-
- // Update special based on newly reset type
- special = jQuery.event.special[ type ] || {};
-
- // handleObj is passed to all event handlers
- handleObj = jQuery.extend({
- type: type,
- origType: tns[1],
- data: data,
- handler: handler,
- guid: handler.guid,
- selector: selector,
- quick: quickParse( selector ),
- namespace: namespaces.join(".")
- }, handleObjIn );
-
- // Init the event handler queue if we're the first
- handlers = events[ type ];
- if ( !handlers ) {
- handlers = events[ type ] = [];
- handlers.delegateCount = 0;
-
- // Only use addEventListener/attachEvent if the special events handler returns false
- if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
- // Bind the global event handler to the element
- if ( elem.addEventListener ) {
- elem.addEventListener( type, eventHandle, false );
-
- } else if ( elem.attachEvent ) {
- elem.attachEvent( "on" + type, eventHandle );
- }
- }
- }
-
- if ( special.add ) {
- special.add.call( elem, handleObj );
-
- if ( !handleObj.handler.guid ) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- // Add to the element's handler list, delegates in front
- if ( selector ) {
- handlers.splice( handlers.delegateCount++, 0, handleObj );
- } else {
- handlers.push( handleObj );
- }
-
- // Keep track of which events have ever been used, for event optimization
- jQuery.event.global[ type ] = true;
- }
-
- // Nullify elem to prevent memory leaks in IE
- elem = null;
- },
-
- global: {},
-
- // Detach an event or set of events from an element
- remove: function( elem, types, handler, selector, mappedTypes ) {
-
- var elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
- t, tns, type, origType, namespaces, origCount,
- j, events, special, handle, eventType, handleObj;
-
- if ( !elemData || !(events = elemData.events) ) {
- return;
- }
-
- // Once for each type.namespace in types; type may be omitted
- types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
- for ( t = 0; t < types.length; t++ ) {
- tns = rtypenamespace.exec( types[t] ) || [];
- type = origType = tns[1];
- namespaces = tns[2];
-
- // Unbind all events (on this namespace, if provided) for the element
- if ( !type ) {
- for ( type in events ) {
- jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
- }
- continue;
- }
-
- special = jQuery.event.special[ type ] || {};
- type = ( selector? special.delegateType : special.bindType ) || type;
- eventType = events[ type ] || [];
- origCount = eventType.length;
- namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
-
- // Remove matching events
- for ( j = 0; j < eventType.length; j++ ) {
- handleObj = eventType[ j ];
-
- if ( ( mappedTypes || origType === handleObj.origType ) &&
- ( !handler || handler.guid === handleObj.guid ) &&
- ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
- ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
- eventType.splice( j--, 1 );
-
- if ( handleObj.selector ) {
- eventType.delegateCount--;
- }
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
- }
- }
-
- // Remove generic event handler if we removed something and no more handlers exist
- // (avoids potential for endless recursion during removal of special event handlers)
- if ( eventType.length === 0 && origCount !== eventType.length ) {
- if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
- jQuery.removeEvent( elem, type, elemData.handle );
- }
-
- delete events[ type ];
- }
- }
-
- // Remove the expando if it's no longer used
- if ( jQuery.isEmptyObject( events ) ) {
- handle = elemData.handle;
- if ( handle ) {
- handle.elem = null;
- }
-
- // removeData also checks for emptiness and clears the expando if empty
- // so use it instead of delete
- jQuery.removeData( elem, [ "events", "handle" ], true );
- }
- },
-
- // Events that are safe to short-circuit if no handlers are attached.
- // Native DOM events should not be added, they may have inline handlers.
- customEvent: {
- "getData": true,
- "setData": true,
- "changeData": true
- },
-
- trigger: function( event, data, elem, onlyHandlers ) {
- // Don't do events on text and comment nodes
- if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
- return;
- }
-
- // Event object or event type
- var type = event.type || event,
- namespaces = [],
- cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;
-
- // focus/blur morphs to focusin/out; ensure we're not firing them right now
- if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
- return;
- }
-
- if ( type.indexOf( "!" ) >= 0 ) {
- // Exclusive events trigger only for the exact event (no namespaces)
- type = type.slice(0, -1);
- exclusive = true;
- }
-
- if ( type.indexOf( "." ) >= 0 ) {
- // Namespaced trigger; create a regexp to match event type in handle()
- namespaces = type.split(".");
- type = namespaces.shift();
- namespaces.sort();
- }
-
- if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
- // No jQuery handlers for this event type, and it can't have inline handlers
- return;
- }
-
- // Caller can pass in an Event, Object, or just an event type string
- event = typeof event === "object" ?
- // jQuery.Event object
- event[ jQuery.expando ] ? event :
- // Object literal
- new jQuery.Event( type, event ) :
- // Just the event type (string)
- new jQuery.Event( type );
-
- event.type = type;
- event.isTrigger = true;
- event.exclusive = exclusive;
- event.namespace = namespaces.join( "." );
- event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
- ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
-
- // Handle a global trigger
- if ( !elem ) {
-
- // TODO: Stop taunting the data cache; remove global events and always attach to document
- cache = jQuery.cache;
- for ( i in cache ) {
- if ( cache[ i ].events && cache[ i ].events[ type ] ) {
- jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
- }
- }
- return;
- }
-
- // Clean up the event in case it is being reused
- event.result = undefined;
- if ( !event.target ) {
- event.target = elem;
- }
-
- // Clone any incoming data and prepend the event, creating the handler arg list
- data = data != null ? jQuery.makeArray( data ) : [];
- data.unshift( event );
-
- // Allow special events to draw outside the lines
- special = jQuery.event.special[ type ] || {};
- if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
- return;
- }
-
- // Determine event propagation path in advance, per W3C events spec (#9951)
- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
- eventPath = [[ elem, special.bindType || type ]];
- if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
- bubbleType = special.delegateType || type;
- cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
- old = null;
- for ( ; cur; cur = cur.parentNode ) {
- eventPath.push([ cur, bubbleType ]);
- old = cur;
- }
-
- // Only add window if we got to document (e.g., not plain obj or detached DOM)
- if ( old && old === elem.ownerDocument ) {
- eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
- }
- }
-
- // Fire handlers on the event path
- for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
-
- cur = eventPath[i][0];
- event.type = eventPath[i][1];
-
- handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
- if ( handle ) {
- handle.apply( cur, data );
- }
- // Note that this is a bare JS function and not a jQuery handler
- handle = ontype && cur[ ontype ];
- if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
- event.preventDefault();
- }
- }
- event.type = type;
-
- // If nobody prevented the default action, do it now
- if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
- if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
- !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
-
- // Call a native DOM method on the target with the same name name as the event.
- // Can't use an .isFunction() check here because IE6/7 fails that test.
- // Don't do default actions on window, that's where global variables be (#6170)
- // IE<9 dies on focus/blur to hidden element (#1486)
- if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
-
- // Don't re-trigger an onFOO event when we call its FOO() method
- old = elem[ ontype ];
-
- if ( old ) {
- elem[ ontype ] = null;
- }
-
- // Prevent re-triggering of the same event, since we already bubbled it above
- jQuery.event.triggered = type;
- elem[ type ]();
- jQuery.event.triggered = undefined;
-
- if ( old ) {
- elem[ ontype ] = old;
- }
- }
- }
- }
-
- return event.result;
- },
-
- dispatch: function( event ) {
-
- // Make a writable jQuery.Event from the native event object
- event = jQuery.event.fix( event || window.event );
-
- var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
- delegateCount = handlers.delegateCount,
- args = [].slice.call( arguments, 0 ),
- run_all = !event.exclusive && !event.namespace,
- handlerQueue = [],
- i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related;
-
- // Use the fix-ed jQuery.Event rather than the (read-only) native event
- args[0] = event;
- event.delegateTarget = this;
-
- // Determine handlers that should run if there are delegated events
- // Avoid disabled elements in IE (#6911) and non-left-click bubbling in Firefox (#3861)
- if ( delegateCount && !event.target.disabled && !(event.button && event.type === "click") ) {
-
- // Pregenerate a single jQuery object for reuse with .is()
- jqcur = jQuery(this);
- jqcur.context = this.ownerDocument || this;
-
- for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
- selMatch = {};
- matches = [];
- jqcur[0] = cur;
- for ( i = 0; i < delegateCount; i++ ) {
- handleObj = handlers[ i ];
- sel = handleObj.selector;
-
- if ( selMatch[ sel ] === undefined ) {
- selMatch[ sel ] = (
- handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel )
- );
- }
- if ( selMatch[ sel ] ) {
- matches.push( handleObj );
- }
- }
- if ( matches.length ) {
- handlerQueue.push({ elem: cur, matches: matches });
- }
- }
- }
-
- // Add the remaining (directly-bound) handlers
- if ( handlers.length > delegateCount ) {
- handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
- }
-
- // Run delegates first; they may want to stop propagation beneath us
- for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
- matched = handlerQueue[ i ];
- event.currentTarget = matched.elem;
-
- for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
- handleObj = matched.matches[ j ];
-
- // Triggered event must either 1) be non-exclusive and have no namespace, or
- // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
- if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
-
- event.data = handleObj.data;
- event.handleObj = handleObj;
-
- ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
- .apply( matched.elem, args );
-
- if ( ret !== undefined ) {
- event.result = ret;
- if ( ret === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
- }
- }
- }
-
- return event.result;
- },
-
- // Includes some event props shared by KeyEvent and MouseEvent
- // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
- props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
-
- fixHooks: {},
-
- keyHooks: {
- props: "char charCode key keyCode".split(" "),
- filter: function( event, original ) {
-
- // Add which for key events
- if ( event.which == null ) {
- event.which = original.charCode != null ? original.charCode : original.keyCode;
- }
-
- return event;
- }
- },
-
- mouseHooks: {
- props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
- filter: function( event, original ) {
- var eventDoc, doc, body,
- button = original.button,
- fromElement = original.fromElement;
-
- // Calculate pageX/Y if missing and clientX/Y available
- if ( event.pageX == null && original.clientX != null ) {
- eventDoc = event.target.ownerDocument || document;
- doc = eventDoc.documentElement;
- body = eventDoc.body;
-
- event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
- event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
- }
-
- // Add relatedTarget, if necessary
- if ( !event.relatedTarget && fromElement ) {
- event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
- }
-
- // Add which for click: 1 === left; 2 === middle; 3 === right
- // Note: button is not normalized, so don't use it
- if ( !event.which && button !== undefined ) {
- event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
- }
-
- return event;
- }
- },
-
- fix: function( event ) {
- if ( event[ jQuery.expando ] ) {
- return event;
- }
-
- // Create a writable copy of the event object and normalize some properties
- var i, prop,
- originalEvent = event,
- fixHook = jQuery.event.fixHooks[ event.type ] || {},
- copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
- event = jQuery.Event( originalEvent );
-
- for ( i = copy.length; i; ) {
- prop = copy[ --i ];
- event[ prop ] = originalEvent[ prop ];
- }
-
- // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
- if ( !event.target ) {
- event.target = originalEvent.srcElement || document;
- }
-
- // Target should not be a text node (#504, Safari)
- if ( event.target.nodeType === 3 ) {
- event.target = event.target.parentNode;
- }
-
- // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8)
- if ( event.metaKey === undefined ) {
- event.metaKey = event.ctrlKey;
- }
-
- return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
- },
-
- special: {
- ready: {
- // Make sure the ready event is setup
- setup: jQuery.bindReady
- },
-
- load: {
- // Prevent triggered image.load events from bubbling to window.load
- noBubble: true
- },
-
- focus: {
- delegateType: "focusin"
- },
- blur: {
- delegateType: "focusout"
- },
-
- beforeunload: {
- setup: function( data, namespaces, eventHandle ) {
- // We only want to do this special case on windows
- if ( jQuery.isWindow( this ) ) {
- this.onbeforeunload = eventHandle;
- }
- },
-
- teardown: function( namespaces, eventHandle ) {
- if ( this.onbeforeunload === eventHandle ) {
- this.onbeforeunload = null;
- }
- }
- }
- },
-
- simulate: function( type, elem, event, bubble ) {
- // Piggyback on a donor event to simulate a different one.
- // Fake originalEvent to avoid donor's stopPropagation, but if the
- // simulated event prevents default then we do the same on the donor.
- var e = jQuery.extend(
- new jQuery.Event(),
- event,
- { type: type,
- isSimulated: true,
- originalEvent: {}
- }
- );
- if ( bubble ) {
- jQuery.event.trigger( e, null, elem );
- } else {
- jQuery.event.dispatch.call( elem, e );
- }
- if ( e.isDefaultPrevented() ) {
- event.preventDefault();
- }
- }
-};
-
-// Some plugins are using, but it's undocumented/deprecated and will be removed.
-// The 1.7 special event interface should provide all the hooks needed now.
-jQuery.event.handle = jQuery.event.dispatch;
-
-jQuery.removeEvent = document.removeEventListener ?
- function( elem, type, handle ) {
- if ( elem.removeEventListener ) {
- elem.removeEventListener( type, handle, false );
- }
- } :
- function( elem, type, handle ) {
- if ( elem.detachEvent ) {
- elem.detachEvent( "on" + type, handle );
- }
- };
-
-jQuery.Event = function( src, props ) {
- // Allow instantiation without the 'new' keyword
- if ( !(this instanceof jQuery.Event) ) {
- return new jQuery.Event( src, props );
- }
-
- // Event object
- if ( src && src.type ) {
- this.originalEvent = src;
- this.type = src.type;
-
- // Events bubbling up the document may have been marked as prevented
- // by a handler lower down the tree; reflect the correct value.
- this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
- src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
-
- // Event type
- } else {
- this.type = src;
- }
-
- // Put explicitly provided properties onto the event object
- if ( props ) {
- jQuery.extend( this, props );
- }
-
- // Create a timestamp if incoming event doesn't have one
- this.timeStamp = src && src.timeStamp || jQuery.now();
-
- // Mark it as fixed
- this[ jQuery.expando ] = true;
-};
-
-function returnFalse() {
- return false;
-}
-function returnTrue() {
- return true;
-}
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
- preventDefault: function() {
- this.isDefaultPrevented = returnTrue;
-
- var e = this.originalEvent;
- if ( !e ) {
- return;
- }
-
- // if preventDefault exists run it on the original event
- if ( e.preventDefault ) {
- e.preventDefault();
-
- // otherwise set the returnValue property of the original event to false (IE)
- } else {
- e.returnValue = false;
- }
- },
- stopPropagation: function() {
- this.isPropagationStopped = returnTrue;
-
- var e = this.originalEvent;
- if ( !e ) {
- return;
- }
- // if stopPropagation exists run it on the original event
- if ( e.stopPropagation ) {
- e.stopPropagation();
- }
- // otherwise set the cancelBubble property of the original event to true (IE)
- e.cancelBubble = true;
- },
- stopImmediatePropagation: function() {
- this.isImmediatePropagationStopped = returnTrue;
- this.stopPropagation();
- },
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse
-};
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-jQuery.each({
- mouseenter: "mouseover",
- mouseleave: "mouseout"
-}, function( orig, fix ) {
- jQuery.event.special[ orig ] = {
- delegateType: fix,
- bindType: fix,
-
- handle: function( event ) {
- var target = this,
- related = event.relatedTarget,
- handleObj = event.handleObj,
- selector = handleObj.selector,
- ret;
-
- // For mousenter/leave call the handler if related is outside the target.
- // NB: No relatedTarget if the mouse left/entered the browser window
- if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
- event.type = handleObj.origType;
- ret = handleObj.handler.apply( this, arguments );
- event.type = fix;
- }
- return ret;
- }
- };
-});
-
-// IE submit delegation
-if ( !jQuery.support.submitBubbles ) {
-
- jQuery.event.special.submit = {
- setup: function() {
- // Only need this for delegated form submit events
- if ( jQuery.nodeName( this, "form" ) ) {
- return false;
- }
-
- // Lazy-add a submit handler when a descendant form may potentially be submitted
- jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
- // Node name check avoids a VML-related crash in IE (#9807)
- var elem = e.target,
- form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
- if ( form && !form._submit_attached ) {
- jQuery.event.add( form, "submit._submit", function( event ) {
- // If form was submitted by the user, bubble the event up the tree
- if ( this.parentNode && !event.isTrigger ) {
- jQuery.event.simulate( "submit", this.parentNode, event, true );
- }
- });
- form._submit_attached = true;
- }
- });
- // return undefined since we don't need an event listener
- },
-
- teardown: function() {
- // Only need this for delegated form submit events
- if ( jQuery.nodeName( this, "form" ) ) {
- return false;
- }
-
- // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
- jQuery.event.remove( this, "._submit" );
- }
- };
-}
-
-// IE change delegation and checkbox/radio fix
-if ( !jQuery.support.changeBubbles ) {
-
- jQuery.event.special.change = {
-
- setup: function() {
-
- if ( rformElems.test( this.nodeName ) ) {
- // IE doesn't fire change on a check/radio until blur; trigger it on click
- // after a propertychange. Eat the blur-change in special.change.handle.
- // This still fires onchange a second time for check/radio after blur.
- if ( this.type === "checkbox" || this.type === "radio" ) {
- jQuery.event.add( this, "propertychange._change", function( event ) {
- if ( event.originalEvent.propertyName === "checked" ) {
- this._just_changed = true;
- }
- });
- jQuery.event.add( this, "click._change", function( event ) {
- if ( this._just_changed && !event.isTrigger ) {
- this._just_changed = false;
- jQuery.event.simulate( "change", this, event, true );
- }
- });
- }
- return false;
- }
- // Delegated event; lazy-add a change handler on descendant inputs
- jQuery.event.add( this, "beforeactivate._change", function( e ) {
- var elem = e.target;
-
- if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {
- jQuery.event.add( elem, "change._change", function( event ) {
- if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
- jQuery.event.simulate( "change", this.parentNode, event, true );
- }
- });
- elem._change_attached = true;
- }
- });
- },
-
- handle: function( event ) {
- var elem = event.target;
-
- // Swallow native change events from checkbox/radio, we already triggered them above
- if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
- return event.handleObj.handler.apply( this, arguments );
- }
- },
-
- teardown: function() {
- jQuery.event.remove( this, "._change" );
-
- return rformElems.test( this.nodeName );
- }
- };
-}
-
-// Create "bubbling" focus and blur events
-if ( !jQuery.support.focusinBubbles ) {
- jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
- // Attach a single capturing handler while someone wants focusin/focusout
- var attaches = 0,
- handler = function( event ) {
- jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
- };
-
- jQuery.event.special[ fix ] = {
- setup: function() {
- if ( attaches++ === 0 ) {
- document.addEventListener( orig, handler, true );
- }
- },
- teardown: function() {
- if ( --attaches === 0 ) {
- document.removeEventListener( orig, handler, true );
- }
- }
- };
- });
-}
-
-jQuery.fn.extend({
-
- on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
- var origFn, type;
-
- // Types can be a map of types/handlers
- if ( typeof types === "object" ) {
- // ( types-Object, selector, data )
- if ( typeof selector !== "string" ) {
- // ( types-Object, data )
- data = selector;
- selector = undefined;
- }
- for ( type in types ) {
- this.on( type, selector, data, types[ type ], one );
- }
- return this;
- }
-
- if ( data == null && fn == null ) {
- // ( types, fn )
- fn = selector;
- data = selector = undefined;
- } else if ( fn == null ) {
- if ( typeof selector === "string" ) {
- // ( types, selector, fn )
- fn = data;
- data = undefined;
- } else {
- // ( types, data, fn )
- fn = data;
- data = selector;
- selector = undefined;
- }
- }
- if ( fn === false ) {
- fn = returnFalse;
- } else if ( !fn ) {
- return this;
- }
-
- if ( one === 1 ) {
- origFn = fn;
- fn = function( event ) {
- // Can use an empty set, since event contains the info
- jQuery().off( event );
- return origFn.apply( this, arguments );
- };
- // Use same guid so caller can remove using origFn
- fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
- }
- return this.each( function() {
- jQuery.event.add( this, types, fn, data, selector );
- });
- },
- one: function( types, selector, data, fn ) {
- return this.on.call( this, types, selector, data, fn, 1 );
- },
- off: function( types, selector, fn ) {
- if ( types && types.preventDefault && types.handleObj ) {
- // ( event ) dispatched jQuery.Event
- var handleObj = types.handleObj;
- jQuery( types.delegateTarget ).off(
- handleObj.namespace? handleObj.type + "." + handleObj.namespace : handleObj.type,
- handleObj.selector,
- handleObj.handler
- );
- return this;
- }
- if ( typeof types === "object" ) {
- // ( types-object [, selector] )
- for ( var type in types ) {
- this.off( type, selector, types[ type ] );
- }
- return this;
- }
- if ( selector === false || typeof selector === "function" ) {
- // ( types [, fn] )
- fn = selector;
- selector = undefined;
- }
- if ( fn === false ) {
- fn = returnFalse;
- }
- return this.each(function() {
- jQuery.event.remove( this, types, fn, selector );
- });
- },
-
- bind: function( types, data, fn ) {
- return this.on( types, null, data, fn );
- },
- unbind: function( types, fn ) {
- return this.off( types, null, fn );
- },
-
- live: function( types, data, fn ) {
- jQuery( this.context ).on( types, this.selector, data, fn );
- return this;
- },
- die: function( types, fn ) {
- jQuery( this.context ).off( types, this.selector || "**", fn );
- return this;
- },
-
- delegate: function( selector, types, data, fn ) {
- return this.on( types, selector, data, fn );
- },
- undelegate: function( selector, types, fn ) {
- // ( namespace ) or ( selector, types [, fn] )
- return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
- },
-
- trigger: function( type, data ) {
- return this.each(function() {
- jQuery.event.trigger( type, data, this );
- });
- },
- triggerHandler: function( type, data ) {
- if ( this[0] ) {
- return jQuery.event.trigger( type, data, this[0], true );
- }
- },
-
- toggle: function( fn ) {
- // Save reference to arguments for access in closure
- var args = arguments,
- guid = fn.guid || jQuery.guid++,
- i = 0,
- toggler = function( event ) {
- // Figure out which function to execute
- var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
- jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
-
- // Make sure that clicks stop
- event.preventDefault();
-
- // and execute the function
- return args[ lastToggle ].apply( this, arguments ) || false;
- };
-
- // link all the functions, so any of them can unbind this click handler
- toggler.guid = guid;
- while ( i < args.length ) {
- args[ i++ ].guid = guid;
- }
-
- return this.click( toggler );
- },
-
- hover: function( fnOver, fnOut ) {
- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
- }
-});
-
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
- "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
- "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
-
- // Handle event binding
- jQuery.fn[ name ] = function( data, fn ) {
- if ( fn == null ) {
- fn = data;
- data = null;
- }
-
- return arguments.length > 0 ?
- this.on( name, null, data, fn ) :
- this.trigger( name );
- };
-
- if ( jQuery.attrFn ) {
- jQuery.attrFn[ name ] = true;
- }
-
- if ( rkeyEvent.test( name ) ) {
- jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
- }
-
- if ( rmouseEvent.test( name ) ) {
- jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
- }
-});
-
-
-
-/*!
- * Sizzle CSS Selector Engine
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- * More information: http://sizzlejs.com/
- */
-(function(){
-
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
- expando = "sizcache" + (Math.random() + '').replace('.', ''),
- done = 0,
- toString = Object.prototype.toString,
- hasDuplicate = false,
- baseHasDuplicate = true,
- rBackslash = /\\/g,
- rReturn = /\r\n/g,
- rNonWord = /\W/;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-// Thus far that includes Google Chrome.
-[0, 0].sort(function() {
- baseHasDuplicate = false;
- return 0;
-});
-
-var Sizzle = function( selector, context, results, seed ) {
- results = results || [];
- context = context || document;
-
- var origContext = context;
-
- if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
- return [];
- }
-
- if ( !selector || typeof selector !== "string" ) {
- return results;
- }
-
- var m, set, checkSet, extra, ret, cur, pop, i,
- prune = true,
- contextXML = Sizzle.isXML( context ),
- parts = [],
- soFar = selector;
-
- // Reset the position of the chunker regexp (start from head)
- do {
- chunker.exec( "" );
- m = chunker.exec( soFar );
-
- if ( m ) {
- soFar = m[3];
-
- parts.push( m[1] );
-
- if ( m[2] ) {
- extra = m[3];
- break;
- }
- }
- } while ( m );
-
- if ( parts.length > 1 && origPOS.exec( selector ) ) {
-
- if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
- set = posProcess( parts[0] + parts[1], context, seed );
-
- } else {
- set = Expr.relative[ parts[0] ] ?
- [ context ] :
- Sizzle( parts.shift(), context );
-
- while ( parts.length ) {
- selector = parts.shift();
-
- if ( Expr.relative[ selector ] ) {
- selector += parts.shift();
- }
-
- set = posProcess( selector, set, seed );
- }
- }
-
- } else {
- // Take a shortcut and set the context if the root selector is an ID
- // (but not if it'll be faster if the inner selector is an ID)
- if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
- Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
-
- ret = Sizzle.find( parts.shift(), context, contextXML );
- context = ret.expr ?
- Sizzle.filter( ret.expr, ret.set )[0] :
- ret.set[0];
- }
-
- if ( context ) {
- ret = seed ?
- { expr: parts.pop(), set: makeArray(seed) } :
- Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
-
- set = ret.expr ?
- Sizzle.filter( ret.expr, ret.set ) :
- ret.set;
-
- if ( parts.length > 0 ) {
- checkSet = makeArray( set );
-
- } else {
- prune = false;
- }
-
- while ( parts.length ) {
- cur = parts.pop();
- pop = cur;
-
- if ( !Expr.relative[ cur ] ) {
- cur = "";
- } else {
- pop = parts.pop();
- }
-
- if ( pop == null ) {
- pop = context;
- }
-
- Expr.relative[ cur ]( checkSet, pop, contextXML );
- }
-
- } else {
- checkSet = parts = [];
- }
- }
-
- if ( !checkSet ) {
- checkSet = set;
- }
-
- if ( !checkSet ) {
- Sizzle.error( cur || selector );
- }
-
- if ( toString.call(checkSet) === "[object Array]" ) {
- if ( !prune ) {
- results.push.apply( results, checkSet );
-
- } else if ( context && context.nodeType === 1 ) {
- for ( i = 0; checkSet[i] != null; i++ ) {
- if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
- results.push( set[i] );
- }
- }
-
- } else {
- for ( i = 0; checkSet[i] != null; i++ ) {
- if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
- results.push( set[i] );
- }
- }
- }
-
- } else {
- makeArray( checkSet, results );
- }
-
- if ( extra ) {
- Sizzle( extra, origContext, results, seed );
- Sizzle.uniqueSort( results );
- }
-
- return results;
-};
-
-Sizzle.uniqueSort = function( results ) {
- if ( sortOrder ) {
- hasDuplicate = baseHasDuplicate;
- results.sort( sortOrder );
-
- if ( hasDuplicate ) {
- for ( var i = 1; i < results.length; i++ ) {
- if ( results[i] === results[ i - 1 ] ) {
- results.splice( i--, 1 );
- }
- }
- }
- }
-
- return results;
-};
-
-Sizzle.matches = function( expr, set ) {
- return Sizzle( expr, null, null, set );
-};
-
-Sizzle.matchesSelector = function( node, expr ) {
- return Sizzle( expr, null, null, [node] ).length > 0;
-};
-
-Sizzle.find = function( expr, context, isXML ) {
- var set, i, len, match, type, left;
-
- if ( !expr ) {
- return [];
- }
-
- for ( i = 0, len = Expr.order.length; i < len; i++ ) {
- type = Expr.order[i];
-
- if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
- left = match[1];
- match.splice( 1, 1 );
-
- if ( left.substr( left.length - 1 ) !== "\\" ) {
- match[1] = (match[1] || "").replace( rBackslash, "" );
- set = Expr.find[ type ]( match, context, isXML );
-
- if ( set != null ) {
- expr = expr.replace( Expr.match[ type ], "" );
- break;
- }
- }
- }
- }
-
- if ( !set ) {
- set = typeof context.getElementsByTagName !== "undefined" ?
- context.getElementsByTagName( "*" ) :
- [];
- }
-
- return { set: set, expr: expr };
-};
-
-Sizzle.filter = function( expr, set, inplace, not ) {
- var match, anyFound,
- type, found, item, filter, left,
- i, pass,
- old = expr,
- result = [],
- curLoop = set,
- isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
-
- while ( expr && set.length ) {
- for ( type in Expr.filter ) {
- if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
- filter = Expr.filter[ type ];
- left = match[1];
-
- anyFound = false;
-
- match.splice(1,1);
-
- if ( left.substr( left.length - 1 ) === "\\" ) {
- continue;
- }
-
- if ( curLoop === result ) {
- result = [];
- }
-
- if ( Expr.preFilter[ type ] ) {
- match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
- if ( !match ) {
- anyFound = found = true;
-
- } else if ( match === true ) {
- continue;
- }
- }
-
- if ( match ) {
- for ( i = 0; (item = curLoop[i]) != null; i++ ) {
- if ( item ) {
- found = filter( item, match, i, curLoop );
- pass = not ^ found;
-
- if ( inplace && found != null ) {
- if ( pass ) {
- anyFound = true;
-
- } else {
- curLoop[i] = false;
- }
-
- } else if ( pass ) {
- result.push( item );
- anyFound = true;
- }
- }
- }
- }
-
- if ( found !== undefined ) {
- if ( !inplace ) {
- curLoop = result;
- }
-
- expr = expr.replace( Expr.match[ type ], "" );
-
- if ( !anyFound ) {
- return [];
- }
-
- break;
- }
- }
- }
-
- // Improper expression
- if ( expr === old ) {
- if ( anyFound == null ) {
- Sizzle.error( expr );
-
- } else {
- break;
- }
- }
-
- old = expr;
- }
-
- return curLoop;
-};
-
-Sizzle.error = function( msg ) {
- throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Utility function for retreiving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-var getText = Sizzle.getText = function( elem ) {
- var i, node,
- nodeType = elem.nodeType,
- ret = "";
-
- if ( nodeType ) {
- if ( nodeType === 1 || nodeType === 9 ) {
- // Use textContent || innerText for elements
- if ( typeof elem.textContent === 'string' ) {
- return elem.textContent;
- } else if ( typeof elem.innerText === 'string' ) {
- // Replace IE's carriage returns
- return elem.innerText.replace( rReturn, '' );
- } else {
- // Traverse it's children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
- ret += getText( elem );
- }
- }
- } else if ( nodeType === 3 || nodeType === 4 ) {
- return elem.nodeValue;
- }
- } else {
-
- // If no nodeType, this is expected to be an array
- for ( i = 0; (node = elem[i]); i++ ) {
- // Do not traverse comment nodes
- if ( node.nodeType !== 8 ) {
- ret += getText( node );
- }
- }
- }
- return ret;
-};
-
-var Expr = Sizzle.selectors = {
- order: [ "ID", "NAME", "TAG" ],
-
- match: {
- ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
- CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
- NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
- ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
- TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
- CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
- POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
- PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
- },
-
- leftMatch: {},
-
- attrMap: {
- "class": "className",
- "for": "htmlFor"
- },
-
- attrHandle: {
- href: function( elem ) {
- return elem.getAttribute( "href" );
- },
- type: function( elem ) {
- return elem.getAttribute( "type" );
- }
- },
-
- relative: {
- "+": function(checkSet, part){
- var isPartStr = typeof part === "string",
- isTag = isPartStr && !rNonWord.test( part ),
- isPartStrNotTag = isPartStr && !isTag;
-
- if ( isTag ) {
- part = part.toLowerCase();
- }
-
- for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
- if ( (elem = checkSet[i]) ) {
- while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
- checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
- elem || false :
- elem === part;
- }
- }
-
- if ( isPartStrNotTag ) {
- Sizzle.filter( part, checkSet, true );
- }
- },
-
- ">": function( checkSet, part ) {
- var elem,
- isPartStr = typeof part === "string",
- i = 0,
- l = checkSet.length;
-
- if ( isPartStr && !rNonWord.test( part ) ) {
- part = part.toLowerCase();
-
- for ( ; i < l; i++ ) {
- elem = checkSet[i];
-
- if ( elem ) {
- var parent = elem.parentNode;
- checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
- }
- }
-
- } else {
- for ( ; i < l; i++ ) {
- elem = checkSet[i];
-
- if ( elem ) {
- checkSet[i] = isPartStr ?
- elem.parentNode :
- elem.parentNode === part;
- }
- }
-
- if ( isPartStr ) {
- Sizzle.filter( part, checkSet, true );
- }
- }
- },
-
- "": function(checkSet, part, isXML){
- var nodeCheck,
- doneName = done++,
- checkFn = dirCheck;
-
- if ( typeof part === "string" && !rNonWord.test( part ) ) {
- part = part.toLowerCase();
- nodeCheck = part;
- checkFn = dirNodeCheck;
- }
-
- checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
- },
-
- "~": function( checkSet, part, isXML ) {
- var nodeCheck,
- doneName = done++,
- checkFn = dirCheck;
-
- if ( typeof part === "string" && !rNonWord.test( part ) ) {
- part = part.toLowerCase();
- nodeCheck = part;
- checkFn = dirNodeCheck;
- }
-
- checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
- }
- },
-
- find: {
- ID: function( match, context, isXML ) {
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- return m && m.parentNode ? [m] : [];
- }
- },
-
- NAME: function( match, context ) {
- if ( typeof context.getElementsByName !== "undefined" ) {
- var ret = [],
- results = context.getElementsByName( match[1] );
-
- for ( var i = 0, l = results.length; i < l; i++ ) {
- if ( results[i].getAttribute("name") === match[1] ) {
- ret.push( results[i] );
- }
- }
-
- return ret.length === 0 ? null : ret;
- }
- },
-
- TAG: function( match, context ) {
- if ( typeof context.getElementsByTagName !== "undefined" ) {
- return context.getElementsByTagName( match[1] );
- }
- }
- },
- preFilter: {
- CLASS: function( match, curLoop, inplace, result, not, isXML ) {
- match = " " + match[1].replace( rBackslash, "" ) + " ";
-
- if ( isXML ) {
- return match;
- }
-
- for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
- if ( elem ) {
- if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
- if ( !inplace ) {
- result.push( elem );
- }
-
- } else if ( inplace ) {
- curLoop[i] = false;
- }
- }
- }
-
- return false;
- },
-
- ID: function( match ) {
- return match[1].replace( rBackslash, "" );
- },
-
- TAG: function( match, curLoop ) {
- return match[1].replace( rBackslash, "" ).toLowerCase();
- },
-
- CHILD: function( match ) {
- if ( match[1] === "nth" ) {
- if ( !match[2] ) {
- Sizzle.error( match[0] );
- }
-
- match[2] = match[2].replace(/^\+|\s*/g, '');
-
- // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
- var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
- match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
- !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
- // calculate the numbers (first)n+(last) including if they are negative
- match[2] = (test[1] + (test[2] || 1)) - 0;
- match[3] = test[3] - 0;
- }
- else if ( match[2] ) {
- Sizzle.error( match[0] );
- }
-
- // TODO: Move to normal caching system
- match[0] = done++;
-
- return match;
- },
-
- ATTR: function( match, curLoop, inplace, result, not, isXML ) {
- var name = match[1] = match[1].replace( rBackslash, "" );
-
- if ( !isXML && Expr.attrMap[name] ) {
- match[1] = Expr.attrMap[name];
- }
-
- // Handle if an un-quoted value was used
- match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
-
- if ( match[2] === "~=" ) {
- match[4] = " " + match[4] + " ";
- }
-
- return match;
- },
-
- PSEUDO: function( match, curLoop, inplace, result, not ) {
- if ( match[1] === "not" ) {
- // If we're dealing with a complex expression, or a simple one
- if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
- match[3] = Sizzle(match[3], null, null, curLoop);
-
- } else {
- var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
-
- if ( !inplace ) {
- result.push.apply( result, ret );
- }
-
- return false;
- }
-
- } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
- return true;
- }
-
- return match;
- },
-
- POS: function( match ) {
- match.unshift( true );
-
- return match;
- }
- },
-
- filters: {
- enabled: function( elem ) {
- return elem.disabled === false && elem.type !== "hidden";
- },
-
- disabled: function( elem ) {
- return elem.disabled === true;
- },
-
- checked: function( elem ) {
- return elem.checked === true;
- },
-
- selected: function( elem ) {
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- if ( elem.parentNode ) {
- elem.parentNode.selectedIndex;
- }
-
- return elem.selected === true;
- },
-
- parent: function( elem ) {
- return !!elem.firstChild;
- },
-
- empty: function( elem ) {
- return !elem.firstChild;
- },
-
- has: function( elem, i, match ) {
- return !!Sizzle( match[3], elem ).length;
- },
-
- header: function( elem ) {
- return (/h\d/i).test( elem.nodeName );
- },
-
- text: function( elem ) {
- var attr = elem.getAttribute( "type" ), type = elem.type;
- // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
- // use getAttribute instead to test this case
- return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
- },
-
- radio: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
- },
-
- checkbox: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
- },
-
- file: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
- },
-
- password: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
- },
-
- submit: function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && "submit" === elem.type;
- },
-
- image: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
- },
-
- reset: function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && "reset" === elem.type;
- },
-
- button: function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && "button" === elem.type || name === "button";
- },
-
- input: function( elem ) {
- return (/input|select|textarea|button/i).test( elem.nodeName );
- },
-
- focus: function( elem ) {
- return elem === elem.ownerDocument.activeElement;
- }
- },
- setFilters: {
- first: function( elem, i ) {
- return i === 0;
- },
-
- last: function( elem, i, match, array ) {
- return i === array.length - 1;
- },
-
- even: function( elem, i ) {
- return i % 2 === 0;
- },
-
- odd: function( elem, i ) {
- return i % 2 === 1;
- },
-
- lt: function( elem, i, match ) {
- return i < match[3] - 0;
- },
-
- gt: function( elem, i, match ) {
- return i > match[3] - 0;
- },
-
- nth: function( elem, i, match ) {
- return match[3] - 0 === i;
- },
-
- eq: function( elem, i, match ) {
- return match[3] - 0 === i;
- }
- },
- filter: {
- PSEUDO: function( elem, match, i, array ) {
- var name = match[1],
- filter = Expr.filters[ name ];
-
- if ( filter ) {
- return filter( elem, i, match, array );
-
- } else if ( name === "contains" ) {
- return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
-
- } else if ( name === "not" ) {
- var not = match[3];
-
- for ( var j = 0, l = not.length; j < l; j++ ) {
- if ( not[j] === elem ) {
- return false;
- }
- }
-
- return true;
-
- } else {
- Sizzle.error( name );
- }
- },
-
- CHILD: function( elem, match ) {
- var first, last,
- doneName, parent, cache,
- count, diff,
- type = match[1],
- node = elem;
-
- switch ( type ) {
- case "only":
- case "first":
- while ( (node = node.previousSibling) ) {
- if ( node.nodeType === 1 ) {
- return false;
- }
- }
-
- if ( type === "first" ) {
- return true;
- }
-
- node = elem;
-
- case "last":
- while ( (node = node.nextSibling) ) {
- if ( node.nodeType === 1 ) {
- return false;
- }
- }
-
- return true;
-
- case "nth":
- first = match[2];
- last = match[3];
-
- if ( first === 1 && last === 0 ) {
- return true;
- }
-
- doneName = match[0];
- parent = elem.parentNode;
-
- if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
- count = 0;
-
- for ( node = parent.firstChild; node; node = node.nextSibling ) {
- if ( node.nodeType === 1 ) {
- node.nodeIndex = ++count;
- }
- }
-
- parent[ expando ] = doneName;
- }
-
- diff = elem.nodeIndex - last;
-
- if ( first === 0 ) {
- return diff === 0;
-
- } else {
- return ( diff % first === 0 && diff / first >= 0 );
- }
- }
- },
-
- ID: function( elem, match ) {
- return elem.nodeType === 1 && elem.getAttribute("id") === match;
- },
-
- TAG: function( elem, match ) {
- return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
- },
-
- CLASS: function( elem, match ) {
- return (" " + (elem.className || elem.getAttribute("class")) + " ")
- .indexOf( match ) > -1;
- },
-
- ATTR: function( elem, match ) {
- var name = match[1],
- result = Sizzle.attr ?
- Sizzle.attr( elem, name ) :
- Expr.attrHandle[ name ] ?
- Expr.attrHandle[ name ]( elem ) :
- elem[ name ] != null ?
- elem[ name ] :
- elem.getAttribute( name ),
- value = result + "",
- type = match[2],
- check = match[4];
-
- return result == null ?
- type === "!=" :
- !type && Sizzle.attr ?
- result != null :
- type === "=" ?
- value === check :
- type === "*=" ?
- value.indexOf(check) >= 0 :
- type === "~=" ?
- (" " + value + " ").indexOf(check) >= 0 :
- !check ?
- value && result !== false :
- type === "!=" ?
- value !== check :
- type === "^=" ?
- value.indexOf(check) === 0 :
- type === "$=" ?
- value.substr(value.length - check.length) === check :
- type === "|=" ?
- value === check || value.substr(0, check.length + 1) === check + "-" :
- false;
- },
-
- POS: function( elem, match, i, array ) {
- var name = match[2],
- filter = Expr.setFilters[ name ];
-
- if ( filter ) {
- return filter( elem, i, match, array );
- }
- }
- }
-};
-
-var origPOS = Expr.match.POS,
- fescape = function(all, num){
- return "\\" + (num - 0 + 1);
- };
-
-for ( var type in Expr.match ) {
- Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
- Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
-}
-
-var makeArray = function( array, results ) {
- array = Array.prototype.slice.call( array, 0 );
-
- if ( results ) {
- results.push.apply( results, array );
- return results;
- }
-
- return array;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-// Also verifies that the returned array holds DOM nodes
-// (which is not the case in the Blackberry browser)
-try {
- Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
-
-// Provide a fallback method if it does not work
-} catch( e ) {
- makeArray = function( array, results ) {
- var i = 0,
- ret = results || [];
-
- if ( toString.call(array) === "[object Array]" ) {
- Array.prototype.push.apply( ret, array );
-
- } else {
- if ( typeof array.length === "number" ) {
- for ( var l = array.length; i < l; i++ ) {
- ret.push( array[i] );
- }
-
- } else {
- for ( ; array[i]; i++ ) {
- ret.push( array[i] );
- }
- }
- }
-
- return ret;
- };
-}
-
-var sortOrder, siblingCheck;
-
-if ( document.documentElement.compareDocumentPosition ) {
- sortOrder = function( a, b ) {
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
- return a.compareDocumentPosition ? -1 : 1;
- }
-
- return a.compareDocumentPosition(b) & 4 ? -1 : 1;
- };
-
-} else {
- sortOrder = function( a, b ) {
- // The nodes are identical, we can exit early
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
-
- // Fallback to using sourceIndex (in IE) if it's available on both nodes
- } else if ( a.sourceIndex && b.sourceIndex ) {
- return a.sourceIndex - b.sourceIndex;
- }
-
- var al, bl,
- ap = [],
- bp = [],
- aup = a.parentNode,
- bup = b.parentNode,
- cur = aup;
-
- // If the nodes are siblings (or identical) we can do a quick check
- if ( aup === bup ) {
- return siblingCheck( a, b );
-
- // If no parents were found then the nodes are disconnected
- } else if ( !aup ) {
- return -1;
-
- } else if ( !bup ) {
- return 1;
- }
-
- // Otherwise they're somewhere else in the tree so we need
- // to build up a full list of the parentNodes for comparison
- while ( cur ) {
- ap.unshift( cur );
- cur = cur.parentNode;
- }
-
- cur = bup;
-
- while ( cur ) {
- bp.unshift( cur );
- cur = cur.parentNode;
- }
-
- al = ap.length;
- bl = bp.length;
-
- // Start walking down the tree looking for a discrepancy
- for ( var i = 0; i < al && i < bl; i++ ) {
- if ( ap[i] !== bp[i] ) {
- return siblingCheck( ap[i], bp[i] );
- }
- }
-
- // We ended someplace up the tree so do a sibling check
- return i === al ?
- siblingCheck( a, bp[i], -1 ) :
- siblingCheck( ap[i], b, 1 );
- };
-
- siblingCheck = function( a, b, ret ) {
- if ( a === b ) {
- return ret;
- }
-
- var cur = a.nextSibling;
-
- while ( cur ) {
- if ( cur === b ) {
- return -1;
- }
-
- cur = cur.nextSibling;
- }
-
- return 1;
- };
-}
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
- // We're going to inject a fake input element with a specified name
- var form = document.createElement("div"),
- id = "script" + (new Date()).getTime(),
- root = document.documentElement;
-
- form.innerHTML = "<a name='" + id + "'/>";
-
- // Inject it into the root element, check its status, and remove it quickly
- root.insertBefore( form, root.firstChild );
-
- // The workaround has to do additional checks after a getElementById
- // Which slows things down for other browsers (hence the branching)
- if ( document.getElementById( id ) ) {
- Expr.find.ID = function( match, context, isXML ) {
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
-
- return m ?
- m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
- [m] :
- undefined :
- [];
- }
- };
-
- Expr.filter.ID = function( elem, match ) {
- var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
-
- return elem.nodeType === 1 && node && node.nodeValue === match;
- };
- }
-
- root.removeChild( form );
-
- // release memory in IE
- root = form = null;
-})();
-
-(function(){
- // Check to see if the browser returns only elements
- // when doing getElementsByTagName("*")
-
- // Create a fake element
- var div = document.createElement("div");
- div.appendChild( document.createComment("") );
-
- // Make sure no comments are found
- if ( div.getElementsByTagName("*").length > 0 ) {
- Expr.find.TAG = function( match, context ) {
- var results = context.getElementsByTagName( match[1] );
-
- // Filter out possible comments
- if ( match[1] === "*" ) {
- var tmp = [];
-
- for ( var i = 0; results[i]; i++ ) {
- if ( results[i].nodeType === 1 ) {
- tmp.push( results[i] );
- }
- }
-
- results = tmp;
- }
-
- return results;
- };
- }
-
- // Check to see if an attribute returns normalized href attributes
- div.innerHTML = "<a href='#'></a>";
-
- if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
- div.firstChild.getAttribute("href") !== "#" ) {
-
- Expr.attrHandle.href = function( elem ) {
- return elem.getAttribute( "href", 2 );
- };
- }
-
- // release memory in IE
- div = null;
-})();
-
-if ( document.querySelectorAll ) {
- (function(){
- var oldSizzle = Sizzle,
- div = document.createElement("div"),
- id = "__sizzle__";
-
- div.innerHTML = "<p class='TEST'></p>";
-
- // Safari can't handle uppercase or unicode characters when
- // in quirks mode.
- if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
- return;
- }
-
- Sizzle = function( query, context, extra, seed ) {
- context = context || document;
-
- // Only use querySelectorAll on non-XML documents
- // (ID selectors don't work in non-HTML documents)
- if ( !seed && !Sizzle.isXML(context) ) {
- // See if we find a selector to speed up
- var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
-
- if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
- // Speed-up: Sizzle("TAG")
- if ( match[1] ) {
- return makeArray( context.getElementsByTagName( query ), extra );
-
- // Speed-up: Sizzle(".CLASS")
- } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
- return makeArray( context.getElementsByClassName( match[2] ), extra );
- }
- }
-
- if ( context.nodeType === 9 ) {
- // Speed-up: Sizzle("body")
- // The body element only exists once, optimize finding it
- if ( query === "body" && context.body ) {
- return makeArray( [ context.body ], extra );
-
- // Speed-up: Sizzle("#ID")
- } else if ( match && match[3] ) {
- var elem = context.getElementById( match[3] );
-
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem.id === match[3] ) {
- return makeArray( [ elem ], extra );
- }
-
- } else {
- return makeArray( [], extra );
- }
- }
-
- try {
- return makeArray( context.querySelectorAll(query), extra );
- } catch(qsaError) {}
-
- // qSA works strangely on Element-rooted queries
- // We can work around this by specifying an extra ID on the root
- // and working up from there (Thanks to Andrew Dupont for the technique)
- // IE 8 doesn't work on object elements
- } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
- var oldContext = context,
- old = context.getAttribute( "id" ),
- nid = old || id,
- hasParent = context.parentNode,
- relativeHierarchySelector = /^\s*[+~]/.test( query );
-
- if ( !old ) {
- context.setAttribute( "id", nid );
- } else {
- nid = nid.replace( /'/g, "\\$&" );
- }
- if ( relativeHierarchySelector && hasParent ) {
- context = context.parentNode;
- }
-
- try {
- if ( !relativeHierarchySelector || hasParent ) {
- return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
- }
-
- } catch(pseudoError) {
- } finally {
- if ( !old ) {
- oldContext.removeAttribute( "id" );
- }
- }
- }
- }
-
- return oldSizzle(query, context, extra, seed);
- };
-
- for ( var prop in oldSizzle ) {
- Sizzle[ prop ] = oldSizzle[ prop ];
- }
-
- // release memory in IE
- div = null;
- })();
-}
-
-(function(){
- var html = document.documentElement,
- matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
-
- if ( matches ) {
- // Check to see if it's possible to do matchesSelector
- // on a disconnected node (IE 9 fails this)
- var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
- pseudoWorks = false;
-
- try {
- // This should fail with an exception
- // Gecko does not error, returns false instead
- matches.call( document.documentElement, "[test!='']:sizzle" );
-
- } catch( pseudoError ) {
- pseudoWorks = true;
- }
-
- Sizzle.matchesSelector = function( node, expr ) {
- // Make sure that attribute selectors are quoted
- expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
-
- if ( !Sizzle.isXML( node ) ) {
- try {
- if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
- var ret = matches.call( node, expr );
-
- // IE 9's matchesSelector returns false on disconnected nodes
- if ( ret || !disconnectedMatch ||
- // As well, disconnected nodes are said to be in a document
- // fragment in IE 9, so check for that
- node.document && node.document.nodeType !== 11 ) {
- return ret;
- }
- }
- } catch(e) {}
- }
-
- return Sizzle(expr, null, null, [node]).length > 0;
- };
- }
-})();
-
-(function(){
- var div = document.createElement("div");
-
- div.innerHTML = "<div class='test e'></div><div class='test'></div>";
-
- // Opera can't find a second classname (in 9.6)
- // Also, make sure that getElementsByClassName actually exists
- if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
- return;
- }
-
- // Safari caches class attributes, doesn't catch changes (in 3.2)
- div.lastChild.className = "e";
-
- if ( div.getElementsByClassName("e").length === 1 ) {
- return;
- }
-
- Expr.order.splice(1, 0, "CLASS");
- Expr.find.CLASS = function( match, context, isXML ) {
- if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
- return context.getElementsByClassName(match[1]);
- }
- };
-
- // release memory in IE
- div = null;
-})();
-
-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
-
- if ( elem ) {
- var match = false;
-
- elem = elem[dir];
-
- while ( elem ) {
- if ( elem[ expando ] === doneName ) {
- match = checkSet[elem.sizset];
- break;
- }
-
- if ( elem.nodeType === 1 && !isXML ){
- elem[ expando ] = doneName;
- elem.sizset = i;
- }
-
- if ( elem.nodeName.toLowerCase() === cur ) {
- match = elem;
- break;
- }
-
- elem = elem[dir];
- }
-
- checkSet[i] = match;
- }
- }
-}
-
-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
-
- if ( elem ) {
- var match = false;
-
- elem = elem[dir];
-
- while ( elem ) {
- if ( elem[ expando ] === doneName ) {
- match = checkSet[elem.sizset];
- break;
- }
-
- if ( elem.nodeType === 1 ) {
- if ( !isXML ) {
- elem[ expando ] = doneName;
- elem.sizset = i;
- }
-
- if ( typeof cur !== "string" ) {
- if ( elem === cur ) {
- match = true;
- break;
- }
-
- } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
- match = elem;
- break;
- }
- }
-
- elem = elem[dir];
- }
-
- checkSet[i] = match;
- }
- }
-}
-
-if ( document.documentElement.contains ) {
- Sizzle.contains = function( a, b ) {
- return a !== b && (a.contains ? a.contains(b) : true);
- };
-
-} else if ( document.documentElement.compareDocumentPosition ) {
- Sizzle.contains = function( a, b ) {
- return !!(a.compareDocumentPosition(b) & 16);
- };
-
-} else {
- Sizzle.contains = function() {
- return false;
- };
-}
-
-Sizzle.isXML = function( elem ) {
- // documentElement is verified for cases where it doesn't yet exist
- // (such as loading iframes in IE - #4833)
- var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
-
- return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-var posProcess = function( selector, context, seed ) {
- var match,
- tmpSet = [],
- later = "",
- root = context.nodeType ? [context] : context;
-
- // Position selectors must be done after the filter
- // And so must :not(positional) so we move all PSEUDOs to the end
- while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
- later += match[0];
- selector = selector.replace( Expr.match.PSEUDO, "" );
- }
-
- selector = Expr.relative[selector] ? selector + "*" : selector;
-
- for ( var i = 0, l = root.length; i < l; i++ ) {
- Sizzle( selector, root[i], tmpSet, seed );
- }
-
- return Sizzle.filter( later, tmpSet );
-};
-
-// EXPOSE
-// Override sizzle attribute retrieval
-Sizzle.attr = jQuery.attr;
-Sizzle.selectors.attrMap = {};
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.filters;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-})();
-
-
-var runtil = /Until$/,
- rparentsprev = /^(?:parents|prevUntil|prevAll)/,
- // Note: This RegExp should be improved, or likely pulled from Sizzle
- rmultiselector = /,/,
- isSimple = /^.[^:#\[\.,]*$/,
- slice = Array.prototype.slice,
- POS = jQuery.expr.match.POS,
- // methods guaranteed to produce a unique set when starting from a unique set
- guaranteedUnique = {
- children: true,
- contents: true,
- next: true,
- prev: true
- };
-
-jQuery.fn.extend({
- find: function( selector ) {
- var self = this,
- i, l;
-
- if ( typeof selector !== "string" ) {
- return jQuery( selector ).filter(function() {
- for ( i = 0, l = self.length; i < l; i++ ) {
- if ( jQuery.contains( self[ i ], this ) ) {
- return true;
- }
- }
- });
- }
-
- var ret = this.pushStack( "", "find", selector ),
- length, n, r;
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- length = ret.length;
- jQuery.find( selector, this[i], ret );
-
- if ( i > 0 ) {
- // Make sure that the results are unique
- for ( n = length; n < ret.length; n++ ) {
- for ( r = 0; r < length; r++ ) {
- if ( ret[r] === ret[n] ) {
- ret.splice(n--, 1);
- break;
- }
- }
- }
- }
- }
-
- return ret;
- },
-
- has: function( target ) {
- var targets = jQuery( target );
- return this.filter(function() {
- for ( var i = 0, l = targets.length; i < l; i++ ) {
- if ( jQuery.contains( this, targets[i] ) ) {
- return true;
- }
- }
- });
- },
-
- not: function( selector ) {
- return this.pushStack( winnow(this, selector, false), "not", selector);
- },
-
- filter: function( selector ) {
- return this.pushStack( winnow(this, selector, true), "filter", selector );
- },
-
- is: function( selector ) {
- return !!selector && (
- typeof selector === "string" ?
- // If this is a positional selector, check membership in the returned set
- // so $("p:first").is("p:last") won't return true for a doc with two "p".
- POS.test( selector ) ?
- jQuery( selector, this.context ).index( this[0] ) >= 0 :
- jQuery.filter( selector, this ).length > 0 :
- this.filter( selector ).length > 0 );
- },
-
- closest: function( selectors, context ) {
- var ret = [], i, l, cur = this[0];
-
- // Array (deprecated as of jQuery 1.7)
- if ( jQuery.isArray( selectors ) ) {
- var level = 1;
-
- while ( cur && cur.ownerDocument && cur !== context ) {
- for ( i = 0; i < selectors.length; i++ ) {
-
- if ( jQuery( cur ).is( selectors[ i ] ) ) {
- ret.push({ selector: selectors[ i ], elem: cur, level: level });
- }
- }
-
- cur = cur.parentNode;
- level++;
- }
-
- return ret;
- }
-
- // String
- var pos = POS.test( selectors ) || typeof selectors !== "string" ?
- jQuery( selectors, context || this.context ) :
- 0;
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- cur = this[i];
-
- while ( cur ) {
- if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
- ret.push( cur );
- break;
-
- } else {
- cur = cur.parentNode;
- if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
- break;
- }
- }
- }
- }
-
- ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
-
- return this.pushStack( ret, "closest", selectors );
- },
-
- // Determine the position of an element within
- // the matched set of elements
- index: function( elem ) {
-
- // No argument, return index in parent
- if ( !elem ) {
- return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
- }
-
- // index in selector
- if ( typeof elem === "string" ) {
- return jQuery.inArray( this[0], jQuery( elem ) );
- }
-
- // Locate the position of the desired element
- return jQuery.inArray(
- // If it receives a jQuery object, the first element is used
- elem.jquery ? elem[0] : elem, this );
- },
-
- add: function( selector, context ) {
- var set = typeof selector === "string" ?
- jQuery( selector, context ) :
- jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
- all = jQuery.merge( this.get(), set );
-
- return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
- all :
- jQuery.unique( all ) );
- },
-
- andSelf: function() {
- return this.add( this.prevObject );
- }
-});
-
-// A painfully simple check to see if an element is disconnected
-// from a document (should be improved, where feasible).
-function isDisconnected( node ) {
- return !node || !node.parentNode || node.parentNode.nodeType === 11;
-}
-
-jQuery.each({
- parent: function( elem ) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function( elem ) {
- return jQuery.dir( elem, "parentNode" );
- },
- parentsUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "parentNode", until );
- },
- next: function( elem ) {
- return jQuery.nth( elem, 2, "nextSibling" );
- },
- prev: function( elem ) {
- return jQuery.nth( elem, 2, "previousSibling" );
- },
- nextAll: function( elem ) {
- return jQuery.dir( elem, "nextSibling" );
- },
- prevAll: function( elem ) {
- return jQuery.dir( elem, "previousSibling" );
- },
- nextUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "nextSibling", until );
- },
- prevUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "previousSibling", until );
- },
- siblings: function( elem ) {
- return jQuery.sibling( elem.parentNode.firstChild, elem );
- },
- children: function( elem ) {
- return jQuery.sibling( elem.firstChild );
- },
- contents: function( elem ) {
- return jQuery.nodeName( elem, "iframe" ) ?
- elem.contentDocument || elem.contentWindow.document :
- jQuery.makeArray( elem.childNodes );
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function( until, selector ) {
- var ret = jQuery.map( this, fn, until );
-
- if ( !runtil.test( name ) ) {
- selector = until;
- }
-
- if ( selector && typeof selector === "string" ) {
- ret = jQuery.filter( selector, ret );
- }
-
- ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
-
- if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
- ret = ret.reverse();
- }
-
- return this.pushStack( ret, name, slice.call( arguments ).join(",") );
- };
-});
-
-jQuery.extend({
- filter: function( expr, elems, not ) {
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
-
- return elems.length === 1 ?
- jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
- jQuery.find.matches(expr, elems);
- },
-
- dir: function( elem, dir, until ) {
- var matched = [],
- cur = elem[ dir ];
-
- while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
- if ( cur.nodeType === 1 ) {
- matched.push( cur );
- }
- cur = cur[dir];
- }
- return matched;
- },
-
- nth: function( cur, result, dir, elem ) {
- result = result || 1;
- var num = 0;
-
- for ( ; cur; cur = cur[dir] ) {
- if ( cur.nodeType === 1 && ++num === result ) {
- break;
- }
- }
-
- return cur;
- },
-
- sibling: function( n, elem ) {
- var r = [];
-
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- r.push( n );
- }
- }
-
- return r;
- }
-});
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, keep ) {
-
- // Can't pass null or undefined to indexOf in Firefox 4
- // Set to 0 to skip string check
- qualifier = qualifier || 0;
-
- if ( jQuery.isFunction( qualifier ) ) {
- return jQuery.grep(elements, function( elem, i ) {
- var retVal = !!qualifier.call( elem, i, elem );
- return retVal === keep;
- });
-
- } else if ( qualifier.nodeType ) {
- return jQuery.grep(elements, function( elem, i ) {
- return ( elem === qualifier ) === keep;
- });
-
- } else if ( typeof qualifier === "string" ) {
- var filtered = jQuery.grep(elements, function( elem ) {
- return elem.nodeType === 1;
- });
-
- if ( isSimple.test( qualifier ) ) {
- return jQuery.filter(qualifier, filtered, !keep);
- } else {
- qualifier = jQuery.filter( qualifier, filtered );
- }
- }
-
- return jQuery.grep(elements, function( elem, i ) {
- return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
- });
-}
-
-
-
-
-function createSafeFragment( document ) {
- var list = nodeNames.split( "|" ),
- safeFrag = document.createDocumentFragment();
-
- if ( safeFrag.createElement ) {
- while ( list.length ) {
- safeFrag.createElement(
- list.pop()
- );
- }
- }
- return safeFrag;
-}
-
-var nodeNames = "abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|" +
- "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
- rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
- rleadingWhitespace = /^\s+/,
- rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
- rtagName = /<([\w:]+)/,
- rtbody = /<tbody/i,
- rhtml = /<|&#?\w+;/,
- rnoInnerhtml = /<(?:script|style)/i,
- rnocache = /<(?:script|object|embed|option|style)/i,
- rnoshimcache = new RegExp("<(?:" + nodeNames + ")", "i"),
- // checked="checked" or checked
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
- rscriptType = /\/(java|ecma)script/i,
- rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
- wrapMap = {
- option: [ 1, "<select multiple='multiple'>", "</select>" ],
- legend: [ 1, "<fieldset>", "</fieldset>" ],
- thead: [ 1, "<table>", "</table>" ],
- tr: [ 2, "<table><tbody>", "</tbody></table>" ],
- td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
- col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
- area: [ 1, "<map>", "</map>" ],
- _default: [ 0, "", "" ]
- },
- safeFragment = createSafeFragment( document );
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-// IE can't serialize <link> and <script> tags normally
-if ( !jQuery.support.htmlSerialize ) {
- wrapMap._default = [ 1, "div<div>", "</div>" ];
-}
-
-jQuery.fn.extend({
- text: function( text ) {
- if ( jQuery.isFunction(text) ) {
- return this.each(function(i) {
- var self = jQuery( this );
-
- self.text( text.call(this, i, self.text()) );
- });
- }
-
- if ( typeof text !== "object" && text !== undefined ) {
- return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
- }
-
- return jQuery.text( this );
- },
-
- wrapAll: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapAll( html.call(this, i) );
- });
- }
-
- if ( this[0] ) {
- // The elements to wrap the target around
- var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
- if ( this[0].parentNode ) {
- wrap.insertBefore( this[0] );
- }
-
- wrap.map(function() {
- var elem = this;
-
- while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
- elem = elem.firstChild;
- }
-
- return elem;
- }).append( this );
- }
-
- return this;
- },
-
- wrapInner: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapInner( html.call(this, i) );
- });
- }
-
- return this.each(function() {
- var self = jQuery( this ),
- contents = self.contents();
-
- if ( contents.length ) {
- contents.wrapAll( html );
-
- } else {
- self.append( html );
- }
- });
- },
-
- wrap: function( html ) {
- var isFunction = jQuery.isFunction( html );
-
- return this.each(function(i) {
- jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
- });
- },
-
- unwrap: function() {
- return this.parent().each(function() {
- if ( !jQuery.nodeName( this, "body" ) ) {
- jQuery( this ).replaceWith( this.childNodes );
- }
- }).end();
- },
-
- append: function() {
- return this.domManip(arguments, true, function( elem ) {
- if ( this.nodeType === 1 ) {
- this.appendChild( elem );
- }
- });
- },
-
- prepend: function() {
- return this.domManip(arguments, true, function( elem ) {
- if ( this.nodeType === 1 ) {
- this.insertBefore( elem, this.firstChild );
- }
- });
- },
-
- before: function() {
- if ( this[0] && this[0].parentNode ) {
- return this.domManip(arguments, false, function( elem ) {
- this.parentNode.insertBefore( elem, this );
- });
- } else if ( arguments.length ) {
- var set = jQuery.clean( arguments );
- set.push.apply( set, this.toArray() );
- return this.pushStack( set, "before", arguments );
- }
- },
-
- after: function() {
- if ( this[0] && this[0].parentNode ) {
- return this.domManip(arguments, false, function( elem ) {
- this.parentNode.insertBefore( elem, this.nextSibling );
- });
- } else if ( arguments.length ) {
- var set = this.pushStack( this, "after", arguments );
- set.push.apply( set, jQuery.clean(arguments) );
- return set;
- }
- },
-
- // keepData is for internal use only--do not document
- remove: function( selector, keepData ) {
- for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
- if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
- if ( !keepData && elem.nodeType === 1 ) {
- jQuery.cleanData( elem.getElementsByTagName("*") );
- jQuery.cleanData( [ elem ] );
- }
-
- if ( elem.parentNode ) {
- elem.parentNode.removeChild( elem );
- }
- }
- }
-
- return this;
- },
-
- empty: function() {
- for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
- // Remove element nodes and prevent memory leaks
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( elem.getElementsByTagName("*") );
- }
-
- // Remove any remaining nodes
- while ( elem.firstChild ) {
- elem.removeChild( elem.firstChild );
- }
- }
-
- return this;
- },
-
- clone: function( dataAndEvents, deepDataAndEvents ) {
- dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
- deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
- return this.map( function () {
- return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
- });
- },
-
- html: function( value ) {
- if ( value === undefined ) {
- return this[0] && this[0].nodeType === 1 ?
- this[0].innerHTML.replace(rinlinejQuery, "") :
- null;
-
- // See if we can take a shortcut and just use innerHTML
- } else if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
- (jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
- !wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
-
- value = value.replace(rxhtmlTag, "<$1></$2>");
-
- try {
- for ( var i = 0, l = this.length; i < l; i++ ) {
- // Remove element nodes and prevent memory leaks
- if ( this[i].nodeType === 1 ) {
- jQuery.cleanData( this[i].getElementsByTagName("*") );
- this[i].innerHTML = value;
- }
- }
-
- // If using innerHTML throws an exception, use the fallback method
- } catch(e) {
- this.empty().append( value );
- }
-
- } else if ( jQuery.isFunction( value ) ) {
- this.each(function(i){
- var self = jQuery( this );
-
- self.html( value.call(this, i, self.html()) );
- });
-
- } else {
- this.empty().append( value );
- }
-
- return this;
- },
-
- replaceWith: function( value ) {
- if ( this[0] && this[0].parentNode ) {
- // Make sure that the elements are removed from the DOM before they are inserted
- // this can help fix replacing a parent with child elements
- if ( jQuery.isFunction( value ) ) {
- return this.each(function(i) {
- var self = jQuery(this), old = self.html();
- self.replaceWith( value.call( this, i, old ) );
- });
- }
-
- if ( typeof value !== "string" ) {
- value = jQuery( value ).detach();
- }
-
- return this.each(function() {
- var next = this.nextSibling,
- parent = this.parentNode;
-
- jQuery( this ).remove();
-
- if ( next ) {
- jQuery(next).before( value );
- } else {
- jQuery(parent).append( value );
- }
- });
- } else {
- return this.length ?
- this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
- this;
- }
- },
-
- detach: function( selector ) {
- return this.remove( selector, true );
- },
-
- domManip: function( args, table, callback ) {
- var results, first, fragment, parent,
- value = args[0],
- scripts = [];
-
- // We can't cloneNode fragments that contain checked, in WebKit
- if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
- return this.each(function() {
- jQuery(this).domManip( args, table, callback, true );
- });
- }
-
- if ( jQuery.isFunction(value) ) {
- return this.each(function(i) {
- var self = jQuery(this);
- args[0] = value.call(this, i, table ? self.html() : undefined);
- self.domManip( args, table, callback );
- });
- }
-
- if ( this[0] ) {
- parent = value && value.parentNode;
-
- // If we're in a fragment, just use that instead of building a new one
- if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
- results = { fragment: parent };
-
- } else {
- results = jQuery.buildFragment( args, this, scripts );
- }
-
- fragment = results.fragment;
-
- if ( fragment.childNodes.length === 1 ) {
- first = fragment = fragment.firstChild;
- } else {
- first = fragment.firstChild;
- }
-
- if ( first ) {
- table = table && jQuery.nodeName( first, "tr" );
-
- for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
- callback.call(
- table ?
- root(this[i], first) :
- this[i],
- // Make sure that we do not leak memory by inadvertently discarding
- // the original fragment (which might have attached data) instead of
- // using it; in addition, use the original fragment object for the last
- // item instead of first because it can end up being emptied incorrectly
- // in certain situations (Bug #8070).
- // Fragments from the fragment cache must always be cloned and never used
- // in place.
- results.cacheable || ( l > 1 && i < lastIndex ) ?
- jQuery.clone( fragment, true, true ) :
- fragment
- );
- }
- }
-
- if ( scripts.length ) {
- jQuery.each( scripts, evalScript );
- }
- }
-
- return this;
- }
-});
-
-function root( elem, cur ) {
- return jQuery.nodeName(elem, "table") ?
- (elem.getElementsByTagName("tbody")[0] ||
- elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
- elem;
-}
-
-function cloneCopyEvent( src, dest ) {
-
- if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
- return;
- }
-
- var type, i, l,
- oldData = jQuery._data( src ),
- curData = jQuery._data( dest, oldData ),
- events = oldData.events;
-
- if ( events ) {
- delete curData.handle;
- curData.events = {};
-
- for ( type in events ) {
- for ( i = 0, l = events[ type ].length; i < l; i++ ) {
- jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
- }
- }
- }
-
- // make the cloned public data object a copy from the original
- if ( curData.data ) {
- curData.data = jQuery.extend( {}, curData.data );
- }
-}
-
-function cloneFixAttributes( src, dest ) {
- var nodeName;
-
- // We do not need to do anything for non-Elements
- if ( dest.nodeType !== 1 ) {
- return;
- }
-
- // clearAttributes removes the attributes, which we don't want,
- // but also removes the attachEvent events, which we *do* want
- if ( dest.clearAttributes ) {
- dest.clearAttributes();
- }
-
- // mergeAttributes, in contrast, only merges back on the
- // original attributes, not the events
- if ( dest.mergeAttributes ) {
- dest.mergeAttributes( src );
- }
-
- nodeName = dest.nodeName.toLowerCase();
-
- // IE6-8 fail to clone children inside object elements that use
- // the proprietary classid attribute value (rather than the type
- // attribute) to identify the type of content to display
- if ( nodeName === "object" ) {
- dest.outerHTML = src.outerHTML;
-
- } else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
- // IE6-8 fails to persist the checked state of a cloned checkbox
- // or radio button. Worse, IE6-7 fail to give the cloned element
- // a checked appearance if the defaultChecked value isn't also set
- if ( src.checked ) {
- dest.defaultChecked = dest.checked = src.checked;
- }
-
- // IE6-7 get confused and end up setting the value of a cloned
- // checkbox/radio button to an empty string instead of "on"
- if ( dest.value !== src.value ) {
- dest.value = src.value;
- }
-
- // IE6-8 fails to return the selected option to the default selected
- // state when cloning options
- } else if ( nodeName === "option" ) {
- dest.selected = src.defaultSelected;
-
- // IE6-8 fails to set the defaultValue to the correct value when
- // cloning other types of input fields
- } else if ( nodeName === "input" || nodeName === "textarea" ) {
- dest.defaultValue = src.defaultValue;
- }
-
- // Event data gets referenced instead of copied if the expando
- // gets copied too
- dest.removeAttribute( jQuery.expando );
-}
-
-jQuery.buildFragment = function( args, nodes, scripts ) {
- var fragment, cacheable, cacheresults, doc,
- first = args[ 0 ];
-
- // nodes may contain either an explicit document object,
- // a jQuery collection or context object.
- // If nodes[0] contains a valid object to assign to doc
- if ( nodes && nodes[0] ) {
- doc = nodes[0].ownerDocument || nodes[0];
- }
-
- // Ensure that an attr object doesn't incorrectly stand in as a document object
- // Chrome and Firefox seem to allow this to occur and will throw exception
- // Fixes #8950
- if ( !doc.createDocumentFragment ) {
- doc = document;
- }
-
- // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
- // Cloning options loses the selected state, so don't cache them
- // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
- // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
- // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
- if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document &&
- first.charAt(0) === "<" && !rnocache.test( first ) &&
- (jQuery.support.checkClone || !rchecked.test( first )) &&
- (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
-
- cacheable = true;
-
- cacheresults = jQuery.fragments[ first ];
- if ( cacheresults && cacheresults !== 1 ) {
- fragment = cacheresults;
- }
- }
-
- if ( !fragment ) {
- fragment = doc.createDocumentFragment();
- jQuery.clean( args, doc, fragment, scripts );
- }
-
- if ( cacheable ) {
- jQuery.fragments[ first ] = cacheresults ? fragment : 1;
- }
-
- return { fragment: fragment, cacheable: cacheable };
-};
-
-jQuery.fragments = {};
-
-jQuery.each({
- appendTo: "append",
- prependTo: "prepend",
- insertBefore: "before",
- insertAfter: "after",
- replaceAll: "replaceWith"
-}, function( name, original ) {
- jQuery.fn[ name ] = function( selector ) {
- var ret = [],
- insert = jQuery( selector ),
- parent = this.length === 1 && this[0].parentNode;
-
- if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
- insert[ original ]( this[0] );
- return this;
-
- } else {
- for ( var i = 0, l = insert.length; i < l; i++ ) {
- var elems = ( i > 0 ? this.clone(true) : this ).get();
- jQuery( insert[i] )[ original ]( elems );
- ret = ret.concat( elems );
- }
-
- return this.pushStack( ret, name, insert.selector );
- }
- };
-});
-
-function getAll( elem ) {
- if ( typeof elem.getElementsByTagName !== "undefined" ) {
- return elem.getElementsByTagName( "*" );
-
- } else if ( typeof elem.querySelectorAll !== "undefined" ) {
- return elem.querySelectorAll( "*" );
-
- } else {
- return [];
- }
-}
-
-// Used in clean, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
- if ( elem.type === "checkbox" || elem.type === "radio" ) {
- elem.defaultChecked = elem.checked;
- }
-}
-// Finds all inputs and passes them to fixDefaultChecked
-function findInputs( elem ) {
- var nodeName = ( elem.nodeName || "" ).toLowerCase();
- if ( nodeName === "input" ) {
- fixDefaultChecked( elem );
- // Skip scripts, get other children
- } else if ( nodeName !== "script" && typeof elem.getElementsByTagName !== "undefined" ) {
- jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
- }
-}
-
-// Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js
-function shimCloneNode( elem ) {
- var div = document.createElement( "div" );
- safeFragment.appendChild( div );
-
- div.innerHTML = elem.outerHTML;
- return div.firstChild;
-}
-
-jQuery.extend({
- clone: function( elem, dataAndEvents, deepDataAndEvents ) {
- var srcElements,
- destElements,
- i,
- // IE<=8 does not properly clone detached, unknown element nodes
- clone = jQuery.support.html5Clone || !rnoshimcache.test( "<" + elem.nodeName ) ?
- elem.cloneNode( true ) :
- shimCloneNode( elem );
-
- if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
- (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
- // IE copies events bound via attachEvent when using cloneNode.
- // Calling detachEvent on the clone will also remove the events
- // from the original. In order to get around this, we use some
- // proprietary methods to clear the events. Thanks to MooTools
- // guys for this hotness.
-
- cloneFixAttributes( elem, clone );
-
- // Using Sizzle here is crazy slow, so we use getElementsByTagName instead
- srcElements = getAll( elem );
- destElements = getAll( clone );
-
- // Weird iteration because IE will replace the length property
- // with an element if you are cloning the body and one of the
- // elements on the page has a name or id of "length"
- for ( i = 0; srcElements[i]; ++i ) {
- // Ensure that the destination node is not null; Fixes #9587
- if ( destElements[i] ) {
- cloneFixAttributes( srcElements[i], destElements[i] );
- }
- }
- }
-
- // Copy the events from the original to the clone
- if ( dataAndEvents ) {
- cloneCopyEvent( elem, clone );
-
- if ( deepDataAndEvents ) {
- srcElements = getAll( elem );
- destElements = getAll( clone );
-
- for ( i = 0; srcElements[i]; ++i ) {
- cloneCopyEvent( srcElements[i], destElements[i] );
- }
- }
- }
-
- srcElements = destElements = null;
-
- // Return the cloned set
- return clone;
- },
-
- clean: function( elems, context, fragment, scripts ) {
- var checkScriptType;
-
- context = context || document;
-
- // !context.createElement fails in IE with an error but returns typeof 'object'
- if ( typeof context.createElement === "undefined" ) {
- context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
- }
-
- var ret = [], j;
-
- for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
- if ( typeof elem === "number" ) {
- elem += "";
- }
-
- if ( !elem ) {
- continue;
- }
-
- // Convert html string into DOM nodes
- if ( typeof elem === "string" ) {
- if ( !rhtml.test( elem ) ) {
- elem = context.createTextNode( elem );
- } else {
- // Fix "XHTML"-style tags in all browsers
- elem = elem.replace(rxhtmlTag, "<$1></$2>");
-
- // Trim whitespace, otherwise indexOf won't work as expected
- var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(),
- wrap = wrapMap[ tag ] || wrapMap._default,
- depth = wrap[0],
- div = context.createElement("div");
-
- // Append wrapper element to unknown element safe doc fragment
- if ( context === document ) {
- // Use the fragment we've already created for this document
- safeFragment.appendChild( div );
- } else {
- // Use a fragment created with the owner document
- createSafeFragment( context ).appendChild( div );
- }
-
- // Go to html and back, then peel off extra wrappers
- div.innerHTML = wrap[1] + elem + wrap[2];
-
- // Move to the right depth
- while ( depth-- ) {
- div = div.lastChild;
- }
-
- // Remove IE's autoinserted <tbody> from table fragments
- if ( !jQuery.support.tbody ) {
-
- // String was a <table>, *may* have spurious <tbody>
- var hasBody = rtbody.test(elem),
- tbody = tag === "table" && !hasBody ?
- div.firstChild && div.firstChild.childNodes :
-
- // String was a bare <thead> or <tfoot>
- wrap[1] === "<table>" && !hasBody ?
- div.childNodes :
- [];
-
- for ( j = tbody.length - 1; j >= 0 ; --j ) {
- if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
- tbody[ j ].parentNode.removeChild( tbody[ j ] );
- }
- }
- }
-
- // IE completely kills leading whitespace when innerHTML is used
- if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
- div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
- }
-
- elem = div.childNodes;
- }
- }
-
- // Resets defaultChecked for any radios and checkboxes
- // about to be appended to the DOM in IE 6/7 (#8060)
- var len;
- if ( !jQuery.support.appendChecked ) {
- if ( elem[0] && typeof (len = elem.length) === "number" ) {
- for ( j = 0; j < len; j++ ) {
- findInputs( elem[j] );
- }
- } else {
- findInputs( elem );
- }
- }
-
- if ( elem.nodeType ) {
- ret.push( elem );
- } else {
- ret = jQuery.merge( ret, elem );
- }
- }
-
- if ( fragment ) {
- checkScriptType = function( elem ) {
- return !elem.type || rscriptType.test( elem.type );
- };
- for ( i = 0; ret[i]; i++ ) {
- if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
- scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
-
- } else {
- if ( ret[i].nodeType === 1 ) {
- var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
-
- ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
- }
- fragment.appendChild( ret[i] );
- }
- }
- }
-
- return ret;
- },
-
- cleanData: function( elems ) {
- var data, id,
- cache = jQuery.cache,
- special = jQuery.event.special,
- deleteExpando = jQuery.support.deleteExpando;
-
- for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
- if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
- continue;
- }
-
- id = elem[ jQuery.expando ];
-
- if ( id ) {
- data = cache[ id ];
-
- if ( data && data.events ) {
- for ( var type in data.events ) {
- if ( special[ type ] ) {
- jQuery.event.remove( elem, type );
-
- // This is a shortcut to avoid jQuery.event.remove's overhead
- } else {
- jQuery.removeEvent( elem, type, data.handle );
- }
- }
-
- // Null the DOM reference to avoid IE6/7/8 leak (#7054)
- if ( data.handle ) {
- data.handle.elem = null;
- }
- }
-
- if ( deleteExpando ) {
- delete elem[ jQuery.expando ];
-
- } else if ( elem.removeAttribute ) {
- elem.removeAttribute( jQuery.expando );
- }
-
- delete cache[ id ];
- }
- }
- }
-});
-
-function evalScript( i, elem ) {
- if ( elem.src ) {
- jQuery.ajax({
- url: elem.src,
- async: false,
- dataType: "script"
- });
- } else {
- jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
- }
-
- if ( elem.parentNode ) {
- elem.parentNode.removeChild( elem );
- }
-}
-
-
-
-
-var ralpha = /alpha\([^)]*\)/i,
- ropacity = /opacity=([^)]*)/,
- // fixed for IE9, see #8346
- rupper = /([A-Z]|^ms)/g,
- rnumpx = /^-?\d+(?:px)?$/i,
- rnum = /^-?\d/,
- rrelNum = /^([\-+])=([\-+.\de]+)/,
-
- cssShow = { position: "absolute", visibility: "hidden", display: "block" },
- cssWidth = [ "Left", "Right" ],
- cssHeight = [ "Top", "Bottom" ],
- curCSS,
-
- getComputedStyle,
- currentStyle;
-
-jQuery.fn.css = function( name, value ) {
- // Setting 'undefined' is a no-op
- if ( arguments.length === 2 && value === undefined ) {
- return this;
- }
-
- return jQuery.access( this, name, value, true, function( elem, name, value ) {
- return value !== undefined ?
- jQuery.style( elem, name, value ) :
- jQuery.css( elem, name );
- });
-};
-
-jQuery.extend({
- // Add in style property hooks for overriding the default
- // behavior of getting and setting a style property
- cssHooks: {
- opacity: {
- get: function( elem, computed ) {
- if ( computed ) {
- // We should always get a number back from opacity
- var ret = curCSS( elem, "opacity", "opacity" );
- return ret === "" ? "1" : ret;
-
- } else {
- return elem.style.opacity;
- }
- }
- }
- },
-
- // Exclude the following css properties to add px
- cssNumber: {
- "fillOpacity": true,
- "fontWeight": true,
- "lineHeight": true,
- "opacity": true,
- "orphans": true,
- "widows": true,
- "zIndex": true,
- "zoom": true
- },
-
- // Add in properties whose names you wish to fix before
- // setting or getting the value
- cssProps: {
- // normalize float css property
- "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
- },
-
- // Get and set the style property on a DOM Node
- style: function( elem, name, value, extra ) {
- // Don't set styles on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
- return;
- }
-
- // Make sure that we're working with the right name
- var ret, type, origName = jQuery.camelCase( name ),
- style = elem.style, hooks = jQuery.cssHooks[ origName ];
-
- name = jQuery.cssProps[ origName ] || origName;
-
- // Check if we're setting a value
- if ( value !== undefined ) {
- type = typeof value;
-
- // convert relative number strings (+= or -=) to relative numbers. #7345
- if ( type === "string" && (ret = rrelNum.exec( value )) ) {
- value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
- // Fixes bug #9237
- type = "number";
- }
-
- // Make sure that NaN and null values aren't set. See: #7116
- if ( value == null || type === "number" && isNaN( value ) ) {
- return;
- }
-
- // If a number was passed in, add 'px' to the (except for certain CSS properties)
- if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
- value += "px";
- }
-
- // If a hook was provided, use that value, otherwise just set the specified value
- if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
- // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
- // Fixes bug #5509
- try {
- style[ name ] = value;
- } catch(e) {}
- }
-
- } else {
- // If a hook was provided get the non-computed value from there
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
- return ret;
- }
-
- // Otherwise just get the value from the style object
- return style[ name ];
- }
- },
-
- css: function( elem, name, extra ) {
- var ret, hooks;
-
- // Make sure that we're working with the right name
- name = jQuery.camelCase( name );
- hooks = jQuery.cssHooks[ name ];
- name = jQuery.cssProps[ name ] || name;
-
- // cssFloat needs a special treatment
- if ( name === "cssFloat" ) {
- name = "float";
- }
-
- // If a hook was provided get the computed value from there
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
- return ret;
-
- // Otherwise, if a way to get the computed value exists, use that
- } else if ( curCSS ) {
- return curCSS( elem, name );
- }
- },
-
- // A method for quickly swapping in/out CSS properties to get correct calculations
- swap: function( elem, options, callback ) {
- var old = {};
-
- // Remember the old values, and insert the new ones
- for ( var name in options ) {
- old[ name ] = elem.style[ name ];
- elem.style[ name ] = options[ name ];
- }
-
- callback.call( elem );
-
- // Revert the old values
- for ( name in options ) {
- elem.style[ name ] = old[ name ];
- }
- }
-});
-
-// DEPRECATED, Use jQuery.css() instead
-jQuery.curCSS = jQuery.css;
-
-jQuery.each(["height", "width"], function( i, name ) {
- jQuery.cssHooks[ name ] = {
- get: function( elem, computed, extra ) {
- var val;
-
- if ( computed ) {
- if ( elem.offsetWidth !== 0 ) {
- return getWH( elem, name, extra );
- } else {
- jQuery.swap( elem, cssShow, function() {
- val = getWH( elem, name, extra );
- });
- }
-
- return val;
- }
- },
-
- set: function( elem, value ) {
- if ( rnumpx.test( value ) ) {
- // ignore negative width and height values #1599
- value = parseFloat( value );
-
- if ( value >= 0 ) {
- return value + "px";
- }
-
- } else {
- return value;
- }
- }
- };
-});
-
-if ( !jQuery.support.opacity ) {
- jQuery.cssHooks.opacity = {
- get: function( elem, computed ) {
- // IE uses filters for opacity
- return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
- ( parseFloat( RegExp.$1 ) / 100 ) + "" :
- computed ? "1" : "";
- },
-
- set: function( elem, value ) {
- var style = elem.style,
- currentStyle = elem.currentStyle,
- opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
- filter = currentStyle && currentStyle.filter || style.filter || "";
-
- // IE has trouble with opacity if it does not have layout
- // Force it by setting the zoom level
- style.zoom = 1;
-
- // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
- if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
-
- // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
- // if "filter:" is present at all, clearType is disabled, we want to avoid this
- // style.removeAttribute is IE Only, but so apparently is this code path...
- style.removeAttribute( "filter" );
-
- // if there there is no filter style applied in a css rule, we are done
- if ( currentStyle && !currentStyle.filter ) {
- return;
- }
- }
-
- // otherwise, set new filter values
- style.filter = ralpha.test( filter ) ?
- filter.replace( ralpha, opacity ) :
- filter + " " + opacity;
- }
- };
-}
-
-jQuery(function() {
- // This hook cannot be added until DOM ready because the support test
- // for it is not run until after DOM ready
- if ( !jQuery.support.reliableMarginRight ) {
- jQuery.cssHooks.marginRight = {
- get: function( elem, computed ) {
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- // Work around by temporarily setting element display to inline-block
- var ret;
- jQuery.swap( elem, { "display": "inline-block" }, function() {
- if ( computed ) {
- ret = curCSS( elem, "margin-right", "marginRight" );
- } else {
- ret = elem.style.marginRight;
- }
- });
- return ret;
- }
- };
- }
-});
-
-if ( document.defaultView && document.defaultView.getComputedStyle ) {
- getComputedStyle = function( elem, name ) {
- var ret, defaultView, computedStyle;
-
- name = name.replace( rupper, "-$1" ).toLowerCase();
-
- if ( (defaultView = elem.ownerDocument.defaultView) &&
- (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
- ret = computedStyle.getPropertyValue( name );
- if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
- ret = jQuery.style( elem, name );
- }
- }
-
- return ret;
- };
-}
-
-if ( document.documentElement.currentStyle ) {
- currentStyle = function( elem, name ) {
- var left, rsLeft, uncomputed,
- ret = elem.currentStyle && elem.currentStyle[ name ],
- style = elem.style;
-
- // Avoid setting ret to empty string here
- // so we don't default to auto
- if ( ret === null && style && (uncomputed = style[ name ]) ) {
- ret = uncomputed;
- }
-
- // From the awesome hack by Dean Edwards
- // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
- // If we're not dealing with a regular pixel number
- // but a number that has a weird ending, we need to convert it to pixels
- if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
-
- // Remember the original values
- left = style.left;
- rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
-
- // Put in the new values to get a computed value out
- if ( rsLeft ) {
- elem.runtimeStyle.left = elem.currentStyle.left;
- }
- style.left = name === "fontSize" ? "1em" : ( ret || 0 );
- ret = style.pixelLeft + "px";
-
- // Revert the changed values
- style.left = left;
- if ( rsLeft ) {
- elem.runtimeStyle.left = rsLeft;
- }
- }
-
- return ret === "" ? "auto" : ret;
- };
-}
-
-curCSS = getComputedStyle || currentStyle;
-
-function getWH( elem, name, extra ) {
-
- // Start with offset property
- var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
- which = name === "width" ? cssWidth : cssHeight,
- i = 0,
- len = which.length;
-
- if ( val > 0 ) {
- if ( extra !== "border" ) {
- for ( ; i < len; i++ ) {
- if ( !extra ) {
- val -= parseFloat( jQuery.css( elem, "padding" + which[ i ] ) ) || 0;
- }
- if ( extra === "margin" ) {
- val += parseFloat( jQuery.css( elem, extra + which[ i ] ) ) || 0;
- } else {
- val -= parseFloat( jQuery.css( elem, "border" + which[ i ] + "Width" ) ) || 0;
- }
- }
- }
-
- return val + "px";
- }
-
- // Fall back to computed then uncomputed css if necessary
- val = curCSS( elem, name, name );
- if ( val < 0 || val == null ) {
- val = elem.style[ name ] || 0;
- }
- // Normalize "", auto, and prepare for extra
- val = parseFloat( val ) || 0;
-
- // Add padding, border, margin
- if ( extra ) {
- for ( ; i < len; i++ ) {
- val += parseFloat( jQuery.css( elem, "padding" + which[ i ] ) ) || 0;
- if ( extra !== "padding" ) {
- val += parseFloat( jQuery.css( elem, "border" + which[ i ] + "Width" ) ) || 0;
- }
- if ( extra === "margin" ) {
- val += parseFloat( jQuery.css( elem, extra + which[ i ] ) ) || 0;
- }
- }
- }
-
- return val + "px";
-}
-
-if ( jQuery.expr && jQuery.expr.filters ) {
- jQuery.expr.filters.hidden = function( elem ) {
- var width = elem.offsetWidth,
- height = elem.offsetHeight;
-
- return ( width === 0 && height === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
- };
-
- jQuery.expr.filters.visible = function( elem ) {
- return !jQuery.expr.filters.hidden( elem );
- };
-}
-
-
-
-
-var r20 = /%20/g,
- rbracket = /\[\]$/,
- rCRLF = /\r?\n/g,
- rhash = /#.*$/,
- rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
- rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
- // #7653, #8125, #8152: local protocol detection
- rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
- rnoContent = /^(?:GET|HEAD)$/,
- rprotocol = /^\/\//,
- rquery = /\?/,
- rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
- rselectTextarea = /^(?:select|textarea)/i,
- rspacesAjax = /\s+/,
- rts = /([?&])_=[^&]*/,
- rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
-
- // Keep a copy of the old load method
- _load = jQuery.fn.load,
-
- /* Prefilters
- * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
- * 2) These are called:
- * - BEFORE asking for a transport
- * - AFTER param serialization (s.data is a string if s.processData is true)
- * 3) key is the dataType
- * 4) the catchall symbol "*" can be used
- * 5) execution will start with transport dataType and THEN continue down to "*" if needed
- */
- prefilters = {},
-
- /* Transports bindings
- * 1) key is the dataType
- * 2) the catchall symbol "*" can be used
- * 3) selection will start with transport dataType and THEN go to "*" if needed
- */
- transports = {},
-
- // Document location
- ajaxLocation,
-
- // Document location segments
- ajaxLocParts,
-
- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
- allTypes = ["*/"] + ["*"];
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
- ajaxLocation = location.href;
-} catch( e ) {
- // Use the href attribute of an A element
- // since IE will modify it given document.location
- ajaxLocation = document.createElement( "a" );
- ajaxLocation.href = "";
- ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
- // dataTypeExpression is optional and defaults to "*"
- return function( dataTypeExpression, func ) {
-
- if ( typeof dataTypeExpression !== "string" ) {
- func = dataTypeExpression;
- dataTypeExpression = "*";
- }
-
- if ( jQuery.isFunction( func ) ) {
- var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
- i = 0,
- length = dataTypes.length,
- dataType,
- list,
- placeBefore;
-
- // For each dataType in the dataTypeExpression
- for ( ; i < length; i++ ) {
- dataType = dataTypes[ i ];
- // We control if we're asked to add before
- // any existing element
- placeBefore = /^\+/.test( dataType );
- if ( placeBefore ) {
- dataType = dataType.substr( 1 ) || "*";
- }
- list = structure[ dataType ] = structure[ dataType ] || [];
- // then we add to the structure accordingly
- list[ placeBefore ? "unshift" : "push" ]( func );
- }
- }
- };
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
- dataType /* internal */, inspected /* internal */ ) {
-
- dataType = dataType || options.dataTypes[ 0 ];
- inspected = inspected || {};
-
- inspected[ dataType ] = true;
-
- var list = structure[ dataType ],
- i = 0,
- length = list ? list.length : 0,
- executeOnly = ( structure === prefilters ),
- selection;
-
- for ( ; i < length && ( executeOnly || !selection ); i++ ) {
- selection = list[ i ]( options, originalOptions, jqXHR );
- // If we got redirected to another dataType
- // we try there if executing only and not done already
- if ( typeof selection === "string" ) {
- if ( !executeOnly || inspected[ selection ] ) {
- selection = undefined;
- } else {
- options.dataTypes.unshift( selection );
- selection = inspectPrefiltersOrTransports(
- structure, options, originalOptions, jqXHR, selection, inspected );
- }
- }
- }
- // If we're only executing or nothing was selected
- // we try the catchall dataType if not done already
- if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
- selection = inspectPrefiltersOrTransports(
- structure, options, originalOptions, jqXHR, "*", inspected );
- }
- // unnecessary when only executing (prefilters)
- // but it'll be ignored by the caller in that case
- return selection;
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
- var key, deep,
- flatOptions = jQuery.ajaxSettings.flatOptions || {};
- for ( key in src ) {
- if ( src[ key ] !== undefined ) {
- ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
- }
- }
- if ( deep ) {
- jQuery.extend( true, target, deep );
- }
-}
-
-jQuery.fn.extend({
- load: function( url, params, callback ) {
- if ( typeof url !== "string" && _load ) {
- return _load.apply( this, arguments );
-
- // Don't do a request if no elements are being requested
- } else if ( !this.length ) {
- return this;
- }
-
- var off = url.indexOf( " " );
- if ( off >= 0 ) {
- var selector = url.slice( off, url.length );
- url = url.slice( 0, off );
- }
-
- // Default to a GET request
- var type = "GET";
-
- // If the second parameter was provided
- if ( params ) {
- // If it's a function
- if ( jQuery.isFunction( params ) ) {
- // We assume that it's the callback
- callback = params;
- params = undefined;
-
- // Otherwise, build a param string
- } else if ( typeof params === "object" ) {
- params = jQuery.param( params, jQuery.ajaxSettings.traditional );
- type = "POST";
- }
- }
-
- var self = this;
-
- // Request the remote document
- jQuery.ajax({
- url: url,
- type: type,
- dataType: "html",
- data: params,
- // Complete callback (responseText is used internally)
- complete: function( jqXHR, status, responseText ) {
- // Store the response as specified by the jqXHR object
- responseText = jqXHR.responseText;
- // If successful, inject the HTML into all the matched elements
- if ( jqXHR.isResolved() ) {
- // #4825: Get the actual response in case
- // a dataFilter is present in ajaxSettings
- jqXHR.done(function( r ) {
- responseText = r;
- });
- // See if a selector was specified
- self.html( selector ?
- // Create a dummy div to hold the results
- jQuery("<div>")
- // inject the contents of the document in, removing the scripts
- // to avoid any 'Permission Denied' errors in IE
- .append(responseText.replace(rscript, ""))
-
- // Locate the specified elements
- .find(selector) :
-
- // If not, just inject the full result
- responseText );
- }
-
- if ( callback ) {
- self.each( callback, [ responseText, status, jqXHR ] );
- }
- }
- });
-
- return this;
- },
-
- serialize: function() {
- return jQuery.param( this.serializeArray() );
- },
-
- serializeArray: function() {
- return this.map(function(){
- return this.elements ? jQuery.makeArray( this.elements ) : this;
- })
- .filter(function(){
- return this.name && !this.disabled &&
- ( this.checked || rselectTextarea.test( this.nodeName ) ||
- rinput.test( this.type ) );
- })
- .map(function( i, elem ){
- var val = jQuery( this ).val();
-
- return val == null ?
- null :
- jQuery.isArray( val ) ?
- jQuery.map( val, function( val, i ){
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }) :
- { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }).get();
- }
-});
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
- jQuery.fn[ o ] = function( f ){
- return this.on( o, f );
- };
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
- jQuery[ method ] = function( url, data, callback, type ) {
- // shift arguments if data argument was omitted
- if ( jQuery.isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = undefined;
- }
-
- return jQuery.ajax({
- type: method,
- url: url,
- data: data,
- success: callback,
- dataType: type
- });
- };
-});
-
-jQuery.extend({
-
- getScript: function( url, callback ) {
- return jQuery.get( url, undefined, callback, "script" );
- },
-
- getJSON: function( url, data, callback ) {
- return jQuery.get( url, data, callback, "json" );
- },
-
- // Creates a full fledged settings object into target
- // with both ajaxSettings and settings fields.
- // If target is omitted, writes into ajaxSettings.
- ajaxSetup: function( target, settings ) {
- if ( settings ) {
- // Building a settings object
- ajaxExtend( target, jQuery.ajaxSettings );
- } else {
- // Extending ajaxSettings
- settings = target;
- target = jQuery.ajaxSettings;
- }
- ajaxExtend( target, settings );
- return target;
- },
-
- ajaxSettings: {
- url: ajaxLocation,
- isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
- global: true,
- type: "GET",
- contentType: "application/x-www-form-urlencoded",
- processData: true,
- async: true,
- /*
- timeout: 0,
- data: null,
- dataType: null,
- username: null,
- password: null,
- cache: null,
- traditional: false,
- headers: {},
- */
-
- accepts: {
- xml: "application/xml, text/xml",
- html: "text/html",
- text: "text/plain",
- json: "application/json, text/javascript",
- "*": allTypes
- },
-
- contents: {
- xml: /xml/,
- html: /html/,
- json: /json/
- },
-
- responseFields: {
- xml: "responseXML",
- text: "responseText"
- },
-
- // List of data converters
- // 1) key format is "source_type destination_type" (a single space in-between)
- // 2) the catchall symbol "*" can be used for source_type
- converters: {
-
- // Convert anything to text
- "* text": window.String,
-
- // Text to html (true = no transformation)
- "text html": true,
-
- // Evaluate text as a json expression
- "text json": jQuery.parseJSON,
-
- // Parse text as xml
- "text xml": jQuery.parseXML
- },
-
- // For options that shouldn't be deep extended:
- // you can add your own custom options here if
- // and when you create one that shouldn't be
- // deep extended (see ajaxExtend)
- flatOptions: {
- context: true,
- url: true
- }
- },
-
- ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
- ajaxTransport: addToPrefiltersOrTransports( transports ),
-
- // Main method
- ajax: function( url, options ) {
-
- // If url is an object, simulate pre-1.5 signature
- if ( typeof url === "object" ) {
- options = url;
- url = undefined;
- }
-
- // Force options to be an object
- options = options || {};
-
- var // Create the final options object
- s = jQuery.ajaxSetup( {}, options ),
- // Callbacks context
- callbackContext = s.context || s,
- // Context for global events
- // It's the callbackContext if one was provided in the options
- // and if it's a DOM node or a jQuery collection
- globalEventContext = callbackContext !== s &&
- ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
- jQuery( callbackContext ) : jQuery.event,
- // Deferreds
- deferred = jQuery.Deferred(),
- completeDeferred = jQuery.Callbacks( "once memory" ),
- // Status-dependent callbacks
- statusCode = s.statusCode || {},
- // ifModified key
- ifModifiedKey,
- // Headers (they are sent all at once)
- requestHeaders = {},
- requestHeadersNames = {},
- // Response headers
- responseHeadersString,
- responseHeaders,
- // transport
- transport,
- // timeout handle
- timeoutTimer,
- // Cross-domain detection vars
- parts,
- // The jqXHR state
- state = 0,
- // To know if global events are to be dispatched
- fireGlobals,
- // Loop variable
- i,
- // Fake xhr
- jqXHR = {
-
- readyState: 0,
-
- // Caches the header
- setRequestHeader: function( name, value ) {
- if ( !state ) {
- var lname = name.toLowerCase();
- name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
- requestHeaders[ name ] = value;
- }
- return this;
- },
-
- // Raw string
- getAllResponseHeaders: function() {
- return state === 2 ? responseHeadersString : null;
- },
-
- // Builds headers hashtable if needed
- getResponseHeader: function( key ) {
- var match;
- if ( state === 2 ) {
- if ( !responseHeaders ) {
- responseHeaders = {};
- while( ( match = rheaders.exec( responseHeadersString ) ) ) {
- responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
- }
- }
- match = responseHeaders[ key.toLowerCase() ];
- }
- return match === undefined ? null : match;
- },
-
- // Overrides response content-type header
- overrideMimeType: function( type ) {
- if ( !state ) {
- s.mimeType = type;
- }
- return this;
- },
-
- // Cancel the request
- abort: function( statusText ) {
- statusText = statusText || "abort";
- if ( transport ) {
- transport.abort( statusText );
- }
- done( 0, statusText );
- return this;
- }
- };
-
- // Callback for when everything is done
- // It is defined here because jslint complains if it is declared
- // at the end of the function (which would be more logical and readable)
- function done( status, nativeStatusText, responses, headers ) {
-
- // Called once
- if ( state === 2 ) {
- return;
- }
-
- // State is "done" now
- state = 2;
-
- // Clear timeout if it exists
- if ( timeoutTimer ) {
- clearTimeout( timeoutTimer );
- }
-
- // Dereference transport for early garbage collection
- // (no matter how long the jqXHR object will be used)
- transport = undefined;
-
- // Cache response headers
- responseHeadersString = headers || "";
-
- // Set readyState
- jqXHR.readyState = status > 0 ? 4 : 0;
-
- var isSuccess,
- success,
- error,
- statusText = nativeStatusText,
- response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
- lastModified,
- etag;
-
- // If successful, handle type chaining
- if ( status >= 200 && status < 300 || status === 304 ) {
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
-
- if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
- jQuery.lastModified[ ifModifiedKey ] = lastModified;
- }
- if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
- jQuery.etag[ ifModifiedKey ] = etag;
- }
- }
-
- // If not modified
- if ( status === 304 ) {
-
- statusText = "notmodified";
- isSuccess = true;
-
- // If we have data
- } else {
-
- try {
- success = ajaxConvert( s, response );
- statusText = "success";
- isSuccess = true;
- } catch(e) {
- // We have a parsererror
- statusText = "parsererror";
- error = e;
- }
- }
- } else {
- // We extract error from statusText
- // then normalize statusText and status for non-aborts
- error = statusText;
- if ( !statusText || status ) {
- statusText = "error";
- if ( status < 0 ) {
- status = 0;
- }
- }
- }
-
- // Set data for the fake xhr object
- jqXHR.status = status;
- jqXHR.statusText = "" + ( nativeStatusText || statusText );
-
- // Success/Error
- if ( isSuccess ) {
- deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
- } else {
- deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
- }
-
- // Status-dependent callbacks
- jqXHR.statusCode( statusCode );
- statusCode = undefined;
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
- [ jqXHR, s, isSuccess ? success : error ] );
- }
-
- // Complete
- completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
- // Handle the global AJAX counter
- if ( !( --jQuery.active ) ) {
- jQuery.event.trigger( "ajaxStop" );
- }
- }
- }
-
- // Attach deferreds
- deferred.promise( jqXHR );
- jqXHR.success = jqXHR.done;
- jqXHR.error = jqXHR.fail;
- jqXHR.complete = completeDeferred.add;
-
- // Status-dependent callbacks
- jqXHR.statusCode = function( map ) {
- if ( map ) {
- var tmp;
- if ( state < 2 ) {
- for ( tmp in map ) {
- statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
- }
- } else {
- tmp = map[ jqXHR.status ];
- jqXHR.then( tmp, tmp );
- }
- }
- return this;
- };
-
- // Remove hash character (#7531: and string promotion)
- // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
- // We also use the url parameter if available
- s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
- // Extract dataTypes list
- s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
-
- // Determine if a cross-domain request is in order
- if ( s.crossDomain == null ) {
- parts = rurl.exec( s.url.toLowerCase() );
- s.crossDomain = !!( parts &&
- ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
- ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
- ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
- );
- }
-
- // Convert data if not already a string
- if ( s.data && s.processData && typeof s.data !== "string" ) {
- s.data = jQuery.param( s.data, s.traditional );
- }
-
- // Apply prefilters
- inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
- // If request was aborted inside a prefiler, stop there
- if ( state === 2 ) {
- return false;
- }
-
- // We can fire global events as of now if asked to
- fireGlobals = s.global;
-
- // Uppercase the type
- s.type = s.type.toUpperCase();
-
- // Determine if request has content
- s.hasContent = !rnoContent.test( s.type );
-
- // Watch for a new set of requests
- if ( fireGlobals && jQuery.active++ === 0 ) {
- jQuery.event.trigger( "ajaxStart" );
- }
-
- // More options handling for requests with no content
- if ( !s.hasContent ) {
-
- // If data is available, append data to url
- if ( s.data ) {
- s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
- // #9682: remove data so that it's not used in an eventual retry
- delete s.data;
- }
-
- // Get ifModifiedKey before adding the anti-cache parameter
- ifModifiedKey = s.url;
-
- // Add anti-cache in url if needed
- if ( s.cache === false ) {
-
- var ts = jQuery.now(),
- // try replacing _= if it is there
- ret = s.url.replace( rts, "$1_=" + ts );
-
- // if nothing was replaced, add timestamp to the end
- s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
- }
- }
-
- // Set the correct header, if data is being sent
- if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
- jqXHR.setRequestHeader( "Content-Type", s.contentType );
- }
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- ifModifiedKey = ifModifiedKey || s.url;
- if ( jQuery.lastModified[ ifModifiedKey ] ) {
- jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
- }
- if ( jQuery.etag[ ifModifiedKey ] ) {
- jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
- }
- }
-
- // Set the Accepts header for the server, depending on the dataType
- jqXHR.setRequestHeader(
- "Accept",
- s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
- s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
- s.accepts[ "*" ]
- );
-
- // Check for headers option
- for ( i in s.headers ) {
- jqXHR.setRequestHeader( i, s.headers[ i ] );
- }
-
- // Allow custom headers/mimetypes and early abort
- if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
- // Abort if not done already
- jqXHR.abort();
- return false;
-
- }
-
- // Install callbacks on deferreds
- for ( i in { success: 1, error: 1, complete: 1 } ) {
- jqXHR[ i ]( s[ i ] );
- }
-
- // Get transport
- transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
- // If no transport, we auto-abort
- if ( !transport ) {
- done( -1, "No Transport" );
- } else {
- jqXHR.readyState = 1;
- // Send global event
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
- }
- // Timeout
- if ( s.async && s.timeout > 0 ) {
- timeoutTimer = setTimeout( function(){
- jqXHR.abort( "timeout" );
- }, s.timeout );
- }
-
- try {
- state = 1;
- transport.send( requestHeaders, done );
- } catch (e) {
- // Propagate exception as error if not done
- if ( state < 2 ) {
- done( -1, e );
- // Simply rethrow otherwise
- } else {
- throw e;
- }
- }
- }
-
- return jqXHR;
- },
-
- // Serialize an array of form elements or a set of
- // key/values into a query string
- param: function( a, traditional ) {
- var s = [],
- add = function( key, value ) {
- // If value is a function, invoke it and return its value
- value = jQuery.isFunction( value ) ? value() : value;
- s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
- };
-
- // Set traditional to true for jQuery <= 1.3.2 behavior.
- if ( traditional === undefined ) {
- traditional = jQuery.ajaxSettings.traditional;
- }
-
- // If an array was passed in, assume that it is an array of form elements.
- if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
- // Serialize the form elements
- jQuery.each( a, function() {
- add( this.name, this.value );
- });
-
- } else {
- // If traditional, encode the "old" way (the way 1.3.2 or older
- // did it), otherwise encode params recursively.
- for ( var prefix in a ) {
- buildParams( prefix, a[ prefix ], traditional, add );
- }
- }
-
- // Return the resulting serialization
- return s.join( "&" ).replace( r20, "+" );
- }
-});
-
-function buildParams( prefix, obj, traditional, add ) {
- if ( jQuery.isArray( obj ) ) {
- // Serialize array item.
- jQuery.each( obj, function( i, v ) {
- if ( traditional || rbracket.test( prefix ) ) {
- // Treat each array item as a scalar.
- add( prefix, v );
-
- } else {
- // If array item is non-scalar (array or object), encode its
- // numeric index to resolve deserialization ambiguity issues.
- // Note that rack (as of 1.0.0) can't currently deserialize
- // nested arrays properly, and attempting to do so may cause
- // a server error. Possible fixes are to modify rack's
- // deserialization algorithm or to provide an option or flag
- // to force array serialization to be shallow.
- buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
- }
- });
-
- } else if ( !traditional && obj != null && typeof obj === "object" ) {
- // Serialize object item.
- for ( var name in obj ) {
- buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
- }
-
- } else {
- // Serialize scalar item.
- add( prefix, obj );
- }
-}
-
-// This is still on the jQuery object... for now
-// Want to move this to jQuery.ajax some day
-jQuery.extend({
-
- // Counter for holding the number of active queries
- active: 0,
-
- // Last-Modified header cache for next request
- lastModified: {},
- etag: {}
-
-});
-
-/* Handles responses to an ajax request:
- * - sets all responseXXX fields accordingly
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
- var contents = s.contents,
- dataTypes = s.dataTypes,
- responseFields = s.responseFields,
- ct,
- type,
- finalDataType,
- firstDataType;
-
- // Fill responseXXX fields
- for ( type in responseFields ) {
- if ( type in responses ) {
- jqXHR[ responseFields[type] ] = responses[ type ];
- }
- }
-
- // Remove auto dataType and get content-type in the process
- while( dataTypes[ 0 ] === "*" ) {
- dataTypes.shift();
- if ( ct === undefined ) {
- ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
- }
- }
-
- // Check if we're dealing with a known content-type
- if ( ct ) {
- for ( type in contents ) {
- if ( contents[ type ] && contents[ type ].test( ct ) ) {
- dataTypes.unshift( type );
- break;
- }
- }
- }
-
- // Check to see if we have a response for the expected dataType
- if ( dataTypes[ 0 ] in responses ) {
- finalDataType = dataTypes[ 0 ];
- } else {
- // Try convertible dataTypes
- for ( type in responses ) {
- if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
- finalDataType = type;
- break;
- }
- if ( !firstDataType ) {
- firstDataType = type;
- }
- }
- // Or just use first one
- finalDataType = finalDataType || firstDataType;
- }
-
- // If we found a dataType
- // We add the dataType to the list if needed
- // and return the corresponding response
- if ( finalDataType ) {
- if ( finalDataType !== dataTypes[ 0 ] ) {
- dataTypes.unshift( finalDataType );
- }
- return responses[ finalDataType ];
- }
-}
-
-// Chain conversions given the request and the original response
-function ajaxConvert( s, response ) {
-
- // Apply the dataFilter if provided
- if ( s.dataFilter ) {
- response = s.dataFilter( response, s.dataType );
- }
-
- var dataTypes = s.dataTypes,
- converters = {},
- i,
- key,
- length = dataTypes.length,
- tmp,
- // Current and previous dataTypes
- current = dataTypes[ 0 ],
- prev,
- // Conversion expression
- conversion,
- // Conversion function
- conv,
- // Conversion functions (transitive conversion)
- conv1,
- conv2;
-
- // For each dataType in the chain
- for ( i = 1; i < length; i++ ) {
-
- // Create converters map
- // with lowercased keys
- if ( i === 1 ) {
- for ( key in s.converters ) {
- if ( typeof key === "string" ) {
- converters[ key.toLowerCase() ] = s.converters[ key ];
- }
- }
- }
-
- // Get the dataTypes
- prev = current;
- current = dataTypes[ i ];
-
- // If current is auto dataType, update it to prev
- if ( current === "*" ) {
- current = prev;
- // If no auto and dataTypes are actually different
- } else if ( prev !== "*" && prev !== current ) {
-
- // Get the converter
- conversion = prev + " " + current;
- conv = converters[ conversion ] || converters[ "* " + current ];
-
- // If there is no direct converter, search transitively
- if ( !conv ) {
- conv2 = undefined;
- for ( conv1 in converters ) {
- tmp = conv1.split( " " );
- if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
- conv2 = converters[ tmp[1] + " " + current ];
- if ( conv2 ) {
- conv1 = converters[ conv1 ];
- if ( conv1 === true ) {
- conv = conv2;
- } else if ( conv2 === true ) {
- conv = conv1;
- }
- break;
- }
- }
- }
- }
- // If we found no converter, dispatch an error
- if ( !( conv || conv2 ) ) {
- jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
- }
- // If found converter is not an equivalence
- if ( conv !== true ) {
- // Convert with 1 or 2 converters accordingly
- response = conv ? conv( response ) : conv2( conv1(response) );
- }
- }
- }
- return response;
-}
-
-
-
-
-var jsc = jQuery.now(),
- jsre = /(\=)\?(&|$)|\?\?/i;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
- jsonp: "callback",
- jsonpCallback: function() {
- return jQuery.expando + "_" + ( jsc++ );
- }
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
- var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
- ( typeof s.data === "string" );
-
- if ( s.dataTypes[ 0 ] === "jsonp" ||
- s.jsonp !== false && ( jsre.test( s.url ) ||
- inspectData && jsre.test( s.data ) ) ) {
-
- var responseContainer,
- jsonpCallback = s.jsonpCallback =
- jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
- previous = window[ jsonpCallback ],
- url = s.url,
- data = s.data,
- replace = "$1" + jsonpCallback + "$2";
-
- if ( s.jsonp !== false ) {
- url = url.replace( jsre, replace );
- if ( s.url === url ) {
- if ( inspectData ) {
- data = data.replace( jsre, replace );
- }
- if ( s.data === data ) {
- // Add callback manually
- url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
- }
- }
- }
-
- s.url = url;
- s.data = data;
-
- // Install callback
- window[ jsonpCallback ] = function( response ) {
- responseContainer = [ response ];
- };
-
- // Clean-up function
- jqXHR.always(function() {
- // Set callback back to previous value
- window[ jsonpCallback ] = previous;
- // Call if it was a function and we have a response
- if ( responseContainer && jQuery.isFunction( previous ) ) {
- window[ jsonpCallback ]( responseContainer[ 0 ] );
- }
- });
-
- // Use data converter to retrieve json after script execution
- s.converters["script json"] = function() {
- if ( !responseContainer ) {
- jQuery.error( jsonpCallback + " was not called" );
- }
- return responseContainer[ 0 ];
- };
-
- // force json dataType
- s.dataTypes[ 0 ] = "json";
-
- // Delegate to script
- return "script";
- }
-});
-
-
-
-
-// Install script dataType
-jQuery.ajaxSetup({
- accepts: {
- script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
- },
- contents: {
- script: /javascript|ecmascript/
- },
- converters: {
- "text script": function( text ) {
- jQuery.globalEval( text );
- return text;
- }
- }
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
- if ( s.cache === undefined ) {
- s.cache = false;
- }
- if ( s.crossDomain ) {
- s.type = "GET";
- s.global = false;
- }
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
- // This transport only deals with cross domain requests
- if ( s.crossDomain ) {
-
- var script,
- head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
-
- return {
-
- send: function( _, callback ) {
-
- script = document.createElement( "script" );
-
- script.async = "async";
-
- if ( s.scriptCharset ) {
- script.charset = s.scriptCharset;
- }
-
- script.src = s.url;
-
- // Attach handlers for all browsers
- script.onload = script.onreadystatechange = function( _, isAbort ) {
-
- if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
- // Handle memory leak in IE
- script.onload = script.onreadystatechange = null;
-
- // Remove the script
- if ( head && script.parentNode ) {
- head.removeChild( script );
- }
-
- // Dereference the script
- script = undefined;
-
- // Callback if not abort
- if ( !isAbort ) {
- callback( 200, "success" );
- }
- }
- };
- // Use insertBefore instead of appendChild to circumvent an IE6 bug.
- // This arises when a base node is used (#2709 and #4378).
- head.insertBefore( script, head.firstChild );
- },
-
- abort: function() {
- if ( script ) {
- script.onload( 0, 1 );
- }
- }
- };
- }
-});
-
-
-
-
-var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
- xhrOnUnloadAbort = window.ActiveXObject ? function() {
- // Abort all pending requests
- for ( var key in xhrCallbacks ) {
- xhrCallbacks[ key ]( 0, 1 );
- }
- } : false,
- xhrId = 0,
- xhrCallbacks;
-
-// Functions to create xhrs
-function createStandardXHR() {
- try {
- return new window.XMLHttpRequest();
- } catch( e ) {}
-}
-
-function createActiveXHR() {
- try {
- return new window.ActiveXObject( "Microsoft.XMLHTTP" );
- } catch( e ) {}
-}
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
- /* Microsoft failed to properly
- * implement the XMLHttpRequest in IE7 (can't request local files),
- * so we use the ActiveXObject when it is available
- * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
- * we need a fallback.
- */
- function() {
- return !this.isLocal && createStandardXHR() || createActiveXHR();
- } :
- // For all other browsers, use the standard XMLHttpRequest object
- createStandardXHR;
-
-// Determine support properties
-(function( xhr ) {
- jQuery.extend( jQuery.support, {
- ajax: !!xhr,
- cors: !!xhr && ( "withCredentials" in xhr )
- });
-})( jQuery.ajaxSettings.xhr() );
-
-// Create transport if the browser can provide an xhr
-if ( jQuery.support.ajax ) {
-
- jQuery.ajaxTransport(function( s ) {
- // Cross domain only allowed if supported through XMLHttpRequest
- if ( !s.crossDomain || jQuery.support.cors ) {
-
- var callback;
-
- return {
- send: function( headers, complete ) {
-
- // Get a new xhr
- var xhr = s.xhr(),
- handle,
- i;
-
- // Open the socket
- // Passing null username, generates a login popup on Opera (#2865)
- if ( s.username ) {
- xhr.open( s.type, s.url, s.async, s.username, s.password );
- } else {
- xhr.open( s.type, s.url, s.async );
- }
-
- // Apply custom fields if provided
- if ( s.xhrFields ) {
- for ( i in s.xhrFields ) {
- xhr[ i ] = s.xhrFields[ i ];
- }
- }
-
- // Override mime type if needed
- if ( s.mimeType && xhr.overrideMimeType ) {
- xhr.overrideMimeType( s.mimeType );
- }
-
- // X-Requested-With header
- // For cross-domain requests, seeing as conditions for a preflight are
- // akin to a jigsaw puzzle, we simply never set it to be sure.
- // (it can always be set on a per-request basis or even using ajaxSetup)
- // For same-domain requests, won't change header if already provided.
- if ( !s.crossDomain && !headers["X-Requested-With"] ) {
- headers[ "X-Requested-With" ] = "XMLHttpRequest";
- }
-
- // Need an extra try/catch for cross domain requests in Firefox 3
- try {
- for ( i in headers ) {
- xhr.setRequestHeader( i, headers[ i ] );
- }
- } catch( _ ) {}
-
- // Do send the request
- // This may raise an exception which is actually
- // handled in jQuery.ajax (so no try/catch here)
- xhr.send( ( s.hasContent && s.data ) || null );
-
- // Listener
- callback = function( _, isAbort ) {
-
- var status,
- statusText,
- responseHeaders,
- responses,
- xml;
-
- // Firefox throws exceptions when accessing properties
- // of an xhr when a network error occured
- // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
- try {
-
- // Was never called and is aborted or complete
- if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-
- // Only called once
- callback = undefined;
-
- // Do not keep as active anymore
- if ( handle ) {
- xhr.onreadystatechange = jQuery.noop;
- if ( xhrOnUnloadAbort ) {
- delete xhrCallbacks[ handle ];
- }
- }
-
- // If it's an abort
- if ( isAbort ) {
- // Abort it manually if needed
- if ( xhr.readyState !== 4 ) {
- xhr.abort();
- }
- } else {
- status = xhr.status;
- responseHeaders = xhr.getAllResponseHeaders();
- responses = {};
- xml = xhr.responseXML;
-
- // Construct response list
- if ( xml && xml.documentElement /* #4958 */ ) {
- responses.xml = xml;
- }
- responses.text = xhr.responseText;
-
- // Firefox throws an exception when accessing
- // statusText for faulty cross-domain requests
- try {
- statusText = xhr.statusText;
- } catch( e ) {
- // We normalize with Webkit giving an empty statusText
- statusText = "";
- }
-
- // Filter status for non standard behaviors
-
- // If the request is local and we have data: assume a success
- // (success with no data won't get notified, that's the best we
- // can do given current implementations)
- if ( !status && s.isLocal && !s.crossDomain ) {
- status = responses.text ? 200 : 404;
- // IE - #1450: sometimes returns 1223 when it should be 204
- } else if ( status === 1223 ) {
- status = 204;
- }
- }
- }
- } catch( firefoxAccessException ) {
- if ( !isAbort ) {
- complete( -1, firefoxAccessException );
- }
- }
-
- // Call complete if needed
- if ( responses ) {
- complete( status, statusText, responses, responseHeaders );
- }
- };
-
- // if we're in sync mode or it's in cache
- // and has been retrieved directly (IE6 & IE7)
- // we need to manually fire the callback
- if ( !s.async || xhr.readyState === 4 ) {
- callback();
- } else {
- handle = ++xhrId;
- if ( xhrOnUnloadAbort ) {
- // Create the active xhrs callbacks list if needed
- // and attach the unload handler
- if ( !xhrCallbacks ) {
- xhrCallbacks = {};
- jQuery( window ).unload( xhrOnUnloadAbort );
- }
- // Add to list of active xhrs callbacks
- xhrCallbacks[ handle ] = callback;
- }
- xhr.onreadystatechange = callback;
- }
- },
-
- abort: function() {
- if ( callback ) {
- callback(0,1);
- }
- }
- };
- }
- });
-}
-
-
-
-
-var elemdisplay = {},
- iframe, iframeDoc,
- rfxtypes = /^(?:toggle|show|hide)$/,
- rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
- timerId,
- fxAttrs = [
- // height animations
- [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
- // width animations
- [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
- // opacity animations
- [ "opacity" ]
- ],
- fxNow;
-
-jQuery.fn.extend({
- show: function( speed, easing, callback ) {
- var elem, display;
-
- if ( speed || speed === 0 ) {
- return this.animate( genFx("show", 3), speed, easing, callback );
-
- } else {
- for ( var i = 0, j = this.length; i < j; i++ ) {
- elem = this[ i ];
-
- if ( elem.style ) {
- display = elem.style.display;
-
- // Reset the inline display of this element to learn if it is
- // being hidden by cascaded rules or not
- if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
- display = elem.style.display = "";
- }
-
- // Set elements which have been overridden with display: none
- // in a stylesheet to whatever the default browser style is
- // for such an element
- if ( display === "" && jQuery.css(elem, "display") === "none" ) {
- jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
- }
- }
- }
-
- // Set the display of most of the elements in a second loop
- // to avoid the constant reflow
- for ( i = 0; i < j; i++ ) {
- elem = this[ i ];
-
- if ( elem.style ) {
- display = elem.style.display;
-
- if ( display === "" || display === "none" ) {
- elem.style.display = jQuery._data( elem, "olddisplay" ) || "";
- }
- }
- }
-
- return this;
- }
- },
-
- hide: function( speed, easing, callback ) {
- if ( speed || speed === 0 ) {
- return this.animate( genFx("hide", 3), speed, easing, callback);
-
- } else {
- var elem, display,
- i = 0,
- j = this.length;
-
- for ( ; i < j; i++ ) {
- elem = this[i];
- if ( elem.style ) {
- display = jQuery.css( elem, "display" );
-
- if ( display !== "none" && !jQuery._data( elem, "olddisplay" ) ) {
- jQuery._data( elem, "olddisplay", display );
- }
- }
- }
-
- // Set the display of the elements in a second loop
- // to avoid the constant reflow
- for ( i = 0; i < j; i++ ) {
- if ( this[i].style ) {
- this[i].style.display = "none";
- }
- }
-
- return this;
- }
- },
-
- // Save the old toggle function
- _toggle: jQuery.fn.toggle,
-
- toggle: function( fn, fn2, callback ) {
- var bool = typeof fn === "boolean";
-
- if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
- this._toggle.apply( this, arguments );
-
- } else if ( fn == null || bool ) {
- this.each(function() {
- var state = bool ? fn : jQuery(this).is(":hidden");
- jQuery(this)[ state ? "show" : "hide" ]();
- });
-
- } else {
- this.animate(genFx("toggle", 3), fn, fn2, callback);
- }
-
- return this;
- },
-
- fadeTo: function( speed, to, easing, callback ) {
- return this.filter(":hidden").css("opacity", 0).show().end()
- .animate({opacity: to}, speed, easing, callback);
- },
-
- animate: function( prop, speed, easing, callback ) {
- var optall = jQuery.speed( speed, easing, callback );
-
- if ( jQuery.isEmptyObject( prop ) ) {
- return this.each( optall.complete, [ false ] );
- }
-
- // Do not change referenced properties as per-property easing will be lost
- prop = jQuery.extend( {}, prop );
-
- function doAnimation() {
- // XXX 'this' does not always have a nodeName when running the
- // test suite
-
- if ( optall.queue === false ) {
- jQuery._mark( this );
- }
-
- var opt = jQuery.extend( {}, optall ),
- isElement = this.nodeType === 1,
- hidden = isElement && jQuery(this).is(":hidden"),
- name, val, p, e,
- parts, start, end, unit,
- method;
-
- // will store per property easing and be used to determine when an animation is complete
- opt.animatedProperties = {};
-
- for ( p in prop ) {
-
- // property name normalization
- name = jQuery.camelCase( p );
- if ( p !== name ) {
- prop[ name ] = prop[ p ];
- delete prop[ p ];
- }
-
- val = prop[ name ];
-
- // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
- if ( jQuery.isArray( val ) ) {
- opt.animatedProperties[ name ] = val[ 1 ];
- val = prop[ name ] = val[ 0 ];
- } else {
- opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
- }
-
- if ( val === "hide" && hidden || val === "show" && !hidden ) {
- return opt.complete.call( this );
- }
-
- if ( isElement && ( name === "height" || name === "width" ) ) {
- // Make sure that nothing sneaks out
- // Record all 3 overflow attributes because IE does not
- // change the overflow attribute when overflowX and
- // overflowY are set to the same value
- opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
-
- // Set display property to inline-block for height/width
- // animations on inline elements that are having width/height animated
- if ( jQuery.css( this, "display" ) === "inline" &&
- jQuery.css( this, "float" ) === "none" ) {
-
- // inline-level elements accept inline-block;
- // block-level elements need to be inline with layout
- if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === "inline" ) {
- this.style.display = "inline-block";
-
- } else {
- this.style.zoom = 1;
- }
- }
- }
- }
-
- if ( opt.overflow != null ) {
- this.style.overflow = "hidden";
- }
-
- for ( p in prop ) {
- e = new jQuery.fx( this, opt, p );
- val = prop[ p ];
-
- if ( rfxtypes.test( val ) ) {
-
- // Tracks whether to show or hide based on private
- // data attached to the element
- method = jQuery._data( this, "toggle" + p ) || ( val === "toggle" ? hidden ? "show" : "hide" : 0 );
- if ( method ) {
- jQuery._data( this, "toggle" + p, method === "show" ? "hide" : "show" );
- e[ method ]();
- } else {
- e[ val ]();
- }
-
- } else {
- parts = rfxnum.exec( val );
- start = e.cur();
-
- if ( parts ) {
- end = parseFloat( parts[2] );
- unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
-
- // We need to compute starting value
- if ( unit !== "px" ) {
- jQuery.style( this, p, (end || 1) + unit);
- start = ( (end || 1) / e.cur() ) * start;
- jQuery.style( this, p, start + unit);
- }
-
- // If a +=/-= token was provided, we're doing a relative animation
- if ( parts[1] ) {
- end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
- }
-
- e.custom( start, end, unit );
-
- } else {
- e.custom( start, val, "" );
- }
- }
- }
-
- // For JS strict compliance
- return true;
- }
-
- return optall.queue === false ?
- this.each( doAnimation ) :
- this.queue( optall.queue, doAnimation );
- },
-
- stop: function( type, clearQueue, gotoEnd ) {
- if ( typeof type !== "string" ) {
- gotoEnd = clearQueue;
- clearQueue = type;
- type = undefined;
- }
- if ( clearQueue && type !== false ) {
- this.queue( type || "fx", [] );
- }
-
- return this.each(function() {
- var index,
- hadTimers = false,
- timers = jQuery.timers,
- data = jQuery._data( this );
-
- // clear marker counters if we know they won't be
- if ( !gotoEnd ) {
- jQuery._unmark( true, this );
- }
-
- function stopQueue( elem, data, index ) {
- var hooks = data[ index ];
- jQuery.removeData( elem, index, true );
- hooks.stop( gotoEnd );
- }
-
- if ( type == null ) {
- for ( index in data ) {
- if ( data[ index ] && data[ index ].stop && index.indexOf(".run") === index.length - 4 ) {
- stopQueue( this, data, index );
- }
- }
- } else if ( data[ index = type + ".run" ] && data[ index ].stop ){
- stopQueue( this, data, index );
- }
-
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
- if ( gotoEnd ) {
-
- // force the next step to be the last
- timers[ index ]( true );
- } else {
- timers[ index ].saveState();
- }
- hadTimers = true;
- timers.splice( index, 1 );
- }
- }
-
- // start the next in the queue if the last step wasn't forced
- // timers currently will call their complete callbacks, which will dequeue
- // but only if they were gotoEnd
- if ( !( gotoEnd && hadTimers ) ) {
- jQuery.dequeue( this, type );
- }
- });
- }
-
-});
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
- setTimeout( clearFxNow, 0 );
- return ( fxNow = jQuery.now() );
-}
-
-function clearFxNow() {
- fxNow = undefined;
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, num ) {
- var obj = {};
-
- jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() {
- obj[ this ] = type;
- });
-
- return obj;
-}
-
-// Generate shortcuts for custom animations
-jQuery.each({
- slideDown: genFx( "show", 1 ),
- slideUp: genFx( "hide", 1 ),
- slideToggle: genFx( "toggle", 1 ),
- fadeIn: { opacity: "show" },
- fadeOut: { opacity: "hide" },
- fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return this.animate( props, speed, easing, callback );
- };
-});
-
-jQuery.extend({
- speed: function( speed, easing, fn ) {
- var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
- complete: fn || !fn && easing ||
- jQuery.isFunction( speed ) && speed,
- duration: speed,
- easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
- };
-
- opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
- opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
-
- // normalize opt.queue - true/undefined/null -> "fx"
- if ( opt.queue == null || opt.queue === true ) {
- opt.queue = "fx";
- }
-
- // Queueing
- opt.old = opt.complete;
-
- opt.complete = function( noUnmark ) {
- if ( jQuery.isFunction( opt.old ) ) {
- opt.old.call( this );
- }
-
- if ( opt.queue ) {
- jQuery.dequeue( this, opt.queue );
- } else if ( noUnmark !== false ) {
- jQuery._unmark( this );
- }
- };
-
- return opt;
- },
-
- easing: {
- linear: function( p, n, firstNum, diff ) {
- return firstNum + diff * p;
- },
- swing: function( p, n, firstNum, diff ) {
- return ( ( -Math.cos( p*Math.PI ) / 2 ) + 0.5 ) * diff + firstNum;
- }
- },
-
- timers: [],
-
- fx: function( elem, options, prop ) {
- this.options = options;
- this.elem = elem;
- this.prop = prop;
-
- options.orig = options.orig || {};
- }
-
-});
-
-jQuery.fx.prototype = {
- // Simple function for setting a style value
- update: function() {
- if ( this.options.step ) {
- this.options.step.call( this.elem, this.now, this );
- }
-
- ( jQuery.fx.step[ this.prop ] || jQuery.fx.step._default )( this );
- },
-
- // Get the current size
- cur: function() {
- if ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) {
- return this.elem[ this.prop ];
- }
-
- var parsed,
- r = jQuery.css( this.elem, this.prop );
- // Empty strings, null, undefined and "auto" are converted to 0,
- // complex values such as "rotate(1rad)" are returned as is,
- // simple values such as "10px" are parsed to Float.
- return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
- },
-
- // Start an animation from one number to another
- custom: function( from, to, unit ) {
- var self = this,
- fx = jQuery.fx;
-
- this.startTime = fxNow || createFxNow();
- this.end = to;
- this.now = this.start = from;
- this.pos = this.state = 0;
- this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
-
- function t( gotoEnd ) {
- return self.step( gotoEnd );
- }
-
- t.queue = this.options.queue;
- t.elem = this.elem;
- t.saveState = function() {
- if ( self.options.hide && jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) {
- jQuery._data( self.elem, "fxshow" + self.prop, self.start );
- }
- };
-
- if ( t() && jQuery.timers.push(t) && !timerId ) {
- timerId = setInterval( fx.tick, fx.interval );
- }
- },
-
- // Simple 'show' function
- show: function() {
- var dataShow = jQuery._data( this.elem, "fxshow" + this.prop );
-
- // Remember where we started, so that we can go back to it later
- this.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop );
- this.options.show = true;
-
- // Begin the animation
- // Make sure that we start at a small width/height to avoid any flash of content
- if ( dataShow !== undefined ) {
- // This show is picking up where a previous hide or show left off
- this.custom( this.cur(), dataShow );
- } else {
- this.custom( this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur() );
- }
-
- // Start by showing the element
- jQuery( this.elem ).show();
- },
-
- // Simple 'hide' function
- hide: function() {
- // Remember where we started, so that we can go back to it later
- this.options.orig[ this.prop ] = jQuery._data( this.elem, "fxshow" + this.prop ) || jQuery.style( this.elem, this.prop );
- this.options.hide = true;
-
- // Begin the animation
- this.custom( this.cur(), 0 );
- },
-
- // Each step of an animation
- step: function( gotoEnd ) {
- var p, n, complete,
- t = fxNow || createFxNow(),
- done = true,
- elem = this.elem,
- options = this.options;
-
- if ( gotoEnd || t >= options.duration + this.startTime ) {
- this.now = this.end;
- this.pos = this.state = 1;
- this.update();
-
- options.animatedProperties[ this.prop ] = true;
-
- for ( p in options.animatedProperties ) {
- if ( options.animatedProperties[ p ] !== true ) {
- done = false;
- }
- }
-
- if ( done ) {
- // Reset the overflow
- if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
-
- jQuery.each( [ "", "X", "Y" ], function( index, value ) {
- elem.style[ "overflow" + value ] = options.overflow[ index ];
- });
- }
-
- // Hide the element if the "hide" operation was done
- if ( options.hide ) {
- jQuery( elem ).hide();
- }
-
- // Reset the properties, if the item has been hidden or shown
- if ( options.hide || options.show ) {
- for ( p in options.animatedProperties ) {
- jQuery.style( elem, p, options.orig[ p ] );
- jQuery.removeData( elem, "fxshow" + p, true );
- // Toggle data is no longer needed
- jQuery.removeData( elem, "toggle" + p, true );
- }
- }
-
- // Execute the complete function
- // in the event that the complete function throws an exception
- // we must ensure it won't be called twice. #5684
-
- complete = options.complete;
- if ( complete ) {
-
- options.complete = false;
- complete.call( elem );
- }
- }
-
- return false;
-
- } else {
- // classical easing cannot be used with an Infinity duration
- if ( options.duration == Infinity ) {
- this.now = t;
- } else {
- n = t - this.startTime;
- this.state = n / options.duration;
-
- // Perform the easing function, defaults to swing
- this.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration );
- this.now = this.start + ( (this.end - this.start) * this.pos );
- }
- // Perform the next step of the animation
- this.update();
- }
-
- return true;
- }
-};
-
-jQuery.extend( jQuery.fx, {
- tick: function() {
- var timer,
- timers = jQuery.timers,
- i = 0;
-
- for ( ; i < timers.length; i++ ) {
- timer = timers[ i ];
- // Checks the timer has not already been removed
- if ( !timer() && timers[ i ] === timer ) {
- timers.splice( i--, 1 );
- }
- }
-
- if ( !timers.length ) {
- jQuery.fx.stop();
- }
- },
-
- interval: 13,
-
- stop: function() {
- clearInterval( timerId );
- timerId = null;
- },
-
- speeds: {
- slow: 600,
- fast: 200,
- // Default speed
- _default: 400
- },
-
- step: {
- opacity: function( fx ) {
- jQuery.style( fx.elem, "opacity", fx.now );
- },
-
- _default: function( fx ) {
- if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
- fx.elem.style[ fx.prop ] = fx.now + fx.unit;
- } else {
- fx.elem[ fx.prop ] = fx.now;
- }
- }
- }
-});
-
-// Adds width/height step functions
-// Do not set anything below 0
-jQuery.each([ "width", "height" ], function( i, prop ) {
- jQuery.fx.step[ prop ] = function( fx ) {
- jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit );
- };
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
- jQuery.expr.filters.animated = function( elem ) {
- return jQuery.grep(jQuery.timers, function( fn ) {
- return elem === fn.elem;
- }).length;
- };
-}
-
-// Try to restore the default display value of an element
-function defaultDisplay( nodeName ) {
-
- if ( !elemdisplay[ nodeName ] ) {
-
- var body = document.body,
- elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
- display = elem.css( "display" );
- elem.remove();
-
- // If the simple way fails,
- // get element's real default display by attaching it to a temp iframe
- if ( display === "none" || display === "" ) {
- // No iframe to use yet, so create it
- if ( !iframe ) {
- iframe = document.createElement( "iframe" );
- iframe.frameBorder = iframe.width = iframe.height = 0;
- }
-
- body.appendChild( iframe );
-
- // Create a cacheable copy of the iframe document on first call.
- // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
- // document to it; WebKit & Firefox won't allow reusing the iframe document.
- if ( !iframeDoc || !iframe.createElement ) {
- iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
- iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "<!doctype html>" : "" ) + "<html><body>" );
- iframeDoc.close();
- }
-
- elem = iframeDoc.createElement( nodeName );
-
- iframeDoc.body.appendChild( elem );
-
- display = jQuery.css( elem, "display" );
- body.removeChild( iframe );
- }
-
- // Store the correct default display
- elemdisplay[ nodeName ] = display;
- }
-
- return elemdisplay[ nodeName ];
-}
-
-
-
-
-var rtable = /^t(?:able|d|h)$/i,
- rroot = /^(?:body|html)$/i;
-
-if ( "getBoundingClientRect" in document.documentElement ) {
- jQuery.fn.offset = function( options ) {
- var elem = this[0], box;
-
- if ( options ) {
- return this.each(function( i ) {
- jQuery.offset.setOffset( this, options, i );
- });
- }
-
- if ( !elem || !elem.ownerDocument ) {
- return null;
- }
-
- if ( elem === elem.ownerDocument.body ) {
- return jQuery.offset.bodyOffset( elem );
- }
-
- try {
- box = elem.getBoundingClientRect();
- } catch(e) {}
-
- var doc = elem.ownerDocument,
- docElem = doc.documentElement;
-
- // Make sure we're not dealing with a disconnected DOM node
- if ( !box || !jQuery.contains( docElem, elem ) ) {
- return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
- }
-
- var body = doc.body,
- win = getWindow(doc),
- clientTop = docElem.clientTop || body.clientTop || 0,
- clientLeft = docElem.clientLeft || body.clientLeft || 0,
- scrollTop = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop,
- scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
- top = box.top + scrollTop - clientTop,
- left = box.left + scrollLeft - clientLeft;
-
- return { top: top, left: left };
- };
-
-} else {
- jQuery.fn.offset = function( options ) {
- var elem = this[0];
-
- if ( options ) {
- return this.each(function( i ) {
- jQuery.offset.setOffset( this, options, i );
- });
- }
-
- if ( !elem || !elem.ownerDocument ) {
- return null;
- }
-
- if ( elem === elem.ownerDocument.body ) {
- return jQuery.offset.bodyOffset( elem );
- }
-
- var computedStyle,
- offsetParent = elem.offsetParent,
- prevOffsetParent = elem,
- doc = elem.ownerDocument,
- docElem = doc.documentElement,
- body = doc.body,
- defaultView = doc.defaultView,
- prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
- top = elem.offsetTop,
- left = elem.offsetLeft;
-
- while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
- if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
- break;
- }
-
- computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
- top -= elem.scrollTop;
- left -= elem.scrollLeft;
-
- if ( elem === offsetParent ) {
- top += elem.offsetTop;
- left += elem.offsetLeft;
-
- if ( jQuery.support.doesNotAddBorder && !(jQuery.support.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
- top += parseFloat( computedStyle.borderTopWidth ) || 0;
- left += parseFloat( computedStyle.borderLeftWidth ) || 0;
- }
-
- prevOffsetParent = offsetParent;
- offsetParent = elem.offsetParent;
- }
-
- if ( jQuery.support.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
- top += parseFloat( computedStyle.borderTopWidth ) || 0;
- left += parseFloat( computedStyle.borderLeftWidth ) || 0;
- }
-
- prevComputedStyle = computedStyle;
- }
-
- if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
- top += body.offsetTop;
- left += body.offsetLeft;
- }
-
- if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
- top += Math.max( docElem.scrollTop, body.scrollTop );
- left += Math.max( docElem.scrollLeft, body.scrollLeft );
- }
-
- return { top: top, left: left };
- };
-}
-
-jQuery.offset = {
-
- bodyOffset: function( body ) {
- var top = body.offsetTop,
- left = body.offsetLeft;
-
- if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
- top += parseFloat( jQuery.css(body, "marginTop") ) || 0;
- left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
- }
-
- return { top: top, left: left };
- },
-
- setOffset: function( elem, options, i ) {
- var position = jQuery.css( elem, "position" );
-
- // set position first, in-case top/left are set even on static elem
- if ( position === "static" ) {
- elem.style.position = "relative";
- }
-
- var curElem = jQuery( elem ),
- curOffset = curElem.offset(),
- curCSSTop = jQuery.css( elem, "top" ),
- curCSSLeft = jQuery.css( elem, "left" ),
- calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
- props = {}, curPosition = {}, curTop, curLeft;
-
- // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
- if ( calculatePosition ) {
- curPosition = curElem.position();
- curTop = curPosition.top;
- curLeft = curPosition.left;
- } else {
- curTop = parseFloat( curCSSTop ) || 0;
- curLeft = parseFloat( curCSSLeft ) || 0;
- }
-
- if ( jQuery.isFunction( options ) ) {
- options = options.call( elem, i, curOffset );
- }
-
- if ( options.top != null ) {
- props.top = ( options.top - curOffset.top ) + curTop;
- }
- if ( options.left != null ) {
- props.left = ( options.left - curOffset.left ) + curLeft;
- }
-
- if ( "using" in options ) {
- options.using.call( elem, props );
- } else {
- curElem.css( props );
- }
- }
-};
-
-
-jQuery.fn.extend({
-
- position: function() {
- if ( !this[0] ) {
- return null;
- }
-
- var elem = this[0],
-
- // Get *real* offsetParent
- offsetParent = this.offsetParent(),
-
- // Get correct offsets
- offset = this.offset(),
- parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
-
- // Subtract element margins
- // note: when an element has margin: auto the offsetLeft and marginLeft
- // are the same in Safari causing offset.left to incorrectly be 0
- offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
- offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
-
- // Add offsetParent borders
- parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
- parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
-
- // Subtract the two offsets
- return {
- top: offset.top - parentOffset.top,
- left: offset.left - parentOffset.left
- };
- },
-
- offsetParent: function() {
- return this.map(function() {
- var offsetParent = this.offsetParent || document.body;
- while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
- offsetParent = offsetParent.offsetParent;
- }
- return offsetParent;
- });
- }
-});
-
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( ["Left", "Top"], function( i, name ) {
- var method = "scroll" + name;
-
- jQuery.fn[ method ] = function( val ) {
- var elem, win;
-
- if ( val === undefined ) {
- elem = this[ 0 ];
-
- if ( !elem ) {
- return null;
- }
-
- win = getWindow( elem );
-
- // Return the scroll offset
- return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
- jQuery.support.boxModel && win.document.documentElement[ method ] ||
- win.document.body[ method ] :
- elem[ method ];
- }
-
- // Set the scroll offset
- return this.each(function() {
- win = getWindow( this );
-
- if ( win ) {
- win.scrollTo(
- !i ? val : jQuery( win ).scrollLeft(),
- i ? val : jQuery( win ).scrollTop()
- );
-
- } else {
- this[ method ] = val;
- }
- });
- };
-});
-
-function getWindow( elem ) {
- return jQuery.isWindow( elem ) ?
- elem :
- elem.nodeType === 9 ?
- elem.defaultView || elem.parentWindow :
- false;
-}
-
-
-
-
-// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
-jQuery.each([ "Height", "Width" ], function( i, name ) {
-
- var type = name.toLowerCase();
-
- // innerHeight and innerWidth
- jQuery.fn[ "inner" + name ] = function() {
- var elem = this[0];
- return elem ?
- elem.style ?
- parseFloat( jQuery.css( elem, type, "padding" ) ) :
- this[ type ]() :
- null;
- };
-
- // outerHeight and outerWidth
- jQuery.fn[ "outer" + name ] = function( margin ) {
- var elem = this[0];
- return elem ?
- elem.style ?
- parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
- this[ type ]() :
- null;
- };
-
- jQuery.fn[ type ] = function( size ) {
- // Get window width or height
- var elem = this[0];
- if ( !elem ) {
- return size == null ? null : this;
- }
-
- if ( jQuery.isFunction( size ) ) {
- return this.each(function( i ) {
- var self = jQuery( this );
- self[ type ]( size.call( this, i, self[ type ]() ) );
- });
- }
-
- if ( jQuery.isWindow( elem ) ) {
- // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
- // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
- var docElemProp = elem.document.documentElement[ "client" + name ],
- body = elem.document.body;
- return elem.document.compatMode === "CSS1Compat" && docElemProp ||
- body && body[ "client" + name ] || docElemProp;
-
- // Get document width or height
- } else if ( elem.nodeType === 9 ) {
- // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
- return Math.max(
- elem.documentElement["client" + name],
- elem.body["scroll" + name], elem.documentElement["scroll" + name],
- elem.body["offset" + name], elem.documentElement["offset" + name]
- );
-
- // Get or set width or height on the element
- } else if ( size === undefined ) {
- var orig = jQuery.css( elem, type ),
- ret = parseFloat( orig );
-
- return jQuery.isNumeric( ret ) ? ret : orig;
-
- // Set the width or height on the element (default to pixels if value is unitless)
- } else {
- return this.css( type, typeof size === "string" ? size : size + "px" );
- }
- };
-
-});
-
-
-
-
-// Expose jQuery to the global object
-window.jQuery = window.$ = jQuery;
-
-// Expose jQuery as an AMD module, but only for AMD loaders that
-// understand the issues with loading multiple versions of jQuery
-// in a page that all might call define(). The loader will indicate
-// they have special allowances for multiple jQuery versions by
-// specifying define.amd.jQuery = true. Register as a named module,
-// since jQuery can be concatenated with other files that may use define,
-// but not use a proper concatenation script that understands anonymous
-// AMD modules. A named AMD is safest and most robust way to register.
-// Lowercase jquery is used because AMD module names are derived from
-// file names, and jQuery is normally delivered in a lowercase file name.
-// Do this after creating the global so that if an AMD module wants to call
-// noConflict to hide this version of jQuery, it will work.
-if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
- define( "jquery", [], function () { return jQuery; } );
-}
-
-
-
-})( window );
diff --git a/library/jslider/js/jquery.dependClass-0.1.js b/library/jslider/js/jquery.dependClass-0.1.js
deleted file mode 100644
index 2636f6673..000000000
--- a/library/jslider/js/jquery.dependClass-0.1.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * jquery.dependClass - Attach class based on first class in list of current element
- *
- * Written by
- * Egor Khmelev (hmelyoff@gmail.com)
- *
- * Licensed under the MIT (MIT-LICENSE.txt).
- *
- * @author Egor Khmelev
- * @version 0.1.0-BETA ($Id$)
- *
- **/
-
-(function($) {
- $.baseClass = function(obj){
- obj = $(obj);
- return obj.get(0).className.match(/([^ ]+)/)[1];
- };
-
- $.fn.addDependClass = function(className, delimiter){
- var options = {
- delimiter: delimiter ? delimiter : '-'
- }
- return this.each(function(){
- var baseClass = $.baseClass(this);
- if(baseClass)
- $(this).addClass(baseClass + options.delimiter + className);
- });
- };
-
- $.fn.removeDependClass = function(className, delimiter){
- var options = {
- delimiter: delimiter ? delimiter : '-'
- }
- return this.each(function(){
- var baseClass = $.baseClass(this);
- if(baseClass)
- $(this).removeClass(baseClass + options.delimiter + className);
- });
- };
-
- $.fn.toggleDependClass = function(className, delimiter){
- var options = {
- delimiter: delimiter ? delimiter : '-'
- }
- return this.each(function(){
- var baseClass = $.baseClass(this);
- if(baseClass)
- if($(this).is("." + baseClass + options.delimiter + className))
- $(this).removeClass(baseClass + options.delimiter + className);
- else
- $(this).addClass(baseClass + options.delimiter + className);
- });
- };
-
-})(jQuery); \ No newline at end of file
diff --git a/library/jslider/js/jquery.numberformatter-1.2.3.js b/library/jslider/js/jquery.numberformatter-1.2.3.js
deleted file mode 100644
index 213db297a..000000000
--- a/library/jslider/js/jquery.numberformatter-1.2.3.js
+++ /dev/null
@@ -1,510 +0,0 @@
-/**
- * jquery.numberformatter - Formatting/Parsing Numbers in jQuery
- *
- * Written by
- * Michael Abernethy (mike@abernethysoft.com),
- * Andrew Parry (aparry0@gmail.com)
- *
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
- *
- * @author Michael Abernethy, Andrew Parry
- * @version 1.2.3-SNAPSHOT ($Id$)
- *
- * Dependencies
- *
- * jQuery (http://jquery.com)
- * jshashtable (http://www.timdown.co.uk/jshashtable)
- *
- * Notes & Thanks
- *
- * many thanks to advweb.nanasi.jp for his bug fixes
- * jsHashtable is now used also, so thanks to the author for that excellent little class.
- *
- * This plugin can be used to format numbers as text and parse text as Numbers
- * Because we live in an international world, we cannot assume that everyone
- * uses "," to divide thousands, and "." as a decimal point.
- *
- * As of 1.2 the way this plugin works has changed slightly, parsing text to a number
- * has 1 set of functions, formatting a number to text has it's own. Before things
- * were a little confusing, so I wanted to separate the 2 out more.
- *
- *
- * jQuery extension functions:
- *
- * formatNumber(options, writeBack, giveReturnValue) - Reads the value from the subject, parses to
- * a Javascript Number object, then formats back to text using the passed options and write back to
- * the subject.
- *
- * parseNumber(options) - Parses the value in the subject to a Number object using the passed options
- * to decipher the actual number from the text, then writes the value as text back to the subject.
- *
- *
- * Generic functions:
- *
- * formatNumber(numberString, options) - Takes a plain number as a string (e.g. '1002.0123') and returns
- * a string of the given format options.
- *
- * parseNumber(numberString, options) - Takes a number as text that is formatted the same as the given
- * options then and returns it as a plain Number object.
- *
- * To achieve the old way of combining parsing and formatting to keep say a input field always formatted
- * to a given format after it has lost focus you'd simply use a combination of the functions.
- *
- * e.g.
- * $("#salary").blur(function(){
- * $(this).parseNumber({format:"#,###.00", locale:"us"});
- * $(this).formatNumber({format:"#,###.00", locale:"us"});
- * });
- *
- * The syntax for the formatting is:
- * 0 = Digit
- * # = Digit, zero shows as absent
- * . = Decimal separator
- * - = Negative sign
- * , = Grouping Separator
- * % = Percent (multiplies the number by 100)
- *
- * For example, a format of "#,###.00" and text of 4500.20 will
- * display as "4.500,20" with a locale of "de", and "4,500.20" with a locale of "us"
- *
- *
- * As of now, the only acceptable locales are
- * Arab Emirates -> "ae"
- * Australia -> "au"
- * Austria -> "at"
- * Brazil -> "br"
- * Canada -> "ca"
- * China -> "cn"
- * Czech -> "cz"
- * Denmark -> "dk"
- * Egypt -> "eg"
- * Finland -> "fi"
- * France -> "fr"
- * Germany -> "de"
- * Greece -> "gr"
- * Great Britain -> "gb"
- * Hong Kong -> "hk"
- * India -> "in"
- * Israel -> "il"
- * Japan -> "jp"
- * Russia -> "ru"
- * South Korea -> "kr"
- * Spain -> "es"
- * Sweden -> "se"
- * Switzerland -> "ch"
- * Taiwan -> "tw"
- * Thailand -> "th"
- * United States -> "us"
- * Vietnam -> "vn"
- **/
-
-(function(jQuery) {
-
- var nfLocales = new Hashtable();
-
- var nfLocalesLikeUS = [ 'ae','au','ca','cn','eg','gb','hk','il','in','jp','sk','th','tw','us' ];
- var nfLocalesLikeDE = [ 'at','br','de','dk','es','gr','it','nl','pt','tr','vn' ];
- var nfLocalesLikeFR = [ 'cz','fi','fr','ru','se','pl' ];
- var nfLocalesLikeCH = [ 'ch' ];
-
- var nfLocaleFormatting = [ [".", ","], [",", "."], [",", " "], [".", "'"] ];
- var nfAllLocales = [ nfLocalesLikeUS, nfLocalesLikeDE, nfLocalesLikeFR, nfLocalesLikeCH ]
-
- function FormatData(dec, group, neg) {
- this.dec = dec;
- this.group = group;
- this.neg = neg;
- };
-
- function init() {
- // write the arrays into the hashtable
- for (var localeGroupIdx = 0; localeGroupIdx < nfAllLocales.length; localeGroupIdx++) {
- localeGroup = nfAllLocales[localeGroupIdx];
- for (var i = 0; i < localeGroup.length; i++) {
- nfLocales.put(localeGroup[i], localeGroupIdx);
- }
- }
- };
-
- function formatCodes(locale, isFullLocale) {
- if (nfLocales.size() == 0)
- init();
-
- // default values
- var dec = ".";
- var group = ",";
- var neg = "-";
-
- if (isFullLocale == false) {
- // Extract and convert to lower-case any language code from a real 'locale' formatted string, if not use as-is
- // (To prevent locale format like : "fr_FR", "en_US", "de_DE", "fr_FR", "en-US", "de-DE")
- if (locale.indexOf('_') != -1)
- locale = locale.split('_')[1].toLowerCase();
- else if (locale.indexOf('-') != -1)
- locale = locale.split('-')[1].toLowerCase();
- }
-
- // hashtable lookup to match locale with codes
- var codesIndex = nfLocales.get(locale);
- if (codesIndex) {
- var codes = nfLocaleFormatting[codesIndex];
- if (codes) {
- dec = codes[0];
- group = codes[1];
- }
- }
- return new FormatData(dec, group, neg);
- };
-
-
- /* Formatting Methods */
-
-
- /**
- * Formats anything containing a number in standard js number notation.
- *
- * @param {Object} options The formatting options to use
- * @param {Boolean} writeBack (true) If the output value should be written back to the subject
- * @param {Boolean} giveReturnValue (true) If the function should return the output string
- */
- jQuery.fn.formatNumber = function(options, writeBack, giveReturnValue) {
-
- return this.each(function() {
- // enforce defaults
- if (writeBack == null)
- writeBack = true;
- if (giveReturnValue == null)
- giveReturnValue = true;
-
- // get text
- var text;
- if (jQuery(this).is(":input"))
- text = new String(jQuery(this).val());
- else
- text = new String(jQuery(this).text());
-
- // format
- var returnString = jQuery.formatNumber(text, options);
-
- // set formatted string back, only if a success
-// if (returnString) {
- if (writeBack) {
- if (jQuery(this).is(":input"))
- jQuery(this).val(returnString);
- else
- jQuery(this).text(returnString);
- }
- if (giveReturnValue)
- return returnString;
-// }
-// return '';
- });
- };
-
- /**
- * First parses a string and reformats it with the given options.
- *
- * @param {Object} numberString
- * @param {Object} options
- */
- jQuery.formatNumber = function(numberString, options){
- var options = jQuery.extend({}, jQuery.fn.formatNumber.defaults, options);
- var formatData = formatCodes(options.locale.toLowerCase(), options.isFullLocale);
-
- var dec = formatData.dec;
- var group = formatData.group;
- var neg = formatData.neg;
-
- var validFormat = "0#-,.";
-
- // strip all the invalid characters at the beginning and the end
- // of the format, and we'll stick them back on at the end
- // make a special case for the negative sign "-" though, so
- // we can have formats like -$23.32
- var prefix = "";
- var negativeInFront = false;
- for (var i = 0; i < options.format.length; i++) {
- if (validFormat.indexOf(options.format.charAt(i)) == -1)
- prefix = prefix + options.format.charAt(i);
- else
- if (i == 0 && options.format.charAt(i) == '-') {
- negativeInFront = true;
- continue;
- }
- else
- break;
- }
- var suffix = "";
- for (var i = options.format.length - 1; i >= 0; i--) {
- if (validFormat.indexOf(options.format.charAt(i)) == -1)
- suffix = options.format.charAt(i) + suffix;
- else
- break;
- }
-
- options.format = options.format.substring(prefix.length);
- options.format = options.format.substring(0, options.format.length - suffix.length);
-
- // now we need to convert it into a number
- //while (numberString.indexOf(group) > -1)
- // numberString = numberString.replace(group, '');
- //var number = new Number(numberString.replace(dec, ".").replace(neg, "-"));
- var number = new Number(numberString);
-
- return jQuery._formatNumber(number, options, suffix, prefix, negativeInFront);
- };
-
- /**
- * Formats a Number object into a string, using the given formatting options
- *
- * @param {Object} numberString
- * @param {Object} options
- */
- jQuery._formatNumber = function(number, options, suffix, prefix, negativeInFront) {
- var options = jQuery.extend({}, jQuery.fn.formatNumber.defaults, options);
- var formatData = formatCodes(options.locale.toLowerCase(), options.isFullLocale);
-
- var dec = formatData.dec;
- var group = formatData.group;
- var neg = formatData.neg;
-
- var forcedToZero = false;
- if (isNaN(number)) {
- if (options.nanForceZero == true) {
- number = 0;
- forcedToZero = true;
- } else
- return null;
- }
-
- // special case for percentages
- if (suffix == "%")
- number = number * 100;
-
- var returnString = "";
- if (options.format.indexOf(".") > -1) {
- var decimalPortion = dec;
- var decimalFormat = options.format.substring(options.format.lastIndexOf(".") + 1);
-
- // round or truncate number as needed
- if (options.round == true)
- number = new Number(number.toFixed(decimalFormat.length));
- else {
- var numStr = number.toString();
- numStr = numStr.substring(0, numStr.lastIndexOf('.') + decimalFormat.length + 1);
- number = new Number(numStr);
- }
-
- var decimalValue = number % 1;
- var decimalString = new String(decimalValue.toFixed(decimalFormat.length));
- decimalString = decimalString.substring(decimalString.lastIndexOf(".") + 1);
-
- for (var i = 0; i < decimalFormat.length; i++) {
- if (decimalFormat.charAt(i) == '#' && decimalString.charAt(i) != '0') {
- decimalPortion += decimalString.charAt(i);
- continue;
- } else if (decimalFormat.charAt(i) == '#' && decimalString.charAt(i) == '0') {
- var notParsed = decimalString.substring(i);
- if (notParsed.match('[1-9]')) {
- decimalPortion += decimalString.charAt(i);
- continue;
- } else
- break;
- } else if (decimalFormat.charAt(i) == "0")
- decimalPortion += decimalString.charAt(i);
- }
- returnString += decimalPortion
- } else
- number = Math.round(number);
-
- var ones = Math.floor(number);
- if (number < 0)
- ones = Math.ceil(number);
-
- var onesFormat = "";
- if (options.format.indexOf(".") == -1)
- onesFormat = options.format;
- else
- onesFormat = options.format.substring(0, options.format.indexOf("."));
-
- var onePortion = "";
- if (!(ones == 0 && onesFormat.substr(onesFormat.length - 1) == '#') || forcedToZero) {
- // find how many digits are in the group
- var oneText = new String(Math.abs(ones));
- var groupLength = 9999;
- if (onesFormat.lastIndexOf(",") != -1)
- groupLength = onesFormat.length - onesFormat.lastIndexOf(",") - 1;
- var groupCount = 0;
- for (var i = oneText.length - 1; i > -1; i--) {
- onePortion = oneText.charAt(i) + onePortion;
- groupCount++;
- if (groupCount == groupLength && i != 0) {
- onePortion = group + onePortion;
- groupCount = 0;
- }
- }
-
- // account for any pre-data padding
- if (onesFormat.length > onePortion.length) {
- var padStart = onesFormat.indexOf('0');
- if (padStart != -1) {
- var padLen = onesFormat.length - padStart;
-
- // pad to left with 0's or group char
- var pos = onesFormat.length - onePortion.length - 1;
- while (onePortion.length < padLen) {
- var padChar = onesFormat.charAt(pos);
- // replace with real group char if needed
- if (padChar == ',')
- padChar = group;
- onePortion = padChar + onePortion;
- pos--;
- }
- }
- }
- }
-
- if (!onePortion && onesFormat.indexOf('0', onesFormat.length - 1) !== -1)
- onePortion = '0';
-
- returnString = onePortion + returnString;
-
- // handle special case where negative is in front of the invalid characters
- if (number < 0 && negativeInFront && prefix.length > 0)
- prefix = neg + prefix;
- else if (number < 0)
- returnString = neg + returnString;
-
- if (!options.decimalSeparatorAlwaysShown) {
- if (returnString.lastIndexOf(dec) == returnString.length - 1) {
- returnString = returnString.substring(0, returnString.length - 1);
- }
- }
- returnString = prefix + returnString + suffix;
- return returnString;
- };
-
-
- /* Parsing Methods */
-
-
- /**
- * Parses a number of given format from the element and returns a Number object.
- * @param {Object} options
- */
- jQuery.fn.parseNumber = function(options, writeBack, giveReturnValue) {
- // enforce defaults
- if (writeBack == null)
- writeBack = true;
- if (giveReturnValue == null)
- giveReturnValue = true;
-
- // get text
- var text;
- if (jQuery(this).is(":input"))
- text = new String(jQuery(this).val());
- else
- text = new String(jQuery(this).text());
-
- // parse text
- var number = jQuery.parseNumber(text, options);
-
- if (number) {
- if (writeBack) {
- if (jQuery(this).is(":input"))
- jQuery(this).val(number.toString());
- else
- jQuery(this).text(number.toString());
- }
- if (giveReturnValue)
- return number;
- }
- };
-
- /**
- * Parses a string of given format into a Number object.
- *
- * @param {Object} string
- * @param {Object} options
- */
- jQuery.parseNumber = function(numberString, options) {
- var options = jQuery.extend({}, jQuery.fn.parseNumber.defaults, options);
- var formatData = formatCodes(options.locale.toLowerCase(), options.isFullLocale);
-
- var dec = formatData.dec;
- var group = formatData.group;
- var neg = formatData.neg;
-
- var valid = "1234567890.-";
-
- // now we need to convert it into a number
- while (numberString.indexOf(group)>-1)
- numberString = numberString.replace(group,'');
- numberString = numberString.replace(dec,".").replace(neg,"-");
- var validText = "";
- var hasPercent = false;
- if (numberString.charAt(numberString.length - 1) == "%" || options.isPercentage == true)
- hasPercent = true;
- for (var i=0; i<numberString.length; i++) {
- if (valid.indexOf(numberString.charAt(i))>-1)
- validText = validText + numberString.charAt(i);
- }
- var number = new Number(validText);
- if (hasPercent) {
- number = number / 100;
- var decimalPos = validText.indexOf('.');
- if (decimalPos != -1) {
- var decimalPoints = validText.length - decimalPos - 1;
- number = number.toFixed(decimalPoints + 2);
- } else {
- number = number.toFixed(validText.length - 1);
- }
- }
-
- return number;
- };
-
- jQuery.fn.parseNumber.defaults = {
- locale: "us",
- decimalSeparatorAlwaysShown: false,
- isPercentage: false,
- isFullLocale: false
- };
-
- jQuery.fn.formatNumber.defaults = {
- format: "#,###.00",
- locale: "us",
- decimalSeparatorAlwaysShown: false,
- nanForceZero: true,
- round: true,
- isFullLocale: false
- };
-
- Number.prototype.toFixed = function(precision) {
- return jQuery._roundNumber(this, precision);
- };
-
- jQuery._roundNumber = function(number, decimalPlaces) {
- var power = Math.pow(10, decimalPlaces || 0);
- var value = String(Math.round(number * power) / power);
-
- // ensure the decimal places are there
- if (decimalPlaces > 0) {
- var dp = value.indexOf(".");
- if (dp == -1) {
- value += '.';
- dp = 0;
- } else {
- dp = value.length - (dp + 1);
- }
-
- while (dp < decimalPlaces) {
- value += '0';
- dp++;
- }
- }
- return value;
- };
-
- })(jQuery); \ No newline at end of file
diff --git a/library/jslider/js/jquery.slider.js b/library/jslider/js/jquery.slider.js
deleted file mode 100644
index 6d903775f..000000000
--- a/library/jslider/js/jquery.slider.js
+++ /dev/null
@@ -1,700 +0,0 @@
-/**
- * jquery.slider - Slider ui control in jQuery
- *
- * Written by
- * Egor Khmelev (hmelyoff@gmail.com)
- *
- * Licensed under the MIT (MIT-LICENSE.txt).
- *
- * @author Egor Khmelev
- * @version 1.1.0-RELEASE ($Id$)
- *
- * Dependencies
- *
- * jQuery (http://jquery.com)
- * jquery.numberformatter (http://code.google.com/p/jquery-numberformatter/)
- * tmpl (http://ejohn.org/blog/javascript-micro-templating/)
- * jquery.dependClass
- * draggable
- *
- **/
-
-(function( $ ) {
-
- function isArray( value ){
- if( typeof value == "undefined" ) return false;
-
- if (value instanceof Array || (!(value instanceof Object) &&
- (Object.prototype.toString.call((value)) == '[object Array]') ||
- typeof value.length == 'number' &&
- typeof value.splice != 'undefined' &&
- typeof value.propertyIsEnumerable != 'undefined' &&
- !value.propertyIsEnumerable('splice')
- )) {
- return true;
- }
-
- return false;
- }
-
- $.slider = function( node, settings ){
- var jNode = $(node);
- if( !jNode.data( "jslider" ) )
- jNode.data( "jslider", new jSlider( node, settings ) );
-
- return jNode.data( "jslider" );
- };
-
- $.fn.slider = function( action, opt_value ){
- var returnValue, args = arguments;
-
- function isDef( val ){
- return val !== undefined;
- };
-
- function isDefAndNotNull( val ){
- return val != null;
- };
-
- this.each(function(){
- var self = $.slider( this, action );
-
- // do actions
- if( typeof action == "string" ){
- switch( action ){
- case "value":
- if( isDef( args[ 1 ] ) && isDef( args[ 2 ] ) ){
- var pointers = self.getPointers();
- if( isDefAndNotNull( pointers[0] ) && isDefAndNotNull( args[1] ) ){
- pointers[0].set( args[ 1 ] );
- pointers[0].setIndexOver();
- }
-
- if( isDefAndNotNull( pointers[1] ) && isDefAndNotNull( args[2] ) ){
- pointers[1].set( args[ 2 ] );
- pointers[1].setIndexOver();
- }
- }
-
- else if( isDef( args[ 1 ] ) ){
- var pointers = self.getPointers();
- if( isDefAndNotNull( pointers[0] ) && isDefAndNotNull( args[1] ) ){
- pointers[0].set( args[ 1 ] );
- pointers[0].setIndexOver();
- }
- }
-
- else
- returnValue = self.getValue();
-
- break;
-
- case "prc":
- if( isDef( args[ 1 ] ) && isDef( args[ 2 ] ) ){
- var pointers = self.getPointers();
- if( isDefAndNotNull( pointers[0] ) && isDefAndNotNull( args[1] ) ){
- pointers[0]._set( args[ 1 ] );
- pointers[0].setIndexOver();
- }
-
- if( isDefAndNotNull( pointers[1] ) && isDefAndNotNull( args[2] ) ){
- pointers[1]._set( args[ 2 ] );
- pointers[1].setIndexOver();
- }
- }
-
- else if( isDef( args[ 1 ] ) ){
- var pointers = self.getPointers();
- if( isDefAndNotNull( pointers[0] ) && isDefAndNotNull( args[1] ) ){
- pointers[0]._set( args[ 1 ] );
- pointers[0].setIndexOver();
- }
- }
-
- else
- returnValue = self.getPrcValue();
-
- break;
-
- case "calculatedValue":
- var value = self.getValue().split(";");
- returnValue = "";
- for (var i=0; i < value.length; i++) {
- returnValue += (i > 0 ? ";" : "") + self.nice( value[i] );
- };
-
- break;
-
- case "skin":
- self.setSkin( args[1] );
-
- break;
- };
-
- }
-
- // return actual object
- else if( !action && !opt_value ){
- if( !isArray( returnValue ) )
- returnValue = [];
-
- returnValue.push( self );
- }
- });
-
- // flatten array just with one slider
- if( isArray( returnValue ) && returnValue.length == 1 )
- returnValue = returnValue[ 0 ];
-
- return returnValue || this;
- };
-
- var OPTIONS = {
-
- settings: {
- from: 1,
- to: 10,
- step: 1,
- smooth: true,
- limits: true,
- round: 0,
- format: { format: "#,##0.##" },
- value: "5;7",
- dimension: ""
- },
-
- className: "jslider",
- selector: ".jslider-",
-
- template: tmpl(
- '<span class="<%=className%>">' +
- '<table><tr><td>' +
- '<div class="<%=className%>-bg">' +
- '<i class="l"></i><i class="r"></i>' +
- '<i class="v"></i>' +
- '</div>' +
-
- '<div class="<%=className%>-pointer"></div>' +
- '<div class="<%=className%>-pointer <%=className%>-pointer-to"></div>' +
-
- '<div class="<%=className%>-label"><span><%=settings.from%></span></div>' +
- '<div class="<%=className%>-label <%=className%>-label-to"><span><%=settings.to%></span><%=settings.dimension%></div>' +
-
- '<div class="<%=className%>-value"><span></span><%=settings.dimension%></div>' +
- '<div class="<%=className%>-value <%=className%>-value-to"><span></span><%=settings.dimension%></div>' +
-
- '<div class="<%=className%>-scale"><%=scale%></div>'+
-
- '</td></tr></table>' +
- '</span>'
- )
-
- };
-
- function jSlider(){
- return this.init.apply( this, arguments );
- };
-
- jSlider.prototype.init = function( node, settings ){
- this.settings = $.extend(true, {}, OPTIONS.settings, settings ? settings : {});
-
- // obj.sliderHandler = this;
- this.inputNode = $( node ).hide();
-
- this.settings.interval = this.settings.to-this.settings.from;
- this.settings.value = this.inputNode.attr("value");
-
- if( this.settings.calculate && $.isFunction( this.settings.calculate ) )
- this.nice = this.settings.calculate;
-
- if( this.settings.onstatechange && $.isFunction( this.settings.onstatechange ) )
- this.onstatechange = this.settings.onstatechange;
-
- this.is = {
- init: false
- };
- this.o = {};
-
- this.create();
- };
-
- jSlider.prototype.onstatechange = function(){
-
- };
-
- jSlider.prototype.create = function(){
- var $this = this;
-
- this.domNode = $( OPTIONS.template({
- className: OPTIONS.className,
- settings: {
- from: this.nice( this.settings.from ),
- to: this.nice( this.settings.to ),
- dimension: this.settings.dimension
- },
- scale: this.generateScale()
- }) );
-
- this.inputNode.after( this.domNode );
- this.drawScale();
-
- // set skin class
- if( this.settings.skin && this.settings.skin.length > 0 )
- this.setSkin( this.settings.skin );
-
- this.sizes = {
- domWidth: this.domNode.width(),
- domOffset: this.domNode.offset()
- };
-
- // find some objects
- $.extend(this.o, {
- pointers: {},
- labels: {
- 0: {
- o: this.domNode.find(OPTIONS.selector + "value").not(OPTIONS.selector + "value-to")
- },
- 1: {
- o: this.domNode.find(OPTIONS.selector + "value").filter(OPTIONS.selector + "value-to")
- }
- },
- limits: {
- 0: this.domNode.find(OPTIONS.selector + "label").not(OPTIONS.selector + "label-to"),
- 1: this.domNode.find(OPTIONS.selector + "label").filter(OPTIONS.selector + "label-to")
- }
- });
-
- $.extend(this.o.labels[0], {
- value: this.o.labels[0].o.find("span")
- });
-
- $.extend(this.o.labels[1], {
- value: this.o.labels[1].o.find("span")
- });
-
-
- if( !$this.settings.value.split(";")[1] ){
- this.settings.single = true;
- this.domNode.addDependClass("single");
- }
-
- if( !$this.settings.limits )
- this.domNode.addDependClass("limitless");
-
- this.domNode.find(OPTIONS.selector + "pointer").each(function( i ){
- var value = $this.settings.value.split(";")[i];
- if( value ){
- $this.o.pointers[i] = new jSliderPointer( this, i, $this );
-
- var prev = $this.settings.value.split(";")[i-1];
- if( prev && new Number(value) < new Number(prev) ) value = prev;
-
- value = value < $this.settings.from ? $this.settings.from : value;
- value = value > $this.settings.to ? $this.settings.to : value;
-
- $this.o.pointers[i].set( value, true );
- }
- });
-
- this.o.value = this.domNode.find(".v");
- this.is.init = true;
-
- $.each(this.o.pointers, function(i){
- $this.redraw(this);
- });
-
- (function(self){
- $(window).resize(function(){
- self.onresize();
- });
- })(this);
-
- };
-
- jSlider.prototype.setSkin = function( skin ){
- if( this.skin_ )
- this.domNode.removeDependClass( this.skin_, "_" );
-
- this.domNode.addDependClass( this.skin_ = skin, "_" );
- };
-
- jSlider.prototype.setPointersIndex = function( i ){
- $.each(this.getPointers(), function(i){
- this.index( i );
- });
- };
-
- jSlider.prototype.getPointers = function(){
- return this.o.pointers;
- };
-
- jSlider.prototype.generateScale = function(){
- if( this.settings.scale && this.settings.scale.length > 0 ){
- var str = "";
- var s = this.settings.scale;
- var prc = Math.round((100/(s.length-1))*10)/10;
- for( var i=0; i < s.length; i++ ){
- str += '<span style="left: ' + i*prc + '%">' + ( s[i] != '|' ? '<ins>' + s[i] + '</ins>' : '' ) + '</span>';
- };
- return str;
- } else return "";
-
- return "";
- };
-
- jSlider.prototype.drawScale = function(){
- this.domNode.find(OPTIONS.selector + "scale span ins").each(function(){
- $(this).css({ marginLeft: -$(this).outerWidth()/2 });
- });
- };
-
- jSlider.prototype.onresize = function(){
- var self = this;
- this.sizes = {
- domWidth: this.domNode.width(),
- domOffset: this.domNode.offset()
- };
-
- $.each(this.o.pointers, function(i){
- self.redraw(this);
- });
- };
-
- jSlider.prototype.update = function(){
- this.onresize();
- this.drawScale();
- };
-
- jSlider.prototype.limits = function( x, pointer ){
- // smooth
- if( !this.settings.smooth ){
- var step = this.settings.step*100 / ( this.settings.interval );
- x = Math.round( x/step ) * step;
- }
-
- var another = this.o.pointers[1-pointer.uid];
- if( another && pointer.uid && x < another.value.prc ) x = another.value.prc;
- if( another && !pointer.uid && x > another.value.prc ) x = another.value.prc;
-
- // base limit
- if( x < 0 ) x = 0;
- if( x > 100 ) x = 100;
-
- return Math.round( x*10 ) / 10;
- };
-
- jSlider.prototype.redraw = function( pointer ){
- if( !this.is.init ) return false;
-
- this.setValue();
-
- // redraw range line
- if( this.o.pointers[0] && this.o.pointers[1] )
- this.o.value.css({ left: this.o.pointers[0].value.prc + "%", width: ( this.o.pointers[1].value.prc - this.o.pointers[0].value.prc ) + "%" });
-
- this.o.labels[pointer.uid].value.html(
- this.nice(
- pointer.value.origin
- )
- );
-
- // redraw position of labels
- this.redrawLabels( pointer );
-
- };
-
- jSlider.prototype.redrawLabels = function( pointer ){
-
- function setPosition( label, sizes, prc ){
- sizes.margin = -sizes.label/2;
-
- // left limit
- label_left = sizes.border + sizes.margin;
- if( label_left < 0 )
- sizes.margin -= label_left;
-
- // right limit
- if( sizes.border+sizes.label / 2 > self.sizes.domWidth ){
- sizes.margin = 0;
- sizes.right = true;
- } else
- sizes.right = false;
-
- label.o.css({ left: prc + "%", marginLeft: sizes.margin, right: "auto" });
- if( sizes.right ) label.o.css({ left: "auto", right: 0 });
- return sizes;
- }
-
- var self = this;
- var label = this.o.labels[pointer.uid];
- var prc = pointer.value.prc;
-
- var sizes = {
- label: label.o.outerWidth(),
- right: false,
- border: ( prc * this.sizes.domWidth ) / 100
- };
-
- if( !this.settings.single ){
- // glue if near;
- var another = this.o.pointers[1-pointer.uid];
- var another_label = this.o.labels[another.uid];
-
- switch( pointer.uid ){
- case 0:
- if( sizes.border+sizes.label / 2 > another_label.o.offset().left-this.sizes.domOffset.left ){
- another_label.o.css({ visibility: "hidden" });
- another_label.value.html( this.nice( another.value.origin ) );
-
- label.o.css({ visibility: "visible" });
-
- prc = ( another.value.prc - prc ) / 2 + prc;
- if( another.value.prc != pointer.value.prc ){
- label.value.html( this.nice(pointer.value.origin) + "&nbsp;&ndash;&nbsp;" + this.nice(another.value.origin) );
- sizes.label = label.o.outerWidth();
- sizes.border = ( prc * this.sizes.domWidth ) / 100;
- }
- } else {
- another_label.o.css({ visibility: "visible" });
- }
- break;
-
- case 1:
- if( sizes.border - sizes.label / 2 < another_label.o.offset().left - this.sizes.domOffset.left + another_label.o.outerWidth() ){
- another_label.o.css({ visibility: "hidden" });
- another_label.value.html( this.nice(another.value.origin) );
-
- label.o.css({ visibility: "visible" });
-
- prc = ( prc - another.value.prc ) / 2 + another.value.prc;
- if( another.value.prc != pointer.value.prc ){
- label.value.html( this.nice(another.value.origin) + "&nbsp;&ndash;&nbsp;" + this.nice(pointer.value.origin) );
- sizes.label = label.o.outerWidth();
- sizes.border = ( prc * this.sizes.domWidth ) / 100;
- }
- } else {
- another_label.o.css({ visibility: "visible" });
- }
- break;
- }
- }
-
- sizes = setPosition( label, sizes, prc );
-
- /* draw second label */
- if( another_label ){
- var sizes = {
- label: another_label.o.outerWidth(),
- right: false,
- border: ( another.value.prc * this.sizes.domWidth ) / 100
- };
- sizes = setPosition( another_label, sizes, another.value.prc );
- }
-
- this.redrawLimits();
- };
-
- jSlider.prototype.redrawLimits = function(){
- if( this.settings.limits ){
-
- var limits = [ true, true ];
-
- for( key in this.o.pointers ){
-
- if( !this.settings.single || key == 0 ){
-
- var pointer = this.o.pointers[key];
- var label = this.o.labels[pointer.uid];
- var label_left = label.o.offset().left - this.sizes.domOffset.left;
-
- var limit = this.o.limits[0];
- if( label_left < limit.outerWidth() )
- limits[0] = false;
-
- var limit = this.o.limits[1];
- if( label_left + label.o.outerWidth() > this.sizes.domWidth - limit.outerWidth() )
- limits[1] = false;
- }
-
- };
-
- for( var i=0; i < limits.length; i++ ){
- if( limits[i] )
- this.o.limits[i].fadeIn("fast");
- else
- this.o.limits[i].fadeOut("fast");
- };
-
- }
- };
-
- jSlider.prototype.setValue = function(){
- var value = this.getValue();
- this.inputNode.attr( "value", value );
- this.onstatechange.call( this, value );
- };
-
- jSlider.prototype.getValue = function(){
- if(!this.is.init) return false;
- var $this = this;
-
- var value = "";
- $.each( this.o.pointers, function(i){
- if( this.value.prc != undefined && !isNaN(this.value.prc) ) value += (i > 0 ? ";" : "") + $this.prcToValue( this.value.prc );
- });
- return value;
- };
-
- jSlider.prototype.getPrcValue = function(){
- if(!this.is.init) return false;
- var $this = this;
-
- var value = "";
- $.each( this.o.pointers, function(i){
- if( this.value.prc != undefined && !isNaN(this.value.prc) ) value += (i > 0 ? ";" : "") + this.value.prc;
- });
- return value;
- };
-
- jSlider.prototype.prcToValue = function( prc ){
-
- if( this.settings.heterogeneity && this.settings.heterogeneity.length > 0 ){
- var h = this.settings.heterogeneity;
-
- var _start = 0;
- var _from = this.settings.from;
-
- for( var i=0; i <= h.length; i++ ){
- if( h[i] ) var v = h[i].split("/");
- else var v = [100, this.settings.to];
-
- v[0] = new Number(v[0]);
- v[1] = new Number(v[1]);
-
- if( prc >= _start && prc <= v[0] ) {
- var value = _from + ( (prc-_start) * (v[1]-_from) ) / (v[0]-_start);
- }
-
- _start = v[0];
- _from = v[1];
- };
-
- } else {
- var value = this.settings.from + ( prc * this.settings.interval ) / 100;
- }
-
- return this.round( value );
- };
-
- jSlider.prototype.valueToPrc = function( value, pointer ){
- if( this.settings.heterogeneity && this.settings.heterogeneity.length > 0 ){
- var h = this.settings.heterogeneity;
-
- var _start = 0;
- var _from = this.settings.from;
-
- for (var i=0; i <= h.length; i++) {
- if(h[i]) var v = h[i].split("/");
- else var v = [100, this.settings.to];
- v[0] = new Number(v[0]); v[1] = new Number(v[1]);
-
- if(value >= _from && value <= v[1]){
- var prc = pointer.limits(_start + (value-_from)*(v[0]-_start)/(v[1]-_from));
- }
-
- _start = v[0]; _from = v[1];
- };
-
- } else {
- var prc = pointer.limits((value-this.settings.from)*100/this.settings.interval);
- }
-
- return prc;
- };
-
- jSlider.prototype.round = function( value ){
- value = Math.round( value / this.settings.step ) * this.settings.step;
- if( this.settings.round ) value = Math.round( value * Math.pow(10, this.settings.round) ) / Math.pow(10, this.settings.round);
- else value = Math.round( value );
- return value;
- };
-
- jSlider.prototype.nice = function( value ){
- value = value.toString().replace(/,/gi, ".").replace(/ /gi, "");;
-
- if( $.formatNumber ){
- return $.formatNumber( new Number(value), this.settings.format || {} ).replace( /-/gi, "&minus;" );
- }
-
- else {
- return new Number(value);
- }
- };
-
-
- function jSliderPointer(){
- Draggable.apply( this, arguments );
- }
- jSliderPointer.prototype = new Draggable();
-
- jSliderPointer.prototype.oninit = function( ptr, id, _constructor ){
- this.uid = id;
- this.parent = _constructor;
- this.value = {};
- this.settings = this.parent.settings;
- };
-
- jSliderPointer.prototype.onmousedown = function(evt){
- this._parent = {
- offset: this.parent.domNode.offset(),
- width: this.parent.domNode.width()
- };
- this.ptr.addDependClass("hover");
- this.setIndexOver();
- };
-
- jSliderPointer.prototype.onmousemove = function( evt, x ){
- var coords = this._getPageCoords( evt );
- this._set( this.calc( coords.x ) );
- };
-
- jSliderPointer.prototype.onmouseup = function( evt ){
- if( this.parent.settings.callback && $.isFunction(this.parent.settings.callback) )
- this.parent.settings.callback.call( this.parent, this.parent.getValue() );
-
- this.ptr.removeDependClass("hover");
- };
-
- jSliderPointer.prototype.setIndexOver = function(){
- this.parent.setPointersIndex( 1 );
- this.index( 2 );
- };
-
- jSliderPointer.prototype.index = function( i ){
- this.ptr.css({ zIndex: i });
- };
-
- jSliderPointer.prototype.limits = function( x ){
- return this.parent.limits( x, this );
- };
-
- jSliderPointer.prototype.calc = function(coords){
- var x = this.limits(((coords-this._parent.offset.left)*100)/this._parent.width);
- return x;
- };
-
- jSliderPointer.prototype.set = function( value, opt_origin ){
- this.value.origin = this.parent.round(value);
- this._set( this.parent.valueToPrc( value, this ), opt_origin );
- };
-
- jSliderPointer.prototype._set = function( prc, opt_origin ){
- if( !opt_origin )
- this.value.origin = this.parent.prcToValue(prc);
-
- this.value.prc = prc;
- this.ptr.css({ left: prc + "%" });
- this.parent.redraw(this);
- };
-
-})(jQuery); \ No newline at end of file
diff --git a/library/jslider/js/jshashtable-2.1_src.js b/library/jslider/js/jshashtable-2.1_src.js
deleted file mode 100644
index 086f3de5b..000000000
--- a/library/jslider/js/jshashtable-2.1_src.js
+++ /dev/null
@@ -1,370 +0,0 @@
-/**
- * Copyright 2010 Tim Down.
- *
- * 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.
- */
-
-/**
- * jshashtable
- *
- * jshashtable is a JavaScript implementation of a hash table. It creates a single constructor function called Hashtable
- * in the global scope.
- *
- * Author: Tim Down <tim@timdown.co.uk>
- * Version: 2.1
- * Build date: 21 March 2010
- * Website: http://www.timdown.co.uk/jshashtable
- */
-
-var Hashtable = (function() {
- var FUNCTION = "function";
-
- var arrayRemoveAt = (typeof Array.prototype.splice == FUNCTION) ?
- function(arr, idx) {
- arr.splice(idx, 1);
- } :
-
- function(arr, idx) {
- var itemsAfterDeleted, i, len;
- if (idx === arr.length - 1) {
- arr.length = idx;
- } else {
- itemsAfterDeleted = arr.slice(idx + 1);
- arr.length = idx;
- for (i = 0, len = itemsAfterDeleted.length; i < len; ++i) {
- arr[idx + i] = itemsAfterDeleted[i];
- }
- }
- };
-
- function hashObject(obj) {
- var hashCode;
- if (typeof obj == "string") {
- return obj;
- } else if (typeof obj.hashCode == FUNCTION) {
- // Check the hashCode method really has returned a string
- hashCode = obj.hashCode();
- return (typeof hashCode == "string") ? hashCode : hashObject(hashCode);
- } else if (typeof obj.toString == FUNCTION) {
- return obj.toString();
- } else {
- try {
- return String(obj);
- } catch (ex) {
- // For host objects (such as ActiveObjects in IE) that have no toString() method and throw an error when
- // passed to String()
- return Object.prototype.toString.call(obj);
- }
- }
- }
-
- function equals_fixedValueHasEquals(fixedValue, variableValue) {
- return fixedValue.equals(variableValue);
- }
-
- function equals_fixedValueNoEquals(fixedValue, variableValue) {
- return (typeof variableValue.equals == FUNCTION) ?
- variableValue.equals(fixedValue) : (fixedValue === variableValue);
- }
-
- function createKeyValCheck(kvStr) {
- return function(kv) {
- if (kv === null) {
- throw new Error("null is not a valid " + kvStr);
- } else if (typeof kv == "undefined") {
- throw new Error(kvStr + " must not be undefined");
- }
- };
- }
-
- var checkKey = createKeyValCheck("key"), checkValue = createKeyValCheck("value");
-
- /*----------------------------------------------------------------------------------------------------------------*/
-
- function Bucket(hash, firstKey, firstValue, equalityFunction) {
- this[0] = hash;
- this.entries = [];
- this.addEntry(firstKey, firstValue);
-
- if (equalityFunction !== null) {
- this.getEqualityFunction = function() {
- return equalityFunction;
- };
- }
- }
-
- var EXISTENCE = 0, ENTRY = 1, ENTRY_INDEX_AND_VALUE = 2;
-
- function createBucketSearcher(mode) {
- return function(key) {
- var i = this.entries.length, entry, equals = this.getEqualityFunction(key);
- while (i--) {
- entry = this.entries[i];
- if ( equals(key, entry[0]) ) {
- switch (mode) {
- case EXISTENCE:
- return true;
- case ENTRY:
- return entry;
- case ENTRY_INDEX_AND_VALUE:
- return [ i, entry[1] ];
- }
- }
- }
- return false;
- };
- }
-
- function createBucketLister(entryProperty) {
- return function(aggregatedArr) {
- var startIndex = aggregatedArr.length;
- for (var i = 0, len = this.entries.length; i < len; ++i) {
- aggregatedArr[startIndex + i] = this.entries[i][entryProperty];
- }
- };
- }
-
- Bucket.prototype = {
- getEqualityFunction: function(searchValue) {
- return (typeof searchValue.equals == FUNCTION) ? equals_fixedValueHasEquals : equals_fixedValueNoEquals;
- },
-
- getEntryForKey: createBucketSearcher(ENTRY),
-
- getEntryAndIndexForKey: createBucketSearcher(ENTRY_INDEX_AND_VALUE),
-
- removeEntryForKey: function(key) {
- var result = this.getEntryAndIndexForKey(key);
- if (result) {
- arrayRemoveAt(this.entries, result[0]);
- return result[1];
- }
- return null;
- },
-
- addEntry: function(key, value) {
- this.entries[this.entries.length] = [key, value];
- },
-
- keys: createBucketLister(0),
-
- values: createBucketLister(1),
-
- getEntries: function(entries) {
- var startIndex = entries.length;
- for (var i = 0, len = this.entries.length; i < len; ++i) {
- // Clone the entry stored in the bucket before adding to array
- entries[startIndex + i] = this.entries[i].slice(0);
- }
- },
-
- containsKey: createBucketSearcher(EXISTENCE),
-
- containsValue: function(value) {
- var i = this.entries.length;
- while (i--) {
- if ( value === this.entries[i][1] ) {
- return true;
- }
- }
- return false;
- }
- };
-
- /*----------------------------------------------------------------------------------------------------------------*/
-
- // Supporting functions for searching hashtable buckets
-
- function searchBuckets(buckets, hash) {
- var i = buckets.length, bucket;
- while (i--) {
- bucket = buckets[i];
- if (hash === bucket[0]) {
- return i;
- }
- }
- return null;
- }
-
- function getBucketForHash(bucketsByHash, hash) {
- var bucket = bucketsByHash[hash];
-
- // Check that this is a genuine bucket and not something inherited from the bucketsByHash's prototype
- return ( bucket && (bucket instanceof Bucket) ) ? bucket : null;
- }
-
- /*----------------------------------------------------------------------------------------------------------------*/
-
- function Hashtable(hashingFunctionParam, equalityFunctionParam) {
- var that = this;
- var buckets = [];
- var bucketsByHash = {};
-
- var hashingFunction = (typeof hashingFunctionParam == FUNCTION) ? hashingFunctionParam : hashObject;
- var equalityFunction = (typeof equalityFunctionParam == FUNCTION) ? equalityFunctionParam : null;
-
- this.put = function(key, value) {
- checkKey(key);
- checkValue(value);
- var hash = hashingFunction(key), bucket, bucketEntry, oldValue = null;
-
- // Check if a bucket exists for the bucket key
- bucket = getBucketForHash(bucketsByHash, hash);
- if (bucket) {
- // Check this bucket to see if it already contains this key
- bucketEntry = bucket.getEntryForKey(key);
- if (bucketEntry) {
- // This bucket entry is the current mapping of key to value, so replace old value and we're done.
- oldValue = bucketEntry[1];
- bucketEntry[1] = value;
- } else {
- // The bucket does not contain an entry for this key, so add one
- bucket.addEntry(key, value);
- }
- } else {
- // No bucket exists for the key, so create one and put our key/value mapping in
- bucket = new Bucket(hash, key, value, equalityFunction);
- buckets[buckets.length] = bucket;
- bucketsByHash[hash] = bucket;
- }
- return oldValue;
- };
-
- this.get = function(key) {
- checkKey(key);
-
- var hash = hashingFunction(key);
-
- // Check if a bucket exists for the bucket key
- var bucket = getBucketForHash(bucketsByHash, hash);
- if (bucket) {
- // Check this bucket to see if it contains this key
- var bucketEntry = bucket.getEntryForKey(key);
- if (bucketEntry) {
- // This bucket entry is the current mapping of key to value, so return the value.
- return bucketEntry[1];
- }
- }
- return null;
- };
-
- this.containsKey = function(key) {
- checkKey(key);
- var bucketKey = hashingFunction(key);
-
- // Check if a bucket exists for the bucket key
- var bucket = getBucketForHash(bucketsByHash, bucketKey);
-
- return bucket ? bucket.containsKey(key) : false;
- };
-
- this.containsValue = function(value) {
- checkValue(value);
- var i = buckets.length;
- while (i--) {
- if (buckets[i].containsValue(value)) {
- return true;
- }
- }
- return false;
- };
-
- this.clear = function() {
- buckets.length = 0;
- bucketsByHash = {};
- };
-
- this.isEmpty = function() {
- return !buckets.length;
- };
-
- var createBucketAggregator = function(bucketFuncName) {
- return function() {
- var aggregated = [], i = buckets.length;
- while (i--) {
- buckets[i][bucketFuncName](aggregated);
- }
- return aggregated;
- };
- };
-
- this.keys = createBucketAggregator("keys");
- this.values = createBucketAggregator("values");
- this.entries = createBucketAggregator("getEntries");
-
- this.remove = function(key) {
- checkKey(key);
-
- var hash = hashingFunction(key), bucketIndex, oldValue = null;
-
- // Check if a bucket exists for the bucket key
- var bucket = getBucketForHash(bucketsByHash, hash);
-
- if (bucket) {
- // Remove entry from this bucket for this key
- oldValue = bucket.removeEntryForKey(key);
- if (oldValue !== null) {
- // Entry was removed, so check if bucket is empty
- if (!bucket.entries.length) {
- // Bucket is empty, so remove it from the bucket collections
- bucketIndex = searchBuckets(buckets, hash);
- arrayRemoveAt(buckets, bucketIndex);
- delete bucketsByHash[hash];
- }
- }
- }
- return oldValue;
- };
-
- this.size = function() {
- var total = 0, i = buckets.length;
- while (i--) {
- total += buckets[i].entries.length;
- }
- return total;
- };
-
- this.each = function(callback) {
- var entries = that.entries(), i = entries.length, entry;
- while (i--) {
- entry = entries[i];
- callback(entry[0], entry[1]);
- }
- };
-
- this.putAll = function(hashtable, conflictCallback) {
- var entries = hashtable.entries();
- var entry, key, value, thisValue, i = entries.length;
- var hasConflictCallback = (typeof conflictCallback == FUNCTION);
- while (i--) {
- entry = entries[i];
- key = entry[0];
- value = entry[1];
-
- // Check for a conflict. The default behaviour is to overwrite the value for an existing key
- if ( hasConflictCallback && (thisValue = that.get(key)) ) {
- value = conflictCallback(key, thisValue, value);
- }
- that.put(key, value);
- }
- };
-
- this.clone = function() {
- var clone = new Hashtable(hashingFunctionParam, equalityFunctionParam);
- clone.putAll(that);
- return clone;
- };
- }
-
- return Hashtable;
-})(); \ No newline at end of file
diff --git a/library/jslider/js/tmpl.js b/library/jslider/js/tmpl.js
deleted file mode 100644
index 36eadf28a..000000000
--- a/library/jslider/js/tmpl.js
+++ /dev/null
@@ -1,35 +0,0 @@
-// Simple JavaScript Templating
-// John Resig - http://ejohn.org/ - MIT Licensed
-(function(){
- var cache = {};
-
- this.tmpl = function tmpl(str, data){
- // Figure out if we're getting a template, or if we need to
- // load the template - and be sure to cache the result.
- var fn = !/\W/.test(str) ?
- cache[str] = cache[str] ||
- tmpl(document.getElementById(str).innerHTML) :
-
- // Generate a reusable function that will serve as a template
- // generator (and which will be cached).
- new Function("obj",
- "var p=[],print=function(){p.push.apply(p,arguments);};" +
-
- // Introduce the data as local variables using with(){}
- "with(obj){p.push('" +
-
- // Convert the template into pure JavaScript
- str
- .replace(/[\r\t\n]/g, " ")
- .split("<%").join("\t")
- .replace(/((^|%>)[^\t]*)'/g, "$1\r")
- .replace(/\t=(.*?)%>/g, "',$1,'")
- .split("\t").join("');")
- .split("%>").join("p.push('")
- .split("\r").join("\\'")
- + "');}return p.join('');");
-
- // Provide some basic currying to the user
- return data ? fn( data ) : fn;
- };
-})(); \ No newline at end of file
diff --git a/library/jslider/src/skin.psd b/library/jslider/src/skin.psd
deleted file mode 100644
index 2c46c91db..000000000
--- a/library/jslider/src/skin.psd
+++ /dev/null
Binary files differ
diff --git a/library/jslider/tests/show_hide.html b/library/jslider/tests/show_hide.html
deleted file mode 100644
index 57d3e929d..000000000
--- a/library/jslider/tests/show_hide.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
- <title>jSlider Show/hide test</title>
-
- <!-- bin/jquery.slider.min.css -->
- <link rel="stylesheet" href="../css/jslider.css" type="text/css">
- <link rel="stylesheet" href="../css/jslider.plastic.css" type="text/css">
- <!-- end -->
-
- <script type="text/javascript" src="../js/jquery-1.7.1.js"></script>
-
- <!-- bin/jquery.slider.min.js -->
- <script type="text/javascript" src="../js/jshashtable-2.1_src.js"></script>
- <script type="text/javascript" src="../js/jquery.numberformatter-1.2.3.js"></script>
- <script type="text/javascript" src="../js/tmpl.js"></script>
- <script type="text/javascript" src="../js/jquery.dependClass-0.1.js"></script>
- <script type="text/javascript" src="../js/draggable-0.1.js"></script>
- <script type="text/javascript" src="../js/jquery.slider.js"></script>
- <!-- end -->
-
- <style type="text/css" media="screen">
- body { background: #EEF0F7; }
- .layout { padding: 50px; font-family: Georgia, serif; }
- .layout-slider { margin-bottom: 60px; width: 50%; padding: 20px 0; }
- </style>
-
-</head>
-<body>
-
- <div class="layout">
-
- <div class="layout-slider" style="width: 100%; display: none;">
- Slider <span style="display: inline-block; width: 400px; padding: 0 5px;"><input id="Slider3" type="text" name="area" value="25;75" /></span> in string
- </div>
- <a href="#" id="trigger">Show/Hide</a>
-
- <script type="text/javascript" charset="utf-8">
- var layout = $(".layout-slider"),
- trigger = $("#trigger");
-
- jQuery("#Slider3").slider({ from: 0, to: 500, heterogeneity: ['50/100', '75/250'], scale: [0, '|', 50, '|', '100', '|', 250, '|', 500], limits: false, step: 1, dimension: '&nbsp;m<small>2</small>', skin: "plastic" });
-
- $(trigger).click( function(){
- layout.slideToggle("fast");
- $("#Slider3").slider().update();
- });
- </script>
-
- </div>
-</body>
-</html> \ No newline at end of file
diff --git a/library/jslider/tests/zero_value.html b/library/jslider/tests/zero_value.html
deleted file mode 100644
index 7d9e9f874..000000000
--- a/library/jslider/tests/zero_value.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
- <title>jSlider Zero value test</title>
-
- <!-- bin/jquery.slider.min.css -->
- <link rel="stylesheet" href="../css/jslider.css" type="text/css">
- <link rel="stylesheet" href="../css/jslider.plastic.css" type="text/css">
- <!-- end -->
-
- <script type="text/javascript" src="../js/jquery-1.7.1.js"></script>
-
- <!-- bin/jquery.slider.min.js -->
- <script type="text/javascript" src="../js/jshashtable-2.1_src.js"></script>
- <script type="text/javascript" src="../js/jquery.numberformatter-1.2.3.js"></script>
- <script type="text/javascript" src="../js/tmpl.js"></script>
- <script type="text/javascript" src="../js/jquery.dependClass-0.1.js"></script>
- <script type="text/javascript" src="../js/draggable-0.1.js"></script>
- <script type="text/javascript" src="../js/jquery.slider.js"></script>
- <!-- end -->
-
- <style type="text/css" media="screen">
- body { background: #EEF0F7; }
- .layout { padding: 50px; font-family: Georgia, serif; }
- .layout-slider { margin-bottom: 60px; width: 50%; }
- </style>
-
-</head>
-<body>
-
- <div class="layout">
-
- <div class="layout-slider" style="width: 100%">
- Slider <span style="display: inline-block; width: 400px; padding: 0 5px;"><input id="Slider1" type="slider" name="price" value="50" /></span> in string
- </div>
- <script type="text/javascript" charset="utf-8">
- jQuery("#Slider1").slider({
- from: -50,
- to: 200,
- step: 5,
- dimension: '%',
- skin: 'plastic',
- scale: ['-50', '|', '0', '|', '50', '|', '100', '|', '150', '|', '200']
- });
- </script>
-
- <div class="layout-slider" style="width: 100%">
- Slider <span style="display: inline-block; width: 400px; padding: 0 5px;"><input id="Slider2" type="slider" name="price" value="-0.5;0.5" /></span> in string
- </div>
- <script type="text/javascript" charset="utf-8">
- jQuery("#Slider2").slider({
- from: -1,
- to: 1,
- step: 0.1,
- round: 1,
- dimension: 'px',
- skin: 'plastic'
- });
- </script>
-
- </div>
-</body>
-</html> \ No newline at end of file
diff --git a/library/jslider/tools/yuicompressor-2.4.7.jar b/library/jslider/tools/yuicompressor-2.4.7.jar
deleted file mode 100644
index 3c9a408aa..000000000
--- a/library/jslider/tools/yuicompressor-2.4.7.jar
+++ /dev/null
Binary files differ
diff --git a/library/justifiedGallery/dist/css/justifiedGallery.css b/library/justifiedGallery/dist/css/justifiedGallery.css
new file mode 100644
index 000000000..97585f3ed
--- /dev/null
+++ b/library/justifiedGallery/dist/css/justifiedGallery.css
@@ -0,0 +1,149 @@
+/*!
+ * Justified Gallery - v3.2.0
+ * http://miromannino.com/projects/justified-gallery/
+ * Copyright (c) 2014 Miro Mannino
+ * Licensed under the MIT license.
+ */
+@-webkit-keyframes justified-gallery-show-caption-animation {
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 0.7;
+ }
+}
+@-moz-keyframes justified-gallery-show-caption-animation {
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 0.7;
+ }
+}
+@-o-keyframes justified-gallery-show-caption-animation {
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 0.7;
+ }
+}
+@keyframes justified-gallery-show-caption-animation {
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 0.7;
+ }
+}
+@-webkit-keyframes justified-gallery-show-entry-animation {
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 1.0;
+ }
+}
+@-moz-keyframes justified-gallery-show-entry-animation {
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 1.0;
+ }
+}
+@-o-keyframes justified-gallery-show-entry-animation {
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 1.0;
+ }
+}
+@keyframes justified-gallery-show-entry-animation {
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 1.0;
+ }
+}
+.justified-gallery {
+ width: 100%;
+ position: relative;
+ overflow: hidden;
+}
+.justified-gallery > a,
+.justified-gallery > div {
+ position: absolute;
+ display: inline-block;
+ overflow: hidden;
+ opacity: 0;
+ filter: alpha(opacity=0);
+ /* IE8 or Earlier */
+}
+.justified-gallery > a > img,
+.justified-gallery > div > img {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ margin: 0;
+ padding: 0;
+ border: none;
+}
+.justified-gallery > a > .caption,
+.justified-gallery > div > .caption {
+ display: none;
+ position: absolute;
+ bottom: 0;
+ padding: 5px;
+ background-color: #000000;
+ left: 0;
+ right: 0;
+ margin: 0;
+ color: white;
+ font-size: 12px;
+ font-family: sans-serif;
+}
+.justified-gallery > a > .caption.caption-visible,
+.justified-gallery > div > .caption.caption-visible {
+ display: initial;
+ opacity: 0.7;
+ filter: "alpha(opacity=70)";
+ /* IE8 or Earlier */
+ -webkit-animation: justified-gallery-show-caption-animation 500ms 0 ease;
+ -moz-animation: justified-gallery-show-caption-animation 500ms 0 ease;
+ -ms-animation: justified-gallery-show-caption-animation 500ms 0 ease;
+}
+.justified-gallery > .entry-visible {
+ opacity: 1.0;
+ filter: alpha(opacity=100);
+ /* IE8 or Earlier */
+ -webkit-animation: justified-gallery-show-entry-animation 300ms 0 ease;
+ -moz-animation: justified-gallery-show-entry-animation 300ms 0 ease;
+ -ms-animation: justified-gallery-show-entry-animation 300ms 0 ease;
+}
+.justified-gallery > .spinner {
+ position: absolute;
+ bottom: 0;
+ margin-left: -24px;
+ padding: 10px 0 10px 0;
+ left: 50%;
+ opacity: initial;
+ filter: initial;
+ overflow: initial;
+}
+.justified-gallery > .spinner > span {
+ display: inline-block;
+ opacity: 0;
+ filter: alpha(opacity=0);
+ /* IE8 or Earlier */
+ width: 8px;
+ height: 8px;
+ margin: 0 4px 0 4px;
+ background-color: #000;
+ border-top-left-radius: 6px;
+ border-top-right-radius: 6px;
+ border-bottom-right-radius: 6px;
+ border-bottom-left-radius: 6px;
+}
diff --git a/library/justifiedGallery/dist/css/justifiedGallery.min.css b/library/justifiedGallery/dist/css/justifiedGallery.min.css
new file mode 100644
index 000000000..f59d7c7c1
--- /dev/null
+++ b/library/justifiedGallery/dist/css/justifiedGallery.min.css
@@ -0,0 +1,7 @@
+/*!
+ * Justified Gallery - v3.2.0
+ * http://miromannino.com/projects/justified-gallery/
+ * Copyright (c) 2014 Miro Mannino
+ * Licensed under the MIT license.
+ */
+@-webkit-keyframes justified-gallery-show-caption-animation{from{opacity:0}to{opacity:.7}}@-moz-keyframes justified-gallery-show-caption-animation{from{opacity:0}to{opacity:.7}}@-o-keyframes justified-gallery-show-caption-animation{from{opacity:0}to{opacity:.7}}@keyframes justified-gallery-show-caption-animation{from{opacity:0}to{opacity:.7}}@-webkit-keyframes justified-gallery-show-entry-animation{from{opacity:0}to{opacity:1}}@-moz-keyframes justified-gallery-show-entry-animation{from{opacity:0}to{opacity:1}}@-o-keyframes justified-gallery-show-entry-animation{from{opacity:0}to{opacity:1}}@keyframes justified-gallery-show-entry-animation{from{opacity:0}to{opacity:1}}.justified-gallery{width:100%;position:relative;overflow:hidden}.justified-gallery>a,.justified-gallery>div{position:absolute;display:inline-block;overflow:hidden;opacity:0;filter:alpha(opacity=0)}.justified-gallery>a>img,.justified-gallery>div>img{position:absolute;top:50%;left:50%;margin:0;padding:0;border:0}.justified-gallery>a>.caption,.justified-gallery>div>.caption{display:none;position:absolute;bottom:0;padding:5px;background-color:#000;left:0;right:0;margin:0;color:#fff;font-size:12px;font-weight:300;font-family:sans-serif}.justified-gallery>a>.caption.caption-visible,.justified-gallery>div>.caption.caption-visible{display:initial;opacity:.7;filter:"alpha(opacity=70)";-webkit-animation:justified-gallery-show-caption-animation 500ms 0 ease;-moz-animation:justified-gallery-show-caption-animation 500ms 0 ease;-ms-animation:justified-gallery-show-caption-animation 500ms 0 ease}.justified-gallery>.entry-visible{opacity:1;filter:alpha(opacity=100);-webkit-animation:justified-gallery-show-entry-animation 300ms 0 ease;-moz-animation:justified-gallery-show-entry-animation 300ms 0 ease;-ms-animation:justified-gallery-show-entry-animation 300ms 0 ease}.justified-gallery>.spinner{position:absolute;bottom:0;margin-left:-24px;padding:10px 0;left:50%;opacity:initial;filter:initial;overflow:initial}.justified-gallery>.spinner>span{display:inline-block;opacity:0;filter:alpha(opacity=0);width:8px;height:8px;margin:0 4px;background-color:#000;border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px} \ No newline at end of file
diff --git a/library/justifiedGallery/dist/js/jquery.justifiedGallery.js b/library/justifiedGallery/dist/js/jquery.justifiedGallery.js
new file mode 100644
index 000000000..7754ae437
--- /dev/null
+++ b/library/justifiedGallery/dist/js/jquery.justifiedGallery.js
@@ -0,0 +1,661 @@
+/*
+ * Justified Gallery - v3.4.0
+ * http://miromannino.com/projects/justified-gallery/
+ * Copyright (c) 2014 Miro Mannino
+ * Licensed under the MIT license.
+ */
+(function($) {
+
+ /* Events
+ jg.complete : called when all the gallery has been created
+ jg.resize : called when the gallery has been resized
+ */
+
+ $.fn.justifiedGallery = function (arg) {
+
+ // Default options
+ var defaults = {
+ sizeRangeSuffixes : {
+ 'lt100': '_t',
+ 'lt240': '_m',
+ 'lt320': '_n',
+ 'lt500': '',
+ 'lt640': '_z',
+ 'lt1024': '_b'
+ },
+ rowHeight : 120,
+ maxRowHeight : 0, //negative value = no limits, 0 = 1.5 * rowHeight
+ margins : 1,
+ lastRow : 'nojustify', // or can be 'justify' or 'hide'
+ justifyThreshold: 0.75, /* if row width / available space > 0.75 it will be always justified
+ (i.e. lastRow setting is not considered) */
+ fixedHeight : false,
+ waitThumbnailsLoad : true,
+ captions : true,
+ cssAnimation: false,
+ imagesAnimationDuration : 500, //ignored with css animations
+ captionSettings : { //ignored with css animations
+ animationDuration : 500,
+ visibleOpacity : 0.7,
+ nonVisibleOpacity : 0.0
+ },
+ rel : null, //rewrite the rel of each analyzed links
+ target : null, //rewrite the target of all links
+ extension : /\.[^.\\/]+$/,
+ refreshTime : 100,
+ randomize : false
+ };
+
+ function getSuffix(width, height, context) {
+ var longestSide;
+ longestSide = (width > height) ? width : height;
+ if (longestSide <= 100) {
+ return context.settings.sizeRangeSuffixes.lt100;
+ } else if (longestSide <= 240) {
+ return context.settings.sizeRangeSuffixes.lt240;
+ } else if (longestSide <= 320) {
+ return context.settings.sizeRangeSuffixes.lt320;
+ } else if (longestSide <= 500) {
+ return context.settings.sizeRangeSuffixes.lt500;
+ } else if (longestSide <= 640) {
+ return context.settings.sizeRangeSuffixes.lt640;
+ } else {
+ return context.settings.sizeRangeSuffixes.lt1024;
+ }
+ }
+
+ function endsWith(str, suffix) {
+ return str.indexOf(suffix, str.length - suffix.length) !== -1;
+ }
+
+ function removeSuffix(str, suffix) {
+ return str.substring(0, str.length - suffix.length);
+ }
+
+ function getUsedSuffix(str, context) {
+ var voidSuffix = false;
+ for (var si in context.settings.sizeRangeSuffixes) {
+ if (context.settings.sizeRangeSuffixes[si].length === 0) {
+ voidSuffix = true;
+ continue;
+ }
+ if (endsWith(str, context.settings.sizeRangeSuffixes[si])) {
+ return context.settings.sizeRangeSuffixes[si];
+ }
+ }
+
+ if (voidSuffix) return "";
+ else throw 'unknown suffix for ' + str;
+ }
+
+ /* Given an image src, with the width and the height, returns the new image src with the
+ best suffix to show the best quality thumbnail. */
+ function newSrc(imageSrc, imgWidth, imgHeight, context) {
+ var matchRes = imageSrc.match(context.settings.extension);
+ var ext = (matchRes != null) ? matchRes[0] : '';
+ var newImageSrc = imageSrc.replace(context.settings.extension, '');
+ newImageSrc = removeSuffix(newImageSrc, getUsedSuffix(newImageSrc, context));
+ newImageSrc += getSuffix(imgWidth, imgHeight, context) + ext;
+ return newImageSrc;
+ }
+
+ function onEntryMouseEnterForCaption (ev) {
+ var $caption = $(ev.currentTarget).find('.caption');
+ if (ev.data.settings.cssAnimation) {
+ $caption.addClass('caption-visible').removeClass('caption-hidden');
+ } else {
+ $caption.stop().fadeTo(ev.data.settings.captionSettings.animationDuration,
+ ev.data.settings.captionSettings.visibleOpacity);
+ }
+ }
+
+ function onEntryMouseLeaveForCaption (ev) {
+ var $caption = $(ev.currentTarget).find('.caption');
+ if (ev.data.settings.cssAnimation) {
+ $caption.removeClass('caption-visible').removeClass('caption-hidden');
+ } else {
+ $caption.stop().fadeTo(ev.data.settings.captionSettings.animationDuration,
+ ev.data.settings.captionSettings.nonVisibleOpacity);
+ }
+ }
+
+ function showImg($entry, callback, context) {
+ if (context.settings.cssAnimation) {
+ $entry.addClass('entry-visible');
+ callback();
+ } else {
+ $entry.stop().fadeTo(context.settings.imagesAnimationDuration, 1.0, callback);
+ }
+ }
+
+ function hideImgImmediately($entry, context) {
+ if (context.settings.cssAnimation) {
+ $entry.removeClass('entry-visible');
+ } else {
+ $entry.stop().fadeTo(0, 0);
+ }
+ }
+
+ function displayEntry($entry, x, y, imgWidth, imgHeight, rowHeight, context) {
+ var $image = $entry.find('img');
+ $image.css('width', imgWidth);
+ $image.css('height', imgHeight);
+ $image.css('margin-left', - imgWidth / 2);
+ $image.css('margin-top', - imgHeight / 2);
+ $entry.width(imgWidth);
+ $entry.height(rowHeight);
+ $entry.css('top', y);
+ $entry.css('left', x);
+
+ //DEBUG// console.log('displayEntry (w: ' + $image.width() + ' h: ' + $image.height());
+
+ // Image reloading for an high quality of thumbnails
+ var imageSrc = $image.attr('src');
+ var newImageSrc = newSrc(imageSrc, imgWidth, imgHeight, context);
+
+ $image.one('error', function () {
+ //DEBUG// console.log('revert the original image');
+ $image.attr('src', $image.data('jg.originalSrc')); //revert to the original thumbnail, we got it.
+ });
+
+ function loadNewImage() {
+ if (imageSrc !== newImageSrc) { //load the new image after the fadeIn
+ $image.attr('src', newImageSrc);
+ }
+ }
+
+ if ($image.data('jg.loaded') === 'skipped') {
+ $image.one('load', function() {
+ showImg($entry, loadNewImage, context);
+ $image.data('jg.loaded', 'loaded');
+ });
+ } else {
+ showImg($entry, loadNewImage, context);
+ }
+
+ // Captions ------------------------------
+ var captionMouseEvents = $entry.data('jg.captionMouseEvents');
+ if (context.settings.captions === true) {
+ var $imgCaption = $entry.find('.caption');
+ if ($imgCaption.length === 0) { // Create it if it doesn't exists
+ var caption = $image.attr('alt');
+ if (typeof caption === 'undefined') caption = $entry.attr('title');
+ if (typeof caption !== 'undefined') { // Create only we found something
+ $imgCaption = $('<div class="caption">' + caption + '</div>');
+ $entry.append($imgCaption);
+ }
+ }
+
+ // Create events (we check again the $imgCaption because it can be still inexistent)
+ if ($imgCaption.length !== 0) {
+ if (!context.settings.cssAnimation) {
+ $imgCaption.stop().fadeTo(context.settings.imagesAnimationDuration,
+ context.settings.captionSettings.nonVisibleOpacity);
+ }
+ if (typeof captionMouseEvents === 'undefined') {
+ captionMouseEvents = {
+ mouseenter: onEntryMouseEnterForCaption,
+ mouseleave: onEntryMouseLeaveForCaption
+ };
+ $entry.on('mouseenter', undefined, context, captionMouseEvents.mouseenter);
+ $entry.on('mouseleave', undefined, context, captionMouseEvents.mouseleave);
+ $entry.data('jg.captionMouseEvents', captionMouseEvents);
+ }
+ }
+ } else {
+ if (typeof captionMouseEvents !== 'undefined') {
+ $entry.off('mouseenter', undefined, context, captionMouseEvents.mouseenter);
+ $entry.off('mouseleave', undefined, context, captionMouseEvents.mouseleave);
+ $entry.removeData('jg.captionMouseEvents');
+ }
+ }
+
+ }
+
+ function prepareBuildingRow(context, isLastRow) {
+ var settings = context.settings;
+ var i, $entry, $image, imgAspectRatio, newImgW, newImgH, justify = true;
+ var minHeight = 0;
+ var availableWidth = context.galleryWidth - (
+ (context.buildingRow.entriesBuff.length - 1) * settings.margins);
+ var rowHeight = availableWidth / context.buildingRow.aspectRatio;
+ var justificable = context.buildingRow.width / availableWidth > settings.justifyThreshold;
+
+ //Skip the last row if we can't justify it and the lastRow == 'hide'
+ if (isLastRow && settings.lastRow === 'hide' && !justificable) {
+ for (i = 0; i < context.buildingRow.entriesBuff.length; i++) {
+ $entry = context.buildingRow.entriesBuff[i];
+ if (settings.cssAnimation)
+ $entry.removeClass('entry-visible');
+ else
+ $entry.stop().fadeTo(0, 0);
+ }
+ return -1;
+ }
+
+ // With lastRow = nojustify, justify if is justificable (the images will not become too big)
+ if (isLastRow && !justificable && settings.lastRow === 'nojustify') justify = false;
+
+ for (i = 0; i < context.buildingRow.entriesBuff.length; i++) {
+ $image = context.buildingRow.entriesBuff[i].find('img');
+ imgAspectRatio = $image.data('jg.imgw') / $image.data('jg.imgh');
+
+ if (justify) {
+ newImgW = rowHeight * imgAspectRatio;
+ newImgH = rowHeight;
+
+ /* With fixedHeight the newImgH must be greater than rowHeight.
+ In some cases here this is not satisfied (due to the justification).
+ But we comment it, because is better to have a shorter but justified row instead
+ to have a cropped image at the end. */
+ /*if (settings.fixedHeight && newImgH < settings.rowHeight) {
+ newImgW = settings.rowHeight * imgAspectRatio;
+ newImgH = settings.rowHeight;
+ }*/
+ } else {
+ newImgW = settings.rowHeight * imgAspectRatio;
+ newImgH = settings.rowHeight;
+ }
+
+ $image.data('jg.imgw', Math.ceil(newImgW));
+ $image.data('jg.imgh', Math.ceil(newImgH));
+ if (i === 0 || minHeight > newImgH) minHeight = newImgH;
+ }
+
+ if (settings.fixedHeight && minHeight > settings.rowHeight)
+ minHeight = settings.rowHeight;
+
+ return {minHeight: minHeight, justify: justify};
+ }
+
+ function rewind(context) {
+ context.lastAnalyzedIndex = -1;
+ context.buildingRow.entriesBuff = [];
+ context.buildingRow.aspectRatio = 0;
+ context.buildingRow.width = 0;
+ context.offY = 0;
+ }
+
+ function flushRow(context, isLastRow) {
+ var settings = context.settings;
+ var $entry, $image, minHeight, buildingRowRes, offX = 0;
+
+ //DEBUG// console.log('flush (isLastRow: ' + isLastRow + ')');
+
+ buildingRowRes = prepareBuildingRow(context, isLastRow);
+ minHeight = buildingRowRes.minHeight;
+ if (isLastRow && settings.lastRow === 'hide' && minHeight === -1) {
+ context.buildingRow.entriesBuff = [];
+ context.buildingRow.aspectRatio = 0;
+ context.buildingRow.width = 0;
+ return;
+ }
+
+ if (settings.maxRowHeight > 0 && settings.maxRowHeight < minHeight)
+ minHeight = settings.maxRowHeight;
+ else if (settings.maxRowHeight === 0 && (1.5 * settings.rowHeight) < minHeight)
+ minHeight = 1.5 * settings.rowHeight;
+
+ for (var i = 0; i < context.buildingRow.entriesBuff.length; i++) {
+ $entry = context.buildingRow.entriesBuff[i];
+ $image = $entry.find('img');
+ displayEntry($entry, offX, context.offY, $image.data('jg.imgw'),
+ $image.data('jg.imgh'), minHeight, context);
+ offX += $image.data('jg.imgw') + settings.margins;
+ }
+
+ //Gallery Height
+ context.$gallery.height(context.offY + minHeight +
+ (context.spinner.active ? context.spinner.$el.innerHeight() : 0)
+ );
+
+ if (!isLastRow || (minHeight <= context.settings.rowHeight && buildingRowRes.justify)) {
+ //Ready for a new row
+ context.offY += minHeight + context.settings.margins;
+
+ //DEBUG// console.log('minHeight: ' + minHeight + ' offY: ' + context.offY);
+
+ context.buildingRow.entriesBuff = []; //clear the array creating a new one
+ context.buildingRow.aspectRatio = 0;
+ context.buildingRow.width = 0;
+ context.$gallery.trigger('jg.rowflush');
+ }
+ }
+
+ function checkWidth(context) {
+ context.checkWidthIntervalId = setInterval(function () {
+ var galleryWidth = parseInt(context.$gallery.width(), 10);
+ if (context.galleryWidth !== galleryWidth) {
+ //DEBUG// console.log("resize. old: " + context.galleryWidth + " new: " + galleryWidth);
+
+ context.galleryWidth = galleryWidth;
+ rewind(context);
+
+ // Restart to analyze
+ startImgAnalyzer(context, true);
+ }
+ }, context.settings.refreshTime);
+ }
+
+ function startLoadingSpinnerAnimation(spinnerContext) {
+ clearInterval(spinnerContext.intervalId);
+ spinnerContext.intervalId = setInterval(function () {
+ if (spinnerContext.phase < spinnerContext.$points.length)
+ spinnerContext.$points.eq(spinnerContext.phase).fadeTo(spinnerContext.timeslot, 1);
+ else
+ spinnerContext.$points.eq(spinnerContext.phase - spinnerContext.$points.length)
+ .fadeTo(spinnerContext.timeslot, 0);
+ spinnerContext.phase = (spinnerContext.phase + 1) % (spinnerContext.$points.length * 2);
+ }, spinnerContext.timeslot);
+ }
+
+ function stopLoadingSpinnerAnimation(spinnerContext) {
+ clearInterval(spinnerContext.intervalId);
+ spinnerContext.intervalId = null;
+ }
+
+ function stopImgAnalyzerStarter(context) {
+ context.yield.flushed = 0;
+ if (context.imgAnalyzerTimeout !== null) clearTimeout(context.imgAnalyzerTimeout);
+ }
+
+ function startImgAnalyzer(context, isForResize) {
+ stopImgAnalyzerStarter(context);
+ context.imgAnalyzerTimeout = setTimeout(function () {
+ analyzeImages(context, isForResize);
+ }, 0.001);
+ analyzeImages(context, isForResize);
+ }
+
+ function analyzeImages(context, isForResize) {
+
+ /* //DEBUG//
+ var rnd = parseInt(Math.random() * 10000, 10);
+ console.log('analyzeImages ' + rnd + ' start');
+ console.log('images status: ');
+ for (var i = 0; i < context.entries.length; i++) {
+ var $entry = $(context.entries[i]);
+ var $image = $entry.find('img');
+ console.log(i + ' (alt: ' + $image.attr('alt') + 'loaded: ' + $image.data('jg.loaded') + ')');
+ }*/
+
+ /* The first row */
+ var settings = context.settings;
+ var isLastRow;
+
+ for (var i = context.lastAnalyzedIndex + 1; i < context.entries.length; i++) {
+ var $entry = $(context.entries[i]);
+ var $image = $entry.find('img');
+
+ if ($image.data('jg.loaded') === true || $image.data('jg.loaded') === 'skipped') {
+ isLastRow = i >= context.entries.length - 1;
+
+ var availableWidth = context.galleryWidth - (
+ (context.buildingRow.entriesBuff.length - 1) * settings.margins);
+ var imgAspectRatio = $image.data('jg.imgw') / $image.data('jg.imgh');
+ if (availableWidth / (context.buildingRow.aspectRatio + imgAspectRatio) < settings.rowHeight) {
+ flushRow(context, isLastRow);
+ if(++context.yield.flushed >= context.yield.every) {
+ //DEBUG// console.log("yield");
+ startImgAnalyzer(context, isForResize);
+ return;
+ }
+ }
+
+ context.buildingRow.entriesBuff.push($entry);
+ context.buildingRow.aspectRatio += imgAspectRatio;
+ context.buildingRow.width += imgAspectRatio * settings.rowHeight;
+ context.lastAnalyzedIndex = i;
+
+ } else if ($image.data('jg.loaded') !== 'error') {
+ return;
+ }
+ }
+
+ // Last row flush (the row is not full)
+ if (context.buildingRow.entriesBuff.length > 0) flushRow(context, true);
+
+ if (context.spinner.active) {
+ context.spinner.active = false;
+ context.$gallery.height(context.$gallery.height() - context.spinner.$el.innerHeight());
+ context.spinner.$el.detach();
+ stopLoadingSpinnerAnimation(context.spinner);
+ }
+
+ /* Stop, if there is, the timeout to start the analyzeImages.
+ This is because an image can be set loaded, and the timeout can be set,
+ but this image can be analyzed yet.
+ */
+ stopImgAnalyzerStarter(context);
+
+ //On complete callback
+ if (!isForResize)
+ context.$gallery.trigger('jg.complete');
+ else
+ context.$gallery.trigger('jg.resize');
+
+ //DEBUG// console.log('analyzeImages ' + rnd + ' end');
+ }
+
+ function checkSettings (context) {
+ var settings = context.settings;
+
+ function checkSuffixesRange(range) {
+ if (typeof settings.sizeRangeSuffixes[range] !== 'string')
+ throw 'sizeRangeSuffixes.' + range + ' must be a string';
+ }
+
+ function checkOrConvertNumber(parent, settingName) {
+ if (typeof parent[settingName] === 'string') {
+ parent[settingName] = parseFloat(parent[settingName], 10);
+ if (isNaN(parent[settingName])) throw 'invalid number for ' + settingName;
+ } else if (typeof parent[settingName] === 'number') {
+ if (isNaN(parent[settingName])) throw 'invalid number for ' + settingName;
+ } else {
+ throw settingName + ' must be a number';
+ }
+ }
+
+ if (typeof settings.sizeRangeSuffixes !== 'object')
+ throw 'sizeRangeSuffixes must be defined and must be an object';
+
+ checkSuffixesRange('lt100');
+ checkSuffixesRange('lt240');
+ checkSuffixesRange('lt320');
+ checkSuffixesRange('lt500');
+ checkSuffixesRange('lt640');
+ checkSuffixesRange('lt1024');
+
+ checkOrConvertNumber(settings, 'rowHeight');
+ checkOrConvertNumber(settings, 'maxRowHeight');
+
+ if (settings.maxRowHeight > 0 &&
+ settings.maxRowHeight < settings.rowHeight) {
+ settings.maxRowHeight = settings.rowHeight;
+ }
+
+ checkOrConvertNumber(settings, 'margins');
+
+ if (settings.lastRow !== 'nojustify' &&
+ settings.lastRow !== 'justify' &&
+ settings.lastRow !== 'hide') {
+ throw 'lastRow must be "nojustify", "justify" or "hide"';
+ }
+
+ checkOrConvertNumber(settings, 'justifyThreshold');
+ if (settings.justifyThreshold < 0 || settings.justifyThreshold > 1)
+ throw 'justifyThreshold must be in the interval [0,1]';
+ if (typeof settings.cssAnimation !== 'boolean') {
+ throw 'cssAnimation must be a boolean';
+ }
+
+ checkOrConvertNumber(settings.captionSettings, 'animationDuration');
+ checkOrConvertNumber(settings, 'imagesAnimationDuration');
+
+ checkOrConvertNumber(settings.captionSettings, 'visibleOpacity');
+ if (settings.captionSettings.visibleOpacity < 0 || settings.captionSettings.visibleOpacity > 1)
+ throw 'captionSettings.visibleOpacity must be in the interval [0, 1]';
+
+ checkOrConvertNumber(settings.captionSettings, 'nonVisibleOpacity');
+ if (settings.captionSettings.visibleOpacity < 0 || settings.captionSettings.visibleOpacity > 1)
+ throw 'captionSettings.nonVisibleOpacity must be in the interval [0, 1]';
+
+ if (typeof settings.fixedHeight !== 'boolean') {
+ throw 'fixedHeight must be a boolean';
+ }
+
+ if (typeof settings.captions !== 'boolean') {
+ throw 'captions must be a boolean';
+ }
+
+ checkOrConvertNumber(settings, 'refreshTime');
+
+ if (typeof settings.randomize !== 'boolean') {
+ throw 'randomize must be a boolean';
+ }
+
+ }
+
+ return this.each(function (index, gallery) {
+
+ var $gallery = $(gallery);
+ $gallery.addClass('justified-gallery');
+
+ var context = $gallery.data('jg.context');
+ if (typeof context === 'undefined') {
+
+ if (typeof arg !== 'undefined' && arg !== null && typeof arg !== 'object')
+ throw 'The argument must be an object';
+
+ // Spinner init
+ var $spinner = $('<div class="spinner"><span></span><span></span><span></span></div>');
+
+ //Context init
+ context = {
+ settings : $.extend({}, defaults, arg),
+ imgAnalyzerTimeout : null,
+ entries : null,
+ buildingRow : {
+ entriesBuff : [],
+ width : 0,
+ aspectRatio : 0
+ },
+ lastAnalyzedIndex : -1,
+ yield : {
+ every : 2, /* do a flush every context.yield.every flushes (
+ * must be greater than 1, else the analyzeImages will loop */
+ flushed : 0 //flushed rows without a yield
+ },
+ offY : 0,
+ spinner : {
+ active : false,
+ phase : 0,
+ timeslot : 150,
+ $el : $spinner,
+ $points : $spinner.find('span'),
+ intervalId : null
+ },
+ checkWidthIntervalId : null,
+ galleryWidth : $gallery.width(),
+ $gallery : $gallery
+ };
+
+ $gallery.data('jg.context', context);
+
+ } else if (arg === 'norewind') {
+ /* Hide the image of the buildingRow to prevent strange effects when the row will be
+ re-justified again */
+ for (var i = 0; i < context.buildingRow.entriesBuff.length; i++) {
+ hideImgImmediately(context.buildingRow.entriesBuff[i], context);
+ }
+ // In this case we don't rewind, and analyze all the images
+ } else {
+ context.settings = $.extend({}, context.settings, arg);
+ rewind(context);
+ }
+
+ checkSettings(context);
+
+ context.entries = $gallery.find('> a, > div:not(.spinner, #page-end)').toArray();
+ if (context.entries.length === 0) return;
+
+ // Randomize
+ if (context.settings.randomize) {
+ context.entries.sort(function () { return Math.random() * 2 - 1; });
+ $.each(context.entries, function () {
+ $(this).appendTo($gallery);
+ });
+ }
+
+ var imagesToLoad = false;
+ $.each(context.entries, function (index, entry) {
+ var $entry = $(entry);
+ var $image = $entry.find('img');
+
+ if ($image.data('jg.loaded') !== true && $image.data('jg.loaded') !== 'skipped') {
+
+ // Link Rel global overwrite
+ if (context.settings.rel !== null) $entry.attr('rel', context.settings.rel);
+
+ // Link Target global overwrite
+ if (context.settings.target !== null) $entry.attr('target', context.settings.target);
+
+ // Image src
+ var imageSrc = (typeof $image.data('safe-src') !== 'undefined') ?
+ $image.data('safe-src') : $image.attr('src');
+ $image.data('jg.originalSrc', imageSrc);
+ $image.attr('src', imageSrc);
+
+ var width = parseInt($image.attr('width'), 10);
+ var height = parseInt($image.attr('height'), 10);
+ if(context.settings.waitThumbnailsLoad !== true && !isNaN(width) && !isNaN(height)) {
+ $image.data('jg.imgw', width);
+ $image.data('jg.imgh', height);
+ $image.data('jg.loaded', 'skipped');
+ startImgAnalyzer(context, false);
+ return true;
+ }
+
+ $image.data('jg.loaded', false);
+ imagesToLoad = true;
+
+ // Spinner start
+ if (context.spinner.active === false) {
+ context.spinner.active = true;
+ $gallery.append(context.spinner.$el);
+ $gallery.height(context.offY + context.spinner.$el.innerHeight());
+ startLoadingSpinnerAnimation(context.spinner);
+ }
+
+ /* Check if the image is loaded or not using another image object.
+ We cannot use the 'complete' image property, because some browsers,
+ with a 404 set complete = true */
+ var loadImg = new Image();
+ var $loadImg = $(loadImg);
+ $loadImg.one('load', function imgLoaded () {
+ //DEBUG// console.log('img load (alt: ' + $image.attr('alt') + ')');
+ $image.off('load error');
+ $image.data('jg.imgw', loadImg.width);
+ $image.data('jg.imgh', loadImg.height);
+ $image.data('jg.loaded', true);
+ startImgAnalyzer(context, false);
+ });
+ $loadImg.one('error', function imgLoadError () {
+ //DEBUG// console.log('img error (alt: ' + $image.attr('alt') + ')');
+ $image.off('load error');
+ $image.data('jg.loaded', 'error');
+ startImgAnalyzer(context, false);
+ });
+ loadImg.src = imageSrc;
+
+ }
+
+ });
+
+ if (!imagesToLoad) startImgAnalyzer(context, false);
+ checkWidth(context);
+ });
+
+ };
+
+}(jQuery));
diff --git a/library/justifiedGallery/dist/js/jquery.justifiedGallery.min.js b/library/justifiedGallery/dist/js/jquery.justifiedGallery.min.js
new file mode 100644
index 000000000..2b4584466
--- /dev/null
+++ b/library/justifiedGallery/dist/js/jquery.justifiedGallery.min.js
@@ -0,0 +1,7 @@
+/*!
+ * Justified Gallery - v3.2.0
+ * http://miromannino.com/projects/justified-gallery/
+ * Copyright (c) 2014 Miro Mannino
+ * Licensed under the MIT license.
+ */
+!function(a){a.fn.justifiedGallery=function(b){function c(a,b,c){var d;return d=a>b?a:b,100>=d?c.settings.sizeRangeSuffixes.lt100:240>=d?c.settings.sizeRangeSuffixes.lt240:320>=d?c.settings.sizeRangeSuffixes.lt320:500>=d?c.settings.sizeRangeSuffixes.lt500:640>=d?c.settings.sizeRangeSuffixes.lt640:c.settings.sizeRangeSuffixes.lt1024}function d(b){var c=a(b.currentTarget).find(".caption");b.data.settings.cssAnimation?c.addClass("caption-visible").removeClass("caption-hidden"):c.stop().fadeTo(b.data.settings.captionSettings.animationDuration,b.data.settings.captionSettings.visibleOpacity)}function e(b){var c=a(b.currentTarget).find(".caption");b.data.settings.cssAnimation?c.removeClass("caption-visible").removeClass("caption-hidden"):c.stop().fadeTo(b.data.settings.captionSettings.animationDuration,b.data.settings.captionSettings.nonVisibleOpacity)}function f(b,f,g,h,i,j,k){var l=b.find("img");l.css("width",h),l.css("height",i),l.css("margin-left",-h/2),l.css("margin-top",-i/2),b.width(h),b.height(j),b.css("top",g),b.css("left",f);var m=l.attr("src"),n=m.replace(k.settings.extension,"").replace(k.usedSizeRangeRegExp,"")+c(h,i,k)+m.match(k.settings.extension)[0];l.one("error",function(){l.attr("src",l.data("jg.originalSrc"))});var o=function(){m!==n&&l.attr("src",n)};k.settings.cssAnimation?(b.addClass("entry-visible"),o()):b.stop().fadeTo(k.settings.imagesAnimationDuration,1,o);var p=b.data("jg.captionMouseEvents");if(k.settings.captions===!0){var q=b.find(".caption");if(0===q.length){var r=l.attr("alt");"undefined"==typeof r&&(r=b.attr("title")),"undefined"!=typeof r&&(q=a('<div class="caption">'+r+"</div>"),b.append(q))}0!==q.length&&(k.settings.cssAnimation||q.stop().fadeTo(k.settings.imagesAnimationDuration,k.settings.captionSettings.nonVisibleOpacity),"undefined"==typeof p&&(p={mouseenter:d,mouseleave:e},b.on("mouseenter",void 0,k,p.mouseenter),b.on("mouseleave",void 0,k,p.mouseleave),b.data("jg.captionMouseEvents",p)))}else"undefined"!=typeof p&&(b.off("mouseenter",void 0,k,p.mouseenter),b.off("mouseleave",void 0,k,p.mouseleave),b.removeData("jg.captionMouseEvents"))}function g(a,b){var c,d,e,f,g,h,i=!0,j=0,k=a.galleryWidth-(a.buildingRow.entriesBuff.length-1)*a.settings.margins,l=k/a.buildingRow.aspectRatio,m=a.buildingRow.width/k>a.settings.justifyThreshold;if(b&&"hide"===a.settings.lastRow&&!m){for(c=0;c<a.buildingRow.entriesBuff.length;c++)d=a.buildingRow.entriesBuff[c],a.settings.cssAnimation?d.removeClass("entry-visible"):d.stop().fadeTo(0,0);return-1}for(b&&"nojustify"===a.settings.lastRow&&!m&&(i=!1),c=0;c<a.buildingRow.entriesBuff.length;c++)e=a.buildingRow.entriesBuff[c].find("img"),f=e.data("jg.imgw")/e.data("jg.imgh"),i?(g=l*f,h=l):(g=a.settings.rowHeight*f,h=a.settings.rowHeight),e.data("jg.imgw",Math.ceil(g)),e.data("jg.imgh",Math.ceil(h)),(0===c||j>h)&&(j=h);return a.settings.fixedHeight&&j>a.settings.rowHeight&&(j=a.settings.rowHeight),j}function h(a){a.lastAnalyzedIndex=-1,a.buildingRow.entriesBuff=[],a.buildingRow.aspectRatio=0,a.buildingRow.width=0,a.offY=0,a.firstRowFlushed=!1}function i(a,b){var c,d,e,h=0;if(e=g(a,b),b&&"hide"===a.settings.lastRow&&-1===e)return a.buildingRow.entriesBuff=[],a.buildingRow.aspectRatio=0,void(a.buildingRow.width=0);a.settings.maxRowHeight>0&&a.settings.maxRowHeight<e?e=a.settings.maxRowHeight:0===a.settings.maxRowHeight&&1.5*a.settings.rowHeight<e&&(e=1.5*a.settings.rowHeight);for(var i=0;i<a.buildingRow.entriesBuff.length;i++)c=a.buildingRow.entriesBuff[i],d=c.find("img"),f(c,h,a.offY,d.data("jg.imgw"),d.data("jg.imgh"),e,a),h+=d.data("jg.imgw")+a.settings.margins;a.$gallery.height(a.offY+e+(a.spinner.active?a.spinner.$el.innerHeight():0)),b||(a.offY+=e+a.settings.margins,a.buildingRow.entriesBuff=[],a.buildingRow.aspectRatio=0,a.buildingRow.width=0,a.firstRowFlushed=!0,a.$gallery.trigger("jg.rowflush"))}function j(a){a.checkWidthIntervalId=setInterval(function(){var b=parseInt(a.$gallery.width(),10);a.galleryWidth!==b&&(a.galleryWidth=b,h(a),n(a,!0))},a.settings.refreshTime)}function k(a){clearInterval(a.intervalId),a.intervalId=setInterval(function(){a.phase<a.$points.length?a.$points.eq(a.phase).fadeTo(a.timeslot,1):a.$points.eq(a.phase-a.$points.length).fadeTo(a.timeslot,0),a.phase=(a.phase+1)%(2*a.$points.length)},a.timeslot)}function l(a){clearInterval(a.intervalId),a.intervalId=null}function m(a){a.yield.flushed=0,null!==a.imgAnalyzerTimeout&&clearTimeout(a.imgAnalyzerTimeout)}function n(a,b){m(a),a.imgAnalyzerTimeout=setTimeout(function(){o(a,b)},.001),o(a,b)}function o(b,c){for(var d,e=b.lastAnalyzedIndex+1;e<b.entries.length;e++){var f=a(b.entries[e]),g=f.find("img");if(g.data("jg.loaded")===!0){d=b.firstRowFlushed&&e>=b.entries.length-1;var h=b.galleryWidth-(b.buildingRow.entriesBuff.length-1)*b.settings.margins,j=g.data("jg.imgw")/g.data("jg.imgh");if(h/(b.buildingRow.aspectRatio+j)<b.settings.rowHeight&&(i(b,d),++b.yield.flushed>=b.yield.every))return void n(b,c);b.buildingRow.entriesBuff.push(f),b.buildingRow.aspectRatio+=j,b.buildingRow.width+=j*b.settings.rowHeight,b.lastAnalyzedIndex=e}else if("error"!==g.data("jg.loaded"))return}b.buildingRow.entriesBuff.length>0&&i(b,b.firstRowFlushed),b.spinner.active&&(b.spinner.active=!1,b.$gallery.height(b.$gallery.height()-b.spinner.$el.innerHeight()),b.spinner.$el.detach(),l(b.spinner)),m(b),b.$gallery.trigger(c?"jg.resize":"jg.complete")}function p(a){function b(b){if("string"!=typeof a.settings.sizeRangeSuffixes[b])throw"sizeRangeSuffixes."+b+" must be a string"}function c(a,b){if("string"==typeof a[b]){if(a[b]=parseFloat(a[b],10),isNaN(a[b]))throw"invalid number for "+b}else{if("number"!=typeof a[b])throw b+" must be a number";if(isNaN(a[b]))throw"invalid number for "+b}}if("object"!=typeof a.settings.sizeRangeSuffixes)throw"sizeRangeSuffixes must be defined and must be an object";if(b("lt100"),b("lt240"),b("lt320"),b("lt500"),b("lt640"),b("lt1024"),c(a.settings,"rowHeight"),c(a.settings,"maxRowHeight"),c(a.settings,"margins"),"nojustify"!==a.settings.lastRow&&"justify"!==a.settings.lastRow&&"hide"!==a.settings.lastRow)throw'lastRow must be "nojustify", "justify" or "hide"';if(c(a.settings,"justifyThreshold"),a.settings.justifyThreshold<0||a.settings.justifyThreshold>1)throw"justifyThreshold must be in the interval [0,1]";if("boolean"!=typeof a.settings.cssAnimation)throw"cssAnimation must be a boolean";if(c(a.settings.captionSettings,"animationDuration"),c(a.settings,"imagesAnimationDuration"),c(a.settings.captionSettings,"visibleOpacity"),a.settings.captionSettings.visibleOpacity<0||a.settings.captionSettings.visibleOpacity>1)throw"captionSettings.visibleOpacity must be in the interval [0, 1]";if(c(a.settings.captionSettings,"nonVisibleOpacity"),a.settings.captionSettings.visibleOpacity<0||a.settings.captionSettings.visibleOpacity>1)throw"captionSettings.nonVisibleOpacity must be in the interval [0, 1]";if("boolean"!=typeof a.settings.fixedHeight)throw"fixedHeight must be a boolean";if("boolean"!=typeof a.settings.captions)throw"captions must be a boolean";if(c(a.settings,"refreshTime"),"boolean"!=typeof a.settings.randomize)throw"randomize must be a boolean"}var q={sizeRangeSuffixes:{lt100:"_t",lt240:"_m",lt320:"_n",lt500:"",lt640:"_z",lt1024:"_b"},rowHeight:120,maxRowHeight:0,margins:1,lastRow:"nojustify",justifyThreshold:.75,fixedHeight:!1,captions:!0,cssAnimation:!1,imagesAnimationDuration:300,captionSettings:{animationDuration:500,visibleOpacity:.7,nonVisibleOpacity:0},rel:null,target:null,extension:/\.[^.]+$/,refreshTime:250,randomize:!1};return this.each(function(c,d){var e=a(d);e.addClass("justified-gallery");var f=e.data("jg.context");if("undefined"==typeof f){if("undefined"!=typeof b&&null!==b&&"object"!=typeof b)throw"The argument must be an object";var g=a('<div class="spinner"><span></span><span></span><span></span></div>');f={settings:a.extend({},q,b),imgAnalyzerTimeout:null,entries:null,buildingRow:{entriesBuff:[],width:0,aspectRatio:0},lastAnalyzedIndex:-1,firstRowFlushed:!1,"yield":{every:2,flushed:0},offY:0,spinner:{active:!1,phase:0,timeslot:150,$el:g,$points:g.find("span"),intervalId:null},checkWidthIntervalId:null,galleryWidth:e.width(),$gallery:e},e.data("jg.context",f)}else"norewind"===b||(f.settings=a.extend({},f.settings,b),h(f));if(p(f),f.entries=e.find("> a, > div").toArray(),0!==f.entries.length){f.settings.randomize&&(f.entries.sort(function(){return 2*Math.random()-1}),a.each(f.entries,function(){a(this).appendTo(e)})),f.usedSizeRangeRegExp=new RegExp("("+f.settings.sizeRangeSuffixes.lt100+"|"+f.settings.sizeRangeSuffixes.lt240+"|"+f.settings.sizeRangeSuffixes.lt320+"|"+f.settings.sizeRangeSuffixes.lt500+"|"+f.settings.sizeRangeSuffixes.lt640+"|"+f.settings.sizeRangeSuffixes.lt1024+")$"),f.settings.maxRowHeight>0&&f.settings.maxRowHeight<f.settings.rowHeight&&(f.settings.maxRowHeight=f.settings.rowHeight);var i=!1;a.each(f.entries,function(b,c){var d=a(c),g=d.find("img");if(g.data("jg.loaded")!==!0){g.data("jg.loaded",!1),i=!0,f.spinner.active===!1&&(f.spinner.active=!0,e.append(f.spinner.$el),e.height(f.offY+f.spinner.$el.innerHeight()),k(f.spinner)),null!==f.settings.rel&&d.attr("rel",f.settings.rel),null!==f.settings.target&&d.attr("target",f.settings.target);var h="undefined"!=typeof g.data("safe-src")?g.data("safe-src"):g.attr("src");g.data("jg.originalSrc",h),g.attr("src",h);var j=new Image,l=a(j);l.one("load",function(){g.off("load error"),g.data("jg.imgw",j.width),g.data("jg.imgh",j.height),g.data("jg.loaded",!0),n(f,!1)}),l.one("error",function(){g.off("load error"),g.data("jg.loaded","error"),n(f,!1)}),j.src=h}}),i||n(f,!1),j(f)}})}}(jQuery); \ No newline at end of file
diff --git a/library/oauth/LICENSE b/library/oauth/LICENSE
new file mode 100644
index 000000000..7078ba251
--- /dev/null
+++ b/library/oauth/LICENSE
@@ -0,0 +1,37 @@
+PHP OAuth API - Access API authorized by the users
+using the OAuth protocol
+
+This LICENSE is in the BSD license style.
+
+License Version Control:
+@(#) $Id: LICENSE,v 1.2 2013/02/11 05:17:53 mlemos Exp $
+
+Copyright (c) 2012-2013, Manuel Lemos
+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 Manuel Lemos nor the names of his 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 REGENTS 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.
diff --git a/library/oauth/LICENSE.txt b/library/oauth/LICENSE.txt
new file mode 100644
index 000000000..29e83e173
--- /dev/null
+++ b/library/oauth/LICENSE.txt
@@ -0,0 +1,36 @@
+HTTP client PHP class
+
+This LICENSE is in the BSD license style.
+
+License Version Control:
+@(#) $Id: LICENSE.txt,v 1.1 2006/04/17 19:44:04 mlemos Exp $
+
+Copyright (c) 1999 - 2006, Manuel Lemos
+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 Manuel Lemos nor the names of his 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 REGENTS 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.
diff --git a/library/oauth/http.php b/library/oauth/http.php
new file mode 100644
index 000000000..cb336fcfa
--- /dev/null
+++ b/library/oauth/http.php
@@ -0,0 +1,2092 @@
+<?php
+/*
+ * http.php
+ *
+ * @(#) $Header: /opt2/ena/metal/http/http.php,v 1.90 2013/02/20 11:45:28 mlemos Exp $
+ *
+ */
+
+define('HTTP_CLIENT_ERROR_UNSPECIFIED_ERROR', -1);
+define('HTTP_CLIENT_ERROR_NO_ERROR', 0);
+define('HTTP_CLIENT_ERROR_INVALID_SERVER_ADDRESS', 1);
+define('HTTP_CLIENT_ERROR_CANNOT_CONNECT', 2);
+define('HTTP_CLIENT_ERROR_COMMUNICATION_FAILURE', 3);
+define('HTTP_CLIENT_ERROR_CANNOT_ACCESS_LOCAL_FILE', 4);
+define('HTTP_CLIENT_ERROR_PROTOCOL_FAILURE', 5);
+define('HTTP_CLIENT_ERROR_INVALID_PARAMETERS', 6);
+
+class http_class
+{
+ var $host_name="";
+ var $host_port=0;
+ var $proxy_host_name="";
+ var $proxy_host_port=80;
+ var $socks_host_name = '';
+ var $socks_host_port = 1080;
+ var $socks_version = '5';
+
+ var $protocol="http";
+ var $request_method="GET";
+ var $user_agent='httpclient (http://www.phpclasses.org/httpclient $Revision: 1.90 $)';
+ var $accept='';
+ var $authentication_mechanism="";
+ var $user;
+ var $password;
+ var $realm;
+ var $workstation;
+ var $proxy_authentication_mechanism="";
+ var $proxy_user;
+ var $proxy_password;
+ var $proxy_realm;
+ var $proxy_workstation;
+ var $request_uri="";
+ var $request="";
+ var $request_headers=array();
+ var $request_user;
+ var $request_password;
+ var $request_realm;
+ var $request_workstation;
+ var $proxy_request_user;
+ var $proxy_request_password;
+ var $proxy_request_realm;
+ var $proxy_request_workstation;
+ var $request_body="";
+ var $request_arguments=array();
+ var $protocol_version="1.1";
+ var $timeout=0;
+ var $data_timeout=0;
+ var $debug=0;
+ var $log_debug=0;
+ var $debug_response_body=1;
+ var $html_debug=0;
+ var $support_cookies=1;
+ var $cookies=array();
+ var $error="";
+ var $error_code = HTTP_CLIENT_ERROR_NO_ERROR;
+ var $exclude_address="";
+ var $follow_redirect=0;
+ var $redirection_limit=5;
+ var $response_status="";
+ var $response_message="";
+ var $file_buffer_length=8000;
+ var $force_multipart_form_post=0;
+ var $prefer_curl = 0;
+ var $keep_alive = 1;
+ var $sasl_authenticate = 1;
+
+ /* private variables - DO NOT ACCESS */
+
+ var $state="Disconnected";
+ var $use_curl=0;
+ var $connection=0;
+ var $content_length=0;
+ var $response="";
+ var $read_response=0;
+ var $read_length=0;
+ var $request_host="";
+ var $next_token="";
+ var $redirection_level=0;
+ var $chunked=0;
+ var $remaining_chunk=0;
+ var $last_chunk_read=0;
+ var $months=array(
+ "Jan"=>"01",
+ "Feb"=>"02",
+ "Mar"=>"03",
+ "Apr"=>"04",
+ "May"=>"05",
+ "Jun"=>"06",
+ "Jul"=>"07",
+ "Aug"=>"08",
+ "Sep"=>"09",
+ "Oct"=>"10",
+ "Nov"=>"11",
+ "Dec"=>"12");
+ var $session='';
+ var $connection_close=0;
+ var $force_close = 0;
+ var $connected_host = '';
+ var $connected_port = -1;
+ var $connected_ssl = 0;
+
+ /* Private methods - DO NOT CALL */
+
+ Function Tokenize($string,$separator="")
+ {
+ if(!strcmp($separator,""))
+ {
+ $separator=$string;
+ $string=$this->next_token;
+ }
+ for($character=0;$character<strlen($separator);$character++)
+ {
+ if(GetType($position=strpos($string,$separator[$character]))=="integer")
+ $found=(IsSet($found) ? min($found,$position) : $position);
+ }
+ if(IsSet($found))
+ {
+ $this->next_token=substr($string,$found+1);
+ return(substr($string,0,$found));
+ }
+ else
+ {
+ $this->next_token="";
+ return($string);
+ }
+ }
+
+ Function CookieEncode($value, $name)
+ {
+ return($name ? str_replace("=", "%25", $value) : str_replace(";", "%3B", $value));
+ }
+
+ Function SetError($error, $error_code = HTTP_CLIENT_ERROR_UNSPECIFIED_ERROR)
+ {
+ $this->error_code = $error_code;
+ return($this->error=$error);
+ }
+
+ Function SetPHPError($error, &$php_error_message, $error_code = HTTP_CLIENT_ERROR_UNSPECIFIED_ERROR)
+ {
+ if(IsSet($php_error_message)
+ && strlen($php_error_message))
+ $error.=": ".$php_error_message;
+ return($this->SetError($error, $error_code));
+ }
+
+ Function SetDataAccessError($error,$check_connection=0)
+ {
+ $this->error=$error;
+ $this->error_code = HTTP_CLIENT_ERROR_COMMUNICATION_FAILURE;
+ if(!$this->use_curl
+ && function_exists("socket_get_status"))
+ {
+ $status=socket_get_status($this->connection);
+ if($status["timed_out"])
+ $this->error.=": data access time out";
+ elseif($status["eof"])
+ {
+ if($check_connection)
+ $this->error="";
+ else
+ $this->error.=": the server disconnected";
+ }
+ }
+ }
+
+ Function OutputDebug($message)
+ {
+ if($this->log_debug)
+ error_log($message);
+ else
+ {
+ $message.="\n";
+ if($this->html_debug)
+ $message=str_replace("\n","<br />\n",HtmlEntities($message));
+ echo $message;
+ flush();
+ }
+ }
+
+ Function GetLine()
+ {
+ for($line="";;)
+ {
+ if($this->use_curl)
+ {
+ $eol=strpos($this->response,"\n",$this->read_response);
+ $data=($eol ? substr($this->response,$this->read_response,$eol+1-$this->read_response) : "");
+ $this->read_response+=strlen($data);
+ }
+ else
+ {
+ if(feof($this->connection))
+ {
+ $this->SetDataAccessError("reached the end of data while reading from the HTTP server connection");
+ return(0);
+ }
+ $data=fgets($this->connection,100);
+ }
+ if(GetType($data)!="string"
+ || strlen($data)==0)
+ {
+ $this->SetDataAccessError("it was not possible to read line from the HTTP server");
+ return(0);
+ }
+ $line.=$data;
+ $length=strlen($line);
+ if($length
+ && !strcmp(substr($line,$length-1,1),"\n"))
+ {
+ $length-=(($length>=2 && !strcmp(substr($line,$length-2,1),"\r")) ? 2 : 1);
+ $line=substr($line,0,$length);
+ if($this->debug)
+ $this->OutputDebug("S $line");
+ return($line);
+ }
+ }
+ }
+
+ Function PutLine($line)
+ {
+ if($this->debug)
+ $this->OutputDebug("C $line");
+ if(!fputs($this->connection,$line."\r\n"))
+ {
+ $this->SetDataAccessError("it was not possible to send a line to the HTTP server");
+ return(0);
+ }
+ return(1);
+ }
+
+ Function PutData($data)
+ {
+ if(strlen($data))
+ {
+ if($this->debug)
+ $this->OutputDebug('C '.$data);
+ if(!fputs($this->connection,$data))
+ {
+ $this->SetDataAccessError("it was not possible to send data to the HTTP server");
+ return(0);
+ }
+ }
+ return(1);
+ }
+
+ Function FlushData()
+ {
+ if(!fflush($this->connection))
+ {
+ $this->SetDataAccessError("it was not possible to send data to the HTTP server");
+ return(0);
+ }
+ return(1);
+ }
+
+ Function ReadChunkSize()
+ {
+ if($this->remaining_chunk==0)
+ {
+ $debug=$this->debug;
+ if(!$this->debug_response_body)
+ $this->debug=0;
+ $line=$this->GetLine();
+ $this->debug=$debug;
+ if(GetType($line)!="string")
+ return($this->SetError("could not read chunk start: ".$this->error, $this->error_code));
+ $this->remaining_chunk=hexdec($line);
+ if($this->remaining_chunk == 0)
+ {
+ if(!$this->debug_response_body)
+ $this->debug=0;
+ $line=$this->GetLine();
+ $this->debug=$debug;
+ if(GetType($line)!="string")
+ return($this->SetError("could not read chunk end: ".$this->error, $this->error_code));
+ }
+ }
+ return("");
+ }
+
+ Function ReadBytes($length)
+ {
+ if($this->use_curl)
+ {
+ $bytes=substr($this->response,$this->read_response,min($length,strlen($this->response)-$this->read_response));
+ $this->read_response+=strlen($bytes);
+ if($this->debug
+ && $this->debug_response_body
+ && strlen($bytes))
+ $this->OutputDebug("S ".$bytes);
+ }
+ else
+ {
+ if($this->chunked)
+ {
+ for($bytes="",$remaining=$length;$remaining;)
+ {
+ if(strlen($this->ReadChunkSize()))
+ return("");
+ if($this->remaining_chunk==0)
+ {
+ $this->last_chunk_read=1;
+ break;
+ }
+ $ask=min($this->remaining_chunk,$remaining);
+ $chunk=@fread($this->connection,$ask);
+ $read=strlen($chunk);
+ if($read==0)
+ {
+ $this->SetDataAccessError("it was not possible to read data chunk from the HTTP server");
+ return("");
+ }
+ if($this->debug
+ && $this->debug_response_body)
+ $this->OutputDebug("S ".$chunk);
+ $bytes.=$chunk;
+ $this->remaining_chunk-=$read;
+ $remaining-=$read;
+ if($this->remaining_chunk==0)
+ {
+ if(feof($this->connection))
+ return($this->SetError("reached the end of data while reading the end of data chunk mark from the HTTP server", HTTP_CLIENT_ERROR_PROTOCOL_FAILURE));
+ $data=@fread($this->connection,2);
+ if(strcmp($data,"\r\n"))
+ {
+ $this->SetDataAccessError("it was not possible to read end of data chunk from the HTTP server");
+ return("");
+ }
+ }
+ }
+ }
+ else
+ {
+ $bytes=@fread($this->connection,$length);
+ if(strlen($bytes))
+ {
+ if($this->debug
+ && $this->debug_response_body)
+ $this->OutputDebug("S ".$bytes);
+ }
+ else
+ $this->SetDataAccessError("it was not possible to read data from the HTTP server", $this->connection_close);
+ }
+ }
+ return($bytes);
+ }
+
+ Function EndOfInput()
+ {
+ if($this->use_curl)
+ return($this->read_response>=strlen($this->response));
+ if($this->chunked)
+ return($this->last_chunk_read);
+ if($this->content_length_set)
+ return($this->content_length <= $this->read_length);
+ return(feof($this->connection));
+ }
+
+ Function Resolve($domain, &$ip, $server_type)
+ {
+ if(preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/',$domain))
+ $ip=$domain;
+ else
+ {
+ if($this->debug)
+ $this->OutputDebug('Resolving '.$server_type.' server domain "'.$domain.'"...');
+ if(!strcmp($ip=@gethostbyname($domain),$domain))
+ $ip="";
+ }
+ if(strlen($ip)==0
+ || (strlen($this->exclude_address)
+ && !strcmp(@gethostbyname($this->exclude_address),$ip)))
+ return($this->SetError("could not resolve the host domain \"".$domain."\"", HTTP_CLIENT_ERROR_INVALID_SERVER_ADDRESS));
+ return('');
+ }
+
+ Function Connect($host_name, $host_port, $ssl, $server_type = 'HTTP')
+ {
+ $domain=$host_name;
+ $port = $host_port;
+ if(strlen($error = $this->Resolve($domain, $ip, $server_type)))
+ return($error);
+ if(strlen($this->socks_host_name))
+ {
+ switch($this->socks_version)
+ {
+ case '4':
+ $version = 4;
+ break;
+ case '5':
+ $version = 5;
+ break;
+ default:
+ return('it was not specified a supported SOCKS protocol version');
+ break;
+ }
+ $host_ip = $ip;
+ $port = $this->socks_host_port;
+ $host_server_type = $server_type;
+ $server_type = 'SOCKS';
+ if(strlen($error = $this->Resolve($this->socks_host_name, $ip, $server_type)))
+ return($error);
+ }
+ if($this->debug)
+ $this->OutputDebug('Connecting to '.$server_type.' server IP '.$ip.' port '.$port.'...');
+ if($ssl)
+ $ip="ssl://".$host_name;
+ if(($this->connection=($this->timeout ? @fsockopen($ip, $port, $errno, $error, $this->timeout) : @fsockopen($ip, $port, $errno)))==0)
+ {
+ $error_code = HTTP_CLIENT_ERROR_CANNOT_CONNECT;
+ switch($errno)
+ {
+ case -3:
+ return($this->SetError("socket could not be created", $error_code));
+ case -4:
+ return($this->SetError("dns lookup on hostname \"".$host_name."\" failed", $error_code));
+ case -5:
+ return($this->SetError("connection refused or timed out", $error_code));
+ case -6:
+ return($this->SetError("fdopen() call failed", $error_code));
+ case -7:
+ return($this->SetError("setvbuf() call failed", $error_code));
+ default:
+ return($this->SetPHPError($errno." could not connect to the host \"".$host_name."\"",$php_errormsg, $error_code));
+ }
+ }
+ else
+ {
+ if($this->data_timeout
+ && function_exists("socket_set_timeout"))
+ socket_set_timeout($this->connection,$this->data_timeout,0);
+ if(strlen($this->socks_host_name))
+ {
+ if($this->debug)
+ $this->OutputDebug('Connected to the SOCKS server '.$this->socks_host_name);
+ $send_error = 'it was not possible to send data to the SOCKS server';
+ $receive_error = 'it was not possible to receive data from the SOCKS server';
+ switch($version)
+ {
+ case 4:
+ $command = 1;
+ $user = '';
+ if(!fputs($this->connection, chr($version).chr($command).pack('nN', $host_port, ip2long($host_ip)).$user.Chr(0)))
+ $error = $this->SetDataAccessError($send_error);
+ else
+ {
+ $response = fgets($this->connection, 9);
+ if(strlen($response) != 8)
+ $error = $this->SetDataAccessError($receive_error);
+ else
+ {
+ $socks_errors = array(
+ "\x5a"=>'',
+ "\x5b"=>'request rejected',
+ "\x5c"=>'request failed because client is not running identd (or not reachable from the server)',
+ "\x5d"=>'request failed because client\'s identd could not confirm the user ID string in the request',
+ );
+ $error_code = $response[1];
+ $error = (IsSet($socks_errors[$error_code]) ? $socks_errors[$error_code] : 'unknown');
+ if(strlen($error))
+ $error = 'SOCKS error: '.$error;
+ }
+ }
+ break;
+ case 5:
+ if($this->debug)
+ $this->OutputDebug('Negotiating the authentication method ...');
+ $methods = 1;
+ $method = 0;
+ if(!fputs($this->connection, chr($version).chr($methods).chr($method)))
+ $error = $this->SetDataAccessError($send_error);
+ else
+ {
+ $response = fgets($this->connection, 3);
+ if(strlen($response) != 2)
+ $error = $this->SetDataAccessError($receive_error);
+ elseif(Ord($response[1]) != $method)
+ $error = 'the SOCKS server requires an authentication method that is not yet supported';
+ else
+ {
+ if($this->debug)
+ $this->OutputDebug('Connecting to '.$host_server_type.' server IP '.$host_ip.' port '.$host_port.'...');
+ $command = 1;
+ $address_type = 1;
+ if(!fputs($this->connection, chr($version).chr($command)."\x00".chr($address_type).pack('Nn', ip2long($host_ip), $host_port)))
+ $error = $this->SetDataAccessError($send_error);
+ else
+ {
+ $response = fgets($this->connection, 11);
+ if(strlen($response) != 10)
+ $error = $this->SetDataAccessError($receive_error);
+ else
+ {
+ $socks_errors = array(
+ "\x00"=>'',
+ "\x01"=>'general SOCKS server failure',
+ "\x02"=>'connection not allowed by ruleset',
+ "\x03"=>'Network unreachable',
+ "\x04"=>'Host unreachable',
+ "\x05"=>'Connection refused',
+ "\x06"=>'TTL expired',
+ "\x07"=>'Command not supported',
+ "\x08"=>'Address type not supported'
+ );
+ $error_code = $response[1];
+ $error = (IsSet($socks_errors[$error_code]) ? $socks_errors[$error_code] : 'unknown');
+ if(strlen($error))
+ $error = 'SOCKS error: '.$error;
+ }
+ }
+ }
+ }
+ break;
+ default:
+ $error = 'support for SOCKS protocol version '.$this->socks_version.' is not yet implemented';
+ break;
+ }
+ if(strlen($error))
+ {
+ fclose($this->connection);
+ return($error);
+ }
+ }
+ if($this->debug)
+ $this->OutputDebug("Connected to $host_name");
+ if(strlen($this->proxy_host_name)
+ && !strcmp(strtolower($this->protocol), 'https'))
+ {
+ if(function_exists('stream_socket_enable_crypto')
+ && in_array('ssl', stream_get_transports()))
+ $this->state = "ConnectedToProxy";
+ else
+ {
+ $this->OutputDebug("It is not possible to start SSL after connecting to the proxy server. If the proxy refuses to forward the SSL request, you may need to upgrade to PHP 5.1 or later with OpenSSL support enabled.");
+ $this->state="Connected";
+ }
+ }
+ else
+ $this->state="Connected";
+ return("");
+ }
+ }
+
+ Function Disconnect()
+ {
+ if($this->debug)
+ $this->OutputDebug("Disconnected from ".$this->connected_host);
+ if($this->use_curl)
+ {
+ curl_close($this->connection);
+ $this->response="";
+ }
+ else
+ fclose($this->connection);
+ $this->state="Disconnected";
+ return("");
+ }
+
+ /* Public methods */
+
+ Function GetRequestArguments($url, &$arguments)
+ {
+ $this->error = '';
+ $this->error_code = HTTP_CLIENT_ERROR_NO_ERROR;
+ $arguments=array();
+ $url = str_replace(' ', '%20', $url);
+ $parameters=@parse_url($url);
+ if(!$parameters)
+ return($this->SetError("it was not specified a valid URL", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ if(!IsSet($parameters["scheme"]))
+ return($this->SetError("it was not specified the protocol type argument", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ switch(strtolower($parameters["scheme"]))
+ {
+ case "http":
+ case "https":
+ $arguments["Protocol"]=$parameters["scheme"];
+ break;
+ default:
+ return($parameters["scheme"]." connection scheme is not yet supported");
+ }
+ if(!IsSet($parameters["host"]))
+ return($this->SetError("it was not specified the connection host argument", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ $arguments["HostName"]=$parameters["host"];
+ $arguments["Headers"]=array("Host"=>$parameters["host"].(IsSet($parameters["port"]) ? ":".$parameters["port"] : ""));
+ if(IsSet($parameters["user"]))
+ {
+ $arguments["AuthUser"]=UrlDecode($parameters["user"]);
+ if(!IsSet($parameters["pass"]))
+ $arguments["AuthPassword"]="";
+ }
+ if(IsSet($parameters["pass"]))
+ {
+ if(!IsSet($parameters["user"]))
+ $arguments["AuthUser"]="";
+ $arguments["AuthPassword"]=UrlDecode($parameters["pass"]);
+ }
+ if(IsSet($parameters["port"]))
+ {
+ if(strcmp($parameters["port"],strval(intval($parameters["port"]))))
+ return($this->SetError("it was not specified a valid connection host argument", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ $arguments["HostPort"]=intval($parameters["port"]);
+ }
+ else
+ $arguments["HostPort"]=0;
+ $arguments["RequestURI"]=(IsSet($parameters["path"]) ? $parameters["path"] : "/").(IsSet($parameters["query"]) ? "?".$parameters["query"] : "");
+ if(strlen($this->user_agent))
+ $arguments["Headers"]["User-Agent"]=$this->user_agent;
+ if(strlen($this->accept))
+ $arguments["Headers"]["Accept"]=$this->accept;
+ return("");
+ }
+
+ Function Open($arguments)
+ {
+ if(strlen($this->error))
+ return($this->error);
+ $error_code = HTTP_CLIENT_ERROR_UNSPECIFIED_ERROR;
+ if(IsSet($arguments["HostName"]))
+ $this->host_name=$arguments["HostName"];
+ if(IsSet($arguments["HostPort"]))
+ $this->host_port=$arguments["HostPort"];
+ if(IsSet($arguments["ProxyHostName"]))
+ $this->proxy_host_name=$arguments["ProxyHostName"];
+ if(IsSet($arguments["ProxyHostPort"]))
+ $this->proxy_host_port=$arguments["ProxyHostPort"];
+ if(IsSet($arguments["SOCKSHostName"]))
+ $this->socks_host_name=$arguments["SOCKSHostName"];
+ if(IsSet($arguments["SOCKSHostPort"]))
+ $this->socks_host_port=$arguments["SOCKSHostPort"];
+ if(IsSet($arguments["SOCKSVersion"]))
+ $this->socks_version=$arguments["SOCKSVersion"];
+ if(IsSet($arguments["Protocol"]))
+ $this->protocol=$arguments["Protocol"];
+ switch(strtolower($this->protocol))
+ {
+ case "http":
+ $default_port=80;
+ break;
+ case "https":
+ $default_port=443;
+ break;
+ default:
+ return($this->SetError("it was not specified a valid connection protocol", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ }
+ if(strlen($this->proxy_host_name)==0)
+ {
+ if(strlen($this->host_name)==0)
+ return($this->SetError("it was not specified a valid hostname", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ $host_name=$this->host_name;
+ $host_port=($this->host_port ? $this->host_port : $default_port);
+ $server_type = 'HTTP';
+ }
+ else
+ {
+ $host_name=$this->proxy_host_name;
+ $host_port=$this->proxy_host_port;
+ $server_type = 'HTTP proxy';
+ }
+ $ssl=(strtolower($this->protocol)=="https" && strlen($this->proxy_host_name)==0);
+ if($ssl
+ && strlen($this->socks_host_name))
+ return($this->SetError('establishing SSL connections via a SOCKS server is not yet supported', HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ $this->use_curl=($ssl && $this->prefer_curl && function_exists("curl_init"));
+ switch($this->state)
+ {
+ case 'Connected':
+ if(!strcmp($host_name, $this->connected_host)
+ && intval($host_port) == $this->connected_port
+ && intval($ssl) == $this->connected_ssl)
+ {
+ if($this->debug)
+ $this->OutputDebug("Reusing connection to ".$this->connected_host);
+ return('');
+ }
+ if(strlen($error = $this->Disconnect()))
+ return($error);
+ case "Disconnected":
+ break;
+ default:
+ return("1 already connected");
+ }
+ if($this->debug)
+ $this->OutputDebug("Connecting to ".$this->host_name);
+ if($this->use_curl)
+ {
+ $error=(($this->connection=curl_init($this->protocol."://".$this->host_name.($host_port==$default_port ? "" : ":".strval($host_port))."/")) ? "" : "Could not initialize a CURL session");
+ if(strlen($error)==0)
+ {
+ if(IsSet($arguments["SSLCertificateFile"]))
+ curl_setopt($this->connection,CURLOPT_SSLCERT,$arguments["SSLCertificateFile"]);
+ if(IsSet($arguments["SSLCertificatePassword"]))
+ curl_setopt($this->connection,CURLOPT_SSLCERTPASSWD,$arguments["SSLCertificatePassword"]);
+ if(IsSet($arguments["SSLKeyFile"]))
+ curl_setopt($this->connection,CURLOPT_SSLKEY,$arguments["SSLKeyFile"]);
+ if(IsSet($arguments["SSLKeyPassword"]))
+ curl_setopt($this->connection,CURLOPT_SSLKEYPASSWD,$arguments["SSLKeyPassword"]);
+ }
+ $this->state="Connected";
+ }
+ else
+ {
+ $error="";
+ if(strlen($this->proxy_host_name)
+ && (IsSet($arguments["SSLCertificateFile"])
+ || IsSet($arguments["SSLCertificateFile"])))
+ $error="establishing SSL connections using certificates or private keys via non-SSL proxies is not supported";
+ else
+ {
+ if($ssl)
+ {
+ if(IsSet($arguments["SSLCertificateFile"]))
+ $error="establishing SSL connections using certificates is only supported when the cURL extension is enabled";
+ elseif(IsSet($arguments["SSLKeyFile"]))
+ $error="establishing SSL connections using a private key is only supported when the cURL extension is enabled";
+ else
+ {
+ $version=explode(".",function_exists("phpversion") ? phpversion() : "3.0.7");
+ $php_version=intval($version[0])*1000000+intval($version[1])*1000+intval($version[2]);
+ if($php_version<4003000)
+ $error="establishing SSL connections requires at least PHP version 4.3.0 or having the cURL extension enabled";
+ elseif(!function_exists("extension_loaded")
+ || !extension_loaded("openssl"))
+ $error="establishing SSL connections requires the OpenSSL extension enabled";
+ }
+ }
+ if(strlen($error)==0)
+ {
+ $error=$this->Connect($host_name, $host_port, $ssl, $server_type);
+ $error_code = $this->error_code;
+ }
+ }
+ }
+ if(strlen($error))
+ return($this->SetError($error, $error_code));
+ $this->session=md5(uniqid(""));
+ $this->connected_host = $host_name;
+ $this->connected_port = intval($host_port);
+ $this->connected_ssl = intval($ssl);
+ return("");
+ }
+
+ Function Close($force = 0)
+ {
+ if($this->state=="Disconnected")
+ return("1 already disconnected");
+ if(!$this->force_close
+ && $this->keep_alive
+ && !$force
+ && $this->state == 'ResponseReceived')
+ {
+ if($this->debug)
+ $this->OutputDebug('Keeping the connection alive to '.$this->connected_host);
+ $this->state = 'Connected';
+ return('');
+ }
+ return($this->Disconnect());
+ }
+
+ Function PickCookies(&$cookies,$secure)
+ {
+ if(IsSet($this->cookies[$secure]))
+ {
+ $now=gmdate("Y-m-d H-i-s");
+ for($domain=0,Reset($this->cookies[$secure]);$domain<count($this->cookies[$secure]);Next($this->cookies[$secure]),$domain++)
+ {
+ $domain_pattern=Key($this->cookies[$secure]);
+ $match=strlen($this->request_host)-strlen($domain_pattern);
+ if($match>=0
+ && !strcmp($domain_pattern,substr($this->request_host,$match))
+ && ($match==0
+ || $domain_pattern[0]=="."
+ || $this->request_host[$match-1]=="."))
+ {
+ for(Reset($this->cookies[$secure][$domain_pattern]),$path_part=0;$path_part<count($this->cookies[$secure][$domain_pattern]);Next($this->cookies[$secure][$domain_pattern]),$path_part++)
+ {
+ $path=Key($this->cookies[$secure][$domain_pattern]);
+ if(strlen($this->request_uri)>=strlen($path)
+ && substr($this->request_uri,0,strlen($path))==$path)
+ {
+ for(Reset($this->cookies[$secure][$domain_pattern][$path]),$cookie=0;$cookie<count($this->cookies[$secure][$domain_pattern][$path]);Next($this->cookies[$secure][$domain_pattern][$path]),$cookie++)
+ {
+ $cookie_name=Key($this->cookies[$secure][$domain_pattern][$path]);
+ $expires=$this->cookies[$secure][$domain_pattern][$path][$cookie_name]["expires"];
+ if($expires==""
+ || strcmp($now,$expires)<0)
+ $cookies[$cookie_name]=$this->cookies[$secure][$domain_pattern][$path][$cookie_name];
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ Function GetFileDefinition($file, &$definition)
+ {
+ $name="";
+ if(IsSet($file["FileName"]))
+ $name=basename($file["FileName"]);
+ if(IsSet($file["Name"]))
+ $name=$file["Name"];
+ if(strlen($name)==0)
+ return("it was not specified the file part name");
+ if(IsSet($file["Content-Type"]))
+ {
+ $content_type=$file["Content-Type"];
+ $type=$this->Tokenize(strtolower($content_type),"/");
+ $sub_type=$this->Tokenize("");
+ switch($type)
+ {
+ case "text":
+ case "image":
+ case "audio":
+ case "video":
+ case "application":
+ case "message":
+ break;
+ case "automatic":
+ switch($sub_type)
+ {
+ case "name":
+ switch(GetType($dot=strrpos($name,"."))=="integer" ? strtolower(substr($name,$dot)) : "")
+ {
+ case ".xls":
+ $content_type="application/excel";
+ break;
+ case ".hqx":
+ $content_type="application/macbinhex40";
+ break;
+ case ".doc":
+ case ".dot":
+ case ".wrd":
+ $content_type="application/msword";
+ break;
+ case ".pdf":
+ $content_type="application/pdf";
+ break;
+ case ".pgp":
+ $content_type="application/pgp";
+ break;
+ case ".ps":
+ case ".eps":
+ case ".ai":
+ $content_type="application/postscript";
+ break;
+ case ".ppt":
+ $content_type="application/powerpoint";
+ break;
+ case ".rtf":
+ $content_type="application/rtf";
+ break;
+ case ".tgz":
+ case ".gtar":
+ $content_type="application/x-gtar";
+ break;
+ case ".gz":
+ $content_type="application/x-gzip";
+ break;
+ case ".php":
+ case ".php3":
+ $content_type="application/x-httpd-php";
+ break;
+ case ".js":
+ $content_type="application/x-javascript";
+ break;
+ case ".ppd":
+ case ".psd":
+ $content_type="application/x-photoshop";
+ break;
+ case ".swf":
+ case ".swc":
+ case ".rf":
+ $content_type="application/x-shockwave-flash";
+ break;
+ case ".tar":
+ $content_type="application/x-tar";
+ break;
+ case ".zip":
+ $content_type="application/zip";
+ break;
+ case ".mid":
+ case ".midi":
+ case ".kar":
+ $content_type="audio/midi";
+ break;
+ case ".mp2":
+ case ".mp3":
+ case ".mpga":
+ $content_type="audio/mpeg";
+ break;
+ case ".ra":
+ $content_type="audio/x-realaudio";
+ break;
+ case ".wav":
+ $content_type="audio/wav";
+ break;
+ case ".bmp":
+ $content_type="image/bitmap";
+ break;
+ case ".gif":
+ $content_type="image/gif";
+ break;
+ case ".iff":
+ $content_type="image/iff";
+ break;
+ case ".jb2":
+ $content_type="image/jb2";
+ break;
+ case ".jpg":
+ case ".jpe":
+ case ".jpeg":
+ $content_type="image/jpeg";
+ break;
+ case ".jpx":
+ $content_type="image/jpx";
+ break;
+ case ".png":
+ $content_type="image/png";
+ break;
+ case ".tif":
+ case ".tiff":
+ $content_type="image/tiff";
+ break;
+ case ".wbmp":
+ $content_type="image/vnd.wap.wbmp";
+ break;
+ case ".xbm":
+ $content_type="image/xbm";
+ break;
+ case ".css":
+ $content_type="text/css";
+ break;
+ case ".txt":
+ $content_type="text/plain";
+ break;
+ case ".htm":
+ case ".html":
+ $content_type="text/html";
+ break;
+ case ".xml":
+ $content_type="text/xml";
+ break;
+ case ".mpg":
+ case ".mpe":
+ case ".mpeg":
+ $content_type="video/mpeg";
+ break;
+ case ".qt":
+ case ".mov":
+ $content_type="video/quicktime";
+ break;
+ case ".avi":
+ $content_type="video/x-ms-video";
+ break;
+ case ".eml":
+ $content_type="message/rfc822";
+ break;
+ default:
+ $content_type="application/octet-stream";
+ break;
+ }
+ break;
+ default:
+ return($content_type." is not a supported automatic content type detection method");
+ }
+ break;
+ default:
+ return($content_type." is not a supported file content type");
+ }
+ }
+ else
+ $content_type="application/octet-stream";
+ $definition=array(
+ "Content-Type"=>$content_type,
+ "NAME"=>$name
+ );
+ if(IsSet($file["FileName"]))
+ {
+ if(GetType($length=@filesize($file["FileName"]))!="integer")
+ {
+ $error="it was not possible to determine the length of the file ".$file["FileName"];
+ if(IsSet($php_errormsg)
+ && strlen($php_errormsg))
+ $error.=": ".$php_errormsg;
+ if(!file_exists($file["FileName"]))
+ $error="it was not possible to access the file ".$file["FileName"];
+ return($error);
+ }
+ $definition["FILENAME"]=$file["FileName"];
+ $definition["Content-Length"]=$length;
+ }
+ elseif(IsSet($file["Data"]))
+ $definition["Content-Length"]=strlen($definition["DATA"]=$file["Data"]);
+ else
+ return("it was not specified a valid file name");
+ return("");
+ }
+
+ Function ConnectFromProxy($arguments, &$headers)
+ {
+ if(!$this->PutLine('CONNECT '.$this->host_name.':'.($this->host_port ? $this->host_port : 443).' HTTP/1.0')
+ || (strlen($this->user_agent)
+ && !$this->PutLine('User-Agent: '.$this->user_agent))
+ || (strlen($this->accept)
+ && !$this->PutLine('Accept: '.$this->accept))
+ || (IsSet($arguments['Headers']['Proxy-Authorization'])
+ && !$this->PutLine('Proxy-Authorization: '.$arguments['Headers']['Proxy-Authorization']))
+ || !$this->PutLine(''))
+ {
+ $this->Disconnect();
+ return($this->error);
+ }
+ $this->state = "ConnectSent";
+ if(strlen($error=$this->ReadReplyHeadersResponse($headers)))
+ return($error);
+ $proxy_authorization="";
+ while(!strcmp($this->response_status, "100"))
+ {
+ $this->state="ConnectSent";
+ if(strlen($error=$this->ReadReplyHeadersResponse($headers)))
+ return($error);
+ }
+ switch($this->response_status)
+ {
+ case "200":
+ if(!@stream_socket_enable_crypto($this->connection, 1, STREAM_CRYPTO_METHOD_SSLv23_CLIENT))
+ {
+ $this->SetPHPError('it was not possible to start a SSL encrypted connection via this proxy', $php_errormsg, HTTP_CLIENT_ERROR_COMMUNICATION_FAILURE);
+ $this->Disconnect();
+ return($this->error);
+ }
+ $this->state = "Connected";
+ break;
+ case "407":
+ if(strlen($error=$this->Authenticate($headers, -1, $proxy_authorization, $this->proxy_request_user, $this->proxy_request_password, $this->proxy_request_realm, $this->proxy_request_workstation)))
+ return($error);
+ break;
+ default:
+ return($this->SetError("unable to send request via proxy", HTTP_CLIENT_ERROR_PROTOCOL_FAILURE));
+ }
+ return("");
+ }
+
+ Function SendRequest($arguments)
+ {
+ if(strlen($this->error))
+ return($this->error);
+ if(IsSet($arguments["ProxyUser"]))
+ $this->proxy_request_user=$arguments["ProxyUser"];
+ elseif(IsSet($this->proxy_user))
+ $this->proxy_request_user=$this->proxy_user;
+ if(IsSet($arguments["ProxyPassword"]))
+ $this->proxy_request_password=$arguments["ProxyPassword"];
+ elseif(IsSet($this->proxy_password))
+ $this->proxy_request_password=$this->proxy_password;
+ if(IsSet($arguments["ProxyRealm"]))
+ $this->proxy_request_realm=$arguments["ProxyRealm"];
+ elseif(IsSet($this->proxy_realm))
+ $this->proxy_request_realm=$this->proxy_realm;
+ if(IsSet($arguments["ProxyWorkstation"]))
+ $this->proxy_request_workstation=$arguments["ProxyWorkstation"];
+ elseif(IsSet($this->proxy_workstation))
+ $this->proxy_request_workstation=$this->proxy_workstation;
+ switch($this->state)
+ {
+ case "Disconnected":
+ return($this->SetError("connection was not yet established", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ case "Connected":
+ $connect = 0;
+ break;
+ case "ConnectedToProxy":
+ if(strlen($error = $this->ConnectFromProxy($arguments, $headers)))
+ return($error);
+ $connect = 1;
+ break;
+ default:
+ return($this->SetError("can not send request in the current connection state", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ }
+ if(IsSet($arguments["RequestMethod"]))
+ $this->request_method=$arguments["RequestMethod"];
+ if(IsSet($arguments["User-Agent"]))
+ $this->user_agent=$arguments["User-Agent"];
+ if(!IsSet($arguments["Headers"]["User-Agent"])
+ && strlen($this->user_agent))
+ $arguments["Headers"]["User-Agent"]=$this->user_agent;
+ if(IsSet($arguments["KeepAlive"]))
+ $this->keep_alive=intval($arguments["KeepAlive"]);
+ if(!IsSet($arguments["Headers"]["Connection"])
+ && $this->keep_alive)
+ $arguments["Headers"]["Connection"]='Keep-Alive';
+ if(IsSet($arguments["Accept"]))
+ $this->user_agent=$arguments["Accept"];
+ if(!IsSet($arguments["Headers"]["Accept"])
+ && strlen($this->accept))
+ $arguments["Headers"]["Accept"]=$this->accept;
+ if(strlen($this->request_method)==0)
+ return($this->SetError("it was not specified a valid request method", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ if(IsSet($arguments["RequestURI"]))
+ $this->request_uri=$arguments["RequestURI"];
+ if(strlen($this->request_uri)==0
+ || substr($this->request_uri,0,1)!="/")
+ return($this->SetError("it was not specified a valid request URI", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ $this->request_arguments=$arguments;
+ $this->request_headers=(IsSet($arguments["Headers"]) ? $arguments["Headers"] : array());
+ $body_length=0;
+ $this->request_body="";
+ $get_body=1;
+ if($this->request_method=="POST"
+ || $this->request_method=="PUT")
+ {
+ if(IsSet($arguments['StreamRequest']))
+ {
+ $get_body = 0;
+ $this->request_headers["Transfer-Encoding"]="chunked";
+ }
+ elseif(IsSet($arguments["PostFiles"])
+ || ($this->force_multipart_form_post
+ && IsSet($arguments["PostValues"])))
+ {
+ $boundary="--".md5(uniqid(time()));
+ $this->request_headers["Content-Type"]="multipart/form-data; boundary=".$boundary.(IsSet($arguments["CharSet"]) ? "; charset=".$arguments["CharSet"] : "");
+ $post_parts=array();
+ if(IsSet($arguments["PostValues"]))
+ {
+ $values=$arguments["PostValues"];
+ if(GetType($values)!="array")
+ return($this->SetError("it was not specified a valid POST method values array", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ for(Reset($values),$value=0;$value<count($values);Next($values),$value++)
+ {
+ $input=Key($values);
+ $headers="--".$boundary."\r\nContent-Disposition: form-data; name=\"".$input."\"\r\n\r\n";
+ $data=$values[$input];
+ $post_parts[]=array("HEADERS"=>$headers,"DATA"=>$data);
+ $body_length+=strlen($headers)+strlen($data)+strlen("\r\n");
+ }
+ }
+ $body_length+=strlen("--".$boundary."--\r\n");
+ $files=(IsSet($arguments["PostFiles"]) ? $arguments["PostFiles"] : array());
+ Reset($files);
+ $end=(GetType($input=Key($files))!="string");
+ for(;!$end;)
+ {
+ if(strlen($error=$this->GetFileDefinition($files[$input],$definition)))
+ return("3 ".$error);
+ $headers="--".$boundary."\r\nContent-Disposition: form-data; name=\"".$input."\"; filename=\"".$definition["NAME"]."\"\r\nContent-Type: ".$definition["Content-Type"]."\r\n\r\n";
+ $part=count($post_parts);
+ $post_parts[$part]=array("HEADERS"=>$headers);
+ if(IsSet($definition["FILENAME"]))
+ {
+ $post_parts[$part]["FILENAME"]=$definition["FILENAME"];
+ $data="";
+ }
+ else
+ $data=$definition["DATA"];
+ $post_parts[$part]["DATA"]=$data;
+ $body_length+=strlen($headers)+$definition["Content-Length"]+strlen("\r\n");
+ Next($files);
+ $end=(GetType($input=Key($files))!="string");
+ }
+ $get_body=0;
+ }
+ elseif(IsSet($arguments["PostValues"]))
+ {
+ $values=$arguments["PostValues"];
+ if(GetType($values)!="array")
+ return($this->SetError("it was not specified a valid POST method values array", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ for(Reset($values),$value=0;$value<count($values);Next($values),$value++)
+ {
+ $k=Key($values);
+ if(GetType($values[$k])=="array")
+ {
+ for($v = 0; $v < count($values[$k]); $v++)
+ {
+ if($value+$v>0)
+ $this->request_body.="&";
+ $this->request_body.=UrlEncode($k)."=".UrlEncode($values[$k][$v]);
+ }
+ }
+ else
+ {
+ if($value>0)
+ $this->request_body.="&";
+ $this->request_body.=UrlEncode($k)."=".UrlEncode($values[$k]);
+ }
+ }
+ $this->request_headers["Content-Type"]="application/x-www-form-urlencoded".(IsSet($arguments["CharSet"]) ? "; charset=".$arguments["CharSet"] : "");
+ $get_body=0;
+ }
+ }
+ if($get_body
+ && (IsSet($arguments["Body"])
+ || IsSet($arguments["BodyStream"])))
+ {
+ if(IsSet($arguments["Body"]))
+ $this->request_body=$arguments["Body"];
+ else
+ {
+ $stream=$arguments["BodyStream"];
+ $this->request_body="";
+ for($part=0; $part<count($stream); $part++)
+ {
+ if(IsSet($stream[$part]["Data"]))
+ $this->request_body.=$stream[$part]["Data"];
+ elseif(IsSet($stream[$part]["File"]))
+ {
+ if(!($file=@fopen($stream[$part]["File"],"rb")))
+ return($this->SetPHPError("could not open upload file ".$stream[$part]["File"], $php_errormsg, HTTP_CLIENT_ERROR_CANNOT_ACCESS_LOCAL_FILE));
+ while(!feof($file))
+ {
+ if(GetType($block=@fread($file,$this->file_buffer_length))!="string")
+ {
+ $error=$this->SetPHPError("could not read body stream file ".$stream[$part]["File"], $php_errormsg, HTTP_CLIENT_ERROR_CANNOT_ACCESS_LOCAL_FILE);
+ fclose($file);
+ return($error);
+ }
+ $this->request_body.=$block;
+ }
+ fclose($file);
+ }
+ else
+ return("5 it was not specified a valid file or data body stream element at position ".$part);
+ }
+ }
+ if(!IsSet($this->request_headers["Content-Type"]))
+ $this->request_headers["Content-Type"]="application/octet-stream".(IsSet($arguments["CharSet"]) ? "; charset=".$arguments["CharSet"] : "");
+ }
+ if(IsSet($arguments["AuthUser"]))
+ $this->request_user=$arguments["AuthUser"];
+ elseif(IsSet($this->user))
+ $this->request_user=$this->user;
+ if(IsSet($arguments["AuthPassword"]))
+ $this->request_password=$arguments["AuthPassword"];
+ elseif(IsSet($this->password))
+ $this->request_password=$this->password;
+ if(IsSet($arguments["AuthRealm"]))
+ $this->request_realm=$arguments["AuthRealm"];
+ elseif(IsSet($this->realm))
+ $this->request_realm=$this->realm;
+ if(IsSet($arguments["AuthWorkstation"]))
+ $this->request_workstation=$arguments["AuthWorkstation"];
+ elseif(IsSet($this->workstation))
+ $this->request_workstation=$this->workstation;
+ if(strlen($this->proxy_host_name)==0
+ || $connect)
+ $request_uri=$this->request_uri;
+ else
+ {
+ switch(strtolower($this->protocol))
+ {
+ case "http":
+ $default_port=80;
+ break;
+ case "https":
+ $default_port=443;
+ break;
+ }
+ $request_uri=strtolower($this->protocol)."://".$this->host_name.(($this->host_port==0 || $this->host_port==$default_port) ? "" : ":".$this->host_port).$this->request_uri;
+ }
+ if($this->use_curl)
+ {
+ $version=(GetType($v=curl_version())=="array" ? (IsSet($v["version"]) ? $v["version"] : "0.0.0") : (preg_match("/^libcurl\\/([0-9]+\\.[0-9]+\\.[0-9]+)/",$v,$m) ? $m[1] : "0.0.0"));
+ $curl_version=100000*intval($this->Tokenize($version,"."))+1000*intval($this->Tokenize("."))+intval($this->Tokenize(""));
+ $protocol_version=($curl_version<713002 ? "1.0" : $this->protocol_version);
+ }
+ else
+ $protocol_version=$this->protocol_version;
+ $this->request=$this->request_method." ".$request_uri." HTTP/".$protocol_version;
+ if($body_length
+ || ($body_length=strlen($this->request_body))
+ || !strcmp($this->request_method, 'POST'))
+ $this->request_headers["Content-Length"]=$body_length;
+ for($headers=array(),$host_set=0,Reset($this->request_headers),$header=0;$header<count($this->request_headers);Next($this->request_headers),$header++)
+ {
+ $header_name=Key($this->request_headers);
+ $header_value=$this->request_headers[$header_name];
+ if(GetType($header_value)=="array")
+ {
+ for(Reset($header_value),$value=0;$value<count($header_value);Next($header_value),$value++)
+ $headers[]=$header_name.": ".$header_value[Key($header_value)];
+ }
+ else
+ $headers[]=$header_name.": ".$header_value;
+ if(strtolower(Key($this->request_headers))=="host")
+ {
+ $this->request_host=strtolower($header_value);
+ $host_set=1;
+ }
+ }
+ if(!$host_set)
+ {
+ $headers[]="Host: ".$this->host_name;
+ $this->request_host=strtolower($this->host_name);
+ }
+ if(count($this->cookies))
+ {
+ $cookies=array();
+ $this->PickCookies($cookies,0);
+ if(strtolower($this->protocol)=="https")
+ $this->PickCookies($cookies,1);
+ if(count($cookies))
+ {
+ $h=count($headers);
+ $headers[$h]="Cookie:";
+ for(Reset($cookies),$cookie=0;$cookie<count($cookies);Next($cookies),$cookie++)
+ {
+ $cookie_name=Key($cookies);
+ $headers[$h].=" ".$cookie_name."=".$cookies[$cookie_name]["value"].";";
+ }
+ }
+ }
+ $next_state = "RequestSent";
+ if($this->use_curl)
+ {
+ if(IsSet($arguments['StreamRequest']))
+ return($this->SetError("Streaming request data is not supported when using Curl", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ if($body_length
+ && strlen($this->request_body)==0)
+ {
+ for($request_body="",$success=1,$part=0;$part<count($post_parts);$part++)
+ {
+ $request_body.=$post_parts[$part]["HEADERS"].$post_parts[$part]["DATA"];
+ if(IsSet($post_parts[$part]["FILENAME"]))
+ {
+ if(!($file=@fopen($post_parts[$part]["FILENAME"],"rb")))
+ {
+ $this->SetPHPError("could not open upload file ".$post_parts[$part]["FILENAME"], $php_errormsg, HTTP_CLIENT_ERROR_CANNOT_ACCESS_LOCAL_FILE);
+ $success=0;
+ break;
+ }
+ while(!feof($file))
+ {
+ if(GetType($block=@fread($file,$this->file_buffer_length))!="string")
+ {
+ $this->SetPHPError("could not read upload file", $php_errormsg, HTTP_CLIENT_ERROR_CANNOT_ACCESS_LOCAL_FILE);
+ $success=0;
+ break;
+ }
+ $request_body.=$block;
+ }
+ fclose($file);
+ if(!$success)
+ break;
+ }
+ $request_body.="\r\n";
+ }
+ $request_body.="--".$boundary."--\r\n";
+ }
+ else
+ $request_body=$this->request_body;
+ curl_setopt($this->connection,CURLOPT_HEADER,1);
+ curl_setopt($this->connection,CURLOPT_RETURNTRANSFER,1);
+ if($this->timeout)
+ curl_setopt($this->connection,CURLOPT_TIMEOUT,$this->timeout);
+ curl_setopt($this->connection,CURLOPT_SSL_VERIFYPEER,0);
+ curl_setopt($this->connection,CURLOPT_SSL_VERIFYHOST,0);
+ $request=$this->request."\r\n".implode("\r\n",$headers)."\r\n\r\n".$request_body;
+ curl_setopt($this->connection,CURLOPT_CUSTOMREQUEST,$request);
+ if($this->debug)
+ $this->OutputDebug("C ".$request);
+ if(!($success=(strlen($this->response=curl_exec($this->connection))!=0)))
+ {
+ $error=curl_error($this->connection);
+ $this->SetError("Could not execute the request".(strlen($error) ? ": ".$error : ""), HTTP_CLIENT_ERROR_PROTOCOL_FAILURE);
+ }
+ }
+ else
+ {
+ if(($success=$this->PutLine($this->request)))
+ {
+ for($header=0;$header<count($headers);$header++)
+ {
+ if(!$success=$this->PutLine($headers[$header]))
+ break;
+ }
+ if($success
+ && ($success=$this->PutLine("")))
+ {
+ if(IsSet($arguments['StreamRequest']))
+ $next_state = "SendingRequestBody";
+ elseif($body_length)
+ {
+ if(strlen($this->request_body))
+ $success=$this->PutData($this->request_body);
+ else
+ {
+ for($part=0;$part<count($post_parts);$part++)
+ {
+ if(!($success=$this->PutData($post_parts[$part]["HEADERS"]))
+ || !($success=$this->PutData($post_parts[$part]["DATA"])))
+ break;
+ if(IsSet($post_parts[$part]["FILENAME"]))
+ {
+ if(!($file=@fopen($post_parts[$part]["FILENAME"],"rb")))
+ {
+ $this->SetPHPError("could not open upload file ".$post_parts[$part]["FILENAME"], $php_errormsg, HTTP_CLIENT_ERROR_CANNOT_ACCESS_LOCAL_FILE);
+ $success=0;
+ break;
+ }
+ while(!feof($file))
+ {
+ if(GetType($block=@fread($file,$this->file_buffer_length))!="string")
+ {
+ $this->SetPHPError("could not read upload file", $php_errormsg, HTTP_CLIENT_ERROR_CANNOT_ACCESS_LOCAL_FILE);
+ $success=0;
+ break;
+ }
+ if(!($success=$this->PutData($block)))
+ break;
+ }
+ fclose($file);
+ if(!$success)
+ break;
+ }
+ if(!($success=$this->PutLine("")))
+ break;
+ }
+ if($success)
+ $success=$this->PutLine("--".$boundary."--");
+ }
+ if($success)
+ $sucess=$this->FlushData();
+ }
+ }
+ }
+ }
+ if(!$success)
+ return($this->SetError("could not send the HTTP request: ".$this->error, $this->error_code));
+ $this->state=$next_state;
+ return("");
+ }
+
+ Function SetCookie($name, $value, $expires="" , $path="/" , $domain="" , $secure=0, $verbatim=0)
+ {
+ if(strlen($this->error))
+ return($this->error);
+ if(strlen($name)==0)
+ return($this->SetError("it was not specified a valid cookie name", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ if(strlen($path)==0
+ || strcmp($path[0],"/"))
+ return($this->SetError($path." is not a valid path for setting cookie ".$name, HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ if($domain==""
+ || !strpos($domain,".",$domain[0]=="." ? 1 : 0))
+ return($this->SetError($domain." is not a valid domain for setting cookie ".$name, HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ $domain=strtolower($domain);
+ if(!strcmp($domain[0],"."))
+ $domain=substr($domain,1);
+ if(!$verbatim)
+ {
+ $name=$this->CookieEncode($name,1);
+ $value=$this->CookieEncode($value,0);
+ }
+ $secure=intval($secure);
+ $this->cookies[$secure][$domain][$path][$name]=array(
+ "name"=>$name,
+ "value"=>$value,
+ "domain"=>$domain,
+ "path"=>$path,
+ "expires"=>$expires,
+ "secure"=>$secure
+ );
+ return("");
+ }
+
+ Function SendRequestBody($data, $end_of_data)
+ {
+ if(strlen($this->error))
+ return($this->error);
+ switch($this->state)
+ {
+ case "Disconnected":
+ return($this->SetError("connection was not yet established", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ case "Connected":
+ case "ConnectedToProxy":
+ return($this->SetError("request was not sent", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ case "SendingRequestBody":
+ break;
+ case "RequestSent":
+ return($this->SetError("request body was already sent", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ default:
+ return($this->SetError("can not send the request body in the current connection state", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ }
+ $length = strlen($data);
+ if($length)
+ {
+ $size = dechex($length)."\r\n";
+ if(!$this->PutData($size)
+ || !$this->PutData($data))
+ return($this->error);
+ }
+ if($end_of_data)
+ {
+ $size = "0\r\n";
+ if(!$this->PutData($size))
+ return($this->error);
+ $this->state = "RequestSent";
+ }
+ return("");
+ }
+
+ Function ReadReplyHeadersResponse(&$headers)
+ {
+ $headers=array();
+ if(strlen($this->error))
+ return($this->error);
+ switch($this->state)
+ {
+ case "Disconnected":
+ return($this->SetError("connection was not yet established", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ case "Connected":
+ return($this->SetError("request was not sent", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ case "ConnectedToProxy":
+ return($this->SetError("connection from the remote server from the proxy was not yet established", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ case "SendingRequestBody":
+ return($this->SetError("request body data was not completely sent", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ case "ConnectSent":
+ $connect = 1;
+ break;
+ case "RequestSent":
+ $connect = 0;
+ break;
+ default:
+ return($this->SetError("can not get request headers in the current connection state", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ }
+ $this->content_length=$this->read_length=$this->read_response=$this->remaining_chunk=0;
+ $this->content_length_set=$this->chunked=$this->last_chunk_read=$chunked=0;
+ $this->force_close = $this->connection_close=0;
+ for($this->response_status="";;)
+ {
+ $line=$this->GetLine();
+ if(GetType($line)!="string")
+ return($this->SetError("could not read request reply: ".$this->error, $this->error_code));
+ if(strlen($this->response_status)==0)
+ {
+ if(!preg_match($match="/^http\\/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$/i",$line,$matches))
+ return($this->SetError("it was received an unexpected HTTP response status", HTTP_CLIENT_ERROR_PROTOCOL_FAILURE));
+ $this->response_status=$matches[1];
+ $this->response_message=$matches[2];
+ }
+ if($line=="")
+ {
+ if(strlen($this->response_status)==0)
+ return($this->SetError("it was not received HTTP response status", HTTP_CLIENT_ERROR_PROTOCOL_FAILURE));
+ $this->state=($connect ? "GotConnectHeaders" : "GotReplyHeaders");
+ break;
+ }
+ $header_name=strtolower($this->Tokenize($line,":"));
+ $header_value=Trim(Chop($this->Tokenize("\r\n")));
+ if(IsSet($headers[$header_name]))
+ {
+ if(GetType($headers[$header_name])=="string")
+ $headers[$header_name]=array($headers[$header_name]);
+ $headers[$header_name][]=$header_value;
+ }
+ else
+ $headers[$header_name]=$header_value;
+ if(!$connect)
+ {
+ switch($header_name)
+ {
+ case "content-length":
+ $this->content_length=intval($headers[$header_name]);
+ $this->content_length_set=1;
+ break;
+ case "transfer-encoding":
+ $encoding=$this->Tokenize($header_value,"; \t");
+ if(!$this->use_curl
+ && !strcmp($encoding,"chunked"))
+ $chunked=1;
+ break;
+ case "set-cookie":
+ if($this->support_cookies)
+ {
+ if(GetType($headers[$header_name])=="array")
+ $cookie_headers=$headers[$header_name];
+ else
+ $cookie_headers=array($headers[$header_name]);
+ for($cookie=0;$cookie<count($cookie_headers);$cookie++)
+ {
+ $cookie_name=trim($this->Tokenize($cookie_headers[$cookie],"="));
+ $cookie_value=$this->Tokenize(";");
+ $domain=$this->request_host;
+ $path="/";
+ $expires="";
+ $secure=0;
+ while(($name = strtolower(trim(UrlDecode($this->Tokenize("=")))))!="")
+ {
+ $value=UrlDecode($this->Tokenize(";"));
+ switch($name)
+ {
+ case "domain":
+ $domain=$value;
+ break;
+ case "path":
+ $path=$value;
+ break;
+ case "expires":
+ if(preg_match("/^((Mon|Monday|Tue|Tuesday|Wed|Wednesday|Thu|Thursday|Fri|Friday|Sat|Saturday|Sun|Sunday), )?([0-9]{2})\\-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\-([0-9]{2,4}) ([0-9]{2})\\:([0-9]{2})\\:([0-9]{2}) GMT\$/",$value,$matches))
+ {
+ $year=intval($matches[5]);
+ if($year<1900)
+ $year+=($year<70 ? 2000 : 1900);
+ $expires="$year-".$this->months[$matches[4]]."-".$matches[3]." ".$matches[6].":".$matches[7].":".$matches[8];
+ }
+ break;
+ case "secure":
+ $secure=1;
+ break;
+ }
+ }
+ if(strlen($this->SetCookie($cookie_name, $cookie_value, $expires, $path , $domain, $secure, 1)))
+ $this->error="";
+ }
+ }
+ break;
+ case "connection":
+ $this->force_close = $this->connection_close=!strcmp(strtolower($header_value),"close");
+ break;
+ }
+ }
+ }
+ $this->chunked=$chunked;
+ if($this->content_length_set)
+ $this->connection_close=0;
+ return("");
+ }
+
+ Function Redirect(&$headers)
+ {
+ if($this->follow_redirect)
+ {
+ if(!IsSet($headers["location"])
+ || (GetType($headers["location"])!="array"
+ && strlen($location=$headers["location"])==0)
+ || (GetType($headers["location"])=="array"
+ && strlen($location=$headers["location"][0])==0))
+ return($this->SetError("it was received a redirect without location URL", HTTP_CLIENT_ERROR_PROTOCOL_FAILURE));
+ if(strcmp($location[0],"/"))
+ {
+ if(!($location_arguments=@parse_url($location)))
+ return($this->SetError("the server did not return a valid redirection location URL", HTTP_CLIENT_ERROR_PROTOCOL_FAILURE));
+ if(!IsSet($location_arguments["scheme"]))
+ $location=((GetType($end=strrpos($this->request_uri,"/"))=="integer" && $end>1) ? substr($this->request_uri,0,$end) : "")."/".$location;
+ }
+ if(!strcmp($location[0],"/"))
+ $location=$this->protocol."://".$this->host_name.($this->host_port ? ":".$this->host_port : "").$location;
+ $error=$this->GetRequestArguments($location,$arguments);
+ if(strlen($error))
+ return($this->SetError("could not process redirect url: ".$error, HTTP_CLIENT_ERROR_PROTOCOL_FAILURE));
+ $arguments["RequestMethod"]="GET";
+ if(strlen($error=$this->Close())==0
+ && strlen($error=$this->Open($arguments))==0
+ && strlen($error=$this->SendRequest($arguments))==0)
+ {
+ $this->redirection_level++;
+ if($this->redirection_level>$this->redirection_limit)
+ {
+ $error="it was exceeded the limit of request redirections";
+ $this->error_code = HTTP_CLIENT_ERROR_PROTOCOL_FAILURE;
+ }
+ else
+ $error=$this->ReadReplyHeaders($headers);
+ $this->redirection_level--;
+ }
+ if(strlen($error))
+ return($this->SetError($error, $this->error_code));
+ }
+ return("");
+ }
+
+ Function Authenticate(&$headers, $proxy, &$proxy_authorization, &$user, &$password, &$realm, &$workstation)
+ {
+ if($proxy)
+ {
+ $authenticate_header="proxy-authenticate";
+ $authorization_header="Proxy-Authorization";
+ $authenticate_status="407";
+ $authentication_mechanism=$this->proxy_authentication_mechanism;
+ }
+ else
+ {
+ $authenticate_header="www-authenticate";
+ $authorization_header="Authorization";
+ $authenticate_status="401";
+ $authentication_mechanism=$this->authentication_mechanism;
+ }
+ if(IsSet($headers[$authenticate_header])
+ && $this->sasl_authenticate)
+ {
+ if(function_exists("class_exists")
+ && !class_exists("sasl_client_class"))
+ return($this->SetError("the SASL client class needs to be loaded to be able to authenticate".($proxy ? " with the proxy server" : "")." and access this site", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ if(GetType($headers[$authenticate_header])=="array")
+ $authenticate=$headers[$authenticate_header];
+ else
+ $authenticate=array($headers[$authenticate_header]);
+ for($response="", $mechanisms=array(),$m=0;$m<count($authenticate);$m++)
+ {
+ $mechanism=$this->Tokenize($authenticate[$m]," ");
+ $response=$this->Tokenize("");
+ if(strlen($authentication_mechanism))
+ {
+ if(!strcmp($authentication_mechanism,$mechanism))
+ {
+ $mechanisms[]=$mechanism;
+ break;
+ }
+ }
+ else
+ $mechanisms[]=$mechanism;
+ }
+ $sasl=new sasl_client_class;
+ if(IsSet($user))
+ $sasl->SetCredential("user",$user);
+ if(IsSet($password))
+ $sasl->SetCredential("password",$password);
+ if(IsSet($realm))
+ $sasl->SetCredential("realm",$realm);
+ if(IsSet($workstation))
+ $sasl->SetCredential("workstation",$workstation);
+ $sasl->SetCredential("uri",$this->request_uri);
+ $sasl->SetCredential("method",$this->request_method);
+ $sasl->SetCredential("session",$this->session);
+ do
+ {
+ $status=$sasl->Start($mechanisms,$message,$interactions);
+ }
+ while($status==SASL_INTERACT);
+ switch($status)
+ {
+ case SASL_CONTINUE:
+ break;
+ case SASL_NOMECH:
+ return($this->SetError(($proxy ? "proxy " : "")."authentication error: ".(strlen($authentication_mechanism) ? "authentication mechanism ".$authentication_mechanism." may not be used: " : "").$sasl->error, HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ default:
+ return($this->SetError("Could not start the SASL ".($proxy ? "proxy " : "")."authentication client: ".$sasl->error, HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ }
+ if($proxy >= 0)
+ {
+ for(;;)
+ {
+ if(strlen($error=$this->ReadReplyBody($body,$this->file_buffer_length)))
+ return($error);
+ if(strlen($body)==0)
+ break;
+ }
+ }
+ $authorization_value=$sasl->mechanism.(IsSet($message) ? " ".($sasl->encode_response ? base64_encode($message) : $message) : "");
+ $request_arguments=$this->request_arguments;
+ $arguments=$request_arguments;
+ $arguments["Headers"][$authorization_header]=$authorization_value;
+ if(!$proxy
+ && strlen($proxy_authorization))
+ $arguments["Headers"]["Proxy-Authorization"]=$proxy_authorization;
+ if(strlen($error=$this->Close())
+ || strlen($error=$this->Open($arguments)))
+ return($this->SetError($error, $this->error_code));
+ $authenticated=0;
+ if(IsSet($message))
+ {
+ if($proxy < 0)
+ {
+ if(strlen($error=$this->ConnectFromProxy($arguments, $headers)))
+ return($this->SetError($error, $this->error_code));
+ }
+ else
+ {
+ if(strlen($error=$this->SendRequest($arguments))
+ || strlen($error=$this->ReadReplyHeadersResponse($headers)))
+ return($this->SetError($error, $this->error_code));
+ }
+ if(!IsSet($headers[$authenticate_header]))
+ $authenticate=array();
+ elseif(GetType($headers[$authenticate_header])=="array")
+ $authenticate=$headers[$authenticate_header];
+ else
+ $authenticate=array($headers[$authenticate_header]);
+ for($mechanism=0;$mechanism<count($authenticate);$mechanism++)
+ {
+ if(!strcmp($this->Tokenize($authenticate[$mechanism]," "),$sasl->mechanism))
+ {
+ $response=$this->Tokenize("");
+ break;
+ }
+ }
+ switch($this->response_status)
+ {
+ case $authenticate_status:
+ break;
+ case "301":
+ case "302":
+ case "303":
+ case "307":
+ if($proxy >= 0)
+ return($this->Redirect($headers));
+ default:
+ if(intval($this->response_status/100)==2)
+ {
+ if($proxy)
+ $proxy_authorization=$authorization_value;
+ $authenticated=1;
+ break;
+ }
+ if($proxy
+ && !strcmp($this->response_status,"401"))
+ {
+ $proxy_authorization=$authorization_value;
+ $authenticated=1;
+ break;
+ }
+ return($this->SetError(($proxy ? "proxy " : "")."authentication error: ".$this->response_status." ".$this->response_message, HTTP_CLIENT_ERROR_PROTOCOL_FAILURE));
+ }
+ }
+ for(;!$authenticated;)
+ {
+ do
+ {
+ $status=$sasl->Step($response,$message,$interactions);
+ }
+ while($status==SASL_INTERACT);
+ switch($status)
+ {
+ case SASL_CONTINUE:
+ $authorization_value=$sasl->mechanism.(IsSet($message) ? " ".($sasl->encode_response ? base64_encode($message) : $message) : "");
+ $arguments=$request_arguments;
+ $arguments["Headers"][$authorization_header]=$authorization_value;
+ if(!$proxy
+ && strlen($proxy_authorization))
+ $arguments["Headers"]["Proxy-Authorization"]=$proxy_authorization;
+ if($proxy < 0)
+ {
+ if(strlen($error=$this->ConnectFromProxy($arguments, $headers)))
+ return($this->SetError($error, $this->error_code));
+ }
+ else
+ {
+ if(strlen($error=$this->SendRequest($arguments))
+ || strlen($error=$this->ReadReplyHeadersResponse($headers)))
+ return($this->SetError($error, $this->error_code));
+ }
+ switch($this->response_status)
+ {
+ case $authenticate_status:
+ if(GetType($headers[$authenticate_header])=="array")
+ $authenticate=$headers[$authenticate_header];
+ else
+ $authenticate=array($headers[$authenticate_header]);
+ for($response="",$mechanism=0;$mechanism<count($authenticate);$mechanism++)
+ {
+ if(!strcmp($this->Tokenize($authenticate[$mechanism]," "),$sasl->mechanism))
+ {
+ $response=$this->Tokenize("");
+ break;
+ }
+ }
+ if($proxy >= 0)
+ {
+ for(;;)
+ {
+ if(strlen($error=$this->ReadReplyBody($body,$this->file_buffer_length)))
+ return($error);
+ if(strlen($body)==0)
+ break;
+ }
+ }
+ $this->state="Connected";
+ break;
+ case "301":
+ case "302":
+ case "303":
+ case "307":
+ if($proxy >= 0)
+ return($this->Redirect($headers));
+ default:
+ if(intval($this->response_status/100)==2)
+ {
+ if($proxy)
+ $proxy_authorization=$authorization_value;
+ $authenticated=1;
+ break;
+ }
+ if($proxy
+ && !strcmp($this->response_status,"401"))
+ {
+ $proxy_authorization=$authorization_value;
+ $authenticated=1;
+ break;
+ }
+ return($this->SetError(($proxy ? "proxy " : "")."authentication error: ".$this->response_status." ".$this->response_message));
+ }
+ break;
+ default:
+ return($this->SetError("Could not process the SASL ".($proxy ? "proxy " : "")."authentication step: ".$sasl->error, HTTP_CLIENT_ERROR_PROTOCOL_FAILURE));
+ }
+ }
+ }
+ return("");
+ }
+
+ Function ReadReplyHeaders(&$headers)
+ {
+ if(strlen($error=$this->ReadReplyHeadersResponse($headers)))
+ return($error);
+ $proxy_authorization="";
+ while(!strcmp($this->response_status, "100"))
+ {
+ $this->state="RequestSent";
+ if(strlen($error=$this->ReadReplyHeadersResponse($headers)))
+ return($error);
+ }
+ switch($this->response_status)
+ {
+ case "301":
+ case "302":
+ case "303":
+ case "307":
+ if(strlen($error=$this->Redirect($headers)))
+ return($error);
+ break;
+ case "407":
+ if(strlen($error=$this->Authenticate($headers, 1, $proxy_authorization, $this->proxy_request_user, $this->proxy_request_password, $this->proxy_request_realm, $this->proxy_request_workstation)))
+ return($error);
+ if(strcmp($this->response_status,"401"))
+ return("");
+ case "401":
+ return($this->Authenticate($headers, 0, $proxy_authorization, $this->request_user, $this->request_password, $this->request_realm, $this->request_workstation));
+ }
+ return("");
+ }
+
+ Function ReadReplyBody(&$body,$length)
+ {
+ $body="";
+ if(strlen($this->error))
+ return($this->error);
+ switch($this->state)
+ {
+ case "Disconnected":
+ return($this->SetError("connection was not yet established", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ case "Connected":
+ case "ConnectedToProxy":
+ return($this->SetError("request was not sent", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ case "RequestSent":
+ if(($error=$this->ReadReplyHeaders($headers))!="")
+ return($error);
+ break;
+ case "GotReplyHeaders":
+ break;
+ case 'ResponseReceived':
+ $body = '';
+ return('');
+ default:
+ return($this->SetError("can not get request headers in the current connection state", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ }
+ if($this->content_length_set)
+ $length=min($this->content_length-$this->read_length,$length);
+ $body = '';
+ if($length>0)
+ {
+ if(!$this->EndOfInput()
+ && ($body=$this->ReadBytes($length))=="")
+ {
+ if(strlen($this->error))
+ return($this->SetError("could not get the request reply body: ".$this->error, $this->error_code));
+ }
+ $this->read_length+=strlen($body);
+ if($this->EndOfInput())
+ $this->state = 'ResponseReceived';
+ }
+ return("");
+ }
+
+ Function ReadWholeReplyBody(&$body)
+ {
+ $body = '';
+ for(;;)
+ {
+ if(strlen($error = $this->ReadReplyBody($block, $this->file_buffer_length)))
+ return($error);
+ if(strlen($block) == 0)
+ return('');
+ $body .= $block;
+ }
+ }
+
+ Function SaveCookies(&$cookies, $domain='', $secure_only=0, $persistent_only=0)
+ {
+ $now=gmdate("Y-m-d H-i-s");
+ $cookies=array();
+ for($secure_cookies=0,Reset($this->cookies);$secure_cookies<count($this->cookies);Next($this->cookies),$secure_cookies++)
+ {
+ $secure=Key($this->cookies);
+ if(!$secure_only
+ || $secure)
+ {
+ for($cookie_domain=0,Reset($this->cookies[$secure]);$cookie_domain<count($this->cookies[$secure]);Next($this->cookies[$secure]),$cookie_domain++)
+ {
+ $domain_pattern=Key($this->cookies[$secure]);
+ $match=strlen($domain)-strlen($domain_pattern);
+ if(strlen($domain)==0
+ || ($match>=0
+ && !strcmp($domain_pattern,substr($domain,$match))
+ && ($match==0
+ || $domain_pattern[0]=="."
+ || $domain[$match-1]==".")))
+ {
+ for(Reset($this->cookies[$secure][$domain_pattern]),$path_part=0;$path_part<count($this->cookies[$secure][$domain_pattern]);Next($this->cookies[$secure][$domain_pattern]),$path_part++)
+ {
+ $path=Key($this->cookies[$secure][$domain_pattern]);
+ for(Reset($this->cookies[$secure][$domain_pattern][$path]),$cookie=0;$cookie<count($this->cookies[$secure][$domain_pattern][$path]);Next($this->cookies[$secure][$domain_pattern][$path]),$cookie++)
+ {
+ $cookie_name=Key($this->cookies[$secure][$domain_pattern][$path]);
+ $expires=$this->cookies[$secure][$domain_pattern][$path][$cookie_name]["expires"];
+ if((!$persistent_only
+ && strlen($expires)==0)
+ || (strlen($expires)
+ && strcmp($now,$expires)<0))
+ $cookies[$secure][$domain_pattern][$path][$cookie_name]=$this->cookies[$secure][$domain_pattern][$path][$cookie_name];
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ Function SavePersistentCookies(&$cookies, $domain='', $secure_only=0)
+ {
+ $this->SaveCookies($cookies, $domain, $secure_only, 1);
+ }
+
+ Function GetPersistentCookies(&$cookies, $domain='', $secure_only=0)
+ {
+ $this->SavePersistentCookies($cookies, $domain, $secure_only);
+ }
+
+ Function RestoreCookies($cookies, $clear=1)
+ {
+ $new_cookies=($clear ? array() : $this->cookies);
+ for($secure_cookies=0, Reset($cookies); $secure_cookies<count($cookies); Next($cookies), $secure_cookies++)
+ {
+ $secure=Key($cookies);
+ if(GetType($secure)!="integer")
+ return($this->SetError("invalid cookie secure value type (".serialize($secure).")", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ for($cookie_domain=0,Reset($cookies[$secure]);$cookie_domain<count($cookies[$secure]);Next($cookies[$secure]),$cookie_domain++)
+ {
+ $domain_pattern=Key($cookies[$secure]);
+ if(GetType($domain_pattern)!="string")
+ return($this->SetError("invalid cookie domain value type (".serialize($domain_pattern).")", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ for(Reset($cookies[$secure][$domain_pattern]),$path_part=0;$path_part<count($cookies[$secure][$domain_pattern]);Next($cookies[$secure][$domain_pattern]),$path_part++)
+ {
+ $path=Key($cookies[$secure][$domain_pattern]);
+ if(GetType($path)!="string"
+ || strcmp(substr($path, 0, 1), "/"))
+ return($this->SetError("invalid cookie path value type (".serialize($path).")", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ for(Reset($cookies[$secure][$domain_pattern][$path]),$cookie=0;$cookie<count($cookies[$secure][$domain_pattern][$path]);Next($cookies[$secure][$domain_pattern][$path]),$cookie++)
+ {
+ $cookie_name=Key($cookies[$secure][$domain_pattern][$path]);
+ $expires=$cookies[$secure][$domain_pattern][$path][$cookie_name]["expires"];
+ $value=$cookies[$secure][$domain_pattern][$path][$cookie_name]["value"];
+ if(GetType($expires)!="string"
+ || (strlen($expires)
+ && !preg_match("/^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\$/", $expires)))
+ return($this->SetError("invalid cookie expiry value type (".serialize($expires).")", HTTP_CLIENT_ERROR_INVALID_PARAMETERS));
+ $new_cookies[$secure][$domain_pattern][$path][$cookie_name]=array(
+ "name"=>$cookie_name,
+ "value"=>$value,
+ "domain"=>$domain_pattern,
+ "path"=>$path,
+ "expires"=>$expires,
+ "secure"=>$secure
+ );
+ }
+ }
+ }
+ }
+ $this->cookies=$new_cookies;
+ return("");
+ }
+};
+
+?> \ No newline at end of file
diff --git a/library/oauth/oauth_client.php b/library/oauth/oauth_client.php
new file mode 100644
index 000000000..5047e0e9b
--- /dev/null
+++ b/library/oauth/oauth_client.php
@@ -0,0 +1,2176 @@
+<?php
+/*
+ * oauth_client.php
+ *
+ * @(#) $Id: oauth_client.php,v 1.58 2013/04/11 09:33:16 mlemos Exp $
+ *
+ */
+
+/*
+{metadocument}<?xml version="1.0" encoding="ISO-8859-1" ?>
+<class>
+
+ <package>net.manuellemos.oauth</package>
+
+ <version>@(#) $Id: oauth_client.php,v 1.58 2013/04/11 09:33:16 mlemos Exp $</version>
+ <copyright>Copyright © (C) Manuel Lemos 2012</copyright>
+ <title>OAuth client</title>
+ <author>Manuel Lemos</author>
+ <authoraddress>mlemos-at-acm.org</authoraddress>
+
+ <documentation>
+ <idiom>en</idiom>
+ <purpose>This class serves two main purposes:<paragraphbreak />
+ 1) Implement the OAuth protocol to retrieve a token from a server to
+ authorize the access to an API on behalf of the current
+ user.<paragraphbreak />
+ 2) Perform calls to a Web services API using a token previously
+ obtained using this class or a token provided some other way by the
+ Web services provider.</purpose>
+ <usage>Regardless of your purposes, you always need to start calling
+ the class <functionlink>Initialize</functionlink> function after
+ initializing setup variables. After you are done with the class,
+ always call the <functionlink>Finalize</functionlink> function at
+ the end.<paragraphbreak />
+ This class supports either OAuth protocol versions 1.0, 1.0a and
+ 2.0. It abstracts the differences between these protocol versions,
+ so the class usage is the same independently of the OAuth
+ version of the server.<paragraphbreak />
+ The class also provides built-in support to several popular OAuth
+ servers, so you do not have to manually configure all the details to
+ access those servers. Just set the
+ <variablelink>server</variablelink> variable to configure the class
+ to access one of the built-in supported servers.<paragraphbreak />
+ If you need to access one type of server that is not yet directly
+ supported by the class, you need to configure it explicitly setting
+ the variables: <variablelink>oauth_version</variablelink>,
+ <variablelink>url_parameters</variablelink>,
+ <variablelink>authorization_header</variablelink>,
+ <variablelink>request_token_url</variablelink>,
+ <variablelink>dialog_url</variablelink>,
+ <variablelink>offline_dialog_url</variablelink>,
+ <variablelink>append_state_to_redirect_uri</variablelink> and
+ <variablelink>access_token_url</variablelink>.<paragraphbreak />
+ Before proceeding to the actual OAuth authorization process, you
+ need to have registered your application with the OAuth server. The
+ registration provides you values to set the variables
+ <variablelink>client_id</variablelink> and
+ <variablelink>client_secret</variablelink>.<paragraphbreak />
+ You also need to set the variables
+ <variablelink>redirect_uri</variablelink> and
+ <variablelink>scope</variablelink> before calling the
+ <functionlink>Process</functionlink> function to make the class
+ perform the necessary interactions with the OAuth
+ server.<paragraphbreak />
+ The OAuth protocol involves multiple steps that include redirection
+ to the OAuth server. There it asks permission to the current user to
+ grant your application access to APIs on his/her behalf. When there
+ is a redirection, the class will set the
+ <variablelink>exit</variablelink> variable to
+ <booleanvalue>1</booleanvalue>. Then your script should exit
+ immediately without outputting anything.<paragraphbreak />
+ When the OAuth access token is successfully obtained, the following
+ variables are set by the class with the obtained values:
+ <variablelink>access_token</variablelink>,
+ <variablelink>access_token_secret</variablelink>,
+ <variablelink>access_token_expiry</variablelink>,
+ <variablelink>access_token_type</variablelink>. You may want to
+ store these values to use them later when calling the server
+ APIs.<paragraphbreak />
+ If there was a problem during OAuth authorization process, check the
+ variable <variablelink>authorization_error</variablelink> to
+ determine the reason.<paragraphbreak />
+ Once you get the access token, you can call the server APIs using
+ the <functionlink>CallAPI</functionlink> function. Check the
+ <variablelink>access_token_error</variablelink> variable to
+ determine if there was an error when trying to to call the
+ API.<paragraphbreak />
+ If for some reason the user has revoked the access to your
+ application, you need to ask the user to authorize your application
+ again. First you may need to call the function
+ <functionlink>ResetAccessToken</functionlink> to reset the value of
+ the access token that may be cached in session variables.</usage>
+ </documentation>
+
+{/metadocument}
+*/
+
+class oauth_client_class
+{
+/*
+{metadocument}
+ <variable>
+ <name>error</name>
+ <type>STRING</type>
+ <value></value>
+ <documentation>
+ <purpose>Store the message that is returned when an error
+ occurs.</purpose>
+ <usage>Check this variable to understand what happened when a call to
+ any of the class functions has failed.<paragraphbreak />
+ This class uses cumulative error handling. This means that if one
+ class functions that may fail is called and this variable was
+ already set to an error message due to a failure in a previous call
+ to the same or other function, the function will also fail and does
+ not do anything.<paragraphbreak />
+ This allows programs using this class to safely call several
+ functions that may fail and only check the failure condition after
+ the last function call.<paragraphbreak />
+ Just set this variable to an empty string to clear the error
+ condition.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $error = '';
+
+/*
+{metadocument}
+ <variable>
+ <name>debug</name>
+ <type>BOOLEAN</type>
+ <value>0</value>
+ <documentation>
+ <purpose>Control whether debug output is enabled</purpose>
+ <usage>Set this variable to <booleanvalue>1</booleanvalue> if you
+ need to check what is going on during calls to the class. When
+ enabled, the debug output goes either to the variable
+ <variablelink>debug_output</variablelink> and the PHP error log.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $debug = false;
+
+/*
+{metadocument}
+ <variable>
+ <name>debug_http</name>
+ <type>BOOLEAN</type>
+ <value>0</value>
+ <documentation>
+ <purpose>Control whether the dialog with the remote Web server
+ should also be logged.</purpose>
+ <usage>Set this variable to <booleanvalue>1</booleanvalue> if you
+ want to inspect the data exchange with the OAuth server.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $debug_http = false;
+
+/*
+{metadocument}
+ <variable>
+ <name>exit</name>
+ <type>BOOLEAN</type>
+ <value>0</value>
+ <documentation>
+ <purpose>Determine if the current script should be exited.</purpose>
+ <usage>Check this variable after calling the
+ <functionlink>Process</functionlink> function and exit your script
+ immediately if the variable is set to
+ <booleanvalue>1</booleanvalue>.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $exit = false;
+
+/*
+{metadocument}
+ <variable>
+ <name>debug_output</name>
+ <type>STRING</type>
+ <value></value>
+ <documentation>
+ <purpose>Capture the debug output generated by the class</purpose>
+ <usage>Inspect this variable if you need to see what happened during
+ the class function calls.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $debug_output = '';
+
+/*
+{metadocument}
+ <variable>
+ <name>debug_prefix</name>
+ <type>STRING</type>
+ <value>OAuth client: </value>
+ <documentation>
+ <purpose>Mark the lines of the debug output to identify actions
+ performed by this class.</purpose>
+ <usage>Change this variable if you prefer the debug output lines to
+ be prefixed with a different text.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $debug_prefix = 'OAuth client: ';
+
+/*
+{metadocument}
+ <variable>
+ <name>server</name>
+ <type>STRING</type>
+ <value></value>
+ <documentation>
+ <purpose>Identify the type of OAuth server to access.</purpose>
+ <usage>The class provides built-in support to several types of OAuth
+ servers. This means that the class can automatically initialize
+ several configuration variables just by setting this server
+ variable.<paragraphbreak />
+ Currently it supports the following servers:
+ <stringvalue>Bitbucket</stringvalue>,
+ <stringvalue>Box</stringvalue>,
+ <stringvalue>Dropbox</stringvalue>,
+ <stringvalue>Eventful</stringvalue>,
+ <stringvalue>Facebook</stringvalue>,
+ <stringvalue>Fitbit</stringvalue>,
+ <stringvalue>Flickr</stringvalue>,
+ <stringvalue>Foursquare</stringvalue>,
+ <stringvalue>github</stringvalue>,
+ <stringvalue>Google</stringvalue>,
+ <stringvalue>Instagram</stringvalue>,
+ <stringvalue>LinkedIn</stringvalue>,
+ <stringvalue>Microsoft</stringvalue>,
+ <stringvalue>Scoop.it</stringvalue>,
+ <stringvalue>StockTwits</stringvalue>,
+ <stringvalue>Tumblr</stringvalue>,
+ <stringvalue>Twitter</stringvalue>,
+ <stringvalue>XING</stringvalue> and
+ <stringvalue>Yahoo</stringvalue>. Please contact the author if you
+ would like to ask to add built-in support for other types of OAuth
+ servers.<paragraphbreak />
+ If you want to access other types of OAuth servers that are not
+ yet supported, set this variable to an empty string and configure
+ other variables with values specific to those servers.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $server = '';
+
+/*
+{metadocument}
+ <variable>
+ <name>request_token_url</name>
+ <type>STRING</type>
+ <value></value>
+ <documentation>
+ <purpose>URL of the OAuth server to request the initial token for
+ OAuth 1.0 and 1.0a servers.</purpose>
+ <usage>Set this variable to the OAuth request token URL when you are
+ not accessing one of the built-in supported OAuth
+ servers.<paragraphbreak />
+ For OAuth 1.0 and 1.0a servers, the request token URL can have
+ certain marks that will act as template placeholders which will be
+ replaced with given values before requesting the authorization
+ token. Currently it supports the following placeholder
+ marks:<paragraphbreak />
+ {SCOPE} - scope of the requested permissions to the granted by the
+ OAuth server with the user permissions</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $request_token_url = '';
+
+/*
+{metadocument}
+ <variable>
+ <name>dialog_url</name>
+ <type>STRING</type>
+ <value></value>
+ <documentation>
+ <purpose>URL of the OAuth server to redirect the browser so the user
+ can grant access to your application.</purpose>
+ <usage>Set this variable to the OAuth request token URL when you are
+ not accessing one of the built-in supported OAuth servers.<paragraphbreak />
+ For certain servers, the dialog URL can have certain marks that
+ will act as template placeholders which will be replaced with
+ values defined before redirecting the users browser. Currently it
+ supports the following placeholder marks:<paragraphbreak />
+ {REDIRECT_URI} - URL to redirect when returning from the OAuth
+ server authorization page<paragraphbreak />
+ {CLIENT_ID} - client application identifier registered at the
+ server<paragraphbreak />
+ {SCOPE} - scope of the requested permissions to the granted by the
+ OAuth server with the user permissions<paragraphbreak />
+ {STATE} - identifier of the OAuth session state</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $dialog_url = '';
+
+/*
+{metadocument}
+ <variable>
+ <name>offline_dialog_url</name>
+ <type>STRING</type>
+ <value></value>
+ <documentation>
+ <purpose>URL of the OAuth server to redirect the browser so the user
+ can grant access to your application when offline access is
+ requested.</purpose>
+ <usage>Set this variable to the OAuth request token URL when you are
+ not accessing one of the built-in supported OAuth servers and the
+ OAuth server supports offline access.<paragraphbreak />
+ It should have the same format as the
+ <variablelink>dialog_url</variablelink> variable.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $offline_dialog_url = '';
+
+/*
+{metadocument}
+ <variable>
+ <name>append_state_to_redirect_uri</name>
+ <type>STRING</type>
+ <value></value>
+ <documentation>
+ <purpose>Pass the OAuth session state in a variable with a different
+ name to work around implementation bugs of certain OAuth
+ servers</purpose>
+ <usage>Set this variable when you are not accessing one of the
+ built-in supported OAuth servers if the OAuth server has a bug
+ that makes it not pass back the OAuth state identifier in a
+ request variable named state.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $append_state_to_redirect_uri = '';
+
+/*
+{metadocument}
+ <variable>
+ <name>access_token_url</name>
+ <type>STRING</type>
+ <value></value>
+ <documentation>
+ <purpose>OAuth server URL that will return the access token
+ URL.</purpose>
+ <usage>Set this variable to the OAuth access token URL when you are
+ not accessing one of the built-in supported OAuth servers.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $access_token_url = '';
+
+
+/*
+{metadocument}
+ <variable>
+ <name>oauth_version</name>
+ <type>STRING</type>
+ <value>2.0</value>
+ <documentation>
+ <purpose>Version of the protocol version supported by the OAuth
+ server.</purpose>
+ <usage>Set this variable to the OAuth server protocol version when
+ you are not accessing one of the built-in supported OAuth
+ servers.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $oauth_version = '2.0';
+
+/*
+{metadocument}
+ <variable>
+ <name>url_parameters</name>
+ <type>BOOLEAN</type>
+ <value>0</value>
+ <documentation>
+ <purpose>Determine if the API call parameters should be moved to the
+ call URL.</purpose>
+ <usage>Set this variable to <booleanvalue>1</booleanvalue> if the
+ API you need to call requires that the call parameters always be
+ passed via the API URL.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $url_parameters = false;
+
+/*
+{metadocument}
+ <variable>
+ <name>authorization_header</name>
+ <type>BOOLEAN</type>
+ <value>1</value>
+ <documentation>
+ <purpose>Determine if the OAuth parameters should be passed via HTTP
+ Authorization request header.</purpose>
+ <usage>Set this variable to <booleanvalue>1</booleanvalue> if the
+ OAuth server requires that the OAuth parameters be passed using
+ the HTTP Authorization instead of the request URI parameters.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $authorization_header = true;
+
+/*
+{metadocument}
+ <variable>
+ <name>token_request_method</name>
+ <type>STRING</type>
+ <value>GET</value>
+ <documentation>
+ <purpose>Define the HTTP method that should be used to request
+ tokens from the server.</purpose>
+ <usage>Set this variable to <stringvalue>POST</stringvalue> if the
+ OAuth server does not support requesting tokens using the HTTP GET
+ method.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $token_request_method = 'GET';
+
+/*
+{metadocument}
+ <variable>
+ <name>signature_method</name>
+ <type>STRING</type>
+ <value>HMAC-SHA1</value>
+ <documentation>
+ <purpose>Define the method to generate the signature for API request
+ parameters values.</purpose>
+ <usage>Currently it supports <stringvalue>PLAINTEXT</stringvalue>
+ and <stringvalue>HMAC-SHA1</stringvalue>.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $signature_method = 'HMAC-SHA1';
+
+/*
+{metadocument}
+ <variable>
+ <name>redirect_uri</name>
+ <type>STRING</type>
+ <value></value>
+ <documentation>
+ <purpose>URL of the current script page that is calling this
+ class</purpose>
+ <usage>Set this variable to the current script page URL before
+ proceeding the the OAuth authorization process.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $redirect_uri = '';
+
+/*
+{metadocument}
+ <variable>
+ <name>client_id</name>
+ <type>STRING</type>
+ <value></value>
+ <documentation>
+ <purpose>Identifier of your application registered with the OAuth
+ server</purpose>
+ <usage>Set this variable to the application identifier that is
+ provided by the OAuth server when you register the
+ application.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $client_id = '';
+
+/*
+{metadocument}
+ <variable>
+ <name>client_secret</name>
+ <type>STRING</type>
+ <value></value>
+ <documentation>
+ <purpose>Secret value assigned to your application when it is
+ registered with the OAuth server.</purpose>
+ <usage>Set this variable to the application secret that is provided
+ by the OAuth server when you register the application.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $client_secret = '';
+
+/*
+{metadocument}
+ <variable>
+ <name>scope</name>
+ <type>STRING</type>
+ <value></value>
+ <documentation>
+ <purpose>Permissions that your application needs to call the OAuth
+ server APIs</purpose>
+ <usage>Check the documentation of the APIs that your application
+ needs to call to set this variable with the identifiers of the
+ permissions that the user needs to grant to your application.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $scope = '';
+
+/*
+{metadocument}
+ <variable>
+ <name>offline</name>
+ <type>BOOLEAN</type>
+ <value>0</value>
+ <documentation>
+ <purpose>Specify whether it will be necessary to call the API when
+ the user is not present and the server supports renewing expired
+ access tokens using refresh tokens.</purpose>
+ <usage>Set this variable to <booleanvalue>1</booleanvalue> if the
+ server supports renewing expired tokens automatically when the
+ user is not present.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $offline = false;
+
+/*
+{metadocument}
+ <variable>
+ <name>access_token</name>
+ <type>STRING</type>
+ <value></value>
+ <documentation>
+ <purpose>Access token obtained from the OAuth server</purpose>
+ <usage>Check this variable to get the obtained access token upon
+ successful OAuth authorization.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $access_token = '';
+
+/*
+{metadocument}
+ <variable>
+ <name>access_token_secret</name>
+ <type>STRING</type>
+ <value></value>
+ <documentation>
+ <purpose>Access token secret obtained from the OAuth server</purpose>
+ <usage>If the OAuth protocol version is 1.0 or 1.0a, check this
+ variable to get the obtained access token secret upon successful
+ OAuth authorization.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $access_token_secret = '';
+
+/*
+{metadocument}
+ <variable>
+ <name>access_token_expiry</name>
+ <type>STRING</type>
+ <value></value>
+ <documentation>
+ <purpose>Timestamp of the expiry of the access token obtained from
+ the OAuth server.</purpose>
+ <usage>Check this variable to get the obtained access token expiry
+ time upon successful OAuth authorization. If this variable is
+ empty, that means no expiry time was set.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $access_token_expiry = '';
+
+/*
+{metadocument}
+ <variable>
+ <name>access_token_type</name>
+ <type>STRING</type>
+ <value></value>
+ <documentation>
+ <purpose>Type of access token obtained from the OAuth server.</purpose>
+ <usage>Check this variable to get the obtained access token type
+ upon successful OAuth authorization.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $access_token_type = '';
+
+/*
+{metadocument}
+ <variable>
+ <name>refresh_token</name>
+ <type>STRING</type>
+ <value></value>
+ <documentation>
+ <purpose>Refresh token obtained from the OAuth server</purpose>
+ <usage>Check this variable to get the obtained refresh token upon
+ successful OAuth authorization.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $refresh_token = '';
+
+/*
+{metadocument}
+ <variable>
+ <name>access_token_error</name>
+ <type>STRING</type>
+ <value></value>
+ <documentation>
+ <purpose>Error message returned when a call to the API fails.</purpose>
+ <usage>Check this variable to determine if there was an error while
+ calling the Web services API when using the
+ <functionlink>CallAPI</functionlink> function.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $access_token_error = '';
+
+/*
+{metadocument}
+ <variable>
+ <name>authorization_error</name>
+ <type>STRING</type>
+ <value></value>
+ <documentation>
+ <purpose>Error message returned when it was not possible to obtain
+ an OAuth access token</purpose>
+ <usage>Check this variable to determine if there was an error while
+ trying to obtain the OAuth access token.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $authorization_error = '';
+
+/*
+{metadocument}
+ <variable>
+ <name>response_status</name>
+ <type>INTEGER</type>
+ <value>0</value>
+ <documentation>
+ <purpose>HTTP response status returned by the server when calling an
+ API</purpose>
+ <usage>Check this variable after calling the
+ <functionlink>CallAPI</functionlink> function if the API calls and you
+ need to process the error depending the response status.
+ <integervalue>200</integervalue> means no error.
+ <integervalue>0</integervalue> means the server response was not
+ retrieved.</usage>
+ </documentation>
+ </variable>
+{/metadocument}
+*/
+ var $response_status = 0;
+
+ var $oauth_user_agent = 'PHP-OAuth-API (http://www.phpclasses.org/oauth-api $Revision: 1.58 $)';
+ var $session_started = false;
+
+ Function SetError($error)
+ {
+ $this->error = $error;
+ if($this->debug)
+ $this->OutputDebug('Error: '.$error);
+ return(false);
+ }
+
+ Function SetPHPError($error, &$php_error_message)
+ {
+ if(IsSet($php_error_message)
+ && strlen($php_error_message))
+ $error.=": ".$php_error_message;
+ return($this->SetError($error));
+ }
+
+ Function OutputDebug($message)
+ {
+ if($this->debug)
+ {
+ $message = $this->debug_prefix.$message;
+ $this->debug_output .= $message."\n";;
+ error_log($message);
+ }
+ return(true);
+ }
+
+ Function GetRequestTokenURL(&$request_token_url)
+ {
+ $request_token_url = $this->request_token_url;
+ return(true);
+ }
+
+ Function GetDialogURL(&$url, $redirect_uri = '', $state = '')
+ {
+ $url = (($this->offline && strlen($this->offline_dialog_url)) ? $this->offline_dialog_url : $this->dialog_url);
+ if(strlen($url) === 0)
+ return $this->SetError('the dialog URL '.($this->offline ? 'for offline access ' : '').'is not defined for this server');
+ $url = str_replace(
+ '{REDIRECT_URI}', UrlEncode($redirect_uri), str_replace(
+ '{STATE}', UrlEncode($state), str_replace(
+ '{CLIENT_ID}', UrlEncode($this->client_id), str_replace(
+ '{SCOPE}', UrlEncode($this->scope),
+ $url))));
+ return(true);
+ }
+
+ Function GetAccessTokenURL(&$access_token_url)
+ {
+ $access_token_url = $this->access_token_url;
+ return(true);
+ }
+
+ Function GetStoredState(&$state)
+ {
+ if(!$this->session_started)
+ {
+ if(!function_exists('session_start'))
+ return $this->SetError('Session variables are not accessible in this PHP environment');
+ }
+ if(IsSet($_SESSION['OAUTH_STATE']))
+ $state = $_SESSION['OAUTH_STATE'];
+ else
+ $state = $_SESSION['OAUTH_STATE'] = time().'-'.substr(md5(rand().time()), 0, 6);
+ return(true);
+ }
+
+ Function GetRequestState(&$state)
+ {
+ $check = (strlen($this->append_state_to_redirect_uri) ? $this->append_state_to_redirect_uri : 'state');
+ $state = (IsSet($_GET[$check]) ? $_GET[$check] : null);
+ return(true);
+ }
+
+ Function GetRequestCode(&$code)
+ {
+ $code = (IsSet($_GET['code']) ? $_GET['code'] : null);
+ return(true);
+ }
+
+ Function GetRequestError(&$error)
+ {
+ $error = (IsSet($_GET['error']) ? $_GET['error'] : null);
+ return(true);
+ }
+
+ Function GetRequestDenied(&$denied)
+ {
+ $denied = (IsSet($_GET['denied']) ? $_GET['denied'] : null);
+ return(true);
+ }
+
+ Function GetRequestToken(&$token, &$verifier)
+ {
+ $token = (IsSet($_GET['oauth_token']) ? $_GET['oauth_token'] : null);
+ $verifier = (IsSet($_GET['oauth_verifier']) ? $_GET['oauth_verifier'] : null);
+ return(true);
+ }
+
+ Function GetRedirectURI(&$redirect_uri)
+ {
+ if(strlen($this->redirect_uri))
+ $redirect_uri = $this->redirect_uri;
+ else
+ $redirect_uri = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
+ return true;
+ }
+
+/*
+{metadocument}
+ <function>
+ <name>StoreAccessToken</name>
+ <type>BOOLEAN</type>
+ <documentation>
+ <purpose>Store the values of the access token when it is succefully
+ retrieved from the OAuth server.</purpose>
+ <usage>This function is meant to be only be called from inside the
+ class. By default it stores access tokens in a session variable
+ named <stringvalue>OAUTH_ACCESS_TOKEN</stringvalue>.<paragraphbreak />
+ Actual implementations should create a sub-class and override this
+ function to make the access token values be stored in other types
+ of containers, like for instance databases.</usage>
+ <returnvalue>This function should return
+ <booleanvalue>1</booleanvalue> if the access token was stored
+ successfully.</returnvalue>
+ </documentation>
+ <argument>
+ <name>access_token</name>
+ <type>HASH</type>
+ <documentation>
+ <purpose>Associative array with properties of the access token.
+ The array may have set the following
+ properties:<paragraphbreak />
+ <stringvalue>value</stringvalue>: string value of the access
+ token<paragraphbreak />
+ <stringvalue>authorized</stringvalue>: boolean value that
+ determines if the access token was obtained
+ successfully<paragraphbreak />
+ <stringvalue>expiry</stringvalue>: (optional) timestamp in ISO
+ format relative to UTC time zone of the access token expiry
+ time<paragraphbreak />
+ <stringvalue>type</stringvalue>: (optional) type of OAuth token
+ that may determine how it should be used when sending API call
+ requests.<paragraphbreak />
+ <stringvalue>refresh</stringvalue>: (optional) token that some
+ servers may set to allowing refreshing access tokens when they
+ expire.</purpose>
+ </documentation>
+ </argument>
+ <do>
+{/metadocument}
+*/
+ Function StoreAccessToken($access_token)
+ {
+ if(!$this->session_started)
+ {
+ if(!function_exists('session_start'))
+ return $this->SetError('Session variables are not accessible in this PHP environment');
+ }
+ $_SESSION['OAUTH_ACCESS_TOKEN'][$this->access_token_url] = $access_token;
+ return true;
+ }
+/*
+{metadocument}
+ </do>
+ </function>
+{/metadocument}
+*/
+
+/*
+{metadocument}
+ <function>
+ <name>GetAccessToken</name>
+ <type>BOOLEAN</type>
+ <documentation>
+ <purpose>Retrieve the OAuth access token if it was already
+ previously stored by the
+ <functionlink>StoreAccessToken</functionlink> function.</purpose>
+ <usage>This function is meant to be only be called from inside the
+ class. By default it retrieves access tokens stored in a session
+ variable named
+ <stringvalue>OAUTH_ACCESS_TOKEN</stringvalue>.<paragraphbreak />
+ Actual implementations should create a sub-class and override this
+ function to retrieve the access token values from other types of
+ containers, like for instance databases.</usage>
+ <returnvalue>This function should return
+ <booleanvalue>1</booleanvalue> if the access token was retrieved
+ successfully.</returnvalue>
+ </documentation>
+ <argument>
+ <name>access_token</name>
+ <type>STRING</type>
+ <out />
+ <documentation>
+ <purpose>Return the properties of the access token in an
+ associative array. If the access token was not yet stored, it
+ returns an empty array. Otherwise, the properties it may return
+ are the same that may be passed to the
+ <functionlink>StoreAccessToken</functionlink>.</purpose>
+ </documentation>
+ </argument>
+ <do>
+{/metadocument}
+*/
+ Function GetAccessToken(&$access_token)
+ {
+ if(!$this->session_started)
+ {
+ if(!function_exists('session_start'))
+ return $this->SetError('Session variables are not accessible in this PHP environment');
+ if(!session_start())
+ return($this->SetPHPError('it was not possible to start the PHP session', $php_error_message));
+ $this->session_started = true;
+ }
+ if(IsSet($_SESSION['OAUTH_ACCESS_TOKEN'][$this->access_token_url]))
+ $access_token = $_SESSION['OAUTH_ACCESS_TOKEN'][$this->access_token_url];
+ else
+ $access_token = array();
+ return true;
+ }
+/*
+{metadocument}
+ </do>
+ </function>
+{/metadocument}
+*/
+
+/*
+{metadocument}
+ <function>
+ <name>ResetAccessToken</name>
+ <type>BOOLEAN</type>
+ <documentation>
+ <purpose>Reset the access token to a state back when the user has
+ not yet authorized the access to the OAuth server API.</purpose>
+ <usage>Call this function if for some reason the token to access
+ the API was revoked and you need to ask the user to authorize
+ the access again.<paragraphbreak />
+ By default the class stores and retrieves access tokens in a
+ session variable named
+ <stringvalue>OAUTH_ACCESS_TOKEN</stringvalue>.<paragraphbreak />
+ This function must be called when the user is accessing your site
+ pages, so it can reset the information stored in session variables
+ that cache the state of a previously retrieved access
+ token.<paragraphbreak />
+ Actual implementations should create a sub-class and override this
+ function to reset the access token state when it is stored in
+ other types of containers, like for instance databases.</usage>
+ <returnvalue>This function should return
+ <booleanvalue>1</booleanvalue> if the access token was resetted
+ successfully.</returnvalue>
+ </documentation>
+ <do>
+{/metadocument}
+*/
+ Function ResetAccessToken()
+ {
+ if($this->debug)
+ $this->OutputDebug('Resetting the access token status for OAuth server located at '.$this->access_token_url);
+ if(!$this->session_started)
+ {
+ if(!function_exists('session_start'))
+ return $this->SetError('Session variables are not accessible in this PHP environment');
+ if(!session_start())
+ return($this->SetPHPError('it was not possible to start the PHP session', $php_error_message));
+ }
+ $this->session_started = true;
+ if(IsSet($_SESSION['OAUTH_ACCESS_TOKEN'][$this->access_token_url]))
+ Unset($_SESSION['OAUTH_ACCESS_TOKEN'][$this->access_token_url]);
+ return true;
+ }
+/*
+{metadocument}
+ </do>
+ </function>
+{/metadocument}
+*/
+
+ Function Encode($value)
+ {
+ return(is_array($value) ? $this->EncodeArray($value) : str_replace('%7E', '~', str_replace('+',' ', RawURLEncode($value))));
+ }
+
+ Function EncodeArray($array)
+ {
+ foreach($array as $key => $value)
+ $array[$key] = $this->Encode($value);
+ return $array;
+ }
+
+ Function HMAC($function, $data, $key)
+ {
+ switch($function)
+ {
+ case 'sha1':
+ $pack = 'H40';
+ break;
+ default:
+ if($this->debug)
+ $this->OutputDebug($function.' is not a supported an HMAC hash type');
+ return('');
+ }
+ if(strlen($key) > 64)
+ $key = pack($pack, $function($key));
+ if(strlen($key) < 64)
+ $key = str_pad($key, 64, "\0");
+ return(pack($pack, $function((str_repeat("\x5c", 64) ^ $key).pack($pack, $function((str_repeat("\x36", 64) ^ $key).$data)))));
+ }
+
+ Function SendAPIRequest($url, $method, $parameters, $oauth, $options, &$response)
+ {
+ $this->response_status = 0;
+ $http = new http_class;
+ $http->debug = ($this->debug && $this->debug_http);
+ $http->log_debug = true;
+ $http->sasl_authenticate = 0;
+ $http->user_agent = $this->oauth_user_agent;
+ $http->redirection_limit = (IsSet($options['FollowRedirection']) ? intval($options['FollowRedirection']) : 0);
+ $http->follow_redirect = ($http->redirection_limit != 0);
+ if($this->debug)
+ $this->OutputDebug('Accessing the '.$options['Resource'].' at '.$url);
+ $post_files = array();
+ $method = strtoupper($method);
+ $authorization = '';
+ $type = (IsSet($options['RequestContentType']) ? strtolower(trim(strtok($options['RequestContentType'], ';'))) : 'application/x-www-form-urlencoded');
+ if(IsSet($oauth))
+ {
+ $values = array(
+ 'oauth_consumer_key'=>$this->client_id,
+ 'oauth_nonce'=>md5(uniqid(rand(), true)),
+ 'oauth_signature_method'=>$this->signature_method,
+ 'oauth_timestamp'=>time(),
+ 'oauth_version'=>'1.0',
+ );
+ $files = (IsSet($options['Files']) ? $options['Files'] : array());
+ if(count($files))
+ {
+ foreach($files as $name => $value)
+ {
+ if(!IsSet($parameters[$name]))
+ return($this->SetError('it was specified an file parameters named '.$name));
+ $file = array();
+ switch(IsSet($value['Type']) ? $value['Type'] : 'FileName')
+ {
+ case 'FileName':
+ $file['FileName'] = $parameters[$name];
+ break;
+ case 'Data':
+ $file['Data'] = $parameters[$name];
+ break;
+ default:
+ return($this->SetError($value['Type'].' is not a valid type for file '.$name));
+ }
+ $file['ContentType'] = (IsSet($value['Content-Type']) ? $value['Content-Type'] : 'automatic/name');
+ $post_files[$name] = $file;
+ }
+ UnSet($parameters[$name]);
+ if($method !== 'POST')
+ {
+ $this->OutputDebug('For uploading files the method should be POST not '.$method);
+ $method = 'POST';
+ }
+ if($type !== 'multipart/form-data')
+ {
+ if(IsSet($options['RequestContentType']))
+ return($this->SetError('the request content type for uploading files should be multipart/form-data'));
+ $type = 'multipart/form-data';
+ }
+ $value_parameters = array();
+ }
+ else
+ {
+ if($this->url_parameters
+ && $type === 'application/x-www-form-urlencoded'
+ && count($parameters))
+ {
+ $first = (strpos($url, '?') === false);
+ foreach($parameters as $parameter => $value)
+ {
+ $url .= ($first ? '?' : '&').UrlEncode($parameter).'='.UrlEncode($value);
+ $first = false;
+ }
+ $parameters = array();
+ }
+ $value_parameters = ($type !== 'application/x-www-form-urlencoded' ? array() : $parameters);
+ }
+ $values = array_merge($values, $oauth, $value_parameters);
+ $key = $this->Encode($this->client_secret).'&'.$this->Encode($this->access_token_secret);
+ switch($this->signature_method)
+ {
+ case 'PLAINTEXT':
+ $values['oauth_signature'] = $key;
+ break;
+ case 'HMAC-SHA1':
+ $uri = strtok($url, '?');
+ $sign = $method.'&'.$this->Encode($uri).'&';
+ $first = true;
+ $sign_values = $values;
+ $u = parse_url($url);
+ if(IsSet($u['query']))
+ {
+ parse_str($u['query'], $q);
+ foreach($q as $parameter => $value)
+ $sign_values[$parameter] = $value;
+ }
+ KSort($sign_values);
+ foreach($sign_values as $parameter => $value)
+ {
+ $sign .= $this->Encode(($first ? '' : '&').$parameter.'='.$this->Encode($value));
+ $first = false;
+ }
+ $values['oauth_signature'] = base64_encode($this->HMAC('sha1', $sign, $key));
+ break;
+ default:
+ return $this->SetError($this->signature_method.' signature method is not yet supported');
+ }
+ if($this->authorization_header)
+ {
+ $authorization = 'OAuth';
+ $first = true;
+ foreach($values as $parameter => $value)
+ {
+ $authorization .= ($first ? ' ' : ',').$parameter.'="'.$this->Encode($value).'"';
+ $first = false;
+ }
+ }
+ else
+ {
+ if($method === 'GET'
+ || (IsSet($options['PostValuesInURI'])
+ && $options['PostValuesInURI']))
+ {
+ $first = (strcspn($url, '?') == strlen($url));
+ foreach($values as $parameter => $value)
+ {
+ $url .= ($first ? '?' : '&').$parameter.'='.$this->Encode($value);
+ $first = false;
+ }
+ $post_values = array();
+ }
+ else
+ $post_values = $values;
+ }
+ }
+ if(strlen($error = $http->GetRequestArguments($url, $arguments)))
+ return($this->SetError('it was not possible to open the '.$options['Resource'].' URL: '.$error));
+ if(strlen($error = $http->Open($arguments)))
+ return($this->SetError('it was not possible to open the '.$options['Resource'].' URL: '.$error));
+ if(count($post_files))
+ $arguments['PostFiles'] = $post_files;
+ $arguments['RequestMethod'] = $method;
+ switch($type)
+ {
+ case 'application/x-www-form-urlencoded':
+ case 'multipart/form-data':
+ if(IsSet($options['RequestBody']))
+ return($this->SetError('the request body is defined automatically from the parameters'));
+ $arguments['PostValues'] = $parameters;
+ break;
+ case 'application/json':
+ $arguments['Headers']['Content-Type'] = $options['RequestContentType'];
+ if(!IsSet($options['RequestBody']))
+ {
+ $arguments['Body'] = json_encode($parameters);
+ break;
+ }
+ default:
+ if(!IsSet($options['RequestBody']))
+ return($this->SetError('it was not specified the body value of the of the API call request'));
+ $arguments['Headers']['Content-Type'] = $options['RequestContentType'];
+ $arguments['Body'] = $options['RequestBody'];
+ break;
+ }
+ $arguments['Headers']['Accept'] = (IsSet($options['Accept']) ? $options['Accept'] : '*/*');
+ if(strlen($authorization))
+ $arguments['Headers']['Authorization'] = $authorization;
+ if(strlen($error = $http->SendRequest($arguments))
+ || strlen($error = $http->ReadReplyHeaders($headers)))
+ {
+ $http->Close();
+ return($this->SetError('it was not possible to retrieve the '.$options['Resource'].': '.$error));
+ }
+ $error = $http->ReadWholeReplyBody($data);
+ $http->Close();
+ if(strlen($error))
+ {
+ return($this->SetError('it was not possible to access the '.$options['Resource'].': '.$error));
+ }
+ $this->response_status = intval($http->response_status);
+ $content_type = (IsSet($options['ResponseContentType']) ? $options['ResponseContentType'] : (IsSet($headers['content-type']) ? strtolower(trim(strtok($headers['content-type'], ';'))) : 'unspecified'));
+ switch($content_type)
+ {
+ case 'text/javascript':
+ case 'application/json':
+ if(!function_exists('json_decode'))
+ return($this->SetError('the JSON extension is not available in this PHP setup'));
+ $object = json_decode($data);
+ switch(GetType($object))
+ {
+ case 'object':
+ if(!IsSet($options['ConvertObjects'])
+ || !$options['ConvertObjects'])
+ $response = $object;
+ else
+ {
+ $response = array();
+ foreach($object as $property => $value)
+ $response[$property] = $value;
+ }
+ break;
+ case 'array':
+ $response = $object;
+ break;
+ default:
+ if(!IsSet($object))
+ return($this->SetError('it was not returned a valid JSON definition of the '.$options['Resource'].' values'));
+ $response = $object;
+ break;
+ }
+ break;
+ case 'application/x-www-form-urlencoded':
+ case 'text/plain':
+ case 'text/html':
+ parse_str($data, $response);
+ break;
+ default:
+ $response = $data;
+ break;
+ }
+ if($this->response_status >= 200
+ && $this->response_status < 300)
+ $this->access_token_error = '';
+ else
+ {
+ $this->access_token_error = 'it was not possible to access the '.$options['Resource'].': it was returned an unexpected response status '.$http->response_status.' Response: '.$data;
+ if($this->debug)
+ $this->OutputDebug('Could not retrieve the OAuth access. Error: '.$this->access_token_error);
+ if(IsSet($options['FailOnAccessError'])
+ && $options['FailOnAccessError'])
+ {
+ $this->error = $this->access_token_error;
+ return false;
+ }
+ }
+ return true;
+ }
+
+ Function ProcessToken($code, $refresh)
+ {
+ if($refresh)
+ {
+ $values = array(
+ 'client_id'=>$this->client_id,
+ 'client_secret'=>$this->client_secret,
+ 'refresh_token'=>$this->refresh_token,
+ 'grant_type'=>'refresh_token'
+ );
+ }
+ else
+ {
+ if(!$this->GetRedirectURI($redirect_uri))
+ return false;
+ $values = array(
+ 'code'=>$code,
+ 'client_id'=>$this->client_id,
+ 'client_secret'=>$this->client_secret,
+ 'redirect_uri'=>$redirect_uri,
+ 'grant_type'=>'authorization_code'
+ );
+ }
+ if(!$this->GetAccessTokenURL($url))
+ return false;
+ if(!$this->SendAPIRequest($url, 'POST', $values, null, array('Resource'=>'OAuth '.($refresh ? 'refresh' : 'access').' token', 'ConvertObjects'=>true), $response))
+ return false;
+ if(strlen($this->access_token_error))
+ {
+ $this->authorization_error = $this->access_token_error;
+ return true;
+ }
+ if(!IsSet($response['access_token']))
+ {
+ if(IsSet($response['error']))
+ {
+ $this->authorization_error = 'it was not possible to retrieve the access token: it was returned the error: '.$response['error'];
+ return true;
+ }
+ return($this->SetError('OAuth server did not return the access token'));
+ }
+ $access_token = array(
+ 'value'=>$this->access_token = $response['access_token'],
+ 'authorized'=>true
+ );
+ if($this->debug)
+ $this->OutputDebug('Access token: '.$this->access_token);
+ if(IsSet($response['expires'])
+ || IsSet($response['expires_in']))
+ {
+ $expires = (IsSet($response['expires']) ? $response['expires'] : $response['expires_in']);
+ if(strval($expires) !== strval(intval($expires))
+ || $expires <= 0)
+ return($this->SetError('OAuth server did not return a supported type of access token expiry time'));
+ $this->access_token_expiry = gmstrftime('%Y-%m-%d %H:%M:%S', time() + $expires);
+ if($this->debug)
+ $this->OutputDebug('Access token expiry: '.$this->access_token_expiry.' UTC');
+ $access_token['expiry'] = $this->access_token_expiry;
+ }
+ else
+ $this->access_token_expiry = '';
+ if(IsSet($response['token_type']))
+ {
+ $this->access_token_type = $response['token_type'];
+ if($this->debug)
+ $this->OutputDebug('Access token type: '.$this->access_token_type);
+ $access_token['type'] = $this->access_token_type;
+ }
+ else
+ $this->access_token_type = '';
+ if($refresh)
+ $response['refresh_token'] = $this->refresh_token;
+ elseif(IsSet($response['refresh_token']))
+ {
+ $this->refresh_token = $response['refresh_token'];
+ if($this->debug)
+ $this->OutputDebug('Refresh token: '.$this->refresh_token);
+ $access_token['refresh'] = $this->refresh_token;
+ }
+ else
+ $this->refresh_token = '';
+ if(!$this->StoreAccessToken($access_token))
+ return false;
+ return true;
+ }
+
+ Function RetrieveToken(&$valid)
+ {
+ $valid = false;
+ if(!$this->GetAccessToken($access_token))
+ return false;
+ if(IsSet($access_token['value']))
+ {
+ $this->access_token_expiry = '';
+ if(IsSet($access_token['expiry'])
+ && strcmp($this->access_token_expiry = $access_token['expiry'], gmstrftime('%Y-%m-%d %H:%M:%S')) < 0)
+ {
+ $this->access_token = '';
+ if($this->debug)
+ $this->OutputDebug('The OAuth access token expired in '.$this->access_token_expiry);
+ }
+ else
+ {
+ $this->access_token = $access_token['value'];
+ if(IsSet($access_token['type']))
+ $this->access_token_type = $access_token['type'];
+ else
+ $this->access_token_type = '';
+ if($this->debug)
+ $this->OutputDebug('The OAuth access token '.$this->access_token.' is valid');
+ if(strlen($this->access_token_type)
+ && $this->debug)
+ $this->OutputDebug('The OAuth access token is of type '.$this->access_token_type);
+ if(IsSet($access_token['refresh']))
+ $this->refresh_token = $access_token['refresh'];
+ else
+ $this->refresh_token = '';
+ $valid = true;
+ }
+ }
+ return true;
+ }
+/*
+{metadocument}
+ <function>
+ <name>CallAPI</name>
+ <type>BOOLEAN</type>
+ <documentation>
+ <purpose>Send a HTTP request to the Web services API using a
+ previously obtained authorization token via OAuth.</purpose>
+ <usage>This function can be used to call an API after having
+ previously obtained an access token through the OAuth protocol
+ using the <functionlink>Process</functionlink> function, or by
+ directly setting the variables
+ <variablelink>access_token</variablelink>, as well as
+ <variablelink>access_token_secret</variablelink> in case of using
+ OAuth 1.0 or 1.0a services.</usage>
+ <returnvalue>This function returns <booleanvalue>1</booleanvalue> if
+ the call was done successfully.</returnvalue>
+ </documentation>
+ <argument>
+ <name>url</name>
+ <type>STRING</type>
+ <documentation>
+ <purpose>URL of the API where the HTTP request will be sent.</purpose>
+ </documentation>
+ </argument>
+ <argument>
+ <name>method</name>
+ <type>STRING</type>
+ <documentation>
+ <purpose>HTTP method that will be used to send the request. It can
+ be <stringvalue>GET</stringvalue>,
+ <stringvalue>POST</stringvalue>,
+ <stringvalue>DELETE</stringvalue>, <stringvalue>PUT</stringvalue>,
+ etc..</purpose>
+ </documentation>
+ </argument>
+ <argument>
+ <name>parameters</name>
+ <type>HASH</type>
+ <documentation>
+ <purpose>Associative array with the names and values of the API
+ call request parameters.</purpose>
+ </documentation>
+ </argument>
+ <argument>
+ <name>options</name>
+ <type>HASH</type>
+ <documentation>
+ <purpose>Associative array with additional options to configure
+ the request. Currently it supports the following
+ options:<paragraphbreak />
+ <stringvalue>2Legged</stringvalue>: boolean option that
+ determines if the API request should be 2 legged. The default
+ value is <tt><booleanvalue>0</booleanvalue></tt>.<paragraphbreak />
+ <stringvalue>Accept</stringvalue>: content type value of the
+ Accept HTTP header to be sent in the API call HTTP request.
+ Some APIs require that a certain value be sent to specify
+ which version of the API is being called. The default value is
+ <stringvalue>*&#47;*</stringvalue>.<paragraphbreak />
+ <stringvalue>ConvertObjects</stringvalue>: boolean option that
+ determines if objects should be converted into arrays when the
+ response is returned in JSON format. The default value is
+ <booleanvalue>0</booleanvalue>.<paragraphbreak />
+ <stringvalue>FailOnAccessError</stringvalue>: boolean option
+ that determines if this functions should fail when the server
+ response status is not between 200 and 299. The default value
+ is <booleanvalue>0</booleanvalue>.<paragraphbreak />
+ <stringvalue>Files</stringvalue>: associative array with
+ details of the parameters that must be passed as file uploads.
+ The array indexes must have the same name of the parameters
+ to be sent as files. The respective array entry values must
+ also be associative arrays with the parameters for each file.
+ Currently it supports the following parameters:<paragraphbreak />
+ - <tt>Type</tt> - defines how the parameter value should be
+ treated. It can be <tt>'FileName'</tt> if the parameter value is
+ is the name of a local file to be uploaded. It may also be
+ <tt>'Data'</tt> if the parameter value is the actual data of
+ the file to be uploaded.<paragraphbreak />
+ - Default: <tt>'FileName'</tt><paragraphbreak />
+ - <tt>ContentType</tt> - MIME value of the content type of the
+ file. It can be <tt>'automatic/name'</tt> if the content type
+ should be determine from the file name extension.<paragraphbreak />
+ - Default: <tt>'automatic/name'</tt><paragraphbreak />
+ <stringvalue>PostValuesInURI</stringvalue>: boolean option to
+ determine that a POST request should pass the request values
+ in the URI. The default value is
+ <booleanvalue>0</booleanvalue>.<paragraphbreak />
+ <stringvalue>FollowRedirection</stringvalue>: limit number of
+ times that HTTP response redirects will be followed. If it is
+ set to <integervalue>0</integervalue>, redirection responses
+ fail in error. The default value is
+ <integervalue>0</integervalue>.<paragraphbreak />
+ <stringvalue>RequestBody</stringvalue>: request body data of a
+ custom type. The <stringvalue>RequestContentType</stringvalue>
+ option must be specified, so the
+ <stringvalue>RequestBody</stringvalue> option is considered.<paragraphbreak />
+ <stringvalue>RequestContentType</stringvalue>: content type that
+ should be used to send the request values. It can be either
+ <stringvalue>application/x-www-form-urlencoded</stringvalue>
+ for sending values like from Web forms, or
+ <stringvalue>application/json</stringvalue> for sending the
+ values encoded in JSON format. Other types are accepted if the
+ <stringvalue>RequestBody</stringvalue> option is specified.
+ The default value is
+ <stringvalue>application/x-www-form-urlencoded</stringvalue>.<paragraphbreak />
+ <stringvalue>RequestBody</stringvalue>: request body data of a
+ custom type. The <stringvalue>RequestContentType</stringvalue>
+ option must be specified, so the
+ <stringvalue>RequestBody</stringvalue> option is considered.<paragraphbreak />
+ <stringvalue>Resource</stringvalue>: string with a label that
+ will be used in the error messages and debug log entries to
+ identify what operation the request is performing. The default
+ value is <stringvalue>API call</stringvalue>.<paragraphbreak />
+ <stringvalue>ResponseContentType</stringvalue>: content type
+ that should be considered when decoding the API request
+ response. This overrides the <tt>Content-Type</tt> header
+ returned by the server. If the content type is
+ <stringvalue>application/x-www-form-urlencoded</stringvalue>
+ the function will parse the data returning an array of
+ key-value pairs. If the content type is
+ <stringvalue>application/json</stringvalue> the response will
+ be decode as a JSON-encoded data type. Other content type
+ values will make the function return the original response
+ value as it was returned from the server. The default value
+ for this option is to use what the server returned in the
+ <tt>Content-Type</tt> header.</purpose>
+ </documentation>
+ </argument>
+ <argument>
+ <name>response</name>
+ <type>STRING</type>
+ <out />
+ <documentation>
+ <purpose>Return the value of the API response. If the value is
+ JSON encoded, this function will decode it and return the value
+ converted to respective types. If the value is form encoded,
+ this function will decode the response and return it as an
+ array. Otherwise, the class will return the value as a
+ string.</purpose>
+ </documentation>
+ </argument>
+ <do>
+{/metadocument}
+*/
+ Function CallAPI($url, $method, $parameters, $options, &$response)
+ {
+ if(!IsSet($options['Resource']))
+ $options['Resource'] = 'API call';
+ if(!IsSet($options['ConvertObjects']))
+ $options['ConvertObjects'] = false;
+ if(strlen($this->access_token) === 0)
+ {
+ if(!$this->RetrieveToken($valid))
+ return false;
+ if(!$valid)
+ return $this->SetError('the access token is not set to a valid value');
+ }
+ switch(intval($this->oauth_version))
+ {
+ case 1:
+ $oauth = array(
+ 'oauth_token'=>((IsSet($options['2Legged']) && $options['2Legged']) ? '' : $this->access_token)
+ );
+ break;
+
+ case 2:
+ if(strlen($this->access_token_expiry)
+ && strcmp($this->access_token_expiry, gmstrftime('%Y-%m-%d %H:%M:%S')) <= 0)
+ {
+ if(strlen($this->refresh_token) === 0)
+ return($this->SetError('the access token expired and no refresh token is available'));
+ if($this->debug)
+ {
+ $this->OutputDebug('The access token expired on '.$this->access_token_expiry);
+ $this->OutputDebug('Refreshing the access token');
+ }
+ if(!$this->ProcessToken(null, true))
+ return false;
+ }
+ $oauth = null;
+ $url .= (strcspn($url, '?') < strlen($url) ? '&' : '?').'access_token='.UrlEncode($this->access_token);
+ break;
+
+ default:
+ return($this->SetError($this->oauth_version.' is not a supported version of the OAuth protocol'));
+ }
+ return($this->SendAPIRequest($url, $method, $parameters, $oauth, $options, $response));
+ }
+/*
+{metadocument}
+ </do>
+ </function>
+{/metadocument}
+*/
+
+/*
+{metadocument}
+ <function>
+ <name>Initialize</name>
+ <type>BOOLEAN</type>
+ <documentation>
+ <purpose>Initialize the class variables and internal state. It must
+ be called before calling other class functions.</purpose>
+ <usage>Set the <variablelink>server</variablelink> variable before
+ calling this function to let it initialize the class variables to
+ work with the specified server type. Alternatively, you can set
+ other class variables manually to make it work with servers that
+ are not yet built-in supported.</usage>
+ <returnvalue>This function returns <booleanvalue>1</booleanvalue> if
+ it was able to successfully initialize the class for the specified
+ server type.</returnvalue>
+ </documentation>
+ <do>
+{/metadocument}
+*/
+ Function Initialize()
+ {
+ if(strlen($this->server) === 0)
+ return true;
+ $this->request_token_url = '';
+ $this->append_state_to_redirect_uri = '';
+ $this->authorization_header = true;
+ $this->url_parameters = false;
+ $this->token_request_method = 'GET';
+ $this->signature_method = 'HMAC-SHA1';
+ switch($this->server)
+ {
+ case 'Bitbucket':
+ $this->oauth_version = '1.0a';
+ $this->request_token_url = 'https://bitbucket.org/!api/1.0/oauth/request_token';
+ $this->dialog_url = 'https://bitbucket.org/!api/1.0/oauth/authenticate';
+ $this->access_token_url = 'https://bitbucket.org/!api/1.0/oauth/access_token';
+ $this->url_parameters = true;
+ break;
+
+ case 'Box':
+ $this->oauth_version = '2.0';
+ $this->dialog_url = 'https://www.box.com/api/oauth2/authorize?response_type=code&client_id={CLIENT_ID}&redirect_uri={REDIRECT_URI}&state={STATE}';
+ $this->offline_dialog_url = 'https://www.box.com/api/oauth2/authorize?response_type=code&client_id={CLIENT_ID}&redirect_uri={REDIRECT_URI}&state={STATE}&access_type=offline&approval_prompt=force';
+ $this->access_token_url = 'https://www.box.com/api/oauth2/token';
+ break;
+
+ case 'Dropbox':
+ $this->oauth_version = '1.0';
+ $this->request_token_url = 'https://api.dropbox.com/1/oauth/request_token';
+ $this->dialog_url = 'https://www.dropbox.com/1/oauth/authorize';
+ $this->access_token_url = 'https://api.dropbox.com/1/oauth/access_token';
+ $this->authorization_header = false;
+ break;
+
+ case 'Eventful':
+ $this->oauth_version = '1.0a';
+ $this->request_token_url = 'http://eventful.com/oauth/request_token';
+ $this->dialog_url = 'http://eventful.com/oauth/authorize';
+ $this->access_token_url = 'http://eventful.com/oauth/access_token';
+ $this->authorization_header = false;
+ $this->url_parameters = true;
+ $this->token_request_method = 'POST';
+ break;
+
+ case 'Evernote':
+ $this->oauth_version = '1.0a';
+ $this->request_token_url = 'https://sandbox.evernote.com/oauth';
+ $this->dialog_url = 'https://sandbox.evernote.com/OAuth.action';
+ $this->access_token_url = 'https://sandbox.evernote.com/oauth';
+ $this->url_parameters = true;
+ $this->authorization_header = false;
+ break;
+
+ case 'Facebook':
+ $this->oauth_version = '2.0';
+ $this->dialog_url = 'https://www.facebook.com/dialog/oauth?client_id={CLIENT_ID}&redirect_uri={REDIRECT_URI}&scope={SCOPE}&state={STATE}';
+ $this->access_token_url = 'https://graph.facebook.com/oauth/access_token';
+ break;
+
+ case 'Fitbit':
+ $this->oauth_version = '1.0a';
+ $this->request_token_url = 'http://api.fitbit.com/oauth/request_token';
+ $this->dialog_url = 'http://api.fitbit.com/oauth/authorize';
+ $this->access_token_url = 'http://api.fitbit.com/oauth/access_token';
+ break;
+
+ case 'Flickr':
+ $this->oauth_version = '1.0a';
+ $this->request_token_url = 'http://www.flickr.com/services/oauth/request_token';
+ $this->dialog_url = 'http://www.flickr.com/services/oauth/authorize?perms={SCOPE}';
+ $this->access_token_url = 'http://www.flickr.com/services/oauth/access_token';
+ $this->authorization_header = false;
+ break;
+
+ case 'Foursquare':
+ $this->oauth_version = '2.0';
+ $this->dialog_url = 'https://foursquare.com/oauth2/authorize?client_id={CLIENT_ID}&scope={SCOPE}&response_type=code&redirect_uri={REDIRECT_URI}&state={STATE}';
+ $this->access_token_url = 'https://foursquare.com/oauth2/access_token';
+ break;
+
+ case 'github':
+ $this->oauth_version = '2.0';
+ $this->dialog_url = 'https://github.com/login/oauth/authorize?client_id={CLIENT_ID}&redirect_uri={REDIRECT_URI}&scope={SCOPE}&state={STATE}';
+ $this->access_token_url = 'https://github.com/login/oauth/access_token';
+ break;
+
+ case 'Google':
+ $this->oauth_version = '2.0';
+ $this->dialog_url = 'https://accounts.google.com/o/oauth2/auth?response_type=code&client_id={CLIENT_ID}&redirect_uri={REDIRECT_URI}&scope={SCOPE}&state={STATE}';
+ $this->offline_dialog_url = 'https://accounts.google.com/o/oauth2/auth?response_type=code&client_id={CLIENT_ID}&redirect_uri={REDIRECT_URI}&scope={SCOPE}&state={STATE}&access_type=offline&approval_prompt=force';
+ $this->access_token_url = 'https://accounts.google.com/o/oauth2/token';
+ break;
+
+ case 'Instagram':
+ $this->oauth_version = '2.0';
+ $this->dialog_url ='https://api.instagram.com/oauth/authorize/?client_id={CLIENT_ID}&redirect_uri={REDIRECT_URI}&scope={SCOPE}&response_type=code&state={STATE}';
+ $this->access_token_url = 'https://api.instagram.com/oauth/access_token';
+ break;
+
+ case 'LinkedIn':
+ $this->oauth_version = '1.0a';
+ $this->request_token_url = 'https://api.linkedin.com/uas/oauth/requestToken?scope={SCOPE}';
+ $this->dialog_url = 'https://api.linkedin.com/uas/oauth/authenticate';
+ $this->access_token_url = 'https://api.linkedin.com/uas/oauth/accessToken';
+ $this->url_parameters = true;
+ break;
+
+ case 'Microsoft':
+ $this->oauth_version = '2.0';
+ $this->dialog_url = 'https://login.live.com/oauth20_authorize.srf?client_id={CLIENT_ID}&scope={SCOPE}&response_type=code&redirect_uri={REDIRECT_URI}&state={STATE}';
+ $this->access_token_url = 'https://login.live.com/oauth20_token.srf';
+ break;
+
+ case 'RightSignature':
+ $this->oauth_version = '1.0a';
+ $this->request_token_url = 'https://rightsignature.com/oauth/request_token';
+ $this->dialog_url = 'https://rightsignature.com/oauth/authorize';
+ $this->access_token_url = 'https://rightsignature.com/oauth/access_token';
+ $this->authorization_header = false;
+ break;
+
+ case 'Scoop.it':
+ $this->oauth_version = '1.0a';
+ $this->request_token_url = 'https://www.scoop.it/oauth/request';
+ $this->dialog_url = 'https://www.scoop.it/oauth/authorize';
+ $this->access_token_url = 'https://www.scoop.it/oauth/access';
+ $this->authorization_header = false;
+ break;
+
+ case 'StockTwits':
+ $this->oauth_version = '2.0';
+ $this->dialog_url = 'https://api.stocktwits.com/api/2/oauth/authorize?client_id={CLIENT_ID}&response_type=code&redirect_uri={REDIRECT_URI}&scope={SCOPE}&state={STATE}';
+ $this->access_token_url = 'https://api.stocktwits.com/api/2/oauth/token';
+ break;
+
+ case 'Tumblr':
+ $this->oauth_version = '1.0a';
+ $this->request_token_url = 'http://www.tumblr.com/oauth/request_token';
+ $this->dialog_url = 'http://www.tumblr.com/oauth/authorize';
+ $this->access_token_url = 'http://www.tumblr.com/oauth/access_token';
+ break;
+
+ case 'Twitter':
+ $this->oauth_version = '1.0a';
+ $this->request_token_url = 'https://api.twitter.com/oauth/request_token';
+ $this->dialog_url = 'https://api.twitter.com/oauth/authenticate';
+ $this->access_token_url = 'https://api.twitter.com/oauth/access_token';
+ $this->url_parameters = true;
+ break;
+
+ case 'XING':
+ $this->oauth_version = '1.0a';
+ $this->request_token_url = 'https://api.xing.com/v1/request_token';
+ $this->dialog_url = 'https://api.xing.com/v1/authorize';
+ $this->access_token_url = 'https://api.xing.com/v1/access_token';
+ $this->authorization_header = false;
+ break;
+
+ case 'Yahoo':
+ $this->oauth_version = '1.0a';
+ $this->request_token_url = 'https://api.login.yahoo.com/oauth/v2/get_request_token';
+ $this->dialog_url = 'https://api.login.yahoo.com/oauth/v2/request_auth';
+ $this->access_token_url = 'https://api.login.yahoo.com/oauth/v2/get_token';
+ $this->authorization_header = false;
+ break;
+
+ default:
+ return($this->SetError($this->server.' is not yet a supported type of OAuth server. Please contact the author Manuel Lemos <mlemos@acm.org> to request adding built-in support to this type of OAuth server.'));
+ }
+ return(true);
+ }
+/*
+{metadocument}
+ </do>
+ </function>
+{/metadocument}
+*/
+
+/*
+{metadocument}
+ <function>
+ <name>Process</name>
+ <type>BOOLEAN</type>
+ <documentation>
+ <purpose>Process the OAuth protocol interaction with the OAuth
+ server.</purpose>
+ <usage>Call this function when you need to retrieve the OAuth access
+ token. Check the <variablelink>access_token</variablelink> to
+ determine if the access token was obtained successfully.</usage>
+ <returnvalue>This function returns <booleanvalue>1</booleanvalue> if
+ the OAuth protocol was processed without errors.</returnvalue>
+ </documentation>
+ <do>
+{/metadocument}
+*/
+ Function Process()
+ {
+ switch(intval($this->oauth_version))
+ {
+ case 1:
+ $one_a = ($this->oauth_version === '1.0a');
+ if($this->debug)
+ $this->OutputDebug('Checking the OAuth token authorization state');
+ if(!$this->GetAccessToken($access_token))
+ return false;
+ if(IsSet($access_token['authorized'])
+ && IsSet($access_token['value']))
+ {
+ $expired = (IsSet($access_token['expiry']) && strcmp($access_token['expiry'], gmstrftime('%Y-%m-%d %H:%M:%S')) <= 0);
+ if(!$access_token['authorized']
+ || $expired)
+ {
+ if($this->debug)
+ {
+ if($expired)
+ $this->OutputDebug('The OAuth token expired on '.$access_token['expiry'].'UTC');
+ else
+ $this->OutputDebug('The OAuth token is not yet authorized');
+ $this->OutputDebug('Checking the OAuth token and verifier');
+ }
+ if(!$this->GetRequestToken($token, $verifier))
+ return false;
+ if(!IsSet($token)
+ || ($one_a
+ && !IsSet($verifier)))
+ {
+ if(!$this->GetRequestDenied($denied))
+ return false;
+ if(IsSet($denied)
+ && $denied === $access_token['value'])
+ {
+ if($this->debug)
+ $this->OutputDebug('The authorization request was denied');
+ $this->authorization_error = 'the request was denied';
+ return true;
+ }
+ else
+ {
+ if($this->debug)
+ $this->OutputDebug('Reset the OAuth token state because token and verifier are not both set');
+ $access_token = array();
+ }
+ }
+ elseif($token !== $access_token['value'])
+ {
+ if($this->debug)
+ $this->OutputDebug('Reset the OAuth token state because token does not match what as previously retrieved');
+ $access_token = array();
+ }
+ else
+ {
+ if(!$this->GetAccessTokenURL($url))
+ return false;
+ $oauth = array(
+ 'oauth_token'=>$token,
+ );
+ if($one_a)
+ $oauth['oauth_verifier'] = $verifier;
+ $this->access_token_secret = $access_token['secret'];
+ $options = array('Resource'=>'OAuth access token');
+ $method = strtoupper($this->token_request_method);
+ switch($method)
+ {
+ case 'GET':
+ break;
+ case 'POST':
+ $options['PostValuesInURI'] = true;
+ break;
+ default:
+ $this->error = $method.' is not a supported method to request tokens';
+ break;
+ }
+ if(!$this->SendAPIRequest($url, $method, array(), $oauth, $options, $response))
+ return false;
+ if(strlen($this->access_token_error))
+ {
+ $this->authorization_error = $this->access_token_error;
+ return true;
+ }
+ if(!IsSet($response['oauth_token'])
+ || !IsSet($response['oauth_token_secret']))
+ {
+ $this->authorization_error= 'it was not returned the access token and secret';
+ return true;
+ }
+ $access_token = array(
+ 'value'=>$response['oauth_token'],
+ 'secret'=>$response['oauth_token_secret'],
+ 'authorized'=>true
+ );
+ if(IsSet($response['oauth_expires_in']))
+ {
+ $expires = $response['oauth_expires_in'];
+ if(strval($expires) !== strval(intval($expires))
+ || $expires <= 0)
+ return($this->SetError('OAuth server did not return a supported type of access token expiry time'));
+ $this->access_token_expiry = gmstrftime('%Y-%m-%d %H:%M:%S', time() + $expires);
+ if($this->debug)
+ $this->OutputDebug('Access token expiry: '.$this->access_token_expiry.' UTC');
+ $access_token['expiry'] = $this->access_token_expiry;
+ }
+ else
+ $this->access_token_expiry = '';
+
+ if(!$this->StoreAccessToken($access_token))
+ return false;
+ if($this->debug)
+ $this->OutputDebug('The OAuth token was authorized');
+ }
+ }
+ elseif($this->debug)
+ $this->OutputDebug('The OAuth token was already authorized');
+ if(IsSet($access_token['authorized'])
+ && $access_token['authorized'])
+ {
+ $this->access_token = $access_token['value'];
+ $this->access_token_secret = $access_token['secret'];
+ return true;
+ }
+ }
+ else
+ {
+ if($this->debug)
+ $this->OutputDebug('The OAuth access token is not set');
+ $access_token = array();
+ }
+ if(!IsSet($access_token['authorized']))
+ {
+ if($this->debug)
+ $this->OutputDebug('Requesting the unauthorized OAuth token');
+ if(!$this->GetRequestTokenURL($url))
+ return false;
+ $url = str_replace('{SCOPE}', UrlEncode($this->scope), $url);
+ if(!$this->GetRedirectURI($redirect_uri))
+ return false;
+ $oauth = array(
+ 'oauth_callback'=>$redirect_uri,
+ );
+ $options = array('Resource'=>'OAuth request token');
+ $method = strtoupper($this->token_request_method);
+ switch($method)
+ {
+ case 'GET':
+ break;
+ case 'POST':
+ $options['PostValuesInURI'] = true;
+ break;
+ default:
+ $this->error = $method.' is not a supported method to request tokens';
+ break;
+ }
+ if(!$this->SendAPIRequest($url, $method, array(), $oauth, $options, $response))
+ return false;
+ if(strlen($this->access_token_error))
+ {
+ $this->authorization_error = $this->access_token_error;
+ return true;
+ }
+ if(!IsSet($response['oauth_token'])
+ || !IsSet($response['oauth_token_secret']))
+ {
+ $this->authorization_error = 'it was not returned the requested token';
+ return true;
+ }
+ $access_token = array(
+ 'value'=>$response['oauth_token'],
+ 'secret'=>$response['oauth_token_secret'],
+ 'authorized'=>false
+ );
+ if(!$this->StoreAccessToken($access_token))
+ return false;
+ }
+ if(!$this->GetDialogURL($url))
+ return false;
+ $url .= (strpos($url, '?') === false ? '?' : '&').'oauth_token='.$access_token['value'];
+ if(!$one_a)
+ {
+ if(!$this->GetRedirectURI($redirect_uri))
+ return false;
+ $url .= '&oauth_callback='.UrlEncode($redirect_uri);
+ }
+ if($this->debug)
+ $this->OutputDebug('Redirecting to OAuth authorize page '.$url);
+ Header('HTTP/1.0 302 OAuth Redirection');
+ Header('Location: '.$url);
+ $this->exit = true;
+ return true;
+
+ case 2:
+ if($this->debug)
+ $this->OutputDebug('Checking if OAuth access token was already retrieved from '.$this->access_token_url);
+ if(!$this->RetrieveToken($valid))
+ return false;
+ if($valid)
+ return true;
+ if($this->debug)
+ $this->OutputDebug('Checking the authentication state in URI '.$_SERVER['REQUEST_URI']);
+ if(!$this->GetStoredState($stored_state))
+ return false;
+ if(strlen($stored_state) == 0)
+ return($this->SetError('it was not set the OAuth state'));
+ if(!$this->GetRequestState($state))
+ return false;
+ if($state === $stored_state)
+ {
+ if($this->debug)
+ $this->OutputDebug('Checking the authentication code');
+ if(!$this->GetRequestCode($code))
+ return false;
+ if(strlen($code) == 0)
+ {
+ if(!$this->GetRequestError($this->authorization_error))
+ return false;
+ if(IsSet($this->authorization_error))
+ {
+ if($this->debug)
+ $this->OutputDebug('Authorization failed with error code '.$this->authorization_error);
+ switch($this->authorization_error)
+ {
+ case 'invalid_request':
+ case 'unauthorized_client':
+ case 'access_denied':
+ case 'unsupported_response_type':
+ case 'invalid_scope':
+ case 'server_error':
+ case 'temporarily_unavailable':
+ case 'user_denied':
+ return true;
+ default:
+ return($this->SetError('it was returned an unknown OAuth error code'));
+ }
+ }
+ return($this->SetError('it was not returned the OAuth dialog code'));
+ }
+ if(!$this->ProcessToken($code, false))
+ return false;
+ }
+ else
+ {
+ if(!$this->GetRedirectURI($redirect_uri))
+ return false;
+ if(strlen($this->append_state_to_redirect_uri))
+ $redirect_uri .= (strpos($redirect_uri, '?') === false ? '?' : '&').$this->append_state_to_redirect_uri.'='.$stored_state;
+ if(!$this->GetDialogURL($url, $redirect_uri, $stored_state))
+ return false;
+ if(strlen($url) == 0)
+ return($this->SetError('it was not set the OAuth dialog URL'));
+ if($this->debug)
+ $this->OutputDebug('Redirecting to OAuth Dialog '.$url);
+ Header('HTTP/1.0 302 OAuth Redirection');
+ Header('Location: '.$url);
+ $this->exit = true;
+ }
+ break;
+
+ default:
+ return($this->SetError($this->oauth_version.' is not a supported version of the OAuth protocol'));
+ }
+ return(true);
+ }
+/*
+{metadocument}
+ </do>
+ </function>
+{/metadocument}
+*/
+
+/*
+{metadocument}
+ <function>
+ <name>Finalize</name>
+ <type>BOOLEAN</type>
+ <documentation>
+ <purpose>Cleanup any resources that may have been used during the
+ OAuth protocol processing or execution of API calls.</purpose>
+ <usage>Always call this function as the last step after calling the
+ functions <functionlink>Process</functionlink> or
+ <functionlink>CallAPI</functionlink>.</usage>
+ <returnvalue>This function returns <booleanvalue>1</booleanvalue> if
+ the function cleaned up any resources successfully.</returnvalue>
+ </documentation>
+ <argument>
+ <name>success</name>
+ <type>BOOLEAN</type>
+ <documentation>
+ <purpose>Pass the last success state returned by the class or any
+ external code processing the class function results.</purpose>
+ </documentation>
+ </argument>
+ <do>
+{/metadocument}
+*/
+ Function Finalize($success)
+ {
+ return($success);
+ }
+/*
+{metadocument}
+ </do>
+ </function>
+{/metadocument}
+*/
+
+/*
+{metadocument}
+ <function>
+ <name>Output</name>
+ <type>VOID</type>
+ <documentation>
+ <purpose>Display the results of the OAuth protocol processing.</purpose>
+ <usage>Only call this function if you are debugging the OAuth
+ authorization process and you need to view what was its
+ results.</usage>
+ </documentation>
+ <do>
+{/metadocument}
+*/
+ Function Output()
+ {
+ if(strlen($this->authorization_error)
+ || strlen($this->access_token_error)
+ || strlen($this->access_token))
+ {
+?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>OAuth client result</title>
+</head>
+<body>
+<h1>OAuth client result</h1>
+<?php
+ if(strlen($this->authorization_error))
+ {
+?>
+<p>It was not possible to authorize the application.<?php
+ if($this->debug)
+ {
+?>
+<br>Authorization error: <?php echo HtmlSpecialChars($this->authorization_error);
+ }
+?></p>
+<?php
+ }
+ elseif(strlen($this->access_token_error))
+ {
+?>
+<p>It was not possible to use the application access token.
+<?php
+ if($this->debug)
+ {
+?>
+<br>Error: <?php echo HtmlSpecialChars($this->access_token_error);
+ }
+?></p>
+<?php
+ }
+ elseif(strlen($this->access_token))
+ {
+?>
+<p>The application authorization was obtained successfully.
+<?php
+ if($this->debug)
+ {
+?>
+<br>Access token: <?php echo HtmlSpecialChars($this->access_token);
+ if(IsSet($this->access_token_secret))
+ {
+?>
+<br>Access token secret: <?php echo HtmlSpecialChars($this->access_token_secret);
+ }
+ }
+?></p>
+<?php
+ if(strlen($this->access_token_expiry))
+ {
+?>
+<p>Access token expiry: <?php echo $this->access_token_expiry; ?> UTC</p>
+<?php
+ }
+ }
+?>
+</body>
+</html>
+<?php
+ }
+ }
+/*
+{metadocument}
+ </do>
+ </function>
+{/metadocument}
+*/
+
+};
+
+/*
+
+{metadocument}
+</class>
+{/metadocument}
+
+*/
+
+?> \ No newline at end of file
diff --git a/library/oauth/oauth_client_class.html b/library/oauth/oauth_client_class.html
new file mode 100644
index 000000000..690730a7e
--- /dev/null
+++ b/library/oauth/oauth_client_class.html
@@ -0,0 +1,607 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>Class: OAuth client</title>
+</head>
+<body>
+<center><h1>Class: OAuth client</h1></center>
+<hr />
+<ul>
+<p><b>Version:</b> <tt>@(#) $Id: oauth_client.php,v 1.58 2013/04/11 09:33:16 mlemos Exp $</tt></p>
+<h2><a name="table_of_contents">Contents</a></h2>
+<ul>
+<li><a href="#2.1.1">Summary</a></li>
+<ul>
+<li><a href="#3.2.0">Name</a></li>
+<li><a href="#3.2.0.0">Author</a></li>
+<li><a href="#3.2.0.1">Copyright</a></li>
+<li><a href="#3.2.0.2">Version</a></li>
+<li><a href="#3.2.0.3">Purpose</a></li>
+<li><a href="#3.2.0.4">Usage</a></li>
+</ul>
+<li><a href="#4.1.1">Variables</a></li>
+<ul>
+<li><a href="#5.2.31">error</a></li>
+<li><a href="#5.2.32">debug</a></li>
+<li><a href="#5.2.33">debug_http</a></li>
+<li><a href="#5.2.34">exit</a></li>
+<li><a href="#5.2.35">debug_output</a></li>
+<li><a href="#5.2.36">debug_prefix</a></li>
+<li><a href="#5.2.37">server</a></li>
+<li><a href="#5.2.38">request_token_url</a></li>
+<li><a href="#5.2.39">dialog_url</a></li>
+<li><a href="#5.2.40">offline_dialog_url</a></li>
+<li><a href="#5.2.41">append_state_to_redirect_uri</a></li>
+<li><a href="#5.2.42">access_token_url</a></li>
+<li><a href="#5.2.43">oauth_version</a></li>
+<li><a href="#5.2.44">url_parameters</a></li>
+<li><a href="#5.2.45">authorization_header</a></li>
+<li><a href="#5.2.46">token_request_method</a></li>
+<li><a href="#5.2.47">signature_method</a></li>
+<li><a href="#5.2.48">redirect_uri</a></li>
+<li><a href="#5.2.49">client_id</a></li>
+<li><a href="#5.2.50">client_secret</a></li>
+<li><a href="#5.2.51">scope</a></li>
+<li><a href="#5.2.52">offline</a></li>
+<li><a href="#5.2.53">access_token</a></li>
+<li><a href="#5.2.54">access_token_secret</a></li>
+<li><a href="#5.2.55">access_token_expiry</a></li>
+<li><a href="#5.2.56">access_token_type</a></li>
+<li><a href="#5.2.57">refresh_token</a></li>
+<li><a href="#5.2.58">access_token_error</a></li>
+<li><a href="#5.2.59">authorization_error</a></li>
+<li><a href="#5.2.60">response_status</a></li>
+</ul>
+<li><a href="#6.1.1">Functions</a></li>
+<ul>
+<li><a href="#7.2.9">StoreAccessToken</a></li>
+<li><a href="#9.2.10">GetAccessToken</a></li>
+<li><a href="#11.2.11">ResetAccessToken</a></li>
+<li><a href="#11.2.12">CallAPI</a></li>
+<li><a href="#13.2.13">Initialize</a></li>
+<li><a href="#13.2.14">Process</a></li>
+<li><a href="#13.2.15">Finalize</a></li>
+<li><a href="#15.2.16">Output</a></li>
+</ul>
+</ul>
+<p><a href="#table_of_contents">Top of the table of contents</a></p>
+</ul>
+<hr />
+<ul>
+<h2><li><a name="2.1.1">Summary</a></li></h2>
+<ul>
+<h3><a name="3.2.0">Name</a></h3>
+<p>OAuth client</p>
+<h3><a name="3.2.0.0">Author</a></h3>
+<p>Manuel Lemos (<a href="mailto:mlemos-at-acm.org">mlemos-at-acm.org</a>)</p>
+<h3><a name="3.2.0.1">Copyright</a></h3>
+<p>Copyright &copy; (C) Manuel Lemos 2012</p>
+<h3><a name="3.2.0.2">Version</a></h3>
+<p>@(#) $Id: oauth_client.php,v 1.58 2013/04/11 09:33:16 mlemos Exp $</p>
+<h3><a name="3.2.0.3">Purpose</a></h3>
+<p>This class serves two main purposes:</p>
+<p> 1) Implement the OAuth protocol to retrieve a token from a server to authorize the access to an API on behalf of the current user.</p>
+<p> 2) Perform calls to a Web services API using a token previously obtained using this class or a token provided some other way by the Web services provider.</p>
+<h3><a name="3.2.0.4">Usage</a></h3>
+<p>Regardless of your purposes, you always need to start calling the class <tt><a href="#function_Initialize">Initialize</a></tt> function after initializing setup variables. After you are done with the class, always call the <tt><a href="#function_Finalize">Finalize</a></tt> function at the end.</p>
+<p> This class supports either OAuth protocol versions 1.0, 1.0a and 2.0. It abstracts the differences between these protocol versions, so the class usage is the same independently of the OAuth version of the server.</p>
+<p> The class also provides built-in support to several popular OAuth servers, so you do not have to manually configure all the details to access those servers. Just set the <tt><a href="#variable_server">server</a></tt> variable to configure the class to access one of the built-in supported servers.</p>
+<p> If you need to access one type of server that is not yet directly supported by the class, you need to configure it explicitly setting the variables: <tt><a href="#variable_oauth_version">oauth_version</a></tt>, <tt><a href="#variable_url_parameters">url_parameters</a></tt>, <tt><a href="#variable_authorization_header">authorization_header</a></tt>, <tt><a href="#variable_request_token_url">request_token_url</a></tt>, <tt><a href="#variable_dialog_url">dialog_url</a></tt>, <tt><a href="#variable_offline_dialog_url">offline_dialog_url</a></tt>, <tt><a href="#variable_append_state_to_redirect_uri">append_state_to_redirect_uri</a></tt> and <tt><a href="#variable_access_token_url">access_token_url</a></tt>.</p>
+<p> Before proceeding to the actual OAuth authorization process, you need to have registered your application with the OAuth server. The registration provides you values to set the variables <tt><a href="#variable_client_id">client_id</a></tt> and <tt><a href="#variable_client_secret">client_secret</a></tt>.</p>
+<p> You also need to set the variables <tt><a href="#variable_redirect_uri">redirect_uri</a></tt> and <tt><a href="#variable_scope">scope</a></tt> before calling the <tt><a href="#function_Process">Process</a></tt> function to make the class perform the necessary interactions with the OAuth server.</p>
+<p> The OAuth protocol involves multiple steps that include redirection to the OAuth server. There it asks permission to the current user to grant your application access to APIs on his/her behalf. When there is a redirection, the class will set the <tt><a href="#variable_exit">exit</a></tt> variable to 1. Then your script should exit immediately without outputting anything.</p>
+<p> When the OAuth access token is successfully obtained, the following variables are set by the class with the obtained values: <tt><a href="#variable_access_token">access_token</a></tt>, <tt><a href="#variable_access_token_secret">access_token_secret</a></tt>, <tt><a href="#variable_access_token_expiry">access_token_expiry</a></tt>, <tt><a href="#variable_access_token_type">access_token_type</a></tt>. You may want to store these values to use them later when calling the server APIs.</p>
+<p> If there was a problem during OAuth authorization process, check the variable <tt><a href="#variable_authorization_error">authorization_error</a></tt> to determine the reason.</p>
+<p> Once you get the access token, you can call the server APIs using the <tt><a href="#function_CallAPI">CallAPI</a></tt> function. Check the <tt><a href="#variable_access_token_error">access_token_error</a></tt> variable to determine if there was an error when trying to to call the API.</p>
+<p> If for some reason the user has revoked the access to your application, you need to ask the user to authorize your application again. First you may need to call the function <tt><a href="#function_ResetAccessToken">ResetAccessToken</a></tt> to reset the value of the access token that may be cached in session variables.</p>
+<p><a href="#table_of_contents">Table of contents</a></p>
+</ul>
+</ul>
+<hr />
+<ul>
+<h2><li><a name="variables"></a><a name="4.1.1">Variables</a></li></h2>
+<ul>
+<li><tt><a href="#variable_error">error</a></tt></li><br />
+<li><tt><a href="#variable_debug">debug</a></tt></li><br />
+<li><tt><a href="#variable_debug_http">debug_http</a></tt></li><br />
+<li><tt><a href="#variable_exit">exit</a></tt></li><br />
+<li><tt><a href="#variable_debug_output">debug_output</a></tt></li><br />
+<li><tt><a href="#variable_debug_prefix">debug_prefix</a></tt></li><br />
+<li><tt><a href="#variable_server">server</a></tt></li><br />
+<li><tt><a href="#variable_request_token_url">request_token_url</a></tt></li><br />
+<li><tt><a href="#variable_dialog_url">dialog_url</a></tt></li><br />
+<li><tt><a href="#variable_offline_dialog_url">offline_dialog_url</a></tt></li><br />
+<li><tt><a href="#variable_append_state_to_redirect_uri">append_state_to_redirect_uri</a></tt></li><br />
+<li><tt><a href="#variable_access_token_url">access_token_url</a></tt></li><br />
+<li><tt><a href="#variable_oauth_version">oauth_version</a></tt></li><br />
+<li><tt><a href="#variable_url_parameters">url_parameters</a></tt></li><br />
+<li><tt><a href="#variable_authorization_header">authorization_header</a></tt></li><br />
+<li><tt><a href="#variable_token_request_method">token_request_method</a></tt></li><br />
+<li><tt><a href="#variable_signature_method">signature_method</a></tt></li><br />
+<li><tt><a href="#variable_redirect_uri">redirect_uri</a></tt></li><br />
+<li><tt><a href="#variable_client_id">client_id</a></tt></li><br />
+<li><tt><a href="#variable_client_secret">client_secret</a></tt></li><br />
+<li><tt><a href="#variable_scope">scope</a></tt></li><br />
+<li><tt><a href="#variable_offline">offline</a></tt></li><br />
+<li><tt><a href="#variable_access_token">access_token</a></tt></li><br />
+<li><tt><a href="#variable_access_token_secret">access_token_secret</a></tt></li><br />
+<li><tt><a href="#variable_access_token_expiry">access_token_expiry</a></tt></li><br />
+<li><tt><a href="#variable_access_token_type">access_token_type</a></tt></li><br />
+<li><tt><a href="#variable_refresh_token">refresh_token</a></tt></li><br />
+<li><tt><a href="#variable_access_token_error">access_token_error</a></tt></li><br />
+<li><tt><a href="#variable_authorization_error">authorization_error</a></tt></li><br />
+<li><tt><a href="#variable_response_status">response_status</a></tt></li><br />
+<p><a href="#table_of_contents">Table of contents</a></p>
+<h3><a name="variable_error"></a><li><a name="5.2.31">error</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>''</tt></p>
+<h3>Purpose</h3>
+<p>Store the message that is returned when an error occurs.</p>
+<h3>Usage</h3>
+<p>Check this variable to understand what happened when a call to any of the class functions has failed.</p>
+<p> This class uses cumulative error handling. This means that if one class functions that may fail is called and this variable was already set to an error message due to a failure in a previous call to the same or other function, the function will also fail and does not do anything.</p>
+<p> This allows programs using this class to safely call several functions that may fail and only check the failure condition after the last function call.</p>
+<p> Just set this variable to an empty string to clear the error condition.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_debug"></a><li><a name="5.2.32">debug</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>bool</i></tt></p>
+<h3>Default value</h3>
+<p><tt>0</tt></p>
+<h3>Purpose</h3>
+<p>Control whether debug output is enabled</p>
+<h3>Usage</h3>
+<p>Set this variable to 1 if you need to check what is going on during calls to the class. When enabled, the debug output goes either to the variable <tt><a href="#variable_debug_output">debug_output</a></tt> and the PHP error log.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_debug_http"></a><li><a name="5.2.33">debug_http</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>bool</i></tt></p>
+<h3>Default value</h3>
+<p><tt>0</tt></p>
+<h3>Purpose</h3>
+<p>Control whether the dialog with the remote Web server should also be logged.</p>
+<h3>Usage</h3>
+<p>Set this variable to 1 if you want to inspect the data exchange with the OAuth server.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_exit"></a><li><a name="5.2.34">exit</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>bool</i></tt></p>
+<h3>Default value</h3>
+<p><tt>0</tt></p>
+<h3>Purpose</h3>
+<p>Determine if the current script should be exited.</p>
+<h3>Usage</h3>
+<p>Check this variable after calling the <tt><a href="#function_Process">Process</a></tt> function and exit your script immediately if the variable is set to 1.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_debug_output"></a><li><a name="5.2.35">debug_output</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>''</tt></p>
+<h3>Purpose</h3>
+<p>Capture the debug output generated by the class</p>
+<h3>Usage</h3>
+<p>Inspect this variable if you need to see what happened during the class function calls.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_debug_prefix"></a><li><a name="5.2.36">debug_prefix</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>'OAuth client: '</tt></p>
+<h3>Purpose</h3>
+<p>Mark the lines of the debug output to identify actions performed by this class.</p>
+<h3>Usage</h3>
+<p>Change this variable if you prefer the debug output lines to be prefixed with a different text.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_server"></a><li><a name="5.2.37">server</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>''</tt></p>
+<h3>Purpose</h3>
+<p>Identify the type of OAuth server to access.</p>
+<h3>Usage</h3>
+<p>The class provides built-in support to several types of OAuth servers. This means that the class can automatically initialize several configuration variables just by setting this server variable.</p>
+<p> Currently it supports the following servers: 'Bitbucket', 'Box', 'Dropbox', 'Eventful', 'Facebook', 'Fitbit', 'Flickr', 'Foursquare', 'github', 'Google', 'Instagram', 'LinkedIn', 'Microsoft', 'Scoop.it', 'StockTwits', 'Tumblr', 'Twitter', 'XING' and 'Yahoo'. Please contact the author if you would like to ask to add built-in support for other types of OAuth servers.</p>
+<p> If you want to access other types of OAuth servers that are not yet supported, set this variable to an empty string and configure other variables with values specific to those servers.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_request_token_url"></a><li><a name="5.2.38">request_token_url</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>''</tt></p>
+<h3>Purpose</h3>
+<p>URL of the OAuth server to request the initial token for OAuth 1.0 and 1.0a servers.</p>
+<h3>Usage</h3>
+<p>Set this variable to the OAuth request token URL when you are not accessing one of the built-in supported OAuth servers.</p>
+<p> For OAuth 1.0 and 1.0a servers, the request token URL can have certain marks that will act as template placeholders which will be replaced with given values before requesting the authorization token. Currently it supports the following placeholder marks:</p>
+<p> {SCOPE} - scope of the requested permissions to the granted by the OAuth server with the user permissions</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_dialog_url"></a><li><a name="5.2.39">dialog_url</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>''</tt></p>
+<h3>Purpose</h3>
+<p>URL of the OAuth server to redirect the browser so the user can grant access to your application.</p>
+<h3>Usage</h3>
+<p>Set this variable to the OAuth request token URL when you are not accessing one of the built-in supported OAuth servers.</p>
+<p> For certain servers, the dialog URL can have certain marks that will act as template placeholders which will be replaced with values defined before redirecting the users browser. Currently it supports the following placeholder marks:</p>
+<p> {REDIRECT_URI} - URL to redirect when returning from the OAuth server authorization page</p>
+<p> {CLIENT_ID} - client application identifier registered at the server</p>
+<p> {SCOPE} - scope of the requested permissions to the granted by the OAuth server with the user permissions</p>
+<p> {STATE} - identifier of the OAuth session state</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_offline_dialog_url"></a><li><a name="5.2.40">offline_dialog_url</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>''</tt></p>
+<h3>Purpose</h3>
+<p>URL of the OAuth server to redirect the browser so the user can grant access to your application when offline access is requested.</p>
+<h3>Usage</h3>
+<p>Set this variable to the OAuth request token URL when you are not accessing one of the built-in supported OAuth servers and the OAuth server supports offline access.</p>
+<p> It should have the same format as the <tt><a href="#variable_dialog_url">dialog_url</a></tt> variable.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_append_state_to_redirect_uri"></a><li><a name="5.2.41">append_state_to_redirect_uri</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>''</tt></p>
+<h3>Purpose</h3>
+<p>Pass the OAuth session state in a variable with a different name to work around implementation bugs of certain OAuth servers</p>
+<h3>Usage</h3>
+<p>Set this variable when you are not accessing one of the built-in supported OAuth servers if the OAuth server has a bug that makes it not pass back the OAuth state identifier in a request variable named state.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_access_token_url"></a><li><a name="5.2.42">access_token_url</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>''</tt></p>
+<h3>Purpose</h3>
+<p>OAuth server URL that will return the access token URL.</p>
+<h3>Usage</h3>
+<p>Set this variable to the OAuth access token URL when you are not accessing one of the built-in supported OAuth servers.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_oauth_version"></a><li><a name="5.2.43">oauth_version</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>'2.0'</tt></p>
+<h3>Purpose</h3>
+<p>Version of the protocol version supported by the OAuth server.</p>
+<h3>Usage</h3>
+<p>Set this variable to the OAuth server protocol version when you are not accessing one of the built-in supported OAuth servers.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_url_parameters"></a><li><a name="5.2.44">url_parameters</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>bool</i></tt></p>
+<h3>Default value</h3>
+<p><tt>0</tt></p>
+<h3>Purpose</h3>
+<p>Determine if the API call parameters should be moved to the call URL.</p>
+<h3>Usage</h3>
+<p>Set this variable to 1 if the API you need to call requires that the call parameters always be passed via the API URL.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_authorization_header"></a><li><a name="5.2.45">authorization_header</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>bool</i></tt></p>
+<h3>Default value</h3>
+<p><tt>1</tt></p>
+<h3>Purpose</h3>
+<p>Determine if the OAuth parameters should be passed via HTTP Authorization request header.</p>
+<h3>Usage</h3>
+<p>Set this variable to 1 if the OAuth server requires that the OAuth parameters be passed using the HTTP Authorization instead of the request URI parameters.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_token_request_method"></a><li><a name="5.2.46">token_request_method</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>'GET'</tt></p>
+<h3>Purpose</h3>
+<p>Define the HTTP method that should be used to request tokens from the server.</p>
+<h3>Usage</h3>
+<p>Set this variable to 'POST' if the OAuth server does not support requesting tokens using the HTTP GET method.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_signature_method"></a><li><a name="5.2.47">signature_method</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>'HMAC-SHA1'</tt></p>
+<h3>Purpose</h3>
+<p>Define the method to generate the signature for API request parameters values.</p>
+<h3>Usage</h3>
+<p>Currently it supports 'PLAINTEXT' and 'HMAC-SHA1'.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_redirect_uri"></a><li><a name="5.2.48">redirect_uri</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>''</tt></p>
+<h3>Purpose</h3>
+<p>URL of the current script page that is calling this class</p>
+<h3>Usage</h3>
+<p>Set this variable to the current script page URL before proceeding the the OAuth authorization process.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_client_id"></a><li><a name="5.2.49">client_id</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>''</tt></p>
+<h3>Purpose</h3>
+<p>Identifier of your application registered with the OAuth server</p>
+<h3>Usage</h3>
+<p>Set this variable to the application identifier that is provided by the OAuth server when you register the application.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_client_secret"></a><li><a name="5.2.50">client_secret</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>''</tt></p>
+<h3>Purpose</h3>
+<p>Secret value assigned to your application when it is registered with the OAuth server.</p>
+<h3>Usage</h3>
+<p>Set this variable to the application secret that is provided by the OAuth server when you register the application.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_scope"></a><li><a name="5.2.51">scope</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>''</tt></p>
+<h3>Purpose</h3>
+<p>Permissions that your application needs to call the OAuth server APIs</p>
+<h3>Usage</h3>
+<p>Check the documentation of the APIs that your application needs to call to set this variable with the identifiers of the permissions that the user needs to grant to your application.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_offline"></a><li><a name="5.2.52">offline</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>bool</i></tt></p>
+<h3>Default value</h3>
+<p><tt>0</tt></p>
+<h3>Purpose</h3>
+<p>Specify whether it will be necessary to call the API when the user is not present and the server supports renewing expired access tokens using refresh tokens.</p>
+<h3>Usage</h3>
+<p>Set this variable to 1 if the server supports renewing expired tokens automatically when the user is not present.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_access_token"></a><li><a name="5.2.53">access_token</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>''</tt></p>
+<h3>Purpose</h3>
+<p>Access token obtained from the OAuth server</p>
+<h3>Usage</h3>
+<p>Check this variable to get the obtained access token upon successful OAuth authorization.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_access_token_secret"></a><li><a name="5.2.54">access_token_secret</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>''</tt></p>
+<h3>Purpose</h3>
+<p>Access token secret obtained from the OAuth server</p>
+<h3>Usage</h3>
+<p>If the OAuth protocol version is 1.0 or 1.0a, check this variable to get the obtained access token secret upon successful OAuth authorization.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_access_token_expiry"></a><li><a name="5.2.55">access_token_expiry</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>''</tt></p>
+<h3>Purpose</h3>
+<p>Timestamp of the expiry of the access token obtained from the OAuth server.</p>
+<h3>Usage</h3>
+<p>Check this variable to get the obtained access token expiry time upon successful OAuth authorization. If this variable is empty, that means no expiry time was set.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_access_token_type"></a><li><a name="5.2.56">access_token_type</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>''</tt></p>
+<h3>Purpose</h3>
+<p>Type of access token obtained from the OAuth server.</p>
+<h3>Usage</h3>
+<p>Check this variable to get the obtained access token type upon successful OAuth authorization.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_refresh_token"></a><li><a name="5.2.57">refresh_token</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>''</tt></p>
+<h3>Purpose</h3>
+<p>Refresh token obtained from the OAuth server</p>
+<h3>Usage</h3>
+<p>Check this variable to get the obtained refresh token upon successful OAuth authorization.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_access_token_error"></a><li><a name="5.2.58">access_token_error</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>''</tt></p>
+<h3>Purpose</h3>
+<p>Error message returned when a call to the API fails.</p>
+<h3>Usage</h3>
+<p>Check this variable to determine if there was an error while calling the Web services API when using the <tt><a href="#function_CallAPI">CallAPI</a></tt> function.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_authorization_error"></a><li><a name="5.2.59">authorization_error</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>string</i></tt></p>
+<h3>Default value</h3>
+<p><tt>''</tt></p>
+<h3>Purpose</h3>
+<p>Error message returned when it was not possible to obtain an OAuth access token</p>
+<h3>Usage</h3>
+<p>Check this variable to determine if there was an error while trying to obtain the OAuth access token.</p>
+<p><a href="#variables">Variables</a></p>
+<h3><a name="variable_response_status"></a><li><a name="5.2.60">response_status</a></li></h3>
+<h3>Type</h3>
+<p><tt><i>int</i></tt></p>
+<h3>Default value</h3>
+<p><tt>0</tt></p>
+<h3>Purpose</h3>
+<p>HTTP response status returned by the server when calling an API</p>
+<h3>Usage</h3>
+<p>Check this variable after calling the <tt><a href="#function_CallAPI">CallAPI</a></tt> function if the API calls and you need to process the error depending the response status. 200 means no error. 0 means the server response was not retrieved.</p>
+<p><a href="#variables">Variables</a></p>
+<p><a href="#table_of_contents">Table of contents</a></p>
+</ul>
+</ul>
+<hr />
+<ul>
+<h2><li><a name="functions"></a><a name="6.1.1">Functions</a></li></h2>
+<ul>
+<li><tt><a href="#function_StoreAccessToken">StoreAccessToken</a></tt></li><br />
+<li><tt><a href="#function_GetAccessToken">GetAccessToken</a></tt></li><br />
+<li><tt><a href="#function_ResetAccessToken">ResetAccessToken</a></tt></li><br />
+<li><tt><a href="#function_CallAPI">CallAPI</a></tt></li><br />
+<li><tt><a href="#function_Initialize">Initialize</a></tt></li><br />
+<li><tt><a href="#function_Process">Process</a></tt></li><br />
+<li><tt><a href="#function_Finalize">Finalize</a></tt></li><br />
+<li><tt><a href="#function_Output">Output</a></tt></li><br />
+<p><a href="#table_of_contents">Table of contents</a></p>
+<h3><a name="function_StoreAccessToken"></a><li><a name="7.2.9">StoreAccessToken</a></li></h3>
+<h3>Synopsis</h3>
+<p><tt><i>bool</i> StoreAccessToken(</tt><ul>
+<tt>(input and output) <i>array</i> </tt><tt><a href="#argument_StoreAccessToken_access_token">access_token</a></tt></ul>
+<tt>)</tt></p>
+<h3>Purpose</h3>
+<p>Store the values of the access token when it is succefully retrieved from the OAuth server.</p>
+<h3>Usage</h3>
+<p>This function is meant to be only be called from inside the class. By default it stores access tokens in a session variable named 'OAUTH_ACCESS_TOKEN'.</p>
+<p> Actual implementations should create a sub-class and override this function to make the access token values be stored in other types of containers, like for instance databases.</p>
+<h3>Arguments</h3>
+<ul>
+<p><tt><b><a name="argument_StoreAccessToken_access_token">access_token</a></b></tt> - Associative array with properties of the access token. The array may have set the following properties:</p>
+<p> 'value': string value of the access token</p>
+<p> 'authorized': boolean value that determines if the access token was obtained successfully</p>
+<p> 'expiry': (optional) timestamp in ISO format relative to UTC time zone of the access token expiry time</p>
+<p> 'type': (optional) type of OAuth token that may determine how it should be used when sending API call requests.</p>
+<p> 'refresh': (optional) token that some servers may set to allowing refreshing access tokens when they expire.</p>
+</ul>
+<h3>Return value</h3>
+<p>This function should return 1 if the access token was stored successfully.</p>
+<p><a href="#functions">Functions</a></p>
+<h3><a name="function_GetAccessToken"></a><li><a name="9.2.10">GetAccessToken</a></li></h3>
+<h3>Synopsis</h3>
+<p><tt><i>bool</i> GetAccessToken(</tt><ul>
+<tt>(output) <i>string &amp;</i> </tt><tt><a href="#argument_GetAccessToken_access_token">access_token</a></tt></ul>
+<tt>)</tt></p>
+<h3>Purpose</h3>
+<p>Retrieve the OAuth access token if it was already previously stored by the <tt><a href="#function_StoreAccessToken">StoreAccessToken</a></tt> function.</p>
+<h3>Usage</h3>
+<p>This function is meant to be only be called from inside the class. By default it retrieves access tokens stored in a session variable named 'OAUTH_ACCESS_TOKEN'.</p>
+<p> Actual implementations should create a sub-class and override this function to retrieve the access token values from other types of containers, like for instance databases.</p>
+<h3>Arguments</h3>
+<ul>
+<p><tt><b><a name="argument_GetAccessToken_access_token">access_token</a></b></tt> - Return the properties of the access token in an associative array. If the access token was not yet stored, it returns an empty array. Otherwise, the properties it may return are the same that may be passed to the <tt><a href="#function_StoreAccessToken">StoreAccessToken</a></tt>.</p>
+</ul>
+<h3>Return value</h3>
+<p>This function should return 1 if the access token was retrieved successfully.</p>
+<p><a href="#functions">Functions</a></p>
+<h3><a name="function_ResetAccessToken"></a><li><a name="11.2.11">ResetAccessToken</a></li></h3>
+<h3>Synopsis</h3>
+<p><tt><i>bool</i> ResetAccessToken(</tt><tt>)</tt></p>
+<h3>Purpose</h3>
+<p>Reset the access token to a state back when the user has not yet authorized the access to the OAuth server API.</p>
+<h3>Usage</h3>
+<p>Call this function if for some reason the token to access the API was revoked and you need to ask the user to authorize the access again.</p>
+<p> By default the class stores and retrieves access tokens in a session variable named 'OAUTH_ACCESS_TOKEN'.</p>
+<p> This function must be called when the user is accessing your site pages, so it can reset the information stored in session variables that cache the state of a previously retrieved access token.</p>
+<p> Actual implementations should create a sub-class and override this function to reset the access token state when it is stored in other types of containers, like for instance databases.</p>
+<h3>Return value</h3>
+<p>This function should return 1 if the access token was resetted successfully.</p>
+<p><a href="#functions">Functions</a></p>
+<h3><a name="function_CallAPI"></a><li><a name="11.2.12">CallAPI</a></li></h3>
+<h3>Synopsis</h3>
+<p><tt><i>bool</i> CallAPI(</tt><ul>
+<tt><i>string</i> </tt><tt><a href="#argument_CallAPI_url">url</a></tt><tt>,</tt><br />
+<tt><i>string</i> </tt><tt><a href="#argument_CallAPI_method">method</a></tt><tt>,</tt><br />
+<tt>(input and output) <i>array</i> </tt><tt><a href="#argument_CallAPI_parameters">parameters</a></tt><tt>,</tt><br />
+<tt>(input and output) <i>array</i> </tt><tt><a href="#argument_CallAPI_options">options</a></tt><tt>,</tt><br />
+<tt>(output) <i>string &amp;</i> </tt><tt><a href="#argument_CallAPI_response">response</a></tt></ul>
+<tt>)</tt></p>
+<h3>Purpose</h3>
+<p>Send a HTTP request to the Web services API using a previously obtained authorization token via OAuth.</p>
+<h3>Usage</h3>
+<p>This function can be used to call an API after having previously obtained an access token through the OAuth protocol using the <tt><a href="#function_Process">Process</a></tt> function, or by directly setting the variables <tt><a href="#variable_access_token">access_token</a></tt>, as well as <tt><a href="#variable_access_token_secret">access_token_secret</a></tt> in case of using OAuth 1.0 or 1.0a services.</p>
+<h3>Arguments</h3>
+<ul>
+<p><tt><b><a name="argument_CallAPI_url">url</a></b></tt> - URL of the API where the HTTP request will be sent.</p>
+<p><tt><b><a name="argument_CallAPI_method">method</a></b></tt> - HTTP method that will be used to send the request. It can be 'GET', 'POST', 'DELETE', 'PUT', etc..</p>
+<p><tt><b><a name="argument_CallAPI_parameters">parameters</a></b></tt> - Associative array with the names and values of the API call request parameters.</p>
+<p><tt><b><a name="argument_CallAPI_options">options</a></b></tt> - Associative array with additional options to configure the request. Currently it supports the following options:</p>
+<p> '2Legged': boolean option that determines if the API request should be 2 legged. The default value is <tt>0</tt>.</p>
+<p> 'Accept': content type value of the Accept HTTP header to be sent in the API call HTTP request. Some APIs require that a certain value be sent to specify which version of the API is being called. The default value is '*/*'.</p>
+<p> 'ConvertObjects': boolean option that determines if objects should be converted into arrays when the response is returned in JSON format. The default value is 0.</p>
+<p> 'FailOnAccessError': boolean option that determines if this functions should fail when the server response status is not between 200 and 299. The default value is 0.</p>
+<p> 'Files': associative array with details of the parameters that must be passed as file uploads. The array indexes must have the same name of the parameters to be sent as files. The respective array entry values must also be associative arrays with the parameters for each file. Currently it supports the following parameters:</p>
+<p> - <tt>Type</tt> - defines how the parameter value should be treated. It can be <tt>'FileName'</tt> if the parameter value is is the name of a local file to be uploaded. It may also be <tt>'Data'</tt> if the parameter value is the actual data of the file to be uploaded.</p>
+<p> - Default: <tt>'FileName'</tt></p>
+<p> - <tt>ContentType</tt> - MIME value of the content type of the file. It can be <tt>'automatic/name'</tt> if the content type should be determine from the file name extension.</p>
+<p> - Default: <tt>'automatic/name'</tt></p>
+<p> 'PostValuesInURI': boolean option to determine that a POST request should pass the request values in the URI. The default value is 0.</p>
+<p> 'FollowRedirection': limit number of times that HTTP response redirects will be followed. If it is set to 0, redirection responses fail in error. The default value is 0.</p>
+<p> 'RequestBody': request body data of a custom type. The 'RequestContentType' option must be specified, so the 'RequestBody' option is considered.</p>
+<p> 'RequestContentType': content type that should be used to send the request values. It can be either 'application/x-www-form-urlencoded' for sending values like from Web forms, or 'application/json' for sending the values encoded in JSON format. Other types are accepted if the 'RequestBody' option is specified. The default value is 'application/x-www-form-urlencoded'.</p>
+<p> 'RequestBody': request body data of a custom type. The 'RequestContentType' option must be specified, so the 'RequestBody' option is considered.</p>
+<p> 'Resource': string with a label that will be used in the error messages and debug log entries to identify what operation the request is performing. The default value is 'API call'.</p>
+<p> 'ResponseContentType': content type that should be considered when decoding the API request response. This overrides the <tt>Content-Type</tt> header returned by the server. If the content type is 'application/x-www-form-urlencoded' the function will parse the data returning an array of key-value pairs. If the content type is 'application/json' the response will be decode as a JSON-encoded data type. Other content type values will make the function return the original response value as it was returned from the server. The default value for this option is to use what the server returned in the <tt>Content-Type</tt> header.</p>
+<p><tt><b><a name="argument_CallAPI_response">response</a></b></tt> - Return the value of the API response. If the value is JSON encoded, this function will decode it and return the value converted to respective types. If the value is form encoded, this function will decode the response and return it as an array. Otherwise, the class will return the value as a string.</p>
+</ul>
+<h3>Return value</h3>
+<p>This function returns 1 if the call was done successfully.</p>
+<p><a href="#functions">Functions</a></p>
+<h3><a name="function_Initialize"></a><li><a name="13.2.13">Initialize</a></li></h3>
+<h3>Synopsis</h3>
+<p><tt><i>bool</i> Initialize(</tt><tt>)</tt></p>
+<h3>Purpose</h3>
+<p>Initialize the class variables and internal state. It must be called before calling other class functions.</p>
+<h3>Usage</h3>
+<p>Set the <tt><a href="#variable_server">server</a></tt> variable before calling this function to let it initialize the class variables to work with the specified server type. Alternatively, you can set other class variables manually to make it work with servers that are not yet built-in supported.</p>
+<h3>Return value</h3>
+<p>This function returns 1 if it was able to successfully initialize the class for the specified server type.</p>
+<p><a href="#functions">Functions</a></p>
+<h3><a name="function_Process"></a><li><a name="13.2.14">Process</a></li></h3>
+<h3>Synopsis</h3>
+<p><tt><i>bool</i> Process(</tt><tt>)</tt></p>
+<h3>Purpose</h3>
+<p>Process the OAuth protocol interaction with the OAuth server.</p>
+<h3>Usage</h3>
+<p>Call this function when you need to retrieve the OAuth access token. Check the <tt><a href="#variable_access_token">access_token</a></tt> to determine if the access token was obtained successfully.</p>
+<h3>Return value</h3>
+<p>This function returns 1 if the OAuth protocol was processed without errors.</p>
+<p><a href="#functions">Functions</a></p>
+<h3><a name="function_Finalize"></a><li><a name="13.2.15">Finalize</a></li></h3>
+<h3>Synopsis</h3>
+<p><tt><i>bool</i> Finalize(</tt><ul>
+<tt><i>bool</i> </tt><tt><a href="#argument_Finalize_success">success</a></tt></ul>
+<tt>)</tt></p>
+<h3>Purpose</h3>
+<p>Cleanup any resources that may have been used during the OAuth protocol processing or execution of API calls.</p>
+<h3>Usage</h3>
+<p>Always call this function as the last step after calling the functions <tt><a href="#function_Process">Process</a></tt> or <tt><a href="#function_CallAPI">CallAPI</a></tt>.</p>
+<h3>Arguments</h3>
+<ul>
+<p><tt><b><a name="argument_Finalize_success">success</a></b></tt> - Pass the last success state returned by the class or any external code processing the class function results.</p>
+</ul>
+<h3>Return value</h3>
+<p>This function returns 1 if the function cleaned up any resources successfully.</p>
+<p><a href="#functions">Functions</a></p>
+<h3><a name="function_Output"></a><li><a name="15.2.16">Output</a></li></h3>
+<h3>Synopsis</h3>
+<p><tt><i></i> Output(</tt><tt>)</tt></p>
+<h3>Purpose</h3>
+<p>Display the results of the OAuth protocol processing.</p>
+<h3>Usage</h3>
+<p>Only call this function if you are debugging the OAuth authorization process and you need to view what was its results.</p>
+<p><a href="#functions">Functions</a></p>
+<p><a href="#table_of_contents">Table of contents</a></p>
+</ul>
+</ul>
+
+<hr />
+<address>Manuel Lemos (<a href="mailto:mlemos-at-acm.org">mlemos-at-acm.org</a>)</address>
+</body>
+</html>
diff --git a/library/readmore.js/README.md b/library/readmore.js/README.md
new file mode 100644
index 000000000..0116fbe8b
--- /dev/null
+++ b/library/readmore.js/README.md
@@ -0,0 +1,171 @@
+# Readmore.js
+
+A smooth, responsive jQuery plugin for collapsing and expanding long blocks of text with "Read more" and "Close" links.
+
+The markup Readmore.js requires is so simple, you can probably use it with your existing HTML—there's no need for complicated sets of `div`'s or hardcoded classes, just call `.readmore()` on the element containing your block of text and Readmore.js takes care of the rest. Readmore.js plays well in a responsive environment, too.
+
+Readmore.js is tested with—and supported on—all versions of jQuery greater than 1.9.1. All the "good" browsers are supported, as well as IE10+; IE8 & 9 _should_ work, but are not supported and the experience will not be ideal.
+
+
+## Install
+
+Install Readmore.js with Bower:
+
+```
+$ bower install readmore
+```
+
+Then include it in your HTML:
+
+```html
+<script src="/bower_components/readmore/readmore.min.js"></script>
+```
+
+
+## Use
+
+```javascript
+$('article').readmore();
+```
+
+It's that simple. You can change the speed of the animation, the height of the collapsed block, and the open and close elements.
+
+```javascript
+$('article').readmore({
+ speed: 75,
+ lessLink: '<a href="#">Read less</a>'
+});
+```
+
+### The options:
+
+* `speed: 100` in milliseconds
+* `collapsedHeight: 200` in pixels
+* `heightMargin: 16` in pixels, avoids collapsing blocks that are only slightly larger than `collapsedHeight`
+* `moreLink: '<a href="#">Read more</a>'`
+* `lessLink: '<a href="#">Close</a>'`
+* `embedCSS: true` insert required CSS dynamically, set this to `false` if you include the necessary CSS in a stylesheet
+* `blockCSS: 'display: block; width: 100%;'` sets the styling of the blocks, ignored if `embedCSS` is `false`
+* `startOpen: false` do not immediately truncate, start in the fully opened position
+* `beforeToggle: function() {}` called after a more or less link is clicked, but *before* the block is collapsed or expanded
+* `afterToggle: function() {}` called *after* the block is collapsed or expanded
+
+If the element has a `max-height` CSS property, Readmore.js will use that value rather than the value of the `collapsedHeight` option.
+
+### The callbacks:
+
+The callback functions, `beforeToggle` and `afterToggle`, both receive the same arguments: `trigger`, `element`, and `expanded`.
+
+* `trigger`: the "Read more" or "Close" element that was clicked
+* `element`: the block that is being collapsed or expanded
+* `expanded`: Boolean; `true` means the block is expanded
+
+#### Callback example:
+
+Here's an example of how you could use the `afterToggle` callback to scroll back to the top of a block when the "Close" link is clicked.
+
+```javascript
+$('article').readmore({
+ afterToggle: function(trigger, element, expanded) {
+ if(! expanded) { // The "Close" link was clicked
+ $('html, body').animate( { scrollTop: element.offset().top }, {duration: 100 } );
+ }
+ }
+});
+```
+
+### Removing Readmore:
+
+You can remove the Readmore.js functionality like so:
+
+```javascript
+$('article').readmore('destroy');
+```
+
+Or, you can be more surgical by specifying a particular element:
+
+```javascript
+$('article:first').readmore('destroy');
+```
+
+### Toggling blocks programmatically:
+
+You can toggle a block from code:
+
+```javascript
+$('article:nth-of-type(3)').readmore('toggle');
+```
+
+
+## CSS:
+
+Readmore.js is designed to use CSS for as much functionality as possible: collapsed height can be set in CSS with the `max-height` property; "collapsing" is achieved by setting `overflow: hidden` on the containing block and changing the `height` property; and, finally, the expanding/collapsing animation is done with CSS3 transitions.
+
+By default, Readmore.js inserts the following CSS, in addition to some transition-related rules:
+
+```css
+selector + [data-readmore-toggle], selector[data-readmore] {
+ display: block;
+ width: 100%;
+}
+```
+
+_`selector` would be the element you invoked `readmore()` on, e.g.: `$('selector').readmore()`_
+
+You can override the base rules when you set up Readmore.js like so:
+
+```javascript
+$('article').readmore({blockCSS: 'display: inline-block; width: 50%;'});
+```
+
+If you want to include the necessary styling in your site's stylesheet, you can disable the dynamic embedding by setting `embedCSS` to `false`:
+
+```javascript
+$('article').readmore({embedCSS: false});
+```
+
+### Media queries and other CSS tricks:
+
+If you wanted to set a `maxHeight` based on lines, you could do so in CSS with something like:
+
+```css
+body {
+ font: 16px/1.5 sans-serif;
+}
+
+/* Show only 4 lines in smaller screens */
+article {
+ max-height: 6em; /* (4 * 1.5 = 6) */
+}
+```
+
+Then, with a media query you could change the number of lines shown, like so:
+
+```css
+/* Show 8 lines on larger screens */
+@media screen and (min-width: 640px) {
+ article {
+ max-height: 12em;
+ }
+}
+```
+
+
+## Contributing
+
+Pull requests are always welcome, but not all suggested features will get merged. Feel free to contact me if you have an idea for a feature.
+
+Pull requests should include the minified script and this readme and the demo HTML should be updated with descriptions of your new feature.
+
+You'll need NPM:
+
+```
+$ npm install
+```
+
+Which will install the necessary development dependencies. Then, to build the minified script:
+
+```
+$ gulp compress
+```
+
diff --git a/library/readmore.js/readmore.js b/library/readmore.js/readmore.js
new file mode 100644
index 000000000..81cfb3cea
--- /dev/null
+++ b/library/readmore.js/readmore.js
@@ -0,0 +1,319 @@
+/*!
+ * @preserve
+ *
+ * Readmore.js jQuery plugin
+ * Author: @jed_foster
+ * Project home: http://jedfoster.github.io/Readmore.js
+ * Licensed under the MIT license
+ *
+ * Debounce function from http://davidwalsh.name/javascript-debounce-function
+ */
+
+/* global jQuery */
+
+(function($) {
+ 'use strict';
+
+ var readmore = 'readmore',
+ defaults = {
+ speed: 100,
+ collapsedHeight: 200,
+ heightMargin: 16,
+ moreLink: '<a href="#">Read More</a>',
+ lessLink: '<a href="#">Close</a>',
+ embedCSS: true,
+ blockCSS: 'display: block; width: 100%;',
+ startOpen: false,
+
+ // callbacks
+ beforeToggle: function(){},
+ afterToggle: function(){}
+ },
+ cssEmbedded = {},
+ uniqueIdCounter = 0;
+
+ function debounce(func, wait, immediate) {
+ var timeout;
+
+ return function() {
+ var context = this, args = arguments;
+ var later = function() {
+ timeout = null;
+ if (! immediate) {
+ func.apply(context, args);
+ }
+ };
+ var callNow = immediate && !timeout;
+
+ clearTimeout(timeout);
+ timeout = setTimeout(later, wait);
+
+ if (callNow) {
+ func.apply(context, args);
+ }
+ };
+ }
+
+ function uniqueId(prefix) {
+ var id = ++uniqueIdCounter;
+
+ return String(prefix == null ? 'rmjs-' : prefix) + id;
+ }
+
+ function setBoxHeights(element) {
+ var el = element.clone().css({
+ height: 'auto',
+ width: element.width(),
+ maxHeight: 'none',
+ overflow: 'hidden'
+ }).insertAfter(element),
+ expandedHeight = el.outerHeight(),
+ cssMaxHeight = parseInt(el.css({maxHeight: ''}).css('max-height').replace(/[^-\d\.]/g, ''), 10),
+ defaultHeight = element.data('defaultHeight');
+
+ el.remove();
+
+ var collapsedHeight = element.data('collapsedHeight') || defaultHeight;
+
+ if (!cssMaxHeight) {
+ collapsedHeight = defaultHeight;
+ }
+ else if (cssMaxHeight > collapsedHeight) {
+ collapsedHeight = cssMaxHeight;
+ }
+
+ // Store our measurements.
+ element.data({
+ expandedHeight: expandedHeight,
+ maxHeight: cssMaxHeight,
+ collapsedHeight: collapsedHeight
+ })
+ // and disable any `max-height` property set in CSS
+ .css({
+ maxHeight: 'none'
+ });
+ }
+
+ var resizeBoxes = debounce(function() {
+ $('[data-readmore]').each(function() {
+ var current = $(this),
+ isExpanded = (current.attr('aria-expanded') === 'true');
+
+ setBoxHeights(current);
+
+ current.css({
+ height: current.data( (isExpanded ? 'expandedHeight' : 'collapsedHeight') )
+ });
+ });
+ }, 100);
+
+ function embedCSS(options) {
+ if (! cssEmbedded[options.selector]) {
+ var styles = ' ';
+
+ if (options.embedCSS && options.blockCSS !== '') {
+ styles += options.selector + ' + [data-readmore-toggle], ' +
+ options.selector + '[data-readmore]{' +
+ options.blockCSS +
+ '}';
+ }
+
+ // Include the transition CSS even if embedCSS is false
+ styles += options.selector + '[data-readmore]{' +
+ 'transition: height ' + options.speed + 'ms;' +
+ 'overflow: hidden;' +
+ '}';
+
+ (function(d, u) {
+ var css = d.createElement('style');
+ css.type = 'text/css';
+
+ if (css.styleSheet) {
+ css.styleSheet.cssText = u;
+ }
+ else {
+ css.appendChild(d.createTextNode(u));
+ }
+
+ d.getElementsByTagName('head')[0].appendChild(css);
+ }(document, styles));
+
+ cssEmbedded[options.selector] = true;
+ }
+ }
+
+ function Readmore(element, options) {
+ var $this = this;
+
+ this.element = element;
+
+ this.options = $.extend({}, defaults, options);
+
+ $(this.element).data({
+ defaultHeight: this.options.collapsedHeight,
+ heightMargin: this.options.heightMargin
+ });
+
+ embedCSS(this.options);
+
+ this._defaults = defaults;
+ this._name = readmore;
+
+ window.addEventListener('load', function() {
+ $this.init();
+ });
+ }
+
+
+ Readmore.prototype = {
+ init: function() {
+ var $this = this;
+
+ $(this.element).each(function() {
+ var current = $(this);
+
+ setBoxHeights(current);
+
+ var collapsedHeight = current.data('collapsedHeight'),
+ heightMargin = current.data('heightMargin');
+
+ if (current.outerHeight(true) <= collapsedHeight + heightMargin) {
+ // The block is shorter than the limit, so there's no need to truncate it.
+ return true;
+ }
+ else {
+ var id = current.attr('id') || uniqueId(),
+ useLink = $this.options.startOpen ? $this.options.lessLink : $this.options.moreLink;
+
+ current.attr({
+ 'data-readmore': '',
+ 'aria-expanded': false,
+ 'id': id
+ });
+
+ current.after($(useLink)
+ .on('click', function(event) { $this.toggle(this, current[0], event); })
+ .attr({
+ 'data-readmore-toggle': '',
+ 'aria-controls': id
+ }));
+
+ if (! $this.options.startOpen) {
+ current.css({
+ height: collapsedHeight
+ });
+ }
+ }
+ });
+
+ window.addEventListener('resize', function() {
+ resizeBoxes();
+ });
+ },
+
+ toggle: function(trigger, element, event) {
+ if (event) {
+ event.preventDefault();
+ }
+
+ if (! trigger) {
+ trigger = $('[aria-controls="' + this.element.id + '"]')[0];
+ }
+
+ if (! element) {
+ element = this.element;
+ }
+
+ var $this = this,
+ $element = $(element),
+ newHeight = '',
+ newLink = '',
+ expanded = false,
+ collapsedHeight = $element.data('collapsedHeight');
+
+ if ($element.height() <= collapsedHeight) {
+ newHeight = $element.data('expandedHeight') + 'px';
+ newLink = 'lessLink';
+ expanded = true;
+ }
+ else {
+ newHeight = collapsedHeight;
+ newLink = 'moreLink';
+ }
+
+ // Fire beforeToggle callback
+ // Since we determined the new "expanded" state above we're now out of sync
+ // with our true current state, so we need to flip the value of `expanded`
+ $this.options.beforeToggle(trigger, element, ! expanded);
+
+ $element.css({'height': newHeight});
+
+ // Fire afterToggle callback
+ $element.on('transitionend', function() {
+ $this.options.afterToggle(trigger, element, expanded);
+
+ $(this).attr({
+ 'aria-expanded': expanded
+ }).off('transitionend');
+ });
+
+ $(trigger).replaceWith($($this.options[newLink])
+ .on('click', function(event) { $this.toggle(this, element, event); })
+ .attr({
+ 'data-readmore-toggle': '',
+ 'aria-controls': $element.attr('id')
+ }));
+ },
+
+ destroy: function() {
+ $(this.element).each(function() {
+ var current = $(this);
+
+ current.attr({
+ 'data-readmore': null,
+ 'aria-expanded': null
+ })
+ .css({
+ maxHeight: '',
+ height: ''
+ })
+ .next('[data-readmore-toggle]')
+ .remove();
+
+ current.removeData();
+ });
+ }
+ };
+
+
+ $.fn.readmore = function(options) {
+ var args = arguments,
+ selector = this.selector;
+
+ options = options || {};
+
+ if (typeof options === 'object') {
+ return this.each(function() {
+ if ($.data(this, 'plugin_' + readmore)) {
+ var instance = $.data(this, 'plugin_' + readmore);
+ instance.destroy.apply(instance);
+ }
+
+ options.selector = selector;
+
+ $.data(this, 'plugin_' + readmore, new Readmore(this, options));
+ });
+ }
+ else if (typeof options === 'string' && options[0] !== '_' && options !== 'init') {
+ return this.each(function () {
+ var instance = $.data(this, 'plugin_' + readmore);
+ if (instance instanceof Readmore && typeof instance[options] === 'function') {
+ instance[options].apply(instance, Array.prototype.slice.call(args, 1));
+ }
+ });
+ }
+ };
+
+})(jQuery);
+
+
diff --git a/library/stylish_select/index.html b/library/stylish_select/index.html
new file mode 100644
index 000000000..b711c09f6
--- /dev/null
+++ b/library/stylish_select/index.html
@@ -0,0 +1,314 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>jQuery Stylish Select 0.4.9 plugin examples</title>
+ <meta http-equiv="content-type" content="text/html;charset=utf-8" />
+ <link rel="stylesheet" type="text/css" href="stylish-select.css" />
+
+ <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
+ <script src="jquery.stylish-select.js" type="text/javascript"></script>
+
+ <script type="text/javascript">
+ $(function(){
+
+ $('#my-dropdown, #my-dropdown2, #my-dropdown3, #my-dropdown4, #my-dropdown5, #my-dropdown6, #my-dropdown7, #my-dropdown8, #my-dropdown9').sSelect();
+
+ //set max height
+ $('#my-dropdownCountries').sSelect({ddMaxHeight: '300px'});
+
+ //set value on click
+ $('#setVal').click(function(){
+ $('#my-dropdown5').getSetSSValue('4');
+ });
+
+ //get value on click
+ $('#getVal').click(function(){
+ alert('The value is: '+$('#my-dropdown5').getSetSSValue());
+ });
+
+ //alert change event
+ $('#my-dropdownChange').sSelect().change(function(){alert('changed')});
+
+ //add options to select and update
+ $('#addOptions').click(function(){
+ $('#my-dropdown6').append('<option value="newOpt">New Option</option>').resetSS();
+ return false;
+ });
+
+ });
+ </script>
+
+ <style type="text/css">
+ body {font-family:Arial, Helvetica, sans-serif; font-size:12px;}
+ .selCont {clear:both; margin-bottom:20px; padding-bottom:40px; float:left; border-bottom:dotted 1px #000; width:600px;}
+ </style>
+
+ </head>
+ <body>
+ <form action="" method="post">
+ <h1>Stylish Select 0.4.9</h1>
+ <h2>A cross-browser, accessible alternative to the standard form element which can be fully customised with CSS</h2>
+ <p>Stylish Select attempts to replicate the functionality of the browser default select box as closely as possible with support for keyboard navigation, and intelligent positioning.</p>
+ <p>Stylish Select aims to have a minimal code footprint and weighs in at just over 3KB when minified.</p>
+ <a href="http://github.com/scottdarby/Stylish-Select">Get latest source code from GitHub</a>
+ <h2>Usage</h2>
+ <p>First, include the stylesheet, jQuery and the stylish select .js file in your html head tag.</p>
+ <p>The plugin can be used to replace any select with the following:</p>
+ <pre class="brush: javascript">
+$(document).ready(function(){
+$('#my-dropdown').sSelect();
+});
+ </pre>
+ <div class="selCont">
+ <h2>Simplest example, option selected by default</h2>
+ <p>You can use the alphabetical and arrow keys to navigate the list as you would a browser default select.</p>
+ <select id="my-dropdown" name="my-dropdown">
+ <option value="1">A cappella</option>
+ <option value="test">Acid Jazz</option>
+ <option value="3">Big Band</option>
+ <option value="4">Big Beat</option>
+ <option value="5">Cakewalk</option>
+ <option value="6">Calenda</option>
+ <option value="7">Dark ambient</option>
+ <option value="8">Dark cabaret</option>
+ <option value="9">Chalk &amp; Cheese</option>
+ </select>
+ </div>
+ <div class="selCont">
+ <h2>Change event</h2>
+ <p>Stylish Select alters the original select on the page, so you can access it's change event:</p>
+ <pre class="brush: javascript">
+//change event
+$('#my-dropdownChange').sSelect().change(function(){alert('changed')});
+ </pre>
+ <select id="my-dropdownChange" name="my-dropdown">
+ <option value="1">A cappella</option>
+ <option value="test">Acid Jazz</option>
+ <option value="3" selected="selected">Big Band</option>
+ <option value="4">Big Beat</option>
+ <option value="5">Cakewalk</option>
+ <option value="6">Calenda</option>
+ <option value="7">Dark ambient</option>
+ <option value="8">Dark cabaret</option>
+ </select>
+ </div>
+ <div class="selCont">
+ <h2>Grouped options</h2>
+ <p>Stylish Select supports optgroups and also optgroups and options together.</p>
+ <select id="my-dropdown2" name="my-dropdown">
+ <option>Please select</option>
+ <optgroup label="Tool">
+ <option value="1">Opiate</option>
+ <option value="2">Undertow</option>
+ <option value="3">Aenima</option>
+ <option value="4">Lateralus</option>
+ </optgroup>
+ <optgroup label="A Tribe Called Quest">
+ <option value="5">People's Instinctive Travels and the Paths of Rhythm</option>
+ <option value="6">The Low End Theory</option>
+ <option selected="selected" value="7">Midnight Marauders</option>
+ <option value="8">Beats, Rhymes and Life</option>
+ <option value="9">The Love Movement</option>
+ </optgroup>
+ </select>
+ </div>
+ <div id="get-set" class="selCont">
+ <h2>Getting/setting the value</h2>
+ <pre class="brush: javascript">
+//set value
+$('#setVal').click(function(){
+$('#my-dropdown5').getSetSSValue(4);
+});
+
+//get value
+$('#getVal').click(function(){
+alert('The value is: '+$('#my-dropdown5').getSetSSValue());
+});
+ </pre>
+ <p><a id="setVal" href="javascript:void(0)">Set value to 4</a></p>
+ <p><a id="getVal" href="javascript:void(0)">Get value</a></p>
+ <select id="my-dropdown5" name="my-dropdown">
+ <option value="1">Lorem</option>
+ <option value="2">Ipsum</option>
+ <option value="3">Dolor</option>
+ <option value="4">Sit</option>
+ <option value="5">Amet</option>
+ <option value="6">Consectetuer</option>
+ <option value="7">Adipiscing</option>
+ </select>
+ </div>
+ <div id="update" class="selCont">
+ <h2>Add new options to Stylish Select</h2>
+ <pre class="brush: javascript">
+//add options to select and update
+$('#addOptions').click(function(){
+$('#my-dropdown6').append('&lt;option value="newOpt">New Option&lt;/option&gt;').resetSS();
+});
+ </pre>
+ <p>If you add or remove options from the initial select element on the page, be sure to call the .resetSS() method on the select to update the Stylish Select replacement.</p>
+
+ <p><a id="addOptions" href="javascript:void(0)">Add new options to select and update</a></p>
+ <select id="my-dropdown6" name="my-dropdown">
+ <option value="1">Lorem</option>
+ <option value="2">Ipsum</option>
+ <option value="3">Dolor</option>
+ <option value="4">Sit</option>
+ <option value="5">Amet</option>
+ <option value="6">Consectetuer</option>
+ <option value="7">Adipiscing</option>
+ <option value="7">Adipiscing</option>
+ <option value="7">Adipiscing</option>
+ <option value="7">Adipiscing</option>
+ </select>
+ </div>
+ <div class="selCont">
+ <h2>Max-height for large lists</h2>
+ <pre class="brush: javascript">
+$('#my-dropdown').sSelect({ddMaxHeight: '300px'});
+ </pre>
+ <select id="my-dropdownCountries" name="my-dropdown">
+ <option value="1">Afghanistan</option>
+ <option value="1">Akrotiri</option>
+ <option value="1">Albania</option>
+ <option value="1">Algeria</option>
+ <option value="1">American Samoa</option>
+ <option value="1">Andorra</option>
+ <option value="1">Angola</option>
+ <option value="1">Anguilla</option>
+ <option value="1">Antarctica</option>
+ <option value="1">Antigua and Barbuda</option>
+ <option value="1">Argentina</option>
+ <option value="1">Armenia</option>
+ <option value="1">Aruba</option>
+ <option value="1">Ashmore and Cartier Islands</option>
+ <option value="1">Australia</option>
+ <option value="1">Austria</option>
+ <option value="1">Azerbaijan</option>
+ <option value="1">Bahamas, The</option>
+ <option value="1">Bahrain</option>
+ <option value="1">Bangladesh</option>
+ <option value="1">Barbados</option>
+ <option value="1">Bassas da India</option>
+ <option value="1">Belarus</option>
+ <option value="1">Belgium</option>
+ <option value="1">Belize</option>
+ <option value="1">Benin</option>
+ <option value="1">Bermuda</option>
+ <option value="1">Bhutan</option>
+ <option value="1">Bolivia</option>
+ <option value="1">Bosnia and Herzegovina</option>
+ <option value="1">Botswana</option>
+ <option value="1">Bouvet Island</option>
+ <option value="1">Brazil</option>
+ <option value="1">British Indian Ocean Territory</option>
+ <option value="1">British Virgin Islands</option>
+ <option value="1">Brunei</option>
+ <option value="1">Bulgaria</option>
+ <option value="1">Burkina Faso</option>
+ <option value="1">Burma</option>
+ <option value="1">Burundi</option>
+ <option value="1">Cambodia</option>
+ <option value="1">Cameroon</option>
+ <option value="1">Canada</option>
+ <option value="1">Cape Verde</option>
+ <option value="1">Cayman Islands</option>
+ <option value="1">Central African Republic</option>
+ <option value="1">Chad</option>
+ <option value="1">Chile</option>
+ <option value="1">China</option>
+ <option value="1">Christmas Island</option>
+ <option value="1">Clipperton Island</option>
+ <option value="1">Cocos (Keeling) Islands</option>
+ <option value="1">Colombia</option>
+ <option value="1">Comoros</option>
+ <option value="1">Congo, Democratic Republic of the</option>
+ <option value="1">Congo, Republic of the</option>
+ <option value="1">Cook Islands</option>
+ <option value="1">Coral Sea Islands</option>
+ <option value="1">Costa Rica</option>
+ <option value="1">Cote d'Ivoire</option>
+ <option value="1">Croatia</option>
+ <option value="1">Cuba</option>
+ <option value="1">Cyprus</option>
+ <option value="1">Czech Republic</option>
+ <option value="1">Denmark</option>
+ <option value="1">Dhekelia</option>
+ <option value="1">Djibouti</option>
+ <option value="1">Dominica</option>
+ <option value="1">Dominican Republic</option>
+ <option value="1">Ecuador</option>
+ <option value="1">Egypt</option>
+ <option value="1">El Salvador</option>
+ <option value="1">Equatorial Guinea</option>
+ <option value="1">Eritrea</option>
+ <option value="1">Estonia</option>
+ <option value="1">Ethiopia</option>
+ <option value="1">Europa Island</option>
+ <option value="1">Falkland Islands (Islas Malvinas)</option>
+ <option value="1">Faroe Islands</option>
+ <option value="1">Fiji</option>
+ <option value="1">Finland</option>
+ <option value="1">France</option>
+ <option value="1">French Guiana</option>
+ </select>
+ </div>
+ <div class="selCont">
+ <h2>Intelligent positioning</h2>
+ <p>Stylish Select will always remain visible on the page.</p>
+ <select id="my-dropdown4" name="my-dropdown">
+ <optgroup label="Tool">
+ <option value="1">Opiate</option>
+ <option value="2">Undertow</option>
+ <option value="3">Aenima</option>
+ <option value="4">Lateralus</option>
+ </optgroup>
+ <optgroup label="A Tribe Called Quest">
+ <option value="5">People's Instinctive Travels and the Paths of Rhythm</option>
+ <option value="6">The Low End Theory</option>
+ <option value="7" selected="selected">Midnight Marauders</option>
+ <option value="8">Beats, Rhymes and Life</option>
+ <option value="9">The Love Movement</option>
+ </optgroup>
+ </select>
+ </div>
+ <div class="selCont">
+ <h2>Disabled Select</h2>
+ <select disabled="disabled" id="my-dropdown7" name="my-dropdown">
+ <option value="1">Opiate</option>
+ <option value="2">Undertow</option>
+ <option value="3">Aenima</option>
+ <option value="4">Lateralus</option>
+ <option value="9">The Love Movement</option>
+ </select>
+ </div>
+ <div class="selCont">
+ <h2>Disabled Options</h2>
+ <select id="my-dropdown8" name="my-dropdown">
+ <option value="1">Opiate</option>
+ <option disabled="disabled" value="2">Undertow</option>
+ <option value="3">Aenima</option>
+ <option selected="selected" value="4">Lateralus</option>
+ <option value="9">The Love Movement</option>
+ </select>
+ </div>
+ <div class="selCont">
+ <h2>Disabled Grouped options</h2>
+ <select id="my-dropdown9" name="my-dropdown">
+ <optgroup label="Tool" disabled="disabled">
+ <option value="1">Opiate</option>
+ <option value="2">Undertow</option>
+ <option value="3">Aenima</option>
+ <option value="4">Lateralus</option>
+ </optgroup>
+ <optgroup label="A Tribe Called Quest">
+ <option value="5">People's Instinctive Travels and the Paths of Rhythm</option>
+ <option value="6">The Low End Theory</option>
+ <option value="7" selected="selected">Midnight Marauders</option>
+ <option value="8">Beats, Rhymes and Life</option>
+ <option value="9">The Love Movement</option>
+ </optgroup>
+ </select>
+ </div>
+ </form>
+ </body>
+</html> \ No newline at end of file
diff --git a/library/stylish_select/jquery.stylish-select.js b/library/stylish_select/jquery.stylish-select.js
new file mode 100644
index 000000000..61a38ca8d
--- /dev/null
+++ b/library/stylish_select/jquery.stylish-select.js
@@ -0,0 +1,492 @@
+/**
+* Stylish Select 0.4.9 - jQuery plugin to replace a select drop down box with a stylable unordered list
+* http://github.com/scottdarby/Stylish-Select
+*
+* Requires: jQuery 1.3 or newer
+*
+* Contributions from Justin Beasley: http://www.harvest.org/
+* Anatoly Ressin: http://www.artazor.lv/ Wilfred Hughes: https://github.com/Wilfred
+* Grigory Zarubin: https://github.com/Craigy-
+*
+* Dual licensed under the MIT and GPL licenses.
+*/
+(function($){
+ //add class to html tag
+ $('html').addClass('stylish-select');
+
+ //Cross-browser implementation of indexOf from MDN: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf
+ if (!Array.prototype.indexOf){
+ Array.prototype.indexOf = function(searchElement /*, fromIndex */){
+ if (this === void 0 || this === null)
+ throw new TypeError();
+
+ var t = Object(this);
+ var len = t.length >>> 0;
+ if (len === 0)
+ return -1;
+
+ var n = 0;
+ if (arguments.length > 0){
+ n = Number(arguments[1]);
+ if (n !== n) // shortcut for verifying if it's NaN
+ n = 0;
+ else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0))
+ n = (n > 0 || -1) * Math.floor(Math.abs(n));
+ }
+
+ if (n >= len)
+ return -1;
+
+ var k = n >= 0
+ ? n
+ : Math.max(len - Math.abs(n), 0);
+
+ for (; k < len; k++){
+ if (k in t && t[k] === searchElement)
+ return k;
+ }
+ return -1;
+ };
+ }
+
+ //utility methods
+ $.fn.extend({
+ getSetSSValue: function(value){
+ if (value){
+ //set value and trigger change event
+ $(this).val(value).change();
+ return this;
+ } else {
+ return $(this).find(':selected').val();
+ }
+ },
+ //added by Justin Beasley
+ resetSS: function(){
+ var oldOpts = $(this).data('ssOpts');
+ $this = $(this);
+ $this.next().remove();
+ //unbind all events and redraw
+ $this.unbind('.sSelect').sSelect(oldOpts);
+ }
+ });
+
+ $.fn.sSelect = function(options){
+ return this.each(function(){
+ var defaults = {
+ defaultText: 'Please select',
+ animationSpeed: 0, //set speed of dropdown
+ ddMaxHeight: '', //set css max-height value of dropdown
+ containerClass: '' //additional classes for container div
+ };
+
+ //initial variables
+ var opts = $.extend(defaults, options),
+ $input = $(this),
+ $containerDivText = $('<div class="selectedTxt"></div>'),
+ $containerDiv = $('<div class="newListSelected ' + opts.containerClass + ($input.is(':disabled') ? ' newListDisabled' : '') + '"></div>'),
+ $containerDivWrapper = $('<div class="SSContainerDivWrapper" style="visibility:hidden;"></div>'),
+ $newUl = $('<ul class="newList"></ul>'),
+ currentIndex = -1,
+ prevIndex = -1,
+ keys = [],
+ prevKey = false,
+ prevented = false,
+ $newLi;
+
+ //added by Justin Beasley
+ $(this).data('ssOpts',options);
+
+ if( $(this).next('.newListSelected').length ) {
+ return;
+ }
+
+ //build new list
+ $containerDiv.insertAfter($input);
+ $containerDiv.attr("tabindex", $input.attr("tabindex") || "0");
+ $containerDivText.prependTo($containerDiv);
+ $newUl.appendTo($containerDiv);
+ $newUl.wrap($containerDivWrapper);
+ $containerDivWrapper = $newUl.parent();
+ $input.hide();
+
+ if($input.is(':disabled')){
+ return;
+ }
+
+ //added by Justin Beasley (used for lists initialized while hidden)
+ $containerDivText.data('ssReRender',!$containerDivText.is(':visible'));
+
+ //add one item to list
+ function addItem(item, container) {
+ var option = $(item).text(),
+ key = $(item).val(),
+ isDisabled = $(item).is(':disabled');
+
+ if (!isDisabled && !$(item).parents().is(':disabled')) {
+ //add first letter of each word to array
+ keys.push(option.charAt(0).toLowerCase());
+ }
+ container.append($('<li><a'+(isDisabled ? ' class="newListItemDisabled"' : '')+' href="JavaScript:void(0);">'+option+'</a></li>').data({
+ 'key' : key,
+ 'selected' : $(item).is(':selected')
+ }));
+ }
+
+ $input.children().each(function(){
+ if ($(this).is('option')){
+ addItem(this, $newUl);
+ } else {
+ var optionTitle = $(this).attr('label'),
+ $optGroup = $('<li class="newListOptionTitle ' + ($(this).is(':disabled') ? 'newListOptionDisabled' : '') + '">'+optionTitle+'</li>'),
+ $optGroupList = $('<ul></ul>');
+
+ $optGroup.appendTo($newUl);
+ $optGroupList.appendTo($optGroup);
+
+ $(this).children().each(function(){
+ addItem(this, $optGroupList);
+ });
+ }
+ });
+
+ //cache list items object
+ $newLi = $newUl.find('li a:not(.newListItemDisabled)').not(function(){
+ return $(this).parents().hasClass('newListOptionDisabled');
+ });
+
+ //get selected item from new list (because it doesn't contain disabled options)
+ $newLi.each(function(i){
+ if ($(this).parent().data('selected')){
+ opts.defaultText = $(this).html();
+ currentIndex = prevIndex = i;
+ }
+ });
+
+ //get heights of new elements for use later
+ var newUlHeight = $newUl.height(),
+ containerHeight = $containerDiv.height(),
+ newLiLength = $newLi.length;
+
+ //check if a value is selected
+ if (currentIndex != -1){
+ navigateList(currentIndex);
+ } else {
+ //set placeholder text
+ $containerDivText.text(opts.defaultText);
+ }
+
+ //decide if to place the new list above or below the drop-down
+ function newUlPos(){
+ var containerPosY = $containerDiv.offset().top,
+ docHeight = $(window).height(),
+ scrollTop = $(window).scrollTop();
+
+ //if height of list is greater then max height, set list height to max height value
+ if (newUlHeight > parseInt(opts.ddMaxHeight)){
+ newUlHeight = parseInt(opts.ddMaxHeight);
+ }
+
+ containerPosY = containerPosY-scrollTop;
+ if (containerPosY+newUlHeight >= docHeight){
+ $newUl.css({
+ height: newUlHeight
+ });
+ $containerDivWrapper.css({
+ top: '-'+newUlHeight+'px',
+ height: newUlHeight
+ });
+ $input.onTop = true;
+ } else {
+ $newUl.css({
+ height: newUlHeight
+ });
+ $containerDivWrapper.css({
+ top: containerHeight+'px',
+ height: newUlHeight
+ });
+ $input.onTop = false;
+ }
+ }
+
+ //run function on page load
+ newUlPos();
+
+ //run function on browser window resize
+ $(window).bind('resize.sSelect scroll.sSelect', newUlPos);
+
+ //positioning
+ function positionFix(){
+ $containerDiv.css('position','relative');
+ }
+
+ function positionHideFix(){
+ $containerDiv.css(
+ {
+ position: 'static'
+ });
+ }
+
+ $containerDivText.bind('click.sSelect',function(event){
+ event.stopPropagation();
+
+ //added by Justin Beasley
+ if($(this).data('ssReRender')){
+ newUlHeight = $newUl.height('').height();
+ $containerDivWrapper.height('');
+ containerHeight = $containerDiv.height();
+ $(this).data('ssReRender',false);
+ newUlPos();
+ }
+
+ //hide all menus apart from this one
+ $('.SSContainerDivWrapper')
+ .not($(this).next())
+ .hide()
+ .parent()
+ .css('position', 'static')
+ .removeClass('newListSelFocus');
+
+ //show/hide this menu
+ $containerDivWrapper.toggle();
+ positionFix();
+
+ //scroll list to selected item
+ if(currentIndex == -1) currentIndex = 0;
+ try {
+ $newLi.eq(currentIndex).focus();
+ } catch(ex) {}
+ });
+
+ function closeDropDown(fireChange, resetText){
+ if(fireChange == true){
+ prevIndex = currentIndex;
+ $input.change();
+ }
+
+ if(resetText == true){
+ currentIndex = prevIndex;
+ navigateList(currentIndex);
+ }
+
+ $containerDivWrapper.hide();
+ positionHideFix();
+ }
+
+ $newLi.bind('click.sSelect',function(e){
+ var $clickedLi = $(e.target);
+
+ //update counter
+ currentIndex = $newLi.index($clickedLi);
+
+ //remove all hilites, then add hilite to selected item
+ prevented = true;
+ navigateList(currentIndex, true);
+ closeDropDown();
+ });
+
+ $newLi.bind('mouseenter.sSelect',
+ function(e){
+ var $hoveredLi = $(e.target);
+ $hoveredLi.addClass('newListHover');
+ }).bind('mouseleave.sSelect',
+ function(e){
+ var $hoveredLi = $(e.target);
+ $hoveredLi.removeClass('newListHover');
+ });
+
+ function navigateList(currentIndex, fireChange){
+ if(currentIndex == -1){
+ $containerDivText.text(opts.defaultText);
+ $newLi.removeClass('hiLite');
+ } else {
+ $newLi.removeClass('hiLite')
+ .eq(currentIndex)
+ .addClass('hiLite');
+
+ var text = $newLi.eq(currentIndex).text(),
+ val = $newLi.eq(currentIndex).parent().data('key');
+
+ try {
+ $input.val(val);
+ } catch(ex) {
+ // handle ie6 exception
+ $input[0].selectedIndex = currentIndex;
+ }
+
+ $containerDivText.text(text);
+
+ //only fire change event if specified
+ if(fireChange == true){
+ prevIndex = currentIndex;
+ $input.change();
+ }
+
+ if ($containerDivWrapper.is(':visible')){
+ try {
+ $newLi.eq(currentIndex).focus();
+ } catch(ex) {}
+ }
+ }
+ }
+
+ $input.bind('change.sSelect',function(event){
+ var $targetInput = $(event.target);
+ //stop change function from firing
+ if (prevented == true){
+ prevented = false;
+ return false;
+ }
+ var $currentOpt = $targetInput.find(':selected');
+ currentIndex = $targetInput.find('option').index($currentOpt);
+ navigateList(currentIndex);
+ });
+
+ //handle up and down keys
+ function keyPress(element){
+ //when keys are pressed
+ $(element).unbind('keydown.sSelect').bind('keydown.sSelect',function(e){
+ var keycode = e.which;
+
+ //prevent change function from firing
+ prevented = true;
+
+ switch(keycode){
+ case 40: //down
+ case 39: //right
+ incrementList();
+ return false;
+ break;
+ case 38: //up
+ case 37: //left
+ decrementList();
+ return false;
+ break;
+ case 33: //page up
+ case 36: //home
+ gotoFirst();
+ return false;
+ break;
+ case 34: //page down
+ case 35: //end
+ gotoLast();
+ return false;
+ break;
+ case 13: //enter
+ case 27: //esc
+ closeDropDown(true);
+ return false;
+ break;
+ case 9: //tab
+ closeDropDown(true);
+ nextFormElement();
+ return false;
+ break;
+ }
+
+ //check for keyboard shortcuts
+ keyPressed = String.fromCharCode(keycode).toLowerCase();
+
+ var currentKeyIndex = keys.indexOf(keyPressed);
+
+ if (typeof currentKeyIndex != 'undefined'){ //if key code found in array
+ ++currentIndex;
+ currentIndex = keys.indexOf(keyPressed, currentIndex); //search array from current index
+
+ if (currentIndex == -1 || currentIndex == null || prevKey != keyPressed){
+ // if no entry was found or new key pressed search from start of array
+ currentIndex = keys.indexOf(keyPressed);
+ }
+
+ navigateList(currentIndex);
+ //store last key pressed
+ prevKey = keyPressed;
+ return false;
+ }
+ });
+ }
+
+ function incrementList(){
+ if (currentIndex < (newLiLength-1)){
+ ++currentIndex;
+ navigateList(currentIndex);
+ }
+ }
+
+ function decrementList(){
+ if (currentIndex > 0){
+ --currentIndex;
+ navigateList(currentIndex);
+ }
+ }
+
+ function gotoFirst(){
+ currentIndex = 0;
+ navigateList(currentIndex);
+ }
+
+ function gotoLast(){
+ currentIndex = newLiLength-1;
+ navigateList(currentIndex);
+ }
+
+ $containerDiv.bind('click.sSelect',function(e){
+ e.stopPropagation();
+ keyPress(this);
+ });
+
+ $containerDiv.bind('focus.sSelect',function(){
+ $(this).addClass('newListSelFocus');
+ keyPress(this);
+ });
+
+ $containerDiv.bind('blur.sSelect',function(){
+ $(this).removeClass('newListSelFocus');
+ });
+
+ //hide list on blur
+ $(document).bind('click.sSelect',function(){
+ $containerDiv.removeClass('newListSelFocus');
+ if ($containerDivWrapper.is(':visible')){
+ closeDropDown(false, true);
+ } else {
+ closeDropDown(false);
+ }
+ });
+
+ //select next form element in document
+ function nextFormElement() {
+ var fields = $('body').find('button,input,textarea,select'),
+ index = fields.index($input);
+ if (index > -1 && (index + 1) < fields.length) {
+ fields.eq(index + 1).focus();
+ }
+ return false;
+ }
+ // handle focus on original select element
+ $input.focus(function(){
+ $input.next().focus();
+ });
+
+ //add classes on hover
+ $containerDivText.bind('mouseenter.sSelect',
+ function(e){
+ var $hoveredTxt = $(e.target);
+ $hoveredTxt.parent().addClass('newListSelHover');
+ }).bind('mouseleave.sSelect',
+ function(e){
+ var $hoveredTxt = $(e.target);
+ $hoveredTxt.parent().removeClass('newListSelHover');
+ });
+
+ //reset left property and hide
+ $containerDivWrapper.css({
+ left: '0',
+ display: 'none',
+ visibility: 'visible'
+ });
+
+ });
+
+ };
+
+})(jQuery); \ No newline at end of file
diff --git a/library/stylish_select/select-bg.png b/library/stylish_select/select-bg.png
new file mode 100755
index 000000000..151eda726
--- /dev/null
+++ b/library/stylish_select/select-bg.png
Binary files differ
diff --git a/library/stylish_select/stylish-select.css b/library/stylish_select/stylish-select.css
new file mode 100755
index 000000000..1f3dcd28d
--- /dev/null
+++ b/library/stylish_select/stylish-select.css
@@ -0,0 +1,121 @@
+/**
+* Stylish Select 0.4.9 - $ plugin to replace a select drop down box with a stylable unordered list
+* http://github.com/scottdarby/Stylish-Select/
+*
+* Copyright (c) 2009 Scott Darby
+*
+* Requires: jQuery 1.3 or newer
+*
+* Dual licensed under the MIT and GPL licenses.
+*/
+
+/**
+* Hide lists on page load
+---------------------------------------------------------*/
+
+.stylish-select .SSContainerDivWrapper {
+ left:-9999px;
+}
+
+/*
+* Red example
+---------------------------------------------------------*/
+.stylish-select .SSContainerDivWrapper {
+ margin:0;
+ padding:0;
+ width:290px;
+ position:absolute;
+ top:22px;
+ left:0;
+ z-index:2;
+}
+
+.stylish-select ul.newList {
+ margin:0;
+ padding:0;
+ list-style:none;
+ color:#000;
+ background:#fff;
+ border:1px solid #ccc;
+ overflow:auto;
+}
+
+.stylish-select ul.newList * {
+ margin:0;
+ padding:0;
+}
+
+
+.stylish-select ul.newList a {
+ color: #000;
+ text-decoration:none;
+ display:block;
+ padding:3px 8px;
+}
+
+.stylish-select .newListSelected {
+ width:285px;
+ color:#000;
+ height:19px;
+ padding:3px 0 0 6px;
+ float:left;
+ background:url(select-bg.png) no-repeat;
+}
+
+.stylish-select ul.newList li a:focus {
+ -moz-outline-style: none;
+}
+
+.stylish-select .selectedTxt {
+ width:258px;
+ overflow:hidden;
+ height:16px;
+ padding:0 23px 0 0;
+}
+
+.stylish-select .hiLite {
+ background:#650101!important;
+ color:#fff!important;
+}
+
+.stylish-select .newListHover {
+ background:#ccc!important;
+ color:#000!important;
+ cursor:default;
+}
+
+.stylish-select .newListDisabled {
+ opacity: 0.6;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)";
+ filter: alpha(opacity=60);
+}
+
+.stylish-select .newListItemDisabled {
+ opacity: 0.6;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)";
+ filter: alpha(opacity=60);
+}
+
+.stylish-select .newListOptionDisabled {
+ opacity: 0.6;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)";
+ filter: alpha(opacity=60);
+}
+
+.stylish-select .newListSelHover,
+.stylish-select .newListSelFocus {
+ background-position:0 -22px;
+ cursor:default;
+}
+
+.stylish-select .newListOptionTitle {
+ font-weight:bold;
+}
+
+.stylish-select .newListOptionTitle ul {
+ margin:3px 0 0;
+}
+
+.stylish-select .newListOptionTitle li {
+ font-weight:normal;
+} \ No newline at end of file
diff --git a/library/twitteroauth.php b/library/twitteroauth.php
index 7f3dcba4d..009ad56bd 100644
--- a/library/twitteroauth.php
+++ b/library/twitteroauth.php
@@ -18,7 +18,7 @@ class TwitterOAuth {
/* Contains the last API call. */
public $url;
/* Set up the API root URL. */
- public $host = "https://api.twitter.com/1/";
+ public $host = "https://api.twitter.com/1.1/";
/* Set timeout default. */
public $timeout = 30;
/* Set connect timeout. */